<?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>171444</bug_id>
          
          <creation_ts>2017-04-28 12:51:38 -0700</creation_ts>
          <short_desc>Speedometer: Add a React.js TodoMVC implementation</short_desc>
          <delta_ts>2019-05-02 16:24:11 -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>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>170513</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Addy Osmani">addyo</reporter>
          <assigned_to name="Addy Osmani">addyo</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>lforschler</cc>
    
    <cc>rniwa</cc>
    
    <cc>sainianky835</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1302723</commentid>
    <comment_count>0</comment_count>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-04-28 12:51:38 -0700</bug_when>
    <thetext>As part of Speedometer 2.0 (https://bugs.webkit.org/show_bug.cgi?id=170513), this brings an up to date React TodoMVC implementation to the benchmark.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302726</commentid>
    <comment_count>1</comment_count>
      <attachid>308579</attachid>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-04-28 12:56:27 -0700</bug_when>
    <thetext>Created attachment 308579
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302866</commentid>
    <comment_count>2</comment_count>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-04-28 16:35:36 -0700</bug_when>
    <thetext>Note: we will want to also remove Speedometer/resources/todomvc/labs/architecture-examples/react (old version)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306572</commentid>
    <comment_count>3</comment_count>
      <attachid>308579</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-05-09 14:26:26 -0700</bug_when>
    <thetext>Comment on attachment 308579
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=308579&amp;action=review

&gt; PerformanceTests/ChangeLog:7
&gt; +        Speedometer: add React.js TodoMVC implementation

Again, we need a blank line before this.

&gt; PerformanceTests/ChangeLog:10
&gt; +        (app.Utils.uuid):

Also remove these inline comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307795</commentid>
    <comment_count>4</comment_count>
      <attachid>309875</attachid>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-05-11 23:46:13 -0700</bug_when>
    <thetext>Created attachment 309875
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307796</commentid>
    <comment_count>5</comment_count>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-05-11 23:46:52 -0700</bug_when>
    <thetext>Added a blank line and removed extraneous comments from the changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307823</commentid>
    <comment_count>6</comment_count>
      <attachid>309875</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-12 02:00:50 -0700</bug_when>
    <thetext>Comment on attachment 309875
Patch

Clearing flags on attachment: 309875

Committed r216754: &lt;http://trac.webkit.org/changeset/216754&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307824</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-12 02:00:52 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308579</attachid>
            <date>2017-04-28 12:56:27 -0700</date>
            <delta_ts>2017-05-11 23:46:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171444-20170428125626.patch</filename>
            <type>text/plain</type>
            <size>604117</size>
            <attacher name="Addy Osmani">addyo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1ODMwCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGI5ZTE0YmUyOGRh
MmFmOTBlNjBmNGI5MTQ4OGI0NzE1ODQ0OGE2Y2IuLmY3OWUwYjJmNDQ5MjhkZjY5MjM5MzFiMjZh
OGY2YmFlMmNiOTY0NzUgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTU1IEBACisyMDE3LTA0
LTI4ICBBZGR5IE9zbWFuaSAgPGFkZHlvc21hbmlAZ21haWwuY29tPgorCisgICAgICAgIFNwZWVk
b21ldGVyOiBBZGQgYSBSZWFjdC5qcyBUb2RvTVZDIGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzE0NDQKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgU3BlZWRvbWV0ZXI6IGFkZCBSZWFj
dC5qcyBUb2RvTVZDIGltcGxlbWVudGF0aW9uCisKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvYnVpbGQubWluLmpzOiBB
ZGRlZC4KKyAgICAgICAgKGFwcC5VdGlscy51dWlkKToKKyAgICAgICAgKGFwcC5VdGlscy5wbHVy
YWxpemUpOgorICAgICAgICAoYXBwLlV0aWxzLmV4dGVuZCk6CisgICAgICAgIChhcHAuVG9kb01v
ZGVsKToKKyAgICAgICAgKGFwcC5Ub2RvTW9kZWwucHJvdG90eXBlLnN1YnNjcmliZSk6CisgICAg
ICAgIChhcHAuVG9kb01vZGVsLnByb3RvdHlwZS5pbmZvcm0pOgorICAgICAgICAoYXBwLlRvZG9N
b2RlbC5wcm90b3R5cGUuYWRkVG9kbyk6CisgICAgICAgIChhcHAuVG9kb01vZGVsLnByb3RvdHlw
ZS50b2dnbGVBbGwpOgorICAgICAgICAoYXBwLlRvZG9Nb2RlbC5wcm90b3R5cGUudG9nZ2xlKToK
KyAgICAgICAgKGFwcC5Ub2RvTW9kZWwucHJvdG90eXBlLmRlc3Ryb3kpOgorICAgICAgICAoYXBw
LlRvZG9Nb2RlbC5wcm90b3R5cGUuc2F2ZSk6CisgICAgICAgIChhcHAuVG9kb01vZGVsLnByb3Rv
dHlwZS5jbGVhckNvbXBsZXRlZCk6CisgICAgICAgIChUb2RvRm9vdGVyLlJlYWN0LmNyZWF0ZUNs
YXNzLnJlbmRlcik6CisgICAgICAgIChUb2RvSXRlbS5SZWFjdC5jcmVhdGVDbGFzcy5oYW5kbGVT
dWJtaXQpOgorICAgICAgICAoVG9kb0l0ZW0uUmVhY3QuY3JlYXRlQ2xhc3MuaGFuZGxlRWRpdCk6
CisgICAgICAgIChUb2RvSXRlbS5SZWFjdC5jcmVhdGVDbGFzcy5oYW5kbGVLZXlEb3duKToKKyAg
ICAgICAgKFRvZG9JdGVtLlJlYWN0LmNyZWF0ZUNsYXNzLmhhbmRsZUNoYW5nZSk6CisgICAgICAg
IChUb2RvSXRlbS5SZWFjdC5jcmVhdGVDbGFzcy5nZXRJbml0aWFsU3RhdGUpOgorICAgICAgICAo
VG9kb0l0ZW0uUmVhY3QuY3JlYXRlQ2xhc3Muc2hvdWxkQ29tcG9uZW50VXBkYXRlKToKKyAgICAg
ICAgKFRvZG9JdGVtLlJlYWN0LmNyZWF0ZUNsYXNzLmNvbXBvbmVudERpZFVwZGF0ZSk6CisgICAg
ICAgIChUb2RvSXRlbS5SZWFjdC5jcmVhdGVDbGFzcy5yZW5kZXIpOgorICAgICAgICAoVG9kb0Fw
cC5SZWFjdC5jcmVhdGVDbGFzcy5nZXRJbml0aWFsU3RhdGUpOgorICAgICAgICAoVG9kb0FwcC5S
ZWFjdC5jcmVhdGVDbGFzcy5jb21wb25lbnREaWRNb3VudCk6CisgICAgICAgIChUb2RvQXBwLlJl
YWN0LmNyZWF0ZUNsYXNzLmhhbmRsZUNoYW5nZSk6CisgICAgICAgIChUb2RvQXBwLlJlYWN0LmNy
ZWF0ZUNsYXNzLmhhbmRsZU5ld1RvZG9LZXlEb3duKToKKyAgICAgICAgKFRvZG9BcHAuUmVhY3Qu
Y3JlYXRlQ2xhc3MudG9nZ2xlQWxsKToKKyAgICAgICAgKFRvZG9BcHAuUmVhY3QuY3JlYXRlQ2xh
c3MudG9nZ2xlKToKKyAgICAgICAgKFRvZG9BcHAuUmVhY3QuY3JlYXRlQ2xhc3MuZGVzdHJveSk6
CisgICAgICAgIChUb2RvQXBwLlJlYWN0LmNyZWF0ZUNsYXNzLmVkaXQpOgorICAgICAgICAoVG9k
b0FwcC5SZWFjdC5jcmVhdGVDbGFzcy5zYXZlKToKKyAgICAgICAgKFRvZG9BcHAuUmVhY3QuY3Jl
YXRlQ2xhc3MuY2FuY2VsKToKKyAgICAgICAgKFRvZG9BcHAuUmVhY3QuY3JlYXRlQ2xhc3MuY2xl
YXJDb21wbGV0ZWQpOgorICAgICAgICAoVG9kb0FwcC5SZWFjdC5jcmVhdGVDbGFzcy5yZW5kZXIp
OgorICAgICAgICAocmVuZGVyKToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvaW5kZXguaHRtbDogQWRkZWQuCisgICAg
ICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L3JlYWN0L2pzL2FwcC5qc3g6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9saWNlbnNlLm1kOiBBZGRlZC4K
KyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qczogQWRkZWQuCisgICAg
ICAgIChjbGFzc05hbWVzKToKKyAgICAgICAgKGVsc2UpOgorICAgICAgICAqIFNwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVs
ZXMvY2xhc3NuYW1lcy9kZWR1cGUuanM6IEFkZGVkLgorICAgICAgICAoX3BhcnNlQXJyYXkpOgor
ICAgICAgICAoX3BhcnNlTnVtYmVyKToKKyAgICAgICAgKF9wYXJzZU9iamVjdCk6CisgICAgICAg
IChfcGFyc2VTdHJpbmcpOgorICAgICAgICAoX3BhcnNlKToKKyAgICAgICAgKF9jbGFzc05hbWVz
KToKKyAgICAgICAgKGNsYXNzTmFtZXMpOgorICAgICAgICAoZWxzZSk6CisgICAgICAgICogU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25v
ZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzOiBBZGRlZC4KKyAgICAgICAgKGNsYXNzTmFt
ZXMpOgorICAgICAgICAoZWxzZSk6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9yZWFjdC1kb20v
ZGlzdC9yZWFjdC1kb20ubWluLmpzOiBBZGRlZC4KKyAgICAgICAgKHJldHVybi5vKToKKyAgICAg
ICAgKHJldHVybi5yZXR1cm4uZSk6CisgICAgICAgIChyZXR1cm4uKToKKyAgICAgICAgKHJldHVy
bik6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9yZWFjdC9kaXN0L3JlYWN0LXdpdGgtYWRkb25z
LmpzOiBBZGRlZC4KKyAgICAgICAgKGVsc2UpOgorICAgICAgICAoZWxzZS5lbHNlKToKKyAgICAg
ICAgKHMpOgorICAgICAgICAocmV0dXJuLmUpOgorICAgICAgICAobWFrZVByZWZpeE1hcCk6Cisg
ICAgICAgIChnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSk6CisgICAgICAgICgxKToKKyAgICAg
ICAgKGVzY2FwZSk6CisgICAgICAgICh1bmVzY2FwZSk6CisgICAgICAgICgyKToKKyAgICAgICAg
KExpbmtlZFN0YXRlTWl4aW4ubGlua1N0YXRlKToKKyAgICAgICAgKDMpOgorICAgICAgICAob25l
QXJndW1lbnRQb29sZXIpOgorICAgICAgICAodHdvQXJndW1lbnRQb29sZXIpOgorICAgICAgICAo
dGhyZWVBcmd1bWVudFBvb2xlcik6CisgICAgICAgIChmb3VyQXJndW1lbnRQb29sZXIpOgorICAg
ICAgICAoc3RhbmRhcmRSZWxlYXNlcik6CisgICAgICAgIChhZGRQb29saW5nVG8pOgorICAgICAg
ICAoNCk6CisgICAgICAgIChfX3NwcmVhZCk6CisgICAgICAgIChSZWFjdC5jcmVhdGVNaXhpbik6
CisgICAgICAgIChnZXRSZWFjdERPTSk6CisgICAgICAgIChleHBvcnRzLmdldFJlYWN0UGVyZik6
CisgICAgICAgIChleHBvcnRzLmdldFJlYWN0VGVzdFV0aWxzKToKKyAgICAgICAgKDYpOgorICAg
ICAgICAoX2NsYXNzQ2FsbENoZWNrKToKKyAgICAgICAgKF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0
dXJuKToKKyAgICAgICAgKF9pbmhlcml0cyk6CisgICAgICAgIChjcmVhdGVUcmFuc2l0aW9uVGlt
ZW91dFByb3BWYWxpZGF0b3IpOgorICAgICAgICAoUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXApOgor
ICAgICAgICAoUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXAucHJvdG90eXBlLnJlbmRlcik6CisgICAg
ICAgICg3KToKKyAgICAgICAgKFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwQ2hpbGQuKToKKyAgICAg
ICAgKFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwQ2hpbGQpOgorICAgICAgICAoUmVhY3RDU1NUcmFu
c2l0aW9uR3JvdXBDaGlsZC5wcm90b3R5cGUuY29tcG9uZW50V2lsbE1vdW50KToKKyAgICAgICAg
KFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwQ2hpbGQucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50
KToKKyAgICAgICAgKFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwQ2hpbGQucHJvdG90eXBlLmNvbXBv
bmVudFdpbGxVbm1vdW50KToKKyAgICAgICAgKFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwQ2hpbGQu
cHJvdG90eXBlLnJlbmRlcik6CisgICAgICAgICg4KToKKyAgICAgICAgKGVzY2FwZVVzZXJQcm92
aWRlZEtleSk6CisgICAgICAgIChGb3JFYWNoQm9va0tlZXBpbmcpOgorICAgICAgICAoRm9yRWFj
aEJvb2tLZWVwaW5nLnByb3RvdHlwZS5kZXN0cnVjdG9yKToKKyAgICAgICAgKGZvckVhY2hTaW5n
bGVDaGlsZCk6CisgICAgICAgIChmb3JFYWNoQ2hpbGRyZW4pOgorICAgICAgICAoTWFwQm9va0tl
ZXBpbmcpOgorICAgICAgICAoTWFwQm9va0tlZXBpbmcucHJvdG90eXBlLmRlc3RydWN0b3IpOgor
ICAgICAgICAobWFwU2luZ2xlQ2hpbGRJbnRvQ29udGV4dCk6CisgICAgICAgIChtYXBJbnRvV2l0
aEtleVByZWZpeEludGVybmFsKToKKyAgICAgICAgKG1hcENoaWxkcmVuKToKKyAgICAgICAgKGZv
ckVhY2hTaW5nbGVDaGlsZER1bW15KToKKyAgICAgICAgKGNvdW50Q2hpbGRyZW4pOgorICAgICAg
ICAodG9BcnJheSk6CisgICAgICAgICg5KToKKyAgICAgICAgKGlkZW50aXR5KToKKyAgICAgICAg
KFJFU0VSVkVEX1NQRUNfS0VZUy5kaXNwbGF5TmFtZSk6CisgICAgICAgIChSRVNFUlZFRF9TUEVD
X0tFWVMubWl4aW5zKToKKyAgICAgICAgKFJFU0VSVkVEX1NQRUNfS0VZUy5jaGlsZENvbnRleHRU
eXBlcyk6CisgICAgICAgIChSRVNFUlZFRF9TUEVDX0tFWVMuY29udGV4dFR5cGVzKToKKyAgICAg
ICAgKFJFU0VSVkVEX1NQRUNfS0VZUy5nZXREZWZhdWx0UHJvcHMpOgorICAgICAgICAoUkVTRVJW
RURfU1BFQ19LRVlTLnByb3BUeXBlcyk6CisgICAgICAgIChSRVNFUlZFRF9TUEVDX0tFWVMuc3Rh
dGljcyk6CisgICAgICAgIChSRVNFUlZFRF9TUEVDX0tFWVMuYXV0b2JpbmQpOgorICAgICAgICAo
dmFsaWRhdGVNZXRob2RPdmVycmlkZSk6CisgICAgICAgIChtaXhTcGVjSW50b0NvbXBvbmVudCk6
CisgICAgICAgIChtaXhTdGF0aWNTcGVjSW50b0NvbXBvbmVudCk6CisgICAgICAgIChtZXJnZUlu
dG9XaXRoTm9EdXBsaWNhdGVLZXlzKToKKyAgICAgICAgKHJldHVybi5tZXJnZWRSZXN1bHQpOgor
ICAgICAgICAoY3JlYXRlTWVyZ2VkUmVzdWx0RnVuY3Rpb24pOgorICAgICAgICAocmV0dXJuLmNo
YWluZWRGdW5jdGlvbik6CisgICAgICAgIChjcmVhdGVDaGFpbmVkRnVuY3Rpb24pOgorICAgICAg
ICAoYm91bmRNZXRob2QuYmluZCk6CisgICAgICAgIChiaW5kQXV0b0JpbmRNZXRob2QpOgorICAg
ICAgICAoYmluZEF1dG9CaW5kTWV0aG9kcyk6CisgICAgICAgIChSZWFjdENsYXNzTWl4aW4ucmVw
bGFjZVN0YXRlKToKKyAgICAgICAgKFJlYWN0Q2xhc3NNaXhpbi5pc01vdW50ZWQpOgorICAgICAg
ICAoUmVhY3RDbGFzc0NvbXBvbmVudCk6CisgICAgICAgIChSZWFjdENsYXNzLmNyZWF0ZUNsYXNz
KToKKyAgICAgICAgKFJlYWN0Q2xhc3MuaW5qZWN0aW9uLmluamVjdE1peGluKToKKyAgICAgICAg
KDEwKToKKyAgICAgICAgKFJlYWN0Q29tcG9uZW50KToKKyAgICAgICAgKFJlYWN0Q29tcG9uZW50
LnByb3RvdHlwZS5zZXRTdGF0ZSk6CisgICAgICAgIChSZWFjdENvbXBvbmVudC5wcm90b3R5cGUu
Zm9yY2VVcGRhdGUpOgorICAgICAgICAoZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAg
ICAgKGdldCBmb3IpOgorICAgICAgICAoMTEpOgorICAgICAgICAoaXNOYXRpdmUpOgorICAgICAg
ICAoMTIpOgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3QvZGlzdC9yZWFjdC13aXRoLWFk
ZG9ucy5taW4uanM6IEFkZGVkLgorICAgICAgICAobyk6CisgICAgICAgIChyZXR1cm4uZSk6Cisg
ICAgICAgIChyKToKKyAgICAgICAgKDEpOgorICAgICAgICAoMik6CisgICAgICAgIChpLmxpbmtT
dGF0ZSk6CisgICAgICAgICgzKToKKyAgICAgICAgKGkpOgorICAgICAgICAoYSk6CisgICAgICAg
IChzKToKKyAgICAgICAgKHUpOgorICAgICAgICAocCk6CisgICAgICAgICg0KToKKyAgICAgICAg
KG0uY3JlYXRlTWl4aW4pOgorICAgICAgICAoNSk6CisgICAgICAgICg2KToKKyAgICAgICAgKHQu
aS5fd3JhcENoaWxkKToKKyAgICAgICAgKHQucHJvdG90eXBlLnJlbmRlcik6CisgICAgICAgIChk
KToKKyAgICAgICAgKDcpOgorICAgICAgICAodC5jKToKKyAgICAgICAgKHQuaS50cmFuc2l0aW9u
KToKKyAgICAgICAgKHQuaS5xdWV1ZUNsYXNzQW5kTm9kZSk6CisgICAgICAgICh0LmkuZmx1c2hD
bGFzc05hbWVBbmROb2RlUXVldWUpOgorICAgICAgICAodC5pLmNvbXBvbmVudFdpbGxBcHBlYXIp
OgorICAgICAgICAodC5pLmNvbXBvbmVudFdpbGxFbnRlcik6CisgICAgICAgICh0LmkuY29tcG9u
ZW50V2lsbExlYXZlKToKKyAgICAgICAgKHQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxNb3VudCk6
CisgICAgICAgICh0LnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudCk6CisgICAgICAgICh0LnBy
b3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudCk6CisgICAgICAgIChoKToKKyAgICAgICAgKDgp
OgorICAgICAgICAobCk6CisgICAgICAgIChmKToKKyAgICAgICAgKG8ucHJvdG90eXBlLmRlc3Ry
dWN0b3IpOgorICAgICAgICAocy5wcm90b3R5cGUuZGVzdHJ1Y3Rvcik6CisgICAgICAgICg5KToK
KyAgICAgICAgKGMpOgorICAgICAgICAoXy5kaXNwbGF5TmFtZSk6CisgICAgICAgIChfLm1peGlu
cyk6CisgICAgICAgIChfLmNoaWxkQ29udGV4dFR5cGVzKToKKyAgICAgICAgKF8uY29udGV4dFR5
cGVzKToKKyAgICAgICAgKF8uZ2V0RGVmYXVsdFByb3BzKToKKyAgICAgICAgKF8ucHJvcFR5cGVz
KToKKyAgICAgICAgKF8uc3RhdGljcyk6CisgICAgICAgIChfLmF1dG9iaW5kKToKKyAgICAgICAg
KHcucmVwbGFjZVN0YXRlKToKKyAgICAgICAgKHcuaXNNb3VudGVkKToKKyAgICAgICAgKEEpOgor
ICAgICAgICAoVC5jcmVhdGVDbGFzcyk6CisgICAgICAgIChULmluamVjdGlvbi5pbmplY3RNaXhp
bik6CisgICAgICAgICgxMCk6CisgICAgICAgIChyLnByb3RvdHlwZS5zZXRTdGF0ZSk6CisgICAg
ICAgIChyLnByb3RvdHlwZS5mb3JjZVVwZGF0ZSk6CisgICAgICAgICgxMSk6CisgICAgICAgIChv
LnNob3VsZENvbXBvbmVudFVwZGF0ZSk6CisgICAgICAgICgxMik6CisgICAgICAgICgxMyk6Cisg
ICAgICAgICgxNCk6CisgICAgICAgIChwLmNyZWF0ZUVsZW1lbnQpOgorICAgICAgICAocC5jcmVh
dGVGYWN0b3J5KToKKyAgICAgICAgKHAuY2xvbmVBbmRSZXBsYWNlS2V5KToKKyAgICAgICAgKHAu
Y2xvbmVFbGVtZW50KToKKyAgICAgICAgKHAuaXNWYWxpZEVsZW1lbnQpOgorICAgICAgICAoMTUp
OgorICAgICAgICAoMTYpOgorICAgICAgICAoMTcpOgorICAgICAgICAoMTgpOgorICAgICAgICAo
MTkpOgorICAgICAgICAoMjApOgorICAgICAgICAoMjEpOgorICAgICAgICAodC5leHBvcnRzLmkp
OgorICAgICAgICAoMjIpOgorICAgICAgICAoby5jcmVhdGVTdGF0ZVNldHRlcik6CisgICAgICAg
IChvLmNyZWF0ZVN0YXRlS2V5U2V0dGVyKToKKyAgICAgICAgKG8uTWl4aW4uY3JlYXRlU3RhdGVT
ZXR0ZXIpOgorICAgICAgICAoby5NaXhpbi5jcmVhdGVTdGF0ZUtleVNldHRlcik6CisgICAgICAg
ICgyMyk6CisgICAgICAgIChvLmdldENoaWxkTWFwcGluZyk6CisgICAgICAgIChvLik6CisgICAg
ICAgIChvLm1lcmdlQ2hpbGRNYXBwaW5ncyk6CisgICAgICAgICgyNCk6CisgICAgICAgICh1LmFk
ZEVuZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAodS5yZW1vdmVFbmRFdmVudExpc3RlbmVyKToK
KyAgICAgICAgKDI1KToKKyAgICAgICAgKHQuaS5wZXJmb3JtQXBwZWFyKToKKyAgICAgICAgKHQu
aS5faGFuZGxlRG9uZUFwcGVhcmluZyk6CisgICAgICAgICh0LmkucGVyZm9ybUVudGVyKToKKyAg
ICAgICAgKHQuaS5faGFuZGxlRG9uZUVudGVyaW5nKToKKyAgICAgICAgKHQuaS5wZXJmb3JtTGVh
dmUpOgorICAgICAgICAodC5pLl9oYW5kbGVEb25lTGVhdmluZyk6CisgICAgICAgICh0LnByb3Rv
dHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKToKKyAgICAgICAgKHQucHJvdG90eXBlLmNv
bXBvbmVudERpZFVwZGF0ZSk6CisgICAgICAgICgyNik6CisgICAgICAgICgyNyk6CisgICAgICAg
ICgyOCk6CisgICAgICAgICgyOSk6CisgICAgICAgICgzMCk6CisgICAgICAgICgzMSk6CisgICAg
ICAgIChjYWxsKToKKyAgICAgICAgKDMyKToKKyAgICAgICAgKDMzKToKKyAgICAgICAgKDM0KToK
KyAgICAgICAgKDM1KToKKyAgICAgICAgKDM2KToKKyAgICAgICAgKDM3KToKKyAgICAgICAgKGku
YWRkQ2xhc3MpOgorICAgICAgICAoaS5yZW1vdmVDbGFzcyk6CisgICAgICAgIChpLmNvbmRpdGlv
bkNsYXNzKToKKyAgICAgICAgKGkuaGFzQ2xhc3MpOgorICAgICAgICAoaS5tYXRjaGVzU2VsZWN0
b3IpOgorICAgICAgICAoMzgpOgorICAgICAgICAoMzkpOgorICAgICAgICAoby50aGF0UmV0dXJu
c1RoaXMpOgorICAgICAgICAoby50aGF0UmV0dXJuc0FyZ3VtZW50KToKKyAgICAgICAgKDQwKToK
KyAgICAgICAgKDQxKToKKyAgICAgICAgKDQyKToKKyAgICAgICAgKDQzKToKKyAgICAgICAgKDQ0
KToKKyAgICAgICAgKHRyeSk6CisgICAgICAgICh0LmV4cG9ydHMpOgorICAgICAgICAoT2JqZWN0
LmFzc2lnbik6CisgICAgICAgICg0NSk6CisgICAgICAgICg0Nik6CisgICAgICAgICg0Nyk6Cisg
ICAgICAgIChyZXR1cm4ucik6CisgICAgICAgIChjLm4pOgorICAgICAgICAocC50KToKKyAgICAg
ICAgKGwudCk6CisgICAgICAgIChmLnQpOgorICAgICAgICAoZC50KToKKyAgICAgICAgKGgudCk6
CisgICAgICAgICh5LnQpOgorICAgICAgICAoeSk6CisgICAgICAgICh2LnQpOgorICAgICAgICAo
dik6CisgICAgICAgIChtKToKKyAgICAgICAgKEUpOgorICAgICAgICAoYik6CisgICAgICAgIChf
KToKKyAgICAgICAgKHguYW55KToKKyAgICAgICAgKHguKToKKyAgICAgICAgKHguZWxlbWVudCk6
CisgICAgICAgICh4Lm5vZGUpOgorICAgICAgICAoNDgpOgorICAgICAgICAoNDkpOgorICAgICAg
ICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9y
ZWFjdC9ub2RlX21vZHVsZXMvcmVhY3QvZGlzdC9yZWFjdC5qczogQWRkZWQuCisgICAgICAgIChl
bHNlKToKKyAgICAgICAgKGVsc2UuZWxzZSk6CisgICAgICAgIChzKToKKyAgICAgICAgKHJldHVy
bi5lKToKKyAgICAgICAgKGVzY2FwZSk6CisgICAgICAgICh1bmVzY2FwZSk6CisgICAgICAgICgx
KToKKyAgICAgICAgKG9uZUFyZ3VtZW50UG9vbGVyKToKKyAgICAgICAgKHR3b0FyZ3VtZW50UG9v
bGVyKToKKyAgICAgICAgKHRocmVlQXJndW1lbnRQb29sZXIpOgorICAgICAgICAoZm91ckFyZ3Vt
ZW50UG9vbGVyKToKKyAgICAgICAgKHN0YW5kYXJkUmVsZWFzZXIpOgorICAgICAgICAoYWRkUG9v
bGluZ1RvKToKKyAgICAgICAgKDIpOgorICAgICAgICAoX19zcHJlYWQpOgorICAgICAgICAoUmVh
Y3QuY3JlYXRlTWl4aW4pOgorICAgICAgICAoZXNjYXBlVXNlclByb3ZpZGVkS2V5KToKKyAgICAg
ICAgKEZvckVhY2hCb29rS2VlcGluZyk6CisgICAgICAgIChGb3JFYWNoQm9va0tlZXBpbmcucHJv
dG90eXBlLmRlc3RydWN0b3IpOgorICAgICAgICAoZm9yRWFjaFNpbmdsZUNoaWxkKToKKyAgICAg
ICAgKGZvckVhY2hDaGlsZHJlbik6CisgICAgICAgIChNYXBCb29rS2VlcGluZyk6CisgICAgICAg
IChNYXBCb29rS2VlcGluZy5wcm90b3R5cGUuZGVzdHJ1Y3Rvcik6CisgICAgICAgIChtYXBTaW5n
bGVDaGlsZEludG9Db250ZXh0KToKKyAgICAgICAgKG1hcEludG9XaXRoS2V5UHJlZml4SW50ZXJu
YWwpOgorICAgICAgICAobWFwQ2hpbGRyZW4pOgorICAgICAgICAoZm9yRWFjaFNpbmdsZUNoaWxk
RHVtbXkpOgorICAgICAgICAoY291bnRDaGlsZHJlbik6CisgICAgICAgICh0b0FycmF5KToKKyAg
ICAgICAgKDQpOgorICAgICAgICAoaWRlbnRpdHkpOgorICAgICAgICAoUkVTRVJWRURfU1BFQ19L
RVlTLmRpc3BsYXlOYW1lKToKKyAgICAgICAgKFJFU0VSVkVEX1NQRUNfS0VZUy5taXhpbnMpOgor
ICAgICAgICAoUkVTRVJWRURfU1BFQ19LRVlTLmNoaWxkQ29udGV4dFR5cGVzKToKKyAgICAgICAg
KFJFU0VSVkVEX1NQRUNfS0VZUy5jb250ZXh0VHlwZXMpOgorICAgICAgICAoUkVTRVJWRURfU1BF
Q19LRVlTLmdldERlZmF1bHRQcm9wcyk6CisgICAgICAgIChSRVNFUlZFRF9TUEVDX0tFWVMucHJv
cFR5cGVzKToKKyAgICAgICAgKFJFU0VSVkVEX1NQRUNfS0VZUy5zdGF0aWNzKToKKyAgICAgICAg
KFJFU0VSVkVEX1NQRUNfS0VZUy5hdXRvYmluZCk6CisgICAgICAgICh2YWxpZGF0ZU1ldGhvZE92
ZXJyaWRlKToKKyAgICAgICAgKG1peFNwZWNJbnRvQ29tcG9uZW50KToKKyAgICAgICAgKG1peFN0
YXRpY1NwZWNJbnRvQ29tcG9uZW50KToKKyAgICAgICAgKG1lcmdlSW50b1dpdGhOb0R1cGxpY2F0
ZUtleXMpOgorICAgICAgICAocmV0dXJuLm1lcmdlZFJlc3VsdCk6CisgICAgICAgIChjcmVhdGVN
ZXJnZWRSZXN1bHRGdW5jdGlvbik6CisgICAgICAgIChyZXR1cm4uY2hhaW5lZEZ1bmN0aW9uKToK
KyAgICAgICAgKGNyZWF0ZUNoYWluZWRGdW5jdGlvbik6CisgICAgICAgIChib3VuZE1ldGhvZC5i
aW5kKToKKyAgICAgICAgKGJpbmRBdXRvQmluZE1ldGhvZCk6CisgICAgICAgIChiaW5kQXV0b0Jp
bmRNZXRob2RzKToKKyAgICAgICAgKFJlYWN0Q2xhc3NNaXhpbi5yZXBsYWNlU3RhdGUpOgorICAg
ICAgICAoUmVhY3RDbGFzc01peGluLmlzTW91bnRlZCk6CisgICAgICAgIChSZWFjdENsYXNzQ29t
cG9uZW50KToKKyAgICAgICAgKFJlYWN0Q2xhc3MuY3JlYXRlQ2xhc3MpOgorICAgICAgICAoUmVh
Y3RDbGFzcy5pbmplY3Rpb24uaW5qZWN0TWl4aW4pOgorICAgICAgICAoNSk6CisgICAgICAgIChS
ZWFjdENvbXBvbmVudCk6CisgICAgICAgIChSZWFjdENvbXBvbmVudC5wcm90b3R5cGUuc2V0U3Rh
dGUpOgorICAgICAgICAoUmVhY3RDb21wb25lbnQucHJvdG90eXBlLmZvcmNlVXBkYXRlKToKKyAg
ICAgICAgKGRlZmluZURlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgIChnZXQgZm9yKToKKyAg
ICAgICAgKDYpOgorICAgICAgICAoaXNOYXRpdmUpOgorICAgICAgICAoNyk6CisgICAgICAgICog
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0
L25vZGVfbW9kdWxlcy9yZWFjdC9kaXN0L3JlYWN0Lm1pbi5qczogQWRkZWQuCisgICAgICAgIChv
KToKKyAgICAgICAgKHJldHVybi50KToKKyAgICAgICAgKHIpOgorICAgICAgICAoMSk6CisgICAg
ICAgIChpKToKKyAgICAgICAgKHUpOgorICAgICAgICAoYSk6CisgICAgICAgIChzKToKKyAgICAg
ICAgKGwpOgorICAgICAgICAoMik6CisgICAgICAgIChtLmNyZWF0ZU1peGluKToKKyAgICAgICAg
KDMpOgorICAgICAgICAoZik6CisgICAgICAgIChwKToKKyAgICAgICAgKGQpOgorICAgICAgICAo
by5wcm90b3R5cGUuZGVzdHJ1Y3Rvcik6CisgICAgICAgIChhLnByb3RvdHlwZS5kZXN0cnVjdG9y
KToKKyAgICAgICAgKDQpOgorICAgICAgICAoYyk6CisgICAgICAgICh4LmRpc3BsYXlOYW1lKToK
KyAgICAgICAgKHgubWl4aW5zKToKKyAgICAgICAgKHguY2hpbGRDb250ZXh0VHlwZXMpOgorICAg
ICAgICAoeC5jb250ZXh0VHlwZXMpOgorICAgICAgICAoeC5nZXREZWZhdWx0UHJvcHMpOgorICAg
ICAgICAoeC5wcm9wVHlwZXMpOgorICAgICAgICAoeC5zdGF0aWNzKToKKyAgICAgICAgKHguYXV0
b2JpbmQpOgorICAgICAgICAoXy5yZXBsYWNlU3RhdGUpOgorICAgICAgICAoXy5pc01vdW50ZWQp
OgorICAgICAgICAoUCk6CisgICAgICAgICh3LmNyZWF0ZUNsYXNzKToKKyAgICAgICAgKHcuaW5q
ZWN0aW9uLmluamVjdE1peGluKToKKyAgICAgICAgKDUpOgorICAgICAgICAoci5wcm90b3R5cGUu
c2V0U3RhdGUpOgorICAgICAgICAoci5wcm90b3R5cGUuZm9yY2VVcGRhdGUpOgorICAgICAgICAo
Nik6CisgICAgICAgICg3KToKKyAgICAgICAgKDgpOgorICAgICAgICAobC5jcmVhdGVFbGVtZW50
KToKKyAgICAgICAgKGwuY3JlYXRlRmFjdG9yeSk6CisgICAgICAgIChsLmNsb25lQW5kUmVwbGFj
ZUtleSk6CisgICAgICAgIChsLmNsb25lRWxlbWVudCk6CisgICAgICAgIChsLmlzVmFsaWRFbGVt
ZW50KToKKyAgICAgICAgKDkpOgorICAgICAgICAoMTApOgorICAgICAgICAoMTEpOgorICAgICAg
ICAoMTIpOgorICAgICAgICAoMTMpOgorICAgICAgICAoZS5leHBvcnRzLmkpOgorICAgICAgICAo
MTQpOgorICAgICAgICAoMTUpOgorICAgICAgICAoMTYpOgorICAgICAgICAoMTcpOgorICAgICAg
ICAoMTgpOgorICAgICAgICAoMTkpOgorICAgICAgICAoMjApOgorICAgICAgICAoMjEpOgorICAg
ICAgICAoby50aGF0UmV0dXJuc1RoaXMpOgorICAgICAgICAoby50aGF0UmV0dXJuc0FyZ3VtZW50
KToKKyAgICAgICAgKDIyKToKKyAgICAgICAgKDIzKToKKyAgICAgICAgKDI0KToKKyAgICAgICAg
KDI1KToKKyAgICAgICAgKHRyeSk6CisgICAgICAgIChlLmV4cG9ydHMpOgorICAgICAgICAoT2Jq
ZWN0LmFzc2lnbik6CisgICAgICAgICgyNik6CisgICAgICAgICgyNyk6CisgICAgICAgICgyOCk6
CisgICAgICAgIChyZXR1cm4ucik6CisgICAgICAgIChjLm4pOgorICAgICAgICAobC5lKToKKyAg
ICAgICAgKGYuZSk6CisgICAgICAgIChwLmUpOgorICAgICAgICAoZC5lKToKKyAgICAgICAgKHku
ZSk6CisgICAgICAgICh5KToKKyAgICAgICAgKGguZSk6CisgICAgICAgIChoKToKKyAgICAgICAg
KHYuZSk6CisgICAgICAgICh2KToKKyAgICAgICAgKG0pOgorICAgICAgICAoYik6CisgICAgICAg
IChFKToKKyAgICAgICAgKHgpOgorICAgICAgICAoTi5hbnkpOgorICAgICAgICAoTi4pOgorICAg
ICAgICAoTi5lbGVtZW50KToKKyAgICAgICAgKE4ubm9kZSk6CisgICAgICAgICgyOSk6CisgICAg
ICAgICgzMCk6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvaW5kZXgu
Y3NzOiBBZGRlZC4KKyAgICAgICAgKGh0bWwsKToKKyAgICAgICAgKGJ1dHRvbik6CisgICAgICAg
IChib2R5KToKKyAgICAgICAgKDpmb2N1cyk6CisgICAgICAgICguaGlkZGVuKToKKyAgICAgICAg
KC50b2RvYXBwKToKKyAgICAgICAgKC50b2RvYXBwIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNl
aG9sZGVyKToKKyAgICAgICAgKC50b2RvYXBwIGlucHV0OjotbW96LXBsYWNlaG9sZGVyKToKKyAg
ICAgICAgKC50b2RvYXBwIGlucHV0OjppbnB1dC1wbGFjZWhvbGRlcik6CisgICAgICAgICgudG9k
b2FwcCBoMSk6CisgICAgICAgICgubmV3LXRvZG8sKToKKyAgICAgICAgKC5uZXctdG9kbyk6Cisg
ICAgICAgICgubWFpbik6CisgICAgICAgICgudG9nZ2xlLWFsbCk6CisgICAgICAgICgudG9nZ2xl
LWFsbCArIGxhYmVsKToKKyAgICAgICAgKC50b2dnbGUtYWxsICsgbGFiZWw6YmVmb3JlKToKKyAg
ICAgICAgKC50b2dnbGUtYWxsOmNoZWNrZWQgKyBsYWJlbDpiZWZvcmUpOgorICAgICAgICAoLnRv
ZG8tbGlzdCk6CisgICAgICAgICgudG9kby1saXN0IGxpKToKKyAgICAgICAgKC50b2RvLWxpc3Qg
bGk6bGFzdC1jaGlsZCk6CisgICAgICAgICgudG9kby1saXN0IGxpLmVkaXRpbmcpOgorICAgICAg
ICAoLnRvZG8tbGlzdCBsaS5lZGl0aW5nIC5lZGl0KToKKyAgICAgICAgKC50b2RvLWxpc3QgbGku
ZWRpdGluZyAudmlldyk6CisgICAgICAgICgudG9kby1saXN0IGxpIC50b2dnbGUpOgorICAgICAg
ICAoLnRvZG8tbGlzdCBsaSAudG9nZ2xlICsgbGFiZWwpOgorICAgICAgICAoLnRvZG8tbGlzdCBs
aSAudG9nZ2xlOmNoZWNrZWQgKyBsYWJlbCk6CisgICAgICAgICgudG9kby1saXN0IGxpIGxhYmVs
KToKKyAgICAgICAgKC50b2RvLWxpc3QgbGkuY29tcGxldGVkIGxhYmVsKToKKyAgICAgICAgKC50
b2RvLWxpc3QgbGkgLmRlc3Ryb3kpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaSAuZGVzdHJveTpo
b3Zlcik6CisgICAgICAgICgudG9kby1saXN0IGxpIC5kZXN0cm95OmFmdGVyKToKKyAgICAgICAg
KC50b2RvLWxpc3QgbGk6aG92ZXIgLmRlc3Ryb3kpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaSAu
ZWRpdCk6CisgICAgICAgICgudG9kby1saXN0IGxpLmVkaXRpbmc6bGFzdC1jaGlsZCk6CisgICAg
ICAgICguZm9vdGVyKToKKyAgICAgICAgKC5mb290ZXI6YmVmb3JlKToKKyAgICAgICAgKC50b2Rv
LWNvdW50KToKKyAgICAgICAgKC50b2RvLWNvdW50IHN0cm9uZyk6CisgICAgICAgICguZmlsdGVy
cyk6CisgICAgICAgICguZmlsdGVycyBsaSk6CisgICAgICAgICguZmlsdGVycyBsaSBhKToKKyAg
ICAgICAgKC5maWx0ZXJzIGxpIGE6aG92ZXIpOgorICAgICAgICAoLmZpbHRlcnMgbGkgYS5zZWxl
Y3RlZCk6CisgICAgICAgICguY2xlYXItY29tcGxldGVkLCk6CisgICAgICAgICguY2xlYXItY29t
cGxldGVkOmhvdmVyKToKKyAgICAgICAgKC5pbmZvKToKKyAgICAgICAgKC5pbmZvIHApOgorICAg
ICAgICAoLmluZm8gYSk6CisgICAgICAgICguaW5mbyBhOmhvdmVyKToKKyAgICAgICAgKEBtZWRp
YSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCkpOgorICAgICAg
ICAoLnRvZ2dsZS1hbGwsKToKKyAgICAgICAgKEBtZWRpYSAobWF4LXdpZHRoOiA0MzBweCkpOgor
ICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3M6IEFkZGVkLgor
ICAgICAgICAoaHIpOgorICAgICAgICAoLmxlYXJuIGEpOgorICAgICAgICAoLmxlYXJuIGE6aG92
ZXIpOgorICAgICAgICAoLmxlYXJuIGgzLCk6CisgICAgICAgICgubGVhcm4gaDMpOgorICAgICAg
ICAoLmxlYXJuIGg0KToKKyAgICAgICAgKC5sZWFybiBoNSk6CisgICAgICAgICgubGVhcm4gdWwp
OgorICAgICAgICAoLmxlYXJuIGxpKToKKyAgICAgICAgKC5sZWFybiBwKToKKyAgICAgICAgKCNp
c3N1ZS1jb3VudCk6CisgICAgICAgICgucXVvdGUpOgorICAgICAgICAoLnF1b3RlIHApOgorICAg
ICAgICAoLnF1b3RlIHA6YmVmb3JlKToKKyAgICAgICAgKC5xdW90ZSBwOmFmdGVyKToKKyAgICAg
ICAgKC5xdW90ZSBmb290ZXIpOgorICAgICAgICAoLnF1b3RlIGZvb3RlciBpbWcpOgorICAgICAg
ICAoLnF1b3RlIGZvb3RlciBhKToKKyAgICAgICAgKC5zcGVlY2gtYnViYmxlKToKKyAgICAgICAg
KC5zcGVlY2gtYnViYmxlOmFmdGVyKToKKyAgICAgICAgKC5sZWFybi1iYXIgPiAubGVhcm4pOgor
ICAgICAgICAoQG1lZGlhIChtaW4td2lkdGg6IDg5OXB4KSk6CisgICAgICAgICgubGVhcm4tYmFy
KToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuanM6IEFkZGVk
LgorICAgICAgICAoXy5kZWZhdWx0cyk6CisgICAgICAgICh0ZW1wbGF0ZSk6CisgICAgICAgIChl
c2NhcGVyLl8udGVtcGxhdGUpOgorICAgICAgICAoXyk6CisgICAgICAgIChsb2NhdGlvbi5ob3N0
bmFtZS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pLnIuaS5yKToKKyAgICAgICAgKHJlZGlyZWN0KToK
KyAgICAgICAgKGZpbmRSb290KToKKyAgICAgICAgKHhoci5vbmxvYWQpOgorICAgICAgICAoZ2V0
RmlsZSk6CisgICAgICAgIChMZWFybik6CisgICAgICAgIChMZWFybi5wcm90b3R5cGUuYXBwZW5k
KToKKyAgICAgICAgKExlYXJuLnByb3RvdHlwZS5mZXRjaElzc3VlQ291bnQpOgorICAgICAgICAq
IFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFj
dC9ucG0tc2hyaW5rd3JhcC5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvcGFja2FnZS5qc29uOiBB
ZGRlZC4KKwogMjAxNy0wNC0yNSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUu
Y29tPgogCiAgICAgICAgIEFkZCBwZXJmb3JtYW5jZSB0ZXN0IGZvciBGb250Q2FjaGU6OnN5c3Rl
bUZhbGxiYWNrRm9yQ2hhcmFjdGVycygpCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9i
dWlsZC5taW4uanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9idWlsZC5taW4uanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MWM1ZWFmMjQzYjJjZGEyMGY1YzEwYTgzNzNjZTYyYjg3N2U5ODkwYgotLS0gL2Rldi9udWxsCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2J1aWxkLm1pbi5qcwpAQCAtMCwwICsxIEBACit2YXIgYXBw
PWFwcHx8e307KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2FwcC5BTExfVE9ET1M9ImFsbCI7YXBw
LkFDVElWRV9UT0RPUz0iYWN0aXZlIjthcHAuQ09NUExFVEVEX1RPRE9TPSJjb21wbGV0ZWQiO2Fw
cC5VdGlscz17dXVpZDpmdW5jdGlvbigpe3ZhciBpLHJhbmRvbTt2YXIgdXVpZD0iIjtmb3IoaT0w
O2k8MzI7aSsrKXtyYW5kb209TWF0aC5yYW5kb20oKSoxNnwwO2lmKGk9PT04fHxpPT09MTJ8fGk9
PT0xNnx8aT09PTIwKXt1dWlkKz0iLSJ9dXVpZCs9KGk9PT0xMj80Omk9PT0xNj9yYW5kb20mM3w4
OnJhbmRvbSkudG9TdHJpbmcoMTYpfXJldHVybiB1dWlkfSxwbHVyYWxpemU6ZnVuY3Rpb24oY291
bnQsd29yZCl7cmV0dXJuIGNvdW50PT09MT93b3JkOndvcmQrInMifSxleHRlbmQ6ZnVuY3Rpb24o
KXt2YXIgbmV3T2JqPXt9O2Zvcih2YXIgaT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspe3ZhciBv
Ymo9YXJndW1lbnRzW2ldO2Zvcih2YXIga2V5IGluIG9iail7aWYob2JqLmhhc093blByb3BlcnR5
KGtleSkpe25ld09ialtrZXldPW9ialtrZXldfX19cmV0dXJuIG5ld09ian19O3ZhciBVdGlscz1h
cHAuVXRpbHM7YXBwLlRvZG9Nb2RlbD1mdW5jdGlvbihrZXkpe3RoaXMua2V5PWtleTt0aGlzLnRv
ZG9zPVtdO3RoaXMub25DaGFuZ2VzPVtdfTthcHAuVG9kb01vZGVsLnByb3RvdHlwZS5zdWJzY3Jp
YmU9ZnVuY3Rpb24ob25DaGFuZ2Upe3RoaXMub25DaGFuZ2VzLnB1c2gob25DaGFuZ2UpfTthcHAu
VG9kb01vZGVsLnByb3RvdHlwZS5pbmZvcm09ZnVuY3Rpb24oKXt0aGlzLm9uQ2hhbmdlcy5mb3JF
YWNoKGZ1bmN0aW9uKGNiKXtjYigpfSl9O2FwcC5Ub2RvTW9kZWwucHJvdG90eXBlLmFkZFRvZG89
ZnVuY3Rpb24odGl0bGUpe3RoaXMudG9kb3M9dGhpcy50b2Rvcy5jb25jYXQoe2lkOlV0aWxzLnV1
aWQoKSx0aXRsZTp0aXRsZSxjb21wbGV0ZWQ6ZmFsc2V9KTt0aGlzLmluZm9ybSgpfTthcHAuVG9k
b01vZGVsLnByb3RvdHlwZS50b2dnbGVBbGw9ZnVuY3Rpb24oY2hlY2tlZCl7dGhpcy50b2Rvcz10
aGlzLnRvZG9zLm1hcChmdW5jdGlvbih0b2RvKXtyZXR1cm4gVXRpbHMuZXh0ZW5kKHt9LHRvZG8s
e2NvbXBsZXRlZDpjaGVja2VkfSl9KTt0aGlzLmluZm9ybSgpfTthcHAuVG9kb01vZGVsLnByb3Rv
dHlwZS50b2dnbGU9ZnVuY3Rpb24odG9kb1RvVG9nZ2xlKXt0aGlzLnRvZG9zPXRoaXMudG9kb3Mu
bWFwKGZ1bmN0aW9uKHRvZG8pe3JldHVybiB0b2RvIT09dG9kb1RvVG9nZ2xlP3RvZG86VXRpbHMu
ZXh0ZW5kKHt9LHRvZG8se2NvbXBsZXRlZDohdG9kby5jb21wbGV0ZWR9KX0pO3RoaXMuaW5mb3Jt
KCl9O2FwcC5Ub2RvTW9kZWwucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24odG9kbyl7dGhpcy50
b2Rvcz10aGlzLnRvZG9zLmZpbHRlcihmdW5jdGlvbihjYW5kaWRhdGUpe3JldHVybiBjYW5kaWRh
dGUhPT10b2RvfSk7dGhpcy5pbmZvcm0oKX07YXBwLlRvZG9Nb2RlbC5wcm90b3R5cGUuc2F2ZT1m
dW5jdGlvbih0b2RvVG9TYXZlLHRleHQpe3RoaXMudG9kb3M9dGhpcy50b2Rvcy5tYXAoZnVuY3Rp
b24odG9kbyl7cmV0dXJuIHRvZG8hPT10b2RvVG9TYXZlP3RvZG86VXRpbHMuZXh0ZW5kKHt9LHRv
ZG8se3RpdGxlOnRleHR9KX0pO3RoaXMuaW5mb3JtKCl9O2FwcC5Ub2RvTW9kZWwucHJvdG90eXBl
LmNsZWFyQ29tcGxldGVkPWZ1bmN0aW9uKCl7dGhpcy50b2Rvcz10aGlzLnRvZG9zLmZpbHRlcihm
dW5jdGlvbih0b2RvKXtyZXR1cm4hdG9kby5jb21wbGV0ZWR9KTt0aGlzLmluZm9ybSgpfTt2YXIg
VG9kb0Zvb3Rlcj1SZWFjdC5jcmVhdGVDbGFzcyh7cmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGFjdGl2
ZVRvZG9Xb3JkPWFwcC5VdGlscy5wbHVyYWxpemUodGhpcy5wcm9wcy5jb3VudCwiaXRlbSIpO3Zh
ciBjbGVhckJ1dHRvbj1udWxsO2lmKHRoaXMucHJvcHMuY29tcGxldGVkQ291bnQ+MCl7Y2xlYXJC
dXR0b249UmVhY3QuY3JlYXRlRWxlbWVudCgiYnV0dG9uIix7Y2xhc3NOYW1lOiJjbGVhci1jb21w
bGV0ZWQiLG9uQ2xpY2s6dGhpcy5wcm9wcy5vbkNsZWFyQ29tcGxldGVkfSwiQ2xlYXIgY29tcGxl
dGVkIil9dmFyIG5vd1Nob3dpbmc9dGhpcy5wcm9wcy5ub3dTaG93aW5nO3JldHVybiBSZWFjdC5j
cmVhdGVFbGVtZW50KCJmb290ZXIiLHtjbGFzc05hbWU6ImZvb3RlciJ9LFJlYWN0LmNyZWF0ZUVs
ZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6InRvZG8tY291bnQifSxSZWFjdC5jcmVhdGVFbGVtZW50
KCJzdHJvbmciLG51bGwsdGhpcy5wcm9wcy5jb3VudCksIiAiLGFjdGl2ZVRvZG9Xb3JkLCIgbGVm
dCIpLFJlYWN0LmNyZWF0ZUVsZW1lbnQoInVsIix7Y2xhc3NOYW1lOiJmaWx0ZXJzIn0sUmVhY3Qu
Y3JlYXRlRWxlbWVudCgibGkiLG51bGwsUmVhY3QuY3JlYXRlRWxlbWVudCgiYSIse2hyZWY6IiMv
IixjbGFzc05hbWU6Y2xhc3NOYW1lcyh7c2VsZWN0ZWQ6bm93U2hvd2luZz09PWFwcC5BTExfVE9E
T1N9KX0sIkFsbCIpKSwiICIsUmVhY3QuY3JlYXRlRWxlbWVudCgibGkiLG51bGwsUmVhY3QuY3Jl
YXRlRWxlbWVudCgiYSIse2hyZWY6IiMvYWN0aXZlIixjbGFzc05hbWU6Y2xhc3NOYW1lcyh7c2Vs
ZWN0ZWQ6bm93U2hvd2luZz09PWFwcC5BQ1RJVkVfVE9ET1N9KX0sIkFjdGl2ZSIpKSwiICIsUmVh
Y3QuY3JlYXRlRWxlbWVudCgibGkiLG51bGwsUmVhY3QuY3JlYXRlRWxlbWVudCgiYSIse2hyZWY6
IiMvY29tcGxldGVkIixjbGFzc05hbWU6Y2xhc3NOYW1lcyh7c2VsZWN0ZWQ6bm93U2hvd2luZz09
PWFwcC5DT01QTEVURURfVE9ET1N9KX0sIkNvbXBsZXRlZCIpKSksY2xlYXJCdXR0b24pfX0pO3Zh
ciBFU0NBUEVfS0VZPTI3O3ZhciBFTlRFUl9LRVk9MTM7dmFyIFRvZG9JdGVtPVJlYWN0LmNyZWF0
ZUNsYXNzKHtoYW5kbGVTdWJtaXQ6ZnVuY3Rpb24oZXZlbnQpe3ZhciB2YWw9dGhpcy5zdGF0ZS5l
ZGl0VGV4dC50cmltKCk7aWYodmFsKXt0aGlzLnByb3BzLm9uU2F2ZSh2YWwpO3RoaXMuc2V0U3Rh
dGUoe2VkaXRUZXh0OnZhbH0pfWVsc2V7dGhpcy5wcm9wcy5vbkRlc3Ryb3koKX19LGhhbmRsZUVk
aXQ6ZnVuY3Rpb24oKXt0aGlzLnByb3BzLm9uRWRpdCgpO3RoaXMuc2V0U3RhdGUoe2VkaXRUZXh0
OnRoaXMucHJvcHMudG9kby50aXRsZX0pfSxoYW5kbGVLZXlEb3duOmZ1bmN0aW9uKGV2ZW50KXtp
ZihldmVudC53aGljaD09PUVTQ0FQRV9LRVkpe3RoaXMuc2V0U3RhdGUoe2VkaXRUZXh0OnRoaXMu
cHJvcHMudG9kby50aXRsZX0pO3RoaXMucHJvcHMub25DYW5jZWwoZXZlbnQpfWVsc2UgaWYoZXZl
bnQud2hpY2g9PT1FTlRFUl9LRVkpe3RoaXMuaGFuZGxlU3VibWl0KGV2ZW50KX19LGhhbmRsZUNo
YW5nZTpmdW5jdGlvbihldmVudCl7aWYodGhpcy5wcm9wcy5lZGl0aW5nKXt0aGlzLnNldFN0YXRl
KHtlZGl0VGV4dDpldmVudC50YXJnZXQudmFsdWV9KX19LGdldEluaXRpYWxTdGF0ZTpmdW5jdGlv
bigpe3JldHVybntlZGl0VGV4dDp0aGlzLnByb3BzLnRvZG8udGl0bGV9fSxzaG91bGRDb21wb25l
bnRVcGRhdGU6ZnVuY3Rpb24obmV4dFByb3BzLG5leHRTdGF0ZSl7cmV0dXJuIG5leHRQcm9wcy50
b2RvIT09dGhpcy5wcm9wcy50b2RvfHxuZXh0UHJvcHMuZWRpdGluZyE9PXRoaXMucHJvcHMuZWRp
dGluZ3x8bmV4dFN0YXRlLmVkaXRUZXh0IT09dGhpcy5zdGF0ZS5lZGl0VGV4dH0sY29tcG9uZW50
RGlkVXBkYXRlOmZ1bmN0aW9uKHByZXZQcm9wcyl7aWYoIXByZXZQcm9wcy5lZGl0aW5nJiZ0aGlz
LnByb3BzLmVkaXRpbmcpe3ZhciBub2RlPVJlYWN0LmZpbmRET01Ob2RlKHRoaXMucmVmcy5lZGl0
RmllbGQpO25vZGUuZm9jdXMoKTtub2RlLnNldFNlbGVjdGlvblJhbmdlKG5vZGUudmFsdWUubGVu
Z3RoLG5vZGUudmFsdWUubGVuZ3RoKX19LHJlbmRlcjpmdW5jdGlvbigpe3JldHVybiBSZWFjdC5j
cmVhdGVFbGVtZW50KCJsaSIse2NsYXNzTmFtZTpjbGFzc05hbWVzKHtjb21wbGV0ZWQ6dGhpcy5w
cm9wcy50b2RvLmNvbXBsZXRlZCxlZGl0aW5nOnRoaXMucHJvcHMuZWRpdGluZ30pfSxSZWFjdC5j
cmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InZpZXcifSxSZWFjdC5jcmVhdGVFbGVtZW50
KCJpbnB1dCIse2NsYXNzTmFtZToidG9nZ2xlIix0eXBlOiJjaGVja2JveCIsY2hlY2tlZDp0aGlz
LnByb3BzLnRvZG8uY29tcGxldGVkLG9uQ2hhbmdlOnRoaXMucHJvcHMub25Ub2dnbGV9KSxSZWFj
dC5jcmVhdGVFbGVtZW50KCJsYWJlbCIse29uRG91YmxlQ2xpY2s6dGhpcy5oYW5kbGVFZGl0fSx0
aGlzLnByb3BzLnRvZG8udGl0bGUpLFJlYWN0LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIse2NsYXNz
TmFtZToiZGVzdHJveSIsb25DbGljazp0aGlzLnByb3BzLm9uRGVzdHJveX0pKSxSZWFjdC5jcmVh
dGVFbGVtZW50KCJpbnB1dCIse3JlZjoiZWRpdEZpZWxkIixjbGFzc05hbWU6ImVkaXQiLHZhbHVl
OnRoaXMuc3RhdGUuZWRpdFRleHQsb25CbHVyOnRoaXMuaGFuZGxlU3VibWl0LG9uQ2hhbmdlOnRo
aXMuaGFuZGxlQ2hhbmdlLG9uS2V5RG93bjp0aGlzLmhhbmRsZUtleURvd259KSl9fSk7dmFyIEVO
VEVSX0tFWT0xMzt2YXIgVG9kb0FwcD1SZWFjdC5jcmVhdGVDbGFzcyh7Z2V0SW5pdGlhbFN0YXRl
OmZ1bmN0aW9uKCl7cmV0dXJue25vd1Nob3dpbmc6YXBwLkFMTF9UT0RPUyxlZGl0aW5nOm51bGws
bmV3VG9kbzoiIn19LGNvbXBvbmVudERpZE1vdW50OmZ1bmN0aW9uKCl7dmFyIHNldFN0YXRlPXRo
aXMuc2V0U3RhdGU7dmFyIHJvdXRlcj1Sb3V0ZXIoeyIvIjpzZXRTdGF0ZS5iaW5kKHRoaXMse25v
d1Nob3dpbmc6YXBwLkFMTF9UT0RPU30pLCIvYWN0aXZlIjpzZXRTdGF0ZS5iaW5kKHRoaXMse25v
d1Nob3dpbmc6YXBwLkFDVElWRV9UT0RPU30pLCIvY29tcGxldGVkIjpzZXRTdGF0ZS5iaW5kKHRo
aXMse25vd1Nob3dpbmc6YXBwLkNPTVBMRVRFRF9UT0RPU30pfSk7cm91dGVyLmluaXQoIi8iKX0s
aGFuZGxlQ2hhbmdlOmZ1bmN0aW9uKGV2ZW50KXt0aGlzLnNldFN0YXRlKHtuZXdUb2RvOmV2ZW50
LnRhcmdldC52YWx1ZX0pfSxoYW5kbGVOZXdUb2RvS2V5RG93bjpmdW5jdGlvbihldmVudCl7aWYo
ZXZlbnQua2V5Q29kZSE9PUVOVEVSX0tFWSl7cmV0dXJufWV2ZW50LnByZXZlbnREZWZhdWx0KCk7
dmFyIHZhbD10aGlzLnN0YXRlLm5ld1RvZG8udHJpbSgpO2lmKHZhbCl7dGhpcy5wcm9wcy5tb2Rl
bC5hZGRUb2RvKHZhbCk7dGhpcy5zZXRTdGF0ZSh7bmV3VG9kbzoiIn0pfX0sdG9nZ2xlQWxsOmZ1
bmN0aW9uKGV2ZW50KXt2YXIgY2hlY2tlZD1ldmVudC50YXJnZXQuY2hlY2tlZDt0aGlzLnByb3Bz
Lm1vZGVsLnRvZ2dsZUFsbChjaGVja2VkKX0sdG9nZ2xlOmZ1bmN0aW9uKHRvZG9Ub1RvZ2dsZSl7
dGhpcy5wcm9wcy5tb2RlbC50b2dnbGUodG9kb1RvVG9nZ2xlKX0sZGVzdHJveTpmdW5jdGlvbih0
b2RvKXt0aGlzLnByb3BzLm1vZGVsLmRlc3Ryb3kodG9kbyl9LGVkaXQ6ZnVuY3Rpb24odG9kbyl7
dGhpcy5zZXRTdGF0ZSh7ZWRpdGluZzp0b2RvLmlkfSl9LHNhdmU6ZnVuY3Rpb24odG9kb1RvU2F2
ZSx0ZXh0KXt0aGlzLnByb3BzLm1vZGVsLnNhdmUodG9kb1RvU2F2ZSx0ZXh0KTt0aGlzLnNldFN0
YXRlKHtlZGl0aW5nOm51bGx9KX0sY2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy5zZXRTdGF0ZSh7ZWRp
dGluZzpudWxsfSl9LGNsZWFyQ29tcGxldGVkOmZ1bmN0aW9uKCl7dGhpcy5wcm9wcy5tb2RlbC5j
bGVhckNvbXBsZXRlZCgpfSxyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZm9vdGVyO3ZhciBtYWluO3Zh
ciB0b2Rvcz10aGlzLnByb3BzLm1vZGVsLnRvZG9zO3ZhciBzaG93blRvZG9zPXRvZG9zLmZpbHRl
cihmdW5jdGlvbih0b2RvKXtzd2l0Y2godGhpcy5zdGF0ZS5ub3dTaG93aW5nKXtjYXNlIGFwcC5B
Q1RJVkVfVE9ET1M6cmV0dXJuIXRvZG8uY29tcGxldGVkO2Nhc2UgYXBwLkNPTVBMRVRFRF9UT0RP
UzpyZXR1cm4gdG9kby5jb21wbGV0ZWQ7ZGVmYXVsdDpyZXR1cm4gdHJ1ZX19LHRoaXMpO3ZhciB0
b2RvSXRlbXM9c2hvd25Ub2Rvcy5tYXAoZnVuY3Rpb24odG9kbyl7cmV0dXJuIFJlYWN0LmNyZWF0
ZUVsZW1lbnQoVG9kb0l0ZW0se2tleTp0b2RvLmlkLHRvZG86dG9kbyxvblRvZ2dsZTp0aGlzLnRv
Z2dsZS5iaW5kKHRoaXMsdG9kbyksb25EZXN0cm95OnRoaXMuZGVzdHJveS5iaW5kKHRoaXMsdG9k
byksb25FZGl0OnRoaXMuZWRpdC5iaW5kKHRoaXMsdG9kbyksZWRpdGluZzp0aGlzLnN0YXRlLmVk
aXRpbmc9PT10b2RvLmlkLG9uU2F2ZTp0aGlzLnNhdmUuYmluZCh0aGlzLHRvZG8pLG9uQ2FuY2Vs
OnRoaXMuY2FuY2VsfSl9LHRoaXMpO3ZhciBhY3RpdmVUb2RvQ291bnQ9dG9kb3MucmVkdWNlKGZ1
bmN0aW9uKGFjY3VtLHRvZG8pe3JldHVybiB0b2RvLmNvbXBsZXRlZD9hY2N1bTphY2N1bSsxfSww
KTt2YXIgY29tcGxldGVkQ291bnQ9dG9kb3MubGVuZ3RoLWFjdGl2ZVRvZG9Db3VudDtpZihhY3Rp
dmVUb2RvQ291bnR8fGNvbXBsZXRlZENvdW50KXtmb290ZXI9UmVhY3QuY3JlYXRlRWxlbWVudChU
b2RvRm9vdGVyLHtjb3VudDphY3RpdmVUb2RvQ291bnQsY29tcGxldGVkQ291bnQ6Y29tcGxldGVk
Q291bnQsbm93U2hvd2luZzp0aGlzLnN0YXRlLm5vd1Nob3dpbmcsb25DbGVhckNvbXBsZXRlZDp0
aGlzLmNsZWFyQ29tcGxldGVkfSl9aWYodG9kb3MubGVuZ3RoKXttYWluPVJlYWN0LmNyZWF0ZUVs
ZW1lbnQoInNlY3Rpb24iLHtjbGFzc05hbWU6Im1haW4ifSxSZWFjdC5jcmVhdGVFbGVtZW50KCJp
bnB1dCIse2NsYXNzTmFtZToidG9nZ2xlLWFsbCIsdHlwZToiY2hlY2tib3giLG9uQ2hhbmdlOnRo
aXMudG9nZ2xlQWxsLGNoZWNrZWQ6YWN0aXZlVG9kb0NvdW50PT09MH0pLFJlYWN0LmNyZWF0ZUVs
ZW1lbnQoInVsIix7Y2xhc3NOYW1lOiJ0b2RvLWxpc3QifSx0b2RvSXRlbXMpKX1yZXR1cm4gUmVh
Y3QuY3JlYXRlRWxlbWVudCgiZGl2IixudWxsLFJlYWN0LmNyZWF0ZUVsZW1lbnQoImhlYWRlciIs
e2NsYXNzTmFtZToiaGVhZGVyIn0sUmVhY3QuY3JlYXRlRWxlbWVudCgiaDEiLG51bGwsInRvZG9z
IiksUmVhY3QuY3JlYXRlRWxlbWVudCgiaW5wdXQiLHtjbGFzc05hbWU6Im5ldy10b2RvIixwbGFj
ZWhvbGRlcjoiV2hhdCBuZWVkcyB0byBiZSBkb25lPyIsdmFsdWU6dGhpcy5zdGF0ZS5uZXdUb2Rv
LG9uS2V5RG93bjp0aGlzLmhhbmRsZU5ld1RvZG9LZXlEb3duLG9uQ2hhbmdlOnRoaXMuaGFuZGxl
Q2hhbmdlLGF1dG9Gb2N1czp0cnVlfSkpLG1haW4sZm9vdGVyKX19KTt2YXIgbW9kZWw9bmV3IGFw
cC5Ub2RvTW9kZWwoInJlYWN0LXRvZG9zIik7ZnVuY3Rpb24gcmVuZGVyKCl7UmVhY3RET00ucmVu
ZGVyKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9kb0FwcCx7bW9kZWw6bW9kZWx9KSxkb2N1bWVudC5n
ZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJ0b2RvYXBwIilbMF0pfW1vZGVsLnN1YnNjcmliZShyZW5k
ZXIpO3JlbmRlcigpfSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9yZWFjdC9pbmRleC5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvaW5kZXgu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4yOWU1NjE2YmFhNjAzNmE2NWJlYWZjOGYwZjAwOTM5YWI1ZDBjZTdh
Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvaW5kZXguaHRtbApAQCAtMCww
ICsxLDIyIEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1sIGxhbmc9ImVuIiBkYXRhLWZyYW1ld29y
az0icmVhY3QiPgorICAgIDxoZWFkPgorICAgICAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cisg
ICAgICAgIDx0aXRsZT5SZWFjdCDigKIgVG9kb01WQzwvdGl0bGU+CisgICAgICAgIDxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgaHJlZj0ibm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3Nz
Ij4KKyAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJub2RlX21vZHVsZXMvdG9k
b212Yy1hcHAtY3NzL2luZGV4LmNzcyI+CisgICAgPC9oZWFkPgorICAgIDxib2R5PgorICAgICAg
ICA8c2VjdGlvbiBjbGFzcz0idG9kb2FwcCI+PC9zZWN0aW9uPgorICAgICAgICA8Zm9vdGVyIGNs
YXNzPSJpbmZvIj4KKyAgICAgICAgICAgIDxwPkRvdWJsZS1jbGljayB0byBlZGl0IGEgdG9kbzwv
cD4KKyAgICAgICAgICAgIDxwPlBhcnQgb2YgPGEgaHJlZj0iaHR0cDovL3RvZG9tdmMuY29tIj5U
b2RvTVZDPC9hPjwvcD4KKyAgICAgICAgPC9mb290ZXI+CisKKyAgICA8c2NyaXB0IHNyYz0ibm9k
ZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3Jj
PSJub2RlX21vZHVsZXMvZGlyZWN0b3IvYnVpbGQvZGlyZWN0b3IuanMiPjwvc2NyaXB0PgorICAg
IDxzY3JpcHQgc3JjPSJub2RlX21vZHVsZXMvcmVhY3QvZGlzdC9yZWFjdC13aXRoLWFkZG9ucy5t
aW4uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJub2RlX21vZHVsZXMvcmVhY3QtZG9t
L2Rpc3QvcmVhY3QtZG9tLm1pbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9ImJ1aWxk
Lm1pbi5qcyI+PC9zY3JpcHQ+CisgICAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvcmVhY3QvanMvYXBwLmpzeCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2pzL2FwcC5qc3gK
bmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZmQ4OTVlNTEwNTg0ZmM5ZGVkMTY2YjQ0NDM5MjY3ODNmMTUwNDJiNAotLS0g
L2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2pzL2FwcC5qc3gKQEAgLTAsMCArMSw0
NDIgQEAKKy8qanNoaW50IHF1b3RtYXJrOmZhbHNlICovCisvKmpzaGludCB3aGl0ZTpmYWxzZSAq
LworLypqc2hpbnQgdHJhaWxpbmc6ZmFsc2UgKi8KKy8qanNoaW50IG5ld2NhcDpmYWxzZSAqLwor
LypnbG9iYWwgUmVhY3QsIFJvdXRlciovCit2YXIgYXBwID0gYXBwIHx8IHt9OworCisoZnVuY3Rp
b24gKCkgeworCSd1c2Ugc3RyaWN0JzsKKworCWFwcC5BTExfVE9ET1MgPSAnYWxsJzsKKwlhcHAu
QUNUSVZFX1RPRE9TID0gJ2FjdGl2ZSc7CisJYXBwLkNPTVBMRVRFRF9UT0RPUyA9ICdjb21wbGV0
ZWQnOworCisgIGFwcC5VdGlscyA9IHsKKyAgICB1dWlkOiBmdW5jdGlvbiAoKSB7CisgICAgICAv
KmpzaGludCBiaXR3aXNlOmZhbHNlICovCisgICAgICB2YXIgaSwgcmFuZG9tOworICAgICAgdmFy
IHV1aWQgPSAnJzsKKworICAgICAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKyAgICAgICAg
cmFuZG9tID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMDsKKyAgICAgICAgaWYgKGkgPT09IDggfHwg
aSA9PT0gMTIgfHwgaSA9PT0gMTYgfHwgaSA9PT0gMjApIHsKKyAgICAgICAgICB1dWlkICs9ICct
JzsKKyAgICAgICAgfQorICAgICAgICB1dWlkICs9IChpID09PSAxMiA/IDQgOiAoaSA9PT0gMTYg
PyAocmFuZG9tICYgMyB8IDgpIDogcmFuZG9tKSkKKyAgICAgICAgICAudG9TdHJpbmcoMTYpOwor
ICAgICAgfQorCisgICAgICByZXR1cm4gdXVpZDsKKyAgICB9LAorCisgICAgcGx1cmFsaXplOiBm
dW5jdGlvbiAoY291bnQsIHdvcmQpIHsKKyAgICAgIHJldHVybiBjb3VudCA9PT0gMSA/IHdvcmQg
OiB3b3JkICsgJ3MnOworICAgIH0sCisKKyAgICBleHRlbmQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
IHZhciBuZXdPYmogPSB7fTsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxl
bmd0aDsgaSsrKSB7CisgICAgICAgIHZhciBvYmogPSBhcmd1bWVudHNbaV07CisgICAgICAgIGZv
ciAodmFyIGtleSBpbiBvYmopIHsKKyAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtl
eSkpIHsKKyAgICAgICAgICAgIG5ld09ialtrZXldID0gb2JqW2tleV07CisgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4gbmV3T2JqOworICAgIH0KKyAgfTsKKwor
ICB2YXIgVXRpbHMgPSBhcHAuVXRpbHM7CisgIC8vIEdlbmVyaWMgIm1vZGVsIiBvYmplY3QuIFlv
dSBjYW4gdXNlIHdoYXRldmVyCisgIC8vIGZyYW1ld29yayB5b3Ugd2FudC4gRm9yIHRoaXMgYXBw
bGljYXRpb24gaXQKKyAgLy8gbWF5IG5vdCBldmVuIGJlIHdvcnRoIHNlcGFyYXRpbmcgdGhpcyBs
b2dpYworICAvLyBvdXQsIGJ1dCB3ZSBkbyB0aGlzIHRvIGRlbW9uc3RyYXRlIG9uZSB3YXkgdG8K
KyAgLy8gc2VwYXJhdGUgb3V0IHBhcnRzIG9mIHlvdXIgYXBwbGljYXRpb24uCisgIGFwcC5Ub2Rv
TW9kZWwgPSBmdW5jdGlvbiAoa2V5KSB7CisgICAgdGhpcy5rZXkgPSBrZXk7CisgICAgdGhpcy50
b2RvcyA9IFtdOworICAgIHRoaXMub25DaGFuZ2VzID0gW107CisgIH07CisKKyAgYXBwLlRvZG9N
b2RlbC5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24gKG9uQ2hhbmdlKSB7CisgICAgdGhp
cy5vbkNoYW5nZXMucHVzaChvbkNoYW5nZSk7CisgIH07CisKKyAgYXBwLlRvZG9Nb2RlbC5wcm90
b3R5cGUuaW5mb3JtID0gZnVuY3Rpb24gKCkgeworICAgIHRoaXMub25DaGFuZ2VzLmZvckVhY2go
ZnVuY3Rpb24gKGNiKSB7IGNiKCk7IH0pOworICB9OworCisgIGFwcC5Ub2RvTW9kZWwucHJvdG90
eXBlLmFkZFRvZG8gPSBmdW5jdGlvbiAodGl0bGUpIHsKKyAgICB0aGlzLnRvZG9zID0gdGhpcy50
b2Rvcy5jb25jYXQoeworICAgICAgaWQ6IFV0aWxzLnV1aWQoKSwKKyAgICAgIHRpdGxlOiB0aXRs
ZSwKKyAgICAgIGNvbXBsZXRlZDogZmFsc2UKKyAgICB9KTsKKworICAgIHRoaXMuaW5mb3JtKCk7
CisgIH07CisKKyAgYXBwLlRvZG9Nb2RlbC5wcm90b3R5cGUudG9nZ2xlQWxsID0gZnVuY3Rpb24g
KGNoZWNrZWQpIHsKKyAgICAvLyBOb3RlOiBpdCdzIHVzdWFsbHkgYmV0dGVyIHRvIHVzZSBpbW11
dGFibGUgZGF0YSBzdHJ1Y3R1cmVzIHNpbmNlIHRoZXkncmUKKyAgICAvLyBlYXNpZXIgdG8gcmVh
c29uIGFib3V0IGFuZCBSZWFjdCB3b3JrcyB2ZXJ5IHdlbGwgd2l0aCB0aGVtLiBUaGF0J3Mgd2h5
CisgICAgLy8gd2UgdXNlIG1hcCgpIGFuZCBmaWx0ZXIoKSBldmVyeXdoZXJlIGluc3RlYWQgb2Yg
bXV0YXRpbmcgdGhlIGFycmF5IG9yCisgICAgLy8gdG9kbyBpdGVtcyB0aGVtc2VsdmVzLgorICAg
IHRoaXMudG9kb3MgPSB0aGlzLnRvZG9zLm1hcChmdW5jdGlvbiAodG9kbykgeworICAgICAgcmV0
dXJuIFV0aWxzLmV4dGVuZCh7fSwgdG9kbywge2NvbXBsZXRlZDogY2hlY2tlZH0pOworICAgIH0p
OworCisgICAgdGhpcy5pbmZvcm0oKTsKKyAgfTsKKworICBhcHAuVG9kb01vZGVsLnByb3RvdHlw
ZS50b2dnbGUgPSBmdW5jdGlvbiAodG9kb1RvVG9nZ2xlKSB7CisgICAgdGhpcy50b2RvcyA9IHRo
aXMudG9kb3MubWFwKGZ1bmN0aW9uICh0b2RvKSB7CisgICAgICByZXR1cm4gdG9kbyAhPT0gdG9k
b1RvVG9nZ2xlID8KKyAgICAgICAgdG9kbyA6CisgICAgICAgIFV0aWxzLmV4dGVuZCh7fSwgdG9k
bywge2NvbXBsZXRlZDogIXRvZG8uY29tcGxldGVkfSk7CisgICAgfSk7CisKKyAgICB0aGlzLmlu
Zm9ybSgpOworICB9OworCisgIGFwcC5Ub2RvTW9kZWwucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5j
dGlvbiAodG9kbykgeworICAgIHRoaXMudG9kb3MgPSB0aGlzLnRvZG9zLmZpbHRlcihmdW5jdGlv
biAoY2FuZGlkYXRlKSB7CisgICAgICByZXR1cm4gY2FuZGlkYXRlICE9PSB0b2RvOworICAgIH0p
OworCisgICAgdGhpcy5pbmZvcm0oKTsKKyAgfTsKKworICBhcHAuVG9kb01vZGVsLnByb3RvdHlw
ZS5zYXZlID0gZnVuY3Rpb24gKHRvZG9Ub1NhdmUsIHRleHQpIHsKKyAgICB0aGlzLnRvZG9zID0g
dGhpcy50b2Rvcy5tYXAoZnVuY3Rpb24gKHRvZG8pIHsKKyAgICAgIHJldHVybiB0b2RvICE9PSB0
b2RvVG9TYXZlID8gdG9kbyA6IFV0aWxzLmV4dGVuZCh7fSwgdG9kbywge3RpdGxlOiB0ZXh0fSk7
CisgICAgfSk7CisKKyAgICB0aGlzLmluZm9ybSgpOworICB9OworCisgIGFwcC5Ub2RvTW9kZWwu
cHJvdG90eXBlLmNsZWFyQ29tcGxldGVkID0gZnVuY3Rpb24gKCkgeworICAgIHRoaXMudG9kb3Mg
PSB0aGlzLnRvZG9zLmZpbHRlcihmdW5jdGlvbiAodG9kbykgeworICAgICAgcmV0dXJuICF0b2Rv
LmNvbXBsZXRlZDsKKyAgICB9KTsKKworICAgIHRoaXMuaW5mb3JtKCk7CisgIH07CisKKworICB2
YXIgVG9kb0Zvb3RlciA9IFJlYWN0LmNyZWF0ZUNsYXNzKHsKKyAgICByZW5kZXI6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgIHZhciBhY3RpdmVUb2RvV29yZCA9IGFwcC5VdGlscy5wbHVyYWxpemUodGhp
cy5wcm9wcy5jb3VudCwgJ2l0ZW0nKTsKKyAgICAgIHZhciBjbGVhckJ1dHRvbiA9IG51bGw7CisK
KyAgICAgIGlmICh0aGlzLnByb3BzLmNvbXBsZXRlZENvdW50ID4gMCkgeworICAgICAgICBjbGVh
ckJ1dHRvbiA9ICgKKyAgICAgICAgICA8YnV0dG9uCisgICAgICAgICAgICBjbGFzc05hbWU9ImNs
ZWFyLWNvbXBsZXRlZCIKKyAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGVhckNv
bXBsZXRlZH0+CisgICAgICAgICAgICBDbGVhciBjb21wbGV0ZWQKKyAgICAgICAgICA8L2J1dHRv
bj4KKyAgICAgICAgKTsKKyAgICAgIH0KKworICAgICAgdmFyIG5vd1Nob3dpbmcgPSB0aGlzLnBy
b3BzLm5vd1Nob3dpbmc7CisgICAgICByZXR1cm4gKAorICAgICAgICA8Zm9vdGVyIGNsYXNzTmFt
ZT0iZm9vdGVyIj4KKyAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9InRvZG8tY291bnQiPgorICAg
ICAgICAgICAgPHN0cm9uZz57dGhpcy5wcm9wcy5jb3VudH08L3N0cm9uZz4ge2FjdGl2ZVRvZG9X
b3JkfSBsZWZ0CisgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgIDx1bCBjbGFzc05hbWU9ImZp
bHRlcnMiPgorICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICA8YQorICAgICAgICAgICAg
ICAgIGhyZWY9IiMvIgorICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyh7c2Vs
ZWN0ZWQ6IG5vd1Nob3dpbmcgPT09IGFwcC5BTExfVE9ET1N9KX0+CisgICAgICAgICAgICAgICAg
ICBBbGwKKyAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAg
IHsnICd9CisgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgIDxhCisgICAgICAgICAgICAg
ICAgaHJlZj0iIy9hY3RpdmUiCisgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVz
KHtzZWxlY3RlZDogbm93U2hvd2luZyA9PT0gYXBwLkFDVElWRV9UT0RPU30pfT4KKyAgICAgICAg
ICAgICAgICAgIEFjdGl2ZQorICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICA8L2xpPgor
ICAgICAgICAgICAgeycgJ30KKyAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgPGEKKyAg
ICAgICAgICAgICAgICBocmVmPSIjL2NvbXBsZXRlZCIKKyAgICAgICAgICAgICAgICBjbGFzc05h
bWU9e2NsYXNzTmFtZXMoe3NlbGVjdGVkOiBub3dTaG93aW5nID09PSBhcHAuQ09NUExFVEVEX1RP
RE9TfSl9PgorICAgICAgICAgICAgICAgICAgQ29tcGxldGVkCisgICAgICAgICAgICAgIDwvYT4K
KyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgPC91bD4KKyAgICAgICAgICB7Y2xlYXJCdXR0
b259CisgICAgICAgIDwvZm9vdGVyPgorICAgICAgKTsKKyAgICB9CisgIH0pOworCisgIHZhciBF
U0NBUEVfS0VZID0gMjc7CisgIHZhciBFTlRFUl9LRVkgPSAxMzsKKworICB2YXIgVG9kb0l0ZW0g
PSBSZWFjdC5jcmVhdGVDbGFzcyh7CisgICAgaGFuZGxlU3VibWl0OiBmdW5jdGlvbiAoZXZlbnQp
IHsKKyAgICAgIHZhciB2YWwgPSB0aGlzLnN0YXRlLmVkaXRUZXh0LnRyaW0oKTsKKyAgICAgIGlm
ICh2YWwpIHsKKyAgICAgICAgdGhpcy5wcm9wcy5vblNhdmUodmFsKTsKKyAgICAgICAgdGhpcy5z
ZXRTdGF0ZSh7ZWRpdFRleHQ6IHZhbH0pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpcy5w
cm9wcy5vbkRlc3Ryb3koKTsKKyAgICAgIH0KKyAgICB9LAorCisgICAgaGFuZGxlRWRpdDogZnVu
Y3Rpb24gKCkgeworICAgICAgdGhpcy5wcm9wcy5vbkVkaXQoKTsKKyAgICAgIHRoaXMuc2V0U3Rh
dGUoe2VkaXRUZXh0OiB0aGlzLnByb3BzLnRvZG8udGl0bGV9KTsKKyAgICB9LAorCisgICAgaGFu
ZGxlS2V5RG93bjogZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICBpZiAoZXZlbnQud2hpY2ggPT09
IEVTQ0FQRV9LRVkpIHsKKyAgICAgICAgdGhpcy5zZXRTdGF0ZSh7ZWRpdFRleHQ6IHRoaXMucHJv
cHMudG9kby50aXRsZX0pOworICAgICAgICB0aGlzLnByb3BzLm9uQ2FuY2VsKGV2ZW50KTsKKyAg
ICAgIH0gZWxzZSBpZiAoZXZlbnQud2hpY2ggPT09IEVOVEVSX0tFWSkgeworICAgICAgICB0aGlz
LmhhbmRsZVN1Ym1pdChldmVudCk7CisgICAgICB9CisgICAgfSwKKworICAgIGhhbmRsZUNoYW5n
ZTogZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICBpZiAodGhpcy5wcm9wcy5lZGl0aW5nKSB7Cisg
ICAgICAgIHRoaXMuc2V0U3RhdGUoe2VkaXRUZXh0OiBldmVudC50YXJnZXQudmFsdWV9KTsKKyAg
ICAgIH0KKyAgICB9LAorCisgICAgZ2V0SW5pdGlhbFN0YXRlOiBmdW5jdGlvbiAoKSB7CisgICAg
ICByZXR1cm4ge2VkaXRUZXh0OiB0aGlzLnByb3BzLnRvZG8udGl0bGV9OworICAgIH0sCisKKyAg
ICAvKioKKyAgICAgKiBUaGlzIGlzIGEgY29tcGxldGVseSBvcHRpb25hbCBwZXJmb3JtYW5jZSBl
bmhhbmNlbWVudCB0aGF0IHlvdSBjYW4KKyAgICAgKiBpbXBsZW1lbnQgb24gYW55IFJlYWN0IGNv
bXBvbmVudC4gSWYgeW91IHdlcmUgdG8gZGVsZXRlIHRoaXMgbWV0aG9kCisgICAgICogdGhlIGFw
cCB3b3VsZCBzdGlsbCB3b3JrIGNvcnJlY3RseSAoYW5kIHN0aWxsIGJlIHZlcnkgcGVyZm9ybWFu
dCEpLCB3ZQorICAgICAqIGp1c3QgdXNlIGl0IGFzIGFuIGV4YW1wbGUgb2YgaG93IGxpdHRsZSBj
b2RlIGl0IHRha2VzIHRvIGdldCBhbiBvcmRlcgorICAgICAqIG9mIG1hZ25pdHVkZSBwZXJmb3Jt
YW5jZSBpbXByb3ZlbWVudC4KKyAgICAgKi8KKyAgICBzaG91bGRDb21wb25lbnRVcGRhdGU6IGZ1
bmN0aW9uIChuZXh0UHJvcHMsIG5leHRTdGF0ZSkgeworICAgICAgcmV0dXJuICgKKyAgICAgICAg
bmV4dFByb3BzLnRvZG8gIT09IHRoaXMucHJvcHMudG9kbyB8fAorICAgICAgICBuZXh0UHJvcHMu
ZWRpdGluZyAhPT0gdGhpcy5wcm9wcy5lZGl0aW5nIHx8CisgICAgICAgIG5leHRTdGF0ZS5lZGl0
VGV4dCAhPT0gdGhpcy5zdGF0ZS5lZGl0VGV4dAorICAgICAgKTsKKyAgICB9LAorCisgICAgLyoq
CisgICAgICogU2FmZWx5IG1hbmlwdWxhdGUgdGhlIERPTSBhZnRlciB1cGRhdGluZyB0aGUgc3Rh
dGUgd2hlbiBpbnZva2luZworICAgICAqIGB0aGlzLnByb3BzLm9uRWRpdCgpYCBpbiB0aGUgYGhh
bmRsZUVkaXRgIG1ldGhvZCBhYm92ZS4KKyAgICAgKiBGb3IgbW9yZSBpbmZvIHJlZmVyIHRvIG5v
dGVzIGF0IGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvY29tcG9uZW50LWFw
aS5odG1sI3NldHN0YXRlCisgICAgICogYW5kIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3Jl
YWN0L2RvY3MvY29tcG9uZW50LXNwZWNzLmh0bWwjdXBkYXRpbmctY29tcG9uZW50ZGlkdXBkYXRl
CisgICAgICovCisgICAgY29tcG9uZW50RGlkVXBkYXRlOiBmdW5jdGlvbiAocHJldlByb3BzKSB7
CisgICAgICBpZiAoIXByZXZQcm9wcy5lZGl0aW5nICYmIHRoaXMucHJvcHMuZWRpdGluZykgewor
ICAgICAgICB2YXIgbm9kZSA9IFJlYWN0LmZpbmRET01Ob2RlKHRoaXMucmVmcy5lZGl0RmllbGQp
OworICAgICAgICBub2RlLmZvY3VzKCk7CisgICAgICAgIG5vZGUuc2V0U2VsZWN0aW9uUmFuZ2Uo
bm9kZS52YWx1ZS5sZW5ndGgsIG5vZGUudmFsdWUubGVuZ3RoKTsKKyAgICAgIH0KKyAgICB9LAor
CisgICAgcmVuZGVyOiBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gKAorICAgICAgICA8bGkg
Y2xhc3NOYW1lPXtjbGFzc05hbWVzKHsKKyAgICAgICAgICBjb21wbGV0ZWQ6IHRoaXMucHJvcHMu
dG9kby5jb21wbGV0ZWQsCisgICAgICAgICAgZWRpdGluZzogdGhpcy5wcm9wcy5lZGl0aW5nCisg
ICAgICAgIH0pfT4KKyAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0idmlldyI+CisgICAgICAgICAg
ICA8aW5wdXQKKyAgICAgICAgICAgICAgY2xhc3NOYW1lPSJ0b2dnbGUiCisgICAgICAgICAgICAg
IHR5cGU9ImNoZWNrYm94IgorICAgICAgICAgICAgICBjaGVja2VkPXt0aGlzLnByb3BzLnRvZG8u
Y29tcGxldGVkfQorICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5wcm9wcy5vblRvZ2dsZX0K
KyAgICAgICAgICAgIC8+CisgICAgICAgICAgICA8bGFiZWwgb25Eb3VibGVDbGljaz17dGhpcy5o
YW5kbGVFZGl0fT4KKyAgICAgICAgICAgICAge3RoaXMucHJvcHMudG9kby50aXRsZX0KKyAgICAg
ICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT0iZGVzdHJveSIg
b25DbGljaz17dGhpcy5wcm9wcy5vbkRlc3Ryb3l9IC8+CisgICAgICAgICAgPC9kaXY+CisgICAg
ICAgICAgPGlucHV0CisgICAgICAgICAgICByZWY9ImVkaXRGaWVsZCIKKyAgICAgICAgICAgIGNs
YXNzTmFtZT0iZWRpdCIKKyAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmVkaXRUZXh0fQor
ICAgICAgICAgICAgb25CbHVyPXt0aGlzLmhhbmRsZVN1Ym1pdH0KKyAgICAgICAgICAgIG9uQ2hh
bmdlPXt0aGlzLmhhbmRsZUNoYW5nZX0KKyAgICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5oYW5k
bGVLZXlEb3dufQorICAgICAgICAgIC8+CisgICAgICAgIDwvbGk+CisgICAgICApOworICAgIH0K
KyAgfSk7CisKKwl2YXIgRU5URVJfS0VZID0gMTM7CisKKwl2YXIgVG9kb0FwcCA9IFJlYWN0LmNy
ZWF0ZUNsYXNzKHsKKwkJZ2V0SW5pdGlhbFN0YXRlOiBmdW5jdGlvbiAoKSB7CisJCQlyZXR1cm4g
eworCQkJCW5vd1Nob3dpbmc6IGFwcC5BTExfVE9ET1MsCisJCQkJZWRpdGluZzogbnVsbCwKKwkJ
CQluZXdUb2RvOiAnJworCQkJfTsKKwkJfSwKKworCQljb21wb25lbnREaWRNb3VudDogZnVuY3Rp
b24gKCkgeworCQkJdmFyIHNldFN0YXRlID0gdGhpcy5zZXRTdGF0ZTsKKwkJCXZhciByb3V0ZXIg
PSBSb3V0ZXIoeworCQkJCScvJzogc2V0U3RhdGUuYmluZCh0aGlzLCB7bm93U2hvd2luZzogYXBw
LkFMTF9UT0RPU30pLAorCQkJCScvYWN0aXZlJzogc2V0U3RhdGUuYmluZCh0aGlzLCB7bm93U2hv
d2luZzogYXBwLkFDVElWRV9UT0RPU30pLAorCQkJCScvY29tcGxldGVkJzogc2V0U3RhdGUuYmlu
ZCh0aGlzLCB7bm93U2hvd2luZzogYXBwLkNPTVBMRVRFRF9UT0RPU30pCisJCQl9KTsKKwkJCXJv
dXRlci5pbml0KCcvJyk7CisJCX0sCisKKwkJaGFuZGxlQ2hhbmdlOiBmdW5jdGlvbiAoZXZlbnQp
IHsKKwkJCXRoaXMuc2V0U3RhdGUoe25ld1RvZG86IGV2ZW50LnRhcmdldC52YWx1ZX0pOworCQl9
LAorCisJCWhhbmRsZU5ld1RvZG9LZXlEb3duOiBmdW5jdGlvbiAoZXZlbnQpIHsKKwkJCWlmIChl
dmVudC5rZXlDb2RlICE9PSBFTlRFUl9LRVkpIHsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCWV2
ZW50LnByZXZlbnREZWZhdWx0KCk7CisKKwkJCXZhciB2YWwgPSB0aGlzLnN0YXRlLm5ld1RvZG8u
dHJpbSgpOworCisJCQlpZiAodmFsKSB7CisJCQkJdGhpcy5wcm9wcy5tb2RlbC5hZGRUb2RvKHZh
bCk7CisJCQkJdGhpcy5zZXRTdGF0ZSh7bmV3VG9kbzogJyd9KTsKKwkJCX0KKwkJfSwKKworCQl0
b2dnbGVBbGw6IGZ1bmN0aW9uIChldmVudCkgeworCQkJdmFyIGNoZWNrZWQgPSBldmVudC50YXJn
ZXQuY2hlY2tlZDsKKwkJCXRoaXMucHJvcHMubW9kZWwudG9nZ2xlQWxsKGNoZWNrZWQpOworCQl9
LAorCisJCXRvZ2dsZTogZnVuY3Rpb24gKHRvZG9Ub1RvZ2dsZSkgeworCQkJdGhpcy5wcm9wcy5t
b2RlbC50b2dnbGUodG9kb1RvVG9nZ2xlKTsKKwkJfSwKKworCQlkZXN0cm95OiBmdW5jdGlvbiAo
dG9kbykgeworCQkJdGhpcy5wcm9wcy5tb2RlbC5kZXN0cm95KHRvZG8pOworCQl9LAorCisJCWVk
aXQ6IGZ1bmN0aW9uICh0b2RvKSB7CisJCQl0aGlzLnNldFN0YXRlKHtlZGl0aW5nOiB0b2RvLmlk
fSk7CisJCX0sCisKKwkJc2F2ZTogZnVuY3Rpb24gKHRvZG9Ub1NhdmUsIHRleHQpIHsKKwkJCXRo
aXMucHJvcHMubW9kZWwuc2F2ZSh0b2RvVG9TYXZlLCB0ZXh0KTsKKwkJCXRoaXMuc2V0U3RhdGUo
e2VkaXRpbmc6IG51bGx9KTsKKwkJfSwKKworCQljYW5jZWw6IGZ1bmN0aW9uICgpIHsKKwkJCXRo
aXMuc2V0U3RhdGUoe2VkaXRpbmc6IG51bGx9KTsKKwkJfSwKKworCQljbGVhckNvbXBsZXRlZDog
ZnVuY3Rpb24gKCkgeworCQkJdGhpcy5wcm9wcy5tb2RlbC5jbGVhckNvbXBsZXRlZCgpOworCQl9
LAorCisJCXJlbmRlcjogZnVuY3Rpb24gKCkgeworCQkJdmFyIGZvb3RlcjsKKwkJCXZhciBtYWlu
OworCQkJdmFyIHRvZG9zID0gdGhpcy5wcm9wcy5tb2RlbC50b2RvczsKKworCQkJdmFyIHNob3du
VG9kb3MgPSB0b2Rvcy5maWx0ZXIoZnVuY3Rpb24gKHRvZG8pIHsKKwkJCQlzd2l0Y2ggKHRoaXMu
c3RhdGUubm93U2hvd2luZykgeworCQkJCWNhc2UgYXBwLkFDVElWRV9UT0RPUzoKKwkJCQkJcmV0
dXJuICF0b2RvLmNvbXBsZXRlZDsKKwkJCQljYXNlIGFwcC5DT01QTEVURURfVE9ET1M6CisJCQkJ
CXJldHVybiB0b2RvLmNvbXBsZXRlZDsKKwkJCQlkZWZhdWx0OgorCQkJCQlyZXR1cm4gdHJ1ZTsK
KwkJCQl9CisJCQl9LCB0aGlzKTsKKworCQkJdmFyIHRvZG9JdGVtcyA9IHNob3duVG9kb3MubWFw
KGZ1bmN0aW9uICh0b2RvKSB7CisJCQkJcmV0dXJuICgKKwkJCQkJPFRvZG9JdGVtCisJCQkJCQlr
ZXk9e3RvZG8uaWR9CisJCQkJCQl0b2RvPXt0b2RvfQorCQkJCQkJb25Ub2dnbGU9e3RoaXMudG9n
Z2xlLmJpbmQodGhpcywgdG9kbyl9CisJCQkJCQlvbkRlc3Ryb3k9e3RoaXMuZGVzdHJveS5iaW5k
KHRoaXMsIHRvZG8pfQorCQkJCQkJb25FZGl0PXt0aGlzLmVkaXQuYmluZCh0aGlzLCB0b2RvKX0K
KwkJCQkJCWVkaXRpbmc9e3RoaXMuc3RhdGUuZWRpdGluZyA9PT0gdG9kby5pZH0KKwkJCQkJCW9u
U2F2ZT17dGhpcy5zYXZlLmJpbmQodGhpcywgdG9kbyl9CisJCQkJCQlvbkNhbmNlbD17dGhpcy5j
YW5jZWx9CisJCQkJCS8+CisJCQkJKTsKKwkJCX0sIHRoaXMpOworCisJCQl2YXIgYWN0aXZlVG9k
b0NvdW50ID0gdG9kb3MucmVkdWNlKGZ1bmN0aW9uIChhY2N1bSwgdG9kbykgeworCQkJCXJldHVy
biB0b2RvLmNvbXBsZXRlZCA/IGFjY3VtIDogYWNjdW0gKyAxOworCQkJfSwgMCk7CisKKwkJCXZh
ciBjb21wbGV0ZWRDb3VudCA9IHRvZG9zLmxlbmd0aCAtIGFjdGl2ZVRvZG9Db3VudDsKKworCQkJ
aWYgKGFjdGl2ZVRvZG9Db3VudCB8fCBjb21wbGV0ZWRDb3VudCkgeworCQkJCWZvb3RlciA9CisJ
CQkJCTxUb2RvRm9vdGVyCisJCQkJCQljb3VudD17YWN0aXZlVG9kb0NvdW50fQorCQkJCQkJY29t
cGxldGVkQ291bnQ9e2NvbXBsZXRlZENvdW50fQorCQkJCQkJbm93U2hvd2luZz17dGhpcy5zdGF0
ZS5ub3dTaG93aW5nfQorCQkJCQkJb25DbGVhckNvbXBsZXRlZD17dGhpcy5jbGVhckNvbXBsZXRl
ZH0KKwkJCQkJLz47CisJCQl9CisKKwkJCWlmICh0b2Rvcy5sZW5ndGgpIHsKKwkJCQltYWluID0g
KAorCQkJCQk8c2VjdGlvbiBjbGFzc05hbWU9Im1haW4iPgorCQkJCQkJPGlucHV0CisJCQkJCQkJ
Y2xhc3NOYW1lPSJ0b2dnbGUtYWxsIgorCQkJCQkJCXR5cGU9ImNoZWNrYm94IgorCQkJCQkJCW9u
Q2hhbmdlPXt0aGlzLnRvZ2dsZUFsbH0KKwkJCQkJCQljaGVja2VkPXthY3RpdmVUb2RvQ291bnQg
PT09IDB9CisJCQkJCQkvPgorCQkJCQkJPHVsIGNsYXNzTmFtZT0idG9kby1saXN0Ij4KKwkJCQkJ
CQl7dG9kb0l0ZW1zfQorCQkJCQkJPC91bD4KKwkJCQkJPC9zZWN0aW9uPgorCQkJCSk7CisJCQl9
CisKKwkJCXJldHVybiAoCisJCQkJPGRpdj4KKwkJCQkJPGhlYWRlciBjbGFzc05hbWU9ImhlYWRl
ciI+CisJCQkJCQk8aDE+dG9kb3M8L2gxPgorCQkJCQkJPGlucHV0CisJCQkJCQkJY2xhc3NOYW1l
PSJuZXctdG9kbyIKKwkJCQkJCQlwbGFjZWhvbGRlcj0iV2hhdCBuZWVkcyB0byBiZSBkb25lPyIK
KwkJCQkJCQl2YWx1ZT17dGhpcy5zdGF0ZS5uZXdUb2RvfQorCQkJCQkJCW9uS2V5RG93bj17dGhp
cy5oYW5kbGVOZXdUb2RvS2V5RG93bn0KKwkJCQkJCQlvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFu
Z2V9CisJCQkJCQkJYXV0b0ZvY3VzPXt0cnVlfQorCQkJCQkJLz4KKwkJCQkJPC9oZWFkZXI+CisJ
CQkJCXttYWlufQorCQkJCQl7Zm9vdGVyfQorCQkJCTwvZGl2PgorCQkJKTsKKwkJfQorCX0pOwor
CisJdmFyIG1vZGVsID0gbmV3IGFwcC5Ub2RvTW9kZWwoJ3JlYWN0LXRvZG9zJyk7CisKKwlmdW5j
dGlvbiByZW5kZXIoKSB7CisJCVJlYWN0RE9NLnJlbmRlcigKKwkJCTxUb2RvQXBwIG1vZGVsPXtt
b2RlbH0vPiwKKwkJCWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RvZG9hcHAnKVsw
XQorCQkpOworCX0KKworCW1vZGVsLnN1YnNjcmliZShyZW5kZXIpOworCXJlbmRlcigpOworfSko
KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2xpY2Vuc2UubWQgYi9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9yZWFjdC9saWNlbnNlLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZiZmEyZTM4OWVkOGNjZDg3YjNkNTlkMjI2
MWE3YWQ2MzU0ZmMzNzQKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9saWNl
bnNlLm1kCkBAIC0wLDAgKzEsMjAgQEAKK0V2ZXJ5dGhpbmcgaW4gdGhpcyByZXBvIGlzIE1JVCBM
aWNlbnNlIHVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkLgorCitDb3B5cmlnaHQgKGMpIEFkZHkg
T3NtYW5pLCBTaW5kcmUgU29yaHVzLCBQYXNjYWwgSGFydGlnLCBTdGVwaGVuIFNhd2NodWsuCisK
K1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVy
c29uIG9idGFpbmluZyBhIGNvcHkgb2YKK3RoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9j
dW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluCit0aGUgU29mdHdh
cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUg
cmlnaHRzIHRvCit1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs
IHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZgordGhlIFNvZnR3YXJlLCBhbmQgdG8g
cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv
LAorc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5
cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVk
IGluIGFsbAorY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4K
KworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg
QU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg
VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTCitGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IEFVVEhPUlMgT1IKK0NPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE
QU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUgorSU4gQU4gQUNUSU9OIE9GIENPTlRS
QUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KK0NPTk5F
Q1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBU
SEUgU09GVFdBUkUuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcyBiL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL3JlYWN0L25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDhh
ZTEzYjk1NDk5ZTBhODEyNTQ2YjE0ZjJkNWY1NmRjZDkxYjYyNAotLS0gL2Rldi9udWxsCisrKyBi
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanMKQEAgLTAs
MCArMSw0OCBAQAorLyohCisgIENvcHlyaWdodCAoYykgMjAxNiBKZWQgV2F0c29uLgorICBMaWNl
bnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZQorICBodHRwOi8vamVkd2F0c29u
LmdpdGh1Yi5pby9jbGFzc25hbWVzCisqLworLyogZ2xvYmFsIGRlZmluZSAqLworCisoZnVuY3Rp
b24gKCkgeworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHZhciBoYXNPd24gPSB7fS5oYXNPd25Q
cm9wZXJ0eTsKKworICAgIGZ1bmN0aW9uIGNsYXNzTmFtZXMgKCkgeworICAgICAgICB2YXIgY2xh
c3NlcyA9IFtdOworCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgYXJnID0gYXJndW1lbnRzW2ldOworICAgICAgICAg
ICAgaWYgKCFhcmcpIGNvbnRpbnVlOworCisgICAgICAgICAgICB2YXIgYXJnVHlwZSA9IHR5cGVv
ZiBhcmc7CisKKyAgICAgICAgICAgIGlmIChhcmdUeXBlID09PSAnc3RyaW5nJyB8fCBhcmdUeXBl
ID09PSAnbnVtYmVyJykgeworICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCh0aGlzICYmIHRo
aXNbYXJnXSB8fCBhcmcpOworICAgICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFy
ZykpIHsKKyAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goY2xhc3NOYW1lcy5hcHBseSh0aGlz
LCBhcmcpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnVHlwZSA9PT0gJ29iamVjdCcpIHsK
KyAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gYXJnKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNsYXNzZXMucHVzaCh0aGlzICYmIHRoaXNba2V5XSB8fCBrZXkpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIGNsYXNzZXMuam9pbignICcpOworICAgIH0KKworICAg
IGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykgewor
ICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7CisgICAgfSBlbHNlIGlmICh0eXBl
b2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0
JyAmJiBkZWZpbmUuYW1kKSB7CisgICAgICAgIC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywg
Y29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWUKKyAgICAgICAgZGVmaW5lKCdjbGFzc25h
bWVzJywgW10sIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBjbGFzc05hbWVzOwor
ICAgICAgICB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICB3aW5kb3cuY2xhc3NOYW1lcyA9IGNs
YXNzTmFtZXM7CisgICAgfQorfSgpKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25v
ZGVfbW9kdWxlcy9jbGFzc25hbWVzL2RlZHVwZS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVf
bW9kdWxlcy9jbGFzc25hbWVzL2RlZHVwZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NTQ2ZjhlM2ExMGY0MWJj
MTFhMmZiOGY3MmZkNGUyZTZlMGEyMWVhCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
cmVhY3Qvbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvZGVkdXBlLmpzCkBAIC0wLDAgKzEsMTA5IEBA
CisvKiEKKyAgQ29weXJpZ2h0IChjKSAyMDE2IEplZCBXYXRzb24uCisgIExpY2Vuc2VkIHVuZGVy
IHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlCisgIGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlv
L2NsYXNzbmFtZXMKKyovCisvKiBnbG9iYWwgZGVmaW5lICovCisKKyhmdW5jdGlvbiAoKSB7Cisg
ICAgJ3VzZSBzdHJpY3QnOworCisgICAgdmFyIGNsYXNzTmFtZXMgPSAoZnVuY3Rpb24gKCkgewor
ICAgICAgICAvLyBkb24ndCBpbmhlcml0IGZyb20gT2JqZWN0IHNvIHdlIGNhbiBza2lwIGhhc093
blByb3BlcnR5IGNoZWNrIGxhdGVyCisgICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNv
bS9xdWVzdGlvbnMvMTU1MTgzMjgvY3JlYXRpbmctanMtb2JqZWN0LXdpdGgtb2JqZWN0LWNyZWF0
ZW51bGwjYW5zd2VyLTIxMDc5MjMyCisgICAgICAgIGZ1bmN0aW9uIFN0b3JhZ2VPYmplY3QoKSB7
fQorICAgICAgICBTdG9yYWdlT2JqZWN0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7
CisKKyAgICAgICAgZnVuY3Rpb24gX3BhcnNlQXJyYXkgKHJlc3VsdFNldCwgYXJyYXkpIHsKKyAg
ICAgICAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7CisKKyAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBfcGFyc2UocmVz
dWx0U2V0LCBhcnJheVtpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2
YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7CisKKyAgICAgICAgZnVuY3Rpb24gX3BhcnNl
TnVtYmVyIChyZXN1bHRTZXQsIG51bSkgeworICAgICAgICAgICAgcmVzdWx0U2V0W251bV0gPSB0
cnVlOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gX3BhcnNlT2JqZWN0IChyZXN1bHRT
ZXQsIG9iamVjdCkgeworICAgICAgICAgICAgZm9yICh2YXIgayBpbiBvYmplY3QpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwob2JqZWN0LCBrKSkgeworICAgICAgICAgICAgICAg
ICAgICAvLyBzZXQgdmFsdWUgdG8gZmFsc2UgaW5zdGVhZCBvZiBkZWxldGluZyBpdCB0byBhdm9p
ZCBjaGFuZ2luZyBvYmplY3Qgc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vd3d3LnNtYXNoaW5nbWFnYXppbmUuY29tLzIwMTIvMTEvd3JpdGluZy1mYXN0LW1lbW9yeS1l
ZmZpY2llbnQtamF2YXNjcmlwdC8jZGUtcmVmZXJlbmNpbmctbWlzY29uY2VwdGlvbnMKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0U2V0W2tdID0gISFvYmplY3Rba107CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdmFyIFNQQUNFID0gL1xz
Ky87CisgICAgICAgIGZ1bmN0aW9uIF9wYXJzZVN0cmluZyAocmVzdWx0U2V0LCBzdHIpIHsKKyAg
ICAgICAgICAgIHZhciBhcnJheSA9IHN0ci5zcGxpdChTUEFDRSk7CisgICAgICAgICAgICB2YXIg
bGVuZ3RoID0gYXJyYXkubGVuZ3RoOworCisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0U2V0W2FycmF5W2ldXSA9IHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBfcGFyc2Ug
KHJlc3VsdFNldCwgYXJnKSB7CisgICAgICAgICAgICBpZiAoIWFyZykgcmV0dXJuOworICAgICAg
ICAgICAgdmFyIGFyZ1R5cGUgPSB0eXBlb2YgYXJnOworCisgICAgICAgICAgICAvLyAnZm9vIGJh
cicKKyAgICAgICAgICAgIGlmIChhcmdUeXBlID09PSAnc3RyaW5nJykgeworICAgICAgICAgICAg
ICAgIF9wYXJzZVN0cmluZyhyZXN1bHRTZXQsIGFyZyk7CisKKyAgICAgICAgICAgIC8vIFsnZm9v
JywgJ2JhcicsIC4uLl0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcp
KSB7CisgICAgICAgICAgICAgICAgX3BhcnNlQXJyYXkocmVzdWx0U2V0LCBhcmcpOworCisgICAg
ICAgICAgICAvLyB7ICdmb28nOiB0cnVlLCAuLi4gfQorICAgICAgICAgICAgfSBlbHNlIGlmIChh
cmdUeXBlID09PSAnb2JqZWN0JykgeworICAgICAgICAgICAgICAgIF9wYXJzZU9iamVjdChyZXN1
bHRTZXQsIGFyZyk7CisKKyAgICAgICAgICAgIC8vICcxMzAnCisgICAgICAgICAgICB9IGVsc2Ug
aWYgKGFyZ1R5cGUgPT09ICdudW1iZXInKSB7CisgICAgICAgICAgICAgICAgX3BhcnNlTnVtYmVy
KHJlc3VsdFNldCwgYXJnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1
bmN0aW9uIF9jbGFzc05hbWVzICgpIHsKKyAgICAgICAgICAgIC8vIGRvbid0IGxlYWsgYXJndW1l
bnRzCisgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWVi
aXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMzItbGVha2luZy1hcmd1bWVudHMKKyAgICAg
ICAgICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOworICAgICAgICAgICAgdmFyIGFyZ3Mg
PSBBcnJheShsZW4pOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykg
eworICAgICAgICAgICAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHZhciBjbGFzc1NldCA9IG5ldyBTdG9yYWdlT2JqZWN0KCk7CisgICAg
ICAgICAgICBfcGFyc2VBcnJheShjbGFzc1NldCwgYXJncyk7CisKKyAgICAgICAgICAgIHZhciBs
aXN0ID0gW107CisKKyAgICAgICAgICAgIGZvciAodmFyIGsgaW4gY2xhc3NTZXQpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoY2xhc3NTZXRba10pIHsKKyAgICAgICAgICAgICAgICAgICAgbGlzdC5w
dXNoKGspCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBy
ZXR1cm4gbGlzdC5qb2luKCcgJyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gX2NsYXNz
TmFtZXM7CisgICAgfSkoKTsKKworICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVk
JyAmJiBtb2R1bGUuZXhwb3J0cykgeworICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFt
ZXM7CisgICAgfSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVv
ZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7CisgICAgICAgIC8vIHJl
Z2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWUK
KyAgICAgICAgZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiBjbGFzc05hbWVzOworICAgICAgICB9KTsKKyAgICB9IGVsc2UgeworICAgICAg
ICB3aW5kb3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7CisgICAgfQorfSgpKTsKZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIGIv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMzhmMGZmMmJmOTBhMjkzZjQzMGZlOTc4ZDk0ZmEwYjU3ZWFjODUxOAotLS0gL2Rldi9u
dWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4
LmpzCkBAIC0wLDAgKzEsNDggQEAKKy8qIQorICBDb3B5cmlnaHQgKGMpIDIwMTYgSmVkIFdhdHNv
bi4KKyAgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWUKKyAgaHR0cDov
L2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lcworKi8KKy8qIGdsb2JhbCBkZWZpbmUgKi8K
KworKGZ1bmN0aW9uICgpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICB2YXIgaGFzT3duID0g
e30uaGFzT3duUHJvcGVydHk7CisKKyAgICBmdW5jdGlvbiBjbGFzc05hbWVzICgpIHsKKyAgICAg
ICAgdmFyIGNsYXNzZXMgPSBbXTsKKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3Vt
ZW50cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGFyZyA9IGFyZ3VtZW50c1tpXTsK
KyAgICAgICAgICAgIGlmICghYXJnKSBjb250aW51ZTsKKworICAgICAgICAgICAgdmFyIGFyZ1R5
cGUgPSB0eXBlb2YgYXJnOworCisgICAgICAgICAgICBpZiAoYXJnVHlwZSA9PT0gJ3N0cmluZycg
fHwgYXJnVHlwZSA9PT0gJ251bWJlcicpIHsKKyAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2go
YXJnKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7CisgICAg
ICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKGNsYXNzTmFtZXMuYXBwbHkobnVsbCwgYXJnKSk7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKGFyZ1R5cGUgPT09ICdvYmplY3QnKSB7CisgICAgICAgICAg
ICAgICAgZm9yICh2YXIga2V5IGluIGFyZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoaGFz
T3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjbGFzc2VzLnB1c2goa2V5KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBjbGFzc2Vz
LmpvaW4oJyAnKTsKKyAgICB9CisKKyAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5l
ZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHsKKyAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBjbGFzc05h
bWVzOworICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBl
b2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkgeworICAgICAgICAvLyBy
ZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFja2FnZSBuYW1l
CisgICAgICAgIGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gY2xhc3NOYW1lczsKKyAgICAgICAgfSk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgd2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzOworICAgIH0KK30oKSk7CmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2Rpc3QvcmVhY3Qt
ZG9tLm1pbi5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9yZWFjdC1kb20vZGlz
dC9yZWFjdC1kb20ubWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMyNjFlZGRkNjYwMjNhOWY4MjI1Zjk1MThm
MmI3OTQyNjQ0NjliZTUKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2Rl
X21vZHVsZXMvcmVhY3QtZG9tL2Rpc3QvcmVhY3QtZG9tLm1pbi5qcwpAQCAtMCwwICsxLDE2IEBA
CisvKioKKyAqIFJlYWN0RE9NIHYxNS41LjQKKyAqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50
LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNv
dXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBp
biB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3Vy
Y2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUg
Zm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICov
CishZnVuY3Rpb24oZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9
dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz1lKHJlcXVpcmUoInJlYWN0IikpO2Vsc2UgaWYo
ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoWyJyZWFjdCJdLGUp
O2Vsc2V7dmFyIHQ7dD0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5l
ZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnRo
aXMsdC5SZWFjdERPTT1lKHQuUmVhY3QpfX0oZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQp
e3JldHVybiBmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBvKGEs
cyl7aWYoIW5bYV0pe2lmKCF0W2FdKXt2YXIgdT0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYm
cmVxdWlyZTtpZighcyYmdSlyZXR1cm4gdShhLCEwKTtpZihpKXJldHVybiBpKGEsITApO3ZhciBs
PW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2ErIiciKTt0aHJvdyBsLmNvZGU9Ik1P
RFVMRV9OT1RfRk9VTkQiLGx9dmFyIGM9blthXT17ZXhwb3J0czp7fX07dFthXVswXS5jYWxsKGMu
ZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W2FdWzFdW2VdO3JldHVybiBvKG58fGUpfSxjLGMu
ZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gblthXS5leHBvcnRzfWZvcih2YXIgaT0iZnVuY3Rpb24i
PT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxhPTA7YTxyLmxlbmd0aDthKyspbyhyW2FdKTtyZXR1
cm4gb30oezE6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9e1Byb3BlcnRpZXM6
eyJhcmlhLWN1cnJlbnQiOjAsImFyaWEtZGV0YWlscyI6MCwiYXJpYS1kaXNhYmxlZCI6MCwiYXJp
YS1oaWRkZW4iOjAsImFyaWEtaW52YWxpZCI6MCwiYXJpYS1rZXlzaG9ydGN1dHMiOjAsImFyaWEt
bGFiZWwiOjAsImFyaWEtcm9sZWRlc2NyaXB0aW9uIjowLCJhcmlhLWF1dG9jb21wbGV0ZSI6MCwi
YXJpYS1jaGVja2VkIjowLCJhcmlhLWV4cGFuZGVkIjowLCJhcmlhLWhhc3BvcHVwIjowLCJhcmlh
LWxldmVsIjowLCJhcmlhLW1vZGFsIjowLCJhcmlhLW11bHRpbGluZSI6MCwiYXJpYS1tdWx0aXNl
bGVjdGFibGUiOjAsImFyaWEtb3JpZW50YXRpb24iOjAsImFyaWEtcGxhY2Vob2xkZXIiOjAsImFy
aWEtcHJlc3NlZCI6MCwiYXJpYS1yZWFkb25seSI6MCwiYXJpYS1yZXF1aXJlZCI6MCwiYXJpYS1z
ZWxlY3RlZCI6MCwiYXJpYS1zb3J0IjowLCJhcmlhLXZhbHVlbWF4IjowLCJhcmlhLXZhbHVlbWlu
IjowLCJhcmlhLXZhbHVlbm93IjowLCJhcmlhLXZhbHVldGV4dCI6MCwiYXJpYS1hdG9taWMiOjAs
ImFyaWEtYnVzeSI6MCwiYXJpYS1saXZlIjowLCJhcmlhLXJlbGV2YW50IjowLCJhcmlhLWRyb3Bl
ZmZlY3QiOjAsImFyaWEtZ3JhYmJlZCI6MCwiYXJpYS1hY3RpdmVkZXNjZW5kYW50IjowLCJhcmlh
LWNvbGNvdW50IjowLCJhcmlhLWNvbGluZGV4IjowLCJhcmlhLWNvbHNwYW4iOjAsImFyaWEtY29u
dHJvbHMiOjAsImFyaWEtZGVzY3JpYmVkYnkiOjAsImFyaWEtZXJyb3JtZXNzYWdlIjowLCJhcmlh
LWZsb3d0byI6MCwiYXJpYS1sYWJlbGxlZGJ5IjowLCJhcmlhLW93bnMiOjAsImFyaWEtcG9zaW5z
ZXQiOjAsImFyaWEtcm93Y291bnQiOjAsImFyaWEtcm93aW5kZXgiOjAsImFyaWEtcm93c3BhbiI6
MCwiYXJpYS1zZXRzaXplIjowfSxET01BdHRyaWJ1dGVOYW1lczp7fSxET01Qcm9wZXJ0eU5hbWVz
Ont9fTt0LmV4cG9ydHM9cn0se31dLDI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFy
IHI9ZSgzMyksbz1lKDEzMSksaT17Zm9jdXNET01Db21wb25lbnQ6ZnVuY3Rpb24oKXtvKHIuZ2V0
Tm9kZUZyb21JbnN0YW5jZSh0aGlzKSl9fTt0LmV4cG9ydHM9aX0sezEzMToxMzEsMzM6MzN9XSwz
OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuKGUuY3Ry
bEtleXx8ZS5hbHRLZXl8fGUubWV0YUtleSkmJiEoZS5jdHJsS2V5JiZlLmFsdEtleSl9ZnVuY3Rp
b24gbyhlKXtzd2l0Y2goZSl7Y2FzZSJ0b3BDb21wb3NpdGlvblN0YXJ0IjpyZXR1cm4gVC5jb21w
b3NpdGlvblN0YXJ0O2Nhc2UidG9wQ29tcG9zaXRpb25FbmQiOnJldHVybiBULmNvbXBvc2l0aW9u
RW5kO2Nhc2UidG9wQ29tcG9zaXRpb25VcGRhdGUiOnJldHVybiBULmNvbXBvc2l0aW9uVXBkYXRl
fX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuInRvcEtleURvd24iPT09ZSYmdC5rZXlDb2RlPT09eX1m
dW5jdGlvbiBhKGUsdCl7c3dpdGNoKGUpe2Nhc2UidG9wS2V5VXAiOnJldHVybi0xIT09Zy5pbmRl
eE9mKHQua2V5Q29kZSk7Y2FzZSJ0b3BLZXlEb3duIjpyZXR1cm4gdC5rZXlDb2RlIT09eTtjYXNl
InRvcEtleVByZXNzIjpjYXNlInRvcE1vdXNlRG93biI6Y2FzZSJ0b3BCbHVyIjpyZXR1cm4hMDtk
ZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBzKGUpe3ZhciB0PWUuZGV0YWlsO3JldHVybiJvYmpl
Y3QiPT10eXBlb2YgdCYmImRhdGEiaW4gdD90LmRhdGE6bnVsbH1mdW5jdGlvbiB1KGUsdCxuLHIp
e3ZhciB1LGw7aWYoXz91PW8oZSk6UD9hKGUsbikmJih1PVQuY29tcG9zaXRpb25FbmQpOmkoZSxu
KSYmKHU9VC5jb21wb3NpdGlvblN0YXJ0KSwhdSlyZXR1cm4gbnVsbDtFJiYoUHx8dSE9PVQuY29t
cG9zaXRpb25TdGFydD91PT09VC5jb21wb3NpdGlvbkVuZCYmUCYmKGw9UC5nZXREYXRhKCkpOlA9
aC5nZXRQb29sZWQocikpO3ZhciBjPW0uZ2V0UG9vbGVkKHUsdCxuLHIpO2lmKGwpYy5kYXRhPWw7
ZWxzZXt2YXIgcD1zKG4pO251bGwhPT1wJiYoYy5kYXRhPXApfXJldHVybiBkLmFjY3VtdWxhdGVU
d29QaGFzZURpc3BhdGNoZXMoYyksY31mdW5jdGlvbiBsKGUsdCl7c3dpdGNoKGUpe2Nhc2UidG9w
Q29tcG9zaXRpb25FbmQiOnJldHVybiBzKHQpO2Nhc2UidG9wS2V5UHJlc3MiOnJldHVybiB0Lndo
aWNoIT09eD9udWxsOihrPSEwLHcpO2Nhc2UidG9wVGV4dElucHV0Ijp2YXIgbj10LmRhdGE7cmV0
dXJuIG49PT13JiZrP251bGw6bjtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBjKGUsdCl7
aWYoUCl7aWYoInRvcENvbXBvc2l0aW9uRW5kIj09PWV8fCFfJiZhKGUsdCkpe3ZhciBuPVAuZ2V0
RGF0YSgpO3JldHVybiBoLnJlbGVhc2UoUCksUD1udWxsLG59cmV0dXJuIG51bGx9c3dpdGNoKGUp
e2Nhc2UidG9wUGFzdGUiOnJldHVybiBudWxsO2Nhc2UidG9wS2V5UHJlc3MiOnJldHVybiB0Lndo
aWNoJiYhcih0KT9TdHJpbmcuZnJvbUNoYXJDb2RlKHQud2hpY2gpOm51bGw7Y2FzZSJ0b3BDb21w
b3NpdGlvbkVuZCI6cmV0dXJuIEU/bnVsbDp0LmRhdGE7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVu
Y3Rpb24gcChlLHQsbixyKXt2YXIgbztpZighKG89Yj9sKGUsbik6YyhlLG4pKSlyZXR1cm4gbnVs
bDt2YXIgaT12LmdldFBvb2xlZChULmJlZm9yZUlucHV0LHQsbixyKTtyZXR1cm4gaS5kYXRhPW8s
ZC5hY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKGkpLGl9dmFyIGQ9ZSgxOSksZj1lKDEyMyks
aD1lKDIwKSxtPWUoNzgpLHY9ZSg4MiksZz1bOSwxMywyNywzMl0seT0yMjksXz1mLmNhblVzZURP
TSYmIkNvbXBvc2l0aW9uRXZlbnQiaW4gd2luZG93LEM9bnVsbDtmLmNhblVzZURPTSYmImRvY3Vt
ZW50TW9kZSJpbiBkb2N1bWVudCYmKEM9ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKTt2YXIgYj1mLmNh
blVzZURPTSYmIlRleHRFdmVudCJpbiB3aW5kb3cmJiFDJiYhZnVuY3Rpb24oKXt2YXIgZT13aW5k
b3cub3BlcmE7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgZS52
ZXJzaW9uJiZwYXJzZUludChlLnZlcnNpb24oKSwxMCk8PTEyfSgpLEU9Zi5jYW5Vc2VET00mJigh
X3x8QyYmQz44JiZDPD0xMSkseD0zMix3PVN0cmluZy5mcm9tQ2hhckNvZGUoeCksVD17YmVmb3Jl
SW5wdXQ6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOiJvbkJlZm9yZUlucHV0Iixj
YXB0dXJlZDoib25CZWZvcmVJbnB1dENhcHR1cmUifSxkZXBlbmRlbmNpZXM6WyJ0b3BDb21wb3Np
dGlvbkVuZCIsInRvcEtleVByZXNzIiwidG9wVGV4dElucHV0IiwidG9wUGFzdGUiXX0sY29tcG9z
aXRpb25FbmQ6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOiJvbkNvbXBvc2l0aW9u
RW5kIixjYXB0dXJlZDoib25Db21wb3NpdGlvbkVuZENhcHR1cmUifSxkZXBlbmRlbmNpZXM6WyJ0
b3BCbHVyIiwidG9wQ29tcG9zaXRpb25FbmQiLCJ0b3BLZXlEb3duIiwidG9wS2V5UHJlc3MiLCJ0
b3BLZXlVcCIsInRvcE1vdXNlRG93biJdfSxjb21wb3NpdGlvblN0YXJ0OntwaGFzZWRSZWdpc3Ry
YXRpb25OYW1lczp7YnViYmxlZDoib25Db21wb3NpdGlvblN0YXJ0IixjYXB0dXJlZDoib25Db21w
b3NpdGlvblN0YXJ0Q2FwdHVyZSJ9LGRlcGVuZGVuY2llczpbInRvcEJsdXIiLCJ0b3BDb21wb3Np
dGlvblN0YXJ0IiwidG9wS2V5RG93biIsInRvcEtleVByZXNzIiwidG9wS2V5VXAiLCJ0b3BNb3Vz
ZURvd24iXX0sY29tcG9zaXRpb25VcGRhdGU6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJi
bGVkOiJvbkNvbXBvc2l0aW9uVXBkYXRlIixjYXB0dXJlZDoib25Db21wb3NpdGlvblVwZGF0ZUNh
cHR1cmUifSxkZXBlbmRlbmNpZXM6WyJ0b3BCbHVyIiwidG9wQ29tcG9zaXRpb25VcGRhdGUiLCJ0
b3BLZXlEb3duIiwidG9wS2V5UHJlc3MiLCJ0b3BLZXlVcCIsInRvcE1vdXNlRG93biJdfX0saz0h
MSxQPW51bGwsUz17ZXZlbnRUeXBlczpULGV4dHJhY3RFdmVudHM6ZnVuY3Rpb24oZSx0LG4scil7
cmV0dXJuW3UoZSx0LG4scikscChlLHQsbixyKV19fTt0LmV4cG9ydHM9U30sezEyMzoxMjMsMTk6
MTksMjA6MjAsNzg6NzgsODI6ODJ9XSw0OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1
bmN0aW9uIHIoZSx0KXtyZXR1cm4gZSt0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc3Vic3Ry
aW5nKDEpfXZhciBvPXthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxib3JkZXJJbWFnZU91dHNl
dDohMCxib3JkZXJJbWFnZVNsaWNlOiEwLGJvcmRlckltYWdlV2lkdGg6ITAsYm94RmxleDohMCxi
b3hGbGV4R3JvdXA6ITAsYm94T3JkaW5hbEdyb3VwOiEwLGNvbHVtbkNvdW50OiEwLGZsZXg6ITAs
ZmxleEdyb3c6ITAsZmxleFBvc2l0aXZlOiEwLGZsZXhTaHJpbms6ITAsZmxleE5lZ2F0aXZlOiEw
LGZsZXhPcmRlcjohMCxncmlkUm93OiEwLGdyaWRDb2x1bW46ITAsZm9udFdlaWdodDohMCxsaW5l
Q2xhbXA6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsdGFi
U2l6ZTohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITAsZmlsbE9wYWNpdHk6ITAsZmxvb2RP
cGFjaXR5OiEwLHN0b3BPcGFjaXR5OiEwLHN0cm9rZURhc2hhcnJheTohMCxzdHJva2VEYXNob2Zm
c2V0OiEwLHN0cm9rZU1pdGVybGltaXQ6ITAsc3Ryb2tlT3BhY2l0eTohMCxzdHJva2VXaWR0aDoh
MH0saT1bIldlYmtpdCIsIm1zIiwiTW96IiwiTyJdO09iamVjdC5rZXlzKG8pLmZvckVhY2goZnVu
Y3Rpb24oZSl7aS5mb3JFYWNoKGZ1bmN0aW9uKHQpe29bcih0LGUpXT1vW2VdfSl9KTt2YXIgYT17
YmFja2dyb3VuZDp7YmFja2dyb3VuZEF0dGFjaG1lbnQ6ITAsYmFja2dyb3VuZENvbG9yOiEwLGJh
Y2tncm91bmRJbWFnZTohMCxiYWNrZ3JvdW5kUG9zaXRpb25YOiEwLGJhY2tncm91bmRQb3NpdGlv
blk6ITAsYmFja2dyb3VuZFJlcGVhdDohMH0sYmFja2dyb3VuZFBvc2l0aW9uOntiYWNrZ3JvdW5k
UG9zaXRpb25YOiEwLGJhY2tncm91bmRQb3NpdGlvblk6ITB9LGJvcmRlcjp7Ym9yZGVyV2lkdGg6
ITAsYm9yZGVyU3R5bGU6ITAsYm9yZGVyQ29sb3I6ITB9LGJvcmRlckJvdHRvbTp7Ym9yZGVyQm90
dG9tV2lkdGg6ITAsYm9yZGVyQm90dG9tU3R5bGU6ITAsYm9yZGVyQm90dG9tQ29sb3I6ITB9LGJv
cmRlckxlZnQ6e2JvcmRlckxlZnRXaWR0aDohMCxib3JkZXJMZWZ0U3R5bGU6ITAsYm9yZGVyTGVm
dENvbG9yOiEwfSxib3JkZXJSaWdodDp7Ym9yZGVyUmlnaHRXaWR0aDohMCxib3JkZXJSaWdodFN0
eWxlOiEwLGJvcmRlclJpZ2h0Q29sb3I6ITB9LGJvcmRlclRvcDp7Ym9yZGVyVG9wV2lkdGg6ITAs
Ym9yZGVyVG9wU3R5bGU6ITAsYm9yZGVyVG9wQ29sb3I6ITB9LGZvbnQ6e2ZvbnRTdHlsZTohMCxm
b250VmFyaWFudDohMCxmb250V2VpZ2h0OiEwLGZvbnRTaXplOiEwLGxpbmVIZWlnaHQ6ITAsZm9u
dEZhbWlseTohMH0sb3V0bGluZTp7b3V0bGluZVdpZHRoOiEwLG91dGxpbmVTdHlsZTohMCxvdXRs
aW5lQ29sb3I6ITB9fSxzPXtpc1VuaXRsZXNzTnVtYmVyOm8sc2hvcnRoYW5kUHJvcGVydHlFeHBh
bnNpb25zOmF9O3QuZXhwb3J0cz1zfSx7fV0sNTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0
Ijt2YXIgcj1lKDQpLG89ZSgxMjMpLGk9KGUoNTgpLGUoMTI1KSxlKDk0KSksYT1lKDEzNikscz1l
KDE0MCksdT0oZSgxNDIpLHMoZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSl9KSksbD0hMSxjPSJjc3NG
bG9hdCI7aWYoby5jYW5Vc2VET00pe3ZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
LnN0eWxlO3RyeXtwLmZvbnQ9IiJ9Y2F0Y2goZSl7bD0hMH12b2lkIDA9PT1kb2N1bWVudC5kb2N1
bWVudEVsZW1lbnQuc3R5bGUuY3NzRmxvYXQmJihjPSJzdHlsZUZsb2F0Iil9dmFyIGQ9e2NyZWF0
ZU1hcmt1cEZvclN0eWxlczpmdW5jdGlvbihlLHQpe3ZhciBuPSIiO2Zvcih2YXIgciBpbiBlKWlm
KGUuaGFzT3duUHJvcGVydHkocikpe3ZhciBvPWVbcl07bnVsbCE9byYmKG4rPXUocikrIjoiLG4r
PWkocixvLHQpKyI7Iil9cmV0dXJuIG58fG51bGx9LHNldFZhbHVlRm9yU3R5bGVzOmZ1bmN0aW9u
KGUsdCxuKXt2YXIgbz1lLnN0eWxlO2Zvcih2YXIgYSBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHko
YSkpe3ZhciBzPWkoYSx0W2FdLG4pO2lmKCJmbG9hdCIhPT1hJiYiY3NzRmxvYXQiIT09YXx8KGE9
YykscylvW2FdPXM7ZWxzZXt2YXIgdT1sJiZyLnNob3J0aGFuZFByb3BlcnR5RXhwYW5zaW9uc1th
XTtpZih1KWZvcih2YXIgcCBpbiB1KW9bcF09IiI7ZWxzZSBvW2FdPSIifX19fTt0LmV4cG9ydHM9
ZH0sezEyMzoxMjMsMTI1OjEyNSwxMzY6MTM2LDE0MDoxNDAsMTQyOjE0Miw0OjQsNTg6NTgsOTQ6
OTR9XSw2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZigh
KGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNz
IGFzIGEgZnVuY3Rpb24iKX12YXIgbz1lKDExMiksaT1lKDI0KSxhPShlKDEzNyksZnVuY3Rpb24o
KXtmdW5jdGlvbiBlKHQpe3IodGhpcyxlKSx0aGlzLl9jYWxsYmFja3M9bnVsbCx0aGlzLl9jb250
ZXh0cz1udWxsLHRoaXMuX2FyZz10fXJldHVybiBlLnByb3RvdHlwZS5lbnF1ZXVlPWZ1bmN0aW9u
KGUsdCl7dGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrc3x8W10sdGhpcy5fY2FsbGJhY2tz
LnB1c2goZSksdGhpcy5fY29udGV4dHM9dGhpcy5fY29udGV4dHN8fFtdLHRoaXMuX2NvbnRleHRz
LnB1c2godCl9LGUucHJvdG90eXBlLm5vdGlmeUFsbD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2Nh
bGxiYWNrcyx0PXRoaXMuX2NvbnRleHRzLG49dGhpcy5fYXJnO2lmKGUmJnQpe2UubGVuZ3RoIT09
dC5sZW5ndGgmJm8oIjI0IiksdGhpcy5fY2FsbGJhY2tzPW51bGwsdGhpcy5fY29udGV4dHM9bnVs
bDtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdLmNhbGwodFtyXSxuKTtlLmxlbmd0aD0w
LHQubGVuZ3RoPTB9fSxlLnByb3RvdHlwZS5jaGVja3BvaW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXMuX2NhbGxiYWNrcz90aGlzLl9jYWxsYmFja3MubGVuZ3RoOjB9LGUucHJvdG90eXBlLnJvbGxi
YWNrPWZ1bmN0aW9uKGUpe3RoaXMuX2NhbGxiYWNrcyYmdGhpcy5fY29udGV4dHMmJih0aGlzLl9j
YWxsYmFja3MubGVuZ3RoPWUsdGhpcy5fY29udGV4dHMubGVuZ3RoPWUpfSxlLnByb3RvdHlwZS5y
ZXNldD1mdW5jdGlvbigpe3RoaXMuX2NhbGxiYWNrcz1udWxsLHRoaXMuX2NvbnRleHRzPW51bGx9
LGUucHJvdG90eXBlLmRlc3RydWN0b3I9ZnVuY3Rpb24oKXt0aGlzLnJlc2V0KCl9LGV9KCkpO3Qu
ZXhwb3J0cz1pLmFkZFBvb2xpbmdUbyhhKX0sezExMjoxMTIsMTM3OjEzNywyNDoyNH1dLDc6W2Z1
bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1lLm5vZGVOYW1l
JiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuInNlbGVjdCI9PT10fHwiaW5wdXQiPT09
dCYmImZpbGUiPT09ZS50eXBlfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9dy5nZXRQb29sZWQoUy5jaGFu
Z2UsTSxlLFQoZSkpO0MuYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyh0KSx4LmJhdGNoZWRV
cGRhdGVzKGksdCl9ZnVuY3Rpb24gaShlKXtfLmVucXVldWVFdmVudHMoZSksXy5wcm9jZXNzRXZl
bnRRdWV1ZSghMSl9ZnVuY3Rpb24gYShlLHQpe049ZSxNPXQsTi5hdHRhY2hFdmVudCgib25jaGFu
Z2UiLG8pfWZ1bmN0aW9uIHMoKXtOJiYoTi5kZXRhY2hFdmVudCgib25jaGFuZ2UiLG8pLE49bnVs
bCxNPW51bGwpfWZ1bmN0aW9uIHUoZSx0KXtpZigidG9wQ2hhbmdlIj09PWUpcmV0dXJuIHR9ZnVu
Y3Rpb24gbChlLHQsbil7InRvcEZvY3VzIj09PWU/KHMoKSxhKHQsbikpOiJ0b3BCbHVyIj09PWUm
JnMoKX1mdW5jdGlvbiBjKGUsdCl7Tj1lLE09dCxJPWUudmFsdWUsTz1PYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGUuY29uc3RydWN0b3IucHJvdG90eXBlLCJ2YWx1ZSIpLE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShOLCJ2YWx1ZSIsRCksTi5hdHRhY2hFdmVudD9OLmF0dGFjaEV2ZW50KCJv
bnByb3BlcnR5Y2hhbmdlIixkKTpOLmFkZEV2ZW50TGlzdGVuZXIoInByb3BlcnR5Y2hhbmdlIixk
LCExKX1mdW5jdGlvbiBwKCl7TiYmKGRlbGV0ZSBOLnZhbHVlLE4uZGV0YWNoRXZlbnQ/Ti5kZXRh
Y2hFdmVudCgib25wcm9wZXJ0eWNoYW5nZSIsZCk6Ti5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9w
ZXJ0eWNoYW5nZSIsZCwhMSksTj1udWxsLE09bnVsbCxJPW51bGwsTz1udWxsKX1mdW5jdGlvbiBk
KGUpe2lmKCJ2YWx1ZSI9PT1lLnByb3BlcnR5TmFtZSl7dmFyIHQ9ZS5zcmNFbGVtZW50LnZhbHVl
O3QhPT1JJiYoST10LG8oZSkpfX1mdW5jdGlvbiBmKGUsdCl7aWYoInRvcElucHV0Ij09PWUpcmV0
dXJuIHR9ZnVuY3Rpb24gaChlLHQsbil7InRvcEZvY3VzIj09PWU/KHAoKSxjKHQsbikpOiJ0b3BC
bHVyIj09PWUmJnAoKX1mdW5jdGlvbiBtKGUsdCl7aWYoKCJ0b3BTZWxlY3Rpb25DaGFuZ2UiPT09
ZXx8InRvcEtleVVwIj09PWV8fCJ0b3BLZXlEb3duIj09PWUpJiZOJiZOLnZhbHVlIT09SSlyZXR1
cm4gST1OLnZhbHVlLE19ZnVuY3Rpb24gdihlKXtyZXR1cm4gZS5ub2RlTmFtZSYmImlucHV0Ij09
PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmKCJjaGVja2JveCI9PT1lLnR5cGV8fCJyYWRpbyI9
PT1lLnR5cGUpfWZ1bmN0aW9uIGcoZSx0KXtpZigidG9wQ2xpY2siPT09ZSlyZXR1cm4gdH1mdW5j
dGlvbiB5KGUsdCl7aWYobnVsbCE9ZSl7dmFyIG49ZS5fd3JhcHBlclN0YXRlfHx0Ll93cmFwcGVy
U3RhdGU7aWYobiYmbi5jb250cm9sbGVkJiYibnVtYmVyIj09PXQudHlwZSl7dmFyIHI9IiIrdC52
YWx1ZTt0LmdldEF0dHJpYnV0ZSgidmFsdWUiKSE9PXImJnQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIs
cil9fX12YXIgXz1lKDE2KSxDPWUoMTkpLGI9ZSgxMjMpLEU9ZSgzMykseD1lKDcxKSx3PWUoODAp
LFQ9ZSgxMDIpLGs9ZSgxMDkpLFA9ZSgxMTApLFM9e2NoYW5nZTp7cGhhc2VkUmVnaXN0cmF0aW9u
TmFtZXM6e2J1YmJsZWQ6Im9uQ2hhbmdlIixjYXB0dXJlZDoib25DaGFuZ2VDYXB0dXJlIn0sZGVw
ZW5kZW5jaWVzOlsidG9wQmx1ciIsInRvcENoYW5nZSIsInRvcENsaWNrIiwidG9wRm9jdXMiLCJ0
b3BJbnB1dCIsInRvcEtleURvd24iLCJ0b3BLZXlVcCIsInRvcFNlbGVjdGlvbkNoYW5nZSJdfX0s
Tj1udWxsLE09bnVsbCxJPW51bGwsTz1udWxsLFI9ITE7Yi5jYW5Vc2VET00mJihSPWsoImNoYW5n
ZSIpJiYoIWRvY3VtZW50LmRvY3VtZW50TW9kZXx8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlPjgpKTt2
YXIgQT0hMTtiLmNhblVzZURPTSYmKEE9aygiaW5wdXQiKSYmKCFkb2N1bWVudC5kb2N1bWVudE1v
ZGV8fGRvY3VtZW50LmRvY3VtZW50TW9kZT4xMSkpO3ZhciBEPXtnZXQ6ZnVuY3Rpb24oKXtyZXR1
cm4gTy5nZXQuY2FsbCh0aGlzKX0sc2V0OmZ1bmN0aW9uKGUpe0k9IiIrZSxPLnNldC5jYWxsKHRo
aXMsZSl9fSxMPXtldmVudFR5cGVzOlMsZXh0cmFjdEV2ZW50czpmdW5jdGlvbihlLHQsbixvKXt2
YXIgaSxhLHM9dD9FLmdldE5vZGVGcm9tSW5zdGFuY2UodCk6d2luZG93O2lmKHIocyk/Uj9pPXU6
YT1sOlAocyk/QT9pPWY6KGk9bSxhPWgpOnYocykmJihpPWcpLGkpe3ZhciBjPWkoZSx0KTtpZihj
KXt2YXIgcD13LmdldFBvb2xlZChTLmNoYW5nZSxjLG4sbyk7cmV0dXJuIHAudHlwZT0iY2hhbmdl
IixDLmFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMocCkscH19YSYmYShlLHMsdCksInRvcEJs
dXIiPT09ZSYmeSh0LHMpfX07dC5leHBvcnRzPUx9LHsxMDI6MTAyLDEwOToxMDksMTEwOjExMCwx
MjM6MTIzLDE2OjE2LDE5OjE5LDMzOjMzLDcxOjcxLDgwOjgwfV0sODpbZnVuY3Rpb24oZSx0LG4p
eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJih0
PXRbMV0pLHQ/dC5uZXh0U2libGluZzplLmZpcnN0Q2hpbGR9ZnVuY3Rpb24gbyhlLHQsbil7Yy5p
bnNlcnRUcmVlQmVmb3JlKGUsdCxuKX1mdW5jdGlvbiBpKGUsdCxuKXtBcnJheS5pc0FycmF5KHQp
P3MoZSx0WzBdLHRbMV0sbik6bShlLHQsbil9ZnVuY3Rpb24gYShlLHQpe2lmKEFycmF5LmlzQXJy
YXkodCkpe3ZhciBuPXRbMV07dD10WzBdLHUoZSx0LG4pLGUucmVtb3ZlQ2hpbGQobil9ZS5yZW1v
dmVDaGlsZCh0KX1mdW5jdGlvbiBzKGUsdCxuLHIpe2Zvcih2YXIgbz10Ozspe3ZhciBpPW8ubmV4
dFNpYmxpbmc7aWYobShlLG8sciksbz09PW4pYnJlYWs7bz1pfX1mdW5jdGlvbiB1KGUsdCxuKXtm
b3IoOzspe3ZhciByPXQubmV4dFNpYmxpbmc7aWYocj09PW4pYnJlYWs7ZS5yZW1vdmVDaGlsZChy
KX19ZnVuY3Rpb24gbChlLHQsbil7dmFyIHI9ZS5wYXJlbnROb2RlLG89ZS5uZXh0U2libGluZztv
PT09dD9uJiZtKHIsZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobiksbyk6bj8oaChvLG4pLHUocixv
LHQpKTp1KHIsZSx0KX12YXIgYz1lKDkpLHA9ZSgxMyksZD0oZSgzMyksZSg1OCksZSg5MykpLGY9
ZSgxMTQpLGg9ZSgxMTUpLG09ZChmdW5jdGlvbihlLHQsbil7ZS5pbnNlcnRCZWZvcmUodCxuKX0p
LHY9cC5kYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cCxnPXtkYW5nZXJvdXNseVJlcGxh
Y2VOb2RlV2l0aE1hcmt1cDp2LHJlcGxhY2VEZWxpbWl0ZWRUZXh0OmwscHJvY2Vzc1VwZGF0ZXM6
ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHM9dFtuXTtzd2l0
Y2gocy50eXBlKXtjYXNlIklOU0VSVF9NQVJLVVAiOm8oZSxzLmNvbnRlbnQscihlLHMuYWZ0ZXJO
b2RlKSk7YnJlYWs7Y2FzZSJNT1ZFX0VYSVNUSU5HIjppKGUscy5mcm9tTm9kZSxyKGUscy5hZnRl
ck5vZGUpKTticmVhaztjYXNlIlNFVF9NQVJLVVAiOmYoZSxzLmNvbnRlbnQpO2JyZWFrO2Nhc2Ui
VEVYVF9DT05URU5UIjpoKGUscy5jb250ZW50KTticmVhaztjYXNlIlJFTU9WRV9OT0RFIjphKGUs
cy5mcm9tTm9kZSl9fX19O3QuZXhwb3J0cz1nfSx7MTE0OjExNCwxMTU6MTE1LDEzOjEzLDMzOjMz
LDU4OjU4LDk6OSw5Mzo5M31dLDk6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rp
b24gcihlKXtpZihoKXt2YXIgdD1lLm5vZGUsbj1lLmNoaWxkcmVuO2lmKG4ubGVuZ3RoKWZvcih2
YXIgcj0wO3I8bi5sZW5ndGg7cisrKW0odCxuW3JdLG51bGwpO2Vsc2UgbnVsbCE9ZS5odG1sP3Ao
dCxlLmh0bWwpOm51bGwhPWUudGV4dCYmZih0LGUudGV4dCl9fWZ1bmN0aW9uIG8oZSx0KXtlLnBh
cmVudE5vZGUucmVwbGFjZUNoaWxkKHQubm9kZSxlKSxyKHQpfWZ1bmN0aW9uIGkoZSx0KXtoP2Uu
Y2hpbGRyZW4ucHVzaCh0KTplLm5vZGUuYXBwZW5kQ2hpbGQodC5ub2RlKX1mdW5jdGlvbiBhKGUs
dCl7aD9lLmh0bWw9dDpwKGUubm9kZSx0KX1mdW5jdGlvbiBzKGUsdCl7aD9lLnRleHQ9dDpmKGUu
bm9kZSx0KX1mdW5jdGlvbiB1KCl7cmV0dXJuIHRoaXMubm9kZS5ub2RlTmFtZX1mdW5jdGlvbiBs
KGUpe3JldHVybntub2RlOmUsY2hpbGRyZW46W10saHRtbDpudWxsLHRleHQ6bnVsbCx0b1N0cmlu
Zzp1fX12YXIgYz1lKDEwKSxwPWUoMTE0KSxkPWUoOTMpLGY9ZSgxMTUpLGg9InVuZGVmaW5lZCIh
PXR5cGVvZiBkb2N1bWVudCYmIm51bWJlciI9PXR5cGVvZiBkb2N1bWVudC5kb2N1bWVudE1vZGV8
fCJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiYic3RyaW5nIj09dHlwZW9mIG5hdmlnYXRv
ci51c2VyQWdlbnQmJi9cYkVkZ2VcL1xkLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLG09ZChm
dW5jdGlvbihlLHQsbil7MTE9PT10Lm5vZGUubm9kZVR5cGV8fDE9PT10Lm5vZGUubm9kZVR5cGUm
JiJvYmplY3QiPT09dC5ub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJihudWxsPT10Lm5vZGUu
bmFtZXNwYWNlVVJJfHx0Lm5vZGUubmFtZXNwYWNlVVJJPT09Yy5odG1sKT8ocih0KSxlLmluc2Vy
dEJlZm9yZSh0Lm5vZGUsbikpOihlLmluc2VydEJlZm9yZSh0Lm5vZGUsbikscih0KSl9KTtsLmlu
c2VydFRyZWVCZWZvcmU9bSxsLnJlcGxhY2VDaGlsZFdpdGhUcmVlPW8sbC5xdWV1ZUNoaWxkPWks
bC5xdWV1ZUhUTUw9YSxsLnF1ZXVlVGV4dD1zLHQuZXhwb3J0cz1sfSx7MTA6MTAsMTE0OjExNCwx
MTU6MTE1LDkzOjkzfV0sMTA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9e2h0
bWw6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLG1hdGhtbDoiaHR0cDovL3d3dy53My5v
cmcvMTk5OC9NYXRoL01hdGhNTCIsc3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ9O3Qu
ZXhwb3J0cz1yfSx7fV0sMTE6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24g
cihlLHQpe3JldHVybihlJnQpPT09dH12YXIgbz1lKDExMiksaT0oZSgxMzcpLHtNVVNUX1VTRV9Q
Uk9QRVJUWToxLEhBU19CT09MRUFOX1ZBTFVFOjQsSEFTX05VTUVSSUNfVkFMVUU6OCxIQVNfUE9T
SVRJVkVfTlVNRVJJQ19WQUxVRToyNCxIQVNfT1ZFUkxPQURFRF9CT09MRUFOX1ZBTFVFOjMyLGlu
amVjdERPTVByb3BlcnR5Q29uZmlnOmZ1bmN0aW9uKGUpe3ZhciB0PWksbj1lLlByb3BlcnRpZXN8
fHt9LGE9ZS5ET01BdHRyaWJ1dGVOYW1lc3BhY2VzfHx7fSx1PWUuRE9NQXR0cmlidXRlTmFtZXN8
fHt9LGw9ZS5ET01Qcm9wZXJ0eU5hbWVzfHx7fSxjPWUuRE9NTXV0YXRpb25NZXRob2RzfHx7fTtl
LmlzQ3VzdG9tQXR0cmlidXRlJiZzLl9pc0N1c3RvbUF0dHJpYnV0ZUZ1bmN0aW9ucy5wdXNoKGUu
aXNDdXN0b21BdHRyaWJ1dGUpO2Zvcih2YXIgcCBpbiBuKXtzLnByb3BlcnRpZXMuaGFzT3duUHJv
cGVydHkocCkmJm8oIjQ4IixwKTt2YXIgZD1wLnRvTG93ZXJDYXNlKCksZj1uW3BdLGg9e2F0dHJp
YnV0ZU5hbWU6ZCxhdHRyaWJ1dGVOYW1lc3BhY2U6bnVsbCxwcm9wZXJ0eU5hbWU6cCxtdXRhdGlv
bk1ldGhvZDpudWxsLG11c3RVc2VQcm9wZXJ0eTpyKGYsdC5NVVNUX1VTRV9QUk9QRVJUWSksaGFz
Qm9vbGVhblZhbHVlOnIoZix0LkhBU19CT09MRUFOX1ZBTFVFKSxoYXNOdW1lcmljVmFsdWU6cihm
LHQuSEFTX05VTUVSSUNfVkFMVUUpLGhhc1Bvc2l0aXZlTnVtZXJpY1ZhbHVlOnIoZix0LkhBU19Q
T1NJVElWRV9OVU1FUklDX1ZBTFVFKSxoYXNPdmVybG9hZGVkQm9vbGVhblZhbHVlOnIoZix0LkhB
U19PVkVSTE9BREVEX0JPT0xFQU5fVkFMVUUpfTtpZihoLmhhc0Jvb2xlYW5WYWx1ZStoLmhhc051
bWVyaWNWYWx1ZStoLmhhc092ZXJsb2FkZWRCb29sZWFuVmFsdWU8PTF8fG8oIjUwIixwKSx1Lmhh
c093blByb3BlcnR5KHApKXt2YXIgbT11W3BdO2guYXR0cmlidXRlTmFtZT1tfWEuaGFzT3duUHJv
cGVydHkocCkmJihoLmF0dHJpYnV0ZU5hbWVzcGFjZT1hW3BdKSxsLmhhc093blByb3BlcnR5KHAp
JiYoaC5wcm9wZXJ0eU5hbWU9bFtwXSksYy5oYXNPd25Qcm9wZXJ0eShwKSYmKGgubXV0YXRpb25N
ZXRob2Q9Y1twXSkscy5wcm9wZXJ0aWVzW3BdPWh9fX0pLGE9IjpBLVpfYS16XFx1MDBDMC1cXHUw
MEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1c
XHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAw
MS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEIixzPXtJRF9BVFRSSUJVVEVf
TkFNRToiZGF0YS1yZWFjdGlkIixST09UX0FUVFJJQlVURV9OQU1FOiJkYXRhLXJlYWN0cm9vdCIs
QVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUjphLEFUVFJJQlVURV9OQU1FX0NIQVI6YSsiXFwtLjAt
OVxcdTAwQjdcXHUwMzAwLVxcdTAzNkZcXHUyMDNGLVxcdTIwNDAiLHByb3BlcnRpZXM6e30sZ2V0
UG9zc2libGVTdGFuZGFyZE5hbWU6bnVsbCxfaXNDdXN0b21BdHRyaWJ1dGVGdW5jdGlvbnM6W10s
aXNDdXN0b21BdHRyaWJ1dGU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxzLl9pc0N1c3RvbUF0
dHJpYnV0ZUZ1bmN0aW9ucy5sZW5ndGg7dCsrKWlmKCgwLHMuX2lzQ3VzdG9tQXR0cmlidXRlRnVu
Y3Rpb25zW3RdKShlKSlyZXR1cm4hMDtyZXR1cm4hMX0saW5qZWN0aW9uOml9O3QuZXhwb3J0cz1z
fSx7MTEyOjExMiwxMzc6MTM3fV0sMTI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVu
Y3Rpb24gcihlKXtyZXR1cm4hIWwuaGFzT3duUHJvcGVydHkoZSl8fCF1Lmhhc093blByb3BlcnR5
KGUpJiYocy50ZXN0KGUpPyhsW2VdPSEwLCEwKToodVtlXT0hMCwhMSkpfWZ1bmN0aW9uIG8oZSx0
KXtyZXR1cm4gbnVsbD09dHx8ZS5oYXNCb29sZWFuVmFsdWUmJiF0fHxlLmhhc051bWVyaWNWYWx1
ZSYmaXNOYU4odCl8fGUuaGFzUG9zaXRpdmVOdW1lcmljVmFsdWUmJnQ8MXx8ZS5oYXNPdmVybG9h
ZGVkQm9vbGVhblZhbHVlJiYhMT09PXR9dmFyIGk9ZSgxMSksYT0oZSgzMyksZSg1OCksZSgxMTEp
KSxzPShlKDE0MiksbmV3IFJlZ0V4cCgiXlsiK2kuQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUisi
XVsiK2kuQVRUUklCVVRFX05BTUVfQ0hBUisiXSokIikpLHU9e30sbD17fSxjPXtjcmVhdGVNYXJr
dXBGb3JJRDpmdW5jdGlvbihlKXtyZXR1cm4gaS5JRF9BVFRSSUJVVEVfTkFNRSsiPSIrYShlKX0s
c2V0QXR0cmlidXRlRm9ySUQ6ZnVuY3Rpb24oZSx0KXtlLnNldEF0dHJpYnV0ZShpLklEX0FUVFJJ
QlVURV9OQU1FLHQpfSxjcmVhdGVNYXJrdXBGb3JSb290OmZ1bmN0aW9uKCl7cmV0dXJuIGkuUk9P
VF9BVFRSSUJVVEVfTkFNRSsnPSIiJ30sc2V0QXR0cmlidXRlRm9yUm9vdDpmdW5jdGlvbihlKXtl
LnNldEF0dHJpYnV0ZShpLlJPT1RfQVRUUklCVVRFX05BTUUsIiIpfSxjcmVhdGVNYXJrdXBGb3JQ
cm9wZXJ0eTpmdW5jdGlvbihlLHQpe3ZhciBuPWkucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShl
KT9pLnByb3BlcnRpZXNbZV06bnVsbDtpZihuKXtpZihvKG4sdCkpcmV0dXJuIiI7dmFyIHI9bi5h
dHRyaWJ1dGVOYW1lO3JldHVybiBuLmhhc0Jvb2xlYW5WYWx1ZXx8bi5oYXNPdmVybG9hZGVkQm9v
bGVhblZhbHVlJiYhMD09PXQ/cisnPSIiJzpyKyI9IithKHQpfXJldHVybiBpLmlzQ3VzdG9tQXR0
cmlidXRlKGUpP251bGw9PXQ/IiI6ZSsiPSIrYSh0KTpudWxsfSxjcmVhdGVNYXJrdXBGb3JDdXN0
b21BdHRyaWJ1dGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcihlKSYmbnVsbCE9dD9lKyI9IithKHQp
OiIifSxzZXRWYWx1ZUZvclByb3BlcnR5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1pLnByb3BlcnRp
ZXMuaGFzT3duUHJvcGVydHkodCk/aS5wcm9wZXJ0aWVzW3RdOm51bGw7aWYocil7dmFyIGE9ci5t
dXRhdGlvbk1ldGhvZDtpZihhKWEoZSxuKTtlbHNle2lmKG8ocixuKSlyZXR1cm4gdm9pZCB0aGlz
LmRlbGV0ZVZhbHVlRm9yUHJvcGVydHkoZSx0KTtpZihyLm11c3RVc2VQcm9wZXJ0eSllW3IucHJv
cGVydHlOYW1lXT1uO2Vsc2V7dmFyIHM9ci5hdHRyaWJ1dGVOYW1lLHU9ci5hdHRyaWJ1dGVOYW1l
c3BhY2U7dT9lLnNldEF0dHJpYnV0ZU5TKHUscywiIituKTpyLmhhc0Jvb2xlYW5WYWx1ZXx8ci5o
YXNPdmVybG9hZGVkQm9vbGVhblZhbHVlJiYhMD09PW4/ZS5zZXRBdHRyaWJ1dGUocywiIik6ZS5z
ZXRBdHRyaWJ1dGUocywiIituKX19fWVsc2UgaWYoaS5pc0N1c3RvbUF0dHJpYnV0ZSh0KSlyZXR1
cm4gdm9pZCBjLnNldFZhbHVlRm9yQXR0cmlidXRlKGUsdCxuKX0sc2V0VmFsdWVGb3JBdHRyaWJ1
dGU6ZnVuY3Rpb24oZSx0LG4pe3IodCkmJihudWxsPT1uP2UucmVtb3ZlQXR0cmlidXRlKHQpOmUu
c2V0QXR0cmlidXRlKHQsIiIrbikpfSxkZWxldGVWYWx1ZUZvckF0dHJpYnV0ZTpmdW5jdGlvbihl
LHQpe2UucmVtb3ZlQXR0cmlidXRlKHQpfSxkZWxldGVWYWx1ZUZvclByb3BlcnR5OmZ1bmN0aW9u
KGUsdCl7dmFyIG49aS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KHQpP2kucHJvcGVydGllc1t0
XTpudWxsO2lmKG4pe3ZhciByPW4ubXV0YXRpb25NZXRob2Q7aWYocilyKGUsdm9pZCAwKTtlbHNl
IGlmKG4ubXVzdFVzZVByb3BlcnR5KXt2YXIgbz1uLnByb3BlcnR5TmFtZTtuLmhhc0Jvb2xlYW5W
YWx1ZT9lW29dPSExOmVbb109IiJ9ZWxzZSBlLnJlbW92ZUF0dHJpYnV0ZShuLmF0dHJpYnV0ZU5h
bWUpfWVsc2UgaS5pc0N1c3RvbUF0dHJpYnV0ZSh0KSYmZS5yZW1vdmVBdHRyaWJ1dGUodCl9fTt0
LmV4cG9ydHM9Y30sezExOjExLDExMToxMTEsMTQyOjE0MiwzMzozMyw1ODo1OH1dLDEzOltmdW5j
dGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMTEyKSxvPWUoOSksaT1lKDEyMyksYT1l
KDEyOCkscz1lKDEyOSksdT0oZSgxMzcpLHtkYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1
cDpmdW5jdGlvbihlLHQpe2lmKGkuY2FuVXNlRE9NfHxyKCI1NiIpLHR8fHIoIjU3IiksIkhUTUwi
PT09ZS5ub2RlTmFtZSYmcigiNTgiKSwic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBuPWEodCxzKVsw
XTtlLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG4sZSl9ZWxzZSBvLnJlcGxhY2VDaGlsZFdpdGhU
cmVlKGUsdCl9fSk7dC5leHBvcnRzPXV9LHsxMTI6MTEyLDEyMzoxMjMsMTI4OjEyOCwxMjk6MTI5
LDEzNzoxMzcsOTo5fV0sMTQ6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9WyJS
ZXNwb25kZXJFdmVudFBsdWdpbiIsIlNpbXBsZUV2ZW50UGx1Z2luIiwiVGFwRXZlbnRQbHVnaW4i
LCJFbnRlckxlYXZlRXZlbnRQbHVnaW4iLCJDaGFuZ2VFdmVudFBsdWdpbiIsIlNlbGVjdEV2ZW50
UGx1Z2luIiwiQmVmb3JlSW5wdXRFdmVudFBsdWdpbiJdO3QuZXhwb3J0cz1yfSx7fV0sMTU6W2Z1
bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgxOSksbz1lKDMzKSxpPWUoODQpLGE9
e21vdXNlRW50ZXI6e3JlZ2lzdHJhdGlvbk5hbWU6Im9uTW91c2VFbnRlciIsZGVwZW5kZW5jaWVz
OlsidG9wTW91c2VPdXQiLCJ0b3BNb3VzZU92ZXIiXX0sbW91c2VMZWF2ZTp7cmVnaXN0cmF0aW9u
TmFtZToib25Nb3VzZUxlYXZlIixkZXBlbmRlbmNpZXM6WyJ0b3BNb3VzZU91dCIsInRvcE1vdXNl
T3ZlciJdfX0scz17ZXZlbnRUeXBlczphLGV4dHJhY3RFdmVudHM6ZnVuY3Rpb24oZSx0LG4scyl7
aWYoInRvcE1vdXNlT3ZlciI9PT1lJiYobi5yZWxhdGVkVGFyZ2V0fHxuLmZyb21FbGVtZW50KSly
ZXR1cm4gbnVsbDtpZigidG9wTW91c2VPdXQiIT09ZSYmInRvcE1vdXNlT3ZlciIhPT1lKXJldHVy
biBudWxsO3ZhciB1O2lmKHMud2luZG93PT09cyl1PXM7ZWxzZXt2YXIgbD1zLm93bmVyRG9jdW1l
bnQ7dT1sP2wuZGVmYXVsdFZpZXd8fGwucGFyZW50V2luZG93OndpbmRvd312YXIgYyxwO2lmKCJ0
b3BNb3VzZU91dCI9PT1lKXtjPXQ7dmFyIGQ9bi5yZWxhdGVkVGFyZ2V0fHxuLnRvRWxlbWVudDtw
PWQ/by5nZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShkKTpudWxsfWVsc2UgYz1udWxsLHA9dDtp
ZihjPT09cClyZXR1cm4gbnVsbDt2YXIgZj1udWxsPT1jP3U6by5nZXROb2RlRnJvbUluc3RhbmNl
KGMpLGg9bnVsbD09cD91Om8uZ2V0Tm9kZUZyb21JbnN0YW5jZShwKSxtPWkuZ2V0UG9vbGVkKGEu
bW91c2VMZWF2ZSxjLG4scyk7bS50eXBlPSJtb3VzZWxlYXZlIixtLnRhcmdldD1mLG0ucmVsYXRl
ZFRhcmdldD1oO3ZhciB2PWkuZ2V0UG9vbGVkKGEubW91c2VFbnRlcixwLG4scyk7cmV0dXJuIHYu
dHlwZT0ibW91c2VlbnRlciIsdi50YXJnZXQ9aCx2LnJlbGF0ZWRUYXJnZXQ9ZixyLmFjY3VtdWxh
dGVFbnRlckxlYXZlRGlzcGF0Y2hlcyhtLHYsYyxwKSxbbSx2XX19O3QuZXhwb3J0cz1zfSx7MTk6
MTksMzM6MzMsODQ6ODR9XSwxNjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlv
biByKGUpe3JldHVybiJidXR0b24iPT09ZXx8ImlucHV0Ij09PWV8fCJzZWxlY3QiPT09ZXx8InRl
eHRhcmVhIj09PWV9ZnVuY3Rpb24gbyhlLHQsbil7c3dpdGNoKGUpe2Nhc2Uib25DbGljayI6Y2Fz
ZSJvbkNsaWNrQ2FwdHVyZSI6Y2FzZSJvbkRvdWJsZUNsaWNrIjpjYXNlIm9uRG91YmxlQ2xpY2tD
YXB0dXJlIjpjYXNlIm9uTW91c2VEb3duIjpjYXNlIm9uTW91c2VEb3duQ2FwdHVyZSI6Y2FzZSJv
bk1vdXNlTW92ZSI6Y2FzZSJvbk1vdXNlTW92ZUNhcHR1cmUiOmNhc2Uib25Nb3VzZVVwIjpjYXNl
Im9uTW91c2VVcENhcHR1cmUiOnJldHVybiEoIW4uZGlzYWJsZWR8fCFyKHQpKTtkZWZhdWx0OnJl
dHVybiExfX12YXIgaT1lKDExMiksYT1lKDE3KSxzPWUoMTgpLHU9ZSg1MCksbD1lKDkxKSxjPWUo
OTgpLHA9KGUoMTM3KSx7fSksZD1udWxsLGY9ZnVuY3Rpb24oZSx0KXtlJiYocy5leGVjdXRlRGlz
cGF0Y2hlc0luT3JkZXIoZSx0KSxlLmlzUGVyc2lzdGVudCgpfHxlLmNvbnN0cnVjdG9yLnJlbGVh
c2UoZSkpfSxoPWZ1bmN0aW9uKGUpe3JldHVybiBmKGUsITApfSxtPWZ1bmN0aW9uKGUpe3JldHVy
biBmKGUsITEpfSx2PWZ1bmN0aW9uKGUpe3JldHVybiIuIitlLl9yb290Tm9kZUlEfSxnPXtpbmpl
Y3Rpb246e2luamVjdEV2ZW50UGx1Z2luT3JkZXI6YS5pbmplY3RFdmVudFBsdWdpbk9yZGVyLGlu
amVjdEV2ZW50UGx1Z2luc0J5TmFtZTphLmluamVjdEV2ZW50UGx1Z2luc0J5TmFtZX0scHV0TGlz
dGVuZXI6ZnVuY3Rpb24oZSx0LG4peyJmdW5jdGlvbiIhPXR5cGVvZiBuJiZpKCI5NCIsdCx0eXBl
b2Ygbik7dmFyIHI9dihlKTsocFt0XXx8KHBbdF09e30pKVtyXT1uO3ZhciBvPWEucmVnaXN0cmF0
aW9uTmFtZU1vZHVsZXNbdF07byYmby5kaWRQdXRMaXN0ZW5lciYmby5kaWRQdXRMaXN0ZW5lcihl
LHQsbil9LGdldExpc3RlbmVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49cFt0XTtpZihvKHQsZS5fY3Vy
cmVudEVsZW1lbnQudHlwZSxlLl9jdXJyZW50RWxlbWVudC5wcm9wcykpcmV0dXJuIG51bGw7dmFy
IHI9dihlKTtyZXR1cm4gbiYmbltyXX0sZGVsZXRlTGlzdGVuZXI6ZnVuY3Rpb24oZSx0KXt2YXIg
bj1hLnJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzW3RdO24mJm4ud2lsbERlbGV0ZUxpc3RlbmVyJiZu
LndpbGxEZWxldGVMaXN0ZW5lcihlLHQpO3ZhciByPXBbdF07ciYmZGVsZXRlIHJbdihlKV19LGRl
bGV0ZUFsbExpc3RlbmVyczpmdW5jdGlvbihlKXt2YXIgdD12KGUpO2Zvcih2YXIgbiBpbiBwKWlm
KHAuaGFzT3duUHJvcGVydHkobikmJnBbbl1bdF0pe3ZhciByPWEucmVnaXN0cmF0aW9uTmFtZU1v
ZHVsZXNbbl07ciYmci53aWxsRGVsZXRlTGlzdGVuZXImJnIud2lsbERlbGV0ZUxpc3RlbmVyKGUs
biksZGVsZXRlIHBbbl1bdF19fSxleHRyYWN0RXZlbnRzOmZ1bmN0aW9uKGUsdCxuLHIpe2Zvcih2
YXIgbyxpPWEucGx1Z2lucyxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciB1PWlbc107aWYodSl7dmFy
IGM9dS5leHRyYWN0RXZlbnRzKGUsdCxuLHIpO2MmJihvPWwobyxjKSl9fXJldHVybiBvfSxlbnF1
ZXVlRXZlbnRzOmZ1bmN0aW9uKGUpe2UmJihkPWwoZCxlKSl9LHByb2Nlc3NFdmVudFF1ZXVlOmZ1
bmN0aW9uKGUpe3ZhciB0PWQ7ZD1udWxsLGU/Yyh0LGgpOmModCxtKSxkJiZpKCI5NSIpLHUucmV0
aHJvd0NhdWdodEVycm9yKCl9LF9fcHVyZ2U6ZnVuY3Rpb24oKXtwPXt9fSxfX2dldExpc3RlbmVy
QmFuazpmdW5jdGlvbigpe3JldHVybiBwfX07dC5leHBvcnRzPWd9LHsxMTI6MTEyLDEzNzoxMzcs
MTc6MTcsMTg6MTgsNTA6NTAsOTE6OTEsOTg6OTh9XSwxNzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ug
c3RyaWN0IjtmdW5jdGlvbiByKCl7aWYocylmb3IodmFyIGUgaW4gdSl7dmFyIHQ9dVtlXSxuPXMu
aW5kZXhPZihlKTtpZihuPi0xfHxhKCI5NiIsZSksIWwucGx1Z2luc1tuXSl7dC5leHRyYWN0RXZl
bnRzfHxhKCI5NyIsZSksbC5wbHVnaW5zW25dPXQ7dmFyIHI9dC5ldmVudFR5cGVzO2Zvcih2YXIg
aSBpbiByKW8ocltpXSx0LGkpfHxhKCI5OCIsaSxlKX19fWZ1bmN0aW9uIG8oZSx0LG4pe2wuZXZl
bnROYW1lRGlzcGF0Y2hDb25maWdzLmhhc093blByb3BlcnR5KG4pJiZhKCI5OSIsbiksbC5ldmVu
dE5hbWVEaXNwYXRjaENvbmZpZ3Nbbl09ZTt2YXIgcj1lLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVz
O2lmKHIpe2Zvcih2YXIgbyBpbiByKWlmKHIuaGFzT3duUHJvcGVydHkobykpe3ZhciBzPXJbb107
aShzLHQsbil9cmV0dXJuITB9cmV0dXJuISFlLnJlZ2lzdHJhdGlvbk5hbWUmJihpKGUucmVnaXN0
cmF0aW9uTmFtZSx0LG4pLCEwKX1mdW5jdGlvbiBpKGUsdCxuKXtsLnJlZ2lzdHJhdGlvbk5hbWVN
b2R1bGVzW2VdJiZhKCIxMDAiLGUpLGwucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbZV09dCxsLnJl
Z2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXNbZV09dC5ldmVudFR5cGVzW25dLmRlcGVuZGVuY2ll
c312YXIgYT1lKDExMikscz0oZSgxMzcpLG51bGwpLHU9e30sbD17cGx1Z2luczpbXSxldmVudE5h
bWVEaXNwYXRjaENvbmZpZ3M6e30scmVnaXN0cmF0aW9uTmFtZU1vZHVsZXM6e30scmVnaXN0cmF0
aW9uTmFtZURlcGVuZGVuY2llczp7fSxwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzOm51bGwsaW5q
ZWN0RXZlbnRQbHVnaW5PcmRlcjpmdW5jdGlvbihlKXtzJiZhKCIxMDEiKSxzPUFycmF5LnByb3Rv
dHlwZS5zbGljZS5jYWxsKGUpLHIoKX0saW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lOmZ1bmN0aW9u
KGUpe3ZhciB0PSExO2Zvcih2YXIgbiBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkobikpe3ZhciBv
PWVbbl07dS5oYXNPd25Qcm9wZXJ0eShuKSYmdVtuXT09PW98fCh1W25dJiZhKCIxMDIiLG4pLHVb
bl09byx0PSEwKX10JiZyKCl9LGdldFBsdWdpbk1vZHVsZUZvckV2ZW50OmZ1bmN0aW9uKGUpe3Zh
ciB0PWUuZGlzcGF0Y2hDb25maWc7aWYodC5yZWdpc3RyYXRpb25OYW1lKXJldHVybiBsLnJlZ2lz
dHJhdGlvbk5hbWVNb2R1bGVzW3QucmVnaXN0cmF0aW9uTmFtZV18fG51bGw7aWYodm9pZCAwIT09
dC5waGFzZWRSZWdpc3RyYXRpb25OYW1lcyl7dmFyIG49dC5waGFzZWRSZWdpc3RyYXRpb25OYW1l
cztmb3IodmFyIHIgaW4gbilpZihuLmhhc093blByb3BlcnR5KHIpKXt2YXIgbz1sLnJlZ2lzdHJh
dGlvbk5hbWVNb2R1bGVzW25bcl1dO2lmKG8pcmV0dXJuIG99fXJldHVybiBudWxsfSxfcmVzZXRF
dmVudFBsdWdpbnM6ZnVuY3Rpb24oKXtzPW51bGw7Zm9yKHZhciBlIGluIHUpdS5oYXNPd25Qcm9w
ZXJ0eShlKSYmZGVsZXRlIHVbZV07bC5wbHVnaW5zLmxlbmd0aD0wO3ZhciB0PWwuZXZlbnROYW1l
RGlzcGF0Y2hDb25maWdzO2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJmRlbGV0
ZSB0W25dO3ZhciByPWwucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXM7Zm9yKHZhciBvIGluIHIpci5o
YXNPd25Qcm9wZXJ0eShvKSYmZGVsZXRlIHJbb119fTt0LmV4cG9ydHM9bH0sezExMjoxMTIsMTM3
OjEzN31dLDE4OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0
dXJuInRvcE1vdXNlVXAiPT09ZXx8InRvcFRvdWNoRW5kIj09PWV8fCJ0b3BUb3VjaENhbmNlbCI9
PT1lfWZ1bmN0aW9uIG8oZSl7cmV0dXJuInRvcE1vdXNlTW92ZSI9PT1lfHwidG9wVG91Y2hNb3Zl
Ij09PWV9ZnVuY3Rpb24gaShlKXtyZXR1cm4idG9wTW91c2VEb3duIj09PWV8fCJ0b3BUb3VjaFN0
YXJ0Ij09PWV9ZnVuY3Rpb24gYShlLHQsbixyKXt2YXIgbz1lLnR5cGV8fCJ1bmtub3duLWV2ZW50
IjtlLmN1cnJlbnRUYXJnZXQ9Zy5nZXROb2RlRnJvbUluc3RhbmNlKHIpLHQ/bS5pbnZva2VHdWFy
ZGVkQ2FsbGJhY2tXaXRoQ2F0Y2gobyxuLGUpOm0uaW52b2tlR3VhcmRlZENhbGxiYWNrKG8sbixl
KSxlLmN1cnJlbnRUYXJnZXQ9bnVsbH1mdW5jdGlvbiBzKGUsdCl7dmFyIG49ZS5fZGlzcGF0Y2hM
aXN0ZW5lcnMscj1lLl9kaXNwYXRjaEluc3RhbmNlcztpZihBcnJheS5pc0FycmF5KG4pKWZvcih2
YXIgbz0wO288bi5sZW5ndGgmJiFlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7bysrKWEoZSx0LG5b
b10scltvXSk7ZWxzZSBuJiZhKGUsdCxuLHIpO2UuX2Rpc3BhdGNoTGlzdGVuZXJzPW51bGwsZS5f
ZGlzcGF0Y2hJbnN0YW5jZXM9bnVsbH1mdW5jdGlvbiB1KGUpe3ZhciB0PWUuX2Rpc3BhdGNoTGlz
dGVuZXJzLG49ZS5fZGlzcGF0Y2hJbnN0YW5jZXM7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZh
ciByPTA7cjx0Lmxlbmd0aCYmIWUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtyKyspaWYodFtyXShl
LG5bcl0pKXJldHVybiBuW3JdfWVsc2UgaWYodCYmdChlLG4pKXJldHVybiBuO3JldHVybiBudWxs
fWZ1bmN0aW9uIGwoZSl7dmFyIHQ9dShlKTtyZXR1cm4gZS5fZGlzcGF0Y2hJbnN0YW5jZXM9bnVs
bCxlLl9kaXNwYXRjaExpc3RlbmVycz1udWxsLHR9ZnVuY3Rpb24gYyhlKXt2YXIgdD1lLl9kaXNw
YXRjaExpc3RlbmVycyxuPWUuX2Rpc3BhdGNoSW5zdGFuY2VzO0FycmF5LmlzQXJyYXkodCkmJmgo
IjEwMyIpLGUuY3VycmVudFRhcmdldD10P2cuZ2V0Tm9kZUZyb21JbnN0YW5jZShuKTpudWxsO3Zh
ciByPXQ/dChlKTpudWxsO3JldHVybiBlLmN1cnJlbnRUYXJnZXQ9bnVsbCxlLl9kaXNwYXRjaExp
c3RlbmVycz1udWxsLGUuX2Rpc3BhdGNoSW5zdGFuY2VzPW51bGwscn1mdW5jdGlvbiBwKGUpe3Jl
dHVybiEhZS5fZGlzcGF0Y2hMaXN0ZW5lcnN9dmFyIGQsZixoPWUoMTEyKSxtPWUoNTApLHY9KGUo
MTM3KSxlKDE0Mikse2luamVjdENvbXBvbmVudFRyZWU6ZnVuY3Rpb24oZSl7ZD1lfSxpbmplY3RU
cmVlVHJhdmVyc2FsOmZ1bmN0aW9uKGUpe2Y9ZX19KSxnPXtpc0VuZGlzaDpyLGlzTW92ZWlzaDpv
LGlzU3RhcnRpc2g6aSxleGVjdXRlRGlyZWN0RGlzcGF0Y2g6YyxleGVjdXRlRGlzcGF0Y2hlc0lu
T3JkZXI6cyxleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXJTdG9wQXRUcnVlOmwsaGFzRGlzcGF0Y2hl
czpwLGdldEluc3RhbmNlRnJvbU5vZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGQuZ2V0SW5zdGFuY2VG
cm9tTm9kZShlKX0sZ2V0Tm9kZUZyb21JbnN0YW5jZTpmdW5jdGlvbihlKXtyZXR1cm4gZC5nZXRO
b2RlRnJvbUluc3RhbmNlKGUpfSxpc0FuY2VzdG9yOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGYuaXNB
bmNlc3RvcihlLHQpfSxnZXRMb3dlc3RDb21tb25BbmNlc3RvcjpmdW5jdGlvbihlLHQpe3JldHVy
biBmLmdldExvd2VzdENvbW1vbkFuY2VzdG9yKGUsdCl9LGdldFBhcmVudEluc3RhbmNlOmZ1bmN0
aW9uKGUpe3JldHVybiBmLmdldFBhcmVudEluc3RhbmNlKGUpfSx0cmF2ZXJzZVR3b1BoYXNlOmZ1
bmN0aW9uKGUsdCxuKXtyZXR1cm4gZi50cmF2ZXJzZVR3b1BoYXNlKGUsdCxuKX0sdHJhdmVyc2VF
bnRlckxlYXZlOmZ1bmN0aW9uKGUsdCxuLHIsbyl7cmV0dXJuIGYudHJhdmVyc2VFbnRlckxlYXZl
KGUsdCxuLHIsbyl9LGluamVjdGlvbjp2fTt0LmV4cG9ydHM9Z30sezExMjoxMTIsMTM3OjEzNywx
NDI6MTQyLDUwOjUwfV0sMTk6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24g
cihlLHQsbil7dmFyIHI9dC5kaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lc1tu
XTtyZXR1cm4gZyhlLHIpfWZ1bmN0aW9uIG8oZSx0LG4pe3ZhciBvPXIoZSxuLHQpO28mJihuLl9k
aXNwYXRjaExpc3RlbmVycz1tKG4uX2Rpc3BhdGNoTGlzdGVuZXJzLG8pLG4uX2Rpc3BhdGNoSW5z
dGFuY2VzPW0obi5fZGlzcGF0Y2hJbnN0YW5jZXMsZSkpfWZ1bmN0aW9uIGkoZSl7ZSYmZS5kaXNw
YXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lcyYmaC50cmF2ZXJzZVR3b1BoYXNlKGUu
X3RhcmdldEluc3QsbyxlKX1mdW5jdGlvbiBhKGUpe2lmKGUmJmUuZGlzcGF0Y2hDb25maWcucGhh
c2VkUmVnaXN0cmF0aW9uTmFtZXMpe3ZhciB0PWUuX3RhcmdldEluc3Qsbj10P2guZ2V0UGFyZW50
SW5zdGFuY2UodCk6bnVsbDtoLnRyYXZlcnNlVHdvUGhhc2UobixvLGUpfX1mdW5jdGlvbiBzKGUs
dCxuKXtpZihuJiZuLmRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUpe3ZhciByPW4uZGlz
cGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSxvPWcoZSxyKTtvJiYobi5fZGlzcGF0Y2hMaXN0
ZW5lcnM9bShuLl9kaXNwYXRjaExpc3RlbmVycyxvKSxuLl9kaXNwYXRjaEluc3RhbmNlcz1tKG4u
X2Rpc3BhdGNoSW5zdGFuY2VzLGUpKX19ZnVuY3Rpb24gdShlKXtlJiZlLmRpc3BhdGNoQ29uZmln
LnJlZ2lzdHJhdGlvbk5hbWUmJnMoZS5fdGFyZ2V0SW5zdCxudWxsLGUpfWZ1bmN0aW9uIGwoZSl7
dihlLGkpfWZ1bmN0aW9uIGMoZSl7dihlLGEpfWZ1bmN0aW9uIHAoZSx0LG4scil7aC50cmF2ZXJz
ZUVudGVyTGVhdmUobixyLHMsZSx0KX1mdW5jdGlvbiBkKGUpe3YoZSx1KX12YXIgZj1lKDE2KSxo
PWUoMTgpLG09ZSg5MSksdj1lKDk4KSxnPShlKDE0MiksZi5nZXRMaXN0ZW5lcikseT17YWNjdW11
bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlczpsLGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTa2lw
VGFyZ2V0OmMsYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXM6ZCxhY2N1bXVsYXRlRW50ZXJMZWF2
ZURpc3BhdGNoZXM6cH07dC5leHBvcnRzPXl9LHsxNDI6MTQyLDE2OjE2LDE4OjE4LDkxOjkxLDk4
Ojk4fV0sMjA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt0aGlz
Ll9yb290PWUsdGhpcy5fc3RhcnRUZXh0PXRoaXMuZ2V0VGV4dCgpLHRoaXMuX2ZhbGxiYWNrVGV4
dD1udWxsfXZhciBvPWUoMTQzKSxpPWUoMjQpLGE9ZSgxMDYpO28oci5wcm90b3R5cGUse2Rlc3Ry
dWN0b3I6ZnVuY3Rpb24oKXt0aGlzLl9yb290PW51bGwsdGhpcy5fc3RhcnRUZXh0PW51bGwsdGhp
cy5fZmFsbGJhY2tUZXh0PW51bGx9LGdldFRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4idmFsdWUiaW4g
dGhpcy5fcm9vdD90aGlzLl9yb290LnZhbHVlOnRoaXMuX3Jvb3RbYSgpXX0sZ2V0RGF0YTpmdW5j
dGlvbigpe2lmKHRoaXMuX2ZhbGxiYWNrVGV4dClyZXR1cm4gdGhpcy5fZmFsbGJhY2tUZXh0O3Zh
ciBlLHQsbj10aGlzLl9zdGFydFRleHQscj1uLmxlbmd0aCxvPXRoaXMuZ2V0VGV4dCgpLGk9by5s
ZW5ndGg7Zm9yKGU9MDtlPHImJm5bZV09PT1vW2VdO2UrKyk7dmFyIGE9ci1lO2Zvcih0PTE7dDw9
YSYmbltyLXRdPT09b1tpLXRdO3QrKyk7dmFyIHM9dD4xPzEtdDp2b2lkIDA7cmV0dXJuIHRoaXMu
X2ZhbGxiYWNrVGV4dD1vLnNsaWNlKGUscyksdGhpcy5fZmFsbGJhY2tUZXh0fX0pLGkuYWRkUG9v
bGluZ1RvKHIpLHQuZXhwb3J0cz1yfSx7MTA2OjEwNiwxNDM6MTQzLDI0OjI0fV0sMjE6W2Z1bmN0
aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgxMSksbz1yLmluamVjdGlvbi5NVVNUX1VT
RV9QUk9QRVJUWSxpPXIuaW5qZWN0aW9uLkhBU19CT09MRUFOX1ZBTFVFLGE9ci5pbmplY3Rpb24u
SEFTX05VTUVSSUNfVkFMVUUscz1yLmluamVjdGlvbi5IQVNfUE9TSVRJVkVfTlVNRVJJQ19WQUxV
RSx1PXIuaW5qZWN0aW9uLkhBU19PVkVSTE9BREVEX0JPT0xFQU5fVkFMVUUsbD17aXNDdXN0b21B
dHRyaWJ1dGU6UmVnRXhwLnByb3RvdHlwZS50ZXN0LmJpbmQobmV3IFJlZ0V4cCgiXihkYXRhfGFy
aWEpLVsiK3IuQVRUUklCVVRFX05BTUVfQ0hBUisiXSokIikpLFByb3BlcnRpZXM6e2FjY2VwdDow
LGFjY2VwdENoYXJzZXQ6MCxhY2Nlc3NLZXk6MCxhY3Rpb246MCxhbGxvd0Z1bGxTY3JlZW46aSxh
bGxvd1RyYW5zcGFyZW5jeTowLGFsdDowLGFzOjAsYXN5bmM6aSxhdXRvQ29tcGxldGU6MCxhdXRv
UGxheTppLGNhcHR1cmU6aSxjZWxsUGFkZGluZzowLGNlbGxTcGFjaW5nOjAsY2hhclNldDowLGNo
YWxsZW5nZTowLGNoZWNrZWQ6b3xpLGNpdGU6MCxjbGFzc0lEOjAsY2xhc3NOYW1lOjAsY29sczpz
LGNvbFNwYW46MCxjb250ZW50OjAsY29udGVudEVkaXRhYmxlOjAsY29udGV4dE1lbnU6MCxjb250
cm9sczppLGNvb3JkczowLGNyb3NzT3JpZ2luOjAsZGF0YTowLGRhdGVUaW1lOjAsZGVmYXVsdDpp
LGRlZmVyOmksZGlyOjAsZGlzYWJsZWQ6aSxkb3dubG9hZDp1LGRyYWdnYWJsZTowLGVuY1R5cGU6
MCxmb3JtOjAsZm9ybUFjdGlvbjowLGZvcm1FbmNUeXBlOjAsZm9ybU1ldGhvZDowLGZvcm1Ob1Zh
bGlkYXRlOmksZm9ybVRhcmdldDowLGZyYW1lQm9yZGVyOjAsaGVhZGVyczowLGhlaWdodDowLGhp
ZGRlbjppLGhpZ2g6MCxocmVmOjAsaHJlZkxhbmc6MCxodG1sRm9yOjAsaHR0cEVxdWl2OjAsaWNv
bjowLGlkOjAsaW5wdXRNb2RlOjAsaW50ZWdyaXR5OjAsaXM6MCxrZXlQYXJhbXM6MCxrZXlUeXBl
OjAsa2luZDowLGxhYmVsOjAsbGFuZzowLGxpc3Q6MCxsb29wOmksbG93OjAsbWFuaWZlc3Q6MCxt
YXJnaW5IZWlnaHQ6MCxtYXJnaW5XaWR0aDowLG1heDowLG1heExlbmd0aDowLG1lZGlhOjAsbWVk
aWFHcm91cDowLG1ldGhvZDowLG1pbjowLG1pbkxlbmd0aDowLG11bHRpcGxlOm98aSxtdXRlZDpv
fGksbmFtZTowLG5vbmNlOjAsbm9WYWxpZGF0ZTppLG9wZW46aSxvcHRpbXVtOjAscGF0dGVybjow
LHBsYWNlaG9sZGVyOjAscGxheXNJbmxpbmU6aSxwb3N0ZXI6MCxwcmVsb2FkOjAscHJvZmlsZTow
LHJhZGlvR3JvdXA6MCxyZWFkT25seTppLHJlZmVycmVyUG9saWN5OjAscmVsOjAscmVxdWlyZWQ6
aSxyZXZlcnNlZDppLHJvbGU6MCxyb3dzOnMscm93U3BhbjphLHNhbmRib3g6MCxzY29wZTowLHNj
b3BlZDppLHNjcm9sbGluZzowLHNlYW1sZXNzOmksc2VsZWN0ZWQ6b3xpLHNoYXBlOjAsc2l6ZTpz
LHNpemVzOjAsc3BhbjpzLHNwZWxsQ2hlY2s6MCxzcmM6MCxzcmNEb2M6MCxzcmNMYW5nOjAsc3Jj
U2V0OjAsc3RhcnQ6YSxzdGVwOjAsc3R5bGU6MCxzdW1tYXJ5OjAsdGFiSW5kZXg6MCx0YXJnZXQ6
MCx0aXRsZTowLHR5cGU6MCx1c2VNYXA6MCx2YWx1ZTowLHdpZHRoOjAsd21vZGU6MCx3cmFwOjAs
YWJvdXQ6MCxkYXRhdHlwZTowLGlubGlzdDowLHByZWZpeDowLHByb3BlcnR5OjAscmVzb3VyY2U6
MCx0eXBlb2Y6MCx2b2NhYjowLGF1dG9DYXBpdGFsaXplOjAsYXV0b0NvcnJlY3Q6MCxhdXRvU2F2
ZTowLGNvbG9yOjAsaXRlbVByb3A6MCxpdGVtU2NvcGU6aSxpdGVtVHlwZTowLGl0ZW1JRDowLGl0
ZW1SZWY6MCxyZXN1bHRzOjAsc2VjdXJpdHk6MCx1bnNlbGVjdGFibGU6MH0sRE9NQXR0cmlidXRl
TmFtZXM6e2FjY2VwdENoYXJzZXQ6ImFjY2VwdC1jaGFyc2V0IixjbGFzc05hbWU6ImNsYXNzIixo
dG1sRm9yOiJmb3IiLGh0dHBFcXVpdjoiaHR0cC1lcXVpdiJ9LERPTVByb3BlcnR5TmFtZXM6e30s
RE9NTXV0YXRpb25NZXRob2RzOnt2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKG51bGw9PXQpcmV0dXJu
IGUucmVtb3ZlQXR0cmlidXRlKCJ2YWx1ZSIpOyJudW1iZXIiIT09ZS50eXBlfHwhMT09PWUuaGFz
QXR0cmlidXRlKCJ2YWx1ZSIpP2Uuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIrdCk6ZS52YWxpZGl0
eSYmIWUudmFsaWRpdHkuYmFkSW5wdXQmJmUub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50IT09
ZSYmZS5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIit0KX19fTt0LmV4cG9ydHM9bH0sezExOjExfV0s
MjI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD17Ij0i
OiI9MCIsIjoiOiI9MiJ9O3JldHVybiIkIisoIiIrZSkucmVwbGFjZSgvWz06XS9nLGZ1bmN0aW9u
KGUpe3JldHVybiB0W2VdfSl9ZnVuY3Rpb24gbyhlKXt2YXIgdD17Ij0wIjoiPSIsIj0yIjoiOiJ9
O3JldHVybigiIisoIi4iPT09ZVswXSYmIiQiPT09ZVsxXT9lLnN1YnN0cmluZygyKTplLnN1YnN0
cmluZygxKSkpLnJlcGxhY2UoLyg9MHw9MikvZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfXZh
ciBpPXtlc2NhcGU6cix1bmVzY2FwZTpvfTt0LmV4cG9ydHM9aX0se31dLDIzOltmdW5jdGlvbihl
LHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7bnVsbCE9ZS5jaGVja2VkTGluayYmbnVs
bCE9ZS52YWx1ZUxpbmsmJnMoIjg3Iil9ZnVuY3Rpb24gbyhlKXtyKGUpLChudWxsIT1lLnZhbHVl
fHxudWxsIT1lLm9uQ2hhbmdlKSYmcygiODgiKX1mdW5jdGlvbiBpKGUpe3IoZSksKG51bGwhPWUu
Y2hlY2tlZHx8bnVsbCE9ZS5vbkNoYW5nZSkmJnMoIjg5Iil9ZnVuY3Rpb24gYShlKXtpZihlKXt2
YXIgdD1lLmdldE5hbWUoKTtpZih0KXJldHVybiIgQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2Yg
YCIrdCsiYC4ifXJldHVybiIifXZhciBzPWUoMTEyKSx1PWUoNjQpLGw9ZSgxNDUpLGM9ZSgxMjAp
LHA9bChjLmlzVmFsaWRFbGVtZW50KSxkPShlKDEzNyksZSgxNDIpLHtidXR0b246ITAsY2hlY2ti
b3g6ITAsaW1hZ2U6ITAsaGlkZGVuOiEwLHJhZGlvOiEwLHJlc2V0OiEwLHN1Ym1pdDohMH0pLGY9
e3ZhbHVlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hZVt0XXx8ZFtlLnR5cGVdfHxlLm9uQ2hhbmdl
fHxlLnJlYWRPbmx5fHxlLmRpc2FibGVkP251bGw6bmV3IEVycm9yKCJZb3UgcHJvdmlkZWQgYSBg
dmFsdWVgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4gYG9uQ2hhbmdlYCBoYW5kbGVy
LiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxkLiBJZiB0aGUgZmllbGQgc2hvdWxk
IGJlIG11dGFibGUgdXNlIGBkZWZhdWx0VmFsdWVgLiBPdGhlcndpc2UsIHNldCBlaXRoZXIgYG9u
Q2hhbmdlYCBvciBgcmVhZE9ubHlgLiIpfSxjaGVja2VkOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4h
ZVt0XXx8ZS5vbkNoYW5nZXx8ZS5yZWFkT25seXx8ZS5kaXNhYmxlZD9udWxsOm5ldyBFcnJvcigi
WW91IHByb3ZpZGVkIGEgYGNoZWNrZWRgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4g
YG9uQ2hhbmdlYCBoYW5kbGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxkLiBJ
ZiB0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0Q2hlY2tlZGAuIE90aGVy
d2lzZSwgc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGByZWFkT25seWAuIil9LG9uQ2hhbmdlOnAu
ZnVuY30saD17fSxtPXtjaGVja1Byb3BUeXBlczpmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByIGlu
IGYpe2lmKGYuaGFzT3duUHJvcGVydHkocikpdmFyIG89ZltyXSh0LHIsZSwicHJvcCIsbnVsbCx1
KTtvIGluc3RhbmNlb2YgRXJyb3ImJiEoby5tZXNzYWdlIGluIGgpJiYoaFtvLm1lc3NhZ2VdPSEw
LGEobikpfX0sZ2V0VmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVMaW5rPyhvKGUpLGUu
dmFsdWVMaW5rLnZhbHVlKTplLnZhbHVlfSxnZXRDaGVja2VkOmZ1bmN0aW9uKGUpe3JldHVybiBl
LmNoZWNrZWRMaW5rPyhpKGUpLGUuY2hlY2tlZExpbmsudmFsdWUpOmUuY2hlY2tlZH0sZXhlY3V0
ZU9uQ2hhbmdlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudmFsdWVMaW5rPyhvKGUpLGUudmFsdWVM
aW5rLnJlcXVlc3RDaGFuZ2UodC50YXJnZXQudmFsdWUpKTplLmNoZWNrZWRMaW5rPyhpKGUpLGUu
Y2hlY2tlZExpbmsucmVxdWVzdENoYW5nZSh0LnRhcmdldC5jaGVja2VkKSk6ZS5vbkNoYW5nZT9l
Lm9uQ2hhbmdlLmNhbGwodm9pZCAwLHQpOnZvaWQgMH19O3QuZXhwb3J0cz1tfSx7MTEyOjExMiwx
MjA6MTIwLDEzNzoxMzcsMTQyOjE0MiwxNDU6MTQ1LDY0OjY0fV0sMjQ6W2Z1bmN0aW9uKGUsdCxu
KXsidXNlIHN0cmljdCI7dmFyIHI9ZSgxMTIpLG89KGUoMTM3KSxmdW5jdGlvbihlKXt2YXIgdD10
aGlzO2lmKHQuaW5zdGFuY2VQb29sLmxlbmd0aCl7dmFyIG49dC5pbnN0YW5jZVBvb2wucG9wKCk7
cmV0dXJuIHQuY2FsbChuLGUpLG59cmV0dXJuIG5ldyB0KGUpfSksaT1mdW5jdGlvbihlLHQpe3Zh
ciBuPXRoaXM7aWYobi5pbnN0YW5jZVBvb2wubGVuZ3RoKXt2YXIgcj1uLmluc3RhbmNlUG9vbC5w
b3AoKTtyZXR1cm4gbi5jYWxsKHIsZSx0KSxyfXJldHVybiBuZXcgbihlLHQpfSxhPWZ1bmN0aW9u
KGUsdCxuKXt2YXIgcj10aGlzO2lmKHIuaW5zdGFuY2VQb29sLmxlbmd0aCl7dmFyIG89ci5pbnN0
YW5jZVBvb2wucG9wKCk7cmV0dXJuIHIuY2FsbChvLGUsdCxuKSxvfXJldHVybiBuZXcgcihlLHQs
bil9LHM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89dGhpcztpZihvLmluc3RhbmNlUG9vbC5sZW5n
dGgpe3ZhciBpPW8uaW5zdGFuY2VQb29sLnBvcCgpO3JldHVybiBvLmNhbGwoaSxlLHQsbixyKSxp
fXJldHVybiBuZXcgbyhlLHQsbixyKX0sdT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2UgaW5zdGFu
Y2VvZiB0fHxyKCIyNSIpLGUuZGVzdHJ1Y3RvcigpLHQuaW5zdGFuY2VQb29sLmxlbmd0aDx0LnBv
b2xTaXplJiZ0Lmluc3RhbmNlUG9vbC5wdXNoKGUpfSxsPW8sYz1mdW5jdGlvbihlLHQpe3ZhciBu
PWU7cmV0dXJuIG4uaW5zdGFuY2VQb29sPVtdLG4uZ2V0UG9vbGVkPXR8fGwsbi5wb29sU2l6ZXx8
KG4ucG9vbFNpemU9MTApLG4ucmVsZWFzZT11LG59LHA9e2FkZFBvb2xpbmdUbzpjLG9uZUFyZ3Vt
ZW50UG9vbGVyOm8sdHdvQXJndW1lbnRQb29sZXI6aSx0aHJlZUFyZ3VtZW50UG9vbGVyOmEsZm91
ckFyZ3VtZW50UG9vbGVyOnN9O3QuZXhwb3J0cz1wfSx7MTEyOjExMiwxMzc6MTM3fV0sMjU6W2Z1
bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gT2JqZWN0LnBy
b3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbSl8fChlW21dPWYrKyxwW2VbbV1dPXt9KSxw
W2VbbV1dfXZhciBvLGk9ZSgxNDMpLGE9ZSgxNykscz1lKDUxKSx1PWUoOTApLGw9ZSgxMDcpLGM9
ZSgxMDkpLHA9e30sZD0hMSxmPTAsaD17dG9wQWJvcnQ6ImFib3J0Iix0b3BBbmltYXRpb25FbmQ6
bCgiYW5pbWF0aW9uZW5kIil8fCJhbmltYXRpb25lbmQiLHRvcEFuaW1hdGlvbkl0ZXJhdGlvbjps
KCJhbmltYXRpb25pdGVyYXRpb24iKXx8ImFuaW1hdGlvbml0ZXJhdGlvbiIsdG9wQW5pbWF0aW9u
U3RhcnQ6bCgiYW5pbWF0aW9uc3RhcnQiKXx8ImFuaW1hdGlvbnN0YXJ0Iix0b3BCbHVyOiJibHVy
Iix0b3BDYW5QbGF5OiJjYW5wbGF5Iix0b3BDYW5QbGF5VGhyb3VnaDoiY2FucGxheXRocm91Z2gi
LHRvcENoYW5nZToiY2hhbmdlIix0b3BDbGljazoiY2xpY2siLHRvcENvbXBvc2l0aW9uRW5kOiJj
b21wb3NpdGlvbmVuZCIsdG9wQ29tcG9zaXRpb25TdGFydDoiY29tcG9zaXRpb25zdGFydCIsdG9w
Q29tcG9zaXRpb25VcGRhdGU6ImNvbXBvc2l0aW9udXBkYXRlIix0b3BDb250ZXh0TWVudToiY29u
dGV4dG1lbnUiLHRvcENvcHk6ImNvcHkiLHRvcEN1dDoiY3V0Iix0b3BEb3VibGVDbGljazoiZGJs
Y2xpY2siLHRvcERyYWc6ImRyYWciLHRvcERyYWdFbmQ6ImRyYWdlbmQiLHRvcERyYWdFbnRlcjoi
ZHJhZ2VudGVyIix0b3BEcmFnRXhpdDoiZHJhZ2V4aXQiLHRvcERyYWdMZWF2ZToiZHJhZ2xlYXZl
Iix0b3BEcmFnT3ZlcjoiZHJhZ292ZXIiLHRvcERyYWdTdGFydDoiZHJhZ3N0YXJ0Iix0b3BEcm9w
OiJkcm9wIix0b3BEdXJhdGlvbkNoYW5nZToiZHVyYXRpb25jaGFuZ2UiLHRvcEVtcHRpZWQ6ImVt
cHRpZWQiLHRvcEVuY3J5cHRlZDoiZW5jcnlwdGVkIix0b3BFbmRlZDoiZW5kZWQiLHRvcEVycm9y
OiJlcnJvciIsCit0b3BGb2N1czoiZm9jdXMiLHRvcElucHV0OiJpbnB1dCIsdG9wS2V5RG93bjoi
a2V5ZG93biIsdG9wS2V5UHJlc3M6ImtleXByZXNzIix0b3BLZXlVcDoia2V5dXAiLHRvcExvYWRl
ZERhdGE6ImxvYWRlZGRhdGEiLHRvcExvYWRlZE1ldGFkYXRhOiJsb2FkZWRtZXRhZGF0YSIsdG9w
TG9hZFN0YXJ0OiJsb2Fkc3RhcnQiLHRvcE1vdXNlRG93bjoibW91c2Vkb3duIix0b3BNb3VzZU1v
dmU6Im1vdXNlbW92ZSIsdG9wTW91c2VPdXQ6Im1vdXNlb3V0Iix0b3BNb3VzZU92ZXI6Im1vdXNl
b3ZlciIsdG9wTW91c2VVcDoibW91c2V1cCIsdG9wUGFzdGU6InBhc3RlIix0b3BQYXVzZToicGF1
c2UiLHRvcFBsYXk6InBsYXkiLHRvcFBsYXlpbmc6InBsYXlpbmciLHRvcFByb2dyZXNzOiJwcm9n
cmVzcyIsdG9wUmF0ZUNoYW5nZToicmF0ZWNoYW5nZSIsdG9wU2Nyb2xsOiJzY3JvbGwiLHRvcFNl
ZWtlZDoic2Vla2VkIix0b3BTZWVraW5nOiJzZWVraW5nIix0b3BTZWxlY3Rpb25DaGFuZ2U6InNl
bGVjdGlvbmNoYW5nZSIsdG9wU3RhbGxlZDoic3RhbGxlZCIsdG9wU3VzcGVuZDoic3VzcGVuZCIs
dG9wVGV4dElucHV0OiJ0ZXh0SW5wdXQiLHRvcFRpbWVVcGRhdGU6InRpbWV1cGRhdGUiLHRvcFRv
dWNoQ2FuY2VsOiJ0b3VjaGNhbmNlbCIsdG9wVG91Y2hFbmQ6InRvdWNoZW5kIix0b3BUb3VjaE1v
dmU6InRvdWNobW92ZSIsdG9wVG91Y2hTdGFydDoidG91Y2hzdGFydCIsdG9wVHJhbnNpdGlvbkVu
ZDpsKCJ0cmFuc2l0aW9uZW5kIil8fCJ0cmFuc2l0aW9uZW5kIix0b3BWb2x1bWVDaGFuZ2U6InZv
bHVtZWNoYW5nZSIsdG9wV2FpdGluZzoid2FpdGluZyIsdG9wV2hlZWw6IndoZWVsIn0sbT0iX3Jl
YWN0TGlzdGVuZXJzSUQiK1N0cmluZyhNYXRoLnJhbmRvbSgpKS5zbGljZSgyKSx2PWkoe30scyx7
UmVhY3RFdmVudExpc3RlbmVyOm51bGwsaW5qZWN0aW9uOntpbmplY3RSZWFjdEV2ZW50TGlzdGVu
ZXI6ZnVuY3Rpb24oZSl7ZS5zZXRIYW5kbGVUb3BMZXZlbCh2LmhhbmRsZVRvcExldmVsKSx2LlJl
YWN0RXZlbnRMaXN0ZW5lcj1lfX0sc2V0RW5hYmxlZDpmdW5jdGlvbihlKXt2LlJlYWN0RXZlbnRM
aXN0ZW5lciYmdi5SZWFjdEV2ZW50TGlzdGVuZXIuc2V0RW5hYmxlZChlKX0saXNFbmFibGVkOmZ1
bmN0aW9uKCl7cmV0dXJuISghdi5SZWFjdEV2ZW50TGlzdGVuZXJ8fCF2LlJlYWN0RXZlbnRMaXN0
ZW5lci5pc0VuYWJsZWQoKSl9LGxpc3RlblRvOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXQsbz1y
KG4pLGk9YS5yZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzW2VdLHM9MDtzPGkubGVuZ3RoO3Mr
Kyl7dmFyIHU9aVtzXTtvLmhhc093blByb3BlcnR5KHUpJiZvW3VdfHwoInRvcFdoZWVsIj09PXU/
Yygid2hlZWwiKT92LlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2ZW50KCJ0b3BXaGVl
bCIsIndoZWVsIixuKTpjKCJtb3VzZXdoZWVsIik/di5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1
YmJsZWRFdmVudCgidG9wV2hlZWwiLCJtb3VzZXdoZWVsIixuKTp2LlJlYWN0RXZlbnRMaXN0ZW5l
ci50cmFwQnViYmxlZEV2ZW50KCJ0b3BXaGVlbCIsIkRPTU1vdXNlU2Nyb2xsIixuKToidG9wU2Ny
b2xsIj09PXU/Yygic2Nyb2xsIiwhMCk/di5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcENhcHR1cmVk
RXZlbnQoInRvcFNjcm9sbCIsInNjcm9sbCIsbik6di5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1
YmJsZWRFdmVudCgidG9wU2Nyb2xsIiwic2Nyb2xsIix2LlJlYWN0RXZlbnRMaXN0ZW5lci5XSU5E
T1dfSEFORExFKToidG9wRm9jdXMiPT09dXx8InRvcEJsdXIiPT09dT8oYygiZm9jdXMiLCEwKT8o
di5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcENhcHR1cmVkRXZlbnQoInRvcEZvY3VzIiwiZm9jdXMi
LG4pLHYuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBDYXB0dXJlZEV2ZW50KCJ0b3BCbHVyIiwiYmx1
ciIsbikpOmMoImZvY3VzaW4iKSYmKHYuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZl
bnQoInRvcEZvY3VzIiwiZm9jdXNpbiIsbiksdi5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1YmJs
ZWRFdmVudCgidG9wQmx1ciIsImZvY3Vzb3V0IixuKSksby50b3BCbHVyPSEwLG8udG9wRm9jdXM9
ITApOmguaGFzT3duUHJvcGVydHkodSkmJnYuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVk
RXZlbnQodSxoW3VdLG4pLG9bdV09ITApfX0sdHJhcEJ1YmJsZWRFdmVudDpmdW5jdGlvbihlLHQs
bil7cmV0dXJuIHYuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQoZSx0LG4pfSx0
cmFwQ2FwdHVyZWRFdmVudDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHYuUmVhY3RFdmVudExpc3Rl
bmVyLnRyYXBDYXB0dXJlZEV2ZW50KGUsdCxuKX0sc3VwcG9ydHNFdmVudFBhZ2VYWTpmdW5jdGlv
bigpe2lmKCFkb2N1bWVudC5jcmVhdGVFdmVudClyZXR1cm4hMTt2YXIgZT1kb2N1bWVudC5jcmVh
dGVFdmVudCgiTW91c2VFdmVudCIpO3JldHVybiBudWxsIT1lJiYicGFnZVgiaW4gZX0sZW5zdXJl
U2Nyb2xsVmFsdWVNb25pdG9yaW5nOmZ1bmN0aW9uKCl7aWYodm9pZCAwPT09byYmKG89di5zdXBw
b3J0c0V2ZW50UGFnZVhZKCkpLCFvJiYhZCl7dmFyIGU9dS5yZWZyZXNoU2Nyb2xsVmFsdWVzO3Yu
UmVhY3RFdmVudExpc3RlbmVyLm1vbml0b3JTY3JvbGxWYWx1ZShlKSxkPSEwfX19KTt0LmV4cG9y
dHM9dn0sezEwNzoxMDcsMTA5OjEwOSwxNDM6MTQzLDE3OjE3LDUxOjUxLDkwOjkwfV0sMjY6W2Z1
bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24obil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4s
cil7dmFyIG89dm9pZCAwPT09ZVtuXTtudWxsIT10JiZvJiYoZVtuXT1pKHQsITApKX12YXIgbz1l
KDY2KSxpPWUoMTA4KSxhPShlKDIyKSxlKDExNikpLHM9ZSgxMTcpO2UoMTQyKTt2b2lkIDAhPT1u
JiZuLmVudjt2YXIgdT17aW5zdGFudGlhdGVDaGlsZHJlbjpmdW5jdGlvbihlLHQsbixvKXtpZihu
dWxsPT1lKXJldHVybiBudWxsO3ZhciBpPXt9O3JldHVybiBzKGUscixpKSxpfSx1cGRhdGVDaGls
ZHJlbjpmdW5jdGlvbihlLHQsbixyLHMsdSxsLGMscCl7aWYodHx8ZSl7dmFyIGQsZjtmb3IoZCBp
biB0KWlmKHQuaGFzT3duUHJvcGVydHkoZCkpe2Y9ZSYmZVtkXTt2YXIgaD1mJiZmLl9jdXJyZW50
RWxlbWVudCxtPXRbZF07aWYobnVsbCE9ZiYmYShoLG0pKW8ucmVjZWl2ZUNvbXBvbmVudChmLG0s
cyxjKSx0W2RdPWY7ZWxzZXtmJiYocltkXT1vLmdldEhvc3ROb2RlKGYpLG8udW5tb3VudENvbXBv
bmVudChmLCExKSk7dmFyIHY9aShtLCEwKTt0W2RdPXY7dmFyIGc9by5tb3VudENvbXBvbmVudCh2
LHMsdSxsLGMscCk7bi5wdXNoKGcpfX1mb3IoZCBpbiBlKSFlLmhhc093blByb3BlcnR5KGQpfHx0
JiZ0Lmhhc093blByb3BlcnR5KGQpfHwoZj1lW2RdLHJbZF09by5nZXRIb3N0Tm9kZShmKSxvLnVu
bW91bnRDb21wb25lbnQoZiwhMSkpfX0sdW5tb3VudENoaWxkcmVuOmZ1bmN0aW9uKGUsdCl7Zm9y
KHZhciBuIGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShuKSl7dmFyIHI9ZVtuXTtvLnVubW91bnRD
b21wb25lbnQocix0KX19fTt0LmV4cG9ydHM9dX0pLmNhbGwodGhpcyx2b2lkIDApfSx7MTA4OjEw
OCwxMTY6MTE2LDExNzoxMTcsMTQyOjE0MiwyMjoyMiw2Njo2Nn1dLDI3OltmdW5jdGlvbihlLHQs
bil7InVzZSBzdHJpY3QiO3ZhciByPWUoOCksbz1lKDM3KSxpPXtwcm9jZXNzQ2hpbGRyZW5VcGRh
dGVzOm8uZGFuZ2Vyb3VzbHlQcm9jZXNzQ2hpbGRyZW5VcGRhdGVzLHJlcGxhY2VOb2RlV2l0aE1h
cmt1cDpyLmRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwfTt0LmV4cG9ydHM9aX0sezM3
OjM3LDg6OH1dLDI4OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMTEyKSxv
PShlKDEzNyksITEpLGk9e3JlcGxhY2VOb2RlV2l0aE1hcmt1cDpudWxsLHByb2Nlc3NDaGlsZHJl
blVwZGF0ZXM6bnVsbCxpbmplY3Rpb246e2luamVjdEVudmlyb25tZW50OmZ1bmN0aW9uKGUpe28m
JnIoIjEwNCIpLGkucmVwbGFjZU5vZGVXaXRoTWFya3VwPWUucmVwbGFjZU5vZGVXaXRoTWFya3Vw
LGkucHJvY2Vzc0NoaWxkcmVuVXBkYXRlcz1lLnByb2Nlc3NDaGlsZHJlblVwZGF0ZXMsbz0hMH19
fTt0LmV4cG9ydHM9aX0sezExMjoxMTIsMTM3OjEzN31dLDI5OltmdW5jdGlvbihlLHQsbil7InVz
ZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7fWZ1bmN0aW9uIG8oZSl7cmV0dXJuISghZS5wcm90b3R5
cGV8fCFlLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KX1mdW5jdGlvbiBpKGUpe3JldHVybiEo
IWUucHJvdG90eXBlfHwhZS5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQpfXZhciBhPWUo
MTEyKSxzPWUoMTQzKSx1PWUoMTIwKSxsPWUoMjgpLGM9ZSgxMTkpLHA9ZSg1MCksZD1lKDU3KSxm
PShlKDU4KSxlKDYyKSksaD1lKDY2KSxtPWUoMTMwKSx2PShlKDEzNyksZSgxNDEpKSxnPWUoMTE2
KSx5PShlKDE0Mikse0ltcHVyZUNsYXNzOjAsUHVyZUNsYXNzOjEsU3RhdGVsZXNzRnVuY3Rpb25h
bDoyfSk7ci5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9ZC5nZXQodGhpcykuX2N1
cnJlbnRFbGVtZW50LnR5cGUsdD1lKHRoaXMucHJvcHMsdGhpcy5jb250ZXh0LHRoaXMudXBkYXRl
cik7cmV0dXJuIHR9O3ZhciBfPTEsQz17Y29uc3RydWN0OmZ1bmN0aW9uKGUpe3RoaXMuX2N1cnJl
bnRFbGVtZW50PWUsdGhpcy5fcm9vdE5vZGVJRD0wLHRoaXMuX2NvbXBvc2l0ZVR5cGU9bnVsbCx0
aGlzLl9pbnN0YW5jZT1udWxsLHRoaXMuX2hvc3RQYXJlbnQ9bnVsbCx0aGlzLl9ob3N0Q29udGFp
bmVySW5mbz1udWxsLHRoaXMuX3VwZGF0ZUJhdGNoTnVtYmVyPW51bGwsdGhpcy5fcGVuZGluZ0Vs
ZW1lbnQ9bnVsbCx0aGlzLl9wZW5kaW5nU3RhdGVRdWV1ZT1udWxsLHRoaXMuX3BlbmRpbmdSZXBs
YWNlU3RhdGU9ITEsdGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlPSExLHRoaXMuX3JlbmRlcmVkTm9k
ZVR5cGU9bnVsbCx0aGlzLl9yZW5kZXJlZENvbXBvbmVudD1udWxsLHRoaXMuX2NvbnRleHQ9bnVs
bCx0aGlzLl9tb3VudE9yZGVyPTAsdGhpcy5fdG9wTGV2ZWxXcmFwcGVyPW51bGwsdGhpcy5fcGVu
ZGluZ0NhbGxiYWNrcz1udWxsLHRoaXMuX2NhbGxlZENvbXBvbmVudFdpbGxVbm1vdW50PSExfSxt
b3VudENvbXBvbmVudDpmdW5jdGlvbihlLHQsbixzKXt0aGlzLl9jb250ZXh0PXMsdGhpcy5fbW91
bnRPcmRlcj1fKyssdGhpcy5faG9zdFBhcmVudD10LHRoaXMuX2hvc3RDb250YWluZXJJbmZvPW47
dmFyIGwsYz10aGlzLl9jdXJyZW50RWxlbWVudC5wcm9wcyxwPXRoaXMuX3Byb2Nlc3NDb250ZXh0
KHMpLGY9dGhpcy5fY3VycmVudEVsZW1lbnQudHlwZSxoPWUuZ2V0VXBkYXRlUXVldWUoKSx2PW8o
ZiksZz10aGlzLl9jb25zdHJ1Y3RDb21wb25lbnQodixjLHAsaCk7dnx8bnVsbCE9ZyYmbnVsbCE9
Zy5yZW5kZXI/aShmKT90aGlzLl9jb21wb3NpdGVUeXBlPXkuUHVyZUNsYXNzOnRoaXMuX2NvbXBv
c2l0ZVR5cGU9eS5JbXB1cmVDbGFzczoobD1nLG51bGw9PT1nfHwhMT09PWd8fHUuaXNWYWxpZEVs
ZW1lbnQoZyl8fGEoIjEwNSIsZi5kaXNwbGF5TmFtZXx8Zi5uYW1lfHwiQ29tcG9uZW50IiksZz1u
ZXcgcihmKSx0aGlzLl9jb21wb3NpdGVUeXBlPXkuU3RhdGVsZXNzRnVuY3Rpb25hbCksZy5wcm9w
cz1jLGcuY29udGV4dD1wLGcucmVmcz1tLGcudXBkYXRlcj1oLHRoaXMuX2luc3RhbmNlPWcsZC5z
ZXQoZyx0aGlzKTt2YXIgQz1nLnN0YXRlO3ZvaWQgMD09PUMmJihnLnN0YXRlPUM9bnVsbCksKCJv
YmplY3QiIT10eXBlb2YgQ3x8QXJyYXkuaXNBcnJheShDKSkmJmEoIjEwNiIsdGhpcy5nZXROYW1l
KCl8fCJSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCIpLHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlPW51
bGwsdGhpcy5fcGVuZGluZ1JlcGxhY2VTdGF0ZT0hMSx0aGlzLl9wZW5kaW5nRm9yY2VVcGRhdGU9
ITE7dmFyIGI7cmV0dXJuIGI9Zy51bnN0YWJsZV9oYW5kbGVFcnJvcj90aGlzLnBlcmZvcm1Jbml0
aWFsTW91bnRXaXRoRXJyb3JIYW5kbGluZyhsLHQsbixlLHMpOnRoaXMucGVyZm9ybUluaXRpYWxN
b3VudChsLHQsbixlLHMpLGcuY29tcG9uZW50RGlkTW91bnQmJmUuZ2V0UmVhY3RNb3VudFJlYWR5
KCkuZW5xdWV1ZShnLmNvbXBvbmVudERpZE1vdW50LGcpLGJ9LF9jb25zdHJ1Y3RDb21wb25lbnQ6
ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMuX2NvbnN0cnVjdENvbXBvbmVudFdpdGhvdXRP
d25lcihlLHQsbixyKX0sX2NvbnN0cnVjdENvbXBvbmVudFdpdGhvdXRPd25lcjpmdW5jdGlvbihl
LHQsbixyKXt2YXIgbz10aGlzLl9jdXJyZW50RWxlbWVudC50eXBlO3JldHVybiBlP25ldyBvKHQs
bixyKTpvKHQsbixyKX0scGVyZm9ybUluaXRpYWxNb3VudFdpdGhFcnJvckhhbmRsaW5nOmZ1bmN0
aW9uKGUsdCxuLHIsbyl7dmFyIGksYT1yLmNoZWNrcG9pbnQoKTt0cnl7aT10aGlzLnBlcmZvcm1J
bml0aWFsTW91bnQoZSx0LG4scixvKX1jYXRjaChzKXtyLnJvbGxiYWNrKGEpLHRoaXMuX2luc3Rh
bmNlLnVuc3RhYmxlX2hhbmRsZUVycm9yKHMpLHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlJiYodGhp
cy5faW5zdGFuY2Uuc3RhdGU9dGhpcy5fcHJvY2Vzc1BlbmRpbmdTdGF0ZSh0aGlzLl9pbnN0YW5j
ZS5wcm9wcyx0aGlzLl9pbnN0YW5jZS5jb250ZXh0KSksYT1yLmNoZWNrcG9pbnQoKSx0aGlzLl9y
ZW5kZXJlZENvbXBvbmVudC51bm1vdW50Q29tcG9uZW50KCEwKSxyLnJvbGxiYWNrKGEpLGk9dGhp
cy5wZXJmb3JtSW5pdGlhbE1vdW50KGUsdCxuLHIsbyl9cmV0dXJuIGl9LHBlcmZvcm1Jbml0aWFs
TW91bnQ6ZnVuY3Rpb24oZSx0LG4scixvKXt2YXIgaT10aGlzLl9pbnN0YW5jZTtpLmNvbXBvbmVu
dFdpbGxNb3VudCYmKGkuY29tcG9uZW50V2lsbE1vdW50KCksdGhpcy5fcGVuZGluZ1N0YXRlUXVl
dWUmJihpLnN0YXRlPXRoaXMuX3Byb2Nlc3NQZW5kaW5nU3RhdGUoaS5wcm9wcyxpLmNvbnRleHQp
KSksdm9pZCAwPT09ZSYmKGU9dGhpcy5fcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50KCkpO3ZhciBh
PWYuZ2V0VHlwZShlKTt0aGlzLl9yZW5kZXJlZE5vZGVUeXBlPWE7dmFyIHM9dGhpcy5faW5zdGFu
dGlhdGVSZWFjdENvbXBvbmVudChlLGEhPT1mLkVNUFRZKTtyZXR1cm4gdGhpcy5fcmVuZGVyZWRD
b21wb25lbnQ9cyxoLm1vdW50Q29tcG9uZW50KHMscix0LG4sdGhpcy5fcHJvY2Vzc0NoaWxkQ29u
dGV4dChvKSwwKX0sZ2V0SG9zdE5vZGU6ZnVuY3Rpb24oKXtyZXR1cm4gaC5nZXRIb3N0Tm9kZSh0
aGlzLl9yZW5kZXJlZENvbXBvbmVudCl9LHVubW91bnRDb21wb25lbnQ6ZnVuY3Rpb24oZSl7aWYo
dGhpcy5fcmVuZGVyZWRDb21wb25lbnQpe3ZhciB0PXRoaXMuX2luc3RhbmNlO2lmKHQuY29tcG9u
ZW50V2lsbFVubW91bnQmJiF0Ll9jYWxsZWRDb21wb25lbnRXaWxsVW5tb3VudClpZih0Ll9jYWxs
ZWRDb21wb25lbnRXaWxsVW5tb3VudD0hMCxlKXt2YXIgbj10aGlzLmdldE5hbWUoKSsiLmNvbXBv
bmVudFdpbGxVbm1vdW50KCkiO3AuaW52b2tlR3VhcmRlZENhbGxiYWNrKG4sdC5jb21wb25lbnRX
aWxsVW5tb3VudC5iaW5kKHQpKX1lbHNlIHQuY29tcG9uZW50V2lsbFVubW91bnQoKTt0aGlzLl9y
ZW5kZXJlZENvbXBvbmVudCYmKGgudW5tb3VudENvbXBvbmVudCh0aGlzLl9yZW5kZXJlZENvbXBv
bmVudCxlKSx0aGlzLl9yZW5kZXJlZE5vZGVUeXBlPW51bGwsdGhpcy5fcmVuZGVyZWRDb21wb25l
bnQ9bnVsbCx0aGlzLl9pbnN0YW5jZT1udWxsKSx0aGlzLl9wZW5kaW5nU3RhdGVRdWV1ZT1udWxs
LHRoaXMuX3BlbmRpbmdSZXBsYWNlU3RhdGU9ITEsdGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlPSEx
LHRoaXMuX3BlbmRpbmdDYWxsYmFja3M9bnVsbCx0aGlzLl9wZW5kaW5nRWxlbWVudD1udWxsLHRo
aXMuX2NvbnRleHQ9bnVsbCx0aGlzLl9yb290Tm9kZUlEPTAsdGhpcy5fdG9wTGV2ZWxXcmFwcGVy
PW51bGwsZC5yZW1vdmUodCl9fSxfbWFza0NvbnRleHQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5f
Y3VycmVudEVsZW1lbnQudHlwZSxuPXQuY29udGV4dFR5cGVzO2lmKCFuKXJldHVybiBtO3ZhciBy
PXt9O2Zvcih2YXIgbyBpbiBuKXJbb109ZVtvXTtyZXR1cm4gcn0sX3Byb2Nlc3NDb250ZXh0OmZ1
bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXNrQ29udGV4dChlKX0sX3Byb2Nlc3NDaGlsZENvbnRl
eHQ6ZnVuY3Rpb24oZSl7dmFyIHQsbj10aGlzLl9jdXJyZW50RWxlbWVudC50eXBlLHI9dGhpcy5f
aW5zdGFuY2U7aWYoci5nZXRDaGlsZENvbnRleHQmJih0PXIuZ2V0Q2hpbGRDb250ZXh0KCkpLHQp
eyJvYmplY3QiIT10eXBlb2Ygbi5jaGlsZENvbnRleHRUeXBlcyYmYSgiMTA3Iix0aGlzLmdldE5h
bWUoKXx8IlJlYWN0Q29tcG9zaXRlQ29tcG9uZW50Iik7Zm9yKHZhciBvIGluIHQpbyBpbiBuLmNo
aWxkQ29udGV4dFR5cGVzfHxhKCIxMDgiLHRoaXMuZ2V0TmFtZSgpfHwiUmVhY3RDb21wb3NpdGVD
b21wb25lbnQiLG8pO3JldHVybiBzKHt9LGUsdCl9cmV0dXJuIGV9LF9jaGVja0NvbnRleHRUeXBl
czpmdW5jdGlvbihlLHQsbil7fSxyZWNlaXZlQ29tcG9uZW50OmZ1bmN0aW9uKGUsdCxuKXt2YXIg
cj10aGlzLl9jdXJyZW50RWxlbWVudCxvPXRoaXMuX2NvbnRleHQ7dGhpcy5fcGVuZGluZ0VsZW1l
bnQ9bnVsbCx0aGlzLnVwZGF0ZUNvbXBvbmVudCh0LHIsZSxvLG4pfSxwZXJmb3JtVXBkYXRlSWZO
ZWNlc3Nhcnk6ZnVuY3Rpb24oZSl7bnVsbCE9dGhpcy5fcGVuZGluZ0VsZW1lbnQ/aC5yZWNlaXZl
Q29tcG9uZW50KHRoaXMsdGhpcy5fcGVuZGluZ0VsZW1lbnQsZSx0aGlzLl9jb250ZXh0KTpudWxs
IT09dGhpcy5fcGVuZGluZ1N0YXRlUXVldWV8fHRoaXMuX3BlbmRpbmdGb3JjZVVwZGF0ZT90aGlz
LnVwZGF0ZUNvbXBvbmVudChlLHRoaXMuX2N1cnJlbnRFbGVtZW50LHRoaXMuX2N1cnJlbnRFbGVt
ZW50LHRoaXMuX2NvbnRleHQsdGhpcy5fY29udGV4dCk6dGhpcy5fdXBkYXRlQmF0Y2hOdW1iZXI9
bnVsbH0sdXBkYXRlQ29tcG9uZW50OmZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGk9dGhpcy5faW5z
dGFuY2U7bnVsbD09aSYmYSgiMTM2Iix0aGlzLmdldE5hbWUoKXx8IlJlYWN0Q29tcG9zaXRlQ29t
cG9uZW50Iik7dmFyIHMsdT0hMTt0aGlzLl9jb250ZXh0PT09bz9zPWkuY29udGV4dDoocz10aGlz
Ll9wcm9jZXNzQ29udGV4dChvKSx1PSEwKTt2YXIgbD10LnByb3BzLGM9bi5wcm9wczt0IT09biYm
KHU9ITApLHUmJmkuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmaS5jb21wb25lbnRXaWxsUmVj
ZWl2ZVByb3BzKGMscyk7dmFyIHA9dGhpcy5fcHJvY2Vzc1BlbmRpbmdTdGF0ZShjLHMpLGQ9ITA7
dGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlfHwoaS5zaG91bGRDb21wb25lbnRVcGRhdGU/ZD1pLnNo
b3VsZENvbXBvbmVudFVwZGF0ZShjLHAscyk6dGhpcy5fY29tcG9zaXRlVHlwZT09PXkuUHVyZUNs
YXNzJiYoZD0hdihsLGMpfHwhdihpLnN0YXRlLHApKSksdGhpcy5fdXBkYXRlQmF0Y2hOdW1iZXI9
bnVsbCxkPyh0aGlzLl9wZW5kaW5nRm9yY2VVcGRhdGU9ITEsdGhpcy5fcGVyZm9ybUNvbXBvbmVu
dFVwZGF0ZShuLGMscCxzLGUsbykpOih0aGlzLl9jdXJyZW50RWxlbWVudD1uLHRoaXMuX2NvbnRl
eHQ9byxpLnByb3BzPWMsaS5zdGF0ZT1wLGkuY29udGV4dD1zKX0sX3Byb2Nlc3NQZW5kaW5nU3Rh
dGU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9pbnN0YW5jZSxyPXRoaXMuX3BlbmRpbmdTdGF0
ZVF1ZXVlLG89dGhpcy5fcGVuZGluZ1JlcGxhY2VTdGF0ZTtpZih0aGlzLl9wZW5kaW5nUmVwbGFj
ZVN0YXRlPSExLHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlPW51bGwsIXIpcmV0dXJuIG4uc3RhdGU7
aWYobyYmMT09PXIubGVuZ3RoKXJldHVybiByWzBdO2Zvcih2YXIgaT1zKHt9LG8/clswXTpuLnN0
YXRlKSxhPW8/MTowO2E8ci5sZW5ndGg7YSsrKXt2YXIgdT1yW2FdO3MoaSwiZnVuY3Rpb24iPT10
eXBlb2YgdT91LmNhbGwobixpLGUsdCk6dSl9cmV0dXJuIGl9LF9wZXJmb3JtQ29tcG9uZW50VXBk
YXRlOmZ1bmN0aW9uKGUsdCxuLHIsbyxpKXt2YXIgYSxzLHUsbD10aGlzLl9pbnN0YW5jZSxjPUJv
b2xlYW4obC5jb21wb25lbnREaWRVcGRhdGUpO2MmJihhPWwucHJvcHMscz1sLnN0YXRlLHU9bC5j
b250ZXh0KSxsLmNvbXBvbmVudFdpbGxVcGRhdGUmJmwuY29tcG9uZW50V2lsbFVwZGF0ZSh0LG4s
ciksdGhpcy5fY3VycmVudEVsZW1lbnQ9ZSx0aGlzLl9jb250ZXh0PWksbC5wcm9wcz10LGwuc3Rh
dGU9bixsLmNvbnRleHQ9cix0aGlzLl91cGRhdGVSZW5kZXJlZENvbXBvbmVudChvLGkpLGMmJm8u
Z2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShsLmNvbXBvbmVudERpZFVwZGF0ZS5iaW5kKGws
YSxzLHUpLGwpfSxfdXBkYXRlUmVuZGVyZWRDb21wb25lbnQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj10
aGlzLl9yZW5kZXJlZENvbXBvbmVudCxyPW4uX2N1cnJlbnRFbGVtZW50LG89dGhpcy5fcmVuZGVy
VmFsaWRhdGVkQ29tcG9uZW50KCk7aWYoZyhyLG8pKWgucmVjZWl2ZUNvbXBvbmVudChuLG8sZSx0
aGlzLl9wcm9jZXNzQ2hpbGRDb250ZXh0KHQpKTtlbHNle3ZhciBpPWguZ2V0SG9zdE5vZGUobik7
aC51bm1vdW50Q29tcG9uZW50KG4sITEpO3ZhciBhPWYuZ2V0VHlwZShvKTt0aGlzLl9yZW5kZXJl
ZE5vZGVUeXBlPWE7dmFyIHM9dGhpcy5faW5zdGFudGlhdGVSZWFjdENvbXBvbmVudChvLGEhPT1m
LkVNUFRZKTt0aGlzLl9yZW5kZXJlZENvbXBvbmVudD1zO3ZhciB1PWgubW91bnRDb21wb25lbnQo
cyxlLHRoaXMuX2hvc3RQYXJlbnQsdGhpcy5faG9zdENvbnRhaW5lckluZm8sdGhpcy5fcHJvY2Vz
c0NoaWxkQ29udGV4dCh0KSwwKTt0aGlzLl9yZXBsYWNlTm9kZVdpdGhNYXJrdXAoaSx1LG4pfX0s
X3JlcGxhY2VOb2RlV2l0aE1hcmt1cDpmdW5jdGlvbihlLHQsbil7bC5yZXBsYWNlTm9kZVdpdGhN
YXJrdXAoZSx0LG4pfSxfcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50V2l0aG91dE93bmVyT3JDb250
ZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2luc3RhbmNlLnJlbmRlcigpfSxfcmVuZGVyVmFs
aWRhdGVkQ29tcG9uZW50OmZ1bmN0aW9uKCl7dmFyIGU7aWYodGhpcy5fY29tcG9zaXRlVHlwZSE9
PXkuU3RhdGVsZXNzRnVuY3Rpb25hbCl7Yy5jdXJyZW50PXRoaXM7dHJ5e2U9dGhpcy5fcmVuZGVy
VmFsaWRhdGVkQ29tcG9uZW50V2l0aG91dE93bmVyT3JDb250ZXh0KCl9ZmluYWxseXtjLmN1cnJl
bnQ9bnVsbH19ZWxzZSBlPXRoaXMuX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudFdpdGhvdXRPd25l
ck9yQ29udGV4dCgpO3JldHVybiBudWxsPT09ZXx8ITE9PT1lfHx1LmlzVmFsaWRFbGVtZW50KGUp
fHxhKCIxMDkiLHRoaXMuZ2V0TmFtZSgpfHwiUmVhY3RDb21wb3NpdGVDb21wb25lbnQiKSxlfSxh
dHRhY2hSZWY6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmdldFB1YmxpY0luc3RhbmNlKCk7bnVs
bD09biYmYSgiMTEwIik7dmFyIHI9dC5nZXRQdWJsaWNJbnN0YW5jZSgpOyhuLnJlZnM9PT1tP24u
cmVmcz17fTpuLnJlZnMpW2VdPXJ9LGRldGFjaFJlZjpmdW5jdGlvbihlKXtkZWxldGUgdGhpcy5n
ZXRQdWJsaWNJbnN0YW5jZSgpLnJlZnNbZV19LGdldE5hbWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlz
Ll9jdXJyZW50RWxlbWVudC50eXBlLHQ9dGhpcy5faW5zdGFuY2UmJnRoaXMuX2luc3RhbmNlLmNv
bnN0cnVjdG9yO3JldHVybiBlLmRpc3BsYXlOYW1lfHx0JiZ0LmRpc3BsYXlOYW1lfHxlLm5hbWV8
fHQmJnQubmFtZXx8bnVsbH0sZ2V0UHVibGljSW5zdGFuY2U6ZnVuY3Rpb24oKXt2YXIgZT10aGlz
Ll9pbnN0YW5jZTtyZXR1cm4gdGhpcy5fY29tcG9zaXRlVHlwZT09PXkuU3RhdGVsZXNzRnVuY3Rp
b25hbD9udWxsOmV9LF9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50Om51bGx9O3QuZXhwb3J0cz1D
fSx7MTEyOjExMiwxMTY6MTE2LDExOToxMTksMTIwOjEyMCwxMzA6MTMwLDEzNzoxMzcsMTQxOjE0
MSwxNDI6MTQyLDE0MzoxNDMsMjg6MjgsNTA6NTAsNTc6NTcsNTg6NTgsNjI6NjIsNjY6NjZ9XSwz
MDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDMzKSxvPWUoNDcpLGk9ZSg2
MCksYT1lKDY2KSxzPWUoNzEpLHU9ZSg3MiksbD1lKDk2KSxjPWUoMTAzKSxwPWUoMTEzKTtlKDE0
Mik7by5pbmplY3QoKTt2YXIgZD17ZmluZERPTU5vZGU6bCxyZW5kZXI6aS5yZW5kZXIsdW5tb3Vu
dENvbXBvbmVudEF0Tm9kZTppLnVubW91bnRDb21wb25lbnRBdE5vZGUsdmVyc2lvbjp1LHVuc3Rh
YmxlX2JhdGNoZWRVcGRhdGVzOnMuYmF0Y2hlZFVwZGF0ZXMsdW5zdGFibGVfcmVuZGVyU3VidHJl
ZUludG9Db250YWluZXI6cH07InVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dM
T0JBTF9IT09LX18mJiJmdW5jdGlvbiI9PXR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9I
T09LX18uaW5qZWN0JiZfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uaW5qZWN0KHtDb21w
b25lbnRUcmVlOntnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZTpyLmdldENsb3Nlc3RJbnN0YW5j
ZUZyb21Ob2RlLGdldE5vZGVGcm9tSW5zdGFuY2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX3JlbmRl
cmVkQ29tcG9uZW50JiYoZT1jKGUpKSxlP3IuZ2V0Tm9kZUZyb21JbnN0YW5jZShlKTpudWxsfX0s
TW91bnQ6aSxSZWNvbmNpbGVyOmF9KTt0LmV4cG9ydHM9ZH0sezEwMzoxMDMsMTEzOjExMywxNDI6
MTQyLDMzOjMzLDQ3OjQ3LDYwOjYwLDY2OjY2LDcxOjcxLDcyOjcyLDk2Ojk2fV0sMzE6W2Z1bmN0
aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihlKXt2YXIgdD1lLl9jdXJy
ZW50RWxlbWVudC5fb3duZXJ8fG51bGw7aWYodCl7dmFyIG49dC5nZXROYW1lKCk7aWYobilyZXR1
cm4iIFRoaXMgRE9NIG5vZGUgd2FzIHJlbmRlcmVkIGJ5IGAiK24rImAuIn19cmV0dXJuIiJ9ZnVu
Y3Rpb24gbyhlLHQpe3QmJihZW2UuX3RhZ10mJihudWxsIT10LmNoaWxkcmVufHxudWxsIT10LmRh
bmdlcm91c2x5U2V0SW5uZXJIVE1MKSYmbSgiMTM3IixlLl90YWcsZS5fY3VycmVudEVsZW1lbnQu
X293bmVyPyIgQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgIitlLl9jdXJyZW50RWxlbWVudC5f
b3duZXIuZ2V0TmFtZSgpKyIuIjoiIiksbnVsbCE9dC5kYW5nZXJvdXNseVNldElubmVySFRNTCYm
KG51bGwhPXQuY2hpbGRyZW4mJm0oIjYwIiksIm9iamVjdCI9PXR5cGVvZiB0LmRhbmdlcm91c2x5
U2V0SW5uZXJIVE1MJiZCIGluIHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUx8fG0oIjYxIikpLG51
bGwhPXQuc3R5bGUmJiJvYmplY3QiIT10eXBlb2YgdC5zdHlsZSYmbSgiNjIiLHIoZSkpKX1mdW5j
dGlvbiBpKGUsdCxuLHIpe2lmKCEociBpbnN0YW5jZW9mIFIpKXt2YXIgbz1lLl9ob3N0Q29udGFp
bmVySW5mbyxpPW8uX25vZGUmJm8uX25vZGUubm9kZVR5cGU9PT1ILHM9aT9vLl9ub2RlOm8uX293
bmVyRG9jdW1lbnQ7Rih0LHMpLHIuZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShhLHtpbnN0
OmUscmVnaXN0cmF0aW9uTmFtZTp0LGxpc3RlbmVyOm59KX19ZnVuY3Rpb24gYSgpe3ZhciBlPXRo
aXM7eC5wdXRMaXN0ZW5lcihlLmluc3QsZS5yZWdpc3RyYXRpb25OYW1lLGUubGlzdGVuZXIpfWZ1
bmN0aW9uIHMoKXt2YXIgZT10aGlzO1MucG9zdE1vdW50V3JhcHBlcihlKX1mdW5jdGlvbiB1KCl7
dmFyIGU9dGhpcztJLnBvc3RNb3VudFdyYXBwZXIoZSl9ZnVuY3Rpb24gbCgpe3ZhciBlPXRoaXM7
Ti5wb3N0TW91bnRXcmFwcGVyKGUpfWZ1bmN0aW9uIGMoKXt2YXIgZT10aGlzO2UuX3Jvb3ROb2Rl
SUR8fG0oIjYzIik7dmFyIHQ9VShlKTtzd2l0Y2godHx8bSgiNjQiKSxlLl90YWcpe2Nhc2UiaWZy
YW1lIjpjYXNlIm9iamVjdCI6ZS5fd3JhcHBlclN0YXRlLmxpc3RlbmVycz1bVC50cmFwQnViYmxl
ZEV2ZW50KCJ0b3BMb2FkIiwibG9hZCIsdCldO2JyZWFrO2Nhc2UidmlkZW8iOmNhc2UiYXVkaW8i
OmUuX3dyYXBwZXJTdGF0ZS5saXN0ZW5lcnM9W107Zm9yKHZhciBuIGluIHEpcS5oYXNPd25Qcm9w
ZXJ0eShuKSYmZS5fd3JhcHBlclN0YXRlLmxpc3RlbmVycy5wdXNoKFQudHJhcEJ1YmJsZWRFdmVu
dChuLHFbbl0sdCkpO2JyZWFrO2Nhc2Uic291cmNlIjplLl93cmFwcGVyU3RhdGUubGlzdGVuZXJz
PVtULnRyYXBCdWJibGVkRXZlbnQoInRvcEVycm9yIiwiZXJyb3IiLHQpXTticmVhaztjYXNlImlt
ZyI6ZS5fd3JhcHBlclN0YXRlLmxpc3RlbmVycz1bVC50cmFwQnViYmxlZEV2ZW50KCJ0b3BFcnJv
ciIsImVycm9yIix0KSxULnRyYXBCdWJibGVkRXZlbnQoInRvcExvYWQiLCJsb2FkIix0KV07YnJl
YWs7Y2FzZSJmb3JtIjplLl93cmFwcGVyU3RhdGUubGlzdGVuZXJzPVtULnRyYXBCdWJibGVkRXZl
bnQoInRvcFJlc2V0IiwicmVzZXQiLHQpLFQudHJhcEJ1YmJsZWRFdmVudCgidG9wU3VibWl0Iiwi
c3VibWl0Iix0KV07YnJlYWs7Y2FzZSJpbnB1dCI6Y2FzZSJzZWxlY3QiOmNhc2UidGV4dGFyZWEi
OmUuX3dyYXBwZXJTdGF0ZS5saXN0ZW5lcnM9W1QudHJhcEJ1YmJsZWRFdmVudCgidG9wSW52YWxp
ZCIsImludmFsaWQiLHQpXX19ZnVuY3Rpb24gcCgpe00ucG9zdFVwZGF0ZVdyYXBwZXIodGhpcyl9
ZnVuY3Rpb24gZChlKXtHLmNhbGwoUSxlKXx8KFgudGVzdChlKXx8bSgiNjUiLGUpLFFbZV09ITAp
fWZ1bmN0aW9uIGYoZSx0KXtyZXR1cm4gZS5pbmRleE9mKCItIik+PTB8fG51bGwhPXQuaXN9ZnVu
Y3Rpb24gaChlKXt2YXIgdD1lLnR5cGU7ZCh0KSx0aGlzLl9jdXJyZW50RWxlbWVudD1lLHRoaXMu
X3RhZz10LnRvTG93ZXJDYXNlKCksdGhpcy5fbmFtZXNwYWNlVVJJPW51bGwsdGhpcy5fcmVuZGVy
ZWRDaGlsZHJlbj1udWxsLHRoaXMuX3ByZXZpb3VzU3R5bGU9bnVsbCx0aGlzLl9wcmV2aW91c1N0
eWxlQ29weT1udWxsLHRoaXMuX2hvc3ROb2RlPW51bGwsdGhpcy5faG9zdFBhcmVudD1udWxsLHRo
aXMuX3Jvb3ROb2RlSUQ9MCx0aGlzLl9kb21JRD0wLHRoaXMuX2hvc3RDb250YWluZXJJbmZvPW51
bGwsdGhpcy5fd3JhcHBlclN0YXRlPW51bGwsdGhpcy5fdG9wTGV2ZWxXcmFwcGVyPW51bGwsdGhp
cy5fZmxhZ3M9MH12YXIgbT1lKDExMiksdj1lKDE0MyksZz1lKDIpLHk9ZSg1KSxfPWUoOSksQz1l
KDEwKSxiPWUoMTEpLEU9ZSgxMikseD1lKDE2KSx3PWUoMTcpLFQ9ZSgyNSksaz1lKDMyKSxQPWUo
MzMpLFM9ZSgzOCksTj1lKDM5KSxNPWUoNDApLEk9ZSg0MyksTz0oZSg1OCksZSg2MSkpLFI9ZSg2
OCksQT0oZSgxMjkpLGUoOTUpKSxEPShlKDEzNyksZSgxMDkpLGUoMTQxKSxlKDExOCksZSgxNDIp
LGspLEw9eC5kZWxldGVMaXN0ZW5lcixVPVAuZ2V0Tm9kZUZyb21JbnN0YW5jZSxGPVQubGlzdGVu
VG8saj13LnJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzLFY9e3N0cmluZzohMCxudW1iZXI6ITB9LEI9
Il9faHRtbCIsVz17Y2hpbGRyZW46bnVsbCxkYW5nZXJvdXNseVNldElubmVySFRNTDpudWxsLHN1
cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZzpudWxsfSxIPTExLHE9e3RvcEFib3J0OiJhYm9y
dCIsdG9wQ2FuUGxheToiY2FucGxheSIsdG9wQ2FuUGxheVRocm91Z2g6ImNhbnBsYXl0aHJvdWdo
Iix0b3BEdXJhdGlvbkNoYW5nZToiZHVyYXRpb25jaGFuZ2UiLHRvcEVtcHRpZWQ6ImVtcHRpZWQi
LHRvcEVuY3J5cHRlZDoiZW5jcnlwdGVkIix0b3BFbmRlZDoiZW5kZWQiLHRvcEVycm9yOiJlcnJv
ciIsdG9wTG9hZGVkRGF0YToibG9hZGVkZGF0YSIsdG9wTG9hZGVkTWV0YWRhdGE6ImxvYWRlZG1l
dGFkYXRhIix0b3BMb2FkU3RhcnQ6ImxvYWRzdGFydCIsdG9wUGF1c2U6InBhdXNlIix0b3BQbGF5
OiJwbGF5Iix0b3BQbGF5aW5nOiJwbGF5aW5nIix0b3BQcm9ncmVzczoicHJvZ3Jlc3MiLHRvcFJh
dGVDaGFuZ2U6InJhdGVjaGFuZ2UiLHRvcFNlZWtlZDoic2Vla2VkIix0b3BTZWVraW5nOiJzZWVr
aW5nIix0b3BTdGFsbGVkOiJzdGFsbGVkIix0b3BTdXNwZW5kOiJzdXNwZW5kIix0b3BUaW1lVXBk
YXRlOiJ0aW1ldXBkYXRlIix0b3BWb2x1bWVDaGFuZ2U6InZvbHVtZWNoYW5nZSIsdG9wV2FpdGlu
Zzoid2FpdGluZyJ9LEs9e2FyZWE6ITAsYmFzZTohMCxicjohMCxjb2w6ITAsZW1iZWQ6ITAsaHI6
ITAsaW1nOiEwLGlucHV0OiEwLGtleWdlbjohMCxsaW5rOiEwLG1ldGE6ITAscGFyYW06ITAsc291
cmNlOiEwLHRyYWNrOiEwLHdicjohMH0sej17bGlzdGluZzohMCxwcmU6ITAsdGV4dGFyZWE6ITB9
LFk9dih7bWVudWl0ZW06ITB9LEspLFg9L15bYS16QS1aXVthLXpBLVo6X1wuXC1cZF0qJC8sUT17
fSxHPXt9Lmhhc093blByb3BlcnR5LCQ9MTtoLmRpc3BsYXlOYW1lPSJSZWFjdERPTUNvbXBvbmVu
dCIsaC5NaXhpbj17bW91bnRDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4scil7dGhpcy5fcm9vdE5v
ZGVJRD0kKyssdGhpcy5fZG9tSUQ9bi5faWRDb3VudGVyKyssdGhpcy5faG9zdFBhcmVudD10LHRo
aXMuX2hvc3RDb250YWluZXJJbmZvPW47dmFyIGk9dGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHM7
c3dpdGNoKHRoaXMuX3RhZyl7Y2FzZSJhdWRpbyI6Y2FzZSJmb3JtIjpjYXNlImlmcmFtZSI6Y2Fz
ZSJpbWciOmNhc2UibGluayI6Y2FzZSJvYmplY3QiOmNhc2Uic291cmNlIjpjYXNlInZpZGVvIjp0
aGlzLl93cmFwcGVyU3RhdGU9e2xpc3RlbmVyczpudWxsfSxlLmdldFJlYWN0TW91bnRSZWFkeSgp
LmVucXVldWUoYyx0aGlzKTticmVhaztjYXNlImlucHV0IjpTLm1vdW50V3JhcHBlcih0aGlzLGks
dCksaT1TLmdldEhvc3RQcm9wcyh0aGlzLGkpLGUuZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1
ZShjLHRoaXMpO2JyZWFrO2Nhc2Uib3B0aW9uIjpOLm1vdW50V3JhcHBlcih0aGlzLGksdCksaT1O
LmdldEhvc3RQcm9wcyh0aGlzLGkpO2JyZWFrO2Nhc2Uic2VsZWN0IjpNLm1vdW50V3JhcHBlcih0
aGlzLGksdCksaT1NLmdldEhvc3RQcm9wcyh0aGlzLGkpLGUuZ2V0UmVhY3RNb3VudFJlYWR5KCku
ZW5xdWV1ZShjLHRoaXMpO2JyZWFrO2Nhc2UidGV4dGFyZWEiOkkubW91bnRXcmFwcGVyKHRoaXMs
aSx0KSxpPUkuZ2V0SG9zdFByb3BzKHRoaXMsaSksZS5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1
ZXVlKGMsdGhpcyl9byh0aGlzLGkpO3ZhciBhLHA7bnVsbCE9dD8oYT10Ll9uYW1lc3BhY2VVUkks
cD10Ll90YWcpOm4uX3RhZyYmKGE9bi5fbmFtZXNwYWNlVVJJLHA9bi5fdGFnKSwobnVsbD09YXx8
YT09PUMuc3ZnJiYiZm9yZWlnbm9iamVjdCI9PT1wKSYmKGE9Qy5odG1sKSxhPT09Qy5odG1sJiYo
InN2ZyI9PT10aGlzLl90YWc/YT1DLnN2ZzoibWF0aCI9PT10aGlzLl90YWcmJihhPUMubWF0aG1s
KSksdGhpcy5fbmFtZXNwYWNlVVJJPWE7dmFyIGQ7aWYoZS51c2VDcmVhdGVFbGVtZW50KXt2YXIg
ZixoPW4uX293bmVyRG9jdW1lbnQ7aWYoYT09PUMuaHRtbClpZigic2NyaXB0Ij09PXRoaXMuX3Rh
Zyl7dmFyIG09aC5jcmVhdGVFbGVtZW50KCJkaXYiKSx2PXRoaXMuX2N1cnJlbnRFbGVtZW50LnR5
cGU7bS5pbm5lckhUTUw9IjwiK3YrIj48LyIrdisiPiIsZj1tLnJlbW92ZUNoaWxkKG0uZmlyc3RD
aGlsZCl9ZWxzZSBmPWkuaXM/aC5jcmVhdGVFbGVtZW50KHRoaXMuX2N1cnJlbnRFbGVtZW50LnR5
cGUsaS5pcyk6aC5jcmVhdGVFbGVtZW50KHRoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGUpO2Vsc2Ug
Zj1oLmNyZWF0ZUVsZW1lbnROUyhhLHRoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGUpO1AucHJlY2Fj
aGVOb2RlKHRoaXMsZiksdGhpcy5fZmxhZ3N8PUQuaGFzQ2FjaGVkQ2hpbGROb2Rlcyx0aGlzLl9o
b3N0UGFyZW50fHxFLnNldEF0dHJpYnV0ZUZvclJvb3QoZiksdGhpcy5fdXBkYXRlRE9NUHJvcGVy
dGllcyhudWxsLGksZSk7dmFyIHk9XyhmKTt0aGlzLl9jcmVhdGVJbml0aWFsQ2hpbGRyZW4oZSxp
LHIseSksZD15fWVsc2V7dmFyIGI9dGhpcy5fY3JlYXRlT3BlblRhZ01hcmt1cEFuZFB1dExpc3Rl
bmVycyhlLGkpLHg9dGhpcy5fY3JlYXRlQ29udGVudE1hcmt1cChlLGkscik7ZD0heCYmS1t0aGlz
Ll90YWddP2IrIi8+IjpiKyI+Iit4KyI8LyIrdGhpcy5fY3VycmVudEVsZW1lbnQudHlwZSsiPiJ9
c3dpdGNoKHRoaXMuX3RhZyl7Y2FzZSJpbnB1dCI6ZS5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1
ZXVlKHMsdGhpcyksaS5hdXRvRm9jdXMmJmUuZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShn
LmZvY3VzRE9NQ29tcG9uZW50LHRoaXMpO2JyZWFrO2Nhc2UidGV4dGFyZWEiOmUuZ2V0UmVhY3RN
b3VudFJlYWR5KCkuZW5xdWV1ZSh1LHRoaXMpLGkuYXV0b0ZvY3VzJiZlLmdldFJlYWN0TW91bnRS
ZWFkeSgpLmVucXVldWUoZy5mb2N1c0RPTUNvbXBvbmVudCx0aGlzKTticmVhaztjYXNlInNlbGVj
dCI6Y2FzZSJidXR0b24iOmkuYXV0b0ZvY3VzJiZlLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVl
dWUoZy5mb2N1c0RPTUNvbXBvbmVudCx0aGlzKTticmVhaztjYXNlIm9wdGlvbiI6ZS5nZXRSZWFj
dE1vdW50UmVhZHkoKS5lbnF1ZXVlKGwsdGhpcyl9cmV0dXJuIGR9LF9jcmVhdGVPcGVuVGFnTWFy
a3VwQW5kUHV0TGlzdGVuZXJzOmZ1bmN0aW9uKGUsdCl7dmFyIG49IjwiK3RoaXMuX2N1cnJlbnRF
bGVtZW50LnR5cGU7Zm9yKHZhciByIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShyKSl7dmFyIG89
dFtyXTtpZihudWxsIT1vKWlmKGouaGFzT3duUHJvcGVydHkocikpbyYmaSh0aGlzLHIsbyxlKTtl
bHNleyJzdHlsZSI9PT1yJiYobyYmKG89dGhpcy5fcHJldmlvdXNTdHlsZUNvcHk9dih7fSx0LnN0
eWxlKSksbz15LmNyZWF0ZU1hcmt1cEZvclN0eWxlcyhvLHRoaXMpKTt2YXIgYT1udWxsO251bGwh
PXRoaXMuX3RhZyYmZih0aGlzLl90YWcsdCk/Vy5oYXNPd25Qcm9wZXJ0eShyKXx8KGE9RS5jcmVh
dGVNYXJrdXBGb3JDdXN0b21BdHRyaWJ1dGUocixvKSk6YT1FLmNyZWF0ZU1hcmt1cEZvclByb3Bl
cnR5KHIsbyksYSYmKG4rPSIgIithKX19cmV0dXJuIGUucmVuZGVyVG9TdGF0aWNNYXJrdXA/bjoo
dGhpcy5faG9zdFBhcmVudHx8KG4rPSIgIitFLmNyZWF0ZU1hcmt1cEZvclJvb3QoKSksbis9IiAi
K0UuY3JlYXRlTWFya3VwRm9ySUQodGhpcy5fZG9tSUQpKX0sX2NyZWF0ZUNvbnRlbnRNYXJrdXA6
ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSIiLG89dC5kYW5nZXJvdXNseVNldElubmVySFRNTDtpZihu
dWxsIT1vKW51bGwhPW8uX19odG1sJiYocj1vLl9faHRtbCk7ZWxzZXt2YXIgaT1WW3R5cGVvZiB0
LmNoaWxkcmVuXT90LmNoaWxkcmVuOm51bGwsYT1udWxsIT1pP251bGw6dC5jaGlsZHJlbjtpZihu
dWxsIT1pKXI9QShpKTtlbHNlIGlmKG51bGwhPWEpe3ZhciBzPXRoaXMubW91bnRDaGlsZHJlbihh
LGUsbik7cj1zLmpvaW4oIiIpfX1yZXR1cm4gelt0aGlzLl90YWddJiYiXG4iPT09ci5jaGFyQXQo
MCk/IlxuIityOnJ9LF9jcmVhdGVJbml0aWFsQ2hpbGRyZW46ZnVuY3Rpb24oZSx0LG4scil7dmFy
IG89dC5kYW5nZXJvdXNseVNldElubmVySFRNTDtpZihudWxsIT1vKW51bGwhPW8uX19odG1sJiZf
LnF1ZXVlSFRNTChyLG8uX19odG1sKTtlbHNle3ZhciBpPVZbdHlwZW9mIHQuY2hpbGRyZW5dP3Qu
Y2hpbGRyZW46bnVsbCxhPW51bGwhPWk/bnVsbDp0LmNoaWxkcmVuO2lmKG51bGwhPWkpIiIhPT1p
JiZfLnF1ZXVlVGV4dChyLGkpO2Vsc2UgaWYobnVsbCE9YSlmb3IodmFyIHM9dGhpcy5tb3VudENo
aWxkcmVuKGEsZSxuKSx1PTA7dTxzLmxlbmd0aDt1KyspXy5xdWV1ZUNoaWxkKHIsc1t1XSl9fSxy
ZWNlaXZlQ29tcG9uZW50OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLl9jdXJyZW50RWxlbWVu
dDt0aGlzLl9jdXJyZW50RWxlbWVudD1lLHRoaXMudXBkYXRlQ29tcG9uZW50KHQscixlLG4pfSx1
cGRhdGVDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dC5wcm9wcyxhPXRoaXMuX2N1
cnJlbnRFbGVtZW50LnByb3BzO3N3aXRjaCh0aGlzLl90YWcpe2Nhc2UiaW5wdXQiOmk9Uy5nZXRI
b3N0UHJvcHModGhpcyxpKSxhPVMuZ2V0SG9zdFByb3BzKHRoaXMsYSk7YnJlYWs7Y2FzZSJvcHRp
b24iOmk9Ti5nZXRIb3N0UHJvcHModGhpcyxpKSxhPU4uZ2V0SG9zdFByb3BzKHRoaXMsYSk7YnJl
YWs7Y2FzZSJzZWxlY3QiOmk9TS5nZXRIb3N0UHJvcHModGhpcyxpKSxhPU0uZ2V0SG9zdFByb3Bz
KHRoaXMsYSk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6aT1JLmdldEhvc3RQcm9wcyh0aGlzLGkpLGE9
SS5nZXRIb3N0UHJvcHModGhpcyxhKX1zd2l0Y2gobyh0aGlzLGEpLHRoaXMuX3VwZGF0ZURPTVBy
b3BlcnRpZXMoaSxhLGUpLHRoaXMuX3VwZGF0ZURPTUNoaWxkcmVuKGksYSxlLHIpLHRoaXMuX3Rh
Zyl7Y2FzZSJpbnB1dCI6Uy51cGRhdGVXcmFwcGVyKHRoaXMpO2JyZWFrO2Nhc2UidGV4dGFyZWEi
OkkudXBkYXRlV3JhcHBlcih0aGlzKTticmVhaztjYXNlInNlbGVjdCI6ZS5nZXRSZWFjdE1vdW50
UmVhZHkoKS5lbnF1ZXVlKHAsdGhpcyl9fSxfdXBkYXRlRE9NUHJvcGVydGllczpmdW5jdGlvbihl
LHQsbil7dmFyIHIsbyxhO2ZvcihyIGluIGUpaWYoIXQuaGFzT3duUHJvcGVydHkocikmJmUuaGFz
T3duUHJvcGVydHkocikmJm51bGwhPWVbcl0paWYoInN0eWxlIj09PXIpe3ZhciBzPXRoaXMuX3By
ZXZpb3VzU3R5bGVDb3B5O2ZvcihvIGluIHMpcy5oYXNPd25Qcm9wZXJ0eShvKSYmKGE9YXx8e30s
YVtvXT0iIik7dGhpcy5fcHJldmlvdXNTdHlsZUNvcHk9bnVsbH1lbHNlIGouaGFzT3duUHJvcGVy
dHkocik/ZVtyXSYmTCh0aGlzLHIpOmYodGhpcy5fdGFnLGUpP1cuaGFzT3duUHJvcGVydHkocil8
fEUuZGVsZXRlVmFsdWVGb3JBdHRyaWJ1dGUoVSh0aGlzKSxyKTooYi5wcm9wZXJ0aWVzW3JdfHxi
LmlzQ3VzdG9tQXR0cmlidXRlKHIpKSYmRS5kZWxldGVWYWx1ZUZvclByb3BlcnR5KFUodGhpcyks
cik7Zm9yKHIgaW4gdCl7dmFyIHU9dFtyXSxsPSJzdHlsZSI9PT1yP3RoaXMuX3ByZXZpb3VzU3R5
bGVDb3B5Om51bGwhPWU/ZVtyXTp2b2lkIDA7aWYodC5oYXNPd25Qcm9wZXJ0eShyKSYmdSE9PWwm
JihudWxsIT11fHxudWxsIT1sKSlpZigic3R5bGUiPT09cilpZih1P3U9dGhpcy5fcHJldmlvdXNT
dHlsZUNvcHk9dih7fSx1KTp0aGlzLl9wcmV2aW91c1N0eWxlQ29weT1udWxsLGwpe2ZvcihvIGlu
IGwpIWwuaGFzT3duUHJvcGVydHkobyl8fHUmJnUuaGFzT3duUHJvcGVydHkobyl8fChhPWF8fHt9
LGFbb109IiIpO2ZvcihvIGluIHUpdS5oYXNPd25Qcm9wZXJ0eShvKSYmbFtvXSE9PXVbb10mJihh
PWF8fHt9LGFbb109dVtvXSl9ZWxzZSBhPXU7ZWxzZSBpZihqLmhhc093blByb3BlcnR5KHIpKXU/
aSh0aGlzLHIsdSxuKTpsJiZMKHRoaXMscik7ZWxzZSBpZihmKHRoaXMuX3RhZyx0KSlXLmhhc093
blByb3BlcnR5KHIpfHxFLnNldFZhbHVlRm9yQXR0cmlidXRlKFUodGhpcykscix1KTtlbHNlIGlm
KGIucHJvcGVydGllc1tyXXx8Yi5pc0N1c3RvbUF0dHJpYnV0ZShyKSl7dmFyIGM9VSh0aGlzKTtu
dWxsIT11P0Uuc2V0VmFsdWVGb3JQcm9wZXJ0eShjLHIsdSk6RS5kZWxldGVWYWx1ZUZvclByb3Bl
cnR5KGMscil9fWEmJnkuc2V0VmFsdWVGb3JTdHlsZXMoVSh0aGlzKSxhLHRoaXMpfSxfdXBkYXRl
RE9NQ2hpbGRyZW46ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89Vlt0eXBlb2YgZS5jaGlsZHJlbl0/
ZS5jaGlsZHJlbjpudWxsLGk9Vlt0eXBlb2YgdC5jaGlsZHJlbl0/dC5jaGlsZHJlbjpudWxsLGE9
ZS5kYW5nZXJvdXNseVNldElubmVySFRNTCYmZS5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0
bWwscz10LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MJiZ0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1M
Ll9faHRtbCx1PW51bGwhPW8/bnVsbDplLmNoaWxkcmVuLGw9bnVsbCE9aT9udWxsOnQuY2hpbGRy
ZW4sYz1udWxsIT1vfHxudWxsIT1hLHA9bnVsbCE9aXx8bnVsbCE9cztudWxsIT11JiZudWxsPT1s
P3RoaXMudXBkYXRlQ2hpbGRyZW4obnVsbCxuLHIpOmMmJiFwJiZ0aGlzLnVwZGF0ZVRleHRDb250
ZW50KCIiKSxudWxsIT1pP28hPT1pJiZ0aGlzLnVwZGF0ZVRleHRDb250ZW50KCIiK2kpOm51bGwh
PXM/YSE9PXMmJnRoaXMudXBkYXRlTWFya3VwKCIiK3MpOm51bGwhPWwmJnRoaXMudXBkYXRlQ2hp
bGRyZW4obCxuLHIpfSxnZXRIb3N0Tm9kZTpmdW5jdGlvbigpe3JldHVybiBVKHRoaXMpfSx1bm1v
dW50Q29tcG9uZW50OmZ1bmN0aW9uKGUpe3N3aXRjaCh0aGlzLl90YWcpe2Nhc2UiYXVkaW8iOmNh
c2UiZm9ybSI6Y2FzZSJpZnJhbWUiOmNhc2UiaW1nIjpjYXNlImxpbmsiOmNhc2Uib2JqZWN0Ijpj
YXNlInNvdXJjZSI6Y2FzZSJ2aWRlbyI6dmFyIHQ9dGhpcy5fd3JhcHBlclN0YXRlLmxpc3RlbmVy
cztpZih0KWZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXRbbl0ucmVtb3ZlKCk7YnJlYWs7Y2Fz
ZSJodG1sIjpjYXNlImhlYWQiOmNhc2UiYm9keSI6bSgiNjYiLHRoaXMuX3RhZyl9dGhpcy51bm1v
dW50Q2hpbGRyZW4oZSksUC51bmNhY2hlTm9kZSh0aGlzKSx4LmRlbGV0ZUFsbExpc3RlbmVycyh0
aGlzKSx0aGlzLl9yb290Tm9kZUlEPTAsdGhpcy5fZG9tSUQ9MCx0aGlzLl93cmFwcGVyU3RhdGU9
bnVsbH0sZ2V0UHVibGljSW5zdGFuY2U6ZnVuY3Rpb24oKXtyZXR1cm4gVSh0aGlzKX19LHYoaC5w
cm90b3R5cGUsaC5NaXhpbixPLk1peGluKSx0LmV4cG9ydHM9aH0sezEwOjEwLDEwOToxMDksMTE6
MTEsMTEyOjExMiwxMTg6MTE4LDEyOjEyLDEyOToxMjksMTM3OjEzNywxNDE6MTQxLDE0MjoxNDIs
MTQzOjE0MywxNjoxNiwxNzoxNywyOjIsMjU6MjUsMzI6MzIsMzM6MzMsMzg6MzgsMzk6MzksNDA6
NDAsNDM6NDMsNTo1LDU4OjU4LDYxOjYxLDY4OjY4LDk6OSw5NTo5NX1dLDMyOltmdW5jdGlvbihl
LHQsbil7InVzZSBzdHJpY3QiO3ZhciByPXtoYXNDYWNoZWRDaGlsZE5vZGVzOjF9O3QuZXhwb3J0
cz1yfSx7fV0sMzM6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQp
e3JldHVybiAxPT09ZS5ub2RlVHlwZSYmZS5nZXRBdHRyaWJ1dGUoaCk9PT1TdHJpbmcodCl8fDg9
PT1lLm5vZGVUeXBlJiZlLm5vZGVWYWx1ZT09PSIgcmVhY3QtdGV4dDogIit0KyIgInx8OD09PWUu
bm9kZVR5cGUmJmUubm9kZVZhbHVlPT09IiByZWFjdC1lbXB0eTogIit0KyIgIn1mdW5jdGlvbiBv
KGUpe2Zvcih2YXIgdDt0PWUuX3JlbmRlcmVkQ29tcG9uZW50OyllPXQ7cmV0dXJuIGV9ZnVuY3Rp
b24gaShlLHQpe3ZhciBuPW8oZSk7bi5faG9zdE5vZGU9dCx0W3ZdPW59ZnVuY3Rpb24gYShlKXt2
YXIgdD1lLl9ob3N0Tm9kZTt0JiYoZGVsZXRlIHRbdl0sZS5faG9zdE5vZGU9bnVsbCl9ZnVuY3Rp
b24gcyhlLHQpe2lmKCEoZS5fZmxhZ3MmbS5oYXNDYWNoZWRDaGlsZE5vZGVzKSl7dmFyIG49ZS5f
cmVuZGVyZWRDaGlsZHJlbixhPXQuZmlyc3RDaGlsZDtlOmZvcih2YXIgcyBpbiBuKWlmKG4uaGFz
T3duUHJvcGVydHkocykpe3ZhciB1PW5bc10sbD1vKHUpLl9kb21JRDtpZigwIT09bCl7Zm9yKDtu
dWxsIT09YTthPWEubmV4dFNpYmxpbmcpaWYocihhLGwpKXtpKHUsYSk7Y29udGludWUgZX1wKCIz
MiIsbCl9fWUuX2ZsYWdzfD1tLmhhc0NhY2hlZENoaWxkTm9kZXN9fWZ1bmN0aW9uIHUoZSl7aWYo
ZVt2XSlyZXR1cm4gZVt2XTtmb3IodmFyIHQ9W107IWVbdl07KXtpZih0LnB1c2goZSksIWUucGFy
ZW50Tm9kZSlyZXR1cm4gbnVsbDtlPWUucGFyZW50Tm9kZX1mb3IodmFyIG4scjtlJiYocj1lW3Zd
KTtlPXQucG9wKCkpbj1yLHQubGVuZ3RoJiZzKHIsZSk7cmV0dXJuIG59ZnVuY3Rpb24gbChlKXt2
YXIgdD11KGUpO3JldHVybiBudWxsIT10JiZ0Ll9ob3N0Tm9kZT09PWU/dDpudWxsfWZ1bmN0aW9u
IGMoZSl7aWYodm9pZCAwPT09ZS5faG9zdE5vZGUmJnAoIjMzIiksZS5faG9zdE5vZGUpcmV0dXJu
IGUuX2hvc3ROb2RlO2Zvcih2YXIgdD1bXTshZS5faG9zdE5vZGU7KXQucHVzaChlKSxlLl9ob3N0
UGFyZW50fHxwKCIzNCIpLGU9ZS5faG9zdFBhcmVudDtmb3IoO3QubGVuZ3RoO2U9dC5wb3AoKSlz
KGUsZS5faG9zdE5vZGUpO3JldHVybiBlLl9ob3N0Tm9kZX12YXIgcD1lKDExMiksZD1lKDExKSxm
PWUoMzIpLGg9KGUoMTM3KSxkLklEX0FUVFJJQlVURV9OQU1FKSxtPWYsdj0iX19yZWFjdEludGVy
bmFsSW5zdGFuY2UkIitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKSxnPXtnZXRD
bG9zZXN0SW5zdGFuY2VGcm9tTm9kZTp1LGdldEluc3RhbmNlRnJvbU5vZGU6bCxnZXROb2RlRnJv
bUluc3RhbmNlOmMscHJlY2FjaGVDaGlsZE5vZGVzOnMscHJlY2FjaGVOb2RlOmksdW5jYWNoZU5v
ZGU6YX07dC5leHBvcnRzPWd9LHsxMToxMSwxMTI6MTEyLDEzNzoxMzcsMzI6MzJ9XSwzNDpbZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJue190b3BMZXZl
bFdyYXBwZXI6ZSxfaWRDb3VudGVyOjEsX293bmVyRG9jdW1lbnQ6dD90Lm5vZGVUeXBlPT09bz90
OnQub3duZXJEb2N1bWVudDpudWxsLF9ub2RlOnQsX3RhZzp0P3Qubm9kZU5hbWUudG9Mb3dlckNh
c2UoKTpudWxsLF9uYW1lc3BhY2VVUkk6dD90Lm5hbWVzcGFjZVVSSTpudWxsfX12YXIgbz0oZSgx
MTgpLDkpO3QuZXhwb3J0cz1yfSx7MTE4OjExOH1dLDM1OltmdW5jdGlvbihlLHQsbil7InVzZSBz
dHJpY3QiO3ZhciByPWUoMTQzKSxvPWUoOSksaT1lKDMzKSxhPWZ1bmN0aW9uKGUpe3RoaXMuX2N1
cnJlbnRFbGVtZW50PW51bGwsdGhpcy5faG9zdE5vZGU9bnVsbCx0aGlzLl9ob3N0UGFyZW50PW51
bGwsdGhpcy5faG9zdENvbnRhaW5lckluZm89bnVsbCx0aGlzLl9kb21JRD0wfTtyKGEucHJvdG90
eXBlLHttb3VudENvbXBvbmVudDpmdW5jdGlvbihlLHQsbixyKXt2YXIgYT1uLl9pZENvdW50ZXIr
Kzt0aGlzLl9kb21JRD1hLHRoaXMuX2hvc3RQYXJlbnQ9dCx0aGlzLl9ob3N0Q29udGFpbmVySW5m
bz1uO3ZhciBzPSIgcmVhY3QtZW1wdHk6ICIrdGhpcy5fZG9tSUQrIiAiO2lmKGUudXNlQ3JlYXRl
RWxlbWVudCl7dmFyIHU9bi5fb3duZXJEb2N1bWVudCxsPXUuY3JlYXRlQ29tbWVudChzKTtyZXR1
cm4gaS5wcmVjYWNoZU5vZGUodGhpcyxsKSxvKGwpfXJldHVybiBlLnJlbmRlclRvU3RhdGljTWFy
a3VwPyIiOiI8IS0tIitzKyItLT4ifSxyZWNlaXZlQ29tcG9uZW50OmZ1bmN0aW9uKCl7fSxnZXRI
b3N0Tm9kZTpmdW5jdGlvbigpe3JldHVybiBpLmdldE5vZGVGcm9tSW5zdGFuY2UodGhpcyl9LHVu
bW91bnRDb21wb25lbnQ6ZnVuY3Rpb24oKXtpLnVuY2FjaGVOb2RlKHRoaXMpfX0pLHQuZXhwb3J0
cz1hfSx7MTQzOjE0MywzMzozMyw5Ojl9XSwzNjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0
Ijt2YXIgcj17dXNlQ3JlYXRlRWxlbWVudDohMCx1c2VGaWJlcjohMX07dC5leHBvcnRzPXJ9LHt9
XSwzNzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDgpLG89ZSgzMyksaT17
ZGFuZ2Vyb3VzbHlQcm9jZXNzQ2hpbGRyZW5VcGRhdGVzOmZ1bmN0aW9uKGUsdCl7dmFyIG49by5n
ZXROb2RlRnJvbUluc3RhbmNlKGUpO3IucHJvY2Vzc1VwZGF0ZXMobix0KX19O3QuZXhwb3J0cz1p
fSx7MzM6MzMsODo4fV0sMzg6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24g
cigpe3RoaXMuX3Jvb3ROb2RlSUQmJmQudXBkYXRlV3JhcHBlcih0aGlzKX1mdW5jdGlvbiBvKGUp
e3JldHVybiJjaGVja2JveCI9PT1lLnR5cGV8fCJyYWRpbyI9PT1lLnR5cGU/bnVsbCE9ZS5jaGVj
a2VkOm51bGwhPWUudmFsdWV9ZnVuY3Rpb24gaShlKXt2YXIgdD10aGlzLl9jdXJyZW50RWxlbWVu
dC5wcm9wcyxuPWwuZXhlY3V0ZU9uQ2hhbmdlKHQsZSk7cC5hc2FwKHIsdGhpcyk7dmFyIG89dC5u
YW1lO2lmKCJyYWRpbyI9PT10LnR5cGUmJm51bGwhPW8pe2Zvcih2YXIgaT1jLmdldE5vZGVGcm9t
SW5zdGFuY2UodGhpcykscz1pO3MucGFyZW50Tm9kZTspcz1zLnBhcmVudE5vZGU7Zm9yKHZhciB1
PXMucXVlcnlTZWxlY3RvckFsbCgiaW5wdXRbbmFtZT0iK0pTT04uc3RyaW5naWZ5KCIiK28pKydd
W3R5cGU9InJhZGlvIl0nKSxkPTA7ZDx1Lmxlbmd0aDtkKyspe3ZhciBmPXVbZF07aWYoZiE9PWkm
JmYuZm9ybT09PWkuZm9ybSl7dmFyIGg9Yy5nZXRJbnN0YW5jZUZyb21Ob2RlKGYpO2h8fGEoIjkw
IikscC5hc2FwKHIsaCl9fX1yZXR1cm4gbn12YXIgYT1lKDExMikscz1lKDE0MyksdT1lKDEyKSxs
PWUoMjMpLGM9ZSgzMykscD1lKDcxKSxkPShlKDEzNyksZSgxNDIpLHtnZXRIb3N0UHJvcHM6ZnVu
Y3Rpb24oZSx0KXt2YXIgbj1sLmdldFZhbHVlKHQpLHI9bC5nZXRDaGVja2VkKHQpO3JldHVybiBz
KHt0eXBlOnZvaWQgMCxzdGVwOnZvaWQgMCxtaW46dm9pZCAwLG1heDp2b2lkIDB9LHQse2RlZmF1
bHRDaGVja2VkOnZvaWQgMCxkZWZhdWx0VmFsdWU6dm9pZCAwLHZhbHVlOm51bGwhPW4/bjplLl93
cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlLGNoZWNrZWQ6bnVsbCE9cj9yOmUuX3dyYXBwZXJTdGF0
ZS5pbml0aWFsQ2hlY2tlZCxvbkNoYW5nZTplLl93cmFwcGVyU3RhdGUub25DaGFuZ2V9KX0sbW91
bnRXcmFwcGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5kZWZhdWx0VmFsdWU7ZS5fd3JhcHBlclN0
YXRlPXtpbml0aWFsQ2hlY2tlZDpudWxsIT10LmNoZWNrZWQ/dC5jaGVja2VkOnQuZGVmYXVsdENo
ZWNrZWQsaW5pdGlhbFZhbHVlOm51bGwhPXQudmFsdWU/dC52YWx1ZTpuLGxpc3RlbmVyczpudWxs
LG9uQ2hhbmdlOmkuYmluZChlKSxjb250cm9sbGVkOm8odCl9fSx1cGRhdGVXcmFwcGVyOmZ1bmN0
aW9uKGUpe3ZhciB0PWUuX2N1cnJlbnRFbGVtZW50LnByb3BzLG49dC5jaGVja2VkO251bGwhPW4m
JnUuc2V0VmFsdWVGb3JQcm9wZXJ0eShjLmdldE5vZGVGcm9tSW5zdGFuY2UoZSksImNoZWNrZWQi
LG58fCExKTt2YXIgcj1jLmdldE5vZGVGcm9tSW5zdGFuY2UoZSksbz1sLmdldFZhbHVlKHQpO2lm
KG51bGwhPW8paWYoMD09PW8mJiIiPT09ci52YWx1ZSlyLnZhbHVlPSIwIjtlbHNlIGlmKCJudW1i
ZXIiPT09dC50eXBlKXt2YXIgaT1wYXJzZUZsb2F0KHIudmFsdWUsMTApfHwwO28hPWkmJihyLnZh
bHVlPSIiK28pfWVsc2UgbyE9ci52YWx1ZSYmKHIudmFsdWU9IiIrbyk7ZWxzZSBudWxsPT10LnZh
bHVlJiZudWxsIT10LmRlZmF1bHRWYWx1ZSYmci5kZWZhdWx0VmFsdWUhPT0iIit0LmRlZmF1bHRW
YWx1ZSYmKHIuZGVmYXVsdFZhbHVlPSIiK3QuZGVmYXVsdFZhbHVlKSxudWxsPT10LmNoZWNrZWQm
Jm51bGwhPXQuZGVmYXVsdENoZWNrZWQmJihyLmRlZmF1bHRDaGVja2VkPSEhdC5kZWZhdWx0Q2hl
Y2tlZCl9LHBvc3RNb3VudFdyYXBwZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fY3VycmVudEVsZW1l
bnQucHJvcHMsbj1jLmdldE5vZGVGcm9tSW5zdGFuY2UoZSk7c3dpdGNoKHQudHlwZSl7Y2FzZSJz
dWJtaXQiOmNhc2UicmVzZXQiOmJyZWFrO2Nhc2UiY29sb3IiOmNhc2UiZGF0ZSI6Y2FzZSJkYXRl
dGltZSI6Y2FzZSJkYXRldGltZS1sb2NhbCI6Y2FzZSJtb250aCI6Y2FzZSJ0aW1lIjpjYXNlIndl
ZWsiOm4udmFsdWU9IiIsbi52YWx1ZT1uLmRlZmF1bHRWYWx1ZTticmVhaztkZWZhdWx0Om4udmFs
dWU9bi52YWx1ZX12YXIgcj1uLm5hbWU7IiIhPT1yJiYobi5uYW1lPSIiKSxuLmRlZmF1bHRDaGVj
a2VkPSFuLmRlZmF1bHRDaGVja2VkLG4uZGVmYXVsdENoZWNrZWQ9IW4uZGVmYXVsdENoZWNrZWQs
IiIhPT1yJiYobi5uYW1lPXIpfX0pO3QuZXhwb3J0cz1kfSx7MTEyOjExMiwxMjoxMiwxMzc6MTM3
LDE0MjoxNDIsMTQzOjE0MywyMzoyMywzMzozMyw3MTo3MX1dLDM5OltmdW5jdGlvbihlLHQsbil7
InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9IiI7cmV0dXJuIGkuQ2hpbGRyZW4uZm9y
RWFjaChlLGZ1bmN0aW9uKGUpe251bGwhPWUmJigic3RyaW5nIj09dHlwZW9mIGV8fCJudW1iZXIi
PT10eXBlb2YgZT90Kz1lOnV8fCh1PSEwKSl9KSx0fXZhciBvPWUoMTQzKSxpPWUoMTIwKSxhPWUo
MzMpLHM9ZSg0MCksdT0oZSgxNDIpLCExKSxsPXttb3VudFdyYXBwZXI6ZnVuY3Rpb24oZSx0LG4p
e3ZhciBvPW51bGw7aWYobnVsbCE9bil7dmFyIGk9bjsib3B0Z3JvdXAiPT09aS5fdGFnJiYoaT1p
Ll9ob3N0UGFyZW50KSxudWxsIT1pJiYic2VsZWN0Ij09PWkuX3RhZyYmKG89cy5nZXRTZWxlY3RW
YWx1ZUNvbnRleHQoaSkpfXZhciBhPW51bGw7aWYobnVsbCE9byl7dmFyIHU7aWYodT1udWxsIT10
LnZhbHVlP3QudmFsdWUrIiI6cih0LmNoaWxkcmVuKSxhPSExLEFycmF5LmlzQXJyYXkobykpe2Zv
cih2YXIgbD0wO2w8by5sZW5ndGg7bCsrKWlmKCIiK29bbF09PT11KXthPSEwO2JyZWFrfX1lbHNl
IGE9IiIrbz09PXV9ZS5fd3JhcHBlclN0YXRlPXtzZWxlY3RlZDphfX0scG9zdE1vdW50V3JhcHBl
cjpmdW5jdGlvbihlKXt2YXIgdD1lLl9jdXJyZW50RWxlbWVudC5wcm9wcztudWxsIT10LnZhbHVl
JiZhLmdldE5vZGVGcm9tSW5zdGFuY2UoZSkuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsdC52YWx1ZSl9
LGdldEhvc3RQcm9wczpmdW5jdGlvbihlLHQpe3ZhciBuPW8oe3NlbGVjdGVkOnZvaWQgMCxjaGls
ZHJlbjp2b2lkIDB9LHQpO251bGwhPWUuX3dyYXBwZXJTdGF0ZS5zZWxlY3RlZCYmKG4uc2VsZWN0
ZWQ9ZS5fd3JhcHBlclN0YXRlLnNlbGVjdGVkKTt2YXIgaT1yKHQuY2hpbGRyZW4pO3JldHVybiBp
JiYobi5jaGlsZHJlbj1pKSxufX07dC5leHBvcnRzPWx9LHsxMjA6MTIwLDE0MjoxNDIsMTQzOjE0
MywzMzozMyw0MDo0MH1dLDQwOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9u
IHIoKXtpZih0aGlzLl9yb290Tm9kZUlEJiZ0aGlzLl93cmFwcGVyU3RhdGUucGVuZGluZ1VwZGF0
ZSl7dGhpcy5fd3JhcHBlclN0YXRlLnBlbmRpbmdVcGRhdGU9ITE7dmFyIGU9dGhpcy5fY3VycmVu
dEVsZW1lbnQucHJvcHMsdD1zLmdldFZhbHVlKGUpO251bGwhPXQmJm8odGhpcyxCb29sZWFuKGUu
bXVsdGlwbGUpLHQpfX1mdW5jdGlvbiBvKGUsdCxuKXt2YXIgcixvLGk9dS5nZXROb2RlRnJvbUlu
c3RhbmNlKGUpLm9wdGlvbnM7aWYodCl7Zm9yKHI9e30sbz0wO288bi5sZW5ndGg7bysrKXJbIiIr
bltvXV09ITA7Zm9yKG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIGE9ci5oYXNPd25Qcm9wZXJ0eShp
W29dLnZhbHVlKTtpW29dLnNlbGVjdGVkIT09YSYmKGlbb10uc2VsZWN0ZWQ9YSl9fWVsc2V7Zm9y
KHI9IiIrbixvPTA7bzxpLmxlbmd0aDtvKyspaWYoaVtvXS52YWx1ZT09PXIpcmV0dXJuIHZvaWQo
aVtvXS5zZWxlY3RlZD0hMCk7aS5sZW5ndGgmJihpWzBdLnNlbGVjdGVkPSEwKX19ZnVuY3Rpb24g
aShlKXt2YXIgdD10aGlzLl9jdXJyZW50RWxlbWVudC5wcm9wcyxuPXMuZXhlY3V0ZU9uQ2hhbmdl
KHQsZSk7cmV0dXJuIHRoaXMuX3Jvb3ROb2RlSUQmJih0aGlzLl93cmFwcGVyU3RhdGUucGVuZGlu
Z1VwZGF0ZT0hMCksbC5hc2FwKHIsdGhpcyksbn12YXIgYT1lKDE0Mykscz1lKDIzKSx1PWUoMzMp
LGw9ZSg3MSksYz0oZSgxNDIpLCExKSxwPXtnZXRIb3N0UHJvcHM6ZnVuY3Rpb24oZSx0KXtyZXR1
cm4gYSh7fSx0LHtvbkNoYW5nZTplLl93cmFwcGVyU3RhdGUub25DaGFuZ2UsdmFsdWU6dm9pZCAw
fSl9LG1vdW50V3JhcHBlcjpmdW5jdGlvbihlLHQpe3ZhciBuPXMuZ2V0VmFsdWUodCk7ZS5fd3Jh
cHBlclN0YXRlPXtwZW5kaW5nVXBkYXRlOiExLGluaXRpYWxWYWx1ZTpudWxsIT1uP246dC5kZWZh
dWx0VmFsdWUsbGlzdGVuZXJzOm51bGwsb25DaGFuZ2U6aS5iaW5kKGUpLHdhc011bHRpcGxlOkJv
b2xlYW4odC5tdWx0aXBsZSl9LHZvaWQgMD09PXQudmFsdWV8fHZvaWQgMD09PXQuZGVmYXVsdFZh
bHVlfHxjfHwoYz0hMCl9LGdldFNlbGVjdFZhbHVlQ29udGV4dDpmdW5jdGlvbihlKXtyZXR1cm4g
ZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZX0scG9zdFVwZGF0ZVdyYXBwZXI6ZnVuY3Rpb24o
ZSl7dmFyIHQ9ZS5fY3VycmVudEVsZW1lbnQucHJvcHM7ZS5fd3JhcHBlclN0YXRlLmluaXRpYWxW
YWx1ZT12b2lkIDA7dmFyIG49ZS5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlO2UuX3dyYXBwZXJT
dGF0ZS53YXNNdWx0aXBsZT1Cb29sZWFuKHQubXVsdGlwbGUpO3ZhciByPXMuZ2V0VmFsdWUodCk7
bnVsbCE9cj8oZS5fd3JhcHBlclN0YXRlLnBlbmRpbmdVcGRhdGU9ITEsbyhlLEJvb2xlYW4odC5t
dWx0aXBsZSkscikpOm4hPT1Cb29sZWFuKHQubXVsdGlwbGUpJiYobnVsbCE9dC5kZWZhdWx0VmFs
dWU/byhlLEJvb2xlYW4odC5tdWx0aXBsZSksdC5kZWZhdWx0VmFsdWUpOm8oZSxCb29sZWFuKHQu
bXVsdGlwbGUpLHQubXVsdGlwbGU/W106IiIpKX19O3QuZXhwb3J0cz1wfSx7MTQyOjE0MiwxNDM6
MTQzLDIzOjIzLDMzOjMzLDcxOjcxfV0sNDE6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7
ZnVuY3Rpb24gcihlLHQsbixyKXtyZXR1cm4gZT09PW4mJnQ9PT1yfWZ1bmN0aW9uIG8oZSl7dmFy
IHQ9ZG9jdW1lbnQuc2VsZWN0aW9uLG49dC5jcmVhdGVSYW5nZSgpLHI9bi50ZXh0Lmxlbmd0aCxv
PW4uZHVwbGljYXRlKCk7by5tb3ZlVG9FbGVtZW50VGV4dChlKSxvLnNldEVuZFBvaW50KCJFbmRU
b1N0YXJ0IixuKTt2YXIgaT1vLnRleHQubGVuZ3RoO3JldHVybntzdGFydDppLGVuZDppK3J9fWZ1
bmN0aW9uIGkoZSl7dmFyIHQ9d2luZG93LmdldFNlbGVjdGlvbiYmd2luZG93LmdldFNlbGVjdGlv
bigpO2lmKCF0fHwwPT09dC5yYW5nZUNvdW50KXJldHVybiBudWxsO3ZhciBuPXQuYW5jaG9yTm9k
ZSxvPXQuYW5jaG9yT2Zmc2V0LGk9dC5mb2N1c05vZGUsYT10LmZvY3VzT2Zmc2V0LHM9dC5nZXRS
YW5nZUF0KDApO3RyeXtzLnN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlLHMuZW5kQ29udGFpbmVyLm5v
ZGVUeXBlfWNhdGNoKGUpe3JldHVybiBudWxsfXZhciB1PXIodC5hbmNob3JOb2RlLHQuYW5jaG9y
T2Zmc2V0LHQuZm9jdXNOb2RlLHQuZm9jdXNPZmZzZXQpLGw9dT8wOnMudG9TdHJpbmcoKS5sZW5n
dGgsYz1zLmNsb25lUmFuZ2UoKTtjLnNlbGVjdE5vZGVDb250ZW50cyhlKSxjLnNldEVuZChzLnN0
YXJ0Q29udGFpbmVyLHMuc3RhcnRPZmZzZXQpO3ZhciBwPXIoYy5zdGFydENvbnRhaW5lcixjLnN0
YXJ0T2Zmc2V0LGMuZW5kQ29udGFpbmVyLGMuZW5kT2Zmc2V0KSxkPXA/MDpjLnRvU3RyaW5nKCku
bGVuZ3RoLGY9ZCtsLGg9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtoLnNldFN0YXJ0KG4sbyksaC5z
ZXRFbmQoaSxhKTt2YXIgbT1oLmNvbGxhcHNlZDtyZXR1cm57c3RhcnQ6bT9mOmQsZW5kOm0/ZDpm
fX1mdW5jdGlvbiBhKGUsdCl7dmFyIG4scixvPWRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5n
ZSgpLmR1cGxpY2F0ZSgpO3ZvaWQgMD09PXQuZW5kPyhuPXQuc3RhcnQscj1uKTp0LnN0YXJ0PnQu
ZW5kPyhuPXQuZW5kLHI9dC5zdGFydCk6KG49dC5zdGFydCxyPXQuZW5kKSxvLm1vdmVUb0VsZW1l
bnRUZXh0KGUpLG8ubW92ZVN0YXJ0KCJjaGFyYWN0ZXIiLG4pLG8uc2V0RW5kUG9pbnQoIkVuZFRv
U3RhcnQiLG8pLG8ubW92ZUVuZCgiY2hhcmFjdGVyIixyLW4pLG8uc2VsZWN0KCl9ZnVuY3Rpb24g
cyhlLHQpe2lmKHdpbmRvdy5nZXRTZWxlY3Rpb24pe3ZhciBuPXdpbmRvdy5nZXRTZWxlY3Rpb24o
KSxyPWVbYygpXS5sZW5ndGgsbz1NYXRoLm1pbih0LnN0YXJ0LHIpLGk9dm9pZCAwPT09dC5lbmQ/
bzpNYXRoLm1pbih0LmVuZCxyKTtpZighbi5leHRlbmQmJm8+aSl7dmFyIGE9aTtpPW8sbz1hfXZh
ciBzPWwoZSxvKSx1PWwoZSxpKTtpZihzJiZ1KXt2YXIgcD1kb2N1bWVudC5jcmVhdGVSYW5nZSgp
O3Auc2V0U3RhcnQocy5ub2RlLHMub2Zmc2V0KSxuLnJlbW92ZUFsbFJhbmdlcygpLG8+aT8obi5h
ZGRSYW5nZShwKSxuLmV4dGVuZCh1Lm5vZGUsdS5vZmZzZXQpKToocC5zZXRFbmQodS5ub2RlLHUu
b2Zmc2V0KSxuLmFkZFJhbmdlKHApKX19fXZhciB1PWUoMTIzKSxsPWUoMTA1KSxjPWUoMTA2KSxw
PXUuY2FuVXNlRE9NJiYic2VsZWN0aW9uImluIGRvY3VtZW50JiYhKCJnZXRTZWxlY3Rpb24iaW4g
d2luZG93KSxkPXtnZXRPZmZzZXRzOnA/bzppLHNldE9mZnNldHM6cD9hOnN9O3QuZXhwb3J0cz1k
fSx7MTA1OjEwNSwxMDY6MTA2LDEyMzoxMjN9XSw0MjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3Ry
aWN0Ijt2YXIgcj1lKDExMiksbz1lKDE0MyksaT1lKDgpLGE9ZSg5KSxzPWUoMzMpLHU9ZSg5NSks
bD0oZSgxMzcpLGUoMTE4KSxmdW5jdGlvbihlKXt0aGlzLl9jdXJyZW50RWxlbWVudD1lLHRoaXMu
X3N0cmluZ1RleHQ9IiIrZSwKK3RoaXMuX2hvc3ROb2RlPW51bGwsdGhpcy5faG9zdFBhcmVudD1u
dWxsLHRoaXMuX2RvbUlEPTAsdGhpcy5fbW91bnRJbmRleD0wLHRoaXMuX2Nsb3NpbmdDb21tZW50
PW51bGwsdGhpcy5fY29tbWVudE5vZGVzPW51bGx9KTtvKGwucHJvdG90eXBlLHttb3VudENvbXBv
bmVudDpmdW5jdGlvbihlLHQsbixyKXt2YXIgbz1uLl9pZENvdW50ZXIrKyxpPSIgcmVhY3QtdGV4
dDogIitvKyIgIjtpZih0aGlzLl9kb21JRD1vLHRoaXMuX2hvc3RQYXJlbnQ9dCxlLnVzZUNyZWF0
ZUVsZW1lbnQpe3ZhciBsPW4uX293bmVyRG9jdW1lbnQsYz1sLmNyZWF0ZUNvbW1lbnQoaSkscD1s
LmNyZWF0ZUNvbW1lbnQoIiAvcmVhY3QtdGV4dCAiKSxkPWEobC5jcmVhdGVEb2N1bWVudEZyYWdt
ZW50KCkpO3JldHVybiBhLnF1ZXVlQ2hpbGQoZCxhKGMpKSx0aGlzLl9zdHJpbmdUZXh0JiZhLnF1
ZXVlQ2hpbGQoZCxhKGwuY3JlYXRlVGV4dE5vZGUodGhpcy5fc3RyaW5nVGV4dCkpKSxhLnF1ZXVl
Q2hpbGQoZCxhKHApKSxzLnByZWNhY2hlTm9kZSh0aGlzLGMpLHRoaXMuX2Nsb3NpbmdDb21tZW50
PXAsZH12YXIgZj11KHRoaXMuX3N0cmluZ1RleHQpO3JldHVybiBlLnJlbmRlclRvU3RhdGljTWFy
a3VwP2Y6IjwhLS0iK2krIi0tPiIrZisiPCEtLSAvcmVhY3QtdGV4dCAtLT4ifSxyZWNlaXZlQ29t
cG9uZW50OmZ1bmN0aW9uKGUsdCl7aWYoZSE9PXRoaXMuX2N1cnJlbnRFbGVtZW50KXt0aGlzLl9j
dXJyZW50RWxlbWVudD1lO3ZhciBuPSIiK2U7aWYobiE9PXRoaXMuX3N0cmluZ1RleHQpe3RoaXMu
X3N0cmluZ1RleHQ9bjt2YXIgcj10aGlzLmdldEhvc3ROb2RlKCk7aS5yZXBsYWNlRGVsaW1pdGVk
VGV4dChyWzBdLHJbMV0sbil9fX0sZ2V0SG9zdE5vZGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9j
b21tZW50Tm9kZXM7aWYoZSlyZXR1cm4gZTtpZighdGhpcy5fY2xvc2luZ0NvbW1lbnQpZm9yKHZh
ciB0PXMuZ2V0Tm9kZUZyb21JbnN0YW5jZSh0aGlzKSxuPXQubmV4dFNpYmxpbmc7Oyl7aWYobnVs
bD09biYmcigiNjciLHRoaXMuX2RvbUlEKSw4PT09bi5ub2RlVHlwZSYmIiAvcmVhY3QtdGV4dCAi
PT09bi5ub2RlVmFsdWUpe3RoaXMuX2Nsb3NpbmdDb21tZW50PW47YnJlYWt9bj1uLm5leHRTaWJs
aW5nfXJldHVybiBlPVt0aGlzLl9ob3N0Tm9kZSx0aGlzLl9jbG9zaW5nQ29tbWVudF0sdGhpcy5f
Y29tbWVudE5vZGVzPWUsZX0sdW5tb3VudENvbXBvbmVudDpmdW5jdGlvbigpe3RoaXMuX2Nsb3Np
bmdDb21tZW50PW51bGwsdGhpcy5fY29tbWVudE5vZGVzPW51bGwscy51bmNhY2hlTm9kZSh0aGlz
KX19KSx0LmV4cG9ydHM9bH0sezExMjoxMTIsMTE4OjExOCwxMzc6MTM3LDE0MzoxNDMsMzM6MzMs
ODo4LDk6OSw5NTo5NX1dLDQzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9u
IHIoKXt0aGlzLl9yb290Tm9kZUlEJiZjLnVwZGF0ZVdyYXBwZXIodGhpcyl9ZnVuY3Rpb24gbyhl
KXt2YXIgdD10aGlzLl9jdXJyZW50RWxlbWVudC5wcm9wcyxuPXMuZXhlY3V0ZU9uQ2hhbmdlKHQs
ZSk7cmV0dXJuIGwuYXNhcChyLHRoaXMpLG59dmFyIGk9ZSgxMTIpLGE9ZSgxNDMpLHM9ZSgyMyks
dT1lKDMzKSxsPWUoNzEpLGM9KGUoMTM3KSxlKDE0Mikse2dldEhvc3RQcm9wczpmdW5jdGlvbihl
LHQpe3JldHVybiBudWxsIT10LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MJiZpKCI5MSIpLGEoe30s
dCx7dmFsdWU6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsY2hpbGRyZW46IiIrZS5fd3JhcHBl
clN0YXRlLmluaXRpYWxWYWx1ZSxvbkNoYW5nZTplLl93cmFwcGVyU3RhdGUub25DaGFuZ2V9KX0s
bW91bnRXcmFwcGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49cy5nZXRWYWx1ZSh0KSxyPW47aWYobnVs
bD09bil7dmFyIGE9dC5kZWZhdWx0VmFsdWUsdT10LmNoaWxkcmVuO251bGwhPXUmJihudWxsIT1h
JiZpKCI5MiIpLEFycmF5LmlzQXJyYXkodSkmJih1Lmxlbmd0aDw9MXx8aSgiOTMiKSx1PXVbMF0p
LGE9IiIrdSksbnVsbD09YSYmKGE9IiIpLHI9YX1lLl93cmFwcGVyU3RhdGU9e2luaXRpYWxWYWx1
ZToiIityLGxpc3RlbmVyczpudWxsLG9uQ2hhbmdlOm8uYmluZChlKX19LHVwZGF0ZVdyYXBwZXI6
ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fY3VycmVudEVsZW1lbnQucHJvcHMsbj11LmdldE5vZGVGcm9t
SW5zdGFuY2UoZSkscj1zLmdldFZhbHVlKHQpO2lmKG51bGwhPXIpe3ZhciBvPSIiK3I7byE9PW4u
dmFsdWUmJihuLnZhbHVlPW8pLG51bGw9PXQuZGVmYXVsdFZhbHVlJiYobi5kZWZhdWx0VmFsdWU9
byl9bnVsbCE9dC5kZWZhdWx0VmFsdWUmJihuLmRlZmF1bHRWYWx1ZT10LmRlZmF1bHRWYWx1ZSl9
LHBvc3RNb3VudFdyYXBwZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dS5nZXROb2RlRnJvbUluc3RhbmNl
KGUpLG49dC50ZXh0Q29udGVudDtuPT09ZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSYmKHQu
dmFsdWU9bil9fSk7dC5leHBvcnRzPWN9LHsxMTI6MTEyLDEzNzoxMzcsMTQyOjE0MiwxNDM6MTQz
LDIzOjIzLDMzOjMzLDcxOjcxfV0sNDQ6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVu
Y3Rpb24gcihlLHQpeyJfaG9zdE5vZGUiaW4gZXx8dSgiMzMiKSwiX2hvc3ROb2RlImluIHR8fHUo
IjMzIik7Zm9yKHZhciBuPTAscj1lO3I7cj1yLl9ob3N0UGFyZW50KW4rKztmb3IodmFyIG89MCxp
PXQ7aTtpPWkuX2hvc3RQYXJlbnQpbysrO2Zvcig7bi1vPjA7KWU9ZS5faG9zdFBhcmVudCxuLS07
Zm9yKDtvLW4+MDspdD10Ll9ob3N0UGFyZW50LG8tLTtmb3IodmFyIGE9bjthLS07KXtpZihlPT09
dClyZXR1cm4gZTtlPWUuX2hvc3RQYXJlbnQsdD10Ll9ob3N0UGFyZW50fXJldHVybiBudWxsfWZ1
bmN0aW9uIG8oZSx0KXsiX2hvc3ROb2RlImluIGV8fHUoIjM1IiksIl9ob3N0Tm9kZSJpbiB0fHx1
KCIzNSIpO2Zvcig7dDspe2lmKHQ9PT1lKXJldHVybiEwO3Q9dC5faG9zdFBhcmVudH1yZXR1cm4h
MX1mdW5jdGlvbiBpKGUpe3JldHVybiJfaG9zdE5vZGUiaW4gZXx8dSgiMzYiKSxlLl9ob3N0UGFy
ZW50fWZ1bmN0aW9uIGEoZSx0LG4pe2Zvcih2YXIgcj1bXTtlOylyLnB1c2goZSksZT1lLl9ob3N0
UGFyZW50O3ZhciBvO2ZvcihvPXIubGVuZ3RoO28tLSA+MDspdChyW29dLCJjYXB0dXJlZCIsbik7
Zm9yKG89MDtvPHIubGVuZ3RoO28rKyl0KHJbb10sImJ1YmJsZWQiLG4pfWZ1bmN0aW9uIHMoZSx0
LG4sbyxpKXtmb3IodmFyIGE9ZSYmdD9yKGUsdCk6bnVsbCxzPVtdO2UmJmUhPT1hOylzLnB1c2go
ZSksZT1lLl9ob3N0UGFyZW50O2Zvcih2YXIgdT1bXTt0JiZ0IT09YTspdS5wdXNoKHQpLHQ9dC5f
aG9zdFBhcmVudDt2YXIgbDtmb3IobD0wO2w8cy5sZW5ndGg7bCsrKW4oc1tsXSwiYnViYmxlZCIs
byk7Zm9yKGw9dS5sZW5ndGg7bC0tID4wOyluKHVbbF0sImNhcHR1cmVkIixpKX12YXIgdT1lKDEx
Mik7ZSgxMzcpO3QuZXhwb3J0cz17aXNBbmNlc3RvcjpvLGdldExvd2VzdENvbW1vbkFuY2VzdG9y
OnIsZ2V0UGFyZW50SW5zdGFuY2U6aSx0cmF2ZXJzZVR3b1BoYXNlOmEsdHJhdmVyc2VFbnRlckxl
YXZlOnN9fSx7MTEyOjExMiwxMzc6MTM3fV0sNDU6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmlj
dCI7dmFyIHI9ZSgxMjApLG89ZSgzMCksaT1vO3IuYWRkb25zJiYoci5fX1NFQ1JFVF9JTkpFQ1RF
RF9SRUFDVF9ET01fRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRD1pKSx0LmV4cG9ydHM9
aX0sezEyMDoxMjAsMzA6MzB9XSw0NjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5j
dGlvbiByKCl7dGhpcy5yZWluaXRpYWxpemVUcmFuc2FjdGlvbigpfXZhciBvPWUoMTQzKSxpPWUo
NzEpLGE9ZSg4OSkscz1lKDEyOSksdT17aW5pdGlhbGl6ZTpzLGNsb3NlOmZ1bmN0aW9uKCl7ZC5p
c0JhdGNoaW5nVXBkYXRlcz0hMX19LGw9e2luaXRpYWxpemU6cyxjbG9zZTppLmZsdXNoQmF0Y2hl
ZFVwZGF0ZXMuYmluZChpKX0sYz1bbCx1XTtvKHIucHJvdG90eXBlLGEse2dldFRyYW5zYWN0aW9u
V3JhcHBlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gY319KTt2YXIgcD1uZXcgcixkPXtpc0JhdGNoaW5n
VXBkYXRlczohMSxiYXRjaGVkVXBkYXRlczpmdW5jdGlvbihlLHQsbixyLG8saSl7dmFyIGE9ZC5p
c0JhdGNoaW5nVXBkYXRlcztyZXR1cm4gZC5pc0JhdGNoaW5nVXBkYXRlcz0hMCxhP2UodCxuLHIs
byxpKTpwLnBlcmZvcm0oZSxudWxsLHQsbixyLG8saSl9fTt0LmV4cG9ydHM9ZH0sezEyOToxMjks
MTQzOjE0Myw3MTo3MSw4OTo4OX1dLDQ3OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1
bmN0aW9uIHIoKXt4fHwoeD0hMCx5LkV2ZW50RW1pdHRlci5pbmplY3RSZWFjdEV2ZW50TGlzdGVu
ZXIoZykseS5FdmVudFBsdWdpbkh1Yi5pbmplY3RFdmVudFBsdWdpbk9yZGVyKHMpLHkuRXZlbnRQ
bHVnaW5VdGlscy5pbmplY3RDb21wb25lbnRUcmVlKGQpLHkuRXZlbnRQbHVnaW5VdGlscy5pbmpl
Y3RUcmVlVHJhdmVyc2FsKGgpLHkuRXZlbnRQbHVnaW5IdWIuaW5qZWN0RXZlbnRQbHVnaW5zQnlO
YW1lKHtTaW1wbGVFdmVudFBsdWdpbjpFLEVudGVyTGVhdmVFdmVudFBsdWdpbjp1LENoYW5nZUV2
ZW50UGx1Z2luOmEsU2VsZWN0RXZlbnRQbHVnaW46YixCZWZvcmVJbnB1dEV2ZW50UGx1Z2luOml9
KSx5Lkhvc3RDb21wb25lbnQuaW5qZWN0R2VuZXJpY0NvbXBvbmVudENsYXNzKHApLHkuSG9zdENv
bXBvbmVudC5pbmplY3RUZXh0Q29tcG9uZW50Q2xhc3MobSkseS5ET01Qcm9wZXJ0eS5pbmplY3RE
T01Qcm9wZXJ0eUNvbmZpZyhvKSx5LkRPTVByb3BlcnR5LmluamVjdERPTVByb3BlcnR5Q29uZmln
KGwpLHkuRE9NUHJvcGVydHkuaW5qZWN0RE9NUHJvcGVydHlDb25maWcoQykseS5FbXB0eUNvbXBv
bmVudC5pbmplY3RFbXB0eUNvbXBvbmVudEZhY3RvcnkoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBm
KGUpfSkseS5VcGRhdGVzLmluamVjdFJlY29uY2lsZVRyYW5zYWN0aW9uKF8pLHkuVXBkYXRlcy5p
bmplY3RCYXRjaGluZ1N0cmF0ZWd5KHYpLHkuQ29tcG9uZW50LmluamVjdEVudmlyb25tZW50KGMp
KX12YXIgbz1lKDEpLGk9ZSgzKSxhPWUoNykscz1lKDE0KSx1PWUoMTUpLGw9ZSgyMSksYz1lKDI3
KSxwPWUoMzEpLGQ9ZSgzMyksZj1lKDM1KSxoPWUoNDQpLG09ZSg0Miksdj1lKDQ2KSxnPWUoNTIp
LHk9ZSg1NSksXz1lKDY1KSxDPWUoNzMpLGI9ZSg3NCksRT1lKDc1KSx4PSExO3QuZXhwb3J0cz17
aW5qZWN0OnJ9fSx7MToxLDE0OjE0LDE1OjE1LDIxOjIxLDI3OjI3LDM6MywzMTozMSwzMzozMywz
NTozNSw0Mjo0Miw0NDo0NCw0Njo0Niw1Mjo1Miw1NTo1NSw2NTo2NSw3OjcsNzM6NzMsNzQ6NzQs
NzU6NzV9XSw0ODpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj0iZnVuY3Rpb24i
PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50Iil8
fDYwMTAzO3QuZXhwb3J0cz1yfSx7fV0sNDk6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7
dmFyIHIsbz17aW5qZWN0RW1wdHlDb21wb25lbnRGYWN0b3J5OmZ1bmN0aW9uKGUpe3I9ZX19LGk9
e2NyZWF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gcihlKX19O2kuaW5qZWN0aW9uPW8sdC5leHBvcnRz
PWl9LHt9XSw1MDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxu
KXt0cnl7dChuKX1jYXRjaChlKXtudWxsPT09byYmKG89ZSl9fXZhciBvPW51bGwsaT17aW52b2tl
R3VhcmRlZENhbGxiYWNrOnIsaW52b2tlR3VhcmRlZENhbGxiYWNrV2l0aENhdGNoOnIscmV0aHJv
d0NhdWdodEVycm9yOmZ1bmN0aW9uKCl7aWYobyl7dmFyIGU9bzt0aHJvdyBvPW51bGwsZX19fTt0
LmV4cG9ydHM9aX0se31dLDUxOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9u
IHIoZSl7by5lbnF1ZXVlRXZlbnRzKGUpLG8ucHJvY2Vzc0V2ZW50UXVldWUoITEpfXZhciBvPWUo
MTYpLGk9e2hhbmRsZVRvcExldmVsOmZ1bmN0aW9uKGUsdCxuLGkpe3Ioby5leHRyYWN0RXZlbnRz
KGUsdCxuLGkpKX19O3QuZXhwb3J0cz1pfSx7MTY6MTZ9XSw1MjpbZnVuY3Rpb24oZSx0LG4peyJ1
c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2Zvcig7ZS5faG9zdFBhcmVudDspZT1lLl9ob3N0UGFy
ZW50O3ZhciB0PXAuZ2V0Tm9kZUZyb21JbnN0YW5jZShlKSxuPXQucGFyZW50Tm9kZTtyZXR1cm4g
cC5nZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShuKX1mdW5jdGlvbiBvKGUsdCl7dGhpcy50b3BM
ZXZlbFR5cGU9ZSx0aGlzLm5hdGl2ZUV2ZW50PXQsdGhpcy5hbmNlc3RvcnM9W119ZnVuY3Rpb24g
aShlKXt2YXIgdD1mKGUubmF0aXZlRXZlbnQpLG49cC5nZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9k
ZSh0KSxvPW47ZG97ZS5hbmNlc3RvcnMucHVzaChvKSxvPW8mJnIobyl9d2hpbGUobyk7Zm9yKHZh
ciBpPTA7aTxlLmFuY2VzdG9ycy5sZW5ndGg7aSsrKW49ZS5hbmNlc3RvcnNbaV0sbS5faGFuZGxl
VG9wTGV2ZWwoZS50b3BMZXZlbFR5cGUsbixlLm5hdGl2ZUV2ZW50LGYoZS5uYXRpdmVFdmVudCkp
fWZ1bmN0aW9uIGEoZSl7ZShoKHdpbmRvdykpfXZhciBzPWUoMTQzKSx1PWUoMTIyKSxsPWUoMTIz
KSxjPWUoMjQpLHA9ZSgzMyksZD1lKDcxKSxmPWUoMTAyKSxoPWUoMTM0KTtzKG8ucHJvdG90eXBl
LHtkZXN0cnVjdG9yOmZ1bmN0aW9uKCl7dGhpcy50b3BMZXZlbFR5cGU9bnVsbCx0aGlzLm5hdGl2
ZUV2ZW50PW51bGwsdGhpcy5hbmNlc3RvcnMubGVuZ3RoPTB9fSksYy5hZGRQb29saW5nVG8obyxj
LnR3b0FyZ3VtZW50UG9vbGVyKTt2YXIgbT17X2VuYWJsZWQ6ITAsX2hhbmRsZVRvcExldmVsOm51
bGwsV0lORE9XX0hBTkRMRTpsLmNhblVzZURPTT93aW5kb3c6bnVsbCxzZXRIYW5kbGVUb3BMZXZl
bDpmdW5jdGlvbihlKXttLl9oYW5kbGVUb3BMZXZlbD1lfSxzZXRFbmFibGVkOmZ1bmN0aW9uKGUp
e20uX2VuYWJsZWQ9ISFlfSxpc0VuYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS5fZW5hYmxlZH0s
dHJhcEJ1YmJsZWRFdmVudDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIG4/dS5saXN0ZW4obix0LG0u
ZGlzcGF0Y2hFdmVudC5iaW5kKG51bGwsZSkpOm51bGx9LHRyYXBDYXB0dXJlZEV2ZW50OmZ1bmN0
aW9uKGUsdCxuKXtyZXR1cm4gbj91LmNhcHR1cmUobix0LG0uZGlzcGF0Y2hFdmVudC5iaW5kKG51
bGwsZSkpOm51bGx9LG1vbml0b3JTY3JvbGxWYWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hLmJpbmQo
bnVsbCxlKTt1Lmxpc3Rlbih3aW5kb3csInNjcm9sbCIsdCl9LGRpc3BhdGNoRXZlbnQ6ZnVuY3Rp
b24oZSx0KXtpZihtLl9lbmFibGVkKXt2YXIgbj1vLmdldFBvb2xlZChlLHQpO3RyeXtkLmJhdGNo
ZWRVcGRhdGVzKGksbil9ZmluYWxseXtvLnJlbGVhc2Uobil9fX19O3QuZXhwb3J0cz1tfSx7MTAy
OjEwMiwxMjI6MTIyLDEyMzoxMjMsMTM0OjEzNCwxNDM6MTQzLDI0OjI0LDMzOjMzLDcxOjcxfV0s
NTM6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9e2xvZ1RvcExldmVsUmVuZGVy
czohMX07dC5leHBvcnRzPXJ9LHt9XSw1NDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijtm
dW5jdGlvbiByKGUpe3JldHVybiBzfHxhKCIxMTEiLGUudHlwZSksbmV3IHMoZSl9ZnVuY3Rpb24g
byhlKXtyZXR1cm4gbmV3IHUoZSl9ZnVuY3Rpb24gaShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHV9
dmFyIGE9ZSgxMTIpLHM9KGUoMTM3KSxudWxsKSx1PW51bGwsbD17aW5qZWN0R2VuZXJpY0NvbXBv
bmVudENsYXNzOmZ1bmN0aW9uKGUpe3M9ZX0saW5qZWN0VGV4dENvbXBvbmVudENsYXNzOmZ1bmN0
aW9uKGUpe3U9ZX19LGM9e2NyZWF0ZUludGVybmFsQ29tcG9uZW50OnIsY3JlYXRlSW5zdGFuY2VG
b3JUZXh0Om8saXNUZXh0Q29tcG9uZW50OmksaW5qZWN0aW9uOmx9O3QuZXhwb3J0cz1jfSx7MTEy
OjExMiwxMzc6MTM3fV0sNTU6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgx
MSksbz1lKDE2KSxpPWUoMTgpLGE9ZSgyOCkscz1lKDQ5KSx1PWUoMjUpLGw9ZSg1NCksYz1lKDcx
KSxwPXtDb21wb25lbnQ6YS5pbmplY3Rpb24sRE9NUHJvcGVydHk6ci5pbmplY3Rpb24sRW1wdHlD
b21wb25lbnQ6cy5pbmplY3Rpb24sRXZlbnRQbHVnaW5IdWI6by5pbmplY3Rpb24sRXZlbnRQbHVn
aW5VdGlsczppLmluamVjdGlvbixFdmVudEVtaXR0ZXI6dS5pbmplY3Rpb24sSG9zdENvbXBvbmVu
dDpsLmluamVjdGlvbixVcGRhdGVzOmMuaW5qZWN0aW9ufTt0LmV4cG9ydHM9cH0sezExOjExLDE2
OjE2LDE4OjE4LDI1OjI1LDI4OjI4LDQ5OjQ5LDU0OjU0LDcxOjcxfV0sNTY6W2Z1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gaShkb2N1bWVudC5kb2N1bWVu
dEVsZW1lbnQsZSl9dmFyIG89ZSg0MSksaT1lKDEyNiksYT1lKDEzMSkscz1lKDEzMiksdT17aGFz
U2VsZWN0aW9uQ2FwYWJpbGl0aWVzOmZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUubm9kZU5hbWUmJmUu
bm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gdCYmKCJpbnB1dCI9PT10JiYidGV4dCI9PT1l
LnR5cGV8fCJ0ZXh0YXJlYSI9PT10fHwidHJ1ZSI9PT1lLmNvbnRlbnRFZGl0YWJsZSl9LGdldFNl
bGVjdGlvbkluZm9ybWF0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9cygpO3JldHVybntmb2N1c2VkRWxl
bTplLHNlbGVjdGlvblJhbmdlOnUuaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKGUpP3UuZ2V0U2Vs
ZWN0aW9uKGUpOm51bGx9fSxyZXN0b3JlU2VsZWN0aW9uOmZ1bmN0aW9uKGUpe3ZhciB0PXMoKSxu
PWUuZm9jdXNlZEVsZW0sbz1lLnNlbGVjdGlvblJhbmdlO3QhPT1uJiZyKG4pJiYodS5oYXNTZWxl
Y3Rpb25DYXBhYmlsaXRpZXMobikmJnUuc2V0U2VsZWN0aW9uKG4sbyksYShuKSl9LGdldFNlbGVj
dGlvbjpmdW5jdGlvbihlKXt2YXIgdDtpZigic2VsZWN0aW9uU3RhcnQiaW4gZSl0PXtzdGFydDpl
LnNlbGVjdGlvblN0YXJ0LGVuZDplLnNlbGVjdGlvbkVuZH07ZWxzZSBpZihkb2N1bWVudC5zZWxl
Y3Rpb24mJmUubm9kZU5hbWUmJiJpbnB1dCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpe3Zh
ciBuPWRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpO24ucGFyZW50RWxlbWVudCgpPT09
ZSYmKHQ9e3N0YXJ0Oi1uLm1vdmVTdGFydCgiY2hhcmFjdGVyIiwtZS52YWx1ZS5sZW5ndGgpLGVu
ZDotbi5tb3ZlRW5kKCJjaGFyYWN0ZXIiLC1lLnZhbHVlLmxlbmd0aCl9KX1lbHNlIHQ9by5nZXRP
ZmZzZXRzKGUpO3JldHVybiB0fHx7c3RhcnQ6MCxlbmQ6MH19LHNldFNlbGVjdGlvbjpmdW5jdGlv
bihlLHQpe3ZhciBuPXQuc3RhcnQscj10LmVuZDtpZih2b2lkIDA9PT1yJiYocj1uKSwic2VsZWN0
aW9uU3RhcnQiaW4gZSllLnNlbGVjdGlvblN0YXJ0PW4sZS5zZWxlY3Rpb25FbmQ9TWF0aC5taW4o
cixlLnZhbHVlLmxlbmd0aCk7ZWxzZSBpZihkb2N1bWVudC5zZWxlY3Rpb24mJmUubm9kZU5hbWUm
JiJpbnB1dCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpe3ZhciBpPWUuY3JlYXRlVGV4dFJh
bmdlKCk7aS5jb2xsYXBzZSghMCksaS5tb3ZlU3RhcnQoImNoYXJhY3RlciIsbiksaS5tb3ZlRW5k
KCJjaGFyYWN0ZXIiLHItbiksaS5zZWxlY3QoKX1lbHNlIG8uc2V0T2Zmc2V0cyhlLHQpfX07dC5l
eHBvcnRzPXV9LHsxMjY6MTI2LDEzMToxMzEsMTMyOjEzMiw0MTo0MX1dLDU3OltmdW5jdGlvbihl
LHQsbil7InVzZSBzdHJpY3QiO3ZhciByPXtyZW1vdmU6ZnVuY3Rpb24oZSl7ZS5fcmVhY3RJbnRl
cm5hbEluc3RhbmNlPXZvaWQgMH0sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiBlLl9yZWFjdEludGVy
bmFsSW5zdGFuY2V9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZS5fcmVhY3RJbnRl
cm5hbEluc3RhbmNlfSxzZXQ6ZnVuY3Rpb24oZSx0KXtlLl9yZWFjdEludGVybmFsSW5zdGFuY2U9
dH19O3QuZXhwb3J0cz1yfSx7fV0sNTg6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5l
eHBvcnRzPXtkZWJ1Z1Rvb2w6bnVsbH19LHt9XSw1OTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3Ry
aWN0Ijt2YXIgcj1lKDkyKSxvPS9ePFwhXC1cLS8saT17Q0hFQ0tTVU1fQVRUUl9OQU1FOiJkYXRh
LXJlYWN0LWNoZWNrc3VtIixhZGRDaGVja3N1bVRvTWFya3VwOmZ1bmN0aW9uKGUpe3ZhciB0PXIo
ZSk7cmV0dXJuIG8udGVzdChlKT9lOmUucmVwbGFjZSgvXC8/Pi8sIiAiK2kuQ0hFQ0tTVU1fQVRU
Ul9OQU1FKyc9IicrdCsnIiQmJyl9LGNhblJldXNlTWFya3VwOmZ1bmN0aW9uKGUsdCl7dmFyIG49
dC5nZXRBdHRyaWJ1dGUoaS5DSEVDS1NVTV9BVFRSX05BTUUpO3JldHVybiBuPW4mJnBhcnNlSW50
KG4sMTApLHIoZSk9PT1ufX07dC5leHBvcnRzPWl9LHs5Mjo5Mn1dLDYwOltmdW5jdGlvbihlLHQs
bil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49TWF0aC5taW4oZS5sZW5n
dGgsdC5sZW5ndGgpLHI9MDtyPG47cisrKWlmKGUuY2hhckF0KHIpIT09dC5jaGFyQXQocikpcmV0
dXJuIHI7cmV0dXJuIGUubGVuZ3RoPT09dC5sZW5ndGg/LTE6bn1mdW5jdGlvbiBvKGUpe3JldHVy
biBlP2Uubm9kZVR5cGU9PT1BP2UuZG9jdW1lbnRFbGVtZW50OmUuZmlyc3RDaGlsZDpudWxsfWZ1
bmN0aW9uIGkoZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlJiZlLmdldEF0dHJpYnV0ZShJKXx8IiJ9
ZnVuY3Rpb24gYShlLHQsbixyLG8pe3ZhciBpO2lmKGIubG9nVG9wTGV2ZWxSZW5kZXJzKXt2YXIg
YT1lLl9jdXJyZW50RWxlbWVudC5wcm9wcy5jaGlsZCxzPWEudHlwZTtpPSJSZWFjdCBtb3VudDog
IisoInN0cmluZyI9PXR5cGVvZiBzP3M6cy5kaXNwbGF5TmFtZXx8cy5uYW1lKSxjb25zb2xlLnRp
bWUoaSl9dmFyIHU9dy5tb3VudENvbXBvbmVudChlLG4sbnVsbCxfKGUsdCksbywwKTtpJiZjb25z
b2xlLnRpbWVFbmQoaSksZS5fcmVuZGVyZWRDb21wb25lbnQuX3RvcExldmVsV3JhcHBlcj1lLGou
X21vdW50SW1hZ2VJbnRvTm9kZSh1LHQsZSxyLG4pfWZ1bmN0aW9uIHMoZSx0LG4scil7dmFyIG89
ay5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uLmdldFBvb2xlZCghbiYmQy51c2VDcmVhdGVFbGVt
ZW50KTtvLnBlcmZvcm0oYSxudWxsLGUsdCxvLG4sciksay5SZWFjdFJlY29uY2lsZVRyYW5zYWN0
aW9uLnJlbGVhc2Uobyl9ZnVuY3Rpb24gdShlLHQsbil7Zm9yKHcudW5tb3VudENvbXBvbmVudChl
LG4pLHQubm9kZVR5cGU9PT1BJiYodD10LmRvY3VtZW50RWxlbWVudCk7dC5sYXN0Q2hpbGQ7KXQu
cmVtb3ZlQ2hpbGQodC5sYXN0Q2hpbGQpfWZ1bmN0aW9uIGwoZSl7dmFyIHQ9byhlKTtpZih0KXt2
YXIgbj15LmdldEluc3RhbmNlRnJvbU5vZGUodCk7cmV0dXJuISghbnx8IW4uX2hvc3RQYXJlbnQp
fX1mdW5jdGlvbiBjKGUpe3JldHVybiEoIWV8fGUubm9kZVR5cGUhPT1SJiZlLm5vZGVUeXBlIT09
QSYmZS5ub2RlVHlwZSE9PUQpfWZ1bmN0aW9uIHAoZSl7dmFyIHQ9byhlKSxuPXQmJnkuZ2V0SW5z
dGFuY2VGcm9tTm9kZSh0KTtyZXR1cm4gbiYmIW4uX2hvc3RQYXJlbnQ/bjpudWxsfWZ1bmN0aW9u
IGQoZSl7dmFyIHQ9cChlKTtyZXR1cm4gdD90Ll9ob3N0Q29udGFpbmVySW5mby5fdG9wTGV2ZWxX
cmFwcGVyOm51bGx9dmFyIGY9ZSgxMTIpLGg9ZSg5KSxtPWUoMTEpLHY9ZSgxMjApLGc9ZSgyNSks
eT0oZSgxMTkpLGUoMzMpKSxfPWUoMzQpLEM9ZSgzNiksYj1lKDUzKSxFPWUoNTcpLHg9KGUoNTgp
LGUoNTkpKSx3PWUoNjYpLFQ9ZSg3MCksaz1lKDcxKSxQPWUoMTMwKSxTPWUoMTA4KSxOPShlKDEz
NyksZSgxMTQpKSxNPWUoMTE2KSxJPShlKDE0MiksbS5JRF9BVFRSSUJVVEVfTkFNRSksTz1tLlJP
T1RfQVRUUklCVVRFX05BTUUsUj0xLEE9OSxEPTExLEw9e30sVT0xLEY9ZnVuY3Rpb24oKXt0aGlz
LnJvb3RJRD1VKyt9O0YucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e30sRi5wcm90b3R5cGUu
cmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcHMuY2hpbGR9LEYuaXNSZWFjdFRvcExl
dmVsV3JhcHBlcj0hMDt2YXIgaj17VG9wTGV2ZWxXcmFwcGVyOkYsX2luc3RhbmNlc0J5UmVhY3RS
b290SUQ6TCxzY3JvbGxNb25pdG9yOmZ1bmN0aW9uKGUsdCl7dCgpfSxfdXBkYXRlUm9vdENvbXBv
bmVudDpmdW5jdGlvbihlLHQsbixyLG8pe3JldHVybiBqLnNjcm9sbE1vbml0b3IocixmdW5jdGlv
bigpe1QuZW5xdWV1ZUVsZW1lbnRJbnRlcm5hbChlLHQsbiksbyYmVC5lbnF1ZXVlQ2FsbGJhY2tJ
bnRlcm5hbChlLG8pfSksZX0sX3JlbmRlck5ld1Jvb3RDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4s
cil7Yyh0KXx8ZigiMzciKSxnLmVuc3VyZVNjcm9sbFZhbHVlTW9uaXRvcmluZygpO3ZhciBvPVMo
ZSwhMSk7ay5iYXRjaGVkVXBkYXRlcyhzLG8sdCxuLHIpO3ZhciBpPW8uX2luc3RhbmNlLnJvb3RJ
RDtyZXR1cm4gTFtpXT1vLG99LHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyOmZ1bmN0aW9uKGUs
dCxuLHIpe3JldHVybiBudWxsIT1lJiZFLmhhcyhlKXx8ZigiMzgiKSxqLl9yZW5kZXJTdWJ0cmVl
SW50b0NvbnRhaW5lcihlLHQsbixyKX0sX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyOmZ1bmN0
aW9uKGUsdCxuLHIpe1QudmFsaWRhdGVDYWxsYmFjayhyLCJSZWFjdERPTS5yZW5kZXIiKSx2Lmlz
VmFsaWRFbGVtZW50KHQpfHxmKCIzOSIsInN0cmluZyI9PXR5cGVvZiB0PyIgSW5zdGVhZCBvZiBw
YXNzaW5nIGEgc3RyaW5nIGxpa2UgJ2RpdicsIHBhc3MgUmVhY3QuY3JlYXRlRWxlbWVudCgnZGl2
Jykgb3IgPGRpdiAvPi4iOiJmdW5jdGlvbiI9PXR5cGVvZiB0PyIgSW5zdGVhZCBvZiBwYXNzaW5n
IGEgY2xhc3MgbGlrZSBGb28sIHBhc3MgUmVhY3QuY3JlYXRlRWxlbWVudChGb28pIG9yIDxGb28g
Lz4uIjpudWxsIT10JiZ2b2lkIDAhPT10LnByb3BzPyIgVGhpcyBtYXkgYmUgY2F1c2VkIGJ5IHVu
aW50ZW50aW9uYWxseSBsb2FkaW5nIHR3byBpbmRlcGVuZGVudCBjb3BpZXMgb2YgUmVhY3QuIjoi
Iik7dmFyIGEscz12LmNyZWF0ZUVsZW1lbnQoRix7Y2hpbGQ6dH0pO2lmKGUpe3ZhciB1PUUuZ2V0
KGUpO2E9dS5fcHJvY2Vzc0NoaWxkQ29udGV4dCh1Ll9jb250ZXh0KX1lbHNlIGE9UDt2YXIgYz1k
KG4pO2lmKGMpe3ZhciBwPWMuX2N1cnJlbnRFbGVtZW50LGg9cC5wcm9wcy5jaGlsZDtpZihNKGgs
dCkpe3ZhciBtPWMuX3JlbmRlcmVkQ29tcG9uZW50LmdldFB1YmxpY0luc3RhbmNlKCksZz1yJiZm
dW5jdGlvbigpe3IuY2FsbChtKX07cmV0dXJuIGouX3VwZGF0ZVJvb3RDb21wb25lbnQoYyxzLGEs
bixnKSxtfWoudW5tb3VudENvbXBvbmVudEF0Tm9kZShuKX12YXIgeT1vKG4pLF89eSYmISFpKHkp
LEM9bChuKSxiPV8mJiFjJiYhQyx4PWouX3JlbmRlck5ld1Jvb3RDb21wb25lbnQocyxuLGIsYSku
X3JlbmRlcmVkQ29tcG9uZW50LmdldFB1YmxpY0luc3RhbmNlKCk7cmV0dXJuIHImJnIuY2FsbCh4
KSx4fSxyZW5kZXI6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBqLl9yZW5kZXJTdWJ0cmVlSW50b0Nv
bnRhaW5lcihudWxsLGUsdCxuKX0sdW5tb3VudENvbXBvbmVudEF0Tm9kZTpmdW5jdGlvbihlKXtj
KGUpfHxmKCI0MCIpO3ZhciB0PWQoZSk7cmV0dXJuIHQ/KGRlbGV0ZSBMW3QuX2luc3RhbmNlLnJv
b3RJRF0say5iYXRjaGVkVXBkYXRlcyh1LHQsZSwhMSksITApOihsKGUpLDE9PT1lLm5vZGVUeXBl
JiZlLmhhc0F0dHJpYnV0ZShPKSwhMSl9LF9tb3VudEltYWdlSW50b05vZGU6ZnVuY3Rpb24oZSx0
LG4saSxhKXtpZihjKHQpfHxmKCI0MSIpLGkpe3ZhciBzPW8odCk7aWYoeC5jYW5SZXVzZU1hcmt1
cChlLHMpKXJldHVybiB2b2lkIHkucHJlY2FjaGVOb2RlKG4scyk7dmFyIHU9cy5nZXRBdHRyaWJ1
dGUoeC5DSEVDS1NVTV9BVFRSX05BTUUpO3MucmVtb3ZlQXR0cmlidXRlKHguQ0hFQ0tTVU1fQVRU
Ul9OQU1FKTt2YXIgbD1zLm91dGVySFRNTDtzLnNldEF0dHJpYnV0ZSh4LkNIRUNLU1VNX0FUVFJf
TkFNRSx1KTt2YXIgcD1lLGQ9cihwLGwpLG09IiAoY2xpZW50KSAiK3Auc3Vic3RyaW5nKGQtMjAs
ZCsyMCkrIlxuIChzZXJ2ZXIpICIrbC5zdWJzdHJpbmcoZC0yMCxkKzIwKTt0Lm5vZGVUeXBlPT09
QSYmZigiNDIiLG0pfWlmKHQubm9kZVR5cGU9PT1BJiZmKCI0MyIpLGEudXNlQ3JlYXRlRWxlbWVu
dCl7Zm9yKDt0Lmxhc3RDaGlsZDspdC5yZW1vdmVDaGlsZCh0Lmxhc3RDaGlsZCk7aC5pbnNlcnRU
cmVlQmVmb3JlKHQsZSxudWxsKX1lbHNlIE4odCxlKSx5LnByZWNhY2hlTm9kZShuLHQuZmlyc3RD
aGlsZCl9fTt0LmV4cG9ydHM9an0sezEwODoxMDgsMTE6MTEsMTEyOjExMiwxMTQ6MTE0LDExNjox
MTYsMTE5OjExOSwxMjA6MTIwLDEzMDoxMzAsMTM3OjEzNywxNDI6MTQyLDI1OjI1LDMzOjMzLDM0
OjM0LDM2OjM2LDUzOjUzLDU3OjU3LDU4OjU4LDU5OjU5LDY2OjY2LDcwOjcwLDcxOjcxLDk6OX1d
LDYxOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe3JldHVy
bnt0eXBlOiJJTlNFUlRfTUFSS1VQIixjb250ZW50OmUsZnJvbUluZGV4Om51bGwsZnJvbU5vZGU6
bnVsbCx0b0luZGV4Om4sYWZ0ZXJOb2RlOnR9fWZ1bmN0aW9uIG8oZSx0LG4pe3JldHVybnt0eXBl
OiJNT1ZFX0VYSVNUSU5HIixjb250ZW50Om51bGwsZnJvbUluZGV4OmUuX21vdW50SW5kZXgsZnJv
bU5vZGU6ZC5nZXRIb3N0Tm9kZShlKSx0b0luZGV4Om4sYWZ0ZXJOb2RlOnR9fWZ1bmN0aW9uIGko
ZSx0KXtyZXR1cm57dHlwZToiUkVNT1ZFX05PREUiLGNvbnRlbnQ6bnVsbCxmcm9tSW5kZXg6ZS5f
bW91bnRJbmRleCxmcm9tTm9kZTp0LHRvSW5kZXg6bnVsbCxhZnRlck5vZGU6bnVsbH19ZnVuY3Rp
b24gYShlKXtyZXR1cm57dHlwZToiU0VUX01BUktVUCIsY29udGVudDplLGZyb21JbmRleDpudWxs
LGZyb21Ob2RlOm51bGwsdG9JbmRleDpudWxsLGFmdGVyTm9kZTpudWxsfX1mdW5jdGlvbiBzKGUp
e3JldHVybnt0eXBlOiJURVhUX0NPTlRFTlQiLGNvbnRlbnQ6ZSxmcm9tSW5kZXg6bnVsbCxmcm9t
Tm9kZTpudWxsLHRvSW5kZXg6bnVsbCxhZnRlck5vZGU6bnVsbH19ZnVuY3Rpb24gdShlLHQpe3Jl
dHVybiB0JiYoZT1lfHxbXSxlLnB1c2godCkpLGV9ZnVuY3Rpb24gbChlLHQpe3AucHJvY2Vzc0No
aWxkcmVuVXBkYXRlcyhlLHQpfXZhciBjPWUoMTEyKSxwPWUoMjgpLGQ9KGUoNTcpLGUoNTgpLGUo
MTE5KSxlKDY2KSksZj1lKDI2KSxoPShlKDEyOSksZSg5NykpLG09KGUoMTM3KSx7TWl4aW46e19y
ZWNvbmNpbGVySW5zdGFudGlhdGVDaGlsZHJlbjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGYuaW5z
dGFudGlhdGVDaGlsZHJlbihlLHQsbil9LF9yZWNvbmNpbGVyVXBkYXRlQ2hpbGRyZW46ZnVuY3Rp
b24oZSx0LG4scixvLGkpe3ZhciBhO3JldHVybiBhPWgodCwwKSxmLnVwZGF0ZUNoaWxkcmVuKGUs
YSxuLHIsbyx0aGlzLHRoaXMuX2hvc3RDb250YWluZXJJbmZvLGksMCksYX0sbW91bnRDaGlsZHJl
bjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5fcmVjb25jaWxlckluc3RhbnRpYXRlQ2hpbGRy
ZW4oZSx0LG4pO3RoaXMuX3JlbmRlcmVkQ2hpbGRyZW49cjt2YXIgbz1bXSxpPTA7Zm9yKHZhciBh
IGluIHIpaWYoci5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIHM9clthXSx1PWQubW91bnRDb21wb25l
bnQocyx0LHRoaXMsdGhpcy5faG9zdENvbnRhaW5lckluZm8sbiwwKTtzLl9tb3VudEluZGV4PWkr
KyxvLnB1c2godSl9cmV0dXJuIG99LHVwZGF0ZVRleHRDb250ZW50OmZ1bmN0aW9uKGUpe3ZhciB0
PXRoaXMuX3JlbmRlcmVkQ2hpbGRyZW47Zi51bm1vdW50Q2hpbGRyZW4odCwhMSk7Zm9yKHZhciBu
IGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmYygiMTE4Iik7bCh0aGlzLFtzKGUpXSl9LHVwZGF0
ZU1hcmt1cDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9yZW5kZXJlZENoaWxkcmVuO2YudW5tb3Vu
dENoaWxkcmVuKHQsITEpO2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJmMoIjEx
OCIpO2wodGhpcyxbYShlKV0pfSx1cGRhdGVDaGlsZHJlbjpmdW5jdGlvbihlLHQsbil7dGhpcy5f
dXBkYXRlQ2hpbGRyZW4oZSx0LG4pfSxfdXBkYXRlQ2hpbGRyZW46ZnVuY3Rpb24oZSx0LG4pe3Zh
ciByPXRoaXMuX3JlbmRlcmVkQ2hpbGRyZW4sbz17fSxpPVtdLGE9dGhpcy5fcmVjb25jaWxlclVw
ZGF0ZUNoaWxkcmVuKHIsZSxpLG8sdCxuKTtpZihhfHxyKXt2YXIgcyxjPW51bGwscD0wLGY9MCxo
PTAsbT1udWxsO2ZvcihzIGluIGEpaWYoYS5oYXNPd25Qcm9wZXJ0eShzKSl7dmFyIHY9ciYmcltz
XSxnPWFbc107dj09PWc/KGM9dShjLHRoaXMubW92ZUNoaWxkKHYsbSxwLGYpKSxmPU1hdGgubWF4
KHYuX21vdW50SW5kZXgsZiksdi5fbW91bnRJbmRleD1wKToodiYmKGY9TWF0aC5tYXgodi5fbW91
bnRJbmRleCxmKSksYz11KGMsdGhpcy5fbW91bnRDaGlsZEF0SW5kZXgoZyxpW2hdLG0scCx0LG4p
KSxoKyspLHArKyxtPWQuZ2V0SG9zdE5vZGUoZyl9Zm9yKHMgaW4gbylvLmhhc093blByb3BlcnR5
KHMpJiYoYz11KGMsdGhpcy5fdW5tb3VudENoaWxkKHJbc10sb1tzXSkpKTtjJiZsKHRoaXMsYyks
dGhpcy5fcmVuZGVyZWRDaGlsZHJlbj1hfX0sdW5tb3VudENoaWxkcmVuOmZ1bmN0aW9uKGUpe3Zh
ciB0PXRoaXMuX3JlbmRlcmVkQ2hpbGRyZW47Zi51bm1vdW50Q2hpbGRyZW4odCxlKSx0aGlzLl9y
ZW5kZXJlZENoaWxkcmVuPW51bGx9LG1vdmVDaGlsZDpmdW5jdGlvbihlLHQsbixyKXtpZihlLl9t
b3VudEluZGV4PHIpcmV0dXJuIG8oZSx0LG4pfSxjcmVhdGVDaGlsZDpmdW5jdGlvbihlLHQsbil7
cmV0dXJuIHIobix0LGUuX21vdW50SW5kZXgpfSxyZW1vdmVDaGlsZDpmdW5jdGlvbihlLHQpe3Jl
dHVybiBpKGUsdCl9LF9tb3VudENoaWxkQXRJbmRleDpmdW5jdGlvbihlLHQsbixyLG8saSl7cmV0
dXJuIGUuX21vdW50SW5kZXg9cix0aGlzLmNyZWF0ZUNoaWxkKGUsbix0KX0sX3VubW91bnRDaGls
ZDpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucmVtb3ZlQ2hpbGQoZSx0KTtyZXR1cm4gZS5fbW91
bnRJbmRleD1udWxsLG59fX0pO3QuZXhwb3J0cz1tfSx7MTEyOjExMiwxMTk6MTE5LDEyOToxMjks
MTM3OjEzNywyNjoyNiwyODoyOCw1Nzo1Nyw1ODo1OCw2Njo2Niw5Nzo5N31dLDYyOltmdW5jdGlv
bihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMTEyKSxvPWUoMTIwKSxpPShlKDEzNykse0hP
U1Q6MCxDT01QT1NJVEU6MSxFTVBUWToyLGdldFR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9
PT1lfHwhMT09PWU/aS5FTVBUWTpvLmlzVmFsaWRFbGVtZW50KGUpPyJmdW5jdGlvbiI9PXR5cGVv
ZiBlLnR5cGU/aS5DT01QT1NJVEU6aS5IT1NUOnZvaWQgcigiMjYiLGUpfX0pO3QuZXhwb3J0cz1p
fSx7MTEyOjExMiwxMjA6MTIwLDEzNzoxMzd9XSw2MzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3Ry
aWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiEoIWV8fCJmdW5jdGlvbiIhPXR5cGVvZiBlLmF0dGFj
aFJlZnx8ImZ1bmN0aW9uIiE9dHlwZW9mIGUuZGV0YWNoUmVmKX12YXIgbz1lKDExMiksaT0oZSgx
MzcpLHthZGRDb21wb25lbnRBc1JlZlRvOmZ1bmN0aW9uKGUsdCxuKXtyKG4pfHxvKCIxMTkiKSxu
LmF0dGFjaFJlZih0LGUpfSxyZW1vdmVDb21wb25lbnRBc1JlZkZyb206ZnVuY3Rpb24oZSx0LG4p
e3Iobil8fG8oIjEyMCIpO3ZhciBpPW4uZ2V0UHVibGljSW5zdGFuY2UoKTtpJiZpLnJlZnNbdF09
PT1lLmdldFB1YmxpY0luc3RhbmNlKCkmJm4uZGV0YWNoUmVmKHQpfX0pO3QuZXhwb3J0cz1pfSx7
MTEyOjExMiwxMzc6MTM3fV0sNjQ6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5leHBv
cnRzPSJTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCJ9LHt9XSw2
NTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3RoaXMucmVpbml0
aWFsaXplVHJhbnNhY3Rpb24oKSx0aGlzLnJlbmRlclRvU3RhdGljTWFya3VwPSExLHRoaXMucmVh
Y3RNb3VudFJlYWR5PWkuZ2V0UG9vbGVkKG51bGwpLHRoaXMudXNlQ3JlYXRlRWxlbWVudD1lfXZh
ciBvPWUoMTQzKSxpPWUoNiksYT1lKDI0KSxzPWUoMjUpLHU9ZSg1NiksbD0oZSg1OCksZSg4OSkp
LGM9ZSg3MCkscD17aW5pdGlhbGl6ZTp1LmdldFNlbGVjdGlvbkluZm9ybWF0aW9uLGNsb3NlOnUu
cmVzdG9yZVNlbGVjdGlvbn0sZD17aW5pdGlhbGl6ZTpmdW5jdGlvbigpe3ZhciBlPXMuaXNFbmFi
bGVkKCk7cmV0dXJuIHMuc2V0RW5hYmxlZCghMSksZX0sY2xvc2U6ZnVuY3Rpb24oZSl7cy5zZXRF
bmFibGVkKGUpfX0sZj17aW5pdGlhbGl6ZTpmdW5jdGlvbigpe3RoaXMucmVhY3RNb3VudFJlYWR5
LnJlc2V0KCl9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy5yZWFjdE1vdW50UmVhZHkubm90aWZ5QWxs
KCl9fSxoPVtwLGQsZl0sbT17Z2V0VHJhbnNhY3Rpb25XcmFwcGVyczpmdW5jdGlvbigpe3JldHVy
biBofSxnZXRSZWFjdE1vdW50UmVhZHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFjdE1vdW50
UmVhZHl9LGdldFVwZGF0ZVF1ZXVlOmZ1bmN0aW9uKCl7cmV0dXJuIGN9LGNoZWNrcG9pbnQ6ZnVu
Y3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFjdE1vdW50UmVhZHkuY2hlY2twb2ludCgpfSxyb2xsYmFj
azpmdW5jdGlvbihlKXt0aGlzLnJlYWN0TW91bnRSZWFkeS5yb2xsYmFjayhlKX0sZGVzdHJ1Y3Rv
cjpmdW5jdGlvbigpe2kucmVsZWFzZSh0aGlzLnJlYWN0TW91bnRSZWFkeSksdGhpcy5yZWFjdE1v
dW50UmVhZHk9bnVsbH19O28oci5wcm90b3R5cGUsbCxtKSxhLmFkZFBvb2xpbmdUbyhyKSx0LmV4
cG9ydHM9cn0sezE0MzoxNDMsMjQ6MjQsMjU6MjUsNTY6NTYsNTg6NTgsNjo2LDcwOjcwLDg5Ojg5
fV0sNjY6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe28uYXR0YWNo
UmVmcyh0aGlzLHRoaXMuX2N1cnJlbnRFbGVtZW50KX12YXIgbz1lKDY3KSxpPShlKDU4KSxlKDE0
Mikse21vdW50Q29tcG9uZW50OmZ1bmN0aW9uKGUsdCxuLG8saSxhKXt2YXIgcz1lLm1vdW50Q29t
cG9uZW50KHQsbixvLGksYSk7cmV0dXJuIGUuX2N1cnJlbnRFbGVtZW50JiZudWxsIT1lLl9jdXJy
ZW50RWxlbWVudC5yZWYmJnQuZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShyLGUpLHN9LGdl
dEhvc3ROb2RlOmZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEhvc3ROb2RlKCl9LHVubW91bnRDb21w
b25lbnQ6ZnVuY3Rpb24oZSx0KXtvLmRldGFjaFJlZnMoZSxlLl9jdXJyZW50RWxlbWVudCksZS51
bm1vdW50Q29tcG9uZW50KHQpfSxyZWNlaXZlQ29tcG9uZW50OmZ1bmN0aW9uKGUsdCxuLGkpe3Zh
ciBhPWUuX2N1cnJlbnRFbGVtZW50O2lmKHQhPT1hfHxpIT09ZS5fY29udGV4dCl7dmFyIHM9by5z
aG91bGRVcGRhdGVSZWZzKGEsdCk7cyYmby5kZXRhY2hSZWZzKGUsYSksZS5yZWNlaXZlQ29tcG9u
ZW50KHQsbixpKSxzJiZlLl9jdXJyZW50RWxlbWVudCYmbnVsbCE9ZS5fY3VycmVudEVsZW1lbnQu
cmVmJiZuLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUocixlKX19LHBlcmZvcm1VcGRhdGVJ
Zk5lY2Vzc2FyeTpmdW5jdGlvbihlLHQsbil7ZS5fdXBkYXRlQmF0Y2hOdW1iZXI9PT1uJiZlLnBl
cmZvcm1VcGRhdGVJZk5lY2Vzc2FyeSh0KX19KTt0LmV4cG9ydHM9aX0sezE0MjoxNDIsNTg6NTgs
Njc6Njd9XSw2NzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxu
KXsiZnVuY3Rpb24iPT10eXBlb2YgZT9lKHQuZ2V0UHVibGljSW5zdGFuY2UoKSk6aS5hZGRDb21w
b25lbnRBc1JlZlRvKHQsZSxuKX1mdW5jdGlvbiBvKGUsdCxuKXsiZnVuY3Rpb24iPT10eXBlb2Yg
ZT9lKG51bGwpOmkucmVtb3ZlQ29tcG9uZW50QXNSZWZGcm9tKHQsZSxuKX12YXIgaT1lKDYzKSxh
PXt9O2EuYXR0YWNoUmVmcz1mdW5jdGlvbihlLHQpe2lmKG51bGwhPT10JiYib2JqZWN0Ij09dHlw
ZW9mIHQpe3ZhciBuPXQucmVmO251bGwhPW4mJnIobixlLHQuX293bmVyKX19LGEuc2hvdWxkVXBk
YXRlUmVmcz1mdW5jdGlvbihlLHQpe3ZhciBuPW51bGwscj1udWxsO251bGwhPT1lJiYib2JqZWN0
Ij09dHlwZW9mIGUmJihuPWUucmVmLHI9ZS5fb3duZXIpO3ZhciBvPW51bGwsaT1udWxsO3JldHVy
biBudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0JiYobz10LnJlZixpPXQuX293bmVyKSxuIT09
b3x8InN0cmluZyI9PXR5cGVvZiBvJiZpIT09cn0sYS5kZXRhY2hSZWZzPWZ1bmN0aW9uKGUsdCl7
aWYobnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdCl7dmFyIG49dC5yZWY7bnVsbCE9biYmbyhu
LGUsdC5fb3duZXIpfX0sdC5leHBvcnRzPWF9LHs2Mzo2M31dLDY4OltmdW5jdGlvbihlLHQsbil7
InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dGhpcy5yZWluaXRpYWxpemVUcmFuc2FjdGlvbigp
LHRoaXMucmVuZGVyVG9TdGF0aWNNYXJrdXA9ZSx0aGlzLnVzZUNyZWF0ZUVsZW1lbnQ9ITEsdGhp
cy51cGRhdGVRdWV1ZT1uZXcgcyh0aGlzKX12YXIgbz1lKDE0MyksaT1lKDI0KSxhPWUoODkpLHM9
KGUoNTgpLGUoNjkpKSx1PVtdLGw9e2VucXVldWU6ZnVuY3Rpb24oKXt9fSxjPXtnZXRUcmFuc2Fj
dGlvbldyYXBwZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHV9LGdldFJlYWN0TW91bnRSZWFkeTpmdW5j
dGlvbigpe3JldHVybiBsfSxnZXRVcGRhdGVRdWV1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVw
ZGF0ZVF1ZXVlfSxkZXN0cnVjdG9yOmZ1bmN0aW9uKCl7fSxjaGVja3BvaW50OmZ1bmN0aW9uKCl7
fSxyb2xsYmFjazpmdW5jdGlvbigpe319O28oci5wcm90b3R5cGUsYSxjKSxpLmFkZFBvb2xpbmdU
byhyKSx0LmV4cG9ydHM9cn0sezE0MzoxNDMsMjQ6MjQsNTg6NTgsNjk6NjksODk6ODl9XSw2OTpb
ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7aWYoIShlIGluc3Rh
bmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1
bmN0aW9uIil9dmFyIG89ZSg3MCksaT0oZSgxNDIpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXty
KHRoaXMsZSksdGhpcy50cmFuc2FjdGlvbj10fXJldHVybiBlLnByb3RvdHlwZS5pc01vdW50ZWQ9
ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGUucHJvdG90eXBlLmVucXVldWVDYWxsYmFjaz1mdW5jdGlv
bihlLHQsbil7dGhpcy50cmFuc2FjdGlvbi5pc0luVHJhbnNhY3Rpb24oKSYmby5lbnF1ZXVlQ2Fs
bGJhY2soZSx0LG4pfSxlLnByb3RvdHlwZS5lbnF1ZXVlRm9yY2VVcGRhdGU9ZnVuY3Rpb24oZSl7
dGhpcy50cmFuc2FjdGlvbi5pc0luVHJhbnNhY3Rpb24oKSYmby5lbnF1ZXVlRm9yY2VVcGRhdGUo
ZSl9LGUucHJvdG90eXBlLmVucXVldWVSZXBsYWNlU3RhdGU9ZnVuY3Rpb24oZSx0KXt0aGlzLnRy
YW5zYWN0aW9uLmlzSW5UcmFuc2FjdGlvbigpJiZvLmVucXVldWVSZXBsYWNlU3RhdGUoZSx0KX0s
ZS5wcm90b3R5cGUuZW5xdWV1ZVNldFN0YXRlPWZ1bmN0aW9uKGUsdCl7dGhpcy50cmFuc2FjdGlv
bi5pc0luVHJhbnNhY3Rpb24oKSYmby5lbnF1ZXVlU2V0U3RhdGUoZSx0KX0sZX0oKSk7dC5leHBv
cnRzPWl9LHsxNDI6MTQyLDcwOjcwfV0sNzA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7
ZnVuY3Rpb24gcihlKXt1LmVucXVldWVVcGRhdGUoZSl9ZnVuY3Rpb24gbyhlKXt2YXIgdD10eXBl
b2YgZTtpZigib2JqZWN0IiE9PXQpcmV0dXJuIHQ7dmFyIG49ZS5jb25zdHJ1Y3RvciYmZS5jb25z
dHJ1Y3Rvci5uYW1lfHx0LHI9T2JqZWN0LmtleXMoZSk7cmV0dXJuIHIubGVuZ3RoPjAmJnIubGVu
Z3RoPDIwP24rIiAoa2V5czogIityLmpvaW4oIiwgIikrIikiOm59ZnVuY3Rpb24gaShlLHQpe3Zh
ciBuPXMuZ2V0KGUpO3JldHVybiBufHxudWxsfXZhciBhPWUoMTEyKSxzPShlKDExOSksZSg1Nykp
LHU9KGUoNTgpLGUoNzEpKSxsPShlKDEzNyksZSgxNDIpLHtpc01vdW50ZWQ6ZnVuY3Rpb24oZSl7
dmFyIHQ9cy5nZXQoZSk7cmV0dXJuISF0JiYhIXQuX3JlbmRlcmVkQ29tcG9uZW50fSxlbnF1ZXVl
Q2FsbGJhY2s6ZnVuY3Rpb24oZSx0LG4pe2wudmFsaWRhdGVDYWxsYmFjayh0LG4pO3ZhciBvPWko
ZSk7aWYoIW8pcmV0dXJuIG51bGw7by5fcGVuZGluZ0NhbGxiYWNrcz9vLl9wZW5kaW5nQ2FsbGJh
Y2tzLnB1c2godCk6by5fcGVuZGluZ0NhbGxiYWNrcz1bdF0scihvKX0sZW5xdWV1ZUNhbGxiYWNr
SW50ZXJuYWw6ZnVuY3Rpb24oZSx0KXtlLl9wZW5kaW5nQ2FsbGJhY2tzP2UuX3BlbmRpbmdDYWxs
YmFja3MucHVzaCh0KTplLl9wZW5kaW5nQ2FsbGJhY2tzPVt0XSxyKGUpfSxlbnF1ZXVlRm9yY2VV
cGRhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9aShlLCJmb3JjZVVwZGF0ZSIpO3QmJih0Ll9wZW5kaW5n
Rm9yY2VVcGRhdGU9ITAscih0KSl9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oZSx0LG4p
e3ZhciBvPWkoZSwicmVwbGFjZVN0YXRlIik7byYmKG8uX3BlbmRpbmdTdGF0ZVF1ZXVlPVt0XSxv
Ll9wZW5kaW5nUmVwbGFjZVN0YXRlPSEwLHZvaWQgMCE9PW4mJm51bGwhPT1uJiYobC52YWxpZGF0
ZUNhbGxiYWNrKG4sInJlcGxhY2VTdGF0ZSIpLG8uX3BlbmRpbmdDYWxsYmFja3M/by5fcGVuZGlu
Z0NhbGxiYWNrcy5wdXNoKG4pOm8uX3BlbmRpbmdDYWxsYmFja3M9W25dKSxyKG8pKX0sZW5xdWV1
ZVNldFN0YXRlOmZ1bmN0aW9uKGUsdCl7dmFyIG49aShlLCJzZXRTdGF0ZSIpO24mJigobi5fcGVu
ZGluZ1N0YXRlUXVldWV8fChuLl9wZW5kaW5nU3RhdGVRdWV1ZT1bXSkpLnB1c2godCkscihuKSl9
LGVucXVldWVFbGVtZW50SW50ZXJuYWw6ZnVuY3Rpb24oZSx0LG4pe2UuX3BlbmRpbmdFbGVtZW50
PXQsZS5fY29udGV4dD1uLHIoZSl9LHZhbGlkYXRlQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXtlJiYi
ZnVuY3Rpb24iIT10eXBlb2YgZSYmYSgiMTIyIix0LG8oZSkpfX0pO3QuZXhwb3J0cz1sfSx7MTEy
OjExMiwxMTk6MTE5LDEzNzoxMzcsMTQyOjE0Miw1Nzo1Nyw1ODo1OCw3MTo3MX1dLDcxOltmdW5j
dGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtQLlJlYWN0UmVjb25jaWxlVHJh
bnNhY3Rpb24mJmJ8fGMoIjEyMyIpfWZ1bmN0aW9uIG8oKXt0aGlzLnJlaW5pdGlhbGl6ZVRyYW5z
YWN0aW9uKCksdGhpcy5kaXJ0eUNvbXBvbmVudHNMZW5ndGg9bnVsbCx0aGlzLmNhbGxiYWNrUXVl
dWU9ZC5nZXRQb29sZWQoKSx0aGlzLnJlY29uY2lsZVRyYW5zYWN0aW9uPVAuUmVhY3RSZWNvbmNp
bGVUcmFuc2FjdGlvbi5nZXRQb29sZWQoITApfWZ1bmN0aW9uIGkoZSx0LG4sbyxpLGEpe3JldHVy
biByKCksYi5iYXRjaGVkVXBkYXRlcyhlLHQsbixvLGksYSl9ZnVuY3Rpb24gYShlLHQpe3JldHVy
biBlLl9tb3VudE9yZGVyLXQuX21vdW50T3JkZXJ9ZnVuY3Rpb24gcyhlKXt2YXIgdD1lLmRpcnR5
Q29tcG9uZW50c0xlbmd0aDt0IT09Zy5sZW5ndGgmJmMoIjEyNCIsdCxnLmxlbmd0aCksZy5zb3J0
KGEpLHkrKztmb3IodmFyIG49MDtuPHQ7bisrKXt2YXIgcj1nW25dLG89ci5fcGVuZGluZ0NhbGxi
YWNrcztyLl9wZW5kaW5nQ2FsbGJhY2tzPW51bGw7dmFyIGk7aWYoaC5sb2dUb3BMZXZlbFJlbmRl
cnMpe3ZhciBzPXI7ci5fY3VycmVudEVsZW1lbnQudHlwZS5pc1JlYWN0VG9wTGV2ZWxXcmFwcGVy
JiYocz1yLl9yZW5kZXJlZENvbXBvbmVudCksaT0iUmVhY3QgdXBkYXRlOiAiK3MuZ2V0TmFtZSgp
LGNvbnNvbGUudGltZShpKX1pZihtLnBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeShyLGUucmVjb25j
aWxlVHJhbnNhY3Rpb24seSksaSYmY29uc29sZS50aW1lRW5kKGkpLG8pZm9yKHZhciB1PTA7dTxv
Lmxlbmd0aDt1KyspZS5jYWxsYmFja1F1ZXVlLmVucXVldWUob1t1XSxyLmdldFB1YmxpY0luc3Rh
bmNlKCkpfX1mdW5jdGlvbiB1KGUpe2lmKHIoKSwhYi5pc0JhdGNoaW5nVXBkYXRlcylyZXR1cm4g
dm9pZCBiLmJhdGNoZWRVcGRhdGVzKHUsZSk7Zy5wdXNoKGUpLG51bGw9PWUuX3VwZGF0ZUJhdGNo
TnVtYmVyJiYoZS5fdXBkYXRlQmF0Y2hOdW1iZXI9eSsxKX1mdW5jdGlvbiBsKGUsdCl7Yi5pc0Jh
dGNoaW5nVXBkYXRlc3x8YygiMTI1IiksXy5lbnF1ZXVlKGUsdCksQz0hMH12YXIgYz1lKDExMiks
cD1lKDE0MyksZD1lKDYpLGY9ZSgyNCksaD1lKDUzKSxtPWUoNjYpLHY9ZSg4OSksZz0oZSgxMzcp
LFtdKSx5PTAsXz1kLmdldFBvb2xlZCgpLEM9ITEsYj1udWxsLEU9e2luaXRpYWxpemU6ZnVuY3Rp
b24oKXt0aGlzLmRpcnR5Q29tcG9uZW50c0xlbmd0aD1nLmxlbmd0aH0sY2xvc2U6ZnVuY3Rpb24o
KXt0aGlzLmRpcnR5Q29tcG9uZW50c0xlbmd0aCE9PWcubGVuZ3RoPyhnLnNwbGljZSgwLHRoaXMu
ZGlydHlDb21wb25lbnRzTGVuZ3RoKSxUKCkpOmcubGVuZ3RoPTB9fSx4PXtpbml0aWFsaXplOmZ1
bmN0aW9uKCl7dGhpcy5jYWxsYmFja1F1ZXVlLnJlc2V0KCl9LGNsb3NlOmZ1bmN0aW9uKCl7dGhp
cy5jYWxsYmFja1F1ZXVlLm5vdGlmeUFsbCgpfX0sdz1bRSx4XTtwKG8ucHJvdG90eXBlLHYse2dl
dFRyYW5zYWN0aW9uV3JhcHBlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gd30sZGVzdHJ1Y3RvcjpmdW5j
dGlvbigpe3RoaXMuZGlydHlDb21wb25lbnRzTGVuZ3RoPW51bGwsZC5yZWxlYXNlKHRoaXMuY2Fs
bGJhY2tRdWV1ZSksdGhpcy5jYWxsYmFja1F1ZXVlPW51bGwsUC5SZWFjdFJlY29uY2lsZVRyYW5z
YWN0aW9uLnJlbGVhc2UodGhpcy5yZWNvbmNpbGVUcmFuc2FjdGlvbiksdGhpcy5yZWNvbmNpbGVU
cmFuc2FjdGlvbj1udWxsfSxwZXJmb3JtOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdi5wZXJmb3Jt
LmNhbGwodGhpcyx0aGlzLnJlY29uY2lsZVRyYW5zYWN0aW9uLnBlcmZvcm0sdGhpcy5yZWNvbmNp
bGVUcmFuc2FjdGlvbixlLHQsbil9fSksZi5hZGRQb29saW5nVG8obyk7dmFyIFQ9ZnVuY3Rpb24o
KXtmb3IoO2cubGVuZ3RofHxDOyl7aWYoZy5sZW5ndGgpe3ZhciBlPW8uZ2V0UG9vbGVkKCk7ZS5w
ZXJmb3JtKHMsbnVsbCxlKSxvLnJlbGVhc2UoZSl9aWYoQyl7Qz0hMTt2YXIgdD1fO189ZC5nZXRQ
b29sZWQoKSx0Lm5vdGlmeUFsbCgpLGQucmVsZWFzZSh0KX19fSxrPXtpbmplY3RSZWNvbmNpbGVU
cmFuc2FjdGlvbjpmdW5jdGlvbihlKXtlfHxjKCIxMjYiKSxQLlJlYWN0UmVjb25jaWxlVHJhbnNh
Y3Rpb249ZX0saW5qZWN0QmF0Y2hpbmdTdHJhdGVneTpmdW5jdGlvbihlKXtlfHxjKCIxMjciKSwi
ZnVuY3Rpb24iIT10eXBlb2YgZS5iYXRjaGVkVXBkYXRlcyYmYygiMTI4IiksImJvb2xlYW4iIT10
eXBlb2YgZS5pc0JhdGNoaW5nVXBkYXRlcyYmYygiMTI5IiksYj1lfX0sUD17UmVhY3RSZWNvbmNp
bGVUcmFuc2FjdGlvbjpudWxsLGJhdGNoZWRVcGRhdGVzOmksZW5xdWV1ZVVwZGF0ZTp1LGZsdXNo
QmF0Y2hlZFVwZGF0ZXM6VCxpbmplY3Rpb246ayxhc2FwOmx9O3QuZXhwb3J0cz1QfSx7MTEyOjEx
MiwxMzc6MTM3LDE0MzoxNDMsMjQ6MjQsNTM6NTMsNjo2LDY2OjY2LDg5Ojg5fV0sNzI6W2Z1bmN0
aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPSIxNS41LjQifSx7fV0sNzM6W2Z1bmN0
aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9e3hsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8x
OTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSJ9LG89
e2FjY2VudEhlaWdodDoiYWNjZW50LWhlaWdodCIsYWNjdW11bGF0ZTowLGFkZGl0aXZlOjAsYWxp
Z25tZW50QmFzZWxpbmU6ImFsaWdubWVudC1iYXNlbGluZSIsYWxsb3dSZW9yZGVyOiJhbGxvd1Jl
b3JkZXIiLGFscGhhYmV0aWM6MCxhbXBsaXR1ZGU6MCxhcmFiaWNGb3JtOiJhcmFiaWMtZm9ybSIs
YXNjZW50OjAsYXR0cmlidXRlTmFtZToiYXR0cmlidXRlTmFtZSIsYXR0cmlidXRlVHlwZToiYXR0
cmlidXRlVHlwZSIsYXV0b1JldmVyc2U6ImF1dG9SZXZlcnNlIixhemltdXRoOjAsYmFzZUZyZXF1
ZW5jeToiYmFzZUZyZXF1ZW5jeSIsYmFzZVByb2ZpbGU6ImJhc2VQcm9maWxlIixiYXNlbGluZVNo
aWZ0OiJiYXNlbGluZS1zaGlmdCIsYmJveDowLGJlZ2luOjAsYmlhczowLGJ5OjAsY2FsY01vZGU6
ImNhbGNNb2RlIixjYXBIZWlnaHQ6ImNhcC1oZWlnaHQiLGNsaXA6MCxjbGlwUGF0aDoiY2xpcC1w
YXRoIixjbGlwUnVsZToiY2xpcC1ydWxlIixjbGlwUGF0aFVuaXRzOiJjbGlwUGF0aFVuaXRzIixj
b2xvckludGVycG9sYXRpb246ImNvbG9yLWludGVycG9sYXRpb24iLGNvbG9ySW50ZXJwb2xhdGlv
bkZpbHRlcnM6ImNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyIsY29sb3JQcm9maWxlOiJjb2xv
ci1wcm9maWxlIixjb2xvclJlbmRlcmluZzoiY29sb3ItcmVuZGVyaW5nIixjb250ZW50U2NyaXB0
VHlwZToiY29udGVudFNjcmlwdFR5cGUiLGNvbnRlbnRTdHlsZVR5cGU6ImNvbnRlbnRTdHlsZVR5
cGUiLGN1cnNvcjowLGN4OjAsY3k6MCxkOjAsZGVjZWxlcmF0ZTowLGRlc2NlbnQ6MCxkaWZmdXNl
Q29uc3RhbnQ6ImRpZmZ1c2VDb25zdGFudCIsZGlyZWN0aW9uOjAsZGlzcGxheTowLGRpdmlzb3I6
MCxkb21pbmFudEJhc2VsaW5lOiJkb21pbmFudC1iYXNlbGluZSIsZHVyOjAsZHg6MCxkeTowLGVk
Z2VNb2RlOiJlZGdlTW9kZSIsZWxldmF0aW9uOjAsZW5hYmxlQmFja2dyb3VuZDoiZW5hYmxlLWJh
Y2tncm91bmQiLGVuZDowLGV4cG9uZW50OjAsZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDoiZXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCIsZmlsbDowLGZpbGxPcGFjaXR5OiJmaWxsLW9wYWNpdHki
LGZpbGxSdWxlOiJmaWxsLXJ1bGUiLGZpbHRlcjowLGZpbHRlclJlczoiZmlsdGVyUmVzIixmaWx0
ZXJVbml0czoiZmlsdGVyVW5pdHMiLGZsb29kQ29sb3I6ImZsb29kLWNvbG9yIixmbG9vZE9wYWNp
dHk6ImZsb29kLW9wYWNpdHkiLGZvY3VzYWJsZTowLGZvbnRGYW1pbHk6ImZvbnQtZmFtaWx5Iixm
b250U2l6ZToiZm9udC1zaXplIixmb250U2l6ZUFkanVzdDoiZm9udC1zaXplLWFkanVzdCIsZm9u
dFN0cmV0Y2g6ImZvbnQtc3RyZXRjaCIsZm9udFN0eWxlOiJmb250LXN0eWxlIixmb250VmFyaWFu
dDoiZm9udC12YXJpYW50Iixmb250V2VpZ2h0OiJmb250LXdlaWdodCIsZm9ybWF0OjAsZnJvbTow
LGZ4OjAsZnk6MCxnMTowLGcyOjAsZ2x5cGhOYW1lOiJnbHlwaC1uYW1lIixnbHlwaE9yaWVudGF0
aW9uSG9yaXpvbnRhbDoiZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCIsZ2x5cGhPcmllbnRh
dGlvblZlcnRpY2FsOiJnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCIsZ2x5cGhSZWY6ImdseXBo
UmVmIixncmFkaWVudFRyYW5zZm9ybToiZ3JhZGllbnRUcmFuc2Zvcm0iLGdyYWRpZW50VW5pdHM6
ImdyYWRpZW50VW5pdHMiLGhhbmdpbmc6MCxob3JpekFkdlg6Imhvcml6LWFkdi14Iixob3Jpek9y
aWdpblg6Imhvcml6LW9yaWdpbi14IixpZGVvZ3JhcGhpYzowLGltYWdlUmVuZGVyaW5nOiJpbWFn
ZS1yZW5kZXJpbmciLGluOjAsaW4yOjAsaW50ZXJjZXB0OjAsazowLGsxOjAsazI6MCxrMzowLGs0
OjAsa2VybmVsTWF0cml4OiJrZXJuZWxNYXRyaXgiLGtlcm5lbFVuaXRMZW5ndGg6Imtlcm5lbFVu
aXRMZW5ndGgiLGtlcm5pbmc6MCxrZXlQb2ludHM6ImtleVBvaW50cyIsa2V5U3BsaW5lczoia2V5
U3BsaW5lcyIsa2V5VGltZXM6ImtleVRpbWVzIixsZW5ndGhBZGp1c3Q6Imxlbmd0aEFkanVzdCIs
bGV0dGVyU3BhY2luZzoibGV0dGVyLXNwYWNpbmciLGxpZ2h0aW5nQ29sb3I6ImxpZ2h0aW5nLWNv
bG9yIixsaW1pdGluZ0NvbmVBbmdsZToibGltaXRpbmdDb25lQW5nbGUiLGxvY2FsOjAsbWFya2Vy
RW5kOiJtYXJrZXItZW5kIixtYXJrZXJNaWQ6Im1hcmtlci1taWQiLG1hcmtlclN0YXJ0OiJtYXJr
ZXItc3RhcnQiLG1hcmtlckhlaWdodDoibWFya2VySGVpZ2h0IixtYXJrZXJVbml0czoibWFya2Vy
VW5pdHMiLG1hcmtlcldpZHRoOiJtYXJrZXJXaWR0aCIsbWFzazowLG1hc2tDb250ZW50VW5pdHM6
Im1hc2tDb250ZW50VW5pdHMiLG1hc2tVbml0czoibWFza1VuaXRzIixtYXRoZW1hdGljYWw6MCxt
b2RlOjAsbnVtT2N0YXZlczoibnVtT2N0YXZlcyIsb2Zmc2V0OjAsb3BhY2l0eTowLG9wZXJhdG9y
OjAsb3JkZXI6MCxvcmllbnQ6MCxvcmllbnRhdGlvbjowLG9yaWdpbjowLG92ZXJmbG93OjAsb3Zl
cmxpbmVQb3NpdGlvbjoib3ZlcmxpbmUtcG9zaXRpb24iLG92ZXJsaW5lVGhpY2tuZXNzOiJvdmVy
bGluZS10aGlja25lc3MiLHBhaW50T3JkZXI6InBhaW50LW9yZGVyIixwYW5vc2UxOiJwYW5vc2Ut
MSIscGF0aExlbmd0aDoicGF0aExlbmd0aCIscGF0dGVybkNvbnRlbnRVbml0czoicGF0dGVybkNv
bnRlbnRVbml0cyIscGF0dGVyblRyYW5zZm9ybToicGF0dGVyblRyYW5zZm9ybSIscGF0dGVyblVu
aXRzOiJwYXR0ZXJuVW5pdHMiLHBvaW50ZXJFdmVudHM6InBvaW50ZXItZXZlbnRzIixwb2ludHM6
MCxwb2ludHNBdFg6InBvaW50c0F0WCIscG9pbnRzQXRZOiJwb2ludHNBdFkiLHBvaW50c0F0Wjoi
cG9pbnRzQXRaIixwcmVzZXJ2ZUFscGhhOiJwcmVzZXJ2ZUFscGhhIixwcmVzZXJ2ZUFzcGVjdFJh
dGlvOiJwcmVzZXJ2ZUFzcGVjdFJhdGlvIixwcmltaXRpdmVVbml0czoicHJpbWl0aXZlVW5pdHMi
LHI6MCxyYWRpdXM6MCxyZWZYOiJyZWZYIixyZWZZOiJyZWZZIixyZW5kZXJpbmdJbnRlbnQ6InJl
bmRlcmluZy1pbnRlbnQiLHJlcGVhdENvdW50OiJyZXBlYXRDb3VudCIscmVwZWF0RHVyOiJyZXBl
YXREdXIiLHJlcXVpcmVkRXh0ZW5zaW9uczoicmVxdWlyZWRFeHRlbnNpb25zIixyZXF1aXJlZEZl
YXR1cmVzOiJyZXF1aXJlZEZlYXR1cmVzIixyZXN0YXJ0OjAscmVzdWx0OjAscm90YXRlOjAscng6
MCxyeTowLHNjYWxlOjAsc2VlZDowLHNoYXBlUmVuZGVyaW5nOiJzaGFwZS1yZW5kZXJpbmciLHNs
b3BlOjAsc3BhY2luZzowLHNwZWN1bGFyQ29uc3RhbnQ6InNwZWN1bGFyQ29uc3RhbnQiLHNwZWN1
bGFyRXhwb25lbnQ6InNwZWN1bGFyRXhwb25lbnQiLHNwZWVkOjAsc3ByZWFkTWV0aG9kOiJzcHJl
YWRNZXRob2QiLHN0YXJ0T2Zmc2V0OiJzdGFydE9mZnNldCIsc3RkRGV2aWF0aW9uOiJzdGREZXZp
YXRpb24iLHN0ZW1oOjAsc3RlbXY6MCxzdGl0Y2hUaWxlczoic3RpdGNoVGlsZXMiLHN0b3BDb2xv
cjoic3RvcC1jb2xvciIsc3RvcE9wYWNpdHk6InN0b3Atb3BhY2l0eSIsc3RyaWtldGhyb3VnaFBv
c2l0aW9uOiJzdHJpa2V0aHJvdWdoLXBvc2l0aW9uIixzdHJpa2V0aHJvdWdoVGhpY2tuZXNzOiJz
dHJpa2V0aHJvdWdoLXRoaWNrbmVzcyIsc3RyaW5nOjAsc3Ryb2tlOjAsc3Ryb2tlRGFzaGFycmF5
OiJzdHJva2UtZGFzaGFycmF5IixzdHJva2VEYXNob2Zmc2V0OiJzdHJva2UtZGFzaG9mZnNldCIs
c3Ryb2tlTGluZWNhcDoic3Ryb2tlLWxpbmVjYXAiLHN0cm9rZUxpbmVqb2luOiJzdHJva2UtbGlu
ZWpvaW4iLHN0cm9rZU1pdGVybGltaXQ6InN0cm9rZS1taXRlcmxpbWl0IixzdHJva2VPcGFjaXR5
OiJzdHJva2Utb3BhY2l0eSIsc3Ryb2tlV2lkdGg6InN0cm9rZS13aWR0aCIsc3VyZmFjZVNjYWxl
OiJzdXJmYWNlU2NhbGUiLHN5c3RlbUxhbmd1YWdlOiJzeXN0ZW1MYW5ndWFnZSIsdGFibGVWYWx1
ZXM6InRhYmxlVmFsdWVzIix0YXJnZXRYOiJ0YXJnZXRYIix0YXJnZXRZOiJ0YXJnZXRZIix0ZXh0
QW5jaG9yOiJ0ZXh0LWFuY2hvciIsdGV4dERlY29yYXRpb246InRleHQtZGVjb3JhdGlvbiIsdGV4
dFJlbmRlcmluZzoidGV4dC1yZW5kZXJpbmciLHRleHRMZW5ndGg6InRleHRMZW5ndGgiLHRvOjAs
dHJhbnNmb3JtOjAsdTE6MCx1MjowLHVuZGVybGluZVBvc2l0aW9uOiJ1bmRlcmxpbmUtcG9zaXRp
b24iLHVuZGVybGluZVRoaWNrbmVzczoidW5kZXJsaW5lLXRoaWNrbmVzcyIsdW5pY29kZTowLHVu
aWNvZGVCaWRpOiJ1bmljb2RlLWJpZGkiLHVuaWNvZGVSYW5nZToidW5pY29kZS1yYW5nZSIsdW5p
dHNQZXJFbToidW5pdHMtcGVyLWVtIix2QWxwaGFiZXRpYzoidi1hbHBoYWJldGljIix2SGFuZ2lu
Zzoidi1oYW5naW5nIix2SWRlb2dyYXBoaWM6InYtaWRlb2dyYXBoaWMiLHZNYXRoZW1hdGljYWw6
InYtbWF0aGVtYXRpY2FsIix2YWx1ZXM6MCx2ZWN0b3JFZmZlY3Q6InZlY3Rvci1lZmZlY3QiLHZl
cnNpb246MCx2ZXJ0QWR2WToidmVydC1hZHYteSIsdmVydE9yaWdpblg6InZlcnQtb3JpZ2luLXgi
LHZlcnRPcmlnaW5ZOiJ2ZXJ0LW9yaWdpbi15Iix2aWV3Qm94OiJ2aWV3Qm94Iix2aWV3VGFyZ2V0
OiJ2aWV3VGFyZ2V0Iix2aXNpYmlsaXR5OjAsd2lkdGhzOjAsd29yZFNwYWNpbmc6IndvcmQtc3Bh
Y2luZyIsd3JpdGluZ01vZGU6IndyaXRpbmctbW9kZSIseDowLHhIZWlnaHQ6IngtaGVpZ2h0Iix4
MTowLHgyOjAseENoYW5uZWxTZWxlY3RvcjoieENoYW5uZWxTZWxlY3RvciIseGxpbmtBY3R1YXRl
OiJ4bGluazphY3R1YXRlIix4bGlua0FyY3JvbGU6InhsaW5rOmFyY3JvbGUiLHhsaW5rSHJlZjoi
eGxpbms6aHJlZiIseGxpbmtSb2xlOiJ4bGluazpyb2xlIix4bGlua1Nob3c6InhsaW5rOnNob3ci
LHhsaW5rVGl0bGU6InhsaW5rOnRpdGxlIix4bGlua1R5cGU6InhsaW5rOnR5cGUiLHhtbEJhc2U6
InhtbDpiYXNlIix4bWxuczowLHhtbG5zWGxpbms6InhtbG5zOnhsaW5rIix4bWxMYW5nOiJ4bWw6
bGFuZyIseG1sU3BhY2U6InhtbDpzcGFjZSIseTowLHkxOjAseTI6MCx5Q2hhbm5lbFNlbGVjdG9y
OiJ5Q2hhbm5lbFNlbGVjdG9yIix6OjAsem9vbUFuZFBhbjoiem9vbUFuZFBhbiJ9LGk9e1Byb3Bl
cnRpZXM6e30sRE9NQXR0cmlidXRlTmFtZXNwYWNlczp7eGxpbmtBY3R1YXRlOnIueGxpbmsseGxp
bmtBcmNyb2xlOnIueGxpbmsseGxpbmtIcmVmOnIueGxpbmsseGxpbmtSb2xlOnIueGxpbmsseGxp
bmtTaG93OnIueGxpbmsseGxpbmtUaXRsZTpyLnhsaW5rLHhsaW5rVHlwZTpyLnhsaW5rLHhtbEJh
c2U6ci54bWwseG1sTGFuZzpyLnhtbCx4bWxTcGFjZTpyLnhtbH0sRE9NQXR0cmlidXRlTmFtZXM6
e319O09iamVjdC5rZXlzKG8pLmZvckVhY2goZnVuY3Rpb24oZSl7aS5Qcm9wZXJ0aWVzW2VdPTAs
b1tlXSYmKGkuRE9NQXR0cmlidXRlTmFtZXNbZV09b1tlXSl9KSx0LmV4cG9ydHM9aX0se31dLDc0
OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYoInNlbGVjdGlv
blN0YXJ0ImluIGUmJnUuaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKGUpKXJldHVybntzdGFydDpl
LnNlbGVjdGlvblN0YXJ0LGVuZDplLnNlbGVjdGlvbkVuZH07aWYod2luZG93LmdldFNlbGVjdGlv
bil7dmFyIHQ9d2luZG93LmdldFNlbGVjdGlvbigpO3JldHVybnthbmNob3JOb2RlOnQuYW5jaG9y
Tm9kZSxhbmNob3JPZmZzZXQ6dC5hbmNob3JPZmZzZXQsZm9jdXNOb2RlOnQuZm9jdXNOb2RlLGZv
Y3VzT2Zmc2V0OnQuZm9jdXNPZmZzZXR9fWlmKGRvY3VtZW50LnNlbGVjdGlvbil7dmFyIG49ZG9j
dW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7cmV0dXJue3BhcmVudEVsZW1lbnQ6bi5wYXJl
bnRFbGVtZW50KCksdGV4dDpuLnRleHQsdG9wOm4uYm91bmRpbmdUb3AsbGVmdDpuLmJvdW5kaW5n
TGVmdH19fWZ1bmN0aW9uIG8oZSx0KXtpZih5fHxudWxsPT1tfHxtIT09YygpKXJldHVybiBudWxs
O3ZhciBuPXIobSk7aWYoIWd8fCFkKGcsbikpe2c9bjt2YXIgbz1sLmdldFBvb2xlZChoLnNlbGVj
dCx2LGUsdCk7cmV0dXJuIG8udHlwZT0ic2VsZWN0IixvLnRhcmdldD1tLGkuYWNjdW11bGF0ZVR3
b1BoYXNlRGlzcGF0Y2hlcyhvKSxvfXJldHVybiBudWxsfXZhciBpPWUoMTkpLGE9ZSgxMjMpLHM9
ZSgzMyksdT1lKDU2KSxsPWUoODApLGM9ZSgxMzIpLHA9ZSgxMTApLGQ9ZSgxNDEpLGY9YS5jYW5V
c2VET00mJiJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQmJmRvY3VtZW50LmRvY3VtZW50TW9kZTw9
MTEsaD17c2VsZWN0OntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnViYmxlZDoib25TZWxlY3Qi
LGNhcHR1cmVkOiJvblNlbGVjdENhcHR1cmUifSxkZXBlbmRlbmNpZXM6WyJ0b3BCbHVyIiwidG9w
Q29udGV4dE1lbnUiLCJ0b3BGb2N1cyIsInRvcEtleURvd24iLCJ0b3BLZXlVcCIsInRvcE1vdXNl
RG93biIsInRvcE1vdXNlVXAiLCJ0b3BTZWxlY3Rpb25DaGFuZ2UiXX19LG09bnVsbCx2PW51bGws
Zz1udWxsLHk9ITEsXz0hMSxDPXtldmVudFR5cGVzOmgsZXh0cmFjdEV2ZW50czpmdW5jdGlvbihl
LHQsbixyKXtpZighXylyZXR1cm4gbnVsbDt2YXIgaT10P3MuZ2V0Tm9kZUZyb21JbnN0YW5jZSh0
KTp3aW5kb3c7c3dpdGNoKGUpe2Nhc2UidG9wRm9jdXMiOihwKGkpfHwidHJ1ZSI9PT1pLmNvbnRl
bnRFZGl0YWJsZSkmJihtPWksdj10LGc9bnVsbCk7YnJlYWsKKztjYXNlInRvcEJsdXIiOm09bnVs
bCx2PW51bGwsZz1udWxsO2JyZWFrO2Nhc2UidG9wTW91c2VEb3duIjp5PSEwO2JyZWFrO2Nhc2Ui
dG9wQ29udGV4dE1lbnUiOmNhc2UidG9wTW91c2VVcCI6cmV0dXJuIHk9ITEsbyhuLHIpO2Nhc2Ui
dG9wU2VsZWN0aW9uQ2hhbmdlIjppZihmKWJyZWFrO2Nhc2UidG9wS2V5RG93biI6Y2FzZSJ0b3BL
ZXlVcCI6cmV0dXJuIG8obixyKX1yZXR1cm4gbnVsbH0sZGlkUHV0TGlzdGVuZXI6ZnVuY3Rpb24o
ZSx0LG4peyJvblNlbGVjdCI9PT10JiYoXz0hMCl9fTt0LmV4cG9ydHM9Q30sezExMDoxMTAsMTIz
OjEyMywxMzI6MTMyLDE0MToxNDEsMTk6MTksMzM6MzMsNTY6NTYsODA6ODB9XSw3NTpbZnVuY3Rp
b24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiIuIitlLl9yb290Tm9k
ZUlEfWZ1bmN0aW9uIG8oZSl7cmV0dXJuImJ1dHRvbiI9PT1lfHwiaW5wdXQiPT09ZXx8InNlbGVj
dCI9PT1lfHwidGV4dGFyZWEiPT09ZX12YXIgaT1lKDExMiksYT1lKDEyMikscz1lKDE5KSx1PWUo
MzMpLGw9ZSg3NiksYz1lKDc3KSxwPWUoODApLGQ9ZSg4MSksZj1lKDgzKSxoPWUoODQpLG09ZSg3
OSksdj1lKDg1KSxnPWUoODYpLHk9ZSg4NyksXz1lKDg4KSxDPWUoMTI5KSxiPWUoOTkpLEU9KGUo
MTM3KSx7fSkseD17fTtbImFib3J0IiwiYW5pbWF0aW9uRW5kIiwiYW5pbWF0aW9uSXRlcmF0aW9u
IiwiYW5pbWF0aW9uU3RhcnQiLCJibHVyIiwiY2FuUGxheSIsImNhblBsYXlUaHJvdWdoIiwiY2xp
Y2siLCJjb250ZXh0TWVudSIsImNvcHkiLCJjdXQiLCJkb3VibGVDbGljayIsImRyYWciLCJkcmFn
RW5kIiwiZHJhZ0VudGVyIiwiZHJhZ0V4aXQiLCJkcmFnTGVhdmUiLCJkcmFnT3ZlciIsImRyYWdT
dGFydCIsImRyb3AiLCJkdXJhdGlvbkNoYW5nZSIsImVtcHRpZWQiLCJlbmNyeXB0ZWQiLCJlbmRl
ZCIsImVycm9yIiwiZm9jdXMiLCJpbnB1dCIsImludmFsaWQiLCJrZXlEb3duIiwia2V5UHJlc3Mi
LCJrZXlVcCIsImxvYWQiLCJsb2FkZWREYXRhIiwibG9hZGVkTWV0YWRhdGEiLCJsb2FkU3RhcnQi
LCJtb3VzZURvd24iLCJtb3VzZU1vdmUiLCJtb3VzZU91dCIsIm1vdXNlT3ZlciIsIm1vdXNlVXAi
LCJwYXN0ZSIsInBhdXNlIiwicGxheSIsInBsYXlpbmciLCJwcm9ncmVzcyIsInJhdGVDaGFuZ2Ui
LCJyZXNldCIsInNjcm9sbCIsInNlZWtlZCIsInNlZWtpbmciLCJzdGFsbGVkIiwic3VibWl0Iiwi
c3VzcGVuZCIsInRpbWVVcGRhdGUiLCJ0b3VjaENhbmNlbCIsInRvdWNoRW5kIiwidG91Y2hNb3Zl
IiwidG91Y2hTdGFydCIsInRyYW5zaXRpb25FbmQiLCJ2b2x1bWVDaGFuZ2UiLCJ3YWl0aW5nIiwi
d2hlZWwiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0udG9VcHBlckNhc2UoKStlLnNs
aWNlKDEpLG49Im9uIit0LHI9InRvcCIrdCxvPXtwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnVi
YmxlZDpuLGNhcHR1cmVkOm4rIkNhcHR1cmUifSxkZXBlbmRlbmNpZXM6W3JdfTtFW2VdPW8seFty
XT1vfSk7dmFyIHc9e30sVD17ZXZlbnRUeXBlczpFLGV4dHJhY3RFdmVudHM6ZnVuY3Rpb24oZSx0
LG4scil7dmFyIG89eFtlXTtpZighbylyZXR1cm4gbnVsbDt2YXIgYTtzd2l0Y2goZSl7Y2FzZSJ0
b3BBYm9ydCI6Y2FzZSJ0b3BDYW5QbGF5IjpjYXNlInRvcENhblBsYXlUaHJvdWdoIjpjYXNlInRv
cER1cmF0aW9uQ2hhbmdlIjpjYXNlInRvcEVtcHRpZWQiOmNhc2UidG9wRW5jcnlwdGVkIjpjYXNl
InRvcEVuZGVkIjpjYXNlInRvcEVycm9yIjpjYXNlInRvcElucHV0IjpjYXNlInRvcEludmFsaWQi
OmNhc2UidG9wTG9hZCI6Y2FzZSJ0b3BMb2FkZWREYXRhIjpjYXNlInRvcExvYWRlZE1ldGFkYXRh
IjpjYXNlInRvcExvYWRTdGFydCI6Y2FzZSJ0b3BQYXVzZSI6Y2FzZSJ0b3BQbGF5IjpjYXNlInRv
cFBsYXlpbmciOmNhc2UidG9wUHJvZ3Jlc3MiOmNhc2UidG9wUmF0ZUNoYW5nZSI6Y2FzZSJ0b3BS
ZXNldCI6Y2FzZSJ0b3BTZWVrZWQiOmNhc2UidG9wU2Vla2luZyI6Y2FzZSJ0b3BTdGFsbGVkIjpj
YXNlInRvcFN1Ym1pdCI6Y2FzZSJ0b3BTdXNwZW5kIjpjYXNlInRvcFRpbWVVcGRhdGUiOmNhc2Ui
dG9wVm9sdW1lQ2hhbmdlIjpjYXNlInRvcFdhaXRpbmciOmE9cDticmVhaztjYXNlInRvcEtleVBy
ZXNzIjppZigwPT09YihuKSlyZXR1cm4gbnVsbDtjYXNlInRvcEtleURvd24iOmNhc2UidG9wS2V5
VXAiOmE9ZjticmVhaztjYXNlInRvcEJsdXIiOmNhc2UidG9wRm9jdXMiOmE9ZDticmVhaztjYXNl
InRvcENsaWNrIjppZigyPT09bi5idXR0b24pcmV0dXJuIG51bGw7Y2FzZSJ0b3BEb3VibGVDbGlj
ayI6Y2FzZSJ0b3BNb3VzZURvd24iOmNhc2UidG9wTW91c2VNb3ZlIjpjYXNlInRvcE1vdXNlVXAi
OmNhc2UidG9wTW91c2VPdXQiOmNhc2UidG9wTW91c2VPdmVyIjpjYXNlInRvcENvbnRleHRNZW51
IjphPWg7YnJlYWs7Y2FzZSJ0b3BEcmFnIjpjYXNlInRvcERyYWdFbmQiOmNhc2UidG9wRHJhZ0Vu
dGVyIjpjYXNlInRvcERyYWdFeGl0IjpjYXNlInRvcERyYWdMZWF2ZSI6Y2FzZSJ0b3BEcmFnT3Zl
ciI6Y2FzZSJ0b3BEcmFnU3RhcnQiOmNhc2UidG9wRHJvcCI6YT1tO2JyZWFrO2Nhc2UidG9wVG91
Y2hDYW5jZWwiOmNhc2UidG9wVG91Y2hFbmQiOmNhc2UidG9wVG91Y2hNb3ZlIjpjYXNlInRvcFRv
dWNoU3RhcnQiOmE9djticmVhaztjYXNlInRvcEFuaW1hdGlvbkVuZCI6Y2FzZSJ0b3BBbmltYXRp
b25JdGVyYXRpb24iOmNhc2UidG9wQW5pbWF0aW9uU3RhcnQiOmE9bDticmVhaztjYXNlInRvcFRy
YW5zaXRpb25FbmQiOmE9ZzticmVhaztjYXNlInRvcFNjcm9sbCI6YT15O2JyZWFrO2Nhc2UidG9w
V2hlZWwiOmE9XzticmVhaztjYXNlInRvcENvcHkiOmNhc2UidG9wQ3V0IjpjYXNlInRvcFBhc3Rl
IjphPWN9YXx8aSgiODYiLGUpO3ZhciB1PWEuZ2V0UG9vbGVkKG8sdCxuLHIpO3JldHVybiBzLmFj
Y3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXModSksdX0sZGlkUHV0TGlzdGVuZXI6ZnVuY3Rpb24o
ZSx0LG4pe2lmKCJvbkNsaWNrIj09PXQmJiFvKGUuX3RhZykpe3ZhciBpPXIoZSkscz11LmdldE5v
ZGVGcm9tSW5zdGFuY2UoZSk7d1tpXXx8KHdbaV09YS5saXN0ZW4ocywiY2xpY2siLEMpKX19LHdp
bGxEZWxldGVMaXN0ZW5lcjpmdW5jdGlvbihlLHQpe2lmKCJvbkNsaWNrIj09PXQmJiFvKGUuX3Rh
Zykpe3ZhciBuPXIoZSk7d1tuXS5yZW1vdmUoKSxkZWxldGUgd1tuXX19fTt0LmV4cG9ydHM9VH0s
ezExMjoxMTIsMTIyOjEyMiwxMjk6MTI5LDEzNzoxMzcsMTk6MTksMzM6MzMsNzY6NzYsNzc6Nzcs
Nzk6NzksODA6ODAsODE6ODEsODM6ODMsODQ6ODQsODU6ODUsODY6ODYsODc6ODcsODg6ODgsOTk6
OTl9XSw3NjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIp
e3JldHVybiBvLmNhbGwodGhpcyxlLHQsbixyKX12YXIgbz1lKDgwKSxpPXthbmltYXRpb25OYW1l
Om51bGwsZWxhcHNlZFRpbWU6bnVsbCxwc2V1ZG9FbGVtZW50Om51bGx9O28uYXVnbWVudENsYXNz
KHIsaSksdC5leHBvcnRzPXJ9LHs4MDo4MH1dLDc3OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJp
Y3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7cmV0dXJuIG8uY2FsbCh0aGlzLGUsdCxuLHIpfXZhciBv
PWUoODApLGk9e2NsaXBib2FyZERhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuImNsaXBib2FyZERhdGEi
aW4gZT9lLmNsaXBib2FyZERhdGE6d2luZG93LmNsaXBib2FyZERhdGF9fTtvLmF1Z21lbnRDbGFz
cyhyLGkpLHQuZXhwb3J0cz1yfSx7ODA6ODB9XSw3ODpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3Ry
aWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3JldHVybiBvLmNhbGwodGhpcyxlLHQsbixyKX12YXIg
bz1lKDgwKSxpPXtkYXRhOm51bGx9O28uYXVnbWVudENsYXNzKHIsaSksdC5leHBvcnRzPXJ9LHs4
MDo4MH1dLDc5OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4s
cil7cmV0dXJuIG8uY2FsbCh0aGlzLGUsdCxuLHIpfXZhciBvPWUoODQpLGk9e2RhdGFUcmFuc2Zl
cjpudWxsfTtvLmF1Z21lbnRDbGFzcyhyLGkpLHQuZXhwb3J0cz1yfSx7ODQ6ODR9XSw4MDpbZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3RoaXMuZGlzcGF0
Y2hDb25maWc9ZSx0aGlzLl90YXJnZXRJbnN0PXQsdGhpcy5uYXRpdmVFdmVudD1uO3ZhciBvPXRo
aXMuY29uc3RydWN0b3IuSW50ZXJmYWNlO2Zvcih2YXIgaSBpbiBvKWlmKG8uaGFzT3duUHJvcGVy
dHkoaSkpe3ZhciBzPW9baV07cz90aGlzW2ldPXMobik6InRhcmdldCI9PT1pP3RoaXMudGFyZ2V0
PXI6dGhpc1tpXT1uW2ldfXZhciB1PW51bGwhPW4uZGVmYXVsdFByZXZlbnRlZD9uLmRlZmF1bHRQ
cmV2ZW50ZWQ6ITE9PT1uLnJldHVyblZhbHVlO3JldHVybiB0aGlzLmlzRGVmYXVsdFByZXZlbnRl
ZD11P2EudGhhdFJldHVybnNUcnVlOmEudGhhdFJldHVybnNGYWxzZSx0aGlzLmlzUHJvcGFnYXRp
b25TdG9wcGVkPWEudGhhdFJldHVybnNGYWxzZSx0aGlzfXZhciBvPWUoMTQzKSxpPWUoMjQpLGE9
ZSgxMjkpLHM9KGUoMTQyKSxbImRpc3BhdGNoQ29uZmlnIiwiX3RhcmdldEluc3QiLCJuYXRpdmVF
dmVudCIsImlzRGVmYXVsdFByZXZlbnRlZCIsImlzUHJvcGFnYXRpb25TdG9wcGVkIiwiX2Rpc3Bh
dGNoTGlzdGVuZXJzIiwiX2Rpc3BhdGNoSW5zdGFuY2VzIl0pLHU9e3R5cGU6bnVsbCx0YXJnZXQ6
bnVsbCxjdXJyZW50VGFyZ2V0OmEudGhhdFJldHVybnNOdWxsLGV2ZW50UGhhc2U6bnVsbCxidWJi
bGVzOm51bGwsY2FuY2VsYWJsZTpudWxsLHRpbWVTdGFtcDpmdW5jdGlvbihlKXtyZXR1cm4gZS50
aW1lU3RhbXB8fERhdGUubm93KCl9LGRlZmF1bHRQcmV2ZW50ZWQ6bnVsbCxpc1RydXN0ZWQ6bnVs
bH07byhyLnByb3RvdHlwZSx7cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRQ
cmV2ZW50ZWQ9ITA7dmFyIGU9dGhpcy5uYXRpdmVFdmVudDtlJiYoZS5wcmV2ZW50RGVmYXVsdD9l
LnByZXZlbnREZWZhdWx0KCk6InVua25vd24iIT10eXBlb2YgZS5yZXR1cm5WYWx1ZSYmKGUucmV0
dXJuVmFsdWU9ITEpLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWEudGhhdFJldHVybnNUcnVlKX0s
c3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5uYXRpdmVFdmVudDtlJiYoZS5z
dG9wUHJvcGFnYXRpb24/ZS5zdG9wUHJvcGFnYXRpb24oKToidW5rbm93biIhPXR5cGVvZiBlLmNh
bmNlbEJ1YmJsZSYmKGUuY2FuY2VsQnViYmxlPSEwKSx0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVk
PWEudGhhdFJldHVybnNUcnVlKX0scGVyc2lzdDpmdW5jdGlvbigpe3RoaXMuaXNQZXJzaXN0ZW50
PWEudGhhdFJldHVybnNUcnVlfSxpc1BlcnNpc3RlbnQ6YS50aGF0UmV0dXJuc0ZhbHNlLGRlc3Ry
dWN0b3I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbnN0cnVjdG9yLkludGVyZmFjZTtmb3IodmFy
IHQgaW4gZSl0aGlzW3RdPW51bGw7Zm9yKHZhciBuPTA7bjxzLmxlbmd0aDtuKyspdGhpc1tzW25d
XT1udWxsfX0pLHIuSW50ZXJmYWNlPXUsci5hdWdtZW50Q2xhc3M9ZnVuY3Rpb24oZSx0KXt2YXIg
bj10aGlzLHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPW4ucHJvdG90eXBlO3ZhciBhPW5ldyBy
O28oYSxlLnByb3RvdHlwZSksZS5wcm90b3R5cGU9YSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1l
LGUuSW50ZXJmYWNlPW8oe30sbi5JbnRlcmZhY2UsdCksZS5hdWdtZW50Q2xhc3M9bi5hdWdtZW50
Q2xhc3MsaS5hZGRQb29saW5nVG8oZSxpLmZvdXJBcmd1bWVudFBvb2xlcil9LGkuYWRkUG9vbGlu
Z1RvKHIsaS5mb3VyQXJndW1lbnRQb29sZXIpLHQuZXhwb3J0cz1yfSx7MTI5OjEyOSwxNDI6MTQy
LDE0MzoxNDMsMjQ6MjR9XSw4MTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlv
biByKGUsdCxuLHIpe3JldHVybiBvLmNhbGwodGhpcyxlLHQsbixyKX12YXIgbz1lKDg3KSxpPXty
ZWxhdGVkVGFyZ2V0Om51bGx9O28uYXVnbWVudENsYXNzKHIsaSksdC5leHBvcnRzPXJ9LHs4Nzo4
N31dLDgyOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7
cmV0dXJuIG8uY2FsbCh0aGlzLGUsdCxuLHIpfXZhciBvPWUoODApLGk9e2RhdGE6bnVsbH07by5h
dWdtZW50Q2xhc3MocixpKSx0LmV4cG9ydHM9cn0sezgwOjgwfV0sODM6W2Z1bmN0aW9uKGUsdCxu
KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXtyZXR1cm4gby5jYWxsKHRoaXMsZSx0
LG4scil9dmFyIG89ZSg4NyksaT1lKDk5KSxhPWUoMTAwKSxzPWUoMTAxKSx1PXtrZXk6YSxsb2Nh
dGlvbjpudWxsLGN0cmxLZXk6bnVsbCxzaGlmdEtleTpudWxsLGFsdEtleTpudWxsLG1ldGFLZXk6
bnVsbCxyZXBlYXQ6bnVsbCxsb2NhbGU6bnVsbCxnZXRNb2RpZmllclN0YXRlOnMsY2hhckNvZGU6
ZnVuY3Rpb24oZSl7cmV0dXJuImtleXByZXNzIj09PWUudHlwZT9pKGUpOjB9LGtleUNvZGU6ZnVu
Y3Rpb24oZSl7cmV0dXJuImtleWRvd24iPT09ZS50eXBlfHwia2V5dXAiPT09ZS50eXBlP2Uua2V5
Q29kZTowfSx3aGljaDpmdW5jdGlvbihlKXtyZXR1cm4ia2V5cHJlc3MiPT09ZS50eXBlP2koZSk6
ImtleWRvd24iPT09ZS50eXBlfHwia2V5dXAiPT09ZS50eXBlP2Uua2V5Q29kZTowfX07by5hdWdt
ZW50Q2xhc3Mocix1KSx0LmV4cG9ydHM9cn0sezEwMDoxMDAsMTAxOjEwMSw4Nzo4Nyw5OTo5OX1d
LDg0OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7cmV0
dXJuIG8uY2FsbCh0aGlzLGUsdCxuLHIpfXZhciBvPWUoODcpLGk9ZSg5MCksYT1lKDEwMSkscz17
c2NyZWVuWDpudWxsLHNjcmVlblk6bnVsbCxjbGllbnRYOm51bGwsY2xpZW50WTpudWxsLGN0cmxL
ZXk6bnVsbCxzaGlmdEtleTpudWxsLGFsdEtleTpudWxsLG1ldGFLZXk6bnVsbCxnZXRNb2RpZmll
clN0YXRlOmEsYnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUuYnV0dG9uO3JldHVybiJ3aGljaCJp
biBlP3Q6Mj09PXQ/Mjo0PT09dD8xOjB9LGJ1dHRvbnM6bnVsbCxyZWxhdGVkVGFyZ2V0OmZ1bmN0
aW9uKGUpe3JldHVybiBlLnJlbGF0ZWRUYXJnZXR8fChlLmZyb21FbGVtZW50PT09ZS5zcmNFbGVt
ZW50P2UudG9FbGVtZW50OmUuZnJvbUVsZW1lbnQpfSxwYWdlWDpmdW5jdGlvbihlKXtyZXR1cm4i
cGFnZVgiaW4gZT9lLnBhZ2VYOmUuY2xpZW50WCtpLmN1cnJlbnRTY3JvbGxMZWZ0fSxwYWdlWTpm
dW5jdGlvbihlKXtyZXR1cm4icGFnZVkiaW4gZT9lLnBhZ2VZOmUuY2xpZW50WStpLmN1cnJlbnRT
Y3JvbGxUb3B9fTtvLmF1Z21lbnRDbGFzcyhyLHMpLHQuZXhwb3J0cz1yfSx7MTAxOjEwMSw4Nzo4
Nyw5MDo5MH1dLDg1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0
LG4scil7cmV0dXJuIG8uY2FsbCh0aGlzLGUsdCxuLHIpfXZhciBvPWUoODcpLGk9ZSgxMDEpLGE9
e3RvdWNoZXM6bnVsbCx0YXJnZXRUb3VjaGVzOm51bGwsY2hhbmdlZFRvdWNoZXM6bnVsbCxhbHRL
ZXk6bnVsbCxtZXRhS2V5Om51bGwsY3RybEtleTpudWxsLHNoaWZ0S2V5Om51bGwsZ2V0TW9kaWZp
ZXJTdGF0ZTppfTtvLmF1Z21lbnRDbGFzcyhyLGEpLHQuZXhwb3J0cz1yfSx7MTAxOjEwMSw4Nzo4
N31dLDg2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7
cmV0dXJuIG8uY2FsbCh0aGlzLGUsdCxuLHIpfXZhciBvPWUoODApLGk9e3Byb3BlcnR5TmFtZTpu
dWxsLGVsYXBzZWRUaW1lOm51bGwscHNldWRvRWxlbWVudDpudWxsfTtvLmF1Z21lbnRDbGFzcyhy
LGkpLHQuZXhwb3J0cz1yfSx7ODA6ODB9XSw4NzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0
IjtmdW5jdGlvbiByKGUsdCxuLHIpe3JldHVybiBvLmNhbGwodGhpcyxlLHQsbixyKX12YXIgbz1l
KDgwKSxpPWUoMTAyKSxhPXt2aWV3OmZ1bmN0aW9uKGUpe2lmKGUudmlldylyZXR1cm4gZS52aWV3
O3ZhciB0PWkoZSk7aWYodC53aW5kb3c9PT10KXJldHVybiB0O3ZhciBuPXQub3duZXJEb2N1bWVu
dDtyZXR1cm4gbj9uLmRlZmF1bHRWaWV3fHxuLnBhcmVudFdpbmRvdzp3aW5kb3d9LGRldGFpbDpm
dW5jdGlvbihlKXtyZXR1cm4gZS5kZXRhaWx8fDB9fTtvLmF1Z21lbnRDbGFzcyhyLGEpLHQuZXhw
b3J0cz1yfSx7MTAyOjEwMiw4MDo4MH1dLDg4OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3Qi
O2Z1bmN0aW9uIHIoZSx0LG4scil7cmV0dXJuIG8uY2FsbCh0aGlzLGUsdCxuLHIpfXZhciBvPWUo
ODQpLGk9e2RlbHRhWDpmdW5jdGlvbihlKXtyZXR1cm4iZGVsdGFYImluIGU/ZS5kZWx0YVg6Indo
ZWVsRGVsdGFYImluIGU/LWUud2hlZWxEZWx0YVg6MH0sZGVsdGFZOmZ1bmN0aW9uKGUpe3JldHVy
biJkZWx0YVkiaW4gZT9lLmRlbHRhWToid2hlZWxEZWx0YVkiaW4gZT8tZS53aGVlbERlbHRhWToi
d2hlZWxEZWx0YSJpbiBlPy1lLndoZWVsRGVsdGE6MH0sZGVsdGFaOm51bGwsZGVsdGFNb2RlOm51
bGx9O28uYXVnbWVudENsYXNzKHIsaSksdC5leHBvcnRzPXJ9LHs4NDo4NH1dLDg5OltmdW5jdGlv
bihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMTEyKSxvPShlKDEzNykse30pLGk9e3JlaW5p
dGlhbGl6ZVRyYW5zYWN0aW9uOmZ1bmN0aW9uKCl7dGhpcy50cmFuc2FjdGlvbldyYXBwZXJzPXRo
aXMuZ2V0VHJhbnNhY3Rpb25XcmFwcGVycygpLHRoaXMud3JhcHBlckluaXREYXRhP3RoaXMud3Jh
cHBlckluaXREYXRhLmxlbmd0aD0wOnRoaXMud3JhcHBlckluaXREYXRhPVtdLHRoaXMuX2lzSW5U
cmFuc2FjdGlvbj0hMX0sX2lzSW5UcmFuc2FjdGlvbjohMSxnZXRUcmFuc2FjdGlvbldyYXBwZXJz
Om51bGwsaXNJblRyYW5zYWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9pc0luVHJhbnNh
Y3Rpb259LHBlcmZvcm06ZnVuY3Rpb24oZSx0LG4sbyxpLGEscyx1KXt0aGlzLmlzSW5UcmFuc2Fj
dGlvbigpJiZyKCIyNyIpO3ZhciBsLGM7dHJ5e3RoaXMuX2lzSW5UcmFuc2FjdGlvbj0hMCxsPSEw
LHRoaXMuaW5pdGlhbGl6ZUFsbCgwKSxjPWUuY2FsbCh0LG4sbyxpLGEscyx1KSxsPSExfWZpbmFs
bHl7dHJ5e2lmKGwpdHJ5e3RoaXMuY2xvc2VBbGwoMCl9Y2F0Y2goZSl7fWVsc2UgdGhpcy5jbG9z
ZUFsbCgwKX1maW5hbGx5e3RoaXMuX2lzSW5UcmFuc2FjdGlvbj0hMX19cmV0dXJuIGN9LGluaXRp
YWxpemVBbGw6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJhbnNhY3Rpb25XcmFwcGVycyxu
PWU7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07dHJ5e3RoaXMud3JhcHBlckluaXREYXRhW25d
PW8sdGhpcy53cmFwcGVySW5pdERhdGFbbl09ci5pbml0aWFsaXplP3IuaW5pdGlhbGl6ZS5jYWxs
KHRoaXMpOm51bGx9ZmluYWxseXtpZih0aGlzLndyYXBwZXJJbml0RGF0YVtuXT09PW8pdHJ5e3Ro
aXMuaW5pdGlhbGl6ZUFsbChuKzEpfWNhdGNoKGUpe319fX0sY2xvc2VBbGw6ZnVuY3Rpb24oZSl7
dGhpcy5pc0luVHJhbnNhY3Rpb24oKXx8cigiMjgiKTtmb3IodmFyIHQ9dGhpcy50cmFuc2FjdGlv
bldyYXBwZXJzLG49ZTtuPHQubGVuZ3RoO24rKyl7dmFyIGksYT10W25dLHM9dGhpcy53cmFwcGVy
SW5pdERhdGFbbl07dHJ5e2k9ITAscyE9PW8mJmEuY2xvc2UmJmEuY2xvc2UuY2FsbCh0aGlzLHMp
LGk9ITF9ZmluYWxseXtpZihpKXRyeXt0aGlzLmNsb3NlQWxsKG4rMSl9Y2F0Y2goZSl7fX19dGhp
cy53cmFwcGVySW5pdERhdGEubGVuZ3RoPTB9fTt0LmV4cG9ydHM9aX0sezExMjoxMTIsMTM3OjEz
N31dLDkwOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPXtjdXJyZW50U2Nyb2xs
TGVmdDowLGN1cnJlbnRTY3JvbGxUb3A6MCxyZWZyZXNoU2Nyb2xsVmFsdWVzOmZ1bmN0aW9uKGUp
e3IuY3VycmVudFNjcm9sbExlZnQ9ZS54LHIuY3VycmVudFNjcm9sbFRvcD1lLnl9fTt0LmV4cG9y
dHM9cn0se31dLDkxOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0
KXtyZXR1cm4gbnVsbD09dCYmbygiMzAiKSxudWxsPT1lP3Q6QXJyYXkuaXNBcnJheShlKT9BcnJh
eS5pc0FycmF5KHQpPyhlLnB1c2guYXBwbHkoZSx0KSxlKTooZS5wdXNoKHQpLGUpOkFycmF5Lmlz
QXJyYXkodCk/W2VdLmNvbmNhdCh0KTpbZSx0XX12YXIgbz1lKDExMik7ZSgxMzcpO3QuZXhwb3J0
cz1yfSx7MTEyOjExMiwxMzc6MTM3fV0sOTI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7
ZnVuY3Rpb24gcihlKXtmb3IodmFyIHQ9MSxuPTAscj0wLGk9ZS5sZW5ndGgsYT0tNCZpO3I8YTsp
e2Zvcih2YXIgcz1NYXRoLm1pbihyKzQwOTYsYSk7cjxzO3IrPTQpbis9KHQrPWUuY2hhckNvZGVB
dChyKSkrKHQrPWUuY2hhckNvZGVBdChyKzEpKSsodCs9ZS5jaGFyQ29kZUF0KHIrMikpKyh0Kz1l
LmNoYXJDb2RlQXQociszKSk7dCU9byxuJT1vfWZvcig7cjxpO3IrKyluKz10Kz1lLmNoYXJDb2Rl
QXQocik7cmV0dXJuIHQlPW8sbiU9byx0fG48PDE2fXZhciBvPTY1NTIxO3QuZXhwb3J0cz1yfSx7
fV0sOTM6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZnVuY3Rpb24oZSl7cmV0
dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBNU0FwcCYmTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rp
b24/ZnVuY3Rpb24odCxuLHIsbyl7TVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rp
b24oKXtyZXR1cm4gZSh0LG4scixvKX0pfTplfTt0LmV4cG9ydHM9cn0se31dLDk0OltmdW5jdGlv
bihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe3JldHVybiBudWxsPT10fHwi
Ym9vbGVhbiI9PXR5cGVvZiB0fHwiIj09PXQ/IiI6aXNOYU4odCl8fDA9PT10fHxpLmhhc093blBy
b3BlcnR5KGUpJiZpW2VdPyIiK3Q6KCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9dC50cmltKCkpLHQr
InB4Iil9dmFyIG89ZSg0KSxpPShlKDE0Miksby5pc1VuaXRsZXNzTnVtYmVyKTt0LmV4cG9ydHM9
cn0sezE0MjoxNDIsNDo0fV0sOTU6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rp
b24gcihlKXt2YXIgdD0iIitlLG49aS5leGVjKHQpO2lmKCFuKXJldHVybiB0O3ZhciByLG89IiIs
YT0wLHM9MDtmb3IoYT1uLmluZGV4O2E8dC5sZW5ndGg7YSsrKXtzd2l0Y2godC5jaGFyQ29kZUF0
KGEpKXtjYXNlIDM0OnI9IiZxdW90OyI7YnJlYWs7Y2FzZSAzODpyPSImYW1wOyI7YnJlYWs7Y2Fz
ZSAzOTpyPSImI3gyNzsiO2JyZWFrO2Nhc2UgNjA6cj0iJmx0OyI7YnJlYWs7Y2FzZSA2MjpyPSIm
Z3Q7IjticmVhaztkZWZhdWx0OmNvbnRpbnVlfXMhPT1hJiYobys9dC5zdWJzdHJpbmcocyxhKSks
cz1hKzEsbys9cn1yZXR1cm4gcyE9PWE/byt0LnN1YnN0cmluZyhzLGEpOm99ZnVuY3Rpb24gbyhl
KXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBlfHwibnVtYmVyIj09dHlwZW9mIGU/IiIrZTpyKGUp
fXZhciBpPS9bIicmPD5dLzt0LmV4cG9ydHM9b30se31dLDk2OltmdW5jdGlvbihlLHQsbil7InVz
ZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYobnVsbD09ZSlyZXR1cm4gbnVsbDtpZigxPT09ZS5u
b2RlVHlwZSlyZXR1cm4gZTt2YXIgdD1hLmdldChlKTtpZih0KXJldHVybiB0PXModCksdD9pLmdl
dE5vZGVGcm9tSW5zdGFuY2UodCk6bnVsbDsiZnVuY3Rpb24iPT10eXBlb2YgZS5yZW5kZXI/bygi
NDQiKTpvKCI0NSIsT2JqZWN0LmtleXMoZSkpfXZhciBvPWUoMTEyKSxpPShlKDExOSksZSgzMykp
LGE9ZSg1Nykscz1lKDEwMyk7ZSgxMzcpLGUoMTQyKTt0LmV4cG9ydHM9cn0sezEwMzoxMDMsMTEy
OjExMiwxMTk6MTE5LDEzNzoxMzcsMTQyOjE0MiwzMzozMyw1Nzo1N31dLDk3OltmdW5jdGlvbihl
LHQsbil7KGZ1bmN0aW9uKG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe2lmKGUm
JiJvYmplY3QiPT10eXBlb2YgZSl7dmFyIG89ZTt2b2lkIDA9PT1vW25dJiZudWxsIT10JiYob1tu
XT10KX19ZnVuY3Rpb24gbyhlLHQpe2lmKG51bGw9PWUpcmV0dXJuIGU7dmFyIG49e307cmV0dXJu
IGkoZSxyLG4pLG59dmFyIGk9KGUoMjIpLGUoMTE3KSk7ZSgxNDIpO3ZvaWQgMCE9PW4mJm4uZW52
LHQuZXhwb3J0cz1vfSkuY2FsbCh0aGlzLHZvaWQgMCl9LHsxMTc6MTE3LDE0MjoxNDIsMjI6MjJ9
XSw5ODpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXtBcnJh
eS5pc0FycmF5KGUpP2UuZm9yRWFjaCh0LG4pOmUmJnQuY2FsbChuLGUpfXQuZXhwb3J0cz1yfSx7
fV0sOTk6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdCxu
PWUua2V5Q29kZTtyZXR1cm4iY2hhckNvZGUiaW4gZT8wPT09KHQ9ZS5jaGFyQ29kZSkmJjEzPT09
biYmKHQ9MTMpOnQ9bix0Pj0zMnx8MTM9PT10P3Q6MH10LmV4cG9ydHM9cn0se31dLDEwMDpbZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKGUua2V5KXt2YXIgdD1p
W2Uua2V5XXx8ZS5rZXk7aWYoIlVuaWRlbnRpZmllZCIhPT10KXJldHVybiB0fWlmKCJrZXlwcmVz
cyI9PT1lLnR5cGUpe3ZhciBuPW8oZSk7cmV0dXJuIDEzPT09bj8iRW50ZXIiOlN0cmluZy5mcm9t
Q2hhckNvZGUobil9cmV0dXJuImtleWRvd24iPT09ZS50eXBlfHwia2V5dXAiPT09ZS50eXBlP2Fb
ZS5rZXlDb2RlXXx8IlVuaWRlbnRpZmllZCI6IiJ9dmFyIG89ZSg5OSksaT17RXNjOiJFc2NhcGUi
LFNwYWNlYmFyOiIgIixMZWZ0OiJBcnJvd0xlZnQiLFVwOiJBcnJvd1VwIixSaWdodDoiQXJyb3dS
aWdodCIsRG93bjoiQXJyb3dEb3duIixEZWw6IkRlbGV0ZSIsV2luOiJPUyIsTWVudToiQ29udGV4
dE1lbnUiLEFwcHM6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9sbExvY2siLE1velByaW50YWJs
ZUtleToiVW5pZGVudGlmaWVkIn0sYT17ODoiQmFja3NwYWNlIiw5OiJUYWIiLDEyOiJDbGVhciIs
MTM6IkVudGVyIiwxNjoiU2hpZnQiLDE3OiJDb250cm9sIiwxODoiQWx0IiwxOToiUGF1c2UiLDIw
OiJDYXBzTG9jayIsMjc6IkVzY2FwZSIsMzI6IiAiLDMzOiJQYWdlVXAiLDM0OiJQYWdlRG93biIs
MzU6IkVuZCIsMzY6IkhvbWUiLDM3OiJBcnJvd0xlZnQiLDM4OiJBcnJvd1VwIiwzOToiQXJyb3dS
aWdodCIsNDA6IkFycm93RG93biIsNDU6Ikluc2VydCIsNDY6IkRlbGV0ZSIsMTEyOiJGMSIsMTEz
OiJGMiIsMTE0OiJGMyIsMTE1OiJGNCIsMTE2OiJGNSIsMTE3OiJGNiIsMTE4OiJGNyIsMTE5OiJG
OCIsMTIwOiJGOSIsMTIxOiJGMTAiLDEyMjoiRjExIiwxMjM6IkYxMiIsMTQ0OiJOdW1Mb2NrIiwx
NDU6IlNjcm9sbExvY2siLDIyNDoiTWV0YSJ9O3QuZXhwb3J0cz1yfSx7OTk6OTl9XSwxMDE6W2Z1
bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD10aGlzLG49dC5u
YXRpdmVFdmVudDtpZihuLmdldE1vZGlmaWVyU3RhdGUpcmV0dXJuIG4uZ2V0TW9kaWZpZXJTdGF0
ZShlKTt2YXIgcj1pW2VdO3JldHVybiEhciYmISFuW3JdfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIHJ9
dmFyIGk9e0FsdDoiYWx0S2V5IixDb250cm9sOiJjdHJsS2V5IixNZXRhOiJtZXRhS2V5IixTaGlm
dDoic2hpZnRLZXkifTt0LmV4cG9ydHM9b30se31dLDEwMjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ug
c3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PWUudGFyZ2V0fHxlLnNyY0VsZW1lbnR8fHdpbmRv
dztyZXR1cm4gdC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCYmKHQ9dC5jb3JyZXNwb25kaW5nVXNl
RWxlbWVudCksMz09PXQubm9kZVR5cGU/dC5wYXJlbnROb2RlOnR9dC5leHBvcnRzPXJ9LHt9XSwx
MDM6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtmb3IodmFyIHQ7
KHQ9ZS5fcmVuZGVyZWROb2RlVHlwZSk9PT1vLkNPTVBPU0lURTspZT1lLl9yZW5kZXJlZENvbXBv
bmVudDtyZXR1cm4gdD09PW8uSE9TVD9lLl9yZW5kZXJlZENvbXBvbmVudDp0PT09by5FTVBUWT9u
dWxsOnZvaWQgMH12YXIgbz1lKDYyKTt0LmV4cG9ydHM9cn0sezYyOjYyfV0sMTA0OltmdW5jdGlv
bihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZSYmKG8mJmVbb118fGVb
aV0pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiB0fXZhciBvPSJmdW5jdGlvbiI9PXR5
cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixpPSJAQGl0ZXJhdG9yIjt0LmV4cG9ydHM9cn0s
e31dLDEwNTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2Zvcig7
ZSYmZS5maXJzdENoaWxkOyllPWUuZmlyc3RDaGlsZDtyZXR1cm4gZX1mdW5jdGlvbiBvKGUpe2Zv
cig7ZTspe2lmKGUubmV4dFNpYmxpbmcpcmV0dXJuIGUubmV4dFNpYmxpbmc7ZT1lLnBhcmVudE5v
ZGV9fWZ1bmN0aW9uIGkoZSx0KXtmb3IodmFyIG49cihlKSxpPTAsYT0wO247KXtpZigzPT09bi5u
b2RlVHlwZSl7aWYoYT1pK24udGV4dENvbnRlbnQubGVuZ3RoLGk8PXQmJmE+PXQpcmV0dXJue25v
ZGU6bixvZmZzZXQ6dC1pfTtpPWF9bj1yKG8obikpfX10LmV4cG9ydHM9aX0se31dLDEwNjpbZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7cmV0dXJuIWkmJm8uY2FuVXNl
RE9NJiYoaT0idGV4dENvbnRlbnQiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50PyJ0ZXh0Q29u
dGVudCI6ImlubmVyVGV4dCIpLGl9dmFyIG89ZSgxMjMpLGk9bnVsbDt0LmV4cG9ydHM9cn0sezEy
MzoxMjN9XSwxMDc6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQp
e3ZhciBuPXt9O3JldHVybiBuW2UudG9Mb3dlckNhc2UoKV09dC50b0xvd2VyQ2FzZSgpLG5bIldl
YmtpdCIrZV09IndlYmtpdCIrdCxuWyJNb3oiK2VdPSJtb3oiK3QsblsibXMiK2VdPSJNUyIrdCxu
WyJPIitlXT0ibyIrdC50b0xvd2VyQ2FzZSgpLG59ZnVuY3Rpb24gbyhlKXtpZihzW2VdKXJldHVy
biBzW2VdO2lmKCFhW2VdKXJldHVybiBlO3ZhciB0PWFbZV07Zm9yKHZhciBuIGluIHQpaWYodC5o
YXNPd25Qcm9wZXJ0eShuKSYmbiBpbiB1KXJldHVybiBzW2VdPXRbbl07cmV0dXJuIiJ9dmFyIGk9
ZSgxMjMpLGE9e2FuaW1hdGlvbmVuZDpyKCJBbmltYXRpb24iLCJBbmltYXRpb25FbmQiKSxhbmlt
YXRpb25pdGVyYXRpb246cigiQW5pbWF0aW9uIiwiQW5pbWF0aW9uSXRlcmF0aW9uIiksYW5pbWF0
aW9uc3RhcnQ6cigiQW5pbWF0aW9uIiwiQW5pbWF0aW9uU3RhcnQiKSx0cmFuc2l0aW9uZW5kOnIo
IlRyYW5zaXRpb24iLCJUcmFuc2l0aW9uRW5kIil9LHM9e30sdT17fTtpLmNhblVzZURPTSYmKHU9
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUsIkFuaW1hdGlvbkV2ZW50ImluIHdp
bmRvd3x8KGRlbGV0ZSBhLmFuaW1hdGlvbmVuZC5hbmltYXRpb24sZGVsZXRlIGEuYW5pbWF0aW9u
aXRlcmF0aW9uLmFuaW1hdGlvbixkZWxldGUgYS5hbmltYXRpb25zdGFydC5hbmltYXRpb24pLCJU
cmFuc2l0aW9uRXZlbnQiaW4gd2luZG93fHxkZWxldGUgYS50cmFuc2l0aW9uZW5kLnRyYW5zaXRp
b24pLHQuZXhwb3J0cz1vfSx7MTIzOjEyM31dLDEwODpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3Ry
aWN0IjtmdW5jdGlvbiByKGUpe2lmKGUpe3ZhciB0PWUuZ2V0TmFtZSgpO2lmKHQpcmV0dXJuIiBD
aGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgIit0KyJgLiJ9cmV0dXJuIiJ9ZnVuY3Rpb24gbyhl
KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmdm9pZCAwIT09ZS5wcm90b3R5cGUmJiJmdW5j
dGlvbiI9PXR5cGVvZiBlLnByb3RvdHlwZS5tb3VudENvbXBvbmVudCYmImZ1bmN0aW9uIj09dHlw
ZW9mIGUucHJvdG90eXBlLnJlY2VpdmVDb21wb25lbnR9ZnVuY3Rpb24gaShlLHQpe3ZhciBuO2lm
KG51bGw9PT1lfHwhMT09PWUpbj1sLmNyZWF0ZShpKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2Yg
ZSl7dmFyIHM9ZSx1PXMudHlwZTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdSYmInN0cmluZyIhPXR5
cGVvZiB1KXt2YXIgZD0iIjtkKz1yKHMuX293bmVyKSxhKCIxMzAiLG51bGw9PXU/dTp0eXBlb2Yg
dSxkKX0ic3RyaW5nIj09dHlwZW9mIHMudHlwZT9uPWMuY3JlYXRlSW50ZXJuYWxDb21wb25lbnQo
cyk6byhzLnR5cGUpPyhuPW5ldyBzLnR5cGUocyksbi5nZXRIb3N0Tm9kZXx8KG4uZ2V0SG9zdE5v
ZGU9bi5nZXROYXRpdmVOb2RlKSk6bj1uZXcgcChzKX1lbHNlInN0cmluZyI9PXR5cGVvZiBlfHwi
bnVtYmVyIj09dHlwZW9mIGU/bj1jLmNyZWF0ZUluc3RhbmNlRm9yVGV4dChlKTphKCIxMzEiLHR5
cGVvZiBlKTtyZXR1cm4gbi5fbW91bnRJbmRleD0wLG4uX21vdW50SW1hZ2U9bnVsbCxufXZhciBh
PWUoMTEyKSxzPWUoMTQzKSx1PWUoMjkpLGw9ZSg0OSksYz1lKDU0KSxwPShlKDEyMSksZSgxMzcp
LGUoMTQyKSxmdW5jdGlvbihlKXt0aGlzLmNvbnN0cnVjdChlKX0pO3MocC5wcm90b3R5cGUsdSx7
X2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnQ6aX0pLHQuZXhwb3J0cz1pfSx7MTEyOjExMiwxMjE6
MTIxLDEzNzoxMzcsMTQyOjE0MiwxNDM6MTQzLDI5OjI5LDQ5OjQ5LDU0OjU0fV0sMTA5OltmdW5j
dGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZighaS5jYW5Vc2VET018
fHQmJiEoImFkZEV2ZW50TGlzdGVuZXIiaW4gZG9jdW1lbnQpKXJldHVybiExO3ZhciBuPSJvbiIr
ZSxyPW4gaW4gZG9jdW1lbnQ7aWYoIXIpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpO2Euc2V0QXR0cmlidXRlKG4sInJldHVybjsiKSxyPSJmdW5jdGlvbiI9PXR5cGVvZiBhW25d
fXJldHVybiFyJiZvJiYid2hlZWwiPT09ZSYmKHI9ZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uaGFz
RmVhdHVyZSgiRXZlbnRzLndoZWVsIiwiMy4wIikpLHJ9dmFyIG8saT1lKDEyMyk7aS5jYW5Vc2VE
T00mJihvPWRvY3VtZW50LmltcGxlbWVudGF0aW9uJiZkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5o
YXNGZWF0dXJlJiYhMCE9PWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoIiIsIiIp
KSx0LmV4cG9ydHM9cn0sezEyMzoxMjN9XSwxMTA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmlj
dCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1lJiZlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJD
YXNlKCk7cmV0dXJuImlucHV0Ij09PXQ/ISFvW2UudHlwZV06InRleHRhcmVhIj09PXR9dmFyIG89
e2NvbG9yOiEwLGRhdGU6ITAsZGF0ZXRpbWU6ITAsImRhdGV0aW1lLWxvY2FsIjohMCxlbWFpbDoh
MCxtb250aDohMCxudW1iZXI6ITAscGFzc3dvcmQ6ITAscmFuZ2U6ITAsc2VhcmNoOiEwLHRlbDoh
MCx0ZXh0OiEwLHRpbWU6ITAsdXJsOiEwLHdlZWs6ITB9O3QuZXhwb3J0cz1yfSx7fV0sMTExOltm
dW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuJyInK28oZSkr
JyInfXZhciBvPWUoOTUpO3QuZXhwb3J0cz1yfSx7OTU6OTV9XSwxMTI6W2Z1bmN0aW9uKGUsdCxu
KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aC0x
LG49Ik1pbmlmaWVkIFJlYWN0IGVycm9yICMiK2UrIjsgdmlzaXQgaHR0cDovL2ZhY2Vib29rLmdp
dGh1Yi5pby9yZWFjdC9kb2NzL2Vycm9yLWRlY29kZXIuaHRtbD9pbnZhcmlhbnQ9IitlLHI9MDty
PHQ7cisrKW4rPSImYXJnc1tdPSIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1tyKzFdKTtu
Kz0iIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZp
cm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4i
O3ZhciBvPW5ldyBFcnJvcihuKTt0aHJvdyBvLm5hbWU9IkludmFyaWFudCBWaW9sYXRpb24iLG8u
ZnJhbWVzVG9Qb3A9MSxvfXQuZXhwb3J0cz1yfSx7fV0sMTEzOltmdW5jdGlvbihlLHQsbil7InVz
ZSBzdHJpY3QiO3ZhciByPWUoNjApO3QuZXhwb3J0cz1yLnJlbmRlclN1YnRyZWVJbnRvQ29udGFp
bmVyfSx7NjA6NjB9XSwxMTQ6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHIsbz1l
KDEyMyksaT1lKDEwKSxhPS9eWyBcclxuXHRcZl0vLHM9LzwoIS0tfGxpbmt8bm9zY3JpcHR8bWV0
YXxzY3JpcHR8c3R5bGUpWyBcclxuXHRcZlwvPl0vLHU9ZSg5MyksbD11KGZ1bmN0aW9uKGUsdCl7
aWYoZS5uYW1lc3BhY2VVUkkhPT1pLnN2Z3x8ImlubmVySFRNTCJpbiBlKWUuaW5uZXJIVE1MPXQ7
ZWxzZXtyPXJ8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHIuaW5uZXJIVE1MPSI8c3Zn
PiIrdCsiPC9zdmc+Ijtmb3IodmFyIG49ci5maXJzdENoaWxkO24uZmlyc3RDaGlsZDspZS5hcHBl
bmRDaGlsZChuLmZpcnN0Q2hpbGQpfX0pO2lmKG8uY2FuVXNlRE9NKXt2YXIgYz1kb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJkaXYiKTtjLmlubmVySFRNTD0iICIsIiI9PT1jLmlubmVySFRNTCYmKGw9
ZnVuY3Rpb24oZSx0KXtpZihlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQo
ZSxlKSxhLnRlc3QodCl8fCI8Ij09PXRbMF0mJnMudGVzdCh0KSl7ZS5pbm5lckhUTUw9U3RyaW5n
LmZyb21DaGFyQ29kZSg2NTI3OSkrdDt2YXIgbj1lLmZpcnN0Q2hpbGQ7MT09PW4uZGF0YS5sZW5n
dGg/ZS5yZW1vdmVDaGlsZChuKTpuLmRlbGV0ZURhdGEoMCwxKX1lbHNlIGUuaW5uZXJIVE1MPXR9
KSxjPW51bGx9dC5leHBvcnRzPWx9LHsxMDoxMCwxMjM6MTIzLDkzOjkzfV0sMTE1OltmdW5jdGlv
bihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMTIzKSxvPWUoOTUpLGk9ZSgxMTQpLGE9ZnVu
Y3Rpb24oZSx0KXtpZih0KXt2YXIgbj1lLmZpcnN0Q2hpbGQ7aWYobiYmbj09PWUubGFzdENoaWxk
JiYzPT09bi5ub2RlVHlwZSlyZXR1cm4gdm9pZChuLm5vZGVWYWx1ZT10KX1lLnRleHRDb250ZW50
PXR9O3IuY2FuVXNlRE9NJiYoInRleHRDb250ZW50ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVu
dHx8KGE9ZnVuY3Rpb24oZSx0KXtpZigzPT09ZS5ub2RlVHlwZSlyZXR1cm4gdm9pZChlLm5vZGVW
YWx1ZT10KTtpKGUsbyh0KSl9KSksdC5leHBvcnRzPWF9LHsxMTQ6MTE0LDEyMzoxMjMsOTU6OTV9
XSwxMTY6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBu
PW51bGw9PT1lfHwhMT09PWUscj1udWxsPT09dHx8ITE9PT10O2lmKG58fHIpcmV0dXJuIG49PT1y
O3ZhciBvPXR5cGVvZiBlLGk9dHlwZW9mIHQ7cmV0dXJuInN0cmluZyI9PT1vfHwibnVtYmVyIj09
PW8/InN0cmluZyI9PT1pfHwibnVtYmVyIj09PWk6Im9iamVjdCI9PT1pJiZlLnR5cGU9PT10LnR5
cGUmJmUua2V5PT09dC5rZXl9dC5leHBvcnRzPXJ9LHt9XSwxMTc6W2Z1bmN0aW9uKGUsdCxuKXsi
dXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBlJiYib2JqZWN0Ij09dHlwZW9mIGUm
Jm51bGwhPWUua2V5P2wuZXNjYXBlKGUua2V5KTp0LnRvU3RyaW5nKDM2KX1mdW5jdGlvbiBvKGUs
dCxuLGkpe3ZhciBkPXR5cGVvZiBlO2lmKCJ1bmRlZmluZWQiIT09ZCYmImJvb2xlYW4iIT09ZHx8
KGU9bnVsbCksbnVsbD09PWV8fCJzdHJpbmciPT09ZHx8Im51bWJlciI9PT1kfHwib2JqZWN0Ij09
PWQmJmUuJCR0eXBlb2Y9PT1zKXJldHVybiBuKGksZSwiIj09PXQ/YytyKGUsMCk6dCksMTt2YXIg
ZixoLG09MCx2PSIiPT09dD9jOnQrcDtpZihBcnJheS5pc0FycmF5KGUpKWZvcih2YXIgZz0wO2c8
ZS5sZW5ndGg7ZysrKWY9ZVtnXSxoPXYrcihmLGcpLG0rPW8oZixoLG4saSk7ZWxzZXt2YXIgeT11
KGUpO2lmKHkpe3ZhciBfLEM9eS5jYWxsKGUpO2lmKHkhPT1lLmVudHJpZXMpZm9yKHZhciBiPTA7
IShfPUMubmV4dCgpKS5kb25lOylmPV8udmFsdWUsaD12K3IoZixiKyspLG0rPW8oZixoLG4saSk7
ZWxzZSBmb3IoOyEoXz1DLm5leHQoKSkuZG9uZTspe3ZhciBFPV8udmFsdWU7RSYmKGY9RVsxXSxo
PXYrbC5lc2NhcGUoRVswXSkrcCtyKGYsMCksbSs9byhmLGgsbixpKSl9fWVsc2UgaWYoIm9iamVj
dCI9PT1kKXt2YXIgeD1TdHJpbmcoZSk7YSgiMzEiLCJbb2JqZWN0IE9iamVjdF0iPT09eD8ib2Jq
ZWN0IHdpdGgga2V5cyB7IitPYmplY3Qua2V5cyhlKS5qb2luKCIsICIpKyJ9Ijp4LCIiKX19cmV0
dXJuIG19ZnVuY3Rpb24gaShlLHQsbil7cmV0dXJuIG51bGw9PWU/MDpvKGUsIiIsdCxuKX12YXIg
YT1lKDExMikscz0oZSgxMTkpLGUoNDgpKSx1PWUoMTA0KSxsPShlKDEzNyksZSgyMikpLGM9KGUo
MTQyKSwiLiIpLHA9IjoiO3QuZXhwb3J0cz1pfSx7MTA0OjEwNCwxMTI6MTEyLDExOToxMTksMTM3
OjEzNywxNDI6MTQyLDIyOjIyLDQ4OjQ4fV0sMTE4OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJp
Y3QiO3ZhciByPShlKDE0MyksZSgxMjkpKSxvPShlKDE0Mikscik7dC5leHBvcnRzPW99LHsxMjk6
MTI5LDE0MjoxNDIsMTQzOjE0M31dLDExOTpbZnVuY3Rpb24odCxuLHIpeyJ1c2Ugc3RyaWN0Ijt2
YXIgbz1lLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVE
O24uZXhwb3J0cz1vLlJlYWN0Q3VycmVudE93bmVyfSx7fV0sMTIwOltmdW5jdGlvbih0LG4scil7
InVzZSBzdHJpY3QiO24uZXhwb3J0cz1lfSx7fV0sMTIxOltmdW5jdGlvbih0LG4scil7InVzZSBz
dHJpY3QiO3ZhciBvPWUuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExf
QkVfRklSRUQ7bi5leHBvcnRzPW8uZ2V0TmV4dERlYnVnSUR9LHt9XSwxMjI6W2Z1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgxMjkpLG89e2xpc3RlbjpmdW5jdGlvbihlLHQsbil7
cmV0dXJuIGUuYWRkRXZlbnRMaXN0ZW5lcj8oZS5hZGRFdmVudExpc3RlbmVyKHQsbiwhMSkse3Jl
bW92ZTpmdW5jdGlvbigpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4sITEpfX0pOmUuYXR0YWNo
RXZlbnQ/KGUuYXR0YWNoRXZlbnQoIm9uIit0LG4pLHtyZW1vdmU6ZnVuY3Rpb24oKXtlLmRldGFj
aEV2ZW50KCJvbiIrdCxuKX19KTp2b2lkIDB9LGNhcHR1cmU6ZnVuY3Rpb24oZSx0LG4pe3JldHVy
biBlLmFkZEV2ZW50TGlzdGVuZXI/KGUuYWRkRXZlbnRMaXN0ZW5lcih0LG4sITApLHtyZW1vdmU6
ZnVuY3Rpb24oKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuLCEwKX19KTp7cmVtb3ZlOnJ9fSxy
ZWdpc3RlckRlZmF1bHQ6ZnVuY3Rpb24oKXt9fTt0LmV4cG9ydHM9b30sezEyOToxMjl9XSwxMjM6
W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ISgidW5kZWZpbmVkIj09dHlwZW9m
IHdpbmRvd3x8IXdpbmRvdy5kb2N1bWVudHx8IXdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50
KSxvPXtjYW5Vc2VET006cixjYW5Vc2VXb3JrZXJzOiJ1bmRlZmluZWQiIT10eXBlb2YgV29ya2Vy
LGNhblVzZUV2ZW50TGlzdGVuZXJzOnImJiEoIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyJiYhd2lu
ZG93LmF0dGFjaEV2ZW50KSxjYW5Vc2VWaWV3cG9ydDpyJiYhIXdpbmRvdy5zY3JlZW4saXNJbldv
cmtlcjohcn07dC5leHBvcnRzPW99LHt9XSwxMjQ6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmlj
dCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZS5yZXBsYWNlKG8sZnVuY3Rpb24oZSx0KXtyZXR1cm4g
dC50b1VwcGVyQ2FzZSgpfSl9dmFyIG89Ly0oLikvZzt0LmV4cG9ydHM9cn0se31dLDEyNTpbZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBvKGUucmVwbGFj
ZShpLCJtcy0iKSl9dmFyIG89ZSgxMjQpLGk9L14tbXMtLzt0LmV4cG9ydHM9cn0sezEyNDoxMjR9
XSwxMjY6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVy
biEoIWV8fCF0KSYmKGU9PT10fHwhbyhlKSYmKG8odCk/cihlLHQucGFyZW50Tm9kZSk6ImNvbnRh
aW5zImluIGU/ZS5jb250YWlucyh0KTohIWUuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJiEhKDE2
JmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCkpKSl9dmFyIG89ZSgxMzkpO3QuZXhwb3J0cz1y
fSx7MTM5OjEzOX1dLDEyNzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBy
KGUpe3ZhciB0PWUubGVuZ3RoO2lmKChBcnJheS5pc0FycmF5KGUpfHwib2JqZWN0IiE9dHlwZW9m
IGUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKSYmYSghMSksIm51bWJlciIhPXR5cGVvZiB0JiZhKCEx
KSwwPT09dHx8dC0xIGluIGV8fGEoITEpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLmNhbGxlZSYmYSgh
MSksZS5oYXNPd25Qcm9wZXJ0eSl0cnl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxs
KGUpfWNhdGNoKGUpe31mb3IodmFyIG49QXJyYXkodCkscj0wO3I8dDtyKyspbltyXT1lW3JdO3Jl
dHVybiBufWZ1bmN0aW9uIG8oZSl7cmV0dXJuISFlJiYoIm9iamVjdCI9PXR5cGVvZiBlfHwiZnVu
Y3Rpb24iPT10eXBlb2YgZSkmJiJsZW5ndGgiaW4gZSYmISgic2V0SW50ZXJ2YWwiaW4gZSkmJiJu
dW1iZXIiIT10eXBlb2YgZS5ub2RlVHlwZSYmKEFycmF5LmlzQXJyYXkoZSl8fCJjYWxsZWUiaW4g
ZXx8Iml0ZW0iaW4gZSl9ZnVuY3Rpb24gaShlKXtyZXR1cm4gbyhlKT9BcnJheS5pc0FycmF5KGUp
P2Uuc2xpY2UoKTpyKGUpOltlXX12YXIgYT1lKDEzNyk7dC5leHBvcnRzPWl9LHsxMzc6MTM3fV0s
MTI4OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZS5t
YXRjaChjKTtyZXR1cm4gdCYmdFsxXS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIG8oZSx0KXt2YXIg
bj1sO2x8fHUoITEpO3ZhciBvPXIoZSksaT1vJiZzKG8pO2lmKGkpe24uaW5uZXJIVE1MPWlbMV0r
ZStpWzJdO2Zvcih2YXIgYz1pWzBdO2MtLTspbj1uLmxhc3RDaGlsZH1lbHNlIG4uaW5uZXJIVE1M
PWU7dmFyIHA9bi5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iik7cC5sZW5ndGgmJih0fHx1
KCExKSxhKHApLmZvckVhY2godCkpO2Zvcih2YXIgZD1BcnJheS5mcm9tKG4uY2hpbGROb2Rlcyk7
bi5sYXN0Q2hpbGQ7KW4ucmVtb3ZlQ2hpbGQobi5sYXN0Q2hpbGQpO3JldHVybiBkfXZhciBpPWUo
MTIzKSxhPWUoMTI3KSxzPWUoMTMzKSx1PWUoMTM3KSxsPWkuY2FuVXNlRE9NP2RvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOm51bGwsYz0vXlxzKjwoXHcrKS87dC5leHBvcnRzPW99LHsxMjM6
MTIzLDEyNzoxMjcsMTMzOjEzMywxMzc6MTM3fV0sMTI5OltmdW5jdGlvbihlLHQsbil7InVzZSBz
dHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBvPWZ1
bmN0aW9uKCl7fTtvLnRoYXRSZXR1cm5zPXIsby50aGF0UmV0dXJuc0ZhbHNlPXIoITEpLG8udGhh
dFJldHVybnNUcnVlPXIoITApLG8udGhhdFJldHVybnNOdWxsPXIobnVsbCksby50aGF0UmV0dXJu
c1RoaXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sby50aGF0UmV0dXJuc0FyZ3VtZW50PWZ1bmN0
aW9uKGUpe3JldHVybiBlfSx0LmV4cG9ydHM9b30se31dLDEzMDpbZnVuY3Rpb24oZSx0LG4peyJ1
c2Ugc3RyaWN0Ijt2YXIgcj17fTt0LmV4cG9ydHM9cn0se31dLDEzMTpbZnVuY3Rpb24oZSx0LG4p
eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3RyeXtlLmZvY3VzKCl9Y2F0Y2goZSl7fX10LmV4
cG9ydHM9cn0se31dLDEzMjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBy
KGUpe2lmKHZvaWQgMD09PShlPWV8fCgidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50P2RvY3Vt
ZW50OnZvaWQgMCkpKXJldHVybiBudWxsO3RyeXtyZXR1cm4gZS5hY3RpdmVFbGVtZW50fHxlLmJv
ZHl9Y2F0Y2godCl7cmV0dXJuIGUuYm9keX19dC5leHBvcnRzPXJ9LHt9XSwxMzM6W2Z1bmN0aW9u
KGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gYXx8aSghMSksZC5oYXNP
d25Qcm9wZXJ0eShlKXx8KGU9IioiKSxzLmhhc093blByb3BlcnR5KGUpfHwoYS5pbm5lckhUTUw9
IioiPT09ZT8iPGxpbmsgLz4iOiI8IitlKyI+PC8iK2UrIj4iLHNbZV09IWEuZmlyc3RDaGlsZCks
c1tlXT9kW2VdOm51bGx9dmFyIG89ZSgxMjMpLGk9ZSgxMzcpLGE9by5jYW5Vc2VET00/ZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik6bnVsbCxzPXt9LHU9WzEsJzxzZWxlY3QgbXVsdGlwbGU9
InRydWUiPicsIjwvc2VsZWN0PiJdLGw9WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLGM9WzMsIjx0
YWJsZT48dGJvZHk+PHRyPiIsIjwvdHI+PC90Ym9keT48L3RhYmxlPiJdLHA9WzEsJzxzdmcgeG1s
bnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4nLCI8L3N2Zz4iXSxkPXsiKiI6WzEsIj88
ZGl2PiIsIjwvZGl2PiJdLGFyZWE6WzEsIjxtYXA+IiwiPC9tYXA+Il0sY29sOlsyLCI8dGFibGU+
PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSxsZWdlbmQ6
WzEsIjxmaWVsZHNldD4iLCI8L2ZpZWxkc2V0PiJdLHBhcmFtOlsxLCI8b2JqZWN0PiIsIjwvb2Jq
ZWN0PiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSxvcHRncm91
cDp1LG9wdGlvbjp1LGNhcHRpb246bCxjb2xncm91cDpsLHRib2R5OmwsdGZvb3Q6bCx0aGVhZDps
LHRkOmMsdGg6Y307WyJjaXJjbGUiLCJjbGlwUGF0aCIsImRlZnMiLCJlbGxpcHNlIiwiZyIsImlt
YWdlIiwibGluZSIsImxpbmVhckdyYWRpZW50IiwibWFzayIsInBhdGgiLCJwYXR0ZXJuIiwicG9s
eWdvbiIsInBvbHlsaW5lIiwicmFkaWFsR3JhZGllbnQiLCJyZWN0Iiwic3RvcCIsInRleHQiLCJ0
c3BhbiJdLmZvckVhY2goZnVuY3Rpb24oZSl7ZFtlXT1wLHNbZV09ITB9KSx0LmV4cG9ydHM9cn0s
ezEyMzoxMjMsMTM3OjEzN31dLDEzNDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5j
dGlvbiByKGUpe3JldHVybiBlLldpbmRvdyYmZSBpbnN0YW5jZW9mIGUuV2luZG93P3t4OmUucGFn
ZVhPZmZzZXR8fGUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQseTplLnBhZ2VZ
T2Zmc2V0fHxlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3B9Ont4OmUuc2Nyb2xs
TGVmdCx5OmUuc2Nyb2xsVG9wfX10LmV4cG9ydHM9cn0se31dLDEzNTpbZnVuY3Rpb24oZSx0LG4p
eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlLnJlcGxhY2UobywiLSQxIikudG9M
b3dlckNhc2UoKX12YXIgbz0vKFtBLVpdKS9nO3QuZXhwb3J0cz1yfSx7fV0sMTM2OltmdW5jdGlv
bihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG8oZSkucmVwbGFjZShp
LCItbXMtIil9dmFyIG89ZSgxMzUpLGk9L15tcy0vO3QuZXhwb3J0cz1yfSx7MTM1OjEzNX1dLDEz
NzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIsaSxhLHMs
dSl7aWYobyh0KSwhZSl7dmFyIGw7aWYodm9pZCAwPT09dClsPW5ldyBFcnJvcigiTWluaWZpZWQg
ZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQg
Zm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5n
cy4iKTtlbHNle3ZhciBjPVtuLHIsaSxhLHMsdV0scD0wO2w9bmV3IEVycm9yKHQucmVwbGFjZSgv
JXMvZyxmdW5jdGlvbigpe3JldHVybiBjW3ArK119KSksbC5uYW1lPSJJbnZhcmlhbnQgVmlvbGF0
aW9uIn10aHJvdyBsLmZyYW1lc1RvUG9wPTEsbH19dmFyIG89ZnVuY3Rpb24oZSl7fTt0LmV4cG9y
dHM9cn0se31dLDEzODpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUp
e3ZhciB0PWU/ZS5vd25lckRvY3VtZW50fHxlOmRvY3VtZW50LG49dC5kZWZhdWx0Vmlld3x8d2lu
ZG93O3JldHVybiEoIWV8fCEoImZ1bmN0aW9uIj09dHlwZW9mIG4uTm9kZT9lIGluc3RhbmNlb2Yg
bi5Ob2RlOiJvYmplY3QiPT10eXBlb2YgZSYmIm51bWJlciI9PXR5cGVvZiBlLm5vZGVUeXBlJiYi
c3RyaW5nIj09dHlwZW9mIGUubm9kZU5hbWUpKX10LmV4cG9ydHM9cn0se31dLDEzOTpbZnVuY3Rp
b24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBvKGUpJiYzPT1lLm5v
ZGVUeXBlfXZhciBvPWUoMTM4KTt0LmV4cG9ydHM9cn0sezEzODoxMzh9XSwxNDA6W2Z1bmN0aW9u
KGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD17fTtyZXR1cm4gZnVuY3Rp
b24obil7cmV0dXJuIHQuaGFzT3duUHJvcGVydHkobil8fCh0W25dPWUuY2FsbCh0aGlzLG4pKSx0
W25dfX10LmV4cG9ydHM9cn0se31dLDE0MTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijtm
dW5jdGlvbiByKGUsdCl7cmV0dXJuIGU9PT10PzAhPT1lfHwwIT09dHx8MS9lPT0xL3Q6ZSE9PWUm
JnQhPT10fWZ1bmN0aW9uIG8oZSx0KXtpZihyKGUsdCkpcmV0dXJuITA7aWYoIm9iamVjdCIhPXR5
cGVvZiBlfHxudWxsPT09ZXx8Im9iamVjdCIhPXR5cGVvZiB0fHxudWxsPT09dClyZXR1cm4hMTt2
YXIgbj1PYmplY3Qua2V5cyhlKSxvPU9iamVjdC5rZXlzKHQpO2lmKG4ubGVuZ3RoIT09by5sZW5n
dGgpcmV0dXJuITE7Zm9yKHZhciBhPTA7YTxuLmxlbmd0aDthKyspaWYoIWkuY2FsbCh0LG5bYV0p
fHwhcihlW25bYV1dLHRbblthXV0pKXJldHVybiExO3JldHVybiEwfXZhciBpPU9iamVjdC5wcm90
b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPW99LHt9XSwxNDI6W2Z1bmN0aW9uKGUsdCxu
KXsidXNlIHN0cmljdCI7dmFyIHI9ZSgxMjkpLG89cjt0LmV4cG9ydHM9b30sezEyOToxMjl9XSwx
NDM6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihudWxsPT09
ZXx8dm9pZCAwPT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QuYXNzaWduIGNhbm5vdCBi
ZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCIpO3JldHVybiBPYmplY3QoZSl9dmFyIG89
T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJv
cGVydHksYT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO3QuZXhwb3J0cz1m
dW5jdGlvbigpe3RyeXtpZighT2JqZWN0LmFzc2lnbilyZXR1cm4hMTt2YXIgZT1uZXcgU3RyaW5n
KCJhYmMiKTtpZihlWzVdPSJkZSIsIjUiPT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSlb
MF0pcmV0dXJuITE7Zm9yKHZhciB0PXt9LG49MDtuPDEwO24rKyl0WyJfIitTdHJpbmcuZnJvbUNo
YXJDb2RlKG4pXT1uO2lmKCIwMTIzNDU2Nzg5IiE9PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVz
KHQpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pLmpvaW4oIiIpKXJldHVybiExO3ZhciBy
PXt9O3JldHVybiJhYmNkZWZnaGlqa2xtbm9wcXJzdCIuc3BsaXQoIiIpLmZvckVhY2goZnVuY3Rp
b24oZSl7cltlXT1lfSksImFiY2RlZmdoaWprbG1ub3BxcnN0Ij09PU9iamVjdC5rZXlzKE9iamVj
dC5hc3NpZ24oe30scikpLmpvaW4oIiIpfWNhdGNoKGUpe3JldHVybiExfX0oKT9PYmplY3QuYXNz
aWduOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHMsdT1yKGUpLGw9MTtsPGFyZ3VtZW50cy5sZW5n
dGg7bCsrKXtuPU9iamVjdChhcmd1bWVudHNbbF0pO2Zvcih2YXIgYyBpbiBuKWkuY2FsbChuLGMp
JiYodVtjXT1uW2NdKTtpZihvKXtzPW8obik7Zm9yKHZhciBwPTA7cDxzLmxlbmd0aDtwKyspYS5j
YWxsKG4sc1twXSkmJih1W3NbcF1dPW5bc1twXV0pfX1yZXR1cm4gdX19LHt9XSwxNDQ6W2Z1bmN0
aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyLG8pe310LmV4cG9ydHM9
cn0sezEzNzoxMzcsMTQyOjE0MiwxNDc6MTQ3fV0sMTQ1OltmdW5jdGlvbihlLHQsbil7InVzZSBz
dHJpY3QiO3ZhciByPWUoMTQ2KTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSwhMSl9
fSx7MTQ2OjE0Nn1dLDE0NjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDEy
OSksbz1lKDEzNyksaT0oZSgxNDIpLGUoMTQ3KSksYT1lKDE0NCk7dC5leHBvcnRzPWZ1bmN0aW9u
KGUsdCl7ZnVuY3Rpb24gbihlKXt2YXIgdD1lJiYoRSYmZVtFXXx8ZVt4XSk7aWYoImZ1bmN0aW9u
Ij09dHlwZW9mIHQpcmV0dXJuIHR9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBlPT09dD8wIT09ZXx8
MS9lPT0xL3Q6ZSE9PWUmJnQhPT10fWZ1bmN0aW9uIHUoZSl7dGhpcy5tZXNzYWdlPWUsdGhpcy5z
dGFjaz0iIn1mdW5jdGlvbiBsKGUpe2Z1bmN0aW9uIG4obixyLGEscyxsLGMscCl7aWYocz1zfHx3
LGM9Y3x8YSxwIT09aSlpZih0KW8oITEsIkNhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGly
ZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuIFVzZSBg
UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKClgIHRvIGNhbGwgdGhlbS4gUmVhZCBtb3JlIGF0IGh0
dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcyIpO2Vsc2U7cmV0dXJuIG51bGw9PXJbYV0/
bj9uZXcgdShudWxsPT09clthXT8iVGhlICIrbCsiIGAiK2MrImAgaXMgbWFya2VkIGFzIHJlcXVp
cmVkIGluIGAiK3MrImAsIGJ1dCBpdHMgdmFsdWUgaXMgYG51bGxgLiI6IlRoZSAiK2wrIiBgIitj
KyJgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCBpbiBgIitzKyJgLCBidXQgaXRzIHZhbHVlIGlzIGB1
bmRlZmluZWRgLiIpOm51bGw6ZShyLGEscyxsLGMpfXZhciByPW4uYmluZChudWxsLCExKTtyZXR1
cm4gci5pc1JlcXVpcmVkPW4uYmluZChudWxsLCEwKSxyfWZ1bmN0aW9uIGMoZSl7ZnVuY3Rpb24g
dCh0LG4scixvLGksYSl7dmFyIHM9dFtuXTtpZihfKHMpIT09ZSlyZXR1cm4gbmV3IHUoIkludmFs
aWQgIitvKyIgYCIraSsiYCBvZiB0eXBlIGAiK0MocykrImAgc3VwcGxpZWQgdG8gYCIrcisiYCwg
ZXhwZWN0ZWQgYCIrZSsiYC4iKTtyZXR1cm4gbnVsbH1yZXR1cm4gbCh0KX1mdW5jdGlvbiBwKGUp
e2Z1bmN0aW9uIHQodCxuLHIsbyxhKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSlyZXR1cm4gbmV3
IHUoIlByb3BlcnR5IGAiK2ErImAgb2YgY29tcG9uZW50IGAiK3IrImAgaGFzIGludmFsaWQgUHJv
cFR5cGUgbm90YXRpb24gaW5zaWRlIGFycmF5T2YuIik7dmFyIHM9dFtuXTtpZighQXJyYXkuaXNB
cnJheShzKSl7cmV0dXJuIG5ldyB1KCJJbnZhbGlkICIrbysiIGAiK2ErImAgb2YgdHlwZSBgIitf
KHMpKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVjdGVkIGFuIGFycmF5LiIpfWZvcih2YXIg
bD0wO2w8cy5sZW5ndGg7bCsrKXt2YXIgYz1lKHMsbCxyLG8sYSsiWyIrbCsiXSIsaSk7aWYoYyBp
bnN0YW5jZW9mIEVycm9yKXJldHVybiBjfXJldHVybiBudWxsfXJldHVybiBsKHQpfWZ1bmN0aW9u
IGQoZSl7ZnVuY3Rpb24gdCh0LG4scixvLGkpe2lmKCEodFtuXWluc3RhbmNlb2YgZSkpe3ZhciBh
PWUubmFtZXx8dztyZXR1cm4gbmV3IHUoIkludmFsaWQgIitvKyIgYCIraSsiYCBvZiB0eXBlIGAi
K2IodFtuXSkrImAgc3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQgaW5zdGFuY2Ugb2YgYCIr
YSsiYC4iKX1yZXR1cm4gbnVsbH1yZXR1cm4gbCh0KX1mdW5jdGlvbiBmKGUpe2Z1bmN0aW9uIHQo
dCxuLHIsbyxpKXtmb3IodmFyIGE9dFtuXSxsPTA7bDxlLmxlbmd0aDtsKyspaWYocyhhLGVbbF0p
KXJldHVybiBudWxsO3JldHVybiBuZXcgdSgiSW52YWxpZCAiK28rIiBgIitpKyJgIG9mIHZhbHVl
IGAiK2ErImAgc3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQgb25lIG9mICIrSlNPTi5zdHJp
bmdpZnkoZSkrIi4iKX1yZXR1cm4gQXJyYXkuaXNBcnJheShlKT9sKHQpOnIudGhhdFJldHVybnNO
dWxsfWZ1bmN0aW9uIGgoZSl7ZnVuY3Rpb24gdCh0LG4scixvLGEpe2lmKCJmdW5jdGlvbiIhPXR5
cGVvZiBlKXJldHVybiBuZXcgdSgiUHJvcGVydHkgYCIrYSsiYCBvZiBjb21wb25lbnQgYCIrcisi
YCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuIik7dmFyIHM9
dFtuXSxsPV8ocyk7aWYoIm9iamVjdCIhPT1sKXJldHVybiBuZXcgdSgiSW52YWxpZCAiK28rIiBg
IithKyJgIG9mIHR5cGUgYCIrbCsiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBhbiBv
YmplY3QuIik7Zm9yKHZhciBjIGluIHMpaWYocy5oYXNPd25Qcm9wZXJ0eShjKSl7dmFyIHA9ZShz
LGMscixvLGErIi4iK2MsaSk7aWYocCBpbnN0YW5jZW9mIEVycm9yKXJldHVybiBwfXJldHVybiBu
dWxsfXJldHVybiBsKHQpfWZ1bmN0aW9uIG0oZSl7ZnVuY3Rpb24gdCh0LG4scixvLGEpe2Zvcih2
YXIgcz0wO3M8ZS5sZW5ndGg7cysrKXtpZihudWxsPT0oMCxlW3NdKSh0LG4scixvLGEsaSkpcmV0
dXJuIG51bGx9cmV0dXJuIG5ldyB1KCJJbnZhbGlkICIrbysiIGAiK2ErImAgc3VwcGxpZWQgdG8g
YCIrcisiYC4iKX1yZXR1cm4gQXJyYXkuaXNBcnJheShlKT9sKHQpOnIudGhhdFJldHVybnNOdWxs
fWZ1bmN0aW9uIHYoZSl7ZnVuY3Rpb24gdCh0LG4scixvLGEpe3ZhciBzPXRbbl0sbD1fKHMpO2lm
KCJvYmplY3QiIT09bClyZXR1cm4gbmV3IHUoIkludmFsaWQgIitvKyIgYCIrYSsiYCBvZiB0eXBl
IGAiK2wrImAgc3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQgYG9iamVjdGAuIik7Zm9yKHZh
ciBjIGluIGUpe3ZhciBwPWVbY107aWYocCl7dmFyIGQ9cChzLGMscixvLGErIi4iK2MsaSk7aWYo
ZClyZXR1cm4gZH19cmV0dXJuIG51bGx9cmV0dXJuIGwodCl9ZnVuY3Rpb24gZyh0KXtzd2l0Y2go
dHlwZW9mIHQpe2Nhc2UibnVtYmVyIjpjYXNlInN0cmluZyI6Y2FzZSJ1bmRlZmluZWQiOnJldHVy
biEwO2Nhc2UiYm9vbGVhbiI6cmV0dXJuIXQ7Y2FzZSJvYmplY3QiOmlmKEFycmF5LmlzQXJyYXko
dCkpcmV0dXJuIHQuZXZlcnkoZyk7aWYobnVsbD09PXR8fGUodCkpcmV0dXJuITA7dmFyIHI9bih0
KTtpZighcilyZXR1cm4hMTt2YXIgbyxpPXIuY2FsbCh0KTtpZihyIT09dC5lbnRyaWVzKXtmb3Io
OyEobz1pLm5leHQoKSkuZG9uZTspaWYoIWcoby52YWx1ZSkpcmV0dXJuITF9ZWxzZSBmb3IoOyEo
bz1pLm5leHQoKSkuZG9uZTspe3ZhciBhPW8udmFsdWU7aWYoYSYmIWcoYVsxXSkpcmV0dXJuITF9
cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24geShlLHQpe3JldHVybiJzeW1ib2wi
PT09ZXx8KCJTeW1ib2wiPT09dFsiQEB0b1N0cmluZ1RhZyJdfHwiZnVuY3Rpb24iPT10eXBlb2Yg
U3ltYm9sJiZ0IGluc3RhbmNlb2YgU3ltYm9sKX1mdW5jdGlvbiBfKGUpe3ZhciB0PXR5cGVvZiBl
O3JldHVybiBBcnJheS5pc0FycmF5KGUpPyJhcnJheSI6ZSBpbnN0YW5jZW9mIFJlZ0V4cD8ib2Jq
ZWN0Ijp5KHQsZSk/InN5bWJvbCI6dH1mdW5jdGlvbiBDKGUpe3ZhciB0PV8oZSk7aWYoIm9iamVj
dCI9PT10KXtpZihlIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4iZGF0ZSI7aWYoZSBpbnN0YW5jZW9m
IFJlZ0V4cClyZXR1cm4icmVnZXhwIn1yZXR1cm4gdH1mdW5jdGlvbiBiKGUpe3JldHVybiBlLmNv
bnN0cnVjdG9yJiZlLmNvbnN0cnVjdG9yLm5hbWU/ZS5jb25zdHJ1Y3Rvci5uYW1lOnd9dmFyIEU9
ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yLHg9IkBAaXRlcmF0b3Ii
LHc9Ijw8YW5vbnltb3VzPj4iLFQ9e2FycmF5OmMoImFycmF5IiksYm9vbDpjKCJib29sZWFuIiks
ZnVuYzpjKCJmdW5jdGlvbiIpLG51bWJlcjpjKCJudW1iZXIiKSxvYmplY3Q6Yygib2JqZWN0Iiks
c3RyaW5nOmMoInN0cmluZyIpLHN5bWJvbDpjKCJzeW1ib2wiKSxhbnk6ZnVuY3Rpb24oKXtyZXR1
cm4gbChyLnRoYXRSZXR1cm5zTnVsbCl9KCksYXJyYXlPZjpwLGVsZW1lbnQ6ZnVuY3Rpb24oKXtm
dW5jdGlvbiB0KHQsbixyLG8saSl7dmFyIGE9dFtuXTtpZighZShhKSl7cmV0dXJuIG5ldyB1KCJJ
bnZhbGlkICIrbysiIGAiK2krImAgb2YgdHlwZSBgIitfKGEpKyJgIHN1cHBsaWVkIHRvIGAiK3Ir
ImAsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudC4iKX1yZXR1cm4gbnVsbH1yZXR1cm4g
bCh0KX0oKSxpbnN0YW5jZU9mOmQsbm9kZTpmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scixv
KXtyZXR1cm4gZyhlW3RdKT9udWxsOm5ldyB1KCJJbnZhbGlkICIrcisiIGAiK28rImAgc3VwcGxp
ZWQgdG8gYCIrbisiYCwgZXhwZWN0ZWQgYSBSZWFjdE5vZGUuIil9cmV0dXJuIGwoZSl9KCksb2Jq
ZWN0T2Y6aCxvbmVPZjpmLG9uZU9mVHlwZTptLHNoYXBlOnZ9Cis7cmV0dXJuIHUucHJvdG90eXBl
PUVycm9yLnByb3RvdHlwZSxULmNoZWNrUHJvcFR5cGVzPWEsVC5Qcm9wVHlwZXM9VCxUfX0sezEy
OToxMjksMTM3OjEzNywxNDI6MTQyLDE0NDoxNDQsMTQ3OjE0N31dLDE0NzpbZnVuY3Rpb24oZSx0
LG4peyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9IlNFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lP
VV9XSUxMX0JFX0ZJUkVEIn0se31dfSx7fSxbNDVdKSg0NSl9KCl9KCl9KTsKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVs
ZXMvcmVhY3QvZGlzdC9yZWFjdC13aXRoLWFkZG9ucy5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25v
ZGVfbW9kdWxlcy9yZWFjdC9kaXN0L3JlYWN0LXdpdGgtYWRkb25zLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJh
MjkwMzZjZDRlODcxNmUyOGY5OWQyMTk4NjFmNjk2MGVhZGQ2NzYKLS0tIC9kZXYvbnVsbAorKysg
Yi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3QvZGlzdC9yZWFjdC13aXRoLWFk
ZG9ucy5qcwpAQCAtMCwwICsxLDU2NDYgQEAKKyAvKioKKyAgKiBSZWFjdCAod2l0aCBhZGRvbnMp
IHYxNS41LjQKKyAgKi8KKyhmdW5jdGlvbihmKXtpZih0eXBlb2YgZXhwb3J0cz09PSJvYmplY3Qi
JiZ0eXBlb2YgbW9kdWxlIT09InVuZGVmaW5lZCIpe21vZHVsZS5leHBvcnRzPWYoKX1lbHNlIGlm
KHR5cGVvZiBkZWZpbmU9PT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kKXtkZWZpbmUoW10sZil9ZWxz
ZXt2YXIgZztpZih0eXBlb2Ygd2luZG93IT09InVuZGVmaW5lZCIpe2c9d2luZG93fWVsc2UgaWYo
dHlwZW9mIGdsb2JhbCE9PSJ1bmRlZmluZWQiKXtnPWdsb2JhbH1lbHNlIGlmKHR5cGVvZiBzZWxm
IT09InVuZGVmaW5lZCIpe2c9c2VsZn1lbHNle2c9dGhpc31nLlJlYWN0ID0gZigpfX0pKGZ1bmN0
aW9uKCl7dmFyIGRlZmluZSxtb2R1bGUsZXhwb3J0cztyZXR1cm4gKGZ1bmN0aW9uIGUodCxuLHIp
e2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJl
PT0iZnVuY3Rpb24iJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJu
IGkobywhMCk7dmFyIGY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrbysiJyIpO3Ro
cm93IGYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0
W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJu
IHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBp
PXR5cGVvZiByZXF1aXJlPT0iZnVuY3Rpb24iJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5n
dGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSh7MTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhw
b3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5z
ZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBm
aWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlv
bmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5U
UyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOwor
Cit2YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSBfZGVyZXFfKDQ0KTsKKworLyoqCisgKiBHZW5l
cmF0ZSBhIG1hcHBpbmcgb2Ygc3RhbmRhcmQgdmVuZG9yIHByZWZpeGVzIHVzaW5nIHRoZSBkZWZp
bmVkIHN0eWxlIHByb3BlcnR5IGFuZCBldmVudCBuYW1lLgorICoKKyAqIEBwYXJhbSB7c3RyaW5n
fSBzdHlsZVByb3AKKyAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUKKyAqIEByZXR1cm5zIHtv
YmplY3R9CisgKi8KK2Z1bmN0aW9uIG1ha2VQcmVmaXhNYXAoc3R5bGVQcm9wLCBldmVudE5hbWUp
IHsKKyAgdmFyIHByZWZpeGVzID0ge307CisKKyAgcHJlZml4ZXNbc3R5bGVQcm9wLnRvTG93ZXJD
YXNlKCldID0gZXZlbnROYW1lLnRvTG93ZXJDYXNlKCk7CisgIHByZWZpeGVzWydXZWJraXQnICsg
c3R5bGVQcm9wXSA9ICd3ZWJraXQnICsgZXZlbnROYW1lOworICBwcmVmaXhlc1snTW96JyArIHN0
eWxlUHJvcF0gPSAnbW96JyArIGV2ZW50TmFtZTsKKyAgcHJlZml4ZXNbJ21zJyArIHN0eWxlUHJv
cF0gPSAnTVMnICsgZXZlbnROYW1lOworICBwcmVmaXhlc1snTycgKyBzdHlsZVByb3BdID0gJ28n
ICsgZXZlbnROYW1lLnRvTG93ZXJDYXNlKCk7CisKKyAgcmV0dXJuIHByZWZpeGVzOworfQorCisv
KioKKyAqIEEgbGlzdCBvZiBldmVudCBuYW1lcyB0byBhIGNvbmZpZ3VyYWJsZSBsaXN0IG9mIHZl
bmRvciBwcmVmaXhlcy4KKyAqLwordmFyIHZlbmRvclByZWZpeGVzID0geworICBhbmltYXRpb25l
bmQ6IG1ha2VQcmVmaXhNYXAoJ0FuaW1hdGlvbicsICdBbmltYXRpb25FbmQnKSwKKyAgYW5pbWF0
aW9uaXRlcmF0aW9uOiBtYWtlUHJlZml4TWFwKCdBbmltYXRpb24nLCAnQW5pbWF0aW9uSXRlcmF0
aW9uJyksCisgIGFuaW1hdGlvbnN0YXJ0OiBtYWtlUHJlZml4TWFwKCdBbmltYXRpb24nLCAnQW5p
bWF0aW9uU3RhcnQnKSwKKyAgdHJhbnNpdGlvbmVuZDogbWFrZVByZWZpeE1hcCgnVHJhbnNpdGlv
bicsICdUcmFuc2l0aW9uRW5kJykKK307CisKKy8qKgorICogRXZlbnQgbmFtZXMgdGhhdCBoYXZl
IGFscmVhZHkgYmVlbiBkZXRlY3RlZCBhbmQgcHJlZml4ZWQgKGlmIGFwcGxpY2FibGUpLgorICov
Cit2YXIgcHJlZml4ZWRFdmVudE5hbWVzID0ge307CisKKy8qKgorICogRWxlbWVudCB0byBjaGVj
ayBmb3IgcHJlZml4ZXMgb24uCisgKi8KK3ZhciBzdHlsZSA9IHt9OworCisvKioKKyAqIEJvb3Rz
dHJhcCBpZiBhIERPTSBleGlzdHMuCisgKi8KK2lmIChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5V
c2VET00pIHsKKyAgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5zdHlsZTsK
KworICAvLyBPbiBzb21lIHBsYXRmb3JtcywgaW4gcGFydGljdWxhciBzb21lIHJlbGVhc2VzIG9m
IEFuZHJvaWQgNC54LAorICAvLyB0aGUgdW4tcHJlZml4ZWQgImFuaW1hdGlvbiIgYW5kICJ0cmFu
c2l0aW9uIiBwcm9wZXJ0aWVzIGFyZSBkZWZpbmVkIG9uIHRoZQorICAvLyBzdHlsZSBvYmplY3Qg
YnV0IHRoZSBldmVudHMgdGhhdCBmaXJlIHdpbGwgc3RpbGwgYmUgcHJlZml4ZWQsIHNvIHdlIG5l
ZWQKKyAgLy8gdG8gY2hlY2sgaWYgdGhlIHVuLXByZWZpeGVkIGV2ZW50cyBhcmUgdXNhYmxlLCBh
bmQgaWYgbm90IHJlbW92ZSB0aGVtIGZyb20gdGhlIG1hcC4KKyAgaWYgKCEoJ0FuaW1hdGlvbkV2
ZW50JyBpbiB3aW5kb3cpKSB7CisgICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLmFuaW1hdGlvbmVu
ZC5hbmltYXRpb247CisgICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLmFuaW1hdGlvbml0ZXJhdGlv
bi5hbmltYXRpb247CisgICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLmFuaW1hdGlvbnN0YXJ0LmFu
aW1hdGlvbjsKKyAgfQorCisgIC8vIFNhbWUgYXMgYWJvdmUKKyAgaWYgKCEoJ1RyYW5zaXRpb25F
dmVudCcgaW4gd2luZG93KSkgeworICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy50cmFuc2l0aW9u
ZW5kLnRyYW5zaXRpb247CisgIH0KK30KKworLyoqCisgKiBBdHRlbXB0cyB0byBkZXRlcm1pbmUg
dGhlIGNvcnJlY3QgdmVuZG9yIHByZWZpeGVkIGV2ZW50IG5hbWUuCisgKgorICogQHBhcmFtIHtz
dHJpbmd9IGV2ZW50TmFtZQorICogQHJldHVybnMge3N0cmluZ30KKyAqLworZnVuY3Rpb24gZ2V0
VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoZXZlbnROYW1lKSB7CisgIGlmIChwcmVmaXhlZEV2ZW50
TmFtZXNbZXZlbnROYW1lXSkgeworICAgIHJldHVybiBwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnRO
YW1lXTsKKyAgfSBlbHNlIGlmICghdmVuZG9yUHJlZml4ZXNbZXZlbnROYW1lXSkgeworICAgIHJl
dHVybiBldmVudE5hbWU7CisgIH0KKworICB2YXIgcHJlZml4TWFwID0gdmVuZG9yUHJlZml4ZXNb
ZXZlbnROYW1lXTsKKworICBmb3IgKHZhciBzdHlsZVByb3AgaW4gcHJlZml4TWFwKSB7CisgICAg
aWYgKHByZWZpeE1hcC5oYXNPd25Qcm9wZXJ0eShzdHlsZVByb3ApICYmIHN0eWxlUHJvcCBpbiBz
dHlsZSkgeworICAgICAgcmV0dXJuIHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdID0gcHJl
Zml4TWFwW3N0eWxlUHJvcF07CisgICAgfQorICB9CisKKyAgcmV0dXJuICcnOworfQorCittb2R1
bGUuZXhwb3J0cyA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lOworfSx7IjQ0Ijo0NH1dLDI6
W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAx
My1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5z
ZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2Yg
dGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0
cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnku
CisgKgorICogCisgKi8KKworJ3VzZSBzdHJpY3QnOworCisvKioKKyAqIEVzY2FwZSBhbmQgd3Jh
cCBrZXkgc28gaXQgaXMgc2FmZSB0byB1c2UgYXMgYSByZWFjdGlkCisgKgorICogQHBhcmFtIHtz
dHJpbmd9IGtleSB0byBiZSBlc2NhcGVkLgorICogQHJldHVybiB7c3RyaW5nfSB0aGUgZXNjYXBl
ZCBrZXkuCisgKi8KKworZnVuY3Rpb24gZXNjYXBlKGtleSkgeworICB2YXIgZXNjYXBlUmVnZXgg
PSAvWz06XS9nOworICB2YXIgZXNjYXBlckxvb2t1cCA9IHsKKyAgICAnPSc6ICc9MCcsCisgICAg
JzonOiAnPTInCisgIH07CisgIHZhciBlc2NhcGVkU3RyaW5nID0gKCcnICsga2V5KS5yZXBsYWNl
KGVzY2FwZVJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gpIHsKKyAgICByZXR1cm4gZXNjYXBlckxvb2t1
cFttYXRjaF07CisgIH0pOworCisgIHJldHVybiAnJCcgKyBlc2NhcGVkU3RyaW5nOworfQorCisv
KioKKyAqIFVuZXNjYXBlIGFuZCB1bndyYXAga2V5IGZvciBodW1hbi1yZWFkYWJsZSBkaXNwbGF5
CisgKgorICogQHBhcmFtIHtzdHJpbmd9IGtleSB0byB1bmVzY2FwZS4KKyAqIEByZXR1cm4ge3N0
cmluZ30gdGhlIHVuZXNjYXBlZCBrZXkuCisgKi8KK2Z1bmN0aW9uIHVuZXNjYXBlKGtleSkgewor
ICB2YXIgdW5lc2NhcGVSZWdleCA9IC8oPTB8PTIpL2c7CisgIHZhciB1bmVzY2FwZXJMb29rdXAg
PSB7CisgICAgJz0wJzogJz0nLAorICAgICc9Mic6ICc6JworICB9OworICB2YXIga2V5U3Vic3Ry
aW5nID0ga2V5WzBdID09PSAnLicgJiYga2V5WzFdID09PSAnJCcgPyBrZXkuc3Vic3RyaW5nKDIp
IDoga2V5LnN1YnN0cmluZygxKTsKKworICByZXR1cm4gKCcnICsga2V5U3Vic3RyaW5nKS5yZXBs
YWNlKHVuZXNjYXBlUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCkgeworICAgIHJldHVybiB1bmVzY2Fw
ZXJMb29rdXBbbWF0Y2hdOworICB9KTsKK30KKwordmFyIEtleUVzY2FwZVV0aWxzID0geworICBl
c2NhcGU6IGVzY2FwZSwKKyAgdW5lc2NhcGU6IHVuZXNjYXBlCit9OworCittb2R1bGUuZXhwb3J0
cyA9IEtleUVzY2FwZVV0aWxzOworfSx7fV0sMzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhw
b3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5z
ZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBm
aWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlv
bmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5U
UyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOwor
Cit2YXIgUmVhY3RMaW5rID0gX2RlcmVxXygyMCk7Cit2YXIgUmVhY3RTdGF0ZVNldHRlcnMgPSBf
ZGVyZXFfKDI2KTsKKworLyoqCisgKiBBIHNpbXBsZSBtaXhpbiBhcm91bmQgUmVhY3RMaW5rLmZv
clN0YXRlKCkuCisgKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90
d28td2F5LWJpbmRpbmctaGVscGVycy5odG1sCisgKi8KK3ZhciBMaW5rZWRTdGF0ZU1peGluID0g
eworICAvKioKKyAgICogQ3JlYXRlIGEgUmVhY3RMaW5rIHRoYXQncyBsaW5rZWQgdG8gcGFydCBv
ZiB0aGlzIGNvbXBvbmVudCdzIHN0YXRlLiBUaGUKKyAgICogUmVhY3RMaW5rIHdpbGwgaGF2ZSB0
aGUgY3VycmVudCB2YWx1ZSBvZiB0aGlzLnN0YXRlW2tleV0gYW5kIHdpbGwgY2FsbAorICAgKiBz
ZXRTdGF0ZSgpIHdoZW4gYSBjaGFuZ2UgaXMgcmVxdWVzdGVkLgorICAgKgorICAgKiBAcGFyYW0g
e3N0cmluZ30ga2V5IHN0YXRlIGtleSB0byB1cGRhdGUuCisgICAqIEByZXR1cm4ge1JlYWN0TGlu
a30gUmVhY3RMaW5rIGluc3RhbmNlIGxpbmtpbmcgdG8gdGhlIHN0YXRlLgorICAgKi8KKyAgbGlu
a1N0YXRlOiBmdW5jdGlvbiAoa2V5KSB7CisgICAgcmV0dXJuIG5ldyBSZWFjdExpbmsodGhpcy5z
dGF0ZVtrZXldLCBSZWFjdFN0YXRlU2V0dGVycy5jcmVhdGVTdGF0ZUtleVNldHRlcih0aGlzLCBr
ZXkpKTsKKyAgfQorfTsKKworbW9kdWxlLmV4cG9ydHMgPSBMaW5rZWRTdGF0ZU1peGluOworfSx7
IjIwIjoyMCwiMjYiOjI2fV0sNDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7Cisv
KioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIg
dGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50
CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGlu
IHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKiAKKyAqLworCisndXNlIHN0cmljdCc7CisKK3Zh
ciBfcHJvZEludmFyaWFudCA9IF9kZXJlcV8oMzkpOworCit2YXIgaW52YXJpYW50ID0gX2RlcmVx
Xyg0Nyk7CisKKy8qKgorICogU3RhdGljIHBvb2xlcnMuIFNldmVyYWwgY3VzdG9tIHZlcnNpb25z
IGZvciBlYWNoIHBvdGVudGlhbCBudW1iZXIgb2YKKyAqIGFyZ3VtZW50cy4gQSBjb21wbGV0ZWx5
IGdlbmVyaWMgcG9vbGVyIGlzIGVhc3kgdG8gaW1wbGVtZW50LCBidXQgd291bGQKKyAqIHJlcXVp
cmUgYWNjZXNzaW5nIHRoZSBgYXJndW1lbnRzYCBvYmplY3QuIEluIGVhY2ggb2YgdGhlc2UsIGB0
aGlzYCByZWZlcnMgdG8KKyAqIHRoZSBDbGFzcyBpdHNlbGYsIG5vdCBhbiBpbnN0YW5jZS4gSWYg
YW55IG90aGVycyBhcmUgbmVlZGVkLCBzaW1wbHkgYWRkIHRoZW0KKyAqIGhlcmUsIG9yIGluIHRo
ZWlyIG93biBmaWxlcy4KKyAqLwordmFyIG9uZUFyZ3VtZW50UG9vbGVyID0gZnVuY3Rpb24gKGNv
cHlGaWVsZHNGcm9tKSB7CisgIHZhciBLbGFzcyA9IHRoaXM7CisgIGlmIChLbGFzcy5pbnN0YW5j
ZVBvb2wubGVuZ3RoKSB7CisgICAgdmFyIGluc3RhbmNlID0gS2xhc3MuaW5zdGFuY2VQb29sLnBv
cCgpOworICAgIEtsYXNzLmNhbGwoaW5zdGFuY2UsIGNvcHlGaWVsZHNGcm9tKTsKKyAgICByZXR1
cm4gaW5zdGFuY2U7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIG5ldyBLbGFzcyhjb3B5RmllbGRz
RnJvbSk7CisgIH0KK307CisKK3ZhciB0d29Bcmd1bWVudFBvb2xlciA9IGZ1bmN0aW9uIChhMSwg
YTIpIHsKKyAgdmFyIEtsYXNzID0gdGhpczsKKyAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5n
dGgpIHsKKyAgICB2YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0YW5jZVBvb2wucG9wKCk7CisgICAg
S2xhc3MuY2FsbChpbnN0YW5jZSwgYTEsIGEyKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7CisgIH0g
ZWxzZSB7CisgICAgcmV0dXJuIG5ldyBLbGFzcyhhMSwgYTIpOworICB9Cit9OworCit2YXIgdGhy
ZWVBcmd1bWVudFBvb2xlciA9IGZ1bmN0aW9uIChhMSwgYTIsIGEzKSB7CisgIHZhciBLbGFzcyA9
IHRoaXM7CisgIGlmIChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3RoKSB7CisgICAgdmFyIGluc3Rh
bmNlID0gS2xhc3MuaW5zdGFuY2VQb29sLnBvcCgpOworICAgIEtsYXNzLmNhbGwoaW5zdGFuY2Us
IGExLCBhMiwgYTMpOworICAgIHJldHVybiBpbnN0YW5jZTsKKyAgfSBlbHNlIHsKKyAgICByZXR1
cm4gbmV3IEtsYXNzKGExLCBhMiwgYTMpOworICB9Cit9OworCit2YXIgZm91ckFyZ3VtZW50UG9v
bGVyID0gZnVuY3Rpb24gKGExLCBhMiwgYTMsIGE0KSB7CisgIHZhciBLbGFzcyA9IHRoaXM7Cisg
IGlmIChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3RoKSB7CisgICAgdmFyIGluc3RhbmNlID0gS2xh
c3MuaW5zdGFuY2VQb29sLnBvcCgpOworICAgIEtsYXNzLmNhbGwoaW5zdGFuY2UsIGExLCBhMiwg
YTMsIGE0KTsKKyAgICByZXR1cm4gaW5zdGFuY2U7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIG5l
dyBLbGFzcyhhMSwgYTIsIGEzLCBhNCk7CisgIH0KK307CisKK3ZhciBzdGFuZGFyZFJlbGVhc2Vy
ID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7CisgIHZhciBLbGFzcyA9IHRoaXM7CisgICEoaW5zdGFu
Y2UgaW5zdGFuY2VvZiBLbGFzcykgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBp
bnZhcmlhbnQoZmFsc2UsICdUcnlpbmcgdG8gcmVsZWFzZSBhbiBpbnN0YW5jZSBpbnRvIGEgcG9v
bCBvZiBhIGRpZmZlcmVudCB0eXBlLicpIDogX3Byb2RJbnZhcmlhbnQoJzI1JykgOiB2b2lkIDA7
CisgIGluc3RhbmNlLmRlc3RydWN0b3IoKTsKKyAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5n
dGggPCBLbGFzcy5wb29sU2l6ZSkgeworICAgIEtsYXNzLmluc3RhbmNlUG9vbC5wdXNoKGluc3Rh
bmNlKTsKKyAgfQorfTsKKwordmFyIERFRkFVTFRfUE9PTF9TSVpFID0gMTA7Cit2YXIgREVGQVVM
VF9QT09MRVIgPSBvbmVBcmd1bWVudFBvb2xlcjsKKworLyoqCisgKiBBdWdtZW50cyBgQ29weUNv
bnN0cnVjdG9yYCB0byBiZSBhIHBvb2xhYmxlIGNsYXNzLCBhdWdtZW50aW5nIG9ubHkgdGhlIGNs
YXNzCisgKiBpdHNlbGYgKHN0YXRpY2FsbHkpIG5vdCBhZGRpbmcgYW55IHByb3RvdHlwaWNhbCBm
aWVsZHMuIEFueSBDb3B5Q29uc3RydWN0b3IKKyAqIHlvdSBnaXZlIHRoaXMgbWF5IGhhdmUgYSBg
cG9vbFNpemVgIHByb3BlcnR5LCBhbmQgd2lsbCBsb29rIGZvciBhCisgKiBwcm90b3R5cGljYWwg
YGRlc3RydWN0b3JgIG9uIGluc3RhbmNlcy4KKyAqCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBDb3B5
Q29uc3RydWN0b3IgQ29uc3RydWN0b3IgdGhhdCBjYW4gYmUgdXNlZCB0byByZXNldC4KKyAqIEBw
YXJhbSB7RnVuY3Rpb259IHBvb2xlciBDdXN0b21pemFibGUgcG9vbGVyLgorICovCit2YXIgYWRk
UG9vbGluZ1RvID0gZnVuY3Rpb24gKENvcHlDb25zdHJ1Y3RvciwgcG9vbGVyKSB7CisgIC8vIENh
c3RpbmcgYXMgYW55IHNvIHRoYXQgZmxvdyBpZ25vcmVzIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRp
b24gYW5kIHRydXN0cworICAvLyBpdCB0byBtYXRjaCB0aGUgdHlwZSB3ZSBkZWNsYXJlZAorICB2
YXIgTmV3S2xhc3MgPSBDb3B5Q29uc3RydWN0b3I7CisgIE5ld0tsYXNzLmluc3RhbmNlUG9vbCA9
IFtdOworICBOZXdLbGFzcy5nZXRQb29sZWQgPSBwb29sZXIgfHwgREVGQVVMVF9QT09MRVI7Cisg
IGlmICghTmV3S2xhc3MucG9vbFNpemUpIHsKKyAgICBOZXdLbGFzcy5wb29sU2l6ZSA9IERFRkFV
TFRfUE9PTF9TSVpFOworICB9CisgIE5ld0tsYXNzLnJlbGVhc2UgPSBzdGFuZGFyZFJlbGVhc2Vy
OworICByZXR1cm4gTmV3S2xhc3M7Cit9OworCit2YXIgUG9vbGVkQ2xhc3MgPSB7CisgIGFkZFBv
b2xpbmdUbzogYWRkUG9vbGluZ1RvLAorICBvbmVBcmd1bWVudFBvb2xlcjogb25lQXJndW1lbnRQ
b29sZXIsCisgIHR3b0FyZ3VtZW50UG9vbGVyOiB0d29Bcmd1bWVudFBvb2xlciwKKyAgdGhyZWVB
cmd1bWVudFBvb2xlcjogdGhyZWVBcmd1bWVudFBvb2xlciwKKyAgZm91ckFyZ3VtZW50UG9vbGVy
OiBmb3VyQXJndW1lbnRQb29sZXIKK307CisKK21vZHVsZS5leHBvcnRzID0gUG9vbGVkQ2xhc3M7
Cit9LHsiMzkiOjM5LCI0NyI6NDd9XSw1OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRz
KXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1
bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwg
Z3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZp
bGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3Zh
ciBfYXNzaWduID0gX2RlcmVxXyg1MCk7CisKK3ZhciBSZWFjdENoaWxkcmVuID0gX2RlcmVxXyg5
KTsKK3ZhciBSZWFjdENvbXBvbmVudCA9IF9kZXJlcV8oMTEpOwordmFyIFJlYWN0UHVyZUNvbXBv
bmVudCA9IF9kZXJlcV8oMjUpOwordmFyIFJlYWN0Q2xhc3MgPSBfZGVyZXFfKDEwKTsKK3ZhciBS
ZWFjdERPTUZhY3RvcmllcyA9IF9kZXJlcV8oMTUpOwordmFyIFJlYWN0RWxlbWVudCA9IF9kZXJl
cV8oMTYpOwordmFyIFJlYWN0UHJvcFR5cGVzID0gX2RlcmVxXygyMyk7Cit2YXIgUmVhY3RWZXJz
aW9uID0gX2RlcmVxXygzMCk7CisKK3ZhciBvbmx5Q2hpbGQgPSBfZGVyZXFfKDM4KTsKK3ZhciB3
YXJuaW5nID0gX2RlcmVxXyg0OSk7CisKK3ZhciBjcmVhdGVFbGVtZW50ID0gUmVhY3RFbGVtZW50
LmNyZWF0ZUVsZW1lbnQ7Cit2YXIgY3JlYXRlRmFjdG9yeSA9IFJlYWN0RWxlbWVudC5jcmVhdGVG
YWN0b3J5OwordmFyIGNsb25lRWxlbWVudCA9IFJlYWN0RWxlbWVudC5jbG9uZUVsZW1lbnQ7CisK
K2lmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgdmFyIGNhbkRlZmluZVBy
b3BlcnR5ID0gX2RlcmVxXygzMyk7CisgIHZhciBSZWFjdEVsZW1lbnRWYWxpZGF0b3IgPSBfZGVy
ZXFfKDE4KTsKKyAgdmFyIGRpZFdhcm5Qcm9wVHlwZXNEZXByZWNhdGVkID0gZmFsc2U7CisgIGNy
ZWF0ZUVsZW1lbnQgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY3JlYXRlRWxlbWVudDsKKyAgY3Jl
YXRlRmFjdG9yeSA9IFJlYWN0RWxlbWVudFZhbGlkYXRvci5jcmVhdGVGYWN0b3J5OworICBjbG9u
ZUVsZW1lbnQgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY2xvbmVFbGVtZW50OworfQorCit2YXIg
X19zcHJlYWQgPSBfYXNzaWduOworCitpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24n
KSB7CisgIHZhciB3YXJuZWQgPSBmYWxzZTsKKyAgX19zcHJlYWQgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyh3YXJuZWQsICdSZWFj
dC5fX3NwcmVhZCBpcyBkZXByZWNhdGVkIGFuZCBzaG91bGQgbm90IGJlIHVzZWQuIFVzZSAnICsg
J09iamVjdC5hc3NpZ24gZGlyZWN0bHkgb3IgYW5vdGhlciBoZWxwZXIgZnVuY3Rpb24gd2l0aCBz
aW1pbGFyICcgKyAnc2VtYW50aWNzLiBZb3UgbWF5IGJlIHNlZWluZyB0aGlzIHdhcm5pbmcgZHVl
IHRvIHlvdXIgY29tcGlsZXIuICcgKyAnU2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qtc3ByZWFkLWRl
cHJlY2F0aW9uIGZvciBtb3JlIGRldGFpbHMuJykgOiB2b2lkIDA7CisgICAgd2FybmVkID0gdHJ1
ZTsKKyAgICByZXR1cm4gX2Fzc2lnbi5hcHBseShudWxsLCBhcmd1bWVudHMpOworICB9OworfQor
Cit2YXIgUmVhY3QgPSB7CisKKyAgLy8gTW9kZXJuCisKKyAgQ2hpbGRyZW46IHsKKyAgICBtYXA6
IFJlYWN0Q2hpbGRyZW4ubWFwLAorICAgIGZvckVhY2g6IFJlYWN0Q2hpbGRyZW4uZm9yRWFjaCwK
KyAgICBjb3VudDogUmVhY3RDaGlsZHJlbi5jb3VudCwKKyAgICB0b0FycmF5OiBSZWFjdENoaWxk
cmVuLnRvQXJyYXksCisgICAgb25seTogb25seUNoaWxkCisgIH0sCisKKyAgQ29tcG9uZW50OiBS
ZWFjdENvbXBvbmVudCwKKyAgUHVyZUNvbXBvbmVudDogUmVhY3RQdXJlQ29tcG9uZW50LAorCisg
IGNyZWF0ZUVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnQsCisgIGNsb25lRWxlbWVudDogY2xvbmVFbGVt
ZW50LAorICBpc1ZhbGlkRWxlbWVudDogUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50LAorCisg
IC8vIENsYXNzaWMKKworICBQcm9wVHlwZXM6IFJlYWN0UHJvcFR5cGVzLAorICBjcmVhdGVDbGFz
czogUmVhY3RDbGFzcy5jcmVhdGVDbGFzcywKKyAgY3JlYXRlRmFjdG9yeTogY3JlYXRlRmFjdG9y
eSwKKyAgY3JlYXRlTWl4aW46IGZ1bmN0aW9uIChtaXhpbikgeworICAgIC8vIEN1cnJlbnRseSBh
IG5vb3AuIFdpbGwgYmUgdXNlZCB0byB2YWxpZGF0ZSBhbmQgdHJhY2UgbWl4aW5zLgorICAgIHJl
dHVybiBtaXhpbjsKKyAgfSwKKworICAvLyBUaGlzIGxvb2tzIERPTSBzcGVjaWZpYyBidXQgdGhl
c2UgYXJlIGFjdHVhbGx5IGlzb21vcnBoaWMgaGVscGVycworICAvLyBzaW5jZSB0aGV5IGFyZSBq
dXN0IGdlbmVyYXRpbmcgRE9NIHN0cmluZ3MuCisgIERPTTogUmVhY3RET01GYWN0b3JpZXMsCisK
KyAgdmVyc2lvbjogUmVhY3RWZXJzaW9uLAorCisgIC8vIERlcHJlY2F0ZWQgaG9vayBmb3IgSlNY
IHNwcmVhZCwgZG9uJ3QgdXNlIHRoaXMgZm9yIGFueXRoaW5nLgorICBfX3NwcmVhZDogX19zcHJl
YWQKK307CisKKy8vIFRPRE86IEZpeCB0ZXN0cyBzbyB0aGF0IHRoaXMgZGVwcmVjYXRpb24gd2Fy
bmluZyBkb2Vzbid0IGNhdXNlIGZhaWx1cmVzLgoraWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9k
dWN0aW9uJykgeworICBpZiAoY2FuRGVmaW5lUHJvcGVydHkpIHsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoUmVhY3QsICdQcm9wVHlwZXMnLCB7CisgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhkaWRXYXJu
UHJvcFR5cGVzRGVwcmVjYXRlZCwgJ0FjY2Vzc2luZyBQcm9wVHlwZXMgdmlhIHRoZSBtYWluIFJl
YWN0IHBhY2thZ2UgaXMgZGVwcmVjYXRlZC4gVXNlICcgKyAndGhlIHByb3AtdHlwZXMgcGFja2Fn
ZSBmcm9tIG5wbSBpbnN0ZWFkLicpIDogdm9pZCAwOworICAgICAgICBkaWRXYXJuUHJvcFR5cGVz
RGVwcmVjYXRlZCA9IHRydWU7CisgICAgICAgIHJldHVybiBSZWFjdFByb3BUeXBlczsKKyAgICAg
IH0KKyAgICB9KTsKKyAgfQorfQorCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0OworfSx7IjEwIjox
MCwiMTEiOjExLCIxNSI6MTUsIjE2IjoxNiwiMTgiOjE4LCIyMyI6MjMsIjI1IjoyNSwiMzAiOjMw
LCIzMyI6MzMsIjM4IjozOCwiNDkiOjQ5LCI1MCI6NTAsIjkiOjl9XSw2OltmdW5jdGlvbihfZGVy
ZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFj
ZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2Ug
Y29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhl
CisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5k
IGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisn
dXNlIHN0cmljdCc7CisKK3ZhciBSZWFjdERPTTsKKworZnVuY3Rpb24gZ2V0UmVhY3RET00oKSB7
CisgIGlmICghUmVhY3RET00pIHsKKyAgICAvLyBUaGlzIGlzIHNhZmUgdG8gdXNlIGJlY2F1c2Ug
Y3VycmVudCBtb2R1bGUgb25seSBleGlzdHMgaW4gdGhlIGFkZG9ucyBidWlsZDoKKyAgICB2YXIg
UmVhY3RXaXRoQWRkb25zVU1ERW50cnkgPSBfZGVyZXFfKDMyKTsKKyAgICAvLyBUaGlzIGlzIGlu
amVjdGVkIGJ5IHRoZSBSZWFjdERPTSBVTUQgYnVpbGQ6CisgICAgUmVhY3RET00gPSBSZWFjdFdp
dGhBZGRvbnNVTURFbnRyeS5fX1NFQ1JFVF9JTkpFQ1RFRF9SRUFDVF9ET01fRE9fTk9UX1VTRV9P
Ul9ZT1VfV0lMTF9CRV9GSVJFRDsKKyAgfQorICByZXR1cm4gUmVhY3RET007Cit9CisKK2V4cG9y
dHMuZ2V0UmVhY3RET00gPSBnZXRSZWFjdERPTTsKKworaWYgKCJkZXZlbG9wbWVudCIgIT09ICdw
cm9kdWN0aW9uJykgeworICBleHBvcnRzLmdldFJlYWN0UGVyZiA9IGZ1bmN0aW9uICgpIHsKKyAg
ICByZXR1cm4gZ2V0UmVhY3RET00oKS5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9Z
T1VfV0lMTF9CRV9GSVJFRC5SZWFjdFBlcmY7CisgIH07CisKKyAgZXhwb3J0cy5nZXRSZWFjdFRl
c3RVdGlscyA9IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gZ2V0UmVhY3RET00oKS5fX1NFQ1JF
VF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRC5SZWFjdFRlc3RVdGls
czsKKyAgfTsKK30KK30seyIzMiI6MzJ9XSw3OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBv
cnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNl
ZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9u
YWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRT
IGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisK
K3ZhciBfYXNzaWduID0gX2RlcmVxXyg1MCk7CisKK2Z1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhp
bnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1
Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1
bmN0aW9uIik7IH0gfQorCitmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxm
LCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFz
bid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpOyB9IHJl
dHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gIm9iamVjdCIgfHwgdHlwZW9mIGNhbGwgPT09
ICJmdW5jdGlvbiIpID8gY2FsbCA6IHNlbGY7IH0KKworZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNs
YXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gImZ1bmN0aW9uIiAm
JiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJl
c3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIiArIHR5cGVvZiBz
dXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xh
c3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNs
YXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1
ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNl
dFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9
IHN1cGVyQ2xhc3M7IH0KKwordmFyIFJlYWN0ID0gX2RlcmVxXyg1KTsKK3ZhciBwcm9wVHlwZXNG
YWN0b3J5ID0gX2RlcmVxXyg1Mik7Cit2YXIgUHJvcFR5cGVzID0gcHJvcFR5cGVzRmFjdG9yeShS
ZWFjdC5pc1ZhbGlkRWxlbWVudCk7CisKK3ZhciBSZWFjdFRyYW5zaXRpb25Hcm91cCA9IF9kZXJl
cV8oMjkpOwordmFyIFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwQ2hpbGQgPSBfZGVyZXFfKDgpOwor
CitmdW5jdGlvbiBjcmVhdGVUcmFuc2l0aW9uVGltZW91dFByb3BWYWxpZGF0b3IodHJhbnNpdGlv
blR5cGUpIHsKKyAgdmFyIHRpbWVvdXRQcm9wTmFtZSA9ICd0cmFuc2l0aW9uJyArIHRyYW5zaXRp
b25UeXBlICsgJ1RpbWVvdXQnOworICB2YXIgZW5hYmxlZFByb3BOYW1lID0gJ3RyYW5zaXRpb24n
ICsgdHJhbnNpdGlvblR5cGU7CisKKyAgcmV0dXJuIGZ1bmN0aW9uIChwcm9wcykgeworICAgIC8v
IElmIHRoZSB0cmFuc2l0aW9uIGlzIGVuYWJsZWQKKyAgICBpZiAocHJvcHNbZW5hYmxlZFByb3BO
YW1lXSkgeworICAgICAgLy8gSWYgbm8gdGltZW91dCBkdXJhdGlvbiBpcyBwcm92aWRlZAorICAg
ICAgaWYgKHByb3BzW3RpbWVvdXRQcm9wTmFtZV0gPT0gbnVsbCkgeworICAgICAgICByZXR1cm4g
bmV3IEVycm9yKHRpbWVvdXRQcm9wTmFtZSArICcgd2FzblwndCBzdXBwbGllZCB0byBSZWFjdENT
U1RyYW5zaXRpb25Hcm91cDogJyArICd0aGlzIGNhbiBjYXVzZSB1bnJlbGlhYmxlIGFuaW1hdGlv
bnMgYW5kIHdvblwndCBiZSBzdXBwb3J0ZWQgaW4gJyArICdhIGZ1dHVyZSB2ZXJzaW9uIG9mIFJl
YWN0LiBTZWUgJyArICdodHRwczovL2ZiLm1lL3JlYWN0LWFuaW1hdGlvbi10cmFuc2l0aW9uLWdy
b3VwLXRpbWVvdXQgZm9yIG1vcmUgJyArICdpbmZvcm1hdGlvbi4nKTsKKworICAgICAgICAvLyBJ
ZiB0aGUgZHVyYXRpb24gaXNuJ3QgYSBudW1iZXIKKyAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBy
b3BzW3RpbWVvdXRQcm9wTmFtZV0gIT09ICdudW1iZXInKSB7CisgICAgICAgIHJldHVybiBuZXcg
RXJyb3IodGltZW91dFByb3BOYW1lICsgJyBtdXN0IGJlIGEgbnVtYmVyIChpbiBtaWxsaXNlY29u
ZHMpJyk7CisgICAgICB9CisgICAgfQorICB9OworfQorCisvKioKKyAqIEFuIGVhc3kgd2F5IHRv
IHBlcmZvcm0gQ1NTIHRyYW5zaXRpb25zIGFuZCBhbmltYXRpb25zIHdoZW4gYSBSZWFjdCBjb21w
b25lbnQKKyAqIGVudGVycyBvciBsZWF2ZXMgdGhlIERPTS4KKyAqIFNlZSBodHRwczovL2ZhY2Vi
b29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL2FuaW1hdGlvbi5odG1sI2hpZ2gtbGV2ZWwtYXBpLXJl
YWN0Y3NzdHJhbnNpdGlvbmdyb3VwCisgKi8KKwordmFyIFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3Vw
ID0gZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHsKKyAgX2luaGVyaXRzKFJlYWN0Q1NTVHJh
bnNpdGlvbkdyb3VwLCBfUmVhY3QkQ29tcG9uZW50KTsKKworICBmdW5jdGlvbiBSZWFjdENTU1Ry
YW5zaXRpb25Hcm91cCgpIHsKKyAgICB2YXIgX3RlbXAsIF90aGlzLCBfcmV0OworCisgICAgX2Ns
YXNzQ2FsbENoZWNrKHRoaXMsIFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwKTsKKworICAgIGZvciAo
dmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAw
OyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7CisgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19r
ZXldOworICAgIH0KKworICAgIHJldHVybiBfcmV0ID0gKF90ZW1wID0gKF90aGlzID0gX3Bvc3Np
YmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9S
ZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykpKSwgX3RoaXMpLCBfdGhpcy5fd3Jh
cENoaWxkID0gZnVuY3Rpb24gKGNoaWxkKSB7CisgICAgICAvLyBXZSBuZWVkIHRvIHByb3ZpZGUg
dGhpcyBjaGlsZEZhY3Rvcnkgc28gdGhhdAorICAgICAgLy8gUmVhY3RDU1NUcmFuc2l0aW9uR3Jv
dXBDaGlsZCBjYW4gcmVjZWl2ZSB1cGRhdGVzIHRvIG5hbWUsIGVudGVyLCBhbmQKKyAgICAgIC8v
IGxlYXZlIHdoaWxlIGl0IGlzIGxlYXZpbmcuCisgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxl
bWVudChSZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkLCB7CisgICAgICAgIG5hbWU6IF90aGlz
LnByb3BzLnRyYW5zaXRpb25OYW1lLAorICAgICAgICBhcHBlYXI6IF90aGlzLnByb3BzLnRyYW5z
aXRpb25BcHBlYXIsCisgICAgICAgIGVudGVyOiBfdGhpcy5wcm9wcy50cmFuc2l0aW9uRW50ZXIs
CisgICAgICAgIGxlYXZlOiBfdGhpcy5wcm9wcy50cmFuc2l0aW9uTGVhdmUsCisgICAgICAgIGFw
cGVhclRpbWVvdXQ6IF90aGlzLnByb3BzLnRyYW5zaXRpb25BcHBlYXJUaW1lb3V0LAorICAgICAg
ICBlbnRlclRpbWVvdXQ6IF90aGlzLnByb3BzLnRyYW5zaXRpb25FbnRlclRpbWVvdXQsCisgICAg
ICAgIGxlYXZlVGltZW91dDogX3RoaXMucHJvcHMudHJhbnNpdGlvbkxlYXZlVGltZW91dAorICAg
ICAgfSwgY2hpbGQpOworICAgIH0sIF90ZW1wKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4o
X3RoaXMsIF9yZXQpOworICB9CisKKyAgUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXAucHJvdG90eXBl
LnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHsKKyAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxl
bWVudChSZWFjdFRyYW5zaXRpb25Hcm91cCwgX2Fzc2lnbih7fSwgdGhpcy5wcm9wcywgeyBjaGls
ZEZhY3Rvcnk6IHRoaXMuX3dyYXBDaGlsZCB9KSk7CisgIH07CisKKyAgcmV0dXJuIFJlYWN0Q1NT
VHJhbnNpdGlvbkdyb3VwOworfShSZWFjdC5Db21wb25lbnQpOworCitSZWFjdENTU1RyYW5zaXRp
b25Hcm91cC5kaXNwbGF5TmFtZSA9ICdSZWFjdENTU1RyYW5zaXRpb25Hcm91cCc7CitSZWFjdENT
U1RyYW5zaXRpb25Hcm91cC5wcm9wVHlwZXMgPSB7CisgIHRyYW5zaXRpb25OYW1lOiBSZWFjdENT
U1RyYW5zaXRpb25Hcm91cENoaWxkLnByb3BUeXBlcy5uYW1lLAorCisgIHRyYW5zaXRpb25BcHBl
YXI6IFByb3BUeXBlcy5ib29sLAorICB0cmFuc2l0aW9uRW50ZXI6IFByb3BUeXBlcy5ib29sLAor
ICB0cmFuc2l0aW9uTGVhdmU6IFByb3BUeXBlcy5ib29sLAorICB0cmFuc2l0aW9uQXBwZWFyVGlt
ZW91dDogY3JlYXRlVHJhbnNpdGlvblRpbWVvdXRQcm9wVmFsaWRhdG9yKCdBcHBlYXInKSwKKyAg
dHJhbnNpdGlvbkVudGVyVGltZW91dDogY3JlYXRlVHJhbnNpdGlvblRpbWVvdXRQcm9wVmFsaWRh
dG9yKCdFbnRlcicpLAorICB0cmFuc2l0aW9uTGVhdmVUaW1lb3V0OiBjcmVhdGVUcmFuc2l0aW9u
VGltZW91dFByb3BWYWxpZGF0b3IoJ0xlYXZlJykKK307CitSZWFjdENTU1RyYW5zaXRpb25Hcm91
cC5kZWZhdWx0UHJvcHMgPSB7CisgIHRyYW5zaXRpb25BcHBlYXI6IGZhbHNlLAorICB0cmFuc2l0
aW9uRW50ZXI6IHRydWUsCisgIHRyYW5zaXRpb25MZWF2ZTogdHJ1ZQorfTsKKworCittb2R1bGUu
ZXhwb3J0cyA9IFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwOworfSx7IjI5IjoyOSwiNSI6NSwiNTAi
OjUwLCI1MiI6NTIsIjgiOjh9XSw4OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsK
Ky8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRl
ciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3Jh
bnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUg
aW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK2Z1bmN0
aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFu
Y2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90
IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIik7IH0gfQorCitmdW5jdGlvbiBfcG9zc2libGVD
b25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVm
ZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24n
dCBiZWVuIGNhbGxlZCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gIm9iamVj
dCIgfHwgdHlwZW9mIGNhbGwgPT09ICJmdW5jdGlvbiIpID8gY2FsbCA6IHNlbGY7IH0KKworZnVu
Y3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJD
bGFzcyAhPT0gImZ1bmN0aW9uIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBU
eXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0
aW9uLCBub3QgIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBP
YmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3Ry
dWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRy
dWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFBy
b3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6
IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH0KKwordmFyIFJlYWN0ID0gX2RlcmVx
Xyg1KTsKK3ZhciBSZWFjdEFkZG9uc0RPTURlcGVuZGVuY2llcyA9IF9kZXJlcV8oNik7CisKK3Zh
ciBwcm9wVHlwZXNGYWN0b3J5ID0gX2RlcmVxXyg1Mik7Cit2YXIgUHJvcFR5cGVzID0gcHJvcFR5
cGVzRmFjdG9yeShSZWFjdC5pc1ZhbGlkRWxlbWVudCk7CisKK3ZhciBDU1NDb3JlID0gX2RlcmVx
Xyg0Myk7Cit2YXIgUmVhY3RUcmFuc2l0aW9uRXZlbnRzID0gX2RlcmVxXygyOCk7CisKK3ZhciBv
bmx5Q2hpbGQgPSBfZGVyZXFfKDM4KTsKKwordmFyIFRJQ0sgPSAxNzsKKwordmFyIFJlYWN0Q1NT
VHJhbnNpdGlvbkdyb3VwQ2hpbGQgPSBmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkgeworICBf
aW5oZXJpdHMoUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXBDaGlsZCwgX1JlYWN0JENvbXBvbmVudCk7
CisKKyAgZnVuY3Rpb24gUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXBDaGlsZCgpIHsKKyAgICB2YXIg
X3RlbXAsIF90aGlzLCBfcmV0OworCisgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJlYWN0Q1NT
VHJhbnNpdGlvbkdyb3VwQ2hpbGQpOworCisgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5s
ZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5Kysp
IHsKKyAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07CisgICAgfQorCisgICAgcmV0
dXJuIF9yZXQgPSAoX3RlbXAgPSAoX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0
aGlzLCBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNd
LmNvbmNhdChhcmdzKSkpLCBfdGhpcyksIF90aGlzLl9pc01vdW50ZWQgPSBmYWxzZSwgX3RoaXMu
dHJhbnNpdGlvbiA9IGZ1bmN0aW9uIChhbmltYXRpb25UeXBlLCBmaW5pc2hDYWxsYmFjaywgdXNl
clNwZWNpZmllZERlbGF5KSB7CisgICAgICB2YXIgbm9kZSA9IFJlYWN0QWRkb25zRE9NRGVwZW5k
ZW5jaWVzLmdldFJlYWN0RE9NKCkuZmluZERPTU5vZGUoX3RoaXMpOworCisgICAgICBpZiAoIW5v
ZGUpIHsKKyAgICAgICAgaWYgKGZpbmlzaENhbGxiYWNrKSB7CisgICAgICAgICAgZmluaXNoQ2Fs
bGJhY2soKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIHZh
ciBjbGFzc05hbWUgPSBfdGhpcy5wcm9wcy5uYW1lW2FuaW1hdGlvblR5cGVdIHx8IF90aGlzLnBy
b3BzLm5hbWUgKyAnLScgKyBhbmltYXRpb25UeXBlOworICAgICAgdmFyIGFjdGl2ZUNsYXNzTmFt
ZSA9IF90aGlzLnByb3BzLm5hbWVbYW5pbWF0aW9uVHlwZSArICdBY3RpdmUnXSB8fCBjbGFzc05h
bWUgKyAnLWFjdGl2ZSc7CisgICAgICB2YXIgdGltZW91dCA9IG51bGw7CisKKyAgICAgIHZhciBl
bmRMaXN0ZW5lciA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgIGlmIChlICYmIGUudGFyZ2V0ICE9
PSBub2RlKSB7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2xlYXJU
aW1lb3V0KHRpbWVvdXQpOworCisgICAgICAgIENTU0NvcmUucmVtb3ZlQ2xhc3Mobm9kZSwgY2xh
c3NOYW1lKTsKKyAgICAgICAgQ1NTQ29yZS5yZW1vdmVDbGFzcyhub2RlLCBhY3RpdmVDbGFzc05h
bWUpOworCisgICAgICAgIFJlYWN0VHJhbnNpdGlvbkV2ZW50cy5yZW1vdmVFbmRFdmVudExpc3Rl
bmVyKG5vZGUsIGVuZExpc3RlbmVyKTsKKworICAgICAgICAvLyBVc3VhbGx5IHRoaXMgb3B0aW9u
YWwgY2FsbGJhY2sgaXMgdXNlZCBmb3IgaW5mb3JtaW5nIGFuIG93bmVyIG9mCisgICAgICAgIC8v
IGEgbGVhdmUgYW5pbWF0aW9uIGFuZCB0ZWxsaW5nIGl0IHRvIHJlbW92ZSB0aGUgY2hpbGQuCisg
ICAgICAgIGlmIChmaW5pc2hDYWxsYmFjaykgeworICAgICAgICAgIGZpbmlzaENhbGxiYWNrKCk7
CisgICAgICAgIH0KKyAgICAgIH07CisKKyAgICAgIENTU0NvcmUuYWRkQ2xhc3Mobm9kZSwgY2xh
c3NOYW1lKTsKKworICAgICAgLy8gTmVlZCB0byBkbyB0aGlzIHRvIGFjdHVhbGx5IHRyaWdnZXIg
YSB0cmFuc2l0aW9uLgorICAgICAgX3RoaXMucXVldWVDbGFzc0FuZE5vZGUoYWN0aXZlQ2xhc3NO
YW1lLCBub2RlKTsKKworICAgICAgLy8gSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGEgdGltZW91dCBk
ZWxheS4KKyAgICAgIGlmICh1c2VyU3BlY2lmaWVkRGVsYXkpIHsKKyAgICAgICAgLy8gQ2xlYW4t
dXAgdGhlIGFuaW1hdGlvbiBhZnRlciB0aGUgc3BlY2lmaWVkIGRlbGF5CisgICAgICAgIHRpbWVv
dXQgPSBzZXRUaW1lb3V0KGVuZExpc3RlbmVyLCB1c2VyU3BlY2lmaWVkRGVsYXkpOworICAgICAg
ICBfdGhpcy50cmFuc2l0aW9uVGltZW91dHMucHVzaCh0aW1lb3V0KTsKKyAgICAgIH0gZWxzZSB7
CisgICAgICAgIC8vIERFUFJFQ0FURUQ6IHRoaXMgbGlzdGVuZXIgd2lsbCBiZSByZW1vdmVkIGlu
IGEgZnV0dXJlIHZlcnNpb24gb2YgcmVhY3QKKyAgICAgICAgUmVhY3RUcmFuc2l0aW9uRXZlbnRz
LmFkZEVuZEV2ZW50TGlzdGVuZXIobm9kZSwgZW5kTGlzdGVuZXIpOworICAgICAgfQorICAgIH0s
IF90aGlzLnF1ZXVlQ2xhc3NBbmROb2RlID0gZnVuY3Rpb24gKGNsYXNzTmFtZSwgbm9kZSkgewor
ICAgICAgX3RoaXMuY2xhc3NOYW1lQW5kTm9kZVF1ZXVlLnB1c2goeworICAgICAgICBjbGFzc05h
bWU6IGNsYXNzTmFtZSwKKyAgICAgICAgbm9kZTogbm9kZQorICAgICAgfSk7CisKKyAgICAgIGlm
ICghX3RoaXMudGltZW91dCkgeworICAgICAgICBfdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dChf
dGhpcy5mbHVzaENsYXNzTmFtZUFuZE5vZGVRdWV1ZSwgVElDSyk7CisgICAgICB9CisgICAgfSwg
X3RoaXMuZmx1c2hDbGFzc05hbWVBbmROb2RlUXVldWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICBp
ZiAoX3RoaXMuX2lzTW91bnRlZCkgeworICAgICAgICBfdGhpcy5jbGFzc05hbWVBbmROb2RlUXVl
dWUuZm9yRWFjaChmdW5jdGlvbiAob2JqKSB7CisgICAgICAgICAgQ1NTQ29yZS5hZGRDbGFzcyhv
Ymoubm9kZSwgb2JqLmNsYXNzTmFtZSk7CisgICAgICAgIH0pOworICAgICAgfQorICAgICAgX3Ro
aXMuY2xhc3NOYW1lQW5kTm9kZVF1ZXVlLmxlbmd0aCA9IDA7CisgICAgICBfdGhpcy50aW1lb3V0
ID0gbnVsbDsKKyAgICB9LCBfdGhpcy5jb21wb25lbnRXaWxsQXBwZWFyID0gZnVuY3Rpb24gKGRv
bmUpIHsKKyAgICAgIGlmIChfdGhpcy5wcm9wcy5hcHBlYXIpIHsKKyAgICAgICAgX3RoaXMudHJh
bnNpdGlvbignYXBwZWFyJywgZG9uZSwgX3RoaXMucHJvcHMuYXBwZWFyVGltZW91dCk7CisgICAg
ICB9IGVsc2UgeworICAgICAgICBkb25lKCk7CisgICAgICB9CisgICAgfSwgX3RoaXMuY29tcG9u
ZW50V2lsbEVudGVyID0gZnVuY3Rpb24gKGRvbmUpIHsKKyAgICAgIGlmIChfdGhpcy5wcm9wcy5l
bnRlcikgeworICAgICAgICBfdGhpcy50cmFuc2l0aW9uKCdlbnRlcicsIGRvbmUsIF90aGlzLnBy
b3BzLmVudGVyVGltZW91dCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBkb25lKCk7CisgICAg
ICB9CisgICAgfSwgX3RoaXMuY29tcG9uZW50V2lsbExlYXZlID0gZnVuY3Rpb24gKGRvbmUpIHsK
KyAgICAgIGlmIChfdGhpcy5wcm9wcy5sZWF2ZSkgeworICAgICAgICBfdGhpcy50cmFuc2l0aW9u
KCdsZWF2ZScsIGRvbmUsIF90aGlzLnByb3BzLmxlYXZlVGltZW91dCk7CisgICAgICB9IGVsc2Ug
eworICAgICAgICBkb25lKCk7CisgICAgICB9CisgICAgfSwgX3RlbXApLCBfcG9zc2libGVDb25z
dHJ1Y3RvclJldHVybihfdGhpcywgX3JldCk7CisgIH0KKworICBSZWFjdENTU1RyYW5zaXRpb25H
cm91cENoaWxkLnByb3RvdHlwZS5jb21wb25lbnRXaWxsTW91bnQgPSBmdW5jdGlvbiBjb21wb25l
bnRXaWxsTW91bnQoKSB7CisgICAgdGhpcy5jbGFzc05hbWVBbmROb2RlUXVldWUgPSBbXTsKKyAg
ICB0aGlzLnRyYW5zaXRpb25UaW1lb3V0cyA9IFtdOworICB9OworCisgIFJlYWN0Q1NTVHJhbnNp
dGlvbkdyb3VwQ2hpbGQucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29t
cG9uZW50RGlkTW91bnQoKSB7CisgICAgdGhpcy5faXNNb3VudGVkID0gdHJ1ZTsKKyAgfTsKKwor
ICBSZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5t
b3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkgeworICAgIHRoaXMuX2lzTW91
bnRlZCA9IGZhbHNlOworCisgICAgaWYgKHRoaXMudGltZW91dCkgeworICAgICAgY2xlYXJUaW1l
b3V0KHRoaXMudGltZW91dCk7CisgICAgfQorICAgIHRoaXMudHJhbnNpdGlvblRpbWVvdXRzLmZv
ckVhY2goZnVuY3Rpb24gKHRpbWVvdXQpIHsKKyAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTsK
KyAgICB9KTsKKworICAgIHRoaXMuY2xhc3NOYW1lQW5kTm9kZVF1ZXVlLmxlbmd0aCA9IDA7Cisg
IH07CisKKyAgUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXBDaGlsZC5wcm90b3R5cGUucmVuZGVyID0g
ZnVuY3Rpb24gcmVuZGVyKCkgeworICAgIHJldHVybiBvbmx5Q2hpbGQodGhpcy5wcm9wcy5jaGls
ZHJlbik7CisgIH07CisKKyAgcmV0dXJuIFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwQ2hpbGQ7Cit9
KFJlYWN0LkNvbXBvbmVudCk7CisKK1JlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwQ2hpbGQucHJvcFR5
cGVzID0geworICBuYW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQ
cm9wVHlwZXMuc2hhcGUoeworICAgIGVudGVyOiBQcm9wVHlwZXMuc3RyaW5nLAorICAgIGxlYXZl
OiBQcm9wVHlwZXMuc3RyaW5nLAorICAgIGFjdGl2ZTogUHJvcFR5cGVzLnN0cmluZworICB9KSwg
UHJvcFR5cGVzLnNoYXBlKHsKKyAgICBlbnRlcjogUHJvcFR5cGVzLnN0cmluZywKKyAgICBlbnRl
ckFjdGl2ZTogUHJvcFR5cGVzLnN0cmluZywKKyAgICBsZWF2ZTogUHJvcFR5cGVzLnN0cmluZywK
KyAgICBsZWF2ZUFjdGl2ZTogUHJvcFR5cGVzLnN0cmluZywKKyAgICBhcHBlYXI6IFByb3BUeXBl
cy5zdHJpbmcsCisgICAgYXBwZWFyQWN0aXZlOiBQcm9wVHlwZXMuc3RyaW5nCisgIH0pXSkuaXNS
ZXF1aXJlZCwKKworICAvLyBPbmNlIHdlIHJlcXVpcmUgdGltZW91dHMgdG8gYmUgc3BlY2lmaWVk
LCB3ZSBjYW4gcmVtb3ZlIHRoZQorICAvLyBib29sZWFuIGZsYWdzIChhcHBlYXIgZXRjLikgYW5k
IGp1c3QgYWNjZXB0IGEgbnVtYmVyCisgIC8vIG9yIGEgYm9vbCBmb3IgdGhlIHRpbWVvdXQgZmxh
Z3MgKGFwcGVhclRpbWVvdXQgZXRjLikKKyAgYXBwZWFyOiBQcm9wVHlwZXMuYm9vbCwKKyAgZW50
ZXI6IFByb3BUeXBlcy5ib29sLAorICBsZWF2ZTogUHJvcFR5cGVzLmJvb2wsCisgIGFwcGVhclRp
bWVvdXQ6IFByb3BUeXBlcy5udW1iZXIsCisgIGVudGVyVGltZW91dDogUHJvcFR5cGVzLm51bWJl
ciwKKyAgbGVhdmVUaW1lb3V0OiBQcm9wVHlwZXMubnVtYmVyCit9OworCisKK21vZHVsZS5leHBv
cnRzID0gUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXBDaGlsZDsKK30seyIyOCI6MjgsIjM4IjozOCwi
NDMiOjQzLCI1Ijo1LCI1MiI6NTIsIjYiOjZ9XSw5OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxl
eHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4K
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNl
bnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0
aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRF
TlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7
CisKK3ZhciBQb29sZWRDbGFzcyA9IF9kZXJlcV8oNCk7Cit2YXIgUmVhY3RFbGVtZW50ID0gX2Rl
cmVxXygxNik7CisKK3ZhciBlbXB0eUZ1bmN0aW9uID0gX2RlcmVxXyg0NSk7Cit2YXIgdHJhdmVy
c2VBbGxDaGlsZHJlbiA9IF9kZXJlcV8oNDEpOworCit2YXIgdHdvQXJndW1lbnRQb29sZXIgPSBQ
b29sZWRDbGFzcy50d29Bcmd1bWVudFBvb2xlcjsKK3ZhciBmb3VyQXJndW1lbnRQb29sZXIgPSBQ
b29sZWRDbGFzcy5mb3VyQXJndW1lbnRQb29sZXI7CisKK3ZhciB1c2VyUHJvdmlkZWRLZXlFc2Nh
cGVSZWdleCA9IC9cLysvZzsKK2Z1bmN0aW9uIGVzY2FwZVVzZXJQcm92aWRlZEtleSh0ZXh0KSB7
CisgIHJldHVybiAoJycgKyB0ZXh0KS5yZXBsYWNlKHVzZXJQcm92aWRlZEtleUVzY2FwZVJlZ2V4
LCAnJCYvJyk7Cit9CisKKy8qKgorICogUG9vbGVkQ2xhc3MgcmVwcmVzZW50aW5nIHRoZSBib29r
a2VlcGluZyBhc3NvY2lhdGVkIHdpdGggcGVyZm9ybWluZyBhIGNoaWxkCisgKiB0cmF2ZXJzYWwu
IEFsbG93cyBhdm9pZGluZyBiaW5kaW5nIGNhbGxiYWNrcy4KKyAqCisgKiBAY29uc3RydWN0b3Ig
Rm9yRWFjaEJvb2tLZWVwaW5nCisgKiBAcGFyYW0geyFmdW5jdGlvbn0gZm9yRWFjaEZ1bmN0aW9u
IEZ1bmN0aW9uIHRvIHBlcmZvcm0gdHJhdmVyc2FsIHdpdGguCisgKiBAcGFyYW0gez8qfSBmb3JF
YWNoQ29udGV4dCBDb250ZXh0IHRvIHBlcmZvcm0gY29udGV4dCB3aXRoLgorICovCitmdW5jdGlv
biBGb3JFYWNoQm9va0tlZXBpbmcoZm9yRWFjaEZ1bmN0aW9uLCBmb3JFYWNoQ29udGV4dCkgewor
ICB0aGlzLmZ1bmMgPSBmb3JFYWNoRnVuY3Rpb247CisgIHRoaXMuY29udGV4dCA9IGZvckVhY2hD
b250ZXh0OworICB0aGlzLmNvdW50ID0gMDsKK30KK0ZvckVhY2hCb29rS2VlcGluZy5wcm90b3R5
cGUuZGVzdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsKKyAgdGhpcy5mdW5jID0gbnVsbDsKKyAgdGhp
cy5jb250ZXh0ID0gbnVsbDsKKyAgdGhpcy5jb3VudCA9IDA7Cit9OworUG9vbGVkQ2xhc3MuYWRk
UG9vbGluZ1RvKEZvckVhY2hCb29rS2VlcGluZywgdHdvQXJndW1lbnRQb29sZXIpOworCitmdW5j
dGlvbiBmb3JFYWNoU2luZ2xlQ2hpbGQoYm9va0tlZXBpbmcsIGNoaWxkLCBuYW1lKSB7CisgIHZh
ciBmdW5jID0gYm9va0tlZXBpbmcuZnVuYywKKyAgICAgIGNvbnRleHQgPSBib29rS2VlcGluZy5j
b250ZXh0OworCisgIGZ1bmMuY2FsbChjb250ZXh0LCBjaGlsZCwgYm9va0tlZXBpbmcuY291bnQr
Kyk7Cit9CisKKy8qKgorICogSXRlcmF0ZXMgdGhyb3VnaCBjaGlsZHJlbiB0aGF0IGFyZSB0eXBp
Y2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuCisgKgorICogU2VlIGh0dHBzOi8v
ZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNo
aWxkcmVuLmZvcmVhY2gKKyAqCisgKiBUaGUgcHJvdmlkZWQgZm9yRWFjaEZ1bmMoY2hpbGQsIGlu
ZGV4KSB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaAorICogbGVhZiBjaGlsZC4KKyAqCisgKiBAcGFy
YW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci4KKyAqIEBwYXJhbSB7ZnVu
Y3Rpb24oKiwgaW50KX0gZm9yRWFjaEZ1bmMKKyAqIEBwYXJhbSB7Kn0gZm9yRWFjaENvbnRleHQg
Q29udGV4dCBmb3IgZm9yRWFjaENvbnRleHQuCisgKi8KK2Z1bmN0aW9uIGZvckVhY2hDaGlsZHJl
bihjaGlsZHJlbiwgZm9yRWFjaEZ1bmMsIGZvckVhY2hDb250ZXh0KSB7CisgIGlmIChjaGlsZHJl
biA9PSBudWxsKSB7CisgICAgcmV0dXJuIGNoaWxkcmVuOworICB9CisgIHZhciB0cmF2ZXJzZUNv
bnRleHQgPSBGb3JFYWNoQm9va0tlZXBpbmcuZ2V0UG9vbGVkKGZvckVhY2hGdW5jLCBmb3JFYWNo
Q29udGV4dCk7CisgIHRyYXZlcnNlQWxsQ2hpbGRyZW4oY2hpbGRyZW4sIGZvckVhY2hTaW5nbGVD
aGlsZCwgdHJhdmVyc2VDb250ZXh0KTsKKyAgRm9yRWFjaEJvb2tLZWVwaW5nLnJlbGVhc2UodHJh
dmVyc2VDb250ZXh0KTsKK30KKworLyoqCisgKiBQb29sZWRDbGFzcyByZXByZXNlbnRpbmcgdGhl
IGJvb2trZWVwaW5nIGFzc29jaWF0ZWQgd2l0aCBwZXJmb3JtaW5nIGEgY2hpbGQKKyAqIG1hcHBp
bmcuIEFsbG93cyBhdm9pZGluZyBiaW5kaW5nIGNhbGxiYWNrcy4KKyAqCisgKiBAY29uc3RydWN0
b3IgTWFwQm9va0tlZXBpbmcKKyAqIEBwYXJhbSB7ISp9IG1hcFJlc3VsdCBPYmplY3QgY29udGFp
bmluZyB0aGUgb3JkZXJlZCBtYXAgb2YgcmVzdWx0cy4KKyAqIEBwYXJhbSB7IWZ1bmN0aW9ufSBt
YXBGdW5jdGlvbiBGdW5jdGlvbiB0byBwZXJmb3JtIG1hcHBpbmcgd2l0aC4KKyAqIEBwYXJhbSB7
Pyp9IG1hcENvbnRleHQgQ29udGV4dCB0byBwZXJmb3JtIG1hcHBpbmcgd2l0aC4KKyAqLworZnVu
Y3Rpb24gTWFwQm9va0tlZXBpbmcobWFwUmVzdWx0LCBrZXlQcmVmaXgsIG1hcEZ1bmN0aW9uLCBt
YXBDb250ZXh0KSB7CisgIHRoaXMucmVzdWx0ID0gbWFwUmVzdWx0OworICB0aGlzLmtleVByZWZp
eCA9IGtleVByZWZpeDsKKyAgdGhpcy5mdW5jID0gbWFwRnVuY3Rpb247CisgIHRoaXMuY29udGV4
dCA9IG1hcENvbnRleHQ7CisgIHRoaXMuY291bnQgPSAwOworfQorTWFwQm9va0tlZXBpbmcucHJv
dG90eXBlLmRlc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7CisgIHRoaXMucmVzdWx0ID0gbnVsbDsK
KyAgdGhpcy5rZXlQcmVmaXggPSBudWxsOworICB0aGlzLmZ1bmMgPSBudWxsOworICB0aGlzLmNv
bnRleHQgPSBudWxsOworICB0aGlzLmNvdW50ID0gMDsKK307CitQb29sZWRDbGFzcy5hZGRQb29s
aW5nVG8oTWFwQm9va0tlZXBpbmcsIGZvdXJBcmd1bWVudFBvb2xlcik7CisKK2Z1bmN0aW9uIG1h
cFNpbmdsZUNoaWxkSW50b0NvbnRleHQoYm9va0tlZXBpbmcsIGNoaWxkLCBjaGlsZEtleSkgewor
ICB2YXIgcmVzdWx0ID0gYm9va0tlZXBpbmcucmVzdWx0LAorICAgICAga2V5UHJlZml4ID0gYm9v
a0tlZXBpbmcua2V5UHJlZml4LAorICAgICAgZnVuYyA9IGJvb2tLZWVwaW5nLmZ1bmMsCisgICAg
ICBjb250ZXh0ID0gYm9va0tlZXBpbmcuY29udGV4dDsKKworCisgIHZhciBtYXBwZWRDaGlsZCA9
IGZ1bmMuY2FsbChjb250ZXh0LCBjaGlsZCwgYm9va0tlZXBpbmcuY291bnQrKyk7CisgIGlmIChB
cnJheS5pc0FycmF5KG1hcHBlZENoaWxkKSkgeworICAgIG1hcEludG9XaXRoS2V5UHJlZml4SW50
ZXJuYWwobWFwcGVkQ2hpbGQsIHJlc3VsdCwgY2hpbGRLZXksIGVtcHR5RnVuY3Rpb24udGhhdFJl
dHVybnNBcmd1bWVudCk7CisgIH0gZWxzZSBpZiAobWFwcGVkQ2hpbGQgIT0gbnVsbCkgeworICAg
IGlmIChSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQobWFwcGVkQ2hpbGQpKSB7CisgICAgICBt
YXBwZWRDaGlsZCA9IFJlYWN0RWxlbWVudC5jbG9uZUFuZFJlcGxhY2VLZXkobWFwcGVkQ2hpbGQs
CisgICAgICAvLyBLZWVwIGJvdGggdGhlIChtYXBwZWQpIGFuZCBvbGQga2V5cyBpZiB0aGV5IGRp
ZmZlciwganVzdCBhcworICAgICAgLy8gdHJhdmVyc2VBbGxDaGlsZHJlbiB1c2VkIHRvIGRvIGZv
ciBvYmplY3RzIGFzIGNoaWxkcmVuCisgICAgICBrZXlQcmVmaXggKyAobWFwcGVkQ2hpbGQua2V5
ICYmICghY2hpbGQgfHwgY2hpbGQua2V5ICE9PSBtYXBwZWRDaGlsZC5rZXkpID8gZXNjYXBlVXNl
clByb3ZpZGVkS2V5KG1hcHBlZENoaWxkLmtleSkgKyAnLycgOiAnJykgKyBjaGlsZEtleSk7Cisg
ICAgfQorICAgIHJlc3VsdC5wdXNoKG1hcHBlZENoaWxkKTsKKyAgfQorfQorCitmdW5jdGlvbiBt
YXBJbnRvV2l0aEtleVByZWZpeEludGVybmFsKGNoaWxkcmVuLCBhcnJheSwgcHJlZml4LCBmdW5j
LCBjb250ZXh0KSB7CisgIHZhciBlc2NhcGVkUHJlZml4ID0gJyc7CisgIGlmIChwcmVmaXggIT0g
bnVsbCkgeworICAgIGVzY2FwZWRQcmVmaXggPSBlc2NhcGVVc2VyUHJvdmlkZWRLZXkocHJlZml4
KSArICcvJzsKKyAgfQorICB2YXIgdHJhdmVyc2VDb250ZXh0ID0gTWFwQm9va0tlZXBpbmcuZ2V0
UG9vbGVkKGFycmF5LCBlc2NhcGVkUHJlZml4LCBmdW5jLCBjb250ZXh0KTsKKyAgdHJhdmVyc2VB
bGxDaGlsZHJlbihjaGlsZHJlbiwgbWFwU2luZ2xlQ2hpbGRJbnRvQ29udGV4dCwgdHJhdmVyc2VD
b250ZXh0KTsKKyAgTWFwQm9va0tlZXBpbmcucmVsZWFzZSh0cmF2ZXJzZUNvbnRleHQpOworfQor
CisvKioKKyAqIE1hcHMgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhcyBg
cHJvcHMuY2hpbGRyZW5gLgorICoKKyAqIFNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9y
ZWFjdC9kb2NzL3RvcC1sZXZlbC1hcGkuaHRtbCNyZWFjdC5jaGlsZHJlbi5tYXAKKyAqCisgKiBU
aGUgcHJvdmlkZWQgbWFwRnVuY3Rpb24oY2hpbGQsIGtleSwgaW5kZXgpIHdpbGwgYmUgY2FsbGVk
IGZvciBlYWNoCisgKiBsZWFmIGNoaWxkLgorICoKKyAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENo
aWxkcmVuIHRyZWUgY29udGFpbmVyLgorICogQHBhcmFtIHtmdW5jdGlvbigqLCBpbnQpfSBmdW5j
IFRoZSBtYXAgZnVuY3Rpb24uCisgKiBAcGFyYW0geyp9IGNvbnRleHQgQ29udGV4dCBmb3IgbWFw
RnVuY3Rpb24uCisgKiBAcmV0dXJuIHtvYmplY3R9IE9iamVjdCBjb250YWluaW5nIHRoZSBvcmRl
cmVkIG1hcCBvZiByZXN1bHRzLgorICovCitmdW5jdGlvbiBtYXBDaGlsZHJlbihjaGlsZHJlbiwg
ZnVuYywgY29udGV4dCkgeworICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkgeworICAgIHJldHVybiBj
aGlsZHJlbjsKKyAgfQorICB2YXIgcmVzdWx0ID0gW107CisgIG1hcEludG9XaXRoS2V5UHJlZml4
SW50ZXJuYWwoY2hpbGRyZW4sIHJlc3VsdCwgbnVsbCwgZnVuYywgY29udGV4dCk7CisgIHJldHVy
biByZXN1bHQ7Cit9CisKK2Z1bmN0aW9uIGZvckVhY2hTaW5nbGVDaGlsZER1bW15KHRyYXZlcnNl
Q29udGV4dCwgY2hpbGQsIG5hbWUpIHsKKyAgcmV0dXJuIG51bGw7Cit9CisKKy8qKgorICogQ291
bnQgdGhlIG51bWJlciBvZiBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFz
CisgKiBgcHJvcHMuY2hpbGRyZW5gLgorICoKKyAqIFNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1
Yi5pby9yZWFjdC9kb2NzL3RvcC1sZXZlbC1hcGkuaHRtbCNyZWFjdC5jaGlsZHJlbi5jb3VudAor
ICoKKyAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLgorICog
QHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGNoaWxkcmVuLgorICovCitmdW5jdGlvbiBj
b3VudENoaWxkcmVuKGNoaWxkcmVuLCBjb250ZXh0KSB7CisgIHJldHVybiB0cmF2ZXJzZUFsbENo
aWxkcmVuKGNoaWxkcmVuLCBmb3JFYWNoU2luZ2xlQ2hpbGREdW1teSwgbnVsbCk7Cit9CisKKy8q
KgorICogRmxhdHRlbiBhIGNoaWxkcmVuIG9iamVjdCAodHlwaWNhbGx5IHNwZWNpZmllZCBhcyBg
cHJvcHMuY2hpbGRyZW5gKSBhbmQKKyAqIHJldHVybiBhbiBhcnJheSB3aXRoIGFwcHJvcHJpYXRl
bHkgcmUta2V5ZWQgY2hpbGRyZW4uCisgKgorICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHVi
LmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNoaWxkcmVuLnRvYXJyYXkK
KyAqLworZnVuY3Rpb24gdG9BcnJheShjaGlsZHJlbikgeworICB2YXIgcmVzdWx0ID0gW107Cisg
IG1hcEludG9XaXRoS2V5UHJlZml4SW50ZXJuYWwoY2hpbGRyZW4sIHJlc3VsdCwgbnVsbCwgZW1w
dHlGdW5jdGlvbi50aGF0UmV0dXJuc0FyZ3VtZW50KTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dmFyIFJlYWN0Q2hpbGRyZW4gPSB7CisgIGZvckVhY2g6IGZvckVhY2hDaGlsZHJlbiwKKyAgbWFw
OiBtYXBDaGlsZHJlbiwKKyAgbWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbDogbWFwSW50b1dp
dGhLZXlQcmVmaXhJbnRlcm5hbCwKKyAgY291bnQ6IGNvdW50Q2hpbGRyZW4sCisgIHRvQXJyYXk6
IHRvQXJyYXkKK307CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RDaGlsZHJlbjsKK30seyIxNiI6
MTYsIjQiOjQsIjQxIjo0MSwiNDUiOjQ1fV0sMTA6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4
cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vu
c2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0Ug
ZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRp
b25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVO
VFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsK
KwordmFyIF9wcm9kSW52YXJpYW50ID0gX2RlcmVxXygzOSksCisgICAgX2Fzc2lnbiA9IF9kZXJl
cV8oNTApOworCit2YXIgUmVhY3RDb21wb25lbnQgPSBfZGVyZXFfKDExKTsKK3ZhciBSZWFjdEVs
ZW1lbnQgPSBfZGVyZXFfKDE2KTsKK3ZhciBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lcyA9IF9k
ZXJlcV8oMjIpOwordmFyIFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlID0gX2RlcmVxXygyMSk7CisKK3Zh
ciBlbXB0eU9iamVjdCA9IF9kZXJlcV8oNDYpOwordmFyIGludmFyaWFudCA9IF9kZXJlcV8oNDcp
OwordmFyIHdhcm5pbmcgPSBfZGVyZXFfKDQ5KTsKKwordmFyIE1JWElOU19LRVkgPSAnbWl4aW5z
JzsKKworLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGFsbG93IHRoZSBjcmVhdGlvbiBvZiBhbm9ueW1v
dXMgZnVuY3Rpb25zIHdoaWNoIGRvIG5vdAorLy8gaGF2ZSAubmFtZSBzZXQgdG8gdGhlIG5hbWUg
b2YgdGhlIHZhcmlhYmxlIGJlaW5nIGFzc2lnbmVkIHRvLgorZnVuY3Rpb24gaWRlbnRpdHkoZm4p
IHsKKyAgcmV0dXJuIGZuOworfQorCisvKioKKyAqIFBvbGljaWVzIHRoYXQgZGVzY3JpYmUgbWV0
aG9kcyBpbiBgUmVhY3RDbGFzc0ludGVyZmFjZWAuCisgKi8KKworCit2YXIgaW5qZWN0ZWRNaXhp
bnMgPSBbXTsKKworLyoqCisgKiBDb21wb3NpdGUgY29tcG9uZW50cyBhcmUgaGlnaGVyLWxldmVs
IGNvbXBvbmVudHMgdGhhdCBjb21wb3NlIG90aGVyIGNvbXBvc2l0ZQorICogb3IgaG9zdCBjb21w
b25lbnRzLgorICoKKyAqIFRvIGNyZWF0ZSBhIG5ldyB0eXBlIG9mIGBSZWFjdENsYXNzYCwgcGFz
cyBhIHNwZWNpZmljYXRpb24gb2YKKyAqIHlvdXIgbmV3IGNsYXNzIHRvIGBSZWFjdC5jcmVhdGVD
bGFzc2AuIFRoZSBvbmx5IHJlcXVpcmVtZW50IG9mIHlvdXIgY2xhc3MKKyAqIHNwZWNpZmljYXRp
b24gaXMgdGhhdCB5b3UgaW1wbGVtZW50IGEgYHJlbmRlcmAgbWV0aG9kLgorICoKKyAqICAgdmFy
IE15Q29tcG9uZW50ID0gUmVhY3QuY3JlYXRlQ2xhc3MoeworICogICAgIHJlbmRlcjogZnVuY3Rp
b24oKSB7CisgKiAgICAgICByZXR1cm4gPGRpdj5IZWxsbyBXb3JsZDwvZGl2PjsKKyAqICAgICB9
CisgKiAgIH0pOworICoKKyAqIFRoZSBjbGFzcyBzcGVjaWZpY2F0aW9uIHN1cHBvcnRzIGEgc3Bl
Y2lmaWMgcHJvdG9jb2wgb2YgbWV0aG9kcyB0aGF0IGhhdmUKKyAqIHNwZWNpYWwgbWVhbmluZyAo
ZS5nLiBgcmVuZGVyYCkuIFNlZSBgUmVhY3RDbGFzc0ludGVyZmFjZWAgZm9yCisgKiBtb3JlIHRo
ZSBjb21wcmVoZW5zaXZlIHByb3RvY29sLiBBbnkgb3RoZXIgcHJvcGVydGllcyBhbmQgbWV0aG9k
cyBpbiB0aGUKKyAqIGNsYXNzIHNwZWNpZmljYXRpb24gd2lsbCBiZSBhdmFpbGFibGUgb24gdGhl
IHByb3RvdHlwZS4KKyAqCisgKiBAaW50ZXJmYWNlIFJlYWN0Q2xhc3NJbnRlcmZhY2UKKyAqIEBp
bnRlcm5hbAorICovCit2YXIgUmVhY3RDbGFzc0ludGVyZmFjZSA9IHsKKworICAvKioKKyAgICog
QW4gYXJyYXkgb2YgTWl4aW4gb2JqZWN0cyB0byBpbmNsdWRlIHdoZW4gZGVmaW5pbmcgeW91ciBj
b21wb25lbnQuCisgICAqCisgICAqIEB0eXBlIHthcnJheX0KKyAgICogQG9wdGlvbmFsCisgICAq
LworICBtaXhpbnM6ICdERUZJTkVfTUFOWScsCisKKyAgLyoqCisgICAqIEFuIG9iamVjdCBjb250
YWluaW5nIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgdGhhdCBzaG91bGQgYmUgZGVmaW5lZCBvbgor
ICAgKiB0aGUgY29tcG9uZW50J3MgY29uc3RydWN0b3IgaW5zdGVhZCBvZiBpdHMgcHJvdG90eXBl
IChzdGF0aWMgbWV0aG9kcykuCisgICAqCisgICAqIEB0eXBlIHtvYmplY3R9CisgICAqIEBvcHRp
b25hbAorICAgKi8KKyAgc3RhdGljczogJ0RFRklORV9NQU5ZJywKKworICAvKioKKyAgICogRGVm
aW5pdGlvbiBvZiBwcm9wIHR5cGVzIGZvciB0aGlzIGNvbXBvbmVudC4KKyAgICoKKyAgICogQHR5
cGUge29iamVjdH0KKyAgICogQG9wdGlvbmFsCisgICAqLworICBwcm9wVHlwZXM6ICdERUZJTkVf
TUFOWScsCisKKyAgLyoqCisgICAqIERlZmluaXRpb24gb2YgY29udGV4dCB0eXBlcyBmb3IgdGhp
cyBjb21wb25lbnQuCisgICAqCisgICAqIEB0eXBlIHtvYmplY3R9CisgICAqIEBvcHRpb25hbAor
ICAgKi8KKyAgY29udGV4dFR5cGVzOiAnREVGSU5FX01BTlknLAorCisgIC8qKgorICAgKiBEZWZp
bml0aW9uIG9mIGNvbnRleHQgdHlwZXMgdGhpcyBjb21wb25lbnQgc2V0cyBmb3IgaXRzIGNoaWxk
cmVuLgorICAgKgorICAgKiBAdHlwZSB7b2JqZWN0fQorICAgKiBAb3B0aW9uYWwKKyAgICovCisg
IGNoaWxkQ29udGV4dFR5cGVzOiAnREVGSU5FX01BTlknLAorCisgIC8vID09PT0gRGVmaW5pdGlv
biBtZXRob2RzID09PT0KKworICAvKioKKyAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQg
aXMgbW91bnRlZC4gVmFsdWVzIGluIHRoZSBtYXBwaW5nIHdpbGwgYmUgc2V0IG9uCisgICAqIGB0
aGlzLnByb3BzYCBpZiB0aGF0IHByb3AgaXMgbm90IHNwZWNpZmllZCAoaS5lLiB1c2luZyBhbiBg
aW5gIGNoZWNrKS4KKyAgICoKKyAgICogVGhpcyBtZXRob2QgaXMgaW52b2tlZCBiZWZvcmUgYGdl
dEluaXRpYWxTdGF0ZWAgYW5kIHRoZXJlZm9yZSBjYW5ub3QgcmVseQorICAgKiBvbiBgdGhpcy5z
dGF0ZWAgb3IgdXNlIGB0aGlzLnNldFN0YXRlYC4KKyAgICoKKyAgICogQHJldHVybiB7b2JqZWN0
fQorICAgKiBAb3B0aW9uYWwKKyAgICovCisgIGdldERlZmF1bHRQcm9wczogJ0RFRklORV9NQU5Z
X01FUkdFRCcsCisKKyAgLyoqCisgICAqIEludm9rZWQgb25jZSBiZWZvcmUgdGhlIGNvbXBvbmVu
dCBpcyBtb3VudGVkLiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdXNlZAorICAgKiBhcyB0aGUg
aW5pdGlhbCB2YWx1ZSBvZiBgdGhpcy5zdGF0ZWAuCisgICAqCisgICAqICAgZ2V0SW5pdGlhbFN0
YXRlOiBmdW5jdGlvbigpIHsKKyAgICogICAgIHJldHVybiB7CisgICAqICAgICAgIGlzT246IGZh
bHNlLAorICAgKiAgICAgICBmb29CYXo6IG5ldyBCYXpGb28oKQorICAgKiAgICAgfQorICAgKiAg
IH0KKyAgICoKKyAgICogQHJldHVybiB7b2JqZWN0fQorICAgKiBAb3B0aW9uYWwKKyAgICovCisg
IGdldEluaXRpYWxTdGF0ZTogJ0RFRklORV9NQU5ZX01FUkdFRCcsCisKKyAgLyoqCisgICAqIEBy
ZXR1cm4ge29iamVjdH0KKyAgICogQG9wdGlvbmFsCisgICAqLworICBnZXRDaGlsZENvbnRleHQ6
ICdERUZJTkVfTUFOWV9NRVJHRUQnLAorCisgIC8qKgorICAgKiBVc2VzIHByb3BzIGZyb20gYHRo
aXMucHJvcHNgIGFuZCBzdGF0ZSBmcm9tIGB0aGlzLnN0YXRlYCB0byByZW5kZXIgdGhlCisgICAq
IHN0cnVjdHVyZSBvZiB0aGUgY29tcG9uZW50LgorICAgKgorICAgKiBObyBndWFyYW50ZWVzIGFy
ZSBtYWRlIGFib3V0IHdoZW4gb3IgaG93IG9mdGVuIHRoaXMgbWV0aG9kIGlzIGludm9rZWQsIHNv
CisgICAqIGl0IG11c3Qgbm90IGhhdmUgc2lkZSBlZmZlY3RzLgorICAgKgorICAgKiAgIHJlbmRl
cjogZnVuY3Rpb24oKSB7CisgICAqICAgICB2YXIgbmFtZSA9IHRoaXMucHJvcHMubmFtZTsKKyAg
ICogICAgIHJldHVybiA8ZGl2PkhlbGxvLCB7bmFtZX0hPC9kaXY+OworICAgKiAgIH0KKyAgICoK
KyAgICogQHJldHVybiB7UmVhY3RDb21wb25lbnR9CisgICAqIEByZXF1aXJlZAorICAgKi8KKyAg
cmVuZGVyOiAnREVGSU5FX09OQ0UnLAorCisgIC8vID09PT0gRGVsZWdhdGUgbWV0aG9kcyA9PT09
CisKKyAgLyoqCisgICAqIEludm9rZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGluaXRpYWxseSBj
cmVhdGVkIGFuZCBhYm91dCB0byBiZSBtb3VudGVkLgorICAgKiBUaGlzIG1heSBoYXZlIHNpZGUg
ZWZmZWN0cywgYnV0IGFueSBleHRlcm5hbCBzdWJzY3JpcHRpb25zIG9yIGRhdGEgY3JlYXRlZAor
ICAgKiBieSB0aGlzIG1ldGhvZCBtdXN0IGJlIGNsZWFuZWQgdXAgaW4gYGNvbXBvbmVudFdpbGxV
bm1vdW50YC4KKyAgICoKKyAgICogQG9wdGlvbmFsCisgICAqLworICBjb21wb25lbnRXaWxsTW91
bnQ6ICdERUZJTkVfTUFOWScsCisKKyAgLyoqCisgICAqIEludm9rZWQgd2hlbiB0aGUgY29tcG9u
ZW50IGhhcyBiZWVuIG1vdW50ZWQgYW5kIGhhcyBhIERPTSByZXByZXNlbnRhdGlvbi4KKyAgICog
SG93ZXZlciwgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIERPTSBub2RlIGlzIGluIHRo
ZSBkb2N1bWVudC4KKyAgICoKKyAgICogVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkgdG8gb3Bl
cmF0ZSBvbiB0aGUgRE9NIHdoZW4gdGhlIGNvbXBvbmVudCBoYXMKKyAgICogYmVlbiBtb3VudGVk
IChpbml0aWFsaXplZCBhbmQgcmVuZGVyZWQpIGZvciB0aGUgZmlyc3QgdGltZS4KKyAgICoKKyAg
ICogQHBhcmFtIHtET01FbGVtZW50fSByb290Tm9kZSBET00gZWxlbWVudCByZXByZXNlbnRpbmcg
dGhlIGNvbXBvbmVudC4KKyAgICogQG9wdGlvbmFsCisgICAqLworICBjb21wb25lbnREaWRNb3Vu
dDogJ0RFRklORV9NQU5ZJywKKworICAvKioKKyAgICogSW52b2tlZCBiZWZvcmUgdGhlIGNvbXBv
bmVudCByZWNlaXZlcyBuZXcgcHJvcHMuCisgICAqCisgICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9y
dHVuaXR5IHRvIHJlYWN0IHRvIGEgcHJvcCB0cmFuc2l0aW9uIGJ5IHVwZGF0aW5nIHRoZQorICAg
KiBzdGF0ZSB1c2luZyBgdGhpcy5zZXRTdGF0ZWAuIEN1cnJlbnQgcHJvcHMgYXJlIGFjY2Vzc2Vk
IHZpYSBgdGhpcy5wcm9wc2AuCisgICAqCisgICAqICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9w
czogZnVuY3Rpb24obmV4dFByb3BzLCBuZXh0Q29udGV4dCkgeworICAgKiAgICAgdGhpcy5zZXRT
dGF0ZSh7CisgICAqICAgICAgIGxpa2VzSW5jcmVhc2luZzogbmV4dFByb3BzLmxpa2VDb3VudCA+
IHRoaXMucHJvcHMubGlrZUNvdW50CisgICAqICAgICB9KTsKKyAgICogICB9CisgICAqCisgICAq
IE5PVEU6IFRoZXJlIGlzIG5vIGVxdWl2YWxlbnQgYGNvbXBvbmVudFdpbGxSZWNlaXZlU3RhdGVg
LiBBbiBpbmNvbWluZyBwcm9wCisgICAqIHRyYW5zaXRpb24gbWF5IGNhdXNlIGEgc3RhdGUgY2hh
bmdlLCBidXQgdGhlIG9wcG9zaXRlIGlzIG5vdCB0cnVlLiBJZiB5b3UKKyAgICogbmVlZCBpdCwg
eW91IGFyZSBwcm9iYWJseSBsb29raW5nIGZvciBgY29tcG9uZW50V2lsbFVwZGF0ZWAuCisgICAq
CisgICAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0UHJvcHMKKyAgICogQG9wdGlvbmFsCisgICAqLwor
ICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzOiAnREVGSU5FX01BTlknLAorCisgIC8qKgorICAg
KiBJbnZva2VkIHdoaWxlIGRlY2lkaW5nIGlmIHRoZSBjb21wb25lbnQgc2hvdWxkIGJlIHVwZGF0
ZWQgYXMgYSByZXN1bHQgb2YKKyAgICogcmVjZWl2aW5nIG5ldyBwcm9wcywgc3RhdGUgYW5kL29y
IGNvbnRleHQuCisgICAqCisgICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIGByZXR1
cm4gZmFsc2VgIHdoZW4geW91J3JlIGNlcnRhaW4gdGhhdCB0aGUKKyAgICogdHJhbnNpdGlvbiB0
byB0aGUgbmV3IHByb3BzL3N0YXRlL2NvbnRleHQgd2lsbCBub3QgcmVxdWlyZSBhIGNvbXBvbmVu
dAorICAgKiB1cGRhdGUuCisgICAqCisgICAqICAgc2hvdWxkQ29tcG9uZW50VXBkYXRlOiBmdW5j
dGlvbihuZXh0UHJvcHMsIG5leHRTdGF0ZSwgbmV4dENvbnRleHQpIHsKKyAgICogICAgIHJldHVy
biAhZXF1YWwobmV4dFByb3BzLCB0aGlzLnByb3BzKSB8fAorICAgKiAgICAgICAhZXF1YWwobmV4
dFN0YXRlLCB0aGlzLnN0YXRlKSB8fAorICAgKiAgICAgICAhZXF1YWwobmV4dENvbnRleHQsIHRo
aXMuY29udGV4dCk7CisgICAqICAgfQorICAgKgorICAgKiBAcGFyYW0ge29iamVjdH0gbmV4dFBy
b3BzCisgICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dFN0YXRlCisgICAqIEBwYXJhbSB7P29iamVj
dH0gbmV4dENvbnRleHQKKyAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgY29tcG9u
ZW50IHNob3VsZCB1cGRhdGUuCisgICAqIEBvcHRpb25hbAorICAgKi8KKyAgc2hvdWxkQ29tcG9u
ZW50VXBkYXRlOiAnREVGSU5FX09OQ0UnLAorCisgIC8qKgorICAgKiBJbnZva2VkIHdoZW4gdGhl
IGNvbXBvbmVudCBpcyBhYm91dCB0byB1cGRhdGUgZHVlIHRvIGEgdHJhbnNpdGlvbiBmcm9tCisg
ICAqIGB0aGlzLnByb3BzYCwgYHRoaXMuc3RhdGVgIGFuZCBgdGhpcy5jb250ZXh0YCB0byBgbmV4
dFByb3BzYCwgYG5leHRTdGF0ZWAKKyAgICogYW5kIGBuZXh0Q29udGV4dGAuCisgICAqCisgICAq
IFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIHBlcmZvcm0gcHJlcGFyYXRpb24gYmVmb3Jl
IGFuIHVwZGF0ZSBvY2N1cnMuCisgICAqCisgICAqIE5PVEU6IFlvdSAqKmNhbm5vdCoqIHVzZSBg
dGhpcy5zZXRTdGF0ZSgpYCBpbiB0aGlzIG1ldGhvZC4KKyAgICoKKyAgICogQHBhcmFtIHtvYmpl
Y3R9IG5leHRQcm9wcworICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHRTdGF0ZQorICAgKiBAcGFy
YW0gez9vYmplY3R9IG5leHRDb250ZXh0CisgICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFu
c2FjdGlvbn0gdHJhbnNhY3Rpb24KKyAgICogQG9wdGlvbmFsCisgICAqLworICBjb21wb25lbnRX
aWxsVXBkYXRlOiAnREVGSU5FX01BTlknLAorCisgIC8qKgorICAgKiBJbnZva2VkIHdoZW4gdGhl
IGNvbXBvbmVudCdzIERPTSByZXByZXNlbnRhdGlvbiBoYXMgYmVlbiB1cGRhdGVkLgorICAgKgor
ICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBvcGVyYXRlIG9uIHRoZSBET00gd2hl
biB0aGUgY29tcG9uZW50IGhhcworICAgKiBiZWVuIHVwZGF0ZWQuCisgICAqCisgICAqIEBwYXJh
bSB7b2JqZWN0fSBwcmV2UHJvcHMKKyAgICogQHBhcmFtIHs/b2JqZWN0fSBwcmV2U3RhdGUKKyAg
ICogQHBhcmFtIHs/b2JqZWN0fSBwcmV2Q29udGV4dAorICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9
IHJvb3ROb2RlIERPTSBlbGVtZW50IHJlcHJlc2VudGluZyB0aGUgY29tcG9uZW50LgorICAgKiBA
b3B0aW9uYWwKKyAgICovCisgIGNvbXBvbmVudERpZFVwZGF0ZTogJ0RFRklORV9NQU5ZJywKKwor
ICAvKioKKyAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgYWJvdXQgdG8gYmUgcmVt
b3ZlZCBmcm9tIGl0cyBwYXJlbnQgYW5kIGhhdmUKKyAgICogaXRzIERPTSByZXByZXNlbnRhdGlv
biBkZXN0cm95ZWQuCisgICAqCisgICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIGRl
YWxsb2NhdGUgYW55IGV4dGVybmFsIHJlc291cmNlcy4KKyAgICoKKyAgICogTk9URTogVGhlcmUg
aXMgbm8gYGNvbXBvbmVudERpZFVubW91bnRgIHNpbmNlIHlvdXIgY29tcG9uZW50IHdpbGwgaGF2
ZSBiZWVuCisgICAqIGRlc3Ryb3llZCBieSB0aGF0IHBvaW50LgorICAgKgorICAgKiBAb3B0aW9u
YWwKKyAgICovCisgIGNvbXBvbmVudFdpbGxVbm1vdW50OiAnREVGSU5FX01BTlknLAorCisgIC8v
ID09PT0gQWR2YW5jZWQgbWV0aG9kcyA9PT09CisKKyAgLyoqCisgICAqIFVwZGF0ZXMgdGhlIGNv
bXBvbmVudCdzIGN1cnJlbnRseSBtb3VudGVkIERPTSByZXByZXNlbnRhdGlvbi4KKyAgICoKKyAg
ICogQnkgZGVmYXVsdCwgdGhpcyBpbXBsZW1lbnRzIFJlYWN0J3MgcmVuZGVyaW5nIGFuZCByZWNv
bmNpbGlhdGlvbiBhbGdvcml0aG0uCisgICAqIFNvcGhpc3RpY2F0ZWQgY2xpZW50cyBtYXkgd2lz
aCB0byBvdmVycmlkZSB0aGlzLgorICAgKgorICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJh
bnNhY3Rpb259IHRyYW5zYWN0aW9uCisgICAqIEBpbnRlcm5hbAorICAgKiBAb3ZlcnJpZGFibGUK
KyAgICovCisgIHVwZGF0ZUNvbXBvbmVudDogJ09WRVJSSURFX0JBU0UnCisKK307CisKKy8qKgor
ICogTWFwcGluZyBmcm9tIGNsYXNzIHNwZWNpZmljYXRpb24ga2V5cyB0byBzcGVjaWFsIHByb2Nl
c3NpbmcgZnVuY3Rpb25zLgorICoKKyAqIEFsdGhvdWdoIHRoZXNlIGFyZSBkZWNsYXJlZCBsaWtl
IGluc3RhbmNlIHByb3BlcnRpZXMgaW4gdGhlIHNwZWNpZmljYXRpb24KKyAqIHdoZW4gZGVmaW5p
bmcgY2xhc3NlcyB1c2luZyBgUmVhY3QuY3JlYXRlQ2xhc3NgLCB0aGV5IGFyZSBhY3R1YWxseSBz
dGF0aWMKKyAqIGFuZCBhcmUgYWNjZXNzaWJsZSBvbiB0aGUgY29uc3RydWN0b3IgaW5zdGVhZCBv
ZiB0aGUgcHJvdG90eXBlLiBEZXNwaXRlCisgKiBiZWluZyBzdGF0aWMsIHRoZXkgbXVzdCBiZSBk
ZWZpbmVkIG91dHNpZGUgb2YgdGhlICJzdGF0aWNzIiBrZXkgdW5kZXIKKyAqIHdoaWNoIGFsbCBv
dGhlciBzdGF0aWMgbWV0aG9kcyBhcmUgZGVmaW5lZC4KKyAqLwordmFyIFJFU0VSVkVEX1NQRUNf
S0VZUyA9IHsKKyAgZGlzcGxheU5hbWU6IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgZGlzcGxheU5h
bWUpIHsKKyAgICBDb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lOworICB9LAor
ICBtaXhpbnM6IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgbWl4aW5zKSB7CisgICAgaWYgKG1peGlu
cykgeworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaXhpbnMubGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgbWl4U3BlY0ludG9Db21wb25lbnQoQ29uc3RydWN0b3IsIG1peGluc1tpXSk7CisgICAg
ICB9CisgICAgfQorICB9LAorICBjaGlsZENvbnRleHRUeXBlczogZnVuY3Rpb24gKENvbnN0cnVj
dG9yLCBjaGlsZENvbnRleHRUeXBlcykgeworICAgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJv
ZHVjdGlvbicpIHsKKyAgICAgIHZhbGlkYXRlVHlwZURlZihDb25zdHJ1Y3RvciwgY2hpbGRDb250
ZXh0VHlwZXMsICdjaGlsZENvbnRleHQnKTsKKyAgICB9CisgICAgQ29uc3RydWN0b3IuY2hpbGRD
b250ZXh0VHlwZXMgPSBfYXNzaWduKHt9LCBDb25zdHJ1Y3Rvci5jaGlsZENvbnRleHRUeXBlcywg
Y2hpbGRDb250ZXh0VHlwZXMpOworICB9LAorICBjb250ZXh0VHlwZXM6IGZ1bmN0aW9uIChDb25z
dHJ1Y3RvciwgY29udGV4dFR5cGVzKSB7CisgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9k
dWN0aW9uJykgeworICAgICAgdmFsaWRhdGVUeXBlRGVmKENvbnN0cnVjdG9yLCBjb250ZXh0VHlw
ZXMsICdjb250ZXh0Jyk7CisgICAgfQorICAgIENvbnN0cnVjdG9yLmNvbnRleHRUeXBlcyA9IF9h
c3NpZ24oe30sIENvbnN0cnVjdG9yLmNvbnRleHRUeXBlcywgY29udGV4dFR5cGVzKTsKKyAgfSwK
KyAgLyoqCisgICAqIFNwZWNpYWwgY2FzZSBnZXREZWZhdWx0UHJvcHMgd2hpY2ggc2hvdWxkIG1v
dmUgaW50byBzdGF0aWNzIGJ1dCByZXF1aXJlcworICAgKiBhdXRvbWF0aWMgbWVyZ2luZy4KKyAg
ICovCisgIGdldERlZmF1bHRQcm9wczogZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBnZXREZWZhdWx0
UHJvcHMpIHsKKyAgICBpZiAoQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzKSB7CisgICAgICBD
b25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMgPSBjcmVhdGVNZXJnZWRSZXN1bHRGdW5jdGlvbihD
b25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMsIGdldERlZmF1bHRQcm9wcyk7CisgICAgfSBlbHNl
IHsKKyAgICAgIENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcyA9IGdldERlZmF1bHRQcm9wczsK
KyAgICB9CisgIH0sCisgIHByb3BUeXBlczogZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm9wVHlw
ZXMpIHsKKyAgICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgICB2
YWxpZGF0ZVR5cGVEZWYoQ29uc3RydWN0b3IsIHByb3BUeXBlcywgJ3Byb3AnKTsKKyAgICB9Cisg
ICAgQ29uc3RydWN0b3IucHJvcFR5cGVzID0gX2Fzc2lnbih7fSwgQ29uc3RydWN0b3IucHJvcFR5
cGVzLCBwcm9wVHlwZXMpOworICB9LAorICBzdGF0aWNzOiBmdW5jdGlvbiAoQ29uc3RydWN0b3Is
IHN0YXRpY3MpIHsKKyAgICBtaXhTdGF0aWNTcGVjSW50b0NvbXBvbmVudChDb25zdHJ1Y3Rvciwg
c3RhdGljcyk7CisgIH0sCisgIGF1dG9iaW5kOiBmdW5jdGlvbiAoKSB7fSB9OworCitmdW5jdGlv
biB2YWxpZGF0ZVR5cGVEZWYoQ29uc3RydWN0b3IsIHR5cGVEZWYsIGxvY2F0aW9uKSB7CisgIGZv
ciAodmFyIHByb3BOYW1lIGluIHR5cGVEZWYpIHsKKyAgICBpZiAodHlwZURlZi5oYXNPd25Qcm9w
ZXJ0eShwcm9wTmFtZSkpIHsKKyAgICAgIC8vIHVzZSBhIHdhcm5pbmcgaW5zdGVhZCBvZiBhbiBp
bnZhcmlhbnQgc28gY29tcG9uZW50cworICAgICAgLy8gZG9uJ3Qgc2hvdyB1cCBpbiBwcm9kIGJ1
dCBvbmx5IGluIF9fREVWX18KKyAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/
IHdhcm5pbmcodHlwZW9mIHR5cGVEZWZbcHJvcE5hbWVdID09PSAnZnVuY3Rpb24nLCAnJXM6ICVz
IHR5cGUgYCVzYCBpcyBpbnZhbGlkOyBpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJv
bSAnICsgJ1JlYWN0LlByb3BUeXBlcy4nLCBDb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCAnUmVh
Y3RDbGFzcycsIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXSwgcHJvcE5hbWUp
IDogdm9pZCAwOworICAgIH0KKyAgfQorfQorCitmdW5jdGlvbiB2YWxpZGF0ZU1ldGhvZE92ZXJy
aWRlKGlzQWxyZWFkeURlZmluZWQsIG5hbWUpIHsKKyAgdmFyIHNwZWNQb2xpY3kgPSBSZWFjdENs
YXNzSW50ZXJmYWNlLmhhc093blByb3BlcnR5KG5hbWUpID8gUmVhY3RDbGFzc0ludGVyZmFjZVtu
YW1lXSA6IG51bGw7CisKKyAgLy8gRGlzYWxsb3cgb3ZlcnJpZGluZyBvZiBiYXNlIGNsYXNzIG1l
dGhvZHMgdW5sZXNzIGV4cGxpY2l0bHkgYWxsb3dlZC4KKyAgaWYgKFJlYWN0Q2xhc3NNaXhpbi5o
YXNPd25Qcm9wZXJ0eShuYW1lKSkgeworICAgICEoc3BlY1BvbGljeSA9PT0gJ09WRVJSSURFX0JB
U0UnKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwg
J1JlYWN0Q2xhc3NJbnRlcmZhY2U6IFlvdSBhcmUgYXR0ZW1wdGluZyB0byBvdmVycmlkZSBgJXNg
IGZyb20geW91ciBjbGFzcyBzcGVjaWZpY2F0aW9uLiBFbnN1cmUgdGhhdCB5b3VyIG1ldGhvZCBu
YW1lcyBkbyBub3Qgb3ZlcmxhcCB3aXRoIFJlYWN0IG1ldGhvZHMuJywgbmFtZSkgOiBfcHJvZElu
dmFyaWFudCgnNzMnLCBuYW1lKSA6IHZvaWQgMDsKKyAgfQorCisgIC8vIERpc2FsbG93IGRlZmlu
aW5nIG1ldGhvZHMgbW9yZSB0aGFuIG9uY2UgdW5sZXNzIGV4cGxpY2l0bHkgYWxsb3dlZC4KKyAg
aWYgKGlzQWxyZWFkeURlZmluZWQpIHsKKyAgICAhKHNwZWNQb2xpY3kgPT09ICdERUZJTkVfTUFO
WScgfHwgc3BlY1BvbGljeSA9PT0gJ0RFRklORV9NQU5ZX01FUkdFRCcpID8gImRldmVsb3BtZW50
IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnUmVhY3RDbGFzc0ludGVyZmFj
ZTogWW91IGFyZSBhdHRlbXB0aW5nIHRvIGRlZmluZSBgJXNgIG9uIHlvdXIgY29tcG9uZW50IG1v
cmUgdGhhbiBvbmNlLiBUaGlzIGNvbmZsaWN0IG1heSBiZSBkdWUgdG8gYSBtaXhpbi4nLCBuYW1l
KSA6IF9wcm9kSW52YXJpYW50KCc3NCcsIG5hbWUpIDogdm9pZCAwOworICB9Cit9CisKKy8qKgor
ICogTWl4aW4gaGVscGVyIHdoaWNoIGhhbmRsZXMgcG9saWN5IHZhbGlkYXRpb24gYW5kIHJlc2Vy
dmVkCisgKiBzcGVjaWZpY2F0aW9uIGtleXMgd2hlbiBidWlsZGluZyBSZWFjdCBjbGFzc2VzLgor
ICovCitmdW5jdGlvbiBtaXhTcGVjSW50b0NvbXBvbmVudChDb25zdHJ1Y3Rvciwgc3BlYykgewor
ICBpZiAoIXNwZWMpIHsKKyAgICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7
CisgICAgICB2YXIgdHlwZW9mU3BlYyA9IHR5cGVvZiBzcGVjOworICAgICAgdmFyIGlzTWl4aW5W
YWxpZCA9IHR5cGVvZlNwZWMgPT09ICdvYmplY3QnICYmIHNwZWMgIT09IG51bGw7CisKKyAgICAg
ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoaXNNaXhpblZhbGlkLCAn
JXM6IFlvdVwncmUgYXR0ZW1wdGluZyB0byBpbmNsdWRlIGEgbWl4aW4gdGhhdCBpcyBlaXRoZXIg
bnVsbCAnICsgJ29yIG5vdCBhbiBvYmplY3QuIENoZWNrIHRoZSBtaXhpbnMgaW5jbHVkZWQgYnkg
dGhlIGNvbXBvbmVudCwgJyArICdhcyB3ZWxsIGFzIGFueSBtaXhpbnMgdGhleSBpbmNsdWRlIHRo
ZW1zZWx2ZXMuICcgKyAnRXhwZWN0ZWQgb2JqZWN0IGJ1dCBnb3QgJXMuJywgQ29uc3RydWN0b3Iu
ZGlzcGxheU5hbWUgfHwgJ1JlYWN0Q2xhc3MnLCBzcGVjID09PSBudWxsID8gbnVsbCA6IHR5cGVv
ZlNwZWMpIDogdm9pZCAwOworICAgIH0KKworICAgIHJldHVybjsKKyAgfQorCisgICEodHlwZW9m
IHNwZWMgIT09ICdmdW5jdGlvbicpID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8g
aW52YXJpYW50KGZhbHNlLCAnUmVhY3RDbGFzczogWW91XCdyZSBhdHRlbXB0aW5nIHRvIHVzZSBh
IGNvbXBvbmVudCBjbGFzcyBvciBmdW5jdGlvbiBhcyBhIG1peGluLiBJbnN0ZWFkLCBqdXN0IHVz
ZSBhIHJlZ3VsYXIgb2JqZWN0LicpIDogX3Byb2RJbnZhcmlhbnQoJzc1JykgOiB2b2lkIDA7Cisg
ICEhUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KHNwZWMpID8gImRldmVsb3BtZW50IiAhPT0g
J3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnUmVhY3RDbGFzczogWW91XCdyZSBhdHRl
bXB0aW5nIHRvIHVzZSBhIGNvbXBvbmVudCBhcyBhIG1peGluLiBJbnN0ZWFkLCBqdXN0IHVzZSBh
IHJlZ3VsYXIgb2JqZWN0LicpIDogX3Byb2RJbnZhcmlhbnQoJzc2JykgOiB2b2lkIDA7CisKKyAg
dmFyIHByb3RvID0gQ29uc3RydWN0b3IucHJvdG90eXBlOworICB2YXIgYXV0b0JpbmRQYWlycyA9
IHByb3RvLl9fcmVhY3RBdXRvQmluZFBhaXJzOworCisgIC8vIEJ5IGhhbmRsaW5nIG1peGlucyBi
ZWZvcmUgYW55IG90aGVyIHByb3BlcnRpZXMsIHdlIGVuc3VyZSB0aGUgc2FtZQorICAvLyBjaGFp
bmluZyBvcmRlciBpcyBhcHBsaWVkIHRvIG1ldGhvZHMgd2l0aCBERUZJTkVfTUFOWSBwb2xpY3ks
IHdoZXRoZXIKKyAgLy8gbWl4aW5zIGFyZSBsaXN0ZWQgYmVmb3JlIG9yIGFmdGVyIHRoZXNlIG1l
dGhvZHMgaW4gdGhlIHNwZWMuCisgIGlmIChzcGVjLmhhc093blByb3BlcnR5KE1JWElOU19LRVkp
KSB7CisgICAgUkVTRVJWRURfU1BFQ19LRVlTLm1peGlucyhDb25zdHJ1Y3Rvciwgc3BlYy5taXhp
bnMpOworICB9CisKKyAgZm9yICh2YXIgbmFtZSBpbiBzcGVjKSB7CisgICAgaWYgKCFzcGVjLmhh
c093blByb3BlcnR5KG5hbWUpKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBpZiAo
bmFtZSA9PT0gTUlYSU5TX0tFWSkgeworICAgICAgLy8gV2UgaGF2ZSBhbHJlYWR5IGhhbmRsZWQg
bWl4aW5zIGluIGEgc3BlY2lhbCBjYXNlIGFib3ZlLgorICAgICAgY29udGludWU7CisgICAgfQor
CisgICAgdmFyIHByb3BlcnR5ID0gc3BlY1tuYW1lXTsKKyAgICB2YXIgaXNBbHJlYWR5RGVmaW5l
ZCA9IHByb3RvLmhhc093blByb3BlcnR5KG5hbWUpOworICAgIHZhbGlkYXRlTWV0aG9kT3ZlcnJp
ZGUoaXNBbHJlYWR5RGVmaW5lZCwgbmFtZSk7CisKKyAgICBpZiAoUkVTRVJWRURfU1BFQ19LRVlT
Lmhhc093blByb3BlcnR5KG5hbWUpKSB7CisgICAgICBSRVNFUlZFRF9TUEVDX0tFWVNbbmFtZV0o
Q29uc3RydWN0b3IsIHByb3BlcnR5KTsKKyAgICB9IGVsc2UgeworICAgICAgLy8gU2V0dXAgbWV0
aG9kcyBvbiBwcm90b3R5cGU6CisgICAgICAvLyBUaGUgZm9sbG93aW5nIG1lbWJlciBtZXRob2Rz
IHNob3VsZCBub3QgYmUgYXV0b21hdGljYWxseSBib3VuZDoKKyAgICAgIC8vIDEuIEV4cGVjdGVk
IFJlYWN0Q2xhc3MgbWV0aG9kcyAoaW4gdGhlICJpbnRlcmZhY2UiKS4KKyAgICAgIC8vIDIuIE92
ZXJyaWRkZW4gbWV0aG9kcyAodGhhdCB3ZXJlIG1peGVkIGluKS4KKyAgICAgIHZhciBpc1JlYWN0
Q2xhc3NNZXRob2QgPSBSZWFjdENsYXNzSW50ZXJmYWNlLmhhc093blByb3BlcnR5KG5hbWUpOwor
ICAgICAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2YgcHJvcGVydHkgPT09ICdmdW5jdGlvbic7Cisg
ICAgICB2YXIgc2hvdWxkQXV0b0JpbmQgPSBpc0Z1bmN0aW9uICYmICFpc1JlYWN0Q2xhc3NNZXRo
b2QgJiYgIWlzQWxyZWFkeURlZmluZWQgJiYgc3BlYy5hdXRvYmluZCAhPT0gZmFsc2U7CisKKyAg
ICAgIGlmIChzaG91bGRBdXRvQmluZCkgeworICAgICAgICBhdXRvQmluZFBhaXJzLnB1c2gobmFt
ZSwgcHJvcGVydHkpOworICAgICAgICBwcm90b1tuYW1lXSA9IHByb3BlcnR5OworICAgICAgfSBl
bHNlIHsKKyAgICAgICAgaWYgKGlzQWxyZWFkeURlZmluZWQpIHsKKyAgICAgICAgICB2YXIgc3Bl
Y1BvbGljeSA9IFJlYWN0Q2xhc3NJbnRlcmZhY2VbbmFtZV07CisKKyAgICAgICAgICAvLyBUaGVz
ZSBjYXNlcyBzaG91bGQgYWxyZWFkeSBiZSBjYXVnaHQgYnkgdmFsaWRhdGVNZXRob2RPdmVycmlk
ZS4KKyAgICAgICAgICAhKGlzUmVhY3RDbGFzc01ldGhvZCAmJiAoc3BlY1BvbGljeSA9PT0gJ0RF
RklORV9NQU5ZX01FUkdFRCcgfHwgc3BlY1BvbGljeSA9PT0gJ0RFRklORV9NQU5ZJykpID8gImRl
dmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnUmVhY3RDbGFz
czogVW5leHBlY3RlZCBzcGVjIHBvbGljeSAlcyBmb3Iga2V5ICVzIHdoZW4gbWl4aW5nIGluIGNv
bXBvbmVudCBzcGVjcy4nLCBzcGVjUG9saWN5LCBuYW1lKSA6IF9wcm9kSW52YXJpYW50KCc3Nycs
IHNwZWNQb2xpY3ksIG5hbWUpIDogdm9pZCAwOworCisgICAgICAgICAgLy8gRm9yIG1ldGhvZHMg
d2hpY2ggYXJlIGRlZmluZWQgbW9yZSB0aGFuIG9uY2UsIGNhbGwgdGhlIGV4aXN0aW5nCisgICAg
ICAgICAgLy8gbWV0aG9kcyBiZWZvcmUgY2FsbGluZyB0aGUgbmV3IHByb3BlcnR5LCBtZXJnaW5n
IGlmIGFwcHJvcHJpYXRlLgorICAgICAgICAgIGlmIChzcGVjUG9saWN5ID09PSAnREVGSU5FX01B
TllfTUVSR0VEJykgeworICAgICAgICAgICAgcHJvdG9bbmFtZV0gPSBjcmVhdGVNZXJnZWRSZXN1
bHRGdW5jdGlvbihwcm90b1tuYW1lXSwgcHJvcGVydHkpOworICAgICAgICAgIH0gZWxzZSBpZiAo
c3BlY1BvbGljeSA9PT0gJ0RFRklORV9NQU5ZJykgeworICAgICAgICAgICAgcHJvdG9bbmFtZV0g
PSBjcmVhdGVDaGFpbmVkRnVuY3Rpb24ocHJvdG9bbmFtZV0sIHByb3BlcnR5KTsKKyAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcHJvdG9bbmFtZV0gPSBwcm9wZXJ0eTsK
KyAgICAgICAgICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgICAg
ICAgICAvLyBBZGQgdmVyYm9zZSBkaXNwbGF5TmFtZSB0byB0aGUgZnVuY3Rpb24sIHdoaWNoIGhl
bHBzIHdoZW4gbG9va2luZworICAgICAgICAgICAgLy8gYXQgcHJvZmlsaW5nIHRvb2xzLgorICAg
ICAgICAgICAgaWYgKHR5cGVvZiBwcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJyAmJiBzcGVjLmRpc3Bs
YXlOYW1lKSB7CisgICAgICAgICAgICAgIHByb3RvW25hbWVdLmRpc3BsYXlOYW1lID0gc3BlYy5k
aXNwbGF5TmFtZSArICdfJyArIG5hbWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICB9CisgICAgfQorICB9Cit9CisKK2Z1bmN0aW9uIG1peFN0YXRpY1NwZWNJ
bnRvQ29tcG9uZW50KENvbnN0cnVjdG9yLCBzdGF0aWNzKSB7CisgIGlmICghc3RhdGljcykgewor
ICAgIHJldHVybjsKKyAgfQorICBmb3IgKHZhciBuYW1lIGluIHN0YXRpY3MpIHsKKyAgICB2YXIg
cHJvcGVydHkgPSBzdGF0aWNzW25hbWVdOworICAgIGlmICghc3RhdGljcy5oYXNPd25Qcm9wZXJ0
eShuYW1lKSkgeworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgdmFyIGlzUmVzZXJ2ZWQg
PSBuYW1lIGluIFJFU0VSVkVEX1NQRUNfS0VZUzsKKyAgICAhIWlzUmVzZXJ2ZWQgPyAiZGV2ZWxv
cG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdENsYXNzOiBZ
b3UgYXJlIGF0dGVtcHRpbmcgdG8gZGVmaW5lIGEgcmVzZXJ2ZWQgcHJvcGVydHksIGAlc2AsIHRo
YXQgc2hvdWxkblwndCBiZSBvbiB0aGUgInN0YXRpY3MiIGtleS4gRGVmaW5lIGl0IGFzIGFuIGlu
c3RhbmNlIHByb3BlcnR5IGluc3RlYWQ7IGl0IHdpbGwgc3RpbGwgYmUgYWNjZXNzaWJsZSBvbiB0
aGUgY29uc3RydWN0b3IuJywgbmFtZSkgOiBfcHJvZEludmFyaWFudCgnNzgnLCBuYW1lKSA6IHZv
aWQgMDsKKworICAgIHZhciBpc0luaGVyaXRlZCA9IG5hbWUgaW4gQ29uc3RydWN0b3I7CisgICAg
ISFpc0luaGVyaXRlZCA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFu
dChmYWxzZSwgJ1JlYWN0Q2xhc3M6IFlvdSBhcmUgYXR0ZW1wdGluZyB0byBkZWZpbmUgYCVzYCBv
biB5b3VyIGNvbXBvbmVudCBtb3JlIHRoYW4gb25jZS4gVGhpcyBjb25mbGljdCBtYXkgYmUgZHVl
IHRvIGEgbWl4aW4uJywgbmFtZSkgOiBfcHJvZEludmFyaWFudCgnNzknLCBuYW1lKSA6IHZvaWQg
MDsKKyAgICBDb25zdHJ1Y3RvcltuYW1lXSA9IHByb3BlcnR5OworICB9Cit9CisKKy8qKgorICog
TWVyZ2UgdHdvIG9iamVjdHMsIGJ1dCB0aHJvdyBpZiBib3RoIGNvbnRhaW4gdGhlIHNhbWUga2V5
LgorICoKKyAqIEBwYXJhbSB7b2JqZWN0fSBvbmUgVGhlIGZpcnN0IG9iamVjdCwgd2hpY2ggaXMg
bXV0YXRlZC4KKyAqIEBwYXJhbSB7b2JqZWN0fSB0d28gVGhlIHNlY29uZCBvYmplY3QKKyAqIEBy
ZXR1cm4ge29iamVjdH0gb25lIGFmdGVyIGl0IGhhcyBiZWVuIG11dGF0ZWQgdG8gY29udGFpbiBl
dmVyeXRoaW5nIGluIHR3by4KKyAqLworZnVuY3Rpb24gbWVyZ2VJbnRvV2l0aE5vRHVwbGljYXRl
S2V5cyhvbmUsIHR3bykgeworICAhKG9uZSAmJiB0d28gJiYgdHlwZW9mIG9uZSA9PT0gJ29iamVj
dCcgJiYgdHlwZW9mIHR3byA9PT0gJ29iamVjdCcpID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1
Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnbWVyZ2VJbnRvV2l0aE5vRHVwbGljYXRlS2V5cygp
OiBDYW5ub3QgbWVyZ2Ugbm9uLW9iamVjdHMuJykgOiBfcHJvZEludmFyaWFudCgnODAnKSA6IHZv
aWQgMDsKKworICBmb3IgKHZhciBrZXkgaW4gdHdvKSB7CisgICAgaWYgKHR3by5oYXNPd25Qcm9w
ZXJ0eShrZXkpKSB7CisgICAgICAhKG9uZVtrZXldID09PSB1bmRlZmluZWQpID8gImRldmVsb3Bt
ZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnbWVyZ2VJbnRvV2l0aE5v
RHVwbGljYXRlS2V5cygpOiBUcmllZCB0byBtZXJnZSB0d28gb2JqZWN0cyB3aXRoIHRoZSBzYW1l
IGtleTogYCVzYC4gVGhpcyBjb25mbGljdCBtYXkgYmUgZHVlIHRvIGEgbWl4aW47IGluIHBhcnRp
Y3VsYXIsIHRoaXMgbWF5IGJlIGNhdXNlZCBieSB0d28gZ2V0SW5pdGlhbFN0YXRlKCkgb3IgZ2V0
RGVmYXVsdFByb3BzKCkgbWV0aG9kcyByZXR1cm5pbmcgb2JqZWN0cyB3aXRoIGNsYXNoaW5nIGtl
eXMuJywga2V5KSA6IF9wcm9kSW52YXJpYW50KCc4MScsIGtleSkgOiB2b2lkIDA7CisgICAgICBv
bmVba2V5XSA9IHR3b1trZXldOworICAgIH0KKyAgfQorICByZXR1cm4gb25lOworfQorCisvKioK
KyAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgdHdvIGZ1bmN0aW9ucyBhbmQgbWVy
Z2VzIHRoZWlyIHJldHVybiB2YWx1ZXMuCisgKgorICogQHBhcmFtIHtmdW5jdGlvbn0gb25lIEZ1
bmN0aW9uIHRvIGludm9rZSBmaXJzdC4KKyAqIEBwYXJhbSB7ZnVuY3Rpb259IHR3byBGdW5jdGlv
biB0byBpbnZva2Ugc2Vjb25kLgorICogQHJldHVybiB7ZnVuY3Rpb259IEZ1bmN0aW9uIHRoYXQg
aW52b2tlcyB0aGUgdHdvIGFyZ3VtZW50IGZ1bmN0aW9ucy4KKyAqIEBwcml2YXRlCisgKi8KK2Z1
bmN0aW9uIGNyZWF0ZU1lcmdlZFJlc3VsdEZ1bmN0aW9uKG9uZSwgdHdvKSB7CisgIHJldHVybiBm
dW5jdGlvbiBtZXJnZWRSZXN1bHQoKSB7CisgICAgdmFyIGEgPSBvbmUuYXBwbHkodGhpcywgYXJn
dW1lbnRzKTsKKyAgICB2YXIgYiA9IHR3by5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgIGlm
IChhID09IG51bGwpIHsKKyAgICAgIHJldHVybiBiOworICAgIH0gZWxzZSBpZiAoYiA9PSBudWxs
KSB7CisgICAgICByZXR1cm4gYTsKKyAgICB9CisgICAgdmFyIGMgPSB7fTsKKyAgICBtZXJnZUlu
dG9XaXRoTm9EdXBsaWNhdGVLZXlzKGMsIGEpOworICAgIG1lcmdlSW50b1dpdGhOb0R1cGxpY2F0
ZUtleXMoYywgYik7CisgICAgcmV0dXJuIGM7CisgIH07Cit9CisKKy8qKgorICogQ3JlYXRlcyBh
IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0d28gZnVuY3Rpb25zIGFuZCBpZ25vcmVzIHRoZWlyIHJl
dHVybiB2YWxlcy4KKyAqCisgKiBAcGFyYW0ge2Z1bmN0aW9ufSBvbmUgRnVuY3Rpb24gdG8gaW52
b2tlIGZpcnN0LgorICogQHBhcmFtIHtmdW5jdGlvbn0gdHdvIEZ1bmN0aW9uIHRvIGludm9rZSBz
ZWNvbmQuCisgKiBAcmV0dXJuIHtmdW5jdGlvbn0gRnVuY3Rpb24gdGhhdCBpbnZva2VzIHRoZSB0
d28gYXJndW1lbnQgZnVuY3Rpb25zLgorICogQHByaXZhdGUKKyAqLworZnVuY3Rpb24gY3JlYXRl
Q2hhaW5lZEZ1bmN0aW9uKG9uZSwgdHdvKSB7CisgIHJldHVybiBmdW5jdGlvbiBjaGFpbmVkRnVu
Y3Rpb24oKSB7CisgICAgb25lLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgdHdvLmFwcGx5
KHRoaXMsIGFyZ3VtZW50cyk7CisgIH07Cit9CisKKy8qKgorICogQmluZHMgYSBtZXRob2QgdG8g
dGhlIGNvbXBvbmVudC4KKyAqCisgKiBAcGFyYW0ge29iamVjdH0gY29tcG9uZW50IENvbXBvbmVu
dCB3aG9zZSBtZXRob2QgaXMgZ29pbmcgdG8gYmUgYm91bmQuCisgKiBAcGFyYW0ge2Z1bmN0aW9u
fSBtZXRob2QgTWV0aG9kIHRvIGJlIGJvdW5kLgorICogQHJldHVybiB7ZnVuY3Rpb259IFRoZSBi
b3VuZCBtZXRob2QuCisgKi8KK2Z1bmN0aW9uIGJpbmRBdXRvQmluZE1ldGhvZChjb21wb25lbnQs
IG1ldGhvZCkgeworICB2YXIgYm91bmRNZXRob2QgPSBtZXRob2QuYmluZChjb21wb25lbnQpOwor
ICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgYm91bmRNZXRob2Qu
X19yZWFjdEJvdW5kQ29udGV4dCA9IGNvbXBvbmVudDsKKyAgICBib3VuZE1ldGhvZC5fX3JlYWN0
Qm91bmRNZXRob2QgPSBtZXRob2Q7CisgICAgYm91bmRNZXRob2QuX19yZWFjdEJvdW5kQXJndW1l
bnRzID0gbnVsbDsKKyAgICB2YXIgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudC5jb25zdHJ1Y3Rv
ci5kaXNwbGF5TmFtZTsKKyAgICB2YXIgX2JpbmQgPSBib3VuZE1ldGhvZC5iaW5kOworICAgIGJv
dW5kTWV0aG9kLmJpbmQgPSBmdW5jdGlvbiAobmV3VGhpcykgeworICAgICAgZm9yICh2YXIgX2xl
biA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDog
MCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7CisgICAgICAgIGFyZ3NbX2tleSAt
IDFdID0gYXJndW1lbnRzW19rZXldOworICAgICAgfQorCisgICAgICAvLyBVc2VyIGlzIHRyeWlu
ZyB0byBiaW5kKCkgYW4gYXV0b2JvdW5kIG1ldGhvZDsgd2UgZWZmZWN0aXZlbHkgd2lsbAorICAg
ICAgLy8gaWdub3JlIHRoZSB2YWx1ZSBvZiAidGhpcyIgdGhhdCB0aGUgdXNlciBpcyB0cnlpbmcg
dG8gdXNlLCBzbworICAgICAgLy8gbGV0J3Mgd2Fybi4KKyAgICAgIGlmIChuZXdUaGlzICE9PSBj
b21wb25lbnQgJiYgbmV3VGhpcyAhPT0gbnVsbCkgeworICAgICAgICAiZGV2ZWxvcG1lbnQiICE9
PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnYmluZCgpOiBSZWFjdCBjb21wb25lbnQg
bWV0aG9kcyBtYXkgb25seSBiZSBib3VuZCB0byB0aGUgJyArICdjb21wb25lbnQgaW5zdGFuY2Uu
IFNlZSAlcycsIGNvbXBvbmVudE5hbWUpIDogdm9pZCAwOworICAgICAgfSBlbHNlIGlmICghYXJn
cy5sZW5ndGgpIHsKKyAgICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2Fy
bmluZyhmYWxzZSwgJ2JpbmQoKTogWW91IGFyZSBiaW5kaW5nIGEgY29tcG9uZW50IG1ldGhvZCB0
byB0aGUgY29tcG9uZW50LiAnICsgJ1JlYWN0IGRvZXMgdGhpcyBmb3IgeW91IGF1dG9tYXRpY2Fs
bHkgaW4gYSBoaWdoLXBlcmZvcm1hbmNlICcgKyAnd2F5LCBzbyB5b3UgY2FuIHNhZmVseSByZW1v
dmUgdGhpcyBjYWxsLiBTZWUgJXMnLCBjb21wb25lbnROYW1lKSA6IHZvaWQgMDsKKyAgICAgICAg
cmV0dXJuIGJvdW5kTWV0aG9kOworICAgICAgfQorICAgICAgdmFyIHJlYm91bmRNZXRob2QgPSBf
YmluZC5hcHBseShib3VuZE1ldGhvZCwgYXJndW1lbnRzKTsKKyAgICAgIHJlYm91bmRNZXRob2Qu
X19yZWFjdEJvdW5kQ29udGV4dCA9IGNvbXBvbmVudDsKKyAgICAgIHJlYm91bmRNZXRob2QuX19y
ZWFjdEJvdW5kTWV0aG9kID0gbWV0aG9kOworICAgICAgcmVib3VuZE1ldGhvZC5fX3JlYWN0Qm91
bmRBcmd1bWVudHMgPSBhcmdzOworICAgICAgcmV0dXJuIHJlYm91bmRNZXRob2Q7CisgICAgfTsK
KyAgfQorICByZXR1cm4gYm91bmRNZXRob2Q7Cit9CisKKy8qKgorICogQmluZHMgYWxsIGF1dG8t
Ym91bmQgbWV0aG9kcyBpbiBhIGNvbXBvbmVudC4KKyAqCisgKiBAcGFyYW0ge29iamVjdH0gY29t
cG9uZW50IENvbXBvbmVudCB3aG9zZSBtZXRob2QgaXMgZ29pbmcgdG8gYmUgYm91bmQuCisgKi8K
K2Z1bmN0aW9uIGJpbmRBdXRvQmluZE1ldGhvZHMoY29tcG9uZW50KSB7CisgIHZhciBwYWlycyA9
IGNvbXBvbmVudC5fX3JlYWN0QXV0b0JpbmRQYWlyczsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBw
YWlycy5sZW5ndGg7IGkgKz0gMikgeworICAgIHZhciBhdXRvQmluZEtleSA9IHBhaXJzW2ldOwor
ICAgIHZhciBtZXRob2QgPSBwYWlyc1tpICsgMV07CisgICAgY29tcG9uZW50W2F1dG9CaW5kS2V5
XSA9IGJpbmRBdXRvQmluZE1ldGhvZChjb21wb25lbnQsIG1ldGhvZCk7CisgIH0KK30KKworLyoq
CisgKiBBZGQgbW9yZSB0byB0aGUgUmVhY3RDbGFzcyBiYXNlIGNsYXNzLiBUaGVzZSBhcmUgYWxs
IGxlZ2FjeSBmZWF0dXJlcyBhbmQKKyAqIHRoZXJlZm9yZSBub3QgYWxyZWFkeSBwYXJ0IG9mIHRo
ZSBtb2Rlcm4gUmVhY3RDb21wb25lbnQuCisgKi8KK3ZhciBSZWFjdENsYXNzTWl4aW4gPSB7CisK
KyAgLyoqCisgICAqIFRPRE86IFRoaXMgd2lsbCBiZSBkZXByZWNhdGVkIGJlY2F1c2Ugc3RhdGUg
c2hvdWxkIGFsd2F5cyBrZWVwIGEgY29uc2lzdGVudAorICAgKiB0eXBlIHNpZ25hdHVyZSBhbmQg
dGhlIG9ubHkgdXNlIGNhc2UgZm9yIHRoaXMsIGlzIHRvIGF2b2lkIHRoYXQuCisgICAqLworICBy
ZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIChuZXdTdGF0ZSwgY2FsbGJhY2spIHsKKyAgICB0aGlzLnVw
ZGF0ZXIuZW5xdWV1ZVJlcGxhY2VTdGF0ZSh0aGlzLCBuZXdTdGF0ZSk7CisgICAgaWYgKGNhbGxi
YWNrKSB7CisgICAgICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZUNhbGxiYWNrKHRoaXMsIGNhbGxiYWNr
LCAncmVwbGFjZVN0YXRlJyk7CisgICAgfQorICB9LAorCisgIC8qKgorICAgKiBDaGVja3Mgd2hl
dGhlciBvciBub3QgdGhpcyBjb21wb3NpdGUgY29tcG9uZW50IGlzIG1vdW50ZWQuCisgICAqIEBy
ZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgbW91bnRlZCwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKiBA
cHJvdGVjdGVkCisgICAqIEBmaW5hbAorICAgKi8KKyAgaXNNb3VudGVkOiBmdW5jdGlvbiAoKSB7
CisgICAgcmV0dXJuIHRoaXMudXBkYXRlci5pc01vdW50ZWQodGhpcyk7CisgIH0KK307CisKK3Zh
ciBSZWFjdENsYXNzQ29tcG9uZW50ID0gZnVuY3Rpb24gKCkge307CitfYXNzaWduKFJlYWN0Q2xh
c3NDb21wb25lbnQucHJvdG90eXBlLCBSZWFjdENvbXBvbmVudC5wcm90b3R5cGUsIFJlYWN0Q2xh
c3NNaXhpbik7CisKK3ZhciBkaWRXYXJuRGVwcmVjYXRlZCA9IGZhbHNlOworCisvKioKKyAqIE1v
ZHVsZSBmb3IgY3JlYXRpbmcgY29tcG9zaXRlIGNvbXBvbmVudHMuCisgKgorICogQGNsYXNzIFJl
YWN0Q2xhc3MKKyAqLwordmFyIFJlYWN0Q2xhc3MgPSB7CisKKyAgLyoqCisgICAqIENyZWF0ZXMg
YSBjb21wb3NpdGUgY29tcG9uZW50IGNsYXNzIGdpdmVuIGEgY2xhc3Mgc3BlY2lmaWNhdGlvbi4K
KyAgICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVs
LWFwaS5odG1sI3JlYWN0LmNyZWF0ZWNsYXNzCisgICAqCisgICAqIEBwYXJhbSB7b2JqZWN0fSBz
cGVjIENsYXNzIHNwZWNpZmljYXRpb24gKHdoaWNoIG11c3QgZGVmaW5lIGByZW5kZXJgKS4KKyAg
ICogQHJldHVybiB7ZnVuY3Rpb259IENvbXBvbmVudCBjb25zdHJ1Y3RvciBmdW5jdGlvbi4KKyAg
ICogQHB1YmxpYworICAgKi8KKyAgY3JlYXRlQ2xhc3M6IGZ1bmN0aW9uIChzcGVjKSB7CisgICAg
aWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgICAgImRldmVsb3BtZW50
IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhkaWRXYXJuRGVwcmVjYXRlZCwgJyVzOiBSZWFj
dC5jcmVhdGVDbGFzcyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdmVyc2lv
biAxNi4gJyArICdVc2UgcGxhaW4gSmF2YVNjcmlwdCBjbGFzc2VzIGluc3RlYWQuIElmIHlvdVwn
cmUgbm90IHlldCByZWFkeSB0byAnICsgJ21pZ3JhdGUsIGNyZWF0ZS1yZWFjdC1jbGFzcyBpcyBh
dmFpbGFibGUgb24gbnBtIGFzIGEgJyArICdkcm9wLWluIHJlcGxhY2VtZW50LicsIHNwZWMgJiYg
c3BlYy5kaXNwbGF5TmFtZSB8fCAnQSBDb21wb25lbnQnKSA6IHZvaWQgMDsKKyAgICAgIGRpZFdh
cm5EZXByZWNhdGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBUbyBrZWVwIG91ciB3YXJuaW5n
cyBtb3JlIHVuZGVyc3RhbmRhYmxlLCB3ZSdsbCB1c2UgYSBsaXR0bGUgaGFjayBoZXJlIHRvCisg
ICAgLy8gZW5zdXJlIHRoYXQgQ29uc3RydWN0b3IubmFtZSAhPT0gJ0NvbnN0cnVjdG9yJy4gVGhp
cyBtYWtlcyBzdXJlIHdlIGRvbid0CisgICAgLy8gdW5uZWNlc3NhcmlseSBpZGVudGlmeSBhIGNs
YXNzIHdpdGhvdXQgZGlzcGxheU5hbWUgYXMgJ0NvbnN0cnVjdG9yJy4KKyAgICB2YXIgQ29uc3Ry
dWN0b3IgPSBpZGVudGl0eShmdW5jdGlvbiAocHJvcHMsIGNvbnRleHQsIHVwZGF0ZXIpIHsKKyAg
ICAgIC8vIFRoaXMgY29uc3RydWN0b3IgZ2V0cyBvdmVycmlkZGVuIGJ5IG1vY2tzLiBUaGUgYXJn
dW1lbnQgaXMgdXNlZAorICAgICAgLy8gYnkgbW9ja3MgdG8gYXNzZXJ0IG9uIHdoYXQgZ2V0cyBt
b3VudGVkLgorCisgICAgICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7Cisg
ICAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcodGhpcyBpbnN0
YW5jZW9mIENvbnN0cnVjdG9yLCAnU29tZXRoaW5nIGlzIGNhbGxpbmcgYSBSZWFjdCBjb21wb25l
bnQgZGlyZWN0bHkuIFVzZSBhIGZhY3Rvcnkgb3IgJyArICdKU1ggaW5zdGVhZC4gU2VlOiBodHRw
czovL2ZiLm1lL3JlYWN0LWxlZ2FjeWZhY3RvcnknKSA6IHZvaWQgMDsKKyAgICAgIH0KKworICAg
ICAgLy8gV2lyZSB1cCBhdXRvLWJpbmRpbmcKKyAgICAgIGlmICh0aGlzLl9fcmVhY3RBdXRvQmlu
ZFBhaXJzLmxlbmd0aCkgeworICAgICAgICBiaW5kQXV0b0JpbmRNZXRob2RzKHRoaXMpOworICAg
ICAgfQorCisgICAgICB0aGlzLnByb3BzID0gcHJvcHM7CisgICAgICB0aGlzLmNvbnRleHQgPSBj
b250ZXh0OworICAgICAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7CisgICAgICB0aGlzLnVwZGF0
ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlOworCisgICAgICB0aGlzLnN0YXRl
ID0gbnVsbDsKKworICAgICAgLy8gUmVhY3RDbGFzc2VzIGRvZXNuJ3QgaGF2ZSBjb25zdHJ1Y3Rv
cnMuIEluc3RlYWQsIHRoZXkgdXNlIHRoZQorICAgICAgLy8gZ2V0SW5pdGlhbFN0YXRlIGFuZCBj
b21wb25lbnRXaWxsTW91bnQgbWV0aG9kcyBmb3IgaW5pdGlhbGl6YXRpb24uCisKKyAgICAgIHZh
ciBpbml0aWFsU3RhdGUgPSB0aGlzLmdldEluaXRpYWxTdGF0ZSA/IHRoaXMuZ2V0SW5pdGlhbFN0
YXRlKCkgOiBudWxsOworICAgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykg
eworICAgICAgICAvLyBXZSBhbGxvdyBhdXRvLW1vY2tzIHRvIHByb2NlZWQgYXMgaWYgdGhleSdy
ZSByZXR1cm5pbmcgbnVsbC4KKyAgICAgICAgaWYgKGluaXRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVk
ICYmIHRoaXMuZ2V0SW5pdGlhbFN0YXRlLl9pc01vY2tGdW5jdGlvbikgeworICAgICAgICAgIC8v
IFRoaXMgaXMgcHJvYmFibHkgYmFkIHByYWN0aWNlLiBDb25zaWRlciB3YXJuaW5nIGhlcmUgYW5k
CisgICAgICAgICAgLy8gZGVwcmVjYXRpbmcgdGhpcyBjb252ZW5pZW5jZS4KKyAgICAgICAgICBp
bml0aWFsU3RhdGUgPSBudWxsOworICAgICAgICB9CisgICAgICB9CisgICAgICAhKHR5cGVvZiBp
bml0aWFsU3RhdGUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGluaXRpYWxTdGF0ZSkp
ID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnJXMu
Z2V0SW5pdGlhbFN0YXRlKCk6IG11c3QgcmV0dXJuIGFuIG9iamVjdCBvciBudWxsJywgQ29uc3Ry
dWN0b3IuZGlzcGxheU5hbWUgfHwgJ1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50JykgOiBfcHJvZElu
dmFyaWFudCgnODInLCBDb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCAnUmVhY3RDb21wb3NpdGVD
b21wb25lbnQnKSA6IHZvaWQgMDsKKworICAgICAgdGhpcy5zdGF0ZSA9IGluaXRpYWxTdGF0ZTsK
KyAgICB9KTsKKyAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBuZXcgUmVhY3RDbGFzc0NvbXBv
bmVudCgpOworICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnN0cnVj
dG9yOworICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZS5fX3JlYWN0QXV0b0JpbmRQYWlycyA9IFtd
OworCisgICAgaW5qZWN0ZWRNaXhpbnMuZm9yRWFjaChtaXhTcGVjSW50b0NvbXBvbmVudC5iaW5k
KG51bGwsIENvbnN0cnVjdG9yKSk7CisKKyAgICBtaXhTcGVjSW50b0NvbXBvbmVudChDb25zdHJ1
Y3Rvciwgc3BlYyk7CisKKyAgICAvLyBJbml0aWFsaXplIHRoZSBkZWZhdWx0UHJvcHMgcHJvcGVy
dHkgYWZ0ZXIgYWxsIG1peGlucyBoYXZlIGJlZW4gbWVyZ2VkLgorICAgIGlmIChDb25zdHJ1Y3Rv
ci5nZXREZWZhdWx0UHJvcHMpIHsKKyAgICAgIENvbnN0cnVjdG9yLmRlZmF1bHRQcm9wcyA9IENv
bnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcygpOworICAgIH0KKworICAgIGlmICgiZGV2ZWxvcG1l
bnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAgIC8vIFRoaXMgaXMgYSB0YWcgdG8gaW5kaWNh
dGUgdGhhdCB0aGUgdXNlIG9mIHRoZXNlIG1ldGhvZCBuYW1lcyBpcyBvaywKKyAgICAgIC8vIHNp
bmNlIGl0J3MgdXNlZCB3aXRoIGNyZWF0ZUNsYXNzLiBJZiBpdCdzIG5vdCwgdGhlbiBpdCdzIGxp
a2VseSBhCisgICAgICAvLyBtaXN0YWtlIHNvIHdlJ2xsIHdhcm4geW91IHRvIHVzZSB0aGUgc3Rh
dGljIHByb3BlcnR5LCBwcm9wZXJ0eQorICAgICAgLy8gaW5pdGlhbGl6ZXIgb3IgY29uc3RydWN0
b3IgcmVzcGVjdGl2ZWx5LgorICAgICAgaWYgKENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcykg
eworICAgICAgICBDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMuaXNSZWFjdENsYXNzQXBwcm92
ZWQgPSB7fTsKKyAgICAgIH0KKyAgICAgIGlmIChDb25zdHJ1Y3Rvci5wcm90b3R5cGUuZ2V0SW5p
dGlhbFN0YXRlKSB7CisgICAgICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZS5nZXRJbml0aWFsU3Rh
dGUuaXNSZWFjdENsYXNzQXBwcm92ZWQgPSB7fTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAhQ29u
c3RydWN0b3IucHJvdG90eXBlLnJlbmRlciA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9u
JyA/IGludmFyaWFudChmYWxzZSwgJ2NyZWF0ZUNsYXNzKC4uLik6IENsYXNzIHNwZWNpZmljYXRp
b24gbXVzdCBpbXBsZW1lbnQgYSBgcmVuZGVyYCBtZXRob2QuJykgOiBfcHJvZEludmFyaWFudCgn
ODMnKSA6IHZvaWQgMDsKKworICAgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicp
IHsKKyAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoIUNvbnN0
cnVjdG9yLnByb3RvdHlwZS5jb21wb25lbnRTaG91bGRVcGRhdGUsICclcyBoYXMgYSBtZXRob2Qg
Y2FsbGVkICcgKyAnY29tcG9uZW50U2hvdWxkVXBkYXRlKCkuIERpZCB5b3UgbWVhbiBzaG91bGRD
b21wb25lbnRVcGRhdGUoKT8gJyArICdUaGUgbmFtZSBpcyBwaHJhc2VkIGFzIGEgcXVlc3Rpb24g
YmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgJyArICdleHBlY3RlZCB0byByZXR1cm4gYSB2YWx1ZS4n
LCBzcGVjLmRpc3BsYXlOYW1lIHx8ICdBIGNvbXBvbmVudCcpIDogdm9pZCAwOworICAgICAgImRl
dmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyghQ29uc3RydWN0b3IucHJvdG90
eXBlLmNvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMsICclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcg
KyAnY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcygpLiBEaWQgeW91IG1lYW4gY29tcG9uZW50V2ls
bFJlY2VpdmVQcm9wcygpPycsIHNwZWMuZGlzcGxheU5hbWUgfHwgJ0EgY29tcG9uZW50JykgOiB2
b2lkIDA7CisgICAgfQorCisgICAgLy8gUmVkdWNlIHRpbWUgc3BlbnQgZG9pbmcgbG9va3VwcyBi
eSBzZXR0aW5nIHRoZXNlIG9uIHRoZSBwcm90b3R5cGUuCisgICAgZm9yICh2YXIgbWV0aG9kTmFt
ZSBpbiBSZWFjdENsYXNzSW50ZXJmYWNlKSB7CisgICAgICBpZiAoIUNvbnN0cnVjdG9yLnByb3Rv
dHlwZVttZXRob2ROYW1lXSkgeworICAgICAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGVbbWV0aG9k
TmFtZV0gPSBudWxsOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBDb25zdHJ1Y3RvcjsK
KyAgfSwKKworICBpbmplY3Rpb246IHsKKyAgICBpbmplY3RNaXhpbjogZnVuY3Rpb24gKG1peGlu
KSB7CisgICAgICBpbmplY3RlZE1peGlucy5wdXNoKG1peGluKTsKKyAgICB9CisgIH0KKworfTsK
KworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdENsYXNzOworfSx7IjExIjoxMSwiMTYiOjE2LCIyMSI6
MjEsIjIyIjoyMiwiMzkiOjM5LCI0NiI6NDYsIjQ3Ijo0NywiNDkiOjQ5LCI1MCI6NTB9XSwxMTpb
ZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEz
LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNl
IGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0
aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRz
IGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4K
KyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgX3Byb2RJbnZhcmlhbnQgPSBfZGVyZXFf
KDM5KTsKKwordmFyIFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlID0gX2RlcmVxXygyMSk7CisKK3ZhciBj
YW5EZWZpbmVQcm9wZXJ0eSA9IF9kZXJlcV8oMzMpOwordmFyIGVtcHR5T2JqZWN0ID0gX2RlcmVx
Xyg0Nik7Cit2YXIgaW52YXJpYW50ID0gX2RlcmVxXyg0Nyk7Cit2YXIgd2FybmluZyA9IF9kZXJl
cV8oNDkpOworCisvKioKKyAqIEJhc2UgY2xhc3MgaGVscGVycyBmb3IgdGhlIHVwZGF0aW5nIHN0
YXRlIG9mIGEgY29tcG9uZW50LgorICovCitmdW5jdGlvbiBSZWFjdENvbXBvbmVudChwcm9wcywg
Y29udGV4dCwgdXBkYXRlcikgeworICB0aGlzLnByb3BzID0gcHJvcHM7CisgIHRoaXMuY29udGV4
dCA9IGNvbnRleHQ7CisgIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0OworICAvLyBXZSBpbml0aWFs
aXplIHRoZSBkZWZhdWx0IHVwZGF0ZXIgYnV0IHRoZSByZWFsIG9uZSBnZXRzIGluamVjdGVkIGJ5
IHRoZQorICAvLyByZW5kZXJlci4KKyAgdGhpcy51cGRhdGVyID0gdXBkYXRlciB8fCBSZWFjdE5v
b3BVcGRhdGVRdWV1ZTsKK30KKworUmVhY3RDb21wb25lbnQucHJvdG90eXBlLmlzUmVhY3RDb21w
b25lbnQgPSB7fTsKKworLyoqCisgKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gQWx3YXlz
IHVzZSB0aGlzIHRvIG11dGF0ZQorICogc3RhdGUuIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3Rh
dGVgIGFzIGltbXV0YWJsZS4KKyAqCisgKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBgdGhp
cy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzbworICogYWNjZXNzaW5nIGB0
aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2
YWx1ZS4KKyAqCisgKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBjYWxscyB0byBgc2V0U3Rh
dGVgIHdpbGwgcnVuIHN5bmNocm9ub3VzbHksCisgKiBhcyB0aGV5IG1heSBldmVudHVhbGx5IGJl
IGJhdGNoZWQgdG9nZXRoZXIuICBZb3UgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWwKKyAqIGNhbGxi
YWNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoZSBjYWxsIHRvIHNldFN0YXRlIGlzIGFj
dHVhbGx5CisgKiBjb21wbGV0ZWQuCisgKgorICogV2hlbiBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVk
IHRvIHNldFN0YXRlLCBpdCB3aWxsIGJlIGNhbGxlZCBhdCBzb21lIHBvaW50IGluCisgKiB0aGUg
ZnV0dXJlIChub3Qgc3luY2hyb25vdXNseSkuIEl0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHVw
IHRvIGRhdGUKKyAqIGNvbXBvbmVudCBhcmd1bWVudHMgKHN0YXRlLCBwcm9wcywgY29udGV4dCku
IFRoZXNlIHZhbHVlcyBjYW4gYmUgZGlmZmVyZW50CisgKiBmcm9tIHRoaXMuKiBiZWNhdXNlIHlv
dXIgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBhZnRlciByZWNlaXZlUHJvcHMgYnV0IGJlZm9yZQor
ICogc2hvdWxkQ29tcG9uZW50VXBkYXRlLCBhbmQgdGhpcyBuZXcgc3RhdGUsIHByb3BzLCBhbmQg
Y29udGV4dCB3aWxsIG5vdCB5ZXQgYmUKKyAqIGFzc2lnbmVkIHRvIHRoaXMuCisgKgorICogQHBh
cmFtIHtvYmplY3R8ZnVuY3Rpb259IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgb3Ig
ZnVuY3Rpb24gdG8KKyAqICAgICAgICBwcm9kdWNlIG5leHQgcGFydGlhbCBzdGF0ZSB0byBiZSBt
ZXJnZWQgd2l0aCBjdXJyZW50IHN0YXRlLgorICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNr
IENhbGxlZCBhZnRlciBzdGF0ZSBpcyB1cGRhdGVkLgorICogQGZpbmFsCisgKiBAcHJvdGVjdGVk
CisgKi8KK1JlYWN0Q29tcG9uZW50LnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChwYXJ0
aWFsU3RhdGUsIGNhbGxiYWNrKSB7CisgICEodHlwZW9mIHBhcnRpYWxTdGF0ZSA9PT0gJ29iamVj
dCcgfHwgdHlwZW9mIHBhcnRpYWxTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyB8fCBwYXJ0aWFsU3RhdGUg
PT0gbnVsbCkgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFs
c2UsICdzZXRTdGF0ZSguLi4pOiB0YWtlcyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzIHRv
IHVwZGF0ZSBvciBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYW4gb2JqZWN0IG9mIHN0YXRlIHZh
cmlhYmxlcy4nKSA6IF9wcm9kSW52YXJpYW50KCc4NScpIDogdm9pZCAwOworICB0aGlzLnVwZGF0
ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsIHBhcnRpYWxTdGF0ZSk7CisgIGlmIChjYWxsYmFjaykg
eworICAgIHRoaXMudXBkYXRlci5lbnF1ZXVlQ2FsbGJhY2sodGhpcywgY2FsbGJhY2ssICdzZXRT
dGF0ZScpOworICB9Cit9OworCisvKioKKyAqIEZvcmNlcyBhbiB1cGRhdGUuIFRoaXMgc2hvdWxk
IG9ubHkgYmUgaW52b2tlZCB3aGVuIGl0IGlzIGtub3duIHdpdGgKKyAqIGNlcnRhaW50eSB0aGF0
IHdlIGFyZSAqKm5vdCoqIGluIGEgRE9NIHRyYW5zYWN0aW9uLgorICoKKyAqIFlvdSBtYXkgd2Fu
dCB0byBjYWxsIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0IHNvbWUgZGVlcGVyIGFzcGVjdCBvZiB0
aGUKKyAqIGNvbXBvbmVudCdzIHN0YXRlIGhhcyBjaGFuZ2VkIGJ1dCBgc2V0U3RhdGVgIHdhcyBu
b3QgY2FsbGVkLgorICoKKyAqIFRoaXMgd2lsbCBub3QgaW52b2tlIGBzaG91bGRDb21wb25lbnRV
cGRhdGVgLCBidXQgaXQgd2lsbCBpbnZva2UKKyAqIGBjb21wb25lbnRXaWxsVXBkYXRlYCBhbmQg
YGNvbXBvbmVudERpZFVwZGF0ZWAuCisgKgorICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNr
IENhbGxlZCBhZnRlciB1cGRhdGUgaXMgY29tcGxldGUuCisgKiBAZmluYWwKKyAqIEBwcm90ZWN0
ZWQKKyAqLworUmVhY3RDb21wb25lbnQucHJvdG90eXBlLmZvcmNlVXBkYXRlID0gZnVuY3Rpb24g
KGNhbGxiYWNrKSB7CisgIHRoaXMudXBkYXRlci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcyk7Cisg
IGlmIChjYWxsYmFjaykgeworICAgIHRoaXMudXBkYXRlci5lbnF1ZXVlQ2FsbGJhY2sodGhpcywg
Y2FsbGJhY2ssICdmb3JjZVVwZGF0ZScpOworICB9Cit9OworCisvKioKKyAqIERlcHJlY2F0ZWQg
QVBJcy4gVGhlc2UgQVBJcyB1c2VkIHRvIGV4aXN0IG9uIGNsYXNzaWMgUmVhY3QgY2xhc3NlcyBi
dXQgc2luY2UKKyAqIHdlIHdvdWxkIGxpa2UgdG8gZGVwcmVjYXRlIHRoZW0sIHdlJ3JlIG5vdCBn
b2luZyB0byBtb3ZlIHRoZW0gb3ZlciB0byB0aGlzCisgKiBtb2Rlcm4gYmFzZSBjbGFzcy4gSW5z
dGVhZCwgd2UgZGVmaW5lIGEgZ2V0dGVyIHRoYXQgd2FybnMgaWYgaXQncyBhY2Nlc3NlZC4KKyAq
LworaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICB2YXIgZGVwcmVjYXRl
ZEFQSXMgPSB7CisgICAgaXNNb3VudGVkOiBbJ2lzTW91bnRlZCcsICdJbnN0ZWFkLCBtYWtlIHN1
cmUgdG8gY2xlYW4gdXAgc3Vic2NyaXB0aW9ucyBhbmQgcGVuZGluZyByZXF1ZXN0cyBpbiAnICsg
J2NvbXBvbmVudFdpbGxVbm1vdW50IHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzLiddLAorICAgIHJl
cGxhY2VTdGF0ZTogWydyZXBsYWNlU3RhdGUnLCAnUmVmYWN0b3IgeW91ciBjb2RlIHRvIHVzZSBz
ZXRTdGF0ZSBpbnN0ZWFkIChzZWUgJyArICdodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVh
Y3QvaXNzdWVzLzMyMzYpLiddCisgIH07CisgIHZhciBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcg
PSBmdW5jdGlvbiAobWV0aG9kTmFtZSwgaW5mbykgeworICAgIGlmIChjYW5EZWZpbmVQcm9wZXJ0
eSkgeworICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWN0Q29tcG9uZW50LnByb3RvdHlw
ZSwgbWV0aG9kTmFtZSwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAi
ZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnJXMoLi4uKSBp
cyBkZXByZWNhdGVkIGluIHBsYWluIEphdmFTY3JpcHQgUmVhY3QgY2xhc3Nlcy4gJXMnLCBpbmZv
WzBdLCBpbmZvWzFdKSA6IHZvaWQgMDsKKyAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOworICAg
ICAgICB9CisgICAgICB9KTsKKyAgICB9CisgIH07CisgIGZvciAodmFyIGZuTmFtZSBpbiBkZXBy
ZWNhdGVkQVBJcykgeworICAgIGlmIChkZXByZWNhdGVkQVBJcy5oYXNPd25Qcm9wZXJ0eShmbk5h
bWUpKSB7CisgICAgICBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcoZm5OYW1lLCBkZXByZWNhdGVk
QVBJc1tmbk5hbWVdKTsKKyAgICB9CisgIH0KK30KKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdENv
bXBvbmVudDsKK30seyIyMSI6MjEsIjMzIjozMywiMzkiOjM5LCI0NiI6NDYsIjQ3Ijo0NywiNDki
OjQ5fV0sMTI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5
cmlnaHQgMjAxNi1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5
bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJl
Y3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0
ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBk
aXJlY3RvcnkuCisgKgorICogCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgX3Byb2RJbnZh
cmlhbnQgPSBfZGVyZXFfKDM5KTsKKwordmFyIFJlYWN0Q3VycmVudE93bmVyID0gX2RlcmVxXygx
NCk7CisKK3ZhciBpbnZhcmlhbnQgPSBfZGVyZXFfKDQ3KTsKK3ZhciB3YXJuaW5nID0gX2RlcmVx
Xyg0OSk7CisKK2Z1bmN0aW9uIGlzTmF0aXZlKGZuKSB7CisgIC8vIEJhc2VkIG9uIGlzTmF0aXZl
KCkgZnJvbSBMb2Rhc2gKKyAgdmFyIGZ1bmNUb1N0cmluZyA9IEZ1bmN0aW9uLnByb3RvdHlwZS50
b1N0cmluZzsKKyAgdmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Q
cm9wZXJ0eTsKKyAgdmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICsgZnVuY1RvU3RyaW5nCisg
IC8vIFRha2UgYW4gZXhhbXBsZSBuYXRpdmUgZnVuY3Rpb24gc291cmNlIGZvciBjb21wYXJpc29u
CisgIC5jYWxsKGhhc093blByb3BlcnR5KQorICAvLyBTdHJpcCByZWdleCBjaGFyYWN0ZXJzIHNv
IHdlIGNhbiB1c2UgaXQgZm9yIHJlZ2V4CisgIC5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0v
ZywgJ1xcJCYnKQorICAvLyBSZW1vdmUgaGFzT3duUHJvcGVydHkgZnJvbSB0aGUgdGVtcGxhdGUg
dG8gbWFrZSBpdCBnZW5lcmljCisgIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24p
Lio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCAnJDEuKj8nKSArICckJyk7CisgIHRyeSB7
CisgICAgdmFyIHNvdXJjZSA9IGZ1bmNUb1N0cmluZy5jYWxsKGZuKTsKKyAgICByZXR1cm4gcmVJ
c05hdGl2ZS50ZXN0KHNvdXJjZSk7CisgIH0gY2F0Y2ggKGVycikgeworICAgIHJldHVybiBmYWxz
ZTsKKyAgfQorfQorCit2YXIgY2FuVXNlQ29sbGVjdGlvbnMgPQorLy8gQXJyYXkuZnJvbQordHlw
ZW9mIEFycmF5LmZyb20gPT09ICdmdW5jdGlvbicgJiYKKy8vIE1hcAordHlwZW9mIE1hcCA9PT0g
J2Z1bmN0aW9uJyAmJiBpc05hdGl2ZShNYXApICYmCisvLyBNYXAucHJvdG90eXBlLmtleXMKK01h
cC5wcm90b3R5cGUgIT0gbnVsbCAmJiB0eXBlb2YgTWFwLnByb3RvdHlwZS5rZXlzID09PSAnZnVu
Y3Rpb24nICYmIGlzTmF0aXZlKE1hcC5wcm90b3R5cGUua2V5cykgJiYKKy8vIFNldAordHlwZW9m
IFNldCA9PT0gJ2Z1bmN0aW9uJyAmJiBpc05hdGl2ZShTZXQpICYmCisvLyBTZXQucHJvdG90eXBl
LmtleXMKK1NldC5wcm90b3R5cGUgIT0gbnVsbCAmJiB0eXBlb2YgU2V0LnByb3RvdHlwZS5rZXlz
ID09PSAnZnVuY3Rpb24nICYmIGlzTmF0aXZlKFNldC5wcm90b3R5cGUua2V5cyk7CisKK3ZhciBz
ZXRJdGVtOwordmFyIGdldEl0ZW07Cit2YXIgcmVtb3ZlSXRlbTsKK3ZhciBnZXRJdGVtSURzOwor
dmFyIGFkZFJvb3Q7Cit2YXIgcmVtb3ZlUm9vdDsKK3ZhciBnZXRSb290SURzOworCitpZiAoY2Fu
VXNlQ29sbGVjdGlvbnMpIHsKKyAgdmFyIGl0ZW1NYXAgPSBuZXcgTWFwKCk7CisgIHZhciByb290
SURTZXQgPSBuZXcgU2V0KCk7CisKKyAgc2V0SXRlbSA9IGZ1bmN0aW9uIChpZCwgaXRlbSkgewor
ICAgIGl0ZW1NYXAuc2V0KGlkLCBpdGVtKTsKKyAgfTsKKyAgZ2V0SXRlbSA9IGZ1bmN0aW9uIChp
ZCkgeworICAgIHJldHVybiBpdGVtTWFwLmdldChpZCk7CisgIH07CisgIHJlbW92ZUl0ZW0gPSBm
dW5jdGlvbiAoaWQpIHsKKyAgICBpdGVtTWFwWydkZWxldGUnXShpZCk7CisgIH07CisgIGdldEl0
ZW1JRHMgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIEFycmF5LmZyb20oaXRlbU1hcC5rZXlz
KCkpOworICB9OworCisgIGFkZFJvb3QgPSBmdW5jdGlvbiAoaWQpIHsKKyAgICByb290SURTZXQu
YWRkKGlkKTsKKyAgfTsKKyAgcmVtb3ZlUm9vdCA9IGZ1bmN0aW9uIChpZCkgeworICAgIHJvb3RJ
RFNldFsnZGVsZXRlJ10oaWQpOworICB9OworICBnZXRSb290SURzID0gZnVuY3Rpb24gKCkgewor
ICAgIHJldHVybiBBcnJheS5mcm9tKHJvb3RJRFNldC5rZXlzKCkpOworICB9OworfSBlbHNlIHsK
KyAgdmFyIGl0ZW1CeUtleSA9IHt9OworICB2YXIgcm9vdEJ5S2V5ID0ge307CisKKyAgLy8gVXNl
IG5vbi1udW1lcmljIGtleXMgdG8gcHJldmVudCBWOCBwZXJmb3JtYW5jZSBpc3N1ZXM6CisgIC8v
IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzcyMzIKKyAgdmFyIGdldEtl
eUZyb21JRCA9IGZ1bmN0aW9uIChpZCkgeworICAgIHJldHVybiAnLicgKyBpZDsKKyAgfTsKKyAg
dmFyIGdldElERnJvbUtleSA9IGZ1bmN0aW9uIChrZXkpIHsKKyAgICByZXR1cm4gcGFyc2VJbnQo
a2V5LnN1YnN0cigxKSwgMTApOworICB9OworCisgIHNldEl0ZW0gPSBmdW5jdGlvbiAoaWQsIGl0
ZW0pIHsKKyAgICB2YXIga2V5ID0gZ2V0S2V5RnJvbUlEKGlkKTsKKyAgICBpdGVtQnlLZXlba2V5
XSA9IGl0ZW07CisgIH07CisgIGdldEl0ZW0gPSBmdW5jdGlvbiAoaWQpIHsKKyAgICB2YXIga2V5
ID0gZ2V0S2V5RnJvbUlEKGlkKTsKKyAgICByZXR1cm4gaXRlbUJ5S2V5W2tleV07CisgIH07Cisg
IHJlbW92ZUl0ZW0gPSBmdW5jdGlvbiAoaWQpIHsKKyAgICB2YXIga2V5ID0gZ2V0S2V5RnJvbUlE
KGlkKTsKKyAgICBkZWxldGUgaXRlbUJ5S2V5W2tleV07CisgIH07CisgIGdldEl0ZW1JRHMgPSBm
dW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIE9iamVjdC5rZXlzKGl0ZW1CeUtleSkubWFwKGdldElE
RnJvbUtleSk7CisgIH07CisKKyAgYWRkUm9vdCA9IGZ1bmN0aW9uIChpZCkgeworICAgIHZhciBr
ZXkgPSBnZXRLZXlGcm9tSUQoaWQpOworICAgIHJvb3RCeUtleVtrZXldID0gdHJ1ZTsKKyAgfTsK
KyAgcmVtb3ZlUm9vdCA9IGZ1bmN0aW9uIChpZCkgeworICAgIHZhciBrZXkgPSBnZXRLZXlGcm9t
SUQoaWQpOworICAgIGRlbGV0ZSByb290QnlLZXlba2V5XTsKKyAgfTsKKyAgZ2V0Um9vdElEcyA9
IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gT2JqZWN0LmtleXMocm9vdEJ5S2V5KS5tYXAoZ2V0
SURGcm9tS2V5KTsKKyAgfTsKK30KKwordmFyIHVubW91bnRlZElEcyA9IFtdOworCitmdW5jdGlv
biBwdXJnZURlZXAoaWQpIHsKKyAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTsKKyAgaWYgKGl0ZW0p
IHsKKyAgICB2YXIgY2hpbGRJRHMgPSBpdGVtLmNoaWxkSURzOworCisgICAgcmVtb3ZlSXRlbShp
ZCk7CisgICAgY2hpbGRJRHMuZm9yRWFjaChwdXJnZURlZXApOworICB9Cit9CisKK2Z1bmN0aW9u
IGRlc2NyaWJlQ29tcG9uZW50RnJhbWUobmFtZSwgc291cmNlLCBvd25lck5hbWUpIHsKKyAgcmV0
dXJuICdcbiAgICBpbiAnICsgKG5hbWUgfHwgJ1Vua25vd24nKSArIChzb3VyY2UgPyAnIChhdCAn
ICsgc291cmNlLmZpbGVOYW1lLnJlcGxhY2UoL14uKltcXFwvXS8sICcnKSArICc6JyArIHNvdXJj
ZS5saW5lTnVtYmVyICsgJyknIDogb3duZXJOYW1lID8gJyAoY3JlYXRlZCBieSAnICsgb3duZXJO
YW1lICsgJyknIDogJycpOworfQorCitmdW5jdGlvbiBnZXREaXNwbGF5TmFtZShlbGVtZW50KSB7
CisgIGlmIChlbGVtZW50ID09IG51bGwpIHsKKyAgICByZXR1cm4gJyNlbXB0eSc7CisgIH0gZWxz
ZSBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBlbGVtZW50ID09PSAn
bnVtYmVyJykgeworICAgIHJldHVybiAnI3RleHQnOworICB9IGVsc2UgaWYgKHR5cGVvZiBlbGVt
ZW50LnR5cGUgPT09ICdzdHJpbmcnKSB7CisgICAgcmV0dXJuIGVsZW1lbnQudHlwZTsKKyAgfSBl
bHNlIHsKKyAgICByZXR1cm4gZWxlbWVudC50eXBlLmRpc3BsYXlOYW1lIHx8IGVsZW1lbnQudHlw
ZS5uYW1lIHx8ICdVbmtub3duJzsKKyAgfQorfQorCitmdW5jdGlvbiBkZXNjcmliZUlEKGlkKSB7
CisgIHZhciBuYW1lID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXREaXNwbGF5TmFtZShpZCk7
CisgIHZhciBlbGVtZW50ID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRFbGVtZW50KGlkKTsK
KyAgdmFyIG93bmVySUQgPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldE93bmVySUQoaWQpOwor
ICB2YXIgb3duZXJOYW1lOworICBpZiAob3duZXJJRCkgeworICAgIG93bmVyTmFtZSA9IFJlYWN0
Q29tcG9uZW50VHJlZUhvb2suZ2V0RGlzcGxheU5hbWUob3duZXJJRCk7CisgIH0KKyAgImRldmVs
b3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhlbGVtZW50LCAnUmVhY3RDb21wb25l
bnRUcmVlSG9vazogTWlzc2luZyBSZWFjdCBlbGVtZW50IGZvciBkZWJ1Z0lEICVzIHdoZW4gJyAr
ICdidWlsZGluZyBzdGFjaycsIGlkKSA6IHZvaWQgMDsKKyAgcmV0dXJuIGRlc2NyaWJlQ29tcG9u
ZW50RnJhbWUobmFtZSwgZWxlbWVudCAmJiBlbGVtZW50Ll9zb3VyY2UsIG93bmVyTmFtZSk7Cit9
CisKK3ZhciBSZWFjdENvbXBvbmVudFRyZWVIb29rID0geworICBvblNldENoaWxkcmVuOiBmdW5j
dGlvbiAoaWQsIG5leHRDaGlsZElEcykgeworICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7Cisg
ICAgIWl0ZW0gPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFs
c2UsICdJdGVtIG11c3QgaGF2ZSBiZWVuIHNldCcpIDogX3Byb2RJbnZhcmlhbnQoJzE0NCcpIDog
dm9pZCAwOworICAgIGl0ZW0uY2hpbGRJRHMgPSBuZXh0Q2hpbGRJRHM7CisKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IG5leHRDaGlsZElEcy5sZW5ndGg7IGkrKykgeworICAgICAgdmFyIG5leHRD
aGlsZElEID0gbmV4dENoaWxkSURzW2ldOworICAgICAgdmFyIG5leHRDaGlsZCA9IGdldEl0ZW0o
bmV4dENoaWxkSUQpOworICAgICAgIW5leHRDaGlsZCA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9k
dWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0V4cGVjdGVkIGhvb2sgZXZlbnRzIHRvIGZpcmUg
Zm9yIHRoZSBjaGlsZCBiZWZvcmUgaXRzIHBhcmVudCBpbmNsdWRlcyBpdCBpbiBvblNldENoaWxk
cmVuKCkuJykgOiBfcHJvZEludmFyaWFudCgnMTQwJykgOiB2b2lkIDA7CisgICAgICAhKG5leHRD
aGlsZC5jaGlsZElEcyAhPSBudWxsIHx8IHR5cGVvZiBuZXh0Q2hpbGQuZWxlbWVudCAhPT0gJ29i
amVjdCcgfHwgbmV4dENoaWxkLmVsZW1lbnQgPT0gbnVsbCkgPyAiZGV2ZWxvcG1lbnQiICE9PSAn
cHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdFeHBlY3RlZCBvblNldENoaWxkcmVuKCkg
dG8gZmlyZSBmb3IgYSBjb250YWluZXIgY2hpbGQgYmVmb3JlIGl0cyBwYXJlbnQgaW5jbHVkZXMg
aXQgaW4gb25TZXRDaGlsZHJlbigpLicpIDogX3Byb2RJbnZhcmlhbnQoJzE0MScpIDogdm9pZCAw
OworICAgICAgIW5leHRDaGlsZC5pc01vdW50ZWQgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVj
dGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdFeHBlY3RlZCBvbk1vdW50Q29tcG9uZW50KCkgdG8g
ZmlyZSBmb3IgdGhlIGNoaWxkIGJlZm9yZSBpdHMgcGFyZW50IGluY2x1ZGVzIGl0IGluIG9uU2V0
Q2hpbGRyZW4oKS4nKSA6IF9wcm9kSW52YXJpYW50KCc3MScpIDogdm9pZCAwOworICAgICAgaWYg
KG5leHRDaGlsZC5wYXJlbnRJRCA9PSBudWxsKSB7CisgICAgICAgIG5leHRDaGlsZC5wYXJlbnRJ
RCA9IGlkOworICAgICAgICAvLyBUT0RPOiBUaGlzIHNob3VsZG4ndCBiZSBuZWNlc3NhcnkgYnV0
IG1vdW50aW5nIGEgbmV3IHJvb3QgZHVyaW5nIGluCisgICAgICAgIC8vIGNvbXBvbmVudFdpbGxN
b3VudCBjdXJyZW50bHkgY2F1c2VzIG5vdC15ZXQtbW91bnRlZCBjb21wb25lbnRzIHRvCisgICAg
ICAgIC8vIGJlIHB1cmdlZCBmcm9tIG91ciB0cmVlIGRhdGEgc28gdGhlaXIgcGFyZW50IGlkIGlz
IG1pc3NpbmcuCisgICAgICB9CisgICAgICAhKG5leHRDaGlsZC5wYXJlbnRJRCA9PT0gaWQpID8g
ImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnRXhwZWN0
ZWQgb25CZWZvcmVNb3VudENvbXBvbmVudCgpIHBhcmVudCBhbmQgb25TZXRDaGlsZHJlbigpIHRv
IGJlIGNvbnNpc3RlbnQgKCVzIGhhcyBwYXJlbnRzICVzIGFuZCAlcykuJywgbmV4dENoaWxkSUQs
IG5leHRDaGlsZC5wYXJlbnRJRCwgaWQpIDogX3Byb2RJbnZhcmlhbnQoJzE0MicsIG5leHRDaGls
ZElELCBuZXh0Q2hpbGQucGFyZW50SUQsIGlkKSA6IHZvaWQgMDsKKyAgICB9CisgIH0sCisgIG9u
QmVmb3JlTW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uIChpZCwgZWxlbWVudCwgcGFyZW50SUQpIHsK
KyAgICB2YXIgaXRlbSA9IHsKKyAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsCisgICAgICBwYXJlbnRJ
RDogcGFyZW50SUQsCisgICAgICB0ZXh0OiBudWxsLAorICAgICAgY2hpbGRJRHM6IFtdLAorICAg
ICAgaXNNb3VudGVkOiBmYWxzZSwKKyAgICAgIHVwZGF0ZUNvdW50OiAwCisgICAgfTsKKyAgICBz
ZXRJdGVtKGlkLCBpdGVtKTsKKyAgfSwKKyAgb25CZWZvcmVVcGRhdGVDb21wb25lbnQ6IGZ1bmN0
aW9uIChpZCwgZWxlbWVudCkgeworICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7CisgICAgaWYg
KCFpdGVtIHx8ICFpdGVtLmlzTW91bnRlZCkgeworICAgICAgLy8gV2UgbWF5IGVuZCB1cCBoZXJl
IGFzIGEgcmVzdWx0IG9mIHNldFN0YXRlKCkgaW4gY29tcG9uZW50V2lsbFVubW91bnQoKS4KKyAg
ICAgIC8vIEluIHRoaXMgY2FzZSwgaWdub3JlIHRoZSBlbGVtZW50LgorICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpdGVtLmVsZW1lbnQgPSBlbGVtZW50OworICB9LAorICBvbk1vdW50Q29tcG9u
ZW50OiBmdW5jdGlvbiAoaWQpIHsKKyAgICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQpOworICAgICFp
dGVtID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAn
SXRlbSBtdXN0IGhhdmUgYmVlbiBzZXQnKSA6IF9wcm9kSW52YXJpYW50KCcxNDQnKSA6IHZvaWQg
MDsKKyAgICBpdGVtLmlzTW91bnRlZCA9IHRydWU7CisgICAgdmFyIGlzUm9vdCA9IGl0ZW0ucGFy
ZW50SUQgPT09IDA7CisgICAgaWYgKGlzUm9vdCkgeworICAgICAgYWRkUm9vdChpZCk7CisgICAg
fQorICB9LAorICBvblVwZGF0ZUNvbXBvbmVudDogZnVuY3Rpb24gKGlkKSB7CisgICAgdmFyIGl0
ZW0gPSBnZXRJdGVtKGlkKTsKKyAgICBpZiAoIWl0ZW0gfHwgIWl0ZW0uaXNNb3VudGVkKSB7Cisg
ICAgICAvLyBXZSBtYXkgZW5kIHVwIGhlcmUgYXMgYSByZXN1bHQgb2Ygc2V0U3RhdGUoKSBpbiBj
b21wb25lbnRXaWxsVW5tb3VudCgpLgorICAgICAgLy8gSW4gdGhpcyBjYXNlLCBpZ25vcmUgdGhl
IGVsZW1lbnQuCisgICAgICByZXR1cm47CisgICAgfQorICAgIGl0ZW0udXBkYXRlQ291bnQrKzsK
KyAgfSwKKyAgb25Vbm1vdW50Q29tcG9uZW50OiBmdW5jdGlvbiAoaWQpIHsKKyAgICB2YXIgaXRl
bSA9IGdldEl0ZW0oaWQpOworICAgIGlmIChpdGVtKSB7CisgICAgICAvLyBXZSBuZWVkIHRvIGNo
ZWNrIGlmIGl0IGV4aXN0cy4KKyAgICAgIC8vIGBpdGVtYCBtaWdodCBub3QgZXhpc3QgaWYgaXQg
aXMgaW5zaWRlIGFuIGVycm9yIGJvdW5kYXJ5LCBhbmQgYSBzaWJsaW5nCisgICAgICAvLyBlcnJv
ciBib3VuZGFyeSBjaGlsZCB0aHJldyB3aGlsZSBtb3VudGluZy4gVGhlbiB0aGlzIGluc3RhbmNl
IG5ldmVyCisgICAgICAvLyBnb3QgYSBjaGFuY2UgdG8gbW91bnQsIGJ1dCBpdCBzdGlsbCBnZXRz
IGFuIHVubW91bnRpbmcgZXZlbnQgZHVyaW5nCisgICAgICAvLyB0aGUgZXJyb3IgYm91bmRhcnkg
Y2xlYW51cC4KKyAgICAgIGl0ZW0uaXNNb3VudGVkID0gZmFsc2U7CisgICAgICB2YXIgaXNSb290
ID0gaXRlbS5wYXJlbnRJRCA9PT0gMDsKKyAgICAgIGlmIChpc1Jvb3QpIHsKKyAgICAgICAgcmVt
b3ZlUm9vdChpZCk7CisgICAgICB9CisgICAgfQorICAgIHVubW91bnRlZElEcy5wdXNoKGlkKTsK
KyAgfSwKKyAgcHVyZ2VVbm1vdW50ZWRDb21wb25lbnRzOiBmdW5jdGlvbiAoKSB7CisgICAgaWYg
KFJlYWN0Q29tcG9uZW50VHJlZUhvb2suX3ByZXZlbnRQdXJnaW5nKSB7CisgICAgICAvLyBTaG91
bGQgb25seSBiZSB1c2VkIGZvciB0ZXN0aW5nLgorICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgdW5tb3VudGVkSURzLmxlbmd0aDsgaSsrKSB7CisgICAgICB2
YXIgaWQgPSB1bm1vdW50ZWRJRHNbaV07CisgICAgICBwdXJnZURlZXAoaWQpOworICAgIH0KKyAg
ICB1bm1vdW50ZWRJRHMubGVuZ3RoID0gMDsKKyAgfSwKKyAgaXNNb3VudGVkOiBmdW5jdGlvbiAo
aWQpIHsKKyAgICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQpOworICAgIHJldHVybiBpdGVtID8gaXRl
bS5pc01vdW50ZWQgOiBmYWxzZTsKKyAgfSwKKyAgZ2V0Q3VycmVudFN0YWNrQWRkZW5kdW06IGZ1
bmN0aW9uICh0b3BFbGVtZW50KSB7CisgICAgdmFyIGluZm8gPSAnJzsKKyAgICBpZiAodG9wRWxl
bWVudCkgeworICAgICAgdmFyIG5hbWUgPSBnZXREaXNwbGF5TmFtZSh0b3BFbGVtZW50KTsKKyAg
ICAgIHZhciBvd25lciA9IHRvcEVsZW1lbnQuX293bmVyOworICAgICAgaW5mbyArPSBkZXNjcmli
ZUNvbXBvbmVudEZyYW1lKG5hbWUsIHRvcEVsZW1lbnQuX3NvdXJjZSwgb3duZXIgJiYgb3duZXIu
Z2V0TmFtZSgpKTsKKyAgICB9CisKKyAgICB2YXIgY3VycmVudE93bmVyID0gUmVhY3RDdXJyZW50
T3duZXIuY3VycmVudDsKKyAgICB2YXIgaWQgPSBjdXJyZW50T3duZXIgJiYgY3VycmVudE93bmVy
Ll9kZWJ1Z0lEOworCisgICAgaW5mbyArPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldFN0YWNr
QWRkZW5kdW1CeUlEKGlkKTsKKyAgICByZXR1cm4gaW5mbzsKKyAgfSwKKyAgZ2V0U3RhY2tBZGRl
bmR1bUJ5SUQ6IGZ1bmN0aW9uIChpZCkgeworICAgIHZhciBpbmZvID0gJyc7CisgICAgd2hpbGUg
KGlkKSB7CisgICAgICBpbmZvICs9IGRlc2NyaWJlSUQoaWQpOworICAgICAgaWQgPSBSZWFjdENv
bXBvbmVudFRyZWVIb29rLmdldFBhcmVudElEKGlkKTsKKyAgICB9CisgICAgcmV0dXJuIGluZm87
CisgIH0sCisgIGdldENoaWxkSURzOiBmdW5jdGlvbiAoaWQpIHsKKyAgICB2YXIgaXRlbSA9IGdl
dEl0ZW0oaWQpOworICAgIHJldHVybiBpdGVtID8gaXRlbS5jaGlsZElEcyA6IFtdOworICB9LAor
ICBnZXREaXNwbGF5TmFtZTogZnVuY3Rpb24gKGlkKSB7CisgICAgdmFyIGVsZW1lbnQgPSBSZWFj
dENvbXBvbmVudFRyZWVIb29rLmdldEVsZW1lbnQoaWQpOworICAgIGlmICghZWxlbWVudCkgewor
ICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBnZXREaXNwbGF5TmFtZShlbGVt
ZW50KTsKKyAgfSwKKyAgZ2V0RWxlbWVudDogZnVuY3Rpb24gKGlkKSB7CisgICAgdmFyIGl0ZW0g
PSBnZXRJdGVtKGlkKTsKKyAgICByZXR1cm4gaXRlbSA/IGl0ZW0uZWxlbWVudCA6IG51bGw7Cisg
IH0sCisgIGdldE93bmVySUQ6IGZ1bmN0aW9uIChpZCkgeworICAgIHZhciBlbGVtZW50ID0gUmVh
Y3RDb21wb25lbnRUcmVlSG9vay5nZXRFbGVtZW50KGlkKTsKKyAgICBpZiAoIWVsZW1lbnQgfHwg
IWVsZW1lbnQuX293bmVyKSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgcmV0dXJu
IGVsZW1lbnQuX293bmVyLl9kZWJ1Z0lEOworICB9LAorICBnZXRQYXJlbnRJRDogZnVuY3Rpb24g
KGlkKSB7CisgICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTsKKyAgICByZXR1cm4gaXRlbSA/IGl0
ZW0ucGFyZW50SUQgOiBudWxsOworICB9LAorICBnZXRTb3VyY2U6IGZ1bmN0aW9uIChpZCkgewor
ICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7CisgICAgdmFyIGVsZW1lbnQgPSBpdGVtID8gaXRl
bS5lbGVtZW50IDogbnVsbDsKKyAgICB2YXIgc291cmNlID0gZWxlbWVudCAhPSBudWxsID8gZWxl
bWVudC5fc291cmNlIDogbnVsbDsKKyAgICByZXR1cm4gc291cmNlOworICB9LAorICBnZXRUZXh0
OiBmdW5jdGlvbiAoaWQpIHsKKyAgICB2YXIgZWxlbWVudCA9IFJlYWN0Q29tcG9uZW50VHJlZUhv
b2suZ2V0RWxlbWVudChpZCk7CisgICAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJykg
eworICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgfSBlbHNlIGlmICh0eXBlb2YgZWxlbWVudCA9
PT0gJ251bWJlcicpIHsKKyAgICAgIHJldHVybiAnJyArIGVsZW1lbnQ7CisgICAgfSBlbHNlIHsK
KyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgfSwKKyAgZ2V0VXBkYXRlQ291bnQ6IGZ1bmN0
aW9uIChpZCkgeworICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7CisgICAgcmV0dXJuIGl0ZW0g
PyBpdGVtLnVwZGF0ZUNvdW50IDogMDsKKyAgfSwKKworCisgIGdldFJvb3RJRHM6IGdldFJvb3RJ
RHMsCisgIGdldFJlZ2lzdGVyZWRJRHM6IGdldEl0ZW1JRHMKK307CisKK21vZHVsZS5leHBvcnRz
ID0gUmVhY3RDb21wb25lbnRUcmVlSG9vazsKK30seyIxNCI6MTQsIjM5IjozOSwiNDciOjQ3LCI0
OSI6NDl9XSwxMzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENv
cHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1z
dHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRp
cmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBw
YXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1l
IGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgc2hhbGxvd0NvbXBh
cmUgPSBfZGVyZXFfKDQwKTsKKworLyoqCisgKiBJZiB5b3VyIFJlYWN0IGNvbXBvbmVudCdzIHJl
bmRlciBmdW5jdGlvbiBpcyAicHVyZSIsIGUuZy4gaXQgd2lsbCByZW5kZXIgdGhlCisgKiBzYW1l
IHJlc3VsdCBnaXZlbiB0aGUgc2FtZSBwcm9wcyBhbmQgc3RhdGUsIHByb3ZpZGUgdGhpcyBtaXhp
biBmb3IgYQorICogY29uc2lkZXJhYmxlIHBlcmZvcm1hbmNlIGJvb3N0LgorICoKKyAqIE1vc3Qg
UmVhY3QgY29tcG9uZW50cyBoYXZlIHB1cmUgcmVuZGVyIGZ1bmN0aW9ucy4KKyAqCisgKiBFeGFt
cGxlOgorICoKKyAqICAgdmFyIFJlYWN0Q29tcG9uZW50V2l0aFB1cmVSZW5kZXJNaXhpbiA9Cisg
KiAgICAgcmVxdWlyZSgnUmVhY3RDb21wb25lbnRXaXRoUHVyZVJlbmRlck1peGluJyk7CisgKiAg
IFJlYWN0LmNyZWF0ZUNsYXNzKHsKKyAqICAgICBtaXhpbnM6IFtSZWFjdENvbXBvbmVudFdpdGhQ
dXJlUmVuZGVyTWl4aW5dLAorICoKKyAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeworICogICAg
ICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZX0+Zm9vPC9kaXY+
OworICogICAgIH0KKyAqICAgfSk7CisgKgorICogTm90ZTogVGhpcyBvbmx5IGNoZWNrcyBzaGFs
bG93IGVxdWFsaXR5IGZvciBwcm9wcyBhbmQgc3RhdGUuIElmIHRoZXNlIGNvbnRhaW4KKyAqIGNv
bXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoaXMgbWl4aW4gbWF5IGhhdmUgZmFsc2UtbmVnYXRpdmVz
IGZvciBkZWVwZXIKKyAqIGRpZmZlcmVuY2VzLiBPbmx5IG1peGluIHRvIGNvbXBvbmVudHMgd2hp
Y2ggaGF2ZSBzaW1wbGUgcHJvcHMgYW5kIHN0YXRlLCBvcgorICogdXNlIGBmb3JjZVVwZGF0ZSgp
YCB3aGVuIHlvdSBrbm93IGRlZXAgZGF0YSBzdHJ1Y3R1cmVzIGhhdmUgY2hhbmdlZC4KKyAqCisg
KiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9wdXJlLXJlbmRlci1t
aXhpbi5odG1sCisgKi8KK3ZhciBSZWFjdENvbXBvbmVudFdpdGhQdXJlUmVuZGVyTWl4aW4gPSB7
CisgIHNob3VsZENvbXBvbmVudFVwZGF0ZTogZnVuY3Rpb24gKG5leHRQcm9wcywgbmV4dFN0YXRl
KSB7CisgICAgcmV0dXJuIHNoYWxsb3dDb21wYXJlKHRoaXMsIG5leHRQcm9wcywgbmV4dFN0YXRl
KTsKKyAgfQorfTsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdENvbXBvbmVudFdpdGhQdXJlUmVu
ZGVyTWl4aW47Cit9LHsiNDAiOjQwfV0sMTQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9y
dHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2Vk
IHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25h
bCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMg
ZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICogCisgKi8KKworJ3VzZSBzdHJpY3Qn
OworCisvKioKKyAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IG93bmVyLgorICoKKyAqIFRo
ZSBjdXJyZW50IG93bmVyIGlzIHRoZSBjb21wb25lbnQgd2hvIHNob3VsZCBvd24gYW55IGNvbXBv
bmVudHMgdGhhdCBhcmUKKyAqIGN1cnJlbnRseSBiZWluZyBjb25zdHJ1Y3RlZC4KKyAqLwordmFy
IFJlYWN0Q3VycmVudE93bmVyID0geworCisgIC8qKgorICAgKiBAaW50ZXJuYWwKKyAgICogQHR5
cGUge1JlYWN0Q29tcG9uZW50fQorICAgKi8KKyAgY3VycmVudDogbnVsbAorCit9OworCittb2R1
bGUuZXhwb3J0cyA9IFJlYWN0Q3VycmVudE93bmVyOworfSx7fV0sMTU6W2Z1bmN0aW9uKF9kZXJl
cV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNl
Ym9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBj
b2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUK
KyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJl
ZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQg
aW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1
c2Ugc3RyaWN0JzsKKwordmFyIFJlYWN0RWxlbWVudCA9IF9kZXJlcV8oMTYpOworCisvKioKKyAq
IENyZWF0ZSBhIGZhY3RvcnkgdGhhdCBjcmVhdGVzIEhUTUwgdGFnIGVsZW1lbnRzLgorICoKKyAq
IEBwcml2YXRlCisgKi8KK3ZhciBjcmVhdGVET01GYWN0b3J5ID0gUmVhY3RFbGVtZW50LmNyZWF0
ZUZhY3Rvcnk7CitpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgIHZhciBS
ZWFjdEVsZW1lbnRWYWxpZGF0b3IgPSBfZGVyZXFfKDE4KTsKKyAgY3JlYXRlRE9NRmFjdG9yeSA9
IFJlYWN0RWxlbWVudFZhbGlkYXRvci5jcmVhdGVGYWN0b3J5OworfQorCisvKioKKyAqIENyZWF0
ZXMgYSBtYXBwaW5nIGZyb20gc3VwcG9ydGVkIEhUTUwgdGFncyB0byBgUmVhY3RET01Db21wb25l
bnRgIGNsYXNzZXMuCisgKiBUaGlzIGlzIGFsc28gYWNjZXNzaWJsZSB2aWEgYFJlYWN0LkRPTWAu
CisgKgorICogQHB1YmxpYworICovCit2YXIgUmVhY3RET01GYWN0b3JpZXMgPSB7CisgIGE6IGNy
ZWF0ZURPTUZhY3RvcnkoJ2EnKSwKKyAgYWJicjogY3JlYXRlRE9NRmFjdG9yeSgnYWJicicpLAor
ICBhZGRyZXNzOiBjcmVhdGVET01GYWN0b3J5KCdhZGRyZXNzJyksCisgIGFyZWE6IGNyZWF0ZURP
TUZhY3RvcnkoJ2FyZWEnKSwKKyAgYXJ0aWNsZTogY3JlYXRlRE9NRmFjdG9yeSgnYXJ0aWNsZScp
LAorICBhc2lkZTogY3JlYXRlRE9NRmFjdG9yeSgnYXNpZGUnKSwKKyAgYXVkaW86IGNyZWF0ZURP
TUZhY3RvcnkoJ2F1ZGlvJyksCisgIGI6IGNyZWF0ZURPTUZhY3RvcnkoJ2InKSwKKyAgYmFzZTog
Y3JlYXRlRE9NRmFjdG9yeSgnYmFzZScpLAorICBiZGk6IGNyZWF0ZURPTUZhY3RvcnkoJ2JkaScp
LAorICBiZG86IGNyZWF0ZURPTUZhY3RvcnkoJ2JkbycpLAorICBiaWc6IGNyZWF0ZURPTUZhY3Rv
cnkoJ2JpZycpLAorICBibG9ja3F1b3RlOiBjcmVhdGVET01GYWN0b3J5KCdibG9ja3F1b3RlJyks
CisgIGJvZHk6IGNyZWF0ZURPTUZhY3RvcnkoJ2JvZHknKSwKKyAgYnI6IGNyZWF0ZURPTUZhY3Rv
cnkoJ2JyJyksCisgIGJ1dHRvbjogY3JlYXRlRE9NRmFjdG9yeSgnYnV0dG9uJyksCisgIGNhbnZh
czogY3JlYXRlRE9NRmFjdG9yeSgnY2FudmFzJyksCisgIGNhcHRpb246IGNyZWF0ZURPTUZhY3Rv
cnkoJ2NhcHRpb24nKSwKKyAgY2l0ZTogY3JlYXRlRE9NRmFjdG9yeSgnY2l0ZScpLAorICBjb2Rl
OiBjcmVhdGVET01GYWN0b3J5KCdjb2RlJyksCisgIGNvbDogY3JlYXRlRE9NRmFjdG9yeSgnY29s
JyksCisgIGNvbGdyb3VwOiBjcmVhdGVET01GYWN0b3J5KCdjb2xncm91cCcpLAorICBkYXRhOiBj
cmVhdGVET01GYWN0b3J5KCdkYXRhJyksCisgIGRhdGFsaXN0OiBjcmVhdGVET01GYWN0b3J5KCdk
YXRhbGlzdCcpLAorICBkZDogY3JlYXRlRE9NRmFjdG9yeSgnZGQnKSwKKyAgZGVsOiBjcmVhdGVE
T01GYWN0b3J5KCdkZWwnKSwKKyAgZGV0YWlsczogY3JlYXRlRE9NRmFjdG9yeSgnZGV0YWlscycp
LAorICBkZm46IGNyZWF0ZURPTUZhY3RvcnkoJ2RmbicpLAorICBkaWFsb2c6IGNyZWF0ZURPTUZh
Y3RvcnkoJ2RpYWxvZycpLAorICBkaXY6IGNyZWF0ZURPTUZhY3RvcnkoJ2RpdicpLAorICBkbDog
Y3JlYXRlRE9NRmFjdG9yeSgnZGwnKSwKKyAgZHQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2R0JyksCisg
IGVtOiBjcmVhdGVET01GYWN0b3J5KCdlbScpLAorICBlbWJlZDogY3JlYXRlRE9NRmFjdG9yeSgn
ZW1iZWQnKSwKKyAgZmllbGRzZXQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2ZpZWxkc2V0JyksCisgIGZp
Z2NhcHRpb246IGNyZWF0ZURPTUZhY3RvcnkoJ2ZpZ2NhcHRpb24nKSwKKyAgZmlndXJlOiBjcmVh
dGVET01GYWN0b3J5KCdmaWd1cmUnKSwKKyAgZm9vdGVyOiBjcmVhdGVET01GYWN0b3J5KCdmb290
ZXInKSwKKyAgZm9ybTogY3JlYXRlRE9NRmFjdG9yeSgnZm9ybScpLAorICBoMTogY3JlYXRlRE9N
RmFjdG9yeSgnaDEnKSwKKyAgaDI6IGNyZWF0ZURPTUZhY3RvcnkoJ2gyJyksCisgIGgzOiBjcmVh
dGVET01GYWN0b3J5KCdoMycpLAorICBoNDogY3JlYXRlRE9NRmFjdG9yeSgnaDQnKSwKKyAgaDU6
IGNyZWF0ZURPTUZhY3RvcnkoJ2g1JyksCisgIGg2OiBjcmVhdGVET01GYWN0b3J5KCdoNicpLAor
ICBoZWFkOiBjcmVhdGVET01GYWN0b3J5KCdoZWFkJyksCisgIGhlYWRlcjogY3JlYXRlRE9NRmFj
dG9yeSgnaGVhZGVyJyksCisgIGhncm91cDogY3JlYXRlRE9NRmFjdG9yeSgnaGdyb3VwJyksCisg
IGhyOiBjcmVhdGVET01GYWN0b3J5KCdocicpLAorICBodG1sOiBjcmVhdGVET01GYWN0b3J5KCdo
dG1sJyksCisgIGk6IGNyZWF0ZURPTUZhY3RvcnkoJ2knKSwKKyAgaWZyYW1lOiBjcmVhdGVET01G
YWN0b3J5KCdpZnJhbWUnKSwKKyAgaW1nOiBjcmVhdGVET01GYWN0b3J5KCdpbWcnKSwKKyAgaW5w
dXQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2lucHV0JyksCisgIGluczogY3JlYXRlRE9NRmFjdG9yeSgn
aW5zJyksCisgIGtiZDogY3JlYXRlRE9NRmFjdG9yeSgna2JkJyksCisgIGtleWdlbjogY3JlYXRl
RE9NRmFjdG9yeSgna2V5Z2VuJyksCisgIGxhYmVsOiBjcmVhdGVET01GYWN0b3J5KCdsYWJlbCcp
LAorICBsZWdlbmQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2xlZ2VuZCcpLAorICBsaTogY3JlYXRlRE9N
RmFjdG9yeSgnbGknKSwKKyAgbGluazogY3JlYXRlRE9NRmFjdG9yeSgnbGluaycpLAorICBtYWlu
OiBjcmVhdGVET01GYWN0b3J5KCdtYWluJyksCisgIG1hcDogY3JlYXRlRE9NRmFjdG9yeSgnbWFw
JyksCisgIG1hcms6IGNyZWF0ZURPTUZhY3RvcnkoJ21hcmsnKSwKKyAgbWVudTogY3JlYXRlRE9N
RmFjdG9yeSgnbWVudScpLAorICBtZW51aXRlbTogY3JlYXRlRE9NRmFjdG9yeSgnbWVudWl0ZW0n
KSwKKyAgbWV0YTogY3JlYXRlRE9NRmFjdG9yeSgnbWV0YScpLAorICBtZXRlcjogY3JlYXRlRE9N
RmFjdG9yeSgnbWV0ZXInKSwKKyAgbmF2OiBjcmVhdGVET01GYWN0b3J5KCduYXYnKSwKKyAgbm9z
Y3JpcHQ6IGNyZWF0ZURPTUZhY3RvcnkoJ25vc2NyaXB0JyksCisgIG9iamVjdDogY3JlYXRlRE9N
RmFjdG9yeSgnb2JqZWN0JyksCisgIG9sOiBjcmVhdGVET01GYWN0b3J5KCdvbCcpLAorICBvcHRn
cm91cDogY3JlYXRlRE9NRmFjdG9yeSgnb3B0Z3JvdXAnKSwKKyAgb3B0aW9uOiBjcmVhdGVET01G
YWN0b3J5KCdvcHRpb24nKSwKKyAgb3V0cHV0OiBjcmVhdGVET01GYWN0b3J5KCdvdXRwdXQnKSwK
KyAgcDogY3JlYXRlRE9NRmFjdG9yeSgncCcpLAorICBwYXJhbTogY3JlYXRlRE9NRmFjdG9yeSgn
cGFyYW0nKSwKKyAgcGljdHVyZTogY3JlYXRlRE9NRmFjdG9yeSgncGljdHVyZScpLAorICBwcmU6
IGNyZWF0ZURPTUZhY3RvcnkoJ3ByZScpLAorICBwcm9ncmVzczogY3JlYXRlRE9NRmFjdG9yeSgn
cHJvZ3Jlc3MnKSwKKyAgcTogY3JlYXRlRE9NRmFjdG9yeSgncScpLAorICBycDogY3JlYXRlRE9N
RmFjdG9yeSgncnAnKSwKKyAgcnQ6IGNyZWF0ZURPTUZhY3RvcnkoJ3J0JyksCisgIHJ1Ynk6IGNy
ZWF0ZURPTUZhY3RvcnkoJ3J1YnknKSwKKyAgczogY3JlYXRlRE9NRmFjdG9yeSgncycpLAorICBz
YW1wOiBjcmVhdGVET01GYWN0b3J5KCdzYW1wJyksCisgIHNjcmlwdDogY3JlYXRlRE9NRmFjdG9y
eSgnc2NyaXB0JyksCisgIHNlY3Rpb246IGNyZWF0ZURPTUZhY3RvcnkoJ3NlY3Rpb24nKSwKKyAg
c2VsZWN0OiBjcmVhdGVET01GYWN0b3J5KCdzZWxlY3QnKSwKKyAgc21hbGw6IGNyZWF0ZURPTUZh
Y3RvcnkoJ3NtYWxsJyksCisgIHNvdXJjZTogY3JlYXRlRE9NRmFjdG9yeSgnc291cmNlJyksCisg
IHNwYW46IGNyZWF0ZURPTUZhY3RvcnkoJ3NwYW4nKSwKKyAgc3Ryb25nOiBjcmVhdGVET01GYWN0
b3J5KCdzdHJvbmcnKSwKKyAgc3R5bGU6IGNyZWF0ZURPTUZhY3RvcnkoJ3N0eWxlJyksCisgIHN1
YjogY3JlYXRlRE9NRmFjdG9yeSgnc3ViJyksCisgIHN1bW1hcnk6IGNyZWF0ZURPTUZhY3Rvcnko
J3N1bW1hcnknKSwKKyAgc3VwOiBjcmVhdGVET01GYWN0b3J5KCdzdXAnKSwKKyAgdGFibGU6IGNy
ZWF0ZURPTUZhY3RvcnkoJ3RhYmxlJyksCisgIHRib2R5OiBjcmVhdGVET01GYWN0b3J5KCd0Ym9k
eScpLAorICB0ZDogY3JlYXRlRE9NRmFjdG9yeSgndGQnKSwKKyAgdGV4dGFyZWE6IGNyZWF0ZURP
TUZhY3RvcnkoJ3RleHRhcmVhJyksCisgIHRmb290OiBjcmVhdGVET01GYWN0b3J5KCd0Zm9vdCcp
LAorICB0aDogY3JlYXRlRE9NRmFjdG9yeSgndGgnKSwKKyAgdGhlYWQ6IGNyZWF0ZURPTUZhY3Rv
cnkoJ3RoZWFkJyksCisgIHRpbWU6IGNyZWF0ZURPTUZhY3RvcnkoJ3RpbWUnKSwKKyAgdGl0bGU6
IGNyZWF0ZURPTUZhY3RvcnkoJ3RpdGxlJyksCisgIHRyOiBjcmVhdGVET01GYWN0b3J5KCd0cicp
LAorICB0cmFjazogY3JlYXRlRE9NRmFjdG9yeSgndHJhY2snKSwKKyAgdTogY3JlYXRlRE9NRmFj
dG9yeSgndScpLAorICB1bDogY3JlYXRlRE9NRmFjdG9yeSgndWwnKSwKKyAgJ3Zhcic6IGNyZWF0
ZURPTUZhY3RvcnkoJ3ZhcicpLAorICB2aWRlbzogY3JlYXRlRE9NRmFjdG9yeSgndmlkZW8nKSwK
KyAgd2JyOiBjcmVhdGVET01GYWN0b3J5KCd3YnInKSwKKworICAvLyBTVkcKKyAgY2lyY2xlOiBj
cmVhdGVET01GYWN0b3J5KCdjaXJjbGUnKSwKKyAgY2xpcFBhdGg6IGNyZWF0ZURPTUZhY3Rvcnko
J2NsaXBQYXRoJyksCisgIGRlZnM6IGNyZWF0ZURPTUZhY3RvcnkoJ2RlZnMnKSwKKyAgZWxsaXBz
ZTogY3JlYXRlRE9NRmFjdG9yeSgnZWxsaXBzZScpLAorICBnOiBjcmVhdGVET01GYWN0b3J5KCdn
JyksCisgIGltYWdlOiBjcmVhdGVET01GYWN0b3J5KCdpbWFnZScpLAorICBsaW5lOiBjcmVhdGVE
T01GYWN0b3J5KCdsaW5lJyksCisgIGxpbmVhckdyYWRpZW50OiBjcmVhdGVET01GYWN0b3J5KCds
aW5lYXJHcmFkaWVudCcpLAorICBtYXNrOiBjcmVhdGVET01GYWN0b3J5KCdtYXNrJyksCisgIHBh
dGg6IGNyZWF0ZURPTUZhY3RvcnkoJ3BhdGgnKSwKKyAgcGF0dGVybjogY3JlYXRlRE9NRmFjdG9y
eSgncGF0dGVybicpLAorICBwb2x5Z29uOiBjcmVhdGVET01GYWN0b3J5KCdwb2x5Z29uJyksCisg
IHBvbHlsaW5lOiBjcmVhdGVET01GYWN0b3J5KCdwb2x5bGluZScpLAorICByYWRpYWxHcmFkaWVu
dDogY3JlYXRlRE9NRmFjdG9yeSgncmFkaWFsR3JhZGllbnQnKSwKKyAgcmVjdDogY3JlYXRlRE9N
RmFjdG9yeSgncmVjdCcpLAorICBzdG9wOiBjcmVhdGVET01GYWN0b3J5KCdzdG9wJyksCisgIHN2
ZzogY3JlYXRlRE9NRmFjdG9yeSgnc3ZnJyksCisgIHRleHQ6IGNyZWF0ZURPTUZhY3RvcnkoJ3Rl
eHQnKSwKKyAgdHNwYW46IGNyZWF0ZURPTUZhY3RvcnkoJ3RzcGFuJykKK307CisKK21vZHVsZS5l
eHBvcnRzID0gUmVhY3RET01GYWN0b3JpZXM7Cit9LHsiMTYiOjE2LCIxOCI6MTh9XSwxNjpbZnVu
Y3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDE0LXBy
ZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZv
dW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlz
IHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNh
biBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAq
CisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgX2Fzc2lnbiA9IF9kZXJlcV8oNTApOworCit2
YXIgUmVhY3RDdXJyZW50T3duZXIgPSBfZGVyZXFfKDE0KTsKKwordmFyIHdhcm5pbmcgPSBfZGVy
ZXFfKDQ5KTsKK3ZhciBjYW5EZWZpbmVQcm9wZXJ0eSA9IF9kZXJlcV8oMzMpOwordmFyIGhhc093
blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTsKKwordmFyIFJFQUNU
X0VMRU1FTlRfVFlQRSA9IF9kZXJlcV8oMTcpOworCit2YXIgUkVTRVJWRURfUFJPUFMgPSB7Cisg
IGtleTogdHJ1ZSwKKyAgcmVmOiB0cnVlLAorICBfX3NlbGY6IHRydWUsCisgIF9fc291cmNlOiB0
cnVlCit9OworCit2YXIgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24sIHNwZWNpYWxQcm9wUmVm
V2FybmluZ1Nob3duOworCitmdW5jdGlvbiBoYXNWYWxpZFJlZihjb25maWcpIHsKKyAgaWYgKCJk
ZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5j
YWxsKGNvbmZpZywgJ3JlZicpKSB7CisgICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdyZWYnKS5nZXQ7CisgICAgICBpZiAoZ2V0dGVyICYm
IGdldHRlci5pc1JlYWN0V2FybmluZykgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9
CisgICAgfQorICB9CisgIHJldHVybiBjb25maWcucmVmICE9PSB1bmRlZmluZWQ7Cit9CisKK2Z1
bmN0aW9uIGhhc1ZhbGlkS2V5KGNvbmZpZykgeworICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3By
b2R1Y3Rpb24nKSB7CisgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAna2V5Jykp
IHsKKyAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNv
bmZpZywgJ2tleScpLmdldDsKKyAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJu
aW5nKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0
dXJuIGNvbmZpZy5rZXkgIT09IHVuZGVmaW5lZDsKK30KKworZnVuY3Rpb24gZGVmaW5lS2V5UHJv
cFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7CisgIHZhciB3YXJuQWJvdXRBY2Nl
c3NpbmdLZXkgPSBmdW5jdGlvbiAoKSB7CisgICAgaWYgKCFzcGVjaWFsUHJvcEtleVdhcm5pbmdT
aG93bikgeworICAgICAgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gPSB0cnVlOworICAgICAg
ImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJyVzOiBga2V5
YCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4g
YHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2Ft
ZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3Mg
aXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9mYi5tZS9yZWFjdC1zcGVjaWFs
LXByb3BzKScsIGRpc3BsYXlOYW1lKSA6IHZvaWQgMDsKKyAgICB9CisgIH07CisgIHdhcm5BYm91
dEFjY2Vzc2luZ0tleS5pc1JlYWN0V2FybmluZyA9IHRydWU7CisgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShwcm9wcywgJ2tleScsIHsKKyAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ0tleSwKKyAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgfSk7Cit9CisKK2Z1bmN0aW9uIGRlZmluZVJlZlByb3BX
YXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkgeworICB2YXIgd2FybkFib3V0QWNjZXNz
aW5nUmVmID0gZnVuY3Rpb24gKCkgeworICAgIGlmICghc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hv
d24pIHsKKyAgICAgIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duID0gdHJ1ZTsKKyAgICAgICJk
ZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICclczogYHJlZmAg
aXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1
bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUg
JyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0
IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vZmIubWUvcmVhY3Qtc3BlY2lhbC1w
cm9wcyknLCBkaXNwbGF5TmFtZSkgOiB2b2lkIDA7CisgICAgfQorICB9OworICB3YXJuQWJvdXRB
Y2Nlc3NpbmdSZWYuaXNSZWFjdFdhcm5pbmcgPSB0cnVlOworICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkocHJvcHMsICdyZWYnLCB7CisgICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYsCisgICAg
Y29uZmlndXJhYmxlOiB0cnVlCisgIH0pOworfQorCisvKioKKyAqIEZhY3RvcnkgbWV0aG9kIHRv
IGNyZWF0ZSBhIG5ldyBSZWFjdCBlbGVtZW50LiBUaGlzIG5vIGxvbmdlciBhZGhlcmVzIHRvCisg
KiB0aGUgY2xhc3MgcGF0dGVybiwgc28gZG8gbm90IHVzZSBuZXcgdG8gY2FsbCBpdC4gQWxzbywg
bm8gaW5zdGFuY2VvZiBjaGVjaworICogd2lsbCB3b3JrLiBJbnN0ZWFkIHRlc3QgJCR0eXBlb2Yg
ZmllbGQgYWdhaW5zdCBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgdG8gY2hlY2sKKyAqIGlm
IHNvbWV0aGluZyBpcyBhIFJlYWN0IEVsZW1lbnQuCisgKgorICogQHBhcmFtIHsqfSB0eXBlCisg
KiBAcGFyYW0geyp9IGtleQorICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSByZWYKKyAqIEBwYXJh
bSB7Kn0gc2VsZiBBICp0ZW1wb3JhcnkqIGhlbHBlciB0byBkZXRlY3QgcGxhY2VzIHdoZXJlIGB0
aGlzYCBpcworICogZGlmZmVyZW50IGZyb20gdGhlIGBvd25lcmAgd2hlbiBSZWFjdC5jcmVhdGVF
bGVtZW50IGlzIGNhbGxlZCwgc28gdGhhdCB3ZQorICogY2FuIHdhcm4uIFdlIHdhbnQgdG8gZ2V0
IHJpZCBvZiBvd25lciBhbmQgcmVwbGFjZSBzdHJpbmcgYHJlZmBzIHdpdGggYXJyb3cKKyAqIGZ1
bmN0aW9ucywgYW5kIGFzIGxvbmcgYXMgYHRoaXNgIGFuZCBvd25lciBhcmUgdGhlIHNhbWUsIHRo
ZXJlIHdpbGwgYmUgbm8KKyAqIGNoYW5nZSBpbiBiZWhhdmlvci4KKyAqIEBwYXJhbSB7Kn0gc291
cmNlIEFuIGFubm90YXRpb24gb2JqZWN0IChhZGRlZCBieSBhIHRyYW5zcGlsZXIgb3Igb3RoZXJ3
aXNlKQorICogaW5kaWNhdGluZyBmaWxlbmFtZSwgbGluZSBudW1iZXIsIGFuZC9vciBvdGhlciBp
bmZvcm1hdGlvbi4KKyAqIEBwYXJhbSB7Kn0gb3duZXIKKyAqIEBwYXJhbSB7Kn0gcHJvcHMKKyAq
IEBpbnRlcm5hbAorICovCit2YXIgUmVhY3RFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUsIGtleSwg
cmVmLCBzZWxmLCBzb3VyY2UsIG93bmVyLCBwcm9wcykgeworICB2YXIgZWxlbWVudCA9IHsKKyAg
ICAvLyBUaGlzIHRhZyBhbGxvdyB1cyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGFzIGEgUmVh
Y3QgRWxlbWVudAorICAgICQkdHlwZW9mOiBSRUFDVF9FTEVNRU5UX1RZUEUsCisKKyAgICAvLyBC
dWlsdC1pbiBwcm9wZXJ0aWVzIHRoYXQgYmVsb25nIG9uIHRoZSBlbGVtZW50CisgICAgdHlwZTog
dHlwZSwKKyAgICBrZXk6IGtleSwKKyAgICByZWY6IHJlZiwKKyAgICBwcm9wczogcHJvcHMsCisK
KyAgICAvLyBSZWNvcmQgdGhlIGNvbXBvbmVudCByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhp
cyBlbGVtZW50LgorICAgIF9vd25lcjogb3duZXIKKyAgfTsKKworICBpZiAoImRldmVsb3BtZW50
IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgLy8gVGhlIHZhbGlkYXRpb24gZmxhZyBpcyBjdXJy
ZW50bHkgbXV0YXRpdmUuIFdlIHB1dCBpdCBvbgorICAgIC8vIGFuIGV4dGVybmFsIGJhY2tpbmcg
c3RvcmUgc28gdGhhdCB3ZSBjYW4gZnJlZXplIHRoZSB3aG9sZSBvYmplY3QuCisgICAgLy8gVGhp
cyBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIFdlYWtNYXAgb25jZSB0aGV5IGFyZSBpbXBsZW1lbnRl
ZCBpbgorICAgIC8vIGNvbW1vbmx5IHVzZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzLgorICAg
IGVsZW1lbnQuX3N0b3JlID0ge307CisKKyAgICAvLyBUbyBtYWtlIGNvbXBhcmluZyBSZWFjdEVs
ZW1lbnRzIGVhc2llciBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2UgbWFrZQorICAgIC8vIHRoZSB2
YWxpZGF0aW9uIGZsYWcgbm9uLWVudW1lcmFibGUgKHdoZXJlIHBvc3NpYmxlLCB3aGljaCBzaG91
bGQKKyAgICAvLyBpbmNsdWRlIGV2ZXJ5IGVudmlyb25tZW50IHdlIHJ1biB0ZXN0cyBpbiksIHNv
IHRoZSB0ZXN0IGZyYW1ld29yaworICAgIC8vIGlnbm9yZXMgaXQuCisgICAgaWYgKGNhbkRlZmlu
ZVByb3BlcnR5KSB7CisgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudC5fc3RvcmUs
ICd2YWxpZGF0ZWQnLCB7CisgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsCisgICAgICAgIGVu
dW1lcmFibGU6IGZhbHNlLAorICAgICAgICB3cml0YWJsZTogdHJ1ZSwKKyAgICAgICAgdmFsdWU6
IGZhbHNlCisgICAgICB9KTsKKyAgICAgIC8vIHNlbGYgYW5kIHNvdXJjZSBhcmUgREVWIG9ubHkg
cHJvcGVydGllcy4KKyAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NlbGYn
LCB7CisgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsCisgICAgICAgIGVudW1lcmFibGU6IGZh
bHNlLAorICAgICAgICB3cml0YWJsZTogZmFsc2UsCisgICAgICAgIHZhbHVlOiBzZWxmCisgICAg
ICB9KTsKKyAgICAgIC8vIFR3byBlbGVtZW50cyBjcmVhdGVkIGluIHR3byBkaWZmZXJlbnQgcGxh
Y2VzIHNob3VsZCBiZSBjb25zaWRlcmVkCisgICAgICAvLyBlcXVhbCBmb3IgdGVzdGluZyBwdXJw
b3NlcyBhbmQgdGhlcmVmb3JlIHdlIGhpZGUgaXQgZnJvbSBlbnVtZXJhdGlvbi4KKyAgICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NvdXJjZScsIHsKKyAgICAgICAgY29uZmln
dXJhYmxlOiBmYWxzZSwKKyAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsCisgICAgICAgIHdyaXRh
YmxlOiBmYWxzZSwKKyAgICAgICAgdmFsdWU6IHNvdXJjZQorICAgICAgfSk7CisgICAgfSBlbHNl
IHsKKyAgICAgIGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCA9IGZhbHNlOworICAgICAgZWxlbWVu
dC5fc2VsZiA9IHNlbGY7CisgICAgICBlbGVtZW50Ll9zb3VyY2UgPSBzb3VyY2U7CisgICAgfQor
ICAgIGlmIChPYmplY3QuZnJlZXplKSB7CisgICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQucHJv
cHMpOworICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50KTsKKyAgICB9CisgIH0KKworICByZXR1
cm4gZWxlbWVudDsKK307CisKKy8qKgorICogQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgUmVhY3RF
bGVtZW50IG9mIHRoZSBnaXZlbiB0eXBlLgorICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHVi
LmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNyZWF0ZWVsZW1lbnQKKyAq
LworUmVhY3RFbGVtZW50LmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbiAodHlwZSwgY29uZmlnLCBj
aGlsZHJlbikgeworICB2YXIgcHJvcE5hbWU7CisKKyAgLy8gUmVzZXJ2ZWQgbmFtZXMgYXJlIGV4
dHJhY3RlZAorICB2YXIgcHJvcHMgPSB7fTsKKworICB2YXIga2V5ID0gbnVsbDsKKyAgdmFyIHJl
ZiA9IG51bGw7CisgIHZhciBzZWxmID0gbnVsbDsKKyAgdmFyIHNvdXJjZSA9IG51bGw7CisKKyAg
aWYgKGNvbmZpZyAhPSBudWxsKSB7CisgICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHsKKyAg
ICAgIHJlZiA9IGNvbmZpZy5yZWY7CisgICAgfQorICAgIGlmIChoYXNWYWxpZEtleShjb25maWcp
KSB7CisgICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7CisgICAgfQorCisgICAgc2VsZiA9IGNv
bmZpZy5fX3NlbGYgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb25maWcuX19zZWxmOworICAgIHNv
dXJjZSA9IGNvbmZpZy5fX3NvdXJjZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNvbmZpZy5fX3Nv
dXJjZTsKKyAgICAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBhcmUgYWRkZWQgdG8gYSBuZXcgcHJv
cHMgb2JqZWN0CisgICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHsKKyAgICAgIGlmIChoYXNP
d25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNP
d25Qcm9wZXJ0eShwcm9wTmFtZSkpIHsKKyAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmln
W3Byb3BOYW1lXTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICAvLyBDaGlsZHJlbiBjYW4gYmUg
bW9yZSB0aGFuIG9uZSBhcmd1bWVudCwgYW5kIHRob3NlIGFyZSB0cmFuc2ZlcnJlZCBvbnRvCisg
IC8vIHRoZSBuZXdseSBhbGxvY2F0ZWQgcHJvcHMgb2JqZWN0LgorICB2YXIgY2hpbGRyZW5MZW5n
dGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjsKKyAgaWYgKGNoaWxkcmVuTGVuZ3RoID09PSAxKSB7
CisgICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZHJlbjsKKyAgfSBlbHNlIGlmIChjaGlsZHJlbkxl
bmd0aCA+IDEpIHsKKyAgICB2YXIgY2hpbGRBcnJheSA9IEFycmF5KGNoaWxkcmVuTGVuZ3RoKTsK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHsKKyAgICAgIGNo
aWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdOworICAgIH0KKyAgICBpZiAoImRldmVsb3Bt
ZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgICBpZiAoT2JqZWN0LmZyZWV6ZSkgeworICAg
ICAgICBPYmplY3QuZnJlZXplKGNoaWxkQXJyYXkpOworICAgICAgfQorICAgIH0KKyAgICBwcm9w
cy5jaGlsZHJlbiA9IGNoaWxkQXJyYXk7CisgIH0KKworICAvLyBSZXNvbHZlIGRlZmF1bHQgcHJv
cHMKKyAgaWYgKHR5cGUgJiYgdHlwZS5kZWZhdWx0UHJvcHMpIHsKKyAgICB2YXIgZGVmYXVsdFBy
b3BzID0gdHlwZS5kZWZhdWx0UHJvcHM7CisgICAgZm9yIChwcm9wTmFtZSBpbiBkZWZhdWx0UHJv
cHMpIHsKKyAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkgeworICAgICAg
ICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdOworICAgICAgfQorICAg
IH0KKyAgfQorICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgaWYg
KGtleSB8fCByZWYpIHsKKyAgICAgIGlmICh0eXBlb2YgcHJvcHMuJCR0eXBlb2YgPT09ICd1bmRl
ZmluZWQnIHx8IHByb3BzLiQkdHlwZW9mICE9PSBSRUFDVF9FTEVNRU5UX1RZUEUpIHsKKyAgICAg
ICAgdmFyIGRpc3BsYXlOYW1lID0gdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgPyB0eXBlLmRp
c3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCAnVW5rbm93bicgOiB0eXBlOworICAgICAgICBpZiAo
a2V5KSB7CisgICAgICAgICAgZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3Bs
YXlOYW1lKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVmKSB7CisgICAgICAgICAgZGVmaW5l
UmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTsKKyAgICAgICAgfQorICAg
ICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gUmVhY3RFbGVtZW50KHR5cGUsIGtleSwgcmVmLCBz
ZWxmLCBzb3VyY2UsIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQsIHByb3BzKTsKK307CisKKy8q
KgorICogUmV0dXJuIGEgZnVuY3Rpb24gdGhhdCBwcm9kdWNlcyBSZWFjdEVsZW1lbnRzIG9mIGEg
Z2l2ZW4gdHlwZS4KKyAqIFNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2Nz
L3RvcC1sZXZlbC1hcGkuaHRtbCNyZWFjdC5jcmVhdGVmYWN0b3J5CisgKi8KK1JlYWN0RWxlbWVu
dC5jcmVhdGVGYWN0b3J5ID0gZnVuY3Rpb24gKHR5cGUpIHsKKyAgdmFyIGZhY3RvcnkgPSBSZWFj
dEVsZW1lbnQuY3JlYXRlRWxlbWVudC5iaW5kKG51bGwsIHR5cGUpOworICAvLyBFeHBvc2UgdGhl
IHR5cGUgb24gdGhlIGZhY3RvcnkgYW5kIHRoZSBwcm90b3R5cGUgc28gdGhhdCBpdCBjYW4gYmUK
KyAgLy8gZWFzaWx5IGFjY2Vzc2VkIG9uIGVsZW1lbnRzLiBFLmcuIGA8Rm9vIC8+LnR5cGUgPT09
IEZvb2AuCisgIC8vIFRoaXMgc2hvdWxkIG5vdCBiZSBuYW1lZCBgY29uc3RydWN0b3JgIHNpbmNl
IHRoaXMgbWF5IG5vdCBiZSB0aGUgZnVuY3Rpb24KKyAgLy8gdGhhdCBjcmVhdGVkIHRoZSBlbGVt
ZW50LCBhbmQgaXQgbWF5IG5vdCBldmVuIGJlIGEgY29uc3RydWN0b3IuCisgIC8vIExlZ2FjeSBo
b29rIFRPRE86IFdhcm4gaWYgdGhpcyBpcyBhY2Nlc3NlZAorICBmYWN0b3J5LnR5cGUgPSB0eXBl
OworICByZXR1cm4gZmFjdG9yeTsKK307CisKK1JlYWN0RWxlbWVudC5jbG9uZUFuZFJlcGxhY2VL
ZXkgPSBmdW5jdGlvbiAob2xkRWxlbWVudCwgbmV3S2V5KSB7CisgIHZhciBuZXdFbGVtZW50ID0g
UmVhY3RFbGVtZW50KG9sZEVsZW1lbnQudHlwZSwgbmV3S2V5LCBvbGRFbGVtZW50LnJlZiwgb2xk
RWxlbWVudC5fc2VsZiwgb2xkRWxlbWVudC5fc291cmNlLCBvbGRFbGVtZW50Ll9vd25lciwgb2xk
RWxlbWVudC5wcm9wcyk7CisKKyAgcmV0dXJuIG5ld0VsZW1lbnQ7Cit9OworCisvKioKKyAqIENs
b25lIGFuZCByZXR1cm4gYSBuZXcgUmVhY3RFbGVtZW50IHVzaW5nIGVsZW1lbnQgYXMgdGhlIHN0
YXJ0aW5nIHBvaW50LgorICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2Rv
Y3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNsb25lZWxlbWVudAorICovCitSZWFjdEVsZW1l
bnQuY2xvbmVFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIGNvbmZpZywgY2hpbGRyZW4pIHsK
KyAgdmFyIHByb3BOYW1lOworCisgIC8vIE9yaWdpbmFsIHByb3BzIGFyZSBjb3BpZWQKKyAgdmFy
IHByb3BzID0gX2Fzc2lnbih7fSwgZWxlbWVudC5wcm9wcyk7CisKKyAgLy8gUmVzZXJ2ZWQgbmFt
ZXMgYXJlIGV4dHJhY3RlZAorICB2YXIga2V5ID0gZWxlbWVudC5rZXk7CisgIHZhciByZWYgPSBl
bGVtZW50LnJlZjsKKyAgLy8gU2VsZiBpcyBwcmVzZXJ2ZWQgc2luY2UgdGhlIG93bmVyIGlzIHBy
ZXNlcnZlZC4KKyAgdmFyIHNlbGYgPSBlbGVtZW50Ll9zZWxmOworICAvLyBTb3VyY2UgaXMgcHJl
c2VydmVkIHNpbmNlIGNsb25lRWxlbWVudCBpcyB1bmxpa2VseSB0byBiZSB0YXJnZXRlZCBieSBh
CisgIC8vIHRyYW5zcGlsZXIsIGFuZCB0aGUgb3JpZ2luYWwgc291cmNlIGlzIHByb2JhYmx5IGEg
YmV0dGVyIGluZGljYXRvciBvZiB0aGUKKyAgLy8gdHJ1ZSBvd25lci4KKyAgdmFyIHNvdXJjZSA9
IGVsZW1lbnQuX3NvdXJjZTsKKworICAvLyBPd25lciB3aWxsIGJlIHByZXNlcnZlZCwgdW5sZXNz
IHJlZiBpcyBvdmVycmlkZGVuCisgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyOworCisgIGlm
IChjb25maWcgIT0gbnVsbCkgeworICAgIGlmIChoYXNWYWxpZFJlZihjb25maWcpKSB7CisgICAg
ICAvLyBTaWxlbnRseSBzdGVhbCB0aGUgcmVmIGZyb20gdGhlIHBhcmVudC4KKyAgICAgIHJlZiA9
IGNvbmZpZy5yZWY7CisgICAgICBvd25lciA9IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQ7Cisg
ICAgfQorICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7CisgICAgICBrZXkgPSAnJyArIGNv
bmZpZy5rZXk7CisgICAgfQorCisgICAgLy8gUmVtYWluaW5nIHByb3BlcnRpZXMgb3ZlcnJpZGUg
ZXhpc3RpbmcgcHJvcHMKKyAgICB2YXIgZGVmYXVsdFByb3BzOworICAgIGlmIChlbGVtZW50LnR5
cGUgJiYgZWxlbWVudC50eXBlLmRlZmF1bHRQcm9wcykgeworICAgICAgZGVmYXVsdFByb3BzID0g
ZWxlbWVudC50eXBlLmRlZmF1bHRQcm9wczsKKyAgICB9CisgICAgZm9yIChwcm9wTmFtZSBpbiBj
b25maWcpIHsKKyAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUp
ICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHsKKyAgICAgICAg
aWYgKGNvbmZpZ1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCAmJiBkZWZhdWx0UHJvcHMgIT09IHVu
ZGVmaW5lZCkgeworICAgICAgICAgIC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wcworICAgICAgICAg
IHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTsKKyAgICAg
ICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIC8vIENoaWxkcmVuIGNhbiBiZSBtb3JlIHRo
YW4gb25lIGFyZ3VtZW50LCBhbmQgdGhvc2UgYXJlIHRyYW5zZmVycmVkIG9udG8KKyAgLy8gdGhl
IG5ld2x5IGFsbG9jYXRlZCBwcm9wcyBvYmplY3QuCisgIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFy
Z3VtZW50cy5sZW5ndGggLSAyOworICBpZiAoY2hpbGRyZW5MZW5ndGggPT09IDEpIHsKKyAgICBw
cm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuOworICB9IGVsc2UgaWYgKGNoaWxkcmVuTGVuZ3RoID4g
MSkgeworICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRyZW5MZW5ndGgpOworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7IGkrKykgeworICAgICAgY2hpbGRBcnJh
eVtpXSA9IGFyZ3VtZW50c1tpICsgMl07CisgICAgfQorICAgIHByb3BzLmNoaWxkcmVuID0gY2hp
bGRBcnJheTsKKyAgfQorCisgIHJldHVybiBSZWFjdEVsZW1lbnQoZWxlbWVudC50eXBlLCBrZXks
IHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpOworfTsKKworLyoqCisgKiBWZXJpZmll
cyB0aGUgb2JqZWN0IGlzIGEgUmVhY3RFbGVtZW50LgorICogU2VlIGh0dHBzOi8vZmFjZWJvb2su
Z2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmlzdmFsaWRlbGVt
ZW50CisgKiBAcGFyYW0gez9vYmplY3R9IG9iamVjdAorICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1
ZSBpZiBgb2JqZWN0YCBpcyBhIHZhbGlkIGNvbXBvbmVudC4KKyAqIEBmaW5hbAorICovCitSZWFj
dEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQgPSBmdW5jdGlvbiAob2JqZWN0KSB7CisgIHJldHVybiB0
eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQk
dHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7Cit9OworCittb2R1bGUuZXhwb3J0cyA9IFJl
YWN0RWxlbWVudDsKK30seyIxNCI6MTQsIjE3IjoxNywiMzMiOjMzLCI0OSI6NDksIjUwIjo1MH1d
LDE3OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0
IDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxp
Y2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5
IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCBy
aWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0
b3J5LgorICoKKyAqIAorICovCisKKyd1c2Ugc3RyaWN0JzsKKworLy8gVGhlIFN5bWJvbCB1c2Vk
IHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50IHR5cGUuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1i
b2wKKy8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJm
b3JtYW5jZS4KKwordmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IHR5cGVvZiBTeW1ib2wgPT09ICdm
dW5jdGlvbicgJiYgU3ltYm9sWydmb3InXSAmJiBTeW1ib2xbJ2ZvciddKCdyZWFjdC5lbGVtZW50
JykgfHwgMHhlYWM3OworCittb2R1bGUuZXhwb3J0cyA9IFJFQUNUX0VMRU1FTlRfVFlQRTsKK30s
e31dLDE4OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJp
Z2h0IDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxl
IGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0
b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVu
dCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGly
ZWN0b3J5LgorICoKKyAqLworCisvKioKKyAqIFJlYWN0RWxlbWVudFZhbGlkYXRvciBwcm92aWRl
cyBhIHdyYXBwZXIgYXJvdW5kIGEgZWxlbWVudCBmYWN0b3J5CisgKiB3aGljaCB2YWxpZGF0ZXMg
dGhlIHByb3BzIHBhc3NlZCB0byB0aGUgZWxlbWVudC4gVGhpcyBpcyBpbnRlbmRlZCB0byBiZQor
ICogdXNlZCBvbmx5IGluIERFViBhbmQgY291bGQgYmUgcmVwbGFjZWQgYnkgYSBzdGF0aWMgdHlw
ZSBjaGVja2VyIGZvciBsYW5ndWFnZXMKKyAqIHRoYXQgc3VwcG9ydCBpdC4KKyAqLworCisndXNl
IHN0cmljdCc7CisKK3ZhciBSZWFjdEN1cnJlbnRPd25lciA9IF9kZXJlcV8oMTQpOwordmFyIFJl
YWN0Q29tcG9uZW50VHJlZUhvb2sgPSBfZGVyZXFfKDEyKTsKK3ZhciBSZWFjdEVsZW1lbnQgPSBf
ZGVyZXFfKDE2KTsKKwordmFyIGNoZWNrUmVhY3RUeXBlU3BlYyA9IF9kZXJlcV8oMzQpOworCit2
YXIgY2FuRGVmaW5lUHJvcGVydHkgPSBfZGVyZXFfKDMzKTsKK3ZhciBnZXRJdGVyYXRvckZuID0g
X2RlcmVxXygzNik7Cit2YXIgd2FybmluZyA9IF9kZXJlcV8oNDkpOworCitmdW5jdGlvbiBnZXRE
ZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7CisgIGlmIChSZWFjdEN1cnJlbnRPd25lci5jdXJy
ZW50KSB7CisgICAgdmFyIG5hbWUgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LmdldE5hbWUo
KTsKKyAgICBpZiAobmFtZSkgeworICAgICAgcmV0dXJuICcgQ2hlY2sgdGhlIHJlbmRlciBtZXRo
b2Qgb2YgYCcgKyBuYW1lICsgJ2AuJzsKKyAgICB9CisgIH0KKyAgcmV0dXJuICcnOworfQorCitm
dW5jdGlvbiBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bShlbGVtZW50UHJvcHMpIHsKKyAgaWYg
KGVsZW1lbnRQcm9wcyAhPT0gbnVsbCAmJiBlbGVtZW50UHJvcHMgIT09IHVuZGVmaW5lZCAmJiBl
bGVtZW50UHJvcHMuX19zb3VyY2UgIT09IHVuZGVmaW5lZCkgeworICAgIHZhciBzb3VyY2UgPSBl
bGVtZW50UHJvcHMuX19zb3VyY2U7CisgICAgdmFyIGZpbGVOYW1lID0gc291cmNlLmZpbGVOYW1l
LnJlcGxhY2UoL14uKltcXFwvXS8sICcnKTsKKyAgICB2YXIgbGluZU51bWJlciA9IHNvdXJjZS5s
aW5lTnVtYmVyOworICAgIHJldHVybiAnIENoZWNrIHlvdXIgY29kZSBhdCAnICsgZmlsZU5hbWUg
KyAnOicgKyBsaW5lTnVtYmVyICsgJy4nOworICB9CisgIHJldHVybiAnJzsKK30KKworLyoqCisg
KiBXYXJuIGlmIHRoZXJlJ3Mgbm8ga2V5IGV4cGxpY2l0bHkgc2V0IG9uIGR5bmFtaWMgYXJyYXlz
IG9mIGNoaWxkcmVuIG9yCisgKiBvYmplY3Qga2V5cyBhcmUgbm90IHZhbGlkLiBUaGlzIGFsbG93
cyB1cyB0byBrZWVwIHRyYWNrIG9mIGNoaWxkcmVuIGJldHdlZW4KKyAqIHVwZGF0ZXMuCisgKi8K
K3ZhciBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTsKKworZnVuY3Rpb24gZ2V0Q3VycmVudENv
bXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSB7CisgIHZhciBpbmZvID0gZ2V0RGVjbGFyYXRp
b25FcnJvckFkZGVuZHVtKCk7CisKKyAgaWYgKCFpbmZvKSB7CisgICAgdmFyIHBhcmVudE5hbWUg
PSB0eXBlb2YgcGFyZW50VHlwZSA9PT0gJ3N0cmluZycgPyBwYXJlbnRUeXBlIDogcGFyZW50VHlw
ZS5kaXNwbGF5TmFtZSB8fCBwYXJlbnRUeXBlLm5hbWU7CisgICAgaWYgKHBhcmVudE5hbWUpIHsK
KyAgICAgIGluZm8gPSAnIENoZWNrIHRoZSB0b3AtbGV2ZWwgcmVuZGVyIGNhbGwgdXNpbmcgPCcg
KyBwYXJlbnROYW1lICsgJz4uJzsKKyAgICB9CisgIH0KKyAgcmV0dXJuIGluZm87Cit9CisKKy8q
KgorICogV2FybiBpZiB0aGUgZWxlbWVudCBkb2Vzbid0IGhhdmUgYW4gZXhwbGljaXQga2V5IGFz
c2lnbmVkIHRvIGl0LgorICogVGhpcyBlbGVtZW50IGlzIGluIGFuIGFycmF5LiBUaGUgYXJyYXkg
Y291bGQgZ3JvdyBhbmQgc2hyaW5rIG9yIGJlCisgKiByZW9yZGVyZWQuIEFsbCBjaGlsZHJlbiB0
aGF0IGhhdmVuJ3QgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBhcmUgcmVxdWlyZWQgdG8KKyAqIGhh
dmUgYSAia2V5IiBwcm9wZXJ0eSBhc3NpZ25lZCB0byBpdC4gRXJyb3Igc3RhdHVzZXMgYXJlIGNh
Y2hlZCBzbyBhIHdhcm5pbmcKKyAqIHdpbGwgb25seSBiZSBzaG93biBvbmNlLgorICoKKyAqIEBp
bnRlcm5hbAorICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0aGF0IHJl
cXVpcmVzIGEga2V5LgorICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIGVsZW1lbnQncyBwYXJlbnQn
cyB0eXBlLgorICovCitmdW5jdGlvbiB2YWxpZGF0ZUV4cGxpY2l0S2V5KGVsZW1lbnQsIHBhcmVu
dFR5cGUpIHsKKyAgaWYgKCFlbGVtZW50Ll9zdG9yZSB8fCBlbGVtZW50Ll9zdG9yZS52YWxpZGF0
ZWQgfHwgZWxlbWVudC5rZXkgIT0gbnVsbCkgeworICAgIHJldHVybjsKKyAgfQorICBlbGVtZW50
Ll9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlOworCisgIHZhciBtZW1vaXplciA9IG93bmVySGFzS2V5
VXNlV2FybmluZy51bmlxdWVLZXkgfHwgKG93bmVySGFzS2V5VXNlV2FybmluZy51bmlxdWVLZXkg
PSB7fSk7CisKKyAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPSBnZXRDdXJyZW50Q29t
cG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpOworICBpZiAobWVtb2l6ZXJbY3VycmVudENvbXBv
bmVudEVycm9ySW5mb10pIHsKKyAgICByZXR1cm47CisgIH0KKyAgbWVtb2l6ZXJbY3VycmVudENv
bXBvbmVudEVycm9ySW5mb10gPSB0cnVlOworCisgIC8vIFVzdWFsbHkgdGhlIGN1cnJlbnQgb3du
ZXIgaXMgdGhlIG9mZmVuZGVyLCBidXQgaWYgaXQgYWNjZXB0cyBjaGlsZHJlbiBhcyBhCisgIC8v
IHByb3BlcnR5LCBpdCBtYXkgYmUgdGhlIGNyZWF0b3Igb2YgdGhlIGNoaWxkIHRoYXQncyByZXNw
b25zaWJsZSBmb3IKKyAgLy8gYXNzaWduaW5nIGl0IGEga2V5LgorICB2YXIgY2hpbGRPd25lciA9
ICcnOworICBpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9vd25lciAmJiBlbGVtZW50Ll9vd25lciAh
PT0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkgeworICAgIC8vIEdpdmUgdGhlIGNvbXBvbmVu
dCB0aGF0IG9yaWdpbmFsbHkgY3JlYXRlZCB0aGlzIGNoaWxkLgorICAgIGNoaWxkT3duZXIgPSAn
IEl0IHdhcyBwYXNzZWQgYSBjaGlsZCBmcm9tICcgKyBlbGVtZW50Ll9vd25lci5nZXROYW1lKCkg
KyAnLic7CisgIH0KKworICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5n
KGZhbHNlLCAnRWFjaCBjaGlsZCBpbiBhbiBhcnJheSBvciBpdGVyYXRvciBzaG91bGQgaGF2ZSBh
IHVuaXF1ZSAia2V5IiBwcm9wLicgKyAnJXMlcyBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJu
aW5nLWtleXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uJXMnLCBjdXJyZW50Q29tcG9uZW50RXJyb3JJ
bmZvLCBjaGlsZE93bmVyLCBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldEN1cnJlbnRTdGFja0Fk
ZGVuZHVtKGVsZW1lbnQpKSA6IHZvaWQgMDsKK30KKworLyoqCisgKiBFbnN1cmUgdGhhdCBldmVy
eSBlbGVtZW50IGVpdGhlciBpcyBwYXNzZWQgaW4gYSBzdGF0aWMgbG9jYXRpb24sIGluIGFuCisg
KiBhcnJheSB3aXRoIGFuIGV4cGxpY2l0IGtleXMgcHJvcGVydHkgZGVmaW5lZCwgb3IgaW4gYW4g
b2JqZWN0IGxpdGVyYWwKKyAqIHdpdGggdmFsaWQga2V5IHByb3BlcnR5LgorICoKKyAqIEBpbnRl
cm5hbAorICogQHBhcmFtIHtSZWFjdE5vZGV9IG5vZGUgU3RhdGljYWxseSBwYXNzZWQgY2hpbGQg
b2YgYW55IHR5cGUuCisgKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgbm9kZSdzIHBhcmVudCdzIHR5
cGUuCisgKi8KK2Z1bmN0aW9uIHZhbGlkYXRlQ2hpbGRLZXlzKG5vZGUsIHBhcmVudFR5cGUpIHsK
KyAgaWYgKHR5cGVvZiBub2RlICE9PSAnb2JqZWN0JykgeworICAgIHJldHVybjsKKyAgfQorICBp
ZiAoQXJyYXkuaXNBcnJheShub2RlKSkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5s
ZW5ndGg7IGkrKykgeworICAgICAgdmFyIGNoaWxkID0gbm9kZVtpXTsKKyAgICAgIGlmIChSZWFj
dEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7CisgICAgICAgIHZhbGlkYXRlRXhwbGlj
aXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpOworICAgICAgfQorICAgIH0KKyAgfSBlbHNlIGlmIChS
ZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQobm9kZSkpIHsKKyAgICAvLyBUaGlzIGVsZW1lbnQg
d2FzIHBhc3NlZCBpbiBhIHZhbGlkIGxvY2F0aW9uLgorICAgIGlmIChub2RlLl9zdG9yZSkgewor
ICAgICAgbm9kZS5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTsKKyAgICB9CisgIH0gZWxzZSBpZiAo
bm9kZSkgeworICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihub2RlKTsKKyAgICAv
LyBFbnRyeSBpdGVyYXRvcnMgcHJvdmlkZSBpbXBsaWNpdCBrZXlzLgorICAgIGlmIChpdGVyYXRv
ckZuKSB7CisgICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gbm9kZS5lbnRyaWVzKSB7CisgICAgICAg
IHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChub2RlKTsKKyAgICAgICAgdmFyIHN0ZXA7
CisgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHsKKyAgICAg
ICAgICBpZiAoUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KHN0ZXAudmFsdWUpKSB7CisgICAg
ICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KHN0ZXAudmFsdWUsIHBhcmVudFR5cGUpOworICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorfQorCisvKioKKyAqIEdp
dmVuIGFuIGVsZW1lbnQsIHZhbGlkYXRlIHRoYXQgaXRzIHByb3BzIGZvbGxvdyB0aGUgcHJvcFR5
cGVzIGRlZmluaXRpb24sCisgKiBwcm92aWRlZCBieSB0aGUgdHlwZS4KKyAqCisgKiBAcGFyYW0g
e1JlYWN0RWxlbWVudH0gZWxlbWVudAorICovCitmdW5jdGlvbiB2YWxpZGF0ZVByb3BUeXBlcyhl
bGVtZW50KSB7CisgIHZhciBjb21wb25lbnRDbGFzcyA9IGVsZW1lbnQudHlwZTsKKyAgaWYgKHR5
cGVvZiBjb21wb25lbnRDbGFzcyAhPT0gJ2Z1bmN0aW9uJykgeworICAgIHJldHVybjsKKyAgfQor
ICB2YXIgbmFtZSA9IGNvbXBvbmVudENsYXNzLmRpc3BsYXlOYW1lIHx8IGNvbXBvbmVudENsYXNz
Lm5hbWU7CisgIGlmIChjb21wb25lbnRDbGFzcy5wcm9wVHlwZXMpIHsKKyAgICBjaGVja1JlYWN0
VHlwZVNwZWMoY29tcG9uZW50Q2xhc3MucHJvcFR5cGVzLCBlbGVtZW50LnByb3BzLCAncHJvcCcs
IG5hbWUsIGVsZW1lbnQsIG51bGwpOworICB9CisgIGlmICh0eXBlb2YgY29tcG9uZW50Q2xhc3Mu
Z2V0RGVmYXVsdFByb3BzID09PSAnZnVuY3Rpb24nKSB7CisgICAgImRldmVsb3BtZW50IiAhPT0g
J3Byb2R1Y3Rpb24nID8gd2FybmluZyhjb21wb25lbnRDbGFzcy5nZXREZWZhdWx0UHJvcHMuaXNS
ZWFjdENsYXNzQXBwcm92ZWQsICdnZXREZWZhdWx0UHJvcHMgaXMgb25seSB1c2VkIG9uIGNsYXNz
aWMgUmVhY3QuY3JlYXRlQ2xhc3MgJyArICdkZWZpbml0aW9ucy4gVXNlIGEgc3RhdGljIHByb3Bl
cnR5IG5hbWVkIGBkZWZhdWx0UHJvcHNgIGluc3RlYWQuJykgOiB2b2lkIDA7CisgIH0KK30KKwor
dmFyIFJlYWN0RWxlbWVudFZhbGlkYXRvciA9IHsKKworICBjcmVhdGVFbGVtZW50OiBmdW5jdGlv
biAodHlwZSwgcHJvcHMsIGNoaWxkcmVuKSB7CisgICAgdmFyIHZhbGlkVHlwZSA9IHR5cGVvZiB0
eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJzsKKyAgICAvLyBX
ZSB3YXJuIGluIHRoaXMgY2FzZSBidXQgZG9uJ3QgdGhyb3cuIFdlIGV4cGVjdCB0aGUgZWxlbWVu
dCBjcmVhdGlvbiB0bworICAgIC8vIHN1Y2NlZWQgYW5kIHRoZXJlIHdpbGwgbGlrZWx5IGJlIGVy
cm9ycyBpbiByZW5kZXIuCisgICAgaWYgKCF2YWxpZFR5cGUpIHsKKyAgICAgIGlmICh0eXBlb2Yg
dHlwZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycpIHsKKyAgICAg
ICAgdmFyIGluZm8gPSAnJzsKKyAgICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBl
b2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyh0eXBl
KS5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICBpbmZvICs9ICcgWW91IGxpa2VseSBmb3Jnb3Qg
dG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgJyArICdpdFwncyBkZWZpbmVk
IGluLic7CisgICAgICAgIH0KKworICAgICAgICB2YXIgc291cmNlSW5mbyA9IGdldFNvdXJjZUlu
Zm9FcnJvckFkZGVuZHVtKHByb3BzKTsKKyAgICAgICAgaWYgKHNvdXJjZUluZm8pIHsKKyAgICAg
ICAgICBpbmZvICs9IHNvdXJjZUluZm87CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaW5m
byArPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKTsKKyAgICAgICAgfQorCisgICAgICAg
IGluZm8gKz0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRDdXJyZW50U3RhY2tBZGRlbmR1bSgp
OworCisgICAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFs
c2UsICdSZWFjdC5jcmVhdGVFbGVtZW50OiB0eXBlIGlzIGludmFsaWQgLS0gZXhwZWN0ZWQgYSBz
dHJpbmcgKGZvciAnICsgJ2J1aWx0LWluIGNvbXBvbmVudHMpIG9yIGEgY2xhc3MvZnVuY3Rpb24g
KGZvciBjb21wb3NpdGUgJyArICdjb21wb25lbnRzKSBidXQgZ290OiAlcy4lcycsIHR5cGUgPT0g
bnVsbCA/IHR5cGUgOiB0eXBlb2YgdHlwZSwgaW5mbykgOiB2b2lkIDA7CisgICAgICB9CisgICAg
fQorCisgICAgdmFyIGVsZW1lbnQgPSBSZWFjdEVsZW1lbnQuY3JlYXRlRWxlbWVudC5hcHBseSh0
aGlzLCBhcmd1bWVudHMpOworCisgICAgLy8gVGhlIHJlc3VsdCBjYW4gYmUgbnVsbGlzaCBpZiBh
IG1vY2sgb3IgYSBjdXN0b20gZnVuY3Rpb24gaXMgdXNlZC4KKyAgICAvLyBUT0RPOiBEcm9wIHRo
aXMgd2hlbiB0aGVzZSBhcmUgbm8gbG9uZ2VyIGFsbG93ZWQgYXMgdGhlIHR5cGUgYXJndW1lbnQu
CisgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkgeworICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAg
fQorCisgICAgLy8gU2tpcCBrZXkgd2FybmluZyBpZiB0aGUgdHlwZSBpc24ndCB2YWxpZCBzaW5j
ZSBvdXIga2V5IHZhbGlkYXRpb24gbG9naWMKKyAgICAvLyBkb2Vzbid0IGV4cGVjdCBhIG5vbi1z
dHJpbmcvZnVuY3Rpb24gdHlwZSBhbmQgY2FuIHRocm93IGNvbmZ1c2luZyBlcnJvcnMuCisgICAg
Ly8gV2UgZG9uJ3Qgd2FudCBleGNlcHRpb24gYmVoYXZpb3IgdG8gZGlmZmVyIGJldHdlZW4gZGV2
IGFuZCBwcm9kLgorICAgIC8vIChSZW5kZXJpbmcgd2lsbCB0aHJvdyB3aXRoIGEgaGVscGZ1bCBt
ZXNzYWdlIGFuZCBhcyBzb29uIGFzIHRoZSB0eXBlIGlzCisgICAgLy8gZml4ZWQsIHRoZSBrZXkg
d2FybmluZ3Mgd2lsbCBhcHBlYXIuKQorICAgIGlmICh2YWxpZFR5cGUpIHsKKyAgICAgIGZvciAo
dmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZhbGlkYXRl
Q2hpbGRLZXlzKGFyZ3VtZW50c1tpXSwgdHlwZSk7CisgICAgICB9CisgICAgfQorCisgICAgdmFs
aWRhdGVQcm9wVHlwZXMoZWxlbWVudCk7CisKKyAgICByZXR1cm4gZWxlbWVudDsKKyAgfSwKKwor
ICBjcmVhdGVGYWN0b3J5OiBmdW5jdGlvbiAodHlwZSkgeworICAgIHZhciB2YWxpZGF0ZWRGYWN0
b3J5ID0gUmVhY3RFbGVtZW50VmFsaWRhdG9yLmNyZWF0ZUVsZW1lbnQuYmluZChudWxsLCB0eXBl
KTsKKyAgICAvLyBMZWdhY3kgaG9vayBUT0RPOiBXYXJuIGlmIHRoaXMgaXMgYWNjZXNzZWQKKyAg
ICB2YWxpZGF0ZWRGYWN0b3J5LnR5cGUgPSB0eXBlOworCisgICAgaWYgKCJkZXZlbG9wbWVudCIg
IT09ICdwcm9kdWN0aW9uJykgeworICAgICAgaWYgKGNhbkRlZmluZVByb3BlcnR5KSB7CisgICAg
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YWxpZGF0ZWRGYWN0b3J5LCAndHlwZScsIHsKKyAg
ICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFs
c2UsICdGYWN0b3J5LnR5cGUgaXMgZGVwcmVjYXRlZC4gQWNjZXNzIHRoZSBjbGFzcyBkaXJlY3Rs
eSAnICsgJ2JlZm9yZSBwYXNzaW5nIGl0IHRvIGNyZWF0ZUZhY3RvcnkuJykgOiB2b2lkIDA7Cisg
ICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3R5cGUnLCB7CisgICAgICAg
ICAgICAgIHZhbHVlOiB0eXBlCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybiB0
eXBlOworICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIHZhbGlkYXRlZEZhY3Rvcnk7CisgIH0sCisKKyAgY2xvbmVFbGVtZW50OiBmdW5jdGlvbiAo
ZWxlbWVudCwgcHJvcHMsIGNoaWxkcmVuKSB7CisgICAgdmFyIG5ld0VsZW1lbnQgPSBSZWFjdEVs
ZW1lbnQuY2xvbmVFbGVtZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgZm9yICh2YXIg
aSA9IDI7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhbGlkYXRlQ2hpbGRL
ZXlzKGFyZ3VtZW50c1tpXSwgbmV3RWxlbWVudC50eXBlKTsKKyAgICB9CisgICAgdmFsaWRhdGVQ
cm9wVHlwZXMobmV3RWxlbWVudCk7CisgICAgcmV0dXJuIG5ld0VsZW1lbnQ7CisgIH0KKworfTsK
KworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3I7Cit9LHsiMTIiOjEyLCIx
NCI6MTQsIjE2IjoxNiwiMzMiOjMzLCIzNCI6MzQsIjM2IjozNiwiNDkiOjQ5fV0sMTk6W2Z1bmN0
aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxNS1wcmVz
ZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3Vu
ZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBz
b3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4g
YmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgor
ICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIF9wcm9kSW52YXJpYW50ID0gX2RlcmVxXygzOSk7
CisKK3ZhciBSZWFjdENoaWxkcmVuID0gX2RlcmVxXyg5KTsKK3ZhciBSZWFjdEVsZW1lbnQgPSBf
ZGVyZXFfKDE2KTsKKwordmFyIGVtcHR5RnVuY3Rpb24gPSBfZGVyZXFfKDQ1KTsKK3ZhciBpbnZh
cmlhbnQgPSBfZGVyZXFfKDQ3KTsKK3ZhciB3YXJuaW5nID0gX2RlcmVxXyg0OSk7CisKKy8qKgor
ICogV2UgdXNlZCB0byBhbGxvdyBrZXllZCBvYmplY3RzIHRvIHNlcnZlIGFzIGEgY29sbGVjdGlv
biBvZiBSZWFjdEVsZW1lbnRzLAorICogb3IgbmVzdGVkIHNldHMuIFRoaXMgYWxsb3dlZCB1cyBh
IHdheSB0byBleHBsaWNpdGx5IGtleSBhIHNldCBvciBmcmFnbWVudCBvZgorICogY29tcG9uZW50
cy4gVGhpcyBpcyBub3cgYmVpbmcgcmVwbGFjZWQgd2l0aCBhbiBvcGFxdWUgZGF0YSBzdHJ1Y3R1
cmUuCisgKiBUaGUgdXBncmFkZSBwYXRoIGlzIHRvIGNhbGwgUmVhY3QuYWRkb25zLmNyZWF0ZUZy
YWdtZW50KHsga2V5OiB2YWx1ZSB9KSB0bworICogY3JlYXRlIGEga2V5ZWQgZnJhZ21lbnQuIFRo
ZSByZXN1bHRpbmcgZGF0YSBzdHJ1Y3R1cmUgaXMgYW4gYXJyYXkuCisgKi8KKwordmFyIG51bWVy
aWNQcm9wZXJ0eVJlZ2V4ID0gL15cZCskLzsKKwordmFyIHdhcm5lZEFib3V0TnVtZXJpYyA9IGZh
bHNlOworCit2YXIgUmVhY3RGcmFnbWVudCA9IHsKKyAgLyoqCisgICAqIFdyYXAgYSBrZXllZCBv
YmplY3QgaW4gYW4gb3BhcXVlIHByb3h5IHRoYXQgd2FybnMgeW91IGlmIHlvdSBhY2Nlc3MgYW55
CisgICAqIG9mIGl0cyBwcm9wZXJ0aWVzLgorICAgKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRo
dWIuaW8vcmVhY3QvZG9jcy9jcmVhdGUtZnJhZ21lbnQuaHRtbAorICAgKi8KKyAgY3JlYXRlOiBm
dW5jdGlvbiAob2JqZWN0KSB7CisgICAgaWYgKHR5cGVvZiBvYmplY3QgIT09ICdvYmplY3QnIHx8
ICFvYmplY3QgfHwgQXJyYXkuaXNBcnJheShvYmplY3QpKSB7CisgICAgICAiZGV2ZWxvcG1lbnQi
ICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnUmVhY3QuYWRkb25zLmNyZWF0ZUZy
YWdtZW50IG9ubHkgYWNjZXB0cyBhIHNpbmdsZSBvYmplY3QuIEdvdDogJXMnLCBvYmplY3QpIDog
dm9pZCAwOworICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9CisgICAgaWYgKFJlYWN0RWxlbWVu
dC5pc1ZhbGlkRWxlbWVudChvYmplY3QpKSB7CisgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJv
ZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnUmVhY3QuYWRkb25zLmNyZWF0ZUZyYWdtZW50IGRv
ZXMgbm90IGFjY2VwdCBhIFJlYWN0RWxlbWVudCAnICsgJ3dpdGhvdXQgYSB3cmFwcGVyIG9iamVj
dC4nKSA6IHZvaWQgMDsKKyAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfQorCisgICAgIShvYmpl
Y3Qubm9kZVR5cGUgIT09IDEpID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52
YXJpYW50KGZhbHNlLCAnUmVhY3QuYWRkb25zLmNyZWF0ZUZyYWdtZW50KC4uLik6IEVuY291bnRl
cmVkIGFuIGludmFsaWQgY2hpbGQ7IERPTSBlbGVtZW50cyBhcmUgbm90IHZhbGlkIGNoaWxkcmVu
IG9mIFJlYWN0IGNvbXBvbmVudHMuJykgOiBfcHJvZEludmFyaWFudCgnMCcpIDogdm9pZCAwOwor
CisgICAgdmFyIHJlc3VsdCA9IFtdOworCisgICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkgewor
ICAgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgICAgICBpZiAo
IXdhcm5lZEFib3V0TnVtZXJpYyAmJiBudW1lcmljUHJvcGVydHlSZWdleC50ZXN0KGtleSkpIHsK
KyAgICAgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNl
LCAnUmVhY3QuYWRkb25zLmNyZWF0ZUZyYWdtZW50KC4uLik6IENoaWxkIG9iamVjdHMgc2hvdWxk
IGhhdmUgJyArICdub24tbnVtZXJpYyBrZXlzIHNvIG9yZGVyaW5nIGlzIHByZXNlcnZlZC4nKSA6
IHZvaWQgMDsKKyAgICAgICAgICB3YXJuZWRBYm91dE51bWVyaWMgPSB0cnVlOworICAgICAgICB9
CisgICAgICB9CisgICAgICBSZWFjdENoaWxkcmVuLm1hcEludG9XaXRoS2V5UHJlZml4SW50ZXJu
YWwob2JqZWN0W2tleV0sIHJlc3VsdCwga2V5LCBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zQXJn
dW1lbnQpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7CisgIH0KK307CisKK21vZHVsZS5l
eHBvcnRzID0gUmVhY3RGcmFnbWVudDsKK30seyIxNiI6MTYsIjM5IjozOSwiNDUiOjQ1LCI0NyI6
NDcsIjQ5Ijo0OSwiOSI6OX1dLDIwOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsK
Ky8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRl
ciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3Jh
bnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUg
aW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKKy8qKgor
ICogUmVhY3RMaW5rIGVuY2Fwc3VsYXRlcyBhIGNvbW1vbiBwYXR0ZXJuIGluIHdoaWNoIGEgY29t
cG9uZW50IHdhbnRzIHRvIG1vZGlmeQorICogYSBwcm9wIHJlY2VpdmVkIGZyb20gaXRzIHBhcmVu
dC4gUmVhY3RMaW5rIGFsbG93cyB0aGUgcGFyZW50IHRvIHBhc3MgZG93biBhCisgKiB2YWx1ZSBj
b3VwbGVkIHdpdGggYSBjYWxsYmFjayB0aGF0LCB3aGVuIGludm9rZWQsIGV4cHJlc3NlcyBhbiBp
bnRlbnQgdG8KKyAqIG1vZGlmeSB0aGF0IHZhbHVlLiBGb3IgZXhhbXBsZToKKyAqCisgKiBSZWFj
dC5jcmVhdGVDbGFzcyh7CisgKiAgIGdldEluaXRpYWxTdGF0ZTogZnVuY3Rpb24oKSB7CisgKiAg
ICAgcmV0dXJuIHt2YWx1ZTogJyd9OworICogICB9LAorICogICByZW5kZXI6IGZ1bmN0aW9uKCkg
eworICogICAgIHZhciB2YWx1ZUxpbmsgPSBuZXcgUmVhY3RMaW5rKHRoaXMuc3RhdGUudmFsdWUs
IHRoaXMuX2hhbmRsZVZhbHVlQ2hhbmdlKTsKKyAqICAgICByZXR1cm4gPGlucHV0IHZhbHVlTGlu
az17dmFsdWVMaW5rfSAvPjsKKyAqICAgfSwKKyAqICAgX2hhbmRsZVZhbHVlQ2hhbmdlOiBmdW5j
dGlvbihuZXdWYWx1ZSkgeworICogICAgIHRoaXMuc2V0U3RhdGUoe3ZhbHVlOiBuZXdWYWx1ZX0p
OworICogICB9CisgKiB9KTsKKyAqCisgKiBXZSBoYXZlIHByb3ZpZGVkIHNvbWUgc3VnYXJ5IG1p
eGlucyB0byBtYWtlIHRoZSBjcmVhdGlvbiBhbmQKKyAqIGNvbnN1bXB0aW9uIG9mIFJlYWN0TGlu
ayBlYXNpZXI7IHNlZSBMaW5rZWRWYWx1ZVV0aWxzIGFuZCBMaW5rZWRTdGF0ZU1peGluLgorICov
CisKK3ZhciBSZWFjdCA9IF9kZXJlcV8oNSk7CisKKy8qKgorICogRGVwcmVjYXRlZDogQW4gYW4g
ZWFzeSB3YXkgdG8gZXhwcmVzcyB0d28td2F5IGJpbmRpbmcgd2l0aCBSZWFjdC4gCisgKiBTZWUg
aHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90d28td2F5LWJpbmRpbmctaGVs
cGVycy5odG1sCisgKgorICogQHBhcmFtIHsqfSB2YWx1ZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBs
aW5rCisgKiBAcGFyYW0ge2Z1bmN0aW9ufSByZXF1ZXN0Q2hhbmdlIGNhbGxiYWNrIHRvIHJlcXVl
c3QgYSBjaGFuZ2UKKyAqLworZnVuY3Rpb24gUmVhY3RMaW5rKHZhbHVlLCByZXF1ZXN0Q2hhbmdl
KSB7CisgIHRoaXMudmFsdWUgPSB2YWx1ZTsKKyAgdGhpcy5yZXF1ZXN0Q2hhbmdlID0gcmVxdWVz
dENoYW5nZTsKK30KKworLyoqCisgKiBDcmVhdGVzIGEgUHJvcFR5cGUgdGhhdCBlbmZvcmNlcyB0
aGUgUmVhY3RMaW5rIEFQSSBhbmQgb3B0aW9uYWxseSBjaGVja3MgdGhlCisgKiB0eXBlIG9mIHRo
ZSB2YWx1ZSBiZWluZyBwYXNzZWQgaW5zaWRlIHRoZSBsaW5rLiBFeGFtcGxlOgorICoKKyAqIE15
Q29tcG9uZW50LnByb3BUeXBlcyA9IHsKKyAqICAgdGFiSW5kZXhMaW5rOiBSZWFjdExpbmsuUHJv
cFR5cGVzLmxpbmsoUmVhY3QuUHJvcFR5cGVzLm51bWJlcikKKyAqIH0KKyAqLworZnVuY3Rpb24g
Y3JlYXRlTGlua1R5cGVDaGVja2VyKGxpbmtUeXBlKSB7CisgIHZhciBzaGFwZXMgPSB7CisgICAg
dmFsdWU6IGxpbmtUeXBlID09PSB1bmRlZmluZWQgPyBSZWFjdC5Qcm9wVHlwZXMuYW55LmlzUmVx
dWlyZWQgOiBsaW5rVHlwZS5pc1JlcXVpcmVkLAorICAgIHJlcXVlc3RDaGFuZ2U6IFJlYWN0LlBy
b3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQKKyAgfTsKKyAgcmV0dXJuIFJlYWN0LlByb3BUeXBlcy5z
aGFwZShzaGFwZXMpOworfQorCitSZWFjdExpbmsuUHJvcFR5cGVzID0geworICBsaW5rOiBjcmVh
dGVMaW5rVHlwZUNoZWNrZXIKK307CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RMaW5rOworfSx7
IjUiOjV9XSwyMTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENv
cHlyaWdodCAyMDE1LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1z
dHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRp
cmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBw
YXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1l
IGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgd2FybmluZyA9IF9k
ZXJlcV8oNDkpOworCitmdW5jdGlvbiB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgY2FsbGVyTmFt
ZSkgeworICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgdmFyIGNv
bnN0cnVjdG9yID0gcHVibGljSW5zdGFuY2UuY29uc3RydWN0b3I7CisgICAgImRldmVsb3BtZW50
IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJyVzKC4uLik6IENhbiBvbmx5IHVw
ZGF0ZSBhIG1vdW50ZWQgb3IgbW91bnRpbmcgY29tcG9uZW50LiAnICsgJ1RoaXMgdXN1YWxseSBt
ZWFucyB5b3UgY2FsbGVkICVzKCkgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC4gJyArICdUaGlz
IGlzIGEgbm8tb3AuIFBsZWFzZSBjaGVjayB0aGUgY29kZSBmb3IgdGhlICVzIGNvbXBvbmVudC4n
LCBjYWxsZXJOYW1lLCBjYWxsZXJOYW1lLCBjb25zdHJ1Y3RvciAmJiAoY29uc3RydWN0b3IuZGlz
cGxheU5hbWUgfHwgY29uc3RydWN0b3IubmFtZSkgfHwgJ1JlYWN0Q2xhc3MnKSA6IHZvaWQgMDsK
KyAgfQorfQorCisvKioKKyAqIFRoaXMgaXMgdGhlIGFic3RyYWN0IEFQSSBmb3IgYW4gdXBkYXRl
IHF1ZXVlLgorICovCit2YXIgUmVhY3ROb29wVXBkYXRlUXVldWUgPSB7CisKKyAgLyoqCisgICAq
IENoZWNrcyB3aGV0aGVyIG9yIG5vdCB0aGlzIGNvbXBvc2l0ZSBjb21wb25lbnQgaXMgbW91bnRl
ZC4KKyAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2Ug
d2Ugd2FudCB0byB0ZXN0LgorICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIG1vdW50ZWQs
IGZhbHNlIG90aGVyd2lzZS4KKyAgICogQHByb3RlY3RlZAorICAgKiBAZmluYWwKKyAgICovCisg
IGlzTW91bnRlZDogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlKSB7CisgICAgcmV0dXJuIGZhbHNl
OworICB9LAorCisgIC8qKgorICAgKiBFbnF1ZXVlIGEgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGV4
ZWN1dGVkIGFmdGVyIGFsbCB0aGUgcGVuZGluZyB1cGRhdGVzCisgICAqIGhhdmUgcHJvY2Vzc2Vk
LgorICAgKgorICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0
YW5jZSB0byB1c2UgYXMgYHRoaXNgIGNvbnRleHQuCisgICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBj
YWxsYmFjayBDYWxsZWQgYWZ0ZXIgc3RhdGUgaXMgdXBkYXRlZC4KKyAgICogQGludGVybmFsCisg
ICAqLworICBlbnF1ZXVlQ2FsbGJhY2s6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgY2FsbGJh
Y2spIHt9LAorCisgIC8qKgorICAgKiBGb3JjZXMgYW4gdXBkYXRlLiBUaGlzIHNob3VsZCBvbmx5
IGJlIGludm9rZWQgd2hlbiBpdCBpcyBrbm93biB3aXRoCisgICAqIGNlcnRhaW50eSB0aGF0IHdl
IGFyZSAqKm5vdCoqIGluIGEgRE9NIHRyYW5zYWN0aW9uLgorICAgKgorICAgKiBZb3UgbWF5IHdh
bnQgdG8gY2FsbCB0aGlzIHdoZW4geW91IGtub3cgdGhhdCBzb21lIGRlZXBlciBhc3BlY3Qgb2Yg
dGhlCisgICAqIGNvbXBvbmVudCdzIHN0YXRlIGhhcyBjaGFuZ2VkIGJ1dCBgc2V0U3RhdGVgIHdh
cyBub3QgY2FsbGVkLgorICAgKgorICAgKiBUaGlzIHdpbGwgbm90IGludm9rZSBgc2hvdWxkQ29t
cG9uZW50VXBkYXRlYCwgYnV0IGl0IHdpbGwgaW52b2tlCisgICAqIGBjb21wb25lbnRXaWxsVXBk
YXRlYCBhbmQgYGNvbXBvbmVudERpZFVwZGF0ZWAuCisgICAqCisgICAqIEBwYXJhbSB7UmVhY3RD
bGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLgor
ICAgKiBAaW50ZXJuYWwKKyAgICovCisgIGVucXVldWVGb3JjZVVwZGF0ZTogZnVuY3Rpb24gKHB1
YmxpY0luc3RhbmNlKSB7CisgICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdmb3JjZVVwZGF0
ZScpOworICB9LAorCisgIC8qKgorICAgKiBSZXBsYWNlcyBhbGwgb2YgdGhlIHN0YXRlLiBBbHdh
eXMgdXNlIHRoaXMgb3IgYHNldFN0YXRlYCB0byBtdXRhdGUgc3RhdGUuCisgICAqIFlvdSBzaG91
bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS4KKyAgICoKKyAgICogVGhlcmUgaXMg
bm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVgIHdpbGwgYmUgaW1tZWRpYXRlbHkgdXBkYXRl
ZCwgc28KKyAgICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0
aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS4KKyAgICoKKyAgICogQHBhcmFtIHtSZWFjdENs
YXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuCisg
ICAqIEBwYXJhbSB7b2JqZWN0fSBjb21wbGV0ZVN0YXRlIE5leHQgc3RhdGUuCisgICAqIEBpbnRl
cm5hbAorICAgKi8KKyAgZW5xdWV1ZVJlcGxhY2VTdGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3Rh
bmNlLCBjb21wbGV0ZVN0YXRlKSB7CisgICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdyZXBs
YWNlU3RhdGUnKTsKKyAgfSwKKworICAvKioKKyAgICogU2V0cyBhIHN1YnNldCBvZiB0aGUgc3Rh
dGUuIFRoaXMgb25seSBleGlzdHMgYmVjYXVzZSBfcGVuZGluZ1N0YXRlIGlzCisgICAqIGludGVy
bmFsLiBUaGlzIHByb3ZpZGVzIGEgbWVyZ2luZyBzdHJhdGVneSB0aGF0IGlzIG5vdCBhdmFpbGFi
bGUgdG8gZGVlcAorICAgKiBwcm9wZXJ0aWVzIHdoaWNoIGlzIGNvbmZ1c2luZy4gVE9ETzogRXhw
b3NlIHBlbmRpbmdTdGF0ZSBvciBkb24ndCB1c2UgaXQKKyAgICogZHVyaW5nIHRoZSBtZXJnZS4K
KyAgICoKKyAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFu
Y2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuCisgICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJ0aWFsU3Rh
dGUgTmV4dCBwYXJ0aWFsIHN0YXRlIHRvIGJlIG1lcmdlZCB3aXRoIHN0YXRlLgorICAgKiBAaW50
ZXJuYWwKKyAgICovCisgIGVucXVldWVTZXRTdGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNl
LCBwYXJ0aWFsU3RhdGUpIHsKKyAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ3NldFN0YXRl
Jyk7CisgIH0KK307CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3ROb29wVXBkYXRlUXVldWU7Cit9
LHsiNDkiOjQ5fV0sMjI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisg
KiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBC
U0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICog
b2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUg
c2FtZSBkaXJlY3RvcnkuCisgKgorICogCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgUmVh
Y3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSB7fTsKKworaWYgKCJkZXZlbG9wbWVudCIgIT09ICdw
cm9kdWN0aW9uJykgeworICBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lcyA9IHsKKyAgICBwcm9w
OiAncHJvcCcsCisgICAgY29udGV4dDogJ2NvbnRleHQnLAorICAgIGNoaWxkQ29udGV4dDogJ2No
aWxkIGNvbnRleHQnCisgIH07Cit9CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZUxv
Y2F0aW9uTmFtZXM7Cit9LHt9XSwyMzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5k
ZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdy
YW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxl
IGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIg
X3JlcXVpcmUgPSBfZGVyZXFfKDE2KSwKKyAgICBpc1ZhbGlkRWxlbWVudCA9IF9yZXF1aXJlLmlz
VmFsaWRFbGVtZW50OworCit2YXIgZmFjdG9yeSA9IF9kZXJlcV8oNTIpOworCittb2R1bGUuZXhw
b3J0cyA9IGZhY3RvcnkoaXNWYWxpZEVsZW1lbnQpOworfSx7IjE2IjoxNiwiNTIiOjUyfV0sMjQ6
W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAx
My1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5z
ZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2Yg
dGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0
cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnku
CisgKgorICogCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgUmVhY3RQcm9wVHlwZXNTZWNy
ZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnOworCitt
b2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0OworfSx7fV0sMjU6W2Z1bmN0aW9u
KF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50
LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNv
dXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBp
biB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3Vy
Y2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUg
Zm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICov
CisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIF9hc3NpZ24gPSBfZGVyZXFfKDUwKTsKKwordmFyIFJl
YWN0Q29tcG9uZW50ID0gX2RlcmVxXygxMSk7Cit2YXIgUmVhY3ROb29wVXBkYXRlUXVldWUgPSBf
ZGVyZXFfKDIxKTsKKwordmFyIGVtcHR5T2JqZWN0ID0gX2RlcmVxXyg0Nik7CisKKy8qKgorICog
QmFzZSBjbGFzcyBoZWxwZXJzIGZvciB0aGUgdXBkYXRpbmcgc3RhdGUgb2YgYSBjb21wb25lbnQu
CisgKi8KK2Z1bmN0aW9uIFJlYWN0UHVyZUNvbXBvbmVudChwcm9wcywgY29udGV4dCwgdXBkYXRl
cikgeworICAvLyBEdXBsaWNhdGVkIGZyb20gUmVhY3RDb21wb25lbnQuCisgIHRoaXMucHJvcHMg
PSBwcm9wczsKKyAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsKKyAgdGhpcy5yZWZzID0gZW1wdHlP
YmplY3Q7CisgIC8vIFdlIGluaXRpYWxpemUgdGhlIGRlZmF1bHQgdXBkYXRlciBidXQgdGhlIHJl
YWwgb25lIGdldHMgaW5qZWN0ZWQgYnkgdGhlCisgIC8vIHJlbmRlcmVyLgorICB0aGlzLnVwZGF0
ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlOworfQorCitmdW5jdGlvbiBDb21w
b25lbnREdW1teSgpIHt9CitDb21wb25lbnREdW1teS5wcm90b3R5cGUgPSBSZWFjdENvbXBvbmVu
dC5wcm90b3R5cGU7CitSZWFjdFB1cmVDb21wb25lbnQucHJvdG90eXBlID0gbmV3IENvbXBvbmVu
dER1bW15KCk7CitSZWFjdFB1cmVDb21wb25lbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVh
Y3RQdXJlQ29tcG9uZW50OworLy8gQXZvaWQgYW4gZXh0cmEgcHJvdG90eXBlIGp1bXAgZm9yIHRo
ZXNlIG1ldGhvZHMuCitfYXNzaWduKFJlYWN0UHVyZUNvbXBvbmVudC5wcm90b3R5cGUsIFJlYWN0
Q29tcG9uZW50LnByb3RvdHlwZSk7CitSZWFjdFB1cmVDb21wb25lbnQucHJvdG90eXBlLmlzUHVy
ZVJlYWN0Q29tcG9uZW50ID0gdHJ1ZTsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdFB1cmVDb21w
b25lbnQ7Cit9LHsiMTEiOjExLCIyMSI6MjEsIjQ2Ijo0NiwiNTAiOjUwfV0sMjY6W2Z1bmN0aW9u
KF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50
LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNv
dXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBp
biB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3Vy
Y2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUg
Zm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICov
CisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIFJlYWN0U3RhdGVTZXR0ZXJzID0geworICAvKioKKyAg
ICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgY2FsbHMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uLCBh
bmQgdXNlcyB0aGUgcmVzdWx0CisgICAqIG9mIHRoYXQgdG8gc2V0IHRoZSBjb21wb25lbnQncyBz
dGF0ZS4KKyAgICoKKyAgICogQHBhcmFtIHtSZWFjdENvbXBvc2l0ZUNvbXBvbmVudH0gY29tcG9u
ZW50CisgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZ1bmNSZXR1cm5pbmdTdGF0ZSBSZXR1cm5lZCBj
YWxsYmFjayB1c2VzIHRoaXMgdG8KKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRldGVybWluZSBob3cgdG8gdXBkYXRlIHN0YXRlLgorICAgKiBAcmV0dXJuIHtmdW5j
dGlvbn0gY2FsbGJhY2sgdGhhdCB3aGVuIGludm9rZWQgdXNlcyBmdW5jUmV0dXJuaW5nU3RhdGUg
dG8KKyAgICogICAgICAgICAgICAgICAgICAgIGRldGVybWluZWQgdGhlIG9iamVjdCBsaXRlcmFs
IHRvIHNldFN0YXRlLgorICAgKi8KKyAgY3JlYXRlU3RhdGVTZXR0ZXI6IGZ1bmN0aW9uIChjb21w
b25lbnQsIGZ1bmNSZXR1cm5pbmdTdGF0ZSkgeworICAgIHJldHVybiBmdW5jdGlvbiAoYSwgYiwg
YywgZCwgZSwgZikgeworICAgICAgdmFyIHBhcnRpYWxTdGF0ZSA9IGZ1bmNSZXR1cm5pbmdTdGF0
ZS5jYWxsKGNvbXBvbmVudCwgYSwgYiwgYywgZCwgZSwgZik7CisgICAgICBpZiAocGFydGlhbFN0
YXRlKSB7CisgICAgICAgIGNvbXBvbmVudC5zZXRTdGF0ZShwYXJ0aWFsU3RhdGUpOworICAgICAg
fQorICAgIH07CisgIH0sCisKKyAgLyoqCisgICAqIFJldHVybnMgYSBzaW5nbGUtYXJndW1lbnQg
Y2FsbGJhY2sgdGhhdCBjYW4gYmUgdXNlZCB0byB1cGRhdGUgYSBzaW5nbGUKKyAgICoga2V5IGlu
IHRoZSBjb21wb25lbnQncyBzdGF0ZS4KKyAgICoKKyAgICogTm90ZTogdGhpcyBpcyBtZW1vaXpl
ZCBmdW5jdGlvbiwgd2hpY2ggbWFrZXMgaXQgaW5leHBlbnNpdmUgdG8gY2FsbC4KKyAgICoKKyAg
ICogQHBhcmFtIHtSZWFjdENvbXBvc2l0ZUNvbXBvbmVudH0gY29tcG9uZW50CisgICAqIEBwYXJh
bSB7c3RyaW5nfSBrZXkgVGhlIGtleSBpbiB0aGUgc3RhdGUgdGhhdCB5b3Ugc2hvdWxkIHVwZGF0
ZS4KKyAgICogQHJldHVybiB7ZnVuY3Rpb259IGNhbGxiYWNrIG9mIDEgYXJndW1lbnQgd2hpY2gg
Y2FsbHMgc2V0U3RhdGUoKSB3aXRoCisgICAqICAgICAgICAgICAgICAgICAgICB0aGUgcHJvdmlk
ZWQga2V5TmFtZSBhbmQgY2FsbGJhY2sgYXJndW1lbnQuCisgICAqLworICBjcmVhdGVTdGF0ZUtl
eVNldHRlcjogZnVuY3Rpb24gKGNvbXBvbmVudCwga2V5KSB7CisgICAgLy8gTWVtb2l6ZSB0aGUg
c2V0dGVycy4KKyAgICB2YXIgY2FjaGUgPSBjb21wb25lbnQuX19rZXlTZXR0ZXJzIHx8IChjb21w
b25lbnQuX19rZXlTZXR0ZXJzID0ge30pOworICAgIHJldHVybiBjYWNoZVtrZXldIHx8IChjYWNo
ZVtrZXldID0gY3JlYXRlU3RhdGVLZXlTZXR0ZXIoY29tcG9uZW50LCBrZXkpKTsKKyAgfQorfTsK
KworZnVuY3Rpb24gY3JlYXRlU3RhdGVLZXlTZXR0ZXIoY29tcG9uZW50LCBrZXkpIHsKKyAgLy8g
UGFydGlhbCBzdGF0ZSBpcyBhbGxvY2F0ZWQgb3V0c2lkZSBvZiB0aGUgZnVuY3Rpb24gY2xvc3Vy
ZSBzbyBpdCBjYW4gYmUKKyAgLy8gcmV1c2VkIHdpdGggZXZlcnkgY2FsbCwgYXZvaWRpbmcgbWVt
b3J5IGFsbG9jYXRpb24gd2hlbiB0aGlzIGZ1bmN0aW9uCisgIC8vIGlzIGNhbGxlZC4KKyAgdmFy
IHBhcnRpYWxTdGF0ZSA9IHt9OworICByZXR1cm4gZnVuY3Rpb24gc3RhdGVLZXlTZXR0ZXIodmFs
dWUpIHsKKyAgICBwYXJ0aWFsU3RhdGVba2V5XSA9IHZhbHVlOworICAgIGNvbXBvbmVudC5zZXRT
dGF0ZShwYXJ0aWFsU3RhdGUpOworICB9OworfQorCitSZWFjdFN0YXRlU2V0dGVycy5NaXhpbiA9
IHsKKyAgLyoqCisgICAqIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSBwcm92aWRl
ZCBmdW5jdGlvbiwgYW5kIHVzZXMgdGhlIHJlc3VsdAorICAgKiBvZiB0aGF0IHRvIHNldCB0aGUg
Y29tcG9uZW50J3Mgc3RhdGUuCisgICAqCisgICAqIEZvciBleGFtcGxlLCB0aGVzZSBzdGF0ZW1l
bnRzIGFyZSBlcXVpdmFsZW50OgorICAgKgorICAgKiAgIHRoaXMuc2V0U3RhdGUoe3g6IDF9KTsK
KyAgICogICB0aGlzLmNyZWF0ZVN0YXRlU2V0dGVyKGZ1bmN0aW9uKHhWYWx1ZSkgeworICAgKiAg
ICAgcmV0dXJuIHt4OiB4VmFsdWV9OworICAgKiAgIH0pKDEpOworICAgKgorICAgKiBAcGFyYW0g
e2Z1bmN0aW9ufSBmdW5jUmV0dXJuaW5nU3RhdGUgUmV0dXJuZWQgY2FsbGJhY2sgdXNlcyB0aGlz
IHRvCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmUg
aG93IHRvIHVwZGF0ZSBzdGF0ZS4KKyAgICogQHJldHVybiB7ZnVuY3Rpb259IGNhbGxiYWNrIHRo
YXQgd2hlbiBpbnZva2VkIHVzZXMgZnVuY1JldHVybmluZ1N0YXRlIHRvCisgICAqICAgICAgICAg
ICAgICAgICAgICBkZXRlcm1pbmVkIHRoZSBvYmplY3QgbGl0ZXJhbCB0byBzZXRTdGF0ZS4KKyAg
ICovCisgIGNyZWF0ZVN0YXRlU2V0dGVyOiBmdW5jdGlvbiAoZnVuY1JldHVybmluZ1N0YXRlKSB7
CisgICAgcmV0dXJuIFJlYWN0U3RhdGVTZXR0ZXJzLmNyZWF0ZVN0YXRlU2V0dGVyKHRoaXMsIGZ1
bmNSZXR1cm5pbmdTdGF0ZSk7CisgIH0sCisKKyAgLyoqCisgICAqIFJldHVybnMgYSBzaW5nbGUt
YXJndW1lbnQgY2FsbGJhY2sgdGhhdCBjYW4gYmUgdXNlZCB0byB1cGRhdGUgYSBzaW5nbGUKKyAg
ICoga2V5IGluIHRoZSBjb21wb25lbnQncyBzdGF0ZS4KKyAgICoKKyAgICogRm9yIGV4YW1wbGUs
IHRoZXNlIHN0YXRlbWVudHMgYXJlIGVxdWl2YWxlbnQ6CisgICAqCisgICAqICAgdGhpcy5zZXRT
dGF0ZSh7eDogMX0pOworICAgKiAgIHRoaXMuY3JlYXRlU3RhdGVLZXlTZXR0ZXIoJ3gnKSgxKTsK
KyAgICoKKyAgICogTm90ZTogdGhpcyBpcyBtZW1vaXplZCBmdW5jdGlvbiwgd2hpY2ggbWFrZXMg
aXQgaW5leHBlbnNpdmUgdG8gY2FsbC4KKyAgICoKKyAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBU
aGUga2V5IGluIHRoZSBzdGF0ZSB0aGF0IHlvdSBzaG91bGQgdXBkYXRlLgorICAgKiBAcmV0dXJu
IHtmdW5jdGlvbn0gY2FsbGJhY2sgb2YgMSBhcmd1bWVudCB3aGljaCBjYWxscyBzZXRTdGF0ZSgp
IHdpdGgKKyAgICogICAgICAgICAgICAgICAgICAgIHRoZSBwcm92aWRlZCBrZXlOYW1lIGFuZCBj
YWxsYmFjayBhcmd1bWVudC4KKyAgICovCisgIGNyZWF0ZVN0YXRlS2V5U2V0dGVyOiBmdW5jdGlv
biAoa2V5KSB7CisgICAgcmV0dXJuIFJlYWN0U3RhdGVTZXR0ZXJzLmNyZWF0ZVN0YXRlS2V5U2V0
dGVyKHRoaXMsIGtleSk7CisgIH0KK307CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RTdGF0ZVNl
dHRlcnM7Cit9LHt9XSwyNzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioK
KyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhl
IEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50Cisg
KiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRo
ZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgZmxhdHRl
bkNoaWxkcmVuID0gX2RlcmVxXygzNSk7CisKK3ZhciBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBp
bmcgPSB7CisgIC8qKgorICAgKiBHaXZlbiBgdGhpcy5wcm9wcy5jaGlsZHJlbmAsIHJldHVybiBh
biBvYmplY3QgbWFwcGluZyBrZXkgdG8gY2hpbGQuIEp1c3QKKyAgICogc2ltcGxlIHN5bnRhY3Rp
YyBzdWdhciBhcm91bmQgZmxhdHRlbkNoaWxkcmVuKCkuCisgICAqCisgICAqIEBwYXJhbSB7Kn0g
Y2hpbGRyZW4gYHRoaXMucHJvcHMuY2hpbGRyZW5gCisgICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vs
ZkRlYnVnSUQgT3B0aW9uYWwgZGVidWdJRCBvZiB0aGUgY3VycmVudCBpbnRlcm5hbCBpbnN0YW5j
ZS4KKyAgICogQHJldHVybiB7b2JqZWN0fSBNYXBwaW5nIG9mIGtleSB0byBjaGlsZAorICAgKi8K
KyAgZ2V0Q2hpbGRNYXBwaW5nOiBmdW5jdGlvbiAoY2hpbGRyZW4sIHNlbGZEZWJ1Z0lEKSB7Cisg
ICAgaWYgKCFjaGlsZHJlbikgeworICAgICAgcmV0dXJuIGNoaWxkcmVuOworICAgIH0KKworICAg
IGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAgIHJldHVybiBmbGF0
dGVuQ2hpbGRyZW4oY2hpbGRyZW4sIHNlbGZEZWJ1Z0lEKTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZmxhdHRlbkNoaWxkcmVuKGNoaWxkcmVuKTsKKyAgfSwKKworICAvKioKKyAgICogV2hlbiB5b3Un
cmUgYWRkaW5nIG9yIHJlbW92aW5nIGNoaWxkcmVuIHNvbWUgbWF5IGJlIGFkZGVkIG9yIHJlbW92
ZWQgaW4gdGhlCisgICAqIHNhbWUgcmVuZGVyIHBhc3MuIFdlIHdhbnQgdG8gc2hvdyAqYm90aCog
c2luY2Ugd2Ugd2FudCB0byBzaW11bHRhbmVvdXNseQorICAgKiBhbmltYXRlIGVsZW1lbnRzIGlu
IGFuZCBvdXQuIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBwcmV2aW91cyBzZXQgb2Yga2V5cworICAg
KiBhbmQgYSBuZXcgc2V0IG9mIGtleXMgYW5kIG1lcmdlcyB0aGVtIHdpdGggaXRzIGJlc3QgZ3Vl
c3Mgb2YgdGhlIGNvcnJlY3QKKyAgICogb3JkZXJpbmcuIEluIHRoZSBmdXR1cmUgd2UgbWF5IGV4
cG9zZSBzb21lIG9mIHRoZSB1dGlsaXRpZXMgaW4KKyAgICogUmVhY3RNdWx0aUNoaWxkIHRvIG1h
a2UgdGhpcyBlYXN5LCBidXQgZm9yIG5vdyBSZWFjdCBpdHNlbGYgZG9lcyBub3QKKyAgICogZGly
ZWN0bHkgaGF2ZSB0aGlzIGNvbmNlcHQgb2YgdGhlIHVuaW9uIG9mIHByZXZDaGlsZHJlbiBhbmQg
bmV4dENoaWxkcmVuCisgICAqIHNvIHdlIGltcGxlbWVudCBpdCBoZXJlLgorICAgKgorICAgKiBA
cGFyYW0ge29iamVjdH0gcHJldiBwcmV2IGNoaWxkcmVuIGFzIHJldHVybmVkIGZyb20KKyAgICog
YFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1hcHBpbmcoKWAuCisgICAqIEBw
YXJhbSB7b2JqZWN0fSBuZXh0IG5leHQgY2hpbGRyZW4gYXMgcmV0dXJuZWQgZnJvbQorICAgKiBg
UmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nLmdldENoaWxkTWFwcGluZygpYC4KKyAgICogQHJl
dHVybiB7b2JqZWN0fSBhIGtleSBzZXQgdGhhdCBjb250YWlucyBhbGwga2V5cyBpbiBgcHJldmAg
YW5kIGFsbCBrZXlzCisgICAqIGluIGBuZXh0YCBpbiBhIHJlYXNvbmFibGUgb3JkZXIuCisgICAq
LworICBtZXJnZUNoaWxkTWFwcGluZ3M6IGZ1bmN0aW9uIChwcmV2LCBuZXh0KSB7CisgICAgcHJl
diA9IHByZXYgfHwge307CisgICAgbmV4dCA9IG5leHQgfHwge307CisKKyAgICBmdW5jdGlvbiBn
ZXRWYWx1ZUZvcktleShrZXkpIHsKKyAgICAgIGlmIChuZXh0Lmhhc093blByb3BlcnR5KGtleSkp
IHsKKyAgICAgICAgcmV0dXJuIG5leHRba2V5XTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJl
dHVybiBwcmV2W2tleV07CisgICAgICB9CisgICAgfQorCisgICAgLy8gRm9yIGVhY2gga2V5IG9m
IGBuZXh0YCwgdGhlIGxpc3Qgb2Yga2V5cyB0byBpbnNlcnQgYmVmb3JlIHRoYXQga2V5IGluCisg
ICAgLy8gdGhlIGNvbWJpbmVkIGxpc3QKKyAgICB2YXIgbmV4dEtleXNQZW5kaW5nID0ge307CisK
KyAgICB2YXIgcGVuZGluZ0tleXMgPSBbXTsKKyAgICBmb3IgKHZhciBwcmV2S2V5IGluIHByZXYp
IHsKKyAgICAgIGlmIChuZXh0Lmhhc093blByb3BlcnR5KHByZXZLZXkpKSB7CisgICAgICAgIGlm
IChwZW5kaW5nS2V5cy5sZW5ndGgpIHsKKyAgICAgICAgICBuZXh0S2V5c1BlbmRpbmdbcHJldktl
eV0gPSBwZW5kaW5nS2V5czsKKyAgICAgICAgICBwZW5kaW5nS2V5cyA9IFtdOworICAgICAgICB9
CisgICAgICB9IGVsc2UgeworICAgICAgICBwZW5kaW5nS2V5cy5wdXNoKHByZXZLZXkpOworICAg
ICAgfQorICAgIH0KKworICAgIHZhciBpOworICAgIHZhciBjaGlsZE1hcHBpbmcgPSB7fTsKKyAg
ICBmb3IgKHZhciBuZXh0S2V5IGluIG5leHQpIHsKKyAgICAgIGlmIChuZXh0S2V5c1BlbmRpbmcu
aGFzT3duUHJvcGVydHkobmV4dEtleSkpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5leHRL
ZXlzUGVuZGluZ1tuZXh0S2V5XS5sZW5ndGg7IGkrKykgeworICAgICAgICAgIHZhciBwZW5kaW5n
TmV4dEtleSA9IG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XVtpXTsKKyAgICAgICAgICBjaGlsZE1h
cHBpbmdbbmV4dEtleXNQZW5kaW5nW25leHRLZXldW2ldXSA9IGdldFZhbHVlRm9yS2V5KHBlbmRp
bmdOZXh0S2V5KTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgY2hpbGRNYXBwaW5nW25leHRL
ZXldID0gZ2V0VmFsdWVGb3JLZXkobmV4dEtleSk7CisgICAgfQorCisgICAgLy8gRmluYWxseSwg
YWRkIHRoZSBrZXlzIHdoaWNoIGRpZG4ndCBhcHBlYXIgYmVmb3JlIGFueSBrZXkgaW4gYG5leHRg
CisgICAgZm9yIChpID0gMDsgaSA8IHBlbmRpbmdLZXlzLmxlbmd0aDsgaSsrKSB7CisgICAgICBj
aGlsZE1hcHBpbmdbcGVuZGluZ0tleXNbaV1dID0gZ2V0VmFsdWVGb3JLZXkocGVuZGluZ0tleXNb
aV0pOworICAgIH0KKworICAgIHJldHVybiBjaGlsZE1hcHBpbmc7CisgIH0KK307CisKK21vZHVs
ZS5leHBvcnRzID0gUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nOworfSx7IjM1IjozNX1dLDI4
OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIw
MTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vu
c2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9m
IHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdo
dHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5
LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9
IF9kZXJlcV8oNDQpOworCit2YXIgZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUgPSBfZGVyZXFf
KDEpOworCit2YXIgZW5kRXZlbnRzID0gW107CisKK2Z1bmN0aW9uIGRldGVjdEV2ZW50cygpIHsK
KyAgdmFyIGFuaW1FbmQgPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgnYW5pbWF0aW9uZW5k
Jyk7CisgIHZhciB0cmFuc0VuZCA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCd0cmFuc2l0
aW9uZW5kJyk7CisKKyAgaWYgKGFuaW1FbmQpIHsKKyAgICBlbmRFdmVudHMucHVzaChhbmltRW5k
KTsKKyAgfQorCisgIGlmICh0cmFuc0VuZCkgeworICAgIGVuZEV2ZW50cy5wdXNoKHRyYW5zRW5k
KTsKKyAgfQorfQorCitpZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NKSB7CisgIGRl
dGVjdEV2ZW50cygpOworfQorCisvLyBXZSB1c2UgdGhlIHJhdyB7YWRkfHJlbW92ZX1FdmVudExp
c3RlbmVyKCkgY2FsbCBiZWNhdXNlIEV2ZW50TGlzdGVuZXIKKy8vIGRvZXMgbm90IGtub3cgaG93
IHRvIHJlbW92ZSBldmVudCBsaXN0ZW5lcnMgYW5kIHdlIHJlYWxseSBzaG91bGQKKy8vIGNsZWFu
IHVwLiBBbHNvLCB0aGVzZSBldmVudHMgYXJlIG5vdCB0cmlnZ2VyZWQgaW4gb2xkZXIgYnJvd3Nl
cnMKKy8vIHNvIHdlIHNob3VsZCBiZSBBLU9LIGhlcmUuCisKK2Z1bmN0aW9uIGFkZEV2ZW50TGlz
dGVuZXIobm9kZSwgZXZlbnROYW1lLCBldmVudExpc3RlbmVyKSB7CisgIG5vZGUuYWRkRXZlbnRM
aXN0ZW5lcihldmVudE5hbWUsIGV2ZW50TGlzdGVuZXIsIGZhbHNlKTsKK30KKworZnVuY3Rpb24g
cmVtb3ZlRXZlbnRMaXN0ZW5lcihub2RlLCBldmVudE5hbWUsIGV2ZW50TGlzdGVuZXIpIHsKKyAg
bm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZXZlbnRMaXN0ZW5lciwgZmFsc2Up
OworfQorCit2YXIgUmVhY3RUcmFuc2l0aW9uRXZlbnRzID0geworICBhZGRFbmRFdmVudExpc3Rl
bmVyOiBmdW5jdGlvbiAobm9kZSwgZXZlbnRMaXN0ZW5lcikgeworICAgIGlmIChlbmRFdmVudHMu
bGVuZ3RoID09PSAwKSB7CisgICAgICAvLyBJZiBDU1MgdHJhbnNpdGlvbnMgYXJlIG5vdCBzdXBw
b3J0ZWQsIHRyaWdnZXIgYW4gImVuZCBhbmltYXRpb24iCisgICAgICAvLyBldmVudCBpbW1lZGlh
dGVseS4KKyAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGV2ZW50TGlzdGVuZXIsIDApOworICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBlbmRFdmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZW5kRXZlbnQp
IHsKKyAgICAgIGFkZEV2ZW50TGlzdGVuZXIobm9kZSwgZW5kRXZlbnQsIGV2ZW50TGlzdGVuZXIp
OworICAgIH0pOworICB9LAorCisgIHJlbW92ZUVuZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIChu
b2RlLCBldmVudExpc3RlbmVyKSB7CisgICAgaWYgKGVuZEV2ZW50cy5sZW5ndGggPT09IDApIHsK
KyAgICAgIHJldHVybjsKKyAgICB9CisgICAgZW5kRXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGVu
ZEV2ZW50KSB7CisgICAgICByZW1vdmVFdmVudExpc3RlbmVyKG5vZGUsIGVuZEV2ZW50LCBldmVu
dExpc3RlbmVyKTsKKyAgICB9KTsKKyAgfQorfTsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdFRy
YW5zaXRpb25FdmVudHM7Cit9LHsiMSI6MSwiNDQiOjQ0fV0sMjk6W2Z1bmN0aW9uKF9kZXJlcV8s
bW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9v
aywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2Rl
IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAq
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4g
QW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4g
dGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ug
c3RyaWN0JzsKKwordmFyIF9hc3NpZ24gPSBfZGVyZXFfKDUwKTsKKworZnVuY3Rpb24gX2NsYXNz
Q2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5j
ZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNs
YXNzIGFzIGEgZnVuY3Rpb24iKTsgfSB9CisKK2Z1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9y
UmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJv
cigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2Fs
bGVkIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSAib2JqZWN0IiB8fCB0eXBl
b2YgY2FsbCA9PT0gImZ1bmN0aW9uIikgPyBjYWxsIDogc2VsZjsgfQorCitmdW5jdGlvbiBfaW5o
ZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAi
ZnVuY3Rpb24iICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigi
U3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAi
ICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVh
dGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2
YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmln
dXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2Yg
PyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3Mu
X19wcm90b19fID0gc3VwZXJDbGFzczsgfQorCit2YXIgUmVhY3QgPSBfZGVyZXFfKDUpOwordmFy
IFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZyA9IF9kZXJlcV8oMjcpOworCit2YXIgcHJvcFR5
cGVzRmFjdG9yeSA9IF9kZXJlcV8oNTIpOwordmFyIFByb3BUeXBlcyA9IHByb3BUeXBlc0ZhY3Rv
cnkoUmVhY3QuaXNWYWxpZEVsZW1lbnQpOworCit2YXIgZW1wdHlGdW5jdGlvbiA9IF9kZXJlcV8o
NDUpOworCisvKioKKyAqIEEgYmFzaXMgZm9yIGFuaW1hdGlvbnMuIFdoZW4gY2hpbGRyZW4gYXJl
IGRlY2xhcmF0aXZlbHkgYWRkZWQgb3IgcmVtb3ZlZCwKKyAqIHNwZWNpYWwgbGlmZWN5Y2xlIGhv
b2tzIGFyZSBjYWxsZWQuCisgKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3Qv
ZG9jcy9hbmltYXRpb24uaHRtbCNsb3ctbGV2ZWwtYXBpLXJlYWN0dHJhbnNpdGlvbmdyb3VwCisg
Ki8KKwordmFyIFJlYWN0VHJhbnNpdGlvbkdyb3VwID0gZnVuY3Rpb24gKF9SZWFjdCRDb21wb25l
bnQpIHsKKyAgX2luaGVyaXRzKFJlYWN0VHJhbnNpdGlvbkdyb3VwLCBfUmVhY3QkQ29tcG9uZW50
KTsKKworICBmdW5jdGlvbiBSZWFjdFRyYW5zaXRpb25Hcm91cCgpIHsKKyAgICB2YXIgX3RlbXAs
IF90aGlzLCBfcmV0OworCisgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJlYWN0VHJhbnNpdGlv
bkdyb3VwKTsKKworICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0g
QXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7CisgICAgICBhcmdz
W19rZXldID0gYXJndW1lbnRzW19rZXldOworICAgIH0KKworICAgIHJldHVybiBfcmV0ID0gKF90
ZW1wID0gKF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX1JlYWN0JENv
bXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykp
KSwgX3RoaXMpLCBfdGhpcy5zdGF0ZSA9IHsKKyAgICAgIC8vIFRPRE86IGNhbiB3ZSBnZXQgdXNl
ZnVsIGRlYnVnIGluZm9ybWF0aW9uIHRvIHNob3cgYXQgdGhpcyBwb2ludD8KKyAgICAgIGNoaWxk
cmVuOiBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKF90aGlzLnBy
b3BzLmNoaWxkcmVuKQorICAgIH0sIF90aGlzLnBlcmZvcm1BcHBlYXIgPSBmdW5jdGlvbiAoa2V5
KSB7CisgICAgICBfdGhpcy5jdXJyZW50bHlUcmFuc2l0aW9uaW5nS2V5c1trZXldID0gdHJ1ZTsK
KworICAgICAgdmFyIGNvbXBvbmVudCA9IF90aGlzLnJlZnNba2V5XTsKKworICAgICAgaWYgKGNv
bXBvbmVudC5jb21wb25lbnRXaWxsQXBwZWFyKSB7CisgICAgICAgIGNvbXBvbmVudC5jb21wb25l
bnRXaWxsQXBwZWFyKF90aGlzLl9oYW5kbGVEb25lQXBwZWFyaW5nLmJpbmQoX3RoaXMsIGtleSkp
OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgX3RoaXMuX2hhbmRsZURvbmVBcHBlYXJpbmcoa2V5
KTsKKyAgICAgIH0KKyAgICB9LCBfdGhpcy5faGFuZGxlRG9uZUFwcGVhcmluZyA9IGZ1bmN0aW9u
IChrZXkpIHsKKyAgICAgIHZhciBjb21wb25lbnQgPSBfdGhpcy5yZWZzW2tleV07CisgICAgICBp
ZiAoY29tcG9uZW50LmNvbXBvbmVudERpZEFwcGVhcikgeworICAgICAgICBjb21wb25lbnQuY29t
cG9uZW50RGlkQXBwZWFyKCk7CisgICAgICB9CisKKyAgICAgIGRlbGV0ZSBfdGhpcy5jdXJyZW50
bHlUcmFuc2l0aW9uaW5nS2V5c1trZXldOworCisgICAgICB2YXIgY3VycmVudENoaWxkTWFwcGlu
ZyA9IFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1hcHBpbmcoX3RoaXMucHJv
cHMuY2hpbGRyZW4pOworCisgICAgICBpZiAoIWN1cnJlbnRDaGlsZE1hcHBpbmcgfHwgIWN1cnJl
bnRDaGlsZE1hcHBpbmcuaGFzT3duUHJvcGVydHkoa2V5KSkgeworICAgICAgICAvLyBUaGlzIHdh
cyByZW1vdmVkIGJlZm9yZSBpdCBoYWQgZnVsbHkgYXBwZWFyZWQuIFJlbW92ZSBpdC4KKyAgICAg
ICAgX3RoaXMucGVyZm9ybUxlYXZlKGtleSk7CisgICAgICB9CisgICAgfSwgX3RoaXMucGVyZm9y
bUVudGVyID0gZnVuY3Rpb24gKGtleSkgeworICAgICAgX3RoaXMuY3VycmVudGx5VHJhbnNpdGlv
bmluZ0tleXNba2V5XSA9IHRydWU7CisKKyAgICAgIHZhciBjb21wb25lbnQgPSBfdGhpcy5yZWZz
W2tleV07CisKKyAgICAgIGlmIChjb21wb25lbnQuY29tcG9uZW50V2lsbEVudGVyKSB7CisgICAg
ICAgIGNvbXBvbmVudC5jb21wb25lbnRXaWxsRW50ZXIoX3RoaXMuX2hhbmRsZURvbmVFbnRlcmlu
Zy5iaW5kKF90aGlzLCBrZXkpKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIF90aGlzLl9oYW5k
bGVEb25lRW50ZXJpbmcoa2V5KTsKKyAgICAgIH0KKyAgICB9LCBfdGhpcy5faGFuZGxlRG9uZUVu
dGVyaW5nID0gZnVuY3Rpb24gKGtleSkgeworICAgICAgdmFyIGNvbXBvbmVudCA9IF90aGlzLnJl
ZnNba2V5XTsKKyAgICAgIGlmIChjb21wb25lbnQuY29tcG9uZW50RGlkRW50ZXIpIHsKKyAgICAg
ICAgY29tcG9uZW50LmNvbXBvbmVudERpZEVudGVyKCk7CisgICAgICB9CisKKyAgICAgIGRlbGV0
ZSBfdGhpcy5jdXJyZW50bHlUcmFuc2l0aW9uaW5nS2V5c1trZXldOworCisgICAgICB2YXIgY3Vy
cmVudENoaWxkTWFwcGluZyA9IFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1h
cHBpbmcoX3RoaXMucHJvcHMuY2hpbGRyZW4pOworCisgICAgICBpZiAoIWN1cnJlbnRDaGlsZE1h
cHBpbmcgfHwgIWN1cnJlbnRDaGlsZE1hcHBpbmcuaGFzT3duUHJvcGVydHkoa2V5KSkgeworICAg
ICAgICAvLyBUaGlzIHdhcyByZW1vdmVkIGJlZm9yZSBpdCBoYWQgZnVsbHkgZW50ZXJlZC4gUmVt
b3ZlIGl0LgorICAgICAgICBfdGhpcy5wZXJmb3JtTGVhdmUoa2V5KTsKKyAgICAgIH0KKyAgICB9
LCBfdGhpcy5wZXJmb3JtTGVhdmUgPSBmdW5jdGlvbiAoa2V5KSB7CisgICAgICBfdGhpcy5jdXJy
ZW50bHlUcmFuc2l0aW9uaW5nS2V5c1trZXldID0gdHJ1ZTsKKworICAgICAgdmFyIGNvbXBvbmVu
dCA9IF90aGlzLnJlZnNba2V5XTsKKyAgICAgIGlmIChjb21wb25lbnQuY29tcG9uZW50V2lsbExl
YXZlKSB7CisgICAgICAgIGNvbXBvbmVudC5jb21wb25lbnRXaWxsTGVhdmUoX3RoaXMuX2hhbmRs
ZURvbmVMZWF2aW5nLmJpbmQoX3RoaXMsIGtleSkpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gTm90ZSB0aGF0IHRoaXMgaXMgc29tZXdoYXQgZGFuZ2Vyb3VzIGIvYyBpdCBjYWxscyBzZXRT
dGF0ZSgpCisgICAgICAgIC8vIGFnYWluLCBlZmZlY3RpdmVseSBtdXRhdGluZyB0aGUgY29tcG9u
ZW50IGJlZm9yZSBhbGwgdGhlIHdvcmsKKyAgICAgICAgLy8gaXMgZG9uZS4KKyAgICAgICAgX3Ro
aXMuX2hhbmRsZURvbmVMZWF2aW5nKGtleSk7CisgICAgICB9CisgICAgfSwgX3RoaXMuX2hhbmRs
ZURvbmVMZWF2aW5nID0gZnVuY3Rpb24gKGtleSkgeworICAgICAgdmFyIGNvbXBvbmVudCA9IF90
aGlzLnJlZnNba2V5XTsKKworICAgICAgaWYgKGNvbXBvbmVudC5jb21wb25lbnREaWRMZWF2ZSkg
eworICAgICAgICBjb21wb25lbnQuY29tcG9uZW50RGlkTGVhdmUoKTsKKyAgICAgIH0KKworICAg
ICAgZGVsZXRlIF90aGlzLmN1cnJlbnRseVRyYW5zaXRpb25pbmdLZXlzW2tleV07CisKKyAgICAg
IHZhciBjdXJyZW50Q2hpbGRNYXBwaW5nID0gUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nLmdl
dENoaWxkTWFwcGluZyhfdGhpcy5wcm9wcy5jaGlsZHJlbik7CisKKyAgICAgIGlmIChjdXJyZW50
Q2hpbGRNYXBwaW5nICYmIGN1cnJlbnRDaGlsZE1hcHBpbmcuaGFzT3duUHJvcGVydHkoa2V5KSkg
eworICAgICAgICAvLyBUaGlzIGVudGVyZWQgYWdhaW4gYmVmb3JlIGl0IGZ1bGx5IGxlZnQuIEFk
ZCBpdCBhZ2Fpbi4KKyAgICAgICAgX3RoaXMucGVyZm9ybUVudGVyKGtleSk7CisgICAgICB9IGVs
c2UgeworICAgICAgICBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoc3RhdGUpIHsKKyAgICAgICAg
ICB2YXIgbmV3Q2hpbGRyZW4gPSBfYXNzaWduKHt9LCBzdGF0ZS5jaGlsZHJlbik7CisgICAgICAg
ICAgZGVsZXRlIG5ld0NoaWxkcmVuW2tleV07CisgICAgICAgICAgcmV0dXJuIHsgY2hpbGRyZW46
IG5ld0NoaWxkcmVuIH07CisgICAgICAgIH0pOworICAgICAgfQorICAgIH0sIF90ZW1wKSwgX3Bv
c3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9yZXQpOworICB9CisKKyAgUmVhY3RUcmFu
c2l0aW9uR3JvdXAucHJvdG90eXBlLmNvbXBvbmVudFdpbGxNb3VudCA9IGZ1bmN0aW9uIGNvbXBv
bmVudFdpbGxNb3VudCgpIHsKKyAgICB0aGlzLmN1cnJlbnRseVRyYW5zaXRpb25pbmdLZXlzID0g
e307CisgICAgdGhpcy5rZXlzVG9FbnRlciA9IFtdOworICAgIHRoaXMua2V5c1RvTGVhdmUgPSBb
XTsKKyAgfTsKKworICBSZWFjdFRyYW5zaXRpb25Hcm91cC5wcm90b3R5cGUuY29tcG9uZW50RGlk
TW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHsKKyAgICB2YXIgaW5pdGlhbENo
aWxkTWFwcGluZyA9IHRoaXMuc3RhdGUuY2hpbGRyZW47CisgICAgZm9yICh2YXIga2V5IGluIGlu
aXRpYWxDaGlsZE1hcHBpbmcpIHsKKyAgICAgIGlmIChpbml0aWFsQ2hpbGRNYXBwaW5nW2tleV0p
IHsKKyAgICAgICAgdGhpcy5wZXJmb3JtQXBwZWFyKGtleSk7CisgICAgICB9CisgICAgfQorICB9
OworCisgIFJlYWN0VHJhbnNpdGlvbkdyb3VwLnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2
ZVByb3BzID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHsK
KyAgICB2YXIgbmV4dENoaWxkTWFwcGluZyA9IFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5n
ZXRDaGlsZE1hcHBpbmcobmV4dFByb3BzLmNoaWxkcmVuKTsKKyAgICB2YXIgcHJldkNoaWxkTWFw
cGluZyA9IHRoaXMuc3RhdGUuY2hpbGRyZW47CisKKyAgICB0aGlzLnNldFN0YXRlKHsKKyAgICAg
IGNoaWxkcmVuOiBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcubWVyZ2VDaGlsZE1hcHBpbmdz
KHByZXZDaGlsZE1hcHBpbmcsIG5leHRDaGlsZE1hcHBpbmcpCisgICAgfSk7CisKKyAgICB2YXIg
a2V5OworCisgICAgZm9yIChrZXkgaW4gbmV4dENoaWxkTWFwcGluZykgeworICAgICAgdmFyIGhh
c1ByZXYgPSBwcmV2Q2hpbGRNYXBwaW5nICYmIHByZXZDaGlsZE1hcHBpbmcuaGFzT3duUHJvcGVy
dHkoa2V5KTsKKyAgICAgIGlmIChuZXh0Q2hpbGRNYXBwaW5nW2tleV0gJiYgIWhhc1ByZXYgJiYg
IXRoaXMuY3VycmVudGx5VHJhbnNpdGlvbmluZ0tleXNba2V5XSkgeworICAgICAgICB0aGlzLmtl
eXNUb0VudGVyLnB1c2goa2V5KTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGtleSBpbiBw
cmV2Q2hpbGRNYXBwaW5nKSB7CisgICAgICB2YXIgaGFzTmV4dCA9IG5leHRDaGlsZE1hcHBpbmcg
JiYgbmV4dENoaWxkTWFwcGluZy5oYXNPd25Qcm9wZXJ0eShrZXkpOworICAgICAgaWYgKHByZXZD
aGlsZE1hcHBpbmdba2V5XSAmJiAhaGFzTmV4dCAmJiAhdGhpcy5jdXJyZW50bHlUcmFuc2l0aW9u
aW5nS2V5c1trZXldKSB7CisgICAgICAgIHRoaXMua2V5c1RvTGVhdmUucHVzaChrZXkpOworICAg
ICAgfQorICAgIH0KKworICAgIC8vIElmIHdlIHdhbnQgdG8gc29tZWRheSBjaGVjayBmb3IgcmVv
cmRlcmluZywgd2UgY291bGQgZG8gaXQgaGVyZS4KKyAgfTsKKworICBSZWFjdFRyYW5zaXRpb25H
cm91cC5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlk
VXBkYXRlKCkgeworICAgIHZhciBrZXlzVG9FbnRlciA9IHRoaXMua2V5c1RvRW50ZXI7CisgICAg
dGhpcy5rZXlzVG9FbnRlciA9IFtdOworICAgIGtleXNUb0VudGVyLmZvckVhY2godGhpcy5wZXJm
b3JtRW50ZXIpOworCisgICAgdmFyIGtleXNUb0xlYXZlID0gdGhpcy5rZXlzVG9MZWF2ZTsKKyAg
ICB0aGlzLmtleXNUb0xlYXZlID0gW107CisgICAga2V5c1RvTGVhdmUuZm9yRWFjaCh0aGlzLnBl
cmZvcm1MZWF2ZSk7CisgIH07CisKKyAgUmVhY3RUcmFuc2l0aW9uR3JvdXAucHJvdG90eXBlLnJl
bmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHsKKyAgICAvLyBUT0RPOiB3ZSBjb3VsZCBnZXQgcmlk
IG9mIHRoZSBuZWVkIGZvciB0aGUgd3JhcHBlciBub2RlCisgICAgLy8gYnkgY2xvbmluZyBhIHNp
bmdsZSBjaGlsZAorICAgIHZhciBjaGlsZHJlblRvUmVuZGVyID0gW107CisgICAgZm9yICh2YXIg
a2V5IGluIHRoaXMuc3RhdGUuY2hpbGRyZW4pIHsKKyAgICAgIHZhciBjaGlsZCA9IHRoaXMuc3Rh
dGUuY2hpbGRyZW5ba2V5XTsKKyAgICAgIGlmIChjaGlsZCkgeworICAgICAgICAvLyBZb3UgbWF5
IG5lZWQgdG8gYXBwbHkgcmVhY3RpdmUgdXBkYXRlcyB0byBhIGNoaWxkIGFzIGl0IGlzIGxlYXZp
bmcuCisgICAgICAgIC8vIFRoZSBub3JtYWwgUmVhY3Qgd2F5IHRvIGRvIGl0IHdvbid0IHdvcmsg
c2luY2UgdGhlIGNoaWxkIHdpbGwgaGF2ZQorICAgICAgICAvLyBhbHJlYWR5IGJlZW4gcmVtb3Zl
ZC4gSW4gY2FzZSB5b3UgbmVlZCB0aGlzIGJlaGF2aW9yIHlvdSBjYW4gcHJvdmlkZQorICAgICAg
ICAvLyBhIGNoaWxkRmFjdG9yeSBmdW5jdGlvbiB0byB3cmFwIGV2ZXJ5IGNoaWxkLCBldmVuIHRo
ZSBvbmVzIHRoYXQgYXJlCisgICAgICAgIC8vIGxlYXZpbmcuCisgICAgICAgIGNoaWxkcmVuVG9S
ZW5kZXIucHVzaChSZWFjdC5jbG9uZUVsZW1lbnQodGhpcy5wcm9wcy5jaGlsZEZhY3RvcnkoY2hp
bGQpLCB7IHJlZjoga2V5LCBrZXk6IGtleSB9KSk7CisgICAgICB9CisgICAgfQorCisgICAgLy8g
RG8gbm90IGZvcndhcmQgUmVhY3RUcmFuc2l0aW9uR3JvdXAgcHJvcHMgdG8gcHJpbWl0aXZlIERP
TSBub2RlcworICAgIHZhciBwcm9wcyA9IF9hc3NpZ24oe30sIHRoaXMucHJvcHMpOworICAgIGRl
bGV0ZSBwcm9wcy50cmFuc2l0aW9uTGVhdmU7CisgICAgZGVsZXRlIHByb3BzLnRyYW5zaXRpb25O
YW1lOworICAgIGRlbGV0ZSBwcm9wcy50cmFuc2l0aW9uQXBwZWFyOworICAgIGRlbGV0ZSBwcm9w
cy50cmFuc2l0aW9uRW50ZXI7CisgICAgZGVsZXRlIHByb3BzLmNoaWxkRmFjdG9yeTsKKyAgICBk
ZWxldGUgcHJvcHMudHJhbnNpdGlvbkxlYXZlVGltZW91dDsKKyAgICBkZWxldGUgcHJvcHMudHJh
bnNpdGlvbkVudGVyVGltZW91dDsKKyAgICBkZWxldGUgcHJvcHMudHJhbnNpdGlvbkFwcGVhclRp
bWVvdXQ7CisgICAgZGVsZXRlIHByb3BzLmNvbXBvbmVudDsKKworICAgIHJldHVybiBSZWFjdC5j
cmVhdGVFbGVtZW50KHRoaXMucHJvcHMuY29tcG9uZW50LCBwcm9wcywgY2hpbGRyZW5Ub1JlbmRl
cik7CisgIH07CisKKyAgcmV0dXJuIFJlYWN0VHJhbnNpdGlvbkdyb3VwOworfShSZWFjdC5Db21w
b25lbnQpOworCitSZWFjdFRyYW5zaXRpb25Hcm91cC5kaXNwbGF5TmFtZSA9ICdSZWFjdFRyYW5z
aXRpb25Hcm91cCc7CitSZWFjdFRyYW5zaXRpb25Hcm91cC5wcm9wVHlwZXMgPSB7CisgIGNvbXBv
bmVudDogUHJvcFR5cGVzLmFueSwKKyAgY2hpbGRGYWN0b3J5OiBQcm9wVHlwZXMuZnVuYworfTsK
K1JlYWN0VHJhbnNpdGlvbkdyb3VwLmRlZmF1bHRQcm9wcyA9IHsKKyAgY29tcG9uZW50OiAnc3Bh
bicsCisgIGNoaWxkRmFjdG9yeTogZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc0FyZ3VtZW50Cit9
OworCisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RUcmFuc2l0aW9uR3JvdXA7Cit9LHsiMjciOjI3
LCI0NSI6NDUsIjUiOjUsIjUwIjo1MCwiNTIiOjUyfV0sMzA6W2Z1bmN0aW9uKF9kZXJlcV8sbW9k
dWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywg
SW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlz
IGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4g
YWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhl
IFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3Ry
aWN0JzsKKworbW9kdWxlLmV4cG9ydHMgPSAnMTUuNS40JzsKK30se31dLDMxOltmdW5jdGlvbihf
ZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwg
RmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3Vy
Y2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4g
dGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNl
IHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZv
dW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLwor
CisndXNlIHN0cmljdCc7CisKK3ZhciBMaW5rZWRTdGF0ZU1peGluID0gX2RlcmVxXygzKTsKK3Zh
ciBSZWFjdCA9IF9kZXJlcV8oNSk7Cit2YXIgUmVhY3RBZGRvbnNET01EZXBlbmRlbmNpZXMgPSBf
ZGVyZXFfKDYpOwordmFyIFJlYWN0Q29tcG9uZW50V2l0aFB1cmVSZW5kZXJNaXhpbiA9IF9kZXJl
cV8oMTMpOwordmFyIFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwID0gX2RlcmVxXyg3KTsKK3ZhciBS
ZWFjdEZyYWdtZW50ID0gX2RlcmVxXygxOSk7Cit2YXIgUmVhY3RUcmFuc2l0aW9uR3JvdXAgPSBf
ZGVyZXFfKDI5KTsKKwordmFyIHNoYWxsb3dDb21wYXJlID0gX2RlcmVxXyg0MCk7Cit2YXIgdXBk
YXRlID0gX2RlcmVxXyg0Mik7CisKK1JlYWN0LmFkZG9ucyA9IHsKKyAgQ1NTVHJhbnNpdGlvbkdy
b3VwOiBSZWFjdENTU1RyYW5zaXRpb25Hcm91cCwKKyAgTGlua2VkU3RhdGVNaXhpbjogTGlua2Vk
U3RhdGVNaXhpbiwKKyAgUHVyZVJlbmRlck1peGluOiBSZWFjdENvbXBvbmVudFdpdGhQdXJlUmVu
ZGVyTWl4aW4sCisgIFRyYW5zaXRpb25Hcm91cDogUmVhY3RUcmFuc2l0aW9uR3JvdXAsCisKKyAg
Y3JlYXRlRnJhZ21lbnQ6IFJlYWN0RnJhZ21lbnQuY3JlYXRlLAorICBzaGFsbG93Q29tcGFyZTog
c2hhbGxvd0NvbXBhcmUsCisgIHVwZGF0ZTogdXBkYXRlCit9OworCitpZiAoImRldmVsb3BtZW50
IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgIC8vIEZvciB0aGUgVU1EIGJ1aWxkIHdlIGdldCB0aGVz
ZSBsYXppbHkgZnJvbSB0aGUgZ2xvYmFsIHNpbmNlIHRoZXkncmUgdGllZAorICAvLyB0byB0aGUg
RE9NIHJlbmRlcmVyIGFuZCBpdCBoYXNuJ3QgbG9hZGVkIHlldC4KKyAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KFJlYWN0LmFkZG9ucywgJ1BlcmYnLCB7CisgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiBSZWFjdEFkZG9uc0RPTURlcGVuZGVu
Y2llcy5nZXRSZWFjdFBlcmYoKTsKKyAgICB9CisgIH0pOworICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoUmVhY3QuYWRkb25zLCAnVGVzdFV0aWxzJywgeworICAgIGVudW1lcmFibGU6IHRydWUsCisg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gUmVhY3RBZGRvbnNET01EZXBlbmRl
bmNpZXMuZ2V0UmVhY3RUZXN0VXRpbHMoKTsKKyAgICB9CisgIH0pOworfQorCittb2R1bGUuZXhw
b3J0cyA9IFJlYWN0OworfSx7IjEzIjoxMywiMTkiOjE5LCIyOSI6MjksIjMiOjMsIjQwIjo0MCwi
NDIiOjQyLCI1Ijo1LCI2Ijo2LCI3Ijo3fV0sMzI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4
cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vu
c2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0Ug
ZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRp
b25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVO
VFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsK
KwordmFyIF9hc3NpZ24gPSBfZGVyZXFfKDUwKTsKKwordmFyIFJlYWN0V2l0aEFkZG9ucyA9IF9k
ZXJlcV8oMzEpOworCisvLyBgdmVyc2lvbmAgd2lsbCBiZSBhZGRlZCBoZXJlIGJ5IHRoZSBSZWFj
dCBtb2R1bGUuCit2YXIgUmVhY3RXaXRoQWRkb25zVU1ERW50cnkgPSBfYXNzaWduKFJlYWN0V2l0
aEFkZG9ucywgeworICBfX1NFQ1JFVF9JTkpFQ1RFRF9SRUFDVF9ET01fRE9fTk9UX1VTRV9PUl9Z
T1VfV0lMTF9CRV9GSVJFRDogbnVsbCwgLy8gV2lsbCBiZSBpbmplY3RlZCBieSBSZWFjdERPTSBV
TUQgYnVpbGQuCisgIF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JF
X0ZJUkVEOiB7CisgICAgUmVhY3RDdXJyZW50T3duZXI6IF9kZXJlcV8oMTQpCisgIH0KK30pOwor
CitpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgIF9hc3NpZ24oUmVhY3RX
aXRoQWRkb25zVU1ERW50cnkuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJ
TExfQkVfRklSRUQsIHsKKyAgICAvLyBSZWFjdENvbXBvbmVudFRyZWVIb29rIHNob3VsZCBub3Qg
YmUgaW5jbHVkZWQgaW4gcHJvZHVjdGlvbi4KKyAgICBSZWFjdENvbXBvbmVudFRyZWVIb29rOiBf
ZGVyZXFfKDEyKSwKKyAgICBnZXROZXh0RGVidWdJRDogX2RlcmVxXygzNykKKyAgfSk7Cit9CisK
K21vZHVsZS5leHBvcnRzID0gUmVhY3RXaXRoQWRkb25zVU1ERW50cnk7Cit9LHsiMTIiOjEyLCIx
NCI6MTQsIjMxIjozMSwiMzciOjM3LCI1MCI6NTB9XSwzMzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1
bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJ
bmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMg
bGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElD
RU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBh
ZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUg
UEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKiAKKyAqLworCisndXNl
IHN0cmljdCc7CisKK3ZhciBjYW5EZWZpbmVQcm9wZXJ0eSA9IGZhbHNlOworaWYgKCJkZXZlbG9w
bWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICB0cnkgeworICAgIC8vICRGbG93Rml4TWUgaHR0
cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzI4NQorICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eSh7fSwgJ3gnLCB7IGdldDogZnVuY3Rpb24gKCkge30gfSk7CisgICAgY2FuRGVm
aW5lUHJvcGVydHkgPSB0cnVlOworICB9IGNhdGNoICh4KSB7CisgICAgLy8gSUUgd2lsbCBmYWls
IG9uIGRlZmluZVByb3BlcnR5CisgIH0KK30KKworbW9kdWxlLmV4cG9ydHMgPSBjYW5EZWZpbmVQ
cm9wZXJ0eTsKK30se31dLDM0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKyhm
dW5jdGlvbiAocHJvY2Vzcyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vi
b29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNv
ZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQor
ICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVl
LiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBp
biB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3Vz
ZSBzdHJpY3QnOworCit2YXIgX3Byb2RJbnZhcmlhbnQgPSBfZGVyZXFfKDM5KTsKKwordmFyIFJl
YWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzID0gX2RlcmVxXygyMik7Cit2YXIgUmVhY3RQcm9wVHlw
ZXNTZWNyZXQgPSBfZGVyZXFfKDI0KTsKKwordmFyIGludmFyaWFudCA9IF9kZXJlcV8oNDcpOwor
dmFyIHdhcm5pbmcgPSBfZGVyZXFfKDQ5KTsKKwordmFyIFJlYWN0Q29tcG9uZW50VHJlZUhvb2s7
CisKK2lmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy5lbnYgJiYg
ImRldmVsb3BtZW50IiA9PT0gJ3Rlc3QnKSB7CisgIC8vIFRlbXBvcmFyeSBoYWNrLgorICAvLyBJ
bmxpbmUgcmVxdWlyZXMgZG9uJ3Qgd29yayB3ZWxsIHdpdGggSmVzdDoKKyAgLy8gaHR0cHM6Ly9n
aXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy83MjQwCisgIC8vIFJlbW92ZSB0aGUgaW5s
aW5lIHJlcXVpcmVzIHdoZW4gd2UgZG9uJ3QgbmVlZCB0aGVtIGFueW1vcmU6CisgIC8vIGh0dHBz
Oi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzcxNzgKKyAgUmVhY3RDb21wb25lbnRU
cmVlSG9vayA9IF9kZXJlcV8oMTIpOworfQorCit2YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307
CisKKy8qKgorICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRjaCB3aXRoIHRoZSB0eXBlIHNw
ZWNzLgorICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNo
b3duIG9uY2UuCisgKgorICogQHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgbmFtZSB0
byBhIFJlYWN0UHJvcFR5cGUKKyAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1
ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZAorICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0
aW9uIGUuZy4gInByb3AiLCAiY29udGV4dCIsICJjaGlsZCBjb250ZXh0IgorICogQHBhcmFtIHtz
dHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUgY29tcG9uZW50IGZvciBlcnJvciBtZXNz
YWdlcy4KKyAqIEBwYXJhbSB7P29iamVjdH0gZWxlbWVudCBUaGUgUmVhY3QgZWxlbWVudCB0aGF0
IGlzIGJlaW5nIHR5cGUtY2hlY2tlZAorICogQHBhcmFtIHs/bnVtYmVyfSBkZWJ1Z0lEIFRoZSBS
ZWFjdCBjb21wb25lbnQgaW5zdGFuY2UgdGhhdCBpcyBiZWluZyB0eXBlLWNoZWNrZWQKKyAqIEBw
cml2YXRlCisgKi8KK2Z1bmN0aW9uIGNoZWNrUmVhY3RUeXBlU3BlYyh0eXBlU3BlY3MsIHZhbHVl
cywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGVsZW1lbnQsIGRlYnVnSUQpIHsKKyAgZm9yICh2
YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykgeworICAgIGlmICh0eXBlU3BlY3MuaGFzT3du
UHJvcGVydHkodHlwZVNwZWNOYW1lKSkgeworICAgICAgdmFyIGVycm9yOworICAgICAgLy8gUHJv
cCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdh
bnQgdG8KKyAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFp
bCBiZWZvcmUuIFNvIHdlIGxvZyBpdC4KKyAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBj
bGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy4KKyAgICAgIHRyeSB7CisgICAgICAgIC8v
IFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQn
cyB0aGUgc2FtZQorICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50
IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuCisgICAgICAgICEodHlwZW9mIHR5cGVTcGVj
c1t0eXBlU3BlY05hbWVdID09PSAnZnVuY3Rpb24nKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9k
dWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJyVzOiAlcyB0eXBlIGAlc2AgaXMgaW52YWxpZDsg
aXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gUmVhY3QuUHJvcFR5cGVzLicsIGNv
bXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNb
bG9jYXRpb25dLCB0eXBlU3BlY05hbWUpIDogX3Byb2RJbnZhcmlhbnQoJzg0JywgY29tcG9uZW50
TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlv
bl0sIHR5cGVTcGVjTmFtZSkgOiB2b2lkIDA7CisgICAgICAgIGVycm9yID0gdHlwZVNwZWNzW3R5
cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9u
LCBudWxsLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7CisgICAgICB9IGNhdGNoIChleCkgeworICAg
ICAgICBlcnJvciA9IGV4OworICAgICAgfQorICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1
Y3Rpb24nID8gd2FybmluZyghZXJyb3IgfHwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciwgJyVzOiB0
eXBlIHNwZWNpZmljYXRpb24gb2YgJXMgYCVzYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2Vy
ICcgKyAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVy
bmVkIGEgJXMuICcgKyAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50
IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBv
YmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgKyAnc2hhcGUgYWxsIHJlcXVpcmUgYW4g
YXJndW1lbnQpLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgUmVhY3RQcm9wVHlw
ZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dLCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvcikgOiB2
b2lkIDA7CisgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3Nh
Z2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkgeworICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhp
cyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGUKKyAg
ICAgICAgLy8gc2FtZSBlcnJvci4KKyAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1l
c3NhZ2VdID0gdHJ1ZTsKKworICAgICAgICB2YXIgY29tcG9uZW50U3RhY2tJbmZvID0gJyc7CisK
KyAgICAgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgICAgICAg
IGlmICghUmVhY3RDb21wb25lbnRUcmVlSG9vaykgeworICAgICAgICAgICAgUmVhY3RDb21wb25l
bnRUcmVlSG9vayA9IF9kZXJlcV8oMTIpOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoZGVi
dWdJRCAhPT0gbnVsbCkgeworICAgICAgICAgICAgY29tcG9uZW50U3RhY2tJbmZvID0gUmVhY3RD
b21wb25lbnRUcmVlSG9vay5nZXRTdGFja0FkZGVuZHVtQnlJRChkZWJ1Z0lEKTsKKyAgICAgICAg
ICB9IGVsc2UgaWYgKGVsZW1lbnQgIT09IG51bGwpIHsKKyAgICAgICAgICAgIGNvbXBvbmVudFN0
YWNrSW5mbyA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0Q3VycmVudFN0YWNrQWRkZW5kdW0o
ZWxlbWVudCk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgImRldmVsb3BtZW50
IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ0ZhaWxlZCAlcyB0eXBlOiAlcyVz
JywgbG9jYXRpb24sIGVycm9yLm1lc3NhZ2UsIGNvbXBvbmVudFN0YWNrSW5mbykgOiB2b2lkIDA7
CisgICAgICB9CisgICAgfQorICB9Cit9CisKK21vZHVsZS5leHBvcnRzID0gY2hlY2tSZWFjdFR5
cGVTcGVjOworfSkuY2FsbCh0aGlzLHVuZGVmaW5lZCkKK30seyIxMiI6MTIsIjIyIjoyMiwiMjQi
OjI0LCIzOSI6MzksIjQ3Ijo0NywiNDkiOjQ5fV0sMzU6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxl
LGV4cG9ydHMpeworKGZ1bmN0aW9uIChwcm9jZXNzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMt
cHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2Ug
Zm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRo
aXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMg
Y2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5Lgor
ICoKKyAqIAorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIEtleUVzY2FwZVV0aWxzID0gX2Rl
cmVxXygyKTsKK3ZhciB0cmF2ZXJzZUFsbENoaWxkcmVuID0gX2RlcmVxXyg0MSk7Cit2YXIgd2Fy
bmluZyA9IF9kZXJlcV8oNDkpOworCit2YXIgUmVhY3RDb21wb25lbnRUcmVlSG9vazsKKworaWYg
KHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLmVudiAmJiAiZGV2ZWxv
cG1lbnQiID09PSAndGVzdCcpIHsKKyAgLy8gVGVtcG9yYXJ5IGhhY2suCisgIC8vIElubGluZSBy
ZXF1aXJlcyBkb24ndCB3b3JrIHdlbGwgd2l0aCBKZXN0OgorICAvLyBodHRwczovL2dpdGh1Yi5j
b20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcyNDAKKyAgLy8gUmVtb3ZlIHRoZSBpbmxpbmUgcmVx
dWlyZXMgd2hlbiB3ZSBkb24ndCBuZWVkIHRoZW0gYW55bW9yZToKKyAgLy8gaHR0cHM6Ly9naXRo
dWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvNzE3OAorICBSZWFjdENvbXBvbmVudFRyZWVIb29r
ID0gX2RlcmVxXygxMik7Cit9CisKKy8qKgorICogQHBhcmFtIHtmdW5jdGlvbn0gdHJhdmVyc2VD
b250ZXh0IENvbnRleHQgcGFzc2VkIHRocm91Z2ggdHJhdmVyc2FsLgorICogQHBhcmFtIHs/UmVh
Y3RDb21wb25lbnR9IGNoaWxkIFJlYWN0IGNoaWxkIGNvbXBvbmVudC4KKyAqIEBwYXJhbSB7IXN0
cmluZ30gbmFtZSBTdHJpbmcgbmFtZSBvZiBrZXkgcGF0aCB0byBjaGlsZC4KKyAqIEBwYXJhbSB7
bnVtYmVyPX0gc2VsZkRlYnVnSUQgT3B0aW9uYWwgZGVidWdJRCBvZiB0aGUgY3VycmVudCBpbnRl
cm5hbCBpbnN0YW5jZS4KKyAqLworZnVuY3Rpb24gZmxhdHRlblNpbmdsZUNoaWxkSW50b0NvbnRl
eHQodHJhdmVyc2VDb250ZXh0LCBjaGlsZCwgbmFtZSwgc2VsZkRlYnVnSUQpIHsKKyAgLy8gV2Ug
Zm91bmQgYSBjb21wb25lbnQgaW5zdGFuY2UuCisgIGlmICh0cmF2ZXJzZUNvbnRleHQgJiYgdHlw
ZW9mIHRyYXZlcnNlQ29udGV4dCA9PT0gJ29iamVjdCcpIHsKKyAgICB2YXIgcmVzdWx0ID0gdHJh
dmVyc2VDb250ZXh0OworICAgIHZhciBrZXlVbmlxdWUgPSByZXN1bHRbbmFtZV0gPT09IHVuZGVm
aW5lZDsKKyAgICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgICBp
ZiAoIVJlYWN0Q29tcG9uZW50VHJlZUhvb2spIHsKKyAgICAgICAgUmVhY3RDb21wb25lbnRUcmVl
SG9vayA9IF9kZXJlcV8oMTIpOworICAgICAgfQorICAgICAgaWYgKCFrZXlVbmlxdWUpIHsKKyAg
ICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ2Zs
YXR0ZW5DaGlsZHJlbiguLi4pOiBFbmNvdW50ZXJlZCB0d28gY2hpbGRyZW4gd2l0aCB0aGUgc2Ft
ZSBrZXksICcgKyAnYCVzYC4gQ2hpbGQga2V5cyBtdXN0IGJlIHVuaXF1ZTsgd2hlbiB0d28gY2hp
bGRyZW4gc2hhcmUgYSBrZXksIG9ubHkgJyArICd0aGUgZmlyc3QgY2hpbGQgd2lsbCBiZSB1c2Vk
LiVzJywgS2V5RXNjYXBlVXRpbHMudW5lc2NhcGUobmFtZSksIFJlYWN0Q29tcG9uZW50VHJlZUhv
b2suZ2V0U3RhY2tBZGRlbmR1bUJ5SUQoc2VsZkRlYnVnSUQpKSA6IHZvaWQgMDsKKyAgICAgIH0K
KyAgICB9CisgICAgaWYgKGtleVVuaXF1ZSAmJiBjaGlsZCAhPSBudWxsKSB7CisgICAgICByZXN1
bHRbbmFtZV0gPSBjaGlsZDsKKyAgICB9CisgIH0KK30KKworLyoqCisgKiBGbGF0dGVucyBjaGls
ZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuIEFu
eSBudWxsCisgKiBjaGlsZHJlbiB3aWxsIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0aW5n
IG9iamVjdC4KKyAqIEByZXR1cm4geyFvYmplY3R9IGZsYXR0ZW5lZCBjaGlsZHJlbiBrZXllZCBi
eSBuYW1lLgorICovCitmdW5jdGlvbiBmbGF0dGVuQ2hpbGRyZW4oY2hpbGRyZW4sIHNlbGZEZWJ1
Z0lEKSB7CisgIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7CisgICAgcmV0dXJuIGNoaWxkcmVuOwor
ICB9CisgIHZhciByZXN1bHQgPSB7fTsKKworICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1
Y3Rpb24nKSB7CisgICAgdHJhdmVyc2VBbGxDaGlsZHJlbihjaGlsZHJlbiwgZnVuY3Rpb24gKHRy
YXZlcnNlQ29udGV4dCwgY2hpbGQsIG5hbWUpIHsKKyAgICAgIHJldHVybiBmbGF0dGVuU2luZ2xl
Q2hpbGRJbnRvQ29udGV4dCh0cmF2ZXJzZUNvbnRleHQsIGNoaWxkLCBuYW1lLCBzZWxmRGVidWdJ
RCk7CisgICAgfSwgcmVzdWx0KTsKKyAgfSBlbHNlIHsKKyAgICB0cmF2ZXJzZUFsbENoaWxkcmVu
KGNoaWxkcmVuLCBmbGF0dGVuU2luZ2xlQ2hpbGRJbnRvQ29udGV4dCwgcmVzdWx0KTsKKyAgfQor
ICByZXR1cm4gcmVzdWx0OworfQorCittb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW5DaGlsZHJlbjsK
K30pLmNhbGwodGhpcyx1bmRlZmluZWQpCit9LHsiMTIiOjEyLCIyIjoyLCI0MSI6NDEsIjQ5Ijo0
OX1dLDM2OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJp
Z2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxl
IGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0
b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVu
dCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGly
ZWN0b3J5LgorICoKKyAqIAorICovCisKKyd1c2Ugc3RyaWN0JzsKKworLyogZ2xvYmFsIFN5bWJv
bCAqLworCit2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9u
JyAmJiBTeW1ib2wuaXRlcmF0b3I7Cit2YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVy
YXRvcic7IC8vIEJlZm9yZSBTeW1ib2wgc3BlYy4KKworLyoqCisgKiBSZXR1cm5zIHRoZSBpdGVy
YXRvciBtZXRob2QgZnVuY3Rpb24gY29udGFpbmVkIG9uIHRoZSBpdGVyYWJsZSBvYmplY3QuCisg
KgorICogQmUgc3VyZSB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGl0ZXJhYmxlIGFz
IGNvbnRleHQ6CisgKgorICogICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihteUl0
ZXJhYmxlKTsKKyAqICAgICBpZiAoaXRlcmF0b3JGbikgeworICogICAgICAgdmFyIGl0ZXJhdG9y
ID0gaXRlcmF0b3JGbi5jYWxsKG15SXRlcmFibGUpOworICogICAgICAgLi4uCisgKiAgICAgfQor
ICoKKyAqIEBwYXJhbSB7P29iamVjdH0gbWF5YmVJdGVyYWJsZQorICogQHJldHVybiB7P2Z1bmN0
aW9ufQorICovCitmdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHsKKyAgdmFy
IGl0ZXJhdG9yRm4gPSBtYXliZUl0ZXJhYmxlICYmIChJVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJ
dGVyYWJsZVtJVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9T
WU1CT0xdKTsKKyAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7CisgICAg
cmV0dXJuIGl0ZXJhdG9yRm47CisgIH0KK30KKworbW9kdWxlLmV4cG9ydHMgPSBnZXRJdGVyYXRv
ckZuOworfSx7fV0sMzc6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisg
KiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBC
U0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICog
b2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUg
c2FtZSBkaXJlY3RvcnkuCisgKgorICogCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgbmV4
dERlYnVnSUQgPSAxOworCitmdW5jdGlvbiBnZXROZXh0RGVidWdJRCgpIHsKKyAgcmV0dXJuIG5l
eHREZWJ1Z0lEKys7Cit9CisKK21vZHVsZS5leHBvcnRzID0gZ2V0TmV4dERlYnVnSUQ7Cit9LHt9
XSwzODpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdo
dCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBs
aWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9y
eSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQg
cmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVj
dG9yeS4KKyAqCisgKi8KKyd1c2Ugc3RyaWN0JzsKKwordmFyIF9wcm9kSW52YXJpYW50ID0gX2Rl
cmVxXygzOSk7CisKK3ZhciBSZWFjdEVsZW1lbnQgPSBfZGVyZXFfKDE2KTsKKwordmFyIGludmFy
aWFudCA9IF9kZXJlcV8oNDcpOworCisvKioKKyAqIFJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGlu
IGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiBhbmQgdmVyaWZpZXMgdGhhdCB0aGVyZQorICogaXMg
b25seSBvbmUgY2hpbGQgaW4gdGhlIGNvbGxlY3Rpb24uCisgKgorICogU2VlIGh0dHBzOi8vZmFj
ZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNoaWxk
cmVuLm9ubHkKKyAqCisgKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0
aW9uIGFzc3VtZXMgdGhhdCBhIHNpbmdsZSBjaGlsZCBnZXRzCisgKiBwYXNzZWQgd2l0aG91dCBh
IHdyYXBwZXIsIGJ1dCB0aGUgcHVycG9zZSBvZiB0aGlzIGhlbHBlciBmdW5jdGlvbiBpcyB0bwor
ICogYWJzdHJhY3QgYXdheSB0aGUgcGFydGljdWxhciBzdHJ1Y3R1cmUgb2YgY2hpbGRyZW4uCisg
KgorICogQHBhcmFtIHs/b2JqZWN0fSBjaGlsZHJlbiBDaGlsZCBjb2xsZWN0aW9uIHN0cnVjdHVy
ZS4KKyAqIEByZXR1cm4ge1JlYWN0RWxlbWVudH0gVGhlIGZpcnN0IGFuZCBvbmx5IGBSZWFjdEVs
ZW1lbnRgIGNvbnRhaW5lZCBpbiB0aGUKKyAqIHN0cnVjdHVyZS4KKyAqLworZnVuY3Rpb24gb25s
eUNoaWxkKGNoaWxkcmVuKSB7CisgICFSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoY2hpbGRy
ZW4pID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAn
UmVhY3QuQ2hpbGRyZW4ub25seSBleHBlY3RlZCB0byByZWNlaXZlIGEgc2luZ2xlIFJlYWN0IGVs
ZW1lbnQgY2hpbGQuJykgOiBfcHJvZEludmFyaWFudCgnMTQzJykgOiB2b2lkIDA7CisgIHJldHVy
biBjaGlsZHJlbjsKK30KKworbW9kdWxlLmV4cG9ydHMgPSBvbmx5Q2hpbGQ7Cit9LHsiMTYiOjE2
LCIzOSI6MzksIjQ3Ijo0N31dLDM5OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsK
Ky8qKgorICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQg
dW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxl
IGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFs
IGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBm
aWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKiAKKyAqLworJ3VzZSBzdHJpY3QnOwor
CisvKioKKyAqIFdBUk5JTkc6IERPIE5PVCBtYW51YWxseSByZXF1aXJlIHRoaXMgbW9kdWxlLgor
ICogVGhpcyBpcyBhIHJlcGxhY2VtZW50IGZvciBgaW52YXJpYW50KC4uLilgIHVzZWQgYnkgdGhl
IGVycm9yIGNvZGUgc3lzdGVtCisgKiBhbmQgd2lsbCBfb25seV8gYmUgcmVxdWlyZWQgYnkgdGhl
IGNvcnJlc3BvbmRpbmcgYmFiZWwgcGFzcy4KKyAqIEl0IGFsd2F5cyB0aHJvd3MuCisgKi8KKwor
ZnVuY3Rpb24gcmVhY3RQcm9kSW52YXJpYW50KGNvZGUpIHsKKyAgdmFyIGFyZ0NvdW50ID0gYXJn
dW1lbnRzLmxlbmd0aCAtIDE7CisKKyAgdmFyIG1lc3NhZ2UgPSAnTWluaWZpZWQgUmVhY3QgZXJy
b3IgIycgKyBjb2RlICsgJzsgdmlzaXQgJyArICdodHRwOi8vZmFjZWJvb2suZ2l0aHViLmlvL3Jl
YWN0L2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD0nICsgY29kZTsKKworICBmb3Ig
KHZhciBhcmdJZHggPSAwOyBhcmdJZHggPCBhcmdDb3VudDsgYXJnSWR4KyspIHsKKyAgICBtZXNz
YWdlICs9ICcmYXJnc1tdPScgKyBlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW2FyZ0lkeCAr
IDFdKTsKKyAgfQorCisgIG1lc3NhZ2UgKz0gJyBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2Ug
dGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQnICsgJyBmb3IgZnVsbCBlcnJvcnMgYW5k
IGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4nOworCisgIHZhciBlcnJvciA9IG5ldyBFcnJv
cihtZXNzYWdlKTsKKyAgZXJyb3IubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJzsKKyAgZXJy
b3IuZnJhbWVzVG9Qb3AgPSAxOyAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IHJlYWN0UHJvZEludmFy
aWFudCdzIG93biBmcmFtZQorCisgIHRocm93IGVycm9yOworfQorCittb2R1bGUuZXhwb3J0cyA9
IHJlYWN0UHJvZEludmFyaWFudDsKK30se31dLDQwOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxl
eHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4K
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNl
bnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0
aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRF
TlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7
CisKK3ZhciBzaGFsbG93RXF1YWwgPSBfZGVyZXFfKDQ4KTsKKworLyoqCisgKiBEb2VzIGEgc2hh
bGxvdyBjb21wYXJpc29uIGZvciBwcm9wcyBhbmQgc3RhdGUuCisgKiBTZWUgUmVhY3RDb21wb25l
bnRXaXRoUHVyZVJlbmRlck1peGluCisgKiBTZWUgYWxzbyBodHRwczovL2ZhY2Vib29rLmdpdGh1
Yi5pby9yZWFjdC9kb2NzL3NoYWxsb3ctY29tcGFyZS5odG1sCisgKi8KK2Z1bmN0aW9uIHNoYWxs
b3dDb21wYXJlKGluc3RhbmNlLCBuZXh0UHJvcHMsIG5leHRTdGF0ZSkgeworICByZXR1cm4gIXNo
YWxsb3dFcXVhbChpbnN0YW5jZS5wcm9wcywgbmV4dFByb3BzKSB8fCAhc2hhbGxvd0VxdWFsKGlu
c3RhbmNlLnN0YXRlLCBuZXh0U3RhdGUpOworfQorCittb2R1bGUuZXhwb3J0cyA9IHNoYWxsb3dD
b21wYXJlOworfSx7IjQ4Ijo0OH1dLDQxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRz
KXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1
bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwg
Z3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZp
bGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3Zh
ciBfcHJvZEludmFyaWFudCA9IF9kZXJlcV8oMzkpOworCit2YXIgUmVhY3RDdXJyZW50T3duZXIg
PSBfZGVyZXFfKDE0KTsKK3ZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBfZGVyZXFfKDE3KTsKKwor
dmFyIGdldEl0ZXJhdG9yRm4gPSBfZGVyZXFfKDM2KTsKK3ZhciBpbnZhcmlhbnQgPSBfZGVyZXFf
KDQ3KTsKK3ZhciBLZXlFc2NhcGVVdGlscyA9IF9kZXJlcV8oMik7Cit2YXIgd2FybmluZyA9IF9k
ZXJlcV8oNDkpOworCit2YXIgU0VQQVJBVE9SID0gJy4nOwordmFyIFNVQlNFUEFSQVRPUiA9ICc6
JzsKKworLyoqCisgKiBUaGlzIGlzIGlubGluZWQgZnJvbSBSZWFjdEVsZW1lbnQgc2luY2UgdGhp
cyBmaWxlIGlzIHNoYXJlZCBiZXR3ZWVuCisgKiBpc29tb3JwaGljIGFuZCByZW5kZXJlcnMuIFdl
IGNvdWxkIGV4dHJhY3QgdGhpcyB0byBhCisgKgorICovCisKKy8qKgorICogVE9ETzogVGVzdCB0
aGF0IGEgc2luZ2xlIGNoaWxkIGFuZCBhbiBhcnJheSB3aXRoIG9uZSBpdGVtIGhhdmUgdGhlIHNh
bWUga2V5CisgKiBwYXR0ZXJuLgorICovCisKK3ZhciBkaWRXYXJuQWJvdXRNYXBzID0gZmFsc2U7
CisKKy8qKgorICogR2VuZXJhdGUgYSBrZXkgc3RyaW5nIHRoYXQgaWRlbnRpZmllcyBhIGNvbXBv
bmVudCB3aXRoaW4gYSBzZXQuCisgKgorICogQHBhcmFtIHsqfSBjb21wb25lbnQgQSBjb21wb25l
bnQgdGhhdCBjb3VsZCBjb250YWluIGEgbWFudWFsIGtleS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBp
bmRleCBJbmRleCB0aGF0IGlzIHVzZWQgaWYgYSBtYW51YWwga2V5IGlzIG5vdCBwcm92aWRlZC4K
KyAqIEByZXR1cm4ge3N0cmluZ30KKyAqLworZnVuY3Rpb24gZ2V0Q29tcG9uZW50S2V5KGNvbXBv
bmVudCwgaW5kZXgpIHsKKyAgLy8gRG8gc29tZSB0eXBlY2hlY2tpbmcgaGVyZSBzaW5jZSB3ZSBj
YWxsIHRoaXMgYmxpbmRseS4gV2Ugd2FudCB0byBlbnN1cmUKKyAgLy8gdGhhdCB3ZSBkb24ndCBi
bG9jayBwb3RlbnRpYWwgZnV0dXJlIEVTIEFQSXMuCisgIGlmIChjb21wb25lbnQgJiYgdHlwZW9m
IGNvbXBvbmVudCA9PT0gJ29iamVjdCcgJiYgY29tcG9uZW50LmtleSAhPSBudWxsKSB7CisgICAg
Ly8gRXhwbGljaXQga2V5CisgICAgcmV0dXJuIEtleUVzY2FwZVV0aWxzLmVzY2FwZShjb21wb25l
bnQua2V5KTsKKyAgfQorICAvLyBJbXBsaWNpdCBrZXkgZGV0ZXJtaW5lZCBieSB0aGUgaW5kZXgg
aW4gdGhlIHNldAorICByZXR1cm4gaW5kZXgudG9TdHJpbmcoMzYpOworfQorCisvKioKKyAqIEBw
YXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLgorICogQHBhcmFtIHsh
c3RyaW5nfSBuYW1lU29GYXIgTmFtZSBvZiB0aGUga2V5IHBhdGggc28gZmFyLgorICogQHBhcmFt
IHshZnVuY3Rpb259IGNhbGxiYWNrIENhbGxiYWNrIHRvIGludm9rZSB3aXRoIGVhY2ggY2hpbGQg
Zm91bmQuCisgKiBAcGFyYW0gez8qfSB0cmF2ZXJzZUNvbnRleHQgVXNlZCB0byBwYXNzIGluZm9y
bWF0aW9uIHRocm91Z2hvdXQgdGhlIHRyYXZlcnNhbAorICogcHJvY2Vzcy4KKyAqIEByZXR1cm4g
eyFudW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hpbGRyZW4gaW4gdGhpcyBzdWJ0cmVlLgorICovCitm
dW5jdGlvbiB0cmF2ZXJzZUFsbENoaWxkcmVuSW1wbChjaGlsZHJlbiwgbmFtZVNvRmFyLCBjYWxs
YmFjaywgdHJhdmVyc2VDb250ZXh0KSB7CisgIHZhciB0eXBlID0gdHlwZW9mIGNoaWxkcmVuOwor
CisgIGlmICh0eXBlID09PSAndW5kZWZpbmVkJyB8fCB0eXBlID09PSAnYm9vbGVhbicpIHsKKyAg
ICAvLyBBbGwgb2YgdGhlIGFib3ZlIGFyZSBwZXJjZWl2ZWQgYXMgbnVsbC4KKyAgICBjaGlsZHJl
biA9IG51bGw7CisgIH0KKworICBpZiAoY2hpbGRyZW4gPT09IG51bGwgfHwgdHlwZSA9PT0gJ3N0
cmluZycgfHwgdHlwZSA9PT0gJ251bWJlcicgfHwKKyAgLy8gVGhlIGZvbGxvd2luZyBpcyBpbmxp
bmVkIGZyb20gUmVhY3RFbGVtZW50LiBUaGlzIG1lYW5zIHdlIGNhbiBvcHRpbWl6ZQorICAvLyBz
b21lIGNoZWNrcy4gUmVhY3QgRmliZXIgYWxzbyBpbmxpbmVzIHRoaXMgbG9naWMgZm9yIHNpbWls
YXIgcHVycG9zZXMuCisgIHR5cGUgPT09ICdvYmplY3QnICYmIGNoaWxkcmVuLiQkdHlwZW9mID09
PSBSRUFDVF9FTEVNRU5UX1RZUEUpIHsKKyAgICBjYWxsYmFjayh0cmF2ZXJzZUNvbnRleHQsIGNo
aWxkcmVuLAorICAgIC8vIElmIGl0J3MgdGhlIG9ubHkgY2hpbGQsIHRyZWF0IHRoZSBuYW1lIGFz
IGlmIGl0IHdhcyB3cmFwcGVkIGluIGFuIGFycmF5CisgICAgLy8gc28gdGhhdCBpdCdzIGNvbnNp
c3RlbnQgaWYgdGhlIG51bWJlciBvZiBjaGlsZHJlbiBncm93cy4KKyAgICBuYW1lU29GYXIgPT09
ICcnID8gU0VQQVJBVE9SICsgZ2V0Q29tcG9uZW50S2V5KGNoaWxkcmVuLCAwKSA6IG5hbWVTb0Zh
cik7CisgICAgcmV0dXJuIDE7CisgIH0KKworICB2YXIgY2hpbGQ7CisgIHZhciBuZXh0TmFtZTsK
KyAgdmFyIHN1YnRyZWVDb3VudCA9IDA7IC8vIENvdW50IG9mIGNoaWxkcmVuIGZvdW5kIGluIHRo
ZSBjdXJyZW50IHN1YnRyZWUuCisgIHZhciBuZXh0TmFtZVByZWZpeCA9IG5hbWVTb0ZhciA9PT0g
JycgPyBTRVBBUkFUT1IgOiBuYW1lU29GYXIgKyBTVUJTRVBBUkFUT1I7CisKKyAgaWYgKEFycmF5
LmlzQXJyYXkoY2hpbGRyZW4pKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5s
ZW5ndGg7IGkrKykgeworICAgICAgY2hpbGQgPSBjaGlsZHJlbltpXTsKKyAgICAgIG5leHROYW1l
ID0gbmV4dE5hbWVQcmVmaXggKyBnZXRDb21wb25lbnRLZXkoY2hpbGQsIGkpOworICAgICAgc3Vi
dHJlZUNvdW50ICs9IHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBsKGNoaWxkLCBuZXh0TmFtZSwgY2Fs
bGJhY2ssIHRyYXZlcnNlQ29udGV4dCk7CisgICAgfQorICB9IGVsc2UgeworICAgIHZhciBpdGVy
YXRvckZuID0gZ2V0SXRlcmF0b3JGbihjaGlsZHJlbik7CisgICAgaWYgKGl0ZXJhdG9yRm4pIHsK
KyAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChjaGlsZHJlbik7CisgICAgICB2
YXIgc3RlcDsKKyAgICAgIGlmIChpdGVyYXRvckZuICE9PSBjaGlsZHJlbi5lbnRyaWVzKSB7Cisg
ICAgICAgIHZhciBpaSA9IDA7CisgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0
KCkpLmRvbmUpIHsKKyAgICAgICAgICBjaGlsZCA9IHN0ZXAudmFsdWU7CisgICAgICAgICAgbmV4
dE5hbWUgPSBuZXh0TmFtZVByZWZpeCArIGdldENvbXBvbmVudEtleShjaGlsZCwgaWkrKyk7Cisg
ICAgICAgICAgc3VidHJlZUNvdW50ICs9IHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBsKGNoaWxkLCBu
ZXh0TmFtZSwgY2FsbGJhY2ssIHRyYXZlcnNlQ29udGV4dCk7CisgICAgICAgIH0KKyAgICAgIH0g
ZWxzZSB7CisgICAgICAgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAg
ICAgICAgICB2YXIgbWFwc0FzQ2hpbGRyZW5BZGRlbmR1bSA9ICcnOworICAgICAgICAgIGlmIChS
ZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7CisgICAgICAgICAgICB2YXIgbWFwc0FzQ2hpbGRy
ZW5Pd25lck5hbWUgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LmdldE5hbWUoKTsKKyAgICAg
ICAgICAgIGlmIChtYXBzQXNDaGlsZHJlbk93bmVyTmFtZSkgeworICAgICAgICAgICAgICBtYXBz
QXNDaGlsZHJlbkFkZGVuZHVtID0gJyBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG1h
cHNBc0NoaWxkcmVuT3duZXJOYW1lICsgJ2AuJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9
CisgICAgICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhkaWRX
YXJuQWJvdXRNYXBzLCAnVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBpcyBub3QgeWV0IGZ1bGx5IHN1
cHBvcnRlZC4gSXQgaXMgYW4gJyArICdleHBlcmltZW50YWwgZmVhdHVyZSB0aGF0IG1pZ2h0IGJl
IHJlbW92ZWQuIENvbnZlcnQgaXQgdG8gYSAnICsgJ3NlcXVlbmNlIC8gaXRlcmFibGUgb2Yga2V5
ZWQgUmVhY3RFbGVtZW50cyBpbnN0ZWFkLiVzJywgbWFwc0FzQ2hpbGRyZW5BZGRlbmR1bSkgOiB2
b2lkIDA7CisgICAgICAgICAgZGlkV2FybkFib3V0TWFwcyA9IHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gSXRlcmF0b3Igd2lsbCBwcm92aWRlIGVudHJ5IFtrLHZdIHR1cGxlcyByYXRoZXIg
dGhhbiB2YWx1ZXMuCisgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRv
bmUpIHsKKyAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlOworICAgICAgICAgIGlmIChl
bnRyeSkgeworICAgICAgICAgICAgY2hpbGQgPSBlbnRyeVsxXTsKKyAgICAgICAgICAgIG5leHRO
YW1lID0gbmV4dE5hbWVQcmVmaXggKyBLZXlFc2NhcGVVdGlscy5lc2NhcGUoZW50cnlbMF0pICsg
U1VCU0VQQVJBVE9SICsgZ2V0Q29tcG9uZW50S2V5KGNoaWxkLCAwKTsKKyAgICAgICAgICAgIHN1
YnRyZWVDb3VudCArPSB0cmF2ZXJzZUFsbENoaWxkcmVuSW1wbChjaGlsZCwgbmV4dE5hbWUsIGNh
bGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
fQorICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHsKKyAgICAgIHZhciBhZGRlbmR1
bSA9ICcnOworICAgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAg
ICAgICBhZGRlbmR1bSA9ICcgSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIGNvbGxlY3Rpb24gb2Yg
Y2hpbGRyZW4sIHVzZSBhbiBhcnJheSAnICsgJ2luc3RlYWQgb3Igd3JhcCB0aGUgb2JqZWN0IHVz
aW5nIGNyZWF0ZUZyYWdtZW50KG9iamVjdCkgZnJvbSB0aGUgJyArICdSZWFjdCBhZGQtb25zLic7
CisgICAgICAgIGlmIChjaGlsZHJlbi5faXNSZWFjdEVsZW1lbnQpIHsKKyAgICAgICAgICBhZGRl
bmR1bSA9ICcgSXQgbG9va3MgbGlrZSB5b3VcJ3JlIHVzaW5nIGFuIGVsZW1lbnQgY3JlYXRlZCBi
eSBhIGRpZmZlcmVudCAnICsgJ3ZlcnNpb24gb2YgUmVhY3QuIE1ha2Ugc3VyZSB0byB1c2Ugb25s
eSBvbmUgY29weSBvZiBSZWFjdC4nOworICAgICAgICB9CisgICAgICAgIGlmIChSZWFjdEN1cnJl
bnRPd25lci5jdXJyZW50KSB7CisgICAgICAgICAgdmFyIG5hbWUgPSBSZWFjdEN1cnJlbnRPd25l
ci5jdXJyZW50LmdldE5hbWUoKTsKKyAgICAgICAgICBpZiAobmFtZSkgeworICAgICAgICAgICAg
YWRkZW5kdW0gKz0gJyBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4n
OworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgdmFyIGNoaWxkcmVuU3Ry
aW5nID0gU3RyaW5nKGNoaWxkcmVuKTsKKyAgICAgICFmYWxzZSA/ICJkZXZlbG9wbWVudCIgIT09
ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ09iamVjdHMgYXJlIG5vdCB2YWxpZCBh
cyBhIFJlYWN0IGNoaWxkIChmb3VuZDogJXMpLiVzJywgY2hpbGRyZW5TdHJpbmcgPT09ICdbb2Jq
ZWN0IE9iamVjdF0nID8gJ29iamVjdCB3aXRoIGtleXMgeycgKyBPYmplY3Qua2V5cyhjaGlsZHJl
bikuam9pbignLCAnKSArICd9JyA6IGNoaWxkcmVuU3RyaW5nLCBhZGRlbmR1bSkgOiBfcHJvZElu
dmFyaWFudCgnMzEnLCBjaGlsZHJlblN0cmluZyA9PT0gJ1tvYmplY3QgT2JqZWN0XScgPyAnb2Jq
ZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKGNoaWxkcmVuKS5qb2luKCcsICcpICsgJ30n
IDogY2hpbGRyZW5TdHJpbmcsIGFkZGVuZHVtKSA6IHZvaWQgMDsKKyAgICB9CisgIH0KKworICBy
ZXR1cm4gc3VidHJlZUNvdW50OworfQorCisvKioKKyAqIFRyYXZlcnNlcyBjaGlsZHJlbiB0aGF0
IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAsIGJ1dAorICogbWln
aHQgYWxzbyBiZSBzcGVjaWZpZWQgdGhyb3VnaCBhdHRyaWJ1dGVzOgorICoKKyAqIC0gYHRyYXZl
cnNlQWxsQ2hpbGRyZW4odGhpcy5wcm9wcy5jaGlsZHJlbiwgLi4uKWAKKyAqIC0gYHRyYXZlcnNl
QWxsQ2hpbGRyZW4odGhpcy5wcm9wcy5sZWZ0UGFuZWxDaGlsZHJlbiwgLi4uKWAKKyAqCisgKiBU
aGUgYHRyYXZlcnNlQ29udGV4dGAgaXMgYW4gb3B0aW9uYWwgYXJndW1lbnQgdGhhdCBpcyBwYXNz
ZWQgdGhyb3VnaCB0aGUKKyAqIGVudGlyZSB0cmF2ZXJzYWwuIEl0IGNhbiBiZSB1c2VkIHRvIHN0
b3JlIGFjY3VtdWxhdGlvbnMgb3IgYW55dGhpbmcgZWxzZSB0aGF0CisgKiB0aGUgY2FsbGJhY2sg
bWlnaHQgZmluZCByZWxldmFudC4KKyAqCisgKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJl
biB0cmVlIG9iamVjdC4KKyAqIEBwYXJhbSB7IWZ1bmN0aW9ufSBjYWxsYmFjayBUbyBpbnZva2Ug
dXBvbiB0cmF2ZXJzaW5nIGVhY2ggY2hpbGQuCisgKiBAcGFyYW0gez8qfSB0cmF2ZXJzZUNvbnRl
eHQgQ29udGV4dCBmb3IgdHJhdmVyc2FsLgorICogQHJldHVybiB7IW51bWJlcn0gVGhlIG51bWJl
ciBvZiBjaGlsZHJlbiBpbiB0aGlzIHN1YnRyZWUuCisgKi8KK2Z1bmN0aW9uIHRyYXZlcnNlQWxs
Q2hpbGRyZW4oY2hpbGRyZW4sIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpIHsKKyAgaWYgKGNo
aWxkcmVuID09IG51bGwpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiB0cmF2ZXJz
ZUFsbENoaWxkcmVuSW1wbChjaGlsZHJlbiwgJycsIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQp
OworfQorCittb2R1bGUuZXhwb3J0cyA9IHRyYXZlcnNlQWxsQ2hpbGRyZW47Cit9LHsiMTQiOjE0
LCIxNyI6MTcsIjIiOjIsIjM2IjozNiwiMzkiOjM5LCI0NyI6NDcsIjQ5Ijo0OX1dLDQyOltmdW5j
dGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJl
c2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91
bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMg
c291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2Fu
IGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoK
KyAqLworCisvKiBnbG9iYWwgaGFzT3duUHJvcGVydHk6dHJ1ZSAqLworCisndXNlIHN0cmljdCc7
CisKK3ZhciBfcHJvZEludmFyaWFudCA9IF9kZXJlcV8oMzkpLAorICAgIF9hc3NpZ24gPSBfZGVy
ZXFfKDUwKTsKKwordmFyIGludmFyaWFudCA9IF9kZXJlcV8oNDcpOwordmFyIGhhc093blByb3Bl
cnR5ID0ge30uaGFzT3duUHJvcGVydHk7CisKK2Z1bmN0aW9uIHNoYWxsb3dDb3B5KHgpIHsKKyAg
aWYgKEFycmF5LmlzQXJyYXkoeCkpIHsKKyAgICByZXR1cm4geC5jb25jYXQoKTsKKyAgfSBlbHNl
IGlmICh4ICYmIHR5cGVvZiB4ID09PSAnb2JqZWN0JykgeworICAgIHJldHVybiBfYXNzaWduKG5l
dyB4LmNvbnN0cnVjdG9yKCksIHgpOworICB9IGVsc2UgeworICAgIHJldHVybiB4OworICB9Cit9
CisKK3ZhciBDT01NQU5EX1BVU0ggPSAnJHB1c2gnOwordmFyIENPTU1BTkRfVU5TSElGVCA9ICck
dW5zaGlmdCc7Cit2YXIgQ09NTUFORF9TUExJQ0UgPSAnJHNwbGljZSc7Cit2YXIgQ09NTUFORF9T
RVQgPSAnJHNldCc7Cit2YXIgQ09NTUFORF9NRVJHRSA9ICckbWVyZ2UnOwordmFyIENPTU1BTkRf
QVBQTFkgPSAnJGFwcGx5JzsKKwordmFyIEFMTF9DT01NQU5EU19MSVNUID0gW0NPTU1BTkRfUFVT
SCwgQ09NTUFORF9VTlNISUZULCBDT01NQU5EX1NQTElDRSwgQ09NTUFORF9TRVQsIENPTU1BTkRf
TUVSR0UsIENPTU1BTkRfQVBQTFldOworCit2YXIgQUxMX0NPTU1BTkRTX1NFVCA9IHt9OworCitB
TExfQ09NTUFORFNfTElTVC5mb3JFYWNoKGZ1bmN0aW9uIChjb21tYW5kKSB7CisgIEFMTF9DT01N
QU5EU19TRVRbY29tbWFuZF0gPSB0cnVlOworfSk7CisKK2Z1bmN0aW9uIGludmFyaWFudEFycmF5
Q2FzZSh2YWx1ZSwgc3BlYywgY29tbWFuZCkgeworICAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyAi
ZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICd1cGRhdGUo
KTogZXhwZWN0ZWQgdGFyZ2V0IG9mICVzIHRvIGJlIGFuIGFycmF5OyBnb3QgJXMuJywgY29tbWFu
ZCwgdmFsdWUpIDogX3Byb2RJbnZhcmlhbnQoJzEnLCBjb21tYW5kLCB2YWx1ZSkgOiB2b2lkIDA7
CisgIHZhciBzcGVjVmFsdWUgPSBzcGVjW2NvbW1hbmRdOworICAhQXJyYXkuaXNBcnJheShzcGVj
VmFsdWUpID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNl
LCAndXBkYXRlKCk6IGV4cGVjdGVkIHNwZWMgb2YgJXMgdG8gYmUgYW4gYXJyYXk7IGdvdCAlcy4g
RGlkIHlvdSBmb3JnZXQgdG8gd3JhcCB5b3VyIHBhcmFtZXRlciBpbiBhbiBhcnJheT8nLCBjb21t
YW5kLCBzcGVjVmFsdWUpIDogX3Byb2RJbnZhcmlhbnQoJzInLCBjb21tYW5kLCBzcGVjVmFsdWUp
IDogdm9pZCAwOworfQorCisvKioKKyAqIFJldHVybnMgYSB1cGRhdGVkIHNoYWxsb3cgY29weSBv
ZiBhbiBvYmplY3Qgd2l0aG91dCBtdXRhdGluZyB0aGUgb3JpZ2luYWwuCisgKiBTZWUgaHR0cHM6
Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy91cGRhdGUuaHRtbCBmb3IgZGV0YWlscy4K
KyAqLworZnVuY3Rpb24gdXBkYXRlKHZhbHVlLCBzcGVjKSB7CisgICEodHlwZW9mIHNwZWMgPT09
ICdvYmplY3QnKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChm
YWxzZSwgJ3VwZGF0ZSgpOiBZb3UgcHJvdmlkZWQgYSBrZXkgcGF0aCB0byB1cGRhdGUoKSB0aGF0
IGRpZCBub3QgY29udGFpbiBvbmUgb2YgJXMuIERpZCB5b3UgZm9yZ2V0IHRvIGluY2x1ZGUgeyVz
OiAuLi59PycsIEFMTF9DT01NQU5EU19MSVNULmpvaW4oJywgJyksIENPTU1BTkRfU0VUKSA6IF9w
cm9kSW52YXJpYW50KCczJywgQUxMX0NPTU1BTkRTX0xJU1Quam9pbignLCAnKSwgQ09NTUFORF9T
RVQpIDogdm9pZCAwOworCisgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNwZWMsIENPTU1BTkRf
U0VUKSkgeworICAgICEoT2JqZWN0LmtleXMoc3BlYykubGVuZ3RoID09PSAxKSA/ICJkZXZlbG9w
bWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0Nhbm5vdCBoYXZlIG1v
cmUgdGhhbiBvbmUga2V5IGluIGFuIG9iamVjdCB3aXRoICVzJywgQ09NTUFORF9TRVQpIDogX3By
b2RJbnZhcmlhbnQoJzQnLCBDT01NQU5EX1NFVCkgOiB2b2lkIDA7CisKKyAgICByZXR1cm4gc3Bl
Y1tDT01NQU5EX1NFVF07CisgIH0KKworICB2YXIgbmV4dFZhbHVlID0gc2hhbGxvd0NvcHkodmFs
dWUpOworCisgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNwZWMsIENPTU1BTkRfTUVSR0UpKSB7
CisgICAgdmFyIG1lcmdlT2JqID0gc3BlY1tDT01NQU5EX01FUkdFXTsKKyAgICAhKG1lcmdlT2Jq
ICYmIHR5cGVvZiBtZXJnZU9iaiA9PT0gJ29iamVjdCcpID8gImRldmVsb3BtZW50IiAhPT0gJ3By
b2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAndXBkYXRlKCk6ICVzIGV4cGVjdHMgYSBzcGVj
IG9mIHR5cGUgXCdvYmplY3RcJzsgZ290ICVzJywgQ09NTUFORF9NRVJHRSwgbWVyZ2VPYmopIDog
X3Byb2RJbnZhcmlhbnQoJzUnLCBDT01NQU5EX01FUkdFLCBtZXJnZU9iaikgOiB2b2lkIDA7Cisg
ICAgIShuZXh0VmFsdWUgJiYgdHlwZW9mIG5leHRWYWx1ZSA9PT0gJ29iamVjdCcpID8gImRldmVs
b3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAndXBkYXRlKCk6ICVz
IGV4cGVjdHMgYSB0YXJnZXQgb2YgdHlwZSBcJ29iamVjdFwnOyBnb3QgJXMnLCBDT01NQU5EX01F
UkdFLCBuZXh0VmFsdWUpIDogX3Byb2RJbnZhcmlhbnQoJzYnLCBDT01NQU5EX01FUkdFLCBuZXh0
VmFsdWUpIDogdm9pZCAwOworICAgIF9hc3NpZ24obmV4dFZhbHVlLCBzcGVjW0NPTU1BTkRfTUVS
R0VdKTsKKyAgfQorCisgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNwZWMsIENPTU1BTkRfUFVT
SCkpIHsKKyAgICBpbnZhcmlhbnRBcnJheUNhc2UodmFsdWUsIHNwZWMsIENPTU1BTkRfUFVTSCk7
CisgICAgc3BlY1tDT01NQU5EX1BVU0hdLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKKyAgICAg
IG5leHRWYWx1ZS5wdXNoKGl0ZW0pOworICAgIH0pOworICB9CisKKyAgaWYgKGhhc093blByb3Bl
cnR5LmNhbGwoc3BlYywgQ09NTUFORF9VTlNISUZUKSkgeworICAgIGludmFyaWFudEFycmF5Q2Fz
ZSh2YWx1ZSwgc3BlYywgQ09NTUFORF9VTlNISUZUKTsKKyAgICBzcGVjW0NPTU1BTkRfVU5TSElG
VF0uZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgeworICAgICAgbmV4dFZhbHVlLnVuc2hpZnQoaXRl
bSk7CisgICAgfSk7CisgIH0KKworICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChzcGVjLCBDT01N
QU5EX1NQTElDRSkpIHsKKyAgICAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyAiZGV2ZWxvcG1lbnQi
ICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdFeHBlY3RlZCAlcyB0YXJnZXQg
dG8gYmUgYW4gYXJyYXk7IGdvdCAlcycsIENPTU1BTkRfU1BMSUNFLCB2YWx1ZSkgOiBfcHJvZElu
dmFyaWFudCgnNycsIENPTU1BTkRfU1BMSUNFLCB2YWx1ZSkgOiB2b2lkIDA7CisgICAgIUFycmF5
LmlzQXJyYXkoc3BlY1tDT01NQU5EX1NQTElDRV0pID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1
Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAndXBkYXRlKCk6IGV4cGVjdGVkIHNwZWMgb2YgJXMg
dG8gYmUgYW4gYXJyYXkgb2YgYXJyYXlzOyBnb3QgJXMuIERpZCB5b3UgZm9yZ2V0IHRvIHdyYXAg
eW91ciBwYXJhbWV0ZXJzIGluIGFuIGFycmF5PycsIENPTU1BTkRfU1BMSUNFLCBzcGVjW0NPTU1B
TkRfU1BMSUNFXSkgOiBfcHJvZEludmFyaWFudCgnOCcsIENPTU1BTkRfU1BMSUNFLCBzcGVjW0NP
TU1BTkRfU1BMSUNFXSkgOiB2b2lkIDA7CisgICAgc3BlY1tDT01NQU5EX1NQTElDRV0uZm9yRWFj
aChmdW5jdGlvbiAoYXJncykgeworICAgICAgIUFycmF5LmlzQXJyYXkoYXJncykgPyAiZGV2ZWxv
cG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICd1cGRhdGUoKTogZXhw
ZWN0ZWQgc3BlYyBvZiAlcyB0byBiZSBhbiBhcnJheSBvZiBhcnJheXM7IGdvdCAlcy4gRGlkIHlv
dSBmb3JnZXQgdG8gd3JhcCB5b3VyIHBhcmFtZXRlcnMgaW4gYW4gYXJyYXk/JywgQ09NTUFORF9T
UExJQ0UsIHNwZWNbQ09NTUFORF9TUExJQ0VdKSA6IF9wcm9kSW52YXJpYW50KCc4JywgQ09NTUFO
RF9TUExJQ0UsIHNwZWNbQ09NTUFORF9TUExJQ0VdKSA6IHZvaWQgMDsKKyAgICAgIG5leHRWYWx1
ZS5zcGxpY2UuYXBwbHkobmV4dFZhbHVlLCBhcmdzKTsKKyAgICB9KTsKKyAgfQorCisgIGlmICho
YXNPd25Qcm9wZXJ0eS5jYWxsKHNwZWMsIENPTU1BTkRfQVBQTFkpKSB7CisgICAgISh0eXBlb2Yg
c3BlY1tDT01NQU5EX0FQUExZXSA9PT0gJ2Z1bmN0aW9uJykgPyAiZGV2ZWxvcG1lbnQiICE9PSAn
cHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICd1cGRhdGUoKTogZXhwZWN0ZWQgc3BlYyBv
ZiAlcyB0byBiZSBhIGZ1bmN0aW9uOyBnb3QgJXMuJywgQ09NTUFORF9BUFBMWSwgc3BlY1tDT01N
QU5EX0FQUExZXSkgOiBfcHJvZEludmFyaWFudCgnOScsIENPTU1BTkRfQVBQTFksIHNwZWNbQ09N
TUFORF9BUFBMWV0pIDogdm9pZCAwOworICAgIG5leHRWYWx1ZSA9IHNwZWNbQ09NTUFORF9BUFBM
WV0obmV4dFZhbHVlKTsKKyAgfQorCisgIGZvciAodmFyIGsgaW4gc3BlYykgeworICAgIGlmICgh
KEFMTF9DT01NQU5EU19TRVQuaGFzT3duUHJvcGVydHkoaykgJiYgQUxMX0NPTU1BTkRTX1NFVFtr
XSkpIHsKKyAgICAgIG5leHRWYWx1ZVtrXSA9IHVwZGF0ZSh2YWx1ZVtrXSwgc3BlY1trXSk7Cisg
ICAgfQorICB9CisKKyAgcmV0dXJuIG5leHRWYWx1ZTsKK30KKworbW9kdWxlLmV4cG9ydHMgPSB1
cGRhdGU7Cit9LHsiMzkiOjM5LCI0NyI6NDcsIjUwIjo1MH1dLDQzOltmdW5jdGlvbihfZGVyZXFf
LG1vZHVsZSxleHBvcnRzKXsKKyd1c2Ugc3RyaWN0JzsKKworLyoqCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxp
Y2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5
IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCBy
aWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0
b3J5LgorICoKKyAqIEB0eXBlY2hlY2tzCisgKi8KKwordmFyIGludmFyaWFudCA9IF9kZXJlcV8o
NDcpOworCisvKioKKyAqIFRoZSBDU1NDb3JlIG1vZHVsZSBzcGVjaWZpZXMgdGhlIEFQSSAoYW5k
IGltcGxlbWVudHMgbW9zdCBvZiB0aGUgbWV0aG9kcykKKyAqIHRoYXQgc2hvdWxkIGJlIHVzZWQg
d2hlbiBkZWFsaW5nIHdpdGggdGhlIGRpc3BsYXkgb2YgZWxlbWVudHMgKHZpYSB0aGVpcgorICog
Q1NTIGNsYXNzZXMgYW5kIHZpc2liaWxpdHkgb24gc2NyZWVuLiBJdCBpcyBhbiBBUEkgZm9jdXNl
ZCBvbiBtdXRhdGluZyB0aGUKKyAqIGRpc3BsYXkgYW5kIG5vdCByZWFkaW5nIGl0IGFzIG5vIGxv
Z2ljYWwgc3RhdGUgc2hvdWxkIGJlIGVuY29kZWQgaW4gdGhlCisgKiBkaXNwbGF5IG9mIGVsZW1l
bnRzLgorICovCisKKy8qIFNsb3cgaW1wbGVtZW50YXRpb24gZm9yIGJyb3dzZXJzIHRoYXQgZG9u
J3QgbmF0aXZlbHkgc3VwcG9ydCAubWF0Y2hlcygpICovCitmdW5jdGlvbiBtYXRjaGVzU2VsZWN0
b3JfU0xPVyhlbGVtZW50LCBzZWxlY3RvcikgeworICB2YXIgcm9vdCA9IGVsZW1lbnQ7CisgIHdo
aWxlIChyb290LnBhcmVudE5vZGUpIHsKKyAgICByb290ID0gcm9vdC5wYXJlbnROb2RlOworICB9
CisKKyAgdmFyIGFsbCA9IHJvb3QucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CisgIHJldHVy
biBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGFsbCwgZWxlbWVudCkgIT09IC0xOworfQor
Cit2YXIgQ1NTQ29yZSA9IHsKKworICAvKioKKyAgICogQWRkcyB0aGUgY2xhc3MgcGFzc2VkIGlu
IHRvIHRoZSBlbGVtZW50IGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBoYXZlIGl0LgorICAgKgorICAg
KiBAcGFyYW0ge0RPTUVsZW1lbnR9IGVsZW1lbnQgdGhlIGVsZW1lbnQgdG8gc2V0IHRoZSBjbGFz
cyBvbgorICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lIHRoZSBDU1MgY2xhc3NOYW1lCisg
ICAqIEByZXR1cm4ge0RPTUVsZW1lbnR9IHRoZSBlbGVtZW50IHBhc3NlZCBpbgorICAgKi8KKyAg
YWRkQ2xhc3M6IGZ1bmN0aW9uIGFkZENsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkgeworICAgICEh
L1xzLy50ZXN0KGNsYXNzTmFtZSkgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBp
bnZhcmlhbnQoZmFsc2UsICdDU1NDb3JlLmFkZENsYXNzIHRha2VzIG9ubHkgYSBzaW5nbGUgY2xh
c3MgbmFtZS4gIiVzIiBjb250YWlucyAnICsgJ211bHRpcGxlIGNsYXNzZXMuJywgY2xhc3NOYW1l
KSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7CisKKyAgICBpZiAoY2xhc3NOYW1lKSB7Cisg
ICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QpIHsKKyAgICAgICAgZWxlbWVudC5jbGFzc0xpc3Qu
YWRkKGNsYXNzTmFtZSk7CisgICAgICB9IGVsc2UgaWYgKCFDU1NDb3JlLmhhc0NsYXNzKGVsZW1l
bnQsIGNsYXNzTmFtZSkpIHsKKyAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSBlbGVtZW50LmNs
YXNzTmFtZSArICcgJyArIGNsYXNzTmFtZTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGVs
ZW1lbnQ7CisgIH0sCisKKyAgLyoqCisgICAqIFJlbW92ZXMgdGhlIGNsYXNzIHBhc3NlZCBpbiBm
cm9tIHRoZSBlbGVtZW50CisgICAqCisgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gZWxlbWVudCB0
aGUgZWxlbWVudCB0byBzZXQgdGhlIGNsYXNzIG9uCisgICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFz
c05hbWUgdGhlIENTUyBjbGFzc05hbWUKKyAgICogQHJldHVybiB7RE9NRWxlbWVudH0gdGhlIGVs
ZW1lbnQgcGFzc2VkIGluCisgICAqLworICByZW1vdmVDbGFzczogZnVuY3Rpb24gcmVtb3ZlQ2xh
c3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7CisgICAgISEvXHMvLnRlc3QoY2xhc3NOYW1lKSA/ICJk
ZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0NTU0NvcmUu
cmVtb3ZlQ2xhc3MgdGFrZXMgb25seSBhIHNpbmdsZSBjbGFzcyBuYW1lLiAiJXMiIGNvbnRhaW5z
ICcgKyAnbXVsdGlwbGUgY2xhc3Nlcy4nLCBjbGFzc05hbWUpIDogaW52YXJpYW50KGZhbHNlKSA6
IHZvaWQgMDsKKworICAgIGlmIChjbGFzc05hbWUpIHsKKyAgICAgIGlmIChlbGVtZW50LmNsYXNz
TGlzdCkgeworICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTsKKyAg
ICAgIH0gZWxzZSBpZiAoQ1NTQ29yZS5oYXNDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpKSB7Cisg
ICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gZWxlbWVudC5jbGFzc05hbWUucmVwbGFjZShuZXcg
UmVnRXhwKCcoXnxcXHMpJyArIGNsYXNzTmFtZSArICcoPzpcXHN8JCknLCAnZycpLCAnJDEnKS5y
ZXBsYWNlKC9ccysvZywgJyAnKSAvLyBtdWx0aXBsZSBzcGFjZXMgdG8gb25lCisgICAgICAgIC5y
ZXBsYWNlKC9eXHMqfFxzKiQvZywgJycpOyAvLyB0cmltIHRoZSBlbmRzCisgICAgICB9CisgICAg
fQorICAgIHJldHVybiBlbGVtZW50OworICB9LAorCisgIC8qKgorICAgKiBIZWxwZXIgdG8gYWRk
IG9yIHJlbW92ZSBhIGNsYXNzIGZyb20gYW4gZWxlbWVudCBiYXNlZCBvbiBhIGNvbmRpdGlvbi4K
KyAgICoKKyAgICogQHBhcmFtIHtET01FbGVtZW50fSBlbGVtZW50IHRoZSBlbGVtZW50IHRvIHNl
dCB0aGUgY2xhc3Mgb24KKyAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSB0aGUgQ1NTIGNs
YXNzTmFtZQorICAgKiBAcGFyYW0geyp9IGJvb2wgY29uZGl0aW9uIHRvIHdoZXRoZXIgdG8gYWRk
IG9yIHJlbW92ZSB0aGUgY2xhc3MKKyAgICogQHJldHVybiB7RE9NRWxlbWVudH0gdGhlIGVsZW1l
bnQgcGFzc2VkIGluCisgICAqLworICBjb25kaXRpb25DbGFzczogZnVuY3Rpb24gY29uZGl0aW9u
Q2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lLCBib29sKSB7CisgICAgcmV0dXJuIChib29sID8gQ1NT
Q29yZS5hZGRDbGFzcyA6IENTU0NvcmUucmVtb3ZlQ2xhc3MpKGVsZW1lbnQsIGNsYXNzTmFtZSk7
CisgIH0sCisKKyAgLyoqCisgICAqIFRlc3RzIHdoZXRoZXIgdGhlIGVsZW1lbnQgaGFzIHRoZSBj
bGFzcyBzcGVjaWZpZWQuCisgICAqCisgICAqIEBwYXJhbSB7RE9NTm9kZXxET01XaW5kb3d9IGVs
ZW1lbnQgdGhlIGVsZW1lbnQgdG8gY2hlY2sgdGhlIGNsYXNzIG9uCisgICAqIEBwYXJhbSB7c3Ry
aW5nfSBjbGFzc05hbWUgdGhlIENTUyBjbGFzc05hbWUKKyAgICogQHJldHVybiB7Ym9vbGVhbn0g
dHJ1ZSBpZiB0aGUgZWxlbWVudCBoYXMgdGhlIGNsYXNzLCBmYWxzZSBpZiBub3QKKyAgICovCisg
IGhhc0NsYXNzOiBmdW5jdGlvbiBoYXNDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpIHsKKyAgICAh
IS9ccy8udGVzdChjbGFzc05hbWUpID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8g
aW52YXJpYW50KGZhbHNlLCAnQ1NTLmhhc0NsYXNzIHRha2VzIG9ubHkgYSBzaW5nbGUgY2xhc3Mg
bmFtZS4nKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7CisgICAgaWYgKGVsZW1lbnQuY2xh
c3NMaXN0KSB7CisgICAgICByZXR1cm4gISFjbGFzc05hbWUgJiYgZWxlbWVudC5jbGFzc0xpc3Qu
Y29udGFpbnMoY2xhc3NOYW1lKTsKKyAgICB9CisgICAgcmV0dXJuICgnICcgKyBlbGVtZW50LmNs
YXNzTmFtZSArICcgJykuaW5kZXhPZignICcgKyBjbGFzc05hbWUgKyAnICcpID4gLTE7CisgIH0s
CisKKyAgLyoqCisgICAqIFRlc3RzIHdoZXRoZXIgdGhlIGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2Vs
ZWN0b3Igc3BlY2lmaWVkCisgICAqCisgICAqIEBwYXJhbSB7RE9NTm9kZXxET01XaW5kb3d9IGVs
ZW1lbnQgdGhlIGVsZW1lbnQgdGhhdCB3ZSBhcmUgcXVlcnlpbmcKKyAgICogQHBhcmFtIHtzdHJp
bmd9IHNlbGVjdG9yIHRoZSBDU1Mgc2VsZWN0b3IKKyAgICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1
ZSBpZiB0aGUgZWxlbWVudCBtYXRjaGVzIHRoZSBzZWxlY3RvciwgZmFsc2UgaWYgbm90CisgICAq
LworICBtYXRjaGVzU2VsZWN0b3I6IGZ1bmN0aW9uIG1hdGNoZXNTZWxlY3RvcihlbGVtZW50LCBz
ZWxlY3RvcikgeworICAgIHZhciBtYXRjaGVzSW1wbCA9IGVsZW1lbnQubWF0Y2hlcyB8fCBlbGVt
ZW50LndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fCBlbGVtZW50Lm1vek1hdGNoZXNTZWxlY3RvciB8
fCBlbGVtZW50Lm1zTWF0Y2hlc1NlbGVjdG9yIHx8IGZ1bmN0aW9uIChzKSB7CisgICAgICByZXR1
cm4gbWF0Y2hlc1NlbGVjdG9yX1NMT1coZWxlbWVudCwgcyk7CisgICAgfTsKKyAgICByZXR1cm4g
bWF0Y2hlc0ltcGwuY2FsbChlbGVtZW50LCBzZWxlY3Rvcik7CisgIH0KKworfTsKKworbW9kdWxl
LmV4cG9ydHMgPSBDU1NDb3JlOworfSx7IjQ3Ijo0N31dLDQ0OltmdW5jdGlvbihfZGVyZXFfLG1v
ZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vi
b29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNv
ZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQor
ICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVl
LiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBp
biB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3Vz
ZSBzdHJpY3QnOworCit2YXIgY2FuVXNlRE9NID0gISEodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVm
aW5lZCcgJiYgd2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50
KTsKKworLyoqCisgKiBTaW1wbGUsIGxpZ2h0d2VpZ2h0IG1vZHVsZSBhc3Npc3Rpbmcgd2l0aCB0
aGUgZGV0ZWN0aW9uIGFuZCBjb250ZXh0IG9mCisgKiBXb3JrZXIuIEhlbHBzIGF2b2lkIGNpcmN1
bGFyIGRlcGVuZGVuY2llcyBhbmQgYWxsb3dzIGNvZGUgdG8gcmVhc29uIGFib3V0CisgKiB3aGV0
aGVyIG9yIG5vdCB0aGV5IGFyZSBpbiBhIFdvcmtlciwgZXZlbiBpZiB0aGV5IG5ldmVyIGluY2x1
ZGUgdGhlIG1haW4KKyAqIGBSZWFjdFdvcmtlcmAgZGVwZW5kZW5jeS4KKyAqLwordmFyIEV4ZWN1
dGlvbkVudmlyb25tZW50ID0geworCisgIGNhblVzZURPTTogY2FuVXNlRE9NLAorCisgIGNhblVz
ZVdvcmtlcnM6IHR5cGVvZiBXb3JrZXIgIT09ICd1bmRlZmluZWQnLAorCisgIGNhblVzZUV2ZW50
TGlzdGVuZXJzOiBjYW5Vc2VET00gJiYgISEod2luZG93LmFkZEV2ZW50TGlzdGVuZXIgfHwgd2lu
ZG93LmF0dGFjaEV2ZW50KSwKKworICBjYW5Vc2VWaWV3cG9ydDogY2FuVXNlRE9NICYmICEhd2lu
ZG93LnNjcmVlbiwKKworICBpc0luV29ya2VyOiAhY2FuVXNlRE9NIC8vIEZvciBub3csIHRoaXMg
aXMgdHJ1ZSAtIG1pZ2h0IGNoYW5nZSBpbiB0aGUgZnV0dXJlLgorCit9OworCittb2R1bGUuZXhw
b3J0cyA9IEV4ZWN1dGlvbkVudmlyb25tZW50OworfSx7fV0sNDU6W2Z1bmN0aW9uKF9kZXJlcV8s
bW9kdWxlLGV4cG9ydHMpeworInVzZSBzdHJpY3QiOworCisvKioKKyAqIENvcHlyaWdodCAoYykg
MjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGlj
ZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkg
b2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJp
Z2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rv
cnkuCisgKgorICogCisgKi8KKworZnVuY3Rpb24gbWFrZUVtcHR5RnVuY3Rpb24oYXJnKSB7Cisg
IHJldHVybiBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIGFyZzsKKyAgfTsKK30KKworLyoqCisg
KiBUaGlzIGZ1bmN0aW9uIGFjY2VwdHMgYW5kIGRpc2NhcmRzIGlucHV0czsgaXQgaGFzIG5vIHNp
ZGUgZWZmZWN0cy4gVGhpcyBpcworICogcHJpbWFyaWx5IHVzZWZ1bCBpZGlvbWF0aWNhbGx5IGZv
ciBvdmVycmlkYWJsZSBmdW5jdGlvbiBlbmRwb2ludHMgd2hpY2gKKyAqIGFsd2F5cyBuZWVkIHRv
IGJlIGNhbGxhYmxlLCBzaW5jZSBKUyBsYWNrcyBhIG51bGwtY2FsbCBpZGlvbSBhbGEgQ29jb2Eu
CisgKi8KK3ZhciBlbXB0eUZ1bmN0aW9uID0gZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9Owor
CitlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zID0gbWFrZUVtcHR5RnVuY3Rpb247CitlbXB0eUZ1
bmN0aW9uLnRoYXRSZXR1cm5zRmFsc2UgPSBtYWtlRW1wdHlGdW5jdGlvbihmYWxzZSk7CitlbXB0
eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVHJ1ZSA9IG1ha2VFbXB0eUZ1bmN0aW9uKHRydWUpOworZW1w
dHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGwgPSBtYWtlRW1wdHlGdW5jdGlvbihudWxsKTsKK2Vt
cHR5RnVuY3Rpb24udGhhdFJldHVybnNUaGlzID0gZnVuY3Rpb24gKCkgeworICByZXR1cm4gdGhp
czsKK307CitlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zQXJndW1lbnQgPSBmdW5jdGlvbiAoYXJn
KSB7CisgIHJldHVybiBhcmc7Cit9OworCittb2R1bGUuZXhwb3J0cyA9IGVtcHR5RnVuY3Rpb247
Cit9LHt9XSw0NjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENv
cHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBC
U0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICog
b2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUg
c2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIGVtcHR5T2Jq
ZWN0ID0ge307CisKK2lmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgT2Jq
ZWN0LmZyZWV6ZShlbXB0eU9iamVjdCk7Cit9CisKK21vZHVsZS5leHBvcnRzID0gZW1wdHlPYmpl
Y3Q7Cit9LHt9XSw0NzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAq
IENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAor
ICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0
aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKworLyoqCisgKiBV
c2UgaW52YXJpYW50KCkgdG8gYXNzZXJ0IHN0YXRlIHdoaWNoIHlvdXIgcHJvZ3JhbSBhc3N1bWVz
IHRvIGJlIHRydWUuCisgKgorICogUHJvdmlkZSBzcHJpbnRmLXN0eWxlIGZvcm1hdCAob25seSAl
cyBpcyBzdXBwb3J0ZWQpIGFuZCBhcmd1bWVudHMKKyAqIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24g
YWJvdXQgd2hhdCBicm9rZSBhbmQgd2hhdCB5b3Ugd2VyZQorICogZXhwZWN0aW5nLgorICoKKyAq
IFRoZSBpbnZhcmlhbnQgbWVzc2FnZSB3aWxsIGJlIHN0cmlwcGVkIGluIHByb2R1Y3Rpb24sIGJ1
dCB0aGUgaW52YXJpYW50CisgKiB3aWxsIHJlbWFpbiB0byBlbnN1cmUgbG9naWMgZG9lcyBub3Qg
ZGlmZmVyIGluIHByb2R1Y3Rpb24uCisgKi8KKwordmFyIHZhbGlkYXRlRm9ybWF0ID0gZnVuY3Rp
b24gdmFsaWRhdGVGb3JtYXQoZm9ybWF0KSB7fTsKKworaWYgKCJkZXZlbG9wbWVudCIgIT09ICdw
cm9kdWN0aW9uJykgeworICB2YWxpZGF0ZUZvcm1hdCA9IGZ1bmN0aW9uIHZhbGlkYXRlRm9ybWF0
KGZvcm1hdCkgeworICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkgeworICAgICAgdGhyb3cg
bmV3IEVycm9yKCdpbnZhcmlhbnQgcmVxdWlyZXMgYW4gZXJyb3IgbWVzc2FnZSBhcmd1bWVudCcp
OworICAgIH0KKyAgfTsKK30KKworZnVuY3Rpb24gaW52YXJpYW50KGNvbmRpdGlvbiwgZm9ybWF0
LCBhLCBiLCBjLCBkLCBlLCBmKSB7CisgIHZhbGlkYXRlRm9ybWF0KGZvcm1hdCk7CisKKyAgaWYg
KCFjb25kaXRpb24pIHsKKyAgICB2YXIgZXJyb3I7CisgICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZp
bmVkKSB7CisgICAgICBlcnJvciA9IG5ldyBFcnJvcignTWluaWZpZWQgZXhjZXB0aW9uIG9jY3Vy
cmVkOyB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgJyArICdmb3IgdGhlIGZ1
bGwgZXJyb3IgbWVzc2FnZSBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLicpOworICAg
IH0gZWxzZSB7CisgICAgICB2YXIgYXJncyA9IFthLCBiLCBjLCBkLCBlLCBmXTsKKyAgICAgIHZh
ciBhcmdJbmRleCA9IDA7CisgICAgICBlcnJvciA9IG5ldyBFcnJvcihmb3JtYXQucmVwbGFjZSgv
JXMvZywgZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTsKKyAg
ICAgIH0pKTsKKyAgICAgIGVycm9yLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7CisgICAg
fQorCisgICAgZXJyb3IuZnJhbWVzVG9Qb3AgPSAxOyAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IGlu
dmFyaWFudCdzIG93biBmcmFtZQorICAgIHRocm93IGVycm9yOworICB9Cit9CisKK21vZHVsZS5l
eHBvcnRzID0gaW52YXJpYW50OworfSx7fV0sNDg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4
cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIElu
Yy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBs
aWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQ
QVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqIEB0eXBlY2hlY2tzCisg
KiAKKyAqLworCisvKmVzbGludC1kaXNhYmxlIG5vLXNlbGYtY29tcGFyZSAqLworCisndXNlIHN0
cmljdCc7CisKK3ZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJv
cGVydHk7CisKKy8qKgorICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVx
dWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93bgorICogaHR0cHM6Ly9kZXZlbG9wZXIubW96
aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVj
dHMvT2JqZWN0L2lzCisgKi8KK2Z1bmN0aW9uIGlzKHgsIHkpIHsKKyAgLy8gU2FtZVZhbHVlIGFs
Z29yaXRobQorICBpZiAoeCA9PT0geSkgeworICAgIC8vIFN0ZXBzIDEtNSwgNy0xMAorICAgIC8v
IFN0ZXBzIDYuYi02LmU6ICswICE9IC0wCisgICAgLy8gQWRkZWQgdGhlIG5vbnplcm8geSBjaGVj
ayB0byBtYWtlIEZsb3cgaGFwcHksIGJ1dCBpdCBpcyByZWR1bmRhbnQKKyAgICByZXR1cm4geCAh
PT0gMCB8fCB5ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geTsKKyAgfSBlbHNlIHsKKyAgICAvLyBT
dGVwIDYuYTogTmFOID09IE5hTgorICAgIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7CisgIH0K
K30KKworLyoqCisgKiBQZXJmb3JtcyBlcXVhbGl0eSBieSBpdGVyYXRpbmcgdGhyb3VnaCBrZXlz
IG9uIGFuIG9iamVjdCBhbmQgcmV0dXJuaW5nIGZhbHNlCisgKiB3aGVuIGFueSBrZXkgaGFzIHZh
bHVlcyB3aGljaCBhcmUgbm90IHN0cmljdGx5IGVxdWFsIGJldHdlZW4gdGhlIGFyZ3VtZW50cy4K
KyAqIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSB2YWx1ZXMgb2YgYWxsIGtleXMgYXJlIHN0cmljdGx5
IGVxdWFsLgorICovCitmdW5jdGlvbiBzaGFsbG93RXF1YWwob2JqQSwgb2JqQikgeworICBpZiAo
aXMob2JqQSwgb2JqQikpIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIGlmICh0eXBlb2Yg
b2JqQSAhPT0gJ29iamVjdCcgfHwgb2JqQSA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqQiAhPT0gJ29i
amVjdCcgfHwgb2JqQiA9PT0gbnVsbCkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHZh
ciBrZXlzQSA9IE9iamVjdC5rZXlzKG9iakEpOworICB2YXIga2V5c0IgPSBPYmplY3Qua2V5cyhv
YmpCKTsKKworICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHsKKyAgICByZXR1
cm4gZmFsc2U7CisgIH0KKworICAvLyBUZXN0IGZvciBBJ3Mga2V5cyBkaWZmZXJlbnQgZnJvbSBC
LgorICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXNBLmxlbmd0aDsgaSsrKSB7CisgICAgaWYgKCFo
YXNPd25Qcm9wZXJ0eS5jYWxsKG9iakIsIGtleXNBW2ldKSB8fCAhaXMob2JqQVtrZXlzQVtpXV0s
IG9iakJba2V5c0FbaV1dKSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorCisg
IHJldHVybiB0cnVlOworfQorCittb2R1bGUuZXhwb3J0cyA9IHNoYWxsb3dFcXVhbDsKK30se31d
LDQ5OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0
IDIwMTQtMjAxNSwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vu
c2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9m
IHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdo
dHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5
LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBlbXB0eUZ1bmN0aW9uID0gX2RlcmVx
Xyg0NSk7CisKKy8qKgorICogU2ltaWxhciB0byBpbnZhcmlhbnQgYnV0IG9ubHkgbG9ncyBhIHdh
cm5pbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LgorICogVGhpcyBjYW4gYmUgdXNlZCB0
byBsb2cgaXNzdWVzIGluIGRldmVsb3BtZW50IGVudmlyb25tZW50cyBpbiBjcml0aWNhbAorICog
cGF0aHMuIFJlbW92aW5nIHRoZSBsb2dnaW5nIGNvZGUgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1l
bnRzIHdpbGwga2VlcCB0aGUKKyAqIHNhbWUgbG9naWMgYW5kIGZvbGxvdyB0aGUgc2FtZSBjb2Rl
IHBhdGhzLgorICovCisKK3ZhciB3YXJuaW5nID0gZW1wdHlGdW5jdGlvbjsKKworaWYgKCJkZXZl
bG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAoZnVuY3Rpb24gKCkgeworICAgIHZhciBw
cmludFdhcm5pbmcgPSBmdW5jdGlvbiBwcmludFdhcm5pbmcoZm9ybWF0KSB7CisgICAgICBmb3Ig
KHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAxID8gX2xl
biAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKKyAgICAgICAgYXJn
c1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07CisgICAgICB9CisKKyAgICAgIHZhciBhcmdJ
bmRleCA9IDA7CisgICAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgZm9ybWF0LnJlcGxh
Y2UoLyVzL2csIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107
CisgICAgICB9KTsKKyAgICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHsK
KyAgICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTsKKyAgICAgIH0KKyAgICAgIHRyeSB7Cisg
ICAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS0KKyAgICAgICAgLy8g
VGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVz
ZSB0aGlzIHN0YWNrCisgICAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2Vk
IHRoaXMgd2FybmluZyB0byBmaXJlLgorICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7
CisgICAgICB9IGNhdGNoICh4KSB7fQorICAgIH07CisKKyAgICB3YXJuaW5nID0gZnVuY3Rpb24g
d2FybmluZyhjb25kaXRpb24sIGZvcm1hdCkgeworICAgICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZp
bmVkKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcignYHdhcm5pbmcoY29uZGl0aW9uLCBmb3Jt
YXQsIC4uLmFyZ3MpYCByZXF1aXJlcyBhIHdhcm5pbmcgJyArICdtZXNzYWdlIGFyZ3VtZW50Jyk7
CisgICAgICB9CisKKyAgICAgIGlmIChmb3JtYXQuaW5kZXhPZignRmFpbGVkIENvbXBvc2l0ZSBw
cm9wVHlwZTogJykgPT09IDApIHsKKyAgICAgICAgcmV0dXJuOyAvLyBJZ25vcmUgQ29tcG9zaXRl
Q29tcG9uZW50IHByb3B0eXBlIGNoZWNrLgorICAgICAgfQorCisgICAgICBpZiAoIWNvbmRpdGlv
bikgeworICAgICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBB
cnJheShfbGVuMiA+IDIgPyBfbGVuMiAtIDIgOiAwKSwgX2tleTIgPSAyOyBfa2V5MiA8IF9sZW4y
OyBfa2V5MisrKSB7CisgICAgICAgICAgYXJnc1tfa2V5MiAtIDJdID0gYXJndW1lbnRzW19rZXky
XTsKKyAgICAgICAgfQorCisgICAgICAgIHByaW50V2FybmluZy5hcHBseSh1bmRlZmluZWQsIFtm
b3JtYXRdLmNvbmNhdChhcmdzKSk7CisgICAgICB9CisgICAgfTsKKyAgfSkoKTsKK30KKworbW9k
dWxlLmV4cG9ydHMgPSB3YXJuaW5nOworfSx7IjQ1Ijo0NX1dLDUwOltmdW5jdGlvbihfZGVyZXFf
LG1vZHVsZSxleHBvcnRzKXsKKy8qCitvYmplY3QtYXNzaWduCisoYykgU2luZHJlIFNvcmh1cwor
QGxpY2Vuc2UgTUlUCisqLworCisndXNlIHN0cmljdCc7CisvKiBlc2xpbnQtZGlzYWJsZSBuby11
bnVzZWQtdmFycyAqLwordmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Q
cm9wZXJ0eVN5bWJvbHM7Cit2YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhh
c093blByb3BlcnR5OwordmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnBy
b3BlcnR5SXNFbnVtZXJhYmxlOworCitmdW5jdGlvbiB0b09iamVjdCh2YWwpIHsKKyAgICBpZiAo
dmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgIHRocm93IG5ldyBU
eXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5k
ZWZpbmVkJyk7CisgICAgfQorCisgICAgcmV0dXJuIE9iamVjdCh2YWwpOworfQorCitmdW5jdGlv
biBzaG91bGRVc2VOYXRpdmUoKSB7CisgICAgdHJ5IHsKKyAgICAgICAgaWYgKCFPYmplY3QuYXNz
aWduKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICAv
LyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVy
c2lvbnMuCisKKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vl
cy9kZXRhaWw/aWQ9NDExOAorICAgICAgICB2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsg
IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzCisgICAgICAgIHRlc3QxWzVd
ID0gJ2RlJzsKKyAgICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVsw
XSA9PT0gJzUnKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0z
MDU2CisgICAgICAgIHZhciB0ZXN0MiA9IHt9OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IDEwOyBpKyspIHsKKyAgICAgICAgICAgIHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUo
aSldID0gaTsKKyAgICAgICAgfQorICAgICAgICB2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blBy
b3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikgeworICAgICAgICAgICAgcmV0dXJu
IHRlc3QyW25dOworICAgICAgICB9KTsKKyAgICAgICAgaWYgKG9yZGVyMi5qb2luKCcnKSAhPT0g
JzAxMjM0NTY3ODknKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9p
ZD0zMDU2CisgICAgICAgIHZhciB0ZXN0MyA9IHt9OworICAgICAgICAnYWJjZGVmZ2hpamtsbW5v
cHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHsKKyAgICAgICAgICAg
IHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7CisgICAgICAgIH0pOworICAgICAgICBpZiAoT2JqZWN0
LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT0KKyAgICAgICAgICAg
ICAgICAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGNhdGNoIChlcnIpIHsK
KyAgICAgICAgLy8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1
dCBiZXR0ZXIgdG8gYmUgc2FmZS4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
bW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5j
dGlvbiAodGFyZ2V0LCBzb3VyY2UpIHsKKyAgICB2YXIgZnJvbTsKKyAgICB2YXIgdG8gPSB0b09i
amVjdCh0YXJnZXQpOworICAgIHZhciBzeW1ib2xzOworCisgICAgZm9yICh2YXIgcyA9IDE7IHMg
PCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHsKKyAgICAgICAgZnJvbSA9IE9iamVjdChhcmd1bWVu
dHNbc10pOworCisgICAgICAgIGZvciAodmFyIGtleSBpbiBmcm9tKSB7CisgICAgICAgICAgICBp
ZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7CisgICAgICAgICAgICAgICAgdG9b
a2V5XSA9IGZyb21ba2V5XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlm
IChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsKKyAgICAgICAgICAgIHN5bWJvbHMgPSBnZXRPd25Q
cm9wZXJ0eVN5bWJvbHMoZnJvbSk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN5
bWJvbHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAocHJvcElzRW51bWVyYWJs
ZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7CisgICAgICAgICAgICAgICAgICAgIHRvW3N5bWJv
bHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdG87Cit9OworCit9LHt9XSw1MTpb
ZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEz
LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNl
IGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0
aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRz
IGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4K
KyAqLworCisndXNlIHN0cmljdCc7CisKK2lmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlv
bicpIHsKKyAgdmFyIGludmFyaWFudCA9IF9kZXJlcV8oNDcpOworICB2YXIgd2FybmluZyA9IF9k
ZXJlcV8oNDkpOworICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSBfZGVyZXFfKDU0KTsKKyAg
dmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9OworfQorCisvKioKKyAqIEFzc2VydCB0aGF0IHRo
ZSB2YWx1ZXMgbWF0Y2ggd2l0aCB0aGUgdHlwZSBzcGVjcy4KKyAqIEVycm9yIG1lc3NhZ2VzIGFy
ZSBtZW1vcml6ZWQgYW5kIHdpbGwgb25seSBiZSBzaG93biBvbmNlLgorICoKKyAqIEBwYXJhbSB7
b2JqZWN0fSB0eXBlU3BlY3MgTWFwIG9mIG5hbWUgdG8gYSBSZWFjdFByb3BUeXBlCisgKiBAcGFy
YW0ge29iamVjdH0gdmFsdWVzIFJ1bnRpbWUgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSB0eXBlLWNo
ZWNrZWQKKyAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlvbiBlLmcuICJwcm9wIiwgImNvbnRleHQi
LCAiY2hpbGQgY29udGV4dCIKKyAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnROYW1lIE5hbWUg
b2YgdGhlIGNvbXBvbmVudCBmb3IgZXJyb3IgbWVzc2FnZXMuCisgKiBAcGFyYW0gez9GdW5jdGlv
bn0gZ2V0U3RhY2sgUmV0dXJucyB0aGUgY29tcG9uZW50IHN0YWNrLgorICogQHByaXZhdGUKKyAq
LworZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBj
b21wb25lbnROYW1lLCBnZXRTdGFjaykgeworICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1
Y3Rpb24nKSB7CisgICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykgeworICAg
ICAgaWYgKHR5cGVTcGVjcy5oYXNPd25Qcm9wZXJ0eSh0eXBlU3BlY05hbWUpKSB7CisgICAgICAg
IHZhciBlcnJvcjsKKyAgICAgICAgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJ
biBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG8KKyAgICAgICAgLy8gZmFpbCB0aGUgcmVu
ZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LgorICAg
ICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0g
dGhyb3cuCisgICAgICAgIHRyeSB7CisgICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5
IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lCisgICAgICAgICAg
Ly8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRl
ciBtZXNzYWdlLgorICAgICAgICAgIGludmFyaWFudCh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVj
TmFtZV0gPT09ICdmdW5jdGlvbicsICclczogJXMgdHlwZSBgJXNgIGlzIGludmFsaWQ7IGl0IG11
c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tICcgKyAnUmVhY3QuUHJvcFR5cGVzLicsIGNv
bXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgbG9jYXRpb24sIHR5cGVTcGVjTmFtZSk7Cisg
ICAgICAgICAgZXJyb3IgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVj
TmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsIFJlYWN0UHJvcFR5cGVzU2VjcmV0
KTsKKyAgICAgICAgfSBjYXRjaCAoZXgpIHsKKyAgICAgICAgICBlcnJvciA9IGV4OworICAgICAg
ICB9CisgICAgICAgIHdhcm5pbmcoIWVycm9yIHx8IGVycm9yIGluc3RhbmNlb2YgRXJyb3IsICcl
czogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICVzIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hl
Y2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCBy
ZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1
bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VP
Ziwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJl
IGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9u
LCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvcik7CisgICAgICAgIGlmIChlcnJvciBpbnN0YW5j
ZW9mIEVycm9yICYmICEoZXJyb3IubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7Cisg
ICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUg
dGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlCisgICAgICAgICAgLy8gc2FtZSBlcnJvci4KKyAgICAg
ICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IubWVzc2FnZV0gPSB0cnVlOworCisgICAgICAg
ICAgdmFyIHN0YWNrID0gZ2V0U3RhY2sgPyBnZXRTdGFjaygpIDogJyc7CisKKyAgICAgICAgICB3
YXJuaW5nKGZhbHNlLCAnRmFpbGVkICVzIHR5cGU6ICVzJXMnLCBsb2NhdGlvbiwgZXJyb3IubWVz
c2FnZSwgc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycpOworICAgICAgICB9CisgICAgICB9Cisg
ICAgfQorICB9Cit9CisKK21vZHVsZS5leHBvcnRzID0gY2hlY2tQcm9wVHlwZXM7CisKK30seyI0
NyI6NDcsIjQ5Ijo0OSwiNTQiOjU0fV0sNTI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9y
dHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2Vk
IHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25h
bCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMg
ZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKi8KKworJ3VzZSBzdHJpY3QnOworCisvLyBS
ZWFjdCAxNS41IHJlZmVyZW5jZXMgdGhpcyBtb2R1bGUsIGFuZCBhc3N1bWVzIFByb3BUeXBlcyBh
cmUgc3RpbGwgY2FsbGFibGUgaW4gcHJvZHVjdGlvbi4KKy8vIFRoZXJlZm9yZSB3ZSByZS1leHBv
cnQgZGV2ZWxvcG1lbnQtb25seSB2ZXJzaW9uIHdpdGggYWxsIHRoZSBQcm9wVHlwZXMgY2hlY2tz
IGhlcmUuCisvLyBIb3dldmVyIGlmIG9uZSBpcyBtaWdyYXRpbmcgdG8gdGhlIGBwcm9wLXR5cGVz
YCBucG0gbGlicmFyeSwgdGhleSB3aWxsIGdvIHRocm91Z2ggdGhlCisvLyBgaW5kZXguanNgIGVu
dHJ5IHBvaW50LCBhbmQgaXQgd2lsbCBicmFuY2ggZGVwZW5kaW5nIG9uIHRoZSBlbnZpcm9ubWVu
dC4KK3ZhciBmYWN0b3J5ID0gX2RlcmVxXyg1Myk7Cittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9u
KGlzVmFsaWRFbGVtZW50KSB7CisgIC8vIEl0IGlzIHN0aWxsIGFsbG93ZWQgaW4gMTUuNS4KKyAg
dmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSBmYWxzZTsKKyAgcmV0dXJuIGZhY3RvcnkoaXNWYWxp
ZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpOworfTsKKworfSx7IjUzIjo1M31dLDUzOltm
dW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMt
cHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2Ug
Zm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRo
aXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMg
Y2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5Lgor
ICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIGVtcHR5RnVuY3Rpb24gPSBfZGVyZXFfKDQ1KTsK
K3ZhciBpbnZhcmlhbnQgPSBfZGVyZXFfKDQ3KTsKK3ZhciB3YXJuaW5nID0gX2RlcmVxXyg0OSk7
CisKK3ZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IF9kZXJlcV8oNTQpOwordmFyIGNoZWNrUHJv
cFR5cGVzID0gX2RlcmVxXyg1MSk7CisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXNWYWxp
ZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpIHsKKyAgLyogZ2xvYmFsIFN5bWJvbCAqLwor
ICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBT
eW1ib2wuaXRlcmF0b3I7CisgIHZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9y
JzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLgorCisgIC8qKgorICAgKiBSZXR1cm5zIHRoZSBpdGVy
YXRvciBtZXRob2QgZnVuY3Rpb24gY29udGFpbmVkIG9uIHRoZSBpdGVyYWJsZSBvYmplY3QuCisg
ICAqCisgICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJs
ZSBhcyBjb250ZXh0OgorICAgKgorICAgKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRv
ckZuKG15SXRlcmFibGUpOworICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHsKKyAgICogICAgICAg
dmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG15SXRlcmFibGUpOworICAgKiAgICAgICAu
Li4KKyAgICogICAgIH0KKyAgICoKKyAgICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxl
CisgICAqIEByZXR1cm4gez9mdW5jdGlvbn0KKyAgICovCisgIGZ1bmN0aW9uIGdldEl0ZXJhdG9y
Rm4obWF5YmVJdGVyYWJsZSkgeworICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAm
JiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBt
YXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7CisgICAgaWYgKHR5cGVvZiBpdGVy
YXRvckZuID09PSAnZnVuY3Rpb24nKSB7CisgICAgICByZXR1cm4gaXRlcmF0b3JGbjsKKyAgICB9
CisgIH0KKworICAvKioKKyAgICogQ29sbGVjdGlvbiBvZiBtZXRob2RzIHRoYXQgYWxsb3cgZGVj
bGFyYXRpb24gYW5kIHZhbGlkYXRpb24gb2YgcHJvcHMgdGhhdCBhcmUKKyAgICogc3VwcGxpZWQg
dG8gUmVhY3QgY29tcG9uZW50cy4gRXhhbXBsZSB1c2FnZToKKyAgICoKKyAgICogICB2YXIgUHJv
cHMgPSByZXF1aXJlKCdSZWFjdFByb3BUeXBlcycpOworICAgKiAgIHZhciBNeUFydGljbGUgPSBS
ZWFjdC5jcmVhdGVDbGFzcyh7CisgICAqICAgICBwcm9wVHlwZXM6IHsKKyAgICogICAgICAgLy8g
QW4gb3B0aW9uYWwgc3RyaW5nIHByb3AgbmFtZWQgImRlc2NyaXB0aW9uIi4KKyAgICogICAgICAg
ZGVzY3JpcHRpb246IFByb3BzLnN0cmluZywKKyAgICoKKyAgICogICAgICAgLy8gQSByZXF1aXJl
ZCBlbnVtIHByb3AgbmFtZWQgImNhdGVnb3J5Ii4KKyAgICogICAgICAgY2F0ZWdvcnk6IFByb3Bz
Lm9uZU9mKFsnTmV3cycsJ1Bob3RvcyddKS5pc1JlcXVpcmVkLAorICAgKgorICAgKiAgICAgICAv
LyBBIHByb3AgbmFtZWQgImRpYWxvZyIgdGhhdCByZXF1aXJlcyBhbiBpbnN0YW5jZSBvZiBEaWFs
b2cuCisgICAqICAgICAgIGRpYWxvZzogUHJvcHMuaW5zdGFuY2VPZihEaWFsb2cpLmlzUmVxdWly
ZWQKKyAgICogICAgIH0sCisgICAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeyAuLi4gfQorICAg
KiAgIH0pOworICAgKgorICAgKiBBIG1vcmUgZm9ybWFsIHNwZWNpZmljYXRpb24gb2YgaG93IHRo
ZXNlIG1ldGhvZHMgYXJlIHVzZWQ6CisgICAqCisgICAqICAgdHlwZSA6PSBhcnJheXxib29sfGZ1
bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3RhbmNlT2YoLi4uKQorICAg
KiAgIGRlY2wgOj0gUmVhY3RQcm9wVHlwZXMue3R5cGV9KC5pc1JlcXVpcmVkKT8KKyAgICoKKyAg
ICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRo
ZSBzYW1lIHNpZ25hdHVyZS4gVGhpcworICAgKiBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGN1c3Rv
bSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6CisgICAqCisgICAqICB2YXIgTXlM
aW5rID0gUmVhY3QuY3JlYXRlQ2xhc3MoeworICAgKiAgICBwcm9wVHlwZXM6IHsKKyAgICogICAg
ICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgb3IgVVJJIHByb3AgbmFtZWQgImhyZWYiLgorICAgKiAg
ICAgIGhyZWY6IGZ1bmN0aW9uKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkgeworICAg
KiAgICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTsKKyAgICogICAgICAgIGlm
IChwcm9wVmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgcHJvcFZhbHVlICE9PSAnc3RyaW5nJyAmJgor
ICAgKiAgICAgICAgICAgICEocHJvcFZhbHVlIGluc3RhbmNlb2YgVVJJKSkgeworICAgKiAgICAg
ICAgICByZXR1cm4gbmV3IEVycm9yKAorICAgKiAgICAgICAgICAgICdFeHBlY3RlZCBhIHN0cmlu
ZyBvciBhbiBVUkkgZm9yICcgKyBwcm9wTmFtZSArICcgaW4gJyArCisgICAqICAgICAgICAgICAg
Y29tcG9uZW50TmFtZQorICAgKiAgICAgICAgICApOworICAgKiAgICAgICAgfQorICAgKiAgICAg
IH0KKyAgICogICAgfSwKKyAgICogICAgcmVuZGVyOiBmdW5jdGlvbigpIHsuLi59CisgICAqICB9
KTsKKyAgICoKKyAgICogQGludGVybmFsCisgICAqLworCisgIHZhciBBTk9OWU1PVVMgPSAnPDxh
bm9ueW1vdXM+Pic7CisKKyAgLy8gSW1wb3J0YW50IQorICAvLyBLZWVwIHRoaXMgbGlzdCBpbiBz
eW5jIHdpdGggcHJvZHVjdGlvbiB2ZXJzaW9uIGluIGAuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGlt
cy5qc2AuCisgIHZhciBSZWFjdFByb3BUeXBlcyA9IHsKKyAgICBhcnJheTogY3JlYXRlUHJpbWl0
aXZlVHlwZUNoZWNrZXIoJ2FycmF5JyksCisgICAgYm9vbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNo
ZWNrZXIoJ2Jvb2xlYW4nKSwKKyAgICBmdW5jOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcign
ZnVuY3Rpb24nKSwKKyAgICBudW1iZXI6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdudW1i
ZXInKSwKKyAgICBvYmplY3Q6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdvYmplY3QnKSwK
KyAgICBzdHJpbmc6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdzdHJpbmcnKSwKKyAgICBz
eW1ib2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdzeW1ib2wnKSwKKworICAgIGFueTog
Y3JlYXRlQW55VHlwZUNoZWNrZXIoKSwKKyAgICBhcnJheU9mOiBjcmVhdGVBcnJheU9mVHlwZUNo
ZWNrZXIsCisgICAgZWxlbWVudDogY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCksCisgICAgaW5z
dGFuY2VPZjogY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlciwKKyAgICBub2RlOiBjcmVhdGVOb2Rl
Q2hlY2tlcigpLAorICAgIG9iamVjdE9mOiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyLAorICAg
IG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsCisgICAgb25lT2ZUeXBlOiBjcmVhdGVVbmlv
blR5cGVDaGVja2VyLAorICAgIHNoYXBlOiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyCisgIH07CisK
KyAgLyoqCisgICAqIGlubGluZWQgT2JqZWN0LmlzIHBvbHlmaWxsIHRvIGF2b2lkIHJlcXVpcmlu
ZyBjb25zdW1lcnMgc2hpcCB0aGVpciBvd24KKyAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxs
YS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMv
T2JqZWN0L2lzCisgICAqLworICAvKmVzbGludC1kaXNhYmxlIG5vLXNlbGYtY29tcGFyZSovCisg
IGZ1bmN0aW9uIGlzKHgsIHkpIHsKKyAgICAvLyBTYW1lVmFsdWUgYWxnb3JpdGhtCisgICAgaWYg
KHggPT09IHkpIHsKKyAgICAgIC8vIFN0ZXBzIDEtNSwgNy0xMAorICAgICAgLy8gU3RlcHMgNi5i
LTYuZTogKzAgIT0gLTAKKyAgICAgIHJldHVybiB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geTsK
KyAgICB9IGVsc2UgeworICAgICAgLy8gU3RlcCA2LmE6IE5hTiA9PSBOYU4KKyAgICAgIHJldHVy
biB4ICE9PSB4ICYmIHkgIT09IHk7CisgICAgfQorICB9CisgIC8qZXNsaW50LWVuYWJsZSBuby1z
ZWxmLWNvbXBhcmUqLworCisgIC8qKgorICAgKiBXZSB1c2UgYW4gRXJyb3ItbGlrZSBvYmplY3Qg
Zm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYXMgcGVvcGxlIG1heSBjYWxsCisgICAqIFByb3BU
eXBlcyBkaXJlY3RseSBhbmQgaW5zcGVjdCB0aGVpciBvdXRwdXQuIEhvd2V2ZXIsIHdlIGRvbid0
IHVzZSByZWFsCisgICAqIEVycm9ycyBhbnltb3JlLiBXZSBkb24ndCBpbnNwZWN0IHRoZWlyIHN0
YWNrIGFueXdheSwgYW5kIGNyZWF0aW5nIHRoZW0KKyAgICogaXMgcHJvaGliaXRpdmVseSBleHBl
bnNpdmUgaWYgdGhleSBhcmUgY3JlYXRlZCB0b28gb2Z0ZW4sIHN1Y2ggYXMgd2hhdAorICAgKiBo
YXBwZW5zIGluIG9uZU9mVHlwZSgpIGZvciBhbnkgdHlwZSBiZWZvcmUgdGhlIG9uZSB0aGF0IG1h
dGNoZWQuCisgICAqLworICBmdW5jdGlvbiBQcm9wVHlwZUVycm9yKG1lc3NhZ2UpIHsKKyAgICB0
aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHRoaXMuc3RhY2sgPSAnJzsKKyAgfQorICAvLyBN
YWtlIGBpbnN0YW5jZW9mIEVycm9yYCBzdGlsbCB3b3JrIGZvciByZXR1cm5lZCBlcnJvcnMuCisg
IFByb3BUeXBlRXJyb3IucHJvdG90eXBlID0gRXJyb3IucHJvdG90eXBlOworCisgIGZ1bmN0aW9u
IGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKSB7CisgICAgaWYgKCJkZXZlbG9w
bWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgICAgdmFyIG1hbnVhbFByb3BUeXBlQ2FsbENh
Y2hlID0ge307CisgICAgfQorICAgIGZ1bmN0aW9uIGNoZWNrVHlwZShpc1JlcXVpcmVkLCBwcm9w
cywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3Jl
dCkgeworICAgICAgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgfHwgQU5PTllNT1VTOwor
ICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lOworCisgICAgICBp
ZiAoc2VjcmV0ICE9PSBSZWFjdFByb3BUeXBlc1NlY3JldCkgeworICAgICAgICBpZiAodGhyb3dP
bkRpcmVjdEFjY2VzcykgeworICAgICAgICAgIC8vIE5ldyBiZWhhdmlvciBvbmx5IGZvciB1c2Vy
cyBvZiBgcHJvcC10eXBlc2AgcGFja2FnZQorICAgICAgICAgIGludmFyaWFudCgKKyAgICAgICAg
ICAgIGZhbHNlLAorICAgICAgICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGly
ZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgKwor
ICAgICAgICAgICAgJ1VzZSBgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKClgIHRvIGNhbGwgdGhl
bS4gJyArCisgICAgICAgICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2st
cHJvcC10eXBlcycKKyAgICAgICAgICApOworICAgICAgICB9IGVsc2UgaWYgKCJkZXZlbG9wbWVu
dCIgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHsK
KyAgICAgICAgICAvLyBPbGQgYmVoYXZpb3IgZm9yIHBlb3BsZSB1c2luZyBSZWFjdC5Qcm9wVHlw
ZXMKKyAgICAgICAgICB2YXIgY2FjaGVLZXkgPSBjb21wb25lbnROYW1lICsgJzonICsgcHJvcE5h
bWU7CisgICAgICAgICAgaWYgKCFtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0pIHsK
KyAgICAgICAgICAgIHdhcm5pbmcoCisgICAgICAgICAgICAgIGZhbHNlLAorICAgICAgICAgICAg
ICAnWW91IGFyZSBtYW51YWxseSBjYWxsaW5nIGEgUmVhY3QuUHJvcFR5cGVzIHZhbGlkYXRpb24g
JyArCisgICAgICAgICAgICAgICdmdW5jdGlvbiBmb3IgdGhlIGAlc2AgcHJvcCBvbiBgJXNgLiBU
aGlzIGlzIGRlcHJlY2F0ZWQgJyArCisgICAgICAgICAgICAgICdhbmQgd2lsbCB0aHJvdyBpbiB0
aGUgc3RhbmRhbG9uZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArCisgICAgICAgICAgICAgICdZ
b3UgbWF5IGJlIHNlZWluZyB0aGlzIHdhcm5pbmcgZHVlIHRvIGEgdGhpcmQtcGFydHkgUHJvcFR5
cGVzICcgKworICAgICAgICAgICAgICAnbGlicmFyeS4gU2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qt
d2FybmluZy1kb250LWNhbGwtcHJvcHR5cGVzICcgKyAnZm9yIGRldGFpbHMuJywKKyAgICAgICAg
ICAgICAgcHJvcEZ1bGxOYW1lLAorICAgICAgICAgICAgICBjb21wb25lbnROYW1lCisgICAgICAg
ICAgICApOworICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldID0g
dHJ1ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGlmIChwcm9wc1tw
cm9wTmFtZV0gPT0gbnVsbCkgeworICAgICAgICBpZiAoaXNSZXF1aXJlZCkgeworICAgICAgICAg
IGlmIChwcm9wc1twcm9wTmFtZV0gPT09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcg
UHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAn
YCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgJyArICgnaW4gYCcgKyBjb21wb25lbnROYW1lICsgJ2As
IGJ1dCBpdHMgdmFsdWUgaXMgYG51bGxgLicpKTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0
dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxs
TmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCBpbiAnICsgKCdgJyArIGNvbXBvbmVudE5h
bWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgdW5kZWZpbmVkYC4nKSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gdmFsaWRh
dGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1l
KTsKKyAgICAgIH0KKyAgICB9CisKKyAgICB2YXIgY2hhaW5lZENoZWNrVHlwZSA9IGNoZWNrVHlw
ZS5iaW5kKG51bGwsIGZhbHNlKTsKKyAgICBjaGFpbmVkQ2hlY2tUeXBlLmlzUmVxdWlyZWQgPSBj
aGVja1R5cGUuYmluZChudWxsLCB0cnVlKTsKKworICAgIHJldHVybiBjaGFpbmVkQ2hlY2tUeXBl
OworICB9CisKKyAgZnVuY3Rpb24gY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoZXhwZWN0ZWRU
eXBlKSB7CisgICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnRO
YW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHsKKyAgICAgIHZhciBwcm9wVmFs
dWUgPSBwcm9wc1twcm9wTmFtZV07CisgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShw
cm9wVmFsdWUpOworICAgICAgaWYgKHByb3BUeXBlICE9PSBleHBlY3RlZFR5cGUpIHsKKyAgICAg
ICAgLy8gYHByb3BWYWx1ZWAgYmVpbmcgaW5zdGFuY2Ugb2YsIHNheSwgZGF0ZS9yZWdleHAsIHBh
c3MgdGhlICdvYmplY3QnCisgICAgICAgIC8vIGNoZWNrLCBidXQgd2UgY2FuIG9mZmVyIGEgbW9y
ZSBwcmVjaXNlIGVycm9yIG1lc3NhZ2UgaGVyZSByYXRoZXIgdGhhbgorICAgICAgICAvLyAnb2Yg
dHlwZSBgb2JqZWN0YCcuCisgICAgICAgIHZhciBwcmVjaXNlVHlwZSA9IGdldFByZWNpc2VUeXBl
KHByb3BWYWx1ZSk7CisKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlk
ICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2An
ICsgcHJlY2lzZVR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwg
ZXhwZWN0ZWQgJykgKyAoJ2AnICsgZXhwZWN0ZWRUeXBlICsgJ2AuJykpOworICAgICAgfQorICAg
ICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hl
Y2tlcih2YWxpZGF0ZSk7CisgIH0KKworICBmdW5jdGlvbiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigp
IHsKKyAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIoZW1wdHlGdW5jdGlvbi50
aGF0UmV0dXJuc051bGwpOworICB9CisKKyAgZnVuY3Rpb24gY3JlYXRlQXJyYXlPZlR5cGVDaGVj
a2VyKHR5cGVDaGVja2VyKSB7CisgICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1l
LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7CisgICAgICBpZiAodHlw
ZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7CisgICAgICAgIHJldHVybiBuZXcgUHJv
cFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQg
YCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5z
aWRlIGFycmF5T2YuJyk7CisgICAgICB9CisgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJv
cE5hbWVdOworICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHsKKyAgICAgICAg
dmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG5l
dyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5h
bWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyAr
IGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gYXJyYXkuJykpOworICAgICAgfQorICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
dmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBpLCBjb21wb25lbnROYW1lLCBsb2Nh
dGlvbiwgcHJvcEZ1bGxOYW1lICsgJ1snICsgaSArICddJywgUmVhY3RQcm9wVHlwZXNTZWNyZXQp
OworICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikgeworICAgICAgICAgIHJldHVy
biBlcnJvcjsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgcmV0dXJuIG51bGw7CisgICAgfQor
ICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7CisgIH0KKwor
ICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSB7CisgICAgZnVuY3Rpb24gdmFs
aWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxO
YW1lKSB7CisgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdOworICAgICAgaWYg
KCFpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7CisgICAgICAgIHZhciBwcm9wVHlwZSA9IGdl
dFByb3BUeXBlKHByb3BWYWx1ZSk7CisgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcign
SW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAn
ICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsg
J2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudC4nKSk7CisgICAgICB9CisgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICB9CisgICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2Vy
KHZhbGlkYXRlKTsKKyAgfQorCisgIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIo
ZXhwZWN0ZWRDbGFzcykgeworICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwg
Y29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkgeworICAgICAgaWYgKCEocHJv
cHNbcHJvcE5hbWVdIGluc3RhbmNlb2YgZXhwZWN0ZWRDbGFzcykpIHsKKyAgICAgICAgdmFyIGV4
cGVjdGVkQ2xhc3NOYW1lID0gZXhwZWN0ZWRDbGFzcy5uYW1lIHx8IEFOT05ZTU9VUzsKKyAgICAg
ICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pOwor
ICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsg
JyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBhY3R1YWxDbGFzc05h
bWUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykg
KyAoJ2luc3RhbmNlIG9mIGAnICsgZXhwZWN0ZWRDbGFzc05hbWUgKyAnYC4nKSk7CisgICAgICB9
CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5
cGVDaGVja2VyKHZhbGlkYXRlKTsKKyAgfQorCisgIGZ1bmN0aW9uIGNyZWF0ZUVudW1UeXBlQ2hl
Y2tlcihleHBlY3RlZFZhbHVlcykgeworICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFZh
bHVlcykpIHsKKyAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmco
ZmFsc2UsICdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBp
bnN0YW5jZSBvZiBhcnJheS4nKSA6IHZvaWQgMDsKKyAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9u
LnRoYXRSZXR1cm5zTnVsbDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywg
cHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHsKKyAgICAg
IHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07CisgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGV4cGVjdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChpcyhwcm9wVmFs
dWUsIGV4cGVjdGVkVmFsdWVzW2ldKSkgeworICAgICAgICAgIHJldHVybiBudWxsOworICAgICAg
ICB9CisgICAgICB9CisKKyAgICAgIHZhciB2YWx1ZXNTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShl
eHBlY3RlZFZhbHVlcyk7CisgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQg
JyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHZhbHVlIGAnICsgcHJv
cFZhbHVlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4
cGVjdGVkIG9uZSBvZiAnICsgdmFsdWVzU3RyaW5nICsgJy4nKSk7CisgICAgfQorICAgIHJldHVy
biBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7CisgIH0KKworICBmdW5jdGlv
biBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7CisgICAgZnVuY3Rpb24g
dmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1
bGxOYW1lKSB7CisgICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7
CisgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVs
bE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFs
aWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIG9iamVjdE9mLicpOworICAgICAgfQorICAgICAg
dmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTsKKyAgICAgIHZhciBwcm9wVHlwZSA9IGdl
dFByb3BUeXBlKHByb3BWYWx1ZSk7CisgICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7
CisgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24g
KyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsg
J2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIG9iamVj
dC4nKSk7CisgICAgICB9CisgICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcFZhbHVlKSB7CisgICAg
ICAgIGlmIChwcm9wVmFsdWUuaGFzT3duUHJvcGVydHkoa2V5KSkgeworICAgICAgICAgIHZhciBl
cnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlv
biwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7CisgICAg
ICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHsKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiBudWxs
OworICAgIH0KKyAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUp
OworICB9CisKKyAgZnVuY3Rpb24gY3JlYXRlVW5pb25UeXBlQ2hlY2tlcihhcnJheU9mVHlwZUNo
ZWNrZXJzKSB7CisgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5T2ZUeXBlQ2hlY2tlcnMpKSB7
CisgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAn
SW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUsIGV4cGVjdGVkIGFuIGluc3Rh
bmNlIG9mIGFycmF5LicpIDogdm9pZCAwOworICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb24udGhh
dFJldHVybnNOdWxsOworICAgIH0KKworICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9w
TmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkgeworICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTsKKyAgICAgICAgaWYgKGNo
ZWNrZXIocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxO
YW1lLCBSZWFjdFByb3BUeXBlc1NlY3JldCkgPT0gbnVsbCkgeworICAgICAgICAgIHJldHVybiBu
dWxsOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJv
cignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxp
ZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AuJykpOworICAgIH0KKyAgICByZXR1
cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpOworICB9CisKKyAgZnVuY3Rp
b24gY3JlYXRlTm9kZUNoZWNrZXIoKSB7CisgICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHBy
b3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7CisgICAgICBp
ZiAoIWlzTm9kZShwcm9wc1twcm9wTmFtZV0pKSB7CisgICAgICAgIHJldHVybiBuZXcgUHJvcFR5
cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Ag
c3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgUmVh
Y3ROb2RlLicpKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICByZXR1
cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpOworICB9CisKKyAgZnVuY3Rp
b24gY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7CisgICAgZnVuY3Rpb24gdmFs
aWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxO
YW1lKSB7CisgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdOworICAgICAgdmFy
IHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTsKKyAgICAgIGlmIChwcm9wVHlwZSAh
PT0gJ29iamVjdCcpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlk
ICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJv
cFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhw
ZWN0ZWQgYG9iamVjdGAuJykpOworICAgICAgfQorICAgICAgZm9yICh2YXIga2V5IGluIHNoYXBl
VHlwZXMpIHsKKyAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07CisgICAgICAg
IGlmICghY2hlY2tlcikgeworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAg
IHZhciBlcnJvciA9IGNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0
aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTsKKyAg
ICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgcmV0dXJuIGVycm9yOworICAgICAgICB9Cisg
ICAgICB9CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgcmV0dXJuIGNyZWF0ZUNoYWlu
YWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTsKKyAgfQorCisgIGZ1bmN0aW9uIGlzTm9kZShwcm9w
VmFsdWUpIHsKKyAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHsKKyAgICAgIGNhc2UgJ251
bWJlcic6CisgICAgICBjYXNlICdzdHJpbmcnOgorICAgICAgY2FzZSAndW5kZWZpbmVkJzoKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICBjYXNlICdib29sZWFuJzoKKyAgICAgICAgcmV0dXJu
ICFwcm9wVmFsdWU7CisgICAgICBjYXNlICdvYmplY3QnOgorICAgICAgICBpZiAoQXJyYXkuaXNB
cnJheShwcm9wVmFsdWUpKSB7CisgICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05v
ZGUpOworICAgICAgICB9CisgICAgICAgIGlmIChwcm9wVmFsdWUgPT09IG51bGwgfHwgaXNWYWxp
ZEVsZW1lbnQocHJvcFZhbHVlKSkgeworICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisKKyAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7Cisg
ICAgICAgIGlmIChpdGVyYXRvckZuKSB7CisgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0
b3JGbi5jYWxsKHByb3BWYWx1ZSk7CisgICAgICAgICAgdmFyIHN0ZXA7CisgICAgICAgICAgaWYg
KGl0ZXJhdG9yRm4gIT09IHByb3BWYWx1ZS5lbnRyaWVzKSB7CisgICAgICAgICAgICB3aGlsZSAo
IShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7CisgICAgICAgICAgICAgIGlmICghaXNO
b2RlKHN0ZXAudmFsdWUpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4g
dmFsdWVzLgorICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9u
ZSkgeworICAgICAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlOworICAgICAgICAgICAg
ICBpZiAoZW50cnkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHsK
KyAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9CisK
KyAgZnVuY3Rpb24gaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkgeworICAgIC8vIE5hdGl2
ZSBTeW1ib2wuCisgICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykgeworICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3Ry
aW5nVGFnXSA9PT0gJ1N5bWJvbCcKKyAgICBpZiAocHJvcFZhbHVlWydAQHRvU3RyaW5nVGFnJ10g
PT09ICdTeW1ib2wnKSB7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBGYWxs
YmFjayBmb3Igbm9uLXNwZWMgY29tcGxpYW50IFN5bWJvbHMgd2hpY2ggYXJlIHBvbHlmaWxsZWQu
CisgICAgaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgcHJvcFZhbHVlIGluc3Rh
bmNlb2YgU3ltYm9sKSB7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZmFsc2U7CisgIH0KKworICAvLyBFcXVpdmFsZW50IG9mIGB0eXBlb2ZgIGJ1dCB3aXRoIHNwZWNp
YWwgaGFuZGxpbmcgZm9yIGFycmF5IGFuZCByZWdleHAuCisgIGZ1bmN0aW9uIGdldFByb3BUeXBl
KHByb3BWYWx1ZSkgeworICAgIHZhciBwcm9wVHlwZSA9IHR5cGVvZiBwcm9wVmFsdWU7CisgICAg
aWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkgeworICAgICAgcmV0dXJuICdhcnJheSc7Cisg
ICAgfQorICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHsKKyAgICAgIC8vIE9s
ZCB3ZWJraXRzIChhdCBsZWFzdCB1bnRpbCBBbmRyb2lkIDQuMCkgcmV0dXJuICdmdW5jdGlvbicg
cmF0aGVyIHRoYW4KKyAgICAgIC8vICdvYmplY3QnIGZvciB0eXBlb2YgYSBSZWdFeHAuIFdlJ2xs
IG5vcm1hbGl6ZSB0aGlzIGhlcmUgc28gdGhhdCAvYmxhLworICAgICAgLy8gcGFzc2VzIFByb3BU
eXBlcy5vYmplY3QuCisgICAgICByZXR1cm4gJ29iamVjdCc7CisgICAgfQorICAgIGlmIChpc1N5
bWJvbChwcm9wVHlwZSwgcHJvcFZhbHVlKSkgeworICAgICAgcmV0dXJuICdzeW1ib2wnOworICAg
IH0KKyAgICByZXR1cm4gcHJvcFR5cGU7CisgIH0KKworICAvLyBUaGlzIGhhbmRsZXMgbW9yZSB0
eXBlcyB0aGFuIGBnZXRQcm9wVHlwZWAuIE9ubHkgdXNlZCBmb3IgZXJyb3IgbWVzc2FnZXMuCisg
IC8vIFNlZSBgY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXJgLgorICBmdW5jdGlvbiBnZXRQcmVj
aXNlVHlwZShwcm9wVmFsdWUpIHsKKyAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9w
VmFsdWUpOworICAgIGlmIChwcm9wVHlwZSA9PT0gJ29iamVjdCcpIHsKKyAgICAgIGlmIChwcm9w
VmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7CisgICAgICAgIHJldHVybiAnZGF0ZSc7CisgICAgICB9
IGVsc2UgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkgeworICAgICAgICByZXR1cm4g
J3JlZ2V4cCc7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBwcm9wVHlwZTsKKyAgfQorCisg
IC8vIFJldHVybnMgY2xhc3MgbmFtZSBvZiB0aGUgb2JqZWN0LCBpZiBhbnkuCisgIGZ1bmN0aW9u
IGdldENsYXNzTmFtZShwcm9wVmFsdWUpIHsKKyAgICBpZiAoIXByb3BWYWx1ZS5jb25zdHJ1Y3Rv
ciB8fCAhcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHsKKyAgICAgIHJldHVybiBBTk9OWU1P
VVM7CisgICAgfQorICAgIHJldHVybiBwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZTsKKyAgfQor
CisgIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gY2hlY2tQcm9wVHlwZXM7CisgIFJl
YWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzOworCisgIHJldHVybiBSZWFj
dFByb3BUeXBlczsKK307CisKK30seyI0NSI6NDUsIjQ3Ijo0NywiNDkiOjQ5LCI1MSI6NTEsIjU0
Ijo1NH1dLDU0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29w
eXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0
eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGly
ZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBh
dGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUg
ZGlyZWN0b3J5LgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIFJlYWN0UHJvcFR5cGVzU2Vj
cmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJzsKKwor
bW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDsKKworfSx7fV19LHt9LFszMl0p
KDMyKQorfSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3JlYWN0L2Rpc3QvcmVhY3Qtd2l0aC1hZGRvbnMubWlu
LmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3JlYWN0L2Rpc3QvcmVhY3Qtd2l0
aC1hZGRvbnMubWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMwMGExZWQ5ZDBjNzdmMTNhNzcxOTk4ZGZmMmYz
MmRkMjZhYzA2MDEKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21v
ZHVsZXMvcmVhY3QvZGlzdC9yZWFjdC13aXRoLWFkZG9ucy5taW4uanMKQEAgLTAsMCArMSwxMyBA
QAorLyoqCisgKiBSZWFjdCAod2l0aCBhZGRvbnMpIHYxNS41LjQKKyAqCisgKiBDb3B5cmlnaHQg
MjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGlj
ZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkg
b2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJp
Z2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rv
cnkuCisgKgorICovCishZnVuY3Rpb24oZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYi
dW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz1lKCk7ZWxzZSBpZigiZnVu
Y3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSxlKTtlbHNle3ZhciB0
O3Q9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2Yg
Z2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzLHQuUmVhY3Q9
ZSgpfX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gbyhhLHMp
e2lmKCFuW2FdKXtpZighdFthXSl7dmFyIHU9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJl
cXVpcmU7aWYoIXMmJnUpcmV0dXJuIHUoYSwhMCk7aWYoaSlyZXR1cm4gaShhLCEwKTt2YXIgYz1u
ZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIithKyInIik7dGhyb3cgYy5jb2RlPSJNT0RV
TEVfTk9UX0ZPVU5EIixjfXZhciBwPW5bYV09e2V4cG9ydHM6e319O3RbYV1bMF0uY2FsbChwLmV4
cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFthXVsxXVtlXTtyZXR1cm4gbyhufHxlKX0scCxwLmV4
cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bYV0uZXhwb3J0c31mb3IodmFyIGk9ImZ1bmN0aW9uIj09
dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsYT0wO2E8ci5sZW5ndGg7YSsrKW8oclthXSk7cmV0dXJu
IG99KHsxOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIg
bj17fTtyZXR1cm4gbltlLnRvTG93ZXJDYXNlKCldPXQudG9Mb3dlckNhc2UoKSxuWyJXZWJraXQi
K2VdPSJ3ZWJraXQiK3QsblsiTW96IitlXT0ibW96Iit0LG5bIm1zIitlXT0iTVMiK3QsblsiTyIr
ZV09Im8iK3QudG9Mb3dlckNhc2UoKSxufWZ1bmN0aW9uIG8oZSl7aWYoc1tlXSlyZXR1cm4gc1tl
XTtpZighYVtlXSlyZXR1cm4gZTt2YXIgdD1hW2VdO2Zvcih2YXIgbiBpbiB0KWlmKHQuaGFzT3du
UHJvcGVydHkobikmJm4gaW4gdSlyZXR1cm4gc1tlXT10W25dO3JldHVybiIifXZhciBpPWUoMzkp
LGE9e2FuaW1hdGlvbmVuZDpyKCJBbmltYXRpb24iLCJBbmltYXRpb25FbmQiKSxhbmltYXRpb25p
dGVyYXRpb246cigiQW5pbWF0aW9uIiwiQW5pbWF0aW9uSXRlcmF0aW9uIiksYW5pbWF0aW9uc3Rh
cnQ6cigiQW5pbWF0aW9uIiwiQW5pbWF0aW9uU3RhcnQiKSx0cmFuc2l0aW9uZW5kOnIoIlRyYW5z
aXRpb24iLCJUcmFuc2l0aW9uRW5kIil9LHM9e30sdT17fTtpLmNhblVzZURPTSYmKHU9ZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUsIkFuaW1hdGlvbkV2ZW50ImluIHdpbmRvd3x8
KGRlbGV0ZSBhLmFuaW1hdGlvbmVuZC5hbmltYXRpb24sZGVsZXRlIGEuYW5pbWF0aW9uaXRlcmF0
aW9uLmFuaW1hdGlvbixkZWxldGUgYS5hbmltYXRpb25zdGFydC5hbmltYXRpb24pLCJUcmFuc2l0
aW9uRXZlbnQiaW4gd2luZG93fHxkZWxldGUgYS50cmFuc2l0aW9uZW5kLnRyYW5zaXRpb24pLHQu
ZXhwb3J0cz1vfSx7Mzk6Mzl9XSwyOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0
aW9uIHIoZSl7dmFyIHQ9eyI9IjoiPTAiLCI6IjoiPTIifTtyZXR1cm4iJCIrKCIiK2UpLnJlcGxh
Y2UoL1s9Ol0vZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9
eyI9MCI6Ij0iLCI9MiI6IjoifTtyZXR1cm4oIiIrKCIuIj09PWVbMF0mJiIkIj09PWVbMV0/ZS5z
dWJzdHJpbmcoMik6ZS5zdWJzdHJpbmcoMSkpKS5yZXBsYWNlKC8oPTB8PTIpL2csZnVuY3Rpb24o
ZSl7cmV0dXJuIHRbZV19KX12YXIgaT17ZXNjYXBlOnIsdW5lc2NhcGU6b307dC5leHBvcnRzPWl9
LHt9XSwzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMTgpLG89ZSgyMyks
aT17bGlua1N0YXRlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcih0aGlzLnN0YXRlW2VdLG8uY3Jl
YXRlU3RhdGVLZXlTZXR0ZXIodGhpcyxlKSl9fTt0LmV4cG9ydHM9aX0sezE4OjE4LDIzOjIzfV0s
NDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDM0KSxvPShlKDQyKSxmdW5j
dGlvbihlKXt2YXIgdD10aGlzO2lmKHQuaW5zdGFuY2VQb29sLmxlbmd0aCl7dmFyIG49dC5pbnN0
YW5jZVBvb2wucG9wKCk7cmV0dXJuIHQuY2FsbChuLGUpLG59cmV0dXJuIG5ldyB0KGUpfSksaT1m
dW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7aWYobi5pbnN0YW5jZVBvb2wubGVuZ3RoKXt2YXIgcj1u
Lmluc3RhbmNlUG9vbC5wb3AoKTtyZXR1cm4gbi5jYWxsKHIsZSx0KSxyfXJldHVybiBuZXcgbihl
LHQpfSxhPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzO2lmKHIuaW5zdGFuY2VQb29sLmxlbmd0
aCl7dmFyIG89ci5pbnN0YW5jZVBvb2wucG9wKCk7cmV0dXJuIHIuY2FsbChvLGUsdCxuKSxvfXJl
dHVybiBuZXcgcihlLHQsbil9LHM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89dGhpcztpZihvLmlu
c3RhbmNlUG9vbC5sZW5ndGgpe3ZhciBpPW8uaW5zdGFuY2VQb29sLnBvcCgpO3JldHVybiBvLmNh
bGwoaSxlLHQsbixyKSxpfXJldHVybiBuZXcgbyhlLHQsbixyKX0sdT1mdW5jdGlvbihlKXt2YXIg
dD10aGlzO2UgaW5zdGFuY2VvZiB0fHxyKCIyNSIpLGUuZGVzdHJ1Y3RvcigpLHQuaW5zdGFuY2VQ
b29sLmxlbmd0aDx0LnBvb2xTaXplJiZ0Lmluc3RhbmNlUG9vbC5wdXNoKGUpfSxjPW8scD1mdW5j
dGlvbihlLHQpe3ZhciBuPWU7cmV0dXJuIG4uaW5zdGFuY2VQb29sPVtdLG4uZ2V0UG9vbGVkPXR8
fGMsbi5wb29sU2l6ZXx8KG4ucG9vbFNpemU9MTApLG4ucmVsZWFzZT11LG59LGw9e2FkZFBvb2xp
bmdUbzpwLG9uZUFyZ3VtZW50UG9vbGVyOm8sdHdvQXJndW1lbnRQb29sZXI6aSx0aHJlZUFyZ3Vt
ZW50UG9vbGVyOmEsZm91ckFyZ3VtZW50UG9vbGVyOnN9O3QuZXhwb3J0cz1sfSx7MzQ6MzQsNDI6
NDJ9XSw1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoNDUpLG89ZSg5KSxp
PWUoMTEpLGE9ZSgyMikscz1lKDEwKSx1PWUoMTQpLGM9ZSgxNSkscD1lKDIxKSxsPWUoMjcpLGY9
ZSgzMyksZD0oZSg0NCksYy5jcmVhdGVFbGVtZW50KSxoPWMuY3JlYXRlRmFjdG9yeSx5PWMuY2xv
bmVFbGVtZW50LHY9cixtPXtDaGlsZHJlbjp7bWFwOm8ubWFwLGZvckVhY2g6by5mb3JFYWNoLGNv
dW50Om8uY291bnQsdG9BcnJheTpvLnRvQXJyYXksb25seTpmfSxDb21wb25lbnQ6aSxQdXJlQ29t
cG9uZW50OmEsY3JlYXRlRWxlbWVudDpkLGNsb25lRWxlbWVudDp5LGlzVmFsaWRFbGVtZW50OmMu
aXNWYWxpZEVsZW1lbnQsUHJvcFR5cGVzOnAsY3JlYXRlQ2xhc3M6cy5jcmVhdGVDbGFzcyxjcmVh
dGVGYWN0b3J5OmgsY3JlYXRlTWl4aW46ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LERPTTp1LHZlcnNp
b246bCxfX3NwcmVhZDp2fTt0LmV4cG9ydHM9bX0sezEwOjEwLDExOjExLDE0OjE0LDE1OjE1LDIx
OjIxLDIyOjIyLDI3OjI3LDMzOjMzLDQ0OjQ0LDQ1OjQ1LDk6OX1dLDY6W2Z1bmN0aW9uKGUsdCxu
KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe2lmKCFvKXt2YXIgdD1lKDI5KTtvPXQuX19TRUNS
RVRfSU5KRUNURURfUkVBQ1RfRE9NX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUR9cmV0
dXJuIG99dmFyIG87bi5nZXRSZWFjdERPTT1yfSx7Mjk6Mjl9XSw3OltmdW5jdGlvbihlLHQsbil7
InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBu
ZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlv
biBvKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVu
IGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4hdHx8Im9i
amVjdCIhPXR5cGVvZiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdD9lOnR9ZnVuY3Rpb24gaShlLHQp
e2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJT
dXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIr
dHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0
cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEw
fX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6
ZS5fX3Byb3RvX189dCl9ZnVuY3Rpb24gYShlKXt2YXIgdD0idHJhbnNpdGlvbiIrZSsiVGltZW91
dCIsbj0idHJhbnNpdGlvbiIrZTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoZVtuXSl7aWYobnVsbD09
ZVt0XSlyZXR1cm4gbmV3IEVycm9yKHQrIiB3YXNuJ3Qgc3VwcGxpZWQgdG8gUmVhY3RDU1NUcmFu
c2l0aW9uR3JvdXA6IHRoaXMgY2FuIGNhdXNlIHVucmVsaWFibGUgYW5pbWF0aW9ucyBhbmQgd29u
J3QgYmUgc3VwcG9ydGVkIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgUmVhY3QuIFNlZSBodHRwczov
L2ZiLm1lL3JlYWN0LWFuaW1hdGlvbi10cmFuc2l0aW9uLWdyb3VwLXRpbWVvdXQgZm9yIG1vcmUg
aW5mb3JtYXRpb24uIik7aWYoIm51bWJlciIhPXR5cGVvZiBlW3RdKXJldHVybiBuZXcgRXJyb3Io
dCsiIG11c3QgYmUgYSBudW1iZXIgKGluIG1pbGxpc2Vjb25kcykiKX19fXZhciBzPWUoNDUpLHU9
ZSg1KSxjPWUoNDcpLHA9Yyh1LmlzVmFsaWRFbGVtZW50KSxsPWUoMjYpLGY9ZSg4KSxkPWZ1bmN0
aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgbixpLGE7cih0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVu
dHMubGVuZ3RoLGM9QXJyYXkocykscD0wO3A8cztwKyspY1twXT1hcmd1bWVudHNbcF07cmV0dXJu
IG49aT1vKHRoaXMsZS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChjKSkpLGkuX3dyYXBDaGls
ZD1mdW5jdGlvbihlKXtyZXR1cm4gdS5jcmVhdGVFbGVtZW50KGYse25hbWU6aS5wcm9wcy50cmFu
c2l0aW9uTmFtZSxhcHBlYXI6aS5wcm9wcy50cmFuc2l0aW9uQXBwZWFyLGVudGVyOmkucHJvcHMu
dHJhbnNpdGlvbkVudGVyLGxlYXZlOmkucHJvcHMudHJhbnNpdGlvbkxlYXZlLGFwcGVhclRpbWVv
dXQ6aS5wcm9wcy50cmFuc2l0aW9uQXBwZWFyVGltZW91dCxlbnRlclRpbWVvdXQ6aS5wcm9wcy50
cmFuc2l0aW9uRW50ZXJUaW1lb3V0LGxlYXZlVGltZW91dDppLnByb3BzLnRyYW5zaXRpb25MZWF2
ZVRpbWVvdXR9LGUpfSxhPW4sbyhpLGEpfXJldHVybiBpKHQsZSksdC5wcm90b3R5cGUucmVuZGVy
PWZ1bmN0aW9uKCl7cmV0dXJuIHUuY3JlYXRlRWxlbWVudChsLHMoe30sdGhpcy5wcm9wcyx7Y2hp
bGRGYWN0b3J5OnRoaXMuX3dyYXBDaGlsZH0pKX0sdH0odS5Db21wb25lbnQpO2QuZGlzcGxheU5h
bWU9IlJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwIixkLnByb3BUeXBlcz17dHJhbnNpdGlvbk5hbWU6
Zi5wcm9wVHlwZXMubmFtZSx0cmFuc2l0aW9uQXBwZWFyOnAuYm9vbCx0cmFuc2l0aW9uRW50ZXI6
cC5ib29sLHRyYW5zaXRpb25MZWF2ZTpwLmJvb2wsdHJhbnNpdGlvbkFwcGVhclRpbWVvdXQ6YSgi
QXBwZWFyIiksdHJhbnNpdGlvbkVudGVyVGltZW91dDphKCJFbnRlciIpLHRyYW5zaXRpb25MZWF2
ZVRpbWVvdXQ6YSgiTGVhdmUiKX0sZC5kZWZhdWx0UHJvcHM9e3RyYW5zaXRpb25BcHBlYXI6ITEs
dHJhbnNpdGlvbkVudGVyOiEwLHRyYW5zaXRpb25MZWF2ZTohMH0sdC5leHBvcnRzPWR9LHsyNjoy
Niw0NTo0NSw0Nzo0Nyw1OjUsODo4fV0sODpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijtm
dW5jdGlvbiByKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigi
Q2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbyhlLHQpe2lmKCFl
KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAt
IHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2Yg
dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIGkoZSx0KXtpZigiZnVuY3Rpb24i
IT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lv
biBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnBy
b3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6
ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0
LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQp
fXZhciBhPWUoNSkscz1lKDYpLHU9ZSg0NyksYz11KGEuaXNWYWxpZEVsZW1lbnQpLHA9ZSgzOCks
bD1lKDI1KSxmPWUoMzMpLGQ9MTcsaD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIG4saSxh
O3IodGhpcyx0KTtmb3IodmFyIHU9YXJndW1lbnRzLmxlbmd0aCxjPUFycmF5KHUpLGY9MDtmPHU7
ZisrKWNbZl09YXJndW1lbnRzW2ZdO3JldHVybiBuPWk9byh0aGlzLGUuY2FsbC5hcHBseShlLFt0
aGlzXS5jb25jYXQoYykpKSxpLl9pc01vdW50ZWQ9ITEsaS50cmFuc2l0aW9uPWZ1bmN0aW9uKGUs
dCxuKXt2YXIgcj1zLmdldFJlYWN0RE9NKCkuZmluZERPTU5vZGUoaSk7aWYoIXIpcmV0dXJuIHZv
aWQodCYmdCgpKTt2YXIgbz1pLnByb3BzLm5hbWVbZV18fGkucHJvcHMubmFtZSsiLSIrZSxhPWku
cHJvcHMubmFtZVtlKyJBY3RpdmUiXXx8bysiLWFjdGl2ZSIsdT1udWxsLGM9ZnVuY3Rpb24oZSl7
ZSYmZS50YXJnZXQhPT1yfHwoY2xlYXJUaW1lb3V0KHUpLHAucmVtb3ZlQ2xhc3MocixvKSxwLnJl
bW92ZUNsYXNzKHIsYSksbC5yZW1vdmVFbmRFdmVudExpc3RlbmVyKHIsYyksdCYmdCgpKX07cC5h
ZGRDbGFzcyhyLG8pLGkucXVldWVDbGFzc0FuZE5vZGUoYSxyKSxuPyh1PXNldFRpbWVvdXQoYyxu
KSxpLnRyYW5zaXRpb25UaW1lb3V0cy5wdXNoKHUpKTpsLmFkZEVuZEV2ZW50TGlzdGVuZXIocixj
KX0saS5xdWV1ZUNsYXNzQW5kTm9kZT1mdW5jdGlvbihlLHQpe2kuY2xhc3NOYW1lQW5kTm9kZVF1
ZXVlLnB1c2goe2NsYXNzTmFtZTplLG5vZGU6dH0pLGkudGltZW91dHx8KGkudGltZW91dD1zZXRU
aW1lb3V0KGkuZmx1c2hDbGFzc05hbWVBbmROb2RlUXVldWUsZCkpfSxpLmZsdXNoQ2xhc3NOYW1l
QW5kTm9kZVF1ZXVlPWZ1bmN0aW9uKCl7aS5faXNNb3VudGVkJiZpLmNsYXNzTmFtZUFuZE5vZGVR
dWV1ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3AuYWRkQ2xhc3MoZS5ub2RlLGUuY2xhc3NOYW1lKX0p
LGkuY2xhc3NOYW1lQW5kTm9kZVF1ZXVlLmxlbmd0aD0wLGkudGltZW91dD1udWxsfSxpLmNvbXBv
bmVudFdpbGxBcHBlYXI9ZnVuY3Rpb24oZSl7aS5wcm9wcy5hcHBlYXI/aS50cmFuc2l0aW9uKCJh
cHBlYXIiLGUsaS5wcm9wcy5hcHBlYXJUaW1lb3V0KTplKCl9LGkuY29tcG9uZW50V2lsbEVudGVy
PWZ1bmN0aW9uKGUpe2kucHJvcHMuZW50ZXI/aS50cmFuc2l0aW9uKCJlbnRlciIsZSxpLnByb3Bz
LmVudGVyVGltZW91dCk6ZSgpfSxpLmNvbXBvbmVudFdpbGxMZWF2ZT1mdW5jdGlvbihlKXtpLnBy
b3BzLmxlYXZlP2kudHJhbnNpdGlvbigibGVhdmUiLGUsaS5wcm9wcy5sZWF2ZVRpbWVvdXQpOmUo
KX0sYT1uLG8oaSxhKX1yZXR1cm4gaSh0LGUpLHQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxNb3Vu
dD1mdW5jdGlvbigpe3RoaXMuY2xhc3NOYW1lQW5kTm9kZVF1ZXVlPVtdLHRoaXMudHJhbnNpdGlv
blRpbWVvdXRzPVtdfSx0LnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3Ro
aXMuX2lzTW91bnRlZD0hMH0sdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rp
b24oKXt0aGlzLl9pc01vdW50ZWQ9ITEsdGhpcy50aW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy50
aW1lb3V0KSx0aGlzLnRyYW5zaXRpb25UaW1lb3V0cy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2NsZWFy
VGltZW91dChlKX0pLHRoaXMuY2xhc3NOYW1lQW5kTm9kZVF1ZXVlLmxlbmd0aD0wfSx0LnByb3Rv
dHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gZih0aGlzLnByb3BzLmNoaWxkcmVuKX0sdH0o
YS5Db21wb25lbnQpO2gucHJvcFR5cGVzPXtuYW1lOmMub25lT2ZUeXBlKFtjLnN0cmluZyxjLnNo
YXBlKHtlbnRlcjpjLnN0cmluZyxsZWF2ZTpjLnN0cmluZyxhY3RpdmU6Yy5zdHJpbmd9KSxjLnNo
YXBlKHtlbnRlcjpjLnN0cmluZyxlbnRlckFjdGl2ZTpjLnN0cmluZyxsZWF2ZTpjLnN0cmluZyxs
ZWF2ZUFjdGl2ZTpjLnN0cmluZyxhcHBlYXI6Yy5zdHJpbmcsYXBwZWFyQWN0aXZlOmMuc3RyaW5n
fSldKS5pc1JlcXVpcmVkLGFwcGVhcjpjLmJvb2wsZW50ZXI6Yy5ib29sLGxlYXZlOmMuYm9vbCxh
cHBlYXJUaW1lb3V0OmMubnVtYmVyLGVudGVyVGltZW91dDpjLm51bWJlcixsZWF2ZVRpbWVvdXQ6
Yy5udW1iZXJ9LHQuZXhwb3J0cz1ofSx7MjU6MjUsMzM6MzMsMzg6MzgsNDc6NDcsNTo1LDY6Nn1d
LDk6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4oIiIr
ZSkucmVwbGFjZShiLCIkJi8iKX1mdW5jdGlvbiBvKGUsdCl7dGhpcy5mdW5jPWUsdGhpcy5jb250
ZXh0PXQsdGhpcy5jb3VudD0wfWZ1bmN0aW9uIGkoZSx0LG4pe3ZhciByPWUuZnVuYyxvPWUuY29u
dGV4dDtyLmNhbGwobyx0LGUuY291bnQrKyl9ZnVuY3Rpb24gYShlLHQsbil7aWYobnVsbD09ZSly
ZXR1cm4gZTt2YXIgcj1vLmdldFBvb2xlZCh0LG4pO20oZSxpLHIpLG8ucmVsZWFzZShyKX1mdW5j
dGlvbiBzKGUsdCxuLHIpe3RoaXMucmVzdWx0PWUsdGhpcy5rZXlQcmVmaXg9dCx0aGlzLmZ1bmM9
bix0aGlzLmNvbnRleHQ9cix0aGlzLmNvdW50PTB9ZnVuY3Rpb24gdShlLHQsbil7dmFyIG89ZS5y
ZXN1bHQsaT1lLmtleVByZWZpeCxhPWUuZnVuYyxzPWUuY29udGV4dCx1PWEuY2FsbChzLHQsZS5j
b3VudCsrKTtBcnJheS5pc0FycmF5KHUpP2ModSxvLG4sdi50aGF0UmV0dXJuc0FyZ3VtZW50KTpu
dWxsIT11JiYoeS5pc1ZhbGlkRWxlbWVudCh1KSYmKHU9eS5jbG9uZUFuZFJlcGxhY2VLZXkodSxp
KyghdS5rZXl8fHQmJnQua2V5PT09dS5rZXk/IiI6cih1LmtleSkrIi8iKStuKSksby5wdXNoKHUp
KX1mdW5jdGlvbiBjKGUsdCxuLG8saSl7dmFyIGE9IiI7bnVsbCE9biYmKGE9cihuKSsiLyIpO3Zh
ciBjPXMuZ2V0UG9vbGVkKHQsYSxvLGkpO20oZSx1LGMpLHMucmVsZWFzZShjKX1mdW5jdGlvbiBw
KGUsdCxuKXtpZihudWxsPT1lKXJldHVybiBlO3ZhciByPVtdO3JldHVybiBjKGUscixudWxsLHQs
bikscn1mdW5jdGlvbiBsKGUsdCxuKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBmKGUsdCl7cmV0dXJu
IG0oZSxsLG51bGwpfWZ1bmN0aW9uIGQoZSl7dmFyIHQ9W107cmV0dXJuIGMoZSx0LG51bGwsdi50
aGF0UmV0dXJuc0FyZ3VtZW50KSx0fXZhciBoPWUoNCkseT1lKDE1KSx2PWUoNDApLG09ZSgzNiks
RT1oLnR3b0FyZ3VtZW50UG9vbGVyLGc9aC5mb3VyQXJndW1lbnRQb29sZXIsYj0vXC8rL2c7by5w
cm90b3R5cGUuZGVzdHJ1Y3Rvcj1mdW5jdGlvbigpe3RoaXMuZnVuYz1udWxsLHRoaXMuY29udGV4
dD1udWxsLHRoaXMuY291bnQ9MH0saC5hZGRQb29saW5nVG8obyxFKSxzLnByb3RvdHlwZS5kZXN0
cnVjdG9yPWZ1bmN0aW9uKCl7dGhpcy5yZXN1bHQ9bnVsbCx0aGlzLmtleVByZWZpeD1udWxsLHRo
aXMuZnVuYz1udWxsLHRoaXMuY29udGV4dD1udWxsLHRoaXMuY291bnQ9MH0saC5hZGRQb29saW5n
VG8ocyxnKTt2YXIgXz17Zm9yRWFjaDphLG1hcDpwLG1hcEludG9XaXRoS2V5UHJlZml4SW50ZXJu
YWw6Yyxjb3VudDpmLHRvQXJyYXk6ZH07dC5leHBvcnRzPV99LHsxNToxNSwzNjozNiw0OjQsNDA6
NDB9XSwxMDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVy
biBlfWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj1iLmhhc093blByb3BlcnR5KHQpP2JbdF06bnVsbDt3
Lmhhc093blByb3BlcnR5KHQpJiYiT1ZFUlJJREVfQkFTRSIhPT1uJiZmKCI3MyIsdCksZSYmIkRF
RklORV9NQU5ZIiE9PW4mJiJERUZJTkVfTUFOWV9NRVJHRUQiIT09biYmZigiNzQiLHQpfWZ1bmN0
aW9uIGkoZSx0KXtpZih0KXsiZnVuY3Rpb24iPT10eXBlb2YgdCYmZigiNzUiKSx5LmlzVmFsaWRF
bGVtZW50KHQpJiZmKCI3NiIpO3ZhciBuPWUucHJvdG90eXBlLHI9bi5fX3JlYWN0QXV0b0JpbmRQ
YWlyczt0Lmhhc093blByb3BlcnR5KEUpJiZfLm1peGlucyhlLHQubWl4aW5zKTtmb3IodmFyIGkg
aW4gdClpZih0Lmhhc093blByb3BlcnR5KGkpJiZpIT09RSl7dmFyIGE9dFtpXSxzPW4uaGFzT3du
UHJvcGVydHkoaSk7aWYobyhzLGkpLF8uaGFzT3duUHJvcGVydHkoaSkpX1tpXShlLGEpO2Vsc2V7
dmFyIHA9Yi5oYXNPd25Qcm9wZXJ0eShpKSxsPSJmdW5jdGlvbiI9PXR5cGVvZiBhLGQ9bCYmIXAm
JiFzJiYhMSE9PXQuYXV0b2JpbmQ7aWYoZClyLnB1c2goaSxhKSxuW2ldPWE7ZWxzZSBpZihzKXt2
YXIgaD1iW2ldOyghcHx8IkRFRklORV9NQU5ZX01FUkdFRCIhPT1oJiYiREVGSU5FX01BTlkiIT09
aCkmJmYoIjc3IixoLGkpLCJERUZJTkVfTUFOWV9NRVJHRUQiPT09aD9uW2ldPXUobltpXSxhKToi
REVGSU5FX01BTlkiPT09aCYmKG5baV09YyhuW2ldLGEpKX1lbHNlIG5baV09YX19fX1mdW5jdGlv
biBhKGUsdCl7aWYodClmb3IodmFyIG4gaW4gdCl7dmFyIHI9dFtuXTtpZih0Lmhhc093blByb3Bl
cnR5KG4pKXt2YXIgbz1uIGluIF87byYmZigiNzgiLG4pO3ZhciBpPW4gaW4gZTtpJiZmKCI3OSIs
biksZVtuXT1yfX19ZnVuY3Rpb24gcyhlLHQpe2UmJnQmJiJvYmplY3QiPT10eXBlb2YgZSYmIm9i
amVjdCI9PXR5cGVvZiB0fHxmKCI4MCIpO2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHko
bikmJih2b2lkIDAhPT1lW25dJiZmKCI4MSIsbiksZVtuXT10W25dKTtyZXR1cm4gZX1mdW5jdGlv
biB1KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyks
cj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihudWxsPT1uKXJldHVybiByO2lmKG51bGw9PXIp
cmV0dXJuIG47dmFyIG89e307cmV0dXJuIHMobyxuKSxzKG8sciksb319ZnVuY3Rpb24gYyhlLHQp
e3JldHVybiBmdW5jdGlvbigpe2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLHQuYXBwbHkodGhpcyxh
cmd1bWVudHMpfX1mdW5jdGlvbiBwKGUsdCl7cmV0dXJuIHQuYmluZChlKX1mdW5jdGlvbiBsKGUp
e2Zvcih2YXIgdD1lLl9fcmVhY3RBdXRvQmluZFBhaXJzLG49MDtuPHQubGVuZ3RoO24rPTIpe3Zh
ciByPXRbbl0sbz10W24rMV07ZVtyXT1wKGUsbyl9fXZhciBmPWUoMzQpLGQ9ZSg0NSksaD1lKDEx
KSx5PWUoMTUpLHY9KGUoMjApLGUoMTkpKSxtPWUoNDEpLEU9KGUoNDIpLGUoNDQpLCJtaXhpbnMi
KSxnPVtdLGI9e21peGluczoiREVGSU5FX01BTlkiLHN0YXRpY3M6IkRFRklORV9NQU5ZIixwcm9w
VHlwZXM6IkRFRklORV9NQU5ZIixjb250ZXh0VHlwZXM6IkRFRklORV9NQU5ZIixjaGlsZENvbnRl
eHRUeXBlczoiREVGSU5FX01BTlkiLGdldERlZmF1bHRQcm9wczoiREVGSU5FX01BTllfTUVSR0VE
IixnZXRJbml0aWFsU3RhdGU6IkRFRklORV9NQU5ZX01FUkdFRCIsZ2V0Q2hpbGRDb250ZXh0OiJE
RUZJTkVfTUFOWV9NRVJHRUQiLHJlbmRlcjoiREVGSU5FX09OQ0UiLGNvbXBvbmVudFdpbGxNb3Vu
dDoiREVGSU5FX01BTlkiLGNvbXBvbmVudERpZE1vdW50OiJERUZJTkVfTUFOWSIsY29tcG9uZW50
V2lsbFJlY2VpdmVQcm9wczoiREVGSU5FX01BTlkiLHNob3VsZENvbXBvbmVudFVwZGF0ZToiREVG
SU5FX09OQ0UiLGNvbXBvbmVudFdpbGxVcGRhdGU6IkRFRklORV9NQU5ZIixjb21wb25lbnREaWRV
cGRhdGU6IkRFRklORV9NQU5ZIixjb21wb25lbnRXaWxsVW5tb3VudDoiREVGSU5FX01BTlkiLHVw
ZGF0ZUNvbXBvbmVudDoiT1ZFUlJJREVfQkFTRSJ9LF89e2Rpc3BsYXlOYW1lOmZ1bmN0aW9uKGUs
dCl7ZS5kaXNwbGF5TmFtZT10fSxtaXhpbnM6ZnVuY3Rpb24oZSx0KXtpZih0KWZvcih2YXIgbj0w
O248dC5sZW5ndGg7bisrKWkoZSx0W25dKX0sY2hpbGRDb250ZXh0VHlwZXM6ZnVuY3Rpb24oZSx0
KXtlLmNoaWxkQ29udGV4dFR5cGVzPWQoe30sZS5jaGlsZENvbnRleHRUeXBlcyx0KX0sY29udGV4
dFR5cGVzOmZ1bmN0aW9uKGUsdCl7ZS5jb250ZXh0VHlwZXM9ZCh7fSxlLmNvbnRleHRUeXBlcyx0
KX0sZ2V0RGVmYXVsdFByb3BzOmZ1bmN0aW9uKGUsdCl7ZS5nZXREZWZhdWx0UHJvcHM/ZS5nZXRE
ZWZhdWx0UHJvcHM9dShlLmdldERlZmF1bHRQcm9wcyx0KTplLmdldERlZmF1bHRQcm9wcz10fSxw
cm9wVHlwZXM6ZnVuY3Rpb24oZSx0KXtlLnByb3BUeXBlcz1kKHt9LGUucHJvcFR5cGVzLHQpfSxz
dGF0aWNzOmZ1bmN0aW9uKGUsdCl7YShlLHQpfSxhdXRvYmluZDpmdW5jdGlvbigpe319LHc9e3Jl
cGxhY2VTdGF0ZTpmdW5jdGlvbihlLHQpe3RoaXMudXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRl
KHRoaXMsZSksdCYmdGhpcy51cGRhdGVyLmVucXVldWVDYWxsYmFjayh0aGlzLHQsInJlcGxhY2VT
dGF0ZSIpfSxpc01vdW50ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51cGRhdGVyLmlzTW91bnRl
ZCh0aGlzKX19LEE9ZnVuY3Rpb24oKXt9O2QoQS5wcm90b3R5cGUsaC5wcm90b3R5cGUsdyk7dmFy
IFQ9e2NyZWF0ZUNsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0PXIoZnVuY3Rpb24oZSxuLHIpe3RoaXMu
X19yZWFjdEF1dG9CaW5kUGFpcnMubGVuZ3RoJiZsKHRoaXMpLHRoaXMucHJvcHM9ZSx0aGlzLmNv
bnRleHQ9bix0aGlzLnJlZnM9bSx0aGlzLnVwZGF0ZXI9cnx8dix0aGlzLnN0YXRlPW51bGw7dmFy
IG89dGhpcy5nZXRJbml0aWFsU3RhdGU/dGhpcy5nZXRJbml0aWFsU3RhdGUoKTpudWxsOygib2Jq
ZWN0IiE9dHlwZW9mIG98fEFycmF5LmlzQXJyYXkobykpJiZmKCI4MiIsdC5kaXNwbGF5TmFtZXx8
IlJlYWN0Q29tcG9zaXRlQ29tcG9uZW50IiksdGhpcy5zdGF0ZT1vfSk7dC5wcm90b3R5cGU9bmV3
IEEsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCx0LnByb3RvdHlwZS5fX3JlYWN0QXV0b0JpbmRQ
YWlycz1bXSxnLmZvckVhY2goaS5iaW5kKG51bGwsdCkpLGkodCxlKSx0LmdldERlZmF1bHRQcm9w
cyYmKHQuZGVmYXVsdFByb3BzPXQuZ2V0RGVmYXVsdFByb3BzKCkpLHQucHJvdG90eXBlLnJlbmRl
cnx8ZigiODMiKTtmb3IodmFyIG4gaW4gYil0LnByb3RvdHlwZVtuXXx8KHQucHJvdG90eXBlW25d
PW51bGwpO3JldHVybiB0fSxpbmplY3Rpb246e2luamVjdE1peGluOmZ1bmN0aW9uKGUpe2cucHVz
aChlKX19fTt0LmV4cG9ydHM9VH0sezExOjExLDE1OjE1LDE5OjE5LDIwOjIwLDM0OjM0LDQxOjQx
LDQyOjQyLDQ0OjQ0LDQ1OjQ1fV0sMTE6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVu
Y3Rpb24gcihlLHQsbil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz1hLHRo
aXMudXBkYXRlcj1ufHxpfXZhciBvPWUoMzQpLGk9ZSgxOSksYT0oZSgzMCksZSg0MSkpO2UoNDIp
LGUoNDQpO3IucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e30sci5wcm90b3R5cGUuc2V0U3Rh
dGU9ZnVuY3Rpb24oZSx0KXsib2JqZWN0IiE9dHlwZW9mIGUmJiJmdW5jdGlvbiIhPXR5cGVvZiBl
JiZudWxsIT1lJiZvKCI4NSIpLHRoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcyxlKSx0
JiZ0aGlzLnVwZGF0ZXIuZW5xdWV1ZUNhbGxiYWNrKHRoaXMsdCwic2V0U3RhdGUiKX0sci5wcm90
b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVw
ZGF0ZSh0aGlzKSxlJiZ0aGlzLnVwZGF0ZXIuZW5xdWV1ZUNhbGxiYWNrKHRoaXMsZSwiZm9yY2VV
cGRhdGUiKX07dC5leHBvcnRzPXJ9LHsxOToxOSwzMDozMCwzNDozNCw0MTo0MSw0Mjo0Miw0NDo0
NH1dLDEyOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMzUpLG89e3Nob3Vs
ZENvbXBvbmVudFVwZGF0ZTpmdW5jdGlvbihlLHQpe3JldHVybiByKHRoaXMsZSx0KX19O3QuZXhw
b3J0cz1vfSx7MzU6MzV9XSwxMzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj17
Y3VycmVudDpudWxsfTt0LmV4cG9ydHM9cn0se31dLDE0OltmdW5jdGlvbihlLHQsbil7InVzZSBz
dHJpY3QiO3ZhciByPWUoMTUpLG89ci5jcmVhdGVGYWN0b3J5LGk9e2E6bygiYSIpLGFiYnI6bygi
YWJiciIpLGFkZHJlc3M6bygiYWRkcmVzcyIpLGFyZWE6bygiYXJlYSIpLGFydGljbGU6bygiYXJ0
aWNsZSIpLGFzaWRlOm8oImFzaWRlIiksYXVkaW86bygiYXVkaW8iKSxiOm8oImIiKSxiYXNlOm8o
ImJhc2UiKSxiZGk6bygiYmRpIiksYmRvOm8oImJkbyIpLGJpZzpvKCJiaWciKSxibG9ja3F1b3Rl
Om8oImJsb2NrcXVvdGUiKSxib2R5Om8oImJvZHkiKSxicjpvKCJiciIpLGJ1dHRvbjpvKCJidXR0
b24iKSxjYW52YXM6bygiY2FudmFzIiksY2FwdGlvbjpvKCJjYXB0aW9uIiksY2l0ZTpvKCJjaXRl
IiksY29kZTpvKCJjb2RlIiksY29sOm8oImNvbCIpLGNvbGdyb3VwOm8oImNvbGdyb3VwIiksZGF0
YTpvKCJkYXRhIiksZGF0YWxpc3Q6bygiZGF0YWxpc3QiKSxkZDpvKCJkZCIpLGRlbDpvKCJkZWwi
KSxkZXRhaWxzOm8oImRldGFpbHMiKSxkZm46bygiZGZuIiksZGlhbG9nOm8oImRpYWxvZyIpLGRp
djpvKCJkaXYiKSxkbDpvKCJkbCIpLGR0Om8oImR0IiksZW06bygiZW0iKSxlbWJlZDpvKCJlbWJl
ZCIpLGZpZWxkc2V0Om8oImZpZWxkc2V0IiksZmlnY2FwdGlvbjpvKCJmaWdjYXB0aW9uIiksZmln
dXJlOm8oImZpZ3VyZSIpLGZvb3RlcjpvKCJmb290ZXIiKSxmb3JtOm8oImZvcm0iKSxoMTpvKCJo
MSIpLGgyOm8oImgyIiksaDM6bygiaDMiKSxoNDpvKCJoNCIpLGg1Om8oImg1IiksaDY6bygiaDYi
KSxoZWFkOm8oImhlYWQiKSxoZWFkZXI6bygiaGVhZGVyIiksaGdyb3VwOm8oImhncm91cCIpLGhy
Om8oImhyIiksaHRtbDpvKCJodG1sIiksaTpvKCJpIiksaWZyYW1lOm8oImlmcmFtZSIpLGltZzpv
KCJpbWciKSxpbnB1dDpvKCJpbnB1dCIpLGluczpvKCJpbnMiKSxrYmQ6bygia2JkIiksa2V5Z2Vu
Om8oImtleWdlbiIpLGxhYmVsOm8oImxhYmVsIiksbGVnZW5kOm8oImxlZ2VuZCIpLGxpOm8oImxp
IiksbGluazpvKCJsaW5rIiksbWFpbjpvKCJtYWluIiksbWFwOm8oIm1hcCIpLG1hcms6bygibWFy
ayIpLG1lbnU6bygibWVudSIpLG1lbnVpdGVtOm8oIm1lbnVpdGVtIiksbWV0YTpvKCJtZXRhIiks
bWV0ZXI6bygibWV0ZXIiKSxuYXY6bygibmF2Iiksbm9zY3JpcHQ6bygibm9zY3JpcHQiKSxvYmpl
Y3Q6bygib2JqZWN0Iiksb2w6bygib2wiKSxvcHRncm91cDpvKCJvcHRncm91cCIpLG9wdGlvbjpv
KCJvcHRpb24iKSxvdXRwdXQ6bygib3V0cHV0IikscDpvKCJwIikscGFyYW06bygicGFyYW0iKSxw
aWN0dXJlOm8oInBpY3R1cmUiKSxwcmU6bygicHJlIikscHJvZ3Jlc3M6bygicHJvZ3Jlc3MiKSxx
Om8oInEiKSxycDpvKCJycCIpLHJ0Om8oInJ0IikscnVieTpvKCJydWJ5IiksczpvKCJzIiksc2Ft
cDpvKCJzYW1wIiksc2NyaXB0Om8oInNjcmlwdCIpLHNlY3Rpb246bygic2VjdGlvbiIpLHNlbGVj
dDpvKCJzZWxlY3QiKSxzbWFsbDpvKCJzbWFsbCIpLHNvdXJjZTpvKCJzb3VyY2UiKSxzcGFuOm8o
InNwYW4iKSxzdHJvbmc6bygic3Ryb25nIiksc3R5bGU6bygic3R5bGUiKSxzdWI6bygic3ViIiks
c3VtbWFyeTpvKCJzdW1tYXJ5Iiksc3VwOm8oInN1cCIpLHRhYmxlOm8oInRhYmxlIiksdGJvZHk6
bygidGJvZHkiKSx0ZDpvKCJ0ZCIpLHRleHRhcmVhOm8oInRleHRhcmVhIiksdGZvb3Q6bygidGZv
b3QiKSx0aDpvKCJ0aCIpLHRoZWFkOm8oInRoZWFkIiksdGltZTpvKCJ0aW1lIiksdGl0bGU6bygi
dGl0bGUiKSx0cjpvKCJ0ciIpLHRyYWNrOm8oInRyYWNrIiksdTpvKCJ1IiksdWw6bygidWwiKSx2
YXI6bygidmFyIiksdmlkZW86bygidmlkZW8iKSx3YnI6bygid2JyIiksY2lyY2xlOm8oImNpcmNs
ZSIpLGNsaXBQYXRoOm8oImNsaXBQYXRoIiksZGVmczpvKCJkZWZzIiksZWxsaXBzZTpvKCJlbGxp
cHNlIiksZzpvKCJnIiksaW1hZ2U6bygiaW1hZ2UiKSxsaW5lOm8oImxpbmUiKSxsaW5lYXJHcmFk
aWVudDpvKCJsaW5lYXJHcmFkaWVudCIpLG1hc2s6bygibWFzayIpLHBhdGg6bygicGF0aCIpLHBh
dHRlcm46bygicGF0dGVybiIpLHBvbHlnb246bygicG9seWdvbiIpLHBvbHlsaW5lOm8oInBvbHls
aW5lIikscmFkaWFsR3JhZGllbnQ6bygicmFkaWFsR3JhZGllbnQiKSxyZWN0Om8oInJlY3QiKSxz
dG9wOm8oInN0b3AiKSxzdmc6bygic3ZnIiksdGV4dDpvKCJ0ZXh0IiksdHNwYW46bygidHNwYW4i
KX07dC5leHBvcnRzPWl9LHsxNToxNX1dLDE1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3Qi
O2Z1bmN0aW9uIHIoZSl7cmV0dXJuIHZvaWQgMCE9PWUucmVmfWZ1bmN0aW9uIG8oZSl7cmV0dXJu
IHZvaWQgMCE9PWUua2V5fXZhciBpPWUoNDUpLGE9ZSgxMykscz0oZSg0NCksZSgzMCksT2JqZWN0
LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSksdT1lKDE2KSxjPXtrZXk6ITAscmVmOiEwLF9fc2Vs
ZjohMCxfX3NvdXJjZTohMH0scD1mdW5jdGlvbihlLHQsbixyLG8saSxhKXtyZXR1cm57JCR0eXBl
b2Y6dSx0eXBlOmUsa2V5OnQscmVmOm4scHJvcHM6YSxfb3duZXI6aX19O3AuY3JlYXRlRWxlbWVu
dD1mdW5jdGlvbihlLHQsbil7dmFyIGksdT17fSxsPW51bGwsZj1udWxsO2lmKG51bGwhPXQpe3Io
dCkmJihmPXQucmVmKSxvKHQpJiYobD0iIit0LmtleSksdm9pZCAwPT09dC5fX3NlbGY/bnVsbDp0
Ll9fc2VsZix2b2lkIDA9PT10Ll9fc291cmNlP251bGw6dC5fX3NvdXJjZTtmb3IoaSBpbiB0KXMu
Y2FsbCh0LGkpJiYhYy5oYXNPd25Qcm9wZXJ0eShpKSYmKHVbaV09dFtpXSl9dmFyIGQ9YXJndW1l
bnRzLmxlbmd0aC0yO2lmKDE9PT1kKXUuY2hpbGRyZW49bjtlbHNlIGlmKGQ+MSl7Zm9yKHZhciBo
PUFycmF5KGQpLHk9MDt5PGQ7eSsrKWhbeV09YXJndW1lbnRzW3krMl07dS5jaGlsZHJlbj1ofWlm
KGUmJmUuZGVmYXVsdFByb3BzKXt2YXIgdj1lLmRlZmF1bHRQcm9wcztmb3IoaSBpbiB2KXZvaWQg
MD09PXVbaV0mJih1W2ldPXZbaV0pfXJldHVybiBwKGUsbCxmLDAsMCxhLmN1cnJlbnQsdSl9LHAu
Y3JlYXRlRmFjdG9yeT1mdW5jdGlvbihlKXt2YXIgdD1wLmNyZWF0ZUVsZW1lbnQuYmluZChudWxs
LGUpO3JldHVybiB0LnR5cGU9ZSx0fSxwLmNsb25lQW5kUmVwbGFjZUtleT1mdW5jdGlvbihlLHQp
e3JldHVybiBwKGUudHlwZSx0LGUucmVmLGUuX3NlbGYsZS5fc291cmNlLGUuX293bmVyLGUucHJv
cHMpfSxwLmNsb25lRWxlbWVudD1mdW5jdGlvbihlLHQsbil7dmFyIHUsbD1pKHt9LGUucHJvcHMp
LGY9ZS5rZXksZD1lLnJlZixoPShlLl9zZWxmLGUuX3NvdXJjZSxlLl9vd25lcik7aWYobnVsbCE9
dCl7cih0KSYmKGQ9dC5yZWYsaD1hLmN1cnJlbnQpLG8odCkmJihmPSIiK3Qua2V5KTt2YXIgeTtl
LnR5cGUmJmUudHlwZS5kZWZhdWx0UHJvcHMmJih5PWUudHlwZS5kZWZhdWx0UHJvcHMpO2Zvcih1
IGluIHQpcy5jYWxsKHQsdSkmJiFjLmhhc093blByb3BlcnR5KHUpJiYodm9pZCAwPT09dFt1XSYm
dm9pZCAwIT09eT9sW3VdPXlbdV06bFt1XT10W3VdKX12YXIgdj1hcmd1bWVudHMubGVuZ3RoLTI7
aWYoMT09PXYpbC5jaGlsZHJlbj1uO2Vsc2UgaWYodj4xKXtmb3IodmFyIG09QXJyYXkodiksRT0w
O0U8djtFKyspbVtFXT1hcmd1bWVudHNbRSsyXTtsLmNoaWxkcmVuPW19cmV0dXJuIHAoZS50eXBl
LGYsZCwwLDAsaCxsKX0scC5pc1ZhbGlkRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0
Ij09dHlwZW9mIGUmJm51bGwhPT1lJiZlLiQkdHlwZW9mPT09dX0sdC5leHBvcnRzPXB9LHsxMzox
MywxNjoxNiwzMDozMCw0NDo0NCw0NTo0NX1dLDE2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJp
Y3QiO3ZhciByPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3ImJlN5bWJvbC5m
b3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDM7dC5leHBvcnRzPXJ9LHt9XSwxNzpbZnVuY3Rpb24o
ZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDM0KSxvPWUoOSksaT1lKDE1KSxhPWUoNDApLHM9
KGUoNDIpLGUoNDQpLHtjcmVhdGU6ZnVuY3Rpb24oZSl7aWYoIm9iamVjdCIhPXR5cGVvZiBlfHwh
ZXx8QXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZTtpZihpLmlzVmFsaWRFbGVtZW50KGUpKXJldHVy
biBlOzE9PT1lLm5vZGVUeXBlJiZyKCIwIik7dmFyIHQ9W107Zm9yKHZhciBuIGluIGUpby5tYXBJ
bnRvV2l0aEtleVByZWZpeEludGVybmFsKGVbbl0sdCxuLGEudGhhdFJldHVybnNBcmd1bWVudCk7
cmV0dXJuIHR9fSk7dC5leHBvcnRzPXN9LHsxNToxNSwzNDozNCw0MDo0MCw0Mjo0Miw0NDo0NCw5
Ojl9XSwxODpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dGhp
cy52YWx1ZT1lLHRoaXMucmVxdWVzdENoYW5nZT10fWZ1bmN0aW9uIG8oZSl7dmFyIHQ9e3ZhbHVl
OnZvaWQgMD09PWU/aS5Qcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQ6ZS5pc1JlcXVpcmVkLHJlcXVl
c3RDaGFuZ2U6aS5Qcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkfTtyZXR1cm4gaS5Qcm9wVHlwZXMu
c2hhcGUodCl9dmFyIGk9ZSg1KTtyLlByb3BUeXBlcz17bGluazpvfSx0LmV4cG9ydHM9cn0sezU6
NX1dLDE5OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPShlKDQ0KSx7aXNNb3Vu
dGVkOmZ1bmN0aW9uKGUpe3JldHVybiExfSxlbnF1ZXVlQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXt9
LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlvbihlKXt9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVu
Y3Rpb24oZSx0KXt9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbihlLHQpe319KTt0LmV4cG9ydHM9
cn0sezQ0OjQ0fV0sMjA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9e307dC5l
eHBvcnRzPXJ9LHt9XSwyMTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDE1
KSxvPXIuaXNWYWxpZEVsZW1lbnQsaT1lKDQ3KTt0LmV4cG9ydHM9aShvKX0sezE1OjE1LDQ3OjQ3
fV0sMjI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7dGhp
cy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz11LHRoaXMudXBkYXRlcj1ufHxzfWZ1
bmN0aW9uIG8oKXt9dmFyIGk9ZSg0NSksYT1lKDExKSxzPWUoMTkpLHU9ZSg0MSk7by5wcm90b3R5
cGU9YS5wcm90b3R5cGUsci5wcm90b3R5cGU9bmV3IG8sci5wcm90b3R5cGUuY29uc3RydWN0b3I9
cixpKHIucHJvdG90eXBlLGEucHJvdG90eXBlKSxyLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBv
bmVudD0hMCx0LmV4cG9ydHM9cn0sezExOjExLDE5OjE5LDQxOjQxLDQ1OjQ1fV0sMjM6W2Z1bmN0
aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXt9O3JldHVybiBm
dW5jdGlvbihyKXtuW3RdPXIsZS5zZXRTdGF0ZShuKX19dmFyIG89e2NyZWF0ZVN0YXRlU2V0dGVy
OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scixvLGksYSxzKXt2YXIgdT10LmNhbGwo
ZSxuLHIsbyxpLGEscyk7dSYmZS5zZXRTdGF0ZSh1KX19LGNyZWF0ZVN0YXRlS2V5U2V0dGVyOmZ1
bmN0aW9uKGUsdCl7dmFyIG49ZS5fX2tleVNldHRlcnN8fChlLl9fa2V5U2V0dGVycz17fSk7cmV0
dXJuIG5bdF18fChuW3RdPXIoZSx0KSl9fTtvLk1peGluPXtjcmVhdGVTdGF0ZVNldHRlcjpmdW5j
dGlvbihlKXtyZXR1cm4gby5jcmVhdGVTdGF0ZVNldHRlcih0aGlzLGUpfSxjcmVhdGVTdGF0ZUtl
eVNldHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gby5jcmVhdGVTdGF0ZUtleVNldHRlcih0aGlzLGUp
fX0sdC5leHBvcnRzPW99LHt9XSwyNDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIg
cj1lKDMxKSxvPXtnZXRDaGlsZE1hcHBpbmc6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT9yKGUpOmV9
LG1lcmdlQ2hpbGRNYXBwaW5nczpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4obil7cmV0dXJuIHQu
aGFzT3duUHJvcGVydHkobik/dFtuXTplW25dfWU9ZXx8e30sdD10fHx7fTt2YXIgcj17fSxvPVtd
O2Zvcih2YXIgaSBpbiBlKXQuaGFzT3duUHJvcGVydHkoaSk/by5sZW5ndGgmJihyW2ldPW8sbz1b
XSk6by5wdXNoKGkpO3ZhciBhLHM9e307Zm9yKHZhciB1IGluIHQpe2lmKHIuaGFzT3duUHJvcGVy
dHkodSkpZm9yKGE9MDthPHJbdV0ubGVuZ3RoO2ErKyl7dmFyIGM9clt1XVthXTtzW3JbdV1bYV1d
PW4oYyl9c1t1XT1uKHUpfWZvcihhPTA7YTxvLmxlbmd0aDthKyspc1tvW2FdXT1uKG9bYV0pO3Jl
dHVybiBzfX07dC5leHBvcnRzPW99LHszMTozMX1dLDI1OltmdW5jdGlvbihlLHQsbil7InVzZSBz
dHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe2UuYWRkRXZlbnRMaXN0ZW5lcih0LG4sITEpfWZ1bmN0
aW9uIG8oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4sITEpfXZhciBpPWUoMzkpLGE9
ZSgxKSxzPVtdO2kuY2FuVXNlRE9NJiZmdW5jdGlvbigpe3ZhciBlPWEoImFuaW1hdGlvbmVuZCIp
LHQ9YSgidHJhbnNpdGlvbmVuZCIpO2UmJnMucHVzaChlKSx0JiZzLnB1c2godCl9KCk7dmFyIHU9
e2FkZEVuZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oZSx0KXtpZigwPT09cy5sZW5ndGgpcmV0dXJu
IHZvaWQgd2luZG93LnNldFRpbWVvdXQodCwwKTtzLmZvckVhY2goZnVuY3Rpb24obil7cihlLG4s
dCl9KX0scmVtb3ZlRW5kRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihlLHQpezAhPT1zLmxlbmd0aCYm
cy5mb3JFYWNoKGZ1bmN0aW9uKG4pe28oZSxuLHQpfSl9fTt0LmV4cG9ydHM9dX0sezE6MSwzOToz
OX1dLDI2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZigh
KGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNz
IGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBvKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5j
ZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVl
biBjYWxsZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPXR5cGVvZiB0JiYiZnVuY3Rpb24iIT10eXBl
b2YgdD9lOnR9ZnVuY3Rpb24gaShlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09
dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51
bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVh
dGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3Jp
dGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2Jq
ZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9dmFyIGE9ZSg0NSkscz1lKDUp
LHU9ZSgyNCksYz1lKDQ3KSxwPWMocy5pc1ZhbGlkRWxlbWVudCksbD1lKDQwKSxmPWZ1bmN0aW9u
KGUpe2Z1bmN0aW9uIHQoKXt2YXIgbixpLHM7cih0aGlzLHQpO2Zvcih2YXIgYz1hcmd1bWVudHMu
bGVuZ3RoLHA9QXJyYXkoYyksbD0wO2w8YztsKyspcFtsXT1hcmd1bWVudHNbbF07cmV0dXJuIG49
aT1vKHRoaXMsZS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChwKSkpLGkuc3RhdGU9e2NoaWxk
cmVuOnUuZ2V0Q2hpbGRNYXBwaW5nKGkucHJvcHMuY2hpbGRyZW4pfSxpLnBlcmZvcm1BcHBlYXI9
ZnVuY3Rpb24oZSl7aS5jdXJyZW50bHlUcmFuc2l0aW9uaW5nS2V5c1tlXT0hMDt2YXIgdD1pLnJl
ZnNbZV07dC5jb21wb25lbnRXaWxsQXBwZWFyP3QuY29tcG9uZW50V2lsbEFwcGVhcihpLl9oYW5k
bGVEb25lQXBwZWFyaW5nLmJpbmQoaSxlKSk6aS5faGFuZGxlRG9uZUFwcGVhcmluZyhlKX0saS5f
aGFuZGxlRG9uZUFwcGVhcmluZz1mdW5jdGlvbihlKXt2YXIgdD1pLnJlZnNbZV07dC5jb21wb25l
bnREaWRBcHBlYXImJnQuY29tcG9uZW50RGlkQXBwZWFyKCksZGVsZXRlIGkuY3VycmVudGx5VHJh
bnNpdGlvbmluZ0tleXNbZV07dmFyIG49dS5nZXRDaGlsZE1hcHBpbmcoaS5wcm9wcy5jaGlsZHJl
bik7biYmbi5oYXNPd25Qcm9wZXJ0eShlKXx8aS5wZXJmb3JtTGVhdmUoZSl9LGkucGVyZm9ybUVu
dGVyPWZ1bmN0aW9uKGUpe2kuY3VycmVudGx5VHJhbnNpdGlvbmluZ0tleXNbZV09ITA7dmFyIHQ9
aS5yZWZzW2VdO3QuY29tcG9uZW50V2lsbEVudGVyP3QuY29tcG9uZW50V2lsbEVudGVyKGkuX2hh
bmRsZURvbmVFbnRlcmluZy5iaW5kKGksZSkpOmkuX2hhbmRsZURvbmVFbnRlcmluZyhlKX0saS5f
aGFuZGxlRG9uZUVudGVyaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PWkucmVmc1tlXTt0LmNvbXBvbmVu
dERpZEVudGVyJiZ0LmNvbXBvbmVudERpZEVudGVyKCksZGVsZXRlIGkuY3VycmVudGx5VHJhbnNp
dGlvbmluZ0tleXNbZV07dmFyIG49dS5nZXRDaGlsZE1hcHBpbmcoaS5wcm9wcy5jaGlsZHJlbik7
biYmbi5oYXNPd25Qcm9wZXJ0eShlKXx8aS5wZXJmb3JtTGVhdmUoZSl9LGkucGVyZm9ybUxlYXZl
PWZ1bmN0aW9uKGUpe2kuY3VycmVudGx5VHJhbnNpdGlvbmluZ0tleXNbZV09ITA7dmFyIHQ9aS5y
ZWZzW2VdO3QuY29tcG9uZW50V2lsbExlYXZlP3QuY29tcG9uZW50V2lsbExlYXZlKGkuX2hhbmRs
ZURvbmVMZWF2aW5nLmJpbmQoaSxlKSk6aS5faGFuZGxlRG9uZUxlYXZpbmcoZSl9LGkuX2hhbmRs
ZURvbmVMZWF2aW5nPWZ1bmN0aW9uKGUpe3ZhciB0PWkucmVmc1tlXTt0LmNvbXBvbmVudERpZExl
YXZlJiZ0LmNvbXBvbmVudERpZExlYXZlKCksZGVsZXRlIGkuY3VycmVudGx5VHJhbnNpdGlvbmlu
Z0tleXNbZV07dmFyIG49dS5nZXRDaGlsZE1hcHBpbmcoaS5wcm9wcy5jaGlsZHJlbik7biYmbi5o
YXNPd25Qcm9wZXJ0eShlKT9pLnBlcmZvcm1FbnRlcihlKTppLnNldFN0YXRlKGZ1bmN0aW9uKHQp
e3ZhciBuPWEoe30sdC5jaGlsZHJlbik7cmV0dXJuIGRlbGV0ZSBuW2VdLHtjaGlsZHJlbjpufX0p
fSxzPW4sbyhpLHMpfXJldHVybiBpKHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbE1vdW50
PWZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50bHlUcmFuc2l0aW9uaW5nS2V5cz17fSx0aGlzLmtleXNU
b0VudGVyPVtdLHRoaXMua2V5c1RvTGVhdmU9W119LHQucHJvdG90eXBlLmNvbXBvbmVudERpZE1v
dW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZS5jaGlsZHJlbjtmb3IodmFyIHQgaW4gZSll
W3RdJiZ0aGlzLnBlcmZvcm1BcHBlYXIodCl9LHQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNl
aXZlUHJvcHM9ZnVuY3Rpb24oZSl7dmFyIHQ9dS5nZXRDaGlsZE1hcHBpbmcoZS5jaGlsZHJlbiks
bj10aGlzLnN0YXRlLmNoaWxkcmVuO3RoaXMuc2V0U3RhdGUoe2NoaWxkcmVuOnUubWVyZ2VDaGls
ZE1hcHBpbmdzKG4sdCl9KTt2YXIgcjtmb3IociBpbiB0KXt2YXIgbz1uJiZuLmhhc093blByb3Bl
cnR5KHIpOyF0W3JdfHxvfHx0aGlzLmN1cnJlbnRseVRyYW5zaXRpb25pbmdLZXlzW3JdfHx0aGlz
LmtleXNUb0VudGVyLnB1c2gocil9Zm9yKHIgaW4gbil7dmFyIGk9dCYmdC5oYXNPd25Qcm9wZXJ0
eShyKTshbltyXXx8aXx8dGhpcy5jdXJyZW50bHlUcmFuc2l0aW9uaW5nS2V5c1tyXXx8dGhpcy5r
ZXlzVG9MZWF2ZS5wdXNoKHIpfX0sdC5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPWZ1bmN0
aW9uKCl7dmFyIGU9dGhpcy5rZXlzVG9FbnRlcjt0aGlzLmtleXNUb0VudGVyPVtdLGUuZm9yRWFj
aCh0aGlzLnBlcmZvcm1FbnRlcik7dmFyIHQ9dGhpcy5rZXlzVG9MZWF2ZTt0aGlzLmtleXNUb0xl
YXZlPVtdLHQuZm9yRWFjaCh0aGlzLnBlcmZvcm1MZWF2ZSl9LHQucHJvdG90eXBlLnJlbmRlcj1m
dW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzLnN0YXRlLmNoaWxkcmVuKXt2YXIg
bj10aGlzLnN0YXRlLmNoaWxkcmVuW3RdO24mJmUucHVzaChzLmNsb25lRWxlbWVudCh0aGlzLnBy
b3BzLmNoaWxkRmFjdG9yeShuKSx7cmVmOnQsa2V5OnR9KSl9dmFyIHI9YSh7fSx0aGlzLnByb3Bz
KTtyZXR1cm4gZGVsZXRlIHIudHJhbnNpdGlvbkxlYXZlLGRlbGV0ZSByLnRyYW5zaXRpb25OYW1l
LGRlbGV0ZSByLnRyYW5zaXRpb25BcHBlYXIsZGVsZXRlIHIudHJhbnNpdGlvbkVudGVyLGRlbGV0
ZSByLmNoaWxkRmFjdG9yeSxkZWxldGUgci50cmFuc2l0aW9uTGVhdmVUaW1lb3V0LGRlbGV0ZSBy
LnRyYW5zaXRpb25FbnRlclRpbWVvdXQsZGVsZXRlIHIudHJhbnNpdGlvbkFwcGVhclRpbWVvdXQs
ZGVsZXRlIHIuY29tcG9uZW50LHMuY3JlYXRlRWxlbWVudCh0aGlzLnByb3BzLmNvbXBvbmVudCxy
LGUpfSx0fShzLkNvbXBvbmVudCk7Zi5kaXNwbGF5TmFtZT0iUmVhY3RUcmFuc2l0aW9uR3JvdXAi
LGYucHJvcFR5cGVzPXtjb21wb25lbnQ6cC5hbnksY2hpbGRGYWN0b3J5OnAuZnVuY30sZi5kZWZh
dWx0UHJvcHM9e2NvbXBvbmVudDoic3BhbiIsY2hpbGRGYWN0b3J5OmwudGhhdFJldHVybnNBcmd1
bWVudH0sdC5leHBvcnRzPWZ9LHsyNDoyNCw0MDo0MCw0NTo0NSw0Nzo0Nyw1OjV9XSwyNzpbZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9IjE1LjUuNCJ9LHt9XSwyODpbZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDMpLG89ZSg1KSxpPShlKDYpLGUoMTIp
KSxhPWUoNykscz1lKDE3KSx1PWUoMjYpLGM9ZSgzNSkscD1lKDM3KTtvLmFkZG9ucz17Q1NTVHJh
bnNpdGlvbkdyb3VwOmEsTGlua2VkU3RhdGVNaXhpbjpyLFB1cmVSZW5kZXJNaXhpbjppLFRyYW5z
aXRpb25Hcm91cDp1LGNyZWF0ZUZyYWdtZW50OnMuY3JlYXRlLHNoYWxsb3dDb21wYXJlOmMsdXBk
YXRlOnB9LHQuZXhwb3J0cz1vfSx7MTI6MTIsMTc6MTcsMjY6MjYsMzozLDM1OjM1LDM3OjM3LDU6
NSw2OjYsNzo3fV0sMjk6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSg0NSks
bz1lKDI4KSxpPXIobyx7X19TRUNSRVRfSU5KRUNURURfUkVBQ1RfRE9NX0RPX05PVF9VU0VfT1Jf
WU9VX1dJTExfQkVfRklSRUQ6bnVsbCxfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9Z
T1VfV0lMTF9CRV9GSVJFRDp7UmVhY3RDdXJyZW50T3duZXI6ZSgxMyl9fSk7dC5leHBvcnRzPWl9
LHsxMzoxMywyODoyOCw0NTo0NX1dLDMwOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3Qu
ZXhwb3J0cz0hMX0se31dLDMxOltmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKG4peyJ1c2Ugc3Ry
aWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe2lmKGUmJiJvYmplY3QiPT10eXBlb2YgZSl7dmFyIG89
ZTt2b2lkIDA9PT1vW25dJiZudWxsIT10JiYob1tuXT10KX19ZnVuY3Rpb24gbyhlLHQpe2lmKG51
bGw9PWUpcmV0dXJuIGU7dmFyIG49e307cmV0dXJuIGkoZSxyLG4pLG59dmFyIGk9KGUoMiksZSgz
NikpO2UoNDQpO3ZvaWQgMCE9PW4mJm4uZW52LHQuZXhwb3J0cz1vfSkuY2FsbCh0aGlzLHZvaWQg
MCl9LHsyOjIsMzY6MzYsNDQ6NDR9XSwzMjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijtm
dW5jdGlvbiByKGUpe3ZhciB0PWUmJihvJiZlW29dfHxlW2ldKTtpZigiZnVuY3Rpb24iPT10eXBl
b2YgdClyZXR1cm4gdH12YXIgbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRl
cmF0b3IsaT0iQEBpdGVyYXRvciI7dC5leHBvcnRzPXJ9LHt9XSwzMzpbZnVuY3Rpb24oZSx0LG4p
eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBpLmlzVmFsaWRFbGVtZW50KGUpfHxv
KCIxNDMiKSxlfXZhciBvPWUoMzQpLGk9ZSgxNSk7ZSg0Mik7dC5leHBvcnRzPXJ9LHsxNToxNSwz
NDozNCw0Mjo0Mn1dLDM0OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIo
ZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgtMSxuPSJNaW5pZmllZCBSZWFjdCBlcnJvciAj
IitlKyI7IHZpc2l0IGh0dHA6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9lcnJvci1k
ZWNvZGVyLmh0bWw/aW52YXJpYW50PSIrZSxyPTA7cjx0O3IrKyluKz0iJmFyZ3NbXT0iK2VuY29k
ZVVSSUNvbXBvbmVudChhcmd1bWVudHNbcisxXSk7bis9IiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBv
ciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFu
ZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIjt2YXIgbz1uZXcgRXJyb3Iobik7dGhyb3cg
by5uYW1lPSJJbnZhcmlhbnQgVmlvbGF0aW9uIixvLmZyYW1lc1RvUG9wPTEsb310LmV4cG9ydHM9
cn0se31dLDM1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4p
e3JldHVybiFvKGUucHJvcHMsdCl8fCFvKGUuc3RhdGUsbil9dmFyIG89ZSg0Myk7dC5leHBvcnRz
PXJ9LHs0Mzo0M31dLDM2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIo
ZSx0KXtyZXR1cm4gZSYmIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT1lLmtleT9jLmVzY2FwZShl
LmtleSk6dC50b1N0cmluZygzNil9ZnVuY3Rpb24gbyhlLHQsbixpKXt2YXIgZj10eXBlb2YgZTtp
ZigidW5kZWZpbmVkIiE9PWYmJiJib29sZWFuIiE9PWZ8fChlPW51bGwpLG51bGw9PT1lfHwic3Ry
aW5nIj09PWZ8fCJudW1iZXIiPT09Znx8Im9iamVjdCI9PT1mJiZlLiQkdHlwZW9mPT09cylyZXR1
cm4gbihpLGUsIiI9PT10P3ArcihlLDApOnQpLDE7dmFyIGQsaCx5PTAsdj0iIj09PXQ/cDp0K2w7
aWYoQXJyYXkuaXNBcnJheShlKSlmb3IodmFyIG09MDttPGUubGVuZ3RoO20rKylkPWVbbV0saD12
K3IoZCxtKSx5Kz1vKGQsaCxuLGkpO2Vsc2V7dmFyIEU9dShlKTtpZihFKXt2YXIgZyxiPUUuY2Fs
bChlKTtpZihFIT09ZS5lbnRyaWVzKWZvcih2YXIgXz0wOyEoZz1iLm5leHQoKSkuZG9uZTspZD1n
LnZhbHVlLGg9dityKGQsXysrKSx5Kz1vKGQsaCxuLGkpO2Vsc2UgZm9yKDshKGc9Yi5uZXh0KCkp
LmRvbmU7KXt2YXIgdz1nLnZhbHVlO3cmJihkPXdbMV0saD12K2MuZXNjYXBlKHdbMF0pK2wrcihk
LDApLHkrPW8oZCxoLG4saSkpfX1lbHNlIGlmKCJvYmplY3QiPT09Zil7dmFyIEE9U3RyaW5nKGUp
O2EoIjMxIiwiW29iamVjdCBPYmplY3RdIj09PUE/Im9iamVjdCB3aXRoIGtleXMgeyIrT2JqZWN0
LmtleXMoZSkuam9pbigiLCAiKSsifSI6QSwiIil9fXJldHVybiB5fWZ1bmN0aW9uIGkoZSx0LG4p
e3JldHVybiBudWxsPT1lPzA6byhlLCIiLHQsbil9dmFyIGE9ZSgzNCkscz0oZSgxMyksZSgxNikp
LHU9ZSgzMiksYz0oZSg0MiksZSgyKSkscD0oZSg0NCksIi4iKSxsPSI6Ijt0LmV4cG9ydHM9aX0s
ezEzOjEzLDE2OjE2LDI6MiwzMjozMiwzNDozNCw0Mjo0Miw0NDo0NH1dLDM3OltmdW5jdGlvbihl
LHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/
ZS5jb25jYXQoKTplJiYib2JqZWN0Ij09dHlwZW9mIGU/cyhuZXcgZS5jb25zdHJ1Y3RvcixlKTpl
fWZ1bmN0aW9uIG8oZSx0LG4pe0FycmF5LmlzQXJyYXkoZSl8fGEoIjEiLG4sZSk7dmFyIHI9dFtu
XTtBcnJheS5pc0FycmF5KHIpfHxhKCIyIixuLHIpfWZ1bmN0aW9uIGkoZSx0KXtpZigib2JqZWN0
IiE9dHlwZW9mIHQmJmEoIjMiLHkuam9pbigiLCAiKSxmKSx1LmNhbGwodCxmKSlyZXR1cm4gMSE9
PU9iamVjdC5rZXlzKHQpLmxlbmd0aCYmYSgiNCIsZiksdFtmXTt2YXIgbj1yKGUpO2lmKHUuY2Fs
bCh0LGQpKXt2YXIgbT10W2RdO20mJiJvYmplY3QiPT10eXBlb2YgbXx8YSgiNSIsZCxtKSxuJiYi
b2JqZWN0Ij09dHlwZW9mIG58fGEoIjYiLGQsbikscyhuLHRbZF0pfXUuY2FsbCh0LGMpJiYobyhl
LHQsYyksdFtjXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe24ucHVzaChlKX0pKSx1LmNhbGwodCxwKSYm
KG8oZSx0LHApLHRbcF0uZm9yRWFjaChmdW5jdGlvbihlKXtuLnVuc2hpZnQoZSl9KSksdS5jYWxs
KHQsbCkmJihBcnJheS5pc0FycmF5KGUpfHxhKCI3IixsLGUpLEFycmF5LmlzQXJyYXkodFtsXSl8
fGEoIjgiLGwsdFtsXSksdFtsXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe0FycmF5LmlzQXJyYXkoZSl8
fGEoIjgiLGwsdFtsXSksbi5zcGxpY2UuYXBwbHkobixlKX0pKSx1LmNhbGwodCxoKSYmKCJmdW5j
dGlvbiIhPXR5cGVvZiB0W2hdJiZhKCI5IixoLHRbaF0pLG49dFtoXShuKSk7Zm9yKHZhciBFIGlu
IHQpdi5oYXNPd25Qcm9wZXJ0eShFKSYmdltFXXx8KG5bRV09aShlW0VdLHRbRV0pKTtyZXR1cm4g
bn12YXIgYT1lKDM0KSxzPWUoNDUpLHU9KGUoNDIpLHt9Lmhhc093blByb3BlcnR5KSxjPSIkcHVz
aCIscD0iJHVuc2hpZnQiLGw9IiRzcGxpY2UiLGY9IiRzZXQiLGQ9IiRtZXJnZSIsaD0iJGFwcGx5
Iix5PVtjLHAsbCxmLGQsaF0sdj17fTt5LmZvckVhY2goZnVuY3Rpb24oZSl7dltlXT0hMH0pLHQu
ZXhwb3J0cz1pfSx7MzQ6MzQsNDI6NDIsNDU6NDV9XSwzODpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ug
c3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPWU7bi5wYXJlbnROb2RlOyluPW4ucGFy
ZW50Tm9kZTt2YXIgcj1uLnF1ZXJ5U2VsZWN0b3JBbGwodCk7cmV0dXJuLTEhPT1BcnJheS5wcm90
b3R5cGUuaW5kZXhPZi5jYWxsKHIsZSl9dmFyIG89ZSg0MiksaT17YWRkQ2xhc3M6ZnVuY3Rpb24o
ZSx0KXtyZXR1cm4vXHMvLnRlc3QodCkmJm8oITEpLHQmJihlLmNsYXNzTGlzdD9lLmNsYXNzTGlz
dC5hZGQodCk6aS5oYXNDbGFzcyhlLHQpfHwoZS5jbGFzc05hbWU9ZS5jbGFzc05hbWUrIiAiK3Qp
KSxlfSxyZW1vdmVDbGFzczpmdW5jdGlvbihlLHQpe3JldHVybi9ccy8udGVzdCh0KSYmbyghMSks
dCYmKGUuY2xhc3NMaXN0P2UuY2xhc3NMaXN0LnJlbW92ZSh0KTppLmhhc0NsYXNzKGUsdCkmJihl
LmNsYXNzTmFtZT1lLmNsYXNzTmFtZS5yZXBsYWNlKG5ldyBSZWdFeHAoIihefFxccykiK3QrIig/
Olxcc3wkKSIsImciKSwiJDEiKS5yZXBsYWNlKC9ccysvZywiICIpLnJlcGxhY2UoL15ccyp8XHMq
JC9nLCIiKSkpLGV9LGNvbmRpdGlvbkNsYXNzOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4obj9pLmFk
ZENsYXNzOmkucmVtb3ZlQ2xhc3MpKGUsdCl9LGhhc0NsYXNzOmZ1bmN0aW9uKGUsdCl7cmV0dXJu
L1xzLy50ZXN0KHQpJiZvKCExKSxlLmNsYXNzTGlzdD8hIXQmJmUuY2xhc3NMaXN0LmNvbnRhaW5z
KHQpOigiICIrZS5jbGFzc05hbWUrIiAiKS5pbmRleE9mKCIgIit0KyIgIik+LTF9LG1hdGNoZXNT
ZWxlY3RvcjpmdW5jdGlvbihlLHQpe3JldHVybihlLm1hdGNoZXN8fGUud2Via2l0TWF0Y2hlc1Nl
bGVjdG9yfHxlLm1vek1hdGNoZXNTZWxlY3Rvcnx8ZS5tc01hdGNoZXNTZWxlY3Rvcnx8ZnVuY3Rp
b24odCl7cmV0dXJuIHIoZSx0KX0pLmNhbGwoZSx0KX19O3QuZXhwb3J0cz1pfSx7NDI6NDJ9XSwz
OTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj0hKCJ1bmRlZmluZWQiPT10eXBl
b2Ygd2luZG93fHwhd2luZG93LmRvY3VtZW50fHwhd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQpLG89e2NhblVzZURPTTpyLGNhblVzZVdvcmtlcnM6InVuZGVmaW5lZCIhPXR5cGVvZiBXb3Jr
ZXIsY2FuVXNlRXZlbnRMaXN0ZW5lcnM6ciYmISghd2luZG93LmFkZEV2ZW50TGlzdGVuZXImJiF3
aW5kb3cuYXR0YWNoRXZlbnQpLGNhblVzZVZpZXdwb3J0OnImJiEhd2luZG93LnNjcmVlbixpc0lu
V29ya2VyOiFyfTt0LmV4cG9ydHM9b30se31dLDQwOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJp
Y3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBvPWZ1bmN0
aW9uKCl7fTtvLnRoYXRSZXR1cm5zPXIsby50aGF0UmV0dXJuc0ZhbHNlPXIoITEpLG8udGhhdFJl
dHVybnNUcnVlPXIoITApLG8udGhhdFJldHVybnNOdWxsPXIobnVsbCksby50aGF0UmV0dXJuc1Ro
aXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sby50aGF0UmV0dXJuc0FyZ3VtZW50PWZ1bmN0aW9u
KGUpe3JldHVybiBlfSx0LmV4cG9ydHM9b30se31dLDQxOltmdW5jdGlvbihlLHQsbil7InVzZSBz
dHJpY3QiO3ZhciByPXt9O3QuZXhwb3J0cz1yfSx7fV0sNDI6W2Z1bmN0aW9uKGUsdCxuKXsidXNl
IHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyLGksYSxzLHUpe2lmKG8odCksIWUpe3ZhciBjO2lm
KHZvaWQgMD09PXQpYz1uZXcgRXJyb3IoIk1pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNl
IHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciB0aGUgZnVsbCBlcnJvciBtZXNz
YWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIik7ZWxzZXt2YXIgcD1bbixyLGks
YSxzLHVdLGw9MDtjPW5ldyBFcnJvcih0LnJlcGxhY2UoLyVzL2csZnVuY3Rpb24oKXtyZXR1cm4g
cFtsKytdfSkpLGMubmFtZT0iSW52YXJpYW50IFZpb2xhdGlvbiJ9dGhyb3cgYy5mcmFtZXNUb1Bv
cD0xLGN9fXZhciBvPWZ1bmN0aW9uKGUpe307dC5leHBvcnRzPXJ9LHt9XSw0MzpbZnVuY3Rpb24o
ZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGU9PT10PzAhPT1lfHww
IT09dHx8MS9lPT0xL3Q6ZSE9PWUmJnQhPT10fWZ1bmN0aW9uIG8oZSx0KXtpZihyKGUsdCkpcmV0
dXJuITA7aWYoIm9iamVjdCIhPXR5cGVvZiBlfHxudWxsPT09ZXx8Im9iamVjdCIhPXR5cGVvZiB0
fHxudWxsPT09dClyZXR1cm4hMTt2YXIgbj1PYmplY3Qua2V5cyhlKSxvPU9iamVjdC5rZXlzKHQp
O2lmKG4ubGVuZ3RoIT09by5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBhPTA7YTxuLmxlbmd0aDth
KyspaWYoIWkuY2FsbCh0LG5bYV0pfHwhcihlW25bYV1dLHRbblthXV0pKXJldHVybiExO3JldHVy
biEwfXZhciBpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPW99LHt9
XSw0NDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDQwKSxvPXI7dC5leHBv
cnRzPW99LHs0MDo0MH1dLDQ1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9u
IHIoZSl7aWYobnVsbD09PWV8fHZvaWQgMD09PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0
LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQiKTtyZXR1cm4g
T2JqZWN0KGUpfXZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsaT1PYmplY3QucHJv
dG90eXBlLmhhc093blByb3BlcnR5LGE9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVy
YWJsZTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt0cnl7aWYoIU9iamVjdC5hc3NpZ24pcmV0dXJuITE7
dmFyIGU9bmV3IFN0cmluZygiYWJjIik7aWYoZVs1XT0iZGUiLCI1Ij09PU9iamVjdC5nZXRPd25Q
cm9wZXJ0eU5hbWVzKGUpWzBdKXJldHVybiExO2Zvcih2YXIgdD17fSxuPTA7bjwxMDtuKyspdFsi
XyIrU3RyaW5nLmZyb21DaGFyQ29kZShuKV09bjtpZigiMDEyMzQ1Njc4OSIhPT1PYmplY3QuZ2V0
T3duUHJvcGVydHlOYW1lcyh0KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KS5qb2luKCIi
KSlyZXR1cm4hMTt2YXIgcj17fTtyZXR1cm4iYWJjZGVmZ2hpamtsbW5vcHFyc3QiLnNwbGl0KCIi
KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JbZV09ZX0pLCJhYmNkZWZnaGlqa2xtbm9wcXJzdCI9PT1P
YmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LHIpKS5qb2luKCIiKX1jYXRjaChlKXtyZXR1cm4h
MX19KCk/T2JqZWN0LmFzc2lnbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbixzLHU9cihlKSxjPTE7
Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyl7bj1PYmplY3QoYXJndW1lbnRzW2NdKTtmb3IodmFyIHAg
aW4gbilpLmNhbGwobixwKSYmKHVbcF09bltwXSk7aWYobyl7cz1vKG4pO2Zvcih2YXIgbD0wO2w8
cy5sZW5ndGg7bCsrKWEuY2FsbChuLHNbbF0pJiYodVtzW2xdXT1uW3NbbF1dKX19cmV0dXJuIHV9
fSx7fV0sNDY6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixy
LG8pe310LmV4cG9ydHM9cn0sezQyOjQyLDQ0OjQ0LDQ5OjQ5fV0sNDc6W2Z1bmN0aW9uKGUsdCxu
KXsidXNlIHN0cmljdCI7dmFyIHI9ZSg0OCkKKzt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJu
IHIoZSwhMSl9fSx7NDg6NDh9XSw0ODpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIg
cj1lKDQwKSxvPWUoNDIpLGk9KGUoNDQpLGUoNDkpKSxhPWUoNDYpO3QuZXhwb3J0cz1mdW5jdGlv
bihlLHQpe2Z1bmN0aW9uIG4oZSl7dmFyIHQ9ZSYmKHcmJmVbd118fGVbQV0pO2lmKCJmdW5jdGlv
biI9PXR5cGVvZiB0KXJldHVybiB0fWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4gZT09PXQ/MCE9PWV8
fDEvZT09MS90OmUhPT1lJiZ0IT09dH1mdW5jdGlvbiB1KGUpe3RoaXMubWVzc2FnZT1lLHRoaXMu
c3RhY2s9IiJ9ZnVuY3Rpb24gYyhlKXtmdW5jdGlvbiBuKG4scixhLHMsYyxwLGwpe2lmKHM9c3x8
VCxwPXB8fGEsbCE9PWkpaWYodClvKCExLCJDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRp
cmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiBVc2Ug
YFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0byBjYWxsIHRoZW0uIFJlYWQgbW9yZSBhdCBo
dHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMiKTtlbHNlO3JldHVybiBudWxsPT1yW2Fd
P24/bmV3IHUobnVsbD09PXJbYV0/IlRoZSAiK2MrIiBgIitwKyJgIGlzIG1hcmtlZCBhcyByZXF1
aXJlZCBpbiBgIitzKyJgLCBidXQgaXRzIHZhbHVlIGlzIGBudWxsYC4iOiJUaGUgIitjKyIgYCIr
cCsiYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gYCIrcysiYCwgYnV0IGl0cyB2YWx1ZSBpcyBg
dW5kZWZpbmVkYC4iKTpudWxsOmUocixhLHMsYyxwKX12YXIgcj1uLmJpbmQobnVsbCwhMSk7cmV0
dXJuIHIuaXNSZXF1aXJlZD1uLmJpbmQobnVsbCwhMCkscn1mdW5jdGlvbiBwKGUpe2Z1bmN0aW9u
IHQodCxuLHIsbyxpLGEpe3ZhciBzPXRbbl07aWYoZyhzKSE9PWUpcmV0dXJuIG5ldyB1KCJJbnZh
bGlkICIrbysiIGAiK2krImAgb2YgdHlwZSBgIitiKHMpKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAs
IGV4cGVjdGVkIGAiK2UrImAuIik7cmV0dXJuIG51bGx9cmV0dXJuIGModCl9ZnVuY3Rpb24gbChl
KXtmdW5jdGlvbiB0KHQsbixyLG8sYSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpcmV0dXJuIG5l
dyB1KCJQcm9wZXJ0eSBgIithKyJgIG9mIGNvbXBvbmVudCBgIityKyJgIGhhcyBpbnZhbGlkIFBy
b3BUeXBlIG5vdGF0aW9uIGluc2lkZSBhcnJheU9mLiIpO3ZhciBzPXRbbl07aWYoIUFycmF5Lmlz
QXJyYXkocykpe3JldHVybiBuZXcgdSgiSW52YWxpZCAiK28rIiBgIithKyJgIG9mIHR5cGUgYCIr
ZyhzKSsiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBhbiBhcnJheS4iKX1mb3IodmFy
IGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIHA9ZShzLGMscixvLGErIlsiK2MrIl0iLGkpO2lmKHAg
aW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gcH1yZXR1cm4gbnVsbH1yZXR1cm4gYyh0KX1mdW5jdGlv
biBmKGUpe2Z1bmN0aW9uIHQodCxuLHIsbyxpKXtpZighKHRbbl1pbnN0YW5jZW9mIGUpKXt2YXIg
YT1lLm5hbWV8fFQ7cmV0dXJuIG5ldyB1KCJJbnZhbGlkICIrbysiIGAiK2krImAgb2YgdHlwZSBg
IitfKHRbbl0pKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVjdGVkIGluc3RhbmNlIG9mIGAi
K2ErImAuIil9cmV0dXJuIG51bGx9cmV0dXJuIGModCl9ZnVuY3Rpb24gZChlKXtmdW5jdGlvbiB0
KHQsbixyLG8saSl7Zm9yKHZhciBhPXRbbl0sYz0wO2M8ZS5sZW5ndGg7YysrKWlmKHMoYSxlW2Nd
KSlyZXR1cm4gbnVsbDtyZXR1cm4gbmV3IHUoIkludmFsaWQgIitvKyIgYCIraSsiYCBvZiB2YWx1
ZSBgIithKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVjdGVkIG9uZSBvZiAiK0pTT04uc3Ry
aW5naWZ5KGUpKyIuIil9cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/Yyh0KTpyLnRoYXRSZXR1cm5z
TnVsbH1mdW5jdGlvbiBoKGUpe2Z1bmN0aW9uIHQodCxuLHIsbyxhKXtpZigiZnVuY3Rpb24iIT10
eXBlb2YgZSlyZXR1cm4gbmV3IHUoIlByb3BlcnR5IGAiK2ErImAgb2YgY29tcG9uZW50IGAiK3Ir
ImAgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIG9iamVjdE9mLiIpO3ZhciBz
PXRbbl0sYz1nKHMpO2lmKCJvYmplY3QiIT09YylyZXR1cm4gbmV3IHUoIkludmFsaWQgIitvKyIg
YCIrYSsiYCBvZiB0eXBlIGAiK2MrImAgc3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQgYW4g
b2JqZWN0LiIpO2Zvcih2YXIgcCBpbiBzKWlmKHMuaGFzT3duUHJvcGVydHkocCkpe3ZhciBsPWUo
cyxwLHIsbyxhKyIuIitwLGkpO2lmKGwgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gbH1yZXR1cm4g
bnVsbH1yZXR1cm4gYyh0KX1mdW5jdGlvbiB5KGUpe2Z1bmN0aW9uIHQodCxuLHIsbyxhKXtmb3Io
dmFyIHM9MDtzPGUubGVuZ3RoO3MrKyl7aWYobnVsbD09KDAsZVtzXSkodCxuLHIsbyxhLGkpKXJl
dHVybiBudWxsfXJldHVybiBuZXcgdSgiSW52YWxpZCAiK28rIiBgIithKyJgIHN1cHBsaWVkIHRv
IGAiK3IrImAuIil9cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/Yyh0KTpyLnRoYXRSZXR1cm5zTnVs
bH1mdW5jdGlvbiB2KGUpe2Z1bmN0aW9uIHQodCxuLHIsbyxhKXt2YXIgcz10W25dLGM9ZyhzKTtp
Zigib2JqZWN0IiE9PWMpcmV0dXJuIG5ldyB1KCJJbnZhbGlkICIrbysiIGAiK2ErImAgb2YgdHlw
ZSBgIitjKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVjdGVkIGBvYmplY3RgLiIpO2Zvcih2
YXIgcCBpbiBlKXt2YXIgbD1lW3BdO2lmKGwpe3ZhciBmPWwocyxwLHIsbyxhKyIuIitwLGkpO2lm
KGYpcmV0dXJuIGZ9fXJldHVybiBudWxsfXJldHVybiBjKHQpfWZ1bmN0aW9uIG0odCl7c3dpdGNo
KHR5cGVvZiB0KXtjYXNlIm51bWJlciI6Y2FzZSJzdHJpbmciOmNhc2UidW5kZWZpbmVkIjpyZXR1
cm4hMDtjYXNlImJvb2xlYW4iOnJldHVybiF0O2Nhc2Uib2JqZWN0IjppZihBcnJheS5pc0FycmF5
KHQpKXJldHVybiB0LmV2ZXJ5KG0pO2lmKG51bGw9PT10fHxlKHQpKXJldHVybiEwO3ZhciByPW4o
dCk7aWYoIXIpcmV0dXJuITE7dmFyIG8saT1yLmNhbGwodCk7aWYociE9PXQuZW50cmllcyl7Zm9y
KDshKG89aS5uZXh0KCkpLmRvbmU7KWlmKCFtKG8udmFsdWUpKXJldHVybiExfWVsc2UgZm9yKDsh
KG89aS5uZXh0KCkpLmRvbmU7KXt2YXIgYT1vLnZhbHVlO2lmKGEmJiFtKGFbMV0pKXJldHVybiEx
fXJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIEUoZSx0KXtyZXR1cm4ic3ltYm9s
Ij09PWV8fCgiU3ltYm9sIj09PXRbIkBAdG9TdHJpbmdUYWciXXx8ImZ1bmN0aW9uIj09dHlwZW9m
IFN5bWJvbCYmdCBpbnN0YW5jZW9mIFN5bWJvbCl9ZnVuY3Rpb24gZyhlKXt2YXIgdD10eXBlb2Yg
ZTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8iYXJyYXkiOmUgaW5zdGFuY2VvZiBSZWdFeHA/Im9i
amVjdCI6RSh0LGUpPyJzeW1ib2wiOnR9ZnVuY3Rpb24gYihlKXt2YXIgdD1nKGUpO2lmKCJvYmpl
Y3QiPT09dCl7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuImRhdGUiO2lmKGUgaW5zdGFuY2Vv
ZiBSZWdFeHApcmV0dXJuInJlZ2V4cCJ9cmV0dXJuIHR9ZnVuY3Rpb24gXyhlKXtyZXR1cm4gZS5j
b25zdHJ1Y3RvciYmZS5jb25zdHJ1Y3Rvci5uYW1lP2UuY29uc3RydWN0b3IubmFtZTpUfXZhciB3
PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixBPSJAQGl0ZXJhdG9y
IixUPSI8PGFub255bW91cz4+Iix4PXthcnJheTpwKCJhcnJheSIpLGJvb2w6cCgiYm9vbGVhbiIp
LGZ1bmM6cCgiZnVuY3Rpb24iKSxudW1iZXI6cCgibnVtYmVyIiksb2JqZWN0OnAoIm9iamVjdCIp
LHN0cmluZzpwKCJzdHJpbmciKSxzeW1ib2w6cCgic3ltYm9sIiksYW55OmZ1bmN0aW9uKCl7cmV0
dXJuIGMoci50aGF0UmV0dXJuc051bGwpfSgpLGFycmF5T2Y6bCxlbGVtZW50OmZ1bmN0aW9uKCl7
ZnVuY3Rpb24gdCh0LG4scixvLGkpe3ZhciBhPXRbbl07aWYoIWUoYSkpe3JldHVybiBuZXcgdSgi
SW52YWxpZCAiK28rIiBgIitpKyJgIG9mIHR5cGUgYCIrZyhhKSsiYCBzdXBwbGllZCB0byBgIity
KyJgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuIil9cmV0dXJuIG51bGx9cmV0dXJu
IGModCl9KCksaW5zdGFuY2VPZjpmLG5vZGU6ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIs
byl7cmV0dXJuIG0oZVt0XSk/bnVsbDpuZXcgdSgiSW52YWxpZCAiK3IrIiBgIitvKyJgIHN1cHBs
aWVkIHRvIGAiK24rImAsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLiIpfXJldHVybiBjKGUpfSgpLG9i
amVjdE9mOmgsb25lT2Y6ZCxvbmVPZlR5cGU6eSxzaGFwZTp2fTtyZXR1cm4gdS5wcm90b3R5cGU9
RXJyb3IucHJvdG90eXBlLHguY2hlY2tQcm9wVHlwZXM9YSx4LlByb3BUeXBlcz14LHh9fSx7NDA6
NDAsNDI6NDIsNDQ6NDQsNDY6NDYsNDk6NDl9XSw0OTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3Ry
aWN0Ijt0LmV4cG9ydHM9IlNFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJ
UkVEIn0se31dfSx7fSxbMjldKSgyOSl9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3QvZGlzdC9yZWFj
dC5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9yZWFjdC9kaXN0L3JlYWN0Lmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjMwN2I5NDE5MmE4ZmUzMTk2NWUxZjJhZjkxMmMzZGZmMjI2ZTNiNGIKLS0t
IC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3QvZGlz
dC9yZWFjdC5qcwpAQCAtMCwwICsxLDM5ODcgQEAKKyAvKioKKyAgKiBSZWFjdCB2MTUuNS40Cisg
ICovCisoZnVuY3Rpb24oZil7aWYodHlwZW9mIGV4cG9ydHM9PT0ib2JqZWN0IiYmdHlwZW9mIG1v
ZHVsZSE9PSJ1bmRlZmluZWQiKXttb2R1bGUuZXhwb3J0cz1mKCl9ZWxzZSBpZih0eXBlb2YgZGVm
aW5lPT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZCl7ZGVmaW5lKFtdLGYpfWVsc2V7dmFyIGc7aWYo
dHlwZW9mIHdpbmRvdyE9PSJ1bmRlZmluZWQiKXtnPXdpbmRvd31lbHNlIGlmKHR5cGVvZiBnbG9i
YWwhPT0idW5kZWZpbmVkIil7Zz1nbG9iYWx9ZWxzZSBpZih0eXBlb2Ygc2VsZiE9PSJ1bmRlZmlu
ZWQiKXtnPXNlbGZ9ZWxzZXtnPXRoaXN9Zy5SZWFjdCA9IGYoKX19KShmdW5jdGlvbigpe3ZhciBk
ZWZpbmUsbW9kdWxlLGV4cG9ydHM7cmV0dXJuIChmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBz
KG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09ImZ1bmN0aW9u
IiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3Zh
ciBmPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK28rIiciKTt0aHJvdyBmLmNvZGU9
Ik1PRFVMRV9OT1RfRk9VTkQiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxs
KGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0s
bCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVx
dWlyZT09ImZ1bmN0aW9uIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJb
b10pO3JldHVybiBzfSkoezE6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoq
CisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAor
ICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0
aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICogCisgKi8KKworJ3VzZSBzdHJpY3QnOworCisvKioK
KyAqIEVzY2FwZSBhbmQgd3JhcCBrZXkgc28gaXQgaXMgc2FmZSB0byB1c2UgYXMgYSByZWFjdGlk
CisgKgorICogQHBhcmFtIHtzdHJpbmd9IGtleSB0byBiZSBlc2NhcGVkLgorICogQHJldHVybiB7
c3RyaW5nfSB0aGUgZXNjYXBlZCBrZXkuCisgKi8KKworZnVuY3Rpb24gZXNjYXBlKGtleSkgewor
ICB2YXIgZXNjYXBlUmVnZXggPSAvWz06XS9nOworICB2YXIgZXNjYXBlckxvb2t1cCA9IHsKKyAg
ICAnPSc6ICc9MCcsCisgICAgJzonOiAnPTInCisgIH07CisgIHZhciBlc2NhcGVkU3RyaW5nID0g
KCcnICsga2V5KS5yZXBsYWNlKGVzY2FwZVJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gpIHsKKyAgICBy
ZXR1cm4gZXNjYXBlckxvb2t1cFttYXRjaF07CisgIH0pOworCisgIHJldHVybiAnJCcgKyBlc2Nh
cGVkU3RyaW5nOworfQorCisvKioKKyAqIFVuZXNjYXBlIGFuZCB1bndyYXAga2V5IGZvciBodW1h
bi1yZWFkYWJsZSBkaXNwbGF5CisgKgorICogQHBhcmFtIHtzdHJpbmd9IGtleSB0byB1bmVzY2Fw
ZS4KKyAqIEByZXR1cm4ge3N0cmluZ30gdGhlIHVuZXNjYXBlZCBrZXkuCisgKi8KK2Z1bmN0aW9u
IHVuZXNjYXBlKGtleSkgeworICB2YXIgdW5lc2NhcGVSZWdleCA9IC8oPTB8PTIpL2c7CisgIHZh
ciB1bmVzY2FwZXJMb29rdXAgPSB7CisgICAgJz0wJzogJz0nLAorICAgICc9Mic6ICc6JworICB9
OworICB2YXIga2V5U3Vic3RyaW5nID0ga2V5WzBdID09PSAnLicgJiYga2V5WzFdID09PSAnJCcg
PyBrZXkuc3Vic3RyaW5nKDIpIDoga2V5LnN1YnN0cmluZygxKTsKKworICByZXR1cm4gKCcnICsg
a2V5U3Vic3RyaW5nKS5yZXBsYWNlKHVuZXNjYXBlUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCkgewor
ICAgIHJldHVybiB1bmVzY2FwZXJMb29rdXBbbWF0Y2hdOworICB9KTsKK30KKwordmFyIEtleUVz
Y2FwZVV0aWxzID0geworICBlc2NhcGU6IGVzY2FwZSwKKyAgdW5lc2NhcGU6IHVuZXNjYXBlCit9
OworCittb2R1bGUuZXhwb3J0cyA9IEtleUVzY2FwZVV0aWxzOworfSx7fV0sMjpbZnVuY3Rpb24o
X2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQs
IEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291
cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGlu
IHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJj
ZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBm
b3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKiAK
KyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBfcHJvZEludmFyaWFudCA9IF9kZXJlcV8oMjUp
OworCit2YXIgaW52YXJpYW50ID0gX2RlcmVxXygyOSk7CisKKy8qKgorICogU3RhdGljIHBvb2xl
cnMuIFNldmVyYWwgY3VzdG9tIHZlcnNpb25zIGZvciBlYWNoIHBvdGVudGlhbCBudW1iZXIgb2YK
KyAqIGFyZ3VtZW50cy4gQSBjb21wbGV0ZWx5IGdlbmVyaWMgcG9vbGVyIGlzIGVhc3kgdG8gaW1w
bGVtZW50LCBidXQgd291bGQKKyAqIHJlcXVpcmUgYWNjZXNzaW5nIHRoZSBgYXJndW1lbnRzYCBv
YmplY3QuIEluIGVhY2ggb2YgdGhlc2UsIGB0aGlzYCByZWZlcnMgdG8KKyAqIHRoZSBDbGFzcyBp
dHNlbGYsIG5vdCBhbiBpbnN0YW5jZS4gSWYgYW55IG90aGVycyBhcmUgbmVlZGVkLCBzaW1wbHkg
YWRkIHRoZW0KKyAqIGhlcmUsIG9yIGluIHRoZWlyIG93biBmaWxlcy4KKyAqLwordmFyIG9uZUFy
Z3VtZW50UG9vbGVyID0gZnVuY3Rpb24gKGNvcHlGaWVsZHNGcm9tKSB7CisgIHZhciBLbGFzcyA9
IHRoaXM7CisgIGlmIChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3RoKSB7CisgICAgdmFyIGluc3Rh
bmNlID0gS2xhc3MuaW5zdGFuY2VQb29sLnBvcCgpOworICAgIEtsYXNzLmNhbGwoaW5zdGFuY2Us
IGNvcHlGaWVsZHNGcm9tKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7CisgIH0gZWxzZSB7CisgICAg
cmV0dXJuIG5ldyBLbGFzcyhjb3B5RmllbGRzRnJvbSk7CisgIH0KK307CisKK3ZhciB0d29Bcmd1
bWVudFBvb2xlciA9IGZ1bmN0aW9uIChhMSwgYTIpIHsKKyAgdmFyIEtsYXNzID0gdGhpczsKKyAg
aWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGgpIHsKKyAgICB2YXIgaW5zdGFuY2UgPSBLbGFz
cy5pbnN0YW5jZVBvb2wucG9wKCk7CisgICAgS2xhc3MuY2FsbChpbnN0YW5jZSwgYTEsIGEyKTsK
KyAgICByZXR1cm4gaW5zdGFuY2U7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIG5ldyBLbGFzcyhh
MSwgYTIpOworICB9Cit9OworCit2YXIgdGhyZWVBcmd1bWVudFBvb2xlciA9IGZ1bmN0aW9uIChh
MSwgYTIsIGEzKSB7CisgIHZhciBLbGFzcyA9IHRoaXM7CisgIGlmIChLbGFzcy5pbnN0YW5jZVBv
b2wubGVuZ3RoKSB7CisgICAgdmFyIGluc3RhbmNlID0gS2xhc3MuaW5zdGFuY2VQb29sLnBvcCgp
OworICAgIEtsYXNzLmNhbGwoaW5zdGFuY2UsIGExLCBhMiwgYTMpOworICAgIHJldHVybiBpbnN0
YW5jZTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gbmV3IEtsYXNzKGExLCBhMiwgYTMpOworICB9
Cit9OworCit2YXIgZm91ckFyZ3VtZW50UG9vbGVyID0gZnVuY3Rpb24gKGExLCBhMiwgYTMsIGE0
KSB7CisgIHZhciBLbGFzcyA9IHRoaXM7CisgIGlmIChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3Ro
KSB7CisgICAgdmFyIGluc3RhbmNlID0gS2xhc3MuaW5zdGFuY2VQb29sLnBvcCgpOworICAgIEts
YXNzLmNhbGwoaW5zdGFuY2UsIGExLCBhMiwgYTMsIGE0KTsKKyAgICByZXR1cm4gaW5zdGFuY2U7
CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIG5ldyBLbGFzcyhhMSwgYTIsIGEzLCBhNCk7CisgIH0K
K307CisKK3ZhciBzdGFuZGFyZFJlbGVhc2VyID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7CisgIHZh
ciBLbGFzcyA9IHRoaXM7CisgICEoaW5zdGFuY2UgaW5zdGFuY2VvZiBLbGFzcykgPyAiZGV2ZWxv
cG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdUcnlpbmcgdG8gcmVs
ZWFzZSBhbiBpbnN0YW5jZSBpbnRvIGEgcG9vbCBvZiBhIGRpZmZlcmVudCB0eXBlLicpIDogX3By
b2RJbnZhcmlhbnQoJzI1JykgOiB2b2lkIDA7CisgIGluc3RhbmNlLmRlc3RydWN0b3IoKTsKKyAg
aWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGggPCBLbGFzcy5wb29sU2l6ZSkgeworICAgIEts
YXNzLmluc3RhbmNlUG9vbC5wdXNoKGluc3RhbmNlKTsKKyAgfQorfTsKKwordmFyIERFRkFVTFRf
UE9PTF9TSVpFID0gMTA7Cit2YXIgREVGQVVMVF9QT09MRVIgPSBvbmVBcmd1bWVudFBvb2xlcjsK
KworLyoqCisgKiBBdWdtZW50cyBgQ29weUNvbnN0cnVjdG9yYCB0byBiZSBhIHBvb2xhYmxlIGNs
YXNzLCBhdWdtZW50aW5nIG9ubHkgdGhlIGNsYXNzCisgKiBpdHNlbGYgKHN0YXRpY2FsbHkpIG5v
dCBhZGRpbmcgYW55IHByb3RvdHlwaWNhbCBmaWVsZHMuIEFueSBDb3B5Q29uc3RydWN0b3IKKyAq
IHlvdSBnaXZlIHRoaXMgbWF5IGhhdmUgYSBgcG9vbFNpemVgIHByb3BlcnR5LCBhbmQgd2lsbCBs
b29rIGZvciBhCisgKiBwcm90b3R5cGljYWwgYGRlc3RydWN0b3JgIG9uIGluc3RhbmNlcy4KKyAq
CisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBDb3B5Q29uc3RydWN0b3IgQ29uc3RydWN0b3IgdGhhdCBj
YW4gYmUgdXNlZCB0byByZXNldC4KKyAqIEBwYXJhbSB7RnVuY3Rpb259IHBvb2xlciBDdXN0b21p
emFibGUgcG9vbGVyLgorICovCit2YXIgYWRkUG9vbGluZ1RvID0gZnVuY3Rpb24gKENvcHlDb25z
dHJ1Y3RvciwgcG9vbGVyKSB7CisgIC8vIENhc3RpbmcgYXMgYW55IHNvIHRoYXQgZmxvdyBpZ25v
cmVzIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gYW5kIHRydXN0cworICAvLyBpdCB0byBtYXRj
aCB0aGUgdHlwZSB3ZSBkZWNsYXJlZAorICB2YXIgTmV3S2xhc3MgPSBDb3B5Q29uc3RydWN0b3I7
CisgIE5ld0tsYXNzLmluc3RhbmNlUG9vbCA9IFtdOworICBOZXdLbGFzcy5nZXRQb29sZWQgPSBw
b29sZXIgfHwgREVGQVVMVF9QT09MRVI7CisgIGlmICghTmV3S2xhc3MucG9vbFNpemUpIHsKKyAg
ICBOZXdLbGFzcy5wb29sU2l6ZSA9IERFRkFVTFRfUE9PTF9TSVpFOworICB9CisgIE5ld0tsYXNz
LnJlbGVhc2UgPSBzdGFuZGFyZFJlbGVhc2VyOworICByZXR1cm4gTmV3S2xhc3M7Cit9OworCit2
YXIgUG9vbGVkQ2xhc3MgPSB7CisgIGFkZFBvb2xpbmdUbzogYWRkUG9vbGluZ1RvLAorICBvbmVB
cmd1bWVudFBvb2xlcjogb25lQXJndW1lbnRQb29sZXIsCisgIHR3b0FyZ3VtZW50UG9vbGVyOiB0
d29Bcmd1bWVudFBvb2xlciwKKyAgdGhyZWVBcmd1bWVudFBvb2xlcjogdGhyZWVBcmd1bWVudFBv
b2xlciwKKyAgZm91ckFyZ3VtZW50UG9vbGVyOiBmb3VyQXJndW1lbnRQb29sZXIKK307CisKK21v
ZHVsZS5leHBvcnRzID0gUG9vbGVkQ2xhc3M7Cit9LHsiMjUiOjI1LCIyOSI6Mjl9XSwzOltmdW5j
dGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJl
c2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91
bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMg
c291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2Fu
IGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoK
KyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBfYXNzaWduID0gX2RlcmVxXygzMSk7CisKK3Zh
ciBSZWFjdENoaWxkcmVuID0gX2RlcmVxXyg0KTsKK3ZhciBSZWFjdENvbXBvbmVudCA9IF9kZXJl
cV8oNik7Cit2YXIgUmVhY3RQdXJlQ29tcG9uZW50ID0gX2RlcmVxXygxNyk7Cit2YXIgUmVhY3RD
bGFzcyA9IF9kZXJlcV8oNSk7Cit2YXIgUmVhY3RET01GYWN0b3JpZXMgPSBfZGVyZXFfKDkpOwor
dmFyIFJlYWN0RWxlbWVudCA9IF9kZXJlcV8oMTApOwordmFyIFJlYWN0UHJvcFR5cGVzID0gX2Rl
cmVxXygxNSk7Cit2YXIgUmVhY3RWZXJzaW9uID0gX2RlcmVxXygxOSk7CisKK3ZhciBvbmx5Q2hp
bGQgPSBfZGVyZXFfKDI0KTsKK3ZhciB3YXJuaW5nID0gX2RlcmVxXygzMCk7CisKK3ZhciBjcmVh
dGVFbGVtZW50ID0gUmVhY3RFbGVtZW50LmNyZWF0ZUVsZW1lbnQ7Cit2YXIgY3JlYXRlRmFjdG9y
eSA9IFJlYWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5OwordmFyIGNsb25lRWxlbWVudCA9IFJlYWN0
RWxlbWVudC5jbG9uZUVsZW1lbnQ7CisKK2lmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlv
bicpIHsKKyAgdmFyIGNhbkRlZmluZVByb3BlcnR5ID0gX2RlcmVxXygyMCk7CisgIHZhciBSZWFj
dEVsZW1lbnRWYWxpZGF0b3IgPSBfZGVyZXFfKDEyKTsKKyAgdmFyIGRpZFdhcm5Qcm9wVHlwZXNE
ZXByZWNhdGVkID0gZmFsc2U7CisgIGNyZWF0ZUVsZW1lbnQgPSBSZWFjdEVsZW1lbnRWYWxpZGF0
b3IuY3JlYXRlRWxlbWVudDsKKyAgY3JlYXRlRmFjdG9yeSA9IFJlYWN0RWxlbWVudFZhbGlkYXRv
ci5jcmVhdGVGYWN0b3J5OworICBjbG9uZUVsZW1lbnQgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3Iu
Y2xvbmVFbGVtZW50OworfQorCit2YXIgX19zcHJlYWQgPSBfYXNzaWduOworCitpZiAoImRldmVs
b3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgIHZhciB3YXJuZWQgPSBmYWxzZTsKKyAgX19z
cHJlYWQgPSBmdW5jdGlvbiAoKSB7CisgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24n
ID8gd2FybmluZyh3YXJuZWQsICdSZWFjdC5fX3NwcmVhZCBpcyBkZXByZWNhdGVkIGFuZCBzaG91
bGQgbm90IGJlIHVzZWQuIFVzZSAnICsgJ09iamVjdC5hc3NpZ24gZGlyZWN0bHkgb3IgYW5vdGhl
ciBoZWxwZXIgZnVuY3Rpb24gd2l0aCBzaW1pbGFyICcgKyAnc2VtYW50aWNzLiBZb3UgbWF5IGJl
IHNlZWluZyB0aGlzIHdhcm5pbmcgZHVlIHRvIHlvdXIgY29tcGlsZXIuICcgKyAnU2VlIGh0dHBz
Oi8vZmIubWUvcmVhY3Qtc3ByZWFkLWRlcHJlY2F0aW9uIGZvciBtb3JlIGRldGFpbHMuJykgOiB2
b2lkIDA7CisgICAgd2FybmVkID0gdHJ1ZTsKKyAgICByZXR1cm4gX2Fzc2lnbi5hcHBseShudWxs
LCBhcmd1bWVudHMpOworICB9OworfQorCit2YXIgUmVhY3QgPSB7CisKKyAgLy8gTW9kZXJuCisK
KyAgQ2hpbGRyZW46IHsKKyAgICBtYXA6IFJlYWN0Q2hpbGRyZW4ubWFwLAorICAgIGZvckVhY2g6
IFJlYWN0Q2hpbGRyZW4uZm9yRWFjaCwKKyAgICBjb3VudDogUmVhY3RDaGlsZHJlbi5jb3VudCwK
KyAgICB0b0FycmF5OiBSZWFjdENoaWxkcmVuLnRvQXJyYXksCisgICAgb25seTogb25seUNoaWxk
CisgIH0sCisKKyAgQ29tcG9uZW50OiBSZWFjdENvbXBvbmVudCwKKyAgUHVyZUNvbXBvbmVudDog
UmVhY3RQdXJlQ29tcG9uZW50LAorCisgIGNyZWF0ZUVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnQsCisg
IGNsb25lRWxlbWVudDogY2xvbmVFbGVtZW50LAorICBpc1ZhbGlkRWxlbWVudDogUmVhY3RFbGVt
ZW50LmlzVmFsaWRFbGVtZW50LAorCisgIC8vIENsYXNzaWMKKworICBQcm9wVHlwZXM6IFJlYWN0
UHJvcFR5cGVzLAorICBjcmVhdGVDbGFzczogUmVhY3RDbGFzcy5jcmVhdGVDbGFzcywKKyAgY3Jl
YXRlRmFjdG9yeTogY3JlYXRlRmFjdG9yeSwKKyAgY3JlYXRlTWl4aW46IGZ1bmN0aW9uIChtaXhp
bikgeworICAgIC8vIEN1cnJlbnRseSBhIG5vb3AuIFdpbGwgYmUgdXNlZCB0byB2YWxpZGF0ZSBh
bmQgdHJhY2UgbWl4aW5zLgorICAgIHJldHVybiBtaXhpbjsKKyAgfSwKKworICAvLyBUaGlzIGxv
b2tzIERPTSBzcGVjaWZpYyBidXQgdGhlc2UgYXJlIGFjdHVhbGx5IGlzb21vcnBoaWMgaGVscGVy
cworICAvLyBzaW5jZSB0aGV5IGFyZSBqdXN0IGdlbmVyYXRpbmcgRE9NIHN0cmluZ3MuCisgIERP
TTogUmVhY3RET01GYWN0b3JpZXMsCisKKyAgdmVyc2lvbjogUmVhY3RWZXJzaW9uLAorCisgIC8v
IERlcHJlY2F0ZWQgaG9vayBmb3IgSlNYIHNwcmVhZCwgZG9uJ3QgdXNlIHRoaXMgZm9yIGFueXRo
aW5nLgorICBfX3NwcmVhZDogX19zcHJlYWQKK307CisKKy8vIFRPRE86IEZpeCB0ZXN0cyBzbyB0
aGF0IHRoaXMgZGVwcmVjYXRpb24gd2FybmluZyBkb2Vzbid0IGNhdXNlIGZhaWx1cmVzLgoraWYg
KCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICBpZiAoY2FuRGVmaW5lUHJvcGVy
dHkpIHsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhY3QsICdQcm9wVHlwZXMnLCB7Cisg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1
Y3Rpb24nID8gd2FybmluZyhkaWRXYXJuUHJvcFR5cGVzRGVwcmVjYXRlZCwgJ0FjY2Vzc2luZyBQ
cm9wVHlwZXMgdmlhIHRoZSBtYWluIFJlYWN0IHBhY2thZ2UgaXMgZGVwcmVjYXRlZC4gVXNlICcg
KyAndGhlIHByb3AtdHlwZXMgcGFja2FnZSBmcm9tIG5wbSBpbnN0ZWFkLicpIDogdm9pZCAwOwor
ICAgICAgICBkaWRXYXJuUHJvcFR5cGVzRGVwcmVjYXRlZCA9IHRydWU7CisgICAgICAgIHJldHVy
biBSZWFjdFByb3BUeXBlczsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorfQorCittb2R1bGUuZXhw
b3J0cyA9IFJlYWN0OworfSx7IjEwIjoxMCwiMTIiOjEyLCIxNSI6MTUsIjE3IjoxNywiMTkiOjE5
LCIyMCI6MjAsIjI0IjoyNCwiMzAiOjMwLCIzMSI6MzEsIjQiOjQsIjUiOjUsIjYiOjYsIjkiOjl9
XSw0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0
IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxp
Y2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5
IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCBy
aWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0
b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBQb29sZWRDbGFzcyA9IF9kZXJl
cV8oMik7Cit2YXIgUmVhY3RFbGVtZW50ID0gX2RlcmVxXygxMCk7CisKK3ZhciBlbXB0eUZ1bmN0
aW9uID0gX2RlcmVxXygyNyk7Cit2YXIgdHJhdmVyc2VBbGxDaGlsZHJlbiA9IF9kZXJlcV8oMjYp
OworCit2YXIgdHdvQXJndW1lbnRQb29sZXIgPSBQb29sZWRDbGFzcy50d29Bcmd1bWVudFBvb2xl
cjsKK3ZhciBmb3VyQXJndW1lbnRQb29sZXIgPSBQb29sZWRDbGFzcy5mb3VyQXJndW1lbnRQb29s
ZXI7CisKK3ZhciB1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCA9IC9cLysvZzsKK2Z1bmN0aW9u
IGVzY2FwZVVzZXJQcm92aWRlZEtleSh0ZXh0KSB7CisgIHJldHVybiAoJycgKyB0ZXh0KS5yZXBs
YWNlKHVzZXJQcm92aWRlZEtleUVzY2FwZVJlZ2V4LCAnJCYvJyk7Cit9CisKKy8qKgorICogUG9v
bGVkQ2xhc3MgcmVwcmVzZW50aW5nIHRoZSBib29ra2VlcGluZyBhc3NvY2lhdGVkIHdpdGggcGVy
Zm9ybWluZyBhIGNoaWxkCisgKiB0cmF2ZXJzYWwuIEFsbG93cyBhdm9pZGluZyBiaW5kaW5nIGNh
bGxiYWNrcy4KKyAqCisgKiBAY29uc3RydWN0b3IgRm9yRWFjaEJvb2tLZWVwaW5nCisgKiBAcGFy
YW0geyFmdW5jdGlvbn0gZm9yRWFjaEZ1bmN0aW9uIEZ1bmN0aW9uIHRvIHBlcmZvcm0gdHJhdmVy
c2FsIHdpdGguCisgKiBAcGFyYW0gez8qfSBmb3JFYWNoQ29udGV4dCBDb250ZXh0IHRvIHBlcmZv
cm0gY29udGV4dCB3aXRoLgorICovCitmdW5jdGlvbiBGb3JFYWNoQm9va0tlZXBpbmcoZm9yRWFj
aEZ1bmN0aW9uLCBmb3JFYWNoQ29udGV4dCkgeworICB0aGlzLmZ1bmMgPSBmb3JFYWNoRnVuY3Rp
b247CisgIHRoaXMuY29udGV4dCA9IGZvckVhY2hDb250ZXh0OworICB0aGlzLmNvdW50ID0gMDsK
K30KK0ZvckVhY2hCb29rS2VlcGluZy5wcm90b3R5cGUuZGVzdHJ1Y3RvciA9IGZ1bmN0aW9uICgp
IHsKKyAgdGhpcy5mdW5jID0gbnVsbDsKKyAgdGhpcy5jb250ZXh0ID0gbnVsbDsKKyAgdGhpcy5j
b3VudCA9IDA7Cit9OworUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKEZvckVhY2hCb29rS2VlcGlu
ZywgdHdvQXJndW1lbnRQb29sZXIpOworCitmdW5jdGlvbiBmb3JFYWNoU2luZ2xlQ2hpbGQoYm9v
a0tlZXBpbmcsIGNoaWxkLCBuYW1lKSB7CisgIHZhciBmdW5jID0gYm9va0tlZXBpbmcuZnVuYywK
KyAgICAgIGNvbnRleHQgPSBib29rS2VlcGluZy5jb250ZXh0OworCisgIGZ1bmMuY2FsbChjb250
ZXh0LCBjaGlsZCwgYm9va0tlZXBpbmcuY291bnQrKyk7Cit9CisKKy8qKgorICogSXRlcmF0ZXMg
dGhyb3VnaCBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5j
aGlsZHJlbmAuCisgKgorICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2Rv
Y3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNoaWxkcmVuLmZvcmVhY2gKKyAqCisgKiBUaGUg
cHJvdmlkZWQgZm9yRWFjaEZ1bmMoY2hpbGQsIGluZGV4KSB3aWxsIGJlIGNhbGxlZCBmb3IgZWFj
aAorICogbGVhZiBjaGlsZC4KKyAqCisgKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0
cmVlIGNvbnRhaW5lci4KKyAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgaW50KX0gZm9yRWFjaEZ1bmMK
KyAqIEBwYXJhbSB7Kn0gZm9yRWFjaENvbnRleHQgQ29udGV4dCBmb3IgZm9yRWFjaENvbnRleHQu
CisgKi8KK2Z1bmN0aW9uIGZvckVhY2hDaGlsZHJlbihjaGlsZHJlbiwgZm9yRWFjaEZ1bmMsIGZv
ckVhY2hDb250ZXh0KSB7CisgIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7CisgICAgcmV0dXJuIGNo
aWxkcmVuOworICB9CisgIHZhciB0cmF2ZXJzZUNvbnRleHQgPSBGb3JFYWNoQm9va0tlZXBpbmcu
Z2V0UG9vbGVkKGZvckVhY2hGdW5jLCBmb3JFYWNoQ29udGV4dCk7CisgIHRyYXZlcnNlQWxsQ2hp
bGRyZW4oY2hpbGRyZW4sIGZvckVhY2hTaW5nbGVDaGlsZCwgdHJhdmVyc2VDb250ZXh0KTsKKyAg
Rm9yRWFjaEJvb2tLZWVwaW5nLnJlbGVhc2UodHJhdmVyc2VDb250ZXh0KTsKK30KKworLyoqCisg
KiBQb29sZWRDbGFzcyByZXByZXNlbnRpbmcgdGhlIGJvb2trZWVwaW5nIGFzc29jaWF0ZWQgd2l0
aCBwZXJmb3JtaW5nIGEgY2hpbGQKKyAqIG1hcHBpbmcuIEFsbG93cyBhdm9pZGluZyBiaW5kaW5n
IGNhbGxiYWNrcy4KKyAqCisgKiBAY29uc3RydWN0b3IgTWFwQm9va0tlZXBpbmcKKyAqIEBwYXJh
bSB7ISp9IG1hcFJlc3VsdCBPYmplY3QgY29udGFpbmluZyB0aGUgb3JkZXJlZCBtYXAgb2YgcmVz
dWx0cy4KKyAqIEBwYXJhbSB7IWZ1bmN0aW9ufSBtYXBGdW5jdGlvbiBGdW5jdGlvbiB0byBwZXJm
b3JtIG1hcHBpbmcgd2l0aC4KKyAqIEBwYXJhbSB7Pyp9IG1hcENvbnRleHQgQ29udGV4dCB0byBw
ZXJmb3JtIG1hcHBpbmcgd2l0aC4KKyAqLworZnVuY3Rpb24gTWFwQm9va0tlZXBpbmcobWFwUmVz
dWx0LCBrZXlQcmVmaXgsIG1hcEZ1bmN0aW9uLCBtYXBDb250ZXh0KSB7CisgIHRoaXMucmVzdWx0
ID0gbWFwUmVzdWx0OworICB0aGlzLmtleVByZWZpeCA9IGtleVByZWZpeDsKKyAgdGhpcy5mdW5j
ID0gbWFwRnVuY3Rpb247CisgIHRoaXMuY29udGV4dCA9IG1hcENvbnRleHQ7CisgIHRoaXMuY291
bnQgPSAwOworfQorTWFwQm9va0tlZXBpbmcucHJvdG90eXBlLmRlc3RydWN0b3IgPSBmdW5jdGlv
biAoKSB7CisgIHRoaXMucmVzdWx0ID0gbnVsbDsKKyAgdGhpcy5rZXlQcmVmaXggPSBudWxsOwor
ICB0aGlzLmZ1bmMgPSBudWxsOworICB0aGlzLmNvbnRleHQgPSBudWxsOworICB0aGlzLmNvdW50
ID0gMDsKK307CitQb29sZWRDbGFzcy5hZGRQb29saW5nVG8oTWFwQm9va0tlZXBpbmcsIGZvdXJB
cmd1bWVudFBvb2xlcik7CisKK2Z1bmN0aW9uIG1hcFNpbmdsZUNoaWxkSW50b0NvbnRleHQoYm9v
a0tlZXBpbmcsIGNoaWxkLCBjaGlsZEtleSkgeworICB2YXIgcmVzdWx0ID0gYm9va0tlZXBpbmcu
cmVzdWx0LAorICAgICAga2V5UHJlZml4ID0gYm9va0tlZXBpbmcua2V5UHJlZml4LAorICAgICAg
ZnVuYyA9IGJvb2tLZWVwaW5nLmZ1bmMsCisgICAgICBjb250ZXh0ID0gYm9va0tlZXBpbmcuY29u
dGV4dDsKKworCisgIHZhciBtYXBwZWRDaGlsZCA9IGZ1bmMuY2FsbChjb250ZXh0LCBjaGlsZCwg
Ym9va0tlZXBpbmcuY291bnQrKyk7CisgIGlmIChBcnJheS5pc0FycmF5KG1hcHBlZENoaWxkKSkg
eworICAgIG1hcEludG9XaXRoS2V5UHJlZml4SW50ZXJuYWwobWFwcGVkQ2hpbGQsIHJlc3VsdCwg
Y2hpbGRLZXksIGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNBcmd1bWVudCk7CisgIH0gZWxzZSBp
ZiAobWFwcGVkQ2hpbGQgIT0gbnVsbCkgeworICAgIGlmIChSZWFjdEVsZW1lbnQuaXNWYWxpZEVs
ZW1lbnQobWFwcGVkQ2hpbGQpKSB7CisgICAgICBtYXBwZWRDaGlsZCA9IFJlYWN0RWxlbWVudC5j
bG9uZUFuZFJlcGxhY2VLZXkobWFwcGVkQ2hpbGQsCisgICAgICAvLyBLZWVwIGJvdGggdGhlICht
YXBwZWQpIGFuZCBvbGQga2V5cyBpZiB0aGV5IGRpZmZlciwganVzdCBhcworICAgICAgLy8gdHJh
dmVyc2VBbGxDaGlsZHJlbiB1c2VkIHRvIGRvIGZvciBvYmplY3RzIGFzIGNoaWxkcmVuCisgICAg
ICBrZXlQcmVmaXggKyAobWFwcGVkQ2hpbGQua2V5ICYmICghY2hpbGQgfHwgY2hpbGQua2V5ICE9
PSBtYXBwZWRDaGlsZC5rZXkpID8gZXNjYXBlVXNlclByb3ZpZGVkS2V5KG1hcHBlZENoaWxkLmtl
eSkgKyAnLycgOiAnJykgKyBjaGlsZEtleSk7CisgICAgfQorICAgIHJlc3VsdC5wdXNoKG1hcHBl
ZENoaWxkKTsKKyAgfQorfQorCitmdW5jdGlvbiBtYXBJbnRvV2l0aEtleVByZWZpeEludGVybmFs
KGNoaWxkcmVuLCBhcnJheSwgcHJlZml4LCBmdW5jLCBjb250ZXh0KSB7CisgIHZhciBlc2NhcGVk
UHJlZml4ID0gJyc7CisgIGlmIChwcmVmaXggIT0gbnVsbCkgeworICAgIGVzY2FwZWRQcmVmaXgg
PSBlc2NhcGVVc2VyUHJvdmlkZWRLZXkocHJlZml4KSArICcvJzsKKyAgfQorICB2YXIgdHJhdmVy
c2VDb250ZXh0ID0gTWFwQm9va0tlZXBpbmcuZ2V0UG9vbGVkKGFycmF5LCBlc2NhcGVkUHJlZml4
LCBmdW5jLCBjb250ZXh0KTsKKyAgdHJhdmVyc2VBbGxDaGlsZHJlbihjaGlsZHJlbiwgbWFwU2lu
Z2xlQ2hpbGRJbnRvQ29udGV4dCwgdHJhdmVyc2VDb250ZXh0KTsKKyAgTWFwQm9va0tlZXBpbmcu
cmVsZWFzZSh0cmF2ZXJzZUNvbnRleHQpOworfQorCisvKioKKyAqIE1hcHMgY2hpbGRyZW4gdGhh
dCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gLgorICoKKyAqIFNl
ZSBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL3RvcC1sZXZlbC1hcGkuaHRt
bCNyZWFjdC5jaGlsZHJlbi5tYXAKKyAqCisgKiBUaGUgcHJvdmlkZWQgbWFwRnVuY3Rpb24oY2hp
bGQsIGtleSwgaW5kZXgpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoCisgKiBsZWFmIGNoaWxkLgor
ICoKKyAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLgorICog
QHBhcmFtIHtmdW5jdGlvbigqLCBpbnQpfSBmdW5jIFRoZSBtYXAgZnVuY3Rpb24uCisgKiBAcGFy
YW0geyp9IGNvbnRleHQgQ29udGV4dCBmb3IgbWFwRnVuY3Rpb24uCisgKiBAcmV0dXJuIHtvYmpl
Y3R9IE9iamVjdCBjb250YWluaW5nIHRoZSBvcmRlcmVkIG1hcCBvZiByZXN1bHRzLgorICovCitm
dW5jdGlvbiBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuYywgY29udGV4dCkgeworICBpZiAoY2hp
bGRyZW4gPT0gbnVsbCkgeworICAgIHJldHVybiBjaGlsZHJlbjsKKyAgfQorICB2YXIgcmVzdWx0
ID0gW107CisgIG1hcEludG9XaXRoS2V5UHJlZml4SW50ZXJuYWwoY2hpbGRyZW4sIHJlc3VsdCwg
bnVsbCwgZnVuYywgY29udGV4dCk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK2Z1bmN0aW9uIGZv
ckVhY2hTaW5nbGVDaGlsZER1bW15KHRyYXZlcnNlQ29udGV4dCwgY2hpbGQsIG5hbWUpIHsKKyAg
cmV0dXJuIG51bGw7Cit9CisKKy8qKgorICogQ291bnQgdGhlIG51bWJlciBvZiBjaGlsZHJlbiB0
aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzCisgKiBgcHJvcHMuY2hpbGRyZW5gLgorICoK
KyAqIFNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL3RvcC1sZXZlbC1h
cGkuaHRtbCNyZWFjdC5jaGlsZHJlbi5jb3VudAorICoKKyAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVu
IENoaWxkcmVuIHRyZWUgY29udGFpbmVyLgorICogQHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVy
IG9mIGNoaWxkcmVuLgorICovCitmdW5jdGlvbiBjb3VudENoaWxkcmVuKGNoaWxkcmVuLCBjb250
ZXh0KSB7CisgIHJldHVybiB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBmb3JFYWNoU2lu
Z2xlQ2hpbGREdW1teSwgbnVsbCk7Cit9CisKKy8qKgorICogRmxhdHRlbiBhIGNoaWxkcmVuIG9i
amVjdCAodHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gKSBhbmQKKyAqIHJl
dHVybiBhbiBhcnJheSB3aXRoIGFwcHJvcHJpYXRlbHkgcmUta2V5ZWQgY2hpbGRyZW4uCisgKgor
ICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFw
aS5odG1sI3JlYWN0LmNoaWxkcmVuLnRvYXJyYXkKKyAqLworZnVuY3Rpb24gdG9BcnJheShjaGls
ZHJlbikgeworICB2YXIgcmVzdWx0ID0gW107CisgIG1hcEludG9XaXRoS2V5UHJlZml4SW50ZXJu
YWwoY2hpbGRyZW4sIHJlc3VsdCwgbnVsbCwgZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc0FyZ3Vt
ZW50KTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKwordmFyIFJlYWN0Q2hpbGRyZW4gPSB7CisgIGZv
ckVhY2g6IGZvckVhY2hDaGlsZHJlbiwKKyAgbWFwOiBtYXBDaGlsZHJlbiwKKyAgbWFwSW50b1dp
dGhLZXlQcmVmaXhJbnRlcm5hbDogbWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbCwKKyAgY291
bnQ6IGNvdW50Q2hpbGRyZW4sCisgIHRvQXJyYXk6IHRvQXJyYXkKK307CisKK21vZHVsZS5leHBv
cnRzID0gUmVhY3RDaGlsZHJlbjsKK30seyIxMCI6MTAsIjIiOjIsIjI2IjoyNiwiMjciOjI3fV0s
NTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAy
MDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNl
bnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBv
ZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmln
aHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9y
eS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgX3Byb2RJbnZhcmlhbnQgPSBfZGVy
ZXFfKDI1KSwKKyAgICBfYXNzaWduID0gX2RlcmVxXygzMSk7CisKK3ZhciBSZWFjdENvbXBvbmVu
dCA9IF9kZXJlcV8oNik7Cit2YXIgUmVhY3RFbGVtZW50ID0gX2RlcmVxXygxMCk7Cit2YXIgUmVh
Y3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSBfZGVyZXFfKDE0KTsKK3ZhciBSZWFjdE5vb3BVcGRh
dGVRdWV1ZSA9IF9kZXJlcV8oMTMpOworCit2YXIgZW1wdHlPYmplY3QgPSBfZGVyZXFfKDI4KTsK
K3ZhciBpbnZhcmlhbnQgPSBfZGVyZXFfKDI5KTsKK3ZhciB3YXJuaW5nID0gX2RlcmVxXygzMCk7
CisKK3ZhciBNSVhJTlNfS0VZID0gJ21peGlucyc7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBh
bGxvdyB0aGUgY3JlYXRpb24gb2YgYW5vbnltb3VzIGZ1bmN0aW9ucyB3aGljaCBkbyBub3QKKy8v
IGhhdmUgLm5hbWUgc2V0IHRvIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSBiZWluZyBhc3NpZ25l
ZCB0by4KK2Z1bmN0aW9uIGlkZW50aXR5KGZuKSB7CisgIHJldHVybiBmbjsKK30KKworLyoqCisg
KiBQb2xpY2llcyB0aGF0IGRlc2NyaWJlIG1ldGhvZHMgaW4gYFJlYWN0Q2xhc3NJbnRlcmZhY2Vg
LgorICovCisKKwordmFyIGluamVjdGVkTWl4aW5zID0gW107CisKKy8qKgorICogQ29tcG9zaXRl
IGNvbXBvbmVudHMgYXJlIGhpZ2hlci1sZXZlbCBjb21wb25lbnRzIHRoYXQgY29tcG9zZSBvdGhl
ciBjb21wb3NpdGUKKyAqIG9yIGhvc3QgY29tcG9uZW50cy4KKyAqCisgKiBUbyBjcmVhdGUgYSBu
ZXcgdHlwZSBvZiBgUmVhY3RDbGFzc2AsIHBhc3MgYSBzcGVjaWZpY2F0aW9uIG9mCisgKiB5b3Vy
IG5ldyBjbGFzcyB0byBgUmVhY3QuY3JlYXRlQ2xhc3NgLiBUaGUgb25seSByZXF1aXJlbWVudCBv
ZiB5b3VyIGNsYXNzCisgKiBzcGVjaWZpY2F0aW9uIGlzIHRoYXQgeW91IGltcGxlbWVudCBhIGBy
ZW5kZXJgIG1ldGhvZC4KKyAqCisgKiAgIHZhciBNeUNvbXBvbmVudCA9IFJlYWN0LmNyZWF0ZUNs
YXNzKHsKKyAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeworICogICAgICAgcmV0dXJuIDxkaXY+
SGVsbG8gV29ybGQ8L2Rpdj47CisgKiAgICAgfQorICogICB9KTsKKyAqCisgKiBUaGUgY2xhc3Mg
c3BlY2lmaWNhdGlvbiBzdXBwb3J0cyBhIHNwZWNpZmljIHByb3RvY29sIG9mIG1ldGhvZHMgdGhh
dCBoYXZlCisgKiBzcGVjaWFsIG1lYW5pbmcgKGUuZy4gYHJlbmRlcmApLiBTZWUgYFJlYWN0Q2xh
c3NJbnRlcmZhY2VgIGZvcgorICogbW9yZSB0aGUgY29tcHJlaGVuc2l2ZSBwcm90b2NvbC4gQW55
IG90aGVyIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgaW4gdGhlCisgKiBjbGFzcyBzcGVjaWZpY2F0
aW9uIHdpbGwgYmUgYXZhaWxhYmxlIG9uIHRoZSBwcm90b3R5cGUuCisgKgorICogQGludGVyZmFj
ZSBSZWFjdENsYXNzSW50ZXJmYWNlCisgKiBAaW50ZXJuYWwKKyAqLwordmFyIFJlYWN0Q2xhc3NJ
bnRlcmZhY2UgPSB7CisKKyAgLyoqCisgICAqIEFuIGFycmF5IG9mIE1peGluIG9iamVjdHMgdG8g
aW5jbHVkZSB3aGVuIGRlZmluaW5nIHlvdXIgY29tcG9uZW50LgorICAgKgorICAgKiBAdHlwZSB7
YXJyYXl9CisgICAqIEBvcHRpb25hbAorICAgKi8KKyAgbWl4aW5zOiAnREVGSU5FX01BTlknLAor
CisgIC8qKgorICAgKiBBbiBvYmplY3QgY29udGFpbmluZyBwcm9wZXJ0aWVzIGFuZCBtZXRob2Rz
IHRoYXQgc2hvdWxkIGJlIGRlZmluZWQgb24KKyAgICogdGhlIGNvbXBvbmVudCdzIGNvbnN0cnVj
dG9yIGluc3RlYWQgb2YgaXRzIHByb3RvdHlwZSAoc3RhdGljIG1ldGhvZHMpLgorICAgKgorICAg
KiBAdHlwZSB7b2JqZWN0fQorICAgKiBAb3B0aW9uYWwKKyAgICovCisgIHN0YXRpY3M6ICdERUZJ
TkVfTUFOWScsCisKKyAgLyoqCisgICAqIERlZmluaXRpb24gb2YgcHJvcCB0eXBlcyBmb3IgdGhp
cyBjb21wb25lbnQuCisgICAqCisgICAqIEB0eXBlIHtvYmplY3R9CisgICAqIEBvcHRpb25hbAor
ICAgKi8KKyAgcHJvcFR5cGVzOiAnREVGSU5FX01BTlknLAorCisgIC8qKgorICAgKiBEZWZpbml0
aW9uIG9mIGNvbnRleHQgdHlwZXMgZm9yIHRoaXMgY29tcG9uZW50LgorICAgKgorICAgKiBAdHlw
ZSB7b2JqZWN0fQorICAgKiBAb3B0aW9uYWwKKyAgICovCisgIGNvbnRleHRUeXBlczogJ0RFRklO
RV9NQU5ZJywKKworICAvKioKKyAgICogRGVmaW5pdGlvbiBvZiBjb250ZXh0IHR5cGVzIHRoaXMg
Y29tcG9uZW50IHNldHMgZm9yIGl0cyBjaGlsZHJlbi4KKyAgICoKKyAgICogQHR5cGUge29iamVj
dH0KKyAgICogQG9wdGlvbmFsCisgICAqLworICBjaGlsZENvbnRleHRUeXBlczogJ0RFRklORV9N
QU5ZJywKKworICAvLyA9PT09IERlZmluaXRpb24gbWV0aG9kcyA9PT09CisKKyAgLyoqCisgICAq
IEludm9rZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG1vdW50ZWQuIFZhbHVlcyBpbiB0aGUgbWFw
cGluZyB3aWxsIGJlIHNldCBvbgorICAgKiBgdGhpcy5wcm9wc2AgaWYgdGhhdCBwcm9wIGlzIG5v
dCBzcGVjaWZpZWQgKGkuZS4gdXNpbmcgYW4gYGluYCBjaGVjaykuCisgICAqCisgICAqIFRoaXMg
bWV0aG9kIGlzIGludm9rZWQgYmVmb3JlIGBnZXRJbml0aWFsU3RhdGVgIGFuZCB0aGVyZWZvcmUg
Y2Fubm90IHJlbHkKKyAgICogb24gYHRoaXMuc3RhdGVgIG9yIHVzZSBgdGhpcy5zZXRTdGF0ZWAu
CisgICAqCisgICAqIEByZXR1cm4ge29iamVjdH0KKyAgICogQG9wdGlvbmFsCisgICAqLworICBn
ZXREZWZhdWx0UHJvcHM6ICdERUZJTkVfTUFOWV9NRVJHRUQnLAorCisgIC8qKgorICAgKiBJbnZv
a2VkIG9uY2UgYmVmb3JlIHRoZSBjb21wb25lbnQgaXMgbW91bnRlZC4gVGhlIHJldHVybiB2YWx1
ZSB3aWxsIGJlIHVzZWQKKyAgICogYXMgdGhlIGluaXRpYWwgdmFsdWUgb2YgYHRoaXMuc3RhdGVg
LgorICAgKgorICAgKiAgIGdldEluaXRpYWxTdGF0ZTogZnVuY3Rpb24oKSB7CisgICAqICAgICBy
ZXR1cm4geworICAgKiAgICAgICBpc09uOiBmYWxzZSwKKyAgICogICAgICAgZm9vQmF6OiBuZXcg
QmF6Rm9vKCkKKyAgICogICAgIH0KKyAgICogICB9CisgICAqCisgICAqIEByZXR1cm4ge29iamVj
dH0KKyAgICogQG9wdGlvbmFsCisgICAqLworICBnZXRJbml0aWFsU3RhdGU6ICdERUZJTkVfTUFO
WV9NRVJHRUQnLAorCisgIC8qKgorICAgKiBAcmV0dXJuIHtvYmplY3R9CisgICAqIEBvcHRpb25h
bAorICAgKi8KKyAgZ2V0Q2hpbGRDb250ZXh0OiAnREVGSU5FX01BTllfTUVSR0VEJywKKworICAv
KioKKyAgICogVXNlcyBwcm9wcyBmcm9tIGB0aGlzLnByb3BzYCBhbmQgc3RhdGUgZnJvbSBgdGhp
cy5zdGF0ZWAgdG8gcmVuZGVyIHRoZQorICAgKiBzdHJ1Y3R1cmUgb2YgdGhlIGNvbXBvbmVudC4K
KyAgICoKKyAgICogTm8gZ3VhcmFudGVlcyBhcmUgbWFkZSBhYm91dCB3aGVuIG9yIGhvdyBvZnRl
biB0aGlzIG1ldGhvZCBpcyBpbnZva2VkLCBzbworICAgKiBpdCBtdXN0IG5vdCBoYXZlIHNpZGUg
ZWZmZWN0cy4KKyAgICoKKyAgICogICByZW5kZXI6IGZ1bmN0aW9uKCkgeworICAgKiAgICAgdmFy
IG5hbWUgPSB0aGlzLnByb3BzLm5hbWU7CisgICAqICAgICByZXR1cm4gPGRpdj5IZWxsbywge25h
bWV9ITwvZGl2PjsKKyAgICogICB9CisgICAqCisgICAqIEByZXR1cm4ge1JlYWN0Q29tcG9uZW50
fQorICAgKiBAcmVxdWlyZWQKKyAgICovCisgIHJlbmRlcjogJ0RFRklORV9PTkNFJywKKworICAv
LyA9PT09IERlbGVnYXRlIG1ldGhvZHMgPT09PQorCisgIC8qKgorICAgKiBJbnZva2VkIHdoZW4g
dGhlIGNvbXBvbmVudCBpcyBpbml0aWFsbHkgY3JlYXRlZCBhbmQgYWJvdXQgdG8gYmUgbW91bnRl
ZC4KKyAgICogVGhpcyBtYXkgaGF2ZSBzaWRlIGVmZmVjdHMsIGJ1dCBhbnkgZXh0ZXJuYWwgc3Vi
c2NyaXB0aW9ucyBvciBkYXRhIGNyZWF0ZWQKKyAgICogYnkgdGhpcyBtZXRob2QgbXVzdCBiZSBj
bGVhbmVkIHVwIGluIGBjb21wb25lbnRXaWxsVW5tb3VudGAuCisgICAqCisgICAqIEBvcHRpb25h
bAorICAgKi8KKyAgY29tcG9uZW50V2lsbE1vdW50OiAnREVGSU5FX01BTlknLAorCisgIC8qKgor
ICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgYmVlbiBtb3VudGVkIGFuZCBoYXMg
YSBET00gcmVwcmVzZW50YXRpb24uCisgICAqIEhvd2V2ZXIsIHRoZXJlIGlzIG5vIGd1YXJhbnRl
ZSB0aGF0IHRoZSBET00gbm9kZSBpcyBpbiB0aGUgZG9jdW1lbnQuCisgICAqCisgICAqIFVzZSB0
aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIG9wZXJhdGUgb24gdGhlIERPTSB3aGVuIHRoZSBjb21w
b25lbnQgaGFzCisgICAqIGJlZW4gbW91bnRlZCAoaW5pdGlhbGl6ZWQgYW5kIHJlbmRlcmVkKSBm
b3IgdGhlIGZpcnN0IHRpbWUuCisgICAqCisgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gcm9vdE5v
ZGUgRE9NIGVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSBjb21wb25lbnQuCisgICAqIEBvcHRpb25h
bAorICAgKi8KKyAgY29tcG9uZW50RGlkTW91bnQ6ICdERUZJTkVfTUFOWScsCisKKyAgLyoqCisg
ICAqIEludm9rZWQgYmVmb3JlIHRoZSBjb21wb25lbnQgcmVjZWl2ZXMgbmV3IHByb3BzLgorICAg
KgorICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byByZWFjdCB0byBhIHByb3AgdHJh
bnNpdGlvbiBieSB1cGRhdGluZyB0aGUKKyAgICogc3RhdGUgdXNpbmcgYHRoaXMuc2V0U3RhdGVg
LiBDdXJyZW50IHByb3BzIGFyZSBhY2Nlc3NlZCB2aWEgYHRoaXMucHJvcHNgLgorICAgKgorICAg
KiAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM6IGZ1bmN0aW9uKG5leHRQcm9wcywgbmV4dENv
bnRleHQpIHsKKyAgICogICAgIHRoaXMuc2V0U3RhdGUoeworICAgKiAgICAgICBsaWtlc0luY3Jl
YXNpbmc6IG5leHRQcm9wcy5saWtlQ291bnQgPiB0aGlzLnByb3BzLmxpa2VDb3VudAorICAgKiAg
ICAgfSk7CisgICAqICAgfQorICAgKgorICAgKiBOT1RFOiBUaGVyZSBpcyBubyBlcXVpdmFsZW50
IGBjb21wb25lbnRXaWxsUmVjZWl2ZVN0YXRlYC4gQW4gaW5jb21pbmcgcHJvcAorICAgKiB0cmFu
c2l0aW9uIG1heSBjYXVzZSBhIHN0YXRlIGNoYW5nZSwgYnV0IHRoZSBvcHBvc2l0ZSBpcyBub3Qg
dHJ1ZS4gSWYgeW91CisgICAqIG5lZWQgaXQsIHlvdSBhcmUgcHJvYmFibHkgbG9va2luZyBmb3Ig
YGNvbXBvbmVudFdpbGxVcGRhdGVgLgorICAgKgorICAgKiBAcGFyYW0ge29iamVjdH0gbmV4dFBy
b3BzCisgICAqIEBvcHRpb25hbAorICAgKi8KKyAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wczog
J0RFRklORV9NQU5ZJywKKworICAvKioKKyAgICogSW52b2tlZCB3aGlsZSBkZWNpZGluZyBpZiB0
aGUgY29tcG9uZW50IHNob3VsZCBiZSB1cGRhdGVkIGFzIGEgcmVzdWx0IG9mCisgICAqIHJlY2Vp
dmluZyBuZXcgcHJvcHMsIHN0YXRlIGFuZC9vciBjb250ZXh0LgorICAgKgorICAgKiBVc2UgdGhp
cyBhcyBhbiBvcHBvcnR1bml0eSB0byBgcmV0dXJuIGZhbHNlYCB3aGVuIHlvdSdyZSBjZXJ0YWlu
IHRoYXQgdGhlCisgICAqIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBwcm9wcy9zdGF0ZS9jb250ZXh0
IHdpbGwgbm90IHJlcXVpcmUgYSBjb21wb25lbnQKKyAgICogdXBkYXRlLgorICAgKgorICAgKiAg
IHNob3VsZENvbXBvbmVudFVwZGF0ZTogZnVuY3Rpb24obmV4dFByb3BzLCBuZXh0U3RhdGUsIG5l
eHRDb250ZXh0KSB7CisgICAqICAgICByZXR1cm4gIWVxdWFsKG5leHRQcm9wcywgdGhpcy5wcm9w
cykgfHwKKyAgICogICAgICAgIWVxdWFsKG5leHRTdGF0ZSwgdGhpcy5zdGF0ZSkgfHwKKyAgICog
ICAgICAgIWVxdWFsKG5leHRDb250ZXh0LCB0aGlzLmNvbnRleHQpOworICAgKiAgIH0KKyAgICoK
KyAgICogQHBhcmFtIHtvYmplY3R9IG5leHRQcm9wcworICAgKiBAcGFyYW0gez9vYmplY3R9IG5l
eHRTdGF0ZQorICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHRDb250ZXh0CisgICAqIEByZXR1cm4g
e2Jvb2xlYW59IFRydWUgaWYgdGhlIGNvbXBvbmVudCBzaG91bGQgdXBkYXRlLgorICAgKiBAb3B0
aW9uYWwKKyAgICovCisgIHNob3VsZENvbXBvbmVudFVwZGF0ZTogJ0RFRklORV9PTkNFJywKKwor
ICAvKioKKyAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgYWJvdXQgdG8gdXBkYXRl
IGR1ZSB0byBhIHRyYW5zaXRpb24gZnJvbQorICAgKiBgdGhpcy5wcm9wc2AsIGB0aGlzLnN0YXRl
YCBhbmQgYHRoaXMuY29udGV4dGAgdG8gYG5leHRQcm9wc2AsIGBuZXh0U3RhdGVgCisgICAqIGFu
ZCBgbmV4dENvbnRleHRgLgorICAgKgorICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0
byBwZXJmb3JtIHByZXBhcmF0aW9uIGJlZm9yZSBhbiB1cGRhdGUgb2NjdXJzLgorICAgKgorICAg
KiBOT1RFOiBZb3UgKipjYW5ub3QqKiB1c2UgYHRoaXMuc2V0U3RhdGUoKWAgaW4gdGhpcyBtZXRo
b2QuCisgICAqCisgICAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0UHJvcHMKKyAgICogQHBhcmFtIHs/
b2JqZWN0fSBuZXh0U3RhdGUKKyAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0Q29udGV4dAorICAg
KiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uCisgICAqIEBv
cHRpb25hbAorICAgKi8KKyAgY29tcG9uZW50V2lsbFVwZGF0ZTogJ0RFRklORV9NQU5ZJywKKwor
ICAvKioKKyAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQncyBET00gcmVwcmVzZW50YXRp
b24gaGFzIGJlZW4gdXBkYXRlZC4KKyAgICoKKyAgICogVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5p
dHkgdG8gb3BlcmF0ZSBvbiB0aGUgRE9NIHdoZW4gdGhlIGNvbXBvbmVudCBoYXMKKyAgICogYmVl
biB1cGRhdGVkLgorICAgKgorICAgKiBAcGFyYW0ge29iamVjdH0gcHJldlByb3BzCisgICAqIEBw
YXJhbSB7P29iamVjdH0gcHJldlN0YXRlCisgICAqIEBwYXJhbSB7P29iamVjdH0gcHJldkNvbnRl
eHQKKyAgICogQHBhcmFtIHtET01FbGVtZW50fSByb290Tm9kZSBET00gZWxlbWVudCByZXByZXNl
bnRpbmcgdGhlIGNvbXBvbmVudC4KKyAgICogQG9wdGlvbmFsCisgICAqLworICBjb21wb25lbnRE
aWRVcGRhdGU6ICdERUZJTkVfTUFOWScsCisKKyAgLyoqCisgICAqIEludm9rZWQgd2hlbiB0aGUg
Y29tcG9uZW50IGlzIGFib3V0IHRvIGJlIHJlbW92ZWQgZnJvbSBpdHMgcGFyZW50IGFuZCBoYXZl
CisgICAqIGl0cyBET00gcmVwcmVzZW50YXRpb24gZGVzdHJveWVkLgorICAgKgorICAgKiBVc2Ug
dGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBkZWFsbG9jYXRlIGFueSBleHRlcm5hbCByZXNvdXJj
ZXMuCisgICAqCisgICAqIE5PVEU6IFRoZXJlIGlzIG5vIGBjb21wb25lbnREaWRVbm1vdW50YCBz
aW5jZSB5b3VyIGNvbXBvbmVudCB3aWxsIGhhdmUgYmVlbgorICAgKiBkZXN0cm95ZWQgYnkgdGhh
dCBwb2ludC4KKyAgICoKKyAgICogQG9wdGlvbmFsCisgICAqLworICBjb21wb25lbnRXaWxsVW5t
b3VudDogJ0RFRklORV9NQU5ZJywKKworICAvLyA9PT09IEFkdmFuY2VkIG1ldGhvZHMgPT09PQor
CisgIC8qKgorICAgKiBVcGRhdGVzIHRoZSBjb21wb25lbnQncyBjdXJyZW50bHkgbW91bnRlZCBE
T00gcmVwcmVzZW50YXRpb24uCisgICAqCisgICAqIEJ5IGRlZmF1bHQsIHRoaXMgaW1wbGVtZW50
cyBSZWFjdCdzIHJlbmRlcmluZyBhbmQgcmVjb25jaWxpYXRpb24gYWxnb3JpdGhtLgorICAgKiBT
b3BoaXN0aWNhdGVkIGNsaWVudHMgbWF5IHdpc2ggdG8gb3ZlcnJpZGUgdGhpcy4KKyAgICoKKyAg
ICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvbgorICAgKiBA
aW50ZXJuYWwKKyAgICogQG92ZXJyaWRhYmxlCisgICAqLworICB1cGRhdGVDb21wb25lbnQ6ICdP
VkVSUklERV9CQVNFJworCit9OworCisvKioKKyAqIE1hcHBpbmcgZnJvbSBjbGFzcyBzcGVjaWZp
Y2F0aW9uIGtleXMgdG8gc3BlY2lhbCBwcm9jZXNzaW5nIGZ1bmN0aW9ucy4KKyAqCisgKiBBbHRo
b3VnaCB0aGVzZSBhcmUgZGVjbGFyZWQgbGlrZSBpbnN0YW5jZSBwcm9wZXJ0aWVzIGluIHRoZSBz
cGVjaWZpY2F0aW9uCisgKiB3aGVuIGRlZmluaW5nIGNsYXNzZXMgdXNpbmcgYFJlYWN0LmNyZWF0
ZUNsYXNzYCwgdGhleSBhcmUgYWN0dWFsbHkgc3RhdGljCisgKiBhbmQgYXJlIGFjY2Vzc2libGUg
b24gdGhlIGNvbnN0cnVjdG9yIGluc3RlYWQgb2YgdGhlIHByb3RvdHlwZS4gRGVzcGl0ZQorICog
YmVpbmcgc3RhdGljLCB0aGV5IG11c3QgYmUgZGVmaW5lZCBvdXRzaWRlIG9mIHRoZSAic3RhdGlj
cyIga2V5IHVuZGVyCisgKiB3aGljaCBhbGwgb3RoZXIgc3RhdGljIG1ldGhvZHMgYXJlIGRlZmlu
ZWQuCisgKi8KK3ZhciBSRVNFUlZFRF9TUEVDX0tFWVMgPSB7CisgIGRpc3BsYXlOYW1lOiBmdW5j
dGlvbiAoQ29uc3RydWN0b3IsIGRpc3BsYXlOYW1lKSB7CisgICAgQ29uc3RydWN0b3IuZGlzcGxh
eU5hbWUgPSBkaXNwbGF5TmFtZTsKKyAgfSwKKyAgbWl4aW5zOiBmdW5jdGlvbiAoQ29uc3RydWN0
b3IsIG1peGlucykgeworICAgIGlmIChtaXhpbnMpIHsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbWl4aW5zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIG1peFNwZWNJbnRvQ29tcG9uZW50KENv
bnN0cnVjdG9yLCBtaXhpbnNbaV0pOworICAgICAgfQorICAgIH0KKyAgfSwKKyAgY2hpbGRDb250
ZXh0VHlwZXM6IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgY2hpbGRDb250ZXh0VHlwZXMpIHsKKyAg
ICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgICB2YWxpZGF0ZVR5
cGVEZWYoQ29uc3RydWN0b3IsIGNoaWxkQ29udGV4dFR5cGVzLCAnY2hpbGRDb250ZXh0Jyk7Cisg
ICAgfQorICAgIENvbnN0cnVjdG9yLmNoaWxkQ29udGV4dFR5cGVzID0gX2Fzc2lnbih7fSwgQ29u
c3RydWN0b3IuY2hpbGRDb250ZXh0VHlwZXMsIGNoaWxkQ29udGV4dFR5cGVzKTsKKyAgfSwKKyAg
Y29udGV4dFR5cGVzOiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIGNvbnRleHRUeXBlcykgeworICAg
IGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAgIHZhbGlkYXRlVHlw
ZURlZihDb25zdHJ1Y3RvciwgY29udGV4dFR5cGVzLCAnY29udGV4dCcpOworICAgIH0KKyAgICBD
b25zdHJ1Y3Rvci5jb250ZXh0VHlwZXMgPSBfYXNzaWduKHt9LCBDb25zdHJ1Y3Rvci5jb250ZXh0
VHlwZXMsIGNvbnRleHRUeXBlcyk7CisgIH0sCisgIC8qKgorICAgKiBTcGVjaWFsIGNhc2UgZ2V0
RGVmYXVsdFByb3BzIHdoaWNoIHNob3VsZCBtb3ZlIGludG8gc3RhdGljcyBidXQgcmVxdWlyZXMK
KyAgICogYXV0b21hdGljIG1lcmdpbmcuCisgICAqLworICBnZXREZWZhdWx0UHJvcHM6IGZ1bmN0
aW9uIChDb25zdHJ1Y3RvciwgZ2V0RGVmYXVsdFByb3BzKSB7CisgICAgaWYgKENvbnN0cnVjdG9y
LmdldERlZmF1bHRQcm9wcykgeworICAgICAgQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzID0g
Y3JlYXRlTWVyZ2VkUmVzdWx0RnVuY3Rpb24oQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzLCBn
ZXREZWZhdWx0UHJvcHMpOworICAgIH0gZWxzZSB7CisgICAgICBDb25zdHJ1Y3Rvci5nZXREZWZh
dWx0UHJvcHMgPSBnZXREZWZhdWx0UHJvcHM7CisgICAgfQorICB9LAorICBwcm9wVHlwZXM6IGZ1
bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvcFR5cGVzKSB7CisgICAgaWYgKCJkZXZlbG9wbWVudCIg
IT09ICdwcm9kdWN0aW9uJykgeworICAgICAgdmFsaWRhdGVUeXBlRGVmKENvbnN0cnVjdG9yLCBw
cm9wVHlwZXMsICdwcm9wJyk7CisgICAgfQorICAgIENvbnN0cnVjdG9yLnByb3BUeXBlcyA9IF9h
c3NpZ24oe30sIENvbnN0cnVjdG9yLnByb3BUeXBlcywgcHJvcFR5cGVzKTsKKyAgfSwKKyAgc3Rh
dGljczogZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBzdGF0aWNzKSB7CisgICAgbWl4U3RhdGljU3Bl
Y0ludG9Db21wb25lbnQoQ29uc3RydWN0b3IsIHN0YXRpY3MpOworICB9LAorICBhdXRvYmluZDog
ZnVuY3Rpb24gKCkge30gfTsKKworZnVuY3Rpb24gdmFsaWRhdGVUeXBlRGVmKENvbnN0cnVjdG9y
LCB0eXBlRGVmLCBsb2NhdGlvbikgeworICBmb3IgKHZhciBwcm9wTmFtZSBpbiB0eXBlRGVmKSB7
CisgICAgaWYgKHR5cGVEZWYuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7CisgICAgICAvLyB1
c2UgYSB3YXJuaW5nIGluc3RlYWQgb2YgYW4gaW52YXJpYW50IHNvIGNvbXBvbmVudHMKKyAgICAg
IC8vIGRvbid0IHNob3cgdXAgaW4gcHJvZCBidXQgb25seSBpbiBfX0RFVl9fCisgICAgICAiZGV2
ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKHR5cGVvZiB0eXBlRGVmW3Byb3BO
YW1lXSA9PT0gJ2Z1bmN0aW9uJywgJyVzOiAlcyB0eXBlIGAlc2AgaXMgaW52YWxpZDsgaXQgbXVz
dCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gJyArICdSZWFjdC5Qcm9wVHlwZXMuJywgQ29u
c3RydWN0b3IuZGlzcGxheU5hbWUgfHwgJ1JlYWN0Q2xhc3MnLCBSZWFjdFByb3BUeXBlTG9jYXRp
b25OYW1lc1tsb2NhdGlvbl0sIHByb3BOYW1lKSA6IHZvaWQgMDsKKyAgICB9CisgIH0KK30KKwor
ZnVuY3Rpb24gdmFsaWRhdGVNZXRob2RPdmVycmlkZShpc0FscmVhZHlEZWZpbmVkLCBuYW1lKSB7
CisgIHZhciBzcGVjUG9saWN5ID0gUmVhY3RDbGFzc0ludGVyZmFjZS5oYXNPd25Qcm9wZXJ0eShu
YW1lKSA/IFJlYWN0Q2xhc3NJbnRlcmZhY2VbbmFtZV0gOiBudWxsOworCisgIC8vIERpc2FsbG93
IG92ZXJyaWRpbmcgb2YgYmFzZSBjbGFzcyBtZXRob2RzIHVubGVzcyBleHBsaWNpdGx5IGFsbG93
ZWQuCisgIGlmIChSZWFjdENsYXNzTWl4aW4uaGFzT3duUHJvcGVydHkobmFtZSkpIHsKKyAgICAh
KHNwZWNQb2xpY3kgPT09ICdPVkVSUklERV9CQVNFJykgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJv
ZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdENsYXNzSW50ZXJmYWNlOiBZb3UgYXJl
IGF0dGVtcHRpbmcgdG8gb3ZlcnJpZGUgYCVzYCBmcm9tIHlvdXIgY2xhc3Mgc3BlY2lmaWNhdGlv
bi4gRW5zdXJlIHRoYXQgeW91ciBtZXRob2QgbmFtZXMgZG8gbm90IG92ZXJsYXAgd2l0aCBSZWFj
dCBtZXRob2RzLicsIG5hbWUpIDogX3Byb2RJbnZhcmlhbnQoJzczJywgbmFtZSkgOiB2b2lkIDA7
CisgIH0KKworICAvLyBEaXNhbGxvdyBkZWZpbmluZyBtZXRob2RzIG1vcmUgdGhhbiBvbmNlIHVu
bGVzcyBleHBsaWNpdGx5IGFsbG93ZWQuCisgIGlmIChpc0FscmVhZHlEZWZpbmVkKSB7CisgICAg
IShzcGVjUG9saWN5ID09PSAnREVGSU5FX01BTlknIHx8IHNwZWNQb2xpY3kgPT09ICdERUZJTkVf
TUFOWV9NRVJHRUQnKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFu
dChmYWxzZSwgJ1JlYWN0Q2xhc3NJbnRlcmZhY2U6IFlvdSBhcmUgYXR0ZW1wdGluZyB0byBkZWZp
bmUgYCVzYCBvbiB5b3VyIGNvbXBvbmVudCBtb3JlIHRoYW4gb25jZS4gVGhpcyBjb25mbGljdCBt
YXkgYmUgZHVlIHRvIGEgbWl4aW4uJywgbmFtZSkgOiBfcHJvZEludmFyaWFudCgnNzQnLCBuYW1l
KSA6IHZvaWQgMDsKKyAgfQorfQorCisvKioKKyAqIE1peGluIGhlbHBlciB3aGljaCBoYW5kbGVz
IHBvbGljeSB2YWxpZGF0aW9uIGFuZCByZXNlcnZlZAorICogc3BlY2lmaWNhdGlvbiBrZXlzIHdo
ZW4gYnVpbGRpbmcgUmVhY3QgY2xhc3Nlcy4KKyAqLworZnVuY3Rpb24gbWl4U3BlY0ludG9Db21w
b25lbnQoQ29uc3RydWN0b3IsIHNwZWMpIHsKKyAgaWYgKCFzcGVjKSB7CisgICAgaWYgKCJkZXZl
bG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgICAgdmFyIHR5cGVvZlNwZWMgPSB0eXBl
b2Ygc3BlYzsKKyAgICAgIHZhciBpc01peGluVmFsaWQgPSB0eXBlb2ZTcGVjID09PSAnb2JqZWN0
JyAmJiBzcGVjICE9PSBudWxsOworCisgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlv
bicgPyB3YXJuaW5nKGlzTWl4aW5WYWxpZCwgJyVzOiBZb3VcJ3JlIGF0dGVtcHRpbmcgdG8gaW5j
bHVkZSBhIG1peGluIHRoYXQgaXMgZWl0aGVyIG51bGwgJyArICdvciBub3QgYW4gb2JqZWN0LiBD
aGVjayB0aGUgbWl4aW5zIGluY2x1ZGVkIGJ5IHRoZSBjb21wb25lbnQsICcgKyAnYXMgd2VsbCBh
cyBhbnkgbWl4aW5zIHRoZXkgaW5jbHVkZSB0aGVtc2VsdmVzLiAnICsgJ0V4cGVjdGVkIG9iamVj
dCBidXQgZ290ICVzLicsIENvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8ICdSZWFjdENsYXNzJywg
c3BlYyA9PT0gbnVsbCA/IG51bGwgOiB0eXBlb2ZTcGVjKSA6IHZvaWQgMDsKKyAgICB9CisKKyAg
ICByZXR1cm47CisgIH0KKworICAhKHR5cGVvZiBzcGVjICE9PSAnZnVuY3Rpb24nKSA/ICJkZXZl
bG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ1JlYWN0Q2xhc3M6
IFlvdVwncmUgYXR0ZW1wdGluZyB0byB1c2UgYSBjb21wb25lbnQgY2xhc3Mgb3IgZnVuY3Rpb24g
YXMgYSBtaXhpbi4gSW5zdGVhZCwganVzdCB1c2UgYSByZWd1bGFyIG9iamVjdC4nKSA6IF9wcm9k
SW52YXJpYW50KCc3NScpIDogdm9pZCAwOworICAhIVJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVu
dChzcGVjKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxz
ZSwgJ1JlYWN0Q2xhc3M6IFlvdVwncmUgYXR0ZW1wdGluZyB0byB1c2UgYSBjb21wb25lbnQgYXMg
YSBtaXhpbi4gSW5zdGVhZCwganVzdCB1c2UgYSByZWd1bGFyIG9iamVjdC4nKSA6IF9wcm9kSW52
YXJpYW50KCc3NicpIDogdm9pZCAwOworCisgIHZhciBwcm90byA9IENvbnN0cnVjdG9yLnByb3Rv
dHlwZTsKKyAgdmFyIGF1dG9CaW5kUGFpcnMgPSBwcm90by5fX3JlYWN0QXV0b0JpbmRQYWlyczsK
KworICAvLyBCeSBoYW5kbGluZyBtaXhpbnMgYmVmb3JlIGFueSBvdGhlciBwcm9wZXJ0aWVzLCB3
ZSBlbnN1cmUgdGhlIHNhbWUKKyAgLy8gY2hhaW5pbmcgb3JkZXIgaXMgYXBwbGllZCB0byBtZXRo
b2RzIHdpdGggREVGSU5FX01BTlkgcG9saWN5LCB3aGV0aGVyCisgIC8vIG1peGlucyBhcmUgbGlz
dGVkIGJlZm9yZSBvciBhZnRlciB0aGVzZSBtZXRob2RzIGluIHRoZSBzcGVjLgorICBpZiAoc3Bl
Yy5oYXNPd25Qcm9wZXJ0eShNSVhJTlNfS0VZKSkgeworICAgIFJFU0VSVkVEX1NQRUNfS0VZUy5t
aXhpbnMoQ29uc3RydWN0b3IsIHNwZWMubWl4aW5zKTsKKyAgfQorCisgIGZvciAodmFyIG5hbWUg
aW4gc3BlYykgeworICAgIGlmICghc3BlYy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgeworICAgICAg
Y29udGludWU7CisgICAgfQorCisgICAgaWYgKG5hbWUgPT09IE1JWElOU19LRVkpIHsKKyAgICAg
IC8vIFdlIGhhdmUgYWxyZWFkeSBoYW5kbGVkIG1peGlucyBpbiBhIHNwZWNpYWwgY2FzZSBhYm92
ZS4KKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIHZhciBwcm9wZXJ0eSA9IHNwZWNbbmFt
ZV07CisgICAgdmFyIGlzQWxyZWFkeURlZmluZWQgPSBwcm90by5oYXNPd25Qcm9wZXJ0eShuYW1l
KTsKKyAgICB2YWxpZGF0ZU1ldGhvZE92ZXJyaWRlKGlzQWxyZWFkeURlZmluZWQsIG5hbWUpOwor
CisgICAgaWYgKFJFU0VSVkVEX1NQRUNfS0VZUy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgeworICAg
ICAgUkVTRVJWRURfU1BFQ19LRVlTW25hbWVdKENvbnN0cnVjdG9yLCBwcm9wZXJ0eSk7CisgICAg
fSBlbHNlIHsKKyAgICAgIC8vIFNldHVwIG1ldGhvZHMgb24gcHJvdG90eXBlOgorICAgICAgLy8g
VGhlIGZvbGxvd2luZyBtZW1iZXIgbWV0aG9kcyBzaG91bGQgbm90IGJlIGF1dG9tYXRpY2FsbHkg
Ym91bmQ6CisgICAgICAvLyAxLiBFeHBlY3RlZCBSZWFjdENsYXNzIG1ldGhvZHMgKGluIHRoZSAi
aW50ZXJmYWNlIikuCisgICAgICAvLyAyLiBPdmVycmlkZGVuIG1ldGhvZHMgKHRoYXQgd2VyZSBt
aXhlZCBpbikuCisgICAgICB2YXIgaXNSZWFjdENsYXNzTWV0aG9kID0gUmVhY3RDbGFzc0ludGVy
ZmFjZS5oYXNPd25Qcm9wZXJ0eShuYW1lKTsKKyAgICAgIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9m
IHByb3BlcnR5ID09PSAnZnVuY3Rpb24nOworICAgICAgdmFyIHNob3VsZEF1dG9CaW5kID0gaXNG
dW5jdGlvbiAmJiAhaXNSZWFjdENsYXNzTWV0aG9kICYmICFpc0FscmVhZHlEZWZpbmVkICYmIHNw
ZWMuYXV0b2JpbmQgIT09IGZhbHNlOworCisgICAgICBpZiAoc2hvdWxkQXV0b0JpbmQpIHsKKyAg
ICAgICAgYXV0b0JpbmRQYWlycy5wdXNoKG5hbWUsIHByb3BlcnR5KTsKKyAgICAgICAgcHJvdG9b
bmFtZV0gPSBwcm9wZXJ0eTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChpc0FscmVhZHlE
ZWZpbmVkKSB7CisgICAgICAgICAgdmFyIHNwZWNQb2xpY3kgPSBSZWFjdENsYXNzSW50ZXJmYWNl
W25hbWVdOworCisgICAgICAgICAgLy8gVGhlc2UgY2FzZXMgc2hvdWxkIGFscmVhZHkgYmUgY2F1
Z2h0IGJ5IHZhbGlkYXRlTWV0aG9kT3ZlcnJpZGUuCisgICAgICAgICAgIShpc1JlYWN0Q2xhc3NN
ZXRob2QgJiYgKHNwZWNQb2xpY3kgPT09ICdERUZJTkVfTUFOWV9NRVJHRUQnIHx8IHNwZWNQb2xp
Y3kgPT09ICdERUZJTkVfTUFOWScpKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/
IGludmFyaWFudChmYWxzZSwgJ1JlYWN0Q2xhc3M6IFVuZXhwZWN0ZWQgc3BlYyBwb2xpY3kgJXMg
Zm9yIGtleSAlcyB3aGVuIG1peGluZyBpbiBjb21wb25lbnQgc3BlY3MuJywgc3BlY1BvbGljeSwg
bmFtZSkgOiBfcHJvZEludmFyaWFudCgnNzcnLCBzcGVjUG9saWN5LCBuYW1lKSA6IHZvaWQgMDsK
KworICAgICAgICAgIC8vIEZvciBtZXRob2RzIHdoaWNoIGFyZSBkZWZpbmVkIG1vcmUgdGhhbiBv
bmNlLCBjYWxsIHRoZSBleGlzdGluZworICAgICAgICAgIC8vIG1ldGhvZHMgYmVmb3JlIGNhbGxp
bmcgdGhlIG5ldyBwcm9wZXJ0eSwgbWVyZ2luZyBpZiBhcHByb3ByaWF0ZS4KKyAgICAgICAgICBp
ZiAoc3BlY1BvbGljeSA9PT0gJ0RFRklORV9NQU5ZX01FUkdFRCcpIHsKKyAgICAgICAgICAgIHBy
b3RvW25hbWVdID0gY3JlYXRlTWVyZ2VkUmVzdWx0RnVuY3Rpb24ocHJvdG9bbmFtZV0sIHByb3Bl
cnR5KTsKKyAgICAgICAgICB9IGVsc2UgaWYgKHNwZWNQb2xpY3kgPT09ICdERUZJTkVfTUFOWScp
IHsKKyAgICAgICAgICAgIHByb3RvW25hbWVdID0gY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKHByb3Rv
W25hbWVdLCBwcm9wZXJ0eSk7CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgIHByb3RvW25hbWVdID0gcHJvcGVydHk7CisgICAgICAgICAgaWYgKCJkZXZlbG9wbWVudCIg
IT09ICdwcm9kdWN0aW9uJykgeworICAgICAgICAgICAgLy8gQWRkIHZlcmJvc2UgZGlzcGxheU5h
bWUgdG8gdGhlIGZ1bmN0aW9uLCB3aGljaCBoZWxwcyB3aGVuIGxvb2tpbmcKKyAgICAgICAgICAg
IC8vIGF0IHByb2ZpbGluZyB0b29scy4KKyAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkg
PT09ICdmdW5jdGlvbicgJiYgc3BlYy5kaXNwbGF5TmFtZSkgeworICAgICAgICAgICAgICBwcm90
b1tuYW1lXS5kaXNwbGF5TmFtZSA9IHNwZWMuZGlzcGxheU5hbWUgKyAnXycgKyBuYW1lOworICAg
ICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQor
fQorCitmdW5jdGlvbiBtaXhTdGF0aWNTcGVjSW50b0NvbXBvbmVudChDb25zdHJ1Y3Rvciwgc3Rh
dGljcykgeworICBpZiAoIXN0YXRpY3MpIHsKKyAgICByZXR1cm47CisgIH0KKyAgZm9yICh2YXIg
bmFtZSBpbiBzdGF0aWNzKSB7CisgICAgdmFyIHByb3BlcnR5ID0gc3RhdGljc1tuYW1lXTsKKyAg
ICBpZiAoIXN0YXRpY3MuaGFzT3duUHJvcGVydHkobmFtZSkpIHsKKyAgICAgIGNvbnRpbnVlOwor
ICAgIH0KKworICAgIHZhciBpc1Jlc2VydmVkID0gbmFtZSBpbiBSRVNFUlZFRF9TUEVDX0tFWVM7
CisgICAgISFpc1Jlc2VydmVkID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52
YXJpYW50KGZhbHNlLCAnUmVhY3RDbGFzczogWW91IGFyZSBhdHRlbXB0aW5nIHRvIGRlZmluZSBh
IHJlc2VydmVkIHByb3BlcnR5LCBgJXNgLCB0aGF0IHNob3VsZG5cJ3QgYmUgb24gdGhlICJzdGF0
aWNzIiBrZXkuIERlZmluZSBpdCBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBpbnN0ZWFkOyBpdCB3
aWxsIHN0aWxsIGJlIGFjY2Vzc2libGUgb24gdGhlIGNvbnN0cnVjdG9yLicsIG5hbWUpIDogX3By
b2RJbnZhcmlhbnQoJzc4JywgbmFtZSkgOiB2b2lkIDA7CisKKyAgICB2YXIgaXNJbmhlcml0ZWQg
PSBuYW1lIGluIENvbnN0cnVjdG9yOworICAgICEhaXNJbmhlcml0ZWQgPyAiZGV2ZWxvcG1lbnQi
ICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdENsYXNzOiBZb3UgYXJl
IGF0dGVtcHRpbmcgdG8gZGVmaW5lIGAlc2Agb24geW91ciBjb21wb25lbnQgbW9yZSB0aGFuIG9u
Y2UuIFRoaXMgY29uZmxpY3QgbWF5IGJlIGR1ZSB0byBhIG1peGluLicsIG5hbWUpIDogX3Byb2RJ
bnZhcmlhbnQoJzc5JywgbmFtZSkgOiB2b2lkIDA7CisgICAgQ29uc3RydWN0b3JbbmFtZV0gPSBw
cm9wZXJ0eTsKKyAgfQorfQorCisvKioKKyAqIE1lcmdlIHR3byBvYmplY3RzLCBidXQgdGhyb3cg
aWYgYm90aCBjb250YWluIHRoZSBzYW1lIGtleS4KKyAqCisgKiBAcGFyYW0ge29iamVjdH0gb25l
IFRoZSBmaXJzdCBvYmplY3QsIHdoaWNoIGlzIG11dGF0ZWQuCisgKiBAcGFyYW0ge29iamVjdH0g
dHdvIFRoZSBzZWNvbmQgb2JqZWN0CisgKiBAcmV0dXJuIHtvYmplY3R9IG9uZSBhZnRlciBpdCBo
YXMgYmVlbiBtdXRhdGVkIHRvIGNvbnRhaW4gZXZlcnl0aGluZyBpbiB0d28uCisgKi8KK2Z1bmN0
aW9uIG1lcmdlSW50b1dpdGhOb0R1cGxpY2F0ZUtleXMob25lLCB0d28pIHsKKyAgIShvbmUgJiYg
dHdvICYmIHR5cGVvZiBvbmUgPT09ICdvYmplY3QnICYmIHR5cGVvZiB0d28gPT09ICdvYmplY3Qn
KSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ21l
cmdlSW50b1dpdGhOb0R1cGxpY2F0ZUtleXMoKTogQ2Fubm90IG1lcmdlIG5vbi1vYmplY3RzLicp
IDogX3Byb2RJbnZhcmlhbnQoJzgwJykgOiB2b2lkIDA7CisKKyAgZm9yICh2YXIga2V5IGluIHR3
bykgeworICAgIGlmICh0d28uaGFzT3duUHJvcGVydHkoa2V5KSkgeworICAgICAgIShvbmVba2V5
XSA9PT0gdW5kZWZpbmVkKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFy
aWFudChmYWxzZSwgJ21lcmdlSW50b1dpdGhOb0R1cGxpY2F0ZUtleXMoKTogVHJpZWQgdG8gbWVy
Z2UgdHdvIG9iamVjdHMgd2l0aCB0aGUgc2FtZSBrZXk6IGAlc2AuIFRoaXMgY29uZmxpY3QgbWF5
IGJlIGR1ZSB0byBhIG1peGluOyBpbiBwYXJ0aWN1bGFyLCB0aGlzIG1heSBiZSBjYXVzZWQgYnkg
dHdvIGdldEluaXRpYWxTdGF0ZSgpIG9yIGdldERlZmF1bHRQcm9wcygpIG1ldGhvZHMgcmV0dXJu
aW5nIG9iamVjdHMgd2l0aCBjbGFzaGluZyBrZXlzLicsIGtleSkgOiBfcHJvZEludmFyaWFudCgn
ODEnLCBrZXkpIDogdm9pZCAwOworICAgICAgb25lW2tleV0gPSB0d29ba2V5XTsKKyAgICB9Cisg
IH0KKyAgcmV0dXJuIG9uZTsKK30KKworLyoqCisgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBp
bnZva2VzIHR3byBmdW5jdGlvbnMgYW5kIG1lcmdlcyB0aGVpciByZXR1cm4gdmFsdWVzLgorICoK
KyAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uZSBGdW5jdGlvbiB0byBpbnZva2UgZmlyc3QuCisgKiBA
cGFyYW0ge2Z1bmN0aW9ufSB0d28gRnVuY3Rpb24gdG8gaW52b2tlIHNlY29uZC4KKyAqIEByZXR1
cm4ge2Z1bmN0aW9ufSBGdW5jdGlvbiB0aGF0IGludm9rZXMgdGhlIHR3byBhcmd1bWVudCBmdW5j
dGlvbnMuCisgKiBAcHJpdmF0ZQorICovCitmdW5jdGlvbiBjcmVhdGVNZXJnZWRSZXN1bHRGdW5j
dGlvbihvbmUsIHR3bykgeworICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VkUmVzdWx0KCkgeworICAg
IHZhciBhID0gb25lLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgdmFyIGIgPSB0d28uYXBw
bHkodGhpcywgYXJndW1lbnRzKTsKKyAgICBpZiAoYSA9PSBudWxsKSB7CisgICAgICByZXR1cm4g
YjsKKyAgICB9IGVsc2UgaWYgKGIgPT0gbnVsbCkgeworICAgICAgcmV0dXJuIGE7CisgICAgfQor
ICAgIHZhciBjID0ge307CisgICAgbWVyZ2VJbnRvV2l0aE5vRHVwbGljYXRlS2V5cyhjLCBhKTsK
KyAgICBtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVLZXlzKGMsIGIpOworICAgIHJldHVybiBjOwor
ICB9OworfQorCisvKioKKyAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgdHdvIGZ1
bmN0aW9ucyBhbmQgaWdub3JlcyB0aGVpciByZXR1cm4gdmFsZXMuCisgKgorICogQHBhcmFtIHtm
dW5jdGlvbn0gb25lIEZ1bmN0aW9uIHRvIGludm9rZSBmaXJzdC4KKyAqIEBwYXJhbSB7ZnVuY3Rp
b259IHR3byBGdW5jdGlvbiB0byBpbnZva2Ugc2Vjb25kLgorICogQHJldHVybiB7ZnVuY3Rpb259
IEZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0aGUgdHdvIGFyZ3VtZW50IGZ1bmN0aW9ucy4KKyAqIEBw
cml2YXRlCisgKi8KK2Z1bmN0aW9uIGNyZWF0ZUNoYWluZWRGdW5jdGlvbihvbmUsIHR3bykgewor
ICByZXR1cm4gZnVuY3Rpb24gY2hhaW5lZEZ1bmN0aW9uKCkgeworICAgIG9uZS5hcHBseSh0aGlz
LCBhcmd1bWVudHMpOworICAgIHR3by5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICB9OworfQor
CisvKioKKyAqIEJpbmRzIGEgbWV0aG9kIHRvIHRoZSBjb21wb25lbnQuCisgKgorICogQHBhcmFt
IHtvYmplY3R9IGNvbXBvbmVudCBDb21wb25lbnQgd2hvc2UgbWV0aG9kIGlzIGdvaW5nIHRvIGJl
IGJvdW5kLgorICogQHBhcmFtIHtmdW5jdGlvbn0gbWV0aG9kIE1ldGhvZCB0byBiZSBib3VuZC4K
KyAqIEByZXR1cm4ge2Z1bmN0aW9ufSBUaGUgYm91bmQgbWV0aG9kLgorICovCitmdW5jdGlvbiBi
aW5kQXV0b0JpbmRNZXRob2QoY29tcG9uZW50LCBtZXRob2QpIHsKKyAgdmFyIGJvdW5kTWV0aG9k
ID0gbWV0aG9kLmJpbmQoY29tcG9uZW50KTsKKyAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9k
dWN0aW9uJykgeworICAgIGJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZENvbnRleHQgPSBjb21wb25l
bnQ7CisgICAgYm91bmRNZXRob2QuX19yZWFjdEJvdW5kTWV0aG9kID0gbWV0aG9kOworICAgIGJv
dW5kTWV0aG9kLl9fcmVhY3RCb3VuZEFyZ3VtZW50cyA9IG51bGw7CisgICAgdmFyIGNvbXBvbmVu
dE5hbWUgPSBjb21wb25lbnQuY29uc3RydWN0b3IuZGlzcGxheU5hbWU7CisgICAgdmFyIF9iaW5k
ID0gYm91bmRNZXRob2QuYmluZDsKKyAgICBib3VuZE1ldGhvZC5iaW5kID0gZnVuY3Rpb24gKG5l
d1RoaXMpIHsKKyAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0g
QXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9r
ZXkrKykgeworICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTsKKyAgICAg
IH0KKworICAgICAgLy8gVXNlciBpcyB0cnlpbmcgdG8gYmluZCgpIGFuIGF1dG9ib3VuZCBtZXRo
b2Q7IHdlIGVmZmVjdGl2ZWx5IHdpbGwKKyAgICAgIC8vIGlnbm9yZSB0aGUgdmFsdWUgb2YgInRo
aXMiIHRoYXQgdGhlIHVzZXIgaXMgdHJ5aW5nIHRvIHVzZSwgc28KKyAgICAgIC8vIGxldCdzIHdh
cm4uCisgICAgICBpZiAobmV3VGhpcyAhPT0gY29tcG9uZW50ICYmIG5ld1RoaXMgIT09IG51bGwp
IHsKKyAgICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxz
ZSwgJ2JpbmQoKTogUmVhY3QgY29tcG9uZW50IG1ldGhvZHMgbWF5IG9ubHkgYmUgYm91bmQgdG8g
dGhlICcgKyAnY29tcG9uZW50IGluc3RhbmNlLiBTZWUgJXMnLCBjb21wb25lbnROYW1lKSA6IHZv
aWQgMDsKKyAgICAgIH0gZWxzZSBpZiAoIWFyZ3MubGVuZ3RoKSB7CisgICAgICAgICJkZXZlbG9w
bWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdiaW5kKCk6IFlvdSBhcmUg
YmluZGluZyBhIGNvbXBvbmVudCBtZXRob2QgdG8gdGhlIGNvbXBvbmVudC4gJyArICdSZWFjdCBk
b2VzIHRoaXMgZm9yIHlvdSBhdXRvbWF0aWNhbGx5IGluIGEgaGlnaC1wZXJmb3JtYW5jZSAnICsg
J3dheSwgc28geW91IGNhbiBzYWZlbHkgcmVtb3ZlIHRoaXMgY2FsbC4gU2VlICVzJywgY29tcG9u
ZW50TmFtZSkgOiB2b2lkIDA7CisgICAgICAgIHJldHVybiBib3VuZE1ldGhvZDsKKyAgICAgIH0K
KyAgICAgIHZhciByZWJvdW5kTWV0aG9kID0gX2JpbmQuYXBwbHkoYm91bmRNZXRob2QsIGFyZ3Vt
ZW50cyk7CisgICAgICByZWJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZENvbnRleHQgPSBjb21wb25l
bnQ7CisgICAgICByZWJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZE1ldGhvZCA9IG1ldGhvZDsKKyAg
ICAgIHJlYm91bmRNZXRob2QuX19yZWFjdEJvdW5kQXJndW1lbnRzID0gYXJnczsKKyAgICAgIHJl
dHVybiByZWJvdW5kTWV0aG9kOworICAgIH07CisgIH0KKyAgcmV0dXJuIGJvdW5kTWV0aG9kOwor
fQorCisvKioKKyAqIEJpbmRzIGFsbCBhdXRvLWJvdW5kIG1ldGhvZHMgaW4gYSBjb21wb25lbnQu
CisgKgorICogQHBhcmFtIHtvYmplY3R9IGNvbXBvbmVudCBDb21wb25lbnQgd2hvc2UgbWV0aG9k
IGlzIGdvaW5nIHRvIGJlIGJvdW5kLgorICovCitmdW5jdGlvbiBiaW5kQXV0b0JpbmRNZXRob2Rz
KGNvbXBvbmVudCkgeworICB2YXIgcGFpcnMgPSBjb21wb25lbnQuX19yZWFjdEF1dG9CaW5kUGFp
cnM7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFpcnMubGVuZ3RoOyBpICs9IDIpIHsKKyAgICB2
YXIgYXV0b0JpbmRLZXkgPSBwYWlyc1tpXTsKKyAgICB2YXIgbWV0aG9kID0gcGFpcnNbaSArIDFd
OworICAgIGNvbXBvbmVudFthdXRvQmluZEtleV0gPSBiaW5kQXV0b0JpbmRNZXRob2QoY29tcG9u
ZW50LCBtZXRob2QpOworICB9Cit9CisKKy8qKgorICogQWRkIG1vcmUgdG8gdGhlIFJlYWN0Q2xh
c3MgYmFzZSBjbGFzcy4gVGhlc2UgYXJlIGFsbCBsZWdhY3kgZmVhdHVyZXMgYW5kCisgKiB0aGVy
ZWZvcmUgbm90IGFscmVhZHkgcGFydCBvZiB0aGUgbW9kZXJuIFJlYWN0Q29tcG9uZW50LgorICov
Cit2YXIgUmVhY3RDbGFzc01peGluID0geworCisgIC8qKgorICAgKiBUT0RPOiBUaGlzIHdpbGwg
YmUgZGVwcmVjYXRlZCBiZWNhdXNlIHN0YXRlIHNob3VsZCBhbHdheXMga2VlcCBhIGNvbnNpc3Rl
bnQKKyAgICogdHlwZSBzaWduYXR1cmUgYW5kIHRoZSBvbmx5IHVzZSBjYXNlIGZvciB0aGlzLCBp
cyB0byBhdm9pZCB0aGF0LgorICAgKi8KKyAgcmVwbGFjZVN0YXRlOiBmdW5jdGlvbiAobmV3U3Rh
dGUsIGNhbGxiYWNrKSB7CisgICAgdGhpcy51cGRhdGVyLmVucXVldWVSZXBsYWNlU3RhdGUodGhp
cywgbmV3U3RhdGUpOworICAgIGlmIChjYWxsYmFjaykgeworICAgICAgdGhpcy51cGRhdGVyLmVu
cXVldWVDYWxsYmFjayh0aGlzLCBjYWxsYmFjaywgJ3JlcGxhY2VTdGF0ZScpOworICAgIH0KKyAg
fSwKKworICAvKioKKyAgICogQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHRoaXMgY29tcG9zaXRlIGNv
bXBvbmVudCBpcyBtb3VudGVkLgorICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIG1vdW50
ZWQsIGZhbHNlIG90aGVyd2lzZS4KKyAgICogQHByb3RlY3RlZAorICAgKiBAZmluYWwKKyAgICov
CisgIGlzTW91bnRlZDogZnVuY3Rpb24gKCkgeworICAgIHJldHVybiB0aGlzLnVwZGF0ZXIuaXNN
b3VudGVkKHRoaXMpOworICB9Cit9OworCit2YXIgUmVhY3RDbGFzc0NvbXBvbmVudCA9IGZ1bmN0
aW9uICgpIHt9OworX2Fzc2lnbihSZWFjdENsYXNzQ29tcG9uZW50LnByb3RvdHlwZSwgUmVhY3RD
b21wb25lbnQucHJvdG90eXBlLCBSZWFjdENsYXNzTWl4aW4pOworCit2YXIgZGlkV2FybkRlcHJl
Y2F0ZWQgPSBmYWxzZTsKKworLyoqCisgKiBNb2R1bGUgZm9yIGNyZWF0aW5nIGNvbXBvc2l0ZSBj
b21wb25lbnRzLgorICoKKyAqIEBjbGFzcyBSZWFjdENsYXNzCisgKi8KK3ZhciBSZWFjdENsYXNz
ID0geworCisgIC8qKgorICAgKiBDcmVhdGVzIGEgY29tcG9zaXRlIGNvbXBvbmVudCBjbGFzcyBn
aXZlbiBhIGNsYXNzIHNwZWNpZmljYXRpb24uCisgICAqIFNlZSBodHRwczovL2ZhY2Vib29rLmdp
dGh1Yi5pby9yZWFjdC9kb2NzL3RvcC1sZXZlbC1hcGkuaHRtbCNyZWFjdC5jcmVhdGVjbGFzcwor
ICAgKgorICAgKiBAcGFyYW0ge29iamVjdH0gc3BlYyBDbGFzcyBzcGVjaWZpY2F0aW9uICh3aGlj
aCBtdXN0IGRlZmluZSBgcmVuZGVyYCkuCisgICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBDb21wb25l
bnQgY29uc3RydWN0b3IgZnVuY3Rpb24uCisgICAqIEBwdWJsaWMKKyAgICovCisgIGNyZWF0ZUNs
YXNzOiBmdW5jdGlvbiAoc3BlYykgeworICAgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVj
dGlvbicpIHsKKyAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmco
ZGlkV2FybkRlcHJlY2F0ZWQsICclczogUmVhY3QuY3JlYXRlQ2xhc3MgaXMgZGVwcmVjYXRlZCBh
bmQgd2lsbCBiZSByZW1vdmVkIGluIHZlcnNpb24gMTYuICcgKyAnVXNlIHBsYWluIEphdmFTY3Jp
cHQgY2xhc3NlcyBpbnN0ZWFkLiBJZiB5b3VcJ3JlIG5vdCB5ZXQgcmVhZHkgdG8gJyArICdtaWdy
YXRlLCBjcmVhdGUtcmVhY3QtY2xhc3MgaXMgYXZhaWxhYmxlIG9uIG5wbSBhcyBhICcgKyAnZHJv
cC1pbiByZXBsYWNlbWVudC4nLCBzcGVjICYmIHNwZWMuZGlzcGxheU5hbWUgfHwgJ0EgQ29tcG9u
ZW50JykgOiB2b2lkIDA7CisgICAgICBkaWRXYXJuRGVwcmVjYXRlZCA9IHRydWU7CisgICAgfQor
CisgICAgLy8gVG8ga2VlcCBvdXIgd2FybmluZ3MgbW9yZSB1bmRlcnN0YW5kYWJsZSwgd2UnbGwg
dXNlIGEgbGl0dGxlIGhhY2sgaGVyZSB0bworICAgIC8vIGVuc3VyZSB0aGF0IENvbnN0cnVjdG9y
Lm5hbWUgIT09ICdDb25zdHJ1Y3RvcicuIFRoaXMgbWFrZXMgc3VyZSB3ZSBkb24ndAorICAgIC8v
IHVubmVjZXNzYXJpbHkgaWRlbnRpZnkgYSBjbGFzcyB3aXRob3V0IGRpc3BsYXlOYW1lIGFzICdD
b25zdHJ1Y3RvcicuCisgICAgdmFyIENvbnN0cnVjdG9yID0gaWRlbnRpdHkoZnVuY3Rpb24gKHBy
b3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7CisgICAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIGdldHMg
b3ZlcnJpZGRlbiBieSBtb2Nrcy4gVGhlIGFyZ3VtZW50IGlzIHVzZWQKKyAgICAgIC8vIGJ5IG1v
Y2tzIHRvIGFzc2VydCBvbiB3aGF0IGdldHMgbW91bnRlZC4KKworICAgICAgaWYgKCJkZXZlbG9w
bWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJv
ZHVjdGlvbicgPyB3YXJuaW5nKHRoaXMgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvciwgJ1NvbWV0aGlu
ZyBpcyBjYWxsaW5nIGEgUmVhY3QgY29tcG9uZW50IGRpcmVjdGx5LiBVc2UgYSBmYWN0b3J5IG9y
ICcgKyAnSlNYIGluc3RlYWQuIFNlZTogaHR0cHM6Ly9mYi5tZS9yZWFjdC1sZWdhY3lmYWN0b3J5
JykgOiB2b2lkIDA7CisgICAgICB9CisKKyAgICAgIC8vIFdpcmUgdXAgYXV0by1iaW5kaW5nCisg
ICAgICBpZiAodGhpcy5fX3JlYWN0QXV0b0JpbmRQYWlycy5sZW5ndGgpIHsKKyAgICAgICAgYmlu
ZEF1dG9CaW5kTWV0aG9kcyh0aGlzKTsKKyAgICAgIH0KKworICAgICAgdGhpcy5wcm9wcyA9IHBy
b3BzOworICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsKKyAgICAgIHRoaXMucmVmcyA9IGVt
cHR5T2JqZWN0OworICAgICAgdGhpcy51cGRhdGVyID0gdXBkYXRlciB8fCBSZWFjdE5vb3BVcGRh
dGVRdWV1ZTsKKworICAgICAgdGhpcy5zdGF0ZSA9IG51bGw7CisKKyAgICAgIC8vIFJlYWN0Q2xh
c3NlcyBkb2Vzbid0IGhhdmUgY29uc3RydWN0b3JzLiBJbnN0ZWFkLCB0aGV5IHVzZSB0aGUKKyAg
ICAgIC8vIGdldEluaXRpYWxTdGF0ZSBhbmQgY29tcG9uZW50V2lsbE1vdW50IG1ldGhvZHMgZm9y
IGluaXRpYWxpemF0aW9uLgorCisgICAgICB2YXIgaW5pdGlhbFN0YXRlID0gdGhpcy5nZXRJbml0
aWFsU3RhdGUgPyB0aGlzLmdldEluaXRpYWxTdGF0ZSgpIDogbnVsbDsKKyAgICAgIGlmICgiZGV2
ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAgICAgLy8gV2UgYWxsb3cgYXV0by1t
b2NrcyB0byBwcm9jZWVkIGFzIGlmIHRoZXkncmUgcmV0dXJuaW5nIG51bGwuCisgICAgICAgIGlm
IChpbml0aWFsU3RhdGUgPT09IHVuZGVmaW5lZCAmJiB0aGlzLmdldEluaXRpYWxTdGF0ZS5faXNN
b2NrRnVuY3Rpb24pIHsKKyAgICAgICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IGJhZCBwcmFjdGlj
ZS4gQ29uc2lkZXIgd2FybmluZyBoZXJlIGFuZAorICAgICAgICAgIC8vIGRlcHJlY2F0aW5nIHRo
aXMgY29udmVuaWVuY2UuCisgICAgICAgICAgaW5pdGlhbFN0YXRlID0gbnVsbDsKKyAgICAgICAg
fQorICAgICAgfQorICAgICAgISh0eXBlb2YgaW5pdGlhbFN0YXRlID09PSAnb2JqZWN0JyAmJiAh
QXJyYXkuaXNBcnJheShpbml0aWFsU3RhdGUpKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0
aW9uJyA/IGludmFyaWFudChmYWxzZSwgJyVzLmdldEluaXRpYWxTdGF0ZSgpOiBtdXN0IHJldHVy
biBhbiBvYmplY3Qgb3IgbnVsbCcsIENvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8ICdSZWFjdENv
bXBvc2l0ZUNvbXBvbmVudCcpIDogX3Byb2RJbnZhcmlhbnQoJzgyJywgQ29uc3RydWN0b3IuZGlz
cGxheU5hbWUgfHwgJ1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50JykgOiB2b2lkIDA7CisKKyAgICAg
IHRoaXMuc3RhdGUgPSBpbml0aWFsU3RhdGU7CisgICAgfSk7CisgICAgQ29uc3RydWN0b3IucHJv
dG90eXBlID0gbmV3IFJlYWN0Q2xhc3NDb21wb25lbnQoKTsKKyAgICBDb25zdHJ1Y3Rvci5wcm90
b3R5cGUuY29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcjsKKyAgICBDb25zdHJ1Y3Rvci5wcm90b3R5
cGUuX19yZWFjdEF1dG9CaW5kUGFpcnMgPSBbXTsKKworICAgIGluamVjdGVkTWl4aW5zLmZvckVh
Y2gobWl4U3BlY0ludG9Db21wb25lbnQuYmluZChudWxsLCBDb25zdHJ1Y3RvcikpOworCisgICAg
bWl4U3BlY0ludG9Db21wb25lbnQoQ29uc3RydWN0b3IsIHNwZWMpOworCisgICAgLy8gSW5pdGlh
bGl6ZSB0aGUgZGVmYXVsdFByb3BzIHByb3BlcnR5IGFmdGVyIGFsbCBtaXhpbnMgaGF2ZSBiZWVu
IG1lcmdlZC4KKyAgICBpZiAoQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzKSB7CisgICAgICBD
b25zdHJ1Y3Rvci5kZWZhdWx0UHJvcHMgPSBDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMoKTsK
KyAgICB9CisKKyAgICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAg
ICAvLyBUaGlzIGlzIGEgdGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHVzZSBvZiB0aGVzZSBtZXRo
b2QgbmFtZXMgaXMgb2ssCisgICAgICAvLyBzaW5jZSBpdCdzIHVzZWQgd2l0aCBjcmVhdGVDbGFz
cy4gSWYgaXQncyBub3QsIHRoZW4gaXQncyBsaWtlbHkgYQorICAgICAgLy8gbWlzdGFrZSBzbyB3
ZSdsbCB3YXJuIHlvdSB0byB1c2UgdGhlIHN0YXRpYyBwcm9wZXJ0eSwgcHJvcGVydHkKKyAgICAg
IC8vIGluaXRpYWxpemVyIG9yIGNvbnN0cnVjdG9yIHJlc3BlY3RpdmVseS4KKyAgICAgIGlmIChD
b25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMpIHsKKyAgICAgICAgQ29uc3RydWN0b3IuZ2V0RGVm
YXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkID0ge307CisgICAgICB9CisgICAgICBpZiAo
Q29uc3RydWN0b3IucHJvdG90eXBlLmdldEluaXRpYWxTdGF0ZSkgeworICAgICAgICBDb25zdHJ1
Y3Rvci5wcm90b3R5cGUuZ2V0SW5pdGlhbFN0YXRlLmlzUmVhY3RDbGFzc0FwcHJvdmVkID0ge307
CisgICAgICB9CisgICAgfQorCisgICAgIUNvbnN0cnVjdG9yLnByb3RvdHlwZS5yZW5kZXIgPyAi
ZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdjcmVhdGVD
bGFzcyguLi4pOiBDbGFzcyBzcGVjaWZpY2F0aW9uIG11c3QgaW1wbGVtZW50IGEgYHJlbmRlcmAg
bWV0aG9kLicpIDogX3Byb2RJbnZhcmlhbnQoJzgzJykgOiB2b2lkIDA7CisKKyAgICBpZiAoImRl
dmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAn
cHJvZHVjdGlvbicgPyB3YXJuaW5nKCFDb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29tcG9uZW50U2hv
dWxkVXBkYXRlLCAnJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudFNob3VsZFVw
ZGF0ZSgpLiBEaWQgeW91IG1lYW4gc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk/ICcgKyAnVGhlIG5h
bWUgaXMgcGhyYXNlZCBhcyBhIHF1ZXN0aW9uIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzICcgKyAn
ZXhwZWN0ZWQgdG8gcmV0dXJuIGEgdmFsdWUuJywgc3BlYy5kaXNwbGF5TmFtZSB8fCAnQSBjb21w
b25lbnQnKSA6IHZvaWQgMDsKKyAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/
IHdhcm5pbmcoIUNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjaWV2ZVByb3Bz
LCAnJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMo
KS4gRGlkIHlvdSBtZWFuIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKT8nLCBzcGVjLmRpc3Bs
YXlOYW1lIHx8ICdBIGNvbXBvbmVudCcpIDogdm9pZCAwOworICAgIH0KKworICAgIC8vIFJlZHVj
ZSB0aW1lIHNwZW50IGRvaW5nIGxvb2t1cHMgYnkgc2V0dGluZyB0aGVzZSBvbiB0aGUgcHJvdG90
eXBlLgorICAgIGZvciAodmFyIG1ldGhvZE5hbWUgaW4gUmVhY3RDbGFzc0ludGVyZmFjZSkgewor
ICAgICAgaWYgKCFDb25zdHJ1Y3Rvci5wcm90b3R5cGVbbWV0aG9kTmFtZV0pIHsKKyAgICAgICAg
Q29uc3RydWN0b3IucHJvdG90eXBlW21ldGhvZE5hbWVdID0gbnVsbDsKKyAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gQ29uc3RydWN0b3I7CisgIH0sCisKKyAgaW5qZWN0aW9uOiB7CisgICAg
aW5qZWN0TWl4aW46IGZ1bmN0aW9uIChtaXhpbikgeworICAgICAgaW5qZWN0ZWRNaXhpbnMucHVz
aChtaXhpbik7CisgICAgfQorICB9CisKK307CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RDbGFz
czsKK30seyIxMCI6MTAsIjEzIjoxMywiMTQiOjE0LCIyNSI6MjUsIjI4IjoyOCwiMjkiOjI5LCIz
MCI6MzAsIjMxIjozMSwiNiI6Nn1dLDY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMp
eworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVu
ZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBp
biB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBn
cmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmls
ZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFy
IF9wcm9kSW52YXJpYW50ID0gX2RlcmVxXygyNSk7CisKK3ZhciBSZWFjdE5vb3BVcGRhdGVRdWV1
ZSA9IF9kZXJlcV8oMTMpOworCit2YXIgY2FuRGVmaW5lUHJvcGVydHkgPSBfZGVyZXFfKDIwKTsK
K3ZhciBlbXB0eU9iamVjdCA9IF9kZXJlcV8oMjgpOwordmFyIGludmFyaWFudCA9IF9kZXJlcV8o
MjkpOwordmFyIHdhcm5pbmcgPSBfZGVyZXFfKDMwKTsKKworLyoqCisgKiBCYXNlIGNsYXNzIGhl
bHBlcnMgZm9yIHRoZSB1cGRhdGluZyBzdGF0ZSBvZiBhIGNvbXBvbmVudC4KKyAqLworZnVuY3Rp
b24gUmVhY3RDb21wb25lbnQocHJvcHMsIGNvbnRleHQsIHVwZGF0ZXIpIHsKKyAgdGhpcy5wcm9w
cyA9IHByb3BzOworICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OworICB0aGlzLnJlZnMgPSBlbXB0
eU9iamVjdDsKKyAgLy8gV2UgaW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCB1cGRhdGVyIGJ1dCB0aGUg
cmVhbCBvbmUgZ2V0cyBpbmplY3RlZCBieSB0aGUKKyAgLy8gcmVuZGVyZXIuCisgIHRoaXMudXBk
YXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7Cit9CisKK1JlYWN0Q29tcG9u
ZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50ID0ge307CisKKy8qKgorICogU2V0cyBhIHN1
YnNldCBvZiB0aGUgc3RhdGUuIEFsd2F5cyB1c2UgdGhpcyB0byBtdXRhdGUKKyAqIHN0YXRlLiBZ
b3Ugc2hvdWxkIHRyZWF0IGB0aGlzLnN0YXRlYCBhcyBpbW11dGFibGUuCisgKgorICogVGhlcmUg
aXMgbm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVgIHdpbGwgYmUgaW1tZWRpYXRlbHkgdXBk
YXRlZCwgc28KKyAqIGFjY2Vzc2luZyBgdGhpcy5zdGF0ZWAgYWZ0ZXIgY2FsbGluZyB0aGlzIG1l
dGhvZCBtYXkgcmV0dXJuIHRoZSBvbGQgdmFsdWUuCisgKgorICogVGhlcmUgaXMgbm8gZ3VhcmFu
dGVlIHRoYXQgY2FsbHMgdG8gYHNldFN0YXRlYCB3aWxsIHJ1biBzeW5jaHJvbm91c2x5LAorICog
YXMgdGhleSBtYXkgZXZlbnR1YWxseSBiZSBiYXRjaGVkIHRvZ2V0aGVyLiAgWW91IGNhbiBwcm92
aWRlIGFuIG9wdGlvbmFsCisgKiBjYWxsYmFjayB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiB0
aGUgY2FsbCB0byBzZXRTdGF0ZSBpcyBhY3R1YWxseQorICogY29tcGxldGVkLgorICoKKyAqIFdo
ZW4gYSBmdW5jdGlvbiBpcyBwcm92aWRlZCB0byBzZXRTdGF0ZSwgaXQgd2lsbCBiZSBjYWxsZWQg
YXQgc29tZSBwb2ludCBpbgorICogdGhlIGZ1dHVyZSAobm90IHN5bmNocm9ub3VzbHkpLiBJdCB3
aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSB1cCB0byBkYXRlCisgKiBjb21wb25lbnQgYXJndW1lbnRz
IChzdGF0ZSwgcHJvcHMsIGNvbnRleHQpLiBUaGVzZSB2YWx1ZXMgY2FuIGJlIGRpZmZlcmVudAor
ICogZnJvbSB0aGlzLiogYmVjYXVzZSB5b3VyIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgYWZ0ZXIg
cmVjZWl2ZVByb3BzIGJ1dCBiZWZvcmUKKyAqIHNob3VsZENvbXBvbmVudFVwZGF0ZSwgYW5kIHRo
aXMgbmV3IHN0YXRlLCBwcm9wcywgYW5kIGNvbnRleHQgd2lsbCBub3QgeWV0IGJlCisgKiBhc3Np
Z25lZCB0byB0aGlzLgorICoKKyAqIEBwYXJhbSB7b2JqZWN0fGZ1bmN0aW9ufSBwYXJ0aWFsU3Rh
dGUgTmV4dCBwYXJ0aWFsIHN0YXRlIG9yIGZ1bmN0aW9uIHRvCisgKiAgICAgICAgcHJvZHVjZSBu
ZXh0IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggY3VycmVudCBzdGF0ZS4KKyAqIEBw
YXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgc3RhdGUgaXMgdXBkYXRlZC4K
KyAqIEBmaW5hbAorICogQHByb3RlY3RlZAorICovCitSZWFjdENvbXBvbmVudC5wcm90b3R5cGUu
c2V0U3RhdGUgPSBmdW5jdGlvbiAocGFydGlhbFN0YXRlLCBjYWxsYmFjaykgeworICAhKHR5cGVv
ZiBwYXJ0aWFsU3RhdGUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdm
dW5jdGlvbicgfHwgcGFydGlhbFN0YXRlID09IG51bGwpID8gImRldmVsb3BtZW50IiAhPT0gJ3By
b2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnc2V0U3RhdGUoLi4uKTogdGFrZXMgYW4gb2Jq
ZWN0IG9mIHN0YXRlIHZhcmlhYmxlcyB0byB1cGRhdGUgb3IgYSBmdW5jdGlvbiB3aGljaCByZXR1
cm5zIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMuJykgOiBfcHJvZEludmFyaWFudCgnODUn
KSA6IHZvaWQgMDsKKyAgdGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLCBwYXJ0aWFs
U3RhdGUpOworICBpZiAoY2FsbGJhY2spIHsKKyAgICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZUNhbGxi
YWNrKHRoaXMsIGNhbGxiYWNrLCAnc2V0U3RhdGUnKTsKKyAgfQorfTsKKworLyoqCisgKiBGb3Jj
ZXMgYW4gdXBkYXRlLiBUaGlzIHNob3VsZCBvbmx5IGJlIGludm9rZWQgd2hlbiBpdCBpcyBrbm93
biB3aXRoCisgKiBjZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3QqKiBpbiBhIERPTSB0cmFuc2Fj
dGlvbi4KKyAqCisgKiBZb3UgbWF5IHdhbnQgdG8gY2FsbCB0aGlzIHdoZW4geW91IGtub3cgdGhh
dCBzb21lIGRlZXBlciBhc3BlY3Qgb2YgdGhlCisgKiBjb21wb25lbnQncyBzdGF0ZSBoYXMgY2hh
bmdlZCBidXQgYHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC4KKyAqCisgKiBUaGlzIHdpbGwgbm90
IGludm9rZSBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYCwgYnV0IGl0IHdpbGwgaW52b2tlCisgKiBg
Y29tcG9uZW50V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVgLgorICoKKyAqIEBw
YXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgdXBkYXRlIGlzIGNvbXBsZXRl
LgorICogQGZpbmFsCisgKiBAcHJvdGVjdGVkCisgKi8KK1JlYWN0Q29tcG9uZW50LnByb3RvdHlw
ZS5mb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICB0aGlzLnVwZGF0ZXIuZW5x
dWV1ZUZvcmNlVXBkYXRlKHRoaXMpOworICBpZiAoY2FsbGJhY2spIHsKKyAgICB0aGlzLnVwZGF0
ZXIuZW5xdWV1ZUNhbGxiYWNrKHRoaXMsIGNhbGxiYWNrLCAnZm9yY2VVcGRhdGUnKTsKKyAgfQor
fTsKKworLyoqCisgKiBEZXByZWNhdGVkIEFQSXMuIFRoZXNlIEFQSXMgdXNlZCB0byBleGlzdCBv
biBjbGFzc2ljIFJlYWN0IGNsYXNzZXMgYnV0IHNpbmNlCisgKiB3ZSB3b3VsZCBsaWtlIHRvIGRl
cHJlY2F0ZSB0aGVtLCB3ZSdyZSBub3QgZ29pbmcgdG8gbW92ZSB0aGVtIG92ZXIgdG8gdGhpcwor
ICogbW9kZXJuIGJhc2UgY2xhc3MuIEluc3RlYWQsIHdlIGRlZmluZSBhIGdldHRlciB0aGF0IHdh
cm5zIGlmIGl0J3MgYWNjZXNzZWQuCisgKi8KK2lmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVj
dGlvbicpIHsKKyAgdmFyIGRlcHJlY2F0ZWRBUElzID0geworICAgIGlzTW91bnRlZDogWydpc01v
dW50ZWQnLCAnSW5zdGVhZCwgbWFrZSBzdXJlIHRvIGNsZWFuIHVwIHN1YnNjcmlwdGlvbnMgYW5k
IHBlbmRpbmcgcmVxdWVzdHMgaW4gJyArICdjb21wb25lbnRXaWxsVW5tb3VudCB0byBwcmV2ZW50
IG1lbW9yeSBsZWFrcy4nXSwKKyAgICByZXBsYWNlU3RhdGU6IFsncmVwbGFjZVN0YXRlJywgJ1Jl
ZmFjdG9yIHlvdXIgY29kZSB0byB1c2Ugc2V0U3RhdGUgaW5zdGVhZCAoc2VlICcgKyAnaHR0cHM6
Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zMjM2KS4nXQorICB9OworICB2YXIg
ZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5nID0gZnVuY3Rpb24gKG1ldGhvZE5hbWUsIGluZm8pIHsK
KyAgICBpZiAoY2FuRGVmaW5lUHJvcGVydHkpIHsKKyAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShSZWFjdENvbXBvbmVudC5wcm90b3R5cGUsIG1ldGhvZE5hbWUsIHsKKyAgICAgICAgZ2V0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8g
d2FybmluZyhmYWxzZSwgJyVzKC4uLikgaXMgZGVwcmVjYXRlZCBpbiBwbGFpbiBKYXZhU2NyaXB0
IFJlYWN0IGNsYXNzZXMuICVzJywgaW5mb1swXSwgaW5mb1sxXSkgOiB2b2lkIDA7CisgICAgICAg
ICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfQorICB9Owor
ICBmb3IgKHZhciBmbk5hbWUgaW4gZGVwcmVjYXRlZEFQSXMpIHsKKyAgICBpZiAoZGVwcmVjYXRl
ZEFQSXMuaGFzT3duUHJvcGVydHkoZm5OYW1lKSkgeworICAgICAgZGVmaW5lRGVwcmVjYXRpb25X
YXJuaW5nKGZuTmFtZSwgZGVwcmVjYXRlZEFQSXNbZm5OYW1lXSk7CisgICAgfQorICB9Cit9CisK
K21vZHVsZS5leHBvcnRzID0gUmVhY3RDb21wb25lbnQ7Cit9LHsiMTMiOjEzLCIyMCI6MjAsIjI1
IjoyNSwiMjgiOjI4LCIyOSI6MjksIjMwIjozMH1dLDc6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxl
LGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxNi1wcmVzZW50LCBGYWNlYm9vaywgSW5j
LgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxp
Y2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VO
U0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRk
aXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBB
VEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICogCisgKi8KKworJ3VzZSBz
dHJpY3QnOworCit2YXIgX3Byb2RJbnZhcmlhbnQgPSBfZGVyZXFfKDI1KTsKKwordmFyIFJlYWN0
Q3VycmVudE93bmVyID0gX2RlcmVxXyg4KTsKKwordmFyIGludmFyaWFudCA9IF9kZXJlcV8oMjkp
OwordmFyIHdhcm5pbmcgPSBfZGVyZXFfKDMwKTsKKworZnVuY3Rpb24gaXNOYXRpdmUoZm4pIHsK
KyAgLy8gQmFzZWQgb24gaXNOYXRpdmUoKSBmcm9tIExvZGFzaAorICB2YXIgZnVuY1RvU3RyaW5n
ID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nOworICB2YXIgaGFzT3duUHJvcGVydHkgPSBP
YmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5OworICB2YXIgcmVJc05hdGl2ZSA9IFJlZ0V4
cCgnXicgKyBmdW5jVG9TdHJpbmcKKyAgLy8gVGFrZSBhbiBleGFtcGxlIG5hdGl2ZSBmdW5jdGlv
biBzb3VyY2UgZm9yIGNvbXBhcmlzb24KKyAgLmNhbGwoaGFzT3duUHJvcGVydHkpCisgIC8vIFN0
cmlwIHJlZ2V4IGNoYXJhY3RlcnMgc28gd2UgY2FuIHVzZSBpdCBmb3IgcmVnZXgKKyAgLnJlcGxh
Y2UoL1tcXF4kLiorPygpW1xde318XS9nLCAnXFwkJicpCisgIC8vIFJlbW92ZSBoYXNPd25Qcm9w
ZXJ0eSBmcm9tIHRoZSB0ZW1wbGF0ZSB0byBtYWtlIGl0IGdlbmVyaWMKKyAgLnJlcGxhY2UoL2hh
c093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csICck
MS4qPycpICsgJyQnKTsKKyAgdHJ5IHsKKyAgICB2YXIgc291cmNlID0gZnVuY1RvU3RyaW5nLmNh
bGwoZm4pOworICAgIHJldHVybiByZUlzTmF0aXZlLnRlc3Qoc291cmNlKTsKKyAgfSBjYXRjaCAo
ZXJyKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9Cit9CisKK3ZhciBjYW5Vc2VDb2xsZWN0aW9u
cyA9CisvLyBBcnJheS5mcm9tCit0eXBlb2YgQXJyYXkuZnJvbSA9PT0gJ2Z1bmN0aW9uJyAmJgor
Ly8gTWFwCit0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIGlzTmF0aXZlKE1hcCkgJiYKKy8v
IE1hcC5wcm90b3R5cGUua2V5cworTWFwLnByb3RvdHlwZSAhPSBudWxsICYmIHR5cGVvZiBNYXAu
cHJvdG90eXBlLmtleXMgPT09ICdmdW5jdGlvbicgJiYgaXNOYXRpdmUoTWFwLnByb3RvdHlwZS5r
ZXlzKSAmJgorLy8gU2V0Cit0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIGlzTmF0aXZlKFNl
dCkgJiYKKy8vIFNldC5wcm90b3R5cGUua2V5cworU2V0LnByb3RvdHlwZSAhPSBudWxsICYmIHR5
cGVvZiBTZXQucHJvdG90eXBlLmtleXMgPT09ICdmdW5jdGlvbicgJiYgaXNOYXRpdmUoU2V0LnBy
b3RvdHlwZS5rZXlzKTsKKwordmFyIHNldEl0ZW07Cit2YXIgZ2V0SXRlbTsKK3ZhciByZW1vdmVJ
dGVtOwordmFyIGdldEl0ZW1JRHM7Cit2YXIgYWRkUm9vdDsKK3ZhciByZW1vdmVSb290OwordmFy
IGdldFJvb3RJRHM7CisKK2lmIChjYW5Vc2VDb2xsZWN0aW9ucykgeworICB2YXIgaXRlbU1hcCA9
IG5ldyBNYXAoKTsKKyAgdmFyIHJvb3RJRFNldCA9IG5ldyBTZXQoKTsKKworICBzZXRJdGVtID0g
ZnVuY3Rpb24gKGlkLCBpdGVtKSB7CisgICAgaXRlbU1hcC5zZXQoaWQsIGl0ZW0pOworICB9Owor
ICBnZXRJdGVtID0gZnVuY3Rpb24gKGlkKSB7CisgICAgcmV0dXJuIGl0ZW1NYXAuZ2V0KGlkKTsK
KyAgfTsKKyAgcmVtb3ZlSXRlbSA9IGZ1bmN0aW9uIChpZCkgeworICAgIGl0ZW1NYXBbJ2RlbGV0
ZSddKGlkKTsKKyAgfTsKKyAgZ2V0SXRlbUlEcyA9IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4g
QXJyYXkuZnJvbShpdGVtTWFwLmtleXMoKSk7CisgIH07CisKKyAgYWRkUm9vdCA9IGZ1bmN0aW9u
IChpZCkgeworICAgIHJvb3RJRFNldC5hZGQoaWQpOworICB9OworICByZW1vdmVSb290ID0gZnVu
Y3Rpb24gKGlkKSB7CisgICAgcm9vdElEU2V0WydkZWxldGUnXShpZCk7CisgIH07CisgIGdldFJv
b3RJRHMgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIEFycmF5LmZyb20ocm9vdElEU2V0Lmtl
eXMoKSk7CisgIH07Cit9IGVsc2UgeworICB2YXIgaXRlbUJ5S2V5ID0ge307CisgIHZhciByb290
QnlLZXkgPSB7fTsKKworICAvLyBVc2Ugbm9uLW51bWVyaWMga2V5cyB0byBwcmV2ZW50IFY4IHBl
cmZvcm1hbmNlIGlzc3VlczoKKyAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0
L3B1bGwvNzIzMgorICB2YXIgZ2V0S2V5RnJvbUlEID0gZnVuY3Rpb24gKGlkKSB7CisgICAgcmV0
dXJuICcuJyArIGlkOworICB9OworICB2YXIgZ2V0SURGcm9tS2V5ID0gZnVuY3Rpb24gKGtleSkg
eworICAgIHJldHVybiBwYXJzZUludChrZXkuc3Vic3RyKDEpLCAxMCk7CisgIH07CisKKyAgc2V0
SXRlbSA9IGZ1bmN0aW9uIChpZCwgaXRlbSkgeworICAgIHZhciBrZXkgPSBnZXRLZXlGcm9tSUQo
aWQpOworICAgIGl0ZW1CeUtleVtrZXldID0gaXRlbTsKKyAgfTsKKyAgZ2V0SXRlbSA9IGZ1bmN0
aW9uIChpZCkgeworICAgIHZhciBrZXkgPSBnZXRLZXlGcm9tSUQoaWQpOworICAgIHJldHVybiBp
dGVtQnlLZXlba2V5XTsKKyAgfTsKKyAgcmVtb3ZlSXRlbSA9IGZ1bmN0aW9uIChpZCkgeworICAg
IHZhciBrZXkgPSBnZXRLZXlGcm9tSUQoaWQpOworICAgIGRlbGV0ZSBpdGVtQnlLZXlba2V5XTsK
KyAgfTsKKyAgZ2V0SXRlbUlEcyA9IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gT2JqZWN0Lmtl
eXMoaXRlbUJ5S2V5KS5tYXAoZ2V0SURGcm9tS2V5KTsKKyAgfTsKKworICBhZGRSb290ID0gZnVu
Y3Rpb24gKGlkKSB7CisgICAgdmFyIGtleSA9IGdldEtleUZyb21JRChpZCk7CisgICAgcm9vdEJ5
S2V5W2tleV0gPSB0cnVlOworICB9OworICByZW1vdmVSb290ID0gZnVuY3Rpb24gKGlkKSB7Cisg
ICAgdmFyIGtleSA9IGdldEtleUZyb21JRChpZCk7CisgICAgZGVsZXRlIHJvb3RCeUtleVtrZXld
OworICB9OworICBnZXRSb290SURzID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiBPYmplY3Qu
a2V5cyhyb290QnlLZXkpLm1hcChnZXRJREZyb21LZXkpOworICB9OworfQorCit2YXIgdW5tb3Vu
dGVkSURzID0gW107CisKK2Z1bmN0aW9uIHB1cmdlRGVlcChpZCkgeworICB2YXIgaXRlbSA9IGdl
dEl0ZW0oaWQpOworICBpZiAoaXRlbSkgeworICAgIHZhciBjaGlsZElEcyA9IGl0ZW0uY2hpbGRJ
RHM7CisKKyAgICByZW1vdmVJdGVtKGlkKTsKKyAgICBjaGlsZElEcy5mb3JFYWNoKHB1cmdlRGVl
cCk7CisgIH0KK30KKworZnVuY3Rpb24gZGVzY3JpYmVDb21wb25lbnRGcmFtZShuYW1lLCBzb3Vy
Y2UsIG93bmVyTmFtZSkgeworICByZXR1cm4gJ1xuICAgIGluICcgKyAobmFtZSB8fCAnVW5rbm93
bicpICsgKHNvdXJjZSA/ICcgKGF0ICcgKyBzb3VyY2UuZmlsZU5hbWUucmVwbGFjZSgvXi4qW1xc
XC9dLywgJycpICsgJzonICsgc291cmNlLmxpbmVOdW1iZXIgKyAnKScgOiBvd25lck5hbWUgPyAn
IChjcmVhdGVkIGJ5ICcgKyBvd25lck5hbWUgKyAnKScgOiAnJyk7Cit9CisKK2Z1bmN0aW9uIGdl
dERpc3BsYXlOYW1lKGVsZW1lbnQpIHsKKyAgaWYgKGVsZW1lbnQgPT0gbnVsbCkgeworICAgIHJl
dHVybiAnI2VtcHR5JzsKKyAgfSBlbHNlIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycg
fHwgdHlwZW9mIGVsZW1lbnQgPT09ICdudW1iZXInKSB7CisgICAgcmV0dXJuICcjdGV4dCc7Cisg
IH0gZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQudHlwZSA9PT0gJ3N0cmluZycpIHsKKyAgICByZXR1
cm4gZWxlbWVudC50eXBlOworICB9IGVsc2UgeworICAgIHJldHVybiBlbGVtZW50LnR5cGUuZGlz
cGxheU5hbWUgfHwgZWxlbWVudC50eXBlLm5hbWUgfHwgJ1Vua25vd24nOworICB9Cit9CisKK2Z1
bmN0aW9uIGRlc2NyaWJlSUQoaWQpIHsKKyAgdmFyIG5hbWUgPSBSZWFjdENvbXBvbmVudFRyZWVI
b29rLmdldERpc3BsYXlOYW1lKGlkKTsKKyAgdmFyIGVsZW1lbnQgPSBSZWFjdENvbXBvbmVudFRy
ZWVIb29rLmdldEVsZW1lbnQoaWQpOworICB2YXIgb3duZXJJRCA9IFJlYWN0Q29tcG9uZW50VHJl
ZUhvb2suZ2V0T3duZXJJRChpZCk7CisgIHZhciBvd25lck5hbWU7CisgIGlmIChvd25lcklEKSB7
CisgICAgb3duZXJOYW1lID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXREaXNwbGF5TmFtZShv
d25lcklEKTsKKyAgfQorICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5n
KGVsZW1lbnQsICdSZWFjdENvbXBvbmVudFRyZWVIb29rOiBNaXNzaW5nIFJlYWN0IGVsZW1lbnQg
Zm9yIGRlYnVnSUQgJXMgd2hlbiAnICsgJ2J1aWxkaW5nIHN0YWNrJywgaWQpIDogdm9pZCAwOwor
ICByZXR1cm4gZGVzY3JpYmVDb21wb25lbnRGcmFtZShuYW1lLCBlbGVtZW50ICYmIGVsZW1lbnQu
X3NvdXJjZSwgb3duZXJOYW1lKTsKK30KKwordmFyIFJlYWN0Q29tcG9uZW50VHJlZUhvb2sgPSB7
CisgIG9uU2V0Q2hpbGRyZW46IGZ1bmN0aW9uIChpZCwgbmV4dENoaWxkSURzKSB7CisgICAgdmFy
IGl0ZW0gPSBnZXRJdGVtKGlkKTsKKyAgICAhaXRlbSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9k
dWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0l0ZW0gbXVzdCBoYXZlIGJlZW4gc2V0JykgOiBf
cHJvZEludmFyaWFudCgnMTQ0JykgOiB2b2lkIDA7CisgICAgaXRlbS5jaGlsZElEcyA9IG5leHRD
aGlsZElEczsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV4dENoaWxkSURzLmxlbmd0aDsg
aSsrKSB7CisgICAgICB2YXIgbmV4dENoaWxkSUQgPSBuZXh0Q2hpbGRJRHNbaV07CisgICAgICB2
YXIgbmV4dENoaWxkID0gZ2V0SXRlbShuZXh0Q2hpbGRJRCk7CisgICAgICAhbmV4dENoaWxkID8g
ImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnRXhwZWN0
ZWQgaG9vayBldmVudHMgdG8gZmlyZSBmb3IgdGhlIGNoaWxkIGJlZm9yZSBpdHMgcGFyZW50IGlu
Y2x1ZGVzIGl0IGluIG9uU2V0Q2hpbGRyZW4oKS4nKSA6IF9wcm9kSW52YXJpYW50KCcxNDAnKSA6
IHZvaWQgMDsKKyAgICAgICEobmV4dENoaWxkLmNoaWxkSURzICE9IG51bGwgfHwgdHlwZW9mIG5l
eHRDaGlsZC5lbGVtZW50ICE9PSAnb2JqZWN0JyB8fCBuZXh0Q2hpbGQuZWxlbWVudCA9PSBudWxs
KSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0V4
cGVjdGVkIG9uU2V0Q2hpbGRyZW4oKSB0byBmaXJlIGZvciBhIGNvbnRhaW5lciBjaGlsZCBiZWZv
cmUgaXRzIHBhcmVudCBpbmNsdWRlcyBpdCBpbiBvblNldENoaWxkcmVuKCkuJykgOiBfcHJvZElu
dmFyaWFudCgnMTQxJykgOiB2b2lkIDA7CisgICAgICAhbmV4dENoaWxkLmlzTW91bnRlZCA/ICJk
ZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0V4cGVjdGVk
IG9uTW91bnRDb21wb25lbnQoKSB0byBmaXJlIGZvciB0aGUgY2hpbGQgYmVmb3JlIGl0cyBwYXJl
bnQgaW5jbHVkZXMgaXQgaW4gb25TZXRDaGlsZHJlbigpLicpIDogX3Byb2RJbnZhcmlhbnQoJzcx
JykgOiB2b2lkIDA7CisgICAgICBpZiAobmV4dENoaWxkLnBhcmVudElEID09IG51bGwpIHsKKyAg
ICAgICAgbmV4dENoaWxkLnBhcmVudElEID0gaWQ7CisgICAgICAgIC8vIFRPRE86IFRoaXMgc2hv
dWxkbid0IGJlIG5lY2Vzc2FyeSBidXQgbW91bnRpbmcgYSBuZXcgcm9vdCBkdXJpbmcgaW4KKyAg
ICAgICAgLy8gY29tcG9uZW50V2lsbE1vdW50IGN1cnJlbnRseSBjYXVzZXMgbm90LXlldC1tb3Vu
dGVkIGNvbXBvbmVudHMgdG8KKyAgICAgICAgLy8gYmUgcHVyZ2VkIGZyb20gb3VyIHRyZWUgZGF0
YSBzbyB0aGVpciBwYXJlbnQgaWQgaXMgbWlzc2luZy4KKyAgICAgIH0KKyAgICAgICEobmV4dENo
aWxkLnBhcmVudElEID09PSBpZCkgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBp
bnZhcmlhbnQoZmFsc2UsICdFeHBlY3RlZCBvbkJlZm9yZU1vdW50Q29tcG9uZW50KCkgcGFyZW50
IGFuZCBvblNldENoaWxkcmVuKCkgdG8gYmUgY29uc2lzdGVudCAoJXMgaGFzIHBhcmVudHMgJXMg
YW5kICVzKS4nLCBuZXh0Q2hpbGRJRCwgbmV4dENoaWxkLnBhcmVudElELCBpZCkgOiBfcHJvZElu
dmFyaWFudCgnMTQyJywgbmV4dENoaWxkSUQsIG5leHRDaGlsZC5wYXJlbnRJRCwgaWQpIDogdm9p
ZCAwOworICAgIH0KKyAgfSwKKyAgb25CZWZvcmVNb3VudENvbXBvbmVudDogZnVuY3Rpb24gKGlk
LCBlbGVtZW50LCBwYXJlbnRJRCkgeworICAgIHZhciBpdGVtID0geworICAgICAgZWxlbWVudDog
ZWxlbWVudCwKKyAgICAgIHBhcmVudElEOiBwYXJlbnRJRCwKKyAgICAgIHRleHQ6IG51bGwsCisg
ICAgICBjaGlsZElEczogW10sCisgICAgICBpc01vdW50ZWQ6IGZhbHNlLAorICAgICAgdXBkYXRl
Q291bnQ6IDAKKyAgICB9OworICAgIHNldEl0ZW0oaWQsIGl0ZW0pOworICB9LAorICBvbkJlZm9y
ZVVwZGF0ZUNvbXBvbmVudDogZnVuY3Rpb24gKGlkLCBlbGVtZW50KSB7CisgICAgdmFyIGl0ZW0g
PSBnZXRJdGVtKGlkKTsKKyAgICBpZiAoIWl0ZW0gfHwgIWl0ZW0uaXNNb3VudGVkKSB7CisgICAg
ICAvLyBXZSBtYXkgZW5kIHVwIGhlcmUgYXMgYSByZXN1bHQgb2Ygc2V0U3RhdGUoKSBpbiBjb21w
b25lbnRXaWxsVW5tb3VudCgpLgorICAgICAgLy8gSW4gdGhpcyBjYXNlLCBpZ25vcmUgdGhlIGVs
ZW1lbnQuCisgICAgICByZXR1cm47CisgICAgfQorICAgIGl0ZW0uZWxlbWVudCA9IGVsZW1lbnQ7
CisgIH0sCisgIG9uTW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uIChpZCkgeworICAgIHZhciBpdGVt
ID0gZ2V0SXRlbShpZCk7CisgICAgIWl0ZW0gPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlv
bicgPyBpbnZhcmlhbnQoZmFsc2UsICdJdGVtIG11c3QgaGF2ZSBiZWVuIHNldCcpIDogX3Byb2RJ
bnZhcmlhbnQoJzE0NCcpIDogdm9pZCAwOworICAgIGl0ZW0uaXNNb3VudGVkID0gdHJ1ZTsKKyAg
ICB2YXIgaXNSb290ID0gaXRlbS5wYXJlbnRJRCA9PT0gMDsKKyAgICBpZiAoaXNSb290KSB7Cisg
ICAgICBhZGRSb290KGlkKTsKKyAgICB9CisgIH0sCisgIG9uVXBkYXRlQ29tcG9uZW50OiBmdW5j
dGlvbiAoaWQpIHsKKyAgICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQpOworICAgIGlmICghaXRlbSB8
fCAhaXRlbS5pc01vdW50ZWQpIHsKKyAgICAgIC8vIFdlIG1heSBlbmQgdXAgaGVyZSBhcyBhIHJl
c3VsdCBvZiBzZXRTdGF0ZSgpIGluIGNvbXBvbmVudFdpbGxVbm1vdW50KCkuCisgICAgICAvLyBJ
biB0aGlzIGNhc2UsIGlnbm9yZSB0aGUgZWxlbWVudC4KKyAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgaXRlbS51cGRhdGVDb3VudCsrOworICB9LAorICBvblVubW91bnRDb21wb25lbnQ6IGZ1bmN0
aW9uIChpZCkgeworICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7CisgICAgaWYgKGl0ZW0pIHsK
KyAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgaXQgZXhpc3RzLgorICAgICAgLy8gYGl0ZW1g
IG1pZ2h0IG5vdCBleGlzdCBpZiBpdCBpcyBpbnNpZGUgYW4gZXJyb3IgYm91bmRhcnksIGFuZCBh
IHNpYmxpbmcKKyAgICAgIC8vIGVycm9yIGJvdW5kYXJ5IGNoaWxkIHRocmV3IHdoaWxlIG1vdW50
aW5nLiBUaGVuIHRoaXMgaW5zdGFuY2UgbmV2ZXIKKyAgICAgIC8vIGdvdCBhIGNoYW5jZSB0byBt
b3VudCwgYnV0IGl0IHN0aWxsIGdldHMgYW4gdW5tb3VudGluZyBldmVudCBkdXJpbmcKKyAgICAg
IC8vIHRoZSBlcnJvciBib3VuZGFyeSBjbGVhbnVwLgorICAgICAgaXRlbS5pc01vdW50ZWQgPSBm
YWxzZTsKKyAgICAgIHZhciBpc1Jvb3QgPSBpdGVtLnBhcmVudElEID09PSAwOworICAgICAgaWYg
KGlzUm9vdCkgeworICAgICAgICByZW1vdmVSb290KGlkKTsKKyAgICAgIH0KKyAgICB9CisgICAg
dW5tb3VudGVkSURzLnB1c2goaWQpOworICB9LAorICBwdXJnZVVubW91bnRlZENvbXBvbmVudHM6
IGZ1bmN0aW9uICgpIHsKKyAgICBpZiAoUmVhY3RDb21wb25lbnRUcmVlSG9vay5fcHJldmVudFB1
cmdpbmcpIHsKKyAgICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHRlc3RpbmcuCisgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bm1vdW50ZWRJRHMu
bGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhciBpZCA9IHVubW91bnRlZElEc1tpXTsKKyAgICAgIHB1
cmdlRGVlcChpZCk7CisgICAgfQorICAgIHVubW91bnRlZElEcy5sZW5ndGggPSAwOworICB9LAor
ICBpc01vdW50ZWQ6IGZ1bmN0aW9uIChpZCkgeworICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7
CisgICAgcmV0dXJuIGl0ZW0gPyBpdGVtLmlzTW91bnRlZCA6IGZhbHNlOworICB9LAorICBnZXRD
dXJyZW50U3RhY2tBZGRlbmR1bTogZnVuY3Rpb24gKHRvcEVsZW1lbnQpIHsKKyAgICB2YXIgaW5m
byA9ICcnOworICAgIGlmICh0b3BFbGVtZW50KSB7CisgICAgICB2YXIgbmFtZSA9IGdldERpc3Bs
YXlOYW1lKHRvcEVsZW1lbnQpOworICAgICAgdmFyIG93bmVyID0gdG9wRWxlbWVudC5fb3duZXI7
CisgICAgICBpbmZvICs9IGRlc2NyaWJlQ29tcG9uZW50RnJhbWUobmFtZSwgdG9wRWxlbWVudC5f
c291cmNlLCBvd25lciAmJiBvd25lci5nZXROYW1lKCkpOworICAgIH0KKworICAgIHZhciBjdXJy
ZW50T3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50OworICAgIHZhciBpZCA9IGN1cnJl
bnRPd25lciAmJiBjdXJyZW50T3duZXIuX2RlYnVnSUQ7CisKKyAgICBpbmZvICs9IFJlYWN0Q29t
cG9uZW50VHJlZUhvb2suZ2V0U3RhY2tBZGRlbmR1bUJ5SUQoaWQpOworICAgIHJldHVybiBpbmZv
OworICB9LAorICBnZXRTdGFja0FkZGVuZHVtQnlJRDogZnVuY3Rpb24gKGlkKSB7CisgICAgdmFy
IGluZm8gPSAnJzsKKyAgICB3aGlsZSAoaWQpIHsKKyAgICAgIGluZm8gKz0gZGVzY3JpYmVJRChp
ZCk7CisgICAgICBpZCA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0UGFyZW50SUQoaWQpOwor
ICAgIH0KKyAgICByZXR1cm4gaW5mbzsKKyAgfSwKKyAgZ2V0Q2hpbGRJRHM6IGZ1bmN0aW9uIChp
ZCkgeworICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7CisgICAgcmV0dXJuIGl0ZW0gPyBpdGVt
LmNoaWxkSURzIDogW107CisgIH0sCisgIGdldERpc3BsYXlOYW1lOiBmdW5jdGlvbiAoaWQpIHsK
KyAgICB2YXIgZWxlbWVudCA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0RWxlbWVudChpZCk7
CisgICAgaWYgKCFlbGVtZW50KSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgcmV0
dXJuIGdldERpc3BsYXlOYW1lKGVsZW1lbnQpOworICB9LAorICBnZXRFbGVtZW50OiBmdW5jdGlv
biAoaWQpIHsKKyAgICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQpOworICAgIHJldHVybiBpdGVtID8g
aXRlbS5lbGVtZW50IDogbnVsbDsKKyAgfSwKKyAgZ2V0T3duZXJJRDogZnVuY3Rpb24gKGlkKSB7
CisgICAgdmFyIGVsZW1lbnQgPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldEVsZW1lbnQoaWQp
OworICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC5fb3duZXIpIHsKKyAgICAgIHJldHVybiBu
dWxsOworICAgIH0KKyAgICByZXR1cm4gZWxlbWVudC5fb3duZXIuX2RlYnVnSUQ7CisgIH0sCisg
IGdldFBhcmVudElEOiBmdW5jdGlvbiAoaWQpIHsKKyAgICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQp
OworICAgIHJldHVybiBpdGVtID8gaXRlbS5wYXJlbnRJRCA6IG51bGw7CisgIH0sCisgIGdldFNv
dXJjZTogZnVuY3Rpb24gKGlkKSB7CisgICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTsKKyAgICB2
YXIgZWxlbWVudCA9IGl0ZW0gPyBpdGVtLmVsZW1lbnQgOiBudWxsOworICAgIHZhciBzb3VyY2Ug
PSBlbGVtZW50ICE9IG51bGwgPyBlbGVtZW50Ll9zb3VyY2UgOiBudWxsOworICAgIHJldHVybiBz
b3VyY2U7CisgIH0sCisgIGdldFRleHQ6IGZ1bmN0aW9uIChpZCkgeworICAgIHZhciBlbGVtZW50
ID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRFbGVtZW50KGlkKTsKKyAgICBpZiAodHlwZW9m
IGVsZW1lbnQgPT09ICdzdHJpbmcnKSB7CisgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICB9IGVs
c2UgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnbnVtYmVyJykgeworICAgICAgcmV0dXJuICcnICsg
ZWxlbWVudDsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICB9LAor
ICBnZXRVcGRhdGVDb3VudDogZnVuY3Rpb24gKGlkKSB7CisgICAgdmFyIGl0ZW0gPSBnZXRJdGVt
KGlkKTsKKyAgICByZXR1cm4gaXRlbSA/IGl0ZW0udXBkYXRlQ291bnQgOiAwOworICB9LAorCisK
KyAgZ2V0Um9vdElEczogZ2V0Um9vdElEcywKKyAgZ2V0UmVnaXN0ZXJlZElEczogZ2V0SXRlbUlE
cworfTsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdENvbXBvbmVudFRyZWVIb29rOworfSx7IjI1
IjoyNSwiMjkiOjI5LCIzMCI6MzAsIjgiOjh9XSw4OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxl
eHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4K
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNl
bnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0
aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRF
TlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqIAorICovCisKKyd1c2Ugc3Ry
aWN0JzsKKworLyoqCisgKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBvd25lci4KKyAqCisg
KiBUaGUgY3VycmVudCBvd25lciBpcyB0aGUgY29tcG9uZW50IHdobyBzaG91bGQgb3duIGFueSBj
b21wb25lbnRzIHRoYXQgYXJlCisgKiBjdXJyZW50bHkgYmVpbmcgY29uc3RydWN0ZWQuCisgKi8K
K3ZhciBSZWFjdEN1cnJlbnRPd25lciA9IHsKKworICAvKioKKyAgICogQGludGVybmFsCisgICAq
IEB0eXBlIHtSZWFjdENvbXBvbmVudH0KKyAgICovCisgIGN1cnJlbnQ6IG51bGwKKworfTsKKwor
bW9kdWxlLmV4cG9ydHMgPSBSZWFjdEN1cnJlbnRPd25lcjsKK30se31dLDk6W2Z1bmN0aW9uKF9k
ZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBG
YWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJj
ZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0
aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2Ug
dHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91
bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisK
Kyd1c2Ugc3RyaWN0JzsKKwordmFyIFJlYWN0RWxlbWVudCA9IF9kZXJlcV8oMTApOworCisvKioK
KyAqIENyZWF0ZSBhIGZhY3RvcnkgdGhhdCBjcmVhdGVzIEhUTUwgdGFnIGVsZW1lbnRzLgorICoK
KyAqIEBwcml2YXRlCisgKi8KK3ZhciBjcmVhdGVET01GYWN0b3J5ID0gUmVhY3RFbGVtZW50LmNy
ZWF0ZUZhY3Rvcnk7CitpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgIHZh
ciBSZWFjdEVsZW1lbnRWYWxpZGF0b3IgPSBfZGVyZXFfKDEyKTsKKyAgY3JlYXRlRE9NRmFjdG9y
eSA9IFJlYWN0RWxlbWVudFZhbGlkYXRvci5jcmVhdGVGYWN0b3J5OworfQorCisvKioKKyAqIENy
ZWF0ZXMgYSBtYXBwaW5nIGZyb20gc3VwcG9ydGVkIEhUTUwgdGFncyB0byBgUmVhY3RET01Db21w
b25lbnRgIGNsYXNzZXMuCisgKiBUaGlzIGlzIGFsc28gYWNjZXNzaWJsZSB2aWEgYFJlYWN0LkRP
TWAuCisgKgorICogQHB1YmxpYworICovCit2YXIgUmVhY3RET01GYWN0b3JpZXMgPSB7CisgIGE6
IGNyZWF0ZURPTUZhY3RvcnkoJ2EnKSwKKyAgYWJicjogY3JlYXRlRE9NRmFjdG9yeSgnYWJicicp
LAorICBhZGRyZXNzOiBjcmVhdGVET01GYWN0b3J5KCdhZGRyZXNzJyksCisgIGFyZWE6IGNyZWF0
ZURPTUZhY3RvcnkoJ2FyZWEnKSwKKyAgYXJ0aWNsZTogY3JlYXRlRE9NRmFjdG9yeSgnYXJ0aWNs
ZScpLAorICBhc2lkZTogY3JlYXRlRE9NRmFjdG9yeSgnYXNpZGUnKSwKKyAgYXVkaW86IGNyZWF0
ZURPTUZhY3RvcnkoJ2F1ZGlvJyksCisgIGI6IGNyZWF0ZURPTUZhY3RvcnkoJ2InKSwKKyAgYmFz
ZTogY3JlYXRlRE9NRmFjdG9yeSgnYmFzZScpLAorICBiZGk6IGNyZWF0ZURPTUZhY3RvcnkoJ2Jk
aScpLAorICBiZG86IGNyZWF0ZURPTUZhY3RvcnkoJ2JkbycpLAorICBiaWc6IGNyZWF0ZURPTUZh
Y3RvcnkoJ2JpZycpLAorICBibG9ja3F1b3RlOiBjcmVhdGVET01GYWN0b3J5KCdibG9ja3F1b3Rl
JyksCisgIGJvZHk6IGNyZWF0ZURPTUZhY3RvcnkoJ2JvZHknKSwKKyAgYnI6IGNyZWF0ZURPTUZh
Y3RvcnkoJ2JyJyksCisgIGJ1dHRvbjogY3JlYXRlRE9NRmFjdG9yeSgnYnV0dG9uJyksCisgIGNh
bnZhczogY3JlYXRlRE9NRmFjdG9yeSgnY2FudmFzJyksCisgIGNhcHRpb246IGNyZWF0ZURPTUZh
Y3RvcnkoJ2NhcHRpb24nKSwKKyAgY2l0ZTogY3JlYXRlRE9NRmFjdG9yeSgnY2l0ZScpLAorICBj
b2RlOiBjcmVhdGVET01GYWN0b3J5KCdjb2RlJyksCisgIGNvbDogY3JlYXRlRE9NRmFjdG9yeSgn
Y29sJyksCisgIGNvbGdyb3VwOiBjcmVhdGVET01GYWN0b3J5KCdjb2xncm91cCcpLAorICBkYXRh
OiBjcmVhdGVET01GYWN0b3J5KCdkYXRhJyksCisgIGRhdGFsaXN0OiBjcmVhdGVET01GYWN0b3J5
KCdkYXRhbGlzdCcpLAorICBkZDogY3JlYXRlRE9NRmFjdG9yeSgnZGQnKSwKKyAgZGVsOiBjcmVh
dGVET01GYWN0b3J5KCdkZWwnKSwKKyAgZGV0YWlsczogY3JlYXRlRE9NRmFjdG9yeSgnZGV0YWls
cycpLAorICBkZm46IGNyZWF0ZURPTUZhY3RvcnkoJ2RmbicpLAorICBkaWFsb2c6IGNyZWF0ZURP
TUZhY3RvcnkoJ2RpYWxvZycpLAorICBkaXY6IGNyZWF0ZURPTUZhY3RvcnkoJ2RpdicpLAorICBk
bDogY3JlYXRlRE9NRmFjdG9yeSgnZGwnKSwKKyAgZHQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2R0Jyks
CisgIGVtOiBjcmVhdGVET01GYWN0b3J5KCdlbScpLAorICBlbWJlZDogY3JlYXRlRE9NRmFjdG9y
eSgnZW1iZWQnKSwKKyAgZmllbGRzZXQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2ZpZWxkc2V0JyksCisg
IGZpZ2NhcHRpb246IGNyZWF0ZURPTUZhY3RvcnkoJ2ZpZ2NhcHRpb24nKSwKKyAgZmlndXJlOiBj
cmVhdGVET01GYWN0b3J5KCdmaWd1cmUnKSwKKyAgZm9vdGVyOiBjcmVhdGVET01GYWN0b3J5KCdm
b290ZXInKSwKKyAgZm9ybTogY3JlYXRlRE9NRmFjdG9yeSgnZm9ybScpLAorICBoMTogY3JlYXRl
RE9NRmFjdG9yeSgnaDEnKSwKKyAgaDI6IGNyZWF0ZURPTUZhY3RvcnkoJ2gyJyksCisgIGgzOiBj
cmVhdGVET01GYWN0b3J5KCdoMycpLAorICBoNDogY3JlYXRlRE9NRmFjdG9yeSgnaDQnKSwKKyAg
aDU6IGNyZWF0ZURPTUZhY3RvcnkoJ2g1JyksCisgIGg2OiBjcmVhdGVET01GYWN0b3J5KCdoNicp
LAorICBoZWFkOiBjcmVhdGVET01GYWN0b3J5KCdoZWFkJyksCisgIGhlYWRlcjogY3JlYXRlRE9N
RmFjdG9yeSgnaGVhZGVyJyksCisgIGhncm91cDogY3JlYXRlRE9NRmFjdG9yeSgnaGdyb3VwJyks
CisgIGhyOiBjcmVhdGVET01GYWN0b3J5KCdocicpLAorICBodG1sOiBjcmVhdGVET01GYWN0b3J5
KCdodG1sJyksCisgIGk6IGNyZWF0ZURPTUZhY3RvcnkoJ2knKSwKKyAgaWZyYW1lOiBjcmVhdGVE
T01GYWN0b3J5KCdpZnJhbWUnKSwKKyAgaW1nOiBjcmVhdGVET01GYWN0b3J5KCdpbWcnKSwKKyAg
aW5wdXQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2lucHV0JyksCisgIGluczogY3JlYXRlRE9NRmFjdG9y
eSgnaW5zJyksCisgIGtiZDogY3JlYXRlRE9NRmFjdG9yeSgna2JkJyksCisgIGtleWdlbjogY3Jl
YXRlRE9NRmFjdG9yeSgna2V5Z2VuJyksCisgIGxhYmVsOiBjcmVhdGVET01GYWN0b3J5KCdsYWJl
bCcpLAorICBsZWdlbmQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2xlZ2VuZCcpLAorICBsaTogY3JlYXRl
RE9NRmFjdG9yeSgnbGknKSwKKyAgbGluazogY3JlYXRlRE9NRmFjdG9yeSgnbGluaycpLAorICBt
YWluOiBjcmVhdGVET01GYWN0b3J5KCdtYWluJyksCisgIG1hcDogY3JlYXRlRE9NRmFjdG9yeSgn
bWFwJyksCisgIG1hcms6IGNyZWF0ZURPTUZhY3RvcnkoJ21hcmsnKSwKKyAgbWVudTogY3JlYXRl
RE9NRmFjdG9yeSgnbWVudScpLAorICBtZW51aXRlbTogY3JlYXRlRE9NRmFjdG9yeSgnbWVudWl0
ZW0nKSwKKyAgbWV0YTogY3JlYXRlRE9NRmFjdG9yeSgnbWV0YScpLAorICBtZXRlcjogY3JlYXRl
RE9NRmFjdG9yeSgnbWV0ZXInKSwKKyAgbmF2OiBjcmVhdGVET01GYWN0b3J5KCduYXYnKSwKKyAg
bm9zY3JpcHQ6IGNyZWF0ZURPTUZhY3RvcnkoJ25vc2NyaXB0JyksCisgIG9iamVjdDogY3JlYXRl
RE9NRmFjdG9yeSgnb2JqZWN0JyksCisgIG9sOiBjcmVhdGVET01GYWN0b3J5KCdvbCcpLAorICBv
cHRncm91cDogY3JlYXRlRE9NRmFjdG9yeSgnb3B0Z3JvdXAnKSwKKyAgb3B0aW9uOiBjcmVhdGVE
T01GYWN0b3J5KCdvcHRpb24nKSwKKyAgb3V0cHV0OiBjcmVhdGVET01GYWN0b3J5KCdvdXRwdXQn
KSwKKyAgcDogY3JlYXRlRE9NRmFjdG9yeSgncCcpLAorICBwYXJhbTogY3JlYXRlRE9NRmFjdG9y
eSgncGFyYW0nKSwKKyAgcGljdHVyZTogY3JlYXRlRE9NRmFjdG9yeSgncGljdHVyZScpLAorICBw
cmU6IGNyZWF0ZURPTUZhY3RvcnkoJ3ByZScpLAorICBwcm9ncmVzczogY3JlYXRlRE9NRmFjdG9y
eSgncHJvZ3Jlc3MnKSwKKyAgcTogY3JlYXRlRE9NRmFjdG9yeSgncScpLAorICBycDogY3JlYXRl
RE9NRmFjdG9yeSgncnAnKSwKKyAgcnQ6IGNyZWF0ZURPTUZhY3RvcnkoJ3J0JyksCisgIHJ1Ynk6
IGNyZWF0ZURPTUZhY3RvcnkoJ3J1YnknKSwKKyAgczogY3JlYXRlRE9NRmFjdG9yeSgncycpLAor
ICBzYW1wOiBjcmVhdGVET01GYWN0b3J5KCdzYW1wJyksCisgIHNjcmlwdDogY3JlYXRlRE9NRmFj
dG9yeSgnc2NyaXB0JyksCisgIHNlY3Rpb246IGNyZWF0ZURPTUZhY3RvcnkoJ3NlY3Rpb24nKSwK
KyAgc2VsZWN0OiBjcmVhdGVET01GYWN0b3J5KCdzZWxlY3QnKSwKKyAgc21hbGw6IGNyZWF0ZURP
TUZhY3RvcnkoJ3NtYWxsJyksCisgIHNvdXJjZTogY3JlYXRlRE9NRmFjdG9yeSgnc291cmNlJyks
CisgIHNwYW46IGNyZWF0ZURPTUZhY3RvcnkoJ3NwYW4nKSwKKyAgc3Ryb25nOiBjcmVhdGVET01G
YWN0b3J5KCdzdHJvbmcnKSwKKyAgc3R5bGU6IGNyZWF0ZURPTUZhY3RvcnkoJ3N0eWxlJyksCisg
IHN1YjogY3JlYXRlRE9NRmFjdG9yeSgnc3ViJyksCisgIHN1bW1hcnk6IGNyZWF0ZURPTUZhY3Rv
cnkoJ3N1bW1hcnknKSwKKyAgc3VwOiBjcmVhdGVET01GYWN0b3J5KCdzdXAnKSwKKyAgdGFibGU6
IGNyZWF0ZURPTUZhY3RvcnkoJ3RhYmxlJyksCisgIHRib2R5OiBjcmVhdGVET01GYWN0b3J5KCd0
Ym9keScpLAorICB0ZDogY3JlYXRlRE9NRmFjdG9yeSgndGQnKSwKKyAgdGV4dGFyZWE6IGNyZWF0
ZURPTUZhY3RvcnkoJ3RleHRhcmVhJyksCisgIHRmb290OiBjcmVhdGVET01GYWN0b3J5KCd0Zm9v
dCcpLAorICB0aDogY3JlYXRlRE9NRmFjdG9yeSgndGgnKSwKKyAgdGhlYWQ6IGNyZWF0ZURPTUZh
Y3RvcnkoJ3RoZWFkJyksCisgIHRpbWU6IGNyZWF0ZURPTUZhY3RvcnkoJ3RpbWUnKSwKKyAgdGl0
bGU6IGNyZWF0ZURPTUZhY3RvcnkoJ3RpdGxlJyksCisgIHRyOiBjcmVhdGVET01GYWN0b3J5KCd0
cicpLAorICB0cmFjazogY3JlYXRlRE9NRmFjdG9yeSgndHJhY2snKSwKKyAgdTogY3JlYXRlRE9N
RmFjdG9yeSgndScpLAorICB1bDogY3JlYXRlRE9NRmFjdG9yeSgndWwnKSwKKyAgJ3Zhcic6IGNy
ZWF0ZURPTUZhY3RvcnkoJ3ZhcicpLAorICB2aWRlbzogY3JlYXRlRE9NRmFjdG9yeSgndmlkZW8n
KSwKKyAgd2JyOiBjcmVhdGVET01GYWN0b3J5KCd3YnInKSwKKworICAvLyBTVkcKKyAgY2lyY2xl
OiBjcmVhdGVET01GYWN0b3J5KCdjaXJjbGUnKSwKKyAgY2xpcFBhdGg6IGNyZWF0ZURPTUZhY3Rv
cnkoJ2NsaXBQYXRoJyksCisgIGRlZnM6IGNyZWF0ZURPTUZhY3RvcnkoJ2RlZnMnKSwKKyAgZWxs
aXBzZTogY3JlYXRlRE9NRmFjdG9yeSgnZWxsaXBzZScpLAorICBnOiBjcmVhdGVET01GYWN0b3J5
KCdnJyksCisgIGltYWdlOiBjcmVhdGVET01GYWN0b3J5KCdpbWFnZScpLAorICBsaW5lOiBjcmVh
dGVET01GYWN0b3J5KCdsaW5lJyksCisgIGxpbmVhckdyYWRpZW50OiBjcmVhdGVET01GYWN0b3J5
KCdsaW5lYXJHcmFkaWVudCcpLAorICBtYXNrOiBjcmVhdGVET01GYWN0b3J5KCdtYXNrJyksCisg
IHBhdGg6IGNyZWF0ZURPTUZhY3RvcnkoJ3BhdGgnKSwKKyAgcGF0dGVybjogY3JlYXRlRE9NRmFj
dG9yeSgncGF0dGVybicpLAorICBwb2x5Z29uOiBjcmVhdGVET01GYWN0b3J5KCdwb2x5Z29uJyks
CisgIHBvbHlsaW5lOiBjcmVhdGVET01GYWN0b3J5KCdwb2x5bGluZScpLAorICByYWRpYWxHcmFk
aWVudDogY3JlYXRlRE9NRmFjdG9yeSgncmFkaWFsR3JhZGllbnQnKSwKKyAgcmVjdDogY3JlYXRl
RE9NRmFjdG9yeSgncmVjdCcpLAorICBzdG9wOiBjcmVhdGVET01GYWN0b3J5KCdzdG9wJyksCisg
IHN2ZzogY3JlYXRlRE9NRmFjdG9yeSgnc3ZnJyksCisgIHRleHQ6IGNyZWF0ZURPTUZhY3Rvcnko
J3RleHQnKSwKKyAgdHNwYW46IGNyZWF0ZURPTUZhY3RvcnkoJ3RzcGFuJykKK307CisKK21vZHVs
ZS5leHBvcnRzID0gUmVhY3RET01GYWN0b3JpZXM7Cit9LHsiMTAiOjEwLCIxMiI6MTJ9XSwxMDpb
ZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDE0
LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNl
IGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0
aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRz
IGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4K
KyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgX2Fzc2lnbiA9IF9kZXJlcV8oMzEpOwor
Cit2YXIgUmVhY3RDdXJyZW50T3duZXIgPSBfZGVyZXFfKDgpOworCit2YXIgd2FybmluZyA9IF9k
ZXJlcV8oMzApOwordmFyIGNhbkRlZmluZVByb3BlcnR5ID0gX2RlcmVxXygyMCk7Cit2YXIgaGFz
T3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5OworCit2YXIgUkVB
Q1RfRUxFTUVOVF9UWVBFID0gX2RlcmVxXygxMSk7CisKK3ZhciBSRVNFUlZFRF9QUk9QUyA9IHsK
KyAga2V5OiB0cnVlLAorICByZWY6IHRydWUsCisgIF9fc2VsZjogdHJ1ZSwKKyAgX19zb3VyY2U6
IHRydWUKK307CisKK3ZhciBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biwgc3BlY2lhbFByb3BS
ZWZXYXJuaW5nU2hvd247CisKK2Z1bmN0aW9uIGhhc1ZhbGlkUmVmKGNvbmZpZykgeworICBpZiAo
ImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgaWYgKGhhc093blByb3BlcnR5
LmNhbGwoY29uZmlnLCAncmVmJykpIHsKKyAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ3JlZicpLmdldDsKKyAgICAgIGlmIChnZXR0ZXIg
JiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
IH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIGNvbmZpZy5yZWYgIT09IHVuZGVmaW5lZDsKK30KKwor
ZnVuY3Rpb24gaGFzVmFsaWRLZXkoY29uZmlnKSB7CisgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAn
cHJvZHVjdGlvbicpIHsKKyAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsICdrZXkn
KSkgeworICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Y29uZmlnLCAna2V5JykuZ2V0OworICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdh
cm5pbmcpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgIH0KKyAgfQorICBy
ZXR1cm4gY29uZmlnLmtleSAhPT0gdW5kZWZpbmVkOworfQorCitmdW5jdGlvbiBkZWZpbmVLZXlQ
cm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHsKKyAgdmFyIHdhcm5BYm91dEFj
Y2Vzc2luZ0tleSA9IGZ1bmN0aW9uICgpIHsKKyAgICBpZiAoIXNwZWNpYWxQcm9wS2V5V2Fybmlu
Z1Nob3duKSB7CisgICAgICBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biA9IHRydWU7CisgICAg
ICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnJXM6IGBr
ZXlgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgJyArICdp
biBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBz
YW1lICcgKyAndmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBzaG91bGQgcGFz
cyBpdCBhcyBhIGRpZmZlcmVudCAnICsgJ3Byb3AuIChodHRwczovL2ZiLm1lL3JlYWN0LXNwZWNp
YWwtcHJvcHMpJywgZGlzcGxheU5hbWUpIDogdm9pZCAwOworICAgIH0KKyAgfTsKKyAgd2FybkFi
b3V0QWNjZXNzaW5nS2V5LmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTsKKyAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KHByb3BzLCAna2V5JywgeworICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LAor
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICB9KTsKK30KKworZnVuY3Rpb24gZGVmaW5lUmVmUHJv
cFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7CisgIHZhciB3YXJuQWJvdXRBY2Nl
c3NpbmdSZWYgPSBmdW5jdGlvbiAoKSB7CisgICAgaWYgKCFzcGVjaWFsUHJvcFJlZldhcm5pbmdT
aG93bikgeworICAgICAgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24gPSB0cnVlOworICAgICAg
ImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJyVzOiBgcmVm
YCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4g
YHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2Ft
ZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3Mg
aXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9mYi5tZS9yZWFjdC1zcGVjaWFs
LXByb3BzKScsIGRpc3BsYXlOYW1lKSA6IHZvaWQgMDsKKyAgICB9CisgIH07CisgIHdhcm5BYm91
dEFjY2Vzc2luZ1JlZi5pc1JlYWN0V2FybmluZyA9IHRydWU7CisgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShwcm9wcywgJ3JlZicsIHsKKyAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ1JlZiwKKyAg
ICBjb25maWd1cmFibGU6IHRydWUKKyAgfSk7Cit9CisKKy8qKgorICogRmFjdG9yeSBtZXRob2Qg
dG8gY3JlYXRlIGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8gbG9uZ2VyIGFkaGVyZXMgdG8K
KyAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5ldyB0byBjYWxsIGl0LiBBbHNv
LCBubyBpbnN0YW5jZW9mIGNoZWNrCisgKiB3aWxsIHdvcmsuIEluc3RlYWQgdGVzdCAkJHR5cGVv
ZiBmaWVsZCBhZ2FpbnN0IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSB0byBjaGVjaworICog
aWYgc29tZXRoaW5nIGlzIGEgUmVhY3QgRWxlbWVudC4KKyAqCisgKiBAcGFyYW0geyp9IHR5cGUK
KyAqIEBwYXJhbSB7Kn0ga2V5CisgKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IHJlZgorICogQHBh
cmFtIHsqfSBzZWxmIEEgKnRlbXBvcmFyeSogaGVscGVyIHRvIGRldGVjdCBwbGFjZXMgd2hlcmUg
YHRoaXNgIGlzCisgKiBkaWZmZXJlbnQgZnJvbSB0aGUgYG93bmVyYCB3aGVuIFJlYWN0LmNyZWF0
ZUVsZW1lbnQgaXMgY2FsbGVkLCBzbyB0aGF0IHdlCisgKiBjYW4gd2Fybi4gV2Ugd2FudCB0byBn
ZXQgcmlkIG9mIG93bmVyIGFuZCByZXBsYWNlIHN0cmluZyBgcmVmYHMgd2l0aCBhcnJvdworICog
ZnVuY3Rpb25zLCBhbmQgYXMgbG9uZyBhcyBgdGhpc2AgYW5kIG93bmVyIGFyZSB0aGUgc2FtZSwg
dGhlcmUgd2lsbCBiZSBubworICogY2hhbmdlIGluIGJlaGF2aW9yLgorICogQHBhcmFtIHsqfSBz
b3VyY2UgQW4gYW5ub3RhdGlvbiBvYmplY3QgKGFkZGVkIGJ5IGEgdHJhbnNwaWxlciBvciBvdGhl
cndpc2UpCisgKiBpbmRpY2F0aW5nIGZpbGVuYW1lLCBsaW5lIG51bWJlciwgYW5kL29yIG90aGVy
IGluZm9ybWF0aW9uLgorICogQHBhcmFtIHsqfSBvd25lcgorICogQHBhcmFtIHsqfSBwcm9wcwor
ICogQGludGVybmFsCisgKi8KK3ZhciBSZWFjdEVsZW1lbnQgPSBmdW5jdGlvbiAodHlwZSwga2V5
LCByZWYsIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKSB7CisgIHZhciBlbGVtZW50ID0gewor
ICAgIC8vIFRoaXMgdGFnIGFsbG93IHVzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgYXMgYSBS
ZWFjdCBFbGVtZW50CisgICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSwKKworICAgIC8v
IEJ1aWx0LWluIHByb3BlcnRpZXMgdGhhdCBiZWxvbmcgb24gdGhlIGVsZW1lbnQKKyAgICB0eXBl
OiB0eXBlLAorICAgIGtleToga2V5LAorICAgIHJlZjogcmVmLAorICAgIHByb3BzOiBwcm9wcywK
KworICAgIC8vIFJlY29yZCB0aGUgY29tcG9uZW50IHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0
aGlzIGVsZW1lbnQuCisgICAgX293bmVyOiBvd25lcgorICB9OworCisgIGlmICgiZGV2ZWxvcG1l
bnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAvLyBUaGUgdmFsaWRhdGlvbiBmbGFnIGlzIGN1
cnJlbnRseSBtdXRhdGl2ZS4gV2UgcHV0IGl0IG9uCisgICAgLy8gYW4gZXh0ZXJuYWwgYmFja2lu
ZyBzdG9yZSBzbyB0aGF0IHdlIGNhbiBmcmVlemUgdGhlIHdob2xlIG9iamVjdC4KKyAgICAvLyBU
aGlzIGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgV2Vha01hcCBvbmNlIHRoZXkgYXJlIGltcGxlbWVu
dGVkIGluCisgICAgLy8gY29tbW9ubHkgdXNlZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMuCisg
ICAgZWxlbWVudC5fc3RvcmUgPSB7fTsKKworICAgIC8vIFRvIG1ha2UgY29tcGFyaW5nIFJlYWN0
RWxlbWVudHMgZWFzaWVyIGZvciB0ZXN0aW5nIHB1cnBvc2VzLCB3ZSBtYWtlCisgICAgLy8gdGhl
IHZhbGlkYXRpb24gZmxhZyBub24tZW51bWVyYWJsZSAod2hlcmUgcG9zc2libGUsIHdoaWNoIHNo
b3VsZAorICAgIC8vIGluY2x1ZGUgZXZlcnkgZW52aXJvbm1lbnQgd2UgcnVuIHRlc3RzIGluKSwg
c28gdGhlIHRlc3QgZnJhbWV3b3JrCisgICAgLy8gaWdub3JlcyBpdC4KKyAgICBpZiAoY2FuRGVm
aW5lUHJvcGVydHkpIHsKKyAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50Ll9zdG9y
ZSwgJ3ZhbGlkYXRlZCcsIHsKKyAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSwKKyAgICAgICAg
ZW51bWVyYWJsZTogZmFsc2UsCisgICAgICAgIHdyaXRhYmxlOiB0cnVlLAorICAgICAgICB2YWx1
ZTogZmFsc2UKKyAgICAgIH0pOworICAgICAgLy8gc2VsZiBhbmQgc291cmNlIGFyZSBERVYgb25s
eSBwcm9wZXJ0aWVzLgorICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc2Vs
ZicsIHsKKyAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSwKKyAgICAgICAgZW51bWVyYWJsZTog
ZmFsc2UsCisgICAgICAgIHdyaXRhYmxlOiBmYWxzZSwKKyAgICAgICAgdmFsdWU6IHNlbGYKKyAg
ICAgIH0pOworICAgICAgLy8gVHdvIGVsZW1lbnRzIGNyZWF0ZWQgaW4gdHdvIGRpZmZlcmVudCBw
bGFjZXMgc2hvdWxkIGJlIGNvbnNpZGVyZWQKKyAgICAgIC8vIGVxdWFsIGZvciB0ZXN0aW5nIHB1
cnBvc2VzIGFuZCB0aGVyZWZvcmUgd2UgaGlkZSBpdCBmcm9tIGVudW1lcmF0aW9uLgorICAgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc291cmNlJywgeworICAgICAgICBjb25m
aWd1cmFibGU6IGZhbHNlLAorICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgICAgICAgd3Jp
dGFibGU6IGZhbHNlLAorICAgICAgICB2YWx1ZTogc291cmNlCisgICAgICB9KTsKKyAgICB9IGVs
c2UgeworICAgICAgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gZmFsc2U7CisgICAgICBlbGVt
ZW50Ll9zZWxmID0gc2VsZjsKKyAgICAgIGVsZW1lbnQuX3NvdXJjZSA9IHNvdXJjZTsKKyAgICB9
CisgICAgaWYgKE9iamVjdC5mcmVlemUpIHsKKyAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudC5w
cm9wcyk7CisgICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQpOworICAgIH0KKyAgfQorCisgIHJl
dHVybiBlbGVtZW50OworfTsKKworLyoqCisgKiBDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBSZWFj
dEVsZW1lbnQgb2YgdGhlIGdpdmVuIHR5cGUuCisgKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRo
dWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3QuY3JlYXRlZWxlbWVudAor
ICovCitSZWFjdEVsZW1lbnQuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlLCBjb25maWcs
IGNoaWxkcmVuKSB7CisgIHZhciBwcm9wTmFtZTsKKworICAvLyBSZXNlcnZlZCBuYW1lcyBhcmUg
ZXh0cmFjdGVkCisgIHZhciBwcm9wcyA9IHt9OworCisgIHZhciBrZXkgPSBudWxsOworICB2YXIg
cmVmID0gbnVsbDsKKyAgdmFyIHNlbGYgPSBudWxsOworICB2YXIgc291cmNlID0gbnVsbDsKKwor
ICBpZiAoY29uZmlnICE9IG51bGwpIHsKKyAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkgewor
ICAgICAgcmVmID0gY29uZmlnLnJlZjsKKyAgICB9CisgICAgaWYgKGhhc1ZhbGlkS2V5KGNvbmZp
ZykpIHsKKyAgICAgIGtleSA9ICcnICsgY29uZmlnLmtleTsKKyAgICB9CisKKyAgICBzZWxmID0g
Y29uZmlnLl9fc2VsZiA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNvbmZpZy5fX3NlbGY7CisgICAg
c291cmNlID0gY29uZmlnLl9fc291cmNlID09PSB1bmRlZmluZWQgPyBudWxsIDogY29uZmlnLl9f
c291cmNlOworICAgIC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCB0byBhIG5ldyBw
cm9wcyBvYmplY3QKKyAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZykgeworICAgICAgaWYgKGhh
c093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgJiYgIVJFU0VSVkVEX1BST1BTLmhh
c093blByb3BlcnR5KHByb3BOYW1lKSkgeworICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25m
aWdbcHJvcE5hbWVdOworICAgICAgfQorICAgIH0KKyAgfQorCisgIC8vIENoaWxkcmVuIGNhbiBi
ZSBtb3JlIHRoYW4gb25lIGFyZ3VtZW50LCBhbmQgdGhvc2UgYXJlIHRyYW5zZmVycmVkIG9udG8K
KyAgLy8gdGhlIG5ld2x5IGFsbG9jYXRlZCBwcm9wcyBvYmplY3QuCisgIHZhciBjaGlsZHJlbkxl
bmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyOworICBpZiAoY2hpbGRyZW5MZW5ndGggPT09IDEp
IHsKKyAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuOworICB9IGVsc2UgaWYgKGNoaWxkcmVu
TGVuZ3RoID4gMSkgeworICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRyZW5MZW5ndGgp
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7IGkrKykgeworICAgICAg
Y2hpbGRBcnJheVtpXSA9IGFyZ3VtZW50c1tpICsgMl07CisgICAgfQorICAgIGlmICgiZGV2ZWxv
cG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAgIGlmIChPYmplY3QuZnJlZXplKSB7Cisg
ICAgICAgIE9iamVjdC5mcmVlemUoY2hpbGRBcnJheSk7CisgICAgICB9CisgICAgfQorICAgIHBy
b3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTsKKyAgfQorCisgIC8vIFJlc29sdmUgZGVmYXVsdCBw
cm9wcworICBpZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcykgeworICAgIHZhciBkZWZhdWx0
UHJvcHMgPSB0eXBlLmRlZmF1bHRQcm9wczsKKyAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQ
cm9wcykgeworICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7CisgICAg
ICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07CisgICAgICB9Cisg
ICAgfQorICB9CisgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICBp
ZiAoa2V5IHx8IHJlZikgeworICAgICAgaWYgKHR5cGVvZiBwcm9wcy4kJHR5cGVvZiA9PT0gJ3Vu
ZGVmaW5lZCcgfHwgcHJvcHMuJCR0eXBlb2YgIT09IFJFQUNUX0VMRU1FTlRfVFlQRSkgeworICAg
ICAgICB2YXIgZGlzcGxheU5hbWUgPSB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyA/IHR5cGUu
ZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8ICdVbmtub3duJyA6IHR5cGU7CisgICAgICAgIGlm
IChrZXkpIHsKKyAgICAgICAgICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlz
cGxheU5hbWUpOworICAgICAgICB9CisgICAgICAgIGlmIChyZWYpIHsKKyAgICAgICAgICBkZWZp
bmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpOworICAgICAgICB9Cisg
ICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCByZWYs
IHNlbGYsIHNvdXJjZSwgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCwgcHJvcHMpOworfTsKKwor
LyoqCisgKiBSZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHByb2R1Y2VzIFJlYWN0RWxlbWVudHMgb2Yg
YSBnaXZlbiB0eXBlLgorICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2Rv
Y3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNyZWF0ZWZhY3RvcnkKKyAqLworUmVhY3RFbGVt
ZW50LmNyZWF0ZUZhY3RvcnkgPSBmdW5jdGlvbiAodHlwZSkgeworICB2YXIgZmFjdG9yeSA9IFJl
YWN0RWxlbWVudC5jcmVhdGVFbGVtZW50LmJpbmQobnVsbCwgdHlwZSk7CisgIC8vIEV4cG9zZSB0
aGUgdHlwZSBvbiB0aGUgZmFjdG9yeSBhbmQgdGhlIHByb3RvdHlwZSBzbyB0aGF0IGl0IGNhbiBi
ZQorICAvLyBlYXNpbHkgYWNjZXNzZWQgb24gZWxlbWVudHMuIEUuZy4gYDxGb28gLz4udHlwZSA9
PT0gRm9vYC4KKyAgLy8gVGhpcyBzaG91bGQgbm90IGJlIG5hbWVkIGBjb25zdHJ1Y3RvcmAgc2lu
Y2UgdGhpcyBtYXkgbm90IGJlIHRoZSBmdW5jdGlvbgorICAvLyB0aGF0IGNyZWF0ZWQgdGhlIGVs
ZW1lbnQsIGFuZCBpdCBtYXkgbm90IGV2ZW4gYmUgYSBjb25zdHJ1Y3Rvci4KKyAgLy8gTGVnYWN5
IGhvb2sgVE9ETzogV2FybiBpZiB0aGlzIGlzIGFjY2Vzc2VkCisgIGZhY3RvcnkudHlwZSA9IHR5
cGU7CisgIHJldHVybiBmYWN0b3J5OworfTsKKworUmVhY3RFbGVtZW50LmNsb25lQW5kUmVwbGFj
ZUtleSA9IGZ1bmN0aW9uIChvbGRFbGVtZW50LCBuZXdLZXkpIHsKKyAgdmFyIG5ld0VsZW1lbnQg
PSBSZWFjdEVsZW1lbnQob2xkRWxlbWVudC50eXBlLCBuZXdLZXksIG9sZEVsZW1lbnQucmVmLCBv
bGRFbGVtZW50Ll9zZWxmLCBvbGRFbGVtZW50Ll9zb3VyY2UsIG9sZEVsZW1lbnQuX293bmVyLCBv
bGRFbGVtZW50LnByb3BzKTsKKworICByZXR1cm4gbmV3RWxlbWVudDsKK307CisKKy8qKgorICog
Q2xvbmUgYW5kIHJldHVybiBhIG5ldyBSZWFjdEVsZW1lbnQgdXNpbmcgZWxlbWVudCBhcyB0aGUg
c3RhcnRpbmcgcG9pbnQuCisgKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3Qv
ZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3QuY2xvbmVlbGVtZW50CisgKi8KK1JlYWN0RWxl
bWVudC5jbG9uZUVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgY29uZmlnLCBjaGlsZHJlbikg
eworICB2YXIgcHJvcE5hbWU7CisKKyAgLy8gT3JpZ2luYWwgcHJvcHMgYXJlIGNvcGllZAorICB2
YXIgcHJvcHMgPSBfYXNzaWduKHt9LCBlbGVtZW50LnByb3BzKTsKKworICAvLyBSZXNlcnZlZCBu
YW1lcyBhcmUgZXh0cmFjdGVkCisgIHZhciBrZXkgPSBlbGVtZW50LmtleTsKKyAgdmFyIHJlZiA9
IGVsZW1lbnQucmVmOworICAvLyBTZWxmIGlzIHByZXNlcnZlZCBzaW5jZSB0aGUgb3duZXIgaXMg
cHJlc2VydmVkLgorICB2YXIgc2VsZiA9IGVsZW1lbnQuX3NlbGY7CisgIC8vIFNvdXJjZSBpcyBw
cmVzZXJ2ZWQgc2luY2UgY2xvbmVFbGVtZW50IGlzIHVubGlrZWx5IHRvIGJlIHRhcmdldGVkIGJ5
IGEKKyAgLy8gdHJhbnNwaWxlciwgYW5kIHRoZSBvcmlnaW5hbCBzb3VyY2UgaXMgcHJvYmFibHkg
YSBiZXR0ZXIgaW5kaWNhdG9yIG9mIHRoZQorICAvLyB0cnVlIG93bmVyLgorICB2YXIgc291cmNl
ID0gZWxlbWVudC5fc291cmNlOworCisgIC8vIE93bmVyIHdpbGwgYmUgcHJlc2VydmVkLCB1bmxl
c3MgcmVmIGlzIG92ZXJyaWRkZW4KKyAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7CisKKyAg
aWYgKGNvbmZpZyAhPSBudWxsKSB7CisgICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHsKKyAg
ICAgIC8vIFNpbGVudGx5IHN0ZWFsIHRoZSByZWYgZnJvbSB0aGUgcGFyZW50LgorICAgICAgcmVm
ID0gY29uZmlnLnJlZjsKKyAgICAgIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDsK
KyAgICB9CisgICAgaWYgKGhhc1ZhbGlkS2V5KGNvbmZpZykpIHsKKyAgICAgIGtleSA9ICcnICsg
Y29uZmlnLmtleTsKKyAgICB9CisKKyAgICAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBvdmVycmlk
ZSBleGlzdGluZyBwcm9wcworICAgIHZhciBkZWZhdWx0UHJvcHM7CisgICAgaWYgKGVsZW1lbnQu
dHlwZSAmJiBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzKSB7CisgICAgICBkZWZhdWx0UHJvcHMg
PSBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzOworICAgIH0KKyAgICBmb3IgKHByb3BOYW1lIGlu
IGNvbmZpZykgeworICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFt
ZSkgJiYgIVJFU0VSVkVEX1BST1BTLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkgeworICAgICAg
ICBpZiAoY29uZmlnW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkICYmIGRlZmF1bHRQcm9wcyAhPT0g
dW5kZWZpbmVkKSB7CisgICAgICAgICAgLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzCisgICAgICAg
ICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdOworICAg
ICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUg
dGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250bworICAvLyB0
aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC4KKyAgdmFyIGNoaWxkcmVuTGVuZ3RoID0g
YXJndW1lbnRzLmxlbmd0aCAtIDI7CisgIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkgeworICAg
IHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47CisgIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGgg
PiAxKSB7CisgICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7CisgICAgICBjaGlsZEFy
cmF5W2ldID0gYXJndW1lbnRzW2kgKyAyXTsKKyAgICB9CisgICAgcHJvcHMuY2hpbGRyZW4gPSBj
aGlsZEFycmF5OworICB9CisKKyAgcmV0dXJuIFJlYWN0RWxlbWVudChlbGVtZW50LnR5cGUsIGtl
eSwgcmVmLCBzZWxmLCBzb3VyY2UsIG93bmVyLCBwcm9wcyk7Cit9OworCisvKioKKyAqIFZlcmlm
aWVzIHRoZSBvYmplY3QgaXMgYSBSZWFjdEVsZW1lbnQuCisgKiBTZWUgaHR0cHM6Ly9mYWNlYm9v
ay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3QuaXN2YWxpZGVs
ZW1lbnQKKyAqIEBwYXJhbSB7P29iamVjdH0gb2JqZWN0CisgKiBAcmV0dXJuIHtib29sZWFufSBU
cnVlIGlmIGBvYmplY3RgIGlzIGEgdmFsaWQgY29tcG9uZW50LgorICogQGZpbmFsCisgKi8KK1Jl
YWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudCA9IGZ1bmN0aW9uIChvYmplY3QpIHsKKyAgcmV0dXJu
IHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3Qu
JCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTsKK307CisKK21vZHVsZS5leHBvcnRzID0g
UmVhY3RFbGVtZW50OworfSx7IjExIjoxMSwiMjAiOjIwLCIzMCI6MzAsIjMxIjozMSwiOCI6OH1d
LDExOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0
IDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxp
Y2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5
IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCBy
aWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0
b3J5LgorICoKKyAqIAorICovCisKKyd1c2Ugc3RyaWN0JzsKKworLy8gVGhlIFN5bWJvbCB1c2Vk
IHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50IHR5cGUuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1i
b2wKKy8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJm
b3JtYW5jZS4KKwordmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IHR5cGVvZiBTeW1ib2wgPT09ICdm
dW5jdGlvbicgJiYgU3ltYm9sWydmb3InXSAmJiBTeW1ib2xbJ2ZvciddKCdyZWFjdC5lbGVtZW50
JykgfHwgMHhlYWM3OworCittb2R1bGUuZXhwb3J0cyA9IFJFQUNUX0VMRU1FTlRfVFlQRTsKK30s
e31dLDEyOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJp
Z2h0IDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxl
IGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0
b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVu
dCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGly
ZWN0b3J5LgorICoKKyAqLworCisvKioKKyAqIFJlYWN0RWxlbWVudFZhbGlkYXRvciBwcm92aWRl
cyBhIHdyYXBwZXIgYXJvdW5kIGEgZWxlbWVudCBmYWN0b3J5CisgKiB3aGljaCB2YWxpZGF0ZXMg
dGhlIHByb3BzIHBhc3NlZCB0byB0aGUgZWxlbWVudC4gVGhpcyBpcyBpbnRlbmRlZCB0byBiZQor
ICogdXNlZCBvbmx5IGluIERFViBhbmQgY291bGQgYmUgcmVwbGFjZWQgYnkgYSBzdGF0aWMgdHlw
ZSBjaGVja2VyIGZvciBsYW5ndWFnZXMKKyAqIHRoYXQgc3VwcG9ydCBpdC4KKyAqLworCisndXNl
IHN0cmljdCc7CisKK3ZhciBSZWFjdEN1cnJlbnRPd25lciA9IF9kZXJlcV8oOCk7Cit2YXIgUmVh
Y3RDb21wb25lbnRUcmVlSG9vayA9IF9kZXJlcV8oNyk7Cit2YXIgUmVhY3RFbGVtZW50ID0gX2Rl
cmVxXygxMCk7CisKK3ZhciBjaGVja1JlYWN0VHlwZVNwZWMgPSBfZGVyZXFfKDIxKTsKKwordmFy
IGNhbkRlZmluZVByb3BlcnR5ID0gX2RlcmVxXygyMCk7Cit2YXIgZ2V0SXRlcmF0b3JGbiA9IF9k
ZXJlcV8oMjIpOwordmFyIHdhcm5pbmcgPSBfZGVyZXFfKDMwKTsKKworZnVuY3Rpb24gZ2V0RGVj
bGFyYXRpb25FcnJvckFkZGVuZHVtKCkgeworICBpZiAoUmVhY3RDdXJyZW50T3duZXIuY3VycmVu
dCkgeworICAgIHZhciBuYW1lID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC5nZXROYW1lKCk7
CisgICAgaWYgKG5hbWUpIHsKKyAgICAgIHJldHVybiAnIENoZWNrIHRoZSByZW5kZXIgbWV0aG9k
IG9mIGAnICsgbmFtZSArICdgLic7CisgICAgfQorICB9CisgIHJldHVybiAnJzsKK30KKworZnVu
Y3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oZWxlbWVudFByb3BzKSB7CisgIGlmIChl
bGVtZW50UHJvcHMgIT09IG51bGwgJiYgZWxlbWVudFByb3BzICE9PSB1bmRlZmluZWQgJiYgZWxl
bWVudFByb3BzLl9fc291cmNlICE9PSB1bmRlZmluZWQpIHsKKyAgICB2YXIgc291cmNlID0gZWxl
bWVudFByb3BzLl9fc291cmNlOworICAgIHZhciBmaWxlTmFtZSA9IHNvdXJjZS5maWxlTmFtZS5y
ZXBsYWNlKC9eLipbXFxcL10vLCAnJyk7CisgICAgdmFyIGxpbmVOdW1iZXIgPSBzb3VyY2UubGlu
ZU51bWJlcjsKKyAgICByZXR1cm4gJyBDaGVjayB5b3VyIGNvZGUgYXQgJyArIGZpbGVOYW1lICsg
JzonICsgbGluZU51bWJlciArICcuJzsKKyAgfQorICByZXR1cm4gJyc7Cit9CisKKy8qKgorICog
V2FybiBpZiB0aGVyZSdzIG5vIGtleSBleHBsaWNpdGx5IHNldCBvbiBkeW5hbWljIGFycmF5cyBv
ZiBjaGlsZHJlbiBvcgorICogb2JqZWN0IGtleXMgYXJlIG5vdCB2YWxpZC4gVGhpcyBhbGxvd3Mg
dXMgdG8ga2VlcCB0cmFjayBvZiBjaGlsZHJlbiBiZXR3ZWVuCisgKiB1cGRhdGVzLgorICovCit2
YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge307CisKK2Z1bmN0aW9uIGdldEN1cnJlbnRDb21w
b25lbnRFcnJvckluZm8ocGFyZW50VHlwZSkgeworICB2YXIgaW5mbyA9IGdldERlY2xhcmF0aW9u
RXJyb3JBZGRlbmR1bSgpOworCisgIGlmICghaW5mbykgeworICAgIHZhciBwYXJlbnROYW1lID0g
dHlwZW9mIHBhcmVudFR5cGUgPT09ICdzdHJpbmcnID8gcGFyZW50VHlwZSA6IHBhcmVudFR5cGUu
ZGlzcGxheU5hbWUgfHwgcGFyZW50VHlwZS5uYW1lOworICAgIGlmIChwYXJlbnROYW1lKSB7Cisg
ICAgICBpbmZvID0gJyBDaGVjayB0aGUgdG9wLWxldmVsIHJlbmRlciBjYWxsIHVzaW5nIDwnICsg
cGFyZW50TmFtZSArICc+Lic7CisgICAgfQorICB9CisgIHJldHVybiBpbmZvOworfQorCisvKioK
KyAqIFdhcm4gaWYgdGhlIGVsZW1lbnQgZG9lc24ndCBoYXZlIGFuIGV4cGxpY2l0IGtleSBhc3Np
Z25lZCB0byBpdC4KKyAqIFRoaXMgZWxlbWVudCBpcyBpbiBhbiBhcnJheS4gVGhlIGFycmF5IGNv
dWxkIGdyb3cgYW5kIHNocmluayBvciBiZQorICogcmVvcmRlcmVkLiBBbGwgY2hpbGRyZW4gdGhh
dCBoYXZlbid0IGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYXJlIHJlcXVpcmVkIHRvCisgKiBoYXZl
IGEgImtleSIgcHJvcGVydHkgYXNzaWduZWQgdG8gaXQuIEVycm9yIHN0YXR1c2VzIGFyZSBjYWNo
ZWQgc28gYSB3YXJuaW5nCisgKiB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS4KKyAqCisgKiBAaW50
ZXJuYWwKKyAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdGhhdCByZXF1
aXJlcyBhIGtleS4KKyAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBlbGVtZW50J3MgcGFyZW50J3Mg
dHlwZS4KKyAqLworZnVuY3Rpb24gdmFsaWRhdGVFeHBsaWNpdEtleShlbGVtZW50LCBwYXJlbnRU
eXBlKSB7CisgIGlmICghZWxlbWVudC5fc3RvcmUgfHwgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVk
IHx8IGVsZW1lbnQua2V5ICE9IG51bGwpIHsKKyAgICByZXR1cm47CisgIH0KKyAgZWxlbWVudC5f
c3RvcmUudmFsaWRhdGVkID0gdHJ1ZTsKKworICB2YXIgbWVtb2l6ZXIgPSBvd25lckhhc0tleVVz
ZVdhcm5pbmcudW5pcXVlS2V5IHx8IChvd25lckhhc0tleVVzZVdhcm5pbmcudW5pcXVlS2V5ID0g
e30pOworCisgIHZhciBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvID0gZ2V0Q3VycmVudENvbXBv
bmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKTsKKyAgaWYgKG1lbW9pemVyW2N1cnJlbnRDb21wb25l
bnRFcnJvckluZm9dKSB7CisgICAgcmV0dXJuOworICB9CisgIG1lbW9pemVyW2N1cnJlbnRDb21w
b25lbnRFcnJvckluZm9dID0gdHJ1ZTsKKworICAvLyBVc3VhbGx5IHRoZSBjdXJyZW50IG93bmVy
IGlzIHRoZSBvZmZlbmRlciwgYnV0IGlmIGl0IGFjY2VwdHMgY2hpbGRyZW4gYXMgYQorICAvLyBw
cm9wZXJ0eSwgaXQgbWF5IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSBjaGlsZCB0aGF0J3MgcmVzcG9u
c2libGUgZm9yCisgIC8vIGFzc2lnbmluZyBpdCBhIGtleS4KKyAgdmFyIGNoaWxkT3duZXIgPSAn
JzsKKyAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5fb3duZXIgJiYgZWxlbWVudC5fb3duZXIgIT09
IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQpIHsKKyAgICAvLyBHaXZlIHRoZSBjb21wb25lbnQg
dGhhdCBvcmlnaW5hbGx5IGNyZWF0ZWQgdGhpcyBjaGlsZC4KKyAgICBjaGlsZE93bmVyID0gJyBJ
dCB3YXMgcGFzc2VkIGEgY2hpbGQgZnJvbSAnICsgZWxlbWVudC5fb3duZXIuZ2V0TmFtZSgpICsg
Jy4nOworICB9CisKKyAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhm
YWxzZSwgJ0VhY2ggY2hpbGQgaW4gYW4gYXJyYXkgb3IgaXRlcmF0b3Igc2hvdWxkIGhhdmUgYSB1
bmlxdWUgImtleSIgcHJvcC4nICsgJyVzJXMgU2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qtd2Fybmlu
Zy1rZXlzIGZvciBtb3JlIGluZm9ybWF0aW9uLiVzJywgY3VycmVudENvbXBvbmVudEVycm9ySW5m
bywgY2hpbGRPd25lciwgUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRDdXJyZW50U3RhY2tBZGRl
bmR1bShlbGVtZW50KSkgOiB2b2lkIDA7Cit9CisKKy8qKgorICogRW5zdXJlIHRoYXQgZXZlcnkg
ZWxlbWVudCBlaXRoZXIgaXMgcGFzc2VkIGluIGEgc3RhdGljIGxvY2F0aW9uLCBpbiBhbgorICog
YXJyYXkgd2l0aCBhbiBleHBsaWNpdCBrZXlzIHByb3BlcnR5IGRlZmluZWQsIG9yIGluIGFuIG9i
amVjdCBsaXRlcmFsCisgKiB3aXRoIHZhbGlkIGtleSBwcm9wZXJ0eS4KKyAqCisgKiBAaW50ZXJu
YWwKKyAqIEBwYXJhbSB7UmVhY3ROb2RlfSBub2RlIFN0YXRpY2FsbHkgcGFzc2VkIGNoaWxkIG9m
IGFueSB0eXBlLgorICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIG5vZGUncyBwYXJlbnQncyB0eXBl
LgorICovCitmdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhub2RlLCBwYXJlbnRUeXBlKSB7Cisg
IGlmICh0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcpIHsKKyAgICByZXR1cm47CisgIH0KKyAgaWYg
KEFycmF5LmlzQXJyYXkobm9kZSkpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUubGVu
Z3RoOyBpKyspIHsKKyAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07CisgICAgICBpZiAoUmVhY3RF
bGVtZW50LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkgeworICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0
S2V5KGNoaWxkLCBwYXJlbnRUeXBlKTsKKyAgICAgIH0KKyAgICB9CisgIH0gZWxzZSBpZiAoUmVh
Y3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KG5vZGUpKSB7CisgICAgLy8gVGhpcyBlbGVtZW50IHdh
cyBwYXNzZWQgaW4gYSB2YWxpZCBsb2NhdGlvbi4KKyAgICBpZiAobm9kZS5fc3RvcmUpIHsKKyAg
ICAgIG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7CisgICAgfQorICB9IGVsc2UgaWYgKG5v
ZGUpIHsKKyAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obm9kZSk7CisgICAgLy8g
RW50cnkgaXRlcmF0b3JzIHByb3ZpZGUgaW1wbGljaXQga2V5cy4KKyAgICBpZiAoaXRlcmF0b3JG
bikgeworICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IG5vZGUuZW50cmllcykgeworICAgICAgICB2
YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobm9kZSk7CisgICAgICAgIHZhciBzdGVwOwor
ICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7CisgICAgICAg
ICAgaWYgKFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChzdGVwLnZhbHVlKSkgeworICAgICAg
ICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShzdGVwLnZhbHVlLCBwYXJlbnRUeXBlKTsKKyAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworLyoqCisgKiBHaXZl
biBhbiBlbGVtZW50LCB2YWxpZGF0ZSB0aGF0IGl0cyBwcm9wcyBmb2xsb3cgdGhlIHByb3BUeXBl
cyBkZWZpbml0aW9uLAorICogcHJvdmlkZWQgYnkgdGhlIHR5cGUuCisgKgorICogQHBhcmFtIHtS
ZWFjdEVsZW1lbnR9IGVsZW1lbnQKKyAqLworZnVuY3Rpb24gdmFsaWRhdGVQcm9wVHlwZXMoZWxl
bWVudCkgeworICB2YXIgY29tcG9uZW50Q2xhc3MgPSBlbGVtZW50LnR5cGU7CisgIGlmICh0eXBl
b2YgY29tcG9uZW50Q2xhc3MgIT09ICdmdW5jdGlvbicpIHsKKyAgICByZXR1cm47CisgIH0KKyAg
dmFyIG5hbWUgPSBjb21wb25lbnRDbGFzcy5kaXNwbGF5TmFtZSB8fCBjb21wb25lbnRDbGFzcy5u
YW1lOworICBpZiAoY29tcG9uZW50Q2xhc3MucHJvcFR5cGVzKSB7CisgICAgY2hlY2tSZWFjdFR5
cGVTcGVjKGNvbXBvbmVudENsYXNzLnByb3BUeXBlcywgZWxlbWVudC5wcm9wcywgJ3Byb3AnLCBu
YW1lLCBlbGVtZW50LCBudWxsKTsKKyAgfQorICBpZiAodHlwZW9mIGNvbXBvbmVudENsYXNzLmdl
dERlZmF1bHRQcm9wcyA9PT0gJ2Z1bmN0aW9uJykgeworICAgICJkZXZlbG9wbWVudCIgIT09ICdw
cm9kdWN0aW9uJyA/IHdhcm5pbmcoY29tcG9uZW50Q2xhc3MuZ2V0RGVmYXVsdFByb3BzLmlzUmVh
Y3RDbGFzc0FwcHJvdmVkLCAnZ2V0RGVmYXVsdFByb3BzIGlzIG9ubHkgdXNlZCBvbiBjbGFzc2lj
IFJlYWN0LmNyZWF0ZUNsYXNzICcgKyAnZGVmaW5pdGlvbnMuIFVzZSBhIHN0YXRpYyBwcm9wZXJ0
eSBuYW1lZCBgZGVmYXVsdFByb3BzYCBpbnN0ZWFkLicpIDogdm9pZCAwOworICB9Cit9CisKK3Zh
ciBSZWFjdEVsZW1lbnRWYWxpZGF0b3IgPSB7CisKKyAgY3JlYXRlRWxlbWVudDogZnVuY3Rpb24g
KHR5cGUsIHByb3BzLCBjaGlsZHJlbikgeworICAgIHZhciB2YWxpZFR5cGUgPSB0eXBlb2YgdHlw
ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbic7CisgICAgLy8gV2Ug
d2FybiBpbiB0aGlzIGNhc2UgYnV0IGRvbid0IHRocm93LiBXZSBleHBlY3QgdGhlIGVsZW1lbnQg
Y3JlYXRpb24gdG8KKyAgICAvLyBzdWNjZWVkIGFuZCB0aGVyZSB3aWxsIGxpa2VseSBiZSBlcnJv
cnMgaW4gcmVuZGVyLgorICAgIGlmICghdmFsaWRUeXBlKSB7CisgICAgICBpZiAodHlwZW9mIHR5
cGUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHR5cGUgIT09ICdzdHJpbmcnKSB7CisgICAgICAg
IHZhciBpbmZvID0gJyc7CisgICAgICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9m
IHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgT2JqZWN0LmtleXModHlwZSku
bGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgaW5mbyArPSAnIFlvdSBsaWtlbHkgZm9yZ290IHRv
IGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlICcgKyAnaXRcJ3MgZGVmaW5lZCBp
bi4nOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHNvdXJjZUluZm8gPSBnZXRTb3VyY2VJbmZv
RXJyb3JBZGRlbmR1bShwcm9wcyk7CisgICAgICAgIGlmIChzb3VyY2VJbmZvKSB7CisgICAgICAg
ICAgaW5mbyArPSBzb3VyY2VJbmZvOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGluZm8g
Kz0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7CisgICAgICAgIH0KKworICAgICAgICBp
bmZvICs9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0Q3VycmVudFN0YWNrQWRkZW5kdW0oKTsK
KworICAgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNl
LCAnUmVhY3QuY3JlYXRlRWxlbWVudDogdHlwZSBpcyBpbnZhbGlkIC0tIGV4cGVjdGVkIGEgc3Ry
aW5nIChmb3IgJyArICdidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChm
b3IgY29tcG9zaXRlICcgKyAnY29tcG9uZW50cykgYnV0IGdvdDogJXMuJXMnLCB0eXBlID09IG51
bGwgPyB0eXBlIDogdHlwZW9mIHR5cGUsIGluZm8pIDogdm9pZCAwOworICAgICAgfQorICAgIH0K
KworICAgIHZhciBlbGVtZW50ID0gUmVhY3RFbGVtZW50LmNyZWF0ZUVsZW1lbnQuYXBwbHkodGhp
cywgYXJndW1lbnRzKTsKKworICAgIC8vIFRoZSByZXN1bHQgY2FuIGJlIG51bGxpc2ggaWYgYSBt
b2NrIG9yIGEgY3VzdG9tIGZ1bmN0aW9uIGlzIHVzZWQuCisgICAgLy8gVE9ETzogRHJvcCB0aGlz
IHdoZW4gdGhlc2UgYXJlIG5vIGxvbmdlciBhbGxvd2VkIGFzIHRoZSB0eXBlIGFyZ3VtZW50Lgor
ICAgIGlmIChlbGVtZW50ID09IG51bGwpIHsKKyAgICAgIHJldHVybiBlbGVtZW50OworICAgIH0K
KworICAgIC8vIFNraXAga2V5IHdhcm5pbmcgaWYgdGhlIHR5cGUgaXNuJ3QgdmFsaWQgc2luY2Ug
b3VyIGtleSB2YWxpZGF0aW9uIGxvZ2ljCisgICAgLy8gZG9lc24ndCBleHBlY3QgYSBub24tc3Ry
aW5nL2Z1bmN0aW9uIHR5cGUgYW5kIGNhbiB0aHJvdyBjb25mdXNpbmcgZXJyb3JzLgorICAgIC8v
IFdlIGRvbid0IHdhbnQgZXhjZXB0aW9uIGJlaGF2aW9yIHRvIGRpZmZlciBiZXR3ZWVuIGRldiBh
bmQgcHJvZC4KKyAgICAvLyAoUmVuZGVyaW5nIHdpbGwgdGhyb3cgd2l0aCBhIGhlbHBmdWwgbWVz
c2FnZSBhbmQgYXMgc29vbiBhcyB0aGUgdHlwZSBpcworICAgIC8vIGZpeGVkLCB0aGUga2V5IHdh
cm5pbmdzIHdpbGwgYXBwZWFyLikKKyAgICBpZiAodmFsaWRUeXBlKSB7CisgICAgICBmb3IgKHZh
ciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeworICAgICAgICB2YWxpZGF0ZUNo
aWxkS2V5cyhhcmd1bWVudHNbaV0sIHR5cGUpOworICAgICAgfQorICAgIH0KKworICAgIHZhbGlk
YXRlUHJvcFR5cGVzKGVsZW1lbnQpOworCisgICAgcmV0dXJuIGVsZW1lbnQ7CisgIH0sCisKKyAg
Y3JlYXRlRmFjdG9yeTogZnVuY3Rpb24gKHR5cGUpIHsKKyAgICB2YXIgdmFsaWRhdGVkRmFjdG9y
eSA9IFJlYWN0RWxlbWVudFZhbGlkYXRvci5jcmVhdGVFbGVtZW50LmJpbmQobnVsbCwgdHlwZSk7
CisgICAgLy8gTGVnYWN5IGhvb2sgVE9ETzogV2FybiBpZiB0aGlzIGlzIGFjY2Vzc2VkCisgICAg
dmFsaWRhdGVkRmFjdG9yeS50eXBlID0gdHlwZTsKKworICAgIGlmICgiZGV2ZWxvcG1lbnQiICE9
PSAncHJvZHVjdGlvbicpIHsKKyAgICAgIGlmIChjYW5EZWZpbmVQcm9wZXJ0eSkgeworICAgICAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmFsaWRhdGVkRmFjdG9yeSwgJ3R5cGUnLCB7CisgICAg
ICAgICAgZW51bWVyYWJsZTogZmFsc2UsCisgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNl
LCAnRmFjdG9yeS50eXBlIGlzIGRlcHJlY2F0ZWQuIEFjY2VzcyB0aGUgY2xhc3MgZGlyZWN0bHkg
JyArICdiZWZvcmUgcGFzc2luZyBpdCB0byBjcmVhdGVGYWN0b3J5LicpIDogdm9pZCAwOworICAg
ICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICd0eXBlJywgeworICAgICAgICAg
ICAgICB2YWx1ZTogdHlwZQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm4gdHlw
ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biB2YWxpZGF0ZWRGYWN0b3J5OworICB9LAorCisgIGNsb25lRWxlbWVudDogZnVuY3Rpb24gKGVs
ZW1lbnQsIHByb3BzLCBjaGlsZHJlbikgeworICAgIHZhciBuZXdFbGVtZW50ID0gUmVhY3RFbGVt
ZW50LmNsb25lRWxlbWVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgIGZvciAodmFyIGkg
PSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CisgICAgICB2YWxpZGF0ZUNoaWxkS2V5
cyhhcmd1bWVudHNbaV0sIG5ld0VsZW1lbnQudHlwZSk7CisgICAgfQorICAgIHZhbGlkYXRlUHJv
cFR5cGVzKG5ld0VsZW1lbnQpOworICAgIHJldHVybiBuZXdFbGVtZW50OworICB9CisKK307CisK
K21vZHVsZS5leHBvcnRzID0gUmVhY3RFbGVtZW50VmFsaWRhdG9yOworfSx7IjEwIjoxMCwiMjAi
OjIwLCIyMSI6MjEsIjIyIjoyMiwiMzAiOjMwLCI3Ijo3LCI4Ijo4fV0sMTM6W2Z1bmN0aW9uKF9k
ZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxNS1wcmVzZW50LCBG
YWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJj
ZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0
aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2Ug
dHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91
bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisK
Kyd1c2Ugc3RyaWN0JzsKKwordmFyIHdhcm5pbmcgPSBfZGVyZXFfKDMwKTsKKworZnVuY3Rpb24g
d2Fybk5vb3AocHVibGljSW5zdGFuY2UsIGNhbGxlck5hbWUpIHsKKyAgaWYgKCJkZXZlbG9wbWVu
dCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgIHZhciBjb25zdHJ1Y3RvciA9IHB1YmxpY0luc3Rh
bmNlLmNvbnN0cnVjdG9yOworICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdh
cm5pbmcoZmFsc2UsICclcyguLi4pOiBDYW4gb25seSB1cGRhdGUgYSBtb3VudGVkIG9yIG1vdW50
aW5nIGNvbXBvbmVudC4gJyArICdUaGlzIHVzdWFsbHkgbWVhbnMgeW91IGNhbGxlZCAlcygpIG9u
IGFuIHVubW91bnRlZCBjb21wb25lbnQuICcgKyAnVGhpcyBpcyBhIG5vLW9wLiBQbGVhc2UgY2hl
Y2sgdGhlIGNvZGUgZm9yIHRoZSAlcyBjb21wb25lbnQuJywgY2FsbGVyTmFtZSwgY2FsbGVyTmFt
ZSwgY29uc3RydWN0b3IgJiYgKGNvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8IGNvbnN0cnVjdG9y
Lm5hbWUpIHx8ICdSZWFjdENsYXNzJykgOiB2b2lkIDA7CisgIH0KK30KKworLyoqCisgKiBUaGlz
IGlzIHRoZSBhYnN0cmFjdCBBUEkgZm9yIGFuIHVwZGF0ZSBxdWV1ZS4KKyAqLwordmFyIFJlYWN0
Tm9vcFVwZGF0ZVF1ZXVlID0geworCisgIC8qKgorICAgKiBDaGVja3Mgd2hldGhlciBvciBub3Qg
dGhpcyBjb21wb3NpdGUgY29tcG9uZW50IGlzIG1vdW50ZWQuCisgICAqIEBwYXJhbSB7UmVhY3RD
bGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHdlIHdhbnQgdG8gdGVzdC4KKyAgICog
QHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBtb3VudGVkLCBmYWxzZSBvdGhlcndpc2UuCisgICAq
IEBwcm90ZWN0ZWQKKyAgICogQGZpbmFsCisgICAqLworICBpc01vdW50ZWQ6IGZ1bmN0aW9uIChw
dWJsaWNJbnN0YW5jZSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfSwKKworICAvKioKKyAgICog
RW5xdWV1ZSBhIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBhZnRlciBhbGwgdGhlIHBl
bmRpbmcgdXBkYXRlcworICAgKiBoYXZlIHByb2Nlc3NlZC4KKyAgICoKKyAgICogQHBhcmFtIHtS
ZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdG8gdXNlIGFzIGB0aGlzYCBj
b250ZXh0LgorICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHN0
YXRlIGlzIHVwZGF0ZWQuCisgICAqIEBpbnRlcm5hbAorICAgKi8KKyAgZW5xdWV1ZUNhbGxiYWNr
OiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNhbGxiYWNrKSB7fSwKKworICAvKioKKyAgICog
Rm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMg
a25vd24gd2l0aAorICAgKiBjZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3QqKiBpbiBhIERPTSB0
cmFuc2FjdGlvbi4KKyAgICoKKyAgICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlv
dSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZQorICAgKiBjb21wb25lbnQncyBz
dGF0ZSBoYXMgY2hhbmdlZCBidXQgYHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC4KKyAgICoKKyAg
ICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3
aWxsIGludm9rZQorICAgKiBgY29tcG9uZW50V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25lbnREaWRV
cGRhdGVgLgorICAgKgorICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRo
ZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci4KKyAgICogQGludGVybmFsCisgICAqLwor
ICBlbnF1ZXVlRm9yY2VVcGRhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSkgeworICAgIHdh
cm5Ob29wKHB1YmxpY0luc3RhbmNlLCAnZm9yY2VVcGRhdGUnKTsKKyAgfSwKKworICAvKioKKyAg
ICogUmVwbGFjZXMgYWxsIG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIG9yIGBzZXRTdGF0
ZWAgdG8gbXV0YXRlIHN0YXRlLgorICAgKiBZb3Ugc2hvdWxkIHRyZWF0IGB0aGlzLnN0YXRlYCBh
cyBpbW11dGFibGUuCisgICAqCisgICAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGB0aGlz
LnN0YXRlYCB3aWxsIGJlIGltbWVkaWF0ZWx5IHVwZGF0ZWQsIHNvCisgICAqIGFjY2Vzc2luZyBg
dGhpcy5zdGF0ZWAgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBvbGQg
dmFsdWUuCisgICAqCisgICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhl
IGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLgorICAgKiBAcGFyYW0ge29iamVjdH0gY29t
cGxldGVTdGF0ZSBOZXh0IHN0YXRlLgorICAgKiBAaW50ZXJuYWwKKyAgICovCisgIGVucXVldWVS
ZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgY29tcGxldGVTdGF0ZSkgewor
ICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAncmVwbGFjZVN0YXRlJyk7CisgIH0sCisKKyAg
LyoqCisgICAqIFNldHMgYSBzdWJzZXQgb2YgdGhlIHN0YXRlLiBUaGlzIG9ubHkgZXhpc3RzIGJl
Y2F1c2UgX3BlbmRpbmdTdGF0ZSBpcworICAgKiBpbnRlcm5hbC4gVGhpcyBwcm92aWRlcyBhIG1l
cmdpbmcgc3RyYXRlZ3kgdGhhdCBpcyBub3QgYXZhaWxhYmxlIHRvIGRlZXAKKyAgICogcHJvcGVy
dGllcyB3aGljaCBpcyBjb25mdXNpbmcuIFRPRE86IEV4cG9zZSBwZW5kaW5nU3RhdGUgb3IgZG9u
J3QgdXNlIGl0CisgICAqIGR1cmluZyB0aGUgbWVyZ2UuCisgICAqCisgICAqIEBwYXJhbSB7UmVh
Y3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVy
LgorICAgKiBAcGFyYW0ge29iamVjdH0gcGFydGlhbFN0YXRlIE5leHQgcGFydGlhbCBzdGF0ZSB0
byBiZSBtZXJnZWQgd2l0aCBzdGF0ZS4KKyAgICogQGludGVybmFsCisgICAqLworICBlbnF1ZXVl
U2V0U3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgcGFydGlhbFN0YXRlKSB7CisgICAg
d2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdzZXRTdGF0ZScpOworICB9Cit9OworCittb2R1bGUu
ZXhwb3J0cyA9IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlOworfSx7IjMwIjozMH1dLDE0OltmdW5jdGlv
bihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2Vu
dCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBz
b3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQg
aW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291
cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJl
IGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAq
IAorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVz
ID0ge307CisKK2lmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgUmVhY3RQ
cm9wVHlwZUxvY2F0aW9uTmFtZXMgPSB7CisgICAgcHJvcDogJ3Byb3AnLAorICAgIGNvbnRleHQ6
ICdjb250ZXh0JywKKyAgICBjaGlsZENvbnRleHQ6ICdjaGlsZCBjb250ZXh0JworICB9OworfQor
Cittb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzOworfSx7fV0sMTU6
W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAx
My1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5z
ZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2Yg
dGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0
cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnku
CisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIF9yZXF1aXJlID0gX2RlcmVxXygxMCks
CisgICAgaXNWYWxpZEVsZW1lbnQgPSBfcmVxdWlyZS5pc1ZhbGlkRWxlbWVudDsKKwordmFyIGZh
Y3RvcnkgPSBfZGVyZXFfKDMzKTsKKworbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KGlzVmFsaWRF
bGVtZW50KTsKK30seyIxMCI6MTAsIjMzIjozM31dLDE2OltmdW5jdGlvbihfZGVyZXFfLG1vZHVs
ZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIElu
Yy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBs
aWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQ
QVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqIAorICovCisKKyd1c2Ug
c3RyaWN0JzsKKwordmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFT
U19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJzsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdFBy
b3BUeXBlc1NlY3JldDsKK30se31dLDE3OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRz
KXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1
bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwg
Z3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZp
bGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3Zh
ciBfYXNzaWduID0gX2RlcmVxXygzMSk7CisKK3ZhciBSZWFjdENvbXBvbmVudCA9IF9kZXJlcV8o
Nik7Cit2YXIgUmVhY3ROb29wVXBkYXRlUXVldWUgPSBfZGVyZXFfKDEzKTsKKwordmFyIGVtcHR5
T2JqZWN0ID0gX2RlcmVxXygyOCk7CisKKy8qKgorICogQmFzZSBjbGFzcyBoZWxwZXJzIGZvciB0
aGUgdXBkYXRpbmcgc3RhdGUgb2YgYSBjb21wb25lbnQuCisgKi8KK2Z1bmN0aW9uIFJlYWN0UHVy
ZUNvbXBvbmVudChwcm9wcywgY29udGV4dCwgdXBkYXRlcikgeworICAvLyBEdXBsaWNhdGVkIGZy
b20gUmVhY3RDb21wb25lbnQuCisgIHRoaXMucHJvcHMgPSBwcm9wczsKKyAgdGhpcy5jb250ZXh0
ID0gY29udGV4dDsKKyAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7CisgIC8vIFdlIGluaXRpYWxp
emUgdGhlIGRlZmF1bHQgdXBkYXRlciBidXQgdGhlIHJlYWwgb25lIGdldHMgaW5qZWN0ZWQgYnkg
dGhlCisgIC8vIHJlbmRlcmVyLgorICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9v
cFVwZGF0ZVF1ZXVlOworfQorCitmdW5jdGlvbiBDb21wb25lbnREdW1teSgpIHt9CitDb21wb25l
bnREdW1teS5wcm90b3R5cGUgPSBSZWFjdENvbXBvbmVudC5wcm90b3R5cGU7CitSZWFjdFB1cmVD
b21wb25lbnQucHJvdG90eXBlID0gbmV3IENvbXBvbmVudER1bW15KCk7CitSZWFjdFB1cmVDb21w
b25lbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVhY3RQdXJlQ29tcG9uZW50OworLy8gQXZv
aWQgYW4gZXh0cmEgcHJvdG90eXBlIGp1bXAgZm9yIHRoZXNlIG1ldGhvZHMuCitfYXNzaWduKFJl
YWN0UHVyZUNvbXBvbmVudC5wcm90b3R5cGUsIFJlYWN0Q29tcG9uZW50LnByb3RvdHlwZSk7CitS
ZWFjdFB1cmVDb21wb25lbnQucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50ID0gdHJ1ZTsK
KworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdFB1cmVDb21wb25lbnQ7Cit9LHsiMTMiOjEzLCIyOCI6
MjgsIjMxIjozMSwiNiI6Nn1dLDE4OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsK
Ky8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRl
ciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3Jh
bnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUg
aW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBf
YXNzaWduID0gX2RlcmVxXygzMSk7CisKK3ZhciBSZWFjdCA9IF9kZXJlcV8oMyk7CisKKy8vIGB2
ZXJzaW9uYCB3aWxsIGJlIGFkZGVkIGhlcmUgYnkgdGhlIFJlYWN0IG1vZHVsZS4KK3ZhciBSZWFj
dFVNREVudHJ5ID0gX2Fzc2lnbihSZWFjdCwgeworICBfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9U
X1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDogeworICAgIFJlYWN0Q3VycmVudE93bmVyOiBfZGVy
ZXFfKDgpCisgIH0KK30pOworCitpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7
CisgIF9hc3NpZ24oUmVhY3RVTURFbnRyeS5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9P
Ul9ZT1VfV0lMTF9CRV9GSVJFRCwgeworICAgIC8vIFJlYWN0Q29tcG9uZW50VHJlZUhvb2sgc2hv
dWxkIG5vdCBiZSBpbmNsdWRlZCBpbiBwcm9kdWN0aW9uLgorICAgIFJlYWN0Q29tcG9uZW50VHJl
ZUhvb2s6IF9kZXJlcV8oNyksCisgICAgZ2V0TmV4dERlYnVnSUQ6IF9kZXJlcV8oMjMpCisgIH0p
OworfQorCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0VU1ERW50cnk7Cit9LHsiMjMiOjIzLCIzIjoz
LCIzMSI6MzEsIjciOjcsIjgiOjh9XSwxOTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0
cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQg
dW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxl
IGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFs
IGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBm
aWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOworCitt
b2R1bGUuZXhwb3J0cyA9ICcxNS41LjQnOworfSx7fV0sMjA6W2Z1bmN0aW9uKF9kZXJlcV8sbW9k
dWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywg
SW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlz
IGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4g
YWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhl
IFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICogCisgKi8KKworJ3Vz
ZSBzdHJpY3QnOworCit2YXIgY2FuRGVmaW5lUHJvcGVydHkgPSBmYWxzZTsKK2lmICgiZGV2ZWxv
cG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgdHJ5IHsKKyAgICAvLyAkRmxvd0ZpeE1lIGh0
dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8yODUKKyAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoe30sICd4JywgeyBnZXQ6IGZ1bmN0aW9uICgpIHt9IH0pOworICAgIGNhbkRl
ZmluZVByb3BlcnR5ID0gdHJ1ZTsKKyAgfSBjYXRjaCAoeCkgeworICAgIC8vIElFIHdpbGwgZmFp
bCBvbiBkZWZpbmVQcm9wZXJ0eQorICB9Cit9CisKK21vZHVsZS5leHBvcnRzID0gY2FuRGVmaW5l
UHJvcGVydHk7Cit9LHt9XSwyMTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7Ciso
ZnVuY3Rpb24gKHByb2Nlc3MpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNl
Ym9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBj
b2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUK
KyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJl
ZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQg
aW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1
c2Ugc3RyaWN0JzsKKwordmFyIF9wcm9kSW52YXJpYW50ID0gX2RlcmVxXygyNSk7CisKK3ZhciBS
ZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lcyA9IF9kZXJlcV8oMTQpOwordmFyIFJlYWN0UHJvcFR5
cGVzU2VjcmV0ID0gX2RlcmVxXygxNik7CisKK3ZhciBpbnZhcmlhbnQgPSBfZGVyZXFfKDI5KTsK
K3ZhciB3YXJuaW5nID0gX2RlcmVxXygzMCk7CisKK3ZhciBSZWFjdENvbXBvbmVudFRyZWVIb29r
OworCitpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MuZW52ICYm
ICJkZXZlbG9wbWVudCIgPT09ICd0ZXN0JykgeworICAvLyBUZW1wb3JhcnkgaGFjay4KKyAgLy8g
SW5saW5lIHJlcXVpcmVzIGRvbid0IHdvcmsgd2VsbCB3aXRoIEplc3Q6CisgIC8vIGh0dHBzOi8v
Z2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNzI0MAorICAvLyBSZW1vdmUgdGhlIGlu
bGluZSByZXF1aXJlcyB3aGVuIHdlIGRvbid0IG5lZWQgdGhlbSBhbnltb3JlOgorICAvLyBodHRw
czovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC83MTc4CisgIFJlYWN0Q29tcG9uZW50
VHJlZUhvb2sgPSBfZGVyZXFfKDcpOworfQorCit2YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307
CisKKy8qKgorICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRjaCB3aXRoIHRoZSB0eXBlIHNw
ZWNzLgorICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNo
b3duIG9uY2UuCisgKgorICogQHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgbmFtZSB0
byBhIFJlYWN0UHJvcFR5cGUKKyAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1
ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZAorICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0
aW9uIGUuZy4gInByb3AiLCAiY29udGV4dCIsICJjaGlsZCBjb250ZXh0IgorICogQHBhcmFtIHtz
dHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUgY29tcG9uZW50IGZvciBlcnJvciBtZXNz
YWdlcy4KKyAqIEBwYXJhbSB7P29iamVjdH0gZWxlbWVudCBUaGUgUmVhY3QgZWxlbWVudCB0aGF0
IGlzIGJlaW5nIHR5cGUtY2hlY2tlZAorICogQHBhcmFtIHs/bnVtYmVyfSBkZWJ1Z0lEIFRoZSBS
ZWFjdCBjb21wb25lbnQgaW5zdGFuY2UgdGhhdCBpcyBiZWluZyB0eXBlLWNoZWNrZWQKKyAqIEBw
cml2YXRlCisgKi8KK2Z1bmN0aW9uIGNoZWNrUmVhY3RUeXBlU3BlYyh0eXBlU3BlY3MsIHZhbHVl
cywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGVsZW1lbnQsIGRlYnVnSUQpIHsKKyAgZm9yICh2
YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykgeworICAgIGlmICh0eXBlU3BlY3MuaGFzT3du
UHJvcGVydHkodHlwZVNwZWNOYW1lKSkgeworICAgICAgdmFyIGVycm9yOworICAgICAgLy8gUHJv
cCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdh
bnQgdG8KKyAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFp
bCBiZWZvcmUuIFNvIHdlIGxvZyBpdC4KKyAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBj
bGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy4KKyAgICAgIHRyeSB7CisgICAgICAgIC8v
IFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQn
cyB0aGUgc2FtZQorICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50
IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuCisgICAgICAgICEodHlwZW9mIHR5cGVTcGVj
c1t0eXBlU3BlY05hbWVdID09PSAnZnVuY3Rpb24nKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9k
dWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJyVzOiAlcyB0eXBlIGAlc2AgaXMgaW52YWxpZDsg
aXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gUmVhY3QuUHJvcFR5cGVzLicsIGNv
bXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNb
bG9jYXRpb25dLCB0eXBlU3BlY05hbWUpIDogX3Byb2RJbnZhcmlhbnQoJzg0JywgY29tcG9uZW50
TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlv
bl0sIHR5cGVTcGVjTmFtZSkgOiB2b2lkIDA7CisgICAgICAgIGVycm9yID0gdHlwZVNwZWNzW3R5
cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9u
LCBudWxsLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7CisgICAgICB9IGNhdGNoIChleCkgeworICAg
ICAgICBlcnJvciA9IGV4OworICAgICAgfQorICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1
Y3Rpb24nID8gd2FybmluZyghZXJyb3IgfHwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciwgJyVzOiB0
eXBlIHNwZWNpZmljYXRpb24gb2YgJXMgYCVzYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2Vy
ICcgKyAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVy
bmVkIGEgJXMuICcgKyAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50
IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBv
YmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgKyAnc2hhcGUgYWxsIHJlcXVpcmUgYW4g
YXJndW1lbnQpLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgUmVhY3RQcm9wVHlw
ZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dLCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvcikgOiB2
b2lkIDA7CisgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3Nh
Z2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkgeworICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhp
cyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGUKKyAg
ICAgICAgLy8gc2FtZSBlcnJvci4KKyAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1l
c3NhZ2VdID0gdHJ1ZTsKKworICAgICAgICB2YXIgY29tcG9uZW50U3RhY2tJbmZvID0gJyc7CisK
KyAgICAgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgICAgICAg
IGlmICghUmVhY3RDb21wb25lbnRUcmVlSG9vaykgeworICAgICAgICAgICAgUmVhY3RDb21wb25l
bnRUcmVlSG9vayA9IF9kZXJlcV8oNyk7CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChkZWJ1
Z0lEICE9PSBudWxsKSB7CisgICAgICAgICAgICBjb21wb25lbnRTdGFja0luZm8gPSBSZWFjdENv
bXBvbmVudFRyZWVIb29rLmdldFN0YWNrQWRkZW5kdW1CeUlEKGRlYnVnSUQpOworICAgICAgICAg
IH0gZWxzZSBpZiAoZWxlbWVudCAhPT0gbnVsbCkgeworICAgICAgICAgICAgY29tcG9uZW50U3Rh
Y2tJbmZvID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRDdXJyZW50U3RhY2tBZGRlbmR1bShl
bGVtZW50KTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAiZGV2ZWxvcG1lbnQi
ICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnRmFpbGVkICVzIHR5cGU6ICVzJXMn
LCBsb2NhdGlvbiwgZXJyb3IubWVzc2FnZSwgY29tcG9uZW50U3RhY2tJbmZvKSA6IHZvaWQgMDsK
KyAgICAgIH0KKyAgICB9CisgIH0KK30KKworbW9kdWxlLmV4cG9ydHMgPSBjaGVja1JlYWN0VHlw
ZVNwZWM7Cit9KS5jYWxsKHRoaXMsdW5kZWZpbmVkKQorfSx7IjE0IjoxNCwiMTYiOjE2LCIyNSI6
MjUsIjI5IjoyOSwiMzAiOjMwLCI3Ijo3fV0sMjI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4
cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vu
c2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0Ug
ZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRp
b25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVO
VFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICogCisgKi8KKworJ3VzZSBzdHJp
Y3QnOworCisvKiBnbG9iYWwgU3ltYm9sICovCisKK3ZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBl
b2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjsKK3ZhciBGQVVYX0lU
RVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLgorCisv
KioKKyAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24g
dGhlIGl0ZXJhYmxlIG9iamVjdC4KKyAqCisgKiBCZSBzdXJlIHRvIGludm9rZSB0aGUgZnVuY3Rp
b24gd2l0aCB0aGUgaXRlcmFibGUgYXMgY29udGV4dDoKKyAqCisgKiAgICAgdmFyIGl0ZXJhdG9y
Rm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpOworICogICAgIGlmIChpdGVyYXRvckZuKSB7
CisgKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7Cisg
KiAgICAgICAuLi4KKyAqICAgICB9CisgKgorICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJh
YmxlCisgKiBAcmV0dXJuIHs/ZnVuY3Rpb259CisgKi8KK2Z1bmN0aW9uIGdldEl0ZXJhdG9yRm4o
bWF5YmVJdGVyYWJsZSkgeworICB2YXIgaXRlcmF0b3JGbiA9IG1heWJlSXRlcmFibGUgJiYgKElU
RVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJ
dGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF0pOworICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4g
PT09ICdmdW5jdGlvbicpIHsKKyAgICByZXR1cm4gaXRlcmF0b3JGbjsKKyAgfQorfQorCittb2R1
bGUuZXhwb3J0cyA9IGdldEl0ZXJhdG9yRm47Cit9LHt9XSwyMzpbZnVuY3Rpb24oX2RlcmVxXyxt
b2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29r
LCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUg
aXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICog
TElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBB
biBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0
aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKiAKKyAqLworCisn
dXNlIHN0cmljdCc7CisKK3ZhciBuZXh0RGVidWdJRCA9IDE7CisKK2Z1bmN0aW9uIGdldE5leHRE
ZWJ1Z0lEKCkgeworICByZXR1cm4gbmV4dERlYnVnSUQrKzsKK30KKworbW9kdWxlLmV4cG9ydHMg
PSBnZXROZXh0RGVidWdJRDsKK30se31dLDI0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBv
cnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNl
ZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9u
YWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRT
IGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworJ3VzZSBzdHJpY3QnOworCit2
YXIgX3Byb2RJbnZhcmlhbnQgPSBfZGVyZXFfKDI1KTsKKwordmFyIFJlYWN0RWxlbWVudCA9IF9k
ZXJlcV8oMTApOworCit2YXIgaW52YXJpYW50ID0gX2RlcmVxXygyOSk7CisKKy8qKgorICogUmV0
dXJucyB0aGUgZmlyc3QgY2hpbGQgaW4gYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuIGFuZCB2ZXJp
ZmllcyB0aGF0IHRoZXJlCisgKiBpcyBvbmx5IG9uZSBjaGlsZCBpbiB0aGUgY29sbGVjdGlvbi4K
KyAqCisgKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2
ZWwtYXBpLmh0bWwjcmVhY3QuY2hpbGRyZW4ub25seQorICoKKyAqIFRoZSBjdXJyZW50IGltcGxl
bWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGEgc2luZ2xlIGNoaWxkIGdl
dHMKKyAqIHBhc3NlZCB3aXRob3V0IGEgd3JhcHBlciwgYnV0IHRoZSBwdXJwb3NlIG9mIHRoaXMg
aGVscGVyIGZ1bmN0aW9uIGlzIHRvCisgKiBhYnN0cmFjdCBhd2F5IHRoZSBwYXJ0aWN1bGFyIHN0
cnVjdHVyZSBvZiBjaGlsZHJlbi4KKyAqCisgKiBAcGFyYW0gez9vYmplY3R9IGNoaWxkcmVuIENo
aWxkIGNvbGxlY3Rpb24gc3RydWN0dXJlLgorICogQHJldHVybiB7UmVhY3RFbGVtZW50fSBUaGUg
Zmlyc3QgYW5kIG9ubHkgYFJlYWN0RWxlbWVudGAgY29udGFpbmVkIGluIHRoZQorICogc3RydWN0
dXJlLgorICovCitmdW5jdGlvbiBvbmx5Q2hpbGQoY2hpbGRyZW4pIHsKKyAgIVJlYWN0RWxlbWVu
dC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlv
bicgPyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdC5DaGlsZHJlbi5vbmx5IGV4cGVjdGVkIHRvIHJl
Y2VpdmUgYSBzaW5nbGUgUmVhY3QgZWxlbWVudCBjaGlsZC4nKSA6IF9wcm9kSW52YXJpYW50KCcx
NDMnKSA6IHZvaWQgMDsKKyAgcmV0dXJuIGNoaWxkcmVuOworfQorCittb2R1bGUuZXhwb3J0cyA9
IG9ubHlDaGlsZDsKK30seyIxMCI6MTAsIjI1IjoyNSwiMjkiOjI5fV0sMjU6W2Z1bmN0aW9uKF9k
ZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2Vu
dCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBz
b3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQg
aW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291
cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJl
IGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAq
IAorICovCisndXNlIHN0cmljdCc7CisKKy8qKgorICogV0FSTklORzogRE8gTk9UIG1hbnVhbGx5
IHJlcXVpcmUgdGhpcyBtb2R1bGUuCisgKiBUaGlzIGlzIGEgcmVwbGFjZW1lbnQgZm9yIGBpbnZh
cmlhbnQoLi4uKWAgdXNlZCBieSB0aGUgZXJyb3IgY29kZSBzeXN0ZW0KKyAqIGFuZCB3aWxsIF9v
bmx5XyBiZSByZXF1aXJlZCBieSB0aGUgY29ycmVzcG9uZGluZyBiYWJlbCBwYXNzLgorICogSXQg
YWx3YXlzIHRocm93cy4KKyAqLworCitmdW5jdGlvbiByZWFjdFByb2RJbnZhcmlhbnQoY29kZSkg
eworICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsKKworICB2YXIgbWVzc2Fn
ZSA9ICdNaW5pZmllZCBSZWFjdCBlcnJvciAjJyArIGNvZGUgKyAnOyB2aXNpdCAnICsgJ2h0dHA6
Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9lcnJvci1kZWNvZGVyLmh0bWw/aW52YXJp
YW50PScgKyBjb2RlOworCisgIGZvciAodmFyIGFyZ0lkeCA9IDA7IGFyZ0lkeCA8IGFyZ0NvdW50
OyBhcmdJZHgrKykgeworICAgIG1lc3NhZ2UgKz0gJyZhcmdzW109JyArIGVuY29kZVVSSUNvbXBv
bmVudChhcmd1bWVudHNbYXJnSWR4ICsgMV0pOworICB9CisKKyAgbWVzc2FnZSArPSAnIGZvciB0
aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCcg
KyAnIGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLic7CisK
KyAgdmFyIGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpOworICBlcnJvci5uYW1lID0gJ0ludmFy
aWFudCBWaW9sYXRpb24nOworICBlcnJvci5mcmFtZXNUb1BvcCA9IDE7IC8vIHdlIGRvbid0IGNh
cmUgYWJvdXQgcmVhY3RQcm9kSW52YXJpYW50J3Mgb3duIGZyYW1lCisKKyAgdGhyb3cgZXJyb3I7
Cit9CisKK21vZHVsZS5leHBvcnRzID0gcmVhY3RQcm9kSW52YXJpYW50OworfSx7fV0sMjY6W2Z1
bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1w
cmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBm
b3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhp
cyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBj
YW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisg
KgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIF9wcm9kSW52YXJpYW50ID0gX2RlcmVxXygy
NSk7CisKK3ZhciBSZWFjdEN1cnJlbnRPd25lciA9IF9kZXJlcV8oOCk7Cit2YXIgUkVBQ1RfRUxF
TUVOVF9UWVBFID0gX2RlcmVxXygxMSk7CisKK3ZhciBnZXRJdGVyYXRvckZuID0gX2RlcmVxXygy
Mik7Cit2YXIgaW52YXJpYW50ID0gX2RlcmVxXygyOSk7Cit2YXIgS2V5RXNjYXBlVXRpbHMgPSBf
ZGVyZXFfKDEpOwordmFyIHdhcm5pbmcgPSBfZGVyZXFfKDMwKTsKKwordmFyIFNFUEFSQVRPUiA9
ICcuJzsKK3ZhciBTVUJTRVBBUkFUT1IgPSAnOic7CisKKy8qKgorICogVGhpcyBpcyBpbmxpbmVk
IGZyb20gUmVhY3RFbGVtZW50IHNpbmNlIHRoaXMgZmlsZSBpcyBzaGFyZWQgYmV0d2VlbgorICog
aXNvbW9ycGhpYyBhbmQgcmVuZGVyZXJzLiBXZSBjb3VsZCBleHRyYWN0IHRoaXMgdG8gYQorICoK
KyAqLworCisvKioKKyAqIFRPRE86IFRlc3QgdGhhdCBhIHNpbmdsZSBjaGlsZCBhbmQgYW4gYXJy
YXkgd2l0aCBvbmUgaXRlbSBoYXZlIHRoZSBzYW1lIGtleQorICogcGF0dGVybi4KKyAqLworCit2
YXIgZGlkV2FybkFib3V0TWFwcyA9IGZhbHNlOworCisvKioKKyAqIEdlbmVyYXRlIGEga2V5IHN0
cmluZyB0aGF0IGlkZW50aWZpZXMgYSBjb21wb25lbnQgd2l0aGluIGEgc2V0LgorICoKKyAqIEBw
YXJhbSB7Kn0gY29tcG9uZW50IEEgY29tcG9uZW50IHRoYXQgY291bGQgY29udGFpbiBhIG1hbnVh
bCBrZXkuCisgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggSW5kZXggdGhhdCBpcyB1c2VkIGlmIGEg
bWFudWFsIGtleSBpcyBub3QgcHJvdmlkZWQuCisgKiBAcmV0dXJuIHtzdHJpbmd9CisgKi8KK2Z1
bmN0aW9uIGdldENvbXBvbmVudEtleShjb21wb25lbnQsIGluZGV4KSB7CisgIC8vIERvIHNvbWUg
dHlwZWNoZWNraW5nIGhlcmUgc2luY2Ugd2UgY2FsbCB0aGlzIGJsaW5kbHkuIFdlIHdhbnQgdG8g
ZW5zdXJlCisgIC8vIHRoYXQgd2UgZG9uJ3QgYmxvY2sgcG90ZW50aWFsIGZ1dHVyZSBFUyBBUElz
LgorICBpZiAoY29tcG9uZW50ICYmIHR5cGVvZiBjb21wb25lbnQgPT09ICdvYmplY3QnICYmIGNv
bXBvbmVudC5rZXkgIT0gbnVsbCkgeworICAgIC8vIEV4cGxpY2l0IGtleQorICAgIHJldHVybiBL
ZXlFc2NhcGVVdGlscy5lc2NhcGUoY29tcG9uZW50LmtleSk7CisgIH0KKyAgLy8gSW1wbGljaXQg
a2V5IGRldGVybWluZWQgYnkgdGhlIGluZGV4IGluIHRoZSBzZXQKKyAgcmV0dXJuIGluZGV4LnRv
U3RyaW5nKDM2KTsKK30KKworLyoqCisgKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0
cmVlIGNvbnRhaW5lci4KKyAqIEBwYXJhbSB7IXN0cmluZ30gbmFtZVNvRmFyIE5hbWUgb2YgdGhl
IGtleSBwYXRoIHNvIGZhci4KKyAqIEBwYXJhbSB7IWZ1bmN0aW9ufSBjYWxsYmFjayBDYWxsYmFj
ayB0byBpbnZva2Ugd2l0aCBlYWNoIGNoaWxkIGZvdW5kLgorICogQHBhcmFtIHs/Kn0gdHJhdmVy
c2VDb250ZXh0IFVzZWQgdG8gcGFzcyBpbmZvcm1hdGlvbiB0aHJvdWdob3V0IHRoZSB0cmF2ZXJz
YWwKKyAqIHByb2Nlc3MuCisgKiBAcmV0dXJuIHshbnVtYmVyfSBUaGUgbnVtYmVyIG9mIGNoaWxk
cmVuIGluIHRoaXMgc3VidHJlZS4KKyAqLworZnVuY3Rpb24gdHJhdmVyc2VBbGxDaGlsZHJlbklt
cGwoY2hpbGRyZW4sIG5hbWVTb0ZhciwgY2FsbGJhY2ssIHRyYXZlcnNlQ29udGV4dCkgeworICB2
YXIgdHlwZSA9IHR5cGVvZiBjaGlsZHJlbjsKKworICBpZiAodHlwZSA9PT0gJ3VuZGVmaW5lZCcg
fHwgdHlwZSA9PT0gJ2Jvb2xlYW4nKSB7CisgICAgLy8gQWxsIG9mIHRoZSBhYm92ZSBhcmUgcGVy
Y2VpdmVkIGFzIG51bGwuCisgICAgY2hpbGRyZW4gPSBudWxsOworICB9CisKKyAgaWYgKGNoaWxk
cmVuID09PSBudWxsIHx8IHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGUgPT09ICdudW1iZXInIHx8
CisgIC8vIFRoZSBmb2xsb3dpbmcgaXMgaW5saW5lZCBmcm9tIFJlYWN0RWxlbWVudC4gVGhpcyBt
ZWFucyB3ZSBjYW4gb3B0aW1pemUKKyAgLy8gc29tZSBjaGVja3MuIFJlYWN0IEZpYmVyIGFsc28g
aW5saW5lcyB0aGlzIGxvZ2ljIGZvciBzaW1pbGFyIHB1cnBvc2VzLgorICB0eXBlID09PSAnb2Jq
ZWN0JyAmJiBjaGlsZHJlbi4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFKSB7CisgICAg
Y2FsbGJhY2sodHJhdmVyc2VDb250ZXh0LCBjaGlsZHJlbiwKKyAgICAvLyBJZiBpdCdzIHRoZSBv
bmx5IGNoaWxkLCB0cmVhdCB0aGUgbmFtZSBhcyBpZiBpdCB3YXMgd3JhcHBlZCBpbiBhbiBhcnJh
eQorICAgIC8vIHNvIHRoYXQgaXQncyBjb25zaXN0ZW50IGlmIHRoZSBudW1iZXIgb2YgY2hpbGRy
ZW4gZ3Jvd3MuCisgICAgbmFtZVNvRmFyID09PSAnJyA/IFNFUEFSQVRPUiArIGdldENvbXBvbmVu
dEtleShjaGlsZHJlbiwgMCkgOiBuYW1lU29GYXIpOworICAgIHJldHVybiAxOworICB9CisKKyAg
dmFyIGNoaWxkOworICB2YXIgbmV4dE5hbWU7CisgIHZhciBzdWJ0cmVlQ291bnQgPSAwOyAvLyBD
b3VudCBvZiBjaGlsZHJlbiBmb3VuZCBpbiB0aGUgY3VycmVudCBzdWJ0cmVlLgorICB2YXIgbmV4
dE5hbWVQcmVmaXggPSBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SIDogbmFtZVNvRmFyICsg
U1VCU0VQQVJBVE9SOworCisgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkgeworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKKyAgICAgIGNoaWxkID0g
Y2hpbGRyZW5baV07CisgICAgICBuZXh0TmFtZSA9IG5leHROYW1lUHJlZml4ICsgZ2V0Q29tcG9u
ZW50S2V5KGNoaWxkLCBpKTsKKyAgICAgIHN1YnRyZWVDb3VudCArPSB0cmF2ZXJzZUFsbENoaWxk
cmVuSW1wbChjaGlsZCwgbmV4dE5hbWUsIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpOworICAg
IH0KKyAgfSBlbHNlIHsKKyAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4oY2hpbGRy
ZW4pOworICAgIGlmIChpdGVyYXRvckZuKSB7CisgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRv
ckZuLmNhbGwoY2hpbGRyZW4pOworICAgICAgdmFyIHN0ZXA7CisgICAgICBpZiAoaXRlcmF0b3JG
biAhPT0gY2hpbGRyZW4uZW50cmllcykgeworICAgICAgICB2YXIgaWkgPSAwOworICAgICAgICB3
aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7CisgICAgICAgICAgY2hpbGQg
PSBzdGVwLnZhbHVlOworICAgICAgICAgIG5leHROYW1lID0gbmV4dE5hbWVQcmVmaXggKyBnZXRD
b21wb25lbnRLZXkoY2hpbGQsIGlpKyspOworICAgICAgICAgIHN1YnRyZWVDb3VudCArPSB0cmF2
ZXJzZUFsbENoaWxkcmVuSW1wbChjaGlsZCwgbmV4dE5hbWUsIGNhbGxiYWNrLCB0cmF2ZXJzZUNv
bnRleHQpOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAoImRldmVsb3Bt
ZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgICAgICAgdmFyIG1hcHNBc0NoaWxkcmVuQWRk
ZW5kdW0gPSAnJzsKKyAgICAgICAgICBpZiAoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkgewor
ICAgICAgICAgICAgdmFyIG1hcHNBc0NoaWxkcmVuT3duZXJOYW1lID0gUmVhY3RDdXJyZW50T3du
ZXIuY3VycmVudC5nZXROYW1lKCk7CisgICAgICAgICAgICBpZiAobWFwc0FzQ2hpbGRyZW5Pd25l
ck5hbWUpIHsKKyAgICAgICAgICAgICAgbWFwc0FzQ2hpbGRyZW5BZGRlbmR1bSA9ICcgQ2hlY2sg
dGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBtYXBzQXNDaGlsZHJlbk93bmVyTmFtZSArICdgLic7
CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgICJkZXZlbG9wbWVudCIgIT09
ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZGlkV2FybkFib3V0TWFwcywgJ1VzaW5nIE1hcHMgYXMg
Y2hpbGRyZW4gaXMgbm90IHlldCBmdWxseSBzdXBwb3J0ZWQuIEl0IGlzIGFuICcgKyAnZXhwZXJp
bWVudGFsIGZlYXR1cmUgdGhhdCBtaWdodCBiZSByZW1vdmVkLiBDb252ZXJ0IGl0IHRvIGEgJyAr
ICdzZXF1ZW5jZSAvIGl0ZXJhYmxlIG9mIGtleWVkIFJlYWN0RWxlbWVudHMgaW5zdGVhZC4lcycs
IG1hcHNBc0NoaWxkcmVuQWRkZW5kdW0pIDogdm9pZCAwOworICAgICAgICAgIGRpZFdhcm5BYm91
dE1hcHMgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlk
ZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLgorICAgICAgICB3aGlsZSAo
IShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7CisgICAgICAgICAgdmFyIGVudHJ5ID0g
c3RlcC52YWx1ZTsKKyAgICAgICAgICBpZiAoZW50cnkpIHsKKyAgICAgICAgICAgIGNoaWxkID0g
ZW50cnlbMV07CisgICAgICAgICAgICBuZXh0TmFtZSA9IG5leHROYW1lUHJlZml4ICsgS2V5RXNj
YXBlVXRpbHMuZXNjYXBlKGVudHJ5WzBdKSArIFNVQlNFUEFSQVRPUiArIGdldENvbXBvbmVudEtl
eShjaGlsZCwgMCk7CisgICAgICAgICAgICBzdWJ0cmVlQ291bnQgKz0gdHJhdmVyc2VBbGxDaGls
ZHJlbkltcGwoY2hpbGQsIG5leHROYW1lLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KTsKKyAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdv
YmplY3QnKSB7CisgICAgICB2YXIgYWRkZW5kdW0gPSAnJzsKKyAgICAgIGlmICgiZGV2ZWxvcG1l
bnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAgICAgYWRkZW5kdW0gPSAnIElmIHlvdSBtZWFu
dCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgJyArICdp
bnN0ZWFkIG9yIHdyYXAgdGhlIG9iamVjdCB1c2luZyBjcmVhdGVGcmFnbWVudChvYmplY3QpIGZy
b20gdGhlICcgKyAnUmVhY3QgYWRkLW9ucy4nOworICAgICAgICBpZiAoY2hpbGRyZW4uX2lzUmVh
Y3RFbGVtZW50KSB7CisgICAgICAgICAgYWRkZW5kdW0gPSAnIEl0IGxvb2tzIGxpa2UgeW91XCdy
ZSB1c2luZyBhbiBlbGVtZW50IGNyZWF0ZWQgYnkgYSBkaWZmZXJlbnQgJyArICd2ZXJzaW9uIG9m
IFJlYWN0LiBNYWtlIHN1cmUgdG8gdXNlIG9ubHkgb25lIGNvcHkgb2YgUmVhY3QuJzsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkgeworICAgICAgICAg
IHZhciBuYW1lID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC5nZXROYW1lKCk7CisgICAgICAg
ICAgaWYgKG5hbWUpIHsKKyAgICAgICAgICAgIGFkZGVuZHVtICs9ICcgQ2hlY2sgdGhlIHJlbmRl
ciBtZXRob2Qgb2YgYCcgKyBuYW1lICsgJ2AuJzsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgIH0KKyAgICAgIHZhciBjaGlsZHJlblN0cmluZyA9IFN0cmluZyhjaGlsZHJlbik7CisgICAg
ICAhZmFsc2UgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFs
c2UsICdPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6ICVzKS4l
cycsIGNoaWxkcmVuU3RyaW5nID09PSAnW29iamVjdCBPYmplY3RdJyA/ICdvYmplY3Qgd2l0aCBr
ZXlzIHsnICsgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmpvaW4oJywgJykgKyAnfScgOiBjaGlsZHJl
blN0cmluZywgYWRkZW5kdW0pIDogX3Byb2RJbnZhcmlhbnQoJzMxJywgY2hpbGRyZW5TdHJpbmcg
PT09ICdbb2JqZWN0IE9iamVjdF0nID8gJ29iamVjdCB3aXRoIGtleXMgeycgKyBPYmplY3Qua2V5
cyhjaGlsZHJlbikuam9pbignLCAnKSArICd9JyA6IGNoaWxkcmVuU3RyaW5nLCBhZGRlbmR1bSkg
OiB2b2lkIDA7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHN1YnRyZWVDb3VudDsKK30KKworLyoq
CisgKiBUcmF2ZXJzZXMgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhcyBg
cHJvcHMuY2hpbGRyZW5gLCBidXQKKyAqIG1pZ2h0IGFsc28gYmUgc3BlY2lmaWVkIHRocm91Z2gg
YXR0cmlidXRlczoKKyAqCisgKiAtIGB0cmF2ZXJzZUFsbENoaWxkcmVuKHRoaXMucHJvcHMuY2hp
bGRyZW4sIC4uLilgCisgKiAtIGB0cmF2ZXJzZUFsbENoaWxkcmVuKHRoaXMucHJvcHMubGVmdFBh
bmVsQ2hpbGRyZW4sIC4uLilgCisgKgorICogVGhlIGB0cmF2ZXJzZUNvbnRleHRgIGlzIGFuIG9w
dGlvbmFsIGFyZ3VtZW50IHRoYXQgaXMgcGFzc2VkIHRocm91Z2ggdGhlCisgKiBlbnRpcmUgdHJh
dmVyc2FsLiBJdCBjYW4gYmUgdXNlZCB0byBzdG9yZSBhY2N1bXVsYXRpb25zIG9yIGFueXRoaW5n
IGVsc2UgdGhhdAorICogdGhlIGNhbGxiYWNrIG1pZ2h0IGZpbmQgcmVsZXZhbnQuCisgKgorICog
QHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBvYmplY3QuCisgKiBAcGFyYW0geyFm
dW5jdGlvbn0gY2FsbGJhY2sgVG8gaW52b2tlIHVwb24gdHJhdmVyc2luZyBlYWNoIGNoaWxkLgor
ICogQHBhcmFtIHs/Kn0gdHJhdmVyc2VDb250ZXh0IENvbnRleHQgZm9yIHRyYXZlcnNhbC4KKyAq
IEByZXR1cm4geyFudW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hpbGRyZW4gaW4gdGhpcyBzdWJ0cmVl
LgorICovCitmdW5jdGlvbiB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBjYWxsYmFjaywg
dHJhdmVyc2VDb250ZXh0KSB7CisgIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7CisgICAgcmV0dXJu
IDA7CisgIH0KKworICByZXR1cm4gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGRyZW4sICcn
LCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KTsKK30KKworbW9kdWxlLmV4cG9ydHMgPSB0cmF2
ZXJzZUFsbENoaWxkcmVuOworfSx7IjEiOjEsIjExIjoxMSwiMjIiOjIyLCIyNSI6MjUsIjI5Ijoy
OSwiMzAiOjMwLCI4Ijo4fV0sMjc6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewor
InVzZSBzdHJpY3QiOworCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNl
Ym9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBj
b2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUK
KyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJl
ZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQg
aW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICogCisgKi8K
KworZnVuY3Rpb24gbWFrZUVtcHR5RnVuY3Rpb24oYXJnKSB7CisgIHJldHVybiBmdW5jdGlvbiAo
KSB7CisgICAgcmV0dXJuIGFyZzsKKyAgfTsKK30KKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGFj
Y2VwdHMgYW5kIGRpc2NhcmRzIGlucHV0czsgaXQgaGFzIG5vIHNpZGUgZWZmZWN0cy4gVGhpcyBp
cworICogcHJpbWFyaWx5IHVzZWZ1bCBpZGlvbWF0aWNhbGx5IGZvciBvdmVycmlkYWJsZSBmdW5j
dGlvbiBlbmRwb2ludHMgd2hpY2gKKyAqIGFsd2F5cyBuZWVkIHRvIGJlIGNhbGxhYmxlLCBzaW5j
ZSBKUyBsYWNrcyBhIG51bGwtY2FsbCBpZGlvbSBhbGEgQ29jb2EuCisgKi8KK3ZhciBlbXB0eUZ1
bmN0aW9uID0gZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9OworCitlbXB0eUZ1bmN0aW9uLnRo
YXRSZXR1cm5zID0gbWFrZUVtcHR5RnVuY3Rpb247CitlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5z
RmFsc2UgPSBtYWtlRW1wdHlGdW5jdGlvbihmYWxzZSk7CitlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1
cm5zVHJ1ZSA9IG1ha2VFbXB0eUZ1bmN0aW9uKHRydWUpOworZW1wdHlGdW5jdGlvbi50aGF0UmV0
dXJuc051bGwgPSBtYWtlRW1wdHlGdW5jdGlvbihudWxsKTsKK2VtcHR5RnVuY3Rpb24udGhhdFJl
dHVybnNUaGlzID0gZnVuY3Rpb24gKCkgeworICByZXR1cm4gdGhpczsKK307CitlbXB0eUZ1bmN0
aW9uLnRoYXRSZXR1cm5zQXJndW1lbnQgPSBmdW5jdGlvbiAoYXJnKSB7CisgIHJldHVybiBhcmc7
Cit9OworCittb2R1bGUuZXhwb3J0cyA9IGVtcHR5RnVuY3Rpb247Cit9LHt9XSwyODpbZnVuY3Rp
b24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxMy1w
cmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBm
b3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhp
cyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBj
YW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisg
KgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIGVtcHR5T2JqZWN0ID0ge307CisKK2lmICgi
ZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgT2JqZWN0LmZyZWV6ZShlbXB0eU9i
amVjdCk7Cit9CisKK21vZHVsZS5leHBvcnRzID0gZW1wdHlPYmplY3Q7Cit9LHt9XSwyOTpbZnVu
Y3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAoYykgMjAx
My1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5z
ZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2Yg
dGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0
cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnku
CisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKworLyoqCisgKiBVc2UgaW52YXJpYW50KCkgdG8g
YXNzZXJ0IHN0YXRlIHdoaWNoIHlvdXIgcHJvZ3JhbSBhc3N1bWVzIHRvIGJlIHRydWUuCisgKgor
ICogUHJvdmlkZSBzcHJpbnRmLXN0eWxlIGZvcm1hdCAob25seSAlcyBpcyBzdXBwb3J0ZWQpIGFu
ZCBhcmd1bWVudHMKKyAqIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBicm9rZSBh
bmQgd2hhdCB5b3Ugd2VyZQorICogZXhwZWN0aW5nLgorICoKKyAqIFRoZSBpbnZhcmlhbnQgbWVz
c2FnZSB3aWxsIGJlIHN0cmlwcGVkIGluIHByb2R1Y3Rpb24sIGJ1dCB0aGUgaW52YXJpYW50Cisg
KiB3aWxsIHJlbWFpbiB0byBlbnN1cmUgbG9naWMgZG9lcyBub3QgZGlmZmVyIGluIHByb2R1Y3Rp
b24uCisgKi8KKwordmFyIHZhbGlkYXRlRm9ybWF0ID0gZnVuY3Rpb24gdmFsaWRhdGVGb3JtYXQo
Zm9ybWF0KSB7fTsKKworaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICB2
YWxpZGF0ZUZvcm1hdCA9IGZ1bmN0aW9uIHZhbGlkYXRlRm9ybWF0KGZvcm1hdCkgeworICAgIGlm
IChmb3JtYXQgPT09IHVuZGVmaW5lZCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhcmlh
bnQgcmVxdWlyZXMgYW4gZXJyb3IgbWVzc2FnZSBhcmd1bWVudCcpOworICAgIH0KKyAgfTsKK30K
KworZnVuY3Rpb24gaW52YXJpYW50KGNvbmRpdGlvbiwgZm9ybWF0LCBhLCBiLCBjLCBkLCBlLCBm
KSB7CisgIHZhbGlkYXRlRm9ybWF0KGZvcm1hdCk7CisKKyAgaWYgKCFjb25kaXRpb24pIHsKKyAg
ICB2YXIgZXJyb3I7CisgICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7CisgICAgICBlcnJv
ciA9IG5ldyBFcnJvcignTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1t
aW5pZmllZCBkZXYgZW52aXJvbm1lbnQgJyArICdmb3IgdGhlIGZ1bGwgZXJyb3IgbWVzc2FnZSBh
bmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLicpOworICAgIH0gZWxzZSB7CisgICAgICB2
YXIgYXJncyA9IFthLCBiLCBjLCBkLCBlLCBmXTsKKyAgICAgIHZhciBhcmdJbmRleCA9IDA7Cisg
ICAgICBlcnJvciA9IG5ldyBFcnJvcihmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24gKCkg
eworICAgICAgICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTsKKyAgICAgIH0pKTsKKyAgICAgIGVy
cm9yLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7CisgICAgfQorCisgICAgZXJyb3IuZnJh
bWVzVG9Qb3AgPSAxOyAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IGludmFyaWFudCdzIG93biBmcmFt
ZQorICAgIHRocm93IGVycm9yOworICB9Cit9CisKK21vZHVsZS5leHBvcnRzID0gaW52YXJpYW50
OworfSx7fV0sMzA6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBD
b3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5
bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJl
Y3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0
ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBk
aXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIGVtcHR5RnVuY3Rpb24g
PSBfZGVyZXFfKDI3KTsKKworLyoqCisgKiBTaW1pbGFyIHRvIGludmFyaWFudCBidXQgb25seSBs
b2dzIGEgd2FybmluZyBpZiB0aGUgY29uZGl0aW9uIGlzIG5vdCBtZXQuCisgKiBUaGlzIGNhbiBi
ZSB1c2VkIHRvIGxvZyBpc3N1ZXMgaW4gZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzIGluIGNyaXRp
Y2FsCisgKiBwYXRocy4gUmVtb3ZpbmcgdGhlIGxvZ2dpbmcgY29kZSBmb3IgcHJvZHVjdGlvbiBl
bnZpcm9ubWVudHMgd2lsbCBrZWVwIHRoZQorICogc2FtZSBsb2dpYyBhbmQgZm9sbG93IHRoZSBz
YW1lIGNvZGUgcGF0aHMuCisgKi8KKwordmFyIHdhcm5pbmcgPSBlbXB0eUZ1bmN0aW9uOworCitp
ZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgIChmdW5jdGlvbiAoKSB7Cisg
ICAgdmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uIHByaW50V2FybmluZyhmb3JtYXQpIHsKKyAg
ICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+
IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykgeworICAg
ICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTsKKyAgICAgIH0KKworICAgICAg
dmFyIGFyZ0luZGV4ID0gMDsKKyAgICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyBmb3Jt
YXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gYXJnc1thcmdJ
bmRleCsrXTsKKyAgICAgIH0pOworICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZp
bmVkJykgeworICAgICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpOworICAgICAgfQorICAgICAg
dHJ5IHsKKyAgICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLQorICAg
ICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlv
dSBjYW4gdXNlIHRoaXMgc3RhY2sKKyAgICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhh
dCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuCisgICAgICAgIHRocm93IG5ldyBFcnJvciht
ZXNzYWdlKTsKKyAgICAgIH0gY2F0Y2ggKHgpIHt9CisgICAgfTsKKworICAgIHdhcm5pbmcgPSBm
dW5jdGlvbiB3YXJuaW5nKGNvbmRpdGlvbiwgZm9ybWF0KSB7CisgICAgICBpZiAoZm9ybWF0ID09
PSB1bmRlZmluZWQpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdgd2FybmluZyhjb25kaXRp
b24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICsgJ21lc3NhZ2UgYXJn
dW1lbnQnKTsKKyAgICAgIH0KKworICAgICAgaWYgKGZvcm1hdC5pbmRleE9mKCdGYWlsZWQgQ29t
cG9zaXRlIHByb3BUeXBlOiAnKSA9PT0gMCkgeworICAgICAgICByZXR1cm47IC8vIElnbm9yZSBD
b21wb3NpdGVDb21wb25lbnQgcHJvcHR5cGUgY2hlY2suCisgICAgICB9CisKKyAgICAgIGlmICgh
Y29uZGl0aW9uKSB7CisgICAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwg
YXJncyA9IEFycmF5KF9sZW4yID4gMiA/IF9sZW4yIC0gMiA6IDApLCBfa2V5MiA9IDI7IF9rZXky
IDwgX2xlbjI7IF9rZXkyKyspIHsKKyAgICAgICAgICBhcmdzW19rZXkyIC0gMl0gPSBhcmd1bWVu
dHNbX2tleTJdOworICAgICAgICB9CisKKyAgICAgICAgcHJpbnRXYXJuaW5nLmFwcGx5KHVuZGVm
aW5lZCwgW2Zvcm1hdF0uY29uY2F0KGFyZ3MpKTsKKyAgICAgIH0KKyAgICB9OworICB9KSgpOwor
fQorCittb2R1bGUuZXhwb3J0cyA9IHdhcm5pbmc7Cit9LHsiMjciOjI3fV0sMzE6W2Z1bmN0aW9u
KF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoKK29iamVjdC1hc3NpZ24KKyhjKSBTaW5kcmUg
U29yaHVzCitAbGljZW5zZSBNSVQKKyovCisKKyd1c2Ugc3RyaWN0JzsKKy8qIGVzbGludC1kaXNh
YmxlIG5vLXVudXNlZC12YXJzICovCit2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0
LmdldE93blByb3BlcnR5U3ltYm9sczsKK3ZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90
b3R5cGUuaGFzT3duUHJvcGVydHk7Cit2YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90
b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7CisKK2Z1bmN0aW9uIHRvT2JqZWN0KHZhbCkgewor
ICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgdGhy
b3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVs
bCBvciB1bmRlZmluZWQnKTsKKyAgICB9CisKKyAgICByZXR1cm4gT2JqZWN0KHZhbCk7Cit9CisK
K2Z1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHsKKyAgICB0cnkgeworICAgICAgICBpZiAoIU9i
amVjdC5hc3NpZ24pIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRl
ciBWOCB2ZXJzaW9ucy4KKworICAgICAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Av
djgvaXNzdWVzL2RldGFpbD9pZD00MTE4CisgICAgICAgIHZhciB0ZXN0MSA9IG5ldyBTdHJpbmco
J2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnMKKyAgICAgICAg
dGVzdDFbNV0gPSAnZGUnOworICAgICAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMo
dGVzdDEpWzBdID09PSAnNScpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0
YWlsP2lkPTMwNTYKKyAgICAgICAgdmFyIHRlc3QyID0ge307CisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMTA7IGkrKykgeworICAgICAgICAgICAgdGVzdDJbJ18nICsgU3RyaW5nLmZyb21D
aGFyQ29kZShpKV0gPSBpOworICAgICAgICB9CisgICAgICAgIHZhciBvcmRlcjIgPSBPYmplY3Qu
Z2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7CisgICAgICAgICAg
ICByZXR1cm4gdGVzdDJbbl07CisgICAgICAgIH0pOworICAgICAgICBpZiAob3JkZXIyLmpvaW4o
JycpICE9PSAnMDEyMzQ1Njc4OScpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMv
ZGV0YWlsP2lkPTMwNTYKKyAgICAgICAgdmFyIHRlc3QzID0ge307CisgICAgICAgICdhYmNkZWZn
aGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikgeworICAg
ICAgICAgICAgdGVzdDNbbGV0dGVyXSA9IGxldHRlcjsKKyAgICAgICAgfSk7CisgICAgICAgIGlm
IChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PQorICAg
ICAgICAgICAgICAgICdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gY2F0Y2gg
KGVycikgeworICAgICAgICAvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0
aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCittb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2ln
biA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkgeworICAgIHZhciBmcm9tOworICAgIHZhciB0
byA9IHRvT2JqZWN0KHRhcmdldCk7CisgICAgdmFyIHN5bWJvbHM7CisKKyAgICBmb3IgKHZhciBz
ID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykgeworICAgICAgICBmcm9tID0gT2JqZWN0
KGFyZ3VtZW50c1tzXSk7CisKKyAgICAgICAgZm9yICh2YXIga2V5IGluIGZyb20pIHsKKyAgICAg
ICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHsKKyAgICAgICAgICAg
ICAgICB0b1trZXldID0gZnJvbVtrZXldOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGdldE93blByb3BlcnR5U3ltYm9scykgeworICAgICAgICAgICAgc3ltYm9scyA9
IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChwcm9wSXNF
bnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0bzsKK307CisKK30s
e31dLDMyOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJp
Z2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxl
IGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0
b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVu
dCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGly
ZWN0b3J5LgorICovCisKKyd1c2Ugc3RyaWN0JzsKKworaWYgKCJkZXZlbG9wbWVudCIgIT09ICdw
cm9kdWN0aW9uJykgeworICB2YXIgaW52YXJpYW50ID0gX2RlcmVxXygyOSk7CisgIHZhciB3YXJu
aW5nID0gX2RlcmVxXygzMCk7CisgIHZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IF9kZXJlcV8o
MzUpOworICB2YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307Cit9CisKKy8qKgorICogQXNzZXJ0
IHRoYXQgdGhlIHZhbHVlcyBtYXRjaCB3aXRoIHRoZSB0eXBlIHNwZWNzLgorICogRXJyb3IgbWVz
c2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuCisgKgorICog
QHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgbmFtZSB0byBhIFJlYWN0UHJvcFR5cGUK
KyAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJl
IHR5cGUtY2hlY2tlZAorICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gInByb3AiLCAi
Y29udGV4dCIsICJjaGlsZCBjb250ZXh0IgorICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5h
bWUgTmFtZSBvZiB0aGUgY29tcG9uZW50IGZvciBlcnJvciBtZXNzYWdlcy4KKyAqIEBwYXJhbSB7
P0Z1bmN0aW9ufSBnZXRTdGFjayBSZXR1cm5zIHRoZSBjb21wb25lbnQgc3RhY2suCisgKiBAcHJp
dmF0ZQorICovCitmdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9j
YXRpb24sIGNvbXBvbmVudE5hbWUsIGdldFN0YWNrKSB7CisgIGlmICgiZGV2ZWxvcG1lbnQiICE9
PSAncHJvZHVjdGlvbicpIHsKKyAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNz
KSB7CisgICAgICBpZiAodHlwZVNwZWNzLmhhc093blByb3BlcnR5KHR5cGVTcGVjTmFtZSkpIHsK
KyAgICAgICAgdmFyIGVycm9yOworICAgICAgICAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkg
dGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0bworICAgICAgICAvLyBmYWls
IHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cg
aXQuCisgICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBs
ZXQgdGhlbSB0aHJvdy4KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAvLyBUaGlzIGlzIGludGVu
dGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWUKKyAg
ICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRo
IGEgYmV0dGVyIG1lc3NhZ2UuCisgICAgICAgICAgaW52YXJpYW50KHR5cGVvZiB0eXBlU3BlY3Nb
dHlwZVNwZWNOYW1lXSA9PT0gJ2Z1bmN0aW9uJywgJyVzOiAlcyB0eXBlIGAlc2AgaXMgaW52YWxp
ZDsgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gJyArICdSZWFjdC5Qcm9wVHlw
ZXMuJywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBsb2NhdGlvbiwgdHlwZVNwZWNO
YW1lKTsKKyAgICAgICAgICBlcnJvciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywg
dHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlw
ZXNTZWNyZXQpOworICAgICAgICB9IGNhdGNoIChleCkgeworICAgICAgICAgIGVycm9yID0gZXg7
CisgICAgICAgIH0KKyAgICAgICAgd2FybmluZyghZXJyb3IgfHwgZXJyb3IgaW5zdGFuY2VvZiBF
cnJvciwgJyVzOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJXMgYCVzYCBpcyBpbnZhbGlkOyB0aGUg
dHlwZSBjaGVja2VyICcgKyAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJv
cmAgYnV0IHJldHVybmVkIGEgJXMuICcgKyAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNz
IGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArICdjcmVhdG9yIChhcnJheU9mLCBp
bnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgKyAnc2hhcGUgYWxs
IHJlcXVpcmUgYW4gYXJndW1lbnQpLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywg
bG9jYXRpb24sIHR5cGVTcGVjTmFtZSwgdHlwZW9mIGVycm9yKTsKKyAgICAgICAgaWYgKGVycm9y
IGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvci5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJl
cykpIHsKKyAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVz
ZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGUKKyAgICAgICAgICAvLyBzYW1lIGVycm9y
LgorICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvci5tZXNzYWdlXSA9IHRydWU7CisK
KyAgICAgICAgICB2YXIgc3RhY2sgPSBnZXRTdGFjayA/IGdldFN0YWNrKCkgOiAnJzsKKworICAg
ICAgICAgIHdhcm5pbmcoZmFsc2UsICdGYWlsZWQgJXMgdHlwZTogJXMlcycsIGxvY2F0aW9uLCBl
cnJvci5tZXNzYWdlLCBzdGFjayAhPSBudWxsID8gc3RhY2sgOiAnJyk7CisgICAgICAgIH0KKyAg
ICAgIH0KKyAgICB9CisgIH0KK30KKworbW9kdWxlLmV4cG9ydHMgPSBjaGVja1Byb3BUeXBlczsK
KworfSx7IjI5IjoyOSwiMzAiOjMwLCIzNSI6MzV9XSwzMzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1
bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJ
bmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMg
bGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElD
RU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBh
ZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUg
UEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqLworCisndXNlIHN0cmljdCc7
CisKKy8vIFJlYWN0IDE1LjUgcmVmZXJlbmNlcyB0aGlzIG1vZHVsZSwgYW5kIGFzc3VtZXMgUHJv
cFR5cGVzIGFyZSBzdGlsbCBjYWxsYWJsZSBpbiBwcm9kdWN0aW9uLgorLy8gVGhlcmVmb3JlIHdl
IHJlLWV4cG9ydCBkZXZlbG9wbWVudC1vbmx5IHZlcnNpb24gd2l0aCBhbGwgdGhlIFByb3BUeXBl
cyBjaGVja3MgaGVyZS4KKy8vIEhvd2V2ZXIgaWYgb25lIGlzIG1pZ3JhdGluZyB0byB0aGUgYHBy
b3AtdHlwZXNgIG5wbSBsaWJyYXJ5LCB0aGV5IHdpbGwgZ28gdGhyb3VnaCB0aGUKKy8vIGBpbmRl
eC5qc2AgZW50cnkgcG9pbnQsIGFuZCBpdCB3aWxsIGJyYW5jaCBkZXBlbmRpbmcgb24gdGhlIGVu
dmlyb25tZW50LgordmFyIGZhY3RvcnkgPSBfZGVyZXFfKDM0KTsKK21vZHVsZS5leHBvcnRzID0g
ZnVuY3Rpb24oaXNWYWxpZEVsZW1lbnQpIHsKKyAgLy8gSXQgaXMgc3RpbGwgYWxsb3dlZCBpbiAx
NS41LgorICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IGZhbHNlOworICByZXR1cm4gZmFjdG9y
eShpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7Cit9OworCit9LHsiMzQiOjM0
fV0sMzQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmln
aHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUg
bGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rv
cnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50
IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJl
Y3RvcnkuCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgZW1wdHlGdW5jdGlvbiA9IF9kZXJl
cV8oMjcpOwordmFyIGludmFyaWFudCA9IF9kZXJlcV8oMjkpOwordmFyIHdhcm5pbmcgPSBfZGVy
ZXFfKDMwKTsKKwordmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gX2RlcmVxXygzNSk7Cit2YXIg
Y2hlY2tQcm9wVHlwZXMgPSBfZGVyZXFfKDMyKTsKKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlv
bihpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2VzcykgeworICAvKiBnbG9iYWwgU3lt
Ym9sICovCisgIHZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rp
b24nICYmIFN5bWJvbC5pdGVyYXRvcjsKKyAgdmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BA
aXRlcmF0b3InOyAvLyBCZWZvcmUgU3ltYm9sIHNwZWMuCisKKyAgLyoqCisgICAqIFJldHVybnMg
dGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9i
amVjdC4KKyAgICoKKyAgICogQmUgc3VyZSB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhl
IGl0ZXJhYmxlIGFzIGNvbnRleHQ6CisgICAqCisgICAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdl
dEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7CisgICAqICAgICBpZiAoaXRlcmF0b3JGbikgeworICAg
KiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7CisgICAq
ICAgICAgIC4uLgorICAgKiAgICAgfQorICAgKgorICAgKiBAcGFyYW0gez9vYmplY3R9IG1heWJl
SXRlcmFibGUKKyAgICogQHJldHVybiB7P2Z1bmN0aW9ufQorICAgKi8KKyAgZnVuY3Rpb24gZ2V0
SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7CisgICAgdmFyIGl0ZXJhdG9yRm4gPSBtYXliZUl0
ZXJhYmxlICYmIChJVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtJVEVSQVRPUl9TWU1C
T0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdKTsKKyAgICBpZiAodHlw
ZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHsKKyAgICAgIHJldHVybiBpdGVyYXRvckZu
OworICAgIH0KKyAgfQorCisgIC8qKgorICAgKiBDb2xsZWN0aW9uIG9mIG1ldGhvZHMgdGhhdCBh
bGxvdyBkZWNsYXJhdGlvbiBhbmQgdmFsaWRhdGlvbiBvZiBwcm9wcyB0aGF0IGFyZQorICAgKiBz
dXBwbGllZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOgorICAgKgorICAgKiAg
IHZhciBQcm9wcyA9IHJlcXVpcmUoJ1JlYWN0UHJvcFR5cGVzJyk7CisgICAqICAgdmFyIE15QXJ0
aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHsKKyAgICogICAgIHByb3BUeXBlczogeworICAgKiAg
ICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgcHJvcCBuYW1lZCAiZGVzY3JpcHRpb24iLgorICAg
KiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLAorICAgKgorICAgKiAgICAgICAvLyBB
IHJlcXVpcmVkIGVudW0gcHJvcCBuYW1lZCAiY2F0ZWdvcnkiLgorICAgKiAgICAgICBjYXRlZ29y
eTogUHJvcHMub25lT2YoWydOZXdzJywnUGhvdG9zJ10pLmlzUmVxdWlyZWQsCisgICAqCisgICAq
ICAgICAgIC8vIEEgcHJvcCBuYW1lZCAiZGlhbG9nIiB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNl
IG9mIERpYWxvZy4KKyAgICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZyku
aXNSZXF1aXJlZAorICAgKiAgICAgfSwKKyAgICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7IC4u
LiB9CisgICAqICAgfSk7CisgICAqCisgICAqIEEgbW9yZSBmb3JtYWwgc3BlY2lmaWNhdGlvbiBv
ZiBob3cgdGhlc2UgbWV0aG9kcyBhcmUgdXNlZDoKKyAgICoKKyAgICogICB0eXBlIDo9IGFycmF5
fGJvb2x8ZnVuY3xvYmplY3R8bnVtYmVyfHN0cmluZ3xvbmVPZihbLi4uXSl8aW5zdGFuY2VPZigu
Li4pCisgICAqICAgZGVjbCA6PSBSZWFjdFByb3BUeXBlcy57dHlwZX0oLmlzUmVxdWlyZWQpPwor
ICAgKgorICAgKiBFYWNoIGFuZCBldmVyeSBkZWNsYXJhdGlvbiBwcm9kdWNlcyBhIGZ1bmN0aW9u
IHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlLiBUaGlzCisgICAqIGFsbG93cyB0aGUgY3JlYXRpb24g
b2YgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25zLiBGb3IgZXhhbXBsZToKKyAgICoKKyAgICog
IHZhciBNeUxpbmsgPSBSZWFjdC5jcmVhdGVDbGFzcyh7CisgICAqICAgIHByb3BUeXBlczogewor
ICAgKiAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBvciBVUkkgcHJvcCBuYW1lZCAiaHJlZiIu
CisgICAqICAgICAgaHJlZjogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1l
KSB7CisgICAqICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdOworICAgKiAg
ICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJp
bmcnICYmCisgICAqICAgICAgICAgICAgIShwcm9wVmFsdWUgaW5zdGFuY2VvZiBVUkkpKSB7Cisg
ICAqICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoCisgICAqICAgICAgICAgICAgJ0V4cGVjdGVk
IGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICsKKyAgICogICAg
ICAgICAgICBjb21wb25lbnROYW1lCisgICAqICAgICAgICAgICk7CisgICAqICAgICAgICB9Cisg
ICAqICAgICAgfQorICAgKiAgICB9LAorICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn0K
KyAgICogIH0pOworICAgKgorICAgKiBAaW50ZXJuYWwKKyAgICovCisKKyAgdmFyIEFOT05ZTU9V
UyA9ICc8PGFub255bW91cz4+JzsKKworICAvLyBJbXBvcnRhbnQhCisgIC8vIEtlZXAgdGhpcyBs
aXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJv
d2luZ1NoaW1zLmpzYC4KKyAgdmFyIFJlYWN0UHJvcFR5cGVzID0geworICAgIGFycmF5OiBjcmVh
dGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYXJyYXknKSwKKyAgICBib29sOiBjcmVhdGVQcmltaXRp
dmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLAorICAgIGZ1bmM6IGNyZWF0ZVByaW1pdGl2ZVR5cGVD
aGVja2VyKCdmdW5jdGlvbicpLAorICAgIG51bWJlcjogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNr
ZXIoJ251bWJlcicpLAorICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29i
amVjdCcpLAorICAgIHN0cmluZzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N0cmluZycp
LAorICAgIHN5bWJvbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N5bWJvbCcpLAorCisg
ICAgYW55OiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpLAorICAgIGFycmF5T2Y6IGNyZWF0ZUFycmF5
T2ZUeXBlQ2hlY2tlciwKKyAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSwK
KyAgICBpbnN0YW5jZU9mOiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2VyLAorICAgIG5vZGU6IGNy
ZWF0ZU5vZGVDaGVja2VyKCksCisgICAgb2JqZWN0T2Y6IGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNr
ZXIsCisgICAgb25lT2Y6IGNyZWF0ZUVudW1UeXBlQ2hlY2tlciwKKyAgICBvbmVPZlR5cGU6IGNy
ZWF0ZVVuaW9uVHlwZUNoZWNrZXIsCisgICAgc2hhcGU6IGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIK
KyAgfTsKKworICAvKioKKyAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQg
cmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93bgorICAgKiBodHRwczovL2RldmVsb3Bl
ci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxf
T2JqZWN0cy9PYmplY3QvaXMKKyAgICovCisgIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21w
YXJlKi8KKyAgZnVuY3Rpb24gaXMoeCwgeSkgeworICAgIC8vIFNhbWVWYWx1ZSBhbGdvcml0aG0K
KyAgICBpZiAoeCA9PT0geSkgeworICAgICAgLy8gU3RlcHMgMS01LCA3LTEwCisgICAgICAvLyBT
dGVwcyA2LmItNi5lOiArMCAhPSAtMAorICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09
IDEgLyB5OworICAgIH0gZWxzZSB7CisgICAgICAvLyBTdGVwIDYuYTogTmFOID09IE5hTgorICAg
ICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTsKKyAgICB9CisgIH0KKyAgLyplc2xpbnQtZW5h
YmxlIG5vLXNlbGYtY29tcGFyZSovCisKKyAgLyoqCisgICAqIFdlIHVzZSBhbiBFcnJvci1saWtl
IG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGwKKyAg
ICogUHJvcFR5cGVzIGRpcmVjdGx5IGFuZCBpbnNwZWN0IHRoZWlyIG91dHB1dC4gSG93ZXZlciwg
d2UgZG9uJ3QgdXNlIHJlYWwKKyAgICogRXJyb3JzIGFueW1vcmUuIFdlIGRvbid0IGluc3BlY3Qg
dGhlaXIgc3RhY2sgYW55d2F5LCBhbmQgY3JlYXRpbmcgdGhlbQorICAgKiBpcyBwcm9oaWJpdGl2
ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0
CisgICAqIGhhcHBlbnMgaW4gb25lT2ZUeXBlKCkgZm9yIGFueSB0eXBlIGJlZm9yZSB0aGUgb25l
IHRoYXQgbWF0Y2hlZC4KKyAgICovCisgIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSkg
eworICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgdGhpcy5zdGFjayA9ICcnOworICB9
CisgIC8vIE1ha2UgYGluc3RhbmNlb2YgRXJyb3JgIHN0aWxsIHdvcmsgZm9yIHJldHVybmVkIGVy
cm9ycy4KKyAgUHJvcFR5cGVFcnJvci5wcm90b3R5cGUgPSBFcnJvci5wcm90b3R5cGU7CisKKyAg
ZnVuY3Rpb24gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpIHsKKyAgICBpZiAo
ImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgICB2YXIgbWFudWFsUHJvcFR5
cGVDYWxsQ2FjaGUgPSB7fTsKKyAgICB9CisgICAgZnVuY3Rpb24gY2hlY2tUeXBlKGlzUmVxdWly
ZWQsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFt
ZSwgc2VjcmV0KSB7CisgICAgICBjb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZSB8fCBBTk9O
WU1PVVM7CisgICAgICBwcm9wRnVsbE5hbWUgPSBwcm9wRnVsbE5hbWUgfHwgcHJvcE5hbWU7CisK
KyAgICAgIGlmIChzZWNyZXQgIT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7CisgICAgICAgIGlm
ICh0aHJvd09uRGlyZWN0QWNjZXNzKSB7CisgICAgICAgICAgLy8gTmV3IGJlaGF2aW9yIG9ubHkg
Zm9yIHVzZXJzIG9mIGBwcm9wLXR5cGVzYCBwYWNrYWdlCisgICAgICAgICAgaW52YXJpYW50KAor
ICAgICAgICAgICAgZmFsc2UsCisgICAgICAgICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRh
dG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2Fn
ZS4gJyArCisgICAgICAgICAgICAnVXNlIGBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKWAgdG8g
Y2FsbCB0aGVtLiAnICsKKyAgICAgICAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3Vz
ZS1jaGVjay1wcm9wLXR5cGVzJworICAgICAgICAgICk7CisgICAgICAgIH0gZWxzZSBpZiAoImRl
dmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZp
bmVkJykgeworICAgICAgICAgIC8vIE9sZCBiZWhhdmlvciBmb3IgcGVvcGxlIHVzaW5nIFJlYWN0
LlByb3BUeXBlcworICAgICAgICAgIHZhciBjYWNoZUtleSA9IGNvbXBvbmVudE5hbWUgKyAnOicg
KyBwcm9wTmFtZTsKKyAgICAgICAgICBpZiAoIW1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hl
S2V5XSkgeworICAgICAgICAgICAgd2FybmluZygKKyAgICAgICAgICAgICAgZmFsc2UsCisgICAg
ICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFs
aWRhdGlvbiAnICsKKyAgICAgICAgICAgICAgJ2Z1bmN0aW9uIGZvciB0aGUgYCVzYCBwcm9wIG9u
IGAlc2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICsKKyAgICAgICAgICAgICAgJ2FuZCB3aWxsIHRo
cm93IGluIHRoZSBzdGFuZGFsb25lIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICsKKyAgICAgICAg
ICAgICAgJ1lvdSBtYXkgYmUgc2VlaW5nIHRoaXMgd2FybmluZyBkdWUgdG8gYSB0aGlyZC1wYXJ0
eSBQcm9wVHlwZXMgJyArCisgICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5t
ZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nLAor
ICAgICAgICAgICAgICBwcm9wRnVsbE5hbWUsCisgICAgICAgICAgICAgIGNvbXBvbmVudE5hbWUK
KyAgICAgICAgICAgICk7CisgICAgICAgICAgICBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNo
ZUtleV0gPSB0cnVlOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYg
KHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7CisgICAgICAgIGlmIChpc1JlcXVpcmVkKSB7Cisg
ICAgICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gbnVsbCkgeworICAgICAgICAgICAgcmV0
dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxs
TmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCAnICsgKCdpbiBgJyArIGNvbXBvbmVudE5h
bWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuJykpOworICAgICAgICAgIH0KKyAgICAg
ICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsg
cHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluICcgKyAoJ2AnICsgY29t
cG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGB1bmRlZmluZWRgLicpKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVy
biB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9w
RnVsbE5hbWUpOworICAgICAgfQorICAgIH0KKworICAgIHZhciBjaGFpbmVkQ2hlY2tUeXBlID0g
Y2hlY2tUeXBlLmJpbmQobnVsbCwgZmFsc2UpOworICAgIGNoYWluZWRDaGVja1R5cGUuaXNSZXF1
aXJlZCA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIHRydWUpOworCisgICAgcmV0dXJuIGNoYWluZWRD
aGVja1R5cGU7CisgIH0KKworICBmdW5jdGlvbiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcihl
eHBlY3RlZFR5cGUpIHsKKyAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNv
bXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkgeworICAgICAgdmFy
IHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTsKKyAgICAgIHZhciBwcm9wVHlwZSA9IGdldFBy
b3BUeXBlKHByb3BWYWx1ZSk7CisgICAgICBpZiAocHJvcFR5cGUgIT09IGV4cGVjdGVkVHlwZSkg
eworICAgICAgICAvLyBgcHJvcFZhbHVlYCBiZWluZyBpbnN0YW5jZSBvZiwgc2F5LCBkYXRlL3Jl
Z2V4cCwgcGFzcyB0aGUgJ29iamVjdCcKKyAgICAgICAgLy8gY2hlY2ssIGJ1dCB3ZSBjYW4gb2Zm
ZXIgYSBtb3JlIHByZWNpc2UgZXJyb3IgbWVzc2FnZSBoZXJlIHJhdGhlciB0aGFuCisgICAgICAg
IC8vICdvZiB0eXBlIGBvYmplY3RgJy4KKyAgICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJl
Y2lzZVR5cGUocHJvcFZhbHVlKTsKKworICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3Io
J0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUg
JyArICgnYCcgKyBwcmVjaXNlVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFt
ZSArICdgLCBleHBlY3RlZCAnKSArICgnYCcgKyBleHBlY3RlZFR5cGUgKyAnYC4nKSk7CisgICAg
ICB9CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJs
ZVR5cGVDaGVja2VyKHZhbGlkYXRlKTsKKyAgfQorCisgIGZ1bmN0aW9uIGNyZWF0ZUFueVR5cGVD
aGVja2VyKCkgeworICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcihlbXB0eUZ1
bmN0aW9uLnRoYXRSZXR1cm5zTnVsbCk7CisgIH0KKworICBmdW5jdGlvbiBjcmVhdGVBcnJheU9m
VHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHsKKyAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywg
cHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHsKKyAgICAg
IGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgcmV0dXJu
IG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNv
bXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3Rh
dGlvbiBpbnNpZGUgYXJyYXlPZi4nKTsKKyAgICAgIH0KKyAgICAgIHZhciBwcm9wVmFsdWUgPSBw
cm9wc1twcm9wTmFtZV07CisgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkgewor
ICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpOworICAgICAgICBy
ZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHBy
b3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVk
IHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBhcnJheS4nKSk7CisgICAg
ICB9CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BWYWx1ZS5sZW5ndGg7IGkrKykgewor
ICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGksIGNvbXBvbmVudE5h
bWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnWycgKyBpICsgJ10nLCBSZWFjdFByb3BUeXBl
c1NlY3JldCk7CisgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7CisgICAgICAg
ICAgcmV0dXJuIGVycm9yOworICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4gbnVsbDsK
KyAgICB9CisgICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTsK
KyAgfQorCisgIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpIHsKKyAgICBmdW5j
dGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBw
cm9wRnVsbE5hbWUpIHsKKyAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07Cisg
ICAgICBpZiAoIWlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHsKKyAgICAgICAgdmFyIHByb3BU
eXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlw
ZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBv
ZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVu
dE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50LicpKTsKKyAgICAgIH0K
KyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlw
ZUNoZWNrZXIodmFsaWRhdGUpOworICB9CisKKyAgZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VUeXBl
Q2hlY2tlcihleHBlY3RlZENsYXNzKSB7CisgICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHBy
b3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7CisgICAgICBp
ZiAoIShwcm9wc1twcm9wTmFtZV0gaW5zdGFuY2VvZiBleHBlY3RlZENsYXNzKSkgeworICAgICAg
ICB2YXIgZXhwZWN0ZWRDbGFzc05hbWUgPSBleHBlY3RlZENsYXNzLm5hbWUgfHwgQU5PTllNT1VT
OworICAgICAgICB2YXIgYWN0dWFsQ2xhc3NOYW1lID0gZ2V0Q2xhc3NOYW1lKHByb3BzW3Byb3BO
YW1lXSk7CisgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9j
YXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIGFjdHVh
bENsYXNzTmFtZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBl
Y3RlZCAnKSArICgnaW5zdGFuY2Ugb2YgYCcgKyBleHBlY3RlZENsYXNzTmFtZSArICdgLicpKTsK
KyAgICAgIH0KKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICByZXR1cm4gY3JlYXRlQ2hh
aW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpOworICB9CisKKyAgZnVuY3Rpb24gY3JlYXRlRW51
bVR5cGVDaGVja2VyKGV4cGVjdGVkVmFsdWVzKSB7CisgICAgaWYgKCFBcnJheS5pc0FycmF5KGV4
cGVjdGVkVmFsdWVzKSkgeworICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8g
d2FybmluZyhmYWxzZSwgJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2YsIGV4cGVj
dGVkIGFuIGluc3RhbmNlIG9mIGFycmF5LicpIDogdm9pZCAwOworICAgICAgcmV0dXJuIGVtcHR5
RnVuY3Rpb24udGhhdFJldHVybnNOdWxsOworICAgIH0KKworICAgIGZ1bmN0aW9uIHZhbGlkYXRl
KHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkg
eworICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTsKKyAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKGlz
KHByb3BWYWx1ZSwgZXhwZWN0ZWRWYWx1ZXNbaV0pKSB7CisgICAgICAgICAgcmV0dXJuIG51bGw7
CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgdmFyIHZhbHVlc1N0cmluZyA9IEpTT04uc3Ry
aW5naWZ5KGV4cGVjdGVkVmFsdWVzKTsKKyAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcign
SW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdmFsdWUg
YCcgKyBwcm9wVmFsdWUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUg
KyAnYCwgZXhwZWN0ZWQgb25lIG9mICcgKyB2YWx1ZXNTdHJpbmcgKyAnLicpKTsKKyAgICB9Cisg
ICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTsKKyAgfQorCisg
IGZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHsKKyAgICBm
dW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9u
LCBwcm9wRnVsbE5hbWUpIHsKKyAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5j
dGlvbicpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyAr
IHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBo
YXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuJyk7CisgICAgICB9
CisgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdOworICAgICAgdmFyIHByb3BU
eXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTsKKyAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29i
amVjdCcpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBs
b2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJv
cFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQg
YW4gb2JqZWN0LicpKTsKKyAgICAgIH0KKyAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wVmFsdWUp
IHsKKyAgICAgICAgaWYgKHByb3BWYWx1ZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICAg
ICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUs
IGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0
KTsKKyAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikgeworICAgICAgICAgICAg
cmV0dXJuIGVycm9yOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgcmV0
dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2
YWxpZGF0ZSk7CisgIH0KKworICBmdW5jdGlvbiBjcmVhdGVVbmlvblR5cGVDaGVja2VyKGFycmF5
T2ZUeXBlQ2hlY2tlcnMpIHsKKyAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXlPZlR5cGVDaGVj
a2VycykpIHsKKyAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmco
ZmFsc2UsICdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQg
YW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7CisgICAgICByZXR1cm4gZW1wdHlGdW5j
dGlvbi50aGF0UmV0dXJuc051bGw7CisgICAgfQorCisgICAgZnVuY3Rpb24gdmFsaWRhdGUocHJv
cHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7Cisg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5T2ZUeXBlQ2hlY2tlcnMubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldOworICAgICAg
ICBpZiAoY2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBw
cm9wRnVsbE5hbWUsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KSA9PSBudWxsKSB7CisgICAgICAgICAg
cmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgcmV0dXJuIG5ldyBQcm9w
VHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAn
YCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nKSk7CisgICAgfQor
ICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7CisgIH0KKwor
ICBmdW5jdGlvbiBjcmVhdGVOb2RlQ2hlY2tlcigpIHsKKyAgICBmdW5jdGlvbiB2YWxpZGF0ZShw
cm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHsK
KyAgICAgIGlmICghaXNOb2RlKHByb3BzW3Byb3BOYW1lXSkpIHsKKyAgICAgICAgcmV0dXJuIG5l
dyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5h
bWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0
ZWQgYSBSZWFjdE5vZGUuJykpOworICAgICAgfQorICAgICAgcmV0dXJuIG51bGw7CisgICAgfQor
ICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7CisgIH0KKwor
ICBmdW5jdGlvbiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHsKKyAgICBmdW5j
dGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBw
cm9wRnVsbE5hbWUpIHsKKyAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07Cisg
ICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpOworICAgICAgaWYgKHBy
b3BUeXBlICE9PSAnb2JqZWN0JykgeworICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3Io
J0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUg
YCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSAr
ICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7CisgICAgICB9CisgICAgICBmb3IgKHZhciBrZXkg
aW4gc2hhcGVUeXBlcykgeworICAgICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTsK
KyAgICAgICAgaWYgKCFjaGVja2VyKSB7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KyAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFt
ZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNy
ZXQpOworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICByZXR1cm4gZXJyb3I7CisgICAg
ICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICByZXR1cm4gY3Jl
YXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpOworICB9CisKKyAgZnVuY3Rpb24gaXNO
b2RlKHByb3BWYWx1ZSkgeworICAgIHN3aXRjaCAodHlwZW9mIHByb3BWYWx1ZSkgeworICAgICAg
Y2FzZSAnbnVtYmVyJzoKKyAgICAgIGNhc2UgJ3N0cmluZyc6CisgICAgICBjYXNlICd1bmRlZmlu
ZWQnOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2UgJ2Jvb2xlYW4nOgorICAgICAg
ICByZXR1cm4gIXByb3BWYWx1ZTsKKyAgICAgIGNhc2UgJ29iamVjdCc6CisgICAgICAgIGlmIChB
cnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHsKKyAgICAgICAgICByZXR1cm4gcHJvcFZhbHVlLmV2
ZXJ5KGlzTm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHByb3BWYWx1ZSA9PT0gbnVsbCB8
fCBpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7CisgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKworICAgICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4ocHJvcFZh
bHVlKTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yRm4pIHsKKyAgICAgICAgICB2YXIgaXRlcmF0b3Ig
PSBpdGVyYXRvckZuLmNhbGwocHJvcFZhbHVlKTsKKyAgICAgICAgICB2YXIgc3RlcDsKKyAgICAg
ICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gcHJvcFZhbHVlLmVudHJpZXMpIHsKKyAgICAgICAgICAg
IHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHsKKyAgICAgICAgICAgICAg
aWYgKCFpc05vZGUoc3RlcC52YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgLy8gSXRlcmF0b3Igd2lsbCBwcm92aWRlIGVudHJ5IFtrLHZdIHR1cGxlcyByYXRo
ZXIgdGhhbiB2YWx1ZXMuCisgICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4
dCgpKS5kb25lKSB7CisgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHN0ZXAudmFsdWU7CisgICAg
ICAgICAgICAgIGlmIChlbnRyeSkgeworICAgICAgICAgICAgICAgIGlmICghaXNOb2RlKGVudHJ5
WzFdKSkgeworICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgIH0KKworICBmdW5jdGlvbiBpc1N5bWJvbChwcm9wVHlwZSwgcHJvcFZhbHVlKSB7CisgICAg
Ly8gTmF0aXZlIFN5bWJvbC4KKyAgICBpZiAocHJvcFR5cGUgPT09ICdzeW1ib2wnKSB7CisgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBl
W0BAdG9TdHJpbmdUYWddID09PSAnU3ltYm9sJworICAgIGlmIChwcm9wVmFsdWVbJ0BAdG9TdHJp
bmdUYWcnXSA9PT0gJ1N5bWJvbCcpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IC8vIEZhbGxiYWNrIGZvciBub24tc3BlYyBjb21wbGlhbnQgU3ltYm9scyB3aGljaCBhcmUgcG9s
eWZpbGxlZC4KKyAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBwcm9wVmFs
dWUgaW5zdGFuY2VvZiBTeW1ib2wpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKKyAgfQorCisgIC8vIEVxdWl2YWxlbnQgb2YgYHR5cGVvZmAgYnV0IHdp
dGggc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJyYXkgYW5kIHJlZ2V4cC4KKyAgZnVuY3Rpb24gZ2V0
UHJvcFR5cGUocHJvcFZhbHVlKSB7CisgICAgdmFyIHByb3BUeXBlID0gdHlwZW9mIHByb3BWYWx1
ZTsKKyAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7CisgICAgICByZXR1cm4gJ2Fy
cmF5JzsKKyAgICB9CisgICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkgeworICAg
ICAgLy8gT2xkIHdlYmtpdHMgKGF0IGxlYXN0IHVudGlsIEFuZHJvaWQgNC4wKSByZXR1cm4gJ2Z1
bmN0aW9uJyByYXRoZXIgdGhhbgorICAgICAgLy8gJ29iamVjdCcgZm9yIHR5cGVvZiBhIFJlZ0V4
cC4gV2UnbGwgbm9ybWFsaXplIHRoaXMgaGVyZSBzbyB0aGF0IC9ibGEvCisgICAgICAvLyBwYXNz
ZXMgUHJvcFR5cGVzLm9iamVjdC4KKyAgICAgIHJldHVybiAnb2JqZWN0JzsKKyAgICB9CisgICAg
aWYgKGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpKSB7CisgICAgICByZXR1cm4gJ3N5bWJv
bCc7CisgICAgfQorICAgIHJldHVybiBwcm9wVHlwZTsKKyAgfQorCisgIC8vIFRoaXMgaGFuZGxl
cyBtb3JlIHR5cGVzIHRoYW4gYGdldFByb3BUeXBlYC4gT25seSB1c2VkIGZvciBlcnJvciBtZXNz
YWdlcy4KKyAgLy8gU2VlIGBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcmAuCisgIGZ1bmN0aW9u
IGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSkgeworICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BU
eXBlKHByb3BWYWx1ZSk7CisgICAgaWYgKHByb3BUeXBlID09PSAnb2JqZWN0JykgeworICAgICAg
aWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHsKKyAgICAgICAgcmV0dXJuICdkYXRlJzsK
KyAgICAgIH0gZWxzZSBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7CisgICAgICAg
IHJldHVybiAncmVnZXhwJzsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHByb3BUeXBlOwor
ICB9CisKKyAgLy8gUmV0dXJucyBjbGFzcyBuYW1lIG9mIHRoZSBvYmplY3QsIGlmIGFueS4KKyAg
ZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKHByb3BWYWx1ZSkgeworICAgIGlmICghcHJvcFZhbHVlLmNv
bnN0cnVjdG9yIHx8ICFwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZSkgeworICAgICAgcmV0dXJu
IEFOT05ZTU9VUzsKKyAgICB9CisgICAgcmV0dXJuIHByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1l
OworICB9CisKKyAgUmVhY3RQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMgPSBjaGVja1Byb3BUeXBl
czsKKyAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7CisKKyAgcmV0
dXJuIFJlYWN0UHJvcFR5cGVzOworfTsKKworfSx7IjI3IjoyNywiMjkiOjI5LCIzMCI6MzAsIjMy
IjozMiwiMzUiOjM1fV0sMzU6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoq
CisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAor
ICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0
aGUgc2FtZSBkaXJlY3RvcnkuCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgUmVhY3RQcm9w
VHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklS
RUQnOworCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0OworCit9LHt9XX0s
e30sWzE4XSkoMTgpCit9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3QvZGlzdC9yZWFjdC5taW4uanMg
Yi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3QvZGlzdC9yZWFjdC5taW4uanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZDZhODQ0YjBjYTc4ZDBjNTBiYTM1YjU4ZjdjNjUxZDE1MTE4NzZkNgotLS0g
L2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9yZWFjdC9kaXN0
L3JlYWN0Lm1pbi5qcwpAQCAtMCwwICsxLDEyIEBACisvKioKKyAqIFJlYWN0IHYxNS41LjQKKyAq
CisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAor
ICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0
aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCishZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5
cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz10
KCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShb
XSx0KTtlbHNle3ZhciBlO2U9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRl
ZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2Vs
Zjp0aGlzLGUuUmVhY3Q9dCgpfX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlLG4scil7
ZnVuY3Rpb24gbyh1LGEpe2lmKCFuW3VdKXtpZighZVt1XSl7dmFyIHM9ImZ1bmN0aW9uIj09dHlw
ZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWEmJnMpcmV0dXJuIHModSwhMCk7aWYoaSlyZXR1cm4g
aSh1LCEwKTt2YXIgYz1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIit1KyInIik7dGhy
b3cgYy5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixjfXZhciBsPW5bdV09e2V4cG9ydHM6e319O2Vb
dV1bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24odCl7dmFyIG49ZVt1XVsxXVt0XTtyZXR1cm4g
byhufHx0KX0sbCxsLmV4cG9ydHMsdCxlLG4scil9cmV0dXJuIG5bdV0uZXhwb3J0c31mb3IodmFy
IGk9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsdT0wO3U8ci5sZW5ndGg7dSsr
KW8oclt1XSk7cmV0dXJuIG99KHsxOltmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0
aW9uIHIodCl7dmFyIGU9eyI9IjoiPTAiLCI6IjoiPTIifTtyZXR1cm4iJCIrKCIiK3QpLnJlcGxh
Y2UoL1s9Ol0vZyxmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pfWZ1bmN0aW9uIG8odCl7dmFyIGU9
eyI9MCI6Ij0iLCI9MiI6IjoifTtyZXR1cm4oIiIrKCIuIj09PXRbMF0mJiIkIj09PXRbMV0/dC5z
dWJzdHJpbmcoMik6dC5zdWJzdHJpbmcoMSkpKS5yZXBsYWNlKC8oPTB8PTIpL2csZnVuY3Rpb24o
dCl7cmV0dXJuIGVbdF19KX12YXIgaT17ZXNjYXBlOnIsdW5lc2NhcGU6b307ZS5leHBvcnRzPWl9
LHt9XSwyOltmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPXQoMjApLG89KHQoMjQp
LGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoZS5pbnN0YW5jZVBvb2wubGVuZ3RoKXt2YXIgbj1l
Lmluc3RhbmNlUG9vbC5wb3AoKTtyZXR1cm4gZS5jYWxsKG4sdCksbn1yZXR1cm4gbmV3IGUodCl9
KSxpPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztpZihuLmluc3RhbmNlUG9vbC5sZW5ndGgpe3Zh
ciByPW4uaW5zdGFuY2VQb29sLnBvcCgpO3JldHVybiBuLmNhbGwocix0LGUpLHJ9cmV0dXJuIG5l
dyBuKHQsZSl9LHU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXM7aWYoci5pbnN0YW5jZVBvb2wu
bGVuZ3RoKXt2YXIgbz1yLmluc3RhbmNlUG9vbC5wb3AoKTtyZXR1cm4gci5jYWxsKG8sdCxlLG4p
LG99cmV0dXJuIG5ldyByKHQsZSxuKX0sYT1mdW5jdGlvbih0LGUsbixyKXt2YXIgbz10aGlzO2lm
KG8uaW5zdGFuY2VQb29sLmxlbmd0aCl7dmFyIGk9by5pbnN0YW5jZVBvb2wucG9wKCk7cmV0dXJu
IG8uY2FsbChpLHQsZSxuLHIpLGl9cmV0dXJuIG5ldyBvKHQsZSxuLHIpfSxzPWZ1bmN0aW9uKHQp
e3ZhciBlPXRoaXM7dCBpbnN0YW5jZW9mIGV8fHIoIjI1IiksdC5kZXN0cnVjdG9yKCksZS5pbnN0
YW5jZVBvb2wubGVuZ3RoPGUucG9vbFNpemUmJmUuaW5zdGFuY2VQb29sLnB1c2godCl9LGM9byxs
PWZ1bmN0aW9uKHQsZSl7dmFyIG49dDtyZXR1cm4gbi5pbnN0YW5jZVBvb2w9W10sbi5nZXRQb29s
ZWQ9ZXx8YyxuLnBvb2xTaXplfHwobi5wb29sU2l6ZT0xMCksbi5yZWxlYXNlPXMsbn0sZj17YWRk
UG9vbGluZ1RvOmwsb25lQXJndW1lbnRQb29sZXI6byx0d29Bcmd1bWVudFBvb2xlcjppLHRocmVl
QXJndW1lbnRQb29sZXI6dSxmb3VyQXJndW1lbnRQb29sZXI6YX07ZS5leHBvcnRzPWZ9LHsyMDoy
MCwyNDoyNH1dLDM6W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9dCgyNiksbz10
KDQpLGk9dCg2KSx1PXQoMTQpLGE9dCg1KSxzPXQoOCksYz10KDkpLGw9dCgxMyksZj10KDE2KSxw
PXQoMTkpLGQ9KHQoMjUpLGMuY3JlYXRlRWxlbWVudCkseT1jLmNyZWF0ZUZhY3RvcnksaD1jLmNs
b25lRWxlbWVudCx2PXIsbT17Q2hpbGRyZW46e21hcDpvLm1hcCxmb3JFYWNoOm8uZm9yRWFjaCxj
b3VudDpvLmNvdW50LHRvQXJyYXk6by50b0FycmF5LG9ubHk6cH0sQ29tcG9uZW50OmksUHVyZUNv
bXBvbmVudDp1LGNyZWF0ZUVsZW1lbnQ6ZCxjbG9uZUVsZW1lbnQ6aCxpc1ZhbGlkRWxlbWVudDpj
LmlzVmFsaWRFbGVtZW50LFByb3BUeXBlczpsLGNyZWF0ZUNsYXNzOmEuY3JlYXRlQ2xhc3MsY3Jl
YXRlRmFjdG9yeTp5LGNyZWF0ZU1peGluOmZ1bmN0aW9uKHQpe3JldHVybiB0fSxET006cyx2ZXJz
aW9uOmYsX19zcHJlYWQ6dn07ZS5leHBvcnRzPW19LHsxMzoxMywxNDoxNCwxNjoxNiwxOToxOSwy
NToyNSwyNjoyNiw0OjQsNTo1LDY6Niw4OjgsOTo5fV0sNDpbZnVuY3Rpb24odCxlLG4peyJ1c2Ug
c3RyaWN0IjtmdW5jdGlvbiByKHQpe3JldHVybigiIit0KS5yZXBsYWNlKEUsIiQmLyIpfWZ1bmN0
aW9uIG8odCxlKXt0aGlzLmZ1bmM9dCx0aGlzLmNvbnRleHQ9ZSx0aGlzLmNvdW50PTB9ZnVuY3Rp
b24gaSh0LGUsbil7dmFyIHI9dC5mdW5jLG89dC5jb250ZXh0O3IuY2FsbChvLGUsdC5jb3VudCsr
KX1mdW5jdGlvbiB1KHQsZSxuKXtpZihudWxsPT10KXJldHVybiB0O3ZhciByPW8uZ2V0UG9vbGVk
KGUsbik7bSh0LGksciksby5yZWxlYXNlKHIpfWZ1bmN0aW9uIGEodCxlLG4scil7dGhpcy5yZXN1
bHQ9dCx0aGlzLmtleVByZWZpeD1lLHRoaXMuZnVuYz1uLHRoaXMuY29udGV4dD1yLHRoaXMuY291
bnQ9MH1mdW5jdGlvbiBzKHQsZSxuKXt2YXIgbz10LnJlc3VsdCxpPXQua2V5UHJlZml4LHU9dC5m
dW5jLGE9dC5jb250ZXh0LHM9dS5jYWxsKGEsZSx0LmNvdW50KyspO0FycmF5LmlzQXJyYXkocyk/
YyhzLG8sbix2LnRoYXRSZXR1cm5zQXJndW1lbnQpOm51bGwhPXMmJihoLmlzVmFsaWRFbGVtZW50
KHMpJiYocz1oLmNsb25lQW5kUmVwbGFjZUtleShzLGkrKCFzLmtleXx8ZSYmZS5rZXk9PT1zLmtl
eT8iIjpyKHMua2V5KSsiLyIpK24pKSxvLnB1c2gocykpfWZ1bmN0aW9uIGModCxlLG4sbyxpKXt2
YXIgdT0iIjtudWxsIT1uJiYodT1yKG4pKyIvIik7dmFyIGM9YS5nZXRQb29sZWQoZSx1LG8saSk7
bSh0LHMsYyksYS5yZWxlYXNlKGMpfWZ1bmN0aW9uIGwodCxlLG4pe2lmKG51bGw9PXQpcmV0dXJu
IHQ7dmFyIHI9W107cmV0dXJuIGModCxyLG51bGwsZSxuKSxyfWZ1bmN0aW9uIGYodCxlLG4pe3Jl
dHVybiBudWxsfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gbSh0LGYsbnVsbCl9ZnVuY3Rpb24gZCh0
KXt2YXIgZT1bXTtyZXR1cm4gYyh0LGUsbnVsbCx2LnRoYXRSZXR1cm5zQXJndW1lbnQpLGV9dmFy
IHk9dCgyKSxoPXQoOSksdj10KDIyKSxtPXQoMjEpLGI9eS50d29Bcmd1bWVudFBvb2xlcixnPXku
Zm91ckFyZ3VtZW50UG9vbGVyLEU9L1wvKy9nO28ucHJvdG90eXBlLmRlc3RydWN0b3I9ZnVuY3Rp
b24oKXt0aGlzLmZ1bmM9bnVsbCx0aGlzLmNvbnRleHQ9bnVsbCx0aGlzLmNvdW50PTB9LHkuYWRk
UG9vbGluZ1RvKG8sYiksYS5wcm90b3R5cGUuZGVzdHJ1Y3Rvcj1mdW5jdGlvbigpe3RoaXMucmVz
dWx0PW51bGwsdGhpcy5rZXlQcmVmaXg9bnVsbCx0aGlzLmZ1bmM9bnVsbCx0aGlzLmNvbnRleHQ9
bnVsbCx0aGlzLmNvdW50PTB9LHkuYWRkUG9vbGluZ1RvKGEsZyk7dmFyIHg9e2ZvckVhY2g6dSxt
YXA6bCxtYXBJbnRvV2l0aEtleVByZWZpeEludGVybmFsOmMsY291bnQ6cCx0b0FycmF5OmR9O2Uu
ZXhwb3J0cz14fSx7MjoyLDIxOjIxLDIyOjIyLDk6OX1dLDU6W2Z1bmN0aW9uKHQsZSxuKXsidXNl
IHN0cmljdCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdH1mdW5jdGlvbiBvKHQsZSl7dmFyIG49RS5o
YXNPd25Qcm9wZXJ0eShlKT9FW2VdOm51bGw7Xy5oYXNPd25Qcm9wZXJ0eShlKSYmIk9WRVJSSURF
X0JBU0UiIT09biYmcCgiNzMiLGUpLHQmJiJERUZJTkVfTUFOWSIhPT1uJiYiREVGSU5FX01BTllf
TUVSR0VEIiE9PW4mJnAoIjc0IixlKX1mdW5jdGlvbiBpKHQsZSl7aWYoZSl7ImZ1bmN0aW9uIj09
dHlwZW9mIGUmJnAoIjc1IiksaC5pc1ZhbGlkRWxlbWVudChlKSYmcCgiNzYiKTt2YXIgbj10LnBy
b3RvdHlwZSxyPW4uX19yZWFjdEF1dG9CaW5kUGFpcnM7ZS5oYXNPd25Qcm9wZXJ0eShiKSYmeC5t
aXhpbnModCxlLm1peGlucyk7Zm9yKHZhciBpIGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShpKSYm
aSE9PWIpe3ZhciB1PWVbaV0sYT1uLmhhc093blByb3BlcnR5KGkpO2lmKG8oYSxpKSx4Lmhhc093
blByb3BlcnR5KGkpKXhbaV0odCx1KTtlbHNle3ZhciBsPUUuaGFzT3duUHJvcGVydHkoaSksZj0i
ZnVuY3Rpb24iPT10eXBlb2YgdSxkPWYmJiFsJiYhYSYmITEhPT1lLmF1dG9iaW5kO2lmKGQpci5w
dXNoKGksdSksbltpXT11O2Vsc2UgaWYoYSl7dmFyIHk9RVtpXTsoIWx8fCJERUZJTkVfTUFOWV9N
RVJHRUQiIT09eSYmIkRFRklORV9NQU5ZIiE9PXkpJiZwKCI3NyIseSxpKSwiREVGSU5FX01BTllf
TUVSR0VEIj09PXk/bltpXT1zKG5baV0sdSk6IkRFRklORV9NQU5ZIj09PXkmJihuW2ldPWMobltp
XSx1KSl9ZWxzZSBuW2ldPXV9fX19ZnVuY3Rpb24gdSh0LGUpe2lmKGUpZm9yKHZhciBuIGluIGUp
e3ZhciByPWVbbl07aWYoZS5oYXNPd25Qcm9wZXJ0eShuKSl7dmFyIG89biBpbiB4O28mJnAoIjc4
IixuKTt2YXIgaT1uIGluIHQ7aSYmcCgiNzkiLG4pLHRbbl09cn19fWZ1bmN0aW9uIGEodCxlKXt0
JiZlJiYib2JqZWN0Ij09dHlwZW9mIHQmJiJvYmplY3QiPT10eXBlb2YgZXx8cCgiODAiKTtmb3Io
dmFyIG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiYodm9pZCAwIT09dFtuXSYmcCgiODEiLG4p
LHRbbl09ZVtuXSk7cmV0dXJuIHR9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBmdW5jdGlvbigpe3Zh
ciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYo
bnVsbD09bilyZXR1cm4gcjtpZihudWxsPT1yKXJldHVybiBuO3ZhciBvPXt9O3JldHVybiBhKG8s
biksYShvLHIpLG99fWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0LmFwcGx5KHRo
aXMsYXJndW1lbnRzKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gbCh0LGUpe3Jl
dHVybiBlLmJpbmQodCl9ZnVuY3Rpb24gZih0KXtmb3IodmFyIGU9dC5fX3JlYWN0QXV0b0JpbmRQ
YWlycyxuPTA7bjxlLmxlbmd0aDtuKz0yKXt2YXIgcj1lW25dLG89ZVtuKzFdO3Rbcl09bCh0LG8p
fX12YXIgcD10KDIwKSxkPXQoMjYpLHk9dCg2KSxoPXQoOSksdj0odCgxMiksdCgxMSkpLG09dCgy
MyksYj0odCgyNCksdCgyNSksIm1peGlucyIpLGc9W10sRT17bWl4aW5zOiJERUZJTkVfTUFOWSIs
c3RhdGljczoiREVGSU5FX01BTlkiLHByb3BUeXBlczoiREVGSU5FX01BTlkiLGNvbnRleHRUeXBl
czoiREVGSU5FX01BTlkiLGNoaWxkQ29udGV4dFR5cGVzOiJERUZJTkVfTUFOWSIsZ2V0RGVmYXVs
dFByb3BzOiJERUZJTkVfTUFOWV9NRVJHRUQiLGdldEluaXRpYWxTdGF0ZToiREVGSU5FX01BTllf
TUVSR0VEIixnZXRDaGlsZENvbnRleHQ6IkRFRklORV9NQU5ZX01FUkdFRCIscmVuZGVyOiJERUZJ
TkVfT05DRSIsY29tcG9uZW50V2lsbE1vdW50OiJERUZJTkVfTUFOWSIsY29tcG9uZW50RGlkTW91
bnQ6IkRFRklORV9NQU5ZIixjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzOiJERUZJTkVfTUFOWSIs
c2hvdWxkQ29tcG9uZW50VXBkYXRlOiJERUZJTkVfT05DRSIsY29tcG9uZW50V2lsbFVwZGF0ZToi
REVGSU5FX01BTlkiLGNvbXBvbmVudERpZFVwZGF0ZToiREVGSU5FX01BTlkiLGNvbXBvbmVudFdp
bGxVbm1vdW50OiJERUZJTkVfTUFOWSIsdXBkYXRlQ29tcG9uZW50OiJPVkVSUklERV9CQVNFIn0s
eD17ZGlzcGxheU5hbWU6ZnVuY3Rpb24odCxlKXt0LmRpc3BsYXlOYW1lPWV9LG1peGluczpmdW5j
dGlvbih0LGUpe2lmKGUpZm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaSh0LGVbbl0pfSxjaGls
ZENvbnRleHRUeXBlczpmdW5jdGlvbih0LGUpe3QuY2hpbGRDb250ZXh0VHlwZXM9ZCh7fSx0LmNo
aWxkQ29udGV4dFR5cGVzLGUpfSxjb250ZXh0VHlwZXM6ZnVuY3Rpb24odCxlKXt0LmNvbnRleHRU
eXBlcz1kKHt9LHQuY29udGV4dFR5cGVzLGUpfSxnZXREZWZhdWx0UHJvcHM6ZnVuY3Rpb24odCxl
KXt0LmdldERlZmF1bHRQcm9wcz90LmdldERlZmF1bHRQcm9wcz1zKHQuZ2V0RGVmYXVsdFByb3Bz
LGUpOnQuZ2V0RGVmYXVsdFByb3BzPWV9LHByb3BUeXBlczpmdW5jdGlvbih0LGUpe3QucHJvcFR5
cGVzPWQoe30sdC5wcm9wVHlwZXMsZSl9LHN0YXRpY3M6ZnVuY3Rpb24odCxlKXt1KHQsZSl9LGF1
dG9iaW5kOmZ1bmN0aW9uKCl7fX0sXz17cmVwbGFjZVN0YXRlOmZ1bmN0aW9uKHQsZSl7dGhpcy51
cGRhdGVyLmVucXVldWVSZXBsYWNlU3RhdGUodGhpcyx0KSxlJiZ0aGlzLnVwZGF0ZXIuZW5xdWV1
ZUNhbGxiYWNrKHRoaXMsZSwicmVwbGFjZVN0YXRlIil9LGlzTW91bnRlZDpmdW5jdGlvbigpe3Jl
dHVybiB0aGlzLnVwZGF0ZXIuaXNNb3VudGVkKHRoaXMpfX0sUD1mdW5jdGlvbigpe307ZChQLnBy
b3RvdHlwZSx5LnByb3RvdHlwZSxfKTt2YXIgdz17Y3JlYXRlQ2xhc3M6ZnVuY3Rpb24odCl7dmFy
IGU9cihmdW5jdGlvbih0LG4scil7dGhpcy5fX3JlYWN0QXV0b0JpbmRQYWlycy5sZW5ndGgmJmYo
dGhpcyksdGhpcy5wcm9wcz10LHRoaXMuY29udGV4dD1uLHRoaXMucmVmcz1tLHRoaXMudXBkYXRl
cj1yfHx2LHRoaXMuc3RhdGU9bnVsbDt2YXIgbz10aGlzLmdldEluaXRpYWxTdGF0ZT90aGlzLmdl
dEluaXRpYWxTdGF0ZSgpOm51bGw7KCJvYmplY3QiIT10eXBlb2Ygb3x8QXJyYXkuaXNBcnJheShv
KSkmJnAoIjgyIixlLmRpc3BsYXlOYW1lfHwiUmVhY3RDb21wb3NpdGVDb21wb25lbnQiKSx0aGlz
LnN0YXRlPW99KTtlLnByb3RvdHlwZT1uZXcgUCxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUu
cHJvdG90eXBlLl9fcmVhY3RBdXRvQmluZFBhaXJzPVtdLGcuZm9yRWFjaChpLmJpbmQobnVsbCxl
KSksaShlLHQpLGUuZ2V0RGVmYXVsdFByb3BzJiYoZS5kZWZhdWx0UHJvcHM9ZS5nZXREZWZhdWx0
UHJvcHMoKSksZS5wcm90b3R5cGUucmVuZGVyfHxwKCI4MyIpO2Zvcih2YXIgbiBpbiBFKWUucHJv
dG90eXBlW25dfHwoZS5wcm90b3R5cGVbbl09bnVsbCk7cmV0dXJuIGV9LGluamVjdGlvbjp7aW5q
ZWN0TWl4aW46ZnVuY3Rpb24odCl7Zy5wdXNoKHQpfX19O2UuZXhwb3J0cz13fSx7MTE6MTEsMTI6
MTIsMjA6MjAsMjM6MjMsMjQ6MjQsMjU6MjUsMjY6MjYsNjo2LDk6OX1dLDY6W2Z1bmN0aW9uKHQs
ZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0LGUsbil7dGhpcy5wcm9wcz10LHRoaXMuY29u
dGV4dD1lLHRoaXMucmVmcz11LHRoaXMudXBkYXRlcj1ufHxpfXZhciBvPXQoMjApLGk9dCgxMSks
dT0odCgxNyksdCgyMykpO3QoMjQpLHQoMjUpO3IucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9
e30sci5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24odCxlKXsib2JqZWN0IiE9dHlwZW9mIHQm
JiJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT10JiZvKCI4NSIpLHRoaXMudXBkYXRlci5lbnF1
ZXVlU2V0U3RhdGUodGhpcyx0KSxlJiZ0aGlzLnVwZGF0ZXIuZW5xdWV1ZUNhbGxiYWNrKHRoaXMs
ZSwic2V0U3RhdGUiKX0sci5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24odCl7dGhpcy51
cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzKSx0JiZ0aGlzLnVwZGF0ZXIuZW5xdWV1ZUNh
bGxiYWNrKHRoaXMsdCwiZm9yY2VVcGRhdGUiKX07ZS5leHBvcnRzPXJ9LHsxMToxMSwxNzoxNywy
MDoyMCwyMzoyMywyNDoyNCwyNToyNX1dLDc6W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7
dmFyIHI9e2N1cnJlbnQ6bnVsbH07ZS5leHBvcnRzPXJ9LHt9XSw4OltmdW5jdGlvbih0LGUsbil7
InVzZSBzdHJpY3QiO3ZhciByPXQoOSksbz1yLmNyZWF0ZUZhY3RvcnksaT17YTpvKCJhIiksYWJi
cjpvKCJhYmJyIiksYWRkcmVzczpvKCJhZGRyZXNzIiksYXJlYTpvKCJhcmVhIiksYXJ0aWNsZTpv
KCJhcnRpY2xlIiksYXNpZGU6bygiYXNpZGUiKSxhdWRpbzpvKCJhdWRpbyIpLGI6bygiYiIpLGJh
c2U6bygiYmFzZSIpLGJkaTpvKCJiZGkiKSxiZG86bygiYmRvIiksYmlnOm8oImJpZyIpLGJsb2Nr
cXVvdGU6bygiYmxvY2txdW90ZSIpLGJvZHk6bygiYm9keSIpLGJyOm8oImJyIiksYnV0dG9uOm8o
ImJ1dHRvbiIpLGNhbnZhczpvKCJjYW52YXMiKSxjYXB0aW9uOm8oImNhcHRpb24iKSxjaXRlOm8o
ImNpdGUiKSxjb2RlOm8oImNvZGUiKSxjb2w6bygiY29sIiksY29sZ3JvdXA6bygiY29sZ3JvdXAi
KSxkYXRhOm8oImRhdGEiKSxkYXRhbGlzdDpvKCJkYXRhbGlzdCIpLGRkOm8oImRkIiksZGVsOm8o
ImRlbCIpLGRldGFpbHM6bygiZGV0YWlscyIpLGRmbjpvKCJkZm4iKSxkaWFsb2c6bygiZGlhbG9n
IiksZGl2Om8oImRpdiIpLGRsOm8oImRsIiksZHQ6bygiZHQiKSxlbTpvKCJlbSIpLGVtYmVkOm8o
ImVtYmVkIiksZmllbGRzZXQ6bygiZmllbGRzZXQiKSxmaWdjYXB0aW9uOm8oImZpZ2NhcHRpb24i
KSxmaWd1cmU6bygiZmlndXJlIiksZm9vdGVyOm8oImZvb3RlciIpLGZvcm06bygiZm9ybSIpLGgx
Om8oImgxIiksaDI6bygiaDIiKSxoMzpvKCJoMyIpLGg0Om8oImg0IiksaDU6bygiaDUiKSxoNjpv
KCJoNiIpLGhlYWQ6bygiaGVhZCIpLGhlYWRlcjpvKCJoZWFkZXIiKSxoZ3JvdXA6bygiaGdyb3Vw
IiksaHI6bygiaHIiKSxodG1sOm8oImh0bWwiKSxpOm8oImkiKSxpZnJhbWU6bygiaWZyYW1lIiks
aW1nOm8oImltZyIpLGlucHV0Om8oImlucHV0IiksaW5zOm8oImlucyIpLGtiZDpvKCJrYmQiKSxr
ZXlnZW46bygia2V5Z2VuIiksbGFiZWw6bygibGFiZWwiKSxsZWdlbmQ6bygibGVnZW5kIiksbGk6
bygibGkiKSxsaW5rOm8oImxpbmsiKSxtYWluOm8oIm1haW4iKSxtYXA6bygibWFwIiksbWFyazpv
KCJtYXJrIiksbWVudTpvKCJtZW51IiksbWVudWl0ZW06bygibWVudWl0ZW0iKSxtZXRhOm8oIm1l
dGEiKSxtZXRlcjpvKCJtZXRlciIpLG5hdjpvKCJuYXYiKSxub3NjcmlwdDpvKCJub3NjcmlwdCIp
LG9iamVjdDpvKCJvYmplY3QiKSxvbDpvKCJvbCIpLG9wdGdyb3VwOm8oIm9wdGdyb3VwIiksb3B0
aW9uOm8oIm9wdGlvbiIpLG91dHB1dDpvKCJvdXRwdXQiKSxwOm8oInAiKSxwYXJhbTpvKCJwYXJh
bSIpLHBpY3R1cmU6bygicGljdHVyZSIpLHByZTpvKCJwcmUiKSxwcm9ncmVzczpvKCJwcm9ncmVz
cyIpLHE6bygicSIpLHJwOm8oInJwIikscnQ6bygicnQiKSxydWJ5Om8oInJ1YnkiKSxzOm8oInMi
KSxzYW1wOm8oInNhbXAiKSxzY3JpcHQ6bygic2NyaXB0Iiksc2VjdGlvbjpvKCJzZWN0aW9uIiks
c2VsZWN0Om8oInNlbGVjdCIpLHNtYWxsOm8oInNtYWxsIiksc291cmNlOm8oInNvdXJjZSIpLHNw
YW46bygic3BhbiIpLHN0cm9uZzpvKCJzdHJvbmciKSxzdHlsZTpvKCJzdHlsZSIpLHN1YjpvKCJz
dWIiKSxzdW1tYXJ5Om8oInN1bW1hcnkiKSxzdXA6bygic3VwIiksdGFibGU6bygidGFibGUiKSx0
Ym9keTpvKCJ0Ym9keSIpLHRkOm8oInRkIiksdGV4dGFyZWE6bygidGV4dGFyZWEiKSx0Zm9vdDpv
KCJ0Zm9vdCIpLHRoOm8oInRoIiksdGhlYWQ6bygidGhlYWQiKSx0aW1lOm8oInRpbWUiKSx0aXRs
ZTpvKCJ0aXRsZSIpLHRyOm8oInRyIiksdHJhY2s6bygidHJhY2siKSx1Om8oInUiKSx1bDpvKCJ1
bCIpLHZhcjpvKCJ2YXIiKSx2aWRlbzpvKCJ2aWRlbyIpLHdicjpvKCJ3YnIiKSxjaXJjbGU6bygi
Y2lyY2xlIiksY2xpcFBhdGg6bygiY2xpcFBhdGgiKSxkZWZzOm8oImRlZnMiKSxlbGxpcHNlOm8o
ImVsbGlwc2UiKSxnOm8oImciKSxpbWFnZTpvKCJpbWFnZSIpLGxpbmU6bygibGluZSIpLGxpbmVh
ckdyYWRpZW50Om8oImxpbmVhckdyYWRpZW50IiksbWFzazpvKCJtYXNrIikscGF0aDpvKCJwYXRo
IikscGF0dGVybjpvKCJwYXR0ZXJuIikscG9seWdvbjpvKCJwb2x5Z29uIikscG9seWxpbmU6bygi
cG9seWxpbmUiKSxyYWRpYWxHcmFkaWVudDpvKCJyYWRpYWxHcmFkaWVudCIpLHJlY3Q6bygicmVj
dCIpLHN0b3A6bygic3RvcCIpLHN2ZzpvKCJzdmciKSx0ZXh0Om8oInRleHQiKSx0c3BhbjpvKCJ0
c3BhbiIpfTtlLmV4cG9ydHM9aX0sezk6OX1dLDk6W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmlj
dCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdm9pZCAwIT09dC5yZWZ9ZnVuY3Rpb24gbyh0KXtyZXR1
cm4gdm9pZCAwIT09dC5rZXl9dmFyIGk9dCgyNiksdT10KDcpLGE9KHQoMjUpLHQoMTcpLE9iamVj
dC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpLHM9dCgxMCksYz17a2V5OiEwLHJlZjohMCxfX3Nl
bGY6ITAsX19zb3VyY2U6ITB9LGw9ZnVuY3Rpb24odCxlLG4scixvLGksdSl7cmV0dXJueyQkdHlw
ZW9mOnMsdHlwZTp0LGtleTplLHJlZjpuLHByb3BzOnUsX293bmVyOml9fTtsLmNyZWF0ZUVsZW1l
bnQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLHM9e30sZj1udWxsLHA9bnVsbDtpZihudWxsIT1lKXty
KGUpJiYocD1lLnJlZiksbyhlKSYmKGY9IiIrZS5rZXkpLHZvaWQgMD09PWUuX19zZWxmP251bGw6
ZS5fX3NlbGYsdm9pZCAwPT09ZS5fX3NvdXJjZT9udWxsOmUuX19zb3VyY2U7Zm9yKGkgaW4gZSlh
LmNhbGwoZSxpKSYmIWMuaGFzT3duUHJvcGVydHkoaSkmJihzW2ldPWVbaV0pfXZhciBkPWFyZ3Vt
ZW50cy5sZW5ndGgtMjtpZigxPT09ZClzLmNoaWxkcmVuPW47ZWxzZSBpZihkPjEpe2Zvcih2YXIg
eT1BcnJheShkKSxoPTA7aDxkO2grKyl5W2hdPWFyZ3VtZW50c1toKzJdO3MuY2hpbGRyZW49eX1p
Zih0JiZ0LmRlZmF1bHRQcm9wcyl7dmFyIHY9dC5kZWZhdWx0UHJvcHM7Zm9yKGkgaW4gdil2b2lk
IDA9PT1zW2ldJiYoc1tpXT12W2ldKX1yZXR1cm4gbCh0LGYscCwwLDAsdS5jdXJyZW50LHMpfSxs
LmNyZWF0ZUZhY3Rvcnk9ZnVuY3Rpb24odCl7dmFyIGU9bC5jcmVhdGVFbGVtZW50LmJpbmQobnVs
bCx0KTtyZXR1cm4gZS50eXBlPXQsZX0sbC5jbG9uZUFuZFJlcGxhY2VLZXk9ZnVuY3Rpb24odCxl
KXtyZXR1cm4gbCh0LnR5cGUsZSx0LnJlZix0Ll9zZWxmLHQuX3NvdXJjZSx0Ll9vd25lcix0LnBy
b3BzKX0sbC5jbG9uZUVsZW1lbnQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBzLGY9aSh7fSx0LnByb3Bz
KSxwPXQua2V5LGQ9dC5yZWYseT0odC5fc2VsZix0Ll9zb3VyY2UsdC5fb3duZXIpO2lmKG51bGwh
PWUpe3IoZSkmJihkPWUucmVmLHk9dS5jdXJyZW50KSxvKGUpJiYocD0iIitlLmtleSk7dmFyIGg7
dC50eXBlJiZ0LnR5cGUuZGVmYXVsdFByb3BzJiYoaD10LnR5cGUuZGVmYXVsdFByb3BzKTtmb3Io
cyBpbiBlKWEuY2FsbChlLHMpJiYhYy5oYXNPd25Qcm9wZXJ0eShzKSYmKHZvaWQgMD09PWVbc10m
JnZvaWQgMCE9PWg/ZltzXT1oW3NdOmZbc109ZVtzXSl9dmFyIHY9YXJndW1lbnRzLmxlbmd0aC0y
O2lmKDE9PT12KWYuY2hpbGRyZW49bjtlbHNlIGlmKHY+MSl7Zm9yKHZhciBtPUFycmF5KHYpLGI9
MDtiPHY7YisrKW1bYl09YXJndW1lbnRzW2IrMl07Zi5jaGlsZHJlbj1tfXJldHVybiBsKHQudHlw
ZSxwLGQsMCwwLHksZil9LGwuaXNWYWxpZEVsZW1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVj
dCI9PXR5cGVvZiB0JiZudWxsIT09dCYmdC4kJHR5cGVvZj09PXN9LGUuZXhwb3J0cz1sfSx7MTA6
MTAsMTc6MTcsMjU6MjUsMjY6MjYsNzo3fV0sMTA6W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmlj
dCI7dmFyIHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvciYmU3ltYm9sLmZv
cigicmVhY3QuZWxlbWVudCIpfHw2MDEwMztlLmV4cG9ydHM9cn0se31dLDExOltmdW5jdGlvbih0
LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPSh0KDI1KSx7aXNNb3VudGVkOmZ1bmN0aW9uKHQpe3Jl
dHVybiExfSxlbnF1ZXVlQ2FsbGJhY2s6ZnVuY3Rpb24odCxlKXt9LGVucXVldWVGb3JjZVVwZGF0
ZTpmdW5jdGlvbih0KXt9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24odCxlKXt9LGVucXVl
dWVTZXRTdGF0ZTpmdW5jdGlvbih0LGUpe319KTtlLmV4cG9ydHM9cn0sezI1OjI1fV0sMTI6W2Z1
bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9e307ZS5leHBvcnRzPXJ9LHt9XSwxMzpb
ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj10KDkpLG89ci5pc1ZhbGlkRWxlbWVu
dCxpPXQoMjgpO2UuZXhwb3J0cz1pKG8pfSx7Mjg6MjgsOTo5fV0sMTQ6W2Z1bmN0aW9uKHQsZSxu
KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0LGUsbil7dGhpcy5wcm9wcz10LHRoaXMuY29udGV4
dD1lLHRoaXMucmVmcz1zLHRoaXMudXBkYXRlcj1ufHxhfWZ1bmN0aW9uIG8oKXt9dmFyIGk9dCgy
NiksdT10KDYpLGE9dCgxMSkscz10KDIzKTtvLnByb3RvdHlwZT11LnByb3RvdHlwZSxyLnByb3Rv
dHlwZT1uZXcgbyxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLGkoci5wcm90b3R5cGUsdS5wcm90
b3R5cGUpLHIucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLGUuZXhwb3J0cz1yfSx7
MTE6MTEsMjM6MjMsMjY6MjYsNjo2fV0sMTU6W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7
dmFyIHI9dCgyNiksbz10KDMpLGk9cihvLHtfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9P
Ul9ZT1VfV0lMTF9CRV9GSVJFRDp7UmVhY3RDdXJyZW50T3duZXI6dCg3KX19KTtlLmV4cG9ydHM9
aX0sezI2OjI2LDM6Myw3Ojd9XSwxNjpbZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtlLmV4
cG9ydHM9IjE1LjUuNCJ9LHt9XSwxNzpbZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtlLmV4
cG9ydHM9ITF9LHt9XSwxODpbZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBy
KHQpe3ZhciBlPXQmJihvJiZ0W29dfHx0W2ldKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZSlyZXR1
cm4gZX12YXIgbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3IsaT0i
QEBpdGVyYXRvciI7ZS5leHBvcnRzPXJ9LHt9XSwxOTpbZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3Ry
aWN0IjtmdW5jdGlvbiByKHQpe3JldHVybiBpLmlzVmFsaWRFbGVtZW50KHQpfHxvKCIxNDMiKSx0
fXZhciBvPXQoMjApLGk9dCg5KTt0KDI0KTtlLmV4cG9ydHM9cn0sezIwOjIwLDI0OjI0LDk6OX1d
LDIwOltmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7Zm9yKHZhciBl
PWFyZ3VtZW50cy5sZW5ndGgtMSxuPSJNaW5pZmllZCBSZWFjdCBlcnJvciAjIit0KyI7IHZpc2l0
IGh0dHA6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9lcnJvci1kZWNvZGVyLmh0bWw/
aW52YXJpYW50PSIrdCxyPTA7cjxlO3IrKyluKz0iJmFyZ3NbXT0iK2VuY29kZVVSSUNvbXBvbmVu
dChhcmd1bWVudHNbcisxXSk7bis9IiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5v
bi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFs
IGhlbHBmdWwgd2FybmluZ3MuIjt2YXIgbz1uZXcgRXJyb3Iobik7dGhyb3cgby5uYW1lPSJJbnZh
cmlhbnQgVmlvbGF0aW9uIixvLmZyYW1lc1RvUG9wPTEsb31lLmV4cG9ydHM9cn0se31dLDIxOltm
dW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCxlKXtyZXR1cm4gdCYmIm9i
amVjdCI9PXR5cGVvZiB0JiZudWxsIT10LmtleT9jLmVzY2FwZSh0LmtleSk6ZS50b1N0cmluZygz
Nil9ZnVuY3Rpb24gbyh0LGUsbixpKXt2YXIgcD10eXBlb2YgdDtpZigidW5kZWZpbmVkIiE9PXAm
JiJib29sZWFuIiE9PXB8fCh0PW51bGwpLG51bGw9PT10fHwic3RyaW5nIj09PXB8fCJudW1iZXIi
PT09cHx8Im9iamVjdCI9PT1wJiZ0LiQkdHlwZW9mPT09YSlyZXR1cm4gbihpLHQsIiI9PT1lP2wr
cih0LDApOmUpLDE7dmFyIGQseSxoPTAsdj0iIj09PWU/bDplK2Y7aWYoQXJyYXkuaXNBcnJheSh0
KSlmb3IodmFyIG09MDttPHQubGVuZ3RoO20rKylkPXRbbV0seT12K3IoZCxtKSxoKz1vKGQseSxu
LGkpO2Vsc2V7dmFyIGI9cyh0KTtpZihiKXt2YXIgZyxFPWIuY2FsbCh0KTtpZihiIT09dC5lbnRy
aWVzKWZvcih2YXIgeD0wOyEoZz1FLm5leHQoKSkuZG9uZTspZD1nLnZhbHVlLHk9dityKGQseCsr
KSxoKz1vKGQseSxuLGkpO2Vsc2UgZm9yKDshKGc9RS5uZXh0KCkpLmRvbmU7KXt2YXIgXz1nLnZh
bHVlO18mJihkPV9bMV0seT12K2MuZXNjYXBlKF9bMF0pK2YrcihkLDApLGgrPW8oZCx5LG4saSkp
fX1lbHNlIGlmKCJvYmplY3QiPT09cCl7dmFyIFA9U3RyaW5nKHQpO3UoIjMxIiwiW29iamVjdCBP
YmplY3RdIj09PVA/Im9iamVjdCB3aXRoIGtleXMgeyIrT2JqZWN0LmtleXModCkuam9pbigiLCAi
KSsifSI6UCwiIil9fXJldHVybiBofWZ1bmN0aW9uIGkodCxlLG4pe3JldHVybiBudWxsPT10PzA6
byh0LCIiLGUsbil9dmFyIHU9dCgyMCksYT0odCg3KSx0KDEwKSkscz10KDE4KSxjPSh0KDI0KSx0
KDEpKSxsPSh0KDI1KSwiLiIpLGY9IjoiO2UuZXhwb3J0cz1pfSx7MToxLDEwOjEwLDE4OjE4LDIw
OjIwLDI0OjI0LDI1OjI1LDc6N31dLDIyOltmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1
bmN0aW9uIHIodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBvPWZ1bmN0aW9uKCl7
fTtvLnRoYXRSZXR1cm5zPXIsby50aGF0UmV0dXJuc0ZhbHNlPXIoITEpLG8udGhhdFJldHVybnNU
cnVlPXIoITApLG8udGhhdFJldHVybnNOdWxsPXIobnVsbCksby50aGF0UmV0dXJuc1RoaXM9ZnVu
Y3Rpb24oKXtyZXR1cm4gdGhpc30sby50aGF0UmV0dXJuc0FyZ3VtZW50PWZ1bmN0aW9uKHQpe3Jl
dHVybiB0fSxlLmV4cG9ydHM9b30se31dLDIzOltmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3Qi
O3ZhciByPXt9O2UuZXhwb3J0cz1yfSx7fV0sMjQ6W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmlj
dCI7ZnVuY3Rpb24gcih0LGUsbixyLGksdSxhLHMpe2lmKG8oZSksIXQpe3ZhciBjO2lmKHZvaWQg
MD09PWUpYz1uZXcgRXJyb3IoIk1pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBu
b24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFu
ZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIik7ZWxzZXt2YXIgbD1bbixyLGksdSxhLHNd
LGY9MDtjPW5ldyBFcnJvcihlLnJlcGxhY2UoLyVzL2csZnVuY3Rpb24oKXtyZXR1cm4gbFtmKytd
fSkpLGMubmFtZT0iSW52YXJpYW50IFZpb2xhdGlvbiJ9dGhyb3cgYy5mcmFtZXNUb1BvcD0xLGN9
fXZhciBvPWZ1bmN0aW9uKHQpe307ZS5leHBvcnRzPXJ9LHt9XSwyNTpbZnVuY3Rpb24odCxlLG4p
eyJ1c2Ugc3RyaWN0Ijt2YXIgcj10KDIyKSxvPXI7ZS5leHBvcnRzPW99LHsyMjoyMn1dLDI2Oltm
dW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7aWYobnVsbD09PXR8fHZv
aWQgMD09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2Fs
bGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQiKTtyZXR1cm4gT2JqZWN0KHQpfXZhciBvPU9iamVj
dC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsaT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5
LHU9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtlLmV4cG9ydHM9ZnVuY3Rp
b24oKXt0cnl7aWYoIU9iamVjdC5hc3NpZ24pcmV0dXJuITE7dmFyIHQ9bmV3IFN0cmluZygiYWJj
Iik7aWYodFs1XT0iZGUiLCI1Ij09PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpWzBdKXJl
dHVybiExO2Zvcih2YXIgZT17fSxuPTA7bjwxMDtuKyspZVsiXyIrU3RyaW5nLmZyb21DaGFyQ29k
ZShuKV09bjtpZigiMDEyMzQ1Njc4OSIhPT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5t
YXAoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KS5qb2luKCIiKSlyZXR1cm4hMTt2YXIgcj17fTty
ZXR1cm4iYWJjZGVmZ2hpamtsbW5vcHFyc3QiLnNwbGl0KCIiKS5mb3JFYWNoKGZ1bmN0aW9uKHQp
e3JbdF09dH0pLCJhYmNkZWZnaGlqa2xtbm9wcXJzdCI9PT1PYmplY3Qua2V5cyhPYmplY3QuYXNz
aWduKHt9LHIpKS5qb2luKCIiKX1jYXRjaCh0KXtyZXR1cm4hMX19KCk/T2JqZWN0LmFzc2lnbjpm
dW5jdGlvbih0LGUpe2Zvcih2YXIgbixhLHM9cih0KSxjPTE7Yzxhcmd1bWVudHMubGVuZ3RoO2Mr
Kyl7bj1PYmplY3QoYXJndW1lbnRzW2NdKTtmb3IodmFyIGwgaW4gbilpLmNhbGwobixsKSYmKHNb
bF09bltsXSk7aWYobyl7YT1vKG4pO2Zvcih2YXIgZj0wO2Y8YS5sZW5ndGg7ZisrKXUuY2FsbChu
LGFbZl0pJiYoc1thW2ZdXT1uW2FbZl1dKX19cmV0dXJuIHN9fSx7fV0sMjc6W2Z1bmN0aW9uKHQs
ZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0LGUsbixyLG8pe31lLmV4cG9ydHM9cn0sezI0
OjI0LDI1OjI1LDMwOjMwfV0sMjg6W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9
dCgyOSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHQsITEpfX0sezI5OjI5fV0sMjk6
W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9dCgyMiksbz10KDI0KSxpPSh0KDI1
KSx0KDMwKSksdT10KDI3KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKHQpe3Zh
ciBlPXQmJihfJiZ0W19dfHx0W1BdKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZSlyZXR1cm4gZX1m
dW5jdGlvbiBhKHQsZSl7cmV0dXJuIHQ9PT1lPzAhPT10fHwxL3Q9PTEvZTp0IT09dCYmZSE9PWV9
ZnVuY3Rpb24gcyh0KXt0aGlzLm1lc3NhZ2U9dCx0aGlzLnN0YWNrPSIifWZ1bmN0aW9uIGModCl7
ZnVuY3Rpb24gbihuLHIsdSxhLGMsbCxmKXtpZihhPWF8fHcsbD1sfHx1LGYhPT1pKWlmKGUpbygh
MSwiQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVk
IGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gVXNlIGBQcm9wVHlwZXMuY2hlY2tQcm9wVHlw
ZXMoKWAgdG8gY2FsbCB0aGVtLiBSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1w
cm9wLXR5cGVzIik7ZWxzZTtyZXR1cm4gbnVsbD09clt1XT9uP25ldyBzKG51bGw9PT1yW3VdPyJU
aGUgIitjKyIgYCIrbCsiYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gYCIrYSsiYCwgYnV0IGl0
cyB2YWx1ZSBpcyBgbnVsbGAuIjoiVGhlICIrYysiIGAiK2wrImAgaXMgbWFya2VkIGFzIHJlcXVp
cmVkIGluIGAiK2ErImAsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuIik6bnVsbDp0KHIs
dSxhLGMsbCl9dmFyIHI9bi5iaW5kKG51bGwsITEpO3JldHVybiByLmlzUmVxdWlyZWQ9bi5iaW5k
KG51bGwsITApLHJ9ZnVuY3Rpb24gbCh0KXtmdW5jdGlvbiBlKGUsbixyLG8saSx1KXt2YXIgYT1l
W25dO2lmKGcoYSkhPT10KXJldHVybiBuZXcgcygiSW52YWxpZCAiK28rIiBgIitpKyJgIG9mIHR5
cGUgYCIrRShhKSsiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBgIit0KyJgLiIpO3Jl
dHVybiBudWxsfXJldHVybiBjKGUpfWZ1bmN0aW9uIGYodCl7ZnVuY3Rpb24gZShlLG4scixvLHUp
e2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXJldHVybiBuZXcgcygiUHJvcGVydHkgYCIrdSsiYCBv
ZiBjb21wb25lbnQgYCIrcisiYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUg
YXJyYXlPZi4iKTt2YXIgYT1lW25dO2lmKCFBcnJheS5pc0FycmF5KGEpKXtyZXR1cm4gbmV3IHMo
IkludmFsaWQgIitvKyIgYCIrdSsiYCBvZiB0eXBlIGAiK2coYSkrImAgc3VwcGxpZWQgdG8gYCIr
cisiYCwgZXhwZWN0ZWQgYW4gYXJyYXkuIil9Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspe3Zh
ciBsPXQoYSxjLHIsbyx1KyJbIitjKyJdIixpKTtpZihsIGluc3RhbmNlb2YgRXJyb3IpcmV0dXJu
IGx9cmV0dXJuIG51bGx9cmV0dXJuIGMoZSl9ZnVuY3Rpb24gcCh0KXtmdW5jdGlvbiBlKGUsbixy
LG8saSl7aWYoIShlW25daW5zdGFuY2VvZiB0KSl7dmFyIHU9dC5uYW1lfHx3O3JldHVybiBuZXcg
cygiSW52YWxpZCAiK28rIiBgIitpKyJgIG9mIHR5cGUgYCIreChlW25dKSsiYCBzdXBwbGllZCB0
byBgIityKyJgLCBleHBlY3RlZCBpbnN0YW5jZSBvZiBgIit1KyJgLiIpfXJldHVybiBudWxsfXJl
dHVybiBjKGUpfWZ1bmN0aW9uIGQodCl7ZnVuY3Rpb24gZShlLG4scixvLGkpe2Zvcih2YXIgdT1l
W25dLGM9MDtjPHQubGVuZ3RoO2MrKylpZihhKHUsdFtjXSkpcmV0dXJuIG51bGw7cmV0dXJuIG5l
dyBzKCJJbnZhbGlkICIrbysiIGAiK2krImAgb2YgdmFsdWUgYCIrdSsiYCBzdXBwbGllZCB0byBg
IityKyJgLCBleHBlY3RlZCBvbmUgb2YgIitKU09OLnN0cmluZ2lmeSh0KSsiLiIpfXJldHVybiBB
cnJheS5pc0FycmF5KHQpP2MoZSk6ci50aGF0UmV0dXJuc051bGx9ZnVuY3Rpb24geSh0KXtmdW5j
dGlvbiBlKGUsbixyLG8sdSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpcmV0dXJuIG5ldyBzKCJQ
cm9wZXJ0eSBgIit1KyJgIG9mIGNvbXBvbmVudCBgIityKyJgIGhhcyBpbnZhbGlkIFByb3BUeXBl
IG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi4iKTt2YXIgYT1lW25dLGM9ZyhhKTtpZigib2JqZWN0
IiE9PWMpcmV0dXJuIG5ldyBzKCJJbnZhbGlkICIrbysiIGAiK3UrImAgb2YgdHlwZSBgIitjKyJg
IHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVjdGVkIGFuIG9iamVjdC4iKTtmb3IodmFyIGwgaW4g
YSlpZihhLmhhc093blByb3BlcnR5KGwpKXt2YXIgZj10KGEsbCxyLG8sdSsiLiIrbCxpKTtpZihm
IGluc3RhbmNlb2YgRXJyb3IpcmV0dXJuIGZ9cmV0dXJuIG51bGx9cmV0dXJuIGMoZSl9ZnVuY3Rp
b24gaCh0KXtmdW5jdGlvbiBlKGUsbixyLG8sdSl7Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKysp
e2lmKG51bGw9PSgwLHRbYV0pKGUsbixyLG8sdSxpKSlyZXR1cm4gbnVsbH1yZXR1cm4gbmV3IHMo
IkludmFsaWQgIitvKyIgYCIrdSsiYCBzdXBwbGllZCB0byBgIityKyJgLiIpfXJldHVybiBBcnJh
eS5pc0FycmF5KHQpP2MoZSk6ci50aGF0UmV0dXJuc051bGx9ZnVuY3Rpb24gdih0KXtmdW5jdGlv
biBlKGUsbixyLG8sdSl7dmFyIGE9ZVtuXSxjPWcoYSk7aWYoIm9iamVjdCIhPT1jKXJldHVybiBu
ZXcgcygiSW52YWxpZCAiK28rIiBgIit1KyJgIG9mIHR5cGUgYCIrYysiYCBzdXBwbGllZCB0byBg
IityKyJgLCBleHBlY3RlZCBgb2JqZWN0YC4iKTtmb3IodmFyIGwgaW4gdCl7dmFyIGY9dFtsXTtp
ZihmKXt2YXIgcD1mKGEsbCxyLG8sdSsiLiIrbCxpKTtpZihwKXJldHVybiBwfX1yZXR1cm4gbnVs
bH1yZXR1cm4gYyhlKX1mdW5jdGlvbiBtKGUpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJudW1iZXIi
OmNhc2Uic3RyaW5nIjpjYXNlInVuZGVmaW5lZCI6cmV0dXJuITA7Y2FzZSJib29sZWFuIjpyZXR1
cm4hZTtjYXNlIm9iamVjdCI6aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZS5ldmVyeShtKTtp
ZihudWxsPT09ZXx8dChlKSlyZXR1cm4hMDt2YXIgcj1uKGUpO2lmKCFyKXJldHVybiExO3ZhciBv
LGk9ci5jYWxsKGUpO2lmKHIhPT1lLmVudHJpZXMpe2Zvcig7IShvPWkubmV4dCgpKS5kb25lOylp
ZighbShvLnZhbHVlKSlyZXR1cm4hMX1lbHNlIGZvcig7IShvPWkubmV4dCgpKS5kb25lOyl7dmFy
IHU9by52YWx1ZTtpZih1JiYhbSh1WzFdKSlyZXR1cm4hMX1yZXR1cm4hMDtkZWZhdWx0OnJldHVy
biExfX1mdW5jdGlvbiBiKHQsZSl7cmV0dXJuInN5bWJvbCI9PT10fHwoIlN5bWJvbCI9PT1lWyJA
QHRvU3RyaW5nVGFnIl18fCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUgaW5zdGFuY2VvZiBT
eW1ib2wpfWZ1bmN0aW9uIGcodCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIEFycmF5LmlzQXJyYXko
dCk/ImFycmF5Ijp0IGluc3RhbmNlb2YgUmVnRXhwPyJvYmplY3QiOmIoZSx0KT8ic3ltYm9sIjpl
fWZ1bmN0aW9uIEUodCl7dmFyIGU9Zyh0KTtpZigib2JqZWN0Ij09PWUpe2lmKHQgaW5zdGFuY2Vv
ZiBEYXRlKXJldHVybiJkYXRlIjtpZih0IGluc3RhbmNlb2YgUmVnRXhwKXJldHVybiJyZWdleHAi
fXJldHVybiBlfWZ1bmN0aW9uIHgodCl7cmV0dXJuIHQuY29uc3RydWN0b3ImJnQuY29uc3RydWN0
b3IubmFtZT90LmNvbnN0cnVjdG9yLm5hbWU6d312YXIgXz0iZnVuY3Rpb24iPT10eXBlb2YgU3lt
Ym9sJiZTeW1ib2wuaXRlcmF0b3IsUD0iQEBpdGVyYXRvciIsdz0iPDxhbm9ueW1vdXM+PiIsTj17
YXJyYXk6bCgiYXJyYXkiKSxib29sOmwoImJvb2xlYW4iKSxmdW5jOmwoImZ1bmN0aW9uIiksbnVt
YmVyOmwoIm51bWJlciIpLG9iamVjdDpsKCJvYmplY3QiKSxzdHJpbmc6bCgic3RyaW5nIiksc3lt
Ym9sOmwoInN5bWJvbCIpLGFueTpmdW5jdGlvbigpe3JldHVybiBjKHIudGhhdFJldHVybnNOdWxs
KX0oKSxhcnJheU9mOmYsZWxlbWVudDpmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSxuLHIsbyxpKXt2
YXIgdT1lW25dO2lmKCF0KHUpKXtyZXR1cm4gbmV3IHMoIkludmFsaWQgIitvKyIgYCIraSsiYCBv
ZiB0eXBlIGAiK2codSkrImAgc3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQgYSBzaW5nbGUg
UmVhY3RFbGVtZW50LiIpfXJldHVybiBudWxsfXJldHVybiBjKGUpfSgpLGluc3RhbmNlT2Y6cCxu
b2RlOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLG8pe3JldHVybiBtKHRbZV0pP251bGw6
bmV3IHMoIkludmFsaWQgIityKyIgYCIrbysiYCBzdXBwbGllZCB0byBgIituKyJgLCBleHBlY3Rl
ZCBhIFJlYWN0Tm9kZS4iKX1yZXR1cm4gYyh0KX0oKSxvYmplY3RPZjp5LG9uZU9mOmQsb25lT2ZU
eXBlOmgsc2hhcGU6dn07cmV0dXJuIHMucHJvdG90eXBlPUVycm9yLnByb3RvdHlwZSxOLmNoZWNr
UHJvcFR5cGVzPXUsTi5Qcm9wVHlwZXM9TixOfX0sezIyOjIyLDI0OjI0LDI1OjI1LDI3OjI3LDMw
OjMwfV0sMzA6W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPSJTRUNSRVRf
RE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCJ9LHt9XX0se30sWzE1XSkoMTUp
fSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
cmVhY3Qvbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3MgYi9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9yZWFjdC9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL2luZGV4LmNzcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lMDRmYmRiZGI0ZWQ0YWZlMDlkNTU0M2RiNTIwZGM2YTlkZGQ0MWIyCi0tLSAvZGV2L251bGwK
KysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRl
eC5jc3MKQEAgLTAsMCArMSwzNzYgQEAKK2h0bWwsCitib2R5IHsKKyAgICBtYXJnaW46IDA7Cisg
ICAgcGFkZGluZzogMDsKK30KKworYnV0dG9uIHsKKyAgICBtYXJnaW46IDA7CisgICAgcGFkZGlu
ZzogMDsKKyAgICBib3JkZXI6IDA7CisgICAgYmFja2dyb3VuZDogbm9uZTsKKyAgICBmb250LXNp
emU6IDEwMCU7CisgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgIGZvbnQtZmFtaWx5
OiBpbmhlcml0OworICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0OworICAgIGNvbG9yOiBpbmhlcml0
OworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKKyAgICBhcHBlYXJhbmNlOiBub25lOwor
ICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAgIC1tb3otb3N4LWZv
bnQtc21vb3RoaW5nOiBncmF5c2NhbGU7Cit9CisKK2JvZHkgeworICAgIGZvbnQ6IDE0cHggJ0hl
bHZldGljYSBOZXVlJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKKyAgICBsaW5lLWhl
aWdodDogMS40ZW07CisgICAgYmFja2dyb3VuZDogI2Y1ZjVmNTsKKyAgICBjb2xvcjogIzRkNGQ0
ZDsKKyAgICBtaW4td2lkdGg6IDIzMHB4OworICAgIG1heC13aWR0aDogNTUwcHg7CisgICAgbWFy
Z2luOiAwIGF1dG87CisgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Cisg
ICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsKKyAgICBmb250LXdlaWdodDog
MzAwOworfQorCis6Zm9jdXMgeworICAgIG91dGxpbmU6IDA7Cit9CisKKy5oaWRkZW4geworICAg
IGRpc3BsYXk6IG5vbmU7Cit9CisKKy50b2RvYXBwIHsKKyAgICBiYWNrZ3JvdW5kOiAjZmZmOwor
ICAgIG1hcmdpbjogMTMwcHggMCA0MHB4IDA7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAg
IGJveC1zaGFkb3c6IDAgMnB4IDRweCAwIHJnYmEoMCwgMCwgMCwgMC4yKSwKKyAgICAgICAgICAg
ICAgICAwIDI1cHggNTBweCAwIHJnYmEoMCwgMCwgMCwgMC4xKTsKK30KKworLnRvZG9hcHAgaW5w
dXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIgeworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsK
KyAgICBmb250LXdlaWdodDogMzAwOworICAgIGNvbG9yOiAjZTZlNmU2OworfQorCisudG9kb2Fw
cCBpbnB1dDo6LW1vei1wbGFjZWhvbGRlciB7CisgICAgZm9udC1zdHlsZTogaXRhbGljOworICAg
IGZvbnQtd2VpZ2h0OiAzMDA7CisgICAgY29sb3I6ICNlNmU2ZTY7Cit9CisKKy50b2RvYXBwIGlu
cHV0OjppbnB1dC1wbGFjZWhvbGRlciB7CisgICAgZm9udC1zdHlsZTogaXRhbGljOworICAgIGZv
bnQtd2VpZ2h0OiAzMDA7CisgICAgY29sb3I6ICNlNmU2ZTY7Cit9CisKKy50b2RvYXBwIGgxIHsK
KyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAtMTU1cHg7CisgICAgd2lkdGg6IDEw
MCU7CisgICAgZm9udC1zaXplOiAxMDBweDsKKyAgICBmb250LXdlaWdodDogMTAwOworICAgIHRl
eHQtYWxpZ246IGNlbnRlcjsKKyAgICBjb2xvcjogcmdiYSgxNzUsIDQ3LCA0NywgMC4xNSk7Cisg
ICAgLXdlYmtpdC10ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OworICAgIC1tb3ot
dGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKKyAgICB0ZXh0LXJlbmRlcmluZzog
b3B0aW1pemVMZWdpYmlsaXR5OworfQorCisubmV3LXRvZG8sCisuZWRpdCB7CisgICAgcG9zaXRp
b246IHJlbGF0aXZlOworICAgIG1hcmdpbjogMDsKKyAgICB3aWR0aDogMTAwJTsKKyAgICBmb250
LXNpemU6IDI0cHg7CisgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CisgICAgZm9udC13ZWlnaHQ6
IGluaGVyaXQ7CisgICAgbGluZS1oZWlnaHQ6IDEuNGVtOworICAgIGJvcmRlcjogMDsKKyAgICBj
b2xvcjogaW5oZXJpdDsKKyAgICBwYWRkaW5nOiA2cHg7CisgICAgYm9yZGVyOiAxcHggc29saWQg
Izk5OTsKKyAgICBib3gtc2hhZG93OiBpbnNldCAwIC0xcHggNXB4IDAgcmdiYSgwLCAwLCAwLCAw
LjIpOworICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgICAgLXdlYmtpdC1mb250LXNtb290
aGluZzogYW50aWFsaWFzZWQ7CisgICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2Fs
ZTsKK30KKworLm5ldy10b2RvIHsKKyAgICBwYWRkaW5nOiAxNnB4IDE2cHggMTZweCA2MHB4Owor
ICAgIGJvcmRlcjogbm9uZTsKKyAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDAzKTsK
KyAgICBib3gtc2hhZG93OiBpbnNldCAwIC0ycHggMXB4IHJnYmEoMCwwLDAsMC4wMyk7Cit9CisK
Ky5tYWluIHsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgei1pbmRleDogMjsKKyAgICBi
b3JkZXItdG9wOiAxcHggc29saWQgI2U2ZTZlNjsKK30KKworLnRvZ2dsZS1hbGwgeworICAgIHRl
eHQtYWxpZ246IGNlbnRlcjsKKyAgICBib3JkZXI6IG5vbmU7IC8qIE1vYmlsZSBTYWZhcmkgKi8K
KyAgICBvcGFjaXR5OiAwOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKK30KKworLnRvZ2dsZS1h
bGwgKyBsYWJlbCB7CisgICAgd2lkdGg6IDYwcHg7CisgICAgaGVpZ2h0OiAzNHB4OworICAgIGZv
bnQtc2l6ZTogMDsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAtNTJweDsKKyAg
ICBsZWZ0OiAtMTNweDsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKKyAg
ICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7Cit9CisKKy50b2dnbGUtYWxsICsgbGFiZWw6YmVm
b3JlIHsKKyAgICBjb250ZW50OiAn4p2vJzsKKyAgICBmb250LXNpemU6IDIycHg7CisgICAgY29s
b3I6ICNlNmU2ZTY7CisgICAgcGFkZGluZzogMTBweCAyN3B4IDEwcHggMjdweDsKK30KKworLnRv
Z2dsZS1hbGw6Y2hlY2tlZCArIGxhYmVsOmJlZm9yZSB7CisgICAgY29sb3I6ICM3MzczNzM7Cit9
CisKKy50b2RvLWxpc3QgeworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nOiAwOworICAgIGxp
c3Qtc3R5bGU6IG5vbmU7Cit9CisKKy50b2RvLWxpc3QgbGkgeworICAgIHBvc2l0aW9uOiByZWxh
dGl2ZTsKKyAgICBmb250LXNpemU6IDI0cHg7CisgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlk
ICNlZGVkZWQ7Cit9CisKKy50b2RvLWxpc3QgbGk6bGFzdC1jaGlsZCB7CisgICAgYm9yZGVyLWJv
dHRvbTogbm9uZTsKK30KKworLnRvZG8tbGlzdCBsaS5lZGl0aW5nIHsKKyAgICBib3JkZXItYm90
dG9tOiBub25lOworICAgIHBhZGRpbmc6IDA7Cit9CisKKy50b2RvLWxpc3QgbGkuZWRpdGluZyAu
ZWRpdCB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgd2lkdGg6IDUwNnB4OworICAgIHBhZGRp
bmc6IDEycHggMTZweDsKKyAgICBtYXJnaW46IDAgMCAwIDQzcHg7Cit9CisKKy50b2RvLWxpc3Qg
bGkuZWRpdGluZyAudmlldyB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworLnRvZG8tbGlzdCBs
aSAudG9nZ2xlIHsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgd2lkdGg6IDQwcHg7Cisg
ICAgLyogYXV0bywgc2luY2Ugbm9uLVdlYktpdCBicm93c2VycyBkb2Vzbid0IHN1cHBvcnQgaW5w
dXQgc3R5bGluZyAqLworICAgIGhlaWdodDogYXV0bzsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7
CisgICAgdG9wOiAwOworICAgIGJvdHRvbTogMDsKKyAgICBtYXJnaW46IGF1dG8gMDsKKyAgICBi
b3JkZXI6IG5vbmU7IC8qIE1vYmlsZSBTYWZhcmkgKi8KKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6
IG5vbmU7CisgICAgYXBwZWFyYW5jZTogbm9uZTsKK30KKworLnRvZG8tbGlzdCBsaSAudG9nZ2xl
IHsKKyAgICBvcGFjaXR5OiAwOworfQorCisudG9kby1saXN0IGxpIC50b2dnbGUgKyBsYWJlbCB7
CisgICAgLyoKKyAgICAgICAgRmlyZWZveCByZXF1aXJlcyBgI2AgdG8gYmUgZXNjYXBlZCAtIGh0
dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTkyMjQzMworICAgICAg
ICBJRSBhbmQgRWRnZSByZXF1aXJlcyAqZXZlcnl0aGluZyogdG8gYmUgZXNjYXBlZCB0byByZW5k
ZXIsIHNvIHdlIGRvIHRoYXQgaW5zdGVhZCBvZiBqdXN0IHRoZSBgI2AgLSBodHRwczovL2RldmVs
b3Blci5taWNyb3NvZnQuY29tL2VuLXVzL21pY3Jvc29mdC1lZGdlL3BsYXRmb3JtL2lzc3Vlcy83
MTU3NDU5LworICAgICovCisgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlL3N2
Zyt4bWw7dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0EvL3d3dy53My5vcmcvMjAwMC9z
dmclMjIlMjB3aWR0aCUzRCUyMjQwJTIyJTIwaGVpZ2h0JTNEJTIyNDAlMjIlMjB2aWV3Qm94JTNE
JTIyLTEwJTIwLTE4JTIwMTAwJTIwMTM1JTIyJTNFJTNDY2lyY2xlJTIwY3glM0QlMjI1MCUyMiUy
MGN5JTNEJTIyNTAlMjIlMjByJTNEJTIyNTAlMjIlMjBmaWxsJTNEJTIybm9uZSUyMiUyMHN0cm9r
ZSUzRCUyMiUyM2VkZWRlZCUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjMlMjIvJTNFJTNDL3N2ZyUz
RScpOworICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgICAgYmFja2dyb3VuZC1w
b3NpdGlvbjogY2VudGVyIGxlZnQ7Cit9CisKKy50b2RvLWxpc3QgbGkgLnRvZ2dsZTpjaGVja2Vk
ICsgbGFiZWwgeworICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9zdmcreG1s
O3V0ZjgsJTNDc3ZnJTIweG1sbnMlM0QlMjJodHRwJTNBLy93d3cudzMub3JnLzIwMDAvc3ZnJTIy
JTIwd2lkdGglM0QlMjI0MCUyMiUyMGhlaWdodCUzRCUyMjQwJTIyJTIwdmlld0JveCUzRCUyMi0x
MCUyMC0xOCUyMDEwMCUyMDEzNSUyMiUzRSUzQ2NpcmNsZSUyMGN4JTNEJTIyNTAlMjIlMjBjeSUz
RCUyMjUwJTIyJTIwciUzRCUyMjUwJTIyJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBzdHJva2UlM0Ql
MjIlMjNiZGRhZDUlMjIlMjBzdHJva2Utd2lkdGglM0QlMjIzJTIyLyUzRSUzQ3BhdGglMjBmaWxs
JTNEJTIyJTIzNWRjMmFmJTIyJTIwZCUzRCUyMk03MiUyMDI1TDQyJTIwNzElMjAyNyUyMDU2bC00
JTIwNCUyMDIwJTIwMjAlMjAzNC01MnolMjIvJTNFJTNDL3N2ZyUzRScpOworfQorCisudG9kby1s
aXN0IGxpIGxhYmVsIHsKKyAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7CisgICAgcGFkZGluZzog
MTVweCAxNXB4IDE1cHggNjBweDsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBsaW5lLWhlaWdo
dDogMS4yOworICAgIHRyYW5zaXRpb246IGNvbG9yIDAuNHM7Cit9CisKKy50b2RvLWxpc3QgbGku
Y29tcGxldGVkIGxhYmVsIHsKKyAgICBjb2xvcjogI2Q5ZDlkOTsKKyAgICB0ZXh0LWRlY29yYXRp
b246IGxpbmUtdGhyb3VnaDsKK30KKworLnRvZG8tbGlzdCBsaSAuZGVzdHJveSB7CisgICAgZGlz
cGxheTogbm9uZTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAwOworICAgIHJp
Z2h0OiAxMHB4OworICAgIGJvdHRvbTogMDsKKyAgICB3aWR0aDogNDBweDsKKyAgICBoZWlnaHQ6
IDQwcHg7CisgICAgbWFyZ2luOiBhdXRvIDA7CisgICAgZm9udC1zaXplOiAzMHB4OworICAgIGNv
bG9yOiAjY2M5YTlhOworICAgIG1hcmdpbi1ib3R0b206IDExcHg7CisgICAgdHJhbnNpdGlvbjog
Y29sb3IgMC4ycyBlYXNlLW91dDsKK30KKworLnRvZG8tbGlzdCBsaSAuZGVzdHJveTpob3ZlciB7
CisgICAgY29sb3I6ICNhZjViNWU7Cit9CisKKy50b2RvLWxpc3QgbGkgLmRlc3Ryb3k6YWZ0ZXIg
eworICAgIGNvbnRlbnQ6ICfDlyc7Cit9CisKKy50b2RvLWxpc3QgbGk6aG92ZXIgLmRlc3Ryb3kg
eworICAgIGRpc3BsYXk6IGJsb2NrOworfQorCisudG9kby1saXN0IGxpIC5lZGl0IHsKKyAgICBk
aXNwbGF5OiBub25lOworfQorCisudG9kby1saXN0IGxpLmVkaXRpbmc6bGFzdC1jaGlsZCB7Cisg
ICAgbWFyZ2luLWJvdHRvbTogLTFweDsKK30KKworLmZvb3RlciB7CisgICAgY29sb3I6ICM3Nzc7
CisgICAgcGFkZGluZzogMTBweCAxNXB4OworICAgIGhlaWdodDogMjBweDsKKyAgICB0ZXh0LWFs
aWduOiBjZW50ZXI7CisgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNmU2ZTY7Cit9CisKKy5m
b290ZXI6YmVmb3JlIHsKKyAgICBjb250ZW50OiAnJzsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7
CisgICAgcmlnaHQ6IDA7CisgICAgYm90dG9tOiAwOworICAgIGxlZnQ6IDA7CisgICAgaGVpZ2h0
OiA1MHB4OworICAgIG92ZXJmbG93OiBoaWRkZW47CisgICAgYm94LXNoYWRvdzogMCAxcHggMXB4
IHJnYmEoMCwgMCwgMCwgMC4yKSwKKyAgICAgICAgICAgICAgICAwIDhweCAwIC0zcHggI2Y2ZjZm
NiwKKyAgICAgICAgICAgICAgICAwIDlweCAxcHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksCisg
ICAgICAgICAgICAgICAgMCAxNnB4IDAgLTZweCAjZjZmNmY2LAorICAgICAgICAgICAgICAgIDAg
MTdweCAycHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMik7Cit9CisKKy50b2RvLWNvdW50IHsKKyAg
ICBmbG9hdDogbGVmdDsKKyAgICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCisudG9kby1jb3VudCBz
dHJvbmcgeworICAgIGZvbnQtd2VpZ2h0OiAzMDA7Cit9CisKKy5maWx0ZXJzIHsKKyAgICBtYXJn
aW46IDA7CisgICAgcGFkZGluZzogMDsKKyAgICBsaXN0LXN0eWxlOiBub25lOworICAgIHBvc2l0
aW9uOiBhYnNvbHV0ZTsKKyAgICByaWdodDogMDsKKyAgICBsZWZ0OiAwOworfQorCisuZmlsdGVy
cyBsaSB7CisgICAgZGlzcGxheTogaW5saW5lOworfQorCisuZmlsdGVycyBsaSBhIHsKKyAgICBj
b2xvcjogaW5oZXJpdDsKKyAgICBtYXJnaW46IDNweDsKKyAgICBwYWRkaW5nOiAzcHggN3B4Owor
ICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3Bh
cmVudDsKKyAgICBib3JkZXItcmFkaXVzOiAzcHg7Cit9CisKKy5maWx0ZXJzIGxpIGE6aG92ZXIg
eworICAgIGJvcmRlci1jb2xvcjogcmdiYSgxNzUsIDQ3LCA0NywgMC4xKTsKK30KKworLmZpbHRl
cnMgbGkgYS5zZWxlY3RlZCB7CisgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE3NSwgNDcsIDQ3LCAw
LjIpOworfQorCisuY2xlYXItY29tcGxldGVkLAoraHRtbCAuY2xlYXItY29tcGxldGVkOmFjdGl2
ZSB7CisgICAgZmxvYXQ6IHJpZ2h0OworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBsaW5l
LWhlaWdodDogMjBweDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgY3Vyc29yOiBw
b2ludGVyOworfQorCisuY2xlYXItY29tcGxldGVkOmhvdmVyIHsKKyAgICB0ZXh0LWRlY29yYXRp
b246IHVuZGVybGluZTsKK30KKworLmluZm8geworICAgIG1hcmdpbjogNjVweCBhdXRvIDA7Cisg
ICAgY29sb3I6ICNiZmJmYmY7CisgICAgZm9udC1zaXplOiAxMHB4OworICAgIHRleHQtc2hhZG93
OiAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKKyAgICB0ZXh0LWFsaWduOiBjZW50
ZXI7Cit9CisKKy5pbmZvIHAgeworICAgIGxpbmUtaGVpZ2h0OiAxOworfQorCisuaW5mbyBhIHsK
KyAgICBjb2xvcjogaW5oZXJpdDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgZm9u
dC13ZWlnaHQ6IDQwMDsKK30KKworLmluZm8gYTpob3ZlciB7CisgICAgdGV4dC1kZWNvcmF0aW9u
OiB1bmRlcmxpbmU7Cit9CisKKy8qCisgICAgSGFjayB0byByZW1vdmUgYmFja2dyb3VuZCBmcm9t
IE1vYmlsZSBTYWZhcmkuCisgICAgQ2FuJ3QgdXNlIGl0IGdsb2JhbGx5IHNpbmNlIGl0IGRlc3Ry
b3lzIGNoZWNrYm94ZXMgaW4gRmlyZWZveAorKi8KK0BtZWRpYSBzY3JlZW4gYW5kICgtd2Via2l0
LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCkgeworICAgIC50b2dnbGUtYWxsLAorICAgIC50b2Rv
LWxpc3QgbGkgLnRvZ2dsZSB7CisgICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CisgICAgfQorCisg
ICAgLnRvZG8tbGlzdCBsaSAudG9nZ2xlIHsKKyAgICAgICAgaGVpZ2h0OiA0MHB4OworICAgIH0K
K30KKworQG1lZGlhIChtYXgtd2lkdGg6IDQzMHB4KSB7CisgICAgLmZvb3RlciB7CisgICAgICAg
IGhlaWdodDogNTBweDsKKyAgICB9CisKKyAgICAuZmlsdGVycyB7CisgICAgICAgIGJvdHRvbTog
MTBweDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVs
ZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVs
ZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGQyNWQzYzg0YWM2YzZhZWYy
NmI5NjgzYTJiYzEwYzYxZjk2MGM4ZgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Jl
YWN0L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzcwpAQCAtMCwwICsxLDE0MSBA
QAoraHIgeworICAgIG1hcmdpbjogMjBweCAwOworICAgIGJvcmRlcjogMDsKKyAgICBib3JkZXIt
dG9wOiAxcHggZGFzaGVkICNjNWM1YzU7CisgICAgYm9yZGVyLWJvdHRvbTogMXB4IGRhc2hlZCAj
ZjdmN2Y3OworfQorCisubGVhcm4gYSB7CisgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgICB0
ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgY29sb3I6ICNiODNmNDU7Cit9CisKKy5sZWFybiBh
OmhvdmVyIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgICBjb2xvcjogIzc4
N2U3ZTsKK30KKworLmxlYXJuIGgzLAorLmxlYXJuIGg0LAorLmxlYXJuIGg1IHsKKyAgICBtYXJn
aW46IDEwcHggMDsKKyAgICBmb250LXdlaWdodDogNTAwOworICAgIGxpbmUtaGVpZ2h0OiAxLjI7
CisgICAgY29sb3I6ICMwMDA7Cit9CisKKy5sZWFybiBoMyB7CisgICAgZm9udC1zaXplOiAyNHB4
OworfQorCisubGVhcm4gaDQgeworICAgIGZvbnQtc2l6ZTogMThweDsKK30KKworLmxlYXJuIGg1
IHsKKyAgICBtYXJnaW4tYm90dG9tOiAwOworICAgIGZvbnQtc2l6ZTogMTRweDsKK30KKworLmxl
YXJuIHVsIHsKKyAgICBwYWRkaW5nOiAwOworICAgIG1hcmdpbjogMCAwIDMwcHggMjVweDsKK30K
KworLmxlYXJuIGxpIHsKKyAgICBsaW5lLWhlaWdodDogMjBweDsKK30KKworLmxlYXJuIHAgewor
ICAgIGZvbnQtc2l6ZTogMTVweDsKKyAgICBmb250LXdlaWdodDogMzAwOworICAgIGxpbmUtaGVp
Z2h0OiAxLjM7CisgICAgbWFyZ2luLXRvcDogMDsKKyAgICBtYXJnaW4tYm90dG9tOiAwOworfQor
CisjaXNzdWUtY291bnQgeworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKy5xdW90ZSB7CisgICAg
Ym9yZGVyOiBub25lOworICAgIG1hcmdpbjogMjBweCAwIDYwcHggMDsKK30KKworLnF1b3RlIHAg
eworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworLnF1b3RlIHA6YmVmb3JlIHsKKyAgICBj
b250ZW50OiAn4oCcJzsKKyAgICBmb250LXNpemU6IDUwcHg7CisgICAgb3BhY2l0eTogLjE1Owor
ICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IC0yMHB4OworICAgIGxlZnQ6IDNweDsK
K30KKworLnF1b3RlIHA6YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICfigJ0nOworICAgIGZvbnQtc2l6
ZTogNTBweDsKKyAgICBvcGFjaXR5OiAuMTU7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAg
IGJvdHRvbTogLTQycHg7CisgICAgcmlnaHQ6IDNweDsKK30KKworLnF1b3RlIGZvb3RlciB7Cisg
ICAgcG9zaXRpb246IGFic29sdXRlOworICAgIGJvdHRvbTogLTQwcHg7CisgICAgcmlnaHQ6IDA7
Cit9CisKKy5xdW90ZSBmb290ZXIgaW1nIHsKKyAgICBib3JkZXItcmFkaXVzOiAzcHg7Cit9CisK
Ky5xdW90ZSBmb290ZXIgYSB7CisgICAgbWFyZ2luLWxlZnQ6IDVweDsKKyAgICB2ZXJ0aWNhbC1h
bGlnbjogbWlkZGxlOworfQorCisuc3BlZWNoLWJ1YmJsZSB7CisgICAgcG9zaXRpb246IHJlbGF0
aXZlOworICAgIHBhZGRpbmc6IDEwcHg7CisgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAu
MDQpOworICAgIGJvcmRlci1yYWRpdXM6IDVweDsKK30KKworLnNwZWVjaC1idWJibGU6YWZ0ZXIg
eworICAgIGNvbnRlbnQ6ICcnOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDEw
MCU7CisgICAgcmlnaHQ6IDMwcHg7CisgICAgYm9yZGVyOiAxM3B4IHNvbGlkIHRyYW5zcGFyZW50
OworICAgIGJvcmRlci10b3AtY29sb3I6IHJnYmEoMCwgMCwgMCwgLjA0KTsKK30KKworLmxlYXJu
LWJhciA+IC5sZWFybiB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHdpZHRoOiAyNzJw
eDsKKyAgICB0b3A6IDhweDsKKyAgICBsZWZ0OiAtMzAwcHg7CisgICAgcGFkZGluZzogMTBweDsK
KyAgICBib3JkZXItcmFkaXVzOiA1cHg7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUs
IDI1NSwgMjU1LCAuNik7CisgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogbGVmdDsKKyAgICB0cmFu
c2l0aW9uLWR1cmF0aW9uOiA1MDBtczsKK30KKworQG1lZGlhIChtaW4td2lkdGg6IDg5OXB4KSB7
CisgICAgLmxlYXJuLWJhciB7CisgICAgICAgIHdpZHRoOiBhdXRvOworICAgICAgICBwYWRkaW5n
LWxlZnQ6IDMwMHB4OworICAgIH0KKworICAgIC5sZWFybi1iYXIgPiAubGVhcm4geworICAgICAg
ICBsZWZ0OiA4cHg7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9k
ZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2Rl
X21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MWUwMDZiYzUwMmRk
YzRjNzRmNDdiZDEzYTgzOTIyNzdmODMwZGI4Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuanMKQEAgLTAsMCArMSwy
NDkgQEAKKy8qIGdsb2JhbCBfICovCisoZnVuY3Rpb24gKCkgeworICAgICd1c2Ugc3RyaWN0JzsK
KworICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi8KKyAgICAvLyBVbmRlcnNjb3JlJ3MgVGVt
cGxhdGUgTW9kdWxlCisgICAgLy8gQ291cnRlc3kgb2YgdW5kZXJzY29yZWpzLm9yZworICAgIHZh
ciBfID0gKGZ1bmN0aW9uIChfKSB7CisgICAgICAgIF8uZGVmYXVsdHMgPSBmdW5jdGlvbiAob2Jq
ZWN0KSB7CisgICAgICAgICAgICBpZiAoIW9iamVjdCkgeworICAgICAgICAgICAgICAgIHJldHVy
biBvYmplY3Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHZhciBhcmdzSW5kZXgg
PSAxLCBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsgYXJnc0luZGV4IDwgYXJnc0xlbmd0
aDsgYXJnc0luZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgaXRlcmFibGUgPSBhcmd1bWVu
dHNbYXJnc0luZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlcmFibGUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGl0ZXJhYmxlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAob2JqZWN0W2tleV0gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9iamVjdFtrZXldID0gaXRlcmFibGVba2V5XTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAgIH0KKworICAgICAgICAv
LyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRlbXBsYXRlIGRlbGltaXRl
cnMsIGNoYW5nZSB0aGUKKyAgICAgICAgLy8gZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRv
IHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLgorICAgICAgICBfLnRlbXBsYXRlU2V0dGluZ3Mg
PSB7CisgICAgICAgICAgICBldmFsdWF0ZSAgICA6IC88JShbXHNcU10rPyklPi9nLAorICAgICAg
ICAgICAgaW50ZXJwb2xhdGUgOiAvPCU9KFtcc1xTXSs/KSU+L2csCisgICAgICAgICAgICBlc2Nh
cGUgICAgICA6IC88JS0oW1xzXFNdKz8pJT4vZworICAgICAgICB9OworCisgICAgICAgIC8vIFdo
ZW4gY3VzdG9taXppbmcgYHRlbXBsYXRlU2V0dGluZ3NgLCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBk
ZWZpbmUgYW4KKyAgICAgICAgLy8gaW50ZXJwb2xhdGlvbiwgZXZhbHVhdGlvbiBvciBlc2NhcGlu
ZyByZWdleCwgd2UgbmVlZCBvbmUgdGhhdCBpcworICAgICAgICAvLyBndWFyYW50ZWVkIG5vdCB0
byBtYXRjaC4KKyAgICAgICAgdmFyIG5vTWF0Y2ggPSAvKC4pXi87CisKKyAgICAgICAgLy8gQ2Vy
dGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgZXNjYXBlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1
dCBpbnRvIGEKKyAgICAgICAgLy8gc3RyaW5nIGxpdGVyYWwuCisgICAgICAgIHZhciBlc2NhcGVz
ID0geworICAgICAgICAgICAgIiciOiAgICAgICInIiwKKyAgICAgICAgICAgICdcXCc6ICAgICAn
XFwnLAorICAgICAgICAgICAgJ1xyJzogICAgICdyJywKKyAgICAgICAgICAgICdcbic6ICAgICAn
bicsCisgICAgICAgICAgICAnXHQnOiAgICAgJ3QnLAorICAgICAgICAgICAgJ1x1MjAyOCc6ICd1
MjAyOCcsCisgICAgICAgICAgICAnXHUyMDI5JzogJ3UyMDI5JworICAgICAgICB9OworCisgICAg
ICAgIHZhciBlc2NhcGVyID0gL1xcfCd8XHJ8XG58XHR8XHUyMDI4fFx1MjAyOS9nOworCisgICAg
ICAgIC8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2ltaWxhciB0byBKb2huIFJlc2ln
J3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIC8vIFVuZGVyc2NvcmUgdGVtcGxhdGluZyBoYW5k
bGVzIGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBwcmVzZXJ2ZXMgd2hpdGVzcGFjZSwKKyAgICAgICAg
Ly8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4gaW50ZXJwb2xhdGVkIGNvZGUu
CisgICAgICAgIF8udGVtcGxhdGUgPSBmdW5jdGlvbih0ZXh0LCBkYXRhLCBzZXR0aW5ncykgewor
ICAgICAgICAgICAgdmFyIHJlbmRlcjsKKyAgICAgICAgICAgIHNldHRpbmdzID0gXy5kZWZhdWx0
cyh7fSwgc2V0dGluZ3MsIF8udGVtcGxhdGVTZXR0aW5ncyk7CisKKyAgICAgICAgICAgIC8vIENv
bWJpbmUgZGVsaW1pdGVycyBpbnRvIG9uZSByZWd1bGFyIGV4cHJlc3Npb24gdmlhIGFsdGVybmF0
aW9uLgorICAgICAgICAgICAgdmFyIG1hdGNoZXIgPSBuZXcgUmVnRXhwKFsKKyAgICAgICAgICAg
ICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNvdXJjZSwKKyAgICAgICAgICAgICAg
ICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNlLAorICAgICAgICAgICAg
ICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNoKS5zb3VyY2UKKyAgICAgICAgICAgIF0u
am9pbignfCcpICsgJ3wkJywgJ2cnKTsKKworICAgICAgICAgICAgLy8gQ29tcGlsZSB0aGUgdGVt
cGxhdGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlhdGVseS4KKyAg
ICAgICAgICAgIHZhciBpbmRleCA9IDA7CisgICAgICAgICAgICB2YXIgc291cmNlID0gIl9fcCs9
JyI7CisgICAgICAgICAgICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVuY3Rpb24obWF0Y2gsIGVz
Y2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBz
b3VyY2UgKz0gdGV4dC5zbGljZShpbmRleCwgb2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICAu
cmVwbGFjZShlc2NhcGVyLCBmdW5jdGlvbihtYXRjaCkgeyByZXR1cm4gJ1xcJyArIGVzY2FwZXNb
bWF0Y2hdOyB9KTsKKworICAgICAgICAgICAgICAgIGlmIChlc2NhcGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgc291cmNlICs9ICInK1xuKChfX3Q9KCIgKyBlc2NhcGUgKyAiKSk9PW51bGw/Jyc6
Xy5lc2NhcGUoX190KSkrXG4nIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKGludGVycG9sYXRlKSB7CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSAiJytcbigo
X190PSgiICsgaW50ZXJwb2xhdGUgKyAiKSk9PW51bGw/Jyc6X190KStcbiciOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZXZhbHVhdGUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgc291cmNlICs9ICInO1xuIiArIGV2YWx1YXRlICsgIlxuX19wKz0nIjsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOworICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICBzb3VyY2UgKz0gIic7XG4iOworCisgICAgICAgICAgICAvLyBJZiBhIHZhcmlhYmxlIGlz
IG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxvY2FsIHNjb3BlLgorICAgICAg
ICAgICAgaWYgKCFzZXR0aW5ncy52YXJpYWJsZSkgc291cmNlID0gJ3dpdGgob2JqfHx7fSl7XG4n
ICsgc291cmNlICsgJ31cbic7CisKKyAgICAgICAgICAgIHNvdXJjZSA9ICJ2YXIgX190LF9fcD0n
JyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4sIiArCisgICAgICAgICAgICAgICAgInByaW50PWZ1
bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMsJycpO307XG4iICsKKyAgICAgICAgICAg
ICAgICBzb3VyY2UgKyAicmV0dXJuIF9fcDtcbiI7CisKKyAgICAgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICAgICAgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdv
YmonLCAnXycsIHNvdXJjZSk7CisgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAg
ICAgICAgZS5zb3VyY2UgPSBzb3VyY2U7CisgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGRhdGEpIHJldHVybiByZW5kZXIoZGF0YSwgXyk7
CisgICAgICAgICAgICB2YXIgdGVtcGxhdGUgPSBmdW5jdGlvbihkYXRhKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlbmRlci5jYWxsKHRoaXMsIGRhdGEsIF8pOworICAgICAgICAgICAgfTsK
KworICAgICAgICAgICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgZnVuY3Rpb24gc291cmNlIGFz
IGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLgorICAgICAgICAgICAgdGVtcGxhdGUu
c291cmNlID0gJ2Z1bmN0aW9uKCcgKyAoc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaicpICsgJyl7
XG4nICsgc291cmNlICsgJ30nOworCisgICAgICAgICAgICByZXR1cm4gdGVtcGxhdGU7CisgICAg
ICAgIH07CisKKyAgICAgICAgcmV0dXJuIF87CisgICAgfSkoe30pOworCisgICAgaWYgKGxvY2F0
aW9uLmhvc3RuYW1lID09PSAndG9kb212Yy5jb20nKSB7CisgICAgICAgIChmdW5jdGlvbihpLHMs
byxnLHIsYSxtKXtpWydHb29nbGVBbmFseXRpY3NPYmplY3QnXT1yO2lbcl09aVtyXXx8ZnVuY3Rp
b24oKXsKKyAgICAgICAgKGlbcl0ucT1pW3JdLnF8fFtdKS5wdXNoKGFyZ3VtZW50cyl9LGlbcl0u
bD0xKm5ldyBEYXRlKCk7YT1zLmNyZWF0ZUVsZW1lbnQobyksCisgICAgICAgIG09cy5nZXRFbGVt
ZW50c0J5VGFnTmFtZShvKVswXTthLmFzeW5jPTE7YS5zcmM9ZzttLnBhcmVudE5vZGUuaW5zZXJ0
QmVmb3JlKGEsbSkKKyAgICAgICAgfSkod2luZG93LGRvY3VtZW50LCdzY3JpcHQnLCdodHRwczov
L3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9hbmFseXRpY3MuanMnLCdnYScpOworICAgICAgICBn
YSgnY3JlYXRlJywgJ1VBLTMxMDgxMDYyLTEnLCAnYXV0bycpOworICAgICAgICBnYSgnc2VuZCcs
ICdwYWdldmlldycpOworICAgIH0KKyAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqLworCisgICAg
ZnVuY3Rpb24gcmVkaXJlY3QoKSB7CisgICAgICAgIGlmIChsb2NhdGlvbi5ob3N0bmFtZSA9PT0g
J3Rhc3RlanMuZ2l0aHViLmlvJykgeworICAgICAgICAgICAgbG9jYXRpb24uaHJlZiA9IGxvY2F0
aW9uLmhyZWYucmVwbGFjZSgndGFzdGVqcy5naXRodWIuaW8vdG9kb212YycsICd0b2RvbXZjLmNv
bScpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gZmluZFJvb3QoKSB7CisgICAg
ICAgIHZhciBiYXNlID0gbG9jYXRpb24uaHJlZi5pbmRleE9mKCdleGFtcGxlcy8nKTsKKyAgICAg
ICAgcmV0dXJuIGxvY2F0aW9uLmhyZWYuc3Vic3RyKDAsIGJhc2UpOworICAgIH0KKworICAgIGZ1
bmN0aW9uIGdldEZpbGUoZmlsZSwgY2FsbGJhY2spIHsKKyAgICAgICAgaWYgKCFsb2NhdGlvbi5o
b3N0KSB7CisgICAgICAgICAgICByZXR1cm4gY29uc29sZS5pbmZvKCdNaXNzIHRoZSBpbmZvIGJh
cj8gUnVuIFRvZG9NVkMgZnJvbSBhIHNlcnZlciB0byBhdm9pZCBhIGNyb3NzLW9yaWdpbiBlcnJv
ci4nKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3Qo
KTsKKworICAgICAgICB4aHIub3BlbignR0VUJywgZmluZFJvb3QoKSArIGZpbGUsIHRydWUpOwor
ICAgICAgICB4aHIuc2VuZCgpOworCisgICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYmIGNhbGxiYWNrKSB7CisgICAg
ICAgICAgICAgICAgY2FsbGJhY2soeGhyLnJlc3BvbnNlVGV4dCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gTGVhcm4obGVhcm5KU09OLCBjb25maWcp
IHsKKyAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIExlYXJuKSkgeworICAgICAgICAgICAg
cmV0dXJuIG5ldyBMZWFybihsZWFybkpTT04sIGNvbmZpZyk7CisgICAgICAgIH0KKworICAgICAg
ICB2YXIgdGVtcGxhdGUsIGZyYW1ld29yazsKKworICAgICAgICBpZiAodHlwZW9mIGxlYXJuSlNP
TiAhPT0gJ29iamVjdCcpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbGVh
cm5KU09OID0gSlNPTi5wYXJzZShsZWFybkpTT04pOworICAgICAgICAgICAgfSBjYXRjaCAoZSkg
eworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChjb25maWcpIHsKKyAgICAgICAgICAgIHRlbXBsYXRlID0gY29uZmlnLnRlbXBs
YXRlOworICAgICAgICAgICAgZnJhbWV3b3JrID0gY29uZmlnLmZyYW1ld29yazsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICghdGVtcGxhdGUgJiYgbGVhcm5KU09OLnRlbXBsYXRlcykgeworICAg
ICAgICAgICAgdGVtcGxhdGUgPSBsZWFybkpTT04udGVtcGxhdGVzLnRvZG9tdmM7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIWZyYW1ld29yayAmJiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdb
ZGF0YS1mcmFtZXdvcmtdJykpIHsKKyAgICAgICAgICAgIGZyYW1ld29yayA9IGRvY3VtZW50LnF1
ZXJ5U2VsZWN0b3IoJ1tkYXRhLWZyYW1ld29ya10nKS5kYXRhc2V0LmZyYW1ld29yazsKKyAgICAg
ICAgfQorCisgICAgICAgIHRoaXMudGVtcGxhdGUgPSB0ZW1wbGF0ZTsKKworICAgICAgICBpZiAo
bGVhcm5KU09OLmJhY2tlbmQpIHsKKyAgICAgICAgICAgIHRoaXMuZnJhbWV3b3JrSlNPTiA9IGxl
YXJuSlNPTi5iYWNrZW5kOworICAgICAgICAgICAgdGhpcy5mcmFtZXdvcmtKU09OLmlzc3VlTGFi
ZWwgPSBmcmFtZXdvcms7CisgICAgICAgICAgICB0aGlzLmFwcGVuZCh7CisgICAgICAgICAgICAg
ICAgYmFja2VuZDogdHJ1ZQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSBpZiAobGVh
cm5KU09OW2ZyYW1ld29ya10pIHsKKyAgICAgICAgICAgIHRoaXMuZnJhbWV3b3JrSlNPTiA9IGxl
YXJuSlNPTltmcmFtZXdvcmtdOworICAgICAgICAgICAgdGhpcy5mcmFtZXdvcmtKU09OLmlzc3Vl
TGFiZWwgPSBmcmFtZXdvcms7CisgICAgICAgICAgICB0aGlzLmFwcGVuZCgpOworICAgICAgICB9
CisKKyAgICAgICAgdGhpcy5mZXRjaElzc3VlQ291bnQoKTsKKyAgICB9CisKKyAgICBMZWFybi5w
cm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKG9wdHMpIHsKKyAgICAgICAgdmFyIGFzaWRlID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYXNpZGUnKTsKKyAgICAgICAgYXNpZGUuaW5uZXJIVE1M
ID0gXy50ZW1wbGF0ZSh0aGlzLnRlbXBsYXRlLCB0aGlzLmZyYW1ld29ya0pTT04pOworICAgICAg
ICBhc2lkZS5jbGFzc05hbWUgPSAnbGVhcm4nOworCisgICAgICAgIGlmIChvcHRzICYmIG9wdHMu
YmFja2VuZCkgeworICAgICAgICAgICAgLy8gUmVtb3ZlIGRlbW8gbGluaworICAgICAgICAgICAg
dmFyIHNvdXJjZUxpbmtzID0gYXNpZGUucXVlcnlTZWxlY3RvcignLnNvdXJjZS1saW5rcycpOwor
ICAgICAgICAgICAgdmFyIGhlYWRpbmcgPSBzb3VyY2VMaW5rcy5maXJzdEVsZW1lbnRDaGlsZDsK
KyAgICAgICAgICAgIHZhciBzb3VyY2VMaW5rID0gc291cmNlTGlua3MubGFzdEVsZW1lbnRDaGls
ZDsKKyAgICAgICAgICAgIC8vIENvcnJlY3QgbGluayBwYXRoCisgICAgICAgICAgICB2YXIgaHJl
ZiA9IHNvdXJjZUxpbmsuZ2V0QXR0cmlidXRlKCdocmVmJyk7CisgICAgICAgICAgICBzb3VyY2VM
aW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYuc3Vic3RyKGhyZWYubGFzdEluZGV4T2YoJ2h0
dHAnKSkpOworICAgICAgICAgICAgc291cmNlTGlua3MuaW5uZXJIVE1MID0gaGVhZGluZy5vdXRl
ckhUTUwgKyBzb3VyY2VMaW5rLm91dGVySFRNTDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIExvY2FsaXplIGRlbW8gbGlua3MKKyAgICAgICAgICAgIHZhciBkZW1vTGlua3MgPSBh
c2lkZS5xdWVyeVNlbGVjdG9yQWxsKCcuZGVtby1saW5rJyk7CisgICAgICAgICAgICBBcnJheS5w
cm90b3R5cGUuZm9yRWFjaC5jYWxsKGRlbW9MaW5rcywgZnVuY3Rpb24gKGRlbW9MaW5rKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGRlbW9MaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpLnN1YnN0cigw
LCA0KSAhPT0gJ2h0dHAnKSB7CisgICAgICAgICAgICAgICAgICAgIGRlbW9MaW5rLnNldEF0dHJp
YnV0ZSgnaHJlZicsIGZpbmRSb290KCkgKyBkZW1vTGluay5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAg
ICBkb2N1bWVudC5ib2R5LmNsYXNzTmFtZSA9IChkb2N1bWVudC5ib2R5LmNsYXNzTmFtZSArICcg
bGVhcm4tYmFyJykudHJpbSgpOworICAgICAgICBkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50
SFRNTCgnYWZ0ZXJCZWdpbicsIGFzaWRlLm91dGVySFRNTCk7CisgICAgfTsKKworICAgIExlYXJu
LnByb3RvdHlwZS5mZXRjaElzc3VlQ291bnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBp
c3N1ZUxpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaXNzdWUtY291bnQtbGluaycpOwor
ICAgICAgICBpZiAoaXNzdWVMaW5rKSB7CisgICAgICAgICAgICB2YXIgdXJsID0gaXNzdWVMaW5r
LmhyZWYucmVwbGFjZSgnaHR0cHM6Ly9naXRodWIuY29tJywgJ2h0dHBzOi8vYXBpLmdpdGh1Yi5j
b20vcmVwb3MnKTsKKyAgICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsK
KyAgICAgICAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwsIHRydWUpOworICAgICAgICAgICAgeGhy
Lm9ubG9hZCA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICAgICAgdmFyIHBhcnNlZFJlc3Bv
bnNlID0gSlNPTi5wYXJzZShlLnRhcmdldC5yZXNwb25zZVRleHQpOworICAgICAgICAgICAgICAg
IGlmIChwYXJzZWRSZXNwb25zZSBpbnN0YW5jZW9mIEFycmF5KSB7CisgICAgICAgICAgICAgICAg
ICAgIHZhciBjb3VudCA9IHBhcnNlZFJlc3BvbnNlLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGNvdW50ICE9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZUxpbmsu
aW5uZXJIVE1MID0gJ1RoaXMgYXBwIGhhcyAnICsgY291bnQgKyAnIG9wZW4gaXNzdWVzJzsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpc3N1ZS1jb3Vu
dCcpLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICB4aHIuc2VuZCgpOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIHJlZGlyZWN0KCk7CisgICAgZ2V0RmlsZSgnbGVhcm4u
anNvbicsIExlYXJuKTsKK30pKCk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ucG0t
c2hyaW5rd3JhcC5qc29uIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvbnBtLXNocmlua3dyYXAuanNvbgpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44MmVlNzgyMDc1OWVhZGM2NmRjYzRjODcyOWE5ZDhhMTg3YTc0MGE1Ci0tLSAv
ZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvbnBtLXNocmlua3dyYXAuanNvbgpAQCAt
MCwwICsxLDEwNCBAQAoreworICAiZGVwZW5kZW5jaWVzIjogeworICAgICJhc2FwIjogeworICAg
ICAgInZlcnNpb24iOiAiMi4wLjUiLAorICAgICAgImZyb20iOiAiYXNhcEA+PTIuMC4zIDwyLjEu
MCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXNhcC8t
L2FzYXAtMi4wLjUudGd6IgorICAgIH0sCisgICAgImNsYXNzbmFtZXMiOiB7CisgICAgICAidmVy
c2lvbiI6ICIyLjIuNSIsCisgICAgICAiZnJvbSI6ICJjbGFzc25hbWVzQD49Mi4yLjUgPDMuMC4w
IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jbGFzc25h
bWVzLy0vY2xhc3NuYW1lcy0yLjIuNS50Z3oiCisgICAgfSwKKyAgICAiY29yZS1qcyI6IHsKKyAg
ICAgICJ2ZXJzaW9uIjogIjEuMi43IiwKKyAgICAgICJmcm9tIjogImNvcmUtanNAPj0xLjAuMCA8
Mi4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nv
cmUtanMvLS9jb3JlLWpzLTEuMi43LnRneiIKKyAgICB9LAorICAgICJkaXJlY3RvciI6IHsKKyAg
ICAgICJ2ZXJzaW9uIjogIjEuMi44IiwKKyAgICAgICJmcm9tIjogImRpcmVjdG9yQD49MS4yLjgg
PDIuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9k
aXJlY3Rvci8tL2RpcmVjdG9yLTEuMi44LnRneiIKKyAgICB9LAorICAgICJlbmNvZGluZyI6IHsK
KyAgICAgICJ2ZXJzaW9uIjogIjAuMS4xMiIsCisgICAgICAiZnJvbSI6ICJlbmNvZGluZ0A+PTAu
MS4xMSA8MC4yLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL2VuY29kaW5nLy0vZW5jb2RpbmctMC4xLjEyLnRneiIKKyAgICB9LAorICAgICJmYmpzIjog
eworICAgICAgInZlcnNpb24iOiAiMC44LjYiLAorICAgICAgImZyb20iOiAiZmJqc0A+PTAuOC40
IDwwLjkuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
ZmJqcy8tL2ZianMtMC44LjYudGd6IgorICAgIH0sCisgICAgImljb252LWxpdGUiOiB7CisgICAg
ICAidmVyc2lvbiI6ICIwLjQuMTUiLAorICAgICAgImZyb20iOiAiaWNvbnYtbGl0ZUA+PTAuNC4x
MyA8MC41LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3Jn
L2ljb252LWxpdGUvLS9pY29udi1saXRlLTAuNC4xNS50Z3oiCisgICAgfSwKKyAgICAiaXMtc3Ry
ZWFtIjogeworICAgICAgInZlcnNpb24iOiAiMS4xLjAiLAorICAgICAgImZyb20iOiAiaXMtc3Ry
ZWFtQD49MS4wLjEgPDIuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy9pcy1zdHJlYW0vLS9pcy1zdHJlYW0tMS4xLjAudGd6IgorICAgIH0sCisgICAg
Imlzb21vcnBoaWMtZmV0Y2giOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjIuMSIsCisgICAgICAi
ZnJvbSI6ICJpc29tb3JwaGljLWZldGNoQD49Mi4xLjEgPDMuMC4wIiwKKyAgICAgICJyZXNvbHZl
ZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pc29tb3JwaGljLWZldGNoLy0vaXNvbW9y
cGhpYy1mZXRjaC0yLjIuMS50Z3oiCisgICAgfSwKKyAgICAianMtdG9rZW5zIjogeworICAgICAg
InZlcnNpb24iOiAiMi4wLjAiLAorICAgICAgImZyb20iOiAianMtdG9rZW5zQD49Mi4wLjAgPDMu
MC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qcy10
b2tlbnMvLS9qcy10b2tlbnMtMi4wLjAudGd6IgorICAgIH0sCisgICAgImxvb3NlLWVudmlmeSI6
IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMy4wIiwKKyAgICAgICJmcm9tIjogImxvb3NlLWVudmlm
eUA+PTEuMS4wIDwyLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvbG9vc2UtZW52aWZ5Ly0vbG9vc2UtZW52aWZ5LTEuMy4wLnRneiIKKyAgICB9LAor
ICAgICJub2RlLWZldGNoIjogeworICAgICAgInZlcnNpb24iOiAiMS42LjMiLAorICAgICAgImZy
b20iOiAibm9kZS1mZXRjaEA+PTEuMC4xIDwyLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbm9kZS1mZXRjaC8tL25vZGUtZmV0Y2gtMS42LjMudGd6
IgorICAgIH0sCisgICAgIm9iamVjdC1hc3NpZ24iOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjEu
MCIsCisgICAgICAiZnJvbSI6ICJvYmplY3QtYXNzaWduQD49NC4xLjAgPDUuMC4wIiwKKyAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vYmplY3QtYXNzaWduLy0v
b2JqZWN0LWFzc2lnbi00LjEuMC50Z3oiCisgICAgfSwKKyAgICAicHJvbWlzZSI6IHsKKyAgICAg
ICJ2ZXJzaW9uIjogIjcuMS4xIiwKKyAgICAgICJmcm9tIjogInByb21pc2VAPj03LjEuMSA8OC4w
LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Byb21p
c2UvLS9wcm9taXNlLTcuMS4xLnRneiIKKyAgICB9LAorICAgICJyZWFjdCI6IHsKKyAgICAgICJ2
ZXJzaW9uIjogIjE1LjQuMCIsCisgICAgICAiZnJvbSI6ICJyZWFjdEAxNS40LjAiLAorICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlYWN0Ly0vcmVhY3QtMTUu
NC4wLnRneiIKKyAgICB9LAorICAgICJyZWFjdC1kb20iOiB7CisgICAgICAidmVyc2lvbiI6ICIx
NS40LjAiLAorICAgICAgImZyb20iOiAicmVhY3QtZG9tQDE1LjQuMCIsCisgICAgICAicmVzb2x2
ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVhY3QtZG9tLy0vcmVhY3QtZG9tLTE1
LjQuMC50Z3oiCisgICAgfSwKKyAgICAidG9kb212Yy1hcHAtY3NzIjogeworICAgICAgInZlcnNp
b24iOiAiMi4wLjYiLAorICAgICAgImZyb20iOiAidG9kb212Yy1hcHAtY3NzQD49Mi4wLjAgPDMu
MC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90b2Rv
bXZjLWFwcC1jc3MvLS90b2RvbXZjLWFwcC1jc3MtMi4wLjYudGd6IgorICAgIH0sCisgICAgInRv
ZG9tdmMtY29tbW9uIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjMiLAorICAgICAgImZyb20i
OiAidG9kb212Yy1jb21tb25APj0xLjAuMiA8Mi4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0
dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RvZG9tdmMtY29tbW9uLy0vdG9kb212Yy1jb21tb24t
MS4wLjMudGd6IgorICAgIH0sCisgICAgInVhLXBhcnNlci1qcyI6IHsKKyAgICAgICJ2ZXJzaW9u
IjogIjAuNy4xMiIsCisgICAgICAiZnJvbSI6ICJ1YS1wYXJzZXItanNAPj0wLjcuOSA8MC44LjAi
LAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3VhLXBhcnNl
ci1qcy8tL3VhLXBhcnNlci1qcy0wLjcuMTIudGd6IgorICAgIH0sCisgICAgIndoYXR3Zy1mZXRj
aCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKKyAgICAgICJmcm9tIjogIndoYXR3Zy1m
ZXRjaEA+PTAuMTAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1q
cy5vcmcvd2hhdHdnLWZldGNoLy0vd2hhdHdnLWZldGNoLTIuMC4xLnRneiIKKyAgICB9CisgIH0K
K30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L3BhY2thZ2UuanNvbiBiL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL3JlYWN0L3BhY2thZ2UuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZTZmM2Q2ZjI0MDQ5YWVhNWM5NDBj
NzcwNTU2M2YzZjA5NjY1YzM2Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qv
cGFja2FnZS5qc29uCkBAIC0wLDAgKzEsMjAgQEAKK3sKKyAgInByaXZhdGUiOiB0cnVlLAorICAi
c2NyaXB0cyI6IHsKKyAgICAibWFrZSI6ICJiYWJlbCAtLXBsdWdpbnMgdHJhbnNmb3JtLXJlYWN0
LWpzeCBqcy9hcHAuanN4IHwgdWdsaWZ5anMgLW8gYnVpbGQubWluLmpzIgorICB9LAorICAiZGVw
ZW5kZW5jaWVzIjogeworICAgICJjbGFzc25hbWVzIjogIl4yLjIuNSIsCisgICAgImRpcmVjdG9y
IjogIl4xLjIuOCIsCisgICAgInJlYWN0IjogIl4xNS40LjAiLAorICAgICJyZWFjdC1kb20iOiAi
XjE1LjQuMCIsCisgICAgInRvZG9tdmMtYXBwLWNzcyI6ICJeMi4wLjAiLAorICAgICJ0b2RvbXZj
LWNvbW1vbiI6ICJeMS4wLjIiCisgIH0sCisgICJkZXZEZXBlbmRlbmNpZXMiOiB7CisgICAgImJh
YmVsLWNsaSI6ICJeNi4xMC4xIiwKKyAgICAiYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1q
c3giOiAiXjYuOC4wIiwKKyAgICAiYmFiZWwtcGx1Z2luLXVnbGlmeSI6ICJeMS4wLjIiLAorICAg
ICJ1Z2xpZnktanMiOiAiXjIuNi40IgorICB9Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309875</attachid>
            <date>2017-05-11 23:46:13 -0700</date>
            <delta_ts>2017-05-12 02:00:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171444-20170511234612.patch</filename>
            <type>text/plain</type>
            <size>437392</size>
            <attacher name="Addy Osmani">addyo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2NzI2CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGE0MjAyNWY2ZWRj
NDM2ZGY3ZGNjZDcyMmQ4ZmUwMWEzNmM0NzViMGYuLmUwM2U4YTVlMDJkNGYzZTU3OTM4Mzg2ODUy
Zjk0NmU4ZTc1MmY0ZWQgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNDMgQEAKIDIwMTctMDUt
MTEgIEFkZHkgT3NtYW5pICA8YWRkeW9zbWFuaUBnbWFpbC5jb20+CiAKKyAgICAgICAgU3BlZWRv
bWV0ZXI6IEFkZCBhIFJlYWN0LmpzIFRvZG9NVkMgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTQ0NAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgYSBtb3JlIHJlY2VudCBS
ZWFjdC5qcyBUb2RvTVZDIGltcGxlbWVuYXRpb24gdG8gU3BlZWRvbWV0ZXIKKworICAgICAgICAq
IFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFj
dC9idWlsZC5taW4uanM6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9pbmRleC5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvcmVhY3QvanMvYXBwLmpzeDogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2xpY2Vuc2UubWQ6IEFkZGVk
LgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9MSUNFTlNFOiBBZGRlZC4KKyAg
ICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qczogQWRkZWQuCisgICAgICAg
ICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3Jl
YWN0L25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2Jvd2VyLmpzb246IEFkZGVkLgorICAgICAgICAq
IFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFj
dC9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9kZWR1cGUuanM6IEFkZGVkLgorICAgICAgICAqIFNw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9u
b2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qczogQWRkZWQuCisgICAgICAgICogU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVf
bW9kdWxlcy9jbGFzc25hbWVzL3BhY2thZ2UuanNvbjogQWRkZWQuCisgICAgICAgICogU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVf
bW9kdWxlcy9kaXJlY3Rvci9MSUNFTlNFOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVz
L2RpcmVjdG9yL2Jvd2VyLmpzb246IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvZGly
ZWN0b3IvcGFja2FnZS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3JlYWN0
LWRvbS9MSUNFTlNFOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9k
aXN0L3JlYWN0LWRvbS1zZXJ2ZXIubWluLmpzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1
bGVzL3JlYWN0LWRvbS9kaXN0L3JlYWN0LWRvbS5taW4uanM6IEFkZGVkLgorICAgICAgICAqIFNw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9u
b2RlX21vZHVsZXMvcmVhY3QtZG9tL2luZGV4LmpzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9t
b2R1bGVzL3JlYWN0L0xJQ0VOU0U6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvcmVh
Y3QvUkVBRE1FLm1kOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3JlYWN0L2Rpc3Qv
cmVhY3Qtd2l0aC1hZGRvbnMubWluLmpzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVz
L3JlYWN0L2Rpc3QvcmVhY3QubWluLmpzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVz
L3JlYWN0L3BhY2thZ2UuanNvbjogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy90b2Rv
bXZjLWFwcC1jc3MvaW5kZXguY3NzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3Rv
ZG9tdmMtY29tbW9uL2Jhc2UuY3NzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3Rv
ZG9tdmMtY29tbW9uL2Jhc2UuanM6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ucG0tc2hyaW5rd3JhcC5q
c29uOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvcGFja2FnZS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBT
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qv
eWFybi5sb2NrOiBBZGRlZC4KKworMjAxNy0wNS0xMSAgQWRkeSBPc21hbmkgIDxhZGR5b3NtYW5p
QGdtYWlsLmNvbT4KKwogICAgICAgICBTcGVlZG9tZXRlcjogQWRkIGFuIEluZmVybm8gVG9kb01W
QyBpbXBsZW1lbnRhdGlvbgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTcxNDExCiAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2J1aWxkLm1p
bi5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2J1aWxkLm1pbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYzVlYWYy
NDNiMmNkYTIwZjVjMTBhODM3M2NlNjJiODc3ZTk4OTBiCi0tLSAvZGV2L251bGwKKysrIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvcmVhY3QvYnVpbGQubWluLmpzCkBAIC0wLDAgKzEgQEAKK3ZhciBhcHA9YXBwfHx7
fTsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7YXBwLkFMTF9UT0RPUz0iYWxsIjthcHAuQUNUSVZF
X1RPRE9TPSJhY3RpdmUiO2FwcC5DT01QTEVURURfVE9ET1M9ImNvbXBsZXRlZCI7YXBwLlV0aWxz
PXt1dWlkOmZ1bmN0aW9uKCl7dmFyIGkscmFuZG9tO3ZhciB1dWlkPSIiO2ZvcihpPTA7aTwzMjtp
Kyspe3JhbmRvbT1NYXRoLnJhbmRvbSgpKjE2fDA7aWYoaT09PTh8fGk9PT0xMnx8aT09PTE2fHxp
PT09MjApe3V1aWQrPSItIn11dWlkKz0oaT09PTEyPzQ6aT09PTE2P3JhbmRvbSYzfDg6cmFuZG9t
KS50b1N0cmluZygxNil9cmV0dXJuIHV1aWR9LHBsdXJhbGl6ZTpmdW5jdGlvbihjb3VudCx3b3Jk
KXtyZXR1cm4gY291bnQ9PT0xP3dvcmQ6d29yZCsicyJ9LGV4dGVuZDpmdW5jdGlvbigpe3ZhciBu
ZXdPYmo9e307Zm9yKHZhciBpPTA7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIG9iaj1hcmd1
bWVudHNbaV07Zm9yKHZhciBrZXkgaW4gb2JqKXtpZihvYmouaGFzT3duUHJvcGVydHkoa2V5KSl7
bmV3T2JqW2tleV09b2JqW2tleV19fX1yZXR1cm4gbmV3T2JqfX07dmFyIFV0aWxzPWFwcC5VdGls
czthcHAuVG9kb01vZGVsPWZ1bmN0aW9uKGtleSl7dGhpcy5rZXk9a2V5O3RoaXMudG9kb3M9W107
dGhpcy5vbkNoYW5nZXM9W119O2FwcC5Ub2RvTW9kZWwucHJvdG90eXBlLnN1YnNjcmliZT1mdW5j
dGlvbihvbkNoYW5nZSl7dGhpcy5vbkNoYW5nZXMucHVzaChvbkNoYW5nZSl9O2FwcC5Ub2RvTW9k
ZWwucHJvdG90eXBlLmluZm9ybT1mdW5jdGlvbigpe3RoaXMub25DaGFuZ2VzLmZvckVhY2goZnVu
Y3Rpb24oY2Ipe2NiKCl9KX07YXBwLlRvZG9Nb2RlbC5wcm90b3R5cGUuYWRkVG9kbz1mdW5jdGlv
bih0aXRsZSl7dGhpcy50b2Rvcz10aGlzLnRvZG9zLmNvbmNhdCh7aWQ6VXRpbHMudXVpZCgpLHRp
dGxlOnRpdGxlLGNvbXBsZXRlZDpmYWxzZX0pO3RoaXMuaW5mb3JtKCl9O2FwcC5Ub2RvTW9kZWwu
cHJvdG90eXBlLnRvZ2dsZUFsbD1mdW5jdGlvbihjaGVja2VkKXt0aGlzLnRvZG9zPXRoaXMudG9k
b3MubWFwKGZ1bmN0aW9uKHRvZG8pe3JldHVybiBVdGlscy5leHRlbmQoe30sdG9kbyx7Y29tcGxl
dGVkOmNoZWNrZWR9KX0pO3RoaXMuaW5mb3JtKCl9O2FwcC5Ub2RvTW9kZWwucHJvdG90eXBlLnRv
Z2dsZT1mdW5jdGlvbih0b2RvVG9Ub2dnbGUpe3RoaXMudG9kb3M9dGhpcy50b2Rvcy5tYXAoZnVu
Y3Rpb24odG9kbyl7cmV0dXJuIHRvZG8hPT10b2RvVG9Ub2dnbGU/dG9kbzpVdGlscy5leHRlbmQo
e30sdG9kbyx7Y29tcGxldGVkOiF0b2RvLmNvbXBsZXRlZH0pfSk7dGhpcy5pbmZvcm0oKX07YXBw
LlRvZG9Nb2RlbC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbih0b2RvKXt0aGlzLnRvZG9zPXRo
aXMudG9kb3MuZmlsdGVyKGZ1bmN0aW9uKGNhbmRpZGF0ZSl7cmV0dXJuIGNhbmRpZGF0ZSE9PXRv
ZG99KTt0aGlzLmluZm9ybSgpfTthcHAuVG9kb01vZGVsLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9u
KHRvZG9Ub1NhdmUsdGV4dCl7dGhpcy50b2Rvcz10aGlzLnRvZG9zLm1hcChmdW5jdGlvbih0b2Rv
KXtyZXR1cm4gdG9kbyE9PXRvZG9Ub1NhdmU/dG9kbzpVdGlscy5leHRlbmQoe30sdG9kbyx7dGl0
bGU6dGV4dH0pfSk7dGhpcy5pbmZvcm0oKX07YXBwLlRvZG9Nb2RlbC5wcm90b3R5cGUuY2xlYXJD
b21wbGV0ZWQ9ZnVuY3Rpb24oKXt0aGlzLnRvZG9zPXRoaXMudG9kb3MuZmlsdGVyKGZ1bmN0aW9u
KHRvZG8pe3JldHVybiF0b2RvLmNvbXBsZXRlZH0pO3RoaXMuaW5mb3JtKCl9O3ZhciBUb2RvRm9v
dGVyPVJlYWN0LmNyZWF0ZUNsYXNzKHtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgYWN0aXZlVG9kb1dv
cmQ9YXBwLlV0aWxzLnBsdXJhbGl6ZSh0aGlzLnByb3BzLmNvdW50LCJpdGVtIik7dmFyIGNsZWFy
QnV0dG9uPW51bGw7aWYodGhpcy5wcm9wcy5jb21wbGV0ZWRDb3VudD4wKXtjbGVhckJ1dHRvbj1S
ZWFjdC5jcmVhdGVFbGVtZW50KCJidXR0b24iLHtjbGFzc05hbWU6ImNsZWFyLWNvbXBsZXRlZCIs
b25DbGljazp0aGlzLnByb3BzLm9uQ2xlYXJDb21wbGV0ZWR9LCJDbGVhciBjb21wbGV0ZWQiKX12
YXIgbm93U2hvd2luZz10aGlzLnByb3BzLm5vd1Nob3dpbmc7cmV0dXJuIFJlYWN0LmNyZWF0ZUVs
ZW1lbnQoImZvb3RlciIse2NsYXNzTmFtZToiZm9vdGVyIn0sUmVhY3QuY3JlYXRlRWxlbWVudCgi
c3BhbiIse2NsYXNzTmFtZToidG9kby1jb3VudCJ9LFJlYWN0LmNyZWF0ZUVsZW1lbnQoInN0cm9u
ZyIsbnVsbCx0aGlzLnByb3BzLmNvdW50KSwiICIsYWN0aXZlVG9kb1dvcmQsIiBsZWZ0IiksUmVh
Y3QuY3JlYXRlRWxlbWVudCgidWwiLHtjbGFzc05hbWU6ImZpbHRlcnMifSxSZWFjdC5jcmVhdGVF
bGVtZW50KCJsaSIsbnVsbCxSZWFjdC5jcmVhdGVFbGVtZW50KCJhIix7aHJlZjoiIy8iLGNsYXNz
TmFtZTpjbGFzc05hbWVzKHtzZWxlY3RlZDpub3dTaG93aW5nPT09YXBwLkFMTF9UT0RPU30pfSwi
QWxsIikpLCIgIixSZWFjdC5jcmVhdGVFbGVtZW50KCJsaSIsbnVsbCxSZWFjdC5jcmVhdGVFbGVt
ZW50KCJhIix7aHJlZjoiIy9hY3RpdmUiLGNsYXNzTmFtZTpjbGFzc05hbWVzKHtzZWxlY3RlZDpu
b3dTaG93aW5nPT09YXBwLkFDVElWRV9UT0RPU30pfSwiQWN0aXZlIikpLCIgIixSZWFjdC5jcmVh
dGVFbGVtZW50KCJsaSIsbnVsbCxSZWFjdC5jcmVhdGVFbGVtZW50KCJhIix7aHJlZjoiIy9jb21w
bGV0ZWQiLGNsYXNzTmFtZTpjbGFzc05hbWVzKHtzZWxlY3RlZDpub3dTaG93aW5nPT09YXBwLkNP
TVBMRVRFRF9UT0RPU30pfSwiQ29tcGxldGVkIikpKSxjbGVhckJ1dHRvbil9fSk7dmFyIEVTQ0FQ
RV9LRVk9Mjc7dmFyIEVOVEVSX0tFWT0xMzt2YXIgVG9kb0l0ZW09UmVhY3QuY3JlYXRlQ2xhc3Mo
e2hhbmRsZVN1Ym1pdDpmdW5jdGlvbihldmVudCl7dmFyIHZhbD10aGlzLnN0YXRlLmVkaXRUZXh0
LnRyaW0oKTtpZih2YWwpe3RoaXMucHJvcHMub25TYXZlKHZhbCk7dGhpcy5zZXRTdGF0ZSh7ZWRp
dFRleHQ6dmFsfSl9ZWxzZXt0aGlzLnByb3BzLm9uRGVzdHJveSgpfX0saGFuZGxlRWRpdDpmdW5j
dGlvbigpe3RoaXMucHJvcHMub25FZGl0KCk7dGhpcy5zZXRTdGF0ZSh7ZWRpdFRleHQ6dGhpcy5w
cm9wcy50b2RvLnRpdGxlfSl9LGhhbmRsZUtleURvd246ZnVuY3Rpb24oZXZlbnQpe2lmKGV2ZW50
LndoaWNoPT09RVNDQVBFX0tFWSl7dGhpcy5zZXRTdGF0ZSh7ZWRpdFRleHQ6dGhpcy5wcm9wcy50
b2RvLnRpdGxlfSk7dGhpcy5wcm9wcy5vbkNhbmNlbChldmVudCl9ZWxzZSBpZihldmVudC53aGlj
aD09PUVOVEVSX0tFWSl7dGhpcy5oYW5kbGVTdWJtaXQoZXZlbnQpfX0saGFuZGxlQ2hhbmdlOmZ1
bmN0aW9uKGV2ZW50KXtpZih0aGlzLnByb3BzLmVkaXRpbmcpe3RoaXMuc2V0U3RhdGUoe2VkaXRU
ZXh0OmV2ZW50LnRhcmdldC52YWx1ZX0pfX0sZ2V0SW5pdGlhbFN0YXRlOmZ1bmN0aW9uKCl7cmV0
dXJue2VkaXRUZXh0OnRoaXMucHJvcHMudG9kby50aXRsZX19LHNob3VsZENvbXBvbmVudFVwZGF0
ZTpmdW5jdGlvbihuZXh0UHJvcHMsbmV4dFN0YXRlKXtyZXR1cm4gbmV4dFByb3BzLnRvZG8hPT10
aGlzLnByb3BzLnRvZG98fG5leHRQcm9wcy5lZGl0aW5nIT09dGhpcy5wcm9wcy5lZGl0aW5nfHxu
ZXh0U3RhdGUuZWRpdFRleHQhPT10aGlzLnN0YXRlLmVkaXRUZXh0fSxjb21wb25lbnREaWRVcGRh
dGU6ZnVuY3Rpb24ocHJldlByb3BzKXtpZighcHJldlByb3BzLmVkaXRpbmcmJnRoaXMucHJvcHMu
ZWRpdGluZyl7dmFyIG5vZGU9UmVhY3QuZmluZERPTU5vZGUodGhpcy5yZWZzLmVkaXRGaWVsZCk7
bm9kZS5mb2N1cygpO25vZGUuc2V0U2VsZWN0aW9uUmFuZ2Uobm9kZS52YWx1ZS5sZW5ndGgsbm9k
ZS52YWx1ZS5sZW5ndGgpfX0scmVuZGVyOmZ1bmN0aW9uKCl7cmV0dXJuIFJlYWN0LmNyZWF0ZUVs
ZW1lbnQoImxpIix7Y2xhc3NOYW1lOmNsYXNzTmFtZXMoe2NvbXBsZXRlZDp0aGlzLnByb3BzLnRv
ZG8uY29tcGxldGVkLGVkaXRpbmc6dGhpcy5wcm9wcy5lZGl0aW5nfSl9LFJlYWN0LmNyZWF0ZUVs
ZW1lbnQoImRpdiIse2NsYXNzTmFtZToidmlldyJ9LFJlYWN0LmNyZWF0ZUVsZW1lbnQoImlucHV0
Iix7Y2xhc3NOYW1lOiJ0b2dnbGUiLHR5cGU6ImNoZWNrYm94IixjaGVja2VkOnRoaXMucHJvcHMu
dG9kby5jb21wbGV0ZWQsb25DaGFuZ2U6dGhpcy5wcm9wcy5vblRvZ2dsZX0pLFJlYWN0LmNyZWF0
ZUVsZW1lbnQoImxhYmVsIix7b25Eb3VibGVDbGljazp0aGlzLmhhbmRsZUVkaXR9LHRoaXMucHJv
cHMudG9kby50aXRsZSksUmVhY3QuY3JlYXRlRWxlbWVudCgiYnV0dG9uIix7Y2xhc3NOYW1lOiJk
ZXN0cm95IixvbkNsaWNrOnRoaXMucHJvcHMub25EZXN0cm95fSkpLFJlYWN0LmNyZWF0ZUVsZW1l
bnQoImlucHV0Iix7cmVmOiJlZGl0RmllbGQiLGNsYXNzTmFtZToiZWRpdCIsdmFsdWU6dGhpcy5z
dGF0ZS5lZGl0VGV4dCxvbkJsdXI6dGhpcy5oYW5kbGVTdWJtaXQsb25DaGFuZ2U6dGhpcy5oYW5k
bGVDaGFuZ2Usb25LZXlEb3duOnRoaXMuaGFuZGxlS2V5RG93bn0pKX19KTt2YXIgRU5URVJfS0VZ
PTEzO3ZhciBUb2RvQXBwPVJlYWN0LmNyZWF0ZUNsYXNzKHtnZXRJbml0aWFsU3RhdGU6ZnVuY3Rp
b24oKXtyZXR1cm57bm93U2hvd2luZzphcHAuQUxMX1RPRE9TLGVkaXRpbmc6bnVsbCxuZXdUb2Rv
OiIifX0sY29tcG9uZW50RGlkTW91bnQ6ZnVuY3Rpb24oKXt2YXIgc2V0U3RhdGU9dGhpcy5zZXRT
dGF0ZTt2YXIgcm91dGVyPVJvdXRlcih7Ii8iOnNldFN0YXRlLmJpbmQodGhpcyx7bm93U2hvd2lu
ZzphcHAuQUxMX1RPRE9TfSksIi9hY3RpdmUiOnNldFN0YXRlLmJpbmQodGhpcyx7bm93U2hvd2lu
ZzphcHAuQUNUSVZFX1RPRE9TfSksIi9jb21wbGV0ZWQiOnNldFN0YXRlLmJpbmQodGhpcyx7bm93
U2hvd2luZzphcHAuQ09NUExFVEVEX1RPRE9TfSl9KTtyb3V0ZXIuaW5pdCgiLyIpfSxoYW5kbGVD
aGFuZ2U6ZnVuY3Rpb24oZXZlbnQpe3RoaXMuc2V0U3RhdGUoe25ld1RvZG86ZXZlbnQudGFyZ2V0
LnZhbHVlfSl9LGhhbmRsZU5ld1RvZG9LZXlEb3duOmZ1bmN0aW9uKGV2ZW50KXtpZihldmVudC5r
ZXlDb2RlIT09RU5URVJfS0VZKXtyZXR1cm59ZXZlbnQucHJldmVudERlZmF1bHQoKTt2YXIgdmFs
PXRoaXMuc3RhdGUubmV3VG9kby50cmltKCk7aWYodmFsKXt0aGlzLnByb3BzLm1vZGVsLmFkZFRv
ZG8odmFsKTt0aGlzLnNldFN0YXRlKHtuZXdUb2RvOiIifSl9fSx0b2dnbGVBbGw6ZnVuY3Rpb24o
ZXZlbnQpe3ZhciBjaGVja2VkPWV2ZW50LnRhcmdldC5jaGVja2VkO3RoaXMucHJvcHMubW9kZWwu
dG9nZ2xlQWxsKGNoZWNrZWQpfSx0b2dnbGU6ZnVuY3Rpb24odG9kb1RvVG9nZ2xlKXt0aGlzLnBy
b3BzLm1vZGVsLnRvZ2dsZSh0b2RvVG9Ub2dnbGUpfSxkZXN0cm95OmZ1bmN0aW9uKHRvZG8pe3Ro
aXMucHJvcHMubW9kZWwuZGVzdHJveSh0b2RvKX0sZWRpdDpmdW5jdGlvbih0b2RvKXt0aGlzLnNl
dFN0YXRlKHtlZGl0aW5nOnRvZG8uaWR9KX0sc2F2ZTpmdW5jdGlvbih0b2RvVG9TYXZlLHRleHQp
e3RoaXMucHJvcHMubW9kZWwuc2F2ZSh0b2RvVG9TYXZlLHRleHQpO3RoaXMuc2V0U3RhdGUoe2Vk
aXRpbmc6bnVsbH0pfSxjYW5jZWw6ZnVuY3Rpb24oKXt0aGlzLnNldFN0YXRlKHtlZGl0aW5nOm51
bGx9KX0sY2xlYXJDb21wbGV0ZWQ6ZnVuY3Rpb24oKXt0aGlzLnByb3BzLm1vZGVsLmNsZWFyQ29t
cGxldGVkKCl9LHJlbmRlcjpmdW5jdGlvbigpe3ZhciBmb290ZXI7dmFyIG1haW47dmFyIHRvZG9z
PXRoaXMucHJvcHMubW9kZWwudG9kb3M7dmFyIHNob3duVG9kb3M9dG9kb3MuZmlsdGVyKGZ1bmN0
aW9uKHRvZG8pe3N3aXRjaCh0aGlzLnN0YXRlLm5vd1Nob3dpbmcpe2Nhc2UgYXBwLkFDVElWRV9U
T0RPUzpyZXR1cm4hdG9kby5jb21wbGV0ZWQ7Y2FzZSBhcHAuQ09NUExFVEVEX1RPRE9TOnJldHVy
biB0b2RvLmNvbXBsZXRlZDtkZWZhdWx0OnJldHVybiB0cnVlfX0sdGhpcyk7dmFyIHRvZG9JdGVt
cz1zaG93blRvZG9zLm1hcChmdW5jdGlvbih0b2RvKXtyZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVu
dChUb2RvSXRlbSx7a2V5OnRvZG8uaWQsdG9kbzp0b2RvLG9uVG9nZ2xlOnRoaXMudG9nZ2xlLmJp
bmQodGhpcyx0b2RvKSxvbkRlc3Ryb3k6dGhpcy5kZXN0cm95LmJpbmQodGhpcyx0b2RvKSxvbkVk
aXQ6dGhpcy5lZGl0LmJpbmQodGhpcyx0b2RvKSxlZGl0aW5nOnRoaXMuc3RhdGUuZWRpdGluZz09
PXRvZG8uaWQsb25TYXZlOnRoaXMuc2F2ZS5iaW5kKHRoaXMsdG9kbyksb25DYW5jZWw6dGhpcy5j
YW5jZWx9KX0sdGhpcyk7dmFyIGFjdGl2ZVRvZG9Db3VudD10b2Rvcy5yZWR1Y2UoZnVuY3Rpb24o
YWNjdW0sdG9kbyl7cmV0dXJuIHRvZG8uY29tcGxldGVkP2FjY3VtOmFjY3VtKzF9LDApO3ZhciBj
b21wbGV0ZWRDb3VudD10b2Rvcy5sZW5ndGgtYWN0aXZlVG9kb0NvdW50O2lmKGFjdGl2ZVRvZG9D
b3VudHx8Y29tcGxldGVkQ291bnQpe2Zvb3Rlcj1SZWFjdC5jcmVhdGVFbGVtZW50KFRvZG9Gb290
ZXIse2NvdW50OmFjdGl2ZVRvZG9Db3VudCxjb21wbGV0ZWRDb3VudDpjb21wbGV0ZWRDb3VudCxu
b3dTaG93aW5nOnRoaXMuc3RhdGUubm93U2hvd2luZyxvbkNsZWFyQ29tcGxldGVkOnRoaXMuY2xl
YXJDb21wbGV0ZWR9KX1pZih0b2Rvcy5sZW5ndGgpe21haW49UmVhY3QuY3JlYXRlRWxlbWVudCgi
c2VjdGlvbiIse2NsYXNzTmFtZToibWFpbiJ9LFJlYWN0LmNyZWF0ZUVsZW1lbnQoImlucHV0Iix7
Y2xhc3NOYW1lOiJ0b2dnbGUtYWxsIix0eXBlOiJjaGVja2JveCIsb25DaGFuZ2U6dGhpcy50b2dn
bGVBbGwsY2hlY2tlZDphY3RpdmVUb2RvQ291bnQ9PT0wfSksUmVhY3QuY3JlYXRlRWxlbWVudCgi
dWwiLHtjbGFzc05hbWU6InRvZG8tbGlzdCJ9LHRvZG9JdGVtcykpfXJldHVybiBSZWFjdC5jcmVh
dGVFbGVtZW50KCJkaXYiLG51bGwsUmVhY3QuY3JlYXRlRWxlbWVudCgiaGVhZGVyIix7Y2xhc3NO
YW1lOiJoZWFkZXIifSxSZWFjdC5jcmVhdGVFbGVtZW50KCJoMSIsbnVsbCwidG9kb3MiKSxSZWFj
dC5jcmVhdGVFbGVtZW50KCJpbnB1dCIse2NsYXNzTmFtZToibmV3LXRvZG8iLHBsYWNlaG9sZGVy
OiJXaGF0IG5lZWRzIHRvIGJlIGRvbmU/Iix2YWx1ZTp0aGlzLnN0YXRlLm5ld1RvZG8sb25LZXlE
b3duOnRoaXMuaGFuZGxlTmV3VG9kb0tleURvd24sb25DaGFuZ2U6dGhpcy5oYW5kbGVDaGFuZ2Us
YXV0b0ZvY3VzOnRydWV9KSksbWFpbixmb290ZXIpfX0pO3ZhciBtb2RlbD1uZXcgYXBwLlRvZG9N
b2RlbCgicmVhY3QtdG9kb3MiKTtmdW5jdGlvbiByZW5kZXIoKXtSZWFjdERPTS5yZW5kZXIoUmVh
Y3QuY3JlYXRlRWxlbWVudChUb2RvQXBwLHttb2RlbDptb2RlbH0pLGRvY3VtZW50LmdldEVsZW1l
bnRzQnlDbGFzc05hbWUoInRvZG9hcHAiKVswXSl9bW9kZWwuc3Vic2NyaWJlKHJlbmRlcik7cmVu
ZGVyKCl9KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL3JlYWN0L2luZGV4Lmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9pbmRleC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjI5ZTU2MTZiYWE2MDM2YTY1YmVhZmM4ZjBmMDA5MzlhYjVkMGNlN2EKLS0tIC9k
ZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9pbmRleC5odG1sCkBAIC0wLDAgKzEsMjIg
QEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWwgbGFuZz0iZW4iIGRhdGEtZnJhbWV3b3JrPSJyZWFj
dCI+CisgICAgPGhlYWQ+CisgICAgICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICAgICAg
PHRpdGxlPlJlYWN0IOKAoiBUb2RvTVZDPC90aXRsZT4KKyAgICAgICAgPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiBocmVmPSJub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MiPgorICAg
ICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Im5vZGVfbW9kdWxlcy90b2RvbXZjLWFw
cC1jc3MvaW5kZXguY3NzIj4KKyAgICA8L2hlYWQ+CisgICAgPGJvZHk+CisgICAgICAgIDxzZWN0
aW9uIGNsYXNzPSJ0b2RvYXBwIj48L3NlY3Rpb24+CisgICAgICAgIDxmb290ZXIgY2xhc3M9Imlu
Zm8iPgorICAgICAgICAgICAgPHA+RG91YmxlLWNsaWNrIHRvIGVkaXQgYSB0b2RvPC9wPgorICAg
ICAgICAgICAgPHA+UGFydCBvZiA8YSBocmVmPSJodHRwOi8vdG9kb212Yy5jb20iPlRvZG9NVkM8
L2E+PC9wPgorICAgICAgICA8L2Zvb3Rlcj4KKworICAgIDxzY3JpcHQgc3JjPSJub2RlX21vZHVs
ZXMvY2xhc3NuYW1lcy9pbmRleC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Im5vZGVf
bW9kdWxlcy9kaXJlY3Rvci9idWlsZC9kaXJlY3Rvci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9Im5vZGVfbW9kdWxlcy9yZWFjdC9kaXN0L3JlYWN0LXdpdGgtYWRkb25zLm1pbi5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Im5vZGVfbW9kdWxlcy9yZWFjdC1kb20vZGlzdC9y
ZWFjdC1kb20ubWluLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iYnVpbGQubWluLmpz
Ij48L3NjcmlwdD4KKyAgICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9yZWFjdC9qcy9hcHAuanN4IGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvanMvYXBwLmpzeApuZXcgZmls
ZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mZDg5NWU1MTA1ODRmYzlkZWQxNjZiNDQ0MzkyNjc4M2YxNTA0MmI0Ci0tLSAvZGV2L251
bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvanMvYXBwLmpzeApAQCAtMCwwICsxLDQ0MiBAQAor
Lypqc2hpbnQgcXVvdG1hcms6ZmFsc2UgKi8KKy8qanNoaW50IHdoaXRlOmZhbHNlICovCisvKmpz
aGludCB0cmFpbGluZzpmYWxzZSAqLworLypqc2hpbnQgbmV3Y2FwOmZhbHNlICovCisvKmdsb2Jh
bCBSZWFjdCwgUm91dGVyKi8KK3ZhciBhcHAgPSBhcHAgfHwge307CisKKyhmdW5jdGlvbiAoKSB7
CisJJ3VzZSBzdHJpY3QnOworCisJYXBwLkFMTF9UT0RPUyA9ICdhbGwnOworCWFwcC5BQ1RJVkVf
VE9ET1MgPSAnYWN0aXZlJzsKKwlhcHAuQ09NUExFVEVEX1RPRE9TID0gJ2NvbXBsZXRlZCc7CisK
KyAgYXBwLlV0aWxzID0geworICAgIHV1aWQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgIC8qanNoaW50
IGJpdHdpc2U6ZmFsc2UgKi8KKyAgICAgIHZhciBpLCByYW5kb207CisgICAgICB2YXIgdXVpZCA9
ICcnOworCisgICAgICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworICAgICAgICByYW5kb20g
PSBNYXRoLnJhbmRvbSgpICogMTYgfCAwOworICAgICAgICBpZiAoaSA9PT0gOCB8fCBpID09PSAx
MiB8fCBpID09PSAxNiB8fCBpID09PSAyMCkgeworICAgICAgICAgIHV1aWQgKz0gJy0nOworICAg
ICAgICB9CisgICAgICAgIHV1aWQgKz0gKGkgPT09IDEyID8gNCA6IChpID09PSAxNiA/IChyYW5k
b20gJiAzIHwgOCkgOiByYW5kb20pKQorICAgICAgICAgIC50b1N0cmluZygxNik7CisgICAgICB9
CisKKyAgICAgIHJldHVybiB1dWlkOworICAgIH0sCisKKyAgICBwbHVyYWxpemU6IGZ1bmN0aW9u
IChjb3VudCwgd29yZCkgeworICAgICAgcmV0dXJuIGNvdW50ID09PSAxID8gd29yZCA6IHdvcmQg
KyAncyc7CisgICAgfSwKKworICAgIGV4dGVuZDogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIG5l
d09iaiA9IHt9OworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgdmFyIG9iaiA9IGFyZ3VtZW50c1tpXTsKKyAgICAgICAgZm9yICh2YXIg
a2V5IGluIG9iaikgeworICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkgewor
ICAgICAgICAgICAgbmV3T2JqW2tleV0gPSBvYmpba2V5XTsKKyAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgIH0KKyAgICAgIHJldHVybiBuZXdPYmo7CisgICAgfQorICB9OworCisgIHZhciBV
dGlscyA9IGFwcC5VdGlsczsKKyAgLy8gR2VuZXJpYyAibW9kZWwiIG9iamVjdC4gWW91IGNhbiB1
c2Ugd2hhdGV2ZXIKKyAgLy8gZnJhbWV3b3JrIHlvdSB3YW50LiBGb3IgdGhpcyBhcHBsaWNhdGlv
biBpdAorICAvLyBtYXkgbm90IGV2ZW4gYmUgd29ydGggc2VwYXJhdGluZyB0aGlzIGxvZ2ljCisg
IC8vIG91dCwgYnV0IHdlIGRvIHRoaXMgdG8gZGVtb25zdHJhdGUgb25lIHdheSB0bworICAvLyBz
ZXBhcmF0ZSBvdXQgcGFydHMgb2YgeW91ciBhcHBsaWNhdGlvbi4KKyAgYXBwLlRvZG9Nb2RlbCA9
IGZ1bmN0aW9uIChrZXkpIHsKKyAgICB0aGlzLmtleSA9IGtleTsKKyAgICB0aGlzLnRvZG9zID0g
W107CisgICAgdGhpcy5vbkNoYW5nZXMgPSBbXTsKKyAgfTsKKworICBhcHAuVG9kb01vZGVsLnBy
b3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiAob25DaGFuZ2UpIHsKKyAgICB0aGlzLm9uQ2hh
bmdlcy5wdXNoKG9uQ2hhbmdlKTsKKyAgfTsKKworICBhcHAuVG9kb01vZGVsLnByb3RvdHlwZS5p
bmZvcm0gPSBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy5vbkNoYW5nZXMuZm9yRWFjaChmdW5jdGlv
biAoY2IpIHsgY2IoKTsgfSk7CisgIH07CisKKyAgYXBwLlRvZG9Nb2RlbC5wcm90b3R5cGUuYWRk
VG9kbyA9IGZ1bmN0aW9uICh0aXRsZSkgeworICAgIHRoaXMudG9kb3MgPSB0aGlzLnRvZG9zLmNv
bmNhdCh7CisgICAgICBpZDogVXRpbHMudXVpZCgpLAorICAgICAgdGl0bGU6IHRpdGxlLAorICAg
ICAgY29tcGxldGVkOiBmYWxzZQorICAgIH0pOworCisgICAgdGhpcy5pbmZvcm0oKTsKKyAgfTsK
KworICBhcHAuVG9kb01vZGVsLnByb3RvdHlwZS50b2dnbGVBbGwgPSBmdW5jdGlvbiAoY2hlY2tl
ZCkgeworICAgIC8vIE5vdGU6IGl0J3MgdXN1YWxseSBiZXR0ZXIgdG8gdXNlIGltbXV0YWJsZSBk
YXRhIHN0cnVjdHVyZXMgc2luY2UgdGhleSdyZQorICAgIC8vIGVhc2llciB0byByZWFzb24gYWJv
dXQgYW5kIFJlYWN0IHdvcmtzIHZlcnkgd2VsbCB3aXRoIHRoZW0uIFRoYXQncyB3aHkKKyAgICAv
LyB3ZSB1c2UgbWFwKCkgYW5kIGZpbHRlcigpIGV2ZXJ5d2hlcmUgaW5zdGVhZCBvZiBtdXRhdGlu
ZyB0aGUgYXJyYXkgb3IKKyAgICAvLyB0b2RvIGl0ZW1zIHRoZW1zZWx2ZXMuCisgICAgdGhpcy50
b2RvcyA9IHRoaXMudG9kb3MubWFwKGZ1bmN0aW9uICh0b2RvKSB7CisgICAgICByZXR1cm4gVXRp
bHMuZXh0ZW5kKHt9LCB0b2RvLCB7Y29tcGxldGVkOiBjaGVja2VkfSk7CisgICAgfSk7CisKKyAg
ICB0aGlzLmluZm9ybSgpOworICB9OworCisgIGFwcC5Ub2RvTW9kZWwucHJvdG90eXBlLnRvZ2ds
ZSA9IGZ1bmN0aW9uICh0b2RvVG9Ub2dnbGUpIHsKKyAgICB0aGlzLnRvZG9zID0gdGhpcy50b2Rv
cy5tYXAoZnVuY3Rpb24gKHRvZG8pIHsKKyAgICAgIHJldHVybiB0b2RvICE9PSB0b2RvVG9Ub2dn
bGUgPworICAgICAgICB0b2RvIDoKKyAgICAgICAgVXRpbHMuZXh0ZW5kKHt9LCB0b2RvLCB7Y29t
cGxldGVkOiAhdG9kby5jb21wbGV0ZWR9KTsKKyAgICB9KTsKKworICAgIHRoaXMuaW5mb3JtKCk7
CisgIH07CisKKyAgYXBwLlRvZG9Nb2RlbC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICh0
b2RvKSB7CisgICAgdGhpcy50b2RvcyA9IHRoaXMudG9kb3MuZmlsdGVyKGZ1bmN0aW9uIChjYW5k
aWRhdGUpIHsKKyAgICAgIHJldHVybiBjYW5kaWRhdGUgIT09IHRvZG87CisgICAgfSk7CisKKyAg
ICB0aGlzLmluZm9ybSgpOworICB9OworCisgIGFwcC5Ub2RvTW9kZWwucHJvdG90eXBlLnNhdmUg
PSBmdW5jdGlvbiAodG9kb1RvU2F2ZSwgdGV4dCkgeworICAgIHRoaXMudG9kb3MgPSB0aGlzLnRv
ZG9zLm1hcChmdW5jdGlvbiAodG9kbykgeworICAgICAgcmV0dXJuIHRvZG8gIT09IHRvZG9Ub1Nh
dmUgPyB0b2RvIDogVXRpbHMuZXh0ZW5kKHt9LCB0b2RvLCB7dGl0bGU6IHRleHR9KTsKKyAgICB9
KTsKKworICAgIHRoaXMuaW5mb3JtKCk7CisgIH07CisKKyAgYXBwLlRvZG9Nb2RlbC5wcm90b3R5
cGUuY2xlYXJDb21wbGV0ZWQgPSBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy50b2RvcyA9IHRoaXMu
dG9kb3MuZmlsdGVyKGZ1bmN0aW9uICh0b2RvKSB7CisgICAgICByZXR1cm4gIXRvZG8uY29tcGxl
dGVkOworICAgIH0pOworCisgICAgdGhpcy5pbmZvcm0oKTsKKyAgfTsKKworCisgIHZhciBUb2Rv
Rm9vdGVyID0gUmVhY3QuY3JlYXRlQ2xhc3MoeworICAgIHJlbmRlcjogZnVuY3Rpb24gKCkgewor
ICAgICAgdmFyIGFjdGl2ZVRvZG9Xb3JkID0gYXBwLlV0aWxzLnBsdXJhbGl6ZSh0aGlzLnByb3Bz
LmNvdW50LCAnaXRlbScpOworICAgICAgdmFyIGNsZWFyQnV0dG9uID0gbnVsbDsKKworICAgICAg
aWYgKHRoaXMucHJvcHMuY29tcGxldGVkQ291bnQgPiAwKSB7CisgICAgICAgIGNsZWFyQnV0dG9u
ID0gKAorICAgICAgICAgIDxidXR0b24KKyAgICAgICAgICAgIGNsYXNzTmFtZT0iY2xlYXItY29t
cGxldGVkIgorICAgICAgICAgICAgb25DbGljaz17dGhpcy5wcm9wcy5vbkNsZWFyQ29tcGxldGVk
fT4KKyAgICAgICAgICAgIENsZWFyIGNvbXBsZXRlZAorICAgICAgICAgIDwvYnV0dG9uPgorICAg
ICAgICApOworICAgICAgfQorCisgICAgICB2YXIgbm93U2hvd2luZyA9IHRoaXMucHJvcHMubm93
U2hvd2luZzsKKyAgICAgIHJldHVybiAoCisgICAgICAgIDxmb290ZXIgY2xhc3NOYW1lPSJmb290
ZXIiPgorICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0idG9kby1jb3VudCI+CisgICAgICAgICAg
ICA8c3Ryb25nPnt0aGlzLnByb3BzLmNvdW50fTwvc3Ryb25nPiB7YWN0aXZlVG9kb1dvcmR9IGxl
ZnQKKyAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgPHVsIGNsYXNzTmFtZT0iZmlsdGVycyI+
CisgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgIDxhCisgICAgICAgICAgICAgICAgaHJl
Zj0iIy8iCisgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHtzZWxlY3RlZDog
bm93U2hvd2luZyA9PT0gYXBwLkFMTF9UT0RPU30pfT4KKyAgICAgICAgICAgICAgICAgIEFsbAor
ICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgeycgJ30K
KyAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgPGEKKyAgICAgICAgICAgICAgICBocmVm
PSIjL2FjdGl2ZSIKKyAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoe3NlbGVj
dGVkOiBub3dTaG93aW5nID09PSBhcHAuQUNUSVZFX1RPRE9TfSl9PgorICAgICAgICAgICAgICAg
ICAgQWN0aXZlCisgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAg
ICAgICB7JyAnfQorICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICA8YQorICAgICAgICAg
ICAgICAgIGhyZWY9IiMvY29tcGxldGVkIgorICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xh
c3NOYW1lcyh7c2VsZWN0ZWQ6IG5vd1Nob3dpbmcgPT09IGFwcC5DT01QTEVURURfVE9ET1N9KX0+
CisgICAgICAgICAgICAgICAgICBDb21wbGV0ZWQKKyAgICAgICAgICAgICAgPC9hPgorICAgICAg
ICAgICAgPC9saT4KKyAgICAgICAgICA8L3VsPgorICAgICAgICAgIHtjbGVhckJ1dHRvbn0KKyAg
ICAgICAgPC9mb290ZXI+CisgICAgICApOworICAgIH0KKyAgfSk7CisKKyAgdmFyIEVTQ0FQRV9L
RVkgPSAyNzsKKyAgdmFyIEVOVEVSX0tFWSA9IDEzOworCisgIHZhciBUb2RvSXRlbSA9IFJlYWN0
LmNyZWF0ZUNsYXNzKHsKKyAgICBoYW5kbGVTdWJtaXQ6IGZ1bmN0aW9uIChldmVudCkgeworICAg
ICAgdmFyIHZhbCA9IHRoaXMuc3RhdGUuZWRpdFRleHQudHJpbSgpOworICAgICAgaWYgKHZhbCkg
eworICAgICAgICB0aGlzLnByb3BzLm9uU2F2ZSh2YWwpOworICAgICAgICB0aGlzLnNldFN0YXRl
KHtlZGl0VGV4dDogdmFsfSk7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLnByb3BzLm9u
RGVzdHJveSgpOworICAgICAgfQorICAgIH0sCisKKyAgICBoYW5kbGVFZGl0OiBmdW5jdGlvbiAo
KSB7CisgICAgICB0aGlzLnByb3BzLm9uRWRpdCgpOworICAgICAgdGhpcy5zZXRTdGF0ZSh7ZWRp
dFRleHQ6IHRoaXMucHJvcHMudG9kby50aXRsZX0pOworICAgIH0sCisKKyAgICBoYW5kbGVLZXlE
b3duOiBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgIGlmIChldmVudC53aGljaCA9PT0gRVNDQVBF
X0tFWSkgeworICAgICAgICB0aGlzLnNldFN0YXRlKHtlZGl0VGV4dDogdGhpcy5wcm9wcy50b2Rv
LnRpdGxlfSk7CisgICAgICAgIHRoaXMucHJvcHMub25DYW5jZWwoZXZlbnQpOworICAgICAgfSBl
bHNlIGlmIChldmVudC53aGljaCA9PT0gRU5URVJfS0VZKSB7CisgICAgICAgIHRoaXMuaGFuZGxl
U3VibWl0KGV2ZW50KTsKKyAgICAgIH0KKyAgICB9LAorCisgICAgaGFuZGxlQ2hhbmdlOiBmdW5j
dGlvbiAoZXZlbnQpIHsKKyAgICAgIGlmICh0aGlzLnByb3BzLmVkaXRpbmcpIHsKKyAgICAgICAg
dGhpcy5zZXRTdGF0ZSh7ZWRpdFRleHQ6IGV2ZW50LnRhcmdldC52YWx1ZX0pOworICAgICAgfQor
ICAgIH0sCisKKyAgICBnZXRJbml0aWFsU3RhdGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVy
biB7ZWRpdFRleHQ6IHRoaXMucHJvcHMudG9kby50aXRsZX07CisgICAgfSwKKworICAgIC8qKgor
ICAgICAqIFRoaXMgaXMgYSBjb21wbGV0ZWx5IG9wdGlvbmFsIHBlcmZvcm1hbmNlIGVuaGFuY2Vt
ZW50IHRoYXQgeW91IGNhbgorICAgICAqIGltcGxlbWVudCBvbiBhbnkgUmVhY3QgY29tcG9uZW50
LiBJZiB5b3Ugd2VyZSB0byBkZWxldGUgdGhpcyBtZXRob2QKKyAgICAgKiB0aGUgYXBwIHdvdWxk
IHN0aWxsIHdvcmsgY29ycmVjdGx5IChhbmQgc3RpbGwgYmUgdmVyeSBwZXJmb3JtYW50ISksIHdl
CisgICAgICoganVzdCB1c2UgaXQgYXMgYW4gZXhhbXBsZSBvZiBob3cgbGl0dGxlIGNvZGUgaXQg
dGFrZXMgdG8gZ2V0IGFuIG9yZGVyCisgICAgICogb2YgbWFnbml0dWRlIHBlcmZvcm1hbmNlIGlt
cHJvdmVtZW50LgorICAgICAqLworICAgIHNob3VsZENvbXBvbmVudFVwZGF0ZTogZnVuY3Rpb24g
KG5leHRQcm9wcywgbmV4dFN0YXRlKSB7CisgICAgICByZXR1cm4gKAorICAgICAgICBuZXh0UHJv
cHMudG9kbyAhPT0gdGhpcy5wcm9wcy50b2RvIHx8CisgICAgICAgIG5leHRQcm9wcy5lZGl0aW5n
ICE9PSB0aGlzLnByb3BzLmVkaXRpbmcgfHwKKyAgICAgICAgbmV4dFN0YXRlLmVkaXRUZXh0ICE9
PSB0aGlzLnN0YXRlLmVkaXRUZXh0CisgICAgICApOworICAgIH0sCisKKyAgICAvKioKKyAgICAg
KiBTYWZlbHkgbWFuaXB1bGF0ZSB0aGUgRE9NIGFmdGVyIHVwZGF0aW5nIHRoZSBzdGF0ZSB3aGVu
IGludm9raW5nCisgICAgICogYHRoaXMucHJvcHMub25FZGl0KClgIGluIHRoZSBgaGFuZGxlRWRp
dGAgbWV0aG9kIGFib3ZlLgorICAgICAqIEZvciBtb3JlIGluZm8gcmVmZXIgdG8gbm90ZXMgYXQg
aHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9jb21wb25lbnQtYXBpLmh0bWwj
c2V0c3RhdGUKKyAgICAgKiBhbmQgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9j
cy9jb21wb25lbnQtc3BlY3MuaHRtbCN1cGRhdGluZy1jb21wb25lbnRkaWR1cGRhdGUKKyAgICAg
Ki8KKyAgICBjb21wb25lbnREaWRVcGRhdGU6IGZ1bmN0aW9uIChwcmV2UHJvcHMpIHsKKyAgICAg
IGlmICghcHJldlByb3BzLmVkaXRpbmcgJiYgdGhpcy5wcm9wcy5lZGl0aW5nKSB7CisgICAgICAg
IHZhciBub2RlID0gUmVhY3QuZmluZERPTU5vZGUodGhpcy5yZWZzLmVkaXRGaWVsZCk7CisgICAg
ICAgIG5vZGUuZm9jdXMoKTsKKyAgICAgICAgbm9kZS5zZXRTZWxlY3Rpb25SYW5nZShub2RlLnZh
bHVlLmxlbmd0aCwgbm9kZS52YWx1ZS5sZW5ndGgpOworICAgICAgfQorICAgIH0sCisKKyAgICBy
ZW5kZXI6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiAoCisgICAgICAgIDxsaSBjbGFzc05h
bWU9e2NsYXNzTmFtZXMoeworICAgICAgICAgIGNvbXBsZXRlZDogdGhpcy5wcm9wcy50b2RvLmNv
bXBsZXRlZCwKKyAgICAgICAgICBlZGl0aW5nOiB0aGlzLnByb3BzLmVkaXRpbmcKKyAgICAgICAg
fSl9PgorICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSJ2aWV3Ij4KKyAgICAgICAgICAgIDxpbnB1
dAorICAgICAgICAgICAgICBjbGFzc05hbWU9InRvZ2dsZSIKKyAgICAgICAgICAgICAgdHlwZT0i
Y2hlY2tib3giCisgICAgICAgICAgICAgIGNoZWNrZWQ9e3RoaXMucHJvcHMudG9kby5jb21wbGV0
ZWR9CisgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLnByb3BzLm9uVG9nZ2xlfQorICAgICAg
ICAgICAgLz4KKyAgICAgICAgICAgIDxsYWJlbCBvbkRvdWJsZUNsaWNrPXt0aGlzLmhhbmRsZUVk
aXR9PgorICAgICAgICAgICAgICB7dGhpcy5wcm9wcy50b2RvLnRpdGxlfQorICAgICAgICAgICAg
PC9sYWJlbD4KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPSJkZXN0cm95IiBvbkNsaWNr
PXt0aGlzLnByb3BzLm9uRGVzdHJveX0gLz4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8
aW5wdXQKKyAgICAgICAgICAgIHJlZj0iZWRpdEZpZWxkIgorICAgICAgICAgICAgY2xhc3NOYW1l
PSJlZGl0IgorICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuZWRpdFRleHR9CisgICAgICAg
ICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlU3VibWl0fQorICAgICAgICAgICAgb25DaGFuZ2U9e3Ro
aXMuaGFuZGxlQ2hhbmdlfQorICAgICAgICAgICAgb25LZXlEb3duPXt0aGlzLmhhbmRsZUtleURv
d259CisgICAgICAgICAgLz4KKyAgICAgICAgPC9saT4KKyAgICAgICk7CisgICAgfQorICB9KTsK
KworCXZhciBFTlRFUl9LRVkgPSAxMzsKKworCXZhciBUb2RvQXBwID0gUmVhY3QuY3JlYXRlQ2xh
c3MoeworCQlnZXRJbml0aWFsU3RhdGU6IGZ1bmN0aW9uICgpIHsKKwkJCXJldHVybiB7CisJCQkJ
bm93U2hvd2luZzogYXBwLkFMTF9UT0RPUywKKwkJCQllZGl0aW5nOiBudWxsLAorCQkJCW5ld1Rv
ZG86ICcnCisJCQl9OworCQl9LAorCisJCWNvbXBvbmVudERpZE1vdW50OiBmdW5jdGlvbiAoKSB7
CisJCQl2YXIgc2V0U3RhdGUgPSB0aGlzLnNldFN0YXRlOworCQkJdmFyIHJvdXRlciA9IFJvdXRl
cih7CisJCQkJJy8nOiBzZXRTdGF0ZS5iaW5kKHRoaXMsIHtub3dTaG93aW5nOiBhcHAuQUxMX1RP
RE9TfSksCisJCQkJJy9hY3RpdmUnOiBzZXRTdGF0ZS5iaW5kKHRoaXMsIHtub3dTaG93aW5nOiBh
cHAuQUNUSVZFX1RPRE9TfSksCisJCQkJJy9jb21wbGV0ZWQnOiBzZXRTdGF0ZS5iaW5kKHRoaXMs
IHtub3dTaG93aW5nOiBhcHAuQ09NUExFVEVEX1RPRE9TfSkKKwkJCX0pOworCQkJcm91dGVyLmlu
aXQoJy8nKTsKKwkJfSwKKworCQloYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uIChldmVudCkgeworCQkJ
dGhpcy5zZXRTdGF0ZSh7bmV3VG9kbzogZXZlbnQudGFyZ2V0LnZhbHVlfSk7CisJCX0sCisKKwkJ
aGFuZGxlTmV3VG9kb0tleURvd246IGZ1bmN0aW9uIChldmVudCkgeworCQkJaWYgKGV2ZW50Lmtl
eUNvZGUgIT09IEVOVEVSX0tFWSkgeworCQkJCXJldHVybjsKKwkJCX0KKworCQkJZXZlbnQucHJl
dmVudERlZmF1bHQoKTsKKworCQkJdmFyIHZhbCA9IHRoaXMuc3RhdGUubmV3VG9kby50cmltKCk7
CisKKwkJCWlmICh2YWwpIHsKKwkJCQl0aGlzLnByb3BzLm1vZGVsLmFkZFRvZG8odmFsKTsKKwkJ
CQl0aGlzLnNldFN0YXRlKHtuZXdUb2RvOiAnJ30pOworCQkJfQorCQl9LAorCisJCXRvZ2dsZUFs
bDogZnVuY3Rpb24gKGV2ZW50KSB7CisJCQl2YXIgY2hlY2tlZCA9IGV2ZW50LnRhcmdldC5jaGVj
a2VkOworCQkJdGhpcy5wcm9wcy5tb2RlbC50b2dnbGVBbGwoY2hlY2tlZCk7CisJCX0sCisKKwkJ
dG9nZ2xlOiBmdW5jdGlvbiAodG9kb1RvVG9nZ2xlKSB7CisJCQl0aGlzLnByb3BzLm1vZGVsLnRv
Z2dsZSh0b2RvVG9Ub2dnbGUpOworCQl9LAorCisJCWRlc3Ryb3k6IGZ1bmN0aW9uICh0b2RvKSB7
CisJCQl0aGlzLnByb3BzLm1vZGVsLmRlc3Ryb3kodG9kbyk7CisJCX0sCisKKwkJZWRpdDogZnVu
Y3Rpb24gKHRvZG8pIHsKKwkJCXRoaXMuc2V0U3RhdGUoe2VkaXRpbmc6IHRvZG8uaWR9KTsKKwkJ
fSwKKworCQlzYXZlOiBmdW5jdGlvbiAodG9kb1RvU2F2ZSwgdGV4dCkgeworCQkJdGhpcy5wcm9w
cy5tb2RlbC5zYXZlKHRvZG9Ub1NhdmUsIHRleHQpOworCQkJdGhpcy5zZXRTdGF0ZSh7ZWRpdGlu
ZzogbnVsbH0pOworCQl9LAorCisJCWNhbmNlbDogZnVuY3Rpb24gKCkgeworCQkJdGhpcy5zZXRT
dGF0ZSh7ZWRpdGluZzogbnVsbH0pOworCQl9LAorCisJCWNsZWFyQ29tcGxldGVkOiBmdW5jdGlv
biAoKSB7CisJCQl0aGlzLnByb3BzLm1vZGVsLmNsZWFyQ29tcGxldGVkKCk7CisJCX0sCisKKwkJ
cmVuZGVyOiBmdW5jdGlvbiAoKSB7CisJCQl2YXIgZm9vdGVyOworCQkJdmFyIG1haW47CisJCQl2
YXIgdG9kb3MgPSB0aGlzLnByb3BzLm1vZGVsLnRvZG9zOworCisJCQl2YXIgc2hvd25Ub2RvcyA9
IHRvZG9zLmZpbHRlcihmdW5jdGlvbiAodG9kbykgeworCQkJCXN3aXRjaCAodGhpcy5zdGF0ZS5u
b3dTaG93aW5nKSB7CisJCQkJY2FzZSBhcHAuQUNUSVZFX1RPRE9TOgorCQkJCQlyZXR1cm4gIXRv
ZG8uY29tcGxldGVkOworCQkJCWNhc2UgYXBwLkNPTVBMRVRFRF9UT0RPUzoKKwkJCQkJcmV0dXJu
IHRvZG8uY29tcGxldGVkOworCQkJCWRlZmF1bHQ6CisJCQkJCXJldHVybiB0cnVlOworCQkJCX0K
KwkJCX0sIHRoaXMpOworCisJCQl2YXIgdG9kb0l0ZW1zID0gc2hvd25Ub2Rvcy5tYXAoZnVuY3Rp
b24gKHRvZG8pIHsKKwkJCQlyZXR1cm4gKAorCQkJCQk8VG9kb0l0ZW0KKwkJCQkJCWtleT17dG9k
by5pZH0KKwkJCQkJCXRvZG89e3RvZG99CisJCQkJCQlvblRvZ2dsZT17dGhpcy50b2dnbGUuYmlu
ZCh0aGlzLCB0b2RvKX0KKwkJCQkJCW9uRGVzdHJveT17dGhpcy5kZXN0cm95LmJpbmQodGhpcywg
dG9kbyl9CisJCQkJCQlvbkVkaXQ9e3RoaXMuZWRpdC5iaW5kKHRoaXMsIHRvZG8pfQorCQkJCQkJ
ZWRpdGluZz17dGhpcy5zdGF0ZS5lZGl0aW5nID09PSB0b2RvLmlkfQorCQkJCQkJb25TYXZlPXt0
aGlzLnNhdmUuYmluZCh0aGlzLCB0b2RvKX0KKwkJCQkJCW9uQ2FuY2VsPXt0aGlzLmNhbmNlbH0K
KwkJCQkJLz4KKwkJCQkpOworCQkJfSwgdGhpcyk7CisKKwkJCXZhciBhY3RpdmVUb2RvQ291bnQg
PSB0b2Rvcy5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtLCB0b2RvKSB7CisJCQkJcmV0dXJuIHRvZG8u
Y29tcGxldGVkID8gYWNjdW0gOiBhY2N1bSArIDE7CisJCQl9LCAwKTsKKworCQkJdmFyIGNvbXBs
ZXRlZENvdW50ID0gdG9kb3MubGVuZ3RoIC0gYWN0aXZlVG9kb0NvdW50OworCisJCQlpZiAoYWN0
aXZlVG9kb0NvdW50IHx8IGNvbXBsZXRlZENvdW50KSB7CisJCQkJZm9vdGVyID0KKwkJCQkJPFRv
ZG9Gb290ZXIKKwkJCQkJCWNvdW50PXthY3RpdmVUb2RvQ291bnR9CisJCQkJCQljb21wbGV0ZWRD
b3VudD17Y29tcGxldGVkQ291bnR9CisJCQkJCQlub3dTaG93aW5nPXt0aGlzLnN0YXRlLm5vd1No
b3dpbmd9CisJCQkJCQlvbkNsZWFyQ29tcGxldGVkPXt0aGlzLmNsZWFyQ29tcGxldGVkfQorCQkJ
CQkvPjsKKwkJCX0KKworCQkJaWYgKHRvZG9zLmxlbmd0aCkgeworCQkJCW1haW4gPSAoCisJCQkJ
CTxzZWN0aW9uIGNsYXNzTmFtZT0ibWFpbiI+CisJCQkJCQk8aW5wdXQKKwkJCQkJCQljbGFzc05h
bWU9InRvZ2dsZS1hbGwiCisJCQkJCQkJdHlwZT0iY2hlY2tib3giCisJCQkJCQkJb25DaGFuZ2U9
e3RoaXMudG9nZ2xlQWxsfQorCQkJCQkJCWNoZWNrZWQ9e2FjdGl2ZVRvZG9Db3VudCA9PT0gMH0K
KwkJCQkJCS8+CisJCQkJCQk8dWwgY2xhc3NOYW1lPSJ0b2RvLWxpc3QiPgorCQkJCQkJCXt0b2Rv
SXRlbXN9CisJCQkJCQk8L3VsPgorCQkJCQk8L3NlY3Rpb24+CisJCQkJKTsKKwkJCX0KKworCQkJ
cmV0dXJuICgKKwkJCQk8ZGl2PgorCQkJCQk8aGVhZGVyIGNsYXNzTmFtZT0iaGVhZGVyIj4KKwkJ
CQkJCTxoMT50b2RvczwvaDE+CisJCQkJCQk8aW5wdXQKKwkJCQkJCQljbGFzc05hbWU9Im5ldy10
b2RvIgorCQkJCQkJCXBsYWNlaG9sZGVyPSJXaGF0IG5lZWRzIHRvIGJlIGRvbmU/IgorCQkJCQkJ
CXZhbHVlPXt0aGlzLnN0YXRlLm5ld1RvZG99CisJCQkJCQkJb25LZXlEb3duPXt0aGlzLmhhbmRs
ZU5ld1RvZG9LZXlEb3dufQorCQkJCQkJCW9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX0KKwkJ
CQkJCQlhdXRvRm9jdXM9e3RydWV9CisJCQkJCQkvPgorCQkJCQk8L2hlYWRlcj4KKwkJCQkJe21h
aW59CisJCQkJCXtmb290ZXJ9CisJCQkJPC9kaXY+CisJCQkpOworCQl9CisJfSk7CisKKwl2YXIg
bW9kZWwgPSBuZXcgYXBwLlRvZG9Nb2RlbCgncmVhY3QtdG9kb3MnKTsKKworCWZ1bmN0aW9uIHJl
bmRlcigpIHsKKwkJUmVhY3RET00ucmVuZGVyKAorCQkJPFRvZG9BcHAgbW9kZWw9e21vZGVsfS8+
LAorCQkJZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndG9kb2FwcCcpWzBdCisJCSk7
CisJfQorCisJbW9kZWwuc3Vic2NyaWJlKHJlbmRlcik7CisJcmVuZGVyKCk7Cit9KSgpOwpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvbGljZW5zZS5tZCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0
L2xpY2Vuc2UubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmJmYTJlMzg5ZWQ4Y2NkODdiM2Q1OWQyMjYxYTdhZDYz
NTRmYzM3NAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2xpY2Vuc2UubWQK
QEAgLTAsMCArMSwyMCBAQAorRXZlcnl0aGluZyBpbiB0aGlzIHJlcG8gaXMgTUlUIExpY2Vuc2Ug
dW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQuCisKK0NvcHlyaWdodCAoYykgQWRkeSBPc21hbmks
IFNpbmRyZSBTb3JodXMsIFBhc2NhbCBIYXJ0aWcsIFN0ZXBoZW4gU2F3Y2h1ay4KKworUGVybWlz
c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0
YWluaW5nIGEgY29weSBvZgordGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0
aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4KK3RoZSBTb2Z0d2FyZSB3aXRo
b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMg
dG8KK3VzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj
ZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mCit0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQg
cGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sCitzdWJq
ZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBu
b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxs
Citjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUg
U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO
RCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MKK0ZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9S
UyBPUgorQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg
T1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSCitJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP
UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorQ09OTkVDVElPTiBX
SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZU
V0FSRS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9yZWFjdC9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9MSUNFTlNFIGIvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVh
Y3Qvbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvTElDRU5TRQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNjYyMGI1ODk1
ZmRlMjYwOTk1MDI1NGVjZjEyZWIzYzBkYTE3ZGNhCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvTElDRU5TRQpAQCAtMCwwICsxLDIx
IEBACitUaGUgTUlUIExpY2Vuc2UgKE1JVCkKKworQ29weXJpZ2h0IChjKSAyMDE2IEplZCBXYXRz
b24KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFu
eSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRl
ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBT
b2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9u
IHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp
YnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu
ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRv
IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3Zl
IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5j
bHVkZWQgaW4gYWxsCitjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3
YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5U
WSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN
SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xB
SU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg
Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4g
Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdT
IElOIFRIRQorU09GVFdBUkUuCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21v
ZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVz
L2NsYXNzbmFtZXMvYmluZC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kOGFlMTNiOTU0OTllMGE4MTI1NDZiMTRm
MmQ1ZjU2ZGNkOTFiNjI0Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9k
ZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcwpAQCAtMCwwICsxLDQ4IEBACisvKiEKKyAgQ29w
eXJpZ2h0IChjKSAyMDE2IEplZCBXYXRzb24uCisgIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGlj
ZW5zZSAoTUlUKSwgc2VlCisgIGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXMK
KyovCisvKiBnbG9iYWwgZGVmaW5lICovCisKKyhmdW5jdGlvbiAoKSB7CisgICAgJ3VzZSBzdHJp
Y3QnOworCisgICAgdmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5OworCisgICAgZnVuY3Rp
b24gY2xhc3NOYW1lcyAoKSB7CisgICAgICAgIHZhciBjbGFzc2VzID0gW107CisKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg
IHZhciBhcmcgPSBhcmd1bWVudHNbaV07CisgICAgICAgICAgICBpZiAoIWFyZykgY29udGludWU7
CisKKyAgICAgICAgICAgIHZhciBhcmdUeXBlID0gdHlwZW9mIGFyZzsKKworICAgICAgICAgICAg
aWYgKGFyZ1R5cGUgPT09ICdzdHJpbmcnIHx8IGFyZ1R5cGUgPT09ICdudW1iZXInKSB7CisgICAg
ICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKHRoaXMgJiYgdGhpc1thcmddIHx8IGFyZyk7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkgeworICAgICAgICAgICAgICAg
IGNsYXNzZXMucHVzaChjbGFzc05hbWVzLmFwcGx5KHRoaXMsIGFyZykpOworICAgICAgICAgICAg
fSBlbHNlIGlmIChhcmdUeXBlID09PSAnb2JqZWN0JykgeworICAgICAgICAgICAgICAgIGZvciAo
dmFyIGtleSBpbiBhcmcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc093bi5jYWxsKGFy
Zywga2V5KSAmJiBhcmdba2V5XSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5w
dXNoKHRoaXMgJiYgdGhpc1trZXldIHx8IGtleSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gY2xhc3Nlcy5qb2luKCcgJyk7CisgICAgfQorCisgICAgaWYgKHR5cGVvZiBtb2R1bGUgIT09
ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7CisgICAgICAgIG1vZHVsZS5leHBvcnRz
ID0gY2xhc3NOYW1lczsKKyAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlv
bicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHsKKyAg
ICAgICAgLy8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBh
Y2thZ2UgbmFtZQorICAgICAgICBkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZXM7CisgICAgICAgIH0pOworICAgIH0gZWxz
ZSB7CisgICAgICAgIHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lczsKKyAgICB9Cit9KCkp
OwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMv
Ym93ZXIuanNvbiBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2Jv
d2VyLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMDYxOWE0OGY4YzI4YmM4YmEyYjQwYTQ2ZWU5ZDU0NGM0NmYx
ODg4NAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9j
bGFzc25hbWVzL2Jvd2VyLmpzb24KQEAgLTAsMCArMSwzNyBAQAoreworICAibmFtZSI6ICJjbGFz
c25hbWVzIiwKKyAgInZlcnNpb24iOiAiMi4yLjUiLAorICAiZGVzY3JpcHRpb24iOiAiQSBzaW1w
bGUgdXRpbGl0eSBmb3IgY29uZGl0aW9uYWxseSBqb2luaW5nIGNsYXNzTmFtZXMgdG9nZXRoZXIi
LAorICAibWFpbiI6IFsKKyAgICAiaW5kZXguanMiLAorICAgICJiaW5kLmpzIiwKKyAgICAiZGVk
dXBlLmpzIgorICBdLAorICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL0plZFdhdHNv
bi9jbGFzc25hbWVzIiwKKyAgImF1dGhvcnMiOiBbCisgICAgIkplZCBXYXRzb24iCisgIF0sCisg
ICJtb2R1bGVUeXBlIjogWworICAgICJhbWQiLAorICAgICJnbG9iYWxzIiwKKyAgICAibm9kZSIK
KyAgXSwKKyAgImtleXdvcmRzIjogWworICAgICJyZWFjdCIsCisgICAgImNzcyIsCisgICAgImNs
YXNzZXMiLAorICAgICJjbGFzc25hbWUiLAorICAgICJjbGFzc25hbWVzIiwKKyAgICAidXRpbCIs
CisgICAgInV0aWxpdHkiCisgIF0sCisgICJsaWNlbnNlIjogIk1JVCIsCisgICJpZ25vcmUiOiBb
CisgICAgIi5lZGl0b3Jjb25maWciLAorICAgICIuZ2l0aWdub3JlIiwKKyAgICAiZ3VscGZpbGUu
anMiLAorICAgICJwYWNrYWdlLmpzb24iLAorICAgICJub2RlX21vZHVsZXMiLAorICAgICJ0ZXN0
cy5qcyIKKyAgXQorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVz
L2NsYXNzbmFtZXMvZGVkdXBlLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL2Ns
YXNzbmFtZXMvZGVkdXBlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk1NDZmOGUzYTEwZjQxYmMxMWEyZmI4Zjcy
ZmQ0ZTJlNmUwYTIxZWEKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2Rl
X21vZHVsZXMvY2xhc3NuYW1lcy9kZWR1cGUuanMKQEAgLTAsMCArMSwxMDkgQEAKKy8qIQorICBD
b3B5cmlnaHQgKGMpIDIwMTYgSmVkIFdhdHNvbi4KKyAgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBM
aWNlbnNlIChNSVQpLCBzZWUKKyAgaHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1l
cworKi8KKy8qIGdsb2JhbCBkZWZpbmUgKi8KKworKGZ1bmN0aW9uICgpIHsKKyAgICAndXNlIHN0
cmljdCc7CisKKyAgICB2YXIgY2xhc3NOYW1lcyA9IChmdW5jdGlvbiAoKSB7CisgICAgICAgIC8v
IGRvbid0IGluaGVyaXQgZnJvbSBPYmplY3Qgc28gd2UgY2FuIHNraXAgaGFzT3duUHJvcGVydHkg
Y2hlY2sgbGF0ZXIKKyAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9u
cy8xNTUxODMyOC9jcmVhdGluZy1qcy1vYmplY3Qtd2l0aC1vYmplY3QtY3JlYXRlbnVsbCNhbnN3
ZXItMjEwNzkyMzIKKyAgICAgICAgZnVuY3Rpb24gU3RvcmFnZU9iamVjdCgpIHt9CisgICAgICAg
IFN0b3JhZ2VPYmplY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKKworICAgICAg
ICBmdW5jdGlvbiBfcGFyc2VBcnJheSAocmVzdWx0U2V0LCBhcnJheSkgeworICAgICAgICAgICAg
dmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsKKworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIF9wYXJzZShyZXN1bHRTZXQsIGFy
cmF5W2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHZhciBoYXNPd24g
PSB7fS5oYXNPd25Qcm9wZXJ0eTsKKworICAgICAgICBmdW5jdGlvbiBfcGFyc2VOdW1iZXIgKHJl
c3VsdFNldCwgbnVtKSB7CisgICAgICAgICAgICByZXN1bHRTZXRbbnVtXSA9IHRydWU7CisgICAg
ICAgIH0KKworICAgICAgICBmdW5jdGlvbiBfcGFyc2VPYmplY3QgKHJlc3VsdFNldCwgb2JqZWN0
KSB7CisgICAgICAgICAgICBmb3IgKHZhciBrIGluIG9iamVjdCkgeworICAgICAgICAgICAgICAg
IGlmIChoYXNPd24uY2FsbChvYmplY3QsIGspKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIHNl
dCB2YWx1ZSB0byBmYWxzZSBpbnN0ZWFkIG9mIGRlbGV0aW5nIGl0IHRvIGF2b2lkIGNoYW5naW5n
IG9iamVjdCBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cuc21h
c2hpbmdtYWdhemluZS5jb20vMjAxMi8xMS93cml0aW5nLWZhc3QtbWVtb3J5LWVmZmljaWVudC1q
YXZhc2NyaXB0LyNkZS1yZWZlcmVuY2luZy1taXNjb25jZXB0aW9ucworICAgICAgICAgICAgICAg
ICAgICByZXN1bHRTZXRba10gPSAhIW9iamVjdFtrXTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2YXIgU1BBQ0UgPSAvXHMrLzsKKyAgICAg
ICAgZnVuY3Rpb24gX3BhcnNlU3RyaW5nIChyZXN1bHRTZXQsIHN0cikgeworICAgICAgICAgICAg
dmFyIGFycmF5ID0gc3RyLnNwbGl0KFNQQUNFKTsKKyAgICAgICAgICAgIHZhciBsZW5ndGggPSBh
cnJheS5sZW5ndGg7CisKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICByZXN1bHRTZXRbYXJyYXlbaV1dID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIF9wYXJzZSAocmVzdWx0U2V0
LCBhcmcpIHsKKyAgICAgICAgICAgIGlmICghYXJnKSByZXR1cm47CisgICAgICAgICAgICB2YXIg
YXJnVHlwZSA9IHR5cGVvZiBhcmc7CisKKyAgICAgICAgICAgIC8vICdmb28gYmFyJworICAgICAg
ICAgICAgaWYgKGFyZ1R5cGUgPT09ICdzdHJpbmcnKSB7CisgICAgICAgICAgICAgICAgX3BhcnNl
U3RyaW5nKHJlc3VsdFNldCwgYXJnKTsKKworICAgICAgICAgICAgLy8gWydmb28nLCAnYmFyJywg
Li4uXQorICAgICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHsKKyAgICAg
ICAgICAgICAgICBfcGFyc2VBcnJheShyZXN1bHRTZXQsIGFyZyk7CisKKyAgICAgICAgICAgIC8v
IHsgJ2Zvbyc6IHRydWUsIC4uLiB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGFyZ1R5cGUgPT09
ICdvYmplY3QnKSB7CisgICAgICAgICAgICAgICAgX3BhcnNlT2JqZWN0KHJlc3VsdFNldCwgYXJn
KTsKKworICAgICAgICAgICAgLy8gJzEzMCcKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnVHlw
ZSA9PT0gJ251bWJlcicpIHsKKyAgICAgICAgICAgICAgICBfcGFyc2VOdW1iZXIocmVzdWx0U2V0
LCBhcmcpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gX2Ns
YXNzTmFtZXMgKCkgeworICAgICAgICAgICAgLy8gZG9uJ3QgbGVhayBhcmd1bWVudHMKKyAgICAg
ICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lraS9P
cHRpbWl6YXRpb24ta2lsbGVycyMzMi1sZWFraW5nLWFyZ3VtZW50cworICAgICAgICAgICAgdmFy
IGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7CisgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5KGxl
bik7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgdmFyIGNsYXNzU2V0ID0gbmV3IFN0b3JhZ2VPYmplY3QoKTsKKyAgICAgICAgICAgIF9w
YXJzZUFycmF5KGNsYXNzU2V0LCBhcmdzKTsKKworICAgICAgICAgICAgdmFyIGxpc3QgPSBbXTsK
KworICAgICAgICAgICAgZm9yICh2YXIgayBpbiBjbGFzc1NldCkgeworICAgICAgICAgICAgICAg
IGlmIChjbGFzc1NldFtrXSkgeworICAgICAgICAgICAgICAgICAgICBsaXN0LnB1c2goaykKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBsaXN0
LmpvaW4oJyAnKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBfY2xhc3NOYW1lczsKKyAg
ICB9KSgpOworCisgICAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVs
ZS5leHBvcnRzKSB7CisgICAgICAgIG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lczsKKyAgICB9
IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5h
bWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHsKKyAgICAgICAgLy8gcmVnaXN0ZXIgYXMg
J2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZQorICAgICAgICBk
ZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IGNsYXNzTmFtZXM7CisgICAgICAgIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIHdpbmRvdy5j
bGFzc05hbWVzID0gY2xhc3NOYW1lczsKKyAgICB9Cit9KCkpOwpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMgYi9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9yZWFjdC9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOGYw
ZmYyYmY5MGEyOTNmNDMwZmU5NzhkOTRmYTBiNTdlYWM4NTE4Ci0tLSAvZGV2L251bGwKKysrIGIv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMKQEAgLTAs
MCArMSw0OCBAQAorLyohCisgIENvcHlyaWdodCAoYykgMjAxNiBKZWQgV2F0c29uLgorICBMaWNl
bnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZQorICBodHRwOi8vamVkd2F0c29u
LmdpdGh1Yi5pby9jbGFzc25hbWVzCisqLworLyogZ2xvYmFsIGRlZmluZSAqLworCisoZnVuY3Rp
b24gKCkgeworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHZhciBoYXNPd24gPSB7fS5oYXNPd25Q
cm9wZXJ0eTsKKworICAgIGZ1bmN0aW9uIGNsYXNzTmFtZXMgKCkgeworICAgICAgICB2YXIgY2xh
c3NlcyA9IFtdOworCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgYXJnID0gYXJndW1lbnRzW2ldOworICAgICAgICAg
ICAgaWYgKCFhcmcpIGNvbnRpbnVlOworCisgICAgICAgICAgICB2YXIgYXJnVHlwZSA9IHR5cGVv
ZiBhcmc7CisKKyAgICAgICAgICAgIGlmIChhcmdUeXBlID09PSAnc3RyaW5nJyB8fCBhcmdUeXBl
ID09PSAnbnVtYmVyJykgeworICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaChhcmcpOworICAg
ICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHsKKyAgICAgICAgICAgICAg
ICBjbGFzc2VzLnB1c2goY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpKTsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoYXJnVHlwZSA9PT0gJ29iamVjdCcpIHsKKyAgICAgICAgICAgICAgICBmb3Ig
KHZhciBrZXkgaW4gYXJnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChh
cmcsIGtleSkgJiYgYXJnW2tleV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXMu
cHVzaChrZXkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGNsYXNzZXMuam9pbignICcp
OworICAgIH0KKworICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1
bGUuZXhwb3J0cykgeworICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7CisgICAg
fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUu
YW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7CisgICAgICAgIC8vIHJlZ2lzdGVyIGFz
ICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWUKKyAgICAgICAg
ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVy
biBjbGFzc05hbWVzOworICAgICAgICB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICB3aW5kb3cu
Y2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7CisgICAgfQorfSgpKTsKZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL3BhY2thZ2UuanNvbiBiL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL3BhY2thZ2UuanNvbgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wNGVlYzI2YzE0M2QyZjBmOTIyYjU5YmQ3MDFkM2JjNThhYzE0NzI1Ci0tLSAvZGV2L251
bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvcGFja2Fn
ZS5qc29uCkBAIC0wLDAgKzEsMzAgQEAKK3sKKyAgIm5hbWUiOiAiY2xhc3NuYW1lcyIsCisgICJ2
ZXJzaW9uIjogIjIuMi41IiwKKyAgImRlc2NyaXB0aW9uIjogIkEgc2ltcGxlIHV0aWxpdHkgZm9y
IGNvbmRpdGlvbmFsbHkgam9pbmluZyBjbGFzc05hbWVzIHRvZ2V0aGVyIiwKKyAgIm1haW4iOiAi
aW5kZXguanMiLAorICAiYXV0aG9yIjogIkplZCBXYXRzb24iLAorICAibGljZW5zZSI6ICJNSVQi
LAorICAicmVwb3NpdG9yeSI6IHsKKyAgICAidHlwZSI6ICJnaXQiLAorICAgICJ1cmwiOiAiaHR0
cHM6Ly9naXRodWIuY29tL0plZFdhdHNvbi9jbGFzc25hbWVzLmdpdCIKKyAgfSwKKyAgInNjcmlw
dHMiOiB7CisgICAgImJlbmNobWFya3MiOiAibm9kZSAuL2JlbmNobWFya3MvcnVuIiwKKyAgICAi
dW5pdCI6ICJtb2NoYSB0ZXN0cy8qLmpzIiwKKyAgICAidGVzdCI6ICJucG0gcnVuIHVuaXQiCisg
IH0sCisgICJrZXl3b3JkcyI6IFsKKyAgICAicmVhY3QiLAorICAgICJjc3MiLAorICAgICJjbGFz
c2VzIiwKKyAgICAiY2xhc3NuYW1lIiwKKyAgICAiY2xhc3NuYW1lcyIsCisgICAgInV0aWwiLAor
ICAgICJ1dGlsaXR5IgorICBdLAorICAiZGV2RGVwZW5kZW5jaWVzIjogeworICAgICJiZW5jaG1h
cmsiOiAiXjEuMC4wIiwKKyAgICAibW9jaGEiOiAiXjIuMS4wIgorICB9Cit9CmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvZGlyZWN0b3IvTElDRU5TRSBiL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9kaXJlY3Rvci9MSUNFTlNFCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhh
NDk4MTA4NTAxOWY5MTdjMTIzNzY5YTBjMjdjZDg3MGUzNWE3ODQKLS0tIC9kZXYvbnVsbAorKysg
Yi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvZGlyZWN0b3IvTElDRU5TRQpAQCAtMCww
ICsxLDE5IEBACitDb3B5cmlnaHQgKGMpIDIwMTEgQ2hhcmxpZSBSb2JiaW5zLCBQYW9sbyBGcmFn
b21lbmksICYgdGhlIENvbnRyaWJ1dG9ycy4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl
ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhp
cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3
YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNs
dWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5
LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2Nv
cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBT
b2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz
c2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRp
YWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg
IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElF
RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO
R0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERF
UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwg
V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklT
SU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBU
SEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitUSEUgU09GVFdBUkUuCmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvZGlyZWN0b3IvYm93ZXIuanNvbiBiL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9kaXJlY3Rvci9ib3dlci5qc29uCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmY5MzliYjQ3MGVkNjRkYjExMWFhYThjNjMzZDIzMmZhOWViZmNmMDQKLS0tIC9kZXYvbnVsbAor
KysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvZGlyZWN0b3IvYm93ZXIuanNvbgpA
QCAtMCwwICsxLDkgQEAKK3sKKyAgIm5hbWUiOiAiZGlyZWN0b3IiLAorICAidmVyc2lvbiI6ICIx
LjIuNyIsCisgICJkZXBlbmRlbmNpZXMiOiB7fSwKKyAgIm1haW4iOiAiYnVpbGQvZGlyZWN0b3Iu
anMiLAorICAic2NyaXB0cyI6IFsKKyAgICAiYnVpbGQvZGlyZWN0b3IuanMiCisgIF0KK30KZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9kaXJlY3Rvci9wYWNrYWdl
Lmpzb24gYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvZGlyZWN0b3IvcGFja2FnZS5q
c29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjEwYmQyOTYyNzI3ZjQ2NGRjYmUwOTgxNzJhOTlmYThkZTc2YWI5YmQK
LS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvZGlyZWN0
b3IvcGFja2FnZS5qc29uCkBAIC0wLDAgKzEsNDEgQEAKK3sKKyAgIm5hbWUiOiAiZGlyZWN0b3Ii
LAorICAiZGVzY3JpcHRpb24iOiAiQSBjbGllbnQgU2lkZS9TZXJ2ZXIgU2lkZSBSb3V0ZXIiLAor
ICAiYXV0aG9yIjogIkNoYXJsaWUgUm9iYmlucyA8Y2hhcmxpZS5yb2JiaW5zQGdtYWlsLmNvbT4i
LAorICAidmVyc2lvbiI6ICIxLjIuOCIsCisgICJtYWludGFpbmVycyI6IFsKKyAgICAiaGlqMW54
IDxwYW9sb0Bub2Rlaml0c3UuY29tPiIsCisgICAgImJlYXVndW5kZXJzb24gPGJlYXVAYmVhdWd1
bmRlcnNvbi5jb20+IgorICBdLAorICAicmVwb3NpdG9yeSI6IHsKKyAgICAidHlwZSI6ICJnaXQi
LAorICAgICJ1cmwiOiAiaHR0cDovL2dpdGh1Yi5jb20vZmxhdGlyb24vZGlyZWN0b3IuZ2l0Igor
ICB9LAorICAia2V5d29yZHMiOiBbCisgICAgIlVSTCIsCisgICAgInJvdXRlciIsCisgICAgImh0
dHAiLAorICAgICJjbGkiLAorICAgICJmbGF0aXJvbiIsCisgICAgImNsaWVudCBzaWRlIiwKKyAg
ICAiZW5kZXIiCisgIF0sCisgICJkZXZEZXBlbmRlbmNpZXMiOiB7CisgICAgImFwaS1lYXN5Ijog
IjAuNC54IiwKKyAgICAiY29kZXN1cmdlb24iOiAiaHR0cHM6Ly9naXRodWIuY29tL2hpajFueC9j
b2Rlc3VyZ2Vvbi90YXJiYWxsL21hc3RlciIsCisgICAgImNvbG9ycyI6ICIxLjAueCIsCisgICAg
InF1bml0anMiOiAiMS45LngiLAorICAgICJyZXF1ZXN0IjogIjIuNDkueCIsCisgICAgInVnbGlm
eS1qcyI6ICIyLjQueCIsCisgICAgInZvd3MiOiAiMC44LjAiCisgIH0sCisgICJlbmRlciI6ICIu
L2J1aWxkL2VuZGVyLmpzIiwKKyAgImJyb3dzZXJpZnkiOiAiLi9idWlsZC9kaXJlY3RvciIsCisg
ICJtYWluIjogIi4vbGliL2RpcmVjdG9yIiwKKyAgImVuZ2luZXMiOiB7CisgICAgIm5vZGUiOiAi
Pj0gMC44LjAiCisgIH0sCisgICJzY3JpcHRzIjogeworICAgICJ0ZXN0IjogInZvd3MgdGVzdC9z
ZXJ2ZXIvKi8qLXRlc3QuanMgLS1zcGVjIgorICB9Cit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL0xJQ0VOU0UgYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFj
dC9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTFiOGY2Zjc2ZmYw
MmExNTM2YTM2M2RiM2E3YTFjY2U0MThhZjNjMgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL3JlYWN0L25vZGVfbW9kdWxlcy9yZWFjdC1kb20vTElDRU5TRQpAQCAtMCwwICsxLDMxIEBA
CitCU0QgTGljZW5zZQorCitGb3IgUmVhY3Qgc29mdHdhcmUKKworQ29weXJpZ2h0IChjKSAyMDEz
LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQgbW9kaWZpY2F0aW9uLAorYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAgIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dCBub3RpY2UsCisgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICogTmVpdGhlciB0aGUgbmFtZSBG
YWNlYm9vayBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8K
KyAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljCisgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21v
ZHVsZXMvcmVhY3QtZG9tL2Rpc3QvcmVhY3QtZG9tLXNlcnZlci5taW4uanMgYi9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2Rpc3QvcmVhY3QtZG9tLXNlcnZlci5taW4u
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMDM1YWNkNTNlYTc2MjQ4MGYyNjVmZWU0MjkxYWMyODUzMjgyZTdlNAot
LS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9yZWFjdC1k
b20vZGlzdC9yZWFjdC1kb20tc2VydmVyLm1pbi5qcwpAQCAtMCwwICsxLDE1IEBACisvKioKKyAq
IFJlYWN0RE9NU2VydmVyIHYxNS41LjQKKyAqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBG
YWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJj
ZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0
aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2Ug
dHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91
bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCish
ZnVuY3Rpb24oZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlw
ZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz1lKHJlcXVpcmUoInJlYWN0IikpO2Vsc2UgaWYoImZ1
bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoWyJyZWFjdCJdLGUpO2Vs
c2V7dmFyIHQ7dD0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIh
PXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMs
dC5SZWFjdERPTVNlcnZlcj1lKHQuUmVhY3QpfX0oZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9u
KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBv
KGEscyl7aWYoIW5bYV0pe2lmKCF0W2FdKXt2YXIgdT0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWly
ZSYmcmVxdWlyZTtpZighcyYmdSlyZXR1cm4gdShhLCEwKTtpZihpKXJldHVybiBpKGEsITApO3Zh
ciBsPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2ErIiciKTt0aHJvdyBsLmNvZGU9
Ik1PRFVMRV9OT1RfRk9VTkQiLGx9dmFyIGM9blthXT17ZXhwb3J0czp7fX07dFthXVswXS5jYWxs
KGMuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W2FdWzFdW2VdO3JldHVybiBvKG58fGUpfSxj
LGMuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gblthXS5leHBvcnRzfWZvcih2YXIgaT0iZnVuY3Rp
b24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxhPTA7YTxyLmxlbmd0aDthKyspbyhyW2FdKTty
ZXR1cm4gb30oezE6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9e1Byb3BlcnRp
ZXM6eyJhcmlhLWN1cnJlbnQiOjAsImFyaWEtZGV0YWlscyI6MCwiYXJpYS1kaXNhYmxlZCI6MCwi
YXJpYS1oaWRkZW4iOjAsImFyaWEtaW52YWxpZCI6MCwiYXJpYS1rZXlzaG9ydGN1dHMiOjAsImFy
aWEtbGFiZWwiOjAsImFyaWEtcm9sZWRlc2NyaXB0aW9uIjowLCJhcmlhLWF1dG9jb21wbGV0ZSI6
MCwiYXJpYS1jaGVja2VkIjowLCJhcmlhLWV4cGFuZGVkIjowLCJhcmlhLWhhc3BvcHVwIjowLCJh
cmlhLWxldmVsIjowLCJhcmlhLW1vZGFsIjowLCJhcmlhLW11bHRpbGluZSI6MCwiYXJpYS1tdWx0
aXNlbGVjdGFibGUiOjAsImFyaWEtb3JpZW50YXRpb24iOjAsImFyaWEtcGxhY2Vob2xkZXIiOjAs
ImFyaWEtcHJlc3NlZCI6MCwiYXJpYS1yZWFkb25seSI6MCwiYXJpYS1yZXF1aXJlZCI6MCwiYXJp
YS1zZWxlY3RlZCI6MCwiYXJpYS1zb3J0IjowLCJhcmlhLXZhbHVlbWF4IjowLCJhcmlhLXZhbHVl
bWluIjowLCJhcmlhLXZhbHVlbm93IjowLCJhcmlhLXZhbHVldGV4dCI6MCwiYXJpYS1hdG9taWMi
OjAsImFyaWEtYnVzeSI6MCwiYXJpYS1saXZlIjowLCJhcmlhLXJlbGV2YW50IjowLCJhcmlhLWRy
b3BlZmZlY3QiOjAsImFyaWEtZ3JhYmJlZCI6MCwiYXJpYS1hY3RpdmVkZXNjZW5kYW50IjowLCJh
cmlhLWNvbGNvdW50IjowLCJhcmlhLWNvbGluZGV4IjowLCJhcmlhLWNvbHNwYW4iOjAsImFyaWEt
Y29udHJvbHMiOjAsImFyaWEtZGVzY3JpYmVkYnkiOjAsImFyaWEtZXJyb3JtZXNzYWdlIjowLCJh
cmlhLWZsb3d0byI6MCwiYXJpYS1sYWJlbGxlZGJ5IjowLCJhcmlhLW93bnMiOjAsImFyaWEtcG9z
aW5zZXQiOjAsImFyaWEtcm93Y291bnQiOjAsImFyaWEtcm93aW5kZXgiOjAsImFyaWEtcm93c3Bh
biI6MCwiYXJpYS1zZXRzaXplIjowfSxET01BdHRyaWJ1dGVOYW1lczp7fSxET01Qcm9wZXJ0eU5h
bWVzOnt9fTt0LmV4cG9ydHM9cn0se31dLDI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7
dmFyIHI9ZSgzMiksbz1lKDEyOCksaT17Zm9jdXNET01Db21wb25lbnQ6ZnVuY3Rpb24oKXtvKHIu
Z2V0Tm9kZUZyb21JbnN0YW5jZSh0aGlzKSl9fTt0LmV4cG9ydHM9aX0sezEyODoxMjgsMzI6MzJ9
XSwzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuKGUu
Y3RybEtleXx8ZS5hbHRLZXl8fGUubWV0YUtleSkmJiEoZS5jdHJsS2V5JiZlLmFsdEtleSl9ZnVu
Y3Rpb24gbyhlKXtzd2l0Y2goZSl7Y2FzZSJ0b3BDb21wb3NpdGlvblN0YXJ0IjpyZXR1cm4gay5j
b21wb3NpdGlvblN0YXJ0O2Nhc2UidG9wQ29tcG9zaXRpb25FbmQiOnJldHVybiBrLmNvbXBvc2l0
aW9uRW5kO2Nhc2UidG9wQ29tcG9zaXRpb25VcGRhdGUiOnJldHVybiBrLmNvbXBvc2l0aW9uVXBk
YXRlfX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuInRvcEtleURvd24iPT09ZSYmdC5rZXlDb2RlPT09
eX1mdW5jdGlvbiBhKGUsdCl7c3dpdGNoKGUpe2Nhc2UidG9wS2V5VXAiOnJldHVybi0xIT09Zy5p
bmRleE9mKHQua2V5Q29kZSk7Y2FzZSJ0b3BLZXlEb3duIjpyZXR1cm4gdC5rZXlDb2RlIT09eTtj
YXNlInRvcEtleVByZXNzIjpjYXNlInRvcE1vdXNlRG93biI6Y2FzZSJ0b3BCbHVyIjpyZXR1cm4h
MDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBzKGUpe3ZhciB0PWUuZGV0YWlsO3JldHVybiJv
YmplY3QiPT10eXBlb2YgdCYmImRhdGEiaW4gdD90LmRhdGE6bnVsbH1mdW5jdGlvbiB1KGUsdCxu
LHIpe3ZhciB1LGw7aWYoXz91PW8oZSk6UD9hKGUsbikmJih1PWsuY29tcG9zaXRpb25FbmQpOmko
ZSxuKSYmKHU9ay5jb21wb3NpdGlvblN0YXJ0KSwhdSlyZXR1cm4gbnVsbDtFJiYoUHx8dSE9PWsu
Y29tcG9zaXRpb25TdGFydD91PT09ay5jb21wb3NpdGlvbkVuZCYmUCYmKGw9UC5nZXREYXRhKCkp
OlA9aC5nZXRQb29sZWQocikpO3ZhciBjPW0uZ2V0UG9vbGVkKHUsdCxuLHIpO2lmKGwpYy5kYXRh
PWw7ZWxzZXt2YXIgcD1zKG4pO251bGwhPT1wJiYoYy5kYXRhPXApfXJldHVybiBkLmFjY3VtdWxh
dGVUd29QaGFzZURpc3BhdGNoZXMoYyksY31mdW5jdGlvbiBsKGUsdCl7c3dpdGNoKGUpe2Nhc2Ui
dG9wQ29tcG9zaXRpb25FbmQiOnJldHVybiBzKHQpO2Nhc2UidG9wS2V5UHJlc3MiOnJldHVybiB0
LndoaWNoIT09eD9udWxsOihUPSEwLHcpO2Nhc2UidG9wVGV4dElucHV0Ijp2YXIgbj10LmRhdGE7
cmV0dXJuIG49PT13JiZUP251bGw6bjtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBjKGUs
dCl7aWYoUCl7aWYoInRvcENvbXBvc2l0aW9uRW5kIj09PWV8fCFfJiZhKGUsdCkpe3ZhciBuPVAu
Z2V0RGF0YSgpO3JldHVybiBoLnJlbGVhc2UoUCksUD1udWxsLG59cmV0dXJuIG51bGx9c3dpdGNo
KGUpe2Nhc2UidG9wUGFzdGUiOnJldHVybiBudWxsO2Nhc2UidG9wS2V5UHJlc3MiOnJldHVybiB0
LndoaWNoJiYhcih0KT9TdHJpbmcuZnJvbUNoYXJDb2RlKHQud2hpY2gpOm51bGw7Y2FzZSJ0b3BD
b21wb3NpdGlvbkVuZCI6cmV0dXJuIEU/bnVsbDp0LmRhdGE7ZGVmYXVsdDpyZXR1cm4gbnVsbH19
ZnVuY3Rpb24gcChlLHQsbixyKXt2YXIgbztpZighKG89Yj9sKGUsbik6YyhlLG4pKSlyZXR1cm4g
bnVsbDt2YXIgaT12LmdldFBvb2xlZChrLmJlZm9yZUlucHV0LHQsbixyKTtyZXR1cm4gaS5kYXRh
PW8sZC5hY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKGkpLGl9dmFyIGQ9ZSgxOSksZj1lKDEy
MCksaD1lKDIwKSxtPWUoNzgpLHY9ZSg4MiksZz1bOSwxMywyNywzMl0seT0yMjksXz1mLmNhblVz
ZURPTSYmIkNvbXBvc2l0aW9uRXZlbnQiaW4gd2luZG93LEM9bnVsbDtmLmNhblVzZURPTSYmImRv
Y3VtZW50TW9kZSJpbiBkb2N1bWVudCYmKEM9ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKTt2YXIgYj1m
LmNhblVzZURPTSYmIlRleHRFdmVudCJpbiB3aW5kb3cmJiFDJiYhZnVuY3Rpb24oKXt2YXIgZT13
aW5kb3cub3BlcmE7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiYiZnVuY3Rpb24iPT10eXBlb2Yg
ZS52ZXJzaW9uJiZwYXJzZUludChlLnZlcnNpb24oKSwxMCk8PTEyfSgpLEU9Zi5jYW5Vc2VET00m
JighX3x8QyYmQz44JiZDPD0xMSkseD0zMix3PVN0cmluZy5mcm9tQ2hhckNvZGUoeCksaz17YmVm
b3JlSW5wdXQ6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOiJvbkJlZm9yZUlucHV0
IixjYXB0dXJlZDoib25CZWZvcmVJbnB1dENhcHR1cmUifSxkZXBlbmRlbmNpZXM6WyJ0b3BDb21w
b3NpdGlvbkVuZCIsInRvcEtleVByZXNzIiwidG9wVGV4dElucHV0IiwidG9wUGFzdGUiXX0sY29t
cG9zaXRpb25FbmQ6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOiJvbkNvbXBvc2l0
aW9uRW5kIixjYXB0dXJlZDoib25Db21wb3NpdGlvbkVuZENhcHR1cmUifSxkZXBlbmRlbmNpZXM6
WyJ0b3BCbHVyIiwidG9wQ29tcG9zaXRpb25FbmQiLCJ0b3BLZXlEb3duIiwidG9wS2V5UHJlc3Mi
LCJ0b3BLZXlVcCIsInRvcE1vdXNlRG93biJdfSxjb21wb3NpdGlvblN0YXJ0OntwaGFzZWRSZWdp
c3RyYXRpb25OYW1lczp7YnViYmxlZDoib25Db21wb3NpdGlvblN0YXJ0IixjYXB0dXJlZDoib25D
b21wb3NpdGlvblN0YXJ0Q2FwdHVyZSJ9LGRlcGVuZGVuY2llczpbInRvcEJsdXIiLCJ0b3BDb21w
b3NpdGlvblN0YXJ0IiwidG9wS2V5RG93biIsInRvcEtleVByZXNzIiwidG9wS2V5VXAiLCJ0b3BN
b3VzZURvd24iXX0sY29tcG9zaXRpb25VcGRhdGU6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOnti
dWJibGVkOiJvbkNvbXBvc2l0aW9uVXBkYXRlIixjYXB0dXJlZDoib25Db21wb3NpdGlvblVwZGF0
ZUNhcHR1cmUifSxkZXBlbmRlbmNpZXM6WyJ0b3BCbHVyIiwidG9wQ29tcG9zaXRpb25VcGRhdGUi
LCJ0b3BLZXlEb3duIiwidG9wS2V5UHJlc3MiLCJ0b3BLZXlVcCIsInRvcE1vdXNlRG93biJdfX0s
VD0hMSxQPW51bGwsUz17ZXZlbnRUeXBlczprLGV4dHJhY3RFdmVudHM6ZnVuY3Rpb24oZSx0LG4s
cil7cmV0dXJuW3UoZSx0LG4scikscChlLHQsbixyKV19fTt0LmV4cG9ydHM9U30sezEyMDoxMjAs
MTk6MTksMjA6MjAsNzg6NzgsODI6ODJ9XSw0OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3Qi
O2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZSt0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc3Vi
c3RyaW5nKDEpfXZhciBvPXthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxib3JkZXJJbWFnZU91
dHNldDohMCxib3JkZXJJbWFnZVNsaWNlOiEwLGJvcmRlckltYWdlV2lkdGg6ITAsYm94RmxleDoh
MCxib3hGbGV4R3JvdXA6ITAsYm94T3JkaW5hbEdyb3VwOiEwLGNvbHVtbkNvdW50OiEwLGZsZXg6
ITAsZmxleEdyb3c6ITAsZmxleFBvc2l0aXZlOiEwLGZsZXhTaHJpbms6ITAsZmxleE5lZ2F0aXZl
OiEwLGZsZXhPcmRlcjohMCxncmlkUm93OiEwLGdyaWRDb2x1bW46ITAsZm9udFdlaWdodDohMCxs
aW5lQ2xhbXA6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAs
dGFiU2l6ZTohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITAsZmlsbE9wYWNpdHk6ITAsZmxv
b2RPcGFjaXR5OiEwLHN0b3BPcGFjaXR5OiEwLHN0cm9rZURhc2hhcnJheTohMCxzdHJva2VEYXNo
b2Zmc2V0OiEwLHN0cm9rZU1pdGVybGltaXQ6ITAsc3Ryb2tlT3BhY2l0eTohMCxzdHJva2VXaWR0
aDohMH0saT1bIldlYmtpdCIsIm1zIiwiTW96IiwiTyJdO09iamVjdC5rZXlzKG8pLmZvckVhY2go
ZnVuY3Rpb24oZSl7aS5mb3JFYWNoKGZ1bmN0aW9uKHQpe29bcih0LGUpXT1vW2VdfSl9KTt2YXIg
YT17YmFja2dyb3VuZDp7YmFja2dyb3VuZEF0dGFjaG1lbnQ6ITAsYmFja2dyb3VuZENvbG9yOiEw
LGJhY2tncm91bmRJbWFnZTohMCxiYWNrZ3JvdW5kUG9zaXRpb25YOiEwLGJhY2tncm91bmRQb3Np
dGlvblk6ITAsYmFja2dyb3VuZFJlcGVhdDohMH0sYmFja2dyb3VuZFBvc2l0aW9uOntiYWNrZ3Jv
dW5kUG9zaXRpb25YOiEwLGJhY2tncm91bmRQb3NpdGlvblk6ITB9LGJvcmRlcjp7Ym9yZGVyV2lk
dGg6ITAsYm9yZGVyU3R5bGU6ITAsYm9yZGVyQ29sb3I6ITB9LGJvcmRlckJvdHRvbTp7Ym9yZGVy
Qm90dG9tV2lkdGg6ITAsYm9yZGVyQm90dG9tU3R5bGU6ITAsYm9yZGVyQm90dG9tQ29sb3I6ITB9
LGJvcmRlckxlZnQ6e2JvcmRlckxlZnRXaWR0aDohMCxib3JkZXJMZWZ0U3R5bGU6ITAsYm9yZGVy
TGVmdENvbG9yOiEwfSxib3JkZXJSaWdodDp7Ym9yZGVyUmlnaHRXaWR0aDohMCxib3JkZXJSaWdo
dFN0eWxlOiEwLGJvcmRlclJpZ2h0Q29sb3I6ITB9LGJvcmRlclRvcDp7Ym9yZGVyVG9wV2lkdGg6
ITAsYm9yZGVyVG9wU3R5bGU6ITAsYm9yZGVyVG9wQ29sb3I6ITB9LGZvbnQ6e2ZvbnRTdHlsZToh
MCxmb250VmFyaWFudDohMCxmb250V2VpZ2h0OiEwLGZvbnRTaXplOiEwLGxpbmVIZWlnaHQ6ITAs
Zm9udEZhbWlseTohMH0sb3V0bGluZTp7b3V0bGluZVdpZHRoOiEwLG91dGxpbmVTdHlsZTohMCxv
dXRsaW5lQ29sb3I6ITB9fSxzPXtpc1VuaXRsZXNzTnVtYmVyOm8sc2hvcnRoYW5kUHJvcGVydHlF
eHBhbnNpb25zOmF9O3QuZXhwb3J0cz1zfSx7fV0sNTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3Ry
aWN0Ijt2YXIgcj1lKDQpLG89ZSgxMjApLGk9KGUoNTcpLGUoMTIyKSxlKDk0KSksYT1lKDEzMyks
cz1lKDEzNyksdT0oZSgxMzkpLHMoZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSl9KSksbD0hMSxjPSJj
c3NGbG9hdCI7aWYoby5jYW5Vc2VET00pe3ZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpLnN0eWxlO3RyeXtwLmZvbnQ9IiJ9Y2F0Y2goZSl7bD0hMH12b2lkIDA9PT1kb2N1bWVudC5k
b2N1bWVudEVsZW1lbnQuc3R5bGUuY3NzRmxvYXQmJihjPSJzdHlsZUZsb2F0Iil9dmFyIGQ9e2Ny
ZWF0ZU1hcmt1cEZvclN0eWxlczpmdW5jdGlvbihlLHQpe3ZhciBuPSIiO2Zvcih2YXIgciBpbiBl
KWlmKGUuaGFzT3duUHJvcGVydHkocikpe3ZhciBvPWVbcl07bnVsbCE9byYmKG4rPXUocikrIjoi
LG4rPWkocixvLHQpKyI7Iil9cmV0dXJuIG58fG51bGx9LHNldFZhbHVlRm9yU3R5bGVzOmZ1bmN0
aW9uKGUsdCxuKXt2YXIgbz1lLnN0eWxlO2Zvcih2YXIgYSBpbiB0KWlmKHQuaGFzT3duUHJvcGVy
dHkoYSkpe3ZhciBzPWkoYSx0W2FdLG4pO2lmKCJmbG9hdCIhPT1hJiYiY3NzRmxvYXQiIT09YXx8
KGE9YykscylvW2FdPXM7ZWxzZXt2YXIgdT1sJiZyLnNob3J0aGFuZFByb3BlcnR5RXhwYW5zaW9u
c1thXTtpZih1KWZvcih2YXIgcCBpbiB1KW9bcF09IiI7ZWxzZSBvW2FdPSIifX19fTt0LmV4cG9y
dHM9ZH0sezEyMDoxMjAsMTIyOjEyMiwxMzM6MTMzLDEzNzoxMzcsMTM5OjEzOSw0OjQsNTc6NTcs
OTQ6OTR9XSw2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtp
ZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNs
YXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgbz1lKDExMCksaT1lKDI0KSxhPShlKDEzNCksZnVuY3Rp
b24oKXtmdW5jdGlvbiBlKHQpe3IodGhpcyxlKSx0aGlzLl9jYWxsYmFja3M9bnVsbCx0aGlzLl9j
b250ZXh0cz1udWxsLHRoaXMuX2FyZz10fXJldHVybiBlLnByb3RvdHlwZS5lbnF1ZXVlPWZ1bmN0
aW9uKGUsdCl7dGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrc3x8W10sdGhpcy5fY2FsbGJh
Y2tzLnB1c2goZSksdGhpcy5fY29udGV4dHM9dGhpcy5fY29udGV4dHN8fFtdLHRoaXMuX2NvbnRl
eHRzLnB1c2godCl9LGUucHJvdG90eXBlLm5vdGlmeUFsbD1mdW5jdGlvbigpe3ZhciBlPXRoaXMu
X2NhbGxiYWNrcyx0PXRoaXMuX2NvbnRleHRzLG49dGhpcy5fYXJnO2lmKGUmJnQpe2UubGVuZ3Ro
IT09dC5sZW5ndGgmJm8oIjI0IiksdGhpcy5fY2FsbGJhY2tzPW51bGwsdGhpcy5fY29udGV4dHM9
bnVsbDtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdLmNhbGwodFtyXSxuKTtlLmxlbmd0
aD0wLHQubGVuZ3RoPTB9fSxlLnByb3RvdHlwZS5jaGVja3BvaW50PWZ1bmN0aW9uKCl7cmV0dXJu
IHRoaXMuX2NhbGxiYWNrcz90aGlzLl9jYWxsYmFja3MubGVuZ3RoOjB9LGUucHJvdG90eXBlLnJv
bGxiYWNrPWZ1bmN0aW9uKGUpe3RoaXMuX2NhbGxiYWNrcyYmdGhpcy5fY29udGV4dHMmJih0aGlz
Ll9jYWxsYmFja3MubGVuZ3RoPWUsdGhpcy5fY29udGV4dHMubGVuZ3RoPWUpfSxlLnByb3RvdHlw
ZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX2NhbGxiYWNrcz1udWxsLHRoaXMuX2NvbnRleHRzPW51
bGx9LGUucHJvdG90eXBlLmRlc3RydWN0b3I9ZnVuY3Rpb24oKXt0aGlzLnJlc2V0KCl9LGV9KCkp
O3QuZXhwb3J0cz1pLmFkZFBvb2xpbmdUbyhhKX0sezExMDoxMTAsMTM0OjEzNCwyNDoyNH1dLDc6
W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1lLm5vZGVO
YW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuInNlbGVjdCI9PT10fHwiaW5wdXQi
PT09dCYmImZpbGUiPT09ZS50eXBlfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9dy5nZXRQb29sZWQoUy5j
aGFuZ2UsTSxlLGsoZSkpO0MuYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyh0KSx4LmJhdGNo
ZWRVcGRhdGVzKGksdCl9ZnVuY3Rpb24gaShlKXtfLmVucXVldWVFdmVudHMoZSksXy5wcm9jZXNz
RXZlbnRRdWV1ZSghMSl9ZnVuY3Rpb24gYShlLHQpe049ZSxNPXQsTi5hdHRhY2hFdmVudCgib25j
aGFuZ2UiLG8pfWZ1bmN0aW9uIHMoKXtOJiYoTi5kZXRhY2hFdmVudCgib25jaGFuZ2UiLG8pLE49
bnVsbCxNPW51bGwpfWZ1bmN0aW9uIHUoZSx0KXtpZigidG9wQ2hhbmdlIj09PWUpcmV0dXJuIHR9
ZnVuY3Rpb24gbChlLHQsbil7InRvcEZvY3VzIj09PWU/KHMoKSxhKHQsbikpOiJ0b3BCbHVyIj09
PWUmJnMoKX1mdW5jdGlvbiBjKGUsdCl7Tj1lLE09dCxPPWUudmFsdWUsST1PYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGUuY29uc3RydWN0b3IucHJvdG90eXBlLCJ2YWx1ZSIpLE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShOLCJ2YWx1ZSIsRCksTi5hdHRhY2hFdmVudD9OLmF0dGFjaEV2ZW50
KCJvbnByb3BlcnR5Y2hhbmdlIixkKTpOLmFkZEV2ZW50TGlzdGVuZXIoInByb3BlcnR5Y2hhbmdl
IixkLCExKX1mdW5jdGlvbiBwKCl7TiYmKGRlbGV0ZSBOLnZhbHVlLE4uZGV0YWNoRXZlbnQ/Ti5k
ZXRhY2hFdmVudCgib25wcm9wZXJ0eWNoYW5nZSIsZCk6Ti5yZW1vdmVFdmVudExpc3RlbmVyKCJw
cm9wZXJ0eWNoYW5nZSIsZCwhMSksTj1udWxsLE09bnVsbCxPPW51bGwsST1udWxsKX1mdW5jdGlv
biBkKGUpe2lmKCJ2YWx1ZSI9PT1lLnByb3BlcnR5TmFtZSl7dmFyIHQ9ZS5zcmNFbGVtZW50LnZh
bHVlO3QhPT1PJiYoTz10LG8oZSkpfX1mdW5jdGlvbiBmKGUsdCl7aWYoInRvcElucHV0Ij09PWUp
cmV0dXJuIHR9ZnVuY3Rpb24gaChlLHQsbil7InRvcEZvY3VzIj09PWU/KHAoKSxjKHQsbikpOiJ0
b3BCbHVyIj09PWUmJnAoKX1mdW5jdGlvbiBtKGUsdCl7aWYoKCJ0b3BTZWxlY3Rpb25DaGFuZ2Ui
PT09ZXx8InRvcEtleVVwIj09PWV8fCJ0b3BLZXlEb3duIj09PWUpJiZOJiZOLnZhbHVlIT09Tyly
ZXR1cm4gTz1OLnZhbHVlLE19ZnVuY3Rpb24gdihlKXtyZXR1cm4gZS5ub2RlTmFtZSYmImlucHV0
Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmKCJjaGVja2JveCI9PT1lLnR5cGV8fCJyYWRp
byI9PT1lLnR5cGUpfWZ1bmN0aW9uIGcoZSx0KXtpZigidG9wQ2xpY2siPT09ZSlyZXR1cm4gdH1m
dW5jdGlvbiB5KGUsdCl7aWYobnVsbCE9ZSl7dmFyIG49ZS5fd3JhcHBlclN0YXRlfHx0Ll93cmFw
cGVyU3RhdGU7aWYobiYmbi5jb250cm9sbGVkJiYibnVtYmVyIj09PXQudHlwZSl7dmFyIHI9IiIr
dC52YWx1ZTt0LmdldEF0dHJpYnV0ZSgidmFsdWUiKSE9PXImJnQuc2V0QXR0cmlidXRlKCJ2YWx1
ZSIscil9fX12YXIgXz1lKDE2KSxDPWUoMTkpLGI9ZSgxMjApLEU9ZSgzMikseD1lKDcxKSx3PWUo
ODApLGs9ZSgxMDEpLFQ9ZSgxMDcpLFA9ZSgxMDgpLFM9e2NoYW5nZTp7cGhhc2VkUmVnaXN0cmF0
aW9uTmFtZXM6e2J1YmJsZWQ6Im9uQ2hhbmdlIixjYXB0dXJlZDoib25DaGFuZ2VDYXB0dXJlIn0s
ZGVwZW5kZW5jaWVzOlsidG9wQmx1ciIsInRvcENoYW5nZSIsInRvcENsaWNrIiwidG9wRm9jdXMi
LCJ0b3BJbnB1dCIsInRvcEtleURvd24iLCJ0b3BLZXlVcCIsInRvcFNlbGVjdGlvbkNoYW5nZSJd
fX0sTj1udWxsLE09bnVsbCxPPW51bGwsST1udWxsLFI9ITE7Yi5jYW5Vc2VET00mJihSPVQoImNo
YW5nZSIpJiYoIWRvY3VtZW50LmRvY3VtZW50TW9kZXx8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlPjgp
KTt2YXIgQT0hMTtiLmNhblVzZURPTSYmKEE9VCgiaW5wdXQiKSYmKCFkb2N1bWVudC5kb2N1bWVu
dE1vZGV8fGRvY3VtZW50LmRvY3VtZW50TW9kZT4xMSkpO3ZhciBEPXtnZXQ6ZnVuY3Rpb24oKXty
ZXR1cm4gSS5nZXQuY2FsbCh0aGlzKX0sc2V0OmZ1bmN0aW9uKGUpe089IiIrZSxJLnNldC5jYWxs
KHRoaXMsZSl9fSxMPXtldmVudFR5cGVzOlMsZXh0cmFjdEV2ZW50czpmdW5jdGlvbihlLHQsbixv
KXt2YXIgaSxhLHM9dD9FLmdldE5vZGVGcm9tSW5zdGFuY2UodCk6d2luZG93O2lmKHIocyk/Uj9p
PXU6YT1sOlAocyk/QT9pPWY6KGk9bSxhPWgpOnYocykmJihpPWcpLGkpe3ZhciBjPWkoZSx0KTtp
ZihjKXt2YXIgcD13LmdldFBvb2xlZChTLmNoYW5nZSxjLG4sbyk7cmV0dXJuIHAudHlwZT0iY2hh
bmdlIixDLmFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMocCkscH19YSYmYShlLHMsdCksInRv
cEJsdXIiPT09ZSYmeSh0LHMpfX07dC5leHBvcnRzPUx9LHsxMDE6MTAxLDEwNzoxMDcsMTA4OjEw
OCwxMjA6MTIwLDE2OjE2LDE5OjE5LDMyOjMyLDcxOjcxLDgwOjgwfV0sODpbZnVuY3Rpb24oZSx0
LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkm
Jih0PXRbMV0pLHQ/dC5uZXh0U2libGluZzplLmZpcnN0Q2hpbGR9ZnVuY3Rpb24gbyhlLHQsbil7
Yy5pbnNlcnRUcmVlQmVmb3JlKGUsdCxuKX1mdW5jdGlvbiBpKGUsdCxuKXtBcnJheS5pc0FycmF5
KHQpP3MoZSx0WzBdLHRbMV0sbik6bShlLHQsbil9ZnVuY3Rpb24gYShlLHQpe2lmKEFycmF5Lmlz
QXJyYXkodCkpe3ZhciBuPXRbMV07dD10WzBdLHUoZSx0LG4pLGUucmVtb3ZlQ2hpbGQobil9ZS5y
ZW1vdmVDaGlsZCh0KX1mdW5jdGlvbiBzKGUsdCxuLHIpe2Zvcih2YXIgbz10Ozspe3ZhciBpPW8u
bmV4dFNpYmxpbmc7aWYobShlLG8sciksbz09PW4pYnJlYWs7bz1pfX1mdW5jdGlvbiB1KGUsdCxu
KXtmb3IoOzspe3ZhciByPXQubmV4dFNpYmxpbmc7aWYocj09PW4pYnJlYWs7ZS5yZW1vdmVDaGls
ZChyKX19ZnVuY3Rpb24gbChlLHQsbil7dmFyIHI9ZS5wYXJlbnROb2RlLG89ZS5uZXh0U2libGlu
ZztvPT09dD9uJiZtKHIsZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobiksbyk6bj8oaChvLG4pLHUo
cixvLHQpKTp1KHIsZSx0KX12YXIgYz1lKDkpLHA9ZSgxMyksZD0oZSgzMiksZSg1NyksZSg5Mykp
LGY9ZSgxMTEpLGg9ZSgxMTIpLG09ZChmdW5jdGlvbihlLHQsbil7ZS5pbnNlcnRCZWZvcmUodCxu
KX0pLHY9cC5kYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cCxnPXtkYW5nZXJvdXNseVJl
cGxhY2VOb2RlV2l0aE1hcmt1cDp2LHJlcGxhY2VEZWxpbWl0ZWRUZXh0OmwscHJvY2Vzc1VwZGF0
ZXM6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHM9dFtuXTtz
d2l0Y2gocy50eXBlKXtjYXNlIklOU0VSVF9NQVJLVVAiOm8oZSxzLmNvbnRlbnQscihlLHMuYWZ0
ZXJOb2RlKSk7YnJlYWs7Y2FzZSJNT1ZFX0VYSVNUSU5HIjppKGUscy5mcm9tTm9kZSxyKGUscy5h
ZnRlck5vZGUpKTticmVhaztjYXNlIlNFVF9NQVJLVVAiOmYoZSxzLmNvbnRlbnQpO2JyZWFrO2Nh
c2UiVEVYVF9DT05URU5UIjpoKGUscy5jb250ZW50KTticmVhaztjYXNlIlJFTU9WRV9OT0RFIjph
KGUscy5mcm9tTm9kZSl9fX19O3QuZXhwb3J0cz1nfSx7MTExOjExMSwxMTI6MTEyLDEzOjEzLDMy
OjMyLDU3OjU3LDk6OSw5Mzo5M31dLDk6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVu
Y3Rpb24gcihlKXtpZihoKXt2YXIgdD1lLm5vZGUsbj1lLmNoaWxkcmVuO2lmKG4ubGVuZ3RoKWZv
cih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKW0odCxuW3JdLG51bGwpO2Vsc2UgbnVsbCE9ZS5odG1s
P3AodCxlLmh0bWwpOm51bGwhPWUudGV4dCYmZih0LGUudGV4dCl9fWZ1bmN0aW9uIG8oZSx0KXtl
LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHQubm9kZSxlKSxyKHQpfWZ1bmN0aW9uIGkoZSx0KXto
P2UuY2hpbGRyZW4ucHVzaCh0KTplLm5vZGUuYXBwZW5kQ2hpbGQodC5ub2RlKX1mdW5jdGlvbiBh
KGUsdCl7aD9lLmh0bWw9dDpwKGUubm9kZSx0KX1mdW5jdGlvbiBzKGUsdCl7aD9lLnRleHQ9dDpm
KGUubm9kZSx0KX1mdW5jdGlvbiB1KCl7cmV0dXJuIHRoaXMubm9kZS5ub2RlTmFtZX1mdW5jdGlv
biBsKGUpe3JldHVybntub2RlOmUsY2hpbGRyZW46W10saHRtbDpudWxsLHRleHQ6bnVsbCx0b1N0
cmluZzp1fX12YXIgYz1lKDEwKSxwPWUoMTExKSxkPWUoOTMpLGY9ZSgxMTIpLGg9InVuZGVmaW5l
ZCIhPXR5cGVvZiBkb2N1bWVudCYmIm51bWJlciI9PXR5cGVvZiBkb2N1bWVudC5kb2N1bWVudE1v
ZGV8fCJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiYic3RyaW5nIj09dHlwZW9mIG5hdmln
YXRvci51c2VyQWdlbnQmJi9cYkVkZ2VcL1xkLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLG09
ZChmdW5jdGlvbihlLHQsbil7MTE9PT10Lm5vZGUubm9kZVR5cGV8fDE9PT10Lm5vZGUubm9kZVR5
cGUmJiJvYmplY3QiPT09dC5ub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJihudWxsPT10Lm5v
ZGUubmFtZXNwYWNlVVJJfHx0Lm5vZGUubmFtZXNwYWNlVVJJPT09Yy5odG1sKT8ocih0KSxlLmlu
c2VydEJlZm9yZSh0Lm5vZGUsbikpOihlLmluc2VydEJlZm9yZSh0Lm5vZGUsbikscih0KSl9KTts
Lmluc2VydFRyZWVCZWZvcmU9bSxsLnJlcGxhY2VDaGlsZFdpdGhUcmVlPW8sbC5xdWV1ZUNoaWxk
PWksbC5xdWV1ZUhUTUw9YSxsLnF1ZXVlVGV4dD1zLHQuZXhwb3J0cz1sfSx7MTA6MTAsMTExOjEx
MSwxMTI6MTEyLDkzOjkzfV0sMTA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9
e2h0bWw6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLG1hdGhtbDoiaHR0cDovL3d3dy53
My5vcmcvMTk5OC9NYXRoL01hdGhNTCIsc3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ9
O3QuZXhwb3J0cz1yfSx7fV0sMTE6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rp
b24gcihlLHQpe3JldHVybihlJnQpPT09dH12YXIgbz1lKDExMCksaT0oZSgxMzQpLHtNVVNUX1VT
RV9QUk9QRVJUWToxLEhBU19CT09MRUFOX1ZBTFVFOjQsSEFTX05VTUVSSUNfVkFMVUU6OCxIQVNf
UE9TSVRJVkVfTlVNRVJJQ19WQUxVRToyNCxIQVNfT1ZFUkxPQURFRF9CT09MRUFOX1ZBTFVFOjMy
LGluamVjdERPTVByb3BlcnR5Q29uZmlnOmZ1bmN0aW9uKGUpe3ZhciB0PWksbj1lLlByb3BlcnRp
ZXN8fHt9LGE9ZS5ET01BdHRyaWJ1dGVOYW1lc3BhY2VzfHx7fSx1PWUuRE9NQXR0cmlidXRlTmFt
ZXN8fHt9LGw9ZS5ET01Qcm9wZXJ0eU5hbWVzfHx7fSxjPWUuRE9NTXV0YXRpb25NZXRob2RzfHx7
fTtlLmlzQ3VzdG9tQXR0cmlidXRlJiZzLl9pc0N1c3RvbUF0dHJpYnV0ZUZ1bmN0aW9ucy5wdXNo
KGUuaXNDdXN0b21BdHRyaWJ1dGUpO2Zvcih2YXIgcCBpbiBuKXtzLnByb3BlcnRpZXMuaGFzT3du
UHJvcGVydHkocCkmJm8oIjQ4IixwKTt2YXIgZD1wLnRvTG93ZXJDYXNlKCksZj1uW3BdLGg9e2F0
dHJpYnV0ZU5hbWU6ZCxhdHRyaWJ1dGVOYW1lc3BhY2U6bnVsbCxwcm9wZXJ0eU5hbWU6cCxtdXRh
dGlvbk1ldGhvZDpudWxsLG11c3RVc2VQcm9wZXJ0eTpyKGYsdC5NVVNUX1VTRV9QUk9QRVJUWSks
aGFzQm9vbGVhblZhbHVlOnIoZix0LkhBU19CT09MRUFOX1ZBTFVFKSxoYXNOdW1lcmljVmFsdWU6
cihmLHQuSEFTX05VTUVSSUNfVkFMVUUpLGhhc1Bvc2l0aXZlTnVtZXJpY1ZhbHVlOnIoZix0LkhB
U19QT1NJVElWRV9OVU1FUklDX1ZBTFVFKSxoYXNPdmVybG9hZGVkQm9vbGVhblZhbHVlOnIoZix0
LkhBU19PVkVSTE9BREVEX0JPT0xFQU5fVkFMVUUpfTtpZihoLmhhc0Jvb2xlYW5WYWx1ZStoLmhh
c051bWVyaWNWYWx1ZStoLmhhc092ZXJsb2FkZWRCb29sZWFuVmFsdWU8PTF8fG8oIjUwIixwKSx1
Lmhhc093blByb3BlcnR5KHApKXt2YXIgbT11W3BdO2guYXR0cmlidXRlTmFtZT1tfWEuaGFzT3du
UHJvcGVydHkocCkmJihoLmF0dHJpYnV0ZU5hbWVzcGFjZT1hW3BdKSxsLmhhc093blByb3BlcnR5
KHApJiYoaC5wcm9wZXJ0eU5hbWU9bFtwXSksYy5oYXNPd25Qcm9wZXJ0eShwKSYmKGgubXV0YXRp
b25NZXRob2Q9Y1twXSkscy5wcm9wZXJ0aWVzW3BdPWh9fX0pLGE9IjpBLVpfYS16XFx1MDBDMC1c
XHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3
Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1
MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEIixzPXtJRF9BVFRSSUJV
VEVfTkFNRToiZGF0YS1yZWFjdGlkIixST09UX0FUVFJJQlVURV9OQU1FOiJkYXRhLXJlYWN0cm9v
dCIsQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUjphLEFUVFJJQlVURV9OQU1FX0NIQVI6YSsiXFwt
LjAtOVxcdTAwQjdcXHUwMzAwLVxcdTAzNkZcXHUyMDNGLVxcdTIwNDAiLHByb3BlcnRpZXM6e30s
Z2V0UG9zc2libGVTdGFuZGFyZE5hbWU6bnVsbCxfaXNDdXN0b21BdHRyaWJ1dGVGdW5jdGlvbnM6
W10saXNDdXN0b21BdHRyaWJ1dGU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxzLl9pc0N1c3Rv
bUF0dHJpYnV0ZUZ1bmN0aW9ucy5sZW5ndGg7dCsrKWlmKCgwLHMuX2lzQ3VzdG9tQXR0cmlidXRl
RnVuY3Rpb25zW3RdKShlKSlyZXR1cm4hMDtyZXR1cm4hMX0saW5qZWN0aW9uOml9O3QuZXhwb3J0
cz1zfSx7MTEwOjExMCwxMzQ6MTM0fV0sMTI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7
ZnVuY3Rpb24gcihlKXtyZXR1cm4hIWwuaGFzT3duUHJvcGVydHkoZSl8fCF1Lmhhc093blByb3Bl
cnR5KGUpJiYocy50ZXN0KGUpPyhsW2VdPSEwLCEwKToodVtlXT0hMCwhMSkpfWZ1bmN0aW9uIG8o
ZSx0KXtyZXR1cm4gbnVsbD09dHx8ZS5oYXNCb29sZWFuVmFsdWUmJiF0fHxlLmhhc051bWVyaWNW
YWx1ZSYmaXNOYU4odCl8fGUuaGFzUG9zaXRpdmVOdW1lcmljVmFsdWUmJnQ8MXx8ZS5oYXNPdmVy
bG9hZGVkQm9vbGVhblZhbHVlJiYhMT09PXR9dmFyIGk9ZSgxMSksYT0oZSgzMiksZSg1NyksZSgx
MDkpKSxzPShlKDEzOSksbmV3IFJlZ0V4cCgiXlsiK2kuQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hB
UisiXVsiK2kuQVRUUklCVVRFX05BTUVfQ0hBUisiXSokIikpLHU9e30sbD17fSxjPXtjcmVhdGVN
YXJrdXBGb3JJRDpmdW5jdGlvbihlKXtyZXR1cm4gaS5JRF9BVFRSSUJVVEVfTkFNRSsiPSIrYShl
KX0sc2V0QXR0cmlidXRlRm9ySUQ6ZnVuY3Rpb24oZSx0KXtlLnNldEF0dHJpYnV0ZShpLklEX0FU
VFJJQlVURV9OQU1FLHQpfSxjcmVhdGVNYXJrdXBGb3JSb290OmZ1bmN0aW9uKCl7cmV0dXJuIGku
Uk9PVF9BVFRSSUJVVEVfTkFNRSsnPSIiJ30sc2V0QXR0cmlidXRlRm9yUm9vdDpmdW5jdGlvbihl
KXtlLnNldEF0dHJpYnV0ZShpLlJPT1RfQVRUUklCVVRFX05BTUUsIiIpfSxjcmVhdGVNYXJrdXBG
b3JQcm9wZXJ0eTpmdW5jdGlvbihlLHQpe3ZhciBuPWkucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0
eShlKT9pLnByb3BlcnRpZXNbZV06bnVsbDtpZihuKXtpZihvKG4sdCkpcmV0dXJuIiI7dmFyIHI9
bi5hdHRyaWJ1dGVOYW1lO3JldHVybiBuLmhhc0Jvb2xlYW5WYWx1ZXx8bi5oYXNPdmVybG9hZGVk
Qm9vbGVhblZhbHVlJiYhMD09PXQ/cisnPSIiJzpyKyI9IithKHQpfXJldHVybiBpLmlzQ3VzdG9t
QXR0cmlidXRlKGUpP251bGw9PXQ/IiI6ZSsiPSIrYSh0KTpudWxsfSxjcmVhdGVNYXJrdXBGb3JD
dXN0b21BdHRyaWJ1dGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcihlKSYmbnVsbCE9dD9lKyI9Iith
KHQpOiIifSxzZXRWYWx1ZUZvclByb3BlcnR5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1pLnByb3Bl
cnRpZXMuaGFzT3duUHJvcGVydHkodCk/aS5wcm9wZXJ0aWVzW3RdOm51bGw7aWYocil7dmFyIGE9
ci5tdXRhdGlvbk1ldGhvZDtpZihhKWEoZSxuKTtlbHNle2lmKG8ocixuKSlyZXR1cm4gdm9pZCB0
aGlzLmRlbGV0ZVZhbHVlRm9yUHJvcGVydHkoZSx0KTtpZihyLm11c3RVc2VQcm9wZXJ0eSllW3Iu
cHJvcGVydHlOYW1lXT1uO2Vsc2V7dmFyIHM9ci5hdHRyaWJ1dGVOYW1lLHU9ci5hdHRyaWJ1dGVO
YW1lc3BhY2U7dT9lLnNldEF0dHJpYnV0ZU5TKHUscywiIituKTpyLmhhc0Jvb2xlYW5WYWx1ZXx8
ci5oYXNPdmVybG9hZGVkQm9vbGVhblZhbHVlJiYhMD09PW4/ZS5zZXRBdHRyaWJ1dGUocywiIik6
ZS5zZXRBdHRyaWJ1dGUocywiIituKX19fWVsc2UgaWYoaS5pc0N1c3RvbUF0dHJpYnV0ZSh0KSly
ZXR1cm4gdm9pZCBjLnNldFZhbHVlRm9yQXR0cmlidXRlKGUsdCxuKX0sc2V0VmFsdWVGb3JBdHRy
aWJ1dGU6ZnVuY3Rpb24oZSx0LG4pe3IodCkmJihudWxsPT1uP2UucmVtb3ZlQXR0cmlidXRlKHQp
OmUuc2V0QXR0cmlidXRlKHQsIiIrbikpfSxkZWxldGVWYWx1ZUZvckF0dHJpYnV0ZTpmdW5jdGlv
bihlLHQpe2UucmVtb3ZlQXR0cmlidXRlKHQpfSxkZWxldGVWYWx1ZUZvclByb3BlcnR5OmZ1bmN0
aW9uKGUsdCl7dmFyIG49aS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KHQpP2kucHJvcGVydGll
c1t0XTpudWxsO2lmKG4pe3ZhciByPW4ubXV0YXRpb25NZXRob2Q7aWYocilyKGUsdm9pZCAwKTtl
bHNlIGlmKG4ubXVzdFVzZVByb3BlcnR5KXt2YXIgbz1uLnByb3BlcnR5TmFtZTtuLmhhc0Jvb2xl
YW5WYWx1ZT9lW29dPSExOmVbb109IiJ9ZWxzZSBlLnJlbW92ZUF0dHJpYnV0ZShuLmF0dHJpYnV0
ZU5hbWUpfWVsc2UgaS5pc0N1c3RvbUF0dHJpYnV0ZSh0KSYmZS5yZW1vdmVBdHRyaWJ1dGUodCl9
fTt0LmV4cG9ydHM9Y30sezEwOToxMDksMTE6MTEsMTM5OjEzOSwzMjozMiw1Nzo1N31dLDEzOltm
dW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMTEwKSxvPWUoOSksaT1lKDEyMCks
YT1lKDEyNSkscz1lKDEyNiksdT0oZSgxMzQpLHtkYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1h
cmt1cDpmdW5jdGlvbihlLHQpe2lmKGkuY2FuVXNlRE9NfHxyKCI1NiIpLHR8fHIoIjU3IiksIkhU
TUwiPT09ZS5ub2RlTmFtZSYmcigiNTgiKSwic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBuPWEodCxz
KVswXTtlLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG4sZSl9ZWxzZSBvLnJlcGxhY2VDaGlsZFdp
dGhUcmVlKGUsdCl9fSk7dC5leHBvcnRzPXV9LHsxMTA6MTEwLDEyMDoxMjAsMTI1OjEyNSwxMjY6
MTI2LDEzNDoxMzQsOTo5fV0sMTQ6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9
WyJSZXNwb25kZXJFdmVudFBsdWdpbiIsIlNpbXBsZUV2ZW50UGx1Z2luIiwiVGFwRXZlbnRQbHVn
aW4iLCJFbnRlckxlYXZlRXZlbnRQbHVnaW4iLCJDaGFuZ2VFdmVudFBsdWdpbiIsIlNlbGVjdEV2
ZW50UGx1Z2luIiwiQmVmb3JlSW5wdXRFdmVudFBsdWdpbiJdO3QuZXhwb3J0cz1yfSx7fV0sMTU6
W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgxOSksbz1lKDMyKSxpPWUoODQp
LGE9e21vdXNlRW50ZXI6e3JlZ2lzdHJhdGlvbk5hbWU6Im9uTW91c2VFbnRlciIsZGVwZW5kZW5j
aWVzOlsidG9wTW91c2VPdXQiLCJ0b3BNb3VzZU92ZXIiXX0sbW91c2VMZWF2ZTp7cmVnaXN0cmF0
aW9uTmFtZToib25Nb3VzZUxlYXZlIixkZXBlbmRlbmNpZXM6WyJ0b3BNb3VzZU91dCIsInRvcE1v
dXNlT3ZlciJdfX0scz17ZXZlbnRUeXBlczphLGV4dHJhY3RFdmVudHM6ZnVuY3Rpb24oZSx0LG4s
cyl7aWYoInRvcE1vdXNlT3ZlciI9PT1lJiYobi5yZWxhdGVkVGFyZ2V0fHxuLmZyb21FbGVtZW50
KSlyZXR1cm4gbnVsbDtpZigidG9wTW91c2VPdXQiIT09ZSYmInRvcE1vdXNlT3ZlciIhPT1lKXJl
dHVybiBudWxsO3ZhciB1O2lmKHMud2luZG93PT09cyl1PXM7ZWxzZXt2YXIgbD1zLm93bmVyRG9j
dW1lbnQ7dT1sP2wuZGVmYXVsdFZpZXd8fGwucGFyZW50V2luZG93OndpbmRvd312YXIgYyxwO2lm
KCJ0b3BNb3VzZU91dCI9PT1lKXtjPXQ7dmFyIGQ9bi5yZWxhdGVkVGFyZ2V0fHxuLnRvRWxlbWVu
dDtwPWQ/by5nZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShkKTpudWxsfWVsc2UgYz1udWxsLHA9
dDtpZihjPT09cClyZXR1cm4gbnVsbDt2YXIgZj1udWxsPT1jP3U6by5nZXROb2RlRnJvbUluc3Rh
bmNlKGMpLGg9bnVsbD09cD91Om8uZ2V0Tm9kZUZyb21JbnN0YW5jZShwKSxtPWkuZ2V0UG9vbGVk
KGEubW91c2VMZWF2ZSxjLG4scyk7bS50eXBlPSJtb3VzZWxlYXZlIixtLnRhcmdldD1mLG0ucmVs
YXRlZFRhcmdldD1oO3ZhciB2PWkuZ2V0UG9vbGVkKGEubW91c2VFbnRlcixwLG4scyk7cmV0dXJu
IHYudHlwZT0ibW91c2VlbnRlciIsdi50YXJnZXQ9aCx2LnJlbGF0ZWRUYXJnZXQ9ZixyLmFjY3Vt
dWxhdGVFbnRlckxlYXZlRGlzcGF0Y2hlcyhtLHYsYyxwKSxbbSx2XX19O3QuZXhwb3J0cz1zfSx7
MTk6MTksMzI6MzIsODQ6ODR9XSwxNjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5j
dGlvbiByKGUpe3JldHVybiJidXR0b24iPT09ZXx8ImlucHV0Ij09PWV8fCJzZWxlY3QiPT09ZXx8
InRleHRhcmVhIj09PWV9ZnVuY3Rpb24gbyhlLHQsbil7c3dpdGNoKGUpe2Nhc2Uib25DbGljayI6
Y2FzZSJvbkNsaWNrQ2FwdHVyZSI6Y2FzZSJvbkRvdWJsZUNsaWNrIjpjYXNlIm9uRG91YmxlQ2xp
Y2tDYXB0dXJlIjpjYXNlIm9uTW91c2VEb3duIjpjYXNlIm9uTW91c2VEb3duQ2FwdHVyZSI6Y2Fz
ZSJvbk1vdXNlTW92ZSI6Y2FzZSJvbk1vdXNlTW92ZUNhcHR1cmUiOmNhc2Uib25Nb3VzZVVwIjpj
YXNlIm9uTW91c2VVcENhcHR1cmUiOnJldHVybiEoIW4uZGlzYWJsZWR8fCFyKHQpKTtkZWZhdWx0
OnJldHVybiExfX12YXIgaT1lKDExMCksYT1lKDE3KSxzPWUoMTgpLHU9ZSg0OSksbD1lKDkxKSxj
PWUoOTcpLHA9KGUoMTM0KSx7fSksZD1udWxsLGY9ZnVuY3Rpb24oZSx0KXtlJiYocy5leGVjdXRl
RGlzcGF0Y2hlc0luT3JkZXIoZSx0KSxlLmlzUGVyc2lzdGVudCgpfHxlLmNvbnN0cnVjdG9yLnJl
bGVhc2UoZSkpfSxoPWZ1bmN0aW9uKGUpe3JldHVybiBmKGUsITApfSxtPWZ1bmN0aW9uKGUpe3Jl
dHVybiBmKGUsITEpfSx2PWZ1bmN0aW9uKGUpe3JldHVybiIuIitlLl9yb290Tm9kZUlEfSxnPXtp
bmplY3Rpb246e2luamVjdEV2ZW50UGx1Z2luT3JkZXI6YS5pbmplY3RFdmVudFBsdWdpbk9yZGVy
LGluamVjdEV2ZW50UGx1Z2luc0J5TmFtZTphLmluamVjdEV2ZW50UGx1Z2luc0J5TmFtZX0scHV0
TGlzdGVuZXI6ZnVuY3Rpb24oZSx0LG4peyJmdW5jdGlvbiIhPXR5cGVvZiBuJiZpKCI5NCIsdCx0
eXBlb2Ygbik7dmFyIHI9dihlKTsocFt0XXx8KHBbdF09e30pKVtyXT1uO3ZhciBvPWEucmVnaXN0
cmF0aW9uTmFtZU1vZHVsZXNbdF07byYmby5kaWRQdXRMaXN0ZW5lciYmby5kaWRQdXRMaXN0ZW5l
cihlLHQsbil9LGdldExpc3RlbmVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49cFt0XTtpZihvKHQsZS5f
Y3VycmVudEVsZW1lbnQudHlwZSxlLl9jdXJyZW50RWxlbWVudC5wcm9wcykpcmV0dXJuIG51bGw7
dmFyIHI9dihlKTtyZXR1cm4gbiYmbltyXX0sZGVsZXRlTGlzdGVuZXI6ZnVuY3Rpb24oZSx0KXt2
YXIgbj1hLnJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzW3RdO24mJm4ud2lsbERlbGV0ZUxpc3RlbmVy
JiZuLndpbGxEZWxldGVMaXN0ZW5lcihlLHQpO3ZhciByPXBbdF07ciYmZGVsZXRlIHJbdihlKV19
LGRlbGV0ZUFsbExpc3RlbmVyczpmdW5jdGlvbihlKXt2YXIgdD12KGUpO2Zvcih2YXIgbiBpbiBw
KWlmKHAuaGFzT3duUHJvcGVydHkobikmJnBbbl1bdF0pe3ZhciByPWEucmVnaXN0cmF0aW9uTmFt
ZU1vZHVsZXNbbl07ciYmci53aWxsRGVsZXRlTGlzdGVuZXImJnIud2lsbERlbGV0ZUxpc3RlbmVy
KGUsbiksZGVsZXRlIHBbbl1bdF19fSxleHRyYWN0RXZlbnRzOmZ1bmN0aW9uKGUsdCxuLHIpe2Zv
cih2YXIgbyxpPWEucGx1Z2lucyxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciB1PWlbc107aWYodSl7
dmFyIGM9dS5leHRyYWN0RXZlbnRzKGUsdCxuLHIpO2MmJihvPWwobyxjKSl9fXJldHVybiBvfSxl
bnF1ZXVlRXZlbnRzOmZ1bmN0aW9uKGUpe2UmJihkPWwoZCxlKSl9LHByb2Nlc3NFdmVudFF1ZXVl
OmZ1bmN0aW9uKGUpe3ZhciB0PWQ7ZD1udWxsLGU/Yyh0LGgpOmModCxtKSxkJiZpKCI5NSIpLHUu
cmV0aHJvd0NhdWdodEVycm9yKCl9LF9fcHVyZ2U6ZnVuY3Rpb24oKXtwPXt9fSxfX2dldExpc3Rl
bmVyQmFuazpmdW5jdGlvbigpe3JldHVybiBwfX07dC5leHBvcnRzPWd9LHsxMTA6MTEwLDEzNDox
MzQsMTc6MTcsMTg6MTgsNDk6NDksOTE6OTEsOTc6OTd9XSwxNzpbZnVuY3Rpb24oZSx0LG4peyJ1
c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7aWYocylmb3IodmFyIGUgaW4gdSl7dmFyIHQ9dVtlXSxu
PXMuaW5kZXhPZihlKTtpZihuPi0xfHxhKCI5NiIsZSksIWwucGx1Z2luc1tuXSl7dC5leHRyYWN0
RXZlbnRzfHxhKCI5NyIsZSksbC5wbHVnaW5zW25dPXQ7dmFyIHI9dC5ldmVudFR5cGVzO2Zvcih2
YXIgaSBpbiByKW8ocltpXSx0LGkpfHxhKCI5OCIsaSxlKX19fWZ1bmN0aW9uIG8oZSx0LG4pe2wu
ZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzLmhhc093blByb3BlcnR5KG4pJiZhKCI5OSIsbiksbC5l
dmVudE5hbWVEaXNwYXRjaENvbmZpZ3Nbbl09ZTt2YXIgcj1lLnBoYXNlZFJlZ2lzdHJhdGlvbk5h
bWVzO2lmKHIpe2Zvcih2YXIgbyBpbiByKWlmKHIuaGFzT3duUHJvcGVydHkobykpe3ZhciBzPXJb
b107aShzLHQsbil9cmV0dXJuITB9cmV0dXJuISFlLnJlZ2lzdHJhdGlvbk5hbWUmJihpKGUucmVn
aXN0cmF0aW9uTmFtZSx0LG4pLCEwKX1mdW5jdGlvbiBpKGUsdCxuKXtsLnJlZ2lzdHJhdGlvbk5h
bWVNb2R1bGVzW2VdJiZhKCIxMDAiLGUpLGwucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbZV09dCxs
LnJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXNbZV09dC5ldmVudFR5cGVzW25dLmRlcGVuZGVu
Y2llc312YXIgYT1lKDExMCkscz0oZSgxMzQpLG51bGwpLHU9e30sbD17cGx1Z2luczpbXSxldmVu
dE5hbWVEaXNwYXRjaENvbmZpZ3M6e30scmVnaXN0cmF0aW9uTmFtZU1vZHVsZXM6e30scmVnaXN0
cmF0aW9uTmFtZURlcGVuZGVuY2llczp7fSxwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzOm51bGws
aW5qZWN0RXZlbnRQbHVnaW5PcmRlcjpmdW5jdGlvbihlKXtzJiZhKCIxMDEiKSxzPUFycmF5LnBy
b3RvdHlwZS5zbGljZS5jYWxsKGUpLHIoKX0saW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lOmZ1bmN0
aW9uKGUpe3ZhciB0PSExO2Zvcih2YXIgbiBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkobikpe3Zh
ciBvPWVbbl07dS5oYXNPd25Qcm9wZXJ0eShuKSYmdVtuXT09PW98fCh1W25dJiZhKCIxMDIiLG4p
LHVbbl09byx0PSEwKX10JiZyKCl9LGdldFBsdWdpbk1vZHVsZUZvckV2ZW50OmZ1bmN0aW9uKGUp
e3ZhciB0PWUuZGlzcGF0Y2hDb25maWc7aWYodC5yZWdpc3RyYXRpb25OYW1lKXJldHVybiBsLnJl
Z2lzdHJhdGlvbk5hbWVNb2R1bGVzW3QucmVnaXN0cmF0aW9uTmFtZV18fG51bGw7aWYodm9pZCAw
IT09dC5waGFzZWRSZWdpc3RyYXRpb25OYW1lcyl7dmFyIG49dC5waGFzZWRSZWdpc3RyYXRpb25O
YW1lcztmb3IodmFyIHIgaW4gbilpZihuLmhhc093blByb3BlcnR5KHIpKXt2YXIgbz1sLnJlZ2lz
dHJhdGlvbk5hbWVNb2R1bGVzW25bcl1dO2lmKG8pcmV0dXJuIG99fXJldHVybiBudWxsfSxfcmVz
ZXRFdmVudFBsdWdpbnM6ZnVuY3Rpb24oKXtzPW51bGw7Zm9yKHZhciBlIGluIHUpdS5oYXNPd25Q
cm9wZXJ0eShlKSYmZGVsZXRlIHVbZV07bC5wbHVnaW5zLmxlbmd0aD0wO3ZhciB0PWwuZXZlbnRO
YW1lRGlzcGF0Y2hDb25maWdzO2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJmRl
bGV0ZSB0W25dO3ZhciByPWwucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXM7Zm9yKHZhciBvIGluIHIp
ci5oYXNPd25Qcm9wZXJ0eShvKSYmZGVsZXRlIHJbb119fTt0LmV4cG9ydHM9bH0sezExMDoxMTAs
MTM0OjEzNH1dLDE4OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7
cmV0dXJuInRvcE1vdXNlVXAiPT09ZXx8InRvcFRvdWNoRW5kIj09PWV8fCJ0b3BUb3VjaENhbmNl
bCI9PT1lfWZ1bmN0aW9uIG8oZSl7cmV0dXJuInRvcE1vdXNlTW92ZSI9PT1lfHwidG9wVG91Y2hN
b3ZlIj09PWV9ZnVuY3Rpb24gaShlKXtyZXR1cm4idG9wTW91c2VEb3duIj09PWV8fCJ0b3BUb3Vj
aFN0YXJ0Ij09PWV9ZnVuY3Rpb24gYShlLHQsbixyKXt2YXIgbz1lLnR5cGV8fCJ1bmtub3duLWV2
ZW50IjtlLmN1cnJlbnRUYXJnZXQ9Zy5nZXROb2RlRnJvbUluc3RhbmNlKHIpLHQ/bS5pbnZva2VH
dWFyZGVkQ2FsbGJhY2tXaXRoQ2F0Y2gobyxuLGUpOm0uaW52b2tlR3VhcmRlZENhbGxiYWNrKG8s
bixlKSxlLmN1cnJlbnRUYXJnZXQ9bnVsbH1mdW5jdGlvbiBzKGUsdCl7dmFyIG49ZS5fZGlzcGF0
Y2hMaXN0ZW5lcnMscj1lLl9kaXNwYXRjaEluc3RhbmNlcztpZihBcnJheS5pc0FycmF5KG4pKWZv
cih2YXIgbz0wO288bi5sZW5ndGgmJiFlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7bysrKWEoZSx0
LG5bb10scltvXSk7ZWxzZSBuJiZhKGUsdCxuLHIpO2UuX2Rpc3BhdGNoTGlzdGVuZXJzPW51bGws
ZS5fZGlzcGF0Y2hJbnN0YW5jZXM9bnVsbH1mdW5jdGlvbiB1KGUpe3ZhciB0PWUuX2Rpc3BhdGNo
TGlzdGVuZXJzLG49ZS5fZGlzcGF0Y2hJbnN0YW5jZXM7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9y
KHZhciByPTA7cjx0Lmxlbmd0aCYmIWUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtyKyspaWYodFty
XShlLG5bcl0pKXJldHVybiBuW3JdfWVsc2UgaWYodCYmdChlLG4pKXJldHVybiBuO3JldHVybiBu
dWxsfWZ1bmN0aW9uIGwoZSl7dmFyIHQ9dShlKTtyZXR1cm4gZS5fZGlzcGF0Y2hJbnN0YW5jZXM9
bnVsbCxlLl9kaXNwYXRjaExpc3RlbmVycz1udWxsLHR9ZnVuY3Rpb24gYyhlKXt2YXIgdD1lLl9k
aXNwYXRjaExpc3RlbmVycyxuPWUuX2Rpc3BhdGNoSW5zdGFuY2VzO0FycmF5LmlzQXJyYXkodCkm
JmgoIjEwMyIpLGUuY3VycmVudFRhcmdldD10P2cuZ2V0Tm9kZUZyb21JbnN0YW5jZShuKTpudWxs
O3ZhciByPXQ/dChlKTpudWxsO3JldHVybiBlLmN1cnJlbnRUYXJnZXQ9bnVsbCxlLl9kaXNwYXRj
aExpc3RlbmVycz1udWxsLGUuX2Rpc3BhdGNoSW5zdGFuY2VzPW51bGwscn1mdW5jdGlvbiBwKGUp
e3JldHVybiEhZS5fZGlzcGF0Y2hMaXN0ZW5lcnN9dmFyIGQsZixoPWUoMTEwKSxtPWUoNDkpLHY9
KGUoMTM0KSxlKDEzOSkse2luamVjdENvbXBvbmVudFRyZWU6ZnVuY3Rpb24oZSl7ZD1lfSxpbmpl
Y3RUcmVlVHJhdmVyc2FsOmZ1bmN0aW9uKGUpe2Y9ZX19KSxnPXtpc0VuZGlzaDpyLGlzTW92ZWlz
aDpvLGlzU3RhcnRpc2g6aSxleGVjdXRlRGlyZWN0RGlzcGF0Y2g6YyxleGVjdXRlRGlzcGF0Y2hl
c0luT3JkZXI6cyxleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXJTdG9wQXRUcnVlOmwsaGFzRGlzcGF0
Y2hlczpwLGdldEluc3RhbmNlRnJvbU5vZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGQuZ2V0SW5zdGFu
Y2VGcm9tTm9kZShlKX0sZ2V0Tm9kZUZyb21JbnN0YW5jZTpmdW5jdGlvbihlKXtyZXR1cm4gZC5n
ZXROb2RlRnJvbUluc3RhbmNlKGUpfSxpc0FuY2VzdG9yOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGYu
aXNBbmNlc3RvcihlLHQpfSxnZXRMb3dlc3RDb21tb25BbmNlc3RvcjpmdW5jdGlvbihlLHQpe3Jl
dHVybiBmLmdldExvd2VzdENvbW1vbkFuY2VzdG9yKGUsdCl9LGdldFBhcmVudEluc3RhbmNlOmZ1
bmN0aW9uKGUpe3JldHVybiBmLmdldFBhcmVudEluc3RhbmNlKGUpfSx0cmF2ZXJzZVR3b1BoYXNl
OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZi50cmF2ZXJzZVR3b1BoYXNlKGUsdCxuKX0sdHJhdmVy
c2VFbnRlckxlYXZlOmZ1bmN0aW9uKGUsdCxuLHIsbyl7cmV0dXJuIGYudHJhdmVyc2VFbnRlckxl
YXZlKGUsdCxuLHIsbyl9LGluamVjdGlvbjp2fTt0LmV4cG9ydHM9Z30sezExMDoxMTAsMTM0OjEz
NCwxMzk6MTM5LDQ5OjQ5fV0sMTk6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rp
b24gcihlLHQsbil7dmFyIHI9dC5kaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1l
c1tuXTtyZXR1cm4gZyhlLHIpfWZ1bmN0aW9uIG8oZSx0LG4pe3ZhciBvPXIoZSxuLHQpO28mJihu
Ll9kaXNwYXRjaExpc3RlbmVycz1tKG4uX2Rpc3BhdGNoTGlzdGVuZXJzLG8pLG4uX2Rpc3BhdGNo
SW5zdGFuY2VzPW0obi5fZGlzcGF0Y2hJbnN0YW5jZXMsZSkpfWZ1bmN0aW9uIGkoZSl7ZSYmZS5k
aXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lcyYmaC50cmF2ZXJzZVR3b1BoYXNl
KGUuX3RhcmdldEluc3QsbyxlKX1mdW5jdGlvbiBhKGUpe2lmKGUmJmUuZGlzcGF0Y2hDb25maWcu
cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMpe3ZhciB0PWUuX3RhcmdldEluc3Qsbj10P2guZ2V0UGFy
ZW50SW5zdGFuY2UodCk6bnVsbDtoLnRyYXZlcnNlVHdvUGhhc2UobixvLGUpfX1mdW5jdGlvbiBz
KGUsdCxuKXtpZihuJiZuLmRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUpe3ZhciByPW4u
ZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSxvPWcoZSxyKTtvJiYobi5fZGlzcGF0Y2hM
aXN0ZW5lcnM9bShuLl9kaXNwYXRjaExpc3RlbmVycyxvKSxuLl9kaXNwYXRjaEluc3RhbmNlcz1t
KG4uX2Rpc3BhdGNoSW5zdGFuY2VzLGUpKX19ZnVuY3Rpb24gdShlKXtlJiZlLmRpc3BhdGNoQ29u
ZmlnLnJlZ2lzdHJhdGlvbk5hbWUmJnMoZS5fdGFyZ2V0SW5zdCxudWxsLGUpfWZ1bmN0aW9uIGwo
ZSl7dihlLGkpfWZ1bmN0aW9uIGMoZSl7dihlLGEpfWZ1bmN0aW9uIHAoZSx0LG4scil7aC50cmF2
ZXJzZUVudGVyTGVhdmUobixyLHMsZSx0KX1mdW5jdGlvbiBkKGUpe3YoZSx1KX12YXIgZj1lKDE2
KSxoPWUoMTgpLG09ZSg5MSksdj1lKDk3KSxnPShlKDEzOSksZi5nZXRMaXN0ZW5lcikseT17YWNj
dW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlczpsLGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNT
a2lwVGFyZ2V0OmMsYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXM6ZCxhY2N1bXVsYXRlRW50ZXJM
ZWF2ZURpc3BhdGNoZXM6cH07dC5leHBvcnRzPXl9LHsxMzk6MTM5LDE2OjE2LDE4OjE4LDkxOjkx
LDk3Ojk3fV0sMjA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt0
aGlzLl9yb290PWUsdGhpcy5fc3RhcnRUZXh0PXRoaXMuZ2V0VGV4dCgpLHRoaXMuX2ZhbGxiYWNr
VGV4dD1udWxsfXZhciBvPWUoMTQwKSxpPWUoMjQpLGE9ZSgxMDQpO28oci5wcm90b3R5cGUse2Rl
c3RydWN0b3I6ZnVuY3Rpb24oKXt0aGlzLl9yb290PW51bGwsdGhpcy5fc3RhcnRUZXh0PW51bGws
dGhpcy5fZmFsbGJhY2tUZXh0PW51bGx9LGdldFRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4idmFsdWUi
aW4gdGhpcy5fcm9vdD90aGlzLl9yb290LnZhbHVlOnRoaXMuX3Jvb3RbYSgpXX0sZ2V0RGF0YTpm
dW5jdGlvbigpe2lmKHRoaXMuX2ZhbGxiYWNrVGV4dClyZXR1cm4gdGhpcy5fZmFsbGJhY2tUZXh0
O3ZhciBlLHQsbj10aGlzLl9zdGFydFRleHQscj1uLmxlbmd0aCxvPXRoaXMuZ2V0VGV4dCgpLGk9
by5sZW5ndGg7Zm9yKGU9MDtlPHImJm5bZV09PT1vW2VdO2UrKyk7dmFyIGE9ci1lO2Zvcih0PTE7
dDw9YSYmbltyLXRdPT09b1tpLXRdO3QrKyk7dmFyIHM9dD4xPzEtdDp2b2lkIDA7cmV0dXJuIHRo
aXMuX2ZhbGxiYWNrVGV4dD1vLnNsaWNlKGUscyksdGhpcy5fZmFsbGJhY2tUZXh0fX0pLGkuYWRk
UG9vbGluZ1RvKHIpLHQuZXhwb3J0cz1yfSx7MTA0OjEwNCwxNDA6MTQwLDI0OjI0fV0sMjE6W2Z1
bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgxMSksbz1yLmluamVjdGlvbi5NVVNU
X1VTRV9QUk9QRVJUWSxpPXIuaW5qZWN0aW9uLkhBU19CT09MRUFOX1ZBTFVFLGE9ci5pbmplY3Rp
b24uSEFTX05VTUVSSUNfVkFMVUUscz1yLmluamVjdGlvbi5IQVNfUE9TSVRJVkVfTlVNRVJJQ19W
QUxVRSx1PXIuaW5qZWN0aW9uLkhBU19PVkVSTE9BREVEX0JPT0xFQU5fVkFMVUUsbD17aXNDdXN0
b21BdHRyaWJ1dGU6UmVnRXhwLnByb3RvdHlwZS50ZXN0LmJpbmQobmV3IFJlZ0V4cCgiXihkYXRh
fGFyaWEpLVsiK3IuQVRUUklCVVRFX05BTUVfQ0hBUisiXSokIikpLFByb3BlcnRpZXM6e2FjY2Vw
dDowLGFjY2VwdENoYXJzZXQ6MCxhY2Nlc3NLZXk6MCxhY3Rpb246MCxhbGxvd0Z1bGxTY3JlZW46
aSxhbGxvd1RyYW5zcGFyZW5jeTowLGFsdDowLGFzOjAsYXN5bmM6aSxhdXRvQ29tcGxldGU6MCxh
dXRvUGxheTppLGNhcHR1cmU6aSxjZWxsUGFkZGluZzowLGNlbGxTcGFjaW5nOjAsY2hhclNldDow
LGNoYWxsZW5nZTowLGNoZWNrZWQ6b3xpLGNpdGU6MCxjbGFzc0lEOjAsY2xhc3NOYW1lOjAsY29s
czpzLGNvbFNwYW46MCxjb250ZW50OjAsY29udGVudEVkaXRhYmxlOjAsY29udGV4dE1lbnU6MCxj
b250cm9sczppLGNvb3JkczowLGNyb3NzT3JpZ2luOjAsZGF0YTowLGRhdGVUaW1lOjAsZGVmYXVs
dDppLGRlZmVyOmksZGlyOjAsZGlzYWJsZWQ6aSxkb3dubG9hZDp1LGRyYWdnYWJsZTowLGVuY1R5
cGU6MCxmb3JtOjAsZm9ybUFjdGlvbjowLGZvcm1FbmNUeXBlOjAsZm9ybU1ldGhvZDowLGZvcm1O
b1ZhbGlkYXRlOmksZm9ybVRhcmdldDowLGZyYW1lQm9yZGVyOjAsaGVhZGVyczowLGhlaWdodDow
LGhpZGRlbjppLGhpZ2g6MCxocmVmOjAsaHJlZkxhbmc6MCxodG1sRm9yOjAsaHR0cEVxdWl2OjAs
aWNvbjowLGlkOjAsaW5wdXRNb2RlOjAsaW50ZWdyaXR5OjAsaXM6MCxrZXlQYXJhbXM6MCxrZXlU
eXBlOjAsa2luZDowLGxhYmVsOjAsbGFuZzowLGxpc3Q6MCxsb29wOmksbG93OjAsbWFuaWZlc3Q6
MCxtYXJnaW5IZWlnaHQ6MCxtYXJnaW5XaWR0aDowLG1heDowLG1heExlbmd0aDowLG1lZGlhOjAs
bWVkaWFHcm91cDowLG1ldGhvZDowLG1pbjowLG1pbkxlbmd0aDowLG11bHRpcGxlOm98aSxtdXRl
ZDpvfGksbmFtZTowLG5vbmNlOjAsbm9WYWxpZGF0ZTppLG9wZW46aSxvcHRpbXVtOjAscGF0dGVy
bjowLHBsYWNlaG9sZGVyOjAscGxheXNJbmxpbmU6aSxwb3N0ZXI6MCxwcmVsb2FkOjAscHJvZmls
ZTowLHJhZGlvR3JvdXA6MCxyZWFkT25seTppLHJlZmVycmVyUG9saWN5OjAscmVsOjAscmVxdWly
ZWQ6aSxyZXZlcnNlZDppLHJvbGU6MCxyb3dzOnMscm93U3BhbjphLHNhbmRib3g6MCxzY29wZTow
LHNjb3BlZDppLHNjcm9sbGluZzowLHNlYW1sZXNzOmksc2VsZWN0ZWQ6b3xpLHNoYXBlOjAsc2l6
ZTpzLHNpemVzOjAsc3BhbjpzLHNwZWxsQ2hlY2s6MCxzcmM6MCxzcmNEb2M6MCxzcmNMYW5nOjAs
c3JjU2V0OjAsc3RhcnQ6YSxzdGVwOjAsc3R5bGU6MCxzdW1tYXJ5OjAsdGFiSW5kZXg6MCx0YXJn
ZXQ6MCx0aXRsZTowLHR5cGU6MCx1c2VNYXA6MCx2YWx1ZTowLHdpZHRoOjAsd21vZGU6MCx3cmFw
OjAsYWJvdXQ6MCxkYXRhdHlwZTowLGlubGlzdDowLHByZWZpeDowLHByb3BlcnR5OjAscmVzb3Vy
Y2U6MCx0eXBlb2Y6MCx2b2NhYjowLGF1dG9DYXBpdGFsaXplOjAsYXV0b0NvcnJlY3Q6MCxhdXRv
U2F2ZTowLGNvbG9yOjAsaXRlbVByb3A6MCxpdGVtU2NvcGU6aSxpdGVtVHlwZTowLGl0ZW1JRDow
LGl0ZW1SZWY6MCxyZXN1bHRzOjAsc2VjdXJpdHk6MCx1bnNlbGVjdGFibGU6MH0sRE9NQXR0cmli
dXRlTmFtZXM6e2FjY2VwdENoYXJzZXQ6ImFjY2VwdC1jaGFyc2V0IixjbGFzc05hbWU6ImNsYXNz
IixodG1sRm9yOiJmb3IiLGh0dHBFcXVpdjoiaHR0cC1lcXVpdiJ9LERPTVByb3BlcnR5TmFtZXM6
e30sRE9NTXV0YXRpb25NZXRob2RzOnt2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKG51bGw9PXQpcmV0
dXJuIGUucmVtb3ZlQXR0cmlidXRlKCJ2YWx1ZSIpOyJudW1iZXIiIT09ZS50eXBlfHwhMT09PWUu
aGFzQXR0cmlidXRlKCJ2YWx1ZSIpP2Uuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIrdCk6ZS52YWxp
ZGl0eSYmIWUudmFsaWRpdHkuYmFkSW5wdXQmJmUub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50
IT09ZSYmZS5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIit0KX19fTt0LmV4cG9ydHM9bH0sezExOjEx
fV0sMjI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD17
Ij0iOiI9MCIsIjoiOiI9MiJ9O3JldHVybiIkIisoIiIrZSkucmVwbGFjZSgvWz06XS9nLGZ1bmN0
aW9uKGUpe3JldHVybiB0W2VdfSl9ZnVuY3Rpb24gbyhlKXt2YXIgdD17Ij0wIjoiPSIsIj0yIjoi
OiJ9O3JldHVybigiIisoIi4iPT09ZVswXSYmIiQiPT09ZVsxXT9lLnN1YnN0cmluZygyKTplLnN1
YnN0cmluZygxKSkpLnJlcGxhY2UoLyg9MHw9MikvZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0p
fXZhciBpPXtlc2NhcGU6cix1bmVzY2FwZTpvfTt0LmV4cG9ydHM9aX0se31dLDIzOltmdW5jdGlv
bihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7bnVsbCE9ZS5jaGVja2VkTGluayYm
bnVsbCE9ZS52YWx1ZUxpbmsmJnMoIjg3Iil9ZnVuY3Rpb24gbyhlKXtyKGUpLChudWxsIT1lLnZh
bHVlfHxudWxsIT1lLm9uQ2hhbmdlKSYmcygiODgiKX1mdW5jdGlvbiBpKGUpe3IoZSksKG51bGwh
PWUuY2hlY2tlZHx8bnVsbCE9ZS5vbkNoYW5nZSkmJnMoIjg5Iil9ZnVuY3Rpb24gYShlKXtpZihl
KXt2YXIgdD1lLmdldE5hbWUoKTtpZih0KXJldHVybiIgQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qg
b2YgYCIrdCsiYC4ifXJldHVybiIifXZhciBzPWUoMTEwKSx1PWUoNjIpLGw9ZSgxNDIpLGM9ZSgx
MTcpLHA9bChjLmlzVmFsaWRFbGVtZW50KSxkPShlKDEzNCksZSgxMzkpLHtidXR0b246ITAsY2hl
Y2tib3g6ITAsaW1hZ2U6ITAsaGlkZGVuOiEwLHJhZGlvOiEwLHJlc2V0OiEwLHN1Ym1pdDohMH0p
LGY9e3ZhbHVlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hZVt0XXx8ZFtlLnR5cGVdfHxlLm9uQ2hh
bmdlfHxlLnJlYWRPbmx5fHxlLmRpc2FibGVkP251bGw6bmV3IEVycm9yKCJZb3UgcHJvdmlkZWQg
YSBgdmFsdWVgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4gYG9uQ2hhbmdlYCBoYW5k
bGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxkLiBJZiB0aGUgZmllbGQgc2hv
dWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0VmFsdWVgLiBPdGhlcndpc2UsIHNldCBlaXRoZXIg
YG9uQ2hhbmdlYCBvciBgcmVhZE9ubHlgLiIpfSxjaGVja2VkOmZ1bmN0aW9uKGUsdCxuKXtyZXR1
cm4hZVt0XXx8ZS5vbkNoYW5nZXx8ZS5yZWFkT25seXx8ZS5kaXNhYmxlZD9udWxsOm5ldyBFcnJv
cigiWW91IHByb3ZpZGVkIGEgYGNoZWNrZWRgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQg
YW4gYG9uQ2hhbmdlYCBoYW5kbGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxk
LiBJZiB0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0Q2hlY2tlZGAuIE90
aGVyd2lzZSwgc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGByZWFkT25seWAuIil9LG9uQ2hhbmdl
OnAuZnVuY30saD17fSxtPXtjaGVja1Byb3BUeXBlczpmdW5jdGlvbihlLHQsbil7Zm9yKHZhciBy
IGluIGYpe2lmKGYuaGFzT3duUHJvcGVydHkocikpdmFyIG89ZltyXSh0LHIsZSwicHJvcCIsbnVs
bCx1KTtvIGluc3RhbmNlb2YgRXJyb3ImJiEoby5tZXNzYWdlIGluIGgpJiYoaFtvLm1lc3NhZ2Vd
PSEwLGEobikpfX0sZ2V0VmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWVMaW5rPyhvKGUp
LGUudmFsdWVMaW5rLnZhbHVlKTplLnZhbHVlfSxnZXRDaGVja2VkOmZ1bmN0aW9uKGUpe3JldHVy
biBlLmNoZWNrZWRMaW5rPyhpKGUpLGUuY2hlY2tlZExpbmsudmFsdWUpOmUuY2hlY2tlZH0sZXhl
Y3V0ZU9uQ2hhbmdlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudmFsdWVMaW5rPyhvKGUpLGUudmFs
dWVMaW5rLnJlcXVlc3RDaGFuZ2UodC50YXJnZXQudmFsdWUpKTplLmNoZWNrZWRMaW5rPyhpKGUp
LGUuY2hlY2tlZExpbmsucmVxdWVzdENoYW5nZSh0LnRhcmdldC5jaGVja2VkKSk6ZS5vbkNoYW5n
ZT9lLm9uQ2hhbmdlLmNhbGwodm9pZCAwLHQpOnZvaWQgMH19O3QuZXhwb3J0cz1tfSx7MTEwOjEx
MCwxMTc6MTE3LDEzNDoxMzQsMTM5OjEzOSwxNDI6MTQyLDYyOjYyfV0sMjQ6W2Z1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgxMTApLG89KGUoMTM0KSxmdW5jdGlvbihlKXt2YXIg
dD10aGlzO2lmKHQuaW5zdGFuY2VQb29sLmxlbmd0aCl7dmFyIG49dC5pbnN0YW5jZVBvb2wucG9w
KCk7cmV0dXJuIHQuY2FsbChuLGUpLG59cmV0dXJuIG5ldyB0KGUpfSksaT1mdW5jdGlvbihlLHQp
e3ZhciBuPXRoaXM7aWYobi5pbnN0YW5jZVBvb2wubGVuZ3RoKXt2YXIgcj1uLmluc3RhbmNlUG9v
bC5wb3AoKTtyZXR1cm4gbi5jYWxsKHIsZSx0KSxyfXJldHVybiBuZXcgbihlLHQpfSxhPWZ1bmN0
aW9uKGUsdCxuKXt2YXIgcj10aGlzO2lmKHIuaW5zdGFuY2VQb29sLmxlbmd0aCl7dmFyIG89ci5p
bnN0YW5jZVBvb2wucG9wKCk7cmV0dXJuIHIuY2FsbChvLGUsdCxuKSxvfXJldHVybiBuZXcgcihl
LHQsbil9LHM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89dGhpcztpZihvLmluc3RhbmNlUG9vbC5s
ZW5ndGgpe3ZhciBpPW8uaW5zdGFuY2VQb29sLnBvcCgpO3JldHVybiBvLmNhbGwoaSxlLHQsbixy
KSxpfXJldHVybiBuZXcgbyhlLHQsbixyKX0sdT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2UgaW5z
dGFuY2VvZiB0fHxyKCIyNSIpLGUuZGVzdHJ1Y3RvcigpLHQuaW5zdGFuY2VQb29sLmxlbmd0aDx0
LnBvb2xTaXplJiZ0Lmluc3RhbmNlUG9vbC5wdXNoKGUpfSxsPW8sYz1mdW5jdGlvbihlLHQpe3Zh
ciBuPWU7cmV0dXJuIG4uaW5zdGFuY2VQb29sPVtdLG4uZ2V0UG9vbGVkPXR8fGwsbi5wb29sU2l6
ZXx8KG4ucG9vbFNpemU9MTApLG4ucmVsZWFzZT11LG59LHA9e2FkZFBvb2xpbmdUbzpjLG9uZUFy
Z3VtZW50UG9vbGVyOm8sdHdvQXJndW1lbnRQb29sZXI6aSx0aHJlZUFyZ3VtZW50UG9vbGVyOmEs
Zm91ckFyZ3VtZW50UG9vbGVyOnN9O3QuZXhwb3J0cz1wfSx7MTEwOjExMCwxMzQ6MTM0fV0sMjU6
W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gT2JqZWN0
LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbSl8fChlW21dPWYrKyxwW2VbbV1dPXt9
KSxwW2VbbV1dfXZhciBvLGk9ZSgxNDApLGE9ZSgxNykscz1lKDUwKSx1PWUoOTApLGw9ZSgxMDUp
LGM9ZSgxMDcpLHA9e30sZD0hMSxmPTAsaD17dG9wQWJvcnQ6ImFib3J0Iix0b3BBbmltYXRpb25F
bmQ6bCgiYW5pbWF0aW9uZW5kIil8fCJhbmltYXRpb25lbmQiLHRvcEFuaW1hdGlvbkl0ZXJhdGlv
bjpsKCJhbmltYXRpb25pdGVyYXRpb24iKXx8ImFuaW1hdGlvbml0ZXJhdGlvbiIsdG9wQW5pbWF0
aW9uU3RhcnQ6bCgiYW5pbWF0aW9uc3RhcnQiKXx8ImFuaW1hdGlvbnN0YXJ0Iix0b3BCbHVyOiJi
bHVyIix0b3BDYW5QbGF5OiJjYW5wbGF5Iix0b3BDYW5QbGF5VGhyb3VnaDoiY2FucGxheXRocm91
Z2giLHRvcENoYW5nZToiY2hhbmdlIix0b3BDbGljazoiY2xpY2siLHRvcENvbXBvc2l0aW9uRW5k
OiJjb21wb3NpdGlvbmVuZCIsdG9wQ29tcG9zaXRpb25TdGFydDoiY29tcG9zaXRpb25zdGFydCIs
dG9wQ29tcG9zaXRpb25VcGRhdGU6ImNvbXBvc2l0aW9udXBkYXRlIix0b3BDb250ZXh0TWVudToi
Y29udGV4dG1lbnUiLHRvcENvcHk6ImNvcHkiLHRvcEN1dDoiY3V0Iix0b3BEb3VibGVDbGljazoi
ZGJsY2xpY2siLHRvcERyYWc6ImRyYWciLHRvcERyYWdFbmQ6ImRyYWdlbmQiLHRvcERyYWdFbnRl
cjoiZHJhZ2VudGVyIix0b3BEcmFnRXhpdDoiZHJhZ2V4aXQiLHRvcERyYWdMZWF2ZToiZHJhZ2xl
YXZlIix0b3BEcmFnT3ZlcjoiZHJhZ292ZXIiLHRvcERyYWdTdGFydDoiZHJhZ3N0YXJ0Iix0b3BE
cm9wOiJkcm9wIix0b3BEdXJhdGlvbkNoYW5nZToiZHVyYXRpb25jaGFuZ2UiLHRvcEVtcHRpZWQ6
ImVtcHRpZWQiLHRvcEVuY3J5cHRlZDoiZW5jcnlwdGVkIix0b3BFbmRlZDoiZW5kZWQiLHRvcEVy
cm9yOiJlcnJvciIsCit0b3BGb2N1czoiZm9jdXMiLHRvcElucHV0OiJpbnB1dCIsdG9wS2V5RG93
bjoia2V5ZG93biIsdG9wS2V5UHJlc3M6ImtleXByZXNzIix0b3BLZXlVcDoia2V5dXAiLHRvcExv
YWRlZERhdGE6ImxvYWRlZGRhdGEiLHRvcExvYWRlZE1ldGFkYXRhOiJsb2FkZWRtZXRhZGF0YSIs
dG9wTG9hZFN0YXJ0OiJsb2Fkc3RhcnQiLHRvcE1vdXNlRG93bjoibW91c2Vkb3duIix0b3BNb3Vz
ZU1vdmU6Im1vdXNlbW92ZSIsdG9wTW91c2VPdXQ6Im1vdXNlb3V0Iix0b3BNb3VzZU92ZXI6Im1v
dXNlb3ZlciIsdG9wTW91c2VVcDoibW91c2V1cCIsdG9wUGFzdGU6InBhc3RlIix0b3BQYXVzZToi
cGF1c2UiLHRvcFBsYXk6InBsYXkiLHRvcFBsYXlpbmc6InBsYXlpbmciLHRvcFByb2dyZXNzOiJw
cm9ncmVzcyIsdG9wUmF0ZUNoYW5nZToicmF0ZWNoYW5nZSIsdG9wU2Nyb2xsOiJzY3JvbGwiLHRv
cFNlZWtlZDoic2Vla2VkIix0b3BTZWVraW5nOiJzZWVraW5nIix0b3BTZWxlY3Rpb25DaGFuZ2U6
InNlbGVjdGlvbmNoYW5nZSIsdG9wU3RhbGxlZDoic3RhbGxlZCIsdG9wU3VzcGVuZDoic3VzcGVu
ZCIsdG9wVGV4dElucHV0OiJ0ZXh0SW5wdXQiLHRvcFRpbWVVcGRhdGU6InRpbWV1cGRhdGUiLHRv
cFRvdWNoQ2FuY2VsOiJ0b3VjaGNhbmNlbCIsdG9wVG91Y2hFbmQ6InRvdWNoZW5kIix0b3BUb3Vj
aE1vdmU6InRvdWNobW92ZSIsdG9wVG91Y2hTdGFydDoidG91Y2hzdGFydCIsdG9wVHJhbnNpdGlv
bkVuZDpsKCJ0cmFuc2l0aW9uZW5kIil8fCJ0cmFuc2l0aW9uZW5kIix0b3BWb2x1bWVDaGFuZ2U6
InZvbHVtZWNoYW5nZSIsdG9wV2FpdGluZzoid2FpdGluZyIsdG9wV2hlZWw6IndoZWVsIn0sbT0i
X3JlYWN0TGlzdGVuZXJzSUQiK1N0cmluZyhNYXRoLnJhbmRvbSgpKS5zbGljZSgyKSx2PWkoe30s
cyx7UmVhY3RFdmVudExpc3RlbmVyOm51bGwsaW5qZWN0aW9uOntpbmplY3RSZWFjdEV2ZW50TGlz
dGVuZXI6ZnVuY3Rpb24oZSl7ZS5zZXRIYW5kbGVUb3BMZXZlbCh2LmhhbmRsZVRvcExldmVsKSx2
LlJlYWN0RXZlbnRMaXN0ZW5lcj1lfX0sc2V0RW5hYmxlZDpmdW5jdGlvbihlKXt2LlJlYWN0RXZl
bnRMaXN0ZW5lciYmdi5SZWFjdEV2ZW50TGlzdGVuZXIuc2V0RW5hYmxlZChlKX0saXNFbmFibGVk
OmZ1bmN0aW9uKCl7cmV0dXJuISghdi5SZWFjdEV2ZW50TGlzdGVuZXJ8fCF2LlJlYWN0RXZlbnRM
aXN0ZW5lci5pc0VuYWJsZWQoKSl9LGxpc3RlblRvOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXQs
bz1yKG4pLGk9YS5yZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzW2VdLHM9MDtzPGkubGVuZ3Ro
O3MrKyl7dmFyIHU9aVtzXTtvLmhhc093blByb3BlcnR5KHUpJiZvW3VdfHwoInRvcFdoZWVsIj09
PXU/Yygid2hlZWwiKT92LlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2ZW50KCJ0b3BX
aGVlbCIsIndoZWVsIixuKTpjKCJtb3VzZXdoZWVsIik/di5SZWFjdEV2ZW50TGlzdGVuZXIudHJh
cEJ1YmJsZWRFdmVudCgidG9wV2hlZWwiLCJtb3VzZXdoZWVsIixuKTp2LlJlYWN0RXZlbnRMaXN0
ZW5lci50cmFwQnViYmxlZEV2ZW50KCJ0b3BXaGVlbCIsIkRPTU1vdXNlU2Nyb2xsIixuKToidG9w
U2Nyb2xsIj09PXU/Yygic2Nyb2xsIiwhMCk/di5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcENhcHR1
cmVkRXZlbnQoInRvcFNjcm9sbCIsInNjcm9sbCIsbik6di5SZWFjdEV2ZW50TGlzdGVuZXIudHJh
cEJ1YmJsZWRFdmVudCgidG9wU2Nyb2xsIiwic2Nyb2xsIix2LlJlYWN0RXZlbnRMaXN0ZW5lci5X
SU5ET1dfSEFORExFKToidG9wRm9jdXMiPT09dXx8InRvcEJsdXIiPT09dT8oYygiZm9jdXMiLCEw
KT8odi5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcENhcHR1cmVkRXZlbnQoInRvcEZvY3VzIiwiZm9j
dXMiLG4pLHYuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBDYXB0dXJlZEV2ZW50KCJ0b3BCbHVyIiwi
Ymx1ciIsbikpOmMoImZvY3VzaW4iKSYmKHYuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVk
RXZlbnQoInRvcEZvY3VzIiwiZm9jdXNpbiIsbiksdi5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1
YmJsZWRFdmVudCgidG9wQmx1ciIsImZvY3Vzb3V0IixuKSksby50b3BCbHVyPSEwLG8udG9wRm9j
dXM9ITApOmguaGFzT3duUHJvcGVydHkodSkmJnYuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJi
bGVkRXZlbnQodSxoW3VdLG4pLG9bdV09ITApfX0sdHJhcEJ1YmJsZWRFdmVudDpmdW5jdGlvbihl
LHQsbil7cmV0dXJuIHYuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQoZSx0LG4p
fSx0cmFwQ2FwdHVyZWRFdmVudDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHYuUmVhY3RFdmVudExp
c3RlbmVyLnRyYXBDYXB0dXJlZEV2ZW50KGUsdCxuKX0sc3VwcG9ydHNFdmVudFBhZ2VYWTpmdW5j
dGlvbigpe2lmKCFkb2N1bWVudC5jcmVhdGVFdmVudClyZXR1cm4hMTt2YXIgZT1kb2N1bWVudC5j
cmVhdGVFdmVudCgiTW91c2VFdmVudCIpO3JldHVybiBudWxsIT1lJiYicGFnZVgiaW4gZX0sZW5z
dXJlU2Nyb2xsVmFsdWVNb25pdG9yaW5nOmZ1bmN0aW9uKCl7aWYodm9pZCAwPT09byYmKG89di5z
dXBwb3J0c0V2ZW50UGFnZVhZKCkpLCFvJiYhZCl7dmFyIGU9dS5yZWZyZXNoU2Nyb2xsVmFsdWVz
O3YuUmVhY3RFdmVudExpc3RlbmVyLm1vbml0b3JTY3JvbGxWYWx1ZShlKSxkPSEwfX19KTt0LmV4
cG9ydHM9dn0sezEwNToxMDUsMTA3OjEwNywxNDA6MTQwLDE3OjE3LDUwOjUwLDkwOjkwfV0sMjY6
W2Z1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24obil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0
LG4scil7dmFyIG89dm9pZCAwPT09ZVtuXTtudWxsIT10JiZvJiYoZVtuXT1pKHQsITApKX12YXIg
bz1lKDY0KSxpPWUoMTA2KSxhPShlKDIyKSxlKDExMykpLHM9ZSgxMTQpO2UoMTM5KTt2b2lkIDAh
PT1uJiZuLmVudjt2YXIgdT17aW5zdGFudGlhdGVDaGlsZHJlbjpmdW5jdGlvbihlLHQsbixvKXtp
ZihudWxsPT1lKXJldHVybiBudWxsO3ZhciBpPXt9O3JldHVybiBzKGUscixpKSxpfSx1cGRhdGVD
aGlsZHJlbjpmdW5jdGlvbihlLHQsbixyLHMsdSxsLGMscCl7aWYodHx8ZSl7dmFyIGQsZjtmb3Io
ZCBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkoZCkpe2Y9ZSYmZVtkXTt2YXIgaD1mJiZmLl9jdXJy
ZW50RWxlbWVudCxtPXRbZF07aWYobnVsbCE9ZiYmYShoLG0pKW8ucmVjZWl2ZUNvbXBvbmVudChm
LG0scyxjKSx0W2RdPWY7ZWxzZXtmJiYocltkXT1vLmdldEhvc3ROb2RlKGYpLG8udW5tb3VudENv
bXBvbmVudChmLCExKSk7dmFyIHY9aShtLCEwKTt0W2RdPXY7dmFyIGc9by5tb3VudENvbXBvbmVu
dCh2LHMsdSxsLGMscCk7bi5wdXNoKGcpfX1mb3IoZCBpbiBlKSFlLmhhc093blByb3BlcnR5KGQp
fHx0JiZ0Lmhhc093blByb3BlcnR5KGQpfHwoZj1lW2RdLHJbZF09by5nZXRIb3N0Tm9kZShmKSxv
LnVubW91bnRDb21wb25lbnQoZiwhMSkpfX0sdW5tb3VudENoaWxkcmVuOmZ1bmN0aW9uKGUsdCl7
Zm9yKHZhciBuIGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShuKSl7dmFyIHI9ZVtuXTtvLnVubW91
bnRDb21wb25lbnQocix0KX19fTt0LmV4cG9ydHM9dX0pLmNhbGwodGhpcyx2b2lkIDApfSx7MTA2
OjEwNiwxMTM6MTEzLDExNDoxMTQsMTM5OjEzOSwyMjoyMiw2NDo2NH1dLDI3OltmdW5jdGlvbihl
LHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoOCksbz1lKDM1KSxpPXtwcm9jZXNzQ2hpbGRyZW5V
cGRhdGVzOm8uZGFuZ2Vyb3VzbHlQcm9jZXNzQ2hpbGRyZW5VcGRhdGVzLHJlcGxhY2VOb2RlV2l0
aE1hcmt1cDpyLmRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwfTt0LmV4cG9ydHM9aX0s
ezM1OjM1LDg6OH1dLDI4OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMTEw
KSxvPShlKDEzNCksITEpLGk9e3JlcGxhY2VOb2RlV2l0aE1hcmt1cDpudWxsLHByb2Nlc3NDaGls
ZHJlblVwZGF0ZXM6bnVsbCxpbmplY3Rpb246e2luamVjdEVudmlyb25tZW50OmZ1bmN0aW9uKGUp
e28mJnIoIjEwNCIpLGkucmVwbGFjZU5vZGVXaXRoTWFya3VwPWUucmVwbGFjZU5vZGVXaXRoTWFy
a3VwLGkucHJvY2Vzc0NoaWxkcmVuVXBkYXRlcz1lLnByb2Nlc3NDaGlsZHJlblVwZGF0ZXMsbz0h
MH19fTt0LmV4cG9ydHM9aX0sezExMDoxMTAsMTM0OjEzNH1dLDI5OltmdW5jdGlvbihlLHQsbil7
InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7fWZ1bmN0aW9uIG8oZSl7cmV0dXJuISghZS5wcm90
b3R5cGV8fCFlLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KX1mdW5jdGlvbiBpKGUpe3JldHVy
biEoIWUucHJvdG90eXBlfHwhZS5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQpfXZhciBh
PWUoMTEwKSxzPWUoMTQwKSx1PWUoMTE3KSxsPWUoMjgpLGM9ZSgxMTYpLHA9ZSg0OSksZD1lKDU2
KSxmPShlKDU3KSxlKDYwKSksaD1lKDY0KSxtPWUoMTI3KSx2PShlKDEzNCksZSgxMzgpKSxnPWUo
MTEzKSx5PShlKDEzOSkse0ltcHVyZUNsYXNzOjAsUHVyZUNsYXNzOjEsU3RhdGVsZXNzRnVuY3Rp
b25hbDoyfSk7ci5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9ZC5nZXQodGhpcyku
X2N1cnJlbnRFbGVtZW50LnR5cGUsdD1lKHRoaXMucHJvcHMsdGhpcy5jb250ZXh0LHRoaXMudXBk
YXRlcik7cmV0dXJuIHR9O3ZhciBfPTEsQz17Y29uc3RydWN0OmZ1bmN0aW9uKGUpe3RoaXMuX2N1
cnJlbnRFbGVtZW50PWUsdGhpcy5fcm9vdE5vZGVJRD0wLHRoaXMuX2NvbXBvc2l0ZVR5cGU9bnVs
bCx0aGlzLl9pbnN0YW5jZT1udWxsLHRoaXMuX2hvc3RQYXJlbnQ9bnVsbCx0aGlzLl9ob3N0Q29u
dGFpbmVySW5mbz1udWxsLHRoaXMuX3VwZGF0ZUJhdGNoTnVtYmVyPW51bGwsdGhpcy5fcGVuZGlu
Z0VsZW1lbnQ9bnVsbCx0aGlzLl9wZW5kaW5nU3RhdGVRdWV1ZT1udWxsLHRoaXMuX3BlbmRpbmdS
ZXBsYWNlU3RhdGU9ITEsdGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlPSExLHRoaXMuX3JlbmRlcmVk
Tm9kZVR5cGU9bnVsbCx0aGlzLl9yZW5kZXJlZENvbXBvbmVudD1udWxsLHRoaXMuX2NvbnRleHQ9
bnVsbCx0aGlzLl9tb3VudE9yZGVyPTAsdGhpcy5fdG9wTGV2ZWxXcmFwcGVyPW51bGwsdGhpcy5f
cGVuZGluZ0NhbGxiYWNrcz1udWxsLHRoaXMuX2NhbGxlZENvbXBvbmVudFdpbGxVbm1vdW50PSEx
fSxtb3VudENvbXBvbmVudDpmdW5jdGlvbihlLHQsbixzKXt0aGlzLl9jb250ZXh0PXMsdGhpcy5f
bW91bnRPcmRlcj1fKyssdGhpcy5faG9zdFBhcmVudD10LHRoaXMuX2hvc3RDb250YWluZXJJbmZv
PW47dmFyIGwsYz10aGlzLl9jdXJyZW50RWxlbWVudC5wcm9wcyxwPXRoaXMuX3Byb2Nlc3NDb250
ZXh0KHMpLGY9dGhpcy5fY3VycmVudEVsZW1lbnQudHlwZSxoPWUuZ2V0VXBkYXRlUXVldWUoKSx2
PW8oZiksZz10aGlzLl9jb25zdHJ1Y3RDb21wb25lbnQodixjLHAsaCk7dnx8bnVsbCE9ZyYmbnVs
bCE9Zy5yZW5kZXI/aShmKT90aGlzLl9jb21wb3NpdGVUeXBlPXkuUHVyZUNsYXNzOnRoaXMuX2Nv
bXBvc2l0ZVR5cGU9eS5JbXB1cmVDbGFzczoobD1nLG51bGw9PT1nfHwhMT09PWd8fHUuaXNWYWxp
ZEVsZW1lbnQoZyl8fGEoIjEwNSIsZi5kaXNwbGF5TmFtZXx8Zi5uYW1lfHwiQ29tcG9uZW50Iiks
Zz1uZXcgcihmKSx0aGlzLl9jb21wb3NpdGVUeXBlPXkuU3RhdGVsZXNzRnVuY3Rpb25hbCksZy5w
cm9wcz1jLGcuY29udGV4dD1wLGcucmVmcz1tLGcudXBkYXRlcj1oLHRoaXMuX2luc3RhbmNlPWcs
ZC5zZXQoZyx0aGlzKTt2YXIgQz1nLnN0YXRlO3ZvaWQgMD09PUMmJihnLnN0YXRlPUM9bnVsbCks
KCJvYmplY3QiIT10eXBlb2YgQ3x8QXJyYXkuaXNBcnJheShDKSkmJmEoIjEwNiIsdGhpcy5nZXRO
YW1lKCl8fCJSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCIpLHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVl
PW51bGwsdGhpcy5fcGVuZGluZ1JlcGxhY2VTdGF0ZT0hMSx0aGlzLl9wZW5kaW5nRm9yY2VVcGRh
dGU9ITE7dmFyIGI7cmV0dXJuIGI9Zy51bnN0YWJsZV9oYW5kbGVFcnJvcj90aGlzLnBlcmZvcm1J
bml0aWFsTW91bnRXaXRoRXJyb3JIYW5kbGluZyhsLHQsbixlLHMpOnRoaXMucGVyZm9ybUluaXRp
YWxNb3VudChsLHQsbixlLHMpLGcuY29tcG9uZW50RGlkTW91bnQmJmUuZ2V0UmVhY3RNb3VudFJl
YWR5KCkuZW5xdWV1ZShnLmNvbXBvbmVudERpZE1vdW50LGcpLGJ9LF9jb25zdHJ1Y3RDb21wb25l
bnQ6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMuX2NvbnN0cnVjdENvbXBvbmVudFdpdGhv
dXRPd25lcihlLHQsbixyKX0sX2NvbnN0cnVjdENvbXBvbmVudFdpdGhvdXRPd25lcjpmdW5jdGlv
bihlLHQsbixyKXt2YXIgbz10aGlzLl9jdXJyZW50RWxlbWVudC50eXBlO3JldHVybiBlP25ldyBv
KHQsbixyKTpvKHQsbixyKX0scGVyZm9ybUluaXRpYWxNb3VudFdpdGhFcnJvckhhbmRsaW5nOmZ1
bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGksYT1yLmNoZWNrcG9pbnQoKTt0cnl7aT10aGlzLnBlcmZv
cm1Jbml0aWFsTW91bnQoZSx0LG4scixvKX1jYXRjaChzKXtyLnJvbGxiYWNrKGEpLHRoaXMuX2lu
c3RhbmNlLnVuc3RhYmxlX2hhbmRsZUVycm9yKHMpLHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlJiYo
dGhpcy5faW5zdGFuY2Uuc3RhdGU9dGhpcy5fcHJvY2Vzc1BlbmRpbmdTdGF0ZSh0aGlzLl9pbnN0
YW5jZS5wcm9wcyx0aGlzLl9pbnN0YW5jZS5jb250ZXh0KSksYT1yLmNoZWNrcG9pbnQoKSx0aGlz
Ll9yZW5kZXJlZENvbXBvbmVudC51bm1vdW50Q29tcG9uZW50KCEwKSxyLnJvbGxiYWNrKGEpLGk9
dGhpcy5wZXJmb3JtSW5pdGlhbE1vdW50KGUsdCxuLHIsbyl9cmV0dXJuIGl9LHBlcmZvcm1Jbml0
aWFsTW91bnQ6ZnVuY3Rpb24oZSx0LG4scixvKXt2YXIgaT10aGlzLl9pbnN0YW5jZTtpLmNvbXBv
bmVudFdpbGxNb3VudCYmKGkuY29tcG9uZW50V2lsbE1vdW50KCksdGhpcy5fcGVuZGluZ1N0YXRl
UXVldWUmJihpLnN0YXRlPXRoaXMuX3Byb2Nlc3NQZW5kaW5nU3RhdGUoaS5wcm9wcyxpLmNvbnRl
eHQpKSksdm9pZCAwPT09ZSYmKGU9dGhpcy5fcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50KCkpO3Zh
ciBhPWYuZ2V0VHlwZShlKTt0aGlzLl9yZW5kZXJlZE5vZGVUeXBlPWE7dmFyIHM9dGhpcy5faW5z
dGFudGlhdGVSZWFjdENvbXBvbmVudChlLGEhPT1mLkVNUFRZKTtyZXR1cm4gdGhpcy5fcmVuZGVy
ZWRDb21wb25lbnQ9cyxoLm1vdW50Q29tcG9uZW50KHMscix0LG4sdGhpcy5fcHJvY2Vzc0NoaWxk
Q29udGV4dChvKSwwKX0sZ2V0SG9zdE5vZGU6ZnVuY3Rpb24oKXtyZXR1cm4gaC5nZXRIb3N0Tm9k
ZSh0aGlzLl9yZW5kZXJlZENvbXBvbmVudCl9LHVubW91bnRDb21wb25lbnQ6ZnVuY3Rpb24oZSl7
aWYodGhpcy5fcmVuZGVyZWRDb21wb25lbnQpe3ZhciB0PXRoaXMuX2luc3RhbmNlO2lmKHQuY29t
cG9uZW50V2lsbFVubW91bnQmJiF0Ll9jYWxsZWRDb21wb25lbnRXaWxsVW5tb3VudClpZih0Ll9j
YWxsZWRDb21wb25lbnRXaWxsVW5tb3VudD0hMCxlKXt2YXIgbj10aGlzLmdldE5hbWUoKSsiLmNv
bXBvbmVudFdpbGxVbm1vdW50KCkiO3AuaW52b2tlR3VhcmRlZENhbGxiYWNrKG4sdC5jb21wb25l
bnRXaWxsVW5tb3VudC5iaW5kKHQpKX1lbHNlIHQuY29tcG9uZW50V2lsbFVubW91bnQoKTt0aGlz
Ll9yZW5kZXJlZENvbXBvbmVudCYmKGgudW5tb3VudENvbXBvbmVudCh0aGlzLl9yZW5kZXJlZENv
bXBvbmVudCxlKSx0aGlzLl9yZW5kZXJlZE5vZGVUeXBlPW51bGwsdGhpcy5fcmVuZGVyZWRDb21w
b25lbnQ9bnVsbCx0aGlzLl9pbnN0YW5jZT1udWxsKSx0aGlzLl9wZW5kaW5nU3RhdGVRdWV1ZT1u
dWxsLHRoaXMuX3BlbmRpbmdSZXBsYWNlU3RhdGU9ITEsdGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRl
PSExLHRoaXMuX3BlbmRpbmdDYWxsYmFja3M9bnVsbCx0aGlzLl9wZW5kaW5nRWxlbWVudD1udWxs
LHRoaXMuX2NvbnRleHQ9bnVsbCx0aGlzLl9yb290Tm9kZUlEPTAsdGhpcy5fdG9wTGV2ZWxXcmFw
cGVyPW51bGwsZC5yZW1vdmUodCl9fSxfbWFza0NvbnRleHQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhp
cy5fY3VycmVudEVsZW1lbnQudHlwZSxuPXQuY29udGV4dFR5cGVzO2lmKCFuKXJldHVybiBtO3Zh
ciByPXt9O2Zvcih2YXIgbyBpbiBuKXJbb109ZVtvXTtyZXR1cm4gcn0sX3Byb2Nlc3NDb250ZXh0
OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXNrQ29udGV4dChlKX0sX3Byb2Nlc3NDaGlsZENv
bnRleHQ6ZnVuY3Rpb24oZSl7dmFyIHQsbj10aGlzLl9jdXJyZW50RWxlbWVudC50eXBlLHI9dGhp
cy5faW5zdGFuY2U7aWYoci5nZXRDaGlsZENvbnRleHQmJih0PXIuZ2V0Q2hpbGRDb250ZXh0KCkp
LHQpeyJvYmplY3QiIT10eXBlb2Ygbi5jaGlsZENvbnRleHRUeXBlcyYmYSgiMTA3Iix0aGlzLmdl
dE5hbWUoKXx8IlJlYWN0Q29tcG9zaXRlQ29tcG9uZW50Iik7Zm9yKHZhciBvIGluIHQpbyBpbiBu
LmNoaWxkQ29udGV4dFR5cGVzfHxhKCIxMDgiLHRoaXMuZ2V0TmFtZSgpfHwiUmVhY3RDb21wb3Np
dGVDb21wb25lbnQiLG8pO3JldHVybiBzKHt9LGUsdCl9cmV0dXJuIGV9LF9jaGVja0NvbnRleHRU
eXBlczpmdW5jdGlvbihlLHQsbil7fSxyZWNlaXZlQ29tcG9uZW50OmZ1bmN0aW9uKGUsdCxuKXt2
YXIgcj10aGlzLl9jdXJyZW50RWxlbWVudCxvPXRoaXMuX2NvbnRleHQ7dGhpcy5fcGVuZGluZ0Vs
ZW1lbnQ9bnVsbCx0aGlzLnVwZGF0ZUNvbXBvbmVudCh0LHIsZSxvLG4pfSxwZXJmb3JtVXBkYXRl
SWZOZWNlc3Nhcnk6ZnVuY3Rpb24oZSl7bnVsbCE9dGhpcy5fcGVuZGluZ0VsZW1lbnQ/aC5yZWNl
aXZlQ29tcG9uZW50KHRoaXMsdGhpcy5fcGVuZGluZ0VsZW1lbnQsZSx0aGlzLl9jb250ZXh0KTpu
dWxsIT09dGhpcy5fcGVuZGluZ1N0YXRlUXVldWV8fHRoaXMuX3BlbmRpbmdGb3JjZVVwZGF0ZT90
aGlzLnVwZGF0ZUNvbXBvbmVudChlLHRoaXMuX2N1cnJlbnRFbGVtZW50LHRoaXMuX2N1cnJlbnRF
bGVtZW50LHRoaXMuX2NvbnRleHQsdGhpcy5fY29udGV4dCk6dGhpcy5fdXBkYXRlQmF0Y2hOdW1i
ZXI9bnVsbH0sdXBkYXRlQ29tcG9uZW50OmZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGk9dGhpcy5f
aW5zdGFuY2U7bnVsbD09aSYmYSgiMTM2Iix0aGlzLmdldE5hbWUoKXx8IlJlYWN0Q29tcG9zaXRl
Q29tcG9uZW50Iik7dmFyIHMsdT0hMTt0aGlzLl9jb250ZXh0PT09bz9zPWkuY29udGV4dDoocz10
aGlzLl9wcm9jZXNzQ29udGV4dChvKSx1PSEwKTt2YXIgbD10LnByb3BzLGM9bi5wcm9wczt0IT09
biYmKHU9ITApLHUmJmkuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmaS5jb21wb25lbnRXaWxs
UmVjZWl2ZVByb3BzKGMscyk7dmFyIHA9dGhpcy5fcHJvY2Vzc1BlbmRpbmdTdGF0ZShjLHMpLGQ9
ITA7dGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlfHwoaS5zaG91bGRDb21wb25lbnRVcGRhdGU/ZD1p
LnNob3VsZENvbXBvbmVudFVwZGF0ZShjLHAscyk6dGhpcy5fY29tcG9zaXRlVHlwZT09PXkuUHVy
ZUNsYXNzJiYoZD0hdihsLGMpfHwhdihpLnN0YXRlLHApKSksdGhpcy5fdXBkYXRlQmF0Y2hOdW1i
ZXI9bnVsbCxkPyh0aGlzLl9wZW5kaW5nRm9yY2VVcGRhdGU9ITEsdGhpcy5fcGVyZm9ybUNvbXBv
bmVudFVwZGF0ZShuLGMscCxzLGUsbykpOih0aGlzLl9jdXJyZW50RWxlbWVudD1uLHRoaXMuX2Nv
bnRleHQ9byxpLnByb3BzPWMsaS5zdGF0ZT1wLGkuY29udGV4dD1zKX0sX3Byb2Nlc3NQZW5kaW5n
U3RhdGU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9pbnN0YW5jZSxyPXRoaXMuX3BlbmRpbmdT
dGF0ZVF1ZXVlLG89dGhpcy5fcGVuZGluZ1JlcGxhY2VTdGF0ZTtpZih0aGlzLl9wZW5kaW5nUmVw
bGFjZVN0YXRlPSExLHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlPW51bGwsIXIpcmV0dXJuIG4uc3Rh
dGU7aWYobyYmMT09PXIubGVuZ3RoKXJldHVybiByWzBdO2Zvcih2YXIgaT1zKHt9LG8/clswXTpu
LnN0YXRlKSxhPW8/MTowO2E8ci5sZW5ndGg7YSsrKXt2YXIgdT1yW2FdO3MoaSwiZnVuY3Rpb24i
PT10eXBlb2YgdT91LmNhbGwobixpLGUsdCk6dSl9cmV0dXJuIGl9LF9wZXJmb3JtQ29tcG9uZW50
VXBkYXRlOmZ1bmN0aW9uKGUsdCxuLHIsbyxpKXt2YXIgYSxzLHUsbD10aGlzLl9pbnN0YW5jZSxj
PUJvb2xlYW4obC5jb21wb25lbnREaWRVcGRhdGUpO2MmJihhPWwucHJvcHMscz1sLnN0YXRlLHU9
bC5jb250ZXh0KSxsLmNvbXBvbmVudFdpbGxVcGRhdGUmJmwuY29tcG9uZW50V2lsbFVwZGF0ZSh0
LG4sciksdGhpcy5fY3VycmVudEVsZW1lbnQ9ZSx0aGlzLl9jb250ZXh0PWksbC5wcm9wcz10LGwu
c3RhdGU9bixsLmNvbnRleHQ9cix0aGlzLl91cGRhdGVSZW5kZXJlZENvbXBvbmVudChvLGkpLGMm
Jm8uZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShsLmNvbXBvbmVudERpZFVwZGF0ZS5iaW5k
KGwsYSxzLHUpLGwpfSxfdXBkYXRlUmVuZGVyZWRDb21wb25lbnQ6ZnVuY3Rpb24oZSx0KXt2YXIg
bj10aGlzLl9yZW5kZXJlZENvbXBvbmVudCxyPW4uX2N1cnJlbnRFbGVtZW50LG89dGhpcy5fcmVu
ZGVyVmFsaWRhdGVkQ29tcG9uZW50KCk7aWYoZyhyLG8pKWgucmVjZWl2ZUNvbXBvbmVudChuLG8s
ZSx0aGlzLl9wcm9jZXNzQ2hpbGRDb250ZXh0KHQpKTtlbHNle3ZhciBpPWguZ2V0SG9zdE5vZGUo
bik7aC51bm1vdW50Q29tcG9uZW50KG4sITEpO3ZhciBhPWYuZ2V0VHlwZShvKTt0aGlzLl9yZW5k
ZXJlZE5vZGVUeXBlPWE7dmFyIHM9dGhpcy5faW5zdGFudGlhdGVSZWFjdENvbXBvbmVudChvLGEh
PT1mLkVNUFRZKTt0aGlzLl9yZW5kZXJlZENvbXBvbmVudD1zO3ZhciB1PWgubW91bnRDb21wb25l
bnQocyxlLHRoaXMuX2hvc3RQYXJlbnQsdGhpcy5faG9zdENvbnRhaW5lckluZm8sdGhpcy5fcHJv
Y2Vzc0NoaWxkQ29udGV4dCh0KSwwKTt0aGlzLl9yZXBsYWNlTm9kZVdpdGhNYXJrdXAoaSx1LG4p
fX0sX3JlcGxhY2VOb2RlV2l0aE1hcmt1cDpmdW5jdGlvbihlLHQsbil7bC5yZXBsYWNlTm9kZVdp
dGhNYXJrdXAoZSx0LG4pfSxfcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50V2l0aG91dE93bmVyT3JD
b250ZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2luc3RhbmNlLnJlbmRlcigpfSxfcmVuZGVy
VmFsaWRhdGVkQ29tcG9uZW50OmZ1bmN0aW9uKCl7dmFyIGU7aWYodGhpcy5fY29tcG9zaXRlVHlw
ZSE9PXkuU3RhdGVsZXNzRnVuY3Rpb25hbCl7Yy5jdXJyZW50PXRoaXM7dHJ5e2U9dGhpcy5fcmVu
ZGVyVmFsaWRhdGVkQ29tcG9uZW50V2l0aG91dE93bmVyT3JDb250ZXh0KCl9ZmluYWxseXtjLmN1
cnJlbnQ9bnVsbH19ZWxzZSBlPXRoaXMuX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudFdpdGhvdXRP
d25lck9yQ29udGV4dCgpO3JldHVybiBudWxsPT09ZXx8ITE9PT1lfHx1LmlzVmFsaWRFbGVtZW50
KGUpfHxhKCIxMDkiLHRoaXMuZ2V0TmFtZSgpfHwiUmVhY3RDb21wb3NpdGVDb21wb25lbnQiKSxl
fSxhdHRhY2hSZWY6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmdldFB1YmxpY0luc3RhbmNlKCk7
bnVsbD09biYmYSgiMTEwIik7dmFyIHI9dC5nZXRQdWJsaWNJbnN0YW5jZSgpOyhuLnJlZnM9PT1t
P24ucmVmcz17fTpuLnJlZnMpW2VdPXJ9LGRldGFjaFJlZjpmdW5jdGlvbihlKXtkZWxldGUgdGhp
cy5nZXRQdWJsaWNJbnN0YW5jZSgpLnJlZnNbZV19LGdldE5hbWU6ZnVuY3Rpb24oKXt2YXIgZT10
aGlzLl9jdXJyZW50RWxlbWVudC50eXBlLHQ9dGhpcy5faW5zdGFuY2UmJnRoaXMuX2luc3RhbmNl
LmNvbnN0cnVjdG9yO3JldHVybiBlLmRpc3BsYXlOYW1lfHx0JiZ0LmRpc3BsYXlOYW1lfHxlLm5h
bWV8fHQmJnQubmFtZXx8bnVsbH0sZ2V0UHVibGljSW5zdGFuY2U6ZnVuY3Rpb24oKXt2YXIgZT10
aGlzLl9pbnN0YW5jZTtyZXR1cm4gdGhpcy5fY29tcG9zaXRlVHlwZT09PXkuU3RhdGVsZXNzRnVu
Y3Rpb25hbD9udWxsOmV9LF9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50Om51bGx9O3QuZXhwb3J0
cz1DfSx7MTEwOjExMCwxMTM6MTEzLDExNjoxMTYsMTE3OjExNywxMjc6MTI3LDEzNDoxMzQsMTM4
OjEzOCwxMzk6MTM5LDE0MDoxNDAsMjg6MjgsNDk6NDksNTY6NTYsNTc6NTcsNjA6NjAsNjQ6NjR9
XSwzMDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKGUpe3Zh
ciB0PWUuX2N1cnJlbnRFbGVtZW50Ll9vd25lcnx8bnVsbDtpZih0KXt2YXIgbj10LmdldE5hbWUo
KTtpZihuKXJldHVybiIgVGhpcyBET00gbm9kZSB3YXMgcmVuZGVyZWQgYnkgYCIrbisiYC4ifX1y
ZXR1cm4iIn1mdW5jdGlvbiBvKGUsdCl7dCYmKFlbZS5fdGFnXSYmKG51bGwhPXQuY2hpbGRyZW58
fG51bGwhPXQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpJiZtKCIxMzciLGUuX3RhZyxlLl9jdXJy
ZW50RWxlbWVudC5fb3duZXI/IiBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiAiK2UuX2N1cnJl
bnRFbGVtZW50Ll9vd25lci5nZXROYW1lKCkrIi4iOiIiKSxudWxsIT10LmRhbmdlcm91c2x5U2V0
SW5uZXJIVE1MJiYobnVsbCE9dC5jaGlsZHJlbiYmbSgiNjAiKSwib2JqZWN0Ij09dHlwZW9mIHQu
ZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJkIgaW4gdC5kYW5nZXJvdXNseVNldElubmVySFRNTHx8
bSgiNjEiKSksbnVsbCE9dC5zdHlsZSYmIm9iamVjdCIhPXR5cGVvZiB0LnN0eWxlJiZtKCI2MiIs
cihlKSkpfWZ1bmN0aW9uIGkoZSx0LG4scil7aWYoIShyIGluc3RhbmNlb2YgUikpe3ZhciBvPWUu
X2hvc3RDb250YWluZXJJbmZvLGk9by5fbm9kZSYmby5fbm9kZS5ub2RlVHlwZT09PUgscz1pP28u
X25vZGU6by5fb3duZXJEb2N1bWVudDtGKHQscyksci5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1
ZXVlKGEse2luc3Q6ZSxyZWdpc3RyYXRpb25OYW1lOnQsbGlzdGVuZXI6bn0pfX1mdW5jdGlvbiBh
KCl7dmFyIGU9dGhpczt4LnB1dExpc3RlbmVyKGUuaW5zdCxlLnJlZ2lzdHJhdGlvbk5hbWUsZS5s
aXN0ZW5lcil9ZnVuY3Rpb24gcygpe3ZhciBlPXRoaXM7Uy5wb3N0TW91bnRXcmFwcGVyKGUpfWZ1
bmN0aW9uIHUoKXt2YXIgZT10aGlzO08ucG9zdE1vdW50V3JhcHBlcihlKX1mdW5jdGlvbiBsKCl7
dmFyIGU9dGhpcztOLnBvc3RNb3VudFdyYXBwZXIoZSl9ZnVuY3Rpb24gYygpe3ZhciBlPXRoaXM7
ZS5fcm9vdE5vZGVJRHx8bSgiNjMiKTt2YXIgdD1VKGUpO3N3aXRjaCh0fHxtKCI2NCIpLGUuX3Rh
Zyl7Y2FzZSJpZnJhbWUiOmNhc2Uib2JqZWN0IjplLl93cmFwcGVyU3RhdGUubGlzdGVuZXJzPVtr
LnRyYXBCdWJibGVkRXZlbnQoInRvcExvYWQiLCJsb2FkIix0KV07YnJlYWs7Y2FzZSJ2aWRlbyI6
Y2FzZSJhdWRpbyI6ZS5fd3JhcHBlclN0YXRlLmxpc3RlbmVycz1bXTtmb3IodmFyIG4gaW4gcSlx
Lmhhc093blByb3BlcnR5KG4pJiZlLl93cmFwcGVyU3RhdGUubGlzdGVuZXJzLnB1c2goay50cmFw
QnViYmxlZEV2ZW50KG4scVtuXSx0KSk7YnJlYWs7Y2FzZSJzb3VyY2UiOmUuX3dyYXBwZXJTdGF0
ZS5saXN0ZW5lcnM9W2sudHJhcEJ1YmJsZWRFdmVudCgidG9wRXJyb3IiLCJlcnJvciIsdCldO2Jy
ZWFrO2Nhc2UiaW1nIjplLl93cmFwcGVyU3RhdGUubGlzdGVuZXJzPVtrLnRyYXBCdWJibGVkRXZl
bnQoInRvcEVycm9yIiwiZXJyb3IiLHQpLGsudHJhcEJ1YmJsZWRFdmVudCgidG9wTG9hZCIsImxv
YWQiLHQpXTticmVhaztjYXNlImZvcm0iOmUuX3dyYXBwZXJTdGF0ZS5saXN0ZW5lcnM9W2sudHJh
cEJ1YmJsZWRFdmVudCgidG9wUmVzZXQiLCJyZXNldCIsdCksay50cmFwQnViYmxlZEV2ZW50KCJ0
b3BTdWJtaXQiLCJzdWJtaXQiLHQpXTticmVhaztjYXNlImlucHV0IjpjYXNlInNlbGVjdCI6Y2Fz
ZSJ0ZXh0YXJlYSI6ZS5fd3JhcHBlclN0YXRlLmxpc3RlbmVycz1bay50cmFwQnViYmxlZEV2ZW50
KCJ0b3BJbnZhbGlkIiwiaW52YWxpZCIsdCldfX1mdW5jdGlvbiBwKCl7TS5wb3N0VXBkYXRlV3Jh
cHBlcih0aGlzKX1mdW5jdGlvbiBkKGUpe0cuY2FsbChRLGUpfHwoWC50ZXN0KGUpfHxtKCI2NSIs
ZSksUVtlXT0hMCl9ZnVuY3Rpb24gZihlLHQpe3JldHVybiBlLmluZGV4T2YoIi0iKT49MHx8bnVs
bCE9dC5pc31mdW5jdGlvbiBoKGUpe3ZhciB0PWUudHlwZTtkKHQpLHRoaXMuX2N1cnJlbnRFbGVt
ZW50PWUsdGhpcy5fdGFnPXQudG9Mb3dlckNhc2UoKSx0aGlzLl9uYW1lc3BhY2VVUkk9bnVsbCx0
aGlzLl9yZW5kZXJlZENoaWxkcmVuPW51bGwsdGhpcy5fcHJldmlvdXNTdHlsZT1udWxsLHRoaXMu
X3ByZXZpb3VzU3R5bGVDb3B5PW51bGwsdGhpcy5faG9zdE5vZGU9bnVsbCx0aGlzLl9ob3N0UGFy
ZW50PW51bGwsdGhpcy5fcm9vdE5vZGVJRD0wLHRoaXMuX2RvbUlEPTAsdGhpcy5faG9zdENvbnRh
aW5lckluZm89bnVsbCx0aGlzLl93cmFwcGVyU3RhdGU9bnVsbCx0aGlzLl90b3BMZXZlbFdyYXBw
ZXI9bnVsbCx0aGlzLl9mbGFncz0wfXZhciBtPWUoMTEwKSx2PWUoMTQwKSxnPWUoMikseT1lKDUp
LF89ZSg5KSxDPWUoMTApLGI9ZSgxMSksRT1lKDEyKSx4PWUoMTYpLHc9ZSgxNyksaz1lKDI1KSxU
PWUoMzEpLFA9ZSgzMiksUz1lKDM2KSxOPWUoMzcpLE09ZSgzOCksTz1lKDQzKSxJPShlKDU3KSxl
KDU5KSksUj1lKDY4KSxBPShlKDEyNiksZSg5NSkpLEQ9KGUoMTM0KSxlKDEwNyksZSgxMzgpLGUo
MTE1KSxlKDEzOSksVCksTD14LmRlbGV0ZUxpc3RlbmVyLFU9UC5nZXROb2RlRnJvbUluc3RhbmNl
LEY9ay5saXN0ZW5UbyxqPXcucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXMsVj17c3RyaW5nOiEwLG51
bWJlcjohMH0sQj0iX19odG1sIixXPXtjaGlsZHJlbjpudWxsLGRhbmdlcm91c2x5U2V0SW5uZXJI
VE1MOm51bGwsc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nOm51bGx9LEg9MTEscT17dG9w
QWJvcnQ6ImFib3J0Iix0b3BDYW5QbGF5OiJjYW5wbGF5Iix0b3BDYW5QbGF5VGhyb3VnaDoiY2Fu
cGxheXRocm91Z2giLHRvcER1cmF0aW9uQ2hhbmdlOiJkdXJhdGlvbmNoYW5nZSIsdG9wRW1wdGll
ZDoiZW1wdGllZCIsdG9wRW5jcnlwdGVkOiJlbmNyeXB0ZWQiLHRvcEVuZGVkOiJlbmRlZCIsdG9w
RXJyb3I6ImVycm9yIix0b3BMb2FkZWREYXRhOiJsb2FkZWRkYXRhIix0b3BMb2FkZWRNZXRhZGF0
YToibG9hZGVkbWV0YWRhdGEiLHRvcExvYWRTdGFydDoibG9hZHN0YXJ0Iix0b3BQYXVzZToicGF1
c2UiLHRvcFBsYXk6InBsYXkiLHRvcFBsYXlpbmc6InBsYXlpbmciLHRvcFByb2dyZXNzOiJwcm9n
cmVzcyIsdG9wUmF0ZUNoYW5nZToicmF0ZWNoYW5nZSIsdG9wU2Vla2VkOiJzZWVrZWQiLHRvcFNl
ZWtpbmc6InNlZWtpbmciLHRvcFN0YWxsZWQ6InN0YWxsZWQiLHRvcFN1c3BlbmQ6InN1c3BlbmQi
LHRvcFRpbWVVcGRhdGU6InRpbWV1cGRhdGUiLHRvcFZvbHVtZUNoYW5nZToidm9sdW1lY2hhbmdl
Iix0b3BXYWl0aW5nOiJ3YWl0aW5nIn0sSz17YXJlYTohMCxiYXNlOiEwLGJyOiEwLGNvbDohMCxl
bWJlZDohMCxocjohMCxpbWc6ITAsaW5wdXQ6ITAsa2V5Z2VuOiEwLGxpbms6ITAsbWV0YTohMCxw
YXJhbTohMCxzb3VyY2U6ITAsdHJhY2s6ITAsd2JyOiEwfSx6PXtsaXN0aW5nOiEwLHByZTohMCx0
ZXh0YXJlYTohMH0sWT12KHttZW51aXRlbTohMH0sSyksWD0vXlthLXpBLVpdW2EtekEtWjpfXC5c
LVxkXSokLyxRPXt9LEc9e30uaGFzT3duUHJvcGVydHksJD0xO2guZGlzcGxheU5hbWU9IlJlYWN0
RE9NQ29tcG9uZW50IixoLk1peGluPXttb3VudENvbXBvbmVudDpmdW5jdGlvbihlLHQsbixyKXt0
aGlzLl9yb290Tm9kZUlEPSQrKyx0aGlzLl9kb21JRD1uLl9pZENvdW50ZXIrKyx0aGlzLl9ob3N0
UGFyZW50PXQsdGhpcy5faG9zdENvbnRhaW5lckluZm89bjt2YXIgaT10aGlzLl9jdXJyZW50RWxl
bWVudC5wcm9wcztzd2l0Y2godGhpcy5fdGFnKXtjYXNlImF1ZGlvIjpjYXNlImZvcm0iOmNhc2Ui
aWZyYW1lIjpjYXNlImltZyI6Y2FzZSJsaW5rIjpjYXNlIm9iamVjdCI6Y2FzZSJzb3VyY2UiOmNh
c2UidmlkZW8iOnRoaXMuX3dyYXBwZXJTdGF0ZT17bGlzdGVuZXJzOm51bGx9LGUuZ2V0UmVhY3RN
b3VudFJlYWR5KCkuZW5xdWV1ZShjLHRoaXMpO2JyZWFrO2Nhc2UiaW5wdXQiOlMubW91bnRXcmFw
cGVyKHRoaXMsaSx0KSxpPVMuZ2V0SG9zdFByb3BzKHRoaXMsaSksZS5nZXRSZWFjdE1vdW50UmVh
ZHkoKS5lbnF1ZXVlKGMsdGhpcyk7YnJlYWs7Y2FzZSJvcHRpb24iOk4ubW91bnRXcmFwcGVyKHRo
aXMsaSx0KSxpPU4uZ2V0SG9zdFByb3BzKHRoaXMsaSk7YnJlYWs7Y2FzZSJzZWxlY3QiOk0ubW91
bnRXcmFwcGVyKHRoaXMsaSx0KSxpPU0uZ2V0SG9zdFByb3BzKHRoaXMsaSksZS5nZXRSZWFjdE1v
dW50UmVhZHkoKS5lbnF1ZXVlKGMsdGhpcyk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6Ty5tb3VudFdy
YXBwZXIodGhpcyxpLHQpLGk9Ty5nZXRIb3N0UHJvcHModGhpcyxpKSxlLmdldFJlYWN0TW91bnRS
ZWFkeSgpLmVucXVldWUoYyx0aGlzKX1vKHRoaXMsaSk7dmFyIGEscDtudWxsIT10PyhhPXQuX25h
bWVzcGFjZVVSSSxwPXQuX3RhZyk6bi5fdGFnJiYoYT1uLl9uYW1lc3BhY2VVUkkscD1uLl90YWcp
LChudWxsPT1hfHxhPT09Qy5zdmcmJiJmb3JlaWdub2JqZWN0Ij09PXApJiYoYT1DLmh0bWwpLGE9
PT1DLmh0bWwmJigic3ZnIj09PXRoaXMuX3RhZz9hPUMuc3ZnOiJtYXRoIj09PXRoaXMuX3RhZyYm
KGE9Qy5tYXRobWwpKSx0aGlzLl9uYW1lc3BhY2VVUkk9YTt2YXIgZDtpZihlLnVzZUNyZWF0ZUVs
ZW1lbnQpe3ZhciBmLGg9bi5fb3duZXJEb2N1bWVudDtpZihhPT09Qy5odG1sKWlmKCJzY3JpcHQi
PT09dGhpcy5fdGFnKXt2YXIgbT1oLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHY9dGhpcy5fY3VycmVu
dEVsZW1lbnQudHlwZTttLmlubmVySFRNTD0iPCIrdisiPjwvIit2KyI+IixmPW0ucmVtb3ZlQ2hp
bGQobS5maXJzdENoaWxkKX1lbHNlIGY9aS5pcz9oLmNyZWF0ZUVsZW1lbnQodGhpcy5fY3VycmVu
dEVsZW1lbnQudHlwZSxpLmlzKTpoLmNyZWF0ZUVsZW1lbnQodGhpcy5fY3VycmVudEVsZW1lbnQu
dHlwZSk7ZWxzZSBmPWguY3JlYXRlRWxlbWVudE5TKGEsdGhpcy5fY3VycmVudEVsZW1lbnQudHlw
ZSk7UC5wcmVjYWNoZU5vZGUodGhpcyxmKSx0aGlzLl9mbGFnc3w9RC5oYXNDYWNoZWRDaGlsZE5v
ZGVzLHRoaXMuX2hvc3RQYXJlbnR8fEUuc2V0QXR0cmlidXRlRm9yUm9vdChmKSx0aGlzLl91cGRh
dGVET01Qcm9wZXJ0aWVzKG51bGwsaSxlKTt2YXIgeT1fKGYpO3RoaXMuX2NyZWF0ZUluaXRpYWxD
aGlsZHJlbihlLGkscix5KSxkPXl9ZWxzZXt2YXIgYj10aGlzLl9jcmVhdGVPcGVuVGFnTWFya3Vw
QW5kUHV0TGlzdGVuZXJzKGUsaSkseD10aGlzLl9jcmVhdGVDb250ZW50TWFya3VwKGUsaSxyKTtk
PSF4JiZLW3RoaXMuX3RhZ10/YisiLz4iOmIrIj4iK3grIjwvIit0aGlzLl9jdXJyZW50RWxlbWVu
dC50eXBlKyI+In1zd2l0Y2godGhpcy5fdGFnKXtjYXNlImlucHV0IjplLmdldFJlYWN0TW91bnRS
ZWFkeSgpLmVucXVldWUocyx0aGlzKSxpLmF1dG9Gb2N1cyYmZS5nZXRSZWFjdE1vdW50UmVhZHko
KS5lbnF1ZXVlKGcuZm9jdXNET01Db21wb25lbnQsdGhpcyk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6
ZS5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKHUsdGhpcyksaS5hdXRvRm9jdXMmJmUuZ2V0
UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShnLmZvY3VzRE9NQ29tcG9uZW50LHRoaXMpO2JyZWFr
O2Nhc2Uic2VsZWN0IjpjYXNlImJ1dHRvbiI6aS5hdXRvRm9jdXMmJmUuZ2V0UmVhY3RNb3VudFJl
YWR5KCkuZW5xdWV1ZShnLmZvY3VzRE9NQ29tcG9uZW50LHRoaXMpO2JyZWFrO2Nhc2Uib3B0aW9u
IjplLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUobCx0aGlzKX1yZXR1cm4gZH0sX2NyZWF0
ZU9wZW5UYWdNYXJrdXBBbmRQdXRMaXN0ZW5lcnM6ZnVuY3Rpb24oZSx0KXt2YXIgbj0iPCIrdGhp
cy5fY3VycmVudEVsZW1lbnQudHlwZTtmb3IodmFyIHIgaW4gdClpZih0Lmhhc093blByb3BlcnR5
KHIpKXt2YXIgbz10W3JdO2lmKG51bGwhPW8paWYoai5oYXNPd25Qcm9wZXJ0eShyKSlvJiZpKHRo
aXMscixvLGUpO2Vsc2V7InN0eWxlIj09PXImJihvJiYobz10aGlzLl9wcmV2aW91c1N0eWxlQ29w
eT12KHt9LHQuc3R5bGUpKSxvPXkuY3JlYXRlTWFya3VwRm9yU3R5bGVzKG8sdGhpcykpO3ZhciBh
PW51bGw7bnVsbCE9dGhpcy5fdGFnJiZmKHRoaXMuX3RhZyx0KT9XLmhhc093blByb3BlcnR5KHIp
fHwoYT1FLmNyZWF0ZU1hcmt1cEZvckN1c3RvbUF0dHJpYnV0ZShyLG8pKTphPUUuY3JlYXRlTWFy
a3VwRm9yUHJvcGVydHkocixvKSxhJiYobis9IiAiK2EpfX1yZXR1cm4gZS5yZW5kZXJUb1N0YXRp
Y01hcmt1cD9uOih0aGlzLl9ob3N0UGFyZW50fHwobis9IiAiK0UuY3JlYXRlTWFya3VwRm9yUm9v
dCgpKSxuKz0iICIrRS5jcmVhdGVNYXJrdXBGb3JJRCh0aGlzLl9kb21JRCkpfSxfY3JlYXRlQ29u
dGVudE1hcmt1cDpmdW5jdGlvbihlLHQsbil7dmFyIHI9IiIsbz10LmRhbmdlcm91c2x5U2V0SW5u
ZXJIVE1MO2lmKG51bGwhPW8pbnVsbCE9by5fX2h0bWwmJihyPW8uX19odG1sKTtlbHNle3ZhciBp
PVZbdHlwZW9mIHQuY2hpbGRyZW5dP3QuY2hpbGRyZW46bnVsbCxhPW51bGwhPWk/bnVsbDp0LmNo
aWxkcmVuO2lmKG51bGwhPWkpcj1BKGkpO2Vsc2UgaWYobnVsbCE9YSl7dmFyIHM9dGhpcy5tb3Vu
dENoaWxkcmVuKGEsZSxuKTtyPXMuam9pbigiIil9fXJldHVybiB6W3RoaXMuX3RhZ10mJiJcbiI9
PT1yLmNoYXJBdCgwKT8iXG4iK3I6cn0sX2NyZWF0ZUluaXRpYWxDaGlsZHJlbjpmdW5jdGlvbihl
LHQsbixyKXt2YXIgbz10LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MO2lmKG51bGwhPW8pbnVsbCE9
by5fX2h0bWwmJl8ucXVldWVIVE1MKHIsby5fX2h0bWwpO2Vsc2V7dmFyIGk9Vlt0eXBlb2YgdC5j
aGlsZHJlbl0/dC5jaGlsZHJlbjpudWxsLGE9bnVsbCE9aT9udWxsOnQuY2hpbGRyZW47aWYobnVs
bCE9aSkiIiE9PWkmJl8ucXVldWVUZXh0KHIsaSk7ZWxzZSBpZihudWxsIT1hKWZvcih2YXIgcz10
aGlzLm1vdW50Q2hpbGRyZW4oYSxlLG4pLHU9MDt1PHMubGVuZ3RoO3UrKylfLnF1ZXVlQ2hpbGQo
cixzW3VdKX19LHJlY2VpdmVDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuX2N1
cnJlbnRFbGVtZW50O3RoaXMuX2N1cnJlbnRFbGVtZW50PWUsdGhpcy51cGRhdGVDb21wb25lbnQo
dCxyLGUsbil9LHVwZGF0ZUNvbXBvbmVudDpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT10LnByb3Bz
LGE9dGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHM7c3dpdGNoKHRoaXMuX3RhZyl7Y2FzZSJpbnB1
dCI6aT1TLmdldEhvc3RQcm9wcyh0aGlzLGkpLGE9Uy5nZXRIb3N0UHJvcHModGhpcyxhKTticmVh
aztjYXNlIm9wdGlvbiI6aT1OLmdldEhvc3RQcm9wcyh0aGlzLGkpLGE9Ti5nZXRIb3N0UHJvcHMo
dGhpcyxhKTticmVhaztjYXNlInNlbGVjdCI6aT1NLmdldEhvc3RQcm9wcyh0aGlzLGkpLGE9TS5n
ZXRIb3N0UHJvcHModGhpcyxhKTticmVhaztjYXNlInRleHRhcmVhIjppPU8uZ2V0SG9zdFByb3Bz
KHRoaXMsaSksYT1PLmdldEhvc3RQcm9wcyh0aGlzLGEpfXN3aXRjaChvKHRoaXMsYSksdGhpcy5f
dXBkYXRlRE9NUHJvcGVydGllcyhpLGEsZSksdGhpcy5fdXBkYXRlRE9NQ2hpbGRyZW4oaSxhLGUs
ciksdGhpcy5fdGFnKXtjYXNlImlucHV0IjpTLnVwZGF0ZVdyYXBwZXIodGhpcyk7YnJlYWs7Y2Fz
ZSJ0ZXh0YXJlYSI6Ty51cGRhdGVXcmFwcGVyKHRoaXMpO2JyZWFrO2Nhc2Uic2VsZWN0IjplLmdl
dFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUocCx0aGlzKX19LF91cGRhdGVET01Qcm9wZXJ0aWVz
OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvLGE7Zm9yKHIgaW4gZSlpZighdC5oYXNPd25Qcm9wZXJ0
eShyKSYmZS5oYXNPd25Qcm9wZXJ0eShyKSYmbnVsbCE9ZVtyXSlpZigic3R5bGUiPT09cil7dmFy
IHM9dGhpcy5fcHJldmlvdXNTdHlsZUNvcHk7Zm9yKG8gaW4gcylzLmhhc093blByb3BlcnR5KG8p
JiYoYT1hfHx7fSxhW29dPSIiKTt0aGlzLl9wcmV2aW91c1N0eWxlQ29weT1udWxsfWVsc2Ugai5o
YXNPd25Qcm9wZXJ0eShyKT9lW3JdJiZMKHRoaXMscik6Zih0aGlzLl90YWcsZSk/Vy5oYXNPd25Q
cm9wZXJ0eShyKXx8RS5kZWxldGVWYWx1ZUZvckF0dHJpYnV0ZShVKHRoaXMpLHIpOihiLnByb3Bl
cnRpZXNbcl18fGIuaXNDdXN0b21BdHRyaWJ1dGUocikpJiZFLmRlbGV0ZVZhbHVlRm9yUHJvcGVy
dHkoVSh0aGlzKSxyKTtmb3IociBpbiB0KXt2YXIgdT10W3JdLGw9InN0eWxlIj09PXI/dGhpcy5f
cHJldmlvdXNTdHlsZUNvcHk6bnVsbCE9ZT9lW3JdOnZvaWQgMDtpZih0Lmhhc093blByb3BlcnR5
KHIpJiZ1IT09bCYmKG51bGwhPXV8fG51bGwhPWwpKWlmKCJzdHlsZSI9PT1yKWlmKHU/dT10aGlz
Ll9wcmV2aW91c1N0eWxlQ29weT12KHt9LHUpOnRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5PW51bGws
bCl7Zm9yKG8gaW4gbCkhbC5oYXNPd25Qcm9wZXJ0eShvKXx8dSYmdS5oYXNPd25Qcm9wZXJ0eShv
KXx8KGE9YXx8e30sYVtvXT0iIik7Zm9yKG8gaW4gdSl1Lmhhc093blByb3BlcnR5KG8pJiZsW29d
IT09dVtvXSYmKGE9YXx8e30sYVtvXT11W29dKX1lbHNlIGE9dTtlbHNlIGlmKGouaGFzT3duUHJv
cGVydHkocikpdT9pKHRoaXMscix1LG4pOmwmJkwodGhpcyxyKTtlbHNlIGlmKGYodGhpcy5fdGFn
LHQpKVcuaGFzT3duUHJvcGVydHkocil8fEUuc2V0VmFsdWVGb3JBdHRyaWJ1dGUoVSh0aGlzKSxy
LHUpO2Vsc2UgaWYoYi5wcm9wZXJ0aWVzW3JdfHxiLmlzQ3VzdG9tQXR0cmlidXRlKHIpKXt2YXIg
Yz1VKHRoaXMpO251bGwhPXU/RS5zZXRWYWx1ZUZvclByb3BlcnR5KGMscix1KTpFLmRlbGV0ZVZh
bHVlRm9yUHJvcGVydHkoYyxyKX19YSYmeS5zZXRWYWx1ZUZvclN0eWxlcyhVKHRoaXMpLGEsdGhp
cyl9LF91cGRhdGVET01DaGlsZHJlbjpmdW5jdGlvbihlLHQsbixyKXt2YXIgbz1WW3R5cGVvZiBl
LmNoaWxkcmVuXT9lLmNoaWxkcmVuOm51bGwsaT1WW3R5cGVvZiB0LmNoaWxkcmVuXT90LmNoaWxk
cmVuOm51bGwsYT1lLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MJiZlLmRhbmdlcm91c2x5U2V0SW5u
ZXJIVE1MLl9faHRtbCxzPXQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJnQuZGFuZ2Vyb3VzbHlT
ZXRJbm5lckhUTUwuX19odG1sLHU9bnVsbCE9bz9udWxsOmUuY2hpbGRyZW4sbD1udWxsIT1pP251
bGw6dC5jaGlsZHJlbixjPW51bGwhPW98fG51bGwhPWEscD1udWxsIT1pfHxudWxsIT1zO251bGwh
PXUmJm51bGw9PWw/dGhpcy51cGRhdGVDaGlsZHJlbihudWxsLG4scik6YyYmIXAmJnRoaXMudXBk
YXRlVGV4dENvbnRlbnQoIiIpLG51bGwhPWk/byE9PWkmJnRoaXMudXBkYXRlVGV4dENvbnRlbnQo
IiIraSk6bnVsbCE9cz9hIT09cyYmdGhpcy51cGRhdGVNYXJrdXAoIiIrcyk6bnVsbCE9bCYmdGhp
cy51cGRhdGVDaGlsZHJlbihsLG4scil9LGdldEhvc3ROb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIFUo
dGhpcyl9LHVubW91bnRDb21wb25lbnQ6ZnVuY3Rpb24oZSl7c3dpdGNoKHRoaXMuX3RhZyl7Y2Fz
ZSJhdWRpbyI6Y2FzZSJmb3JtIjpjYXNlImlmcmFtZSI6Y2FzZSJpbWciOmNhc2UibGluayI6Y2Fz
ZSJvYmplY3QiOmNhc2Uic291cmNlIjpjYXNlInZpZGVvIjp2YXIgdD10aGlzLl93cmFwcGVyU3Rh
dGUubGlzdGVuZXJzO2lmKHQpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXS5yZW1vdmUo
KTticmVhaztjYXNlImh0bWwiOmNhc2UiaGVhZCI6Y2FzZSJib2R5IjptKCI2NiIsdGhpcy5fdGFn
KX10aGlzLnVubW91bnRDaGlsZHJlbihlKSxQLnVuY2FjaGVOb2RlKHRoaXMpLHguZGVsZXRlQWxs
TGlzdGVuZXJzKHRoaXMpLHRoaXMuX3Jvb3ROb2RlSUQ9MCx0aGlzLl9kb21JRD0wLHRoaXMuX3dy
YXBwZXJTdGF0ZT1udWxsfSxnZXRQdWJsaWNJbnN0YW5jZTpmdW5jdGlvbigpe3JldHVybiBVKHRo
aXMpfX0sdihoLnByb3RvdHlwZSxoLk1peGluLEkuTWl4aW4pLHQuZXhwb3J0cz1ofSx7MTA6MTAs
MTA3OjEwNywxMToxMSwxMTA6MTEwLDExNToxMTUsMTI6MTIsMTI2OjEyNiwxMzQ6MTM0LDEzODox
MzgsMTM5OjEzOSwxNDA6MTQwLDE2OjE2LDE3OjE3LDI6MiwyNToyNSwzMTozMSwzMjozMiwzNjoz
NiwzNzozNywzODozOCw0Mzo0Myw1OjUsNTc6NTcsNTk6NTksNjg6NjgsOTo5LDk1Ojk1fV0sMzE6
W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9e2hhc0NhY2hlZENoaWxkTm9kZXM6
MX07dC5leHBvcnRzPXJ9LHt9XSwzMjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5j
dGlvbiByKGUsdCl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlJiZlLmdldEF0dHJpYnV0ZShoKT09PVN0
cmluZyh0KXx8OD09PWUubm9kZVR5cGUmJmUubm9kZVZhbHVlPT09IiByZWFjdC10ZXh0OiAiK3Qr
IiAifHw4PT09ZS5ub2RlVHlwZSYmZS5ub2RlVmFsdWU9PT0iIHJlYWN0LWVtcHR5OiAiK3QrIiAi
fWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciB0O3Q9ZS5fcmVuZGVyZWRDb21wb25lbnQ7KWU9dDtyZXR1
cm4gZX1mdW5jdGlvbiBpKGUsdCl7dmFyIG49byhlKTtuLl9ob3N0Tm9kZT10LHRbdl09bn1mdW5j
dGlvbiBhKGUpe3ZhciB0PWUuX2hvc3ROb2RlO3QmJihkZWxldGUgdFt2XSxlLl9ob3N0Tm9kZT1u
dWxsKX1mdW5jdGlvbiBzKGUsdCl7aWYoIShlLl9mbGFncyZtLmhhc0NhY2hlZENoaWxkTm9kZXMp
KXt2YXIgbj1lLl9yZW5kZXJlZENoaWxkcmVuLGE9dC5maXJzdENoaWxkO2U6Zm9yKHZhciBzIGlu
IG4paWYobi5oYXNPd25Qcm9wZXJ0eShzKSl7dmFyIHU9bltzXSxsPW8odSkuX2RvbUlEO2lmKDAh
PT1sKXtmb3IoO251bGwhPT1hO2E9YS5uZXh0U2libGluZylpZihyKGEsbCkpe2kodSxhKTtjb250
aW51ZSBlfXAoIjMyIixsKX19ZS5fZmxhZ3N8PW0uaGFzQ2FjaGVkQ2hpbGROb2Rlc319ZnVuY3Rp
b24gdShlKXtpZihlW3ZdKXJldHVybiBlW3ZdO2Zvcih2YXIgdD1bXTshZVt2XTspe2lmKHQucHVz
aChlKSwhZS5wYXJlbnROb2RlKXJldHVybiBudWxsO2U9ZS5wYXJlbnROb2RlfWZvcih2YXIgbixy
O2UmJihyPWVbdl0pO2U9dC5wb3AoKSluPXIsdC5sZW5ndGgmJnMocixlKTtyZXR1cm4gbn1mdW5j
dGlvbiBsKGUpe3ZhciB0PXUoZSk7cmV0dXJuIG51bGwhPXQmJnQuX2hvc3ROb2RlPT09ZT90Om51
bGx9ZnVuY3Rpb24gYyhlKXtpZih2b2lkIDA9PT1lLl9ob3N0Tm9kZSYmcCgiMzMiKSxlLl9ob3N0
Tm9kZSlyZXR1cm4gZS5faG9zdE5vZGU7Zm9yKHZhciB0PVtdOyFlLl9ob3N0Tm9kZTspdC5wdXNo
KGUpLGUuX2hvc3RQYXJlbnR8fHAoIjM0IiksZT1lLl9ob3N0UGFyZW50O2Zvcig7dC5sZW5ndGg7
ZT10LnBvcCgpKXMoZSxlLl9ob3N0Tm9kZSk7cmV0dXJuIGUuX2hvc3ROb2RlfXZhciBwPWUoMTEw
KSxkPWUoMTEpLGY9ZSgzMSksaD0oZSgxMzQpLGQuSURfQVRUUklCVVRFX05BTUUpLG09Zix2PSJf
X3JlYWN0SW50ZXJuYWxJbnN0YW5jZSQiK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNl
KDIpLGc9e2dldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlOnUsZ2V0SW5zdGFuY2VGcm9tTm9kZTps
LGdldE5vZGVGcm9tSW5zdGFuY2U6YyxwcmVjYWNoZUNoaWxkTm9kZXM6cyxwcmVjYWNoZU5vZGU6
aSx1bmNhY2hlTm9kZTphfTt0LmV4cG9ydHM9Z30sezExOjExLDExMDoxMTAsMTM0OjEzNCwzMToz
MX1dLDMzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1
cm57X3RvcExldmVsV3JhcHBlcjplLF9pZENvdW50ZXI6MSxfb3duZXJEb2N1bWVudDp0P3Qubm9k
ZVR5cGU9PT1vP3Q6dC5vd25lckRvY3VtZW50Om51bGwsX25vZGU6dCxfdGFnOnQ/dC5ub2RlTmFt
ZS50b0xvd2VyQ2FzZSgpOm51bGwsX25hbWVzcGFjZVVSSTp0P3QubmFtZXNwYWNlVVJJOm51bGx9
fXZhciBvPShlKDExNSksOSk7dC5leHBvcnRzPXJ9LHsxMTU6MTE1fV0sMzQ6W2Z1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgxNDApLG89ZSg5KSxpPWUoMzIpLGE9ZnVuY3Rpb24o
ZSl7dGhpcy5fY3VycmVudEVsZW1lbnQ9bnVsbCx0aGlzLl9ob3N0Tm9kZT1udWxsLHRoaXMuX2hv
c3RQYXJlbnQ9bnVsbCx0aGlzLl9ob3N0Q29udGFpbmVySW5mbz1udWxsLHRoaXMuX2RvbUlEPTB9
O3IoYS5wcm90b3R5cGUse21vdW50Q29tcG9uZW50OmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBhPW4u
X2lkQ291bnRlcisrO3RoaXMuX2RvbUlEPWEsdGhpcy5faG9zdFBhcmVudD10LHRoaXMuX2hvc3RD
b250YWluZXJJbmZvPW47dmFyIHM9IiByZWFjdC1lbXB0eTogIit0aGlzLl9kb21JRCsiICI7aWYo
ZS51c2VDcmVhdGVFbGVtZW50KXt2YXIgdT1uLl9vd25lckRvY3VtZW50LGw9dS5jcmVhdGVDb21t
ZW50KHMpO3JldHVybiBpLnByZWNhY2hlTm9kZSh0aGlzLGwpLG8obCl9cmV0dXJuIGUucmVuZGVy
VG9TdGF0aWNNYXJrdXA/IiI6IjwhLS0iK3MrIi0tPiJ9LHJlY2VpdmVDb21wb25lbnQ6ZnVuY3Rp
b24oKXt9LGdldEhvc3ROb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIGkuZ2V0Tm9kZUZyb21JbnN0YW5j
ZSh0aGlzKX0sdW5tb3VudENvbXBvbmVudDpmdW5jdGlvbigpe2kudW5jYWNoZU5vZGUodGhpcyl9
fSksdC5leHBvcnRzPWF9LHsxNDA6MTQwLDMyOjMyLDk6OX1dLDM1OltmdW5jdGlvbihlLHQsbil7
InVzZSBzdHJpY3QiO3ZhciByPWUoOCksbz1lKDMyKSxpPXtkYW5nZXJvdXNseVByb2Nlc3NDaGls
ZHJlblVwZGF0ZXM6ZnVuY3Rpb24oZSx0KXt2YXIgbj1vLmdldE5vZGVGcm9tSW5zdGFuY2UoZSk7
ci5wcm9jZXNzVXBkYXRlcyhuLHQpfX07dC5leHBvcnRzPWl9LHszMjozMiw4Ojh9XSwzNjpbZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7dGhpcy5fcm9vdE5vZGVJRCYm
ZC51cGRhdGVXcmFwcGVyKHRoaXMpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuImNoZWNrYm94Ij09PWUu
dHlwZXx8InJhZGlvIj09PWUudHlwZT9udWxsIT1lLmNoZWNrZWQ6bnVsbCE9ZS52YWx1ZX1mdW5j
dGlvbiBpKGUpe3ZhciB0PXRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3BzLG49bC5leGVjdXRlT25D
aGFuZ2UodCxlKTtwLmFzYXAocix0aGlzKTt2YXIgbz10Lm5hbWU7aWYoInJhZGlvIj09PXQudHlw
ZSYmbnVsbCE9byl7Zm9yKHZhciBpPWMuZ2V0Tm9kZUZyb21JbnN0YW5jZSh0aGlzKSxzPWk7cy5w
YXJlbnROb2RlOylzPXMucGFyZW50Tm9kZTtmb3IodmFyIHU9cy5xdWVyeVNlbGVjdG9yQWxsKCJp
bnB1dFtuYW1lPSIrSlNPTi5zdHJpbmdpZnkoIiIrbykrJ11bdHlwZT0icmFkaW8iXScpLGQ9MDtk
PHUubGVuZ3RoO2QrKyl7dmFyIGY9dVtkXTtpZihmIT09aSYmZi5mb3JtPT09aS5mb3JtKXt2YXIg
aD1jLmdldEluc3RhbmNlRnJvbU5vZGUoZik7aHx8YSgiOTAiKSxwLmFzYXAocixoKX19fXJldHVy
biBufXZhciBhPWUoMTEwKSxzPWUoMTQwKSx1PWUoMTIpLGw9ZSgyMyksYz1lKDMyKSxwPWUoNzEp
LGQ9KGUoMTM0KSxlKDEzOSkse2dldEhvc3RQcm9wczpmdW5jdGlvbihlLHQpe3ZhciBuPWwuZ2V0
VmFsdWUodCkscj1sLmdldENoZWNrZWQodCk7cmV0dXJuIHMoe3R5cGU6dm9pZCAwLHN0ZXA6dm9p
ZCAwLG1pbjp2b2lkIDAsbWF4OnZvaWQgMH0sdCx7ZGVmYXVsdENoZWNrZWQ6dm9pZCAwLGRlZmF1
bHRWYWx1ZTp2b2lkIDAsdmFsdWU6bnVsbCE9bj9uOmUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFs
dWUsY2hlY2tlZDpudWxsIT1yP3I6ZS5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVja2VkLG9uQ2hh
bmdlOmUuX3dyYXBwZXJTdGF0ZS5vbkNoYW5nZX0pfSxtb3VudFdyYXBwZXI6ZnVuY3Rpb24oZSx0
KXt2YXIgbj10LmRlZmF1bHRWYWx1ZTtlLl93cmFwcGVyU3RhdGU9e2luaXRpYWxDaGVja2VkOm51
bGwhPXQuY2hlY2tlZD90LmNoZWNrZWQ6dC5kZWZhdWx0Q2hlY2tlZCxpbml0aWFsVmFsdWU6bnVs
bCE9dC52YWx1ZT90LnZhbHVlOm4sbGlzdGVuZXJzOm51bGwsb25DaGFuZ2U6aS5iaW5kKGUpLGNv
bnRyb2xsZWQ6byh0KX19LHVwZGF0ZVdyYXBwZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fY3VycmVu
dEVsZW1lbnQucHJvcHMsbj10LmNoZWNrZWQ7bnVsbCE9biYmdS5zZXRWYWx1ZUZvclByb3BlcnR5
KGMuZ2V0Tm9kZUZyb21JbnN0YW5jZShlKSwiY2hlY2tlZCIsbnx8ITEpO3ZhciByPWMuZ2V0Tm9k
ZUZyb21JbnN0YW5jZShlKSxvPWwuZ2V0VmFsdWUodCk7aWYobnVsbCE9bylpZigwPT09byYmIiI9
PT1yLnZhbHVlKXIudmFsdWU9IjAiO2Vsc2UgaWYoIm51bWJlciI9PT10LnR5cGUpe3ZhciBpPXBh
cnNlRmxvYXQoci52YWx1ZSwxMCl8fDA7byE9aSYmKHIudmFsdWU9IiIrbyl9ZWxzZSBvIT1yLnZh
bHVlJiYoci52YWx1ZT0iIitvKTtlbHNlIG51bGw9PXQudmFsdWUmJm51bGwhPXQuZGVmYXVsdFZh
bHVlJiZyLmRlZmF1bHRWYWx1ZSE9PSIiK3QuZGVmYXVsdFZhbHVlJiYoci5kZWZhdWx0VmFsdWU9
IiIrdC5kZWZhdWx0VmFsdWUpLG51bGw9PXQuY2hlY2tlZCYmbnVsbCE9dC5kZWZhdWx0Q2hlY2tl
ZCYmKHIuZGVmYXVsdENoZWNrZWQ9ISF0LmRlZmF1bHRDaGVja2VkKX0scG9zdE1vdW50V3JhcHBl
cjpmdW5jdGlvbihlKXt2YXIgdD1lLl9jdXJyZW50RWxlbWVudC5wcm9wcyxuPWMuZ2V0Tm9kZUZy
b21JbnN0YW5jZShlKTtzd2l0Y2godC50eXBlKXtjYXNlInN1Ym1pdCI6Y2FzZSJyZXNldCI6YnJl
YWs7Y2FzZSJjb2xvciI6Y2FzZSJkYXRlIjpjYXNlImRhdGV0aW1lIjpjYXNlImRhdGV0aW1lLWxv
Y2FsIjpjYXNlIm1vbnRoIjpjYXNlInRpbWUiOmNhc2Uid2VlayI6bi52YWx1ZT0iIixuLnZhbHVl
PW4uZGVmYXVsdFZhbHVlO2JyZWFrO2RlZmF1bHQ6bi52YWx1ZT1uLnZhbHVlfXZhciByPW4ubmFt
ZTsiIiE9PXImJihuLm5hbWU9IiIpLG4uZGVmYXVsdENoZWNrZWQ9IW4uZGVmYXVsdENoZWNrZWQs
bi5kZWZhdWx0Q2hlY2tlZD0hbi5kZWZhdWx0Q2hlY2tlZCwiIiE9PXImJihuLm5hbWU9cil9fSk7
dC5leHBvcnRzPWR9LHsxMTA6MTEwLDEyOjEyLDEzNDoxMzQsMTM5OjEzOSwxNDA6MTQwLDIzOjIz
LDMyOjMyLDcxOjcxfV0sMzc6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24g
cihlKXt2YXIgdD0iIjtyZXR1cm4gaS5DaGlsZHJlbi5mb3JFYWNoKGUsZnVuY3Rpb24oZSl7bnVs
bCE9ZSYmKCJzdHJpbmciPT10eXBlb2YgZXx8Im51bWJlciI9PXR5cGVvZiBlP3QrPWU6dXx8KHU9
ITApKX0pLHR9dmFyIG89ZSgxNDApLGk9ZSgxMTcpLGE9ZSgzMikscz1lKDM4KSx1PShlKDEzOSks
ITEpLGw9e21vdW50V3JhcHBlcjpmdW5jdGlvbihlLHQsbil7dmFyIG89bnVsbDtpZihudWxsIT1u
KXt2YXIgaT1uOyJvcHRncm91cCI9PT1pLl90YWcmJihpPWkuX2hvc3RQYXJlbnQpLG51bGwhPWkm
JiJzZWxlY3QiPT09aS5fdGFnJiYobz1zLmdldFNlbGVjdFZhbHVlQ29udGV4dChpKSl9dmFyIGE9
bnVsbDtpZihudWxsIT1vKXt2YXIgdTtpZih1PW51bGwhPXQudmFsdWU/dC52YWx1ZSsiIjpyKHQu
Y2hpbGRyZW4pLGE9ITEsQXJyYXkuaXNBcnJheShvKSl7Zm9yKHZhciBsPTA7bDxvLmxlbmd0aDts
KyspaWYoIiIrb1tsXT09PXUpe2E9ITA7YnJlYWt9fWVsc2UgYT0iIitvPT09dX1lLl93cmFwcGVy
U3RhdGU9e3NlbGVjdGVkOmF9fSxwb3N0TW91bnRXcmFwcGVyOmZ1bmN0aW9uKGUpe3ZhciB0PWUu
X2N1cnJlbnRFbGVtZW50LnByb3BzO251bGwhPXQudmFsdWUmJmEuZ2V0Tm9kZUZyb21JbnN0YW5j
ZShlKS5zZXRBdHRyaWJ1dGUoInZhbHVlIix0LnZhbHVlKX0sZ2V0SG9zdFByb3BzOmZ1bmN0aW9u
KGUsdCl7dmFyIG49byh7c2VsZWN0ZWQ6dm9pZCAwLGNoaWxkcmVuOnZvaWQgMH0sdCk7bnVsbCE9
ZS5fd3JhcHBlclN0YXRlLnNlbGVjdGVkJiYobi5zZWxlY3RlZD1lLl93cmFwcGVyU3RhdGUuc2Vs
ZWN0ZWQpO3ZhciBpPXIodC5jaGlsZHJlbik7cmV0dXJuIGkmJihuLmNoaWxkcmVuPWkpLG59fTt0
LmV4cG9ydHM9bH0sezExNzoxMTcsMTM5OjEzOSwxNDA6MTQwLDMyOjMyLDM4OjM4fV0sMzg6W2Z1
bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe2lmKHRoaXMuX3Jvb3ROb2Rl
SUQmJnRoaXMuX3dyYXBwZXJTdGF0ZS5wZW5kaW5nVXBkYXRlKXt0aGlzLl93cmFwcGVyU3RhdGUu
cGVuZGluZ1VwZGF0ZT0hMTt2YXIgZT10aGlzLl9jdXJyZW50RWxlbWVudC5wcm9wcyx0PXMuZ2V0
VmFsdWUoZSk7bnVsbCE9dCYmbyh0aGlzLEJvb2xlYW4oZS5tdWx0aXBsZSksdCl9fWZ1bmN0aW9u
IG8oZSx0LG4pe3ZhciByLG8saT11LmdldE5vZGVGcm9tSW5zdGFuY2UoZSkub3B0aW9ucztpZih0
KXtmb3Iocj17fSxvPTA7bzxuLmxlbmd0aDtvKyspclsiIituW29dXT0hMDtmb3Iobz0wO288aS5s
ZW5ndGg7bysrKXt2YXIgYT1yLmhhc093blByb3BlcnR5KGlbb10udmFsdWUpO2lbb10uc2VsZWN0
ZWQhPT1hJiYoaVtvXS5zZWxlY3RlZD1hKX19ZWxzZXtmb3Iocj0iIituLG89MDtvPGkubGVuZ3Ro
O28rKylpZihpW29dLnZhbHVlPT09cilyZXR1cm4gdm9pZChpW29dLnNlbGVjdGVkPSEwKTtpLmxl
bmd0aCYmKGlbMF0uc2VsZWN0ZWQ9ITApfX1mdW5jdGlvbiBpKGUpe3ZhciB0PXRoaXMuX2N1cnJl
bnRFbGVtZW50LnByb3BzLG49cy5leGVjdXRlT25DaGFuZ2UodCxlKTtyZXR1cm4gdGhpcy5fcm9v
dE5vZGVJRCYmKHRoaXMuX3dyYXBwZXJTdGF0ZS5wZW5kaW5nVXBkYXRlPSEwKSxsLmFzYXAocix0
aGlzKSxufXZhciBhPWUoMTQwKSxzPWUoMjMpLHU9ZSgzMiksbD1lKDcxKSxjPShlKDEzOSksITEp
LHA9e2dldEhvc3RQcm9wczpmdW5jdGlvbihlLHQpe3JldHVybiBhKHt9LHQse29uQ2hhbmdlOmUu
X3dyYXBwZXJTdGF0ZS5vbkNoYW5nZSx2YWx1ZTp2b2lkIDB9KX0sbW91bnRXcmFwcGVyOmZ1bmN0
aW9uKGUsdCl7dmFyIG49cy5nZXRWYWx1ZSh0KTtlLl93cmFwcGVyU3RhdGU9e3BlbmRpbmdVcGRh
dGU6ITEsaW5pdGlhbFZhbHVlOm51bGwhPW4/bjp0LmRlZmF1bHRWYWx1ZSxsaXN0ZW5lcnM6bnVs
bCxvbkNoYW5nZTppLmJpbmQoZSksd2FzTXVsdGlwbGU6Qm9vbGVhbih0Lm11bHRpcGxlKX0sdm9p
ZCAwPT09dC52YWx1ZXx8dm9pZCAwPT09dC5kZWZhdWx0VmFsdWV8fGN8fChjPSEwKX0sZ2V0U2Vs
ZWN0VmFsdWVDb250ZXh0OmZ1bmN0aW9uKGUpe3JldHVybiBlLl93cmFwcGVyU3RhdGUuaW5pdGlh
bFZhbHVlfSxwb3N0VXBkYXRlV3JhcHBlcjpmdW5jdGlvbihlKXt2YXIgdD1lLl9jdXJyZW50RWxl
bWVudC5wcm9wcztlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlPXZvaWQgMDt2YXIgbj1lLl93
cmFwcGVyU3RhdGUud2FzTXVsdGlwbGU7ZS5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlPUJvb2xl
YW4odC5tdWx0aXBsZSk7dmFyIHI9cy5nZXRWYWx1ZSh0KTtudWxsIT1yPyhlLl93cmFwcGVyU3Rh
dGUucGVuZGluZ1VwZGF0ZT0hMSxvKGUsQm9vbGVhbih0Lm11bHRpcGxlKSxyKSk6biE9PUJvb2xl
YW4odC5tdWx0aXBsZSkmJihudWxsIT10LmRlZmF1bHRWYWx1ZT9vKGUsQm9vbGVhbih0Lm11bHRp
cGxlKSx0LmRlZmF1bHRWYWx1ZSk6byhlLEJvb2xlYW4odC5tdWx0aXBsZSksdC5tdWx0aXBsZT9b
XToiIikpfX07dC5leHBvcnRzPXB9LHsxMzk6MTM5LDE0MDoxNDAsMjM6MjMsMzI6MzIsNzE6NzF9
XSwzOTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3Jl
dHVybiBlPT09biYmdD09PXJ9ZnVuY3Rpb24gbyhlKXt2YXIgdD1kb2N1bWVudC5zZWxlY3Rpb24s
bj10LmNyZWF0ZVJhbmdlKCkscj1uLnRleHQubGVuZ3RoLG89bi5kdXBsaWNhdGUoKTtvLm1vdmVU
b0VsZW1lbnRUZXh0KGUpLG8uc2V0RW5kUG9pbnQoIkVuZFRvU3RhcnQiLG4pO3ZhciBpPW8udGV4
dC5sZW5ndGg7cmV0dXJue3N0YXJ0OmksZW5kOmkrcn19ZnVuY3Rpb24gaShlKXt2YXIgdD13aW5k
b3cuZ2V0U2VsZWN0aW9uJiZ3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7aWYoIXR8fDA9PT10LnJhbmdl
Q291bnQpcmV0dXJuIG51bGw7dmFyIG49dC5hbmNob3JOb2RlLG89dC5hbmNob3JPZmZzZXQsaT10
LmZvY3VzTm9kZSxhPXQuZm9jdXNPZmZzZXQscz10LmdldFJhbmdlQXQoMCk7dHJ5e3Muc3RhcnRD
b250YWluZXIubm9kZVR5cGUscy5lbmRDb250YWluZXIubm9kZVR5cGV9Y2F0Y2goZSl7cmV0dXJu
IG51bGx9dmFyIHU9cih0LmFuY2hvck5vZGUsdC5hbmNob3JPZmZzZXQsdC5mb2N1c05vZGUsdC5m
b2N1c09mZnNldCksbD11PzA6cy50b1N0cmluZygpLmxlbmd0aCxjPXMuY2xvbmVSYW5nZSgpO2Mu
c2VsZWN0Tm9kZUNvbnRlbnRzKGUpLGMuc2V0RW5kKHMuc3RhcnRDb250YWluZXIscy5zdGFydE9m
ZnNldCk7dmFyIHA9cihjLnN0YXJ0Q29udGFpbmVyLGMuc3RhcnRPZmZzZXQsYy5lbmRDb250YWlu
ZXIsYy5lbmRPZmZzZXQpLGQ9cD8wOmMudG9TdHJpbmcoKS5sZW5ndGgsZj1kK2wsaD1kb2N1bWVu
dC5jcmVhdGVSYW5nZSgpO2guc2V0U3RhcnQobixvKSxoLnNldEVuZChpLGEpO3ZhciBtPWguY29s
bGFwc2VkO3JldHVybntzdGFydDptP2Y6ZCxlbmQ6bT9kOmZ9fWZ1bmN0aW9uIGEoZSx0KXt2YXIg
bixyLG89ZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCkuZHVwbGljYXRlKCk7dm9pZCAw
PT09dC5lbmQ/KG49dC5zdGFydCxyPW4pOnQuc3RhcnQ+dC5lbmQ/KG49dC5lbmQscj10LnN0YXJ0
KToobj10LnN0YXJ0LHI9dC5lbmQpLG8ubW92ZVRvRWxlbWVudFRleHQoZSksby5tb3ZlU3RhcnQo
ImNoYXJhY3RlciIsbiksby5zZXRFbmRQb2ludCgiRW5kVG9TdGFydCIsbyksby5tb3ZlRW5kKCJj
aGFyYWN0ZXIiLHItbiksby5zZWxlY3QoKX1mdW5jdGlvbiBzKGUsdCl7aWYod2luZG93LmdldFNl
bGVjdGlvbil7dmFyIG49d2luZG93LmdldFNlbGVjdGlvbigpLHI9ZVtjKCldLmxlbmd0aCxvPU1h
dGgubWluKHQuc3RhcnQsciksaT12b2lkIDA9PT10LmVuZD9vOk1hdGgubWluKHQuZW5kLHIpO2lm
KCFuLmV4dGVuZCYmbz5pKXt2YXIgYT1pO2k9byxvPWF9dmFyIHM9bChlLG8pLHU9bChlLGkpO2lm
KHMmJnUpe3ZhciBwPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7cC5zZXRTdGFydChzLm5vZGUscy5v
ZmZzZXQpLG4ucmVtb3ZlQWxsUmFuZ2VzKCksbz5pPyhuLmFkZFJhbmdlKHApLG4uZXh0ZW5kKHUu
bm9kZSx1Lm9mZnNldCkpOihwLnNldEVuZCh1Lm5vZGUsdS5vZmZzZXQpLG4uYWRkUmFuZ2UocCkp
fX19dmFyIHU9ZSgxMjApLGw9ZSgxMDMpLGM9ZSgxMDQpLHA9dS5jYW5Vc2VET00mJiJzZWxlY3Rp
b24iaW4gZG9jdW1lbnQmJiEoImdldFNlbGVjdGlvbiJpbiB3aW5kb3cpLGQ9e2dldE9mZnNldHM6
cD9vOmksc2V0T2Zmc2V0czpwP2E6c307dC5leHBvcnRzPWR9LHsxMDM6MTAzLDEwNDoxMDQsMTIw
OjEyMH1dLDQwOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoNDYpLG89ZSg2
NyksaT1lKDcyKTtyLmluamVjdCgpO3ZhciBhPXtyZW5kZXJUb1N0cmluZzpvLnJlbmRlclRvU3Ry
aW5nLHJlbmRlclRvU3RhdGljTWFya3VwOm8ucmVuZGVyVG9TdGF0aWNNYXJrdXAsdmVyc2lvbjpp
fTt0LmV4cG9ydHM9YX0sezQ2OjQ2LDY3OjY3LDcyOjcyfV0sNDE6W2Z1bmN0aW9uKGUsdCxuKXsi
dXNlIHN0cmljdCI7dmFyIHI9ZSg0MCk7dC5leHBvcnRzPXJ9LHs0MDo0MH1dLDQyOltmdW5jdGlv
bihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMTEwKSxvPWUoMTQwKSxpPWUoOCksYT1lKDkp
LHM9ZSgzMiksdT1lKDk1KSxsPShlKDEzNCksZSgxMTUpLGZ1bmN0aW9uKGUpe3RoaXMuX2N1cnJl
bnRFbGVtZW50PWUsdGhpcy5fc3RyaW5nVGV4dD0iIitlLHRoaXMuX2hvc3ROb2RlPW51bGwsdGhp
cy5faG9zdFBhcmVudD1udWxsLHRoaXMuX2RvbUlEPTAsdGhpcy5fbW91bnRJbmRleD0wLHRoaXMu
X2Nsb3NpbmdDb21tZW50PW51bGwsdGhpcy5fY29tbWVudE5vZGVzPW51bGx9KTtvKGwucHJvdG90
eXBlLHttb3VudENvbXBvbmVudDpmdW5jdGlvbihlLHQsbixyKXt2YXIgbz1uLl9pZENvdW50ZXIr
KyxpPSIgcmVhY3QtdGV4dDogIitvKyIgIjtpZih0aGlzLl9kb21JRD1vLHRoaXMuX2hvc3RQYXJl
bnQ9dCxlLnVzZUNyZWF0ZUVsZW1lbnQpe3ZhciBsPW4uX293bmVyRG9jdW1lbnQsYz1sLmNyZWF0
ZUNvbW1lbnQoaSkscD1sLmNyZWF0ZUNvbW1lbnQoIiAvcmVhY3QtdGV4dCAiKSxkPWEobC5jcmVh
dGVEb2N1bWVudEZyYWdtZW50KCkpO3JldHVybiBhLnF1ZXVlQ2hpbGQoZCxhKGMpKSx0aGlzLl9z
dHJpbmdUZXh0JiZhLnF1ZXVlQ2hpbGQoZCxhKGwuY3JlYXRlVGV4dE5vZGUodGhpcy5fc3RyaW5n
VGV4dCkpKSxhLnF1ZXVlQ2hpbGQoZCxhKHApKSxzLnByZWNhY2hlTm9kZSh0aGlzLGMpLHRoaXMu
X2Nsb3NpbmdDb21tZW50PXAsZH0KK3ZhciBmPXUodGhpcy5fc3RyaW5nVGV4dCk7cmV0dXJuIGUu
cmVuZGVyVG9TdGF0aWNNYXJrdXA/ZjoiPCEtLSIraSsiLS0+IitmKyI8IS0tIC9yZWFjdC10ZXh0
IC0tPiJ9LHJlY2VpdmVDb21wb25lbnQ6ZnVuY3Rpb24oZSx0KXtpZihlIT09dGhpcy5fY3VycmVu
dEVsZW1lbnQpe3RoaXMuX2N1cnJlbnRFbGVtZW50PWU7dmFyIG49IiIrZTtpZihuIT09dGhpcy5f
c3RyaW5nVGV4dCl7dGhpcy5fc3RyaW5nVGV4dD1uO3ZhciByPXRoaXMuZ2V0SG9zdE5vZGUoKTtp
LnJlcGxhY2VEZWxpbWl0ZWRUZXh0KHJbMF0sclsxXSxuKX19fSxnZXRIb3N0Tm9kZTpmdW5jdGlv
bigpe3ZhciBlPXRoaXMuX2NvbW1lbnROb2RlcztpZihlKXJldHVybiBlO2lmKCF0aGlzLl9jbG9z
aW5nQ29tbWVudClmb3IodmFyIHQ9cy5nZXROb2RlRnJvbUluc3RhbmNlKHRoaXMpLG49dC5uZXh0
U2libGluZzs7KXtpZihudWxsPT1uJiZyKCI2NyIsdGhpcy5fZG9tSUQpLDg9PT1uLm5vZGVUeXBl
JiYiIC9yZWFjdC10ZXh0ICI9PT1uLm5vZGVWYWx1ZSl7dGhpcy5fY2xvc2luZ0NvbW1lbnQ9bjti
cmVha31uPW4ubmV4dFNpYmxpbmd9cmV0dXJuIGU9W3RoaXMuX2hvc3ROb2RlLHRoaXMuX2Nsb3Np
bmdDb21tZW50XSx0aGlzLl9jb21tZW50Tm9kZXM9ZSxlfSx1bm1vdW50Q29tcG9uZW50OmZ1bmN0
aW9uKCl7dGhpcy5fY2xvc2luZ0NvbW1lbnQ9bnVsbCx0aGlzLl9jb21tZW50Tm9kZXM9bnVsbCxz
LnVuY2FjaGVOb2RlKHRoaXMpfX0pLHQuZXhwb3J0cz1sfSx7MTEwOjExMCwxMTU6MTE1LDEzNDox
MzQsMTQwOjE0MCwzMjozMiw4OjgsOTo5LDk1Ojk1fV0sNDM6W2Z1bmN0aW9uKGUsdCxuKXsidXNl
IHN0cmljdCI7ZnVuY3Rpb24gcigpe3RoaXMuX3Jvb3ROb2RlSUQmJmMudXBkYXRlV3JhcHBlcih0
aGlzKX1mdW5jdGlvbiBvKGUpe3ZhciB0PXRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3BzLG49cy5l
eGVjdXRlT25DaGFuZ2UodCxlKTtyZXR1cm4gbC5hc2FwKHIsdGhpcyksbn12YXIgaT1lKDExMCks
YT1lKDE0MCkscz1lKDIzKSx1PWUoMzIpLGw9ZSg3MSksYz0oZSgxMzQpLGUoMTM5KSx7Z2V0SG9z
dFByb3BzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGwhPXQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhU
TUwmJmkoIjkxIiksYSh7fSx0LHt2YWx1ZTp2b2lkIDAsZGVmYXVsdFZhbHVlOnZvaWQgMCxjaGls
ZHJlbjoiIitlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlLG9uQ2hhbmdlOmUuX3dyYXBwZXJT
dGF0ZS5vbkNoYW5nZX0pfSxtb3VudFdyYXBwZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj1zLmdldFZh
bHVlKHQpLHI9bjtpZihudWxsPT1uKXt2YXIgYT10LmRlZmF1bHRWYWx1ZSx1PXQuY2hpbGRyZW47
bnVsbCE9dSYmKG51bGwhPWEmJmkoIjkyIiksQXJyYXkuaXNBcnJheSh1KSYmKHUubGVuZ3RoPD0x
fHxpKCI5MyIpLHU9dVswXSksYT0iIit1KSxudWxsPT1hJiYoYT0iIikscj1hfWUuX3dyYXBwZXJT
dGF0ZT17aW5pdGlhbFZhbHVlOiIiK3IsbGlzdGVuZXJzOm51bGwsb25DaGFuZ2U6by5iaW5kKGUp
fX0sdXBkYXRlV3JhcHBlcjpmdW5jdGlvbihlKXt2YXIgdD1lLl9jdXJyZW50RWxlbWVudC5wcm9w
cyxuPXUuZ2V0Tm9kZUZyb21JbnN0YW5jZShlKSxyPXMuZ2V0VmFsdWUodCk7aWYobnVsbCE9cil7
dmFyIG89IiIrcjtvIT09bi52YWx1ZSYmKG4udmFsdWU9byksbnVsbD09dC5kZWZhdWx0VmFsdWUm
JihuLmRlZmF1bHRWYWx1ZT1vKX1udWxsIT10LmRlZmF1bHRWYWx1ZSYmKG4uZGVmYXVsdFZhbHVl
PXQuZGVmYXVsdFZhbHVlKX0scG9zdE1vdW50V3JhcHBlcjpmdW5jdGlvbihlKXt2YXIgdD11Lmdl
dE5vZGVGcm9tSW5zdGFuY2UoZSksbj10LnRleHRDb250ZW50O249PT1lLl93cmFwcGVyU3RhdGUu
aW5pdGlhbFZhbHVlJiYodC52YWx1ZT1uKX19KTt0LmV4cG9ydHM9Y30sezExMDoxMTAsMTM0OjEz
NCwxMzk6MTM5LDE0MDoxNDAsMjM6MjMsMzI6MzIsNzE6NzF9XSw0NDpbZnVuY3Rpb24oZSx0LG4p
eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7Il9ob3N0Tm9kZSJpbiBlfHx1KCIzMyIpLCJf
aG9zdE5vZGUiaW4gdHx8dSgiMzMiKTtmb3IodmFyIG49MCxyPWU7cjtyPXIuX2hvc3RQYXJlbnQp
bisrO2Zvcih2YXIgbz0wLGk9dDtpO2k9aS5faG9zdFBhcmVudClvKys7Zm9yKDtuLW8+MDspZT1l
Ll9ob3N0UGFyZW50LG4tLTtmb3IoO28tbj4wOyl0PXQuX2hvc3RQYXJlbnQsby0tO2Zvcih2YXIg
YT1uO2EtLTspe2lmKGU9PT10KXJldHVybiBlO2U9ZS5faG9zdFBhcmVudCx0PXQuX2hvc3RQYXJl
bnR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gbyhlLHQpeyJfaG9zdE5vZGUiaW4gZXx8dSgiMzUiKSwi
X2hvc3ROb2RlImluIHR8fHUoIjM1Iik7Zm9yKDt0Oyl7aWYodD09PWUpcmV0dXJuITA7dD10Ll9o
b3N0UGFyZW50fXJldHVybiExfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIl9ob3N0Tm9kZSJpbiBlfHx1
KCIzNiIpLGUuX2hvc3RQYXJlbnR9ZnVuY3Rpb24gYShlLHQsbil7Zm9yKHZhciByPVtdO2U7KXIu
cHVzaChlKSxlPWUuX2hvc3RQYXJlbnQ7dmFyIG87Zm9yKG89ci5sZW5ndGg7by0tID4wOyl0KHJb
b10sImNhcHR1cmVkIixuKTtmb3Iobz0wO288ci5sZW5ndGg7bysrKXQocltvXSwiYnViYmxlZCIs
bil9ZnVuY3Rpb24gcyhlLHQsbixvLGkpe2Zvcih2YXIgYT1lJiZ0P3IoZSx0KTpudWxsLHM9W107
ZSYmZSE9PWE7KXMucHVzaChlKSxlPWUuX2hvc3RQYXJlbnQ7Zm9yKHZhciB1PVtdO3QmJnQhPT1h
Oyl1LnB1c2godCksdD10Ll9ob3N0UGFyZW50O3ZhciBsO2ZvcihsPTA7bDxzLmxlbmd0aDtsKysp
bihzW2xdLCJidWJibGVkIixvKTtmb3IobD11Lmxlbmd0aDtsLS0gPjA7KW4odVtsXSwiY2FwdHVy
ZWQiLGkpfXZhciB1PWUoMTEwKTtlKDEzNCk7dC5leHBvcnRzPXtpc0FuY2VzdG9yOm8sZ2V0TG93
ZXN0Q29tbW9uQW5jZXN0b3I6cixnZXRQYXJlbnRJbnN0YW5jZTppLHRyYXZlcnNlVHdvUGhhc2U6
YSx0cmF2ZXJzZUVudGVyTGVhdmU6c319LHsxMTA6MTEwLDEzNDoxMzR9XSw0NTpbZnVuY3Rpb24o
ZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7dGhpcy5yZWluaXRpYWxpemVUcmFuc2Fj
dGlvbigpfXZhciBvPWUoMTQwKSxpPWUoNzEpLGE9ZSg4OSkscz1lKDEyNiksdT17aW5pdGlhbGl6
ZTpzLGNsb3NlOmZ1bmN0aW9uKCl7ZC5pc0JhdGNoaW5nVXBkYXRlcz0hMX19LGw9e2luaXRpYWxp
emU6cyxjbG9zZTppLmZsdXNoQmF0Y2hlZFVwZGF0ZXMuYmluZChpKX0sYz1bbCx1XTtvKHIucHJv
dG90eXBlLGEse2dldFRyYW5zYWN0aW9uV3JhcHBlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gY319KTt2
YXIgcD1uZXcgcixkPXtpc0JhdGNoaW5nVXBkYXRlczohMSxiYXRjaGVkVXBkYXRlczpmdW5jdGlv
bihlLHQsbixyLG8saSl7dmFyIGE9ZC5pc0JhdGNoaW5nVXBkYXRlcztyZXR1cm4gZC5pc0JhdGNo
aW5nVXBkYXRlcz0hMCxhP2UodCxuLHIsbyxpKTpwLnBlcmZvcm0oZSxudWxsLHQsbixyLG8saSl9
fTt0LmV4cG9ydHM9ZH0sezEyNjoxMjYsMTQwOjE0MCw3MTo3MSw4OTo4OX1dLDQ2OltmdW5jdGlv
bihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXt4fHwoeD0hMCx5LkV2ZW50RW1pdHRl
ci5pbmplY3RSZWFjdEV2ZW50TGlzdGVuZXIoZykseS5FdmVudFBsdWdpbkh1Yi5pbmplY3RFdmVu
dFBsdWdpbk9yZGVyKHMpLHkuRXZlbnRQbHVnaW5VdGlscy5pbmplY3RDb21wb25lbnRUcmVlKGQp
LHkuRXZlbnRQbHVnaW5VdGlscy5pbmplY3RUcmVlVHJhdmVyc2FsKGgpLHkuRXZlbnRQbHVnaW5I
dWIuaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lKHtTaW1wbGVFdmVudFBsdWdpbjpFLEVudGVyTGVh
dmVFdmVudFBsdWdpbjp1LENoYW5nZUV2ZW50UGx1Z2luOmEsU2VsZWN0RXZlbnRQbHVnaW46YixC
ZWZvcmVJbnB1dEV2ZW50UGx1Z2luOml9KSx5Lkhvc3RDb21wb25lbnQuaW5qZWN0R2VuZXJpY0Nv
bXBvbmVudENsYXNzKHApLHkuSG9zdENvbXBvbmVudC5pbmplY3RUZXh0Q29tcG9uZW50Q2xhc3Mo
bSkseS5ET01Qcm9wZXJ0eS5pbmplY3RET01Qcm9wZXJ0eUNvbmZpZyhvKSx5LkRPTVByb3BlcnR5
LmluamVjdERPTVByb3BlcnR5Q29uZmlnKGwpLHkuRE9NUHJvcGVydHkuaW5qZWN0RE9NUHJvcGVy
dHlDb25maWcoQykseS5FbXB0eUNvbXBvbmVudC5pbmplY3RFbXB0eUNvbXBvbmVudEZhY3Rvcnko
ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBmKGUpfSkseS5VcGRhdGVzLmluamVjdFJlY29uY2lsZVRy
YW5zYWN0aW9uKF8pLHkuVXBkYXRlcy5pbmplY3RCYXRjaGluZ1N0cmF0ZWd5KHYpLHkuQ29tcG9u
ZW50LmluamVjdEVudmlyb25tZW50KGMpKX12YXIgbz1lKDEpLGk9ZSgzKSxhPWUoNykscz1lKDE0
KSx1PWUoMTUpLGw9ZSgyMSksYz1lKDI3KSxwPWUoMzApLGQ9ZSgzMiksZj1lKDM0KSxoPWUoNDQp
LG09ZSg0Miksdj1lKDQ1KSxnPWUoNTEpLHk9ZSg1NCksXz1lKDYzKSxDPWUoNzMpLGI9ZSg3NCks
RT1lKDc1KSx4PSExO3QuZXhwb3J0cz17aW5qZWN0OnJ9fSx7MToxLDE0OjE0LDE1OjE1LDIxOjIx
LDI3OjI3LDM6MywzMDozMCwzMjozMiwzNDozNCw0Mjo0Miw0NDo0NCw0NTo0NSw1MTo1MSw1NDo1
NCw2Mzo2Myw3OjcsNzM6NzMsNzQ6NzQsNzU6NzV9XSw0NzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ug
c3RyaWN0Ijt2YXIgcj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1i
b2wuZm9yKCJyZWFjdC5lbGVtZW50Iil8fDYwMTAzO3QuZXhwb3J0cz1yfSx7fV0sNDg6W2Z1bmN0
aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHIsbz17aW5qZWN0RW1wdHlDb21wb25lbnRGYWN0
b3J5OmZ1bmN0aW9uKGUpe3I9ZX19LGk9e2NyZWF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gcihlKX19
O2kuaW5qZWN0aW9uPW8sdC5leHBvcnRzPWl9LHt9XSw0OTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ug
c3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXt0cnl7dChuKX1jYXRjaChlKXtudWxsPT09byYmKG89
ZSl9fXZhciBvPW51bGwsaT17aW52b2tlR3VhcmRlZENhbGxiYWNrOnIsaW52b2tlR3VhcmRlZENh
bGxiYWNrV2l0aENhdGNoOnIscmV0aHJvd0NhdWdodEVycm9yOmZ1bmN0aW9uKCl7aWYobyl7dmFy
IGU9bzt0aHJvdyBvPW51bGwsZX19fTt0LmV4cG9ydHM9aX0se31dLDUwOltmdW5jdGlvbihlLHQs
bil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7by5lbnF1ZXVlRXZlbnRzKGUpLG8ucHJvY2Vz
c0V2ZW50UXVldWUoITEpfXZhciBvPWUoMTYpLGk9e2hhbmRsZVRvcExldmVsOmZ1bmN0aW9uKGUs
dCxuLGkpe3Ioby5leHRyYWN0RXZlbnRzKGUsdCxuLGkpKX19O3QuZXhwb3J0cz1pfSx7MTY6MTZ9
XSw1MTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2Zvcig7ZS5f
aG9zdFBhcmVudDspZT1lLl9ob3N0UGFyZW50O3ZhciB0PXAuZ2V0Tm9kZUZyb21JbnN0YW5jZShl
KSxuPXQucGFyZW50Tm9kZTtyZXR1cm4gcC5nZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShuKX1m
dW5jdGlvbiBvKGUsdCl7dGhpcy50b3BMZXZlbFR5cGU9ZSx0aGlzLm5hdGl2ZUV2ZW50PXQsdGhp
cy5hbmNlc3RvcnM9W119ZnVuY3Rpb24gaShlKXt2YXIgdD1mKGUubmF0aXZlRXZlbnQpLG49cC5n
ZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZSh0KSxvPW47ZG97ZS5hbmNlc3RvcnMucHVzaChvKSxv
PW8mJnIobyl9d2hpbGUobyk7Zm9yKHZhciBpPTA7aTxlLmFuY2VzdG9ycy5sZW5ndGg7aSsrKW49
ZS5hbmNlc3RvcnNbaV0sbS5faGFuZGxlVG9wTGV2ZWwoZS50b3BMZXZlbFR5cGUsbixlLm5hdGl2
ZUV2ZW50LGYoZS5uYXRpdmVFdmVudCkpfWZ1bmN0aW9uIGEoZSl7ZShoKHdpbmRvdykpfXZhciBz
PWUoMTQwKSx1PWUoMTE5KSxsPWUoMTIwKSxjPWUoMjQpLHA9ZSgzMiksZD1lKDcxKSxmPWUoMTAx
KSxoPWUoMTMxKTtzKG8ucHJvdG90eXBlLHtkZXN0cnVjdG9yOmZ1bmN0aW9uKCl7dGhpcy50b3BM
ZXZlbFR5cGU9bnVsbCx0aGlzLm5hdGl2ZUV2ZW50PW51bGwsdGhpcy5hbmNlc3RvcnMubGVuZ3Ro
PTB9fSksYy5hZGRQb29saW5nVG8obyxjLnR3b0FyZ3VtZW50UG9vbGVyKTt2YXIgbT17X2VuYWJs
ZWQ6ITAsX2hhbmRsZVRvcExldmVsOm51bGwsV0lORE9XX0hBTkRMRTpsLmNhblVzZURPTT93aW5k
b3c6bnVsbCxzZXRIYW5kbGVUb3BMZXZlbDpmdW5jdGlvbihlKXttLl9oYW5kbGVUb3BMZXZlbD1l
fSxzZXRFbmFibGVkOmZ1bmN0aW9uKGUpe20uX2VuYWJsZWQ9ISFlfSxpc0VuYWJsZWQ6ZnVuY3Rp
b24oKXtyZXR1cm4gbS5fZW5hYmxlZH0sdHJhcEJ1YmJsZWRFdmVudDpmdW5jdGlvbihlLHQsbil7
cmV0dXJuIG4/dS5saXN0ZW4obix0LG0uZGlzcGF0Y2hFdmVudC5iaW5kKG51bGwsZSkpOm51bGx9
LHRyYXBDYXB0dXJlZEV2ZW50OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj91LmNhcHR1cmUobix0
LG0uZGlzcGF0Y2hFdmVudC5iaW5kKG51bGwsZSkpOm51bGx9LG1vbml0b3JTY3JvbGxWYWx1ZTpm
dW5jdGlvbihlKXt2YXIgdD1hLmJpbmQobnVsbCxlKTt1Lmxpc3Rlbih3aW5kb3csInNjcm9sbCIs
dCl9LGRpc3BhdGNoRXZlbnQ6ZnVuY3Rpb24oZSx0KXtpZihtLl9lbmFibGVkKXt2YXIgbj1vLmdl
dFBvb2xlZChlLHQpO3RyeXtkLmJhdGNoZWRVcGRhdGVzKGksbil9ZmluYWxseXtvLnJlbGVhc2Uo
bil9fX19O3QuZXhwb3J0cz1tfSx7MTAxOjEwMSwxMTk6MTE5LDEyMDoxMjAsMTMxOjEzMSwxNDA6
MTQwLDI0OjI0LDMyOjMyLDcxOjcxfV0sNTI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7
dmFyIHI9e2xvZ1RvcExldmVsUmVuZGVyczohMX07dC5leHBvcnRzPXJ9LHt9XSw1MzpbZnVuY3Rp
b24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBzfHxhKCIxMTEiLGUu
dHlwZSksbmV3IHMoZSl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbmV3IHUoZSl9ZnVuY3Rpb24gaShl
KXtyZXR1cm4gZSBpbnN0YW5jZW9mIHV9dmFyIGE9ZSgxMTApLHM9KGUoMTM0KSxudWxsKSx1PW51
bGwsbD17aW5qZWN0R2VuZXJpY0NvbXBvbmVudENsYXNzOmZ1bmN0aW9uKGUpe3M9ZX0saW5qZWN0
VGV4dENvbXBvbmVudENsYXNzOmZ1bmN0aW9uKGUpe3U9ZX19LGM9e2NyZWF0ZUludGVybmFsQ29t
cG9uZW50OnIsY3JlYXRlSW5zdGFuY2VGb3JUZXh0Om8saXNUZXh0Q29tcG9uZW50OmksaW5qZWN0
aW9uOmx9O3QuZXhwb3J0cz1jfSx7MTEwOjExMCwxMzQ6MTM0fV0sNTQ6W2Z1bmN0aW9uKGUsdCxu
KXsidXNlIHN0cmljdCI7dmFyIHI9ZSgxMSksbz1lKDE2KSxpPWUoMTgpLGE9ZSgyOCkscz1lKDQ4
KSx1PWUoMjUpLGw9ZSg1MyksYz1lKDcxKSxwPXtDb21wb25lbnQ6YS5pbmplY3Rpb24sRE9NUHJv
cGVydHk6ci5pbmplY3Rpb24sRW1wdHlDb21wb25lbnQ6cy5pbmplY3Rpb24sRXZlbnRQbHVnaW5I
dWI6by5pbmplY3Rpb24sRXZlbnRQbHVnaW5VdGlsczppLmluamVjdGlvbixFdmVudEVtaXR0ZXI6
dS5pbmplY3Rpb24sSG9zdENvbXBvbmVudDpsLmluamVjdGlvbixVcGRhdGVzOmMuaW5qZWN0aW9u
fTt0LmV4cG9ydHM9cH0sezExOjExLDE2OjE2LDE4OjE4LDI1OjI1LDI4OjI4LDQ4OjQ4LDUzOjUz
LDcxOjcxfV0sNTU6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXty
ZXR1cm4gaShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZSl9dmFyIG89ZSgzOSksaT1lKDEyMyks
YT1lKDEyOCkscz1lKDEyOSksdT17aGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzOmZ1bmN0aW9uKGUp
e3ZhciB0PWUmJmUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gdCYm
KCJpbnB1dCI9PT10JiYidGV4dCI9PT1lLnR5cGV8fCJ0ZXh0YXJlYSI9PT10fHwidHJ1ZSI9PT1l
LmNvbnRlbnRFZGl0YWJsZSl9LGdldFNlbGVjdGlvbkluZm9ybWF0aW9uOmZ1bmN0aW9uKCl7dmFy
IGU9cygpO3JldHVybntmb2N1c2VkRWxlbTplLHNlbGVjdGlvblJhbmdlOnUuaGFzU2VsZWN0aW9u
Q2FwYWJpbGl0aWVzKGUpP3UuZ2V0U2VsZWN0aW9uKGUpOm51bGx9fSxyZXN0b3JlU2VsZWN0aW9u
OmZ1bmN0aW9uKGUpe3ZhciB0PXMoKSxuPWUuZm9jdXNlZEVsZW0sbz1lLnNlbGVjdGlvblJhbmdl
O3QhPT1uJiZyKG4pJiYodS5oYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMobikmJnUuc2V0U2VsZWN0
aW9uKG4sbyksYShuKSl9LGdldFNlbGVjdGlvbjpmdW5jdGlvbihlKXt2YXIgdDtpZigic2VsZWN0
aW9uU3RhcnQiaW4gZSl0PXtzdGFydDplLnNlbGVjdGlvblN0YXJ0LGVuZDplLnNlbGVjdGlvbkVu
ZH07ZWxzZSBpZihkb2N1bWVudC5zZWxlY3Rpb24mJmUubm9kZU5hbWUmJiJpbnB1dCI9PT1lLm5v
ZGVOYW1lLnRvTG93ZXJDYXNlKCkpe3ZhciBuPWRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5n
ZSgpO24ucGFyZW50RWxlbWVudCgpPT09ZSYmKHQ9e3N0YXJ0Oi1uLm1vdmVTdGFydCgiY2hhcmFj
dGVyIiwtZS52YWx1ZS5sZW5ndGgpLGVuZDotbi5tb3ZlRW5kKCJjaGFyYWN0ZXIiLC1lLnZhbHVl
Lmxlbmd0aCl9KX1lbHNlIHQ9by5nZXRPZmZzZXRzKGUpO3JldHVybiB0fHx7c3RhcnQ6MCxlbmQ6
MH19LHNldFNlbGVjdGlvbjpmdW5jdGlvbihlLHQpe3ZhciBuPXQuc3RhcnQscj10LmVuZDtpZih2
b2lkIDA9PT1yJiYocj1uKSwic2VsZWN0aW9uU3RhcnQiaW4gZSllLnNlbGVjdGlvblN0YXJ0PW4s
ZS5zZWxlY3Rpb25FbmQ9TWF0aC5taW4ocixlLnZhbHVlLmxlbmd0aCk7ZWxzZSBpZihkb2N1bWVu
dC5zZWxlY3Rpb24mJmUubm9kZU5hbWUmJiJpbnB1dCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNl
KCkpe3ZhciBpPWUuY3JlYXRlVGV4dFJhbmdlKCk7aS5jb2xsYXBzZSghMCksaS5tb3ZlU3RhcnQo
ImNoYXJhY3RlciIsbiksaS5tb3ZlRW5kKCJjaGFyYWN0ZXIiLHItbiksaS5zZWxlY3QoKX1lbHNl
IG8uc2V0T2Zmc2V0cyhlLHQpfX07dC5leHBvcnRzPXV9LHsxMjM6MTIzLDEyODoxMjgsMTI5OjEy
OSwzOTozOX1dLDU2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPXtyZW1vdmU6
ZnVuY3Rpb24oZSl7ZS5fcmVhY3RJbnRlcm5hbEluc3RhbmNlPXZvaWQgMH0sZ2V0OmZ1bmN0aW9u
KGUpe3JldHVybiBlLl9yZWFjdEludGVybmFsSW5zdGFuY2V9LGhhczpmdW5jdGlvbihlKXtyZXR1
cm4gdm9pZCAwIT09ZS5fcmVhY3RJbnRlcm5hbEluc3RhbmNlfSxzZXQ6ZnVuY3Rpb24oZSx0KXtl
Ll9yZWFjdEludGVybmFsSW5zdGFuY2U9dH19O3QuZXhwb3J0cz1yfSx7fV0sNTc6W2Z1bmN0aW9u
KGUsdCxuKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPXtkZWJ1Z1Rvb2w6bnVsbH19LHt9XSw1ODpb
ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDkyKSxvPS9ePFwhXC1cLS8saT17
Q0hFQ0tTVU1fQVRUUl9OQU1FOiJkYXRhLXJlYWN0LWNoZWNrc3VtIixhZGRDaGVja3N1bVRvTWFy
a3VwOmZ1bmN0aW9uKGUpe3ZhciB0PXIoZSk7cmV0dXJuIG8udGVzdChlKT9lOmUucmVwbGFjZSgv
XC8/Pi8sIiAiK2kuQ0hFQ0tTVU1fQVRUUl9OQU1FKyc9IicrdCsnIiQmJyl9LGNhblJldXNlTWFy
a3VwOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5nZXRBdHRyaWJ1dGUoaS5DSEVDS1NVTV9BVFRSX05B
TUUpO3JldHVybiBuPW4mJnBhcnNlSW50KG4sMTApLHIoZSk9PT1ufX07dC5leHBvcnRzPWl9LHs5
Mjo5Mn1dLDU5OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4p
e3JldHVybnt0eXBlOiJJTlNFUlRfTUFSS1VQIixjb250ZW50OmUsZnJvbUluZGV4Om51bGwsZnJv
bU5vZGU6bnVsbCx0b0luZGV4Om4sYWZ0ZXJOb2RlOnR9fWZ1bmN0aW9uIG8oZSx0LG4pe3JldHVy
bnt0eXBlOiJNT1ZFX0VYSVNUSU5HIixjb250ZW50Om51bGwsZnJvbUluZGV4OmUuX21vdW50SW5k
ZXgsZnJvbU5vZGU6ZC5nZXRIb3N0Tm9kZShlKSx0b0luZGV4Om4sYWZ0ZXJOb2RlOnR9fWZ1bmN0
aW9uIGkoZSx0KXtyZXR1cm57dHlwZToiUkVNT1ZFX05PREUiLGNvbnRlbnQ6bnVsbCxmcm9tSW5k
ZXg6ZS5fbW91bnRJbmRleCxmcm9tTm9kZTp0LHRvSW5kZXg6bnVsbCxhZnRlck5vZGU6bnVsbH19
ZnVuY3Rpb24gYShlKXtyZXR1cm57dHlwZToiU0VUX01BUktVUCIsY29udGVudDplLGZyb21JbmRl
eDpudWxsLGZyb21Ob2RlOm51bGwsdG9JbmRleDpudWxsLGFmdGVyTm9kZTpudWxsfX1mdW5jdGlv
biBzKGUpe3JldHVybnt0eXBlOiJURVhUX0NPTlRFTlQiLGNvbnRlbnQ6ZSxmcm9tSW5kZXg6bnVs
bCxmcm9tTm9kZTpudWxsLHRvSW5kZXg6bnVsbCxhZnRlck5vZGU6bnVsbH19ZnVuY3Rpb24gdShl
LHQpe3JldHVybiB0JiYoZT1lfHxbXSxlLnB1c2godCkpLGV9ZnVuY3Rpb24gbChlLHQpe3AucHJv
Y2Vzc0NoaWxkcmVuVXBkYXRlcyhlLHQpfXZhciBjPWUoMTEwKSxwPWUoMjgpLGQ9KGUoNTYpLGUo
NTcpLGUoMTE2KSxlKDY0KSksZj1lKDI2KSxoPShlKDEyNiksZSg5NikpLG09KGUoMTM0KSx7TWl4
aW46e19yZWNvbmNpbGVySW5zdGFudGlhdGVDaGlsZHJlbjpmdW5jdGlvbihlLHQsbil7cmV0dXJu
IGYuaW5zdGFudGlhdGVDaGlsZHJlbihlLHQsbil9LF9yZWNvbmNpbGVyVXBkYXRlQ2hpbGRyZW46
ZnVuY3Rpb24oZSx0LG4scixvLGkpe3ZhciBhO3JldHVybiBhPWgodCwwKSxmLnVwZGF0ZUNoaWxk
cmVuKGUsYSxuLHIsbyx0aGlzLHRoaXMuX2hvc3RDb250YWluZXJJbmZvLGksMCksYX0sbW91bnRD
aGlsZHJlbjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5fcmVjb25jaWxlckluc3RhbnRpYXRl
Q2hpbGRyZW4oZSx0LG4pO3RoaXMuX3JlbmRlcmVkQ2hpbGRyZW49cjt2YXIgbz1bXSxpPTA7Zm9y
KHZhciBhIGluIHIpaWYoci5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIHM9clthXSx1PWQubW91bnRD
b21wb25lbnQocyx0LHRoaXMsdGhpcy5faG9zdENvbnRhaW5lckluZm8sbiwwKTtzLl9tb3VudElu
ZGV4PWkrKyxvLnB1c2godSl9cmV0dXJuIG99LHVwZGF0ZVRleHRDb250ZW50OmZ1bmN0aW9uKGUp
e3ZhciB0PXRoaXMuX3JlbmRlcmVkQ2hpbGRyZW47Zi51bm1vdW50Q2hpbGRyZW4odCwhMSk7Zm9y
KHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmYygiMTE4Iik7bCh0aGlzLFtzKGUpXSl9
LHVwZGF0ZU1hcmt1cDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9yZW5kZXJlZENoaWxkcmVuO2Yu
dW5tb3VudENoaWxkcmVuKHQsITEpO2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikm
JmMoIjExOCIpO2wodGhpcyxbYShlKV0pfSx1cGRhdGVDaGlsZHJlbjpmdW5jdGlvbihlLHQsbil7
dGhpcy5fdXBkYXRlQ2hpbGRyZW4oZSx0LG4pfSxfdXBkYXRlQ2hpbGRyZW46ZnVuY3Rpb24oZSx0
LG4pe3ZhciByPXRoaXMuX3JlbmRlcmVkQ2hpbGRyZW4sbz17fSxpPVtdLGE9dGhpcy5fcmVjb25j
aWxlclVwZGF0ZUNoaWxkcmVuKHIsZSxpLG8sdCxuKTtpZihhfHxyKXt2YXIgcyxjPW51bGwscD0w
LGY9MCxoPTAsbT1udWxsO2ZvcihzIGluIGEpaWYoYS5oYXNPd25Qcm9wZXJ0eShzKSl7dmFyIHY9
ciYmcltzXSxnPWFbc107dj09PWc/KGM9dShjLHRoaXMubW92ZUNoaWxkKHYsbSxwLGYpKSxmPU1h
dGgubWF4KHYuX21vdW50SW5kZXgsZiksdi5fbW91bnRJbmRleD1wKToodiYmKGY9TWF0aC5tYXgo
di5fbW91bnRJbmRleCxmKSksYz11KGMsdGhpcy5fbW91bnRDaGlsZEF0SW5kZXgoZyxpW2hdLG0s
cCx0LG4pKSxoKyspLHArKyxtPWQuZ2V0SG9zdE5vZGUoZyl9Zm9yKHMgaW4gbylvLmhhc093blBy
b3BlcnR5KHMpJiYoYz11KGMsdGhpcy5fdW5tb3VudENoaWxkKHJbc10sb1tzXSkpKTtjJiZsKHRo
aXMsYyksdGhpcy5fcmVuZGVyZWRDaGlsZHJlbj1hfX0sdW5tb3VudENoaWxkcmVuOmZ1bmN0aW9u
KGUpe3ZhciB0PXRoaXMuX3JlbmRlcmVkQ2hpbGRyZW47Zi51bm1vdW50Q2hpbGRyZW4odCxlKSx0
aGlzLl9yZW5kZXJlZENoaWxkcmVuPW51bGx9LG1vdmVDaGlsZDpmdW5jdGlvbihlLHQsbixyKXtp
ZihlLl9tb3VudEluZGV4PHIpcmV0dXJuIG8oZSx0LG4pfSxjcmVhdGVDaGlsZDpmdW5jdGlvbihl
LHQsbil7cmV0dXJuIHIobix0LGUuX21vdW50SW5kZXgpfSxyZW1vdmVDaGlsZDpmdW5jdGlvbihl
LHQpe3JldHVybiBpKGUsdCl9LF9tb3VudENoaWxkQXRJbmRleDpmdW5jdGlvbihlLHQsbixyLG8s
aSl7cmV0dXJuIGUuX21vdW50SW5kZXg9cix0aGlzLmNyZWF0ZUNoaWxkKGUsbix0KX0sX3VubW91
bnRDaGlsZDpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucmVtb3ZlQ2hpbGQoZSx0KTtyZXR1cm4g
ZS5fbW91bnRJbmRleD1udWxsLG59fX0pO3QuZXhwb3J0cz1tfSx7MTEwOjExMCwxMTY6MTE2LDEy
NjoxMjYsMTM0OjEzNCwyNjoyNiwyODoyOCw1Njo1Niw1Nzo1Nyw2NDo2NCw5Njo5Nn1dLDYwOltm
dW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMTEwKSxvPWUoMTE3KSxpPShlKDEz
NCkse0hPU1Q6MCxDT01QT1NJVEU6MSxFTVBUWToyLGdldFR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJu
IG51bGw9PT1lfHwhMT09PWU/aS5FTVBUWTpvLmlzVmFsaWRFbGVtZW50KGUpPyJmdW5jdGlvbiI9
PXR5cGVvZiBlLnR5cGU/aS5DT01QT1NJVEU6aS5IT1NUOnZvaWQgcigiMjYiLGUpfX0pO3QuZXhw
b3J0cz1pfSx7MTEwOjExMCwxMTc6MTE3LDEzNDoxMzR9XSw2MTpbZnVuY3Rpb24oZSx0LG4peyJ1
c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiEoIWV8fCJmdW5jdGlvbiIhPXR5cGVvZiBl
LmF0dGFjaFJlZnx8ImZ1bmN0aW9uIiE9dHlwZW9mIGUuZGV0YWNoUmVmKX12YXIgbz1lKDExMCks
aT0oZSgxMzQpLHthZGRDb21wb25lbnRBc1JlZlRvOmZ1bmN0aW9uKGUsdCxuKXtyKG4pfHxvKCIx
MTkiKSxuLmF0dGFjaFJlZih0LGUpfSxyZW1vdmVDb21wb25lbnRBc1JlZkZyb206ZnVuY3Rpb24o
ZSx0LG4pe3Iobil8fG8oIjEyMCIpO3ZhciBpPW4uZ2V0UHVibGljSW5zdGFuY2UoKTtpJiZpLnJl
ZnNbdF09PT1lLmdldFB1YmxpY0luc3RhbmNlKCkmJm4uZGV0YWNoUmVmKHQpfX0pO3QuZXhwb3J0
cz1pfSx7MTEwOjExMCwxMzQ6MTM0fV0sNjI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7
dC5leHBvcnRzPSJTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCJ9
LHt9XSw2MzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3RoaXMu
cmVpbml0aWFsaXplVHJhbnNhY3Rpb24oKSx0aGlzLnJlbmRlclRvU3RhdGljTWFya3VwPSExLHRo
aXMucmVhY3RNb3VudFJlYWR5PWkuZ2V0UG9vbGVkKG51bGwpLHRoaXMudXNlQ3JlYXRlRWxlbWVu
dD1lfXZhciBvPWUoMTQwKSxpPWUoNiksYT1lKDI0KSxzPWUoMjUpLHU9ZSg1NSksbD0oZSg1Nyks
ZSg4OSkpLGM9ZSg3MCkscD17aW5pdGlhbGl6ZTp1LmdldFNlbGVjdGlvbkluZm9ybWF0aW9uLGNs
b3NlOnUucmVzdG9yZVNlbGVjdGlvbn0sZD17aW5pdGlhbGl6ZTpmdW5jdGlvbigpe3ZhciBlPXMu
aXNFbmFibGVkKCk7cmV0dXJuIHMuc2V0RW5hYmxlZCghMSksZX0sY2xvc2U6ZnVuY3Rpb24oZSl7
cy5zZXRFbmFibGVkKGUpfX0sZj17aW5pdGlhbGl6ZTpmdW5jdGlvbigpe3RoaXMucmVhY3RNb3Vu
dFJlYWR5LnJlc2V0KCl9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy5yZWFjdE1vdW50UmVhZHkubm90
aWZ5QWxsKCl9fSxoPVtwLGQsZl0sbT17Z2V0VHJhbnNhY3Rpb25XcmFwcGVyczpmdW5jdGlvbigp
e3JldHVybiBofSxnZXRSZWFjdE1vdW50UmVhZHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFj
dE1vdW50UmVhZHl9LGdldFVwZGF0ZVF1ZXVlOmZ1bmN0aW9uKCl7cmV0dXJuIGN9LGNoZWNrcG9p
bnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFjdE1vdW50UmVhZHkuY2hlY2twb2ludCgpfSxy
b2xsYmFjazpmdW5jdGlvbihlKXt0aGlzLnJlYWN0TW91bnRSZWFkeS5yb2xsYmFjayhlKX0sZGVz
dHJ1Y3RvcjpmdW5jdGlvbigpe2kucmVsZWFzZSh0aGlzLnJlYWN0TW91bnRSZWFkeSksdGhpcy5y
ZWFjdE1vdW50UmVhZHk9bnVsbH19O28oci5wcm90b3R5cGUsbCxtKSxhLmFkZFBvb2xpbmdUbyhy
KSx0LmV4cG9ydHM9cn0sezE0MDoxNDAsMjQ6MjQsMjU6MjUsNTU6NTUsNTc6NTcsNjo2LDcwOjcw
LDg5Ojg5fV0sNjQ6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe28u
YXR0YWNoUmVmcyh0aGlzLHRoaXMuX2N1cnJlbnRFbGVtZW50KX12YXIgbz1lKDY1KSxpPShlKDU3
KSxlKDEzOSkse21vdW50Q29tcG9uZW50OmZ1bmN0aW9uKGUsdCxuLG8saSxhKXt2YXIgcz1lLm1v
dW50Q29tcG9uZW50KHQsbixvLGksYSk7cmV0dXJuIGUuX2N1cnJlbnRFbGVtZW50JiZudWxsIT1l
Ll9jdXJyZW50RWxlbWVudC5yZWYmJnQuZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShyLGUp
LHN9LGdldEhvc3ROb2RlOmZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEhvc3ROb2RlKCl9LHVubW91
bnRDb21wb25lbnQ6ZnVuY3Rpb24oZSx0KXtvLmRldGFjaFJlZnMoZSxlLl9jdXJyZW50RWxlbWVu
dCksZS51bm1vdW50Q29tcG9uZW50KHQpfSxyZWNlaXZlQ29tcG9uZW50OmZ1bmN0aW9uKGUsdCxu
LGkpe3ZhciBhPWUuX2N1cnJlbnRFbGVtZW50O2lmKHQhPT1hfHxpIT09ZS5fY29udGV4dCl7dmFy
IHM9by5zaG91bGRVcGRhdGVSZWZzKGEsdCk7cyYmby5kZXRhY2hSZWZzKGUsYSksZS5yZWNlaXZl
Q29tcG9uZW50KHQsbixpKSxzJiZlLl9jdXJyZW50RWxlbWVudCYmbnVsbCE9ZS5fY3VycmVudEVs
ZW1lbnQucmVmJiZuLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUocixlKX19LHBlcmZvcm1V
cGRhdGVJZk5lY2Vzc2FyeTpmdW5jdGlvbihlLHQsbil7ZS5fdXBkYXRlQmF0Y2hOdW1iZXI9PT1u
JiZlLnBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeSh0KX19KTt0LmV4cG9ydHM9aX0sezEzOToxMzks
NTc6NTcsNjU6NjV9XSw2NTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBy
KGUsdCxuKXsiZnVuY3Rpb24iPT10eXBlb2YgZT9lKHQuZ2V0UHVibGljSW5zdGFuY2UoKSk6aS5h
ZGRDb21wb25lbnRBc1JlZlRvKHQsZSxuKX1mdW5jdGlvbiBvKGUsdCxuKXsiZnVuY3Rpb24iPT10
eXBlb2YgZT9lKG51bGwpOmkucmVtb3ZlQ29tcG9uZW50QXNSZWZGcm9tKHQsZSxuKX12YXIgaT1l
KDYxKSxhPXt9O2EuYXR0YWNoUmVmcz1mdW5jdGlvbihlLHQpe2lmKG51bGwhPT10JiYib2JqZWN0
Ij09dHlwZW9mIHQpe3ZhciBuPXQucmVmO251bGwhPW4mJnIobixlLHQuX293bmVyKX19LGEuc2hv
dWxkVXBkYXRlUmVmcz1mdW5jdGlvbihlLHQpe3ZhciBuPW51bGwscj1udWxsO251bGwhPT1lJiYi
b2JqZWN0Ij09dHlwZW9mIGUmJihuPWUucmVmLHI9ZS5fb3duZXIpO3ZhciBvPW51bGwsaT1udWxs
O3JldHVybiBudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0JiYobz10LnJlZixpPXQuX293bmVy
KSxuIT09b3x8InN0cmluZyI9PXR5cGVvZiBvJiZpIT09cn0sYS5kZXRhY2hSZWZzPWZ1bmN0aW9u
KGUsdCl7aWYobnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdCl7dmFyIG49dC5yZWY7bnVsbCE9
biYmbyhuLGUsdC5fb3duZXIpfX0sdC5leHBvcnRzPWF9LHs2MTo2MX1dLDY2OltmdW5jdGlvbihl
LHQsbil7InVzZSBzdHJpY3QiO3ZhciByPXtpc0JhdGNoaW5nVXBkYXRlczohMSxiYXRjaGVkVXBk
YXRlczpmdW5jdGlvbihlKXt9fTt0LmV4cG9ydHM9cn0se31dLDY3OltmdW5jdGlvbihlLHQsbil7
InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbjt0cnl7cmV0dXJuIGguaW5qZWN0aW9u
LmluamVjdEJhdGNoaW5nU3RyYXRlZ3koZCksbj1mLmdldFBvb2xlZCh0KSxnKyssbi5wZXJmb3Jt
KGZ1bmN0aW9uKCl7dmFyIHI9dihlLCEwKSxvPXAubW91bnRDb21wb25lbnQocixuLG51bGwsdSgp
LG0sMCk7cmV0dXJuIHR8fChvPWMuYWRkQ2hlY2tzdW1Ub01hcmt1cChvKSksb30sbnVsbCl9Zmlu
YWxseXtnLS0sZi5yZWxlYXNlKG4pLGd8fGguaW5qZWN0aW9uLmluamVjdEJhdGNoaW5nU3RyYXRl
Z3kobCl9fWZ1bmN0aW9uIG8oZSl7cmV0dXJuIHMuaXNWYWxpZEVsZW1lbnQoZSl8fGEoIjQ2Iiks
cihlLCExKX1mdW5jdGlvbiBpKGUpe3JldHVybiBzLmlzVmFsaWRFbGVtZW50KGUpfHxhKCI0NyIp
LHIoZSwhMCl9dmFyIGE9ZSgxMTApLHM9ZSgxMTcpLHU9ZSgzMyksbD1lKDQ1KSxjPShlKDU3KSxl
KDU4KSkscD1lKDY0KSxkPWUoNjYpLGY9ZSg2OCksaD1lKDcxKSxtPWUoMTI3KSx2PWUoMTA2KSxn
PShlKDEzNCksMCk7dC5leHBvcnRzPXtyZW5kZXJUb1N0cmluZzpvLHJlbmRlclRvU3RhdGljTWFy
a3VwOml9fSx7MTA2OjEwNiwxMTA6MTEwLDExNzoxMTcsMTI3OjEyNywxMzQ6MTM0LDMzOjMzLDQ1
OjQ1LDU3OjU3LDU4OjU4LDY0OjY0LDY2OjY2LDY4OjY4LDcxOjcxfV0sNjg6W2Z1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt0aGlzLnJlaW5pdGlhbGl6ZVRyYW5zYWN0
aW9uKCksdGhpcy5yZW5kZXJUb1N0YXRpY01hcmt1cD1lLHRoaXMudXNlQ3JlYXRlRWxlbWVudD0h
MSx0aGlzLnVwZGF0ZVF1ZXVlPW5ldyBzKHRoaXMpfXZhciBvPWUoMTQwKSxpPWUoMjQpLGE9ZSg4
OSkscz0oZSg1NyksZSg2OSkpLHU9W10sbD17ZW5xdWV1ZTpmdW5jdGlvbigpe319LGM9e2dldFRy
YW5zYWN0aW9uV3JhcHBlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gdX0sZ2V0UmVhY3RNb3VudFJlYWR5
OmZ1bmN0aW9uKCl7cmV0dXJuIGx9LGdldFVwZGF0ZVF1ZXVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXMudXBkYXRlUXVldWV9LGRlc3RydWN0b3I6ZnVuY3Rpb24oKXt9LGNoZWNrcG9pbnQ6ZnVuY3Rp
b24oKXt9LHJvbGxiYWNrOmZ1bmN0aW9uKCl7fX07byhyLnByb3RvdHlwZSxhLGMpLGkuYWRkUG9v
bGluZ1RvKHIpLHQuZXhwb3J0cz1yfSx7MTQwOjE0MCwyNDoyNCw1Nzo1Nyw2OTo2OSw4OTo4OX1d
LDY5OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZighKGUg
aW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFz
IGEgZnVuY3Rpb24iKX12YXIgbz1lKDcwKSxpPShlKDEzOSksZnVuY3Rpb24oKXtmdW5jdGlvbiBl
KHQpe3IodGhpcyxlKSx0aGlzLnRyYW5zYWN0aW9uPXR9cmV0dXJuIGUucHJvdG90eXBlLmlzTW91
bnRlZD1mdW5jdGlvbihlKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuZW5xdWV1ZUNhbGxiYWNrPWZ1
bmN0aW9uKGUsdCxuKXt0aGlzLnRyYW5zYWN0aW9uLmlzSW5UcmFuc2FjdGlvbigpJiZvLmVucXVl
dWVDYWxsYmFjayhlLHQsbil9LGUucHJvdG90eXBlLmVucXVldWVGb3JjZVVwZGF0ZT1mdW5jdGlv
bihlKXt0aGlzLnRyYW5zYWN0aW9uLmlzSW5UcmFuc2FjdGlvbigpJiZvLmVucXVldWVGb3JjZVVw
ZGF0ZShlKX0sZS5wcm90b3R5cGUuZW5xdWV1ZVJlcGxhY2VTdGF0ZT1mdW5jdGlvbihlLHQpe3Ro
aXMudHJhbnNhY3Rpb24uaXNJblRyYW5zYWN0aW9uKCkmJm8uZW5xdWV1ZVJlcGxhY2VTdGF0ZShl
LHQpfSxlLnByb3RvdHlwZS5lbnF1ZXVlU2V0U3RhdGU9ZnVuY3Rpb24oZSx0KXt0aGlzLnRyYW5z
YWN0aW9uLmlzSW5UcmFuc2FjdGlvbigpJiZvLmVucXVldWVTZXRTdGF0ZShlLHQpfSxlfSgpKTt0
LmV4cG9ydHM9aX0sezEzOToxMzksNzA6NzB9XSw3MDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3Ry
aWN0IjtmdW5jdGlvbiByKGUpe3UuZW5xdWV1ZVVwZGF0ZShlKX1mdW5jdGlvbiBvKGUpe3ZhciB0
PXR5cGVvZiBlO2lmKCJvYmplY3QiIT09dClyZXR1cm4gdDt2YXIgbj1lLmNvbnN0cnVjdG9yJiZl
LmNvbnN0cnVjdG9yLm5hbWV8fHQscj1PYmplY3Qua2V5cyhlKTtyZXR1cm4gci5sZW5ndGg+MCYm
ci5sZW5ndGg8MjA/bisiIChrZXlzOiAiK3Iuam9pbigiLCAiKSsiKSI6bn1mdW5jdGlvbiBpKGUs
dCl7dmFyIG49cy5nZXQoZSk7cmV0dXJuIG58fG51bGx9dmFyIGE9ZSgxMTApLHM9KGUoMTE2KSxl
KDU2KSksdT0oZSg1NyksZSg3MSkpLGw9KGUoMTM0KSxlKDEzOSkse2lzTW91bnRlZDpmdW5jdGlv
bihlKXt2YXIgdD1zLmdldChlKTtyZXR1cm4hIXQmJiEhdC5fcmVuZGVyZWRDb21wb25lbnR9LGVu
cXVldWVDYWxsYmFjazpmdW5jdGlvbihlLHQsbil7bC52YWxpZGF0ZUNhbGxiYWNrKHQsbik7dmFy
IG89aShlKTtpZighbylyZXR1cm4gbnVsbDtvLl9wZW5kaW5nQ2FsbGJhY2tzP28uX3BlbmRpbmdD
YWxsYmFja3MucHVzaCh0KTpvLl9wZW5kaW5nQ2FsbGJhY2tzPVt0XSxyKG8pfSxlbnF1ZXVlQ2Fs
bGJhY2tJbnRlcm5hbDpmdW5jdGlvbihlLHQpe2UuX3BlbmRpbmdDYWxsYmFja3M/ZS5fcGVuZGlu
Z0NhbGxiYWNrcy5wdXNoKHQpOmUuX3BlbmRpbmdDYWxsYmFja3M9W3RdLHIoZSl9LGVucXVldWVG
b3JjZVVwZGF0ZTpmdW5jdGlvbihlKXt2YXIgdD1pKGUsImZvcmNlVXBkYXRlIik7dCYmKHQuX3Bl
bmRpbmdGb3JjZVVwZGF0ZT0hMCxyKHQpKX0sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbihl
LHQsbil7dmFyIG89aShlLCJyZXBsYWNlU3RhdGUiKTtvJiYoby5fcGVuZGluZ1N0YXRlUXVldWU9
W3RdLG8uX3BlbmRpbmdSZXBsYWNlU3RhdGU9ITAsdm9pZCAwIT09biYmbnVsbCE9PW4mJihsLnZh
bGlkYXRlQ2FsbGJhY2sobiwicmVwbGFjZVN0YXRlIiksby5fcGVuZGluZ0NhbGxiYWNrcz9vLl9w
ZW5kaW5nQ2FsbGJhY2tzLnB1c2gobik6by5fcGVuZGluZ0NhbGxiYWNrcz1bbl0pLHIobykpfSxl
bnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1pKGUsInNldFN0YXRlIik7biYmKChu
Ll9wZW5kaW5nU3RhdGVRdWV1ZXx8KG4uX3BlbmRpbmdTdGF0ZVF1ZXVlPVtdKSkucHVzaCh0KSxy
KG4pKX0sZW5xdWV1ZUVsZW1lbnRJbnRlcm5hbDpmdW5jdGlvbihlLHQsbil7ZS5fcGVuZGluZ0Vs
ZW1lbnQ9dCxlLl9jb250ZXh0PW4scihlKX0sdmFsaWRhdGVDYWxsYmFjazpmdW5jdGlvbihlLHQp
e2UmJiJmdW5jdGlvbiIhPXR5cGVvZiBlJiZhKCIxMjIiLHQsbyhlKSl9fSk7dC5leHBvcnRzPWx9
LHsxMTA6MTEwLDExNjoxMTYsMTM0OjEzNCwxMzk6MTM5LDU2OjU2LDU3OjU3LDcxOjcxfV0sNzE6
W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe1AuUmVhY3RSZWNvbmNp
bGVUcmFuc2FjdGlvbiYmYnx8YygiMTIzIil9ZnVuY3Rpb24gbygpe3RoaXMucmVpbml0aWFsaXpl
VHJhbnNhY3Rpb24oKSx0aGlzLmRpcnR5Q29tcG9uZW50c0xlbmd0aD1udWxsLHRoaXMuY2FsbGJh
Y2tRdWV1ZT1kLmdldFBvb2xlZCgpLHRoaXMucmVjb25jaWxlVHJhbnNhY3Rpb249UC5SZWFjdFJl
Y29uY2lsZVRyYW5zYWN0aW9uLmdldFBvb2xlZCghMCl9ZnVuY3Rpb24gaShlLHQsbixvLGksYSl7
cmV0dXJuIHIoKSxiLmJhdGNoZWRVcGRhdGVzKGUsdCxuLG8saSxhKX1mdW5jdGlvbiBhKGUsdCl7
cmV0dXJuIGUuX21vdW50T3JkZXItdC5fbW91bnRPcmRlcn1mdW5jdGlvbiBzKGUpe3ZhciB0PWUu
ZGlydHlDb21wb25lbnRzTGVuZ3RoO3QhPT1nLmxlbmd0aCYmYygiMTI0Iix0LGcubGVuZ3RoKSxn
LnNvcnQoYSkseSsrO2Zvcih2YXIgbj0wO248dDtuKyspe3ZhciByPWdbbl0sbz1yLl9wZW5kaW5n
Q2FsbGJhY2tzO3IuX3BlbmRpbmdDYWxsYmFja3M9bnVsbDt2YXIgaTtpZihoLmxvZ1RvcExldmVs
UmVuZGVycyl7dmFyIHM9cjtyLl9jdXJyZW50RWxlbWVudC50eXBlLmlzUmVhY3RUb3BMZXZlbFdy
YXBwZXImJihzPXIuX3JlbmRlcmVkQ29tcG9uZW50KSxpPSJSZWFjdCB1cGRhdGU6ICIrcy5nZXRO
YW1lKCksY29uc29sZS50aW1lKGkpfWlmKG0ucGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5KHIsZS5y
ZWNvbmNpbGVUcmFuc2FjdGlvbix5KSxpJiZjb25zb2xlLnRpbWVFbmQoaSksbylmb3IodmFyIHU9
MDt1PG8ubGVuZ3RoO3UrKyllLmNhbGxiYWNrUXVldWUuZW5xdWV1ZShvW3VdLHIuZ2V0UHVibGlj
SW5zdGFuY2UoKSl9fWZ1bmN0aW9uIHUoZSl7aWYocigpLCFiLmlzQmF0Y2hpbmdVcGRhdGVzKXJl
dHVybiB2b2lkIGIuYmF0Y2hlZFVwZGF0ZXModSxlKTtnLnB1c2goZSksbnVsbD09ZS5fdXBkYXRl
QmF0Y2hOdW1iZXImJihlLl91cGRhdGVCYXRjaE51bWJlcj15KzEpfWZ1bmN0aW9uIGwoZSx0KXti
LmlzQmF0Y2hpbmdVcGRhdGVzfHxjKCIxMjUiKSxfLmVucXVldWUoZSx0KSxDPSEwfXZhciBjPWUo
MTEwKSxwPWUoMTQwKSxkPWUoNiksZj1lKDI0KSxoPWUoNTIpLG09ZSg2NCksdj1lKDg5KSxnPShl
KDEzNCksW10pLHk9MCxfPWQuZ2V0UG9vbGVkKCksQz0hMSxiPW51bGwsRT17aW5pdGlhbGl6ZTpm
dW5jdGlvbigpe3RoaXMuZGlydHlDb21wb25lbnRzTGVuZ3RoPWcubGVuZ3RofSxjbG9zZTpmdW5j
dGlvbigpe3RoaXMuZGlydHlDb21wb25lbnRzTGVuZ3RoIT09Zy5sZW5ndGg/KGcuc3BsaWNlKDAs
dGhpcy5kaXJ0eUNvbXBvbmVudHNMZW5ndGgpLGsoKSk6Zy5sZW5ndGg9MH19LHg9e2luaXRpYWxp
emU6ZnVuY3Rpb24oKXt0aGlzLmNhbGxiYWNrUXVldWUucmVzZXQoKX0sY2xvc2U6ZnVuY3Rpb24o
KXt0aGlzLmNhbGxiYWNrUXVldWUubm90aWZ5QWxsKCl9fSx3PVtFLHhdO3Aoby5wcm90b3R5cGUs
dix7Z2V0VHJhbnNhY3Rpb25XcmFwcGVyczpmdW5jdGlvbigpe3JldHVybiB3fSxkZXN0cnVjdG9y
OmZ1bmN0aW9uKCl7dGhpcy5kaXJ0eUNvbXBvbmVudHNMZW5ndGg9bnVsbCxkLnJlbGVhc2UodGhp
cy5jYWxsYmFja1F1ZXVlKSx0aGlzLmNhbGxiYWNrUXVldWU9bnVsbCxQLlJlYWN0UmVjb25jaWxl
VHJhbnNhY3Rpb24ucmVsZWFzZSh0aGlzLnJlY29uY2lsZVRyYW5zYWN0aW9uKSx0aGlzLnJlY29u
Y2lsZVRyYW5zYWN0aW9uPW51bGx9LHBlcmZvcm06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2LnBl
cmZvcm0uY2FsbCh0aGlzLHRoaXMucmVjb25jaWxlVHJhbnNhY3Rpb24ucGVyZm9ybSx0aGlzLnJl
Y29uY2lsZVRyYW5zYWN0aW9uLGUsdCxuKX19KSxmLmFkZFBvb2xpbmdUbyhvKTt2YXIgaz1mdW5j
dGlvbigpe2Zvcig7Zy5sZW5ndGh8fEM7KXtpZihnLmxlbmd0aCl7dmFyIGU9by5nZXRQb29sZWQo
KTtlLnBlcmZvcm0ocyxudWxsLGUpLG8ucmVsZWFzZShlKX1pZihDKXtDPSExO3ZhciB0PV87Xz1k
LmdldFBvb2xlZCgpLHQubm90aWZ5QWxsKCksZC5yZWxlYXNlKHQpfX19LFQ9e2luamVjdFJlY29u
Y2lsZVRyYW5zYWN0aW9uOmZ1bmN0aW9uKGUpe2V8fGMoIjEyNiIpLFAuUmVhY3RSZWNvbmNpbGVU
cmFuc2FjdGlvbj1lfSxpbmplY3RCYXRjaGluZ1N0cmF0ZWd5OmZ1bmN0aW9uKGUpe2V8fGMoIjEy
NyIpLCJmdW5jdGlvbiIhPXR5cGVvZiBlLmJhdGNoZWRVcGRhdGVzJiZjKCIxMjgiKSwiYm9vbGVh
biIhPXR5cGVvZiBlLmlzQmF0Y2hpbmdVcGRhdGVzJiZjKCIxMjkiKSxiPWV9fSxQPXtSZWFjdFJl
Y29uY2lsZVRyYW5zYWN0aW9uOm51bGwsYmF0Y2hlZFVwZGF0ZXM6aSxlbnF1ZXVlVXBkYXRlOnUs
Zmx1c2hCYXRjaGVkVXBkYXRlczprLGluamVjdGlvbjpULGFzYXA6bH07dC5leHBvcnRzPVB9LHsx
MTA6MTEwLDEzNDoxMzQsMTQwOjE0MCwyNDoyNCw1Mjo1Miw2OjYsNjQ6NjQsODk6ODl9XSw3Mjpb
ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9IjE1LjUuNCJ9LHt9XSw3Mzpb
ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj17eGxpbms6Imh0dHA6Ly93d3cudzMu
b3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNl
In0sbz17YWNjZW50SGVpZ2h0OiJhY2NlbnQtaGVpZ2h0IixhY2N1bXVsYXRlOjAsYWRkaXRpdmU6
MCxhbGlnbm1lbnRCYXNlbGluZToiYWxpZ25tZW50LWJhc2VsaW5lIixhbGxvd1Jlb3JkZXI6ImFs
bG93UmVvcmRlciIsYWxwaGFiZXRpYzowLGFtcGxpdHVkZTowLGFyYWJpY0Zvcm06ImFyYWJpYy1m
b3JtIixhc2NlbnQ6MCxhdHRyaWJ1dGVOYW1lOiJhdHRyaWJ1dGVOYW1lIixhdHRyaWJ1dGVUeXBl
OiJhdHRyaWJ1dGVUeXBlIixhdXRvUmV2ZXJzZToiYXV0b1JldmVyc2UiLGF6aW11dGg6MCxiYXNl
RnJlcXVlbmN5OiJiYXNlRnJlcXVlbmN5IixiYXNlUHJvZmlsZToiYmFzZVByb2ZpbGUiLGJhc2Vs
aW5lU2hpZnQ6ImJhc2VsaW5lLXNoaWZ0IixiYm94OjAsYmVnaW46MCxiaWFzOjAsYnk6MCxjYWxj
TW9kZToiY2FsY01vZGUiLGNhcEhlaWdodDoiY2FwLWhlaWdodCIsY2xpcDowLGNsaXBQYXRoOiJj
bGlwLXBhdGgiLGNsaXBSdWxlOiJjbGlwLXJ1bGUiLGNsaXBQYXRoVW5pdHM6ImNsaXBQYXRoVW5p
dHMiLGNvbG9ySW50ZXJwb2xhdGlvbjoiY29sb3ItaW50ZXJwb2xhdGlvbiIsY29sb3JJbnRlcnBv
bGF0aW9uRmlsdGVyczoiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIixjb2xvclByb2ZpbGU6
ImNvbG9yLXByb2ZpbGUiLGNvbG9yUmVuZGVyaW5nOiJjb2xvci1yZW5kZXJpbmciLGNvbnRlbnRT
Y3JpcHRUeXBlOiJjb250ZW50U2NyaXB0VHlwZSIsY29udGVudFN0eWxlVHlwZToiY29udGVudFN0
eWxlVHlwZSIsY3Vyc29yOjAsY3g6MCxjeTowLGQ6MCxkZWNlbGVyYXRlOjAsZGVzY2VudDowLGRp
ZmZ1c2VDb25zdGFudDoiZGlmZnVzZUNvbnN0YW50IixkaXJlY3Rpb246MCxkaXNwbGF5OjAsZGl2
aXNvcjowLGRvbWluYW50QmFzZWxpbmU6ImRvbWluYW50LWJhc2VsaW5lIixkdXI6MCxkeDowLGR5
OjAsZWRnZU1vZGU6ImVkZ2VNb2RlIixlbGV2YXRpb246MCxlbmFibGVCYWNrZ3JvdW5kOiJlbmFi
bGUtYmFja2dyb3VuZCIsZW5kOjAsZXhwb25lbnQ6MCxleHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
OiJleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkIixmaWxsOjAsZmlsbE9wYWNpdHk6ImZpbGwtb3Bh
Y2l0eSIsZmlsbFJ1bGU6ImZpbGwtcnVsZSIsZmlsdGVyOjAsZmlsdGVyUmVzOiJmaWx0ZXJSZXMi
LGZpbHRlclVuaXRzOiJmaWx0ZXJVbml0cyIsZmxvb2RDb2xvcjoiZmxvb2QtY29sb3IiLGZsb29k
T3BhY2l0eToiZmxvb2Qtb3BhY2l0eSIsZm9jdXNhYmxlOjAsZm9udEZhbWlseToiZm9udC1mYW1p
bHkiLGZvbnRTaXplOiJmb250LXNpemUiLGZvbnRTaXplQWRqdXN0OiJmb250LXNpemUtYWRqdXN0
Iixmb250U3RyZXRjaDoiZm9udC1zdHJldGNoIixmb250U3R5bGU6ImZvbnQtc3R5bGUiLGZvbnRW
YXJpYW50OiJmb250LXZhcmlhbnQiLGZvbnRXZWlnaHQ6ImZvbnQtd2VpZ2h0Iixmb3JtYXQ6MCxm
cm9tOjAsZng6MCxmeTowLGcxOjAsZzI6MCxnbHlwaE5hbWU6ImdseXBoLW5hbWUiLGdseXBoT3Jp
ZW50YXRpb25Ib3Jpem9udGFsOiJnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIixnbHlwaE9y
aWVudGF0aW9uVmVydGljYWw6ImdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsIixnbHlwaFJlZjoi
Z2x5cGhSZWYiLGdyYWRpZW50VHJhbnNmb3JtOiJncmFkaWVudFRyYW5zZm9ybSIsZ3JhZGllbnRV
bml0czoiZ3JhZGllbnRVbml0cyIsaGFuZ2luZzowLGhvcml6QWR2WDoiaG9yaXotYWR2LXgiLGhv
cml6T3JpZ2luWDoiaG9yaXotb3JpZ2luLXgiLGlkZW9ncmFwaGljOjAsaW1hZ2VSZW5kZXJpbmc6
ImltYWdlLXJlbmRlcmluZyIsaW46MCxpbjI6MCxpbnRlcmNlcHQ6MCxrOjAsazE6MCxrMjowLGsz
OjAsazQ6MCxrZXJuZWxNYXRyaXg6Imtlcm5lbE1hdHJpeCIsa2VybmVsVW5pdExlbmd0aDoia2Vy
bmVsVW5pdExlbmd0aCIsa2VybmluZzowLGtleVBvaW50czoia2V5UG9pbnRzIixrZXlTcGxpbmVz
OiJrZXlTcGxpbmVzIixrZXlUaW1lczoia2V5VGltZXMiLGxlbmd0aEFkanVzdDoibGVuZ3RoQWRq
dXN0IixsZXR0ZXJTcGFjaW5nOiJsZXR0ZXItc3BhY2luZyIsbGlnaHRpbmdDb2xvcjoibGlnaHRp
bmctY29sb3IiLGxpbWl0aW5nQ29uZUFuZ2xlOiJsaW1pdGluZ0NvbmVBbmdsZSIsbG9jYWw6MCxt
YXJrZXJFbmQ6Im1hcmtlci1lbmQiLG1hcmtlck1pZDoibWFya2VyLW1pZCIsbWFya2VyU3RhcnQ6
Im1hcmtlci1zdGFydCIsbWFya2VySGVpZ2h0OiJtYXJrZXJIZWlnaHQiLG1hcmtlclVuaXRzOiJt
YXJrZXJVbml0cyIsbWFya2VyV2lkdGg6Im1hcmtlcldpZHRoIixtYXNrOjAsbWFza0NvbnRlbnRV
bml0czoibWFza0NvbnRlbnRVbml0cyIsbWFza1VuaXRzOiJtYXNrVW5pdHMiLG1hdGhlbWF0aWNh
bDowLG1vZGU6MCxudW1PY3RhdmVzOiJudW1PY3RhdmVzIixvZmZzZXQ6MCxvcGFjaXR5OjAsb3Bl
cmF0b3I6MCxvcmRlcjowLG9yaWVudDowLG9yaWVudGF0aW9uOjAsb3JpZ2luOjAsb3ZlcmZsb3c6
MCxvdmVybGluZVBvc2l0aW9uOiJvdmVybGluZS1wb3NpdGlvbiIsb3ZlcmxpbmVUaGlja25lc3M6
Im92ZXJsaW5lLXRoaWNrbmVzcyIscGFpbnRPcmRlcjoicGFpbnQtb3JkZXIiLHBhbm9zZTE6InBh
bm9zZS0xIixwYXRoTGVuZ3RoOiJwYXRoTGVuZ3RoIixwYXR0ZXJuQ29udGVudFVuaXRzOiJwYXR0
ZXJuQ29udGVudFVuaXRzIixwYXR0ZXJuVHJhbnNmb3JtOiJwYXR0ZXJuVHJhbnNmb3JtIixwYXR0
ZXJuVW5pdHM6InBhdHRlcm5Vbml0cyIscG9pbnRlckV2ZW50czoicG9pbnRlci1ldmVudHMiLHBv
aW50czowLHBvaW50c0F0WDoicG9pbnRzQXRYIixwb2ludHNBdFk6InBvaW50c0F0WSIscG9pbnRz
QXRaOiJwb2ludHNBdFoiLHByZXNlcnZlQWxwaGE6InByZXNlcnZlQWxwaGEiLHByZXNlcnZlQXNw
ZWN0UmF0aW86InByZXNlcnZlQXNwZWN0UmF0aW8iLHByaW1pdGl2ZVVuaXRzOiJwcmltaXRpdmVV
bml0cyIscjowLHJhZGl1czowLHJlZlg6InJlZlgiLHJlZlk6InJlZlkiLHJlbmRlcmluZ0ludGVu
dDoicmVuZGVyaW5nLWludGVudCIscmVwZWF0Q291bnQ6InJlcGVhdENvdW50IixyZXBlYXREdXI6
InJlcGVhdER1ciIscmVxdWlyZWRFeHRlbnNpb25zOiJyZXF1aXJlZEV4dGVuc2lvbnMiLHJlcXVp
cmVkRmVhdHVyZXM6InJlcXVpcmVkRmVhdHVyZXMiLHJlc3RhcnQ6MCxyZXN1bHQ6MCxyb3RhdGU6
MCxyeDowLHJ5OjAsc2NhbGU6MCxzZWVkOjAsc2hhcGVSZW5kZXJpbmc6InNoYXBlLXJlbmRlcmlu
ZyIsc2xvcGU6MCxzcGFjaW5nOjAsc3BlY3VsYXJDb25zdGFudDoic3BlY3VsYXJDb25zdGFudCIs
c3BlY3VsYXJFeHBvbmVudDoic3BlY3VsYXJFeHBvbmVudCIsc3BlZWQ6MCxzcHJlYWRNZXRob2Q6
InNwcmVhZE1ldGhvZCIsc3RhcnRPZmZzZXQ6InN0YXJ0T2Zmc2V0IixzdGREZXZpYXRpb246InN0
ZERldmlhdGlvbiIsc3RlbWg6MCxzdGVtdjowLHN0aXRjaFRpbGVzOiJzdGl0Y2hUaWxlcyIsc3Rv
cENvbG9yOiJzdG9wLWNvbG9yIixzdG9wT3BhY2l0eToic3RvcC1vcGFjaXR5IixzdHJpa2V0aHJv
dWdoUG9zaXRpb246InN0cmlrZXRocm91Z2gtcG9zaXRpb24iLHN0cmlrZXRocm91Z2hUaGlja25l
c3M6InN0cmlrZXRocm91Z2gtdGhpY2tuZXNzIixzdHJpbmc6MCxzdHJva2U6MCxzdHJva2VEYXNo
YXJyYXk6InN0cm9rZS1kYXNoYXJyYXkiLHN0cm9rZURhc2hvZmZzZXQ6InN0cm9rZS1kYXNob2Zm
c2V0IixzdHJva2VMaW5lY2FwOiJzdHJva2UtbGluZWNhcCIsc3Ryb2tlTGluZWpvaW46InN0cm9r
ZS1saW5lam9pbiIsc3Ryb2tlTWl0ZXJsaW1pdDoic3Ryb2tlLW1pdGVybGltaXQiLHN0cm9rZU9w
YWNpdHk6InN0cm9rZS1vcGFjaXR5IixzdHJva2VXaWR0aDoic3Ryb2tlLXdpZHRoIixzdXJmYWNl
U2NhbGU6InN1cmZhY2VTY2FsZSIsc3lzdGVtTGFuZ3VhZ2U6InN5c3RlbUxhbmd1YWdlIix0YWJs
ZVZhbHVlczoidGFibGVWYWx1ZXMiLHRhcmdldFg6InRhcmdldFgiLHRhcmdldFk6InRhcmdldFki
LHRleHRBbmNob3I6InRleHQtYW5jaG9yIix0ZXh0RGVjb3JhdGlvbjoidGV4dC1kZWNvcmF0aW9u
Iix0ZXh0UmVuZGVyaW5nOiJ0ZXh0LXJlbmRlcmluZyIsdGV4dExlbmd0aDoidGV4dExlbmd0aCIs
dG86MCx0cmFuc2Zvcm06MCx1MTowLHUyOjAsdW5kZXJsaW5lUG9zaXRpb246InVuZGVybGluZS1w
b3NpdGlvbiIsdW5kZXJsaW5lVGhpY2tuZXNzOiJ1bmRlcmxpbmUtdGhpY2tuZXNzIix1bmljb2Rl
OjAsdW5pY29kZUJpZGk6InVuaWNvZGUtYmlkaSIsdW5pY29kZVJhbmdlOiJ1bmljb2RlLXJhbmdl
Iix1bml0c1BlckVtOiJ1bml0cy1wZXItZW0iLHZBbHBoYWJldGljOiJ2LWFscGhhYmV0aWMiLHZI
YW5naW5nOiJ2LWhhbmdpbmciLHZJZGVvZ3JhcGhpYzoidi1pZGVvZ3JhcGhpYyIsdk1hdGhlbWF0
aWNhbDoidi1tYXRoZW1hdGljYWwiLHZhbHVlczowLHZlY3RvckVmZmVjdDoidmVjdG9yLWVmZmVj
dCIsdmVyc2lvbjowLHZlcnRBZHZZOiJ2ZXJ0LWFkdi15Iix2ZXJ0T3JpZ2luWDoidmVydC1vcmln
aW4teCIsdmVydE9yaWdpblk6InZlcnQtb3JpZ2luLXkiLHZpZXdCb3g6InZpZXdCb3giLHZpZXdU
YXJnZXQ6InZpZXdUYXJnZXQiLHZpc2liaWxpdHk6MCx3aWR0aHM6MCx3b3JkU3BhY2luZzoid29y
ZC1zcGFjaW5nIix3cml0aW5nTW9kZToid3JpdGluZy1tb2RlIix4OjAseEhlaWdodDoieC1oZWln
aHQiLHgxOjAseDI6MCx4Q2hhbm5lbFNlbGVjdG9yOiJ4Q2hhbm5lbFNlbGVjdG9yIix4bGlua0Fj
dHVhdGU6InhsaW5rOmFjdHVhdGUiLHhsaW5rQXJjcm9sZToieGxpbms6YXJjcm9sZSIseGxpbmtI
cmVmOiJ4bGluazpocmVmIix4bGlua1JvbGU6InhsaW5rOnJvbGUiLHhsaW5rU2hvdzoieGxpbms6
c2hvdyIseGxpbmtUaXRsZToieGxpbms6dGl0bGUiLHhsaW5rVHlwZToieGxpbms6dHlwZSIseG1s
QmFzZToieG1sOmJhc2UiLHhtbG5zOjAseG1sbnNYbGluazoieG1sbnM6eGxpbmsiLHhtbExhbmc6
InhtbDpsYW5nIix4bWxTcGFjZToieG1sOnNwYWNlIix5OjAseTE6MCx5MjowLHlDaGFubmVsU2Vs
ZWN0b3I6InlDaGFubmVsU2VsZWN0b3IiLHo6MCx6b29tQW5kUGFuOiJ6b29tQW5kUGFuIn0saT17
UHJvcGVydGllczp7fSxET01BdHRyaWJ1dGVOYW1lc3BhY2VzOnt4bGlua0FjdHVhdGU6ci54bGlu
ayx4bGlua0FyY3JvbGU6ci54bGluayx4bGlua0hyZWY6ci54bGluayx4bGlua1JvbGU6ci54bGlu
ayx4bGlua1Nob3c6ci54bGluayx4bGlua1RpdGxlOnIueGxpbmsseGxpbmtUeXBlOnIueGxpbmss
eG1sQmFzZTpyLnhtbCx4bWxMYW5nOnIueG1sLHhtbFNwYWNlOnIueG1sfSxET01BdHRyaWJ1dGVO
YW1lczp7fX07T2JqZWN0LmtleXMobykuZm9yRWFjaChmdW5jdGlvbihlKXtpLlByb3BlcnRpZXNb
ZV09MCxvW2VdJiYoaS5ET01BdHRyaWJ1dGVOYW1lc1tlXT1vW2VdKX0pLHQuZXhwb3J0cz1pfSx7
fV0sNzQ6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZigic2Vs
ZWN0aW9uU3RhcnQiaW4gZSYmdS5oYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMoZSkpcmV0dXJue3N0
YXJ0OmUuc2VsZWN0aW9uU3RhcnQsZW5kOmUuc2VsZWN0aW9uRW5kfTtpZih3aW5kb3cuZ2V0U2Vs
ZWN0aW9uKXt2YXIgdD13aW5kb3cuZ2V0U2VsZWN0aW9uKCk7cmV0dXJue2FuY2hvck5vZGU6dC5h
bmNob3JOb2RlLGFuY2hvck9mZnNldDp0LmFuY2hvck9mZnNldCxmb2N1c05vZGU6dC5mb2N1c05v
ZGUsZm9jdXNPZmZzZXQ6dC5mb2N1c09mZnNldH19aWYoZG9jdW1lbnQuc2VsZWN0aW9uKXt2YXIg
bj1kb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTtyZXR1cm57cGFyZW50RWxlbWVudDpu
LnBhcmVudEVsZW1lbnQoKSx0ZXh0Om4udGV4dCx0b3A6bi5ib3VuZGluZ1RvcCxsZWZ0Om4uYm91
bmRpbmdMZWZ0fX19ZnVuY3Rpb24gbyhlLHQpe2lmKHl8fG51bGw9PW18fG0hPT1jKCkpcmV0dXJu
IG51bGw7dmFyIG49cihtKTtpZighZ3x8IWQoZyxuKSl7Zz1uO3ZhciBvPWwuZ2V0UG9vbGVkKGgu
c2VsZWN0LHYsZSx0KTtyZXR1cm4gby50eXBlPSJzZWxlY3QiLG8udGFyZ2V0PW0saS5hY2N1bXVs
YXRlVHdvUGhhc2VEaXNwYXRjaGVzKG8pLG99cmV0dXJuIG51bGx9dmFyIGk9ZSgxOSksYT1lKDEy
MCkscz1lKDMyKSx1PWUoNTUpLGw9ZSg4MCksYz1lKDEyOSkscD1lKDEwOCksZD1lKDEzOCksZj1h
LmNhblVzZURPTSYmImRvY3VtZW50TW9kZSJpbiBkb2N1bWVudCYmZG9jdW1lbnQuZG9jdW1lbnRN
b2RlPD0xMSxoPXtzZWxlY3Q6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOiJvblNl
bGVjdCIsY2FwdHVyZWQ6Im9uU2VsZWN0Q2FwdHVyZSJ9LGRlcGVuZGVuY2llczpbInRvcEJsdXIi
LCJ0b3BDb250ZXh0TWVudSIsInRvcEZvY3VzIiwidG9wS2V5RG93biIsInRvcEtleVVwIiwidG9w
TW91c2VEb3duIiwidG9wTW91c2VVcCIsInRvcFNlbGVjdGlvbkNoYW5nZSJdfX0sbT1udWxsLHY9
bnVsbCxnPW51bGwseT0hMSxfPSExLEM9e2V2ZW50VHlwZXM6aCxleHRyYWN0RXZlbnRzOmZ1bmN0
aW9uKGUsdCxuLHIpe2lmKCFfKXJldHVybiBudWxsO3ZhciBpPXQ/cy5nZXROb2RlRnJvbUluc3Rh
bmNlKHQpOndpbmRvdztzd2l0Y2goZSl7Y2FzZSJ0b3BGb2N1cyI6KHAoaSl8fCJ0cnVlIj09PWku
Y29udGVudEVkaXRhYmxlKSYmKG09aSx2PXQsZz1udWxsKTticmVhaztjYXNlInRvcEJsdXIiOm09
bnVsbCx2PW51bGwsZz1udWxsO2JyZWFrO2Nhc2UidG9wTW91c2VEb3duIjp5PSEwO2JyZWFrO2Nh
c2UidG9wQ29udGV4dE1lbnUiOmNhc2UidG9wTW91c2VVcCI6cmV0dXJuIHk9ITEsbyhuLHIpO2Nh
c2UidG9wU2VsZWN0aW9uQ2hhbmdlIjppZihmKWJyZWFrO2Nhc2UidG9wS2V5RG93biI6Y2FzZSJ0
b3BLZXlVcCI6cmV0dXJuIG8obixyKX1yZXR1cm4gbnVsbH0sZGlkUHV0TGlzdGVuZXI6ZnVuY3Rp
b24oZSx0LG4peyJvblNlbGVjdCI9PT10JiYoXz0hMCl9fTt0LmV4cG9ydHM9Q30sezEwODoxMDgs
MTIwOjEyMCwxMjk6MTI5LDEzODoxMzgsMTk6MTksMzI6MzIsNTU6NTUsODA6ODB9XSw3NTpbZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiIuIitlLl9yb290
Tm9kZUlEfWZ1bmN0aW9uIG8oZSl7cmV0dXJuImJ1dHRvbiI9PT1lfHwiaW5wdXQiPT09ZXx8InNl
bGVjdCI9PT1lfHwidGV4dGFyZWEiPT09ZX12YXIgaT1lKDExMCksYT1lKDExOSkscz1lKDE5KSx1
PWUoMzIpLGw9ZSg3NiksYz1lKDc3KSxwPWUoODApLGQ9ZSg4MSksZj1lKDgzKSxoPWUoODQpLG09
ZSg3OSksdj1lKDg1KSxnPWUoODYpLHk9ZSg4NyksXz1lKDg4KSxDPWUoMTI2KSxiPWUoOTgpLEU9
KGUoMTM0KSx7fSkseD17fTtbImFib3J0IiwiYW5pbWF0aW9uRW5kIiwiYW5pbWF0aW9uSXRlcmF0
aW9uIiwiYW5pbWF0aW9uU3RhcnQiLCJibHVyIiwiY2FuUGxheSIsImNhblBsYXlUaHJvdWdoIiwi
Y2xpY2siLCJjb250ZXh0TWVudSIsImNvcHkiLCJjdXQiLCJkb3VibGVDbGljayIsImRyYWciLCJk
cmFnRW5kIiwiZHJhZ0VudGVyIiwiZHJhZ0V4aXQiLCJkcmFnTGVhdmUiLCJkcmFnT3ZlciIsImRy
YWdTdGFydCIsImRyb3AiLCJkdXJhdGlvbkNoYW5nZSIsImVtcHRpZWQiLCJlbmNyeXB0ZWQiLCJl
bmRlZCIsImVycm9yIiwiZm9jdXMiLCJpbnB1dCIsImludmFsaWQiLCJrZXlEb3duIiwia2V5UHJl
c3MiLCJrZXlVcCIsImxvYWQiLCJsb2FkZWREYXRhIiwibG9hZGVkTWV0YWRhdGEiLCJsb2FkU3Rh
cnQiLCJtb3VzZURvd24iLCJtb3VzZU1vdmUiLCJtb3VzZU91dCIsIm1vdXNlT3ZlciIsIm1vdXNl
VXAiLCJwYXN0ZSIsInBhdXNlIiwicGxheSIsInBsYXlpbmciLCJwcm9ncmVzcyIsInJhdGVDaGFu
Z2UiLCJyZXNldCIsInNjcm9sbCIsInNlZWtlZCIsInNlZWtpbmciLCJzdGFsbGVkIiwic3VibWl0
Iiwic3VzcGVuZCIsInRpbWVVcGRhdGUiLCJ0b3VjaENhbmNlbCIsInRvdWNoRW5kIiwidG91Y2hN
b3ZlIiwidG91Y2hTdGFydCIsInRyYW5zaXRpb25FbmQiLCJ2b2x1bWVDaGFuZ2UiLCJ3YWl0aW5n
Iiwid2hlZWwiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0udG9VcHBlckNhc2UoKStl
LnNsaWNlKDEpLG49Im9uIit0LHI9InRvcCIrdCxvPXtwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7
YnViYmxlZDpuLGNhcHR1cmVkOm4rIkNhcHR1cmUifSxkZXBlbmRlbmNpZXM6W3JdfTtFW2VdPW8s
eFtyXT1vfSk7dmFyIHc9e30saz17ZXZlbnRUeXBlczpFLGV4dHJhY3RFdmVudHM6ZnVuY3Rpb24o
ZSx0LG4scil7dmFyIG89eFtlXTtpZighbylyZXR1cm4gbnVsbDt2YXIgYTtzd2l0Y2goZSl7Y2Fz
ZSJ0b3BBYm9ydCI6Y2FzZSJ0b3BDYW5QbGF5IjpjYXNlInRvcENhblBsYXlUaHJvdWdoIjpjYXNl
InRvcER1cmF0aW9uQ2hhbmdlIjpjYXNlInRvcEVtcHRpZWQiOmNhc2UidG9wRW5jcnlwdGVkIjpj
YXNlInRvcEVuZGVkIjpjYXNlInRvcEVycm9yIjpjYXNlInRvcElucHV0IjpjYXNlInRvcEludmFs
aWQiOmNhc2UidG9wTG9hZCI6Y2FzZSJ0b3BMb2FkZWREYXRhIjpjYXNlInRvcExvYWRlZE1ldGFk
YXRhIjpjYXNlInRvcExvYWRTdGFydCI6Y2FzZSJ0b3BQYXVzZSI6Y2FzZSJ0b3BQbGF5IjpjYXNl
InRvcFBsYXlpbmciOmNhc2UidG9wUHJvZ3Jlc3MiOmNhc2UidG9wUmF0ZUNoYW5nZSI6Y2FzZSJ0
b3BSZXNldCI6Y2FzZSJ0b3BTZWVrZWQiOmNhc2UidG9wU2Vla2luZyI6Y2FzZSJ0b3BTdGFsbGVk
IjpjYXNlInRvcFN1Ym1pdCI6Y2FzZSJ0b3BTdXNwZW5kIjpjYXNlInRvcFRpbWVVcGRhdGUiOmNh
c2UidG9wVm9sdW1lQ2hhbmdlIjpjYXNlInRvcFdhaXRpbmciOmE9cDticmVhaztjYXNlInRvcEtl
eVByZXNzIjppZigwPT09YihuKSlyZXR1cm4gbnVsbDtjYXNlInRvcEtleURvd24iOmNhc2UidG9w
S2V5VXAiOmE9ZjticmVhaztjYXNlInRvcEJsdXIiOmNhc2UidG9wRm9jdXMiOmE9ZDticmVhaztj
YXNlInRvcENsaWNrIjppZigyPT09bi5idXR0b24pcmV0dXJuIG51bGw7Y2FzZSJ0b3BEb3VibGVD
bGljayI6Y2FzZSJ0b3BNb3VzZURvd24iOmNhc2UidG9wTW91c2VNb3ZlIjpjYXNlInRvcE1vdXNl
VXAiOmNhc2UidG9wTW91c2VPdXQiOmNhc2UidG9wTW91c2VPdmVyIjpjYXNlInRvcENvbnRleHRN
ZW51IjphPWg7YnJlYWs7Y2FzZSJ0b3BEcmFnIjpjYXNlInRvcERyYWdFbmQiOmNhc2UidG9wRHJh
Z0VudGVyIjpjYXNlInRvcERyYWdFeGl0IjpjYXNlInRvcERyYWdMZWF2ZSI6Y2FzZSJ0b3BEcmFn
T3ZlciI6Y2FzZSJ0b3BEcmFnU3RhcnQiOmNhc2UidG9wRHJvcCI6YT1tO2JyZWFrO2Nhc2UidG9w
VG91Y2hDYW5jZWwiOmNhc2UidG9wVG91Y2hFbmQiOmNhc2UidG9wVG91Y2hNb3ZlIjpjYXNlInRv
cFRvdWNoU3RhcnQiOmE9djticmVhaztjYXNlInRvcEFuaW1hdGlvbkVuZCI6Y2FzZSJ0b3BBbmlt
YXRpb25JdGVyYXRpb24iOmNhc2UidG9wQW5pbWF0aW9uU3RhcnQiOmE9bDticmVhaztjYXNlInRv
cFRyYW5zaXRpb25FbmQiOmE9ZzticmVhaztjYXNlInRvcFNjcm9sbCI6YT15O2JyZWFrO2Nhc2Ui
dG9wV2hlZWwiOmE9XzticmVhaztjYXNlInRvcENvcHkiOmNhc2UidG9wQ3V0IjpjYXNlInRvcFBh
c3RlIjphPWN9YXx8aSgiODYiLGUpO3ZhciB1PWEuZ2V0UG9vbGVkKG8sdCxuLHIpO3JldHVybiBz
LmFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXModSksdX0sZGlkUHV0TGlzdGVuZXI6ZnVuY3Rp
b24oZSx0LG4pe2lmKCJvbkNsaWNrIj09PXQmJiFvKGUuX3RhZykpe3ZhciBpPXIoZSkscz11Lmdl
dE5vZGVGcm9tSW5zdGFuY2UoZSk7d1tpXXx8KHdbaV09YS5saXN0ZW4ocywiY2xpY2siLEMpKX19
LHdpbGxEZWxldGVMaXN0ZW5lcjpmdW5jdGlvbihlLHQpe2lmKCJvbkNsaWNrIj09PXQmJiFvKGUu
X3RhZykpe3ZhciBuPXIoZSk7d1tuXS5yZW1vdmUoKSxkZWxldGUgd1tuXX19fTt0LmV4cG9ydHM9
a30sezExMDoxMTAsMTE5OjExOSwxMjY6MTI2LDEzNDoxMzQsMTk6MTksMzI6MzIsNzY6NzYsNzc6
NzcsNzk6NzksODA6ODAsODE6ODEsODM6ODMsODQ6ODQsODU6ODUsODY6ODYsODc6ODcsODg6ODgs
OTg6OTh9XSw3NjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxu
LHIpe3JldHVybiBvLmNhbGwodGhpcyxlLHQsbixyKX12YXIgbz1lKDgwKSxpPXthbmltYXRpb25O
YW1lOm51bGwsZWxhcHNlZFRpbWU6bnVsbCxwc2V1ZG9FbGVtZW50Om51bGx9O28uYXVnbWVudENs
YXNzKHIsaSksdC5leHBvcnRzPXJ9LHs4MDo4MH1dLDc3OltmdW5jdGlvbihlLHQsbil7InVzZSBz
dHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7cmV0dXJuIG8uY2FsbCh0aGlzLGUsdCxuLHIpfXZh
ciBvPWUoODApLGk9e2NsaXBib2FyZERhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuImNsaXBib2FyZERh
dGEiaW4gZT9lLmNsaXBib2FyZERhdGE6d2luZG93LmNsaXBib2FyZERhdGF9fTtvLmF1Z21lbnRD
bGFzcyhyLGkpLHQuZXhwb3J0cz1yfSx7ODA6ODB9XSw3ODpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ug
c3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3JldHVybiBvLmNhbGwodGhpcyxlLHQsbixyKX12
YXIgbz1lKDgwKSxpPXtkYXRhOm51bGx9O28uYXVnbWVudENsYXNzKHIsaSksdC5leHBvcnRzPXJ9
LHs4MDo4MH1dLDc5OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiCis7ZnVuY3Rpb24gcihl
LHQsbixyKXtyZXR1cm4gby5jYWxsKHRoaXMsZSx0LG4scil9dmFyIG89ZSg4NCksaT17ZGF0YVRy
YW5zZmVyOm51bGx9O28uYXVnbWVudENsYXNzKHIsaSksdC5leHBvcnRzPXJ9LHs4NDo4NH1dLDgw
OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7dGhpcy5k
aXNwYXRjaENvbmZpZz1lLHRoaXMuX3RhcmdldEluc3Q9dCx0aGlzLm5hdGl2ZUV2ZW50PW47dmFy
IG89dGhpcy5jb25zdHJ1Y3Rvci5JbnRlcmZhY2U7Zm9yKHZhciBpIGluIG8paWYoby5oYXNPd25Q
cm9wZXJ0eShpKSl7dmFyIHM9b1tpXTtzP3RoaXNbaV09cyhuKToidGFyZ2V0Ij09PWk/dGhpcy50
YXJnZXQ9cjp0aGlzW2ldPW5baV19dmFyIHU9bnVsbCE9bi5kZWZhdWx0UHJldmVudGVkP24uZGVm
YXVsdFByZXZlbnRlZDohMT09PW4ucmV0dXJuVmFsdWU7cmV0dXJuIHRoaXMuaXNEZWZhdWx0UHJl
dmVudGVkPXU/YS50aGF0UmV0dXJuc1RydWU6YS50aGF0UmV0dXJuc0ZhbHNlLHRoaXMuaXNQcm9w
YWdhdGlvblN0b3BwZWQ9YS50aGF0UmV0dXJuc0ZhbHNlLHRoaXN9dmFyIG89ZSgxNDApLGk9ZSgy
NCksYT1lKDEyNikscz0oZSgxMzkpLFsiZGlzcGF0Y2hDb25maWciLCJfdGFyZ2V0SW5zdCIsIm5h
dGl2ZUV2ZW50IiwiaXNEZWZhdWx0UHJldmVudGVkIiwiaXNQcm9wYWdhdGlvblN0b3BwZWQiLCJf
ZGlzcGF0Y2hMaXN0ZW5lcnMiLCJfZGlzcGF0Y2hJbnN0YW5jZXMiXSksdT17dHlwZTpudWxsLHRh
cmdldDpudWxsLGN1cnJlbnRUYXJnZXQ6YS50aGF0UmV0dXJuc051bGwsZXZlbnRQaGFzZTpudWxs
LGJ1YmJsZXM6bnVsbCxjYW5jZWxhYmxlOm51bGwsdGltZVN0YW1wOmZ1bmN0aW9uKGUpe3JldHVy
biBlLnRpbWVTdGFtcHx8RGF0ZS5ub3coKX0sZGVmYXVsdFByZXZlbnRlZDpudWxsLGlzVHJ1c3Rl
ZDpudWxsfTtvKHIucHJvdG90eXBlLHtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuZGVm
YXVsdFByZXZlbnRlZD0hMDt2YXIgZT10aGlzLm5hdGl2ZUV2ZW50O2UmJihlLnByZXZlbnREZWZh
dWx0P2UucHJldmVudERlZmF1bHQoKToidW5rbm93biIhPXR5cGVvZiBlLnJldHVyblZhbHVlJiYo
ZS5yZXR1cm5WYWx1ZT0hMSksdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9YS50aGF0UmV0dXJuc1Ry
dWUpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm5hdGl2ZUV2ZW50O2Um
JihlLnN0b3BQcm9wYWdhdGlvbj9lLnN0b3BQcm9wYWdhdGlvbigpOiJ1bmtub3duIiE9dHlwZW9m
IGUuY2FuY2VsQnViYmxlJiYoZS5jYW5jZWxCdWJibGU9ITApLHRoaXMuaXNQcm9wYWdhdGlvblN0
b3BwZWQ9YS50aGF0UmV0dXJuc1RydWUpfSxwZXJzaXN0OmZ1bmN0aW9uKCl7dGhpcy5pc1BlcnNp
c3RlbnQ9YS50aGF0UmV0dXJuc1RydWV9LGlzUGVyc2lzdGVudDphLnRoYXRSZXR1cm5zRmFsc2Us
ZGVzdHJ1Y3RvcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY29uc3RydWN0b3IuSW50ZXJmYWNlO2Zv
cih2YXIgdCBpbiBlKXRoaXNbdF09bnVsbDtmb3IodmFyIG49MDtuPHMubGVuZ3RoO24rKyl0aGlz
W3Nbbl1dPW51bGx9fSksci5JbnRlcmZhY2U9dSxyLmF1Z21lbnRDbGFzcz1mdW5jdGlvbihlLHQp
e3ZhciBuPXRoaXMscj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9bi5wcm90b3R5cGU7dmFyIGE9
bmV3IHI7byhhLGUucHJvdG90eXBlKSxlLnByb3RvdHlwZT1hLGUucHJvdG90eXBlLmNvbnN0cnVj
dG9yPWUsZS5JbnRlcmZhY2U9byh7fSxuLkludGVyZmFjZSx0KSxlLmF1Z21lbnRDbGFzcz1uLmF1
Z21lbnRDbGFzcyxpLmFkZFBvb2xpbmdUbyhlLGkuZm91ckFyZ3VtZW50UG9vbGVyKX0saS5hZGRQ
b29saW5nVG8ocixpLmZvdXJBcmd1bWVudFBvb2xlciksdC5leHBvcnRzPXJ9LHsxMjY6MTI2LDEz
OToxMzksMTQwOjE0MCwyNDoyNH1dLDgxOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1
bmN0aW9uIHIoZSx0LG4scil7cmV0dXJuIG8uY2FsbCh0aGlzLGUsdCxuLHIpfXZhciBvPWUoODcp
LGk9e3JlbGF0ZWRUYXJnZXQ6bnVsbH07by5hdWdtZW50Q2xhc3MocixpKSx0LmV4cG9ydHM9cn0s
ezg3Ojg3fV0sODI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQs
bixyKXtyZXR1cm4gby5jYWxsKHRoaXMsZSx0LG4scil9dmFyIG89ZSg4MCksaT17ZGF0YTpudWxs
fTtvLmF1Z21lbnRDbGFzcyhyLGkpLHQuZXhwb3J0cz1yfSx7ODA6ODB9XSw4MzpbZnVuY3Rpb24o
ZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3JldHVybiBvLmNhbGwodGhp
cyxlLHQsbixyKX12YXIgbz1lKDg3KSxpPWUoOTgpLGE9ZSg5OSkscz1lKDEwMCksdT17a2V5OmEs
bG9jYXRpb246bnVsbCxjdHJsS2V5Om51bGwsc2hpZnRLZXk6bnVsbCxhbHRLZXk6bnVsbCxtZXRh
S2V5Om51bGwscmVwZWF0Om51bGwsbG9jYWxlOm51bGwsZ2V0TW9kaWZpZXJTdGF0ZTpzLGNoYXJD
b2RlOmZ1bmN0aW9uKGUpe3JldHVybiJrZXlwcmVzcyI9PT1lLnR5cGU/aShlKTowfSxrZXlDb2Rl
OmZ1bmN0aW9uKGUpe3JldHVybiJrZXlkb3duIj09PWUudHlwZXx8ImtleXVwIj09PWUudHlwZT9l
LmtleUNvZGU6MH0sd2hpY2g6ZnVuY3Rpb24oZSl7cmV0dXJuImtleXByZXNzIj09PWUudHlwZT9p
KGUpOiJrZXlkb3duIj09PWUudHlwZXx8ImtleXVwIj09PWUudHlwZT9lLmtleUNvZGU6MH19O28u
YXVnbWVudENsYXNzKHIsdSksdC5leHBvcnRzPXJ9LHsxMDA6MTAwLDg3Ojg3LDk4Ojk4LDk5Ojk5
fV0sODQ6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXty
ZXR1cm4gby5jYWxsKHRoaXMsZSx0LG4scil9dmFyIG89ZSg4NyksaT1lKDkwKSxhPWUoMTAwKSxz
PXtzY3JlZW5YOm51bGwsc2NyZWVuWTpudWxsLGNsaWVudFg6bnVsbCxjbGllbnRZOm51bGwsY3Ry
bEtleTpudWxsLHNoaWZ0S2V5Om51bGwsYWx0S2V5Om51bGwsbWV0YUtleTpudWxsLGdldE1vZGlm
aWVyU3RhdGU6YSxidXR0b246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5idXR0b247cmV0dXJuIndoaWNo
ImluIGU/dDoyPT09dD8yOjQ9PT10PzE6MH0sYnV0dG9uczpudWxsLHJlbGF0ZWRUYXJnZXQ6ZnVu
Y3Rpb24oZSl7cmV0dXJuIGUucmVsYXRlZFRhcmdldHx8KGUuZnJvbUVsZW1lbnQ9PT1lLnNyY0Vs
ZW1lbnQ/ZS50b0VsZW1lbnQ6ZS5mcm9tRWxlbWVudCl9LHBhZ2VYOmZ1bmN0aW9uKGUpe3JldHVy
biJwYWdlWCJpbiBlP2UucGFnZVg6ZS5jbGllbnRYK2kuY3VycmVudFNjcm9sbExlZnR9LHBhZ2VZ
OmZ1bmN0aW9uKGUpe3JldHVybiJwYWdlWSJpbiBlP2UucGFnZVk6ZS5jbGllbnRZK2kuY3VycmVu
dFNjcm9sbFRvcH19O28uYXVnbWVudENsYXNzKHIscyksdC5leHBvcnRzPXJ9LHsxMDA6MTAwLDg3
Ojg3LDkwOjkwfV0sODU6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihl
LHQsbixyKXtyZXR1cm4gby5jYWxsKHRoaXMsZSx0LG4scil9dmFyIG89ZSg4NyksaT1lKDEwMCks
YT17dG91Y2hlczpudWxsLHRhcmdldFRvdWNoZXM6bnVsbCxjaGFuZ2VkVG91Y2hlczpudWxsLGFs
dEtleTpudWxsLG1ldGFLZXk6bnVsbCxjdHJsS2V5Om51bGwsc2hpZnRLZXk6bnVsbCxnZXRNb2Rp
ZmllclN0YXRlOml9O28uYXVnbWVudENsYXNzKHIsYSksdC5leHBvcnRzPXJ9LHsxMDA6MTAwLDg3
Ojg3fV0sODY6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixy
KXtyZXR1cm4gby5jYWxsKHRoaXMsZSx0LG4scil9dmFyIG89ZSg4MCksaT17cHJvcGVydHlOYW1l
Om51bGwsZWxhcHNlZFRpbWU6bnVsbCxwc2V1ZG9FbGVtZW50Om51bGx9O28uYXVnbWVudENsYXNz
KHIsaSksdC5leHBvcnRzPXJ9LHs4MDo4MH1dLDg3OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJp
Y3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7cmV0dXJuIG8uY2FsbCh0aGlzLGUsdCxuLHIpfXZhciBv
PWUoODApLGk9ZSgxMDEpLGE9e3ZpZXc6ZnVuY3Rpb24oZSl7aWYoZS52aWV3KXJldHVybiBlLnZp
ZXc7dmFyIHQ9aShlKTtpZih0LndpbmRvdz09PXQpcmV0dXJuIHQ7dmFyIG49dC5vd25lckRvY3Vt
ZW50O3JldHVybiBuP24uZGVmYXVsdFZpZXd8fG4ucGFyZW50V2luZG93OndpbmRvd30sZGV0YWls
OmZ1bmN0aW9uKGUpe3JldHVybiBlLmRldGFpbHx8MH19O28uYXVnbWVudENsYXNzKHIsYSksdC5l
eHBvcnRzPXJ9LHsxMDE6MTAxLDgwOjgwfV0sODg6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmlj
dCI7ZnVuY3Rpb24gcihlLHQsbixyKXtyZXR1cm4gby5jYWxsKHRoaXMsZSx0LG4scil9dmFyIG89
ZSg4NCksaT17ZGVsdGFYOmZ1bmN0aW9uKGUpe3JldHVybiJkZWx0YVgiaW4gZT9lLmRlbHRhWDoi
d2hlZWxEZWx0YVgiaW4gZT8tZS53aGVlbERlbHRhWDowfSxkZWx0YVk6ZnVuY3Rpb24oZSl7cmV0
dXJuImRlbHRhWSJpbiBlP2UuZGVsdGFZOiJ3aGVlbERlbHRhWSJpbiBlPy1lLndoZWVsRGVsdGFZ
OiJ3aGVlbERlbHRhImluIGU/LWUud2hlZWxEZWx0YTowfSxkZWx0YVo6bnVsbCxkZWx0YU1vZGU6
bnVsbH07by5hdWdtZW50Q2xhc3MocixpKSx0LmV4cG9ydHM9cn0sezg0Ojg0fV0sODk6W2Z1bmN0
aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgxMTApLG89KGUoMTM0KSx7fSksaT17cmVp
bml0aWFsaXplVHJhbnNhY3Rpb246ZnVuY3Rpb24oKXt0aGlzLnRyYW5zYWN0aW9uV3JhcHBlcnM9
dGhpcy5nZXRUcmFuc2FjdGlvbldyYXBwZXJzKCksdGhpcy53cmFwcGVySW5pdERhdGE/dGhpcy53
cmFwcGVySW5pdERhdGEubGVuZ3RoPTA6dGhpcy53cmFwcGVySW5pdERhdGE9W10sdGhpcy5faXNJ
blRyYW5zYWN0aW9uPSExfSxfaXNJblRyYW5zYWN0aW9uOiExLGdldFRyYW5zYWN0aW9uV3JhcHBl
cnM6bnVsbCxpc0luVHJhbnNhY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2lzSW5UcmFu
c2FjdGlvbn0scGVyZm9ybTpmdW5jdGlvbihlLHQsbixvLGksYSxzLHUpe3RoaXMuaXNJblRyYW5z
YWN0aW9uKCkmJnIoIjI3Iik7dmFyIGwsYzt0cnl7dGhpcy5faXNJblRyYW5zYWN0aW9uPSEwLGw9
ITAsdGhpcy5pbml0aWFsaXplQWxsKDApLGM9ZS5jYWxsKHQsbixvLGksYSxzLHUpLGw9ITF9Zmlu
YWxseXt0cnl7aWYobCl0cnl7dGhpcy5jbG9zZUFsbCgwKX1jYXRjaChlKXt9ZWxzZSB0aGlzLmNs
b3NlQWxsKDApfWZpbmFsbHl7dGhpcy5faXNJblRyYW5zYWN0aW9uPSExfX1yZXR1cm4gY30saW5p
dGlhbGl6ZUFsbDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cmFuc2FjdGlvbldyYXBwZXJz
LG49ZTtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTt0cnl7dGhpcy53cmFwcGVySW5pdERhdGFb
bl09byx0aGlzLndyYXBwZXJJbml0RGF0YVtuXT1yLmluaXRpYWxpemU/ci5pbml0aWFsaXplLmNh
bGwodGhpcyk6bnVsbH1maW5hbGx5e2lmKHRoaXMud3JhcHBlckluaXREYXRhW25dPT09byl0cnl7
dGhpcy5pbml0aWFsaXplQWxsKG4rMSl9Y2F0Y2goZSl7fX19fSxjbG9zZUFsbDpmdW5jdGlvbihl
KXt0aGlzLmlzSW5UcmFuc2FjdGlvbigpfHxyKCIyOCIpO2Zvcih2YXIgdD10aGlzLnRyYW5zYWN0
aW9uV3JhcHBlcnMsbj1lO248dC5sZW5ndGg7bisrKXt2YXIgaSxhPXRbbl0scz10aGlzLndyYXBw
ZXJJbml0RGF0YVtuXTt0cnl7aT0hMCxzIT09byYmYS5jbG9zZSYmYS5jbG9zZS5jYWxsKHRoaXMs
cyksaT0hMX1maW5hbGx5e2lmKGkpdHJ5e3RoaXMuY2xvc2VBbGwobisxKX1jYXRjaChlKXt9fX10
aGlzLndyYXBwZXJJbml0RGF0YS5sZW5ndGg9MH19O3QuZXhwb3J0cz1pfSx7MTEwOjExMCwxMzQ6
MTM0fV0sOTA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9e2N1cnJlbnRTY3Jv
bGxMZWZ0OjAsY3VycmVudFNjcm9sbFRvcDowLHJlZnJlc2hTY3JvbGxWYWx1ZXM6ZnVuY3Rpb24o
ZSl7ci5jdXJyZW50U2Nyb2xsTGVmdD1lLngsci5jdXJyZW50U2Nyb2xsVG9wPWUueX19O3QuZXhw
b3J0cz1yfSx7fV0sOTE6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihl
LHQpe3JldHVybiBudWxsPT10JiZvKCIzMCIpLG51bGw9PWU/dDpBcnJheS5pc0FycmF5KGUpP0Fy
cmF5LmlzQXJyYXkodCk/KGUucHVzaC5hcHBseShlLHQpLGUpOihlLnB1c2godCksZSk6QXJyYXku
aXNBcnJheSh0KT9bZV0uY29uY2F0KHQpOltlLHRdfXZhciBvPWUoMTEwKTtlKDEzNCk7dC5leHBv
cnRzPXJ9LHsxMTA6MTEwLDEzNDoxMzR9XSw5MjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0
IjtmdW5jdGlvbiByKGUpe2Zvcih2YXIgdD0xLG49MCxyPTAsaT1lLmxlbmd0aCxhPS00Jmk7cjxh
Oyl7Zm9yKHZhciBzPU1hdGgubWluKHIrNDA5NixhKTtyPHM7cis9NCluKz0odCs9ZS5jaGFyQ29k
ZUF0KHIpKSsodCs9ZS5jaGFyQ29kZUF0KHIrMSkpKyh0Kz1lLmNoYXJDb2RlQXQocisyKSkrKHQr
PWUuY2hhckNvZGVBdChyKzMpKTt0JT1vLG4lPW99Zm9yKDtyPGk7cisrKW4rPXQrPWUuY2hhckNv
ZGVBdChyKTtyZXR1cm4gdCU9byxuJT1vLHR8bjw8MTZ9dmFyIG89NjU1MjE7dC5leHBvcnRzPXJ9
LHt9XSw5MzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbihlKXty
ZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIE1TQXBwJiZNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5j
dGlvbj9mdW5jdGlvbih0LG4scixvKXtNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbihmdW5j
dGlvbigpe3JldHVybiBlKHQsbixyLG8pfSl9OmV9O3QuZXhwb3J0cz1yfSx7fV0sOTQ6W2Z1bmN0
aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7cmV0dXJuIG51bGw9PXR8
fCJib29sZWFuIj09dHlwZW9mIHR8fCIiPT09dD8iIjppc05hTih0KXx8MD09PXR8fGkuaGFzT3du
UHJvcGVydHkoZSkmJmlbZV0/IiIrdDooInN0cmluZyI9PXR5cGVvZiB0JiYodD10LnRyaW0oKSks
dCsicHgiKX12YXIgbz1lKDQpLGk9KGUoMTM5KSxvLmlzVW5pdGxlc3NOdW1iZXIpO3QuZXhwb3J0
cz1yfSx7MTM5OjEzOSw0OjR9XSw5NTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5j
dGlvbiByKGUpe3ZhciB0PSIiK2Usbj1pLmV4ZWModCk7aWYoIW4pcmV0dXJuIHQ7dmFyIHIsbz0i
IixhPTAscz0wO2ZvcihhPW4uaW5kZXg7YTx0Lmxlbmd0aDthKyspe3N3aXRjaCh0LmNoYXJDb2Rl
QXQoYSkpe2Nhc2UgMzQ6cj0iJnF1b3Q7IjticmVhaztjYXNlIDM4OnI9IiZhbXA7IjticmVhaztj
YXNlIDM5OnI9IiYjeDI3OyI7YnJlYWs7Y2FzZSA2MDpyPSImbHQ7IjticmVhaztjYXNlIDYyOnI9
IiZndDsiO2JyZWFrO2RlZmF1bHQ6Y29udGludWV9cyE9PWEmJihvKz10LnN1YnN0cmluZyhzLGEp
KSxzPWErMSxvKz1yfXJldHVybiBzIT09YT9vK3Quc3Vic3RyaW5nKHMsYSk6b31mdW5jdGlvbiBv
KGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGV8fCJudW1iZXIiPT10eXBlb2YgZT8iIitlOnIo
ZSl9dmFyIGk9L1siJyY8Pl0vO3QuZXhwb3J0cz1vfSx7fV0sOTY6W2Z1bmN0aW9uKGUsdCxuKXso
ZnVuY3Rpb24obil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7aWYoZSYmIm9iamVj
dCI9PXR5cGVvZiBlKXt2YXIgbz1lO3ZvaWQgMD09PW9bbl0mJm51bGwhPXQmJihvW25dPXQpfX1m
dW5jdGlvbiBvKGUsdCl7aWYobnVsbD09ZSlyZXR1cm4gZTt2YXIgbj17fTtyZXR1cm4gaShlLHIs
biksbn12YXIgaT0oZSgyMiksZSgxMTQpKTtlKDEzOSk7dm9pZCAwIT09biYmbi5lbnYsdC5leHBv
cnRzPW99KS5jYWxsKHRoaXMsdm9pZCAwKX0sezExNDoxMTQsMTM5OjEzOSwyMjoyMn1dLDk3Oltm
dW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe0FycmF5LmlzQXJy
YXkoZSk/ZS5mb3JFYWNoKHQsbik6ZSYmdC5jYWxsKG4sZSl9dC5leHBvcnRzPXJ9LHt9XSw5ODpb
ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0LG49ZS5rZXlD
b2RlO3JldHVybiJjaGFyQ29kZSJpbiBlPzA9PT0odD1lLmNoYXJDb2RlKSYmMTM9PT1uJiYodD0x
Myk6dD1uLHQ+PTMyfHwxMz09PXQ/dDowfXQuZXhwb3J0cz1yfSx7fV0sOTk6W2Z1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihlLmtleSl7dmFyIHQ9aVtlLmtleV18
fGUua2V5O2lmKCJVbmlkZW50aWZpZWQiIT09dClyZXR1cm4gdH1pZigia2V5cHJlc3MiPT09ZS50
eXBlKXt2YXIgbj1vKGUpO3JldHVybiAxMz09PW4/IkVudGVyIjpTdHJpbmcuZnJvbUNoYXJDb2Rl
KG4pfXJldHVybiJrZXlkb3duIj09PWUudHlwZXx8ImtleXVwIj09PWUudHlwZT9hW2Uua2V5Q29k
ZV18fCJVbmlkZW50aWZpZWQiOiIifXZhciBvPWUoOTgpLGk9e0VzYzoiRXNjYXBlIixTcGFjZWJh
cjoiICIsTGVmdDoiQXJyb3dMZWZ0IixVcDoiQXJyb3dVcCIsUmlnaHQ6IkFycm93UmlnaHQiLERv
d246IkFycm93RG93biIsRGVsOiJEZWxldGUiLFdpbjoiT1MiLE1lbnU6IkNvbnRleHRNZW51IixB
cHBzOiJDb250ZXh0TWVudSIsU2Nyb2xsOiJTY3JvbGxMb2NrIixNb3pQcmludGFibGVLZXk6IlVu
aWRlbnRpZmllZCJ9LGE9ezg6IkJhY2tzcGFjZSIsOToiVGFiIiwxMjoiQ2xlYXIiLDEzOiJFbnRl
ciIsMTY6IlNoaWZ0IiwxNzoiQ29udHJvbCIsMTg6IkFsdCIsMTk6IlBhdXNlIiwyMDoiQ2Fwc0xv
Y2siLDI3OiJFc2NhcGUiLDMyOiIgIiwzMzoiUGFnZVVwIiwzNDoiUGFnZURvd24iLDM1OiJFbmQi
LDM2OiJIb21lIiwzNzoiQXJyb3dMZWZ0IiwzODoiQXJyb3dVcCIsMzk6IkFycm93UmlnaHQiLDQw
OiJBcnJvd0Rvd24iLDQ1OiJJbnNlcnQiLDQ2OiJEZWxldGUiLDExMjoiRjEiLDExMzoiRjIiLDEx
NDoiRjMiLDExNToiRjQiLDExNjoiRjUiLDExNzoiRjYiLDExODoiRjciLDExOToiRjgiLDEyMDoi
RjkiLDEyMToiRjEwIiwxMjI6IkYxMSIsMTIzOiJGMTIiLDE0NDoiTnVtTG9jayIsMTQ1OiJTY3Jv
bGxMb2NrIiwyMjQ6Ik1ldGEifTt0LmV4cG9ydHM9cn0sezk4Ojk4fV0sMTAwOltmdW5jdGlvbihl
LHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9dGhpcyxuPXQubmF0aXZlRXZl
bnQ7aWYobi5nZXRNb2RpZmllclN0YXRlKXJldHVybiBuLmdldE1vZGlmaWVyU3RhdGUoZSk7dmFy
IHI9aVtlXTtyZXR1cm4hIXImJiEhbltyXX1mdW5jdGlvbiBvKGUpe3JldHVybiByfXZhciBpPXtB
bHQ6ImFsdEtleSIsQ29udHJvbDoiY3RybEtleSIsTWV0YToibWV0YUtleSIsU2hpZnQ6InNoaWZ0
S2V5In07dC5leHBvcnRzPW99LHt9XSwxMDE6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7
ZnVuY3Rpb24gcihlKXt2YXIgdD1lLnRhcmdldHx8ZS5zcmNFbGVtZW50fHx3aW5kb3c7cmV0dXJu
IHQuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQmJih0PXQuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQp
LDM9PT10Lm5vZGVUeXBlP3QucGFyZW50Tm9kZTp0fXQuZXhwb3J0cz1yfSx7fV0sMTAyOltmdW5j
dGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZSYmKG8mJmVbb118
fGVbaV0pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiB0fXZhciBvPSJmdW5jdGlvbiI9
PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixpPSJAQGl0ZXJhdG9yIjt0LmV4cG9ydHM9
cn0se31dLDEwMzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2Zv
cig7ZSYmZS5maXJzdENoaWxkOyllPWUuZmlyc3RDaGlsZDtyZXR1cm4gZX1mdW5jdGlvbiBvKGUp
e2Zvcig7ZTspe2lmKGUubmV4dFNpYmxpbmcpcmV0dXJuIGUubmV4dFNpYmxpbmc7ZT1lLnBhcmVu
dE5vZGV9fWZ1bmN0aW9uIGkoZSx0KXtmb3IodmFyIG49cihlKSxpPTAsYT0wO247KXtpZigzPT09
bi5ub2RlVHlwZSl7aWYoYT1pK24udGV4dENvbnRlbnQubGVuZ3RoLGk8PXQmJmE+PXQpcmV0dXJu
e25vZGU6bixvZmZzZXQ6dC1pfTtpPWF9bj1yKG8obikpfX10LmV4cG9ydHM9aX0se31dLDEwNDpb
ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7cmV0dXJuIWkmJm8uY2Fu
VXNlRE9NJiYoaT0idGV4dENvbnRlbnQiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50PyJ0ZXh0
Q29udGVudCI6ImlubmVyVGV4dCIpLGl9dmFyIG89ZSgxMjApLGk9bnVsbDt0LmV4cG9ydHM9cn0s
ezEyMDoxMjB9XSwxMDU6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihl
LHQpe3ZhciBuPXt9O3JldHVybiBuW2UudG9Mb3dlckNhc2UoKV09dC50b0xvd2VyQ2FzZSgpLG5b
IldlYmtpdCIrZV09IndlYmtpdCIrdCxuWyJNb3oiK2VdPSJtb3oiK3QsblsibXMiK2VdPSJNUyIr
dCxuWyJPIitlXT0ibyIrdC50b0xvd2VyQ2FzZSgpLG59ZnVuY3Rpb24gbyhlKXtpZihzW2VdKXJl
dHVybiBzW2VdO2lmKCFhW2VdKXJldHVybiBlO3ZhciB0PWFbZV07Zm9yKHZhciBuIGluIHQpaWYo
dC5oYXNPd25Qcm9wZXJ0eShuKSYmbiBpbiB1KXJldHVybiBzW2VdPXRbbl07cmV0dXJuIiJ9dmFy
IGk9ZSgxMjApLGE9e2FuaW1hdGlvbmVuZDpyKCJBbmltYXRpb24iLCJBbmltYXRpb25FbmQiKSxh
bmltYXRpb25pdGVyYXRpb246cigiQW5pbWF0aW9uIiwiQW5pbWF0aW9uSXRlcmF0aW9uIiksYW5p
bWF0aW9uc3RhcnQ6cigiQW5pbWF0aW9uIiwiQW5pbWF0aW9uU3RhcnQiKSx0cmFuc2l0aW9uZW5k
OnIoIlRyYW5zaXRpb24iLCJUcmFuc2l0aW9uRW5kIil9LHM9e30sdT17fTtpLmNhblVzZURPTSYm
KHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUsIkFuaW1hdGlvbkV2ZW50Imlu
IHdpbmRvd3x8KGRlbGV0ZSBhLmFuaW1hdGlvbmVuZC5hbmltYXRpb24sZGVsZXRlIGEuYW5pbWF0
aW9uaXRlcmF0aW9uLmFuaW1hdGlvbixkZWxldGUgYS5hbmltYXRpb25zdGFydC5hbmltYXRpb24p
LCJUcmFuc2l0aW9uRXZlbnQiaW4gd2luZG93fHxkZWxldGUgYS50cmFuc2l0aW9uZW5kLnRyYW5z
aXRpb24pLHQuZXhwb3J0cz1vfSx7MTIwOjEyMH1dLDEwNjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ug
c3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKGUpe3ZhciB0PWUuZ2V0TmFtZSgpO2lmKHQpcmV0dXJu
IiBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgIit0KyJgLiJ9cmV0dXJuIiJ9ZnVuY3Rpb24g
byhlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmdm9pZCAwIT09ZS5wcm90b3R5cGUmJiJm
dW5jdGlvbiI9PXR5cGVvZiBlLnByb3RvdHlwZS5tb3VudENvbXBvbmVudCYmImZ1bmN0aW9uIj09
dHlwZW9mIGUucHJvdG90eXBlLnJlY2VpdmVDb21wb25lbnR9ZnVuY3Rpb24gaShlLHQpe3ZhciBu
O2lmKG51bGw9PT1lfHwhMT09PWUpbj1sLmNyZWF0ZShpKTtlbHNlIGlmKCJvYmplY3QiPT10eXBl
b2YgZSl7dmFyIHM9ZSx1PXMudHlwZTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdSYmInN0cmluZyIh
PXR5cGVvZiB1KXt2YXIgZD0iIjtkKz1yKHMuX293bmVyKSxhKCIxMzAiLG51bGw9PXU/dTp0eXBl
b2YgdSxkKX0ic3RyaW5nIj09dHlwZW9mIHMudHlwZT9uPWMuY3JlYXRlSW50ZXJuYWxDb21wb25l
bnQocyk6byhzLnR5cGUpPyhuPW5ldyBzLnR5cGUocyksbi5nZXRIb3N0Tm9kZXx8KG4uZ2V0SG9z
dE5vZGU9bi5nZXROYXRpdmVOb2RlKSk6bj1uZXcgcChzKX1lbHNlInN0cmluZyI9PXR5cGVvZiBl
fHwibnVtYmVyIj09dHlwZW9mIGU/bj1jLmNyZWF0ZUluc3RhbmNlRm9yVGV4dChlKTphKCIxMzEi
LHR5cGVvZiBlKTtyZXR1cm4gbi5fbW91bnRJbmRleD0wLG4uX21vdW50SW1hZ2U9bnVsbCxufXZh
ciBhPWUoMTEwKSxzPWUoMTQwKSx1PWUoMjkpLGw9ZSg0OCksYz1lKDUzKSxwPShlKDExOCksZSgx
MzQpLGUoMTM5KSxmdW5jdGlvbihlKXt0aGlzLmNvbnN0cnVjdChlKX0pO3MocC5wcm90b3R5cGUs
dSx7X2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnQ6aX0pLHQuZXhwb3J0cz1pfSx7MTEwOjExMCwx
MTg6MTE4LDEzNDoxMzQsMTM5OjEzOSwxNDA6MTQwLDI5OjI5LDQ4OjQ4LDUzOjUzfV0sMTA3Oltm
dW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZighaS5jYW5Vc2VE
T018fHQmJiEoImFkZEV2ZW50TGlzdGVuZXIiaW4gZG9jdW1lbnQpKXJldHVybiExO3ZhciBuPSJv
biIrZSxyPW4gaW4gZG9jdW1lbnQ7aWYoIXIpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpO2Euc2V0QXR0cmlidXRlKG4sInJldHVybjsiKSxyPSJmdW5jdGlvbiI9PXR5cGVvZiBh
W25dfXJldHVybiFyJiZvJiYid2hlZWwiPT09ZSYmKHI9ZG9jdW1lbnQuaW1wbGVtZW50YXRpb24u
aGFzRmVhdHVyZSgiRXZlbnRzLndoZWVsIiwiMy4wIikpLHJ9dmFyIG8saT1lKDEyMCk7aS5jYW5V
c2VET00mJihvPWRvY3VtZW50LmltcGxlbWVudGF0aW9uJiZkb2N1bWVudC5pbXBsZW1lbnRhdGlv
bi5oYXNGZWF0dXJlJiYhMCE9PWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoIiIs
IiIpKSx0LmV4cG9ydHM9cn0sezEyMDoxMjB9XSwxMDg6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1lJiZlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93
ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQ/ISFvW2UudHlwZV06InRleHRhcmVhIj09PXR9dmFy
IG89e2NvbG9yOiEwLGRhdGU6ITAsZGF0ZXRpbWU6ITAsImRhdGV0aW1lLWxvY2FsIjohMCxlbWFp
bDohMCxtb250aDohMCxudW1iZXI6ITAscGFzc3dvcmQ6ITAscmFuZ2U6ITAsc2VhcmNoOiEwLHRl
bDohMCx0ZXh0OiEwLHRpbWU6ITAsdXJsOiEwLHdlZWs6ITB9O3QuZXhwb3J0cz1yfSx7fV0sMTA5
OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuJyInK28o
ZSkrJyInfXZhciBvPWUoOTUpO3QuZXhwb3J0cz1yfSx7OTU6OTV9XSwxMTA6W2Z1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0
aC0xLG49Ik1pbmlmaWVkIFJlYWN0IGVycm9yICMiK2UrIjsgdmlzaXQgaHR0cDovL2ZhY2Vib29r
LmdpdGh1Yi5pby9yZWFjdC9kb2NzL2Vycm9yLWRlY29kZXIuaHRtbD9pbnZhcmlhbnQ9IitlLHI9
MDtyPHQ7cisrKW4rPSImYXJnc1tdPSIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1tyKzFd
KTtuKz0iIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBl
bnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5n
cy4iO3ZhciBvPW5ldyBFcnJvcihuKTt0aHJvdyBvLm5hbWU9IkludmFyaWFudCBWaW9sYXRpb24i
LG8uZnJhbWVzVG9Qb3A9MSxvfXQuZXhwb3J0cz1yfSx7fV0sMTExOltmdW5jdGlvbihlLHQsbil7
InVzZSBzdHJpY3QiO3ZhciByLG89ZSgxMjApLGk9ZSgxMCksYT0vXlsgXHJcblx0XGZdLyxzPS88
KCEtLXxsaW5rfG5vc2NyaXB0fG1ldGF8c2NyaXB0fHN0eWxlKVsgXHJcblx0XGZcLz5dLyx1PWUo
OTMpLGw9dShmdW5jdGlvbihlLHQpe2lmKGUubmFtZXNwYWNlVVJJIT09aS5zdmd8fCJpbm5lckhU
TUwiaW4gZSllLmlubmVySFRNTD10O2Vsc2V7cj1yfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKSxyLmlubmVySFRNTD0iPHN2Zz4iK3QrIjwvc3ZnPiI7Zm9yKHZhciBuPXIuZmlyc3RDaGls
ZDtuLmZpcnN0Q2hpbGQ7KWUuYXBwZW5kQ2hpbGQobi5maXJzdENoaWxkKX19KTtpZihvLmNhblVz
ZURPTSl7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Yy5pbm5lckhUTUw9IiAi
LCIiPT09Yy5pbm5lckhUTUwmJihsPWZ1bmN0aW9uKGUsdCl7aWYoZS5wYXJlbnROb2RlJiZlLnBh
cmVudE5vZGUucmVwbGFjZUNoaWxkKGUsZSksYS50ZXN0KHQpfHwiPCI9PT10WzBdJiZzLnRlc3Qo
dCkpe2UuaW5uZXJIVE1MPVN0cmluZy5mcm9tQ2hhckNvZGUoNjUyNzkpK3Q7dmFyIG49ZS5maXJz
dENoaWxkOzE9PT1uLmRhdGEubGVuZ3RoP2UucmVtb3ZlQ2hpbGQobik6bi5kZWxldGVEYXRhKDAs
MSl9ZWxzZSBlLmlubmVySFRNTD10fSksYz1udWxsfXQuZXhwb3J0cz1sfSx7MTA6MTAsMTIwOjEy
MCw5Mzo5M31dLDExMjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDEyMCks
bz1lKDk1KSxpPWUoMTExKSxhPWZ1bmN0aW9uKGUsdCl7aWYodCl7dmFyIG49ZS5maXJzdENoaWxk
O2lmKG4mJm49PT1lLmxhc3RDaGlsZCYmMz09PW4ubm9kZVR5cGUpcmV0dXJuIHZvaWQobi5ub2Rl
VmFsdWU9dCl9ZS50ZXh0Q29udGVudD10fTtyLmNhblVzZURPTSYmKCJ0ZXh0Q29udGVudCJpbiBk
b2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fChhPWZ1bmN0aW9uKGUsdCl7aWYoMz09PWUubm9kZVR5
cGUpcmV0dXJuIHZvaWQoZS5ub2RlVmFsdWU9dCk7aShlLG8odCkpfSkpLHQuZXhwb3J0cz1hfSx7
MTExOjExMSwxMjA6MTIwLDk1Ojk1fV0sMTEzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3Qi
O2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj1udWxsPT09ZXx8ITE9PT1lLHI9bnVsbD09PXR8fCExPT09
dDtpZihufHxyKXJldHVybiBuPT09cjt2YXIgbz10eXBlb2YgZSxpPXR5cGVvZiB0O3JldHVybiJz
dHJpbmciPT09b3x8Im51bWJlciI9PT1vPyJzdHJpbmciPT09aXx8Im51bWJlciI9PT1pOiJvYmpl
Y3QiPT09aSYmZS50eXBlPT09dC50eXBlJiZlLmtleT09PXQua2V5fXQuZXhwb3J0cz1yfSx7fV0s
MTE0OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4g
ZSYmIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT1lLmtleT9sLmVzY2FwZShlLmtleSk6dC50b1N0
cmluZygzNil9ZnVuY3Rpb24gbyhlLHQsbixpKXt2YXIgZD10eXBlb2YgZTtpZigidW5kZWZpbmVk
IiE9PWQmJiJib29sZWFuIiE9PWR8fChlPW51bGwpLG51bGw9PT1lfHwic3RyaW5nIj09PWR8fCJu
dW1iZXIiPT09ZHx8Im9iamVjdCI9PT1kJiZlLiQkdHlwZW9mPT09cylyZXR1cm4gbihpLGUsIiI9
PT10P2MrcihlLDApOnQpLDE7dmFyIGYsaCxtPTAsdj0iIj09PXQ/Yzp0K3A7aWYoQXJyYXkuaXNB
cnJheShlKSlmb3IodmFyIGc9MDtnPGUubGVuZ3RoO2crKylmPWVbZ10saD12K3IoZixnKSxtKz1v
KGYsaCxuLGkpO2Vsc2V7dmFyIHk9dShlKTtpZih5KXt2YXIgXyxDPXkuY2FsbChlKTtpZih5IT09
ZS5lbnRyaWVzKWZvcih2YXIgYj0wOyEoXz1DLm5leHQoKSkuZG9uZTspZj1fLnZhbHVlLGg9dity
KGYsYisrKSxtKz1vKGYsaCxuLGkpO2Vsc2UgZm9yKDshKF89Qy5uZXh0KCkpLmRvbmU7KXt2YXIg
RT1fLnZhbHVlO0UmJihmPUVbMV0saD12K2wuZXNjYXBlKEVbMF0pK3ArcihmLDApLG0rPW8oZixo
LG4saSkpfX1lbHNlIGlmKCJvYmplY3QiPT09ZCl7dmFyIHg9U3RyaW5nKGUpO2EoIjMxIiwiW29i
amVjdCBPYmplY3RdIj09PXg/Im9iamVjdCB3aXRoIGtleXMgeyIrT2JqZWN0LmtleXMoZSkuam9p
bigiLCAiKSsifSI6eCwiIil9fXJldHVybiBtfWZ1bmN0aW9uIGkoZSx0LG4pe3JldHVybiBudWxs
PT1lPzA6byhlLCIiLHQsbil9dmFyIGE9ZSgxMTApLHM9KGUoMTE2KSxlKDQ3KSksdT1lKDEwMiks
bD0oZSgxMzQpLGUoMjIpKSxjPShlKDEzOSksIi4iKSxwPSI6Ijt0LmV4cG9ydHM9aX0sezEwMjox
MDIsMTEwOjExMCwxMTY6MTE2LDEzNDoxMzQsMTM5OjEzOSwyMjoyMiw0Nzo0N31dLDExNTpbZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj0oZSgxNDApLGUoMTI2KSksbz0oZSgxMzkp
LHIpO3QuZXhwb3J0cz1vfSx7MTI2OjEyNiwxMzk6MTM5LDE0MDoxNDB9XSwxMTY6W2Z1bmN0aW9u
KHQsbixyKXsidXNlIHN0cmljdCI7dmFyIG89ZS5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VT
RV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDtuLmV4cG9ydHM9by5SZWFjdEN1cnJlbnRPd25lcn0se31d
LDExNzpbZnVuY3Rpb24odCxuLHIpeyJ1c2Ugc3RyaWN0IjtuLmV4cG9ydHM9ZX0se31dLDExODpb
ZnVuY3Rpb24odCxuLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbz1lLl9fU0VDUkVUX0lOVEVSTkFMU19E
T19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEO24uZXhwb3J0cz1vLmdldE5leHREZWJ1Z0lE
fSx7fV0sMTE5OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMTI2KSxvPXts
aXN0ZW46ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlLmFkZEV2ZW50TGlzdGVuZXI/KGUuYWRkRXZl
bnRMaXN0ZW5lcih0LG4sITEpLHtyZW1vdmU6ZnVuY3Rpb24oKXtlLnJlbW92ZUV2ZW50TGlzdGVu
ZXIodCxuLCExKX19KTplLmF0dGFjaEV2ZW50PyhlLmF0dGFjaEV2ZW50KCJvbiIrdCxuKSx7cmVt
b3ZlOmZ1bmN0aW9uKCl7ZS5kZXRhY2hFdmVudCgib24iK3Qsbil9fSk6dm9pZCAwfSxjYXB0dXJl
OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZS5hZGRFdmVudExpc3RlbmVyPyhlLmFkZEV2ZW50TGlz
dGVuZXIodCxuLCEwKSx7cmVtb3ZlOmZ1bmN0aW9uKCl7ZS5yZW1vdmVFdmVudExpc3RlbmVyKHQs
biwhMCl9fSk6e3JlbW92ZTpyfX0scmVnaXN0ZXJEZWZhdWx0OmZ1bmN0aW9uKCl7fX07dC5leHBv
cnRzPW99LHsxMjY6MTI2fV0sMTIwOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBy
PSEoInVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3d8fCF3aW5kb3cuZG9jdW1lbnR8fCF3aW5kb3cu
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCksbz17Y2FuVXNlRE9NOnIsY2FuVXNlV29ya2VyczoidW5k
ZWZpbmVkIiE9dHlwZW9mIFdvcmtlcixjYW5Vc2VFdmVudExpc3RlbmVyczpyJiYhKCF3aW5kb3cu
YWRkRXZlbnRMaXN0ZW5lciYmIXdpbmRvdy5hdHRhY2hFdmVudCksY2FuVXNlVmlld3BvcnQ6ciYm
ISF3aW5kb3cuc2NyZWVuLGlzSW5Xb3JrZXI6IXJ9O3QuZXhwb3J0cz1vfSx7fV0sMTIxOltmdW5j
dGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUucmVwbGFjZShv
LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQudG9VcHBlckNhc2UoKX0pfXZhciBvPS8tKC4pL2c7dC5l
eHBvcnRzPXJ9LHt9XSwxMjI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24g
cihlKXtyZXR1cm4gbyhlLnJlcGxhY2UoaSwibXMtIikpfXZhciBvPWUoMTIxKSxpPS9eLW1zLS87
dC5leHBvcnRzPXJ9LHsxMjE6MTIxfV0sMTIzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3Qi
O2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4hKCFlfHwhdCkmJihlPT09dHx8IW8oZSkmJihvKHQpP3Io
ZSx0LnBhcmVudE5vZGUpOiJjb250YWlucyJpbiBlP2UuY29udGFpbnModCk6ISFlLmNvbXBhcmVE
b2N1bWVudFBvc2l0aW9uJiYhISgxNiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpKSkpfXZh
ciBvPWUoMTM2KTt0LmV4cG9ydHM9cn0sezEzNjoxMzZ9XSwxMjQ6W2Z1bmN0aW9uKGUsdCxuKXsi
dXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1lLmxlbmd0aDtpZigoQXJyYXkuaXNBcnJh
eShlKXx8Im9iamVjdCIhPXR5cGVvZiBlJiYiZnVuY3Rpb24iIT10eXBlb2YgZSkmJmEoITEpLCJu
dW1iZXIiIT10eXBlb2YgdCYmYSghMSksMD09PXR8fHQtMSBpbiBlfHxhKCExKSwiZnVuY3Rpb24i
PT10eXBlb2YgZS5jYWxsZWUmJmEoITEpLGUuaGFzT3duUHJvcGVydHkpdHJ5e3JldHVybiBBcnJh
eS5wcm90b3R5cGUuc2xpY2UuY2FsbChlKX1jYXRjaChlKXt9Zm9yKHZhciBuPUFycmF5KHQpLHI9
MDtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBvKGUpe3JldHVybiEhZSYmKCJv
YmplY3QiPT10eXBlb2YgZXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpJiYibGVuZ3RoImluIGUmJiEo
InNldEludGVydmFsImluIGUpJiYibnVtYmVyIiE9dHlwZW9mIGUubm9kZVR5cGUmJihBcnJheS5p
c0FycmF5KGUpfHwiY2FsbGVlImluIGV8fCJpdGVtImluIGUpfWZ1bmN0aW9uIGkoZSl7cmV0dXJu
IG8oZSk/QXJyYXkuaXNBcnJheShlKT9lLnNsaWNlKCk6cihlKTpbZV19dmFyIGE9ZSgxMzQpO3Qu
ZXhwb3J0cz1pfSx7MTM0OjEzNH1dLDEyNTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijtm
dW5jdGlvbiByKGUpe3ZhciB0PWUubWF0Y2goYyk7cmV0dXJuIHQmJnRbMV0udG9Mb3dlckNhc2Uo
KX1mdW5jdGlvbiBvKGUsdCl7dmFyIG49bDtsfHx1KCExKTt2YXIgbz1yKGUpLGk9byYmcyhvKTtp
ZihpKXtuLmlubmVySFRNTD1pWzFdK2UraVsyXTtmb3IodmFyIGM9aVswXTtjLS07KW49bi5sYXN0
Q2hpbGR9ZWxzZSBuLmlubmVySFRNTD1lO3ZhciBwPW4uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNj
cmlwdCIpO3AubGVuZ3RoJiYodHx8dSghMSksYShwKS5mb3JFYWNoKHQpKTtmb3IodmFyIGQ9QXJy
YXkuZnJvbShuLmNoaWxkTm9kZXMpO24ubGFzdENoaWxkOyluLnJlbW92ZUNoaWxkKG4ubGFzdENo
aWxkKTtyZXR1cm4gZH12YXIgaT1lKDEyMCksYT1lKDEyNCkscz1lKDEzMCksdT1lKDEzNCksbD1p
LmNhblVzZURPTT9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTpudWxsLGM9L15ccyo8KFx3
KykvO3QuZXhwb3J0cz1vfSx7MTIwOjEyMCwxMjQ6MTI0LDEzMDoxMzAsMTM0OjEzNH1dLDEyNjpb
ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBmdW5jdGlv
bigpe3JldHVybiBlfX12YXIgbz1mdW5jdGlvbigpe307by50aGF0UmV0dXJucz1yLG8udGhhdFJl
dHVybnNGYWxzZT1yKCExKSxvLnRoYXRSZXR1cm5zVHJ1ZT1yKCEwKSxvLnRoYXRSZXR1cm5zTnVs
bD1yKG51bGwpLG8udGhhdFJldHVybnNUaGlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LG8udGhh
dFJldHVybnNBcmd1bWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZX0sdC5leHBvcnRzPW99LHt9XSwx
Mjc6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9e307dC5leHBvcnRzPXJ9LHt9
XSwxMjg6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt0cnl7ZS5m
b2N1cygpfWNhdGNoKGUpe319dC5leHBvcnRzPXJ9LHt9XSwxMjk6W2Z1bmN0aW9uKGUsdCxuKXsi
dXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZih2b2lkIDA9PT0oZT1lfHwoInVuZGVmaW5lZCIh
PXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudDp2b2lkIDApKSlyZXR1cm4gbnVsbDt0cnl7cmV0dXJu
IGUuYWN0aXZlRWxlbWVudHx8ZS5ib2R5fWNhdGNoKHQpe3JldHVybiBlLmJvZHl9fXQuZXhwb3J0
cz1yfSx7fV0sMTMwOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7
cmV0dXJuIGF8fGkoITEpLGQuaGFzT3duUHJvcGVydHkoZSl8fChlPSIqIikscy5oYXNPd25Qcm9w
ZXJ0eShlKXx8KGEuaW5uZXJIVE1MPSIqIj09PWU/IjxsaW5rIC8+IjoiPCIrZSsiPjwvIitlKyI+
IixzW2VdPSFhLmZpcnN0Q2hpbGQpLHNbZV0/ZFtlXTpudWxsfXZhciBvPWUoMTIwKSxpPWUoMTM0
KSxhPW8uY2FuVXNlRE9NP2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOm51bGwscz17fSx1
PVsxLCc8c2VsZWN0IG11bHRpcGxlPSJ0cnVlIj4nLCI8L3NlbGVjdD4iXSxsPVsxLCI8dGFibGU+
IiwiPC90YWJsZT4iXSxjPVszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90
YWJsZT4iXSxwPVsxLCc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+Jywi
PC9zdmc+Il0sZD17IioiOlsxLCI/PGRpdj4iLCI8L2Rpdj4iXSxhcmVhOlsxLCI8bWFwPiIsIjwv
bWFwPiJdLGNvbDpbMiwiPHRhYmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4iLCI8L2NvbGdy
b3VwPjwvdGFibGU+Il0sbGVnZW5kOlsxLCI8ZmllbGRzZXQ+IiwiPC9maWVsZHNldD4iXSxwYXJh
bTpbMSwiPG9iamVjdD4iLCI8L29iamVjdD4iXSx0cjpbMiwiPHRhYmxlPjx0Ym9keT4iLCI8L3Ri
b2R5PjwvdGFibGU+Il0sb3B0Z3JvdXA6dSxvcHRpb246dSxjYXB0aW9uOmwsY29sZ3JvdXA6bCx0
Ym9keTpsLHRmb290OmwsdGhlYWQ6bCx0ZDpjLHRoOmN9O1siY2lyY2xlIiwiY2xpcFBhdGgiLCJk
ZWZzIiwiZWxsaXBzZSIsImciLCJpbWFnZSIsImxpbmUiLCJsaW5lYXJHcmFkaWVudCIsIm1hc2si
LCJwYXRoIiwicGF0dGVybiIsInBvbHlnb24iLCJwb2x5bGluZSIsInJhZGlhbEdyYWRpZW50Iiwi
cmVjdCIsInN0b3AiLCJ0ZXh0IiwidHNwYW4iXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2RbZV09cCxz
W2VdPSEwfSksdC5leHBvcnRzPXJ9LHsxMjA6MTIwLDEzNDoxMzR9XSwxMzE6W2Z1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZS5XaW5kb3cmJmUgaW5zdGFu
Y2VvZiBlLldpbmRvdz97eDplLnBhZ2VYT2Zmc2V0fHxlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVu
dC5zY3JvbGxMZWZ0LHk6ZS5wYWdlWU9mZnNldHx8ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQu
c2Nyb2xsVG9wfTp7eDplLnNjcm9sbExlZnQseTplLnNjcm9sbFRvcH19dC5leHBvcnRzPXJ9LHt9
XSwxMzI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4g
ZS5yZXBsYWNlKG8sIi0kMSIpLnRvTG93ZXJDYXNlKCl9dmFyIG89LyhbQS1aXSkvZzt0LmV4cG9y
dHM9cn0se31dLDEzMzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUp
e3JldHVybiBvKGUpLnJlcGxhY2UoaSwiLW1zLSIpfXZhciBvPWUoMTMyKSxpPS9ebXMtLzt0LmV4
cG9ydHM9cn0sezEzMjoxMzJ9XSwxMzQ6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVu
Y3Rpb24gcihlLHQsbixyLGksYSxzLHUpe2lmKG8odCksIWUpe3ZhciBsO2lmKHZvaWQgMD09PXQp
bD1uZXcgRXJyb3IoIk1pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWlu
aWZpZWQgZGV2IGVudmlyb25tZW50IGZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRp
dGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIik7ZWxzZXt2YXIgYz1bbixyLGksYSxzLHVdLHA9MDts
PW5ldyBFcnJvcih0LnJlcGxhY2UoLyVzL2csZnVuY3Rpb24oKXtyZXR1cm4gY1twKytdfSkpLGwu
bmFtZT0iSW52YXJpYW50IFZpb2xhdGlvbiJ9dGhyb3cgbC5mcmFtZXNUb1BvcD0xLGx9fXZhciBv
PWZ1bmN0aW9uKGUpe307dC5leHBvcnRzPXJ9LHt9XSwxMzU6W2Z1bmN0aW9uKGUsdCxuKXsidXNl
IHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1lP2Uub3duZXJEb2N1bWVudHx8ZTpkb2N1bWVu
dCxuPXQuZGVmYXVsdFZpZXd8fHdpbmRvdztyZXR1cm4hKCFlfHwhKCJmdW5jdGlvbiI9PXR5cGVv
ZiBuLk5vZGU/ZSBpbnN0YW5jZW9mIG4uTm9kZToib2JqZWN0Ij09dHlwZW9mIGUmJiJudW1iZXIi
PT10eXBlb2YgZS5ub2RlVHlwZSYmInN0cmluZyI9PXR5cGVvZiBlLm5vZGVOYW1lKSl9dC5leHBv
cnRzPXJ9LHt9XSwxMzY6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihl
KXtyZXR1cm4gbyhlKSYmMz09ZS5ub2RlVHlwZX12YXIgbz1lKDEzNSk7dC5leHBvcnRzPXJ9LHsx
MzU6MTM1fV0sMTM3OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7
dmFyIHQ9e307cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0Lmhhc093blByb3BlcnR5KG4pfHwo
dFtuXT1lLmNhbGwodGhpcyxuKSksdFtuXX19dC5leHBvcnRzPXJ9LHt9XSwxMzg6W2Z1bmN0aW9u
KGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBlPT09dD8wIT09ZXx8
MCE9PXR8fDEvZT09MS90OmUhPT1lJiZ0IT09dH1mdW5jdGlvbiBvKGUsdCl7aWYocihlLHQpKXJl
dHVybiEwO2lmKCJvYmplY3QiIT10eXBlb2YgZXx8bnVsbD09PWV8fCJvYmplY3QiIT10eXBlb2Yg
dHx8bnVsbD09PXQpcmV0dXJuITE7dmFyIG49T2JqZWN0LmtleXMoZSksbz1PYmplY3Qua2V5cyh0
KTtpZihuLmxlbmd0aCE9PW8ubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgYT0wO2E8bi5sZW5ndGg7
YSsrKWlmKCFpLmNhbGwodCxuW2FdKXx8IXIoZVtuW2FdXSx0W25bYV1dKSlyZXR1cm4hMTtyZXR1
cm4hMH12YXIgaT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1vfSx7
fV0sMTM5OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMTI2KSxvPXI7dC5l
eHBvcnRzPW99LHsxMjY6MTI2fV0sMTQwOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1
bmN0aW9uIHIoZSl7aWYobnVsbD09PWV8fHZvaWQgMD09PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigi
T2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQiKTty
ZXR1cm4gT2JqZWN0KGUpfXZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsaT1PYmpl
Y3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGE9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlz
RW51bWVyYWJsZTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt0cnl7aWYoIU9iamVjdC5hc3NpZ24pcmV0
dXJuITE7dmFyIGU9bmV3IFN0cmluZygiYWJjIik7aWYoZVs1XT0iZGUiLCI1Ij09PU9iamVjdC5n
ZXRPd25Qcm9wZXJ0eU5hbWVzKGUpWzBdKXJldHVybiExO2Zvcih2YXIgdD17fSxuPTA7bjwxMDtu
KyspdFsiXyIrU3RyaW5nLmZyb21DaGFyQ29kZShuKV09bjtpZigiMDEyMzQ1Njc4OSIhPT1PYmpl
Y3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KS5q
b2luKCIiKSlyZXR1cm4hMTt2YXIgcj17fTtyZXR1cm4iYWJjZGVmZ2hpamtsbW5vcHFyc3QiLnNw
bGl0KCIiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JbZV09ZX0pLCJhYmNkZWZnaGlqa2xtbm9wcXJz
dCI9PT1PYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LHIpKS5qb2luKCIiKX1jYXRjaChlKXty
ZXR1cm4hMX19KCk/T2JqZWN0LmFzc2lnbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbixzLHU9cihl
KSxsPTE7bDxhcmd1bWVudHMubGVuZ3RoO2wrKyl7bj1PYmplY3QoYXJndW1lbnRzW2xdKTtmb3Io
dmFyIGMgaW4gbilpLmNhbGwobixjKSYmKHVbY109bltjXSk7aWYobyl7cz1vKG4pO2Zvcih2YXIg
cD0wO3A8cy5sZW5ndGg7cCsrKWEuY2FsbChuLHNbcF0pJiYodVtzW3BdXT1uW3NbcF1dKX19cmV0
dXJuIHV9fSx7fV0sMTQxOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIo
ZSx0LG4scixvKXt9dC5leHBvcnRzPXJ9LHsxMzQ6MTM0LDEzOToxMzksMTQ0OjE0NH1dLDE0Mjpb
ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDE0Myk7dC5leHBvcnRzPWZ1bmN0
aW9uKGUpe3JldHVybiByKGUsITEpfX0sezE0MzoxNDN9XSwxNDM6W2Z1bmN0aW9uKGUsdCxuKXsi
dXNlIHN0cmljdCI7dmFyIHI9ZSgxMjYpLG89ZSgxMzQpLGk9KGUoMTM5KSxlKDE0NCkpLGE9ZSgx
NDEpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7dmFyIHQ9ZSYmKEUmJmVb
RV18fGVbeF0pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiB0fWZ1bmN0aW9uIHMoZSx0
KXtyZXR1cm4gZT09PXQ/MCE9PWV8fDEvZT09MS90OmUhPT1lJiZ0IT09dH1mdW5jdGlvbiB1KGUp
e3RoaXMubWVzc2FnZT1lLHRoaXMuc3RhY2s9IiJ9ZnVuY3Rpb24gbChlKXtmdW5jdGlvbiBuKG4s
cixhLHMsbCxjLHApe2lmKHM9c3x8dyxjPWN8fGEscCE9PWkpaWYodClvKCExLCJDYWxsaW5nIFBy
b3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9w
LXR5cGVzYCBwYWNrYWdlLiBVc2UgYFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0byBjYWxs
IHRoZW0uIFJlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMiKTtl
bHNlO3JldHVybiBudWxsPT1yW2FdP24/bmV3IHUobnVsbD09PXJbYV0/IlRoZSAiK2wrIiBgIitj
KyJgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCBpbiBgIitzKyJgLCBidXQgaXRzIHZhbHVlIGlzIGBu
dWxsYC4iOiJUaGUgIitsKyIgYCIrYysiYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gYCIrcysi
YCwgYnV0IGl0cyB2YWx1ZSBpcyBgdW5kZWZpbmVkYC4iKTpudWxsOmUocixhLHMsbCxjKX12YXIg
cj1uLmJpbmQobnVsbCwhMSk7cmV0dXJuIHIuaXNSZXF1aXJlZD1uLmJpbmQobnVsbCwhMCkscn1m
dW5jdGlvbiBjKGUpe2Z1bmN0aW9uIHQodCxuLHIsbyxpLGEpe3ZhciBzPXRbbl07aWYoXyhzKSE9
PWUpcmV0dXJuIG5ldyB1KCJJbnZhbGlkICIrbysiIGAiK2krImAgb2YgdHlwZSBgIitDKHMpKyJg
IHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVjdGVkIGAiK2UrImAuIik7cmV0dXJuIG51bGx9cmV0
dXJuIGwodCl9ZnVuY3Rpb24gcChlKXtmdW5jdGlvbiB0KHQsbixyLG8sYSl7aWYoImZ1bmN0aW9u
IiE9dHlwZW9mIGUpcmV0dXJuIG5ldyB1KCJQcm9wZXJ0eSBgIithKyJgIG9mIGNvbXBvbmVudCBg
IityKyJgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBhcnJheU9mLiIpO3Zh
ciBzPXRbbl07aWYoIUFycmF5LmlzQXJyYXkocykpe3JldHVybiBuZXcgdSgiSW52YWxpZCAiK28r
IiBgIithKyJgIG9mIHR5cGUgYCIrXyhzKSsiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3Rl
ZCBhbiBhcnJheS4iKX1mb3IodmFyIGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIGM9ZShzLGwscixv
LGErIlsiK2wrIl0iLGkpO2lmKGMgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gY31yZXR1cm4gbnVs
bH1yZXR1cm4gbCh0KX1mdW5jdGlvbiBkKGUpe2Z1bmN0aW9uIHQodCxuLHIsbyxpKXtpZighKHRb
bl1pbnN0YW5jZW9mIGUpKXt2YXIgYT1lLm5hbWV8fHc7cmV0dXJuIG5ldyB1KCJJbnZhbGlkICIr
bysiIGAiK2krImAgb2YgdHlwZSBgIitiKHRbbl0pKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4
cGVjdGVkIGluc3RhbmNlIG9mIGAiK2ErImAuIil9cmV0dXJuIG51bGx9cmV0dXJuIGwodCl9ZnVu
Y3Rpb24gZihlKXtmdW5jdGlvbiB0KHQsbixyLG8saSl7Zm9yKHZhciBhPXRbbl0sbD0wO2w8ZS5s
ZW5ndGg7bCsrKWlmKHMoYSxlW2xdKSlyZXR1cm4gbnVsbDtyZXR1cm4gbmV3IHUoIkludmFsaWQg
IitvKyIgYCIraSsiYCBvZiB2YWx1ZSBgIithKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVj
dGVkIG9uZSBvZiAiK0pTT04uc3RyaW5naWZ5KGUpKyIuIil9cmV0dXJuIEFycmF5LmlzQXJyYXko
ZSk/bCh0KTpyLnRoYXRSZXR1cm5zTnVsbH1mdW5jdGlvbiBoKGUpe2Z1bmN0aW9uIHQodCxuLHIs
byxhKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSlyZXR1cm4gbmV3IHUoIlByb3BlcnR5IGAiK2Er
ImAgb2YgY29tcG9uZW50IGAiK3IrImAgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5z
aWRlIG9iamVjdE9mLiIpO3ZhciBzPXRbbl0sbD1fKHMpO2lmKCJvYmplY3QiIT09bClyZXR1cm4g
bmV3IHUoIkludmFsaWQgIitvKyIgYCIrYSsiYCBvZiB0eXBlIGAiK2wrImAgc3VwcGxpZWQgdG8g
YCIrcisiYCwgZXhwZWN0ZWQgYW4gb2JqZWN0LiIpO2Zvcih2YXIgYyBpbiBzKWlmKHMuaGFzT3du
UHJvcGVydHkoYykpe3ZhciBwPWUocyxjLHIsbyxhKyIuIitjLGkpO2lmKHAgaW5zdGFuY2VvZiBF
cnJvcilyZXR1cm4gcH1yZXR1cm4gbnVsbH1yZXR1cm4gbCh0KX1mdW5jdGlvbiBtKGUpe2Z1bmN0
aW9uIHQodCxuLHIsbyxhKXtmb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKyl7aWYobnVsbD09KDAs
ZVtzXSkodCxuLHIsbyxhLGkpKXJldHVybiBudWxsfXJldHVybiBuZXcgdSgiSW52YWxpZCAiK28r
IiBgIithKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAuIil9cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/
bCh0KTpyLnRoYXRSZXR1cm5zTnVsbH1mdW5jdGlvbiB2KGUpe2Z1bmN0aW9uIHQodCxuLHIsbyxh
KXt2YXIgcz10W25dLGw9XyhzKTtpZigib2JqZWN0IiE9PWwpcmV0dXJuIG5ldyB1KCJJbnZhbGlk
ICIrbysiIGAiK2ErImAgb2YgdHlwZSBgIitsKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVj
dGVkIGBvYmplY3RgLiIpO2Zvcih2YXIgYyBpbiBlKXt2YXIgcD1lW2NdO2lmKHApe3ZhciBkPXAo
cyxjLHIsbyxhKyIuIitjLGkpO2lmKGQpcmV0dXJuIGR9fXJldHVybiBudWxsfXJldHVybiBsKHQp
fWZ1bmN0aW9uIGcodCl7c3dpdGNoKHR5cGVvZiB0KXtjYXNlIm51bWJlciI6Y2FzZSJzdHJpbmci
OmNhc2UidW5kZWZpbmVkIjpyZXR1cm4hMDtjYXNlImJvb2xlYW4iOnJldHVybiF0O2Nhc2Uib2Jq
ZWN0IjppZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0LmV2ZXJ5KGcpO2lmKG51bGw9PT10fHxl
KHQpKXJldHVybiEwO3ZhciByPW4odCk7aWYoIXIpcmV0dXJuITE7dmFyIG8saT1yLmNhbGwodCk7
aWYociE9PXQuZW50cmllcyl7Zm9yKDshKG89aS5uZXh0KCkpLmRvbmU7KWlmKCFnKG8udmFsdWUp
KXJldHVybiExfWVsc2UgZm9yKDshKG89aS5uZXh0KCkpLmRvbmU7KXt2YXIgYT1vLnZhbHVlO2lm
KGEmJiFnKGFbMV0pKXJldHVybiExfXJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9u
IHkoZSx0KXtyZXR1cm4ic3ltYm9sIj09PWV8fCgiU3ltYm9sIj09PXRbIkBAdG9TdHJpbmdUYWci
XXx8ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdCBpbnN0YW5jZW9mIFN5bWJvbCl9ZnVuY3Rp
b24gXyhlKXt2YXIgdD10eXBlb2YgZTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8iYXJyYXkiOmUg
aW5zdGFuY2VvZiBSZWdFeHA/Im9iamVjdCI6eSh0LGUpPyJzeW1ib2wiOnR9ZnVuY3Rpb24gQyhl
KXt2YXIgdD1fKGUpO2lmKCJvYmplY3QiPT09dCl7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJu
ImRhdGUiO2lmKGUgaW5zdGFuY2VvZiBSZWdFeHApcmV0dXJuInJlZ2V4cCJ9cmV0dXJuIHR9ZnVu
Y3Rpb24gYihlKXtyZXR1cm4gZS5jb25zdHJ1Y3RvciYmZS5jb25zdHJ1Y3Rvci5uYW1lP2UuY29u
c3RydWN0b3IubmFtZTp3fXZhciBFPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5p
dGVyYXRvcix4PSJAQGl0ZXJhdG9yIix3PSI8PGFub255bW91cz4+IixrPXthcnJheTpjKCJhcnJh
eSIpLGJvb2w6YygiYm9vbGVhbiIpLGZ1bmM6YygiZnVuY3Rpb24iKSxudW1iZXI6YygibnVtYmVy
Iiksb2JqZWN0OmMoIm9iamVjdCIpLHN0cmluZzpjKCJzdHJpbmciKSxzeW1ib2w6Yygic3ltYm9s
IiksYW55OmZ1bmN0aW9uKCl7cmV0dXJuIGwoci50aGF0UmV0dXJuc051bGwpfSgpLGFycmF5T2Y6
cCxlbGVtZW50OmZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LG4scixvLGkpe3ZhciBhPXRbbl07aWYo
IWUoYSkpe3JldHVybiBuZXcgdSgiSW52YWxpZCAiK28rIiBgIitpKyJgIG9mIHR5cGUgYCIrXyhh
KSsiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQu
Iil9cmV0dXJuIG51bGx9cmV0dXJuIGwodCl9KCksaW5zdGFuY2VPZjpkLG5vZGU6ZnVuY3Rpb24o
KXtmdW5jdGlvbiBlKGUsdCxuLHIsbyl7cmV0dXJuIGcoZVt0XSk/bnVsbDpuZXcgdSgiSW52YWxp
ZCAiK3IrIiBgIitvKyJgIHN1cHBsaWVkIHRvIGAiK24rImAsIGV4cGVjdGVkIGEgUmVhY3ROb2Rl
LiIpfXJldHVybiBsKGUpfSgpLG9iamVjdE9mOmgsb25lT2Y6ZixvbmVPZlR5cGU6bSxzaGFwZTp2
fTtyZXR1cm4gdS5wcm90b3R5cGU9RXJyb3IucHJvdG90eXBlLGsuY2hlY2tQcm9wVHlwZXM9YSxr
LlByb3BUeXBlcz1rLGt9fSx7MTI2OjEyNiwxMzQ6MTM0LDEzOToxMzksMTQxOjE0MSwxNDQ6MTQ0
fV0sMTQ0OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz0iU0VDUkVUX0RP
X05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQifSx7fV19LHt9LFs0MV0pKDQxKX0o
KX0oKX0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL3JlYWN0L25vZGVfbW9kdWxlcy9yZWFjdC1kb20vZGlzdC9yZWFjdC1kb20ubWluLmpzIGIv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9kaXN0L3JlYWN0LWRvbS5t
aW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMzI2MWVkZGQ2NjAyM2E5ZjgyMjVmOTUxOGYyYjc5NDI2NDQ2OWJl
NQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9yZWFj
dC1kb20vZGlzdC9yZWFjdC1kb20ubWluLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8qKgorICogUmVh
Y3RET00gdjE1LjUuNAorICoKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJ
bmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMg
bGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElD
RU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBh
ZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUg
UEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKyFmdW5jdGlvbihl
KXtpZigib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxl
KW1vZHVsZS5leHBvcnRzPWUocmVxdWlyZSgicmVhY3QiKSk7ZWxzZSBpZigiZnVuY3Rpb24iPT10
eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbInJlYWN0Il0sZSk7ZWxzZXt2YXIgdDt0
PSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGds
b2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcyx0LlJlYWN0RE9N
PWUodC5SZWFjdCl9fShmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0
aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIG8oYSxzKXtpZighblthXSl7
aWYoIXRbYV0pe3ZhciB1PSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFz
JiZ1KXJldHVybiB1KGEsITApO2lmKGkpcmV0dXJuIGkoYSwhMCk7dmFyIGw9bmV3IEVycm9yKCJD
YW5ub3QgZmluZCBtb2R1bGUgJyIrYSsiJyIpO3Rocm93IGwuY29kZT0iTU9EVUxFX05PVF9GT1VO
RCIsbH12YXIgYz1uW2FdPXtleHBvcnRzOnt9fTt0W2FdWzBdLmNhbGwoYy5leHBvcnRzLGZ1bmN0
aW9uKGUpe3ZhciBuPXRbYV1bMV1bZV07cmV0dXJuIG8obnx8ZSl9LGMsYy5leHBvcnRzLGUsdCxu
LHIpfXJldHVybiBuW2FdLmV4cG9ydHN9Zm9yKHZhciBpPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1
aXJlJiZyZXF1aXJlLGE9MDthPHIubGVuZ3RoO2ErKylvKHJbYV0pO3JldHVybiBvfSh7MTpbZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj17UHJvcGVydGllczp7ImFyaWEtY3VycmVu
dCI6MCwiYXJpYS1kZXRhaWxzIjowLCJhcmlhLWRpc2FibGVkIjowLCJhcmlhLWhpZGRlbiI6MCwi
YXJpYS1pbnZhbGlkIjowLCJhcmlhLWtleXNob3J0Y3V0cyI6MCwiYXJpYS1sYWJlbCI6MCwiYXJp
YS1yb2xlZGVzY3JpcHRpb24iOjAsImFyaWEtYXV0b2NvbXBsZXRlIjowLCJhcmlhLWNoZWNrZWQi
OjAsImFyaWEtZXhwYW5kZWQiOjAsImFyaWEtaGFzcG9wdXAiOjAsImFyaWEtbGV2ZWwiOjAsImFy
aWEtbW9kYWwiOjAsImFyaWEtbXVsdGlsaW5lIjowLCJhcmlhLW11bHRpc2VsZWN0YWJsZSI6MCwi
YXJpYS1vcmllbnRhdGlvbiI6MCwiYXJpYS1wbGFjZWhvbGRlciI6MCwiYXJpYS1wcmVzc2VkIjow
LCJhcmlhLXJlYWRvbmx5IjowLCJhcmlhLXJlcXVpcmVkIjowLCJhcmlhLXNlbGVjdGVkIjowLCJh
cmlhLXNvcnQiOjAsImFyaWEtdmFsdWVtYXgiOjAsImFyaWEtdmFsdWVtaW4iOjAsImFyaWEtdmFs
dWVub3ciOjAsImFyaWEtdmFsdWV0ZXh0IjowLCJhcmlhLWF0b21pYyI6MCwiYXJpYS1idXN5Ijow
LCJhcmlhLWxpdmUiOjAsImFyaWEtcmVsZXZhbnQiOjAsImFyaWEtZHJvcGVmZmVjdCI6MCwiYXJp
YS1ncmFiYmVkIjowLCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiOjAsImFyaWEtY29sY291bnQiOjAs
ImFyaWEtY29saW5kZXgiOjAsImFyaWEtY29sc3BhbiI6MCwiYXJpYS1jb250cm9scyI6MCwiYXJp
YS1kZXNjcmliZWRieSI6MCwiYXJpYS1lcnJvcm1lc3NhZ2UiOjAsImFyaWEtZmxvd3RvIjowLCJh
cmlhLWxhYmVsbGVkYnkiOjAsImFyaWEtb3ducyI6MCwiYXJpYS1wb3NpbnNldCI6MCwiYXJpYS1y
b3djb3VudCI6MCwiYXJpYS1yb3dpbmRleCI6MCwiYXJpYS1yb3dzcGFuIjowLCJhcmlhLXNldHNp
emUiOjB9LERPTUF0dHJpYnV0ZU5hbWVzOnt9LERPTVByb3BlcnR5TmFtZXM6e319O3QuZXhwb3J0
cz1yfSx7fV0sMjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDMzKSxvPWUo
MTMxKSxpPXtmb2N1c0RPTUNvbXBvbmVudDpmdW5jdGlvbigpe28oci5nZXROb2RlRnJvbUluc3Rh
bmNlKHRoaXMpKX19O3QuZXhwb3J0cz1pfSx7MTMxOjEzMSwzMzozM31dLDM6W2Z1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4oZS5jdHJsS2V5fHxlLmFsdEtl
eXx8ZS5tZXRhS2V5KSYmIShlLmN0cmxLZXkmJmUuYWx0S2V5KX1mdW5jdGlvbiBvKGUpe3N3aXRj
aChlKXtjYXNlInRvcENvbXBvc2l0aW9uU3RhcnQiOnJldHVybiBULmNvbXBvc2l0aW9uU3RhcnQ7
Y2FzZSJ0b3BDb21wb3NpdGlvbkVuZCI6cmV0dXJuIFQuY29tcG9zaXRpb25FbmQ7Y2FzZSJ0b3BD
b21wb3NpdGlvblVwZGF0ZSI6cmV0dXJuIFQuY29tcG9zaXRpb25VcGRhdGV9fWZ1bmN0aW9uIGko
ZSx0KXtyZXR1cm4idG9wS2V5RG93biI9PT1lJiZ0LmtleUNvZGU9PT15fWZ1bmN0aW9uIGEoZSx0
KXtzd2l0Y2goZSl7Y2FzZSJ0b3BLZXlVcCI6cmV0dXJuLTEhPT1nLmluZGV4T2YodC5rZXlDb2Rl
KTtjYXNlInRvcEtleURvd24iOnJldHVybiB0LmtleUNvZGUhPT15O2Nhc2UidG9wS2V5UHJlc3Mi
OmNhc2UidG9wTW91c2VEb3duIjpjYXNlInRvcEJsdXIiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJu
ITF9fWZ1bmN0aW9uIHMoZSl7dmFyIHQ9ZS5kZXRhaWw7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0
JiYiZGF0YSJpbiB0P3QuZGF0YTpudWxsfWZ1bmN0aW9uIHUoZSx0LG4scil7dmFyIHUsbDtpZihf
P3U9byhlKTpQP2EoZSxuKSYmKHU9VC5jb21wb3NpdGlvbkVuZCk6aShlLG4pJiYodT1ULmNvbXBv
c2l0aW9uU3RhcnQpLCF1KXJldHVybiBudWxsO0UmJihQfHx1IT09VC5jb21wb3NpdGlvblN0YXJ0
P3U9PT1ULmNvbXBvc2l0aW9uRW5kJiZQJiYobD1QLmdldERhdGEoKSk6UD1oLmdldFBvb2xlZChy
KSk7dmFyIGM9bS5nZXRQb29sZWQodSx0LG4scik7aWYobCljLmRhdGE9bDtlbHNle3ZhciBwPXMo
bik7bnVsbCE9PXAmJihjLmRhdGE9cCl9cmV0dXJuIGQuYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0
Y2hlcyhjKSxjfWZ1bmN0aW9uIGwoZSx0KXtzd2l0Y2goZSl7Y2FzZSJ0b3BDb21wb3NpdGlvbkVu
ZCI6cmV0dXJuIHModCk7Y2FzZSJ0b3BLZXlQcmVzcyI6cmV0dXJuIHQud2hpY2ghPT14P251bGw6
KGs9ITAsdyk7Y2FzZSJ0b3BUZXh0SW5wdXQiOnZhciBuPXQuZGF0YTtyZXR1cm4gbj09PXcmJms/
bnVsbDpuO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIGMoZSx0KXtpZihQKXtpZigidG9w
Q29tcG9zaXRpb25FbmQiPT09ZXx8IV8mJmEoZSx0KSl7dmFyIG49UC5nZXREYXRhKCk7cmV0dXJu
IGgucmVsZWFzZShQKSxQPW51bGwsbn1yZXR1cm4gbnVsbH1zd2l0Y2goZSl7Y2FzZSJ0b3BQYXN0
ZSI6cmV0dXJuIG51bGw7Y2FzZSJ0b3BLZXlQcmVzcyI6cmV0dXJuIHQud2hpY2gmJiFyKHQpP1N0
cmluZy5mcm9tQ2hhckNvZGUodC53aGljaCk6bnVsbDtjYXNlInRvcENvbXBvc2l0aW9uRW5kIjpy
ZXR1cm4gRT9udWxsOnQuZGF0YTtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBwKGUsdCxu
LHIpe3ZhciBvO2lmKCEobz1iP2woZSxuKTpjKGUsbikpKXJldHVybiBudWxsO3ZhciBpPXYuZ2V0
UG9vbGVkKFQuYmVmb3JlSW5wdXQsdCxuLHIpO3JldHVybiBpLmRhdGE9byxkLmFjY3VtdWxhdGVU
d29QaGFzZURpc3BhdGNoZXMoaSksaX12YXIgZD1lKDE5KSxmPWUoMTIzKSxoPWUoMjApLG09ZSg3
OCksdj1lKDgyKSxnPVs5LDEzLDI3LDMyXSx5PTIyOSxfPWYuY2FuVXNlRE9NJiYiQ29tcG9zaXRp
b25FdmVudCJpbiB3aW5kb3csQz1udWxsO2YuY2FuVXNlRE9NJiYiZG9jdW1lbnRNb2RlImluIGRv
Y3VtZW50JiYoQz1kb2N1bWVudC5kb2N1bWVudE1vZGUpO3ZhciBiPWYuY2FuVXNlRE9NJiYiVGV4
dEV2ZW50ImluIHdpbmRvdyYmIUMmJiFmdW5jdGlvbigpe3ZhciBlPXdpbmRvdy5vcGVyYTtyZXR1
cm4ib2JqZWN0Ij09dHlwZW9mIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnZlcnNpb24mJnBhcnNl
SW50KGUudmVyc2lvbigpLDEwKTw9MTJ9KCksRT1mLmNhblVzZURPTSYmKCFffHxDJiZDPjgmJkM8
PTExKSx4PTMyLHc9U3RyaW5nLmZyb21DaGFyQ29kZSh4KSxUPXtiZWZvcmVJbnB1dDp7cGhhc2Vk
UmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6Im9uQmVmb3JlSW5wdXQiLGNhcHR1cmVkOiJvbkJl
Zm9yZUlucHV0Q2FwdHVyZSJ9LGRlcGVuZGVuY2llczpbInRvcENvbXBvc2l0aW9uRW5kIiwidG9w
S2V5UHJlc3MiLCJ0b3BUZXh0SW5wdXQiLCJ0b3BQYXN0ZSJdfSxjb21wb3NpdGlvbkVuZDp7cGhh
c2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6Im9uQ29tcG9zaXRpb25FbmQiLGNhcHR1cmVk
OiJvbkNvbXBvc2l0aW9uRW5kQ2FwdHVyZSJ9LGRlcGVuZGVuY2llczpbInRvcEJsdXIiLCJ0b3BD
b21wb3NpdGlvbkVuZCIsInRvcEtleURvd24iLCJ0b3BLZXlQcmVzcyIsInRvcEtleVVwIiwidG9w
TW91c2VEb3duIl19LGNvbXBvc2l0aW9uU3RhcnQ6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOnti
dWJibGVkOiJvbkNvbXBvc2l0aW9uU3RhcnQiLGNhcHR1cmVkOiJvbkNvbXBvc2l0aW9uU3RhcnRD
YXB0dXJlIn0sZGVwZW5kZW5jaWVzOlsidG9wQmx1ciIsInRvcENvbXBvc2l0aW9uU3RhcnQiLCJ0
b3BLZXlEb3duIiwidG9wS2V5UHJlc3MiLCJ0b3BLZXlVcCIsInRvcE1vdXNlRG93biJdfSxjb21w
b3NpdGlvblVwZGF0ZTp7cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6Im9uQ29tcG9z
aXRpb25VcGRhdGUiLGNhcHR1cmVkOiJvbkNvbXBvc2l0aW9uVXBkYXRlQ2FwdHVyZSJ9LGRlcGVu
ZGVuY2llczpbInRvcEJsdXIiLCJ0b3BDb21wb3NpdGlvblVwZGF0ZSIsInRvcEtleURvd24iLCJ0
b3BLZXlQcmVzcyIsInRvcEtleVVwIiwidG9wTW91c2VEb3duIl19fSxrPSExLFA9bnVsbCxTPXtl
dmVudFR5cGVzOlQsZXh0cmFjdEV2ZW50czpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm5bdShlLHQs
bixyKSxwKGUsdCxuLHIpXX19O3QuZXhwb3J0cz1TfSx7MTIzOjEyMywxOToxOSwyMDoyMCw3ODo3
OCw4Mjo4Mn1dLDQ6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQp
e3JldHVybiBlK3QuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zdWJzdHJpbmcoMSl9dmFyIG89
e2FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiEwLGJvcmRlckltYWdlT3V0c2V0OiEwLGJvcmRlcklt
YWdlU2xpY2U6ITAsYm9yZGVySW1hZ2VXaWR0aDohMCxib3hGbGV4OiEwLGJveEZsZXhHcm91cDoh
MCxib3hPcmRpbmFsR3JvdXA6ITAsY29sdW1uQ291bnQ6ITAsZmxleDohMCxmbGV4R3JvdzohMCxm
bGV4UG9zaXRpdmU6ITAsZmxleFNocmluazohMCxmbGV4TmVnYXRpdmU6ITAsZmxleE9yZGVyOiEw
LGdyaWRSb3c6ITAsZ3JpZENvbHVtbjohMCxmb250V2VpZ2h0OiEwLGxpbmVDbGFtcDohMCxsaW5l
SGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx0YWJTaXplOiEwLHdpZG93
czohMCx6SW5kZXg6ITAsem9vbTohMCxmaWxsT3BhY2l0eTohMCxmbG9vZE9wYWNpdHk6ITAsc3Rv
cE9wYWNpdHk6ITAsc3Ryb2tlRGFzaGFycmF5OiEwLHN0cm9rZURhc2hvZmZzZXQ6ITAsc3Ryb2tl
TWl0ZXJsaW1pdDohMCxzdHJva2VPcGFjaXR5OiEwLHN0cm9rZVdpZHRoOiEwfSxpPVsiV2Via2l0
IiwibXMiLCJNb3oiLCJPIl07T2JqZWN0LmtleXMobykuZm9yRWFjaChmdW5jdGlvbihlKXtpLmZv
ckVhY2goZnVuY3Rpb24odCl7b1tyKHQsZSldPW9bZV19KX0pO3ZhciBhPXtiYWNrZ3JvdW5kOnti
YWNrZ3JvdW5kQXR0YWNobWVudDohMCxiYWNrZ3JvdW5kQ29sb3I6ITAsYmFja2dyb3VuZEltYWdl
OiEwLGJhY2tncm91bmRQb3NpdGlvblg6ITAsYmFja2dyb3VuZFBvc2l0aW9uWTohMCxiYWNrZ3Jv
dW5kUmVwZWF0OiEwfSxiYWNrZ3JvdW5kUG9zaXRpb246e2JhY2tncm91bmRQb3NpdGlvblg6ITAs
YmFja2dyb3VuZFBvc2l0aW9uWTohMH0sYm9yZGVyOntib3JkZXJXaWR0aDohMCxib3JkZXJTdHls
ZTohMCxib3JkZXJDb2xvcjohMH0sYm9yZGVyQm90dG9tOntib3JkZXJCb3R0b21XaWR0aDohMCxi
b3JkZXJCb3R0b21TdHlsZTohMCxib3JkZXJCb3R0b21Db2xvcjohMH0sYm9yZGVyTGVmdDp7Ym9y
ZGVyTGVmdFdpZHRoOiEwLGJvcmRlckxlZnRTdHlsZTohMCxib3JkZXJMZWZ0Q29sb3I6ITB9LGJv
cmRlclJpZ2h0Ontib3JkZXJSaWdodFdpZHRoOiEwLGJvcmRlclJpZ2h0U3R5bGU6ITAsYm9yZGVy
UmlnaHRDb2xvcjohMH0sYm9yZGVyVG9wOntib3JkZXJUb3BXaWR0aDohMCxib3JkZXJUb3BTdHls
ZTohMCxib3JkZXJUb3BDb2xvcjohMH0sZm9udDp7Zm9udFN0eWxlOiEwLGZvbnRWYXJpYW50OiEw
LGZvbnRXZWlnaHQ6ITAsZm9udFNpemU6ITAsbGluZUhlaWdodDohMCxmb250RmFtaWx5OiEwfSxv
dXRsaW5lOntvdXRsaW5lV2lkdGg6ITAsb3V0bGluZVN0eWxlOiEwLG91dGxpbmVDb2xvcjohMH19
LHM9e2lzVW5pdGxlc3NOdW1iZXI6byxzaG9ydGhhbmRQcm9wZXJ0eUV4cGFuc2lvbnM6YX07dC5l
eHBvcnRzPXN9LHt9XSw1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoNCks
bz1lKDEyMyksaT0oZSg1OCksZSgxMjUpLGUoOTQpKSxhPWUoMTM2KSxzPWUoMTQwKSx1PShlKDE0
MikscyhmdW5jdGlvbihlKXtyZXR1cm4gYShlKX0pKSxsPSExLGM9ImNzc0Zsb2F0IjtpZihvLmNh
blVzZURPTSl7dmFyIHA9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGU7dHJ5e3Au
Zm9udD0iIn1jYXRjaChlKXtsPSEwfXZvaWQgMD09PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5z
dHlsZS5jc3NGbG9hdCYmKGM9InN0eWxlRmxvYXQiKX12YXIgZD17Y3JlYXRlTWFya3VwRm9yU3R5
bGVzOmZ1bmN0aW9uKGUsdCl7dmFyIG49IiI7Zm9yKHZhciByIGluIGUpaWYoZS5oYXNPd25Qcm9w
ZXJ0eShyKSl7dmFyIG89ZVtyXTtudWxsIT1vJiYobis9dShyKSsiOiIsbis9aShyLG8sdCkrIjsi
KX1yZXR1cm4gbnx8bnVsbH0sc2V0VmFsdWVGb3JTdHlsZXM6ZnVuY3Rpb24oZSx0LG4pe3ZhciBv
PWUuc3R5bGU7Zm9yKHZhciBhIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIHM9aShh
LHRbYV0sbik7aWYoImZsb2F0IiE9PWEmJiJjc3NGbG9hdCIhPT1hfHwoYT1jKSxzKW9bYV09cztl
bHNle3ZhciB1PWwmJnIuc2hvcnRoYW5kUHJvcGVydHlFeHBhbnNpb25zW2FdO2lmKHUpZm9yKHZh
ciBwIGluIHUpb1twXT0iIjtlbHNlIG9bYV09IiJ9fX19O3QuZXhwb3J0cz1kfSx7MTIzOjEyMywx
MjU6MTI1LDEzNjoxMzYsMTQwOjE0MCwxNDI6MTQyLDQ6NCw1ODo1OCw5NDo5NH1dLDY6W2Z1bmN0
aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKCEoZSBpbnN0YW5jZW9m
IHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlv
biIpfXZhciBvPWUoMTEyKSxpPWUoMjQpLGE9KGUoMTM3KSxmdW5jdGlvbigpe2Z1bmN0aW9uIGUo
dCl7cih0aGlzLGUpLHRoaXMuX2NhbGxiYWNrcz1udWxsLHRoaXMuX2NvbnRleHRzPW51bGwsdGhp
cy5fYXJnPXR9cmV0dXJuIGUucHJvdG90eXBlLmVucXVldWU9ZnVuY3Rpb24oZSx0KXt0aGlzLl9j
YWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzfHxbXSx0aGlzLl9jYWxsYmFja3MucHVzaChlKSx0aGlz
Ll9jb250ZXh0cz10aGlzLl9jb250ZXh0c3x8W10sdGhpcy5fY29udGV4dHMucHVzaCh0KX0sZS5w
cm90b3R5cGUubm90aWZ5QWxsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2FsbGJhY2tzLHQ9dGhp
cy5fY29udGV4dHMsbj10aGlzLl9hcmc7aWYoZSYmdCl7ZS5sZW5ndGghPT10Lmxlbmd0aCYmbygi
MjQiKSx0aGlzLl9jYWxsYmFja3M9bnVsbCx0aGlzLl9jb250ZXh0cz1udWxsO2Zvcih2YXIgcj0w
O3I8ZS5sZW5ndGg7cisrKWVbcl0uY2FsbCh0W3JdLG4pO2UubGVuZ3RoPTAsdC5sZW5ndGg9MH19
LGUucHJvdG90eXBlLmNoZWNrcG9pbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsbGJhY2tz
P3RoaXMuX2NhbGxiYWNrcy5sZW5ndGg6MH0sZS5wcm90b3R5cGUucm9sbGJhY2s9ZnVuY3Rpb24o
ZSl7dGhpcy5fY2FsbGJhY2tzJiZ0aGlzLl9jb250ZXh0cyYmKHRoaXMuX2NhbGxiYWNrcy5sZW5n
dGg9ZSx0aGlzLl9jb250ZXh0cy5sZW5ndGg9ZSl9LGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9u
KCl7dGhpcy5fY2FsbGJhY2tzPW51bGwsdGhpcy5fY29udGV4dHM9bnVsbH0sZS5wcm90b3R5cGUu
ZGVzdHJ1Y3Rvcj1mdW5jdGlvbigpe3RoaXMucmVzZXQoKX0sZX0oKSk7dC5leHBvcnRzPWkuYWRk
UG9vbGluZ1RvKGEpfSx7MTEyOjExMiwxMzc6MTM3LDI0OjI0fV0sNzpbZnVuY3Rpb24oZSx0LG4p
eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PWUubm9kZU5hbWUmJmUubm9kZU5hbWUu
dG9Mb3dlckNhc2UoKTtyZXR1cm4ic2VsZWN0Ij09PXR8fCJpbnB1dCI9PT10JiYiZmlsZSI9PT1l
LnR5cGV9ZnVuY3Rpb24gbyhlKXt2YXIgdD13LmdldFBvb2xlZChTLmNoYW5nZSxNLGUsVChlKSk7
Qy5hY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKHQpLHguYmF0Y2hlZFVwZGF0ZXMoaSx0KX1m
dW5jdGlvbiBpKGUpe18uZW5xdWV1ZUV2ZW50cyhlKSxfLnByb2Nlc3NFdmVudFF1ZXVlKCExKX1m
dW5jdGlvbiBhKGUsdCl7Tj1lLE09dCxOLmF0dGFjaEV2ZW50KCJvbmNoYW5nZSIsbyl9ZnVuY3Rp
b24gcygpe04mJihOLmRldGFjaEV2ZW50KCJvbmNoYW5nZSIsbyksTj1udWxsLE09bnVsbCl9ZnVu
Y3Rpb24gdShlLHQpe2lmKCJ0b3BDaGFuZ2UiPT09ZSlyZXR1cm4gdH1mdW5jdGlvbiBsKGUsdCxu
KXsidG9wRm9jdXMiPT09ZT8ocygpLGEodCxuKSk6InRvcEJsdXIiPT09ZSYmcygpfWZ1bmN0aW9u
IGMoZSx0KXtOPWUsTT10LEk9ZS52YWx1ZSxPPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsInZhbHVlIiksT2JqZWN0LmRlZmluZVByb3BlcnR5
KE4sInZhbHVlIixEKSxOLmF0dGFjaEV2ZW50P04uYXR0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFu
Z2UiLGQpOk4uYWRkRXZlbnRMaXN0ZW5lcigicHJvcGVydHljaGFuZ2UiLGQsITEpfWZ1bmN0aW9u
IHAoKXtOJiYoZGVsZXRlIE4udmFsdWUsTi5kZXRhY2hFdmVudD9OLmRldGFjaEV2ZW50KCJvbnBy
b3BlcnR5Y2hhbmdlIixkKTpOLnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb3BlcnR5Y2hhbmdlIixk
LCExKSxOPW51bGwsTT1udWxsLEk9bnVsbCxPPW51bGwpfWZ1bmN0aW9uIGQoZSl7aWYoInZhbHVl
Ij09PWUucHJvcGVydHlOYW1lKXt2YXIgdD1lLnNyY0VsZW1lbnQudmFsdWU7dCE9PUkmJihJPXQs
byhlKSl9fWZ1bmN0aW9uIGYoZSx0KXtpZigidG9wSW5wdXQiPT09ZSlyZXR1cm4gdH1mdW5jdGlv
biBoKGUsdCxuKXsidG9wRm9jdXMiPT09ZT8ocCgpLGModCxuKSk6InRvcEJsdXIiPT09ZSYmcCgp
fWZ1bmN0aW9uIG0oZSx0KXtpZigoInRvcFNlbGVjdGlvbkNoYW5nZSI9PT1lfHwidG9wS2V5VXAi
PT09ZXx8InRvcEtleURvd24iPT09ZSkmJk4mJk4udmFsdWUhPT1JKXJldHVybiBJPU4udmFsdWUs
TX1mdW5jdGlvbiB2KGUpe3JldHVybiBlLm5vZGVOYW1lJiYiaW5wdXQiPT09ZS5ub2RlTmFtZS50
b0xvd2VyQ2FzZSgpJiYoImNoZWNrYm94Ij09PWUudHlwZXx8InJhZGlvIj09PWUudHlwZSl9ZnVu
Y3Rpb24gZyhlLHQpe2lmKCJ0b3BDbGljayI9PT1lKXJldHVybiB0fWZ1bmN0aW9uIHkoZSx0KXtp
ZihudWxsIT1lKXt2YXIgbj1lLl93cmFwcGVyU3RhdGV8fHQuX3dyYXBwZXJTdGF0ZTtpZihuJiZu
LmNvbnRyb2xsZWQmJiJudW1iZXIiPT09dC50eXBlKXt2YXIgcj0iIit0LnZhbHVlO3QuZ2V0QXR0
cmlidXRlKCJ2YWx1ZSIpIT09ciYmdC5zZXRBdHRyaWJ1dGUoInZhbHVlIixyKX19fXZhciBfPWUo
MTYpLEM9ZSgxOSksYj1lKDEyMyksRT1lKDMzKSx4PWUoNzEpLHc9ZSg4MCksVD1lKDEwMiksaz1l
KDEwOSksUD1lKDExMCksUz17Y2hhbmdlOntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnViYmxl
ZDoib25DaGFuZ2UiLGNhcHR1cmVkOiJvbkNoYW5nZUNhcHR1cmUifSxkZXBlbmRlbmNpZXM6WyJ0
b3BCbHVyIiwidG9wQ2hhbmdlIiwidG9wQ2xpY2siLCJ0b3BGb2N1cyIsInRvcElucHV0IiwidG9w
S2V5RG93biIsInRvcEtleVVwIiwidG9wU2VsZWN0aW9uQ2hhbmdlIl19fSxOPW51bGwsTT1udWxs
LEk9bnVsbCxPPW51bGwsUj0hMTtiLmNhblVzZURPTSYmKFI9aygiY2hhbmdlIikmJighZG9jdW1l
bnQuZG9jdW1lbnRNb2RlfHxkb2N1bWVudC5kb2N1bWVudE1vZGU+OCkpO3ZhciBBPSExO2IuY2Fu
VXNlRE9NJiYoQT1rKCJpbnB1dCIpJiYoIWRvY3VtZW50LmRvY3VtZW50TW9kZXx8ZG9jdW1lbnQu
ZG9jdW1lbnRNb2RlPjExKSk7dmFyIEQ9e2dldDpmdW5jdGlvbigpe3JldHVybiBPLmdldC5jYWxs
KHRoaXMpfSxzZXQ6ZnVuY3Rpb24oZSl7ST0iIitlLE8uc2V0LmNhbGwodGhpcyxlKX19LEw9e2V2
ZW50VHlwZXM6UyxleHRyYWN0RXZlbnRzOmZ1bmN0aW9uKGUsdCxuLG8pe3ZhciBpLGEscz10P0Uu
Z2V0Tm9kZUZyb21JbnN0YW5jZSh0KTp3aW5kb3c7aWYocihzKT9SP2k9dTphPWw6UChzKT9BP2k9
ZjooaT1tLGE9aCk6dihzKSYmKGk9ZyksaSl7dmFyIGM9aShlLHQpO2lmKGMpe3ZhciBwPXcuZ2V0
UG9vbGVkKFMuY2hhbmdlLGMsbixvKTtyZXR1cm4gcC50eXBlPSJjaGFuZ2UiLEMuYWNjdW11bGF0
ZVR3b1BoYXNlRGlzcGF0Y2hlcyhwKSxwfX1hJiZhKGUscyx0KSwidG9wQmx1ciI9PT1lJiZ5KHQs
cyl9fTt0LmV4cG9ydHM9TH0sezEwMjoxMDIsMTA5OjEwOSwxMTA6MTEwLDEyMzoxMjMsMTY6MTYs
MTk6MTksMzM6MzMsNzE6NzEsODA6ODB9XSw4OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3Qi
O2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmKHQ9dFsxXSksdD90Lm5l
eHRTaWJsaW5nOmUuZmlyc3RDaGlsZH1mdW5jdGlvbiBvKGUsdCxuKXtjLmluc2VydFRyZWVCZWZv
cmUoZSx0LG4pfWZ1bmN0aW9uIGkoZSx0LG4pe0FycmF5LmlzQXJyYXkodCk/cyhlLHRbMF0sdFsx
XSxuKTptKGUsdCxuKX1mdW5jdGlvbiBhKGUsdCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIG49
dFsxXTt0PXRbMF0sdShlLHQsbiksZS5yZW1vdmVDaGlsZChuKX1lLnJlbW92ZUNoaWxkKHQpfWZ1
bmN0aW9uIHMoZSx0LG4scil7Zm9yKHZhciBvPXQ7Oyl7dmFyIGk9by5uZXh0U2libGluZztpZiht
KGUsbyxyKSxvPT09bilicmVhaztvPWl9fWZ1bmN0aW9uIHUoZSx0LG4pe2Zvcig7Oyl7dmFyIHI9
dC5uZXh0U2libGluZztpZihyPT09bilicmVhaztlLnJlbW92ZUNoaWxkKHIpfX1mdW5jdGlvbiBs
KGUsdCxuKXt2YXIgcj1lLnBhcmVudE5vZGUsbz1lLm5leHRTaWJsaW5nO289PT10P24mJm0ocixk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuKSxvKTpuPyhoKG8sbiksdShyLG8sdCkpOnUocixlLHQp
fXZhciBjPWUoOSkscD1lKDEzKSxkPShlKDMzKSxlKDU4KSxlKDkzKSksZj1lKDExNCksaD1lKDEx
NSksbT1kKGZ1bmN0aW9uKGUsdCxuKXtlLmluc2VydEJlZm9yZSh0LG4pfSksdj1wLmRhbmdlcm91
c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwLGc9e2Rhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFy
a3VwOnYscmVwbGFjZURlbGltaXRlZFRleHQ6bCxwcm9jZXNzVXBkYXRlczpmdW5jdGlvbihlLHQp
e2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcz10W25dO3N3aXRjaChzLnR5cGUpe2Nh
c2UiSU5TRVJUX01BUktVUCI6byhlLHMuY29udGVudCxyKGUscy5hZnRlck5vZGUpKTticmVhaztj
YXNlIk1PVkVfRVhJU1RJTkciOmkoZSxzLmZyb21Ob2RlLHIoZSxzLmFmdGVyTm9kZSkpO2JyZWFr
O2Nhc2UiU0VUX01BUktVUCI6ZihlLHMuY29udGVudCk7YnJlYWs7Y2FzZSJURVhUX0NPTlRFTlQi
OmgoZSxzLmNvbnRlbnQpO2JyZWFrO2Nhc2UiUkVNT1ZFX05PREUiOmEoZSxzLmZyb21Ob2RlKX19
fX07dC5leHBvcnRzPWd9LHsxMTQ6MTE0LDExNToxMTUsMTM6MTMsMzM6MzMsNTg6NTgsOTo5LDkz
OjkzfV0sOTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKGgp
e3ZhciB0PWUubm9kZSxuPWUuY2hpbGRyZW47aWYobi5sZW5ndGgpZm9yKHZhciByPTA7cjxuLmxl
bmd0aDtyKyspbSh0LG5bcl0sbnVsbCk7ZWxzZSBudWxsIT1lLmh0bWw/cCh0LGUuaHRtbCk6bnVs
bCE9ZS50ZXh0JiZmKHQsZS50ZXh0KX19ZnVuY3Rpb24gbyhlLHQpe2UucGFyZW50Tm9kZS5yZXBs
YWNlQ2hpbGQodC5ub2RlLGUpLHIodCl9ZnVuY3Rpb24gaShlLHQpe2g/ZS5jaGlsZHJlbi5wdXNo
KHQpOmUubm9kZS5hcHBlbmRDaGlsZCh0Lm5vZGUpfWZ1bmN0aW9uIGEoZSx0KXtoP2UuaHRtbD10
OnAoZS5ub2RlLHQpfWZ1bmN0aW9uIHMoZSx0KXtoP2UudGV4dD10OmYoZS5ub2RlLHQpfWZ1bmN0
aW9uIHUoKXtyZXR1cm4gdGhpcy5ub2RlLm5vZGVOYW1lfWZ1bmN0aW9uIGwoZSl7cmV0dXJue25v
ZGU6ZSxjaGlsZHJlbjpbXSxodG1sOm51bGwsdGV4dDpudWxsLHRvU3RyaW5nOnV9fXZhciBjPWUo
MTApLHA9ZSgxMTQpLGQ9ZSg5MyksZj1lKDExNSksaD0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3Vt
ZW50JiYibnVtYmVyIj09dHlwZW9mIGRvY3VtZW50LmRvY3VtZW50TW9kZXx8InVuZGVmaW5lZCIh
PXR5cGVvZiBuYXZpZ2F0b3ImJiJzdHJpbmciPT10eXBlb2YgbmF2aWdhdG9yLnVzZXJBZ2VudCYm
L1xiRWRnZVwvXGQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksbT1kKGZ1bmN0aW9uKGUsdCxu
KXsxMT09PXQubm9kZS5ub2RlVHlwZXx8MT09PXQubm9kZS5ub2RlVHlwZSYmIm9iamVjdCI9PT10
Lm5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmKG51bGw9PXQubm9kZS5uYW1lc3BhY2VVUkl8
fHQubm9kZS5uYW1lc3BhY2VVUkk9PT1jLmh0bWwpPyhyKHQpLGUuaW5zZXJ0QmVmb3JlKHQubm9k
ZSxuKSk6KGUuaW5zZXJ0QmVmb3JlKHQubm9kZSxuKSxyKHQpKX0pO2wuaW5zZXJ0VHJlZUJlZm9y
ZT1tLGwucmVwbGFjZUNoaWxkV2l0aFRyZWU9byxsLnF1ZXVlQ2hpbGQ9aSxsLnF1ZXVlSFRNTD1h
LGwucXVldWVUZXh0PXMsdC5leHBvcnRzPWx9LHsxMDoxMCwxMTQ6MTE0LDExNToxMTUsOTM6OTN9
XSwxMDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj17aHRtbDoiaHR0cDovL3d3
dy53My5vcmcvMTk5OS94aHRtbCIsbWF0aG1sOiJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgv
TWF0aE1MIixzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIn07dC5leHBvcnRzPXJ9LHt9
XSwxMTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJu
KGUmdCk9PT10fXZhciBvPWUoMTEyKSxpPShlKDEzNykse01VU1RfVVNFX1BST1BFUlRZOjEsSEFT
X0JPT0xFQU5fVkFMVUU6NCxIQVNfTlVNRVJJQ19WQUxVRTo4LEhBU19QT1NJVElWRV9OVU1FUklD
X1ZBTFVFOjI0LEhBU19PVkVSTE9BREVEX0JPT0xFQU5fVkFMVUU6MzIsaW5qZWN0RE9NUHJvcGVy
dHlDb25maWc6ZnVuY3Rpb24oZSl7dmFyIHQ9aSxuPWUuUHJvcGVydGllc3x8e30sYT1lLkRPTUF0
dHJpYnV0ZU5hbWVzcGFjZXN8fHt9LHU9ZS5ET01BdHRyaWJ1dGVOYW1lc3x8e30sbD1lLkRPTVBy
b3BlcnR5TmFtZXN8fHt9LGM9ZS5ET01NdXRhdGlvbk1ldGhvZHN8fHt9O2UuaXNDdXN0b21BdHRy
aWJ1dGUmJnMuX2lzQ3VzdG9tQXR0cmlidXRlRnVuY3Rpb25zLnB1c2goZS5pc0N1c3RvbUF0dHJp
YnV0ZSk7Zm9yKHZhciBwIGluIG4pe3MucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShwKSYmbygi
NDgiLHApO3ZhciBkPXAudG9Mb3dlckNhc2UoKSxmPW5bcF0saD17YXR0cmlidXRlTmFtZTpkLGF0
dHJpYnV0ZU5hbWVzcGFjZTpudWxsLHByb3BlcnR5TmFtZTpwLG11dGF0aW9uTWV0aG9kOm51bGws
bXVzdFVzZVByb3BlcnR5OnIoZix0Lk1VU1RfVVNFX1BST1BFUlRZKSxoYXNCb29sZWFuVmFsdWU6
cihmLHQuSEFTX0JPT0xFQU5fVkFMVUUpLGhhc051bWVyaWNWYWx1ZTpyKGYsdC5IQVNfTlVNRVJJ
Q19WQUxVRSksaGFzUG9zaXRpdmVOdW1lcmljVmFsdWU6cihmLHQuSEFTX1BPU0lUSVZFX05VTUVS
SUNfVkFMVUUpLGhhc092ZXJsb2FkZWRCb29sZWFuVmFsdWU6cihmLHQuSEFTX09WRVJMT0FERURf
Qk9PTEVBTl9WQUxVRSl9O2lmKGguaGFzQm9vbGVhblZhbHVlK2guaGFzTnVtZXJpY1ZhbHVlK2gu
aGFzT3ZlcmxvYWRlZEJvb2xlYW5WYWx1ZTw9MXx8bygiNTAiLHApLHUuaGFzT3duUHJvcGVydHko
cCkpe3ZhciBtPXVbcF07aC5hdHRyaWJ1dGVOYW1lPW19YS5oYXNPd25Qcm9wZXJ0eShwKSYmKGgu
YXR0cmlidXRlTmFtZXNwYWNlPWFbcF0pLGwuaGFzT3duUHJvcGVydHkocCkmJihoLnByb3BlcnR5
TmFtZT1sW3BdKSxjLmhhc093blByb3BlcnR5KHApJiYoaC5tdXRhdGlvbk1ldGhvZD1jW3BdKSxz
LnByb3BlcnRpZXNbcF09aH19fSksYT0iOkEtWl9hLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxc
dTAwRjZcXHUwMEY4LVxcdTAyRkZcXHUwMzcwLVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBD
LVxcdTIwMERcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVG
OTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkQiLHM9e0lEX0FUVFJJQlVURV9OQU1FOiJkYXRhLXJl
YWN0aWQiLFJPT1RfQVRUUklCVVRFX05BTUU6ImRhdGEtcmVhY3Ryb290IixBVFRSSUJVVEVfTkFN
RV9TVEFSVF9DSEFSOmEsQVRUUklCVVRFX05BTUVfQ0hBUjphKyJcXC0uMC05XFx1MDBCN1xcdTAz
MDAtXFx1MDM2RlxcdTIwM0YtXFx1MjA0MCIscHJvcGVydGllczp7fSxnZXRQb3NzaWJsZVN0YW5k
YXJkTmFtZTpudWxsLF9pc0N1c3RvbUF0dHJpYnV0ZUZ1bmN0aW9uczpbXSxpc0N1c3RvbUF0dHJp
YnV0ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHMuX2lzQ3VzdG9tQXR0cmlidXRlRnVuY3Rp
b25zLmxlbmd0aDt0KyspaWYoKDAscy5faXNDdXN0b21BdHRyaWJ1dGVGdW5jdGlvbnNbdF0pKGUp
KXJldHVybiEwO3JldHVybiExfSxpbmplY3Rpb246aX07dC5leHBvcnRzPXN9LHsxMTI6MTEyLDEz
NzoxMzd9XSwxMjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3Jl
dHVybiEhbC5oYXNPd25Qcm9wZXJ0eShlKXx8IXUuaGFzT3duUHJvcGVydHkoZSkmJihzLnRlc3Qo
ZSk/KGxbZV09ITAsITApOih1W2VdPSEwLCExKSl9ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBudWxs
PT10fHxlLmhhc0Jvb2xlYW5WYWx1ZSYmIXR8fGUuaGFzTnVtZXJpY1ZhbHVlJiZpc05hTih0KXx8
ZS5oYXNQb3NpdGl2ZU51bWVyaWNWYWx1ZSYmdDwxfHxlLmhhc092ZXJsb2FkZWRCb29sZWFuVmFs
dWUmJiExPT09dH12YXIgaT1lKDExKSxhPShlKDMzKSxlKDU4KSxlKDExMSkpLHM9KGUoMTQyKSxu
ZXcgUmVnRXhwKCJeWyIraS5BVFRSSUJVVEVfTkFNRV9TVEFSVF9DSEFSKyJdWyIraS5BVFRSSUJV
VEVfTkFNRV9DSEFSKyJdKiQiKSksdT17fSxsPXt9LGM9e2NyZWF0ZU1hcmt1cEZvcklEOmZ1bmN0
aW9uKGUpe3JldHVybiBpLklEX0FUVFJJQlVURV9OQU1FKyI9IithKGUpfSxzZXRBdHRyaWJ1dGVG
b3JJRDpmdW5jdGlvbihlLHQpe2Uuc2V0QXR0cmlidXRlKGkuSURfQVRUUklCVVRFX05BTUUsdCl9
LGNyZWF0ZU1hcmt1cEZvclJvb3Q6ZnVuY3Rpb24oKXtyZXR1cm4gaS5ST09UX0FUVFJJQlVURV9O
QU1FKyc9IiInfSxzZXRBdHRyaWJ1dGVGb3JSb290OmZ1bmN0aW9uKGUpe2Uuc2V0QXR0cmlidXRl
KGkuUk9PVF9BVFRSSUJVVEVfTkFNRSwiIil9LGNyZWF0ZU1hcmt1cEZvclByb3BlcnR5OmZ1bmN0
aW9uKGUsdCl7dmFyIG49aS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KGUpP2kucHJvcGVydGll
c1tlXTpudWxsO2lmKG4pe2lmKG8obix0KSlyZXR1cm4iIjt2YXIgcj1uLmF0dHJpYnV0ZU5hbWU7
cmV0dXJuIG4uaGFzQm9vbGVhblZhbHVlfHxuLmhhc092ZXJsb2FkZWRCb29sZWFuVmFsdWUmJiEw
PT09dD9yKyc9IiInOnIrIj0iK2EodCl9cmV0dXJuIGkuaXNDdXN0b21BdHRyaWJ1dGUoZSk/bnVs
bD09dD8iIjplKyI9IithKHQpOm51bGx9LGNyZWF0ZU1hcmt1cEZvckN1c3RvbUF0dHJpYnV0ZTpm
dW5jdGlvbihlLHQpe3JldHVybiByKGUpJiZudWxsIT10P2UrIj0iK2EodCk6IiJ9LHNldFZhbHVl
Rm9yUHJvcGVydHk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWkucHJvcGVydGllcy5oYXNPd25Qcm9w
ZXJ0eSh0KT9pLnByb3BlcnRpZXNbdF06bnVsbDtpZihyKXt2YXIgYT1yLm11dGF0aW9uTWV0aG9k
O2lmKGEpYShlLG4pO2Vsc2V7aWYobyhyLG4pKXJldHVybiB2b2lkIHRoaXMuZGVsZXRlVmFsdWVG
b3JQcm9wZXJ0eShlLHQpO2lmKHIubXVzdFVzZVByb3BlcnR5KWVbci5wcm9wZXJ0eU5hbWVdPW47
ZWxzZXt2YXIgcz1yLmF0dHJpYnV0ZU5hbWUsdT1yLmF0dHJpYnV0ZU5hbWVzcGFjZTt1P2Uuc2V0
QXR0cmlidXRlTlModSxzLCIiK24pOnIuaGFzQm9vbGVhblZhbHVlfHxyLmhhc092ZXJsb2FkZWRC
b29sZWFuVmFsdWUmJiEwPT09bj9lLnNldEF0dHJpYnV0ZShzLCIiKTplLnNldEF0dHJpYnV0ZShz
LCIiK24pfX19ZWxzZSBpZihpLmlzQ3VzdG9tQXR0cmlidXRlKHQpKXJldHVybiB2b2lkIGMuc2V0
VmFsdWVGb3JBdHRyaWJ1dGUoZSx0LG4pfSxzZXRWYWx1ZUZvckF0dHJpYnV0ZTpmdW5jdGlvbihl
LHQsbil7cih0KSYmKG51bGw9PW4/ZS5yZW1vdmVBdHRyaWJ1dGUodCk6ZS5zZXRBdHRyaWJ1dGUo
dCwiIituKSl9LGRlbGV0ZVZhbHVlRm9yQXR0cmlidXRlOmZ1bmN0aW9uKGUsdCl7ZS5yZW1vdmVB
dHRyaWJ1dGUodCl9LGRlbGV0ZVZhbHVlRm9yUHJvcGVydHk6ZnVuY3Rpb24oZSx0KXt2YXIgbj1p
LnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkodCk/aS5wcm9wZXJ0aWVzW3RdOm51bGw7aWYobil7
dmFyIHI9bi5tdXRhdGlvbk1ldGhvZDtpZihyKXIoZSx2b2lkIDApO2Vsc2UgaWYobi5tdXN0VXNl
UHJvcGVydHkpe3ZhciBvPW4ucHJvcGVydHlOYW1lO24uaGFzQm9vbGVhblZhbHVlP2Vbb109ITE6
ZVtvXT0iIn1lbHNlIGUucmVtb3ZlQXR0cmlidXRlKG4uYXR0cmlidXRlTmFtZSl9ZWxzZSBpLmlz
Q3VzdG9tQXR0cmlidXRlKHQpJiZlLnJlbW92ZUF0dHJpYnV0ZSh0KX19O3QuZXhwb3J0cz1jfSx7
MTE6MTEsMTExOjExMSwxNDI6MTQyLDMzOjMzLDU4OjU4fV0sMTM6W2Z1bmN0aW9uKGUsdCxuKXsi
dXNlIHN0cmljdCI7dmFyIHI9ZSgxMTIpLG89ZSg5KSxpPWUoMTIzKSxhPWUoMTI4KSxzPWUoMTI5
KSx1PShlKDEzNykse2Rhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwOmZ1bmN0aW9uKGUs
dCl7aWYoaS5jYW5Vc2VET018fHIoIjU2IiksdHx8cigiNTciKSwiSFRNTCI9PT1lLm5vZGVOYW1l
JiZyKCI1OCIpLCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIG49YSh0LHMpWzBdO2UucGFyZW50Tm9k
ZS5yZXBsYWNlQ2hpbGQobixlKX1lbHNlIG8ucmVwbGFjZUNoaWxkV2l0aFRyZWUoZSx0KX19KTt0
LmV4cG9ydHM9dX0sezExMjoxMTIsMTIzOjEyMywxMjg6MTI4LDEyOToxMjksMTM3OjEzNyw5Ojl9
XSwxNDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1bIlJlc3BvbmRlckV2ZW50
UGx1Z2luIiwiU2ltcGxlRXZlbnRQbHVnaW4iLCJUYXBFdmVudFBsdWdpbiIsIkVudGVyTGVhdmVF
dmVudFBsdWdpbiIsIkNoYW5nZUV2ZW50UGx1Z2luIiwiU2VsZWN0RXZlbnRQbHVnaW4iLCJCZWZv
cmVJbnB1dEV2ZW50UGx1Z2luIl07dC5leHBvcnRzPXJ9LHt9XSwxNTpbZnVuY3Rpb24oZSx0LG4p
eyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDE5KSxvPWUoMzMpLGk9ZSg4NCksYT17bW91c2VFbnRlcjp7
cmVnaXN0cmF0aW9uTmFtZToib25Nb3VzZUVudGVyIixkZXBlbmRlbmNpZXM6WyJ0b3BNb3VzZU91
dCIsInRvcE1vdXNlT3ZlciJdfSxtb3VzZUxlYXZlOntyZWdpc3RyYXRpb25OYW1lOiJvbk1vdXNl
TGVhdmUiLGRlcGVuZGVuY2llczpbInRvcE1vdXNlT3V0IiwidG9wTW91c2VPdmVyIl19fSxzPXtl
dmVudFR5cGVzOmEsZXh0cmFjdEV2ZW50czpmdW5jdGlvbihlLHQsbixzKXtpZigidG9wTW91c2VP
dmVyIj09PWUmJihuLnJlbGF0ZWRUYXJnZXR8fG4uZnJvbUVsZW1lbnQpKXJldHVybiBudWxsO2lm
KCJ0b3BNb3VzZU91dCIhPT1lJiYidG9wTW91c2VPdmVyIiE9PWUpcmV0dXJuIG51bGw7dmFyIHU7
aWYocy53aW5kb3c9PT1zKXU9cztlbHNle3ZhciBsPXMub3duZXJEb2N1bWVudDt1PWw/bC5kZWZh
dWx0Vmlld3x8bC5wYXJlbnRXaW5kb3c6d2luZG93fXZhciBjLHA7aWYoInRvcE1vdXNlT3V0Ij09
PWUpe2M9dDt2YXIgZD1uLnJlbGF0ZWRUYXJnZXR8fG4udG9FbGVtZW50O3A9ZD9vLmdldENsb3Nl
c3RJbnN0YW5jZUZyb21Ob2RlKGQpOm51bGx9ZWxzZSBjPW51bGwscD10O2lmKGM9PT1wKXJldHVy
biBudWxsO3ZhciBmPW51bGw9PWM/dTpvLmdldE5vZGVGcm9tSW5zdGFuY2UoYyksaD1udWxsPT1w
P3U6by5nZXROb2RlRnJvbUluc3RhbmNlKHApLG09aS5nZXRQb29sZWQoYS5tb3VzZUxlYXZlLGMs
bixzKTttLnR5cGU9Im1vdXNlbGVhdmUiLG0udGFyZ2V0PWYsbS5yZWxhdGVkVGFyZ2V0PWg7dmFy
IHY9aS5nZXRQb29sZWQoYS5tb3VzZUVudGVyLHAsbixzKTtyZXR1cm4gdi50eXBlPSJtb3VzZWVu
dGVyIix2LnRhcmdldD1oLHYucmVsYXRlZFRhcmdldD1mLHIuYWNjdW11bGF0ZUVudGVyTGVhdmVE
aXNwYXRjaGVzKG0sdixjLHApLFttLHZdfX07dC5leHBvcnRzPXN9LHsxOToxOSwzMzozMyw4NDo4
NH1dLDE2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJu
ImJ1dHRvbiI9PT1lfHwiaW5wdXQiPT09ZXx8InNlbGVjdCI9PT1lfHwidGV4dGFyZWEiPT09ZX1m
dW5jdGlvbiBvKGUsdCxuKXtzd2l0Y2goZSl7Y2FzZSJvbkNsaWNrIjpjYXNlIm9uQ2xpY2tDYXB0
dXJlIjpjYXNlIm9uRG91YmxlQ2xpY2siOmNhc2Uib25Eb3VibGVDbGlja0NhcHR1cmUiOmNhc2Ui
b25Nb3VzZURvd24iOmNhc2Uib25Nb3VzZURvd25DYXB0dXJlIjpjYXNlIm9uTW91c2VNb3ZlIjpj
YXNlIm9uTW91c2VNb3ZlQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlVXAiOmNhc2Uib25Nb3VzZVVwQ2Fw
dHVyZSI6cmV0dXJuISghbi5kaXNhYmxlZHx8IXIodCkpO2RlZmF1bHQ6cmV0dXJuITF9fXZhciBp
PWUoMTEyKSxhPWUoMTcpLHM9ZSgxOCksdT1lKDUwKSxsPWUoOTEpLGM9ZSg5OCkscD0oZSgxMzcp
LHt9KSxkPW51bGwsZj1mdW5jdGlvbihlLHQpe2UmJihzLmV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRl
cihlLHQpLGUuaXNQZXJzaXN0ZW50KCl8fGUuY29uc3RydWN0b3IucmVsZWFzZShlKSl9LGg9ZnVu
Y3Rpb24oZSl7cmV0dXJuIGYoZSwhMCl9LG09ZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSwhMSl9LHY9
ZnVuY3Rpb24oZSl7cmV0dXJuIi4iK2UuX3Jvb3ROb2RlSUR9LGc9e2luamVjdGlvbjp7aW5qZWN0
RXZlbnRQbHVnaW5PcmRlcjphLmluamVjdEV2ZW50UGx1Z2luT3JkZXIsaW5qZWN0RXZlbnRQbHVn
aW5zQnlOYW1lOmEuaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lfSxwdXRMaXN0ZW5lcjpmdW5jdGlv
bihlLHQsbil7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJmkoIjk0Iix0LHR5cGVvZiBuKTt2YXIgcj12
KGUpOyhwW3RdfHwocFt0XT17fSkpW3JdPW47dmFyIG89YS5yZWdpc3RyYXRpb25OYW1lTW9kdWxl
c1t0XTtvJiZvLmRpZFB1dExpc3RlbmVyJiZvLmRpZFB1dExpc3RlbmVyKGUsdCxuKX0sZ2V0TGlz
dGVuZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj1wW3RdO2lmKG8odCxlLl9jdXJyZW50RWxlbWVudC50
eXBlLGUuX2N1cnJlbnRFbGVtZW50LnByb3BzKSlyZXR1cm4gbnVsbDt2YXIgcj12KGUpO3JldHVy
biBuJiZuW3JdfSxkZWxldGVMaXN0ZW5lcjpmdW5jdGlvbihlLHQpe3ZhciBuPWEucmVnaXN0cmF0
aW9uTmFtZU1vZHVsZXNbdF07biYmbi53aWxsRGVsZXRlTGlzdGVuZXImJm4ud2lsbERlbGV0ZUxp
c3RlbmVyKGUsdCk7dmFyIHI9cFt0XTtyJiZkZWxldGUgclt2KGUpXX0sZGVsZXRlQWxsTGlzdGVu
ZXJzOmZ1bmN0aW9uKGUpe3ZhciB0PXYoZSk7Zm9yKHZhciBuIGluIHApaWYocC5oYXNPd25Qcm9w
ZXJ0eShuKSYmcFtuXVt0XSl7dmFyIHI9YS5yZWdpc3RyYXRpb25OYW1lTW9kdWxlc1tuXTtyJiZy
LndpbGxEZWxldGVMaXN0ZW5lciYmci53aWxsRGVsZXRlTGlzdGVuZXIoZSxuKSxkZWxldGUgcFtu
XVt0XX19LGV4dHJhY3RFdmVudHM6ZnVuY3Rpb24oZSx0LG4scil7Zm9yKHZhciBvLGk9YS5wbHVn
aW5zLHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIHU9aVtzXTtpZih1KXt2YXIgYz11LmV4dHJhY3RF
dmVudHMoZSx0LG4scik7YyYmKG89bChvLGMpKX19cmV0dXJuIG99LGVucXVldWVFdmVudHM6ZnVu
Y3Rpb24oZSl7ZSYmKGQ9bChkLGUpKX0scHJvY2Vzc0V2ZW50UXVldWU6ZnVuY3Rpb24oZSl7dmFy
IHQ9ZDtkPW51bGwsZT9jKHQsaCk6Yyh0LG0pLGQmJmkoIjk1IiksdS5yZXRocm93Q2F1Z2h0RXJy
b3IoKX0sX19wdXJnZTpmdW5jdGlvbigpe3A9e319LF9fZ2V0TGlzdGVuZXJCYW5rOmZ1bmN0aW9u
KCl7cmV0dXJuIHB9fTt0LmV4cG9ydHM9Z30sezExMjoxMTIsMTM3OjEzNywxNzoxNywxODoxOCw1
MDo1MCw5MTo5MSw5ODo5OH1dLDE3OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0
aW9uIHIoKXtpZihzKWZvcih2YXIgZSBpbiB1KXt2YXIgdD11W2VdLG49cy5pbmRleE9mKGUpO2lm
KG4+LTF8fGEoIjk2IixlKSwhbC5wbHVnaW5zW25dKXt0LmV4dHJhY3RFdmVudHN8fGEoIjk3Iixl
KSxsLnBsdWdpbnNbbl09dDt2YXIgcj10LmV2ZW50VHlwZXM7Zm9yKHZhciBpIGluIHIpbyhyW2ld
LHQsaSl8fGEoIjk4IixpLGUpfX19ZnVuY3Rpb24gbyhlLHQsbil7bC5ldmVudE5hbWVEaXNwYXRj
aENvbmZpZ3MuaGFzT3duUHJvcGVydHkobikmJmEoIjk5IixuKSxsLmV2ZW50TmFtZURpc3BhdGNo
Q29uZmlnc1tuXT1lO3ZhciByPWUucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM7aWYocil7Zm9yKHZh
ciBvIGluIHIpaWYoci5oYXNPd25Qcm9wZXJ0eShvKSl7dmFyIHM9cltvXTtpKHMsdCxuKX1yZXR1
cm4hMH1yZXR1cm4hIWUucmVnaXN0cmF0aW9uTmFtZSYmKGkoZS5yZWdpc3RyYXRpb25OYW1lLHQs
biksITApfWZ1bmN0aW9uIGkoZSx0LG4pe2wucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbZV0mJmEo
IjEwMCIsZSksbC5yZWdpc3RyYXRpb25OYW1lTW9kdWxlc1tlXT10LGwucmVnaXN0cmF0aW9uTmFt
ZURlcGVuZGVuY2llc1tlXT10LmV2ZW50VHlwZXNbbl0uZGVwZW5kZW5jaWVzfXZhciBhPWUoMTEy
KSxzPShlKDEzNyksbnVsbCksdT17fSxsPXtwbHVnaW5zOltdLGV2ZW50TmFtZURpc3BhdGNoQ29u
Zmlnczp7fSxyZWdpc3RyYXRpb25OYW1lTW9kdWxlczp7fSxyZWdpc3RyYXRpb25OYW1lRGVwZW5k
ZW5jaWVzOnt9LHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXM6bnVsbCxpbmplY3RFdmVudFBsdWdp
bk9yZGVyOmZ1bmN0aW9uKGUpe3MmJmEoIjEwMSIpLHM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNh
bGwoZSkscigpfSxpbmplY3RFdmVudFBsdWdpbnNCeU5hbWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ITE7
Zm9yKHZhciBuIGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShuKSl7dmFyIG89ZVtuXTt1Lmhhc093
blByb3BlcnR5KG4pJiZ1W25dPT09b3x8KHVbbl0mJmEoIjEwMiIsbiksdVtuXT1vLHQ9ITApfXQm
JnIoKX0sZ2V0UGx1Z2luTW9kdWxlRm9yRXZlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kaXNwYXRj
aENvbmZpZztpZih0LnJlZ2lzdHJhdGlvbk5hbWUpcmV0dXJuIGwucmVnaXN0cmF0aW9uTmFtZU1v
ZHVsZXNbdC5yZWdpc3RyYXRpb25OYW1lXXx8bnVsbDtpZih2b2lkIDAhPT10LnBoYXNlZFJlZ2lz
dHJhdGlvbk5hbWVzKXt2YXIgbj10LnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzO2Zvcih2YXIgciBp
biBuKWlmKG4uaGFzT3duUHJvcGVydHkocikpe3ZhciBvPWwucmVnaXN0cmF0aW9uTmFtZU1vZHVs
ZXNbbltyXV07aWYobylyZXR1cm4gb319cmV0dXJuIG51bGx9LF9yZXNldEV2ZW50UGx1Z2luczpm
dW5jdGlvbigpe3M9bnVsbDtmb3IodmFyIGUgaW4gdSl1Lmhhc093blByb3BlcnR5KGUpJiZkZWxl
dGUgdVtlXTtsLnBsdWdpbnMubGVuZ3RoPTA7dmFyIHQ9bC5ldmVudE5hbWVEaXNwYXRjaENvbmZp
Z3M7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmZGVsZXRlIHRbbl07dmFyIHI9
bC5yZWdpc3RyYXRpb25OYW1lTW9kdWxlcztmb3IodmFyIG8gaW4gcilyLmhhc093blByb3BlcnR5
KG8pJiZkZWxldGUgcltvXX19O3QuZXhwb3J0cz1sfSx7MTEyOjExMiwxMzc6MTM3fV0sMTg6W2Z1
bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4idG9wTW91c2VV
cCI9PT1lfHwidG9wVG91Y2hFbmQiPT09ZXx8InRvcFRvdWNoQ2FuY2VsIj09PWV9ZnVuY3Rpb24g
byhlKXtyZXR1cm4idG9wTW91c2VNb3ZlIj09PWV8fCJ0b3BUb3VjaE1vdmUiPT09ZX1mdW5jdGlv
biBpKGUpe3JldHVybiJ0b3BNb3VzZURvd24iPT09ZXx8InRvcFRvdWNoU3RhcnQiPT09ZX1mdW5j
dGlvbiBhKGUsdCxuLHIpe3ZhciBvPWUudHlwZXx8InVua25vd24tZXZlbnQiO2UuY3VycmVudFRh
cmdldD1nLmdldE5vZGVGcm9tSW5zdGFuY2UociksdD9tLmludm9rZUd1YXJkZWRDYWxsYmFja1dp
dGhDYXRjaChvLG4sZSk6bS5pbnZva2VHdWFyZGVkQ2FsbGJhY2sobyxuLGUpLGUuY3VycmVudFRh
cmdldD1udWxsfWZ1bmN0aW9uIHMoZSx0KXt2YXIgbj1lLl9kaXNwYXRjaExpc3RlbmVycyxyPWUu
X2Rpc3BhdGNoSW5zdGFuY2VzO2lmKEFycmF5LmlzQXJyYXkobikpZm9yKHZhciBvPTA7bzxuLmxl
bmd0aCYmIWUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtvKyspYShlLHQsbltvXSxyW29dKTtlbHNl
IG4mJmEoZSx0LG4scik7ZS5fZGlzcGF0Y2hMaXN0ZW5lcnM9bnVsbCxlLl9kaXNwYXRjaEluc3Rh
bmNlcz1udWxsfWZ1bmN0aW9uIHUoZSl7dmFyIHQ9ZS5fZGlzcGF0Y2hMaXN0ZW5lcnMsbj1lLl9k
aXNwYXRjaEluc3RhbmNlcztpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIHI9MDtyPHQubGVu
Z3RoJiYhZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO3IrKylpZih0W3JdKGUsbltyXSkpcmV0dXJu
IG5bcl19ZWxzZSBpZih0JiZ0KGUsbikpcmV0dXJuIG47cmV0dXJuIG51bGx9ZnVuY3Rpb24gbChl
KXt2YXIgdD11KGUpO3JldHVybiBlLl9kaXNwYXRjaEluc3RhbmNlcz1udWxsLGUuX2Rpc3BhdGNo
TGlzdGVuZXJzPW51bGwsdH1mdW5jdGlvbiBjKGUpe3ZhciB0PWUuX2Rpc3BhdGNoTGlzdGVuZXJz
LG49ZS5fZGlzcGF0Y2hJbnN0YW5jZXM7QXJyYXkuaXNBcnJheSh0KSYmaCgiMTAzIiksZS5jdXJy
ZW50VGFyZ2V0PXQ/Zy5nZXROb2RlRnJvbUluc3RhbmNlKG4pOm51bGw7dmFyIHI9dD90KGUpOm51
bGw7cmV0dXJuIGUuY3VycmVudFRhcmdldD1udWxsLGUuX2Rpc3BhdGNoTGlzdGVuZXJzPW51bGws
ZS5fZGlzcGF0Y2hJbnN0YW5jZXM9bnVsbCxyfWZ1bmN0aW9uIHAoZSl7cmV0dXJuISFlLl9kaXNw
YXRjaExpc3RlbmVyc312YXIgZCxmLGg9ZSgxMTIpLG09ZSg1MCksdj0oZSgxMzcpLGUoMTQyKSx7
aW5qZWN0Q29tcG9uZW50VHJlZTpmdW5jdGlvbihlKXtkPWV9LGluamVjdFRyZWVUcmF2ZXJzYWw6
ZnVuY3Rpb24oZSl7Zj1lfX0pLGc9e2lzRW5kaXNoOnIsaXNNb3ZlaXNoOm8saXNTdGFydGlzaDpp
LGV4ZWN1dGVEaXJlY3REaXNwYXRjaDpjLGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlcjpzLGV4ZWN1
dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWU6bCxoYXNEaXNwYXRjaGVzOnAsZ2V0SW5zdGFu
Y2VGcm9tTm9kZTpmdW5jdGlvbihlKXtyZXR1cm4gZC5nZXRJbnN0YW5jZUZyb21Ob2RlKGUpfSxn
ZXROb2RlRnJvbUluc3RhbmNlOmZ1bmN0aW9uKGUpe3JldHVybiBkLmdldE5vZGVGcm9tSW5zdGFu
Y2UoZSl9LGlzQW5jZXN0b3I6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZi5pc0FuY2VzdG9yKGUsdCl9
LGdldExvd2VzdENvbW1vbkFuY2VzdG9yOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGYuZ2V0TG93ZXN0
Q29tbW9uQW5jZXN0b3IoZSx0KX0sZ2V0UGFyZW50SW5zdGFuY2U6ZnVuY3Rpb24oZSl7cmV0dXJu
IGYuZ2V0UGFyZW50SW5zdGFuY2UoZSl9LHRyYXZlcnNlVHdvUGhhc2U6ZnVuY3Rpb24oZSx0LG4p
e3JldHVybiBmLnRyYXZlcnNlVHdvUGhhc2UoZSx0LG4pfSx0cmF2ZXJzZUVudGVyTGVhdmU6ZnVu
Y3Rpb24oZSx0LG4scixvKXtyZXR1cm4gZi50cmF2ZXJzZUVudGVyTGVhdmUoZSx0LG4scixvKX0s
aW5qZWN0aW9uOnZ9O3QuZXhwb3J0cz1nfSx7MTEyOjExMiwxMzc6MTM3LDE0MjoxNDIsNTA6NTB9
XSwxOTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXt2YXIg
cj10LmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzW25dO3JldHVybiBnKGUs
cil9ZnVuY3Rpb24gbyhlLHQsbil7dmFyIG89cihlLG4sdCk7byYmKG4uX2Rpc3BhdGNoTGlzdGVu
ZXJzPW0obi5fZGlzcGF0Y2hMaXN0ZW5lcnMsbyksbi5fZGlzcGF0Y2hJbnN0YW5jZXM9bShuLl9k
aXNwYXRjaEluc3RhbmNlcyxlKSl9ZnVuY3Rpb24gaShlKXtlJiZlLmRpc3BhdGNoQ29uZmlnLnBo
YXNlZFJlZ2lzdHJhdGlvbk5hbWVzJiZoLnRyYXZlcnNlVHdvUGhhc2UoZS5fdGFyZ2V0SW5zdCxv
LGUpfWZ1bmN0aW9uIGEoZSl7aWYoZSYmZS5kaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRp
b25OYW1lcyl7dmFyIHQ9ZS5fdGFyZ2V0SW5zdCxuPXQ/aC5nZXRQYXJlbnRJbnN0YW5jZSh0KTpu
dWxsO2gudHJhdmVyc2VUd29QaGFzZShuLG8sZSl9fWZ1bmN0aW9uIHMoZSx0LG4pe2lmKG4mJm4u
ZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSl7dmFyIHI9bi5kaXNwYXRjaENvbmZpZy5y
ZWdpc3RyYXRpb25OYW1lLG89ZyhlLHIpO28mJihuLl9kaXNwYXRjaExpc3RlbmVycz1tKG4uX2Rp
c3BhdGNoTGlzdGVuZXJzLG8pLG4uX2Rpc3BhdGNoSW5zdGFuY2VzPW0obi5fZGlzcGF0Y2hJbnN0
YW5jZXMsZSkpfX1mdW5jdGlvbiB1KGUpe2UmJmUuZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9u
TmFtZSYmcyhlLl90YXJnZXRJbnN0LG51bGwsZSl9ZnVuY3Rpb24gbChlKXt2KGUsaSl9ZnVuY3Rp
b24gYyhlKXt2KGUsYSl9ZnVuY3Rpb24gcChlLHQsbixyKXtoLnRyYXZlcnNlRW50ZXJMZWF2ZShu
LHIscyxlLHQpfWZ1bmN0aW9uIGQoZSl7dihlLHUpfXZhciBmPWUoMTYpLGg9ZSgxOCksbT1lKDkx
KSx2PWUoOTgpLGc9KGUoMTQyKSxmLmdldExpc3RlbmVyKSx5PXthY2N1bXVsYXRlVHdvUGhhc2VE
aXNwYXRjaGVzOmwsYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NraXBUYXJnZXQ6YyxhY2N1
bXVsYXRlRGlyZWN0RGlzcGF0Y2hlczpkLGFjY3VtdWxhdGVFbnRlckxlYXZlRGlzcGF0Y2hlczpw
fTt0LmV4cG9ydHM9eX0sezE0MjoxNDIsMTY6MTYsMTg6MTgsOTE6OTEsOTg6OTh9XSwyMDpbZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3RoaXMuX3Jvb3Q9ZSx0aGlz
Ll9zdGFydFRleHQ9dGhpcy5nZXRUZXh0KCksdGhpcy5fZmFsbGJhY2tUZXh0PW51bGx9dmFyIG89
ZSgxNDMpLGk9ZSgyNCksYT1lKDEwNik7byhyLnByb3RvdHlwZSx7ZGVzdHJ1Y3RvcjpmdW5jdGlv
bigpe3RoaXMuX3Jvb3Q9bnVsbCx0aGlzLl9zdGFydFRleHQ9bnVsbCx0aGlzLl9mYWxsYmFja1Rl
eHQ9bnVsbH0sZ2V0VGV4dDpmdW5jdGlvbigpe3JldHVybiJ2YWx1ZSJpbiB0aGlzLl9yb290P3Ro
aXMuX3Jvb3QudmFsdWU6dGhpcy5fcm9vdFthKCldfSxnZXREYXRhOmZ1bmN0aW9uKCl7aWYodGhp
cy5fZmFsbGJhY2tUZXh0KXJldHVybiB0aGlzLl9mYWxsYmFja1RleHQ7dmFyIGUsdCxuPXRoaXMu
X3N0YXJ0VGV4dCxyPW4ubGVuZ3RoLG89dGhpcy5nZXRUZXh0KCksaT1vLmxlbmd0aDtmb3IoZT0w
O2U8ciYmbltlXT09PW9bZV07ZSsrKTt2YXIgYT1yLWU7Zm9yKHQ9MTt0PD1hJiZuW3ItdF09PT1v
W2ktdF07dCsrKTt2YXIgcz10PjE/MS10OnZvaWQgMDtyZXR1cm4gdGhpcy5fZmFsbGJhY2tUZXh0
PW8uc2xpY2UoZSxzKSx0aGlzLl9mYWxsYmFja1RleHR9fSksaS5hZGRQb29saW5nVG8ociksdC5l
eHBvcnRzPXJ9LHsxMDY6MTA2LDE0MzoxNDMsMjQ6MjR9XSwyMTpbZnVuY3Rpb24oZSx0LG4peyJ1
c2Ugc3RyaWN0Ijt2YXIgcj1lKDExKSxvPXIuaW5qZWN0aW9uLk1VU1RfVVNFX1BST1BFUlRZLGk9
ci5pbmplY3Rpb24uSEFTX0JPT0xFQU5fVkFMVUUsYT1yLmluamVjdGlvbi5IQVNfTlVNRVJJQ19W
QUxVRSxzPXIuaW5qZWN0aW9uLkhBU19QT1NJVElWRV9OVU1FUklDX1ZBTFVFLHU9ci5pbmplY3Rp
b24uSEFTX09WRVJMT0FERURfQk9PTEVBTl9WQUxVRSxsPXtpc0N1c3RvbUF0dHJpYnV0ZTpSZWdF
eHAucHJvdG90eXBlLnRlc3QuYmluZChuZXcgUmVnRXhwKCJeKGRhdGF8YXJpYSktWyIrci5BVFRS
SUJVVEVfTkFNRV9DSEFSKyJdKiQiKSksUHJvcGVydGllczp7YWNjZXB0OjAsYWNjZXB0Q2hhcnNl
dDowLGFjY2Vzc0tleTowLGFjdGlvbjowLGFsbG93RnVsbFNjcmVlbjppLGFsbG93VHJhbnNwYXJl
bmN5OjAsYWx0OjAsYXM6MCxhc3luYzppLGF1dG9Db21wbGV0ZTowLGF1dG9QbGF5OmksY2FwdHVy
ZTppLGNlbGxQYWRkaW5nOjAsY2VsbFNwYWNpbmc6MCxjaGFyU2V0OjAsY2hhbGxlbmdlOjAsY2hl
Y2tlZDpvfGksY2l0ZTowLGNsYXNzSUQ6MCxjbGFzc05hbWU6MCxjb2xzOnMsY29sU3BhbjowLGNv
bnRlbnQ6MCxjb250ZW50RWRpdGFibGU6MCxjb250ZXh0TWVudTowLGNvbnRyb2xzOmksY29vcmRz
OjAsY3Jvc3NPcmlnaW46MCxkYXRhOjAsZGF0ZVRpbWU6MCxkZWZhdWx0OmksZGVmZXI6aSxkaXI6
MCxkaXNhYmxlZDppLGRvd25sb2FkOnUsZHJhZ2dhYmxlOjAsZW5jVHlwZTowLGZvcm06MCxmb3Jt
QWN0aW9uOjAsZm9ybUVuY1R5cGU6MCxmb3JtTWV0aG9kOjAsZm9ybU5vVmFsaWRhdGU6aSxmb3Jt
VGFyZ2V0OjAsZnJhbWVCb3JkZXI6MCxoZWFkZXJzOjAsaGVpZ2h0OjAsaGlkZGVuOmksaGlnaDow
LGhyZWY6MCxocmVmTGFuZzowLGh0bWxGb3I6MCxodHRwRXF1aXY6MCxpY29uOjAsaWQ6MCxpbnB1
dE1vZGU6MCxpbnRlZ3JpdHk6MCxpczowLGtleVBhcmFtczowLGtleVR5cGU6MCxraW5kOjAsbGFi
ZWw6MCxsYW5nOjAsbGlzdDowLGxvb3A6aSxsb3c6MCxtYW5pZmVzdDowLG1hcmdpbkhlaWdodDow
LG1hcmdpbldpZHRoOjAsbWF4OjAsbWF4TGVuZ3RoOjAsbWVkaWE6MCxtZWRpYUdyb3VwOjAsbWV0
aG9kOjAsbWluOjAsbWluTGVuZ3RoOjAsbXVsdGlwbGU6b3xpLG11dGVkOm98aSxuYW1lOjAsbm9u
Y2U6MCxub1ZhbGlkYXRlOmksb3BlbjppLG9wdGltdW06MCxwYXR0ZXJuOjAscGxhY2Vob2xkZXI6
MCxwbGF5c0lubGluZTppLHBvc3RlcjowLHByZWxvYWQ6MCxwcm9maWxlOjAscmFkaW9Hcm91cDow
LHJlYWRPbmx5OmkscmVmZXJyZXJQb2xpY3k6MCxyZWw6MCxyZXF1aXJlZDppLHJldmVyc2VkOmks
cm9sZTowLHJvd3M6cyxyb3dTcGFuOmEsc2FuZGJveDowLHNjb3BlOjAsc2NvcGVkOmksc2Nyb2xs
aW5nOjAsc2VhbWxlc3M6aSxzZWxlY3RlZDpvfGksc2hhcGU6MCxzaXplOnMsc2l6ZXM6MCxzcGFu
OnMsc3BlbGxDaGVjazowLHNyYzowLHNyY0RvYzowLHNyY0xhbmc6MCxzcmNTZXQ6MCxzdGFydDph
LHN0ZXA6MCxzdHlsZTowLHN1bW1hcnk6MCx0YWJJbmRleDowLHRhcmdldDowLHRpdGxlOjAsdHlw
ZTowLHVzZU1hcDowLHZhbHVlOjAsd2lkdGg6MCx3bW9kZTowLHdyYXA6MCxhYm91dDowLGRhdGF0
eXBlOjAsaW5saXN0OjAscHJlZml4OjAscHJvcGVydHk6MCxyZXNvdXJjZTowLHR5cGVvZjowLHZv
Y2FiOjAsYXV0b0NhcGl0YWxpemU6MCxhdXRvQ29ycmVjdDowLGF1dG9TYXZlOjAsY29sb3I6MCxp
dGVtUHJvcDowLGl0ZW1TY29wZTppLGl0ZW1UeXBlOjAsaXRlbUlEOjAsaXRlbVJlZjowLHJlc3Vs
dHM6MCxzZWN1cml0eTowLHVuc2VsZWN0YWJsZTowfSxET01BdHRyaWJ1dGVOYW1lczp7YWNjZXB0
Q2hhcnNldDoiYWNjZXB0LWNoYXJzZXQiLGNsYXNzTmFtZToiY2xhc3MiLGh0bWxGb3I6ImZvciIs
aHR0cEVxdWl2OiJodHRwLWVxdWl2In0sRE9NUHJvcGVydHlOYW1lczp7fSxET01NdXRhdGlvbk1l
dGhvZHM6e3ZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYobnVsbD09dClyZXR1cm4gZS5yZW1vdmVBdHRy
aWJ1dGUoInZhbHVlIik7Im51bWJlciIhPT1lLnR5cGV8fCExPT09ZS5oYXNBdHRyaWJ1dGUoInZh
bHVlIik/ZS5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIit0KTplLnZhbGlkaXR5JiYhZS52YWxpZGl0
eS5iYWRJbnB1dCYmZS5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT1lJiZlLnNldEF0dHJp
YnV0ZSgidmFsdWUiLCIiK3QpfX19O3QuZXhwb3J0cz1sfSx7MTE6MTF9XSwyMjpbZnVuY3Rpb24o
ZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PXsiPSI6Ij0wIiwiOiI6Ij0y
In07cmV0dXJuIiQiKygiIitlKS5yZXBsYWNlKC9bPTpdL2csZnVuY3Rpb24oZSl7cmV0dXJuIHRb
ZV19KX1mdW5jdGlvbiBvKGUpe3ZhciB0PXsiPTAiOiI9IiwiPTIiOiI6In07cmV0dXJuKCIiKygi
LiI9PT1lWzBdJiYiJCI9PT1lWzFdP2Uuc3Vic3RyaW5nKDIpOmUuc3Vic3RyaW5nKDEpKSkucmVw
bGFjZSgvKD0wfD0yKS9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9dmFyIGk9e2VzY2FwZTpy
LHVuZXNjYXBlOm99O3QuZXhwb3J0cz1pfSx7fV0sMjM6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCI7ZnVuY3Rpb24gcihlKXtudWxsIT1lLmNoZWNrZWRMaW5rJiZudWxsIT1lLnZhbHVlTGlu
ayYmcygiODciKX1mdW5jdGlvbiBvKGUpe3IoZSksKG51bGwhPWUudmFsdWV8fG51bGwhPWUub25D
aGFuZ2UpJiZzKCI4OCIpfWZ1bmN0aW9uIGkoZSl7cihlKSwobnVsbCE9ZS5jaGVja2VkfHxudWxs
IT1lLm9uQ2hhbmdlKSYmcygiODkiKX1mdW5jdGlvbiBhKGUpe2lmKGUpe3ZhciB0PWUuZ2V0TmFt
ZSgpO2lmKHQpcmV0dXJuIiBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgIit0KyJgLiJ9cmV0
dXJuIiJ9dmFyIHM9ZSgxMTIpLHU9ZSg2NCksbD1lKDE0NSksYz1lKDEyMCkscD1sKGMuaXNWYWxp
ZEVsZW1lbnQpLGQ9KGUoMTM3KSxlKDE0Mikse2J1dHRvbjohMCxjaGVja2JveDohMCxpbWFnZToh
MCxoaWRkZW46ITAscmFkaW86ITAscmVzZXQ6ITAsc3VibWl0OiEwfSksZj17dmFsdWU6ZnVuY3Rp
b24oZSx0LG4pe3JldHVybiFlW3RdfHxkW2UudHlwZV18fGUub25DaGFuZ2V8fGUucmVhZE9ubHl8
fGUuZGlzYWJsZWQ/bnVsbDpuZXcgRXJyb3IoIllvdSBwcm92aWRlZCBhIGB2YWx1ZWAgcHJvcCB0
byBhIGZvcm0gZmllbGQgd2l0aG91dCBhbiBgb25DaGFuZ2VgIGhhbmRsZXIuIFRoaXMgd2lsbCBy
ZW5kZXIgYSByZWFkLW9ubHkgZmllbGQuIElmIHRoZSBmaWVsZCBzaG91bGQgYmUgbXV0YWJsZSB1
c2UgYGRlZmF1bHRWYWx1ZWAuIE90aGVyd2lzZSwgc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGBy
ZWFkT25seWAuIil9LGNoZWNrZWQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiFlW3RdfHxlLm9uQ2hh
bmdlfHxlLnJlYWRPbmx5fHxlLmRpc2FibGVkP251bGw6bmV3IEVycm9yKCJZb3UgcHJvdmlkZWQg
YSBgY2hlY2tlZGAgcHJvcCB0byBhIGZvcm0gZmllbGQgd2l0aG91dCBhbiBgb25DaGFuZ2VgIGhh
bmRsZXIuIFRoaXMgd2lsbCByZW5kZXIgYSByZWFkLW9ubHkgZmllbGQuIElmIHRoZSBmaWVsZCBz
aG91bGQgYmUgbXV0YWJsZSB1c2UgYGRlZmF1bHRDaGVja2VkYC4gT3RoZXJ3aXNlLCBzZXQgZWl0
aGVyIGBvbkNoYW5nZWAgb3IgYHJlYWRPbmx5YC4iKX0sb25DaGFuZ2U6cC5mdW5jfSxoPXt9LG09
e2NoZWNrUHJvcFR5cGVzOmZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHIgaW4gZil7aWYoZi5oYXNP
d25Qcm9wZXJ0eShyKSl2YXIgbz1mW3JdKHQscixlLCJwcm9wIixudWxsLHUpO28gaW5zdGFuY2Vv
ZiBFcnJvciYmIShvLm1lc3NhZ2UgaW4gaCkmJihoW28ubWVzc2FnZV09ITAsYShuKSl9fSxnZXRW
YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZUxpbms/KG8oZSksZS52YWx1ZUxpbmsudmFs
dWUpOmUudmFsdWV9LGdldENoZWNrZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hlY2tlZExpbms/
KGkoZSksZS5jaGVja2VkTGluay52YWx1ZSk6ZS5jaGVja2VkfSxleGVjdXRlT25DaGFuZ2U6ZnVu
Y3Rpb24oZSx0KXtyZXR1cm4gZS52YWx1ZUxpbms/KG8oZSksZS52YWx1ZUxpbmsucmVxdWVzdENo
YW5nZSh0LnRhcmdldC52YWx1ZSkpOmUuY2hlY2tlZExpbms/KGkoZSksZS5jaGVja2VkTGluay5y
ZXF1ZXN0Q2hhbmdlKHQudGFyZ2V0LmNoZWNrZWQpKTplLm9uQ2hhbmdlP2Uub25DaGFuZ2UuY2Fs
bCh2b2lkIDAsdCk6dm9pZCAwfX07dC5leHBvcnRzPW19LHsxMTI6MTEyLDEyMDoxMjAsMTM3OjEz
NywxNDI6MTQyLDE0NToxNDUsNjQ6NjR9XSwyNDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0
Ijt2YXIgcj1lKDExMiksbz0oZSgxMzcpLGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYodC5pbnN0
YW5jZVBvb2wubGVuZ3RoKXt2YXIgbj10Lmluc3RhbmNlUG9vbC5wb3AoKTtyZXR1cm4gdC5jYWxs
KG4sZSksbn1yZXR1cm4gbmV3IHQoZSl9KSxpPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztpZihu
Lmluc3RhbmNlUG9vbC5sZW5ndGgpe3ZhciByPW4uaW5zdGFuY2VQb29sLnBvcCgpO3JldHVybiBu
LmNhbGwocixlLHQpLHJ9cmV0dXJuIG5ldyBuKGUsdCl9LGE9ZnVuY3Rpb24oZSx0LG4pe3ZhciBy
PXRoaXM7aWYoci5pbnN0YW5jZVBvb2wubGVuZ3RoKXt2YXIgbz1yLmluc3RhbmNlUG9vbC5wb3Ao
KTtyZXR1cm4gci5jYWxsKG8sZSx0LG4pLG99cmV0dXJuIG5ldyByKGUsdCxuKX0scz1mdW5jdGlv
bihlLHQsbixyKXt2YXIgbz10aGlzO2lmKG8uaW5zdGFuY2VQb29sLmxlbmd0aCl7dmFyIGk9by5p
bnN0YW5jZVBvb2wucG9wKCk7cmV0dXJuIG8uY2FsbChpLGUsdCxuLHIpLGl9cmV0dXJuIG5ldyBv
KGUsdCxuLHIpfSx1PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7ZSBpbnN0YW5jZW9mIHR8fHIoIjI1
IiksZS5kZXN0cnVjdG9yKCksdC5pbnN0YW5jZVBvb2wubGVuZ3RoPHQucG9vbFNpemUmJnQuaW5z
dGFuY2VQb29sLnB1c2goZSl9LGw9byxjPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZTtyZXR1cm4gbi5p
bnN0YW5jZVBvb2w9W10sbi5nZXRQb29sZWQ9dHx8bCxuLnBvb2xTaXplfHwobi5wb29sU2l6ZT0x
MCksbi5yZWxlYXNlPXUsbn0scD17YWRkUG9vbGluZ1RvOmMsb25lQXJndW1lbnRQb29sZXI6byx0
d29Bcmd1bWVudFBvb2xlcjppLHRocmVlQXJndW1lbnRQb29sZXI6YSxmb3VyQXJndW1lbnRQb29s
ZXI6c307dC5leHBvcnRzPXB9LHsxMTI6MTEyLDEzNzoxMzd9XSwyNTpbZnVuY3Rpb24oZSx0LG4p
eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093
blByb3BlcnR5LmNhbGwoZSxtKXx8KGVbbV09ZisrLHBbZVttXV09e30pLHBbZVttXV19dmFyIG8s
aT1lKDE0MyksYT1lKDE3KSxzPWUoNTEpLHU9ZSg5MCksbD1lKDEwNyksYz1lKDEwOSkscD17fSxk
PSExLGY9MCxoPXt0b3BBYm9ydDoiYWJvcnQiLHRvcEFuaW1hdGlvbkVuZDpsKCJhbmltYXRpb25l
bmQiKXx8ImFuaW1hdGlvbmVuZCIsdG9wQW5pbWF0aW9uSXRlcmF0aW9uOmwoImFuaW1hdGlvbml0
ZXJhdGlvbiIpfHwiYW5pbWF0aW9uaXRlcmF0aW9uIix0b3BBbmltYXRpb25TdGFydDpsKCJhbmlt
YXRpb25zdGFydCIpfHwiYW5pbWF0aW9uc3RhcnQiLHRvcEJsdXI6ImJsdXIiLHRvcENhblBsYXk6
ImNhbnBsYXkiLHRvcENhblBsYXlUaHJvdWdoOiJjYW5wbGF5dGhyb3VnaCIsdG9wQ2hhbmdlOiJj
aGFuZ2UiLHRvcENsaWNrOiJjbGljayIsdG9wQ29tcG9zaXRpb25FbmQ6ImNvbXBvc2l0aW9uZW5k
Iix0b3BDb21wb3NpdGlvblN0YXJ0OiJjb21wb3NpdGlvbnN0YXJ0Iix0b3BDb21wb3NpdGlvblVw
ZGF0ZToiY29tcG9zaXRpb251cGRhdGUiLHRvcENvbnRleHRNZW51OiJjb250ZXh0bWVudSIsdG9w
Q29weToiY29weSIsdG9wQ3V0OiJjdXQiLHRvcERvdWJsZUNsaWNrOiJkYmxjbGljayIsdG9wRHJh
ZzoiZHJhZyIsdG9wRHJhZ0VuZDoiZHJhZ2VuZCIsdG9wRHJhZ0VudGVyOiJkcmFnZW50ZXIiLHRv
cERyYWdFeGl0OiJkcmFnZXhpdCIsdG9wRHJhZ0xlYXZlOiJkcmFnbGVhdmUiLHRvcERyYWdPdmVy
OiJkcmFnb3ZlciIsdG9wRHJhZ1N0YXJ0OiJkcmFnc3RhcnQiLHRvcERyb3A6ImRyb3AiLHRvcER1
cmF0aW9uQ2hhbmdlOiJkdXJhdGlvbmNoYW5nZSIsdG9wRW1wdGllZDoiZW1wdGllZCIsdG9wRW5j
cnlwdGVkOiJlbmNyeXB0ZWQiLHRvcEVuZGVkOiJlbmRlZCIsdG9wRXJyb3I6ImVycm9yIiwKK3Rv
cEZvY3VzOiJmb2N1cyIsdG9wSW5wdXQ6ImlucHV0Iix0b3BLZXlEb3duOiJrZXlkb3duIix0b3BL
ZXlQcmVzczoia2V5cHJlc3MiLHRvcEtleVVwOiJrZXl1cCIsdG9wTG9hZGVkRGF0YToibG9hZGVk
ZGF0YSIsdG9wTG9hZGVkTWV0YWRhdGE6ImxvYWRlZG1ldGFkYXRhIix0b3BMb2FkU3RhcnQ6Imxv
YWRzdGFydCIsdG9wTW91c2VEb3duOiJtb3VzZWRvd24iLHRvcE1vdXNlTW92ZToibW91c2Vtb3Zl
Iix0b3BNb3VzZU91dDoibW91c2VvdXQiLHRvcE1vdXNlT3ZlcjoibW91c2VvdmVyIix0b3BNb3Vz
ZVVwOiJtb3VzZXVwIix0b3BQYXN0ZToicGFzdGUiLHRvcFBhdXNlOiJwYXVzZSIsdG9wUGxheToi
cGxheSIsdG9wUGxheWluZzoicGxheWluZyIsdG9wUHJvZ3Jlc3M6InByb2dyZXNzIix0b3BSYXRl
Q2hhbmdlOiJyYXRlY2hhbmdlIix0b3BTY3JvbGw6InNjcm9sbCIsdG9wU2Vla2VkOiJzZWVrZWQi
LHRvcFNlZWtpbmc6InNlZWtpbmciLHRvcFNlbGVjdGlvbkNoYW5nZToic2VsZWN0aW9uY2hhbmdl
Iix0b3BTdGFsbGVkOiJzdGFsbGVkIix0b3BTdXNwZW5kOiJzdXNwZW5kIix0b3BUZXh0SW5wdXQ6
InRleHRJbnB1dCIsdG9wVGltZVVwZGF0ZToidGltZXVwZGF0ZSIsdG9wVG91Y2hDYW5jZWw6InRv
dWNoY2FuY2VsIix0b3BUb3VjaEVuZDoidG91Y2hlbmQiLHRvcFRvdWNoTW92ZToidG91Y2htb3Zl
Iix0b3BUb3VjaFN0YXJ0OiJ0b3VjaHN0YXJ0Iix0b3BUcmFuc2l0aW9uRW5kOmwoInRyYW5zaXRp
b25lbmQiKXx8InRyYW5zaXRpb25lbmQiLHRvcFZvbHVtZUNoYW5nZToidm9sdW1lY2hhbmdlIix0
b3BXYWl0aW5nOiJ3YWl0aW5nIix0b3BXaGVlbDoid2hlZWwifSxtPSJfcmVhY3RMaXN0ZW5lcnNJ
RCIrU3RyaW5nKE1hdGgucmFuZG9tKCkpLnNsaWNlKDIpLHY9aSh7fSxzLHtSZWFjdEV2ZW50TGlz
dGVuZXI6bnVsbCxpbmplY3Rpb246e2luamVjdFJlYWN0RXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihl
KXtlLnNldEhhbmRsZVRvcExldmVsKHYuaGFuZGxlVG9wTGV2ZWwpLHYuUmVhY3RFdmVudExpc3Rl
bmVyPWV9fSxzZXRFbmFibGVkOmZ1bmN0aW9uKGUpe3YuUmVhY3RFdmVudExpc3RlbmVyJiZ2LlJl
YWN0RXZlbnRMaXN0ZW5lci5zZXRFbmFibGVkKGUpfSxpc0VuYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1
cm4hKCF2LlJlYWN0RXZlbnRMaXN0ZW5lcnx8IXYuUmVhY3RFdmVudExpc3RlbmVyLmlzRW5hYmxl
ZCgpKX0sbGlzdGVuVG86ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dCxvPXIobiksaT1hLnJlZ2lz
dHJhdGlvbk5hbWVEZXBlbmRlbmNpZXNbZV0scz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgdT1pW3Nd
O28uaGFzT3duUHJvcGVydHkodSkmJm9bdV18fCgidG9wV2hlZWwiPT09dT9jKCJ3aGVlbCIpP3Yu
UmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQoInRvcFdoZWVsIiwid2hlZWwiLG4p
OmMoIm1vdXNld2hlZWwiKT92LlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2ZW50KCJ0
b3BXaGVlbCIsIm1vdXNld2hlZWwiLG4pOnYuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVk
RXZlbnQoInRvcFdoZWVsIiwiRE9NTW91c2VTY3JvbGwiLG4pOiJ0b3BTY3JvbGwiPT09dT9jKCJz
Y3JvbGwiLCEwKT92LlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQ2FwdHVyZWRFdmVudCgidG9wU2Ny
b2xsIiwic2Nyb2xsIixuKTp2LlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2ZW50KCJ0
b3BTY3JvbGwiLCJzY3JvbGwiLHYuUmVhY3RFdmVudExpc3RlbmVyLldJTkRPV19IQU5ETEUpOiJ0
b3BGb2N1cyI9PT11fHwidG9wQmx1ciI9PT11PyhjKCJmb2N1cyIsITApPyh2LlJlYWN0RXZlbnRM
aXN0ZW5lci50cmFwQ2FwdHVyZWRFdmVudCgidG9wRm9jdXMiLCJmb2N1cyIsbiksdi5SZWFjdEV2
ZW50TGlzdGVuZXIudHJhcENhcHR1cmVkRXZlbnQoInRvcEJsdXIiLCJibHVyIixuKSk6YygiZm9j
dXNpbiIpJiYodi5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudCgidG9wRm9jdXMi
LCJmb2N1c2luIixuKSx2LlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2ZW50KCJ0b3BC
bHVyIiwiZm9jdXNvdXQiLG4pKSxvLnRvcEJsdXI9ITAsby50b3BGb2N1cz0hMCk6aC5oYXNPd25Q
cm9wZXJ0eSh1KSYmdi5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudCh1LGhbdV0s
biksb1t1XT0hMCl9fSx0cmFwQnViYmxlZEV2ZW50OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdi5S
ZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudChlLHQsbil9LHRyYXBDYXB0dXJlZEV2
ZW50OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdi5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcENhcHR1
cmVkRXZlbnQoZSx0LG4pfSxzdXBwb3J0c0V2ZW50UGFnZVhZOmZ1bmN0aW9uKCl7aWYoIWRvY3Vt
ZW50LmNyZWF0ZUV2ZW50KXJldHVybiExO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJNb3Vz
ZUV2ZW50Iik7cmV0dXJuIG51bGwhPWUmJiJwYWdlWCJpbiBlfSxlbnN1cmVTY3JvbGxWYWx1ZU1v
bml0b3Jpbmc6ZnVuY3Rpb24oKXtpZih2b2lkIDA9PT1vJiYobz12LnN1cHBvcnRzRXZlbnRQYWdl
WFkoKSksIW8mJiFkKXt2YXIgZT11LnJlZnJlc2hTY3JvbGxWYWx1ZXM7di5SZWFjdEV2ZW50TGlz
dGVuZXIubW9uaXRvclNjcm9sbFZhbHVlKGUpLGQ9ITB9fX0pO3QuZXhwb3J0cz12fSx7MTA3OjEw
NywxMDk6MTA5LDE0MzoxNDMsMTc6MTcsNTE6NTEsOTA6OTB9XSwyNjpbZnVuY3Rpb24oZSx0LG4p
eyhmdW5jdGlvbihuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXt2YXIgbz12b2lk
IDA9PT1lW25dO251bGwhPXQmJm8mJihlW25dPWkodCwhMCkpfXZhciBvPWUoNjYpLGk9ZSgxMDgp
LGE9KGUoMjIpLGUoMTE2KSkscz1lKDExNyk7ZSgxNDIpO3ZvaWQgMCE9PW4mJm4uZW52O3ZhciB1
PXtpbnN0YW50aWF0ZUNoaWxkcmVuOmZ1bmN0aW9uKGUsdCxuLG8pe2lmKG51bGw9PWUpcmV0dXJu
IG51bGw7dmFyIGk9e307cmV0dXJuIHMoZSxyLGkpLGl9LHVwZGF0ZUNoaWxkcmVuOmZ1bmN0aW9u
KGUsdCxuLHIscyx1LGwsYyxwKXtpZih0fHxlKXt2YXIgZCxmO2ZvcihkIGluIHQpaWYodC5oYXNP
d25Qcm9wZXJ0eShkKSl7Zj1lJiZlW2RdO3ZhciBoPWYmJmYuX2N1cnJlbnRFbGVtZW50LG09dFtk
XTtpZihudWxsIT1mJiZhKGgsbSkpby5yZWNlaXZlQ29tcG9uZW50KGYsbSxzLGMpLHRbZF09Zjtl
bHNle2YmJihyW2RdPW8uZ2V0SG9zdE5vZGUoZiksby51bm1vdW50Q29tcG9uZW50KGYsITEpKTt2
YXIgdj1pKG0sITApO3RbZF09djt2YXIgZz1vLm1vdW50Q29tcG9uZW50KHYscyx1LGwsYyxwKTtu
LnB1c2goZyl9fWZvcihkIGluIGUpIWUuaGFzT3duUHJvcGVydHkoZCl8fHQmJnQuaGFzT3duUHJv
cGVydHkoZCl8fChmPWVbZF0scltkXT1vLmdldEhvc3ROb2RlKGYpLG8udW5tb3VudENvbXBvbmVu
dChmLCExKSl9fSx1bm1vdW50Q2hpbGRyZW46ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlp
ZihlLmhhc093blByb3BlcnR5KG4pKXt2YXIgcj1lW25dO28udW5tb3VudENvbXBvbmVudChyLHQp
fX19O3QuZXhwb3J0cz11fSkuY2FsbCh0aGlzLHZvaWQgMCl9LHsxMDg6MTA4LDExNjoxMTYsMTE3
OjExNywxNDI6MTQyLDIyOjIyLDY2OjY2fV0sMjc6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmlj
dCI7dmFyIHI9ZSg4KSxvPWUoMzcpLGk9e3Byb2Nlc3NDaGlsZHJlblVwZGF0ZXM6by5kYW5nZXJv
dXNseVByb2Nlc3NDaGlsZHJlblVwZGF0ZXMscmVwbGFjZU5vZGVXaXRoTWFya3VwOnIuZGFuZ2Vy
b3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXB9O3QuZXhwb3J0cz1pfSx7Mzc6MzcsODo4fV0sMjg6
W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgxMTIpLG89KGUoMTM3KSwhMSks
aT17cmVwbGFjZU5vZGVXaXRoTWFya3VwOm51bGwscHJvY2Vzc0NoaWxkcmVuVXBkYXRlczpudWxs
LGluamVjdGlvbjp7aW5qZWN0RW52aXJvbm1lbnQ6ZnVuY3Rpb24oZSl7byYmcigiMTA0IiksaS5y
ZXBsYWNlTm9kZVdpdGhNYXJrdXA9ZS5yZXBsYWNlTm9kZVdpdGhNYXJrdXAsaS5wcm9jZXNzQ2hp
bGRyZW5VcGRhdGVzPWUucHJvY2Vzc0NoaWxkcmVuVXBkYXRlcyxvPSEwfX19O3QuZXhwb3J0cz1p
fSx7MTEyOjExMiwxMzc6MTM3fV0sMjk6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVu
Y3Rpb24gcihlKXt9ZnVuY3Rpb24gbyhlKXtyZXR1cm4hKCFlLnByb3RvdHlwZXx8IWUucHJvdG90
eXBlLmlzUmVhY3RDb21wb25lbnQpfWZ1bmN0aW9uIGkoZSl7cmV0dXJuISghZS5wcm90b3R5cGV8
fCFlLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCl9dmFyIGE9ZSgxMTIpLHM9ZSgxNDMp
LHU9ZSgxMjApLGw9ZSgyOCksYz1lKDExOSkscD1lKDUwKSxkPWUoNTcpLGY9KGUoNTgpLGUoNjIp
KSxoPWUoNjYpLG09ZSgxMzApLHY9KGUoMTM3KSxlKDE0MSkpLGc9ZSgxMTYpLHk9KGUoMTQyKSx7
SW1wdXJlQ2xhc3M6MCxQdXJlQ2xhc3M6MSxTdGF0ZWxlc3NGdW5jdGlvbmFsOjJ9KTtyLnByb3Rv
dHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT1kLmdldCh0aGlzKS5fY3VycmVudEVsZW1lbnQu
dHlwZSx0PWUodGhpcy5wcm9wcyx0aGlzLmNvbnRleHQsdGhpcy51cGRhdGVyKTtyZXR1cm4gdH07
dmFyIF89MSxDPXtjb25zdHJ1Y3Q6ZnVuY3Rpb24oZSl7dGhpcy5fY3VycmVudEVsZW1lbnQ9ZSx0
aGlzLl9yb290Tm9kZUlEPTAsdGhpcy5fY29tcG9zaXRlVHlwZT1udWxsLHRoaXMuX2luc3RhbmNl
PW51bGwsdGhpcy5faG9zdFBhcmVudD1udWxsLHRoaXMuX2hvc3RDb250YWluZXJJbmZvPW51bGws
dGhpcy5fdXBkYXRlQmF0Y2hOdW1iZXI9bnVsbCx0aGlzLl9wZW5kaW5nRWxlbWVudD1udWxsLHRo
aXMuX3BlbmRpbmdTdGF0ZVF1ZXVlPW51bGwsdGhpcy5fcGVuZGluZ1JlcGxhY2VTdGF0ZT0hMSx0
aGlzLl9wZW5kaW5nRm9yY2VVcGRhdGU9ITEsdGhpcy5fcmVuZGVyZWROb2RlVHlwZT1udWxsLHRo
aXMuX3JlbmRlcmVkQ29tcG9uZW50PW51bGwsdGhpcy5fY29udGV4dD1udWxsLHRoaXMuX21vdW50
T3JkZXI9MCx0aGlzLl90b3BMZXZlbFdyYXBwZXI9bnVsbCx0aGlzLl9wZW5kaW5nQ2FsbGJhY2tz
PW51bGwsdGhpcy5fY2FsbGVkQ29tcG9uZW50V2lsbFVubW91bnQ9ITF9LG1vdW50Q29tcG9uZW50
OmZ1bmN0aW9uKGUsdCxuLHMpe3RoaXMuX2NvbnRleHQ9cyx0aGlzLl9tb3VudE9yZGVyPV8rKyx0
aGlzLl9ob3N0UGFyZW50PXQsdGhpcy5faG9zdENvbnRhaW5lckluZm89bjt2YXIgbCxjPXRoaXMu
X2N1cnJlbnRFbGVtZW50LnByb3BzLHA9dGhpcy5fcHJvY2Vzc0NvbnRleHQocyksZj10aGlzLl9j
dXJyZW50RWxlbWVudC50eXBlLGg9ZS5nZXRVcGRhdGVRdWV1ZSgpLHY9byhmKSxnPXRoaXMuX2Nv
bnN0cnVjdENvbXBvbmVudCh2LGMscCxoKTt2fHxudWxsIT1nJiZudWxsIT1nLnJlbmRlcj9pKGYp
P3RoaXMuX2NvbXBvc2l0ZVR5cGU9eS5QdXJlQ2xhc3M6dGhpcy5fY29tcG9zaXRlVHlwZT15Lklt
cHVyZUNsYXNzOihsPWcsbnVsbD09PWd8fCExPT09Z3x8dS5pc1ZhbGlkRWxlbWVudChnKXx8YSgi
MTA1IixmLmRpc3BsYXlOYW1lfHxmLm5hbWV8fCJDb21wb25lbnQiKSxnPW5ldyByKGYpLHRoaXMu
X2NvbXBvc2l0ZVR5cGU9eS5TdGF0ZWxlc3NGdW5jdGlvbmFsKSxnLnByb3BzPWMsZy5jb250ZXh0
PXAsZy5yZWZzPW0sZy51cGRhdGVyPWgsdGhpcy5faW5zdGFuY2U9ZyxkLnNldChnLHRoaXMpO3Zh
ciBDPWcuc3RhdGU7dm9pZCAwPT09QyYmKGcuc3RhdGU9Qz1udWxsKSwoIm9iamVjdCIhPXR5cGVv
ZiBDfHxBcnJheS5pc0FycmF5KEMpKSYmYSgiMTA2Iix0aGlzLmdldE5hbWUoKXx8IlJlYWN0Q29t
cG9zaXRlQ29tcG9uZW50IiksdGhpcy5fcGVuZGluZ1N0YXRlUXVldWU9bnVsbCx0aGlzLl9wZW5k
aW5nUmVwbGFjZVN0YXRlPSExLHRoaXMuX3BlbmRpbmdGb3JjZVVwZGF0ZT0hMTt2YXIgYjtyZXR1
cm4gYj1nLnVuc3RhYmxlX2hhbmRsZUVycm9yP3RoaXMucGVyZm9ybUluaXRpYWxNb3VudFdpdGhF
cnJvckhhbmRsaW5nKGwsdCxuLGUscyk6dGhpcy5wZXJmb3JtSW5pdGlhbE1vdW50KGwsdCxuLGUs
cyksZy5jb21wb25lbnREaWRNb3VudCYmZS5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGcu
Y29tcG9uZW50RGlkTW91bnQsZyksYn0sX2NvbnN0cnVjdENvbXBvbmVudDpmdW5jdGlvbihlLHQs
bixyKXtyZXR1cm4gdGhpcy5fY29uc3RydWN0Q29tcG9uZW50V2l0aG91dE93bmVyKGUsdCxuLHIp
fSxfY29uc3RydWN0Q29tcG9uZW50V2l0aG91dE93bmVyOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBv
PXRoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGU7cmV0dXJuIGU/bmV3IG8odCxuLHIpOm8odCxuLHIp
fSxwZXJmb3JtSW5pdGlhbE1vdW50V2l0aEVycm9ySGFuZGxpbmc6ZnVuY3Rpb24oZSx0LG4scixv
KXt2YXIgaSxhPXIuY2hlY2twb2ludCgpO3RyeXtpPXRoaXMucGVyZm9ybUluaXRpYWxNb3VudChl
LHQsbixyLG8pfWNhdGNoKHMpe3Iucm9sbGJhY2soYSksdGhpcy5faW5zdGFuY2UudW5zdGFibGVf
aGFuZGxlRXJyb3IocyksdGhpcy5fcGVuZGluZ1N0YXRlUXVldWUmJih0aGlzLl9pbnN0YW5jZS5z
dGF0ZT10aGlzLl9wcm9jZXNzUGVuZGluZ1N0YXRlKHRoaXMuX2luc3RhbmNlLnByb3BzLHRoaXMu
X2luc3RhbmNlLmNvbnRleHQpKSxhPXIuY2hlY2twb2ludCgpLHRoaXMuX3JlbmRlcmVkQ29tcG9u
ZW50LnVubW91bnRDb21wb25lbnQoITApLHIucm9sbGJhY2soYSksaT10aGlzLnBlcmZvcm1Jbml0
aWFsTW91bnQoZSx0LG4scixvKX1yZXR1cm4gaX0scGVyZm9ybUluaXRpYWxNb3VudDpmdW5jdGlv
bihlLHQsbixyLG8pe3ZhciBpPXRoaXMuX2luc3RhbmNlO2kuY29tcG9uZW50V2lsbE1vdW50JiYo
aS5jb21wb25lbnRXaWxsTW91bnQoKSx0aGlzLl9wZW5kaW5nU3RhdGVRdWV1ZSYmKGkuc3RhdGU9
dGhpcy5fcHJvY2Vzc1BlbmRpbmdTdGF0ZShpLnByb3BzLGkuY29udGV4dCkpKSx2b2lkIDA9PT1l
JiYoZT10aGlzLl9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQoKSk7dmFyIGE9Zi5nZXRUeXBlKGUp
O3RoaXMuX3JlbmRlcmVkTm9kZVR5cGU9YTt2YXIgcz10aGlzLl9pbnN0YW50aWF0ZVJlYWN0Q29t
cG9uZW50KGUsYSE9PWYuRU1QVFkpO3JldHVybiB0aGlzLl9yZW5kZXJlZENvbXBvbmVudD1zLGgu
bW91bnRDb21wb25lbnQocyxyLHQsbix0aGlzLl9wcm9jZXNzQ2hpbGRDb250ZXh0KG8pLDApfSxn
ZXRIb3N0Tm9kZTpmdW5jdGlvbigpe3JldHVybiBoLmdldEhvc3ROb2RlKHRoaXMuX3JlbmRlcmVk
Q29tcG9uZW50KX0sdW5tb3VudENvbXBvbmVudDpmdW5jdGlvbihlKXtpZih0aGlzLl9yZW5kZXJl
ZENvbXBvbmVudCl7dmFyIHQ9dGhpcy5faW5zdGFuY2U7aWYodC5jb21wb25lbnRXaWxsVW5tb3Vu
dCYmIXQuX2NhbGxlZENvbXBvbmVudFdpbGxVbm1vdW50KWlmKHQuX2NhbGxlZENvbXBvbmVudFdp
bGxVbm1vdW50PSEwLGUpe3ZhciBuPXRoaXMuZ2V0TmFtZSgpKyIuY29tcG9uZW50V2lsbFVubW91
bnQoKSI7cC5pbnZva2VHdWFyZGVkQ2FsbGJhY2sobix0LmNvbXBvbmVudFdpbGxVbm1vdW50LmJp
bmQodCkpfWVsc2UgdC5jb21wb25lbnRXaWxsVW5tb3VudCgpO3RoaXMuX3JlbmRlcmVkQ29tcG9u
ZW50JiYoaC51bm1vdW50Q29tcG9uZW50KHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50LGUpLHRoaXMu
X3JlbmRlcmVkTm9kZVR5cGU9bnVsbCx0aGlzLl9yZW5kZXJlZENvbXBvbmVudD1udWxsLHRoaXMu
X2luc3RhbmNlPW51bGwpLHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlPW51bGwsdGhpcy5fcGVuZGlu
Z1JlcGxhY2VTdGF0ZT0hMSx0aGlzLl9wZW5kaW5nRm9yY2VVcGRhdGU9ITEsdGhpcy5fcGVuZGlu
Z0NhbGxiYWNrcz1udWxsLHRoaXMuX3BlbmRpbmdFbGVtZW50PW51bGwsdGhpcy5fY29udGV4dD1u
dWxsLHRoaXMuX3Jvb3ROb2RlSUQ9MCx0aGlzLl90b3BMZXZlbFdyYXBwZXI9bnVsbCxkLnJlbW92
ZSh0KX19LF9tYXNrQ29udGV4dDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9jdXJyZW50RWxlbWVu
dC50eXBlLG49dC5jb250ZXh0VHlwZXM7aWYoIW4pcmV0dXJuIG07dmFyIHI9e307Zm9yKHZhciBv
IGluIG4pcltvXT1lW29dO3JldHVybiByfSxfcHJvY2Vzc0NvbnRleHQ6ZnVuY3Rpb24oZSl7cmV0
dXJuIHRoaXMuX21hc2tDb250ZXh0KGUpfSxfcHJvY2Vzc0NoaWxkQ29udGV4dDpmdW5jdGlvbihl
KXt2YXIgdCxuPXRoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGUscj10aGlzLl9pbnN0YW5jZTtpZihy
LmdldENoaWxkQ29udGV4dCYmKHQ9ci5nZXRDaGlsZENvbnRleHQoKSksdCl7Im9iamVjdCIhPXR5
cGVvZiBuLmNoaWxkQ29udGV4dFR5cGVzJiZhKCIxMDciLHRoaXMuZ2V0TmFtZSgpfHwiUmVhY3RD
b21wb3NpdGVDb21wb25lbnQiKTtmb3IodmFyIG8gaW4gdClvIGluIG4uY2hpbGRDb250ZXh0VHlw
ZXN8fGEoIjEwOCIsdGhpcy5nZXROYW1lKCl8fCJSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCIsbyk7
cmV0dXJuIHMoe30sZSx0KX1yZXR1cm4gZX0sX2NoZWNrQ29udGV4dFR5cGVzOmZ1bmN0aW9uKGUs
dCxuKXt9LHJlY2VpdmVDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuX2N1cnJl
bnRFbGVtZW50LG89dGhpcy5fY29udGV4dDt0aGlzLl9wZW5kaW5nRWxlbWVudD1udWxsLHRoaXMu
dXBkYXRlQ29tcG9uZW50KHQscixlLG8sbil9LHBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeTpmdW5j
dGlvbihlKXtudWxsIT10aGlzLl9wZW5kaW5nRWxlbWVudD9oLnJlY2VpdmVDb21wb25lbnQodGhp
cyx0aGlzLl9wZW5kaW5nRWxlbWVudCxlLHRoaXMuX2NvbnRleHQpOm51bGwhPT10aGlzLl9wZW5k
aW5nU3RhdGVRdWV1ZXx8dGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlP3RoaXMudXBkYXRlQ29tcG9u
ZW50KGUsdGhpcy5fY3VycmVudEVsZW1lbnQsdGhpcy5fY3VycmVudEVsZW1lbnQsdGhpcy5fY29u
dGV4dCx0aGlzLl9jb250ZXh0KTp0aGlzLl91cGRhdGVCYXRjaE51bWJlcj1udWxsfSx1cGRhdGVD
b21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4scixvKXt2YXIgaT10aGlzLl9pbnN0YW5jZTtudWxsPT1p
JiZhKCIxMzYiLHRoaXMuZ2V0TmFtZSgpfHwiUmVhY3RDb21wb3NpdGVDb21wb25lbnQiKTt2YXIg
cyx1PSExO3RoaXMuX2NvbnRleHQ9PT1vP3M9aS5jb250ZXh0OihzPXRoaXMuX3Byb2Nlc3NDb250
ZXh0KG8pLHU9ITApO3ZhciBsPXQucHJvcHMsYz1uLnByb3BzO3QhPT1uJiYodT0hMCksdSYmaS5j
b21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZpLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoYyxz
KTt2YXIgcD10aGlzLl9wcm9jZXNzUGVuZGluZ1N0YXRlKGMscyksZD0hMDt0aGlzLl9wZW5kaW5n
Rm9yY2VVcGRhdGV8fChpLnNob3VsZENvbXBvbmVudFVwZGF0ZT9kPWkuc2hvdWxkQ29tcG9uZW50
VXBkYXRlKGMscCxzKTp0aGlzLl9jb21wb3NpdGVUeXBlPT09eS5QdXJlQ2xhc3MmJihkPSF2KGws
Yyl8fCF2KGkuc3RhdGUscCkpKSx0aGlzLl91cGRhdGVCYXRjaE51bWJlcj1udWxsLGQ/KHRoaXMu
X3BlbmRpbmdGb3JjZVVwZGF0ZT0hMSx0aGlzLl9wZXJmb3JtQ29tcG9uZW50VXBkYXRlKG4sYyxw
LHMsZSxvKSk6KHRoaXMuX2N1cnJlbnRFbGVtZW50PW4sdGhpcy5fY29udGV4dD1vLGkucHJvcHM9
YyxpLnN0YXRlPXAsaS5jb250ZXh0PXMpfSxfcHJvY2Vzc1BlbmRpbmdTdGF0ZTpmdW5jdGlvbihl
LHQpe3ZhciBuPXRoaXMuX2luc3RhbmNlLHI9dGhpcy5fcGVuZGluZ1N0YXRlUXVldWUsbz10aGlz
Ll9wZW5kaW5nUmVwbGFjZVN0YXRlO2lmKHRoaXMuX3BlbmRpbmdSZXBsYWNlU3RhdGU9ITEsdGhp
cy5fcGVuZGluZ1N0YXRlUXVldWU9bnVsbCwhcilyZXR1cm4gbi5zdGF0ZTtpZihvJiYxPT09ci5s
ZW5ndGgpcmV0dXJuIHJbMF07Zm9yKHZhciBpPXMoe30sbz9yWzBdOm4uc3RhdGUpLGE9bz8xOjA7
YTxyLmxlbmd0aDthKyspe3ZhciB1PXJbYV07cyhpLCJmdW5jdGlvbiI9PXR5cGVvZiB1P3UuY2Fs
bChuLGksZSx0KTp1KX1yZXR1cm4gaX0sX3BlcmZvcm1Db21wb25lbnRVcGRhdGU6ZnVuY3Rpb24o
ZSx0LG4scixvLGkpe3ZhciBhLHMsdSxsPXRoaXMuX2luc3RhbmNlLGM9Qm9vbGVhbihsLmNvbXBv
bmVudERpZFVwZGF0ZSk7YyYmKGE9bC5wcm9wcyxzPWwuc3RhdGUsdT1sLmNvbnRleHQpLGwuY29t
cG9uZW50V2lsbFVwZGF0ZSYmbC5jb21wb25lbnRXaWxsVXBkYXRlKHQsbixyKSx0aGlzLl9jdXJy
ZW50RWxlbWVudD1lLHRoaXMuX2NvbnRleHQ9aSxsLnByb3BzPXQsbC5zdGF0ZT1uLGwuY29udGV4
dD1yLHRoaXMuX3VwZGF0ZVJlbmRlcmVkQ29tcG9uZW50KG8saSksYyYmby5nZXRSZWFjdE1vdW50
UmVhZHkoKS5lbnF1ZXVlKGwuY29tcG9uZW50RGlkVXBkYXRlLmJpbmQobCxhLHMsdSksbCl9LF91
cGRhdGVSZW5kZXJlZENvbXBvbmVudDpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX3JlbmRlcmVk
Q29tcG9uZW50LHI9bi5fY3VycmVudEVsZW1lbnQsbz10aGlzLl9yZW5kZXJWYWxpZGF0ZWRDb21w
b25lbnQoKTtpZihnKHIsbykpaC5yZWNlaXZlQ29tcG9uZW50KG4sbyxlLHRoaXMuX3Byb2Nlc3ND
aGlsZENvbnRleHQodCkpO2Vsc2V7dmFyIGk9aC5nZXRIb3N0Tm9kZShuKTtoLnVubW91bnRDb21w
b25lbnQobiwhMSk7dmFyIGE9Zi5nZXRUeXBlKG8pO3RoaXMuX3JlbmRlcmVkTm9kZVR5cGU9YTt2
YXIgcz10aGlzLl9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50KG8sYSE9PWYuRU1QVFkpO3RoaXMu
X3JlbmRlcmVkQ29tcG9uZW50PXM7dmFyIHU9aC5tb3VudENvbXBvbmVudChzLGUsdGhpcy5faG9z
dFBhcmVudCx0aGlzLl9ob3N0Q29udGFpbmVySW5mbyx0aGlzLl9wcm9jZXNzQ2hpbGRDb250ZXh0
KHQpLDApO3RoaXMuX3JlcGxhY2VOb2RlV2l0aE1hcmt1cChpLHUsbil9fSxfcmVwbGFjZU5vZGVX
aXRoTWFya3VwOmZ1bmN0aW9uKGUsdCxuKXtsLnJlcGxhY2VOb2RlV2l0aE1hcmt1cChlLHQsbil9
LF9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnRXaXRob3V0T3duZXJPckNvbnRleHQ6ZnVuY3Rpb24o
KXtyZXR1cm4gdGhpcy5faW5zdGFuY2UucmVuZGVyKCl9LF9yZW5kZXJWYWxpZGF0ZWRDb21wb25l
bnQ6ZnVuY3Rpb24oKXt2YXIgZTtpZih0aGlzLl9jb21wb3NpdGVUeXBlIT09eS5TdGF0ZWxlc3NG
dW5jdGlvbmFsKXtjLmN1cnJlbnQ9dGhpczt0cnl7ZT10aGlzLl9yZW5kZXJWYWxpZGF0ZWRDb21w
b25lbnRXaXRob3V0T3duZXJPckNvbnRleHQoKX1maW5hbGx5e2MuY3VycmVudD1udWxsfX1lbHNl
IGU9dGhpcy5fcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50V2l0aG91dE93bmVyT3JDb250ZXh0KCk7
cmV0dXJuIG51bGw9PT1lfHwhMT09PWV8fHUuaXNWYWxpZEVsZW1lbnQoZSl8fGEoIjEwOSIsdGhp
cy5nZXROYW1lKCl8fCJSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCIpLGV9LGF0dGFjaFJlZjpmdW5j
dGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0UHVibGljSW5zdGFuY2UoKTtudWxsPT1uJiZhKCIxMTAi
KTt2YXIgcj10LmdldFB1YmxpY0luc3RhbmNlKCk7KG4ucmVmcz09PW0/bi5yZWZzPXt9Om4ucmVm
cylbZV09cn0sZGV0YWNoUmVmOmZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLmdldFB1YmxpY0luc3Rh
bmNlKCkucmVmc1tlXX0sZ2V0TmFtZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2N1cnJlbnRFbGVt
ZW50LnR5cGUsdD10aGlzLl9pbnN0YW5jZSYmdGhpcy5faW5zdGFuY2UuY29uc3RydWN0b3I7cmV0
dXJuIGUuZGlzcGxheU5hbWV8fHQmJnQuZGlzcGxheU5hbWV8fGUubmFtZXx8dCYmdC5uYW1lfHxu
dWxsfSxnZXRQdWJsaWNJbnN0YW5jZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2luc3RhbmNlO3Jl
dHVybiB0aGlzLl9jb21wb3NpdGVUeXBlPT09eS5TdGF0ZWxlc3NGdW5jdGlvbmFsP251bGw6ZX0s
X2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnQ6bnVsbH07dC5leHBvcnRzPUN9LHsxMTI6MTEyLDEx
NjoxMTYsMTE5OjExOSwxMjA6MTIwLDEzMDoxMzAsMTM3OjEzNywxNDE6MTQxLDE0MjoxNDIsMTQz
OjE0MywyODoyOCw1MDo1MCw1Nzo1Nyw1ODo1OCw2Mjo2Miw2Njo2Nn1dLDMwOltmdW5jdGlvbihl
LHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMzMpLG89ZSg0NyksaT1lKDYwKSxhPWUoNjYpLHM9
ZSg3MSksdT1lKDcyKSxsPWUoOTYpLGM9ZSgxMDMpLHA9ZSgxMTMpO2UoMTQyKTtvLmluamVjdCgp
O3ZhciBkPXtmaW5kRE9NTm9kZTpsLHJlbmRlcjppLnJlbmRlcix1bm1vdW50Q29tcG9uZW50QXRO
b2RlOmkudW5tb3VudENvbXBvbmVudEF0Tm9kZSx2ZXJzaW9uOnUsdW5zdGFibGVfYmF0Y2hlZFVw
ZGF0ZXM6cy5iYXRjaGVkVXBkYXRlcyx1bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5l
cjpwfTsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyYm
ImZ1bmN0aW9uIj09dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5pbmplY3Qm
Jl9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5pbmplY3Qoe0NvbXBvbmVudFRyZWU6e2dl
dENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlOnIuZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUsZ2V0
Tm9kZUZyb21JbnN0YW5jZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fcmVuZGVyZWRDb21wb25lbnQm
JihlPWMoZSkpLGU/ci5nZXROb2RlRnJvbUluc3RhbmNlKGUpOm51bGx9fSxNb3VudDppLFJlY29u
Y2lsZXI6YX0pO3QuZXhwb3J0cz1kfSx7MTAzOjEwMywxMTM6MTEzLDE0MjoxNDIsMzM6MzMsNDc6
NDcsNjA6NjAsNjY6NjYsNzE6NzEsNzI6NzIsOTY6OTZ9XSwzMTpbZnVuY3Rpb24oZSx0LG4peyJ1
c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKGUpe3ZhciB0PWUuX2N1cnJlbnRFbGVtZW50Ll9v
d25lcnx8bnVsbDtpZih0KXt2YXIgbj10LmdldE5hbWUoKTtpZihuKXJldHVybiIgVGhpcyBET00g
bm9kZSB3YXMgcmVuZGVyZWQgYnkgYCIrbisiYC4ifX1yZXR1cm4iIn1mdW5jdGlvbiBvKGUsdCl7
dCYmKFlbZS5fdGFnXSYmKG51bGwhPXQuY2hpbGRyZW58fG51bGwhPXQuZGFuZ2Vyb3VzbHlTZXRJ
bm5lckhUTUwpJiZtKCIxMzciLGUuX3RhZyxlLl9jdXJyZW50RWxlbWVudC5fb3duZXI/IiBDaGVj
ayB0aGUgcmVuZGVyIG1ldGhvZCBvZiAiK2UuX2N1cnJlbnRFbGVtZW50Ll9vd25lci5nZXROYW1l
KCkrIi4iOiIiKSxudWxsIT10LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MJiYobnVsbCE9dC5jaGls
ZHJlbiYmbSgiNjAiKSwib2JqZWN0Ij09dHlwZW9mIHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwm
JkIgaW4gdC5kYW5nZXJvdXNseVNldElubmVySFRNTHx8bSgiNjEiKSksbnVsbCE9dC5zdHlsZSYm
Im9iamVjdCIhPXR5cGVvZiB0LnN0eWxlJiZtKCI2MiIscihlKSkpfWZ1bmN0aW9uIGkoZSx0LG4s
cil7aWYoIShyIGluc3RhbmNlb2YgUikpe3ZhciBvPWUuX2hvc3RDb250YWluZXJJbmZvLGk9by5f
bm9kZSYmby5fbm9kZS5ub2RlVHlwZT09PUgscz1pP28uX25vZGU6by5fb3duZXJEb2N1bWVudDtG
KHQscyksci5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGEse2luc3Q6ZSxyZWdpc3RyYXRp
b25OYW1lOnQsbGlzdGVuZXI6bn0pfX1mdW5jdGlvbiBhKCl7dmFyIGU9dGhpczt4LnB1dExpc3Rl
bmVyKGUuaW5zdCxlLnJlZ2lzdHJhdGlvbk5hbWUsZS5saXN0ZW5lcil9ZnVuY3Rpb24gcygpe3Zh
ciBlPXRoaXM7Uy5wb3N0TW91bnRXcmFwcGVyKGUpfWZ1bmN0aW9uIHUoKXt2YXIgZT10aGlzO0ku
cG9zdE1vdW50V3JhcHBlcihlKX1mdW5jdGlvbiBsKCl7dmFyIGU9dGhpcztOLnBvc3RNb3VudFdy
YXBwZXIoZSl9ZnVuY3Rpb24gYygpe3ZhciBlPXRoaXM7ZS5fcm9vdE5vZGVJRHx8bSgiNjMiKTt2
YXIgdD1VKGUpO3N3aXRjaCh0fHxtKCI2NCIpLGUuX3RhZyl7Y2FzZSJpZnJhbWUiOmNhc2Uib2Jq
ZWN0IjplLl93cmFwcGVyU3RhdGUubGlzdGVuZXJzPVtULnRyYXBCdWJibGVkRXZlbnQoInRvcExv
YWQiLCJsb2FkIix0KV07YnJlYWs7Y2FzZSJ2aWRlbyI6Y2FzZSJhdWRpbyI6ZS5fd3JhcHBlclN0
YXRlLmxpc3RlbmVycz1bXTtmb3IodmFyIG4gaW4gcSlxLmhhc093blByb3BlcnR5KG4pJiZlLl93
cmFwcGVyU3RhdGUubGlzdGVuZXJzLnB1c2goVC50cmFwQnViYmxlZEV2ZW50KG4scVtuXSx0KSk7
YnJlYWs7Y2FzZSJzb3VyY2UiOmUuX3dyYXBwZXJTdGF0ZS5saXN0ZW5lcnM9W1QudHJhcEJ1YmJs
ZWRFdmVudCgidG9wRXJyb3IiLCJlcnJvciIsdCldO2JyZWFrO2Nhc2UiaW1nIjplLl93cmFwcGVy
U3RhdGUubGlzdGVuZXJzPVtULnRyYXBCdWJibGVkRXZlbnQoInRvcEVycm9yIiwiZXJyb3IiLHQp
LFQudHJhcEJ1YmJsZWRFdmVudCgidG9wTG9hZCIsImxvYWQiLHQpXTticmVhaztjYXNlImZvcm0i
OmUuX3dyYXBwZXJTdGF0ZS5saXN0ZW5lcnM9W1QudHJhcEJ1YmJsZWRFdmVudCgidG9wUmVzZXQi
LCJyZXNldCIsdCksVC50cmFwQnViYmxlZEV2ZW50KCJ0b3BTdWJtaXQiLCJzdWJtaXQiLHQpXTti
cmVhaztjYXNlImlucHV0IjpjYXNlInNlbGVjdCI6Y2FzZSJ0ZXh0YXJlYSI6ZS5fd3JhcHBlclN0
YXRlLmxpc3RlbmVycz1bVC50cmFwQnViYmxlZEV2ZW50KCJ0b3BJbnZhbGlkIiwiaW52YWxpZCIs
dCldfX1mdW5jdGlvbiBwKCl7TS5wb3N0VXBkYXRlV3JhcHBlcih0aGlzKX1mdW5jdGlvbiBkKGUp
e0cuY2FsbChRLGUpfHwoWC50ZXN0KGUpfHxtKCI2NSIsZSksUVtlXT0hMCl9ZnVuY3Rpb24gZihl
LHQpe3JldHVybiBlLmluZGV4T2YoIi0iKT49MHx8bnVsbCE9dC5pc31mdW5jdGlvbiBoKGUpe3Zh
ciB0PWUudHlwZTtkKHQpLHRoaXMuX2N1cnJlbnRFbGVtZW50PWUsdGhpcy5fdGFnPXQudG9Mb3dl
ckNhc2UoKSx0aGlzLl9uYW1lc3BhY2VVUkk9bnVsbCx0aGlzLl9yZW5kZXJlZENoaWxkcmVuPW51
bGwsdGhpcy5fcHJldmlvdXNTdHlsZT1udWxsLHRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5PW51bGws
dGhpcy5faG9zdE5vZGU9bnVsbCx0aGlzLl9ob3N0UGFyZW50PW51bGwsdGhpcy5fcm9vdE5vZGVJ
RD0wLHRoaXMuX2RvbUlEPTAsdGhpcy5faG9zdENvbnRhaW5lckluZm89bnVsbCx0aGlzLl93cmFw
cGVyU3RhdGU9bnVsbCx0aGlzLl90b3BMZXZlbFdyYXBwZXI9bnVsbCx0aGlzLl9mbGFncz0wfXZh
ciBtPWUoMTEyKSx2PWUoMTQzKSxnPWUoMikseT1lKDUpLF89ZSg5KSxDPWUoMTApLGI9ZSgxMSks
RT1lKDEyKSx4PWUoMTYpLHc9ZSgxNyksVD1lKDI1KSxrPWUoMzIpLFA9ZSgzMyksUz1lKDM4KSxO
PWUoMzkpLE09ZSg0MCksST1lKDQzKSxPPShlKDU4KSxlKDYxKSksUj1lKDY4KSxBPShlKDEyOSks
ZSg5NSkpLEQ9KGUoMTM3KSxlKDEwOSksZSgxNDEpLGUoMTE4KSxlKDE0MiksayksTD14LmRlbGV0
ZUxpc3RlbmVyLFU9UC5nZXROb2RlRnJvbUluc3RhbmNlLEY9VC5saXN0ZW5UbyxqPXcucmVnaXN0
cmF0aW9uTmFtZU1vZHVsZXMsVj17c3RyaW5nOiEwLG51bWJlcjohMH0sQj0iX19odG1sIixXPXtj
aGlsZHJlbjpudWxsLGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOm51bGwsc3VwcHJlc3NDb250ZW50
RWRpdGFibGVXYXJuaW5nOm51bGx9LEg9MTEscT17dG9wQWJvcnQ6ImFib3J0Iix0b3BDYW5QbGF5
OiJjYW5wbGF5Iix0b3BDYW5QbGF5VGhyb3VnaDoiY2FucGxheXRocm91Z2giLHRvcER1cmF0aW9u
Q2hhbmdlOiJkdXJhdGlvbmNoYW5nZSIsdG9wRW1wdGllZDoiZW1wdGllZCIsdG9wRW5jcnlwdGVk
OiJlbmNyeXB0ZWQiLHRvcEVuZGVkOiJlbmRlZCIsdG9wRXJyb3I6ImVycm9yIix0b3BMb2FkZWRE
YXRhOiJsb2FkZWRkYXRhIix0b3BMb2FkZWRNZXRhZGF0YToibG9hZGVkbWV0YWRhdGEiLHRvcExv
YWRTdGFydDoibG9hZHN0YXJ0Iix0b3BQYXVzZToicGF1c2UiLHRvcFBsYXk6InBsYXkiLHRvcFBs
YXlpbmc6InBsYXlpbmciLHRvcFByb2dyZXNzOiJwcm9ncmVzcyIsdG9wUmF0ZUNoYW5nZToicmF0
ZWNoYW5nZSIsdG9wU2Vla2VkOiJzZWVrZWQiLHRvcFNlZWtpbmc6InNlZWtpbmciLHRvcFN0YWxs
ZWQ6InN0YWxsZWQiLHRvcFN1c3BlbmQ6InN1c3BlbmQiLHRvcFRpbWVVcGRhdGU6InRpbWV1cGRh
dGUiLHRvcFZvbHVtZUNoYW5nZToidm9sdW1lY2hhbmdlIix0b3BXYWl0aW5nOiJ3YWl0aW5nIn0s
Sz17YXJlYTohMCxiYXNlOiEwLGJyOiEwLGNvbDohMCxlbWJlZDohMCxocjohMCxpbWc6ITAsaW5w
dXQ6ITAsa2V5Z2VuOiEwLGxpbms6ITAsbWV0YTohMCxwYXJhbTohMCxzb3VyY2U6ITAsdHJhY2s6
ITAsd2JyOiEwfSx6PXtsaXN0aW5nOiEwLHByZTohMCx0ZXh0YXJlYTohMH0sWT12KHttZW51aXRl
bTohMH0sSyksWD0vXlthLXpBLVpdW2EtekEtWjpfXC5cLVxkXSokLyxRPXt9LEc9e30uaGFzT3du
UHJvcGVydHksJD0xO2guZGlzcGxheU5hbWU9IlJlYWN0RE9NQ29tcG9uZW50IixoLk1peGluPXtt
b3VudENvbXBvbmVudDpmdW5jdGlvbihlLHQsbixyKXt0aGlzLl9yb290Tm9kZUlEPSQrKyx0aGlz
Ll9kb21JRD1uLl9pZENvdW50ZXIrKyx0aGlzLl9ob3N0UGFyZW50PXQsdGhpcy5faG9zdENvbnRh
aW5lckluZm89bjt2YXIgaT10aGlzLl9jdXJyZW50RWxlbWVudC5wcm9wcztzd2l0Y2godGhpcy5f
dGFnKXtjYXNlImF1ZGlvIjpjYXNlImZvcm0iOmNhc2UiaWZyYW1lIjpjYXNlImltZyI6Y2FzZSJs
aW5rIjpjYXNlIm9iamVjdCI6Y2FzZSJzb3VyY2UiOmNhc2UidmlkZW8iOnRoaXMuX3dyYXBwZXJT
dGF0ZT17bGlzdGVuZXJzOm51bGx9LGUuZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShjLHRo
aXMpO2JyZWFrO2Nhc2UiaW5wdXQiOlMubW91bnRXcmFwcGVyKHRoaXMsaSx0KSxpPVMuZ2V0SG9z
dFByb3BzKHRoaXMsaSksZS5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGMsdGhpcyk7YnJl
YWs7Y2FzZSJvcHRpb24iOk4ubW91bnRXcmFwcGVyKHRoaXMsaSx0KSxpPU4uZ2V0SG9zdFByb3Bz
KHRoaXMsaSk7YnJlYWs7Y2FzZSJzZWxlY3QiOk0ubW91bnRXcmFwcGVyKHRoaXMsaSx0KSxpPU0u
Z2V0SG9zdFByb3BzKHRoaXMsaSksZS5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGMsdGhp
cyk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6SS5tb3VudFdyYXBwZXIodGhpcyxpLHQpLGk9SS5nZXRI
b3N0UHJvcHModGhpcyxpKSxlLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUoYyx0aGlzKX1v
KHRoaXMsaSk7dmFyIGEscDtudWxsIT10PyhhPXQuX25hbWVzcGFjZVVSSSxwPXQuX3RhZyk6bi5f
dGFnJiYoYT1uLl9uYW1lc3BhY2VVUkkscD1uLl90YWcpLChudWxsPT1hfHxhPT09Qy5zdmcmJiJm
b3JlaWdub2JqZWN0Ij09PXApJiYoYT1DLmh0bWwpLGE9PT1DLmh0bWwmJigic3ZnIj09PXRoaXMu
X3RhZz9hPUMuc3ZnOiJtYXRoIj09PXRoaXMuX3RhZyYmKGE9Qy5tYXRobWwpKSx0aGlzLl9uYW1l
c3BhY2VVUkk9YTt2YXIgZDtpZihlLnVzZUNyZWF0ZUVsZW1lbnQpe3ZhciBmLGg9bi5fb3duZXJE
b2N1bWVudDtpZihhPT09Qy5odG1sKWlmKCJzY3JpcHQiPT09dGhpcy5fdGFnKXt2YXIgbT1oLmNy
ZWF0ZUVsZW1lbnQoImRpdiIpLHY9dGhpcy5fY3VycmVudEVsZW1lbnQudHlwZTttLmlubmVySFRN
TD0iPCIrdisiPjwvIit2KyI+IixmPW0ucmVtb3ZlQ2hpbGQobS5maXJzdENoaWxkKX1lbHNlIGY9
aS5pcz9oLmNyZWF0ZUVsZW1lbnQodGhpcy5fY3VycmVudEVsZW1lbnQudHlwZSxpLmlzKTpoLmNy
ZWF0ZUVsZW1lbnQodGhpcy5fY3VycmVudEVsZW1lbnQudHlwZSk7ZWxzZSBmPWguY3JlYXRlRWxl
bWVudE5TKGEsdGhpcy5fY3VycmVudEVsZW1lbnQudHlwZSk7UC5wcmVjYWNoZU5vZGUodGhpcyxm
KSx0aGlzLl9mbGFnc3w9RC5oYXNDYWNoZWRDaGlsZE5vZGVzLHRoaXMuX2hvc3RQYXJlbnR8fEUu
c2V0QXR0cmlidXRlRm9yUm9vdChmKSx0aGlzLl91cGRhdGVET01Qcm9wZXJ0aWVzKG51bGwsaSxl
KTt2YXIgeT1fKGYpO3RoaXMuX2NyZWF0ZUluaXRpYWxDaGlsZHJlbihlLGkscix5KSxkPXl9ZWxz
ZXt2YXIgYj10aGlzLl9jcmVhdGVPcGVuVGFnTWFya3VwQW5kUHV0TGlzdGVuZXJzKGUsaSkseD10
aGlzLl9jcmVhdGVDb250ZW50TWFya3VwKGUsaSxyKTtkPSF4JiZLW3RoaXMuX3RhZ10/YisiLz4i
OmIrIj4iK3grIjwvIit0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlKyI+In1zd2l0Y2godGhpcy5f
dGFnKXtjYXNlImlucHV0IjplLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUocyx0aGlzKSxp
LmF1dG9Gb2N1cyYmZS5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGcuZm9jdXNET01Db21w
b25lbnQsdGhpcyk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6ZS5nZXRSZWFjdE1vdW50UmVhZHkoKS5l
bnF1ZXVlKHUsdGhpcyksaS5hdXRvRm9jdXMmJmUuZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1
ZShnLmZvY3VzRE9NQ29tcG9uZW50LHRoaXMpO2JyZWFrO2Nhc2Uic2VsZWN0IjpjYXNlImJ1dHRv
biI6aS5hdXRvRm9jdXMmJmUuZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShnLmZvY3VzRE9N
Q29tcG9uZW50LHRoaXMpO2JyZWFrO2Nhc2Uib3B0aW9uIjplLmdldFJlYWN0TW91bnRSZWFkeSgp
LmVucXVldWUobCx0aGlzKX1yZXR1cm4gZH0sX2NyZWF0ZU9wZW5UYWdNYXJrdXBBbmRQdXRMaXN0
ZW5lcnM6ZnVuY3Rpb24oZSx0KXt2YXIgbj0iPCIrdGhpcy5fY3VycmVudEVsZW1lbnQudHlwZTtm
b3IodmFyIHIgaW4gdClpZih0Lmhhc093blByb3BlcnR5KHIpKXt2YXIgbz10W3JdO2lmKG51bGwh
PW8paWYoai5oYXNPd25Qcm9wZXJ0eShyKSlvJiZpKHRoaXMscixvLGUpO2Vsc2V7InN0eWxlIj09
PXImJihvJiYobz10aGlzLl9wcmV2aW91c1N0eWxlQ29weT12KHt9LHQuc3R5bGUpKSxvPXkuY3Jl
YXRlTWFya3VwRm9yU3R5bGVzKG8sdGhpcykpO3ZhciBhPW51bGw7bnVsbCE9dGhpcy5fdGFnJiZm
KHRoaXMuX3RhZyx0KT9XLmhhc093blByb3BlcnR5KHIpfHwoYT1FLmNyZWF0ZU1hcmt1cEZvckN1
c3RvbUF0dHJpYnV0ZShyLG8pKTphPUUuY3JlYXRlTWFya3VwRm9yUHJvcGVydHkocixvKSxhJiYo
bis9IiAiK2EpfX1yZXR1cm4gZS5yZW5kZXJUb1N0YXRpY01hcmt1cD9uOih0aGlzLl9ob3N0UGFy
ZW50fHwobis9IiAiK0UuY3JlYXRlTWFya3VwRm9yUm9vdCgpKSxuKz0iICIrRS5jcmVhdGVNYXJr
dXBGb3JJRCh0aGlzLl9kb21JRCkpfSxfY3JlYXRlQ29udGVudE1hcmt1cDpmdW5jdGlvbihlLHQs
bil7dmFyIHI9IiIsbz10LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MO2lmKG51bGwhPW8pbnVsbCE9
by5fX2h0bWwmJihyPW8uX19odG1sKTtlbHNle3ZhciBpPVZbdHlwZW9mIHQuY2hpbGRyZW5dP3Qu
Y2hpbGRyZW46bnVsbCxhPW51bGwhPWk/bnVsbDp0LmNoaWxkcmVuO2lmKG51bGwhPWkpcj1BKGkp
O2Vsc2UgaWYobnVsbCE9YSl7dmFyIHM9dGhpcy5tb3VudENoaWxkcmVuKGEsZSxuKTtyPXMuam9p
bigiIil9fXJldHVybiB6W3RoaXMuX3RhZ10mJiJcbiI9PT1yLmNoYXJBdCgwKT8iXG4iK3I6cn0s
X2NyZWF0ZUluaXRpYWxDaGlsZHJlbjpmdW5jdGlvbihlLHQsbixyKXt2YXIgbz10LmRhbmdlcm91
c2x5U2V0SW5uZXJIVE1MO2lmKG51bGwhPW8pbnVsbCE9by5fX2h0bWwmJl8ucXVldWVIVE1MKHIs
by5fX2h0bWwpO2Vsc2V7dmFyIGk9Vlt0eXBlb2YgdC5jaGlsZHJlbl0/dC5jaGlsZHJlbjpudWxs
LGE9bnVsbCE9aT9udWxsOnQuY2hpbGRyZW47aWYobnVsbCE9aSkiIiE9PWkmJl8ucXVldWVUZXh0
KHIsaSk7ZWxzZSBpZihudWxsIT1hKWZvcih2YXIgcz10aGlzLm1vdW50Q2hpbGRyZW4oYSxlLG4p
LHU9MDt1PHMubGVuZ3RoO3UrKylfLnF1ZXVlQ2hpbGQocixzW3VdKX19LHJlY2VpdmVDb21wb25l
bnQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuX2N1cnJlbnRFbGVtZW50O3RoaXMuX2N1cnJl
bnRFbGVtZW50PWUsdGhpcy51cGRhdGVDb21wb25lbnQodCxyLGUsbil9LHVwZGF0ZUNvbXBvbmVu
dDpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT10LnByb3BzLGE9dGhpcy5fY3VycmVudEVsZW1lbnQu
cHJvcHM7c3dpdGNoKHRoaXMuX3RhZyl7Y2FzZSJpbnB1dCI6aT1TLmdldEhvc3RQcm9wcyh0aGlz
LGkpLGE9Uy5nZXRIb3N0UHJvcHModGhpcyxhKTticmVhaztjYXNlIm9wdGlvbiI6aT1OLmdldEhv
c3RQcm9wcyh0aGlzLGkpLGE9Ti5nZXRIb3N0UHJvcHModGhpcyxhKTticmVhaztjYXNlInNlbGVj
dCI6aT1NLmdldEhvc3RQcm9wcyh0aGlzLGkpLGE9TS5nZXRIb3N0UHJvcHModGhpcyxhKTticmVh
aztjYXNlInRleHRhcmVhIjppPUkuZ2V0SG9zdFByb3BzKHRoaXMsaSksYT1JLmdldEhvc3RQcm9w
cyh0aGlzLGEpfXN3aXRjaChvKHRoaXMsYSksdGhpcy5fdXBkYXRlRE9NUHJvcGVydGllcyhpLGEs
ZSksdGhpcy5fdXBkYXRlRE9NQ2hpbGRyZW4oaSxhLGUsciksdGhpcy5fdGFnKXtjYXNlImlucHV0
IjpTLnVwZGF0ZVdyYXBwZXIodGhpcyk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6SS51cGRhdGVXcmFw
cGVyKHRoaXMpO2JyZWFrO2Nhc2Uic2VsZWN0IjplLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVl
dWUocCx0aGlzKX19LF91cGRhdGVET01Qcm9wZXJ0aWVzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixv
LGE7Zm9yKHIgaW4gZSlpZighdC5oYXNPd25Qcm9wZXJ0eShyKSYmZS5oYXNPd25Qcm9wZXJ0eShy
KSYmbnVsbCE9ZVtyXSlpZigic3R5bGUiPT09cil7dmFyIHM9dGhpcy5fcHJldmlvdXNTdHlsZUNv
cHk7Zm9yKG8gaW4gcylzLmhhc093blByb3BlcnR5KG8pJiYoYT1hfHx7fSxhW29dPSIiKTt0aGlz
Ll9wcmV2aW91c1N0eWxlQ29weT1udWxsfWVsc2Ugai5oYXNPd25Qcm9wZXJ0eShyKT9lW3JdJiZM
KHRoaXMscik6Zih0aGlzLl90YWcsZSk/Vy5oYXNPd25Qcm9wZXJ0eShyKXx8RS5kZWxldGVWYWx1
ZUZvckF0dHJpYnV0ZShVKHRoaXMpLHIpOihiLnByb3BlcnRpZXNbcl18fGIuaXNDdXN0b21BdHRy
aWJ1dGUocikpJiZFLmRlbGV0ZVZhbHVlRm9yUHJvcGVydHkoVSh0aGlzKSxyKTtmb3IociBpbiB0
KXt2YXIgdT10W3JdLGw9InN0eWxlIj09PXI/dGhpcy5fcHJldmlvdXNTdHlsZUNvcHk6bnVsbCE9
ZT9lW3JdOnZvaWQgMDtpZih0Lmhhc093blByb3BlcnR5KHIpJiZ1IT09bCYmKG51bGwhPXV8fG51
bGwhPWwpKWlmKCJzdHlsZSI9PT1yKWlmKHU/dT10aGlzLl9wcmV2aW91c1N0eWxlQ29weT12KHt9
LHUpOnRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5PW51bGwsbCl7Zm9yKG8gaW4gbCkhbC5oYXNPd25Q
cm9wZXJ0eShvKXx8dSYmdS5oYXNPd25Qcm9wZXJ0eShvKXx8KGE9YXx8e30sYVtvXT0iIik7Zm9y
KG8gaW4gdSl1Lmhhc093blByb3BlcnR5KG8pJiZsW29dIT09dVtvXSYmKGE9YXx8e30sYVtvXT11
W29dKX1lbHNlIGE9dTtlbHNlIGlmKGouaGFzT3duUHJvcGVydHkocikpdT9pKHRoaXMscix1LG4p
OmwmJkwodGhpcyxyKTtlbHNlIGlmKGYodGhpcy5fdGFnLHQpKVcuaGFzT3duUHJvcGVydHkocil8
fEUuc2V0VmFsdWVGb3JBdHRyaWJ1dGUoVSh0aGlzKSxyLHUpO2Vsc2UgaWYoYi5wcm9wZXJ0aWVz
W3JdfHxiLmlzQ3VzdG9tQXR0cmlidXRlKHIpKXt2YXIgYz1VKHRoaXMpO251bGwhPXU/RS5zZXRW
YWx1ZUZvclByb3BlcnR5KGMscix1KTpFLmRlbGV0ZVZhbHVlRm9yUHJvcGVydHkoYyxyKX19YSYm
eS5zZXRWYWx1ZUZvclN0eWxlcyhVKHRoaXMpLGEsdGhpcyl9LF91cGRhdGVET01DaGlsZHJlbjpm
dW5jdGlvbihlLHQsbixyKXt2YXIgbz1WW3R5cGVvZiBlLmNoaWxkcmVuXT9lLmNoaWxkcmVuOm51
bGwsaT1WW3R5cGVvZiB0LmNoaWxkcmVuXT90LmNoaWxkcmVuOm51bGwsYT1lLmRhbmdlcm91c2x5
U2V0SW5uZXJIVE1MJiZlLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbCxzPXQuZGFuZ2Vy
b3VzbHlTZXRJbm5lckhUTUwmJnQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sLHU9bnVs
bCE9bz9udWxsOmUuY2hpbGRyZW4sbD1udWxsIT1pP251bGw6dC5jaGlsZHJlbixjPW51bGwhPW98
fG51bGwhPWEscD1udWxsIT1pfHxudWxsIT1zO251bGwhPXUmJm51bGw9PWw/dGhpcy51cGRhdGVD
aGlsZHJlbihudWxsLG4scik6YyYmIXAmJnRoaXMudXBkYXRlVGV4dENvbnRlbnQoIiIpLG51bGwh
PWk/byE9PWkmJnRoaXMudXBkYXRlVGV4dENvbnRlbnQoIiIraSk6bnVsbCE9cz9hIT09cyYmdGhp
cy51cGRhdGVNYXJrdXAoIiIrcyk6bnVsbCE9bCYmdGhpcy51cGRhdGVDaGlsZHJlbihsLG4scil9
LGdldEhvc3ROb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIFUodGhpcyl9LHVubW91bnRDb21wb25lbnQ6
ZnVuY3Rpb24oZSl7c3dpdGNoKHRoaXMuX3RhZyl7Y2FzZSJhdWRpbyI6Y2FzZSJmb3JtIjpjYXNl
ImlmcmFtZSI6Y2FzZSJpbWciOmNhc2UibGluayI6Y2FzZSJvYmplY3QiOmNhc2Uic291cmNlIjpj
YXNlInZpZGVvIjp2YXIgdD10aGlzLl93cmFwcGVyU3RhdGUubGlzdGVuZXJzO2lmKHQpZm9yKHZh
ciBuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXS5yZW1vdmUoKTticmVhaztjYXNlImh0bWwiOmNhc2Ui
aGVhZCI6Y2FzZSJib2R5IjptKCI2NiIsdGhpcy5fdGFnKX10aGlzLnVubW91bnRDaGlsZHJlbihl
KSxQLnVuY2FjaGVOb2RlKHRoaXMpLHguZGVsZXRlQWxsTGlzdGVuZXJzKHRoaXMpLHRoaXMuX3Jv
b3ROb2RlSUQ9MCx0aGlzLl9kb21JRD0wLHRoaXMuX3dyYXBwZXJTdGF0ZT1udWxsfSxnZXRQdWJs
aWNJbnN0YW5jZTpmdW5jdGlvbigpe3JldHVybiBVKHRoaXMpfX0sdihoLnByb3RvdHlwZSxoLk1p
eGluLE8uTWl4aW4pLHQuZXhwb3J0cz1ofSx7MTA6MTAsMTA5OjEwOSwxMToxMSwxMTI6MTEyLDEx
ODoxMTgsMTI6MTIsMTI5OjEyOSwxMzc6MTM3LDE0MToxNDEsMTQyOjE0MiwxNDM6MTQzLDE2OjE2
LDE3OjE3LDI6MiwyNToyNSwzMjozMiwzMzozMywzODozOCwzOTozOSw0MDo0MCw0Mzo0Myw1OjUs
NTg6NTgsNjE6NjEsNjg6NjgsOTo5LDk1Ojk1fV0sMzI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCI7dmFyIHI9e2hhc0NhY2hlZENoaWxkTm9kZXM6MX07dC5leHBvcnRzPXJ9LHt9XSwzMzpb
ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIDE9PT1l
Lm5vZGVUeXBlJiZlLmdldEF0dHJpYnV0ZShoKT09PVN0cmluZyh0KXx8OD09PWUubm9kZVR5cGUm
JmUubm9kZVZhbHVlPT09IiByZWFjdC10ZXh0OiAiK3QrIiAifHw4PT09ZS5ub2RlVHlwZSYmZS5u
b2RlVmFsdWU9PT0iIHJlYWN0LWVtcHR5OiAiK3QrIiAifWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciB0
O3Q9ZS5fcmVuZGVyZWRDb21wb25lbnQ7KWU9dDtyZXR1cm4gZX1mdW5jdGlvbiBpKGUsdCl7dmFy
IG49byhlKTtuLl9ob3N0Tm9kZT10LHRbdl09bn1mdW5jdGlvbiBhKGUpe3ZhciB0PWUuX2hvc3RO
b2RlO3QmJihkZWxldGUgdFt2XSxlLl9ob3N0Tm9kZT1udWxsKX1mdW5jdGlvbiBzKGUsdCl7aWYo
IShlLl9mbGFncyZtLmhhc0NhY2hlZENoaWxkTm9kZXMpKXt2YXIgbj1lLl9yZW5kZXJlZENoaWxk
cmVuLGE9dC5maXJzdENoaWxkO2U6Zm9yKHZhciBzIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShz
KSl7dmFyIHU9bltzXSxsPW8odSkuX2RvbUlEO2lmKDAhPT1sKXtmb3IoO251bGwhPT1hO2E9YS5u
ZXh0U2libGluZylpZihyKGEsbCkpe2kodSxhKTtjb250aW51ZSBlfXAoIjMyIixsKX19ZS5fZmxh
Z3N8PW0uaGFzQ2FjaGVkQ2hpbGROb2Rlc319ZnVuY3Rpb24gdShlKXtpZihlW3ZdKXJldHVybiBl
W3ZdO2Zvcih2YXIgdD1bXTshZVt2XTspe2lmKHQucHVzaChlKSwhZS5wYXJlbnROb2RlKXJldHVy
biBudWxsO2U9ZS5wYXJlbnROb2RlfWZvcih2YXIgbixyO2UmJihyPWVbdl0pO2U9dC5wb3AoKSlu
PXIsdC5sZW5ndGgmJnMocixlKTtyZXR1cm4gbn1mdW5jdGlvbiBsKGUpe3ZhciB0PXUoZSk7cmV0
dXJuIG51bGwhPXQmJnQuX2hvc3ROb2RlPT09ZT90Om51bGx9ZnVuY3Rpb24gYyhlKXtpZih2b2lk
IDA9PT1lLl9ob3N0Tm9kZSYmcCgiMzMiKSxlLl9ob3N0Tm9kZSlyZXR1cm4gZS5faG9zdE5vZGU7
Zm9yKHZhciB0PVtdOyFlLl9ob3N0Tm9kZTspdC5wdXNoKGUpLGUuX2hvc3RQYXJlbnR8fHAoIjM0
IiksZT1lLl9ob3N0UGFyZW50O2Zvcig7dC5sZW5ndGg7ZT10LnBvcCgpKXMoZSxlLl9ob3N0Tm9k
ZSk7cmV0dXJuIGUuX2hvc3ROb2RlfXZhciBwPWUoMTEyKSxkPWUoMTEpLGY9ZSgzMiksaD0oZSgx
MzcpLGQuSURfQVRUUklCVVRFX05BTUUpLG09Zix2PSJfX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSQi
K01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpLGc9e2dldENsb3Nlc3RJbnN0YW5j
ZUZyb21Ob2RlOnUsZ2V0SW5zdGFuY2VGcm9tTm9kZTpsLGdldE5vZGVGcm9tSW5zdGFuY2U6Yyxw
cmVjYWNoZUNoaWxkTm9kZXM6cyxwcmVjYWNoZU5vZGU6aSx1bmNhY2hlTm9kZTphfTt0LmV4cG9y
dHM9Z30sezExOjExLDExMjoxMTIsMTM3OjEzNywzMjozMn1dLDM0OltmdW5jdGlvbihlLHQsbil7
InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm57X3RvcExldmVsV3JhcHBlcjplLF9p
ZENvdW50ZXI6MSxfb3duZXJEb2N1bWVudDp0P3Qubm9kZVR5cGU9PT1vP3Q6dC5vd25lckRvY3Vt
ZW50Om51bGwsX25vZGU6dCxfdGFnOnQ/dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOm51bGwsX25h
bWVzcGFjZVVSSTp0P3QubmFtZXNwYWNlVVJJOm51bGx9fXZhciBvPShlKDExOCksOSk7dC5leHBv
cnRzPXJ9LHsxMTg6MTE4fV0sMzU6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9
ZSgxNDMpLG89ZSg5KSxpPWUoMzMpLGE9ZnVuY3Rpb24oZSl7dGhpcy5fY3VycmVudEVsZW1lbnQ9
bnVsbCx0aGlzLl9ob3N0Tm9kZT1udWxsLHRoaXMuX2hvc3RQYXJlbnQ9bnVsbCx0aGlzLl9ob3N0
Q29udGFpbmVySW5mbz1udWxsLHRoaXMuX2RvbUlEPTB9O3IoYS5wcm90b3R5cGUse21vdW50Q29t
cG9uZW50OmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBhPW4uX2lkQ291bnRlcisrO3RoaXMuX2RvbUlE
PWEsdGhpcy5faG9zdFBhcmVudD10LHRoaXMuX2hvc3RDb250YWluZXJJbmZvPW47dmFyIHM9IiBy
ZWFjdC1lbXB0eTogIit0aGlzLl9kb21JRCsiICI7aWYoZS51c2VDcmVhdGVFbGVtZW50KXt2YXIg
dT1uLl9vd25lckRvY3VtZW50LGw9dS5jcmVhdGVDb21tZW50KHMpO3JldHVybiBpLnByZWNhY2hl
Tm9kZSh0aGlzLGwpLG8obCl9cmV0dXJuIGUucmVuZGVyVG9TdGF0aWNNYXJrdXA/IiI6IjwhLS0i
K3MrIi0tPiJ9LHJlY2VpdmVDb21wb25lbnQ6ZnVuY3Rpb24oKXt9LGdldEhvc3ROb2RlOmZ1bmN0
aW9uKCl7cmV0dXJuIGkuZ2V0Tm9kZUZyb21JbnN0YW5jZSh0aGlzKX0sdW5tb3VudENvbXBvbmVu
dDpmdW5jdGlvbigpe2kudW5jYWNoZU5vZGUodGhpcyl9fSksdC5leHBvcnRzPWF9LHsxNDM6MTQz
LDMzOjMzLDk6OX1dLDM2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPXt1c2VD
cmVhdGVFbGVtZW50OiEwLHVzZUZpYmVyOiExfTt0LmV4cG9ydHM9cn0se31dLDM3OltmdW5jdGlv
bihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoOCksbz1lKDMzKSxpPXtkYW5nZXJvdXNseVBy
b2Nlc3NDaGlsZHJlblVwZGF0ZXM6ZnVuY3Rpb24oZSx0KXt2YXIgbj1vLmdldE5vZGVGcm9tSW5z
dGFuY2UoZSk7ci5wcm9jZXNzVXBkYXRlcyhuLHQpfX07dC5leHBvcnRzPWl9LHszMzozMyw4Ojh9
XSwzODpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7dGhpcy5fcm9v
dE5vZGVJRCYmZC51cGRhdGVXcmFwcGVyKHRoaXMpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuImNoZWNr
Ym94Ij09PWUudHlwZXx8InJhZGlvIj09PWUudHlwZT9udWxsIT1lLmNoZWNrZWQ6bnVsbCE9ZS52
YWx1ZX1mdW5jdGlvbiBpKGUpe3ZhciB0PXRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3BzLG49bC5l
eGVjdXRlT25DaGFuZ2UodCxlKTtwLmFzYXAocix0aGlzKTt2YXIgbz10Lm5hbWU7aWYoInJhZGlv
Ij09PXQudHlwZSYmbnVsbCE9byl7Zm9yKHZhciBpPWMuZ2V0Tm9kZUZyb21JbnN0YW5jZSh0aGlz
KSxzPWk7cy5wYXJlbnROb2RlOylzPXMucGFyZW50Tm9kZTtmb3IodmFyIHU9cy5xdWVyeVNlbGVj
dG9yQWxsKCJpbnB1dFtuYW1lPSIrSlNPTi5zdHJpbmdpZnkoIiIrbykrJ11bdHlwZT0icmFkaW8i
XScpLGQ9MDtkPHUubGVuZ3RoO2QrKyl7dmFyIGY9dVtkXTtpZihmIT09aSYmZi5mb3JtPT09aS5m
b3JtKXt2YXIgaD1jLmdldEluc3RhbmNlRnJvbU5vZGUoZik7aHx8YSgiOTAiKSxwLmFzYXAocixo
KX19fXJldHVybiBufXZhciBhPWUoMTEyKSxzPWUoMTQzKSx1PWUoMTIpLGw9ZSgyMyksYz1lKDMz
KSxwPWUoNzEpLGQ9KGUoMTM3KSxlKDE0Mikse2dldEhvc3RQcm9wczpmdW5jdGlvbihlLHQpe3Zh
ciBuPWwuZ2V0VmFsdWUodCkscj1sLmdldENoZWNrZWQodCk7cmV0dXJuIHMoe3R5cGU6dm9pZCAw
LHN0ZXA6dm9pZCAwLG1pbjp2b2lkIDAsbWF4OnZvaWQgMH0sdCx7ZGVmYXVsdENoZWNrZWQ6dm9p
ZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsdmFsdWU6bnVsbCE9bj9uOmUuX3dyYXBwZXJTdGF0ZS5p
bml0aWFsVmFsdWUsY2hlY2tlZDpudWxsIT1yP3I6ZS5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVj
a2VkLG9uQ2hhbmdlOmUuX3dyYXBwZXJTdGF0ZS5vbkNoYW5nZX0pfSxtb3VudFdyYXBwZXI6ZnVu
Y3Rpb24oZSx0KXt2YXIgbj10LmRlZmF1bHRWYWx1ZTtlLl93cmFwcGVyU3RhdGU9e2luaXRpYWxD
aGVja2VkOm51bGwhPXQuY2hlY2tlZD90LmNoZWNrZWQ6dC5kZWZhdWx0Q2hlY2tlZCxpbml0aWFs
VmFsdWU6bnVsbCE9dC52YWx1ZT90LnZhbHVlOm4sbGlzdGVuZXJzOm51bGwsb25DaGFuZ2U6aS5i
aW5kKGUpLGNvbnRyb2xsZWQ6byh0KX19LHVwZGF0ZVdyYXBwZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9
ZS5fY3VycmVudEVsZW1lbnQucHJvcHMsbj10LmNoZWNrZWQ7bnVsbCE9biYmdS5zZXRWYWx1ZUZv
clByb3BlcnR5KGMuZ2V0Tm9kZUZyb21JbnN0YW5jZShlKSwiY2hlY2tlZCIsbnx8ITEpO3ZhciBy
PWMuZ2V0Tm9kZUZyb21JbnN0YW5jZShlKSxvPWwuZ2V0VmFsdWUodCk7aWYobnVsbCE9bylpZigw
PT09byYmIiI9PT1yLnZhbHVlKXIudmFsdWU9IjAiO2Vsc2UgaWYoIm51bWJlciI9PT10LnR5cGUp
e3ZhciBpPXBhcnNlRmxvYXQoci52YWx1ZSwxMCl8fDA7byE9aSYmKHIudmFsdWU9IiIrbyl9ZWxz
ZSBvIT1yLnZhbHVlJiYoci52YWx1ZT0iIitvKTtlbHNlIG51bGw9PXQudmFsdWUmJm51bGwhPXQu
ZGVmYXVsdFZhbHVlJiZyLmRlZmF1bHRWYWx1ZSE9PSIiK3QuZGVmYXVsdFZhbHVlJiYoci5kZWZh
dWx0VmFsdWU9IiIrdC5kZWZhdWx0VmFsdWUpLG51bGw9PXQuY2hlY2tlZCYmbnVsbCE9dC5kZWZh
dWx0Q2hlY2tlZCYmKHIuZGVmYXVsdENoZWNrZWQ9ISF0LmRlZmF1bHRDaGVja2VkKX0scG9zdE1v
dW50V3JhcHBlcjpmdW5jdGlvbihlKXt2YXIgdD1lLl9jdXJyZW50RWxlbWVudC5wcm9wcyxuPWMu
Z2V0Tm9kZUZyb21JbnN0YW5jZShlKTtzd2l0Y2godC50eXBlKXtjYXNlInN1Ym1pdCI6Y2FzZSJy
ZXNldCI6YnJlYWs7Y2FzZSJjb2xvciI6Y2FzZSJkYXRlIjpjYXNlImRhdGV0aW1lIjpjYXNlImRh
dGV0aW1lLWxvY2FsIjpjYXNlIm1vbnRoIjpjYXNlInRpbWUiOmNhc2Uid2VlayI6bi52YWx1ZT0i
IixuLnZhbHVlPW4uZGVmYXVsdFZhbHVlO2JyZWFrO2RlZmF1bHQ6bi52YWx1ZT1uLnZhbHVlfXZh
ciByPW4ubmFtZTsiIiE9PXImJihuLm5hbWU9IiIpLG4uZGVmYXVsdENoZWNrZWQ9IW4uZGVmYXVs
dENoZWNrZWQsbi5kZWZhdWx0Q2hlY2tlZD0hbi5kZWZhdWx0Q2hlY2tlZCwiIiE9PXImJihuLm5h
bWU9cil9fSk7dC5leHBvcnRzPWR9LHsxMTI6MTEyLDEyOjEyLDEzNzoxMzcsMTQyOjE0MiwxNDM6
MTQzLDIzOjIzLDMzOjMzLDcxOjcxfV0sMzk6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7
ZnVuY3Rpb24gcihlKXt2YXIgdD0iIjtyZXR1cm4gaS5DaGlsZHJlbi5mb3JFYWNoKGUsZnVuY3Rp
b24oZSl7bnVsbCE9ZSYmKCJzdHJpbmciPT10eXBlb2YgZXx8Im51bWJlciI9PXR5cGVvZiBlP3Qr
PWU6dXx8KHU9ITApKX0pLHR9dmFyIG89ZSgxNDMpLGk9ZSgxMjApLGE9ZSgzMykscz1lKDQwKSx1
PShlKDE0MiksITEpLGw9e21vdW50V3JhcHBlcjpmdW5jdGlvbihlLHQsbil7dmFyIG89bnVsbDtp
ZihudWxsIT1uKXt2YXIgaT1uOyJvcHRncm91cCI9PT1pLl90YWcmJihpPWkuX2hvc3RQYXJlbnQp
LG51bGwhPWkmJiJzZWxlY3QiPT09aS5fdGFnJiYobz1zLmdldFNlbGVjdFZhbHVlQ29udGV4dChp
KSl9dmFyIGE9bnVsbDtpZihudWxsIT1vKXt2YXIgdTtpZih1PW51bGwhPXQudmFsdWU/dC52YWx1
ZSsiIjpyKHQuY2hpbGRyZW4pLGE9ITEsQXJyYXkuaXNBcnJheShvKSl7Zm9yKHZhciBsPTA7bDxv
Lmxlbmd0aDtsKyspaWYoIiIrb1tsXT09PXUpe2E9ITA7YnJlYWt9fWVsc2UgYT0iIitvPT09dX1l
Ll93cmFwcGVyU3RhdGU9e3NlbGVjdGVkOmF9fSxwb3N0TW91bnRXcmFwcGVyOmZ1bmN0aW9uKGUp
e3ZhciB0PWUuX2N1cnJlbnRFbGVtZW50LnByb3BzO251bGwhPXQudmFsdWUmJmEuZ2V0Tm9kZUZy
b21JbnN0YW5jZShlKS5zZXRBdHRyaWJ1dGUoInZhbHVlIix0LnZhbHVlKX0sZ2V0SG9zdFByb3Bz
OmZ1bmN0aW9uKGUsdCl7dmFyIG49byh7c2VsZWN0ZWQ6dm9pZCAwLGNoaWxkcmVuOnZvaWQgMH0s
dCk7bnVsbCE9ZS5fd3JhcHBlclN0YXRlLnNlbGVjdGVkJiYobi5zZWxlY3RlZD1lLl93cmFwcGVy
U3RhdGUuc2VsZWN0ZWQpO3ZhciBpPXIodC5jaGlsZHJlbik7cmV0dXJuIGkmJihuLmNoaWxkcmVu
PWkpLG59fTt0LmV4cG9ydHM9bH0sezEyMDoxMjAsMTQyOjE0MiwxNDM6MTQzLDMzOjMzLDQwOjQw
fV0sNDA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe2lmKHRoaXMu
X3Jvb3ROb2RlSUQmJnRoaXMuX3dyYXBwZXJTdGF0ZS5wZW5kaW5nVXBkYXRlKXt0aGlzLl93cmFw
cGVyU3RhdGUucGVuZGluZ1VwZGF0ZT0hMTt2YXIgZT10aGlzLl9jdXJyZW50RWxlbWVudC5wcm9w
cyx0PXMuZ2V0VmFsdWUoZSk7bnVsbCE9dCYmbyh0aGlzLEJvb2xlYW4oZS5tdWx0aXBsZSksdCl9
fWZ1bmN0aW9uIG8oZSx0LG4pe3ZhciByLG8saT11LmdldE5vZGVGcm9tSW5zdGFuY2UoZSkub3B0
aW9ucztpZih0KXtmb3Iocj17fSxvPTA7bzxuLmxlbmd0aDtvKyspclsiIituW29dXT0hMDtmb3Io
bz0wO288aS5sZW5ndGg7bysrKXt2YXIgYT1yLmhhc093blByb3BlcnR5KGlbb10udmFsdWUpO2lb
b10uc2VsZWN0ZWQhPT1hJiYoaVtvXS5zZWxlY3RlZD1hKX19ZWxzZXtmb3Iocj0iIituLG89MDtv
PGkubGVuZ3RoO28rKylpZihpW29dLnZhbHVlPT09cilyZXR1cm4gdm9pZChpW29dLnNlbGVjdGVk
PSEwKTtpLmxlbmd0aCYmKGlbMF0uc2VsZWN0ZWQ9ITApfX1mdW5jdGlvbiBpKGUpe3ZhciB0PXRo
aXMuX2N1cnJlbnRFbGVtZW50LnByb3BzLG49cy5leGVjdXRlT25DaGFuZ2UodCxlKTtyZXR1cm4g
dGhpcy5fcm9vdE5vZGVJRCYmKHRoaXMuX3dyYXBwZXJTdGF0ZS5wZW5kaW5nVXBkYXRlPSEwKSxs
LmFzYXAocix0aGlzKSxufXZhciBhPWUoMTQzKSxzPWUoMjMpLHU9ZSgzMyksbD1lKDcxKSxjPShl
KDE0MiksITEpLHA9e2dldEhvc3RQcm9wczpmdW5jdGlvbihlLHQpe3JldHVybiBhKHt9LHQse29u
Q2hhbmdlOmUuX3dyYXBwZXJTdGF0ZS5vbkNoYW5nZSx2YWx1ZTp2b2lkIDB9KX0sbW91bnRXcmFw
cGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49cy5nZXRWYWx1ZSh0KTtlLl93cmFwcGVyU3RhdGU9e3Bl
bmRpbmdVcGRhdGU6ITEsaW5pdGlhbFZhbHVlOm51bGwhPW4/bjp0LmRlZmF1bHRWYWx1ZSxsaXN0
ZW5lcnM6bnVsbCxvbkNoYW5nZTppLmJpbmQoZSksd2FzTXVsdGlwbGU6Qm9vbGVhbih0Lm11bHRp
cGxlKX0sdm9pZCAwPT09dC52YWx1ZXx8dm9pZCAwPT09dC5kZWZhdWx0VmFsdWV8fGN8fChjPSEw
KX0sZ2V0U2VsZWN0VmFsdWVDb250ZXh0OmZ1bmN0aW9uKGUpe3JldHVybiBlLl93cmFwcGVyU3Rh
dGUuaW5pdGlhbFZhbHVlfSxwb3N0VXBkYXRlV3JhcHBlcjpmdW5jdGlvbihlKXt2YXIgdD1lLl9j
dXJyZW50RWxlbWVudC5wcm9wcztlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlPXZvaWQgMDt2
YXIgbj1lLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGU7ZS5fd3JhcHBlclN0YXRlLndhc011bHRp
cGxlPUJvb2xlYW4odC5tdWx0aXBsZSk7dmFyIHI9cy5nZXRWYWx1ZSh0KTtudWxsIT1yPyhlLl93
cmFwcGVyU3RhdGUucGVuZGluZ1VwZGF0ZT0hMSxvKGUsQm9vbGVhbih0Lm11bHRpcGxlKSxyKSk6
biE9PUJvb2xlYW4odC5tdWx0aXBsZSkmJihudWxsIT10LmRlZmF1bHRWYWx1ZT9vKGUsQm9vbGVh
bih0Lm11bHRpcGxlKSx0LmRlZmF1bHRWYWx1ZSk6byhlLEJvb2xlYW4odC5tdWx0aXBsZSksdC5t
dWx0aXBsZT9bXToiIikpfX07dC5leHBvcnRzPXB9LHsxNDI6MTQyLDE0MzoxNDMsMjM6MjMsMzM6
MzMsNzE6NzF9XSw0MTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUs
dCxuLHIpe3JldHVybiBlPT09biYmdD09PXJ9ZnVuY3Rpb24gbyhlKXt2YXIgdD1kb2N1bWVudC5z
ZWxlY3Rpb24sbj10LmNyZWF0ZVJhbmdlKCkscj1uLnRleHQubGVuZ3RoLG89bi5kdXBsaWNhdGUo
KTtvLm1vdmVUb0VsZW1lbnRUZXh0KGUpLG8uc2V0RW5kUG9pbnQoIkVuZFRvU3RhcnQiLG4pO3Zh
ciBpPW8udGV4dC5sZW5ndGg7cmV0dXJue3N0YXJ0OmksZW5kOmkrcn19ZnVuY3Rpb24gaShlKXt2
YXIgdD13aW5kb3cuZ2V0U2VsZWN0aW9uJiZ3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7aWYoIXR8fDA9
PT10LnJhbmdlQ291bnQpcmV0dXJuIG51bGw7dmFyIG49dC5hbmNob3JOb2RlLG89dC5hbmNob3JP
ZmZzZXQsaT10LmZvY3VzTm9kZSxhPXQuZm9jdXNPZmZzZXQscz10LmdldFJhbmdlQXQoMCk7dHJ5
e3Muc3RhcnRDb250YWluZXIubm9kZVR5cGUscy5lbmRDb250YWluZXIubm9kZVR5cGV9Y2F0Y2go
ZSl7cmV0dXJuIG51bGx9dmFyIHU9cih0LmFuY2hvck5vZGUsdC5hbmNob3JPZmZzZXQsdC5mb2N1
c05vZGUsdC5mb2N1c09mZnNldCksbD11PzA6cy50b1N0cmluZygpLmxlbmd0aCxjPXMuY2xvbmVS
YW5nZSgpO2Muc2VsZWN0Tm9kZUNvbnRlbnRzKGUpLGMuc2V0RW5kKHMuc3RhcnRDb250YWluZXIs
cy5zdGFydE9mZnNldCk7dmFyIHA9cihjLnN0YXJ0Q29udGFpbmVyLGMuc3RhcnRPZmZzZXQsYy5l
bmRDb250YWluZXIsYy5lbmRPZmZzZXQpLGQ9cD8wOmMudG9TdHJpbmcoKS5sZW5ndGgsZj1kK2ws
aD1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO2guc2V0U3RhcnQobixvKSxoLnNldEVuZChpLGEpO3Zh
ciBtPWguY29sbGFwc2VkO3JldHVybntzdGFydDptP2Y6ZCxlbmQ6bT9kOmZ9fWZ1bmN0aW9uIGEo
ZSx0KXt2YXIgbixyLG89ZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCkuZHVwbGljYXRl
KCk7dm9pZCAwPT09dC5lbmQ/KG49dC5zdGFydCxyPW4pOnQuc3RhcnQ+dC5lbmQ/KG49dC5lbmQs
cj10LnN0YXJ0KToobj10LnN0YXJ0LHI9dC5lbmQpLG8ubW92ZVRvRWxlbWVudFRleHQoZSksby5t
b3ZlU3RhcnQoImNoYXJhY3RlciIsbiksby5zZXRFbmRQb2ludCgiRW5kVG9TdGFydCIsbyksby5t
b3ZlRW5kKCJjaGFyYWN0ZXIiLHItbiksby5zZWxlY3QoKX1mdW5jdGlvbiBzKGUsdCl7aWYod2lu
ZG93LmdldFNlbGVjdGlvbil7dmFyIG49d2luZG93LmdldFNlbGVjdGlvbigpLHI9ZVtjKCldLmxl
bmd0aCxvPU1hdGgubWluKHQuc3RhcnQsciksaT12b2lkIDA9PT10LmVuZD9vOk1hdGgubWluKHQu
ZW5kLHIpO2lmKCFuLmV4dGVuZCYmbz5pKXt2YXIgYT1pO2k9byxvPWF9dmFyIHM9bChlLG8pLHU9
bChlLGkpO2lmKHMmJnUpe3ZhciBwPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7cC5zZXRTdGFydChz
Lm5vZGUscy5vZmZzZXQpLG4ucmVtb3ZlQWxsUmFuZ2VzKCksbz5pPyhuLmFkZFJhbmdlKHApLG4u
ZXh0ZW5kKHUubm9kZSx1Lm9mZnNldCkpOihwLnNldEVuZCh1Lm5vZGUsdS5vZmZzZXQpLG4uYWRk
UmFuZ2UocCkpfX19dmFyIHU9ZSgxMjMpLGw9ZSgxMDUpLGM9ZSgxMDYpLHA9dS5jYW5Vc2VET00m
JiJzZWxlY3Rpb24iaW4gZG9jdW1lbnQmJiEoImdldFNlbGVjdGlvbiJpbiB3aW5kb3cpLGQ9e2dl
dE9mZnNldHM6cD9vOmksc2V0T2Zmc2V0czpwP2E6c307dC5leHBvcnRzPWR9LHsxMDU6MTA1LDEw
NjoxMDYsMTIzOjEyM31dLDQyOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUo
MTEyKSxvPWUoMTQzKSxpPWUoOCksYT1lKDkpLHM9ZSgzMyksdT1lKDk1KSxsPShlKDEzNyksZSgx
MTgpLGZ1bmN0aW9uKGUpe3RoaXMuX2N1cnJlbnRFbGVtZW50PWUsdGhpcy5fc3RyaW5nVGV4dD0i
IitlLAordGhpcy5faG9zdE5vZGU9bnVsbCx0aGlzLl9ob3N0UGFyZW50PW51bGwsdGhpcy5fZG9t
SUQ9MCx0aGlzLl9tb3VudEluZGV4PTAsdGhpcy5fY2xvc2luZ0NvbW1lbnQ9bnVsbCx0aGlzLl9j
b21tZW50Tm9kZXM9bnVsbH0pO28obC5wcm90b3R5cGUse21vdW50Q29tcG9uZW50OmZ1bmN0aW9u
KGUsdCxuLHIpe3ZhciBvPW4uX2lkQ291bnRlcisrLGk9IiByZWFjdC10ZXh0OiAiK28rIiAiO2lm
KHRoaXMuX2RvbUlEPW8sdGhpcy5faG9zdFBhcmVudD10LGUudXNlQ3JlYXRlRWxlbWVudCl7dmFy
IGw9bi5fb3duZXJEb2N1bWVudCxjPWwuY3JlYXRlQ29tbWVudChpKSxwPWwuY3JlYXRlQ29tbWVu
dCgiIC9yZWFjdC10ZXh0ICIpLGQ9YShsLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7cmV0dXJu
IGEucXVldWVDaGlsZChkLGEoYykpLHRoaXMuX3N0cmluZ1RleHQmJmEucXVldWVDaGlsZChkLGEo
bC5jcmVhdGVUZXh0Tm9kZSh0aGlzLl9zdHJpbmdUZXh0KSkpLGEucXVldWVDaGlsZChkLGEocCkp
LHMucHJlY2FjaGVOb2RlKHRoaXMsYyksdGhpcy5fY2xvc2luZ0NvbW1lbnQ9cCxkfXZhciBmPXUo
dGhpcy5fc3RyaW5nVGV4dCk7cmV0dXJuIGUucmVuZGVyVG9TdGF0aWNNYXJrdXA/ZjoiPCEtLSIr
aSsiLS0+IitmKyI8IS0tIC9yZWFjdC10ZXh0IC0tPiJ9LHJlY2VpdmVDb21wb25lbnQ6ZnVuY3Rp
b24oZSx0KXtpZihlIT09dGhpcy5fY3VycmVudEVsZW1lbnQpe3RoaXMuX2N1cnJlbnRFbGVtZW50
PWU7dmFyIG49IiIrZTtpZihuIT09dGhpcy5fc3RyaW5nVGV4dCl7dGhpcy5fc3RyaW5nVGV4dD1u
O3ZhciByPXRoaXMuZ2V0SG9zdE5vZGUoKTtpLnJlcGxhY2VEZWxpbWl0ZWRUZXh0KHJbMF0sclsx
XSxuKX19fSxnZXRIb3N0Tm9kZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NvbW1lbnROb2Rlcztp
ZihlKXJldHVybiBlO2lmKCF0aGlzLl9jbG9zaW5nQ29tbWVudClmb3IodmFyIHQ9cy5nZXROb2Rl
RnJvbUluc3RhbmNlKHRoaXMpLG49dC5uZXh0U2libGluZzs7KXtpZihudWxsPT1uJiZyKCI2NyIs
dGhpcy5fZG9tSUQpLDg9PT1uLm5vZGVUeXBlJiYiIC9yZWFjdC10ZXh0ICI9PT1uLm5vZGVWYWx1
ZSl7dGhpcy5fY2xvc2luZ0NvbW1lbnQ9bjticmVha31uPW4ubmV4dFNpYmxpbmd9cmV0dXJuIGU9
W3RoaXMuX2hvc3ROb2RlLHRoaXMuX2Nsb3NpbmdDb21tZW50XSx0aGlzLl9jb21tZW50Tm9kZXM9
ZSxlfSx1bm1vdW50Q29tcG9uZW50OmZ1bmN0aW9uKCl7dGhpcy5fY2xvc2luZ0NvbW1lbnQ9bnVs
bCx0aGlzLl9jb21tZW50Tm9kZXM9bnVsbCxzLnVuY2FjaGVOb2RlKHRoaXMpfX0pLHQuZXhwb3J0
cz1sfSx7MTEyOjExMiwxMTg6MTE4LDEzNzoxMzcsMTQzOjE0MywzMzozMyw4OjgsOTo5LDk1Ojk1
fV0sNDM6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3RoaXMuX3Jv
b3ROb2RlSUQmJmMudXBkYXRlV3JhcHBlcih0aGlzKX1mdW5jdGlvbiBvKGUpe3ZhciB0PXRoaXMu
X2N1cnJlbnRFbGVtZW50LnByb3BzLG49cy5leGVjdXRlT25DaGFuZ2UodCxlKTtyZXR1cm4gbC5h
c2FwKHIsdGhpcyksbn12YXIgaT1lKDExMiksYT1lKDE0Mykscz1lKDIzKSx1PWUoMzMpLGw9ZSg3
MSksYz0oZSgxMzcpLGUoMTQyKSx7Z2V0SG9zdFByb3BzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51
bGwhPXQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJmkoIjkxIiksYSh7fSx0LHt2YWx1ZTp2b2lk
IDAsZGVmYXVsdFZhbHVlOnZvaWQgMCxjaGlsZHJlbjoiIitlLl93cmFwcGVyU3RhdGUuaW5pdGlh
bFZhbHVlLG9uQ2hhbmdlOmUuX3dyYXBwZXJTdGF0ZS5vbkNoYW5nZX0pfSxtb3VudFdyYXBwZXI6
ZnVuY3Rpb24oZSx0KXt2YXIgbj1zLmdldFZhbHVlKHQpLHI9bjtpZihudWxsPT1uKXt2YXIgYT10
LmRlZmF1bHRWYWx1ZSx1PXQuY2hpbGRyZW47bnVsbCE9dSYmKG51bGwhPWEmJmkoIjkyIiksQXJy
YXkuaXNBcnJheSh1KSYmKHUubGVuZ3RoPD0xfHxpKCI5MyIpLHU9dVswXSksYT0iIit1KSxudWxs
PT1hJiYoYT0iIikscj1hfWUuX3dyYXBwZXJTdGF0ZT17aW5pdGlhbFZhbHVlOiIiK3IsbGlzdGVu
ZXJzOm51bGwsb25DaGFuZ2U6by5iaW5kKGUpfX0sdXBkYXRlV3JhcHBlcjpmdW5jdGlvbihlKXt2
YXIgdD1lLl9jdXJyZW50RWxlbWVudC5wcm9wcyxuPXUuZ2V0Tm9kZUZyb21JbnN0YW5jZShlKSxy
PXMuZ2V0VmFsdWUodCk7aWYobnVsbCE9cil7dmFyIG89IiIrcjtvIT09bi52YWx1ZSYmKG4udmFs
dWU9byksbnVsbD09dC5kZWZhdWx0VmFsdWUmJihuLmRlZmF1bHRWYWx1ZT1vKX1udWxsIT10LmRl
ZmF1bHRWYWx1ZSYmKG4uZGVmYXVsdFZhbHVlPXQuZGVmYXVsdFZhbHVlKX0scG9zdE1vdW50V3Jh
cHBlcjpmdW5jdGlvbihlKXt2YXIgdD11LmdldE5vZGVGcm9tSW5zdGFuY2UoZSksbj10LnRleHRD
b250ZW50O249PT1lLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlJiYodC52YWx1ZT1uKX19KTt0
LmV4cG9ydHM9Y30sezExMjoxMTIsMTM3OjEzNywxNDI6MTQyLDE0MzoxNDMsMjM6MjMsMzM6MzMs
NzE6NzF9XSw0NDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7
Il9ob3N0Tm9kZSJpbiBlfHx1KCIzMyIpLCJfaG9zdE5vZGUiaW4gdHx8dSgiMzMiKTtmb3IodmFy
IG49MCxyPWU7cjtyPXIuX2hvc3RQYXJlbnQpbisrO2Zvcih2YXIgbz0wLGk9dDtpO2k9aS5faG9z
dFBhcmVudClvKys7Zm9yKDtuLW8+MDspZT1lLl9ob3N0UGFyZW50LG4tLTtmb3IoO28tbj4wOyl0
PXQuX2hvc3RQYXJlbnQsby0tO2Zvcih2YXIgYT1uO2EtLTspe2lmKGU9PT10KXJldHVybiBlO2U9
ZS5faG9zdFBhcmVudCx0PXQuX2hvc3RQYXJlbnR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gbyhlLHQp
eyJfaG9zdE5vZGUiaW4gZXx8dSgiMzUiKSwiX2hvc3ROb2RlImluIHR8fHUoIjM1Iik7Zm9yKDt0
Oyl7aWYodD09PWUpcmV0dXJuITA7dD10Ll9ob3N0UGFyZW50fXJldHVybiExfWZ1bmN0aW9uIGko
ZSl7cmV0dXJuIl9ob3N0Tm9kZSJpbiBlfHx1KCIzNiIpLGUuX2hvc3RQYXJlbnR9ZnVuY3Rpb24g
YShlLHQsbil7Zm9yKHZhciByPVtdO2U7KXIucHVzaChlKSxlPWUuX2hvc3RQYXJlbnQ7dmFyIG87
Zm9yKG89ci5sZW5ndGg7by0tID4wOyl0KHJbb10sImNhcHR1cmVkIixuKTtmb3Iobz0wO288ci5s
ZW5ndGg7bysrKXQocltvXSwiYnViYmxlZCIsbil9ZnVuY3Rpb24gcyhlLHQsbixvLGkpe2Zvcih2
YXIgYT1lJiZ0P3IoZSx0KTpudWxsLHM9W107ZSYmZSE9PWE7KXMucHVzaChlKSxlPWUuX2hvc3RQ
YXJlbnQ7Zm9yKHZhciB1PVtdO3QmJnQhPT1hOyl1LnB1c2godCksdD10Ll9ob3N0UGFyZW50O3Zh
ciBsO2ZvcihsPTA7bDxzLmxlbmd0aDtsKyspbihzW2xdLCJidWJibGVkIixvKTtmb3IobD11Lmxl
bmd0aDtsLS0gPjA7KW4odVtsXSwiY2FwdHVyZWQiLGkpfXZhciB1PWUoMTEyKTtlKDEzNyk7dC5l
eHBvcnRzPXtpc0FuY2VzdG9yOm8sZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3I6cixnZXRQYXJlbnRJ
bnN0YW5jZTppLHRyYXZlcnNlVHdvUGhhc2U6YSx0cmF2ZXJzZUVudGVyTGVhdmU6c319LHsxMTI6
MTEyLDEzNzoxMzd9XSw0NTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDEy
MCksbz1lKDMwKSxpPW87ci5hZGRvbnMmJihyLl9fU0VDUkVUX0lOSkVDVEVEX1JFQUNUX0RPTV9E
T19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEPWkpLHQuZXhwb3J0cz1pfSx7MTIwOjEyMCwz
MDozMH1dLDQ2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXt0aGlz
LnJlaW5pdGlhbGl6ZVRyYW5zYWN0aW9uKCl9dmFyIG89ZSgxNDMpLGk9ZSg3MSksYT1lKDg5KSxz
PWUoMTI5KSx1PXtpbml0aWFsaXplOnMsY2xvc2U6ZnVuY3Rpb24oKXtkLmlzQmF0Y2hpbmdVcGRh
dGVzPSExfX0sbD17aW5pdGlhbGl6ZTpzLGNsb3NlOmkuZmx1c2hCYXRjaGVkVXBkYXRlcy5iaW5k
KGkpfSxjPVtsLHVdO28oci5wcm90b3R5cGUsYSx7Z2V0VHJhbnNhY3Rpb25XcmFwcGVyczpmdW5j
dGlvbigpe3JldHVybiBjfX0pO3ZhciBwPW5ldyByLGQ9e2lzQmF0Y2hpbmdVcGRhdGVzOiExLGJh
dGNoZWRVcGRhdGVzOmZ1bmN0aW9uKGUsdCxuLHIsbyxpKXt2YXIgYT1kLmlzQmF0Y2hpbmdVcGRh
dGVzO3JldHVybiBkLmlzQmF0Y2hpbmdVcGRhdGVzPSEwLGE/ZSh0LG4scixvLGkpOnAucGVyZm9y
bShlLG51bGwsdCxuLHIsbyxpKX19O3QuZXhwb3J0cz1kfSx7MTI5OjEyOSwxNDM6MTQzLDcxOjcx
LDg5Ojg5fV0sNDc6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3h8
fCh4PSEwLHkuRXZlbnRFbWl0dGVyLmluamVjdFJlYWN0RXZlbnRMaXN0ZW5lcihnKSx5LkV2ZW50
UGx1Z2luSHViLmluamVjdEV2ZW50UGx1Z2luT3JkZXIocykseS5FdmVudFBsdWdpblV0aWxzLmlu
amVjdENvbXBvbmVudFRyZWUoZCkseS5FdmVudFBsdWdpblV0aWxzLmluamVjdFRyZWVUcmF2ZXJz
YWwoaCkseS5FdmVudFBsdWdpbkh1Yi5pbmplY3RFdmVudFBsdWdpbnNCeU5hbWUoe1NpbXBsZUV2
ZW50UGx1Z2luOkUsRW50ZXJMZWF2ZUV2ZW50UGx1Z2luOnUsQ2hhbmdlRXZlbnRQbHVnaW46YSxT
ZWxlY3RFdmVudFBsdWdpbjpiLEJlZm9yZUlucHV0RXZlbnRQbHVnaW46aX0pLHkuSG9zdENvbXBv
bmVudC5pbmplY3RHZW5lcmljQ29tcG9uZW50Q2xhc3MocCkseS5Ib3N0Q29tcG9uZW50LmluamVj
dFRleHRDb21wb25lbnRDbGFzcyhtKSx5LkRPTVByb3BlcnR5LmluamVjdERPTVByb3BlcnR5Q29u
ZmlnKG8pLHkuRE9NUHJvcGVydHkuaW5qZWN0RE9NUHJvcGVydHlDb25maWcobCkseS5ET01Qcm9w
ZXJ0eS5pbmplY3RET01Qcm9wZXJ0eUNvbmZpZyhDKSx5LkVtcHR5Q29tcG9uZW50LmluamVjdEVt
cHR5Q29tcG9uZW50RmFjdG9yeShmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGYoZSl9KSx5LlVwZGF0
ZXMuaW5qZWN0UmVjb25jaWxlVHJhbnNhY3Rpb24oXykseS5VcGRhdGVzLmluamVjdEJhdGNoaW5n
U3RyYXRlZ3kodikseS5Db21wb25lbnQuaW5qZWN0RW52aXJvbm1lbnQoYykpfXZhciBvPWUoMSks
aT1lKDMpLGE9ZSg3KSxzPWUoMTQpLHU9ZSgxNSksbD1lKDIxKSxjPWUoMjcpLHA9ZSgzMSksZD1l
KDMzKSxmPWUoMzUpLGg9ZSg0NCksbT1lKDQyKSx2PWUoNDYpLGc9ZSg1MikseT1lKDU1KSxfPWUo
NjUpLEM9ZSg3MyksYj1lKDc0KSxFPWUoNzUpLHg9ITE7dC5leHBvcnRzPXtpbmplY3Q6cn19LHsx
OjEsMTQ6MTQsMTU6MTUsMjE6MjEsMjc6MjcsMzozLDMxOjMxLDMzOjMzLDM1OjM1LDQyOjQyLDQ0
OjQ0LDQ2OjQ2LDUyOjUyLDU1OjU1LDY1OjY1LDc6Nyw3Mzo3Myw3NDo3NCw3NTo3NX1dLDQ4Oltm
dW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1i
b2wmJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDM7dC5leHBv
cnRzPXJ9LHt9XSw0OTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvPXtpbmpl
Y3RFbXB0eUNvbXBvbmVudEZhY3Rvcnk6ZnVuY3Rpb24oZSl7cj1lfX0saT17Y3JlYXRlOmZ1bmN0
aW9uKGUpe3JldHVybiByKGUpfX07aS5pbmplY3Rpb249byx0LmV4cG9ydHM9aX0se31dLDUwOltm
dW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe3RyeXt0KG4pfWNh
dGNoKGUpe251bGw9PT1vJiYobz1lKX19dmFyIG89bnVsbCxpPXtpbnZva2VHdWFyZGVkQ2FsbGJh
Y2s6cixpbnZva2VHdWFyZGVkQ2FsbGJhY2tXaXRoQ2F0Y2g6cixyZXRocm93Q2F1Z2h0RXJyb3I6
ZnVuY3Rpb24oKXtpZihvKXt2YXIgZT1vO3Rocm93IG89bnVsbCxlfX19O3QuZXhwb3J0cz1pfSx7
fV0sNTE6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtvLmVucXVl
dWVFdmVudHMoZSksby5wcm9jZXNzRXZlbnRRdWV1ZSghMSl9dmFyIG89ZSgxNiksaT17aGFuZGxl
VG9wTGV2ZWw6ZnVuY3Rpb24oZSx0LG4saSl7cihvLmV4dHJhY3RFdmVudHMoZSx0LG4saSkpfX07
dC5leHBvcnRzPWl9LHsxNjoxNn1dLDUyOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1
bmN0aW9uIHIoZSl7Zm9yKDtlLl9ob3N0UGFyZW50OyllPWUuX2hvc3RQYXJlbnQ7dmFyIHQ9cC5n
ZXROb2RlRnJvbUluc3RhbmNlKGUpLG49dC5wYXJlbnROb2RlO3JldHVybiBwLmdldENsb3Nlc3RJ
bnN0YW5jZUZyb21Ob2RlKG4pfWZ1bmN0aW9uIG8oZSx0KXt0aGlzLnRvcExldmVsVHlwZT1lLHRo
aXMubmF0aXZlRXZlbnQ9dCx0aGlzLmFuY2VzdG9ycz1bXX1mdW5jdGlvbiBpKGUpe3ZhciB0PWYo
ZS5uYXRpdmVFdmVudCksbj1wLmdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHQpLG89bjtkb3tl
LmFuY2VzdG9ycy5wdXNoKG8pLG89byYmcihvKX13aGlsZShvKTtmb3IodmFyIGk9MDtpPGUuYW5j
ZXN0b3JzLmxlbmd0aDtpKyspbj1lLmFuY2VzdG9yc1tpXSxtLl9oYW5kbGVUb3BMZXZlbChlLnRv
cExldmVsVHlwZSxuLGUubmF0aXZlRXZlbnQsZihlLm5hdGl2ZUV2ZW50KSl9ZnVuY3Rpb24gYShl
KXtlKGgod2luZG93KSl9dmFyIHM9ZSgxNDMpLHU9ZSgxMjIpLGw9ZSgxMjMpLGM9ZSgyNCkscD1l
KDMzKSxkPWUoNzEpLGY9ZSgxMDIpLGg9ZSgxMzQpO3Moby5wcm90b3R5cGUse2Rlc3RydWN0b3I6
ZnVuY3Rpb24oKXt0aGlzLnRvcExldmVsVHlwZT1udWxsLHRoaXMubmF0aXZlRXZlbnQ9bnVsbCx0
aGlzLmFuY2VzdG9ycy5sZW5ndGg9MH19KSxjLmFkZFBvb2xpbmdUbyhvLGMudHdvQXJndW1lbnRQ
b29sZXIpO3ZhciBtPXtfZW5hYmxlZDohMCxfaGFuZGxlVG9wTGV2ZWw6bnVsbCxXSU5ET1dfSEFO
RExFOmwuY2FuVXNlRE9NP3dpbmRvdzpudWxsLHNldEhhbmRsZVRvcExldmVsOmZ1bmN0aW9uKGUp
e20uX2hhbmRsZVRvcExldmVsPWV9LHNldEVuYWJsZWQ6ZnVuY3Rpb24oZSl7bS5fZW5hYmxlZD0h
IWV9LGlzRW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiBtLl9lbmFibGVkfSx0cmFwQnViYmxlZEV2
ZW50OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj91Lmxpc3RlbihuLHQsbS5kaXNwYXRjaEV2ZW50
LmJpbmQobnVsbCxlKSk6bnVsbH0sdHJhcENhcHR1cmVkRXZlbnQ6ZnVuY3Rpb24oZSx0LG4pe3Jl
dHVybiBuP3UuY2FwdHVyZShuLHQsbS5kaXNwYXRjaEV2ZW50LmJpbmQobnVsbCxlKSk6bnVsbH0s
bW9uaXRvclNjcm9sbFZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWEuYmluZChudWxsLGUpO3UubGlz
dGVuKHdpbmRvdywic2Nyb2xsIix0KX0sZGlzcGF0Y2hFdmVudDpmdW5jdGlvbihlLHQpe2lmKG0u
X2VuYWJsZWQpe3ZhciBuPW8uZ2V0UG9vbGVkKGUsdCk7dHJ5e2QuYmF0Y2hlZFVwZGF0ZXMoaSxu
KX1maW5hbGx5e28ucmVsZWFzZShuKX19fX07dC5leHBvcnRzPW19LHsxMDI6MTAyLDEyMjoxMjIs
MTIzOjEyMywxMzQ6MTM0LDE0MzoxNDMsMjQ6MjQsMzM6MzMsNzE6NzF9XSw1MzpbZnVuY3Rpb24o
ZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj17bG9nVG9wTGV2ZWxSZW5kZXJzOiExfTt0LmV4cG9y
dHM9cn0se31dLDU0OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7
cmV0dXJuIHN8fGEoIjExMSIsZS50eXBlKSxuZXcgcyhlKX1mdW5jdGlvbiBvKGUpe3JldHVybiBu
ZXcgdShlKX1mdW5jdGlvbiBpKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdX12YXIgYT1lKDExMiks
cz0oZSgxMzcpLG51bGwpLHU9bnVsbCxsPXtpbmplY3RHZW5lcmljQ29tcG9uZW50Q2xhc3M6ZnVu
Y3Rpb24oZSl7cz1lfSxpbmplY3RUZXh0Q29tcG9uZW50Q2xhc3M6ZnVuY3Rpb24oZSl7dT1lfX0s
Yz17Y3JlYXRlSW50ZXJuYWxDb21wb25lbnQ6cixjcmVhdGVJbnN0YW5jZUZvclRleHQ6byxpc1Rl
eHRDb21wb25lbnQ6aSxpbmplY3Rpb246bH07dC5leHBvcnRzPWN9LHsxMTI6MTEyLDEzNzoxMzd9
XSw1NTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDExKSxvPWUoMTYpLGk9
ZSgxOCksYT1lKDI4KSxzPWUoNDkpLHU9ZSgyNSksbD1lKDU0KSxjPWUoNzEpLHA9e0NvbXBvbmVu
dDphLmluamVjdGlvbixET01Qcm9wZXJ0eTpyLmluamVjdGlvbixFbXB0eUNvbXBvbmVudDpzLmlu
amVjdGlvbixFdmVudFBsdWdpbkh1YjpvLmluamVjdGlvbixFdmVudFBsdWdpblV0aWxzOmkuaW5q
ZWN0aW9uLEV2ZW50RW1pdHRlcjp1LmluamVjdGlvbixIb3N0Q29tcG9uZW50OmwuaW5qZWN0aW9u
LFVwZGF0ZXM6Yy5pbmplY3Rpb259O3QuZXhwb3J0cz1wfSx7MTE6MTEsMTY6MTYsMTg6MTgsMjU6
MjUsMjg6MjgsNDk6NDksNTQ6NTQsNzE6NzF9XSw1NjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3Ry
aWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBpKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxlKX12
YXIgbz1lKDQxKSxpPWUoMTI2KSxhPWUoMTMxKSxzPWUoMTMyKSx1PXtoYXNTZWxlY3Rpb25DYXBh
YmlsaXRpZXM6ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xv
d2VyQ2FzZSgpO3JldHVybiB0JiYoImlucHV0Ij09PXQmJiJ0ZXh0Ij09PWUudHlwZXx8InRleHRh
cmVhIj09PXR8fCJ0cnVlIj09PWUuY29udGVudEVkaXRhYmxlKX0sZ2V0U2VsZWN0aW9uSW5mb3Jt
YXRpb246ZnVuY3Rpb24oKXt2YXIgZT1zKCk7cmV0dXJue2ZvY3VzZWRFbGVtOmUsc2VsZWN0aW9u
UmFuZ2U6dS5oYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMoZSk/dS5nZXRTZWxlY3Rpb24oZSk6bnVs
bH19LHJlc3RvcmVTZWxlY3Rpb246ZnVuY3Rpb24oZSl7dmFyIHQ9cygpLG49ZS5mb2N1c2VkRWxl
bSxvPWUuc2VsZWN0aW9uUmFuZ2U7dCE9PW4mJnIobikmJih1Lmhhc1NlbGVjdGlvbkNhcGFiaWxp
dGllcyhuKSYmdS5zZXRTZWxlY3Rpb24obixvKSxhKG4pKX0sZ2V0U2VsZWN0aW9uOmZ1bmN0aW9u
KGUpe3ZhciB0O2lmKCJzZWxlY3Rpb25TdGFydCJpbiBlKXQ9e3N0YXJ0OmUuc2VsZWN0aW9uU3Rh
cnQsZW5kOmUuc2VsZWN0aW9uRW5kfTtlbHNlIGlmKGRvY3VtZW50LnNlbGVjdGlvbiYmZS5ub2Rl
TmFtZSYmImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7dmFyIG49ZG9jdW1lbnQu
c2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7bi5wYXJlbnRFbGVtZW50KCk9PT1lJiYodD17c3RhcnQ6
LW4ubW92ZVN0YXJ0KCJjaGFyYWN0ZXIiLC1lLnZhbHVlLmxlbmd0aCksZW5kOi1uLm1vdmVFbmQo
ImNoYXJhY3RlciIsLWUudmFsdWUubGVuZ3RoKX0pfWVsc2UgdD1vLmdldE9mZnNldHMoZSk7cmV0
dXJuIHR8fHtzdGFydDowLGVuZDowfX0sc2V0U2VsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7dmFyIG49
dC5zdGFydCxyPXQuZW5kO2lmKHZvaWQgMD09PXImJihyPW4pLCJzZWxlY3Rpb25TdGFydCJpbiBl
KWUuc2VsZWN0aW9uU3RhcnQ9bixlLnNlbGVjdGlvbkVuZD1NYXRoLm1pbihyLGUudmFsdWUubGVu
Z3RoKTtlbHNlIGlmKGRvY3VtZW50LnNlbGVjdGlvbiYmZS5ub2RlTmFtZSYmImlucHV0Ij09PWUu
bm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7dmFyIGk9ZS5jcmVhdGVUZXh0UmFuZ2UoKTtpLmNvbGxh
cHNlKCEwKSxpLm1vdmVTdGFydCgiY2hhcmFjdGVyIixuKSxpLm1vdmVFbmQoImNoYXJhY3RlciIs
ci1uKSxpLnNlbGVjdCgpfWVsc2Ugby5zZXRPZmZzZXRzKGUsdCl9fTt0LmV4cG9ydHM9dX0sezEy
NjoxMjYsMTMxOjEzMSwxMzI6MTMyLDQxOjQxfV0sNTc6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCI7dmFyIHI9e3JlbW92ZTpmdW5jdGlvbihlKXtlLl9yZWFjdEludGVybmFsSW5zdGFuY2U9
dm9pZCAwfSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZX0s
aGFzOmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lLl9yZWFjdEludGVybmFsSW5zdGFuY2V9
LHNldDpmdW5jdGlvbihlLHQpe2UuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZT10fX07dC5leHBvcnRz
PXJ9LHt9XSw1ODpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e2RlYnVn
VG9vbDpudWxsfX0se31dLDU5OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUo
OTIpLG89L148XCFcLVwtLyxpPXtDSEVDS1NVTV9BVFRSX05BTUU6ImRhdGEtcmVhY3QtY2hlY2tz
dW0iLGFkZENoZWNrc3VtVG9NYXJrdXA6ZnVuY3Rpb24oZSl7dmFyIHQ9cihlKTtyZXR1cm4gby50
ZXN0KGUpP2U6ZS5yZXBsYWNlKC9cLz8+LywiICIraS5DSEVDS1NVTV9BVFRSX05BTUUrJz0iJyt0
KyciJCYnKX0sY2FuUmV1c2VNYXJrdXA6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmdldEF0dHJpYnV0
ZShpLkNIRUNLU1VNX0FUVFJfTkFNRSk7cmV0dXJuIG49biYmcGFyc2VJbnQobiwxMCkscihlKT09
PW59fTt0LmV4cG9ydHM9aX0sezkyOjkyfV0sNjA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmlj
dCI7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCks
cj0wO3I8bjtyKyspaWYoZS5jaGFyQXQocikhPT10LmNoYXJBdChyKSlyZXR1cm4gcjtyZXR1cm4g
ZS5sZW5ndGg9PT10Lmxlbmd0aD8tMTpufWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGU/ZS5ub2RlVHlw
ZT09PUE/ZS5kb2N1bWVudEVsZW1lbnQ6ZS5maXJzdENoaWxkOm51bGx9ZnVuY3Rpb24gaShlKXty
ZXR1cm4gZS5nZXRBdHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKEkpfHwiIn1mdW5jdGlvbiBhKGUs
dCxuLHIsbyl7dmFyIGk7aWYoYi5sb2dUb3BMZXZlbFJlbmRlcnMpe3ZhciBhPWUuX2N1cnJlbnRF
bGVtZW50LnByb3BzLmNoaWxkLHM9YS50eXBlO2k9IlJlYWN0IG1vdW50OiAiKygic3RyaW5nIj09
dHlwZW9mIHM/czpzLmRpc3BsYXlOYW1lfHxzLm5hbWUpLGNvbnNvbGUudGltZShpKX12YXIgdT13
Lm1vdW50Q29tcG9uZW50KGUsbixudWxsLF8oZSx0KSxvLDApO2kmJmNvbnNvbGUudGltZUVuZChp
KSxlLl9yZW5kZXJlZENvbXBvbmVudC5fdG9wTGV2ZWxXcmFwcGVyPWUsai5fbW91bnRJbWFnZUlu
dG9Ob2RlKHUsdCxlLHIsbil9ZnVuY3Rpb24gcyhlLHQsbixyKXt2YXIgbz1rLlJlYWN0UmVjb25j
aWxlVHJhbnNhY3Rpb24uZ2V0UG9vbGVkKCFuJiZDLnVzZUNyZWF0ZUVsZW1lbnQpO28ucGVyZm9y
bShhLG51bGwsZSx0LG8sbixyKSxrLlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24ucmVsZWFzZShv
KX1mdW5jdGlvbiB1KGUsdCxuKXtmb3Iody51bm1vdW50Q29tcG9uZW50KGUsbiksdC5ub2RlVHlw
ZT09PUEmJih0PXQuZG9jdW1lbnRFbGVtZW50KTt0Lmxhc3RDaGlsZDspdC5yZW1vdmVDaGlsZCh0
Lmxhc3RDaGlsZCl9ZnVuY3Rpb24gbChlKXt2YXIgdD1vKGUpO2lmKHQpe3ZhciBuPXkuZ2V0SW5z
dGFuY2VGcm9tTm9kZSh0KTtyZXR1cm4hKCFufHwhbi5faG9zdFBhcmVudCl9fWZ1bmN0aW9uIGMo
ZSl7cmV0dXJuISghZXx8ZS5ub2RlVHlwZSE9PVImJmUubm9kZVR5cGUhPT1BJiZlLm5vZGVUeXBl
IT09RCl9ZnVuY3Rpb24gcChlKXt2YXIgdD1vKGUpLG49dCYmeS5nZXRJbnN0YW5jZUZyb21Ob2Rl
KHQpO3JldHVybiBuJiYhbi5faG9zdFBhcmVudD9uOm51bGx9ZnVuY3Rpb24gZChlKXt2YXIgdD1w
KGUpO3JldHVybiB0P3QuX2hvc3RDb250YWluZXJJbmZvLl90b3BMZXZlbFdyYXBwZXI6bnVsbH12
YXIgZj1lKDExMiksaD1lKDkpLG09ZSgxMSksdj1lKDEyMCksZz1lKDI1KSx5PShlKDExOSksZSgz
MykpLF89ZSgzNCksQz1lKDM2KSxiPWUoNTMpLEU9ZSg1NykseD0oZSg1OCksZSg1OSkpLHc9ZSg2
NiksVD1lKDcwKSxrPWUoNzEpLFA9ZSgxMzApLFM9ZSgxMDgpLE49KGUoMTM3KSxlKDExNCkpLE09
ZSgxMTYpLEk9KGUoMTQyKSxtLklEX0FUVFJJQlVURV9OQU1FKSxPPW0uUk9PVF9BVFRSSUJVVEVf
TkFNRSxSPTEsQT05LEQ9MTEsTD17fSxVPTEsRj1mdW5jdGlvbigpe3RoaXMucm9vdElEPVUrK307
Ri5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD17fSxGLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rp
b24oKXtyZXR1cm4gdGhpcy5wcm9wcy5jaGlsZH0sRi5pc1JlYWN0VG9wTGV2ZWxXcmFwcGVyPSEw
O3ZhciBqPXtUb3BMZXZlbFdyYXBwZXI6RixfaW5zdGFuY2VzQnlSZWFjdFJvb3RJRDpMLHNjcm9s
bE1vbml0b3I6ZnVuY3Rpb24oZSx0KXt0KCl9LF91cGRhdGVSb290Q29tcG9uZW50OmZ1bmN0aW9u
KGUsdCxuLHIsbyl7cmV0dXJuIGouc2Nyb2xsTW9uaXRvcihyLGZ1bmN0aW9uKCl7VC5lbnF1ZXVl
RWxlbWVudEludGVybmFsKGUsdCxuKSxvJiZULmVucXVldWVDYWxsYmFja0ludGVybmFsKGUsbyl9
KSxlfSxfcmVuZGVyTmV3Um9vdENvbXBvbmVudDpmdW5jdGlvbihlLHQsbixyKXtjKHQpfHxmKCIz
NyIpLGcuZW5zdXJlU2Nyb2xsVmFsdWVNb25pdG9yaW5nKCk7dmFyIG89UyhlLCExKTtrLmJhdGNo
ZWRVcGRhdGVzKHMsbyx0LG4scik7dmFyIGk9by5faW5zdGFuY2Uucm9vdElEO3JldHVybiBMW2ld
PW8sb30scmVuZGVyU3VidHJlZUludG9Db250YWluZXI6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJu
IG51bGwhPWUmJkUuaGFzKGUpfHxmKCIzOCIpLGouX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVy
KGUsdCxuLHIpfSxfcmVuZGVyU3VidHJlZUludG9Db250YWluZXI6ZnVuY3Rpb24oZSx0LG4scil7
VC52YWxpZGF0ZUNhbGxiYWNrKHIsIlJlYWN0RE9NLnJlbmRlciIpLHYuaXNWYWxpZEVsZW1lbnQo
dCl8fGYoIjM5Iiwic3RyaW5nIj09dHlwZW9mIHQ/IiBJbnN0ZWFkIG9mIHBhc3NpbmcgYSBzdHJp
bmcgbGlrZSAnZGl2JywgcGFzcyBSZWFjdC5jcmVhdGVFbGVtZW50KCdkaXYnKSBvciA8ZGl2IC8+
LiI6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/IiBJbnN0ZWFkIG9mIHBhc3NpbmcgYSBjbGFzcyBsaWtl
IEZvbywgcGFzcyBSZWFjdC5jcmVhdGVFbGVtZW50KEZvbykgb3IgPEZvbyAvPi4iOm51bGwhPXQm
JnZvaWQgMCE9PXQucHJvcHM/IiBUaGlzIG1heSBiZSBjYXVzZWQgYnkgdW5pbnRlbnRpb25hbGx5
IGxvYWRpbmcgdHdvIGluZGVwZW5kZW50IGNvcGllcyBvZiBSZWFjdC4iOiIiKTt2YXIgYSxzPXYu
Y3JlYXRlRWxlbWVudChGLHtjaGlsZDp0fSk7aWYoZSl7dmFyIHU9RS5nZXQoZSk7YT11Ll9wcm9j
ZXNzQ2hpbGRDb250ZXh0KHUuX2NvbnRleHQpfWVsc2UgYT1QO3ZhciBjPWQobik7aWYoYyl7dmFy
IHA9Yy5fY3VycmVudEVsZW1lbnQsaD1wLnByb3BzLmNoaWxkO2lmKE0oaCx0KSl7dmFyIG09Yy5f
cmVuZGVyZWRDb21wb25lbnQuZ2V0UHVibGljSW5zdGFuY2UoKSxnPXImJmZ1bmN0aW9uKCl7ci5j
YWxsKG0pfTtyZXR1cm4gai5fdXBkYXRlUm9vdENvbXBvbmVudChjLHMsYSxuLGcpLG19ai51bm1v
dW50Q29tcG9uZW50QXROb2RlKG4pfXZhciB5PW8obiksXz15JiYhIWkoeSksQz1sKG4pLGI9XyYm
IWMmJiFDLHg9ai5fcmVuZGVyTmV3Um9vdENvbXBvbmVudChzLG4sYixhKS5fcmVuZGVyZWRDb21w
b25lbnQuZ2V0UHVibGljSW5zdGFuY2UoKTtyZXR1cm4gciYmci5jYWxsKHgpLHh9LHJlbmRlcjpm
dW5jdGlvbihlLHQsbil7cmV0dXJuIGouX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKG51bGws
ZSx0LG4pfSx1bm1vdW50Q29tcG9uZW50QXROb2RlOmZ1bmN0aW9uKGUpe2MoZSl8fGYoIjQwIik7
dmFyIHQ9ZChlKTtyZXR1cm4gdD8oZGVsZXRlIExbdC5faW5zdGFuY2Uucm9vdElEXSxrLmJhdGNo
ZWRVcGRhdGVzKHUsdCxlLCExKSwhMCk6KGwoZSksMT09PWUubm9kZVR5cGUmJmUuaGFzQXR0cmli
dXRlKE8pLCExKX0sX21vdW50SW1hZ2VJbnRvTm9kZTpmdW5jdGlvbihlLHQsbixpLGEpe2lmKGMo
dCl8fGYoIjQxIiksaSl7dmFyIHM9byh0KTtpZih4LmNhblJldXNlTWFya3VwKGUscykpcmV0dXJu
IHZvaWQgeS5wcmVjYWNoZU5vZGUobixzKTt2YXIgdT1zLmdldEF0dHJpYnV0ZSh4LkNIRUNLU1VN
X0FUVFJfTkFNRSk7cy5yZW1vdmVBdHRyaWJ1dGUoeC5DSEVDS1NVTV9BVFRSX05BTUUpO3ZhciBs
PXMub3V0ZXJIVE1MO3Muc2V0QXR0cmlidXRlKHguQ0hFQ0tTVU1fQVRUUl9OQU1FLHUpO3ZhciBw
PWUsZD1yKHAsbCksbT0iIChjbGllbnQpICIrcC5zdWJzdHJpbmcoZC0yMCxkKzIwKSsiXG4gKHNl
cnZlcikgIitsLnN1YnN0cmluZyhkLTIwLGQrMjApO3Qubm9kZVR5cGU9PT1BJiZmKCI0MiIsbSl9
aWYodC5ub2RlVHlwZT09PUEmJmYoIjQzIiksYS51c2VDcmVhdGVFbGVtZW50KXtmb3IoO3QubGFz
dENoaWxkOyl0LnJlbW92ZUNoaWxkKHQubGFzdENoaWxkKTtoLmluc2VydFRyZWVCZWZvcmUodCxl
LG51bGwpfWVsc2UgTih0LGUpLHkucHJlY2FjaGVOb2RlKG4sdC5maXJzdENoaWxkKX19O3QuZXhw
b3J0cz1qfSx7MTA4OjEwOCwxMToxMSwxMTI6MTEyLDExNDoxMTQsMTE2OjExNiwxMTk6MTE5LDEy
MDoxMjAsMTMwOjEzMCwxMzc6MTM3LDE0MjoxNDIsMjU6MjUsMzM6MzMsMzQ6MzQsMzY6MzYsNTM6
NTMsNTc6NTcsNTg6NTgsNTk6NTksNjY6NjYsNzA6NzAsNzE6NzEsOTo5fV0sNjE6W2Z1bmN0aW9u
KGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7cmV0dXJue3R5cGU6IklOU0VS
VF9NQVJLVVAiLGNvbnRlbnQ6ZSxmcm9tSW5kZXg6bnVsbCxmcm9tTm9kZTpudWxsLHRvSW5kZXg6
bixhZnRlck5vZGU6dH19ZnVuY3Rpb24gbyhlLHQsbil7cmV0dXJue3R5cGU6Ik1PVkVfRVhJU1RJ
TkciLGNvbnRlbnQ6bnVsbCxmcm9tSW5kZXg6ZS5fbW91bnRJbmRleCxmcm9tTm9kZTpkLmdldEhv
c3ROb2RlKGUpLHRvSW5kZXg6bixhZnRlck5vZGU6dH19ZnVuY3Rpb24gaShlLHQpe3JldHVybnt0
eXBlOiJSRU1PVkVfTk9ERSIsY29udGVudDpudWxsLGZyb21JbmRleDplLl9tb3VudEluZGV4LGZy
b21Ob2RlOnQsdG9JbmRleDpudWxsLGFmdGVyTm9kZTpudWxsfX1mdW5jdGlvbiBhKGUpe3JldHVy
bnt0eXBlOiJTRVRfTUFSS1VQIixjb250ZW50OmUsZnJvbUluZGV4Om51bGwsZnJvbU5vZGU6bnVs
bCx0b0luZGV4Om51bGwsYWZ0ZXJOb2RlOm51bGx9fWZ1bmN0aW9uIHMoZSl7cmV0dXJue3R5cGU6
IlRFWFRfQ09OVEVOVCIsY29udGVudDplLGZyb21JbmRleDpudWxsLGZyb21Ob2RlOm51bGwsdG9J
bmRleDpudWxsLGFmdGVyTm9kZTpudWxsfX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIHQmJihlPWV8
fFtdLGUucHVzaCh0KSksZX1mdW5jdGlvbiBsKGUsdCl7cC5wcm9jZXNzQ2hpbGRyZW5VcGRhdGVz
KGUsdCl9dmFyIGM9ZSgxMTIpLHA9ZSgyOCksZD0oZSg1NyksZSg1OCksZSgxMTkpLGUoNjYpKSxm
PWUoMjYpLGg9KGUoMTI5KSxlKDk3KSksbT0oZSgxMzcpLHtNaXhpbjp7X3JlY29uY2lsZXJJbnN0
YW50aWF0ZUNoaWxkcmVuOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZi5pbnN0YW50aWF0ZUNoaWxk
cmVuKGUsdCxuKX0sX3JlY29uY2lsZXJVcGRhdGVDaGlsZHJlbjpmdW5jdGlvbihlLHQsbixyLG8s
aSl7dmFyIGE7cmV0dXJuIGE9aCh0LDApLGYudXBkYXRlQ2hpbGRyZW4oZSxhLG4scixvLHRoaXMs
dGhpcy5faG9zdENvbnRhaW5lckluZm8saSwwKSxhfSxtb3VudENoaWxkcmVuOmZ1bmN0aW9uKGUs
dCxuKXt2YXIgcj10aGlzLl9yZWNvbmNpbGVySW5zdGFudGlhdGVDaGlsZHJlbihlLHQsbik7dGhp
cy5fcmVuZGVyZWRDaGlsZHJlbj1yO3ZhciBvPVtdLGk9MDtmb3IodmFyIGEgaW4gcilpZihyLmhh
c093blByb3BlcnR5KGEpKXt2YXIgcz1yW2FdLHU9ZC5tb3VudENvbXBvbmVudChzLHQsdGhpcyx0
aGlzLl9ob3N0Q29udGFpbmVySW5mbyxuLDApO3MuX21vdW50SW5kZXg9aSsrLG8ucHVzaCh1KX1y
ZXR1cm4gb30sdXBkYXRlVGV4dENvbnRlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcmVuZGVy
ZWRDaGlsZHJlbjtmLnVubW91bnRDaGlsZHJlbih0LCExKTtmb3IodmFyIG4gaW4gdCl0Lmhhc093
blByb3BlcnR5KG4pJiZjKCIxMTgiKTtsKHRoaXMsW3MoZSldKX0sdXBkYXRlTWFya3VwOmZ1bmN0
aW9uKGUpe3ZhciB0PXRoaXMuX3JlbmRlcmVkQ2hpbGRyZW47Zi51bm1vdW50Q2hpbGRyZW4odCwh
MSk7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmYygiMTE4Iik7bCh0aGlzLFth
KGUpXSl9LHVwZGF0ZUNoaWxkcmVuOmZ1bmN0aW9uKGUsdCxuKXt0aGlzLl91cGRhdGVDaGlsZHJl
bihlLHQsbil9LF91cGRhdGVDaGlsZHJlbjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5fcmVu
ZGVyZWRDaGlsZHJlbixvPXt9LGk9W10sYT10aGlzLl9yZWNvbmNpbGVyVXBkYXRlQ2hpbGRyZW4o
cixlLGksbyx0LG4pO2lmKGF8fHIpe3ZhciBzLGM9bnVsbCxwPTAsZj0wLGg9MCxtPW51bGw7Zm9y
KHMgaW4gYSlpZihhLmhhc093blByb3BlcnR5KHMpKXt2YXIgdj1yJiZyW3NdLGc9YVtzXTt2PT09
Zz8oYz11KGMsdGhpcy5tb3ZlQ2hpbGQodixtLHAsZikpLGY9TWF0aC5tYXgodi5fbW91bnRJbmRl
eCxmKSx2Ll9tb3VudEluZGV4PXApOih2JiYoZj1NYXRoLm1heCh2Ll9tb3VudEluZGV4LGYpKSxj
PXUoYyx0aGlzLl9tb3VudENoaWxkQXRJbmRleChnLGlbaF0sbSxwLHQsbikpLGgrKykscCsrLG09
ZC5nZXRIb3N0Tm9kZShnKX1mb3IocyBpbiBvKW8uaGFzT3duUHJvcGVydHkocykmJihjPXUoYyx0
aGlzLl91bm1vdW50Q2hpbGQocltzXSxvW3NdKSkpO2MmJmwodGhpcyxjKSx0aGlzLl9yZW5kZXJl
ZENoaWxkcmVuPWF9fSx1bm1vdW50Q2hpbGRyZW46ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcmVu
ZGVyZWRDaGlsZHJlbjtmLnVubW91bnRDaGlsZHJlbih0LGUpLHRoaXMuX3JlbmRlcmVkQ2hpbGRy
ZW49bnVsbH0sbW92ZUNoaWxkOmZ1bmN0aW9uKGUsdCxuLHIpe2lmKGUuX21vdW50SW5kZXg8cily
ZXR1cm4gbyhlLHQsbil9LGNyZWF0ZUNoaWxkOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gcihuLHQs
ZS5fbW91bnRJbmRleCl9LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkoZSx0KX0s
X21vdW50Q2hpbGRBdEluZGV4OmZ1bmN0aW9uKGUsdCxuLHIsbyxpKXtyZXR1cm4gZS5fbW91bnRJ
bmRleD1yLHRoaXMuY3JlYXRlQ2hpbGQoZSxuLHQpfSxfdW5tb3VudENoaWxkOmZ1bmN0aW9uKGUs
dCl7dmFyIG49dGhpcy5yZW1vdmVDaGlsZChlLHQpO3JldHVybiBlLl9tb3VudEluZGV4PW51bGws
bn19fSk7dC5leHBvcnRzPW19LHsxMTI6MTEyLDExOToxMTksMTI5OjEyOSwxMzc6MTM3LDI2OjI2
LDI4OjI4LDU3OjU3LDU4OjU4LDY2OjY2LDk3Ojk3fV0sNjI6W2Z1bmN0aW9uKGUsdCxuKXsidXNl
IHN0cmljdCI7dmFyIHI9ZSgxMTIpLG89ZSgxMjApLGk9KGUoMTM3KSx7SE9TVDowLENPTVBPU0lU
RToxLEVNUFRZOjIsZ2V0VHlwZTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWV8fCExPT09ZT9p
LkVNUFRZOm8uaXNWYWxpZEVsZW1lbnQoZSk/ImZ1bmN0aW9uIj09dHlwZW9mIGUudHlwZT9pLkNP
TVBPU0lURTppLkhPU1Q6dm9pZCByKCIyNiIsZSl9fSk7dC5leHBvcnRzPWl9LHsxMTI6MTEyLDEy
MDoxMjAsMTM3OjEzN31dLDYzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9u
IHIoZSl7cmV0dXJuISghZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGUuYXR0YWNoUmVmfHwiZnVuY3Rp
b24iIT10eXBlb2YgZS5kZXRhY2hSZWYpfXZhciBvPWUoMTEyKSxpPShlKDEzNykse2FkZENvbXBv
bmVudEFzUmVmVG86ZnVuY3Rpb24oZSx0LG4pe3Iobil8fG8oIjExOSIpLG4uYXR0YWNoUmVmKHQs
ZSl9LHJlbW92ZUNvbXBvbmVudEFzUmVmRnJvbTpmdW5jdGlvbihlLHQsbil7cihuKXx8bygiMTIw
Iik7dmFyIGk9bi5nZXRQdWJsaWNJbnN0YW5jZSgpO2kmJmkucmVmc1t0XT09PWUuZ2V0UHVibGlj
SW5zdGFuY2UoKSYmbi5kZXRhY2hSZWYodCl9fSk7dC5leHBvcnRzPWl9LHsxMTI6MTEyLDEzNzox
Mzd9XSw2NDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9IlNFQ1JFVF9E
T19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEIn0se31dLDY1OltmdW5jdGlvbihl
LHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dGhpcy5yZWluaXRpYWxpemVUcmFuc2Fj
dGlvbigpLHRoaXMucmVuZGVyVG9TdGF0aWNNYXJrdXA9ITEsdGhpcy5yZWFjdE1vdW50UmVhZHk9
aS5nZXRQb29sZWQobnVsbCksdGhpcy51c2VDcmVhdGVFbGVtZW50PWV9dmFyIG89ZSgxNDMpLGk9
ZSg2KSxhPWUoMjQpLHM9ZSgyNSksdT1lKDU2KSxsPShlKDU4KSxlKDg5KSksYz1lKDcwKSxwPXtp
bml0aWFsaXplOnUuZ2V0U2VsZWN0aW9uSW5mb3JtYXRpb24sY2xvc2U6dS5yZXN0b3JlU2VsZWN0
aW9ufSxkPXtpbml0aWFsaXplOmZ1bmN0aW9uKCl7dmFyIGU9cy5pc0VuYWJsZWQoKTtyZXR1cm4g
cy5zZXRFbmFibGVkKCExKSxlfSxjbG9zZTpmdW5jdGlvbihlKXtzLnNldEVuYWJsZWQoZSl9fSxm
PXtpbml0aWFsaXplOmZ1bmN0aW9uKCl7dGhpcy5yZWFjdE1vdW50UmVhZHkucmVzZXQoKX0sY2xv
c2U6ZnVuY3Rpb24oKXt0aGlzLnJlYWN0TW91bnRSZWFkeS5ub3RpZnlBbGwoKX19LGg9W3AsZCxm
XSxtPXtnZXRUcmFuc2FjdGlvbldyYXBwZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIGh9LGdldFJlYWN0
TW91bnRSZWFkeTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWN0TW91bnRSZWFkeX0sZ2V0VXBk
YXRlUXVldWU6ZnVuY3Rpb24oKXtyZXR1cm4gY30sY2hlY2twb2ludDpmdW5jdGlvbigpe3JldHVy
biB0aGlzLnJlYWN0TW91bnRSZWFkeS5jaGVja3BvaW50KCl9LHJvbGxiYWNrOmZ1bmN0aW9uKGUp
e3RoaXMucmVhY3RNb3VudFJlYWR5LnJvbGxiYWNrKGUpfSxkZXN0cnVjdG9yOmZ1bmN0aW9uKCl7
aS5yZWxlYXNlKHRoaXMucmVhY3RNb3VudFJlYWR5KSx0aGlzLnJlYWN0TW91bnRSZWFkeT1udWxs
fX07byhyLnByb3RvdHlwZSxsLG0pLGEuYWRkUG9vbGluZ1RvKHIpLHQuZXhwb3J0cz1yfSx7MTQz
OjE0MywyNDoyNCwyNToyNSw1Njo1Niw1ODo1OCw2OjYsNzA6NzAsODk6ODl9XSw2NjpbZnVuY3Rp
b24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7by5hdHRhY2hSZWZzKHRoaXMsdGhp
cy5fY3VycmVudEVsZW1lbnQpfXZhciBvPWUoNjcpLGk9KGUoNTgpLGUoMTQyKSx7bW91bnRDb21w
b25lbnQ6ZnVuY3Rpb24oZSx0LG4sbyxpLGEpe3ZhciBzPWUubW91bnRDb21wb25lbnQodCxuLG8s
aSxhKTtyZXR1cm4gZS5fY3VycmVudEVsZW1lbnQmJm51bGwhPWUuX2N1cnJlbnRFbGVtZW50LnJl
ZiYmdC5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKHIsZSksc30sZ2V0SG9zdE5vZGU6ZnVu
Y3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG9zdE5vZGUoKX0sdW5tb3VudENvbXBvbmVudDpmdW5jdGlv
bihlLHQpe28uZGV0YWNoUmVmcyhlLGUuX2N1cnJlbnRFbGVtZW50KSxlLnVubW91bnRDb21wb25l
bnQodCl9LHJlY2VpdmVDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4saSl7dmFyIGE9ZS5fY3VycmVu
dEVsZW1lbnQ7aWYodCE9PWF8fGkhPT1lLl9jb250ZXh0KXt2YXIgcz1vLnNob3VsZFVwZGF0ZVJl
ZnMoYSx0KTtzJiZvLmRldGFjaFJlZnMoZSxhKSxlLnJlY2VpdmVDb21wb25lbnQodCxuLGkpLHMm
JmUuX2N1cnJlbnRFbGVtZW50JiZudWxsIT1lLl9jdXJyZW50RWxlbWVudC5yZWYmJm4uZ2V0UmVh
Y3RNb3VudFJlYWR5KCkuZW5xdWV1ZShyLGUpfX0scGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5OmZ1
bmN0aW9uKGUsdCxuKXtlLl91cGRhdGVCYXRjaE51bWJlcj09PW4mJmUucGVyZm9ybVVwZGF0ZUlm
TmVjZXNzYXJ5KHQpfX0pO3QuZXhwb3J0cz1pfSx7MTQyOjE0Miw1ODo1OCw2Nzo2N31dLDY3Oltm
dW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4peyJmdW5jdGlvbiI9
PXR5cGVvZiBlP2UodC5nZXRQdWJsaWNJbnN0YW5jZSgpKTppLmFkZENvbXBvbmVudEFzUmVmVG8o
dCxlLG4pfWZ1bmN0aW9uIG8oZSx0LG4peyJmdW5jdGlvbiI9PXR5cGVvZiBlP2UobnVsbCk6aS5y
ZW1vdmVDb21wb25lbnRBc1JlZkZyb20odCxlLG4pfXZhciBpPWUoNjMpLGE9e307YS5hdHRhY2hS
ZWZzPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdCl7dmFyIG49
dC5yZWY7bnVsbCE9biYmcihuLGUsdC5fb3duZXIpfX0sYS5zaG91bGRVcGRhdGVSZWZzPWZ1bmN0
aW9uKGUsdCl7dmFyIG49bnVsbCxyPW51bGw7bnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZSYm
KG49ZS5yZWYscj1lLl9vd25lcik7dmFyIG89bnVsbCxpPW51bGw7cmV0dXJuIG51bGwhPT10JiYi
b2JqZWN0Ij09dHlwZW9mIHQmJihvPXQucmVmLGk9dC5fb3duZXIpLG4hPT1vfHwic3RyaW5nIj09
dHlwZW9mIG8mJmkhPT1yfSxhLmRldGFjaFJlZnM9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT09dCYm
Im9iamVjdCI9PXR5cGVvZiB0KXt2YXIgbj10LnJlZjtudWxsIT1uJiZvKG4sZSx0Ll9vd25lcil9
fSx0LmV4cG9ydHM9YX0sezYzOjYzfV0sNjg6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7
ZnVuY3Rpb24gcihlKXt0aGlzLnJlaW5pdGlhbGl6ZVRyYW5zYWN0aW9uKCksdGhpcy5yZW5kZXJU
b1N0YXRpY01hcmt1cD1lLHRoaXMudXNlQ3JlYXRlRWxlbWVudD0hMSx0aGlzLnVwZGF0ZVF1ZXVl
PW5ldyBzKHRoaXMpfXZhciBvPWUoMTQzKSxpPWUoMjQpLGE9ZSg4OSkscz0oZSg1OCksZSg2OSkp
LHU9W10sbD17ZW5xdWV1ZTpmdW5jdGlvbigpe319LGM9e2dldFRyYW5zYWN0aW9uV3JhcHBlcnM6
ZnVuY3Rpb24oKXtyZXR1cm4gdX0sZ2V0UmVhY3RNb3VudFJlYWR5OmZ1bmN0aW9uKCl7cmV0dXJu
IGx9LGdldFVwZGF0ZVF1ZXVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudXBkYXRlUXVldWV9LGRl
c3RydWN0b3I6ZnVuY3Rpb24oKXt9LGNoZWNrcG9pbnQ6ZnVuY3Rpb24oKXt9LHJvbGxiYWNrOmZ1
bmN0aW9uKCl7fX07byhyLnByb3RvdHlwZSxhLGMpLGkuYWRkUG9vbGluZ1RvKHIpLHQuZXhwb3J0
cz1yfSx7MTQzOjE0MywyNDoyNCw1ODo1OCw2OTo2OSw4OTo4OX1dLDY5OltmdW5jdGlvbihlLHQs
bil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJv
dyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIg
bz1lKDcwKSxpPShlKDE0MiksZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3IodGhpcyxlKSx0aGlz
LnRyYW5zYWN0aW9uPXR9cmV0dXJuIGUucHJvdG90eXBlLmlzTW91bnRlZD1mdW5jdGlvbihlKXty
ZXR1cm4hMX0sZS5wcm90b3R5cGUuZW5xdWV1ZUNhbGxiYWNrPWZ1bmN0aW9uKGUsdCxuKXt0aGlz
LnRyYW5zYWN0aW9uLmlzSW5UcmFuc2FjdGlvbigpJiZvLmVucXVldWVDYWxsYmFjayhlLHQsbil9
LGUucHJvdG90eXBlLmVucXVldWVGb3JjZVVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLnRyYW5zYWN0
aW9uLmlzSW5UcmFuc2FjdGlvbigpJiZvLmVucXVldWVGb3JjZVVwZGF0ZShlKX0sZS5wcm90b3R5
cGUuZW5xdWV1ZVJlcGxhY2VTdGF0ZT1mdW5jdGlvbihlLHQpe3RoaXMudHJhbnNhY3Rpb24uaXNJ
blRyYW5zYWN0aW9uKCkmJm8uZW5xdWV1ZVJlcGxhY2VTdGF0ZShlLHQpfSxlLnByb3RvdHlwZS5l
bnF1ZXVlU2V0U3RhdGU9ZnVuY3Rpb24oZSx0KXt0aGlzLnRyYW5zYWN0aW9uLmlzSW5UcmFuc2Fj
dGlvbigpJiZvLmVucXVldWVTZXRTdGF0ZShlLHQpfSxlfSgpKTt0LmV4cG9ydHM9aX0sezE0Mjox
NDIsNzA6NzB9XSw3MDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUp
e3UuZW5xdWV1ZVVwZGF0ZShlKX1mdW5jdGlvbiBvKGUpe3ZhciB0PXR5cGVvZiBlO2lmKCJvYmpl
Y3QiIT09dClyZXR1cm4gdDt2YXIgbj1lLmNvbnN0cnVjdG9yJiZlLmNvbnN0cnVjdG9yLm5hbWV8
fHQscj1PYmplY3Qua2V5cyhlKTtyZXR1cm4gci5sZW5ndGg+MCYmci5sZW5ndGg8MjA/bisiIChr
ZXlzOiAiK3Iuam9pbigiLCAiKSsiKSI6bn1mdW5jdGlvbiBpKGUsdCl7dmFyIG49cy5nZXQoZSk7
cmV0dXJuIG58fG51bGx9dmFyIGE9ZSgxMTIpLHM9KGUoMTE5KSxlKDU3KSksdT0oZSg1OCksZSg3
MSkpLGw9KGUoMTM3KSxlKDE0Mikse2lzTW91bnRlZDpmdW5jdGlvbihlKXt2YXIgdD1zLmdldChl
KTtyZXR1cm4hIXQmJiEhdC5fcmVuZGVyZWRDb21wb25lbnR9LGVucXVldWVDYWxsYmFjazpmdW5j
dGlvbihlLHQsbil7bC52YWxpZGF0ZUNhbGxiYWNrKHQsbik7dmFyIG89aShlKTtpZighbylyZXR1
cm4gbnVsbDtvLl9wZW5kaW5nQ2FsbGJhY2tzP28uX3BlbmRpbmdDYWxsYmFja3MucHVzaCh0KTpv
Ll9wZW5kaW5nQ2FsbGJhY2tzPVt0XSxyKG8pfSxlbnF1ZXVlQ2FsbGJhY2tJbnRlcm5hbDpmdW5j
dGlvbihlLHQpe2UuX3BlbmRpbmdDYWxsYmFja3M/ZS5fcGVuZGluZ0NhbGxiYWNrcy5wdXNoKHQp
OmUuX3BlbmRpbmdDYWxsYmFja3M9W3RdLHIoZSl9LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlv
bihlKXt2YXIgdD1pKGUsImZvcmNlVXBkYXRlIik7dCYmKHQuX3BlbmRpbmdGb3JjZVVwZGF0ZT0h
MCxyKHQpKX0sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbihlLHQsbil7dmFyIG89aShlLCJy
ZXBsYWNlU3RhdGUiKTtvJiYoby5fcGVuZGluZ1N0YXRlUXVldWU9W3RdLG8uX3BlbmRpbmdSZXBs
YWNlU3RhdGU9ITAsdm9pZCAwIT09biYmbnVsbCE9PW4mJihsLnZhbGlkYXRlQ2FsbGJhY2sobiwi
cmVwbGFjZVN0YXRlIiksby5fcGVuZGluZ0NhbGxiYWNrcz9vLl9wZW5kaW5nQ2FsbGJhY2tzLnB1
c2gobik6by5fcGVuZGluZ0NhbGxiYWNrcz1bbl0pLHIobykpfSxlbnF1ZXVlU2V0U3RhdGU6ZnVu
Y3Rpb24oZSx0KXt2YXIgbj1pKGUsInNldFN0YXRlIik7biYmKChuLl9wZW5kaW5nU3RhdGVRdWV1
ZXx8KG4uX3BlbmRpbmdTdGF0ZVF1ZXVlPVtdKSkucHVzaCh0KSxyKG4pKX0sZW5xdWV1ZUVsZW1l
bnRJbnRlcm5hbDpmdW5jdGlvbihlLHQsbil7ZS5fcGVuZGluZ0VsZW1lbnQ9dCxlLl9jb250ZXh0
PW4scihlKX0sdmFsaWRhdGVDYWxsYmFjazpmdW5jdGlvbihlLHQpe2UmJiJmdW5jdGlvbiIhPXR5
cGVvZiBlJiZhKCIxMjIiLHQsbyhlKSl9fSk7dC5leHBvcnRzPWx9LHsxMTI6MTEyLDExOToxMTks
MTM3OjEzNywxNDI6MTQyLDU3OjU3LDU4OjU4LDcxOjcxfV0sNzE6W2Z1bmN0aW9uKGUsdCxuKXsi
dXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe1AuUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbiYmYnx8
YygiMTIzIil9ZnVuY3Rpb24gbygpe3RoaXMucmVpbml0aWFsaXplVHJhbnNhY3Rpb24oKSx0aGlz
LmRpcnR5Q29tcG9uZW50c0xlbmd0aD1udWxsLHRoaXMuY2FsbGJhY2tRdWV1ZT1kLmdldFBvb2xl
ZCgpLHRoaXMucmVjb25jaWxlVHJhbnNhY3Rpb249UC5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9u
LmdldFBvb2xlZCghMCl9ZnVuY3Rpb24gaShlLHQsbixvLGksYSl7cmV0dXJuIHIoKSxiLmJhdGNo
ZWRVcGRhdGVzKGUsdCxuLG8saSxhKX1mdW5jdGlvbiBhKGUsdCl7cmV0dXJuIGUuX21vdW50T3Jk
ZXItdC5fbW91bnRPcmRlcn1mdW5jdGlvbiBzKGUpe3ZhciB0PWUuZGlydHlDb21wb25lbnRzTGVu
Z3RoO3QhPT1nLmxlbmd0aCYmYygiMTI0Iix0LGcubGVuZ3RoKSxnLnNvcnQoYSkseSsrO2Zvcih2
YXIgbj0wO248dDtuKyspe3ZhciByPWdbbl0sbz1yLl9wZW5kaW5nQ2FsbGJhY2tzO3IuX3BlbmRp
bmdDYWxsYmFja3M9bnVsbDt2YXIgaTtpZihoLmxvZ1RvcExldmVsUmVuZGVycyl7dmFyIHM9cjty
Ll9jdXJyZW50RWxlbWVudC50eXBlLmlzUmVhY3RUb3BMZXZlbFdyYXBwZXImJihzPXIuX3JlbmRl
cmVkQ29tcG9uZW50KSxpPSJSZWFjdCB1cGRhdGU6ICIrcy5nZXROYW1lKCksY29uc29sZS50aW1l
KGkpfWlmKG0ucGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5KHIsZS5yZWNvbmNpbGVUcmFuc2FjdGlv
bix5KSxpJiZjb25zb2xlLnRpbWVFbmQoaSksbylmb3IodmFyIHU9MDt1PG8ubGVuZ3RoO3UrKyll
LmNhbGxiYWNrUXVldWUuZW5xdWV1ZShvW3VdLHIuZ2V0UHVibGljSW5zdGFuY2UoKSl9fWZ1bmN0
aW9uIHUoZSl7aWYocigpLCFiLmlzQmF0Y2hpbmdVcGRhdGVzKXJldHVybiB2b2lkIGIuYmF0Y2hl
ZFVwZGF0ZXModSxlKTtnLnB1c2goZSksbnVsbD09ZS5fdXBkYXRlQmF0Y2hOdW1iZXImJihlLl91
cGRhdGVCYXRjaE51bWJlcj15KzEpfWZ1bmN0aW9uIGwoZSx0KXtiLmlzQmF0Y2hpbmdVcGRhdGVz
fHxjKCIxMjUiKSxfLmVucXVldWUoZSx0KSxDPSEwfXZhciBjPWUoMTEyKSxwPWUoMTQzKSxkPWUo
NiksZj1lKDI0KSxoPWUoNTMpLG09ZSg2Niksdj1lKDg5KSxnPShlKDEzNyksW10pLHk9MCxfPWQu
Z2V0UG9vbGVkKCksQz0hMSxiPW51bGwsRT17aW5pdGlhbGl6ZTpmdW5jdGlvbigpe3RoaXMuZGly
dHlDb21wb25lbnRzTGVuZ3RoPWcubGVuZ3RofSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuZGlydHlD
b21wb25lbnRzTGVuZ3RoIT09Zy5sZW5ndGg/KGcuc3BsaWNlKDAsdGhpcy5kaXJ0eUNvbXBvbmVu
dHNMZW5ndGgpLFQoKSk6Zy5sZW5ndGg9MH19LHg9e2luaXRpYWxpemU6ZnVuY3Rpb24oKXt0aGlz
LmNhbGxiYWNrUXVldWUucmVzZXQoKX0sY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLmNhbGxiYWNrUXVl
dWUubm90aWZ5QWxsKCl9fSx3PVtFLHhdO3Aoby5wcm90b3R5cGUsdix7Z2V0VHJhbnNhY3Rpb25X
cmFwcGVyczpmdW5jdGlvbigpe3JldHVybiB3fSxkZXN0cnVjdG9yOmZ1bmN0aW9uKCl7dGhpcy5k
aXJ0eUNvbXBvbmVudHNMZW5ndGg9bnVsbCxkLnJlbGVhc2UodGhpcy5jYWxsYmFja1F1ZXVlKSx0
aGlzLmNhbGxiYWNrUXVldWU9bnVsbCxQLlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24ucmVsZWFz
ZSh0aGlzLnJlY29uY2lsZVRyYW5zYWN0aW9uKSx0aGlzLnJlY29uY2lsZVRyYW5zYWN0aW9uPW51
bGx9LHBlcmZvcm06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2LnBlcmZvcm0uY2FsbCh0aGlzLHRo
aXMucmVjb25jaWxlVHJhbnNhY3Rpb24ucGVyZm9ybSx0aGlzLnJlY29uY2lsZVRyYW5zYWN0aW9u
LGUsdCxuKX19KSxmLmFkZFBvb2xpbmdUbyhvKTt2YXIgVD1mdW5jdGlvbigpe2Zvcig7Zy5sZW5n
dGh8fEM7KXtpZihnLmxlbmd0aCl7dmFyIGU9by5nZXRQb29sZWQoKTtlLnBlcmZvcm0ocyxudWxs
LGUpLG8ucmVsZWFzZShlKX1pZihDKXtDPSExO3ZhciB0PV87Xz1kLmdldFBvb2xlZCgpLHQubm90
aWZ5QWxsKCksZC5yZWxlYXNlKHQpfX19LGs9e2luamVjdFJlY29uY2lsZVRyYW5zYWN0aW9uOmZ1
bmN0aW9uKGUpe2V8fGMoIjEyNiIpLFAuUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbj1lfSxpbmpl
Y3RCYXRjaGluZ1N0cmF0ZWd5OmZ1bmN0aW9uKGUpe2V8fGMoIjEyNyIpLCJmdW5jdGlvbiIhPXR5
cGVvZiBlLmJhdGNoZWRVcGRhdGVzJiZjKCIxMjgiKSwiYm9vbGVhbiIhPXR5cGVvZiBlLmlzQmF0
Y2hpbmdVcGRhdGVzJiZjKCIxMjkiKSxiPWV9fSxQPXtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9u
Om51bGwsYmF0Y2hlZFVwZGF0ZXM6aSxlbnF1ZXVlVXBkYXRlOnUsZmx1c2hCYXRjaGVkVXBkYXRl
czpULGluamVjdGlvbjprLGFzYXA6bH07dC5leHBvcnRzPVB9LHsxMTI6MTEyLDEzNzoxMzcsMTQz
OjE0MywyNDoyNCw1Mzo1Myw2OjYsNjY6NjYsODk6ODl9XSw3MjpbZnVuY3Rpb24oZSx0LG4peyJ1
c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9IjE1LjUuNCJ9LHt9XSw3MzpbZnVuY3Rpb24oZSx0LG4peyJ1
c2Ugc3RyaWN0Ijt2YXIgcj17eGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHht
bDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIn0sbz17YWNjZW50SGVpZ2h0
OiJhY2NlbnQtaGVpZ2h0IixhY2N1bXVsYXRlOjAsYWRkaXRpdmU6MCxhbGlnbm1lbnRCYXNlbGlu
ZToiYWxpZ25tZW50LWJhc2VsaW5lIixhbGxvd1Jlb3JkZXI6ImFsbG93UmVvcmRlciIsYWxwaGFi
ZXRpYzowLGFtcGxpdHVkZTowLGFyYWJpY0Zvcm06ImFyYWJpYy1mb3JtIixhc2NlbnQ6MCxhdHRy
aWJ1dGVOYW1lOiJhdHRyaWJ1dGVOYW1lIixhdHRyaWJ1dGVUeXBlOiJhdHRyaWJ1dGVUeXBlIixh
dXRvUmV2ZXJzZToiYXV0b1JldmVyc2UiLGF6aW11dGg6MCxiYXNlRnJlcXVlbmN5OiJiYXNlRnJl
cXVlbmN5IixiYXNlUHJvZmlsZToiYmFzZVByb2ZpbGUiLGJhc2VsaW5lU2hpZnQ6ImJhc2VsaW5l
LXNoaWZ0IixiYm94OjAsYmVnaW46MCxiaWFzOjAsYnk6MCxjYWxjTW9kZToiY2FsY01vZGUiLGNh
cEhlaWdodDoiY2FwLWhlaWdodCIsY2xpcDowLGNsaXBQYXRoOiJjbGlwLXBhdGgiLGNsaXBSdWxl
OiJjbGlwLXJ1bGUiLGNsaXBQYXRoVW5pdHM6ImNsaXBQYXRoVW5pdHMiLGNvbG9ySW50ZXJwb2xh
dGlvbjoiY29sb3ItaW50ZXJwb2xhdGlvbiIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoiY29s
b3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIixjb2xvclByb2ZpbGU6ImNvbG9yLXByb2ZpbGUiLGNv
bG9yUmVuZGVyaW5nOiJjb2xvci1yZW5kZXJpbmciLGNvbnRlbnRTY3JpcHRUeXBlOiJjb250ZW50
U2NyaXB0VHlwZSIsY29udGVudFN0eWxlVHlwZToiY29udGVudFN0eWxlVHlwZSIsY3Vyc29yOjAs
Y3g6MCxjeTowLGQ6MCxkZWNlbGVyYXRlOjAsZGVzY2VudDowLGRpZmZ1c2VDb25zdGFudDoiZGlm
ZnVzZUNvbnN0YW50IixkaXJlY3Rpb246MCxkaXNwbGF5OjAsZGl2aXNvcjowLGRvbWluYW50QmFz
ZWxpbmU6ImRvbWluYW50LWJhc2VsaW5lIixkdXI6MCxkeDowLGR5OjAsZWRnZU1vZGU6ImVkZ2VN
b2RlIixlbGV2YXRpb246MCxlbmFibGVCYWNrZ3JvdW5kOiJlbmFibGUtYmFja2dyb3VuZCIsZW5k
OjAsZXhwb25lbnQ6MCxleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOiJleHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkIixmaWxsOjAsZmlsbE9wYWNpdHk6ImZpbGwtb3BhY2l0eSIsZmlsbFJ1bGU6ImZp
bGwtcnVsZSIsZmlsdGVyOjAsZmlsdGVyUmVzOiJmaWx0ZXJSZXMiLGZpbHRlclVuaXRzOiJmaWx0
ZXJVbml0cyIsZmxvb2RDb2xvcjoiZmxvb2QtY29sb3IiLGZsb29kT3BhY2l0eToiZmxvb2Qtb3Bh
Y2l0eSIsZm9jdXNhYmxlOjAsZm9udEZhbWlseToiZm9udC1mYW1pbHkiLGZvbnRTaXplOiJmb250
LXNpemUiLGZvbnRTaXplQWRqdXN0OiJmb250LXNpemUtYWRqdXN0Iixmb250U3RyZXRjaDoiZm9u
dC1zdHJldGNoIixmb250U3R5bGU6ImZvbnQtc3R5bGUiLGZvbnRWYXJpYW50OiJmb250LXZhcmlh
bnQiLGZvbnRXZWlnaHQ6ImZvbnQtd2VpZ2h0Iixmb3JtYXQ6MCxmcm9tOjAsZng6MCxmeTowLGcx
OjAsZzI6MCxnbHlwaE5hbWU6ImdseXBoLW5hbWUiLGdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFs
OiJnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIixnbHlwaE9yaWVudGF0aW9uVmVydGljYWw6
ImdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsIixnbHlwaFJlZjoiZ2x5cGhSZWYiLGdyYWRpZW50
VHJhbnNmb3JtOiJncmFkaWVudFRyYW5zZm9ybSIsZ3JhZGllbnRVbml0czoiZ3JhZGllbnRVbml0
cyIsaGFuZ2luZzowLGhvcml6QWR2WDoiaG9yaXotYWR2LXgiLGhvcml6T3JpZ2luWDoiaG9yaXot
b3JpZ2luLXgiLGlkZW9ncmFwaGljOjAsaW1hZ2VSZW5kZXJpbmc6ImltYWdlLXJlbmRlcmluZyIs
aW46MCxpbjI6MCxpbnRlcmNlcHQ6MCxrOjAsazE6MCxrMjowLGszOjAsazQ6MCxrZXJuZWxNYXRy
aXg6Imtlcm5lbE1hdHJpeCIsa2VybmVsVW5pdExlbmd0aDoia2VybmVsVW5pdExlbmd0aCIsa2Vy
bmluZzowLGtleVBvaW50czoia2V5UG9pbnRzIixrZXlTcGxpbmVzOiJrZXlTcGxpbmVzIixrZXlU
aW1lczoia2V5VGltZXMiLGxlbmd0aEFkanVzdDoibGVuZ3RoQWRqdXN0IixsZXR0ZXJTcGFjaW5n
OiJsZXR0ZXItc3BhY2luZyIsbGlnaHRpbmdDb2xvcjoibGlnaHRpbmctY29sb3IiLGxpbWl0aW5n
Q29uZUFuZ2xlOiJsaW1pdGluZ0NvbmVBbmdsZSIsbG9jYWw6MCxtYXJrZXJFbmQ6Im1hcmtlci1l
bmQiLG1hcmtlck1pZDoibWFya2VyLW1pZCIsbWFya2VyU3RhcnQ6Im1hcmtlci1zdGFydCIsbWFy
a2VySGVpZ2h0OiJtYXJrZXJIZWlnaHQiLG1hcmtlclVuaXRzOiJtYXJrZXJVbml0cyIsbWFya2Vy
V2lkdGg6Im1hcmtlcldpZHRoIixtYXNrOjAsbWFza0NvbnRlbnRVbml0czoibWFza0NvbnRlbnRV
bml0cyIsbWFza1VuaXRzOiJtYXNrVW5pdHMiLG1hdGhlbWF0aWNhbDowLG1vZGU6MCxudW1PY3Rh
dmVzOiJudW1PY3RhdmVzIixvZmZzZXQ6MCxvcGFjaXR5OjAsb3BlcmF0b3I6MCxvcmRlcjowLG9y
aWVudDowLG9yaWVudGF0aW9uOjAsb3JpZ2luOjAsb3ZlcmZsb3c6MCxvdmVybGluZVBvc2l0aW9u
OiJvdmVybGluZS1wb3NpdGlvbiIsb3ZlcmxpbmVUaGlja25lc3M6Im92ZXJsaW5lLXRoaWNrbmVz
cyIscGFpbnRPcmRlcjoicGFpbnQtb3JkZXIiLHBhbm9zZTE6InBhbm9zZS0xIixwYXRoTGVuZ3Ro
OiJwYXRoTGVuZ3RoIixwYXR0ZXJuQ29udGVudFVuaXRzOiJwYXR0ZXJuQ29udGVudFVuaXRzIixw
YXR0ZXJuVHJhbnNmb3JtOiJwYXR0ZXJuVHJhbnNmb3JtIixwYXR0ZXJuVW5pdHM6InBhdHRlcm5V
bml0cyIscG9pbnRlckV2ZW50czoicG9pbnRlci1ldmVudHMiLHBvaW50czowLHBvaW50c0F0WDoi
cG9pbnRzQXRYIixwb2ludHNBdFk6InBvaW50c0F0WSIscG9pbnRzQXRaOiJwb2ludHNBdFoiLHBy
ZXNlcnZlQWxwaGE6InByZXNlcnZlQWxwaGEiLHByZXNlcnZlQXNwZWN0UmF0aW86InByZXNlcnZl
QXNwZWN0UmF0aW8iLHByaW1pdGl2ZVVuaXRzOiJwcmltaXRpdmVVbml0cyIscjowLHJhZGl1czow
LHJlZlg6InJlZlgiLHJlZlk6InJlZlkiLHJlbmRlcmluZ0ludGVudDoicmVuZGVyaW5nLWludGVu
dCIscmVwZWF0Q291bnQ6InJlcGVhdENvdW50IixyZXBlYXREdXI6InJlcGVhdER1ciIscmVxdWly
ZWRFeHRlbnNpb25zOiJyZXF1aXJlZEV4dGVuc2lvbnMiLHJlcXVpcmVkRmVhdHVyZXM6InJlcXVp
cmVkRmVhdHVyZXMiLHJlc3RhcnQ6MCxyZXN1bHQ6MCxyb3RhdGU6MCxyeDowLHJ5OjAsc2NhbGU6
MCxzZWVkOjAsc2hhcGVSZW5kZXJpbmc6InNoYXBlLXJlbmRlcmluZyIsc2xvcGU6MCxzcGFjaW5n
OjAsc3BlY3VsYXJDb25zdGFudDoic3BlY3VsYXJDb25zdGFudCIsc3BlY3VsYXJFeHBvbmVudDoi
c3BlY3VsYXJFeHBvbmVudCIsc3BlZWQ6MCxzcHJlYWRNZXRob2Q6InNwcmVhZE1ldGhvZCIsc3Rh
cnRPZmZzZXQ6InN0YXJ0T2Zmc2V0IixzdGREZXZpYXRpb246InN0ZERldmlhdGlvbiIsc3RlbWg6
MCxzdGVtdjowLHN0aXRjaFRpbGVzOiJzdGl0Y2hUaWxlcyIsc3RvcENvbG9yOiJzdG9wLWNvbG9y
IixzdG9wT3BhY2l0eToic3RvcC1vcGFjaXR5IixzdHJpa2V0aHJvdWdoUG9zaXRpb246InN0cmlr
ZXRocm91Z2gtcG9zaXRpb24iLHN0cmlrZXRocm91Z2hUaGlja25lc3M6InN0cmlrZXRocm91Z2gt
dGhpY2tuZXNzIixzdHJpbmc6MCxzdHJva2U6MCxzdHJva2VEYXNoYXJyYXk6InN0cm9rZS1kYXNo
YXJyYXkiLHN0cm9rZURhc2hvZmZzZXQ6InN0cm9rZS1kYXNob2Zmc2V0IixzdHJva2VMaW5lY2Fw
OiJzdHJva2UtbGluZWNhcCIsc3Ryb2tlTGluZWpvaW46InN0cm9rZS1saW5lam9pbiIsc3Ryb2tl
TWl0ZXJsaW1pdDoic3Ryb2tlLW1pdGVybGltaXQiLHN0cm9rZU9wYWNpdHk6InN0cm9rZS1vcGFj
aXR5IixzdHJva2VXaWR0aDoic3Ryb2tlLXdpZHRoIixzdXJmYWNlU2NhbGU6InN1cmZhY2VTY2Fs
ZSIsc3lzdGVtTGFuZ3VhZ2U6InN5c3RlbUxhbmd1YWdlIix0YWJsZVZhbHVlczoidGFibGVWYWx1
ZXMiLHRhcmdldFg6InRhcmdldFgiLHRhcmdldFk6InRhcmdldFkiLHRleHRBbmNob3I6InRleHQt
YW5jaG9yIix0ZXh0RGVjb3JhdGlvbjoidGV4dC1kZWNvcmF0aW9uIix0ZXh0UmVuZGVyaW5nOiJ0
ZXh0LXJlbmRlcmluZyIsdGV4dExlbmd0aDoidGV4dExlbmd0aCIsdG86MCx0cmFuc2Zvcm06MCx1
MTowLHUyOjAsdW5kZXJsaW5lUG9zaXRpb246InVuZGVybGluZS1wb3NpdGlvbiIsdW5kZXJsaW5l
VGhpY2tuZXNzOiJ1bmRlcmxpbmUtdGhpY2tuZXNzIix1bmljb2RlOjAsdW5pY29kZUJpZGk6InVu
aWNvZGUtYmlkaSIsdW5pY29kZVJhbmdlOiJ1bmljb2RlLXJhbmdlIix1bml0c1BlckVtOiJ1bml0
cy1wZXItZW0iLHZBbHBoYWJldGljOiJ2LWFscGhhYmV0aWMiLHZIYW5naW5nOiJ2LWhhbmdpbmci
LHZJZGVvZ3JhcGhpYzoidi1pZGVvZ3JhcGhpYyIsdk1hdGhlbWF0aWNhbDoidi1tYXRoZW1hdGlj
YWwiLHZhbHVlczowLHZlY3RvckVmZmVjdDoidmVjdG9yLWVmZmVjdCIsdmVyc2lvbjowLHZlcnRB
ZHZZOiJ2ZXJ0LWFkdi15Iix2ZXJ0T3JpZ2luWDoidmVydC1vcmlnaW4teCIsdmVydE9yaWdpblk6
InZlcnQtb3JpZ2luLXkiLHZpZXdCb3g6InZpZXdCb3giLHZpZXdUYXJnZXQ6InZpZXdUYXJnZXQi
LHZpc2liaWxpdHk6MCx3aWR0aHM6MCx3b3JkU3BhY2luZzoid29yZC1zcGFjaW5nIix3cml0aW5n
TW9kZToid3JpdGluZy1tb2RlIix4OjAseEhlaWdodDoieC1oZWlnaHQiLHgxOjAseDI6MCx4Q2hh
bm5lbFNlbGVjdG9yOiJ4Q2hhbm5lbFNlbGVjdG9yIix4bGlua0FjdHVhdGU6InhsaW5rOmFjdHVh
dGUiLHhsaW5rQXJjcm9sZToieGxpbms6YXJjcm9sZSIseGxpbmtIcmVmOiJ4bGluazpocmVmIix4
bGlua1JvbGU6InhsaW5rOnJvbGUiLHhsaW5rU2hvdzoieGxpbms6c2hvdyIseGxpbmtUaXRsZToi
eGxpbms6dGl0bGUiLHhsaW5rVHlwZToieGxpbms6dHlwZSIseG1sQmFzZToieG1sOmJhc2UiLHht
bG5zOjAseG1sbnNYbGluazoieG1sbnM6eGxpbmsiLHhtbExhbmc6InhtbDpsYW5nIix4bWxTcGFj
ZToieG1sOnNwYWNlIix5OjAseTE6MCx5MjowLHlDaGFubmVsU2VsZWN0b3I6InlDaGFubmVsU2Vs
ZWN0b3IiLHo6MCx6b29tQW5kUGFuOiJ6b29tQW5kUGFuIn0saT17UHJvcGVydGllczp7fSxET01B
dHRyaWJ1dGVOYW1lc3BhY2VzOnt4bGlua0FjdHVhdGU6ci54bGluayx4bGlua0FyY3JvbGU6ci54
bGluayx4bGlua0hyZWY6ci54bGluayx4bGlua1JvbGU6ci54bGluayx4bGlua1Nob3c6ci54bGlu
ayx4bGlua1RpdGxlOnIueGxpbmsseGxpbmtUeXBlOnIueGxpbmsseG1sQmFzZTpyLnhtbCx4bWxM
YW5nOnIueG1sLHhtbFNwYWNlOnIueG1sfSxET01BdHRyaWJ1dGVOYW1lczp7fX07T2JqZWN0Lmtl
eXMobykuZm9yRWFjaChmdW5jdGlvbihlKXtpLlByb3BlcnRpZXNbZV09MCxvW2VdJiYoaS5ET01B
dHRyaWJ1dGVOYW1lc1tlXT1vW2VdKX0pLHQuZXhwb3J0cz1pfSx7fV0sNzQ6W2Z1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZigic2VsZWN0aW9uU3RhcnQiaW4gZSYm
dS5oYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMoZSkpcmV0dXJue3N0YXJ0OmUuc2VsZWN0aW9uU3Rh
cnQsZW5kOmUuc2VsZWN0aW9uRW5kfTtpZih3aW5kb3cuZ2V0U2VsZWN0aW9uKXt2YXIgdD13aW5k
b3cuZ2V0U2VsZWN0aW9uKCk7cmV0dXJue2FuY2hvck5vZGU6dC5hbmNob3JOb2RlLGFuY2hvck9m
ZnNldDp0LmFuY2hvck9mZnNldCxmb2N1c05vZGU6dC5mb2N1c05vZGUsZm9jdXNPZmZzZXQ6dC5m
b2N1c09mZnNldH19aWYoZG9jdW1lbnQuc2VsZWN0aW9uKXt2YXIgbj1kb2N1bWVudC5zZWxlY3Rp
b24uY3JlYXRlUmFuZ2UoKTtyZXR1cm57cGFyZW50RWxlbWVudDpuLnBhcmVudEVsZW1lbnQoKSx0
ZXh0Om4udGV4dCx0b3A6bi5ib3VuZGluZ1RvcCxsZWZ0Om4uYm91bmRpbmdMZWZ0fX19ZnVuY3Rp
b24gbyhlLHQpe2lmKHl8fG51bGw9PW18fG0hPT1jKCkpcmV0dXJuIG51bGw7dmFyIG49cihtKTtp
ZighZ3x8IWQoZyxuKSl7Zz1uO3ZhciBvPWwuZ2V0UG9vbGVkKGguc2VsZWN0LHYsZSx0KTtyZXR1
cm4gby50eXBlPSJzZWxlY3QiLG8udGFyZ2V0PW0saS5hY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRj
aGVzKG8pLG99cmV0dXJuIG51bGx9dmFyIGk9ZSgxOSksYT1lKDEyMykscz1lKDMzKSx1PWUoNTYp
LGw9ZSg4MCksYz1lKDEzMikscD1lKDExMCksZD1lKDE0MSksZj1hLmNhblVzZURPTSYmImRvY3Vt
ZW50TW9kZSJpbiBkb2N1bWVudCYmZG9jdW1lbnQuZG9jdW1lbnRNb2RlPD0xMSxoPXtzZWxlY3Q6
e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOiJvblNlbGVjdCIsY2FwdHVyZWQ6Im9u
U2VsZWN0Q2FwdHVyZSJ9LGRlcGVuZGVuY2llczpbInRvcEJsdXIiLCJ0b3BDb250ZXh0TWVudSIs
InRvcEZvY3VzIiwidG9wS2V5RG93biIsInRvcEtleVVwIiwidG9wTW91c2VEb3duIiwidG9wTW91
c2VVcCIsInRvcFNlbGVjdGlvbkNoYW5nZSJdfX0sbT1udWxsLHY9bnVsbCxnPW51bGwseT0hMSxf
PSExLEM9e2V2ZW50VHlwZXM6aCxleHRyYWN0RXZlbnRzOmZ1bmN0aW9uKGUsdCxuLHIpe2lmKCFf
KXJldHVybiBudWxsO3ZhciBpPXQ/cy5nZXROb2RlRnJvbUluc3RhbmNlKHQpOndpbmRvdztzd2l0
Y2goZSl7Y2FzZSJ0b3BGb2N1cyI6KHAoaSl8fCJ0cnVlIj09PWkuY29udGVudEVkaXRhYmxlKSYm
KG09aSx2PXQsZz1udWxsKTticmVhaworO2Nhc2UidG9wQmx1ciI6bT1udWxsLHY9bnVsbCxnPW51
bGw7YnJlYWs7Y2FzZSJ0b3BNb3VzZURvd24iOnk9ITA7YnJlYWs7Y2FzZSJ0b3BDb250ZXh0TWVu
dSI6Y2FzZSJ0b3BNb3VzZVVwIjpyZXR1cm4geT0hMSxvKG4scik7Y2FzZSJ0b3BTZWxlY3Rpb25D
aGFuZ2UiOmlmKGYpYnJlYWs7Y2FzZSJ0b3BLZXlEb3duIjpjYXNlInRvcEtleVVwIjpyZXR1cm4g
byhuLHIpfXJldHVybiBudWxsfSxkaWRQdXRMaXN0ZW5lcjpmdW5jdGlvbihlLHQsbil7Im9uU2Vs
ZWN0Ij09PXQmJihfPSEwKX19O3QuZXhwb3J0cz1DfSx7MTEwOjExMCwxMjM6MTIzLDEzMjoxMzIs
MTQxOjE0MSwxOToxOSwzMzozMyw1Njo1Niw4MDo4MH1dLDc1OltmdW5jdGlvbihlLHQsbil7InVz
ZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIi4iK2UuX3Jvb3ROb2RlSUR9ZnVuY3Rpb24g
byhlKXtyZXR1cm4iYnV0dG9uIj09PWV8fCJpbnB1dCI9PT1lfHwic2VsZWN0Ij09PWV8fCJ0ZXh0
YXJlYSI9PT1lfXZhciBpPWUoMTEyKSxhPWUoMTIyKSxzPWUoMTkpLHU9ZSgzMyksbD1lKDc2KSxj
PWUoNzcpLHA9ZSg4MCksZD1lKDgxKSxmPWUoODMpLGg9ZSg4NCksbT1lKDc5KSx2PWUoODUpLGc9
ZSg4NikseT1lKDg3KSxfPWUoODgpLEM9ZSgxMjkpLGI9ZSg5OSksRT0oZSgxMzcpLHt9KSx4PXt9
O1siYWJvcnQiLCJhbmltYXRpb25FbmQiLCJhbmltYXRpb25JdGVyYXRpb24iLCJhbmltYXRpb25T
dGFydCIsImJsdXIiLCJjYW5QbGF5IiwiY2FuUGxheVRocm91Z2giLCJjbGljayIsImNvbnRleHRN
ZW51IiwiY29weSIsImN1dCIsImRvdWJsZUNsaWNrIiwiZHJhZyIsImRyYWdFbmQiLCJkcmFnRW50
ZXIiLCJkcmFnRXhpdCIsImRyYWdMZWF2ZSIsImRyYWdPdmVyIiwiZHJhZ1N0YXJ0IiwiZHJvcCIs
ImR1cmF0aW9uQ2hhbmdlIiwiZW1wdGllZCIsImVuY3J5cHRlZCIsImVuZGVkIiwiZXJyb3IiLCJm
b2N1cyIsImlucHV0IiwiaW52YWxpZCIsImtleURvd24iLCJrZXlQcmVzcyIsImtleVVwIiwibG9h
ZCIsImxvYWRlZERhdGEiLCJsb2FkZWRNZXRhZGF0YSIsImxvYWRTdGFydCIsIm1vdXNlRG93biIs
Im1vdXNlTW92ZSIsIm1vdXNlT3V0IiwibW91c2VPdmVyIiwibW91c2VVcCIsInBhc3RlIiwicGF1
c2UiLCJwbGF5IiwicGxheWluZyIsInByb2dyZXNzIiwicmF0ZUNoYW5nZSIsInJlc2V0Iiwic2Ny
b2xsIiwic2Vla2VkIiwic2Vla2luZyIsInN0YWxsZWQiLCJzdWJtaXQiLCJzdXNwZW5kIiwidGlt
ZVVwZGF0ZSIsInRvdWNoQ2FuY2VsIiwidG91Y2hFbmQiLCJ0b3VjaE1vdmUiLCJ0b3VjaFN0YXJ0
IiwidHJhbnNpdGlvbkVuZCIsInZvbHVtZUNoYW5nZSIsIndhaXRpbmciLCJ3aGVlbCJdLmZvckVh
Y2goZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSksbj0ib24i
K3Qscj0idG9wIit0LG89e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOm4sY2FwdHVy
ZWQ6bisiQ2FwdHVyZSJ9LGRlcGVuZGVuY2llczpbcl19O0VbZV09byx4W3JdPW99KTt2YXIgdz17
fSxUPXtldmVudFR5cGVzOkUsZXh0cmFjdEV2ZW50czpmdW5jdGlvbihlLHQsbixyKXt2YXIgbz14
W2VdO2lmKCFvKXJldHVybiBudWxsO3ZhciBhO3N3aXRjaChlKXtjYXNlInRvcEFib3J0IjpjYXNl
InRvcENhblBsYXkiOmNhc2UidG9wQ2FuUGxheVRocm91Z2giOmNhc2UidG9wRHVyYXRpb25DaGFu
Z2UiOmNhc2UidG9wRW1wdGllZCI6Y2FzZSJ0b3BFbmNyeXB0ZWQiOmNhc2UidG9wRW5kZWQiOmNh
c2UidG9wRXJyb3IiOmNhc2UidG9wSW5wdXQiOmNhc2UidG9wSW52YWxpZCI6Y2FzZSJ0b3BMb2Fk
IjpjYXNlInRvcExvYWRlZERhdGEiOmNhc2UidG9wTG9hZGVkTWV0YWRhdGEiOmNhc2UidG9wTG9h
ZFN0YXJ0IjpjYXNlInRvcFBhdXNlIjpjYXNlInRvcFBsYXkiOmNhc2UidG9wUGxheWluZyI6Y2Fz
ZSJ0b3BQcm9ncmVzcyI6Y2FzZSJ0b3BSYXRlQ2hhbmdlIjpjYXNlInRvcFJlc2V0IjpjYXNlInRv
cFNlZWtlZCI6Y2FzZSJ0b3BTZWVraW5nIjpjYXNlInRvcFN0YWxsZWQiOmNhc2UidG9wU3VibWl0
IjpjYXNlInRvcFN1c3BlbmQiOmNhc2UidG9wVGltZVVwZGF0ZSI6Y2FzZSJ0b3BWb2x1bWVDaGFu
Z2UiOmNhc2UidG9wV2FpdGluZyI6YT1wO2JyZWFrO2Nhc2UidG9wS2V5UHJlc3MiOmlmKDA9PT1i
KG4pKXJldHVybiBudWxsO2Nhc2UidG9wS2V5RG93biI6Y2FzZSJ0b3BLZXlVcCI6YT1mO2JyZWFr
O2Nhc2UidG9wQmx1ciI6Y2FzZSJ0b3BGb2N1cyI6YT1kO2JyZWFrO2Nhc2UidG9wQ2xpY2siOmlm
KDI9PT1uLmJ1dHRvbilyZXR1cm4gbnVsbDtjYXNlInRvcERvdWJsZUNsaWNrIjpjYXNlInRvcE1v
dXNlRG93biI6Y2FzZSJ0b3BNb3VzZU1vdmUiOmNhc2UidG9wTW91c2VVcCI6Y2FzZSJ0b3BNb3Vz
ZU91dCI6Y2FzZSJ0b3BNb3VzZU92ZXIiOmNhc2UidG9wQ29udGV4dE1lbnUiOmE9aDticmVhaztj
YXNlInRvcERyYWciOmNhc2UidG9wRHJhZ0VuZCI6Y2FzZSJ0b3BEcmFnRW50ZXIiOmNhc2UidG9w
RHJhZ0V4aXQiOmNhc2UidG9wRHJhZ0xlYXZlIjpjYXNlInRvcERyYWdPdmVyIjpjYXNlInRvcERy
YWdTdGFydCI6Y2FzZSJ0b3BEcm9wIjphPW07YnJlYWs7Y2FzZSJ0b3BUb3VjaENhbmNlbCI6Y2Fz
ZSJ0b3BUb3VjaEVuZCI6Y2FzZSJ0b3BUb3VjaE1vdmUiOmNhc2UidG9wVG91Y2hTdGFydCI6YT12
O2JyZWFrO2Nhc2UidG9wQW5pbWF0aW9uRW5kIjpjYXNlInRvcEFuaW1hdGlvbkl0ZXJhdGlvbiI6
Y2FzZSJ0b3BBbmltYXRpb25TdGFydCI6YT1sO2JyZWFrO2Nhc2UidG9wVHJhbnNpdGlvbkVuZCI6
YT1nO2JyZWFrO2Nhc2UidG9wU2Nyb2xsIjphPXk7YnJlYWs7Y2FzZSJ0b3BXaGVlbCI6YT1fO2Jy
ZWFrO2Nhc2UidG9wQ29weSI6Y2FzZSJ0b3BDdXQiOmNhc2UidG9wUGFzdGUiOmE9Y31hfHxpKCI4
NiIsZSk7dmFyIHU9YS5nZXRQb29sZWQobyx0LG4scik7cmV0dXJuIHMuYWNjdW11bGF0ZVR3b1Bo
YXNlRGlzcGF0Y2hlcyh1KSx1fSxkaWRQdXRMaXN0ZW5lcjpmdW5jdGlvbihlLHQsbil7aWYoIm9u
Q2xpY2siPT09dCYmIW8oZS5fdGFnKSl7dmFyIGk9cihlKSxzPXUuZ2V0Tm9kZUZyb21JbnN0YW5j
ZShlKTt3W2ldfHwod1tpXT1hLmxpc3RlbihzLCJjbGljayIsQykpfX0sd2lsbERlbGV0ZUxpc3Rl
bmVyOmZ1bmN0aW9uKGUsdCl7aWYoIm9uQ2xpY2siPT09dCYmIW8oZS5fdGFnKSl7dmFyIG49cihl
KTt3W25dLnJlbW92ZSgpLGRlbGV0ZSB3W25dfX19O3QuZXhwb3J0cz1UfSx7MTEyOjExMiwxMjI6
MTIyLDEyOToxMjksMTM3OjEzNywxOToxOSwzMzozMyw3Njo3Niw3Nzo3Nyw3OTo3OSw4MDo4MCw4
MTo4MSw4Mzo4Myw4NDo4NCw4NTo4NSw4Njo4Niw4Nzo4Nyw4ODo4OCw5OTo5OX1dLDc2OltmdW5j
dGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7cmV0dXJuIG8uY2Fs
bCh0aGlzLGUsdCxuLHIpfXZhciBvPWUoODApLGk9e2FuaW1hdGlvbk5hbWU6bnVsbCxlbGFwc2Vk
VGltZTpudWxsLHBzZXVkb0VsZW1lbnQ6bnVsbH07by5hdWdtZW50Q2xhc3MocixpKSx0LmV4cG9y
dHM9cn0sezgwOjgwfV0sNzc6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24g
cihlLHQsbixyKXtyZXR1cm4gby5jYWxsKHRoaXMsZSx0LG4scil9dmFyIG89ZSg4MCksaT17Y2xp
cGJvYXJkRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4iY2xpcGJvYXJkRGF0YSJpbiBlP2UuY2xpcGJv
YXJkRGF0YTp3aW5kb3cuY2xpcGJvYXJkRGF0YX19O28uYXVnbWVudENsYXNzKHIsaSksdC5leHBv
cnRzPXJ9LHs4MDo4MH1dLDc4OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9u
IHIoZSx0LG4scil7cmV0dXJuIG8uY2FsbCh0aGlzLGUsdCxuLHIpfXZhciBvPWUoODApLGk9e2Rh
dGE6bnVsbH07by5hdWdtZW50Q2xhc3MocixpKSx0LmV4cG9ydHM9cn0sezgwOjgwfV0sNzk6W2Z1
bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXtyZXR1cm4gby5j
YWxsKHRoaXMsZSx0LG4scil9dmFyIG89ZSg4NCksaT17ZGF0YVRyYW5zZmVyOm51bGx9O28uYXVn
bWVudENsYXNzKHIsaSksdC5leHBvcnRzPXJ9LHs4NDo4NH1dLDgwOltmdW5jdGlvbihlLHQsbil7
InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7dGhpcy5kaXNwYXRjaENvbmZpZz1lLHRo
aXMuX3RhcmdldEluc3Q9dCx0aGlzLm5hdGl2ZUV2ZW50PW47dmFyIG89dGhpcy5jb25zdHJ1Y3Rv
ci5JbnRlcmZhY2U7Zm9yKHZhciBpIGluIG8paWYoby5oYXNPd25Qcm9wZXJ0eShpKSl7dmFyIHM9
b1tpXTtzP3RoaXNbaV09cyhuKToidGFyZ2V0Ij09PWk/dGhpcy50YXJnZXQ9cjp0aGlzW2ldPW5b
aV19dmFyIHU9bnVsbCE9bi5kZWZhdWx0UHJldmVudGVkP24uZGVmYXVsdFByZXZlbnRlZDohMT09
PW4ucmV0dXJuVmFsdWU7cmV0dXJuIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPXU/YS50aGF0UmV0
dXJuc1RydWU6YS50aGF0UmV0dXJuc0ZhbHNlLHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9YS50
aGF0UmV0dXJuc0ZhbHNlLHRoaXN9dmFyIG89ZSgxNDMpLGk9ZSgyNCksYT1lKDEyOSkscz0oZSgx
NDIpLFsiZGlzcGF0Y2hDb25maWciLCJfdGFyZ2V0SW5zdCIsIm5hdGl2ZUV2ZW50IiwiaXNEZWZh
dWx0UHJldmVudGVkIiwiaXNQcm9wYWdhdGlvblN0b3BwZWQiLCJfZGlzcGF0Y2hMaXN0ZW5lcnMi
LCJfZGlzcGF0Y2hJbnN0YW5jZXMiXSksdT17dHlwZTpudWxsLHRhcmdldDpudWxsLGN1cnJlbnRU
YXJnZXQ6YS50aGF0UmV0dXJuc051bGwsZXZlbnRQaGFzZTpudWxsLGJ1YmJsZXM6bnVsbCxjYW5j
ZWxhYmxlOm51bGwsdGltZVN0YW1wOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRpbWVTdGFtcHx8RGF0
ZS5ub3coKX0sZGVmYXVsdFByZXZlbnRlZDpudWxsLGlzVHJ1c3RlZDpudWxsfTtvKHIucHJvdG90
eXBlLHtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuZGVmYXVsdFByZXZlbnRlZD0hMDt2
YXIgZT10aGlzLm5hdGl2ZUV2ZW50O2UmJihlLnByZXZlbnREZWZhdWx0P2UucHJldmVudERlZmF1
bHQoKToidW5rbm93biIhPXR5cGVvZiBlLnJldHVyblZhbHVlJiYoZS5yZXR1cm5WYWx1ZT0hMSks
dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9YS50aGF0UmV0dXJuc1RydWUpfSxzdG9wUHJvcGFnYXRp
b246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm5hdGl2ZUV2ZW50O2UmJihlLnN0b3BQcm9wYWdhdGlv
bj9lLnN0b3BQcm9wYWdhdGlvbigpOiJ1bmtub3duIiE9dHlwZW9mIGUuY2FuY2VsQnViYmxlJiYo
ZS5jYW5jZWxCdWJibGU9ITApLHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9YS50aGF0UmV0dXJu
c1RydWUpfSxwZXJzaXN0OmZ1bmN0aW9uKCl7dGhpcy5pc1BlcnNpc3RlbnQ9YS50aGF0UmV0dXJu
c1RydWV9LGlzUGVyc2lzdGVudDphLnRoYXRSZXR1cm5zRmFsc2UsZGVzdHJ1Y3RvcjpmdW5jdGlv
bigpe3ZhciBlPXRoaXMuY29uc3RydWN0b3IuSW50ZXJmYWNlO2Zvcih2YXIgdCBpbiBlKXRoaXNb
dF09bnVsbDtmb3IodmFyIG49MDtuPHMubGVuZ3RoO24rKyl0aGlzW3Nbbl1dPW51bGx9fSksci5J
bnRlcmZhY2U9dSxyLmF1Z21lbnRDbGFzcz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1mdW5j
dGlvbigpe307ci5wcm90b3R5cGU9bi5wcm90b3R5cGU7dmFyIGE9bmV3IHI7byhhLGUucHJvdG90
eXBlKSxlLnByb3RvdHlwZT1hLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5JbnRlcmZhY2U9
byh7fSxuLkludGVyZmFjZSx0KSxlLmF1Z21lbnRDbGFzcz1uLmF1Z21lbnRDbGFzcyxpLmFkZFBv
b2xpbmdUbyhlLGkuZm91ckFyZ3VtZW50UG9vbGVyKX0saS5hZGRQb29saW5nVG8ocixpLmZvdXJB
cmd1bWVudFBvb2xlciksdC5leHBvcnRzPXJ9LHsxMjk6MTI5LDE0MjoxNDIsMTQzOjE0MywyNDoy
NH1dLDgxOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7
cmV0dXJuIG8uY2FsbCh0aGlzLGUsdCxuLHIpfXZhciBvPWUoODcpLGk9e3JlbGF0ZWRUYXJnZXQ6
bnVsbH07by5hdWdtZW50Q2xhc3MocixpKSx0LmV4cG9ydHM9cn0sezg3Ojg3fV0sODI6W2Z1bmN0
aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXtyZXR1cm4gby5jYWxs
KHRoaXMsZSx0LG4scil9dmFyIG89ZSg4MCksaT17ZGF0YTpudWxsfTtvLmF1Z21lbnRDbGFzcyhy
LGkpLHQuZXhwb3J0cz1yfSx7ODA6ODB9XSw4MzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0
IjtmdW5jdGlvbiByKGUsdCxuLHIpe3JldHVybiBvLmNhbGwodGhpcyxlLHQsbixyKX12YXIgbz1l
KDg3KSxpPWUoOTkpLGE9ZSgxMDApLHM9ZSgxMDEpLHU9e2tleTphLGxvY2F0aW9uOm51bGwsY3Ry
bEtleTpudWxsLHNoaWZ0S2V5Om51bGwsYWx0S2V5Om51bGwsbWV0YUtleTpudWxsLHJlcGVhdDpu
dWxsLGxvY2FsZTpudWxsLGdldE1vZGlmaWVyU3RhdGU6cyxjaGFyQ29kZTpmdW5jdGlvbihlKXty
ZXR1cm4ia2V5cHJlc3MiPT09ZS50eXBlP2koZSk6MH0sa2V5Q29kZTpmdW5jdGlvbihlKXtyZXR1
cm4ia2V5ZG93biI9PT1lLnR5cGV8fCJrZXl1cCI9PT1lLnR5cGU/ZS5rZXlDb2RlOjB9LHdoaWNo
OmZ1bmN0aW9uKGUpe3JldHVybiJrZXlwcmVzcyI9PT1lLnR5cGU/aShlKToia2V5ZG93biI9PT1l
LnR5cGV8fCJrZXl1cCI9PT1lLnR5cGU/ZS5rZXlDb2RlOjB9fTtvLmF1Z21lbnRDbGFzcyhyLHUp
LHQuZXhwb3J0cz1yfSx7MTAwOjEwMCwxMDE6MTAxLDg3Ojg3LDk5Ojk5fV0sODQ6W2Z1bmN0aW9u
KGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXtyZXR1cm4gby5jYWxsKHRo
aXMsZSx0LG4scil9dmFyIG89ZSg4NyksaT1lKDkwKSxhPWUoMTAxKSxzPXtzY3JlZW5YOm51bGws
c2NyZWVuWTpudWxsLGNsaWVudFg6bnVsbCxjbGllbnRZOm51bGwsY3RybEtleTpudWxsLHNoaWZ0
S2V5Om51bGwsYWx0S2V5Om51bGwsbWV0YUtleTpudWxsLGdldE1vZGlmaWVyU3RhdGU6YSxidXR0
b246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5idXR0b247cmV0dXJuIndoaWNoImluIGU/dDoyPT09dD8y
OjQ9PT10PzE6MH0sYnV0dG9uczpudWxsLHJlbGF0ZWRUYXJnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJu
IGUucmVsYXRlZFRhcmdldHx8KGUuZnJvbUVsZW1lbnQ9PT1lLnNyY0VsZW1lbnQ/ZS50b0VsZW1l
bnQ6ZS5mcm9tRWxlbWVudCl9LHBhZ2VYOmZ1bmN0aW9uKGUpe3JldHVybiJwYWdlWCJpbiBlP2Uu
cGFnZVg6ZS5jbGllbnRYK2kuY3VycmVudFNjcm9sbExlZnR9LHBhZ2VZOmZ1bmN0aW9uKGUpe3Jl
dHVybiJwYWdlWSJpbiBlP2UucGFnZVk6ZS5jbGllbnRZK2kuY3VycmVudFNjcm9sbFRvcH19O28u
YXVnbWVudENsYXNzKHIscyksdC5leHBvcnRzPXJ9LHsxMDE6MTAxLDg3Ojg3LDkwOjkwfV0sODU6
W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXtyZXR1cm4g
by5jYWxsKHRoaXMsZSx0LG4scil9dmFyIG89ZSg4NyksaT1lKDEwMSksYT17dG91Y2hlczpudWxs
LHRhcmdldFRvdWNoZXM6bnVsbCxjaGFuZ2VkVG91Y2hlczpudWxsLGFsdEtleTpudWxsLG1ldGFL
ZXk6bnVsbCxjdHJsS2V5Om51bGwsc2hpZnRLZXk6bnVsbCxnZXRNb2RpZmllclN0YXRlOml9O28u
YXVnbWVudENsYXNzKHIsYSksdC5leHBvcnRzPXJ9LHsxMDE6MTAxLDg3Ojg3fV0sODY6W2Z1bmN0
aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXtyZXR1cm4gby5jYWxs
KHRoaXMsZSx0LG4scil9dmFyIG89ZSg4MCksaT17cHJvcGVydHlOYW1lOm51bGwsZWxhcHNlZFRp
bWU6bnVsbCxwc2V1ZG9FbGVtZW50Om51bGx9O28uYXVnbWVudENsYXNzKHIsaSksdC5leHBvcnRz
PXJ9LHs4MDo4MH1dLDg3OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIo
ZSx0LG4scil7cmV0dXJuIG8uY2FsbCh0aGlzLGUsdCxuLHIpfXZhciBvPWUoODApLGk9ZSgxMDIp
LGE9e3ZpZXc6ZnVuY3Rpb24oZSl7aWYoZS52aWV3KXJldHVybiBlLnZpZXc7dmFyIHQ9aShlKTtp
Zih0LndpbmRvdz09PXQpcmV0dXJuIHQ7dmFyIG49dC5vd25lckRvY3VtZW50O3JldHVybiBuP24u
ZGVmYXVsdFZpZXd8fG4ucGFyZW50V2luZG93OndpbmRvd30sZGV0YWlsOmZ1bmN0aW9uKGUpe3Jl
dHVybiBlLmRldGFpbHx8MH19O28uYXVnbWVudENsYXNzKHIsYSksdC5leHBvcnRzPXJ9LHsxMDI6
MTAyLDgwOjgwfV0sODg6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihl
LHQsbixyKXtyZXR1cm4gby5jYWxsKHRoaXMsZSx0LG4scil9dmFyIG89ZSg4NCksaT17ZGVsdGFY
OmZ1bmN0aW9uKGUpe3JldHVybiJkZWx0YVgiaW4gZT9lLmRlbHRhWDoid2hlZWxEZWx0YVgiaW4g
ZT8tZS53aGVlbERlbHRhWDowfSxkZWx0YVk6ZnVuY3Rpb24oZSl7cmV0dXJuImRlbHRhWSJpbiBl
P2UuZGVsdGFZOiJ3aGVlbERlbHRhWSJpbiBlPy1lLndoZWVsRGVsdGFZOiJ3aGVlbERlbHRhImlu
IGU/LWUud2hlZWxEZWx0YTowfSxkZWx0YVo6bnVsbCxkZWx0YU1vZGU6bnVsbH07by5hdWdtZW50
Q2xhc3MocixpKSx0LmV4cG9ydHM9cn0sezg0Ojg0fV0sODk6W2Z1bmN0aW9uKGUsdCxuKXsidXNl
IHN0cmljdCI7dmFyIHI9ZSgxMTIpLG89KGUoMTM3KSx7fSksaT17cmVpbml0aWFsaXplVHJhbnNh
Y3Rpb246ZnVuY3Rpb24oKXt0aGlzLnRyYW5zYWN0aW9uV3JhcHBlcnM9dGhpcy5nZXRUcmFuc2Fj
dGlvbldyYXBwZXJzKCksdGhpcy53cmFwcGVySW5pdERhdGE/dGhpcy53cmFwcGVySW5pdERhdGEu
bGVuZ3RoPTA6dGhpcy53cmFwcGVySW5pdERhdGE9W10sdGhpcy5faXNJblRyYW5zYWN0aW9uPSEx
fSxfaXNJblRyYW5zYWN0aW9uOiExLGdldFRyYW5zYWN0aW9uV3JhcHBlcnM6bnVsbCxpc0luVHJh
bnNhY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2lzSW5UcmFuc2FjdGlvbn0scGVyZm9y
bTpmdW5jdGlvbihlLHQsbixvLGksYSxzLHUpe3RoaXMuaXNJblRyYW5zYWN0aW9uKCkmJnIoIjI3
Iik7dmFyIGwsYzt0cnl7dGhpcy5faXNJblRyYW5zYWN0aW9uPSEwLGw9ITAsdGhpcy5pbml0aWFs
aXplQWxsKDApLGM9ZS5jYWxsKHQsbixvLGksYSxzLHUpLGw9ITF9ZmluYWxseXt0cnl7aWYobCl0
cnl7dGhpcy5jbG9zZUFsbCgwKX1jYXRjaChlKXt9ZWxzZSB0aGlzLmNsb3NlQWxsKDApfWZpbmFs
bHl7dGhpcy5faXNJblRyYW5zYWN0aW9uPSExfX1yZXR1cm4gY30saW5pdGlhbGl6ZUFsbDpmdW5j
dGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cmFuc2FjdGlvbldyYXBwZXJzLG49ZTtuPHQubGVuZ3Ro
O24rKyl7dmFyIHI9dFtuXTt0cnl7dGhpcy53cmFwcGVySW5pdERhdGFbbl09byx0aGlzLndyYXBw
ZXJJbml0RGF0YVtuXT1yLmluaXRpYWxpemU/ci5pbml0aWFsaXplLmNhbGwodGhpcyk6bnVsbH1m
aW5hbGx5e2lmKHRoaXMud3JhcHBlckluaXREYXRhW25dPT09byl0cnl7dGhpcy5pbml0aWFsaXpl
QWxsKG4rMSl9Y2F0Y2goZSl7fX19fSxjbG9zZUFsbDpmdW5jdGlvbihlKXt0aGlzLmlzSW5UcmFu
c2FjdGlvbigpfHxyKCIyOCIpO2Zvcih2YXIgdD10aGlzLnRyYW5zYWN0aW9uV3JhcHBlcnMsbj1l
O248dC5sZW5ndGg7bisrKXt2YXIgaSxhPXRbbl0scz10aGlzLndyYXBwZXJJbml0RGF0YVtuXTt0
cnl7aT0hMCxzIT09byYmYS5jbG9zZSYmYS5jbG9zZS5jYWxsKHRoaXMscyksaT0hMX1maW5hbGx5
e2lmKGkpdHJ5e3RoaXMuY2xvc2VBbGwobisxKX1jYXRjaChlKXt9fX10aGlzLndyYXBwZXJJbml0
RGF0YS5sZW5ndGg9MH19O3QuZXhwb3J0cz1pfSx7MTEyOjExMiwxMzc6MTM3fV0sOTA6W2Z1bmN0
aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9e2N1cnJlbnRTY3JvbGxMZWZ0OjAsY3VycmVu
dFNjcm9sbFRvcDowLHJlZnJlc2hTY3JvbGxWYWx1ZXM6ZnVuY3Rpb24oZSl7ci5jdXJyZW50U2Ny
b2xsTGVmdD1lLngsci5jdXJyZW50U2Nyb2xsVG9wPWUueX19O3QuZXhwb3J0cz1yfSx7fV0sOTE6
W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBudWxs
PT10JiZvKCIzMCIpLG51bGw9PWU/dDpBcnJheS5pc0FycmF5KGUpP0FycmF5LmlzQXJyYXkodCk/
KGUucHVzaC5hcHBseShlLHQpLGUpOihlLnB1c2godCksZSk6QXJyYXkuaXNBcnJheSh0KT9bZV0u
Y29uY2F0KHQpOltlLHRdfXZhciBvPWUoMTEyKTtlKDEzNyk7dC5leHBvcnRzPXJ9LHsxMTI6MTEy
LDEzNzoxMzd9XSw5MjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUp
e2Zvcih2YXIgdD0xLG49MCxyPTAsaT1lLmxlbmd0aCxhPS00Jmk7cjxhOyl7Zm9yKHZhciBzPU1h
dGgubWluKHIrNDA5NixhKTtyPHM7cis9NCluKz0odCs9ZS5jaGFyQ29kZUF0KHIpKSsodCs9ZS5j
aGFyQ29kZUF0KHIrMSkpKyh0Kz1lLmNoYXJDb2RlQXQocisyKSkrKHQrPWUuY2hhckNvZGVBdChy
KzMpKTt0JT1vLG4lPW99Zm9yKDtyPGk7cisrKW4rPXQrPWUuY2hhckNvZGVBdChyKTtyZXR1cm4g
dCU9byxuJT1vLHR8bjw8MTZ9dmFyIG89NjU1MjE7dC5leHBvcnRzPXJ9LHt9XSw5MzpbZnVuY3Rp
b24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVk
IiE9dHlwZW9mIE1TQXBwJiZNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbj9mdW5jdGlvbih0
LG4scixvKXtNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbihmdW5jdGlvbigpe3JldHVybiBl
KHQsbixyLG8pfSl9OmV9O3QuZXhwb3J0cz1yfSx7fV0sOTQ6W2Z1bmN0aW9uKGUsdCxuKXsidXNl
IHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7cmV0dXJuIG51bGw9PXR8fCJib29sZWFuIj09dHlw
ZW9mIHR8fCIiPT09dD8iIjppc05hTih0KXx8MD09PXR8fGkuaGFzT3duUHJvcGVydHkoZSkmJmlb
ZV0/IiIrdDooInN0cmluZyI9PXR5cGVvZiB0JiYodD10LnRyaW0oKSksdCsicHgiKX12YXIgbz1l
KDQpLGk9KGUoMTQyKSxvLmlzVW5pdGxlc3NOdW1iZXIpO3QuZXhwb3J0cz1yfSx7MTQyOjE0Miw0
OjR9XSw5NTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0
PSIiK2Usbj1pLmV4ZWModCk7aWYoIW4pcmV0dXJuIHQ7dmFyIHIsbz0iIixhPTAscz0wO2Zvcihh
PW4uaW5kZXg7YTx0Lmxlbmd0aDthKyspe3N3aXRjaCh0LmNoYXJDb2RlQXQoYSkpe2Nhc2UgMzQ6
cj0iJnF1b3Q7IjticmVhaztjYXNlIDM4OnI9IiZhbXA7IjticmVhaztjYXNlIDM5OnI9IiYjeDI3
OyI7YnJlYWs7Y2FzZSA2MDpyPSImbHQ7IjticmVhaztjYXNlIDYyOnI9IiZndDsiO2JyZWFrO2Rl
ZmF1bHQ6Y29udGludWV9cyE9PWEmJihvKz10LnN1YnN0cmluZyhzLGEpKSxzPWErMSxvKz1yfXJl
dHVybiBzIT09YT9vK3Quc3Vic3RyaW5nKHMsYSk6b31mdW5jdGlvbiBvKGUpe3JldHVybiJib29s
ZWFuIj09dHlwZW9mIGV8fCJudW1iZXIiPT10eXBlb2YgZT8iIitlOnIoZSl9dmFyIGk9L1siJyY8
Pl0vO3QuZXhwb3J0cz1vfSx7fV0sOTY6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVu
Y3Rpb24gcihlKXtpZihudWxsPT1lKXJldHVybiBudWxsO2lmKDE9PT1lLm5vZGVUeXBlKXJldHVy
biBlO3ZhciB0PWEuZ2V0KGUpO2lmKHQpcmV0dXJuIHQ9cyh0KSx0P2kuZ2V0Tm9kZUZyb21JbnN0
YW5jZSh0KTpudWxsOyJmdW5jdGlvbiI9PXR5cGVvZiBlLnJlbmRlcj9vKCI0NCIpOm8oIjQ1IixP
YmplY3Qua2V5cyhlKSl9dmFyIG89ZSgxMTIpLGk9KGUoMTE5KSxlKDMzKSksYT1lKDU3KSxzPWUo
MTAzKTtlKDEzNyksZSgxNDIpO3QuZXhwb3J0cz1yfSx7MTAzOjEwMywxMTI6MTEyLDExOToxMTks
MTM3OjEzNywxNDI6MTQyLDMzOjMzLDU3OjU3fV0sOTc6W2Z1bmN0aW9uKGUsdCxuKXsoZnVuY3Rp
b24obil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7aWYoZSYmIm9iamVjdCI9PXR5
cGVvZiBlKXt2YXIgbz1lO3ZvaWQgMD09PW9bbl0mJm51bGwhPXQmJihvW25dPXQpfX1mdW5jdGlv
biBvKGUsdCl7aWYobnVsbD09ZSlyZXR1cm4gZTt2YXIgbj17fTtyZXR1cm4gaShlLHIsbiksbn12
YXIgaT0oZSgyMiksZSgxMTcpKTtlKDE0Mik7dm9pZCAwIT09biYmbi5lbnYsdC5leHBvcnRzPW99
KS5jYWxsKHRoaXMsdm9pZCAwKX0sezExNzoxMTcsMTQyOjE0MiwyMjoyMn1dLDk4OltmdW5jdGlv
bihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe0FycmF5LmlzQXJyYXkoZSk/
ZS5mb3JFYWNoKHQsbik6ZSYmdC5jYWxsKG4sZSl9dC5leHBvcnRzPXJ9LHt9XSw5OTpbZnVuY3Rp
b24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0LG49ZS5rZXlDb2RlO3Jl
dHVybiJjaGFyQ29kZSJpbiBlPzA9PT0odD1lLmNoYXJDb2RlKSYmMTM9PT1uJiYodD0xMyk6dD1u
LHQ+PTMyfHwxMz09PXQ/dDowfXQuZXhwb3J0cz1yfSx7fV0sMTAwOltmdW5jdGlvbihlLHQsbil7
InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYoZS5rZXkpe3ZhciB0PWlbZS5rZXldfHxlLmtl
eTtpZigiVW5pZGVudGlmaWVkIiE9PXQpcmV0dXJuIHR9aWYoImtleXByZXNzIj09PWUudHlwZSl7
dmFyIG49byhlKTtyZXR1cm4gMTM9PT1uPyJFbnRlciI6U3RyaW5nLmZyb21DaGFyQ29kZShuKX1y
ZXR1cm4ia2V5ZG93biI9PT1lLnR5cGV8fCJrZXl1cCI9PT1lLnR5cGU/YVtlLmtleUNvZGVdfHwi
VW5pZGVudGlmaWVkIjoiIn12YXIgbz1lKDk5KSxpPXtFc2M6IkVzY2FwZSIsU3BhY2ViYXI6IiAi
LExlZnQ6IkFycm93TGVmdCIsVXA6IkFycm93VXAiLFJpZ2h0OiJBcnJvd1JpZ2h0IixEb3duOiJB
cnJvd0Rvd24iLERlbDoiRGVsZXRlIixXaW46Ik9TIixNZW51OiJDb250ZXh0TWVudSIsQXBwczoi
Q29udGV4dE1lbnUiLFNjcm9sbDoiU2Nyb2xsTG9jayIsTW96UHJpbnRhYmxlS2V5OiJVbmlkZW50
aWZpZWQifSxhPXs4OiJCYWNrc3BhY2UiLDk6IlRhYiIsMTI6IkNsZWFyIiwxMzoiRW50ZXIiLDE2
OiJTaGlmdCIsMTc6IkNvbnRyb2wiLDE4OiJBbHQiLDE5OiJQYXVzZSIsMjA6IkNhcHNMb2NrIiwy
NzoiRXNjYXBlIiwzMjoiICIsMzM6IlBhZ2VVcCIsMzQ6IlBhZ2VEb3duIiwzNToiRW5kIiwzNjoi
SG9tZSIsMzc6IkFycm93TGVmdCIsMzg6IkFycm93VXAiLDM5OiJBcnJvd1JpZ2h0Iiw0MDoiQXJy
b3dEb3duIiw0NToiSW5zZXJ0Iiw0NjoiRGVsZXRlIiwxMTI6IkYxIiwxMTM6IkYyIiwxMTQ6IkYz
IiwxMTU6IkY0IiwxMTY6IkY1IiwxMTc6IkY2IiwxMTg6IkY3IiwxMTk6IkY4IiwxMjA6IkY5Iiwx
MjE6IkYxMCIsMTIyOiJGMTEiLDEyMzoiRjEyIiwxNDQ6Ik51bUxvY2siLDE0NToiU2Nyb2xsTG9j
ayIsMjI0OiJNZXRhIn07dC5leHBvcnRzPXJ9LHs5OTo5OX1dLDEwMTpbZnVuY3Rpb24oZSx0LG4p
eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PXRoaXMsbj10Lm5hdGl2ZUV2ZW50O2lm
KG4uZ2V0TW9kaWZpZXJTdGF0ZSlyZXR1cm4gbi5nZXRNb2RpZmllclN0YXRlKGUpO3ZhciByPWlb
ZV07cmV0dXJuISFyJiYhIW5bcl19ZnVuY3Rpb24gbyhlKXtyZXR1cm4gcn12YXIgaT17QWx0OiJh
bHRLZXkiLENvbnRyb2w6ImN0cmxLZXkiLE1ldGE6Im1ldGFLZXkiLFNoaWZ0OiJzaGlmdEtleSJ9
O3QuZXhwb3J0cz1vfSx7fV0sMTAyOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0
aW9uIHIoZSl7dmFyIHQ9ZS50YXJnZXR8fGUuc3JjRWxlbWVudHx8d2luZG93O3JldHVybiB0LmNv
cnJlc3BvbmRpbmdVc2VFbGVtZW50JiYodD10LmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KSwzPT09
dC5ub2RlVHlwZT90LnBhcmVudE5vZGU6dH10LmV4cG9ydHM9cn0se31dLDEwMzpbZnVuY3Rpb24o
ZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2Zvcih2YXIgdDsodD1lLl9yZW5kZXJl
ZE5vZGVUeXBlKT09PW8uQ09NUE9TSVRFOyllPWUuX3JlbmRlcmVkQ29tcG9uZW50O3JldHVybiB0
PT09by5IT1NUP2UuX3JlbmRlcmVkQ29tcG9uZW50OnQ9PT1vLkVNUFRZP251bGw6dm9pZCAwfXZh
ciBvPWUoNjIpO3QuZXhwb3J0cz1yfSx7NjI6NjJ9XSwxMDQ6W2Z1bmN0aW9uKGUsdCxuKXsidXNl
IHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1lJiYobyYmZVtvXXx8ZVtpXSk7aWYoImZ1bmN0
aW9uIj09dHlwZW9mIHQpcmV0dXJuIHR9dmFyIG89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYm
U3ltYm9sLml0ZXJhdG9yLGk9IkBAaXRlcmF0b3IiO3QuZXhwb3J0cz1yfSx7fV0sMTA1OltmdW5j
dGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7Zm9yKDtlJiZlLmZpcnN0Q2hp
bGQ7KWU9ZS5maXJzdENoaWxkO3JldHVybiBlfWZ1bmN0aW9uIG8oZSl7Zm9yKDtlOyl7aWYoZS5u
ZXh0U2libGluZylyZXR1cm4gZS5uZXh0U2libGluZztlPWUucGFyZW50Tm9kZX19ZnVuY3Rpb24g
aShlLHQpe2Zvcih2YXIgbj1yKGUpLGk9MCxhPTA7bjspe2lmKDM9PT1uLm5vZGVUeXBlKXtpZihh
PWkrbi50ZXh0Q29udGVudC5sZW5ndGgsaTw9dCYmYT49dClyZXR1cm57bm9kZTpuLG9mZnNldDp0
LWl9O2k9YX1uPXIobyhuKSl9fXQuZXhwb3J0cz1pfSx7fV0sMTA2OltmdW5jdGlvbihlLHQsbil7
InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtyZXR1cm4haSYmby5jYW5Vc2VET00mJihpPSJ0ZXh0
Q29udGVudCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ/InRleHRDb250ZW50IjoiaW5uZXJU
ZXh0IiksaX12YXIgbz1lKDEyMyksaT1udWxsO3QuZXhwb3J0cz1yfSx7MTIzOjEyM31dLDEwNzpb
ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG49e307cmV0
dXJuIG5bZS50b0xvd2VyQ2FzZSgpXT10LnRvTG93ZXJDYXNlKCksblsiV2Via2l0IitlXT0id2Vi
a2l0Iit0LG5bIk1veiIrZV09Im1veiIrdCxuWyJtcyIrZV09Ik1TIit0LG5bIk8iK2VdPSJvIit0
LnRvTG93ZXJDYXNlKCksbn1mdW5jdGlvbiBvKGUpe2lmKHNbZV0pcmV0dXJuIHNbZV07aWYoIWFb
ZV0pcmV0dXJuIGU7dmFyIHQ9YVtlXTtmb3IodmFyIG4gaW4gdClpZih0Lmhhc093blByb3BlcnR5
KG4pJiZuIGluIHUpcmV0dXJuIHNbZV09dFtuXTtyZXR1cm4iIn12YXIgaT1lKDEyMyksYT17YW5p
bWF0aW9uZW5kOnIoIkFuaW1hdGlvbiIsIkFuaW1hdGlvbkVuZCIpLGFuaW1hdGlvbml0ZXJhdGlv
bjpyKCJBbmltYXRpb24iLCJBbmltYXRpb25JdGVyYXRpb24iKSxhbmltYXRpb25zdGFydDpyKCJB
bmltYXRpb24iLCJBbmltYXRpb25TdGFydCIpLHRyYW5zaXRpb25lbmQ6cigiVHJhbnNpdGlvbiIs
IlRyYW5zaXRpb25FbmQiKX0scz17fSx1PXt9O2kuY2FuVXNlRE9NJiYodT1kb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJkaXYiKS5zdHlsZSwiQW5pbWF0aW9uRXZlbnQiaW4gd2luZG93fHwoZGVsZXRl
IGEuYW5pbWF0aW9uZW5kLmFuaW1hdGlvbixkZWxldGUgYS5hbmltYXRpb25pdGVyYXRpb24uYW5p
bWF0aW9uLGRlbGV0ZSBhLmFuaW1hdGlvbnN0YXJ0LmFuaW1hdGlvbiksIlRyYW5zaXRpb25FdmVu
dCJpbiB3aW5kb3d8fGRlbGV0ZSBhLnRyYW5zaXRpb25lbmQudHJhbnNpdGlvbiksdC5leHBvcnRz
PW99LHsxMjM6MTIzfV0sMTA4OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9u
IHIoZSl7aWYoZSl7dmFyIHQ9ZS5nZXROYW1lKCk7aWYodClyZXR1cm4iIENoZWNrIHRoZSByZW5k
ZXIgbWV0aG9kIG9mIGAiK3QrImAuIn1yZXR1cm4iIn1mdW5jdGlvbiBvKGUpe3JldHVybiJmdW5j
dGlvbiI9PXR5cGVvZiBlJiZ2b2lkIDAhPT1lLnByb3RvdHlwZSYmImZ1bmN0aW9uIj09dHlwZW9m
IGUucHJvdG90eXBlLm1vdW50Q29tcG9uZW50JiYiZnVuY3Rpb24iPT10eXBlb2YgZS5wcm90b3R5
cGUucmVjZWl2ZUNvbXBvbmVudH1mdW5jdGlvbiBpKGUsdCl7dmFyIG47aWYobnVsbD09PWV8fCEx
PT09ZSluPWwuY3JlYXRlKGkpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBlKXt2YXIgcz1lLHU9
cy50eXBlO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB1JiYic3RyaW5nIiE9dHlwZW9mIHUpe3ZhciBk
PSIiO2QrPXIocy5fb3duZXIpLGEoIjEzMCIsbnVsbD09dT91OnR5cGVvZiB1LGQpfSJzdHJpbmci
PT10eXBlb2Ygcy50eXBlP249Yy5jcmVhdGVJbnRlcm5hbENvbXBvbmVudChzKTpvKHMudHlwZSk/
KG49bmV3IHMudHlwZShzKSxuLmdldEhvc3ROb2RlfHwobi5nZXRIb3N0Tm9kZT1uLmdldE5hdGl2
ZU5vZGUpKTpuPW5ldyBwKHMpfWVsc2Uic3RyaW5nIj09dHlwZW9mIGV8fCJudW1iZXIiPT10eXBl
b2YgZT9uPWMuY3JlYXRlSW5zdGFuY2VGb3JUZXh0KGUpOmEoIjEzMSIsdHlwZW9mIGUpO3JldHVy
biBuLl9tb3VudEluZGV4PTAsbi5fbW91bnRJbWFnZT1udWxsLG59dmFyIGE9ZSgxMTIpLHM9ZSgx
NDMpLHU9ZSgyOSksbD1lKDQ5KSxjPWUoNTQpLHA9KGUoMTIxKSxlKDEzNyksZSgxNDIpLGZ1bmN0
aW9uKGUpe3RoaXMuY29uc3RydWN0KGUpfSk7cyhwLnByb3RvdHlwZSx1LHtfaW5zdGFudGlhdGVS
ZWFjdENvbXBvbmVudDppfSksdC5leHBvcnRzPWl9LHsxMTI6MTEyLDEyMToxMjEsMTM3OjEzNywx
NDI6MTQyLDE0MzoxNDMsMjk6MjksNDk6NDksNTQ6NTR9XSwxMDk6W2Z1bmN0aW9uKGUsdCxuKXsi
dXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKCFpLmNhblVzZURPTXx8dCYmISgiYWRkRXZl
bnRMaXN0ZW5lciJpbiBkb2N1bWVudCkpcmV0dXJuITE7dmFyIG49Im9uIitlLHI9biBpbiBkb2N1
bWVudDtpZighcil7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5zZXRBdHRy
aWJ1dGUobiwicmV0dXJuOyIpLHI9ImZ1bmN0aW9uIj09dHlwZW9mIGFbbl19cmV0dXJuIXImJm8m
JiJ3aGVlbCI9PT1lJiYocj1kb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlKCJFdmVu
dHMud2hlZWwiLCIzLjAiKSkscn12YXIgbyxpPWUoMTIzKTtpLmNhblVzZURPTSYmKG89ZG9jdW1l
bnQuaW1wbGVtZW50YXRpb24mJmRvY3VtZW50LmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUmJiEw
IT09ZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSgiIiwiIikpLHQuZXhwb3J0cz1y
fSx7MTIzOjEyM31dLDExMDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBy
KGUpe3ZhciB0PWUmJmUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4i
aW5wdXQiPT09dD8hIW9bZS50eXBlXToidGV4dGFyZWEiPT09dH12YXIgbz17Y29sb3I6ITAsZGF0
ZTohMCxkYXRldGltZTohMCwiZGF0ZXRpbWUtbG9jYWwiOiEwLGVtYWlsOiEwLG1vbnRoOiEwLG51
bWJlcjohMCxwYXNzd29yZDohMCxyYW5nZTohMCxzZWFyY2g6ITAsdGVsOiEwLHRleHQ6ITAsdGlt
ZTohMCx1cmw6ITAsd2VlazohMH07dC5leHBvcnRzPXJ9LHt9XSwxMTE6W2Z1bmN0aW9uKGUsdCxu
KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4nIicrbyhlKSsnIid9dmFyIG89ZSg5
NSk7dC5leHBvcnRzPXJ9LHs5NTo5NX1dLDExMjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0
IjtmdW5jdGlvbiByKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLTEsbj0iTWluaWZpZWQg
UmVhY3QgZXJyb3IgIyIrZSsiOyB2aXNpdCBodHRwOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0
L2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD0iK2Uscj0wO3I8dDtyKyspbis9IiZh
cmdzW109IitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW3IrMV0pO24rPSIgZm9yIHRoZSBm
dWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBm
dWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLiI7dmFyIG89bmV3IEVy
cm9yKG4pO3Rocm93IG8ubmFtZT0iSW52YXJpYW50IFZpb2xhdGlvbiIsby5mcmFtZXNUb1BvcD0x
LG99dC5leHBvcnRzPXJ9LHt9XSwxMTM6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFy
IHI9ZSg2MCk7dC5leHBvcnRzPXIucmVuZGVyU3VidHJlZUludG9Db250YWluZXJ9LHs2MDo2MH1d
LDExNDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvPWUoMTIzKSxpPWUoMTAp
LGE9L15bIFxyXG5cdFxmXS8scz0vPCghLS18bGlua3xub3NjcmlwdHxtZXRhfHNjcmlwdHxzdHls
ZSlbIFxyXG5cdFxmXC8+XS8sdT1lKDkzKSxsPXUoZnVuY3Rpb24oZSx0KXtpZihlLm5hbWVzcGFj
ZVVSSSE9PWkuc3ZnfHwiaW5uZXJIVE1MImluIGUpZS5pbm5lckhUTUw9dDtlbHNle3I9cnx8ZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iiksci5pbm5lckhUTUw9Ijxzdmc+Iit0KyI8L3N2Zz4i
O2Zvcih2YXIgbj1yLmZpcnN0Q2hpbGQ7bi5maXJzdENoaWxkOyllLmFwcGVuZENoaWxkKG4uZmly
c3RDaGlsZCl9fSk7aWYoby5jYW5Vc2VET00pe3ZhciBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpO2MuaW5uZXJIVE1MPSIgIiwiIj09PWMuaW5uZXJIVE1MJiYobD1mdW5jdGlvbihlLHQp
e2lmKGUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChlLGUpLGEudGVzdCh0
KXx8IjwiPT09dFswXSYmcy50ZXN0KHQpKXtlLmlubmVySFRNTD1TdHJpbmcuZnJvbUNoYXJDb2Rl
KDY1Mjc5KSt0O3ZhciBuPWUuZmlyc3RDaGlsZDsxPT09bi5kYXRhLmxlbmd0aD9lLnJlbW92ZUNo
aWxkKG4pOm4uZGVsZXRlRGF0YSgwLDEpfWVsc2UgZS5pbm5lckhUTUw9dH0pLGM9bnVsbH10LmV4
cG9ydHM9bH0sezEwOjEwLDEyMzoxMjMsOTM6OTN9XSwxMTU6W2Z1bmN0aW9uKGUsdCxuKXsidXNl
IHN0cmljdCI7dmFyIHI9ZSgxMjMpLG89ZSg5NSksaT1lKDExNCksYT1mdW5jdGlvbihlLHQpe2lm
KHQpe3ZhciBuPWUuZmlyc3RDaGlsZDtpZihuJiZuPT09ZS5sYXN0Q2hpbGQmJjM9PT1uLm5vZGVU
eXBlKXJldHVybiB2b2lkKG4ubm9kZVZhbHVlPXQpfWUudGV4dENvbnRlbnQ9dH07ci5jYW5Vc2VE
T00mJigidGV4dENvbnRlbnQiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHwoYT1mdW5jdGlv
bihlLHQpe2lmKDM9PT1lLm5vZGVUeXBlKXJldHVybiB2b2lkKGUubm9kZVZhbHVlPXQpO2koZSxv
KHQpKX0pKSx0LmV4cG9ydHM9YX0sezExNDoxMTQsMTIzOjEyMyw5NTo5NX1dLDExNjpbZnVuY3Rp
b24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG49bnVsbD09PWV8fCEx
PT09ZSxyPW51bGw9PT10fHwhMT09PXQ7aWYobnx8cilyZXR1cm4gbj09PXI7dmFyIG89dHlwZW9m
IGUsaT10eXBlb2YgdDtyZXR1cm4ic3RyaW5nIj09PW98fCJudW1iZXIiPT09bz8ic3RyaW5nIj09
PWl8fCJudW1iZXIiPT09aToib2JqZWN0Ij09PWkmJmUudHlwZT09PXQudHlwZSYmZS5rZXk9PT10
LmtleX10LmV4cG9ydHM9cn0se31dLDExNzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijtm
dW5jdGlvbiByKGUsdCl7cmV0dXJuIGUmJiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9ZS5rZXk/
bC5lc2NhcGUoZS5rZXkpOnQudG9TdHJpbmcoMzYpfWZ1bmN0aW9uIG8oZSx0LG4saSl7dmFyIGQ9
dHlwZW9mIGU7aWYoInVuZGVmaW5lZCIhPT1kJiYiYm9vbGVhbiIhPT1kfHwoZT1udWxsKSxudWxs
PT09ZXx8InN0cmluZyI9PT1kfHwibnVtYmVyIj09PWR8fCJvYmplY3QiPT09ZCYmZS4kJHR5cGVv
Zj09PXMpcmV0dXJuIG4oaSxlLCIiPT09dD9jK3IoZSwwKTp0KSwxO3ZhciBmLGgsbT0wLHY9IiI9
PT10P2M6dCtwO2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciBnPTA7ZzxlLmxlbmd0aDtnKysp
Zj1lW2ddLGg9dityKGYsZyksbSs9byhmLGgsbixpKTtlbHNle3ZhciB5PXUoZSk7aWYoeSl7dmFy
IF8sQz15LmNhbGwoZSk7aWYoeSE9PWUuZW50cmllcylmb3IodmFyIGI9MDshKF89Qy5uZXh0KCkp
LmRvbmU7KWY9Xy52YWx1ZSxoPXYrcihmLGIrKyksbSs9byhmLGgsbixpKTtlbHNlIGZvcig7IShf
PUMubmV4dCgpKS5kb25lOyl7dmFyIEU9Xy52YWx1ZTtFJiYoZj1FWzFdLGg9ditsLmVzY2FwZShF
WzBdKStwK3IoZiwwKSxtKz1vKGYsaCxuLGkpKX19ZWxzZSBpZigib2JqZWN0Ij09PWQpe3ZhciB4
PVN0cmluZyhlKTthKCIzMSIsIltvYmplY3QgT2JqZWN0XSI9PT14PyJvYmplY3Qgd2l0aCBrZXlz
IHsiK09iamVjdC5rZXlzKGUpLmpvaW4oIiwgIikrIn0iOngsIiIpfX1yZXR1cm4gbX1mdW5jdGlv
biBpKGUsdCxuKXtyZXR1cm4gbnVsbD09ZT8wOm8oZSwiIix0LG4pfXZhciBhPWUoMTEyKSxzPShl
KDExOSksZSg0OCkpLHU9ZSgxMDQpLGw9KGUoMTM3KSxlKDIyKSksYz0oZSgxNDIpLCIuIikscD0i
OiI7dC5leHBvcnRzPWl9LHsxMDQ6MTA0LDExMjoxMTIsMTE5OjExOSwxMzc6MTM3LDE0MjoxNDIs
MjI6MjIsNDg6NDh9XSwxMTg6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9KGUo
MTQzKSxlKDEyOSkpLG89KGUoMTQyKSxyKTt0LmV4cG9ydHM9b30sezEyOToxMjksMTQyOjE0Miwx
NDM6MTQzfV0sMTE5OltmdW5jdGlvbih0LG4scil7InVzZSBzdHJpY3QiO3ZhciBvPWUuX19TRUNS
RVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ7bi5leHBvcnRzPW8u
UmVhY3RDdXJyZW50T3duZXJ9LHt9XSwxMjA6W2Z1bmN0aW9uKHQsbixyKXsidXNlIHN0cmljdCI7
bi5leHBvcnRzPWV9LHt9XSwxMjE6W2Z1bmN0aW9uKHQsbixyKXsidXNlIHN0cmljdCI7dmFyIG89
ZS5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDtuLmV4
cG9ydHM9by5nZXROZXh0RGVidWdJRH0se31dLDEyMjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3Ry
aWN0Ijt2YXIgcj1lKDEyOSksbz17bGlzdGVuOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZS5hZGRF
dmVudExpc3RlbmVyPyhlLmFkZEV2ZW50TGlzdGVuZXIodCxuLCExKSx7cmVtb3ZlOmZ1bmN0aW9u
KCl7ZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbiwhMSl9fSk6ZS5hdHRhY2hFdmVudD8oZS5hdHRh
Y2hFdmVudCgib24iK3Qsbikse3JlbW92ZTpmdW5jdGlvbigpe2UuZGV0YWNoRXZlbnQoIm9uIit0
LG4pfX0pOnZvaWQgMH0sY2FwdHVyZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUuYWRkRXZlbnRM
aXN0ZW5lcj8oZS5hZGRFdmVudExpc3RlbmVyKHQsbiwhMCkse3JlbW92ZTpmdW5jdGlvbigpe2Uu
cmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4sITApfX0pOntyZW1vdmU6cn19LHJlZ2lzdGVyRGVmYXVs
dDpmdW5jdGlvbigpe319O3QuZXhwb3J0cz1vfSx7MTI5OjEyOX1dLDEyMzpbZnVuY3Rpb24oZSx0
LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj0hKCJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93fHwhd2lu
ZG93LmRvY3VtZW50fHwhd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpLG89e2NhblVzZURP
TTpyLGNhblVzZVdvcmtlcnM6InVuZGVmaW5lZCIhPXR5cGVvZiBXb3JrZXIsY2FuVXNlRXZlbnRM
aXN0ZW5lcnM6ciYmISghd2luZG93LmFkZEV2ZW50TGlzdGVuZXImJiF3aW5kb3cuYXR0YWNoRXZl
bnQpLGNhblVzZVZpZXdwb3J0OnImJiEhd2luZG93LnNjcmVlbixpc0luV29ya2VyOiFyfTt0LmV4
cG9ydHM9b30se31dLDEyNDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBy
KGUpe3JldHVybiBlLnJlcGxhY2UobyxmdW5jdGlvbihlLHQpe3JldHVybiB0LnRvVXBwZXJDYXNl
KCl9KX12YXIgbz0vLSguKS9nO3QuZXhwb3J0cz1yfSx7fV0sMTI1OltmdW5jdGlvbihlLHQsbil7
InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG8oZS5yZXBsYWNlKGksIm1zLSIpKX12
YXIgbz1lKDEyNCksaT0vXi1tcy0vO3QuZXhwb3J0cz1yfSx7MTI0OjEyNH1dLDEyNjpbZnVuY3Rp
b24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuISghZXx8IXQpJiYo
ZT09PXR8fCFvKGUpJiYobyh0KT9yKGUsdC5wYXJlbnROb2RlKToiY29udGFpbnMiaW4gZT9lLmNv
bnRhaW5zKHQpOiEhZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmISEoMTYmZS5jb21wYXJlRG9j
dW1lbnRQb3NpdGlvbih0KSkpKX12YXIgbz1lKDEzOSk7dC5leHBvcnRzPXJ9LHsxMzk6MTM5fV0s
MTI3OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZS5s
ZW5ndGg7aWYoKEFycmF5LmlzQXJyYXkoZSl8fCJvYmplY3QiIT10eXBlb2YgZSYmImZ1bmN0aW9u
IiE9dHlwZW9mIGUpJiZhKCExKSwibnVtYmVyIiE9dHlwZW9mIHQmJmEoITEpLDA9PT10fHx0LTEg
aW4gZXx8YSghMSksImZ1bmN0aW9uIj09dHlwZW9mIGUuY2FsbGVlJiZhKCExKSxlLmhhc093blBy
b3BlcnR5KXRyeXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSl9Y2F0Y2goZSl7
fWZvcih2YXIgbj1BcnJheSh0KSxyPTA7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rp
b24gbyhlKXtyZXR1cm4hIWUmJigib2JqZWN0Ij09dHlwZW9mIGV8fCJmdW5jdGlvbiI9PXR5cGVv
ZiBlKSYmImxlbmd0aCJpbiBlJiYhKCJzZXRJbnRlcnZhbCJpbiBlKSYmIm51bWJlciIhPXR5cGVv
ZiBlLm5vZGVUeXBlJiYoQXJyYXkuaXNBcnJheShlKXx8ImNhbGxlZSJpbiBlfHwiaXRlbSJpbiBl
KX1mdW5jdGlvbiBpKGUpe3JldHVybiBvKGUpP0FycmF5LmlzQXJyYXkoZSk/ZS5zbGljZSgpOnIo
ZSk6W2VdfXZhciBhPWUoMTM3KTt0LmV4cG9ydHM9aX0sezEzNzoxMzd9XSwxMjg6W2Z1bmN0aW9u
KGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1lLm1hdGNoKGMpO3JldHVy
biB0JiZ0WzFdLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPWw7bHx8dSghMSk7
dmFyIG89cihlKSxpPW8mJnMobyk7aWYoaSl7bi5pbm5lckhUTUw9aVsxXStlK2lbMl07Zm9yKHZh
ciBjPWlbMF07Yy0tOyluPW4ubGFzdENoaWxkfWVsc2Ugbi5pbm5lckhUTUw9ZTt2YXIgcD1uLmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKTtwLmxlbmd0aCYmKHR8fHUoITEpLGEocCkuZm9y
RWFjaCh0KSk7Zm9yKHZhciBkPUFycmF5LmZyb20obi5jaGlsZE5vZGVzKTtuLmxhc3RDaGlsZDsp
bi5yZW1vdmVDaGlsZChuLmxhc3RDaGlsZCk7cmV0dXJuIGR9dmFyIGk9ZSgxMjMpLGE9ZSgxMjcp
LHM9ZSgxMzMpLHU9ZSgxMzcpLGw9aS5jYW5Vc2VET00/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
ZGl2Iik6bnVsbCxjPS9eXHMqPChcdyspLzt0LmV4cG9ydHM9b30sezEyMzoxMjMsMTI3OjEyNywx
MzM6MTMzLDEzNzoxMzd9XSwxMjk6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rp
b24gcihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIG89ZnVuY3Rpb24oKXt9O28u
dGhhdFJldHVybnM9cixvLnRoYXRSZXR1cm5zRmFsc2U9cighMSksby50aGF0UmV0dXJuc1RydWU9
cighMCksby50aGF0UmV0dXJuc051bGw9cihudWxsKSxvLnRoYXRSZXR1cm5zVGhpcz1mdW5jdGlv
bigpe3JldHVybiB0aGlzfSxvLnRoYXRSZXR1cm5zQXJndW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJu
IGV9LHQuZXhwb3J0cz1vfSx7fV0sMTMwOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3Zh
ciByPXt9O3QuZXhwb3J0cz1yfSx7fV0sMTMxOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3Qi
O2Z1bmN0aW9uIHIoZSl7dHJ5e2UuZm9jdXMoKX1jYXRjaChlKXt9fXQuZXhwb3J0cz1yfSx7fV0s
MTMyOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYodm9pZCAw
PT09KGU9ZXx8KCJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQ6dm9pZCAwKSkp
cmV0dXJuIG51bGw7dHJ5e3JldHVybiBlLmFjdGl2ZUVsZW1lbnR8fGUuYm9keX1jYXRjaCh0KXty
ZXR1cm4gZS5ib2R5fX10LmV4cG9ydHM9cn0se31dLDEzMzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ug
c3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBhfHxpKCExKSxkLmhhc093blByb3BlcnR5KGUp
fHwoZT0iKiIpLHMuaGFzT3duUHJvcGVydHkoZSl8fChhLmlubmVySFRNTD0iKiI9PT1lPyI8bGlu
ayAvPiI6IjwiK2UrIj48LyIrZSsiPiIsc1tlXT0hYS5maXJzdENoaWxkKSxzW2VdP2RbZV06bnVs
bH12YXIgbz1lKDEyMyksaT1lKDEzNyksYT1vLmNhblVzZURPTT9kb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTpudWxsLHM9e30sdT1bMSwnPHNlbGVjdCBtdWx0aXBsZT0idHJ1ZSI+JywiPC9z
ZWxlY3Q+Il0sbD1bMSwiPHRhYmxlPiIsIjwvdGFibGU+Il0sYz1bMywiPHRhYmxlPjx0Ym9keT48
dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0scD1bMSwnPHN2ZyB4bWxucz0iaHR0cDovL3d3
dy53My5vcmcvMjAwMC9zdmciPicsIjwvc3ZnPiJdLGQ9eyIqIjpbMSwiPzxkaXY+IiwiPC9kaXY+
Il0sYXJlYTpbMSwiPG1hcD4iLCI8L21hcD4iXSxjb2w6WzIsIjx0YWJsZT48dGJvZHk+PC90Ym9k
eT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLGxlZ2VuZDpbMSwiPGZpZWxkc2V0
PiIsIjwvZmllbGRzZXQ+Il0scGFyYW06WzEsIjxvYmplY3Q+IiwiPC9vYmplY3Q+Il0sdHI6WzIs
Ijx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLG9wdGdyb3VwOnUsb3B0aW9uOnUs
Y2FwdGlvbjpsLGNvbGdyb3VwOmwsdGJvZHk6bCx0Zm9vdDpsLHRoZWFkOmwsdGQ6Yyx0aDpjfTtb
ImNpcmNsZSIsImNsaXBQYXRoIiwiZGVmcyIsImVsbGlwc2UiLCJnIiwiaW1hZ2UiLCJsaW5lIiwi
bGluZWFyR3JhZGllbnQiLCJtYXNrIiwicGF0aCIsInBhdHRlcm4iLCJwb2x5Z29uIiwicG9seWxp
bmUiLCJyYWRpYWxHcmFkaWVudCIsInJlY3QiLCJzdG9wIiwidGV4dCIsInRzcGFuIl0uZm9yRWFj
aChmdW5jdGlvbihlKXtkW2VdPXAsc1tlXT0hMH0pLHQuZXhwb3J0cz1yfSx7MTIzOjEyMywxMzc6
MTM3fV0sMTM0OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0
dXJuIGUuV2luZG93JiZlIGluc3RhbmNlb2YgZS5XaW5kb3c/e3g6ZS5wYWdlWE9mZnNldHx8ZS5k
b2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCx5OmUucGFnZVlPZmZzZXR8fGUuZG9j
dW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcH06e3g6ZS5zY3JvbGxMZWZ0LHk6ZS5zY3Jv
bGxUb3B9fXQuZXhwb3J0cz1yfSx7fV0sMTM1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3Qi
O2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUucmVwbGFjZShvLCItJDEiKS50b0xvd2VyQ2FzZSgpfXZh
ciBvPS8oW0EtWl0pL2c7dC5leHBvcnRzPXJ9LHt9XSwxMzY6W2Z1bmN0aW9uKGUsdCxuKXsidXNl
IHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gbyhlKS5yZXBsYWNlKGksIi1tcy0iKX12YXIg
bz1lKDEzNSksaT0vXm1zLS87dC5leHBvcnRzPXJ9LHsxMzU6MTM1fV0sMTM3OltmdW5jdGlvbihl
LHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scixpLGEscyx1KXtpZihvKHQpLCFl
KXt2YXIgbDtpZih2b2lkIDA9PT10KWw9bmV3IEVycm9yKCJNaW5pZmllZCBleGNlcHRpb24gb2Nj
dXJyZWQ7IHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgdGhlIGZ1bGwg
ZXJyb3IgbWVzc2FnZSBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLiIpO2Vsc2V7dmFy
IGM9W24scixpLGEscyx1XSxwPTA7bD1uZXcgRXJyb3IodC5yZXBsYWNlKC8lcy9nLGZ1bmN0aW9u
KCl7cmV0dXJuIGNbcCsrXX0pKSxsLm5hbWU9IkludmFyaWFudCBWaW9sYXRpb24ifXRocm93IGwu
ZnJhbWVzVG9Qb3A9MSxsfX12YXIgbz1mdW5jdGlvbihlKXt9O3QuZXhwb3J0cz1yfSx7fV0sMTM4
OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZT9lLm93
bmVyRG9jdW1lbnR8fGU6ZG9jdW1lbnQsbj10LmRlZmF1bHRWaWV3fHx3aW5kb3c7cmV0dXJuISgh
ZXx8ISgiZnVuY3Rpb24iPT10eXBlb2Ygbi5Ob2RlP2UgaW5zdGFuY2VvZiBuLk5vZGU6Im9iamVj
dCI9PXR5cGVvZiBlJiYibnVtYmVyIj09dHlwZW9mIGUubm9kZVR5cGUmJiJzdHJpbmciPT10eXBl
b2YgZS5ub2RlTmFtZSkpfXQuZXhwb3J0cz1yfSx7fV0sMTM5OltmdW5jdGlvbihlLHQsbil7InVz
ZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG8oZSkmJjM9PWUubm9kZVR5cGV9dmFyIG89
ZSgxMzgpO3QuZXhwb3J0cz1yfSx7MTM4OjEzOH1dLDE0MDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ug
c3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PXt9O3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4g
dC5oYXNPd25Qcm9wZXJ0eShuKXx8KHRbbl09ZS5jYWxsKHRoaXMsbikpLHRbbl19fXQuZXhwb3J0
cz1yfSx7fV0sMTQxOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0
KXtyZXR1cm4gZT09PXQ/MCE9PWV8fDAhPT10fHwxL2U9PTEvdDplIT09ZSYmdCE9PXR9ZnVuY3Rp
b24gbyhlLHQpe2lmKHIoZSx0KSlyZXR1cm4hMDtpZigib2JqZWN0IiE9dHlwZW9mIGV8fG51bGw9
PT1lfHwib2JqZWN0IiE9dHlwZW9mIHR8fG51bGw9PT10KXJldHVybiExO3ZhciBuPU9iamVjdC5r
ZXlzKGUpLG89T2JqZWN0LmtleXModCk7aWYobi5sZW5ndGghPT1vLmxlbmd0aClyZXR1cm4hMTtm
b3IodmFyIGE9MDthPG4ubGVuZ3RoO2ErKylpZighaS5jYWxsKHQsblthXSl8fCFyKGVbblthXV0s
dFtuW2FdXSkpcmV0dXJuITE7cmV0dXJuITB9dmFyIGk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Q
cm9wZXJ0eTt0LmV4cG9ydHM9b30se31dLDE0MjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0
Ijt2YXIgcj1lKDEyOSksbz1yO3QuZXhwb3J0cz1vfSx7MTI5OjEyOX1dLDE0MzpbZnVuY3Rpb24o
ZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKG51bGw9PT1lfHx2b2lkIDA9PT1l
KXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRo
IG51bGwgb3IgdW5kZWZpbmVkIik7cmV0dXJuIE9iamVjdChlKX12YXIgbz1PYmplY3QuZ2V0T3du
UHJvcGVydHlTeW1ib2xzLGk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxhPU9iamVj
dC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5
e2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO3ZhciBlPW5ldyBTdHJpbmcoImFiYyIpO2lmKGVb
NV09ImRlIiwiNSI9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKVswXSlyZXR1cm4hMTtm
b3IodmFyIHQ9e30sbj0wO248MTA7bisrKXRbIl8iK1N0cmluZy5mcm9tQ2hhckNvZGUobildPW47
aWYoIjAxMjM0NTY3ODkiIT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCkubWFwKGZ1bmN0
aW9uKGUpe3JldHVybiB0W2VdfSkuam9pbigiIikpcmV0dXJuITE7dmFyIHI9e307cmV0dXJuImFi
Y2RlZmdoaWprbG1ub3BxcnN0Ii5zcGxpdCgiIikuZm9yRWFjaChmdW5jdGlvbihlKXtyW2VdPWV9
KSwiYWJjZGVmZ2hpamtsbW5vcHFyc3QiPT09T2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxy
KSkuam9pbigiIil9Y2F0Y2goZSl7cmV0dXJuITF9fSgpP09iamVjdC5hc3NpZ246ZnVuY3Rpb24o
ZSx0KXtmb3IodmFyIG4scyx1PXIoZSksbD0xO2w8YXJndW1lbnRzLmxlbmd0aDtsKyspe249T2Jq
ZWN0KGFyZ3VtZW50c1tsXSk7Zm9yKHZhciBjIGluIG4paS5jYWxsKG4sYykmJih1W2NdPW5bY10p
O2lmKG8pe3M9byhuKTtmb3IodmFyIHA9MDtwPHMubGVuZ3RoO3ArKylhLmNhbGwobixzW3BdKSYm
KHVbc1twXV09bltzW3BdXSl9fXJldHVybiB1fX0se31dLDE0NDpbZnVuY3Rpb24oZSx0LG4peyJ1
c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIsbyl7fXQuZXhwb3J0cz1yfSx7MTM3OjEzNywx
NDI6MTQyLDE0NzoxNDd9XSwxNDU6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9
ZSgxNDYpO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gcihlLCExKX19LHsxNDY6MTQ2fV0s
MTQ2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMTI5KSxvPWUoMTM3KSxp
PShlKDE0MiksZSgxNDcpKSxhPWUoMTQ0KTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtmdW5jdGlv
biBuKGUpe3ZhciB0PWUmJihFJiZlW0VdfHxlW3hdKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdCly
ZXR1cm4gdH1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGU9PT10PzAhPT1lfHwxL2U9PTEvdDplIT09
ZSYmdCE9PXR9ZnVuY3Rpb24gdShlKXt0aGlzLm1lc3NhZ2U9ZSx0aGlzLnN0YWNrPSIifWZ1bmN0
aW9uIGwoZSl7ZnVuY3Rpb24gbihuLHIsYSxzLGwsYyxwKXtpZihzPXN8fHcsYz1jfHxhLHAhPT1p
KWlmKHQpbyghMSwiQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qg
c3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gVXNlIGBQcm9wVHlwZXMuY2hl
Y2tQcm9wVHlwZXMoKWAgdG8gY2FsbCB0aGVtLiBSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3Vz
ZS1jaGVjay1wcm9wLXR5cGVzIik7ZWxzZTtyZXR1cm4gbnVsbD09clthXT9uP25ldyB1KG51bGw9
PT1yW2FdPyJUaGUgIitsKyIgYCIrYysiYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gYCIrcysi
YCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuIjoiVGhlICIrbCsiIGAiK2MrImAgaXMgbWFya2Vk
IGFzIHJlcXVpcmVkIGluIGAiK3MrImAsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuIik6
bnVsbDplKHIsYSxzLGwsYyl9dmFyIHI9bi5iaW5kKG51bGwsITEpO3JldHVybiByLmlzUmVxdWly
ZWQ9bi5iaW5kKG51bGwsITApLHJ9ZnVuY3Rpb24gYyhlKXtmdW5jdGlvbiB0KHQsbixyLG8saSxh
KXt2YXIgcz10W25dO2lmKF8ocykhPT1lKXJldHVybiBuZXcgdSgiSW52YWxpZCAiK28rIiBgIitp
KyJgIG9mIHR5cGUgYCIrQyhzKSsiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBgIitl
KyJgLiIpO3JldHVybiBudWxsfXJldHVybiBsKHQpfWZ1bmN0aW9uIHAoZSl7ZnVuY3Rpb24gdCh0
LG4scixvLGEpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXJldHVybiBuZXcgdSgiUHJvcGVydHkg
YCIrYSsiYCBvZiBjb21wb25lbnQgYCIrcisiYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlv
biBpbnNpZGUgYXJyYXlPZi4iKTt2YXIgcz10W25dO2lmKCFBcnJheS5pc0FycmF5KHMpKXtyZXR1
cm4gbmV3IHUoIkludmFsaWQgIitvKyIgYCIrYSsiYCBvZiB0eXBlIGAiK18ocykrImAgc3VwcGxp
ZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQgYW4gYXJyYXkuIil9Zm9yKHZhciBsPTA7bDxzLmxlbmd0
aDtsKyspe3ZhciBjPWUocyxsLHIsbyxhKyJbIitsKyJdIixpKTtpZihjIGluc3RhbmNlb2YgRXJy
b3IpcmV0dXJuIGN9cmV0dXJuIG51bGx9cmV0dXJuIGwodCl9ZnVuY3Rpb24gZChlKXtmdW5jdGlv
biB0KHQsbixyLG8saSl7aWYoISh0W25daW5zdGFuY2VvZiBlKSl7dmFyIGE9ZS5uYW1lfHx3O3Jl
dHVybiBuZXcgdSgiSW52YWxpZCAiK28rIiBgIitpKyJgIG9mIHR5cGUgYCIrYih0W25dKSsiYCBz
dXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBpbnN0YW5jZSBvZiBgIithKyJgLiIpfXJldHVy
biBudWxsfXJldHVybiBsKHQpfWZ1bmN0aW9uIGYoZSl7ZnVuY3Rpb24gdCh0LG4scixvLGkpe2Zv
cih2YXIgYT10W25dLGw9MDtsPGUubGVuZ3RoO2wrKylpZihzKGEsZVtsXSkpcmV0dXJuIG51bGw7
cmV0dXJuIG5ldyB1KCJJbnZhbGlkICIrbysiIGAiK2krImAgb2YgdmFsdWUgYCIrYSsiYCBzdXBw
bGllZCB0byBgIityKyJgLCBleHBlY3RlZCBvbmUgb2YgIitKU09OLnN0cmluZ2lmeShlKSsiLiIp
fXJldHVybiBBcnJheS5pc0FycmF5KGUpP2wodCk6ci50aGF0UmV0dXJuc051bGx9ZnVuY3Rpb24g
aChlKXtmdW5jdGlvbiB0KHQsbixyLG8sYSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpcmV0dXJu
IG5ldyB1KCJQcm9wZXJ0eSBgIithKyJgIG9mIGNvbXBvbmVudCBgIityKyJgIGhhcyBpbnZhbGlk
IFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi4iKTt2YXIgcz10W25dLGw9XyhzKTtp
Zigib2JqZWN0IiE9PWwpcmV0dXJuIG5ldyB1KCJJbnZhbGlkICIrbysiIGAiK2ErImAgb2YgdHlw
ZSBgIitsKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVjdGVkIGFuIG9iamVjdC4iKTtmb3Io
dmFyIGMgaW4gcylpZihzLmhhc093blByb3BlcnR5KGMpKXt2YXIgcD1lKHMsYyxyLG8sYSsiLiIr
YyxpKTtpZihwIGluc3RhbmNlb2YgRXJyb3IpcmV0dXJuIHB9cmV0dXJuIG51bGx9cmV0dXJuIGwo
dCl9ZnVuY3Rpb24gbShlKXtmdW5jdGlvbiB0KHQsbixyLG8sYSl7Zm9yKHZhciBzPTA7czxlLmxl
bmd0aDtzKyspe2lmKG51bGw9PSgwLGVbc10pKHQsbixyLG8sYSxpKSlyZXR1cm4gbnVsbH1yZXR1
cm4gbmV3IHUoIkludmFsaWQgIitvKyIgYCIrYSsiYCBzdXBwbGllZCB0byBgIityKyJgLiIpfXJl
dHVybiBBcnJheS5pc0FycmF5KGUpP2wodCk6ci50aGF0UmV0dXJuc051bGx9ZnVuY3Rpb24gdihl
KXtmdW5jdGlvbiB0KHQsbixyLG8sYSl7dmFyIHM9dFtuXSxsPV8ocyk7aWYoIm9iamVjdCIhPT1s
KXJldHVybiBuZXcgdSgiSW52YWxpZCAiK28rIiBgIithKyJgIG9mIHR5cGUgYCIrbCsiYCBzdXBw
bGllZCB0byBgIityKyJgLCBleHBlY3RlZCBgb2JqZWN0YC4iKTtmb3IodmFyIGMgaW4gZSl7dmFy
IHA9ZVtjXTtpZihwKXt2YXIgZD1wKHMsYyxyLG8sYSsiLiIrYyxpKTtpZihkKXJldHVybiBkfX1y
ZXR1cm4gbnVsbH1yZXR1cm4gbCh0KX1mdW5jdGlvbiBnKHQpe3N3aXRjaCh0eXBlb2YgdCl7Y2Fz
ZSJudW1iZXIiOmNhc2Uic3RyaW5nIjpjYXNlInVuZGVmaW5lZCI6cmV0dXJuITA7Y2FzZSJib29s
ZWFuIjpyZXR1cm4hdDtjYXNlIm9iamVjdCI6aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdC5l
dmVyeShnKTtpZihudWxsPT09dHx8ZSh0KSlyZXR1cm4hMDt2YXIgcj1uKHQpO2lmKCFyKXJldHVy
biExO3ZhciBvLGk9ci5jYWxsKHQpO2lmKHIhPT10LmVudHJpZXMpe2Zvcig7IShvPWkubmV4dCgp
KS5kb25lOylpZighZyhvLnZhbHVlKSlyZXR1cm4hMX1lbHNlIGZvcig7IShvPWkubmV4dCgpKS5k
b25lOyl7dmFyIGE9by52YWx1ZTtpZihhJiYhZyhhWzFdKSlyZXR1cm4hMX1yZXR1cm4hMDtkZWZh
dWx0OnJldHVybiExfX1mdW5jdGlvbiB5KGUsdCl7cmV0dXJuInN5bWJvbCI9PT1lfHwoIlN5bWJv
bCI9PT10WyJAQHRvU3RyaW5nVGFnIl18fCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQgaW5z
dGFuY2VvZiBTeW1ib2wpfWZ1bmN0aW9uIF8oZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIEFycmF5
LmlzQXJyYXkoZSk/ImFycmF5IjplIGluc3RhbmNlb2YgUmVnRXhwPyJvYmplY3QiOnkodCxlKT8i
c3ltYm9sIjp0fWZ1bmN0aW9uIEMoZSl7dmFyIHQ9XyhlKTtpZigib2JqZWN0Ij09PXQpe2lmKGUg
aW5zdGFuY2VvZiBEYXRlKXJldHVybiJkYXRlIjtpZihlIGluc3RhbmNlb2YgUmVnRXhwKXJldHVy
biJyZWdleHAifXJldHVybiB0fWZ1bmN0aW9uIGIoZSl7cmV0dXJuIGUuY29uc3RydWN0b3ImJmUu
Y29uc3RydWN0b3IubmFtZT9lLmNvbnN0cnVjdG9yLm5hbWU6d312YXIgRT0iZnVuY3Rpb24iPT10
eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3IseD0iQEBpdGVyYXRvciIsdz0iPDxhbm9ueW1v
dXM+PiIsVD17YXJyYXk6YygiYXJyYXkiKSxib29sOmMoImJvb2xlYW4iKSxmdW5jOmMoImZ1bmN0
aW9uIiksbnVtYmVyOmMoIm51bWJlciIpLG9iamVjdDpjKCJvYmplY3QiKSxzdHJpbmc6Yygic3Ry
aW5nIiksc3ltYm9sOmMoInN5bWJvbCIpLGFueTpmdW5jdGlvbigpe3JldHVybiBsKHIudGhhdFJl
dHVybnNOdWxsKX0oKSxhcnJheU9mOnAsZWxlbWVudDpmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxu
LHIsbyxpKXt2YXIgYT10W25dO2lmKCFlKGEpKXtyZXR1cm4gbmV3IHUoIkludmFsaWQgIitvKyIg
YCIraSsiYCBvZiB0eXBlIGAiK18oYSkrImAgc3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQg
YSBzaW5nbGUgUmVhY3RFbGVtZW50LiIpfXJldHVybiBudWxsfXJldHVybiBsKHQpfSgpLGluc3Rh
bmNlT2Y6ZCxub2RlOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixyLG8pe3JldHVybiBnKGVb
dF0pP251bGw6bmV3IHUoIkludmFsaWQgIityKyIgYCIrbysiYCBzdXBwbGllZCB0byBgIituKyJg
LCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4iKX1yZXR1cm4gbChlKX0oKSxvYmplY3RPZjpoLG9uZU9m
OmYsb25lT2ZUeXBlOm0sc2hhcGU6dn0KKztyZXR1cm4gdS5wcm90b3R5cGU9RXJyb3IucHJvdG90
eXBlLFQuY2hlY2tQcm9wVHlwZXM9YSxULlByb3BUeXBlcz1ULFR9fSx7MTI5OjEyOSwxMzc6MTM3
LDE0MjoxNDIsMTQ0OjE0NCwxNDc6MTQ3fV0sMTQ3OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJp
Y3QiO3QuZXhwb3J0cz0iU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklS
RUQifSx7fV19LHt9LFs0NV0pKDQ1KX0oKX0oKX0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9yZWFjdC1kb20v
aW5kZXguanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2luZGV4
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjJiZjk0MTc5MzZmN2NiYmYwM2MwZjFkZWQ0MmNlOTMyMGEyMTRhY2IK
LS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3Qt
ZG9tL2luZGV4LmpzCkBAIC0wLDAgKzEsMyBAQAorJ3VzZSBzdHJpY3QnOworCittb2R1bGUuZXhw
b3J0cyA9IHJlcXVpcmUoJy4vbGliL1JlYWN0RE9NJyk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3QvTElDRU5TRSBiL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25v
ZGVfbW9kdWxlcy9yZWFjdC9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxYjhmNmY3NmZmMDJhMTUzNmEz
NjNkYjNhN2ExY2NlNDE4YWYzYzIKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFj
dC9ub2RlX21vZHVsZXMvcmVhY3QvTElDRU5TRQpAQCAtMCwwICsxLDMxIEBACitCU0QgTGljZW5z
ZQorCitGb3IgUmVhY3Qgc29mdHdhcmUKKworQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZh
Y2Vib29rLCBJbmMuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0
aW9uLAorYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUgbWV0OgorCisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAgIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisg
ICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uCisgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICogTmVpdGhlciB0aGUgbmFtZSBGYWNlYm9vayBub3Ig
dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8KKyAgIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljCisgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3Qv
UkVBRE1FLm1kIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3JlYWN0L1JFQURNRS5t
ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi43NDBhNGYyYzA2NGQyZjQ3NTI3OWNlMjZjMjIwMzg1YjMwYjQ3NzAzCi0t
LSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3JlYWN0L1JF
QURNRS5tZApAQCAtMCwwICsxLDE2IEBACisjIHJlYWN0CisKK0FuIG5wbSBwYWNrYWdlIHRvIGdl
dCB5b3UgaW1tZWRpYXRlIGFjY2VzcyB0byBbUmVhY3RdKGh0dHBzOi8vZmFjZWJvb2suZ2l0aHVi
LmlvL3JlYWN0LyksCit3aXRob3V0IGFsc28gcmVxdWlyaW5nIHRoZSBKU1ggdHJhbnNmb3JtZXIu
IFRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwgZm9yIGNhc2VzIHdoZXJlIHlvdQord2FudCB0byBb
YGJyb3dzZXJpZnlgXShodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svbm9kZS1icm93c2VyaWZ5
KSB5b3VyIG1vZHVsZSB1c2luZworYFJlYWN0YC4KKworKipOb3RlOioqIGJ5IGRlZmF1bHQsIFJl
YWN0IHdpbGwgYmUgaW4gZGV2ZWxvcG1lbnQgbW9kZS4gVGhlIGRldmVsb3BtZW50IHZlcnNpb24g
aW5jbHVkZXMgZXh0cmEgd2FybmluZ3MgYWJvdXQgY29tbW9uIG1pc3Rha2VzLCB3aGVyZWFzIHRo
ZSBwcm9kdWN0aW9uIHZlcnNpb24gaW5jbHVkZXMgZXh0cmEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0
aW9ucyBhbmQgc3RyaXBzIGFsbCBlcnJvciBtZXNzYWdlcy4KKworVG8gdXNlIFJlYWN0IGluIHBy
b2R1Y3Rpb24gbW9kZSwgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgTk9ERV9FTlZgIHRv
IGBwcm9kdWN0aW9uYC4gQSBtaW5pZmllciB0aGF0IHBlcmZvcm1zIGRlYWQtY29kZSBlbGltaW5h
dGlvbiBzdWNoIGFzIFtVZ2xpZnlKU10oaHR0cHM6Ly9naXRodWIuY29tL21pc2hvby9VZ2xpZnlK
UzIpIGlzIHJlY29tbWVuZGVkIHRvIGNvbXBsZXRlbHkgcmVtb3ZlIHRoZSBleHRyYSBjb2RlIHBy
ZXNlbnQgaW4gZGV2ZWxvcG1lbnQgbW9kZS4KKworIyMgRXhhbXBsZSBVc2FnZQorCitgYGBqcwor
dmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTsKK2BgYApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3JlYWN0L2Rpc3QvcmVhY3Qtd2l0aC1hZGRvbnMubWluLmpz
IGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3JlYWN0L2Rpc3QvcmVhY3Qtd2l0aC1h
ZGRvbnMubWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMwMGExZWQ5ZDBjNzdmMTNhNzcxOTk4ZGZmMmYzMmRk
MjZhYzA2MDEKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVs
ZXMvcmVhY3QvZGlzdC9yZWFjdC13aXRoLWFkZG9ucy5taW4uanMKQEAgLTAsMCArMSwxMyBAQAor
LyoqCisgKiBSZWFjdCAod2l0aCBhZGRvbnMpIHYxNS41LjQKKyAqCisgKiBDb3B5cmlnaHQgMjAx
My1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5z
ZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2Yg
dGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0
cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnku
CisgKgorICovCishZnVuY3Rpb24oZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5k
ZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz1lKCk7ZWxzZSBpZigiZnVuY3Rp
b24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSxlKTtlbHNle3ZhciB0O3Q9
InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xv
YmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzLHQuUmVhY3Q9ZSgp
fX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gbyhhLHMpe2lm
KCFuW2FdKXtpZighdFthXSl7dmFyIHU9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVp
cmU7aWYoIXMmJnUpcmV0dXJuIHUoYSwhMCk7aWYoaSlyZXR1cm4gaShhLCEwKTt2YXIgYz1uZXcg
RXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIithKyInIik7dGhyb3cgYy5jb2RlPSJNT0RVTEVf
Tk9UX0ZPVU5EIixjfXZhciBwPW5bYV09e2V4cG9ydHM6e319O3RbYV1bMF0uY2FsbChwLmV4cG9y
dHMsZnVuY3Rpb24oZSl7dmFyIG49dFthXVsxXVtlXTtyZXR1cm4gbyhufHxlKX0scCxwLmV4cG9y
dHMsZSx0LG4scil9cmV0dXJuIG5bYV0uZXhwb3J0c31mb3IodmFyIGk9ImZ1bmN0aW9uIj09dHlw
ZW9mIHJlcXVpcmUmJnJlcXVpcmUsYT0wO2E8ci5sZW5ndGg7YSsrKW8oclthXSk7cmV0dXJuIG99
KHsxOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt2YXIgbj17
fTtyZXR1cm4gbltlLnRvTG93ZXJDYXNlKCldPXQudG9Mb3dlckNhc2UoKSxuWyJXZWJraXQiK2Vd
PSJ3ZWJraXQiK3QsblsiTW96IitlXT0ibW96Iit0LG5bIm1zIitlXT0iTVMiK3QsblsiTyIrZV09
Im8iK3QudG9Mb3dlckNhc2UoKSxufWZ1bmN0aW9uIG8oZSl7aWYoc1tlXSlyZXR1cm4gc1tlXTtp
ZighYVtlXSlyZXR1cm4gZTt2YXIgdD1hW2VdO2Zvcih2YXIgbiBpbiB0KWlmKHQuaGFzT3duUHJv
cGVydHkobikmJm4gaW4gdSlyZXR1cm4gc1tlXT10W25dO3JldHVybiIifXZhciBpPWUoMzkpLGE9
e2FuaW1hdGlvbmVuZDpyKCJBbmltYXRpb24iLCJBbmltYXRpb25FbmQiKSxhbmltYXRpb25pdGVy
YXRpb246cigiQW5pbWF0aW9uIiwiQW5pbWF0aW9uSXRlcmF0aW9uIiksYW5pbWF0aW9uc3RhcnQ6
cigiQW5pbWF0aW9uIiwiQW5pbWF0aW9uU3RhcnQiKSx0cmFuc2l0aW9uZW5kOnIoIlRyYW5zaXRp
b24iLCJUcmFuc2l0aW9uRW5kIil9LHM9e30sdT17fTtpLmNhblVzZURPTSYmKHU9ZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUsIkFuaW1hdGlvbkV2ZW50ImluIHdpbmRvd3x8KGRl
bGV0ZSBhLmFuaW1hdGlvbmVuZC5hbmltYXRpb24sZGVsZXRlIGEuYW5pbWF0aW9uaXRlcmF0aW9u
LmFuaW1hdGlvbixkZWxldGUgYS5hbmltYXRpb25zdGFydC5hbmltYXRpb24pLCJUcmFuc2l0aW9u
RXZlbnQiaW4gd2luZG93fHxkZWxldGUgYS50cmFuc2l0aW9uZW5kLnRyYW5zaXRpb24pLHQuZXhw
b3J0cz1vfSx7Mzk6Mzl9XSwyOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9u
IHIoZSl7dmFyIHQ9eyI9IjoiPTAiLCI6IjoiPTIifTtyZXR1cm4iJCIrKCIiK2UpLnJlcGxhY2Uo
L1s9Ol0vZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9eyI9
MCI6Ij0iLCI9MiI6IjoifTtyZXR1cm4oIiIrKCIuIj09PWVbMF0mJiIkIj09PWVbMV0/ZS5zdWJz
dHJpbmcoMik6ZS5zdWJzdHJpbmcoMSkpKS5yZXBsYWNlKC8oPTB8PTIpL2csZnVuY3Rpb24oZSl7
cmV0dXJuIHRbZV19KX12YXIgaT17ZXNjYXBlOnIsdW5lc2NhcGU6b307dC5leHBvcnRzPWl9LHt9
XSwzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMTgpLG89ZSgyMyksaT17
bGlua1N0YXRlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcih0aGlzLnN0YXRlW2VdLG8uY3JlYXRl
U3RhdGVLZXlTZXR0ZXIodGhpcyxlKSl9fTt0LmV4cG9ydHM9aX0sezE4OjE4LDIzOjIzfV0sNDpb
ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDM0KSxvPShlKDQyKSxmdW5jdGlv
bihlKXt2YXIgdD10aGlzO2lmKHQuaW5zdGFuY2VQb29sLmxlbmd0aCl7dmFyIG49dC5pbnN0YW5j
ZVBvb2wucG9wKCk7cmV0dXJuIHQuY2FsbChuLGUpLG59cmV0dXJuIG5ldyB0KGUpfSksaT1mdW5j
dGlvbihlLHQpe3ZhciBuPXRoaXM7aWYobi5pbnN0YW5jZVBvb2wubGVuZ3RoKXt2YXIgcj1uLmlu
c3RhbmNlUG9vbC5wb3AoKTtyZXR1cm4gbi5jYWxsKHIsZSx0KSxyfXJldHVybiBuZXcgbihlLHQp
fSxhPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzO2lmKHIuaW5zdGFuY2VQb29sLmxlbmd0aCl7
dmFyIG89ci5pbnN0YW5jZVBvb2wucG9wKCk7cmV0dXJuIHIuY2FsbChvLGUsdCxuKSxvfXJldHVy
biBuZXcgcihlLHQsbil9LHM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89dGhpcztpZihvLmluc3Rh
bmNlUG9vbC5sZW5ndGgpe3ZhciBpPW8uaW5zdGFuY2VQb29sLnBvcCgpO3JldHVybiBvLmNhbGwo
aSxlLHQsbixyKSxpfXJldHVybiBuZXcgbyhlLHQsbixyKX0sdT1mdW5jdGlvbihlKXt2YXIgdD10
aGlzO2UgaW5zdGFuY2VvZiB0fHxyKCIyNSIpLGUuZGVzdHJ1Y3RvcigpLHQuaW5zdGFuY2VQb29s
Lmxlbmd0aDx0LnBvb2xTaXplJiZ0Lmluc3RhbmNlUG9vbC5wdXNoKGUpfSxjPW8scD1mdW5jdGlv
bihlLHQpe3ZhciBuPWU7cmV0dXJuIG4uaW5zdGFuY2VQb29sPVtdLG4uZ2V0UG9vbGVkPXR8fGMs
bi5wb29sU2l6ZXx8KG4ucG9vbFNpemU9MTApLG4ucmVsZWFzZT11LG59LGw9e2FkZFBvb2xpbmdU
bzpwLG9uZUFyZ3VtZW50UG9vbGVyOm8sdHdvQXJndW1lbnRQb29sZXI6aSx0aHJlZUFyZ3VtZW50
UG9vbGVyOmEsZm91ckFyZ3VtZW50UG9vbGVyOnN9O3QuZXhwb3J0cz1sfSx7MzQ6MzQsNDI6NDJ9
XSw1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoNDUpLG89ZSg5KSxpPWUo
MTEpLGE9ZSgyMikscz1lKDEwKSx1PWUoMTQpLGM9ZSgxNSkscD1lKDIxKSxsPWUoMjcpLGY9ZSgz
MyksZD0oZSg0NCksYy5jcmVhdGVFbGVtZW50KSxoPWMuY3JlYXRlRmFjdG9yeSx5PWMuY2xvbmVF
bGVtZW50LHY9cixtPXtDaGlsZHJlbjp7bWFwOm8ubWFwLGZvckVhY2g6by5mb3JFYWNoLGNvdW50
Om8uY291bnQsdG9BcnJheTpvLnRvQXJyYXksb25seTpmfSxDb21wb25lbnQ6aSxQdXJlQ29tcG9u
ZW50OmEsY3JlYXRlRWxlbWVudDpkLGNsb25lRWxlbWVudDp5LGlzVmFsaWRFbGVtZW50OmMuaXNW
YWxpZEVsZW1lbnQsUHJvcFR5cGVzOnAsY3JlYXRlQ2xhc3M6cy5jcmVhdGVDbGFzcyxjcmVhdGVG
YWN0b3J5OmgsY3JlYXRlTWl4aW46ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LERPTTp1LHZlcnNpb246
bCxfX3NwcmVhZDp2fTt0LmV4cG9ydHM9bX0sezEwOjEwLDExOjExLDE0OjE0LDE1OjE1LDIxOjIx
LDIyOjIyLDI3OjI3LDMzOjMzLDQ0OjQ0LDQ1OjQ1LDk6OX1dLDY6W2Z1bmN0aW9uKGUsdCxuKXsi
dXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe2lmKCFvKXt2YXIgdD1lKDI5KTtvPXQuX19TRUNSRVRf
SU5KRUNURURfUkVBQ1RfRE9NX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUR9cmV0dXJu
IG99dmFyIG87bi5nZXRSZWFjdERPTT1yfSx7Mjk6Mjl9XSw3OltmdW5jdGlvbihlLHQsbil7InVz
ZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcg
VHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBv
KGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGlu
aXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4hdHx8Im9iamVj
dCIhPXR5cGVvZiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdD9lOnR9ZnVuY3Rpb24gaShlLHQpe2lm
KCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBl
ciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlw
ZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVj
dG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0p
LHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5f
X3Byb3RvX189dCl9ZnVuY3Rpb24gYShlKXt2YXIgdD0idHJhbnNpdGlvbiIrZSsiVGltZW91dCIs
bj0idHJhbnNpdGlvbiIrZTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoZVtuXSl7aWYobnVsbD09ZVt0
XSlyZXR1cm4gbmV3IEVycm9yKHQrIiB3YXNuJ3Qgc3VwcGxpZWQgdG8gUmVhY3RDU1NUcmFuc2l0
aW9uR3JvdXA6IHRoaXMgY2FuIGNhdXNlIHVucmVsaWFibGUgYW5pbWF0aW9ucyBhbmQgd29uJ3Qg
YmUgc3VwcG9ydGVkIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgUmVhY3QuIFNlZSBodHRwczovL2Zi
Lm1lL3JlYWN0LWFuaW1hdGlvbi10cmFuc2l0aW9uLWdyb3VwLXRpbWVvdXQgZm9yIG1vcmUgaW5m
b3JtYXRpb24uIik7aWYoIm51bWJlciIhPXR5cGVvZiBlW3RdKXJldHVybiBuZXcgRXJyb3IodCsi
IG11c3QgYmUgYSBudW1iZXIgKGluIG1pbGxpc2Vjb25kcykiKX19fXZhciBzPWUoNDUpLHU9ZSg1
KSxjPWUoNDcpLHA9Yyh1LmlzVmFsaWRFbGVtZW50KSxsPWUoMjYpLGY9ZSg4KSxkPWZ1bmN0aW9u
KGUpe2Z1bmN0aW9uIHQoKXt2YXIgbixpLGE7cih0aGlzLHQpO2Zvcih2YXIgcz1hcmd1bWVudHMu
bGVuZ3RoLGM9QXJyYXkocykscD0wO3A8cztwKyspY1twXT1hcmd1bWVudHNbcF07cmV0dXJuIG49
aT1vKHRoaXMsZS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChjKSkpLGkuX3dyYXBDaGlsZD1m
dW5jdGlvbihlKXtyZXR1cm4gdS5jcmVhdGVFbGVtZW50KGYse25hbWU6aS5wcm9wcy50cmFuc2l0
aW9uTmFtZSxhcHBlYXI6aS5wcm9wcy50cmFuc2l0aW9uQXBwZWFyLGVudGVyOmkucHJvcHMudHJh
bnNpdGlvbkVudGVyLGxlYXZlOmkucHJvcHMudHJhbnNpdGlvbkxlYXZlLGFwcGVhclRpbWVvdXQ6
aS5wcm9wcy50cmFuc2l0aW9uQXBwZWFyVGltZW91dCxlbnRlclRpbWVvdXQ6aS5wcm9wcy50cmFu
c2l0aW9uRW50ZXJUaW1lb3V0LGxlYXZlVGltZW91dDppLnByb3BzLnRyYW5zaXRpb25MZWF2ZVRp
bWVvdXR9LGUpfSxhPW4sbyhpLGEpfXJldHVybiBpKHQsZSksdC5wcm90b3R5cGUucmVuZGVyPWZ1
bmN0aW9uKCl7cmV0dXJuIHUuY3JlYXRlRWxlbWVudChsLHMoe30sdGhpcy5wcm9wcyx7Y2hpbGRG
YWN0b3J5OnRoaXMuX3dyYXBDaGlsZH0pKX0sdH0odS5Db21wb25lbnQpO2QuZGlzcGxheU5hbWU9
IlJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwIixkLnByb3BUeXBlcz17dHJhbnNpdGlvbk5hbWU6Zi5w
cm9wVHlwZXMubmFtZSx0cmFuc2l0aW9uQXBwZWFyOnAuYm9vbCx0cmFuc2l0aW9uRW50ZXI6cC5i
b29sLHRyYW5zaXRpb25MZWF2ZTpwLmJvb2wsdHJhbnNpdGlvbkFwcGVhclRpbWVvdXQ6YSgiQXBw
ZWFyIiksdHJhbnNpdGlvbkVudGVyVGltZW91dDphKCJFbnRlciIpLHRyYW5zaXRpb25MZWF2ZVRp
bWVvdXQ6YSgiTGVhdmUiKX0sZC5kZWZhdWx0UHJvcHM9e3RyYW5zaXRpb25BcHBlYXI6ITEsdHJh
bnNpdGlvbkVudGVyOiEwLHRyYW5zaXRpb25MZWF2ZTohMH0sdC5leHBvcnRzPWR9LHsyNjoyNiw0
NTo0NSw0Nzo0Nyw1OjUsODo4fV0sODpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5j
dGlvbiByKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fu
bm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbyhlLHQpe2lmKCFlKXRo
cm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1
cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYm
ImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIGkoZSx0KXtpZigiZnVuY3Rpb24iIT10
eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBt
dXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3Rv
dHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxl
bnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNl
dFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfXZh
ciBhPWUoNSkscz1lKDYpLHU9ZSg0NyksYz11KGEuaXNWYWxpZEVsZW1lbnQpLHA9ZSgzOCksbD1l
KDI1KSxmPWUoMzMpLGQ9MTcsaD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIG4saSxhO3Io
dGhpcyx0KTtmb3IodmFyIHU9YXJndW1lbnRzLmxlbmd0aCxjPUFycmF5KHUpLGY9MDtmPHU7Zisr
KWNbZl09YXJndW1lbnRzW2ZdO3JldHVybiBuPWk9byh0aGlzLGUuY2FsbC5hcHBseShlLFt0aGlz
XS5jb25jYXQoYykpKSxpLl9pc01vdW50ZWQ9ITEsaS50cmFuc2l0aW9uPWZ1bmN0aW9uKGUsdCxu
KXt2YXIgcj1zLmdldFJlYWN0RE9NKCkuZmluZERPTU5vZGUoaSk7aWYoIXIpcmV0dXJuIHZvaWQo
dCYmdCgpKTt2YXIgbz1pLnByb3BzLm5hbWVbZV18fGkucHJvcHMubmFtZSsiLSIrZSxhPWkucHJv
cHMubmFtZVtlKyJBY3RpdmUiXXx8bysiLWFjdGl2ZSIsdT1udWxsLGM9ZnVuY3Rpb24oZSl7ZSYm
ZS50YXJnZXQhPT1yfHwoY2xlYXJUaW1lb3V0KHUpLHAucmVtb3ZlQ2xhc3MocixvKSxwLnJlbW92
ZUNsYXNzKHIsYSksbC5yZW1vdmVFbmRFdmVudExpc3RlbmVyKHIsYyksdCYmdCgpKX07cC5hZGRD
bGFzcyhyLG8pLGkucXVldWVDbGFzc0FuZE5vZGUoYSxyKSxuPyh1PXNldFRpbWVvdXQoYyxuKSxp
LnRyYW5zaXRpb25UaW1lb3V0cy5wdXNoKHUpKTpsLmFkZEVuZEV2ZW50TGlzdGVuZXIocixjKX0s
aS5xdWV1ZUNsYXNzQW5kTm9kZT1mdW5jdGlvbihlLHQpe2kuY2xhc3NOYW1lQW5kTm9kZVF1ZXVl
LnB1c2goe2NsYXNzTmFtZTplLG5vZGU6dH0pLGkudGltZW91dHx8KGkudGltZW91dD1zZXRUaW1l
b3V0KGkuZmx1c2hDbGFzc05hbWVBbmROb2RlUXVldWUsZCkpfSxpLmZsdXNoQ2xhc3NOYW1lQW5k
Tm9kZVF1ZXVlPWZ1bmN0aW9uKCl7aS5faXNNb3VudGVkJiZpLmNsYXNzTmFtZUFuZE5vZGVRdWV1
ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3AuYWRkQ2xhc3MoZS5ub2RlLGUuY2xhc3NOYW1lKX0pLGku
Y2xhc3NOYW1lQW5kTm9kZVF1ZXVlLmxlbmd0aD0wLGkudGltZW91dD1udWxsfSxpLmNvbXBvbmVu
dFdpbGxBcHBlYXI9ZnVuY3Rpb24oZSl7aS5wcm9wcy5hcHBlYXI/aS50cmFuc2l0aW9uKCJhcHBl
YXIiLGUsaS5wcm9wcy5hcHBlYXJUaW1lb3V0KTplKCl9LGkuY29tcG9uZW50V2lsbEVudGVyPWZ1
bmN0aW9uKGUpe2kucHJvcHMuZW50ZXI/aS50cmFuc2l0aW9uKCJlbnRlciIsZSxpLnByb3BzLmVu
dGVyVGltZW91dCk6ZSgpfSxpLmNvbXBvbmVudFdpbGxMZWF2ZT1mdW5jdGlvbihlKXtpLnByb3Bz
LmxlYXZlP2kudHJhbnNpdGlvbigibGVhdmUiLGUsaS5wcm9wcy5sZWF2ZVRpbWVvdXQpOmUoKX0s
YT1uLG8oaSxhKX1yZXR1cm4gaSh0LGUpLHQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxNb3VudD1m
dW5jdGlvbigpe3RoaXMuY2xhc3NOYW1lQW5kTm9kZVF1ZXVlPVtdLHRoaXMudHJhbnNpdGlvblRp
bWVvdXRzPVtdfSx0LnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3RoaXMu
X2lzTW91bnRlZD0hMH0sdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24o
KXt0aGlzLl9pc01vdW50ZWQ9ITEsdGhpcy50aW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy50aW1l
b3V0KSx0aGlzLnRyYW5zaXRpb25UaW1lb3V0cy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2NsZWFyVGlt
ZW91dChlKX0pLHRoaXMuY2xhc3NOYW1lQW5kTm9kZVF1ZXVlLmxlbmd0aD0wfSx0LnByb3RvdHlw
ZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gZih0aGlzLnByb3BzLmNoaWxkcmVuKX0sdH0oYS5D
b21wb25lbnQpO2gucHJvcFR5cGVzPXtuYW1lOmMub25lT2ZUeXBlKFtjLnN0cmluZyxjLnNoYXBl
KHtlbnRlcjpjLnN0cmluZyxsZWF2ZTpjLnN0cmluZyxhY3RpdmU6Yy5zdHJpbmd9KSxjLnNoYXBl
KHtlbnRlcjpjLnN0cmluZyxlbnRlckFjdGl2ZTpjLnN0cmluZyxsZWF2ZTpjLnN0cmluZyxsZWF2
ZUFjdGl2ZTpjLnN0cmluZyxhcHBlYXI6Yy5zdHJpbmcsYXBwZWFyQWN0aXZlOmMuc3RyaW5nfSld
KS5pc1JlcXVpcmVkLGFwcGVhcjpjLmJvb2wsZW50ZXI6Yy5ib29sLGxlYXZlOmMuYm9vbCxhcHBl
YXJUaW1lb3V0OmMubnVtYmVyLGVudGVyVGltZW91dDpjLm51bWJlcixsZWF2ZVRpbWVvdXQ6Yy5u
dW1iZXJ9LHQuZXhwb3J0cz1ofSx7MjU6MjUsMzM6MzMsMzg6MzgsNDc6NDcsNTo1LDY6Nn1dLDk6
W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4oIiIrZSku
cmVwbGFjZShiLCIkJi8iKX1mdW5jdGlvbiBvKGUsdCl7dGhpcy5mdW5jPWUsdGhpcy5jb250ZXh0
PXQsdGhpcy5jb3VudD0wfWZ1bmN0aW9uIGkoZSx0LG4pe3ZhciByPWUuZnVuYyxvPWUuY29udGV4
dDtyLmNhbGwobyx0LGUuY291bnQrKyl9ZnVuY3Rpb24gYShlLHQsbil7aWYobnVsbD09ZSlyZXR1
cm4gZTt2YXIgcj1vLmdldFBvb2xlZCh0LG4pO20oZSxpLHIpLG8ucmVsZWFzZShyKX1mdW5jdGlv
biBzKGUsdCxuLHIpe3RoaXMucmVzdWx0PWUsdGhpcy5rZXlQcmVmaXg9dCx0aGlzLmZ1bmM9bix0
aGlzLmNvbnRleHQ9cix0aGlzLmNvdW50PTB9ZnVuY3Rpb24gdShlLHQsbil7dmFyIG89ZS5yZXN1
bHQsaT1lLmtleVByZWZpeCxhPWUuZnVuYyxzPWUuY29udGV4dCx1PWEuY2FsbChzLHQsZS5jb3Vu
dCsrKTtBcnJheS5pc0FycmF5KHUpP2ModSxvLG4sdi50aGF0UmV0dXJuc0FyZ3VtZW50KTpudWxs
IT11JiYoeS5pc1ZhbGlkRWxlbWVudCh1KSYmKHU9eS5jbG9uZUFuZFJlcGxhY2VLZXkodSxpKygh
dS5rZXl8fHQmJnQua2V5PT09dS5rZXk/IiI6cih1LmtleSkrIi8iKStuKSksby5wdXNoKHUpKX1m
dW5jdGlvbiBjKGUsdCxuLG8saSl7dmFyIGE9IiI7bnVsbCE9biYmKGE9cihuKSsiLyIpO3ZhciBj
PXMuZ2V0UG9vbGVkKHQsYSxvLGkpO20oZSx1LGMpLHMucmVsZWFzZShjKX1mdW5jdGlvbiBwKGUs
dCxuKXtpZihudWxsPT1lKXJldHVybiBlO3ZhciByPVtdO3JldHVybiBjKGUscixudWxsLHQsbiks
cn1mdW5jdGlvbiBsKGUsdCxuKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBmKGUsdCl7cmV0dXJuIG0o
ZSxsLG51bGwpfWZ1bmN0aW9uIGQoZSl7dmFyIHQ9W107cmV0dXJuIGMoZSx0LG51bGwsdi50aGF0
UmV0dXJuc0FyZ3VtZW50KSx0fXZhciBoPWUoNCkseT1lKDE1KSx2PWUoNDApLG09ZSgzNiksRT1o
LnR3b0FyZ3VtZW50UG9vbGVyLGc9aC5mb3VyQXJndW1lbnRQb29sZXIsYj0vXC8rL2c7by5wcm90
b3R5cGUuZGVzdHJ1Y3Rvcj1mdW5jdGlvbigpe3RoaXMuZnVuYz1udWxsLHRoaXMuY29udGV4dD1u
dWxsLHRoaXMuY291bnQ9MH0saC5hZGRQb29saW5nVG8obyxFKSxzLnByb3RvdHlwZS5kZXN0cnVj
dG9yPWZ1bmN0aW9uKCl7dGhpcy5yZXN1bHQ9bnVsbCx0aGlzLmtleVByZWZpeD1udWxsLHRoaXMu
ZnVuYz1udWxsLHRoaXMuY29udGV4dD1udWxsLHRoaXMuY291bnQ9MH0saC5hZGRQb29saW5nVG8o
cyxnKTt2YXIgXz17Zm9yRWFjaDphLG1hcDpwLG1hcEludG9XaXRoS2V5UHJlZml4SW50ZXJuYWw6
Yyxjb3VudDpmLHRvQXJyYXk6ZH07dC5leHBvcnRzPV99LHsxNToxNSwzNjozNiw0OjQsNDA6NDB9
XSwxMDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBl
fWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj1iLmhhc093blByb3BlcnR5KHQpP2JbdF06bnVsbDt3Lmhh
c093blByb3BlcnR5KHQpJiYiT1ZFUlJJREVfQkFTRSIhPT1uJiZmKCI3MyIsdCksZSYmIkRFRklO
RV9NQU5ZIiE9PW4mJiJERUZJTkVfTUFOWV9NRVJHRUQiIT09biYmZigiNzQiLHQpfWZ1bmN0aW9u
IGkoZSx0KXtpZih0KXsiZnVuY3Rpb24iPT10eXBlb2YgdCYmZigiNzUiKSx5LmlzVmFsaWRFbGVt
ZW50KHQpJiZmKCI3NiIpO3ZhciBuPWUucHJvdG90eXBlLHI9bi5fX3JlYWN0QXV0b0JpbmRQYWly
czt0Lmhhc093blByb3BlcnR5KEUpJiZfLm1peGlucyhlLHQubWl4aW5zKTtmb3IodmFyIGkgaW4g
dClpZih0Lmhhc093blByb3BlcnR5KGkpJiZpIT09RSl7dmFyIGE9dFtpXSxzPW4uaGFzT3duUHJv
cGVydHkoaSk7aWYobyhzLGkpLF8uaGFzT3duUHJvcGVydHkoaSkpX1tpXShlLGEpO2Vsc2V7dmFy
IHA9Yi5oYXNPd25Qcm9wZXJ0eShpKSxsPSJmdW5jdGlvbiI9PXR5cGVvZiBhLGQ9bCYmIXAmJiFz
JiYhMSE9PXQuYXV0b2JpbmQ7aWYoZClyLnB1c2goaSxhKSxuW2ldPWE7ZWxzZSBpZihzKXt2YXIg
aD1iW2ldOyghcHx8IkRFRklORV9NQU5ZX01FUkdFRCIhPT1oJiYiREVGSU5FX01BTlkiIT09aCkm
JmYoIjc3IixoLGkpLCJERUZJTkVfTUFOWV9NRVJHRUQiPT09aD9uW2ldPXUobltpXSxhKToiREVG
SU5FX01BTlkiPT09aCYmKG5baV09YyhuW2ldLGEpKX1lbHNlIG5baV09YX19fX1mdW5jdGlvbiBh
KGUsdCl7aWYodClmb3IodmFyIG4gaW4gdCl7dmFyIHI9dFtuXTtpZih0Lmhhc093blByb3BlcnR5
KG4pKXt2YXIgbz1uIGluIF87byYmZigiNzgiLG4pO3ZhciBpPW4gaW4gZTtpJiZmKCI3OSIsbiks
ZVtuXT1yfX19ZnVuY3Rpb24gcyhlLHQpe2UmJnQmJiJvYmplY3QiPT10eXBlb2YgZSYmIm9iamVj
dCI9PXR5cGVvZiB0fHxmKCI4MCIpO2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikm
Jih2b2lkIDAhPT1lW25dJiZmKCI4MSIsbiksZVtuXT10W25dKTtyZXR1cm4gZX1mdW5jdGlvbiB1
KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cykscj10
LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihudWxsPT1uKXJldHVybiByO2lmKG51bGw9PXIpcmV0
dXJuIG47dmFyIG89e307cmV0dXJuIHMobyxuKSxzKG8sciksb319ZnVuY3Rpb24gYyhlLHQpe3Jl
dHVybiBmdW5jdGlvbigpe2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLHQuYXBwbHkodGhpcyxhcmd1
bWVudHMpfX1mdW5jdGlvbiBwKGUsdCl7cmV0dXJuIHQuYmluZChlKX1mdW5jdGlvbiBsKGUpe2Zv
cih2YXIgdD1lLl9fcmVhY3RBdXRvQmluZFBhaXJzLG49MDtuPHQubGVuZ3RoO24rPTIpe3ZhciBy
PXRbbl0sbz10W24rMV07ZVtyXT1wKGUsbyl9fXZhciBmPWUoMzQpLGQ9ZSg0NSksaD1lKDExKSx5
PWUoMTUpLHY9KGUoMjApLGUoMTkpKSxtPWUoNDEpLEU9KGUoNDIpLGUoNDQpLCJtaXhpbnMiKSxn
PVtdLGI9e21peGluczoiREVGSU5FX01BTlkiLHN0YXRpY3M6IkRFRklORV9NQU5ZIixwcm9wVHlw
ZXM6IkRFRklORV9NQU5ZIixjb250ZXh0VHlwZXM6IkRFRklORV9NQU5ZIixjaGlsZENvbnRleHRU
eXBlczoiREVGSU5FX01BTlkiLGdldERlZmF1bHRQcm9wczoiREVGSU5FX01BTllfTUVSR0VEIixn
ZXRJbml0aWFsU3RhdGU6IkRFRklORV9NQU5ZX01FUkdFRCIsZ2V0Q2hpbGRDb250ZXh0OiJERUZJ
TkVfTUFOWV9NRVJHRUQiLHJlbmRlcjoiREVGSU5FX09OQ0UiLGNvbXBvbmVudFdpbGxNb3VudDoi
REVGSU5FX01BTlkiLGNvbXBvbmVudERpZE1vdW50OiJERUZJTkVfTUFOWSIsY29tcG9uZW50V2ls
bFJlY2VpdmVQcm9wczoiREVGSU5FX01BTlkiLHNob3VsZENvbXBvbmVudFVwZGF0ZToiREVGSU5F
X09OQ0UiLGNvbXBvbmVudFdpbGxVcGRhdGU6IkRFRklORV9NQU5ZIixjb21wb25lbnREaWRVcGRh
dGU6IkRFRklORV9NQU5ZIixjb21wb25lbnRXaWxsVW5tb3VudDoiREVGSU5FX01BTlkiLHVwZGF0
ZUNvbXBvbmVudDoiT1ZFUlJJREVfQkFTRSJ9LF89e2Rpc3BsYXlOYW1lOmZ1bmN0aW9uKGUsdCl7
ZS5kaXNwbGF5TmFtZT10fSxtaXhpbnM6ZnVuY3Rpb24oZSx0KXtpZih0KWZvcih2YXIgbj0wO248
dC5sZW5ndGg7bisrKWkoZSx0W25dKX0sY2hpbGRDb250ZXh0VHlwZXM6ZnVuY3Rpb24oZSx0KXtl
LmNoaWxkQ29udGV4dFR5cGVzPWQoe30sZS5jaGlsZENvbnRleHRUeXBlcyx0KX0sY29udGV4dFR5
cGVzOmZ1bmN0aW9uKGUsdCl7ZS5jb250ZXh0VHlwZXM9ZCh7fSxlLmNvbnRleHRUeXBlcyx0KX0s
Z2V0RGVmYXVsdFByb3BzOmZ1bmN0aW9uKGUsdCl7ZS5nZXREZWZhdWx0UHJvcHM/ZS5nZXREZWZh
dWx0UHJvcHM9dShlLmdldERlZmF1bHRQcm9wcyx0KTplLmdldERlZmF1bHRQcm9wcz10fSxwcm9w
VHlwZXM6ZnVuY3Rpb24oZSx0KXtlLnByb3BUeXBlcz1kKHt9LGUucHJvcFR5cGVzLHQpfSxzdGF0
aWNzOmZ1bmN0aW9uKGUsdCl7YShlLHQpfSxhdXRvYmluZDpmdW5jdGlvbigpe319LHc9e3JlcGxh
Y2VTdGF0ZTpmdW5jdGlvbihlLHQpe3RoaXMudXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlKHRo
aXMsZSksdCYmdGhpcy51cGRhdGVyLmVucXVldWVDYWxsYmFjayh0aGlzLHQsInJlcGxhY2VTdGF0
ZSIpfSxpc01vdW50ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51cGRhdGVyLmlzTW91bnRlZCh0
aGlzKX19LEE9ZnVuY3Rpb24oKXt9O2QoQS5wcm90b3R5cGUsaC5wcm90b3R5cGUsdyk7dmFyIFQ9
e2NyZWF0ZUNsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0PXIoZnVuY3Rpb24oZSxuLHIpe3RoaXMuX19y
ZWFjdEF1dG9CaW5kUGFpcnMubGVuZ3RoJiZsKHRoaXMpLHRoaXMucHJvcHM9ZSx0aGlzLmNvbnRl
eHQ9bix0aGlzLnJlZnM9bSx0aGlzLnVwZGF0ZXI9cnx8dix0aGlzLnN0YXRlPW51bGw7dmFyIG89
dGhpcy5nZXRJbml0aWFsU3RhdGU/dGhpcy5nZXRJbml0aWFsU3RhdGUoKTpudWxsOygib2JqZWN0
IiE9dHlwZW9mIG98fEFycmF5LmlzQXJyYXkobykpJiZmKCI4MiIsdC5kaXNwbGF5TmFtZXx8IlJl
YWN0Q29tcG9zaXRlQ29tcG9uZW50IiksdGhpcy5zdGF0ZT1vfSk7dC5wcm90b3R5cGU9bmV3IEEs
dC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCx0LnByb3RvdHlwZS5fX3JlYWN0QXV0b0JpbmRQYWly
cz1bXSxnLmZvckVhY2goaS5iaW5kKG51bGwsdCkpLGkodCxlKSx0LmdldERlZmF1bHRQcm9wcyYm
KHQuZGVmYXVsdFByb3BzPXQuZ2V0RGVmYXVsdFByb3BzKCkpLHQucHJvdG90eXBlLnJlbmRlcnx8
ZigiODMiKTtmb3IodmFyIG4gaW4gYil0LnByb3RvdHlwZVtuXXx8KHQucHJvdG90eXBlW25dPW51
bGwpO3JldHVybiB0fSxpbmplY3Rpb246e2luamVjdE1peGluOmZ1bmN0aW9uKGUpe2cucHVzaChl
KX19fTt0LmV4cG9ydHM9VH0sezExOjExLDE1OjE1LDE5OjE5LDIwOjIwLDM0OjM0LDQxOjQxLDQy
OjQyLDQ0OjQ0LDQ1OjQ1fV0sMTE6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rp
b24gcihlLHQsbil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz1hLHRoaXMu
dXBkYXRlcj1ufHxpfXZhciBvPWUoMzQpLGk9ZSgxOSksYT0oZSgzMCksZSg0MSkpO2UoNDIpLGUo
NDQpO3IucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e30sci5wcm90b3R5cGUuc2V0U3RhdGU9
ZnVuY3Rpb24oZSx0KXsib2JqZWN0IiE9dHlwZW9mIGUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlJiZu
dWxsIT1lJiZvKCI4NSIpLHRoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcyxlKSx0JiZ0
aGlzLnVwZGF0ZXIuZW5xdWV1ZUNhbGxiYWNrKHRoaXMsdCwic2V0U3RhdGUiKX0sci5wcm90b3R5
cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0
ZSh0aGlzKSxlJiZ0aGlzLnVwZGF0ZXIuZW5xdWV1ZUNhbGxiYWNrKHRoaXMsZSwiZm9yY2VVcGRh
dGUiKX07dC5leHBvcnRzPXJ9LHsxOToxOSwzMDozMCwzNDozNCw0MTo0MSw0Mjo0Miw0NDo0NH1d
LDEyOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMzUpLG89e3Nob3VsZENv
bXBvbmVudFVwZGF0ZTpmdW5jdGlvbihlLHQpe3JldHVybiByKHRoaXMsZSx0KX19O3QuZXhwb3J0
cz1vfSx7MzU6MzV9XSwxMzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj17Y3Vy
cmVudDpudWxsfTt0LmV4cG9ydHM9cn0se31dLDE0OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJp
Y3QiO3ZhciByPWUoMTUpLG89ci5jcmVhdGVGYWN0b3J5LGk9e2E6bygiYSIpLGFiYnI6bygiYWJi
ciIpLGFkZHJlc3M6bygiYWRkcmVzcyIpLGFyZWE6bygiYXJlYSIpLGFydGljbGU6bygiYXJ0aWNs
ZSIpLGFzaWRlOm8oImFzaWRlIiksYXVkaW86bygiYXVkaW8iKSxiOm8oImIiKSxiYXNlOm8oImJh
c2UiKSxiZGk6bygiYmRpIiksYmRvOm8oImJkbyIpLGJpZzpvKCJiaWciKSxibG9ja3F1b3RlOm8o
ImJsb2NrcXVvdGUiKSxib2R5Om8oImJvZHkiKSxicjpvKCJiciIpLGJ1dHRvbjpvKCJidXR0b24i
KSxjYW52YXM6bygiY2FudmFzIiksY2FwdGlvbjpvKCJjYXB0aW9uIiksY2l0ZTpvKCJjaXRlIiks
Y29kZTpvKCJjb2RlIiksY29sOm8oImNvbCIpLGNvbGdyb3VwOm8oImNvbGdyb3VwIiksZGF0YTpv
KCJkYXRhIiksZGF0YWxpc3Q6bygiZGF0YWxpc3QiKSxkZDpvKCJkZCIpLGRlbDpvKCJkZWwiKSxk
ZXRhaWxzOm8oImRldGFpbHMiKSxkZm46bygiZGZuIiksZGlhbG9nOm8oImRpYWxvZyIpLGRpdjpv
KCJkaXYiKSxkbDpvKCJkbCIpLGR0Om8oImR0IiksZW06bygiZW0iKSxlbWJlZDpvKCJlbWJlZCIp
LGZpZWxkc2V0Om8oImZpZWxkc2V0IiksZmlnY2FwdGlvbjpvKCJmaWdjYXB0aW9uIiksZmlndXJl
Om8oImZpZ3VyZSIpLGZvb3RlcjpvKCJmb290ZXIiKSxmb3JtOm8oImZvcm0iKSxoMTpvKCJoMSIp
LGgyOm8oImgyIiksaDM6bygiaDMiKSxoNDpvKCJoNCIpLGg1Om8oImg1IiksaDY6bygiaDYiKSxo
ZWFkOm8oImhlYWQiKSxoZWFkZXI6bygiaGVhZGVyIiksaGdyb3VwOm8oImhncm91cCIpLGhyOm8o
ImhyIiksaHRtbDpvKCJodG1sIiksaTpvKCJpIiksaWZyYW1lOm8oImlmcmFtZSIpLGltZzpvKCJp
bWciKSxpbnB1dDpvKCJpbnB1dCIpLGluczpvKCJpbnMiKSxrYmQ6bygia2JkIiksa2V5Z2VuOm8o
ImtleWdlbiIpLGxhYmVsOm8oImxhYmVsIiksbGVnZW5kOm8oImxlZ2VuZCIpLGxpOm8oImxpIiks
bGluazpvKCJsaW5rIiksbWFpbjpvKCJtYWluIiksbWFwOm8oIm1hcCIpLG1hcms6bygibWFyayIp
LG1lbnU6bygibWVudSIpLG1lbnVpdGVtOm8oIm1lbnVpdGVtIiksbWV0YTpvKCJtZXRhIiksbWV0
ZXI6bygibWV0ZXIiKSxuYXY6bygibmF2Iiksbm9zY3JpcHQ6bygibm9zY3JpcHQiKSxvYmplY3Q6
bygib2JqZWN0Iiksb2w6bygib2wiKSxvcHRncm91cDpvKCJvcHRncm91cCIpLG9wdGlvbjpvKCJv
cHRpb24iKSxvdXRwdXQ6bygib3V0cHV0IikscDpvKCJwIikscGFyYW06bygicGFyYW0iKSxwaWN0
dXJlOm8oInBpY3R1cmUiKSxwcmU6bygicHJlIikscHJvZ3Jlc3M6bygicHJvZ3Jlc3MiKSxxOm8o
InEiKSxycDpvKCJycCIpLHJ0Om8oInJ0IikscnVieTpvKCJydWJ5IiksczpvKCJzIiksc2FtcDpv
KCJzYW1wIiksc2NyaXB0Om8oInNjcmlwdCIpLHNlY3Rpb246bygic2VjdGlvbiIpLHNlbGVjdDpv
KCJzZWxlY3QiKSxzbWFsbDpvKCJzbWFsbCIpLHNvdXJjZTpvKCJzb3VyY2UiKSxzcGFuOm8oInNw
YW4iKSxzdHJvbmc6bygic3Ryb25nIiksc3R5bGU6bygic3R5bGUiKSxzdWI6bygic3ViIiksc3Vt
bWFyeTpvKCJzdW1tYXJ5Iiksc3VwOm8oInN1cCIpLHRhYmxlOm8oInRhYmxlIiksdGJvZHk6bygi
dGJvZHkiKSx0ZDpvKCJ0ZCIpLHRleHRhcmVhOm8oInRleHRhcmVhIiksdGZvb3Q6bygidGZvb3Qi
KSx0aDpvKCJ0aCIpLHRoZWFkOm8oInRoZWFkIiksdGltZTpvKCJ0aW1lIiksdGl0bGU6bygidGl0
bGUiKSx0cjpvKCJ0ciIpLHRyYWNrOm8oInRyYWNrIiksdTpvKCJ1IiksdWw6bygidWwiKSx2YXI6
bygidmFyIiksdmlkZW86bygidmlkZW8iKSx3YnI6bygid2JyIiksY2lyY2xlOm8oImNpcmNsZSIp
LGNsaXBQYXRoOm8oImNsaXBQYXRoIiksZGVmczpvKCJkZWZzIiksZWxsaXBzZTpvKCJlbGxpcHNl
IiksZzpvKCJnIiksaW1hZ2U6bygiaW1hZ2UiKSxsaW5lOm8oImxpbmUiKSxsaW5lYXJHcmFkaWVu
dDpvKCJsaW5lYXJHcmFkaWVudCIpLG1hc2s6bygibWFzayIpLHBhdGg6bygicGF0aCIpLHBhdHRl
cm46bygicGF0dGVybiIpLHBvbHlnb246bygicG9seWdvbiIpLHBvbHlsaW5lOm8oInBvbHlsaW5l
IikscmFkaWFsR3JhZGllbnQ6bygicmFkaWFsR3JhZGllbnQiKSxyZWN0Om8oInJlY3QiKSxzdG9w
Om8oInN0b3AiKSxzdmc6bygic3ZnIiksdGV4dDpvKCJ0ZXh0IiksdHNwYW46bygidHNwYW4iKX07
dC5leHBvcnRzPWl9LHsxNToxNX1dLDE1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1
bmN0aW9uIHIoZSl7cmV0dXJuIHZvaWQgMCE9PWUucmVmfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIHZv
aWQgMCE9PWUua2V5fXZhciBpPWUoNDUpLGE9ZSgxMykscz0oZSg0NCksZSgzMCksT2JqZWN0LnBy
b3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSksdT1lKDE2KSxjPXtrZXk6ITAscmVmOiEwLF9fc2VsZjoh
MCxfX3NvdXJjZTohMH0scD1mdW5jdGlvbihlLHQsbixyLG8saSxhKXtyZXR1cm57JCR0eXBlb2Y6
dSx0eXBlOmUsa2V5OnQscmVmOm4scHJvcHM6YSxfb3duZXI6aX19O3AuY3JlYXRlRWxlbWVudD1m
dW5jdGlvbihlLHQsbil7dmFyIGksdT17fSxsPW51bGwsZj1udWxsO2lmKG51bGwhPXQpe3IodCkm
JihmPXQucmVmKSxvKHQpJiYobD0iIit0LmtleSksdm9pZCAwPT09dC5fX3NlbGY/bnVsbDp0Ll9f
c2VsZix2b2lkIDA9PT10Ll9fc291cmNlP251bGw6dC5fX3NvdXJjZTtmb3IoaSBpbiB0KXMuY2Fs
bCh0LGkpJiYhYy5oYXNPd25Qcm9wZXJ0eShpKSYmKHVbaV09dFtpXSl9dmFyIGQ9YXJndW1lbnRz
Lmxlbmd0aC0yO2lmKDE9PT1kKXUuY2hpbGRyZW49bjtlbHNlIGlmKGQ+MSl7Zm9yKHZhciBoPUFy
cmF5KGQpLHk9MDt5PGQ7eSsrKWhbeV09YXJndW1lbnRzW3krMl07dS5jaGlsZHJlbj1ofWlmKGUm
JmUuZGVmYXVsdFByb3BzKXt2YXIgdj1lLmRlZmF1bHRQcm9wcztmb3IoaSBpbiB2KXZvaWQgMD09
PXVbaV0mJih1W2ldPXZbaV0pfXJldHVybiBwKGUsbCxmLDAsMCxhLmN1cnJlbnQsdSl9LHAuY3Jl
YXRlRmFjdG9yeT1mdW5jdGlvbihlKXt2YXIgdD1wLmNyZWF0ZUVsZW1lbnQuYmluZChudWxsLGUp
O3JldHVybiB0LnR5cGU9ZSx0fSxwLmNsb25lQW5kUmVwbGFjZUtleT1mdW5jdGlvbihlLHQpe3Jl
dHVybiBwKGUudHlwZSx0LGUucmVmLGUuX3NlbGYsZS5fc291cmNlLGUuX293bmVyLGUucHJvcHMp
fSxwLmNsb25lRWxlbWVudD1mdW5jdGlvbihlLHQsbil7dmFyIHUsbD1pKHt9LGUucHJvcHMpLGY9
ZS5rZXksZD1lLnJlZixoPShlLl9zZWxmLGUuX3NvdXJjZSxlLl9vd25lcik7aWYobnVsbCE9dCl7
cih0KSYmKGQ9dC5yZWYsaD1hLmN1cnJlbnQpLG8odCkmJihmPSIiK3Qua2V5KTt2YXIgeTtlLnR5
cGUmJmUudHlwZS5kZWZhdWx0UHJvcHMmJih5PWUudHlwZS5kZWZhdWx0UHJvcHMpO2Zvcih1IGlu
IHQpcy5jYWxsKHQsdSkmJiFjLmhhc093blByb3BlcnR5KHUpJiYodm9pZCAwPT09dFt1XSYmdm9p
ZCAwIT09eT9sW3VdPXlbdV06bFt1XT10W3VdKX12YXIgdj1hcmd1bWVudHMubGVuZ3RoLTI7aWYo
MT09PXYpbC5jaGlsZHJlbj1uO2Vsc2UgaWYodj4xKXtmb3IodmFyIG09QXJyYXkodiksRT0wO0U8
djtFKyspbVtFXT1hcmd1bWVudHNbRSsyXTtsLmNoaWxkcmVuPW19cmV0dXJuIHAoZS50eXBlLGYs
ZCwwLDAsaCxsKX0scC5pc1ZhbGlkRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09
dHlwZW9mIGUmJm51bGwhPT1lJiZlLiQkdHlwZW9mPT09dX0sdC5leHBvcnRzPXB9LHsxMzoxMywx
NjoxNiwzMDozMCw0NDo0NCw0NTo0NX1dLDE2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3Qi
O3ZhciByPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3Io
InJlYWN0LmVsZW1lbnQiKXx8NjAxMDM7dC5leHBvcnRzPXJ9LHt9XSwxNzpbZnVuY3Rpb24oZSx0
LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDM0KSxvPWUoOSksaT1lKDE1KSxhPWUoNDApLHM9KGUo
NDIpLGUoNDQpLHtjcmVhdGU6ZnVuY3Rpb24oZSl7aWYoIm9iamVjdCIhPXR5cGVvZiBlfHwhZXx8
QXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZTtpZihpLmlzVmFsaWRFbGVtZW50KGUpKXJldHVybiBl
OzE9PT1lLm5vZGVUeXBlJiZyKCIwIik7dmFyIHQ9W107Zm9yKHZhciBuIGluIGUpby5tYXBJbnRv
V2l0aEtleVByZWZpeEludGVybmFsKGVbbl0sdCxuLGEudGhhdFJldHVybnNBcmd1bWVudCk7cmV0
dXJuIHR9fSk7dC5leHBvcnRzPXN9LHsxNToxNSwzNDozNCw0MDo0MCw0Mjo0Miw0NDo0NCw5Ojl9
XSwxODpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dGhpcy52
YWx1ZT1lLHRoaXMucmVxdWVzdENoYW5nZT10fWZ1bmN0aW9uIG8oZSl7dmFyIHQ9e3ZhbHVlOnZv
aWQgMD09PWU/aS5Qcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQ6ZS5pc1JlcXVpcmVkLHJlcXVlc3RD
aGFuZ2U6aS5Qcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkfTtyZXR1cm4gaS5Qcm9wVHlwZXMuc2hh
cGUodCl9dmFyIGk9ZSg1KTtyLlByb3BUeXBlcz17bGluazpvfSx0LmV4cG9ydHM9cn0sezU6NX1d
LDE5OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPShlKDQ0KSx7aXNNb3VudGVk
OmZ1bmN0aW9uKGUpe3JldHVybiExfSxlbnF1ZXVlQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXt9LGVu
cXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlvbihlKXt9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rp
b24oZSx0KXt9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbihlLHQpe319KTt0LmV4cG9ydHM9cn0s
ezQ0OjQ0fV0sMjA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9e307dC5leHBv
cnRzPXJ9LHt9XSwyMTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDE1KSxv
PXIuaXNWYWxpZEVsZW1lbnQsaT1lKDQ3KTt0LmV4cG9ydHM9aShvKX0sezE1OjE1LDQ3OjQ3fV0s
MjI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7dGhpcy5w
cm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz11LHRoaXMudXBkYXRlcj1ufHxzfWZ1bmN0
aW9uIG8oKXt9dmFyIGk9ZSg0NSksYT1lKDExKSxzPWUoMTkpLHU9ZSg0MSk7by5wcm90b3R5cGU9
YS5wcm90b3R5cGUsci5wcm90b3R5cGU9bmV3IG8sci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixp
KHIucHJvdG90eXBlLGEucHJvdG90eXBlKSxyLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVu
dD0hMCx0LmV4cG9ydHM9cn0sezExOjExLDE5OjE5LDQxOjQxLDQ1OjQ1fV0sMjM6W2Z1bmN0aW9u
KGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXt9O3JldHVybiBmdW5j
dGlvbihyKXtuW3RdPXIsZS5zZXRTdGF0ZShuKX19dmFyIG89e2NyZWF0ZVN0YXRlU2V0dGVyOmZ1
bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scixvLGksYSxzKXt2YXIgdT10LmNhbGwoZSxu
LHIsbyxpLGEscyk7dSYmZS5zZXRTdGF0ZSh1KX19LGNyZWF0ZVN0YXRlS2V5U2V0dGVyOmZ1bmN0
aW9uKGUsdCl7dmFyIG49ZS5fX2tleVNldHRlcnN8fChlLl9fa2V5U2V0dGVycz17fSk7cmV0dXJu
IG5bdF18fChuW3RdPXIoZSx0KSl9fTtvLk1peGluPXtjcmVhdGVTdGF0ZVNldHRlcjpmdW5jdGlv
bihlKXtyZXR1cm4gby5jcmVhdGVTdGF0ZVNldHRlcih0aGlzLGUpfSxjcmVhdGVTdGF0ZUtleVNl
dHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gby5jcmVhdGVTdGF0ZUtleVNldHRlcih0aGlzLGUpfX0s
dC5leHBvcnRzPW99LHt9XSwyNDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1l
KDMxKSxvPXtnZXRDaGlsZE1hcHBpbmc6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT9yKGUpOmV9LG1l
cmdlQ2hpbGRNYXBwaW5nczpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4obil7cmV0dXJuIHQuaGFz
T3duUHJvcGVydHkobik/dFtuXTplW25dfWU9ZXx8e30sdD10fHx7fTt2YXIgcj17fSxvPVtdO2Zv
cih2YXIgaSBpbiBlKXQuaGFzT3duUHJvcGVydHkoaSk/by5sZW5ndGgmJihyW2ldPW8sbz1bXSk6
by5wdXNoKGkpO3ZhciBhLHM9e307Zm9yKHZhciB1IGluIHQpe2lmKHIuaGFzT3duUHJvcGVydHko
dSkpZm9yKGE9MDthPHJbdV0ubGVuZ3RoO2ErKyl7dmFyIGM9clt1XVthXTtzW3JbdV1bYV1dPW4o
Yyl9c1t1XT1uKHUpfWZvcihhPTA7YTxvLmxlbmd0aDthKyspc1tvW2FdXT1uKG9bYV0pO3JldHVy
biBzfX07dC5leHBvcnRzPW99LHszMTozMX1dLDI1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJp
Y3QiO2Z1bmN0aW9uIHIoZSx0LG4pe2UuYWRkRXZlbnRMaXN0ZW5lcih0LG4sITEpfWZ1bmN0aW9u
IG8oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4sITEpfXZhciBpPWUoMzkpLGE9ZSgx
KSxzPVtdO2kuY2FuVXNlRE9NJiZmdW5jdGlvbigpe3ZhciBlPWEoImFuaW1hdGlvbmVuZCIpLHQ9
YSgidHJhbnNpdGlvbmVuZCIpO2UmJnMucHVzaChlKSx0JiZzLnB1c2godCl9KCk7dmFyIHU9e2Fk
ZEVuZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oZSx0KXtpZigwPT09cy5sZW5ndGgpcmV0dXJuIHZv
aWQgd2luZG93LnNldFRpbWVvdXQodCwwKTtzLmZvckVhY2goZnVuY3Rpb24obil7cihlLG4sdCl9
KX0scmVtb3ZlRW5kRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihlLHQpezAhPT1zLmxlbmd0aCYmcy5m
b3JFYWNoKGZ1bmN0aW9uKG4pe28oZSxuLHQpfSl9fTt0LmV4cG9ydHM9dX0sezE6MSwzOTozOX1d
LDI2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZighKGUg
aW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFz
IGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBvKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVy
cm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBj
YWxsZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPXR5cGVvZiB0JiYiZnVuY3Rpb24iIT10eXBlb2Yg
dD9lOnR9ZnVuY3Rpb24gaShlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0
aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwg
b3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUo
dCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFi
bGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0
LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9dmFyIGE9ZSg0NSkscz1lKDUpLHU9
ZSgyNCksYz1lKDQ3KSxwPWMocy5pc1ZhbGlkRWxlbWVudCksbD1lKDQwKSxmPWZ1bmN0aW9uKGUp
e2Z1bmN0aW9uIHQoKXt2YXIgbixpLHM7cih0aGlzLHQpO2Zvcih2YXIgYz1hcmd1bWVudHMubGVu
Z3RoLHA9QXJyYXkoYyksbD0wO2w8YztsKyspcFtsXT1hcmd1bWVudHNbbF07cmV0dXJuIG49aT1v
KHRoaXMsZS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChwKSkpLGkuc3RhdGU9e2NoaWxkcmVu
OnUuZ2V0Q2hpbGRNYXBwaW5nKGkucHJvcHMuY2hpbGRyZW4pfSxpLnBlcmZvcm1BcHBlYXI9ZnVu
Y3Rpb24oZSl7aS5jdXJyZW50bHlUcmFuc2l0aW9uaW5nS2V5c1tlXT0hMDt2YXIgdD1pLnJlZnNb
ZV07dC5jb21wb25lbnRXaWxsQXBwZWFyP3QuY29tcG9uZW50V2lsbEFwcGVhcihpLl9oYW5kbGVE
b25lQXBwZWFyaW5nLmJpbmQoaSxlKSk6aS5faGFuZGxlRG9uZUFwcGVhcmluZyhlKX0saS5faGFu
ZGxlRG9uZUFwcGVhcmluZz1mdW5jdGlvbihlKXt2YXIgdD1pLnJlZnNbZV07dC5jb21wb25lbnRE
aWRBcHBlYXImJnQuY29tcG9uZW50RGlkQXBwZWFyKCksZGVsZXRlIGkuY3VycmVudGx5VHJhbnNp
dGlvbmluZ0tleXNbZV07dmFyIG49dS5nZXRDaGlsZE1hcHBpbmcoaS5wcm9wcy5jaGlsZHJlbik7
biYmbi5oYXNPd25Qcm9wZXJ0eShlKXx8aS5wZXJmb3JtTGVhdmUoZSl9LGkucGVyZm9ybUVudGVy
PWZ1bmN0aW9uKGUpe2kuY3VycmVudGx5VHJhbnNpdGlvbmluZ0tleXNbZV09ITA7dmFyIHQ9aS5y
ZWZzW2VdO3QuY29tcG9uZW50V2lsbEVudGVyP3QuY29tcG9uZW50V2lsbEVudGVyKGkuX2hhbmRs
ZURvbmVFbnRlcmluZy5iaW5kKGksZSkpOmkuX2hhbmRsZURvbmVFbnRlcmluZyhlKX0saS5faGFu
ZGxlRG9uZUVudGVyaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PWkucmVmc1tlXTt0LmNvbXBvbmVudERp
ZEVudGVyJiZ0LmNvbXBvbmVudERpZEVudGVyKCksZGVsZXRlIGkuY3VycmVudGx5VHJhbnNpdGlv
bmluZ0tleXNbZV07dmFyIG49dS5nZXRDaGlsZE1hcHBpbmcoaS5wcm9wcy5jaGlsZHJlbik7biYm
bi5oYXNPd25Qcm9wZXJ0eShlKXx8aS5wZXJmb3JtTGVhdmUoZSl9LGkucGVyZm9ybUxlYXZlPWZ1
bmN0aW9uKGUpe2kuY3VycmVudGx5VHJhbnNpdGlvbmluZ0tleXNbZV09ITA7dmFyIHQ9aS5yZWZz
W2VdO3QuY29tcG9uZW50V2lsbExlYXZlP3QuY29tcG9uZW50V2lsbExlYXZlKGkuX2hhbmRsZURv
bmVMZWF2aW5nLmJpbmQoaSxlKSk6aS5faGFuZGxlRG9uZUxlYXZpbmcoZSl9LGkuX2hhbmRsZURv
bmVMZWF2aW5nPWZ1bmN0aW9uKGUpe3ZhciB0PWkucmVmc1tlXTt0LmNvbXBvbmVudERpZExlYXZl
JiZ0LmNvbXBvbmVudERpZExlYXZlKCksZGVsZXRlIGkuY3VycmVudGx5VHJhbnNpdGlvbmluZ0tl
eXNbZV07dmFyIG49dS5nZXRDaGlsZE1hcHBpbmcoaS5wcm9wcy5jaGlsZHJlbik7biYmbi5oYXNP
d25Qcm9wZXJ0eShlKT9pLnBlcmZvcm1FbnRlcihlKTppLnNldFN0YXRlKGZ1bmN0aW9uKHQpe3Zh
ciBuPWEoe30sdC5jaGlsZHJlbik7cmV0dXJuIGRlbGV0ZSBuW2VdLHtjaGlsZHJlbjpufX0pfSxz
PW4sbyhpLHMpfXJldHVybiBpKHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbE1vdW50PWZ1
bmN0aW9uKCl7dGhpcy5jdXJyZW50bHlUcmFuc2l0aW9uaW5nS2V5cz17fSx0aGlzLmtleXNUb0Vu
dGVyPVtdLHRoaXMua2V5c1RvTGVhdmU9W119LHQucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50
PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZS5jaGlsZHJlbjtmb3IodmFyIHQgaW4gZSllW3Rd
JiZ0aGlzLnBlcmZvcm1BcHBlYXIodCl9LHQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZl
UHJvcHM9ZnVuY3Rpb24oZSl7dmFyIHQ9dS5nZXRDaGlsZE1hcHBpbmcoZS5jaGlsZHJlbiksbj10
aGlzLnN0YXRlLmNoaWxkcmVuO3RoaXMuc2V0U3RhdGUoe2NoaWxkcmVuOnUubWVyZ2VDaGlsZE1h
cHBpbmdzKG4sdCl9KTt2YXIgcjtmb3IociBpbiB0KXt2YXIgbz1uJiZuLmhhc093blByb3BlcnR5
KHIpOyF0W3JdfHxvfHx0aGlzLmN1cnJlbnRseVRyYW5zaXRpb25pbmdLZXlzW3JdfHx0aGlzLmtl
eXNUb0VudGVyLnB1c2gocil9Zm9yKHIgaW4gbil7dmFyIGk9dCYmdC5oYXNPd25Qcm9wZXJ0eShy
KTshbltyXXx8aXx8dGhpcy5jdXJyZW50bHlUcmFuc2l0aW9uaW5nS2V5c1tyXXx8dGhpcy5rZXlz
VG9MZWF2ZS5wdXNoKHIpfX0sdC5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPWZ1bmN0aW9u
KCl7dmFyIGU9dGhpcy5rZXlzVG9FbnRlcjt0aGlzLmtleXNUb0VudGVyPVtdLGUuZm9yRWFjaCh0
aGlzLnBlcmZvcm1FbnRlcik7dmFyIHQ9dGhpcy5rZXlzVG9MZWF2ZTt0aGlzLmtleXNUb0xlYXZl
PVtdLHQuZm9yRWFjaCh0aGlzLnBlcmZvcm1MZWF2ZSl9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5j
dGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzLnN0YXRlLmNoaWxkcmVuKXt2YXIgbj10
aGlzLnN0YXRlLmNoaWxkcmVuW3RdO24mJmUucHVzaChzLmNsb25lRWxlbWVudCh0aGlzLnByb3Bz
LmNoaWxkRmFjdG9yeShuKSx7cmVmOnQsa2V5OnR9KSl9dmFyIHI9YSh7fSx0aGlzLnByb3BzKTty
ZXR1cm4gZGVsZXRlIHIudHJhbnNpdGlvbkxlYXZlLGRlbGV0ZSByLnRyYW5zaXRpb25OYW1lLGRl
bGV0ZSByLnRyYW5zaXRpb25BcHBlYXIsZGVsZXRlIHIudHJhbnNpdGlvbkVudGVyLGRlbGV0ZSBy
LmNoaWxkRmFjdG9yeSxkZWxldGUgci50cmFuc2l0aW9uTGVhdmVUaW1lb3V0LGRlbGV0ZSByLnRy
YW5zaXRpb25FbnRlclRpbWVvdXQsZGVsZXRlIHIudHJhbnNpdGlvbkFwcGVhclRpbWVvdXQsZGVs
ZXRlIHIuY29tcG9uZW50LHMuY3JlYXRlRWxlbWVudCh0aGlzLnByb3BzLmNvbXBvbmVudCxyLGUp
fSx0fShzLkNvbXBvbmVudCk7Zi5kaXNwbGF5TmFtZT0iUmVhY3RUcmFuc2l0aW9uR3JvdXAiLGYu
cHJvcFR5cGVzPXtjb21wb25lbnQ6cC5hbnksY2hpbGRGYWN0b3J5OnAuZnVuY30sZi5kZWZhdWx0
UHJvcHM9e2NvbXBvbmVudDoic3BhbiIsY2hpbGRGYWN0b3J5OmwudGhhdFJldHVybnNBcmd1bWVu
dH0sdC5leHBvcnRzPWZ9LHsyNDoyNCw0MDo0MCw0NTo0NSw0Nzo0Nyw1OjV9XSwyNzpbZnVuY3Rp
b24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9IjE1LjUuNCJ9LHt9XSwyODpbZnVuY3Rp
b24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDMpLG89ZSg1KSxpPShlKDYpLGUoMTIpKSxh
PWUoNykscz1lKDE3KSx1PWUoMjYpLGM9ZSgzNSkscD1lKDM3KTtvLmFkZG9ucz17Q1NTVHJhbnNp
dGlvbkdyb3VwOmEsTGlua2VkU3RhdGVNaXhpbjpyLFB1cmVSZW5kZXJNaXhpbjppLFRyYW5zaXRp
b25Hcm91cDp1LGNyZWF0ZUZyYWdtZW50OnMuY3JlYXRlLHNoYWxsb3dDb21wYXJlOmMsdXBkYXRl
OnB9LHQuZXhwb3J0cz1vfSx7MTI6MTIsMTc6MTcsMjY6MjYsMzozLDM1OjM1LDM3OjM3LDU6NSw2
OjYsNzo3fV0sMjk6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSg0NSksbz1l
KDI4KSxpPXIobyx7X19TRUNSRVRfSU5KRUNURURfUkVBQ1RfRE9NX0RPX05PVF9VU0VfT1JfWU9V
X1dJTExfQkVfRklSRUQ6bnVsbCxfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1Vf
V0lMTF9CRV9GSVJFRDp7UmVhY3RDdXJyZW50T3duZXI6ZSgxMyl9fSk7dC5leHBvcnRzPWl9LHsx
MzoxMywyODoyOCw0NTo0NX1dLDMwOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuZXhw
b3J0cz0hMX0se31dLDMxOltmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKG4peyJ1c2Ugc3RyaWN0
IjtmdW5jdGlvbiByKGUsdCxuLHIpe2lmKGUmJiJvYmplY3QiPT10eXBlb2YgZSl7dmFyIG89ZTt2
b2lkIDA9PT1vW25dJiZudWxsIT10JiYob1tuXT10KX19ZnVuY3Rpb24gbyhlLHQpe2lmKG51bGw9
PWUpcmV0dXJuIGU7dmFyIG49e307cmV0dXJuIGkoZSxyLG4pLG59dmFyIGk9KGUoMiksZSgzNikp
O2UoNDQpO3ZvaWQgMCE9PW4mJm4uZW52LHQuZXhwb3J0cz1vfSkuY2FsbCh0aGlzLHZvaWQgMCl9
LHsyOjIsMzY6MzYsNDQ6NDR9XSwzMjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5j
dGlvbiByKGUpe3ZhciB0PWUmJihvJiZlW29dfHxlW2ldKTtpZigiZnVuY3Rpb24iPT10eXBlb2Yg
dClyZXR1cm4gdH12YXIgbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0
b3IsaT0iQEBpdGVyYXRvciI7dC5leHBvcnRzPXJ9LHt9XSwzMzpbZnVuY3Rpb24oZSx0LG4peyJ1
c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBpLmlzVmFsaWRFbGVtZW50KGUpfHxvKCIx
NDMiKSxlfXZhciBvPWUoMzQpLGk9ZSgxNSk7ZSg0Mik7dC5leHBvcnRzPXJ9LHsxNToxNSwzNDoz
NCw0Mjo0Mn1dLDM0OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7
Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgtMSxuPSJNaW5pZmllZCBSZWFjdCBlcnJvciAjIitl
KyI7IHZpc2l0IGh0dHA6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9lcnJvci1kZWNv
ZGVyLmh0bWw/aW52YXJpYW50PSIrZSxyPTA7cjx0O3IrKyluKz0iJmFyZ3NbXT0iK2VuY29kZVVS
SUNvbXBvbmVudChhcmd1bWVudHNbcisxXSk7bis9IiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1
c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBh
ZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIjt2YXIgbz1uZXcgRXJyb3Iobik7dGhyb3cgby5u
YW1lPSJJbnZhcmlhbnQgVmlvbGF0aW9uIixvLmZyYW1lc1RvUG9wPTEsb310LmV4cG9ydHM9cn0s
e31dLDM1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe3Jl
dHVybiFvKGUucHJvcHMsdCl8fCFvKGUuc3RhdGUsbil9dmFyIG89ZSg0Myk7dC5leHBvcnRzPXJ9
LHs0Mzo0M31dLDM2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0
KXtyZXR1cm4gZSYmIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT1lLmtleT9jLmVzY2FwZShlLmtl
eSk6dC50b1N0cmluZygzNil9ZnVuY3Rpb24gbyhlLHQsbixpKXt2YXIgZj10eXBlb2YgZTtpZigi
dW5kZWZpbmVkIiE9PWYmJiJib29sZWFuIiE9PWZ8fChlPW51bGwpLG51bGw9PT1lfHwic3RyaW5n
Ij09PWZ8fCJudW1iZXIiPT09Znx8Im9iamVjdCI9PT1mJiZlLiQkdHlwZW9mPT09cylyZXR1cm4g
bihpLGUsIiI9PT10P3ArcihlLDApOnQpLDE7dmFyIGQsaCx5PTAsdj0iIj09PXQ/cDp0K2w7aWYo
QXJyYXkuaXNBcnJheShlKSlmb3IodmFyIG09MDttPGUubGVuZ3RoO20rKylkPWVbbV0saD12K3Io
ZCxtKSx5Kz1vKGQsaCxuLGkpO2Vsc2V7dmFyIEU9dShlKTtpZihFKXt2YXIgZyxiPUUuY2FsbChl
KTtpZihFIT09ZS5lbnRyaWVzKWZvcih2YXIgXz0wOyEoZz1iLm5leHQoKSkuZG9uZTspZD1nLnZh
bHVlLGg9dityKGQsXysrKSx5Kz1vKGQsaCxuLGkpO2Vsc2UgZm9yKDshKGc9Yi5uZXh0KCkpLmRv
bmU7KXt2YXIgdz1nLnZhbHVlO3cmJihkPXdbMV0saD12K2MuZXNjYXBlKHdbMF0pK2wrcihkLDAp
LHkrPW8oZCxoLG4saSkpfX1lbHNlIGlmKCJvYmplY3QiPT09Zil7dmFyIEE9U3RyaW5nKGUpO2Eo
IjMxIiwiW29iamVjdCBPYmplY3RdIj09PUE/Im9iamVjdCB3aXRoIGtleXMgeyIrT2JqZWN0Lmtl
eXMoZSkuam9pbigiLCAiKSsifSI6QSwiIil9fXJldHVybiB5fWZ1bmN0aW9uIGkoZSx0LG4pe3Jl
dHVybiBudWxsPT1lPzA6byhlLCIiLHQsbil9dmFyIGE9ZSgzNCkscz0oZSgxMyksZSgxNikpLHU9
ZSgzMiksYz0oZSg0MiksZSgyKSkscD0oZSg0NCksIi4iKSxsPSI6Ijt0LmV4cG9ydHM9aX0sezEz
OjEzLDE2OjE2LDI6MiwzMjozMiwzNDozNCw0Mjo0Miw0NDo0NH1dLDM3OltmdW5jdGlvbihlLHQs
bil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5j
b25jYXQoKTplJiYib2JqZWN0Ij09dHlwZW9mIGU/cyhuZXcgZS5jb25zdHJ1Y3RvcixlKTplfWZ1
bmN0aW9uIG8oZSx0LG4pe0FycmF5LmlzQXJyYXkoZSl8fGEoIjEiLG4sZSk7dmFyIHI9dFtuXTtB
cnJheS5pc0FycmF5KHIpfHxhKCIyIixuLHIpfWZ1bmN0aW9uIGkoZSx0KXtpZigib2JqZWN0IiE9
dHlwZW9mIHQmJmEoIjMiLHkuam9pbigiLCAiKSxmKSx1LmNhbGwodCxmKSlyZXR1cm4gMSE9PU9i
amVjdC5rZXlzKHQpLmxlbmd0aCYmYSgiNCIsZiksdFtmXTt2YXIgbj1yKGUpO2lmKHUuY2FsbCh0
LGQpKXt2YXIgbT10W2RdO20mJiJvYmplY3QiPT10eXBlb2YgbXx8YSgiNSIsZCxtKSxuJiYib2Jq
ZWN0Ij09dHlwZW9mIG58fGEoIjYiLGQsbikscyhuLHRbZF0pfXUuY2FsbCh0LGMpJiYobyhlLHQs
YyksdFtjXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe24ucHVzaChlKX0pKSx1LmNhbGwodCxwKSYmKG8o
ZSx0LHApLHRbcF0uZm9yRWFjaChmdW5jdGlvbihlKXtuLnVuc2hpZnQoZSl9KSksdS5jYWxsKHQs
bCkmJihBcnJheS5pc0FycmF5KGUpfHxhKCI3IixsLGUpLEFycmF5LmlzQXJyYXkodFtsXSl8fGEo
IjgiLGwsdFtsXSksdFtsXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe0FycmF5LmlzQXJyYXkoZSl8fGEo
IjgiLGwsdFtsXSksbi5zcGxpY2UuYXBwbHkobixlKX0pKSx1LmNhbGwodCxoKSYmKCJmdW5jdGlv
biIhPXR5cGVvZiB0W2hdJiZhKCI5IixoLHRbaF0pLG49dFtoXShuKSk7Zm9yKHZhciBFIGluIHQp
di5oYXNPd25Qcm9wZXJ0eShFKSYmdltFXXx8KG5bRV09aShlW0VdLHRbRV0pKTtyZXR1cm4gbn12
YXIgYT1lKDM0KSxzPWUoNDUpLHU9KGUoNDIpLHt9Lmhhc093blByb3BlcnR5KSxjPSIkcHVzaCIs
cD0iJHVuc2hpZnQiLGw9IiRzcGxpY2UiLGY9IiRzZXQiLGQ9IiRtZXJnZSIsaD0iJGFwcGx5Iix5
PVtjLHAsbCxmLGQsaF0sdj17fTt5LmZvckVhY2goZnVuY3Rpb24oZSl7dltlXT0hMH0pLHQuZXhw
b3J0cz1pfSx7MzQ6MzQsNDI6NDIsNDU6NDV9XSwzODpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3Ry
aWN0IjtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPWU7bi5wYXJlbnROb2RlOyluPW4ucGFyZW50
Tm9kZTt2YXIgcj1uLnF1ZXJ5U2VsZWN0b3JBbGwodCk7cmV0dXJuLTEhPT1BcnJheS5wcm90b3R5
cGUuaW5kZXhPZi5jYWxsKHIsZSl9dmFyIG89ZSg0MiksaT17YWRkQ2xhc3M6ZnVuY3Rpb24oZSx0
KXtyZXR1cm4vXHMvLnRlc3QodCkmJm8oITEpLHQmJihlLmNsYXNzTGlzdD9lLmNsYXNzTGlzdC5h
ZGQodCk6aS5oYXNDbGFzcyhlLHQpfHwoZS5jbGFzc05hbWU9ZS5jbGFzc05hbWUrIiAiK3QpKSxl
fSxyZW1vdmVDbGFzczpmdW5jdGlvbihlLHQpe3JldHVybi9ccy8udGVzdCh0KSYmbyghMSksdCYm
KGUuY2xhc3NMaXN0P2UuY2xhc3NMaXN0LnJlbW92ZSh0KTppLmhhc0NsYXNzKGUsdCkmJihlLmNs
YXNzTmFtZT1lLmNsYXNzTmFtZS5yZXBsYWNlKG5ldyBSZWdFeHAoIihefFxccykiK3QrIig/Olxc
c3wkKSIsImciKSwiJDEiKS5yZXBsYWNlKC9ccysvZywiICIpLnJlcGxhY2UoL15ccyp8XHMqJC9n
LCIiKSkpLGV9LGNvbmRpdGlvbkNsYXNzOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4obj9pLmFkZENs
YXNzOmkucmVtb3ZlQ2xhc3MpKGUsdCl9LGhhc0NsYXNzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuL1xz
Ly50ZXN0KHQpJiZvKCExKSxlLmNsYXNzTGlzdD8hIXQmJmUuY2xhc3NMaXN0LmNvbnRhaW5zKHQp
OigiICIrZS5jbGFzc05hbWUrIiAiKS5pbmRleE9mKCIgIit0KyIgIik+LTF9LG1hdGNoZXNTZWxl
Y3RvcjpmdW5jdGlvbihlLHQpe3JldHVybihlLm1hdGNoZXN8fGUud2Via2l0TWF0Y2hlc1NlbGVj
dG9yfHxlLm1vek1hdGNoZXNTZWxlY3Rvcnx8ZS5tc01hdGNoZXNTZWxlY3Rvcnx8ZnVuY3Rpb24o
dCl7cmV0dXJuIHIoZSx0KX0pLmNhbGwoZSx0KX19O3QuZXhwb3J0cz1pfSx7NDI6NDJ9XSwzOTpb
ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj0hKCJ1bmRlZmluZWQiPT10eXBlb2Yg
d2luZG93fHwhd2luZG93LmRvY3VtZW50fHwhd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQp
LG89e2NhblVzZURPTTpyLGNhblVzZVdvcmtlcnM6InVuZGVmaW5lZCIhPXR5cGVvZiBXb3JrZXIs
Y2FuVXNlRXZlbnRMaXN0ZW5lcnM6ciYmISghd2luZG93LmFkZEV2ZW50TGlzdGVuZXImJiF3aW5k
b3cuYXR0YWNoRXZlbnQpLGNhblVzZVZpZXdwb3J0OnImJiEhd2luZG93LnNjcmVlbixpc0luV29y
a2VyOiFyfTt0LmV4cG9ydHM9b30se31dLDQwOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3Qi
O2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBvPWZ1bmN0aW9u
KCl7fTtvLnRoYXRSZXR1cm5zPXIsby50aGF0UmV0dXJuc0ZhbHNlPXIoITEpLG8udGhhdFJldHVy
bnNUcnVlPXIoITApLG8udGhhdFJldHVybnNOdWxsPXIobnVsbCksby50aGF0UmV0dXJuc1RoaXM9
ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sby50aGF0UmV0dXJuc0FyZ3VtZW50PWZ1bmN0aW9uKGUp
e3JldHVybiBlfSx0LmV4cG9ydHM9b30se31dLDQxOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJp
Y3QiO3ZhciByPXt9O3QuZXhwb3J0cz1yfSx7fV0sNDI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyLGksYSxzLHUpe2lmKG8odCksIWUpe3ZhciBjO2lmKHZv
aWQgMD09PXQpYz1uZXcgRXJyb3IoIk1pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRo
ZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdl
IGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIik7ZWxzZXt2YXIgcD1bbixyLGksYSxz
LHVdLGw9MDtjPW5ldyBFcnJvcih0LnJlcGxhY2UoLyVzL2csZnVuY3Rpb24oKXtyZXR1cm4gcFts
KytdfSkpLGMubmFtZT0iSW52YXJpYW50IFZpb2xhdGlvbiJ9dGhyb3cgYy5mcmFtZXNUb1BvcD0x
LGN9fXZhciBvPWZ1bmN0aW9uKGUpe307dC5leHBvcnRzPXJ9LHt9XSw0MzpbZnVuY3Rpb24oZSx0
LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGU9PT10PzAhPT1lfHwwIT09
dHx8MS9lPT0xL3Q6ZSE9PWUmJnQhPT10fWZ1bmN0aW9uIG8oZSx0KXtpZihyKGUsdCkpcmV0dXJu
ITA7aWYoIm9iamVjdCIhPXR5cGVvZiBlfHxudWxsPT09ZXx8Im9iamVjdCIhPXR5cGVvZiB0fHxu
dWxsPT09dClyZXR1cm4hMTt2YXIgbj1PYmplY3Qua2V5cyhlKSxvPU9iamVjdC5rZXlzKHQpO2lm
KG4ubGVuZ3RoIT09by5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBhPTA7YTxuLmxlbmd0aDthKysp
aWYoIWkuY2FsbCh0LG5bYV0pfHwhcihlW25bYV1dLHRbblthXV0pKXJldHVybiExO3JldHVybiEw
fXZhciBpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPW99LHt9XSw0
NDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDQwKSxvPXI7dC5leHBvcnRz
PW99LHs0MDo0MH1dLDQ1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIo
ZSl7aWYobnVsbD09PWV8fHZvaWQgMD09PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0LmFz
c2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQiKTtyZXR1cm4gT2Jq
ZWN0KGUpfXZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsaT1PYmplY3QucHJvdG90
eXBlLmhhc093blByb3BlcnR5LGE9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJs
ZTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt0cnl7aWYoIU9iamVjdC5hc3NpZ24pcmV0dXJuITE7dmFy
IGU9bmV3IFN0cmluZygiYWJjIik7aWYoZVs1XT0iZGUiLCI1Ij09PU9iamVjdC5nZXRPd25Qcm9w
ZXJ0eU5hbWVzKGUpWzBdKXJldHVybiExO2Zvcih2YXIgdD17fSxuPTA7bjwxMDtuKyspdFsiXyIr
U3RyaW5nLmZyb21DaGFyQ29kZShuKV09bjtpZigiMDEyMzQ1Njc4OSIhPT1PYmplY3QuZ2V0T3du
UHJvcGVydHlOYW1lcyh0KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KS5qb2luKCIiKSly
ZXR1cm4hMTt2YXIgcj17fTtyZXR1cm4iYWJjZGVmZ2hpamtsbW5vcHFyc3QiLnNwbGl0KCIiKS5m
b3JFYWNoKGZ1bmN0aW9uKGUpe3JbZV09ZX0pLCJhYmNkZWZnaGlqa2xtbm9wcXJzdCI9PT1PYmpl
Y3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LHIpKS5qb2luKCIiKX1jYXRjaChlKXtyZXR1cm4hMX19
KCk/T2JqZWN0LmFzc2lnbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbixzLHU9cihlKSxjPTE7Yzxh
cmd1bWVudHMubGVuZ3RoO2MrKyl7bj1PYmplY3QoYXJndW1lbnRzW2NdKTtmb3IodmFyIHAgaW4g
bilpLmNhbGwobixwKSYmKHVbcF09bltwXSk7aWYobyl7cz1vKG4pO2Zvcih2YXIgbD0wO2w8cy5s
ZW5ndGg7bCsrKWEuY2FsbChuLHNbbF0pJiYodVtzW2xdXT1uW3NbbF1dKX19cmV0dXJuIHV9fSx7
fV0sNDY6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyLG8p
e310LmV4cG9ydHM9cn0sezQyOjQyLDQ0OjQ0LDQ5OjQ5fV0sNDc6W2Z1bmN0aW9uKGUsdCxuKXsi
dXNlIHN0cmljdCI7dmFyIHI9ZSg0OCkKKzt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIo
ZSwhMSl9fSx7NDg6NDh9XSw0ODpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1l
KDQwKSxvPWUoNDIpLGk9KGUoNDQpLGUoNDkpKSxhPWUoNDYpO3QuZXhwb3J0cz1mdW5jdGlvbihl
LHQpe2Z1bmN0aW9uIG4oZSl7dmFyIHQ9ZSYmKHcmJmVbd118fGVbQV0pO2lmKCJmdW5jdGlvbiI9
PXR5cGVvZiB0KXJldHVybiB0fWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4gZT09PXQ/MCE9PWV8fDEv
ZT09MS90OmUhPT1lJiZ0IT09dH1mdW5jdGlvbiB1KGUpe3RoaXMubWVzc2FnZT1lLHRoaXMuc3Rh
Y2s9IiJ9ZnVuY3Rpb24gYyhlKXtmdW5jdGlvbiBuKG4scixhLHMsYyxwLGwpe2lmKHM9c3x8VCxw
PXB8fGEsbCE9PWkpaWYodClvKCExLCJDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVj
dGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiBVc2UgYFBy
b3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0byBjYWxsIHRoZW0uIFJlYWQgbW9yZSBhdCBodHRw
Oi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMiKTtlbHNlO3JldHVybiBudWxsPT1yW2FdP24/
bmV3IHUobnVsbD09PXJbYV0/IlRoZSAiK2MrIiBgIitwKyJgIGlzIG1hcmtlZCBhcyByZXF1aXJl
ZCBpbiBgIitzKyJgLCBidXQgaXRzIHZhbHVlIGlzIGBudWxsYC4iOiJUaGUgIitjKyIgYCIrcCsi
YCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gYCIrcysiYCwgYnV0IGl0cyB2YWx1ZSBpcyBgdW5k
ZWZpbmVkYC4iKTpudWxsOmUocixhLHMsYyxwKX12YXIgcj1uLmJpbmQobnVsbCwhMSk7cmV0dXJu
IHIuaXNSZXF1aXJlZD1uLmJpbmQobnVsbCwhMCkscn1mdW5jdGlvbiBwKGUpe2Z1bmN0aW9uIHQo
dCxuLHIsbyxpLGEpe3ZhciBzPXRbbl07aWYoZyhzKSE9PWUpcmV0dXJuIG5ldyB1KCJJbnZhbGlk
ICIrbysiIGAiK2krImAgb2YgdHlwZSBgIitiKHMpKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4
cGVjdGVkIGAiK2UrImAuIik7cmV0dXJuIG51bGx9cmV0dXJuIGModCl9ZnVuY3Rpb24gbChlKXtm
dW5jdGlvbiB0KHQsbixyLG8sYSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpcmV0dXJuIG5ldyB1
KCJQcm9wZXJ0eSBgIithKyJgIG9mIGNvbXBvbmVudCBgIityKyJgIGhhcyBpbnZhbGlkIFByb3BU
eXBlIG5vdGF0aW9uIGluc2lkZSBhcnJheU9mLiIpO3ZhciBzPXRbbl07aWYoIUFycmF5LmlzQXJy
YXkocykpe3JldHVybiBuZXcgdSgiSW52YWxpZCAiK28rIiBgIithKyJgIG9mIHR5cGUgYCIrZyhz
KSsiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBhbiBhcnJheS4iKX1mb3IodmFyIGM9
MDtjPHMubGVuZ3RoO2MrKyl7dmFyIHA9ZShzLGMscixvLGErIlsiK2MrIl0iLGkpO2lmKHAgaW5z
dGFuY2VvZiBFcnJvcilyZXR1cm4gcH1yZXR1cm4gbnVsbH1yZXR1cm4gYyh0KX1mdW5jdGlvbiBm
KGUpe2Z1bmN0aW9uIHQodCxuLHIsbyxpKXtpZighKHRbbl1pbnN0YW5jZW9mIGUpKXt2YXIgYT1l
Lm5hbWV8fFQ7cmV0dXJuIG5ldyB1KCJJbnZhbGlkICIrbysiIGAiK2krImAgb2YgdHlwZSBgIitf
KHRbbl0pKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVjdGVkIGluc3RhbmNlIG9mIGAiK2Er
ImAuIil9cmV0dXJuIG51bGx9cmV0dXJuIGModCl9ZnVuY3Rpb24gZChlKXtmdW5jdGlvbiB0KHQs
bixyLG8saSl7Zm9yKHZhciBhPXRbbl0sYz0wO2M8ZS5sZW5ndGg7YysrKWlmKHMoYSxlW2NdKSly
ZXR1cm4gbnVsbDtyZXR1cm4gbmV3IHUoIkludmFsaWQgIitvKyIgYCIraSsiYCBvZiB2YWx1ZSBg
IithKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVjdGVkIG9uZSBvZiAiK0pTT04uc3RyaW5n
aWZ5KGUpKyIuIil9cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/Yyh0KTpyLnRoYXRSZXR1cm5zTnVs
bH1mdW5jdGlvbiBoKGUpe2Z1bmN0aW9uIHQodCxuLHIsbyxhKXtpZigiZnVuY3Rpb24iIT10eXBl
b2YgZSlyZXR1cm4gbmV3IHUoIlByb3BlcnR5IGAiK2ErImAgb2YgY29tcG9uZW50IGAiK3IrImAg
aGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIG9iamVjdE9mLiIpO3ZhciBzPXRb
bl0sYz1nKHMpO2lmKCJvYmplY3QiIT09YylyZXR1cm4gbmV3IHUoIkludmFsaWQgIitvKyIgYCIr
YSsiYCBvZiB0eXBlIGAiK2MrImAgc3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQgYW4gb2Jq
ZWN0LiIpO2Zvcih2YXIgcCBpbiBzKWlmKHMuaGFzT3duUHJvcGVydHkocCkpe3ZhciBsPWUocyxw
LHIsbyxhKyIuIitwLGkpO2lmKGwgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gbH1yZXR1cm4gbnVs
bH1yZXR1cm4gYyh0KX1mdW5jdGlvbiB5KGUpe2Z1bmN0aW9uIHQodCxuLHIsbyxhKXtmb3IodmFy
IHM9MDtzPGUubGVuZ3RoO3MrKyl7aWYobnVsbD09KDAsZVtzXSkodCxuLHIsbyxhLGkpKXJldHVy
biBudWxsfXJldHVybiBuZXcgdSgiSW52YWxpZCAiK28rIiBgIithKyJgIHN1cHBsaWVkIHRvIGAi
K3IrImAuIil9cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/Yyh0KTpyLnRoYXRSZXR1cm5zTnVsbH1m
dW5jdGlvbiB2KGUpe2Z1bmN0aW9uIHQodCxuLHIsbyxhKXt2YXIgcz10W25dLGM9ZyhzKTtpZigi
b2JqZWN0IiE9PWMpcmV0dXJuIG5ldyB1KCJJbnZhbGlkICIrbysiIGAiK2ErImAgb2YgdHlwZSBg
IitjKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVjdGVkIGBvYmplY3RgLiIpO2Zvcih2YXIg
cCBpbiBlKXt2YXIgbD1lW3BdO2lmKGwpe3ZhciBmPWwocyxwLHIsbyxhKyIuIitwLGkpO2lmKGYp
cmV0dXJuIGZ9fXJldHVybiBudWxsfXJldHVybiBjKHQpfWZ1bmN0aW9uIG0odCl7c3dpdGNoKHR5
cGVvZiB0KXtjYXNlIm51bWJlciI6Y2FzZSJzdHJpbmciOmNhc2UidW5kZWZpbmVkIjpyZXR1cm4h
MDtjYXNlImJvb2xlYW4iOnJldHVybiF0O2Nhc2Uib2JqZWN0IjppZihBcnJheS5pc0FycmF5KHQp
KXJldHVybiB0LmV2ZXJ5KG0pO2lmKG51bGw9PT10fHxlKHQpKXJldHVybiEwO3ZhciByPW4odCk7
aWYoIXIpcmV0dXJuITE7dmFyIG8saT1yLmNhbGwodCk7aWYociE9PXQuZW50cmllcyl7Zm9yKDsh
KG89aS5uZXh0KCkpLmRvbmU7KWlmKCFtKG8udmFsdWUpKXJldHVybiExfWVsc2UgZm9yKDshKG89
aS5uZXh0KCkpLmRvbmU7KXt2YXIgYT1vLnZhbHVlO2lmKGEmJiFtKGFbMV0pKXJldHVybiExfXJl
dHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIEUoZSx0KXtyZXR1cm4ic3ltYm9sIj09
PWV8fCgiU3ltYm9sIj09PXRbIkBAdG9TdHJpbmdUYWciXXx8ImZ1bmN0aW9uIj09dHlwZW9mIFN5
bWJvbCYmdCBpbnN0YW5jZW9mIFN5bWJvbCl9ZnVuY3Rpb24gZyhlKXt2YXIgdD10eXBlb2YgZTty
ZXR1cm4gQXJyYXkuaXNBcnJheShlKT8iYXJyYXkiOmUgaW5zdGFuY2VvZiBSZWdFeHA/Im9iamVj
dCI6RSh0LGUpPyJzeW1ib2wiOnR9ZnVuY3Rpb24gYihlKXt2YXIgdD1nKGUpO2lmKCJvYmplY3Qi
PT09dCl7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuImRhdGUiO2lmKGUgaW5zdGFuY2VvZiBS
ZWdFeHApcmV0dXJuInJlZ2V4cCJ9cmV0dXJuIHR9ZnVuY3Rpb24gXyhlKXtyZXR1cm4gZS5jb25z
dHJ1Y3RvciYmZS5jb25zdHJ1Y3Rvci5uYW1lP2UuY29uc3RydWN0b3IubmFtZTpUfXZhciB3PSJm
dW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixBPSJAQGl0ZXJhdG9yIixU
PSI8PGFub255bW91cz4+Iix4PXthcnJheTpwKCJhcnJheSIpLGJvb2w6cCgiYm9vbGVhbiIpLGZ1
bmM6cCgiZnVuY3Rpb24iKSxudW1iZXI6cCgibnVtYmVyIiksb2JqZWN0OnAoIm9iamVjdCIpLHN0
cmluZzpwKCJzdHJpbmciKSxzeW1ib2w6cCgic3ltYm9sIiksYW55OmZ1bmN0aW9uKCl7cmV0dXJu
IGMoci50aGF0UmV0dXJuc051bGwpfSgpLGFycmF5T2Y6bCxlbGVtZW50OmZ1bmN0aW9uKCl7ZnVu
Y3Rpb24gdCh0LG4scixvLGkpe3ZhciBhPXRbbl07aWYoIWUoYSkpe3JldHVybiBuZXcgdSgiSW52
YWxpZCAiK28rIiBgIitpKyJgIG9mIHR5cGUgYCIrZyhhKSsiYCBzdXBwbGllZCB0byBgIityKyJg
LCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuIil9cmV0dXJuIG51bGx9cmV0dXJuIGMo
dCl9KCksaW5zdGFuY2VPZjpmLG5vZGU6ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIsbyl7
cmV0dXJuIG0oZVt0XSk/bnVsbDpuZXcgdSgiSW52YWxpZCAiK3IrIiBgIitvKyJgIHN1cHBsaWVk
IHRvIGAiK24rImAsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLiIpfXJldHVybiBjKGUpfSgpLG9iamVj
dE9mOmgsb25lT2Y6ZCxvbmVPZlR5cGU6eSxzaGFwZTp2fTtyZXR1cm4gdS5wcm90b3R5cGU9RXJy
b3IucHJvdG90eXBlLHguY2hlY2tQcm9wVHlwZXM9YSx4LlByb3BUeXBlcz14LHh9fSx7NDA6NDAs
NDI6NDIsNDQ6NDQsNDY6NDYsNDk6NDl9XSw0OTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0
Ijt0LmV4cG9ydHM9IlNFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVE
In0se31dfSx7fSxbMjldKSgyOSl9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3QvZGlzdC9yZWFjdC5t
aW4uanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3QvZGlzdC9yZWFjdC5t
aW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZDZhODQ0YjBjYTc4ZDBjNTBiYTM1YjU4ZjdjNjUxZDE1MTE4NzZk
NgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9yZWFj
dC9kaXN0L3JlYWN0Lm1pbi5qcwpAQCAtMCwwICsxLDEyIEBACisvKioKKyAqIFJlYWN0IHYxNS41
LjQKKyAqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVu
ZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBp
biB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBn
cmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmls
ZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCishZnVuY3Rpb24odCl7aWYoIm9iamVj
dCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhw
b3J0cz10KCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRl
ZmluZShbXSx0KTtlbHNle3ZhciBlO2U9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93
OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNl
bGY/c2VsZjp0aGlzLGUuUmVhY3Q9dCgpfX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChl
LG4scil7ZnVuY3Rpb24gbyh1LGEpe2lmKCFuW3VdKXtpZighZVt1XSl7dmFyIHM9ImZ1bmN0aW9u
Ij09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWEmJnMpcmV0dXJuIHModSwhMCk7aWYoaSly
ZXR1cm4gaSh1LCEwKTt2YXIgYz1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIit1KyIn
Iik7dGhyb3cgYy5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixjfXZhciBsPW5bdV09e2V4cG9ydHM6
e319O2VbdV1bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24odCl7dmFyIG49ZVt1XVsxXVt0XTty
ZXR1cm4gbyhufHx0KX0sbCxsLmV4cG9ydHMsdCxlLG4scil9cmV0dXJuIG5bdV0uZXhwb3J0c31m
b3IodmFyIGk9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsdT0wO3U8ci5sZW5n
dGg7dSsrKW8oclt1XSk7cmV0dXJuIG99KHsxOltmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3Qi
O2Z1bmN0aW9uIHIodCl7dmFyIGU9eyI9IjoiPTAiLCI6IjoiPTIifTtyZXR1cm4iJCIrKCIiK3Qp
LnJlcGxhY2UoL1s9Ol0vZyxmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pfWZ1bmN0aW9uIG8odCl7
dmFyIGU9eyI9MCI6Ij0iLCI9MiI6IjoifTtyZXR1cm4oIiIrKCIuIj09PXRbMF0mJiIkIj09PXRb
MV0/dC5zdWJzdHJpbmcoMik6dC5zdWJzdHJpbmcoMSkpKS5yZXBsYWNlKC8oPTB8PTIpL2csZnVu
Y3Rpb24odCl7cmV0dXJuIGVbdF19KX12YXIgaT17ZXNjYXBlOnIsdW5lc2NhcGU6b307ZS5leHBv
cnRzPWl9LHt9XSwyOltmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPXQoMjApLG89
KHQoMjQpLGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoZS5pbnN0YW5jZVBvb2wubGVuZ3RoKXt2
YXIgbj1lLmluc3RhbmNlUG9vbC5wb3AoKTtyZXR1cm4gZS5jYWxsKG4sdCksbn1yZXR1cm4gbmV3
IGUodCl9KSxpPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztpZihuLmluc3RhbmNlUG9vbC5sZW5n
dGgpe3ZhciByPW4uaW5zdGFuY2VQb29sLnBvcCgpO3JldHVybiBuLmNhbGwocix0LGUpLHJ9cmV0
dXJuIG5ldyBuKHQsZSl9LHU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXM7aWYoci5pbnN0YW5j
ZVBvb2wubGVuZ3RoKXt2YXIgbz1yLmluc3RhbmNlUG9vbC5wb3AoKTtyZXR1cm4gci5jYWxsKG8s
dCxlLG4pLG99cmV0dXJuIG5ldyByKHQsZSxuKX0sYT1mdW5jdGlvbih0LGUsbixyKXt2YXIgbz10
aGlzO2lmKG8uaW5zdGFuY2VQb29sLmxlbmd0aCl7dmFyIGk9by5pbnN0YW5jZVBvb2wucG9wKCk7
cmV0dXJuIG8uY2FsbChpLHQsZSxuLHIpLGl9cmV0dXJuIG5ldyBvKHQsZSxuLHIpfSxzPWZ1bmN0
aW9uKHQpe3ZhciBlPXRoaXM7dCBpbnN0YW5jZW9mIGV8fHIoIjI1IiksdC5kZXN0cnVjdG9yKCks
ZS5pbnN0YW5jZVBvb2wubGVuZ3RoPGUucG9vbFNpemUmJmUuaW5zdGFuY2VQb29sLnB1c2godCl9
LGM9byxsPWZ1bmN0aW9uKHQsZSl7dmFyIG49dDtyZXR1cm4gbi5pbnN0YW5jZVBvb2w9W10sbi5n
ZXRQb29sZWQ9ZXx8YyxuLnBvb2xTaXplfHwobi5wb29sU2l6ZT0xMCksbi5yZWxlYXNlPXMsbn0s
Zj17YWRkUG9vbGluZ1RvOmwsb25lQXJndW1lbnRQb29sZXI6byx0d29Bcmd1bWVudFBvb2xlcjpp
LHRocmVlQXJndW1lbnRQb29sZXI6dSxmb3VyQXJndW1lbnRQb29sZXI6YX07ZS5leHBvcnRzPWZ9
LHsyMDoyMCwyNDoyNH1dLDM6W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9dCgy
Niksbz10KDQpLGk9dCg2KSx1PXQoMTQpLGE9dCg1KSxzPXQoOCksYz10KDkpLGw9dCgxMyksZj10
KDE2KSxwPXQoMTkpLGQ9KHQoMjUpLGMuY3JlYXRlRWxlbWVudCkseT1jLmNyZWF0ZUZhY3Rvcnks
aD1jLmNsb25lRWxlbWVudCx2PXIsbT17Q2hpbGRyZW46e21hcDpvLm1hcCxmb3JFYWNoOm8uZm9y
RWFjaCxjb3VudDpvLmNvdW50LHRvQXJyYXk6by50b0FycmF5LG9ubHk6cH0sQ29tcG9uZW50Omks
UHVyZUNvbXBvbmVudDp1LGNyZWF0ZUVsZW1lbnQ6ZCxjbG9uZUVsZW1lbnQ6aCxpc1ZhbGlkRWxl
bWVudDpjLmlzVmFsaWRFbGVtZW50LFByb3BUeXBlczpsLGNyZWF0ZUNsYXNzOmEuY3JlYXRlQ2xh
c3MsY3JlYXRlRmFjdG9yeTp5LGNyZWF0ZU1peGluOmZ1bmN0aW9uKHQpe3JldHVybiB0fSxET006
cyx2ZXJzaW9uOmYsX19zcHJlYWQ6dn07ZS5leHBvcnRzPW19LHsxMzoxMywxNDoxNCwxNjoxNiwx
OToxOSwyNToyNSwyNjoyNiw0OjQsNTo1LDY6Niw4OjgsOTo5fV0sNDpbZnVuY3Rpb24odCxlLG4p
eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3JldHVybigiIit0KS5yZXBsYWNlKEUsIiQmLyIp
fWZ1bmN0aW9uIG8odCxlKXt0aGlzLmZ1bmM9dCx0aGlzLmNvbnRleHQ9ZSx0aGlzLmNvdW50PTB9
ZnVuY3Rpb24gaSh0LGUsbil7dmFyIHI9dC5mdW5jLG89dC5jb250ZXh0O3IuY2FsbChvLGUsdC5j
b3VudCsrKX1mdW5jdGlvbiB1KHQsZSxuKXtpZihudWxsPT10KXJldHVybiB0O3ZhciByPW8uZ2V0
UG9vbGVkKGUsbik7bSh0LGksciksby5yZWxlYXNlKHIpfWZ1bmN0aW9uIGEodCxlLG4scil7dGhp
cy5yZXN1bHQ9dCx0aGlzLmtleVByZWZpeD1lLHRoaXMuZnVuYz1uLHRoaXMuY29udGV4dD1yLHRo
aXMuY291bnQ9MH1mdW5jdGlvbiBzKHQsZSxuKXt2YXIgbz10LnJlc3VsdCxpPXQua2V5UHJlZml4
LHU9dC5mdW5jLGE9dC5jb250ZXh0LHM9dS5jYWxsKGEsZSx0LmNvdW50KyspO0FycmF5LmlzQXJy
YXkocyk/YyhzLG8sbix2LnRoYXRSZXR1cm5zQXJndW1lbnQpOm51bGwhPXMmJihoLmlzVmFsaWRF
bGVtZW50KHMpJiYocz1oLmNsb25lQW5kUmVwbGFjZUtleShzLGkrKCFzLmtleXx8ZSYmZS5rZXk9
PT1zLmtleT8iIjpyKHMua2V5KSsiLyIpK24pKSxvLnB1c2gocykpfWZ1bmN0aW9uIGModCxlLG4s
byxpKXt2YXIgdT0iIjtudWxsIT1uJiYodT1yKG4pKyIvIik7dmFyIGM9YS5nZXRQb29sZWQoZSx1
LG8saSk7bSh0LHMsYyksYS5yZWxlYXNlKGMpfWZ1bmN0aW9uIGwodCxlLG4pe2lmKG51bGw9PXQp
cmV0dXJuIHQ7dmFyIHI9W107cmV0dXJuIGModCxyLG51bGwsZSxuKSxyfWZ1bmN0aW9uIGYodCxl
LG4pe3JldHVybiBudWxsfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gbSh0LGYsbnVsbCl9ZnVuY3Rp
b24gZCh0KXt2YXIgZT1bXTtyZXR1cm4gYyh0LGUsbnVsbCx2LnRoYXRSZXR1cm5zQXJndW1lbnQp
LGV9dmFyIHk9dCgyKSxoPXQoOSksdj10KDIyKSxtPXQoMjEpLGI9eS50d29Bcmd1bWVudFBvb2xl
cixnPXkuZm91ckFyZ3VtZW50UG9vbGVyLEU9L1wvKy9nO28ucHJvdG90eXBlLmRlc3RydWN0b3I9
ZnVuY3Rpb24oKXt0aGlzLmZ1bmM9bnVsbCx0aGlzLmNvbnRleHQ9bnVsbCx0aGlzLmNvdW50PTB9
LHkuYWRkUG9vbGluZ1RvKG8sYiksYS5wcm90b3R5cGUuZGVzdHJ1Y3Rvcj1mdW5jdGlvbigpe3Ro
aXMucmVzdWx0PW51bGwsdGhpcy5rZXlQcmVmaXg9bnVsbCx0aGlzLmZ1bmM9bnVsbCx0aGlzLmNv
bnRleHQ9bnVsbCx0aGlzLmNvdW50PTB9LHkuYWRkUG9vbGluZ1RvKGEsZyk7dmFyIHg9e2ZvckVh
Y2g6dSxtYXA6bCxtYXBJbnRvV2l0aEtleVByZWZpeEludGVybmFsOmMsY291bnQ6cCx0b0FycmF5
OmR9O2UuZXhwb3J0cz14fSx7MjoyLDIxOjIxLDIyOjIyLDk6OX1dLDU6W2Z1bmN0aW9uKHQsZSxu
KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdH1mdW5jdGlvbiBvKHQsZSl7dmFy
IG49RS5oYXNPd25Qcm9wZXJ0eShlKT9FW2VdOm51bGw7Xy5oYXNPd25Qcm9wZXJ0eShlKSYmIk9W
RVJSSURFX0JBU0UiIT09biYmcCgiNzMiLGUpLHQmJiJERUZJTkVfTUFOWSIhPT1uJiYiREVGSU5F
X01BTllfTUVSR0VEIiE9PW4mJnAoIjc0IixlKX1mdW5jdGlvbiBpKHQsZSl7aWYoZSl7ImZ1bmN0
aW9uIj09dHlwZW9mIGUmJnAoIjc1IiksaC5pc1ZhbGlkRWxlbWVudChlKSYmcCgiNzYiKTt2YXIg
bj10LnByb3RvdHlwZSxyPW4uX19yZWFjdEF1dG9CaW5kUGFpcnM7ZS5oYXNPd25Qcm9wZXJ0eShi
KSYmeC5taXhpbnModCxlLm1peGlucyk7Zm9yKHZhciBpIGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0
eShpKSYmaSE9PWIpe3ZhciB1PWVbaV0sYT1uLmhhc093blByb3BlcnR5KGkpO2lmKG8oYSxpKSx4
Lmhhc093blByb3BlcnR5KGkpKXhbaV0odCx1KTtlbHNle3ZhciBsPUUuaGFzT3duUHJvcGVydHko
aSksZj0iZnVuY3Rpb24iPT10eXBlb2YgdSxkPWYmJiFsJiYhYSYmITEhPT1lLmF1dG9iaW5kO2lm
KGQpci5wdXNoKGksdSksbltpXT11O2Vsc2UgaWYoYSl7dmFyIHk9RVtpXTsoIWx8fCJERUZJTkVf
TUFOWV9NRVJHRUQiIT09eSYmIkRFRklORV9NQU5ZIiE9PXkpJiZwKCI3NyIseSxpKSwiREVGSU5F
X01BTllfTUVSR0VEIj09PXk/bltpXT1zKG5baV0sdSk6IkRFRklORV9NQU5ZIj09PXkmJihuW2ld
PWMobltpXSx1KSl9ZWxzZSBuW2ldPXV9fX19ZnVuY3Rpb24gdSh0LGUpe2lmKGUpZm9yKHZhciBu
IGluIGUpe3ZhciByPWVbbl07aWYoZS5oYXNPd25Qcm9wZXJ0eShuKSl7dmFyIG89biBpbiB4O28m
JnAoIjc4IixuKTt2YXIgaT1uIGluIHQ7aSYmcCgiNzkiLG4pLHRbbl09cn19fWZ1bmN0aW9uIGEo
dCxlKXt0JiZlJiYib2JqZWN0Ij09dHlwZW9mIHQmJiJvYmplY3QiPT10eXBlb2YgZXx8cCgiODAi
KTtmb3IodmFyIG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiYodm9pZCAwIT09dFtuXSYmcCgi
ODEiLG4pLHRbbl09ZVtuXSk7cmV0dXJuIHR9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBmdW5jdGlv
bigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50
cyk7aWYobnVsbD09bilyZXR1cm4gcjtpZihudWxsPT1yKXJldHVybiBuO3ZhciBvPXt9O3JldHVy
biBhKG8sbiksYShvLHIpLG99fWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0LmFw
cGx5KHRoaXMsYXJndW1lbnRzKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gbCh0
LGUpe3JldHVybiBlLmJpbmQodCl9ZnVuY3Rpb24gZih0KXtmb3IodmFyIGU9dC5fX3JlYWN0QXV0
b0JpbmRQYWlycyxuPTA7bjxlLmxlbmd0aDtuKz0yKXt2YXIgcj1lW25dLG89ZVtuKzFdO3Rbcl09
bCh0LG8pfX12YXIgcD10KDIwKSxkPXQoMjYpLHk9dCg2KSxoPXQoOSksdj0odCgxMiksdCgxMSkp
LG09dCgyMyksYj0odCgyNCksdCgyNSksIm1peGlucyIpLGc9W10sRT17bWl4aW5zOiJERUZJTkVf
TUFOWSIsc3RhdGljczoiREVGSU5FX01BTlkiLHByb3BUeXBlczoiREVGSU5FX01BTlkiLGNvbnRl
eHRUeXBlczoiREVGSU5FX01BTlkiLGNoaWxkQ29udGV4dFR5cGVzOiJERUZJTkVfTUFOWSIsZ2V0
RGVmYXVsdFByb3BzOiJERUZJTkVfTUFOWV9NRVJHRUQiLGdldEluaXRpYWxTdGF0ZToiREVGSU5F
X01BTllfTUVSR0VEIixnZXRDaGlsZENvbnRleHQ6IkRFRklORV9NQU5ZX01FUkdFRCIscmVuZGVy
OiJERUZJTkVfT05DRSIsY29tcG9uZW50V2lsbE1vdW50OiJERUZJTkVfTUFOWSIsY29tcG9uZW50
RGlkTW91bnQ6IkRFRklORV9NQU5ZIixjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzOiJERUZJTkVf
TUFOWSIsc2hvdWxkQ29tcG9uZW50VXBkYXRlOiJERUZJTkVfT05DRSIsY29tcG9uZW50V2lsbFVw
ZGF0ZToiREVGSU5FX01BTlkiLGNvbXBvbmVudERpZFVwZGF0ZToiREVGSU5FX01BTlkiLGNvbXBv
bmVudFdpbGxVbm1vdW50OiJERUZJTkVfTUFOWSIsdXBkYXRlQ29tcG9uZW50OiJPVkVSUklERV9C
QVNFIn0seD17ZGlzcGxheU5hbWU6ZnVuY3Rpb24odCxlKXt0LmRpc3BsYXlOYW1lPWV9LG1peGlu
czpmdW5jdGlvbih0LGUpe2lmKGUpZm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaSh0LGVbbl0p
fSxjaGlsZENvbnRleHRUeXBlczpmdW5jdGlvbih0LGUpe3QuY2hpbGRDb250ZXh0VHlwZXM9ZCh7
fSx0LmNoaWxkQ29udGV4dFR5cGVzLGUpfSxjb250ZXh0VHlwZXM6ZnVuY3Rpb24odCxlKXt0LmNv
bnRleHRUeXBlcz1kKHt9LHQuY29udGV4dFR5cGVzLGUpfSxnZXREZWZhdWx0UHJvcHM6ZnVuY3Rp
b24odCxlKXt0LmdldERlZmF1bHRQcm9wcz90LmdldERlZmF1bHRQcm9wcz1zKHQuZ2V0RGVmYXVs
dFByb3BzLGUpOnQuZ2V0RGVmYXVsdFByb3BzPWV9LHByb3BUeXBlczpmdW5jdGlvbih0LGUpe3Qu
cHJvcFR5cGVzPWQoe30sdC5wcm9wVHlwZXMsZSl9LHN0YXRpY3M6ZnVuY3Rpb24odCxlKXt1KHQs
ZSl9LGF1dG9iaW5kOmZ1bmN0aW9uKCl7fX0sXz17cmVwbGFjZVN0YXRlOmZ1bmN0aW9uKHQsZSl7
dGhpcy51cGRhdGVyLmVucXVldWVSZXBsYWNlU3RhdGUodGhpcyx0KSxlJiZ0aGlzLnVwZGF0ZXIu
ZW5xdWV1ZUNhbGxiYWNrKHRoaXMsZSwicmVwbGFjZVN0YXRlIil9LGlzTW91bnRlZDpmdW5jdGlv
bigpe3JldHVybiB0aGlzLnVwZGF0ZXIuaXNNb3VudGVkKHRoaXMpfX0sUD1mdW5jdGlvbigpe307
ZChQLnByb3RvdHlwZSx5LnByb3RvdHlwZSxfKTt2YXIgdz17Y3JlYXRlQ2xhc3M6ZnVuY3Rpb24o
dCl7dmFyIGU9cihmdW5jdGlvbih0LG4scil7dGhpcy5fX3JlYWN0QXV0b0JpbmRQYWlycy5sZW5n
dGgmJmYodGhpcyksdGhpcy5wcm9wcz10LHRoaXMuY29udGV4dD1uLHRoaXMucmVmcz1tLHRoaXMu
dXBkYXRlcj1yfHx2LHRoaXMuc3RhdGU9bnVsbDt2YXIgbz10aGlzLmdldEluaXRpYWxTdGF0ZT90
aGlzLmdldEluaXRpYWxTdGF0ZSgpOm51bGw7KCJvYmplY3QiIT10eXBlb2Ygb3x8QXJyYXkuaXNB
cnJheShvKSkmJnAoIjgyIixlLmRpc3BsYXlOYW1lfHwiUmVhY3RDb21wb3NpdGVDb21wb25lbnQi
KSx0aGlzLnN0YXRlPW99KTtlLnByb3RvdHlwZT1uZXcgUCxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rv
cj1lLGUucHJvdG90eXBlLl9fcmVhY3RBdXRvQmluZFBhaXJzPVtdLGcuZm9yRWFjaChpLmJpbmQo
bnVsbCxlKSksaShlLHQpLGUuZ2V0RGVmYXVsdFByb3BzJiYoZS5kZWZhdWx0UHJvcHM9ZS5nZXRE
ZWZhdWx0UHJvcHMoKSksZS5wcm90b3R5cGUucmVuZGVyfHxwKCI4MyIpO2Zvcih2YXIgbiBpbiBF
KWUucHJvdG90eXBlW25dfHwoZS5wcm90b3R5cGVbbl09bnVsbCk7cmV0dXJuIGV9LGluamVjdGlv
bjp7aW5qZWN0TWl4aW46ZnVuY3Rpb24odCl7Zy5wdXNoKHQpfX19O2UuZXhwb3J0cz13fSx7MTE6
MTEsMTI6MTIsMjA6MjAsMjM6MjMsMjQ6MjQsMjU6MjUsMjY6MjYsNjo2LDk6OX1dLDY6W2Z1bmN0
aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0LGUsbil7dGhpcy5wcm9wcz10LHRo
aXMuY29udGV4dD1lLHRoaXMucmVmcz11LHRoaXMudXBkYXRlcj1ufHxpfXZhciBvPXQoMjApLGk9
dCgxMSksdT0odCgxNyksdCgyMykpO3QoMjQpLHQoMjUpO3IucHJvdG90eXBlLmlzUmVhY3RDb21w
b25lbnQ9e30sci5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24odCxlKXsib2JqZWN0IiE9dHlw
ZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT10JiZvKCI4NSIpLHRoaXMudXBkYXRl
ci5lbnF1ZXVlU2V0U3RhdGUodGhpcyx0KSxlJiZ0aGlzLnVwZGF0ZXIuZW5xdWV1ZUNhbGxiYWNr
KHRoaXMsZSwic2V0U3RhdGUiKX0sci5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24odCl7
dGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzKSx0JiZ0aGlzLnVwZGF0ZXIuZW5x
dWV1ZUNhbGxiYWNrKHRoaXMsdCwiZm9yY2VVcGRhdGUiKX07ZS5leHBvcnRzPXJ9LHsxMToxMSwx
NzoxNywyMDoyMCwyMzoyMywyNDoyNCwyNToyNX1dLDc6W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0
cmljdCI7dmFyIHI9e2N1cnJlbnQ6bnVsbH07ZS5leHBvcnRzPXJ9LHt9XSw4OltmdW5jdGlvbih0
LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPXQoOSksbz1yLmNyZWF0ZUZhY3RvcnksaT17YTpvKCJh
IiksYWJicjpvKCJhYmJyIiksYWRkcmVzczpvKCJhZGRyZXNzIiksYXJlYTpvKCJhcmVhIiksYXJ0
aWNsZTpvKCJhcnRpY2xlIiksYXNpZGU6bygiYXNpZGUiKSxhdWRpbzpvKCJhdWRpbyIpLGI6bygi
YiIpLGJhc2U6bygiYmFzZSIpLGJkaTpvKCJiZGkiKSxiZG86bygiYmRvIiksYmlnOm8oImJpZyIp
LGJsb2NrcXVvdGU6bygiYmxvY2txdW90ZSIpLGJvZHk6bygiYm9keSIpLGJyOm8oImJyIiksYnV0
dG9uOm8oImJ1dHRvbiIpLGNhbnZhczpvKCJjYW52YXMiKSxjYXB0aW9uOm8oImNhcHRpb24iKSxj
aXRlOm8oImNpdGUiKSxjb2RlOm8oImNvZGUiKSxjb2w6bygiY29sIiksY29sZ3JvdXA6bygiY29s
Z3JvdXAiKSxkYXRhOm8oImRhdGEiKSxkYXRhbGlzdDpvKCJkYXRhbGlzdCIpLGRkOm8oImRkIiks
ZGVsOm8oImRlbCIpLGRldGFpbHM6bygiZGV0YWlscyIpLGRmbjpvKCJkZm4iKSxkaWFsb2c6bygi
ZGlhbG9nIiksZGl2Om8oImRpdiIpLGRsOm8oImRsIiksZHQ6bygiZHQiKSxlbTpvKCJlbSIpLGVt
YmVkOm8oImVtYmVkIiksZmllbGRzZXQ6bygiZmllbGRzZXQiKSxmaWdjYXB0aW9uOm8oImZpZ2Nh
cHRpb24iKSxmaWd1cmU6bygiZmlndXJlIiksZm9vdGVyOm8oImZvb3RlciIpLGZvcm06bygiZm9y
bSIpLGgxOm8oImgxIiksaDI6bygiaDIiKSxoMzpvKCJoMyIpLGg0Om8oImg0IiksaDU6bygiaDUi
KSxoNjpvKCJoNiIpLGhlYWQ6bygiaGVhZCIpLGhlYWRlcjpvKCJoZWFkZXIiKSxoZ3JvdXA6bygi
aGdyb3VwIiksaHI6bygiaHIiKSxodG1sOm8oImh0bWwiKSxpOm8oImkiKSxpZnJhbWU6bygiaWZy
YW1lIiksaW1nOm8oImltZyIpLGlucHV0Om8oImlucHV0IiksaW5zOm8oImlucyIpLGtiZDpvKCJr
YmQiKSxrZXlnZW46bygia2V5Z2VuIiksbGFiZWw6bygibGFiZWwiKSxsZWdlbmQ6bygibGVnZW5k
IiksbGk6bygibGkiKSxsaW5rOm8oImxpbmsiKSxtYWluOm8oIm1haW4iKSxtYXA6bygibWFwIiks
bWFyazpvKCJtYXJrIiksbWVudTpvKCJtZW51IiksbWVudWl0ZW06bygibWVudWl0ZW0iKSxtZXRh
Om8oIm1ldGEiKSxtZXRlcjpvKCJtZXRlciIpLG5hdjpvKCJuYXYiKSxub3NjcmlwdDpvKCJub3Nj
cmlwdCIpLG9iamVjdDpvKCJvYmplY3QiKSxvbDpvKCJvbCIpLG9wdGdyb3VwOm8oIm9wdGdyb3Vw
Iiksb3B0aW9uOm8oIm9wdGlvbiIpLG91dHB1dDpvKCJvdXRwdXQiKSxwOm8oInAiKSxwYXJhbTpv
KCJwYXJhbSIpLHBpY3R1cmU6bygicGljdHVyZSIpLHByZTpvKCJwcmUiKSxwcm9ncmVzczpvKCJw
cm9ncmVzcyIpLHE6bygicSIpLHJwOm8oInJwIikscnQ6bygicnQiKSxydWJ5Om8oInJ1YnkiKSxz
Om8oInMiKSxzYW1wOm8oInNhbXAiKSxzY3JpcHQ6bygic2NyaXB0Iiksc2VjdGlvbjpvKCJzZWN0
aW9uIiksc2VsZWN0Om8oInNlbGVjdCIpLHNtYWxsOm8oInNtYWxsIiksc291cmNlOm8oInNvdXJj
ZSIpLHNwYW46bygic3BhbiIpLHN0cm9uZzpvKCJzdHJvbmciKSxzdHlsZTpvKCJzdHlsZSIpLHN1
YjpvKCJzdWIiKSxzdW1tYXJ5Om8oInN1bW1hcnkiKSxzdXA6bygic3VwIiksdGFibGU6bygidGFi
bGUiKSx0Ym9keTpvKCJ0Ym9keSIpLHRkOm8oInRkIiksdGV4dGFyZWE6bygidGV4dGFyZWEiKSx0
Zm9vdDpvKCJ0Zm9vdCIpLHRoOm8oInRoIiksdGhlYWQ6bygidGhlYWQiKSx0aW1lOm8oInRpbWUi
KSx0aXRsZTpvKCJ0aXRsZSIpLHRyOm8oInRyIiksdHJhY2s6bygidHJhY2siKSx1Om8oInUiKSx1
bDpvKCJ1bCIpLHZhcjpvKCJ2YXIiKSx2aWRlbzpvKCJ2aWRlbyIpLHdicjpvKCJ3YnIiKSxjaXJj
bGU6bygiY2lyY2xlIiksY2xpcFBhdGg6bygiY2xpcFBhdGgiKSxkZWZzOm8oImRlZnMiKSxlbGxp
cHNlOm8oImVsbGlwc2UiKSxnOm8oImciKSxpbWFnZTpvKCJpbWFnZSIpLGxpbmU6bygibGluZSIp
LGxpbmVhckdyYWRpZW50Om8oImxpbmVhckdyYWRpZW50IiksbWFzazpvKCJtYXNrIikscGF0aDpv
KCJwYXRoIikscGF0dGVybjpvKCJwYXR0ZXJuIikscG9seWdvbjpvKCJwb2x5Z29uIikscG9seWxp
bmU6bygicG9seWxpbmUiKSxyYWRpYWxHcmFkaWVudDpvKCJyYWRpYWxHcmFkaWVudCIpLHJlY3Q6
bygicmVjdCIpLHN0b3A6bygic3RvcCIpLHN2ZzpvKCJzdmciKSx0ZXh0Om8oInRleHQiKSx0c3Bh
bjpvKCJ0c3BhbiIpfTtlLmV4cG9ydHM9aX0sezk6OX1dLDk6W2Z1bmN0aW9uKHQsZSxuKXsidXNl
IHN0cmljdCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdm9pZCAwIT09dC5yZWZ9ZnVuY3Rpb24gbyh0
KXtyZXR1cm4gdm9pZCAwIT09dC5rZXl9dmFyIGk9dCgyNiksdT10KDcpLGE9KHQoMjUpLHQoMTcp
LE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpLHM9dCgxMCksYz17a2V5OiEwLHJlZjoh
MCxfX3NlbGY6ITAsX19zb3VyY2U6ITB9LGw9ZnVuY3Rpb24odCxlLG4scixvLGksdSl7cmV0dXJu
eyQkdHlwZW9mOnMsdHlwZTp0LGtleTplLHJlZjpuLHByb3BzOnUsX293bmVyOml9fTtsLmNyZWF0
ZUVsZW1lbnQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLHM9e30sZj1udWxsLHA9bnVsbDtpZihudWxs
IT1lKXtyKGUpJiYocD1lLnJlZiksbyhlKSYmKGY9IiIrZS5rZXkpLHZvaWQgMD09PWUuX19zZWxm
P251bGw6ZS5fX3NlbGYsdm9pZCAwPT09ZS5fX3NvdXJjZT9udWxsOmUuX19zb3VyY2U7Zm9yKGkg
aW4gZSlhLmNhbGwoZSxpKSYmIWMuaGFzT3duUHJvcGVydHkoaSkmJihzW2ldPWVbaV0pfXZhciBk
PWFyZ3VtZW50cy5sZW5ndGgtMjtpZigxPT09ZClzLmNoaWxkcmVuPW47ZWxzZSBpZihkPjEpe2Zv
cih2YXIgeT1BcnJheShkKSxoPTA7aDxkO2grKyl5W2hdPWFyZ3VtZW50c1toKzJdO3MuY2hpbGRy
ZW49eX1pZih0JiZ0LmRlZmF1bHRQcm9wcyl7dmFyIHY9dC5kZWZhdWx0UHJvcHM7Zm9yKGkgaW4g
dil2b2lkIDA9PT1zW2ldJiYoc1tpXT12W2ldKX1yZXR1cm4gbCh0LGYscCwwLDAsdS5jdXJyZW50
LHMpfSxsLmNyZWF0ZUZhY3Rvcnk9ZnVuY3Rpb24odCl7dmFyIGU9bC5jcmVhdGVFbGVtZW50LmJp
bmQobnVsbCx0KTtyZXR1cm4gZS50eXBlPXQsZX0sbC5jbG9uZUFuZFJlcGxhY2VLZXk9ZnVuY3Rp
b24odCxlKXtyZXR1cm4gbCh0LnR5cGUsZSx0LnJlZix0Ll9zZWxmLHQuX3NvdXJjZSx0Ll9vd25l
cix0LnByb3BzKX0sbC5jbG9uZUVsZW1lbnQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBzLGY9aSh7fSx0
LnByb3BzKSxwPXQua2V5LGQ9dC5yZWYseT0odC5fc2VsZix0Ll9zb3VyY2UsdC5fb3duZXIpO2lm
KG51bGwhPWUpe3IoZSkmJihkPWUucmVmLHk9dS5jdXJyZW50KSxvKGUpJiYocD0iIitlLmtleSk7
dmFyIGg7dC50eXBlJiZ0LnR5cGUuZGVmYXVsdFByb3BzJiYoaD10LnR5cGUuZGVmYXVsdFByb3Bz
KTtmb3IocyBpbiBlKWEuY2FsbChlLHMpJiYhYy5oYXNPd25Qcm9wZXJ0eShzKSYmKHZvaWQgMD09
PWVbc10mJnZvaWQgMCE9PWg/ZltzXT1oW3NdOmZbc109ZVtzXSl9dmFyIHY9YXJndW1lbnRzLmxl
bmd0aC0yO2lmKDE9PT12KWYuY2hpbGRyZW49bjtlbHNlIGlmKHY+MSl7Zm9yKHZhciBtPUFycmF5
KHYpLGI9MDtiPHY7YisrKW1bYl09YXJndW1lbnRzW2IrMl07Zi5jaGlsZHJlbj1tfXJldHVybiBs
KHQudHlwZSxwLGQsMCwwLHksZil9LGwuaXNWYWxpZEVsZW1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJu
Im9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dCYmdC4kJHR5cGVvZj09PXN9LGUuZXhwb3J0cz1s
fSx7MTA6MTAsMTc6MTcsMjU6MjUsMjY6MjYsNzo3fV0sMTA6W2Z1bmN0aW9uKHQsZSxuKXsidXNl
IHN0cmljdCI7dmFyIHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvciYmU3lt
Ym9sLmZvcigicmVhY3QuZWxlbWVudCIpfHw2MDEwMztlLmV4cG9ydHM9cn0se31dLDExOltmdW5j
dGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPSh0KDI1KSx7aXNNb3VudGVkOmZ1bmN0aW9u
KHQpe3JldHVybiExfSxlbnF1ZXVlQ2FsbGJhY2s6ZnVuY3Rpb24odCxlKXt9LGVucXVldWVGb3Jj
ZVVwZGF0ZTpmdW5jdGlvbih0KXt9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24odCxlKXt9
LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbih0LGUpe319KTtlLmV4cG9ydHM9cn0sezI1OjI1fV0s
MTI6W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9e307ZS5leHBvcnRzPXJ9LHt9
XSwxMzpbZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj10KDkpLG89ci5pc1ZhbGlk
RWxlbWVudCxpPXQoMjgpO2UuZXhwb3J0cz1pKG8pfSx7Mjg6MjgsOTo5fV0sMTQ6W2Z1bmN0aW9u
KHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0LGUsbil7dGhpcy5wcm9wcz10LHRoaXMu
Y29udGV4dD1lLHRoaXMucmVmcz1zLHRoaXMudXBkYXRlcj1ufHxhfWZ1bmN0aW9uIG8oKXt9dmFy
IGk9dCgyNiksdT10KDYpLGE9dCgxMSkscz10KDIzKTtvLnByb3RvdHlwZT11LnByb3RvdHlwZSxy
LnByb3RvdHlwZT1uZXcgbyxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLGkoci5wcm90b3R5cGUs
dS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLGUuZXhwb3J0
cz1yfSx7MTE6MTEsMjM6MjMsMjY6MjYsNjo2fV0sMTU6W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0
cmljdCI7dmFyIHI9dCgyNiksbz10KDMpLGk9cihvLHtfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9U
X1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDp7UmVhY3RDdXJyZW50T3duZXI6dCg3KX19KTtlLmV4
cG9ydHM9aX0sezI2OjI2LDM6Myw3Ojd9XSwxNjpbZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0
IjtlLmV4cG9ydHM9IjE1LjUuNCJ9LHt9XSwxNzpbZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0
IjtlLmV4cG9ydHM9ITF9LHt9XSwxODpbZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5j
dGlvbiByKHQpe3ZhciBlPXQmJihvJiZ0W29dfHx0W2ldKTtpZigiZnVuY3Rpb24iPT10eXBlb2Yg
ZSlyZXR1cm4gZX12YXIgbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0
b3IsaT0iQEBpdGVyYXRvciI7ZS5leHBvcnRzPXJ9LHt9XSwxOTpbZnVuY3Rpb24odCxlLG4peyJ1
c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3JldHVybiBpLmlzVmFsaWRFbGVtZW50KHQpfHxvKCIx
NDMiKSx0fXZhciBvPXQoMjApLGk9dCg5KTt0KDI0KTtlLmV4cG9ydHM9cn0sezIwOjIwLDI0OjI0
LDk6OX1dLDIwOltmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7Zm9y
KHZhciBlPWFyZ3VtZW50cy5sZW5ndGgtMSxuPSJNaW5pZmllZCBSZWFjdCBlcnJvciAjIit0KyI7
IHZpc2l0IGh0dHA6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9lcnJvci1kZWNvZGVy
Lmh0bWw/aW52YXJpYW50PSIrdCxyPTA7cjxlO3IrKyluKz0iJmFyZ3NbXT0iK2VuY29kZVVSSUNv
bXBvbmVudChhcmd1bWVudHNbcisxXSk7bis9IiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2Ug
dGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRp
dGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIjt2YXIgbz1uZXcgRXJyb3Iobik7dGhyb3cgby5uYW1l
PSJJbnZhcmlhbnQgVmlvbGF0aW9uIixvLmZyYW1lc1RvUG9wPTEsb31lLmV4cG9ydHM9cn0se31d
LDIxOltmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCxlKXtyZXR1cm4g
dCYmIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10LmtleT9jLmVzY2FwZSh0LmtleSk6ZS50b1N0
cmluZygzNil9ZnVuY3Rpb24gbyh0LGUsbixpKXt2YXIgcD10eXBlb2YgdDtpZigidW5kZWZpbmVk
IiE9PXAmJiJib29sZWFuIiE9PXB8fCh0PW51bGwpLG51bGw9PT10fHwic3RyaW5nIj09PXB8fCJu
dW1iZXIiPT09cHx8Im9iamVjdCI9PT1wJiZ0LiQkdHlwZW9mPT09YSlyZXR1cm4gbihpLHQsIiI9
PT1lP2wrcih0LDApOmUpLDE7dmFyIGQseSxoPTAsdj0iIj09PWU/bDplK2Y7aWYoQXJyYXkuaXNB
cnJheSh0KSlmb3IodmFyIG09MDttPHQubGVuZ3RoO20rKylkPXRbbV0seT12K3IoZCxtKSxoKz1v
KGQseSxuLGkpO2Vsc2V7dmFyIGI9cyh0KTtpZihiKXt2YXIgZyxFPWIuY2FsbCh0KTtpZihiIT09
dC5lbnRyaWVzKWZvcih2YXIgeD0wOyEoZz1FLm5leHQoKSkuZG9uZTspZD1nLnZhbHVlLHk9dity
KGQseCsrKSxoKz1vKGQseSxuLGkpO2Vsc2UgZm9yKDshKGc9RS5uZXh0KCkpLmRvbmU7KXt2YXIg
Xz1nLnZhbHVlO18mJihkPV9bMV0seT12K2MuZXNjYXBlKF9bMF0pK2YrcihkLDApLGgrPW8oZCx5
LG4saSkpfX1lbHNlIGlmKCJvYmplY3QiPT09cCl7dmFyIFA9U3RyaW5nKHQpO3UoIjMxIiwiW29i
amVjdCBPYmplY3RdIj09PVA/Im9iamVjdCB3aXRoIGtleXMgeyIrT2JqZWN0LmtleXModCkuam9p
bigiLCAiKSsifSI6UCwiIil9fXJldHVybiBofWZ1bmN0aW9uIGkodCxlLG4pe3JldHVybiBudWxs
PT10PzA6byh0LCIiLGUsbil9dmFyIHU9dCgyMCksYT0odCg3KSx0KDEwKSkscz10KDE4KSxjPSh0
KDI0KSx0KDEpKSxsPSh0KDI1KSwiLiIpLGY9IjoiO2UuZXhwb3J0cz1pfSx7MToxLDEwOjEwLDE4
OjE4LDIwOjIwLDI0OjI0LDI1OjI1LDc6N31dLDIyOltmdW5jdGlvbih0LGUsbil7InVzZSBzdHJp
Y3QiO2Z1bmN0aW9uIHIodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBvPWZ1bmN0
aW9uKCl7fTtvLnRoYXRSZXR1cm5zPXIsby50aGF0UmV0dXJuc0ZhbHNlPXIoITEpLG8udGhhdFJl
dHVybnNUcnVlPXIoITApLG8udGhhdFJldHVybnNOdWxsPXIobnVsbCksby50aGF0UmV0dXJuc1Ro
aXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sby50aGF0UmV0dXJuc0FyZ3VtZW50PWZ1bmN0aW9u
KHQpe3JldHVybiB0fSxlLmV4cG9ydHM9b30se31dLDIzOltmdW5jdGlvbih0LGUsbil7InVzZSBz
dHJpY3QiO3ZhciByPXt9O2UuZXhwb3J0cz1yfSx7fV0sMjQ6W2Z1bmN0aW9uKHQsZSxuKXsidXNl
IHN0cmljdCI7ZnVuY3Rpb24gcih0LGUsbixyLGksdSxhLHMpe2lmKG8oZSksIXQpe3ZhciBjO2lm
KHZvaWQgMD09PWUpYz1uZXcgRXJyb3IoIk1pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNl
IHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciB0aGUgZnVsbCBlcnJvciBtZXNz
YWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIik7ZWxzZXt2YXIgbD1bbixyLGks
dSxhLHNdLGY9MDtjPW5ldyBFcnJvcihlLnJlcGxhY2UoLyVzL2csZnVuY3Rpb24oKXtyZXR1cm4g
bFtmKytdfSkpLGMubmFtZT0iSW52YXJpYW50IFZpb2xhdGlvbiJ9dGhyb3cgYy5mcmFtZXNUb1Bv
cD0xLGN9fXZhciBvPWZ1bmN0aW9uKHQpe307ZS5leHBvcnRzPXJ9LHt9XSwyNTpbZnVuY3Rpb24o
dCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj10KDIyKSxvPXI7ZS5leHBvcnRzPW99LHsyMjoyMn1d
LDI2OltmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7aWYobnVsbD09
PXR8fHZvaWQgMD09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0LmFzc2lnbiBjYW5ub3Qg
YmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQiKTtyZXR1cm4gT2JqZWN0KHQpfXZhciBv
PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsaT1PYmplY3QucHJvdG90eXBlLmhhc093blBy
b3BlcnR5LHU9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtlLmV4cG9ydHM9
ZnVuY3Rpb24oKXt0cnl7aWYoIU9iamVjdC5hc3NpZ24pcmV0dXJuITE7dmFyIHQ9bmV3IFN0cmlu
ZygiYWJjIik7aWYodFs1XT0iZGUiLCI1Ij09PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQp
WzBdKXJldHVybiExO2Zvcih2YXIgZT17fSxuPTA7bjwxMDtuKyspZVsiXyIrU3RyaW5nLmZyb21D
aGFyQ29kZShuKV09bjtpZigiMDEyMzQ1Njc4OSIhPT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1l
cyhlKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KS5qb2luKCIiKSlyZXR1cm4hMTt2YXIg
cj17fTtyZXR1cm4iYWJjZGVmZ2hpamtsbW5vcHFyc3QiLnNwbGl0KCIiKS5mb3JFYWNoKGZ1bmN0
aW9uKHQpe3JbdF09dH0pLCJhYmNkZWZnaGlqa2xtbm9wcXJzdCI9PT1PYmplY3Qua2V5cyhPYmpl
Y3QuYXNzaWduKHt9LHIpKS5qb2luKCIiKX1jYXRjaCh0KXtyZXR1cm4hMX19KCk/T2JqZWN0LmFz
c2lnbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbixhLHM9cih0KSxjPTE7Yzxhcmd1bWVudHMubGVu
Z3RoO2MrKyl7bj1PYmplY3QoYXJndW1lbnRzW2NdKTtmb3IodmFyIGwgaW4gbilpLmNhbGwobixs
KSYmKHNbbF09bltsXSk7aWYobyl7YT1vKG4pO2Zvcih2YXIgZj0wO2Y8YS5sZW5ndGg7ZisrKXUu
Y2FsbChuLGFbZl0pJiYoc1thW2ZdXT1uW2FbZl1dKX19cmV0dXJuIHN9fSx7fV0sMjc6W2Z1bmN0
aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0LGUsbixyLG8pe31lLmV4cG9ydHM9
cn0sezI0OjI0LDI1OjI1LDMwOjMwfV0sMjg6W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7
dmFyIHI9dCgyOSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHQsITEpfX0sezI5OjI5
fV0sMjk6W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9dCgyMiksbz10KDI0KSxp
PSh0KDI1KSx0KDMwKSksdT10KDI3KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBu
KHQpe3ZhciBlPXQmJihfJiZ0W19dfHx0W1BdKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZSlyZXR1
cm4gZX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIHQ9PT1lPzAhPT10fHwxL3Q9PTEvZTp0IT09dCYm
ZSE9PWV9ZnVuY3Rpb24gcyh0KXt0aGlzLm1lc3NhZ2U9dCx0aGlzLnN0YWNrPSIifWZ1bmN0aW9u
IGModCl7ZnVuY3Rpb24gbihuLHIsdSxhLGMsbCxmKXtpZihhPWF8fHcsbD1sfHx1LGYhPT1pKWlm
KGUpbyghMSwiQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3Vw
cG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gVXNlIGBQcm9wVHlwZXMuY2hlY2tQ
cm9wVHlwZXMoKWAgdG8gY2FsbCB0aGVtLiBSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1j
aGVjay1wcm9wLXR5cGVzIik7ZWxzZTtyZXR1cm4gbnVsbD09clt1XT9uP25ldyBzKG51bGw9PT1y
W3VdPyJUaGUgIitjKyIgYCIrbCsiYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gYCIrYSsiYCwg
YnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuIjoiVGhlICIrYysiIGAiK2wrImAgaXMgbWFya2VkIGFz
IHJlcXVpcmVkIGluIGAiK2ErImAsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuIik6bnVs
bDp0KHIsdSxhLGMsbCl9dmFyIHI9bi5iaW5kKG51bGwsITEpO3JldHVybiByLmlzUmVxdWlyZWQ9
bi5iaW5kKG51bGwsITApLHJ9ZnVuY3Rpb24gbCh0KXtmdW5jdGlvbiBlKGUsbixyLG8saSx1KXt2
YXIgYT1lW25dO2lmKGcoYSkhPT10KXJldHVybiBuZXcgcygiSW52YWxpZCAiK28rIiBgIitpKyJg
IG9mIHR5cGUgYCIrRShhKSsiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBgIit0KyJg
LiIpO3JldHVybiBudWxsfXJldHVybiBjKGUpfWZ1bmN0aW9uIGYodCl7ZnVuY3Rpb24gZShlLG4s
cixvLHUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXJldHVybiBuZXcgcygiUHJvcGVydHkgYCIr
dSsiYCBvZiBjb21wb25lbnQgYCIrcisiYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBp
bnNpZGUgYXJyYXlPZi4iKTt2YXIgYT1lW25dO2lmKCFBcnJheS5pc0FycmF5KGEpKXtyZXR1cm4g
bmV3IHMoIkludmFsaWQgIitvKyIgYCIrdSsiYCBvZiB0eXBlIGAiK2coYSkrImAgc3VwcGxpZWQg
dG8gYCIrcisiYCwgZXhwZWN0ZWQgYW4gYXJyYXkuIil9Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtj
Kyspe3ZhciBsPXQoYSxjLHIsbyx1KyJbIitjKyJdIixpKTtpZihsIGluc3RhbmNlb2YgRXJyb3Ip
cmV0dXJuIGx9cmV0dXJuIG51bGx9cmV0dXJuIGMoZSl9ZnVuY3Rpb24gcCh0KXtmdW5jdGlvbiBl
KGUsbixyLG8saSl7aWYoIShlW25daW5zdGFuY2VvZiB0KSl7dmFyIHU9dC5uYW1lfHx3O3JldHVy
biBuZXcgcygiSW52YWxpZCAiK28rIiBgIitpKyJgIG9mIHR5cGUgYCIreChlW25dKSsiYCBzdXBw
bGllZCB0byBgIityKyJgLCBleHBlY3RlZCBpbnN0YW5jZSBvZiBgIit1KyJgLiIpfXJldHVybiBu
dWxsfXJldHVybiBjKGUpfWZ1bmN0aW9uIGQodCl7ZnVuY3Rpb24gZShlLG4scixvLGkpe2Zvcih2
YXIgdT1lW25dLGM9MDtjPHQubGVuZ3RoO2MrKylpZihhKHUsdFtjXSkpcmV0dXJuIG51bGw7cmV0
dXJuIG5ldyBzKCJJbnZhbGlkICIrbysiIGAiK2krImAgb2YgdmFsdWUgYCIrdSsiYCBzdXBwbGll
ZCB0byBgIityKyJgLCBleHBlY3RlZCBvbmUgb2YgIitKU09OLnN0cmluZ2lmeSh0KSsiLiIpfXJl
dHVybiBBcnJheS5pc0FycmF5KHQpP2MoZSk6ci50aGF0UmV0dXJuc051bGx9ZnVuY3Rpb24geSh0
KXtmdW5jdGlvbiBlKGUsbixyLG8sdSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpcmV0dXJuIG5l
dyBzKCJQcm9wZXJ0eSBgIit1KyJgIG9mIGNvbXBvbmVudCBgIityKyJgIGhhcyBpbnZhbGlkIFBy
b3BUeXBlIG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi4iKTt2YXIgYT1lW25dLGM9ZyhhKTtpZigi
b2JqZWN0IiE9PWMpcmV0dXJuIG5ldyBzKCJJbnZhbGlkICIrbysiIGAiK3UrImAgb2YgdHlwZSBg
IitjKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVjdGVkIGFuIG9iamVjdC4iKTtmb3IodmFy
IGwgaW4gYSlpZihhLmhhc093blByb3BlcnR5KGwpKXt2YXIgZj10KGEsbCxyLG8sdSsiLiIrbCxp
KTtpZihmIGluc3RhbmNlb2YgRXJyb3IpcmV0dXJuIGZ9cmV0dXJuIG51bGx9cmV0dXJuIGMoZSl9
ZnVuY3Rpb24gaCh0KXtmdW5jdGlvbiBlKGUsbixyLG8sdSl7Zm9yKHZhciBhPTA7YTx0Lmxlbmd0
aDthKyspe2lmKG51bGw9PSgwLHRbYV0pKGUsbixyLG8sdSxpKSlyZXR1cm4gbnVsbH1yZXR1cm4g
bmV3IHMoIkludmFsaWQgIitvKyIgYCIrdSsiYCBzdXBwbGllZCB0byBgIityKyJgLiIpfXJldHVy
biBBcnJheS5pc0FycmF5KHQpP2MoZSk6ci50aGF0UmV0dXJuc051bGx9ZnVuY3Rpb24gdih0KXtm
dW5jdGlvbiBlKGUsbixyLG8sdSl7dmFyIGE9ZVtuXSxjPWcoYSk7aWYoIm9iamVjdCIhPT1jKXJl
dHVybiBuZXcgcygiSW52YWxpZCAiK28rIiBgIit1KyJgIG9mIHR5cGUgYCIrYysiYCBzdXBwbGll
ZCB0byBgIityKyJgLCBleHBlY3RlZCBgb2JqZWN0YC4iKTtmb3IodmFyIGwgaW4gdCl7dmFyIGY9
dFtsXTtpZihmKXt2YXIgcD1mKGEsbCxyLG8sdSsiLiIrbCxpKTtpZihwKXJldHVybiBwfX1yZXR1
cm4gbnVsbH1yZXR1cm4gYyhlKX1mdW5jdGlvbiBtKGUpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJu
dW1iZXIiOmNhc2Uic3RyaW5nIjpjYXNlInVuZGVmaW5lZCI6cmV0dXJuITA7Y2FzZSJib29sZWFu
IjpyZXR1cm4hZTtjYXNlIm9iamVjdCI6aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZS5ldmVy
eShtKTtpZihudWxsPT09ZXx8dChlKSlyZXR1cm4hMDt2YXIgcj1uKGUpO2lmKCFyKXJldHVybiEx
O3ZhciBvLGk9ci5jYWxsKGUpO2lmKHIhPT1lLmVudHJpZXMpe2Zvcig7IShvPWkubmV4dCgpKS5k
b25lOylpZighbShvLnZhbHVlKSlyZXR1cm4hMX1lbHNlIGZvcig7IShvPWkubmV4dCgpKS5kb25l
Oyl7dmFyIHU9by52YWx1ZTtpZih1JiYhbSh1WzFdKSlyZXR1cm4hMX1yZXR1cm4hMDtkZWZhdWx0
OnJldHVybiExfX1mdW5jdGlvbiBiKHQsZSl7cmV0dXJuInN5bWJvbCI9PT10fHwoIlN5bWJvbCI9
PT1lWyJAQHRvU3RyaW5nVGFnIl18fCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUgaW5zdGFu
Y2VvZiBTeW1ib2wpfWZ1bmN0aW9uIGcodCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIEFycmF5Lmlz
QXJyYXkodCk/ImFycmF5Ijp0IGluc3RhbmNlb2YgUmVnRXhwPyJvYmplY3QiOmIoZSx0KT8ic3lt
Ym9sIjplfWZ1bmN0aW9uIEUodCl7dmFyIGU9Zyh0KTtpZigib2JqZWN0Ij09PWUpe2lmKHQgaW5z
dGFuY2VvZiBEYXRlKXJldHVybiJkYXRlIjtpZih0IGluc3RhbmNlb2YgUmVnRXhwKXJldHVybiJy
ZWdleHAifXJldHVybiBlfWZ1bmN0aW9uIHgodCl7cmV0dXJuIHQuY29uc3RydWN0b3ImJnQuY29u
c3RydWN0b3IubmFtZT90LmNvbnN0cnVjdG9yLm5hbWU6d312YXIgXz0iZnVuY3Rpb24iPT10eXBl
b2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3IsUD0iQEBpdGVyYXRvciIsdz0iPDxhbm9ueW1vdXM+
PiIsTj17YXJyYXk6bCgiYXJyYXkiKSxib29sOmwoImJvb2xlYW4iKSxmdW5jOmwoImZ1bmN0aW9u
IiksbnVtYmVyOmwoIm51bWJlciIpLG9iamVjdDpsKCJvYmplY3QiKSxzdHJpbmc6bCgic3RyaW5n
Iiksc3ltYm9sOmwoInN5bWJvbCIpLGFueTpmdW5jdGlvbigpe3JldHVybiBjKHIudGhhdFJldHVy
bnNOdWxsKX0oKSxhcnJheU9mOmYsZWxlbWVudDpmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSxuLHIs
byxpKXt2YXIgdT1lW25dO2lmKCF0KHUpKXtyZXR1cm4gbmV3IHMoIkludmFsaWQgIitvKyIgYCIr
aSsiYCBvZiB0eXBlIGAiK2codSkrImAgc3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQgYSBz
aW5nbGUgUmVhY3RFbGVtZW50LiIpfXJldHVybiBudWxsfXJldHVybiBjKGUpfSgpLGluc3RhbmNl
T2Y6cCxub2RlOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLG8pe3JldHVybiBtKHRbZV0p
P251bGw6bmV3IHMoIkludmFsaWQgIityKyIgYCIrbysiYCBzdXBwbGllZCB0byBgIituKyJgLCBl
eHBlY3RlZCBhIFJlYWN0Tm9kZS4iKX1yZXR1cm4gYyh0KX0oKSxvYmplY3RPZjp5LG9uZU9mOmQs
b25lT2ZUeXBlOmgsc2hhcGU6dn07cmV0dXJuIHMucHJvdG90eXBlPUVycm9yLnByb3RvdHlwZSxO
LmNoZWNrUHJvcFR5cGVzPXUsTi5Qcm9wVHlwZXM9TixOfX0sezIyOjIyLDI0OjI0LDI1OjI1LDI3
OjI3LDMwOjMwfV0sMzA6W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPSJT
RUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCJ9LHt9XX0se30sWzE1
XSkoMTUpfSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3JlYWN0L3BhY2thZ2UuanNvbiBiL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L3JlYWN0L25vZGVfbW9kdWxlcy9yZWFjdC9wYWNrYWdlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTRkMTM0
ZjI3NGY3MTAzNTVkOTc2MDY0YmY3NWFlZTkwYzNiMWYyNAotLS0gL2Rldi9udWxsCisrKyBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9yZWFjdC9wYWNrYWdlLmpzb24KQEAgLTAsMCAr
MSwzNiBAQAoreworICAibmFtZSI6ICJyZWFjdCIsCisgICJkZXNjcmlwdGlvbiI6ICJSZWFjdCBp
cyBhIEphdmFTY3JpcHQgbGlicmFyeSBmb3IgYnVpbGRpbmcgdXNlciBpbnRlcmZhY2VzLiIsCisg
ICJ2ZXJzaW9uIjogIjE1LjUuNCIsCisgICJrZXl3b3JkcyI6IFsKKyAgICAicmVhY3QiCisgIF0s
CisgICJob21lcGFnZSI6ICJodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC8iLAorICAi
YnVncyI6ICJodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzIiwKKyAgImxp
Y2Vuc2UiOiAiQlNELTMtQ2xhdXNlIiwKKyAgImZpbGVzIjogWworICAgICJMSUNFTlNFIiwKKyAg
ICAiUEFURU5UUyIsCisgICAgImFkZG9ucy5qcyIsCisgICAgInJlYWN0LmpzIiwKKyAgICAiYWRk
b25zLyIsCisgICAgImRpc3QvIiwKKyAgICAibGliLyIKKyAgXSwKKyAgIm1haW4iOiAicmVhY3Qu
anMiLAorICAicmVwb3NpdG9yeSI6ICJmYWNlYm9vay9yZWFjdCIsCisgICJlbmdpbmVzIjogewor
ICAgICJub2RlIjogIj49MC4xMC4wIgorICB9LAorICAiZGVwZW5kZW5jaWVzIjogeworICAgICJm
YmpzIjogIl4wLjguOSIsCisgICAgImxvb3NlLWVudmlmeSI6ICJeMS4xLjAiLAorICAgICJvYmpl
Y3QtYXNzaWduIjogIl40LjEuMCIsCisgICAgInByb3AtdHlwZXMiOiAiXjE1LjUuNyIKKyAgfSwK
KyAgImJyb3dzZXJpZnkiOiB7CisgICAgInRyYW5zZm9ybSI6IFsKKyAgICAgICJsb29zZS1lbnZp
ZnkiCisgICAgXQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRleC5j
c3MgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL2luZGV4
LmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lMDRmYmRiZGI0ZWQ0YWZlMDlkNTU0M2RiNTIwZGM2YTlkZGQ0MWIy
Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3RvZG9t
dmMtYXBwLWNzcy9pbmRleC5jc3MKQEAgLTAsMCArMSwzNzYgQEAKK2h0bWwsCitib2R5IHsKKyAg
ICBtYXJnaW46IDA7CisgICAgcGFkZGluZzogMDsKK30KKworYnV0dG9uIHsKKyAgICBtYXJnaW46
IDA7CisgICAgcGFkZGluZzogMDsKKyAgICBib3JkZXI6IDA7CisgICAgYmFja2dyb3VuZDogbm9u
ZTsKKyAgICBmb250LXNpemU6IDEwMCU7CisgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOwor
ICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OworICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0OworICAg
IGNvbG9yOiBpbmhlcml0OworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKKyAgICBhcHBl
YXJhbmNlOiBub25lOworICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwor
ICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7Cit9CisKK2JvZHkgeworICAg
IGZvbnQ6IDE0cHggJ0hlbHZldGljYSBOZXVlJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJp
ZjsKKyAgICBsaW5lLWhlaWdodDogMS40ZW07CisgICAgYmFja2dyb3VuZDogI2Y1ZjVmNTsKKyAg
ICBjb2xvcjogIzRkNGQ0ZDsKKyAgICBtaW4td2lkdGg6IDIzMHB4OworICAgIG1heC13aWR0aDog
NTUwcHg7CisgICAgbWFyZ2luOiAwIGF1dG87CisgICAgLXdlYmtpdC1mb250LXNtb290aGluZzog
YW50aWFsaWFzZWQ7CisgICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsKKyAg
ICBmb250LXdlaWdodDogMzAwOworfQorCis6Zm9jdXMgeworICAgIG91dGxpbmU6IDA7Cit9CisK
Ky5oaWRkZW4geworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKy50b2RvYXBwIHsKKyAgICBiYWNr
Z3JvdW5kOiAjZmZmOworICAgIG1hcmdpbjogMTMwcHggMCA0MHB4IDA7CisgICAgcG9zaXRpb246
IHJlbGF0aXZlOworICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCAwIHJnYmEoMCwgMCwgMCwgMC4y
KSwKKyAgICAgICAgICAgICAgICAwIDI1cHggNTBweCAwIHJnYmEoMCwgMCwgMCwgMC4xKTsKK30K
KworLnRvZG9hcHAgaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIgeworICAgIGZvbnQt
c3R5bGU6IGl0YWxpYzsKKyAgICBmb250LXdlaWdodDogMzAwOworICAgIGNvbG9yOiAjZTZlNmU2
OworfQorCisudG9kb2FwcCBpbnB1dDo6LW1vei1wbGFjZWhvbGRlciB7CisgICAgZm9udC1zdHls
ZTogaXRhbGljOworICAgIGZvbnQtd2VpZ2h0OiAzMDA7CisgICAgY29sb3I6ICNlNmU2ZTY7Cit9
CisKKy50b2RvYXBwIGlucHV0OjppbnB1dC1wbGFjZWhvbGRlciB7CisgICAgZm9udC1zdHlsZTog
aXRhbGljOworICAgIGZvbnQtd2VpZ2h0OiAzMDA7CisgICAgY29sb3I6ICNlNmU2ZTY7Cit9CisK
Ky50b2RvYXBwIGgxIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAtMTU1cHg7
CisgICAgd2lkdGg6IDEwMCU7CisgICAgZm9udC1zaXplOiAxMDBweDsKKyAgICBmb250LXdlaWdo
dDogMTAwOworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBjb2xvcjogcmdiYSgxNzUsIDQ3
LCA0NywgMC4xNSk7CisgICAgLXdlYmtpdC10ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmls
aXR5OworICAgIC1tb3otdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKKyAgICB0
ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OworfQorCisubmV3LXRvZG8sCisuZWRp
dCB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIG1hcmdpbjogMDsKKyAgICB3aWR0aDog
MTAwJTsKKyAgICBmb250LXNpemU6IDI0cHg7CisgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7Cisg
ICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7CisgICAgbGluZS1oZWlnaHQ6IDEuNGVtOworICAgIGJv
cmRlcjogMDsKKyAgICBjb2xvcjogaW5oZXJpdDsKKyAgICBwYWRkaW5nOiA2cHg7CisgICAgYm9y
ZGVyOiAxcHggc29saWQgIzk5OTsKKyAgICBib3gtc2hhZG93OiBpbnNldCAwIC0xcHggNXB4IDAg
cmdiYSgwLCAwLCAwLCAwLjIpOworICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgICAgLXdl
YmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgLW1vei1vc3gtZm9udC1zbW9v
dGhpbmc6IGdyYXlzY2FsZTsKK30KKworLm5ldy10b2RvIHsKKyAgICBwYWRkaW5nOiAxNnB4IDE2
cHggMTZweCA2MHB4OworICAgIGJvcmRlcjogbm9uZTsKKyAgICBiYWNrZ3JvdW5kOiByZ2JhKDAs
IDAsIDAsIDAuMDAzKTsKKyAgICBib3gtc2hhZG93OiBpbnNldCAwIC0ycHggMXB4IHJnYmEoMCww
LDAsMC4wMyk7Cit9CisKKy5tYWluIHsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgei1p
bmRleDogMjsKKyAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2U2ZTZlNjsKK30KKworLnRvZ2ds
ZS1hbGwgeworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBib3JkZXI6IG5vbmU7IC8qIE1v
YmlsZSBTYWZhcmkgKi8KKyAgICBvcGFjaXR5OiAwOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
K30KKworLnRvZ2dsZS1hbGwgKyBsYWJlbCB7CisgICAgd2lkdGg6IDYwcHg7CisgICAgaGVpZ2h0
OiAzNHB4OworICAgIGZvbnQtc2l6ZTogMDsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAg
dG9wOiAtNTJweDsKKyAgICBsZWZ0OiAtMTNweDsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90
YXRlKDkwZGVnKTsKKyAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7Cit9CisKKy50b2dnbGUt
YWxsICsgbGFiZWw6YmVmb3JlIHsKKyAgICBjb250ZW50OiAn4p2vJzsKKyAgICBmb250LXNpemU6
IDIycHg7CisgICAgY29sb3I6ICNlNmU2ZTY7CisgICAgcGFkZGluZzogMTBweCAyN3B4IDEwcHgg
MjdweDsKK30KKworLnRvZ2dsZS1hbGw6Y2hlY2tlZCArIGxhYmVsOmJlZm9yZSB7CisgICAgY29s
b3I6ICM3MzczNzM7Cit9CisKKy50b2RvLWxpc3QgeworICAgIG1hcmdpbjogMDsKKyAgICBwYWRk
aW5nOiAwOworICAgIGxpc3Qtc3R5bGU6IG5vbmU7Cit9CisKKy50b2RvLWxpc3QgbGkgeworICAg
IHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBmb250LXNpemU6IDI0cHg7CisgICAgYm9yZGVyLWJv
dHRvbTogMXB4IHNvbGlkICNlZGVkZWQ7Cit9CisKKy50b2RvLWxpc3QgbGk6bGFzdC1jaGlsZCB7
CisgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKK30KKworLnRvZG8tbGlzdCBsaS5lZGl0aW5nIHsK
KyAgICBib3JkZXItYm90dG9tOiBub25lOworICAgIHBhZGRpbmc6IDA7Cit9CisKKy50b2RvLWxp
c3QgbGkuZWRpdGluZyAuZWRpdCB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgd2lkdGg6IDUw
NnB4OworICAgIHBhZGRpbmc6IDEycHggMTZweDsKKyAgICBtYXJnaW46IDAgMCAwIDQzcHg7Cit9
CisKKy50b2RvLWxpc3QgbGkuZWRpdGluZyAudmlldyB7CisgICAgZGlzcGxheTogbm9uZTsKK30K
KworLnRvZG8tbGlzdCBsaSAudG9nZ2xlIHsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAg
d2lkdGg6IDQwcHg7CisgICAgLyogYXV0bywgc2luY2Ugbm9uLVdlYktpdCBicm93c2VycyBkb2Vz
bid0IHN1cHBvcnQgaW5wdXQgc3R5bGluZyAqLworICAgIGhlaWdodDogYXV0bzsKKyAgICBwb3Np
dGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAwOworICAgIGJvdHRvbTogMDsKKyAgICBtYXJnaW46
IGF1dG8gMDsKKyAgICBib3JkZXI6IG5vbmU7IC8qIE1vYmlsZSBTYWZhcmkgKi8KKyAgICAtd2Vi
a2l0LWFwcGVhcmFuY2U6IG5vbmU7CisgICAgYXBwZWFyYW5jZTogbm9uZTsKK30KKworLnRvZG8t
bGlzdCBsaSAudG9nZ2xlIHsKKyAgICBvcGFjaXR5OiAwOworfQorCisudG9kby1saXN0IGxpIC50
b2dnbGUgKyBsYWJlbCB7CisgICAgLyoKKyAgICAgICAgRmlyZWZveCByZXF1aXJlcyBgI2AgdG8g
YmUgZXNjYXBlZCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lk
PTkyMjQzMworICAgICAgICBJRSBhbmQgRWRnZSByZXF1aXJlcyAqZXZlcnl0aGluZyogdG8gYmUg
ZXNjYXBlZCB0byByZW5kZXIsIHNvIHdlIGRvIHRoYXQgaW5zdGVhZCBvZiBqdXN0IHRoZSBgI2Ag
LSBodHRwczovL2RldmVsb3Blci5taWNyb3NvZnQuY29tL2VuLXVzL21pY3Jvc29mdC1lZGdlL3Bs
YXRmb3JtL2lzc3Vlcy83MTU3NDU5LworICAgICovCisgICAgYmFja2dyb3VuZC1pbWFnZTogdXJs
KCdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0EvL3d3
dy53My5vcmcvMjAwMC9zdmclMjIlMjB3aWR0aCUzRCUyMjQwJTIyJTIwaGVpZ2h0JTNEJTIyNDAl
MjIlMjB2aWV3Qm94JTNEJTIyLTEwJTIwLTE4JTIwMTAwJTIwMTM1JTIyJTNFJTNDY2lyY2xlJTIw
Y3glM0QlMjI1MCUyMiUyMGN5JTNEJTIyNTAlMjIlMjByJTNEJTIyNTAlMjIlMjBmaWxsJTNEJTIy
bm9uZSUyMiUyMHN0cm9rZSUzRCUyMiUyM2VkZWRlZCUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjMl
MjIvJTNFJTNDL3N2ZyUzRScpOworICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7Cisg
ICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGxlZnQ7Cit9CisKKy50b2RvLWxpc3QgbGkg
LnRvZ2dsZTpjaGVja2VkICsgbGFiZWwgeworICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0
YTppbWFnZS9zdmcreG1sO3V0ZjgsJTNDc3ZnJTIweG1sbnMlM0QlMjJodHRwJTNBLy93d3cudzMu
b3JnLzIwMDAvc3ZnJTIyJTIwd2lkdGglM0QlMjI0MCUyMiUyMGhlaWdodCUzRCUyMjQwJTIyJTIw
dmlld0JveCUzRCUyMi0xMCUyMC0xOCUyMDEwMCUyMDEzNSUyMiUzRSUzQ2NpcmNsZSUyMGN4JTNE
JTIyNTAlMjIlMjBjeSUzRCUyMjUwJTIyJTIwciUzRCUyMjUwJTIyJTIwZmlsbCUzRCUyMm5vbmUl
MjIlMjBzdHJva2UlM0QlMjIlMjNiZGRhZDUlMjIlMjBzdHJva2Utd2lkdGglM0QlMjIzJTIyLyUz
RSUzQ3BhdGglMjBmaWxsJTNEJTIyJTIzNWRjMmFmJTIyJTIwZCUzRCUyMk03MiUyMDI1TDQyJTIw
NzElMjAyNyUyMDU2bC00JTIwNCUyMDIwJTIwMjAlMjAzNC01MnolMjIvJTNFJTNDL3N2ZyUzRScp
OworfQorCisudG9kby1saXN0IGxpIGxhYmVsIHsKKyAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7
CisgICAgcGFkZGluZzogMTVweCAxNXB4IDE1cHggNjBweDsKKyAgICBkaXNwbGF5OiBibG9jazsK
KyAgICBsaW5lLWhlaWdodDogMS4yOworICAgIHRyYW5zaXRpb246IGNvbG9yIDAuNHM7Cit9CisK
Ky50b2RvLWxpc3QgbGkuY29tcGxldGVkIGxhYmVsIHsKKyAgICBjb2xvcjogI2Q5ZDlkOTsKKyAg
ICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsKK30KKworLnRvZG8tbGlzdCBsaSAuZGVz
dHJveSB7CisgICAgZGlzcGxheTogbm9uZTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAg
dG9wOiAwOworICAgIHJpZ2h0OiAxMHB4OworICAgIGJvdHRvbTogMDsKKyAgICB3aWR0aDogNDBw
eDsKKyAgICBoZWlnaHQ6IDQwcHg7CisgICAgbWFyZ2luOiBhdXRvIDA7CisgICAgZm9udC1zaXpl
OiAzMHB4OworICAgIGNvbG9yOiAjY2M5YTlhOworICAgIG1hcmdpbi1ib3R0b206IDExcHg7Cisg
ICAgdHJhbnNpdGlvbjogY29sb3IgMC4ycyBlYXNlLW91dDsKK30KKworLnRvZG8tbGlzdCBsaSAu
ZGVzdHJveTpob3ZlciB7CisgICAgY29sb3I6ICNhZjViNWU7Cit9CisKKy50b2RvLWxpc3QgbGkg
LmRlc3Ryb3k6YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICfDlyc7Cit9CisKKy50b2RvLWxpc3QgbGk6
aG92ZXIgLmRlc3Ryb3kgeworICAgIGRpc3BsYXk6IGJsb2NrOworfQorCisudG9kby1saXN0IGxp
IC5lZGl0IHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisudG9kby1saXN0IGxpLmVkaXRpbmc6
bGFzdC1jaGlsZCB7CisgICAgbWFyZ2luLWJvdHRvbTogLTFweDsKK30KKworLmZvb3RlciB7Cisg
ICAgY29sb3I6ICM3Nzc7CisgICAgcGFkZGluZzogMTBweCAxNXB4OworICAgIGhlaWdodDogMjBw
eDsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNl
NmU2ZTY7Cit9CisKKy5mb290ZXI6YmVmb3JlIHsKKyAgICBjb250ZW50OiAnJzsKKyAgICBwb3Np
dGlvbjogYWJzb2x1dGU7CisgICAgcmlnaHQ6IDA7CisgICAgYm90dG9tOiAwOworICAgIGxlZnQ6
IDA7CisgICAgaGVpZ2h0OiA1MHB4OworICAgIG92ZXJmbG93OiBoaWRkZW47CisgICAgYm94LXNo
YWRvdzogMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwKKyAgICAgICAgICAgICAgICAwIDhw
eCAwIC0zcHggI2Y2ZjZmNiwKKyAgICAgICAgICAgICAgICAwIDlweCAxcHggLTNweCByZ2JhKDAs
IDAsIDAsIDAuMiksCisgICAgICAgICAgICAgICAgMCAxNnB4IDAgLTZweCAjZjZmNmY2LAorICAg
ICAgICAgICAgICAgIDAgMTdweCAycHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMik7Cit9CisKKy50
b2RvLWNvdW50IHsKKyAgICBmbG9hdDogbGVmdDsKKyAgICB0ZXh0LWFsaWduOiBsZWZ0OworfQor
CisudG9kby1jb3VudCBzdHJvbmcgeworICAgIGZvbnQtd2VpZ2h0OiAzMDA7Cit9CisKKy5maWx0
ZXJzIHsKKyAgICBtYXJnaW46IDA7CisgICAgcGFkZGluZzogMDsKKyAgICBsaXN0LXN0eWxlOiBu
b25lOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICByaWdodDogMDsKKyAgICBsZWZ0OiAw
OworfQorCisuZmlsdGVycyBsaSB7CisgICAgZGlzcGxheTogaW5saW5lOworfQorCisuZmlsdGVy
cyBsaSBhIHsKKyAgICBjb2xvcjogaW5oZXJpdDsKKyAgICBtYXJnaW46IDNweDsKKyAgICBwYWRk
aW5nOiAzcHggN3B4OworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBib3JkZXI6IDFw
eCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgICBib3JkZXItcmFkaXVzOiAzcHg7Cit9CisKKy5maWx0
ZXJzIGxpIGE6aG92ZXIgeworICAgIGJvcmRlci1jb2xvcjogcmdiYSgxNzUsIDQ3LCA0NywgMC4x
KTsKK30KKworLmZpbHRlcnMgbGkgYS5zZWxlY3RlZCB7CisgICAgYm9yZGVyLWNvbG9yOiByZ2Jh
KDE3NSwgNDcsIDQ3LCAwLjIpOworfQorCisuY2xlYXItY29tcGxldGVkLAoraHRtbCAuY2xlYXIt
Y29tcGxldGVkOmFjdGl2ZSB7CisgICAgZmxvYXQ6IHJpZ2h0OworICAgIHBvc2l0aW9uOiByZWxh
dGl2ZTsKKyAgICBsaW5lLWhlaWdodDogMjBweDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7
CisgICAgY3Vyc29yOiBwb2ludGVyOworfQorCisuY2xlYXItY29tcGxldGVkOmhvdmVyIHsKKyAg
ICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworLmluZm8geworICAgIG1hcmdpbjog
NjVweCBhdXRvIDA7CisgICAgY29sb3I6ICNiZmJmYmY7CisgICAgZm9udC1zaXplOiAxMHB4Owor
ICAgIHRleHQtc2hhZG93OiAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKKyAgICB0
ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKKy5pbmZvIHAgeworICAgIGxpbmUtaGVpZ2h0OiAxOwor
fQorCisuaW5mbyBhIHsKKyAgICBjb2xvcjogaW5oZXJpdDsKKyAgICB0ZXh0LWRlY29yYXRpb246
IG5vbmU7CisgICAgZm9udC13ZWlnaHQ6IDQwMDsKK30KKworLmluZm8gYTpob3ZlciB7CisgICAg
dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy8qCisgICAgSGFjayB0byByZW1vdmUg
YmFja2dyb3VuZCBmcm9tIE1vYmlsZSBTYWZhcmkuCisgICAgQ2FuJ3QgdXNlIGl0IGdsb2JhbGx5
IHNpbmNlIGl0IGRlc3Ryb3lzIGNoZWNrYm94ZXMgaW4gRmlyZWZveAorKi8KK0BtZWRpYSBzY3Jl
ZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCkgeworICAgIC50b2dnbGUt
YWxsLAorICAgIC50b2RvLWxpc3QgbGkgLnRvZ2dsZSB7CisgICAgICAgIGJhY2tncm91bmQ6IG5v
bmU7CisgICAgfQorCisgICAgLnRvZG8tbGlzdCBsaSAudG9nZ2xlIHsKKyAgICAgICAgaGVpZ2h0
OiA0MHB4OworICAgIH0KK30KKworQG1lZGlhIChtYXgtd2lkdGg6IDQzMHB4KSB7CisgICAgLmZv
b3RlciB7CisgICAgICAgIGhlaWdodDogNTBweDsKKyAgICB9CisKKyAgICAuZmlsdGVycyB7Cisg
ICAgICAgIGJvdHRvbTogMTBweDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9y
ZWFjdC9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MgYi9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9y
ZWFjdC9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGQy
NWQzYzg0YWM2YzZhZWYyNmI5NjgzYTJiYzEwYzYxZjk2MGM4ZgotLS0gL2Rldi9udWxsCisrKyBi
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzcwpA
QCAtMCwwICsxLDE0MSBAQAoraHIgeworICAgIG1hcmdpbjogMjBweCAwOworICAgIGJvcmRlcjog
MDsKKyAgICBib3JkZXItdG9wOiAxcHggZGFzaGVkICNjNWM1YzU7CisgICAgYm9yZGVyLWJvdHRv
bTogMXB4IGRhc2hlZCAjZjdmN2Y3OworfQorCisubGVhcm4gYSB7CisgICAgZm9udC13ZWlnaHQ6
IG5vcm1hbDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgY29sb3I6ICNiODNmNDU7
Cit9CisKKy5sZWFybiBhOmhvdmVyIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsK
KyAgICBjb2xvcjogIzc4N2U3ZTsKK30KKworLmxlYXJuIGgzLAorLmxlYXJuIGg0LAorLmxlYXJu
IGg1IHsKKyAgICBtYXJnaW46IDEwcHggMDsKKyAgICBmb250LXdlaWdodDogNTAwOworICAgIGxp
bmUtaGVpZ2h0OiAxLjI7CisgICAgY29sb3I6ICMwMDA7Cit9CisKKy5sZWFybiBoMyB7CisgICAg
Zm9udC1zaXplOiAyNHB4OworfQorCisubGVhcm4gaDQgeworICAgIGZvbnQtc2l6ZTogMThweDsK
K30KKworLmxlYXJuIGg1IHsKKyAgICBtYXJnaW4tYm90dG9tOiAwOworICAgIGZvbnQtc2l6ZTog
MTRweDsKK30KKworLmxlYXJuIHVsIHsKKyAgICBwYWRkaW5nOiAwOworICAgIG1hcmdpbjogMCAw
IDMwcHggMjVweDsKK30KKworLmxlYXJuIGxpIHsKKyAgICBsaW5lLWhlaWdodDogMjBweDsKK30K
KworLmxlYXJuIHAgeworICAgIGZvbnQtc2l6ZTogMTVweDsKKyAgICBmb250LXdlaWdodDogMzAw
OworICAgIGxpbmUtaGVpZ2h0OiAxLjM7CisgICAgbWFyZ2luLXRvcDogMDsKKyAgICBtYXJnaW4t
Ym90dG9tOiAwOworfQorCisjaXNzdWUtY291bnQgeworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisK
Ky5xdW90ZSB7CisgICAgYm9yZGVyOiBub25lOworICAgIG1hcmdpbjogMjBweCAwIDYwcHggMDsK
K30KKworLnF1b3RlIHAgeworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworLnF1b3RlIHA6
YmVmb3JlIHsKKyAgICBjb250ZW50OiAn4oCcJzsKKyAgICBmb250LXNpemU6IDUwcHg7CisgICAg
b3BhY2l0eTogLjE1OworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IC0yMHB4Owor
ICAgIGxlZnQ6IDNweDsKK30KKworLnF1b3RlIHA6YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICfigJ0n
OworICAgIGZvbnQtc2l6ZTogNTBweDsKKyAgICBvcGFjaXR5OiAuMTU7CisgICAgcG9zaXRpb246
IGFic29sdXRlOworICAgIGJvdHRvbTogLTQycHg7CisgICAgcmlnaHQ6IDNweDsKK30KKworLnF1
b3RlIGZvb3RlciB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIGJvdHRvbTogLTQwcHg7
CisgICAgcmlnaHQ6IDA7Cit9CisKKy5xdW90ZSBmb290ZXIgaW1nIHsKKyAgICBib3JkZXItcmFk
aXVzOiAzcHg7Cit9CisKKy5xdW90ZSBmb290ZXIgYSB7CisgICAgbWFyZ2luLWxlZnQ6IDVweDsK
KyAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworfQorCisuc3BlZWNoLWJ1YmJsZSB7CisgICAg
cG9zaXRpb246IHJlbGF0aXZlOworICAgIHBhZGRpbmc6IDEwcHg7CisgICAgYmFja2dyb3VuZDog
cmdiYSgwLCAwLCAwLCAuMDQpOworICAgIGJvcmRlci1yYWRpdXM6IDVweDsKK30KKworLnNwZWVj
aC1idWJibGU6YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICcnOworICAgIHBvc2l0aW9uOiBhYnNvbHV0
ZTsKKyAgICB0b3A6IDEwMCU7CisgICAgcmlnaHQ6IDMwcHg7CisgICAgYm9yZGVyOiAxM3B4IHNv
bGlkIHRyYW5zcGFyZW50OworICAgIGJvcmRlci10b3AtY29sb3I6IHJnYmEoMCwgMCwgMCwgLjA0
KTsKK30KKworLmxlYXJuLWJhciA+IC5sZWFybiB7CisgICAgcG9zaXRpb246IGFic29sdXRlOwor
ICAgIHdpZHRoOiAyNzJweDsKKyAgICB0b3A6IDhweDsKKyAgICBsZWZ0OiAtMzAwcHg7CisgICAg
cGFkZGluZzogMTBweDsKKyAgICBib3JkZXItcmFkaXVzOiA1cHg7CisgICAgYmFja2dyb3VuZC1j
b2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAuNik7CisgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTog
bGVmdDsKKyAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiA1MDBtczsKK30KKworQG1lZGlhIChtaW4t
d2lkdGg6IDg5OXB4KSB7CisgICAgLmxlYXJuLWJhciB7CisgICAgICAgIHdpZHRoOiBhdXRvOwor
ICAgICAgICBwYWRkaW5nLWxlZnQ6IDMwMHB4OworICAgIH0KKworICAgIC5sZWFybi1iYXIgPiAu
bGVhcm4geworICAgICAgICBsZWZ0OiA4cHg7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuanMgYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li44MWUwMDZiYzUwMmRkYzRjNzRmNDdiZDEzYTgzOTIyNzdmODMwZGI4Ci0tLSAvZGV2L251bGwK
KysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2Uu
anMKQEAgLTAsMCArMSwyNDkgQEAKKy8qIGdsb2JhbCBfICovCisoZnVuY3Rpb24gKCkgeworICAg
ICd1c2Ugc3RyaWN0JzsKKworICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi8KKyAgICAvLyBV
bmRlcnNjb3JlJ3MgVGVtcGxhdGUgTW9kdWxlCisgICAgLy8gQ291cnRlc3kgb2YgdW5kZXJzY29y
ZWpzLm9yZworICAgIHZhciBfID0gKGZ1bmN0aW9uIChfKSB7CisgICAgICAgIF8uZGVmYXVsdHMg
PSBmdW5jdGlvbiAob2JqZWN0KSB7CisgICAgICAgICAgICBpZiAoIW9iamVjdCkgeworICAgICAg
ICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3Ig
KHZhciBhcmdzSW5kZXggPSAxLCBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsgYXJnc0lu
ZGV4IDwgYXJnc0xlbmd0aDsgYXJnc0luZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgaXRl
cmFibGUgPSBhcmd1bWVudHNbYXJnc0luZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlcmFi
bGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGl0ZXJhYmxlKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0W2tleV0gPT0gbnVsbCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFtrZXldID0gaXRlcmFibGVba2V5XTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAg
IH0KKworICAgICAgICAvLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRl
bXBsYXRlIGRlbGltaXRlcnMsIGNoYW5nZSB0aGUKKyAgICAgICAgLy8gZm9sbG93aW5nIHRlbXBs
YXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLgorICAgICAgICBfLnRl
bXBsYXRlU2V0dGluZ3MgPSB7CisgICAgICAgICAgICBldmFsdWF0ZSAgICA6IC88JShbXHNcU10r
PyklPi9nLAorICAgICAgICAgICAgaW50ZXJwb2xhdGUgOiAvPCU9KFtcc1xTXSs/KSU+L2csCisg
ICAgICAgICAgICBlc2NhcGUgICAgICA6IC88JS0oW1xzXFNdKz8pJT4vZworICAgICAgICB9Owor
CisgICAgICAgIC8vIFdoZW4gY3VzdG9taXppbmcgYHRlbXBsYXRlU2V0dGluZ3NgLCBpZiB5b3Ug
ZG9uJ3Qgd2FudCB0byBkZWZpbmUgYW4KKyAgICAgICAgLy8gaW50ZXJwb2xhdGlvbiwgZXZhbHVh
dGlvbiBvciBlc2NhcGluZyByZWdleCwgd2UgbmVlZCBvbmUgdGhhdCBpcworICAgICAgICAvLyBn
dWFyYW50ZWVkIG5vdCB0byBtYXRjaC4KKyAgICAgICAgdmFyIG5vTWF0Y2ggPSAvKC4pXi87CisK
KyAgICAgICAgLy8gQ2VydGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgZXNjYXBlZCBzbyB0aGF0
IHRoZXkgY2FuIGJlIHB1dCBpbnRvIGEKKyAgICAgICAgLy8gc3RyaW5nIGxpdGVyYWwuCisgICAg
ICAgIHZhciBlc2NhcGVzID0geworICAgICAgICAgICAgIiciOiAgICAgICInIiwKKyAgICAgICAg
ICAgICdcXCc6ICAgICAnXFwnLAorICAgICAgICAgICAgJ1xyJzogICAgICdyJywKKyAgICAgICAg
ICAgICdcbic6ICAgICAnbicsCisgICAgICAgICAgICAnXHQnOiAgICAgJ3QnLAorICAgICAgICAg
ICAgJ1x1MjAyOCc6ICd1MjAyOCcsCisgICAgICAgICAgICAnXHUyMDI5JzogJ3UyMDI5JworICAg
ICAgICB9OworCisgICAgICAgIHZhciBlc2NhcGVyID0gL1xcfCd8XHJ8XG58XHR8XHUyMDI4fFx1
MjAyOS9nOworCisgICAgICAgIC8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2ltaWxh
ciB0byBKb2huIFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIC8vIFVuZGVyc2NvcmUg
dGVtcGxhdGluZyBoYW5kbGVzIGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBwcmVzZXJ2ZXMgd2hpdGVz
cGFjZSwKKyAgICAgICAgLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4gaW50
ZXJwb2xhdGVkIGNvZGUuCisgICAgICAgIF8udGVtcGxhdGUgPSBmdW5jdGlvbih0ZXh0LCBkYXRh
LCBzZXR0aW5ncykgeworICAgICAgICAgICAgdmFyIHJlbmRlcjsKKyAgICAgICAgICAgIHNldHRp
bmdzID0gXy5kZWZhdWx0cyh7fSwgc2V0dGluZ3MsIF8udGVtcGxhdGVTZXR0aW5ncyk7CisKKyAg
ICAgICAgICAgIC8vIENvbWJpbmUgZGVsaW1pdGVycyBpbnRvIG9uZSByZWd1bGFyIGV4cHJlc3Np
b24gdmlhIGFsdGVybmF0aW9uLgorICAgICAgICAgICAgdmFyIG1hdGNoZXIgPSBuZXcgUmVnRXhw
KFsKKyAgICAgICAgICAgICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNvdXJjZSwK
KyAgICAgICAgICAgICAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNl
LAorICAgICAgICAgICAgICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNoKS5zb3VyY2UK
KyAgICAgICAgICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTsKKworICAgICAgICAgICAgLy8g
Q29tcGlsZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBw
cm9wcmlhdGVseS4KKyAgICAgICAgICAgIHZhciBpbmRleCA9IDA7CisgICAgICAgICAgICB2YXIg
c291cmNlID0gIl9fcCs9JyI7CisgICAgICAgICAgICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVu
Y3Rpb24obWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHsKKyAg
ICAgICAgICAgICAgICBzb3VyY2UgKz0gdGV4dC5zbGljZShpbmRleCwgb2Zmc2V0KQorICAgICAg
ICAgICAgICAgICAgICAucmVwbGFjZShlc2NhcGVyLCBmdW5jdGlvbihtYXRjaCkgeyByZXR1cm4g
J1xcJyArIGVzY2FwZXNbbWF0Y2hdOyB9KTsKKworICAgICAgICAgICAgICAgIGlmIChlc2NhcGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9ICInK1xuKChfX3Q9KCIgKyBlc2NhcGUg
KyAiKSk9PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXG4nIjsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKGludGVycG9sYXRlKSB7CisgICAgICAgICAgICAgICAgICAgIHNv
dXJjZSArPSAiJytcbigoX190PSgiICsgaW50ZXJwb2xhdGUgKyAiKSk9PW51bGw/Jyc6X190KStc
biciOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZXZhbHVhdGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9ICInO1xuIiArIGV2YWx1YXRlICsgIlxuX19w
Kz0nIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5kZXggPSBvZmZzZXQg
KyBtYXRjaC5sZW5ndGg7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOworICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICBzb3VyY2UgKz0gIic7XG4iOworCisgICAgICAgICAgICAvLyBJ
ZiBhIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxvY2Fs
IHNjb3BlLgorICAgICAgICAgICAgaWYgKCFzZXR0aW5ncy52YXJpYWJsZSkgc291cmNlID0gJ3dp
dGgob2JqfHx7fSl7XG4nICsgc291cmNlICsgJ31cbic7CisKKyAgICAgICAgICAgIHNvdXJjZSA9
ICJ2YXIgX190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4sIiArCisgICAgICAgICAg
ICAgICAgInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMsJycpO307XG4i
ICsKKyAgICAgICAgICAgICAgICBzb3VyY2UgKyAicmV0dXJuIF9fcDtcbiI7CisKKyAgICAgICAg
ICAgIHRyeSB7CisgICAgICAgICAgICAgICAgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdz
LnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7CisgICAgICAgICAgICB9IGNhdGNoIChl
KSB7CisgICAgICAgICAgICAgICAgZS5zb3VyY2UgPSBzb3VyY2U7CisgICAgICAgICAgICAgICAg
dGhyb3cgZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGRhdGEpIHJldHVybiBy
ZW5kZXIoZGF0YSwgXyk7CisgICAgICAgICAgICB2YXIgdGVtcGxhdGUgPSBmdW5jdGlvbihkYXRh
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlci5jYWxsKHRoaXMsIGRhdGEsIF8pOwor
ICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgZnVu
Y3Rpb24gc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLgorICAgICAg
ICAgICAgdGVtcGxhdGUuc291cmNlID0gJ2Z1bmN0aW9uKCcgKyAoc2V0dGluZ3MudmFyaWFibGUg
fHwgJ29iaicpICsgJyl7XG4nICsgc291cmNlICsgJ30nOworCisgICAgICAgICAgICByZXR1cm4g
dGVtcGxhdGU7CisgICAgICAgIH07CisKKyAgICAgICAgcmV0dXJuIF87CisgICAgfSkoe30pOwor
CisgICAgaWYgKGxvY2F0aW9uLmhvc3RuYW1lID09PSAndG9kb212Yy5jb20nKSB7CisgICAgICAg
IChmdW5jdGlvbihpLHMsbyxnLHIsYSxtKXtpWydHb29nbGVBbmFseXRpY3NPYmplY3QnXT1yO2lb
cl09aVtyXXx8ZnVuY3Rpb24oKXsKKyAgICAgICAgKGlbcl0ucT1pW3JdLnF8fFtdKS5wdXNoKGFy
Z3VtZW50cyl9LGlbcl0ubD0xKm5ldyBEYXRlKCk7YT1zLmNyZWF0ZUVsZW1lbnQobyksCisgICAg
ICAgIG09cy5nZXRFbGVtZW50c0J5VGFnTmFtZShvKVswXTthLmFzeW5jPTE7YS5zcmM9ZzttLnBh
cmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbSkKKyAgICAgICAgfSkod2luZG93LGRvY3VtZW50LCdz
Y3JpcHQnLCdodHRwczovL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9hbmFseXRpY3MuanMnLCdn
YScpOworICAgICAgICBnYSgnY3JlYXRlJywgJ1VBLTMxMDgxMDYyLTEnLCAnYXV0bycpOworICAg
ICAgICBnYSgnc2VuZCcsICdwYWdldmlldycpOworICAgIH0KKyAgICAvKiBqc2hpbnQgaWdub3Jl
OmVuZCAqLworCisgICAgZnVuY3Rpb24gcmVkaXJlY3QoKSB7CisgICAgICAgIGlmIChsb2NhdGlv
bi5ob3N0bmFtZSA9PT0gJ3Rhc3RlanMuZ2l0aHViLmlvJykgeworICAgICAgICAgICAgbG9jYXRp
b24uaHJlZiA9IGxvY2F0aW9uLmhyZWYucmVwbGFjZSgndGFzdGVqcy5naXRodWIuaW8vdG9kb212
YycsICd0b2RvbXZjLmNvbScpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gZmlu
ZFJvb3QoKSB7CisgICAgICAgIHZhciBiYXNlID0gbG9jYXRpb24uaHJlZi5pbmRleE9mKCdleGFt
cGxlcy8nKTsKKyAgICAgICAgcmV0dXJuIGxvY2F0aW9uLmhyZWYuc3Vic3RyKDAsIGJhc2UpOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIGdldEZpbGUoZmlsZSwgY2FsbGJhY2spIHsKKyAgICAgICAg
aWYgKCFsb2NhdGlvbi5ob3N0KSB7CisgICAgICAgICAgICByZXR1cm4gY29uc29sZS5pbmZvKCdN
aXNzIHRoZSBpbmZvIGJhcj8gUnVuIFRvZG9NVkMgZnJvbSBhIHNlcnZlciB0byBhdm9pZCBhIGNy
b3NzLW9yaWdpbiBlcnJvci4nKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciB4aHIgPSBuZXcg
WE1MSHR0cFJlcXVlc3QoKTsKKworICAgICAgICB4aHIub3BlbignR0VUJywgZmluZFJvb3QoKSAr
IGZpbGUsIHRydWUpOworICAgICAgICB4aHIuc2VuZCgpOworCisgICAgICAgIHhoci5vbmxvYWQg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYmIGNh
bGxiYWNrKSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2soeGhyLnJlc3BvbnNlVGV4dCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gTGVhcm4obGVh
cm5KU09OLCBjb25maWcpIHsKKyAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIExlYXJuKSkg
eworICAgICAgICAgICAgcmV0dXJuIG5ldyBMZWFybihsZWFybkpTT04sIGNvbmZpZyk7CisgICAg
ICAgIH0KKworICAgICAgICB2YXIgdGVtcGxhdGUsIGZyYW1ld29yazsKKworICAgICAgICBpZiAo
dHlwZW9mIGxlYXJuSlNPTiAhPT0gJ29iamVjdCcpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICAgICAgbGVhcm5KU09OID0gSlNPTi5wYXJzZShsZWFybkpTT04pOworICAgICAgICAg
ICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25maWcpIHsKKyAgICAgICAgICAgIHRlbXBsYXRl
ID0gY29uZmlnLnRlbXBsYXRlOworICAgICAgICAgICAgZnJhbWV3b3JrID0gY29uZmlnLmZyYW1l
d29yazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdGVtcGxhdGUgJiYgbGVhcm5KU09OLnRl
bXBsYXRlcykgeworICAgICAgICAgICAgdGVtcGxhdGUgPSBsZWFybkpTT04udGVtcGxhdGVzLnRv
ZG9tdmM7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWZyYW1ld29yayAmJiBkb2N1bWVudC5x
dWVyeVNlbGVjdG9yKCdbZGF0YS1mcmFtZXdvcmtdJykpIHsKKyAgICAgICAgICAgIGZyYW1ld29y
ayA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWZyYW1ld29ya10nKS5kYXRhc2V0LmZy
YW1ld29yazsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMudGVtcGxhdGUgPSB0ZW1wbGF0ZTsK
KworICAgICAgICBpZiAobGVhcm5KU09OLmJhY2tlbmQpIHsKKyAgICAgICAgICAgIHRoaXMuZnJh
bWV3b3JrSlNPTiA9IGxlYXJuSlNPTi5iYWNrZW5kOworICAgICAgICAgICAgdGhpcy5mcmFtZXdv
cmtKU09OLmlzc3VlTGFiZWwgPSBmcmFtZXdvcms7CisgICAgICAgICAgICB0aGlzLmFwcGVuZCh7
CisgICAgICAgICAgICAgICAgYmFja2VuZDogdHJ1ZQorICAgICAgICAgICAgfSk7CisgICAgICAg
IH0gZWxzZSBpZiAobGVhcm5KU09OW2ZyYW1ld29ya10pIHsKKyAgICAgICAgICAgIHRoaXMuZnJh
bWV3b3JrSlNPTiA9IGxlYXJuSlNPTltmcmFtZXdvcmtdOworICAgICAgICAgICAgdGhpcy5mcmFt
ZXdvcmtKU09OLmlzc3VlTGFiZWwgPSBmcmFtZXdvcms7CisgICAgICAgICAgICB0aGlzLmFwcGVu
ZCgpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5mZXRjaElzc3VlQ291bnQoKTsKKyAgICB9
CisKKyAgICBMZWFybi5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKG9wdHMpIHsKKyAgICAg
ICAgdmFyIGFzaWRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYXNpZGUnKTsKKyAgICAgICAg
YXNpZGUuaW5uZXJIVE1MID0gXy50ZW1wbGF0ZSh0aGlzLnRlbXBsYXRlLCB0aGlzLmZyYW1ld29y
a0pTT04pOworICAgICAgICBhc2lkZS5jbGFzc05hbWUgPSAnbGVhcm4nOworCisgICAgICAgIGlm
IChvcHRzICYmIG9wdHMuYmFja2VuZCkgeworICAgICAgICAgICAgLy8gUmVtb3ZlIGRlbW8gbGlu
aworICAgICAgICAgICAgdmFyIHNvdXJjZUxpbmtzID0gYXNpZGUucXVlcnlTZWxlY3RvcignLnNv
dXJjZS1saW5rcycpOworICAgICAgICAgICAgdmFyIGhlYWRpbmcgPSBzb3VyY2VMaW5rcy5maXJz
dEVsZW1lbnRDaGlsZDsKKyAgICAgICAgICAgIHZhciBzb3VyY2VMaW5rID0gc291cmNlTGlua3Mu
bGFzdEVsZW1lbnRDaGlsZDsKKyAgICAgICAgICAgIC8vIENvcnJlY3QgbGluayBwYXRoCisgICAg
ICAgICAgICB2YXIgaHJlZiA9IHNvdXJjZUxpbmsuZ2V0QXR0cmlidXRlKCdocmVmJyk7CisgICAg
ICAgICAgICBzb3VyY2VMaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYuc3Vic3RyKGhyZWYu
bGFzdEluZGV4T2YoJ2h0dHAnKSkpOworICAgICAgICAgICAgc291cmNlTGlua3MuaW5uZXJIVE1M
ID0gaGVhZGluZy5vdXRlckhUTUwgKyBzb3VyY2VMaW5rLm91dGVySFRNTDsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vIExvY2FsaXplIGRlbW8gbGlua3MKKyAgICAgICAgICAgIHZh
ciBkZW1vTGlua3MgPSBhc2lkZS5xdWVyeVNlbGVjdG9yQWxsKCcuZGVtby1saW5rJyk7CisgICAg
ICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGRlbW9MaW5rcywgZnVuY3Rpb24g
KGRlbW9MaW5rKSB7CisgICAgICAgICAgICAgICAgaWYgKGRlbW9MaW5rLmdldEF0dHJpYnV0ZSgn
aHJlZicpLnN1YnN0cigwLCA0KSAhPT0gJ2h0dHAnKSB7CisgICAgICAgICAgICAgICAgICAgIGRl
bW9MaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIGZpbmRSb290KCkgKyBkZW1vTGluay5nZXRBdHRy
aWJ1dGUoJ2hyZWYnKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0KKworICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTmFtZSA9IChkb2N1bWVudC5ib2R5
LmNsYXNzTmFtZSArICcgbGVhcm4tYmFyJykudHJpbSgpOworICAgICAgICBkb2N1bWVudC5ib2R5
Lmluc2VydEFkamFjZW50SFRNTCgnYWZ0ZXJCZWdpbicsIGFzaWRlLm91dGVySFRNTCk7CisgICAg
fTsKKworICAgIExlYXJuLnByb3RvdHlwZS5mZXRjaElzc3VlQ291bnQgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHZhciBpc3N1ZUxpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaXNzdWUt
Y291bnQtbGluaycpOworICAgICAgICBpZiAoaXNzdWVMaW5rKSB7CisgICAgICAgICAgICB2YXIg
dXJsID0gaXNzdWVMaW5rLmhyZWYucmVwbGFjZSgnaHR0cHM6Ly9naXRodWIuY29tJywgJ2h0dHBz
Oi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MnKTsKKyAgICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1M
SHR0cFJlcXVlc3QoKTsKKyAgICAgICAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwsIHRydWUpOwor
ICAgICAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICAgICAg
dmFyIHBhcnNlZFJlc3BvbnNlID0gSlNPTi5wYXJzZShlLnRhcmdldC5yZXNwb25zZVRleHQpOwor
ICAgICAgICAgICAgICAgIGlmIChwYXJzZWRSZXNwb25zZSBpbnN0YW5jZW9mIEFycmF5KSB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IHBhcnNlZFJlc3BvbnNlLmxlbmd0aDsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ICE9PSAwKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpc3N1ZUxpbmsuaW5uZXJIVE1MID0gJ1RoaXMgYXBwIGhhcyAnICsgY291bnQgKyAnIG9w
ZW4gaXNzdWVzJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdpc3N1ZS1jb3VudCcpLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJzsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAg
ICB4aHIuc2VuZCgpOworICAgICAgICB9CisgICAgfTsKKworICAgIHJlZGlyZWN0KCk7CisgICAg
Z2V0RmlsZSgnbGVhcm4uanNvbicsIExlYXJuKTsKK30pKCk7CmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9yZWFjdC9ucG0tc2hyaW5rd3JhcC5qc29uIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvbnBtLXNo
cmlua3dyYXAuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MmVlNzgyMDc1OWVhZGM2NmRjYzRjODcyOWE5ZDhh
MTg3YTc0MGE1Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvbnBtLXNocmlu
a3dyYXAuanNvbgpAQCAtMCwwICsxLDEwNCBAQAoreworICAiZGVwZW5kZW5jaWVzIjogeworICAg
ICJhc2FwIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjUiLAorICAgICAgImZyb20iOiAiYXNh
cEA+PTIuMC4zIDwyLjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvYXNhcC8tL2FzYXAtMi4wLjUudGd6IgorICAgIH0sCisgICAgImNsYXNzbmFtZXMi
OiB7CisgICAgICAidmVyc2lvbiI6ICIyLjIuNSIsCisgICAgICAiZnJvbSI6ICJjbGFzc25hbWVz
QD49Mi4yLjUgPDMuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5w
bWpzLm9yZy9jbGFzc25hbWVzLy0vY2xhc3NuYW1lcy0yLjIuNS50Z3oiCisgICAgfSwKKyAgICAi
Y29yZS1qcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMi43IiwKKyAgICAgICJmcm9tIjogImNv
cmUtanNAPj0xLjAuMCA8Mi4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0
cnkubnBtanMub3JnL2NvcmUtanMvLS9jb3JlLWpzLTEuMi43LnRneiIKKyAgICB9LAorICAgICJk
aXJlY3RvciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMi44IiwKKyAgICAgICJmcm9tIjogImRp
cmVjdG9yQD49MS4yLjggPDIuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9kaXJlY3Rvci8tL2RpcmVjdG9yLTEuMi44LnRneiIKKyAgICB9LAorICAg
ICJlbmNvZGluZyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMS4xMiIsCisgICAgICAiZnJvbSI6
ICJlbmNvZGluZ0A+PTAuMS4xMSA8MC4yLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL2VuY29kaW5nLy0vZW5jb2RpbmctMC4xLjEyLnRneiIKKyAgICB9
LAorICAgICJmYmpzIjogeworICAgICAgInZlcnNpb24iOiAiMC44LjYiLAorICAgICAgImZyb20i
OiAiZmJqc0A+PTAuOC40IDwwLjkuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdp
c3RyeS5ucG1qcy5vcmcvZmJqcy8tL2ZianMtMC44LjYudGd6IgorICAgIH0sCisgICAgImljb252
LWxpdGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjQuMTUiLAorICAgICAgImZyb20iOiAiaWNv
bnYtbGl0ZUA+PTAuNC4xMyA8MC41LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL2ljb252LWxpdGUvLS9pY29udi1saXRlLTAuNC4xNS50Z3oiCisgICAg
fSwKKyAgICAiaXMtc3RyZWFtIjogeworICAgICAgInZlcnNpb24iOiAiMS4xLjAiLAorICAgICAg
ImZyb20iOiAiaXMtc3RyZWFtQD49MS4wLjEgPDIuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1zdHJlYW0vLS9pcy1zdHJlYW0tMS4xLjAudGd6
IgorICAgIH0sCisgICAgImlzb21vcnBoaWMtZmV0Y2giOiB7CisgICAgICAidmVyc2lvbiI6ICIy
LjIuMSIsCisgICAgICAiZnJvbSI6ICJpc29tb3JwaGljLWZldGNoQD49Mi4xLjEgPDMuMC4wIiwK
KyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pc29tb3JwaGlj
LWZldGNoLy0vaXNvbW9ycGhpYy1mZXRjaC0yLjIuMS50Z3oiCisgICAgfSwKKyAgICAianMtdG9r
ZW5zIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAorICAgICAgImZyb20iOiAianMtdG9r
ZW5zQD49Mi4wLjAgPDMuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy9qcy10b2tlbnMvLS9qcy10b2tlbnMtMi4wLjAudGd6IgorICAgIH0sCisgICAg
Imxvb3NlLWVudmlmeSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMy4wIiwKKyAgICAgICJmcm9t
IjogImxvb3NlLWVudmlmeUA+PTEuMS4wIDwyLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9vc2UtZW52aWZ5Ly0vbG9vc2UtZW52aWZ5LTEuMy4w
LnRneiIKKyAgICB9LAorICAgICJub2RlLWZldGNoIjogeworICAgICAgInZlcnNpb24iOiAiMS42
LjMiLAorICAgICAgImZyb20iOiAibm9kZS1mZXRjaEA+PTEuMC4xIDwyLjAuMCIsCisgICAgICAi
cmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbm9kZS1mZXRjaC8tL25vZGUt
ZmV0Y2gtMS42LjMudGd6IgorICAgIH0sCisgICAgIm9iamVjdC1hc3NpZ24iOiB7CisgICAgICAi
dmVyc2lvbiI6ICI0LjEuMCIsCisgICAgICAiZnJvbSI6ICJvYmplY3QtYXNzaWduQD49NC4xLjAg
PDUuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9v
YmplY3QtYXNzaWduLy0vb2JqZWN0LWFzc2lnbi00LjEuMC50Z3oiCisgICAgfSwKKyAgICAicHJv
bWlzZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMS4xIiwKKyAgICAgICJmcm9tIjogInByb21p
c2VAPj03LjEuMSA8OC4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL3Byb21pc2UvLS9wcm9taXNlLTcuMS4xLnRneiIKKyAgICB9LAorICAgICJyZWFj
dCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjE1LjQuMCIsCisgICAgICAiZnJvbSI6ICJyZWFjdEAx
NS40LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jl
YWN0Ly0vcmVhY3QtMTUuNC4wLnRneiIKKyAgICB9LAorICAgICJyZWFjdC1kb20iOiB7CisgICAg
ICAidmVyc2lvbiI6ICIxNS40LjAiLAorICAgICAgImZyb20iOiAicmVhY3QtZG9tQDE1LjQuMCIs
CisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVhY3QtZG9t
Ly0vcmVhY3QtZG9tLTE1LjQuMC50Z3oiCisgICAgfSwKKyAgICAidG9kb212Yy1hcHAtY3NzIjog
eworICAgICAgInZlcnNpb24iOiAiMi4wLjYiLAorICAgICAgImZyb20iOiAidG9kb212Yy1hcHAt
Y3NzQD49Mi4wLjAgPDMuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy90b2RvbXZjLWFwcC1jc3MvLS90b2RvbXZjLWFwcC1jc3MtMi4wLjYudGd6Igor
ICAgIH0sCisgICAgInRvZG9tdmMtY29tbW9uIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjMi
LAorICAgICAgImZyb20iOiAidG9kb212Yy1jb21tb25APj0xLjAuMiA8Mi4wLjAiLAorICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RvZG9tdmMtY29tbW9uLy0v
dG9kb212Yy1jb21tb24tMS4wLjMudGd6IgorICAgIH0sCisgICAgInVhLXBhcnNlci1qcyI6IHsK
KyAgICAgICJ2ZXJzaW9uIjogIjAuNy4xMiIsCisgICAgICAiZnJvbSI6ICJ1YS1wYXJzZXItanNA
Pj0wLjcuOSA8MC44LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL3VhLXBhcnNlci1qcy8tL3VhLXBhcnNlci1qcy0wLjcuMTIudGd6IgorICAgIH0sCisg
ICAgIndoYXR3Zy1mZXRjaCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKKyAgICAgICJm
cm9tIjogIndoYXR3Zy1mZXRjaEA+PTAuMTAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2hhdHdnLWZldGNoLy0vd2hhdHdnLWZldGNoLTIuMC4xLnRn
eiIKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L3BhY2thZ2Uu
anNvbiBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L3BhY2thZ2UuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDc1
NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZTZmM2Q2
ZjI0MDQ5YWVhNWM5NDBjNzcwNTU2M2YzZjA5NjY1YzM2Ci0tLSAvZGV2L251bGwKKysrIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvcmVhY3QvcGFja2FnZS5qc29uCkBAIC0wLDAgKzEsMjAgQEAKK3sKKyAgInByaXZh
dGUiOiB0cnVlLAorICAic2NyaXB0cyI6IHsKKyAgICAibWFrZSI6ICJiYWJlbCAtLXBsdWdpbnMg
dHJhbnNmb3JtLXJlYWN0LWpzeCBqcy9hcHAuanN4IHwgdWdsaWZ5anMgLW8gYnVpbGQubWluLmpz
IgorICB9LAorICAiZGVwZW5kZW5jaWVzIjogeworICAgICJjbGFzc25hbWVzIjogIl4yLjIuNSIs
CisgICAgImRpcmVjdG9yIjogIl4xLjIuOCIsCisgICAgInJlYWN0IjogIl4xNS40LjAiLAorICAg
ICJyZWFjdC1kb20iOiAiXjE1LjQuMCIsCisgICAgInRvZG9tdmMtYXBwLWNzcyI6ICJeMi4wLjAi
LAorICAgICJ0b2RvbXZjLWNvbW1vbiI6ICJeMS4wLjIiCisgIH0sCisgICJkZXZEZXBlbmRlbmNp
ZXMiOiB7CisgICAgImJhYmVsLWNsaSI6ICJeNi4xMC4xIiwKKyAgICAiYmFiZWwtcGx1Z2luLXRy
YW5zZm9ybS1yZWFjdC1qc3giOiAiXjYuOC4wIiwKKyAgICAiYmFiZWwtcGx1Z2luLXVnbGlmeSI6
ICJeMS4wLjIiLAorICAgICJ1Z2xpZnktanMiOiAiXjIuNi40IgorICB9Cit9CmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9yZWFjdC95YXJuLmxvY2sgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC95YXJuLmxv
Y2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZTUyZGZjMjVmOTVhMmU0NTU4NmQ3NjY4MzRjZjU2ZWE5YzYyYTkyYQot
LS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L3lhcm4ubG9jawpAQCAtMCwwICsx
LDE0MDcgQEAKKyMgVEhJUyBJUyBBTiBBVVRPR0VORVJBVEVEIEZJTEUuIERPIE5PVCBFRElUIFRI
SVMgRklMRSBESVJFQ1RMWS4KKyMgeWFybiBsb2NrZmlsZSB2MQorYWJicmV2QDE6CisgIHZlcnNp
b24gIjEuMS4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9hYmJy
ZXYvLS9hYmJyZXYtMS4xLjAudGd6I2QwNTU0YzIyNTY2MzZlMmY1NmU3YzJlNWFkMTgzZjg1OTQy
OGQ4MWYiCisKK2FqdkBeNC45LjE6CisgIHZlcnNpb24gIjQuMTEuNyIKKyAgcmVzb2x2ZWQgImh0
dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYWp2Ly0vYWp2LTQuMTEuNy50Z3ojODY1NWE1ZDg2
ZDA4MjQ5ODVjYzQ3MWExZDkxM2ZiNjcyOWEwZWM0OCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGNv
ICJeNC42LjAiCisgICAganNvbi1zdGFibGUtc3RyaW5naWZ5ICJeMS4wLjEiCisKK2FsaWduLXRl
eHRAXjAuMS4xLCBhbGlnbi10ZXh0QF4wLjEuMzoKKyAgdmVyc2lvbiAiMC4xLjQiCisgIHJlc29s
dmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2FsaWduLXRleHQvLS9hbGlnbi10ZXh0
LTAuMS40LnRneiMwY2Q5MGE1NjEwOTNmMzVkMGE5OTI1NmMyMmI3MDY5NDMzZmFkMTE3IgorICBk
ZXBlbmRlbmNpZXM6CisgICAga2luZC1vZiAiXjMuMC4yIgorICAgIGxvbmdlc3QgIl4xLjAuMSIK
KyAgICByZXBlYXQtc3RyaW5nICJeMS41LjIiCisKK2Fuc2ktcmVnZXhAXjIuMC4wOgorICB2ZXJz
aW9uICIyLjEuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYW5z
aS1yZWdleC8tL2Fuc2ktcmVnZXgtMi4xLjEudGd6I2MzYjMzYWI1ZWUzNjBkODZlMGU2MjhmMDQ2
OGFlN2VmMjdkNjU0ZGYiCisKK2Fuc2ktc3R5bGVzQF4yLjIuMToKKyAgdmVyc2lvbiAiMi4yLjEi
CisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2Fuc2ktc3R5bGVzLy0v
YW5zaS1zdHlsZXMtMi4yLjEudGd6I2I0MzJkZDMzNThiNjM0Y2Y3NWUxZTQ2NjQzNjgyNDA1MzNj
MWRkYmUiCisKK2FueW1hdGNoQF4xLjMuMDoKKyAgdmVyc2lvbiAiMS4zLjAiCisgIHJlc29sdmVk
ICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2FueW1hdGNoLy0vYW55bWF0Y2gtMS4zLjAu
dGd6I2EzZTUyZmEzOTE2OGM4MjVmZjU3YjAyNDgxMjZjZTVhOGZmOTU1MDciCisgIGRlcGVuZGVu
Y2llczoKKyAgICBhcnJpZnkgIl4xLjAuMCIKKyAgICBtaWNyb21hdGNoICJeMi4xLjUiCisKK2Fw
cm9iYUBeMS4wLjM6CisgIHZlcnNpb24gIjEuMS4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdp
c3RyeS55YXJucGtnLmNvbS9hcHJvYmEvLS9hcHJvYmEtMS4xLjEudGd6Izk1ZDM2MDBmMDc3MTBh
YTBlOTI5OGM3MjZhZDVlY2YyZWFjYmFiYWIiCisKK2FyZS13ZS10aGVyZS15ZXRAfjEuMS4yOgor
ICB2ZXJzaW9uICIxLjEuNCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5j
b20vYXJlLXdlLXRoZXJlLXlldC8tL2FyZS13ZS10aGVyZS15ZXQtMS4xLjQudGd6I2JiNWRjYTM4
MmJiOTRmMDVlMTUxOTQzNzNkMTZmZDNiYTFjYTExMGQiCisgIGRlcGVuZGVuY2llczoKKyAgICBk
ZWxlZ2F0ZXMgIl4xLjAuMCIKKyAgICByZWFkYWJsZS1zdHJlYW0gIl4yLjAuNiIKKworYXJyLWRp
ZmZAXjIuMC4wOgorICB2ZXJzaW9uICIyLjAuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0
cnkueWFybnBrZy5jb20vYXJyLWRpZmYvLS9hcnItZGlmZi0yLjAuMC50Z3ojOGYzYjgyN2Y5NTVh
OGJkNjY5Njk3ZTRhNDI1NmFjM2NlYWUzNTZjZiIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGFyci1m
bGF0dGVuICJeMS4wLjEiCisKK2Fyci1mbGF0dGVuQF4xLjAuMToKKyAgdmVyc2lvbiAiMS4wLjMi
CisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2Fyci1mbGF0dGVuLy0v
YXJyLWZsYXR0ZW4tMS4wLjMudGd6I2EyNzRlZDg1YWMwODg0OWI2YmQ3ODQ3YzQ1ODA3NDVkYzUx
YWRmYjEiCisKK2FycmF5LXVuaXF1ZUBeMC4yLjE6CisgIHZlcnNpb24gIjAuMi4xIgorICByZXNv
bHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9hcnJheS11bmlxdWUvLS9hcnJheS11
bmlxdWUtMC4yLjEudGd6I2ExZDk3Y2NhZmNiYzI2MjVjYzcwZmFkY2ViMzZhNTBjNThiMDFhNTMi
CisKK2FycmlmeUBeMS4wLjA6CisgIHZlcnNpb24gIjEuMC4xIgorICByZXNvbHZlZCAiaHR0cHM6
Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9hcnJpZnkvLS9hcnJpZnktMS4wLjEudGd6Izg5ODUwOGRh
MjIyNmYzODBkZjkwNDcyODQ1Njg0OWMxNTAxYTRiMGQiCisKK2FzYXBAfjIuMC4zOgorICB2ZXJz
aW9uICIyLjAuNSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYXNh
cC8tL2FzYXAtMi4wLjUudGd6IzUyMjc2NWI1MGMzNTEwNDkwZTUyZDdkY2ZlMDg1ZWY5YmE5Njk1
OGYiCisKK2FzbjFAfjAuMi4zOgorICB2ZXJzaW9uICIwLjIuMyIKKyAgcmVzb2x2ZWQgImh0dHBz
Oi8vcmVnaXN0cnkueWFybnBrZy5jb20vYXNuMS8tL2FzbjEtMC4yLjMudGd6I2RhYzg3ODc3MTNj
OTk2Njg0OWZjODE4MDc3N2ViZTljMWRkZjNiODYiCisKK2Fzc2VydC1wbHVzQF4wLjIuMDoKKyAg
dmVyc2lvbiAiMC4yLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29t
L2Fzc2VydC1wbHVzLy0vYXNzZXJ0LXBsdXMtMC4yLjAudGd6I2Q3NGUxYjg3ZTdhZmZjMGRiOGFh
ZGI3MDIxZjNmZTQ4MTAxYWIyMzQiCisKK2Fzc2VydC1wbHVzQF4xLjAuMCwgYXNzZXJ0LXBsdXNA
MS4wLjA6CisgIHZlcnNpb24gIjEuMC4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55
YXJucGtnLmNvbS9hc3NlcnQtcGx1cy8tL2Fzc2VydC1wbHVzLTEuMC4wLnRneiNmMTJlMGYzYzVk
NzdiMGIxY2RkOTE0Njk0MmU0ZTk2YzFlNGRkNTI1IgorCithc3luYy1lYWNoQF4xLjAuMDoKKyAg
dmVyc2lvbiAiMS4wLjEiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29t
L2FzeW5jLWVhY2gvLS9hc3luYy1lYWNoLTEuMC4xLnRneiMxOWQzODZhMWQ5ZWRjNmU3YzFjODVk
Mzg4YWVkYmNjNTZkMzM2MDJkIgorCithc3luY2tpdEBeMC40LjA6CisgIHZlcnNpb24gIjAuNC4w
IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9hc3luY2tpdC8tL2Fz
eW5ja2l0LTAuNC4wLnRneiNjNzllZDk3ZjdmMzRjYjhmMmJhMWJjOTc5MGJjYzM2NjQ3NGI0Yjc5
IgorCithd3Mtc2lnbjJAfjAuNi4wOgorICB2ZXJzaW9uICIwLjYuMCIKKyAgcmVzb2x2ZWQgImh0
dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYXdzLXNpZ24yLy0vYXdzLXNpZ24yLTAuNi4wLnRn
eiMxNDM0MmRkMzhkYmNjOTRkMGU1Yjg3ZDc2M2NkNjM2MTJjMGU3OTRmIgorCithd3M0QF4xLjIu
MToKKyAgdmVyc2lvbiAiMS42LjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5w
a2cuY29tL2F3czQvLS9hd3M0LTEuNi4wLnRneiM4M2VmNWNhODYwYjJiMzJlNGEwZGVlZGVlOGM3
NzFiOWRiNTc0NzFlIgorCitiYWJlbC1jbGlAXjYuMTAuMToKKyAgdmVyc2lvbiAiNi4yNC4xIgor
ICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9iYWJlbC1jbGkvLS9iYWJl
bC1jbGktNi4yNC4xLnRneiMyMDdjZDcwNWJiYTYxNDg5YjJlYTQxYjUzMTIzNDFjZjZhY2EyMjgz
IgorICBkZXBlbmRlbmNpZXM6CisgICAgYmFiZWwtY29yZSAiXjYuMjQuMSIKKyAgICBiYWJlbC1w
b2x5ZmlsbCAiXjYuMjMuMCIKKyAgICBiYWJlbC1yZWdpc3RlciAiXjYuMjQuMSIKKyAgICBiYWJl
bC1ydW50aW1lICJeNi4yMi4wIgorICAgIGNvbW1hbmRlciAiXjIuOC4xIgorICAgIGNvbnZlcnQt
c291cmNlLW1hcCAiXjEuMS4wIgorICAgIGZzLXJlYWRkaXItcmVjdXJzaXZlICJeMS4wLjAiCisg
ICAgZ2xvYiAiXjcuMC4wIgorICAgIGxvZGFzaCAiXjQuMi4wIgorICAgIG91dHB1dC1maWxlLXN5
bmMgIl4xLjEuMCIKKyAgICBwYXRoLWlzLWFic29sdXRlICJeMS4wLjAiCisgICAgc2xhc2ggIl4x
LjAuMCIKKyAgICBzb3VyY2UtbWFwICJeMC41LjAiCisgICAgdjhmbGFncyAiXjIuMC4xMCIKKyAg
b3B0aW9uYWxEZXBlbmRlbmNpZXM6CisgICAgY2hva2lkYXIgIl4xLjYuMSIKKworYmFiZWwtY29k
ZS1mcmFtZUBeNi4yMi4wOgorICB2ZXJzaW9uICI2LjIyLjAiCisgIHJlc29sdmVkICJodHRwczov
L3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2JhYmVsLWNvZGUtZnJhbWUvLS9iYWJlbC1jb2RlLWZyYW1l
LTYuMjIuMC50Z3ojMDI3NjIwYmVlNTY3YTg4YzMyNTYxNTc0ZTdmZDA4MDFkMzMxMThlNCIKKyAg
ZGVwZW5kZW5jaWVzOgorICAgIGNoYWxrICJeMS4xLjAiCisgICAgZXN1dGlscyAiXjIuMC4yIgor
ICAgIGpzLXRva2VucyAiXjMuMC4wIgorCitiYWJlbC1jb3JlQF42LjI0LjE6CisgIHZlcnNpb24g
IjYuMjQuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYmFiZWwt
Y29yZS8tL2JhYmVsLWNvcmUtNi4yNC4xLnRneiM4YzQyODU2NGRjZTFlMWY0MWZiMzM3ZWMzNGY0
YzNiMDIyYjVhZDgzIgorICBkZXBlbmRlbmNpZXM6CisgICAgYmFiZWwtY29kZS1mcmFtZSAiXjYu
MjIuMCIKKyAgICBiYWJlbC1nZW5lcmF0b3IgIl42LjI0LjEiCisgICAgYmFiZWwtaGVscGVycyAi
XjYuMjQuMSIKKyAgICBiYWJlbC1tZXNzYWdlcyAiXjYuMjMuMCIKKyAgICBiYWJlbC1yZWdpc3Rl
ciAiXjYuMjQuMSIKKyAgICBiYWJlbC1ydW50aW1lICJeNi4yMi4wIgorICAgIGJhYmVsLXRlbXBs
YXRlICJeNi4yNC4xIgorICAgIGJhYmVsLXRyYXZlcnNlICJeNi4yNC4xIgorICAgIGJhYmVsLXR5
cGVzICJeNi4yNC4xIgorICAgIGJhYnlsb24gIl42LjExLjAiCisgICAgY29udmVydC1zb3VyY2Ut
bWFwICJeMS4xLjAiCisgICAgZGVidWcgIl4yLjEuMSIKKyAgICBqc29uNSAiXjAuNS4wIgorICAg
IGxvZGFzaCAiXjQuMi4wIgorICAgIG1pbmltYXRjaCAiXjMuMC4yIgorICAgIHBhdGgtaXMtYWJz
b2x1dGUgIl4xLjAuMCIKKyAgICBwcml2YXRlICJeMC4xLjYiCisgICAgc2xhc2ggIl4xLjAuMCIK
KyAgICBzb3VyY2UtbWFwICJeMC41LjAiCisKK2JhYmVsLWdlbmVyYXRvckBeNi4yNC4xOgorICB2
ZXJzaW9uICI2LjI0LjEiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29t
L2JhYmVsLWdlbmVyYXRvci8tL2JhYmVsLWdlbmVyYXRvci02LjI0LjEudGd6I2U3MTVmNDg2YzU4
ZGVkMjU2NDlkODg4OTQ0ZDUyYWEwN2M1ZDk0OTciCisgIGRlcGVuZGVuY2llczoKKyAgICBiYWJl
bC1tZXNzYWdlcyAiXjYuMjMuMCIKKyAgICBiYWJlbC1ydW50aW1lICJeNi4yMi4wIgorICAgIGJh
YmVsLXR5cGVzICJeNi4yNC4xIgorICAgIGRldGVjdC1pbmRlbnQgIl40LjAuMCIKKyAgICBqc2Vz
YyAiXjEuMy4wIgorICAgIGxvZGFzaCAiXjQuMi4wIgorICAgIHNvdXJjZS1tYXAgIl4wLjUuMCIK
KyAgICB0cmltLXJpZ2h0ICJeMS4wLjEiCisKK2JhYmVsLWhlbHBlci1idWlsZGVyLXJlYWN0LWpz
eEBeNi4yNC4xOgorICB2ZXJzaW9uICI2LjI0LjEiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lz
dHJ5Lnlhcm5wa2cuY29tL2JhYmVsLWhlbHBlci1idWlsZGVyLXJlYWN0LWpzeC8tL2JhYmVsLWhl
bHBlci1idWlsZGVyLXJlYWN0LWpzeC02LjI0LjEudGd6IzBhZDc5MTdlMzNjOGQ3NTFlNjQ2ZGFj
YTRlNzdjYzE5Mzc3ZDJjYmMiCisgIGRlcGVuZGVuY2llczoKKyAgICBiYWJlbC1ydW50aW1lICJe
Ni4yMi4wIgorICAgIGJhYmVsLXR5cGVzICJeNi4yNC4xIgorICAgIGVzdXRpbHMgIl4yLjAuMCIK
KworYmFiZWwtaGVscGVyc0BeNi4yNC4xOgorICB2ZXJzaW9uICI2LjI0LjEiCisgIHJlc29sdmVk
ICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2JhYmVsLWhlbHBlcnMvLS9iYWJlbC1oZWxw
ZXJzLTYuMjQuMS50Z3ojMzQ3MWRlOWNhZWMzODhlNWM4NTBlNTk3ZTU4YTI2ZGRmMzc2MDJiMiIK
KyAgZGVwZW5kZW5jaWVzOgorICAgIGJhYmVsLXJ1bnRpbWUgIl42LjIyLjAiCisgICAgYmFiZWwt
dGVtcGxhdGUgIl42LjI0LjEiCisKK2JhYmVsLW1lc3NhZ2VzQF42LjIzLjA6CisgIHZlcnNpb24g
IjYuMjMuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYmFiZWwt
bWVzc2FnZXMvLS9iYWJlbC1tZXNzYWdlcy02LjIzLjAudGd6I2YzY2RmNDcwMzg1ODAzNWIyYTI5
NTFjNmVjNWVkZjZjNjJmMjYzMGUiCisgIGRlcGVuZGVuY2llczoKKyAgICBiYWJlbC1ydW50aW1l
ICJeNi4yMi4wIgorCitiYWJlbC1wbHVnaW4tc3ludGF4LWpzeEBeNi44LjA6CisgIHZlcnNpb24g
IjYuMTguMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYmFiZWwt
cGx1Z2luLXN5bnRheC1qc3gvLS9iYWJlbC1wbHVnaW4tc3ludGF4LWpzeC02LjE4LjAudGd6IzBh
ZjMyYTlhNmUxM2NhN2EzZmQ1MDY5ZTYyZDdiMGY1OGQwZDg5NDYiCisKK2JhYmVsLXBsdWdpbi10
cmFuc2Zvcm0tcmVhY3QtanN4QF42LjguMDoKKyAgdmVyc2lvbiAiNi4yNC4xIgorICByZXNvbHZl
ZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9iYWJlbC1wbHVnaW4tdHJhbnNmb3JtLXJl
YWN0LWpzeC8tL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tcmVhY3QtanN4LTYuMjQuMS50Z3ojODQw
YTAyOGU3ZGY0NjBkZmMzYTJkMjlmMGMwZDkxZjYzNzZlNjZhMyIKKyAgZGVwZW5kZW5jaWVzOgor
ICAgIGJhYmVsLWhlbHBlci1idWlsZGVyLXJlYWN0LWpzeCAiXjYuMjQuMSIKKyAgICBiYWJlbC1w
bHVnaW4tc3ludGF4LWpzeCAiXjYuOC4wIgorICAgIGJhYmVsLXJ1bnRpbWUgIl42LjIyLjAiCisK
K2JhYmVsLXBsdWdpbi11Z2xpZnlAXjEuMC4yOgorICB2ZXJzaW9uICIxLjAuMiIKKyAgcmVzb2x2
ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYmFiZWwtcGx1Z2luLXVnbGlmeS8tL2Jh
YmVsLXBsdWdpbi11Z2xpZnktMS4wLjIudGd6I2Q3YmNkYWIxMzJhZmJhZGIwYmYzNDc5YTU2NjZl
YjhkZTA4MjYxMGYiCisgIGRlcGVuZGVuY2llczoKKyAgICB1Z2xpZnktanMgIl4yLjQuMjQiCisK
K2JhYmVsLXBvbHlmaWxsQF42LjIzLjA6CisgIHZlcnNpb24gIjYuMjMuMCIKKyAgcmVzb2x2ZWQg
Imh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYmFiZWwtcG9seWZpbGwvLS9iYWJlbC1wb2x5
ZmlsbC02LjIzLjAudGd6IzgzNjRjYTYyZGY4ZWFmYjgzMDQ5OWY2OTkxNzc0NjZjM2IwMzQ5OWQi
CisgIGRlcGVuZGVuY2llczoKKyAgICBiYWJlbC1ydW50aW1lICJeNi4yMi4wIgorICAgIGNvcmUt
anMgIl4yLjQuMCIKKyAgICByZWdlbmVyYXRvci1ydW50aW1lICJeMC4xMC4wIgorCitiYWJlbC1y
ZWdpc3RlckBeNi4yNC4xOgorICB2ZXJzaW9uICI2LjI0LjEiCisgIHJlc29sdmVkICJodHRwczov
L3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2JhYmVsLXJlZ2lzdGVyLy0vYmFiZWwtcmVnaXN0ZXItNi4y
NC4xLnRneiM3ZTEwZTEzYTJmNzEwNjViZGZhZDVhMTc4N2JhNDViY2E2ZGVkNzVmIgorICBkZXBl
bmRlbmNpZXM6CisgICAgYmFiZWwtY29yZSAiXjYuMjQuMSIKKyAgICBiYWJlbC1ydW50aW1lICJe
Ni4yMi4wIgorICAgIGNvcmUtanMgIl4yLjQuMCIKKyAgICBob21lLW9yLXRtcCAiXjIuMC4wIgor
ICAgIGxvZGFzaCAiXjQuMi4wIgorICAgIG1rZGlycCAiXjAuNS4xIgorICAgIHNvdXJjZS1tYXAt
c3VwcG9ydCAiXjAuNC4yIgorCitiYWJlbC1ydW50aW1lQF42LjIyLjA6CisgIHZlcnNpb24gIjYu
MjMuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYmFiZWwtcnVu
dGltZS8tL2JhYmVsLXJ1bnRpbWUtNi4yMy4wLnRneiMwYTk0ODlmMTQ0ZGU3MGVmYjNjZTQzMDBh
Y2NkYjMyOWUyZmM1NDNiIgorICBkZXBlbmRlbmNpZXM6CisgICAgY29yZS1qcyAiXjIuNC4wIgor
ICAgIHJlZ2VuZXJhdG9yLXJ1bnRpbWUgIl4wLjEwLjAiCisKK2JhYmVsLXRlbXBsYXRlQF42LjI0
LjE6CisgIHZlcnNpb24gIjYuMjQuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFy
bnBrZy5jb20vYmFiZWwtdGVtcGxhdGUvLS9iYWJlbC10ZW1wbGF0ZS02LjI0LjEudGd6IzA0YWU1
MTRmMWY5M2IzYTI1MzdmMmEwZjYwYTVhNDVmYjgzMDgzMzMiCisgIGRlcGVuZGVuY2llczoKKyAg
ICBiYWJlbC1ydW50aW1lICJeNi4yMi4wIgorICAgIGJhYmVsLXRyYXZlcnNlICJeNi4yNC4xIgor
ICAgIGJhYmVsLXR5cGVzICJeNi4yNC4xIgorICAgIGJhYnlsb24gIl42LjExLjAiCisgICAgbG9k
YXNoICJeNC4yLjAiCisKK2JhYmVsLXRyYXZlcnNlQF42LjI0LjE6CisgIHZlcnNpb24gIjYuMjQu
MSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYmFiZWwtdHJhdmVy
c2UvLS9iYWJlbC10cmF2ZXJzZS02LjI0LjEudGd6I2FiMzY2NzNmZDM1NmY5YTA5NDg2NTllN2Iz
MzhkNWZlYWRiMzE2OTUiCisgIGRlcGVuZGVuY2llczoKKyAgICBiYWJlbC1jb2RlLWZyYW1lICJe
Ni4yMi4wIgorICAgIGJhYmVsLW1lc3NhZ2VzICJeNi4yMy4wIgorICAgIGJhYmVsLXJ1bnRpbWUg
Il42LjIyLjAiCisgICAgYmFiZWwtdHlwZXMgIl42LjI0LjEiCisgICAgYmFieWxvbiAiXjYuMTUu
MCIKKyAgICBkZWJ1ZyAiXjIuMi4wIgorICAgIGdsb2JhbHMgIl45LjAuMCIKKyAgICBpbnZhcmlh
bnQgIl4yLjIuMCIKKyAgICBsb2Rhc2ggIl40LjIuMCIKKworYmFiZWwtdHlwZXNAXjYuMjQuMToK
KyAgdmVyc2lvbiAiNi4yNC4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtn
LmNvbS9iYWJlbC10eXBlcy8tL2JhYmVsLXR5cGVzLTYuMjQuMS50Z3ojYTEzNjg3OWRjMTViMzYw
NmJkYTBkOTBjMWZjNzQzMDRjMmZmMDk3NSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGJhYmVsLXJ1
bnRpbWUgIl42LjIyLjAiCisgICAgZXN1dGlscyAiXjIuMC4yIgorICAgIGxvZGFzaCAiXjQuMi4w
IgorICAgIHRvLWZhc3QtcHJvcGVydGllcyAiXjEuMC4xIgorCitiYWJ5bG9uQF42LjExLjAsIGJh
Ynlsb25AXjYuMTUuMDoKKyAgdmVyc2lvbiAiNi4xNy4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9y
ZWdpc3RyeS55YXJucGtnLmNvbS9iYWJ5bG9uLy0vYmFieWxvbi02LjE3LjAudGd6IzM3ZGE5NDg4
Nzg0ODhiOWM0ZTNjNDAzODg5M2ZhMzMxNGIzZmM5MzIiCisKK2JhbGFuY2VkLW1hdGNoQF4wLjQu
MToKKyAgdmVyc2lvbiAiMC40LjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5w
a2cuY29tL2JhbGFuY2VkLW1hdGNoLy0vYmFsYW5jZWQtbWF0Y2gtMC40LjIudGd6I2NiM2YzZTNj
NzMyZGMwZjAxZWU3MGI0MDNmMzAyZTYxZDc3MDk4MzgiCisKK2JjcnlwdC1wYmtkZkBeMS4wLjA6
CisgIHZlcnNpb24gIjEuMC4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtn
LmNvbS9iY3J5cHQtcGJrZGYvLS9iY3J5cHQtcGJrZGYtMS4wLjEudGd6IzYzYmM1ZGNiNjEzMzFi
OTJiYzA1ZmQ1Mjg5NTNjMzM0NjJhMDZmOGQiCisgIGRlcGVuZGVuY2llczoKKyAgICB0d2VldG5h
Y2wgIl4wLjE0LjMiCisKK2JpbmFyeS1leHRlbnNpb25zQF4xLjAuMDoKKyAgdmVyc2lvbiAiMS44
LjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2JpbmFyeS1leHRl
bnNpb25zLy0vYmluYXJ5LWV4dGVuc2lvbnMtMS44LjAudGd6IzQ4ZWM4ZDE2ZGY0Mzc3ZWFlNWZh
NTg4NDY4MjQ4MGFmNGQ5NWM3NzQiCisKK2Jsb2NrLXN0cmVhbUAqOgorICB2ZXJzaW9uICIwLjAu
OSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vYmxvY2stc3RyZWFt
Ly0vYmxvY2stc3RyZWFtLTAuMC45LnRneiMxM2ViZmU3NzhhMDMyMDVjZmUwMzc1MTQ4MWViYjRi
MzMwMGMxMjZhIgorICBkZXBlbmRlbmNpZXM6CisgICAgaW5oZXJpdHMgIn4yLjAuMCIKKworYm9v
bUAyLngueDoKKyAgdmVyc2lvbiAiMi4xMC4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3Ry
eS55YXJucGtnLmNvbS9ib29tLy0vYm9vbS0yLjEwLjEudGd6IzM5Yzg5MThjZWZmNTc5OWY4M2Y5
NDkyYTg0OGY2MjVhZGQwYzc2NmYiCisgIGRlcGVuZGVuY2llczoKKyAgICBob2VrICIyLngueCIK
KworYnJhY2UtZXhwYW5zaW9uQF4xLjAuMDoKKyAgdmVyc2lvbiAiMS4xLjciCisgIHJlc29sdmVk
ICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2JyYWNlLWV4cGFuc2lvbi8tL2JyYWNlLWV4
cGFuc2lvbi0xLjEuNy50Z3ojM2VmZmMzYzUwZTAwMDUzMWZiNzIwZWFmZjgwZjBhZThlZjIzY2Y1
OSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGJhbGFuY2VkLW1hdGNoICJeMC40LjEiCisgICAgY29u
Y2F0LW1hcCAiMC4wLjEiCisKK2JyYWNlc0BeMS44LjI6CisgIHZlcnNpb24gIjEuOC41IgorICBy
ZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9icmFjZXMvLS9icmFjZXMtMS44
LjUudGd6I2JhNzc5NjJlMTJkZmY5NjlkNmI3NjcxMWU5MTRiNzM3ODU3YmY2YTciCisgIGRlcGVu
ZGVuY2llczoKKyAgICBleHBhbmQtcmFuZ2UgIl4xLjguMSIKKyAgICBwcmVzZXJ2ZSAiXjAuMi4w
IgorICAgIHJlcGVhdC1lbGVtZW50ICJeMS4xLjIiCisKK2J1ZmZlci1zaGltc0B+MS4wLjA6Cisg
IHZlcnNpb24gIjEuMC4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNv
bS9idWZmZXItc2hpbXMvLS9idWZmZXItc2hpbXMtMS4wLjAudGd6Izk5NzhjZTMxNzM4OGM2NDlh
ZDg3OTMwMjhjMzQ3N2VmMDQ0YThiNTEiCisKK2NhbWVsY2FzZUBeMS4wLjI6CisgIHZlcnNpb24g
IjEuMi4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9jYW1lbGNh
c2UvLS9jYW1lbGNhc2UtMS4yLjEudGd6IzliYjUzMDRkMmUwYjU2Njk4YjJjNzU4YjA4YTNlYWE5
ZGFhNThhMzkiCisKK2Nhc2VsZXNzQH4wLjEyLjA6CisgIHZlcnNpb24gIjAuMTIuMCIKKyAgcmVz
b2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vY2FzZWxlc3MvLS9jYXNlbGVzcy0w
LjEyLjAudGd6IzFiNjgxYzIxZmY4NDAzM2M4MjY1NDMwOTA2ODk0MjBkMTg3MTUxZGMiCisKK2Nl
bnRlci1hbGlnbkBeMC4xLjE6CisgIHZlcnNpb24gIjAuMS4zIgorICByZXNvbHZlZCAiaHR0cHM6
Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9jZW50ZXItYWxpZ24vLS9jZW50ZXItYWxpZ24tMC4xLjMu
dGd6I2FhMGQzMjYyOWI2ZWU5NzIyMDA0MTFjYmQ0NDYxYzkwN2JjMmI3YWQiCisgIGRlcGVuZGVu
Y2llczoKKyAgICBhbGlnbi10ZXh0ICJeMC4xLjMiCisgICAgbGF6eS1jYWNoZSAiXjEuMC4zIgor
CitjaGFsa0BeMS4xLjA6CisgIHZlcnNpb24gIjEuMS4zIgorICByZXNvbHZlZCAiaHR0cHM6Ly9y
ZWdpc3RyeS55YXJucGtnLmNvbS9jaGFsay8tL2NoYWxrLTEuMS4zLnRneiNhODExNWM1NWU0YTcw
MmZlNGQxNTBhYmQzODcyODIyYTdlMDlmYzk4IgorICBkZXBlbmRlbmNpZXM6CisgICAgYW5zaS1z
dHlsZXMgIl4yLjIuMSIKKyAgICBlc2NhcGUtc3RyaW5nLXJlZ2V4cCAiXjEuMC4yIgorICAgIGhh
cy1hbnNpICJeMi4wLjAiCisgICAgc3RyaXAtYW5zaSAiXjMuMC4wIgorICAgIHN1cHBvcnRzLWNv
bG9yICJeMi4wLjAiCisKK2Nob2tpZGFyQF4xLjYuMToKKyAgdmVyc2lvbiAiMS42LjEiCisgIHJl
c29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2Nob2tpZGFyLy0vY2hva2lkYXIt
MS42LjEudGd6IzJmNDQ0N2FiNWU5NmU1MGZiM2Q3ODlmZDkwZDRjNzJlMGU0YzcwYzIiCisgIGRl
cGVuZGVuY2llczoKKyAgICBhbnltYXRjaCAiXjEuMy4wIgorICAgIGFzeW5jLWVhY2ggIl4xLjAu
MCIKKyAgICBnbG9iLXBhcmVudCAiXjIuMC4wIgorICAgIGluaGVyaXRzICJeMi4wLjEiCisgICAg
aXMtYmluYXJ5LXBhdGggIl4xLjAuMCIKKyAgICBpcy1nbG9iICJeMi4wLjAiCisgICAgcGF0aC1p
cy1hYnNvbHV0ZSAiXjEuMC4wIgorICAgIHJlYWRkaXJwICJeMi4wLjAiCisgIG9wdGlvbmFsRGVw
ZW5kZW5jaWVzOgorICAgIGZzZXZlbnRzICJeMS4wLjAiCisKK2NsYXNzbmFtZXNAXjIuMi41Ogor
ICB2ZXJzaW9uICIyLjIuNSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5j
b20vY2xhc3NuYW1lcy8tL2NsYXNzbmFtZXMtMi4yLjUudGd6I2ZiMzgwMWQ0NTM0Njc2NDllZjM2
MDNjN2Q2MWEwMmJkMTI5YmRlNmQiCisKK2NsaXVpQF4yLjEuMDoKKyAgdmVyc2lvbiAiMi4xLjAi
CisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2NsaXVpLy0vY2xpdWkt
Mi4xLjAudGd6IzRiNDc1NzYwZmY4MDI2NGM3NjJjM2ExNzE5MDMyZTkxYzdmZWEwZDEiCisgIGRl
cGVuZGVuY2llczoKKyAgICBjZW50ZXItYWxpZ24gIl4wLjEuMSIKKyAgICByaWdodC1hbGlnbiAi
XjAuMS4xIgorICAgIHdvcmR3cmFwICIwLjAuMiIKKworY29AXjQuNi4wOgorICB2ZXJzaW9uICI0
LjYuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vY28vLS9jby00
LjYuMC50Z3ojNmVhNmJkZjNkODUzYWU1NGNjYjhlNDdiZmEwYmYzZjkwMzFmYjE4NCIKKworY29k
ZS1wb2ludC1hdEBeMS4wLjA6CisgIHZlcnNpb24gIjEuMS4wIgorICByZXNvbHZlZCAiaHR0cHM6
Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9jb2RlLXBvaW50LWF0Ly0vY29kZS1wb2ludC1hdC0xLjEu
MC50Z3ojMGQwNzBiNGQwNDNhNWJlYTMzYTJmMWE0MGUyZWRiM2Q5YTRjY2Y3NyIKKworY29tYmlu
ZWQtc3RyZWFtQF4xLjAuNSwgY29tYmluZWQtc3RyZWFtQH4xLjAuNToKKyAgdmVyc2lvbiAiMS4w
LjUiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2NvbWJpbmVkLXN0
cmVhbS8tL2NvbWJpbmVkLXN0cmVhbS0xLjAuNS50Z3ojOTM4MzcwYTU3YjRhNTFkZWEyYzc3YzE1
ZDVjNWZkZjg5NTE2NDAwOSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGRlbGF5ZWQtc3RyZWFtICJ+
MS4wLjAiCisKK2NvbW1hbmRlckBeMi44LjE6CisgIHZlcnNpb24gIjIuOS4wIgorICByZXNvbHZl
ZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9jb21tYW5kZXIvLS9jb21tYW5kZXItMi45
LjAudGd6IzljOTkwOTQxNzZlMTIyNDBjYjIyZDZjNTE0NjA5ODQwMGZlMGY3ZDQiCisgIGRlcGVu
ZGVuY2llczoKKyAgICBncmFjZWZ1bC1yZWFkbGluayAiPj0gMS4wLjAiCisKK2NvbmNhdC1tYXBA
MC4wLjE6CisgIHZlcnNpb24gIjAuMC4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55
YXJucGtnLmNvbS9jb25jYXQtbWFwLy0vY29uY2F0LW1hcC0wLjAuMS50Z3ojZDhhOTZiZDc3ZmQ2
OGRmNzc5M2E3MzAzNmEzYmEwZDU0MDVkNDc3YiIKKworY29uc29sZS1jb250cm9sLXN0cmluZ3NA
XjEuMC4wLCBjb25zb2xlLWNvbnRyb2wtc3RyaW5nc0B+MS4xLjA6CisgIHZlcnNpb24gIjEuMS4w
IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9jb25zb2xlLWNvbnRy
b2wtc3RyaW5ncy8tL2NvbnNvbGUtY29udHJvbC1zdHJpbmdzLTEuMS4wLnRneiMzZDdjZjQ0NjRk
YjY0NDZlYTY0NGJmNGIzOTUwN2Y5ODUxMDA4ZThlIgorCitjb252ZXJ0LXNvdXJjZS1tYXBAXjEu
MS4wOgorICB2ZXJzaW9uICIxLjUuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFy
bnBrZy5jb20vY29udmVydC1zb3VyY2UtbWFwLy0vY29udmVydC1zb3VyY2UtbWFwLTEuNS4wLnRn
eiM5YWNkNzA4NTFjNmQ1ZGZkZDkzZDkyODJlNWVkZjk0YTAzZmY0NmI1IgorCitjb3JlLWpzQF4x
LjAuMDoKKyAgdmVyc2lvbiAiMS4yLjciCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlh
cm5wa2cuY29tL2NvcmUtanMvLS9jb3JlLWpzLTEuMi43LnRneiM2NTIyOTRjMTQ2NTFkYjI4ZmE5
M2JkMmQ1ZmYyOTgzYTRmMDhjNjM2IgorCitjb3JlLWpzQF4yLjQuMDoKKyAgdmVyc2lvbiAiMi40
LjEiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2NvcmUtanMvLS9j
b3JlLWpzLTIuNC4xLnRneiM0ZGU5MTFlNjY3YjBlYWU5MTI0ZTM0MjU0YjUzYWVhNmZjNjE4ZDNl
IgorCitjb3JlLXV0aWwtaXNAfjEuMC4wOgorICB2ZXJzaW9uICIxLjAuMiIKKyAgcmVzb2x2ZWQg
Imh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vY29yZS11dGlsLWlzLy0vY29yZS11dGlsLWlz
LTEuMC4yLnRneiNiNWZkNTQyMjBhYTJiYzVhYjU3YWFiNzE0MGM5NDA3NTQ1MDNjMWE3IgorCitj
cnlwdGlsZXNAMi54Lng6CisgIHZlcnNpb24gIjIuMC41IgorICByZXNvbHZlZCAiaHR0cHM6Ly9y
ZWdpc3RyeS55YXJucGtnLmNvbS9jcnlwdGlsZXMvLS9jcnlwdGlsZXMtMi4wLjUudGd6IzNiZGZl
Y2RjNjA4MTQ3YzFjNjcyMDJmYTI5MWU3ZGNhNTllYWEzYjgiCisgIGRlcGVuZGVuY2llczoKKyAg
ICBib29tICIyLngueCIKKworZGFzaGRhc2hAXjEuMTIuMDoKKyAgdmVyc2lvbiAiMS4xNC4xIgor
ICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9kYXNoZGFzaC8tL2Rhc2hk
YXNoLTEuMTQuMS50Z3ojODUzY2ZhMGY3Y2JlMmZlZDVkZTIwMzI2YjhkZDU4MTAzNWY2ZTJmMCIK
KyAgZGVwZW5kZW5jaWVzOgorICAgIGFzc2VydC1wbHVzICJeMS4wLjAiCisKK2RlYnVnQF4yLjEu
MSwgZGVidWdAXjIuMi4wOgorICB2ZXJzaW9uICIyLjYuNiIKKyAgcmVzb2x2ZWQgImh0dHBzOi8v
cmVnaXN0cnkueWFybnBrZy5jb20vZGVidWcvLS9kZWJ1Zy0yLjYuNi50Z3ojYTlmYTZmYmU5Y2E0
M2NmMWU3OWY3M2I3NWMwMTg5Y2JiN2Q2ZGI1YSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIG1zICIw
LjcuMyIKKworZGVjYW1lbGl6ZUBeMS4wLjA6CisgIHZlcnNpb24gIjEuMi4wIgorICByZXNvbHZl
ZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9kZWNhbWVsaXplLy0vZGVjYW1lbGl6ZS0x
LjIuMC50Z3ojZjY1MzRkMTUxNDgyNjliMjAzNTJlN2JlZTI2ZjUwMWY5YTE5MTI5MCIKKworZGVl
cC1leHRlbmRAfjAuNC4wOgorICB2ZXJzaW9uICIwLjQuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8v
cmVnaXN0cnkueWFybnBrZy5jb20vZGVlcC1leHRlbmQvLS9kZWVwLWV4dGVuZC0wLjQuMS50Z3oj
ZWZlNDExM2QwODA4NWY0ZTZmOTY4Nzc1OTgxMGY4MDc0NjllMjI1MyIKKworZGVsYXllZC1zdHJl
YW1AfjEuMC4wOgorICB2ZXJzaW9uICIxLjAuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0
cnkueWFybnBrZy5jb20vZGVsYXllZC1zdHJlYW0vLS9kZWxheWVkLXN0cmVhbS0xLjAuMC50Z3oj
ZGYzYWUxOTlhY2FkZmI3ZDQ0MGFhYWUwYjI5ZTIyNzJiMjRlYzYxOSIKKworZGVsZWdhdGVzQF4x
LjAuMDoKKyAgdmVyc2lvbiAiMS4wLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlh
cm5wa2cuY29tL2RlbGVnYXRlcy8tL2RlbGVnYXRlcy0xLjAuMC50Z3ojODRjNmUxNTliODE5MDRm
ZGNhNTlhMGVmNDRjZDg3MGQzMTI1MGY5YSIKKworZGV0ZWN0LWluZGVudEBeNC4wLjA6CisgIHZl
cnNpb24gIjQuMC4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9k
ZXRlY3QtaW5kZW50Ly0vZGV0ZWN0LWluZGVudC00LjAuMC50Z3ojZjc2ZDA2NDM1MmNkZjQzYTFj
YjZjZTYxOWM0ZWUzYTk0NzVkZTIwOCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIHJlcGVhdGluZyAi
XjIuMC4wIgorCitkaXJlY3RvckBeMS4yLjg6CisgIHZlcnNpb24gIjEuMi44IgorICByZXNvbHZl
ZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9kaXJlY3Rvci8tL2RpcmVjdG9yLTEuMi44
LnRneiNjNmQ5YjRkZDg5MGU5YWZmNTM2NTE4M2ZlOWNjOGU3Mzk5NGNmMmQ1IgorCitlY2MtanNi
bkB+MC4xLjE6CisgIHZlcnNpb24gIjAuMS4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3Ry
eS55YXJucGtnLmNvbS9lY2MtanNibi8tL2VjYy1qc2JuLTAuMS4xLnRneiMwZmM3M2E5ZWQ1ZjBk
NTNjMzgxOTMzOTg1MjNlZjdlNTQzNzc3NTA1IgorICBkZXBlbmRlbmNpZXM6CisgICAganNibiAi
fjAuMS4wIgorCitlbmNvZGluZ0BeMC4xLjExOgorICB2ZXJzaW9uICIwLjEuMTIiCisgIHJlc29s
dmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2VuY29kaW5nLy0vZW5jb2RpbmctMC4x
LjEyLnRneiM1MzhiNjZmM2VlNjJjZDFhYjUxZWMzMjM4MjlkMWY5NDgwYzc0YmViIgorICBkZXBl
bmRlbmNpZXM6CisgICAgaWNvbnYtbGl0ZSAifjAuNC4xMyIKKworZXNjYXBlLXN0cmluZy1yZWdl
eHBAXjEuMC4yOgorICB2ZXJzaW9uICIxLjAuNSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0
cnkueWFybnBrZy5jb20vZXNjYXBlLXN0cmluZy1yZWdleHAvLS9lc2NhcGUtc3RyaW5nLXJlZ2V4
cC0xLjAuNS50Z3ojMWI2MWMwNTYyMTkwYThkZmY2YWUzYmIyY2YwMjAwY2ExMzBiODZkNCIKKwor
ZXN1dGlsc0BeMi4wLjAsIGVzdXRpbHNAXjIuMC4yOgorICB2ZXJzaW9uICIyLjAuMiIKKyAgcmVz
b2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vZXN1dGlscy8tL2VzdXRpbHMtMi4w
LjIudGd6IzBhYmY0ZjFjYWE1YmNiMWY3YTlkOGFjYzZkZWE0ZmFhYTA0YmFjOWIiCisKK2V4cGFu
ZC1icmFja2V0c0BeMC4xLjQ6CisgIHZlcnNpb24gIjAuMS41IgorICByZXNvbHZlZCAiaHR0cHM6
Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9leHBhbmQtYnJhY2tldHMvLS9leHBhbmQtYnJhY2tldHMt
MC4xLjUudGd6I2RmMDcyODRlMzQyYTgwN2NkNzMzYWM1YWY3MjQxMWU1ODFkMTE3N2IiCisgIGRl
cGVuZGVuY2llczoKKyAgICBpcy1wb3NpeC1icmFja2V0ICJeMC4xLjAiCisKK2V4cGFuZC1yYW5n
ZUBeMS44LjE6CisgIHZlcnNpb24gIjEuOC4yIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3Ry
eS55YXJucGtnLmNvbS9leHBhbmQtcmFuZ2UvLS9leHBhbmQtcmFuZ2UtMS44LjIudGd6I2EyOTll
ZmZkMzM1ZmUyNzIxZWJhZThlMjU3ZWM3OTY0NGZjODUzMzciCisgIGRlcGVuZGVuY2llczoKKyAg
ICBmaWxsLXJhbmdlICJeMi4xLjAiCisKK2V4dGVuZEB+My4wLjA6CisgIHZlcnNpb24gIjMuMC4x
IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9leHRlbmQvLS9leHRl
bmQtMy4wLjEudGd6I2E3NTVlYTdiYzFhZGZjYzVhMzFjZTdlNzYyZGJhYWRjNWU2MzY0NDQiCisK
K2V4dGdsb2JAXjAuMy4xOgorICB2ZXJzaW9uICIwLjMuMiIKKyAgcmVzb2x2ZWQgImh0dHBzOi8v
cmVnaXN0cnkueWFybnBrZy5jb20vZXh0Z2xvYi8tL2V4dGdsb2ItMC4zLjIudGd6IzJlMThmZjNk
MmY0OWFiMjc2NWNlYzkwMjNmMDExZGFhOGQ4MzQ5YTEiCisgIGRlcGVuZGVuY2llczoKKyAgICBp
cy1leHRnbG9iICJeMS4wLjAiCisKK2V4dHNwcmludGZAMS4wLjI6CisgIHZlcnNpb24gIjEuMC4y
IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9leHRzcHJpbnRmLy0v
ZXh0c3ByaW50Zi0xLjAuMi50Z3ojZTEwODBlMDY1OGUzMDBiMDYyOTQ5OTBjYzcwZTE1MDIyMzVm
ZDU1MCIKKworZmJqc0BeMC44Ljk6CisgIHZlcnNpb24gIjAuOC4xMiIKKyAgcmVzb2x2ZWQgImh0
dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vZmJqcy8tL2ZianMtMC44LjEyLnRneiMxMGI1ZDky
Zjc2ZDQ1NTc1ZmQ2M2EyMTdkNGVhMDJiZWEyZjhlZDA0IgorICBkZXBlbmRlbmNpZXM6CisgICAg
Y29yZS1qcyAiXjEuMC4wIgorICAgIGlzb21vcnBoaWMtZmV0Y2ggIl4yLjEuMSIKKyAgICBsb29z
ZS1lbnZpZnkgIl4xLjAuMCIKKyAgICBvYmplY3QtYXNzaWduICJeNC4xLjAiCisgICAgcHJvbWlz
ZSAiXjcuMS4xIgorICAgIHNldGltbWVkaWF0ZSAiXjEuMC41IgorICAgIHVhLXBhcnNlci1qcyAi
XjAuNy45IgorCitmaWxlbmFtZS1yZWdleEBeMi4wLjA6CisgIHZlcnNpb24gIjIuMC4wIgorICBy
ZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9maWxlbmFtZS1yZWdleC8tL2Zp
bGVuYW1lLXJlZ2V4LTIuMC4wLnRneiM5OTZlM2U4MDQ3OWI5OGI5ODk3ZjE1YThhNThiM2QwODRl
OTI2Nzc1IgorCitmaWxsLXJhbmdlQF4yLjEuMDoKKyAgdmVyc2lvbiAiMi4yLjMiCisgIHJlc29s
dmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2ZpbGwtcmFuZ2UvLS9maWxsLXJhbmdl
LTIuMi4zLnRneiM1MGI3N2RmZDdlNDY5YmM3NDkyNDcwOTYzNjk5ZmU3YTg0ODVhNzIzIgorICBk
ZXBlbmRlbmNpZXM6CisgICAgaXMtbnVtYmVyICJeMi4xLjAiCisgICAgaXNvYmplY3QgIl4yLjAu
MCIKKyAgICByYW5kb21hdGljICJeMS4xLjMiCisgICAgcmVwZWF0LWVsZW1lbnQgIl4xLjEuMiIK
KyAgICByZXBlYXQtc3RyaW5nICJeMS41LjIiCisKK2Zvci1pbkBeMS4wLjE6CisgIHZlcnNpb24g
IjEuMC4yIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9mb3ItaW4v
LS9mb3ItaW4tMS4wLjIudGd6IzgxMDY4ZDI5NWE4MTQyZWMwYWM3MjZjNmUyMjAwYzMwZmI2ZDVl
ODAiCisKK2Zvci1vd25AXjAuMS40OgorICB2ZXJzaW9uICIwLjEuNSIKKyAgcmVzb2x2ZWQgImh0
dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vZm9yLW93bi8tL2Zvci1vd24tMC4xLjUudGd6IzUy
NjVjNjgxYTRmMjk0ZGFiYmYxN2M5NTA5YjY3NjNhYTg0NTEwY2UiCisgIGRlcGVuZGVuY2llczoK
KyAgICBmb3ItaW4gIl4xLjAuMSIKKworZm9yZXZlci1hZ2VudEB+MC42LjE6CisgIHZlcnNpb24g
IjAuNi4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9mb3JldmVy
LWFnZW50Ly0vZm9yZXZlci1hZ2VudC0wLjYuMS50Z3ojZmJjNzFmMGM0MWFkZWIzN2Y5NmM1Nzdh
ZDFlZDQyZDhmZGFjY2E5MSIKKworZm9ybS1kYXRhQH4yLjEuMToKKyAgdmVyc2lvbiAiMi4xLjQi
CisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2Zvcm0tZGF0YS8tL2Zv
cm0tZGF0YS0yLjEuNC50Z3ojMzNjMTgzYWNmMTkzMjc2ZWNhYTk4MTQzYTY5ZTk0YmZlZTE3NTBk
MSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGFzeW5ja2l0ICJeMC40LjAiCisgICAgY29tYmluZWQt
c3RyZWFtICJeMS4wLjUiCisgICAgbWltZS10eXBlcyAiXjIuMS4xMiIKKworZnMtcmVhZGRpci1y
ZWN1cnNpdmVAXjEuMC4wOgorICB2ZXJzaW9uICIxLjAuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8v
cmVnaXN0cnkueWFybnBrZy5jb20vZnMtcmVhZGRpci1yZWN1cnNpdmUvLS9mcy1yZWFkZGlyLXJl
Y3Vyc2l2ZS0xLjAuMC50Z3ojOGNkMTc0NWM4YjRmOGEyOWM4Y2FlYzM5MjQ3NjkyMWJhMTk1ZjU2
MCIKKworZnMucmVhbHBhdGhAXjEuMC4wOgorICB2ZXJzaW9uICIxLjAuMCIKKyAgcmVzb2x2ZWQg
Imh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vZnMucmVhbHBhdGgvLS9mcy5yZWFscGF0aC0x
LjAuMC50Z3ojMTUwNGFkMjUyMzE1OGNhYTQwZGI0YTI3ODdjYjAxNDExOTk0ZWE0ZiIKKworZnNl
dmVudHNAXjEuMC4wOgorICB2ZXJzaW9uICIxLjEuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVn
aXN0cnkueWFybnBrZy5jb20vZnNldmVudHMvLS9mc2V2ZW50cy0xLjEuMS50Z3ojZjE5ZmQyOGY0
M2VlYWY3NjE2ODBlNTE5YTIwM2M0ZDBiM2QzMWFmZiIKKyAgZGVwZW5kZW5jaWVzOgorICAgIG5h
biAiXjIuMy4wIgorICAgIG5vZGUtcHJlLWd5cCAiXjAuNi4yOSIKKworZnN0cmVhbS1pZ25vcmVA
XjEuMC41OgorICB2ZXJzaW9uICIxLjAuNSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnku
eWFybnBrZy5jb20vZnN0cmVhbS1pZ25vcmUvLS9mc3RyZWFtLWlnbm9yZS0xLjAuNS50Z3ojOWMz
MWRhZTM0NzY3MDE4ZmUxZDI0OWIyNGRhZGE2N2QwOTJkYTEwNSIKKyAgZGVwZW5kZW5jaWVzOgor
ICAgIGZzdHJlYW0gIl4xLjAuMCIKKyAgICBpbmhlcml0cyAiMiIKKyAgICBtaW5pbWF0Y2ggIl4z
LjAuMCIKKworZnN0cmVhbUBeMS4wLjAsIGZzdHJlYW1AXjEuMC4xMCwgZnN0cmVhbUBeMS4wLjI6
CisgIHZlcnNpb24gIjEuMC4xMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBr
Zy5jb20vZnN0cmVhbS8tL2ZzdHJlYW0tMS4wLjExLnRneiM1YzFmYjFmMTE3NDc3MTE0ZjA2MzJh
MGViNGI3MWIzY2IwZmQzMTcxIgorICBkZXBlbmRlbmNpZXM6CisgICAgZ3JhY2VmdWwtZnMgIl40
LjEuMiIKKyAgICBpbmhlcml0cyAifjIuMC4wIgorICAgIG1rZGlycCAiPj0wLjUgMCIKKyAgICBy
aW1yYWYgIjIiCisKK2dhdWdlQH4yLjcuMToKKyAgdmVyc2lvbiAiMi43LjQiCisgIHJlc29sdmVk
ICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2dhdWdlLy0vZ2F1Z2UtMi43LjQudGd6IzJj
MDM0MDVjNzUzOGMzOWQ3ZWIzN2IzMTcwMjJlMzI1ZmIwMThiZjciCisgIGRlcGVuZGVuY2llczoK
KyAgICBhcHJvYmEgIl4xLjAuMyIKKyAgICBjb25zb2xlLWNvbnRyb2wtc3RyaW5ncyAiXjEuMC4w
IgorICAgIGhhcy11bmljb2RlICJeMi4wLjAiCisgICAgb2JqZWN0LWFzc2lnbiAiXjQuMS4wIgor
ICAgIHNpZ25hbC1leGl0ICJeMy4wLjAiCisgICAgc3RyaW5nLXdpZHRoICJeMS4wLjEiCisgICAg
c3RyaXAtYW5zaSAiXjMuMC4xIgorICAgIHdpZGUtYWxpZ24gIl4xLjEuMCIKKworZ2V0cGFzc0Be
MC4xLjE6CisgIHZlcnNpb24gIjAuMS43IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55
YXJucGtnLmNvbS9nZXRwYXNzLy0vZ2V0cGFzcy0wLjEuNy50Z3ojNWVmZjhlM2U2ODRkNTY5YWU0
Y2IyYjEyODI2MDRlOGJhNjIxNDlmYSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGFzc2VydC1wbHVz
ICJeMS4wLjAiCisKK2dsb2ItYmFzZUBeMC4zLjA6CisgIHZlcnNpb24gIjAuMy4wIgorICByZXNv
bHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9nbG9iLWJhc2UvLS9nbG9iLWJhc2Ut
MC4zLjAudGd6I2RiYjE2NGY2MjIxYjFjMGIxY2NmODJhZWEzMjhiNDk3ZGYwZWEzYzQiCisgIGRl
cGVuZGVuY2llczoKKyAgICBnbG9iLXBhcmVudCAiXjIuMC4wIgorICAgIGlzLWdsb2IgIl4yLjAu
MCIKKworZ2xvYi1wYXJlbnRAXjIuMC4wOgorICB2ZXJzaW9uICIyLjAuMCIKKyAgcmVzb2x2ZWQg
Imh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vZ2xvYi1wYXJlbnQvLS9nbG9iLXBhcmVudC0y
LjAuMC50Z3ojODEzODNkNzJkYjA1NGZjY2NmNTMzNmRhYTkwMmYxODJmNmVkYmIyOCIKKyAgZGVw
ZW5kZW5jaWVzOgorICAgIGlzLWdsb2IgIl4yLjAuMCIKKworZ2xvYkBeNy4wLjAsIGdsb2JAXjcu
MC41OgorICB2ZXJzaW9uICI3LjEuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFy
bnBrZy5jb20vZ2xvYi8tL2dsb2ItNy4xLjEudGd6IzgwNTIxMWRmMDRmYWFmMWM2M2EzNjAwMzA2
Y2RmNWFkZTUwYjJlYzgiCisgIGRlcGVuZGVuY2llczoKKyAgICBmcy5yZWFscGF0aCAiXjEuMC4w
IgorICAgIGluZmxpZ2h0ICJeMS4wLjQiCisgICAgaW5oZXJpdHMgIjIiCisgICAgbWluaW1hdGNo
ICJeMy4wLjIiCisgICAgb25jZSAiXjEuMy4wIgorICAgIHBhdGgtaXMtYWJzb2x1dGUgIl4xLjAu
MCIKKworZ2xvYmFsc0BeOS4wLjA6CisgIHZlcnNpb24gIjkuMTcuMCIKKyAgcmVzb2x2ZWQgImh0
dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vZ2xvYmFscy8tL2dsb2JhbHMtOS4xNy4wLnRneiMw
YzBjYTY5NmQ5YjliYjY5NGQyZTU0NzBiZDM3Nzc3Y2FhZDUwMjg2IgorCitncmFjZWZ1bC1mc0Be
NC4xLjIsIGdyYWNlZnVsLWZzQF40LjEuNDoKKyAgdmVyc2lvbiAiNC4xLjExIgorICByZXNvbHZl
ZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9ncmFjZWZ1bC1mcy8tL2dyYWNlZnVsLWZz
LTQuMS4xMS50Z3ojMGU4YmRmZTRkMWRkYjg4NTRkNjRlMDRlYTdjMDBlMmEwMjZlNTY1OCIKKwor
ImdyYWNlZnVsLXJlYWRsaW5rQD49IDEuMC4wIjoKKyAgdmVyc2lvbiAiMS4wLjEiCisgIHJlc29s
dmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2dyYWNlZnVsLXJlYWRsaW5rLy0vZ3Jh
Y2VmdWwtcmVhZGxpbmstMS4wLjEudGd6IzRjYWZhZDc2YmM2MmYwMmZhMDM5YjJmOTRlOWEzZGQz
YTM5MWE3MjUiCisKK2hhci1zY2hlbWFAXjEuMC41OgorICB2ZXJzaW9uICIxLjAuNSIKKyAgcmVz
b2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vaGFyLXNjaGVtYS8tL2hhci1zY2hl
bWEtMS4wLjUudGd6I2QyNjMxMzVmNDMzMDdjMDJjNjAyYWZjOGZlOTU5NzBjMDE1MTM2OWUiCisK
K2hhci12YWxpZGF0b3JAfjQuMi4xOgorICB2ZXJzaW9uICI0LjIuMSIKKyAgcmVzb2x2ZWQgImh0
dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vaGFyLXZhbGlkYXRvci8tL2hhci12YWxpZGF0b3It
NC4yLjEudGd6IzMzNDgxZDBmMWJiZmY2MDBkZDIwM2Q3NTgxMmE2YTVmYmEwMDJlMmEiCisgIGRl
cGVuZGVuY2llczoKKyAgICBhanYgIl40LjkuMSIKKyAgICBoYXItc2NoZW1hICJeMS4wLjUiCisK
K2hhcy1hbnNpQF4yLjAuMDoKKyAgdmVyc2lvbiAiMi4wLjAiCisgIHJlc29sdmVkICJodHRwczov
L3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2hhcy1hbnNpLy0vaGFzLWFuc2ktMi4wLjAudGd6IzM0ZjUw
NDljZTFlY2RmMmIwNjQ5YWYzZWYyNGU0NWVkMzU0MTZkOTEiCisgIGRlcGVuZGVuY2llczoKKyAg
ICBhbnNpLXJlZ2V4ICJeMi4wLjAiCisKK2hhcy11bmljb2RlQF4yLjAuMDoKKyAgdmVyc2lvbiAi
Mi4wLjEiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2hhcy11bmlj
b2RlLy0vaGFzLXVuaWNvZGUtMi4wLjEudGd6I2UwZTZmZTZhMjhjZjUxMTM4ODU1ZTA4NmQxNjkx
ZTc3MWRlMmE4YjkiCisKK2hhd2tAfjMuMS4zOgorICB2ZXJzaW9uICIzLjEuMyIKKyAgcmVzb2x2
ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vaGF3ay8tL2hhd2stMy4xLjMudGd6IzA3
ODQ0NGJkN2MxNjQwYjBmZTU0MGQyYzliNzNkNTk2NzhlOGUxYzQiCisgIGRlcGVuZGVuY2llczoK
KyAgICBib29tICIyLngueCIKKyAgICBjcnlwdGlsZXMgIjIueC54IgorICAgIGhvZWsgIjIueC54
IgorICAgIHNudHAgIjEueC54IgorCitob2VrQDIueC54OgorICB2ZXJzaW9uICIyLjE2LjMiCisg
IHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2hvZWsvLS9ob2VrLTIuMTYu
My50Z3ojMjBiYjc0MDNkM2NlYTM5OGU5MWRjNDcxMGE4ZmYxYjgyNzRhMjVlZCIKKworaG9tZS1v
ci10bXBAXjIuMC4wOgorICB2ZXJzaW9uICIyLjAuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVn
aXN0cnkueWFybnBrZy5jb20vaG9tZS1vci10bXAvLS9ob21lLW9yLXRtcC0yLjAuMC50Z3ojZTM2
YzNmMmQyY2FlN2Q3NDZhODU3ZTM4ZDE4ZDVmMzJhNzg4MmRiOCIKKyAgZGVwZW5kZW5jaWVzOgor
ICAgIG9zLWhvbWVkaXIgIl4xLjAuMCIKKyAgICBvcy10bXBkaXIgIl4xLjAuMSIKKworaHR0cC1z
aWduYXR1cmVAfjEuMS4wOgorICB2ZXJzaW9uICIxLjEuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8v
cmVnaXN0cnkueWFybnBrZy5jb20vaHR0cC1zaWduYXR1cmUvLS9odHRwLXNpZ25hdHVyZS0xLjEu
MS50Z3ojZGY3MmUyNjcwNjZjZDBhYzY3ZmI3NmFkZjhlMTM0YThmYmNmOTFiZiIKKyAgZGVwZW5k
ZW5jaWVzOgorICAgIGFzc2VydC1wbHVzICJeMC4yLjAiCisgICAganNwcmltICJeMS4yLjIiCisg
ICAgc3NocGsgIl4xLjcuMCIKKworaWNvbnYtbGl0ZUB+MC40LjEzOgorICB2ZXJzaW9uICIwLjQu
MTYiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2ljb252LWxpdGUv
LS9pY29udi1saXRlLTAuNC4xNi50Z3ojNjVkZTNiZWViMzllMjk2MGQ2N2YwNDlmMTYzNGZmY2Jj
ZGU5MDE0YiIKKworaW5mbGlnaHRAXjEuMC40OgorICB2ZXJzaW9uICIxLjAuNiIKKyAgcmVzb2x2
ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vaW5mbGlnaHQvLS9pbmZsaWdodC0xLjAu
Ni50Z3ojNDliZDYzMzFkN2QwMmQwYzA5YmM5MTBhMTA3NWJhODE2NWI1NmRmOSIKKyAgZGVwZW5k
ZW5jaWVzOgorICAgIG9uY2UgIl4xLjMuMCIKKyAgICB3cmFwcHkgIjEiCisKK2luaGVyaXRzQF4y
LjAuMSwgaW5oZXJpdHNAfjIuMC4wLCBpbmhlcml0c0B+Mi4wLjEsIGluaGVyaXRzQDI6CisgIHZl
cnNpb24gIjIuMC4zIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9p
bmhlcml0cy8tL2luaGVyaXRzLTIuMC4zLnRneiM2MzNjMmM4M2UzZGE0MmE1MDJmNTI0NjYwMjI0
ODBmNDIwODI2MWRlIgorCitpbmlAfjEuMy4wOgorICB2ZXJzaW9uICIxLjMuNCIKKyAgcmVzb2x2
ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vaW5pLy0vaW5pLTEuMy40LnRneiMwNTM3
Y2I3OWRhZjU5YjU5YTFhNTE3ZGZmNzA2Yzg2ZWMwMzkxNjJlIgorCitpbnZhcmlhbnRAXjIuMi4w
OgorICB2ZXJzaW9uICIyLjIuMiIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBr
Zy5jb20vaW52YXJpYW50Ly0vaW52YXJpYW50LTIuMi4yLnRneiM5ZTFmNTZhYzBhY2RiNmJmMzAz
MzA2ZjMzOGJlM2IyMDRhZTYwMzYwIgorICBkZXBlbmRlbmNpZXM6CisgICAgbG9vc2UtZW52aWZ5
ICJeMS4wLjAiCisKK2lzLWJpbmFyeS1wYXRoQF4xLjAuMDoKKyAgdmVyc2lvbiAiMS4wLjEiCisg
IHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2lzLWJpbmFyeS1wYXRoLy0v
aXMtYmluYXJ5LXBhdGgtMS4wLjEudGd6Izc1ZjE2NjQyYjQ4MGYxODdhNzExYzgxNDE2MWZkM2E0
YTc2NTU4OTgiCisgIGRlcGVuZGVuY2llczoKKyAgICBiaW5hcnktZXh0ZW5zaW9ucyAiXjEuMC4w
IgorCitpcy1idWZmZXJAXjEuMS41OgorICB2ZXJzaW9uICIxLjEuNSIKKyAgcmVzb2x2ZWQgImh0
dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vaXMtYnVmZmVyLy0vaXMtYnVmZmVyLTEuMS41LnRn
eiMxZjNiMjZlZjYxM2IyMTRiODhjYmNhMjNjYzZjMDFkODc5NjFlZWNjIgorCitpcy1kb3RmaWxl
QF4xLjAuMDoKKyAgdmVyc2lvbiAiMS4wLjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5
Lnlhcm5wa2cuY29tL2lzLWRvdGZpbGUvLS9pcy1kb3RmaWxlLTEuMC4yLnRneiMyYzEzMjM4M2Yz
OTE5OWY4ZWRjMjY4Y2EwMWI5YjAwN2QyMDVjYzRkIgorCitpcy1lcXVhbC1zaGFsbG93QF4wLjEu
MzoKKyAgdmVyc2lvbiAiMC4xLjMiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5w
a2cuY29tL2lzLWVxdWFsLXNoYWxsb3cvLS9pcy1lcXVhbC1zaGFsbG93LTAuMS4zLnRneiMyMjM4
MDk4ZmMyMjFkZTBiY2ZhNWQ5ZWFjNGM0NWQ2MzhhYTFjNTM0IgorICBkZXBlbmRlbmNpZXM6Cisg
ICAgaXMtcHJpbWl0aXZlICJeMi4wLjAiCisKK2lzLWV4dGVuZGFibGVAXjAuMS4xOgorICB2ZXJz
aW9uICIwLjEuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vaXMt
ZXh0ZW5kYWJsZS8tL2lzLWV4dGVuZGFibGUtMC4xLjEudGd6IzYyYjExMGUyODlhNDcxNDE4ZTNl
YzM2YTYxN2Q0NzJlMzAxZGZjODkiCisKK2lzLWV4dGdsb2JAXjEuMC4wOgorICB2ZXJzaW9uICIx
LjAuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vaXMtZXh0Z2xv
Yi8tL2lzLWV4dGdsb2ItMS4wLjAudGd6I2FjNDY4MTc3YzQ5NDM0MDVhMDkyZmM4ZjI5NzYwYzZm
ZmM2MjA2YzAiCisKK2lzLWZpbml0ZUBeMS4wLjA6CisgIHZlcnNpb24gIjEuMC4yIgorICByZXNv
bHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9pcy1maW5pdGUvLS9pcy1maW5pdGUt
MS4wLjIudGd6I2NjNjY3NzY5NTYwMmJlNTUwZWYxMWU4YjRhYTYzMDUzNDJiNmQwYWEiCisgIGRl
cGVuZGVuY2llczoKKyAgICBudW1iZXItaXMtbmFuICJeMS4wLjAiCisKK2lzLWZ1bGx3aWR0aC1j
b2RlLXBvaW50QF4xLjAuMDoKKyAgdmVyc2lvbiAiMS4wLjAiCisgIHJlc29sdmVkICJodHRwczov
L3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2lzLWZ1bGx3aWR0aC1jb2RlLXBvaW50Ly0vaXMtZnVsbHdp
ZHRoLWNvZGUtcG9pbnQtMS4wLjAudGd6I2VmOWUzMTM4NmYwMzFhN2YwZDY0M2FmODJmZGU1MGM0
NTdlZjAwY2IiCisgIGRlcGVuZGVuY2llczoKKyAgICBudW1iZXItaXMtbmFuICJeMS4wLjAiCisK
K2lzLWdsb2JAXjIuMC4wLCBpcy1nbG9iQF4yLjAuMToKKyAgdmVyc2lvbiAiMi4wLjEiCisgIHJl
c29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2lzLWdsb2IvLS9pcy1nbG9iLTIu
MC4xLnRneiNkMDk2ZjkyNmEzZGVkNTYwMGYzZmRmZDkxMTk4Y2IwODg4YzJkODYzIgorICBkZXBl
bmRlbmNpZXM6CisgICAgaXMtZXh0Z2xvYiAiXjEuMC4wIgorCitpcy1udW1iZXJAXjIuMC4yLCBp
cy1udW1iZXJAXjIuMS4wOgorICB2ZXJzaW9uICIyLjEuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8v
cmVnaXN0cnkueWFybnBrZy5jb20vaXMtbnVtYmVyLy0vaXMtbnVtYmVyLTIuMS4wLnRneiMwMWZj
YmJiMzkzNDYzYTU0OGYyZjQ2NmNjZTE2ZGVjZTQ5ZGI5MDhmIgorICBkZXBlbmRlbmNpZXM6Cisg
ICAga2luZC1vZiAiXjMuMC4yIgorCitpcy1wb3NpeC1icmFja2V0QF4wLjEuMDoKKyAgdmVyc2lv
biAiMC4xLjEiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2lzLXBv
c2l4LWJyYWNrZXQvLS9pcy1wb3NpeC1icmFja2V0LTAuMS4xLnRneiMzMzM0ZGM3OTc3NDM2OGU5
MmYwMTZlNmZiYzBhODhmNWNkNmU2YmM0IgorCitpcy1wcmltaXRpdmVAXjIuMC4wOgorICB2ZXJz
aW9uICIyLjAuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vaXMt
cHJpbWl0aXZlLy0vaXMtcHJpbWl0aXZlLTIuMC4wLnRneiMyMDdiYWI5MTYzODQ5OWMwN2IyYWRm
MjQwYTQxYTg3MjEwMDM0NTc1IgorCitpcy1zdHJlYW1AXjEuMC4xOgorICB2ZXJzaW9uICIxLjEu
MCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vaXMtc3RyZWFtLy0v
aXMtc3RyZWFtLTEuMS4wLnRneiMxMmQ0YTNkZDRlNjhlMGI3OWNlYjhkYmM4NDE3M2FlODBkOTFj
YTQ0IgorCitpcy10eXBlZGFycmF5QH4xLjAuMDoKKyAgdmVyc2lvbiAiMS4wLjAiCisgIHJlc29s
dmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2lzLXR5cGVkYXJyYXkvLS9pcy10eXBl
ZGFycmF5LTEuMC4wLnRneiNlNDc5YzgwODU4ZGYwYzFiMTFkZGRhNjk0MGY5NjAxMWZjZGE0YTlh
IgorCitpc2FycmF5QH4xLjAuMCwgaXNhcnJheUAxLjAuMDoKKyAgdmVyc2lvbiAiMS4wLjAiCisg
IHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2lzYXJyYXkvLS9pc2FycmF5
LTEuMC4wLnRneiNiYjkzNWQ0ODU4MmNiYTE2OGMwNjgzNDk1N2E1NGEzZTA3MTI0ZjExIgorCitp
c29iamVjdEBeMi4wLjA6CisgIHZlcnNpb24gIjIuMS4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9y
ZWdpc3RyeS55YXJucGtnLmNvbS9pc29iamVjdC8tL2lzb2JqZWN0LTIuMS4wLnRneiNmMDY1NTYx
MDk2YTNmMWRhMmVmNDYyNzJmODE1Yzg0MGQ4N2UwYzg5IgorICBkZXBlbmRlbmNpZXM6CisgICAg
aXNhcnJheSAiMS4wLjAiCisKK2lzb21vcnBoaWMtZmV0Y2hAXjIuMS4xOgorICB2ZXJzaW9uICIy
LjIuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vaXNvbW9ycGhp
Yy1mZXRjaC8tL2lzb21vcnBoaWMtZmV0Y2gtMi4yLjEudGd6IzYxMWFlMWFjZjE0ZjVlODFmNzI5
NTA3NDcyODE5ZmU5NzMzNTU4YTkiCisgIGRlcGVuZGVuY2llczoKKyAgICBub2RlLWZldGNoICJe
MS4wLjEiCisgICAgd2hhdHdnLWZldGNoICI+PTAuMTAuMCIKKworaXNzdHJlYW1AfjAuMS4yOgor
ICB2ZXJzaW9uICIwLjEuMiIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5j
b20vaXNzdHJlYW0vLS9pc3N0cmVhbS0wLjEuMi50Z3ojNDdlNjNmN2FmNTVhZmE2ZjkyZTE1MDBl
NjkwZWI4Yjg1MjljMDk5YSIKKworam9kaWQyNTUxOUBeMS4wLjA6CisgIHZlcnNpb24gIjEuMC4y
IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9qb2RpZDI1NTE5Ly0v
am9kaWQyNTUxOS0xLjAuMi50Z3ojMDZkNDkxMjI1NTA5MzQxOTQ3N2Q0MjU2MzM2MDZlMGU5MDc4
Mjk2NyIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGpzYm4gIn4wLjEuMCIKKworanMtdG9rZW5zQF4z
LjAuMDoKKyAgdmVyc2lvbiAiMy4wLjEiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlh
cm5wa2cuY29tL2pzLXRva2Vucy8tL2pzLXRva2Vucy0zLjAuMS50Z3ojMDhlOWYxMzI0ODRhMmM0
NWEzMDkwN2U5ZGM0ZDU1NjdiN2YxMTRkNyIKKworanNibkB+MC4xLjA6CisgIHZlcnNpb24gIjAu
MS4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9qc2JuLy0vanNi
bi0wLjEuMS50Z3ojYTVlNjU0YzJlNWEyZGViNWYyMDFkOTZjZWZiY2E4MGMwZWYyZjUxMyIKKwor
anNlc2NAXjEuMy4wOgorICB2ZXJzaW9uICIxLjMuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVn
aXN0cnkueWFybnBrZy5jb20vanNlc2MvLS9qc2VzYy0xLjMuMC50Z3ojNDZjM2ZlYzhjMTg5MmIx
MmIwODMzZGI5YmM3NjIyMTc2ZGJhYjM0YiIKKworanNvbi1zY2hlbWFAMC4yLjM6CisgIHZlcnNp
b24gIjAuMi4zIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9qc29u
LXNjaGVtYS8tL2pzb24tc2NoZW1hLTAuMi4zLnRneiNiNDgwYzg5MmU1OWEyZjA1OTU0Y2U3Mjdi
ZDNmMmE0ZTg4MmY5ZTEzIgorCitqc29uLXN0YWJsZS1zdHJpbmdpZnlAXjEuMC4xOgorICB2ZXJz
aW9uICIxLjAuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vanNv
bi1zdGFibGUtc3RyaW5naWZ5Ly0vanNvbi1zdGFibGUtc3RyaW5naWZ5LTEuMC4xLnRneiM5YTc1
OWQzOWM1ZjJmZjUwM2ZkNTMwMDY0NmVkNDQ1Zjg4YzRmOWFmIgorICBkZXBlbmRlbmNpZXM6Cisg
ICAganNvbmlmeSAifjAuMC4wIgorCitqc29uLXN0cmluZ2lmeS1zYWZlQH41LjAuMToKKyAgdmVy
c2lvbiAiNS4wLjEiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2pz
b24tc3RyaW5naWZ5LXNhZmUvLS9qc29uLXN0cmluZ2lmeS1zYWZlLTUuMC4xLnRneiMxMjk2YTJk
NThmZDQ1ZjE5YTBmNmNlMDFkNjU3MDFlMmM3MzViNmViIgorCitqc29uNUBeMC41LjA6CisgIHZl
cnNpb24gIjAuNS4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9q
c29uNS8tL2pzb241LTAuNS4xLnRneiMxZWFkZTdhY2MwMTIwMzRhZDg0ZTIzOTY3NjdlYWQ5ZmE1
NDk1ODIxIgorCitqc29uaWZ5QH4wLjAuMDoKKyAgdmVyc2lvbiAiMC4wLjAiCisgIHJlc29sdmVk
ICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2pzb25pZnkvLS9qc29uaWZ5LTAuMC4wLnRn
eiMyYzc0YjZlZTQxZDkzY2E1MWI3YjVhYWVlOGY1MDM2MzFkMjUyYTczIgorCitqc3ByaW1AXjEu
Mi4yOgorICB2ZXJzaW9uICIxLjQuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFy
bnBrZy5jb20vanNwcmltLy0vanNwcmltLTEuNC4wLnRneiNhM2I4N2U0MDI5OGQ4YzM4MDU1MmQ4
Y2M3NjI4YTBiYjk1YTIyOTE4IgorICBkZXBlbmRlbmNpZXM6CisgICAgYXNzZXJ0LXBsdXMgIjEu
MC4wIgorICAgIGV4dHNwcmludGYgIjEuMC4yIgorICAgIGpzb24tc2NoZW1hICIwLjIuMyIKKyAg
ICB2ZXJyb3IgIjEuMy42IgorCitraW5kLW9mQF4zLjAuMjoKKyAgdmVyc2lvbiAiMy4yLjAiCisg
IHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2tpbmQtb2YvLS9raW5kLW9m
LTMuMi4wLnRneiNiNThhYmU0ZDVjMDQ0YWQzMzcyNmE4YzE1MjViNDhjZjg5MWJmZjA3IgorICBk
ZXBlbmRlbmNpZXM6CisgICAgaXMtYnVmZmVyICJeMS4xLjUiCisKK2xhenktY2FjaGVAXjEuMC4z
OgorICB2ZXJzaW9uICIxLjAuNCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBr
Zy5jb20vbGF6eS1jYWNoZS8tL2xhenktY2FjaGUtMS4wLjQudGd6I2ExZDc4ZmMzYTUwNDc0Y2I4
MDg0NWQzYjNiNmUxZGE0OWE0NDZlOGUiCisKK2xvZGFzaEBeNC4yLjA6CisgIHZlcnNpb24gIjQu
MTcuNCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vbG9kYXNoLy0v
bG9kYXNoLTQuMTcuNC50Z3ojNzgyMDNhNGQxYzMyOGFlMWQ4NmRjYTY0NjBlMzY5YjU3ZjQwNTVh
ZSIKKworbG9uZ2VzdEBeMS4wLjE6CisgIHZlcnNpb24gIjEuMC4xIgorICByZXNvbHZlZCAiaHR0
cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9sb25nZXN0Ly0vbG9uZ2VzdC0xLjAuMS50Z3ojMzBh
MGIyZGEzOGY3Mzc3MGU4Mjk0YTBkMjJlNjYyNWVkNzdkMDA5NyIKKworbG9vc2UtZW52aWZ5QF4x
LjAuMCwgbG9vc2UtZW52aWZ5QF4xLjEuMDoKKyAgdmVyc2lvbiAiMS4zLjEiCisgIHJlc29sdmVk
ICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL2xvb3NlLWVudmlmeS8tL2xvb3NlLWVudmlm
eS0xLjMuMS50Z3ojZDFhOGFkMzNmYTljZTBlNzEzZDY1ZmRkMGFjOGI3NDhkNDc4Yzg0OCIKKyAg
ZGVwZW5kZW5jaWVzOgorICAgIGpzLXRva2VucyAiXjMuMC4wIgorCittaWNyb21hdGNoQF4yLjEu
NToKKyAgdmVyc2lvbiAiMi4zLjExIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJu
cGtnLmNvbS9taWNyb21hdGNoLy0vbWljcm9tYXRjaC0yLjMuMTEudGd6Izg2Njc3Yzk3ZDE3MjBi
MzYzNDMxZDA0ZDBkMTUyOTNiZDM4YzE1NjUiCisgIGRlcGVuZGVuY2llczoKKyAgICBhcnItZGlm
ZiAiXjIuMC4wIgorICAgIGFycmF5LXVuaXF1ZSAiXjAuMi4xIgorICAgIGJyYWNlcyAiXjEuOC4y
IgorICAgIGV4cGFuZC1icmFja2V0cyAiXjAuMS40IgorICAgIGV4dGdsb2IgIl4wLjMuMSIKKyAg
ICBmaWxlbmFtZS1yZWdleCAiXjIuMC4wIgorICAgIGlzLWV4dGdsb2IgIl4xLjAuMCIKKyAgICBp
cy1nbG9iICJeMi4wLjEiCisgICAga2luZC1vZiAiXjMuMC4yIgorICAgIG5vcm1hbGl6ZS1wYXRo
ICJeMi4wLjEiCisgICAgb2JqZWN0Lm9taXQgIl4yLjAuMCIKKyAgICBwYXJzZS1nbG9iICJeMy4w
LjQiCisgICAgcmVnZXgtY2FjaGUgIl4wLjQuMiIKKworbWltZS1kYkB+MS4yNy4wOgorICB2ZXJz
aW9uICIxLjI3LjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL21p
bWUtZGIvLS9taW1lLWRiLTEuMjcuMC50Z3ojODIwZjU3MjI5NmJiZDIwZWMyNWVkNTVlNWI1ZGU4
NjllNTQzNmViMSIKKworbWltZS10eXBlc0BeMi4xLjEyLCBtaW1lLXR5cGVzQH4yLjEuNzoKKyAg
dmVyc2lvbiAiMi4xLjE1IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNv
bS9taW1lLXR5cGVzLy0vbWltZS10eXBlcy0yLjEuMTUudGd6I2E0ZWJmNTA2NDA5NDU2OTIzN2I4
Y2Y3MDA0Njc3NmQwOWZjOTJhZWQiCisgIGRlcGVuZGVuY2llczoKKyAgICBtaW1lLWRiICJ+MS4y
Ny4wIgorCittaW5pbWF0Y2hAXjMuMC4wLCBtaW5pbWF0Y2hAXjMuMC4yOgorICB2ZXJzaW9uICIz
LjAuMyIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vbWluaW1hdGNo
Ly0vbWluaW1hdGNoLTMuMC4zLnRneiMyYTRlNDA5MGI5NmIyZGIwNmE5ZDdkZjAxMDU1YTYyYTc3
YzliNzc0IgorICBkZXBlbmRlbmNpZXM6CisgICAgYnJhY2UtZXhwYW5zaW9uICJeMS4wLjAiCisK
K21pbmltaXN0QF4xLjIuMDoKKyAgdmVyc2lvbiAiMS4yLjAiCisgIHJlc29sdmVkICJodHRwczov
L3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL21pbmltaXN0Ly0vbWluaW1pc3QtMS4yLjAudGd6I2EzNTAw
OGIyMGY0MTM4M2VlYzFmYjkxNGY0Y2Q1ZGY3OWEyNjQyODQiCisKK21pbmltaXN0QDAuMC44Ogor
ICB2ZXJzaW9uICIwLjAuOCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5j
b20vbWluaW1pc3QvLS9taW5pbWlzdC0wLjAuOC50Z3ojODU3ZmNhYmZjMzM5N2QyNjI1YjgyMjgy
NjJlODZhYTdhMDExYjA1ZCIKKworbWtkaXJwQF4wLjUuMSwgIm1rZGlycEA+PTAuNSAwIjoKKyAg
dmVyc2lvbiAiMC41LjEiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29t
L21rZGlycC8tL21rZGlycC0wLjUuMS50Z3ojMzAwNTc0MzhlYWM2Y2Y3ZjhjNDc2N2YzODY0OGQ2
Njk3ZDc1YzkwMyIKKyAgZGVwZW5kZW5jaWVzOgorICAgIG1pbmltaXN0ICIwLjAuOCIKKworbXNA
MC43LjM6CisgIHZlcnNpb24gIjAuNy4zIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55
YXJucGtnLmNvbS9tcy8tL21zLTAuNy4zLnRneiM3MDgxNTVhNWU0NGUzM2Y1ZmQwZmM1M2U4MWQw
ZDQwYTkxYmUxZmZmIgorCituYW5AXjIuMy4wOgorICB2ZXJzaW9uICIyLjYuMiIKKyAgcmVzb2x2
ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vbmFuLy0vbmFuLTIuNi4yLnRneiNlNGZm
MzRlNmM5NWZkZmI1YWVjYzA4ZGU2NTk2ZjQzNjA1YTdkYjQ1IgorCitub2RlLWZldGNoQF4xLjAu
MToKKyAgdmVyc2lvbiAiMS42LjMiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5w
a2cuY29tL25vZGUtZmV0Y2gvLS9ub2RlLWZldGNoLTEuNi4zLnRneiNkYzIzNGVkZDY0ODk5ODJk
NThlOGYwZGI0ZjY5NTAyOWFiY2Q4YzA0IgorICBkZXBlbmRlbmNpZXM6CisgICAgZW5jb2Rpbmcg
Il4wLjEuMTEiCisgICAgaXMtc3RyZWFtICJeMS4wLjEiCisKK25vZGUtcHJlLWd5cEBeMC42LjI5
OgorICB2ZXJzaW9uICIwLjYuMzQiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5w
a2cuY29tL25vZGUtcHJlLWd5cC8tL25vZGUtcHJlLWd5cC0wLjYuMzQudGd6Izk0YWQxYzc5OGEx
MWQ3ZmM2NzM4MWI1MGQ0N2Y4Y2MxOGQ5Nzk5ZjciCisgIGRlcGVuZGVuY2llczoKKyAgICBta2Rp
cnAgIl4wLjUuMSIKKyAgICBub3B0ICJeNC4wLjEiCisgICAgbnBtbG9nICJeNC4wLjIiCisgICAg
cmMgIl4xLjEuNyIKKyAgICByZXF1ZXN0ICJeMi44MS4wIgorICAgIHJpbXJhZiAiXjIuNi4xIgor
ICAgIHNlbXZlciAiXjUuMy4wIgorICAgIHRhciAiXjIuMi4xIgorICAgIHRhci1wYWNrICJeMy40
LjAiCisKK25vcHRAXjQuMC4xOgorICB2ZXJzaW9uICI0LjAuMSIKKyAgcmVzb2x2ZWQgImh0dHBz
Oi8vcmVnaXN0cnkueWFybnBrZy5jb20vbm9wdC8tL25vcHQtNC4wLjEudGd6I2QwZDQ2ODVhZmQ1
NDE1MTkzYzhjNzUwNTYwMmQwZDE3Y2Q2NDQ3NGQiCisgIGRlcGVuZGVuY2llczoKKyAgICBhYmJy
ZXYgIjEiCisgICAgb3NlbnYgIl4wLjEuNCIKKworbm9ybWFsaXplLXBhdGhAXjIuMC4xOgorICB2
ZXJzaW9uICIyLjEuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20v
bm9ybWFsaXplLXBhdGgvLS9ub3JtYWxpemUtcGF0aC0yLjEuMS50Z3ojMWFiMjhiNTU2ZTE5ODM2
M2E4YzFhNmY3ZTZmYTIwMTM3ZmU2YWVkOSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIHJlbW92ZS10
cmFpbGluZy1zZXBhcmF0b3IgIl4xLjAuMSIKKworbnBtbG9nQF40LjAuMjoKKyAgdmVyc2lvbiAi
NC4wLjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL25wbWxvZy8t
L25wbWxvZy00LjAuMi50Z3ojZDAzOTUwZTBlNzhjZTE1MjdiYTI2ZDJhNzU5MmU5MzQ4YWMzZTc1
ZiIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGFyZS13ZS10aGVyZS15ZXQgIn4xLjEuMiIKKyAgICBj
b25zb2xlLWNvbnRyb2wtc3RyaW5ncyAifjEuMS4wIgorICAgIGdhdWdlICJ+Mi43LjEiCisgICAg
c2V0LWJsb2NraW5nICJ+Mi4wLjAiCisKK251bWJlci1pcy1uYW5AXjEuMC4wOgorICB2ZXJzaW9u
ICIxLjAuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vbnVtYmVy
LWlzLW5hbi8tL251bWJlci1pcy1uYW4tMS4wLjEudGd6IzA5N2I2MDJiNTM0MjJhNTIyYzFhZmI4
NzkwMzE4MzM2OTQxYTAxMWQiCisKK29hdXRoLXNpZ25AfjAuOC4xOgorICB2ZXJzaW9uICIwLjgu
MiIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vb2F1dGgtc2lnbi8t
L29hdXRoLXNpZ24tMC44LjIudGd6IzQ2YTZhYjdmMGFlYWQ4ZGVhZTllYzA1NjU3ODBiN2Q0ZWZl
YjlkNDMiCisKK29iamVjdC1hc3NpZ25AXjQuMS4wOgorICB2ZXJzaW9uICI0LjEuMSIKKyAgcmVz
b2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vb2JqZWN0LWFzc2lnbi8tL29iamVj
dC1hc3NpZ24tNC4xLjEudGd6IzIxMDlhZGM3OTY1ODg3Y2ZjMDVjYmJkNDQyY2FjOGJmYmIzNjA4
NjMiCisKK29iamVjdC5vbWl0QF4yLjAuMDoKKyAgdmVyc2lvbiAiMi4wLjEiCisgIHJlc29sdmVk
ICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL29iamVjdC5vbWl0Ly0vb2JqZWN0Lm9taXQt
Mi4wLjEudGd6IzFhOWM3NDQ4MjlmMzlkYmI4NThjNzZjYTM1NzlhZTJhNTRlYmQxZmEiCisgIGRl
cGVuZGVuY2llczoKKyAgICBmb3Itb3duICJeMC4xLjQiCisgICAgaXMtZXh0ZW5kYWJsZSAiXjAu
MS4xIgorCitvbmNlQF4xLjMuMCwgb25jZUBeMS4zLjM6CisgIHZlcnNpb24gIjEuNC4wIgorICBy
ZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9vbmNlLy0vb25jZS0xLjQuMC50
Z3ojNTgzYjFhYTc3NTk2MWQ0YjExM2FjMTdkOWM1MGJhZWY5ZGQ3NmJkMSIKKyAgZGVwZW5kZW5j
aWVzOgorICAgIHdyYXBweSAiMSIKKworb3MtaG9tZWRpckBeMS4wLjA6CisgIHZlcnNpb24gIjEu
MC4yIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9vcy1ob21lZGly
Ly0vb3MtaG9tZWRpci0xLjAuMi50Z3ojZmZiYzQ5ODgzMzZlMGU4MzNkZTBjMTY4YzdlZjE1MjEy
MWFhN2ZiMyIKKworb3MtdG1wZGlyQF4xLjAuMCwgb3MtdG1wZGlyQF4xLjAuMToKKyAgdmVyc2lv
biAiMS4wLjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL29zLXRt
cGRpci8tL29zLXRtcGRpci0xLjAuMi50Z3ojYmJlNjc0MDZjNzlhYTg1YzVjZmVjNzY2ZmU1NzM0
NTU1ZGZhMTI3NCIKKworb3NlbnZAXjAuMS40OgorICB2ZXJzaW9uICIwLjEuNCIKKyAgcmVzb2x2
ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vb3NlbnYvLS9vc2Vudi0wLjEuNC50Z3oj
NDJmZTZkNTk1M2RmMDZjODA2NGJlNmYxNzZjM2QwNWFhYWEzNDY0NCIKKyAgZGVwZW5kZW5jaWVz
OgorICAgIG9zLWhvbWVkaXIgIl4xLjAuMCIKKyAgICBvcy10bXBkaXIgIl4xLjAuMCIKKworb3V0
cHV0LWZpbGUtc3luY0BeMS4xLjA6CisgIHZlcnNpb24gIjEuMS4yIgorICByZXNvbHZlZCAiaHR0
cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9vdXRwdXQtZmlsZS1zeW5jLy0vb3V0cHV0LWZpbGUt
c3luYy0xLjEuMi50Z3ojZDBhMzNlZWZlNjFhMjA1ZmFjYjkwMDkyZTgyNjU5OGQ1MjQ1Y2U3NiIK
KyAgZGVwZW5kZW5jaWVzOgorICAgIGdyYWNlZnVsLWZzICJeNC4xLjQiCisgICAgbWtkaXJwICJe
MC41LjEiCisgICAgb2JqZWN0LWFzc2lnbiAiXjQuMS4wIgorCitwYXJzZS1nbG9iQF4zLjAuNDoK
KyAgdmVyc2lvbiAiMy4wLjQiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cu
Y29tL3BhcnNlLWdsb2IvLS9wYXJzZS1nbG9iLTMuMC40LnRneiNiMmMzNzZjZmIxMWYzNTUxM2Jh
ZGQxNzNlZjBiYjZlM2EzODgzOTFjIgorICBkZXBlbmRlbmNpZXM6CisgICAgZ2xvYi1iYXNlICJe
MC4zLjAiCisgICAgaXMtZG90ZmlsZSAiXjEuMC4wIgorICAgIGlzLWV4dGdsb2IgIl4xLjAuMCIK
KyAgICBpcy1nbG9iICJeMi4wLjAiCisKK3BhdGgtaXMtYWJzb2x1dGVAXjEuMC4wOgorICB2ZXJz
aW9uICIxLjAuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vcGF0
aC1pcy1hYnNvbHV0ZS8tL3BhdGgtaXMtYWJzb2x1dGUtMS4wLjEudGd6IzE3NGI5MjY4NzM1NTM0
ZmZiYzdhY2U2YmY1M2E1YTllMWI1YzVmNWYiCisKK3BlcmZvcm1hbmNlLW5vd0BeMC4yLjA6Cisg
IHZlcnNpb24gIjAuMi4wIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNv
bS9wZXJmb3JtYW5jZS1ub3cvLS9wZXJmb3JtYW5jZS1ub3ctMC4yLjAudGd6IzMzZWYzMGM1Yzc3
ZDRlYTIxYzVhNTM4NjlkOTFiNTZkOGYyNTU1ZTUiCisKK3ByZXNlcnZlQF4wLjIuMDoKKyAgdmVy
c2lvbiAiMC4yLjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3By
ZXNlcnZlLy0vcHJlc2VydmUtMC4yLjAudGd6IzgxNWVkMWY2ZWJjNjU5MjZmODY1YjMxMGMwNzEz
YmNiMzMxNWNlNGIiCisKK3ByaXZhdGVAXjAuMS42OgorICB2ZXJzaW9uICIwLjEuNyIKKyAgcmVz
b2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vcHJpdmF0ZS8tL3ByaXZhdGUtMC4x
LjcudGd6IzY4Y2U1ZThhMWVmMGEyM2JiNTcwY2MyODUzN2I1MzMyYWJhNjNlZjEiCisKK3Byb2Nl
c3MtbmV4dGljay1hcmdzQH4xLjAuNjoKKyAgdmVyc2lvbiAiMS4wLjciCisgIHJlc29sdmVkICJo
dHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3Byb2Nlc3MtbmV4dGljay1hcmdzLy0vcHJvY2Vz
cy1uZXh0aWNrLWFyZ3MtMS4wLjcudGd6IzE1MGUyMGI3NTY1OTBhZDNmOTEwOTNmMjVhNGYyYWQ4
YmZmMzBiYTMiCisKK3Byb21pc2VAXjcuMS4xOgorICB2ZXJzaW9uICI3LjEuMSIKKyAgcmVzb2x2
ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vcHJvbWlzZS8tL3Byb21pc2UtNy4xLjEu
dGd6IzQ4OTY1NGM2OTI2MTZiOGFhNTViMDcyNGZhODA5YmI3ZGI0OWM1YmYiCisgIGRlcGVuZGVu
Y2llczoKKyAgICBhc2FwICJ+Mi4wLjMiCisKK3Byb3AtdHlwZXNAXjE1LjUuNywgcHJvcC10eXBl
c0B+MTUuNS43OgorICB2ZXJzaW9uICIxNS41LjgiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lz
dHJ5Lnlhcm5wa2cuY29tL3Byb3AtdHlwZXMvLS9wcm9wLXR5cGVzLTE1LjUuOC50Z3ojNmI3YjJl
MTQxMDgzYmUzOGM4NTk1YWE1MWZjNTU3NzVjNzE5OTM5NCIKKyAgZGVwZW5kZW5jaWVzOgorICAg
IGZianMgIl4wLjguOSIKKworcHVueWNvZGVAXjEuNC4xOgorICB2ZXJzaW9uICIxLjQuMSIKKyAg
cmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vcHVueWNvZGUvLS9wdW55Y29k
ZS0xLjQuMS50Z3ojYzBkNWE2M2IyNzE4ODAwYWQ4ZTFlYjBmYTUyNjljODRkZDQxODQ1ZSIKKwor
cXNAfjYuNC4wOgorICB2ZXJzaW9uICI2LjQuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0
cnkueWFybnBrZy5jb20vcXMvLS9xcy02LjQuMC50Z3ojMTNlMjZkMjhhZDZiMGZmYWE5MTMxMmNk
M2JmNzA4ZWQzNTFlNzIzMyIKKworcmFuZG9tYXRpY0BeMS4xLjM6CisgIHZlcnNpb24gIjEuMS42
IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9yYW5kb21hdGljLy0v
cmFuZG9tYXRpYy0xLjEuNi50Z3ojMTEwZGNhYmZmMzk3ZTlkY2ZmN2MwNzg5Y2NjMGE0OWFkZjFl
YzViYiIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGlzLW51bWJlciAiXjIuMC4yIgorICAgIGtpbmQt
b2YgIl4zLjAuMiIKKworcmNAXjEuMS43OgorICB2ZXJzaW9uICIxLjIuMSIKKyAgcmVzb2x2ZWQg
Imh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vcmMvLS9yYy0xLjIuMS50Z3ojMmUwM2U4ZTQy
ZWU0NTBiOGNiM2RjZTY1YmUxYmY4OTc0ZTFkZmQ5NSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGRl
ZXAtZXh0ZW5kICJ+MC40LjAiCisgICAgaW5pICJ+MS4zLjAiCisgICAgbWluaW1pc3QgIl4xLjIu
MCIKKyAgICBzdHJpcC1qc29uLWNvbW1lbnRzICJ+Mi4wLjEiCisKK3JlYWN0LWRvbUBeMTUuNC4w
OgorICB2ZXJzaW9uICIxNS41LjQiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5w
a2cuY29tL3JlYWN0LWRvbS8tL3JlYWN0LWRvbS0xNS41LjQudGd6I2JhMGMyODc4NmZkNTJlZDdl
NGYyMTM1ZmUwMjg4ZDQ2MmFlZjkzZGEiCisgIGRlcGVuZGVuY2llczoKKyAgICBmYmpzICJeMC44
LjkiCisgICAgbG9vc2UtZW52aWZ5ICJeMS4xLjAiCisgICAgb2JqZWN0LWFzc2lnbiAiXjQuMS4w
IgorICAgIHByb3AtdHlwZXMgIn4xNS41LjciCisKK3JlYWN0QF4xNS40LjA6CisgIHZlcnNpb24g
IjE1LjUuNCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vcmVhY3Qv
LS9yZWFjdC0xNS41LjQudGd6I2ZhODNlYjAxNTA2YWIyMzdjZGMxYzhjM2IxY2VhOGRlMDEyYmYw
NDciCisgIGRlcGVuZGVuY2llczoKKyAgICBmYmpzICJeMC44LjkiCisgICAgbG9vc2UtZW52aWZ5
ICJeMS4xLjAiCisgICAgb2JqZWN0LWFzc2lnbiAiXjQuMS4wIgorICAgIHByb3AtdHlwZXMgIl4x
NS41LjciCisKK3JlYWRhYmxlLXN0cmVhbUBeMi4wLjIsIHJlYWRhYmxlLXN0cmVhbUBeMi4wLjYs
IHJlYWRhYmxlLXN0cmVhbUBeMi4xLjQ6CisgIHZlcnNpb24gIjIuMi45IgorICByZXNvbHZlZCAi
aHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9yZWFkYWJsZS1zdHJlYW0vLS9yZWFkYWJsZS1z
dHJlYW0tMi4yLjkudGd6I2NmNzhlYzZmNGE2ZDFlYjQzZDI2NDg4Y2FjOTdmMDQyZTc0YjdmYzgi
CisgIGRlcGVuZGVuY2llczoKKyAgICBidWZmZXItc2hpbXMgIn4xLjAuMCIKKyAgICBjb3JlLXV0
aWwtaXMgIn4xLjAuMCIKKyAgICBpbmhlcml0cyAifjIuMC4xIgorICAgIGlzYXJyYXkgIn4xLjAu
MCIKKyAgICBwcm9jZXNzLW5leHRpY2stYXJncyAifjEuMC42IgorICAgIHN0cmluZ19kZWNvZGVy
ICJ+MS4wLjAiCisgICAgdXRpbC1kZXByZWNhdGUgIn4xLjAuMSIKKworcmVhZGRpcnBAXjIuMC4w
OgorICB2ZXJzaW9uICIyLjEuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBr
Zy5jb20vcmVhZGRpcnAvLS9yZWFkZGlycC0yLjEuMC50Z3ojNGVkMGFkMDYwZGYzMDczMzAwYzQ4
NDQwMzczZjcyZDFjYzY0MmQ3OCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGdyYWNlZnVsLWZzICJe
NC4xLjIiCisgICAgbWluaW1hdGNoICJeMy4wLjIiCisgICAgcmVhZGFibGUtc3RyZWFtICJeMi4w
LjIiCisgICAgc2V0LWltbWVkaWF0ZS1zaGltICJeMS4wLjEiCisKK3JlZ2VuZXJhdG9yLXJ1bnRp
bWVAXjAuMTAuMDoKKyAgdmVyc2lvbiAiMC4xMC41IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdp
c3RyeS55YXJucGtnLmNvbS9yZWdlbmVyYXRvci1ydW50aW1lLy0vcmVnZW5lcmF0b3ItcnVudGlt
ZS0wLjEwLjUudGd6IzMzNmMzZWZjMTIyMGFkY2VkZGEyYzlmYWI2N2I1YTc5NTVhMzM2NTgiCisK
K3JlZ2V4LWNhY2hlQF4wLjQuMjoKKyAgdmVyc2lvbiAiMC40LjMiCisgIHJlc29sdmVkICJodHRw
czovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3JlZ2V4LWNhY2hlLy0vcmVnZXgtY2FjaGUtMC40LjMu
dGd6IzliMWE2YzM1ZDRkMGRmY2VmNTcxMWFlNjUxZThlOWQzZDcxMTQxNDUiCisgIGRlcGVuZGVu
Y2llczoKKyAgICBpcy1lcXVhbC1zaGFsbG93ICJeMC4xLjMiCisgICAgaXMtcHJpbWl0aXZlICJe
Mi4wLjAiCisKK3JlbW92ZS10cmFpbGluZy1zZXBhcmF0b3JAXjEuMC4xOgorICB2ZXJzaW9uICIx
LjAuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vcmVtb3ZlLXRy
YWlsaW5nLXNlcGFyYXRvci8tL3JlbW92ZS10cmFpbGluZy1zZXBhcmF0b3ItMS4wLjEudGd6IzYx
NWViYjk2YWY1NTk1NTJkNGJmNDA1N2M4NDM2ZDQ4NmFiNjNjYzQiCisKK3JlcGVhdC1lbGVtZW50
QF4xLjEuMjoKKyAgdmVyc2lvbiAiMS4xLjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5
Lnlhcm5wa2cuY29tL3JlcGVhdC1lbGVtZW50Ly0vcmVwZWF0LWVsZW1lbnQtMS4xLjIudGd6I2Vm
MDg5YTE3OGQxNDgzYmFhZTRkOTNlYjk4YjRmOWU0ZTExZDk5MGEiCisKK3JlcGVhdC1zdHJpbmdA
XjEuNS4yOgorICB2ZXJzaW9uICIxLjYuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnku
eWFybnBrZy5jb20vcmVwZWF0LXN0cmluZy8tL3JlcGVhdC1zdHJpbmctMS42LjEudGd6IzhkY2Fl
NDcwZTFjODhhYmMyZDYwMGZmZjRhNzc2Mjg2ZGE3NWU2MzciCisKK3JlcGVhdGluZ0BeMi4wLjA6
CisgIHZlcnNpb24gIjIuMC4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtn
LmNvbS9yZXBlYXRpbmcvLS9yZXBlYXRpbmctMi4wLjEudGd6IzUyMTRjNTNhOTI2ZDM1NTI3MDc1
MjdmYmFiNDE1ZGJjMDhkMDZkZGEiCisgIGRlcGVuZGVuY2llczoKKyAgICBpcy1maW5pdGUgIl4x
LjAuMCIKKworcmVxdWVzdEBeMi44MS4wOgorICB2ZXJzaW9uICIyLjgxLjAiCisgIHJlc29sdmVk
ICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3JlcXVlc3QvLS9yZXF1ZXN0LTIuODEuMC50
Z3ojYzY5Mjg5NDZhMGUwNmM1ZjhkNmY4YTkzMzM0NjlmZmRhNDYyOThhMCIKKyAgZGVwZW5kZW5j
aWVzOgorICAgIGF3cy1zaWduMiAifjAuNi4wIgorICAgIGF3czQgIl4xLjIuMSIKKyAgICBjYXNl
bGVzcyAifjAuMTIuMCIKKyAgICBjb21iaW5lZC1zdHJlYW0gIn4xLjAuNSIKKyAgICBleHRlbmQg
In4zLjAuMCIKKyAgICBmb3JldmVyLWFnZW50ICJ+MC42LjEiCisgICAgZm9ybS1kYXRhICJ+Mi4x
LjEiCisgICAgaGFyLXZhbGlkYXRvciAifjQuMi4xIgorICAgIGhhd2sgIn4zLjEuMyIKKyAgICBo
dHRwLXNpZ25hdHVyZSAifjEuMS4wIgorICAgIGlzLXR5cGVkYXJyYXkgIn4xLjAuMCIKKyAgICBp
c3N0cmVhbSAifjAuMS4yIgorICAgIGpzb24tc3RyaW5naWZ5LXNhZmUgIn41LjAuMSIKKyAgICBt
aW1lLXR5cGVzICJ+Mi4xLjciCisgICAgb2F1dGgtc2lnbiAifjAuOC4xIgorICAgIHBlcmZvcm1h
bmNlLW5vdyAiXjAuMi4wIgorICAgIHFzICJ+Ni40LjAiCisgICAgc2FmZS1idWZmZXIgIl41LjAu
MSIKKyAgICBzdHJpbmdzdHJlYW0gIn4wLjAuNCIKKyAgICB0b3VnaC1jb29raWUgIn4yLjMuMCIK
KyAgICB0dW5uZWwtYWdlbnQgIl4wLjYuMCIKKyAgICB1dWlkICJeMy4wLjAiCisKK3JpZ2h0LWFs
aWduQF4wLjEuMToKKyAgdmVyc2lvbiAiMC4xLjMiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lz
dHJ5Lnlhcm5wa2cuY29tL3JpZ2h0LWFsaWduLy0vcmlnaHQtYWxpZ24tMC4xLjMudGd6IzYxMzM5
YjcyMmZlNmEzNTE1Njg5MjEwZDI0ZTE0Yzk2MTQ4NjEzZWYiCisgIGRlcGVuZGVuY2llczoKKyAg
ICBhbGlnbi10ZXh0ICJeMC4xLjEiCisKK3JpbXJhZkBeMi41LjEsIHJpbXJhZkBeMi42LjEsIHJp
bXJhZkAyOgorICB2ZXJzaW9uICIyLjYuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnku
eWFybnBrZy5jb20vcmltcmFmLy0vcmltcmFmLTIuNi4xLnRneiNjMjMzOGVjNjQzZGY3YTFiN2Zl
NWM1NGZhODZmNTc0MjhhNTVmMzNkIgorICBkZXBlbmRlbmNpZXM6CisgICAgZ2xvYiAiXjcuMC41
IgorCitzYWZlLWJ1ZmZlckBeNS4wLjE6CisgIHZlcnNpb24gIjUuMC4xIgorICByZXNvbHZlZCAi
aHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9zYWZlLWJ1ZmZlci8tL3NhZmUtYnVmZmVyLTUu
MC4xLnRneiNkMjYzY2E1NDY5NmNkOGEzMDZiNWNhNjU1MWU5MmRlNTc5MThmYmU3IgorCitzZW12
ZXJAXjUuMy4wOgorICB2ZXJzaW9uICI1LjMuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0
cnkueWFybnBrZy5jb20vc2VtdmVyLy0vc2VtdmVyLTUuMy4wLnRneiM5YjJjZTVkM2RlMDJkMTdj
NjAxMmFkMzI2YWE2YjRkMGNmNTRmOTRmIgorCitzZXQtYmxvY2tpbmdAfjIuMC4wOgorICB2ZXJz
aW9uICIyLjAuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vc2V0
LWJsb2NraW5nLy0vc2V0LWJsb2NraW5nLTIuMC4wLnRneiMwNDVmOTc4MmQwMTFhZTlhNjgwM2Rk
ZDM4MmIyNDM5MmIzZDg5MGY3IgorCitzZXQtaW1tZWRpYXRlLXNoaW1AXjEuMC4xOgorICB2ZXJz
aW9uICIxLjAuMSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vc2V0
LWltbWVkaWF0ZS1zaGltLy0vc2V0LWltbWVkaWF0ZS1zaGltLTEuMC4xLnRneiM0YjJiMWIyN2Vi
ODA4YTlmOGRjYzQ4MWE1OGU1ZTU2ZjU5OWYzZjYxIgorCitzZXRpbW1lZGlhdGVAXjEuMC41Ogor
ICB2ZXJzaW9uICIxLjAuNSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5j
b20vc2V0aW1tZWRpYXRlLy0vc2V0aW1tZWRpYXRlLTEuMC41LnRneiMyOTBjYmIyMzJlMzA2OTQy
ZDdkN2VhOWI4MzczMmFiNzg1NmY4Mjg1IgorCitzaWduYWwtZXhpdEBeMy4wLjA6CisgIHZlcnNp
b24gIjMuMC4yIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9zaWdu
YWwtZXhpdC8tL3NpZ25hbC1leGl0LTMuMC4yLnRneiNiNWZkYzA4ZjEyODdlYTExNzg2MjhlNDE1
ZTI1MTMyYjczNjQ2YzZkIgorCitzbGFzaEBeMS4wLjA6CisgIHZlcnNpb24gIjEuMC4wIgorICBy
ZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9zbGFzaC8tL3NsYXNoLTEuMC4w
LnRneiNjNDFmMmY2YzM5ZmMxNmQxY2QxN2FkNGI1ZDg5NjExNGFlNDcwZDU1IgorCitzbnRwQDEu
eC54OgorICB2ZXJzaW9uICIxLjAuOSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFy
bnBrZy5jb20vc250cC8tL3NudHAtMS4wLjkudGd6IzY1NDExODRjYzkwYWVlYTZjNmU3YjM1ZTI2
NTkwODI0NDNjNjYxOTgiCisgIGRlcGVuZGVuY2llczoKKyAgICBob2VrICIyLngueCIKKworc291
cmNlLW1hcC1zdXBwb3J0QF4wLjQuMjoKKyAgdmVyc2lvbiAiMC40LjE1IgorICByZXNvbHZlZCAi
aHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9zb3VyY2UtbWFwLXN1cHBvcnQvLS9zb3VyY2Ut
bWFwLXN1cHBvcnQtMC40LjE1LnRneiMwMzIwMmRmNjVjMDZkMmJkOGM3ZWMyMzYyYTE5MzA1NmZl
ZjhkM2IxIgorICBkZXBlbmRlbmNpZXM6CisgICAgc291cmNlLW1hcCAiXjAuNS42IgorCitzb3Vy
Y2UtbWFwQF4wLjUuMCwgc291cmNlLW1hcEBeMC41LjYsIHNvdXJjZS1tYXBAfjAuNS4xOgorICB2
ZXJzaW9uICIwLjUuNiIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20v
c291cmNlLW1hcC8tL3NvdXJjZS1tYXAtMC41LjYudGd6Izc1Y2UzOGY1MmJmMDczM2M1YTdmMGMx
MThkODEzMzRhMmJiNWY0MTIiCisKK3NzaHBrQF4xLjcuMDoKKyAgdmVyc2lvbiAiMS4xMy4wIgor
ICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9zc2hway8tL3NzaHBrLTEu
MTMuMC50Z3ojZmYyYTNlNGZkMDQ0OTc1NTVmZWQ5N2IzOWEwZmQ4MmZhZmIzYTMzYyIKKyAgZGVw
ZW5kZW5jaWVzOgorICAgIGFzbjEgIn4wLjIuMyIKKyAgICBhc3NlcnQtcGx1cyAiXjEuMC4wIgor
ICAgIGRhc2hkYXNoICJeMS4xMi4wIgorICAgIGdldHBhc3MgIl4wLjEuMSIKKyAgb3B0aW9uYWxE
ZXBlbmRlbmNpZXM6CisgICAgYmNyeXB0LXBia2RmICJeMS4wLjAiCisgICAgZWNjLWpzYm4gIn4w
LjEuMSIKKyAgICBqb2RpZDI1NTE5ICJeMS4wLjAiCisgICAganNibiAifjAuMS4wIgorICAgIHR3
ZWV0bmFjbCAifjAuMTQuMCIKKworc3RyaW5nX2RlY29kZXJAfjEuMC4wOgorICB2ZXJzaW9uICIx
LjAuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vc3RyaW5nX2Rl
Y29kZXIvLS9zdHJpbmdfZGVjb2Rlci0xLjAuMC50Z3ojZjA2ZjQxMTU3YjY2NGQ4NjA2OWY4NGJk
YmRjOWIwZDhhYjI4MTY2NyIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGJ1ZmZlci1zaGltcyAifjEu
MC4wIgorCitzdHJpbmctd2lkdGhAXjEuMC4xOgorICB2ZXJzaW9uICIxLjAuMiIKKyAgcmVzb2x2
ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vc3RyaW5nLXdpZHRoLy0vc3RyaW5nLXdp
ZHRoLTEuMC4yLnRneiMxMThiZGY1YjhjZGM1MWEyYTdlNzBkMjExZTA3ZTJiMGI5YjEwN2QzIgor
ICBkZXBlbmRlbmNpZXM6CisgICAgY29kZS1wb2ludC1hdCAiXjEuMC4wIgorICAgIGlzLWZ1bGx3
aWR0aC1jb2RlLXBvaW50ICJeMS4wLjAiCisgICAgc3RyaXAtYW5zaSAiXjMuMC4wIgorCitzdHJp
bmdzdHJlYW1AfjAuMC40OgorICB2ZXJzaW9uICIwLjAuNSIKKyAgcmVzb2x2ZWQgImh0dHBzOi8v
cmVnaXN0cnkueWFybnBrZy5jb20vc3RyaW5nc3RyZWFtLy0vc3RyaW5nc3RyZWFtLTAuMC41LnRn
eiM0ZTQ4NGNkNGRlNWEwYmJiZWUxOGU0NjMwNzcxMGE4YTgxNjIxODc4IgorCitzdHJpcC1hbnNp
QF4zLjAuMCwgc3RyaXAtYW5zaUBeMy4wLjE6CisgIHZlcnNpb24gIjMuMC4xIgorICByZXNvbHZl
ZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9zdHJpcC1hbnNpLy0vc3RyaXAtYW5zaS0z
LjAuMS50Z3ojNmEzODVmYjg4NTNkOTUyZDVmZjA1ZDBlOGFhZjk0Mjc4ZGM2M2RjZiIKKyAgZGVw
ZW5kZW5jaWVzOgorICAgIGFuc2ktcmVnZXggIl4yLjAuMCIKKworc3RyaXAtanNvbi1jb21tZW50
c0B+Mi4wLjE6CisgIHZlcnNpb24gIjIuMC4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3Ry
eS55YXJucGtnLmNvbS9zdHJpcC1qc29uLWNvbW1lbnRzLy0vc3RyaXAtanNvbi1jb21tZW50cy0y
LjAuMS50Z3ojM2M1MzE5NDJlOTA4YzI2OTdjMGVjMzQ0ODU4YzI4NmM3Y2EwYTYwYSIKKworc3Vw
cG9ydHMtY29sb3JAXjIuMC4wOgorICB2ZXJzaW9uICIyLjAuMCIKKyAgcmVzb2x2ZWQgImh0dHBz
Oi8vcmVnaXN0cnkueWFybnBrZy5jb20vc3VwcG9ydHMtY29sb3IvLS9zdXBwb3J0cy1jb2xvci0y
LjAuMC50Z3ojNTM1ZDA0NWNlNmI2MzYzZmE0MDExNzA4NDYyOTk5NWU5ZGYzMjRjNyIKKwordGFy
LXBhY2tAXjMuNC4wOgorICB2ZXJzaW9uICIzLjQuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVn
aXN0cnkueWFybnBrZy5jb20vdGFyLXBhY2svLS90YXItcGFjay0zLjQuMC50Z3ojMjNiZTJkN2Y2
NzFhODMzOTM3NmNiZGIwYjhmZTNmZGViZjMxNzk4NCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGRl
YnVnICJeMi4yLjAiCisgICAgZnN0cmVhbSAiXjEuMC4xMCIKKyAgICBmc3RyZWFtLWlnbm9yZSAi
XjEuMC41IgorICAgIG9uY2UgIl4xLjMuMyIKKyAgICByZWFkYWJsZS1zdHJlYW0gIl4yLjEuNCIK
KyAgICByaW1yYWYgIl4yLjUuMSIKKyAgICB0YXIgIl4yLjIuMSIKKyAgICB1aWQtbnVtYmVyICJe
MC4wLjYiCisKK3RhckBeMi4yLjE6CisgIHZlcnNpb24gIjIuMi4xIgorICByZXNvbHZlZCAiaHR0
cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS90YXIvLS90YXItMi4yLjEudGd6IzhlNGQyYTI1NmMw
ZTIxODVjNmIxOGFkNjk0YWVjOTY4YjgzY2IxZDEiCisgIGRlcGVuZGVuY2llczoKKyAgICBibG9j
ay1zdHJlYW0gIioiCisgICAgZnN0cmVhbSAiXjEuMC4yIgorICAgIGluaGVyaXRzICIyIgorCit0
by1mYXN0LXByb3BlcnRpZXNAXjEuMC4xOgorICB2ZXJzaW9uICIxLjAuMiIKKyAgcmVzb2x2ZWQg
Imh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vdG8tZmFzdC1wcm9wZXJ0aWVzLy0vdG8tZmFz
dC1wcm9wZXJ0aWVzLTEuMC4yLnRneiNmM2Y1YzBjM2JhNzI5OWE3ZWY5OTQyN2U0NDYzMzI1N2Fk
ZTQzMzIwIgorCit0b2RvbXZjLWFwcC1jc3NAXjIuMC4wOgorICB2ZXJzaW9uICIyLjEuMCIKKyAg
cmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vdG9kb212Yy1hcHAtY3NzLy0v
dG9kb212Yy1hcHAtY3NzLTIuMS4wLnRneiNiNmYyNzE2ZDMzOWFmYTJlNWY3OTkzNDdkMmE0OGIw
NTM5NjI0MmE1IgorCit0b2RvbXZjLWNvbW1vbkBeMS4wLjI6CisgIHZlcnNpb24gIjEuMC4zIgor
ICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS90b2RvbXZjLWNvbW1vbi8t
L3RvZG9tdmMtY29tbW9uLTEuMC4zLnRneiNjYmExODY4MTA5Y2FhNDAxYjkwOGViZjc3Nzk0Y2Mx
MDE0Yjc0ODczIgorCit0b3VnaC1jb29raWVAfjIuMy4wOgorICB2ZXJzaW9uICIyLjMuMiIKKyAg
cmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vdG91Z2gtY29va2llLy0vdG91
Z2gtY29va2llLTIuMy4yLnRneiNmMDgxZjc2ZTRjODU3MjBlNmMzN2E1ZmFjZWQ3MzcxNTBkODQw
NzJhIgorICBkZXBlbmRlbmNpZXM6CisgICAgcHVueWNvZGUgIl4xLjQuMSIKKwordHJpbS1yaWdo
dEBeMS4wLjE6CisgIHZlcnNpb24gIjEuMC4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3Ry
eS55YXJucGtnLmNvbS90cmltLXJpZ2h0Ly0vdHJpbS1yaWdodC0xLjAuMS50Z3ojY2IyZTEyMDMw
NjdlMGM4ZGUxZjYxNDA5NGI5ZmU0NTcwNGVhNjAwMyIKKwordHVubmVsLWFnZW50QF4wLjYuMDoK
KyAgdmVyc2lvbiAiMC42LjAiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cu
Y29tL3R1bm5lbC1hZ2VudC8tL3R1bm5lbC1hZ2VudC0wLjYuMC50Z3ojMjdhNWRlYTA2YjM2YjA0
YTBhOTk2Njc3NGIyOTA4NjhmMGZjNDBmZCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIHNhZmUtYnVm
ZmVyICJeNS4wLjEiCisKK3R3ZWV0bmFjbEBeMC4xNC4zLCB0d2VldG5hY2xAfjAuMTQuMDoKKyAg
dmVyc2lvbiAiMC4xNC41IgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNv
bS90d2VldG5hY2wvLS90d2VldG5hY2wtMC4xNC41LnRneiM1YWU2ODE3N2YxOTJkNDQ1NjI2OWQx
MDhhZmE5M2ZmODc0M2Y0ZjY0IgorCit1YS1wYXJzZXItanNAXjAuNy45OgorICB2ZXJzaW9uICIw
LjcuMTIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3VhLXBhcnNl
ci1qcy8tL3VhLXBhcnNlci1qcy0wLjcuMTIudGd6IzA0YzgxYTk5YmRkNWRjNTIyNjNlYTI5ZDI0
YzZiZjhkNDgxOGE0YmIiCisKK3VnbGlmeS1qc0BeMi40LjI0LCB1Z2xpZnktanNAXjIuNi40Ogor
ICB2ZXJzaW9uICIyLjguMjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cu
Y29tL3VnbGlmeS1qcy8tL3VnbGlmeS1qcy0yLjguMjIudGd6I2Q1NDkzNDc3OGE4ZGExNDkwM2Zh
MjlhMzI2ZmIyNGMwYWI1MWExYTAiCisgIGRlcGVuZGVuY2llczoKKyAgICBzb3VyY2UtbWFwICJ+
MC41LjEiCisgICAgeWFyZ3MgIn4zLjEwLjAiCisgIG9wdGlvbmFsRGVwZW5kZW5jaWVzOgorICAg
IHVnbGlmeS10by1icm93c2VyaWZ5ICJ+MS4wLjAiCisKK3VnbGlmeS10by1icm93c2VyaWZ5QH4x
LjAuMDoKKyAgdmVyc2lvbiAiMS4wLjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlh
cm5wa2cuY29tL3VnbGlmeS10by1icm93c2VyaWZ5Ly0vdWdsaWZ5LXRvLWJyb3dzZXJpZnktMS4w
LjIudGd6IzZlMDkyNGQ2YmRhNmI1YWZlMzQ5ZTM5YTZkNjMyODUwYTBmODgyYjciCisKK3VpZC1u
dW1iZXJAXjAuMC42OgorICB2ZXJzaW9uICIwLjAuNiIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVn
aXN0cnkueWFybnBrZy5jb20vdWlkLW51bWJlci8tL3VpZC1udW1iZXItMC4wLjYudGd6IzBlYTEw
ZTgwMzVlOGViNWI4ZTQ0NDlmMDZkYTFjNzMwNjYzYmFhODEiCisKK3VzZXItaG9tZUBeMS4xLjE6
CisgIHZlcnNpb24gIjEuMS4xIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtn
LmNvbS91c2VyLWhvbWUvLS91c2VyLWhvbWUtMS4xLjEudGd6IzJiNWJlMjNhMzJiNjNhN2M5ZGVi
OGQwZjI4ZDQ4NTcyNGEzZGYxOTAiCisKK3V0aWwtZGVwcmVjYXRlQH4xLjAuMToKKyAgdmVyc2lv
biAiMS4wLjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3V0aWwt
ZGVwcmVjYXRlLy0vdXRpbC1kZXByZWNhdGUtMS4wLjIudGd6IzQ1MGQ0ZGM5ZmE3MGRlNzMyNzYy
ZmJkMmQ0YTI4OTgxNDE5YTBjY2YiCisKK3V1aWRAXjMuMC4wOgorICB2ZXJzaW9uICIzLjAuMSIK
KyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vdXVpZC8tL3V1aWQtMy4w
LjEudGd6IzY1NDRiYmEyZGZkYThjMWNmMTdlNjI5YTNhMzA1ZTJiYjFmZWU2YzEiCisKK3Y4Zmxh
Z3NAXjIuMC4xMDoKKyAgdmVyc2lvbiAiMi4xLjEiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lz
dHJ5Lnlhcm5wa2cuY29tL3Y4ZmxhZ3MvLS92OGZsYWdzLTIuMS4xLnRneiNhYWIxYTFmYTMwZDQ1
Zjg4ZGQzMjExNDg4NzVhYzAyYzBiNTVlNWI0IgorICBkZXBlbmRlbmNpZXM6CisgICAgdXNlci1o
b21lICJeMS4xLjEiCisKK3ZlcnJvckAxLjMuNjoKKyAgdmVyc2lvbiAiMS4zLjYiCisgIHJlc29s
dmVkICJodHRwczovL3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3ZlcnJvci8tL3ZlcnJvci0xLjMuNi50
Z3ojY2ZmNWRmMTI5NDZkMjk3ZDJiYWFlZmFhMjY4OWUyNWJlMDFjMDA1YyIKKyAgZGVwZW5kZW5j
aWVzOgorICAgIGV4dHNwcmludGYgIjEuMC4yIgorCit3aGF0d2ctZmV0Y2hAPj0wLjEwLjA6Cisg
IHZlcnNpb24gIjIuMC4zIgorICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNv
bS93aGF0d2ctZmV0Y2gvLS93aGF0d2ctZmV0Y2gtMi4wLjMudGd6IzljODRlYzJkY2Y2ODE4N2Zm
MDBiYzY0ZTEyNzRiNDQyMTc2ZTFjODQiCisKK3dpZGUtYWxpZ25AXjEuMS4wOgorICB2ZXJzaW9u
ICIxLjEuMCIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vd2lkZS1h
bGlnbi8tL3dpZGUtYWxpZ24tMS4xLjAudGd6IzQwZWRkZTgwMmE3MWZlYTFmMDcwZGEzZTYyZGNk
YTJlN2FkZDk2YWQiCisgIGRlcGVuZGVuY2llczoKKyAgICBzdHJpbmctd2lkdGggIl4xLjAuMSIK
Kword2luZG93LXNpemVAMC4xLjA6CisgIHZlcnNpb24gIjAuMS4wIgorICByZXNvbHZlZCAiaHR0
cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS93aW5kb3ctc2l6ZS8tL3dpbmRvdy1zaXplLTAuMS4w
LnRneiM1NDM4Y2QyZWE5M2IyMDJlZmEzYTE5ZmU4ODg3YWVlN2M5NGY5YzlkIgorCit3b3Jkd3Jh
cEAwLjAuMjoKKyAgdmVyc2lvbiAiMC4wLjIiCisgIHJlc29sdmVkICJodHRwczovL3JlZ2lzdHJ5
Lnlhcm5wa2cuY29tL3dvcmR3cmFwLy0vd29yZHdyYXAtMC4wLjIudGd6I2I3OTY2OWJiNDJlY2I0
MDlmODNkNTgzY2FkNTJjYTE3ZWFhMTY0M2YiCisKK3dyYXBweUAxOgorICB2ZXJzaW9uICIxLjAu
MiIKKyAgcmVzb2x2ZWQgImh0dHBzOi8vcmVnaXN0cnkueWFybnBrZy5jb20vd3JhcHB5Ly0vd3Jh
cHB5LTEuMC4yLnRneiNiNTI0M2Q4ZjNlYzFhYTM1ZjEzNjQ2MDViYzBkMTAzNmUzMGFiNjlmIgor
Cit5YXJnc0B+My4xMC4wOgorICB2ZXJzaW9uICIzLjEwLjAiCisgIHJlc29sdmVkICJodHRwczov
L3JlZ2lzdHJ5Lnlhcm5wa2cuY29tL3lhcmdzLy0veWFyZ3MtMy4xMC4wLnRneiNmN2VlN2JkODU3
ZGQ3YzFkMmQzOGMwZTc0ZWZiZDY4MWQxNDMxZmQxIgorICBkZXBlbmRlbmNpZXM6CisgICAgY2Ft
ZWxjYXNlICJeMS4wLjIiCisgICAgY2xpdWkgIl4yLjEuMCIKKyAgICBkZWNhbWVsaXplICJeMS4w
LjAiCisgICAgd2luZG93LXNpemUgIjAuMS4wIgorCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>