<?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>171307</bug_id>
          
          <creation_ts>2017-04-25 18:28:57 -0700</creation_ts>
          <short_desc>Speedometer: Update the AngularJS implementation to a more recent library version</short_desc>
          <delta_ts>2017-05-13 17:39:00 -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>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=172077</see_also>
          <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>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1301384</commentid>
    <comment_count>0</comment_count>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-04-25 18:28:57 -0700</bug_when>
    <thetext>As part of Speedometer 2.0 (https://bugs.webkit.org/show_bug.cgi?id=170513), the AngularJS (1.x) implementation of TodoMVC needs to be updated to a more recent version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1301393</commentid>
    <comment_count>1</comment_count>
      <attachid>308184</attachid>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-04-25 18:42:01 -0700</bug_when>
    <thetext>Created attachment 308184
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306589</commentid>
    <comment_count>2</comment_count>
      <attachid>308184</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-05-09 14:45:55 -0700</bug_when>
    <thetext>Comment on attachment 308184
Patch

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

&gt; PerformanceTests/ChangeLog:7
&gt; +        Updates the AngularJS implementation of TodoMVC to 1.4.x

Add a blank line above this line.

&gt; PerformanceTests/ChangeLog:49
&gt; +        (isValidDottedPath):

Please remove these inline comments when files are just imported from somewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307556</commentid>
    <comment_count>3</comment_count>
      <attachid>309813</attachid>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-05-11 16:19:14 -0700</bug_when>
    <thetext>Created attachment 309813
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307557</commentid>
    <comment_count>4</comment_count>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-05-11 16:21:13 -0700</bug_when>
    <thetext>Added a blank line above 7 and removed inline comments from the changelog. PTAL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307616</commentid>
    <comment_count>5</comment_count>
      <attachid>309813</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-11 17:12:28 -0700</bug_when>
    <thetext>Comment on attachment 309813
Patch

Clearing flags on attachment: 309813

Committed r216706: &lt;http://trac.webkit.org/changeset/216706&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307617</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-11 17:12:30 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308184</attachid>
            <date>2017-04-25 18:42:01 -0700</date>
            <delta_ts>2017-05-11 16:19:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171307-20170425184200.patch</filename>
            <type>text/plain</type>
            <size>1849384</size>
            <attacher name="Addy Osmani">addyo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1NjgzCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGVjNDZiZjNlOGFh
MmIyMTYyMjE3ZWMxNDJiMGMzOWQwYTk5ZGFlZmMuLjdiMTA4Mjc0ZGM0MTUwY2YxNjVkNmM0OWIz
Y2NjYWU5NDc1YWVhNDkgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTcwIEBACisyMDE3LTA0
LTI1ICBBZGR5IE9zbWFuaSAgPGFkZHlvc21hbmlAZ21haWwuY29tPgorCisgICAgICAgIFNwZWVk
b21ldGVyOiBVcGRhdGUgdGhlIEFuZ3VsYXJKUyBpbXBsZW1lbnRhdGlvbiB0byBhIG1vcmUgcmVj
ZW50IGxpYnJhcnkgdmVyc2lvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTcxMzA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisgICAgICAgIFVwZGF0ZXMgdGhlIEFuZ3VsYXJKUyBpbXBsZW1lbnRhdGlvbiBvZiBUb2RvTVZD
IHRvIDEuNC54CisKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2Jvd2VyLmpzb246IFJlbW92ZWQuCisgICAgICAg
ICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2Fu
Z3VsYXJqcy9ib3dlcl9jb21wb25lbnRzL2FuZ3VsYXItbW9ja3MvYW5ndWxhci1tb2Nrcy5qczog
UmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2Jvd2VyX2NvbXBvbmVudHMvYW5ndWxhci9hbmd1bGFy
LmpzOiBSZW1vdmVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNv
bW1vbi9iYXNlLmNzczogUmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2Jvd2VyX2NvbXBvbmVudHMv
dG9kb212Yy1jb21tb24vYmFzZS5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2Jvd2VyX2Nv
bXBvbmVudHMvdG9kb212Yy1jb21tb24vYmcucG5nOiBSZW1vdmVkLgorICAgICAgICAqIFNwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMv
aW5kZXguaHRtbDoKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2pzL2FwcC5qczoKKyAgICAgICAgKHN0cmluZ19h
cHBlYXJlZF9oZXJlLmNvbmZpZy5yb3V0ZUNvbmZpZy5yZXNvbHZlLnN0b3JlKToKKyAgICAgICAg
KHN0cmluZ19hcHBlYXJlZF9oZXJlLmNvbmZpZyk6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9qcy9jb250cm9s
bGVycy90b2RvQ3RybC5qczoKKyAgICAgICAgKHNjb3BlLmFkZFRvZG8pOgorICAgICAgICAoc2Nv
cGUuZWRpdFRvZG8pOgorICAgICAgICAoc2NvcGUuc2F2ZUVkaXRzKToKKyAgICAgICAgKHNjb3Bl
LnJldmVydEVkaXRzKToKKyAgICAgICAgKHNjb3BlLnJlbW92ZVRvZG8pOgorICAgICAgICAoc2Nv
cGUuc2F2ZVRvZG8pOgorICAgICAgICAoc2NvcGUudG9nZ2xlQ29tcGxldGVkKToKKyAgICAgICAg
KHNjb3BlLmNsZWFyQ29tcGxldGVkVG9kb3MpOgorICAgICAgICAoc2NvcGUubWFya0FsbCk6Cisg
ICAgICAgIChUb2RvQ3RybCk6CisgICAgICAgIChzY29wZS5kb25lRWRpdGluZyk6IERlbGV0ZWQu
CisgICAgICAgIChzY29wZS5yZXZlcnRFZGl0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBTcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpz
L2pzL2RpcmVjdGl2ZXMvdG9kb0JsdXIuanM6IFJlbW92ZWQuCisgICAgICAgICogU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9qcy9k
aXJlY3RpdmVzL3RvZG9Fc2NhcGUuanM6CisgICAgICAgIChyZXR1cm4pOgorICAgICAgICAqIFNw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFy
anMvanMvZGlyZWN0aXZlcy90b2RvRm9jdXMuanM6CisgICAgICAgICh0b2RvRm9jdXMpOgorICAg
ICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9hbmd1bGFyanMvanMvc2VydmljZXMvdG9kb1N0b3JhZ2UuanM6CisgICAgICAgIChyZXR1cm4u
UHJvbWlzZS5yZXNvbHZlLnRoZW4pOgorICAgICAgICAoc3RvcmUuX2dldEZyb21Mb2NhbENhY2hl
KToKKyAgICAgICAgKHN0b3JlLl9zYXZlVG9Mb2NhbENhY2hlKToKKyAgICAgICAgKHN0b3JlLmNs
ZWFyQ29tcGxldGVkKToKKyAgICAgICAgKHN0b3JlLmRlbGV0ZSk6CisgICAgICAgIChzdG9yZS5p
bnNlcnQpOgorICAgICAgICAoc3RvcmUucHV0KToKKyAgICAgICAgKGxvY2FsU3RvcmFnZS5nZXRJ
dGVtKTogRGVsZXRlZC4KKyAgICAgICAgKGxvY2FsU3RvcmFnZS5zZXRJdGVtKTogRGVsZXRlZC4K
KyAgICAgICAgKHJldHVybi5wdXQpOiBEZWxldGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvbm9kZV9tb2R1
bGVzL2FuZ3VsYXItcmVzb3VyY2UvYW5ndWxhci1yZXNvdXJjZS5qczogQWRkZWQuCisgICAgICAg
IChpc1ZhbGlkRG90dGVkUGF0aCk6CisgICAgICAgIChzaGFsbG93Q2xlYXJBbmRDb3B5KToKKyAg
ICAgICAgKFJlc291cmNlUHJvdmlkZXIuZW5jb2RlVXJpU2VnbWVudCk6CisgICAgICAgIChSZXNv
dXJjZVByb3ZpZGVyLmVuY29kZVVyaVF1ZXJ5KToKKyAgICAgICAgKFJlc291cmNlUHJvdmlkZXIu
KToKKyAgICAgICAgKFJlc291cmNlUHJvdmlkZXIuUm91dGUucHJvdG90eXBlLik6CisgICAgICAg
IChSZXNvdXJjZVByb3ZpZGVyLlJvdXRlLnByb3RvdHlwZS5zZXRVcmxQYXJhbXMpOgorICAgICAg
ICAoUmVzb3VyY2VQcm92aWRlci5leHRyYWN0UGFyYW1zKToKKyAgICAgICAgKFJlc291cmNlUHJv
dmlkZXIuZGVmYXVsdFJlc3BvbnNlSW50ZXJjZXB0b3IpOgorICAgICAgICAoUmVzb3VyY2VQcm92
aWRlci5SZXNvdXJjZSk6CisgICAgICAgIChSZXNvdXJjZVByb3ZpZGVyLlJlc291cmNlLnByb3Rv
dHlwZS50b0pTT04pOgorICAgICAgICAoUmVzb3VyY2VQcm92aWRlci5SZXNvdXJjZS5iaW5kKToK
KyAgICAgICAgKFJlc291cmNlUHJvdmlkZXIpOgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvbm9kZV9tb2R1bGVz
L2FuZ3VsYXItcm91dGUvYW5ndWxhci1yb3V0ZS5qczogQWRkZWQuCisgICAgICAgIChzaGFsbG93
Q29weSk6CisgICAgICAgIChSb3V0ZVByb3ZpZGVyLmluaGVyaXQpOgorICAgICAgICAoUm91dGVQ
cm92aWRlci50aGlzLndoZW4pOgorICAgICAgICAoUm91dGVQcm92aWRlci4pOgorICAgICAgICAo
Um91dGVQcm92aWRlci5wYXRoUmVnRXhwKToKKyAgICAgICAgKFJvdXRlUHJvdmlkZXIudGhpcy5v
dGhlcndpc2UpOgorICAgICAgICAoUm91dGVQcm92aWRlci5yb3V0ZS5mYWtlTG9jYXRpb25FdmVu
dC5wcmV2ZW50RGVmYXVsdCk6CisgICAgICAgIChSb3V0ZVByb3ZpZGVyLnJvdXRlLnJlbG9hZCk6
CisgICAgICAgIChSb3V0ZVByb3ZpZGVyLnJvdXRlLnVwZGF0ZVBhcmFtcyk6CisgICAgICAgIChS
b3V0ZVByb3ZpZGVyLnN3aXRjaFJvdXRlTWF0Y2hlcik6CisgICAgICAgIChSb3V0ZVByb3ZpZGVy
LnByZXBhcmVSb3V0ZSk6CisgICAgICAgIChSb3V0ZVByb3ZpZGVyLmNvbW1pdFJvdXRlLmVsc2Up
OgorICAgICAgICAoUm91dGVQcm92aWRlci5jb21taXRSb3V0ZSk6CisgICAgICAgIChSb3V0ZVBy
b3ZpZGVyLmdldFRlbXBsYXRlRm9yKToKKyAgICAgICAgKFJvdXRlUHJvdmlkZXIucGFyc2VSb3V0
ZSk6CisgICAgICAgIChSb3V0ZVByb3ZpZGVyKToKKyAgICAgICAgKFJvdXRlUGFyYW1zUHJvdmlk
ZXIudGhpcyk6CisgICAgICAgIChSb3V0ZVBhcmFtc1Byb3ZpZGVyKToKKyAgICAgICAgKHJldHVy
bi5jbGVhbnVwTGFzdFZpZXcpOgorICAgICAgICAocmV0dXJuLnVwZGF0ZSk6CisgICAgICAgIChy
ZXR1cm4ubGluayk6CisgICAgICAgIChuZ1ZpZXdGYWN0b3J5KToKKyAgICAgICAgKG5nVmlld0Zp
bGxDb250ZW50RmFjdG9yeSk6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9ub2RlX21vZHVsZXMvYW5ndWxhci9h
bmd1bGFyLmpzOiBBZGRlZC4KKyAgICAgICAgKG1pbkVycik6CisgICAgICAgIChsb3dlcmNhc2Up
OgorICAgICAgICAodXBwZXJjYXNlKToKKyAgICAgICAgKG1hbnVhbExvd2VyY2FzZSk6CisgICAg
ICAgIChtYW51YWxVcHBlcmNhc2UpOgorICAgICAgICAoc3RyaW5nX2FwcGVhcmVkX2hlcmUuc3Ry
aW5nX2FwcGVhcmVkX2hlcmUudG9Mb3dlckNhc2UpOgorICAgICAgICAoaXNBcnJheUxpa2UpOgor
ICAgICAgICAoZm9yRWFjaCk6CisgICAgICAgIChmb3JFYWNoU29ydGVkKToKKyAgICAgICAgKHJl
dmVyc2VQYXJhbXMpOgorICAgICAgICAobmV4dFVpZCk6CisgICAgICAgIChzZXRIYXNoS2V5KToK
KyAgICAgICAgKGJhc2VFeHRlbmQpOgorICAgICAgICAoZXh0ZW5kKToKKyAgICAgICAgKG1lcmdl
KToKKyAgICAgICAgKHRvSW50KToKKyAgICAgICAgKGluaGVyaXQpOgorICAgICAgICAobm9vcCk6
CisgICAgICAgIChoYXNDdXN0b21Ub1N0cmluZyk6CisgICAgICAgIChpc1VuZGVmaW5lZCk6Cisg
ICAgICAgIChpc0RlZmluZWQpOgorICAgICAgICAoaXNPYmplY3QpOgorICAgICAgICAoaXNCbGFu
a09iamVjdCk6CisgICAgICAgIChpc1N0cmluZyk6CisgICAgICAgIChpc051bWJlcik6CisgICAg
ICAgIChpc0RhdGUpOgorICAgICAgICAoaXNGdW5jdGlvbik6CisgICAgICAgIChpc1JlZ0V4cCk6
CisgICAgICAgIChpc1dpbmRvdyk6CisgICAgICAgIChpc1Njb3BlKToKKyAgICAgICAgKGlzRmls
ZSk6CisgICAgICAgIChpc0Zvcm1EYXRhKToKKyAgICAgICAgKGlzQmxvYik6CisgICAgICAgIChp
c0Jvb2xlYW4pOgorICAgICAgICAoaXNQcm9taXNlTGlrZSk6CisgICAgICAgIChpc1R5cGVkQXJy
YXkpOgorICAgICAgICAodHJpbSk6CisgICAgICAgIChlc2NhcGVGb3JSZWdleHApOgorICAgICAg
ICAoaXNFbGVtZW50KToKKyAgICAgICAgKG1ha2VNYXApOgorICAgICAgICAobm9kZU5hbWVfKToK
KyAgICAgICAgKGluY2x1ZGVzKToKKyAgICAgICAgKGFycmF5UmVtb3ZlKToKKyAgICAgICAgKGNv
cHkpOgorICAgICAgICAoc2hhbGxvd0NvcHkpOgorICAgICAgICAoZXF1YWxzKToKKyAgICAgICAg
KGNzcCk6CisgICAgICAgIChqcSk6CisgICAgICAgIChzbGljZUFyZ3MpOgorICAgICAgICAoYmlu
ZCk6CisgICAgICAgICh0b0pzb25SZXBsYWNlcik6CisgICAgICAgICh0b0pzb24pOgorICAgICAg
ICAoZnJvbUpzb24pOgorICAgICAgICAodGltZXpvbmVUb09mZnNldCk6CisgICAgICAgIChhZGRE
YXRlTWludXRlcyk6CisgICAgICAgIChjb252ZXJ0VGltZXpvbmVUb0xvY2FsKToKKyAgICAgICAg
KHN0YXJ0aW5nVGFnKToKKyAgICAgICAgKHRyeURlY29kZVVSSUNvbXBvbmVudCk6CisgICAgICAg
IChwYXJzZUtleVZhbHVlKToKKyAgICAgICAgKHRvS2V5VmFsdWUpOgorICAgICAgICAoZW5jb2Rl
VXJpU2VnbWVudCk6CisgICAgICAgIChlbmNvZGVVcmlRdWVyeSk6CisgICAgICAgIChnZXROZ0F0
dHJpYnV0ZSk6CisgICAgICAgIChhbmd1bGFySW5pdCk6CisgICAgICAgIChkb0Jvb3RzdHJhcCk6
CisgICAgICAgIChhbmd1bGFyLnJlc3VtZUJvb3RzdHJhcCk6CisgICAgICAgIChyZWxvYWRXaXRo
RGVidWdJbmZvKToKKyAgICAgICAgKGdldFRlc3RhYmlsaXR5KToKKyAgICAgICAgKHNuYWtlX2Nh
c2UpOgorICAgICAgICAoYmluZEpRdWVyeS5qUXVlcnkuY2xlYW5EYXRhKToKKyAgICAgICAgKGJp
bmRKUXVlcnkpOgorICAgICAgICAoYXNzZXJ0QXJnKToKKyAgICAgICAgKGFzc2VydEFyZ0ZuKToK
KyAgICAgICAgKGFzc2VydE5vdEhhc093blByb3BlcnR5KToKKyAgICAgICAgKGdldHRlcik6Cisg
ICAgICAgIChnZXRCbG9ja05vZGVzKToKKyAgICAgICAgKGNyZWF0ZU1hcCk6CisgICAgICAgIChz
ZXR1cE1vZHVsZUxvYWRlci5lbnN1cmUpOgorICAgICAgICAoc2V0dXBNb2R1bGVMb2FkZXIuKToK
KyAgICAgICAgKHNldHVwTW9kdWxlTG9hZGVyKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcucHVi
bGlzaEV4dGVybmFsQVBJKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuYWRkRXZlbnRMaXN0ZW5l
ckZuKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcucmVtb3ZlRXZlbnRMaXN0ZW5lckZuKToKKyAg
ICAgICAgKHRvRGVidWdTdHJpbmcuSlFMaXRlLl9kYXRhKToKKyAgICAgICAgKHRvRGVidWdTdHJp
bmcuanFOZXh0SWQpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5jYW1lbENhc2UpOgorICAgICAg
ICAodG9EZWJ1Z1N0cmluZy5qcUxpdGVJc1RleHROb2RlKToKKyAgICAgICAgKHRvRGVidWdTdHJp
bmcuanFMaXRlQWNjZXB0c0RhdGEpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5qcUxpdGVIYXNE
YXRhKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuanFMaXRlQnVpbGRGcmFnbWVudCk6CisgICAg
ICAgICh0b0RlYnVnU3RyaW5nLmpxTGl0ZVBhcnNlSFRNTCk6CisgICAgICAgICh0b0RlYnVnU3Ry
aW5nLkpRTGl0ZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmpxTGl0ZUNsb25lKToKKyAgICAg
ICAgKHRvRGVidWdTdHJpbmcuanFMaXRlRGVhbG9jKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcu
anFMaXRlT2ZmKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcpOgorICAgICAgICAodG9EZWJ1Z1N0
cmluZy5qcUxpdGVFeHBhbmRvU3RvcmUpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5qcUxpdGVE
YXRhKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuanFMaXRlSGFzQ2xhc3MpOgorICAgICAgICAo
dG9EZWJ1Z1N0cmluZy5qcUxpdGVSZW1vdmVDbGFzcyk6CisgICAgICAgICh0b0RlYnVnU3RyaW5n
LmpxTGl0ZUFkZENsYXNzKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuanFMaXRlQWRkTm9kZXMp
OgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5qcUxpdGVDb250cm9sbGVyKToKKyAgICAgICAgKHRv
RGVidWdTdHJpbmcuanFMaXRlSW5oZXJpdGVkRGF0YSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5n
LmpxTGl0ZVJlbW92ZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmpxTGl0ZURvY3VtZW50TG9h
ZGVkKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuSlFMaXRlUHJvdG90eXBlLkpRTGl0ZS5wcm90
b3R5cGUudHJpZ2dlcik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkpRTGl0ZVByb3RvdHlwZS5K
UUxpdGUucHJvdG90eXBlLnJlYWR5KToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuSlFMaXRlUHJv
dG90eXBlLkpRTGl0ZS5wcm90b3R5cGUudG9TdHJpbmcpOgorICAgICAgICAodG9EZWJ1Z1N0cmlu
Zy5KUUxpdGVQcm90b3R5cGUuSlFMaXRlLnByb3RvdHlwZS5lcSk6CisgICAgICAgICh0b0RlYnVn
U3RyaW5nLmdldEJvb2xlYW5BdHRyTmFtZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmdldEFs
aWFzZWRBdHRyTmFtZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmZvckVhY2gpOgorICAgICAg
ICAodG9EZWJ1Z1N0cmluZy5mb3JFYWNoLik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLik6Cisg
ICAgICAgICh0b0RlYnVnU3RyaW5nLmV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCk6CisgICAgICAg
ICh0b0RlYnVnU3RyaW5nLmV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbik6CisgICAgICAg
ICh0b0RlYnVnU3RyaW5nLmV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKToKKyAg
ICAgICAgKHRvRGVidWdTdHJpbmcuZXZlbnRIYW5kbGVyKToKKyAgICAgICAgKHRvRGVidWdTdHJp
bmcuanFMaXRlUHJvdmlkZXIudGhpcy5qcUxpdGUuKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcu
anFMaXRlUHJvdmlkZXIudGhpcyk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnRoaXMubmV4dFVp
ZCk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkhhc2hNYXApOgorICAgICAgICAodG9EZWJ1Z1N0
cmluZy5IYXNoTWFwLnByb3RvdHlwZS5wdXQpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5IYXNo
TWFwLnByb3RvdHlwZS5yZW1vdmUpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy50aGlzKToKKyAg
ICAgICAgKHRvRGVidWdTdHJpbmcuSGFzaE1hcFByb3ZpZGVyKToKKyAgICAgICAgKHRvRGVidWdT
dHJpbmcuYW5vbkZuKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuYW5ub3RhdGUpOgorICAgICAg
ICAodG9EZWJ1Z1N0cmluZy5zdXBwb3J0T2JqZWN0KToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcu
cHJvdmlkZXIpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5yZXR1cm4uZW5mb3JjZWRSZXR1cm5W
YWx1ZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmVuZm9yY2VSZXR1cm5WYWx1ZSk6CisgICAg
ICAgICh0b0RlYnVnU3RyaW5nLmZhY3RvcnkpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5nZXQg
c2VydmljZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnZhbHVlKToKKyAgICAgICAgKHRvRGVi
dWdTdHJpbmcuY29uc3RhbnQpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5nZXQgcmV0dXJuKToK
KyAgICAgICAgKHRvRGVidWdTdHJpbmcub3JpZ1Byb3ZpZGVyKToKKyAgICAgICAgKHRvRGVidWdT
dHJpbmcuZ2V0U2VydmljZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmludm9rZSk6CisgICAg
ICAgICh0b0RlYnVnU3RyaW5nLmluc3RhbnRpYXRlKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcu
cmV0dXJuLmhhcyk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkFuY2hvclNjcm9sbFByb3ZpZGVy
LnRoaXMuZGlzYWJsZUF1dG9TY3JvbGxpbmcpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5BbmNo
b3JTY3JvbGxQcm92aWRlci5nZXRGaXJzdEFuY2hvcik6CisgICAgICAgICh0b0RlYnVnU3RyaW5n
LkFuY2hvclNjcm9sbFByb3ZpZGVyLmdldFlPZmZzZXQpOgorICAgICAgICAodG9EZWJ1Z1N0cmlu
Zy5BbmNob3JTY3JvbGxQcm92aWRlci5zY3JvbGxUbyk6CisgICAgICAgICh0b0RlYnVnU3RyaW5n
LkFuY2hvclNjcm9sbFByb3ZpZGVyLnNjcm9sbCk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkFu
Y2hvclNjcm9sbFByb3ZpZGVyLik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkFuY2hvclNjcm9s
bFByb3ZpZGVyKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcubWVyZ2VDbGFzc2VzKToKKyAgICAg
ICAgKHRvRGVidWdTdHJpbmcuZXh0cmFjdEVsZW1lbnROb2RlKToKKyAgICAgICAgKHRvRGVidWdT
dHJpbmcuc3BsaXRDbGFzc2VzKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcucHJlcGFyZUFuaW1h
dGVPcHRpb25zKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuQW5pbWF0ZVJ1bm5lcik6CisgICAg
ICAgICh0b0RlYnVnU3RyaW5nLkFuaW1hdGVSdW5uZXIucHJvdG90eXBlLnRoZW4pOgorICAgICAg
ICAodG9EZWJ1Z1N0cmluZy5Db3JlQW5pbWF0ZVJ1bm5lclByb3ZpZGVyKToKKyAgICAgICAgKHRv
RGVidWdTdHJpbmcucmV0dXJuLnB1c2gpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5hZGRSZW1v
dmVDbGFzc2VzUG9zdERpZ2VzdCk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkNvcmVBbmltYXRl
UXVldWVQcm92aWRlcik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnRoaXMucmVnaXN0ZXIpOgor
ICAgICAgICAodG9EZWJ1Z1N0cmluZy50aGlzLmNsYXNzTmFtZUZpbHRlcik6CisgICAgICAgICh0
b0RlYnVnU3RyaW5nLmRvbUluc2VydCk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnJldHVybi5j
YW5jZWwpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5yZXR1cm4uZW50ZXIpOgorICAgICAgICAo
dG9EZWJ1Z1N0cmluZy5yZXR1cm4ubW92ZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnJldHVy
bi5sZWF2ZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnJldHVybi5hZGRDbGFzcyk6CisgICAg
ICAgICh0b0RlYnVnU3RyaW5nLnJldHVybi5yZW1vdmVDbGFzcyk6CisgICAgICAgICh0b0RlYnVn
U3RyaW5nLnJldHVybi5zZXRDbGFzcyk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnJldHVybi5h
bmltYXRlKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuQXN5bmNDYWxsYmFja1Byb3ZpZGVyLik6
CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkFzeW5jQ2FsbGJhY2tQcm92aWRlcik6CisgICAgICAg
ICh0b0RlYnVnU3RyaW5nLnNlbGYuaW5jT3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQpOgorICAgICAg
ICAodG9EZWJ1Z1N0cmluZy5jb21wbGV0ZU91dHN0YW5kaW5nUmVxdWVzdCk6CisgICAgICAgICh0
b0RlYnVnU3RyaW5nLmdldEhhc2gpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5zZWxmLm5vdGlm
eVdoZW5Ob091dHN0YW5kaW5nUmVxdWVzdHMpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5zZWxm
LnVybCk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnNlbGYuc3RhdGUpOgorICAgICAgICAodG9E
ZWJ1Z1N0cmluZy5jYWNoZVN0YXRlQW5kRmlyZVVybENoYW5nZSk6CisgICAgICAgICh0b0RlYnVn
U3RyaW5nLmdldEN1cnJlbnRTdGF0ZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmNhY2hlU3Rh
dGUpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5maXJlVXJsQ2hhbmdlKToKKyAgICAgICAgKHRv
RGVidWdTdHJpbmcuc2VsZi5vblVybENoYW5nZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnNl
bGYuYXBwbGljYXRpb25EZXN0cm95ZWQpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5zZWxmLmJh
c2VIcmVmKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuc2VsZi5kZWZlcik6CisgICAgICAgICh0
b0RlYnVnU3RyaW5nLnNlbGYuZGVmZXIuY2FuY2VsKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcu
QnJvd3Nlcik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkJyb3dzZXJQcm92aWRlcik6CisgICAg
ICAgICh0b0RlYnVnU3RyaW5nLkNhY2hlRmFjdG9yeVByb3ZpZGVyLnJldHVybi5jYWNoZXMuY2Fj
aGVJZC5wdXQpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5DYWNoZUZhY3RvcnlQcm92aWRlci5y
ZXR1cm4uY2FjaGVzLmNhY2hlSWQuZ2V0IGlmKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuQ2Fj
aGVGYWN0b3J5UHJvdmlkZXIucmV0dXJuLmNhY2hlcy5jYWNoZUlkKToKKyAgICAgICAgKHRvRGVi
dWdTdHJpbmcuQ2FjaGVGYWN0b3J5UHJvdmlkZXIucmV0dXJuLmNhY2hlcy5jYWNoZUlkLnJlbW92
ZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkNhY2hlRmFjdG9yeVByb3ZpZGVyLnJldHVybi5j
YWNoZXMuY2FjaGVJZC5yZW1vdmVBbGwpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5DYWNoZUZh
Y3RvcnlQcm92aWRlci5yZXR1cm4uY2FjaGVzLmNhY2hlSWQuZGVzdHJveSk6CisgICAgICAgICh0
b0RlYnVnU3RyaW5nLkNhY2hlRmFjdG9yeVByb3ZpZGVyLnJldHVybi5jYWNoZXMuY2FjaGVJZC5p
bmZvKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuQ2FjaGVGYWN0b3J5UHJvdmlkZXIuKToKKyAg
ICAgICAgKHRvRGVidWdTdHJpbmcuQ2FjaGVGYWN0b3J5UHJvdmlkZXIubGluayk6CisgICAgICAg
ICh0b0RlYnVnU3RyaW5nLkNhY2hlRmFjdG9yeVByb3ZpZGVyLmNhY2hlRmFjdG9yeS5pbmZvKToK
KyAgICAgICAgKHRvRGVidWdTdHJpbmcuQ2FjaGVGYWN0b3J5UHJvdmlkZXIuY2FjaGVGYWN0b3J5
KToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuQ2FjaGVGYWN0b3J5UHJvdmlkZXIudGhpcyk6Cisg
ICAgICAgICh0b0RlYnVnU3RyaW5nLkNhY2hlRmFjdG9yeVByb3ZpZGVyKToKKyAgICAgICAgKHRv
RGVidWdTdHJpbmcuVGVtcGxhdGVDYWNoZVByb3ZpZGVyKToKKyAgICAgICAgKHRvRGVidWdTdHJp
bmcucGFyc2VEaXJlY3RpdmVCaW5kaW5ncyk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmFzc2Vy
dFZhbGlkRGlyZWN0aXZlTmFtZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnRoaXMuZGlyZWN0
aXZlKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcudGhpcy5hSHJlZlNhbml0aXphdGlvbldoaXRl
bGlzdCk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnRoaXMuaW1nU3JjU2FuaXRpemF0aW9uV2hp
dGVsaXN0KToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcudGhpcy5kZWJ1Z0luZm9FbmFibGVkKToK
KyAgICAgICAgKHRvRGVidWdTdHJpbmcuQXR0cmlidXRlcyk6CisgICAgICAgICh0b0RlYnVnU3Ry
aW5nLkF0dHJpYnV0ZXMucHJvdG90eXBlLmFkZENsYXNzKToKKyAgICAgICAgKHRvRGVidWdTdHJp
bmcuQXR0cmlidXRlcy5wcm90b3R5cGUucmVtb3ZlQ2xhc3MpOgorICAgICAgICAodG9EZWJ1Z1N0
cmluZy5BdHRyaWJ1dGVzLnByb3RvdHlwZS51cGRhdGVDbGFzcyk6CisgICAgICAgICh0b0RlYnVn
U3RyaW5nLkF0dHJpYnV0ZXMucHJvdG90eXBlLnNldCB2YXIpOgorICAgICAgICAodG9EZWJ1Z1N0
cmluZy5BdHRyaWJ1dGVzLnByb3RvdHlwZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkF0dHJp
YnV0ZXMucHJvdG90eXBlLm9ic2VydmUpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5zYWZlQWRk
Q2xhc3MpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5kZW5vcm1hbGl6ZVRlbXBsYXRlLmlkZW50
aXR5KToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuY29tcGlsZS5hZGRCaW5kaW5nSW5mby5kZWJ1
Z0luZm9FbmFibGVkLmFkZEJpbmRpbmdJbmZvKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuY29t
cGlsZS5hZGRCaW5kaW5nQ2xhc3MuZGVidWdJbmZvRW5hYmxlZC5hZGRCaW5kaW5nQ2xhc3MpOgor
ICAgICAgICAodG9EZWJ1Z1N0cmluZy5jb21waWxlLmFkZFNjb3BlSW5mby5kZWJ1Z0luZm9FbmFi
bGVkLmFkZFNjb3BlSW5mbyk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmNvbXBpbGUuYWRkU2Nv
cGVDbGFzcy5kZWJ1Z0luZm9FbmFibGVkLmFkZFNjb3BlQ2xhc3MpOgorICAgICAgICAodG9EZWJ1
Z1N0cmluZy5yZXR1cm4ucHVibGljTGlua0ZuKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuY29t
cGlsZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmRldGVjdE5hbWVzcGFjZUZvckNoaWxkRWxl
bWVudHMpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5jb21wb3NpdGVMaW5rRm4pOgorICAgICAg
ICAodG9EZWJ1Z1N0cmluZy5jb21waWxlTm9kZXMpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5i
b3VuZFRyYW5zY2x1ZGVGbik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmNyZWF0ZUJvdW5kVHJh
bnNjbHVkZUZuKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuY29sbGVjdERpcmVjdGl2ZXMpOgor
ICAgICAgICAodG9EZWJ1Z1N0cmluZy5ncm91cFNjYW4pOgorICAgICAgICAodG9EZWJ1Z1N0cmlu
Zy5ncm91cEVsZW1lbnRzTGlua0ZuV3JhcHBlcik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmFk
ZExpbmtGbnMpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5nZXRDb250cm9sbGVycyk6CisgICAg
ICAgICh0b0RlYnVnU3RyaW5nLnNldHVwQ29udHJvbGxlcnMpOgorICAgICAgICAodG9EZWJ1Z1N0
cmluZy5ub2RlTGlua0ZuKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuYXBwbHlEaXJlY3RpdmVz
VG9Ob2RlKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcubWFya0RpcmVjdGl2ZXNBc0lzb2xhdGUp
OgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5kaXJlY3RpdmVJc011bHRpRWxlbWVudCk6CisgICAg
ICAgICh0b0RlYnVnU3RyaW5nLm1lcmdlVGVtcGxhdGVBdHRyaWJ1dGVzKToKKyAgICAgICAgKHRv
RGVidWdTdHJpbmcucmV0dXJuLmRlbGF5ZWROb2RlTGlua0ZuKToKKyAgICAgICAgKHRvRGVidWdT
dHJpbmcuYnlQcmlvcml0eSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLndyYXBNb2R1bGVOYW1l
SWZEZWZpbmVkKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuYXNzZXJ0Tm9EdXBsaWNhdGUpOgor
ICAgICAgICAodG9EZWJ1Z1N0cmluZy5kaXJlY3RpdmVzLnB1c2guKToKKyAgICAgICAgKHRvRGVi
dWdTdHJpbmcuZGlyZWN0aXZlcy5wdXNoKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuYWRkVGV4
dEludGVycG9sYXRlRGlyZWN0aXZlKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuZ2V0VHJ1c3Rl
ZENvbnRleHQpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5hZGRBdHRySW50ZXJwb2xhdGVEaXJl
Y3RpdmUpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5jbG9uZUFuZEFubm90YXRlRm4pOgorICAg
ICAgICAodG9EZWJ1Z1N0cmluZy5pbnZva2VMaW5rRm4pOgorICAgICAgICAodG9EZWJ1Z1N0cmlu
Zy5kZXN0cm95QmluZGluZ3Mub25OZXdTY29wZURlc3Ryb3llZC5kZXN0cm95QmluZGluZ3MpOgor
ICAgICAgICAodG9EZWJ1Z1N0cmluZy5pbml0aWFsaXplRGlyZWN0aXZlQmluZGluZ3MpOgorICAg
ICAgICAodG9EZWJ1Z1N0cmluZy5Db21waWxlUHJvdmlkZXIpOgorICAgICAgICAodG9EZWJ1Z1N0
cmluZy5kaXJlY3RpdmVOb3JtYWxpemUpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5ub2Rlc2V0
TGlua2luZ0ZuKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuZGlyZWN0aXZlTGlua2luZ0ZuKToK
KyAgICAgICAgKHRvRGVidWdTdHJpbmcudG9rZW5EaWZmZXJlbmNlKToKKyAgICAgICAgKHRvRGVi
dWdTdHJpbmcucmVtb3ZlQ29tbWVudHMpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5Db250cm9s
bGVyUHJvdmlkZXIudGhpcy5yZWdpc3Rlcik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkNvbnRy
b2xsZXJQcm92aWRlci50aGlzLmFsbG93R2xvYmFscyk6CisgICAgICAgICh0b0RlYnVnU3RyaW5n
LkNvbnRyb2xsZXJQcm92aWRlci5hZGRJZGVudGlmaWVyKToKKyAgICAgICAgKHRvRGVidWdTdHJp
bmcuQ29udHJvbGxlclByb3ZpZGVyKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuRG9jdW1lbnRQ
cm92aWRlcik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkV4Y2VwdGlvbkhhbmRsZXJQcm92aWRl
cik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkh0dHBQYXJhbVNlcmlhbGl6ZXJQcm92aWRlci5y
ZXR1cm4ubmdQYXJhbVNlcmlhbGl6ZXIpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5IdHRwUGFy
YW1TZXJpYWxpemVyUHJvdmlkZXIudGhpcyk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkh0dHBQ
YXJhbVNlcmlhbGl6ZXJQcm92aWRlcik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkh0dHBQYXJh
bVNlcmlhbGl6ZXJKUUxpa2VQcm92aWRlci5yZXR1cm4ualF1ZXJ5TGlrZVBhcmFtU2VyaWFsaXpl
ci5wYXJhbXMuc2VyaWFsaXplKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuSHR0cFBhcmFtU2Vy
aWFsaXplckpRTGlrZVByb3ZpZGVyLnJldHVybi5qUXVlcnlMaWtlUGFyYW1TZXJpYWxpemVyKToK
KyAgICAgICAgKHRvRGVidWdTdHJpbmcuSHR0cFBhcmFtU2VyaWFsaXplckpRTGlrZVByb3ZpZGVy
LnRoaXMpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5IdHRwUGFyYW1TZXJpYWxpemVySlFMaWtl
UHJvdmlkZXIpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5kZWZhdWx0SHR0cFJlc3BvbnNlVHJh
bnNmb3JtKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuaXNKc29uTGlrZSk6CisgICAgICAgICh0
b0RlYnVnU3RyaW5nLnBhcnNlSGVhZGVycy5oZWFkZXJzLmZpbGxJblBhcnNlZCk6CisgICAgICAg
ICh0b0RlYnVnU3RyaW5nLnBhcnNlSGVhZGVycyk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmhl
YWRlcnNHZXR0ZXIpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy50cmFuc2Zvcm1EYXRhKToKKyAg
ICAgICAgKHRvRGVidWdTdHJpbmcuaXNTdWNjZXNzKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcu
SHR0cFByb3ZpZGVyLmRlZmF1bHRzLnRoaXMuZGVmYXVsdHMudHJhbnNmb3JtUmVxdWVzdCk6Cisg
ICAgICAgICh0b0RlYnVnU3RyaW5nLkh0dHBQcm92aWRlci50aGlzLnVzZUFwcGx5QXN5bmMpOgor
ICAgICAgICAodG9EZWJ1Z1N0cmluZy5IdHRwUHJvdmlkZXIuaHR0cC5yZXF1ZXN0Q29uZmlnLnNl
cnZlclJlcXVlc3QpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5IdHRwUHJvdmlkZXIuaHR0cC5y
ZXF1ZXN0Q29uZmlnLnByb21pc2Uuc3VjY2Vzcyk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkh0
dHBQcm92aWRlci5odHRwLnJlcXVlc3RDb25maWcucHJvbWlzZS5lcnJvcik6CisgICAgICAgICh0
b0RlYnVnU3RyaW5nLkh0dHBQcm92aWRlci5odHRwLnJlcXVlc3RDb25maWcudHJhbnNmb3JtUmVz
cG9uc2UpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5IdHRwUHJvdmlkZXIuaHR0cC5yZXF1ZXN0
Q29uZmlnLmV4ZWN1dGVIZWFkZXJGbnMpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5IdHRwUHJv
dmlkZXIuaHR0cC5yZXF1ZXN0Q29uZmlnLm1lcmdlSGVhZGVycyk6CisgICAgICAgICh0b0RlYnVn
U3RyaW5nLkh0dHBQcm92aWRlci4pOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5IdHRwUHJvdmlk
ZXIuY3JlYXRlU2hvcnRNZXRob2RzLm5hbWVzLmh0dHAubmFtZSk6CisgICAgICAgICh0b0RlYnVn
U3RyaW5nLkh0dHBQcm92aWRlci5jcmVhdGVTaG9ydE1ldGhvZHMpOgorICAgICAgICAodG9EZWJ1
Z1N0cmluZy5IdHRwUHJvdmlkZXIuY3JlYXRlU2hvcnRNZXRob2RzV2l0aERhdGEubmFtZS5odHRw
Lm5hbWUpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5IdHRwUHJvdmlkZXIucmVxRGF0YS5zdGF0
dXNUZXh0LnJlc29sdmVIdHRwUHJvbWlzZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkh0dHBQ
cm92aWRlci5yZXFEYXRhLmRvbmUpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5IdHRwUHJvdmlk
ZXIucmVxRGF0YS5yZXNvbHZlUHJvbWlzZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkh0dHBQ
cm92aWRlci5yZXFEYXRhLnJlc29sdmVQcm9taXNlV2l0aFJlc3VsdCk6CisgICAgICAgICh0b0Rl
YnVnU3RyaW5nLkh0dHBQcm92aWRlci5yZXFEYXRhLnJlbW92ZVBlbmRpbmdSZXEpOgorICAgICAg
ICAodG9EZWJ1Z1N0cmluZy5IdHRwUHJvdmlkZXIuYnVpbGRVcmwpOgorICAgICAgICAodG9EZWJ1
Z1N0cmluZy5IdHRwUHJvdmlkZXIpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5jcmVhdGVYaHIp
OgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5IdHRwQmFja2VuZFByb3ZpZGVyKToKKyAgICAgICAg
KHRvRGVidWdTdHJpbmcucmF3RG9jdW1lbnQubG93ZXJjYXNlLnN0cmluZ19hcHBlYXJlZF9oZXJl
LmNhbGxiYWNrcy5jYWxsYmFja0lkKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcucmF3RG9jdW1l
bnQuZWxzZS54aHIub25sb2FkKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcucmF3RG9jdW1lbnQu
ZWxzZS5yZXF1ZXN0RXJyb3IpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5yYXdEb2N1bWVudC50
aW1lb3V0UmVxdWVzdCk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnJhd0RvY3VtZW50LmNvbXBs
ZXRlUmVxdWVzdCk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnJhd0RvY3VtZW50LmRvbmUuY2Fs
bGJhY2spOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5yYXdEb2N1bWVudC5qc29ucFJlcSk6Cisg
ICAgICAgICh0b0RlYnVnU3RyaW5nLmNyZWF0ZUh0dHBCYWNrZW5kKToKKyAgICAgICAgKHRvRGVi
dWdTdHJpbmcuaW50ZXJwb2xhdGVNaW5FcnIudGhyb3dOb2NvbmNhdCk6CisgICAgICAgICh0b0Rl
YnVnU3RyaW5nLmludGVycG9sYXRlTWluRXJyLmludGVycik6CisgICAgICAgICh0b0RlYnVnU3Ry
aW5nLkludGVycG9sYXRlUHJvdmlkZXIudGhpcy5zdGFydFN5bWJvbCk6CisgICAgICAgICh0b0Rl
YnVnU3RyaW5nLkludGVycG9sYXRlUHJvdmlkZXIudGhpcy5lbmRTeW1ib2wpOgorICAgICAgICAo
dG9EZWJ1Z1N0cmluZy5JbnRlcnBvbGF0ZVByb3ZpZGVyLmVzY2FwZSk6CisgICAgICAgICh0b0Rl
YnVnU3RyaW5nLkludGVycG9sYXRlUHJvdmlkZXIudW5lc2NhcGVUZXh0KToKKyAgICAgICAgKHRv
RGVidWdTdHJpbmcuSW50ZXJwb2xhdGVQcm92aWRlci5zdHJpbmdpZnkpOgorICAgICAgICAodG9E
ZWJ1Z1N0cmluZy5JbnRlcnBvbGF0ZVByb3ZpZGVyLmFsbE9yTm90aGluZy5tdXN0SGF2ZUV4cHJl
c3Npb24uZXhwcmVzc2lvbnMubGVuZ3RoLmNvbXB1dGUpOgorICAgICAgICAodG9EZWJ1Z1N0cmlu
Zy5JbnRlcnBvbGF0ZVByb3ZpZGVyLmFsbE9yTm90aGluZy5tdXN0SGF2ZUV4cHJlc3Npb24uZXhw
cmVzc2lvbnMubGVuZ3RoLmdldFZhbHVlKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuSW50ZXJw
b2xhdGVQcm92aWRlci5hbGxPck5vdGhpbmcubXVzdEhhdmVFeHByZXNzaW9uLmV4cHJlc3Npb25z
Lmxlbmd0aC5yZXR1cm4uZXh0ZW5kLmludGVycG9sYXRpb25Gbik6CisgICAgICAgICh0b0RlYnVn
U3RyaW5nLkludGVycG9sYXRlUHJvdmlkZXIuYWxsT3JOb3RoaW5nLm11c3RIYXZlRXhwcmVzc2lv
bi5leHByZXNzaW9ucy5sZW5ndGgud2F0Y2hEZWxlZ2F0ZSk6CisgICAgICAgICh0b0RlYnVnU3Ry
aW5nLkludGVycG9sYXRlUHJvdmlkZXIuYWxsT3JOb3RoaW5nKToKKyAgICAgICAgKHRvRGVidWdT
dHJpbmcuSW50ZXJwb2xhdGVQcm92aWRlci5pbnRlcnBvbGF0ZSk6CisgICAgICAgICh0b0RlYnVn
U3RyaW5nLkludGVycG9sYXRlUHJvdmlkZXIuaW50ZXJwb2xhdGUuc3RhcnRTeW1ib2wpOgorICAg
ICAgICAodG9EZWJ1Z1N0cmluZy5JbnRlcnBvbGF0ZVByb3ZpZGVyLmludGVycG9sYXRlLmVuZFN5
bWJvbCk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkludGVycG9sYXRlUHJvdmlkZXIpOgorICAg
ICAgICAodG9EZWJ1Z1N0cmluZy5JbnRlcnZhbFByb3ZpZGVyLmludm9rZUFwcGx5LmZuKToKKyAg
ICAgICAgKHRvRGVidWdTdHJpbmcuSW50ZXJ2YWxQcm92aWRlci5pbnZva2VBcHBseS5wcm9taXNl
LmludGVydmFsSWQuc2V0SW50ZXJ2YWwudGljayk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLklu
dGVydmFsUHJvdmlkZXIuKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuSW50ZXJ2YWxQcm92aWRl
ci5pbnRlcnZhbC5jYW5jZWwpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5JbnRlcnZhbFByb3Zp
ZGVyKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuTG9jYWxlUHJvdmlkZXIucmV0dXJuLnBsdXJh
bENhdCk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkxvY2FsZVByb3ZpZGVyLnRoaXMpOgorICAg
ICAgICAodG9EZWJ1Z1N0cmluZy5Mb2NhbGVQcm92aWRlcik6CisgICAgICAgICh0b0RlYnVnU3Ry
aW5nLmVuY29kZVBhdGgpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5wYXJzZUFic29sdXRlVXJs
KToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcucGFyc2VBcHBVcmwpOgorICAgICAgICAodG9EZWJ1
Z1N0cmluZy5iZWdpbnNXaXRoKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuc3RyaXBIYXNoKToK
KyAgICAgICAgKHRvRGVidWdTdHJpbmcudHJpbUVtcHR5SGFzaCk6CisgICAgICAgICh0b0RlYnVn
U3RyaW5nLnN0cmlwRmlsZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnNlcnZlckJhc2UpOgor
ICAgICAgICAodG9EZWJ1Z1N0cmluZy5iYXNlUHJlZml4LnRoaXMucGFyc2UpOgorICAgICAgICAo
dG9EZWJ1Z1N0cmluZy5iYXNlUHJlZml4LnRoaXMuY29tcG9zZSk6CisgICAgICAgICh0b0RlYnVn
U3RyaW5nLmJhc2VQcmVmaXgudGhpcy5wYXJzZUxpbmtVcmwpOgorICAgICAgICAodG9EZWJ1Z1N0
cmluZy5Mb2NhdGlvbkh0bWw1VXJsKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuaGFzaFByZWZp
eC5yZW1vdmVXaW5kb3dzRHJpdmVOYW1lKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuaGFzaFBy
ZWZpeC50aGlzLnBhcnNlKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuaGFzaFByZWZpeC50aGlz
LmNvbXBvc2UpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5oYXNoUHJlZml4LnRoaXMucGFyc2VM
aW5rVXJsKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuTG9jYXRpb25IYXNoYmFuZ1VybCk6Cisg
ICAgICAgICh0b0RlYnVnU3RyaW5nLkxvY2F0aW9uSGFzaGJhbmdJbkh0bWw1VXJsKToKKyAgICAg
ICAgKHRvRGVidWdTdHJpbmcubG9jYXRpb25Qcm90b3R5cGUudXJsKToKKyAgICAgICAgKHRvRGVi
dWdTdHJpbmcubG9jYXRpb25Qcm90b3R5cGUuc2VhcmNoKToKKyAgICAgICAgKHRvRGVidWdTdHJp
bmcubG9jYXRpb25Qcm90b3R5cGUucmVwbGFjZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkxv
Y2F0aW9uLnByb3RvdHlwZS5zdGF0ZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmxvY2F0aW9u
R2V0dGVyKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcubG9jYXRpb25HZXR0ZXJTZXR0ZXIpOgor
ICAgICAgICAodG9EZWJ1Z1N0cmluZy5Mb2NhdGlvblByb3ZpZGVyLnRoaXMuaGFzaFByZWZpeCk6
CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkxvY2F0aW9uUHJvdmlkZXIudGhpcy5odG1sNU1vZGUp
OgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5Mb2NhdGlvblByb3ZpZGVyLnNldEJyb3dzZXJVcmxX
aXRoRmFsbGJhY2spOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5Mb2NhdGlvblByb3ZpZGVyLnJv
b3RTY29wZS53YXRjaC5sb2NhdGlvbldhdGNoKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuTG9j
YXRpb25Qcm92aWRlci5hZnRlckxvY2F0aW9uQ2hhbmdlKToKKyAgICAgICAgKHRvRGVidWdTdHJp
bmcuTG9jYXRpb25Qcm92aWRlcik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkxvZ1Byb3ZpZGVy
LnRoaXMuZGVidWdFbmFibGVkKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuTG9nUHJvdmlkZXIu
cmV0dXJuLmRlYnVnKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuTG9nUHJvdmlkZXIuZm9ybWF0
RXJyb3IpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5Mb2dQcm92aWRlci5jb25zb2xlTG9nKToK
KyAgICAgICAgKHRvRGVidWdTdHJpbmcuTG9nUHJvdmlkZXIpOgorICAgICAgICAodG9EZWJ1Z1N0
cmluZy5lbnN1cmVTYWZlTWVtYmVyTmFtZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmVuc3Vy
ZVNhZmVPYmplY3QpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5lbnN1cmVTYWZlRnVuY3Rpb24p
OgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5MZXhlcik6CisgICAgICAgICh0b0RlYnVnU3RyaW5n
LkxleGVyLnByb3RvdHlwZS5sZXgpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5MZXhlci5wcm90
b3R5cGUuaXMpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5MZXhlci5wcm90b3R5cGUucGVlayk6
CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkxleGVyLnByb3RvdHlwZS5pc051bWJlcik6CisgICAg
ICAgICh0b0RlYnVnU3RyaW5nLkxleGVyLnByb3RvdHlwZS5pc1doaXRlc3BhY2UpOgorICAgICAg
ICAodG9EZWJ1Z1N0cmluZy5MZXhlci5wcm90b3R5cGUuaXNJZGVudCk6CisgICAgICAgICh0b0Rl
YnVnU3RyaW5nLkxleGVyLnByb3RvdHlwZS5pc0V4cE9wZXJhdG9yKToKKyAgICAgICAgKHRvRGVi
dWdTdHJpbmcuTGV4ZXIucHJvdG90eXBlLnRocm93RXJyb3IpOgorICAgICAgICAodG9EZWJ1Z1N0
cmluZy5MZXhlci5wcm90b3R5cGUucmVhZE51bWJlcik6CisgICAgICAgICh0b0RlYnVnU3RyaW5n
LkxleGVyLnByb3RvdHlwZS5yZWFkSWRlbnQpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5MZXhl
ci5wcm90b3R5cGUucmVhZFN0cmluZyk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkFTVCk6Cisg
ICAgICAgICh0b0RlYnVnU3RyaW5nLkFTVC5wcm90b3R5cGUuYXN0KToKKyAgICAgICAgKHRvRGVi
dWdTdHJpbmcuQVNULnByb3RvdHlwZS5wcm9ncmFtKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcu
QVNULnByb3RvdHlwZS5leHByZXNzaW9uU3RhdGVtZW50KToKKyAgICAgICAgKHRvRGVidWdTdHJp
bmcuQVNULnByb3RvdHlwZS5maWx0ZXJDaGFpbik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkFT
VC5wcm90b3R5cGUuZXhwcmVzc2lvbik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkFTVC5wcm90
b3R5cGUuYXNzaWdubWVudCk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkFTVC5wcm90b3R5cGUu
dGVybmFyeSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkFTVC5wcm90b3R5cGUubG9naWNhbE9S
KToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuQVNULnByb3RvdHlwZS5sb2dpY2FsQU5EKToKKyAg
ICAgICAgKHRvRGVidWdTdHJpbmcuQVNULnByb3RvdHlwZS5lcXVhbGl0eSk6CisgICAgICAgICh0
b0RlYnVnU3RyaW5nLkFTVC5wcm90b3R5cGUucmVsYXRpb25hbCk6CisgICAgICAgICh0b0RlYnVn
U3RyaW5nLkFTVC5wcm90b3R5cGUuYWRkaXRpdmUpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5B
U1QucHJvdG90eXBlLm11bHRpcGxpY2F0aXZlKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuQVNU
LnByb3RvdHlwZS51bmFyeSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkFTVC5wcm90b3R5cGUu
cHJpbWFyeSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkFTVC5wcm90b3R5cGUuZmlsdGVyKToK
KyAgICAgICAgKHRvRGVidWdTdHJpbmcuQVNULnByb3RvdHlwZS5wYXJzZUFyZ3VtZW50cyk6Cisg
ICAgICAgICh0b0RlYnVnU3RyaW5nLkFTVC5wcm90b3R5cGUuaWRlbnRpZmllcik6CisgICAgICAg
ICh0b0RlYnVnU3RyaW5nLkFTVC5wcm90b3R5cGUuY29uc3RhbnQpOgorICAgICAgICAodG9EZWJ1
Z1N0cmluZy5BU1QucHJvdG90eXBlLmFycmF5RGVjbGFyYXRpb24pOgorICAgICAgICAodG9EZWJ1
Z1N0cmluZy5BU1QucHJvdG90eXBlLm9iamVjdCk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkFT
VC5wcm90b3R5cGUudGhyb3dFcnJvcik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkFTVC5wcm90
b3R5cGUuY29uc3VtZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkFTVC5wcm90b3R5cGUucGVl
a1Rva2VuKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuQVNULnByb3RvdHlwZS5wZWVrKToKKyAg
ICAgICAgKHRvRGVidWdTdHJpbmcuQVNULnByb3RvdHlwZS5wZWVrQWhlYWQpOgorICAgICAgICAo
dG9EZWJ1Z1N0cmluZy5BU1QucHJvdG90eXBlLmV4cGVjdCk6CisgICAgICAgICh0b0RlYnVnU3Ry
aW5nLmlmRGVmaW5lZCk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnBsdXNGbik6CisgICAgICAg
ICh0b0RlYnVnU3RyaW5nLmlzU3RhdGVsZXNzKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuZmlu
ZENvbnN0YW50QW5kV2F0Y2hFeHByZXNzaW9ucyk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmdl
dElucHV0cyk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmlzQXNzaWduYWJsZSk6CisgICAgICAg
ICh0b0RlYnVnU3RyaW5nLmFzc2lnbmFibGVBU1QpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5p
c0xpdGVyYWwpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5pc0NvbnN0YW50KToKKyAgICAgICAg
KHRvRGVidWdTdHJpbmcuQVNUQ29tcGlsZXIpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5BU1RD
b21waWxlci5wcm90b3R5cGUuY29tcGlsZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkFTVENv
bXBpbGVyLnByb3RvdHlwZS53YXRjaEZucyk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkFTVENv
bXBpbGVyLnByb3RvdHlwZS5nZW5lcmF0ZUZ1bmN0aW9uKToKKyAgICAgICAgKHRvRGVidWdTdHJp
bmcuQVNUQ29tcGlsZXIucHJvdG90eXBlLmZpbHRlclByZWZpeCk6CisgICAgICAgICh0b0RlYnVn
U3RyaW5nLkFTVENvbXBpbGVyLnByb3RvdHlwZS52YXJzUHJlZml4KToKKyAgICAgICAgKHRvRGVi
dWdTdHJpbmcuQVNUQ29tcGlsZXIucHJvdG90eXBlLmJvZHkpOgorICAgICAgICAodG9EZWJ1Z1N0
cmluZy5BU1RDb21waWxlci5wcm90b3R5cGUuc3dpdGNoLmFzdC50eXBlLik6CisgICAgICAgICh0
b0RlYnVnU3RyaW5nLkFTVENvbXBpbGVyLnByb3RvdHlwZS5zd2l0Y2guYXN0LnR5cGUuZWxzZS4p
OgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5BU1RDb21waWxlci5wcm90b3R5cGUucmVjdXJzZSk6
CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkFTVENvbXBpbGVyLnByb3RvdHlwZS5nZXRIYXNPd25Q
cm9wZXJ0eSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkFTVENvbXBpbGVyLnByb3RvdHlwZS5h
c3NpZ24pOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5BU1RDb21waWxlci5wcm90b3R5cGUuZmls
dGVyKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuQVNUQ29tcGlsZXIucHJvdG90eXBlLmlmRGVm
aW5lZCk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkFTVENvbXBpbGVyLnByb3RvdHlwZS5wbHVz
KToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuQVNUQ29tcGlsZXIucHJvdG90eXBlLnJldHVybl8p
OgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5BU1RDb21waWxlci5wcm90b3R5cGUuaWZfKToKKyAg
ICAgICAgKHRvRGVidWdTdHJpbmcuQVNUQ29tcGlsZXIucHJvdG90eXBlLm5vdCk6CisgICAgICAg
ICh0b0RlYnVnU3RyaW5nLkFTVENvbXBpbGVyLnByb3RvdHlwZS5ub3ROdWxsKToKKyAgICAgICAg
KHRvRGVidWdTdHJpbmcuQVNUQ29tcGlsZXIucHJvdG90eXBlLm5vbkNvbXB1dGVkTWVtYmVyKToK
KyAgICAgICAgKHRvRGVidWdTdHJpbmcuQVNUQ29tcGlsZXIucHJvdG90eXBlLmNvbXB1dGVkTWVt
YmVyKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuQVNUQ29tcGlsZXIucHJvdG90eXBlLm1lbWJl
cik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkFTVENvbXBpbGVyLnByb3RvdHlwZS5hZGRFbnN1
cmVTYWZlT2JqZWN0KToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuQVNUQ29tcGlsZXIucHJvdG90
eXBlLmFkZEVuc3VyZVNhZmVNZW1iZXJOYW1lKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuQVNU
Q29tcGlsZXIucHJvdG90eXBlLmFkZEVuc3VyZVNhZmVGdW5jdGlvbik6CisgICAgICAgICh0b0Rl
YnVnU3RyaW5nLkFTVENvbXBpbGVyLnByb3RvdHlwZS5lbnN1cmVTYWZlT2JqZWN0KToKKyAgICAg
ICAgKHRvRGVidWdTdHJpbmcuQVNUQ29tcGlsZXIucHJvdG90eXBlLmVuc3VyZVNhZmVNZW1iZXJO
YW1lKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuQVNUQ29tcGlsZXIucHJvdG90eXBlLmVuc3Vy
ZVNhZmVGdW5jdGlvbik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkFTVENvbXBpbGVyLnByb3Rv
dHlwZS5sYXp5UmVjdXJzZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkFTVENvbXBpbGVyLnBy
b3RvdHlwZS5sYXp5QXNzaWduKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuQVNUQ29tcGlsZXIu
cHJvdG90eXBlLnN0cmluZ0VzY2FwZUZuKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuQVNUQ29t
cGlsZXIucHJvdG90eXBlLmVzY2FwZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkFTVENvbXBp
bGVyLnByb3RvdHlwZS5uZXh0SWQpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5BU1RDb21waWxl
ci5wcm90b3R5cGUuY3VycmVudCk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLkFTVEludGVycHJl
dGVyKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuQVNUSW50ZXJwcmV0ZXIucHJvdG90eXBlLmFz
dC5ib2R5Lmxlbmd0aC4xLmV4cHJlc3Npb25zLjApOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5B
U1RJbnRlcnByZXRlci5wcm90b3R5cGUuYXNzaWduLmZuLmFzc2lnbik6CisgICAgICAgICh0b0Rl
YnVnU3RyaW5nLkFTVEludGVycHJldGVyLnByb3RvdHlwZS5jb21waWxlKToKKyAgICAgICAgKHRv
RGVidWdTdHJpbmcuQVNUSW50ZXJwcmV0ZXIucHJvdG90eXBlLnN3aXRjaC5hc3QudHlwZSk6Cisg
ICAgICAgICh0b0RlYnVnU3RyaW5nLkFTVEludGVycHJldGVyLnByb3RvdHlwZS5yZWN1cnNlKToK
KyAgICAgICAgKHRvRGVidWdTdHJpbmcuQVNUSW50ZXJwcmV0ZXIucHJvdG90eXBlLnN0cmluZ19h
cHBlYXJlZF9oZXJlKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuQVNUSW50ZXJwcmV0ZXIucHJv
dG90eXBlLnZhbHVlKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuQVNUSW50ZXJwcmV0ZXIucHJv
dG90eXBlLmlkZW50aWZpZXIpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5BU1RJbnRlcnByZXRl
ci5wcm90b3R5cGUuY29tcHV0ZWRNZW1iZXIpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5BU1RJ
bnRlcnByZXRlci5wcm90b3R5cGUubm9uQ29tcHV0ZWRNZW1iZXIpOgorICAgICAgICAodG9EZWJ1
Z1N0cmluZy5BU1RJbnRlcnByZXRlci5wcm90b3R5cGUuaW5wdXRzKToKKyAgICAgICAgKHRvRGVi
dWdTdHJpbmcuUGFyc2VyKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuUGFyc2VyLnByb3RvdHlw
ZS5wYXJzZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnNldHRlcik6CisgICAgICAgICh0b0Rl
YnVnU3RyaW5nLmlzUG9zc2libHlEYW5nZXJvdXNNZW1iZXJOYW1lKToKKyAgICAgICAgKHRvRGVi
dWdTdHJpbmcuZ2V0VmFsdWVPZik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLlBhcnNlUHJvdmlk
ZXIucmV0dXJuLnBhcnNlKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuUGFyc2VQcm92aWRlci5l
eHByZXNzaW9uSW5wdXREaXJ0eUNoZWNrKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuUGFyc2VQ
cm92aWRlci5wcmV0dHlQcmludEV4cHJlc3Npb24uaW5wdXRFeHByZXNzaW9ucy5sZW5ndGguMS5y
ZXR1cm4uc2NvcGUud2F0Y2guZXhwcmVzc2lvbklucHV0V2F0Y2gpOgorICAgICAgICAodG9EZWJ1
Z1N0cmluZy5QYXJzZVByb3ZpZGVyLnByZXR0eVByaW50RXhwcmVzc2lvbi5yZXR1cm4uc2NvcGUu
d2F0Y2guZXhwcmVzc2lvbklucHV0c1dhdGNoKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuUGFy
c2VQcm92aWRlci5pbnB1dHNXYXRjaERlbGVnYXRlKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcu
UGFyc2VQcm92aWRlci5wYXJzZWRFeHByZXNzaW9uLnJldHVybi51bndhdGNoLnNjb3BlLndhdGNo
Lm9uZVRpbWVXYXRjaCk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLlBhcnNlUHJvdmlkZXIucGFy
c2VkRXhwcmVzc2lvbi5vbmVUaW1lTGlzdGVuZXIpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5Q
YXJzZVByb3ZpZGVyLm9uZVRpbWVXYXRjaERlbGVnYXRlKToKKyAgICAgICAgKHRvRGVidWdTdHJp
bmcuUGFyc2VQcm92aWRlci5wYXJzZWRFeHByZXNzaW9uLmlzQWxsRGVmaW5lZCk6CisgICAgICAg
ICh0b0RlYnVnU3RyaW5nLlBhcnNlUHJvdmlkZXIub25lVGltZUxpdGVyYWxXYXRjaERlbGVnYXRl
KToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuUGFyc2VQcm92aWRlci5wYXJzZWRFeHByZXNzaW9u
LnJldHVybi51bndhdGNoLnNjb3BlLndhdGNoLmNvbnN0YW50V2F0Y2gpOgorICAgICAgICAodG9E
ZWJ1Z1N0cmluZy5QYXJzZVByb3ZpZGVyLnBhcnNlZEV4cHJlc3Npb24uY29uc3RhbnRMaXN0ZW5l
cik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLlBhcnNlUHJvdmlkZXIuY29uc3RhbnRXYXRjaERl
bGVnYXRlKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuUGFyc2VQcm92aWRlci5pbnRlcmNlcHRv
ckZuLmZuLnJlZ3VsYXJXYXRjaC5yZWd1bGFySW50ZXJjZXB0ZWRFeHByZXNzaW9uKToKKyAgICAg
ICAgKHRvRGVidWdTdHJpbmcuUGFyc2VQcm92aWRlci5pbnRlcmNlcHRvckZuKToKKyAgICAgICAg
KHRvRGVidWdTdHJpbmcuUGFyc2VQcm92aWRlci5hZGRJbnRlcmNlcHRvcik6CisgICAgICAgICh0
b0RlYnVnU3RyaW5nLlBhcnNlUHJvdmlkZXIpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5RUHJv
dmlkZXIpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5leGNlcHRpb25IYW5kbGVyLnJlamVjdEZu
LndyYXApOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5leGNlcHRpb25IYW5kbGVyLmNhbGxPbmNl
KToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuZXhjZXB0aW9uSGFuZGxlci5kZWZlcik6CisgICAg
ICAgICh0b0RlYnVnU3RyaW5nLmV4Y2VwdGlvbkhhbmRsZXIuUHJvbWlzZSk6CisgICAgICAgICh0
b0RlYnVnU3RyaW5nLmV4Y2VwdGlvbkhhbmRsZXIuUHJvbWlzZS5wcm90b3R5cGUudGhlbik6Cisg
ICAgICAgICh0b0RlYnVnU3RyaW5nLmV4Y2VwdGlvbkhhbmRsZXIuUHJvbWlzZS5wcm90b3R5cGUu
c3RyaW5nX2FwcGVhcmVkX2hlcmUpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5leGNlcHRpb25I
YW5kbGVyLnNpbXBsZUJpbmQpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5leGNlcHRpb25IYW5k
bGVyLnByb2Nlc3NRdWV1ZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmV4Y2VwdGlvbkhhbmRs
ZXIuc2NoZWR1bGVQcm9jZXNzUXVldWUpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5leGNlcHRp
b25IYW5kbGVyLkRlZmVycmVkKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuZXhjZXB0aW9uSGFu
ZGxlci5EZWZlcnJlZC5wcm90b3R5cGUucmVzb2x2ZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5n
LmV4Y2VwdGlvbkhhbmRsZXIuRGVmZXJyZWQucHJvdG90eXBlLnJlamVjdCk6CisgICAgICAgICh0
b0RlYnVnU3RyaW5nLmV4Y2VwdGlvbkhhbmRsZXIuRGVmZXJyZWQucHJvdG90eXBlLm5vdGlmeSk6
CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmV4Y2VwdGlvbkhhbmRsZXIucmVqZWN0KToKKyAgICAg
ICAgKHRvRGVidWdTdHJpbmcuZXhjZXB0aW9uSGFuZGxlci5tYWtlUHJvbWlzZSk6CisgICAgICAg
ICh0b0RlYnVnU3RyaW5nLmV4Y2VwdGlvbkhhbmRsZXIuaGFuZGxlQ2FsbGJhY2spOgorICAgICAg
ICAodG9EZWJ1Z1N0cmluZy5leGNlcHRpb25IYW5kbGVyLndoZW4pOgorICAgICAgICAodG9EZWJ1
Z1N0cmluZy5leGNlcHRpb25IYW5kbGVyLmFsbC5wcm9taXNlcy4pOgorICAgICAgICAodG9EZWJ1
Z1N0cmluZy5leGNlcHRpb25IYW5kbGVyLmFsbCk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmV4
Y2VwdGlvbkhhbmRsZXIuUS5RLnJlc29sdmVyLnJlc29sdmVGbik6CisgICAgICAgICh0b0RlYnVn
U3RyaW5nLmV4Y2VwdGlvbkhhbmRsZXIuUS5RLnJlc29sdmVyLnJlamVjdEZuKToKKyAgICAgICAg
KHRvRGVidWdTdHJpbmcuZXhjZXB0aW9uSGFuZGxlci5RKToKKyAgICAgICAgKHRvRGVidWdTdHJp
bmcucUZhY3RvcnkpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5SQUZQcm92aWRlci4pOgorICAg
ICAgICAodG9EZWJ1Z1N0cmluZy5SQUZQcm92aWRlci5mbHVzaCk6CisgICAgICAgICh0b0RlYnVn
U3RyaW5nLlJBRlByb3ZpZGVyLnF1ZXVlRm4uYXN5bmNGbi5yZXR1cm4uY2FuY2VsUXVldWVGbik6
CisgICAgICAgICh0b0RlYnVnU3RyaW5nLlJBRlByb3ZpZGVyLnF1ZXVlRm4pOgorICAgICAgICAo
dG9EZWJ1Z1N0cmluZy5SQUZQcm92aWRlcik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLlJvb3RT
Y29wZVByb3ZpZGVyLnRoaXMuZGlnZXN0VHRsKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuUm9v
dFNjb3BlUHJvdmlkZXIuY3JlYXRlQ2hpbGRTY29wZUNsYXNzLnBhcmVudC5DaGlsZFNjb3BlKToK
KyAgICAgICAgKHRvRGVidWdTdHJpbmcuUm9vdFNjb3BlUHJvdmlkZXIuY3JlYXRlQ2hpbGRTY29w
ZUNsYXNzKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuUm9vdFNjb3BlUHJvdmlkZXIuZGVzdHJv
eUNoaWxkU2NvcGUpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5Sb290U2NvcGVQcm92aWRlci5T
Y29wZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLlJvb3RTY29wZVByb3ZpZGVyLlNjb3BlLnBy
b3RvdHlwZS5uZXcpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5Sb290U2NvcGVQcm92aWRlci5T
Y29wZS5wcm90b3R5cGUucmV0dXJuLmRlcmVnaXN0ZXJXYXRjaCk6CisgICAgICAgICh0b0RlYnVn
U3RyaW5nLlJvb3RTY29wZVByb3ZpZGVyLlNjb3BlLnByb3RvdHlwZS53YXRjaEV4cHJlc3Npb25z
Lmxlbmd0aC5yZXR1cm4uZGVyZWdpc3RlcldhdGNoR3JvdXApOgorICAgICAgICAodG9EZWJ1Z1N0
cmluZy5Sb290U2NvcGVQcm92aWRlci5TY29wZS5wcm90b3R5cGUud2F0Y2hFeHByZXNzaW9ucy5s
ZW5ndGguMS53YXRjaEdyb3VwQWN0aW9uKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuUm9vdFNj
b3BlUHJvdmlkZXIuU2NvcGUucHJvdG90eXBlLndhdGNoR3JvdXBBY3Rpb24pOgorICAgICAgICAo
dG9EZWJ1Z1N0cmluZy5Sb290U2NvcGVQcm92aWRlci5TY29wZS5wcm90b3R5cGUucmV0dXJuLmRl
cmVnaXN0ZXJXYXRjaEdyb3VwKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuUm9vdFNjb3BlUHJv
dmlkZXIuU2NvcGUucHJvdG90eXBlLndhdGNoR3JvdXApOgorICAgICAgICAodG9EZWJ1Z1N0cmlu
Zy5Sb290U2NvcGVQcm92aWRlci5TY29wZS5wcm90b3R5cGUud2F0Y2hDb2xsZWN0aW9uSW50ZXJj
ZXB0b3IpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5Sb290U2NvcGVQcm92aWRlci5TY29wZS5w
cm90b3R5cGUud2F0Y2hDb2xsZWN0aW9uQWN0aW9uKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcu
Um9vdFNjb3BlUHJvdmlkZXIuU2NvcGUucHJvdG90eXBlLndhdGNoQ29sbGVjdGlvbik6CisgICAg
ICAgICh0b0RlYnVnU3RyaW5nLlJvb3RTY29wZVByb3ZpZGVyLlNjb3BlLnByb3RvdHlwZS5kaWdl
c3QpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5Sb290U2NvcGVQcm92aWRlci5TY29wZS5wcm90
b3R5cGUudGhpcy5vbi50aGlzLndhdGNoLnRoaXMud2F0Y2hHcm91cCk6CisgICAgICAgICh0b0Rl
YnVnU3RyaW5nLlJvb3RTY29wZVByb3ZpZGVyLlNjb3BlLnByb3RvdHlwZS5kZXN0cm95KToKKyAg
ICAgICAgKHRvRGVidWdTdHJpbmcuUm9vdFNjb3BlUHJvdmlkZXIuU2NvcGUucHJvdG90eXBlLmV2
YWwpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5Sb290U2NvcGVQcm92aWRlci5TY29wZS5wcm90
b3R5cGUuZXZhbEFzeW5jKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuUm9vdFNjb3BlUHJvdmlk
ZXIuU2NvcGUucHJvdG90eXBlLnBvc3REaWdlc3QpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5S
b290U2NvcGVQcm92aWRlci5TY29wZS5wcm90b3R5cGUuYXBwbHkpOgorICAgICAgICAodG9EZWJ1
Z1N0cmluZy5Sb290U2NvcGVQcm92aWRlci5TY29wZS5wcm90b3R5cGUuYXBwbHlBc3luY0V4cHJl
c3Npb24pOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5Sb290U2NvcGVQcm92aWRlci5TY29wZS5w
cm90b3R5cGUuYXBwbHlBc3luYyk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLlJvb3RTY29wZVBy
b3ZpZGVyLlNjb3BlLnByb3RvdHlwZS5vbik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLlJvb3RT
Y29wZVByb3ZpZGVyLlNjb3BlLnByb3RvdHlwZS5ldmVudC5zdG9wUHJvcGFnYXRpb24pOgorICAg
ICAgICAodG9EZWJ1Z1N0cmluZy5Sb290U2NvcGVQcm92aWRlci5TY29wZS5wcm90b3R5cGUuZXZl
bnQucHJldmVudERlZmF1bHQpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5Sb290U2NvcGVQcm92
aWRlci5TY29wZS5wcm90b3R5cGUuZW1pdCk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLlJvb3RT
Y29wZVByb3ZpZGVyLlNjb3BlLnByb3RvdHlwZS5icm9hZGNhc3QpOgorICAgICAgICAodG9EZWJ1
Z1N0cmluZy5Sb290U2NvcGVQcm92aWRlci5iZWdpblBoYXNlKToKKyAgICAgICAgKHRvRGVidWdT
dHJpbmcuUm9vdFNjb3BlUHJvdmlkZXIuY2xlYXJQaGFzZSk6CisgICAgICAgICh0b0RlYnVnU3Ry
aW5nLlJvb3RTY29wZVByb3ZpZGVyLmluY3JlbWVudFdhdGNoZXJzQ291bnQpOgorICAgICAgICAo
dG9EZWJ1Z1N0cmluZy5Sb290U2NvcGVQcm92aWRlci4pOgorICAgICAgICAodG9EZWJ1Z1N0cmlu
Zy5Sb290U2NvcGVQcm92aWRlci5mbHVzaEFwcGx5QXN5bmMpOgorICAgICAgICAodG9EZWJ1Z1N0
cmluZy5Sb290U2NvcGVQcm92aWRlci5zY2hlZHVsZUFwcGx5QXN5bmMpOgorICAgICAgICAodG9E
ZWJ1Z1N0cmluZy5TYW5pdGl6ZVVyaVByb3ZpZGVyLnRoaXMuYUhyZWZTYW5pdGl6YXRpb25XaGl0
ZWxpc3QpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5TYW5pdGl6ZVVyaVByb3ZpZGVyLnRoaXMu
aW1nU3JjU2FuaXRpemF0aW9uV2hpdGVsaXN0KToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuU2Fu
aXRpemVVcmlQcm92aWRlci5yZXR1cm4uc2FuaXRpemVVcmkpOgorICAgICAgICAodG9EZWJ1Z1N0
cmluZy5TYW5pdGl6ZVVyaVByb3ZpZGVyLnRoaXMpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5T
YW5pdGl6ZVVyaVByb3ZpZGVyKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuYWRqdXN0TWF0Y2hl
cik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmFkanVzdE1hdGNoZXJzKToKKyAgICAgICAgKHRv
RGVidWdTdHJpbmcuU2NlRGVsZWdhdGVQcm92aWRlci50aGlzLnJlc291cmNlVXJsV2hpdGVsaXN0
KToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuU2NlRGVsZWdhdGVQcm92aWRlci50aGlzLnJlc291
cmNlVXJsQmxhY2tsaXN0KToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuU2NlRGVsZWdhdGVQcm92
aWRlci5odG1sU2FuaXRpemVyKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuU2NlRGVsZWdhdGVQ
cm92aWRlci5tYXRjaFVybCk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLlNjZURlbGVnYXRlUHJv
dmlkZXIuaXNSZXNvdXJjZVVybEFsbG93ZWRCeVBvbGljeSk6CisgICAgICAgICh0b0RlYnVnU3Ry
aW5nLlNjZURlbGVnYXRlUHJvdmlkZXIuZ2VuZXJhdGVIb2xkZXJUeXBlLkJhc2UuaG9sZGVyVHlw
ZS5UcnVzdGVkVmFsdWVIb2xkZXJUeXBlLnRydXN0ZWRWYWx1ZS50aGlzLnVud3JhcFRydXN0ZWRW
YWx1ZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLlNjZURlbGVnYXRlUHJvdmlkZXIuZ2VuZXJh
dGVIb2xkZXJUeXBlLkJhc2UuaG9sZGVyVHlwZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLlNj
ZURlbGVnYXRlUHJvdmlkZXIuZ2VuZXJhdGVIb2xkZXJUeXBlLkJhc2UuaG9sZGVyVHlwZS5wcm90
b3R5cGUudmFsdWVPZik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLlNjZURlbGVnYXRlUHJvdmlk
ZXIuZ2VuZXJhdGVIb2xkZXJUeXBlLkJhc2UuaG9sZGVyVHlwZS5wcm90b3R5cGUudG9TdHJpbmcp
OgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5TY2VEZWxlZ2F0ZVByb3ZpZGVyLmdlbmVyYXRlSG9s
ZGVyVHlwZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLlNjZURlbGVnYXRlUHJvdmlkZXIudHJ1
c3RBcyk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLlNjZURlbGVnYXRlUHJvdmlkZXIudmFsdWVP
Zik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLlNjZURlbGVnYXRlUHJvdmlkZXIuZ2V0VHJ1c3Rl
ZCk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLlNjZURlbGVnYXRlUHJvdmlkZXIpOgorICAgICAg
ICAodG9EZWJ1Z1N0cmluZy5TY2VQcm92aWRlci50aGlzLmVuYWJsZWQpOgorICAgICAgICAodG9E
ZWJ1Z1N0cmluZy5TY2VQcm92aWRlci5zY2UuaXNFbmFibGVkKToKKyAgICAgICAgKHRvRGVidWdT
dHJpbmcuU2NlUHJvdmlkZXIuZW5hYmxlZC5zY2UudHJ1c3RBcy5zY2UuZ2V0VHJ1c3RlZCk6Cisg
ICAgICAgICh0b0RlYnVnU3RyaW5nLlNjZVByb3ZpZGVyLnNjZS5wYXJzZUFzKToKKyAgICAgICAg
KHRvRGVidWdTdHJpbmcuU2NlUHJvdmlkZXIuc2NlLmNhbWVsQ2FzZSk6CisgICAgICAgICh0b0Rl
YnVnU3RyaW5nLlNjZVByb3ZpZGVyKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuU25pZmZlclBy
b3ZpZGVyLnJldHVybi5oYXNFdmVudCk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLlNuaWZmZXJQ
cm92aWRlcik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLlRlbXBsYXRlUmVxdWVzdFByb3ZpZGVy
Lmlnbm9yZVJlcXVlc3RFcnJvci5oYW5kbGVFcnJvcik6CisgICAgICAgICh0b0RlYnVnU3RyaW5n
LlRlbXBsYXRlUmVxdWVzdFByb3ZpZGVyLmhhbmRsZVJlcXVlc3RGbik6CisgICAgICAgICh0b0Rl
YnVnU3RyaW5nLlRlbXBsYXRlUmVxdWVzdFByb3ZpZGVyKToKKyAgICAgICAgKHRvRGVidWdTdHJp
bmcuVGVzdGFiaWxpdHlQcm92aWRlci50ZXN0YWJpbGl0eS5maW5kQmluZGluZ3MpOgorICAgICAg
ICAodG9EZWJ1Z1N0cmluZy5UZXN0YWJpbGl0eVByb3ZpZGVyLnRlc3RhYmlsaXR5LmZpbmRNb2Rl
bHMpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5UZXN0YWJpbGl0eVByb3ZpZGVyLnRlc3RhYmls
aXR5LmdldExvY2F0aW9uKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuVGVzdGFiaWxpdHlQcm92
aWRlci50ZXN0YWJpbGl0eS5zZXRMb2NhdGlvbik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLlRl
c3RhYmlsaXR5UHJvdmlkZXIudGVzdGFiaWxpdHkud2hlblN0YWJsZSk6CisgICAgICAgICh0b0Rl
YnVnU3RyaW5nLlRlc3RhYmlsaXR5UHJvdmlkZXIpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5U
aW1lb3V0UHJvdmlkZXIuKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuVGltZW91dFByb3ZpZGVy
LnRpbWVvdXQuY2FuY2VsKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuVGltZW91dFByb3ZpZGVy
KToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcudXJsUmVzb2x2ZSk6CisgICAgICAgICh0b0RlYnVn
U3RyaW5nLnVybElzU2FtZU9yaWdpbik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLldpbmRvd1By
b3ZpZGVyKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuQ29va2llUmVhZGVyLmRvY3VtZW50LnNh
ZmVEZWNvZGVVUklDb21wb25lbnQpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5Db29raWVSZWFk
ZXIpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5Db29raWVSZWFkZXJQcm92aWRlcik6CisgICAg
ICAgICh0b0RlYnVnU3RyaW5nLkZpbHRlclByb3ZpZGVyLnByb3ZpZGUucmVnaXN0ZXIpOgorICAg
ICAgICAodG9EZWJ1Z1N0cmluZy5GaWx0ZXJQcm92aWRlcik6CisgICAgICAgICh0b0RlYnVnU3Ry
aW5nLmZpbHRlckZpbHRlcik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLm1hdGNoQWdhaW5zdEFu
eVByb3AuZWxzZS5pc0Z1bmN0aW9uLmNvbXBhcmF0b3IpOgorICAgICAgICAodG9EZWJ1Z1N0cmlu
Zy5tYXRjaEFnYWluc3RBbnlQcm9wLnByZWRpY2F0ZUZuKToKKyAgICAgICAgKHRvRGVidWdTdHJp
bmcuY3JlYXRlUHJlZGljYXRlRm4pOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5kZWVwQ29tcGFy
ZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmdldFR5cGVGb3JGaWx0ZXIpOgorICAgICAgICAo
dG9EZWJ1Z1N0cmluZy5jdXJyZW5jeUZpbHRlcik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLm51
bWJlckZpbHRlcik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmZvcm1hdE51bWJlcik6CisgICAg
ICAgICh0b0RlYnVnU3RyaW5nLnBhZE51bWJlcik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmRh
dGVHZXR0ZXIpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy50aW1lWm9uZUdldHRlcik6CisgICAg
ICAgICh0b0RlYnVnU3RyaW5nLmdldEZpcnN0VGh1cnNkYXlPZlllYXIpOgorICAgICAgICAodG9E
ZWJ1Z1N0cmluZy5nZXRUaHVyc2RheVRoaXNXZWVrKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcu
d2Vla0dldHRlcik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmFtcG1HZXR0ZXIpOgorICAgICAg
ICAodG9EZWJ1Z1N0cmluZy5lcmFHZXR0ZXIpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5sb25n
RXJhR2V0dGVyKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuZGF0ZUZpbHRlcik6CisgICAgICAg
ICh0b0RlYnVnU3RyaW5nLmpzb25GaWx0ZXIpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5saW1p
dFRvRmlsdGVyKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcub3JkZXJCeUZpbHRlci5nZXRDb21w
YXJpc29uT2JqZWN0KToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcub3JkZXJCeUZpbHRlci5kb0Nv
bXBhcmlzb24pOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5vcmRlckJ5RmlsdGVyLik6CisgICAg
ICAgICh0b0RlYnVnU3RyaW5nLm9yZGVyQnlGaWx0ZXIucHJvY2Vzc1ByZWRpY2F0ZXMpOgorICAg
ICAgICAodG9EZWJ1Z1N0cmluZy5vcmRlckJ5RmlsdGVyLmdldCBpc1ByaW1pdGl2ZSk6CisgICAg
ICAgICh0b0RlYnVnU3RyaW5nLm9yZGVyQnlGaWx0ZXIub2JqZWN0VmFsdWUpOgorICAgICAgICAo
dG9EZWJ1Z1N0cmluZy5vcmRlckJ5RmlsdGVyLmdldFByZWRpY2F0ZVZhbHVlKToKKyAgICAgICAg
KHRvRGVidWdTdHJpbmcub3JkZXJCeUZpbHRlci5jb21wYXJlKToKKyAgICAgICAgKHRvRGVidWdT
dHJpbmcubmdEaXJlY3RpdmUpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5odG1sQW5jaG9yRGly
ZWN0aXZlLnZhbHVlRm4uKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuaHRtbEFuY2hvckRpcmVj
dGl2ZS52YWx1ZUZuKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcub3JkZXJCeUZpbHRlcik6Cisg
ICAgICAgICh0b0RlYnVnU3RyaW5nLm51bGxGb3JtUmVuYW1lQ29udHJvbCk6CisgICAgICAgICh0
b0RlYnVnU3RyaW5nLmZvcm0ucm9sbGJhY2tWaWV3VmFsdWUpOgorICAgICAgICAodG9EZWJ1Z1N0
cmluZy5mb3JtLmNvbW1pdFZpZXdWYWx1ZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmZvcm0u
YWRkQ29udHJvbCk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmZvcm0ucmVuYW1lQ29udHJvbCk6
CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmZvcm0ucmVtb3ZlQ29udHJvbCk6CisgICAgICAgICh0
b0RlYnVnU3RyaW5nLmFkZFNldFZhbGlkaXR5TWV0aG9kKToKKyAgICAgICAgKHRvRGVidWdTdHJp
bmcuc2V0IGZvcm0uc2V0RGlydHkpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5mb3JtLnNldFBy
aXN0aW5lKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuZm9ybS5zZXRVbnRvdWNoZWQpOgorICAg
ICAgICAodG9EZWJ1Z1N0cmluZy5mb3JtLnNldFN1Ym1pdHRlZCk6CisgICAgICAgICh0b0RlYnVn
U3RyaW5nLmZvcm1EaXJlY3RpdmUucmV0dXJuLmhhbmRsZUZvcm1TdWJtaXNzaW9uKToKKyAgICAg
ICAgKHRvRGVidWdTdHJpbmcuZm9ybURpcmVjdGl2ZS5yZXR1cm4ucHJlKToKKyAgICAgICAgKHRv
RGVidWdTdHJpbmcuZm9ybURpcmVjdGl2ZS5jb21waWxlKToKKyAgICAgICAgKHRvRGVidWdTdHJp
bmcuZm9ybURpcmVjdGl2ZUZhY3RvcnkpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5zdHJpbmdC
YXNlZElucHV0VHlwZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmxpc3RlbmVyKToKKyAgICAg
ICAgKHRvRGVidWdTdHJpbmcuZWxzZS5kZWZlckxpc3RlbmVyKToKKyAgICAgICAgKHRvRGVidWdT
dHJpbmcuY3RybC5yZW5kZXIpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5iYXNlSW5wdXRUeXBl
KToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuY3JlYXRlRGF0ZVBhcnNlcik6CisgICAgICAgICh0
b0RlYnVnU3RyaW5nLmN0cmwudmFsaWRhdG9ycy5taW4pOgorICAgICAgICAodG9EZWJ1Z1N0cmlu
Zy5jdHJsLnZhbGlkYXRvcnMubWF4KToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcucmV0dXJuLmR5
bmFtaWNEYXRlSW5wdXRUeXBlKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuY3JlYXRlRGF0ZUlu
cHV0VHlwZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmJhZElucHV0Q2hlY2tlcik6CisgICAg
ICAgICh0b0RlYnVnU3RyaW5nLmN0cmwudmFsaWRhdG9ycy51cmwpOgorICAgICAgICAodG9EZWJ1
Z1N0cmluZy5jdHJsLnZhbGlkYXRvcnMuZW1haWwpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5l
bWFpbElucHV0VHlwZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnJhZGlvSW5wdXRUeXBlKToK
KyAgICAgICAgKHRvRGVidWdTdHJpbmcucGFyc2VDb25zdGFudEV4cHIpOgorICAgICAgICAodG9E
ZWJ1Z1N0cmluZy5jdHJsLmlzRW1wdHkpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5jaGVja2Jv
eElucHV0VHlwZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnJldHVybi5saW5rLnByZSk6Cisg
ICAgICAgICh0b0RlYnVnU3RyaW5nLnNldCBmb3JtKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcu
Rm9ybUNvbnRyb2xsZXIpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5yZXR1cm4ucmV0dXJuLm5n
VmFsdWVDb25zdGFudExpbmspOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5yZXR1cm4uZWxzZS5y
ZXR1cm4ubmdWYWx1ZUxpbmspOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5yZXR1cm4uY29tcGls
ZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLm5nVmFsdWVEaXJlY3RpdmUpOgorICAgICAgICAo
dG9EZWJ1Z1N0cmluZy5yZXR1cm4uY29tcGlsZS5uZ0JpbmRDb21waWxlLnJldHVybi5uZ0JpbmRM
aW5rKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcucmV0dXJuLmNvbXBpbGUubmdCaW5kVGVtcGxh
dGVDb21waWxlLnJldHVybi5uZ0JpbmRUZW1wbGF0ZUxpbmspOgorICAgICAgICAodG9EZWJ1Z1N0
cmluZy5yZXR1cm4ucmV0dXJuLm5nQmluZEh0bWxMaW5rKToKKyAgICAgICAgKHRvRGVidWdTdHJp
bmcubmdDaGFuZ2VEaXJlY3RpdmUudmFsdWVGbi4pOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5u
Z0NoYW5nZURpcmVjdGl2ZS52YWx1ZUZuKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcucmV0dXJu
Lik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnJldHVybi5yZW1vdmVDbGFzc2VzKToKKyAgICAg
ICAgKHRvRGVidWdTdHJpbmcucmV0dXJuLmRpZ2VzdENsYXNzQ291bnRzKToKKyAgICAgICAgKHRv
RGVidWdTdHJpbmcucmV0dXJuLnVwZGF0ZUNsYXNzZXMpOgorICAgICAgICAodG9EZWJ1Z1N0cmlu
Zy5yZXR1cm4ubmdDbGFzc1dhdGNoQWN0aW9uKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcucmV0
dXJuLmxpbmspOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5hcnJheURpZmZlcmVuY2UpOgorICAg
ICAgICAodG9EZWJ1Z1N0cmluZy5hcnJheUNsYXNzZXMpOgorICAgICAgICAodG9EZWJ1Z1N0cmlu
Zy5uZ0Nsb2FrRGlyZWN0aXZlLm5nRGlyZWN0aXZlKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcu
bmdDb250cm9sbGVyRGlyZWN0aXZlKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcucmV0dXJuLmNs
ZWFudXBMYXN0SW5jbHVkZUNvbnRlbnQpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5uZ0luaXRE
aXJlY3RpdmUubmdEaXJlY3RpdmUuKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcubmdJbml0RGly
ZWN0aXZlLm5nRGlyZWN0aXZlKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcucmV0dXJuLnBhcnNl
KToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcucmV0dXJuLmN0cmwuaXNFbXB0eSk6CisgICAgICAg
ICh0b0RlYnVnU3RyaW5nLm5nTGlzdERpcmVjdGl2ZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5n
Lm5nTW9kZWxHZXQpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5uZ01vZGVsU2V0KToKKyAgICAg
ICAgKHRvRGVidWdTdHJpbmcudGhpcy5zZXRPcHRpb25zKToKKyAgICAgICAgKHRvRGVidWdTdHJp
bmcudGhpcy5pc0VtcHR5KToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuc2V0IHRoaXMuc2V0UHJp
c3RpbmUpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy50aGlzLnNldERpcnR5KToKKyAgICAgICAg
KHRvRGVidWdTdHJpbmcudGhpcy5zZXRVbnRvdWNoZWQpOgorICAgICAgICAodG9EZWJ1Z1N0cmlu
Zy50aGlzLnNldFRvdWNoZWQpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy50aGlzLnJvbGxiYWNr
Vmlld1ZhbHVlKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcudGhpcy52YWxpZGF0ZSk6CisgICAg
ICAgICh0b0RlYnVnU3RyaW5nLnByb2Nlc3NQYXJzZUVycm9ycyk6CisgICAgICAgICh0b0RlYnVn
U3RyaW5nLnByb2Nlc3NTeW5jVmFsaWRhdG9ycyk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnBy
b2Nlc3NBc3luY1ZhbGlkYXRvcnMuKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcucHJvY2Vzc0Fz
eW5jVmFsaWRhdG9ycyk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnNldFZhbGlkaXR5KToKKyAg
ICAgICAgKHRvRGVidWdTdHJpbmcudmFsaWRhdGlvbkRvbmUpOgorICAgICAgICAodG9EZWJ1Z1N0
cmluZy50aGlzLnJ1blZhbGlkYXRvcnMpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy50aGlzLmNv
bW1pdFZpZXdWYWx1ZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnRoaXMucGFyc2VBbmRWYWxp
ZGF0ZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnRoaXMud3JpdGVNb2RlbFRvU2NvcGUpOgor
ICAgICAgICAodG9EZWJ1Z1N0cmluZy50aGlzLnNldFZpZXdWYWx1ZSk6CisgICAgICAgICh0b0Rl
YnVnU3RyaW5nLnRoaXMuZGVib3VuY2VWaWV3VmFsdWVDb21taXQpOgorICAgICAgICAodG9EZWJ1
Z1N0cmluZy5zZXQgdGhpcyk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnJldHVybi5jb21waWxl
Lm5nTW9kZWxDb21waWxlLnJldHVybi5wcmUpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5yZXR1
cm4uY29tcGlsZS5uZ01vZGVsQ29tcGlsZS5yZXR1cm4ucG9zdCk6CisgICAgICAgICh0b0RlYnVn
U3RyaW5nLm5nTW9kZWxPcHRpb25zRGlyZWN0aXZlKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcu
YWRkU2V0VmFsaWRpdHlNZXRob2QuY3JlYXRlQW5kU2V0KToKKyAgICAgICAgKHRvRGVidWdTdHJp
bmcuYWRkU2V0VmFsaWRpdHlNZXRob2Quc2V0IHVuc2V0QW5kQ2xlYW51cCk6CisgICAgICAgICh0
b0RlYnVnU3RyaW5nLmFkZFNldFZhbGlkaXR5TWV0aG9kLmNhY2hlZFRvZ2dsZUNsYXNzKToKKyAg
ICAgICAgKHRvRGVidWdTdHJpbmcuYWRkU2V0VmFsaWRpdHlNZXRob2QudG9nZ2xlVmFsaWRhdGlv
bkNzcyk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmdldFRyYWNrQnlWYWx1ZSk6CisgICAgICAg
ICh0b0RlYnVnU3RyaW5nLk9wdGlvbik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmdldE9wdGlv
blZhbHVlc0tleXMpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5yZXR1cm4ucmV0dXJuLmdldE9w
dGlvbkZyb21WaWV3VmFsdWUpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5yZXR1cm4ucmV0dXJu
LmdldFZpZXdWYWx1ZUZyb21PcHRpb24pOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5yZXR1cm4u
Z2V0T3B0aW9ucyk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnBhcnNlT3B0aW9uc0V4cHJlc3Np
b24pOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5yZXR1cm4ucmVuZGVyRW1wdHlPcHRpb24pOgor
ICAgICAgICAodG9EZWJ1Z1N0cmluZy5yZXR1cm4ucmVtb3ZlRW1wdHlPcHRpb24pOgorICAgICAg
ICAodG9EZWJ1Z1N0cmluZy5yZXR1cm4ucmVuZGVyVW5rbm93bk9wdGlvbik6CisgICAgICAgICh0
b0RlYnVnU3RyaW5nLnJldHVybi5yZW1vdmVVbmtub3duT3B0aW9uKToKKyAgICAgICAgKHRvRGVi
dWdTdHJpbmcucmV0dXJuLnNlbGVjdEN0cmwud3JpdGVWYWx1ZSk6CisgICAgICAgICh0b0RlYnVn
U3RyaW5nLnJldHVybi5zZWxlY3RDdHJsLnJlYWRWYWx1ZSk6CisgICAgICAgICh0b0RlYnVnU3Ry
aW5nLnJldHVybi5lbHNlLm5nTW9kZWxDdHJsLmlzRW1wdHkpOgorICAgICAgICAodG9EZWJ1Z1N0
cmluZy5yZXR1cm4uZWxzZS5zZWxlY3RDdHJsLndyaXRlVmFsdWUpOgorICAgICAgICAodG9EZWJ1
Z1N0cmluZy5yZXR1cm4uZWxzZS5zZWxlY3RDdHJsLnJlYWRWYWx1ZSk6CisgICAgICAgICh0b0Rl
YnVnU3RyaW5nLnJldHVybi51cGRhdGVPcHRpb25FbGVtZW50KToKKyAgICAgICAgKHRvRGVidWdT
dHJpbmcucmV0dXJuLmFkZE9yUmV1c2VFbGVtZW50KToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcu
cmV0dXJuLnJlbW92ZUV4Y2Vzc0VsZW1lbnRzKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcucmV0
dXJuLnNraXBFbXB0eUFuZFVua25vd25PcHRpb25zKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcu
cmV0dXJuLnVwZGF0ZU9wdGlvbnMpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy51cGRhdGVTY29w
ZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLmdldEJsb2NrU3RhcnQpOgorICAgICAgICAodG9E
ZWJ1Z1N0cmluZy5nZXRCbG9ja0VuZCk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnJldHVybi5l
bHNlLnRyYWNrQnlJZEFycmF5Rm4pOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5yZXR1cm4uZWxz
ZS50cmFja0J5SWRPYmpGbik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnJldHVybi50cmFja0J5
SWRFeHBGbik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnJldHVybi5yZXR1cm4ubmdSZXBlYXRM
aW5rKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcucmV0dXJuLm5nU3dpdGNoQ29udHJvbGxlcik6
CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnJldHVybi5zcGxpY2VGYWN0b3J5KToKKyAgICAgICAg
KHRvRGVidWdTdHJpbmcubmdTd2l0Y2hXaGVuRGlyZWN0aXZlLm5nRGlyZWN0aXZlKToKKyAgICAg
ICAgKHRvRGVidWdTdHJpbmcubmdTd2l0Y2hEZWZhdWx0RGlyZWN0aXZlLm5nRGlyZWN0aXZlKToK
KyAgICAgICAgKHRvRGVidWdTdHJpbmcubmdUcmFuc2NsdWRlRGlyZWN0aXZlLm5nRGlyZWN0aXZl
Lik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLm5nVHJhbnNjbHVkZURpcmVjdGl2ZS5uZ0RpcmVj
dGl2ZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnNlbGYucmVuZGVyVW5rbm93bk9wdGlvbik6
CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnNlbGYucmVtb3ZlVW5rbm93bk9wdGlvbik6CisgICAg
ICAgICh0b0RlYnVnU3RyaW5nLnNlbGYucmVhZFZhbHVlKToKKyAgICAgICAgKHRvRGVidWdTdHJp
bmcuc2VsZi53cml0ZVZhbHVlKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuc2VsZi5hZGRPcHRp
b24pOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5zZWxmLnJlbW92ZU9wdGlvbik6CisgICAgICAg
ICh0b0RlYnVnU3RyaW5nLnNlbGYuaGFzT3B0aW9uKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcu
cmV0dXJuLm5nTW9kZWxDdHJsLnJlbmRlcik6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnJldHVy
bi5uZ01vZGVsQ3RybC5pc0VtcHR5KToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuc2VsZWN0RGly
ZWN0aXZlKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcuY2hyb21lSGFjayk6CisgICAgICAgICh0
b0RlYnVnU3RyaW5nLnJldHVybi5jdHJsLnZhbGlkYXRvcnMucmVxdWlyZWQpOgorICAgICAgICAo
dG9EZWJ1Z1N0cmluZy5yZXF1aXJlZERpcmVjdGl2ZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5n
LnJldHVybi5jdHJsLnZhbGlkYXRvcnMucGF0dGVybik6CisgICAgICAgICh0b0RlYnVnU3RyaW5n
LnBhdHRlcm5EaXJlY3RpdmUpOgorICAgICAgICAodG9EZWJ1Z1N0cmluZy5yZXR1cm4uY3RybC52
YWxpZGF0b3JzLm1heGxlbmd0aCk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLm1heGxlbmd0aERp
cmVjdGl2ZSk6CisgICAgICAgICh0b0RlYnVnU3RyaW5nLnJldHVybi5jdHJsLnZhbGlkYXRvcnMu
bWlubGVuZ3RoKToKKyAgICAgICAgKHRvRGVidWdTdHJpbmcubWlubGVuZ3RoRGlyZWN0aXZlKToK
KyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvYW5ndWxhcmpzL25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvaW5kZXguY3NzOiBB
ZGRlZC4KKyAgICAgICAgKGh0bWwsKToKKyAgICAgICAgKGJ1dHRvbik6CisgICAgICAgIChib2R5
KToKKyAgICAgICAgKGJ1dHRvbiwpOgorICAgICAgICAoLmhpZGRlbik6CisgICAgICAgICgjdG9k
b2FwcCk6CisgICAgICAgICgjdG9kb2FwcCBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRl
cik6CisgICAgICAgICgjdG9kb2FwcCBpbnB1dDo6LW1vei1wbGFjZWhvbGRlcik6CisgICAgICAg
ICgjdG9kb2FwcCBpbnB1dDo6aW5wdXQtcGxhY2Vob2xkZXIpOgorICAgICAgICAoI3RvZG9hcHAg
aDEpOgorICAgICAgICAoI25ldy10b2RvLCk6CisgICAgICAgICgjbmV3LXRvZG8pOgorICAgICAg
ICAoI21haW4pOgorICAgICAgICAobGFiZWxbZm9yPSd0b2dnbGUtYWxsJ10pOgorICAgICAgICAo
I3RvZ2dsZS1hbGwpOgorICAgICAgICAoI3RvZ2dsZS1hbGw6YmVmb3JlKToKKyAgICAgICAgKCN0
b2dnbGUtYWxsOmNoZWNrZWQ6YmVmb3JlKToKKyAgICAgICAgKCN0b2RvLWxpc3QpOgorICAgICAg
ICAoI3RvZG8tbGlzdCBsaSk6CisgICAgICAgICgjdG9kby1saXN0IGxpOmxhc3QtY2hpbGQpOgor
ICAgICAgICAoI3RvZG8tbGlzdCBsaS5lZGl0aW5nKToKKyAgICAgICAgKCN0b2RvLWxpc3QgbGku
ZWRpdGluZyAuZWRpdCk6CisgICAgICAgICgjdG9kby1saXN0IGxpLmVkaXRpbmcgLnZpZXcpOgor
ICAgICAgICAoI3RvZG8tbGlzdCBsaSAudG9nZ2xlKToKKyAgICAgICAgKCN0b2RvLWxpc3QgbGkg
LnRvZ2dsZTphZnRlcik6CisgICAgICAgICgjdG9kby1saXN0IGxpIC50b2dnbGU6Y2hlY2tlZDph
ZnRlcik6CisgICAgICAgICgjdG9kby1saXN0IGxpIGxhYmVsKToKKyAgICAgICAgKCN0b2RvLWxp
c3QgbGkuY29tcGxldGVkIGxhYmVsKToKKyAgICAgICAgKCN0b2RvLWxpc3QgbGkgLmRlc3Ryb3kp
OgorICAgICAgICAoI3RvZG8tbGlzdCBsaSAuZGVzdHJveTpob3Zlcik6CisgICAgICAgICgjdG9k
by1saXN0IGxpIC5kZXN0cm95OmFmdGVyKToKKyAgICAgICAgKCN0b2RvLWxpc3QgbGk6aG92ZXIg
LmRlc3Ryb3kpOgorICAgICAgICAoI3RvZG8tbGlzdCBsaSAuZWRpdCk6CisgICAgICAgICgjdG9k
by1saXN0IGxpLmVkaXRpbmc6bGFzdC1jaGlsZCk6CisgICAgICAgICgjZm9vdGVyKToKKyAgICAg
ICAgKCNmb290ZXI6YmVmb3JlKToKKyAgICAgICAgKCN0b2RvLWNvdW50KToKKyAgICAgICAgKCN0
b2RvLWNvdW50IHN0cm9uZyk6CisgICAgICAgICgjZmlsdGVycyk6CisgICAgICAgICgjZmlsdGVy
cyBsaSk6CisgICAgICAgICgjZmlsdGVycyBsaSBhKToKKyAgICAgICAgKCNmaWx0ZXJzIGxpIGEu
c2VsZWN0ZWQsKToKKyAgICAgICAgKCNmaWx0ZXJzIGxpIGEuc2VsZWN0ZWQpOgorICAgICAgICAo
I2NsZWFyLWNvbXBsZXRlZCwpOgorICAgICAgICAoI2NsZWFyLWNvbXBsZXRlZDpob3Zlcik6Cisg
ICAgICAgICgjaW5mbyk6CisgICAgICAgICgjaW5mbyBwKToKKyAgICAgICAgKCNpbmZvIGEpOgor
ICAgICAgICAoI2luZm8gYTpob3Zlcik6CisgICAgICAgIChAbWVkaWEgc2NyZWVuIGFuZCAoLXdl
YmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApKToKKyAgICAgICAgKCN0b2dnbGUtYWxsLCk6
CisgICAgICAgIChAbWVkaWEgKG1heC13aWR0aDogNDMwcHgpKToKKyAgICAgICAgKiBTcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL25v
ZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvcGFja2FnZS5qc29uOiBBZGRlZC4KKyAgICAgICAg
KiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5n
dWxhcmpzL25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvcmVhZG1lLm1kOiBBZGRlZC4KKyAg
ICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvYW5ndWxhcmpzL25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzczogQWRkZWQu
CisgICAgICAgIChocik6CisgICAgICAgICgubGVhcm4gYSk6CisgICAgICAgICgubGVhcm4gYTpo
b3Zlcik6CisgICAgICAgICgubGVhcm4gaDMsKToKKyAgICAgICAgKC5sZWFybiBoMyk6CisgICAg
ICAgICgubGVhcm4gaDQpOgorICAgICAgICAoLmxlYXJuIGg1KToKKyAgICAgICAgKC5sZWFybiB1
bCk6CisgICAgICAgICgubGVhcm4gbGkpOgorICAgICAgICAoLmxlYXJuIHApOgorICAgICAgICAo
I2lzc3VlLWNvdW50KToKKyAgICAgICAgKC5xdW90ZSk6CisgICAgICAgICgucXVvdGUgcCk6Cisg
ICAgICAgICgucXVvdGUgcDpiZWZvcmUpOgorICAgICAgICAoLnF1b3RlIHA6YWZ0ZXIpOgorICAg
ICAgICAoLnF1b3RlIGZvb3Rlcik6CisgICAgICAgICgucXVvdGUgZm9vdGVyIGltZyk6CisgICAg
ICAgICgucXVvdGUgZm9vdGVyIGEpOgorICAgICAgICAoLnNwZWVjaC1idWJibGUpOgorICAgICAg
ICAoLnNwZWVjaC1idWJibGU6YWZ0ZXIpOgorICAgICAgICAoLmxlYXJuLWJhciA+IC5sZWFybik6
CisgICAgICAgIChAbWVkaWEgKG1pbi13aWR0aDogODk5cHgpKToKKyAgICAgICAgKC5sZWFybi1i
YXIpOgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9hbmd1bGFyanMvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuanM6
IEFkZGVkLgorICAgICAgICAoXy5kZWZhdWx0cyk6CisgICAgICAgICh0ZW1wbGF0ZSk6CisgICAg
ICAgIChlc2NhcGVyLl8udGVtcGxhdGUpOgorICAgICAgICAoXyk6CisgICAgICAgIChsb2NhdGlv
bi5ob3N0bmFtZS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pLnIuaS5yKToKKyAgICAgICAgKHJlZGly
ZWN0KToKKyAgICAgICAgKGZpbmRSb290KToKKyAgICAgICAgKHhoci5vbmxvYWQpOgorICAgICAg
ICAoZ2V0RmlsZSk6CisgICAgICAgIChMZWFybik6CisgICAgICAgIChMZWFybi5wcm90b3R5cGUu
YXBwZW5kKToKKyAgICAgICAgKExlYXJuLnByb3RvdHlwZS5mZXRjaElzc3VlQ291bnQpOgorICAg
ICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9hbmd1bGFyanMvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL3BhY2thZ2UuanNvbjogQWRk
ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2FuZ3VsYXJqcy9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vcmVhZG1lLm1k
OiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL3BhY2thZ2UuanNvbjogQWRkZWQuCisgICAgICAgICog
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3Vs
YXJqcy9yZWFkbWUubWQ6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy90ZXN0L2NvbmZpZy90ZXN0YWN1bGFyLmNv
bmYuanM6IFJlbW92ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy90ZXN0L3BhY2thZ2UuanNvbjogUmVtb3Zl
ZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvYW5ndWxhcmpzL3Rlc3QvcmVhZG1lLm1kOiBSZW1vdmVkLgorICAgICAgICAqIFNw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFy
anMvdGVzdC91bml0L2RpcmVjdGl2ZXNTcGVjLmpzOiBSZW1vdmVkLgorICAgICAgICAqIFNwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMv
dGVzdC91bml0L3RvZG9DdHJsU3BlYy5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL3RvZG9t
dmMtaW5kZXguaHRtbDogQWRkZWQuCisKIDIwMTctMDQtMjEgIFphbGFuIEJ1anRhcyAgPHphbGFu
QGFwcGxlLmNvbT4KIAogICAgICAgICBTaW1wbGUgbGluZSBsYXlvdXQ6IEFkZCBwZXJmb3JtYW5j
ZSB0ZXN0IHRvIG1lYXN1cmUgbWlkLXdvcmQgbGluZSBicmVha2luZyB3aXRoIGxvbmcgdGV4dC4K
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9ib3dlci5qc29uIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvYW5ndWxhcmpzL2Jvd2VyLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5
MGM1MjVjYzhhNmMwYjU5MDI4N2Q3MDhiYmQ0NzdmOTQ4YTEwYTguLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2Jvd2Vy
Lmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi17Ci0gICJuYW1lIjogInRvZG9t
dmMtYW5ndWxhciIsCi0gICJ2ZXJzaW9uIjogIjAuMC4wIiwKLSAgImRlcGVuZGVuY2llcyI6IHsK
LSAgICAiYW5ndWxhciI6ICJ+MS4wLjciLAotICAgICJ0b2RvbXZjLWNvbW1vbiI6ICJ+MC4xLjQi
Ci0gIH0sCi0gICJkZXZEZXBlbmRlbmNpZXMiOiB7Ci0gICAgImFuZ3VsYXItbW9ja3MiOiAifjEu
MC41IgotICB9Ci19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvYm93ZXJfY29t
cG9uZW50cy9hbmd1bGFyLW1vY2tzL2FuZ3VsYXItbW9ja3MuanMgYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1
bGFyanMvYm93ZXJfY29tcG9uZW50cy9hbmd1bGFyLW1vY2tzL2FuZ3VsYXItbW9ja3MuanMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMDRhMjdhNWJhNDdkZGVmYTBiNzY4ZTM5Zjdm
ZWEzYWY1MmFkMmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2Jvd2VyX2NvbXBvbmVudHMvYW5ndWxhci1tb2Nrcy9h
bmd1bGFyLW1vY2tzLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTc2NCArMCwwIEBACi0vKioKLSAq
IEBsaWNlbnNlIEFuZ3VsYXJKUyB2MS4wLjQKLSAqIChjKSAyMDEwLTIwMTIgR29vZ2xlLCBJbmMu
IGh0dHA6Ly9hbmd1bGFyanMub3JnCi0gKiBMaWNlbnNlOiBNSVQKLSAqCi0gKiBUT0RPKHZvanRh
KTogd3JhcCB3aG9sZSBmaWxlIGludG8gY2xvc3VyZSBkdXJpbmcgYnVpbGQKLSAqLwotCi0vKioK
LSAqIEBuZ2RvYyBvdmVydmlldwotICogQG5hbWUgYW5ndWxhci5tb2NrCi0gKiBAZGVzY3JpcHRp
b24KLSAqCi0gKiBOYW1lc3BhY2UgZnJvbSAnYW5ndWxhci1tb2Nrcy5qcycgd2hpY2ggY29udGFp
bnMgdGVzdGluZyByZWxhdGVkIGNvZGUuCi0gKi8KLWFuZ3VsYXIubW9jayA9IHt9OwotCi0vKioK
LSAqICEgVGhpcyBpcyBhIHByaXZhdGUgdW5kb2N1bWVudGVkIHNlcnZpY2UgIQotICoKLSAqIEBu
YW1lIG5nTW9jay4kYnJvd3NlcgotICoKLSAqIEBkZXNjcmlwdGlvbgotICogVGhpcyBzZXJ2aWNl
IGlzIGEgbW9jayBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgbmcuJGJyb3dzZXJ9LiBJdCBwcm92
aWRlcyBmYWtlCi0gKiBpbXBsZW1lbnRhdGlvbiBmb3IgY29tbW9ubHkgdXNlZCBicm93c2VyIGFw
aXMgdGhhdCBhcmUgaGFyZCB0byB0ZXN0LCBlLmcuIHNldFRpbWVvdXQsIHhociwKLSAqIGNvb2tp
ZXMsIGV0Yy4uLgotICoKLSAqIFRoZSBhcGkgb2YgdGhpcyBzZXJ2aWNlIGlzIHRoZSBzYW1lIGFz
IHRoYXQgb2YgdGhlIHJlYWwge0BsaW5rIG5nLiRicm93c2VyICRicm93c2VyfSwgZXhjZXB0Ci0g
KiB0aGF0IHRoZXJlIGFyZSBzZXZlcmFsIGhlbHBlciBtZXRob2RzIGF2YWlsYWJsZSB3aGljaCBj
YW4gYmUgdXNlZCBpbiB0ZXN0cy4KLSAqLwotYW5ndWxhci5tb2NrLiRCcm93c2VyUHJvdmlkZXIg
PSBmdW5jdGlvbigpIHsKLSAgdGhpcy4kZ2V0ID0gZnVuY3Rpb24oKXsKLSAgICByZXR1cm4gbmV3
IGFuZ3VsYXIubW9jay4kQnJvd3NlcigpOwotICB9OwotfTsKLQotYW5ndWxhci5tb2NrLiRCcm93
c2VyID0gZnVuY3Rpb24oKSB7Ci0gIHZhciBzZWxmID0gdGhpczsKLQotICB0aGlzLmlzTW9jayA9
IHRydWU7Ci0gIHNlbGYuJCR1cmwgPSAiaHR0cDovL3NlcnZlci8iOwotICBzZWxmLiQkbGFzdFVy
bCA9IHNlbGYuJCR1cmw7IC8vIHVzZWQgYnkgdXJsIHBvbGxpbmcgZm4KLSAgc2VsZi5wb2xsRm5z
ID0gW107Ci0KLSAgLy8gVE9ETyh2b2p0YSk6IHJlbW92ZSB0aGlzIHRlbXBvcmFyeSBhcGkKLSAg
c2VsZi4kJGNvbXBsZXRlT3V0c3RhbmRpbmdSZXF1ZXN0ID0gYW5ndWxhci5ub29wOwotICBzZWxm
LiQkaW5jT3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQgPSBhbmd1bGFyLm5vb3A7Ci0KLQotICAvLyBy
ZWdpc3RlciB1cmwgcG9sbGluZyBmbgotCi0gIHNlbGYub25VcmxDaGFuZ2UgPSBmdW5jdGlvbihs
aXN0ZW5lcikgewotICAgIHNlbGYucG9sbEZucy5wdXNoKAotICAgICAgZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIGlmIChzZWxmLiQkbGFzdFVybCAhPSBzZWxmLiQkdXJsKSB7Ci0gICAgICAgICAgc2Vs
Zi4kJGxhc3RVcmwgPSBzZWxmLiQkdXJsOwotICAgICAgICAgIGxpc3RlbmVyKHNlbGYuJCR1cmwp
OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgKTsKLQotICAgIHJldHVybiBsaXN0ZW5lcjsKLSAg
fTsKLQotICBzZWxmLmNvb2tpZUhhc2ggPSB7fTsKLSAgc2VsZi5sYXN0Q29va2llSGFzaCA9IHt9
OwotICBzZWxmLmRlZmVycmVkRm5zID0gW107Ci0gIHNlbGYuZGVmZXJyZWROZXh0SWQgPSAwOwot
Ci0gIHNlbGYuZGVmZXIgPSBmdW5jdGlvbihmbiwgZGVsYXkpIHsKLSAgICBkZWxheSA9IGRlbGF5
IHx8IDA7Ci0gICAgc2VsZi5kZWZlcnJlZEZucy5wdXNoKHt0aW1lOihzZWxmLmRlZmVyLm5vdyAr
IGRlbGF5KSwgZm46Zm4sIGlkOiBzZWxmLmRlZmVycmVkTmV4dElkfSk7Ci0gICAgc2VsZi5kZWZl
cnJlZEZucy5zb3J0KGZ1bmN0aW9uKGEsYil7IHJldHVybiBhLnRpbWUgLSBiLnRpbWU7fSk7Ci0g
ICAgcmV0dXJuIHNlbGYuZGVmZXJyZWROZXh0SWQrKzsKLSAgfTsKLQotCi0gIHNlbGYuZGVmZXIu
bm93ID0gMDsKLQotCi0gIHNlbGYuZGVmZXIuY2FuY2VsID0gZnVuY3Rpb24oZGVmZXJJZCkgewot
ICAgIHZhciBmbkluZGV4OwotCi0gICAgYW5ndWxhci5mb3JFYWNoKHNlbGYuZGVmZXJyZWRGbnMs
IGZ1bmN0aW9uKGZuLCBpbmRleCkgewotICAgICAgaWYgKGZuLmlkID09PSBkZWZlcklkKSBmbklu
ZGV4ID0gaW5kZXg7Ci0gICAgfSk7Ci0KLSAgICBpZiAoZm5JbmRleCAhPT0gdW5kZWZpbmVkKSB7
Ci0gICAgICBzZWxmLmRlZmVycmVkRm5zLnNwbGljZShmbkluZGV4LCAxKTsKLSAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLSAgfTsKLQotCi0gIC8qKgotICAg
KiBAbmFtZSBuZ01vY2suJGJyb3dzZXIjZGVmZXIuZmx1c2gKLSAgICogQG1ldGhvZE9mIG5nTW9j
ay4kYnJvd3NlcgotICAgKgotICAgKiBAZGVzY3JpcHRpb24KLSAgICogRmx1c2hlcyBhbGwgcGVu
ZGluZyByZXF1ZXN0cyBhbmQgZXhlY3V0ZXMgdGhlIGRlZmVyIGNhbGxiYWNrcy4KLSAgICoKLSAg
ICogQHBhcmFtIHtudW1iZXI9fSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGZsdXNoLiBTZWUg
e0BsaW5rICNkZWZlci5ub3d9Ci0gICAqLwotICBzZWxmLmRlZmVyLmZsdXNoID0gZnVuY3Rpb24o
ZGVsYXkpIHsKLSAgICBpZiAoYW5ndWxhci5pc0RlZmluZWQoZGVsYXkpKSB7Ci0gICAgICBzZWxm
LmRlZmVyLm5vdyArPSBkZWxheTsKLSAgICB9IGVsc2UgewotICAgICAgaWYgKHNlbGYuZGVmZXJy
ZWRGbnMubGVuZ3RoKSB7Ci0gICAgICAgIHNlbGYuZGVmZXIubm93ID0gc2VsZi5kZWZlcnJlZEZu
c1tzZWxmLmRlZmVycmVkRm5zLmxlbmd0aC0xXS50aW1lOwotICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgdGhyb3cgRXJyb3IoJ05vIGRlZmVycmVkIHRhc2tzIHRvIGJlIGZsdXNoZWQnKTsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICB3aGlsZSAoc2VsZi5kZWZlcnJlZEZucy5sZW5ndGggJiYgc2VsZi5k
ZWZlcnJlZEZuc1swXS50aW1lIDw9IHNlbGYuZGVmZXIubm93KSB7Ci0gICAgICBzZWxmLmRlZmVy
cmVkRm5zLnNoaWZ0KCkuZm4oKTsKLSAgICB9Ci0gIH07Ci0gIC8qKgotICAgKiBAbmFtZSBuZ01v
Y2suJGJyb3dzZXIjZGVmZXIubm93Ci0gICAqIEBwcm9wZXJ0eU9mIG5nTW9jay4kYnJvd3Nlcgot
ICAgKgotICAgKiBAZGVzY3JpcHRpb24KLSAgICogQ3VycmVudCBtaWxsaXNlY29uZHMgbW9jayB0
aW1lLgotICAgKi8KLQotICBzZWxmLiQkYmFzZUhyZWYgPSAnJzsKLSAgc2VsZi5iYXNlSHJlZiA9
IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLiQkYmFzZUhyZWY7Ci0gIH07Ci19OwotYW5n
dWxhci5tb2NrLiRCcm93c2VyLnByb3RvdHlwZSA9IHsKLQotLyoqCi0gICogQG5hbWUgbmdNb2Nr
LiRicm93c2VyI3BvbGwKLSAgKiBAbWV0aG9kT2YgbmdNb2NrLiRicm93c2VyCi0gICoKLSAgKiBA
ZGVzY3JpcHRpb24KLSAgKiBydW4gYWxsIGZucyBpbiBwb2xsRm5zCi0gICovCi0gIHBvbGw6IGZ1
bmN0aW9uIHBvbGwoKSB7Ci0gICAgYW5ndWxhci5mb3JFYWNoKHRoaXMucG9sbEZucywgZnVuY3Rp
b24ocG9sbEZuKXsKLSAgICAgIHBvbGxGbigpOwotICAgIH0pOwotICB9LAotCi0gIGFkZFBvbGxG
bjogZnVuY3Rpb24ocG9sbEZuKSB7Ci0gICAgdGhpcy5wb2xsRm5zLnB1c2gocG9sbEZuKTsKLSAg
ICByZXR1cm4gcG9sbEZuOwotICB9LAotCi0gIHVybDogZnVuY3Rpb24odXJsLCByZXBsYWNlKSB7
Ci0gICAgaWYgKHVybCkgewotICAgICAgdGhpcy4kJHVybCA9IHVybDsKLSAgICAgIHJldHVybiB0
aGlzOwotICAgIH0KLQotICAgIHJldHVybiB0aGlzLiQkdXJsOwotICB9LAotCi0gIGNvb2tpZXM6
ICBmdW5jdGlvbihuYW1lLCB2YWx1ZSkgewotICAgIGlmIChuYW1lKSB7Ci0gICAgICBpZiAodmFs
dWUgPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLmNvb2tpZUhhc2hbbmFtZV07
Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpZiAoYW5ndWxhci5pc1N0cmluZyh2YWx1ZSkgJiYg
ICAgICAgLy9zdHJpbmdzIG9ubHkKLSAgICAgICAgICAgIHZhbHVlLmxlbmd0aCA8PSA0MDk2KSB7
ICAgICAgICAgIC8vc3RyaWN0IGNvb2tpZSBzdG9yYWdlIGxpbWl0cwotICAgICAgICAgIHRoaXMu
Y29va2llSGFzaFtuYW1lXSA9IHZhbHVlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAgIGlmICghYW5ndWxhci5lcXVhbHModGhpcy5jb29raWVIYXNoLCB0aGlzLmxhc3RD
b29raWVIYXNoKSkgewotICAgICAgICB0aGlzLmxhc3RDb29raWVIYXNoID0gYW5ndWxhci5jb3B5
KHRoaXMuY29va2llSGFzaCk7Ci0gICAgICAgIHRoaXMuY29va2llSGFzaCA9IGFuZ3VsYXIuY29w
eSh0aGlzLmNvb2tpZUhhc2gpOwotICAgICAgfQotICAgICAgcmV0dXJuIHRoaXMuY29va2llSGFz
aDsKLSAgICB9Ci0gIH0sCi0KLSAgbm90aWZ5V2hlbk5vT3V0c3RhbmRpbmdSZXF1ZXN0czogZnVu
Y3Rpb24oZm4pIHsKLSAgICBmbigpOwotICB9Ci19OwotCi0KLS8qKgotICogQG5nZG9jIG9iamVj
dAotICogQG5hbWUgbmdNb2NrLiRleGNlcHRpb25IYW5kbGVyUHJvdmlkZXIKLSAqCi0gKiBAZGVz
Y3JpcHRpb24KLSAqIENvbmZpZ3VyZXMgdGhlIG1vY2sgaW1wbGVtZW50YXRpb24gb2Yge0BsaW5r
IG5nLiRleGNlcHRpb25IYW5kbGVyfSB0byByZXRocm93IG9yIHRvIGxvZyBlcnJvcnMgcGFzc2Vk
Ci0gKiBpbnRvIHRoZSBgJGV4Y2VwdGlvbkhhbmRsZXJgLgotICovCi0KLS8qKgotICogQG5nZG9j
IG9iamVjdAotICogQG5hbWUgbmdNb2NrLiRleGNlcHRpb25IYW5kbGVyCi0gKgotICogQGRlc2Ny
aXB0aW9uCi0gKiBNb2NrIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBuZy4kZXhjZXB0aW9uSGFu
ZGxlcn0gdGhhdCByZXRocm93cyBvciBsb2dzIGVycm9ycyBwYXNzZWQKLSAqIGludG8gaXQuIFNl
ZSB7QGxpbmsgbmdNb2NrLiRleGNlcHRpb25IYW5kbGVyUHJvdmlkZXIgJGV4Y2VwdGlvbkhhbmRs
ZXJQcm92aWRlcn0gZm9yIGNvbmZpZ3VyYXRpb24KLSAqIGluZm9ybWF0aW9uLgotICoKLSAqCi0g
KiA8cHJlPgotICogICBkZXNjcmliZSgnJGV4Y2VwdGlvbkhhbmRsZXJQcm92aWRlcicsIGZ1bmN0
aW9uKCkgewotICoKLSAqICAgICBpdCgnc2hvdWxkIGNhcHR1cmUgbG9nIG1lc3NhZ2VzIGFuZCBl
eGNlcHRpb25zJywgZnVuY3Rpb24oKSB7Ci0gKgotICogICAgICAgbW9kdWxlKGZ1bmN0aW9uKCRl
eGNlcHRpb25IYW5kbGVyUHJvdmlkZXIpIHsKLSAqICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXJQ
cm92aWRlci5tb2RlKCdsb2cnKTsKLSAqICAgICAgIH0pOwotICoKLSAqICAgICAgIGluamVjdChm
dW5jdGlvbigkbG9nLCAkZXhjZXB0aW9uSGFuZGxlciwgJHRpbWVvdXQpIHsKLSAqICAgICAgICAg
JHRpbWVvdXQoZnVuY3Rpb24oKSB7ICRsb2cubG9nKDEpOyB9KTsKLSAqICAgICAgICAgJHRpbWVv
dXQoZnVuY3Rpb24oKSB7ICRsb2cubG9nKDIpOyB0aHJvdyAnYmFuYW5hIHBlZWwnOyB9KTsKLSAq
ICAgICAgICAgJHRpbWVvdXQoZnVuY3Rpb24oKSB7ICRsb2cubG9nKDMpOyB9KTsKLSAqICAgICAg
ICAgZXhwZWN0KCRleGNlcHRpb25IYW5kbGVyLmVycm9ycykudG9FcXVhbChbXSk7Ci0gKiAgICAg
ICAgIGV4cGVjdCgkbG9nLmFzc2VydEVtcHR5KCkpOwotICogICAgICAgICAkdGltZW91dC5mbHVz
aCgpOwotICogICAgICAgICBleHBlY3QoJGV4Y2VwdGlvbkhhbmRsZXIuZXJyb3JzKS50b0VxdWFs
KFsnYmFuYW5hIHBlZWwnXSk7Ci0gKiAgICAgICAgIGV4cGVjdCgkbG9nLmxvZy5sb2dzKS50b0Vx
dWFsKFtbMV0sIFsyXSwgWzNdXSk7Ci0gKiAgICAgICB9KTsKLSAqICAgICB9KTsKLSAqICAgfSk7
Ci0gKiA8L3ByZT4KLSAqLwotCi1hbmd1bGFyLm1vY2suJEV4Y2VwdGlvbkhhbmRsZXJQcm92aWRl
ciA9IGZ1bmN0aW9uKCkgewotICB2YXIgaGFuZGxlcjsKLQotICAvKioKLSAgICogQG5nZG9jIG1l
dGhvZAotICAgKiBAbmFtZSBuZ01vY2suJGV4Y2VwdGlvbkhhbmRsZXJQcm92aWRlciNtb2RlCi0g
ICAqIEBtZXRob2RPZiBuZ01vY2suJGV4Y2VwdGlvbkhhbmRsZXJQcm92aWRlcgotICAgKgotICAg
KiBAZGVzY3JpcHRpb24KLSAgICogU2V0cyB0aGUgbG9nZ2luZyBtb2RlLgotICAgKgotICAgKiBA
cGFyYW0ge3N0cmluZ30gbW9kZSBNb2RlIG9mIG9wZXJhdGlvbiwgZGVmYXVsdHMgdG8gYHJldGhy
b3dgLgotICAgKgotICAgKiAgIC0gYHJldGhyb3dgOiBJZiBhbnkgZXJyb3JzIGFyZSBhcmUgcGFz
c2VkIGludG8gdGhlIGhhbmRsZXIgaW4gdGVzdHMsIGl0IHR5cGljYWxseQotICAgKiAgICAgICAg
ICAgICAgICBtZWFucyB0aGF0IHRoZXJlIGlzIGEgYnVnIGluIHRoZSBhcHBsaWNhdGlvbiBvciB0
ZXN0LCBzbyB0aGlzIG1vY2sgd2lsbAotICAgKiAgICAgICAgICAgICAgICBtYWtlIHRoZXNlIHRl
c3RzIGZhaWwuCi0gICAqICAgLSBgbG9nYDogU29tZXRpbWVzIGl0IGlzIGRlc2lyYWJsZSB0byB0
ZXN0IHRoYXQgYW4gZXJyb3IgaXMgdGhyb3csIGZvciB0aGlzIGNhc2UgdGhlIGBsb2dgIG1vZGUg
c3RvcmVzIGFuCi0gICAqICAgICAgICAgICAgYXJyYXkgb2YgZXJyb3JzIGluIGAkZXhjZXB0aW9u
SGFuZGxlci5lcnJvcnNgLCB0byBhbGxvdyBsYXRlciBhc3NlcnRpb24gb2YgdGhlbS4KLSAgICog
ICAgICAgICAgICBTZWUge0BsaW5rIG5nTW9jay4kbG9nI2Fzc2VydEVtcHR5IGFzc2VydEVtcHR5
KCl9IGFuZAotICAgKiAgICAgICAgICAgICB7QGxpbmsgbmdNb2NrLiRsb2cjcmVzZXQgcmVzZXQo
KX0KLSAgICovCi0gIHRoaXMubW9kZSA9IGZ1bmN0aW9uKG1vZGUpIHsKLSAgICBzd2l0Y2gobW9k
ZSkgewotICAgICAgY2FzZSAncmV0aHJvdyc6Ci0gICAgICAgIGhhbmRsZXIgPSBmdW5jdGlvbihl
KSB7Ci0gICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgfTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlICdsb2cnOgotICAgICAgICB2YXIgZXJyb3JzID0gW107Ci0KLSAgICAgICAgaGFuZGxl
ciA9IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7
Ci0gICAgICAgICAgICBlcnJvcnMucHVzaChlKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgZXJyb3JzLnB1c2goW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApKTsKLSAgICAgICAg
ICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaGFuZGxlci5lcnJvcnMgPSBlcnJvcnM7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgdGhyb3cgRXJyb3IoIlVua25vd24g
bW9kZSAnIiArIG1vZGUgKyAiJywgb25seSAnbG9nJy8ncmV0aHJvdycgbW9kZXMgYXJlIGFsbG93
ZWQhIik7Ci0gICAgfQotICB9OwotCi0gIHRoaXMuJGdldCA9IGZ1bmN0aW9uKCkgewotICAgIHJl
dHVybiBoYW5kbGVyOwotICB9OwotCi0gIHRoaXMubW9kZSgncmV0aHJvdycpOwotfTsKLQotCi0v
KioKLSAqIEBuZ2RvYyBzZXJ2aWNlCi0gKiBAbmFtZSBuZ01vY2suJGxvZwotICoKLSAqIEBkZXNj
cmlwdGlvbgotICogTW9jayBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgbmcuJGxvZ30gdGhhdCBn
YXRoZXJzIGFsbCBsb2dnZWQgbWVzc2FnZXMgaW4gYXJyYXlzCi0gKiAob25lIGFycmF5IHBlciBs
b2dnaW5nIGxldmVsKS4gVGhlc2UgYXJyYXlzIGFyZSBleHBvc2VkIGFzIGBsb2dzYCBwcm9wZXJ0
eSBvZiBlYWNoIG9mIHRoZQotICogbGV2ZWwtc3BlY2lmaWMgbG9nIGZ1bmN0aW9uLCBlLmcuIGZv
ciBsZXZlbCBgZXJyb3JgIHRoZSBhcnJheSBpcyBleHBvc2VkIGFzIGAkbG9nLmVycm9yLmxvZ3Ng
LgotICoKLSAqLwotYW5ndWxhci5tb2NrLiRMb2dQcm92aWRlciA9IGZ1bmN0aW9uKCkgewotCi0g
IGZ1bmN0aW9uIGNvbmNhdChhcnJheTEsIGFycmF5MiwgaW5kZXgpIHsKLSAgICByZXR1cm4gYXJy
YXkxLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnJheTIsIGluZGV4KSk7Ci0g
IH0KLQotCi0gIHRoaXMuJGdldCA9IGZ1bmN0aW9uICgpIHsKLSAgICB2YXIgJGxvZyA9IHsKLSAg
ICAgIGxvZzogZnVuY3Rpb24oKSB7ICRsb2cubG9nLmxvZ3MucHVzaChjb25jYXQoW10sIGFyZ3Vt
ZW50cywgMCkpOyB9LAotICAgICAgd2FybjogZnVuY3Rpb24oKSB7ICRsb2cud2Fybi5sb2dzLnB1
c2goY29uY2F0KFtdLCBhcmd1bWVudHMsIDApKTsgfSwKLSAgICAgIGluZm86IGZ1bmN0aW9uKCkg
eyAkbG9nLmluZm8ubG9ncy5wdXNoKGNvbmNhdChbXSwgYXJndW1lbnRzLCAwKSk7IH0sCi0gICAg
ICBlcnJvcjogZnVuY3Rpb24oKSB7ICRsb2cuZXJyb3IubG9ncy5wdXNoKGNvbmNhdChbXSwgYXJn
dW1lbnRzLCAwKSk7IH0KLSAgICB9OwotCi0gICAgLyoqCi0gICAgICogQG5nZG9jIG1ldGhvZAot
ICAgICAqIEBuYW1lIG5nTW9jay4kbG9nI3Jlc2V0Ci0gICAgICogQG1ldGhvZE9mIG5nTW9jay4k
bG9nCi0gICAgICoKLSAgICAgKiBAZGVzY3JpcHRpb24KLSAgICAgKiBSZXNldCBhbGwgb2YgdGhl
IGxvZ2dpbmcgYXJyYXlzIHRvIGVtcHR5LgotICAgICAqLwotICAgICRsb2cucmVzZXQgPSBmdW5j
dGlvbiAoKSB7Ci0gICAgICAvKioKLSAgICAgICAqIEBuZ2RvYyBwcm9wZXJ0eQotICAgICAgICog
QG5hbWUgbmdNb2NrLiRsb2cjbG9nLmxvZ3MKLSAgICAgICAqIEBwcm9wZXJ0eU9mIG5nTW9jay4k
bG9nCi0gICAgICAgKgotICAgICAgICogQGRlc2NyaXB0aW9uCi0gICAgICAgKiBBcnJheSBvZiBs
b2dnZWQgbWVzc2FnZXMuCi0gICAgICAgKi8KLSAgICAgICRsb2cubG9nLmxvZ3MgPSBbXTsKLSAg
ICAgIC8qKgotICAgICAgICogQG5nZG9jIHByb3BlcnR5Ci0gICAgICAgKiBAbmFtZSBuZ01vY2su
JGxvZyN3YXJuLmxvZ3MKLSAgICAgICAqIEBwcm9wZXJ0eU9mIG5nTW9jay4kbG9nCi0gICAgICAg
KgotICAgICAgICogQGRlc2NyaXB0aW9uCi0gICAgICAgKiBBcnJheSBvZiBsb2dnZWQgbWVzc2Fn
ZXMuCi0gICAgICAgKi8KLSAgICAgICRsb2cud2Fybi5sb2dzID0gW107Ci0gICAgICAvKioKLSAg
ICAgICAqIEBuZ2RvYyBwcm9wZXJ0eQotICAgICAgICogQG5hbWUgbmdNb2NrLiRsb2cjaW5mby5s
b2dzCi0gICAgICAgKiBAcHJvcGVydHlPZiBuZ01vY2suJGxvZwotICAgICAgICoKLSAgICAgICAq
IEBkZXNjcmlwdGlvbgotICAgICAgICogQXJyYXkgb2YgbG9nZ2VkIG1lc3NhZ2VzLgotICAgICAg
ICovCi0gICAgICAkbG9nLmluZm8ubG9ncyA9IFtdOwotICAgICAgLyoqCi0gICAgICAgKiBAbmdk
b2MgcHJvcGVydHkKLSAgICAgICAqIEBuYW1lIG5nTW9jay4kbG9nI2Vycm9yLmxvZ3MKLSAgICAg
ICAqIEBwcm9wZXJ0eU9mIG5nTW9jay4kbG9nCi0gICAgICAgKgotICAgICAgICogQGRlc2NyaXB0
aW9uCi0gICAgICAgKiBBcnJheSBvZiBsb2dnZWQgbWVzc2FnZXMuCi0gICAgICAgKi8KLSAgICAg
ICRsb2cuZXJyb3IubG9ncyA9IFtdOwotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBAbmdkb2Mg
bWV0aG9kCi0gICAgICogQG5hbWUgbmdNb2NrLiRsb2cjYXNzZXJ0RW1wdHkKLSAgICAgKiBAbWV0
aG9kT2YgbmdNb2NrLiRsb2cKLSAgICAgKgotICAgICAqIEBkZXNjcmlwdGlvbgotICAgICAqIEFz
c2VydCB0aGF0IHRoZSBhbGwgb2YgdGhlIGxvZ2dpbmcgbWV0aG9kcyBoYXZlIG5vIGxvZ2dlZCBt
ZXNzYWdlcy4gSWYgbWVzc2FnZXMgcHJlc2VudCwgYW4gZXhjZXB0aW9uIGlzIHRocm93bi4KLSAg
ICAgKi8KLSAgICAkbG9nLmFzc2VydEVtcHR5ID0gZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgZXJy
b3JzID0gW107Ci0gICAgICBhbmd1bGFyLmZvckVhY2goWydlcnJvcicsICd3YXJuJywgJ2luZm8n
LCAnbG9nJ10sIGZ1bmN0aW9uKGxvZ0xldmVsKSB7Ci0gICAgICAgIGFuZ3VsYXIuZm9yRWFjaCgk
bG9nW2xvZ0xldmVsXS5sb2dzLCBmdW5jdGlvbihsb2cpIHsKLSAgICAgICAgICBhbmd1bGFyLmZv
ckVhY2gobG9nLCBmdW5jdGlvbiAobG9nSXRlbSkgewotICAgICAgICAgICAgZXJyb3JzLnB1c2go
J01PQ0sgJGxvZyAoJyArIGxvZ0xldmVsICsgJyk6ICcgKyBTdHJpbmcobG9nSXRlbSkgKyAnXG4n
ICsgKGxvZ0l0ZW0uc3RhY2sgfHwgJycpKTsKLSAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0g
ICAgICB9KTsKLSAgICAgIGlmIChlcnJvcnMubGVuZ3RoKSB7Ci0gICAgICAgIGVycm9ycy51bnNo
aWZ0KCJFeHBlY3RlZCAkbG9nIHRvIGJlIGVtcHR5ISBFaXRoZXIgYSBtZXNzYWdlIHdhcyBsb2dn
ZWQgdW5leHBlY3RlZGx5LCBvciBhbiBleHBlY3RlZCAiICsKLSAgICAgICAgICAibG9nIG1lc3Nh
Z2Ugd2FzIG5vdCBjaGVja2VkIGFuZCByZW1vdmVkOiIpOwotICAgICAgICBlcnJvcnMucHVzaCgn
Jyk7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcnMuam9pbignXG4tLS0tLS0tLS1cbicp
KTsKLSAgICAgIH0KLSAgICB9OwotCi0gICAgJGxvZy5yZXNldCgpOwotICAgIHJldHVybiAkbG9n
OwotICB9OwotfTsKLQotCi0oZnVuY3Rpb24oKSB7Ci0gIHZhciBSX0lTTzgwNjFfU1RSID0gL14o
XGR7NH0pLT8oXGRcZCktPyhcZFxkKSg/OlQoXGRcZCkoPzpcOj8oXGRcZCkoPzpcOj8oXGRcZCko
PzpcLihcZHszfSkpPyk/KT8oWnwoWystXSkoXGRcZCk6PyhcZFxkKSkpPyQvOwotCi0gIGZ1bmN0
aW9uIGpzb25TdHJpbmdUb0RhdGUoc3RyaW5nKXsKLSAgICB2YXIgbWF0Y2g7Ci0gICAgaWYgKG1h
dGNoID0gc3RyaW5nLm1hdGNoKFJfSVNPODA2MV9TVFIpKSB7Ci0gICAgICB2YXIgZGF0ZSA9IG5l
dyBEYXRlKDApLAotICAgICAgICAgIHR6SG91ciA9IDAsCi0gICAgICAgICAgdHpNaW4gID0gMDsK
LSAgICAgIGlmIChtYXRjaFs5XSkgewotICAgICAgICB0ekhvdXIgPSBpbnQobWF0Y2hbOV0gKyBt
YXRjaFsxMF0pOwotICAgICAgICB0ek1pbiA9IGludChtYXRjaFs5XSArIG1hdGNoWzExXSk7Ci0g
ICAgICB9Ci0gICAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGludChtYXRjaFsxXSksIGludChtYXRj
aFsyXSkgLSAxLCBpbnQobWF0Y2hbM10pKTsKLSAgICAgIGRhdGUuc2V0VVRDSG91cnMoaW50KG1h
dGNoWzRdfHwwKSAtIHR6SG91ciwgaW50KG1hdGNoWzVdfHwwKSAtIHR6TWluLCBpbnQobWF0Y2hb
Nl18fDApLCBpbnQobWF0Y2hbN118fDApKTsKLSAgICAgIHJldHVybiBkYXRlOwotICAgIH0KLSAg
ICByZXR1cm4gc3RyaW5nOwotICB9Ci0KLSAgZnVuY3Rpb24gaW50KHN0cikgewotICAgIHJldHVy
biBwYXJzZUludChzdHIsIDEwKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHBhZE51bWJlcihudW0sIGRp
Z2l0cywgdHJpbSkgewotICAgIHZhciBuZWcgPSAnJzsKLSAgICBpZiAobnVtIDwgMCkgewotICAg
ICAgbmVnID0gICctJzsKLSAgICAgIG51bSA9IC1udW07Ci0gICAgfQotICAgIG51bSA9ICcnICsg
bnVtOwotICAgIHdoaWxlKG51bS5sZW5ndGggPCBkaWdpdHMpIG51bSA9ICcwJyArIG51bTsKLSAg
ICBpZiAodHJpbSkKLSAgICAgIG51bSA9IG51bS5zdWJzdHIobnVtLmxlbmd0aCAtIGRpZ2l0cyk7
Ci0gICAgcmV0dXJuIG5lZyArIG51bTsKLSAgfQotCi0KLSAgLyoqCi0gICAqIEBuZ2RvYyBvYmpl
Y3QKLSAgICogQG5hbWUgYW5ndWxhci5tb2NrLlR6RGF0ZQotICAgKiBAZGVzY3JpcHRpb24KLSAg
ICoKLSAgICogKk5PVEUqOiB0aGlzIGlzIG5vdCBhbiBpbmplY3RhYmxlIGluc3RhbmNlLCBqdXN0
IGEgZ2xvYmFsbHkgYXZhaWxhYmxlIG1vY2sgY2xhc3Mgb2YgYERhdGVgLgotICAgKgotICAgKiBN
b2NrIG9mIHRoZSBEYXRlIHR5cGUgd2hpY2ggaGFzIGl0cyB0aW1lem9uZSBzcGVjaWZpZWQgdmlh
IGNvbnN0cm9jdG9yIGFyZy4KLSAgICoKLSAgICogVGhlIG1haW4gcHVycG9zZSBpcyB0byBjcmVh
dGUgRGF0ZS1saWtlIGluc3RhbmNlcyB3aXRoIHRpbWV6b25lIGZpeGVkIHRvIHRoZSBzcGVjaWZp
ZWQgdGltZXpvbmUKLSAgICogb2Zmc2V0LCBzbyB0aGF0IHdlIGNhbiB0ZXN0IGNvZGUgdGhhdCBk
ZXBlbmRzIG9uIGxvY2FsIHRpbWV6b25lIHNldHRpbmdzIHdpdGhvdXQgZGVwZW5kZW5jeSBvbgot
ICAgKiB0aGUgdGltZSB6b25lIHNldHRpbmdzIG9mIHRoZSBtYWNoaW5lIHdoZXJlIHRoZSBjb2Rl
IGlzIHJ1bm5pbmcuCi0gICAqCi0gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgT2Zmc2V0IG9m
IHRoZSAqZGVzaXJlZCogdGltZXpvbmUgaW4gaG91cnMgKGZyYWN0aW9ucyB3aWxsIGJlIGhvbm9y
ZWQpCi0gICAqIEBwYXJhbSB7KG51bWJlcnxzdHJpbmcpfSB0aW1lc3RhbXAgVGltZXN0YW1wIHJl
cHJlc2VudGluZyB0aGUgZGVzaXJlZCB0aW1lIGluICpVVEMqCi0gICAqCi0gICAqIEBleGFtcGxl
Ci0gICAqICEhISEgV0FSTklORyAhISEhIQotICAgKiBUaGlzIGlzIG5vdCBhIGNvbXBsZXRlIERh
dGUgb2JqZWN0IHNvIG9ubHkgbWV0aG9kcyB0aGF0IHdlcmUgaW1wbGVtZW50ZWQgY2FuIGJlIGNh
bGxlZCBzYWZlbHkuCi0gICAqIFRvIG1ha2UgbWF0dGVycyB3b3JzZSwgVHpEYXRlIGluc3RhbmNl
cyBpbmhlcml0IHN0dWZmIGZyb20gRGF0ZSB2aWEgYSBwcm90b3R5cGUuCi0gICAqCi0gICAqIFdl
IGRvIG91ciBiZXN0IHRvIGludGVyY2VwdCBjYWxscyB0byAidW5pbXBsZW1lbnRlZCIgbWV0aG9k
cywgYnV0IHNpbmNlIHRoZSBsaXN0IG9mIG1ldGhvZHMgaXMKLSAgICogaW5jb21wbGV0ZSB3ZSBt
aWdodCBiZSBtaXNzaW5nIHNvbWUgbm9uLXN0YW5kYXJkIG1ldGhvZHMuIFRoaXMgY2FuIHJlc3Vs
dCBpbiBlcnJvcnMgbGlrZToKLSAgICogIkRhdGUucHJvdG90eXBlLmZvbyBjYWxsZWQgb24gaW5j
b21wYXRpYmxlIE9iamVjdCIuCi0gICAqCi0gICAqIDxwcmU+Ci0gICAqIHZhciBuZXdZZWFySW5C
cmF0aXNsYXZhID0gbmV3IFR6RGF0ZSgtMSwgJzIwMDktMTItMzFUMjM6MDA6MDBaJyk7Ci0gICAq
IG5ld1llYXJJbkJyYXRpc2xhdmEuZ2V0VGltZXpvbmVPZmZzZXQoKSA9PiAtNjA7Ci0gICAqIG5l
d1llYXJJbkJyYXRpc2xhdmEuZ2V0RnVsbFllYXIoKSA9PiAyMDEwOwotICAgKiBuZXdZZWFySW5C
cmF0aXNsYXZhLmdldE1vbnRoKCkgPT4gMDsKLSAgICogbmV3WWVhckluQnJhdGlzbGF2YS5nZXRE
YXRlKCkgPT4gMTsKLSAgICogbmV3WWVhckluQnJhdGlzbGF2YS5nZXRIb3VycygpID0+IDA7Ci0g
ICAqIG5ld1llYXJJbkJyYXRpc2xhdmEuZ2V0TWludXRlcygpID0+IDA7Ci0gICAqIDwvcHJlPgot
ICAgKgotICAgKi8KLSAgYW5ndWxhci5tb2NrLlR6RGF0ZSA9IGZ1bmN0aW9uIChvZmZzZXQsIHRp
bWVzdGFtcCkgewotICAgIHZhciBzZWxmID0gbmV3IERhdGUoMCk7Ci0gICAgaWYgKGFuZ3VsYXIu
aXNTdHJpbmcodGltZXN0YW1wKSkgewotICAgICAgdmFyIHRzU3RyID0gdGltZXN0YW1wOwotCi0g
ICAgICBzZWxmLm9yaWdEYXRlID0ganNvblN0cmluZ1RvRGF0ZSh0aW1lc3RhbXApOwotCi0gICAg
ICB0aW1lc3RhbXAgPSBzZWxmLm9yaWdEYXRlLmdldFRpbWUoKTsKLSAgICAgIGlmIChpc05hTih0
aW1lc3RhbXApKQotICAgICAgICB0aHJvdyB7Ci0gICAgICAgICAgbmFtZTogIklsbGVnYWwgQXJn
dW1lbnQiLAotICAgICAgICAgIG1lc3NhZ2U6ICJBcmcgJyIgKyB0c1N0ciArICInIHBhc3NlZCBp
bnRvIFR6RGF0ZSBjb25zdHJ1Y3RvciBpcyBub3QgYSB2YWxpZCBkYXRlIHN0cmluZyIKLSAgICAg
ICAgfTsKLSAgICB9IGVsc2UgewotICAgICAgc2VsZi5vcmlnRGF0ZSA9IG5ldyBEYXRlKHRpbWVz
dGFtcCk7Ci0gICAgfQotCi0gICAgdmFyIGxvY2FsT2Zmc2V0ID0gbmV3IERhdGUodGltZXN0YW1w
KS5nZXRUaW1lem9uZU9mZnNldCgpOwotICAgIHNlbGYub2Zmc2V0RGlmZiA9IGxvY2FsT2Zmc2V0
KjYwKjEwMDAgLSBvZmZzZXQqMTAwMCo2MCo2MDsKLSAgICBzZWxmLmRhdGUgPSBuZXcgRGF0ZSh0
aW1lc3RhbXAgKyBzZWxmLm9mZnNldERpZmYpOwotCi0gICAgc2VsZi5nZXRUaW1lID0gZnVuY3Rp
b24oKSB7Ci0gICAgICByZXR1cm4gc2VsZi5kYXRlLmdldFRpbWUoKSAtIHNlbGYub2Zmc2V0RGlm
ZjsKLSAgICB9OwotCi0gICAgc2VsZi50b0xvY2FsZURhdGVTdHJpbmcgPSBmdW5jdGlvbigpIHsK
LSAgICAgIHJldHVybiBzZWxmLmRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCk7Ci0gICAgfTsKLQot
ICAgIHNlbGYuZ2V0RnVsbFllYXIgPSBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiBzZWxmLmRh
dGUuZ2V0RnVsbFllYXIoKTsKLSAgICB9OwotCi0gICAgc2VsZi5nZXRNb250aCA9IGZ1bmN0aW9u
KCkgewotICAgICAgcmV0dXJuIHNlbGYuZGF0ZS5nZXRNb250aCgpOwotICAgIH07Ci0KLSAgICBz
ZWxmLmdldERhdGUgPSBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiBzZWxmLmRhdGUuZ2V0RGF0
ZSgpOwotICAgIH07Ci0KLSAgICBzZWxmLmdldEhvdXJzID0gZnVuY3Rpb24oKSB7Ci0gICAgICBy
ZXR1cm4gc2VsZi5kYXRlLmdldEhvdXJzKCk7Ci0gICAgfTsKLQotICAgIHNlbGYuZ2V0TWludXRl
cyA9IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIHNlbGYuZGF0ZS5nZXRNaW51dGVzKCk7Ci0g
ICAgfTsKLQotICAgIHNlbGYuZ2V0U2Vjb25kcyA9IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJu
IHNlbGYuZGF0ZS5nZXRTZWNvbmRzKCk7Ci0gICAgfTsKLQotICAgIHNlbGYuZ2V0VGltZXpvbmVP
ZmZzZXQgPSBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiBvZmZzZXQgKiA2MDsKLSAgICB9Owot
Ci0gICAgc2VsZi5nZXRVVENGdWxsWWVhciA9IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIHNl
bGYub3JpZ0RhdGUuZ2V0VVRDRnVsbFllYXIoKTsKLSAgICB9OwotCi0gICAgc2VsZi5nZXRVVENN
b250aCA9IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIHNlbGYub3JpZ0RhdGUuZ2V0VVRDTW9u
dGgoKTsKLSAgICB9OwotCi0gICAgc2VsZi5nZXRVVENEYXRlID0gZnVuY3Rpb24oKSB7Ci0gICAg
ICByZXR1cm4gc2VsZi5vcmlnRGF0ZS5nZXRVVENEYXRlKCk7Ci0gICAgfTsKLQotICAgIHNlbGYu
Z2V0VVRDSG91cnMgPSBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiBzZWxmLm9yaWdEYXRlLmdl
dFVUQ0hvdXJzKCk7Ci0gICAgfTsKLQotICAgIHNlbGYuZ2V0VVRDTWludXRlcyA9IGZ1bmN0aW9u
KCkgewotICAgICAgcmV0dXJuIHNlbGYub3JpZ0RhdGUuZ2V0VVRDTWludXRlcygpOwotICAgIH07
Ci0KLSAgICBzZWxmLmdldFVUQ1NlY29uZHMgPSBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiBz
ZWxmLm9yaWdEYXRlLmdldFVUQ1NlY29uZHMoKTsKLSAgICB9OwotCi0gICAgc2VsZi5nZXRVVENN
aWxsaXNlY29uZHMgPSBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiBzZWxmLm9yaWdEYXRlLmdl
dFVUQ01pbGxpc2Vjb25kcygpOwotICAgIH07Ci0KLSAgICBzZWxmLmdldERheSA9IGZ1bmN0aW9u
KCkgewotICAgICAgcmV0dXJuIHNlbGYuZGF0ZS5nZXREYXkoKTsKLSAgICB9OwotCi0gICAgLy8g
cHJvdmlkZSB0aGlzIG1ldGhvZCBvbmx5IG9uIGJyb3dzZXJzIHRoYXQgYWxyZWFkeSBoYXZlIGl0
Ci0gICAgaWYgKHNlbGYudG9JU09TdHJpbmcpIHsKLSAgICAgIHNlbGYudG9JU09TdHJpbmcgPSBm
dW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHBhZE51bWJlcihzZWxmLm9yaWdEYXRlLmdldFVU
Q0Z1bGxZZWFyKCksIDQpICsgJy0nICsKLSAgICAgICAgICAgICAgcGFkTnVtYmVyKHNlbGYub3Jp
Z0RhdGUuZ2V0VVRDTW9udGgoKSArIDEsIDIpICsgJy0nICsKLSAgICAgICAgICAgICAgcGFkTnVt
YmVyKHNlbGYub3JpZ0RhdGUuZ2V0VVRDRGF0ZSgpLCAyKSArICdUJyArCi0gICAgICAgICAgICAg
IHBhZE51bWJlcihzZWxmLm9yaWdEYXRlLmdldFVUQ0hvdXJzKCksIDIpICsgJzonICsKLSAgICAg
ICAgICAgICAgcGFkTnVtYmVyKHNlbGYub3JpZ0RhdGUuZ2V0VVRDTWludXRlcygpLCAyKSArICc6
JyArCi0gICAgICAgICAgICAgIHBhZE51bWJlcihzZWxmLm9yaWdEYXRlLmdldFVUQ1NlY29uZHMo
KSwgMikgKyAnLicgKwotICAgICAgICAgICAgICBwYWROdW1iZXIoc2VsZi5vcmlnRGF0ZS5nZXRV
VENNaWxsaXNlY29uZHMoKSwgMykgKyAnWicKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvL2hpZGUg
YWxsIG1ldGhvZHMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgbW9jayB0aGF0IHRoZSBEYXRlIHBy
b3RvdHlwZSBleHBvc2VzCi0gICAgdmFyIHVuaW1wbGVtZW50ZWRNZXRob2RzID0gWydnZXRNaWxs
aXNlY29uZHMnLCAnZ2V0VVRDRGF5JywKLSAgICAgICAgJ2dldFllYXInLCAnc2V0RGF0ZScsICdz
ZXRGdWxsWWVhcicsICdzZXRIb3VycycsICdzZXRNaWxsaXNlY29uZHMnLAotICAgICAgICAnc2V0
TWludXRlcycsICdzZXRNb250aCcsICdzZXRTZWNvbmRzJywgJ3NldFRpbWUnLCAnc2V0VVRDRGF0
ZScsICdzZXRVVENGdWxsWWVhcicsCi0gICAgICAgICdzZXRVVENIb3VycycsICdzZXRVVENNaWxs
aXNlY29uZHMnLCAnc2V0VVRDTWludXRlcycsICdzZXRVVENNb250aCcsICdzZXRVVENTZWNvbmRz
JywKLSAgICAgICAgJ3NldFllYXInLCAndG9EYXRlU3RyaW5nJywgJ3RvR01UU3RyaW5nJywgJ3Rv
SlNPTicsICd0b0xvY2FsZUZvcm1hdCcsICd0b0xvY2FsZVN0cmluZycsCi0gICAgICAgICd0b0xv
Y2FsZVRpbWVTdHJpbmcnLCAndG9Tb3VyY2UnLCAndG9TdHJpbmcnLCAndG9UaW1lU3RyaW5nJywg
J3RvVVRDU3RyaW5nJywgJ3ZhbHVlT2YnXTsKLQotICAgIGFuZ3VsYXIuZm9yRWFjaCh1bmltcGxl
bWVudGVkTWV0aG9kcywgZnVuY3Rpb24obWV0aG9kTmFtZSkgewotICAgICAgc2VsZlttZXRob2RO
YW1lXSA9IGZ1bmN0aW9uKCkgewotICAgICAgICB0aHJvdyBFcnJvcigiTWV0aG9kICciICsgbWV0
aG9kTmFtZSArICInIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgVHpEYXRlIG1vY2siKTsKLSAg
ICAgIH07Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gc2VsZjsKLSAgfTsKLQotICAvL21ha2UgInR6
RGF0ZUluc3RhbmNlIGluc3RhbmNlb2YgRGF0ZSIgcmV0dXJuIHRydWUKLSAgYW5ndWxhci5tb2Nr
LlR6RGF0ZS5wcm90b3R5cGUgPSBEYXRlLnByb3RvdHlwZTsKLX0pKCk7Ci0KLQotLyoqCi0gKiBA
bmdkb2MgZnVuY3Rpb24KLSAqIEBuYW1lIGFuZ3VsYXIubW9jay5kdW1wCi0gKiBAZGVzY3JpcHRp
b24KLSAqCi0gKiAqTk9URSo6IHRoaXMgaXMgbm90IGFuIGluamVjdGFibGUgaW5zdGFuY2UsIGp1
c3QgYSBnbG9iYWxseSBhdmFpbGFibGUgZnVuY3Rpb24uCi0gKgotICogTWV0aG9kIGZvciBzZXJp
YWxpemluZyBjb21tb24gYW5ndWxhciBvYmplY3RzIChzY29wZSwgZWxlbWVudHMsIGV0Yy4uKSBp
bnRvIHN0cmluZ3MsIHVzZWZ1bCBmb3IgZGVidWdnaW5nLgotICoKLSAqIFRoaXMgbWV0aG9kIGlz
IGFsc28gYXZhaWxhYmxlIG9uIHdpbmRvdywgd2hlcmUgaXQgY2FuIGJlIHVzZWQgdG8gZGlzcGxh
eSBvYmplY3RzIG9uIGRlYnVnIGNvbnNvbGUuCi0gKgotICogQHBhcmFtIHsqfSBvYmplY3QgLSBh
bnkgb2JqZWN0IHRvIHR1cm4gaW50byBzdHJpbmcuCi0gKiBAcmV0dXJuIHtzdHJpbmd9IGEgc2Vy
aWFsaXplZCBzdHJpbmcgb2YgdGhlIGFyZ3VtZW50Ci0gKi8KLWFuZ3VsYXIubW9jay5kdW1wID0g
ZnVuY3Rpb24ob2JqZWN0KSB7Ci0gIHJldHVybiBzZXJpYWxpemUob2JqZWN0KTsKLQotICBmdW5j
dGlvbiBzZXJpYWxpemUob2JqZWN0KSB7Ci0gICAgdmFyIG91dDsKLQotICAgIGlmIChhbmd1bGFy
LmlzRWxlbWVudChvYmplY3QpKSB7Ci0gICAgICBvYmplY3QgPSBhbmd1bGFyLmVsZW1lbnQob2Jq
ZWN0KTsKLSAgICAgIG91dCA9IGFuZ3VsYXIuZWxlbWVudCgnPGRpdj48L2Rpdj4nKTsKLSAgICAg
IGFuZ3VsYXIuZm9yRWFjaChvYmplY3QsIGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICAgICAgb3V0
LmFwcGVuZChhbmd1bGFyLmVsZW1lbnQoZWxlbWVudCkuY2xvbmUoKSk7Ci0gICAgICB9KTsKLSAg
ICAgIG91dCA9IG91dC5odG1sKCk7Ci0gICAgfSBlbHNlIGlmIChhbmd1bGFyLmlzQXJyYXkob2Jq
ZWN0KSkgewotICAgICAgb3V0ID0gW107Ci0gICAgICBhbmd1bGFyLmZvckVhY2gob2JqZWN0LCBm
dW5jdGlvbihvKSB7Ci0gICAgICAgIG91dC5wdXNoKHNlcmlhbGl6ZShvKSk7Ci0gICAgICB9KTsK
LSAgICAgIG91dCA9ICdbICcgKyBvdXQuam9pbignLCAnKSArICcgXSc7Ci0gICAgfSBlbHNlIGlm
IChhbmd1bGFyLmlzT2JqZWN0KG9iamVjdCkpIHsKLSAgICAgIGlmIChhbmd1bGFyLmlzRnVuY3Rp
b24ob2JqZWN0LiRldmFsKSAmJiBhbmd1bGFyLmlzRnVuY3Rpb24ob2JqZWN0LiRhcHBseSkpIHsK
LSAgICAgICAgb3V0ID0gc2VyaWFsaXplU2NvcGUob2JqZWN0KTsKLSAgICAgIH0gZWxzZSBpZiAo
b2JqZWN0IGluc3RhbmNlb2YgRXJyb3IpIHsKLSAgICAgICAgb3V0ID0gb2JqZWN0LnN0YWNrIHx8
ICgnJyArIG9iamVjdC5uYW1lICsgJzogJyArIG9iamVjdC5tZXNzYWdlKTsKLSAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgIG91dCA9IGFuZ3VsYXIudG9Kc29uKG9iamVjdCwgdHJ1ZSk7Ci0gICAgICB9
Ci0gICAgfSBlbHNlIHsKLSAgICAgIG91dCA9IFN0cmluZyhvYmplY3QpOwotICAgIH0KLQotICAg
IHJldHVybiBvdXQ7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXJpYWxpemVTY29wZShzY29wZSwgb2Zm
c2V0KSB7Ci0gICAgb2Zmc2V0ID0gb2Zmc2V0IHx8ICAnICAnOwotICAgIHZhciBsb2cgPSBbb2Zm
c2V0ICsgJ1Njb3BlKCcgKyBzY29wZS4kaWQgKyAnKTogeyddOwotICAgIGZvciAoIHZhciBrZXkg
aW4gc2NvcGUgKSB7Ci0gICAgICBpZiAoc2NvcGUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAha2V5
Lm1hdGNoKC9eKFwkfHRoaXMpLykpIHsKLSAgICAgICAgbG9nLnB1c2goJyAgJyArIGtleSArICc6
ICcgKyBhbmd1bGFyLnRvSnNvbihzY29wZVtrZXldKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHZh
ciBjaGlsZCA9IHNjb3BlLiQkY2hpbGRIZWFkOwotICAgIHdoaWxlKGNoaWxkKSB7Ci0gICAgICBs
b2cucHVzaChzZXJpYWxpemVTY29wZShjaGlsZCwgb2Zmc2V0ICsgJyAgJykpOwotICAgICAgY2hp
bGQgPSBjaGlsZC4kJG5leHRTaWJsaW5nOwotICAgIH0KLSAgICBsb2cucHVzaCgnfScpOwotICAg
IHJldHVybiBsb2cuam9pbignXG4nICsgb2Zmc2V0KTsKLSAgfQotfTsKLQotLyoqCi0gKiBAbmdk
b2Mgb2JqZWN0Ci0gKiBAbmFtZSBuZ01vY2suJGh0dHBCYWNrZW5kCi0gKiBAZGVzY3JpcHRpb24K
LSAqIEZha2UgSFRUUCBiYWNrZW5kIGltcGxlbWVudGF0aW9uIHN1aXRhYmxlIGZvciB1bml0IHRl
c3RpbmcgYXBwbGljYXRpb24gdGhhdCB1c2UgdGhlCi0gKiB7QGxpbmsgbmcuJGh0dHAgJGh0dHAg
c2VydmljZX0uCi0gKgotICogKk5vdGUqOiBGb3IgZmFrZSBodHRwIGJhY2tlbmQgaW1wbGVtZW50
YXRpb24gc3VpdGFibGUgZm9yIGVuZC10by1lbmQgdGVzdGluZyBvciBiYWNrZW5kLWxlc3MKLSAq
IGRldmVsb3BtZW50IHBsZWFzZSBzZWUge0BsaW5rIG5nTW9ja0UyRS4kaHR0cEJhY2tlbmQgZTJl
ICRodHRwQmFja2VuZCBtb2NrfS4KLSAqCi0gKiBEdXJpbmcgdW5pdCB0ZXN0aW5nLCB3ZSB3YW50
IG91ciB1bml0IHRlc3RzIHRvIHJ1biBxdWlja2x5IGFuZCBoYXZlIG5vIGV4dGVybmFsIGRlcGVu
ZGVuY2llcyBzbwotICogd2UgZG9u4oCZdCB3YW50IHRvIHNlbmQge0BsaW5rIGh0dHBzOi8vZGV2
ZWxvcGVyLm1vemlsbGEub3JnL2VuL3htbGh0dHByZXF1ZXN0IFhIUn0gb3IKLSAqIHtAbGluayBo
dHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0pTT05QIEpTT05QfSByZXF1ZXN0cyB0byBhIHJl
YWwgc2VydmVyLiBBbGwgd2UgcmVhbGx5IG5lZWQgaXMKLSAqIHRvIHZlcmlmeSB3aGV0aGVyIGEg
Y2VydGFpbiByZXF1ZXN0IGhhcyBiZWVuIHNlbnQgb3Igbm90LCBvciBhbHRlcm5hdGl2ZWx5IGp1
c3QgbGV0IHRoZQotICogYXBwbGljYXRpb24gbWFrZSByZXF1ZXN0cywgcmVzcG9uZCB3aXRoIHBy
ZS10cmFpbmVkIHJlc3BvbnNlcyBhbmQgYXNzZXJ0IHRoYXQgdGhlIGVuZCByZXN1bHQgaXMKLSAq
IHdoYXQgd2UgZXhwZWN0IGl0IHRvIGJlLgotICoKLSAqIFRoaXMgbW9jayBpbXBsZW1lbnRhdGlv
biBjYW4gYmUgdXNlZCB0byByZXNwb25kIHdpdGggc3RhdGljIG9yIGR5bmFtaWMgcmVzcG9uc2Vz
IHZpYSB0aGUKLSAqIGBleHBlY3RgIGFuZCBgd2hlbmAgYXBpcyBhbmQgdGhlaXIgc2hvcnRjdXRz
IChgZXhwZWN0R0VUYCwgYHdoZW5QT1NUYCwgZXRjKS4KLSAqCi0gKiBXaGVuIGFuIEFuZ3VsYXIg
YXBwbGljYXRpb24gbmVlZHMgc29tZSBkYXRhIGZyb20gYSBzZXJ2ZXIsIGl0IGNhbGxzIHRoZSAk
aHR0cCBzZXJ2aWNlLCB3aGljaAotICogc2VuZHMgdGhlIHJlcXVlc3QgdG8gYSByZWFsIHNlcnZl
ciB1c2luZyAkaHR0cEJhY2tlbmQgc2VydmljZS4gV2l0aCBkZXBlbmRlbmN5IGluamVjdGlvbiwg
aXQgaXMKLSAqIGVhc3kgdG8gaW5qZWN0ICRodHRwQmFja2VuZCBtb2NrICh3aGljaCBoYXMgdGhl
IHNhbWUgQVBJIGFzICRodHRwQmFja2VuZCkgYW5kIHVzZSBpdCB0byB2ZXJpZnkKLSAqIHRoZSBy
ZXF1ZXN0cyBhbmQgcmVzcG9uZCB3aXRoIHNvbWUgdGVzdGluZyBkYXRhIHdpdGhvdXQgc2VuZGlu
ZyBhIHJlcXVlc3QgdG8gcmVhbCBzZXJ2ZXIuCi0gKgotICogVGhlcmUgYXJlIHR3byB3YXlzIHRv
IHNwZWNpZnkgd2hhdCB0ZXN0IGRhdGEgc2hvdWxkIGJlIHJldHVybmVkIGFzIGh0dHAgcmVzcG9u
c2VzIGJ5IHRoZSBtb2NrCi0gKiBiYWNrZW5kIHdoZW4gdGhlIGNvZGUgdW5kZXIgdGVzdCBtYWtl
cyBodHRwIHJlcXVlc3RzOgotICoKLSAqIC0gYCRodHRwQmFja2VuZC5leHBlY3RgIC0gc3BlY2lm
aWVzIGEgcmVxdWVzdCBleHBlY3RhdGlvbgotICogLSBgJGh0dHBCYWNrZW5kLndoZW5gIC0gc3Bl
Y2lmaWVzIGEgYmFja2VuZCBkZWZpbml0aW9uCi0gKgotICoKLSAqICMgUmVxdWVzdCBFeHBlY3Rh
dGlvbnMgdnMgQmFja2VuZCBEZWZpbml0aW9ucwotICoKLSAqIFJlcXVlc3QgZXhwZWN0YXRpb25z
IHByb3ZpZGUgYSB3YXkgdG8gbWFrZSBhc3NlcnRpb25zIGFib3V0IHJlcXVlc3RzIG1hZGUgYnkg
dGhlIGFwcGxpY2F0aW9uIGFuZAotICogdG8gZGVmaW5lIHJlc3BvbnNlcyBmb3IgdGhvc2UgcmVx
dWVzdHMuIFRoZSB0ZXN0IHdpbGwgZmFpbCBpZiB0aGUgZXhwZWN0ZWQgcmVxdWVzdHMgYXJlIG5v
dCBtYWRlCi0gKiBvciB0aGV5IGFyZSBtYWRlIGluIHRoZSB3cm9uZyBvcmRlci4KLSAqCi0gKiBC
YWNrZW5kIGRlZmluaXRpb25zIGFsbG93IHlvdSB0byBkZWZpbmUgYSBmYWtlIGJhY2tlbmQgZm9y
IHlvdXIgYXBwbGljYXRpb24gd2hpY2ggZG9lc24ndCBhc3NlcnQKLSAqIGlmIGEgcGFydGljdWxh
ciByZXF1ZXN0IHdhcyBtYWRlIG9yIG5vdCwgaXQganVzdCByZXR1cm5zIGEgdHJhaW5lZCByZXNw
b25zZSBpZiBhIHJlcXVlc3QgaXMgbWFkZS4KLSAqIFRoZSB0ZXN0IHdpbGwgcGFzcyB3aGV0aGVy
IG9yIG5vdCB0aGUgcmVxdWVzdCBnZXRzIG1hZGUgZHVyaW5nIHRlc3RpbmcuCi0gKgotICoKLSAq
IDx0YWJsZSBjbGFzcz0idGFibGUiPgotICogICA8dHI+PHRoIHdpZHRoPSIyMjBweCI+PC90aD48
dGg+UmVxdWVzdCBleHBlY3RhdGlvbnM8L3RoPjx0aD5CYWNrZW5kIGRlZmluaXRpb25zPC90aD48
L3RyPgotICogICA8dHI+Ci0gKiAgICAgPHRoPlN5bnRheDwvdGg+Ci0gKiAgICAgPHRkPi5leHBl
Y3QoLi4uKS5yZXNwb25kKC4uLik8L3RkPgotICogICAgIDx0ZD4ud2hlbiguLi4pLnJlc3BvbmQo
Li4uKTwvdGQ+Ci0gKiAgIDwvdHI+Ci0gKiAgIDx0cj4KLSAqICAgICA8dGg+VHlwaWNhbCB1c2Fn
ZTwvdGg+Ci0gKiAgICAgPHRkPnN0cmljdCB1bml0IHRlc3RzPC90ZD4KLSAqICAgICA8dGQ+bG9v
c2UgKGJsYWNrLWJveCkgdW5pdCB0ZXN0aW5nPC90ZD4KLSAqICAgPC90cj4KLSAqICAgPHRyPgot
ICogICAgIDx0aD5GdWxmaWxscyBtdWx0aXBsZSByZXF1ZXN0czwvdGg+Ci0gKiAgICAgPHRkPk5P
PC90ZD4KLSAqICAgICA8dGQ+WUVTPC90ZD4KLSAqICAgPC90cj4KLSAqICAgPHRyPgotICogICAg
IDx0aD5PcmRlciBvZiByZXF1ZXN0cyBtYXR0ZXJzPC90aD4KLSAqICAgICA8dGQ+WUVTPC90ZD4K
LSAqICAgICA8dGQ+Tk88L3RkPgotICogICA8L3RyPgotICogICA8dHI+Ci0gKiAgICAgPHRoPlJl
cXVlc3QgcmVxdWlyZWQ8L3RoPgotICogICAgIDx0ZD5ZRVM8L3RkPgotICogICAgIDx0ZD5OTzwv
dGQ+Ci0gKiAgIDwvdHI+Ci0gKiAgIDx0cj4KLSAqICAgICA8dGg+UmVzcG9uc2UgcmVxdWlyZWQ8
L3RoPgotICogICAgIDx0ZD5vcHRpb25hbCAoc2VlIGJlbG93KTwvdGQ+Ci0gKiAgICAgPHRkPllF
UzwvdGQ+Ci0gKiAgIDwvdHI+Ci0gKiA8L3RhYmxlPgotICoKLSAqIEluIGNhc2VzIHdoZXJlIGJv
dGggYmFja2VuZCBkZWZpbml0aW9ucyBhbmQgcmVxdWVzdCBleHBlY3RhdGlvbnMgYXJlIHNwZWNp
ZmllZCBkdXJpbmcgdW5pdAotICogdGVzdGluZywgdGhlIHJlcXVlc3QgZXhwZWN0YXRpb25zIGFy
ZSBldmFsdWF0ZWQgZmlyc3QuCi0gKgotICogSWYgYSByZXF1ZXN0IGV4cGVjdGF0aW9uIGhhcyBu
byByZXNwb25zZSBzcGVjaWZpZWQsIHRoZSBhbGdvcml0aG0gd2lsbCBzZWFyY2ggeW91ciBiYWNr
ZW5kCi0gKiBkZWZpbml0aW9ucyBmb3IgYW4gYXBwcm9wcmlhdGUgcmVzcG9uc2UuCi0gKgotICog
SWYgYSByZXF1ZXN0IGRpZG4ndCBtYXRjaCBhbnkgZXhwZWN0YXRpb24gb3IgaWYgdGhlIGV4cGVj
dGF0aW9uIGRvZXNuJ3QgaGF2ZSB0aGUgcmVzcG9uc2UKLSAqIGRlZmluZWQsIHRoZSBiYWNrZW5k
IGRlZmluaXRpb25zIGFyZSBldmFsdWF0ZWQgaW4gc2VxdWVudGlhbCBvcmRlciB0byBzZWUgaWYg
YW55IG9mIHRoZW0gbWF0Y2gKLSAqIHRoZSByZXF1ZXN0LiBUaGUgcmVzcG9uc2UgZnJvbSB0aGUg
Zmlyc3QgbWF0Y2hlZCBkZWZpbml0aW9uIGlzIHJldHVybmVkLgotICoKLSAqCi0gKiAjIEZsdXNo
aW5nIEhUVFAgcmVxdWVzdHMKLSAqCi0gKiBUaGUgJGh0dHBCYWNrZW5kIHVzZWQgaW4gcHJvZHVj
dGlvbiwgYWx3YXlzIHJlc3BvbmRzIHRvIHJlcXVlc3RzIHdpdGggcmVzcG9uc2VzIGFzeW5jaHJv
bm91c2x5LgotICogSWYgd2UgcHJlc2VydmVkIHRoaXMgYmVoYXZpb3IgaW4gdW5pdCB0ZXN0aW5n
LCB3ZSdkIGhhdmUgdG8gY3JlYXRlIGFzeW5jIHVuaXQgdGVzdHMsIHdoaWNoIGFyZQotICogaGFy
ZCB0byB3cml0ZSwgZm9sbG93IGFuZCBtYWludGFpbi4gQXQgdGhlIHNhbWUgdGltZSB0aGUgdGVz
dGluZyBtb2NrLCBjYW4ndCByZXNwb25kCi0gKiBzeW5jaHJvbm91c2x5IGJlY2F1c2UgdGhhdCB3
b3VsZCBjaGFuZ2UgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgY29kZSB1bmRlciB0ZXN0LiBGb3IgdGhp
cyByZWFzb24gdGhlCi0gKiBtb2NrICRodHRwQmFja2VuZCBoYXMgYSBgZmx1c2goKWAgbWV0aG9k
LCB3aGljaCBhbGxvd3MgdGhlIHRlc3QgdG8gZXhwbGljaXRseSBmbHVzaCBwZW5kaW5nCi0gKiBy
ZXF1ZXN0cyBhbmQgdGh1cyBwcmVzZXJ2aW5nIHRoZSBhc3luYyBhcGkgb2YgdGhlIGJhY2tlbmQs
IHdoaWxlIGFsbG93aW5nIHRoZSB0ZXN0IHRvIGV4ZWN1dGUKLSAqIHN5bmNocm9ub3VzbHkuCi0g
KgotICoKLSAqICMgVW5pdCB0ZXN0aW5nIHdpdGggbW9jayAkaHR0cEJhY2tlbmQKLSAqCi0gKiA8
cHJlPgotICAgLy8gY29udHJvbGxlcgotICAgZnVuY3Rpb24gTXlDb250cm9sbGVyKCRzY29wZSwg
JGh0dHApIHsKLSAgICAgJGh0dHAuZ2V0KCcvYXV0aC5weScpLnN1Y2Nlc3MoZnVuY3Rpb24oZGF0
YSkgewotICAgICAgICRzY29wZS51c2VyID0gZGF0YTsKLSAgICAgfSk7Ci0KLSAgICAgdGhpcy5z
YXZlTWVzc2FnZSA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICAgICAkc2NvcGUuc3RhdHVzID0g
J1NhdmluZy4uLic7Ci0gICAgICAgJGh0dHAucG9zdCgnL2FkZC1tc2cucHknLCBtZXNzYWdlKS5z
dWNjZXNzKGZ1bmN0aW9uKHJlc3BvbnNlKSB7Ci0gICAgICAgICAkc2NvcGUuc3RhdHVzID0gJyc7
Ci0gICAgICAgfSkuZXJyb3IoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAkc2NvcGUuc3RhdHVzID0g
J0VSUk9SISc7Ci0gICAgICAgfSk7Ci0gICAgIH07Ci0gICB9Ci0KLSAgIC8vIHRlc3RpbmcgY29u
dHJvbGxlcgotICAgdmFyICRodHRwQmFja2VuZDsKLQotICAgYmVmb3JlRWFjaChpbmplY3QoZnVu
Y3Rpb24oJGluamVjdG9yKSB7Ci0gICAgICRodHRwQmFja2VuZCA9ICRpbmplY3Rvci5nZXQoJyRo
dHRwQmFja2VuZCcpOwotCi0gICAgIC8vIGJhY2tlbmQgZGVmaW5pdGlvbiBjb21tb24gZm9yIGFs
bCB0ZXN0cwotICAgICAkaHR0cEJhY2tlbmQud2hlbignR0VUJywgJy9hdXRoLnB5JykucmVzcG9u
ZCh7dXNlcklkOiAndXNlclgnfSwgeydBLVRva2VuJzogJ3h4eCd9KTsKLSAgIH0pKTsKLQotCi0g
ICBhZnRlckVhY2goZnVuY3Rpb24oKSB7Ci0gICAgICRodHRwQmFja2VuZC52ZXJpZnlOb091dHN0
YW5kaW5nRXhwZWN0YXRpb24oKTsKLSAgICAgJGh0dHBCYWNrZW5kLnZlcmlmeU5vT3V0c3RhbmRp
bmdSZXF1ZXN0KCk7Ci0gICB9KTsKLQotCi0gICBpdCgnc2hvdWxkIGZldGNoIGF1dGhlbnRpY2F0
aW9uIHRva2VuJywgZnVuY3Rpb24oKSB7Ci0gICAgICRodHRwQmFja2VuZC5leHBlY3RHRVQoJy9h
dXRoLnB5Jyk7Ci0gICAgIHZhciBjb250cm9sbGVyID0gc2NvcGUuJG5ldyhNeUNvbnRyb2xsZXIp
OwotICAgICAkaHR0cEJhY2tlbmQuZmx1c2goKTsKLSAgIH0pOwotCi0KLSAgIGl0KCdzaG91bGQg
c2VuZCBtc2cgdG8gc2VydmVyJywgZnVuY3Rpb24oKSB7Ci0gICAgIC8vIG5vdyB5b3UgZG9u4oCZ
dCBjYXJlIGFib3V0IHRoZSBhdXRoZW50aWNhdGlvbiwgYnV0Ci0gICAgIC8vIHRoZSBjb250cm9s
bGVyIHdpbGwgc3RpbGwgc2VuZCB0aGUgcmVxdWVzdCBhbmQKLSAgICAgLy8gJGh0dHBCYWNrZW5k
IHdpbGwgcmVzcG9uZCB3aXRob3V0IHlvdSBoYXZpbmcgdG8KLSAgICAgLy8gc3BlY2lmeSB0aGUg
ZXhwZWN0YXRpb24gYW5kIHJlc3BvbnNlIGZvciB0aGlzIHJlcXVlc3QKLSAgICAgJGh0dHBCYWNr
ZW5kLmV4cGVjdFBPU1QoJy9hZGQtbXNnLnB5JywgJ21lc3NhZ2UgY29udGVudCcpLnJlc3BvbmQo
MjAxLCAnJyk7Ci0KLSAgICAgdmFyIGNvbnRyb2xsZXIgPSBzY29wZS4kbmV3KE15Q29udHJvbGxl
cik7Ci0gICAgICRodHRwQmFja2VuZC5mbHVzaCgpOwotICAgICBjb250cm9sbGVyLnNhdmVNZXNz
YWdlKCdtZXNzYWdlIGNvbnRlbnQnKTsKLSAgICAgZXhwZWN0KGNvbnRyb2xsZXIuc3RhdHVzKS50
b0JlKCdTYXZpbmcuLi4nKTsKLSAgICAgJGh0dHBCYWNrZW5kLmZsdXNoKCk7Ci0gICAgIGV4cGVj
dChjb250cm9sbGVyLnN0YXR1cykudG9CZSgnJyk7Ci0gICB9KTsKLQotCi0gICBpdCgnc2hvdWxk
IHNlbmQgYXV0aCBoZWFkZXInLCBmdW5jdGlvbigpIHsKLSAgICAgJGh0dHBCYWNrZW5kLmV4cGVj
dFBPU1QoJy9hZGQtbXNnLnB5JywgdW5kZWZpbmVkLCBmdW5jdGlvbihoZWFkZXJzKSB7Ci0gICAg
ICAgLy8gY2hlY2sgaWYgdGhlIGhlYWRlciB3YXMgc2VuZCwgaWYgaXQgd2Fzbid0IHRoZSBleHBl
Y3RhdGlvbiB3b24ndAotICAgICAgIC8vIG1hdGNoIHRoZSByZXF1ZXN0IGFuZCB0aGUgdGVzdCB3
aWxsIGZhaWwKLSAgICAgICByZXR1cm4gaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID09ICd4eHgn
OwotICAgICB9KS5yZXNwb25kKDIwMSwgJycpOwotCi0gICAgIHZhciBjb250cm9sbGVyID0gc2Nv
cGUuJG5ldyhNeUNvbnRyb2xsZXIpOwotICAgICBjb250cm9sbGVyLnNhdmVNZXNzYWdlKCd3aGF0
ZXZlcicpOwotICAgICAkaHR0cEJhY2tlbmQuZmx1c2goKTsKLSAgIH0pOwotICAgPC9wcmU+Ci0g
Ki8KLWFuZ3VsYXIubW9jay4kSHR0cEJhY2tlbmRQcm92aWRlciA9IGZ1bmN0aW9uKCkgewotICB0
aGlzLiRnZXQgPSBbY3JlYXRlSHR0cEJhY2tlbmRNb2NrXTsKLX07Ci0KLS8qKgotICogR2VuZXJh
bCBmYWN0b3J5IGZ1bmN0aW9uIGZvciAkaHR0cEJhY2tlbmQgbW9jay4KLSAqIFJldHVybnMgaW5z
dGFuY2UgZm9yIHVuaXQgdGVzdGluZyAod2hlbiBubyBhcmd1bWVudHMgc3BlY2lmaWVkKToKLSAq
ICAgLSBwYXNzaW5nIHRocm91Z2ggaXMgZGlzYWJsZWQKLSAqICAgLSBhdXRvIGZsdXNoaW5nIGlz
IGRpc2FibGVkCi0gKgotICogUmV0dXJucyBpbnN0YW5jZSBmb3IgZTJlIHRlc3RpbmcgKHdoZW4g
YCRkZWxlZ2F0ZWAgYW5kIGAkYnJvd3NlcmAgc3BlY2lmaWVkKToKLSAqICAgLSBwYXNzaW5nIHRo
cm91Z2ggKGRlbGVnYXRpbmcgcmVxdWVzdCB0byByZWFsIGJhY2tlbmQpIGlzIGVuYWJsZWQKLSAq
ICAgLSBhdXRvIGZsdXNoaW5nIGlzIGVuYWJsZWQKLSAqCi0gKiBAcGFyYW0ge09iamVjdD19ICRk
ZWxlZ2F0ZSBSZWFsICRodHRwQmFja2VuZCBpbnN0YW5jZSAoYWxsb3cgcGFzc2luZyB0aHJvdWdo
IGlmIHNwZWNpZmllZCkKLSAqIEBwYXJhbSB7T2JqZWN0PX0gJGJyb3dzZXIgQXV0by1mbHVzaGlu
ZyBlbmFibGVkIGlmIHNwZWNpZmllZAotICogQHJldHVybiB7T2JqZWN0fSBJbnN0YW5jZSBvZiAk
aHR0cEJhY2tlbmQgbW9jawotICovCi1mdW5jdGlvbiBjcmVhdGVIdHRwQmFja2VuZE1vY2soJGRl
bGVnYXRlLCAkYnJvd3NlcikgewotICB2YXIgZGVmaW5pdGlvbnMgPSBbXSwKLSAgICAgIGV4cGVj
dGF0aW9ucyA9IFtdLAotICAgICAgcmVzcG9uc2VzID0gW10sCi0gICAgICByZXNwb25zZXNQdXNo
ID0gYW5ndWxhci5iaW5kKHJlc3BvbnNlcywgcmVzcG9uc2VzLnB1c2gpOwotCi0gIGZ1bmN0aW9u
IGNyZWF0ZVJlc3BvbnNlKHN0YXR1cywgZGF0YSwgaGVhZGVycykgewotICAgIGlmIChhbmd1bGFy
LmlzRnVuY3Rpb24oc3RhdHVzKSkgcmV0dXJuIHN0YXR1czsKLQotICAgIHJldHVybiBmdW5jdGlv
bigpIHsKLSAgICAgIHJldHVybiBhbmd1bGFyLmlzTnVtYmVyKHN0YXR1cykKLSAgICAgICAgICA/
IFtzdGF0dXMsIGRhdGEsIGhlYWRlcnNdCi0gICAgICAgICAgOiBbMjAwLCBzdGF0dXMsIGRhdGFd
OwotICAgIH07Ci0gIH0KLQotICAvLyBUT0RPKHZvanRhKTogY2hhbmdlIHBhcmFtcyB0bzogbWV0
aG9kLCB1cmwsIGRhdGEsIGhlYWRlcnMsIGNhbGxiYWNrCi0gIGZ1bmN0aW9uICRodHRwQmFja2Vu
ZChtZXRob2QsIHVybCwgZGF0YSwgY2FsbGJhY2ssIGhlYWRlcnMpIHsKLSAgICB2YXIgeGhyID0g
bmV3IE1vY2tYaHIoKSwKLSAgICAgICAgZXhwZWN0YXRpb24gPSBleHBlY3RhdGlvbnNbMF0sCi0g
ICAgICAgIHdhc0V4cGVjdGVkID0gZmFsc2U7Ci0KLSAgICBmdW5jdGlvbiBwcmV0dHlQcmludChk
YXRhKSB7Ci0gICAgICByZXR1cm4gKGFuZ3VsYXIuaXNTdHJpbmcoZGF0YSkgfHwgYW5ndWxhci5p
c0Z1bmN0aW9uKGRhdGEpIHx8IGRhdGEgaW5zdGFuY2VvZiBSZWdFeHApCi0gICAgICAgICAgPyBk
YXRhCi0gICAgICAgICAgOiBhbmd1bGFyLnRvSnNvbihkYXRhKTsKLSAgICB9Ci0KLSAgICBpZiAo
ZXhwZWN0YXRpb24gJiYgZXhwZWN0YXRpb24ubWF0Y2gobWV0aG9kLCB1cmwpKSB7Ci0gICAgICBp
ZiAoIWV4cGVjdGF0aW9uLm1hdGNoRGF0YShkYXRhKSkKLSAgICAgICAgdGhyb3cgRXJyb3IoJ0V4
cGVjdGVkICcgKyBleHBlY3RhdGlvbiArICcgd2l0aCBkaWZmZXJlbnQgZGF0YVxuJyArCi0gICAg
ICAgICAgICAnRVhQRUNURUQ6ICcgKyBwcmV0dHlQcmludChleHBlY3RhdGlvbi5kYXRhKSArICdc
bkdPVDogICAgICAnICsgZGF0YSk7Ci0KLSAgICAgIGlmICghZXhwZWN0YXRpb24ubWF0Y2hIZWFk
ZXJzKGhlYWRlcnMpKQotICAgICAgICB0aHJvdyBFcnJvcignRXhwZWN0ZWQgJyArIGV4cGVjdGF0
aW9uICsgJyB3aXRoIGRpZmZlcmVudCBoZWFkZXJzXG4nICsKLSAgICAgICAgICAgICdFWFBFQ1RF
RDogJyArIHByZXR0eVByaW50KGV4cGVjdGF0aW9uLmhlYWRlcnMpICsgJ1xuR09UOiAgICAgICcg
KwotICAgICAgICAgICAgcHJldHR5UHJpbnQoaGVhZGVycykpOwotCi0gICAgICBleHBlY3RhdGlv
bnMuc2hpZnQoKTsKLQotICAgICAgaWYgKGV4cGVjdGF0aW9uLnJlc3BvbnNlKSB7Ci0gICAgICAg
IHJlc3BvbnNlcy5wdXNoKGZ1bmN0aW9uKCkgewotICAgICAgICAgIHZhciByZXNwb25zZSA9IGV4
cGVjdGF0aW9uLnJlc3BvbnNlKG1ldGhvZCwgdXJsLCBkYXRhLCBoZWFkZXJzKTsKLSAgICAgICAg
ICB4aHIuJCRyZXNwSGVhZGVycyA9IHJlc3BvbnNlWzJdOwotICAgICAgICAgIGNhbGxiYWNrKHJl
c3BvbnNlWzBdLCByZXNwb25zZVsxXSwgeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKTsKLSAg
ICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIHdhc0V4cGVjdGVkID0g
dHJ1ZTsKLSAgICB9Ci0KLSAgICB2YXIgaSA9IC0xLCBkZWZpbml0aW9uOwotICAgIHdoaWxlICgo
ZGVmaW5pdGlvbiA9IGRlZmluaXRpb25zWysraV0pKSB7Ci0gICAgICBpZiAoZGVmaW5pdGlvbi5t
YXRjaChtZXRob2QsIHVybCwgZGF0YSwgaGVhZGVycyB8fCB7fSkpIHsKLSAgICAgICAgaWYgKGRl
ZmluaXRpb24ucmVzcG9uc2UpIHsKLSAgICAgICAgICAvLyBpZiAkYnJvd3NlciBzcGVjaWZpZWQs
IHdlIGRvIGF1dG8gZmx1c2ggYWxsIHJlcXVlc3RzCi0gICAgICAgICAgKCRicm93c2VyID8gJGJy
b3dzZXIuZGVmZXIgOiByZXNwb25zZXNQdXNoKShmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHZh
ciByZXNwb25zZSA9IGRlZmluaXRpb24ucmVzcG9uc2UobWV0aG9kLCB1cmwsIGRhdGEsIGhlYWRl
cnMpOwotICAgICAgICAgICAgeGhyLiQkcmVzcEhlYWRlcnMgPSByZXNwb25zZVsyXTsKLSAgICAg
ICAgICAgIGNhbGxiYWNrKHJlc3BvbnNlWzBdLCByZXNwb25zZVsxXSwgeGhyLmdldEFsbFJlc3Bv
bnNlSGVhZGVycygpKTsKLSAgICAgICAgICB9KTsKLSAgICAgICAgfSBlbHNlIGlmIChkZWZpbml0
aW9uLnBhc3NUaHJvdWdoKSB7Ci0gICAgICAgICAgJGRlbGVnYXRlKG1ldGhvZCwgdXJsLCBkYXRh
LCBjYWxsYmFjaywgaGVhZGVycyk7Ci0gICAgICAgIH0gZWxzZSB0aHJvdyBFcnJvcignTm8gcmVz
cG9uc2UgZGVmaW5lZCAhJyk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gICAg
dGhyb3cgd2FzRXhwZWN0ZWQgPwotICAgICAgICBFcnJvcignTm8gcmVzcG9uc2UgZGVmaW5lZCAh
JykgOgotICAgICAgICBFcnJvcignVW5leHBlY3RlZCByZXF1ZXN0OiAnICsgbWV0aG9kICsgJyAn
ICsgdXJsICsgJ1xuJyArCi0gICAgICAgICAgICAgIChleHBlY3RhdGlvbiA/ICdFeHBlY3RlZCAn
ICsgZXhwZWN0YXRpb24gOiAnTm8gbW9yZSByZXF1ZXN0IGV4cGVjdGVkJykpOwotICB9Ci0KLSAg
LyoqCi0gICAqIEBuZ2RvYyBtZXRob2QKLSAgICogQG5hbWUgbmdNb2NrLiRodHRwQmFja2VuZCN3
aGVuCi0gICAqIEBtZXRob2RPZiBuZ01vY2suJGh0dHBCYWNrZW5kCi0gICAqIEBkZXNjcmlwdGlv
bgotICAgKiBDcmVhdGVzIGEgbmV3IGJhY2tlbmQgZGVmaW5pdGlvbi4KLSAgICoKLSAgICogQHBh
cmFtIHtzdHJpbmd9IG1ldGhvZCBIVFRQIG1ldGhvZC4KLSAgICogQHBhcmFtIHtzdHJpbmd8UmVn
RXhwfSB1cmwgSFRUUCB1cmwuCi0gICAqIEBwYXJhbSB7KHN0cmluZ3xSZWdFeHApPX0gZGF0YSBI
VFRQIHJlcXVlc3QgYm9keS4KLSAgICogQHBhcmFtIHsoT2JqZWN0fGZ1bmN0aW9uKE9iamVjdCkp
PX0gaGVhZGVycyBIVFRQIGhlYWRlcnMgb3IgZnVuY3Rpb24gdGhhdCByZWNlaXZlcyBodHRwIGhl
YWRlcgotICAgKiAgIG9iamVjdCBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSBoZWFkZXJzIG1hdGNo
IHRoZSBjdXJyZW50IGRlZmluaXRpb24uCi0gICAqIEByZXR1cm5zIHtyZXF1ZXN0SGFuZGxlcn0g
UmV0dXJucyBhbiBvYmplY3Qgd2l0aCBgcmVzcG9uZGAgbWV0aG9kIHRoYXQgY29udHJvbCBob3cg
YSBtYXRjaGVkCi0gICAqICAgcmVxdWVzdCBpcyBoYW5kbGVkLgotICAgKgotICAgKiAgLSByZXNw
b25kIOKAkyBge2Z1bmN0aW9uKFtzdGF0dXMsXSBkYXRhWywgaGVhZGVyc10pfGZ1bmN0aW9uKGZ1
bmN0aW9uKG1ldGhvZCwgdXJsLCBkYXRhLCBoZWFkZXJzKX1gCi0gICAqICAgIOKAkyBUaGUgcmVz
cG9uZCBtZXRob2QgdGFrZXMgYSBzZXQgb2Ygc3RhdGljIGRhdGEgdG8gYmUgcmV0dXJuZWQgb3Ig
YSBmdW5jdGlvbiB0aGF0IGNhbiByZXR1cm4KLSAgICogICAgYW4gYXJyYXkgY29udGFpbmluZyBy
ZXNwb25zZSBzdGF0dXMgKG51bWJlciksIHJlc3BvbnNlIGRhdGEgKHN0cmluZykgYW5kIHJlc3Bv
bnNlIGhlYWRlcnMKLSAgICogICAgKE9iamVjdCkuCi0gICAqLwotICAkaHR0cEJhY2tlbmQud2hl
biA9IGZ1bmN0aW9uKG1ldGhvZCwgdXJsLCBkYXRhLCBoZWFkZXJzKSB7Ci0gICAgdmFyIGRlZmlu
aXRpb24gPSBuZXcgTW9ja0h0dHBFeHBlY3RhdGlvbihtZXRob2QsIHVybCwgZGF0YSwgaGVhZGVy
cyksCi0gICAgICAgIGNoYWluID0gewotICAgICAgICAgIHJlc3BvbmQ6IGZ1bmN0aW9uKHN0YXR1
cywgZGF0YSwgaGVhZGVycykgewotICAgICAgICAgICAgZGVmaW5pdGlvbi5yZXNwb25zZSA9IGNy
ZWF0ZVJlc3BvbnNlKHN0YXR1cywgZGF0YSwgaGVhZGVycyk7Ci0gICAgICAgICAgfQotICAgICAg
ICB9OwotCi0gICAgaWYgKCRicm93c2VyKSB7Ci0gICAgICBjaGFpbi5wYXNzVGhyb3VnaCA9IGZ1
bmN0aW9uKCkgewotICAgICAgICBkZWZpbml0aW9uLnBhc3NUaHJvdWdoID0gdHJ1ZTsKLSAgICAg
IH07Ci0gICAgfQotCi0gICAgZGVmaW5pdGlvbnMucHVzaChkZWZpbml0aW9uKTsKLSAgICByZXR1
cm4gY2hhaW47Ci0gIH07Ci0KLSAgLyoqCi0gICAqIEBuZ2RvYyBtZXRob2QKLSAgICogQG5hbWUg
bmdNb2NrLiRodHRwQmFja2VuZCN3aGVuR0VUCi0gICAqIEBtZXRob2RPZiBuZ01vY2suJGh0dHBC
YWNrZW5kCi0gICAqIEBkZXNjcmlwdGlvbgotICAgKiBDcmVhdGVzIGEgbmV3IGJhY2tlbmQgZGVm
aW5pdGlvbiBmb3IgR0VUIHJlcXVlc3RzLiBGb3IgbW9yZSBpbmZvIHNlZSBgd2hlbigpYC4KLSAg
ICoKLSAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSB1cmwgSFRUUCB1cmwuCi0gICAqIEBwYXJh
bSB7KE9iamVjdHxmdW5jdGlvbihPYmplY3QpKT19IGhlYWRlcnMgSFRUUCBoZWFkZXJzLgotICAg
KiBAcmV0dXJucyB7cmVxdWVzdEhhbmRsZXJ9IFJldHVybnMgYW4gb2JqZWN0IHdpdGggYHJlc3Bv
bmRgIG1ldGhvZCB0aGF0IGNvbnRyb2wgaG93IGEgbWF0Y2hlZAotICAgKiByZXF1ZXN0IGlzIGhh
bmRsZWQuCi0gICAqLwotCi0gIC8qKgotICAgKiBAbmdkb2MgbWV0aG9kCi0gICAqIEBuYW1lIG5n
TW9jay4kaHR0cEJhY2tlbmQjd2hlbkhFQUQKLSAgICogQG1ldGhvZE9mIG5nTW9jay4kaHR0cEJh
Y2tlbmQKLSAgICogQGRlc2NyaXB0aW9uCi0gICAqIENyZWF0ZXMgYSBuZXcgYmFja2VuZCBkZWZp
bml0aW9uIGZvciBIRUFEIHJlcXVlc3RzLiBGb3IgbW9yZSBpbmZvIHNlZSBgd2hlbigpYC4KLSAg
ICoKLSAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSB1cmwgSFRUUCB1cmwuCi0gICAqIEBwYXJh
bSB7KE9iamVjdHxmdW5jdGlvbihPYmplY3QpKT19IGhlYWRlcnMgSFRUUCBoZWFkZXJzLgotICAg
KiBAcmV0dXJucyB7cmVxdWVzdEhhbmRsZXJ9IFJldHVybnMgYW4gb2JqZWN0IHdpdGggYHJlc3Bv
bmRgIG1ldGhvZCB0aGF0IGNvbnRyb2wgaG93IGEgbWF0Y2hlZAotICAgKiByZXF1ZXN0IGlzIGhh
bmRsZWQuCi0gICAqLwotCi0gIC8qKgotICAgKiBAbmdkb2MgbWV0aG9kCi0gICAqIEBuYW1lIG5n
TW9jay4kaHR0cEJhY2tlbmQjd2hlbkRFTEVURQotICAgKiBAbWV0aG9kT2YgbmdNb2NrLiRodHRw
QmFja2VuZAotICAgKiBAZGVzY3JpcHRpb24KLSAgICogQ3JlYXRlcyBhIG5ldyBiYWNrZW5kIGRl
ZmluaXRpb24gZm9yIERFTEVURSByZXF1ZXN0cy4gRm9yIG1vcmUgaW5mbyBzZWUgYHdoZW4oKWAu
Ci0gICAqCi0gICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gdXJsIEhUVFAgdXJsLgotICAgKiBA
cGFyYW0geyhPYmplY3R8ZnVuY3Rpb24oT2JqZWN0KSk9fSBoZWFkZXJzIEhUVFAgaGVhZGVycy4K
LSAgICogQHJldHVybnMge3JlcXVlc3RIYW5kbGVyfSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIGBy
ZXNwb25kYCBtZXRob2QgdGhhdCBjb250cm9sIGhvdyBhIG1hdGNoZWQKLSAgICogcmVxdWVzdCBp
cyBoYW5kbGVkLgotICAgKi8KLQotICAvKioKLSAgICogQG5nZG9jIG1ldGhvZAotICAgKiBAbmFt
ZSBuZ01vY2suJGh0dHBCYWNrZW5kI3doZW5QT1NUCi0gICAqIEBtZXRob2RPZiBuZ01vY2suJGh0
dHBCYWNrZW5kCi0gICAqIEBkZXNjcmlwdGlvbgotICAgKiBDcmVhdGVzIGEgbmV3IGJhY2tlbmQg
ZGVmaW5pdGlvbiBmb3IgUE9TVCByZXF1ZXN0cy4gRm9yIG1vcmUgaW5mbyBzZWUgYHdoZW4oKWAu
Ci0gICAqCi0gICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gdXJsIEhUVFAgdXJsLgotICAgKiBA
cGFyYW0geyhzdHJpbmd8UmVnRXhwKT19IGRhdGEgSFRUUCByZXF1ZXN0IGJvZHkuCi0gICAqIEBw
YXJhbSB7KE9iamVjdHxmdW5jdGlvbihPYmplY3QpKT19IGhlYWRlcnMgSFRUUCBoZWFkZXJzLgot
ICAgKiBAcmV0dXJucyB7cmVxdWVzdEhhbmRsZXJ9IFJldHVybnMgYW4gb2JqZWN0IHdpdGggYHJl
c3BvbmRgIG1ldGhvZCB0aGF0IGNvbnRyb2wgaG93IGEgbWF0Y2hlZAotICAgKiByZXF1ZXN0IGlz
IGhhbmRsZWQuCi0gICAqLwotCi0gIC8qKgotICAgKiBAbmdkb2MgbWV0aG9kCi0gICAqIEBuYW1l
IG5nTW9jay4kaHR0cEJhY2tlbmQjd2hlblBVVAotICAgKiBAbWV0aG9kT2YgbmdNb2NrLiRodHRw
QmFja2VuZAotICAgKiBAZGVzY3JpcHRpb24KLSAgICogQ3JlYXRlcyBhIG5ldyBiYWNrZW5kIGRl
ZmluaXRpb24gZm9yIFBVVCByZXF1ZXN0cy4gIEZvciBtb3JlIGluZm8gc2VlIGB3aGVuKClgLgot
ICAgKgotICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IHVybCBIVFRQIHVybC4KLSAgICogQHBh
cmFtIHsoc3RyaW5nfFJlZ0V4cCk9fSBkYXRhIEhUVFAgcmVxdWVzdCBib2R5LgotICAgKiBAcGFy
YW0geyhPYmplY3R8ZnVuY3Rpb24oT2JqZWN0KSk9fSBoZWFkZXJzIEhUVFAgaGVhZGVycy4KLSAg
ICogQHJldHVybnMge3JlcXVlc3RIYW5kbGVyfSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIGByZXNw
b25kYCBtZXRob2QgdGhhdCBjb250cm9sIGhvdyBhIG1hdGNoZWQKLSAgICogcmVxdWVzdCBpcyBo
YW5kbGVkLgotICAgKi8KLQotICAvKioKLSAgICogQG5nZG9jIG1ldGhvZAotICAgKiBAbmFtZSBu
Z01vY2suJGh0dHBCYWNrZW5kI3doZW5KU09OUAotICAgKiBAbWV0aG9kT2YgbmdNb2NrLiRodHRw
QmFja2VuZAotICAgKiBAZGVzY3JpcHRpb24KLSAgICogQ3JlYXRlcyBhIG5ldyBiYWNrZW5kIGRl
ZmluaXRpb24gZm9yIEpTT05QIHJlcXVlc3RzLiBGb3IgbW9yZSBpbmZvIHNlZSBgd2hlbigpYC4K
LSAgICoKLSAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSB1cmwgSFRUUCB1cmwuCi0gICAqIEBy
ZXR1cm5zIHtyZXF1ZXN0SGFuZGxlcn0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBgcmVzcG9uZGAg
bWV0aG9kIHRoYXQgY29udHJvbCBob3cgYSBtYXRjaGVkCi0gICAqIHJlcXVlc3QgaXMgaGFuZGxl
ZC4KLSAgICovCi0gIGNyZWF0ZVNob3J0TWV0aG9kcygnd2hlbicpOwotCi0KLSAgLyoqCi0gICAq
IEBuZ2RvYyBtZXRob2QKLSAgICogQG5hbWUgbmdNb2NrLiRodHRwQmFja2VuZCNleHBlY3QKLSAg
ICogQG1ldGhvZE9mIG5nTW9jay4kaHR0cEJhY2tlbmQKLSAgICogQGRlc2NyaXB0aW9uCi0gICAq
IENyZWF0ZXMgYSBuZXcgcmVxdWVzdCBleHBlY3RhdGlvbi4KLSAgICoKLSAgICogQHBhcmFtIHtz
dHJpbmd9IG1ldGhvZCBIVFRQIG1ldGhvZC4KLSAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSB1
cmwgSFRUUCB1cmwuCi0gICAqIEBwYXJhbSB7KHN0cmluZ3xSZWdFeHApPX0gZGF0YSBIVFRQIHJl
cXVlc3QgYm9keS4KLSAgICogQHBhcmFtIHsoT2JqZWN0fGZ1bmN0aW9uKE9iamVjdCkpPX0gaGVh
ZGVycyBIVFRQIGhlYWRlcnMgb3IgZnVuY3Rpb24gdGhhdCByZWNlaXZlcyBodHRwIGhlYWRlcgot
ICAgKiAgIG9iamVjdCBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSBoZWFkZXJzIG1hdGNoIHRoZSBj
dXJyZW50IGV4cGVjdGF0aW9uLgotICAgKiBAcmV0dXJucyB7cmVxdWVzdEhhbmRsZXJ9IFJldHVy
bnMgYW4gb2JqZWN0IHdpdGggYHJlc3BvbmRgIG1ldGhvZCB0aGF0IGNvbnRyb2wgaG93IGEgbWF0
Y2hlZAotICAgKiAgcmVxdWVzdCBpcyBoYW5kbGVkLgotICAgKgotICAgKiAgLSByZXNwb25kIOKA
kyBge2Z1bmN0aW9uKFtzdGF0dXMsXSBkYXRhWywgaGVhZGVyc10pfGZ1bmN0aW9uKGZ1bmN0aW9u
KG1ldGhvZCwgdXJsLCBkYXRhLCBoZWFkZXJzKX1gCi0gICAqICAgIOKAkyBUaGUgcmVzcG9uZCBt
ZXRob2QgdGFrZXMgYSBzZXQgb2Ygc3RhdGljIGRhdGEgdG8gYmUgcmV0dXJuZWQgb3IgYSBmdW5j
dGlvbiB0aGF0IGNhbiByZXR1cm4KLSAgICogICAgYW4gYXJyYXkgY29udGFpbmluZyByZXNwb25z
ZSBzdGF0dXMgKG51bWJlciksIHJlc3BvbnNlIGRhdGEgKHN0cmluZykgYW5kIHJlc3BvbnNlIGhl
YWRlcnMKLSAgICogICAgKE9iamVjdCkuCi0gICAqLwotICAkaHR0cEJhY2tlbmQuZXhwZWN0ID0g
ZnVuY3Rpb24obWV0aG9kLCB1cmwsIGRhdGEsIGhlYWRlcnMpIHsKLSAgICB2YXIgZXhwZWN0YXRp
b24gPSBuZXcgTW9ja0h0dHBFeHBlY3RhdGlvbihtZXRob2QsIHVybCwgZGF0YSwgaGVhZGVycyk7
Ci0gICAgZXhwZWN0YXRpb25zLnB1c2goZXhwZWN0YXRpb24pOwotICAgIHJldHVybiB7Ci0gICAg
ICByZXNwb25kOiBmdW5jdGlvbihzdGF0dXMsIGRhdGEsIGhlYWRlcnMpIHsKLSAgICAgICAgZXhw
ZWN0YXRpb24ucmVzcG9uc2UgPSBjcmVhdGVSZXNwb25zZShzdGF0dXMsIGRhdGEsIGhlYWRlcnMp
OwotICAgICAgfQotICAgIH07Ci0gIH07Ci0KLQotICAvKioKLSAgICogQG5nZG9jIG1ldGhvZAot
ICAgKiBAbmFtZSBuZ01vY2suJGh0dHBCYWNrZW5kI2V4cGVjdEdFVAotICAgKiBAbWV0aG9kT2Yg
bmdNb2NrLiRodHRwQmFja2VuZAotICAgKiBAZGVzY3JpcHRpb24KLSAgICogQ3JlYXRlcyBhIG5l
dyByZXF1ZXN0IGV4cGVjdGF0aW9uIGZvciBHRVQgcmVxdWVzdHMuIEZvciBtb3JlIGluZm8gc2Vl
IGBleHBlY3QoKWAuCi0gICAqCi0gICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gdXJsIEhUVFAg
dXJsLgotICAgKiBAcGFyYW0ge09iamVjdD19IGhlYWRlcnMgSFRUUCBoZWFkZXJzLgotICAgKiBA
cmV0dXJucyB7cmVxdWVzdEhhbmRsZXJ9IFJldHVybnMgYW4gb2JqZWN0IHdpdGggYHJlc3BvbmRg
IG1ldGhvZCB0aGF0IGNvbnRyb2wgaG93IGEgbWF0Y2hlZAotICAgKiByZXF1ZXN0IGlzIGhhbmRs
ZWQuIFNlZSAjZXhwZWN0IGZvciBtb3JlIGluZm8uCi0gICAqLwotCi0gIC8qKgotICAgKiBAbmdk
b2MgbWV0aG9kCi0gICAqIEBuYW1lIG5nTW9jay4kaHR0cEJhY2tlbmQjZXhwZWN0SEVBRAotICAg
KiBAbWV0aG9kT2YgbmdNb2NrLiRodHRwQmFja2VuZAotICAgKiBAZGVzY3JpcHRpb24KLSAgICog
Q3JlYXRlcyBhIG5ldyByZXF1ZXN0IGV4cGVjdGF0aW9uIGZvciBIRUFEIHJlcXVlc3RzLiBGb3Ig
bW9yZSBpbmZvIHNlZSBgZXhwZWN0KClgLgotICAgKgotICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdF
eHB9IHVybCBIVFRQIHVybC4KLSAgICogQHBhcmFtIHtPYmplY3Q9fSBoZWFkZXJzIEhUVFAgaGVh
ZGVycy4KLSAgICogQHJldHVybnMge3JlcXVlc3RIYW5kbGVyfSBSZXR1cm5zIGFuIG9iamVjdCB3
aXRoIGByZXNwb25kYCBtZXRob2QgdGhhdCBjb250cm9sIGhvdyBhIG1hdGNoZWQKLSAgICogICBy
ZXF1ZXN0IGlzIGhhbmRsZWQuCi0gICAqLwotCi0gIC8qKgotICAgKiBAbmdkb2MgbWV0aG9kCi0g
ICAqIEBuYW1lIG5nTW9jay4kaHR0cEJhY2tlbmQjZXhwZWN0REVMRVRFCi0gICAqIEBtZXRob2RP
ZiBuZ01vY2suJGh0dHBCYWNrZW5kCi0gICAqIEBkZXNjcmlwdGlvbgotICAgKiBDcmVhdGVzIGEg
bmV3IHJlcXVlc3QgZXhwZWN0YXRpb24gZm9yIERFTEVURSByZXF1ZXN0cy4gRm9yIG1vcmUgaW5m
byBzZWUgYGV4cGVjdCgpYC4KLSAgICoKLSAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSB1cmwg
SFRUUCB1cmwuCi0gICAqIEBwYXJhbSB7T2JqZWN0PX0gaGVhZGVycyBIVFRQIGhlYWRlcnMuCi0g
ICAqIEByZXR1cm5zIHtyZXF1ZXN0SGFuZGxlcn0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBgcmVz
cG9uZGAgbWV0aG9kIHRoYXQgY29udHJvbCBob3cgYSBtYXRjaGVkCi0gICAqICAgcmVxdWVzdCBp
cyBoYW5kbGVkLgotICAgKi8KLQotICAvKioKLSAgICogQG5nZG9jIG1ldGhvZAotICAgKiBAbmFt
ZSBuZ01vY2suJGh0dHBCYWNrZW5kI2V4cGVjdFBPU1QKLSAgICogQG1ldGhvZE9mIG5nTW9jay4k
aHR0cEJhY2tlbmQKLSAgICogQGRlc2NyaXB0aW9uCi0gICAqIENyZWF0ZXMgYSBuZXcgcmVxdWVz
dCBleHBlY3RhdGlvbiBmb3IgUE9TVCByZXF1ZXN0cy4gRm9yIG1vcmUgaW5mbyBzZWUgYGV4cGVj
dCgpYC4KLSAgICoKLSAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSB1cmwgSFRUUCB1cmwuCi0g
ICAqIEBwYXJhbSB7KHN0cmluZ3xSZWdFeHApPX0gZGF0YSBIVFRQIHJlcXVlc3QgYm9keS4KLSAg
ICogQHBhcmFtIHtPYmplY3Q9fSBoZWFkZXJzIEhUVFAgaGVhZGVycy4KLSAgICogQHJldHVybnMg
e3JlcXVlc3RIYW5kbGVyfSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIGByZXNwb25kYCBtZXRob2Qg
dGhhdCBjb250cm9sIGhvdyBhIG1hdGNoZWQKLSAgICogICByZXF1ZXN0IGlzIGhhbmRsZWQuCi0g
ICAqLwotCi0gIC8qKgotICAgKiBAbmdkb2MgbWV0aG9kCi0gICAqIEBuYW1lIG5nTW9jay4kaHR0
cEJhY2tlbmQjZXhwZWN0UFVUCi0gICAqIEBtZXRob2RPZiBuZ01vY2suJGh0dHBCYWNrZW5kCi0g
ICAqIEBkZXNjcmlwdGlvbgotICAgKiBDcmVhdGVzIGEgbmV3IHJlcXVlc3QgZXhwZWN0YXRpb24g
Zm9yIFBVVCByZXF1ZXN0cy4gRm9yIG1vcmUgaW5mbyBzZWUgYGV4cGVjdCgpYC4KLSAgICoKLSAg
ICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSB1cmwgSFRUUCB1cmwuCi0gICAqIEBwYXJhbSB7KHN0
cmluZ3xSZWdFeHApPX0gZGF0YSBIVFRQIHJlcXVlc3QgYm9keS4KLSAgICogQHBhcmFtIHtPYmpl
Y3Q9fSBoZWFkZXJzIEhUVFAgaGVhZGVycy4KLSAgICogQHJldHVybnMge3JlcXVlc3RIYW5kbGVy
fSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIGByZXNwb25kYCBtZXRob2QgdGhhdCBjb250cm9sIGhv
dyBhIG1hdGNoZWQKLSAgICogICByZXF1ZXN0IGlzIGhhbmRsZWQuCi0gICAqLwotCi0gIC8qKgot
ICAgKiBAbmdkb2MgbWV0aG9kCi0gICAqIEBuYW1lIG5nTW9jay4kaHR0cEJhY2tlbmQjZXhwZWN0
UEFUQ0gKLSAgICogQG1ldGhvZE9mIG5nTW9jay4kaHR0cEJhY2tlbmQKLSAgICogQGRlc2NyaXB0
aW9uCi0gICAqIENyZWF0ZXMgYSBuZXcgcmVxdWVzdCBleHBlY3RhdGlvbiBmb3IgUEFUQ0ggcmVx
dWVzdHMuIEZvciBtb3JlIGluZm8gc2VlIGBleHBlY3QoKWAuCi0gICAqCi0gICAqIEBwYXJhbSB7
c3RyaW5nfFJlZ0V4cH0gdXJsIEhUVFAgdXJsLgotICAgKiBAcGFyYW0geyhzdHJpbmd8UmVnRXhw
KT19IGRhdGEgSFRUUCByZXF1ZXN0IGJvZHkuCi0gICAqIEBwYXJhbSB7T2JqZWN0PX0gaGVhZGVy
cyBIVFRQIGhlYWRlcnMuCi0gICAqIEByZXR1cm5zIHtyZXF1ZXN0SGFuZGxlcn0gUmV0dXJucyBh
biBvYmplY3Qgd2l0aCBgcmVzcG9uZGAgbWV0aG9kIHRoYXQgY29udHJvbCBob3cgYSBtYXRjaGVk
Ci0gICAqICAgcmVxdWVzdCBpcyBoYW5kbGVkLgotICAgKi8KLQotICAvKioKLSAgICogQG5nZG9j
IG1ldGhvZAotICAgKiBAbmFtZSBuZ01vY2suJGh0dHBCYWNrZW5kI2V4cGVjdEpTT05QCi0gICAq
IEBtZXRob2RPZiBuZ01vY2suJGh0dHBCYWNrZW5kCi0gICAqIEBkZXNjcmlwdGlvbgotICAgKiBD
cmVhdGVzIGEgbmV3IHJlcXVlc3QgZXhwZWN0YXRpb24gZm9yIEpTT05QIHJlcXVlc3RzLiBGb3Ig
bW9yZSBpbmZvIHNlZSBgZXhwZWN0KClgLgotICAgKgotICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdF
eHB9IHVybCBIVFRQIHVybC4KLSAgICogQHJldHVybnMge3JlcXVlc3RIYW5kbGVyfSBSZXR1cm5z
IGFuIG9iamVjdCB3aXRoIGByZXNwb25kYCBtZXRob2QgdGhhdCBjb250cm9sIGhvdyBhIG1hdGNo
ZWQKLSAgICogICByZXF1ZXN0IGlzIGhhbmRsZWQuCi0gICAqLwotICBjcmVhdGVTaG9ydE1ldGhv
ZHMoJ2V4cGVjdCcpOwotCi0KLSAgLyoqCi0gICAqIEBuZ2RvYyBtZXRob2QKLSAgICogQG5hbWUg
bmdNb2NrLiRodHRwQmFja2VuZCNmbHVzaAotICAgKiBAbWV0aG9kT2YgbmdNb2NrLiRodHRwQmFj
a2VuZAotICAgKiBAZGVzY3JpcHRpb24KLSAgICogRmx1c2hlcyBhbGwgcGVuZGluZyByZXF1ZXN0
cyB1c2luZyB0aGUgdHJhaW5lZCByZXNwb25zZXMuCi0gICAqCi0gICAqIEBwYXJhbSB7bnVtYmVy
PX0gY291bnQgTnVtYmVyIG9mIHJlc3BvbnNlcyB0byBmbHVzaCAoaW4gdGhlIG9yZGVyIHRoZXkg
YXJyaXZlZCkuIElmIHVuZGVmaW5lZCwKLSAgICogICBhbGwgcGVuZGluZyByZXF1ZXN0cyB3aWxs
IGJlIGZsdXNoZWQuIElmIHRoZXJlIGFyZSBubyBwZW5kaW5nIHJlcXVlc3RzIHdoZW4gdGhlIGZs
dXNoIG1ldGhvZAotICAgKiAgIGlzIGNhbGxlZCBhbiBleGNlcHRpb24gaXMgdGhyb3duIChhcyB0
aGlzIHR5cGljYWxseSBhIHNpZ24gb2YgcHJvZ3JhbW1pbmcgZXJyb3IpLgotICAgKi8KLSAgJGh0
dHBCYWNrZW5kLmZsdXNoID0gZnVuY3Rpb24oY291bnQpIHsKLSAgICBpZiAoIXJlc3BvbnNlcy5s
ZW5ndGgpIHRocm93IEVycm9yKCdObyBwZW5kaW5nIHJlcXVlc3QgdG8gZmx1c2ggIScpOwotCi0g
ICAgaWYgKGFuZ3VsYXIuaXNEZWZpbmVkKGNvdW50KSkgewotICAgICAgd2hpbGUgKGNvdW50LS0p
IHsKLSAgICAgICAgaWYgKCFyZXNwb25zZXMubGVuZ3RoKSB0aHJvdyBFcnJvcignTm8gbW9yZSBw
ZW5kaW5nIHJlcXVlc3QgdG8gZmx1c2ggIScpOwotICAgICAgICByZXNwb25zZXMuc2hpZnQoKSgp
OwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICB3aGlsZSAocmVzcG9uc2VzLmxlbmd0aCkg
ewotICAgICAgICByZXNwb25zZXMuc2hpZnQoKSgpOwotICAgICAgfQotICAgIH0KLSAgICAkaHR0
cEJhY2tlbmQudmVyaWZ5Tm9PdXRzdGFuZGluZ0V4cGVjdGF0aW9uKCk7Ci0gIH07Ci0KLQotICAv
KioKLSAgICogQG5nZG9jIG1ldGhvZAotICAgKiBAbmFtZSBuZ01vY2suJGh0dHBCYWNrZW5kI3Zl
cmlmeU5vT3V0c3RhbmRpbmdFeHBlY3RhdGlvbgotICAgKiBAbWV0aG9kT2YgbmdNb2NrLiRodHRw
QmFja2VuZAotICAgKiBAZGVzY3JpcHRpb24KLSAgICogVmVyaWZpZXMgdGhhdCBhbGwgb2YgdGhl
IHJlcXVlc3RzIGRlZmluZWQgdmlhIHRoZSBgZXhwZWN0YCBhcGkgd2VyZSBtYWRlLiBJZiBhbnkg
b2YgdGhlCi0gICAqIHJlcXVlc3RzIHdlcmUgbm90IG1hZGUsIHZlcmlmeU5vT3V0c3RhbmRpbmdF
eHBlY3RhdGlvbiB0aHJvd3MgYW4gZXhjZXB0aW9uLgotICAgKgotICAgKiBUeXBpY2FsbHksIHlv
dSB3b3VsZCBjYWxsIHRoaXMgbWV0aG9kIGZvbGxvd2luZyBlYWNoIHRlc3QgY2FzZSB0aGF0IGFz
c2VydHMgcmVxdWVzdHMgdXNpbmcgYW4KLSAgICogImFmdGVyRWFjaCIgY2xhdXNlLgotICAgKgot
ICAgKiA8cHJlPgotICAgKiAgIGFmdGVyRWFjaCgkaHR0cEJhY2tlbmQudmVyaWZ5RXhwZWN0YXRp
b25zKTsKLSAgICogPC9wcmU+Ci0gICAqLwotICAkaHR0cEJhY2tlbmQudmVyaWZ5Tm9PdXRzdGFu
ZGluZ0V4cGVjdGF0aW9uID0gZnVuY3Rpb24oKSB7Ci0gICAgaWYgKGV4cGVjdGF0aW9ucy5sZW5n
dGgpIHsKLSAgICAgIHRocm93IEVycm9yKCdVbnNhdGlzZmllZCByZXF1ZXN0czogJyArIGV4cGVj
dGF0aW9ucy5qb2luKCcsICcpKTsKLSAgICB9Ci0gIH07Ci0KLQotICAvKioKLSAgICogQG5nZG9j
IG1ldGhvZAotICAgKiBAbmFtZSBuZ01vY2suJGh0dHBCYWNrZW5kI3ZlcmlmeU5vT3V0c3RhbmRp
bmdSZXF1ZXN0Ci0gICAqIEBtZXRob2RPZiBuZ01vY2suJGh0dHBCYWNrZW5kCi0gICAqIEBkZXNj
cmlwdGlvbgotICAgKiBWZXJpZmllcyB0aGF0IHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZyByZXF1
ZXN0cyB0aGF0IG5lZWQgdG8gYmUgZmx1c2hlZC4KLSAgICoKLSAgICogVHlwaWNhbGx5LCB5b3Ug
d291bGQgY2FsbCB0aGlzIG1ldGhvZCBmb2xsb3dpbmcgZWFjaCB0ZXN0IGNhc2UgdGhhdCBhc3Nl
cnRzIHJlcXVlc3RzIHVzaW5nIGFuCi0gICAqICJhZnRlckVhY2giIGNsYXVzZS4KLSAgICoKLSAg
ICogPHByZT4KLSAgICogICBhZnRlckVhY2goJGh0dHBCYWNrZW5kLnZlcmlmeU5vT3V0c3RhbmRp
bmdSZXF1ZXN0KTsKLSAgICogPC9wcmU+Ci0gICAqLwotICAkaHR0cEJhY2tlbmQudmVyaWZ5Tm9P
dXRzdGFuZGluZ1JlcXVlc3QgPSBmdW5jdGlvbigpIHsKLSAgICBpZiAocmVzcG9uc2VzLmxlbmd0
aCkgewotICAgICAgdGhyb3cgRXJyb3IoJ1VuZmx1c2hlZCByZXF1ZXN0czogJyArIHJlc3BvbnNl
cy5sZW5ndGgpOwotICAgIH0KLSAgfTsKLQotCi0gIC8qKgotICAgKiBAbmdkb2MgbWV0aG9kCi0g
ICAqIEBuYW1lIG5nTW9jay4kaHR0cEJhY2tlbmQjcmVzZXRFeHBlY3RhdGlvbnMKLSAgICogQG1l
dGhvZE9mIG5nTW9jay4kaHR0cEJhY2tlbmQKLSAgICogQGRlc2NyaXB0aW9uCi0gICAqIFJlc2V0
cyBhbGwgcmVxdWVzdCBleHBlY3RhdGlvbnMsIGJ1dCBwcmVzZXJ2ZXMgYWxsIGJhY2tlbmQgZGVm
aW5pdGlvbnMuIFR5cGljYWxseSwgeW91IHdvdWxkCi0gICAqIGNhbGwgcmVzZXRFeHBlY3RhdGlv
bnMgZHVyaW5nIGEgbXVsdGlwbGUtcGhhc2UgdGVzdCB3aGVuIHlvdSB3YW50IHRvIHJldXNlIHRo
ZSBzYW1lIGluc3RhbmNlIG9mCi0gICAqICRodHRwQmFja2VuZCBtb2NrLgotICAgKi8KLSAgJGh0
dHBCYWNrZW5kLnJlc2V0RXhwZWN0YXRpb25zID0gZnVuY3Rpb24oKSB7Ci0gICAgZXhwZWN0YXRp
b25zLmxlbmd0aCA9IDA7Ci0gICAgcmVzcG9uc2VzLmxlbmd0aCA9IDA7Ci0gIH07Ci0KLSAgcmV0
dXJuICRodHRwQmFja2VuZDsKLQotCi0gIGZ1bmN0aW9uIGNyZWF0ZVNob3J0TWV0aG9kcyhwcmVm
aXgpIHsKLSAgICBhbmd1bGFyLmZvckVhY2goWydHRVQnLCAnREVMRVRFJywgJ0pTT05QJ10sIGZ1
bmN0aW9uKG1ldGhvZCkgewotICAgICAkaHR0cEJhY2tlbmRbcHJlZml4ICsgbWV0aG9kXSA9IGZ1
bmN0aW9uKHVybCwgaGVhZGVycykgewotICAgICAgIHJldHVybiAkaHR0cEJhY2tlbmRbcHJlZml4
XShtZXRob2QsIHVybCwgdW5kZWZpbmVkLCBoZWFkZXJzKQotICAgICB9Ci0gICAgfSk7Ci0KLSAg
ICBhbmd1bGFyLmZvckVhY2goWydQVVQnLCAnUE9TVCcsICdQQVRDSCddLCBmdW5jdGlvbihtZXRo
b2QpIHsKLSAgICAgICRodHRwQmFja2VuZFtwcmVmaXggKyBtZXRob2RdID0gZnVuY3Rpb24odXJs
LCBkYXRhLCBoZWFkZXJzKSB7Ci0gICAgICAgIHJldHVybiAkaHR0cEJhY2tlbmRbcHJlZml4XSht
ZXRob2QsIHVybCwgZGF0YSwgaGVhZGVycykKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotfQotCi1m
dW5jdGlvbiBNb2NrSHR0cEV4cGVjdGF0aW9uKG1ldGhvZCwgdXJsLCBkYXRhLCBoZWFkZXJzKSB7
Ci0KLSAgdGhpcy5kYXRhID0gZGF0YTsKLSAgdGhpcy5oZWFkZXJzID0gaGVhZGVyczsKLQotICB0
aGlzLm1hdGNoID0gZnVuY3Rpb24obSwgdSwgZCwgaCkgewotICAgIGlmIChtZXRob2QgIT0gbSkg
cmV0dXJuIGZhbHNlOwotICAgIGlmICghdGhpcy5tYXRjaFVybCh1KSkgcmV0dXJuIGZhbHNlOwot
ICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZChkKSAmJiAhdGhpcy5tYXRjaERhdGEoZCkpIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoYW5ndWxhci5pc0RlZmluZWQoaCkgJiYgIXRoaXMubWF0Y2hIZWFk
ZXJzKGgpKSByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH07Ci0KLSAgdGhpcy5t
YXRjaFVybCA9IGZ1bmN0aW9uKHUpIHsKLSAgICBpZiAoIXVybCkgcmV0dXJuIHRydWU7Ci0gICAg
aWYgKGFuZ3VsYXIuaXNGdW5jdGlvbih1cmwudGVzdCkpIHJldHVybiB1cmwudGVzdCh1KTsKLSAg
ICByZXR1cm4gdXJsID09IHU7Ci0gIH07Ci0KLSAgdGhpcy5tYXRjaEhlYWRlcnMgPSBmdW5jdGlv
bihoKSB7Ci0gICAgaWYgKGFuZ3VsYXIuaXNVbmRlZmluZWQoaGVhZGVycykpIHJldHVybiB0cnVl
OwotICAgIGlmIChhbmd1bGFyLmlzRnVuY3Rpb24oaGVhZGVycykpIHJldHVybiBoZWFkZXJzKGgp
OwotICAgIHJldHVybiBhbmd1bGFyLmVxdWFscyhoZWFkZXJzLCBoKTsKLSAgfTsKLQotICB0aGlz
Lm1hdGNoRGF0YSA9IGZ1bmN0aW9uKGQpIHsKLSAgICBpZiAoYW5ndWxhci5pc1VuZGVmaW5lZChk
YXRhKSkgcmV0dXJuIHRydWU7Ci0gICAgaWYgKGRhdGEgJiYgYW5ndWxhci5pc0Z1bmN0aW9uKGRh
dGEudGVzdCkpIHJldHVybiBkYXRhLnRlc3QoZCk7Ci0gICAgaWYgKGRhdGEgJiYgIWFuZ3VsYXIu
aXNTdHJpbmcoZGF0YSkpIHJldHVybiBhbmd1bGFyLnRvSnNvbihkYXRhKSA9PSBkOwotICAgIHJl
dHVybiBkYXRhID09IGQ7Ci0gIH07Ci0KLSAgdGhpcy50b1N0cmluZyA9IGZ1bmN0aW9uKCkgewot
ICAgIHJldHVybiBtZXRob2QgKyAnICcgKyB1cmw7Ci0gIH07Ci19Ci0KLWZ1bmN0aW9uIE1vY2tY
aHIoKSB7Ci0KLSAgLy8gaGFjayBmb3IgdGVzdGluZyAkaHR0cCwgJGh0dHBCYWNrZW5kCi0gIE1v
Y2tYaHIuJCRsYXN0SW5zdGFuY2UgPSB0aGlzOwotCi0gIHRoaXMub3BlbiA9IGZ1bmN0aW9uKG1l
dGhvZCwgdXJsLCBhc3luYykgewotICAgIHRoaXMuJCRtZXRob2QgPSBtZXRob2Q7Ci0gICAgdGhp
cy4kJHVybCA9IHVybDsKLSAgICB0aGlzLiQkYXN5bmMgPSBhc3luYzsKLSAgICB0aGlzLiQkcmVx
SGVhZGVycyA9IHt9OwotICAgIHRoaXMuJCRyZXNwSGVhZGVycyA9IHt9OwotICB9OwotCi0gIHRo
aXMuc2VuZCA9IGZ1bmN0aW9uKGRhdGEpIHsKLSAgICB0aGlzLiQkZGF0YSA9IGRhdGE7Ci0gIH07
Ci0KLSAgdGhpcy5zZXRSZXF1ZXN0SGVhZGVyID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkgewotICAg
IHRoaXMuJCRyZXFIZWFkZXJzW2tleV0gPSB2YWx1ZTsKLSAgfTsKLQotICB0aGlzLmdldFJlc3Bv
bnNlSGVhZGVyID0gZnVuY3Rpb24obmFtZSkgewotICAgIC8vIHRoZSBsb29rdXAgbXVzdCBiZSBj
YXNlIGluc2Vuc2l0aXZlLCB0aGF0J3Mgd2h5IHdlIHRyeSB0d28gcXVpY2sgbG9va3VwcyBhbmQg
ZnVsbCBzY2FuIGF0IGxhc3QKLSAgICB2YXIgaGVhZGVyID0gdGhpcy4kJHJlc3BIZWFkZXJzW25h
bWVdOwotICAgIGlmIChoZWFkZXIpIHJldHVybiBoZWFkZXI7Ci0KLSAgICBuYW1lID0gYW5ndWxh
ci5sb3dlcmNhc2UobmFtZSk7Ci0gICAgaGVhZGVyID0gdGhpcy4kJHJlc3BIZWFkZXJzW25hbWVd
OwotICAgIGlmIChoZWFkZXIpIHJldHVybiBoZWFkZXI7Ci0KLSAgICBoZWFkZXIgPSB1bmRlZmlu
ZWQ7Ci0gICAgYW5ndWxhci5mb3JFYWNoKHRoaXMuJCRyZXNwSGVhZGVycywgZnVuY3Rpb24oaGVh
ZGVyVmFsLCBoZWFkZXJOYW1lKSB7Ci0gICAgICBpZiAoIWhlYWRlciAmJiBhbmd1bGFyLmxvd2Vy
Y2FzZShoZWFkZXJOYW1lKSA9PSBuYW1lKSBoZWFkZXIgPSBoZWFkZXJWYWw7Ci0gICAgfSk7Ci0g
ICAgcmV0dXJuIGhlYWRlcjsKLSAgfTsKLQotICB0aGlzLmdldEFsbFJlc3BvbnNlSGVhZGVycyA9
IGZ1bmN0aW9uKCkgewotICAgIHZhciBsaW5lcyA9IFtdOwotCi0gICAgYW5ndWxhci5mb3JFYWNo
KHRoaXMuJCRyZXNwSGVhZGVycywgZnVuY3Rpb24odmFsdWUsIGtleSkgewotICAgICAgbGluZXMu
cHVzaChrZXkgKyAnOiAnICsgdmFsdWUpOwotICAgIH0pOwotICAgIHJldHVybiBsaW5lcy5qb2lu
KCdcbicpOwotICB9OwotCi0gIHRoaXMuYWJvcnQgPSBhbmd1bGFyLm5vb3A7Ci19Ci0KLQotLyoq
Ci0gKiBAbmdkb2MgZnVuY3Rpb24KLSAqIEBuYW1lIG5nTW9jay4kdGltZW91dAotICogQGRlc2Ny
aXB0aW9uCi0gKgotICogVGhpcyBzZXJ2aWNlIGlzIGp1c3QgYSBzaW1wbGUgZGVjb3JhdG9yIGZv
ciB7QGxpbmsgbmcuJHRpbWVvdXQgJHRpbWVvdXR9IHNlcnZpY2UKLSAqIHRoYXQgYWRkcyBhICJm
bHVzaCIgbWV0aG9kLgotICovCi0KLS8qKgotICogQG5nZG9jIG1ldGhvZAotICogQG5hbWUgbmdN
b2NrLiR0aW1lb3V0I2ZsdXNoCi0gKiBAbWV0aG9kT2YgbmdNb2NrLiR0aW1lb3V0Ci0gKiBAZGVz
Y3JpcHRpb24KLSAqCi0gKiBGbHVzaGVzIHRoZSBxdWV1ZSBvZiBwZW5kaW5nIHRhc2tzLgotICov
Ci0KLS8qKgotICoKLSAqLwotYW5ndWxhci5tb2NrLiRSb290RWxlbWVudFByb3ZpZGVyID0gZnVu
Y3Rpb24oKSB7Ci0gIHRoaXMuJGdldCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBhbmd1bGFy
LmVsZW1lbnQoJzxkaXYgbmctYXBwPjwvZGl2PicpOwotICB9Ci19OwotCi0vKioKLSAqIEBuZ2Rv
YyBvdmVydmlldwotICogQG5hbWUgbmdNb2NrCi0gKiBAZGVzY3JpcHRpb24KLSAqCi0gKiBUaGUg
YG5nTW9ja2AgaXMgYW4gYW5ndWxhciBtb2R1bGUgd2hpY2ggaXMgdXNlZCB3aXRoIGBuZ2AgbW9k
dWxlIGFuZCBhZGRzIHVuaXQtdGVzdCBjb25maWd1cmF0aW9uIGFzIHdlbGwgYXMgdXNlZnVsCi0g
KiBtb2NrcyB0byB0aGUge0BsaW5rIEFVVE8uJGluamVjdG9yICRpbmplY3Rvcn0uCi0gKi8KLWFu
Z3VsYXIubW9kdWxlKCduZ01vY2snLCBbJ25nJ10pLnByb3ZpZGVyKHsKLSAgJGJyb3dzZXI6IGFu
Z3VsYXIubW9jay4kQnJvd3NlclByb3ZpZGVyLAotICAkZXhjZXB0aW9uSGFuZGxlcjogYW5ndWxh
ci5tb2NrLiRFeGNlcHRpb25IYW5kbGVyUHJvdmlkZXIsCi0gICRsb2c6IGFuZ3VsYXIubW9jay4k
TG9nUHJvdmlkZXIsCi0gICRodHRwQmFja2VuZDogYW5ndWxhci5tb2NrLiRIdHRwQmFja2VuZFBy
b3ZpZGVyLAotICAkcm9vdEVsZW1lbnQ6IGFuZ3VsYXIubW9jay4kUm9vdEVsZW1lbnRQcm92aWRl
cgotfSkuY29uZmlnKGZ1bmN0aW9uKCRwcm92aWRlKSB7Ci0gICRwcm92aWRlLmRlY29yYXRvcign
JHRpbWVvdXQnLCBmdW5jdGlvbigkZGVsZWdhdGUsICRicm93c2VyKSB7Ci0gICAgJGRlbGVnYXRl
LmZsdXNoID0gZnVuY3Rpb24oKSB7Ci0gICAgICAkYnJvd3Nlci5kZWZlci5mbHVzaCgpOwotICAg
IH07Ci0gICAgcmV0dXJuICRkZWxlZ2F0ZTsKLSAgfSk7Ci19KTsKLQotCi0vKioKLSAqIEBuZ2Rv
YyBvdmVydmlldwotICogQG5hbWUgbmdNb2NrRTJFCi0gKiBAZGVzY3JpcHRpb24KLSAqCi0gKiBU
aGUgYG5nTW9ja0UyRWAgaXMgYW4gYW5ndWxhciBtb2R1bGUgd2hpY2ggY29udGFpbnMgbW9ja3Mg
c3VpdGFibGUgZm9yIGVuZC10by1lbmQgdGVzdGluZy4KLSAqIEN1cnJlbnRseSB0aGVyZSBpcyBv
bmx5IG9uZSBtb2NrIHByZXNlbnQgaW4gdGhpcyBtb2R1bGUgLQotICogdGhlIHtAbGluayBuZ01v
Y2tFMkUuJGh0dHBCYWNrZW5kIGUyZSAkaHR0cEJhY2tlbmR9IG1vY2suCi0gKi8KLWFuZ3VsYXIu
bW9kdWxlKCduZ01vY2tFMkUnLCBbJ25nJ10pLmNvbmZpZyhmdW5jdGlvbigkcHJvdmlkZSkgewot
ICAkcHJvdmlkZS5kZWNvcmF0b3IoJyRodHRwQmFja2VuZCcsIGFuZ3VsYXIubW9jay5lMmUuJGh0
dHBCYWNrZW5kRGVjb3JhdG9yKTsKLX0pOwotCi0vKioKLSAqIEBuZ2RvYyBvYmplY3QKLSAqIEBu
YW1lIG5nTW9ja0UyRS4kaHR0cEJhY2tlbmQKLSAqIEBkZXNjcmlwdGlvbgotICogRmFrZSBIVFRQ
IGJhY2tlbmQgaW1wbGVtZW50YXRpb24gc3VpdGFibGUgZm9yIGVuZC10by1lbmQgdGVzdGluZyBv
ciBiYWNrZW5kLWxlc3MgZGV2ZWxvcG1lbnQgb2YKLSAqIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSB0
aGUge0BsaW5rIG5nLiRodHRwICRodHRwIHNlcnZpY2V9LgotICoKLSAqICpOb3RlKjogRm9yIGZh
a2UgaHR0cCBiYWNrZW5kIGltcGxlbWVudGF0aW9uIHN1aXRhYmxlIGZvciB1bml0IHRlc3Rpbmcg
cGxlYXNlIHNlZQotICoge0BsaW5rIG5nTW9jay4kaHR0cEJhY2tlbmQgdW5pdC10ZXN0aW5nICRo
dHRwQmFja2VuZCBtb2NrfS4KLSAqCi0gKiBUaGlzIGltcGxlbWVudGF0aW9uIGNhbiBiZSB1c2Vk
IHRvIHJlc3BvbmQgd2l0aCBzdGF0aWMgb3IgZHluYW1pYyByZXNwb25zZXMgdmlhIHRoZSBgd2hl
bmAgYXBpCi0gKiBhbmQgaXRzIHNob3J0Y3V0cyAoYHdoZW5HRVRgLCBgd2hlblBPU1RgLCBldGMp
IGFuZCBvcHRpb25hbGx5IHBhc3MgdGhyb3VnaCByZXF1ZXN0cyB0byB0aGUKLSAqIHJlYWwgJGh0
dHBCYWNrZW5kIGZvciBzcGVjaWZpYyByZXF1ZXN0cyAoZS5nLiB0byBpbnRlcmFjdCB3aXRoIGNl
cnRhaW4gcmVtb3RlIGFwaXMgb3IgdG8gZmV0Y2gKLSAqIHRlbXBsYXRlcyBmcm9tIGEgd2Vic2Vy
dmVyKS4KLSAqCi0gKiBBcyBvcHBvc2VkIHRvIHVuaXQtdGVzdGluZywgaW4gYW4gZW5kLXRvLWVu
ZCB0ZXN0aW5nIHNjZW5hcmlvIG9yIGluIHNjZW5hcmlvIHdoZW4gYW4gYXBwbGljYXRpb24KLSAq
IGlzIGJlaW5nIGRldmVsb3BlZCB3aXRoIHRoZSByZWFsIGJhY2tlbmQgYXBpIHJlcGxhY2VkIHdp
dGggYSBtb2NrLCBpdCBpcyBvZnRlbiBkZXNpcmFibGUgZm9yCi0gKiBjZXJ0YWluIGNhdGVnb3J5
IG9mIHJlcXVlc3RzIHRvIGJ5cGFzcyB0aGUgbW9jayBhbmQgaXNzdWUgYSByZWFsIGh0dHAgcmVx
dWVzdCAoZS5nLiB0byBmZXRjaAotICogdGVtcGxhdGVzIG9yIHN0YXRpYyBmaWxlcyBmcm9tIHRo
ZSB3ZWJzZXJ2ZXIpLiBUbyBjb25maWd1cmUgdGhlIGJhY2tlbmQgd2l0aCB0aGlzIGJlaGF2aW9y
Ci0gKiB1c2UgdGhlIGBwYXNzVGhyb3VnaGAgcmVxdWVzdCBoYW5kbGVyIG9mIGB3aGVuYCBpbnN0
ZWFkIG9mIGByZXNwb25kYC4KLSAqCi0gKiBBZGRpdGlvbmFsbHksIHdlIGRvbid0IHdhbnQgdG8g
bWFudWFsbHkgaGF2ZSB0byBmbHVzaCBtb2NrZWQgb3V0IHJlcXVlc3RzIGxpa2Ugd2UgZG8gZHVy
aW5nIHVuaXQKLSAqIHRlc3RpbmcuIEZvciB0aGlzIHJlYXNvbiB0aGUgZTJlICRodHRwQmFja2Vu
ZCBhdXRvbWF0aWNhbGx5IGZsdXNoZXMgbW9ja2VkIG91dCByZXF1ZXN0cwotICogYXV0b21hdGlj
YWxseSwgY2xvc2VseSBzaW11bGF0aW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgWE1MSHR0cFJlcXVl
c3Qgb2JqZWN0LgotICoKLSAqIFRvIHNldHVwIHRoZSBhcHBsaWNhdGlvbiB0byBydW4gd2l0aCB0
aGlzIGh0dHAgYmFja2VuZCwgeW91IGhhdmUgdG8gY3JlYXRlIGEgbW9kdWxlIHRoYXQgZGVwZW5k
cwotICogb24gdGhlIGBuZ01vY2tFMkVgIGFuZCB5b3VyIGFwcGxpY2F0aW9uIG1vZHVsZXMgYW5k
IGRlZmluZXMgdGhlIGZha2UgYmFja2VuZDoKLSAqCi0gKiA8cHJlPgotICogICBteUFwcERldiA9
IGFuZ3VsYXIubW9kdWxlKCdteUFwcERldicsIFsnbXlBcHAnLCAnbmdNb2NrRTJFJ10pOwotICog
ICBteUFwcERldi5ydW4oZnVuY3Rpb24oJGh0dHBCYWNrZW5kKSB7Ci0gKiAgICAgcGhvbmVzID0g
W3tuYW1lOiAncGhvbmUxJ30sIHtuYW1lOiAncGhvbmUyJ31dOwotICoKLSAqICAgICAvLyByZXR1
cm5zIHRoZSBjdXJyZW50IGxpc3Qgb2YgcGhvbmVzCi0gKiAgICAgJGh0dHBCYWNrZW5kLndoZW5H
RVQoJy9waG9uZXMnKS5yZXNwb25kKHBob25lcyk7Ci0gKgotICogICAgIC8vIGFkZHMgYSBuZXcg
cGhvbmUgdG8gdGhlIHBob25lcyBhcnJheQotICogICAgICRodHRwQmFja2VuZC53aGVuUE9TVCgn
L3Bob25lcycpLnJlc3BvbmQoZnVuY3Rpb24obWV0aG9kLCB1cmwsIGRhdGEpIHsKLSAqICAgICAg
IHBob25lcy5wdXNoKGFuZ3VsYXIuZnJvbUpTT04oZGF0YSkpOwotICogICAgIH0pOwotICogICAg
ICRodHRwQmFja2VuZC53aGVuR0VUKC9eXC90ZW1wbGF0ZXNcLy8pLnBhc3NUaHJvdWdoKCk7Ci0g
KiAgICAgLy8uLi4KLSAqICAgfSk7Ci0gKiA8L3ByZT4KLSAqCi0gKiBBZnRlcndhcmRzLCBib290
c3RyYXAgeW91ciBhcHAgd2l0aCB0aGlzIG5ldyBtb2R1bGUuCi0gKi8KLQotLyoqCi0gKiBAbmdk
b2MgbWV0aG9kCi0gKiBAbmFtZSBuZ01vY2tFMkUuJGh0dHBCYWNrZW5kI3doZW4KLSAqIEBtZXRo
b2RPZiBuZ01vY2tFMkUuJGh0dHBCYWNrZW5kCi0gKiBAZGVzY3JpcHRpb24KLSAqIENyZWF0ZXMg
YSBuZXcgYmFja2VuZCBkZWZpbml0aW9uLgotICoKLSAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2Qg
SFRUUCBtZXRob2QuCi0gKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IHVybCBIVFRQIHVybC4KLSAq
IEBwYXJhbSB7KHN0cmluZ3xSZWdFeHApPX0gZGF0YSBIVFRQIHJlcXVlc3QgYm9keS4KLSAqIEBw
YXJhbSB7KE9iamVjdHxmdW5jdGlvbihPYmplY3QpKT19IGhlYWRlcnMgSFRUUCBoZWFkZXJzIG9y
IGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgaHR0cCBoZWFkZXIKLSAqICAgb2JqZWN0IGFuZCByZXR1
cm5zIHRydWUgaWYgdGhlIGhlYWRlcnMgbWF0Y2ggdGhlIGN1cnJlbnQgZGVmaW5pdGlvbi4KLSAq
IEByZXR1cm5zIHtyZXF1ZXN0SGFuZGxlcn0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBgcmVzcG9u
ZGAgYW5kIGBwYXNzVGhyb3VnaGAgbWV0aG9kcyB0aGF0Ci0gKiAgIGNvbnRyb2wgaG93IGEgbWF0
Y2hlZCByZXF1ZXN0IGlzIGhhbmRsZWQuCi0gKgotICogIC0gcmVzcG9uZCDigJMgYHtmdW5jdGlv
bihbc3RhdHVzLF0gZGF0YVssIGhlYWRlcnNdKXxmdW5jdGlvbihmdW5jdGlvbihtZXRob2QsIHVy
bCwgZGF0YSwgaGVhZGVycyl9YAotICogICAg4oCTIFRoZSByZXNwb25kIG1ldGhvZCB0YWtlcyBh
IHNldCBvZiBzdGF0aWMgZGF0YSB0byBiZSByZXR1cm5lZCBvciBhIGZ1bmN0aW9uIHRoYXQgY2Fu
IHJldHVybgotICogICAgYW4gYXJyYXkgY29udGFpbmluZyByZXNwb25zZSBzdGF0dXMgKG51bWJl
ciksIHJlc3BvbnNlIGRhdGEgKHN0cmluZykgYW5kIHJlc3BvbnNlIGhlYWRlcnMKLSAqICAgIChP
YmplY3QpLgotICogIC0gcGFzc1Rocm91Z2gg4oCTIGB7ZnVuY3Rpb24oKX1gIOKAkyBBbnkgcmVx
dWVzdCBtYXRjaGluZyBhIGJhY2tlbmQgZGVmaW5pdGlvbiB3aXRoIGBwYXNzVGhyb3VnaGAKLSAq
ICAgIGhhbmRsZXIsIHdpbGwgYmUgcGFzcyB0aHJvdWdoIHRvIHRoZSByZWFsIGJhY2tlbmQgKGFu
IFhIUiByZXF1ZXN0IHdpbGwgYmUgbWFkZSB0byB0aGUKLSAqICAgIHNlcnZlci4KLSAqLwotCi0v
KioKLSAqIEBuZ2RvYyBtZXRob2QKLSAqIEBuYW1lIG5nTW9ja0UyRS4kaHR0cEJhY2tlbmQjd2hl
bkdFVAotICogQG1ldGhvZE9mIG5nTW9ja0UyRS4kaHR0cEJhY2tlbmQKLSAqIEBkZXNjcmlwdGlv
bgotICogQ3JlYXRlcyBhIG5ldyBiYWNrZW5kIGRlZmluaXRpb24gZm9yIEdFVCByZXF1ZXN0cy4g
Rm9yIG1vcmUgaW5mbyBzZWUgYHdoZW4oKWAuCi0gKgotICogQHBhcmFtIHtzdHJpbmd8UmVnRXhw
fSB1cmwgSFRUUCB1cmwuCi0gKiBAcGFyYW0geyhPYmplY3R8ZnVuY3Rpb24oT2JqZWN0KSk9fSBo
ZWFkZXJzIEhUVFAgaGVhZGVycy4KLSAqIEByZXR1cm5zIHtyZXF1ZXN0SGFuZGxlcn0gUmV0dXJu
cyBhbiBvYmplY3Qgd2l0aCBgcmVzcG9uZGAgYW5kIGBwYXNzVGhyb3VnaGAgbWV0aG9kcyB0aGF0
Ci0gKiAgIGNvbnRyb2wgaG93IGEgbWF0Y2hlZCByZXF1ZXN0IGlzIGhhbmRsZWQuCi0gKi8KLQot
LyoqCi0gKiBAbmdkb2MgbWV0aG9kCi0gKiBAbmFtZSBuZ01vY2tFMkUuJGh0dHBCYWNrZW5kI3do
ZW5IRUFECi0gKiBAbWV0aG9kT2YgbmdNb2NrRTJFLiRodHRwQmFja2VuZAotICogQGRlc2NyaXB0
aW9uCi0gKiBDcmVhdGVzIGEgbmV3IGJhY2tlbmQgZGVmaW5pdGlvbiBmb3IgSEVBRCByZXF1ZXN0
cy4gRm9yIG1vcmUgaW5mbyBzZWUgYHdoZW4oKWAuCi0gKgotICogQHBhcmFtIHtzdHJpbmd8UmVn
RXhwfSB1cmwgSFRUUCB1cmwuCi0gKiBAcGFyYW0geyhPYmplY3R8ZnVuY3Rpb24oT2JqZWN0KSk9
fSBoZWFkZXJzIEhUVFAgaGVhZGVycy4KLSAqIEByZXR1cm5zIHtyZXF1ZXN0SGFuZGxlcn0gUmV0
dXJucyBhbiBvYmplY3Qgd2l0aCBgcmVzcG9uZGAgYW5kIGBwYXNzVGhyb3VnaGAgbWV0aG9kcyB0
aGF0Ci0gKiAgIGNvbnRyb2wgaG93IGEgbWF0Y2hlZCByZXF1ZXN0IGlzIGhhbmRsZWQuCi0gKi8K
LQotLyoqCi0gKiBAbmdkb2MgbWV0aG9kCi0gKiBAbmFtZSBuZ01vY2tFMkUuJGh0dHBCYWNrZW5k
I3doZW5ERUxFVEUKLSAqIEBtZXRob2RPZiBuZ01vY2tFMkUuJGh0dHBCYWNrZW5kCi0gKiBAZGVz
Y3JpcHRpb24KLSAqIENyZWF0ZXMgYSBuZXcgYmFja2VuZCBkZWZpbml0aW9uIGZvciBERUxFVEUg
cmVxdWVzdHMuIEZvciBtb3JlIGluZm8gc2VlIGB3aGVuKClgLgotICoKLSAqIEBwYXJhbSB7c3Ry
aW5nfFJlZ0V4cH0gdXJsIEhUVFAgdXJsLgotICogQHBhcmFtIHsoT2JqZWN0fGZ1bmN0aW9uKE9i
amVjdCkpPX0gaGVhZGVycyBIVFRQIGhlYWRlcnMuCi0gKiBAcmV0dXJucyB7cmVxdWVzdEhhbmRs
ZXJ9IFJldHVybnMgYW4gb2JqZWN0IHdpdGggYHJlc3BvbmRgIGFuZCBgcGFzc1Rocm91Z2hgIG1l
dGhvZHMgdGhhdAotICogICBjb250cm9sIGhvdyBhIG1hdGNoZWQgcmVxdWVzdCBpcyBoYW5kbGVk
LgotICovCi0KLS8qKgotICogQG5nZG9jIG1ldGhvZAotICogQG5hbWUgbmdNb2NrRTJFLiRodHRw
QmFja2VuZCN3aGVuUE9TVAotICogQG1ldGhvZE9mIG5nTW9ja0UyRS4kaHR0cEJhY2tlbmQKLSAq
IEBkZXNjcmlwdGlvbgotICogQ3JlYXRlcyBhIG5ldyBiYWNrZW5kIGRlZmluaXRpb24gZm9yIFBP
U1QgcmVxdWVzdHMuIEZvciBtb3JlIGluZm8gc2VlIGB3aGVuKClgLgotICoKLSAqIEBwYXJhbSB7
c3RyaW5nfFJlZ0V4cH0gdXJsIEhUVFAgdXJsLgotICogQHBhcmFtIHsoc3RyaW5nfFJlZ0V4cCk9
fSBkYXRhIEhUVFAgcmVxdWVzdCBib2R5LgotICogQHBhcmFtIHsoT2JqZWN0fGZ1bmN0aW9uKE9i
amVjdCkpPX0gaGVhZGVycyBIVFRQIGhlYWRlcnMuCi0gKiBAcmV0dXJucyB7cmVxdWVzdEhhbmRs
ZXJ9IFJldHVybnMgYW4gb2JqZWN0IHdpdGggYHJlc3BvbmRgIGFuZCBgcGFzc1Rocm91Z2hgIG1l
dGhvZHMgdGhhdAotICogICBjb250cm9sIGhvdyBhIG1hdGNoZWQgcmVxdWVzdCBpcyBoYW5kbGVk
LgotICovCi0KLS8qKgotICogQG5nZG9jIG1ldGhvZAotICogQG5hbWUgbmdNb2NrRTJFLiRodHRw
QmFja2VuZCN3aGVuUFVUCi0gKiBAbWV0aG9kT2YgbmdNb2NrRTJFLiRodHRwQmFja2VuZAotICog
QGRlc2NyaXB0aW9uCi0gKiBDcmVhdGVzIGEgbmV3IGJhY2tlbmQgZGVmaW5pdGlvbiBmb3IgUFVU
IHJlcXVlc3RzLiAgRm9yIG1vcmUgaW5mbyBzZWUgYHdoZW4oKWAuCi0gKgotICogQHBhcmFtIHtz
dHJpbmd8UmVnRXhwfSB1cmwgSFRUUCB1cmwuCi0gKiBAcGFyYW0geyhzdHJpbmd8UmVnRXhwKT19
IGRhdGEgSFRUUCByZXF1ZXN0IGJvZHkuCi0gKiBAcGFyYW0geyhPYmplY3R8ZnVuY3Rpb24oT2Jq
ZWN0KSk9fSBoZWFkZXJzIEhUVFAgaGVhZGVycy4KLSAqIEByZXR1cm5zIHtyZXF1ZXN0SGFuZGxl
cn0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBgcmVzcG9uZGAgYW5kIGBwYXNzVGhyb3VnaGAgbWV0
aG9kcyB0aGF0Ci0gKiAgIGNvbnRyb2wgaG93IGEgbWF0Y2hlZCByZXF1ZXN0IGlzIGhhbmRsZWQu
Ci0gKi8KLQotLyoqCi0gKiBAbmdkb2MgbWV0aG9kCi0gKiBAbmFtZSBuZ01vY2tFMkUuJGh0dHBC
YWNrZW5kI3doZW5QQVRDSAotICogQG1ldGhvZE9mIG5nTW9ja0UyRS4kaHR0cEJhY2tlbmQKLSAq
IEBkZXNjcmlwdGlvbgotICogQ3JlYXRlcyBhIG5ldyBiYWNrZW5kIGRlZmluaXRpb24gZm9yIFBB
VENIIHJlcXVlc3RzLiAgRm9yIG1vcmUgaW5mbyBzZWUgYHdoZW4oKWAuCi0gKgotICogQHBhcmFt
IHtzdHJpbmd8UmVnRXhwfSB1cmwgSFRUUCB1cmwuCi0gKiBAcGFyYW0geyhzdHJpbmd8UmVnRXhw
KT19IGRhdGEgSFRUUCByZXF1ZXN0IGJvZHkuCi0gKiBAcGFyYW0geyhPYmplY3R8ZnVuY3Rpb24o
T2JqZWN0KSk9fSBoZWFkZXJzIEhUVFAgaGVhZGVycy4KLSAqIEByZXR1cm5zIHtyZXF1ZXN0SGFu
ZGxlcn0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBgcmVzcG9uZGAgYW5kIGBwYXNzVGhyb3VnaGAg
bWV0aG9kcyB0aGF0Ci0gKiAgIGNvbnRyb2wgaG93IGEgbWF0Y2hlZCByZXF1ZXN0IGlzIGhhbmRs
ZWQuCi0gKi8KLQotLyoqCi0gKiBAbmdkb2MgbWV0aG9kCi0gKiBAbmFtZSBuZ01vY2tFMkUuJGh0
dHBCYWNrZW5kI3doZW5KU09OUAotICogQG1ldGhvZE9mIG5nTW9ja0UyRS4kaHR0cEJhY2tlbmQK
LSAqIEBkZXNjcmlwdGlvbgotICogQ3JlYXRlcyBhIG5ldyBiYWNrZW5kIGRlZmluaXRpb24gZm9y
IEpTT05QIHJlcXVlc3RzLiBGb3IgbW9yZSBpbmZvIHNlZSBgd2hlbigpYC4KLSAqCi0gKiBAcGFy
YW0ge3N0cmluZ3xSZWdFeHB9IHVybCBIVFRQIHVybC4KLSAqIEByZXR1cm5zIHtyZXF1ZXN0SGFu
ZGxlcn0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBgcmVzcG9uZGAgYW5kIGBwYXNzVGhyb3VnaGAg
bWV0aG9kcyB0aGF0Ci0gKiAgIGNvbnRyb2wgaG93IGEgbWF0Y2hlZCByZXF1ZXN0IGlzIGhhbmRs
ZWQuCi0gKi8KLWFuZ3VsYXIubW9jay5lMmUgPSB7fTsKLWFuZ3VsYXIubW9jay5lMmUuJGh0dHBC
YWNrZW5kRGVjb3JhdG9yID0gWyckZGVsZWdhdGUnLCAnJGJyb3dzZXInLCBjcmVhdGVIdHRwQmFj
a2VuZE1vY2tdOwotCi0KLWFuZ3VsYXIubW9jay5jbGVhckRhdGFDYWNoZSA9IGZ1bmN0aW9uKCkg
ewotICB2YXIga2V5LAotICAgICAgY2FjaGUgPSBhbmd1bGFyLmVsZW1lbnQuY2FjaGU7Ci0KLSAg
Zm9yKGtleSBpbiBjYWNoZSkgewotICAgIGlmIChjYWNoZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7
Ci0gICAgICB2YXIgaGFuZGxlID0gY2FjaGVba2V5XS5oYW5kbGU7Ci0KLSAgICAgIGhhbmRsZSAm
JiBhbmd1bGFyLmVsZW1lbnQoaGFuZGxlLmVsZW0pLnVuYmluZCgpOwotICAgICAgZGVsZXRlIGNh
Y2hlW2tleV07Ci0gICAgfQotICB9Ci19OwotCi0KLXdpbmRvdy5qc3Rlc3Rkcml2ZXIgJiYgKGZ1
bmN0aW9uKHdpbmRvdykgewotICAvKioKLSAgICogR2xvYmFsIG1ldGhvZCB0byBvdXRwdXQgYW55
IG51bWJlciBvZiBvYmplY3RzIGludG8gSlNURCBjb25zb2xlLiBVc2VmdWwgZm9yIGRlYnVnZ2lu
Zy4KLSAgICovCi0gIHdpbmRvdy5kdW1wID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGFyZ3MgPSBb
XTsKLSAgICBhbmd1bGFyLmZvckVhY2goYXJndW1lbnRzLCBmdW5jdGlvbihhcmcpIHsKLSAgICAg
IGFyZ3MucHVzaChhbmd1bGFyLm1vY2suZHVtcChhcmcpKTsKLSAgICB9KTsKLSAgICBqc3Rlc3Rk
cml2ZXIuY29uc29sZS5sb2cuYXBwbHkoanN0ZXN0ZHJpdmVyLmNvbnNvbGUsIGFyZ3MpOwotICAg
IGlmICh3aW5kb3cuY29uc29sZSkgewotICAgICAgd2luZG93LmNvbnNvbGUubG9nLmFwcGx5KHdp
bmRvdy5jb25zb2xlLCBhcmdzKTsKLSAgICB9Ci0gIH07Ci19KSh3aW5kb3cpOwotCi0KLXdpbmRv
dy5qYXNtaW5lICYmIChmdW5jdGlvbih3aW5kb3cpIHsKLQotICBhZnRlckVhY2goZnVuY3Rpb24o
KSB7Ci0gICAgdmFyIHNwZWMgPSBnZXRDdXJyZW50U3BlYygpOwotICAgIHZhciBpbmplY3RvciA9
IHNwZWMuJGluamVjdG9yOwotCi0gICAgc3BlYy4kaW5qZWN0b3IgPSBudWxsOwotICAgIHNwZWMu
JG1vZHVsZXMgPSBudWxsOwotCi0gICAgaWYgKGluamVjdG9yKSB7Ci0gICAgICBpbmplY3Rvci5n
ZXQoJyRyb290RWxlbWVudCcpLnVuYmluZCgpOwotICAgICAgaW5qZWN0b3IuZ2V0KCckYnJvd3Nl
cicpLnBvbGxGbnMubGVuZ3RoID0gMDsKLSAgICB9Ci0KLSAgICBhbmd1bGFyLm1vY2suY2xlYXJE
YXRhQ2FjaGUoKTsKLQotICAgIC8vIGNsZWFuIHVwIGpxdWVyeSdzIGZyYWdtZW50IGNhY2hlCi0g
ICAgYW5ndWxhci5mb3JFYWNoKGFuZ3VsYXIuZWxlbWVudC5mcmFnbWVudHMsIGZ1bmN0aW9uKHZh
bCwga2V5KSB7Ci0gICAgICBkZWxldGUgYW5ndWxhci5lbGVtZW50LmZyYWdtZW50c1trZXldOwot
ICAgIH0pOwotCi0gICAgTW9ja1hoci4kJGxhc3RJbnN0YW5jZSA9IG51bGw7Ci0KLSAgICBhbmd1
bGFyLmZvckVhY2goYW5ndWxhci5jYWxsYmFja3MsIGZ1bmN0aW9uKHZhbCwga2V5KSB7Ci0gICAg
ICBkZWxldGUgYW5ndWxhci5jYWxsYmFja3Nba2V5XTsKLSAgICB9KTsKLSAgICBhbmd1bGFyLmNh
bGxiYWNrcy5jb3VudGVyID0gMDsKLSAgfSk7Ci0KLSAgZnVuY3Rpb24gZ2V0Q3VycmVudFNwZWMo
KSB7Ci0gICAgcmV0dXJuIGphc21pbmUuZ2V0RW52KCkuY3VycmVudFNwZWM7Ci0gIH0KLQotICBm
dW5jdGlvbiBpc1NwZWNSdW5uaW5nKCkgewotICAgIHZhciBzcGVjID0gZ2V0Q3VycmVudFNwZWMo
KTsKLSAgICByZXR1cm4gc3BlYyAmJiBzcGVjLnF1ZXVlLnJ1bm5pbmc7Ci0gIH0KLQotICAvKioK
LSAgICogQG5nZG9jIGZ1bmN0aW9uCi0gICAqIEBuYW1lIGFuZ3VsYXIubW9jay5tb2R1bGUKLSAg
ICogQGRlc2NyaXB0aW9uCi0gICAqCi0gICAqICpOT1RFKjogVGhpcyBpcyBmdW5jdGlvbiBpcyBh
bHNvIHB1Ymxpc2hlZCBvbiB3aW5kb3cgZm9yIGVhc3kgYWNjZXNzLjxicj4KLSAgICogKk5PVEUq
OiBPbmx5IGF2YWlsYWJsZSB3aXRoIHtAbGluayBodHRwOi8vcGl2b3RhbC5naXRodWIuY29tL2ph
c21pbmUvIGphc21pbmV9LgotICAgKgotICAgKiBUaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyBhIG1v
ZHVsZSBjb25maWd1cmF0aW9uIGNvZGUuIEl0IGNvbGxlY3RzIHRoZSBjb25maWd1cmF0aW9uIGlu
Zm9ybWF0aW9uCi0gICAqIHdoaWNoIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBpbmplY3RvciBpcyBj
cmVhdGVkIGJ5IHtAbGluayBhbmd1bGFyLm1vY2suaW5qZWN0IGluamVjdH0uCi0gICAqCi0gICAq
IFNlZSB7QGxpbmsgYW5ndWxhci5tb2NrLmluamVjdCBpbmplY3R9IGZvciB1c2FnZSBleGFtcGxl
Ci0gICAqCi0gICAqIEBwYXJhbSB7Li4uKHN0cmluZ3xGdW5jdGlvbil9IGZucyBhbnkgbnVtYmVy
IG9mIG1vZHVsZXMgd2hpY2ggYXJlIHJlcHJlc2VudGVkIGFzIHN0cmluZwotICAgKiAgICAgICAg
YWxpYXNlcyBvciBhcyBhbm9ueW1vdXMgbW9kdWxlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucy4g
VGhlIG1vZHVsZXMgYXJlIHVzZWQgdG8KLSAgICogICAgICAgIGNvbmZpZ3VyZSB0aGUgaW5qZWN0
b3IuIFRoZSAnbmcnIGFuZCAnbmdNb2NrJyBtb2R1bGVzIGFyZSBhdXRvbWF0aWNhbGx5IGxvYWRl
ZC4KLSAgICovCi0gIHdpbmRvdy5tb2R1bGUgPSBhbmd1bGFyLm1vY2subW9kdWxlID0gZnVuY3Rp
b24oKSB7Ci0gICAgdmFyIG1vZHVsZUZucyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFy
Z3VtZW50cywgMCk7Ci0gICAgcmV0dXJuIGlzU3BlY1J1bm5pbmcoKSA/IHdvcmtGbigpIDogd29y
a0ZuOwotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIGZ1bmN0aW9uIHdvcmtGbigpIHsK
LSAgICAgIHZhciBzcGVjID0gZ2V0Q3VycmVudFNwZWMoKTsKLSAgICAgIGlmIChzcGVjLiRpbmpl
Y3RvcikgewotICAgICAgICB0aHJvdyBFcnJvcignSW5qZWN0b3IgYWxyZWFkeSBjcmVhdGVkLCBj
YW4gbm90IHJlZ2lzdGVyIGEgbW9kdWxlIScpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdmFy
IG1vZHVsZXMgPSBzcGVjLiRtb2R1bGVzIHx8IChzcGVjLiRtb2R1bGVzID0gW10pOwotICAgICAg
ICBhbmd1bGFyLmZvckVhY2gobW9kdWxlRm5zLCBmdW5jdGlvbihtb2R1bGUpIHsKLSAgICAgICAg
ICBtb2R1bGVzLnB1c2gobW9kdWxlKTsKLSAgICAgICAgfSk7Ci0gICAgICB9Ci0gICAgfQotICB9
OwotCi0gIC8qKgotICAgKiBAbmdkb2MgZnVuY3Rpb24KLSAgICogQG5hbWUgYW5ndWxhci5tb2Nr
LmluamVjdAotICAgKiBAZGVzY3JpcHRpb24KLSAgICoKLSAgICogKk5PVEUqOiBUaGlzIGlzIGZ1
bmN0aW9uIGlzIGFsc28gcHVibGlzaGVkIG9uIHdpbmRvdyBmb3IgZWFzeSBhY2Nlc3MuPGJyPgot
ICAgKiAqTk9URSo6IE9ubHkgYXZhaWxhYmxlIHdpdGgge0BsaW5rIGh0dHA6Ly9waXZvdGFsLmdp
dGh1Yi5jb20vamFzbWluZS8gamFzbWluZX0uCi0gICAqCi0gICAqIFRoZSBpbmplY3QgZnVuY3Rp
b24gd3JhcHMgYSBmdW5jdGlvbiBpbnRvIGFuIGluamVjdGFibGUgZnVuY3Rpb24uIFRoZSBpbmpl
Y3QoKSBjcmVhdGVzIG5ldwotICAgKiBpbnN0YW5jZSBvZiB7QGxpbmsgQVVUTy4kaW5qZWN0b3Ig
JGluamVjdG9yfSBwZXIgdGVzdCwgd2hpY2ggaXMgdGhlbiB1c2VkIGZvcgotICAgKiByZXNvbHZp
bmcgcmVmZXJlbmNlcy4KLSAgICoKLSAgICogU2VlIGFsc28ge0BsaW5rIGFuZ3VsYXIubW9jay5t
b2R1bGUgbW9kdWxlfQotICAgKgotICAgKiBFeGFtcGxlIG9mIHdoYXQgYSB0eXBpY2FsIGphc21p
bmUgdGVzdHMgbG9va3MgbGlrZSB3aXRoIHRoZSBpbmplY3QgbWV0aG9kLgotICAgKiA8cHJlPgot
ICAgKgotICAgKiAgIGFuZ3VsYXIubW9kdWxlKCdteUFwcGxpY2F0aW9uTW9kdWxlJywgW10pCi0g
ICAqICAgICAgIC52YWx1ZSgnbW9kZScsICdhcHAnKQotICAgKiAgICAgICAudmFsdWUoJ3ZlcnNp
b24nLCAndjEuMC4xJyk7Ci0gICAqCi0gICAqCi0gICAqICAgZGVzY3JpYmUoJ015QXBwJywgZnVu
Y3Rpb24oKSB7Ci0gICAqCi0gICAqICAgICAvLyBZb3UgbmVlZCB0byBsb2FkIG1vZHVsZXMgdGhh
dCB5b3Ugd2FudCB0byB0ZXN0LAotICAgKiAgICAgLy8gaXQgbG9hZHMgb25seSB0aGUgIm5nIiBt
b2R1bGUgYnkgZGVmYXVsdC4KLSAgICogICAgIGJlZm9yZUVhY2gobW9kdWxlKCdteUFwcGxpY2F0
aW9uTW9kdWxlJykpOwotICAgKgotICAgKgotICAgKiAgICAgLy8gaW5qZWN0KCkgaXMgdXNlZCB0
byBpbmplY3QgYXJndW1lbnRzIG9mIGFsbCBnaXZlbiBmdW5jdGlvbnMKLSAgICogICAgIGl0KCdz
aG91bGQgcHJvdmlkZSBhIHZlcnNpb24nLCBpbmplY3QoZnVuY3Rpb24obW9kZSwgdmVyc2lvbikg
ewotICAgKiAgICAgICBleHBlY3QodmVyc2lvbikudG9FcXVhbCgndjEuMC4xJyk7Ci0gICAqICAg
ICAgIGV4cGVjdChtb2RlKS50b0VxdWFsKCdhcHAnKTsKLSAgICogICAgIH0pKTsKLSAgICoKLSAg
ICoKLSAgICogICAgIC8vIFRoZSBpbmplY3QgYW5kIG1vZHVsZSBtZXRob2QgY2FuIGFsc28gYmUg
dXNlZCBpbnNpZGUgb2YgdGhlIGl0IG9yIGJlZm9yZUVhY2gKLSAgICogICAgIGl0KCdzaG91bGQg
b3ZlcnJpZGUgYSB2ZXJzaW9uIGFuZCB0ZXN0IHRoZSBuZXcgdmVyc2lvbiBpcyBpbmplY3RlZCcs
IGZ1bmN0aW9uKCkgewotICAgKiAgICAgICAvLyBtb2R1bGUoKSB0YWtlcyBmdW5jdGlvbnMgb3Ig
c3RyaW5ncyAobW9kdWxlIGFsaWFzZXMpCi0gICAqICAgICAgIG1vZHVsZShmdW5jdGlvbigkcHJv
dmlkZSkgewotICAgKiAgICAgICAgICRwcm92aWRlLnZhbHVlKCd2ZXJzaW9uJywgJ292ZXJyaWRk
ZW4nKTsgLy8gb3ZlcnJpZGUgdmVyc2lvbiBoZXJlCi0gICAqICAgICAgIH0pOwotICAgKgotICAg
KiAgICAgICBpbmplY3QoZnVuY3Rpb24odmVyc2lvbikgewotICAgKiAgICAgICAgIGV4cGVjdCh2
ZXJzaW9uKS50b0VxdWFsKCdvdmVycmlkZGVuJyk7Ci0gICAqICAgICAgIH0pOwotICAgKiAgICAg
KSk7Ci0gICAqICAgfSk7Ci0gICAqCi0gICAqIDwvcHJlPgotICAgKgotICAgKiBAcGFyYW0gey4u
LkZ1bmN0aW9ufSBmbnMgYW55IG51bWJlciBvZiBmdW5jdGlvbnMgd2hpY2ggd2lsbCBiZSBpbmpl
Y3RlZCB1c2luZyB0aGUgaW5qZWN0b3IuCi0gICAqLwotICB3aW5kb3cuaW5qZWN0ID0gYW5ndWxh
ci5tb2NrLmluamVjdCA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBibG9ja0ZucyA9IEFycmF5LnBy
b3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7Ci0gICAgdmFyIGVycm9yRm9yU3RhY2sg
PSBuZXcgRXJyb3IoJ0RlY2xhcmF0aW9uIExvY2F0aW9uJyk7Ci0gICAgcmV0dXJuIGlzU3BlY1J1
bm5pbmcoKSA/IHdvcmtGbigpIDogd29ya0ZuOwotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLwot
ICAgIGZ1bmN0aW9uIHdvcmtGbigpIHsKLSAgICAgIHZhciBzcGVjID0gZ2V0Q3VycmVudFNwZWMo
KTsKLSAgICAgIHZhciBtb2R1bGVzID0gc3BlYy4kbW9kdWxlcyB8fCBbXTsKLSAgICAgIG1vZHVs
ZXMudW5zaGlmdCgnbmdNb2NrJyk7Ci0gICAgICBtb2R1bGVzLnVuc2hpZnQoJ25nJyk7Ci0gICAg
ICB2YXIgaW5qZWN0b3IgPSBzcGVjLiRpbmplY3RvcjsKLSAgICAgIGlmICghaW5qZWN0b3IpIHsK
LSAgICAgICAgaW5qZWN0b3IgPSBzcGVjLiRpbmplY3RvciA9IGFuZ3VsYXIuaW5qZWN0b3IobW9k
dWxlcyk7Ci0gICAgICB9Ci0gICAgICBmb3IodmFyIGkgPSAwLCBpaSA9IGJsb2NrRm5zLmxlbmd0
aDsgaSA8IGlpOyBpKyspIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICBpbmplY3Rvci5pbnZv
a2UoYmxvY2tGbnNbaV0gfHwgYW5ndWxhci5ub29wLCB0aGlzKTsKLSAgICAgICAgfSBjYXRjaCAo
ZSkgewotICAgICAgICAgIGlmKGUuc3RhY2spIGUuc3RhY2sgKz0gICdcbicgKyBlcnJvckZvclN0
YWNrLnN0YWNrOwotICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAg
ICAgICAgZXJyb3JGb3JTdGFjayA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0g
IH07Ci19KSh3aW5kb3cpOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2Jvd2Vy
X2NvbXBvbmVudHMvYW5ndWxhci9hbmd1bGFyLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2Jv
d2VyX2NvbXBvbmVudHMvYW5ndWxhci9hbmd1bGFyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiNzkyYjI2Yzc0NGU0YTVmYzgxNTQ2MWYwZWFjNDBhOWJkZWFhMTU4Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3Vs
YXJqcy9ib3dlcl9jb21wb25lbnRzL2FuZ3VsYXIvYW5ndWxhci5qcworKysgL2Rldi9udWxsCkBA
IC0xLDE0ODQ3ICswLDAgQEAKLS8qKgotICogQGxpY2Vuc2UgQW5ndWxhckpTIHYxLjAuNwotICog
KGMpIDIwMTAtMjAxMiBHb29nbGUsIEluYy4gaHR0cDovL2FuZ3VsYXJqcy5vcmcKLSAqIExpY2Vu
c2U6IE1JVAotICovCi0oZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCwgdW5kZWZpbmVkKSB7Ci0n
dXNlIHN0cmljdCc7Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0v
KioKLSAqIEBuZ2RvYyBmdW5jdGlvbgotICogQG5hbWUgYW5ndWxhci5sb3dlcmNhc2UKLSAqIEBm
dW5jdGlvbgotICoKLSAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgc3BlY2lmaWVkIHN0cmlu
ZyB0byBsb3dlcmNhc2UuCi0gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFN0cmluZyB0byBiZSBj
b252ZXJ0ZWQgdG8gbG93ZXJjYXNlLgotICogQHJldHVybnMge3N0cmluZ30gTG93ZXJjYXNlZCBz
dHJpbmcuCi0gKi8KLXZhciBsb3dlcmNhc2UgPSBmdW5jdGlvbihzdHJpbmcpe3JldHVybiBpc1N0
cmluZyhzdHJpbmcpID8gc3RyaW5nLnRvTG93ZXJDYXNlKCkgOiBzdHJpbmc7fTsKLQotCi0vKioK
LSAqIEBuZ2RvYyBmdW5jdGlvbgotICogQG5hbWUgYW5ndWxhci51cHBlcmNhc2UKLSAqIEBmdW5j
dGlvbgotICoKLSAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgc3BlY2lmaWVkIHN0cmluZyB0
byB1cHBlcmNhc2UuCi0gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFN0cmluZyB0byBiZSBjb252
ZXJ0ZWQgdG8gdXBwZXJjYXNlLgotICogQHJldHVybnMge3N0cmluZ30gVXBwZXJjYXNlZCBzdHJp
bmcuCi0gKi8KLXZhciB1cHBlcmNhc2UgPSBmdW5jdGlvbihzdHJpbmcpe3JldHVybiBpc1N0cmlu
ZyhzdHJpbmcpID8gc3RyaW5nLnRvVXBwZXJDYXNlKCkgOiBzdHJpbmc7fTsKLQotCi12YXIgbWFu
dWFsTG93ZXJjYXNlID0gZnVuY3Rpb24ocykgewotICByZXR1cm4gaXNTdHJpbmcocykKLSAgICAg
ID8gcy5yZXBsYWNlKC9bQS1aXS9nLCBmdW5jdGlvbihjaCkge3JldHVybiBTdHJpbmcuZnJvbUNo
YXJDb2RlKGNoLmNoYXJDb2RlQXQoMCkgfCAzMik7fSkKLSAgICAgIDogczsKLX07Ci12YXIgbWFu
dWFsVXBwZXJjYXNlID0gZnVuY3Rpb24ocykgewotICByZXR1cm4gaXNTdHJpbmcocykKLSAgICAg
ID8gcy5yZXBsYWNlKC9bYS16XS9nLCBmdW5jdGlvbihjaCkge3JldHVybiBTdHJpbmcuZnJvbUNo
YXJDb2RlKGNoLmNoYXJDb2RlQXQoMCkgJiB+MzIpO30pCi0gICAgICA6IHM7Ci19OwotCi0KLS8v
IFN0cmluZyN0b0xvd2VyQ2FzZSBhbmQgU3RyaW5nI3RvVXBwZXJDYXNlIGRvbid0IHByb2R1Y2Ug
Y29ycmVjdCByZXN1bHRzIGluIGJyb3dzZXJzIHdpdGggVHVya2lzaAotLy8gbG9jYWxlLCBmb3Ig
dGhpcyByZWFzb24gd2UgbmVlZCB0byBkZXRlY3QgdGhpcyBjYXNlIGFuZCByZWRlZmluZSBsb3dl
cmNhc2UvdXBwZXJjYXNlIG1ldGhvZHMKLS8vIHdpdGggY29ycmVjdCBidXQgc2xvd2VyIGFsdGVy
bmF0aXZlcy4KLWlmICgnaScgIT09ICdJJy50b0xvd2VyQ2FzZSgpKSB7Ci0gIGxvd2VyY2FzZSA9
IG1hbnVhbExvd2VyY2FzZTsKLSAgdXBwZXJjYXNlID0gbWFudWFsVXBwZXJjYXNlOwotfQotCi0K
LXZhciAvKiogaG9sZHMgbWFqb3IgdmVyc2lvbiBudW1iZXIgZm9yIElFIG9yIE5hTiBmb3IgcmVh
bCBicm93c2VycyAqLwotICAgIG1zaWUgICAgICAgICAgICAgID0gaW50KCgvbXNpZSAoXGQrKS8u
ZXhlYyhsb3dlcmNhc2UobmF2aWdhdG9yLnVzZXJBZ2VudCkpIHx8IFtdKVsxXSksCi0gICAganFM
aXRlLCAgICAgICAgICAgLy8gZGVsYXkgYmluZGluZyBzaW5jZSBqUXVlcnkgY291bGQgYmUgbG9h
ZGVkIGFmdGVyIHVzLgotICAgIGpRdWVyeSwgICAgICAgICAgIC8vIGRlbGF5IGJpbmRpbmcKLSAg
ICBzbGljZSAgICAgICAgICAgICA9IFtdLnNsaWNlLAotICAgIHB1c2ggICAgICAgICAgICAgID0g
W10ucHVzaCwKLSAgICB0b1N0cmluZyAgICAgICAgICA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJp
bmcsCi0KLSAgICAvKiogQG5hbWUgYW5ndWxhciAqLwotICAgIGFuZ3VsYXIgICAgICAgICAgID0g
d2luZG93LmFuZ3VsYXIgfHwgKHdpbmRvdy5hbmd1bGFyID0ge30pLAotICAgIGFuZ3VsYXJNb2R1
bGUsCi0gICAgbm9kZU5hbWVfLAotICAgIHVpZCAgICAgICAgICAgICAgID0gWycwJywgJzAnLCAn
MCddOwotCi0KLS8qKgotICogQHByaXZhdGUKLSAqIEBwYXJhbSB7Kn0gb2JqCi0gKiBAcmV0dXJu
IHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgYG9iamAgaXMgYW4gYXJyYXkgb3IgYXJyYXktbGlr
ZSBvYmplY3QgKE5vZGVMaXN0LCBBcmd1bWVudHMsIC4uLikKLSAqLwotZnVuY3Rpb24gaXNBcnJh
eUxpa2Uob2JqKSB7Ci0gIGlmICghb2JqIHx8ICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gJ251bWJl
cicpKSByZXR1cm4gZmFsc2U7Ci0KLSAgLy8gV2UgaGF2ZSBvbiBvYmplY3Qgd2hpY2ggaGFzIGxl
bmd0aCBwcm9wZXJ0eS4gU2hvdWxkIHdlIHRyZWF0IGl0IGFzIGFycmF5PwotICBpZiAodHlwZW9m
IG9iai5oYXNPd25Qcm9wZXJ0eSAhPSAnZnVuY3Rpb24nICYmCi0gICAgICB0eXBlb2Ygb2JqLmNv
bnN0cnVjdG9yICE9ICdmdW5jdGlvbicpIHsKLSAgICAvLyBUaGlzIGlzIGhlcmUgZm9yIElFODog
aXQgaXMgYSBib2d1cyBvYmplY3QgdHJlYXQgaXQgYXMgYXJyYXk7Ci0gICAgcmV0dXJuIHRydWU7
Ci0gIH0gZWxzZSAgewotICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBKUUxpdGUgfHwgICAgICAg
ICAgICAgICAgICAgICAgLy8gSlFMaXRlCi0gICAgICAgICAgIChqUXVlcnkgJiYgb2JqIGluc3Rh
bmNlb2YgalF1ZXJ5KSB8fCAgICAgICAgICAvLyBqUXVlcnkKLSAgICAgICAgICAgdG9TdHJpbmcu
Y2FsbChvYmopICE9PSAnW29iamVjdCBPYmplY3RdJyB8fCAgIC8vIHNvbWUgYnJvd3NlciBuYXRp
dmUgb2JqZWN0Ci0gICAgICAgICAgIHR5cGVvZiBvYmouY2FsbGVlID09PSAnZnVuY3Rpb24nOyAg
ICAgICAgICAgICAgLy8gYXJndW1lbnRzIChvbiBJRTggbG9va3MgbGlrZSByZWd1bGFyIG9iaikK
LSAgfQotfQotCi0KLS8qKgotICogQG5nZG9jIGZ1bmN0aW9uCi0gKiBAbmFtZSBhbmd1bGFyLmZv
ckVhY2gKLSAqIEBmdW5jdGlvbgotICoKLSAqIEBkZXNjcmlwdGlvbgotICogSW52b2tlcyB0aGUg
YGl0ZXJhdG9yYCBmdW5jdGlvbiBvbmNlIGZvciBlYWNoIGl0ZW0gaW4gYG9iamAgY29sbGVjdGlv
biwgd2hpY2ggY2FuIGJlIGVpdGhlciBhbgotICogb2JqZWN0IG9yIGFuIGFycmF5LiBUaGUgYGl0
ZXJhdG9yYCBmdW5jdGlvbiBpcyBpbnZva2VkIHdpdGggYGl0ZXJhdG9yKHZhbHVlLCBrZXkpYCwg
d2hlcmUgYHZhbHVlYAotICogaXMgdGhlIHZhbHVlIG9mIGFuIG9iamVjdCBwcm9wZXJ0eSBvciBh
biBhcnJheSBlbGVtZW50IGFuZCBga2V5YCBpcyB0aGUgb2JqZWN0IHByb3BlcnR5IGtleSBvcgot
ICogYXJyYXkgZWxlbWVudCBpbmRleC4gU3BlY2lmeWluZyBhIGBjb250ZXh0YCBmb3IgdGhlIGZ1
bmN0aW9uIGlzIG9wdGlvbmFsLgotICoKLSAqIE5vdGU6IHRoaXMgZnVuY3Rpb24gd2FzIHByZXZp
b3VzbHkga25vd24gYXMgYGFuZ3VsYXIuZm9yZWFjaGAuCi0gKgotICAgPHByZT4KLSAgICAgdmFy
IHZhbHVlcyA9IHtuYW1lOiAnbWlza28nLCBnZW5kZXI6ICdtYWxlJ307Ci0gICAgIHZhciBsb2cg
PSBbXTsKLSAgICAgYW5ndWxhci5mb3JFYWNoKHZhbHVlcywgZnVuY3Rpb24odmFsdWUsIGtleSl7
Ci0gICAgICAgdGhpcy5wdXNoKGtleSArICc6ICcgKyB2YWx1ZSk7Ci0gICAgIH0sIGxvZyk7Ci0g
ICAgIGV4cGVjdChsb2cpLnRvRXF1YWwoWyduYW1lOiBtaXNrbycsICdnZW5kZXI6bWFsZSddKTsK
LSAgIDwvcHJlPgotICoKLSAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogT2JqZWN0IHRvIGl0
ZXJhdGUgb3Zlci4KLSAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdG9yIEl0ZXJhdG9yIGZ1bmN0
aW9uLgotICogQHBhcmFtIHtPYmplY3Q9fSBjb250ZXh0IE9iamVjdCB0byBiZWNvbWUgY29udGV4
dCAoYHRoaXNgKSBmb3IgdGhlIGl0ZXJhdG9yIGZ1bmN0aW9uLgotICogQHJldHVybnMge09iamVj
dHxBcnJheX0gUmVmZXJlbmNlIHRvIGBvYmpgLgotICovCi1mdW5jdGlvbiBmb3JFYWNoKG9iaiwg
aXRlcmF0b3IsIGNvbnRleHQpIHsKLSAgdmFyIGtleTsKLSAgaWYgKG9iaikgewotICAgIGlmIChp
c0Z1bmN0aW9uKG9iaikpewotICAgICAgZm9yIChrZXkgaW4gb2JqKSB7Ci0gICAgICAgIGlmIChr
ZXkgIT0gJ3Byb3RvdHlwZScgJiYga2V5ICE9ICdsZW5ndGgnICYmIGtleSAhPSAnbmFtZScgJiYg
b2JqLmhhc093blByb3BlcnR5KGtleSkpIHsKLSAgICAgICAgICBpdGVyYXRvci5jYWxsKGNvbnRl
eHQsIG9ialtrZXldLCBrZXkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChv
YmouZm9yRWFjaCAmJiBvYmouZm9yRWFjaCAhPT0gZm9yRWFjaCkgewotICAgICAgb2JqLmZvckVh
Y2goaXRlcmF0b3IsIGNvbnRleHQpOwotICAgIH0gZWxzZSBpZiAoaXNBcnJheUxpa2Uob2JqKSkg
ewotICAgICAgZm9yIChrZXkgPSAwOyBrZXkgPCBvYmoubGVuZ3RoOyBrZXkrKykKLSAgICAgICAg
aXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpba2V5XSwga2V5KTsKLSAgICB9IGVsc2UgewotICAg
ICAgZm9yIChrZXkgaW4gb2JqKSB7Ci0gICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5
KSkgewotICAgICAgICAgIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2tleV0sIGtleSk7Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0dXJuIG9iajsKLX0KLQotZnVuY3Rp
b24gc29ydGVkS2V5cyhvYmopIHsKLSAgdmFyIGtleXMgPSBbXTsKLSAgZm9yICh2YXIga2V5IGlu
IG9iaikgewotICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkgewotICAgICAga2V5cy5w
dXNoKGtleSk7Ci0gICAgfQotICB9Ci0gIHJldHVybiBrZXlzLnNvcnQoKTsKLX0KLQotZnVuY3Rp
b24gZm9yRWFjaFNvcnRlZChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7Ci0gIHZhciBrZXlzID0g
c29ydGVkS2V5cyhvYmopOwotICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsr
KSB7Ci0gICAgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpba2V5c1tpXV0sIGtleXNbaV0pOwot
ICB9Ci0gIHJldHVybiBrZXlzOwotfQotCi0KLS8qKgotICogd2hlbiB1c2luZyBmb3JFYWNoIHRo
ZSBwYXJhbXMgYXJlIHZhbHVlLCBrZXksIGJ1dCBpdCBpcyBvZnRlbiB1c2VmdWwgdG8gaGF2ZSBr
ZXksIHZhbHVlLgotICogQHBhcmFtIHtmdW5jdGlvbihzdHJpbmcsICopfSBpdGVyYXRvckZuCi0g
KiBAcmV0dXJucyB7ZnVuY3Rpb24oKiwgc3RyaW5nKX0KLSAqLwotZnVuY3Rpb24gcmV2ZXJzZVBh
cmFtcyhpdGVyYXRvckZuKSB7Ci0gIHJldHVybiBmdW5jdGlvbih2YWx1ZSwga2V5KSB7IGl0ZXJh
dG9yRm4oa2V5LCB2YWx1ZSkgfTsKLX0KLQotLyoqCi0gKiBBIGNvbnNpc3RlbnQgd2F5IG9mIGNy
ZWF0aW5nIHVuaXF1ZSBJRHMgaW4gYW5ndWxhci4gVGhlIElEIGlzIGEgc2VxdWVuY2Ugb2YgYWxw
aGEgbnVtZXJpYwotICogY2hhcmFjdGVycyBzdWNoIGFzICcwMTJBQkMnLiBUaGUgcmVhc29uIHdo
eSB3ZSBhcmUgbm90IHVzaW5nIHNpbXBseSBhIG51bWJlciBjb3VudGVyIGlzIHRoYXQKLSAqIHRo
ZSBudW1iZXIgc3RyaW5nIGdldHMgbG9uZ2VyIG92ZXIgdGltZSwgYW5kIGl0IGNhbiBhbHNvIG92
ZXJmbG93LCB3aGVyZSBhcyB0aGUgbmV4dElkCi0gKiB3aWxsIGdyb3cgbXVjaCBzbG93ZXIsIGl0
IGlzIGEgc3RyaW5nLCBhbmQgaXQgd2lsbCBuZXZlciBvdmVyZmxvdy4KLSAqCi0gKiBAcmV0dXJu
cyBhbiB1bmlxdWUgYWxwaGEtbnVtZXJpYyBzdHJpbmcKLSAqLwotZnVuY3Rpb24gbmV4dFVpZCgp
IHsKLSAgdmFyIGluZGV4ID0gdWlkLmxlbmd0aDsKLSAgdmFyIGRpZ2l0OwotCi0gIHdoaWxlKGlu
ZGV4KSB7Ci0gICAgaW5kZXgtLTsKLSAgICBkaWdpdCA9IHVpZFtpbmRleF0uY2hhckNvZGVBdCgw
KTsKLSAgICBpZiAoZGlnaXQgPT0gNTcgLyonOScqLykgewotICAgICAgdWlkW2luZGV4XSA9ICdB
JzsKLSAgICAgIHJldHVybiB1aWQuam9pbignJyk7Ci0gICAgfQotICAgIGlmIChkaWdpdCA9PSA5
MCAgLyonWicqLykgewotICAgICAgdWlkW2luZGV4XSA9ICcwJzsKLSAgICB9IGVsc2UgewotICAg
ICAgdWlkW2luZGV4XSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZGlnaXQgKyAxKTsKLSAgICAgIHJl
dHVybiB1aWQuam9pbignJyk7Ci0gICAgfQotICB9Ci0gIHVpZC51bnNoaWZ0KCcwJyk7Ci0gIHJl
dHVybiB1aWQuam9pbignJyk7Ci19Ci0KLQotLyoqCi0gKiBTZXQgb3IgY2xlYXIgdGhlIGhhc2hr
ZXkgZm9yIGFuIG9iamVjdC4KLSAqIEBwYXJhbSBvYmogb2JqZWN0IAotICogQHBhcmFtIGggdGhl
IGhhc2hrZXkgKCF0cnV0aHkgdG8gZGVsZXRlIHRoZSBoYXNoa2V5KQotICovCi1mdW5jdGlvbiBz
ZXRIYXNoS2V5KG9iaiwgaCkgewotICBpZiAoaCkgewotICAgIG9iai4kJGhhc2hLZXkgPSBoOwot
ICB9Ci0gIGVsc2UgewotICAgIGRlbGV0ZSBvYmouJCRoYXNoS2V5OwotICB9Ci19Ci0KLS8qKgot
ICogQG5nZG9jIGZ1bmN0aW9uCi0gKiBAbmFtZSBhbmd1bGFyLmV4dGVuZAotICogQGZ1bmN0aW9u
Ci0gKgotICogQGRlc2NyaXB0aW9uCi0gKiBFeHRlbmRzIHRoZSBkZXN0aW5hdGlvbiBvYmplY3Qg
YGRzdGAgYnkgY29weWluZyBhbGwgb2YgdGhlIHByb3BlcnRpZXMgZnJvbSB0aGUgYHNyY2Agb2Jq
ZWN0KHMpCi0gKiB0byBgZHN0YC4gWW91IGNhbiBzcGVjaWZ5IG11bHRpcGxlIGBzcmNgIG9iamVj
dHMuCi0gKgotICogQHBhcmFtIHtPYmplY3R9IGRzdCBEZXN0aW5hdGlvbiBvYmplY3QuCi0gKiBA
cGFyYW0gey4uLk9iamVjdH0gc3JjIFNvdXJjZSBvYmplY3QocykuCi0gKiBAcmV0dXJucyB7T2Jq
ZWN0fSBSZWZlcmVuY2UgdG8gYGRzdGAuCi0gKi8KLWZ1bmN0aW9uIGV4dGVuZChkc3QpIHsKLSAg
dmFyIGggPSBkc3QuJCRoYXNoS2V5OwotICBmb3JFYWNoKGFyZ3VtZW50cywgZnVuY3Rpb24ob2Jq
KXsKLSAgICBpZiAob2JqICE9PSBkc3QpIHsKLSAgICAgIGZvckVhY2gob2JqLCBmdW5jdGlvbih2
YWx1ZSwga2V5KXsKLSAgICAgICAgZHN0W2tleV0gPSB2YWx1ZTsKLSAgICAgIH0pOwotICAgIH0K
LSAgfSk7Ci0KLSAgc2V0SGFzaEtleShkc3QsaCk7Ci0gIHJldHVybiBkc3Q7Ci19Ci0KLWZ1bmN0
aW9uIGludChzdHIpIHsKLSAgcmV0dXJuIHBhcnNlSW50KHN0ciwgMTApOwotfQotCi0KLWZ1bmN0
aW9uIGluaGVyaXQocGFyZW50LCBleHRyYSkgewotICByZXR1cm4gZXh0ZW5kKG5ldyAoZXh0ZW5k
KGZ1bmN0aW9uKCkge30sIHtwcm90b3R5cGU6cGFyZW50fSkpKCksIGV4dHJhKTsKLX0KLQotCi0v
KioKLSAqIEBuZ2RvYyBmdW5jdGlvbgotICogQG5hbWUgYW5ndWxhci5ub29wCi0gKiBAZnVuY3Rp
b24KLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIEEgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBubyBv
cGVyYXRpb25zLiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VmdWwgd2hlbiB3cml0aW5nIGNvZGUg
aW4gdGhlCi0gKiBmdW5jdGlvbmFsIHN0eWxlLgotICAgPHByZT4KLSAgICAgZnVuY3Rpb24gZm9v
KGNhbGxiYWNrKSB7Ci0gICAgICAgdmFyIHJlc3VsdCA9IGNhbGN1bGF0ZVJlc3VsdCgpOwotICAg
ICAgIChjYWxsYmFjayB8fCBhbmd1bGFyLm5vb3ApKHJlc3VsdCk7Ci0gICAgIH0KLSAgIDwvcHJl
PgotICovCi1mdW5jdGlvbiBub29wKCkge30KLW5vb3AuJGluamVjdCA9IFtdOwotCi0KLS8qKgot
ICogQG5nZG9jIGZ1bmN0aW9uCi0gKiBAbmFtZSBhbmd1bGFyLmlkZW50aXR5Ci0gKiBAZnVuY3Rp
b24KLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGl0cyBm
aXJzdCBhcmd1bWVudC4gVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgd2hlbiB3cml0aW5nIGNvZGUg
aW4gdGhlCi0gKiBmdW5jdGlvbmFsIHN0eWxlLgotICoKLSAgIDxwcmU+Ci0gICAgIGZ1bmN0aW9u
IHRyYW5zZm9ybWVyKHRyYW5zZm9ybWF0aW9uRm4sIHZhbHVlKSB7Ci0gICAgICAgcmV0dXJuICh0
cmFuc2Zvcm1hdGlvbkZuIHx8IGlkZW50aXR5KSh2YWx1ZSk7Ci0gICAgIH07Ci0gICA8L3ByZT4K
LSAqLwotZnVuY3Rpb24gaWRlbnRpdHkoJCkge3JldHVybiAkO30KLWlkZW50aXR5LiRpbmplY3Qg
PSBbXTsKLQotCi1mdW5jdGlvbiB2YWx1ZUZuKHZhbHVlKSB7cmV0dXJuIGZ1bmN0aW9uKCkge3Jl
dHVybiB2YWx1ZTt9O30KLQotLyoqCi0gKiBAbmdkb2MgZnVuY3Rpb24KLSAqIEBuYW1lIGFuZ3Vs
YXIuaXNVbmRlZmluZWQKLSAqIEBmdW5jdGlvbgotICoKLSAqIEBkZXNjcmlwdGlvbgotICogRGV0
ZXJtaW5lcyBpZiBhIHJlZmVyZW5jZSBpcyB1bmRlZmluZWQuCi0gKgotICogQHBhcmFtIHsqfSB2
YWx1ZSBSZWZlcmVuY2UgdG8gY2hlY2suCi0gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBg
dmFsdWVgIGlzIHVuZGVmaW5lZC4KLSAqLwotZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsdWUpe3Jl
dHVybiB0eXBlb2YgdmFsdWUgPT0gJ3VuZGVmaW5lZCc7fQotCi0KLS8qKgotICogQG5nZG9jIGZ1
bmN0aW9uCi0gKiBAbmFtZSBhbmd1bGFyLmlzRGVmaW5lZAotICogQGZ1bmN0aW9uCi0gKgotICog
QGRlc2NyaXB0aW9uCi0gKiBEZXRlcm1pbmVzIGlmIGEgcmVmZXJlbmNlIGlzIGRlZmluZWQuCi0g
KgotICogQHBhcmFtIHsqfSB2YWx1ZSBSZWZlcmVuY2UgdG8gY2hlY2suCi0gKiBAcmV0dXJucyB7
Ym9vbGVhbn0gVHJ1ZSBpZiBgdmFsdWVgIGlzIGRlZmluZWQuCi0gKi8KLWZ1bmN0aW9uIGlzRGVm
aW5lZCh2YWx1ZSl7cmV0dXJuIHR5cGVvZiB2YWx1ZSAhPSAndW5kZWZpbmVkJzt9Ci0KLQotLyoq
Ci0gKiBAbmdkb2MgZnVuY3Rpb24KLSAqIEBuYW1lIGFuZ3VsYXIuaXNPYmplY3QKLSAqIEBmdW5j
dGlvbgotICoKLSAqIEBkZXNjcmlwdGlvbgotICogRGV0ZXJtaW5lcyBpZiBhIHJlZmVyZW5jZSBp
cyBhbiBgT2JqZWN0YC4gVW5saWtlIGB0eXBlb2ZgIGluIEphdmFTY3JpcHQsIGBudWxsYHMgYXJl
IG5vdAotICogY29uc2lkZXJlZCB0byBiZSBvYmplY3RzLgotICoKLSAqIEBwYXJhbSB7Kn0gdmFs
dWUgUmVmZXJlbmNlIHRvIGNoZWNrLgotICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYHZh
bHVlYCBpcyBhbiBgT2JqZWN0YCBidXQgbm90IGBudWxsYC4KLSAqLwotZnVuY3Rpb24gaXNPYmpl
Y3QodmFsdWUpe3JldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0
Jzt9Ci0KLQotLyoqCi0gKiBAbmdkb2MgZnVuY3Rpb24KLSAqIEBuYW1lIGFuZ3VsYXIuaXNTdHJp
bmcKLSAqIEBmdW5jdGlvbgotICoKLSAqIEBkZXNjcmlwdGlvbgotICogRGV0ZXJtaW5lcyBpZiBh
IHJlZmVyZW5jZSBpcyBhIGBTdHJpbmdgLgotICoKLSAqIEBwYXJhbSB7Kn0gdmFsdWUgUmVmZXJl
bmNlIHRvIGNoZWNrLgotICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYHZhbHVlYCBpcyBh
IGBTdHJpbmdgLgotICovCi1mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSl7cmV0dXJuIHR5cGVvZiB2
YWx1ZSA9PSAnc3RyaW5nJzt9Ci0KLQotLyoqCi0gKiBAbmdkb2MgZnVuY3Rpb24KLSAqIEBuYW1l
IGFuZ3VsYXIuaXNOdW1iZXIKLSAqIEBmdW5jdGlvbgotICoKLSAqIEBkZXNjcmlwdGlvbgotICog
RGV0ZXJtaW5lcyBpZiBhIHJlZmVyZW5jZSBpcyBhIGBOdW1iZXJgLgotICoKLSAqIEBwYXJhbSB7
Kn0gdmFsdWUgUmVmZXJlbmNlIHRvIGNoZWNrLgotICogQHJldHVybnMge2Jvb2xlYW59IFRydWUg
aWYgYHZhbHVlYCBpcyBhIGBOdW1iZXJgLgotICovCi1mdW5jdGlvbiBpc051bWJlcih2YWx1ZSl7
cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJzt9Ci0KLQotLyoqCi0gKiBAbmdkb2MgZnVu
Y3Rpb24KLSAqIEBuYW1lIGFuZ3VsYXIuaXNEYXRlCi0gKiBAZnVuY3Rpb24KLSAqCi0gKiBAZGVz
Y3JpcHRpb24KLSAqIERldGVybWluZXMgaWYgYSB2YWx1ZSBpcyBhIGRhdGUuCi0gKgotICogQHBh
cmFtIHsqfSB2YWx1ZSBSZWZlcmVuY2UgdG8gY2hlY2suCi0gKiBAcmV0dXJucyB7Ym9vbGVhbn0g
VHJ1ZSBpZiBgdmFsdWVgIGlzIGEgYERhdGVgLgotICovCi1mdW5jdGlvbiBpc0RhdGUodmFsdWUp
ewotICByZXR1cm4gdG9TdHJpbmcuYXBwbHkodmFsdWUpID09ICdbb2JqZWN0IERhdGVdJzsKLX0K
LQotCi0vKioKLSAqIEBuZ2RvYyBmdW5jdGlvbgotICogQG5hbWUgYW5ndWxhci5pc0FycmF5Ci0g
KiBAZnVuY3Rpb24KLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIERldGVybWluZXMgaWYgYSByZWZl
cmVuY2UgaXMgYW4gYEFycmF5YC4KLSAqCi0gKiBAcGFyYW0geyp9IHZhbHVlIFJlZmVyZW5jZSB0
byBjaGVjay4KLSAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGB2YWx1ZWAgaXMgYW4gYEFy
cmF5YC4KLSAqLwotZnVuY3Rpb24gaXNBcnJheSh2YWx1ZSkgewotICByZXR1cm4gdG9TdHJpbmcu
YXBwbHkodmFsdWUpID09ICdbb2JqZWN0IEFycmF5XSc7Ci19Ci0KLQotLyoqCi0gKiBAbmdkb2Mg
ZnVuY3Rpb24KLSAqIEBuYW1lIGFuZ3VsYXIuaXNGdW5jdGlvbgotICogQGZ1bmN0aW9uCi0gKgot
ICogQGRlc2NyaXB0aW9uCi0gKiBEZXRlcm1pbmVzIGlmIGEgcmVmZXJlbmNlIGlzIGEgYEZ1bmN0
aW9uYC4KLSAqCi0gKiBAcGFyYW0geyp9IHZhbHVlIFJlZmVyZW5jZSB0byBjaGVjay4KLSAqIEBy
ZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGB2YWx1ZWAgaXMgYSBgRnVuY3Rpb25gLgotICovCi1m
dW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKXtyZXR1cm4gdHlwZW9mIHZhbHVlID09ICdmdW5jdGlv
bic7fQotCi0KLS8qKgotICogQ2hlY2tzIGlmIGBvYmpgIGlzIGEgd2luZG93IG9iamVjdC4KLSAq
Ci0gKiBAcHJpdmF0ZQotICogQHBhcmFtIHsqfSBvYmogT2JqZWN0IHRvIGNoZWNrCi0gKiBAcmV0
dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBgb2JqYCBpcyBhIHdpbmRvdyBvYmouCi0gKi8KLWZ1bmN0
aW9uIGlzV2luZG93KG9iaikgewotICByZXR1cm4gb2JqICYmIG9iai5kb2N1bWVudCAmJiBvYmou
bG9jYXRpb24gJiYgb2JqLmFsZXJ0ICYmIG9iai5zZXRJbnRlcnZhbDsKLX0KLQotCi1mdW5jdGlv
biBpc1Njb3BlKG9iaikgewotICByZXR1cm4gb2JqICYmIG9iai4kZXZhbEFzeW5jICYmIG9iai4k
d2F0Y2g7Ci19Ci0KLQotZnVuY3Rpb24gaXNGaWxlKG9iaikgewotICByZXR1cm4gdG9TdHJpbmcu
YXBwbHkob2JqKSA9PT0gJ1tvYmplY3QgRmlsZV0nOwotfQotCi0KLWZ1bmN0aW9uIGlzQm9vbGVh
bih2YWx1ZSkgewotICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdib29sZWFuJzsKLX0KLQotCi1m
dW5jdGlvbiB0cmltKHZhbHVlKSB7Ci0gIHJldHVybiBpc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZS5y
ZXBsYWNlKC9eXHMqLywgJycpLnJlcGxhY2UoL1xzKiQvLCAnJykgOiB2YWx1ZTsKLX0KLQotLyoq
Ci0gKiBAbmdkb2MgZnVuY3Rpb24KLSAqIEBuYW1lIGFuZ3VsYXIuaXNFbGVtZW50Ci0gKiBAZnVu
Y3Rpb24KLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIERldGVybWluZXMgaWYgYSByZWZlcmVuY2Ug
aXMgYSBET00gZWxlbWVudCAob3Igd3JhcHBlZCBqUXVlcnkgZWxlbWVudCkuCi0gKgotICogQHBh
cmFtIHsqfSB2YWx1ZSBSZWZlcmVuY2UgdG8gY2hlY2suCi0gKiBAcmV0dXJucyB7Ym9vbGVhbn0g
VHJ1ZSBpZiBgdmFsdWVgIGlzIGEgRE9NIGVsZW1lbnQgKG9yIHdyYXBwZWQgalF1ZXJ5IGVsZW1l
bnQpLgotICovCi1mdW5jdGlvbiBpc0VsZW1lbnQobm9kZSkgewotICByZXR1cm4gbm9kZSAmJgot
ICAgIChub2RlLm5vZGVOYW1lICAvLyB3ZSBhcmUgYSBkaXJlY3QgZWxlbWVudAotICAgIHx8IChu
b2RlLmJpbmQgJiYgbm9kZS5maW5kKSk7ICAvLyB3ZSBoYXZlIGEgYmluZCBhbmQgZmluZCBtZXRo
b2QgcGFydCBvZiBqUXVlcnkgQVBJCi19Ci0KLS8qKgotICogQHBhcmFtIHN0ciAna2V5MSxrZXky
LC4uLicKLSAqIEByZXR1cm5zIHtvYmplY3R9IGluIHRoZSBmb3JtIG9mIHtrZXkxOnRydWUsIGtl
eTI6dHJ1ZSwgLi4ufQotICovCi1mdW5jdGlvbiBtYWtlTWFwKHN0cil7Ci0gIHZhciBvYmogPSB7
fSwgaXRlbXMgPSBzdHIuc3BsaXQoIiwiKSwgaTsKLSAgZm9yICggaSA9IDA7IGkgPCBpdGVtcy5s
ZW5ndGg7IGkrKyApCi0gICAgb2JqWyBpdGVtc1tpXSBdID0gdHJ1ZTsKLSAgcmV0dXJuIG9iajsK
LX0KLQotCi1pZiAobXNpZSA8IDkpIHsKLSAgbm9kZU5hbWVfID0gZnVuY3Rpb24oZWxlbWVudCkg
ewotICAgIGVsZW1lbnQgPSBlbGVtZW50Lm5vZGVOYW1lID8gZWxlbWVudCA6IGVsZW1lbnRbMF07
Ci0gICAgcmV0dXJuIChlbGVtZW50LnNjb3BlTmFtZSAmJiBlbGVtZW50LnNjb3BlTmFtZSAhPSAn
SFRNTCcpCi0gICAgICA/IHVwcGVyY2FzZShlbGVtZW50LnNjb3BlTmFtZSArICc6JyArIGVsZW1l
bnQubm9kZU5hbWUpIDogZWxlbWVudC5ub2RlTmFtZTsKLSAgfTsKLX0gZWxzZSB7Ci0gIG5vZGVO
YW1lXyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICByZXR1cm4gZWxlbWVudC5ub2RlTmFtZSA/
IGVsZW1lbnQubm9kZU5hbWUgOiBlbGVtZW50WzBdLm5vZGVOYW1lOwotICB9OwotfQotCi0KLWZ1
bmN0aW9uIG1hcChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7Ci0gIHZhciByZXN1bHRzID0gW107
Ci0gIGZvckVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHsKLSAgICByZXN1
bHRzLnB1c2goaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QpKTsKLSAg
fSk7Ci0gIHJldHVybiByZXN1bHRzOwotfQotCi0KLS8qKgotICogQGRlc2NyaXB0aW9uCi0gKiBE
ZXRlcm1pbmVzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYW4gYXJyYXksIHRoZSBudW1iZXIg
b2YgcHJvcGVydGllcyBhbiBvYmplY3QgaGFzLCBvcgotICogdGhlIGxlbmd0aCBvZiBhIHN0cmlu
Zy4KLSAqCi0gKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gYXVnbWVudCB0aGUgT2Jq
ZWN0IHR5cGUgaW4gQW5ndWxhciBleHByZXNzaW9ucy4gU2VlCi0gKiB7QGxpbmsgYW5ndWxhci5P
YmplY3R9IGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEFuZ3VsYXIgYXJyYXlzLgotICoKLSAq
IEBwYXJhbSB7T2JqZWN0fEFycmF5fHN0cmluZ30gb2JqIE9iamVjdCwgYXJyYXksIG9yIHN0cmlu
ZyB0byBpbnNwZWN0LgotICogQHBhcmFtIHtib29sZWFufSBbb3duUHJvcHNPbmx5PWZhbHNlXSBD
b3VudCBvbmx5ICJvd24iIHByb3BlcnRpZXMgaW4gYW4gb2JqZWN0Ci0gKiBAcmV0dXJucyB7bnVt
YmVyfSBUaGUgc2l6ZSBvZiBgb2JqYCBvciBgMGAgaWYgYG9iamAgaXMgbmVpdGhlciBhbiBvYmpl
Y3Qgbm9yIGFuIGFycmF5LgotICovCi1mdW5jdGlvbiBzaXplKG9iaiwgb3duUHJvcHNPbmx5KSB7
Ci0gIHZhciBzaXplID0gMCwga2V5OwotCi0gIGlmIChpc0FycmF5KG9iaikgfHwgaXNTdHJpbmco
b2JqKSkgewotICAgIHJldHVybiBvYmoubGVuZ3RoOwotICB9IGVsc2UgaWYgKGlzT2JqZWN0KG9i
aikpewotICAgIGZvciAoa2V5IGluIG9iaikKLSAgICAgIGlmICghb3duUHJvcHNPbmx5IHx8IG9i
ai5oYXNPd25Qcm9wZXJ0eShrZXkpKQotICAgICAgICBzaXplKys7Ci0gIH0KLQotICByZXR1cm4g
c2l6ZTsKLX0KLQotCi1mdW5jdGlvbiBpbmNsdWRlcyhhcnJheSwgb2JqKSB7Ci0gIHJldHVybiBp
bmRleE9mKGFycmF5LCBvYmopICE9IC0xOwotfQotCi1mdW5jdGlvbiBpbmRleE9mKGFycmF5LCBv
YmopIHsKLSAgaWYgKGFycmF5LmluZGV4T2YpIHJldHVybiBhcnJheS5pbmRleE9mKG9iaik7Ci0K
LSAgZm9yICggdmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKLSAgICBpZiAob2Jq
ID09PSBhcnJheVtpXSkgcmV0dXJuIGk7Ci0gIH0KLSAgcmV0dXJuIC0xOwotfQotCi1mdW5jdGlv
biBhcnJheVJlbW92ZShhcnJheSwgdmFsdWUpIHsKLSAgdmFyIGluZGV4ID0gaW5kZXhPZihhcnJh
eSwgdmFsdWUpOwotICBpZiAoaW5kZXggPj0wKQotICAgIGFycmF5LnNwbGljZShpbmRleCwgMSk7
Ci0gIHJldHVybiB2YWx1ZTsKLX0KLQotZnVuY3Rpb24gaXNMZWFmTm9kZSAobm9kZSkgewotICBp
ZiAobm9kZSkgewotICAgIHN3aXRjaCAobm9kZS5ub2RlTmFtZSkgewotICAgIGNhc2UgIk9QVElP
TiI6Ci0gICAgY2FzZSAiUFJFIjoKLSAgICBjYXNlICJUSVRMRSI6Ci0gICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIGZhbHNlOwotfQotCi0vKioKLSAqIEBuZ2RvYyBmdW5j
dGlvbgotICogQG5hbWUgYW5ndWxhci5jb3B5Ci0gKiBAZnVuY3Rpb24KLSAqCi0gKiBAZGVzY3Jp
cHRpb24KLSAqIENyZWF0ZXMgYSBkZWVwIGNvcHkgb2YgYHNvdXJjZWAsIHdoaWNoIHNob3VsZCBi
ZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXkuCi0gKgotICogKiBJZiBubyBkZXN0aW5hdGlvbiBpcyBz
dXBwbGllZCwgYSBjb3B5IG9mIHRoZSBvYmplY3Qgb3IgYXJyYXkgaXMgY3JlYXRlZC4KLSAqICog
SWYgYSBkZXN0aW5hdGlvbiBpcyBwcm92aWRlZCwgYWxsIG9mIGl0cyBlbGVtZW50cyAoZm9yIGFy
cmF5KSBvciBwcm9wZXJ0aWVzIChmb3Igb2JqZWN0cykKLSAqICAgYXJlIGRlbGV0ZWQgYW5kIHRo
ZW4gYWxsIGVsZW1lbnRzL3Byb3BlcnRpZXMgZnJvbSB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8g
aXQuCi0gKiAqIElmICBgc291cmNlYCBpcyBub3QgYW4gb2JqZWN0IG9yIGFycmF5LCBgc291cmNl
YCBpcyByZXR1cm5lZC4KLSAqCi0gKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gYXVn
bWVudCB0aGUgT2JqZWN0IHR5cGUgaW4gQW5ndWxhciBleHByZXNzaW9ucy4gU2VlCi0gKiB7QGxp
bmsgbmcuJGZpbHRlcn0gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgQW5ndWxhciBhcnJheXMu
Ci0gKgotICogQHBhcmFtIHsqfSBzb3VyY2UgVGhlIHNvdXJjZSB0aGF0IHdpbGwgYmUgdXNlZCB0
byBtYWtlIGEgY29weS4KLSAqICAgICAgICAgICAgICAgICAgIENhbiBiZSBhbnkgdHlwZSwgaW5j
bHVkaW5nIHByaW1pdGl2ZXMsIGBudWxsYCwgYW5kIGB1bmRlZmluZWRgLgotICogQHBhcmFtIHso
T2JqZWN0fEFycmF5KT19IGRlc3RpbmF0aW9uIERlc3RpbmF0aW9uIGludG8gd2hpY2ggdGhlIHNv
dXJjZSBpcyBjb3BpZWQuIElmCi0gKiAgICAgcHJvdmlkZWQsIG11c3QgYmUgb2YgdGhlIHNhbWUg
dHlwZSBhcyBgc291cmNlYC4KLSAqIEByZXR1cm5zIHsqfSBUaGUgY29weSBvciB1cGRhdGVkIGBk
ZXN0aW5hdGlvbmAsIGlmIGBkZXN0aW5hdGlvbmAgd2FzIHNwZWNpZmllZC4KLSAqLwotZnVuY3Rp
b24gY29weShzb3VyY2UsIGRlc3RpbmF0aW9uKXsKLSAgaWYgKGlzV2luZG93KHNvdXJjZSkgfHwg
aXNTY29wZShzb3VyY2UpKSB0aHJvdyBFcnJvcigiQ2FuJ3QgY29weSBXaW5kb3cgb3IgU2NvcGUi
KTsKLSAgaWYgKCFkZXN0aW5hdGlvbikgewotICAgIGRlc3RpbmF0aW9uID0gc291cmNlOwotICAg
IGlmIChzb3VyY2UpIHsKLSAgICAgIGlmIChpc0FycmF5KHNvdXJjZSkpIHsKLSAgICAgICAgZGVz
dGluYXRpb24gPSBjb3B5KHNvdXJjZSwgW10pOwotICAgICAgfSBlbHNlIGlmIChpc0RhdGUoc291
cmNlKSkgewotICAgICAgICBkZXN0aW5hdGlvbiA9IG5ldyBEYXRlKHNvdXJjZS5nZXRUaW1lKCkp
OwotICAgICAgfSBlbHNlIGlmIChpc09iamVjdChzb3VyY2UpKSB7Ci0gICAgICAgIGRlc3RpbmF0
aW9uID0gY29weShzb3VyY2UsIHt9KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAg
aWYgKHNvdXJjZSA9PT0gZGVzdGluYXRpb24pIHRocm93IEVycm9yKCJDYW4ndCBjb3B5IGVxdWl2
YWxlbnQgb2JqZWN0cyBvciBhcnJheXMiKTsKLSAgICBpZiAoaXNBcnJheShzb3VyY2UpKSB7Ci0g
ICAgICBkZXN0aW5hdGlvbi5sZW5ndGggPSAwOwotICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwg
c291cmNlLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uLnB1c2goY29weShzb3Vy
Y2VbaV0pKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgdmFyIGggPSBkZXN0aW5hdGlv
bi4kJGhhc2hLZXk7Ci0gICAgICBmb3JFYWNoKGRlc3RpbmF0aW9uLCBmdW5jdGlvbih2YWx1ZSwg
a2V5KXsKLSAgICAgICAgZGVsZXRlIGRlc3RpbmF0aW9uW2tleV07Ci0gICAgICB9KTsKLSAgICAg
IGZvciAoIHZhciBrZXkgaW4gc291cmNlKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uW2tleV0gPSBj
b3B5KHNvdXJjZVtrZXldKTsKLSAgICAgIH0KLSAgICAgIHNldEhhc2hLZXkoZGVzdGluYXRpb24s
aCk7Ci0gICAgfQotICB9Ci0gIHJldHVybiBkZXN0aW5hdGlvbjsKLX0KLQotLyoqCi0gKiBDcmVh
dGUgYSBzaGFsbG93IGNvcHkgb2YgYW4gb2JqZWN0Ci0gKi8KLWZ1bmN0aW9uIHNoYWxsb3dDb3B5
KHNyYywgZHN0KSB7Ci0gIGRzdCA9IGRzdCB8fCB7fTsKLQotICBmb3IodmFyIGtleSBpbiBzcmMp
IHsKLSAgICBpZiAoc3JjLmhhc093blByb3BlcnR5KGtleSkgJiYga2V5LnN1YnN0cigwLCAyKSAh
PT0gJyQkJykgewotICAgICAgZHN0W2tleV0gPSBzcmNba2V5XTsKLSAgICB9Ci0gIH0KLQotICBy
ZXR1cm4gZHN0OwotfQotCi0KLS8qKgotICogQG5nZG9jIGZ1bmN0aW9uCi0gKiBAbmFtZSBhbmd1
bGFyLmVxdWFscwotICogQGZ1bmN0aW9uCi0gKgotICogQGRlc2NyaXB0aW9uCi0gKiBEZXRlcm1p
bmVzIGlmIHR3byBvYmplY3RzIG9yIHR3byB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQuIFN1cHBvcnRz
IHZhbHVlIHR5cGVzLCBhcnJheXMgYW5kCi0gKiBvYmplY3RzLgotICoKLSAqIFR3byBvYmplY3Rz
IG9yIHZhbHVlcyBhcmUgY29uc2lkZXJlZCBlcXVpdmFsZW50IGlmIGF0IGxlYXN0IG9uZSBvZiB0
aGUgZm9sbG93aW5nIGlzIHRydWU6Ci0gKgotICogKiBCb3RoIG9iamVjdHMgb3IgdmFsdWVzIHBh
c3MgYD09PWAgY29tcGFyaXNvbi4KLSAqICogQm90aCBvYmplY3RzIG9yIHZhbHVlcyBhcmUgb2Yg
dGhlIHNhbWUgdHlwZSBhbmQgYWxsIG9mIHRoZWlyIHByb3BlcnRpZXMgcGFzcyBgPT09YCBjb21w
YXJpc29uLgotICogKiBCb3RoIHZhbHVlcyBhcmUgTmFOLiAoSW4gSmF2YXNTY3JpcHQsIE5hTiA9
PSBOYU4gPT4gZmFsc2UuIEJ1dCB3ZSBjb25zaWRlciB0d28gTmFOIGFzIGVxdWFsKQotICoKLSAq
IER1cmluZyBhIHByb3BlcnR5IGNvbXBhcmlzaW9uLCBwcm9wZXJ0aWVzIG9mIGBmdW5jdGlvbmAg
dHlwZSBhbmQgcHJvcGVydGllcyB3aXRoIG5hbWVzCi0gKiB0aGF0IGJlZ2luIHdpdGggYCRgIGFy
ZSBpZ25vcmVkLgotICoKLSAqIFNjb3BlIGFuZCBET01XaW5kb3cgb2JqZWN0cyBhcmUgYmVpbmcg
Y29tcGFyZWQgb25seSBieSBpZGVudGlmeSAoYD09PWApLgotICoKLSAqIEBwYXJhbSB7Kn0gbzEg
T2JqZWN0IG9yIHZhbHVlIHRvIGNvbXBhcmUuCi0gKiBAcGFyYW0geyp9IG8yIE9iamVjdCBvciB2
YWx1ZSB0byBjb21wYXJlLgotICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYXJndW1lbnRz
IGFyZSBlcXVhbC4KLSAqLwotZnVuY3Rpb24gZXF1YWxzKG8xLCBvMikgewotICBpZiAobzEgPT09
IG8yKSByZXR1cm4gdHJ1ZTsKLSAgaWYgKG8xID09PSBudWxsIHx8IG8yID09PSBudWxsKSByZXR1
cm4gZmFsc2U7Ci0gIGlmIChvMSAhPT0gbzEgJiYgbzIgIT09IG8yKSByZXR1cm4gdHJ1ZTsgLy8g
TmFOID09PSBOYU4KLSAgdmFyIHQxID0gdHlwZW9mIG8xLCB0MiA9IHR5cGVvZiBvMiwgbGVuZ3Ro
LCBrZXksIGtleVNldDsKLSAgaWYgKHQxID09IHQyKSB7Ci0gICAgaWYgKHQxID09ICdvYmplY3Qn
KSB7Ci0gICAgICBpZiAoaXNBcnJheShvMSkpIHsKLSAgICAgICAgaWYgKChsZW5ndGggPSBvMS5s
ZW5ndGgpID09IG8yLmxlbmd0aCkgewotICAgICAgICAgIGZvcihrZXk9MDsga2V5PGxlbmd0aDsg
a2V5KyspIHsKLSAgICAgICAgICAgIGlmICghZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKSByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0gICAgICB9IGVsc2UgaWYgKGlzRGF0ZShvMSkpIHsKLSAgICAgICAgcmV0dXJuIGlzRGF0ZShv
MikgJiYgbzEuZ2V0VGltZSgpID09IG8yLmdldFRpbWUoKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGlmIChpc1Njb3BlKG8xKSB8fCBpc1Njb3BlKG8yKSB8fCBpc1dpbmRvdyhvMSkgfHwgaXNX
aW5kb3cobzIpKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGtleVNldCA9IHt9OwotICAgICAgICBm
b3Ioa2V5IGluIG8xKSB7Ci0gICAgICAgICAgaWYgKGtleS5jaGFyQXQoMCkgPT09ICckJyB8fCBp
c0Z1bmN0aW9uKG8xW2tleV0pKSBjb250aW51ZTsKLSAgICAgICAgICBpZiAoIWVxdWFscyhvMVtr
ZXldLCBvMltrZXldKSkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGtleVNldFtrZXldID0gdHJ1
ZTsKLSAgICAgICAgfQotICAgICAgICBmb3Ioa2V5IGluIG8yKSB7Ci0gICAgICAgICAgaWYgKCFr
ZXlTZXRba2V5XSAmJgotICAgICAgICAgICAgICBrZXkuY2hhckF0KDApICE9PSAnJCcgJiYKLSAg
ICAgICAgICAgICAgbzJba2V5XSAhPT0gdW5kZWZpbmVkICYmCi0gICAgICAgICAgICAgICFpc0Z1
bmN0aW9uKG8yW2tleV0pKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotCi1mdW5j
dGlvbiBjb25jYXQoYXJyYXkxLCBhcnJheTIsIGluZGV4KSB7Ci0gIHJldHVybiBhcnJheTEuY29u
Y2F0KHNsaWNlLmNhbGwoYXJyYXkyLCBpbmRleCkpOwotfQotCi1mdW5jdGlvbiBzbGljZUFyZ3Mo
YXJncywgc3RhcnRJbmRleCkgewotICByZXR1cm4gc2xpY2UuY2FsbChhcmdzLCBzdGFydEluZGV4
IHx8IDApOwotfQotCi0KLS8qKgotICogQG5nZG9jIGZ1bmN0aW9uCi0gKiBAbmFtZSBhbmd1bGFy
LmJpbmQKLSAqIEBmdW5jdGlvbgotICoKLSAqIEBkZXNjcmlwdGlvbgotICogUmV0dXJucyBhIGZ1
bmN0aW9uIHdoaWNoIGNhbGxzIGZ1bmN0aW9uIGBmbmAgYm91bmQgdG8gYHNlbGZgIChgc2VsZmAg
YmVjb21lcyB0aGUgYHRoaXNgIGZvcgotICogYGZuYCkuIFlvdSBjYW4gc3VwcGx5IG9wdGlvbmFs
IGBhcmdzYCB0aGF0IGFyZSBwcmVib3VuZCB0byB0aGUgZnVuY3Rpb24uIFRoaXMgZmVhdHVyZSBp
cyBhbHNvCi0gKiBrbm93biBhcyBbZnVuY3Rpb24gY3VycnlpbmddKGh0dHA6Ly9lbi53aWtpcGVk
aWEub3JnL3dpa2kvQ3VycnlpbmcpLgotICoKLSAqIEBwYXJhbSB7T2JqZWN0fSBzZWxmIENvbnRl
eHQgd2hpY2ggYGZuYCBzaG91bGQgYmUgZXZhbHVhdGVkIGluLgotICogQHBhcmFtIHtmdW5jdGlv
bigpfSBmbiBGdW5jdGlvbiB0byBiZSBib3VuZC4KLSAqIEBwYXJhbSB7Li4uKn0gYXJncyBPcHRp
b25hbCBhcmd1bWVudHMgdG8gYmUgcHJlYm91bmQgdG8gdGhlIGBmbmAgZnVuY3Rpb24gY2FsbC4K
LSAqIEByZXR1cm5zIHtmdW5jdGlvbigpfSBGdW5jdGlvbiB0aGF0IHdyYXBzIHRoZSBgZm5gIHdp
dGggYWxsIHRoZSBzcGVjaWZpZWQgYmluZGluZ3MuCi0gKi8KLWZ1bmN0aW9uIGJpbmQoc2VsZiwg
Zm4pIHsKLSAgdmFyIGN1cnJ5QXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gc2xpY2VBcmdz
KGFyZ3VtZW50cywgMikgOiBbXTsKLSAgaWYgKGlzRnVuY3Rpb24oZm4pICYmICEoZm4gaW5zdGFu
Y2VvZiBSZWdFeHApKSB7Ci0gICAgcmV0dXJuIGN1cnJ5QXJncy5sZW5ndGgKLSAgICAgID8gZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgKLSAgICAgICAgICAg
ID8gZm4uYXBwbHkoc2VsZiwgY3VycnlBcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cywg
MCkpKQotICAgICAgICAgICAgOiBmbi5hcHBseShzZWxmLCBjdXJyeUFyZ3MpOwotICAgICAgICB9
Ci0gICAgICA6IGZ1bmN0aW9uKCkgewotICAgICAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3Ro
Ci0gICAgICAgICAgICA/IGZuLmFwcGx5KHNlbGYsIGFyZ3VtZW50cykKLSAgICAgICAgICAgIDog
Zm4uY2FsbChzZWxmKTsKLSAgICAgICAgfTsKLSAgfSBlbHNlIHsKLSAgICAvLyBpbiBJRSwgbmF0
aXZlIG1ldGhvZHMgYXJlIG5vdCBmdW5jdGlvbnMgc28gdGhleSBjYW5ub3QgYmUgYm91bmQgKG5v
dGU6IHRoZXkgZG9uJ3QgbmVlZCB0byBiZSkKLSAgICByZXR1cm4gZm47Ci0gIH0KLX0KLQotCi1m
dW5jdGlvbiB0b0pzb25SZXBsYWNlcihrZXksIHZhbHVlKSB7Ci0gIHZhciB2YWwgPSB2YWx1ZTsK
LQotICBpZiAoL15cJCsvLnRlc3Qoa2V5KSkgewotICAgIHZhbCA9IHVuZGVmaW5lZDsKLSAgfSBl
bHNlIGlmIChpc1dpbmRvdyh2YWx1ZSkpIHsKLSAgICB2YWwgPSAnJFdJTkRPVyc7Ci0gIH0gZWxz
ZSBpZiAodmFsdWUgJiYgIGRvY3VtZW50ID09PSB2YWx1ZSkgewotICAgIHZhbCA9ICckRE9DVU1F
TlQnOwotICB9IGVsc2UgaWYgKGlzU2NvcGUodmFsdWUpKSB7Ci0gICAgdmFsID0gJyRTQ09QRSc7
Ci0gIH0KLQotICByZXR1cm4gdmFsOwotfQotCi0KLS8qKgotICogQG5nZG9jIGZ1bmN0aW9uCi0g
KiBAbmFtZSBhbmd1bGFyLnRvSnNvbgotICogQGZ1bmN0aW9uCi0gKgotICogQGRlc2NyaXB0aW9u
Ci0gKiBTZXJpYWxpemVzIGlucHV0IGludG8gYSBKU09OLWZvcm1hdHRlZCBzdHJpbmcuCi0gKgot
ICogQHBhcmFtIHtPYmplY3R8QXJyYXl8RGF0ZXxzdHJpbmd8bnVtYmVyfSBvYmogSW5wdXQgdG8g
YmUgc2VyaWFsaXplZCBpbnRvIEpTT04uCi0gKiBAcGFyYW0ge2Jvb2xlYW49fSBwcmV0dHkgSWYg
c2V0IHRvIHRydWUsIHRoZSBKU09OIG91dHB1dCB3aWxsIGNvbnRhaW4gbmV3bGluZXMgYW5kIHdo
aXRlc3BhY2UuCi0gKiBAcmV0dXJucyB7c3RyaW5nfSBKc29uaWZpZWQgc3RyaW5nIHJlcHJlc2Vu
dGluZyBgb2JqYC4KLSAqLwotZnVuY3Rpb24gdG9Kc29uKG9iaiwgcHJldHR5KSB7Ci0gIHJldHVy
biBKU09OLnN0cmluZ2lmeShvYmosIHRvSnNvblJlcGxhY2VyLCBwcmV0dHkgPyAnICAnIDogbnVs
bCk7Ci19Ci0KLQotLyoqCi0gKiBAbmdkb2MgZnVuY3Rpb24KLSAqIEBuYW1lIGFuZ3VsYXIuZnJv
bUpzb24KLSAqIEBmdW5jdGlvbgotICoKLSAqIEBkZXNjcmlwdGlvbgotICogRGVzZXJpYWxpemVz
IGEgSlNPTiBzdHJpbmcuCi0gKgotICogQHBhcmFtIHtzdHJpbmd9IGpzb24gSlNPTiBzdHJpbmcg
dG8gZGVzZXJpYWxpemUuCi0gKiBAcmV0dXJucyB7T2JqZWN0fEFycmF5fERhdGV8c3RyaW5nfG51
bWJlcn0gRGVzZXJpYWxpemVkIHRoaW5neS4KLSAqLwotZnVuY3Rpb24gZnJvbUpzb24oanNvbikg
ewotICByZXR1cm4gaXNTdHJpbmcoanNvbikKLSAgICAgID8gSlNPTi5wYXJzZShqc29uKQotICAg
ICAgOiBqc29uOwotfQotCi0KLWZ1bmN0aW9uIHRvQm9vbGVhbih2YWx1ZSkgewotICBpZiAodmFs
dWUgJiYgdmFsdWUubGVuZ3RoICE9PSAwKSB7Ci0gICAgdmFyIHYgPSBsb3dlcmNhc2UoIiIgKyB2
YWx1ZSk7Ci0gICAgdmFsdWUgPSAhKHYgPT0gJ2YnIHx8IHYgPT0gJzAnIHx8IHYgPT0gJ2ZhbHNl
JyB8fCB2ID09ICdubycgfHwgdiA9PSAnbicgfHwgdiA9PSAnW10nKTsKLSAgfSBlbHNlIHsKLSAg
ICB2YWx1ZSA9IGZhbHNlOwotICB9Ci0gIHJldHVybiB2YWx1ZTsKLX0KLQotLyoqCi0gKiBAcmV0
dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVs
ZW1lbnQuCi0gKi8KLWZ1bmN0aW9uIHN0YXJ0aW5nVGFnKGVsZW1lbnQpIHsKLSAgZWxlbWVudCA9
IGpxTGl0ZShlbGVtZW50KS5jbG9uZSgpOwotICB0cnkgewotICAgIC8vIHR1cm5zIG91dCBJRSBk
b2VzIG5vdCBsZXQgeW91IHNldCAuaHRtbCgpIG9uIGVsZW1lbnRzIHdoaWNoCi0gICAgLy8gYXJl
IG5vdCBhbGxvd2VkIHRvIGhhdmUgY2hpbGRyZW4uIFNvIHdlIGp1c3QgaWdub3JlIGl0LgotICAg
IGVsZW1lbnQuaHRtbCgnJyk7Ci0gIH0gY2F0Y2goZSkge30KLSAgLy8gQXMgUGVyIERPTSBTdGFu
ZGFyZHMKLSAgdmFyIFRFWFRfTk9ERSA9IDM7Ci0gIHZhciBlbGVtSHRtbCA9IGpxTGl0ZSgnPGRp
dj4nKS5hcHBlbmQoZWxlbWVudCkuaHRtbCgpOwotICB0cnkgewotICAgIHJldHVybiBlbGVtZW50
WzBdLm5vZGVUeXBlID09PSBURVhUX05PREUgPyBsb3dlcmNhc2UoZWxlbUh0bWwpIDoKLSAgICAg
ICAgZWxlbUh0bWwuCi0gICAgICAgICAgbWF0Y2goL14oPFtePl0rPikvKVsxXS4KLSAgICAgICAg
ICByZXBsYWNlKC9ePChbXHdcLV0rKS8sIGZ1bmN0aW9uKG1hdGNoLCBub2RlTmFtZSkgeyByZXR1
cm4gJzwnICsgbG93ZXJjYXNlKG5vZGVOYW1lKTsgfSk7Ci0gIH0gY2F0Y2goZSkgewotICAgIHJl
dHVybiBsb3dlcmNhc2UoZWxlbUh0bWwpOwotICB9Ci0KLX0KLQotCi0vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLS8qKgotICogUGFyc2VzIGFuIGVz
Y2FwZWQgdXJsIHF1ZXJ5IHN0cmluZyBpbnRvIGtleS12YWx1ZSBwYWlycy4KLSAqIEByZXR1cm5z
IE9iamVjdC48KHN0cmluZ3xib29sZWFuKT4KLSAqLwotZnVuY3Rpb24gcGFyc2VLZXlWYWx1ZSgv
KipzdHJpbmcqL2tleVZhbHVlKSB7Ci0gIHZhciBvYmogPSB7fSwga2V5X3ZhbHVlLCBrZXk7Ci0g
IGZvckVhY2goKGtleVZhbHVlIHx8ICIiKS5zcGxpdCgnJicpLCBmdW5jdGlvbihrZXlWYWx1ZSl7
Ci0gICAgaWYgKGtleVZhbHVlKSB7Ci0gICAgICBrZXlfdmFsdWUgPSBrZXlWYWx1ZS5zcGxpdCgn
PScpOwotICAgICAga2V5ID0gZGVjb2RlVVJJQ29tcG9uZW50KGtleV92YWx1ZVswXSk7Ci0gICAg
ICBvYmpba2V5XSA9IGlzRGVmaW5lZChrZXlfdmFsdWVbMV0pID8gZGVjb2RlVVJJQ29tcG9uZW50
KGtleV92YWx1ZVsxXSkgOiB0cnVlOwotICAgIH0KLSAgfSk7Ci0gIHJldHVybiBvYmo7Ci19Ci0K
LWZ1bmN0aW9uIHRvS2V5VmFsdWUob2JqKSB7Ci0gIHZhciBwYXJ0cyA9IFtdOwotICBmb3JFYWNo
KG9iaiwgZnVuY3Rpb24odmFsdWUsIGtleSkgewotICAgIHBhcnRzLnB1c2goZW5jb2RlVXJpUXVl
cnkoa2V5LCB0cnVlKSArICh2YWx1ZSA9PT0gdHJ1ZSA/ICcnIDogJz0nICsgZW5jb2RlVXJpUXVl
cnkodmFsdWUsIHRydWUpKSk7Ci0gIH0pOwotICByZXR1cm4gcGFydHMubGVuZ3RoID8gcGFydHMu
am9pbignJicpIDogJyc7Ci19Ci0KLQotLyoqCi0gKiBXZSBuZWVkIG91ciBjdXN0b20gbWV0aG9k
IGJlY2F1c2UgZW5jb2RlVVJJQ29tcG9uZW50IGlzIHRvbyBhZ3Jlc3NpdmUgYW5kIGRvZXNuJ3Qg
Zm9sbG93Ci0gKiBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMzOTg2LnR4dCB3aXRoIHJlZ2Fy
ZHMgdG8gdGhlIGNoYXJhY3RlciBzZXQgKHBjaGFyKSBhbGxvd2VkIGluIHBhdGgKLSAqIHNlZ21l
bnRzOgotICogICAgc2VnbWVudCAgICAgICA9ICpwY2hhcgotICogICAgcGNoYXIgICAgICAgICA9
IHVucmVzZXJ2ZWQgLyBwY3QtZW5jb2RlZCAvIHN1Yi1kZWxpbXMgLyAiOiIgLyAiQCIKLSAqICAg
IHBjdC1lbmNvZGVkICAgPSAiJSIgSEVYRElHIEhFWERJRwotICogICAgdW5yZXNlcnZlZCAgICA9
IEFMUEhBIC8gRElHSVQgLyAiLSIgLyAiLiIgLyAiXyIgLyAifiIKLSAqICAgIHN1Yi1kZWxpbXMg
ICAgPSAiISIgLyAiJCIgLyAiJiIgLyAiJyIgLyAiKCIgLyAiKSIKLSAqICAgICAgICAgICAgICAg
ICAgICAgLyAiKiIgLyAiKyIgLyAiLCIgLyAiOyIgLyAiPSIKLSAqLwotZnVuY3Rpb24gZW5jb2Rl
VXJpU2VnbWVudCh2YWwpIHsKLSAgcmV0dXJuIGVuY29kZVVyaVF1ZXJ5KHZhbCwgdHJ1ZSkuCi0g
ICAgICAgICAgICAgcmVwbGFjZSgvJTI2L2dpLCAnJicpLgotICAgICAgICAgICAgIHJlcGxhY2Uo
LyUzRC9naSwgJz0nKS4KLSAgICAgICAgICAgICByZXBsYWNlKC8lMkIvZ2ksICcrJyk7Ci19Ci0K
LQotLyoqCi0gKiBUaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCBmb3IgZW5jb2RpbmcgKmtleSogb3Ig
KnZhbHVlKiBwYXJ0cyBvZiBxdWVyeSBjb21wb25lbnQuIFdlIG5lZWQgYSBjdXN0b20KLSAqIG1l
dGhvZCBiZWN1YXNlIGVuY29kZVVSSUNvbXBvbmVudCBpcyB0b28gYWdyZXNzaXZlIGFuZCBlbmNv
ZGVzIHN0dWZmIHRoYXQgZG9lc24ndCBoYXZlIHRvIGJlCi0gKiBlbmNvZGVkIHBlciBodHRwOi8v
dG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2OgotICogICAgcXVlcnkgICAgICAgPSAqKCBwY2hh
ciAvICIvIiAvICI/IiApCi0gKiAgICBwY2hhciAgICAgICAgID0gdW5yZXNlcnZlZCAvIHBjdC1l
bmNvZGVkIC8gc3ViLWRlbGltcyAvICI6IiAvICJAIgotICogICAgdW5yZXNlcnZlZCAgICA9IEFM
UEhBIC8gRElHSVQgLyAiLSIgLyAiLiIgLyAiXyIgLyAifiIKLSAqICAgIHBjdC1lbmNvZGVkICAg
PSAiJSIgSEVYRElHIEhFWERJRwotICogICAgc3ViLWRlbGltcyAgICA9ICIhIiAvICIkIiAvICIm
IiAvICInIiAvICIoIiAvICIpIgotICogICAgICAgICAgICAgICAgICAgICAvICIqIiAvICIrIiAv
ICIsIiAvICI7IiAvICI9IgotICovCi1mdW5jdGlvbiBlbmNvZGVVcmlRdWVyeSh2YWwsIHBjdEVu
Y29kZVNwYWNlcykgewotICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuCi0gICAgICAg
ICAgICAgcmVwbGFjZSgvJTQwL2dpLCAnQCcpLgotICAgICAgICAgICAgIHJlcGxhY2UoLyUzQS9n
aSwgJzonKS4KLSAgICAgICAgICAgICByZXBsYWNlKC8lMjQvZywgJyQnKS4KLSAgICAgICAgICAg
ICByZXBsYWNlKC8lMkMvZ2ksICcsJykuCi0gICAgICAgICAgICAgcmVwbGFjZSgvJTIwL2csIChw
Y3RFbmNvZGVTcGFjZXMgPyAnJTIwJyA6ICcrJykpOwotfQotCi0KLS8qKgotICogQG5nZG9jIGRp
cmVjdGl2ZQotICogQG5hbWUgbmcuZGlyZWN0aXZlOm5nQXBwCi0gKgotICogQGVsZW1lbnQgQU5Z
Ci0gKiBAcGFyYW0ge2FuZ3VsYXIuTW9kdWxlfSBuZ0FwcCBhbiBvcHRpb25hbCBhcHBsaWNhdGlv
bgotICogICB7QGxpbmsgYW5ndWxhci5tb2R1bGUgbW9kdWxlfSBuYW1lIHRvIGxvYWQuCi0gKgot
ICogQGRlc2NyaXB0aW9uCi0gKgotICogVXNlIHRoaXMgZGlyZWN0aXZlIHRvIGF1dG8tYm9vdHN0
cmFwIGFuIGFwcGxpY2F0aW9uLiBPbmx5Ci0gKiBvbmUgZGlyZWN0aXZlIGNhbiBiZSB1c2VkIHBl
ciBIVE1MIGRvY3VtZW50LiBUaGUgZGlyZWN0aXZlCi0gKiBkZXNpZ25hdGVzIHRoZSByb290IG9m
IHRoZSBhcHBsaWNhdGlvbiBhbmQgaXMgdHlwaWNhbGx5IHBsYWNlZAotICogYXQgdGhlIHJvb3Qg
b2YgdGhlIHBhZ2UuCi0gKgotICogSW4gdGhlIGV4YW1wbGUgYmVsb3cgaWYgdGhlIGBuZ0FwcGAg
ZGlyZWN0aXZlIHdvdWxkIG5vdCBiZSBwbGFjZWQKLSAqIG9uIHRoZSBgaHRtbGAgZWxlbWVudCB0
aGVuIHRoZSBkb2N1bWVudCB3b3VsZCBub3QgYmUgY29tcGlsZWQKLSAqIGFuZCB0aGUgYHt7IDEr
MiB9fWAgd291bGQgbm90IGJlIHJlc29sdmVkIHRvIGAzYC4KLSAqCi0gKiBgbmdBcHBgIGlzIHRo
ZSBlYXNpZXN0IHdheSB0byBib290c3RyYXAgYW4gYXBwbGljYXRpb24uCi0gKgotIDxkb2M6ZXhh
bXBsZT4KLSAgIDxkb2M6c291cmNlPgotICAgIEkgY2FuIGFkZDogMSArIDIgPSAge3sgMSsyIH19
Ci0gICA8L2RvYzpzb3VyY2U+Ci0gPC9kb2M6ZXhhbXBsZT4KLSAqCi0gKi8KLWZ1bmN0aW9uIGFu
Z3VsYXJJbml0KGVsZW1lbnQsIGJvb3RzdHJhcCkgewotICB2YXIgZWxlbWVudHMgPSBbZWxlbWVu
dF0sCi0gICAgICBhcHBFbGVtZW50LAotICAgICAgbW9kdWxlLAotICAgICAgbmFtZXMgPSBbJ25n
OmFwcCcsICduZy1hcHAnLCAneC1uZy1hcHAnLCAnZGF0YS1uZy1hcHAnXSwKLSAgICAgIE5HX0FQ
UF9DTEFTU19SRUdFWFAgPSAvXHNuZ1s6XC1dYXBwKDpccyooW1x3XGRfXSspOz8pP1xzLzsKLQot
ICBmdW5jdGlvbiBhcHBlbmQoZWxlbWVudCkgewotICAgIGVsZW1lbnQgJiYgZWxlbWVudHMucHVz
aChlbGVtZW50KTsKLSAgfQotCi0gIGZvckVhY2gobmFtZXMsIGZ1bmN0aW9uKG5hbWUpIHsKLSAg
ICBuYW1lc1tuYW1lXSA9IHRydWU7Ci0gICAgYXBwZW5kKGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KG5hbWUpKTsKLSAgICBuYW1lID0gbmFtZS5yZXBsYWNlKCc6JywgJ1xcOicpOwotICAgIGlmIChl
bGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwpIHsKLSAgICAgIGZvckVhY2goZWxlbWVudC5xdWVyeVNl
bGVjdG9yQWxsKCcuJyArIG5hbWUpLCBhcHBlbmQpOwotICAgICAgZm9yRWFjaChlbGVtZW50LnF1
ZXJ5U2VsZWN0b3JBbGwoJy4nICsgbmFtZSArICdcXDonKSwgYXBwZW5kKTsKLSAgICAgIGZvckVh
Y2goZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbJyArIG5hbWUgKyAnXScpLCBhcHBlbmQpOwot
ICAgIH0KLSAgfSk7Ci0KLSAgZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkgewot
ICAgIGlmICghYXBwRWxlbWVudCkgewotICAgICAgdmFyIGNsYXNzTmFtZSA9ICcgJyArIGVsZW1l
bnQuY2xhc3NOYW1lICsgJyAnOwotICAgICAgdmFyIG1hdGNoID0gTkdfQVBQX0NMQVNTX1JFR0VY
UC5leGVjKGNsYXNzTmFtZSk7Ci0gICAgICBpZiAobWF0Y2gpIHsKLSAgICAgICAgYXBwRWxlbWVu
dCA9IGVsZW1lbnQ7Ci0gICAgICAgIG1vZHVsZSA9IChtYXRjaFsyXSB8fCAnJykucmVwbGFjZSgv
XHMrL2csICcsJyk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBmb3JFYWNoKGVsZW1lbnQuYXR0
cmlidXRlcywgZnVuY3Rpb24oYXR0cikgewotICAgICAgICAgIGlmICghYXBwRWxlbWVudCAmJiBu
YW1lc1thdHRyLm5hbWVdKSB7Ci0gICAgICAgICAgICBhcHBFbGVtZW50ID0gZWxlbWVudDsKLSAg
ICAgICAgICAgIG1vZHVsZSA9IGF0dHIudmFsdWU7Ci0gICAgICAgICAgfQotICAgICAgICB9KTsK
LSAgICAgIH0KLSAgICB9Ci0gIH0pOwotICBpZiAoYXBwRWxlbWVudCkgewotICAgIGJvb3RzdHJh
cChhcHBFbGVtZW50LCBtb2R1bGUgPyBbbW9kdWxlXSA6IFtdKTsKLSAgfQotfQotCi0vKioKLSAq
IEBuZ2RvYyBmdW5jdGlvbgotICogQG5hbWUgYW5ndWxhci5ib290c3RyYXAKLSAqIEBkZXNjcmlw
dGlvbgotICogVXNlIHRoaXMgZnVuY3Rpb24gdG8gbWFudWFsbHkgc3RhcnQgdXAgYW5ndWxhciBh
cHBsaWNhdGlvbi4KLSAqCi0gKiBTZWU6IHtAbGluayBndWlkZS9ib290c3RyYXAgQm9vdHN0cmFw
fQotICoKLSAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBET00gZWxlbWVudCB3aGljaCBpcyB0
aGUgcm9vdCBvZiBhbmd1bGFyIGFwcGxpY2F0aW9uLgotICogQHBhcmFtIHtBcnJheTxTdHJpbmd8
RnVuY3Rpb24+PX0gbW9kdWxlcyBhbiBhcnJheSBvZiBtb2R1bGUgZGVjbGFyYXRpb25zLiBTZWU6
IHtAbGluayBhbmd1bGFyLm1vZHVsZSBtb2R1bGVzfQotICogQHJldHVybnMge0FVVE8uJGluamVj
dG9yfSBSZXR1cm5zIHRoZSBuZXdseSBjcmVhdGVkIGluamVjdG9yIGZvciB0aGlzIGFwcC4KLSAq
LwotZnVuY3Rpb24gYm9vdHN0cmFwKGVsZW1lbnQsIG1vZHVsZXMpIHsKLSAgdmFyIHJlc3VtZUJv
b3RzdHJhcEludGVybmFsID0gZnVuY3Rpb24oKSB7Ci0gICAgZWxlbWVudCA9IGpxTGl0ZShlbGVt
ZW50KTsKLSAgICBtb2R1bGVzID0gbW9kdWxlcyB8fCBbXTsKLSAgICBtb2R1bGVzLnVuc2hpZnQo
WyckcHJvdmlkZScsIGZ1bmN0aW9uKCRwcm92aWRlKSB7Ci0gICAgICAkcHJvdmlkZS52YWx1ZSgn
JHJvb3RFbGVtZW50JywgZWxlbWVudCk7Ci0gICAgfV0pOwotICAgIG1vZHVsZXMudW5zaGlmdCgn
bmcnKTsKLSAgICB2YXIgaW5qZWN0b3IgPSBjcmVhdGVJbmplY3Rvcihtb2R1bGVzKTsKLSAgICBp
bmplY3Rvci5pbnZva2UoWyckcm9vdFNjb3BlJywgJyRyb290RWxlbWVudCcsICckY29tcGlsZScs
ICckaW5qZWN0b3InLAotICAgICAgIGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBjb21waWxlLCBp
bmplY3RvcikgewotICAgICAgICBzY29wZS4kYXBwbHkoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ZWxlbWVudC5kYXRhKCckaW5qZWN0b3InLCBpbmplY3Rvcik7Ci0gICAgICAgICAgY29tcGlsZShl
bGVtZW50KShzY29wZSk7Ci0gICAgICAgIH0pOwotICAgICAgfV0KLSAgICApOwotICAgIHJldHVy
biBpbmplY3RvcjsKLSAgfTsKLQotICB2YXIgTkdfREVGRVJfQk9PVFNUUkFQID0gL15OR19ERUZF
Ul9CT09UU1RSQVAhLzsKLQotICBpZiAod2luZG93ICYmICFOR19ERUZFUl9CT09UU1RSQVAudGVz
dCh3aW5kb3cubmFtZSkpIHsKLSAgICByZXR1cm4gcmVzdW1lQm9vdHN0cmFwSW50ZXJuYWwoKTsK
LSAgfQotCi0gIHdpbmRvdy5uYW1lID0gd2luZG93Lm5hbWUucmVwbGFjZShOR19ERUZFUl9CT09U
U1RSQVAsICcnKTsKLSAgYW5ndWxhci5yZXN1bWVCb290c3RyYXAgPSBmdW5jdGlvbihleHRyYU1v
ZHVsZXMpIHsKLSAgICBmb3JFYWNoKGV4dHJhTW9kdWxlcywgZnVuY3Rpb24obW9kdWxlKSB7Ci0g
ICAgICBtb2R1bGVzLnB1c2gobW9kdWxlKTsKLSAgICB9KTsKLSAgICByZXN1bWVCb290c3RyYXBJ
bnRlcm5hbCgpOwotICB9OwotfQotCi12YXIgU05BS0VfQ0FTRV9SRUdFWFAgPSAvW0EtWl0vZzsK
LWZ1bmN0aW9uIHNuYWtlX2Nhc2UobmFtZSwgc2VwYXJhdG9yKXsKLSAgc2VwYXJhdG9yID0gc2Vw
YXJhdG9yIHx8ICdfJzsKLSAgcmV0dXJuIG5hbWUucmVwbGFjZShTTkFLRV9DQVNFX1JFR0VYUCwg
ZnVuY3Rpb24obGV0dGVyLCBwb3MpIHsKLSAgICByZXR1cm4gKHBvcyA/IHNlcGFyYXRvciA6ICcn
KSArIGxldHRlci50b0xvd2VyQ2FzZSgpOwotICB9KTsKLX0KLQotZnVuY3Rpb24gYmluZEpRdWVy
eSgpIHsKLSAgLy8gYmluZCB0byBqUXVlcnkgaWYgcHJlc2VudDsKLSAgalF1ZXJ5ID0gd2luZG93
LmpRdWVyeTsKLSAgLy8gcmVzZXQgdG8galF1ZXJ5IG9yIGRlZmF1bHQgdG8gdXMuCi0gIGlmIChq
UXVlcnkpIHsKLSAgICBqcUxpdGUgPSBqUXVlcnk7Ci0gICAgZXh0ZW5kKGpRdWVyeS5mbiwgewot
ICAgICAgc2NvcGU6IEpRTGl0ZVByb3RvdHlwZS5zY29wZSwKLSAgICAgIGNvbnRyb2xsZXI6IEpR
TGl0ZVByb3RvdHlwZS5jb250cm9sbGVyLAotICAgICAgaW5qZWN0b3I6IEpRTGl0ZVByb3RvdHlw
ZS5pbmplY3RvciwKLSAgICAgIGluaGVyaXRlZERhdGE6IEpRTGl0ZVByb3RvdHlwZS5pbmhlcml0
ZWREYXRhCi0gICAgfSk7Ci0gICAgSlFMaXRlUGF0Y2hKUXVlcnlSZW1vdmUoJ3JlbW92ZScsIHRy
dWUpOwotICAgIEpRTGl0ZVBhdGNoSlF1ZXJ5UmVtb3ZlKCdlbXB0eScpOwotICAgIEpRTGl0ZVBh
dGNoSlF1ZXJ5UmVtb3ZlKCdodG1sJyk7Ci0gIH0gZWxzZSB7Ci0gICAganFMaXRlID0gSlFMaXRl
OwotICB9Ci0gIGFuZ3VsYXIuZWxlbWVudCA9IGpxTGl0ZTsKLX0KLQotLyoqCi0gKiB0aHJvdyBl
cnJvciBpZiB0aGUgYXJndW1lbnQgaXMgZmFsc3kuCi0gKi8KLWZ1bmN0aW9uIGFzc2VydEFyZyhh
cmcsIG5hbWUsIHJlYXNvbikgewotICBpZiAoIWFyZykgewotICAgIHRocm93IG5ldyBFcnJvcigi
QXJndW1lbnQgJyIgKyAobmFtZSB8fCAnPycpICsgIicgaXMgIiArIChyZWFzb24gfHwgInJlcXVp
cmVkIikpOwotICB9Ci0gIHJldHVybiBhcmc7Ci19Ci0KLWZ1bmN0aW9uIGFzc2VydEFyZ0ZuKGFy
ZywgbmFtZSwgYWNjZXB0QXJyYXlBbm5vdGF0aW9uKSB7Ci0gIGlmIChhY2NlcHRBcnJheUFubm90
YXRpb24gJiYgaXNBcnJheShhcmcpKSB7Ci0gICAgICBhcmcgPSBhcmdbYXJnLmxlbmd0aCAtIDFd
OwotICB9Ci0KLSAgYXNzZXJ0QXJnKGlzRnVuY3Rpb24oYXJnKSwgbmFtZSwgJ25vdCBhIGZ1bmN0
aW9uLCBnb3QgJyArCi0gICAgICAoYXJnICYmIHR5cGVvZiBhcmcgPT0gJ29iamVjdCcgPyBhcmcu
Y29uc3RydWN0b3IubmFtZSB8fCAnT2JqZWN0JyA6IHR5cGVvZiBhcmcpKTsKLSAgcmV0dXJuIGFy
ZzsKLX0KLQotLyoqCi0gKiBAbmdkb2MgaW50ZXJmYWNlCi0gKiBAbmFtZSBhbmd1bGFyLk1vZHVs
ZQotICogQGRlc2NyaXB0aW9uCi0gKgotICogSW50ZXJmYWNlIGZvciBjb25maWd1cmluZyBhbmd1
bGFyIHtAbGluayBhbmd1bGFyLm1vZHVsZSBtb2R1bGVzfS4KLSAqLwotCi1mdW5jdGlvbiBzZXR1
cE1vZHVsZUxvYWRlcih3aW5kb3cpIHsKLQotICBmdW5jdGlvbiBlbnN1cmUob2JqLCBuYW1lLCBm
YWN0b3J5KSB7Ci0gICAgcmV0dXJuIG9ialtuYW1lXSB8fCAob2JqW25hbWVdID0gZmFjdG9yeSgp
KTsKLSAgfQotCi0gIHJldHVybiBlbnN1cmUoZW5zdXJlKHdpbmRvdywgJ2FuZ3VsYXInLCBPYmpl
Y3QpLCAnbW9kdWxlJywgZnVuY3Rpb24oKSB7Ci0gICAgLyoqIEB0eXBlIHtPYmplY3QuPHN0cmlu
ZywgYW5ndWxhci5Nb2R1bGU+fSAqLwotICAgIHZhciBtb2R1bGVzID0ge307Ci0KLSAgICAvKioK
LSAgICAgKiBAbmdkb2MgZnVuY3Rpb24KLSAgICAgKiBAbmFtZSBhbmd1bGFyLm1vZHVsZQotICAg
ICAqIEBkZXNjcmlwdGlvbgotICAgICAqCi0gICAgICogVGhlIGBhbmd1bGFyLm1vZHVsZWAgaXMg
YSBnbG9iYWwgcGxhY2UgZm9yIGNyZWF0aW5nIGFuZCByZWdpc3RlcmluZyBBbmd1bGFyIG1vZHVs
ZXMuIEFsbAotICAgICAqIG1vZHVsZXMgKGFuZ3VsYXIgY29yZSBvciAzcmQgcGFydHkpIHRoYXQg
c2hvdWxkIGJlIGF2YWlsYWJsZSB0byBhbiBhcHBsaWNhdGlvbiBtdXN0IGJlCi0gICAgICogcmVn
aXN0ZXJlZCB1c2luZyB0aGlzIG1lY2hhbmlzbS4KLSAgICAgKgotICAgICAqCi0gICAgICogIyBN
b2R1bGUKLSAgICAgKgotICAgICAqIEEgbW9kdWxlIGlzIGEgY29sbG9jYXRpb24gb2Ygc2Vydmlj
ZXMsIGRpcmVjdGl2ZXMsIGZpbHRlcnMsIGFuZCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLiBN
b2R1bGUKLSAgICAgKiBpcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUge0BsaW5rIEFVVE8uJGluamVj
dG9yICRpbmplY3Rvcn0uCi0gICAgICoKLSAgICAgKiA8cHJlPgotICAgICAqIC8vIENyZWF0ZSBh
IG5ldyBtb2R1bGUKLSAgICAgKiB2YXIgbXlNb2R1bGUgPSBhbmd1bGFyLm1vZHVsZSgnbXlNb2R1
bGUnLCBbXSk7Ci0gICAgICoKLSAgICAgKiAvLyByZWdpc3RlciBhIG5ldyBzZXJ2aWNlCi0gICAg
ICogbXlNb2R1bGUudmFsdWUoJ2FwcE5hbWUnLCAnTXlDb29sQXBwJyk7Ci0gICAgICoKLSAgICAg
KiAvLyBjb25maWd1cmUgZXhpc3Rpbmcgc2VydmljZXMgaW5zaWRlIGluaXRpYWxpemF0aW9uIGJs
b2Nrcy4KLSAgICAgKiBteU1vZHVsZS5jb25maWcoZnVuY3Rpb24oJGxvY2F0aW9uUHJvdmlkZXIp
IHsKLSAgICAgKiAgIC8vIENvbmZpZ3VyZSBleGlzdGluZyBwcm92aWRlcnMKLSAgICAgKiAgICRs
b2NhdGlvblByb3ZpZGVyLmhhc2hQcmVmaXgoJyEnKTsKLSAgICAgKiB9KTsKLSAgICAgKiA8L3By
ZT4KLSAgICAgKgotICAgICAqIFRoZW4geW91IGNhbiBjcmVhdGUgYW4gaW5qZWN0b3IgYW5kIGxv
YWQgeW91ciBtb2R1bGVzIGxpa2UgdGhpczoKLSAgICAgKgotICAgICAqIDxwcmU+Ci0gICAgICog
dmFyIGluamVjdG9yID0gYW5ndWxhci5pbmplY3RvcihbJ25nJywgJ015TW9kdWxlJ10pCi0gICAg
ICogPC9wcmU+Ci0gICAgICoKLSAgICAgKiBIb3dldmVyIGl0J3MgbW9yZSBsaWtlbHkgdGhhdCB5
b3UnbGwganVzdCB1c2UKLSAgICAgKiB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nQXBwIG5nQXBwfSBv
cgotICAgICAqIHtAbGluayBhbmd1bGFyLmJvb3RzdHJhcH0gdG8gc2ltcGxpZnkgdGhpcyBwcm9j
ZXNzIGZvciB5b3UuCi0gICAgICoKLSAgICAgKiBAcGFyYW0geyFzdHJpbmd9IG5hbWUgVGhlIG5h
bWUgb2YgdGhlIG1vZHVsZSB0byBjcmVhdGUgb3IgcmV0cmlldmUuCi0gICAgICogQHBhcmFtIHtB
cnJheS48c3RyaW5nPj19IHJlcXVpcmVzIElmIHNwZWNpZmllZCB0aGVuIG5ldyBtb2R1bGUgaXMg
YmVpbmcgY3JlYXRlZC4gSWYgdW5zcGVjaWZpZWQgdGhlbiB0aGUKLSAgICAgKiAgICAgICAgdGhl
IG1vZHVsZSBpcyBiZWluZyByZXRyaWV2ZWQgZm9yIGZ1cnRoZXIgY29uZmlndXJhdGlvbi4KLSAg
ICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb25maWdGbiBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZ1
bmN0aW9uIGZvciB0aGUgbW9kdWxlLiBTYW1lIGFzCi0gICAgICogICAgICAgIHtAbGluayBhbmd1
bGFyLk1vZHVsZSNjb25maWcgTW9kdWxlI2NvbmZpZygpfS4KLSAgICAgKiBAcmV0dXJucyB7bW9k
dWxlfSBuZXcgbW9kdWxlIHdpdGggdGhlIHtAbGluayBhbmd1bGFyLk1vZHVsZX0gYXBpLgotICAg
ICAqLwotICAgIHJldHVybiBmdW5jdGlvbiBtb2R1bGUobmFtZSwgcmVxdWlyZXMsIGNvbmZpZ0Zu
KSB7Ci0gICAgICBpZiAocmVxdWlyZXMgJiYgbW9kdWxlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkg
ewotICAgICAgICBtb2R1bGVzW25hbWVdID0gbnVsbDsKLSAgICAgIH0KLSAgICAgIHJldHVybiBl
bnN1cmUobW9kdWxlcywgbmFtZSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICghcmVxdWlyZXMp
IHsKLSAgICAgICAgICB0aHJvdyBFcnJvcignTm8gbW9kdWxlOiAnICsgbmFtZSk7Ci0gICAgICAg
IH0KLQotICAgICAgICAvKiogQHR5cGUgeyFBcnJheS48QXJyYXkuPCo+Pn0gKi8KLSAgICAgICAg
dmFyIGludm9rZVF1ZXVlID0gW107Ci0KLSAgICAgICAgLyoqIEB0eXBlIHshQXJyYXkuPEZ1bmN0
aW9uPn0gKi8KLSAgICAgICAgdmFyIHJ1bkJsb2NrcyA9IFtdOwotCi0gICAgICAgIHZhciBjb25m
aWcgPSBpbnZva2VMYXRlcignJGluamVjdG9yJywgJ2ludm9rZScpOwotCi0gICAgICAgIC8qKiBA
dHlwZSB7YW5ndWxhci5Nb2R1bGV9ICovCi0gICAgICAgIHZhciBtb2R1bGVJbnN0YW5jZSA9IHsK
LSAgICAgICAgICAvLyBQcml2YXRlIHN0YXRlCi0gICAgICAgICAgX2ludm9rZVF1ZXVlOiBpbnZv
a2VRdWV1ZSwKLSAgICAgICAgICBfcnVuQmxvY2tzOiBydW5CbG9ja3MsCi0KLSAgICAgICAgICAv
KioKLSAgICAgICAgICAgKiBAbmdkb2MgcHJvcGVydHkKLSAgICAgICAgICAgKiBAbmFtZSBhbmd1
bGFyLk1vZHVsZSNyZXF1aXJlcwotICAgICAgICAgICAqIEBwcm9wZXJ0eU9mIGFuZ3VsYXIuTW9k
dWxlCi0gICAgICAgICAgICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fSBMaXN0IG9mIG1vZHVs
ZSBuYW1lcyB3aGljaCBtdXN0IGJlIGxvYWRlZCBiZWZvcmUgdGhpcyBtb2R1bGUuCi0gICAgICAg
ICAgICogQGRlc2NyaXB0aW9uCi0gICAgICAgICAgICogSG9sZHMgdGhlIGxpc3Qgb2YgbW9kdWxl
cyB3aGljaCB0aGUgaW5qZWN0b3Igd2lsbCBsb2FkIGJlZm9yZSB0aGUgY3VycmVudCBtb2R1bGUg
aXMgbG9hZGVkLgotICAgICAgICAgICAqLwotICAgICAgICAgIHJlcXVpcmVzOiByZXF1aXJlcywK
LQotICAgICAgICAgIC8qKgotICAgICAgICAgICAqIEBuZ2RvYyBwcm9wZXJ0eQotICAgICAgICAg
ICAqIEBuYW1lIGFuZ3VsYXIuTW9kdWxlI25hbWUKLSAgICAgICAgICAgKiBAcHJvcGVydHlPZiBh
bmd1bGFyLk1vZHVsZQotICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IE5hbWUgb2YgdGhl
IG1vZHVsZS4KLSAgICAgICAgICAgKiBAZGVzY3JpcHRpb24KLSAgICAgICAgICAgKi8KLSAgICAg
ICAgICBuYW1lOiBuYW1lLAotCi0KLSAgICAgICAgICAvKioKLSAgICAgICAgICAgKiBAbmdkb2Mg
bWV0aG9kCi0gICAgICAgICAgICogQG5hbWUgYW5ndWxhci5Nb2R1bGUjcHJvdmlkZXIKLSAgICAg
ICAgICAgKiBAbWV0aG9kT2YgYW5ndWxhci5Nb2R1bGUKLSAgICAgICAgICAgKiBAcGFyYW0ge3N0
cmluZ30gbmFtZSBzZXJ2aWNlIG5hbWUKLSAgICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBw
cm92aWRlclR5cGUgQ29uc3RydWN0aW9uIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBuZXcgaW5zdGFu
Y2Ugb2YgdGhlIHNlcnZpY2UuCi0gICAgICAgICAgICogQGRlc2NyaXB0aW9uCi0gICAgICAgICAg
ICogU2VlIHtAbGluayBBVVRPLiRwcm92aWRlI3Byb3ZpZGVyICRwcm92aWRlLnByb3ZpZGVyKCl9
LgotICAgICAgICAgICAqLwotICAgICAgICAgIHByb3ZpZGVyOiBpbnZva2VMYXRlcignJHByb3Zp
ZGUnLCAncHJvdmlkZXInKSwKLQotICAgICAgICAgIC8qKgotICAgICAgICAgICAqIEBuZ2RvYyBt
ZXRob2QKLSAgICAgICAgICAgKiBAbmFtZSBhbmd1bGFyLk1vZHVsZSNmYWN0b3J5Ci0gICAgICAg
ICAgICogQG1ldGhvZE9mIGFuZ3VsYXIuTW9kdWxlCi0gICAgICAgICAgICogQHBhcmFtIHtzdHJp
bmd9IG5hbWUgc2VydmljZSBuYW1lCi0gICAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJv
dmlkZXJGdW5jdGlvbiBGdW5jdGlvbiBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlIG9mIHRoZSBz
ZXJ2aWNlLgotICAgICAgICAgICAqIEBkZXNjcmlwdGlvbgotICAgICAgICAgICAqIFNlZSB7QGxp
bmsgQVVUTy4kcHJvdmlkZSNmYWN0b3J5ICRwcm92aWRlLmZhY3RvcnkoKX0uCi0gICAgICAgICAg
ICovCi0gICAgICAgICAgZmFjdG9yeTogaW52b2tlTGF0ZXIoJyRwcm92aWRlJywgJ2ZhY3Rvcnkn
KSwKLQotICAgICAgICAgIC8qKgotICAgICAgICAgICAqIEBuZ2RvYyBtZXRob2QKLSAgICAgICAg
ICAgKiBAbmFtZSBhbmd1bGFyLk1vZHVsZSNzZXJ2aWNlCi0gICAgICAgICAgICogQG1ldGhvZE9m
IGFuZ3VsYXIuTW9kdWxlCi0gICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgc2Vydmlj
ZSBuYW1lCi0gICAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29uc3RydWN0b3IgQSBjb25z
dHJ1Y3RvciBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgaW5zdGFudGlhdGVkLgotICAgICAgICAgICAq
IEBkZXNjcmlwdGlvbgotICAgICAgICAgICAqIFNlZSB7QGxpbmsgQVVUTy4kcHJvdmlkZSNzZXJ2
aWNlICRwcm92aWRlLnNlcnZpY2UoKX0uCi0gICAgICAgICAgICovCi0gICAgICAgICAgc2Vydmlj
ZTogaW52b2tlTGF0ZXIoJyRwcm92aWRlJywgJ3NlcnZpY2UnKSwKLQotICAgICAgICAgIC8qKgot
ICAgICAgICAgICAqIEBuZ2RvYyBtZXRob2QKLSAgICAgICAgICAgKiBAbmFtZSBhbmd1bGFyLk1v
ZHVsZSN2YWx1ZQotICAgICAgICAgICAqIEBtZXRob2RPZiBhbmd1bGFyLk1vZHVsZQotICAgICAg
ICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIHNlcnZpY2UgbmFtZQotICAgICAgICAgICAqIEBw
YXJhbSB7Kn0gb2JqZWN0IFNlcnZpY2UgaW5zdGFuY2Ugb2JqZWN0LgotICAgICAgICAgICAqIEBk
ZXNjcmlwdGlvbgotICAgICAgICAgICAqIFNlZSB7QGxpbmsgQVVUTy4kcHJvdmlkZSN2YWx1ZSAk
cHJvdmlkZS52YWx1ZSgpfS4KLSAgICAgICAgICAgKi8KLSAgICAgICAgICB2YWx1ZTogaW52b2tl
TGF0ZXIoJyRwcm92aWRlJywgJ3ZhbHVlJyksCi0KLSAgICAgICAgICAvKioKLSAgICAgICAgICAg
KiBAbmdkb2MgbWV0aG9kCi0gICAgICAgICAgICogQG5hbWUgYW5ndWxhci5Nb2R1bGUjY29uc3Rh
bnQKLSAgICAgICAgICAgKiBAbWV0aG9kT2YgYW5ndWxhci5Nb2R1bGUKLSAgICAgICAgICAgKiBA
cGFyYW0ge3N0cmluZ30gbmFtZSBjb25zdGFudCBuYW1lCi0gICAgICAgICAgICogQHBhcmFtIHsq
fSBvYmplY3QgQ29uc3RhbnQgdmFsdWUuCi0gICAgICAgICAgICogQGRlc2NyaXB0aW9uCi0gICAg
ICAgICAgICogQmVjYXVzZSB0aGUgY29uc3RhbnQgYXJlIGZpeGVkLCB0aGV5IGdldCBhcHBsaWVk
IGJlZm9yZSBvdGhlciBwcm92aWRlIG1ldGhvZHMuCi0gICAgICAgICAgICogU2VlIHtAbGluayBB
VVRPLiRwcm92aWRlI2NvbnN0YW50ICRwcm92aWRlLmNvbnN0YW50KCl9LgotICAgICAgICAgICAq
LwotICAgICAgICAgIGNvbnN0YW50OiBpbnZva2VMYXRlcignJHByb3ZpZGUnLCAnY29uc3RhbnQn
LCAndW5zaGlmdCcpLAotCi0gICAgICAgICAgLyoqCi0gICAgICAgICAgICogQG5nZG9jIG1ldGhv
ZAotICAgICAgICAgICAqIEBuYW1lIGFuZ3VsYXIuTW9kdWxlI2ZpbHRlcgotICAgICAgICAgICAq
IEBtZXRob2RPZiBhbmd1bGFyLk1vZHVsZQotICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBu
YW1lIEZpbHRlciBuYW1lLgotICAgICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZpbHRlckZh
Y3RvcnkgRmFjdG9yeSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlIG9mIGZpbHRl
ci4KLSAgICAgICAgICAgKiBAZGVzY3JpcHRpb24KLSAgICAgICAgICAgKiBTZWUge0BsaW5rIG5n
LiRmaWx0ZXJQcm92aWRlciNyZWdpc3RlciAkZmlsdGVyUHJvdmlkZXIucmVnaXN0ZXIoKX0uCi0g
ICAgICAgICAgICovCi0gICAgICAgICAgZmlsdGVyOiBpbnZva2VMYXRlcignJGZpbHRlclByb3Zp
ZGVyJywgJ3JlZ2lzdGVyJyksCi0KLSAgICAgICAgICAvKioKLSAgICAgICAgICAgKiBAbmdkb2Mg
bWV0aG9kCi0gICAgICAgICAgICogQG5hbWUgYW5ndWxhci5Nb2R1bGUjY29udHJvbGxlcgotICAg
ICAgICAgICAqIEBtZXRob2RPZiBhbmd1bGFyLk1vZHVsZQotICAgICAgICAgICAqIEBwYXJhbSB7
c3RyaW5nfSBuYW1lIENvbnRyb2xsZXIgbmFtZS4KLSAgICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0
aW9ufSBjb25zdHJ1Y3RvciBDb250cm9sbGVyIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLgotICAgICAg
ICAgICAqIEBkZXNjcmlwdGlvbgotICAgICAgICAgICAqIFNlZSB7QGxpbmsgbmcuJGNvbnRyb2xs
ZXJQcm92aWRlciNyZWdpc3RlciAkY29udHJvbGxlclByb3ZpZGVyLnJlZ2lzdGVyKCl9LgotICAg
ICAgICAgICAqLwotICAgICAgICAgIGNvbnRyb2xsZXI6IGludm9rZUxhdGVyKCckY29udHJvbGxl
clByb3ZpZGVyJywgJ3JlZ2lzdGVyJyksCi0KLSAgICAgICAgICAvKioKLSAgICAgICAgICAgKiBA
bmdkb2MgbWV0aG9kCi0gICAgICAgICAgICogQG5hbWUgYW5ndWxhci5Nb2R1bGUjZGlyZWN0aXZl
Ci0gICAgICAgICAgICogQG1ldGhvZE9mIGFuZ3VsYXIuTW9kdWxlCi0gICAgICAgICAgICogQHBh
cmFtIHtzdHJpbmd9IG5hbWUgZGlyZWN0aXZlIG5hbWUKLSAgICAgICAgICAgKiBAcGFyYW0ge0Z1
bmN0aW9ufSBkaXJlY3RpdmVGYWN0b3J5IEZhY3RvcnkgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIG5l
dyBpbnN0YW5jZSBvZgotICAgICAgICAgICAqIGRpcmVjdGl2ZXMuCi0gICAgICAgICAgICogQGRl
c2NyaXB0aW9uCi0gICAgICAgICAgICogU2VlIHtAbGluayBuZy4kY29tcGlsZVByb3ZpZGVyI2Rp
cmVjdGl2ZSAkY29tcGlsZVByb3ZpZGVyLmRpcmVjdGl2ZSgpfS4KLSAgICAgICAgICAgKi8KLSAg
ICAgICAgICBkaXJlY3RpdmU6IGludm9rZUxhdGVyKCckY29tcGlsZVByb3ZpZGVyJywgJ2RpcmVj
dGl2ZScpLAotCi0gICAgICAgICAgLyoqCi0gICAgICAgICAgICogQG5nZG9jIG1ldGhvZAotICAg
ICAgICAgICAqIEBuYW1lIGFuZ3VsYXIuTW9kdWxlI2NvbmZpZwotICAgICAgICAgICAqIEBtZXRo
b2RPZiBhbmd1bGFyLk1vZHVsZQotICAgICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbmZp
Z0ZuIEV4ZWN1dGUgdGhpcyBmdW5jdGlvbiBvbiBtb2R1bGUgbG9hZC4gVXNlZnVsIGZvciBzZXJ2
aWNlCi0gICAgICAgICAgICogICAgY29uZmlndXJhdGlvbi4KLSAgICAgICAgICAgKiBAZGVzY3Jp
cHRpb24KLSAgICAgICAgICAgKiBVc2UgdGhpcyBtZXRob2QgdG8gcmVnaXN0ZXIgd29yayB3aGlj
aCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgb24gbW9kdWxlIGxvYWRpbmcuCi0gICAgICAgICAgICov
Ci0gICAgICAgICAgY29uZmlnOiBjb25maWcsCi0KLSAgICAgICAgICAvKioKLSAgICAgICAgICAg
KiBAbmdkb2MgbWV0aG9kCi0gICAgICAgICAgICogQG5hbWUgYW5ndWxhci5Nb2R1bGUjcnVuCi0g
ICAgICAgICAgICogQG1ldGhvZE9mIGFuZ3VsYXIuTW9kdWxlCi0gICAgICAgICAgICogQHBhcmFt
IHtGdW5jdGlvbn0gaW5pdGlhbGl6YXRpb25GbiBFeGVjdXRlIHRoaXMgZnVuY3Rpb24gYWZ0ZXIg
aW5qZWN0b3IgY3JlYXRpb24uCi0gICAgICAgICAgICogICAgVXNlZnVsIGZvciBhcHBsaWNhdGlv
biBpbml0aWFsaXphdGlvbi4KLSAgICAgICAgICAgKiBAZGVzY3JpcHRpb24KLSAgICAgICAgICAg
KiBVc2UgdGhpcyBtZXRob2QgdG8gcmVnaXN0ZXIgd29yayB3aGljaCBzaG91bGQgYmUgcGVyZm9y
bWVkIHdoZW4gdGhlIGluamVjdG9yIGlzIGRvbmUKLSAgICAgICAgICAgKiBsb2FkaW5nIGFsbCBt
b2R1bGVzLgotICAgICAgICAgICAqLwotICAgICAgICAgIHJ1bjogZnVuY3Rpb24oYmxvY2spIHsK
LSAgICAgICAgICAgIHJ1bkJsb2Nrcy5wdXNoKGJsb2NrKTsKLSAgICAgICAgICAgIHJldHVybiB0
aGlzOwotICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICBpZiAoY29uZmlnRm4pIHsK
LSAgICAgICAgICBjb25maWcoY29uZmlnRm4pOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
ICBtb2R1bGVJbnN0YW5jZTsKLQotICAgICAgICAvKioKLSAgICAgICAgICogQHBhcmFtIHtzdHJp
bmd9IHByb3ZpZGVyCi0gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2QKLSAgICAgICAg
ICogQHBhcmFtIHtTdHJpbmc9fSBpbnNlcnRNZXRob2QKLSAgICAgICAgICogQHJldHVybnMge2Fu
Z3VsYXIuTW9kdWxlfQotICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gaW52b2tlTGF0ZXIo
cHJvdmlkZXIsIG1ldGhvZCwgaW5zZXJ0TWV0aG9kKSB7Ci0gICAgICAgICAgcmV0dXJuIGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgaW52b2tlUXVldWVbaW5zZXJ0TWV0aG9kIHx8ICdwdXNoJ10o
W3Byb3ZpZGVyLCBtZXRob2QsIGFyZ3VtZW50c10pOwotICAgICAgICAgICAgcmV0dXJuIG1vZHVs
ZUluc3RhbmNlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgfTsKLSAg
fSk7Ci0KLX0KLQotLyoqCi0gKiBAbmdkb2MgcHJvcGVydHkKLSAqIEBuYW1lIGFuZ3VsYXIudmVy
c2lvbgotICogQGRlc2NyaXB0aW9uCi0gKiBBbiBvYmplY3QgdGhhdCBjb250YWlucyBpbmZvcm1h
dGlvbiBhYm91dCB0aGUgY3VycmVudCBBbmd1bGFySlMgdmVyc2lvbi4gVGhpcyBvYmplY3QgaGFz
IHRoZQotICogZm9sbG93aW5nIHByb3BlcnRpZXM6Ci0gKgotICogLSBgZnVsbGAg4oCTIGB7c3Ry
aW5nfWAg4oCTIEZ1bGwgdmVyc2lvbiBzdHJpbmcsIHN1Y2ggYXMgIjAuOS4xOCIuCi0gKiAtIGBt
YWpvcmAg4oCTIGB7bnVtYmVyfWAg4oCTIE1ham9yIHZlcnNpb24gbnVtYmVyLCBzdWNoIGFzICIw
Ii4KLSAqIC0gYG1pbm9yYCDigJMgYHtudW1iZXJ9YCDigJMgTWlub3IgdmVyc2lvbiBudW1iZXIs
IHN1Y2ggYXMgIjkiLgotICogLSBgZG90YCDigJMgYHtudW1iZXJ9YCDigJMgRG90IHZlcnNpb24g
bnVtYmVyLCBzdWNoIGFzICIxOCIuCi0gKiAtIGBjb2RlTmFtZWAg4oCTIGB7c3RyaW5nfWAg4oCT
IENvZGUgbmFtZSBvZiB0aGUgcmVsZWFzZSwgc3VjaCBhcyAiamlnZ2xpbmctYXJtZmF0Ii4KLSAq
LwotdmFyIHZlcnNpb24gPSB7Ci0gIGZ1bGw6ICcxLjAuNycsICAgIC8vIGFsbCBvZiB0aGVzZSBw
bGFjZWhvbGRlciBzdHJpbmdzIHdpbGwgYmUgcmVwbGFjZWQgYnkgZ3J1bnQncwotICBtYWpvcjog
MSwgICAgLy8gcGFja2FnZSB0YXNrCi0gIG1pbm9yOiAwLAotICBkb3Q6IDcsCi0gIGNvZGVOYW1l
OiAnbW9ub2Nocm9tYXRpYy1yYWluYm93JwotfTsKLQotCi1mdW5jdGlvbiBwdWJsaXNoRXh0ZXJu
YWxBUEkoYW5ndWxhcil7Ci0gIGV4dGVuZChhbmd1bGFyLCB7Ci0gICAgJ2Jvb3RzdHJhcCc6IGJv
b3RzdHJhcCwKLSAgICAnY29weSc6IGNvcHksCi0gICAgJ2V4dGVuZCc6IGV4dGVuZCwKLSAgICAn
ZXF1YWxzJzogZXF1YWxzLAotICAgICdlbGVtZW50JzoganFMaXRlLAotICAgICdmb3JFYWNoJzog
Zm9yRWFjaCwKLSAgICAnaW5qZWN0b3InOiBjcmVhdGVJbmplY3RvciwKLSAgICAnbm9vcCc6bm9v
cCwKLSAgICAnYmluZCc6YmluZCwKLSAgICAndG9Kc29uJzogdG9Kc29uLAotICAgICdmcm9tSnNv
bic6IGZyb21Kc29uLAotICAgICdpZGVudGl0eSc6aWRlbnRpdHksCi0gICAgJ2lzVW5kZWZpbmVk
JzogaXNVbmRlZmluZWQsCi0gICAgJ2lzRGVmaW5lZCc6IGlzRGVmaW5lZCwKLSAgICAnaXNTdHJp
bmcnOiBpc1N0cmluZywKLSAgICAnaXNGdW5jdGlvbic6IGlzRnVuY3Rpb24sCi0gICAgJ2lzT2Jq
ZWN0JzogaXNPYmplY3QsCi0gICAgJ2lzTnVtYmVyJzogaXNOdW1iZXIsCi0gICAgJ2lzRWxlbWVu
dCc6IGlzRWxlbWVudCwKLSAgICAnaXNBcnJheSc6IGlzQXJyYXksCi0gICAgJ3ZlcnNpb24nOiB2
ZXJzaW9uLAotICAgICdpc0RhdGUnOiBpc0RhdGUsCi0gICAgJ2xvd2VyY2FzZSc6IGxvd2VyY2Fz
ZSwKLSAgICAndXBwZXJjYXNlJzogdXBwZXJjYXNlLAotICAgICdjYWxsYmFja3MnOiB7Y291bnRl
cjogMH0KLSAgfSk7Ci0KLSAgYW5ndWxhck1vZHVsZSA9IHNldHVwTW9kdWxlTG9hZGVyKHdpbmRv
dyk7Ci0gIHRyeSB7Ci0gICAgYW5ndWxhck1vZHVsZSgnbmdMb2NhbGUnKTsKLSAgfSBjYXRjaCAo
ZSkgewotICAgIGFuZ3VsYXJNb2R1bGUoJ25nTG9jYWxlJywgW10pLnByb3ZpZGVyKCckbG9jYWxl
JywgJExvY2FsZVByb3ZpZGVyKTsKLSAgfQotCi0gIGFuZ3VsYXJNb2R1bGUoJ25nJywgWyduZ0xv
Y2FsZSddLCBbJyRwcm92aWRlJywKLSAgICBmdW5jdGlvbiBuZ01vZHVsZSgkcHJvdmlkZSkgewot
ICAgICAgJHByb3ZpZGUucHJvdmlkZXIoJyRjb21waWxlJywgJENvbXBpbGVQcm92aWRlcikuCi0g
ICAgICAgIGRpcmVjdGl2ZSh7Ci0gICAgICAgICAgICBhOiBodG1sQW5jaG9yRGlyZWN0aXZlLAot
ICAgICAgICAgICAgaW5wdXQ6IGlucHV0RGlyZWN0aXZlLAotICAgICAgICAgICAgdGV4dGFyZWE6
IGlucHV0RGlyZWN0aXZlLAotICAgICAgICAgICAgZm9ybTogZm9ybURpcmVjdGl2ZSwKLSAgICAg
ICAgICAgIHNjcmlwdDogc2NyaXB0RGlyZWN0aXZlLAotICAgICAgICAgICAgc2VsZWN0OiBzZWxl
Y3REaXJlY3RpdmUsCi0gICAgICAgICAgICBzdHlsZTogc3R5bGVEaXJlY3RpdmUsCi0gICAgICAg
ICAgICBvcHRpb246IG9wdGlvbkRpcmVjdGl2ZSwKLSAgICAgICAgICAgIG5nQmluZDogbmdCaW5k
RGlyZWN0aXZlLAotICAgICAgICAgICAgbmdCaW5kSHRtbFVuc2FmZTogbmdCaW5kSHRtbFVuc2Fm
ZURpcmVjdGl2ZSwKLSAgICAgICAgICAgIG5nQmluZFRlbXBsYXRlOiBuZ0JpbmRUZW1wbGF0ZURp
cmVjdGl2ZSwKLSAgICAgICAgICAgIG5nQ2xhc3M6IG5nQ2xhc3NEaXJlY3RpdmUsCi0gICAgICAg
ICAgICBuZ0NsYXNzRXZlbjogbmdDbGFzc0V2ZW5EaXJlY3RpdmUsCi0gICAgICAgICAgICBuZ0Ns
YXNzT2RkOiBuZ0NsYXNzT2RkRGlyZWN0aXZlLAotICAgICAgICAgICAgbmdDc3A6IG5nQ3NwRGly
ZWN0aXZlLAotICAgICAgICAgICAgbmdDbG9hazogbmdDbG9ha0RpcmVjdGl2ZSwKLSAgICAgICAg
ICAgIG5nQ29udHJvbGxlcjogbmdDb250cm9sbGVyRGlyZWN0aXZlLAotICAgICAgICAgICAgbmdG
b3JtOiBuZ0Zvcm1EaXJlY3RpdmUsCi0gICAgICAgICAgICBuZ0hpZGU6IG5nSGlkZURpcmVjdGl2
ZSwKLSAgICAgICAgICAgIG5nSW5jbHVkZTogbmdJbmNsdWRlRGlyZWN0aXZlLAotICAgICAgICAg
ICAgbmdJbml0OiBuZ0luaXREaXJlY3RpdmUsCi0gICAgICAgICAgICBuZ05vbkJpbmRhYmxlOiBu
Z05vbkJpbmRhYmxlRGlyZWN0aXZlLAotICAgICAgICAgICAgbmdQbHVyYWxpemU6IG5nUGx1cmFs
aXplRGlyZWN0aXZlLAotICAgICAgICAgICAgbmdSZXBlYXQ6IG5nUmVwZWF0RGlyZWN0aXZlLAot
ICAgICAgICAgICAgbmdTaG93OiBuZ1Nob3dEaXJlY3RpdmUsCi0gICAgICAgICAgICBuZ1N1Ym1p
dDogbmdTdWJtaXREaXJlY3RpdmUsCi0gICAgICAgICAgICBuZ1N0eWxlOiBuZ1N0eWxlRGlyZWN0
aXZlLAotICAgICAgICAgICAgbmdTd2l0Y2g6IG5nU3dpdGNoRGlyZWN0aXZlLAotICAgICAgICAg
ICAgbmdTd2l0Y2hXaGVuOiBuZ1N3aXRjaFdoZW5EaXJlY3RpdmUsCi0gICAgICAgICAgICBuZ1N3
aXRjaERlZmF1bHQ6IG5nU3dpdGNoRGVmYXVsdERpcmVjdGl2ZSwKLSAgICAgICAgICAgIG5nT3B0
aW9uczogbmdPcHRpb25zRGlyZWN0aXZlLAotICAgICAgICAgICAgbmdWaWV3OiBuZ1ZpZXdEaXJl
Y3RpdmUsCi0gICAgICAgICAgICBuZ1RyYW5zY2x1ZGU6IG5nVHJhbnNjbHVkZURpcmVjdGl2ZSwK
LSAgICAgICAgICAgIG5nTW9kZWw6IG5nTW9kZWxEaXJlY3RpdmUsCi0gICAgICAgICAgICBuZ0xp
c3Q6IG5nTGlzdERpcmVjdGl2ZSwKLSAgICAgICAgICAgIG5nQ2hhbmdlOiBuZ0NoYW5nZURpcmVj
dGl2ZSwKLSAgICAgICAgICAgIHJlcXVpcmVkOiByZXF1aXJlZERpcmVjdGl2ZSwKLSAgICAgICAg
ICAgIG5nUmVxdWlyZWQ6IHJlcXVpcmVkRGlyZWN0aXZlLAotICAgICAgICAgICAgbmdWYWx1ZTog
bmdWYWx1ZURpcmVjdGl2ZQotICAgICAgICB9KS4KLSAgICAgICAgZGlyZWN0aXZlKG5nQXR0cmli
dXRlQWxpYXNEaXJlY3RpdmVzKS4KLSAgICAgICAgZGlyZWN0aXZlKG5nRXZlbnREaXJlY3RpdmVz
KTsKLSAgICAgICRwcm92aWRlLnByb3ZpZGVyKHsKLSAgICAgICAgJGFuY2hvclNjcm9sbDogJEFu
Y2hvclNjcm9sbFByb3ZpZGVyLAotICAgICAgICAkYnJvd3NlcjogJEJyb3dzZXJQcm92aWRlciwK
LSAgICAgICAgJGNhY2hlRmFjdG9yeTogJENhY2hlRmFjdG9yeVByb3ZpZGVyLAotICAgICAgICAk
Y29udHJvbGxlcjogJENvbnRyb2xsZXJQcm92aWRlciwKLSAgICAgICAgJGRvY3VtZW50OiAkRG9j
dW1lbnRQcm92aWRlciwKLSAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXI6ICRFeGNlcHRpb25IYW5k
bGVyUHJvdmlkZXIsCi0gICAgICAgICRmaWx0ZXI6ICRGaWx0ZXJQcm92aWRlciwKLSAgICAgICAg
JGludGVycG9sYXRlOiAkSW50ZXJwb2xhdGVQcm92aWRlciwKLSAgICAgICAgJGh0dHA6ICRIdHRw
UHJvdmlkZXIsCi0gICAgICAgICRodHRwQmFja2VuZDogJEh0dHBCYWNrZW5kUHJvdmlkZXIsCi0g
ICAgICAgICRsb2NhdGlvbjogJExvY2F0aW9uUHJvdmlkZXIsCi0gICAgICAgICRsb2c6ICRMb2dQ
cm92aWRlciwKLSAgICAgICAgJHBhcnNlOiAkUGFyc2VQcm92aWRlciwKLSAgICAgICAgJHJvdXRl
OiAkUm91dGVQcm92aWRlciwKLSAgICAgICAgJHJvdXRlUGFyYW1zOiAkUm91dGVQYXJhbXNQcm92
aWRlciwKLSAgICAgICAgJHJvb3RTY29wZTogJFJvb3RTY29wZVByb3ZpZGVyLAotICAgICAgICAk
cTogJFFQcm92aWRlciwKLSAgICAgICAgJHNuaWZmZXI6ICRTbmlmZmVyUHJvdmlkZXIsCi0gICAg
ICAgICR0ZW1wbGF0ZUNhY2hlOiAkVGVtcGxhdGVDYWNoZVByb3ZpZGVyLAotICAgICAgICAkdGlt
ZW91dDogJFRpbWVvdXRQcm92aWRlciwKLSAgICAgICAgJHdpbmRvdzogJFdpbmRvd1Byb3ZpZGVy
Ci0gICAgICB9KTsKLSAgICB9Ci0gIF0pOwotfQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCi0vL0pRTGl0ZQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwot
Ci0vKioKLSAqIEBuZ2RvYyBmdW5jdGlvbgotICogQG5hbWUgYW5ndWxhci5lbGVtZW50Ci0gKiBA
ZnVuY3Rpb24KLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIFdyYXBzIGEgcmF3IERPTSBlbGVtZW50
IG9yIEhUTUwgc3RyaW5nIGFzIGEgW2pRdWVyeV0oaHR0cDovL2pxdWVyeS5jb20pIGVsZW1lbnQu
Ci0gKiBgYW5ndWxhci5lbGVtZW50YCBjYW4gYmUgZWl0aGVyIGFuIGFsaWFzIGZvciBbalF1ZXJ5
XShodHRwOi8vYXBpLmpxdWVyeS5jb20valF1ZXJ5LykgZnVuY3Rpb24sIGlmCi0gKiBqUXVlcnkg
aXMgYXZhaWxhYmxlLCBvciBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgdGhlIGVsZW1lbnQgb3Igc3Ry
aW5nIGluIEFuZ3VsYXIncyBqUXVlcnkgbGl0ZQotICogaW1wbGVtZW50YXRpb24gKGNvbW1vbmx5
IHJlZmVycmVkIHRvIGFzIGpxTGl0ZSkuCi0gKgotICogUmVhbCBqUXVlcnkgYWx3YXlzIHRha2Vz
IHByZWNlZGVuY2Ugb3ZlciBqcUxpdGUsIHByb3ZpZGVkIGl0IHdhcyBsb2FkZWQgYmVmb3JlIGBE
T01Db250ZW50TG9hZGVkYAotICogZXZlbnQgZmlyZWQuCi0gKgotICoganFMaXRlIGlzIGEgdGlu
eSwgQVBJLWNvbXBhdGlibGUgc3Vic2V0IG9mIGpRdWVyeSB0aGF0IGFsbG93cwotICogQW5ndWxh
ciB0byBtYW5pcHVsYXRlIHRoZSBET00uIGpxTGl0ZSBpbXBsZW1lbnRzIG9ubHkgdGhlIG1vc3Qg
Y29tbW9ubHkgbmVlZGVkIGZ1bmN0aW9uYWxpdHkKLSAqIHdpdGhpbiBhIHZlcnkgc21hbGwgZm9v
dHByaW50LCBzbyBvbmx5IGEgc3Vic2V0IG9mIHRoZSBqUXVlcnkgQVBJIC0gbWV0aG9kcywgYXJn
dW1lbnRzIGFuZAotICogaW52b2NhdGlvbiBzdHlsZXMgLSBhcmUgc3VwcG9ydGVkLgotICoKLSAq
IE5vdGU6IEFsbCBlbGVtZW50IHJlZmVyZW5jZXMgaW4gQW5ndWxhciBhcmUgYWx3YXlzIHdyYXBw
ZWQgd2l0aCBqUXVlcnkgb3IganFMaXRlOyB0aGV5IGFyZSBuZXZlcgotICogcmF3IERPTSByZWZl
cmVuY2VzLgotICoKLSAqICMjIEFuZ3VsYXIncyBqUXVlcnkgbGl0ZSBwcm92aWRlcyB0aGUgZm9s
bG93aW5nIG1ldGhvZHM6Ci0gKgotICogLSBbYWRkQ2xhc3MoKV0oaHR0cDovL2FwaS5qcXVlcnku
Y29tL2FkZENsYXNzLykKLSAqIC0gW2FmdGVyKCldKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9hZnRl
ci8pCi0gKiAtIFthcHBlbmQoKV0oaHR0cDovL2FwaS5qcXVlcnkuY29tL2FwcGVuZC8pCi0gKiAt
IFthdHRyKCldKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9hdHRyLykKLSAqIC0gW2JpbmQoKV0oaHR0
cDovL2FwaS5qcXVlcnkuY29tL2JpbmQvKSAtIERvZXMgbm90IHN1cHBvcnQgbmFtZXNwYWNlcwot
ICogLSBbY2hpbGRyZW4oKV0oaHR0cDovL2FwaS5qcXVlcnkuY29tL2NoaWxkcmVuLykgLSBEb2Vz
IG5vdCBzdXBwb3J0IHNlbGVjdG9ycwotICogLSBbY2xvbmUoKV0oaHR0cDovL2FwaS5qcXVlcnku
Y29tL2Nsb25lLykKLSAqIC0gW2NvbnRlbnRzKCldKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9jb250
ZW50cy8pCi0gKiAtIFtjc3MoKV0oaHR0cDovL2FwaS5qcXVlcnkuY29tL2Nzcy8pCi0gKiAtIFtk
YXRhKCldKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9kYXRhLykKLSAqIC0gW2VxKCldKGh0dHA6Ly9h
cGkuanF1ZXJ5LmNvbS9lcS8pCi0gKiAtIFtmaW5kKCldKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9m
aW5kLykgLSBMaW1pdGVkIHRvIGxvb2t1cHMgYnkgdGFnIG5hbWUKLSAqIC0gW2hhc0NsYXNzKCld
KGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9oYXNDbGFzcy8pCi0gKiAtIFtodG1sKCldKGh0dHA6Ly9h
cGkuanF1ZXJ5LmNvbS9odG1sLykKLSAqIC0gW25leHQoKV0oaHR0cDovL2FwaS5qcXVlcnkuY29t
L25leHQvKSAtIERvZXMgbm90IHN1cHBvcnQgc2VsZWN0b3JzCi0gKiAtIFtwYXJlbnQoKV0oaHR0
cDovL2FwaS5qcXVlcnkuY29tL3BhcmVudC8pIC0gRG9lcyBub3Qgc3VwcG9ydCBzZWxlY3RvcnMK
LSAqIC0gW3ByZXBlbmQoKV0oaHR0cDovL2FwaS5qcXVlcnkuY29tL3ByZXBlbmQvKQotICogLSBb
cHJvcCgpXShodHRwOi8vYXBpLmpxdWVyeS5jb20vcHJvcC8pCi0gKiAtIFtyZWFkeSgpXShodHRw
Oi8vYXBpLmpxdWVyeS5jb20vcmVhZHkvKQotICogLSBbcmVtb3ZlKCldKGh0dHA6Ly9hcGkuanF1
ZXJ5LmNvbS9yZW1vdmUvKQotICogLSBbcmVtb3ZlQXR0cigpXShodHRwOi8vYXBpLmpxdWVyeS5j
b20vcmVtb3ZlQXR0ci8pCi0gKiAtIFtyZW1vdmVDbGFzcygpXShodHRwOi8vYXBpLmpxdWVyeS5j
b20vcmVtb3ZlQ2xhc3MvKQotICogLSBbcmVtb3ZlRGF0YSgpXShodHRwOi8vYXBpLmpxdWVyeS5j
b20vcmVtb3ZlRGF0YS8pCi0gKiAtIFtyZXBsYWNlV2l0aCgpXShodHRwOi8vYXBpLmpxdWVyeS5j
b20vcmVwbGFjZVdpdGgvKQotICogLSBbdGV4dCgpXShodHRwOi8vYXBpLmpxdWVyeS5jb20vdGV4
dC8pCi0gKiAtIFt0b2dnbGVDbGFzcygpXShodHRwOi8vYXBpLmpxdWVyeS5jb20vdG9nZ2xlQ2xh
c3MvKQotICogLSBbdHJpZ2dlckhhbmRsZXIoKV0oaHR0cDovL2FwaS5qcXVlcnkuY29tL3RyaWdn
ZXJIYW5kbGVyLykgLSBEb2Vzbid0IHBhc3MgbmF0aXZlIGV2ZW50IG9iamVjdHMgdG8gaGFuZGxl
cnMuCi0gKiAtIFt1bmJpbmQoKV0oaHR0cDovL2FwaS5qcXVlcnkuY29tL3VuYmluZC8pIC0gRG9l
cyBub3Qgc3VwcG9ydCBuYW1lc3BhY2VzCi0gKiAtIFt2YWwoKV0oaHR0cDovL2FwaS5qcXVlcnku
Y29tL3ZhbC8pCi0gKiAtIFt3cmFwKCldKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS93cmFwLykKLSAq
Ci0gKiAjIyBJbiBhZGR0aW9uIHRvIHRoZSBhYm92ZSwgQW5ndWxhciBwcm92aWRlcyBhZGRpdGlv
bmFsIG1ldGhvZHMgdG8gYm90aCBqUXVlcnkgYW5kIGpRdWVyeSBsaXRlOgotICoKLSAqIC0gYGNv
bnRyb2xsZXIobmFtZSlgIC0gcmV0cmlldmVzIHRoZSBjb250cm9sbGVyIG9mIHRoZSBjdXJyZW50
IGVsZW1lbnQgb3IgaXRzIHBhcmVudC4gQnkgZGVmYXVsdAotICogICByZXRyaWV2ZXMgY29udHJv
bGxlciBhc3NvY2lhdGVkIHdpdGggdGhlIGBuZ0NvbnRyb2xsZXJgIGRpcmVjdGl2ZS4gSWYgYG5h
bWVgIGlzIHByb3ZpZGVkIGFzCi0gKiAgIGNhbWVsQ2FzZSBkaXJlY3RpdmUgbmFtZSwgdGhlbiB0
aGUgY29udHJvbGxlciBmb3IgdGhpcyBkaXJlY3RpdmUgd2lsbCBiZSByZXRyaWV2ZWQgKGUuZy4K
LSAqICAgYCduZ01vZGVsJ2ApLgotICogLSBgaW5qZWN0b3IoKWAgLSByZXRyaWV2ZXMgdGhlIGlu
amVjdG9yIG9mIHRoZSBjdXJyZW50IGVsZW1lbnQgb3IgaXRzIHBhcmVudC4KLSAqIC0gYHNjb3Bl
KClgIC0gcmV0cmlldmVzIHRoZSB7QGxpbmsgYXBpL25nLiRyb290U2NvcGUuU2NvcGUgc2NvcGV9
IG9mIHRoZSBjdXJyZW50Ci0gKiAgIGVsZW1lbnQgb3IgaXRzIHBhcmVudC4KLSAqIC0gYGluaGVy
aXRlZERhdGEoKWAgLSBzYW1lIGFzIGBkYXRhKClgLCBidXQgd2Fsa3MgdXAgdGhlIERPTSB1bnRp
bCBhIHZhbHVlIGlzIGZvdW5kIG9yIHRoZSB0b3AKLSAqICAgcGFyZW50IGVsZW1lbnQgaXMgcmVh
Y2hlZC4KLSAqCi0gKiBAcGFyYW0ge3N0cmluZ3xET01FbGVtZW50fSBlbGVtZW50IEhUTUwgc3Ry
aW5nIG9yIERPTUVsZW1lbnQgdG8gYmUgd3JhcHBlZCBpbnRvIGpRdWVyeS4KLSAqIEByZXR1cm5z
IHtPYmplY3R9IGpRdWVyeSBvYmplY3QuCi0gKi8KLQotdmFyIGpxQ2FjaGUgPSBKUUxpdGUuY2Fj
aGUgPSB7fSwKLSAgICBqcU5hbWUgPSBKUUxpdGUuZXhwYW5kbyA9ICduZy0nICsgbmV3IERhdGUo
KS5nZXRUaW1lKCksCi0gICAganFJZCA9IDEsCi0gICAgYWRkRXZlbnRMaXN0ZW5lckZuID0gKHdp
bmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyCi0gICAgICA/IGZ1bmN0aW9uKGVsZW1lbnQs
IHR5cGUsIGZuKSB7ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZuLCBmYWxzZSk7fQot
ICAgICAgOiBmdW5jdGlvbihlbGVtZW50LCB0eXBlLCBmbikge2VsZW1lbnQuYXR0YWNoRXZlbnQo
J29uJyArIHR5cGUsIGZuKTt9KSwKLSAgICByZW1vdmVFdmVudExpc3RlbmVyRm4gPSAod2luZG93
LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIKLSAgICAgID8gZnVuY3Rpb24oZWxlbWVudCwg
dHlwZSwgZm4pIHtlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZm4sIGZhbHNlKTsg
fQotICAgICAgOiBmdW5jdGlvbihlbGVtZW50LCB0eXBlLCBmbikge2VsZW1lbnQuZGV0YWNoRXZl
bnQoJ29uJyArIHR5cGUsIGZuKTsgfSk7Ci0KLWZ1bmN0aW9uIGpxTmV4dElkKCkgeyByZXR1cm4g
KytqcUlkOyB9Ci0KLQotdmFyIFNQRUNJQUxfQ0hBUlNfUkVHRVhQID0gLyhbXDpcLVxfXSsoLikp
L2c7Ci12YXIgTU9aX0hBQ0tfUkVHRVhQID0gL15tb3ooW0EtWl0pLzsKLQotLyoqCi0gKiBDb252
ZXJ0cyBzbmFrZV9jYXNlIHRvIGNhbWVsQ2FzZS4KLSAqIEFsc28gdGhlcmUgaXMgc3BlY2lhbCBj
YXNlIGZvciBNb3ogcHJlZml4IHN0YXJ0aW5nIHdpdGggdXBwZXIgY2FzZSBsZXR0ZXIuCi0gKiBA
cGFyYW0gbmFtZSBOYW1lIHRvIG5vcm1hbGl6ZQotICovCi1mdW5jdGlvbiBjYW1lbENhc2UobmFt
ZSkgewotICByZXR1cm4gbmFtZS4KLSAgICByZXBsYWNlKFNQRUNJQUxfQ0hBUlNfUkVHRVhQLCBm
dW5jdGlvbihfLCBzZXBhcmF0b3IsIGxldHRlciwgb2Zmc2V0KSB7Ci0gICAgICByZXR1cm4gb2Zm
c2V0ID8gbGV0dGVyLnRvVXBwZXJDYXNlKCkgOiBsZXR0ZXI7Ci0gICAgfSkuCi0gICAgcmVwbGFj
ZShNT1pfSEFDS19SRUdFWFAsICdNb3okMScpOwotfQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIGpRdWVyeSBtdXRhdGlvbiBwYXRjaAotLy8KLS8v
ICBJbiBjb25qdW5jdGlvbiB3aXRoIGJpbmRKUXVlcnkgaW50ZXJjZXB0cyBhbGwgalF1ZXJ5J3Mg
RE9NIGRlc3RydWN0aW9uIGFwaXMgYW5kIGZpcmVzIGEKLS8vICRkZXN0cm95IGV2ZW50IG9uIGFs
bCBET00gbm9kZXMgYmVpbmcgcmVtb3ZlZC4KLS8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KLQotZnVuY3Rpb24gSlFMaXRlUGF0Y2hKUXVlcnlSZW1vdmUo
bmFtZSwgZGlzcGF0Y2hUaGlzKSB7Ci0gIHZhciBvcmlnaW5hbEpxRm4gPSBqUXVlcnkuZm5bbmFt
ZV07Ci0gIG9yaWdpbmFsSnFGbiA9IG9yaWdpbmFsSnFGbi4kb3JpZ2luYWwgfHwgb3JpZ2luYWxK
cUZuOwotICByZW1vdmVQYXRjaC4kb3JpZ2luYWwgPSBvcmlnaW5hbEpxRm47Ci0gIGpRdWVyeS5m
bltuYW1lXSA9IHJlbW92ZVBhdGNoOwotCi0gIGZ1bmN0aW9uIHJlbW92ZVBhdGNoKCkgewotICAg
IHZhciBsaXN0ID0gW3RoaXNdLAotICAgICAgICBmaXJlRXZlbnQgPSBkaXNwYXRjaFRoaXMsCi0g
ICAgICAgIHNldCwgc2V0SW5kZXgsIHNldExlbmd0aCwKLSAgICAgICAgZWxlbWVudCwgY2hpbGRJ
bmRleCwgY2hpbGRMZW5ndGgsIGNoaWxkcmVuLAotICAgICAgICBmbnMsIGV2ZW50czsKLQotICAg
IHdoaWxlKGxpc3QubGVuZ3RoKSB7Ci0gICAgICBzZXQgPSBsaXN0LnNoaWZ0KCk7Ci0gICAgICBm
b3Ioc2V0SW5kZXggPSAwLCBzZXRMZW5ndGggPSBzZXQubGVuZ3RoOyBzZXRJbmRleCA8IHNldExl
bmd0aDsgc2V0SW5kZXgrKykgewotICAgICAgICBlbGVtZW50ID0ganFMaXRlKHNldFtzZXRJbmRl
eF0pOwotICAgICAgICBpZiAoZmlyZUV2ZW50KSB7Ci0gICAgICAgICAgZWxlbWVudC50cmlnZ2Vy
SGFuZGxlcignJGRlc3Ryb3knKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBmaXJlRXZl
bnQgPSAhZmlyZUV2ZW50OwotICAgICAgICB9Ci0gICAgICAgIGZvcihjaGlsZEluZGV4ID0gMCwg
Y2hpbGRMZW5ndGggPSAoY2hpbGRyZW4gPSBlbGVtZW50LmNoaWxkcmVuKCkpLmxlbmd0aDsKLSAg
ICAgICAgICAgIGNoaWxkSW5kZXggPCBjaGlsZExlbmd0aDsKLSAgICAgICAgICAgIGNoaWxkSW5k
ZXgrKykgewotICAgICAgICAgIGxpc3QucHVzaChqUXVlcnkoY2hpbGRyZW5bY2hpbGRJbmRleF0p
KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gb3JpZ2luYWxKcUZuLmFw
cGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gIH0KLX0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCi1mdW5jdGlvbiBKUUxpdGUoZWxlbWVudCkgewotICBpZiAo
ZWxlbWVudCBpbnN0YW5jZW9mIEpRTGl0ZSkgewotICAgIHJldHVybiBlbGVtZW50OwotICB9Ci0g
IGlmICghKHRoaXMgaW5zdGFuY2VvZiBKUUxpdGUpKSB7Ci0gICAgaWYgKGlzU3RyaW5nKGVsZW1l
bnQpICYmIGVsZW1lbnQuY2hhckF0KDApICE9ICc8JykgewotICAgICAgdGhyb3cgRXJyb3IoJ3Nl
bGVjdG9ycyBub3QgaW1wbGVtZW50ZWQnKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBKUUxpdGUo
ZWxlbWVudCk7Ci0gIH0KLQotICBpZiAoaXNTdHJpbmcoZWxlbWVudCkpIHsKLSAgICB2YXIgZGl2
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgLy8gUmVhZCBhYm91dCB0aGUg
Tm9TY29wZSBlbGVtZW50cyBoZXJlOgotICAgIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20v
ZW4tdXMvbGlicmFyeS9tczUzMzg5NyhWUy44NSkuYXNweAotICAgIGRpdi5pbm5lckhUTUwgPSAn
PGRpdj4mIzE2MDs8L2Rpdj4nICsgZWxlbWVudDsgLy8gSUUgaW5zYW5pdHkgdG8gbWFrZSBOb1Nj
b3BlIGVsZW1lbnRzIHdvcmshCi0gICAgZGl2LnJlbW92ZUNoaWxkKGRpdi5maXJzdENoaWxkKTsg
Ly8gcmVtb3ZlIHRoZSBzdXBlcmZsdW91cyBkaXYKLSAgICBKUUxpdGVBZGROb2Rlcyh0aGlzLCBk
aXYuY2hpbGROb2Rlcyk7Ci0gICAgdGhpcy5yZW1vdmUoKTsgLy8gZGV0YWNoIHRoZSBlbGVtZW50
cyBmcm9tIHRoZSB0ZW1wb3JhcnkgRE9NIGRpdi4KLSAgfSBlbHNlIHsKLSAgICBKUUxpdGVBZGRO
b2Rlcyh0aGlzLCBlbGVtZW50KTsKLSAgfQotfQotCi1mdW5jdGlvbiBKUUxpdGVDbG9uZShlbGVt
ZW50KSB7Ci0gIHJldHVybiBlbGVtZW50LmNsb25lTm9kZSh0cnVlKTsKLX0KLQotZnVuY3Rpb24g
SlFMaXRlRGVhbG9jKGVsZW1lbnQpewotICBKUUxpdGVSZW1vdmVEYXRhKGVsZW1lbnQpOwotICBm
b3IgKCB2YXIgaSA9IDAsIGNoaWxkcmVuID0gZWxlbWVudC5jaGlsZE5vZGVzIHx8IFtdOyBpIDwg
Y2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKLSAgICBKUUxpdGVEZWFsb2MoY2hpbGRyZW5baV0pOwot
ICB9Ci19Ci0KLWZ1bmN0aW9uIEpRTGl0ZVVuYmluZChlbGVtZW50LCB0eXBlLCBmbikgewotICB2
YXIgZXZlbnRzID0gSlFMaXRlRXhwYW5kb1N0b3JlKGVsZW1lbnQsICdldmVudHMnKSwKLSAgICAg
IGhhbmRsZSA9IEpRTGl0ZUV4cGFuZG9TdG9yZShlbGVtZW50LCAnaGFuZGxlJyk7Ci0KLSAgaWYg
KCFoYW5kbGUpIHJldHVybjsgLy9ubyBsaXN0ZW5lcnMgcmVnaXN0ZXJlZAotCi0gIGlmIChpc1Vu
ZGVmaW5lZCh0eXBlKSkgewotICAgIGZvckVhY2goZXZlbnRzLCBmdW5jdGlvbihldmVudEhhbmRs
ZXIsIHR5cGUpIHsKLSAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXJGbihlbGVtZW50LCB0eXBlLCBl
dmVudEhhbmRsZXIpOwotICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTsKLSAgICB9KTsKLSAgfSBl
bHNlIHsKLSAgICBpZiAoaXNVbmRlZmluZWQoZm4pKSB7Ci0gICAgICByZW1vdmVFdmVudExpc3Rl
bmVyRm4oZWxlbWVudCwgdHlwZSwgZXZlbnRzW3R5cGVdKTsKLSAgICAgIGRlbGV0ZSBldmVudHNb
dHlwZV07Ci0gICAgfSBlbHNlIHsKLSAgICAgIGFycmF5UmVtb3ZlKGV2ZW50c1t0eXBlXSwgZm4p
OwotICAgIH0KLSAgfQotfQotCi1mdW5jdGlvbiBKUUxpdGVSZW1vdmVEYXRhKGVsZW1lbnQpIHsK
LSAgdmFyIGV4cGFuZG9JZCA9IGVsZW1lbnRbanFOYW1lXSwKLSAgICAgIGV4cGFuZG9TdG9yZSA9
IGpxQ2FjaGVbZXhwYW5kb0lkXTsKLQotICBpZiAoZXhwYW5kb1N0b3JlKSB7Ci0gICAgaWYgKGV4
cGFuZG9TdG9yZS5oYW5kbGUpIHsKLSAgICAgIGV4cGFuZG9TdG9yZS5ldmVudHMuJGRlc3Ryb3kg
JiYgZXhwYW5kb1N0b3JlLmhhbmRsZSh7fSwgJyRkZXN0cm95Jyk7Ci0gICAgICBKUUxpdGVVbmJp
bmQoZWxlbWVudCk7Ci0gICAgfQotICAgIGRlbGV0ZSBqcUNhY2hlW2V4cGFuZG9JZF07Ci0gICAg
ZWxlbWVudFtqcU5hbWVdID0gdW5kZWZpbmVkOyAvLyBpZSBkb2VzIG5vdCBhbGxvdyBkZWxldGlv
biBvZiBhdHRyaWJ1dGVzIG9uIGVsZW1lbnRzLgotICB9Ci19Ci0KLWZ1bmN0aW9uIEpRTGl0ZUV4
cGFuZG9TdG9yZShlbGVtZW50LCBrZXksIHZhbHVlKSB7Ci0gIHZhciBleHBhbmRvSWQgPSBlbGVt
ZW50W2pxTmFtZV0sCi0gICAgICBleHBhbmRvU3RvcmUgPSBqcUNhY2hlW2V4cGFuZG9JZCB8fCAt
MV07Ci0KLSAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkpIHsKLSAgICBpZiAoIWV4cGFuZG9TdG9yZSkg
ewotICAgICAgZWxlbWVudFtqcU5hbWVdID0gZXhwYW5kb0lkID0ganFOZXh0SWQoKTsKLSAgICAg
IGV4cGFuZG9TdG9yZSA9IGpxQ2FjaGVbZXhwYW5kb0lkXSA9IHt9OwotICAgIH0KLSAgICBleHBh
bmRvU3RvcmVba2V5XSA9IHZhbHVlOwotICB9IGVsc2UgewotICAgIHJldHVybiBleHBhbmRvU3Rv
cmUgJiYgZXhwYW5kb1N0b3JlW2tleV07Ci0gIH0KLX0KLQotZnVuY3Rpb24gSlFMaXRlRGF0YShl
bGVtZW50LCBrZXksIHZhbHVlKSB7Ci0gIHZhciBkYXRhID0gSlFMaXRlRXhwYW5kb1N0b3JlKGVs
ZW1lbnQsICdkYXRhJyksCi0gICAgICBpc1NldHRlciA9IGlzRGVmaW5lZCh2YWx1ZSksCi0gICAg
ICBrZXlEZWZpbmVkID0gIWlzU2V0dGVyICYmIGlzRGVmaW5lZChrZXkpLAotICAgICAgaXNTaW1w
bGVHZXR0ZXIgPSBrZXlEZWZpbmVkICYmICFpc09iamVjdChrZXkpOwotCi0gIGlmICghZGF0YSAm
JiAhaXNTaW1wbGVHZXR0ZXIpIHsKLSAgICBKUUxpdGVFeHBhbmRvU3RvcmUoZWxlbWVudCwgJ2Rh
dGEnLCBkYXRhID0ge30pOwotICB9Ci0KLSAgaWYgKGlzU2V0dGVyKSB7Ci0gICAgZGF0YVtrZXld
ID0gdmFsdWU7Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKGtleURlZmluZWQpIHsKLSAgICAgIGlmIChp
c1NpbXBsZUdldHRlcikgewotICAgICAgICAvLyBkb24ndCBjcmVhdGUgZGF0YSBpbiB0aGlzIGNh
c2UuCi0gICAgICAgIHJldHVybiBkYXRhICYmIGRhdGFba2V5XTsKLSAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGV4dGVuZChkYXRhLCBrZXkpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBy
ZXR1cm4gZGF0YTsKLSAgICB9Ci0gIH0KLX0KLQotZnVuY3Rpb24gSlFMaXRlSGFzQ2xhc3MoZWxl
bWVudCwgc2VsZWN0b3IpIHsKLSAgcmV0dXJuICgoIiAiICsgZWxlbWVudC5jbGFzc05hbWUgKyAi
ICIpLnJlcGxhY2UoL1tcblx0XS9nLCAiICIpLgotICAgICAgaW5kZXhPZiggIiAiICsgc2VsZWN0
b3IgKyAiICIgKSA+IC0xKTsKLX0KLQotZnVuY3Rpb24gSlFMaXRlUmVtb3ZlQ2xhc3MoZWxlbWVu
dCwgY3NzQ2xhc3NlcykgewotICBpZiAoY3NzQ2xhc3NlcykgewotICAgIGZvckVhY2goY3NzQ2xh
c3Nlcy5zcGxpdCgnICcpLCBmdW5jdGlvbihjc3NDbGFzcykgewotICAgICAgZWxlbWVudC5jbGFz
c05hbWUgPSB0cmltKAotICAgICAgICAgICgiICIgKyBlbGVtZW50LmNsYXNzTmFtZSArICIgIikK
LSAgICAgICAgICAucmVwbGFjZSgvW1xuXHRdL2csICIgIikKLSAgICAgICAgICAucmVwbGFjZSgi
ICIgKyB0cmltKGNzc0NsYXNzKSArICIgIiwgIiAiKQotICAgICAgKTsKLSAgICB9KTsKLSAgfQot
fQotCi1mdW5jdGlvbiBKUUxpdGVBZGRDbGFzcyhlbGVtZW50LCBjc3NDbGFzc2VzKSB7Ci0gIGlm
IChjc3NDbGFzc2VzKSB7Ci0gICAgZm9yRWFjaChjc3NDbGFzc2VzLnNwbGl0KCcgJyksIGZ1bmN0
aW9uKGNzc0NsYXNzKSB7Ci0gICAgICBpZiAoIUpRTGl0ZUhhc0NsYXNzKGVsZW1lbnQsIGNzc0Ns
YXNzKSkgewotICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IHRyaW0oZWxlbWVudC5jbGFzc05h
bWUgKyAnICcgKyB0cmltKGNzc0NsYXNzKSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLX0KLQot
ZnVuY3Rpb24gSlFMaXRlQWRkTm9kZXMocm9vdCwgZWxlbWVudHMpIHsKLSAgaWYgKGVsZW1lbnRz
KSB7Ci0gICAgZWxlbWVudHMgPSAoIWVsZW1lbnRzLm5vZGVOYW1lICYmIGlzRGVmaW5lZChlbGVt
ZW50cy5sZW5ndGgpICYmICFpc1dpbmRvdyhlbGVtZW50cykpCi0gICAgICA/IGVsZW1lbnRzCi0g
ICAgICA6IFsgZWxlbWVudHMgXTsKLSAgICBmb3IodmFyIGk9MDsgaSA8IGVsZW1lbnRzLmxlbmd0
aDsgaSsrKSB7Ci0gICAgICByb290LnB1c2goZWxlbWVudHNbaV0pOwotICAgIH0KLSAgfQotfQot
Ci1mdW5jdGlvbiBKUUxpdGVDb250cm9sbGVyKGVsZW1lbnQsIG5hbWUpIHsKLSAgcmV0dXJuIEpR
TGl0ZUluaGVyaXRlZERhdGEoZWxlbWVudCwgJyQnICsgKG5hbWUgfHwgJ25nQ29udHJvbGxlcicg
KSArICdDb250cm9sbGVyJyk7Ci19Ci0KLWZ1bmN0aW9uIEpRTGl0ZUluaGVyaXRlZERhdGEoZWxl
bWVudCwgbmFtZSwgdmFsdWUpIHsKLSAgZWxlbWVudCA9IGpxTGl0ZShlbGVtZW50KTsKLQotICAv
LyBpZiBlbGVtZW50IGlzIHRoZSBkb2N1bWVudCBvYmplY3Qgd29yayB3aXRoIHRoZSBodG1sIGVs
ZW1lbnQgaW5zdGVhZAotICAvLyB0aGlzIG1ha2VzICQoZG9jdW1lbnQpLnNjb3BlKCkgcG9zc2li
bGUKLSAgaWYoZWxlbWVudFswXS5ub2RlVHlwZSA9PSA5KSB7Ci0gICAgZWxlbWVudCA9IGVsZW1l
bnQuZmluZCgnaHRtbCcpOwotICB9Ci0KLSAgd2hpbGUgKGVsZW1lbnQubGVuZ3RoKSB7Ci0gICAg
aWYgKHZhbHVlID0gZWxlbWVudC5kYXRhKG5hbWUpKSByZXR1cm4gdmFsdWU7Ci0gICAgZWxlbWVu
dCA9IGVsZW1lbnQucGFyZW50KCk7Ci0gIH0KLX0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCi0vLyBGdW5jdGlvbnMgd2hpY2ggYXJlIGRlY2xhcmVkIGRpcmVj
dGx5LgotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi12YXIgSlFM
aXRlUHJvdG90eXBlID0gSlFMaXRlLnByb3RvdHlwZSA9IHsKLSAgcmVhZHk6IGZ1bmN0aW9uKGZu
KSB7Ci0gICAgdmFyIGZpcmVkID0gZmFsc2U7Ci0KLSAgICBmdW5jdGlvbiB0cmlnZ2VyKCkgewot
ICAgICAgaWYgKGZpcmVkKSByZXR1cm47Ci0gICAgICBmaXJlZCA9IHRydWU7Ci0gICAgICBmbigp
OwotICAgIH0KLQotICAgIHRoaXMuYmluZCgnRE9NQ29udGVudExvYWRlZCcsIHRyaWdnZXIpOyAv
LyB3b3JrcyBmb3IgbW9kZXJuIGJyb3dzZXJzIGFuZCBJRTkKLSAgICAvLyB3ZSBjYW4gbm90IHVz
ZSBqcUxpdGUgc2luY2Ugd2UgYXJlIG5vdCBkb25lIGxvYWRpbmcgYW5kIGpRdWVyeSBjb3VsZCBi
ZSBsb2FkZWQgbGF0ZXIuCi0gICAgSlFMaXRlKHdpbmRvdykuYmluZCgnbG9hZCcsIHRyaWdnZXIp
OyAvLyBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkIGZvciBvdGhlcnMKLSAgfSwKLSAgdG9TdHJp
bmc6IGZ1bmN0aW9uKCkgewotICAgIHZhciB2YWx1ZSA9IFtdOwotICAgIGZvckVhY2godGhpcywg
ZnVuY3Rpb24oZSl7IHZhbHVlLnB1c2goJycgKyBlKTt9KTsKLSAgICByZXR1cm4gJ1snICsgdmFs
dWUuam9pbignLCAnKSArICddJzsKLSAgfSwKLQotICBlcTogZnVuY3Rpb24oaW5kZXgpIHsKLSAg
ICAgIHJldHVybiAoaW5kZXggPj0gMCkgPyBqcUxpdGUodGhpc1tpbmRleF0pIDoganFMaXRlKHRo
aXNbdGhpcy5sZW5ndGggKyBpbmRleF0pOwotICB9LAotCi0gIGxlbmd0aDogMCwKLSAgcHVzaDog
cHVzaCwKLSAgc29ydDogW10uc29ydCwKLSAgc3BsaWNlOiBbXS5zcGxpY2UKLX07Ci0KLS8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gRnVuY3Rpb25zIGl0ZXJh
dGluZyBnZXR0ZXIvc2V0dGVycy4KLS8vIHRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gc2VsZiBvbiBz
ZXR0ZXIgYW5kCi0vLyB2YWx1ZSBvbiBnZXQuCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KLXZhciBCT09MRUFOX0FUVFIgPSB7fTsKLWZvckVhY2goJ211bHRpcGxl
LHNlbGVjdGVkLGNoZWNrZWQsZGlzYWJsZWQscmVhZE9ubHkscmVxdWlyZWQnLnNwbGl0KCcsJyks
IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gIEJPT0xFQU5fQVRUUltsb3dlcmNhc2UodmFsdWUpXSA9IHZh
bHVlOwotfSk7Ci12YXIgQk9PTEVBTl9FTEVNRU5UUyA9IHt9OwotZm9yRWFjaCgnaW5wdXQsc2Vs
ZWN0LG9wdGlvbix0ZXh0YXJlYSxidXR0b24sZm9ybScuc3BsaXQoJywnKSwgZnVuY3Rpb24odmFs
dWUpIHsKLSAgQk9PTEVBTl9FTEVNRU5UU1t1cHBlcmNhc2UodmFsdWUpXSA9IHRydWU7Ci19KTsK
LQotZnVuY3Rpb24gZ2V0Qm9vbGVhbkF0dHJOYW1lKGVsZW1lbnQsIG5hbWUpIHsKLSAgLy8gY2hl
Y2sgZG9tIGxhc3Qgc2luY2Ugd2Ugd2lsbCBtb3N0IGxpa2VseSBmYWlsIG9uIG5hbWUKLSAgdmFy
IGJvb2xlYW5BdHRyID0gQk9PTEVBTl9BVFRSW25hbWUudG9Mb3dlckNhc2UoKV07Ci0KLSAgLy8g
Ym9vbGVhbkF0dHIgaXMgaGVyZSB0d2ljZSB0byBtaW5pbWl6ZSBET00gYWNjZXNzCi0gIHJldHVy
biBib29sZWFuQXR0ciAmJiBCT09MRUFOX0VMRU1FTlRTW2VsZW1lbnQubm9kZU5hbWVdICYmIGJv
b2xlYW5BdHRyOwotfQotCi1mb3JFYWNoKHsKLSAgZGF0YTogSlFMaXRlRGF0YSwKLSAgaW5oZXJp
dGVkRGF0YTogSlFMaXRlSW5oZXJpdGVkRGF0YSwKLQotICBzY29wZTogZnVuY3Rpb24oZWxlbWVu
dCkgewotICAgIHJldHVybiBKUUxpdGVJbmhlcml0ZWREYXRhKGVsZW1lbnQsICckc2NvcGUnKTsK
LSAgfSwKLQotICBjb250cm9sbGVyOiBKUUxpdGVDb250cm9sbGVyICwKLQotICBpbmplY3Rvcjog
ZnVuY3Rpb24oZWxlbWVudCkgewotICAgIHJldHVybiBKUUxpdGVJbmhlcml0ZWREYXRhKGVsZW1l
bnQsICckaW5qZWN0b3InKTsKLSAgfSwKLQotICByZW1vdmVBdHRyOiBmdW5jdGlvbihlbGVtZW50
LG5hbWUpIHsKLSAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTsKLSAgfSwKLQotICBo
YXNDbGFzczogSlFMaXRlSGFzQ2xhc3MsCi0KLSAgY3NzOiBmdW5jdGlvbihlbGVtZW50LCBuYW1l
LCB2YWx1ZSkgewotICAgIG5hbWUgPSBjYW1lbENhc2UobmFtZSk7Ci0KLSAgICBpZiAoaXNEZWZp
bmVkKHZhbHVlKSkgewotICAgICAgZWxlbWVudC5zdHlsZVtuYW1lXSA9IHZhbHVlOwotICAgIH0g
ZWxzZSB7Ci0gICAgICB2YXIgdmFsOwotCi0gICAgICBpZiAobXNpZSA8PSA4KSB7Ci0gICAgICAg
IC8vIHRoaXMgaXMgc29tZSBJRSBzcGVjaWZpYyB3ZWlyZG5lc3MgdGhhdCBqUXVlcnkgMS42LjQg
ZG9lcyBub3Qgc3VyZSB3aHkKLSAgICAgICAgdmFsID0gZWxlbWVudC5jdXJyZW50U3R5bGUgJiYg
ZWxlbWVudC5jdXJyZW50U3R5bGVbbmFtZV07Ci0gICAgICAgIGlmICh2YWwgPT09ICcnKSB2YWwg
PSAnYXV0byc7Ci0gICAgICB9Ci0KLSAgICAgIHZhbCA9IHZhbCB8fCBlbGVtZW50LnN0eWxlW25h
bWVdOwotCi0gICAgICBpZiAobXNpZSA8PSA4KSB7Ci0gICAgICAgIC8vIGpxdWVyeSB3ZWlyZG5l
c3MgOi0vCi0gICAgICAgIHZhbCA9ICh2YWwgPT09ICcnKSA/IHVuZGVmaW5lZCA6IHZhbDsKLSAg
ICAgIH0KLQotICAgICAgcmV0dXJuICB2YWw7Ci0gICAgfQotICB9LAotCi0gIGF0dHI6IGZ1bmN0
aW9uKGVsZW1lbnQsIG5hbWUsIHZhbHVlKXsKLSAgICB2YXIgbG93ZXJjYXNlZE5hbWUgPSBsb3dl
cmNhc2UobmFtZSk7Ci0gICAgaWYgKEJPT0xFQU5fQVRUUltsb3dlcmNhc2VkTmFtZV0pIHsKLSAg
ICAgIGlmIChpc0RlZmluZWQodmFsdWUpKSB7Ci0gICAgICAgIGlmICghIXZhbHVlKSB7Ci0gICAg
ICAgICAgZWxlbWVudFtuYW1lXSA9IHRydWU7Ci0gICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1
dGUobmFtZSwgbG93ZXJjYXNlZE5hbWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGVs
ZW1lbnRbbmFtZV0gPSBmYWxzZTsKLSAgICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShs
b3dlcmNhc2VkTmFtZSk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVy
biAoZWxlbWVudFtuYW1lXSB8fAotICAgICAgICAgICAgICAgICAoZWxlbWVudC5hdHRyaWJ1dGVz
LmdldE5hbWVkSXRlbShuYW1lKXx8IG5vb3ApLnNwZWNpZmllZCkKLSAgICAgICAgICAgICAgID8g
bG93ZXJjYXNlZE5hbWUKLSAgICAgICAgICAgICAgIDogdW5kZWZpbmVkOwotICAgICAgfQotICAg
IH0gZWxzZSBpZiAoaXNEZWZpbmVkKHZhbHVlKSkgewotICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1
dGUobmFtZSwgdmFsdWUpOwotICAgIH0gZWxzZSBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUpIHsK
LSAgICAgIC8vIHRoZSBleHRyYSBhcmd1bWVudCAiMiIgaXMgdG8gZ2V0IHRoZSByaWdodCB0aGlu
ZyBmb3IgYS5ocmVmIGluIElFLCBzZWUgalF1ZXJ5IGNvZGUKLSAgICAgIC8vIHNvbWUgZWxlbWVu
dHMgKGUuZy4gRG9jdW1lbnQpIGRvbid0IGhhdmUgZ2V0IGF0dHJpYnV0ZSwgc28gcmV0dXJuIHVu
ZGVmaW5lZAotICAgICAgdmFyIHJldCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKG5hbWUsIDIpOwot
ICAgICAgLy8gbm9ybWFsaXplIG5vbi1leGlzdGluZyBhdHRyaWJ1dGVzIHRvIHVuZGVmaW5lZCAo
YXMgalF1ZXJ5KQotICAgICAgcmV0dXJuIHJldCA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IHJldDsK
LSAgICB9Ci0gIH0sCi0KLSAgcHJvcDogZnVuY3Rpb24oZWxlbWVudCwgbmFtZSwgdmFsdWUpIHsK
LSAgICBpZiAoaXNEZWZpbmVkKHZhbHVlKSkgewotICAgICAgZWxlbWVudFtuYW1lXSA9IHZhbHVl
OwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gZWxlbWVudFtuYW1lXTsKLSAgICB9Ci0gIH0s
Ci0KLSAgdGV4dDogZXh0ZW5kKChtc2llIDwgOSkKLSAgICAgID8gZnVuY3Rpb24oZWxlbWVudCwg
dmFsdWUpIHsKLSAgICAgICAgaWYgKGVsZW1lbnQubm9kZVR5cGUgPT0gMSAvKiogRWxlbWVudCAq
LykgewotICAgICAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1
cm4gZWxlbWVudC5pbm5lclRleHQ7Ci0gICAgICAgICAgZWxlbWVudC5pbm5lclRleHQgPSB2YWx1
ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKQot
ICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQubm9kZVZhbHVlOwotICAgICAgICAgIGVsZW1lbnQu
bm9kZVZhbHVlID0gdmFsdWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIDogZnVuY3Rpb24o
ZWxlbWVudCwgdmFsdWUpIHsKLSAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSkgewotICAg
ICAgICAgIHJldHVybiBlbGVtZW50LnRleHRDb250ZW50OwotICAgICAgICB9Ci0gICAgICAgIGVs
ZW1lbnQudGV4dENvbnRlbnQgPSB2YWx1ZTsKLSAgICAgIH0sIHskZHY6Jyd9KSwKLQotICB2YWw6
IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlKSB7Ci0gICAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSkg
ewotICAgICAgcmV0dXJuIGVsZW1lbnQudmFsdWU7Ci0gICAgfQotICAgIGVsZW1lbnQudmFsdWUg
PSB2YWx1ZTsKLSAgfSwKLQotICBodG1sOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZSkgewotICAg
IGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpIHsKLSAgICAgIHJldHVybiBlbGVtZW50LmlubmVySFRN
TDsKLSAgICB9Ci0gICAgZm9yICh2YXIgaSA9IDAsIGNoaWxkTm9kZXMgPSBlbGVtZW50LmNoaWxk
Tm9kZXM7IGkgPCBjaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBKUUxpdGVEZWFsb2Mo
Y2hpbGROb2Rlc1tpXSk7Ci0gICAgfQotICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gdmFsdWU7Ci0g
IH0KLX0sIGZ1bmN0aW9uKGZuLCBuYW1lKXsKLSAgLyoqCi0gICAqIFByb3BlcnRpZXM6IHdyaXRl
cyByZXR1cm4gc2VsZWN0aW9uLCByZWFkcyByZXR1cm4gZmlyc3QgdmFsdWUKLSAgICovCi0gIEpR
TGl0ZS5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbihhcmcxLCBhcmcyKSB7Ci0gICAgdmFyIGks
IGtleTsKLQotICAgIC8vIEpRTGl0ZUhhc0NsYXNzIGhhcyBvbmx5IHR3byBhcmd1bWVudHMsIGJ1
dCBpcyBhIGdldHRlci1vbmx5IGZuLCBzbyB3ZSBuZWVkIHRvIHNwZWNpYWwtY2FzZSBpdAotICAg
IC8vIGluIGEgd2F5IHRoYXQgc3Vydml2ZXMgbWluaWZpY2F0aW9uLgotICAgIGlmICgoKGZuLmxl
bmd0aCA9PSAyICYmIChmbiAhPT0gSlFMaXRlSGFzQ2xhc3MgJiYgZm4gIT09IEpRTGl0ZUNvbnRy
b2xsZXIpKSA/IGFyZzEgOiBhcmcyKSA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICBpZiAoaXNPYmpl
Y3QoYXJnMSkpIHsKLQotICAgICAgICAvLyB3ZSBhcmUgYSB3cml0ZSwgYnV0IHRoZSBvYmplY3Qg
cHJvcGVydGllcyBhcmUgdGhlIGtleS92YWx1ZXMKLSAgICAgICAgZm9yKGk9MDsgaSA8IHRoaXMu
bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICBpZiAoZm4gPT09IEpRTGl0ZURhdGEpIHsKLSAgICAg
ICAgICAgIC8vIGRhdGEoKSB0YWtlcyB0aGUgd2hvbGUgb2JqZWN0IGluIGpRdWVyeQotICAgICAg
ICAgICAgZm4odGhpc1tpXSwgYXJnMSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGZvciAoa2V5IGluIGFyZzEpIHsKLSAgICAgICAgICAgICAgZm4odGhpc1tpXSwga2V5LCBhcmcx
W2tleV0pOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAv
LyByZXR1cm4gc2VsZiBmb3IgY2hhaW5pbmcKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICB9
IGVsc2UgewotICAgICAgICAvLyB3ZSBhcmUgYSByZWFkLCBzbyByZWFkIHRoZSBmaXJzdCBjaGls
ZC4KLSAgICAgICAgaWYgKHRoaXMubGVuZ3RoKQotICAgICAgICAgIHJldHVybiBmbih0aGlzWzBd
LCBhcmcxLCBhcmcyKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgLy8gd2UgYXJlIGEg
d3JpdGUsIHNvIGFwcGx5IHRvIGFsbCBjaGlsZHJlbgotICAgICAgZm9yKGk9MDsgaSA8IHRoaXMu
bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgZm4odGhpc1tpXSwgYXJnMSwgYXJnMik7Ci0gICAgICB9
Ci0gICAgICAvLyByZXR1cm4gc2VsZiBmb3IgY2hhaW5pbmcKLSAgICAgIHJldHVybiB0aGlzOwot
ICAgIH0KLSAgICByZXR1cm4gZm4uJGR2OwotICB9OwotfSk7Ci0KLWZ1bmN0aW9uIGNyZWF0ZUV2
ZW50SGFuZGxlcihlbGVtZW50LCBldmVudHMpIHsKLSAgdmFyIGV2ZW50SGFuZGxlciA9IGZ1bmN0
aW9uIChldmVudCwgdHlwZSkgewotICAgIGlmICghZXZlbnQucHJldmVudERlZmF1bHQpIHsKLSAg
ICAgIGV2ZW50LnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIGV2ZW50LnJl
dHVyblZhbHVlID0gZmFsc2U7IC8vaWUKLSAgICAgIH07Ci0gICAgfQotCi0gICAgaWYgKCFldmVu
dC5zdG9wUHJvcGFnYXRpb24pIHsKLSAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0
aW9uKCkgewotICAgICAgICBldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlOyAvL2llCi0gICAgICB9
OwotICAgIH0KLQotICAgIGlmICghZXZlbnQudGFyZ2V0KSB7Ci0gICAgICBldmVudC50YXJnZXQg
PSBldmVudC5zcmNFbGVtZW50IHx8IGRvY3VtZW50OwotICAgIH0KLQotICAgIGlmIChpc1VuZGVm
aW5lZChldmVudC5kZWZhdWx0UHJldmVudGVkKSkgewotICAgICAgdmFyIHByZXZlbnQgPSBldmVu
dC5wcmV2ZW50RGVmYXVsdDsKLSAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24o
KSB7Ci0gICAgICAgIGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOwotICAgICAgICBwcmV2
ZW50LmNhbGwoZXZlbnQpOwotICAgICAgfTsKLSAgICAgIGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQg
PSBmYWxzZTsKLSAgICB9Ci0KLSAgICBldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBmdW5jdGlv
bigpIHsKLSAgICAgIHJldHVybiBldmVudC5kZWZhdWx0UHJldmVudGVkOwotICAgIH07Ci0KLSAg
ICBmb3JFYWNoKGV2ZW50c1t0eXBlIHx8IGV2ZW50LnR5cGVdLCBmdW5jdGlvbihmbikgewotICAg
ICAgZm4uY2FsbChlbGVtZW50LCBldmVudCk7Ci0gICAgfSk7Ci0KLSAgICAvLyBSZW1vdmUgbW9u
a2V5LXBhdGNoZWQgbWV0aG9kcyAoSUUpLAotICAgIC8vIGFzIHRoZXkgd291bGQgY2F1c2UgbWVt
b3J5IGxlYWtzIGluIElFOC4KLSAgICBpZiAobXNpZSA8PSA4KSB7Ci0gICAgICAvLyBJRTcvOCBk
b2VzIG5vdCBhbGxvdyB0byBkZWxldGUgcHJvcGVydHkgb24gbmF0aXZlIG9iamVjdAotICAgICAg
ZXZlbnQucHJldmVudERlZmF1bHQgPSBudWxsOwotICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9u
ID0gbnVsbDsKLSAgICAgIGV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCA9IG51bGw7Ci0gICAgfSBl
bHNlIHsKLSAgICAgIC8vIEl0IHNob3VsZG4ndCBhZmZlY3Qgbm9ybWFsIGJyb3dzZXJzIChuYXRp
dmUgbWV0aG9kcyBhcmUgZGVmaW5lZCBvbiBwcm90b3R5cGUpLgotICAgICAgZGVsZXRlIGV2ZW50
LnByZXZlbnREZWZhdWx0OwotICAgICAgZGVsZXRlIGV2ZW50LnN0b3BQcm9wYWdhdGlvbjsKLSAg
ICAgIGRlbGV0ZSBldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQ7Ci0gICAgfQotICB9OwotICBldmVu
dEhhbmRsZXIuZWxlbSA9IGVsZW1lbnQ7Ci0gIHJldHVybiBldmVudEhhbmRsZXI7Ci19Ci0KLS8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gRnVuY3Rpb25zIGl0
ZXJhdGluZyB0cmF2ZXJzYWwuCi0vLyBUaGVzZSBmdW5jdGlvbnMgY2hhaW4gcmVzdWx0cyBpbnRv
IGEgc2luZ2xlCi0vLyBzZWxlY3Rvci4KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLwotZm9yRWFjaCh7Ci0gIHJlbW92ZURhdGE6IEpRTGl0ZVJlbW92ZURhdGEsCi0K
LSAgZGVhbG9jOiBKUUxpdGVEZWFsb2MsCi0KLSAgYmluZDogZnVuY3Rpb24gYmluZEZuKGVsZW1l
bnQsIHR5cGUsIGZuKXsKLSAgICB2YXIgZXZlbnRzID0gSlFMaXRlRXhwYW5kb1N0b3JlKGVsZW1l
bnQsICdldmVudHMnKSwKLSAgICAgICAgaGFuZGxlID0gSlFMaXRlRXhwYW5kb1N0b3JlKGVsZW1l
bnQsICdoYW5kbGUnKTsKLQotICAgIGlmICghZXZlbnRzKSBKUUxpdGVFeHBhbmRvU3RvcmUoZWxl
bWVudCwgJ2V2ZW50cycsIGV2ZW50cyA9IHt9KTsKLSAgICBpZiAoIWhhbmRsZSkgSlFMaXRlRXhw
YW5kb1N0b3JlKGVsZW1lbnQsICdoYW5kbGUnLCBoYW5kbGUgPSBjcmVhdGVFdmVudEhhbmRsZXIo
ZWxlbWVudCwgZXZlbnRzKSk7Ci0KLSAgICBmb3JFYWNoKHR5cGUuc3BsaXQoJyAnKSwgZnVuY3Rp
b24odHlwZSl7Ci0gICAgICB2YXIgZXZlbnRGbnMgPSBldmVudHNbdHlwZV07Ci0KLSAgICAgIGlm
ICghZXZlbnRGbnMpIHsKLSAgICAgICAgaWYgKHR5cGUgPT0gJ21vdXNlZW50ZXInIHx8IHR5cGUg
PT0gJ21vdXNlbGVhdmUnKSB7Ci0gICAgICAgICAgdmFyIGNvbnRhaW5zID0gZG9jdW1lbnQuYm9k
eS5jb250YWlucyB8fCBkb2N1bWVudC5ib2R5LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uID8KLSAg
ICAgICAgICBmdW5jdGlvbiggYSwgYiApIHsKLSAgICAgICAgICAgIHZhciBhZG93biA9IGEubm9k
ZVR5cGUgPT09IDkgPyBhLmRvY3VtZW50RWxlbWVudCA6IGEsCi0gICAgICAgICAgICBidXAgPSBi
ICYmIGIucGFyZW50Tm9kZTsKLSAgICAgICAgICAgIHJldHVybiBhID09PSBidXAgfHwgISEoIGJ1
cCAmJiBidXAubm9kZVR5cGUgPT09IDEgJiYgKAotICAgICAgICAgICAgICBhZG93bi5jb250YWlu
cyA/Ci0gICAgICAgICAgICAgIGFkb3duLmNvbnRhaW5zKCBidXAgKSA6Ci0gICAgICAgICAgICAg
IGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gJiYgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbigg
YnVwICkgJiAxNgotICAgICAgICAgICAgICApKTsKLSAgICAgICAgICAgIH0gOgotICAgICAgICAg
ICAgZnVuY3Rpb24oIGEsIGIgKSB7Ci0gICAgICAgICAgICAgIGlmICggYiApIHsKLSAgICAgICAg
ICAgICAgICB3aGlsZSAoIChiID0gYi5wYXJlbnROb2RlKSApIHsKLSAgICAgICAgICAgICAgICAg
IGlmICggYiA9PT0gYSApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICBldmVu
dHNbdHlwZV0gPSBbXTsKLQotICAgICAgICAgIC8vIFJlZmVyIHRvIGpRdWVyeSdzIGltcGxlbWVu
dGF0aW9uIG9mIG1vdXNlZW50ZXIgJiBtb3VzZWxlYXZlCi0gICAgICAgICAgLy8gUmVhZCBhYm91
dCBtb3VzZWVudGVyIGFuZCBtb3VzZWxlYXZlOgotICAgICAgICAgIC8vIGh0dHA6Ly93d3cucXVp
cmtzbW9kZS5vcmcvanMvZXZlbnRzX21vdXNlLmh0bWwjbGluazgKLSAgICAgICAgICB2YXIgZXZl
bnRtYXAgPSB7IG1vdXNlbGVhdmUgOiAibW91c2VvdXQiLCBtb3VzZWVudGVyIDogIm1vdXNlb3Zl
ciJ9ICAgICAgICAgIAotICAgICAgICAgIGJpbmRGbihlbGVtZW50LCBldmVudG1hcFt0eXBlXSwg
ZnVuY3Rpb24oZXZlbnQpIHsKLSAgICAgICAgICAgIHZhciByZXQsIHRhcmdldCA9IHRoaXMsIHJl
bGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0OwotICAgICAgICAgICAgLy8gRm9yIG1vdXNlbnRl
ci9sZWF2ZSBjYWxsIHRoZSBoYW5kbGVyIGlmIHJlbGF0ZWQgaXMgb3V0c2lkZSB0aGUgdGFyZ2V0
LgotICAgICAgICAgICAgLy8gTkI6IE5vIHJlbGF0ZWRUYXJnZXQgaWYgdGhlIG1vdXNlIGxlZnQv
ZW50ZXJlZCB0aGUgYnJvd3NlciB3aW5kb3cKLSAgICAgICAgICAgIGlmICggIXJlbGF0ZWQgfHwg
KHJlbGF0ZWQgIT09IHRhcmdldCAmJiAhY29udGFpbnModGFyZ2V0LCByZWxhdGVkKSkgKXsKLSAg
ICAgICAgICAgICAgaGFuZGxlKGV2ZW50LCB0eXBlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgIH0pOwotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgYWRkRXZlbnRMaXN0ZW5lckZu
KGVsZW1lbnQsIHR5cGUsIGhhbmRsZSk7Ci0gICAgICAgICAgZXZlbnRzW3R5cGVdID0gW107Ci0g
ICAgICAgIH0KLSAgICAgICAgZXZlbnRGbnMgPSBldmVudHNbdHlwZV0KLSAgICAgIH0KLSAgICAg
IGV2ZW50Rm5zLnB1c2goZm4pOwotICAgIH0pOwotICB9LAotCi0gIHVuYmluZDogSlFMaXRlVW5i
aW5kLAotCi0gIHJlcGxhY2VXaXRoOiBmdW5jdGlvbihlbGVtZW50LCByZXBsYWNlTm9kZSkgewot
ICAgIHZhciBpbmRleCwgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlOwotICAgIEpRTGl0ZURl
YWxvYyhlbGVtZW50KTsKLSAgICBmb3JFYWNoKG5ldyBKUUxpdGUocmVwbGFjZU5vZGUpLCBmdW5j
dGlvbihub2RlKXsKLSAgICAgIGlmIChpbmRleCkgewotICAgICAgICBwYXJlbnQuaW5zZXJ0QmVm
b3JlKG5vZGUsIGluZGV4Lm5leHRTaWJsaW5nKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHBh
cmVudC5yZXBsYWNlQ2hpbGQobm9kZSwgZWxlbWVudCk7Ci0gICAgICB9Ci0gICAgICBpbmRleCA9
IG5vZGU7Ci0gICAgfSk7Ci0gIH0sCi0KLSAgY2hpbGRyZW46IGZ1bmN0aW9uKGVsZW1lbnQpIHsK
LSAgICB2YXIgY2hpbGRyZW4gPSBbXTsKLSAgICBmb3JFYWNoKGVsZW1lbnQuY2hpbGROb2Rlcywg
ZnVuY3Rpb24oZWxlbWVudCl7Ci0gICAgICBpZiAoZWxlbWVudC5ub2RlVHlwZSA9PT0gMSkKLSAg
ICAgICAgY2hpbGRyZW4ucHVzaChlbGVtZW50KTsKLSAgICB9KTsKLSAgICByZXR1cm4gY2hpbGRy
ZW47Ci0gIH0sCi0KLSAgY29udGVudHM6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICByZXR1cm4g
ZWxlbWVudC5jaGlsZE5vZGVzIHx8IFtdOwotICB9LAotCi0gIGFwcGVuZDogZnVuY3Rpb24oZWxl
bWVudCwgbm9kZSkgewotICAgIGZvckVhY2gobmV3IEpRTGl0ZShub2RlKSwgZnVuY3Rpb24oY2hp
bGQpewotICAgICAgaWYgKGVsZW1lbnQubm9kZVR5cGUgPT09IDEpCi0gICAgICAgIGVsZW1lbnQu
YXBwZW5kQ2hpbGQoY2hpbGQpOwotICAgIH0pOwotICB9LAotCi0gIHByZXBlbmQ6IGZ1bmN0aW9u
KGVsZW1lbnQsIG5vZGUpIHsKLSAgICBpZiAoZWxlbWVudC5ub2RlVHlwZSA9PT0gMSkgewotICAg
ICAgdmFyIGluZGV4ID0gZWxlbWVudC5maXJzdENoaWxkOwotICAgICAgZm9yRWFjaChuZXcgSlFM
aXRlKG5vZGUpLCBmdW5jdGlvbihjaGlsZCl7Ci0gICAgICAgIGlmIChpbmRleCkgewotICAgICAg
ICAgIGVsZW1lbnQuaW5zZXJ0QmVmb3JlKGNoaWxkLCBpbmRleCk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7Ci0gICAgICAgICAgaW5kZXgg
PSBjaGlsZDsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgfQotICB9LAotCi0gIHdyYXA6IGZ1
bmN0aW9uKGVsZW1lbnQsIHdyYXBOb2RlKSB7Ci0gICAgd3JhcE5vZGUgPSBqcUxpdGUod3JhcE5v
ZGUpWzBdOwotICAgIHZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7Ci0gICAgaWYgKHBh
cmVudCkgewotICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZCh3cmFwTm9kZSwgZWxlbWVudCk7Ci0g
ICAgfQotICAgIHdyYXBOb2RlLmFwcGVuZENoaWxkKGVsZW1lbnQpOwotICB9LAotCi0gIHJlbW92
ZTogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIEpRTGl0ZURlYWxvYyhlbGVtZW50KTsKLSAgICB2
YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlOwotICAgIGlmIChwYXJlbnQpIHBhcmVudC5y
ZW1vdmVDaGlsZChlbGVtZW50KTsKLSAgfSwKLQotICBhZnRlcjogZnVuY3Rpb24oZWxlbWVudCwg
bmV3RWxlbWVudCkgewotICAgIHZhciBpbmRleCA9IGVsZW1lbnQsIHBhcmVudCA9IGVsZW1lbnQu
cGFyZW50Tm9kZTsKLSAgICBmb3JFYWNoKG5ldyBKUUxpdGUobmV3RWxlbWVudCksIGZ1bmN0aW9u
KG5vZGUpewotICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShub2RlLCBpbmRleC5uZXh0U2libGlu
Zyk7Ci0gICAgICBpbmRleCA9IG5vZGU7Ci0gICAgfSk7Ci0gIH0sCi0KLSAgYWRkQ2xhc3M6IEpR
TGl0ZUFkZENsYXNzLAotICByZW1vdmVDbGFzczogSlFMaXRlUmVtb3ZlQ2xhc3MsCi0KLSAgdG9n
Z2xlQ2xhc3M6IGZ1bmN0aW9uKGVsZW1lbnQsIHNlbGVjdG9yLCBjb25kaXRpb24pIHsKLSAgICBp
ZiAoaXNVbmRlZmluZWQoY29uZGl0aW9uKSkgewotICAgICAgY29uZGl0aW9uID0gIUpRTGl0ZUhh
c0NsYXNzKGVsZW1lbnQsIHNlbGVjdG9yKTsKLSAgICB9Ci0gICAgKGNvbmRpdGlvbiA/IEpRTGl0
ZUFkZENsYXNzIDogSlFMaXRlUmVtb3ZlQ2xhc3MpKGVsZW1lbnQsIHNlbGVjdG9yKTsKLSAgfSwK
LQotICBwYXJlbnQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICB2YXIgcGFyZW50ID0gZWxlbWVu
dC5wYXJlbnROb2RlOwotICAgIHJldHVybiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSAx
MSA/IHBhcmVudCA6IG51bGw7Ci0gIH0sCi0KLSAgbmV4dDogZnVuY3Rpb24oZWxlbWVudCkgewot
ICAgIGlmIChlbGVtZW50Lm5leHRFbGVtZW50U2libGluZykgewotICAgICAgcmV0dXJuIGVsZW1l
bnQubmV4dEVsZW1lbnRTaWJsaW5nOwotICAgIH0KLQotICAgIC8vIElFOCBkb2Vzbid0IGhhdmUg
bmV4dEVsZW1lbnRTaWJsaW5nCi0gICAgdmFyIGVsbSA9IGVsZW1lbnQubmV4dFNpYmxpbmc7Ci0g
ICAgd2hpbGUgKGVsbSAhPSBudWxsICYmIGVsbS5ub2RlVHlwZSAhPT0gMSkgewotICAgICAgZWxt
ID0gZWxtLm5leHRTaWJsaW5nOwotICAgIH0KLSAgICByZXR1cm4gZWxtOwotICB9LAotCi0gIGZp
bmQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHNlbGVjdG9yKSB7Ci0gICAgcmV0dXJuIGVsZW1lbnQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoc2VsZWN0b3IpOwotICB9LAotCi0gIGNsb25lOiBKUUxpdGVDbG9u
ZSwKLQotICB0cmlnZ2VySGFuZGxlcjogZnVuY3Rpb24oZWxlbWVudCwgZXZlbnROYW1lKSB7Ci0g
ICAgdmFyIGV2ZW50Rm5zID0gKEpRTGl0ZUV4cGFuZG9TdG9yZShlbGVtZW50LCAnZXZlbnRzJykg
fHwge30pW2V2ZW50TmFtZV07Ci0KLSAgICBmb3JFYWNoKGV2ZW50Rm5zLCBmdW5jdGlvbihmbikg
ewotICAgICAgZm4uY2FsbChlbGVtZW50LCBudWxsKTsKLSAgICB9KTsKLSAgfQotfSwgZnVuY3Rp
b24oZm4sIG5hbWUpewotICAvKioKLSAgICogY2hhaW5pbmcgZnVuY3Rpb25zCi0gICAqLwotICBK
UUxpdGUucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oYXJnMSwgYXJnMikgewotICAgIHZhciB2
YWx1ZTsKLSAgICBmb3IodmFyIGk9MDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGlm
ICh2YWx1ZSA9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgdmFsdWUgPSBmbih0aGlzW2ldLCBhcmcx
LCBhcmcyKTsKLSAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAv
LyBhbnkgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhIHZhbHVlIG5lZWRzIHRvIGJlIHdyYXBwZWQK
LSAgICAgICAgICB2YWx1ZSA9IGpxTGl0ZSh2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgIEpRTGl0ZUFkZE5vZGVzKHZhbHVlLCBmbih0aGlzW2ldLCBhcmcxLCBhcmcy
KSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB2YWx1ZSA9PSB1bmRlZmluZWQgPyB0aGlz
IDogdmFsdWU7Ci0gIH07Ci19KTsKLQotLyoqCi0gKiBDb21wdXRlcyBhIGhhc2ggb2YgYW4gJ29i
aicuCi0gKiBIYXNoIG9mIGE6Ci0gKiAgc3RyaW5nIGlzIHN0cmluZwotICogIG51bWJlciBpcyBu
dW1iZXIgYXMgc3RyaW5nCi0gKiAgb2JqZWN0IGlzIGVpdGhlciByZXN1bHQgb2YgY2FsbGluZyAk
JGhhc2hLZXkgZnVuY3Rpb24gb24gdGhlIG9iamVjdCBvciB1bmlxdWVseSBnZW5lcmF0ZWQgaWQs
Ci0gKiAgICAgICAgIHRoYXQgaXMgYWxzbyBhc3NpZ25lZCB0byB0aGUgJCRoYXNoS2V5IHByb3Bl
cnR5IG9mIHRoZSBvYmplY3QuCi0gKgotICogQHBhcmFtIG9iagotICogQHJldHVybnMge3N0cmlu
Z30gaGFzaCBzdHJpbmcgc3VjaCB0aGF0IHRoZSBzYW1lIGlucHV0IHdpbGwgaGF2ZSB0aGUgc2Ft
ZSBoYXNoIHN0cmluZy4KLSAqICAgICAgICAgVGhlIHJlc3VsdGluZyBzdHJpbmcga2V5IGlzIGlu
ICd0eXBlOmhhc2hLZXknIGZvcm1hdC4KLSAqLwotZnVuY3Rpb24gaGFzaEtleShvYmopIHsKLSAg
dmFyIG9ialR5cGUgPSB0eXBlb2Ygb2JqLAotICAgICAga2V5OwotCi0gIGlmIChvYmpUeXBlID09
ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCkgewotICAgIGlmICh0eXBlb2YgKGtleSA9IG9iai4k
JGhhc2hLZXkpID09ICdmdW5jdGlvbicpIHsKLSAgICAgIC8vIG11c3QgaW52b2tlIG9uIG9iamVj
dCB0byBrZWVwIHRoZSByaWdodCB0aGlzCi0gICAgICBrZXkgPSBvYmouJCRoYXNoS2V5KCk7Ci0g
ICAgfSBlbHNlIGlmIChrZXkgPT09IHVuZGVmaW5lZCkgewotICAgICAga2V5ID0gb2JqLiQkaGFz
aEtleSA9IG5leHRVaWQoKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAga2V5ID0gb2JqOwotICB9
Ci0KLSAgcmV0dXJuIG9ialR5cGUgKyAnOicgKyBrZXk7Ci19Ci0KLS8qKgotICogSGFzaE1hcCB3
aGljaCBjYW4gdXNlIG9iamVjdHMgYXMga2V5cwotICovCi1mdW5jdGlvbiBIYXNoTWFwKGFycmF5
KXsKLSAgZm9yRWFjaChhcnJheSwgdGhpcy5wdXQsIHRoaXMpOwotfQotSGFzaE1hcC5wcm90b3R5
cGUgPSB7Ci0gIC8qKgotICAgKiBTdG9yZSBrZXkgdmFsdWUgcGFpcgotICAgKiBAcGFyYW0ga2V5
IGtleSB0byBzdG9yZSBjYW4gYmUgYW55IHR5cGUKLSAgICogQHBhcmFtIHZhbHVlIHZhbHVlIHRv
IHN0b3JlIGNhbiBiZSBhbnkgdHlwZQotICAgKi8KLSAgcHV0OiBmdW5jdGlvbihrZXksIHZhbHVl
KSB7Ci0gICAgdGhpc1toYXNoS2V5KGtleSldID0gdmFsdWU7Ci0gIH0sCi0KLSAgLyoqCi0gICAq
IEBwYXJhbSBrZXkKLSAgICogQHJldHVybnMgdGhlIHZhbHVlIGZvciB0aGUga2V5Ci0gICAqLwot
ICBnZXQ6IGZ1bmN0aW9uKGtleSkgewotICAgIHJldHVybiB0aGlzW2hhc2hLZXkoa2V5KV07Ci0g
IH0sCi0KLSAgLyoqCi0gICAqIFJlbW92ZSB0aGUga2V5L3ZhbHVlIHBhaXIKLSAgICogQHBhcmFt
IGtleQotICAgKi8KLSAgcmVtb3ZlOiBmdW5jdGlvbihrZXkpIHsKLSAgICB2YXIgdmFsdWUgPSB0
aGlzW2tleSA9IGhhc2hLZXkoa2V5KV07Ci0gICAgZGVsZXRlIHRoaXNba2V5XTsKLSAgICByZXR1
cm4gdmFsdWU7Ci0gIH0KLX07Ci0KLS8qKgotICogQSBtYXAgd2hlcmUgbXVsdGlwbGUgdmFsdWVz
IGNhbiBiZSBhZGRlZCB0byB0aGUgc2FtZSBrZXkgc3VjaCB0aGF0IHRoZXkgZm9ybSBhIHF1ZXVl
LgotICogQHJldHVybnMge0hhc2hRdWV1ZU1hcH0KLSAqLwotZnVuY3Rpb24gSGFzaFF1ZXVlTWFw
KCkge30KLUhhc2hRdWV1ZU1hcC5wcm90b3R5cGUgPSB7Ci0gIC8qKgotICAgKiBTYW1lIGFzIGFy
cmF5IHB1c2gsIGJ1dCB1c2luZyBhbiBhcnJheSBhcyB0aGUgdmFsdWUgZm9yIHRoZSBoYXNoCi0g
ICAqLwotICBwdXNoOiBmdW5jdGlvbihrZXksIHZhbHVlKSB7Ci0gICAgdmFyIGFycmF5ID0gdGhp
c1trZXkgPSBoYXNoS2V5KGtleSldOwotICAgIGlmICghYXJyYXkpIHsKLSAgICAgIHRoaXNba2V5
XSA9IFt2YWx1ZV07Ci0gICAgfSBlbHNlIHsKLSAgICAgIGFycmF5LnB1c2godmFsdWUpOwotICAg
IH0KLSAgfSwKLQotICAvKioKLSAgICogU2FtZSBhcyBhcnJheSBzaGlmdCwgYnV0IHVzaW5nIGFu
IGFycmF5IGFzIHRoZSB2YWx1ZSBmb3IgdGhlIGhhc2gKLSAgICovCi0gIHNoaWZ0OiBmdW5jdGlv
bihrZXkpIHsKLSAgICB2YXIgYXJyYXkgPSB0aGlzW2tleSA9IGhhc2hLZXkoa2V5KV07Ci0gICAg
aWYgKGFycmF5KSB7Ci0gICAgICBpZiAoYXJyYXkubGVuZ3RoID09IDEpIHsKLSAgICAgICAgZGVs
ZXRlIHRoaXNba2V5XTsKLSAgICAgICAgcmV0dXJuIGFycmF5WzBdOwotICAgICAgfSBlbHNlIHsK
LSAgICAgICAgcmV0dXJuIGFycmF5LnNoaWZ0KCk7Ci0gICAgICB9Ci0gICAgfQotICB9LAotCi0g
IC8qKgotICAgKiByZXR1cm4gdGhlIGZpcnN0IGl0ZW0gd2l0aG91dCBkZWxldGluZyBpdAotICAg
Ki8KLSAgcGVlazogZnVuY3Rpb24oa2V5KSB7Ci0gICAgdmFyIGFycmF5ID0gdGhpc1toYXNoS2V5
KGtleSldOwotICAgIGlmIChhcnJheSkgewotICAgIHJldHVybiBhcnJheVswXTsKLSAgICB9Ci0g
IH0KLX07Ci0KLS8qKgotICogQG5nZG9jIGZ1bmN0aW9uCi0gKiBAbmFtZSBhbmd1bGFyLmluamVj
dG9yCi0gKiBAZnVuY3Rpb24KLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIENyZWF0ZXMgYW4gaW5q
ZWN0b3IgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCBmb3IgcmV0cmlldmluZyBzZXJ2aWNlcyBh
cyB3ZWxsIGFzIGZvcgotICogZGVwZW5kZW5jeSBpbmplY3Rpb24gKHNlZSB7QGxpbmsgZ3VpZGUv
ZGkgZGVwZW5kZW5jeSBpbmplY3Rpb259KS4KLSAqCi0KLSAqIEBwYXJhbSB7QXJyYXkuPHN0cmlu
Z3xGdW5jdGlvbj59IG1vZHVsZXMgQSBsaXN0IG9mIG1vZHVsZSBmdW5jdGlvbnMgb3IgdGhlaXIg
YWxpYXNlcy4gU2VlCi0gKiAgICAgICAge0BsaW5rIGFuZ3VsYXIubW9kdWxlfS4gVGhlIGBuZ2Ag
bW9kdWxlIG11c3QgYmUgZXhwbGljaXRseSBhZGRlZC4KLSAqIEByZXR1cm5zIHtmdW5jdGlvbigp
fSBJbmplY3RvciBmdW5jdGlvbi4gU2VlIHtAbGluayBBVVRPLiRpbmplY3RvciAkaW5qZWN0b3J9
LgotICoKLSAqIEBleGFtcGxlCi0gKiBUeXBpY2FsIHVzYWdlCi0gKiA8cHJlPgotICogICAvLyBj
cmVhdGUgYW4gaW5qZWN0b3IKLSAqICAgdmFyICRpbmplY3RvciA9IGFuZ3VsYXIuaW5qZWN0b3Io
WyduZyddKTsKLSAqCi0gKiAgIC8vIHVzZSB0aGUgaW5qZWN0b3IgdG8ga2ljayBvZmYgeW91ciBh
cHBsaWNhdGlvbgotICogICAvLyB1c2UgdGhlIHR5cGUgaW5mZXJlbmNlIHRvIGF1dG8gaW5qZWN0
IGFyZ3VtZW50cywgb3IgdXNlIGltcGxpY2l0IGluamVjdGlvbgotICogICAkaW5qZWN0b3IuaW52
b2tlKGZ1bmN0aW9uKCRyb290U2NvcGUsICRjb21waWxlLCAkZG9jdW1lbnQpewotICogICAgICRj
b21waWxlKCRkb2N1bWVudCkoJHJvb3RTY29wZSk7Ci0gKiAgICAgJHJvb3RTY29wZS4kZGlnZXN0
KCk7Ci0gKiAgIH0pOwotICogPC9wcmU+Ci0gKi8KLQotCi0vKioKLSAqIEBuZ2RvYyBvdmVydmll
dwotICogQG5hbWUgQVVUTwotICogQGRlc2NyaXB0aW9uCi0gKgotICogSW1wbGljaXQgbW9kdWxl
IHdoaWNoIGdldHMgYXV0b21hdGljYWxseSBhZGRlZCB0byBlYWNoIHtAbGluayBBVVRPLiRpbmpl
Y3RvciAkaW5qZWN0b3J9LgotICovCi0KLXZhciBGTl9BUkdTID0gL15mdW5jdGlvblxzKlteXChd
KlwoXHMqKFteXCldKilcKS9tOwotdmFyIEZOX0FSR19TUExJVCA9IC8sLzsKLXZhciBGTl9BUkcg
PSAvXlxzKihfPykoXFMrPylcMVxzKiQvOwotdmFyIFNUUklQX0NPTU1FTlRTID0gLygoXC9cLy4q
JCl8KFwvXCpbXHNcU10qP1wqXC8pKS9tZzsKLWZ1bmN0aW9uIGFubm90YXRlKGZuKSB7Ci0gIHZh
ciAkaW5qZWN0LAotICAgICAgZm5UZXh0LAotICAgICAgYXJnRGVjbCwKLSAgICAgIGxhc3Q7Ci0K
LSAgaWYgKHR5cGVvZiBmbiA9PSAnZnVuY3Rpb24nKSB7Ci0gICAgaWYgKCEoJGluamVjdCA9IGZu
LiRpbmplY3QpKSB7Ci0gICAgICAkaW5qZWN0ID0gW107Ci0gICAgICBmblRleHQgPSBmbi50b1N0
cmluZygpLnJlcGxhY2UoU1RSSVBfQ09NTUVOVFMsICcnKTsKLSAgICAgIGFyZ0RlY2wgPSBmblRl
eHQubWF0Y2goRk5fQVJHUyk7Ci0gICAgICBmb3JFYWNoKGFyZ0RlY2xbMV0uc3BsaXQoRk5fQVJH
X1NQTElUKSwgZnVuY3Rpb24oYXJnKXsKLSAgICAgICAgYXJnLnJlcGxhY2UoRk5fQVJHLCBmdW5j
dGlvbihhbGwsIHVuZGVyc2NvcmUsIG5hbWUpewotICAgICAgICAgICRpbmplY3QucHVzaChuYW1l
KTsKLSAgICAgICAgfSk7Ci0gICAgICB9KTsKLSAgICAgIGZuLiRpbmplY3QgPSAkaW5qZWN0Owot
ICAgIH0KLSAgfSBlbHNlIGlmIChpc0FycmF5KGZuKSkgewotICAgIGxhc3QgPSBmbi5sZW5ndGgg
LSAxOwotICAgIGFzc2VydEFyZ0ZuKGZuW2xhc3RdLCAnZm4nKTsKLSAgICAkaW5qZWN0ID0gZm4u
c2xpY2UoMCwgbGFzdCk7Ci0gIH0gZWxzZSB7Ci0gICAgYXNzZXJ0QXJnRm4oZm4sICdmbicsIHRy
dWUpOwotICB9Ci0gIHJldHVybiAkaW5qZWN0OwotfQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KLQotLyoqCi0gKiBAbmdkb2Mgb2JqZWN0Ci0gKiBAbmFtZSBBVVRP
LiRpbmplY3RvcgotICogQGZ1bmN0aW9uCi0gKgotICogQGRlc2NyaXB0aW9uCi0gKgotICogYCRp
bmplY3RvcmAgaXMgdXNlZCB0byByZXRyaWV2ZSBvYmplY3QgaW5zdGFuY2VzIGFzIGRlZmluZWQg
YnkKLSAqIHtAbGluayBBVVRPLiRwcm92aWRlIHByb3ZpZGVyfSwgaW5zdGFudGlhdGUgdHlwZXMs
IGludm9rZSBtZXRob2RzLAotICogYW5kIGxvYWQgbW9kdWxlcy4KLSAqCi0gKiBUaGUgZm9sbG93
aW5nIGFsd2F5cyBob2xkcyB0cnVlOgotICoKLSAqIDxwcmU+Ci0gKiAgIHZhciAkaW5qZWN0b3Ig
PSBhbmd1bGFyLmluamVjdG9yKCk7Ci0gKiAgIGV4cGVjdCgkaW5qZWN0b3IuZ2V0KCckaW5qZWN0
b3InKSkudG9CZSgkaW5qZWN0b3IpOwotICogICBleHBlY3QoJGluamVjdG9yLmludm9rZShmdW5j
dGlvbigkaW5qZWN0b3IpewotICogICAgIHJldHVybiAkaW5qZWN0b3I7Ci0gKiAgIH0pLnRvQmUo
JGluamVjdG9yKTsKLSAqIDwvcHJlPgotICoKLSAqICMgSW5qZWN0aW9uIEZ1bmN0aW9uIEFubm90
YXRpb24KLSAqCi0gKiBKYXZhU2NyaXB0IGRvZXMgbm90IGhhdmUgYW5ub3RhdGlvbnMsIGFuZCBh
bm5vdGF0aW9ucyBhcmUgbmVlZGVkIGZvciBkZXBlbmRlbmN5IGluamVjdGlvbi4gVGhlCi0gKiBm
b2xsb3dpbmcgYXJlIGFsbCB2YWxpZCB3YXlzIG9mIGFubm90YXRpbmcgZnVuY3Rpb24gd2l0aCBp
bmplY3Rpb24gYXJndW1lbnRzIGFuZCBhcmUgZXF1aXZhbGVudC4KLSAqCi0gKiA8cHJlPgotICog
ICAvLyBpbmZlcnJlZCAob25seSB3b3JrcyBpZiBjb2RlIG5vdCBtaW5pZmllZC9vYmZ1c2NhdGVk
KQotICogICAkaW5qZWN0b3IuaW52b2tlKGZ1bmN0aW9uKHNlcnZpY2VBKXt9KTsKLSAqCi0gKiAg
IC8vIGFubm90YXRlZAotICogICBmdW5jdGlvbiBleHBsaWNpdChzZXJ2aWNlQSkge307Ci0gKiAg
IGV4cGxpY2l0LiRpbmplY3QgPSBbJ3NlcnZpY2VBJ107Ci0gKiAgICRpbmplY3Rvci5pbnZva2Uo
ZXhwbGljaXQpOwotICoKLSAqICAgLy8gaW5saW5lCi0gKiAgICRpbmplY3Rvci5pbnZva2UoWydz
ZXJ2aWNlQScsIGZ1bmN0aW9uKHNlcnZpY2VBKXt9XSk7Ci0gKiA8L3ByZT4KLSAqCi0gKiAjIyBJ
bmZlcmVuY2UKLSAqCi0gKiBJbiBKYXZhU2NyaXB0IGNhbGxpbmcgYHRvU3RyaW5nKClgIG9uIGEg
ZnVuY3Rpb24gcmV0dXJucyB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gVGhlIGRlZmluaXRpb24g
Y2FuIHRoZW4gYmUKLSAqIHBhcnNlZCBhbmQgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50cyBjYW4gYmUg
ZXh0cmFjdGVkLiAqTk9URToqIFRoaXMgZG9lcyBub3Qgd29yayB3aXRoIG1pbmlmaWNhdGlvbiwg
YW5kIG9iZnVzY2F0aW9uCi0gKiB0b29scyBzaW5jZSB0aGVzZSB0b29scyBjaGFuZ2UgdGhlIGFy
Z3VtZW50IG5hbWVzLgotICoKLSAqICMjIGAkaW5qZWN0YCBBbm5vdGF0aW9uCi0gKiBCeSBhZGRp
bmcgYSBgJGluamVjdGAgcHJvcGVydHkgb250byBhIGZ1bmN0aW9uIHRoZSBpbmplY3Rpb24gcGFy
YW1ldGVycyBjYW4gYmUgc3BlY2lmaWVkLgotICoKLSAqICMjIElubGluZQotICogQXMgYW4gYXJy
YXkgb2YgaW5qZWN0aW9uIG5hbWVzLCB3aGVyZSB0aGUgbGFzdCBpdGVtIGluIHRoZSBhcnJheSBp
cyB0aGUgZnVuY3Rpb24gdG8gY2FsbC4KLSAqLwotCi0vKioKLSAqIEBuZ2RvYyBtZXRob2QKLSAq
IEBuYW1lIEFVVE8uJGluamVjdG9yI2dldAotICogQG1ldGhvZE9mIEFVVE8uJGluamVjdG9yCi0g
KgotICogQGRlc2NyaXB0aW9uCi0gKiBSZXR1cm4gYW4gaW5zdGFuY2Ugb2YgdGhlIHNlcnZpY2Uu
Ci0gKgotICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGluc3RhbmNlIHRv
IHJldHJpZXZlLgotICogQHJldHVybiB7Kn0gVGhlIGluc3RhbmNlLgotICovCi0KLS8qKgotICog
QG5nZG9jIG1ldGhvZAotICogQG5hbWUgQVVUTy4kaW5qZWN0b3IjaW52b2tlCi0gKiBAbWV0aG9k
T2YgQVVUTy4kaW5qZWN0b3IKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIEludm9rZSB0aGUgbWV0
aG9kIGFuZCBzdXBwbHkgdGhlIG1ldGhvZCBhcmd1bWVudHMgZnJvbSB0aGUgYCRpbmplY3RvcmAu
Ci0gKgotICogQHBhcmFtIHshZnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuIFRo
ZSBmdW5jdGlvbiBhcmd1bWVudHMgY29tZSBmb3JtIHRoZSBmdW5jdGlvbiBhbm5vdGF0aW9uLgot
ICogQHBhcmFtIHtPYmplY3Q9fSBzZWxmIFRoZSBgdGhpc2AgZm9yIHRoZSBpbnZva2VkIG1ldGhv
ZC4KLSAqIEBwYXJhbSB7T2JqZWN0PX0gbG9jYWxzIE9wdGlvbmFsIG9iamVjdC4gSWYgcHJlc2V0
IHRoZW4gYW55IGFyZ3VtZW50IG5hbWVzIGFyZSByZWFkIGZyb20gdGhpcyBvYmplY3QgZmlyc3Qs
IGJlZm9yZQotICogICB0aGUgYCRpbmplY3RvcmAgaXMgY29uc3VsdGVkLgotICogQHJldHVybnMg
eyp9IHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgaW52b2tlZCBgZm5gIGZ1bmN0aW9uLgotICov
Ci0KLS8qKgotICogQG5nZG9jIG1ldGhvZAotICogQG5hbWUgQVVUTy4kaW5qZWN0b3IjaW5zdGFu
dGlhdGUKLSAqIEBtZXRob2RPZiBBVVRPLiRpbmplY3RvcgotICogQGRlc2NyaXB0aW9uCi0gKiBD
cmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgSlMgdHlwZS4gVGhlIG1ldGhvZCB0YWtlcyBhIGNvbnN0
cnVjdG9yIGZ1bmN0aW9uIGludm9rZXMgdGhlIG5ldyBvcGVyYXRvciBhbmQgc3VwcGxpZXMKLSAq
IGFsbCBvZiB0aGUgYXJndW1lbnRzIHRvIHRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBhcyBzcGVj
aWZpZWQgYnkgdGhlIGNvbnN0cnVjdG9yIGFubm90YXRpb24uCi0gKgotICogQHBhcmFtIHtmdW5j
dGlvbn0gVHlwZSBBbm5vdGF0ZWQgY29uc3RydWN0b3IgZnVuY3Rpb24uCi0gKiBAcGFyYW0ge09i
amVjdD19IGxvY2FscyBPcHRpb25hbCBvYmplY3QuIElmIHByZXNldCB0aGVuIGFueSBhcmd1bWVu
dCBuYW1lcyBhcmUgcmVhZCBmcm9tIHRoaXMgb2JqZWN0IGZpcnN0LCBiZWZvcmUKLSAqICAgdGhl
IGAkaW5qZWN0b3JgIGlzIGNvbnN1bHRlZC4KLSAqIEByZXR1cm5zIHtPYmplY3R9IG5ldyBpbnN0
YW5jZSBvZiBgVHlwZWAuCi0gKi8KLQotLyoqCi0gKiBAbmdkb2MgbWV0aG9kCi0gKiBAbmFtZSBB
VVRPLiRpbmplY3RvciNhbm5vdGF0ZQotICogQG1ldGhvZE9mIEFVVE8uJGluamVjdG9yCi0gKgot
ICogQGRlc2NyaXB0aW9uCi0gKiBSZXR1cm5zIGFuIGFycmF5IG9mIHNlcnZpY2UgbmFtZXMgd2hp
Y2ggdGhlIGZ1bmN0aW9uIGlzIHJlcXVlc3RpbmcgZm9yIGluamVjdGlvbi4gVGhpcyBBUEkgaXMg
dXNlZCBieSB0aGUgaW5qZWN0b3IKLSAqIHRvIGRldGVybWluZSB3aGljaCBzZXJ2aWNlcyBuZWVk
IHRvIGJlIGluamVjdGVkIGludG8gdGhlIGZ1bmN0aW9uIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGlu
dm9rZWQuIFRoZXJlIGFyZSB0aHJlZQotICogd2F5cyBpbiB3aGljaCB0aGUgZnVuY3Rpb24gY2Fu
IGJlIGFubm90YXRlZCB3aXRoIHRoZSBuZWVkZWQgZGVwZW5kZW5jaWVzLgotICoKLSAqICMgQXJn
dW1lbnQgbmFtZXMKLSAqCi0gKiBUaGUgc2ltcGxlc3QgZm9ybSBpcyB0byBleHRyYWN0IHRoZSBk
ZXBlbmRlbmNpZXMgZnJvbSB0aGUgYXJndW1lbnRzIG9mIHRoZSBmdW5jdGlvbi4gVGhpcyBpcyBk
b25lIGJ5IGNvbnZlcnRpbmcKLSAqIHRoZSBmdW5jdGlvbiBpbnRvIGEgc3RyaW5nIHVzaW5nIGB0
b1N0cmluZygpYCBtZXRob2QgYW5kIGV4dHJhY3RpbmcgdGhlIGFyZ3VtZW50IG5hbWVzLgotICog
PHByZT4KLSAqICAgLy8gR2l2ZW4KLSAqICAgZnVuY3Rpb24gTXlDb250cm9sbGVyKCRzY29wZSwg
JHJvdXRlKSB7Ci0gKiAgICAgLy8gLi4uCi0gKiAgIH0KLSAqCi0gKiAgIC8vIFRoZW4KLSAqICAg
ZXhwZWN0KGluamVjdG9yLmFubm90YXRlKE15Q29udHJvbGxlcikpLnRvRXF1YWwoWyckc2NvcGUn
LCAnJHJvdXRlJ10pOwotICogPC9wcmU+Ci0gKgotICogVGhpcyBtZXRob2QgZG9lcyBub3Qgd29y
ayB3aXRoIGNvZGUgbWluZmljYXRpb24gLyBvYmZ1c2NhdGlvbi4gRm9yIHRoaXMgcmVhc29uIHRo
ZSBmb2xsb3dpbmcgYW5ub3RhdGlvbiBzdHJhdGVnaWVzCi0gKiBhcmUgc3VwcG9ydGVkLgotICoK
LSAqICMgVGhlIGAkaW5qZWN0YCBwcm9wZXJ0eQotICoKLSAqIElmIGEgZnVuY3Rpb24gaGFzIGFu
IGAkaW5qZWN0YCBwcm9wZXJ0eSBhbmQgaXRzIHZhbHVlIGlzIGFuIGFycmF5IG9mIHN0cmluZ3Ms
IHRoZW4gdGhlIHN0cmluZ3MgcmVwcmVzZW50IG5hbWVzIG9mCi0gKiBzZXJ2aWNlcyB0byBiZSBp
bmplY3RlZCBpbnRvIHRoZSBmdW5jdGlvbi4KLSAqIDxwcmU+Ci0gKiAgIC8vIEdpdmVuCi0gKiAg
IHZhciBNeUNvbnRyb2xsZXIgPSBmdW5jdGlvbihvYmZ1c2NhdGVkU2NvcGUsIG9iZnVzY2F0ZWRS
b3V0ZSkgewotICogICAgIC8vIC4uLgotICogICB9Ci0gKiAgIC8vIERlZmluZSBmdW5jdGlvbiBk
ZXBlbmRlbmNpZXMKLSAqICAgTXlDb250cm9sbGVyLiRpbmplY3QgPSBbJyRzY29wZScsICckcm91
dGUnXTsKLSAqCi0gKiAgIC8vIFRoZW4KLSAqICAgZXhwZWN0KGluamVjdG9yLmFubm90YXRlKE15
Q29udHJvbGxlcikpLnRvRXF1YWwoWyckc2NvcGUnLCAnJHJvdXRlJ10pOwotICogPC9wcmU+Ci0g
KgotICogIyBUaGUgYXJyYXkgbm90YXRpb24KLSAqCi0gKiBJdCBpcyBvZnRlbiBkZXNpcmFibGUg
dG8gaW5saW5lIEluamVjdGVkIGZ1bmN0aW9ucyBhbmQgdGhhdCdzIHdoZW4gc2V0dGluZyB0aGUg
YCRpbmplY3RgIHByb3BlcnR5IGlzIHZlcnkKLSAqIGluY29udmVuaWVudC4gSW4gdGhlc2Ugc2l0
dWF0aW9ucyB1c2luZyB0aGUgYXJyYXkgbm90YXRpb24gdG8gc3BlY2lmeSB0aGUgZGVwZW5kZW5j
aWVzIGluIGEgd2F5IHRoYXQgc3Vydml2ZXMKLSAqIG1pbmlmaWNhdGlvbiBpcyBhIGJldHRlciBj
aG9pY2U6Ci0gKgotICogPHByZT4KLSAqICAgLy8gV2Ugd2lzaCB0byB3cml0ZSB0aGlzIChub3Qg
bWluaWZpY2F0aW9uIC8gb2JmdXNjYXRpb24gc2FmZSkKLSAqICAgaW5qZWN0b3IuaW52b2tlKGZ1
bmN0aW9uKCRjb21waWxlLCAkcm9vdFNjb3BlKSB7Ci0gKiAgICAgLy8gLi4uCi0gKiAgIH0pOwot
ICoKLSAqICAgLy8gV2UgYXJlIGZvcmNlZCB0byB3cml0ZSBicmVhayBpbmxpbmluZwotICogICB2
YXIgdG1wRm4gPSBmdW5jdGlvbihvYmZ1c2NhdGVkQ29tcGlsZSwgb2JmdXNjYXRlZFJvb3RTY29w
ZSkgewotICogICAgIC8vIC4uLgotICogICB9OwotICogICB0bXBGbi4kaW5qZWN0ID0gWyckY29t
cGlsZScsICckcm9vdFNjb3BlJ107Ci0gKiAgIGluamVjdG9yLmludm9rZSh0bXBGbik7Ci0gKgot
ICogICAvLyBUbyBiZXR0ZXIgc3VwcG9ydCBpbmxpbmUgZnVuY3Rpb24gdGhlIGlubGluZSBhbm5v
dGF0aW9uIGlzIHN1cHBvcnRlZAotICogICBpbmplY3Rvci5pbnZva2UoWyckY29tcGlsZScsICck
cm9vdFNjb3BlJywgZnVuY3Rpb24ob2JmQ29tcGlsZSwgb2JmUm9vdFNjb3BlKSB7Ci0gKiAgICAg
Ly8gLi4uCi0gKiAgIH1dKTsKLSAqCi0gKiAgIC8vIFRoZXJlZm9yZQotICogICBleHBlY3QoaW5q
ZWN0b3IuYW5ub3RhdGUoCi0gKiAgICAgIFsnJGNvbXBpbGUnLCAnJHJvb3RTY29wZScsIGZ1bmN0
aW9uKG9iZnVzXyRjb21waWxlLCBvYmZ1c18kcm9vdFNjb3BlKSB7fV0pCi0gKiAgICApLnRvRXF1
YWwoWyckY29tcGlsZScsICckcm9vdFNjb3BlJ10pOwotICogPC9wcmU+Ci0gKgotICogQHBhcmFt
IHtmdW5jdGlvbnxBcnJheS48c3RyaW5nfEZ1bmN0aW9uPn0gZm4gRnVuY3Rpb24gZm9yIHdoaWNo
IGRlcGVuZGVudCBzZXJ2aWNlIG5hbWVzIG5lZWQgdG8gYmUgcmV0cmlldmVkIGFzIGRlc2NyaWJl
ZAotICogICBhYm92ZS4KLSAqCi0gKiBAcmV0dXJucyB7QXJyYXkuPHN0cmluZz59IFRoZSBuYW1l
cyBvZiB0aGUgc2VydmljZXMgd2hpY2ggdGhlIGZ1bmN0aW9uIHJlcXVpcmVzLgotICovCi0KLQot
Ci0KLS8qKgotICogQG5nZG9jIG9iamVjdAotICogQG5hbWUgQVVUTy4kcHJvdmlkZQotICoKLSAq
IEBkZXNjcmlwdGlvbgotICoKLSAqIFVzZSBgJHByb3ZpZGVgIHRvIHJlZ2lzdGVyIG5ldyBwcm92
aWRlcnMgd2l0aCB0aGUgYCRpbmplY3RvcmAuIFRoZSBwcm92aWRlcnMgYXJlIHRoZSBmYWN0b3Jp
ZXMgZm9yIHRoZSBpbnN0YW5jZS4KLSAqIFRoZSBwcm92aWRlcnMgc2hhcmUgdGhlIHNhbWUgbmFt
ZSBhcyB0aGUgaW5zdGFuY2UgdGhleSBjcmVhdGUgd2l0aCBgUHJvdmlkZXJgIHN1ZmZpeGVkIHRv
IHRoZW0uCi0gKgotICogQSBwcm92aWRlciBpcyBhbiBvYmplY3Qgd2l0aCBhIGAkZ2V0KClgIG1l
dGhvZC4gVGhlIGluamVjdG9yIGNhbGxzIHRoZSBgJGdldGAgbWV0aG9kIHRvIGNyZWF0ZSBhIG5l
dyBpbnN0YW5jZSBvZgotICogYSBzZXJ2aWNlLiBUaGUgUHJvdmlkZXIgY2FuIGhhdmUgYWRkaXRp
b25hbCBtZXRob2RzIHdoaWNoIHdvdWxkIGFsbG93IGZvciBjb25maWd1cmF0aW9uIG9mIHRoZSBw
cm92aWRlci4KLSAqCi0gKiA8cHJlPgotICogICBmdW5jdGlvbiBHcmVldFByb3ZpZGVyKCkgewot
ICogICAgIHZhciBzYWx1dGF0aW9uID0gJ0hlbGxvJzsKLSAqCi0gKiAgICAgdGhpcy5zYWx1dGF0
aW9uID0gZnVuY3Rpb24odGV4dCkgewotICogICAgICAgc2FsdXRhdGlvbiA9IHRleHQ7Ci0gKiAg
ICAgfTsKLSAqCi0gKiAgICAgdGhpcy4kZ2V0ID0gZnVuY3Rpb24oKSB7Ci0gKiAgICAgICByZXR1
cm4gZnVuY3Rpb24gKG5hbWUpIHsKLSAqICAgICAgICAgcmV0dXJuIHNhbHV0YXRpb24gKyAnICcg
KyBuYW1lICsgJyEnOwotICogICAgICAgfTsKLSAqICAgICB9OwotICogICB9Ci0gKgotICogICBk
ZXNjcmliZSgnR3JlZXRlcicsIGZ1bmN0aW9uKCl7Ci0gKgotICogICAgIGJlZm9yZUVhY2gobW9k
dWxlKGZ1bmN0aW9uKCRwcm92aWRlKSB7Ci0gKiAgICAgICAkcHJvdmlkZS5wcm92aWRlcignZ3Jl
ZXQnLCBHcmVldFByb3ZpZGVyKTsKLSAqICAgICB9KSk7Ci0gKgotICogICAgIGl0KCdzaG91bGQg
Z3JlZXQnLCBpbmplY3QoZnVuY3Rpb24oZ3JlZXQpIHsKLSAqICAgICAgIGV4cGVjdChncmVldCgn
YW5ndWxhcicpKS50b0VxdWFsKCdIZWxsbyBhbmd1bGFyIScpOwotICogICAgIH0pKTsKLSAqCi0g
KiAgICAgaXQoJ3Nob3VsZCBhbGxvdyBjb25maWd1cmF0aW9uIG9mIHNhbHV0YXRpb24nLCBmdW5j
dGlvbigpIHsKLSAqICAgICAgIG1vZHVsZShmdW5jdGlvbihncmVldFByb3ZpZGVyKSB7Ci0gKiAg
ICAgICAgIGdyZWV0UHJvdmlkZXIuc2FsdXRhdGlvbignQWhvaicpOwotICogICAgICAgfSk7Ci0g
KiAgICAgICBpbmplY3QoZnVuY3Rpb24oZ3JlZXQpIHsKLSAqICAgICAgICAgZXhwZWN0KGdyZWV0
KCdhbmd1bGFyJykpLnRvRXF1YWwoJ0Fob2ogYW5ndWxhciEnKTsKLSAqICAgICAgIH0pOwotICog
ICAgIH0pOwotICogPC9wcmU+Ci0gKi8KLQotLyoqCi0gKiBAbmdkb2MgbWV0aG9kCi0gKiBAbmFt
ZSBBVVRPLiRwcm92aWRlI3Byb3ZpZGVyCi0gKiBAbWV0aG9kT2YgQVVUTy4kcHJvdmlkZQotICog
QGRlc2NyaXB0aW9uCi0gKgotICogUmVnaXN0ZXIgYSBwcm92aWRlciBmb3IgYSBzZXJ2aWNlLiBU
aGUgcHJvdmlkZXJzIGNhbiBiZSByZXRyaWV2ZWQgYW5kIGNhbiBoYXZlIGFkZGl0aW9uYWwgY29u
ZmlndXJhdGlvbiBtZXRob2RzLgotICoKLSAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1l
IG9mIHRoZSBpbnN0YW5jZS4gTk9URTogdGhlIHByb3ZpZGVyIHdpbGwgYmUgYXZhaWxhYmxlIHVu
ZGVyIGBuYW1lICsgJ1Byb3ZpZGVyJ2Aga2V5LgotICogQHBhcmFtIHsoT2JqZWN0fGZ1bmN0aW9u
KCkpfSBwcm92aWRlciBJZiB0aGUgcHJvdmlkZXIgaXM6Ci0gKgotICogICAtIGBPYmplY3RgOiB0
aGVuIGl0IHNob3VsZCBoYXZlIGEgYCRnZXRgIG1ldGhvZC4gVGhlIGAkZ2V0YCBtZXRob2Qgd2ls
bCBiZSBpbnZva2VkIHVzaW5nCi0gKiAgICAgICAgICAgICAgIHtAbGluayBBVVRPLiRpbmplY3Rv
ciNpbnZva2UgJGluamVjdG9yLmludm9rZSgpfSB3aGVuIGFuIGluc3RhbmNlIG5lZWRzIHRvIGJl
IGNyZWF0ZWQuCi0gKiAgIC0gYENvbnN0cnVjdG9yYDogYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIHBy
b3ZpZGVyIHdpbGwgYmUgY3JlYXRlZCB1c2luZwotICogICAgICAgICAgICAgICB7QGxpbmsgQVVU
Ty4kaW5qZWN0b3IjaW5zdGFudGlhdGUgJGluamVjdG9yLmluc3RhbnRpYXRlKCl9LCB0aGVuIHRy
ZWF0ZWQgYXMgYG9iamVjdGAuCi0gKgotICogQHJldHVybnMge09iamVjdH0gcmVnaXN0ZXJlZCBw
cm92aWRlciBpbnN0YW5jZQotICovCi0KLS8qKgotICogQG5nZG9jIG1ldGhvZAotICogQG5hbWUg
QVVUTy4kcHJvdmlkZSNmYWN0b3J5Ci0gKiBAbWV0aG9kT2YgQVVUTy4kcHJvdmlkZQotICogQGRl
c2NyaXB0aW9uCi0gKgotICogQSBzaG9ydCBoYW5kIGZvciBjb25maWd1cmluZyBzZXJ2aWNlcyBp
ZiBvbmx5IGAkZ2V0YCBtZXRob2QgaXMgcmVxdWlyZWQuCi0gKgotICogQHBhcmFtIHtzdHJpbmd9
IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGluc3RhbmNlLgotICogQHBhcmFtIHtmdW5jdGlvbigpfSAk
Z2V0Rm4gVGhlICRnZXRGbiBmb3IgdGhlIGluc3RhbmNlIGNyZWF0aW9uLiBJbnRlcm5hbGx5IHRo
aXMgaXMgYSBzaG9ydCBoYW5kIGZvcgotICogYCRwcm92aWRlLnByb3ZpZGVyKG5hbWUsIHskZ2V0
OiAkZ2V0Rm59KWAuCi0gKiBAcmV0dXJucyB7T2JqZWN0fSByZWdpc3RlcmVkIHByb3ZpZGVyIGlu
c3RhbmNlCi0gKi8KLQotCi0vKioKLSAqIEBuZ2RvYyBtZXRob2QKLSAqIEBuYW1lIEFVVE8uJHBy
b3ZpZGUjc2VydmljZQotICogQG1ldGhvZE9mIEFVVE8uJHByb3ZpZGUKLSAqIEBkZXNjcmlwdGlv
bgotICoKLSAqIEEgc2hvcnQgaGFuZCBmb3IgcmVnaXN0ZXJpbmcgc2VydmljZSBvZiBnaXZlbiBj
bGFzcy4KLSAqCi0gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgaW5zdGFu
Y2UuCi0gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb25zdHJ1Y3RvciBBIGNsYXNzIChjb25zdHJ1Y3Rv
ciBmdW5jdGlvbikgdGhhdCB3aWxsIGJlIGluc3RhbnRpYXRlZC4KLSAqIEByZXR1cm5zIHtPYmpl
Y3R9IHJlZ2lzdGVyZWQgcHJvdmlkZXIgaW5zdGFuY2UKLSAqLwotCi0KLS8qKgotICogQG5nZG9j
IG1ldGhvZAotICogQG5hbWUgQVVUTy4kcHJvdmlkZSN2YWx1ZQotICogQG1ldGhvZE9mIEFVVE8u
JHByb3ZpZGUKLSAqIEBkZXNjcmlwdGlvbgotICoKLSAqIEEgc2hvcnQgaGFuZCBmb3IgY29uZmln
dXJpbmcgc2VydmljZXMgaWYgdGhlIGAkZ2V0YCBtZXRob2QgaXMgYSBjb25zdGFudC4KLSAqCi0g
KiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgaW5zdGFuY2UuCi0gKiBAcGFy
YW0geyp9IHZhbHVlIFRoZSB2YWx1ZS4KLSAqIEByZXR1cm5zIHtPYmplY3R9IHJlZ2lzdGVyZWQg
cHJvdmlkZXIgaW5zdGFuY2UKLSAqLwotCi0KLS8qKgotICogQG5nZG9jIG1ldGhvZAotICogQG5h
bWUgQVVUTy4kcHJvdmlkZSNjb25zdGFudAotICogQG1ldGhvZE9mIEFVVE8uJHByb3ZpZGUKLSAq
IEBkZXNjcmlwdGlvbgotICoKLSAqIEEgY29uc3RhbnQgdmFsdWUsIGJ1dCB1bmxpa2Uge0BsaW5r
IEFVVE8uJHByb3ZpZGUjdmFsdWUgdmFsdWV9IGl0IGNhbiBiZSBpbmplY3RlZAotICogaW50byBj
b25maWd1cmF0aW9uIGZ1bmN0aW9uIChvdGhlciBtb2R1bGVzKSBhbmQgaXQgaXMgbm90IGludGVy
Y2VwdGFibGUgYnkKLSAqIHtAbGluayBBVVRPLiRwcm92aWRlI2RlY29yYXRvciBkZWNvcmF0b3J9
LgotICoKLSAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBjb25zdGFudC4K
LSAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIGNvbnN0YW50IHZhbHVlLgotICogQHJldHVybnMge09i
amVjdH0gcmVnaXN0ZXJlZCBpbnN0YW5jZQotICovCi0KLQotLyoqCi0gKiBAbmdkb2MgbWV0aG9k
Ci0gKiBAbmFtZSBBVVRPLiRwcm92aWRlI2RlY29yYXRvcgotICogQG1ldGhvZE9mIEFVVE8uJHBy
b3ZpZGUKLSAqIEBkZXNjcmlwdGlvbgotICoKLSAqIERlY29yYXRpb24gb2Ygc2VydmljZSwgYWxs
b3dzIHRoZSBkZWNvcmF0b3IgdG8gaW50ZXJjZXB0IHRoZSBzZXJ2aWNlIGluc3RhbmNlIGNyZWF0
aW9uLiBUaGUKLSAqIHJldHVybmVkIGluc3RhbmNlIG1heSBiZSB0aGUgb3JpZ2luYWwgaW5zdGFu
Y2UsIG9yIGEgbmV3IGluc3RhbmNlIHdoaWNoIGRlbGVnYXRlcyB0byB0aGUKLSAqIG9yaWdpbmFs
IGluc3RhbmNlLgotICoKLSAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBz
ZXJ2aWNlIHRvIGRlY29yYXRlLgotICogQHBhcmFtIHtmdW5jdGlvbigpfSBkZWNvcmF0b3IgVGhp
cyBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgd2hlbiB0aGUgc2VydmljZSBuZWVkcyB0byBiZQot
ICogICAgaW5zdGFudGlhdGVkLiBUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIHVzaW5nIHRoZSB7QGxp
bmsgQVVUTy4kaW5qZWN0b3IjaW52b2tlCi0gKiAgICBpbmplY3Rvci5pbnZva2V9IG1ldGhvZCBh
bmQgaXMgdGhlcmVmb3JlIGZ1bGx5IGluamVjdGFibGUuIExvY2FsIGluamVjdGlvbiBhcmd1bWVu
dHM6Ci0gKgotICogICAgKiBgJGRlbGVnYXRlYCAtIFRoZSBvcmlnaW5hbCBzZXJ2aWNlIGluc3Rh
bmNlLCB3aGljaCBjYW4gYmUgbW9ua2V5IHBhdGNoZWQsIGNvbmZpZ3VyZWQsCi0gKiAgICAgIGRl
Y29yYXRlZCBvciBkZWxlZ2F0ZWQgdG8uCi0gKi8KLQotCi1mdW5jdGlvbiBjcmVhdGVJbmplY3Rv
cihtb2R1bGVzVG9Mb2FkKSB7Ci0gIHZhciBJTlNUQU5USUFUSU5HID0ge30sCi0gICAgICBwcm92
aWRlclN1ZmZpeCA9ICdQcm92aWRlcicsCi0gICAgICBwYXRoID0gW10sCi0gICAgICBsb2FkZWRN
b2R1bGVzID0gbmV3IEhhc2hNYXAoKSwKLSAgICAgIHByb3ZpZGVyQ2FjaGUgPSB7Ci0gICAgICAg
ICRwcm92aWRlOiB7Ci0gICAgICAgICAgICBwcm92aWRlcjogc3VwcG9ydE9iamVjdChwcm92aWRl
ciksCi0gICAgICAgICAgICBmYWN0b3J5OiBzdXBwb3J0T2JqZWN0KGZhY3RvcnkpLAotICAgICAg
ICAgICAgc2VydmljZTogc3VwcG9ydE9iamVjdChzZXJ2aWNlKSwKLSAgICAgICAgICAgIHZhbHVl
OiBzdXBwb3J0T2JqZWN0KHZhbHVlKSwKLSAgICAgICAgICAgIGNvbnN0YW50OiBzdXBwb3J0T2Jq
ZWN0KGNvbnN0YW50KSwKLSAgICAgICAgICAgIGRlY29yYXRvcjogZGVjb3JhdG9yCi0gICAgICAg
ICAgfQotICAgICAgfSwKLSAgICAgIHByb3ZpZGVySW5qZWN0b3IgPSBjcmVhdGVJbnRlcm5hbElu
amVjdG9yKHByb3ZpZGVyQ2FjaGUsIGZ1bmN0aW9uKCkgewotICAgICAgICB0aHJvdyBFcnJvcigi
VW5rbm93biBwcm92aWRlcjogIiArIHBhdGguam9pbignIDwtICcpKTsKLSAgICAgIH0pLAotICAg
ICAgaW5zdGFuY2VDYWNoZSA9IHt9LAotICAgICAgaW5zdGFuY2VJbmplY3RvciA9IChpbnN0YW5j
ZUNhY2hlLiRpbmplY3RvciA9Ci0gICAgICAgICAgY3JlYXRlSW50ZXJuYWxJbmplY3RvcihpbnN0
YW5jZUNhY2hlLCBmdW5jdGlvbihzZXJ2aWNlbmFtZSkgewotICAgICAgICAgICAgdmFyIHByb3Zp
ZGVyID0gcHJvdmlkZXJJbmplY3Rvci5nZXQoc2VydmljZW5hbWUgKyBwcm92aWRlclN1ZmZpeCk7
Ci0gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2VJbmplY3Rvci5pbnZva2UocHJvdmlkZXIuJGdl
dCwgcHJvdmlkZXIpOwotICAgICAgICAgIH0pKTsKLQotCi0gIGZvckVhY2gobG9hZE1vZHVsZXMo
bW9kdWxlc1RvTG9hZCksIGZ1bmN0aW9uKGZuKSB7IGluc3RhbmNlSW5qZWN0b3IuaW52b2tlKGZu
IHx8IG5vb3ApOyB9KTsKLQotICByZXR1cm4gaW5zdGFuY2VJbmplY3RvcjsKLQotICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgLy8gJHByb3ZpZGVyCi0gIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0gIGZ1bmN0aW9uIHN1cHBvcnRPYmplY3Qo
ZGVsZWdhdGUpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24oa2V5LCB2YWx1ZSkgewotICAgICAgaWYg
KGlzT2JqZWN0KGtleSkpIHsKLSAgICAgICAgZm9yRWFjaChrZXksIHJldmVyc2VQYXJhbXMoZGVs
ZWdhdGUpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBkZWxlZ2F0ZShrZXksIHZh
bHVlKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBwcm92aWRlcihuYW1lLCBw
cm92aWRlcl8pIHsKLSAgICBpZiAoaXNGdW5jdGlvbihwcm92aWRlcl8pIHx8IGlzQXJyYXkocHJv
dmlkZXJfKSkgewotICAgICAgcHJvdmlkZXJfID0gcHJvdmlkZXJJbmplY3Rvci5pbnN0YW50aWF0
ZShwcm92aWRlcl8pOwotICAgIH0KLSAgICBpZiAoIXByb3ZpZGVyXy4kZ2V0KSB7Ci0gICAgICB0
aHJvdyBFcnJvcignUHJvdmlkZXIgJyArIG5hbWUgKyAnIG11c3QgZGVmaW5lICRnZXQgZmFjdG9y
eSBtZXRob2QuJyk7Ci0gICAgfQotICAgIHJldHVybiBwcm92aWRlckNhY2hlW25hbWUgKyBwcm92
aWRlclN1ZmZpeF0gPSBwcm92aWRlcl87Ci0gIH0KLQotICBmdW5jdGlvbiBmYWN0b3J5KG5hbWUs
IGZhY3RvcnlGbikgeyByZXR1cm4gcHJvdmlkZXIobmFtZSwgeyAkZ2V0OiBmYWN0b3J5Rm4gfSk7
IH0KLQotICBmdW5jdGlvbiBzZXJ2aWNlKG5hbWUsIGNvbnN0cnVjdG9yKSB7Ci0gICAgcmV0dXJu
IGZhY3RvcnkobmFtZSwgWyckaW5qZWN0b3InLCBmdW5jdGlvbigkaW5qZWN0b3IpIHsKLSAgICAg
IHJldHVybiAkaW5qZWN0b3IuaW5zdGFudGlhdGUoY29uc3RydWN0b3IpOwotICAgIH1dKTsKLSAg
fQotCi0gIGZ1bmN0aW9uIHZhbHVlKG5hbWUsIHZhbHVlKSB7IHJldHVybiBmYWN0b3J5KG5hbWUs
IHZhbHVlRm4odmFsdWUpKTsgfQotCi0gIGZ1bmN0aW9uIGNvbnN0YW50KG5hbWUsIHZhbHVlKSB7
Ci0gICAgcHJvdmlkZXJDYWNoZVtuYW1lXSA9IHZhbHVlOwotICAgIGluc3RhbmNlQ2FjaGVbbmFt
ZV0gPSB2YWx1ZTsKLSAgfQotCi0gIGZ1bmN0aW9uIGRlY29yYXRvcihzZXJ2aWNlTmFtZSwgZGVj
b3JGbikgewotICAgIHZhciBvcmlnUHJvdmlkZXIgPSBwcm92aWRlckluamVjdG9yLmdldChzZXJ2
aWNlTmFtZSArIHByb3ZpZGVyU3VmZml4KSwKLSAgICAgICAgb3JpZyRnZXQgPSBvcmlnUHJvdmlk
ZXIuJGdldDsKLQotICAgIG9yaWdQcm92aWRlci4kZ2V0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICB2
YXIgb3JpZ0luc3RhbmNlID0gaW5zdGFuY2VJbmplY3Rvci5pbnZva2Uob3JpZyRnZXQsIG9yaWdQ
cm92aWRlcik7Ci0gICAgICByZXR1cm4gaW5zdGFuY2VJbmplY3Rvci5pbnZva2UoZGVjb3JGbiwg
bnVsbCwgeyRkZWxlZ2F0ZTogb3JpZ0luc3RhbmNlfSk7Ci0gICAgfTsKLSAgfQotCi0gIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAvLyBNb2R1bGUgTG9hZGluZwotICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgZnVuY3Rpb24gbG9hZE1vZHVs
ZXMobW9kdWxlc1RvTG9hZCl7Ci0gICAgdmFyIHJ1bkJsb2NrcyA9IFtdOwotICAgIGZvckVhY2go
bW9kdWxlc1RvTG9hZCwgZnVuY3Rpb24obW9kdWxlKSB7Ci0gICAgICBpZiAobG9hZGVkTW9kdWxl
cy5nZXQobW9kdWxlKSkgcmV0dXJuOwotICAgICAgbG9hZGVkTW9kdWxlcy5wdXQobW9kdWxlLCB0
cnVlKTsKLSAgICAgIGlmIChpc1N0cmluZyhtb2R1bGUpKSB7Ci0gICAgICAgIHZhciBtb2R1bGVG
biA9IGFuZ3VsYXJNb2R1bGUobW9kdWxlKTsKLSAgICAgICAgcnVuQmxvY2tzID0gcnVuQmxvY2tz
LmNvbmNhdChsb2FkTW9kdWxlcyhtb2R1bGVGbi5yZXF1aXJlcykpLmNvbmNhdChtb2R1bGVGbi5f
cnVuQmxvY2tzKTsKLQotICAgICAgICB0cnkgewotICAgICAgICAgIGZvcih2YXIgaW52b2tlUXVl
dWUgPSBtb2R1bGVGbi5faW52b2tlUXVldWUsIGkgPSAwLCBpaSA9IGludm9rZVF1ZXVlLmxlbmd0
aDsgaSA8IGlpOyBpKyspIHsKLSAgICAgICAgICAgIHZhciBpbnZva2VBcmdzID0gaW52b2tlUXVl
dWVbaV0sCi0gICAgICAgICAgICAgICAgcHJvdmlkZXIgPSBpbnZva2VBcmdzWzBdID09ICckaW5q
ZWN0b3InCi0gICAgICAgICAgICAgICAgICAgID8gcHJvdmlkZXJJbmplY3RvcgotICAgICAgICAg
ICAgICAgICAgICA6IHByb3ZpZGVySW5qZWN0b3IuZ2V0KGludm9rZUFyZ3NbMF0pOwotCi0gICAg
ICAgICAgICBwcm92aWRlcltpbnZva2VBcmdzWzFdXS5hcHBseShwcm92aWRlciwgaW52b2tlQXJn
c1syXSk7Ci0gICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgaWYg
KGUubWVzc2FnZSkgZS5tZXNzYWdlICs9ICcgZnJvbSAnICsgbW9kdWxlOwotICAgICAgICAgIHRo
cm93IGU7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbihtb2R1bGUpKSB7
Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgcnVuQmxvY2tzLnB1c2gocHJvdmlkZXJJbmplY3Rv
ci5pbnZva2UobW9kdWxlKSk7Ci0gICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICBpZiAo
ZS5tZXNzYWdlKSBlLm1lc3NhZ2UgKz0gJyBmcm9tICcgKyBtb2R1bGU7Ci0gICAgICAgICAgdGhy
b3cgZTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIGlmIChpc0FycmF5KG1vZHVsZSkpIHsKLSAg
ICAgICAgdHJ5IHsKLSAgICAgICAgICBydW5CbG9ja3MucHVzaChwcm92aWRlckluamVjdG9yLmlu
dm9rZShtb2R1bGUpKTsKLSAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgIGlmIChlLm1l
c3NhZ2UpIGUubWVzc2FnZSArPSAnIGZyb20gJyArIFN0cmluZyhtb2R1bGVbbW9kdWxlLmxlbmd0
aCAtIDFdKTsKLSAgICAgICAgICB0aHJvdyBlOwotICAgICAgICB9Ci0gICAgICB9IGVsc2Ugewot
ICAgICAgICBhc3NlcnRBcmdGbihtb2R1bGUsICdtb2R1bGUnKTsKLSAgICAgIH0KLSAgICB9KTsK
LSAgICByZXR1cm4gcnVuQmxvY2tzOwotICB9Ci0KLSAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCi0gIC8vIGludGVybmFsIEluamVjdG9yCi0gIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLwotCi0gIGZ1bmN0aW9uIGNyZWF0ZUludGVybmFsSW5qZWN0b3Io
Y2FjaGUsIGZhY3RvcnkpIHsKLQotICAgIGZ1bmN0aW9uIGdldFNlcnZpY2Uoc2VydmljZU5hbWUp
IHsKLSAgICAgIGlmICh0eXBlb2Ygc2VydmljZU5hbWUgIT09ICdzdHJpbmcnKSB7Ci0gICAgICAg
IHRocm93IEVycm9yKCdTZXJ2aWNlIG5hbWUgZXhwZWN0ZWQnKTsKLSAgICAgIH0KLSAgICAgIGlm
IChjYWNoZS5oYXNPd25Qcm9wZXJ0eShzZXJ2aWNlTmFtZSkpIHsKLSAgICAgICAgaWYgKGNhY2hl
W3NlcnZpY2VOYW1lXSA9PT0gSU5TVEFOVElBVElORykgewotICAgICAgICAgIHRocm93IEVycm9y
KCdDaXJjdWxhciBkZXBlbmRlbmN5OiAnICsgcGF0aC5qb2luKCcgPC0gJykpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBjYWNoZVtzZXJ2aWNlTmFtZV07Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICB0cnkgewotICAgICAgICAgIHBhdGgudW5zaGlmdChzZXJ2aWNlTmFtZSk7Ci0gICAgICAg
ICAgY2FjaGVbc2VydmljZU5hbWVdID0gSU5TVEFOVElBVElORzsKLSAgICAgICAgICByZXR1cm4g
Y2FjaGVbc2VydmljZU5hbWVdID0gZmFjdG9yeShzZXJ2aWNlTmFtZSk7Ci0gICAgICAgIH0gZmlu
YWxseSB7Ci0gICAgICAgICAgcGF0aC5zaGlmdCgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgZnVuY3Rpb24gaW52b2tlKGZuLCBzZWxmLCBsb2NhbHMpewotICAgICAgdmFyIGFy
Z3MgPSBbXSwKLSAgICAgICAgICAkaW5qZWN0ID0gYW5ub3RhdGUoZm4pLAotICAgICAgICAgIGxl
bmd0aCwgaSwKLSAgICAgICAgICBrZXk7Ci0KLSAgICAgIGZvcihpID0gMCwgbGVuZ3RoID0gJGlu
amVjdC5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBrZXkgPSAkaW5qZWN0W2ld
OwotICAgICAgICBhcmdzLnB1c2goCi0gICAgICAgICAgbG9jYWxzICYmIGxvY2Fscy5oYXNPd25Q
cm9wZXJ0eShrZXkpCi0gICAgICAgICAgPyBsb2NhbHNba2V5XQotICAgICAgICAgIDogZ2V0U2Vy
dmljZShrZXkpCi0gICAgICAgICk7Ci0gICAgICB9Ci0gICAgICBpZiAoIWZuLiRpbmplY3QpIHsK
LSAgICAgICAgLy8gdGhpcyBtZWFucyB0aGF0IHdlIG11c3QgYmUgYW4gYXJyYXkuCi0gICAgICAg
IGZuID0gZm5bbGVuZ3RoXTsKLSAgICAgIH0KLQotCi0gICAgICAvLyBQZXJmb3JtYW5jZSBvcHRp
bWl6YXRpb246IGh0dHA6Ly9qc3BlcmYuY29tL2FwcGx5LXZzLWNhbGwtdnMtaW52b2tlCi0gICAg
ICBzd2l0Y2ggKHNlbGYgPyAtMSA6IGFyZ3MubGVuZ3RoKSB7Ci0gICAgICAgIGNhc2UgIDA6IHJl
dHVybiBmbigpOwotICAgICAgICBjYXNlICAxOiByZXR1cm4gZm4oYXJnc1swXSk7Ci0gICAgICAg
IGNhc2UgIDI6IHJldHVybiBmbihhcmdzWzBdLCBhcmdzWzFdKTsKLSAgICAgICAgY2FzZSAgMzog
cmV0dXJuIGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pOwotICAgICAgICBjYXNlICA0OiBy
ZXR1cm4gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7Ci0gICAgICAgIGNh
c2UgIDU6IHJldHVybiBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdz
WzRdKTsKLSAgICAgICAgY2FzZSAgNjogcmV0dXJuIGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3Nb
Ml0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0pOwotICAgICAgICBjYXNlICA3OiByZXR1cm4g
Zm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSwgYXJnc1s1XSwg
YXJnc1s2XSk7Ci0gICAgICAgIGNhc2UgIDg6IHJldHVybiBmbihhcmdzWzBdLCBhcmdzWzFdLCBh
cmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBhcmdzWzVdLCBhcmdzWzZdLCBhcmdzWzddKTsKLSAg
ICAgICAgY2FzZSAgOTogcmV0dXJuIGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3Nb
M10sIGFyZ3NbNF0sIGFyZ3NbNV0sIGFyZ3NbNl0sIGFyZ3NbN10sIGFyZ3NbOF0pOwotICAgICAg
ICBjYXNlIDEwOiByZXR1cm4gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwg
YXJnc1s0XSwgYXJnc1s1XSwgYXJnc1s2XSwgYXJnc1s3XSwgYXJnc1s4XSwgYXJnc1s5XSk7Ci0g
ICAgICAgIGRlZmF1bHQ6IHJldHVybiBmbi5hcHBseShzZWxmLCBhcmdzKTsKLSAgICAgIH0KLSAg
ICB9Ci0KLSAgICBmdW5jdGlvbiBpbnN0YW50aWF0ZShUeXBlLCBsb2NhbHMpIHsKLSAgICAgIHZh
ciBDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uKCkge30sCi0gICAgICAgICAgaW5zdGFuY2UsIHJldHVy
bmVkVmFsdWU7Ci0KLSAgICAgIC8vIENoZWNrIGlmIFR5cGUgaXMgYW5ub3RhdGVkIGFuZCB1c2Ug
anVzdCB0aGUgZ2l2ZW4gZnVuY3Rpb24gYXQgbi0xIGFzIHBhcmFtZXRlcgotICAgICAgLy8gZS5n
LiBzb21lTW9kdWxlLmZhY3RvcnkoJ2dyZWV0ZXInLCBbJyR3aW5kb3cnLCBmdW5jdGlvbihyZW5h
bWVkJHdpbmRvdykge31dKTsKLSAgICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IChpc0FycmF5
KFR5cGUpID8gVHlwZVtUeXBlLmxlbmd0aCAtIDFdIDogVHlwZSkucHJvdG90eXBlOwotICAgICAg
aW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTsKLSAgICAgIHJldHVybmVkVmFsdWUgPSBpbnZv
a2UoVHlwZSwgaW5zdGFuY2UsIGxvY2Fscyk7Ci0KLSAgICAgIHJldHVybiBpc09iamVjdChyZXR1
cm5lZFZhbHVlKSA/IHJldHVybmVkVmFsdWUgOiBpbnN0YW5jZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gewotICAgICAgaW52b2tlOiBpbnZva2UsCi0gICAgICBpbnN0YW50aWF0ZTogaW5zdGFudGlh
dGUsCi0gICAgICBnZXQ6IGdldFNlcnZpY2UsCi0gICAgICBhbm5vdGF0ZTogYW5ub3RhdGUKLSAg
ICB9OwotICB9Ci19Ci0KLS8qKgotICogQG5nZG9jIGZ1bmN0aW9uCi0gKiBAbmFtZSBuZy4kYW5j
aG9yU2Nyb2xsCi0gKiBAcmVxdWlyZXMgJHdpbmRvdwotICogQHJlcXVpcmVzICRsb2NhdGlvbgot
ICogQHJlcXVpcmVzICRyb290U2NvcGUKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIFdoZW4gY2Fs
bGVkLCBpdCBjaGVja3MgY3VycmVudCB2YWx1ZSBvZiBgJGxvY2F0aW9uLmhhc2goKWAgYW5kIHNj
cm9sbCB0byByZWxhdGVkIGVsZW1lbnQsCi0gKiBhY2NvcmRpbmcgdG8gcnVsZXMgc3BlY2lmaWVk
IGluCi0gKiB7QGxpbmsgaHR0cDovL2Rldi53My5vcmcvaHRtbDUvc3BlYy9PdmVydmlldy5odG1s
I3RoZS1pbmRpY2F0ZWQtcGFydC1vZi10aGUtZG9jdW1lbnQgSHRtbDUgc3BlY30uCi0gKgotICog
SXQgYWxzbyB3YXRjaGVzIHRoZSBgJGxvY2F0aW9uLmhhc2goKWAgYW5kIHNjcm9sbCB3aGVuZXZl
ciBpdCBjaGFuZ2VzIHRvIG1hdGNoIGFueSBhbmNob3IuCi0gKiBUaGlzIGNhbiBiZSBkaXNhYmxl
ZCBieSBjYWxsaW5nIGAkYW5jaG9yU2Nyb2xsUHJvdmlkZXIuZGlzYWJsZUF1dG9TY3JvbGxpbmco
KWAuCi0gKi8KLWZ1bmN0aW9uICRBbmNob3JTY3JvbGxQcm92aWRlcigpIHsKLQotICB2YXIgYXV0
b1Njcm9sbGluZ0VuYWJsZWQgPSB0cnVlOwotCi0gIHRoaXMuZGlzYWJsZUF1dG9TY3JvbGxpbmcg
PSBmdW5jdGlvbigpIHsKLSAgICBhdXRvU2Nyb2xsaW5nRW5hYmxlZCA9IGZhbHNlOwotICB9Owot
Ci0gIHRoaXMuJGdldCA9IFsnJHdpbmRvdycsICckbG9jYXRpb24nLCAnJHJvb3RTY29wZScsIGZ1
bmN0aW9uKCR3aW5kb3csICRsb2NhdGlvbiwgJHJvb3RTY29wZSkgewotICAgIHZhciBkb2N1bWVu
dCA9ICR3aW5kb3cuZG9jdW1lbnQ7Ci0KLSAgICAvLyBoZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IGZp
cnN0IGFuY2hvciBmcm9tIGEgTm9kZUxpc3QKLSAgICAvLyBjYW4ndCB1c2UgZmlsdGVyLmZpbHRl
ciwgYXMgaXQgYWNjZXB0cyBvbmx5IGluc3RhbmNlcyBvZiBBcnJheQotICAgIC8vIGFuZCBJRSBj
YW4ndCBjb252ZXJ0IE5vZGVMaXN0IHRvIGFuIGFycmF5IHVzaW5nIFtdLnNsaWNlCi0gICAgLy8g
VE9ETyh2b2p0YSk6IHVzZSBmaWx0ZXIgaWYgd2UgY2hhbmdlIGl0IHRvIGFjY2VwdCBsaXN0cyBh
cyB3ZWxsCi0gICAgZnVuY3Rpb24gZ2V0Rmlyc3RBbmNob3IobGlzdCkgewotICAgICAgdmFyIHJl
c3VsdCA9IG51bGw7Ci0gICAgICBmb3JFYWNoKGxpc3QsIGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAg
ICAgICAgaWYgKCFyZXN1bHQgJiYgbG93ZXJjYXNlKGVsZW1lbnQubm9kZU5hbWUpID09PSAnYScp
IHJlc3VsdCA9IGVsZW1lbnQ7Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQotCi0gICAgZnVuY3Rpb24gc2Nyb2xsKCkgewotICAgICAgdmFyIGhhc2ggPSAkbG9jYXRpb24u
aGFzaCgpLCBlbG07Ci0KLSAgICAgIC8vIGVtcHR5IGhhc2gsIHNjcm9sbCB0byB0aGUgdG9wIG9m
IHRoZSBwYWdlCi0gICAgICBpZiAoIWhhc2gpICR3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7Ci0KLSAg
ICAgIC8vIGVsZW1lbnQgd2l0aCBnaXZlbiBpZAotICAgICAgZWxzZSBpZiAoKGVsbSA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKGhhc2gpKSkgZWxtLnNjcm9sbEludG9WaWV3KCk7Ci0KLSAgICAg
IC8vIGZpcnN0IGFuY2hvciB3aXRoIGdpdmVuIG5hbWUgOi1ECi0gICAgICBlbHNlIGlmICgoZWxt
ID0gZ2V0Rmlyc3RBbmNob3IoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoaGFzaCkpKSkgZWxt
LnNjcm9sbEludG9WaWV3KCk7Ci0KLSAgICAgIC8vIG5vIGVsZW1lbnQgYW5kIGhhc2ggPT0gJ3Rv
cCcsIHNjcm9sbCB0byB0aGUgdG9wIG9mIHRoZSBwYWdlCi0gICAgICBlbHNlIGlmIChoYXNoID09
PSAndG9wJykgJHdpbmRvdy5zY3JvbGxUbygwLCAwKTsKLSAgICB9Ci0KLSAgICAvLyBkb2VzIG5v
dCBzY3JvbGwgd2hlbiB1c2VyIGNsaWNrcyBvbiBhbmNob3IgbGluayB0aGF0IGlzIGN1cnJlbnRs
eSBvbgotICAgIC8vIChubyB1cmwgY2hhbmdlLCBubyAkbG9jYXRpb24uaGFzaCgpIGNoYW5nZSks
IGJyb3dzZXIgbmF0aXZlIGRvZXMgc2Nyb2xsCi0gICAgaWYgKGF1dG9TY3JvbGxpbmdFbmFibGVk
KSB7Ci0gICAgICAkcm9vdFNjb3BlLiR3YXRjaChmdW5jdGlvbiBhdXRvU2Nyb2xsV2F0Y2goKSB7
cmV0dXJuICRsb2NhdGlvbi5oYXNoKCk7fSwKLSAgICAgICAgZnVuY3Rpb24gYXV0b1Njcm9sbFdh
dGNoQWN0aW9uKCkgewotICAgICAgICAgICRyb290U2NvcGUuJGV2YWxBc3luYyhzY3JvbGwpOwot
ICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc2Nyb2xsOwotICB9XTsKLX0KLQotLyoq
Ci0gKiAhIFRoaXMgaXMgYSBwcml2YXRlIHVuZG9jdW1lbnRlZCBzZXJ2aWNlICEKLSAqCi0gKiBA
bmFtZSBuZy4kYnJvd3NlcgotICogQHJlcXVpcmVzICRsb2cKLSAqIEBkZXNjcmlwdGlvbgotICog
VGhpcyBvYmplY3QgaGFzIHR3byBnb2FsczoKLSAqCi0gKiAtIGhpZGUgYWxsIHRoZSBnbG9iYWwg
c3RhdGUgaW4gdGhlIGJyb3dzZXIgY2F1c2VkIGJ5IHRoZSB3aW5kb3cgb2JqZWN0Ci0gKiAtIGFi
c3RyYWN0IGF3YXkgYWxsIHRoZSBicm93c2VyIHNwZWNpZmljIGZlYXR1cmVzIGFuZCBpbmNvbnNp
c3RlbmNpZXMKLSAqCi0gKiBGb3IgdGVzdHMgd2UgcHJvdmlkZSB7QGxpbmsgbmdNb2NrLiRicm93
c2VyIG1vY2sgaW1wbGVtZW50YXRpb259IG9mIHRoZSBgJGJyb3dzZXJgCi0gKiBzZXJ2aWNlLCB3
aGljaCBjYW4gYmUgdXNlZCBmb3IgY29udmVuaWVudCB0ZXN0aW5nIG9mIHRoZSBhcHBsaWNhdGlv
biB3aXRob3V0IHRoZSBpbnRlcmFjdGlvbiB3aXRoCi0gKiB0aGUgcmVhbCBicm93c2VyIGFwaXMu
Ci0gKi8KLS8qKgotICogQHBhcmFtIHtvYmplY3R9IHdpbmRvdyBUaGUgZ2xvYmFsIHdpbmRvdyBv
YmplY3QuCi0gKiBAcGFyYW0ge29iamVjdH0gZG9jdW1lbnQgalF1ZXJ5IHdyYXBwZWQgZG9jdW1l
bnQuCi0gKiBAcGFyYW0ge2Z1bmN0aW9uKCl9IFhIUiBYTUxIdHRwUmVxdWVzdCBjb25zdHJ1Y3Rv
ci4KLSAqIEBwYXJhbSB7b2JqZWN0fSAkbG9nIGNvbnNvbGUubG9nIG9yIGFuIG9iamVjdCB3aXRo
IHRoZSBzYW1lIGludGVyZmFjZS4KLSAqIEBwYXJhbSB7b2JqZWN0fSAkc25pZmZlciAkc25pZmZl
ciBzZXJ2aWNlCi0gKi8KLWZ1bmN0aW9uIEJyb3dzZXIod2luZG93LCBkb2N1bWVudCwgJGxvZywg
JHNuaWZmZXIpIHsKLSAgdmFyIHNlbGYgPSB0aGlzLAotICAgICAgcmF3RG9jdW1lbnQgPSBkb2N1
bWVudFswXSwKLSAgICAgIGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uLAotICAgICAgaGlzdG9y
eSA9IHdpbmRvdy5oaXN0b3J5LAotICAgICAgc2V0VGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0
LAotICAgICAgY2xlYXJUaW1lb3V0ID0gd2luZG93LmNsZWFyVGltZW91dCwKLSAgICAgIHBlbmRp
bmdEZWZlcklkcyA9IHt9OwotCi0gIHNlbGYuaXNNb2NrID0gZmFsc2U7Ci0KLSAgdmFyIG91dHN0
YW5kaW5nUmVxdWVzdENvdW50ID0gMDsKLSAgdmFyIG91dHN0YW5kaW5nUmVxdWVzdENhbGxiYWNr
cyA9IFtdOwotCi0gIC8vIFRPRE8odm9qdGEpOiByZW1vdmUgdGhpcyB0ZW1wb3JhcnkgYXBpCi0g
IHNlbGYuJCRjb21wbGV0ZU91dHN0YW5kaW5nUmVxdWVzdCA9IGNvbXBsZXRlT3V0c3RhbmRpbmdS
ZXF1ZXN0OwotICBzZWxmLiQkaW5jT3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQgPSBmdW5jdGlvbigp
IHsgb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQrKzsgfTsKLQotICAvKioKLSAgICogRXhlY3V0ZXMg
dGhlIGBmbmAgZnVuY3Rpb24oc3VwcG9ydHMgY3VycnlpbmcpIGFuZCBkZWNyZW1lbnRzIHRoZSBg
b3V0c3RhbmRpbmdSZXF1ZXN0Q2FsbGJhY2tzYAotICAgKiBjb3VudGVyLiBJZiB0aGUgY291bnRl
ciByZWFjaGVzIDAsIGFsbCB0aGUgYG91dHN0YW5kaW5nUmVxdWVzdENhbGxiYWNrc2AgYXJlIGV4
ZWN1dGVkLgotICAgKi8KLSAgZnVuY3Rpb24gY29tcGxldGVPdXRzdGFuZGluZ1JlcXVlc3QoZm4p
IHsKLSAgICB0cnkgewotICAgICAgZm4uYXBwbHkobnVsbCwgc2xpY2VBcmdzKGFyZ3VtZW50cywg
MSkpOwotICAgIH0gZmluYWxseSB7Ci0gICAgICBvdXRzdGFuZGluZ1JlcXVlc3RDb3VudC0tOwot
ICAgICAgaWYgKG91dHN0YW5kaW5nUmVxdWVzdENvdW50ID09PSAwKSB7Ci0gICAgICAgIHdoaWxl
KG91dHN0YW5kaW5nUmVxdWVzdENhbGxiYWNrcy5sZW5ndGgpIHsKLSAgICAgICAgICB0cnkgewot
ICAgICAgICAgICAgb3V0c3RhbmRpbmdSZXF1ZXN0Q2FsbGJhY2tzLnBvcCgpKCk7Ci0gICAgICAg
ICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgJGxvZy5lcnJvcihlKTsKLSAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQHByaXZhdGUK
LSAgICogTm90ZTogdGhpcyBtZXRob2QgaXMgdXNlZCBvbmx5IGJ5IHNjZW5hcmlvIHJ1bm5lcgot
ICAgKiBUT0RPKHZvanRhKTogcHJlZml4IHRoaXMgbWV0aG9kIHdpdGggJCQgPwotICAgKiBAcGFy
YW0ge2Z1bmN0aW9uKCl9IGNhbGxiYWNrIEZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hl
biBubyBvdXRzdGFuZGluZyByZXF1ZXN0Ci0gICAqLwotICBzZWxmLm5vdGlmeVdoZW5Ob091dHN0
YW5kaW5nUmVxdWVzdHMgPSBmdW5jdGlvbihjYWxsYmFjaykgewotICAgIC8vIGZvcmNlIGJyb3dz
ZXIgdG8gZXhlY3V0ZSBhbGwgcG9sbEZucyAtIHRoaXMgaXMgbmVlZGVkIHNvIHRoYXQgY29va2ll
cyBhbmQgb3RoZXIgcG9sbGVycyBmaXJlCi0gICAgLy8gYXQgc29tZSBkZXRlcm1pbmlzdGljIHRp
bWUgaW4gcmVzcGVjdCB0byB0aGUgdGVzdCBydW5uZXIncyBhY3Rpb25zLiBMZWF2aW5nIHRoaW5n
cyB1cCB0byB0aGUKLSAgICAvLyByZWd1bGFyIHBvbGxlciB3b3VsZCByZXN1bHQgaW4gZmxha3kg
dGVzdHMuCi0gICAgZm9yRWFjaChwb2xsRm5zLCBmdW5jdGlvbihwb2xsRm4peyBwb2xsRm4oKTsg
fSk7Ci0KLSAgICBpZiAob3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQgPT09IDApIHsKLSAgICAgIGNh
bGxiYWNrKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG91dHN0YW5kaW5nUmVxdWVzdENhbGxiYWNr
cy5wdXNoKGNhbGxiYWNrKTsKLSAgICB9Ci0gIH07Ci0KLSAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgLy8gUG9sbCBXYXRj
aGVyIEFQSQotICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLwotICB2YXIgcG9sbEZucyA9IFtdLAotICAgICAgcG9sbFRpbWVvdXQ7
Ci0KLSAgLyoqCi0gICAqIEBuYW1lIG5nLiRicm93c2VyI2FkZFBvbGxGbgotICAgKiBAbWV0aG9k
T2YgbmcuJGJyb3dzZXIKLSAgICoKLSAgICogQHBhcmFtIHtmdW5jdGlvbigpfSBmbiBQb2xsIGZ1
bmN0aW9uIHRvIGFkZAotICAgKgotICAgKiBAZGVzY3JpcHRpb24KLSAgICogQWRkcyBhIGZ1bmN0
aW9uIHRvIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IHBvbGxlciBwZXJpb2RpY2FsbHkgZXhl
Y3V0ZXMsCi0gICAqIGFuZCBzdGFydHMgcG9sbGluZyBpZiBub3Qgc3RhcnRlZCB5ZXQuCi0gICAq
Ci0gICAqIEByZXR1cm5zIHtmdW5jdGlvbigpfSB0aGUgYWRkZWQgZnVuY3Rpb24KLSAgICovCi0g
IHNlbGYuYWRkUG9sbEZuID0gZnVuY3Rpb24oZm4pIHsKLSAgICBpZiAoaXNVbmRlZmluZWQocG9s
bFRpbWVvdXQpKSBzdGFydFBvbGxlcigxMDAsIHNldFRpbWVvdXQpOwotICAgIHBvbGxGbnMucHVz
aChmbik7Ci0gICAgcmV0dXJuIGZuOwotICB9OwotCi0gIC8qKgotICAgKiBAcGFyYW0ge251bWJl
cn0gaW50ZXJ2YWwgSG93IG9mdGVuIHNob3VsZCBicm93c2VyIGNhbGwgcG9sbCBmdW5jdGlvbnMg
KG1zKQotICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCl9IHNldFRpbWVvdXQgUmVmZXJlbmNlIHRvIGEg
cmVhbCBvciBmYWtlIGBzZXRUaW1lb3V0YCBmdW5jdGlvbi4KLSAgICoKLSAgICogQGRlc2NyaXB0
aW9uCi0gICAqIENvbmZpZ3VyZXMgdGhlIHBvbGxlciB0byBydW4gaW4gdGhlIHNwZWNpZmllZCBp
bnRlcnZhbHMsIHVzaW5nIHRoZSBzcGVjaWZpZWQKLSAgICogc2V0VGltZW91dCBmbiBhbmQga2lj
a3MgaXQgb2ZmLgotICAgKi8KLSAgZnVuY3Rpb24gc3RhcnRQb2xsZXIoaW50ZXJ2YWwsIHNldFRp
bWVvdXQpIHsKLSAgICAoZnVuY3Rpb24gY2hlY2soKSB7Ci0gICAgICBmb3JFYWNoKHBvbGxGbnMs
IGZ1bmN0aW9uKHBvbGxGbil7IHBvbGxGbigpOyB9KTsKLSAgICAgIHBvbGxUaW1lb3V0ID0gc2V0
VGltZW91dChjaGVjaywgaW50ZXJ2YWwpOwotICAgIH0pKCk7Ci0gIH0KLQotICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAv
LyBVUkwgQVBJCi0gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCi0KLSAgdmFyIGxhc3RCcm93c2VyVXJsID0gbG9jYXRpb24uaHJl
ZiwKLSAgICAgIGJhc2VFbGVtZW50ID0gZG9jdW1lbnQuZmluZCgnYmFzZScpOwotCi0gIC8qKgot
ICAgKiBAbmFtZSBuZy4kYnJvd3NlciN1cmwKLSAgICogQG1ldGhvZE9mIG5nLiRicm93c2VyCi0g
ICAqCi0gICAqIEBkZXNjcmlwdGlvbgotICAgKiBHRVRURVI6Ci0gICAqIFdpdGhvdXQgYW55IGFy
Z3VtZW50LCB0aGlzIG1ldGhvZCBqdXN0IHJldHVybnMgY3VycmVudCB2YWx1ZSBvZiBsb2NhdGlv
bi5ocmVmLgotICAgKgotICAgKiBTRVRURVI6Ci0gICAqIFdpdGggYXQgbGVhc3Qgb25lIGFyZ3Vt
ZW50LCB0aGlzIG1ldGhvZCBzZXRzIHVybCB0byBuZXcgdmFsdWUuCi0gICAqIElmIGh0bWw1IGhp
c3RvcnkgYXBpIHN1cHBvcnRlZCwgcHVzaFN0YXRlL3JlcGxhY2VTdGF0ZSBpcyB1c2VkLCBvdGhl
cndpc2UKLSAgICogbG9jYXRpb24uaHJlZi9sb2NhdGlvbi5yZXBsYWNlIGlzIHVzZWQuCi0gICAq
IFJldHVybnMgaXRzIG93biBpbnN0YW5jZSB0byBhbGxvdyBjaGFpbmluZwotICAgKgotICAgKiBO
T1RFOiB0aGlzIGFwaSBpcyBpbnRlbmRlZCBmb3IgdXNlIG9ubHkgYnkgdGhlICRsb2NhdGlvbiBz
ZXJ2aWNlLiBQbGVhc2UgdXNlIHRoZQotICAgKiB7QGxpbmsgbmcuJGxvY2F0aW9uICRsb2NhdGlv
biBzZXJ2aWNlfSB0byBjaGFuZ2UgdXJsLgotICAgKgotICAgKiBAcGFyYW0ge3N0cmluZ30gdXJs
IE5ldyB1cmwgKHdoZW4gdXNlZCBhcyBzZXR0ZXIpCi0gICAqIEBwYXJhbSB7Ym9vbGVhbj19IHJl
cGxhY2UgU2hvdWxkIG5ldyB1cmwgcmVwbGFjZSBjdXJyZW50IGhpc3RvcnkgcmVjb3JkID8KLSAg
ICovCi0gIHNlbGYudXJsID0gZnVuY3Rpb24odXJsLCByZXBsYWNlKSB7Ci0gICAgLy8gc2V0dGVy
Ci0gICAgaWYgKHVybCkgewotICAgICAgaWYgKGxhc3RCcm93c2VyVXJsID09IHVybCkgcmV0dXJu
OwotICAgICAgbGFzdEJyb3dzZXJVcmwgPSB1cmw7Ci0gICAgICBpZiAoJHNuaWZmZXIuaGlzdG9y
eSkgewotICAgICAgICBpZiAocmVwbGFjZSkgaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgJycs
IHVybCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIGhpc3RvcnkucHVzaFN0YXRlKG51bGws
ICcnLCB1cmwpOwotICAgICAgICAgIC8vIENyYXp5IE9wZXJhIEJ1ZzogaHR0cDovL215Lm9wZXJh
LmNvbS9jb21tdW5pdHkvZm9ydW1zL3RvcGljLmRtbD9pZD0xMTg1NDYyCi0gICAgICAgICAgYmFz
ZUVsZW1lbnQuYXR0cignaHJlZicsIGJhc2VFbGVtZW50LmF0dHIoJ2hyZWYnKSk7Ci0gICAgICAg
IH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChyZXBsYWNlKSBsb2NhdGlvbi5yZXBsYWNl
KHVybCk7Ci0gICAgICAgIGVsc2UgbG9jYXRpb24uaHJlZiA9IHVybDsKLSAgICAgIH0KLSAgICAg
IHJldHVybiBzZWxmOwotICAgIC8vIGdldHRlcgotICAgIH0gZWxzZSB7Ci0gICAgICAvLyB0aGUg
cmVwbGFjZW1lbnQgaXMgYSB3b3JrYXJvdW5kIGZvciBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEu
b3JnL3Nob3dfYnVnLmNnaT9pZD00MDcxNzIKLSAgICAgIHJldHVybiBsb2NhdGlvbi5ocmVmLnJl
cGxhY2UoLyUyNy9nLCInIik7Ci0gICAgfQotICB9OwotCi0gIHZhciB1cmxDaGFuZ2VMaXN0ZW5l
cnMgPSBbXSwKLSAgICAgIHVybENoYW5nZUluaXQgPSBmYWxzZTsKLQotICBmdW5jdGlvbiBmaXJl
VXJsQ2hhbmdlKCkgewotICAgIGlmIChsYXN0QnJvd3NlclVybCA9PSBzZWxmLnVybCgpKSByZXR1
cm47Ci0KLSAgICBsYXN0QnJvd3NlclVybCA9IHNlbGYudXJsKCk7Ci0gICAgZm9yRWFjaCh1cmxD
aGFuZ2VMaXN0ZW5lcnMsIGZ1bmN0aW9uKGxpc3RlbmVyKSB7Ci0gICAgICBsaXN0ZW5lcihzZWxm
LnVybCgpKTsKLSAgICB9KTsKLSAgfQotCi0gIC8qKgotICAgKiBAbmFtZSBuZy4kYnJvd3NlciNv
blVybENoYW5nZQotICAgKiBAbWV0aG9kT2YgbmcuJGJyb3dzZXIKLSAgICogQFRPRE8odm9qdGEp
OiByZWZhY3RvciB0byB1c2Ugbm9kZSdzIHN5bnRheCBmb3IgZXZlbnRzCi0gICAqCi0gICAqIEBk
ZXNjcmlwdGlvbgotICAgKiBSZWdpc3RlciBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUg
Y2FsbGVkLCB3aGVuIHVybCBjaGFuZ2VzLgotICAgKgotICAgKiBJdCdzIG9ubHkgY2FsbGVkIHdo
ZW4gdGhlIHVybCBpcyBjaGFuZ2VkIGJ5IG91dHNpZGUgb2YgYW5ndWxhcjoKLSAgICogLSB1c2Vy
IHR5cGVzIGRpZmZlcmVudCB1cmwgaW50byBhZGRyZXNzIGJhcgotICAgKiAtIHVzZXIgY2xpY2tz
IG9uIGhpc3RvcnkgKGZvcndhcmQvYmFjaykgYnV0dG9uCi0gICAqIC0gdXNlciBjbGlja3Mgb24g
YSBsaW5rCi0gICAqCi0gICAqIEl0J3Mgbm90IGNhbGxlZCB3aGVuIHVybCBpcyBjaGFuZ2VkIGJ5
ICRicm93c2VyLnVybCgpIG1ldGhvZAotICAgKgotICAgKiBUaGUgbGlzdGVuZXIgZ2V0cyBjYWxs
ZWQgd2l0aCBuZXcgdXJsIGFzIHBhcmFtZXRlci4KLSAgICoKLSAgICogTk9URTogdGhpcyBhcGkg
aXMgaW50ZW5kZWQgZm9yIHVzZSBvbmx5IGJ5IHRoZSAkbG9jYXRpb24gc2VydmljZS4gUGxlYXNl
IHVzZSB0aGUKLSAgICoge0BsaW5rIG5nLiRsb2NhdGlvbiAkbG9jYXRpb24gc2VydmljZX0gdG8g
bW9uaXRvciB1cmwgY2hhbmdlcyBpbiBhbmd1bGFyIGFwcHMuCi0gICAqCi0gICAqIEBwYXJhbSB7
ZnVuY3Rpb24oc3RyaW5nKX0gbGlzdGVuZXIgTGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVk
IHdoZW4gdXJsIGNoYW5nZXMuCi0gICAqIEByZXR1cm4ge2Z1bmN0aW9uKHN0cmluZyl9IFJldHVy
bnMgdGhlIHJlZ2lzdGVyZWQgbGlzdGVuZXIgZm4gLSBoYW5keSBpZiB0aGUgZm4gaXMgYW5vbnlt
b3VzLgotICAgKi8KLSAgc2VsZi5vblVybENoYW5nZSA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7Ci0g
ICAgaWYgKCF1cmxDaGFuZ2VJbml0KSB7Ci0gICAgICAvLyBXZSBsaXN0ZW4gb24gYm90aCAoaGFz
aGNoYW5nZS9wb3BzdGF0ZSkgd2hlbiBhdmFpbGFibGUsIGFzIHNvbWUgYnJvd3NlcnMgKGUuZy4g
T3BlcmEpCi0gICAgICAvLyBkb24ndCBmaXJlIHBvcHN0YXRlIHdoZW4gdXNlciBjaGFuZ2UgdGhl
IGFkZHJlc3MgYmFyIGFuZCBkb24ndCBmaXJlIGhhc2hjaGFuZ2Ugd2hlbiB1cmwKLSAgICAgIC8v
IGNoYW5nZWQgYnkgcHVzaC9yZXBsYWNlU3RhdGUKLQotICAgICAgLy8gaHRtbDUgaGlzdG9yeSBh
cGkgLSBwb3BzdGF0ZSBldmVudAotICAgICAgaWYgKCRzbmlmZmVyLmhpc3RvcnkpIGpxTGl0ZSh3
aW5kb3cpLmJpbmQoJ3BvcHN0YXRlJywgZmlyZVVybENoYW5nZSk7Ci0gICAgICAvLyBoYXNoY2hh
bmdlIGV2ZW50Ci0gICAgICBpZiAoJHNuaWZmZXIuaGFzaGNoYW5nZSkganFMaXRlKHdpbmRvdyku
YmluZCgnaGFzaGNoYW5nZScsIGZpcmVVcmxDaGFuZ2UpOwotICAgICAgLy8gcG9sbGluZwotICAg
ICAgZWxzZSBzZWxmLmFkZFBvbGxGbihmaXJlVXJsQ2hhbmdlKTsKLQotICAgICAgdXJsQ2hhbmdl
SW5pdCA9IHRydWU7Ci0gICAgfQotCi0gICAgdXJsQ2hhbmdlTGlzdGVuZXJzLnB1c2goY2FsbGJh
Y2spOwotICAgIHJldHVybiBjYWxsYmFjazsKLSAgfTsKLQotICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAvLyBNaXNjIEFQ
SQotICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGN1cnJlbnQgPGJhc2UgaHJlZj4KLSAg
ICogKGFsd2F5cyByZWxhdGl2ZSAtIHdpdGhvdXQgZG9tYWluKQotICAgKgotICAgKiBAcmV0dXJu
cyB7c3RyaW5nPX0KLSAgICovCi0gIHNlbGYuYmFzZUhyZWYgPSBmdW5jdGlvbigpIHsKLSAgICB2
YXIgaHJlZiA9IGJhc2VFbGVtZW50LmF0dHIoJ2hyZWYnKTsKLSAgICByZXR1cm4gaHJlZiA/IGhy
ZWYucmVwbGFjZSgvXmh0dHBzP1w6XC9cL1teXC9dKi8sICcnKSA6ICcnOwotICB9OwotCi0gIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCi0gIC8vIENvb2tpZXMgQVBJCi0gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gIHZhciBsYXN0Q29va2llcyA9IHt9Owot
ICB2YXIgbGFzdENvb2tpZVN0cmluZyA9ICcnOwotICB2YXIgY29va2llUGF0aCA9IHNlbGYuYmFz
ZUhyZWYoKTsKLQotICAvKioKLSAgICogQG5hbWUgbmcuJGJyb3dzZXIjY29va2llcwotICAgKiBA
bWV0aG9kT2YgbmcuJGJyb3dzZXIKLSAgICoKLSAgICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lIENv
b2tpZSBuYW1lCi0gICAqIEBwYXJhbSB7c3RyaW5nPX0gdmFsdWUgQ29ra2llIHZhbHVlCi0gICAq
Ci0gICAqIEBkZXNjcmlwdGlvbgotICAgKiBUaGUgY29va2llcyBtZXRob2QgcHJvdmlkZXMgYSAn
cHJpdmF0ZScgbG93IGxldmVsIGFjY2VzcyB0byBicm93c2VyIGNvb2tpZXMuCi0gICAqIEl0IGlz
IG5vdCBtZWFudCB0byBiZSB1c2VkIGRpcmVjdGx5LCB1c2UgdGhlICRjb29raWUgc2VydmljZSBp
bnN0ZWFkLgotICAgKgotICAgKiBUaGUgcmV0dXJuIHZhbHVlcyB2YXJ5IGRlcGVuZGluZyBvbiB0
aGUgYXJndW1lbnRzIHRoYXQgdGhlIG1ldGhvZCB3YXMgY2FsbGVkIHdpdGggYXMgZm9sbG93czoK
LSAgICogPHVsPgotICAgKiAgIDxsaT5jb29raWVzKCkgLT4gaGFzaCBvZiBhbGwgY29va2llcywg
dGhpcyBpcyBOT1QgYSBjb3B5IG9mIHRoZSBpbnRlcm5hbCBzdGF0ZSwgc28gZG8gbm90IG1vZGlm
eSBpdDwvbGk+Ci0gICAqICAgPGxpPmNvb2tpZXMobmFtZSwgdmFsdWUpIC0+IHNldCBuYW1lIHRv
IHZhbHVlLCBpZiB2YWx1ZSBpcyB1bmRlZmluZWQgZGVsZXRlIHRoZSBjb29raWU8L2xpPgotICAg
KiAgIDxsaT5jb29raWVzKG5hbWUpIC0+IHRoZSBzYW1lIGFzIChuYW1lLCB1bmRlZmluZWQpID09
IERFTEVURVMgKG5vIG9uZSBjYWxscyBpdCByaWdodCBub3cgdGhhdCB3YXkpPC9saT4KLSAgICog
PC91bD4KLSAgICoKLSAgICogQHJldHVybnMge09iamVjdH0gSGFzaCBvZiBhbGwgY29va2llcyAo
aWYgY2FsbGVkIHdpdGhvdXQgYW55IHBhcmFtZXRlcikKLSAgICovCi0gIHNlbGYuY29va2llcyA9
IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7Ci0gICAgdmFyIGNvb2tpZUxlbmd0aCwgY29va2llQXJy
YXksIGNvb2tpZSwgaSwgaW5kZXg7Ci0KLSAgICBpZiAobmFtZSkgewotICAgICAgaWYgKHZhbHVl
ID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgcmF3RG9jdW1lbnQuY29va2llID0gZXNjYXBlKG5h
bWUpICsgIj07cGF0aD0iICsgY29va2llUGF0aCArICI7ZXhwaXJlcz1UaHUsIDAxIEphbiAxOTcw
IDAwOjAwOjAwIEdNVCI7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpZiAoaXNTdHJpbmcodmFs
dWUpKSB7Ci0gICAgICAgICAgY29va2llTGVuZ3RoID0gKHJhd0RvY3VtZW50LmNvb2tpZSA9IGVz
Y2FwZShuYW1lKSArICc9JyArIGVzY2FwZSh2YWx1ZSkgKyAnO3BhdGg9JyArIGNvb2tpZVBhdGgp
Lmxlbmd0aCArIDE7Ci0KLSAgICAgICAgICAvLyBwZXIgaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMv
cmZjMjEwOS50eHQgYnJvd3NlciBtdXN0IGFsbG93IGF0IG1pbmltdW06Ci0gICAgICAgICAgLy8g
LSAzMDAgY29va2llcwotICAgICAgICAgIC8vIC0gMjAgY29va2llcyBwZXIgdW5pcXVlIGRvbWFp
bgotICAgICAgICAgIC8vIC0gNDA5NiBieXRlcyBwZXIgY29va2llCi0gICAgICAgICAgaWYgKGNv
b2tpZUxlbmd0aCA+IDQwOTYpIHsKLSAgICAgICAgICAgICRsb2cud2FybigiQ29va2llICciKyBu
YW1lICsiJyBwb3NzaWJseSBub3Qgc2V0IG9yIG92ZXJmbG93ZWQgYmVjYXVzZSBpdCB3YXMgdG9v
IGxhcmdlICgiKwotICAgICAgICAgICAgICBjb29raWVMZW5ndGggKyAiID4gNDA5NiBieXRlcykh
Iik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAg
IGlmIChyYXdEb2N1bWVudC5jb29raWUgIT09IGxhc3RDb29raWVTdHJpbmcpIHsKLSAgICAgICAg
bGFzdENvb2tpZVN0cmluZyA9IHJhd0RvY3VtZW50LmNvb2tpZTsKLSAgICAgICAgY29va2llQXJy
YXkgPSBsYXN0Q29va2llU3RyaW5nLnNwbGl0KCI7ICIpOwotICAgICAgICBsYXN0Q29va2llcyA9
IHt9OwotCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb29raWVBcnJheS5sZW5ndGg7IGkrKykg
ewotICAgICAgICAgIGNvb2tpZSA9IGNvb2tpZUFycmF5W2ldOwotICAgICAgICAgIGluZGV4ID0g
Y29va2llLmluZGV4T2YoJz0nKTsKLSAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7IC8vaWdub3Jl
IG5hbWVsZXNzIGNvb2tpZXMKLSAgICAgICAgICAgIHZhciBuYW1lID0gdW5lc2NhcGUoY29va2ll
LnN1YnN0cmluZygwLCBpbmRleCkpOwotICAgICAgICAgICAgLy8gdGhlIGZpcnN0IHZhbHVlIHRo
YXQgaXMgc2VlbiBmb3IgYSBjb29raWUgaXMgdGhlIG1vc3QKLSAgICAgICAgICAgIC8vIHNwZWNp
ZmljIG9uZS4gIHZhbHVlcyBmb3IgdGhlIHNhbWUgY29va2llIG5hbWUgdGhhdAotICAgICAgICAg
ICAgLy8gZm9sbG93IGFyZSBmb3IgbGVzcyBzcGVjaWZpYyBwYXRocy4KLSAgICAgICAgICAgIGlm
IChsYXN0Q29va2llc1tuYW1lXSA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAgIGxhc3RD
b29raWVzW25hbWVdID0gdW5lc2NhcGUoY29va2llLnN1YnN0cmluZyhpbmRleCArIDEpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVy
biBsYXN0Q29va2llczsKLSAgICB9Ci0gIH07Ci0KLQotICAvKioKLSAgICogQG5hbWUgbmcuJGJy
b3dzZXIjZGVmZXIKLSAgICogQG1ldGhvZE9mIG5nLiRicm93c2VyCi0gICAqIEBwYXJhbSB7ZnVu
Y3Rpb24oKX0gZm4gQSBmdW5jdGlvbiwgd2hvJ3MgZXhlY3V0aW9uIHNob3VsZCBiZSBkZWZlcmVk
LgotICAgKiBAcGFyYW0ge251bWJlcj19IFtkZWxheT0wXSBvZiBtaWxsaXNlY29uZHMgdG8gZGVm
ZXIgdGhlIGZ1bmN0aW9uIGV4ZWN1dGlvbi4KLSAgICogQHJldHVybnMgeyp9IERlZmVySWQgdGhh
dCBjYW4gYmUgdXNlZCB0byBjYW5jZWwgdGhlIHRhc2sgdmlhIGAkYnJvd3Nlci5kZWZlci5jYW5j
ZWwoKWAuCi0gICAqCi0gICAqIEBkZXNjcmlwdGlvbgotICAgKiBFeGVjdXRlcyBhIGZuIGFzeW5j
aHJvbmlvdXNseSB2aWEgYHNldFRpbWVvdXQoZm4sIGRlbGF5KWAuCi0gICAqCi0gICAqIFVubGlr
ZSB3aGVuIGNhbGxpbmcgYHNldFRpbWVvdXRgIGRpcmVjdGx5LCBpbiB0ZXN0IHRoaXMgZnVuY3Rp
b24gaXMgbW9ja2VkIGFuZCBpbnN0ZWFkIG9mIHVzaW5nCi0gICAqIGBzZXRUaW1lb3V0YCBpbiB0
ZXN0cywgdGhlIGZucyBhcmUgcXVldWVkIGluIGFuIGFycmF5LCB3aGljaCBjYW4gYmUgcHJvZ3Jh
bW1hdGljYWxseSBmbHVzaGVkCi0gICAqIHZpYSBgJGJyb3dzZXIuZGVmZXIuZmx1c2goKWAuCi0g
ICAqCi0gICAqLwotICBzZWxmLmRlZmVyID0gZnVuY3Rpb24oZm4sIGRlbGF5KSB7Ci0gICAgdmFy
IHRpbWVvdXRJZDsKLSAgICBvdXRzdGFuZGluZ1JlcXVlc3RDb3VudCsrOwotICAgIHRpbWVvdXRJ
ZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAgICBkZWxldGUgcGVuZGluZ0RlZmVySWRz
W3RpbWVvdXRJZF07Ci0gICAgICBjb21wbGV0ZU91dHN0YW5kaW5nUmVxdWVzdChmbik7Ci0gICAg
fSwgZGVsYXkgfHwgMCk7Ci0gICAgcGVuZGluZ0RlZmVySWRzW3RpbWVvdXRJZF0gPSB0cnVlOwot
ICAgIHJldHVybiB0aW1lb3V0SWQ7Ci0gIH07Ci0KLQotICAvKioKLSAgICogQG5hbWUgbmcuJGJy
b3dzZXIjZGVmZXIuY2FuY2VsCi0gICAqIEBtZXRob2RPZiBuZy4kYnJvd3Nlci5kZWZlcgotICAg
KgotICAgKiBAZGVzY3JpcHRpb24KLSAgICogQ2FuY2VscyBhIGRlZmVyZWQgdGFzayBpZGVudGlm
aWVkIHdpdGggYGRlZmVySWRgLgotICAgKgotICAgKiBAcGFyYW0geyp9IGRlZmVySWQgVG9rZW4g
cmV0dXJuZWQgYnkgdGhlIGAkYnJvd3Nlci5kZWZlcmAgZnVuY3Rpb24uCi0gICAqIEByZXR1cm5z
IHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdGFzayBoYXNuJ3QgZXhlY3V0ZWQgeWV0
IGFuZCB3YXMgc3VjY2Vzc2Z1bHkgY2FuY2VsZWQuCi0gICAqLwotICBzZWxmLmRlZmVyLmNhbmNl
bCA9IGZ1bmN0aW9uKGRlZmVySWQpIHsKLSAgICBpZiAocGVuZGluZ0RlZmVySWRzW2RlZmVySWRd
KSB7Ci0gICAgICBkZWxldGUgcGVuZGluZ0RlZmVySWRzW2RlZmVySWRdOwotICAgICAgY2xlYXJU
aW1lb3V0KGRlZmVySWQpOwotICAgICAgY29tcGxldGVPdXRzdGFuZGluZ1JlcXVlc3Qobm9vcCk7
Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9OwotCi19
Ci0KLWZ1bmN0aW9uICRCcm93c2VyUHJvdmlkZXIoKXsKLSAgdGhpcy4kZ2V0ID0gWyckd2luZG93
JywgJyRsb2cnLCAnJHNuaWZmZXInLCAnJGRvY3VtZW50JywKLSAgICAgIGZ1bmN0aW9uKCAkd2lu
ZG93LCAgICRsb2csICAgJHNuaWZmZXIsICAgJGRvY3VtZW50KXsKLSAgICAgICAgcmV0dXJuIG5l
dyBCcm93c2VyKCR3aW5kb3csICRkb2N1bWVudCwgJGxvZywgJHNuaWZmZXIpOwotICAgICAgfV07
Ci19Ci0KLS8qKgotICogQG5nZG9jIG9iamVjdAotICogQG5hbWUgbmcuJGNhY2hlRmFjdG9yeQot
ICoKLSAqIEBkZXNjcmlwdGlvbgotICogRmFjdG9yeSB0aGF0IGNvbnN0cnVjdHMgY2FjaGUgb2Jq
ZWN0cy4KLSAqCi0gKgotICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlSWQgTmFtZSBvciBpZCBvZiB0
aGUgbmV3bHkgY3JlYXRlZCBjYWNoZS4KLSAqIEBwYXJhbSB7b2JqZWN0PX0gb3B0aW9ucyBPcHRp
b25zIG9iamVjdCB0aGF0IHNwZWNpZmllcyB0aGUgY2FjaGUgYmVoYXZpb3IuIFByb3BlcnRpZXM6
Ci0gKgotICogICAtIGB7bnVtYmVyPX1gIGBjYXBhY2l0eWAg4oCUIHR1cm5zIHRoZSBjYWNoZSBp
bnRvIExSVSBjYWNoZS4KLSAqCi0gKiBAcmV0dXJucyB7b2JqZWN0fSBOZXdseSBjcmVhdGVkIGNh
Y2hlIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgc2V0IG9mIG1ldGhvZHM6Ci0gKgotICogLSBg
e29iamVjdH1gIGBpbmZvKClgIOKAlCBSZXR1cm5zIGlkLCBzaXplLCBhbmQgb3B0aW9ucyBvZiBj
YWNoZS4KLSAqIC0gYHt2b2lkfWAgYHB1dCh7c3RyaW5nfSBrZXksIHsqfSB2YWx1ZSlgIOKAlCBQ
dXRzIGEgbmV3IGtleS12YWx1ZSBwYWlyIGludG8gdGhlIGNhY2hlLgotICogLSBge3sqfX1gIGBn
ZXQoe3N0cmluZ30ga2V5KWAg4oCUIFJldHVybnMgY2FjaGVkIHZhbHVlIGZvciBga2V5YCBvciB1
bmRlZmluZWQgZm9yIGNhY2hlIG1pc3MuCi0gKiAtIGB7dm9pZH1gIGByZW1vdmUoe3N0cmluZ30g
a2V5KWAg4oCUIFJlbW92ZXMgYSBrZXktdmFsdWUgcGFpciBmcm9tIHRoZSBjYWNoZS4KLSAqIC0g
YHt2b2lkfWAgYHJlbW92ZUFsbCgpYCDigJQgUmVtb3ZlcyBhbGwgY2FjaGVkIHZhbHVlcy4KLSAq
IC0gYHt2b2lkfWAgYGRlc3Ryb3koKWAg4oCUIFJlbW92ZXMgcmVmZXJlbmNlcyB0byB0aGlzIGNh
Y2hlIGZyb20gJGNhY2hlRmFjdG9yeS4KLSAqCi0gKi8KLWZ1bmN0aW9uICRDYWNoZUZhY3RvcnlQ
cm92aWRlcigpIHsKLQotICB0aGlzLiRnZXQgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgY2FjaGVz
ID0ge307Ci0KLSAgICBmdW5jdGlvbiBjYWNoZUZhY3RvcnkoY2FjaGVJZCwgb3B0aW9ucykgewot
ICAgICAgaWYgKGNhY2hlSWQgaW4gY2FjaGVzKSB7Ci0gICAgICAgIHRocm93IEVycm9yKCdjYWNo
ZUlkICcgKyBjYWNoZUlkICsgJyB0YWtlbicpOwotICAgICAgfQotCi0gICAgICB2YXIgc2l6ZSA9
IDAsCi0gICAgICAgICAgc3RhdHMgPSBleHRlbmQoe30sIG9wdGlvbnMsIHtpZDogY2FjaGVJZH0p
LAotICAgICAgICAgIGRhdGEgPSB7fSwKLSAgICAgICAgICBjYXBhY2l0eSA9IChvcHRpb25zICYm
IG9wdGlvbnMuY2FwYWNpdHkpIHx8IE51bWJlci5NQVhfVkFMVUUsCi0gICAgICAgICAgbHJ1SGFz
aCA9IHt9LAotICAgICAgICAgIGZyZXNoRW5kID0gbnVsbCwKLSAgICAgICAgICBzdGFsZUVuZCA9
IG51bGw7Ci0KLSAgICAgIHJldHVybiBjYWNoZXNbY2FjaGVJZF0gPSB7Ci0KLSAgICAgICAgcHV0
OiBmdW5jdGlvbihrZXksIHZhbHVlKSB7Ci0gICAgICAgICAgdmFyIGxydUVudHJ5ID0gbHJ1SGFz
aFtrZXldIHx8IChscnVIYXNoW2tleV0gPSB7a2V5OiBrZXl9KTsKLQotICAgICAgICAgIHJlZnJl
c2gobHJ1RW50cnkpOwotCi0gICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSkgcmV0dXJu
OwotICAgICAgICAgIGlmICghKGtleSBpbiBkYXRhKSkgc2l6ZSsrOwotICAgICAgICAgIGRhdGFb
a2V5XSA9IHZhbHVlOwotCi0gICAgICAgICAgaWYgKHNpemUgPiBjYXBhY2l0eSkgewotICAgICAg
ICAgICAgdGhpcy5yZW1vdmUoc3RhbGVFbmQua2V5KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0s
Ci0KLQotICAgICAgICBnZXQ6IGZ1bmN0aW9uKGtleSkgewotICAgICAgICAgIHZhciBscnVFbnRy
eSA9IGxydUhhc2hba2V5XTsKLQotICAgICAgICAgIGlmICghbHJ1RW50cnkpIHJldHVybjsKLQot
ICAgICAgICAgIHJlZnJlc2gobHJ1RW50cnkpOwotCi0gICAgICAgICAgcmV0dXJuIGRhdGFba2V5
XTsKLSAgICAgICAgfSwKLQotCi0gICAgICAgIHJlbW92ZTogZnVuY3Rpb24oa2V5KSB7Ci0gICAg
ICAgICAgdmFyIGxydUVudHJ5ID0gbHJ1SGFzaFtrZXldOwotCi0gICAgICAgICAgaWYgKCFscnVF
bnRyeSkgcmV0dXJuOwotCi0gICAgICAgICAgaWYgKGxydUVudHJ5ID09IGZyZXNoRW5kKSBmcmVz
aEVuZCA9IGxydUVudHJ5LnA7Ci0gICAgICAgICAgaWYgKGxydUVudHJ5ID09IHN0YWxlRW5kKSBz
dGFsZUVuZCA9IGxydUVudHJ5Lm47Ci0gICAgICAgICAgbGluayhscnVFbnRyeS5uLGxydUVudHJ5
LnApOwotCi0gICAgICAgICAgZGVsZXRlIGxydUhhc2hba2V5XTsKLSAgICAgICAgICBkZWxldGUg
ZGF0YVtrZXldOwotICAgICAgICAgIHNpemUtLTsKLSAgICAgICAgfSwKLQotCi0gICAgICAgIHJl
bW92ZUFsbDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgZGF0YSA9IHt9OwotICAgICAgICAgIHNp
emUgPSAwOwotICAgICAgICAgIGxydUhhc2ggPSB7fTsKLSAgICAgICAgICBmcmVzaEVuZCA9IHN0
YWxlRW5kID0gbnVsbDsKLSAgICAgICAgfSwKLQotCi0gICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9u
KCkgewotICAgICAgICAgIGRhdGEgPSBudWxsOwotICAgICAgICAgIHN0YXRzID0gbnVsbDsKLSAg
ICAgICAgICBscnVIYXNoID0gbnVsbDsKLSAgICAgICAgICBkZWxldGUgY2FjaGVzW2NhY2hlSWRd
OwotICAgICAgICB9LAotCi0KLSAgICAgICAgaW5mbzogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
cmV0dXJuIGV4dGVuZCh7fSwgc3RhdHMsIHtzaXplOiBzaXplfSk7Ci0gICAgICAgIH0KLSAgICAg
IH07Ci0KLQotICAgICAgLyoqCi0gICAgICAgKiBtYWtlcyB0aGUgYGVudHJ5YCB0aGUgZnJlc2hF
bmQgb2YgdGhlIExSVSBsaW5rZWQgbGlzdAotICAgICAgICovCi0gICAgICBmdW5jdGlvbiByZWZy
ZXNoKGVudHJ5KSB7Ci0gICAgICAgIGlmIChlbnRyeSAhPSBmcmVzaEVuZCkgewotICAgICAgICAg
IGlmICghc3RhbGVFbmQpIHsKLSAgICAgICAgICAgIHN0YWxlRW5kID0gZW50cnk7Ci0gICAgICAg
ICAgfSBlbHNlIGlmIChzdGFsZUVuZCA9PSBlbnRyeSkgewotICAgICAgICAgICAgc3RhbGVFbmQg
PSBlbnRyeS5uOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGxpbmsoZW50cnkubiwgZW50cnku
cCk7Ci0gICAgICAgICAgbGluayhlbnRyeSwgZnJlc2hFbmQpOwotICAgICAgICAgIGZyZXNoRW5k
ID0gZW50cnk7Ci0gICAgICAgICAgZnJlc2hFbmQubiA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAg
IH0KLQotCi0gICAgICAvKioKLSAgICAgICAqIGJpZGlyZWN0aW9uYWxseSBsaW5rcyB0d28gZW50
cmllcyBvZiB0aGUgTFJVIGxpbmtlZCBsaXN0Ci0gICAgICAgKi8KLSAgICAgIGZ1bmN0aW9uIGxp
bmsobmV4dEVudHJ5LCBwcmV2RW50cnkpIHsKLSAgICAgICAgaWYgKG5leHRFbnRyeSAhPSBwcmV2
RW50cnkpIHsKLSAgICAgICAgICBpZiAobmV4dEVudHJ5KSBuZXh0RW50cnkucCA9IHByZXZFbnRy
eTsgLy9wIHN0YW5kcyBmb3IgcHJldmlvdXMsICdwcmV2JyBkaWRuJ3QgbWluaWZ5Ci0gICAgICAg
ICAgaWYgKHByZXZFbnRyeSkgcHJldkVudHJ5Lm4gPSBuZXh0RW50cnk7IC8vbiBzdGFuZHMgZm9y
IG5leHQsICduZXh0JyBkaWRuJ3QgbWluaWZ5Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0K
LQotICAgIGNhY2hlRmFjdG9yeS5pbmZvID0gZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgaW5mbyA9
IHt9OwotICAgICAgZm9yRWFjaChjYWNoZXMsIGZ1bmN0aW9uKGNhY2hlLCBjYWNoZUlkKSB7Ci0g
ICAgICAgIGluZm9bY2FjaGVJZF0gPSBjYWNoZS5pbmZvKCk7Ci0gICAgICB9KTsKLSAgICAgIHJl
dHVybiBpbmZvOwotICAgIH07Ci0KLQotICAgIGNhY2hlRmFjdG9yeS5nZXQgPSBmdW5jdGlvbihj
YWNoZUlkKSB7Ci0gICAgICByZXR1cm4gY2FjaGVzW2NhY2hlSWRdOwotICAgIH07Ci0KLQotICAg
IHJldHVybiBjYWNoZUZhY3Rvcnk7Ci0gIH07Ci19Ci0KLS8qKgotICogQG5nZG9jIG9iamVjdAot
ICogQG5hbWUgbmcuJHRlbXBsYXRlQ2FjaGUKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIENhY2hl
IHVzZWQgZm9yIHN0b3JpbmcgaHRtbCB0ZW1wbGF0ZXMuCi0gKgotICogU2VlIHtAbGluayBuZy4k
Y2FjaGVGYWN0b3J5ICRjYWNoZUZhY3Rvcnl9LgotICoKLSAqLwotZnVuY3Rpb24gJFRlbXBsYXRl
Q2FjaGVQcm92aWRlcigpIHsKLSAgdGhpcy4kZ2V0ID0gWyckY2FjaGVGYWN0b3J5JywgZnVuY3Rp
b24oJGNhY2hlRmFjdG9yeSkgewotICAgIHJldHVybiAkY2FjaGVGYWN0b3J5KCd0ZW1wbGF0ZXMn
KTsKLSAgfV07Ci19Ci0KLS8qICEgVkFSSUFCTEUvRlVOQ1RJT04gTkFNSU5HIENPTlZFTlRJT05T
IFRIQVQgQVBQTFkgVE8gVEhJUyBGSUxFIQotICoKLSAqIERPTS1yZWxhdGVkIHZhcmlhYmxlczoK
LSAqCi0gKiAtICJub2RlIiAtIERPTSBOb2RlCi0gKiAtICJlbGVtZW50IiAtIERPTSBFbGVtZW50
IG9yIE5vZGUKLSAqIC0gIiRub2RlIiBvciAiJGVsZW1lbnQiIC0ganFMaXRlLXdyYXBwZWQgbm9k
ZSBvciBlbGVtZW50Ci0gKgotICoKLSAqIENvbXBpbGVyIHJlbGF0ZWQgc3R1ZmY6Ci0gKgotICog
LSAibGlua0ZuIiAtIGxpbmtpbmcgZm4gb2YgYSBzaW5nbGUgZGlyZWN0aXZlCi0gKiAtICJub2Rl
TGlua0ZuIiAtIGZ1bmN0aW9uIHRoYXQgYWdncmVnYXRlcyBhbGwgbGlua2luZyBmbnMgZm9yIGEg
cGFydGljdWxhciBub2RlCi0gKiAtICJjaGlsZExpbmtGbiIgLSAgZnVuY3Rpb24gdGhhdCBhZ2dy
ZWdhdGVzIGFsbCBsaW5raW5nIGZucyBmb3IgY2hpbGQgbm9kZXMgb2YgYSBwYXJ0aWN1bGFyIG5v
ZGUKLSAqIC0gImNvbXBvc2l0ZUxpbmtGbiIgLSBmdW5jdGlvbiB0aGF0IGFnZ3JlZ2F0ZXMgYWxs
IGxpbmtpbmcgZm5zIGZvciBhIGNvbXBpbGF0aW9uIHJvb3QgKG5vZGVMaXN0KQotICovCi0KLQot
dmFyIE5PTl9BU1NJR05BQkxFX01PREVMX0VYUFJFU1NJT04gPSAnTm9uLWFzc2lnbmFibGUgbW9k
ZWwgZXhwcmVzc2lvbjogJzsKLQotCi0vKioKLSAqIEBuZ2RvYyBmdW5jdGlvbgotICogQG5hbWUg
bmcuJGNvbXBpbGUKLSAqIEBmdW5jdGlvbgotICoKLSAqIEBkZXNjcmlwdGlvbgotICogQ29tcGls
ZXMgYSBwaWVjZSBvZiBIVE1MIHN0cmluZyBvciBET00gaW50byBhIHRlbXBsYXRlIGFuZCBwcm9k
dWNlcyBhIHRlbXBsYXRlIGZ1bmN0aW9uLCB3aGljaAotICogY2FuIHRoZW4gYmUgdXNlZCB0byBs
aW5rIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIHNjb3BlfSBhbmQgdGhlIHRlbXBsYXRlIHRv
Z2V0aGVyLgotICoKLSAqIFRoZSBjb21waWxhdGlvbiBpcyBhIHByb2Nlc3Mgb2Ygd2Fsa2luZyB0
aGUgRE9NIHRyZWUgYW5kIHRyeWluZyB0byBtYXRjaCBET00gZWxlbWVudHMgdG8KLSAqIHtAbGlu
ayBuZy4kY29tcGlsZVByb3ZpZGVyI2RpcmVjdGl2ZSBkaXJlY3RpdmVzfS4gRm9yIGVhY2ggbWF0
Y2ggaXQKLSAqIGV4ZWN1dGVzIGNvcnJlc3BvbmRpbmcgdGVtcGxhdGUgZnVuY3Rpb24gYW5kIGNv
bGxlY3RzIHRoZQotICogaW5zdGFuY2UgZnVuY3Rpb25zIGludG8gYSBzaW5nbGUgdGVtcGxhdGUg
ZnVuY3Rpb24gd2hpY2ggaXMgdGhlbiByZXR1cm5lZC4KLSAqCi0gKiBUaGUgdGVtcGxhdGUgZnVu
Y3Rpb24gY2FuIHRoZW4gYmUgdXNlZCBvbmNlIHRvIHByb2R1Y2UgdGhlIHZpZXcgb3IgYXMgaXQg
aXMgdGhlIGNhc2Ugd2l0aAotICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ1JlcGVhdCByZXBlYXRl
cn0gbWFueS10aW1lcywgaW4gd2hpY2gKLSAqIGNhc2UgZWFjaCBjYWxsIHJlc3VsdHMgaW4gYSB2
aWV3IHRoYXQgaXMgYSBET00gY2xvbmUgb2YgdGhlIG9yaWdpbmFsIHRlbXBsYXRlLgotICoKLSA8
ZG9jOmV4YW1wbGUgbW9kdWxlPSJjb21waWxlIj4KLSAgIDxkb2M6c291cmNlPgotICAgIDxzY3Jp
cHQ+Ci0gICAgICAvLyBkZWNsYXJlIGEgbmV3IG1vZHVsZSwgYW5kIGluamVjdCB0aGUgJGNvbXBp
bGVQcm92aWRlcgotICAgICAgYW5ndWxhci5tb2R1bGUoJ2NvbXBpbGUnLCBbXSwgZnVuY3Rpb24o
JGNvbXBpbGVQcm92aWRlcikgewotICAgICAgICAvLyBjb25maWd1cmUgbmV3ICdjb21waWxlJyBk
aXJlY3RpdmUgYnkgcGFzc2luZyBhIGRpcmVjdGl2ZQotICAgICAgICAvLyBmYWN0b3J5IGZ1bmN0
aW9uLiBUaGUgZmFjdG9yeSBmdW5jdGlvbiBpbmplY3RzIHRoZSAnJGNvbXBpbGUnCi0gICAgICAg
ICRjb21waWxlUHJvdmlkZXIuZGlyZWN0aXZlKCdjb21waWxlJywgZnVuY3Rpb24oJGNvbXBpbGUp
IHsKLSAgICAgICAgICAvLyBkaXJlY3RpdmUgZmFjdG9yeSBjcmVhdGVzIGEgbGluayBmdW5jdGlv
bgotICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cnMpIHsKLSAg
ICAgICAgICAgIHNjb3BlLiR3YXRjaCgKLSAgICAgICAgICAgICAgZnVuY3Rpb24oc2NvcGUpIHsK
LSAgICAgICAgICAgICAgICAgLy8gd2F0Y2ggdGhlICdjb21waWxlJyBleHByZXNzaW9uIGZvciBj
aGFuZ2VzCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNjb3BlLiRldmFsKGF0dHJzLmNvbXBpbGUp
OwotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICBmdW5jdGlvbih2YWx1ZSkgewotICAg
ICAgICAgICAgICAgIC8vIHdoZW4gdGhlICdjb21waWxlJyBleHByZXNzaW9uIGNoYW5nZXMKLSAg
ICAgICAgICAgICAgICAvLyBhc3NpZ24gaXQgaW50byB0aGUgY3VycmVudCBET00KLSAgICAgICAg
ICAgICAgICBlbGVtZW50Lmh0bWwodmFsdWUpOwotCi0gICAgICAgICAgICAgICAgLy8gY29tcGls
ZSB0aGUgbmV3IERPTSBhbmQgbGluayBpdCB0byB0aGUgY3VycmVudAotICAgICAgICAgICAgICAg
IC8vIHNjb3BlLgotICAgICAgICAgICAgICAgIC8vIE5PVEU6IHdlIG9ubHkgY29tcGlsZSAuY2hp
bGROb2RlcyBzbyB0aGF0Ci0gICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgZ2V0IGludG8gaW5m
aW5pdGUgbG9vcCBjb21waWxpbmcgb3Vyc2VsdmVzCi0gICAgICAgICAgICAgICAgJGNvbXBpbGUo
ZWxlbWVudC5jb250ZW50cygpKShzY29wZSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICk7Ci0gICAgICAgICAgfTsKLSAgICAgICAgfSkKLSAgICAgIH0pOwotCi0gICAgICBmdW5jdGlv
biBDdHJsKCRzY29wZSkgewotICAgICAgICAkc2NvcGUubmFtZSA9ICdBbmd1bGFyJzsKLSAgICAg
ICAgJHNjb3BlLmh0bWwgPSAnSGVsbG8ge3tuYW1lfX0nOwotICAgICAgfQotICAgIDwvc2NyaXB0
PgotICAgIDxkaXYgbmctY29udHJvbGxlcj0iQ3RybCI+Ci0gICAgICA8aW5wdXQgbmctbW9kZWw9
Im5hbWUiPiA8YnI+Ci0gICAgICA8dGV4dGFyZWEgbmctbW9kZWw9Imh0bWwiPjwvdGV4dGFyZWE+
IDxicj4KLSAgICAgIDxkaXYgY29tcGlsZT0iaHRtbCI+PC9kaXY+Ci0gICAgPC9kaXY+Ci0gICA8
L2RvYzpzb3VyY2U+Ci0gICA8ZG9jOnNjZW5hcmlvPgotICAgICBpdCgnc2hvdWxkIGF1dG8gY29t
cGlsZScsIGZ1bmN0aW9uKCkgewotICAgICAgIGV4cGVjdChlbGVtZW50KCdkaXZbY29tcGlsZV0n
KS50ZXh0KCkpLnRvQmUoJ0hlbGxvIEFuZ3VsYXInKTsKLSAgICAgICBpbnB1dCgnaHRtbCcpLmVu
dGVyKCd7e25hbWV9fSEnKTsKLSAgICAgICBleHBlY3QoZWxlbWVudCgnZGl2W2NvbXBpbGVdJyku
dGV4dCgpKS50b0JlKCdBbmd1bGFyIScpOwotICAgICB9KTsKLSAgIDwvZG9jOnNjZW5hcmlvPgot
IDwvZG9jOmV4YW1wbGU+Ci0KLSAqCi0gKgotICogQHBhcmFtIHtzdHJpbmd8RE9NRWxlbWVudH0g
ZWxlbWVudCBFbGVtZW50IG9yIEhUTUwgc3RyaW5nIHRvIGNvbXBpbGUgaW50byBhIHRlbXBsYXRl
IGZ1bmN0aW9uLgotICogQHBhcmFtIHtmdW5jdGlvbihhbmd1bGFyLlNjb3BlWywgY2xvbmVBdHRh
Y2hGbl19IHRyYW5zY2x1ZGUgZnVuY3Rpb24gYXZhaWxhYmxlIHRvIGRpcmVjdGl2ZXMuCi0gKiBA
cGFyYW0ge251bWJlcn0gbWF4UHJpb3JpdHkgb25seSBhcHBseSBkaXJlY3RpdmVzIGxvd2VyIHRo
ZW4gZ2l2ZW4gcHJpb3JpdHkgKE9ubHkgZWZmZWN0cyB0aGUKLSAqICAgICAgICAgICAgICAgICBy
b290IGVsZW1lbnQocyksIG5vdCB0aGVpciBjaGlsZHJlbikKLSAqIEByZXR1cm5zIHtmdW5jdGlv
bihzY29wZVssIGNsb25lQXR0YWNoRm5dKX0gYSBsaW5rIGZ1bmN0aW9uIHdoaWNoIGlzIHVzZWQg
dG8gYmluZCB0ZW1wbGF0ZQotICogKGEgRE9NIGVsZW1lbnQvdHJlZSkgdG8gYSBzY29wZS4gV2hl
cmU6Ci0gKgotICogICogYHNjb3BlYCAtIEEge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUgU2Nv
cGV9IHRvIGJpbmQgdG8uCi0gKiAgKiBgY2xvbmVBdHRhY2hGbmAgLSBJZiBgY2xvbmVBdHRhY2hG
bmAgaXMgcHJvdmlkZWQsIHRoZW4gdGhlIGxpbmsgZnVuY3Rpb24gd2lsbCBjbG9uZSB0aGUKLSAq
ICAgICAgICAgICAgICAgYHRlbXBsYXRlYCBhbmQgY2FsbCB0aGUgYGNsb25lQXR0YWNoRm5gIGZ1
bmN0aW9uIGFsbG93aW5nIHRoZSBjYWxsZXIgdG8gYXR0YWNoIHRoZQotICogICAgICAgICAgICAg
ICBjbG9uZWQgZWxlbWVudHMgdG8gdGhlIERPTSBkb2N1bWVudCBhdCB0aGUgYXBwcm9wcmlhdGUg
cGxhY2UuIFRoZSBgY2xvbmVBdHRhY2hGbmAgaXMKLSAqICAgICAgICAgICAgICAgY2FsbGVkIGFz
OiA8YnI+IGBjbG9uZUF0dGFjaEZuKGNsb25lZEVsZW1lbnQsIHNjb3BlKWAgd2hlcmU6Ci0gKgot
ICogICAgICAqIGBjbG9uZWRFbGVtZW50YCAtIGlzIGEgY2xvbmUgb2YgdGhlIG9yaWdpbmFsIGBl
bGVtZW50YCBwYXNzZWQgaW50byB0aGUgY29tcGlsZXIuCi0gKiAgICAgICogYHNjb3BlYCAtIGlz
IHRoZSBjdXJyZW50IHNjb3BlIHdpdGggd2hpY2ggdGhlIGxpbmtpbmcgZnVuY3Rpb24gaXMgd29y
a2luZyB3aXRoLgotICoKLSAqIENhbGxpbmcgdGhlIGxpbmtpbmcgZnVuY3Rpb24gcmV0dXJucyB0
aGUgZWxlbWVudCBvZiB0aGUgdGVtcGxhdGUuIEl0IGlzIGVpdGhlciB0aGUgb3JpZ2luYWwgZWxl
bWVudAotICogcGFzc2VkIGluLCBvciB0aGUgY2xvbmUgb2YgdGhlIGVsZW1lbnQgaWYgdGhlIGBj
bG9uZUF0dGFjaEZuYCBpcyBwcm92aWRlZC4KLSAqCi0gKiBBZnRlciBsaW5raW5nIHRoZSB2aWV3
IGlzIG5vdCB1cGRhdGVkIHVudGlsIGFmdGVyIGEgY2FsbCB0byAkZGlnZXN0IHdoaWNoIHR5cGlj
YWxseSBpcyBkb25lIGJ5Ci0gKiBBbmd1bGFyIGF1dG9tYXRpY2FsbHkuCi0gKgotICogSWYgeW91
IG5lZWQgYWNjZXNzIHRvIHRoZSBib3VuZCB2aWV3LCB0aGVyZSBhcmUgdHdvIHdheXMgdG8gZG8g
aXQ6Ci0gKgotICogLSBJZiB5b3UgYXJlIG5vdCBhc2tpbmcgdGhlIGxpbmtpbmcgZnVuY3Rpb24g
dG8gY2xvbmUgdGhlIHRlbXBsYXRlLCBjcmVhdGUgdGhlIERPTSBlbGVtZW50KHMpCi0gKiAgIGJl
Zm9yZSB5b3Ugc2VuZCB0aGVtIHRvIHRoZSBjb21waWxlciBhbmQga2VlcCB0aGlzIHJlZmVyZW5j
ZSBhcm91bmQuCi0gKiAgIDxwcmU+Ci0gKiAgICAgdmFyIGVsZW1lbnQgPSAkY29tcGlsZSgnPHA+
e3t0b3RhbH19PC9wPicpKHNjb3BlKTsKLSAqICAgPC9wcmU+Ci0gKgotICogLSBpZiBvbiB0aGUg
b3RoZXIgaGFuZCwgeW91IG5lZWQgdGhlIGVsZW1lbnQgdG8gYmUgY2xvbmVkLCB0aGUgdmlldyBy
ZWZlcmVuY2UgZnJvbSB0aGUgb3JpZ2luYWwKLSAqICAgZXhhbXBsZSB3b3VsZCBub3QgcG9pbnQg
dG8gdGhlIGNsb25lLCBidXQgcmF0aGVyIHRvIHRoZSBvcmlnaW5hbCB0ZW1wbGF0ZSB0aGF0IHdh
cyBjbG9uZWQuIEluCi0gKiAgIHRoaXMgY2FzZSwgeW91IGNhbiBhY2Nlc3MgdGhlIGNsb25lIHZp
YSB0aGUgY2xvbmVBdHRhY2hGbjoKLSAqICAgPHByZT4KLSAqICAgICB2YXIgdGVtcGxhdGVIVE1M
ID0gYW5ndWxhci5lbGVtZW50KCc8cD57e3RvdGFsfX08L3A+JyksCi0gKiAgICAgICAgIHNjb3Bl
ID0gLi4uLjsKLSAqCi0gKiAgICAgdmFyIGNsb25lZEVsZW1lbnQgPSAkY29tcGlsZSh0ZW1wbGF0
ZUhUTUwpKHNjb3BlLCBmdW5jdGlvbihjbG9uZWRFbGVtZW50LCBzY29wZSkgewotICogICAgICAg
Ly9hdHRhY2ggdGhlIGNsb25lIHRvIERPTSBkb2N1bWVudCBhdCB0aGUgcmlnaHQgcGxhY2UKLSAq
ICAgICB9KTsKLSAqCi0gKiAgICAgLy9ub3cgd2UgaGF2ZSByZWZlcmVuY2UgdG8gdGhlIGNsb25l
ZCBET00gdmlhIGBjbG9uZWAKLSAqICAgPC9wcmU+Ci0gKgotICoKLSAqIEZvciBpbmZvcm1hdGlv
biBvbiBob3cgdGhlIGNvbXBpbGVyIHdvcmtzLCBzZWUgdGhlCi0gKiB7QGxpbmsgZ3VpZGUvY29t
cGlsZXIgQW5ndWxhciBIVE1MIENvbXBpbGVyfSBzZWN0aW9uIG9mIHRoZSBEZXZlbG9wZXIgR3Vp
ZGUuCi0gKi8KLQotCi0vKioKLSAqIEBuZ2RvYyBzZXJ2aWNlCi0gKiBAbmFtZSBuZy4kY29tcGls
ZVByb3ZpZGVyCi0gKiBAZnVuY3Rpb24KLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqLwotJENvbXBp
bGVQcm92aWRlci4kaW5qZWN0ID0gWyckcHJvdmlkZSddOwotZnVuY3Rpb24gJENvbXBpbGVQcm92
aWRlcigkcHJvdmlkZSkgewotICB2YXIgaGFzRGlyZWN0aXZlcyA9IHt9LAotICAgICAgU3VmZml4
ID0gJ0RpcmVjdGl2ZScsCi0gICAgICBDT01NRU5UX0RJUkVDVElWRV9SRUdFWFAgPSAvXlxzKmRp
cmVjdGl2ZVw6XHMqKFtcZFx3XC1fXSspXHMrKC4qKSQvLAotICAgICAgQ0xBU1NfRElSRUNUSVZF
X1JFR0VYUCA9IC8oKFtcZFx3XC1fXSspKD86XDooW147XSspKT87PykvLAotICAgICAgTVVMVElf
Uk9PVF9URU1QTEFURV9FUlJPUiA9ICdUZW1wbGF0ZSBtdXN0IGhhdmUgZXhhY3RseSBvbmUgcm9v
dCBlbGVtZW50LiB3YXM6ICcsCi0gICAgICB1cmxTYW5pdGl6YXRpb25XaGl0ZWxpc3QgPSAvXlxz
KihodHRwcz98ZnRwfG1haWx0b3xmaWxlKTovOwotCi0KLSAgLyoqCi0gICAqIEBuZ2RvYyBmdW5j
dGlvbgotICAgKiBAbmFtZSBuZy4kY29tcGlsZVByb3ZpZGVyI2RpcmVjdGl2ZQotICAgKiBAbWV0
aG9kT2YgbmcuJGNvbXBpbGVQcm92aWRlcgotICAgKiBAZnVuY3Rpb24KLSAgICoKLSAgICogQGRl
c2NyaXB0aW9uCi0gICAqIFJlZ2lzdGVyIGEgbmV3IGRpcmVjdGl2ZXMgd2l0aCB0aGUgY29tcGls
ZXIuCi0gICAqCi0gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgdGhlIGRpcmVjdGl2
ZSBpbiBjYW1lbC1jYXNlLiAoaWUgPGNvZGU+bmdCaW5kPC9jb2RlPiB3aGljaCB3aWxsIG1hdGNo
IGFzCi0gICAqICAgICAgICAgICAgICAgIDxjb2RlPm5nLWJpbmQ8L2NvZGU+KS4KLSAgICogQHBh
cmFtIHtmdW5jdGlvbn0gZGlyZWN0aXZlRmFjdG9yeSBBbiBpbmplY3RhYmxlIGRpcmVjdGl2ZSBm
YWN0cm95IGZ1bmN0aW9uLiBTZWUge0BsaW5rIGd1aWRlL2RpcmVjdGl2ZX0gZm9yIG1vcmUKLSAg
ICogICAgICAgICAgICAgICAgaW5mby4KLSAgICogQHJldHVybnMge25nLiRjb21waWxlUHJvdmlk
ZXJ9IFNlbGYgZm9yIGNoYWluaW5nLgotICAgKi8KLSAgIHRoaXMuZGlyZWN0aXZlID0gZnVuY3Rp
b24gcmVnaXN0ZXJEaXJlY3RpdmUobmFtZSwgZGlyZWN0aXZlRmFjdG9yeSkgewotICAgIGlmIChp
c1N0cmluZyhuYW1lKSkgewotICAgICAgYXNzZXJ0QXJnKGRpcmVjdGl2ZUZhY3RvcnksICdkaXJl
Y3RpdmUnKTsKLSAgICAgIGlmICghaGFzRGlyZWN0aXZlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkg
ewotICAgICAgICBoYXNEaXJlY3RpdmVzW25hbWVdID0gW107Ci0gICAgICAgICRwcm92aWRlLmZh
Y3RvcnkobmFtZSArIFN1ZmZpeCwgWyckaW5qZWN0b3InLCAnJGV4Y2VwdGlvbkhhbmRsZXInLAot
ICAgICAgICAgIGZ1bmN0aW9uKCRpbmplY3RvciwgJGV4Y2VwdGlvbkhhbmRsZXIpIHsKLSAgICAg
ICAgICAgIHZhciBkaXJlY3RpdmVzID0gW107Ci0gICAgICAgICAgICBmb3JFYWNoKGhhc0RpcmVj
dGl2ZXNbbmFtZV0sIGZ1bmN0aW9uKGRpcmVjdGl2ZUZhY3RvcnkpIHsKLSAgICAgICAgICAgICAg
dHJ5IHsKLSAgICAgICAgICAgICAgICB2YXIgZGlyZWN0aXZlID0gJGluamVjdG9yLmludm9rZShk
aXJlY3RpdmVGYWN0b3J5KTsKLSAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihkaXJlY3Rp
dmUpKSB7Ci0gICAgICAgICAgICAgICAgICBkaXJlY3RpdmUgPSB7IGNvbXBpbGU6IHZhbHVlRm4o
ZGlyZWN0aXZlKSB9OwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWRpcmVjdGl2ZS5jb21w
aWxlICYmIGRpcmVjdGl2ZS5saW5rKSB7Ci0gICAgICAgICAgICAgICAgICBkaXJlY3RpdmUuY29t
cGlsZSA9IHZhbHVlRm4oZGlyZWN0aXZlLmxpbmspOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBkaXJlY3RpdmUucHJpb3JpdHkgPSBkaXJlY3RpdmUucHJpb3JpdHkgfHwgMDsK
LSAgICAgICAgICAgICAgICBkaXJlY3RpdmUubmFtZSA9IGRpcmVjdGl2ZS5uYW1lIHx8IG5hbWU7
Ci0gICAgICAgICAgICAgICAgZGlyZWN0aXZlLnJlcXVpcmUgPSBkaXJlY3RpdmUucmVxdWlyZSB8
fCAoZGlyZWN0aXZlLmNvbnRyb2xsZXIgJiYgZGlyZWN0aXZlLm5hbWUpOwotICAgICAgICAgICAg
ICAgIGRpcmVjdGl2ZS5yZXN0cmljdCA9IGRpcmVjdGl2ZS5yZXN0cmljdCB8fCAnQSc7Ci0gICAg
ICAgICAgICAgICAgZGlyZWN0aXZlcy5wdXNoKGRpcmVjdGl2ZSk7Ci0gICAgICAgICAgICAgIH0g
Y2F0Y2ggKGUpIHsKLSAgICAgICAgICAgICAgICAkZXhjZXB0aW9uSGFuZGxlcihlKTsKLSAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1cm4gZGlyZWN0aXZl
czsKLSAgICAgICAgICB9XSk7Ci0gICAgICB9Ci0gICAgICBoYXNEaXJlY3RpdmVzW25hbWVdLnB1
c2goZGlyZWN0aXZlRmFjdG9yeSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZvckVhY2gobmFtZSwg
cmV2ZXJzZVBhcmFtcyhyZWdpc3RlckRpcmVjdGl2ZSkpOwotICAgIH0KLSAgICByZXR1cm4gdGhp
czsKLSAgfTsKLQotCi0gIC8qKgotICAgKiBAbmdkb2MgZnVuY3Rpb24KLSAgICogQG5hbWUgbmcu
JGNvbXBpbGVQcm92aWRlciN1cmxTYW5pdGl6YXRpb25XaGl0ZWxpc3QKLSAgICogQG1ldGhvZE9m
IG5nLiRjb21waWxlUHJvdmlkZXIKLSAgICogQGZ1bmN0aW9uCi0gICAqCi0gICAqIEBkZXNjcmlw
dGlvbgotICAgKiBSZXRyaWV2ZXMgb3Igb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHJlZ3VsYXIgZXhw
cmVzc2lvbiB0aGF0IGlzIHVzZWQgZm9yIHdoaXRlbGlzdGluZyBvZiBzYWZlCi0gICAqIHVybHMg
ZHVyaW5nIGFbaHJlZl0gc2FuaXRpemF0aW9uLgotICAgKgotICAgKiBUaGUgc2FuaXRpemF0aW9u
IGlzIGEgc2VjdXJpdHkgbWVhc3VyZSBhaW1lZCBhdCBwcmV2ZW50IFhTUyBhdHRhY2tzIHZpYSBo
dG1sIGxpbmtzLgotICAgKgotICAgKiBBbnkgdXJsIGFib3V0IHRvIGJlIGFzc2lnbmVkIHRvIGFb
aHJlZl0gdmlhIGRhdGEtYmluZGluZyBpcyBmaXJzdCBub3JtYWxpemVkIGFuZCB0dXJuZWQgaW50
byBhbgotICAgKiBhYnNvbHV0ZSB1cmwuIEFmdGVyd2FyZHMgdGhlIHVybCBpcyBtYXRjaGVkIGFn
YWluc3QgdGhlIGB1cmxTYW5pdGl6YXRpb25XaGl0ZWxpc3RgIHJlZ3VsYXIKLSAgICogZXhwcmVz
c2lvbi4gSWYgYSBtYXRjaCBpcyBmb3VuZCB0aGUgb3JpZ2luYWwgdXJsIGlzIHdyaXR0ZW4gaW50
byB0aGUgZG9tLiBPdGhlcndpc2UgdGhlCi0gICAqIGFic29sdXRlIHVybCBpcyBwcmVmaXhlZCB3
aXRoIGAndW5zYWZlOidgIHN0cmluZyBhbmQgb25seSB0aGVuIGl0IGlzIHdyaXR0ZW4gaW50byB0
aGUgRE9NLgotICAgKgotICAgKiBAcGFyYW0ge1JlZ0V4cD19IHJlZ2V4cCBOZXcgcmVnZXhwIHRv
IHdoaXRlbGlzdCB1cmxzIHdpdGguCi0gICAqIEByZXR1cm5zIHtSZWdFeHB8bmcuJGNvbXBpbGVQ
cm92aWRlcn0gQ3VycmVudCBSZWdFeHAgaWYgY2FsbGVkIHdpdGhvdXQgdmFsdWUgb3Igc2VsZiBm
b3IKLSAgICogICAgY2hhaW5pbmcgb3RoZXJ3aXNlLgotICAgKi8KLSAgdGhpcy51cmxTYW5pdGl6
YXRpb25XaGl0ZWxpc3QgPSBmdW5jdGlvbihyZWdleHApIHsKLSAgICBpZiAoaXNEZWZpbmVkKHJl
Z2V4cCkpIHsKLSAgICAgIHVybFNhbml0aXphdGlvbldoaXRlbGlzdCA9IHJlZ2V4cDsKLSAgICAg
IHJldHVybiB0aGlzOwotICAgIH0KLSAgICByZXR1cm4gdXJsU2FuaXRpemF0aW9uV2hpdGVsaXN0
OwotICB9OwotCi0KLSAgdGhpcy4kZ2V0ID0gWwotICAgICAgICAgICAgJyRpbmplY3RvcicsICck
aW50ZXJwb2xhdGUnLCAnJGV4Y2VwdGlvbkhhbmRsZXInLCAnJGh0dHAnLCAnJHRlbXBsYXRlQ2Fj
aGUnLCAnJHBhcnNlJywKLSAgICAgICAgICAgICckY29udHJvbGxlcicsICckcm9vdFNjb3BlJywg
JyRkb2N1bWVudCcsCi0gICAgZnVuY3Rpb24oJGluamVjdG9yLCAgICRpbnRlcnBvbGF0ZSwgICAk
ZXhjZXB0aW9uSGFuZGxlciwgICAkaHR0cCwgICAkdGVtcGxhdGVDYWNoZSwgICAkcGFyc2UsCi0g
ICAgICAgICAgICAgJGNvbnRyb2xsZXIsICAgJHJvb3RTY29wZSwgICAkZG9jdW1lbnQpIHsKLQot
ICAgIHZhciBBdHRyaWJ1dGVzID0gZnVuY3Rpb24oZWxlbWVudCwgYXR0cikgewotICAgICAgdGhp
cy4kJGVsZW1lbnQgPSBlbGVtZW50OwotICAgICAgdGhpcy4kYXR0ciA9IGF0dHIgfHwge307Ci0g
ICAgfTsKLQotICAgIEF0dHJpYnV0ZXMucHJvdG90eXBlID0gewotICAgICAgJG5vcm1hbGl6ZTog
ZGlyZWN0aXZlTm9ybWFsaXplLAotCi0KLSAgICAgIC8qKgotICAgICAgICogU2V0IGEgbm9ybWFs
aXplZCBhdHRyaWJ1dGUgb24gdGhlIGVsZW1lbnQgaW4gYSB3YXkgc3VjaCB0aGF0IGFsbCBkaXJl
Y3RpdmVzCi0gICAgICAgKiBjYW4gc2hhcmUgdGhlIGF0dHJpYnV0ZS4gVGhpcyBmdW5jdGlvbiBw
cm9wZXJseSBoYW5kbGVzIGJvb2xlYW4gYXR0cmlidXRlcy4KLSAgICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSBrZXkgTm9ybWFsaXplZCBrZXkuIChpZSBuZ0F0dHJpYnV0ZSkKLSAgICAgICAqIEBwYXJh
bSB7c3RyaW5nfGJvb2xlYW59IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuIElmIGBudWxsYCBhdHRy
aWJ1dGUgd2lsbCBiZSBkZWxldGVkLgotICAgICAgICogQHBhcmFtIHtib29sZWFuPX0gd3JpdGVB
dHRyIElmIGZhbHNlLCBkb2VzIG5vdCB3cml0ZSB0aGUgdmFsdWUgdG8gRE9NIGVsZW1lbnQgYXR0
cmlidXRlLgotICAgICAgICogICAgIERlZmF1bHRzIHRvIHRydWUuCi0gICAgICAgKiBAcGFyYW0g
e3N0cmluZz19IGF0dHJOYW1lIE9wdGlvbmFsIG5vbmUgbm9ybWFsaXplZCBuYW1lLiBEZWZhdWx0
cyB0byBrZXkuCi0gICAgICAgKi8KLSAgICAgICRzZXQ6IGZ1bmN0aW9uKGtleSwgdmFsdWUsIHdy
aXRlQXR0ciwgYXR0ck5hbWUpIHsKLSAgICAgICAgdmFyIGJvb2xlYW5LZXkgPSBnZXRCb29sZWFu
QXR0ck5hbWUodGhpcy4kJGVsZW1lbnRbMF0sIGtleSksCi0gICAgICAgICAgICAkJG9ic2VydmVy
cyA9IHRoaXMuJCRvYnNlcnZlcnMsCi0gICAgICAgICAgICBub3JtYWxpemVkVmFsOwotCi0gICAg
ICAgIGlmIChib29sZWFuS2V5KSB7Ci0gICAgICAgICAgdGhpcy4kJGVsZW1lbnQucHJvcChrZXks
IHZhbHVlKTsKLSAgICAgICAgICBhdHRyTmFtZSA9IGJvb2xlYW5LZXk7Ci0gICAgICAgIH0KLQot
ICAgICAgICB0aGlzW2tleV0gPSB2YWx1ZTsKLQotICAgICAgICAvLyB0cmFuc2xhdGUgbm9ybWFs
aXplZCBrZXkgdG8gYWN0dWFsIGtleQotICAgICAgICBpZiAoYXR0ck5hbWUpIHsKLSAgICAgICAg
ICB0aGlzLiRhdHRyW2tleV0gPSBhdHRyTmFtZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICBhdHRyTmFtZSA9IHRoaXMuJGF0dHJba2V5XTsKLSAgICAgICAgICBpZiAoIWF0dHJOYW1lKSB7
Ci0gICAgICAgICAgICB0aGlzLiRhdHRyW2tleV0gPSBhdHRyTmFtZSA9IHNuYWtlX2Nhc2Uoa2V5
LCAnLScpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0KLSAgICAgICAgLy8gc2FuaXRpemUg
YVtocmVmXSB2YWx1ZXMKLSAgICAgICAgaWYgKG5vZGVOYW1lXyh0aGlzLiQkZWxlbWVudFswXSkg
PT09ICdBJyAmJiBrZXkgPT09ICdocmVmJykgewotICAgICAgICAgIHVybFNhbml0aXphdGlvbk5v
ZGUuc2V0QXR0cmlidXRlKCdocmVmJywgdmFsdWUpOwotCi0gICAgICAgICAgLy8gaHJlZiBwcm9w
ZXJ0eSBhbHdheXMgcmV0dXJucyBub3JtYWxpemVkIGFic29sdXRlIHVybCwgc28gd2UgY2FuIG1h
dGNoIGFnYWluc3QgdGhhdAotICAgICAgICAgIG5vcm1hbGl6ZWRWYWwgPSB1cmxTYW5pdGl6YXRp
b25Ob2RlLmhyZWY7Ci0gICAgICAgICAgaWYgKCFub3JtYWxpemVkVmFsLm1hdGNoKHVybFNhbml0
aXphdGlvbldoaXRlbGlzdCkpIHsKLSAgICAgICAgICAgIHRoaXNba2V5XSA9IHZhbHVlID0gJ3Vu
c2FmZTonICsgbm9ybWFsaXplZFZhbDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotCi0gICAg
ICAgIGlmICh3cml0ZUF0dHIgIT09IGZhbHNlKSB7Ci0gICAgICAgICAgaWYgKHZhbHVlID09PSBu
dWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgIHRoaXMuJCRlbGVtZW50
LnJlbW92ZUF0dHIoYXR0ck5hbWUpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0
aGlzLiQkZWxlbWVudC5hdHRyKGF0dHJOYW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gZmlyZSBvYnNlcnZlcnMKLSAgICAgICAgJCRvYnNlcnZlcnMgJiYg
Zm9yRWFjaCgkJG9ic2VydmVyc1trZXldLCBmdW5jdGlvbihmbikgewotICAgICAgICAgIHRyeSB7
Ci0gICAgICAgICAgICBmbih2YWx1ZSk7Ci0gICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAg
ICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAg
ICAgIH0sCi0KLQotICAgICAgLyoqCi0gICAgICAgKiBPYnNlcnZlIGFuIGludGVycG9sYXRlZCBh
dHRyaWJ1dGUuCi0gICAgICAgKiBUaGUgb2JzZXJ2ZXIgd2lsbCBuZXZlciBiZSBjYWxsZWQsIGlm
IGdpdmVuIGF0dHJpYnV0ZSBpcyBub3QgaW50ZXJwb2xhdGVkLgotICAgICAgICoKLSAgICAgICAq
IEBwYXJhbSB7c3RyaW5nfSBrZXkgTm9ybWFsaXplZCBrZXkuIChpZSBuZ0F0dHJpYnV0ZSkgLgot
ICAgICAgICogQHBhcmFtIHtmdW5jdGlvbigqKX0gZm4gRnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNh
bGxlZCB3aGVuZXZlciB0aGUgYXR0cmlidXRlIHZhbHVlIGNoYW5nZXMuCi0gICAgICAgKiBAcmV0
dXJucyB7ZnVuY3Rpb24oKil9IHRoZSBgZm5gIEZ1bmN0aW9uIHBhc3NlZCBpbi4KLSAgICAgICAq
LwotICAgICAgJG9ic2VydmU6IGZ1bmN0aW9uKGtleSwgZm4pIHsKLSAgICAgICAgdmFyIGF0dHJz
ID0gdGhpcywKLSAgICAgICAgICAgICQkb2JzZXJ2ZXJzID0gKGF0dHJzLiQkb2JzZXJ2ZXJzIHx8
IChhdHRycy4kJG9ic2VydmVycyA9IHt9KSksCi0gICAgICAgICAgICBsaXN0ZW5lcnMgPSAoJCRv
YnNlcnZlcnNba2V5XSB8fCAoJCRvYnNlcnZlcnNba2V5XSA9IFtdKSk7Ci0KLSAgICAgICAgbGlz
dGVuZXJzLnB1c2goZm4pOwotICAgICAgICAkcm9vdFNjb3BlLiRldmFsQXN5bmMoZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgaWYgKCFsaXN0ZW5lcnMuJCRpbnRlcikgewotICAgICAgICAgICAgLy8g
bm8gb25lIHJlZ2lzdGVyZWQgYXR0cmlidXRlIGludGVycG9sYXRpb24gZnVuY3Rpb24sIHNvIGxl
dHMgY2FsbCBpdCBtYW51YWxseQotICAgICAgICAgICAgZm4oYXR0cnNba2V5XSk7Ci0gICAgICAg
ICAgfQotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuIGZuOwotICAgICAgfQotICAgIH07Ci0K
LSAgICB2YXIgdXJsU2FuaXRpemF0aW9uTm9kZSA9ICRkb2N1bWVudFswXS5jcmVhdGVFbGVtZW50
KCdhJyksCi0gICAgICAgIHN0YXJ0U3ltYm9sID0gJGludGVycG9sYXRlLnN0YXJ0U3ltYm9sKCks
Ci0gICAgICAgIGVuZFN5bWJvbCA9ICRpbnRlcnBvbGF0ZS5lbmRTeW1ib2woKSwKLSAgICAgICAg
ZGVub3JtYWxpemVUZW1wbGF0ZSA9IChzdGFydFN5bWJvbCA9PSAne3snIHx8IGVuZFN5bWJvbCAg
PT0gJ319JykKLSAgICAgICAgICAgID8gaWRlbnRpdHkKLSAgICAgICAgICAgIDogZnVuY3Rpb24g
ZGVub3JtYWxpemVUZW1wbGF0ZSh0ZW1wbGF0ZSkgewotICAgICAgICAgICAgICByZXR1cm4gdGVt
cGxhdGUucmVwbGFjZSgvXHtcey9nLCBzdGFydFN5bWJvbCkucmVwbGFjZSgvfX0vZywgZW5kU3lt
Ym9sKTsKLSAgICAgICAgICAgIH07Ci0KLQotICAgIHJldHVybiBjb21waWxlOwotCi0gICAgLy89
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0gICAgZnVuY3Rpb24gY29tcGlsZSgk
Y29tcGlsZU5vZGVzLCB0cmFuc2NsdWRlRm4sIG1heFByaW9yaXR5KSB7Ci0gICAgICBpZiAoISgk
Y29tcGlsZU5vZGVzIGluc3RhbmNlb2YganFMaXRlKSkgewotICAgICAgICAvLyBqcXVlcnkgYWx3
YXlzIHJld3JhcHMsIHdoZXJlYXMgd2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgc2Vs
ZWN0b3Igc28gdGhhdCB3ZSBjYW4gbW9kaWZ5IGl0LgotICAgICAgICAkY29tcGlsZU5vZGVzID0g
anFMaXRlKCRjb21waWxlTm9kZXMpOwotICAgICAgfQotICAgICAgLy8gV2UgY2FuIG5vdCBjb21w
aWxlIHRvcCBsZXZlbCB0ZXh0IGVsZW1lbnRzIHNpbmNlIHRleHQgbm9kZXMgY2FuIGJlIG1lcmdl
ZCBhbmQgd2Ugd2lsbAotICAgICAgLy8gbm90IGJlIGFibGUgdG8gYXR0YWNoIHNjb3BlIGRhdGEg
dG8gdGhlbSwgc28gd2Ugd2lsbCB3cmFwIHRoZW0gaW4gPHNwYW4+Ci0gICAgICBmb3JFYWNoKCRj
b21waWxlTm9kZXMsIGZ1bmN0aW9uKG5vZGUsIGluZGV4KXsKLSAgICAgICAgaWYgKG5vZGUubm9k
ZVR5cGUgPT0gMyAvKiB0ZXh0IG5vZGUgKi8gJiYgbm9kZS5ub2RlVmFsdWUubWF0Y2goL1xTKy8p
IC8qIG5vbi1lbXB0eSAqLyApIHsKLSAgICAgICAgICAkY29tcGlsZU5vZGVzW2luZGV4XSA9IGpx
TGl0ZShub2RlKS53cmFwKCc8c3Bhbj48L3NwYW4+JykucGFyZW50KClbMF07Ci0gICAgICAgIH0K
LSAgICAgIH0pOwotICAgICAgdmFyIGNvbXBvc2l0ZUxpbmtGbiA9IGNvbXBpbGVOb2RlcygkY29t
cGlsZU5vZGVzLCB0cmFuc2NsdWRlRm4sICRjb21waWxlTm9kZXMsIG1heFByaW9yaXR5KTsKLSAg
ICAgIHJldHVybiBmdW5jdGlvbiBwdWJsaWNMaW5rRm4oc2NvcGUsIGNsb25lQ29ubmVjdEZuKXsK
LSAgICAgICAgYXNzZXJ0QXJnKHNjb3BlLCAnc2NvcGUnKTsKLSAgICAgICAgLy8gaW1wb3J0YW50
ISE6IHdlIG11c3QgY2FsbCBvdXIganFMaXRlLmNsb25lKCkgc2luY2UgdGhlIGpRdWVyeSBvbmUg
aXMgdHJ5aW5nIHRvIGJlIHNtYXJ0Ci0gICAgICAgIC8vIGFuZCBzb21ldGltZXMgY2hhbmdlcyB0
aGUgc3RydWN0dXJlIG9mIHRoZSBET00uCi0gICAgICAgIHZhciAkbGlua05vZGUgPSBjbG9uZUNv
bm5lY3RGbgotICAgICAgICAgID8gSlFMaXRlUHJvdG90eXBlLmNsb25lLmNhbGwoJGNvbXBpbGVO
b2RlcykgLy8gSU1QT1JUQU5UISEhCi0gICAgICAgICAgOiAkY29tcGlsZU5vZGVzOwotCi0gICAg
ICAgIC8vIEF0dGFjaCBzY29wZSBvbmx5IHRvIG5vbi10ZXh0IG5vZGVzLgotICAgICAgICBmb3Io
dmFyIGkgPSAwLCBpaSA9ICRsaW5rTm9kZS5sZW5ndGg7IGk8aWk7IGkrKykgewotICAgICAgICAg
IHZhciBub2RlID0gJGxpbmtOb2RlW2ldOwotICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09
IDEgLyogZWxlbWVudCAqLyB8fCBub2RlLm5vZGVUeXBlID09IDkgLyogZG9jdW1lbnQgKi8pIHsK
LSAgICAgICAgICAgICRsaW5rTm9kZS5lcShpKS5kYXRhKCckc2NvcGUnLCBzY29wZSk7Ci0gICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHNhZmVBZGRDbGFzcygkbGlua05vZGUsICduZy1z
Y29wZScpOwotICAgICAgICBpZiAoY2xvbmVDb25uZWN0Rm4pIGNsb25lQ29ubmVjdEZuKCRsaW5r
Tm9kZSwgc2NvcGUpOwotICAgICAgICBpZiAoY29tcG9zaXRlTGlua0ZuKSBjb21wb3NpdGVMaW5r
Rm4oc2NvcGUsICRsaW5rTm9kZSwgJGxpbmtOb2RlKTsKLSAgICAgICAgcmV0dXJuICRsaW5rTm9k
ZTsKLSAgICAgIH07Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gd3JvbmdNb2RlKGxvY2FsTmFtZSwg
bW9kZSkgewotICAgICAgdGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkICciICsgbW9kZSArICInIGZv
ciAnIiArIGxvY2FsTmFtZSArICInLiIpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHNhZmVBZGRD
bGFzcygkZWxlbWVudCwgY2xhc3NOYW1lKSB7Ci0gICAgICB0cnkgewotICAgICAgICAkZWxlbWVu
dC5hZGRDbGFzcyhjbGFzc05hbWUpOwotICAgICAgfSBjYXRjaChlKSB7Ci0gICAgICAgIC8vIGln
bm9yZSwgc2luY2UgaXQgbWVhbnMgdGhhdCB3ZSBhcmUgdHJ5aW5nIHRvIHNldCBjbGFzcyBvbgot
ICAgICAgICAvLyBTVkcgZWxlbWVudCwgd2hlcmUgY2xhc3MgbmFtZSBpcyByZWFkLW9ubHkuCi0g
ICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29tcGlsZSBmdW5jdGlvbiBtYXRjaGVz
IGVhY2ggbm9kZSBpbiBub2RlTGlzdCBhZ2FpbnN0IHRoZSBkaXJlY3RpdmVzLiBPbmNlIGFsbCBk
aXJlY3RpdmVzCi0gICAgICogZm9yIGEgcGFydGljdWxhciBub2RlIGFyZSBjb2xsZWN0ZWQgdGhl
aXIgY29tcGlsZSBmdW5jdGlvbnMgYXJlIGV4ZWN1dGVkLiBUaGUgY29tcGlsZQotICAgICAqIGZ1
bmN0aW9ucyByZXR1cm4gdmFsdWVzIC0gdGhlIGxpbmtpbmcgZnVuY3Rpb25zIC0gYXJlIGNvbWJp
bmVkIGludG8gYSBjb21wb3NpdGUgbGlua2luZwotICAgICAqIGZ1bmN0aW9uLCB3aGljaCBpcyB0
aGUgYSBsaW5raW5nIGZ1bmN0aW9uIGZvciB0aGUgbm9kZS4KLSAgICAgKgotICAgICAqIEBwYXJh
bSB7Tm9kZUxpc3R9IG5vZGVMaXN0IGFuIGFycmF5IG9mIG5vZGVzIG9yIE5vZGVMaXN0IHRvIGNv
bXBpbGUKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGFuZ3VsYXIuU2NvcGVbLCBjbG9uZUF0dGFj
aEZuXX0gdHJhbnNjbHVkZUZuIEEgbGlua2luZyBmdW5jdGlvbiwgd2hlcmUgdGhlCi0gICAgICog
ICAgICAgIHNjb3BlIGFyZ3VtZW50IGlzIGF1dG8tZ2VuZXJhdGVkIHRvIHRoZSBuZXcgY2hpbGQg
b2YgdGhlIHRyYW5zY2x1ZGVkIHBhcmVudCBzY29wZS4KLSAgICAgKiBAcGFyYW0ge0RPTUVsZW1l
bnQ9fSAkcm9vdEVsZW1lbnQgSWYgdGhlIG5vZGVMaXN0IGlzIHRoZSByb290IG9mIHRoZSBjb21w
aWxhdGlvbiB0cmVlIHRoZW4gdGhlCi0gICAgICogICAgICAgIHJvb3RFbGVtZW50IG11c3QgYmUg
c2V0IHRoZSBqcUxpdGUgY29sbGVjdGlvbiBvZiB0aGUgY29tcGlsZSByb290LiBUaGlzIGlzCi0g
ICAgICogICAgICAgIG5lZWRlZCBzbyB0aGF0IHRoZSBqcUxpdGUgY29sbGVjdGlvbiBpdGVtcyBj
YW4gYmUgcmVwbGFjZWQgd2l0aCB3aWRnZXRzLgotICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gbWF4
IGRpcmVjdGl2ZSBwcmlvcml0eQotICAgICAqIEByZXR1cm5zIHs/ZnVuY3Rpb259IEEgY29tcG9z
aXRlIGxpbmtpbmcgZnVuY3Rpb24gb2YgYWxsIG9mIHRoZSBtYXRjaGVkIGRpcmVjdGl2ZXMgb3Ig
bnVsbC4KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBjb21waWxlTm9kZXMobm9kZUxpc3QsIHRyYW5z
Y2x1ZGVGbiwgJHJvb3RFbGVtZW50LCBtYXhQcmlvcml0eSkgewotICAgICAgdmFyIGxpbmtGbnMg
PSBbXSwKLSAgICAgICAgICBub2RlTGlua0ZuLCBjaGlsZExpbmtGbiwgZGlyZWN0aXZlcywgYXR0
cnMsIGxpbmtGbkZvdW5kOwotCi0gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgbm9kZUxpc3QubGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgYXR0cnMgPSBuZXcgQXR0cmlidXRlcygpOwotCi0gICAgICAg
IC8vIHdlIG11c3QgYWx3YXlzIHJlZmVyIHRvIG5vZGVMaXN0W2ldIHNpbmNlIHRoZSBub2RlcyBj
YW4gYmUgcmVwbGFjZWQgdW5kZXJuZWF0aCB1cy4KLSAgICAgICAgZGlyZWN0aXZlcyA9IGNvbGxl
Y3REaXJlY3RpdmVzKG5vZGVMaXN0W2ldLCBbXSwgYXR0cnMsIG1heFByaW9yaXR5KTsKLQotICAg
ICAgICBub2RlTGlua0ZuID0gKGRpcmVjdGl2ZXMubGVuZ3RoKQotICAgICAgICAgICAgPyBhcHBs
eURpcmVjdGl2ZXNUb05vZGUoZGlyZWN0aXZlcywgbm9kZUxpc3RbaV0sIGF0dHJzLCB0cmFuc2Ns
dWRlRm4sICRyb290RWxlbWVudCkKLSAgICAgICAgICAgIDogbnVsbDsKLQotICAgICAgICBjaGls
ZExpbmtGbiA9IChub2RlTGlua0ZuICYmIG5vZGVMaW5rRm4udGVybWluYWwgfHwgIW5vZGVMaXN0
W2ldLmNoaWxkTm9kZXMgfHwgIW5vZGVMaXN0W2ldLmNoaWxkTm9kZXMubGVuZ3RoKQotICAgICAg
ICAgICAgPyBudWxsCi0gICAgICAgICAgICA6IGNvbXBpbGVOb2Rlcyhub2RlTGlzdFtpXS5jaGls
ZE5vZGVzLAotICAgICAgICAgICAgICAgICBub2RlTGlua0ZuID8gbm9kZUxpbmtGbi50cmFuc2Ns
dWRlIDogdHJhbnNjbHVkZUZuKTsKLQotICAgICAgICBsaW5rRm5zLnB1c2gobm9kZUxpbmtGbik7
Ci0gICAgICAgIGxpbmtGbnMucHVzaChjaGlsZExpbmtGbik7Ci0gICAgICAgIGxpbmtGbkZvdW5k
ID0gKGxpbmtGbkZvdW5kIHx8IG5vZGVMaW5rRm4gfHwgY2hpbGRMaW5rRm4pOwotICAgICAgfQot
Ci0gICAgICAvLyByZXR1cm4gYSBsaW5raW5nIGZ1bmN0aW9uIGlmIHdlIGhhdmUgZm91bmQgYW55
dGhpbmcsIG51bGwgb3RoZXJ3aXNlCi0gICAgICByZXR1cm4gbGlua0ZuRm91bmQgPyBjb21wb3Np
dGVMaW5rRm4gOiBudWxsOwotCi0gICAgICBmdW5jdGlvbiBjb21wb3NpdGVMaW5rRm4oc2NvcGUs
IG5vZGVMaXN0LCAkcm9vdEVsZW1lbnQsIGJvdW5kVHJhbnNjbHVkZUZuKSB7Ci0gICAgICAgIHZh
ciBub2RlTGlua0ZuLCBjaGlsZExpbmtGbiwgbm9kZSwgY2hpbGRTY29wZSwgY2hpbGRUcmFuc2Ns
dWRlRm4sIGksIGlpLCBuOwotCi0gICAgICAgIC8vIGNvcHkgbm9kZUxpc3Qgc28gdGhhdCBsaW5r
aW5nIGRvZXNuJ3QgYnJlYWsgZHVlIHRvIGxpdmUgbGlzdCB1cGRhdGVzLgotICAgICAgICB2YXIg
c3RhYmxlTm9kZUxpc3QgPSBbXTsKLSAgICAgICAgZm9yIChpID0gMCwgaWkgPSBub2RlTGlzdC5s
ZW5ndGg7IGkgPCBpaTsgaSsrKSB7Ci0gICAgICAgICAgc3RhYmxlTm9kZUxpc3QucHVzaChub2Rl
TGlzdFtpXSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IoaSA9IDAsIG4gPSAwLCBpaSA9IGxp
bmtGbnMubGVuZ3RoOyBpIDwgaWk7IG4rKykgewotICAgICAgICAgIG5vZGUgPSBzdGFibGVOb2Rl
TGlzdFtuXTsKLSAgICAgICAgICBub2RlTGlua0ZuID0gbGlua0Zuc1tpKytdOwotICAgICAgICAg
IGNoaWxkTGlua0ZuID0gbGlua0Zuc1tpKytdOwotCi0gICAgICAgICAgaWYgKG5vZGVMaW5rRm4p
IHsKLSAgICAgICAgICAgIGlmIChub2RlTGlua0ZuLnNjb3BlKSB7Ci0gICAgICAgICAgICAgIGNo
aWxkU2NvcGUgPSBzY29wZS4kbmV3KGlzT2JqZWN0KG5vZGVMaW5rRm4uc2NvcGUpKTsKLSAgICAg
ICAgICAgICAganFMaXRlKG5vZGUpLmRhdGEoJyRzY29wZScsIGNoaWxkU2NvcGUpOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgY2hpbGRTY29wZSA9IHNjb3BlOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgY2hpbGRUcmFuc2NsdWRlRm4gPSBub2RlTGlua0ZuLnRyYW5z
Y2x1ZGU7Ci0gICAgICAgICAgICBpZiAoY2hpbGRUcmFuc2NsdWRlRm4gfHwgKCFib3VuZFRyYW5z
Y2x1ZGVGbiAmJiB0cmFuc2NsdWRlRm4pKSB7Ci0gICAgICAgICAgICAgIG5vZGVMaW5rRm4oY2hp
bGRMaW5rRm4sIGNoaWxkU2NvcGUsIG5vZGUsICRyb290RWxlbWVudCwKLSAgICAgICAgICAgICAg
ICAgIChmdW5jdGlvbih0cmFuc2NsdWRlRm4pIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZ1bmN0aW9uKGNsb25lRm4pIHsKLSAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNjbHVk
ZVNjb3BlID0gc2NvcGUuJG5ldygpOwotICAgICAgICAgICAgICAgICAgICAgIHRyYW5zY2x1ZGVT
Y29wZS4kJHRyYW5zY2x1ZGVkID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cmFuc2NsdWRlRm4odHJhbnNjbHVkZVNjb3BlLCBjbG9uZUZuKS4KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgYmluZCgnJGRlc3Ryb3knLCBiaW5kKHRyYW5zY2x1ZGVTY29wZSwgdHJhbnNj
bHVkZVNjb3BlLiRkZXN0cm95KSk7Ci0gICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAg
ICAgICAgICB9KShjaGlsZFRyYW5zY2x1ZGVGbiB8fCB0cmFuc2NsdWRlRm4pCi0gICAgICAgICAg
ICAgICk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICBub2RlTGlua0ZuKGNo
aWxkTGlua0ZuLCBjaGlsZFNjb3BlLCBub2RlLCB1bmRlZmluZWQsIGJvdW5kVHJhbnNjbHVkZUZu
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkTGlua0ZuKSB7Ci0g
ICAgICAgICAgICBjaGlsZExpbmtGbihzY29wZSwgbm9kZS5jaGlsZE5vZGVzLCB1bmRlZmluZWQs
IGJvdW5kVHJhbnNjbHVkZUZuKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICB9Ci0KLQotICAgIC8qKgotICAgICAqIExvb2tzIGZvciBkaXJlY3RpdmVzIG9uIHRoZSBnaXZl
biBub2RlIGFuZCBhZGRzIHRoZW0gdG8gdGhlIGRpcmVjdGl2ZSBjb2xsZWN0aW9uIHdoaWNoIGlz
Ci0gICAgICogc29ydGVkLgotICAgICAqCi0gICAgICogQHBhcmFtIG5vZGUgTm9kZSB0byBzZWFy
Y2guCi0gICAgICogQHBhcmFtIGRpcmVjdGl2ZXMgQW4gYXJyYXkgdG8gd2hpY2ggdGhlIGRpcmVj
dGl2ZXMgYXJlIGFkZGVkIHRvLiBUaGlzIGFycmF5IGlzIHNvcnRlZCBiZWZvcmUKLSAgICAgKiAg
ICAgICAgdGhlIGZ1bmN0aW9uIHJldHVybnMuCi0gICAgICogQHBhcmFtIGF0dHJzIFRoZSBzaGFy
ZWQgYXR0cnMgb2JqZWN0IHdoaWNoIGlzIHVzZWQgdG8gcG9wdWxhdGUgdGhlIG5vcm1hbGl6ZWQg
YXR0cmlidXRlcy4KLSAgICAgKiBAcGFyYW0ge251bWJlcj19IG1heFByaW9yaXR5IE1heCBkaXJl
Y3RpdmUgcHJpb3JpdHkuCi0gICAgICovCi0gICAgZnVuY3Rpb24gY29sbGVjdERpcmVjdGl2ZXMo
bm9kZSwgZGlyZWN0aXZlcywgYXR0cnMsIG1heFByaW9yaXR5KSB7Ci0gICAgICB2YXIgbm9kZVR5
cGUgPSBub2RlLm5vZGVUeXBlLAotICAgICAgICAgIGF0dHJzTWFwID0gYXR0cnMuJGF0dHIsCi0g
ICAgICAgICAgbWF0Y2gsCi0gICAgICAgICAgY2xhc3NOYW1lOwotCi0gICAgICBzd2l0Y2gobm9k
ZVR5cGUpIHsKLSAgICAgICAgY2FzZSAxOiAvKiBFbGVtZW50ICovCi0gICAgICAgICAgLy8gdXNl
IHRoZSBub2RlIG5hbWU6IDxkaXJlY3RpdmU+Ci0gICAgICAgICAgYWRkRGlyZWN0aXZlKGRpcmVj
dGl2ZXMsCi0gICAgICAgICAgICAgIGRpcmVjdGl2ZU5vcm1hbGl6ZShub2RlTmFtZV8obm9kZSku
dG9Mb3dlckNhc2UoKSksICdFJywgbWF4UHJpb3JpdHkpOwotCi0gICAgICAgICAgLy8gaXRlcmF0
ZSBvdmVyIHRoZSBhdHRyaWJ1dGVzCi0gICAgICAgICAgZm9yICh2YXIgYXR0ciwgbmFtZSwgbk5h
bWUsIHZhbHVlLCBuQXR0cnMgPSBub2RlLmF0dHJpYnV0ZXMsCi0gICAgICAgICAgICAgICAgICAg
aiA9IDAsIGpqID0gbkF0dHJzICYmIG5BdHRycy5sZW5ndGg7IGogPCBqajsgaisrKSB7Ci0gICAg
ICAgICAgICBhdHRyID0gbkF0dHJzW2pdOwotICAgICAgICAgICAgaWYgKGF0dHIuc3BlY2lmaWVk
KSB7Ci0gICAgICAgICAgICAgIG5hbWUgPSBhdHRyLm5hbWU7Ci0gICAgICAgICAgICAgIG5OYW1l
ID0gZGlyZWN0aXZlTm9ybWFsaXplKG5hbWUudG9Mb3dlckNhc2UoKSk7Ci0gICAgICAgICAgICAg
IGF0dHJzTWFwW25OYW1lXSA9IG5hbWU7Ci0gICAgICAgICAgICAgIGF0dHJzW25OYW1lXSA9IHZh
bHVlID0gdHJpbSgobXNpZSAmJiBuYW1lID09ICdocmVmJykKLSAgICAgICAgICAgICAgICA/IGRl
Y29kZVVSSUNvbXBvbmVudChub2RlLmdldEF0dHJpYnV0ZShuYW1lLCAyKSkKLSAgICAgICAgICAg
ICAgICA6IGF0dHIudmFsdWUpOwotICAgICAgICAgICAgICBpZiAoZ2V0Qm9vbGVhbkF0dHJOYW1l
KG5vZGUsIG5OYW1lKSkgewotICAgICAgICAgICAgICAgIGF0dHJzW25OYW1lXSA9IHRydWU7IC8v
IHByZXNlbmNlIG1lYW5zIHRydWUKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBhZGRB
dHRySW50ZXJwb2xhdGVEaXJlY3RpdmUobm9kZSwgZGlyZWN0aXZlcywgdmFsdWUsIG5OYW1lKTsK
LSAgICAgICAgICAgICAgYWRkRGlyZWN0aXZlKGRpcmVjdGl2ZXMsIG5OYW1lLCAnQScsIG1heFBy
aW9yaXR5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAvLyB1c2Ug
Y2xhc3MgYXMgZGlyZWN0aXZlCi0gICAgICAgICAgY2xhc3NOYW1lID0gbm9kZS5jbGFzc05hbWU7
Ci0gICAgICAgICAgaWYgKGlzU3RyaW5nKGNsYXNzTmFtZSkgJiYgY2xhc3NOYW1lICE9PSAnJykg
ewotICAgICAgICAgICAgd2hpbGUgKG1hdGNoID0gQ0xBU1NfRElSRUNUSVZFX1JFR0VYUC5leGVj
KGNsYXNzTmFtZSkpIHsKLSAgICAgICAgICAgICAgbk5hbWUgPSBkaXJlY3RpdmVOb3JtYWxpemUo
bWF0Y2hbMl0pOwotICAgICAgICAgICAgICBpZiAoYWRkRGlyZWN0aXZlKGRpcmVjdGl2ZXMsIG5O
YW1lLCAnQycsIG1heFByaW9yaXR5KSkgewotICAgICAgICAgICAgICAgIGF0dHJzW25OYW1lXSA9
IHRyaW0obWF0Y2hbM10pOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGNsYXNzTmFt
ZSA9IGNsYXNzTmFtZS5zdWJzdHIobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAz
OiAvKiBUZXh0IE5vZGUgKi8KLSAgICAgICAgICBhZGRUZXh0SW50ZXJwb2xhdGVEaXJlY3RpdmUo
ZGlyZWN0aXZlcywgbm9kZS5ub2RlVmFsdWUpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIDg6IC8qIENvbW1lbnQgKi8KLSAgICAgICAgICB0cnkgewotICAgICAgICAgICAgbWF0Y2gg
PSBDT01NRU5UX0RJUkVDVElWRV9SRUdFWFAuZXhlYyhub2RlLm5vZGVWYWx1ZSk7Ci0gICAgICAg
ICAgICBpZiAobWF0Y2gpIHsKLSAgICAgICAgICAgICAgbk5hbWUgPSBkaXJlY3RpdmVOb3JtYWxp
emUobWF0Y2hbMV0pOwotICAgICAgICAgICAgICBpZiAoYWRkRGlyZWN0aXZlKGRpcmVjdGl2ZXMs
IG5OYW1lLCAnTScsIG1heFByaW9yaXR5KSkgewotICAgICAgICAgICAgICAgIGF0dHJzW25OYW1l
XSA9IHRyaW0obWF0Y2hbMl0pOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgLy8gdHVybnMgb3V0IHRoYXQgdW5kZXIg
c29tZSBjaXJjdW1zdGFuY2VzIElFOSB0aHJvd3MgZXJyb3JzIHdoZW4gb25lIGF0dGVtcHRzIHRv
IHJlYWQgY29tbWVudCdzIG5vZGUgdmFsdWUuCi0gICAgICAgICAgICAvLyBKdXN0IGlnbm9yZSBp
dCBhbmQgY29udGludWUuIChDYW4ndCBzZWVtIHRvIHJlcHJvZHVjZSBpbiB0ZXN0IGNhc2UuKQot
ICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgZGlyZWN0aXZl
cy5zb3J0KGJ5UHJpb3JpdHkpOwotICAgICAgcmV0dXJuIGRpcmVjdGl2ZXM7Ci0gICAgfQotCi0K
LSAgICAvKioKLSAgICAgKiBPbmNlIHRoZSBkaXJlY3RpdmVzIGhhdmUgYmVlbiBjb2xsZWN0ZWQs
IHRoZWlyIGNvbXBpbGUgZnVuY3Rpb25zIGFyZSBleGVjdXRlZC4gVGhpcyBtZXRob2QKLSAgICAg
KiBpcyByZXNwb25zaWJsZSBmb3IgaW5saW5pbmcgZGlyZWN0aXZlIHRlbXBsYXRlcyBhcyB3ZWxs
IGFzIHRlcm1pbmF0aW5nIHRoZSBhcHBsaWNhdGlvbgotICAgICAqIG9mIHRoZSBkaXJlY3RpdmVz
IGlmIHRoZSB0ZXJtaW5hbCBkaXJlY3RpdmUgaGFzIGJlZW4gcmVhY2hlZC4KLSAgICAgKgotICAg
ICAqIEBwYXJhbSB7QXJyYXl9IGRpcmVjdGl2ZXMgQXJyYXkgb2YgY29sbGVjdGVkIGRpcmVjdGl2
ZXMgdG8gZXhlY3V0ZSB0aGVpciBjb21waWxlIGZ1bmN0aW9uLgotICAgICAqICAgICAgICB0aGlz
IG5lZWRzIHRvIGJlIHByZS1zb3J0ZWQgYnkgcHJpb3JpdHkgb3JkZXIuCi0gICAgICogQHBhcmFt
IHtOb2RlfSBjb21waWxlTm9kZSBUaGUgcmF3IERPTSBub2RlIHRvIGFwcGx5IHRoZSBjb21waWxl
IGZ1bmN0aW9ucyB0bwotICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0ZW1wbGF0ZUF0dHJzIFRoZSBz
aGFyZWQgYXR0cmlidXRlIGZ1bmN0aW9uCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbihhbmd1bGFy
LlNjb3BlWywgY2xvbmVBdHRhY2hGbl19IHRyYW5zY2x1ZGVGbiBBIGxpbmtpbmcgZnVuY3Rpb24s
IHdoZXJlIHRoZQotICAgICAqICAgICAgICBzY29wZSBhcmd1bWVudCBpcyBhdXRvLWdlbmVyYXRl
ZCB0byB0aGUgbmV3IGNoaWxkIG9mIHRoZSB0cmFuc2NsdWRlZCBwYXJlbnQgc2NvcGUuCi0gICAg
ICogQHBhcmFtIHtKUUxpdGV9IGpxQ29sbGVjdGlvbiBJZiB3ZSBhcmUgd29ya2luZyBvbiB0aGUg
cm9vdCBvZiB0aGUgY29tcGlsZSB0cmVlIHRoZW4gdGhpcwotICAgICAqICAgICAgICBhcmd1bWVu
dCBoYXMgdGhlIHJvb3QganFMaXRlIGFycmF5IHNvIHRoYXQgd2UgY2FuIHJlcGxhY2Ugbm9kZXMg
b24gaXQuCi0gICAgICogQHJldHVybnMgbGlua0ZuCi0gICAgICovCi0gICAgZnVuY3Rpb24gYXBw
bHlEaXJlY3RpdmVzVG9Ob2RlKGRpcmVjdGl2ZXMsIGNvbXBpbGVOb2RlLCB0ZW1wbGF0ZUF0dHJz
LCB0cmFuc2NsdWRlRm4sIGpxQ29sbGVjdGlvbikgewotICAgICAgdmFyIHRlcm1pbmFsUHJpb3Jp
dHkgPSAtTnVtYmVyLk1BWF9WQUxVRSwKLSAgICAgICAgICBwcmVMaW5rRm5zID0gW10sCi0gICAg
ICAgICAgcG9zdExpbmtGbnMgPSBbXSwKLSAgICAgICAgICBuZXdTY29wZURpcmVjdGl2ZSA9IG51
bGwsCi0gICAgICAgICAgbmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlID0gbnVsbCwKLSAgICAgICAg
ICB0ZW1wbGF0ZURpcmVjdGl2ZSA9IG51bGwsCi0gICAgICAgICAgJGNvbXBpbGVOb2RlID0gdGVt
cGxhdGVBdHRycy4kJGVsZW1lbnQgPSBqcUxpdGUoY29tcGlsZU5vZGUpLAotICAgICAgICAgIGRp
cmVjdGl2ZSwKLSAgICAgICAgICBkaXJlY3RpdmVOYW1lLAotICAgICAgICAgICR0ZW1wbGF0ZSwK
LSAgICAgICAgICB0cmFuc2NsdWRlRGlyZWN0aXZlLAotICAgICAgICAgIGNoaWxkVHJhbnNjbHVk
ZUZuID0gdHJhbnNjbHVkZUZuLAotICAgICAgICAgIGNvbnRyb2xsZXJEaXJlY3RpdmVzLAotICAg
ICAgICAgIGxpbmtGbiwKLSAgICAgICAgICBkaXJlY3RpdmVWYWx1ZTsKLQotICAgICAgLy8gZXhl
Y3V0ZXMgYWxsIGRpcmVjdGl2ZXMgb24gdGhlIGN1cnJlbnQgZWxlbWVudAotICAgICAgZm9yKHZh
ciBpID0gMCwgaWkgPSBkaXJlY3RpdmVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKLSAgICAgICAg
ZGlyZWN0aXZlID0gZGlyZWN0aXZlc1tpXTsKLSAgICAgICAgJHRlbXBsYXRlID0gdW5kZWZpbmVk
OwotCi0gICAgICAgIGlmICh0ZXJtaW5hbFByaW9yaXR5ID4gZGlyZWN0aXZlLnByaW9yaXR5KSB7
Ci0gICAgICAgICAgYnJlYWs7IC8vIHByZXZlbnQgZnVydGhlciBwcm9jZXNzaW5nIG9mIGRpcmVj
dGl2ZXMKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkaXJlY3RpdmVWYWx1ZSA9IGRpcmVjdGl2
ZS5zY29wZSkgewotICAgICAgICAgIGFzc2VydE5vRHVwbGljYXRlKCdpc29sYXRlZCBzY29wZScs
IG5ld0lzb2xhdGVTY29wZURpcmVjdGl2ZSwgZGlyZWN0aXZlLCAkY29tcGlsZU5vZGUpOwotICAg
ICAgICAgIGlmIChpc09iamVjdChkaXJlY3RpdmVWYWx1ZSkpIHsKLSAgICAgICAgICAgIHNhZmVB
ZGRDbGFzcygkY29tcGlsZU5vZGUsICduZy1pc29sYXRlLXNjb3BlJyk7Ci0gICAgICAgICAgICBu
ZXdJc29sYXRlU2NvcGVEaXJlY3RpdmUgPSBkaXJlY3RpdmU7Ci0gICAgICAgICAgfQotICAgICAg
ICAgIHNhZmVBZGRDbGFzcygkY29tcGlsZU5vZGUsICduZy1zY29wZScpOwotICAgICAgICAgIG5l
d1Njb3BlRGlyZWN0aXZlID0gbmV3U2NvcGVEaXJlY3RpdmUgfHwgZGlyZWN0aXZlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZGlyZWN0aXZlTmFtZSA9IGRpcmVjdGl2ZS5uYW1lOwotCi0gICAgICAg
IGlmIChkaXJlY3RpdmVWYWx1ZSA9IGRpcmVjdGl2ZS5jb250cm9sbGVyKSB7Ci0gICAgICAgICAg
Y29udHJvbGxlckRpcmVjdGl2ZXMgPSBjb250cm9sbGVyRGlyZWN0aXZlcyB8fCB7fTsKLSAgICAg
ICAgICBhc3NlcnROb0R1cGxpY2F0ZSgiJyIgKyBkaXJlY3RpdmVOYW1lICsgIicgY29udHJvbGxl
ciIsCi0gICAgICAgICAgICAgIGNvbnRyb2xsZXJEaXJlY3RpdmVzW2RpcmVjdGl2ZU5hbWVdLCBk
aXJlY3RpdmUsICRjb21waWxlTm9kZSk7Ci0gICAgICAgICAgY29udHJvbGxlckRpcmVjdGl2ZXNb
ZGlyZWN0aXZlTmFtZV0gPSBkaXJlY3RpdmU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGly
ZWN0aXZlVmFsdWUgPSBkaXJlY3RpdmUudHJhbnNjbHVkZSkgewotICAgICAgICAgIGFzc2VydE5v
RHVwbGljYXRlKCd0cmFuc2NsdXNpb24nLCB0cmFuc2NsdWRlRGlyZWN0aXZlLCBkaXJlY3RpdmUs
ICRjb21waWxlTm9kZSk7Ci0gICAgICAgICAgdHJhbnNjbHVkZURpcmVjdGl2ZSA9IGRpcmVjdGl2
ZTsKLSAgICAgICAgICB0ZXJtaW5hbFByaW9yaXR5ID0gZGlyZWN0aXZlLnByaW9yaXR5OwotICAg
ICAgICAgIGlmIChkaXJlY3RpdmVWYWx1ZSA9PSAnZWxlbWVudCcpIHsKLSAgICAgICAgICAgICR0
ZW1wbGF0ZSA9IGpxTGl0ZShjb21waWxlTm9kZSk7Ci0gICAgICAgICAgICAkY29tcGlsZU5vZGUg
PSB0ZW1wbGF0ZUF0dHJzLiQkZWxlbWVudCA9Ci0gICAgICAgICAgICAgICAganFMaXRlKGRvY3Vt
ZW50LmNyZWF0ZUNvbW1lbnQoJyAnICsgZGlyZWN0aXZlTmFtZSArICc6ICcgKyB0ZW1wbGF0ZUF0
dHJzW2RpcmVjdGl2ZU5hbWVdICsgJyAnKSk7Ci0gICAgICAgICAgICBjb21waWxlTm9kZSA9ICRj
b21waWxlTm9kZVswXTsKLSAgICAgICAgICAgIHJlcGxhY2VXaXRoKGpxQ29sbGVjdGlvbiwganFM
aXRlKCR0ZW1wbGF0ZVswXSksIGNvbXBpbGVOb2RlKTsKLSAgICAgICAgICAgIGNoaWxkVHJhbnNj
bHVkZUZuID0gY29tcGlsZSgkdGVtcGxhdGUsIHRyYW5zY2x1ZGVGbiwgdGVybWluYWxQcmlvcml0
eSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICR0ZW1wbGF0ZSA9IGpxTGl0ZShK
UUxpdGVDbG9uZShjb21waWxlTm9kZSkpLmNvbnRlbnRzKCk7Ci0gICAgICAgICAgICAkY29tcGls
ZU5vZGUuaHRtbCgnJyk7IC8vIGNsZWFyIGNvbnRlbnRzCi0gICAgICAgICAgICBjaGlsZFRyYW5z
Y2x1ZGVGbiA9IGNvbXBpbGUoJHRlbXBsYXRlLCB0cmFuc2NsdWRlRm4pOwotICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIGlmICgoZGlyZWN0aXZlVmFsdWUgPSBkaXJlY3RpdmUudGVt
cGxhdGUpKSB7Ci0gICAgICAgICAgYXNzZXJ0Tm9EdXBsaWNhdGUoJ3RlbXBsYXRlJywgdGVtcGxh
dGVEaXJlY3RpdmUsIGRpcmVjdGl2ZSwgJGNvbXBpbGVOb2RlKTsKLSAgICAgICAgICB0ZW1wbGF0
ZURpcmVjdGl2ZSA9IGRpcmVjdGl2ZTsKLSAgICAgICAgICBkaXJlY3RpdmVWYWx1ZSA9IGRlbm9y
bWFsaXplVGVtcGxhdGUoZGlyZWN0aXZlVmFsdWUpOwotCi0gICAgICAgICAgaWYgKGRpcmVjdGl2
ZS5yZXBsYWNlKSB7Ci0gICAgICAgICAgICAkdGVtcGxhdGUgPSBqcUxpdGUoJzxkaXY+JyArCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmltKGRpcmVjdGl2ZVZhbHVlKSArCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicpLmNvbnRlbnRzKCk7Ci0gICAg
ICAgICAgICBjb21waWxlTm9kZSA9ICR0ZW1wbGF0ZVswXTsKLQotICAgICAgICAgICAgaWYgKCR0
ZW1wbGF0ZS5sZW5ndGggIT0gMSB8fCBjb21waWxlTm9kZS5ub2RlVHlwZSAhPT0gMSkgewotICAg
ICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoTVVMVElfUk9PVF9URU1QTEFURV9FUlJPUiArIGRp
cmVjdGl2ZVZhbHVlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmVwbGFjZVdpdGgo
anFDb2xsZWN0aW9uLCAkY29tcGlsZU5vZGUsIGNvbXBpbGVOb2RlKTsKLQotICAgICAgICAgICAg
dmFyIG5ld1RlbXBsYXRlQXR0cnMgPSB7JGF0dHI6IHt9fTsKLQotICAgICAgICAgICAgLy8gY29t
YmluZSBkaXJlY3RpdmVzIGZyb20gdGhlIG9yaWdpbmFsIG5vZGUgYW5kIGZyb20gdGhlIHRlbXBs
YXRlOgotICAgICAgICAgICAgLy8gLSB0YWtlIHRoZSBhcnJheSBvZiBkaXJlY3RpdmVzIGZvciB0
aGlzIGVsZW1lbnQKLSAgICAgICAgICAgIC8vIC0gc3BsaXQgaXQgaW50byB0d28gcGFydHMsIHRo
b3NlIHRoYXQgd2VyZSBhbHJlYWR5IGFwcGxpZWQgYW5kIHRob3NlIHRoYXQgd2VyZW4ndAotICAg
ICAgICAgICAgLy8gLSBjb2xsZWN0IGRpcmVjdGl2ZXMgZnJvbSB0aGUgdGVtcGxhdGUsIGFkZCB0
aGVtIHRvIHRoZSBzZWNvbmQgZ3JvdXAgYW5kIHNvcnQgdGhlbQotICAgICAgICAgICAgLy8gLSBh
cHBlbmQgdGhlIHNlY29uZCBncm91cCB3aXRoIG5ldyBkaXJlY3RpdmVzIHRvIHRoZSBmaXJzdCBn
cm91cAotICAgICAgICAgICAgZGlyZWN0aXZlcyA9IGRpcmVjdGl2ZXMuY29uY2F0KAotICAgICAg
ICAgICAgICAgIGNvbGxlY3REaXJlY3RpdmVzKAotICAgICAgICAgICAgICAgICAgICBjb21waWxl
Tm9kZSwKLSAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5zcGxpY2UoaSArIDEsIGRpcmVj
dGl2ZXMubGVuZ3RoIC0gKGkgKyAxKSksCi0gICAgICAgICAgICAgICAgICAgIG5ld1RlbXBsYXRl
QXR0cnMKLSAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICApOwotICAgICAgICAgICAgbWVy
Z2VUZW1wbGF0ZUF0dHJpYnV0ZXModGVtcGxhdGVBdHRycywgbmV3VGVtcGxhdGVBdHRycyk7Ci0K
LSAgICAgICAgICAgIGlpID0gZGlyZWN0aXZlcy5sZW5ndGg7Ci0gICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICRjb21waWxlTm9kZS5odG1sKGRpcmVjdGl2ZVZhbHVlKTsKLSAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGlyZWN0aXZlLnRlbXBsYXRlVXJsKSB7Ci0g
ICAgICAgICAgYXNzZXJ0Tm9EdXBsaWNhdGUoJ3RlbXBsYXRlJywgdGVtcGxhdGVEaXJlY3RpdmUs
IGRpcmVjdGl2ZSwgJGNvbXBpbGVOb2RlKTsKLSAgICAgICAgICB0ZW1wbGF0ZURpcmVjdGl2ZSA9
IGRpcmVjdGl2ZTsKLSAgICAgICAgICBub2RlTGlua0ZuID0gY29tcGlsZVRlbXBsYXRlVXJsKGRp
cmVjdGl2ZXMuc3BsaWNlKGksIGRpcmVjdGl2ZXMubGVuZ3RoIC0gaSksCi0gICAgICAgICAgICAg
IG5vZGVMaW5rRm4sICRjb21waWxlTm9kZSwgdGVtcGxhdGVBdHRycywganFDb2xsZWN0aW9uLCBk
aXJlY3RpdmUucmVwbGFjZSwKLSAgICAgICAgICAgICAgY2hpbGRUcmFuc2NsdWRlRm4pOwotICAg
ICAgICAgIGlpID0gZGlyZWN0aXZlcy5sZW5ndGg7Ci0gICAgICAgIH0gZWxzZSBpZiAoZGlyZWN0
aXZlLmNvbXBpbGUpIHsKLSAgICAgICAgICB0cnkgewotICAgICAgICAgICAgbGlua0ZuID0gZGly
ZWN0aXZlLmNvbXBpbGUoJGNvbXBpbGVOb2RlLCB0ZW1wbGF0ZUF0dHJzLCBjaGlsZFRyYW5zY2x1
ZGVGbik7Ci0gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihsaW5rRm4pKSB7Ci0gICAgICAgICAg
ICAgIGFkZExpbmtGbnMobnVsbCwgbGlua0ZuKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobGlu
a0ZuKSB7Ci0gICAgICAgICAgICAgIGFkZExpbmtGbnMobGlua0ZuLnByZSwgbGlua0ZuLnBvc3Qp
OwotICAgICAgICAgICAgfQotICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgICRl
eGNlcHRpb25IYW5kbGVyKGUsIHN0YXJ0aW5nVGFnKCRjb21waWxlTm9kZSkpOwotICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkaXJlY3RpdmUudGVybWluYWwpIHsKLSAgICAg
ICAgICBub2RlTGlua0ZuLnRlcm1pbmFsID0gdHJ1ZTsKLSAgICAgICAgICB0ZXJtaW5hbFByaW9y
aXR5ID0gTWF0aC5tYXgodGVybWluYWxQcmlvcml0eSwgZGlyZWN0aXZlLnByaW9yaXR5KTsKLSAg
ICAgICAgfQotCi0gICAgICB9Ci0KLSAgICAgIG5vZGVMaW5rRm4uc2NvcGUgPSBuZXdTY29wZURp
cmVjdGl2ZSAmJiBuZXdTY29wZURpcmVjdGl2ZS5zY29wZTsKLSAgICAgIG5vZGVMaW5rRm4udHJh
bnNjbHVkZSA9IHRyYW5zY2x1ZGVEaXJlY3RpdmUgJiYgY2hpbGRUcmFuc2NsdWRlRm47Ci0KLSAg
ICAgIC8vIG1pZ2h0IGJlIG5vcm1hbCBvciBkZWxheWVkIG5vZGVMaW5rRm4gZGVwZW5kaW5nIG9u
IGlmIHRlbXBsYXRlVXJsIGlzIHByZXNlbnQKLSAgICAgIHJldHVybiBub2RlTGlua0ZuOwotCi0g
ICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0gICAgICBmdW5jdGlvbiBhZGRMaW5rRm5zKHBy
ZSwgcG9zdCkgewotICAgICAgICBpZiAocHJlKSB7Ci0gICAgICAgICAgcHJlLnJlcXVpcmUgPSBk
aXJlY3RpdmUucmVxdWlyZTsKLSAgICAgICAgICBwcmVMaW5rRm5zLnB1c2gocHJlKTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAocG9zdCkgewotICAgICAgICAgIHBvc3QucmVxdWlyZSA9IGRpcmVj
dGl2ZS5yZXF1aXJlOwotICAgICAgICAgIHBvc3RMaW5rRm5zLnB1c2gocG9zdCk7Ci0gICAgICAg
IH0KLSAgICAgIH0KLQotCi0gICAgICBmdW5jdGlvbiBnZXRDb250cm9sbGVycyhyZXF1aXJlLCAk
ZWxlbWVudCkgewotICAgICAgICB2YXIgdmFsdWUsIHJldHJpZXZhbE1ldGhvZCA9ICdkYXRhJywg
b3B0aW9uYWwgPSBmYWxzZTsKLSAgICAgICAgaWYgKGlzU3RyaW5nKHJlcXVpcmUpKSB7Ci0gICAg
ICAgICAgd2hpbGUoKHZhbHVlID0gcmVxdWlyZS5jaGFyQXQoMCkpID09ICdeJyB8fCB2YWx1ZSA9
PSAnPycpIHsKLSAgICAgICAgICAgIHJlcXVpcmUgPSByZXF1aXJlLnN1YnN0cigxKTsKLSAgICAg
ICAgICAgIGlmICh2YWx1ZSA9PSAnXicpIHsKLSAgICAgICAgICAgICAgcmV0cmlldmFsTWV0aG9k
ID0gJ2luaGVyaXRlZERhdGEnOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgb3B0aW9uYWwg
PSBvcHRpb25hbCB8fCB2YWx1ZSA9PSAnPyc7Ci0gICAgICAgICAgfQotICAgICAgICAgIHZhbHVl
ID0gJGVsZW1lbnRbcmV0cmlldmFsTWV0aG9kXSgnJCcgKyByZXF1aXJlICsgJ0NvbnRyb2xsZXIn
KTsKLSAgICAgICAgICBpZiAoIXZhbHVlICYmICFvcHRpb25hbCkgewotICAgICAgICAgICAgdGhy
b3cgRXJyb3IoIk5vIGNvbnRyb2xsZXI6ICIgKyByZXF1aXJlKTsKLSAgICAgICAgICB9Ci0gICAg
ICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkocmVxdWlyZSkp
IHsKLSAgICAgICAgICB2YWx1ZSA9IFtdOwotICAgICAgICAgIGZvckVhY2gocmVxdWlyZSwgZnVu
Y3Rpb24ocmVxdWlyZSkgewotICAgICAgICAgICAgdmFsdWUucHVzaChnZXRDb250cm9sbGVycyhy
ZXF1aXJlLCAkZWxlbWVudCkpOwotICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiB2YWx1ZTsKLSAgICAgIH0KLQotCi0gICAgICBmdW5jdGlvbiBub2RlTGlua0ZuKGNoaWxk
TGlua0ZuLCBzY29wZSwgbGlua05vZGUsICRyb290RWxlbWVudCwgYm91bmRUcmFuc2NsdWRlRm4p
IHsKLSAgICAgICAgdmFyIGF0dHJzLCAkZWxlbWVudCwgaSwgaWksIGxpbmtGbiwgY29udHJvbGxl
cjsKLQotICAgICAgICBpZiAoY29tcGlsZU5vZGUgPT09IGxpbmtOb2RlKSB7Ci0gICAgICAgICAg
YXR0cnMgPSB0ZW1wbGF0ZUF0dHJzOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGF0dHJz
ID0gc2hhbGxvd0NvcHkodGVtcGxhdGVBdHRycywgbmV3IEF0dHJpYnV0ZXMoanFMaXRlKGxpbmtO
b2RlKSwgdGVtcGxhdGVBdHRycy4kYXR0cikpOwotICAgICAgICB9Ci0gICAgICAgICRlbGVtZW50
ID0gYXR0cnMuJCRlbGVtZW50OwotCi0gICAgICAgIGlmIChuZXdJc29sYXRlU2NvcGVEaXJlY3Rp
dmUpIHsKLSAgICAgICAgICB2YXIgTE9DQUxfUkVHRVhQID0gL15ccyooW0A9Jl0pXHMqKFx3Kilc
cyokLzsKLQotICAgICAgICAgIHZhciBwYXJlbnRTY29wZSA9IHNjb3BlLiRwYXJlbnQgfHwgc2Nv
cGU7Ci0KLSAgICAgICAgICBmb3JFYWNoKG5ld0lzb2xhdGVTY29wZURpcmVjdGl2ZS5zY29wZSwg
ZnVuY3Rpb24oZGVmaW5pdG9uLCBzY29wZU5hbWUpIHsKLSAgICAgICAgICAgIHZhciBtYXRjaCA9
IGRlZmluaXRvbi5tYXRjaChMT0NBTF9SRUdFWFApIHx8IFtdLAotICAgICAgICAgICAgICAgIGF0
dHJOYW1lID0gbWF0Y2hbMl18fCBzY29wZU5hbWUsCi0gICAgICAgICAgICAgICAgbW9kZSA9IG1h
dGNoWzFdLCAvLyBALCA9LCBvciAmCi0gICAgICAgICAgICAgICAgbGFzdFZhbHVlLAotICAgICAg
ICAgICAgICAgIHBhcmVudEdldCwgcGFyZW50U2V0OwotCi0gICAgICAgICAgICBzY29wZS4kJGlz
b2xhdGVCaW5kaW5nc1tzY29wZU5hbWVdID0gbW9kZSArIGF0dHJOYW1lOwotCi0gICAgICAgICAg
ICBzd2l0Y2ggKG1vZGUpIHsKLQotICAgICAgICAgICAgICBjYXNlICdAJzogewotICAgICAgICAg
ICAgICAgIGF0dHJzLiRvYnNlcnZlKGF0dHJOYW1lLCBmdW5jdGlvbih2YWx1ZSkgewotICAgICAg
ICAgICAgICAgICAgc2NvcGVbc2NvcGVOYW1lXSA9IHZhbHVlOwotICAgICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgICAgIGF0dHJzLiQkb2JzZXJ2ZXJzW2F0dHJOYW1lXS4kJHNjb3BlID0g
cGFyZW50U2NvcGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICBjYXNlICc9JzogewotICAgICAgICAgICAgICAgIHBhcmVudEdldCA9ICRw
YXJzZShhdHRyc1thdHRyTmFtZV0pOwotICAgICAgICAgICAgICAgIHBhcmVudFNldCA9IHBhcmVu
dEdldC5hc3NpZ24gfHwgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAvLyByZXNldCB0
aGUgY2hhbmdlLCBvciB3ZSB3aWxsIHRocm93IHRoaXMgZXhjZXB0aW9uIG9uIGV2ZXJ5ICRkaWdl
c3QKLSAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSA9IHNjb3BlW3Njb3BlTmFtZV0gPSBwYXJl
bnRHZXQocGFyZW50U2NvcGUpOwotICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoTk9OX0FT
U0lHTkFCTEVfTU9ERUxfRVhQUkVTU0lPTiArIGF0dHJzW2F0dHJOYW1lXSArCi0gICAgICAgICAg
ICAgICAgICAgICAgJyAoZGlyZWN0aXZlOiAnICsgbmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlLm5h
bWUgKyAnKScpOwotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgbGFzdFZhbHVl
ID0gc2NvcGVbc2NvcGVOYW1lXSA9IHBhcmVudEdldChwYXJlbnRTY29wZSk7Ci0gICAgICAgICAg
ICAgICAgc2NvcGUuJHdhdGNoKGZ1bmN0aW9uIHBhcmVudFZhbHVlV2F0Y2goKSB7Ci0gICAgICAg
ICAgICAgICAgICB2YXIgcGFyZW50VmFsdWUgPSBwYXJlbnRHZXQocGFyZW50U2NvcGUpOwotCi0g
ICAgICAgICAgICAgICAgICBpZiAocGFyZW50VmFsdWUgIT09IHNjb3BlW3Njb3BlTmFtZV0pIHsK
LSAgICAgICAgICAgICAgICAgICAgLy8gd2UgYXJlIG91dCBvZiBzeW5jIGFuZCBuZWVkIHRvIGNv
cHkKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFZhbHVlICE9PSBsYXN0VmFsdWUpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAvLyBwYXJlbnQgY2hhbmdlZCBhbmQgaXQgaGFzIHByZWNl
ZGVuY2UKLSAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWUgPSBzY29wZVtzY29wZU5hbWVd
ID0gcGFyZW50VmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgLy8gaWYgdGhlIHBhcmVudCBjYW4gYmUgYXNzaWduZWQgdGhlbiBkbyBzbwot
ICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFNldChwYXJlbnRTY29wZSwgcGFyZW50VmFsdWUg
PSBsYXN0VmFsdWUgPSBzY29wZVtzY29wZU5hbWVdKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudFZhbHVl
OwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgY2FzZSAnJic6IHsKLSAgICAgICAgICAgICAgICBwYXJl
bnRHZXQgPSAkcGFyc2UoYXR0cnNbYXR0ck5hbWVdKTsKLSAgICAgICAgICAgICAgICBzY29wZVtz
Y29wZU5hbWVdID0gZnVuY3Rpb24obG9jYWxzKSB7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4g
cGFyZW50R2V0KHBhcmVudFNjb3BlLCBsb2NhbHMpOwotICAgICAgICAgICAgICAgIH07Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICBkZWZh
dWx0OiB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgaXNvbGF0ZSBzY29w
ZSBkZWZpbml0aW9uIGZvciBkaXJlY3RpdmUgJyArCi0gICAgICAgICAgICAgICAgICAgIG5ld0lz
b2xhdGVTY29wZURpcmVjdGl2ZS5uYW1lICsgJzogJyArIGRlZmluaXRvbik7Ci0gICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChjb250cm9sbGVyRGlyZWN0aXZlcykgewotICAgICAgICAgIGZvckVhY2goY29udHJvbGxl
ckRpcmVjdGl2ZXMsIGZ1bmN0aW9uKGRpcmVjdGl2ZSkgewotICAgICAgICAgICAgdmFyIGxvY2Fs
cyA9IHsKLSAgICAgICAgICAgICAgJHNjb3BlOiBzY29wZSwKLSAgICAgICAgICAgICAgJGVsZW1l
bnQ6ICRlbGVtZW50LAotICAgICAgICAgICAgICAkYXR0cnM6IGF0dHJzLAotICAgICAgICAgICAg
ICAkdHJhbnNjbHVkZTogYm91bmRUcmFuc2NsdWRlRm4KLSAgICAgICAgICAgIH07Ci0KLSAgICAg
ICAgICAgIGNvbnRyb2xsZXIgPSBkaXJlY3RpdmUuY29udHJvbGxlcjsKLSAgICAgICAgICAgIGlm
IChjb250cm9sbGVyID09ICdAJykgewotICAgICAgICAgICAgICBjb250cm9sbGVyID0gYXR0cnNb
ZGlyZWN0aXZlLm5hbWVdOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAkZWxlbWVudC5k
YXRhKAotICAgICAgICAgICAgICAgICckJyArIGRpcmVjdGl2ZS5uYW1lICsgJ0NvbnRyb2xsZXIn
LAotICAgICAgICAgICAgICAgICRjb250cm9sbGVyKGNvbnRyb2xsZXIsIGxvY2FscykpOwotICAg
ICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUFJFTElOS0lORwotICAgICAgICBm
b3IoaSA9IDAsIGlpID0gcHJlTGlua0Zucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7Ci0gICAgICAg
ICAgdHJ5IHsKLSAgICAgICAgICAgIGxpbmtGbiA9IHByZUxpbmtGbnNbaV07Ci0gICAgICAgICAg
ICBsaW5rRm4oc2NvcGUsICRlbGVtZW50LCBhdHRycywKLSAgICAgICAgICAgICAgICBsaW5rRm4u
cmVxdWlyZSAmJiBnZXRDb250cm9sbGVycyhsaW5rRm4ucmVxdWlyZSwgJGVsZW1lbnQpKTsKLSAg
ICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAkZXhjZXB0aW9uSGFuZGxlcihlLCBz
dGFydGluZ1RhZygkZWxlbWVudCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IC8vIFJFQ1VSU0lPTgotICAgICAgICBjaGlsZExpbmtGbiAmJiBjaGlsZExpbmtGbihzY29wZSwg
bGlua05vZGUuY2hpbGROb2RlcywgdW5kZWZpbmVkLCBib3VuZFRyYW5zY2x1ZGVGbik7Ci0KLSAg
ICAgICAgLy8gUE9TVExJTktJTkcKLSAgICAgICAgZm9yKGkgPSAwLCBpaSA9IHBvc3RMaW5rRm5z
Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKLSAgICAgICAgICB0cnkgewotICAgICAgICAgICAgbGlu
a0ZuID0gcG9zdExpbmtGbnNbaV07Ci0gICAgICAgICAgICBsaW5rRm4oc2NvcGUsICRlbGVtZW50
LCBhdHRycywKLSAgICAgICAgICAgICAgICBsaW5rRm4ucmVxdWlyZSAmJiBnZXRDb250cm9sbGVy
cyhsaW5rRm4ucmVxdWlyZSwgJGVsZW1lbnQpKTsKLSAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0g
ICAgICAgICAgICAkZXhjZXB0aW9uSGFuZGxlcihlLCBzdGFydGluZ1RhZygkZWxlbWVudCkpOwot
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotCi0gICAgLyoqCi0gICAg
ICogbG9va3MgdXAgdGhlIGRpcmVjdGl2ZSBhbmQgZGVjb3JhdGVzIGl0IHdpdGggZXhjZXB0aW9u
IGhhbmRsaW5nIGFuZCBwcm9wZXIgcGFyYW1ldGVycy4gV2UKLSAgICAgKiBjYWxsIHRoaXMgdGhl
IGJvdW5kRGlyZWN0aXZlLgotICAgICAqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgbmFt
ZSBvZiB0aGUgZGlyZWN0aXZlIHRvIGxvb2sgdXAuCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGxv
Y2F0aW9uIFRoZSBkaXJlY3RpdmUgbXVzdCBiZSBmb3VuZCBpbiBzcGVjaWZpYyBmb3JtYXQuCi0g
ICAgICogICBTdHJpbmcgY29udGFpbmluZyBhbnkgb2YgdGhlc2VzIGNoYXJhY3RlcnM6Ci0gICAg
ICoKLSAgICAgKiAgICogYEVgOiBlbGVtZW50IG5hbWUKLSAgICAgKiAgICogYEEnOiBhdHRyaWJ1
dGUKLSAgICAgKiAgICogYENgOiBjbGFzcwotICAgICAqICAgKiBgTWA6IGNvbW1lbnQKLSAgICAg
KiBAcmV0dXJucyB0cnVlIGlmIGRpcmVjdGl2ZSB3YXMgYWRkZWQuCi0gICAgICovCi0gICAgZnVu
Y3Rpb24gYWRkRGlyZWN0aXZlKHREaXJlY3RpdmVzLCBuYW1lLCBsb2NhdGlvbiwgbWF4UHJpb3Jp
dHkpIHsKLSAgICAgIHZhciBtYXRjaCA9IGZhbHNlOwotICAgICAgaWYgKGhhc0RpcmVjdGl2ZXMu
aGFzT3duUHJvcGVydHkobmFtZSkpIHsKLSAgICAgICAgZm9yKHZhciBkaXJlY3RpdmUsIGRpcmVj
dGl2ZXMgPSAkaW5qZWN0b3IuZ2V0KG5hbWUgKyBTdWZmaXgpLAotICAgICAgICAgICAgaSA9IDAs
IGlpID0gZGlyZWN0aXZlcy5sZW5ndGg7IGk8aWk7IGkrKykgewotICAgICAgICAgIHRyeSB7Ci0g
ICAgICAgICAgICBkaXJlY3RpdmUgPSBkaXJlY3RpdmVzW2ldOwotICAgICAgICAgICAgaWYgKCAo
bWF4UHJpb3JpdHkgPT09IHVuZGVmaW5lZCB8fCBtYXhQcmlvcml0eSA+IGRpcmVjdGl2ZS5wcmlv
cml0eSkgJiYKLSAgICAgICAgICAgICAgICAgZGlyZWN0aXZlLnJlc3RyaWN0LmluZGV4T2YobG9j
YXRpb24pICE9IC0xKSB7Ci0gICAgICAgICAgICAgIHREaXJlY3RpdmVzLnB1c2goZGlyZWN0aXZl
KTsKLSAgICAgICAgICAgICAgbWF0Y2ggPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAg
IH0gY2F0Y2goZSkgeyAkZXhjZXB0aW9uSGFuZGxlcihlKTsgfQotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgICByZXR1cm4gbWF0Y2g7Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBXaGVuIHRo
ZSBlbGVtZW50IGlzIHJlcGxhY2VkIHdpdGggSFRNTCB0ZW1wbGF0ZSB0aGVuIHRoZSBuZXcgYXR0
cmlidXRlcwotICAgICAqIG9uIHRoZSB0ZW1wbGF0ZSBuZWVkIHRvIGJlIG1lcmdlZCB3aXRoIHRo
ZSBleGlzdGluZyBhdHRyaWJ1dGVzIGluIHRoZSBET00uCi0gICAgICogVGhlIGRlc2lyZWQgZWZm
ZWN0IGlzIHRvIGhhdmUgYm90aCBvZiB0aGUgYXR0cmlidXRlcyBwcmVzZW50LgotICAgICAqCi0g
ICAgICogQHBhcmFtIHtvYmplY3R9IGRzdCBkZXN0aW5hdGlvbiBhdHRyaWJ1dGVzIChvcmlnaW5h
bCBET00pCi0gICAgICogQHBhcmFtIHtvYmplY3R9IHNyYyBzb3VyY2UgYXR0cmlidXRlcyAoZnJv
bSB0aGUgZGlyZWN0aXZlIHRlbXBsYXRlKQotICAgICAqLwotICAgIGZ1bmN0aW9uIG1lcmdlVGVt
cGxhdGVBdHRyaWJ1dGVzKGRzdCwgc3JjKSB7Ci0gICAgICB2YXIgc3JjQXR0ciA9IHNyYy4kYXR0
ciwKLSAgICAgICAgICBkc3RBdHRyID0gZHN0LiRhdHRyLAotICAgICAgICAgICRlbGVtZW50ID0g
ZHN0LiQkZWxlbWVudDsKLQotICAgICAgLy8gcmVhcHBseSB0aGUgb2xkIGF0dHJpYnV0ZXMgdG8g
dGhlIG5ldyBlbGVtZW50Ci0gICAgICBmb3JFYWNoKGRzdCwgZnVuY3Rpb24odmFsdWUsIGtleSkg
ewotICAgICAgICBpZiAoa2V5LmNoYXJBdCgwKSAhPSAnJCcpIHsKLSAgICAgICAgICBpZiAoc3Jj
W2tleV0pIHsKLSAgICAgICAgICAgIHZhbHVlICs9IChrZXkgPT09ICdzdHlsZScgPyAnOycgOiAn
ICcpICsgc3JjW2tleV07Ci0gICAgICAgICAgfQotICAgICAgICAgIGRzdC4kc2V0KGtleSwgdmFs
dWUsIHRydWUsIHNyY0F0dHJba2V5XSk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgICAv
LyBjb3B5IHRoZSBuZXcgYXR0cmlidXRlcyBvbiB0aGUgb2xkIGF0dHJzIG9iamVjdAotICAgICAg
Zm9yRWFjaChzcmMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHsKLSAgICAgICAgaWYgKGtleSA9PSAn
Y2xhc3MnKSB7Ci0gICAgICAgICAgc2FmZUFkZENsYXNzKCRlbGVtZW50LCB2YWx1ZSk7Ci0gICAg
ICAgICAgZHN0WydjbGFzcyddID0gKGRzdFsnY2xhc3MnXSA/IGRzdFsnY2xhc3MnXSArICcgJyA6
ICcnKSArIHZhbHVlOwotICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAnc3R5bGUnKSB7Ci0gICAg
ICAgICAgJGVsZW1lbnQuYXR0cignc3R5bGUnLCAkZWxlbWVudC5hdHRyKCdzdHlsZScpICsgJzsn
ICsgdmFsdWUpOwotICAgICAgICB9IGVsc2UgaWYgKGtleS5jaGFyQXQoMCkgIT0gJyQnICYmICFk
c3QuaGFzT3duUHJvcGVydHkoa2V5KSkgewotICAgICAgICAgIGRzdFtrZXldID0gdmFsdWU7Ci0g
ICAgICAgICAgZHN0QXR0cltrZXldID0gc3JjQXR0cltrZXldOwotICAgICAgICB9Ci0gICAgICB9
KTsKLSAgICB9Ci0KLQotICAgIGZ1bmN0aW9uIGNvbXBpbGVUZW1wbGF0ZVVybChkaXJlY3RpdmVz
LCBiZWZvcmVUZW1wbGF0ZU5vZGVMaW5rRm4sICRjb21waWxlTm9kZSwgdEF0dHJzLAotICAgICAg
ICAkcm9vdEVsZW1lbnQsIHJlcGxhY2UsIGNoaWxkVHJhbnNjbHVkZUZuKSB7Ci0gICAgICB2YXIg
bGlua1F1ZXVlID0gW10sCi0gICAgICAgICAgYWZ0ZXJUZW1wbGF0ZU5vZGVMaW5rRm4sCi0gICAg
ICAgICAgYWZ0ZXJUZW1wbGF0ZUNoaWxkTGlua0ZuLAotICAgICAgICAgIGJlZm9yZVRlbXBsYXRl
Q29tcGlsZU5vZGUgPSAkY29tcGlsZU5vZGVbMF0sCi0gICAgICAgICAgb3JpZ0FzeW5jRGlyZWN0
aXZlID0gZGlyZWN0aXZlcy5zaGlmdCgpLAotICAgICAgICAgIC8vIFRoZSBmYWN0IHRoYXQgd2Ug
aGF2ZSB0byBjb3B5IGFuZCBwYXRjaCB0aGUgZGlyZWN0aXZlIHNlZW1zIHdyb25nIQotICAgICAg
ICAgIGRlcml2ZWRTeW5jRGlyZWN0aXZlID0gZXh0ZW5kKHt9LCBvcmlnQXN5bmNEaXJlY3RpdmUs
IHsKLSAgICAgICAgICAgIGNvbnRyb2xsZXI6IG51bGwsIHRlbXBsYXRlVXJsOiBudWxsLCB0cmFu
c2NsdWRlOiBudWxsLCBzY29wZTogbnVsbAotICAgICAgICAgIH0pOwotCi0gICAgICAkY29tcGls
ZU5vZGUuaHRtbCgnJyk7Ci0KLSAgICAgICRodHRwLmdldChvcmlnQXN5bmNEaXJlY3RpdmUudGVt
cGxhdGVVcmwsIHtjYWNoZTogJHRlbXBsYXRlQ2FjaGV9KS4KLSAgICAgICAgc3VjY2VzcyhmdW5j
dGlvbihjb250ZW50KSB7Ci0gICAgICAgICAgdmFyIGNvbXBpbGVOb2RlLCB0ZW1wVGVtcGxhdGVB
dHRycywgJHRlbXBsYXRlOwotCi0gICAgICAgICAgY29udGVudCA9IGRlbm9ybWFsaXplVGVtcGxh
dGUoY29udGVudCk7Ci0KLSAgICAgICAgICBpZiAocmVwbGFjZSkgewotICAgICAgICAgICAgJHRl
bXBsYXRlID0ganFMaXRlKCc8ZGl2PicgKyB0cmltKGNvbnRlbnQpICsgJzwvZGl2PicpLmNvbnRl
bnRzKCk7Ci0gICAgICAgICAgICBjb21waWxlTm9kZSA9ICR0ZW1wbGF0ZVswXTsKLQotICAgICAg
ICAgICAgaWYgKCR0ZW1wbGF0ZS5sZW5ndGggIT0gMSB8fCBjb21waWxlTm9kZS5ub2RlVHlwZSAh
PT0gMSkgewotICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoTVVMVElfUk9PVF9URU1QTEFU
RV9FUlJPUiArIGNvbnRlbnQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0ZW1wVGVt
cGxhdGVBdHRycyA9IHskYXR0cjoge319OwotICAgICAgICAgICAgcmVwbGFjZVdpdGgoJHJvb3RF
bGVtZW50LCAkY29tcGlsZU5vZGUsIGNvbXBpbGVOb2RlKTsKLSAgICAgICAgICAgIGNvbGxlY3RE
aXJlY3RpdmVzKGNvbXBpbGVOb2RlLCBkaXJlY3RpdmVzLCB0ZW1wVGVtcGxhdGVBdHRycyk7Ci0g
ICAgICAgICAgICBtZXJnZVRlbXBsYXRlQXR0cmlidXRlcyh0QXR0cnMsIHRlbXBUZW1wbGF0ZUF0
dHJzKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29tcGlsZU5vZGUgPSBiZWZv
cmVUZW1wbGF0ZUNvbXBpbGVOb2RlOwotICAgICAgICAgICAgJGNvbXBpbGVOb2RlLmh0bWwoY29u
dGVudCk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgZGlyZWN0aXZlcy51bnNoaWZ0KGRlcml2
ZWRTeW5jRGlyZWN0aXZlKTsKLSAgICAgICAgICBhZnRlclRlbXBsYXRlTm9kZUxpbmtGbiA9IGFw
cGx5RGlyZWN0aXZlc1RvTm9kZShkaXJlY3RpdmVzLCBjb21waWxlTm9kZSwgdEF0dHJzLCBjaGls
ZFRyYW5zY2x1ZGVGbik7Ci0gICAgICAgICAgYWZ0ZXJUZW1wbGF0ZUNoaWxkTGlua0ZuID0gY29t
cGlsZU5vZGVzKCRjb21waWxlTm9kZVswXS5jaGlsZE5vZGVzLCBjaGlsZFRyYW5zY2x1ZGVGbik7
Ci0KLQotICAgICAgICAgIHdoaWxlKGxpbmtRdWV1ZS5sZW5ndGgpIHsKLSAgICAgICAgICAgIHZh
ciBjb250cm9sbGVyID0gbGlua1F1ZXVlLnBvcCgpLAotICAgICAgICAgICAgICAgIGxpbmtSb290
RWxlbWVudCA9IGxpbmtRdWV1ZS5wb3AoKSwKLSAgICAgICAgICAgICAgICBiZWZvcmVUZW1wbGF0
ZUxpbmtOb2RlID0gbGlua1F1ZXVlLnBvcCgpLAotICAgICAgICAgICAgICAgIHNjb3BlID0gbGlu
a1F1ZXVlLnBvcCgpLAotICAgICAgICAgICAgICAgIGxpbmtOb2RlID0gY29tcGlsZU5vZGU7Ci0K
LSAgICAgICAgICAgIGlmIChiZWZvcmVUZW1wbGF0ZUxpbmtOb2RlICE9PSBiZWZvcmVUZW1wbGF0
ZUNvbXBpbGVOb2RlKSB7Ci0gICAgICAgICAgICAgIC8vIGl0IHdhcyBjbG9uZWQgdGhlcmVmb3Jl
IHdlIGhhdmUgdG8gY2xvbmUgYXMgd2VsbC4KLSAgICAgICAgICAgICAgbGlua05vZGUgPSBKUUxp
dGVDbG9uZShjb21waWxlTm9kZSk7Ci0gICAgICAgICAgICAgIHJlcGxhY2VXaXRoKGxpbmtSb290
RWxlbWVudCwganFMaXRlKGJlZm9yZVRlbXBsYXRlTGlua05vZGUpLCBsaW5rTm9kZSk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGFmdGVyVGVtcGxhdGVOb2RlTGlua0ZuKGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgICBiZWZvcmVUZW1wbGF0ZU5vZGVMaW5rRm4oYWZ0ZXJUZW1wbGF0
ZUNoaWxkTGlua0ZuLCBzY29wZSwgbGlua05vZGUsICRyb290RWxlbWVudCwgY29udHJvbGxlcik7
Ci0gICAgICAgICAgICB9LCBzY29wZSwgbGlua05vZGUsICRyb290RWxlbWVudCwgY29udHJvbGxl
cik7Ci0gICAgICAgICAgfQotICAgICAgICAgIGxpbmtRdWV1ZSA9IG51bGw7Ci0gICAgICAgIH0p
LgotICAgICAgICBlcnJvcihmdW5jdGlvbihyZXNwb25zZSwgY29kZSwgaGVhZGVycywgY29uZmln
KSB7Ci0gICAgICAgICAgdGhyb3cgRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHRlbXBsYXRlOiAnICsg
Y29uZmlnLnVybCk7Ci0gICAgICAgIH0pOwotCi0gICAgICByZXR1cm4gZnVuY3Rpb24gZGVsYXll
ZE5vZGVMaW5rRm4oaWdub3JlQ2hpbGRMaW5rRm4sIHNjb3BlLCBub2RlLCByb290RWxlbWVudCwg
Y29udHJvbGxlcikgewotICAgICAgICBpZiAobGlua1F1ZXVlKSB7Ci0gICAgICAgICAgbGlua1F1
ZXVlLnB1c2goc2NvcGUpOwotICAgICAgICAgIGxpbmtRdWV1ZS5wdXNoKG5vZGUpOwotICAgICAg
ICAgIGxpbmtRdWV1ZS5wdXNoKHJvb3RFbGVtZW50KTsKLSAgICAgICAgICBsaW5rUXVldWUucHVz
aChjb250cm9sbGVyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBhZnRlclRlbXBsYXRl
Tm9kZUxpbmtGbihmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIGJlZm9yZVRlbXBsYXRlTm9kZUxp
bmtGbihhZnRlclRlbXBsYXRlQ2hpbGRMaW5rRm4sIHNjb3BlLCBub2RlLCByb290RWxlbWVudCwg
Y29udHJvbGxlcik7Ci0gICAgICAgICAgfSwgc2NvcGUsIG5vZGUsIHJvb3RFbGVtZW50LCBjb250
cm9sbGVyKTsKLSAgICAgICAgfQotICAgICAgfTsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAq
IFNvcnRpbmcgZnVuY3Rpb24gZm9yIGJvdW5kIGRpcmVjdGl2ZXMuCi0gICAgICovCi0gICAgZnVu
Y3Rpb24gYnlQcmlvcml0eShhLCBiKSB7Ci0gICAgICByZXR1cm4gYi5wcmlvcml0eSAtIGEucHJp
b3JpdHk7Ci0gICAgfQotCi0KLSAgICBmdW5jdGlvbiBhc3NlcnROb0R1cGxpY2F0ZSh3aGF0LCBw
cmV2aW91c0RpcmVjdGl2ZSwgZGlyZWN0aXZlLCBlbGVtZW50KSB7Ci0gICAgICBpZiAocHJldmlv
dXNEaXJlY3RpdmUpIHsKLSAgICAgICAgdGhyb3cgRXJyb3IoJ011bHRpcGxlIGRpcmVjdGl2ZXMg
WycgKyBwcmV2aW91c0RpcmVjdGl2ZS5uYW1lICsgJywgJyArCi0gICAgICAgICAgZGlyZWN0aXZl
Lm5hbWUgKyAnXSBhc2tpbmcgZm9yICcgKyB3aGF0ICsgJyBvbjogJyArICBzdGFydGluZ1RhZyhl
bGVtZW50KSk7Ci0gICAgICB9Ci0gICAgfQotCi0KLSAgICBmdW5jdGlvbiBhZGRUZXh0SW50ZXJw
b2xhdGVEaXJlY3RpdmUoZGlyZWN0aXZlcywgdGV4dCkgewotICAgICAgdmFyIGludGVycG9sYXRl
Rm4gPSAkaW50ZXJwb2xhdGUodGV4dCwgdHJ1ZSk7Ci0gICAgICBpZiAoaW50ZXJwb2xhdGVGbikg
ewotICAgICAgICBkaXJlY3RpdmVzLnB1c2goewotICAgICAgICAgIHByaW9yaXR5OiAwLAotICAg
ICAgICAgIGNvbXBpbGU6IHZhbHVlRm4oZnVuY3Rpb24gdGV4dEludGVycG9sYXRlTGlua0ZuKHNj
b3BlLCBub2RlKSB7Ci0gICAgICAgICAgICB2YXIgcGFyZW50ID0gbm9kZS5wYXJlbnQoKSwKLSAg
ICAgICAgICAgICAgICBiaW5kaW5ncyA9IHBhcmVudC5kYXRhKCckYmluZGluZycpIHx8IFtdOwot
ICAgICAgICAgICAgYmluZGluZ3MucHVzaChpbnRlcnBvbGF0ZUZuKTsKLSAgICAgICAgICAgIHNh
ZmVBZGRDbGFzcyhwYXJlbnQuZGF0YSgnJGJpbmRpbmcnLCBiaW5kaW5ncyksICduZy1iaW5kaW5n
Jyk7Ci0gICAgICAgICAgICBzY29wZS4kd2F0Y2goaW50ZXJwb2xhdGVGbiwgZnVuY3Rpb24gaW50
ZXJwb2xhdGVGbldhdGNoQWN0aW9uKHZhbHVlKSB7Ci0gICAgICAgICAgICAgIG5vZGVbMF0ubm9k
ZVZhbHVlID0gdmFsdWU7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICB9KQotICAgICAgICB9
KTsKLSAgICAgIH0KLSAgICB9Ci0KLQotICAgIGZ1bmN0aW9uIGFkZEF0dHJJbnRlcnBvbGF0ZURp
cmVjdGl2ZShub2RlLCBkaXJlY3RpdmVzLCB2YWx1ZSwgbmFtZSkgewotICAgICAgdmFyIGludGVy
cG9sYXRlRm4gPSAkaW50ZXJwb2xhdGUodmFsdWUsIHRydWUpOwotCi0gICAgICAvLyBubyBpbnRl
cnBvbGF0aW9uIGZvdW5kIC0+IGlnbm9yZQotICAgICAgaWYgKCFpbnRlcnBvbGF0ZUZuKSByZXR1
cm47Ci0KLQotICAgICAgZGlyZWN0aXZlcy5wdXNoKHsKLSAgICAgICAgcHJpb3JpdHk6IDEwMCwK
LSAgICAgICAgY29tcGlsZTogdmFsdWVGbihmdW5jdGlvbiBhdHRySW50ZXJwb2xhdGVMaW5rRm4o
c2NvcGUsIGVsZW1lbnQsIGF0dHIpIHsKLSAgICAgICAgICB2YXIgJCRvYnNlcnZlcnMgPSAoYXR0
ci4kJG9ic2VydmVycyB8fCAoYXR0ci4kJG9ic2VydmVycyA9IHt9KSk7Ci0KLSAgICAgICAgICBp
ZiAobmFtZSA9PT0gJ2NsYXNzJykgewotICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBpbnRlcnBv
bGF0ZSBjbGFzc2VzIGFnYWluLCBpbiB0aGUgY2FzZSB0aGUgZWxlbWVudCB3YXMgcmVwbGFjZWQK
LSAgICAgICAgICAgIC8vIGFuZCB0aGVyZWZvcmUgdGhlIHR3byBjbGFzcyBhdHRycyBnb3QgbWVy
Z2VkIC0gd2Ugd2FudCB0byBpbnRlcnBvbGF0ZSB0aGUgcmVzdWx0Ci0gICAgICAgICAgICBpbnRl
cnBvbGF0ZUZuID0gJGludGVycG9sYXRlKGF0dHJbbmFtZV0sIHRydWUpOwotICAgICAgICAgIH0K
LQotICAgICAgICAgIGF0dHJbbmFtZV0gPSB1bmRlZmluZWQ7Ci0gICAgICAgICAgKCQkb2JzZXJ2
ZXJzW25hbWVdIHx8ICgkJG9ic2VydmVyc1tuYW1lXSA9IFtdKSkuJCRpbnRlciA9IHRydWU7Ci0g
ICAgICAgICAgKGF0dHIuJCRvYnNlcnZlcnMgJiYgYXR0ci4kJG9ic2VydmVyc1tuYW1lXS4kJHNj
b3BlIHx8IHNjb3BlKS4KLSAgICAgICAgICAgICR3YXRjaChpbnRlcnBvbGF0ZUZuLCBmdW5jdGlv
biBpbnRlcnBvbGF0ZUZuV2F0Y2hBY3Rpb24odmFsdWUpIHsKLSAgICAgICAgICAgICAgYXR0ci4k
c2V0KG5hbWUsIHZhbHVlKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KQotICAgICAgfSk7
Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBUaGlzIGlzIGEgc3BlY2lhbCBqcUxpdGUucmVw
bGFjZVdpdGgsIHdoaWNoIGNhbiByZXBsYWNlIGl0ZW1zIHdoaWNoCi0gICAgICogaGF2ZSBubyBw
YXJlbnRzLCBwcm92aWRlZCB0aGF0IHRoZSBjb250YWluaW5nIGpxTGl0ZSBjb2xsZWN0aW9uIGlz
IHByb3ZpZGVkLgotICAgICAqCi0gICAgICogQHBhcmFtIHtKcUxpdGU9fSAkcm9vdEVsZW1lbnQg
VGhlIHJvb3Qgb2YgdGhlIGNvbXBpbGUgdHJlZS4gVXNlZCBzbyB0aGF0IHdlIGNhbiByZXBsYWNl
IG5vZGVzCi0gICAgICogICAgaW4gdGhlIHJvb3Qgb2YgdGhlIHRyZWUuCi0gICAgICogQHBhcmFt
IHtKcUxpdGV9ICRlbGVtZW50IFRoZSBqcUxpdGUgZWxlbWVudCB3aGljaCB3ZSBhcmUgZ29pbmcg
dG8gcmVwbGFjZS4gV2Uga2VlcCB0aGUgc2hlbGwsCi0gICAgICogICAgYnV0IHJlcGxhY2UgaXRz
IERPTSBub2RlIHJlZmVyZW5jZS4KLSAgICAgKiBAcGFyYW0ge05vZGV9IG5ld05vZGUgVGhlIG5l
dyBET00gbm9kZS4KLSAgICAgKi8KLSAgICBmdW5jdGlvbiByZXBsYWNlV2l0aCgkcm9vdEVsZW1l
bnQsICRlbGVtZW50LCBuZXdOb2RlKSB7Ci0gICAgICB2YXIgb2xkTm9kZSA9ICRlbGVtZW50WzBd
LAotICAgICAgICAgIHBhcmVudCA9IG9sZE5vZGUucGFyZW50Tm9kZSwKLSAgICAgICAgICBpLCBp
aTsKLQotICAgICAgaWYgKCRyb290RWxlbWVudCkgewotICAgICAgICBmb3IoaSA9IDAsIGlpID0g
JHJvb3RFbGVtZW50Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKLSAgICAgICAgICBpZiAoJHJvb3RF
bGVtZW50W2ldID09IG9sZE5vZGUpIHsKLSAgICAgICAgICAgICRyb290RWxlbWVudFtpXSA9IG5l
d05vZGU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
IH0KLQotICAgICAgaWYgKHBhcmVudCkgewotICAgICAgICBwYXJlbnQucmVwbGFjZUNoaWxkKG5l
d05vZGUsIG9sZE5vZGUpOwotICAgICAgfQotCi0gICAgICBuZXdOb2RlW2pxTGl0ZS5leHBhbmRv
XSA9IG9sZE5vZGVbanFMaXRlLmV4cGFuZG9dOwotICAgICAgJGVsZW1lbnRbMF0gPSBuZXdOb2Rl
OwotICAgIH0KLSAgfV07Ci19Ci0KLXZhciBQUkVGSVhfUkVHRVhQID0gL14oeFtcOlwtX118ZGF0
YVtcOlwtX10pL2k7Ci0vKioKLSAqIENvbnZlcnRzIGFsbCBhY2NlcHRlZCBkaXJlY3RpdmVzIGZv
cm1hdCBpbnRvIHByb3BlciBkaXJlY3RpdmUgbmFtZS4KLSAqIEFsbCBvZiB0aGVzZSB3aWxsIGJl
Y29tZSAnbXlEaXJlY3RpdmUnOgotICogICBteTpEaVJlY3RpdmUKLSAqICAgbXktZGlyZWN0aXZl
Ci0gKiAgIHgtbXktZGlyZWN0aXZlCi0gKiAgIGRhdGEtbXk6ZGlyZWN0aXZlCi0gKgotICogQWxz
byB0aGVyZSBpcyBzcGVjaWFsIGNhc2UgZm9yIE1veiBwcmVmaXggc3RhcnRpbmcgd2l0aCB1cHBl
ciBjYXNlIGxldHRlci4KLSAqIEBwYXJhbSBuYW1lIE5hbWUgdG8gbm9ybWFsaXplCi0gKi8KLWZ1
bmN0aW9uIGRpcmVjdGl2ZU5vcm1hbGl6ZShuYW1lKSB7Ci0gIHJldHVybiBjYW1lbENhc2UobmFt
ZS5yZXBsYWNlKFBSRUZJWF9SRUdFWFAsICcnKSk7Ci19Ci0KLS8qKgotICogQG5nZG9jIG9iamVj
dAotICogQG5hbWUgbmcuJGNvbXBpbGUuZGlyZWN0aXZlLkF0dHJpYnV0ZXMKLSAqIEBkZXNjcmlw
dGlvbgotICoKLSAqIEEgc2hhcmVkIG9iamVjdCBiZXR3ZWVuIGRpcmVjdGl2ZSBjb21waWxlIC8g
bGlua2luZyBmdW5jdGlvbnMgd2hpY2ggY29udGFpbnMgbm9ybWFsaXplZCBET00gZWxlbWVudAot
ICogYXR0cmlidXRlcy4gVGhlIHRoZSB2YWx1ZXMgcmVmbGVjdCBjdXJyZW50IGJpbmRpbmcgc3Rh
dGUgYHt7IH19YC4gVGhlIG5vcm1hbGl6YXRpb24gaXMgbmVlZGVkCi0gKiBzaW5jZSBhbGwgb2Yg
dGhlc2UgYXJlIHRyZWF0ZWQgYXMgZXF1aXZhbGVudCBpbiBBbmd1bGFyOgotICoKLSAqICAgICAg
ICAgIDxzcGFuIG5nOmJpbmQ9ImEiIG5nLWJpbmQ9ImEiIGRhdGEtbmctYmluZD0iYSIgeC1uZy1i
aW5kPSJhIj4KLSAqLwotCi0vKioKLSAqIEBuZ2RvYyBwcm9wZXJ0eQotICogQG5hbWUgbmcuJGNv
bXBpbGUuZGlyZWN0aXZlLkF0dHJpYnV0ZXMjJGF0dHIKLSAqIEBwcm9wZXJ0eU9mIG5nLiRjb21w
aWxlLmRpcmVjdGl2ZS5BdHRyaWJ1dGVzCi0gKiBAcmV0dXJucyB7b2JqZWN0fSBBIG1hcCBvZiBE
T00gZWxlbWVudCBhdHRyaWJ1dGUgbmFtZXMgdG8gdGhlIG5vcm1hbGl6ZWQgbmFtZS4gVGhpcyBp
cwotICogICAgICAgICAgbmVlZGVkIHRvIGRvIHJldmVyc2UgbG9va3VwIGZyb20gbm9ybWFsaXpl
ZCBuYW1lIGJhY2sgdG8gYWN0dWFsIG5hbWUuCi0gKi8KLQotCi0vKioKLSAqIEBuZ2RvYyBmdW5j
dGlvbgotICogQG5hbWUgbmcuJGNvbXBpbGUuZGlyZWN0aXZlLkF0dHJpYnV0ZXMjJHNldAotICog
QG1ldGhvZE9mIG5nLiRjb21waWxlLmRpcmVjdGl2ZS5BdHRyaWJ1dGVzCi0gKiBAZnVuY3Rpb24K
LSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIFNldCBET00gZWxlbWVudCBhdHRyaWJ1dGUgdmFsdWUu
Ci0gKgotICoKLSAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5vcm1hbGl6ZWQgZWxlbWVudCBhdHRy
aWJ1dGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gbW9kaWZ5LiBUaGUgbmFtZSBpcwotICogICAg
ICAgICAgcmV2ZXJzIHRyYW5zbGF0ZWQgdXNpbmcgdGhlIHtAbGluayBuZy4kY29tcGlsZS5kaXJl
Y3RpdmUuQXR0cmlidXRlcyMkYXR0ciAkYXR0cn0KLSAqICAgICAgICAgIHByb3BlcnR5IHRvIHRo
ZSBvcmlnaW5hbCBuYW1lLgotICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIFZhbHVlIHRvIHNldCB0
aGUgYXR0cmlidXRlIHRvLgotICovCi0KLQotCi0vKioKLSAqIENsb3N1cmUgY29tcGlsZXIgdHlw
ZSBpbmZvcm1hdGlvbgotICovCi0KLWZ1bmN0aW9uIG5vZGVzZXRMaW5raW5nRm4oCi0gIC8qIGFu
Z3VsYXIuU2NvcGUgKi8gc2NvcGUsCi0gIC8qIE5vZGVMaXN0ICovIG5vZGVMaXN0LAotICAvKiBF
bGVtZW50ICovIHJvb3RFbGVtZW50LAotICAvKiBmdW5jdGlvbihGdW5jdGlvbikgKi8gYm91bmRU
cmFuc2NsdWRlRm4KLSl7fQotCi1mdW5jdGlvbiBkaXJlY3RpdmVMaW5raW5nRm4oCi0gIC8qIG5v
ZGVzZXRMaW5raW5nRm4gKi8gbm9kZXNldExpbmtpbmdGbiwKLSAgLyogYW5ndWxhci5TY29wZSAq
LyBzY29wZSwKLSAgLyogTm9kZSAqLyBub2RlLAotICAvKiBFbGVtZW50ICovIHJvb3RFbGVtZW50
LAotICAvKiBmdW5jdGlvbihGdW5jdGlvbikgKi8gYm91bmRUcmFuc2NsdWRlRm4KLSl7fQotCi0v
KioKLSAqIEBuZ2RvYyBvYmplY3QKLSAqIEBuYW1lIG5nLiRjb250cm9sbGVyUHJvdmlkZXIKLSAq
IEBkZXNjcmlwdGlvbgotICogVGhlIHtAbGluayBuZy4kY29udHJvbGxlciAkY29udHJvbGxlciBz
ZXJ2aWNlfSBpcyB1c2VkIGJ5IEFuZ3VsYXIgdG8gY3JlYXRlIG5ldwotICogY29udHJvbGxlcnMu
Ci0gKgotICogVGhpcyBwcm92aWRlciBhbGxvd3MgY29udHJvbGxlciByZWdpc3RyYXRpb24gdmlh
IHRoZQotICoge0BsaW5rIG5nLiRjb250cm9sbGVyUHJvdmlkZXIjcmVnaXN0ZXIgcmVnaXN0ZXJ9
IG1ldGhvZC4KLSAqLwotZnVuY3Rpb24gJENvbnRyb2xsZXJQcm92aWRlcigpIHsKLSAgdmFyIGNv
bnRyb2xsZXJzID0ge307Ci0KLQotICAvKioKLSAgICogQG5nZG9jIGZ1bmN0aW9uCi0gICAqIEBu
YW1lIG5nLiRjb250cm9sbGVyUHJvdmlkZXIjcmVnaXN0ZXIKLSAgICogQG1ldGhvZE9mIG5nLiRj
b250cm9sbGVyUHJvdmlkZXIKLSAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgQ29udHJvbGxlciBu
YW1lCi0gICAqIEBwYXJhbSB7RnVuY3Rpb258QXJyYXl9IGNvbnN0cnVjdG9yIENvbnRyb2xsZXIg
Y29uc3RydWN0b3IgZm4gKG9wdGlvbmFsbHkgZGVjb3JhdGVkIHdpdGggREkKLSAgICogICAgYW5u
b3RhdGlvbnMgaW4gdGhlIGFycmF5IG5vdGF0aW9uKS4KLSAgICovCi0gIHRoaXMucmVnaXN0ZXIg
PSBmdW5jdGlvbihuYW1lLCBjb25zdHJ1Y3RvcikgewotICAgIGlmIChpc09iamVjdChuYW1lKSkg
ewotICAgICAgZXh0ZW5kKGNvbnRyb2xsZXJzLCBuYW1lKQotICAgIH0gZWxzZSB7Ci0gICAgICBj
b250cm9sbGVyc1tuYW1lXSA9IGNvbnN0cnVjdG9yOwotICAgIH0KLSAgfTsKLQotCi0gIHRoaXMu
JGdldCA9IFsnJGluamVjdG9yJywgJyR3aW5kb3cnLCBmdW5jdGlvbigkaW5qZWN0b3IsICR3aW5k
b3cpIHsKLQotICAgIC8qKgotICAgICAqIEBuZ2RvYyBmdW5jdGlvbgotICAgICAqIEBuYW1lIG5n
LiRjb250cm9sbGVyCi0gICAgICogQHJlcXVpcmVzICRpbmplY3RvcgotICAgICAqCi0gICAgICog
QHBhcmFtIHtGdW5jdGlvbnxzdHJpbmd9IGNvbnN0cnVjdG9yIElmIGNhbGxlZCB3aXRoIGEgZnVu
Y3Rpb24gdGhlbiBpdCdzIGNvbnNpZGVyZWQgdG8gYmUgdGhlCi0gICAgICogICAgY29udHJvbGxl
ciBjb25zdHJ1Y3RvciBmdW5jdGlvbi4gT3RoZXJ3aXNlIGl0J3MgY29uc2lkZXJlZCB0byBiZSBh
IHN0cmluZyB3aGljaCBpcyB1c2VkCi0gICAgICogICAgdG8gcmV0cmlldmUgdGhlIGNvbnRyb2xs
ZXIgY29uc3RydWN0b3IgdXNpbmcgdGhlIGZvbGxvd2luZyBzdGVwczoKLSAgICAgKgotICAgICAq
ICAgICogY2hlY2sgaWYgYSBjb250cm9sbGVyIHdpdGggZ2l2ZW4gbmFtZSBpcyByZWdpc3RlcmVk
IHZpYSBgJGNvbnRyb2xsZXJQcm92aWRlcmAKLSAgICAgKiAgICAqIGNoZWNrIGlmIGV2YWx1YXRp
bmcgdGhlIHN0cmluZyBvbiB0aGUgY3VycmVudCBzY29wZSByZXR1cm5zIGEgY29uc3RydWN0b3IK
LSAgICAgKiAgICAqIGNoZWNrIGB3aW5kb3dbY29uc3RydWN0b3JdYCBvbiB0aGUgZ2xvYmFsIGB3
aW5kb3dgIG9iamVjdAotICAgICAqCi0gICAgICogQHBhcmFtIHtPYmplY3R9IGxvY2FscyBJbmpl
Y3Rpb24gbG9jYWxzIGZvciBDb250cm9sbGVyLgotICAgICAqIEByZXR1cm4ge09iamVjdH0gSW5z
dGFuY2Ugb2YgZ2l2ZW4gY29udHJvbGxlci4KLSAgICAgKgotICAgICAqIEBkZXNjcmlwdGlvbgot
ICAgICAqIGAkY29udHJvbGxlcmAgc2VydmljZSBpcyByZXNwb25zaWJsZSBmb3IgaW5zdGFudGlh
dGluZyBjb250cm9sbGVycy4KLSAgICAgKgotICAgICAqIEl0J3MganVzdCBhIHNpbXBsZSBjYWxs
IHRvIHtAbGluayBBVVRPLiRpbmplY3RvciAkaW5qZWN0b3J9LCBidXQgZXh0cmFjdGVkIGludG8K
LSAgICAgKiBhIHNlcnZpY2UsIHNvIHRoYXQgb25lIGNhbiBvdmVycmlkZSB0aGlzIHNlcnZpY2Ug
d2l0aCB7QGxpbmsgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMTY0OTc4OAotICAgICAqIEJDIHZl
cnNpb259LgotICAgICAqLwotICAgIHJldHVybiBmdW5jdGlvbihjb25zdHJ1Y3RvciwgbG9jYWxz
KSB7Ci0gICAgICBpZihpc1N0cmluZyhjb25zdHJ1Y3RvcikpIHsKLSAgICAgICAgdmFyIG5hbWUg
PSBjb25zdHJ1Y3RvcjsKLSAgICAgICAgY29uc3RydWN0b3IgPSBjb250cm9sbGVycy5oYXNPd25Q
cm9wZXJ0eShuYW1lKQotICAgICAgICAgICAgPyBjb250cm9sbGVyc1tuYW1lXQotICAgICAgICAg
ICAgOiBnZXR0ZXIobG9jYWxzLiRzY29wZSwgbmFtZSwgdHJ1ZSkgfHwgZ2V0dGVyKCR3aW5kb3cs
IG5hbWUsIHRydWUpOwotCi0gICAgICAgIGFzc2VydEFyZ0ZuKGNvbnN0cnVjdG9yLCBuYW1lLCB0
cnVlKTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuICRpbmplY3Rvci5pbnN0YW50aWF0ZShjb25z
dHJ1Y3RvciwgbG9jYWxzKTsKLSAgICB9OwotICB9XTsKLX0KLQotLyoqCi0gKiBAbmdkb2Mgb2Jq
ZWN0Ci0gKiBAbmFtZSBuZy4kZG9jdW1lbnQKLSAqIEByZXF1aXJlcyAkd2luZG93Ci0gKgotICog
QGRlc2NyaXB0aW9uCi0gKiBBIHtAbGluayBhbmd1bGFyLmVsZW1lbnQgalF1ZXJ5IChsaXRlKX0t
d3JhcHBlZCByZWZlcmVuY2UgdG8gdGhlIGJyb3dzZXIncyBgd2luZG93LmRvY3VtZW50YAotICog
ZWxlbWVudC4KLSAqLwotZnVuY3Rpb24gJERvY3VtZW50UHJvdmlkZXIoKXsKLSAgdGhpcy4kZ2V0
ID0gWyckd2luZG93JywgZnVuY3Rpb24od2luZG93KXsKLSAgICByZXR1cm4ganFMaXRlKHdpbmRv
dy5kb2N1bWVudCk7Ci0gIH1dOwotfQotCi0vKioKLSAqIEBuZ2RvYyBmdW5jdGlvbgotICogQG5h
bWUgbmcuJGV4Y2VwdGlvbkhhbmRsZXIKLSAqIEByZXF1aXJlcyAkbG9nCi0gKgotICogQGRlc2Ny
aXB0aW9uCi0gKiBBbnkgdW5jYXVnaHQgZXhjZXB0aW9uIGluIGFuZ3VsYXIgZXhwcmVzc2lvbnMg
aXMgZGVsZWdhdGVkIHRvIHRoaXMgc2VydmljZS4KLSAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0
aW9uIHNpbXBseSBkZWxlZ2F0ZXMgdG8gYCRsb2cuZXJyb3JgIHdoaWNoIGxvZ3MgaXQgaW50bwot
ICogdGhlIGJyb3dzZXIgY29uc29sZS4KLSAqCi0gKiBJbiB1bml0IHRlc3RzLCBpZiBgYW5ndWxh
ci1tb2Nrcy5qc2AgaXMgbG9hZGVkLCB0aGlzIHNlcnZpY2UgaXMgb3ZlcnJpZGRlbiBieQotICog
e0BsaW5rIG5nTW9jay4kZXhjZXB0aW9uSGFuZGxlciBtb2NrICRleGNlcHRpb25IYW5kbGVyfSB3
aGljaCBhaWRzIGluIHRlc3RpbmcuCi0gKgotICogQHBhcmFtIHtFcnJvcn0gZXhjZXB0aW9uIEV4
Y2VwdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGVycm9yLgotICogQHBhcmFtIHtzdHJpbmc9fSBj
YXVzZSBvcHRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29udGV4dCBpbiB3aGljaAotICog
ICAgICAgdGhlIGVycm9yIHdhcyB0aHJvd24uCi0gKgotICovCi1mdW5jdGlvbiAkRXhjZXB0aW9u
SGFuZGxlclByb3ZpZGVyKCkgewotICB0aGlzLiRnZXQgPSBbJyRsb2cnLCBmdW5jdGlvbigkbG9n
KSB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKGV4Y2VwdGlvbiwgY2F1c2UpIHsKLSAgICAgICRsb2cu
ZXJyb3IuYXBwbHkoJGxvZywgYXJndW1lbnRzKTsKLSAgICB9OwotICB9XTsKLX0KLQotLyoqCi0g
KiBAbmdkb2Mgb2JqZWN0Ci0gKiBAbmFtZSBuZy4kaW50ZXJwb2xhdGVQcm92aWRlcgotICogQGZ1
bmN0aW9uCi0gKgotICogQGRlc2NyaXB0aW9uCi0gKgotICogVXNlZCBmb3IgY29uZmlndXJpbmcg
dGhlIGludGVycG9sYXRpb24gbWFya3VwLiBEZWZhdWx0cyB0byBge3tgIGFuZCBgfX1gLgotICov
Ci1mdW5jdGlvbiAkSW50ZXJwb2xhdGVQcm92aWRlcigpIHsKLSAgdmFyIHN0YXJ0U3ltYm9sID0g
J3t7JzsKLSAgdmFyIGVuZFN5bWJvbCA9ICd9fSc7Ci0KLSAgLyoqCi0gICAqIEBuZ2RvYyBtZXRo
b2QKLSAgICogQG5hbWUgbmcuJGludGVycG9sYXRlUHJvdmlkZXIjc3RhcnRTeW1ib2wKLSAgICog
QG1ldGhvZE9mIG5nLiRpbnRlcnBvbGF0ZVByb3ZpZGVyCi0gICAqIEBkZXNjcmlwdGlvbgotICAg
KiBTeW1ib2wgdG8gZGVub3RlIHN0YXJ0IG9mIGV4cHJlc3Npb24gaW4gdGhlIGludGVycG9sYXRl
ZCBzdHJpbmcuIERlZmF1bHRzIHRvIGB7e2AuCi0gICAqCi0gICAqIEBwYXJhbSB7c3RyaW5nPX0g
dmFsdWUgbmV3IHZhbHVlIHRvIHNldCB0aGUgc3RhcnRpbmcgc3ltYm9sIHRvLgotICAgKiBAcmV0
dXJucyB7c3RyaW5nfHNlbGZ9IFJldHVybnMgdGhlIHN5bWJvbCB3aGVuIHVzZWQgYXMgZ2V0dGVy
IGFuZCBzZWxmIGlmIHVzZWQgYXMgc2V0dGVyLgotICAgKi8KLSAgdGhpcy5zdGFydFN5bWJvbCA9
IGZ1bmN0aW9uKHZhbHVlKXsKLSAgICBpZiAodmFsdWUpIHsKLSAgICAgIHN0YXJ0U3ltYm9sID0g
dmFsdWU7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIHN0
YXJ0U3ltYm9sOwotICAgIH0KLSAgfTsKLQotICAvKioKLSAgICogQG5nZG9jIG1ldGhvZAotICAg
KiBAbmFtZSBuZy4kaW50ZXJwb2xhdGVQcm92aWRlciNlbmRTeW1ib2wKLSAgICogQG1ldGhvZE9m
IG5nLiRpbnRlcnBvbGF0ZVByb3ZpZGVyCi0gICAqIEBkZXNjcmlwdGlvbgotICAgKiBTeW1ib2wg
dG8gZGVub3RlIHRoZSBlbmQgb2YgZXhwcmVzc2lvbiBpbiB0aGUgaW50ZXJwb2xhdGVkIHN0cmlu
Zy4gRGVmYXVsdHMgdG8gYH19YC4KLSAgICoKLSAgICogQHBhcmFtIHtzdHJpbmc9fSB2YWx1ZSBu
ZXcgdmFsdWUgdG8gc2V0IHRoZSBlbmRpbmcgc3ltYm9sIHRvLgotICAgKiBAcmV0dXJucyB7c3Ry
aW5nfHNlbGZ9IFJldHVybnMgdGhlIHN5bWJvbCB3aGVuIHVzZWQgYXMgZ2V0dGVyIGFuZCBzZWxm
IGlmIHVzZWQgYXMgc2V0dGVyLgotICAgKi8KLSAgdGhpcy5lbmRTeW1ib2wgPSBmdW5jdGlvbih2
YWx1ZSl7Ci0gICAgaWYgKHZhbHVlKSB7Ci0gICAgICBlbmRTeW1ib2wgPSB2YWx1ZTsKLSAgICAg
IHJldHVybiB0aGlzOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gZW5kU3ltYm9sOwotICAg
IH0KLSAgfTsKLQotCi0gIHRoaXMuJGdldCA9IFsnJHBhcnNlJywgZnVuY3Rpb24oJHBhcnNlKSB7
Ci0gICAgdmFyIHN0YXJ0U3ltYm9sTGVuZ3RoID0gc3RhcnRTeW1ib2wubGVuZ3RoLAotICAgICAg
ICBlbmRTeW1ib2xMZW5ndGggPSBlbmRTeW1ib2wubGVuZ3RoOwotCi0gICAgLyoqCi0gICAgICog
QG5nZG9jIGZ1bmN0aW9uCi0gICAgICogQG5hbWUgbmcuJGludGVycG9sYXRlCi0gICAgICogQGZ1
bmN0aW9uCi0gICAgICoKLSAgICAgKiBAcmVxdWlyZXMgJHBhcnNlCi0gICAgICoKLSAgICAgKiBA
ZGVzY3JpcHRpb24KLSAgICAgKgotICAgICAqIENvbXBpbGVzIGEgc3RyaW5nIHdpdGggbWFya3Vw
IGludG8gYW4gaW50ZXJwb2xhdGlvbiBmdW5jdGlvbi4gVGhpcyBzZXJ2aWNlIGlzIHVzZWQgYnkg
dGhlCi0gICAgICogSFRNTCB7QGxpbmsgbmcuJGNvbXBpbGUgJGNvbXBpbGV9IHNlcnZpY2UgZm9y
IGRhdGEgYmluZGluZy4gU2VlCi0gICAgICoge0BsaW5rIG5nLiRpbnRlcnBvbGF0ZVByb3ZpZGVy
ICRpbnRlcnBvbGF0ZVByb3ZpZGVyfSBmb3IgY29uZmlndXJpbmcgdGhlCi0gICAgICogaW50ZXJw
b2xhdGlvbiBtYXJrdXAuCi0gICAgICoKLSAgICAgKgotICAgICAgIDxwcmU+Ci0gICAgICAgICB2
YXIgJGludGVycG9sYXRlID0gLi4uOyAvLyBpbmplY3RlZAotICAgICAgICAgdmFyIGV4cCA9ICRp
bnRlcnBvbGF0ZSgnSGVsbG8ge3tuYW1lfX0hJyk7Ci0gICAgICAgICBleHBlY3QoZXhwKHtuYW1l
OidBbmd1bGFyJ30pLnRvRXF1YWwoJ0hlbGxvIEFuZ3VsYXIhJyk7Ci0gICAgICAgPC9wcmU+Ci0g
ICAgICoKLSAgICAgKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IFRoZSB0ZXh0IHdpdGgg
bWFya3VwIHRvIGludGVycG9sYXRlLgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IG11c3RIYXZl
RXhwcmVzc2lvbiBpZiBzZXQgdG8gdHJ1ZSB0aGVuIHRoZSBpbnRlcnBvbGF0aW9uIHN0cmluZyBt
dXN0IGhhdmUKLSAgICAgKiAgICBlbWJlZGRlZCBleHByZXNzaW9uIGluIG9yZGVyIHRvIHJldHVy
biBhbiBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uLiBTdHJpbmdzIHdpdGggbm8KLSAgICAgKiAgICBl
bWJlZGRlZCBleHByZXNzaW9uIHdpbGwgcmV0dXJuIG51bGwgZm9yIHRoZSBpbnRlcnBvbGF0aW9u
IGZ1bmN0aW9uLgotICAgICAqIEByZXR1cm5zIHtmdW5jdGlvbihjb250ZXh0KX0gYW4gaW50ZXJw
b2xhdGlvbiBmdW5jdGlvbiB3aGljaCBpcyB1c2VkIHRvIGNvbXB1dGUgdGhlIGludGVycG9sYXRl
ZAotICAgICAqICAgIHN0cmluZy4gVGhlIGZ1bmN0aW9uIGhhcyB0aGVzZSBwYXJhbWV0ZXJzOgot
ICAgICAqCi0gICAgICogICAgKiBgY29udGV4dGA6IGFuIG9iamVjdCBhZ2FpbnN0IHdoaWNoIGFu
eSBleHByZXNzaW9ucyBlbWJlZGRlZCBpbiB0aGUgc3RyaW5ncyBhcmUgZXZhbHVhdGVkCi0gICAg
ICogICAgICBhZ2FpbnN0LgotICAgICAqCi0gICAgICovCi0gICAgZnVuY3Rpb24gJGludGVycG9s
YXRlKHRleHQsIG11c3RIYXZlRXhwcmVzc2lvbikgewotICAgICAgdmFyIHN0YXJ0SW5kZXgsCi0g
ICAgICAgICAgZW5kSW5kZXgsCi0gICAgICAgICAgaW5kZXggPSAwLAotICAgICAgICAgIHBhcnRz
ID0gW10sCi0gICAgICAgICAgbGVuZ3RoID0gdGV4dC5sZW5ndGgsCi0gICAgICAgICAgaGFzSW50
ZXJwb2xhdGlvbiA9IGZhbHNlLAotICAgICAgICAgIGZuLAotICAgICAgICAgIGV4cCwKLSAgICAg
ICAgICBjb25jYXQgPSBbXTsKLQotICAgICAgd2hpbGUoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAg
ICAgaWYgKCAoKHN0YXJ0SW5kZXggPSB0ZXh0LmluZGV4T2Yoc3RhcnRTeW1ib2wsIGluZGV4KSkg
IT0gLTEpICYmCi0gICAgICAgICAgICAgKChlbmRJbmRleCA9IHRleHQuaW5kZXhPZihlbmRTeW1i
b2wsIHN0YXJ0SW5kZXggKyBzdGFydFN5bWJvbExlbmd0aCkpICE9IC0xKSApIHsKLSAgICAgICAg
ICAoaW5kZXggIT0gc3RhcnRJbmRleCkgJiYgcGFydHMucHVzaCh0ZXh0LnN1YnN0cmluZyhpbmRl
eCwgc3RhcnRJbmRleCkpOwotICAgICAgICAgIHBhcnRzLnB1c2goZm4gPSAkcGFyc2UoZXhwID0g
dGV4dC5zdWJzdHJpbmcoc3RhcnRJbmRleCArIHN0YXJ0U3ltYm9sTGVuZ3RoLCBlbmRJbmRleCkp
KTsKLSAgICAgICAgICBmbi5leHAgPSBleHA7Ci0gICAgICAgICAgaW5kZXggPSBlbmRJbmRleCAr
IGVuZFN5bWJvbExlbmd0aDsKLSAgICAgICAgICBoYXNJbnRlcnBvbGF0aW9uID0gdHJ1ZTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvLyB3ZSBkaWQgbm90IGZpbmQgYW55dGhpbmcsIHNv
IHdlIGhhdmUgdG8gYWRkIHRoZSByZW1haW5kZXIgdG8gdGhlIHBhcnRzIGFycmF5Ci0gICAgICAg
ICAgKGluZGV4ICE9IGxlbmd0aCkgJiYgcGFydHMucHVzaCh0ZXh0LnN1YnN0cmluZyhpbmRleCkp
OwotICAgICAgICAgIGluZGV4ID0gbGVuZ3RoOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAg
IGlmICghKGxlbmd0aCA9IHBhcnRzLmxlbmd0aCkpIHsKLSAgICAgICAgLy8gd2UgYWRkZWQsIG5v
dGhpbmcsIG11c3QgaGF2ZSBiZWVuIGFuIGVtcHR5IHN0cmluZy4KLSAgICAgICAgcGFydHMucHVz
aCgnJyk7Ci0gICAgICAgIGxlbmd0aCA9IDE7Ci0gICAgICB9Ci0KLSAgICAgIGlmICghbXVzdEhh
dmVFeHByZXNzaW9uICB8fCBoYXNJbnRlcnBvbGF0aW9uKSB7Ci0gICAgICAgIGNvbmNhdC5sZW5n
dGggPSBsZW5ndGg7Ci0gICAgICAgIGZuID0gZnVuY3Rpb24oY29udGV4dCkgewotICAgICAgICAg
IGZvcih2YXIgaSA9IDAsIGlpID0gbGVuZ3RoLCBwYXJ0OyBpPGlpOyBpKyspIHsKLSAgICAgICAg
ICAgIGlmICh0eXBlb2YgKHBhcnQgPSBwYXJ0c1tpXSkgPT0gJ2Z1bmN0aW9uJykgewotICAgICAg
ICAgICAgICBwYXJ0ID0gcGFydChjb250ZXh0KTsKLSAgICAgICAgICAgICAgaWYgKHBhcnQgPT0g
bnVsbCB8fCBwYXJ0ID09IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgICAgIHBhcnQgPSAnJzsK
LSAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcGFydCAhPSAnc3RyaW5nJykgewotICAg
ICAgICAgICAgICAgIHBhcnQgPSB0b0pzb24ocGFydCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGNvbmNhdFtpXSA9IHBhcnQ7Ci0gICAgICAgICAgfQotICAg
ICAgICAgIHJldHVybiBjb25jYXQuam9pbignJyk7Ci0gICAgICAgIH07Ci0gICAgICAgIGZuLmV4
cCA9IHRleHQ7Ci0gICAgICAgIGZuLnBhcnRzID0gcGFydHM7Ci0gICAgICAgIHJldHVybiBmbjsK
LSAgICAgIH0KLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIEBuZ2RvYyBtZXRob2QKLSAgICAg
KiBAbmFtZSBuZy4kaW50ZXJwb2xhdGUjc3RhcnRTeW1ib2wKLSAgICAgKiBAbWV0aG9kT2Ygbmcu
JGludGVycG9sYXRlCi0gICAgICogQGRlc2NyaXB0aW9uCi0gICAgICogU3ltYm9sIHRvIGRlbm90
ZSB0aGUgc3RhcnQgb2YgZXhwcmVzc2lvbiBpbiB0aGUgaW50ZXJwb2xhdGVkIHN0cmluZy4gRGVm
YXVsdHMgdG8gYHt7YC4KLSAgICAgKgotICAgICAqIFVzZSB7QGxpbmsgbmcuJGludGVycG9sYXRl
UHJvdmlkZXIjc3RhcnRTeW1ib2wgJGludGVycG9sYXRlUHJvdmlkZXIjc3RhcnRTeW1ib2x9IHRv
IGNoYW5nZQotICAgICAqIHRoZSBzeW1ib2wuCi0gICAgICoKLSAgICAgKiBAcmV0dXJucyB7c3Ry
aW5nfSBzdGFydCBzeW1ib2wuCi0gICAgICovCi0gICAgJGludGVycG9sYXRlLnN0YXJ0U3ltYm9s
ID0gZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gc3RhcnRTeW1ib2w7Ci0gICAgfQotCi0KLSAg
ICAvKioKLSAgICAgKiBAbmdkb2MgbWV0aG9kCi0gICAgICogQG5hbWUgbmcuJGludGVycG9sYXRl
I2VuZFN5bWJvbAotICAgICAqIEBtZXRob2RPZiBuZy4kaW50ZXJwb2xhdGUKLSAgICAgKiBAZGVz
Y3JpcHRpb24KLSAgICAgKiBTeW1ib2wgdG8gZGVub3RlIHRoZSBlbmQgb2YgZXhwcmVzc2lvbiBp
biB0aGUgaW50ZXJwb2xhdGVkIHN0cmluZy4gRGVmYXVsdHMgdG8gYH19YC4KLSAgICAgKgotICAg
ICAqIFVzZSB7QGxpbmsgbmcuJGludGVycG9sYXRlUHJvdmlkZXIjZW5kU3ltYm9sICRpbnRlcnBv
bGF0ZVByb3ZpZGVyI2VuZFN5bWJvbH0gdG8gY2hhbmdlCi0gICAgICogdGhlIHN5bWJvbC4KLSAg
ICAgKgotICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IHN0YXJ0IHN5bWJvbC4KLSAgICAgKi8KLSAg
ICAkaW50ZXJwb2xhdGUuZW5kU3ltYm9sID0gZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gZW5k
U3ltYm9sOwotICAgIH0KLQotICAgIHJldHVybiAkaW50ZXJwb2xhdGU7Ci0gIH1dOwotfQotCi12
YXIgVVJMX01BVENIID0gL14oW146XSspOlwvXC8oXHcrOnswLDF9XHcqQCk/KFx7P1tcd1wuLV0q
XH0/KSg6KFswLTldKykpPyhcL1teXD8jXSopPyhcPyhbXiNdKikpPygjKC4qKSk/JC8sCi0gICAg
UEFUSF9NQVRDSCA9IC9eKFteXD8jXSopPyhcPyhbXiNdKikpPygjKC4qKSk/JC8sCi0gICAgSEFT
SF9NQVRDSCA9IFBBVEhfTUFUQ0gsCi0gICAgREVGQVVMVF9QT1JUUyA9IHsnaHR0cCc6IDgwLCAn
aHR0cHMnOiA0NDMsICdmdHAnOiAyMX07Ci0KLQotLyoqCi0gKiBFbmNvZGUgcGF0aCB1c2luZyBl
bmNvZGVVcmlTZWdtZW50LCBpZ25vcmluZyBmb3J3YXJkIHNsYXNoZXMKLSAqCi0gKiBAcGFyYW0g
e3N0cmluZ30gcGF0aCBQYXRoIHRvIGVuY29kZQotICogQHJldHVybnMge3N0cmluZ30KLSAqLwot
ZnVuY3Rpb24gZW5jb2RlUGF0aChwYXRoKSB7Ci0gIHZhciBzZWdtZW50cyA9IHBhdGguc3BsaXQo
Jy8nKSwKLSAgICAgIGkgPSBzZWdtZW50cy5sZW5ndGg7Ci0KLSAgd2hpbGUgKGktLSkgewotICAg
IHNlZ21lbnRzW2ldID0gZW5jb2RlVXJpU2VnbWVudChzZWdtZW50c1tpXSk7Ci0gIH0KLQotICBy
ZXR1cm4gc2VnbWVudHMuam9pbignLycpOwotfQotCi1mdW5jdGlvbiBzdHJpcEhhc2godXJsKSB7
Ci0gIHJldHVybiB1cmwuc3BsaXQoJyMnKVswXTsKLX0KLQotCi1mdW5jdGlvbiBtYXRjaFVybCh1
cmwsIG9iaikgewotICB2YXIgbWF0Y2ggPSBVUkxfTUFUQ0guZXhlYyh1cmwpOwotCi0gIG1hdGNo
ID0gewotICAgICAgcHJvdG9jb2w6IG1hdGNoWzFdLAotICAgICAgaG9zdDogbWF0Y2hbM10sCi0g
ICAgICBwb3J0OiBpbnQobWF0Y2hbNV0pIHx8IERFRkFVTFRfUE9SVFNbbWF0Y2hbMV1dIHx8IG51
bGwsCi0gICAgICBwYXRoOiBtYXRjaFs2XSB8fCAnLycsCi0gICAgICBzZWFyY2g6IG1hdGNoWzhd
LAotICAgICAgaGFzaDogbWF0Y2hbMTBdCi0gICAgfTsKLQotICBpZiAob2JqKSB7Ci0gICAgb2Jq
LiQkcHJvdG9jb2wgPSBtYXRjaC5wcm90b2NvbDsKLSAgICBvYmouJCRob3N0ID0gbWF0Y2guaG9z
dDsKLSAgICBvYmouJCRwb3J0ID0gbWF0Y2gucG9ydDsKLSAgfQotCi0gIHJldHVybiBtYXRjaDsK
LX0KLQotCi1mdW5jdGlvbiBjb21wb3NlUHJvdG9jb2xIb3N0UG9ydChwcm90b2NvbCwgaG9zdCwg
cG9ydCkgewotICByZXR1cm4gcHJvdG9jb2wgKyAnOi8vJyArIGhvc3QgKyAocG9ydCA9PSBERUZB
VUxUX1BPUlRTW3Byb3RvY29sXSA/ICcnIDogJzonICsgcG9ydCk7Ci19Ci0KLQotZnVuY3Rpb24g
cGF0aFByZWZpeEZyb21CYXNlKGJhc2VQYXRoKSB7Ci0gIHJldHVybiBiYXNlUGF0aC5zdWJzdHIo
MCwgYmFzZVBhdGgubGFzdEluZGV4T2YoJy8nKSk7Ci19Ci0KLQotZnVuY3Rpb24gY29udmVydFRv
SHRtbDVVcmwodXJsLCBiYXNlUGF0aCwgaGFzaFByZWZpeCkgewotICB2YXIgbWF0Y2ggPSBtYXRj
aFVybCh1cmwpOwotCi0gIC8vIGFscmVhZHkgaHRtbDUgdXJsCi0gIGlmIChkZWNvZGVVUklDb21w
b25lbnQobWF0Y2gucGF0aCkgIT0gYmFzZVBhdGggfHwgaXNVbmRlZmluZWQobWF0Y2guaGFzaCkg
fHwKLSAgICAgIG1hdGNoLmhhc2guaW5kZXhPZihoYXNoUHJlZml4KSAhPT0gMCkgewotICAgIHJl
dHVybiB1cmw7Ci0gIC8vIGNvbnZlcnQgaGFzaGJhbmcgdXJsIC0+IGh0bWw1IHVybAotICB9IGVs
c2UgewotICAgIHJldHVybiBjb21wb3NlUHJvdG9jb2xIb3N0UG9ydChtYXRjaC5wcm90b2NvbCwg
bWF0Y2guaG9zdCwgbWF0Y2gucG9ydCkgKwotICAgICAgICAgICBwYXRoUHJlZml4RnJvbUJhc2Uo
YmFzZVBhdGgpICsgbWF0Y2guaGFzaC5zdWJzdHIoaGFzaFByZWZpeC5sZW5ndGgpOwotICB9Ci19
Ci0KLQotZnVuY3Rpb24gY29udmVydFRvSGFzaGJhbmdVcmwodXJsLCBiYXNlUGF0aCwgaGFzaFBy
ZWZpeCkgewotICB2YXIgbWF0Y2ggPSBtYXRjaFVybCh1cmwpOwotCi0gIC8vIGFscmVhZHkgaGFz
aGJhbmcgdXJsCi0gIGlmIChkZWNvZGVVUklDb21wb25lbnQobWF0Y2gucGF0aCkgPT0gYmFzZVBh
dGggJiYgIWlzVW5kZWZpbmVkKG1hdGNoLmhhc2gpICYmCi0gICAgICBtYXRjaC5oYXNoLmluZGV4
T2YoaGFzaFByZWZpeCkgPT09IDApIHsKLSAgICByZXR1cm4gdXJsOwotICAvLyBjb252ZXJ0IGh0
bWw1IHVybCAtPiBoYXNoYmFuZyB1cmwKLSAgfSBlbHNlIHsKLSAgICB2YXIgc2VhcmNoID0gbWF0
Y2guc2VhcmNoICYmICc/JyArIG1hdGNoLnNlYXJjaCB8fCAnJywKLSAgICAgICAgaGFzaCA9IG1h
dGNoLmhhc2ggJiYgJyMnICsgbWF0Y2guaGFzaCB8fCAnJywKLSAgICAgICAgcGF0aFByZWZpeCA9
IHBhdGhQcmVmaXhGcm9tQmFzZShiYXNlUGF0aCksCi0gICAgICAgIHBhdGggPSBtYXRjaC5wYXRo
LnN1YnN0cihwYXRoUHJlZml4Lmxlbmd0aCk7Ci0KLSAgICBpZiAobWF0Y2gucGF0aC5pbmRleE9m
KHBhdGhQcmVmaXgpICE9PSAwKSB7Ci0gICAgICB0aHJvdyBFcnJvcignSW52YWxpZCB1cmwgIicg
KyB1cmwgKyAnIiwgbWlzc2luZyBwYXRoIHByZWZpeCAiJyArIHBhdGhQcmVmaXggKyAnIiAhJyk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvbXBvc2VQcm90b2NvbEhvc3RQb3J0KG1hdGNoLnByb3Rv
Y29sLCBtYXRjaC5ob3N0LCBtYXRjaC5wb3J0KSArIGJhc2VQYXRoICsKLSAgICAgICAgICAgJyMn
ICsgaGFzaFByZWZpeCArIHBhdGggKyBzZWFyY2ggKyBoYXNoOwotICB9Ci19Ci0KLQotLyoqCi0g
KiBMb2NhdGlvblVybCByZXByZXNlbnRzIGFuIHVybAotICogVGhpcyBvYmplY3QgaXMgZXhwb3Nl
ZCBhcyAkbG9jYXRpb24gc2VydmljZSB3aGVuIEhUTUw1IG1vZGUgaXMgZW5hYmxlZCBhbmQgc3Vw
cG9ydGVkCi0gKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge3N0cmluZ30gdXJsIEhUTUw1
IHVybAotICogQHBhcmFtIHtzdHJpbmd9IHBhdGhQcmVmaXgKLSAqLwotZnVuY3Rpb24gTG9jYXRp
b25VcmwodXJsLCBwYXRoUHJlZml4LCBhcHBCYXNlVXJsKSB7Ci0gIHBhdGhQcmVmaXggPSBwYXRo
UHJlZml4IHx8ICcnOwotCi0gIC8qKgotICAgKiBQYXJzZSBnaXZlbiBodG1sNSAocmVndWxhcikg
dXJsIHN0cmluZyBpbnRvIHByb3BlcnRpZXMKLSAgICogQHBhcmFtIHtzdHJpbmd9IG5ld0Fic29s
dXRlVXJsIEhUTUw1IHVybAotICAgKiBAcHJpdmF0ZQotICAgKi8KLSAgdGhpcy4kJHBhcnNlID0g
ZnVuY3Rpb24obmV3QWJzb2x1dGVVcmwpIHsKLSAgICB2YXIgbWF0Y2ggPSBtYXRjaFVybChuZXdB
YnNvbHV0ZVVybCwgdGhpcyk7Ci0KLSAgICBpZiAobWF0Y2gucGF0aC5pbmRleE9mKHBhdGhQcmVm
aXgpICE9PSAwKSB7Ci0gICAgICB0aHJvdyBFcnJvcignSW52YWxpZCB1cmwgIicgKyBuZXdBYnNv
bHV0ZVVybCArICciLCBtaXNzaW5nIHBhdGggcHJlZml4ICInICsgcGF0aFByZWZpeCArICciICEn
KTsKLSAgICB9Ci0KLSAgICB0aGlzLiQkcGF0aCA9IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaC5w
YXRoLnN1YnN0cihwYXRoUHJlZml4Lmxlbmd0aCkpOwotICAgIHRoaXMuJCRzZWFyY2ggPSBwYXJz
ZUtleVZhbHVlKG1hdGNoLnNlYXJjaCk7Ci0gICAgdGhpcy4kJGhhc2ggPSBtYXRjaC5oYXNoICYm
IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaC5oYXNoKSB8fCAnJzsKLQotICAgIHRoaXMuJCRjb21w
b3NlKCk7Ci0gIH07Ci0KLSAgLyoqCi0gICAqIENvbXBvc2UgdXJsIGFuZCB1cGRhdGUgYGFic1Vy
bGAgcHJvcGVydHkKLSAgICogQHByaXZhdGUKLSAgICovCi0gIHRoaXMuJCRjb21wb3NlID0gZnVu
Y3Rpb24oKSB7Ci0gICAgdmFyIHNlYXJjaCA9IHRvS2V5VmFsdWUodGhpcy4kJHNlYXJjaCksCi0g
ICAgICAgIGhhc2ggPSB0aGlzLiQkaGFzaCA/ICcjJyArIGVuY29kZVVyaVNlZ21lbnQodGhpcy4k
JGhhc2gpIDogJyc7Ci0KLSAgICB0aGlzLiQkdXJsID0gZW5jb2RlUGF0aCh0aGlzLiQkcGF0aCkg
KyAoc2VhcmNoID8gJz8nICsgc2VhcmNoIDogJycpICsgaGFzaDsKLSAgICB0aGlzLiQkYWJzVXJs
ID0gY29tcG9zZVByb3RvY29sSG9zdFBvcnQodGhpcy4kJHByb3RvY29sLCB0aGlzLiQkaG9zdCwg
dGhpcy4kJHBvcnQpICsKLSAgICAgICAgICAgICAgICAgICAgcGF0aFByZWZpeCArIHRoaXMuJCR1
cmw7Ci0gIH07Ci0KLQotICB0aGlzLiQkcmV3cml0ZUFwcFVybCA9IGZ1bmN0aW9uKGFic29sdXRl
TGlua1VybCkgewotICAgIGlmKGFic29sdXRlTGlua1VybC5pbmRleE9mKGFwcEJhc2VVcmwpID09
IDApIHsKLSAgICAgIHJldHVybiBhYnNvbHV0ZUxpbmtVcmw7Ci0gICAgfQotICB9Ci0KLQotICB0
aGlzLiQkcGFyc2UodXJsKTsKLX0KLQotCi0vKioKLSAqIExvY2F0aW9uSGFzaGJhbmdVcmwgcmVw
cmVzZW50cyB1cmwKLSAqIFRoaXMgb2JqZWN0IGlzIGV4cG9zZWQgYXMgJGxvY2F0aW9uIHNlcnZp
Y2Ugd2hlbiBodG1sNSBoaXN0b3J5IGFwaSBpcyBkaXNhYmxlZCBvciBub3Qgc3VwcG9ydGVkCi0g
KgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge3N0cmluZ30gdXJsIExlZ2FjeSB1cmwKLSAq
IEBwYXJhbSB7c3RyaW5nfSBoYXNoUHJlZml4IFByZWZpeCBmb3IgaGFzaCBwYXJ0IChjb250YWlu
aW5nIHBhdGggYW5kIHNlYXJjaCkKLSAqLwotZnVuY3Rpb24gTG9jYXRpb25IYXNoYmFuZ1VybCh1
cmwsIGhhc2hQcmVmaXgsIGFwcEJhc2VVcmwpIHsKLSAgdmFyIGJhc2VQYXRoOwotCi0gIC8qKgot
ICAgKiBQYXJzZSBnaXZlbiBoYXNoYmFuZyB1cmwgaW50byBwcm9wZXJ0aWVzCi0gICAqIEBwYXJh
bSB7c3RyaW5nfSB1cmwgSGFzaGJhbmcgdXJsCi0gICAqIEBwcml2YXRlCi0gICAqLwotICB0aGlz
LiQkcGFyc2UgPSBmdW5jdGlvbih1cmwpIHsKLSAgICB2YXIgbWF0Y2ggPSBtYXRjaFVybCh1cmws
IHRoaXMpOwotCi0KLSAgICBpZiAobWF0Y2guaGFzaCAmJiBtYXRjaC5oYXNoLmluZGV4T2YoaGFz
aFByZWZpeCkgIT09IDApIHsKLSAgICAgIHRocm93IEVycm9yKCdJbnZhbGlkIHVybCAiJyArIHVy
bCArICciLCBtaXNzaW5nIGhhc2ggcHJlZml4ICInICsgaGFzaFByZWZpeCArICciICEnKTsKLSAg
ICB9Ci0KLSAgICBiYXNlUGF0aCA9IG1hdGNoLnBhdGggKyAobWF0Y2guc2VhcmNoID8gJz8nICsg
bWF0Y2guc2VhcmNoIDogJycpOwotICAgIG1hdGNoID0gSEFTSF9NQVRDSC5leGVjKChtYXRjaC5o
YXNoIHx8ICcnKS5zdWJzdHIoaGFzaFByZWZpeC5sZW5ndGgpKTsKLSAgICBpZiAobWF0Y2hbMV0p
IHsKLSAgICAgIHRoaXMuJCRwYXRoID0gKG1hdGNoWzFdLmNoYXJBdCgwKSA9PSAnLycgPyAnJyA6
ICcvJykgKyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbMV0pOwotICAgIH0gZWxzZSB7Ci0gICAg
ICB0aGlzLiQkcGF0aCA9ICcnOwotICAgIH0KLQotICAgIHRoaXMuJCRzZWFyY2ggPSBwYXJzZUtl
eVZhbHVlKG1hdGNoWzNdKTsKLSAgICB0aGlzLiQkaGFzaCA9IG1hdGNoWzVdICYmIGRlY29kZVVS
SUNvbXBvbmVudChtYXRjaFs1XSkgfHwgJyc7Ci0KLSAgICB0aGlzLiQkY29tcG9zZSgpOwotICB9
OwotCi0gIC8qKgotICAgKiBDb21wb3NlIGhhc2hiYW5nIHVybCBhbmQgdXBkYXRlIGBhYnNVcmxg
IHByb3BlcnR5Ci0gICAqIEBwcml2YXRlCi0gICAqLwotICB0aGlzLiQkY29tcG9zZSA9IGZ1bmN0
aW9uKCkgewotICAgIHZhciBzZWFyY2ggPSB0b0tleVZhbHVlKHRoaXMuJCRzZWFyY2gpLAotICAg
ICAgICBoYXNoID0gdGhpcy4kJGhhc2ggPyAnIycgKyBlbmNvZGVVcmlTZWdtZW50KHRoaXMuJCRo
YXNoKSA6ICcnOwotCi0gICAgdGhpcy4kJHVybCA9IGVuY29kZVBhdGgodGhpcy4kJHBhdGgpICsg
KHNlYXJjaCA/ICc/JyArIHNlYXJjaCA6ICcnKSArIGhhc2g7Ci0gICAgdGhpcy4kJGFic1VybCA9
IGNvbXBvc2VQcm90b2NvbEhvc3RQb3J0KHRoaXMuJCRwcm90b2NvbCwgdGhpcy4kJGhvc3QsIHRo
aXMuJCRwb3J0KSArCi0gICAgICAgICAgICAgICAgICAgIGJhc2VQYXRoICsgKHRoaXMuJCR1cmwg
PyAnIycgKyBoYXNoUHJlZml4ICsgdGhpcy4kJHVybCA6ICcnKTsKLSAgfTsKLQotICB0aGlzLiQk
cmV3cml0ZUFwcFVybCA9IGZ1bmN0aW9uKGFic29sdXRlTGlua1VybCkgewotICAgIGlmKGFic29s
dXRlTGlua1VybC5pbmRleE9mKGFwcEJhc2VVcmwpID09IDApIHsKLSAgICAgIHJldHVybiBhYnNv
bHV0ZUxpbmtVcmw7Ci0gICAgfQotICB9Ci0KLQotICB0aGlzLiQkcGFyc2UodXJsKTsKLX0KLQot
Ci1Mb2NhdGlvblVybC5wcm90b3R5cGUgPSB7Ci0KLSAgLyoqCi0gICAqIEhhcyBhbnkgY2hhbmdl
IGJlZW4gcmVwbGFjaW5nID8KLSAgICogQHByaXZhdGUKLSAgICovCi0gICQkcmVwbGFjZTogZmFs
c2UsCi0KLSAgLyoqCi0gICAqIEBuZ2RvYyBtZXRob2QKLSAgICogQG5hbWUgbmcuJGxvY2F0aW9u
I2Fic1VybAotICAgKiBAbWV0aG9kT2YgbmcuJGxvY2F0aW9uCi0gICAqCi0gICAqIEBkZXNjcmlw
dGlvbgotICAgKiBUaGlzIG1ldGhvZCBpcyBnZXR0ZXIgb25seS4KLSAgICoKLSAgICogUmV0dXJu
IGZ1bGwgdXJsIHJlcHJlc2VudGF0aW9uIHdpdGggYWxsIHNlZ21lbnRzIGVuY29kZWQgYWNjb3Jk
aW5nIHRvIHJ1bGVzIHNwZWNpZmllZCBpbgotICAgKiB7QGxpbmsgaHR0cDovL3d3dy5pZXRmLm9y
Zy9yZmMvcmZjMzk4Ni50eHQgUkZDIDM5ODZ9LgotICAgKgotICAgKiBAcmV0dXJuIHtzdHJpbmd9
IGZ1bGwgdXJsCi0gICAqLwotICBhYnNVcmw6IGxvY2F0aW9uR2V0dGVyKCckJGFic1VybCcpLAot
Ci0gIC8qKgotICAgKiBAbmdkb2MgbWV0aG9kCi0gICAqIEBuYW1lIG5nLiRsb2NhdGlvbiN1cmwK
LSAgICogQG1ldGhvZE9mIG5nLiRsb2NhdGlvbgotICAgKgotICAgKiBAZGVzY3JpcHRpb24KLSAg
ICogVGhpcyBtZXRob2QgaXMgZ2V0dGVyIC8gc2V0dGVyLgotICAgKgotICAgKiBSZXR1cm4gdXJs
IChlLmcuIGAvcGF0aD9hPWIjaGFzaGApIHdoZW4gY2FsbGVkIHdpdGhvdXQgYW55IHBhcmFtZXRl
ci4KLSAgICoKLSAgICogQ2hhbmdlIHBhdGgsIHNlYXJjaCBhbmQgaGFzaCwgd2hlbiBjYWxsZWQg
d2l0aCBwYXJhbWV0ZXIgYW5kIHJldHVybiBgJGxvY2F0aW9uYC4KLSAgICoKLSAgICogQHBhcmFt
IHtzdHJpbmc9fSB1cmwgTmV3IHVybCB3aXRob3V0IGJhc2UgcHJlZml4IChlLmcuIGAvcGF0aD9h
PWIjaGFzaGApCi0gICAqIEByZXR1cm4ge3N0cmluZ30gdXJsCi0gICAqLwotICB1cmw6IGZ1bmN0
aW9uKHVybCwgcmVwbGFjZSkgewotICAgIGlmIChpc1VuZGVmaW5lZCh1cmwpKQotICAgICAgcmV0
dXJuIHRoaXMuJCR1cmw7Ci0KLSAgICB2YXIgbWF0Y2ggPSBQQVRIX01BVENILmV4ZWModXJsKTsK
LSAgICBpZiAobWF0Y2hbMV0pIHRoaXMucGF0aChkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbMV0p
KTsKLSAgICBpZiAobWF0Y2hbMl0gfHwgbWF0Y2hbMV0pIHRoaXMuc2VhcmNoKG1hdGNoWzNdIHx8
ICcnKTsKLSAgICB0aGlzLmhhc2gobWF0Y2hbNV0gfHwgJycsIHJlcGxhY2UpOwotCi0gICAgcmV0
dXJuIHRoaXM7Ci0gIH0sCi0KLSAgLyoqCi0gICAqIEBuZ2RvYyBtZXRob2QKLSAgICogQG5hbWUg
bmcuJGxvY2F0aW9uI3Byb3RvY29sCi0gICAqIEBtZXRob2RPZiBuZy4kbG9jYXRpb24KLSAgICoK
LSAgICogQGRlc2NyaXB0aW9uCi0gICAqIFRoaXMgbWV0aG9kIGlzIGdldHRlciBvbmx5LgotICAg
KgotICAgKiBSZXR1cm4gcHJvdG9jb2wgb2YgY3VycmVudCB1cmwuCi0gICAqCi0gICAqIEByZXR1
cm4ge3N0cmluZ30gcHJvdG9jb2wgb2YgY3VycmVudCB1cmwKLSAgICovCi0gIHByb3RvY29sOiBs
b2NhdGlvbkdldHRlcignJCRwcm90b2NvbCcpLAotCi0gIC8qKgotICAgKiBAbmdkb2MgbWV0aG9k
Ci0gICAqIEBuYW1lIG5nLiRsb2NhdGlvbiNob3N0Ci0gICAqIEBtZXRob2RPZiBuZy4kbG9jYXRp
b24KLSAgICoKLSAgICogQGRlc2NyaXB0aW9uCi0gICAqIFRoaXMgbWV0aG9kIGlzIGdldHRlciBv
bmx5LgotICAgKgotICAgKiBSZXR1cm4gaG9zdCBvZiBjdXJyZW50IHVybC4KLSAgICoKLSAgICog
QHJldHVybiB7c3RyaW5nfSBob3N0IG9mIGN1cnJlbnQgdXJsLgotICAgKi8KLSAgaG9zdDogbG9j
YXRpb25HZXR0ZXIoJyQkaG9zdCcpLAotCi0gIC8qKgotICAgKiBAbmdkb2MgbWV0aG9kCi0gICAq
IEBuYW1lIG5nLiRsb2NhdGlvbiNwb3J0Ci0gICAqIEBtZXRob2RPZiBuZy4kbG9jYXRpb24KLSAg
ICoKLSAgICogQGRlc2NyaXB0aW9uCi0gICAqIFRoaXMgbWV0aG9kIGlzIGdldHRlciBvbmx5Lgot
ICAgKgotICAgKiBSZXR1cm4gcG9ydCBvZiBjdXJyZW50IHVybC4KLSAgICoKLSAgICogQHJldHVy
biB7TnVtYmVyfSBwb3J0Ci0gICAqLwotICBwb3J0OiBsb2NhdGlvbkdldHRlcignJCRwb3J0Jyks
Ci0KLSAgLyoqCi0gICAqIEBuZ2RvYyBtZXRob2QKLSAgICogQG5hbWUgbmcuJGxvY2F0aW9uI3Bh
dGgKLSAgICogQG1ldGhvZE9mIG5nLiRsb2NhdGlvbgotICAgKgotICAgKiBAZGVzY3JpcHRpb24K
LSAgICogVGhpcyBtZXRob2QgaXMgZ2V0dGVyIC8gc2V0dGVyLgotICAgKgotICAgKiBSZXR1cm4g
cGF0aCBvZiBjdXJyZW50IHVybCB3aGVuIGNhbGxlZCB3aXRob3V0IGFueSBwYXJhbWV0ZXIuCi0g
ICAqCi0gICAqIENoYW5nZSBwYXRoIHdoZW4gY2FsbGVkIHdpdGggcGFyYW1ldGVyIGFuZCByZXR1
cm4gYCRsb2NhdGlvbmAuCi0gICAqCi0gICAqIE5vdGU6IFBhdGggc2hvdWxkIGFsd2F5cyBiZWdp
biB3aXRoIGZvcndhcmQgc2xhc2ggKC8pLCB0aGlzIG1ldGhvZCB3aWxsIGFkZCB0aGUgZm9yd2Fy
ZCBzbGFzaAotICAgKiBpZiBpdCBpcyBtaXNzaW5nLgotICAgKgotICAgKiBAcGFyYW0ge3N0cmlu
Zz19IHBhdGggTmV3IHBhdGgKLSAgICogQHJldHVybiB7c3RyaW5nfSBwYXRoCi0gICAqLwotICBw
YXRoOiBsb2NhdGlvbkdldHRlclNldHRlcignJCRwYXRoJywgZnVuY3Rpb24ocGF0aCkgewotICAg
IHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PSAnLycgPyBwYXRoIDogJy8nICsgcGF0aDsKLSAgfSks
Ci0KLSAgLyoqCi0gICAqIEBuZ2RvYyBtZXRob2QKLSAgICogQG5hbWUgbmcuJGxvY2F0aW9uI3Nl
YXJjaAotICAgKiBAbWV0aG9kT2YgbmcuJGxvY2F0aW9uCi0gICAqCi0gICAqIEBkZXNjcmlwdGlv
bgotICAgKiBUaGlzIG1ldGhvZCBpcyBnZXR0ZXIgLyBzZXR0ZXIuCi0gICAqCi0gICAqIFJldHVy
biBzZWFyY2ggcGFydCAoYXMgb2JqZWN0KSBvZiBjdXJyZW50IHVybCB3aGVuIGNhbGxlZCB3aXRo
b3V0IGFueSBwYXJhbWV0ZXIuCi0gICAqCi0gICAqIENoYW5nZSBzZWFyY2ggcGFydCB3aGVuIGNh
bGxlZCB3aXRoIHBhcmFtZXRlciBhbmQgcmV0dXJuIGAkbG9jYXRpb25gLgotICAgKgotICAgKiBA
cGFyYW0ge3N0cmluZ3xvYmplY3Q8c3RyaW5nLHN0cmluZz49fSBzZWFyY2ggTmV3IHNlYXJjaCBw
YXJhbXMgLSBzdHJpbmcgb3IgaGFzaCBvYmplY3QKLSAgICogQHBhcmFtIHtzdHJpbmc9fSBwYXJh
bVZhbHVlIElmIGBzZWFyY2hgIGlzIGEgc3RyaW5nLCB0aGVuIGBwYXJhbVZhbHVlYCB3aWxsIG92
ZXJyaWRlIG9ubHkgYQotICAgKiAgICBzaW5nbGUgc2VhcmNoIHBhcmFtZXRlci4gSWYgdGhlIHZh
bHVlIGlzIGBudWxsYCwgdGhlIHBhcmFtZXRlciB3aWxsIGJlIGRlbGV0ZWQuCi0gICAqCi0gICAq
IEByZXR1cm4ge3N0cmluZ30gc2VhcmNoCi0gICAqLwotICBzZWFyY2g6IGZ1bmN0aW9uKHNlYXJj
aCwgcGFyYW1WYWx1ZSkgewotICAgIGlmIChpc1VuZGVmaW5lZChzZWFyY2gpKQotICAgICAgcmV0
dXJuIHRoaXMuJCRzZWFyY2g7Ci0KLSAgICBpZiAoaXNEZWZpbmVkKHBhcmFtVmFsdWUpKSB7Ci0g
ICAgICBpZiAocGFyYW1WYWx1ZSA9PT0gbnVsbCkgewotICAgICAgICBkZWxldGUgdGhpcy4kJHNl
YXJjaFtzZWFyY2hdOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdGhpcy4kJHNlYXJjaFtzZWFy
Y2hdID0gcGFyYW1WYWx1ZTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgdGhpcy4kJHNl
YXJjaCA9IGlzU3RyaW5nKHNlYXJjaCkgPyBwYXJzZUtleVZhbHVlKHNlYXJjaCkgOiBzZWFyY2g7
Ci0gICAgfQotCi0gICAgdGhpcy4kJGNvbXBvc2UoKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfSwK
LQotICAvKioKLSAgICogQG5nZG9jIG1ldGhvZAotICAgKiBAbmFtZSBuZy4kbG9jYXRpb24jaGFz
aAotICAgKiBAbWV0aG9kT2YgbmcuJGxvY2F0aW9uCi0gICAqCi0gICAqIEBkZXNjcmlwdGlvbgot
ICAgKiBUaGlzIG1ldGhvZCBpcyBnZXR0ZXIgLyBzZXR0ZXIuCi0gICAqCi0gICAqIFJldHVybiBo
YXNoIGZyYWdtZW50IHdoZW4gY2FsbGVkIHdpdGhvdXQgYW55IHBhcmFtZXRlci4KLSAgICoKLSAg
ICogQ2hhbmdlIGhhc2ggZnJhZ21lbnQgd2hlbiBjYWxsZWQgd2l0aCBwYXJhbWV0ZXIgYW5kIHJl
dHVybiBgJGxvY2F0aW9uYC4KLSAgICoKLSAgICogQHBhcmFtIHtzdHJpbmc9fSBoYXNoIE5ldyBo
YXNoIGZyYWdtZW50Ci0gICAqIEByZXR1cm4ge3N0cmluZ30gaGFzaAotICAgKi8KLSAgaGFzaDog
bG9jYXRpb25HZXR0ZXJTZXR0ZXIoJyQkaGFzaCcsIGlkZW50aXR5KSwKLQotICAvKioKLSAgICog
QG5nZG9jIG1ldGhvZAotICAgKiBAbmFtZSBuZy4kbG9jYXRpb24jcmVwbGFjZQotICAgKiBAbWV0
aG9kT2YgbmcuJGxvY2F0aW9uCi0gICAqCi0gICAqIEBkZXNjcmlwdGlvbgotICAgKiBJZiBjYWxs
ZWQsIGFsbCBjaGFuZ2VzIHRvICRsb2NhdGlvbiBkdXJpbmcgY3VycmVudCBgJGRpZ2VzdGAgd2ls
bCBiZSByZXBsYWNpbmcgY3VycmVudCBoaXN0b3J5Ci0gICAqIHJlY29yZCwgaW5zdGVhZCBvZiBh
ZGRpbmcgbmV3IG9uZS4KLSAgICovCi0gIHJlcGxhY2U6IGZ1bmN0aW9uKCkgewotICAgIHRoaXMu
JCRyZXBsYWNlID0gdHJ1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotfTsKLQotTG9jYXRpb25I
YXNoYmFuZ1VybC5wcm90b3R5cGUgPSBpbmhlcml0KExvY2F0aW9uVXJsLnByb3RvdHlwZSk7Ci0K
LWZ1bmN0aW9uIExvY2F0aW9uSGFzaGJhbmdJbkh0bWw1VXJsKHVybCwgaGFzaFByZWZpeCwgYXBw
QmFzZVVybCwgYmFzZUV4dHJhKSB7Ci0gIExvY2F0aW9uSGFzaGJhbmdVcmwuYXBwbHkodGhpcywg
YXJndW1lbnRzKTsKLQotCi0gIHRoaXMuJCRyZXdyaXRlQXBwVXJsID0gZnVuY3Rpb24oYWJzb2x1
dGVMaW5rVXJsKSB7Ci0gICAgaWYgKGFic29sdXRlTGlua1VybC5pbmRleE9mKGFwcEJhc2VVcmwp
ID09IDApIHsKLSAgICAgIHJldHVybiBhcHBCYXNlVXJsICsgYmFzZUV4dHJhICsgJyMnICsgaGFz
aFByZWZpeCAgKyBhYnNvbHV0ZUxpbmtVcmwuc3Vic3RyKGFwcEJhc2VVcmwubGVuZ3RoKTsKLSAg
ICB9Ci0gIH0KLX0KLQotTG9jYXRpb25IYXNoYmFuZ0luSHRtbDVVcmwucHJvdG90eXBlID0gaW5o
ZXJpdChMb2NhdGlvbkhhc2hiYW5nVXJsLnByb3RvdHlwZSk7Ci0KLWZ1bmN0aW9uIGxvY2F0aW9u
R2V0dGVyKHByb3BlcnR5KSB7Ci0gIHJldHVybiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhp
c1twcm9wZXJ0eV07Ci0gIH07Ci19Ci0KLQotZnVuY3Rpb24gbG9jYXRpb25HZXR0ZXJTZXR0ZXIo
cHJvcGVydHksIHByZXByb2Nlc3MpIHsKLSAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAg
aWYgKGlzVW5kZWZpbmVkKHZhbHVlKSkKLSAgICAgIHJldHVybiB0aGlzW3Byb3BlcnR5XTsKLQot
ICAgIHRoaXNbcHJvcGVydHldID0gcHJlcHJvY2Vzcyh2YWx1ZSk7Ci0gICAgdGhpcy4kJGNvbXBv
c2UoKTsKLQotICAgIHJldHVybiB0aGlzOwotICB9OwotfQotCi0KLS8qKgotICogQG5nZG9jIG9i
amVjdAotICogQG5hbWUgbmcuJGxvY2F0aW9uCi0gKgotICogQHJlcXVpcmVzICRicm93c2VyCi0g
KiBAcmVxdWlyZXMgJHNuaWZmZXIKLSAqIEByZXF1aXJlcyAkcm9vdEVsZW1lbnQKLSAqCi0gKiBA
ZGVzY3JpcHRpb24KLSAqIFRoZSAkbG9jYXRpb24gc2VydmljZSBwYXJzZXMgdGhlIFVSTCBpbiB0
aGUgYnJvd3NlciBhZGRyZXNzIGJhciAoYmFzZWQgb24gdGhlCi0gKiB7QGxpbmsgaHR0cHM6Ly9k
ZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vd2luZG93LmxvY2F0aW9uIHdpbmRvdy5sb2NhdGlvbn0p
IGFuZCBtYWtlcyB0aGUgVVJMCi0gKiBhdmFpbGFibGUgdG8geW91ciBhcHBsaWNhdGlvbi4gQ2hh
bmdlcyB0byB0aGUgVVJMIGluIHRoZSBhZGRyZXNzIGJhciBhcmUgcmVmbGVjdGVkIGludG8KLSAq
ICRsb2NhdGlvbiBzZXJ2aWNlIGFuZCBjaGFuZ2VzIHRvICRsb2NhdGlvbiBhcmUgcmVmbGVjdGVk
IGludG8gdGhlIGJyb3dzZXIgYWRkcmVzcyBiYXIuCi0gKgotICogKipUaGUgJGxvY2F0aW9uIHNl
cnZpY2U6KioKLSAqCi0gKiAtIEV4cG9zZXMgdGhlIGN1cnJlbnQgVVJMIGluIHRoZSBicm93c2Vy
IGFkZHJlc3MgYmFyLCBzbyB5b3UgY2FuCi0gKiAgIC0gV2F0Y2ggYW5kIG9ic2VydmUgdGhlIFVS
TC4KLSAqICAgLSBDaGFuZ2UgdGhlIFVSTC4KLSAqIC0gU3luY2hyb25pemVzIHRoZSBVUkwgd2l0
aCB0aGUgYnJvd3NlciB3aGVuIHRoZSB1c2VyCi0gKiAgIC0gQ2hhbmdlcyB0aGUgYWRkcmVzcyBi
YXIuCi0gKiAgIC0gQ2xpY2tzIHRoZSBiYWNrIG9yIGZvcndhcmQgYnV0dG9uIChvciBjbGlja3Mg
YSBIaXN0b3J5IGxpbmspLgotICogICAtIENsaWNrcyBvbiBhIGxpbmsuCi0gKiAtIFJlcHJlc2Vu
dHMgdGhlIFVSTCBvYmplY3QgYXMgYSBzZXQgb2YgbWV0aG9kcyAocHJvdG9jb2wsIGhvc3QsIHBv
cnQsIHBhdGgsIHNlYXJjaCwgaGFzaCkuCi0gKgotICogRm9yIG1vcmUgaW5mb3JtYXRpb24gc2Vl
IHtAbGluayBndWlkZS9kZXZfZ3VpZGUuc2VydmljZXMuJGxvY2F0aW9uIERldmVsb3BlciBHdWlk
ZTogQW5ndWxhcgotICogU2VydmljZXM6IFVzaW5nICRsb2NhdGlvbn0KLSAqLwotCi0vKioKLSAq
IEBuZ2RvYyBvYmplY3QKLSAqIEBuYW1lIG5nLiRsb2NhdGlvblByb3ZpZGVyCi0gKiBAZGVzY3Jp
cHRpb24KLSAqIFVzZSB0aGUgYCRsb2NhdGlvblByb3ZpZGVyYCB0byBjb25maWd1cmUgaG93IHRo
ZSBhcHBsaWNhdGlvbiBkZWVwIGxpbmtpbmcgcGF0aHMgYXJlIHN0b3JlZC4KLSAqLwotZnVuY3Rp
b24gJExvY2F0aW9uUHJvdmlkZXIoKXsKLSAgdmFyIGhhc2hQcmVmaXggPSAnJywKLSAgICAgIGh0
bWw1TW9kZSA9IGZhbHNlOwotCi0gIC8qKgotICAgKiBAbmdkb2MgcHJvcGVydHkKLSAgICogQG5h
bWUgbmcuJGxvY2F0aW9uUHJvdmlkZXIjaGFzaFByZWZpeAotICAgKiBAbWV0aG9kT2YgbmcuJGxv
Y2F0aW9uUHJvdmlkZXIKLSAgICogQGRlc2NyaXB0aW9uCi0gICAqIEBwYXJhbSB7c3RyaW5nPX0g
cHJlZml4IFByZWZpeCBmb3IgaGFzaCBwYXJ0IChjb250YWluaW5nIHBhdGggYW5kIHNlYXJjaCkK
LSAgICogQHJldHVybnMgeyp9IGN1cnJlbnQgdmFsdWUgaWYgdXNlZCBhcyBnZXR0ZXIgb3IgaXRz
ZWxmIChjaGFpbmluZykgaWYgdXNlZCBhcyBzZXR0ZXIKLSAgICovCi0gIHRoaXMuaGFzaFByZWZp
eCA9IGZ1bmN0aW9uKHByZWZpeCkgewotICAgIGlmIChpc0RlZmluZWQocHJlZml4KSkgewotICAg
ICAgaGFzaFByZWZpeCA9IHByZWZpeDsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0gZWxzZSB7
Ci0gICAgICByZXR1cm4gaGFzaFByZWZpeDsKLSAgICB9Ci0gIH07Ci0KLSAgLyoqCi0gICAqIEBu
Z2RvYyBwcm9wZXJ0eQotICAgKiBAbmFtZSBuZy4kbG9jYXRpb25Qcm92aWRlciNodG1sNU1vZGUK
LSAgICogQG1ldGhvZE9mIG5nLiRsb2NhdGlvblByb3ZpZGVyCi0gICAqIEBkZXNjcmlwdGlvbgot
ICAgKiBAcGFyYW0ge3N0cmluZz19IG1vZGUgVXNlIEhUTUw1IHN0cmF0ZWd5IGlmIGF2YWlsYWJs
ZS4KLSAgICogQHJldHVybnMgeyp9IGN1cnJlbnQgdmFsdWUgaWYgdXNlZCBhcyBnZXR0ZXIgb3Ig
aXRzZWxmIChjaGFpbmluZykgaWYgdXNlZCBhcyBzZXR0ZXIKLSAgICovCi0gIHRoaXMuaHRtbDVN
b2RlID0gZnVuY3Rpb24obW9kZSkgewotICAgIGlmIChpc0RlZmluZWQobW9kZSkpIHsKLSAgICAg
IGh0bWw1TW9kZSA9IG1vZGU7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9IGVsc2UgewotICAg
ICAgcmV0dXJuIGh0bWw1TW9kZTsKLSAgICB9Ci0gIH07Ci0KLSAgdGhpcy4kZ2V0ID0gWyckcm9v
dFNjb3BlJywgJyRicm93c2VyJywgJyRzbmlmZmVyJywgJyRyb290RWxlbWVudCcsCi0gICAgICBm
dW5jdGlvbiggJHJvb3RTY29wZSwgICAkYnJvd3NlciwgICAkc25pZmZlciwgICAkcm9vdEVsZW1l
bnQpIHsKLSAgICB2YXIgJGxvY2F0aW9uLAotICAgICAgICBiYXNlUGF0aCwKLSAgICAgICAgcGF0
aFByZWZpeCwKLSAgICAgICAgaW5pdFVybCA9ICRicm93c2VyLnVybCgpLAotICAgICAgICBpbml0
VXJsUGFydHMgPSBtYXRjaFVybChpbml0VXJsKSwKLSAgICAgICAgYXBwQmFzZVVybDsKLQotICAg
IGlmIChodG1sNU1vZGUpIHsKLSAgICAgIGJhc2VQYXRoID0gJGJyb3dzZXIuYmFzZUhyZWYoKSB8
fCAnLyc7Ci0gICAgICBwYXRoUHJlZml4ID0gcGF0aFByZWZpeEZyb21CYXNlKGJhc2VQYXRoKTsK
LSAgICAgIGFwcEJhc2VVcmwgPQotICAgICAgICAgIGNvbXBvc2VQcm90b2NvbEhvc3RQb3J0KGlu
aXRVcmxQYXJ0cy5wcm90b2NvbCwgaW5pdFVybFBhcnRzLmhvc3QsIGluaXRVcmxQYXJ0cy5wb3J0
KSArCi0gICAgICAgICAgcGF0aFByZWZpeCArICcvJzsKLQotICAgICAgaWYgKCRzbmlmZmVyLmhp
c3RvcnkpIHsKLSAgICAgICAgJGxvY2F0aW9uID0gbmV3IExvY2F0aW9uVXJsKAotICAgICAgICAg
IGNvbnZlcnRUb0h0bWw1VXJsKGluaXRVcmwsIGJhc2VQYXRoLCBoYXNoUHJlZml4KSwKLSAgICAg
ICAgICBwYXRoUHJlZml4LCBhcHBCYXNlVXJsKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgICRs
b2NhdGlvbiA9IG5ldyBMb2NhdGlvbkhhc2hiYW5nSW5IdG1sNVVybCgKLSAgICAgICAgICBjb252
ZXJ0VG9IYXNoYmFuZ1VybChpbml0VXJsLCBiYXNlUGF0aCwgaGFzaFByZWZpeCksCi0gICAgICAg
ICAgaGFzaFByZWZpeCwgYXBwQmFzZVVybCwgYmFzZVBhdGguc3Vic3RyKHBhdGhQcmVmaXgubGVu
Z3RoICsgMSkpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBhcHBCYXNlVXJsID0KLSAg
ICAgICAgICBjb21wb3NlUHJvdG9jb2xIb3N0UG9ydChpbml0VXJsUGFydHMucHJvdG9jb2wsIGlu
aXRVcmxQYXJ0cy5ob3N0LCBpbml0VXJsUGFydHMucG9ydCkgKwotICAgICAgICAgIChpbml0VXJs
UGFydHMucGF0aCB8fCAnJykgKwotICAgICAgICAgIChpbml0VXJsUGFydHMuc2VhcmNoID8gKCc/
JyArIGluaXRVcmxQYXJ0cy5zZWFyY2gpIDogJycpICsKLSAgICAgICAgICAnIycgKyBoYXNoUHJl
Zml4ICsgJy8nOwotCi0gICAgICAkbG9jYXRpb24gPSBuZXcgTG9jYXRpb25IYXNoYmFuZ1VybChp
bml0VXJsLCBoYXNoUHJlZml4LCBhcHBCYXNlVXJsKTsKLSAgICB9Ci0KLSAgICAkcm9vdEVsZW1l
bnQuYmluZCgnY2xpY2snLCBmdW5jdGlvbihldmVudCkgewotICAgICAgLy8gVE9ETyh2b2p0YSk6
IHJld3JpdGUgbGluayB3aGVuIG9wZW5pbmcgaW4gbmV3IHRhYi93aW5kb3cgKGluIGxlZ2FjeSBi
cm93c2VyKQotICAgICAgLy8gY3VycmVudGx5IHdlIG9wZW4gbmljZSB1cmwgbGluayBhbmQgcmVk
aXJlY3QgdGhlbgotCi0gICAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5IHx8
IGV2ZW50LndoaWNoID09IDIpIHJldHVybjsKLQotICAgICAgdmFyIGVsbSA9IGpxTGl0ZShldmVu
dC50YXJnZXQpOwotCi0gICAgICAvLyB0cmF2ZXJzZSB0aGUgRE9NIHVwIHRvIGZpbmQgZmlyc3Qg
QSB0YWcKLSAgICAgIHdoaWxlIChsb3dlcmNhc2UoZWxtWzBdLm5vZGVOYW1lKSAhPT0gJ2EnKSB7
Ci0gICAgICAgIC8vIGlnbm9yZSByZXdyaXRpbmcgaWYgbm8gQSB0YWcgKHJlYWNoZWQgcm9vdCBl
bGVtZW50LCBvciBubyBwYXJlbnQgLSByZW1vdmVkIGZyb20gZG9jdW1lbnQpCi0gICAgICAgIGlm
IChlbG1bMF0gPT09ICRyb290RWxlbWVudFswXSB8fCAhKGVsbSA9IGVsbS5wYXJlbnQoKSlbMF0p
IHJldHVybjsKLSAgICAgIH0KLQotICAgICAgdmFyIGFic0hyZWYgPSBlbG0ucHJvcCgnaHJlZicp
LAotICAgICAgICAgIHJld3JpdHRlblVybCA9ICRsb2NhdGlvbi4kJHJld3JpdGVBcHBVcmwoYWJz
SHJlZik7Ci0KLSAgICAgIGlmIChhYnNIcmVmICYmICFlbG0uYXR0cigndGFyZ2V0JykgJiYgcmV3
cml0dGVuVXJsKSB7Ci0gICAgICAgIC8vIHVwZGF0ZSBsb2NhdGlvbiBtYW51YWxseQotICAgICAg
ICAkbG9jYXRpb24uJCRwYXJzZShyZXdyaXR0ZW5VcmwpOwotICAgICAgICAkcm9vdFNjb3BlLiRh
cHBseSgpOwotICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgICAgICAvLyBoYWNr
IHRvIHdvcmsgYXJvdW5kIEZGNiBidWcgNjg0MjA4IHdoZW4gc2NlbmFyaW8gcnVubmVyIGNsaWNr
cyBvbiBsaW5rcwotICAgICAgICB3aW5kb3cuYW5ndWxhclsnZmYtNjg0MjA4LXByZXZlbnREZWZh
dWx0J10gPSB0cnVlOwotICAgICAgfQotICAgIH0pOwotCi0KLSAgICAvLyByZXdyaXRlIGhhc2hi
YW5nIHVybCA8PiBodG1sNSB1cmwKLSAgICBpZiAoJGxvY2F0aW9uLmFic1VybCgpICE9IGluaXRV
cmwpIHsKLSAgICAgICRicm93c2VyLnVybCgkbG9jYXRpb24uYWJzVXJsKCksIHRydWUpOwotICAg
IH0KLQotICAgIC8vIHVwZGF0ZSAkbG9jYXRpb24gd2hlbiAkYnJvd3NlciB1cmwgY2hhbmdlcwot
ICAgICRicm93c2VyLm9uVXJsQ2hhbmdlKGZ1bmN0aW9uKG5ld1VybCkgewotICAgICAgaWYgKCRs
b2NhdGlvbi5hYnNVcmwoKSAhPSBuZXdVcmwpIHsKLSAgICAgICAgaWYgKCRyb290U2NvcGUuJGJy
b2FkY2FzdCgnJGxvY2F0aW9uQ2hhbmdlU3RhcnQnLCBuZXdVcmwsICRsb2NhdGlvbi5hYnNVcmwo
KSkuZGVmYXVsdFByZXZlbnRlZCkgewotICAgICAgICAgICRicm93c2VyLnVybCgkbG9jYXRpb24u
YWJzVXJsKCkpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAkcm9vdFNj
b3BlLiRldmFsQXN5bmMoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgdmFyIG9sZFVybCA9ICRsb2Nh
dGlvbi5hYnNVcmwoKTsKLQotICAgICAgICAgICRsb2NhdGlvbi4kJHBhcnNlKG5ld1VybCk7Ci0g
ICAgICAgICAgYWZ0ZXJMb2NhdGlvbkNoYW5nZShvbGRVcmwpOwotICAgICAgICB9KTsKLSAgICAg
ICAgaWYgKCEkcm9vdFNjb3BlLiQkcGhhc2UpICRyb290U2NvcGUuJGRpZ2VzdCgpOwotICAgICAg
fQotICAgIH0pOwotCi0gICAgLy8gdXBkYXRlIGJyb3dzZXIKLSAgICB2YXIgY2hhbmdlQ291bnRl
ciA9IDA7Ci0gICAgJHJvb3RTY29wZS4kd2F0Y2goZnVuY3Rpb24gJGxvY2F0aW9uV2F0Y2goKSB7
Ci0gICAgICB2YXIgb2xkVXJsID0gJGJyb3dzZXIudXJsKCk7Ci0gICAgICB2YXIgY3VycmVudFJl
cGxhY2UgPSAkbG9jYXRpb24uJCRyZXBsYWNlOwotCi0gICAgICBpZiAoIWNoYW5nZUNvdW50ZXIg
fHwgb2xkVXJsICE9ICRsb2NhdGlvbi5hYnNVcmwoKSkgewotICAgICAgICBjaGFuZ2VDb3VudGVy
Kys7Ci0gICAgICAgICRyb290U2NvcGUuJGV2YWxBc3luYyhmdW5jdGlvbigpIHsKLSAgICAgICAg
ICBpZiAoJHJvb3RTY29wZS4kYnJvYWRjYXN0KCckbG9jYXRpb25DaGFuZ2VTdGFydCcsICRsb2Nh
dGlvbi5hYnNVcmwoKSwgb2xkVXJsKS4KLSAgICAgICAgICAgICAgZGVmYXVsdFByZXZlbnRlZCkg
ewotICAgICAgICAgICAgJGxvY2F0aW9uLiQkcGFyc2Uob2xkVXJsKTsKLSAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgJGJyb3dzZXIudXJsKCRsb2NhdGlvbi5hYnNVcmwoKSwgY3VycmVu
dFJlcGxhY2UpOwotICAgICAgICAgICAgYWZ0ZXJMb2NhdGlvbkNoYW5nZShvbGRVcmwpOwotICAg
ICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICB9Ci0gICAgICAkbG9jYXRpb24uJCRyZXBsYWNl
ID0gZmFsc2U7Ci0KLSAgICAgIHJldHVybiBjaGFuZ2VDb3VudGVyOwotICAgIH0pOwotCi0gICAg
cmV0dXJuICRsb2NhdGlvbjsKLQotICAgIGZ1bmN0aW9uIGFmdGVyTG9jYXRpb25DaGFuZ2Uob2xk
VXJsKSB7Ci0gICAgICAkcm9vdFNjb3BlLiRicm9hZGNhc3QoJyRsb2NhdGlvbkNoYW5nZVN1Y2Nl
c3MnLCAkbG9jYXRpb24uYWJzVXJsKCksIG9sZFVybCk7Ci0gICAgfQotfV07Ci19Ci0KLS8qKgot
ICogQG5nZG9jIG9iamVjdAotICogQG5hbWUgbmcuJGxvZwotICogQHJlcXVpcmVzICR3aW5kb3cK
LSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIFNpbXBsZSBzZXJ2aWNlIGZvciBsb2dnaW5nLiBEZWZh
dWx0IGltcGxlbWVudGF0aW9uIHdyaXRlcyB0aGUgbWVzc2FnZQotICogaW50byB0aGUgYnJvd3Nl
cidzIGNvbnNvbGUgKGlmIHByZXNlbnQpLgotICoKLSAqIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhp
cyBzZXJ2aWNlIGlzIHRvIHNpbXBsaWZ5IGRlYnVnZ2luZyBhbmQgdHJvdWJsZXNob290aW5nLgot
ICoKLSAqIEBleGFtcGxlCi0gICA8ZXhhbXBsZT4KLSAgICAgPGZpbGUgbmFtZT0ic2NyaXB0Lmpz
Ij4KLSAgICAgICBmdW5jdGlvbiBMb2dDdHJsKCRzY29wZSwgJGxvZykgewotICAgICAgICAgJHNj
b3BlLiRsb2cgPSAkbG9nOwotICAgICAgICAgJHNjb3BlLm1lc3NhZ2UgPSAnSGVsbG8gV29ybGQh
JzsKLSAgICAgICB9Ci0gICAgIDwvZmlsZT4KLSAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+
Ci0gICAgICAgPGRpdiBuZy1jb250cm9sbGVyPSJMb2dDdHJsIj4KLSAgICAgICAgIDxwPlJlbG9h
ZCB0aGlzIHBhZ2Ugd2l0aCBvcGVuIGNvbnNvbGUsIGVudGVyIHRleHQgYW5kIGhpdCB0aGUgbG9n
IGJ1dHRvbi4uLjwvcD4KLSAgICAgICAgIE1lc3NhZ2U6Ci0gICAgICAgICA8aW5wdXQgdHlwZT0i
dGV4dCIgbmctbW9kZWw9Im1lc3NhZ2UiLz4KLSAgICAgICAgIDxidXR0b24gbmctY2xpY2s9IiRs
b2cubG9nKG1lc3NhZ2UpIj5sb2c8L2J1dHRvbj4KLSAgICAgICAgIDxidXR0b24gbmctY2xpY2s9
IiRsb2cud2FybihtZXNzYWdlKSI+d2FybjwvYnV0dG9uPgotICAgICAgICAgPGJ1dHRvbiBuZy1j
bGljaz0iJGxvZy5pbmZvKG1lc3NhZ2UpIj5pbmZvPC9idXR0b24+Ci0gICAgICAgICA8YnV0dG9u
IG5nLWNsaWNrPSIkbG9nLmVycm9yKG1lc3NhZ2UpIj5lcnJvcjwvYnV0dG9uPgotICAgICAgIDwv
ZGl2PgotICAgICA8L2ZpbGU+Ci0gICA8L2V4YW1wbGU+Ci0gKi8KLQotZnVuY3Rpb24gJExvZ1By
b3ZpZGVyKCl7Ci0gIHRoaXMuJGdldCA9IFsnJHdpbmRvdycsIGZ1bmN0aW9uKCR3aW5kb3cpewot
ICAgIHJldHVybiB7Ci0gICAgICAvKioKLSAgICAgICAqIEBuZ2RvYyBtZXRob2QKLSAgICAgICAq
IEBuYW1lIG5nLiRsb2cjbG9nCi0gICAgICAgKiBAbWV0aG9kT2YgbmcuJGxvZwotICAgICAgICoK
LSAgICAgICAqIEBkZXNjcmlwdGlvbgotICAgICAgICogV3JpdGUgYSBsb2cgbWVzc2FnZQotICAg
ICAgICovCi0gICAgICBsb2c6IGNvbnNvbGVMb2coJ2xvZycpLAotCi0gICAgICAvKioKLSAgICAg
ICAqIEBuZ2RvYyBtZXRob2QKLSAgICAgICAqIEBuYW1lIG5nLiRsb2cjd2FybgotICAgICAgICog
QG1ldGhvZE9mIG5nLiRsb2cKLSAgICAgICAqCi0gICAgICAgKiBAZGVzY3JpcHRpb24KLSAgICAg
ICAqIFdyaXRlIGEgd2FybmluZyBtZXNzYWdlCi0gICAgICAgKi8KLSAgICAgIHdhcm46IGNvbnNv
bGVMb2coJ3dhcm4nKSwKLQotICAgICAgLyoqCi0gICAgICAgKiBAbmdkb2MgbWV0aG9kCi0gICAg
ICAgKiBAbmFtZSBuZy4kbG9nI2luZm8KLSAgICAgICAqIEBtZXRob2RPZiBuZy4kbG9nCi0gICAg
ICAgKgotICAgICAgICogQGRlc2NyaXB0aW9uCi0gICAgICAgKiBXcml0ZSBhbiBpbmZvcm1hdGlv
biBtZXNzYWdlCi0gICAgICAgKi8KLSAgICAgIGluZm86IGNvbnNvbGVMb2coJ2luZm8nKSwKLQot
ICAgICAgLyoqCi0gICAgICAgKiBAbmdkb2MgbWV0aG9kCi0gICAgICAgKiBAbmFtZSBuZy4kbG9n
I2Vycm9yCi0gICAgICAgKiBAbWV0aG9kT2YgbmcuJGxvZwotICAgICAgICoKLSAgICAgICAqIEBk
ZXNjcmlwdGlvbgotICAgICAgICogV3JpdGUgYW4gZXJyb3IgbWVzc2FnZQotICAgICAgICovCi0g
ICAgICBlcnJvcjogY29uc29sZUxvZygnZXJyb3InKQotICAgIH07Ci0KLSAgICBmdW5jdGlvbiBm
b3JtYXRFcnJvcihhcmcpIHsKLSAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBFcnJvcikgewotICAg
ICAgICBpZiAoYXJnLnN0YWNrKSB7Ci0gICAgICAgICAgYXJnID0gKGFyZy5tZXNzYWdlICYmIGFy
Zy5zdGFjay5pbmRleE9mKGFyZy5tZXNzYWdlKSA9PT0gLTEpCi0gICAgICAgICAgICAgID8gJ0Vy
cm9yOiAnICsgYXJnLm1lc3NhZ2UgKyAnXG4nICsgYXJnLnN0YWNrCi0gICAgICAgICAgICAgIDog
YXJnLnN0YWNrOwotICAgICAgICB9IGVsc2UgaWYgKGFyZy5zb3VyY2VVUkwpIHsKLSAgICAgICAg
ICBhcmcgPSBhcmcubWVzc2FnZSArICdcbicgKyBhcmcuc291cmNlVVJMICsgJzonICsgYXJnLmxp
bmU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBhcmc7Ci0gICAgfQotCi0gICAg
ZnVuY3Rpb24gY29uc29sZUxvZyh0eXBlKSB7Ci0gICAgICB2YXIgY29uc29sZSA9ICR3aW5kb3cu
Y29uc29sZSB8fCB7fSwKLSAgICAgICAgICBsb2dGbiA9IGNvbnNvbGVbdHlwZV0gfHwgY29uc29s
ZS5sb2cgfHwgbm9vcDsKLQotICAgICAgaWYgKGxvZ0ZuLmFwcGx5KSB7Ci0gICAgICAgIHJldHVy
biBmdW5jdGlvbigpIHsKLSAgICAgICAgICB2YXIgYXJncyA9IFtdOwotICAgICAgICAgIGZvckVh
Y2goYXJndW1lbnRzLCBmdW5jdGlvbihhcmcpIHsKLSAgICAgICAgICAgIGFyZ3MucHVzaChmb3Jt
YXRFcnJvcihhcmcpKTsKLSAgICAgICAgICB9KTsKLSAgICAgICAgICByZXR1cm4gbG9nRm4uYXBw
bHkoY29uc29sZSwgYXJncyk7Ci0gICAgICAgIH07Ci0gICAgICB9Ci0KLSAgICAgIC8vIHdlIGFy
ZSBJRSB3aGljaCBlaXRoZXIgZG9lc24ndCBoYXZlIHdpbmRvdy5jb25zb2xlID0+IHRoaXMgaXMg
bm9vcCBhbmQgd2UgZG8gbm90aGluZywKLSAgICAgIC8vIG9yIHdlIGFyZSBJRSB3aGVyZSBjb25z
b2xlLmxvZyBkb2Vzbid0IGhhdmUgYXBwbHkgc28gd2UgbG9nIGF0IGxlYXN0IGZpcnN0IDIgYXJn
cwotICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyZzEsIGFyZzIpIHsKLSAgICAgICAgbG9nRm4oYXJn
MSwgYXJnMik7Ci0gICAgICB9Ci0gICAgfQotICB9XTsKLX0KLQotdmFyIE9QRVJBVE9SUyA9IHsK
LSAgICAnbnVsbCc6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbDt9LAotICAgICd0cnVlJzpmdW5jdGlv
bigpe3JldHVybiB0cnVlO30sCi0gICAgJ2ZhbHNlJzpmdW5jdGlvbigpe3JldHVybiBmYWxzZTt9
LAotICAgIHVuZGVmaW5lZDpub29wLAotICAgICcrJzpmdW5jdGlvbihzZWxmLCBsb2NhbHMsIGEs
Yil7Ci0gICAgICBhPWEoc2VsZiwgbG9jYWxzKTsgYj1iKHNlbGYsIGxvY2Fscyk7Ci0gICAgICBp
ZiAoaXNEZWZpbmVkKGEpKSB7Ci0gICAgICAgIGlmIChpc0RlZmluZWQoYikpIHsKLSAgICAgICAg
ICByZXR1cm4gYSArIGI7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGE7Ci0gICAgICB9Ci0g
ICAgICByZXR1cm4gaXNEZWZpbmVkKGIpP2I6dW5kZWZpbmVkO30sCi0gICAgJy0nOmZ1bmN0aW9u
KHNlbGYsIGxvY2FscywgYSxiKXthPWEoc2VsZiwgbG9jYWxzKTsgYj1iKHNlbGYsIGxvY2Fscyk7
IHJldHVybiAoaXNEZWZpbmVkKGEpP2E6MCktKGlzRGVmaW5lZChiKT9iOjApO30sCi0gICAgJyon
OmZ1bmN0aW9uKHNlbGYsIGxvY2FscywgYSxiKXtyZXR1cm4gYShzZWxmLCBsb2NhbHMpKmIoc2Vs
ZiwgbG9jYWxzKTt9LAotICAgICcvJzpmdW5jdGlvbihzZWxmLCBsb2NhbHMsIGEsYil7cmV0dXJu
IGEoc2VsZiwgbG9jYWxzKS9iKHNlbGYsIGxvY2Fscyk7fSwKLSAgICAnJSc6ZnVuY3Rpb24oc2Vs
ZiwgbG9jYWxzLCBhLGIpe3JldHVybiBhKHNlbGYsIGxvY2FscyklYihzZWxmLCBsb2NhbHMpO30s
Ci0gICAgJ14nOmZ1bmN0aW9uKHNlbGYsIGxvY2FscywgYSxiKXtyZXR1cm4gYShzZWxmLCBsb2Nh
bHMpXmIoc2VsZiwgbG9jYWxzKTt9LAotICAgICc9Jzpub29wLAotICAgICc9PSc6ZnVuY3Rpb24o
c2VsZiwgbG9jYWxzLCBhLGIpe3JldHVybiBhKHNlbGYsIGxvY2Fscyk9PWIoc2VsZiwgbG9jYWxz
KTt9LAotICAgICchPSc6ZnVuY3Rpb24oc2VsZiwgbG9jYWxzLCBhLGIpe3JldHVybiBhKHNlbGYs
IGxvY2FscykhPWIoc2VsZiwgbG9jYWxzKTt9LAotICAgICc8JzpmdW5jdGlvbihzZWxmLCBsb2Nh
bHMsIGEsYil7cmV0dXJuIGEoc2VsZiwgbG9jYWxzKTxiKHNlbGYsIGxvY2Fscyk7fSwKLSAgICAn
Pic6ZnVuY3Rpb24oc2VsZiwgbG9jYWxzLCBhLGIpe3JldHVybiBhKHNlbGYsIGxvY2Fscyk+Yihz
ZWxmLCBsb2NhbHMpO30sCi0gICAgJzw9JzpmdW5jdGlvbihzZWxmLCBsb2NhbHMsIGEsYil7cmV0
dXJuIGEoc2VsZiwgbG9jYWxzKTw9YihzZWxmLCBsb2NhbHMpO30sCi0gICAgJz49JzpmdW5jdGlv
bihzZWxmLCBsb2NhbHMsIGEsYil7cmV0dXJuIGEoc2VsZiwgbG9jYWxzKT49YihzZWxmLCBsb2Nh
bHMpO30sCi0gICAgJyYmJzpmdW5jdGlvbihzZWxmLCBsb2NhbHMsIGEsYil7cmV0dXJuIGEoc2Vs
ZiwgbG9jYWxzKSYmYihzZWxmLCBsb2NhbHMpO30sCi0gICAgJ3x8JzpmdW5jdGlvbihzZWxmLCBs
b2NhbHMsIGEsYil7cmV0dXJuIGEoc2VsZiwgbG9jYWxzKXx8YihzZWxmLCBsb2NhbHMpO30sCi0g
ICAgJyYnOmZ1bmN0aW9uKHNlbGYsIGxvY2FscywgYSxiKXtyZXR1cm4gYShzZWxmLCBsb2NhbHMp
JmIoc2VsZiwgbG9jYWxzKTt9LAotLy8gICAgJ3wnOmZ1bmN0aW9uKHNlbGYsIGxvY2FscywgYSxi
KXtyZXR1cm4gYXxiO30sCi0gICAgJ3wnOmZ1bmN0aW9uKHNlbGYsIGxvY2FscywgYSxiKXtyZXR1
cm4gYihzZWxmLCBsb2NhbHMpKHNlbGYsIGxvY2FscywgYShzZWxmLCBsb2NhbHMpKTt9LAotICAg
ICchJzpmdW5jdGlvbihzZWxmLCBsb2NhbHMsIGEpe3JldHVybiAhYShzZWxmLCBsb2NhbHMpO30K
LX07Ci12YXIgRVNDQVBFID0geyJuIjoiXG4iLCAiZiI6IlxmIiwgInIiOiJcciIsICJ0IjoiXHQi
LCAidiI6Ilx2IiwgIiciOiInIiwgJyInOiciJ307Ci0KLWZ1bmN0aW9uIGxleCh0ZXh0LCBjc3Ap
ewotICB2YXIgdG9rZW5zID0gW10sCi0gICAgICB0b2tlbiwKLSAgICAgIGluZGV4ID0gMCwKLSAg
ICAgIGpzb24gPSBbXSwKLSAgICAgIGNoLAotICAgICAgbGFzdENoID0gJzonOyAvLyBjYW4gc3Rh
cnQgcmVnZXhwCi0KLSAgd2hpbGUgKGluZGV4IDwgdGV4dC5sZW5ndGgpIHsKLSAgICBjaCA9IHRl
eHQuY2hhckF0KGluZGV4KTsKLSAgICBpZiAoaXMoJyJcJycpKSB7Ci0gICAgICByZWFkU3RyaW5n
KGNoKTsKLSAgICB9IGVsc2UgaWYgKGlzTnVtYmVyKGNoKSB8fCBpcygnLicpICYmIGlzTnVtYmVy
KHBlZWsoKSkpIHsKLSAgICAgIHJlYWROdW1iZXIoKTsKLSAgICB9IGVsc2UgaWYgKGlzSWRlbnQo
Y2gpKSB7Ci0gICAgICByZWFkSWRlbnQoKTsKLSAgICAgIC8vIGlkZW50aWZpZXJzIGNhbiBvbmx5
IGJlIGlmIHRoZSBwcmVjZWRpbmcgY2hhciB3YXMgYSB7IG9yICwKLSAgICAgIGlmICh3YXMoJ3ss
JykgJiYganNvblswXT09J3snICYmCi0gICAgICAgICAodG9rZW49dG9rZW5zW3Rva2Vucy5sZW5n
dGgtMV0pKSB7Ci0gICAgICAgIHRva2VuLmpzb24gPSB0b2tlbi50ZXh0LmluZGV4T2YoJy4nKSA9
PSAtMTsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGlzKCcoKXt9W10uLDs6JykpIHsKLSAgICAg
IHRva2Vucy5wdXNoKHsKLSAgICAgICAgaW5kZXg6aW5kZXgsCi0gICAgICAgIHRleHQ6Y2gsCi0g
ICAgICAgIGpzb246KHdhcygnOlssJykgJiYgaXMoJ3tbJykpIHx8IGlzKCd9XTosJykKLSAgICAg
IH0pOwotICAgICAgaWYgKGlzKCd7WycpKSBqc29uLnVuc2hpZnQoY2gpOwotICAgICAgaWYgKGlz
KCd9XScpKSBqc29uLnNoaWZ0KCk7Ci0gICAgICBpbmRleCsrOwotICAgIH0gZWxzZSBpZiAoaXNX
aGl0ZXNwYWNlKGNoKSkgewotICAgICAgaW5kZXgrKzsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0g
ZWxzZSB7Ci0gICAgICB2YXIgY2gyID0gY2ggKyBwZWVrKCksCi0gICAgICAgICAgZm4gPSBPUEVS
QVRPUlNbY2hdLAotICAgICAgICAgIGZuMiA9IE9QRVJBVE9SU1tjaDJdOwotICAgICAgaWYgKGZu
MikgewotICAgICAgICB0b2tlbnMucHVzaCh7aW5kZXg6aW5kZXgsIHRleHQ6Y2gyLCBmbjpmbjJ9
KTsKLSAgICAgICAgaW5kZXggKz0gMjsKLSAgICAgIH0gZWxzZSBpZiAoZm4pIHsKLSAgICAgICAg
dG9rZW5zLnB1c2goe2luZGV4OmluZGV4LCB0ZXh0OmNoLCBmbjpmbiwganNvbjogd2FzKCdbLDon
KSAmJiBpcygnKy0nKX0pOwotICAgICAgICBpbmRleCArPSAxOwotICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgdGhyb3dFcnJvcigiVW5leHBlY3RlZCBuZXh0IGNoYXJhY3RlciAiLCBpbmRleCwgaW5k
ZXgrMSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGxhc3RDaCA9IGNoOwotICB9Ci0gIHJldHVybiB0
b2tlbnM7Ci0KLSAgZnVuY3Rpb24gaXMoY2hhcnMpIHsKLSAgICByZXR1cm4gY2hhcnMuaW5kZXhP
ZihjaCkgIT0gLTE7Ci0gIH0KLQotICBmdW5jdGlvbiB3YXMoY2hhcnMpIHsKLSAgICByZXR1cm4g
Y2hhcnMuaW5kZXhPZihsYXN0Q2gpICE9IC0xOwotICB9Ci0KLSAgZnVuY3Rpb24gcGVlaygpIHsK
LSAgICByZXR1cm4gaW5kZXggKyAxIDwgdGV4dC5sZW5ndGggPyB0ZXh0LmNoYXJBdChpbmRleCAr
IDEpIDogZmFsc2U7Ci0gIH0KLSAgZnVuY3Rpb24gaXNOdW1iZXIoY2gpIHsKLSAgICByZXR1cm4g
JzAnIDw9IGNoICYmIGNoIDw9ICc5JzsKLSAgfQotICBmdW5jdGlvbiBpc1doaXRlc3BhY2UoY2gp
IHsKLSAgICByZXR1cm4gY2ggPT0gJyAnIHx8IGNoID09ICdccicgfHwgY2ggPT0gJ1x0JyB8fAot
ICAgICAgICAgICBjaCA9PSAnXG4nIHx8IGNoID09ICdcdicgfHwgY2ggPT0gJ1x1MDBBMCc7IC8v
IElFIHRyZWF0cyBub24tYnJlYWtpbmcgc3BhY2UgYXMgXHUwMEEwCi0gIH0KLSAgZnVuY3Rpb24g
aXNJZGVudChjaCkgewotICAgIHJldHVybiAnYScgPD0gY2ggJiYgY2ggPD0gJ3onIHx8Ci0gICAg
ICAgICAgICdBJyA8PSBjaCAmJiBjaCA8PSAnWicgfHwKLSAgICAgICAgICAgJ18nID09IGNoIHx8
IGNoID09ICckJzsKLSAgfQotICBmdW5jdGlvbiBpc0V4cE9wZXJhdG9yKGNoKSB7Ci0gICAgcmV0
dXJuIGNoID09ICctJyB8fCBjaCA9PSAnKycgfHwgaXNOdW1iZXIoY2gpOwotICB9Ci0KLSAgZnVu
Y3Rpb24gdGhyb3dFcnJvcihlcnJvciwgc3RhcnQsIGVuZCkgewotICAgIGVuZCA9IGVuZCB8fCBp
bmRleDsKLSAgICB0aHJvdyBFcnJvcigiTGV4ZXIgRXJyb3I6ICIgKyBlcnJvciArICIgYXQgY29s
dW1uIiArCi0gICAgICAgIChpc0RlZmluZWQoc3RhcnQpCi0gICAgICAgICAgICA/ICJzICIgKyBz
dGFydCArICAiLSIgKyBpbmRleCArICIgWyIgKyB0ZXh0LnN1YnN0cmluZyhzdGFydCwgZW5kKSAr
ICJdIgotICAgICAgICAgICAgOiAiICIgKyBlbmQpICsKLSAgICAgICAgIiBpbiBleHByZXNzaW9u
IFsiICsgdGV4dCArICJdLiIpOwotICB9Ci0KLSAgZnVuY3Rpb24gcmVhZE51bWJlcigpIHsKLSAg
ICB2YXIgbnVtYmVyID0gIiI7Ci0gICAgdmFyIHN0YXJ0ID0gaW5kZXg7Ci0gICAgd2hpbGUgKGlu
ZGV4IDwgdGV4dC5sZW5ndGgpIHsKLSAgICAgIHZhciBjaCA9IGxvd2VyY2FzZSh0ZXh0LmNoYXJB
dChpbmRleCkpOwotICAgICAgaWYgKGNoID09ICcuJyB8fCBpc051bWJlcihjaCkpIHsKLSAgICAg
ICAgbnVtYmVyICs9IGNoOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdmFyIHBlZWtDaCA9IHBl
ZWsoKTsKLSAgICAgICAgaWYgKGNoID09ICdlJyAmJiBpc0V4cE9wZXJhdG9yKHBlZWtDaCkpIHsK
LSAgICAgICAgICBudW1iZXIgKz0gY2g7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNFeHBPcGVyYXRv
cihjaCkgJiYKLSAgICAgICAgICAgIHBlZWtDaCAmJiBpc051bWJlcihwZWVrQ2gpICYmCi0gICAg
ICAgICAgICBudW1iZXIuY2hhckF0KG51bWJlci5sZW5ndGggLSAxKSA9PSAnZScpIHsKLSAgICAg
ICAgICBudW1iZXIgKz0gY2g7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNFeHBPcGVyYXRvcihjaCkg
JiYKLSAgICAgICAgICAgICghcGVla0NoIHx8ICFpc051bWJlcihwZWVrQ2gpKSAmJgotICAgICAg
ICAgICAgbnVtYmVyLmNoYXJBdChudW1iZXIubGVuZ3RoIC0gMSkgPT0gJ2UnKSB7Ci0gICAgICAg
ICAgdGhyb3dFcnJvcignSW52YWxpZCBleHBvbmVudCcpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpbmRleCsrOwotICAgIH0K
LSAgICBudW1iZXIgPSAxICogbnVtYmVyOwotICAgIHRva2Vucy5wdXNoKHtpbmRleDpzdGFydCwg
dGV4dDpudW1iZXIsIGpzb246dHJ1ZSwKLSAgICAgIGZuOmZ1bmN0aW9uKCkge3JldHVybiBudW1i
ZXI7fX0pOwotICB9Ci0gIGZ1bmN0aW9uIHJlYWRJZGVudCgpIHsKLSAgICB2YXIgaWRlbnQgPSAi
IiwKLSAgICAgICAgc3RhcnQgPSBpbmRleCwKLSAgICAgICAgbGFzdERvdCwgcGVla0luZGV4LCBt
ZXRob2ROYW1lLCBjaDsKLQotICAgIHdoaWxlIChpbmRleCA8IHRleHQubGVuZ3RoKSB7Ci0gICAg
ICBjaCA9IHRleHQuY2hhckF0KGluZGV4KTsKLSAgICAgIGlmIChjaCA9PSAnLicgfHwgaXNJZGVu
dChjaCkgfHwgaXNOdW1iZXIoY2gpKSB7Ci0gICAgICAgIGlmIChjaCA9PSAnLicpIGxhc3REb3Qg
PSBpbmRleDsKLSAgICAgICAgaWRlbnQgKz0gY2g7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBi
cmVhazsKLSAgICAgIH0KLSAgICAgIGluZGV4Kys7Ci0gICAgfQotCi0gICAgLy9jaGVjayBpZiB0
aGlzIGlzIG5vdCBhIG1ldGhvZCBpbnZvY2F0aW9uIGFuZCBpZiBpdCBpcyBiYWNrIG91dCB0byBs
YXN0IGRvdAotICAgIGlmIChsYXN0RG90KSB7Ci0gICAgICBwZWVrSW5kZXggPSBpbmRleDsKLSAg
ICAgIHdoaWxlKHBlZWtJbmRleCA8IHRleHQubGVuZ3RoKSB7Ci0gICAgICAgIGNoID0gdGV4dC5j
aGFyQXQocGVla0luZGV4KTsKLSAgICAgICAgaWYgKGNoID09ICcoJykgewotICAgICAgICAgIG1l
dGhvZE5hbWUgPSBpZGVudC5zdWJzdHIobGFzdERvdCAtIHN0YXJ0ICsgMSk7Ci0gICAgICAgICAg
aWRlbnQgPSBpZGVudC5zdWJzdHIoMCwgbGFzdERvdCAtIHN0YXJ0KTsKLSAgICAgICAgICBpbmRl
eCA9IHBlZWtJbmRleDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZihp
c1doaXRlc3BhY2UoY2gpKSB7Ci0gICAgICAgICAgcGVla0luZGV4Kys7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLQotICAg
IHZhciB0b2tlbiA9IHsKLSAgICAgIGluZGV4OnN0YXJ0LAotICAgICAgdGV4dDppZGVudAotICAg
IH07Ci0KLSAgICBpZiAoT1BFUkFUT1JTLmhhc093blByb3BlcnR5KGlkZW50KSkgewotICAgICAg
dG9rZW4uZm4gPSB0b2tlbi5qc29uID0gT1BFUkFUT1JTW2lkZW50XTsKLSAgICB9IGVsc2Ugewot
ICAgICAgdmFyIGdldHRlciA9IGdldHRlckZuKGlkZW50LCBjc3ApOwotICAgICAgdG9rZW4uZm4g
PSBleHRlbmQoZnVuY3Rpb24oc2VsZiwgbG9jYWxzKSB7Ci0gICAgICAgIHJldHVybiAoZ2V0dGVy
KHNlbGYsIGxvY2FscykpOwotICAgICAgfSwgewotICAgICAgICBhc3NpZ246IGZ1bmN0aW9uKHNl
bGYsIHZhbHVlKSB7Ci0gICAgICAgICAgcmV0dXJuIHNldHRlcihzZWxmLCBpZGVudCwgdmFsdWUp
OwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICB9Ci0KLSAgICB0b2tlbnMucHVzaCh0b2tlbik7
Ci0KLSAgICBpZiAobWV0aG9kTmFtZSkgewotICAgICAgdG9rZW5zLnB1c2goewotICAgICAgICBp
bmRleDpsYXN0RG90LAotICAgICAgICB0ZXh0OiAnLicsCi0gICAgICAgIGpzb246IGZhbHNlCi0g
ICAgICB9KTsKLSAgICAgIHRva2Vucy5wdXNoKHsKLSAgICAgICAgaW5kZXg6IGxhc3REb3QgKyAx
LAotICAgICAgICB0ZXh0OiBtZXRob2ROYW1lLAotICAgICAgICBqc29uOiBmYWxzZQotICAgICAg
fSk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gcmVhZFN0cmluZyhxdW90ZSkgewotICAgIHZh
ciBzdGFydCA9IGluZGV4OwotICAgIGluZGV4Kys7Ci0gICAgdmFyIHN0cmluZyA9ICIiOwotICAg
IHZhciByYXdTdHJpbmcgPSBxdW90ZTsKLSAgICB2YXIgZXNjYXBlID0gZmFsc2U7Ci0gICAgd2hp
bGUgKGluZGV4IDwgdGV4dC5sZW5ndGgpIHsKLSAgICAgIHZhciBjaCA9IHRleHQuY2hhckF0KGlu
ZGV4KTsKLSAgICAgIHJhd1N0cmluZyArPSBjaDsKLSAgICAgIGlmIChlc2NhcGUpIHsKLSAgICAg
ICAgaWYgKGNoID09ICd1JykgewotICAgICAgICAgIHZhciBoZXggPSB0ZXh0LnN1YnN0cmluZyhp
bmRleCArIDEsIGluZGV4ICsgNSk7Ci0gICAgICAgICAgaWYgKCFoZXgubWF0Y2goL1tcZGEtZl17
NH0vaSkpCi0gICAgICAgICAgICB0aHJvd0Vycm9yKCAiSW52YWxpZCB1bmljb2RlIGVzY2FwZSBb
XFx1IiArIGhleCArICJdIik7Ci0gICAgICAgICAgaW5kZXggKz0gNDsKLSAgICAgICAgICBzdHJp
bmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChoZXgsIDE2KSk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgdmFyIHJlcCA9IEVTQ0FQRVtjaF07Ci0gICAgICAgICAgaWYgKHJl
cCkgewotICAgICAgICAgICAgc3RyaW5nICs9IHJlcDsKLSAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgc3RyaW5nICs9IGNoOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBl
c2NhcGUgPSBmYWxzZTsKLSAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJ1xcJykgewotICAgICAgICBl
c2NhcGUgPSB0cnVlOwotICAgICAgfSBlbHNlIGlmIChjaCA9PSBxdW90ZSkgewotICAgICAgICBp
bmRleCsrOwotICAgICAgICB0b2tlbnMucHVzaCh7Ci0gICAgICAgICAgaW5kZXg6c3RhcnQsCi0g
ICAgICAgICAgdGV4dDpyYXdTdHJpbmcsCi0gICAgICAgICAgc3RyaW5nOnN0cmluZywKLSAgICAg
ICAgICBqc29uOnRydWUsCi0gICAgICAgICAgZm46ZnVuY3Rpb24oKSB7IHJldHVybiBzdHJpbmc7
IH0KLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IHN0cmluZyArPSBjaDsKLSAgICAgIH0KLSAgICAgIGluZGV4Kys7Ci0gICAgfQotICAgIHRocm93
RXJyb3IoIlVudGVybWluYXRlZCBxdW90ZSIsIHN0YXJ0KTsKLSAgfQotfQotCi0vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi1mdW5jdGlvbiBwYXJzZXIodGV4dCwg
anNvbiwgJGZpbHRlciwgY3NwKXsKLSAgdmFyIFpFUk8gPSB2YWx1ZUZuKDApLAotICAgICAgdmFs
dWUsCi0gICAgICB0b2tlbnMgPSBsZXgodGV4dCwgY3NwKSwKLSAgICAgIGFzc2lnbm1lbnQgPSBf
YXNzaWdubWVudCwKLSAgICAgIGZ1bmN0aW9uQ2FsbCA9IF9mdW5jdGlvbkNhbGwsCi0gICAgICBm
aWVsZEFjY2VzcyA9IF9maWVsZEFjY2VzcywKLSAgICAgIG9iamVjdEluZGV4ID0gX29iamVjdElu
ZGV4LAotICAgICAgZmlsdGVyQ2hhaW4gPSBfZmlsdGVyQ2hhaW47Ci0KLSAgaWYoanNvbil7Ci0g
ICAgLy8gVGhlIGV4dHJhIGxldmVsIG9mIGFsaWFzaW5nIGlzIGhlcmUsIGp1c3QgaW4gY2FzZSB0
aGUgbGV4ZXIgbWlzc2VzIHNvbWV0aGluZywgc28gdGhhdAotICAgIC8vIHdlIHByZXZlbnQgYW55
IGFjY2lkZW50YWwgZXhlY3V0aW9uIGluIEpTT04uCi0gICAgYXNzaWdubWVudCA9IGxvZ2ljYWxP
UjsKLSAgICBmdW5jdGlvbkNhbGwgPQotICAgICAgZmllbGRBY2Nlc3MgPQotICAgICAgb2JqZWN0
SW5kZXggPQotICAgICAgZmlsdGVyQ2hhaW4gPQotICAgICAgICBmdW5jdGlvbigpIHsgdGhyb3dF
cnJvcigiaXMgbm90IHZhbGlkIGpzb24iLCB7dGV4dDp0ZXh0LCBpbmRleDowfSk7IH07Ci0gICAg
dmFsdWUgPSBwcmltYXJ5KCk7Ci0gIH0gZWxzZSB7Ci0gICAgdmFsdWUgPSBzdGF0ZW1lbnRzKCk7
Ci0gIH0KLSAgaWYgKHRva2Vucy5sZW5ndGggIT09IDApIHsKLSAgICB0aHJvd0Vycm9yKCJpcyBh
biB1bmV4cGVjdGVkIHRva2VuIiwgdG9rZW5zWzBdKTsKLSAgfQotICByZXR1cm4gdmFsdWU7Ci0K
LSAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgZnVuY3Rpb24gdGhyb3dF
cnJvcihtc2csIHRva2VuKSB7Ci0gICAgdGhyb3cgRXJyb3IoIlN5bnRheCBFcnJvcjogVG9rZW4g
JyIgKyB0b2tlbi50ZXh0ICsKLSAgICAgICInICIgKyBtc2cgKyAiIGF0IGNvbHVtbiAiICsKLSAg
ICAgICh0b2tlbi5pbmRleCArIDEpICsgIiBvZiB0aGUgZXhwcmVzc2lvbiBbIiArCi0gICAgICB0
ZXh0ICsgIl0gc3RhcnRpbmcgYXQgWyIgKyB0ZXh0LnN1YnN0cmluZyh0b2tlbi5pbmRleCkgKyAi
XS4iKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHBlZWtUb2tlbigpIHsKLSAgICBpZiAodG9rZW5zLmxl
bmd0aCA9PT0gMCkKLSAgICAgIHRocm93IEVycm9yKCJVbmV4cGVjdGVkIGVuZCBvZiBleHByZXNz
aW9uOiAiICsgdGV4dCk7Ci0gICAgcmV0dXJuIHRva2Vuc1swXTsKLSAgfQotCi0gIGZ1bmN0aW9u
IHBlZWsoZTEsIGUyLCBlMywgZTQpIHsKLSAgICBpZiAodG9rZW5zLmxlbmd0aCA+IDApIHsKLSAg
ICAgIHZhciB0b2tlbiA9IHRva2Vuc1swXTsKLSAgICAgIHZhciB0ID0gdG9rZW4udGV4dDsKLSAg
ICAgIGlmICh0PT1lMSB8fCB0PT1lMiB8fCB0PT1lMyB8fCB0PT1lNCB8fAotICAgICAgICAgICgh
ZTEgJiYgIWUyICYmICFlMyAmJiAhZTQpKSB7Ci0gICAgICAgIHJldHVybiB0b2tlbjsKLSAgICAg
IH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgZnVuY3Rpb24gZXhwZWN0KGUx
LCBlMiwgZTMsIGU0KXsKLSAgICB2YXIgdG9rZW4gPSBwZWVrKGUxLCBlMiwgZTMsIGU0KTsKLSAg
ICBpZiAodG9rZW4pIHsKLSAgICAgIGlmIChqc29uICYmICF0b2tlbi5qc29uKSB7Ci0gICAgICAg
IHRocm93RXJyb3IoImlzIG5vdCB2YWxpZCBqc29uIiwgdG9rZW4pOwotICAgICAgfQotICAgICAg
dG9rZW5zLnNoaWZ0KCk7Ci0gICAgICByZXR1cm4gdG9rZW47Ci0gICAgfQotICAgIHJldHVybiBm
YWxzZTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNvbnN1bWUoZTEpewotICAgIGlmICghZXhwZWN0KGUx
KSkgewotICAgICAgdGhyb3dFcnJvcigiaXMgdW5leHBlY3RlZCwgZXhwZWN0aW5nIFsiICsgZTEg
KyAiXSIsIHBlZWsoKSk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gdW5hcnlGbihmbiwgcmln
aHQpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24oc2VsZiwgbG9jYWxzKSB7Ci0gICAgICByZXR1cm4g
Zm4oc2VsZiwgbG9jYWxzLCByaWdodCk7Ci0gICAgfTsKLSAgfQotCi0gIGZ1bmN0aW9uIGJpbmFy
eUZuKGxlZnQsIGZuLCByaWdodCkgewotICAgIHJldHVybiBmdW5jdGlvbihzZWxmLCBsb2NhbHMp
IHsKLSAgICAgIHJldHVybiBmbihzZWxmLCBsb2NhbHMsIGxlZnQsIHJpZ2h0KTsKLSAgICB9Owot
ICB9Ci0KLSAgZnVuY3Rpb24gc3RhdGVtZW50cygpIHsKLSAgICB2YXIgc3RhdGVtZW50cyA9IFtd
OwotICAgIHdoaWxlKHRydWUpIHsKLSAgICAgIGlmICh0b2tlbnMubGVuZ3RoID4gMCAmJiAhcGVl
aygnfScsICcpJywgJzsnLCAnXScpKQotICAgICAgICBzdGF0ZW1lbnRzLnB1c2goZmlsdGVyQ2hh
aW4oKSk7Ci0gICAgICBpZiAoIWV4cGVjdCgnOycpKSB7Ci0gICAgICAgIC8vIG9wdGltaXplIGZv
ciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgdGhlcmUgaXMgb25seSBvbmUgc3RhdGVtZW50LgotICAg
ICAgICAvLyBUT0RPKHNpemUpOiBtYXliZSB3ZSBzaG91bGQgbm90IHN1cHBvcnQgbXVsdGlwbGUg
c3RhdGVtZW50cz8KLSAgICAgICAgcmV0dXJuIHN0YXRlbWVudHMubGVuZ3RoID09IDEKLSAgICAg
ICAgICA/IHN0YXRlbWVudHNbMF0KLSAgICAgICAgICA6IGZ1bmN0aW9uKHNlbGYsIGxvY2Fscyl7
Ci0gICAgICAgICAgICB2YXIgdmFsdWU7Ci0gICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkg
PCBzdGF0ZW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgIHZhciBzdGF0ZW1lbnQg
PSBzdGF0ZW1lbnRzW2ldOwotICAgICAgICAgICAgICBpZiAoc3RhdGVtZW50KQotICAgICAgICAg
ICAgICAgIHZhbHVlID0gc3RhdGVtZW50KHNlbGYsIGxvY2Fscyk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgICAgfTsKLSAgICAgIH0KLSAgICB9Ci0g
IH0KLQotICBmdW5jdGlvbiBfZmlsdGVyQ2hhaW4oKSB7Ci0gICAgdmFyIGxlZnQgPSBleHByZXNz
aW9uKCk7Ci0gICAgdmFyIHRva2VuOwotICAgIHdoaWxlKHRydWUpIHsKLSAgICAgIGlmICgodG9r
ZW4gPSBleHBlY3QoJ3wnKSkpIHsKLSAgICAgICAgbGVmdCA9IGJpbmFyeUZuKGxlZnQsIHRva2Vu
LmZuLCBmaWx0ZXIoKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gbGVmdDsKLSAg
ICAgIH0KLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBmaWx0ZXIoKSB7Ci0gICAgdmFyIHRva2Vu
ID0gZXhwZWN0KCk7Ci0gICAgdmFyIGZuID0gJGZpbHRlcih0b2tlbi50ZXh0KTsKLSAgICB2YXIg
YXJnc0ZuID0gW107Ci0gICAgd2hpbGUodHJ1ZSkgewotICAgICAgaWYgKCh0b2tlbiA9IGV4cGVj
dCgnOicpKSkgewotICAgICAgICBhcmdzRm4ucHVzaChleHByZXNzaW9uKCkpOwotICAgICAgfSBl
bHNlIHsKLSAgICAgICAgdmFyIGZuSW52b2tlID0gZnVuY3Rpb24oc2VsZiwgbG9jYWxzLCBpbnB1
dCl7Ci0gICAgICAgICAgdmFyIGFyZ3MgPSBbaW5wdXRdOwotICAgICAgICAgIGZvciAoIHZhciBp
ID0gMDsgaSA8IGFyZ3NGbi5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgYXJncy5wdXNoKGFy
Z3NGbltpXShzZWxmLCBsb2NhbHMpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIGZu
LmFwcGx5KHNlbGYsIGFyZ3MpOwotICAgICAgICB9OwotICAgICAgICByZXR1cm4gZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgcmV0dXJuIGZuSW52b2tlOwotICAgICAgICB9OwotICAgICAgfQotICAg
IH0KLSAgfQotCi0gIGZ1bmN0aW9uIGV4cHJlc3Npb24oKSB7Ci0gICAgcmV0dXJuIGFzc2lnbm1l
bnQoKTsKLSAgfQotCi0gIGZ1bmN0aW9uIF9hc3NpZ25tZW50KCkgewotICAgIHZhciBsZWZ0ID0g
bG9naWNhbE9SKCk7Ci0gICAgdmFyIHJpZ2h0OwotICAgIHZhciB0b2tlbjsKLSAgICBpZiAoKHRv
a2VuID0gZXhwZWN0KCc9JykpKSB7Ci0gICAgICBpZiAoIWxlZnQuYXNzaWduKSB7Ci0gICAgICAg
IHRocm93RXJyb3IoImltcGxpZXMgYXNzaWdubWVudCBidXQgWyIgKwotICAgICAgICAgIHRleHQu
c3Vic3RyaW5nKDAsIHRva2VuLmluZGV4KSArICJdIGNhbiBub3QgYmUgYXNzaWduZWQgdG8iLCB0
b2tlbik7Ci0gICAgICB9Ci0gICAgICByaWdodCA9IGxvZ2ljYWxPUigpOwotICAgICAgcmV0dXJu
IGZ1bmN0aW9uKHNjb3BlLCBsb2NhbHMpewotICAgICAgICByZXR1cm4gbGVmdC5hc3NpZ24oc2Nv
cGUsIHJpZ2h0KHNjb3BlLCBsb2NhbHMpLCBsb2NhbHMpOwotICAgICAgfTsKLSAgICB9IGVsc2Ug
ewotICAgICAgcmV0dXJuIGxlZnQ7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gbG9naWNhbE9S
KCkgewotICAgIHZhciBsZWZ0ID0gbG9naWNhbEFORCgpOwotICAgIHZhciB0b2tlbjsKLSAgICB3
aGlsZSh0cnVlKSB7Ci0gICAgICBpZiAoKHRva2VuID0gZXhwZWN0KCd8fCcpKSkgewotICAgICAg
ICBsZWZ0ID0gYmluYXJ5Rm4obGVmdCwgdG9rZW4uZm4sIGxvZ2ljYWxBTkQoKSk7Ci0gICAgICB9
IGVsc2UgewotICAgICAgICByZXR1cm4gbGVmdDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBm
dW5jdGlvbiBsb2dpY2FsQU5EKCkgewotICAgIHZhciBsZWZ0ID0gZXF1YWxpdHkoKTsKLSAgICB2
YXIgdG9rZW47Ci0gICAgaWYgKCh0b2tlbiA9IGV4cGVjdCgnJiYnKSkpIHsKLSAgICAgIGxlZnQg
PSBiaW5hcnlGbihsZWZ0LCB0b2tlbi5mbiwgbG9naWNhbEFORCgpKTsKLSAgICB9Ci0gICAgcmV0
dXJuIGxlZnQ7Ci0gIH0KLQotICBmdW5jdGlvbiBlcXVhbGl0eSgpIHsKLSAgICB2YXIgbGVmdCA9
IHJlbGF0aW9uYWwoKTsKLSAgICB2YXIgdG9rZW47Ci0gICAgaWYgKCh0b2tlbiA9IGV4cGVjdCgn
PT0nLCchPScpKSkgewotICAgICAgbGVmdCA9IGJpbmFyeUZuKGxlZnQsIHRva2VuLmZuLCBlcXVh
bGl0eSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGxlZnQ7Ci0gIH0KLQotICBmdW5jdGlvbiByZWxh
dGlvbmFsKCkgewotICAgIHZhciBsZWZ0ID0gYWRkaXRpdmUoKTsKLSAgICB2YXIgdG9rZW47Ci0g
ICAgaWYgKCh0b2tlbiA9IGV4cGVjdCgnPCcsICc+JywgJzw9JywgJz49JykpKSB7Ci0gICAgICBs
ZWZ0ID0gYmluYXJ5Rm4obGVmdCwgdG9rZW4uZm4sIHJlbGF0aW9uYWwoKSk7Ci0gICAgfQotICAg
IHJldHVybiBsZWZ0OwotICB9Ci0KLSAgZnVuY3Rpb24gYWRkaXRpdmUoKSB7Ci0gICAgdmFyIGxl
ZnQgPSBtdWx0aXBsaWNhdGl2ZSgpOwotICAgIHZhciB0b2tlbjsKLSAgICB3aGlsZSAoKHRva2Vu
ID0gZXhwZWN0KCcrJywnLScpKSkgewotICAgICAgbGVmdCA9IGJpbmFyeUZuKGxlZnQsIHRva2Vu
LmZuLCBtdWx0aXBsaWNhdGl2ZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGxlZnQ7Ci0gIH0KLQot
ICBmdW5jdGlvbiBtdWx0aXBsaWNhdGl2ZSgpIHsKLSAgICB2YXIgbGVmdCA9IHVuYXJ5KCk7Ci0g
ICAgdmFyIHRva2VuOwotICAgIHdoaWxlICgodG9rZW4gPSBleHBlY3QoJyonLCcvJywnJScpKSkg
ewotICAgICAgbGVmdCA9IGJpbmFyeUZuKGxlZnQsIHRva2VuLmZuLCB1bmFyeSgpKTsKLSAgICB9
Ci0gICAgcmV0dXJuIGxlZnQ7Ci0gIH0KLQotICBmdW5jdGlvbiB1bmFyeSgpIHsKLSAgICB2YXIg
dG9rZW47Ci0gICAgaWYgKGV4cGVjdCgnKycpKSB7Ci0gICAgICByZXR1cm4gcHJpbWFyeSgpOwot
ICAgIH0gZWxzZSBpZiAoKHRva2VuID0gZXhwZWN0KCctJykpKSB7Ci0gICAgICByZXR1cm4gYmlu
YXJ5Rm4oWkVSTywgdG9rZW4uZm4sIHVuYXJ5KCkpOwotICAgIH0gZWxzZSBpZiAoKHRva2VuID0g
ZXhwZWN0KCchJykpKSB7Ci0gICAgICByZXR1cm4gdW5hcnlGbih0b2tlbi5mbiwgdW5hcnkoKSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBwcmltYXJ5KCk7Ci0gICAgfQotICB9Ci0KLQot
ICBmdW5jdGlvbiBwcmltYXJ5KCkgewotICAgIHZhciBwcmltYXJ5OwotICAgIGlmIChleHBlY3Qo
JygnKSkgewotICAgICAgcHJpbWFyeSA9IGZpbHRlckNoYWluKCk7Ci0gICAgICBjb25zdW1lKCcp
Jyk7Ci0gICAgfSBlbHNlIGlmIChleHBlY3QoJ1snKSkgewotICAgICAgcHJpbWFyeSA9IGFycmF5
RGVjbGFyYXRpb24oKTsKLSAgICB9IGVsc2UgaWYgKGV4cGVjdCgneycpKSB7Ci0gICAgICBwcmlt
YXJ5ID0gb2JqZWN0KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHZhciB0b2tlbiA9IGV4cGVjdCgp
OwotICAgICAgcHJpbWFyeSA9IHRva2VuLmZuOwotICAgICAgaWYgKCFwcmltYXJ5KSB7Ci0gICAg
ICAgIHRocm93RXJyb3IoIm5vdCBhIHByaW1hcnkgZXhwcmVzc2lvbiIsIHRva2VuKTsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICB2YXIgbmV4dCwgY29udGV4dDsKLSAgICB3aGlsZSAoKG5leHQgPSBl
eHBlY3QoJygnLCAnWycsICcuJykpKSB7Ci0gICAgICBpZiAobmV4dC50ZXh0ID09PSAnKCcpIHsK
LSAgICAgICAgcHJpbWFyeSA9IGZ1bmN0aW9uQ2FsbChwcmltYXJ5LCBjb250ZXh0KTsKLSAgICAg
ICAgY29udGV4dCA9IG51bGw7Ci0gICAgICB9IGVsc2UgaWYgKG5leHQudGV4dCA9PT0gJ1snKSB7
Ci0gICAgICAgIGNvbnRleHQgPSBwcmltYXJ5OwotICAgICAgICBwcmltYXJ5ID0gb2JqZWN0SW5k
ZXgocHJpbWFyeSk7Ci0gICAgICB9IGVsc2UgaWYgKG5leHQudGV4dCA9PT0gJy4nKSB7Ci0gICAg
ICAgIGNvbnRleHQgPSBwcmltYXJ5OwotICAgICAgICBwcmltYXJ5ID0gZmllbGRBY2Nlc3MocHJp
bWFyeSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB0aHJvd0Vycm9yKCJJTVBPU1NJQkxFIik7
Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwcmltYXJ5OwotICB9Ci0KLSAgZnVuY3Rpb24g
X2ZpZWxkQWNjZXNzKG9iamVjdCkgewotICAgIHZhciBmaWVsZCA9IGV4cGVjdCgpLnRleHQ7Ci0g
ICAgdmFyIGdldHRlciA9IGdldHRlckZuKGZpZWxkLCBjc3ApOwotICAgIHJldHVybiBleHRlbmQo
Ci0gICAgICAgIGZ1bmN0aW9uKHNjb3BlLCBsb2NhbHMsIHNlbGYpIHsKLSAgICAgICAgICByZXR1
cm4gZ2V0dGVyKHNlbGYgfHwgb2JqZWN0KHNjb3BlLCBsb2NhbHMpLCBsb2NhbHMpOwotICAgICAg
ICB9LAotICAgICAgICB7Ci0gICAgICAgICAgYXNzaWduOmZ1bmN0aW9uKHNjb3BlLCB2YWx1ZSwg
bG9jYWxzKSB7Ci0gICAgICAgICAgICByZXR1cm4gc2V0dGVyKG9iamVjdChzY29wZSwgbG9jYWxz
KSwgZmllbGQsIHZhbHVlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICApOwotICB9Ci0K
LSAgZnVuY3Rpb24gX29iamVjdEluZGV4KG9iaikgewotICAgIHZhciBpbmRleEZuID0gZXhwcmVz
c2lvbigpOwotICAgIGNvbnN1bWUoJ10nKTsKLSAgICByZXR1cm4gZXh0ZW5kKAotICAgICAgZnVu
Y3Rpb24oc2VsZiwgbG9jYWxzKXsKLSAgICAgICAgdmFyIG8gPSBvYmooc2VsZiwgbG9jYWxzKSwK
LSAgICAgICAgICAgIGkgPSBpbmRleEZuKHNlbGYsIGxvY2FscyksCi0gICAgICAgICAgICB2LCBw
OwotCi0gICAgICAgIGlmICghbykgcmV0dXJuIHVuZGVmaW5lZDsKLSAgICAgICAgdiA9IG9baV07
Ci0gICAgICAgIGlmICh2ICYmIHYudGhlbikgewotICAgICAgICAgIHAgPSB2OwotICAgICAgICAg
IGlmICghKCckJHYnIGluIHYpKSB7Ci0gICAgICAgICAgICBwLiQkdiA9IHVuZGVmaW5lZDsKLSAg
ICAgICAgICAgIHAudGhlbihmdW5jdGlvbih2YWwpIHsgcC4kJHYgPSB2YWw7IH0pOwotICAgICAg
ICAgIH0KLSAgICAgICAgICB2ID0gdi4kJHY7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHY7
Ci0gICAgICB9LCB7Ci0gICAgICAgIGFzc2lnbjpmdW5jdGlvbihzZWxmLCB2YWx1ZSwgbG9jYWxz
KXsKLSAgICAgICAgICByZXR1cm4gb2JqKHNlbGYsIGxvY2FscylbaW5kZXhGbihzZWxmLCBsb2Nh
bHMpXSA9IHZhbHVlOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgfQotCi0gIGZ1bmN0aW9uIF9m
dW5jdGlvbkNhbGwoZm4sIGNvbnRleHRHZXR0ZXIpIHsKLSAgICB2YXIgYXJnc0ZuID0gW107Ci0g
ICAgaWYgKHBlZWtUb2tlbigpLnRleHQgIT0gJyknKSB7Ci0gICAgICBkbyB7Ci0gICAgICAgIGFy
Z3NGbi5wdXNoKGV4cHJlc3Npb24oKSk7Ci0gICAgICB9IHdoaWxlIChleHBlY3QoJywnKSk7Ci0g
ICAgfQotICAgIGNvbnN1bWUoJyknKTsKLSAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUsIGxvY2Fs
cyl7Ci0gICAgICB2YXIgYXJncyA9IFtdLAotICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0R2V0
dGVyID8gY29udGV4dEdldHRlcihzY29wZSwgbG9jYWxzKSA6IHNjb3BlOwotCi0gICAgICBmb3Ig
KCB2YXIgaSA9IDA7IGkgPCBhcmdzRm4ubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgYXJncy5wdXNo
KGFyZ3NGbltpXShzY29wZSwgbG9jYWxzKSk7Ci0gICAgICB9Ci0gICAgICB2YXIgZm5QdHIgPSBm
bihzY29wZSwgbG9jYWxzLCBjb250ZXh0KSB8fCBub29wOwotICAgICAgLy8gSUUgc3R1cGlkaXR5
IQotICAgICAgcmV0dXJuIGZuUHRyLmFwcGx5Ci0gICAgICAgICAgPyBmblB0ci5hcHBseShjb250
ZXh0LCBhcmdzKQotICAgICAgICAgIDogZm5QdHIoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwg
YXJnc1szXSwgYXJnc1s0XSk7Ci0gICAgfTsKLSAgfQotCi0gIC8vIFRoaXMgaXMgdXNlZCB3aXRo
IGpzb24gYXJyYXkgZGVjbGFyYXRpb24KLSAgZnVuY3Rpb24gYXJyYXlEZWNsYXJhdGlvbiAoKSB7
Ci0gICAgdmFyIGVsZW1lbnRGbnMgPSBbXTsKLSAgICBpZiAocGVla1Rva2VuKCkudGV4dCAhPSAn
XScpIHsKLSAgICAgIGRvIHsKLSAgICAgICAgZWxlbWVudEZucy5wdXNoKGV4cHJlc3Npb24oKSk7
Ci0gICAgICB9IHdoaWxlIChleHBlY3QoJywnKSk7Ci0gICAgfQotICAgIGNvbnN1bWUoJ10nKTsK
LSAgICByZXR1cm4gZnVuY3Rpb24oc2VsZiwgbG9jYWxzKXsKLSAgICAgIHZhciBhcnJheSA9IFtd
OwotICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgZWxlbWVudEZucy5sZW5ndGg7IGkrKykgewot
ICAgICAgICBhcnJheS5wdXNoKGVsZW1lbnRGbnNbaV0oc2VsZiwgbG9jYWxzKSk7Ci0gICAgICB9
Ci0gICAgICByZXR1cm4gYXJyYXk7Ci0gICAgfTsKLSAgfQotCi0gIGZ1bmN0aW9uIG9iamVjdCAo
KSB7Ci0gICAgdmFyIGtleVZhbHVlcyA9IFtdOwotICAgIGlmIChwZWVrVG9rZW4oKS50ZXh0ICE9
ICd9JykgewotICAgICAgZG8gewotICAgICAgICB2YXIgdG9rZW4gPSBleHBlY3QoKSwKLSAgICAg
ICAga2V5ID0gdG9rZW4uc3RyaW5nIHx8IHRva2VuLnRleHQ7Ci0gICAgICAgIGNvbnN1bWUoIjoi
KTsKLSAgICAgICAgdmFyIHZhbHVlID0gZXhwcmVzc2lvbigpOwotICAgICAgICBrZXlWYWx1ZXMu
cHVzaCh7a2V5OmtleSwgdmFsdWU6dmFsdWV9KTsKLSAgICAgIH0gd2hpbGUgKGV4cGVjdCgnLCcp
KTsKLSAgICB9Ci0gICAgY29uc3VtZSgnfScpOwotICAgIHJldHVybiBmdW5jdGlvbihzZWxmLCBs
b2NhbHMpewotICAgICAgdmFyIG9iamVjdCA9IHt9OwotICAgICAgZm9yICggdmFyIGkgPSAwOyBp
IDwga2V5VmFsdWVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHZhciBrZXlWYWx1ZSA9IGtleVZh
bHVlc1tpXTsKLSAgICAgICAgb2JqZWN0W2tleVZhbHVlLmtleV0gPSBrZXlWYWx1ZS52YWx1ZShz
ZWxmLCBsb2NhbHMpOwotICAgICAgfQotICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9OwotICB9
Ci19Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ci0vLyBQYXJzZXIgaGVscGVyIGZ1bmN0aW9ucwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotZnVuY3Rpb24gc2V0dGVyKG9iaiwgcGF0aCwgc2V0
VmFsdWUpIHsKLSAgdmFyIGVsZW1lbnQgPSBwYXRoLnNwbGl0KCcuJyk7Ci0gIGZvciAodmFyIGkg
PSAwOyBlbGVtZW50Lmxlbmd0aCA+IDE7IGkrKykgewotICAgIHZhciBrZXkgPSBlbGVtZW50LnNo
aWZ0KCk7Ci0gICAgdmFyIHByb3BlcnR5T2JqID0gb2JqW2tleV07Ci0gICAgaWYgKCFwcm9wZXJ0
eU9iaikgewotICAgICAgcHJvcGVydHlPYmogPSB7fTsKLSAgICAgIG9ialtrZXldID0gcHJvcGVy
dHlPYmo7Ci0gICAgfQotICAgIG9iaiA9IHByb3BlcnR5T2JqOwotICB9Ci0gIG9ialtlbGVtZW50
LnNoaWZ0KCldID0gc2V0VmFsdWU7Ci0gIHJldHVybiBzZXRWYWx1ZTsKLX0KLQotLyoqCi0gKiBS
ZXR1cm4gdGhlIHZhbHVlIGFjY2VzaWJsZSBmcm9tIHRoZSBvYmplY3QgYnkgcGF0aC4gQW55IHVu
ZGVmaW5lZCB0cmF2ZXJzYWxzIGFyZSBpZ25vcmVkCi0gKiBAcGFyYW0ge09iamVjdH0gb2JqIHN0
YXJ0aW5nIG9iamVjdAotICogQHBhcmFtIHtzdHJpbmd9IHBhdGggcGF0aCB0byB0cmF2ZXJzZQot
ICogQHBhcmFtIHtib29sZWFuPXRydWV9IGJpbmRGblRvU2NvcGUKLSAqIEByZXR1cm5zIHZhbHVl
IGFzIGFjY2VzYmlsZSBieSBwYXRoCi0gKi8KLS8vVE9ETyhtaXNrbyk6IHRoaXMgZnVuY3Rpb24g
bmVlZHMgdG8gYmUgcmVtb3ZlZAotZnVuY3Rpb24gZ2V0dGVyKG9iaiwgcGF0aCwgYmluZEZuVG9T
Y29wZSkgewotICBpZiAoIXBhdGgpIHJldHVybiBvYmo7Ci0gIHZhciBrZXlzID0gcGF0aC5zcGxp
dCgnLicpOwotICB2YXIga2V5OwotICB2YXIgbGFzdEluc3RhbmNlID0gb2JqOwotICB2YXIgbGVu
ID0ga2V5cy5sZW5ndGg7Ci0KLSAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAg
IGtleSA9IGtleXNbaV07Ci0gICAgaWYgKG9iaikgewotICAgICAgb2JqID0gKGxhc3RJbnN0YW5j
ZSA9IG9iailba2V5XTsKLSAgICB9Ci0gIH0KLSAgaWYgKCFiaW5kRm5Ub1Njb3BlICYmIGlzRnVu
Y3Rpb24ob2JqKSkgewotICAgIHJldHVybiBiaW5kKGxhc3RJbnN0YW5jZSwgb2JqKTsKLSAgfQot
ICByZXR1cm4gb2JqOwotfQotCi12YXIgZ2V0dGVyRm5DYWNoZSA9IHt9OwotCi0vKioKLSAqIElt
cGxlbWVudGF0aW9uIG9mIHRoZSAiQmxhY2sgSG9sZSIgdmFyaWFudCBmcm9tOgotICogLSBodHRw
Oi8vanNwZXJmLmNvbS9hbmd1bGFyanMtcGFyc2UtZ2V0dGVyLzQKLSAqIC0gaHR0cDovL2pzcGVy
Zi5jb20vcGF0aC1ldmFsdWF0aW9uLXNpbXBsaWZpZWQvNwotICovCi1mdW5jdGlvbiBjc3BTYWZl
R2V0dGVyRm4oa2V5MCwga2V5MSwga2V5Miwga2V5Mywga2V5NCkgewotICByZXR1cm4gZnVuY3Rp
b24oc2NvcGUsIGxvY2FscykgewotICAgIHZhciBwYXRoVmFsID0gKGxvY2FscyAmJiBsb2NhbHMu
aGFzT3duUHJvcGVydHkoa2V5MCkpID8gbG9jYWxzIDogc2NvcGUsCi0gICAgICAgIHByb21pc2U7
Ci0KLSAgICBpZiAocGF0aFZhbCA9PT0gbnVsbCB8fCBwYXRoVmFsID09PSB1bmRlZmluZWQpIHJl
dHVybiBwYXRoVmFsOwotCi0gICAgcGF0aFZhbCA9IHBhdGhWYWxba2V5MF07Ci0gICAgaWYgKHBh
dGhWYWwgJiYgcGF0aFZhbC50aGVuKSB7Ci0gICAgICBpZiAoISgiJCR2IiBpbiBwYXRoVmFsKSkg
ewotICAgICAgICBwcm9taXNlID0gcGF0aFZhbDsKLSAgICAgICAgcHJvbWlzZS4kJHYgPSB1bmRl
ZmluZWQ7Ci0gICAgICAgIHByb21pc2UudGhlbihmdW5jdGlvbih2YWwpIHsgcHJvbWlzZS4kJHYg
PSB2YWw7IH0pOwotICAgICAgfQotICAgICAgcGF0aFZhbCA9IHBhdGhWYWwuJCR2OwotICAgIH0K
LSAgICBpZiAoIWtleTEgfHwgcGF0aFZhbCA9PT0gbnVsbCB8fCBwYXRoVmFsID09PSB1bmRlZmlu
ZWQpIHJldHVybiBwYXRoVmFsOwotCi0gICAgcGF0aFZhbCA9IHBhdGhWYWxba2V5MV07Ci0gICAg
aWYgKHBhdGhWYWwgJiYgcGF0aFZhbC50aGVuKSB7Ci0gICAgICBpZiAoISgiJCR2IiBpbiBwYXRo
VmFsKSkgewotICAgICAgICBwcm9taXNlID0gcGF0aFZhbDsKLSAgICAgICAgcHJvbWlzZS4kJHYg
PSB1bmRlZmluZWQ7Ci0gICAgICAgIHByb21pc2UudGhlbihmdW5jdGlvbih2YWwpIHsgcHJvbWlz
ZS4kJHYgPSB2YWw7IH0pOwotICAgICAgfQotICAgICAgcGF0aFZhbCA9IHBhdGhWYWwuJCR2Owot
ICAgIH0KLSAgICBpZiAoIWtleTIgfHwgcGF0aFZhbCA9PT0gbnVsbCB8fCBwYXRoVmFsID09PSB1
bmRlZmluZWQpIHJldHVybiBwYXRoVmFsOwotCi0gICAgcGF0aFZhbCA9IHBhdGhWYWxba2V5Ml07
Ci0gICAgaWYgKHBhdGhWYWwgJiYgcGF0aFZhbC50aGVuKSB7Ci0gICAgICBpZiAoISgiJCR2IiBp
biBwYXRoVmFsKSkgewotICAgICAgICBwcm9taXNlID0gcGF0aFZhbDsKLSAgICAgICAgcHJvbWlz
ZS4kJHYgPSB1bmRlZmluZWQ7Ci0gICAgICAgIHByb21pc2UudGhlbihmdW5jdGlvbih2YWwpIHsg
cHJvbWlzZS4kJHYgPSB2YWw7IH0pOwotICAgICAgfQotICAgICAgcGF0aFZhbCA9IHBhdGhWYWwu
JCR2OwotICAgIH0KLSAgICBpZiAoIWtleTMgfHwgcGF0aFZhbCA9PT0gbnVsbCB8fCBwYXRoVmFs
ID09PSB1bmRlZmluZWQpIHJldHVybiBwYXRoVmFsOwotCi0gICAgcGF0aFZhbCA9IHBhdGhWYWxb
a2V5M107Ci0gICAgaWYgKHBhdGhWYWwgJiYgcGF0aFZhbC50aGVuKSB7Ci0gICAgICBpZiAoISgi
JCR2IiBpbiBwYXRoVmFsKSkgewotICAgICAgICBwcm9taXNlID0gcGF0aFZhbDsKLSAgICAgICAg
cHJvbWlzZS4kJHYgPSB1bmRlZmluZWQ7Ci0gICAgICAgIHByb21pc2UudGhlbihmdW5jdGlvbih2
YWwpIHsgcHJvbWlzZS4kJHYgPSB2YWw7IH0pOwotICAgICAgfQotICAgICAgcGF0aFZhbCA9IHBh
dGhWYWwuJCR2OwotICAgIH0KLSAgICBpZiAoIWtleTQgfHwgcGF0aFZhbCA9PT0gbnVsbCB8fCBw
YXRoVmFsID09PSB1bmRlZmluZWQpIHJldHVybiBwYXRoVmFsOwotCi0gICAgcGF0aFZhbCA9IHBh
dGhWYWxba2V5NF07Ci0gICAgaWYgKHBhdGhWYWwgJiYgcGF0aFZhbC50aGVuKSB7Ci0gICAgICBp
ZiAoISgiJCR2IiBpbiBwYXRoVmFsKSkgewotICAgICAgICBwcm9taXNlID0gcGF0aFZhbDsKLSAg
ICAgICAgcHJvbWlzZS4kJHYgPSB1bmRlZmluZWQ7Ci0gICAgICAgIHByb21pc2UudGhlbihmdW5j
dGlvbih2YWwpIHsgcHJvbWlzZS4kJHYgPSB2YWw7IH0pOwotICAgICAgfQotICAgICAgcGF0aFZh
bCA9IHBhdGhWYWwuJCR2OwotICAgIH0KLSAgICByZXR1cm4gcGF0aFZhbDsKLSAgfTsKLX0KLQot
ZnVuY3Rpb24gZ2V0dGVyRm4ocGF0aCwgY3NwKSB7Ci0gIGlmIChnZXR0ZXJGbkNhY2hlLmhhc093
blByb3BlcnR5KHBhdGgpKSB7Ci0gICAgcmV0dXJuIGdldHRlckZuQ2FjaGVbcGF0aF07Ci0gIH0K
LQotICB2YXIgcGF0aEtleXMgPSBwYXRoLnNwbGl0KCcuJyksCi0gICAgICBwYXRoS2V5c0xlbmd0
aCA9IHBhdGhLZXlzLmxlbmd0aCwKLSAgICAgIGZuOwotCi0gIGlmIChjc3ApIHsKLSAgICBmbiA9
IChwYXRoS2V5c0xlbmd0aCA8IDYpCi0gICAgICAgID8gY3NwU2FmZUdldHRlckZuKHBhdGhLZXlz
WzBdLCBwYXRoS2V5c1sxXSwgcGF0aEtleXNbMl0sIHBhdGhLZXlzWzNdLCBwYXRoS2V5c1s0XSkK
LSAgICAgICAgOiBmdW5jdGlvbihzY29wZSwgbG9jYWxzKSB7Ci0gICAgICAgICAgdmFyIGkgPSAw
LCB2YWw7Ci0gICAgICAgICAgZG8gewotICAgICAgICAgICAgdmFsID0gY3NwU2FmZUdldHRlckZu
KAotICAgICAgICAgICAgICAgICAgICBwYXRoS2V5c1tpKytdLCBwYXRoS2V5c1tpKytdLCBwYXRo
S2V5c1tpKytdLCBwYXRoS2V5c1tpKytdLCBwYXRoS2V5c1tpKytdCi0gICAgICAgICAgICAgICAg
ICApKHNjb3BlLCBsb2NhbHMpOwotCi0gICAgICAgICAgICBsb2NhbHMgPSB1bmRlZmluZWQ7IC8v
IGNsZWFyIGFmdGVyIGZpcnN0IGl0ZXJhdGlvbgotICAgICAgICAgICAgc2NvcGUgPSB2YWw7Ci0g
ICAgICAgICAgfSB3aGlsZSAoaSA8IHBhdGhLZXlzTGVuZ3RoKTsKLSAgICAgICAgICByZXR1cm4g
dmFsOwotICAgICAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgdmFyIGNvZGUgPSAndmFyIGwsIGZuLCBw
O1xuJzsKLSAgICBmb3JFYWNoKHBhdGhLZXlzLCBmdW5jdGlvbihrZXksIGluZGV4KSB7Ci0gICAg
ICBjb2RlICs9ICdpZihzID09PSBudWxsIHx8IHMgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHM7XG4n
ICsKLSAgICAgICAgICAgICAgJ2w9cztcbicgKwotICAgICAgICAgICAgICAncz0nKyAoaW5kZXgK
LSAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBzaW1wbHkgZGVyZWZlcmVuY2UgJ3MnIG9uIGFu
eSAuZG90IG5vdGF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgPyAncycKLSAgICAgICAgICAg
ICAgICAgICAgICAvLyBidXQgaWYgd2UgYXJlIGZpcnN0IHRoZW4gd2UgY2hlY2sgbG9jYWxzIGZp
cnN0LCBhbmQgaWYgc28gcmVhZCBpdCBmaXJzdAotICAgICAgICAgICAgICAgICAgICAgIDogJygo
ayYmay5oYXNPd25Qcm9wZXJ0eSgiJyArIGtleSArICciKSk/azpzKScpICsgJ1siJyArIGtleSAr
ICciXScgKyAnO1xuJyArCi0gICAgICAgICAgICAgICdpZiAocyAmJiBzLnRoZW4pIHtcbicgKwot
ICAgICAgICAgICAgICAgICcgaWYgKCEoIiQkdiIgaW4gcykpIHtcbicgKwotICAgICAgICAgICAg
ICAgICAgJyBwPXM7XG4nICsKLSAgICAgICAgICAgICAgICAgICcgcC4kJHYgPSB1bmRlZmluZWQ7
XG4nICsKLSAgICAgICAgICAgICAgICAgICcgcC50aGVuKGZ1bmN0aW9uKHYpIHtwLiQkdj12O30p
O1xuJyArCi0gICAgICAgICAgICAgICAgICAnfVxuJyArCi0gICAgICAgICAgICAgICAgJyBzPXMu
JCR2XG4nICsKLSAgICAgICAgICAgICAgJ31cbic7Ci0gICAgfSk7Ci0gICAgY29kZSArPSAncmV0
dXJuIHM7JzsKLSAgICBmbiA9IEZ1bmN0aW9uKCdzJywgJ2snLCBjb2RlKTsgLy8gcz1zY29wZSwg
az1sb2NhbHMKLSAgICBmbi50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gY29kZTsgfTsK
LSAgfQotCi0gIHJldHVybiBnZXR0ZXJGbkNhY2hlW3BhdGhdID0gZm47Ci19Ci0KLS8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLS8qKgotICogQG5nZG9jIGZ1bmN0aW9uCi0g
KiBAbmFtZSBuZy4kcGFyc2UKLSAqIEBmdW5jdGlvbgotICoKLSAqIEBkZXNjcmlwdGlvbgotICoK
LSAqIENvbnZlcnRzIEFuZ3VsYXIge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0g
aW50byBhIGZ1bmN0aW9uLgotICoKLSAqIDxwcmU+Ci0gKiAgIHZhciBnZXR0ZXIgPSAkcGFyc2Uo
J3VzZXIubmFtZScpOwotICogICB2YXIgc2V0dGVyID0gZ2V0dGVyLmFzc2lnbjsKLSAqICAgdmFy
IGNvbnRleHQgPSB7dXNlcjp7bmFtZTonYW5ndWxhcid9fTsKLSAqICAgdmFyIGxvY2FscyA9IHt1
c2VyOntuYW1lOidsb2NhbCd9fTsKLSAqCi0gKiAgIGV4cGVjdChnZXR0ZXIoY29udGV4dCkpLnRv
RXF1YWwoJ2FuZ3VsYXInKTsKLSAqICAgc2V0dGVyKGNvbnRleHQsICduZXdWYWx1ZScpOwotICog
ICBleHBlY3QoY29udGV4dC51c2VyLm5hbWUpLnRvRXF1YWwoJ25ld1ZhbHVlJyk7Ci0gKiAgIGV4
cGVjdChnZXR0ZXIoY29udGV4dCwgbG9jYWxzKSkudG9FcXVhbCgnbG9jYWwnKTsKLSAqIDwvcHJl
PgotICoKLSAqCi0gKiBAcGFyYW0ge3N0cmluZ30gZXhwcmVzc2lvbiBTdHJpbmcgZXhwcmVzc2lv
biB0byBjb21waWxlLgotICogQHJldHVybnMge2Z1bmN0aW9uKGNvbnRleHQsIGxvY2Fscyl9IGEg
ZnVuY3Rpb24gd2hpY2ggcmVwcmVzZW50cyB0aGUgY29tcGlsZWQgZXhwcmVzc2lvbjoKLSAqCi0g
KiAgICAqIGBjb250ZXh0YCDigJMgYHtvYmplY3R9YCDigJMgYW4gb2JqZWN0IGFnYWluc3Qgd2hp
Y2ggYW55IGV4cHJlc3Npb25zIGVtYmVkZGVkIGluIHRoZSBzdHJpbmdzCi0gKiAgICAgIGFyZSBl
dmFsdWF0ZWQgYWdhaW5zdCAodGlwaWNhbGx5IGEgc2NvcGUgb2JqZWN0KS4KLSAqICAgICogYGxv
Y2Fsc2Ag4oCTIGB7b2JqZWN0PX1gIOKAkyBsb2NhbCB2YXJpYWJsZXMgY29udGV4dCBvYmplY3Qs
IHVzZWZ1bCBmb3Igb3ZlcnJpZGluZyB2YWx1ZXMgaW4KLSAqICAgICAgYGNvbnRleHRgLgotICoK
LSAqICAgIFRoZSByZXR1cm4gZnVuY3Rpb24gYWxzbyBoYXMgYW4gYGFzc2lnbmAgcHJvcGVydHks
IGlmIHRoZSBleHByZXNzaW9uIGlzIGFzc2lnbmFibGUsIHdoaWNoCi0gKiAgICBhbGxvd3Mgb25l
IHRvIHNldCB2YWx1ZXMgdG8gZXhwcmVzc2lvbnMuCi0gKgotICovCi1mdW5jdGlvbiAkUGFyc2VQ
cm92aWRlcigpIHsKLSAgdmFyIGNhY2hlID0ge307Ci0gIHRoaXMuJGdldCA9IFsnJGZpbHRlcics
ICckc25pZmZlcicsIGZ1bmN0aW9uKCRmaWx0ZXIsICRzbmlmZmVyKSB7Ci0gICAgcmV0dXJuIGZ1
bmN0aW9uKGV4cCkgewotICAgICAgc3dpdGNoKHR5cGVvZiBleHApIHsKLSAgICAgICAgY2FzZSAn
c3RyaW5nJzoKLSAgICAgICAgICByZXR1cm4gY2FjaGUuaGFzT3duUHJvcGVydHkoZXhwKQotICAg
ICAgICAgICAgPyBjYWNoZVtleHBdCi0gICAgICAgICAgICA6IGNhY2hlW2V4cF0gPSAgcGFyc2Vy
KGV4cCwgZmFsc2UsICRmaWx0ZXIsICRzbmlmZmVyLmNzcCk7Ci0gICAgICAgIGNhc2UgJ2Z1bmN0
aW9uJzoKLSAgICAgICAgICByZXR1cm4gZXhwOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
IHJldHVybiBub29wOwotICAgICAgfQotICAgIH07Ci0gIH1dOwotfQotCi0vKioKLSAqIEBuZ2Rv
YyBzZXJ2aWNlCi0gKiBAbmFtZSBuZy4kcQotICogQHJlcXVpcmVzICRyb290U2NvcGUKLSAqCi0g
KiBAZGVzY3JpcHRpb24KLSAqIEEgcHJvbWlzZS9kZWZlcnJlZCBpbXBsZW1lbnRhdGlvbiBpbnNw
aXJlZCBieSBbS3JpcyBLb3dhbCdzIFFdKGh0dHBzOi8vZ2l0aHViLmNvbS9rcmlza293YWwvcSku
Ci0gKgotICogW1RoZSBDb21tb25KUyBQcm9taXNlIHByb3Bvc2FsXShodHRwOi8vd2lraS5jb21t
b25qcy5vcmcvd2lraS9Qcm9taXNlcykgZGVzY3JpYmVzIGEgcHJvbWlzZSBhcyBhbgotICogaW50
ZXJmYWNlIGZvciBpbnRlcmFjdGluZyB3aXRoIGFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhl
IHJlc3VsdCBvZiBhbiBhY3Rpb24gdGhhdCBpcwotICogcGVyZm9ybWVkIGFzeW5jaHJvbm91c2x5
LCBhbmQgbWF5IG9yIG1heSBub3QgYmUgZmluaXNoZWQgYXQgYW55IGdpdmVuIHBvaW50IGluIHRp
bWUuCi0gKgotICogRnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgZGVhbGluZyB3aXRoIGVycm9yIGhh
bmRsaW5nLCBkZWZlcnJlZCBhbmQgcHJvbWlzZSBBUElzIGFyZSB0bwotICogYXN5bmNocm9ub3Vz
IHByb2dyYW1taW5nIHdoYXQgYHRyeWAsIGBjYXRjaGAgYW5kIGB0aHJvd2Aga2V5d29yZHMgYXJl
IHRvIHN5bmNocm9ub3VzIHByb2dyYW1taW5nLgotICoKLSAqIDxwcmU+Ci0gKiAgIC8vIGZvciB0
aGUgcHVycG9zZSBvZiB0aGlzIGV4YW1wbGUgbGV0J3MgYXNzdW1lIHRoYXQgdmFyaWFibGVzIGAk
cWAgYW5kIGBzY29wZWAgYXJlCi0gKiAgIC8vIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBsZXhp
Y2FsIHNjb3BlICh0aGV5IGNvdWxkIGhhdmUgYmVlbiBpbmplY3RlZCBvciBwYXNzZWQgaW4pLgot
ICoKLSAqICAgZnVuY3Rpb24gYXN5bmNHcmVldChuYW1lKSB7Ci0gKiAgICAgdmFyIGRlZmVycmVk
ID0gJHEuZGVmZXIoKTsKLSAqCi0gKiAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKLSAqICAg
ICAgIC8vIHNpbmNlIHRoaXMgZm4gZXhlY3V0ZXMgYXN5bmMgaW4gYSBmdXR1cmUgdHVybiBvZiB0
aGUgZXZlbnQgbG9vcCwgd2UgbmVlZCB0byB3cmFwCi0gKiAgICAgICAvLyBvdXIgY29kZSBpbnRv
IGFuICRhcHBseSBjYWxsIHNvIHRoYXQgdGhlIG1vZGVsIGNoYW5nZXMgYXJlIHByb3Blcmx5IG9i
c2VydmVkLgotICogICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uKCkgewotICogICAgICAgICBp
ZiAob2tUb0dyZWV0KG5hbWUpKSB7Ci0gKiAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZSgnSGVs
bG8sICcgKyBuYW1lICsgJyEnKTsKLSAqICAgICAgICAgfSBlbHNlIHsKLSAqICAgICAgICAgICBk
ZWZlcnJlZC5yZWplY3QoJ0dyZWV0aW5nICcgKyBuYW1lICsgJyBpcyBub3QgYWxsb3dlZC4nKTsK
LSAqICAgICAgICAgfQotICogICAgICAgfSk7Ci0gKiAgICAgfSwgMTAwMCk7Ci0gKgotICogICAg
IHJldHVybiBkZWZlcnJlZC5wcm9taXNlOwotICogICB9Ci0gKgotICogICB2YXIgcHJvbWlzZSA9
IGFzeW5jR3JlZXQoJ1JvYmluIEhvb2QnKTsKLSAqICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKGdy
ZWV0aW5nKSB7Ci0gKiAgICAgYWxlcnQoJ1N1Y2Nlc3M6ICcgKyBncmVldGluZyk7Ci0gKiAgIH0s
IGZ1bmN0aW9uKHJlYXNvbikgewotICogICAgIGFsZXJ0KCdGYWlsZWQ6ICcgKyByZWFzb24pOwot
ICogICB9KTsKLSAqIDwvcHJlPgotICoKLSAqIEF0IGZpcnN0IGl0IG1pZ2h0IG5vdCBiZSBvYnZp
b3VzIHdoeSB0aGlzIGV4dHJhIGNvbXBsZXhpdHkgaXMgd29ydGggdGhlIHRyb3VibGUuIFRoZSBw
YXlvZmYKLSAqIGNvbWVzIGluIHRoZSB3YXkgb2YKLSAqIFtndWFyYW50ZWVzIHRoYXQgcHJvbWlz
ZSBhbmQgZGVmZXJyZWQgQVBJcyBtYWtlXShodHRwczovL2dpdGh1Yi5jb20va3Jpc2tvd2FsL3Vu
Y29tbW9uanMvYmxvYi9tYXN0ZXIvcHJvbWlzZXMvc3BlY2lmaWNhdGlvbi5tZCkuCi0gKgotICog
QWRkaXRpb25hbGx5IHRoZSBwcm9taXNlIGFwaSBhbGxvd3MgZm9yIGNvbXBvc2l0aW9uIHRoYXQg
aXMgdmVyeSBoYXJkIHRvIGRvIHdpdGggdGhlCi0gKiB0cmFkaXRpb25hbCBjYWxsYmFjayAoW0NQ
U10oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db250aW51YXRpb24tcGFzc2luZ19zdHls
ZSkpIGFwcHJvYWNoLgotICogRm9yIG1vcmUgb24gdGhpcyBwbGVhc2Ugc2VlIHRoZSBbUSBkb2N1
bWVudGF0aW9uXShodHRwczovL2dpdGh1Yi5jb20va3Jpc2tvd2FsL3EpIGVzcGVjaWFsbHkgdGhl
Ci0gKiBzZWN0aW9uIG9uIHNlcmlhbCBvciBwYXJhbGxlbCBqb2luaW5nIG9mIHByb21pc2VzLgot
ICoKLSAqCi0gKiAjIFRoZSBEZWZlcnJlZCBBUEkKLSAqCi0gKiBBIG5ldyBpbnN0YW5jZSBvZiBk
ZWZlcnJlZCBpcyBjb25zdHJ1Y3RlZCBieSBjYWxsaW5nIGAkcS5kZWZlcigpYC4KLSAqCi0gKiBU
aGUgcHVycG9zZSBvZiB0aGUgZGVmZXJyZWQgb2JqZWN0IGlzIHRvIGV4cG9zZSB0aGUgYXNzb2Np
YXRlZCBQcm9taXNlIGluc3RhbmNlIGFzIHdlbGwgYXMgQVBJcwotICogdGhhdCBjYW4gYmUgdXNl
ZCBmb3Igc2lnbmFsaW5nIHRoZSBzdWNjZXNzZnVsIG9yIHVuc3VjY2Vzc2Z1bCBjb21wbGV0aW9u
IG9mIHRoZSB0YXNrLgotICoKLSAqICoqTWV0aG9kcyoqCi0gKgotICogLSBgcmVzb2x2ZSh2YWx1
ZSlgIOKAkyByZXNvbHZlcyB0aGUgZGVyaXZlZCBwcm9taXNlIHdpdGggdGhlIGB2YWx1ZWAuIElm
IHRoZSB2YWx1ZSBpcyBhIHJlamVjdGlvbgotICogICBjb25zdHJ1Y3RlZCB2aWEgYCRxLnJlamVj
dGAsIHRoZSBwcm9taXNlIHdpbGwgYmUgcmVqZWN0ZWQgaW5zdGVhZC4KLSAqIC0gYHJlamVjdChy
ZWFzb24pYCDigJMgcmVqZWN0cyB0aGUgZGVyaXZlZCBwcm9taXNlIHdpdGggdGhlIGByZWFzb25g
LiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8KLSAqICAgcmVzb2x2aW5nIGl0IHdpdGggYSByZWplY3Rp
b24gY29uc3RydWN0ZWQgdmlhIGAkcS5yZWplY3RgLgotICoKLSAqICoqUHJvcGVydGllcyoqCi0g
KgotICogLSBwcm9taXNlIOKAkyBge1Byb21pc2V9YCDigJMgcHJvbWlzZSBvYmplY3QgYXNzb2Np
YXRlZCB3aXRoIHRoaXMgZGVmZXJyZWQuCi0gKgotICoKLSAqICMgVGhlIFByb21pc2UgQVBJCi0g
KgotICogQSBuZXcgcHJvbWlzZSBpbnN0YW5jZSBpcyBjcmVhdGVkIHdoZW4gYSBkZWZlcnJlZCBp
bnN0YW5jZSBpcyBjcmVhdGVkIGFuZCBjYW4gYmUgcmV0cmlldmVkIGJ5Ci0gKiBjYWxsaW5nIGBk
ZWZlcnJlZC5wcm9taXNlYC4KLSAqCi0gKiBUaGUgcHVycG9zZSBvZiB0aGUgcHJvbWlzZSBvYmpl
Y3QgaXMgdG8gYWxsb3cgZm9yIGludGVyZXN0ZWQgcGFydGllcyB0byBnZXQgYWNjZXNzIHRvIHRo
ZSByZXN1bHQKLSAqIG9mIHRoZSBkZWZlcnJlZCB0YXNrIHdoZW4gaXQgY29tcGxldGVzLgotICoK
LSAqICoqTWV0aG9kcyoqCi0gKgotICogLSBgdGhlbihzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2Fs
bGJhY2spYCDigJMgcmVnYXJkbGVzcyBvZiB3aGVuIHRoZSBwcm9taXNlIHdhcyBvciB3aWxsIGJl
IHJlc29sdmVkCi0gKiAgIG9yIHJlamVjdGVkIGNhbGxzIG9uZSBvZiB0aGUgc3VjY2VzcyBvciBl
cnJvciBjYWxsYmFja3MgYXN5bmNocm9ub3VzbHkgYXMgc29vbiBhcyB0aGUgcmVzdWx0Ci0gKiAg
IGlzIGF2YWlsYWJsZS4gVGhlIGNhbGxiYWNrcyBhcmUgY2FsbGVkIHdpdGggYSBzaW5nbGUgYXJn
dW1lbnQgdGhlIHJlc3VsdCBvciByZWplY3Rpb24gcmVhc29uLgotICoKLSAqICAgVGhpcyBtZXRo
b2QgKnJldHVybnMgYSBuZXcgcHJvbWlzZSogd2hpY2ggaXMgcmVzb2x2ZWQgb3IgcmVqZWN0ZWQg
dmlhIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlCi0gKiAgIGBzdWNjZXNzQ2FsbGJhY2tgIG9yIGBl
cnJvckNhbGxiYWNrYC4KLSAqCi0gKgotICogIyBDaGFpbmluZyBwcm9taXNlcwotICoKLSAqIEJl
Y2F1c2UgY2FsbGluZyBgdGhlbmAgYXBpIG9mIGEgcHJvbWlzZSByZXR1cm5zIGEgbmV3IGRlcml2
ZWQgcHJvbWlzZSwgaXQgaXMgZWFzaWx5IHBvc3NpYmxlCi0gKiB0byBjcmVhdGUgYSBjaGFpbiBv
ZiBwcm9taXNlczoKLSAqCi0gKiA8cHJlPgotICogICBwcm9taXNlQiA9IHByb21pc2VBLnRoZW4o
ZnVuY3Rpb24ocmVzdWx0KSB7Ci0gKiAgICAgcmV0dXJuIHJlc3VsdCArIDE7Ci0gKiAgIH0pOwot
ICoKLSAqICAgLy8gcHJvbWlzZUIgd2lsbCBiZSByZXNvbHZlZCBpbW1lZGlhdGVseSBhZnRlciBw
cm9taXNlQSBpcyByZXNvbHZlZCBhbmQgaXRzIHZhbHVlIHdpbGwgYmUKLSAqICAgLy8gdGhlIHJl
c3VsdCBvZiBwcm9taXNlQSBpbmNyZW1lbnRlZCBieSAxCi0gKiA8L3ByZT4KLSAqCi0gKiBJdCBp
cyBwb3NzaWJsZSB0byBjcmVhdGUgY2hhaW5zIG9mIGFueSBsZW5ndGggYW5kIHNpbmNlIGEgcHJv
bWlzZSBjYW4gYmUgcmVzb2x2ZWQgd2l0aCBhbm90aGVyCi0gKiBwcm9taXNlICh3aGljaCB3aWxs
IGRlZmVyIGl0cyByZXNvbHV0aW9uIGZ1cnRoZXIpLCBpdCBpcyBwb3NzaWJsZSB0byBwYXVzZS9k
ZWZlciByZXNvbHV0aW9uIG9mCi0gKiB0aGUgcHJvbWlzZXMgYXQgYW55IHBvaW50IGluIHRoZSBj
aGFpbi4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBpbXBsZW1lbnQgcG93ZXJmdWwgYXBpcyBs
aWtlCi0gKiAkaHR0cCdzIHJlc3BvbnNlIGludGVyY2VwdG9ycy4KLSAqCi0gKgotICogIyBEaWZm
ZXJlbmNlcyBiZXR3ZWVuIEtyaXMgS293YWwncyBRIGFuZCAkcQotICoKLSAqICBUaGVyZSBhcmUg
dGhyZWUgbWFpbiBkaWZmZXJlbmNlczoKLSAqCi0gKiAtICRxIGlzIGludGVncmF0ZWQgd2l0aCB0
aGUge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGV9IFNjb3BlIG1vZGVsIG9ic2VydmF0aW9uCi0g
KiAgIG1lY2hhbmlzbSBpbiBhbmd1bGFyLCB3aGljaCBtZWFucyBmYXN0ZXIgcHJvcGFnYXRpb24g
b2YgcmVzb2x1dGlvbiBvciByZWplY3Rpb24gaW50byB5b3VyCi0gKiAgIG1vZGVscyBhbmQgYXZv
aWRpbmcgdW5uZWNlc3NhcnkgYnJvd3NlciByZXBhaW50cywgd2hpY2ggd291bGQgcmVzdWx0IGlu
IGZsaWNrZXJpbmcgVUkuCi0gKiAtICRxIHByb21pc2VzIGFyZSByZWNvZ25pemVkIGJ5IHRoZSB0
ZW1wbGF0aW5nIGVuZ2luZSBpbiBhbmd1bGFyLCB3aGljaCBtZWFucyB0aGF0IGluIHRlbXBsYXRl
cwotICogICB5b3UgY2FuIHRyZWF0IHByb21pc2VzIGF0dGFjaGVkIHRvIGEgc2NvcGUgYXMgaWYg
dGhleSB3ZXJlIHRoZSByZXN1bHRpbmcgdmFsdWVzLgotICogLSBRIGhhcyBtYW55IG1vcmUgZmVh
dHVyZXMgdGhhbiAkcSwgYnV0IHRoYXQgY29tZXMgYXQgYSBjb3N0IG9mIGJ5dGVzLiAkcSBpcyB0
aW55LCBidXQgY29udGFpbnMKLSAqICAgYWxsIHRoZSBpbXBvcnRhbnQgZnVuY3Rpb25hbGl0eSBu
ZWVkZWQgZm9yIGNvbW1vbiBhc3luYyB0YXNrcy4KLSAqIAotICogICMgVGVzdGluZwotICogCi0g
KiAgPHByZT4KLSAqICAgIGl0KCdzaG91bGQgc2ltdWxhdGUgcHJvbWlzZScsIGluamVjdChmdW5j
dGlvbigkcSwgJHJvb3RTY29wZSkgewotICogICAgICB2YXIgZGVmZXJyZWQgPSAkcS5kZWZlcigp
OwotICogICAgICB2YXIgcHJvbWlzZSA9IGRlZmVycmVkLnByb21pc2U7Ci0gKiAgICAgIHZhciBy
ZXNvbHZlZFZhbHVlOwotICogCi0gKiAgICAgIHByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZSkg
eyByZXNvbHZlZFZhbHVlID0gdmFsdWU7IH0pOwotICogICAgICBleHBlY3QocmVzb2x2ZWRWYWx1
ZSkudG9CZVVuZGVmaW5lZCgpOwotICogCi0gKiAgICAgIC8vIFNpbXVsYXRlIHJlc29sdmluZyBv
ZiBwcm9taXNlCi0gKiAgICAgIGRlZmVycmVkLnJlc29sdmUoMTIzKTsKLSAqICAgICAgLy8gTm90
ZSB0aGF0IHRoZSAndGhlbicgZnVuY3Rpb24gZG9lcyBub3QgZ2V0IGNhbGxlZCBzeW5jaHJvbm91
c2x5LgotICogICAgICAvLyBUaGlzIGlzIGJlY2F1c2Ugd2Ugd2FudCB0aGUgcHJvbWlzZSBBUEkg
dG8gYWx3YXlzIGJlIGFzeW5jLCB3aGV0aGVyIG9yIG5vdAotICogICAgICAvLyBpdCBnb3QgY2Fs
bGVkIHN5bmNocm9ub3VzbHkgb3IgYXN5bmNocm9ub3VzbHkuCi0gKiAgICAgIGV4cGVjdChyZXNv
bHZlZFZhbHVlKS50b0JlVW5kZWZpbmVkKCk7Ci0gKiAKLSAqICAgICAgLy8gUHJvcGFnYXRlIHBy
b21pc2UgcmVzb2x1dGlvbiB0byAndGhlbicgZnVuY3Rpb25zIHVzaW5nICRhcHBseSgpLgotICog
ICAgICAkcm9vdFNjb3BlLiRhcHBseSgpOwotICogICAgICBleHBlY3QocmVzb2x2ZWRWYWx1ZSku
dG9FcXVhbCgxMjMpOwotICogICAgfSk7Ci0gKiAgPC9wcmU+Ci0gKi8KLWZ1bmN0aW9uICRRUHJv
dmlkZXIoKSB7Ci0KLSAgdGhpcy4kZ2V0ID0gWyckcm9vdFNjb3BlJywgJyRleGNlcHRpb25IYW5k
bGVyJywgZnVuY3Rpb24oJHJvb3RTY29wZSwgJGV4Y2VwdGlvbkhhbmRsZXIpIHsKLSAgICByZXR1
cm4gcUZhY3RvcnkoZnVuY3Rpb24oY2FsbGJhY2spIHsKLSAgICAgICRyb290U2NvcGUuJGV2YWxB
c3luYyhjYWxsYmFjayk7Ci0gICAgfSwgJGV4Y2VwdGlvbkhhbmRsZXIpOwotICB9XTsKLX0KLQot
Ci0vKioKLSAqIENvbnN0cnVjdHMgYSBwcm9taXNlIG1hbmFnZXIuCi0gKgotICogQHBhcmFtIHtm
dW5jdGlvbihmdW5jdGlvbil9IG5leHRUaWNrIEZ1bmN0aW9uIGZvciBleGVjdXRpbmcgZnVuY3Rp
b25zIGluIHRoZSBuZXh0IHR1cm4uCi0gKiBAcGFyYW0ge2Z1bmN0aW9uKC4uLiopfSBleGNlcHRp
b25IYW5kbGVyIEZ1bmN0aW9uIGludG8gd2hpY2ggdW5leHBlY3RlZCBleGNlcHRpb25zIGFyZSBw
YXNzZWQgZm9yCi0gKiAgICAgZGVidWdnaW5nIHB1cnBvc2VzLgotICogQHJldHVybnMge29iamVj
dH0gUHJvbWlzZSBtYW5hZ2VyLgotICovCi1mdW5jdGlvbiBxRmFjdG9yeShuZXh0VGljaywgZXhj
ZXB0aW9uSGFuZGxlcikgewotCi0gIC8qKgotICAgKiBAbmdkb2MKLSAgICogQG5hbWUgbmcuJHEj
ZGVmZXIKLSAgICogQG1ldGhvZE9mIG5nLiRxCi0gICAqIEBkZXNjcmlwdGlvbgotICAgKiBDcmVh
dGVzIGEgYERlZmVycmVkYCBvYmplY3Qgd2hpY2ggcmVwcmVzZW50cyBhIHRhc2sgd2hpY2ggd2ls
bCBmaW5pc2ggaW4gdGhlIGZ1dHVyZS4KLSAgICoKLSAgICogQHJldHVybnMge0RlZmVycmVkfSBS
ZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIGRlZmVycmVkLgotICAgKi8KLSAgdmFyIGRlZmVyID0g
ZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHBlbmRpbmcgPSBbXSwKLSAgICAgICAgdmFsdWUsIGRlZmVy
cmVkOwotCi0gICAgZGVmZXJyZWQgPSB7Ci0KLSAgICAgIHJlc29sdmU6IGZ1bmN0aW9uKHZhbCkg
ewotICAgICAgICBpZiAocGVuZGluZykgewotICAgICAgICAgIHZhciBjYWxsYmFja3MgPSBwZW5k
aW5nOwotICAgICAgICAgIHBlbmRpbmcgPSB1bmRlZmluZWQ7Ci0gICAgICAgICAgdmFsdWUgPSBy
ZWYodmFsKTsKLQotICAgICAgICAgIGlmIChjYWxsYmFja3MubGVuZ3RoKSB7Ci0gICAgICAgICAg
ICBuZXh0VGljayhmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrOwotICAg
ICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBjYWxsYmFja3MubGVuZ3RoOyBpIDwgaWk7
IGkrKykgewotICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2tzW2ldOwotICAgICAg
ICAgICAgICAgIHZhbHVlLnRoZW4oY2FsbGJhY2tbMF0sIGNhbGxiYWNrWzFdKTsKLSAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9
LAotCi0KLSAgICAgIHJlamVjdDogZnVuY3Rpb24ocmVhc29uKSB7Ci0gICAgICAgIGRlZmVycmVk
LnJlc29sdmUocmVqZWN0KHJlYXNvbikpOwotICAgICAgfSwKLQotCi0gICAgICBwcm9taXNlOiB7
Ci0gICAgICAgIHRoZW46IGZ1bmN0aW9uKGNhbGxiYWNrLCBlcnJiYWNrKSB7Ci0gICAgICAgICAg
dmFyIHJlc3VsdCA9IGRlZmVyKCk7Ci0KLSAgICAgICAgICB2YXIgd3JhcHBlZENhbGxiYWNrID0g
ZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgIHJlc3Vs
dC5yZXNvbHZlKChjYWxsYmFjayB8fCBkZWZhdWx0Q2FsbGJhY2spKHZhbHVlKSk7Ci0gICAgICAg
ICAgICB9IGNhdGNoKGUpIHsKLSAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlcihlKTsKLSAg
ICAgICAgICAgICAgcmVzdWx0LnJlamVjdChlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9
OwotCi0gICAgICAgICAgdmFyIHdyYXBwZWRFcnJiYWNrID0gZnVuY3Rpb24ocmVhc29uKSB7Ci0g
ICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICByZXN1bHQucmVzb2x2ZSgoZXJyYmFjayB8
fCBkZWZhdWx0RXJyYmFjaykocmVhc29uKSk7Ci0gICAgICAgICAgICB9IGNhdGNoKGUpIHsKLSAg
ICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlcihlKTsKLSAgICAgICAgICAgICAgcmVzdWx0LnJl
amVjdChlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9OwotCi0gICAgICAgICAgaWYgKHBl
bmRpbmcpIHsKLSAgICAgICAgICAgIHBlbmRpbmcucHVzaChbd3JhcHBlZENhbGxiYWNrLCB3cmFw
cGVkRXJyYmFja10pOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2YWx1ZS50aGVu
KHdyYXBwZWRDYWxsYmFjaywgd3JhcHBlZEVycmJhY2spOwotICAgICAgICAgIH0KLQotICAgICAg
ICAgIHJldHVybiByZXN1bHQucHJvbWlzZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH07Ci0K
LSAgICByZXR1cm4gZGVmZXJyZWQ7Ci0gIH07Ci0KLQotICB2YXIgcmVmID0gZnVuY3Rpb24odmFs
dWUpIHsKLSAgICBpZiAodmFsdWUgJiYgdmFsdWUudGhlbikgcmV0dXJuIHZhbHVlOwotICAgIHJl
dHVybiB7Ci0gICAgICB0aGVuOiBmdW5jdGlvbihjYWxsYmFjaykgewotICAgICAgICB2YXIgcmVz
dWx0ID0gZGVmZXIoKTsKLSAgICAgICAgbmV4dFRpY2soZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
cmVzdWx0LnJlc29sdmUoY2FsbGJhY2sodmFsdWUpKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJl
dHVybiByZXN1bHQucHJvbWlzZTsKLSAgICAgIH0KLSAgICB9OwotICB9OwotCi0KLSAgLyoqCi0g
ICAqIEBuZ2RvYwotICAgKiBAbmFtZSBuZy4kcSNyZWplY3QKLSAgICogQG1ldGhvZE9mIG5nLiRx
Ci0gICAqIEBkZXNjcmlwdGlvbgotICAgKiBDcmVhdGVzIGEgcHJvbWlzZSB0aGF0IGlzIHJlc29s
dmVkIGFzIHJlamVjdGVkIHdpdGggdGhlIHNwZWNpZmllZCBgcmVhc29uYC4gVGhpcyBhcGkgc2hv
dWxkIGJlCi0gICAqIHVzZWQgdG8gZm9yd2FyZCByZWplY3Rpb24gaW4gYSBjaGFpbiBvZiBwcm9t
aXNlcy4gSWYgeW91IGFyZSBkZWFsaW5nIHdpdGggdGhlIGxhc3QgcHJvbWlzZSBpbgotICAgKiBh
IHByb21pc2UgY2hhaW4sIHlvdSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGl0LgotICAgKgot
ICAgKiBXaGVuIGNvbXBhcmluZyBkZWZlcnJlZHMvcHJvbWlzZXMgdG8gdGhlIGZhbWlsaWFyIGJl
aGF2aW9yIG9mIHRyeS9jYXRjaC90aHJvdywgdGhpbmsgb2YKLSAgICogYHJlamVjdGAgYXMgdGhl
IGB0aHJvd2Aga2V5d29yZCBpbiBKYXZhU2NyaXB0LiBUaGlzIGFsc28gbWVhbnMgdGhhdCBpZiB5
b3UgImNhdGNoIiBhbiBlcnJvciB2aWEKLSAgICogYSBwcm9taXNlIGVycm9yIGNhbGxiYWNrIGFu
ZCB5b3Ugd2FudCB0byBmb3J3YXJkIHRoZSBlcnJvciB0byB0aGUgcHJvbWlzZSBkZXJpdmVkIGZy
b20gdGhlCi0gICAqIGN1cnJlbnQgcHJvbWlzZSwgeW91IGhhdmUgdG8gInJldGhyb3ciIHRoZSBl
cnJvciBieSByZXR1cm5pbmcgYSByZWplY3Rpb24gY29uc3RydWN0ZWQgdmlhCi0gICAqIGByZWpl
Y3RgLgotICAgKgotICAgKiA8cHJlPgotICAgKiAgIHByb21pc2VCID0gcHJvbWlzZUEudGhlbihm
dW5jdGlvbihyZXN1bHQpIHsKLSAgICogICAgIC8vIHN1Y2Nlc3M6IGRvIHNvbWV0aGluZyBhbmQg
cmVzb2x2ZSBwcm9taXNlQgotICAgKiAgICAgLy8gICAgICAgICAgd2l0aCB0aGUgb2xkIG9yIGEg
bmV3IHJlc3VsdAotICAgKiAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICogICB9LCBmdW5jdGlvbihy
ZWFzb24pIHsKLSAgICogICAgIC8vIGVycm9yOiBoYW5kbGUgdGhlIGVycm9yIGlmIHBvc3NpYmxl
IGFuZAotICAgKiAgICAgLy8gICAgICAgIHJlc29sdmUgcHJvbWlzZUIgd2l0aCBuZXdQcm9taXNl
T3JWYWx1ZSwKLSAgICogICAgIC8vICAgICAgICBvdGhlcndpc2UgZm9yd2FyZCB0aGUgcmVqZWN0
aW9uIHRvIHByb21pc2VCCi0gICAqICAgICBpZiAoY2FuSGFuZGxlKHJlYXNvbikpIHsKLSAgICog
ICAgICAvLyBoYW5kbGUgdGhlIGVycm9yIGFuZCByZWNvdmVyCi0gICAqICAgICAgcmV0dXJuIG5l
d1Byb21pc2VPclZhbHVlOwotICAgKiAgICAgfQotICAgKiAgICAgcmV0dXJuICRxLnJlamVjdChy
ZWFzb24pOwotICAgKiAgIH0pOwotICAgKiA8L3ByZT4KLSAgICoKLSAgICogQHBhcmFtIHsqfSBy
ZWFzb24gQ29uc3RhbnQsIG1lc3NhZ2UsIGV4Y2VwdGlvbiBvciBhbiBvYmplY3QgcmVwcmVzZW50
aW5nIHRoZSByZWplY3Rpb24gcmVhc29uLgotICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gUmV0dXJu
cyBhIHByb21pc2UgdGhhdCB3YXMgYWxyZWFkeSByZXNvbHZlZCBhcyByZWplY3RlZCB3aXRoIHRo
ZSBgcmVhc29uYC4KLSAgICovCi0gIHZhciByZWplY3QgPSBmdW5jdGlvbihyZWFzb24pIHsKLSAg
ICByZXR1cm4gewotICAgICAgdGhlbjogZnVuY3Rpb24oY2FsbGJhY2ssIGVycmJhY2spIHsKLSAg
ICAgICAgdmFyIHJlc3VsdCA9IGRlZmVyKCk7Ci0gICAgICAgIG5leHRUaWNrKGZ1bmN0aW9uKCkg
ewotICAgICAgICAgIHJlc3VsdC5yZXNvbHZlKChlcnJiYWNrIHx8IGRlZmF1bHRFcnJiYWNrKShy
ZWFzb24pKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQucHJvbWlzZTsKLSAg
ICAgIH0KLSAgICB9OwotICB9OwotCi0KLSAgLyoqCi0gICAqIEBuZ2RvYwotICAgKiBAbmFtZSBu
Zy4kcSN3aGVuCi0gICAqIEBtZXRob2RPZiBuZy4kcQotICAgKiBAZGVzY3JpcHRpb24KLSAgICog
V3JhcHMgYW4gb2JqZWN0IHRoYXQgbWlnaHQgYmUgYSB2YWx1ZSBvciBhICgzcmQgcGFydHkpIHRo
ZW4tYWJsZSBwcm9taXNlIGludG8gYSAkcSBwcm9taXNlLgotICAgKiBUaGlzIGlzIHVzZWZ1bCB3
aGVuIHlvdSBhcmUgZGVhbGluZyB3aXRoIGFuIG9iamVjdCB0aGF0IG1pZ2h0IG9yIG1pZ2h0IG5v
dCBiZSBhIHByb21pc2UsIG9yIGlmCi0gICAqIHRoZSBwcm9taXNlIGNvbWVzIGZyb20gYSBzb3Vy
Y2UgdGhhdCBjYW4ndCBiZSB0cnVzdGVkLgotICAgKgotICAgKiBAcGFyYW0geyp9IHZhbHVlIFZh
bHVlIG9yIGEgcHJvbWlzZQotICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gUmV0dXJucyBhIHByb21p
c2Ugb2YgdGhlIHBhc3NlZCB2YWx1ZSBvciBwcm9taXNlCi0gICAqLwotICB2YXIgd2hlbiA9IGZ1
bmN0aW9uKHZhbHVlLCBjYWxsYmFjaywgZXJyYmFjaykgewotICAgIHZhciByZXN1bHQgPSBkZWZl
cigpLAotICAgICAgICBkb25lOwotCi0gICAgdmFyIHdyYXBwZWRDYWxsYmFjayA9IGZ1bmN0aW9u
KHZhbHVlKSB7Ci0gICAgICB0cnkgewotICAgICAgICByZXR1cm4gKGNhbGxiYWNrIHx8IGRlZmF1
bHRDYWxsYmFjaykodmFsdWUpOwotICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICBleGNlcHRp
b25IYW5kbGVyKGUpOwotICAgICAgICByZXR1cm4gcmVqZWN0KGUpOwotICAgICAgfQotICAgIH07
Ci0KLSAgICB2YXIgd3JhcHBlZEVycmJhY2sgPSBmdW5jdGlvbihyZWFzb24pIHsKLSAgICAgIHRy
eSB7Ci0gICAgICAgIHJldHVybiAoZXJyYmFjayB8fCBkZWZhdWx0RXJyYmFjaykocmVhc29uKTsK
LSAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgZXhjZXB0aW9uSGFuZGxlcihlKTsKLSAgICAg
ICAgcmV0dXJuIHJlamVjdChlKTsKLSAgICAgIH0KLSAgICB9OwotCi0gICAgbmV4dFRpY2soZnVu
Y3Rpb24oKSB7Ci0gICAgICByZWYodmFsdWUpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHsKLSAgICAg
ICAgaWYgKGRvbmUpIHJldHVybjsKLSAgICAgICAgZG9uZSA9IHRydWU7Ci0gICAgICAgIHJlc3Vs
dC5yZXNvbHZlKHJlZih2YWx1ZSkudGhlbih3cmFwcGVkQ2FsbGJhY2ssIHdyYXBwZWRFcnJiYWNr
KSk7Ci0gICAgICB9LCBmdW5jdGlvbihyZWFzb24pIHsKLSAgICAgICAgaWYgKGRvbmUpIHJldHVy
bjsKLSAgICAgICAgZG9uZSA9IHRydWU7Ci0gICAgICAgIHJlc3VsdC5yZXNvbHZlKHdyYXBwZWRF
cnJiYWNrKHJlYXNvbikpOwotICAgICAgfSk7Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0
LnByb21pc2U7Ci0gIH07Ci0KLQotICBmdW5jdGlvbiBkZWZhdWx0Q2FsbGJhY2sodmFsdWUpIHsK
LSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLQotCi0gIGZ1bmN0aW9uIGRlZmF1bHRFcnJiYWNrKHJl
YXNvbikgewotICAgIHJldHVybiByZWplY3QocmVhc29uKTsKLSAgfQotCi0KLSAgLyoqCi0gICAq
IEBuZ2RvYwotICAgKiBAbmFtZSBuZy4kcSNhbGwKLSAgICogQG1ldGhvZE9mIG5nLiRxCi0gICAq
IEBkZXNjcmlwdGlvbgotICAgKiBDb21iaW5lcyBtdWx0aXBsZSBwcm9taXNlcyBpbnRvIGEgc2lu
Z2xlIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aGVuIGFsbCBvZiB0aGUgaW5wdXQKLSAgICog
cHJvbWlzZXMgYXJlIHJlc29sdmVkLgotICAgKgotICAgKiBAcGFyYW0ge0FycmF5LjxQcm9taXNl
Pn0gcHJvbWlzZXMgQW4gYXJyYXkgb2YgcHJvbWlzZXMuCi0gICAqIEByZXR1cm5zIHtQcm9taXNl
fSBSZXR1cm5zIGEgc2luZ2xlIHByb21pc2UgdGhhdCB3aWxsIGJlIHJlc29sdmVkIHdpdGggYW4g
YXJyYXkgb2YgdmFsdWVzLAotICAgKiAgIGVhY2ggdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUg
cHJvbWlzZSBhdCB0aGUgc2FtZSBpbmRleCBpbiB0aGUgYHByb21pc2VzYCBhcnJheS4gSWYgYW55
IG9mCi0gICAqICAgdGhlIHByb21pc2VzIGlzIHJlc29sdmVkIHdpdGggYSByZWplY3Rpb24sIHRo
aXMgcmVzdWx0aW5nIHByb21pc2Ugd2lsbCBiZSByZXNvbHZlZCB3aXRoIHRoZQotICAgKiAgIHNh
bWUgcmVqZWN0aW9uLgotICAgKi8KLSAgZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7Ci0gICAgdmFy
IGRlZmVycmVkID0gZGVmZXIoKSwKLSAgICAgICAgY291bnRlciA9IHByb21pc2VzLmxlbmd0aCwK
LSAgICAgICAgcmVzdWx0cyA9IFtdOwotCi0gICAgaWYgKGNvdW50ZXIpIHsKLSAgICAgIGZvckVh
Y2gocHJvbWlzZXMsIGZ1bmN0aW9uKHByb21pc2UsIGluZGV4KSB7Ci0gICAgICAgIHJlZihwcm9t
aXNlKS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICAgICAgaWYgKGluZGV4IGluIHJlc3Vs
dHMpIHJldHVybjsKLSAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHZhbHVlOwotICAgICAgICAg
IGlmICghKC0tY291bnRlcikpIGRlZmVycmVkLnJlc29sdmUocmVzdWx0cyk7Ci0gICAgICAgIH0s
IGZ1bmN0aW9uKHJlYXNvbikgewotICAgICAgICAgIGlmIChpbmRleCBpbiByZXN1bHRzKSByZXR1
cm47Ci0gICAgICAgICAgZGVmZXJyZWQucmVqZWN0KHJlYXNvbik7Ci0gICAgICAgIH0pOwotICAg
ICAgfSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGRlZmVycmVkLnJlc29sdmUocmVzdWx0cyk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGRlZmVycmVkLnByb21pc2U7Ci0gIH0KLQotICByZXR1cm4gewot
ICAgIGRlZmVyOiBkZWZlciwKLSAgICByZWplY3Q6IHJlamVjdCwKLSAgICB3aGVuOiB3aGVuLAot
ICAgIGFsbDogYWxsCi0gIH07Ci19Ci0KLS8qKgotICogQG5nZG9jIG9iamVjdAotICogQG5hbWUg
bmcuJHJvdXRlUHJvdmlkZXIKLSAqIEBmdW5jdGlvbgotICoKLSAqIEBkZXNjcmlwdGlvbgotICoK
LSAqIFVzZWQgZm9yIGNvbmZpZ3VyaW5nIHJvdXRlcy4gU2VlIHtAbGluayBuZy4kcm91dGUgJHJv
dXRlfSBmb3IgYW4gZXhhbXBsZS4KLSAqLwotZnVuY3Rpb24gJFJvdXRlUHJvdmlkZXIoKXsKLSAg
dmFyIHJvdXRlcyA9IHt9OwotCi0gIC8qKgotICAgKiBAbmdkb2MgbWV0aG9kCi0gICAqIEBuYW1l
IG5nLiRyb3V0ZVByb3ZpZGVyI3doZW4KLSAgICogQG1ldGhvZE9mIG5nLiRyb3V0ZVByb3ZpZGVy
Ci0gICAqCi0gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFJvdXRlIHBhdGggKG1hdGNoZWQgYWdh
aW5zdCBgJGxvY2F0aW9uLnBhdGhgKS4gSWYgYCRsb2NhdGlvbi5wYXRoYAotICAgKiAgICBjb250
YWlucyByZWR1bmRhbnQgdHJhaWxpbmcgc2xhc2ggb3IgaXMgbWlzc2luZyBvbmUsIHRoZSByb3V0
ZSB3aWxsIHN0aWxsIG1hdGNoIGFuZCB0aGUKLSAgICogICAgYCRsb2NhdGlvbi5wYXRoYCB3aWxs
IGJlIHVwZGF0ZWQgdG8gYWRkIG9yIGRyb3AgdGhlIHRyYWlsaW5nIHNsYXNoIHRvIGV4YWN0bHkg
bWF0Y2ggdGhlCi0gICAqICAgIHJvdXRlIGRlZmluaXRpb24uCi0gICAqCi0gICAqICAgIGBwYXRo
YCBjYW4gY29udGFpbiBuYW1lZCBncm91cHMgc3RhcnRpbmcgd2l0aCBhIGNvbG9uIChgOm5hbWVg
KS4gQWxsIGNoYXJhY3RlcnMgdXAgdG8gdGhlCi0gICAqICAgIG5leHQgc2xhc2ggYXJlIG1hdGNo
ZWQgYW5kIHN0b3JlZCBpbiBgJHJvdXRlUGFyYW1zYCB1bmRlciB0aGUgZ2l2ZW4gYG5hbWVgIHdo
ZW4gdGhlIHJvdXRlCi0gICAqICAgIG1hdGNoZXMuCi0gICAqCi0gICAqIEBwYXJhbSB7T2JqZWN0
fSByb3V0ZSBNYXBwaW5nIGluZm9ybWF0aW9uIHRvIGJlIGFzc2lnbmVkIHRvIGAkcm91dGUuY3Vy
cmVudGAgb24gcm91dGUKLSAgICogICAgbWF0Y2guCi0gICAqCi0gICAqICAgIE9iamVjdCBwcm9w
ZXJ0aWVzOgotICAgKgotICAgKiAgICAtIGBjb250cm9sbGVyYCDigJMgYHsoc3RyaW5nfGZ1bmN0
aW9uKCk9fWAg4oCTIENvbnRyb2xsZXIgZm4gdGhhdCBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRo
IG5ld2x5Ci0gICAqICAgICAgY3JlYXRlZCBzY29wZSBvciB0aGUgbmFtZSBvZiBhIHtAbGluayBh
bmd1bGFyLk1vZHVsZSNjb250cm9sbGVyIHJlZ2lzdGVyZWQgY29udHJvbGxlcn0KLSAgICogICAg
ICBpZiBwYXNzZWQgYXMgYSBzdHJpbmcuCi0gICAqICAgIC0gYHRlbXBsYXRlYCDigJMgYHtzdHJp
bmc9fWAg4oCTICBodG1sIHRlbXBsYXRlIGFzIGEgc3RyaW5nIHRoYXQgc2hvdWxkIGJlIHVzZWQg
YnkKLSAgICogICAgICB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nVmlldyBuZ1ZpZXd9IG9yCi0gICAq
ICAgICAge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0luY2x1ZGUgbmdJbmNsdWRlfSBkaXJlY3RpdmVz
LgotICAgKiAgICAgIHRoaXMgcHJvcGVydHkgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGB0ZW1wbGF0
ZVVybGAuCi0gICAqICAgIC0gYHRlbXBsYXRlVXJsYCDigJMgYHtzdHJpbmc9fWAg4oCTIHBhdGgg
dG8gYW4gaHRtbCB0ZW1wbGF0ZSB0aGF0IHNob3VsZCBiZSB1c2VkIGJ5Ci0gICAqICAgICAge0Bs
aW5rIG5nLmRpcmVjdGl2ZTpuZ1ZpZXcgbmdWaWV3fS4KLSAgICogICAgLSBgcmVzb2x2ZWAgLSBg
e09iamVjdC48c3RyaW5nLCBmdW5jdGlvbj49fWAgLSBBbiBvcHRpb25hbCBtYXAgb2YgZGVwZW5k
ZW5jaWVzIHdoaWNoIHNob3VsZAotICAgKiAgICAgIGJlIGluamVjdGVkIGludG8gdGhlIGNvbnRy
b2xsZXIuIElmIGFueSBvZiB0aGVzZSBkZXBlbmRlbmNpZXMgYXJlIHByb21pc2VzLCB0aGV5IHdp
bGwgYmUKLSAgICogICAgICByZXNvbHZlZCBhbmQgY29udmVydGVkIHRvIGEgdmFsdWUgYmVmb3Jl
IHRoZSBjb250cm9sbGVyIGlzIGluc3RhbnRpYXRlZCBhbmQgdGhlCi0gICAqICAgICAgYCRyb3V0
ZUNoYW5nZVN1Y2Nlc3NgIGV2ZW50IGlzIGZpcmVkLiBUaGUgbWFwIG9iamVjdCBpczoKLSAgICoK
LSAgICogICAgICAtIGBrZXlgIOKAkyBge3N0cmluZ31gOiBhIG5hbWUgb2YgYSBkZXBlbmRlbmN5
IHRvIGJlIGluamVjdGVkIGludG8gdGhlIGNvbnRyb2xsZXIuCi0gICAqICAgICAgLSBgZmFjdG9y
eWAgLSBge3N0cmluZ3xmdW5jdGlvbn1gOiBJZiBgc3RyaW5nYCB0aGVuIGl0IGlzIGFuIGFsaWFz
IGZvciBhIHNlcnZpY2UuCi0gICAqICAgICAgICBPdGhlcndpc2UgaWYgZnVuY3Rpb24sIHRoZW4g
aXQgaXMge0BsaW5rIGFwaS9BVVRPLiRpbmplY3RvciNpbnZva2UgaW5qZWN0ZWR9Ci0gICAqICAg
ICAgICBhbmQgdGhlIHJldHVybiB2YWx1ZSBpcyB0cmVhdGVkIGFzIHRoZSBkZXBlbmRlbmN5LiBJ
ZiB0aGUgcmVzdWx0IGlzIGEgcHJvbWlzZSwgaXQgaXMgcmVzb2x2ZWQKLSAgICogICAgICAgIGJl
Zm9yZSBpdHMgdmFsdWUgaXMgaW5qZWN0ZWQgaW50byB0aGUgY29udHJvbGxlci4KLSAgICoKLSAg
ICogICAgLSBgcmVkaXJlY3RUb2Ag4oCTIHsoc3RyaW5nfGZ1bmN0aW9uKCkpPX0g4oCTIHZhbHVl
IHRvIHVwZGF0ZQotICAgKiAgICAgIHtAbGluayBuZy4kbG9jYXRpb24gJGxvY2F0aW9ufSBwYXRo
IHdpdGggYW5kIHRyaWdnZXIgcm91dGUgcmVkaXJlY3Rpb24uCi0gICAqCi0gICAqICAgICAgSWYg
YHJlZGlyZWN0VG9gIGlzIGEgZnVuY3Rpb24sIGl0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGZv
bGxvd2luZyBwYXJhbWV0ZXJzOgotICAgKgotICAgKiAgICAgIC0gYHtPYmplY3QuPHN0cmluZz59
YCAtIHJvdXRlIHBhcmFtZXRlcnMgZXh0cmFjdGVkIGZyb20gdGhlIGN1cnJlbnQKLSAgICogICAg
ICAgIGAkbG9jYXRpb24ucGF0aCgpYCBieSBhcHBseWluZyB0aGUgY3VycmVudCByb3V0ZSB0ZW1w
bGF0ZVVybC4KLSAgICogICAgICAtIGB7c3RyaW5nfWAgLSBjdXJyZW50IGAkbG9jYXRpb24ucGF0
aCgpYAotICAgKiAgICAgIC0gYHtPYmplY3R9YCAtIGN1cnJlbnQgYCRsb2NhdGlvbi5zZWFyY2go
KWAKLSAgICoKLSAgICogICAgICBUaGUgY3VzdG9tIGByZWRpcmVjdFRvYCBmdW5jdGlvbiBpcyBl
eHBlY3RlZCB0byByZXR1cm4gYSBzdHJpbmcgd2hpY2ggd2lsbCBiZSB1c2VkCi0gICAqICAgICAg
dG8gdXBkYXRlIGAkbG9jYXRpb24ucGF0aCgpYCBhbmQgYCRsb2NhdGlvbi5zZWFyY2goKWAuCi0g
ICAqCi0gICAqICAgIC0gYFtyZWxvYWRPblNlYXJjaD10cnVlXWAgLSB7Ym9vbGVhbj19IC0gcmVs
b2FkIHJvdXRlIHdoZW4gb25seSAkbG9jYXRpb24uc2VhcmNoKCkKLSAgICogICAgY2hhbmdlcy4K
LSAgICoKLSAgICogICAgICBJZiB0aGUgb3B0aW9uIGlzIHNldCB0byBgZmFsc2VgIGFuZCB1cmwg
aW4gdGhlIGJyb3dzZXIgY2hhbmdlcywgdGhlbgotICAgKiAgICAgIGAkcm91dGVVcGRhdGVgIGV2
ZW50IGlzIGJyb2FkY2FzdGVkIG9uIHRoZSByb290IHNjb3BlLgotICAgKgotICAgKiBAcmV0dXJu
cyB7T2JqZWN0fSBzZWxmCi0gICAqCi0gICAqIEBkZXNjcmlwdGlvbgotICAgKiBBZGRzIGEgbmV3
IHJvdXRlIGRlZmluaXRpb24gdG8gdGhlIGAkcm91dGVgIHNlcnZpY2UuCi0gICAqLwotICB0aGlz
LndoZW4gPSBmdW5jdGlvbihwYXRoLCByb3V0ZSkgewotICAgIHJvdXRlc1twYXRoXSA9IGV4dGVu
ZCh7cmVsb2FkT25TZWFyY2g6IHRydWV9LCByb3V0ZSk7Ci0KLSAgICAvLyBjcmVhdGUgcmVkaXJl
Y3Rpb24gZm9yIHRyYWlsaW5nIHNsYXNoZXMKLSAgICBpZiAocGF0aCkgewotICAgICAgdmFyIHJl
ZGlyZWN0UGF0aCA9IChwYXRoW3BhdGgubGVuZ3RoLTFdID09ICcvJykKLSAgICAgICAgICA/IHBh
dGguc3Vic3RyKDAsIHBhdGgubGVuZ3RoLTEpCi0gICAgICAgICAgOiBwYXRoICsnLyc7Ci0KLSAg
ICAgIHJvdXRlc1tyZWRpcmVjdFBhdGhdID0ge3JlZGlyZWN0VG86IHBhdGh9OwotICAgIH0KLQot
ICAgIHJldHVybiB0aGlzOwotICB9OwotCi0gIC8qKgotICAgKiBAbmdkb2MgbWV0aG9kCi0gICAq
IEBuYW1lIG5nLiRyb3V0ZVByb3ZpZGVyI290aGVyd2lzZQotICAgKiBAbWV0aG9kT2YgbmcuJHJv
dXRlUHJvdmlkZXIKLSAgICoKLSAgICogQGRlc2NyaXB0aW9uCi0gICAqIFNldHMgcm91dGUgZGVm
aW5pdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCBvbiByb3V0ZSBjaGFuZ2Ugd2hlbiBubyBvdGhlciBy
b3V0ZSBkZWZpbml0aW9uCi0gICAqIGlzIG1hdGNoZWQuCi0gICAqCi0gICAqIEBwYXJhbSB7T2Jq
ZWN0fSBwYXJhbXMgTWFwcGluZyBpbmZvcm1hdGlvbiB0byBiZSBhc3NpZ25lZCB0byBgJHJvdXRl
LmN1cnJlbnRgLgotICAgKiBAcmV0dXJucyB7T2JqZWN0fSBzZWxmCi0gICAqLwotICB0aGlzLm90
aGVyd2lzZSA9IGZ1bmN0aW9uKHBhcmFtcykgewotICAgIHRoaXMud2hlbihudWxsLCBwYXJhbXMp
OwotICAgIHJldHVybiB0aGlzOwotICB9OwotCi0KLSAgdGhpcy4kZ2V0ID0gWyckcm9vdFNjb3Bl
JywgJyRsb2NhdGlvbicsICckcm91dGVQYXJhbXMnLCAnJHEnLCAnJGluamVjdG9yJywgJyRodHRw
JywgJyR0ZW1wbGF0ZUNhY2hlJywKLSAgICAgIGZ1bmN0aW9uKCAkcm9vdFNjb3BlLCAgICRsb2Nh
dGlvbiwgICAkcm91dGVQYXJhbXMsICAgJHEsICAgJGluamVjdG9yLCAgICRodHRwLCAgICR0ZW1w
bGF0ZUNhY2hlKSB7Ci0KLSAgICAvKioKLSAgICAgKiBAbmdkb2Mgb2JqZWN0Ci0gICAgICogQG5h
bWUgbmcuJHJvdXRlCi0gICAgICogQHJlcXVpcmVzICRsb2NhdGlvbgotICAgICAqIEByZXF1aXJl
cyAkcm91dGVQYXJhbXMKLSAgICAgKgotICAgICAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjdXJyZW50
IFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCByb3V0ZSBkZWZpbml0aW9uLgotICAgICAqIFRoZSBy
b3V0ZSBkZWZpbml0aW9uIGNvbnRhaW5zOgotICAgICAqCi0gICAgICogICAtIGBjb250cm9sbGVy
YDogVGhlIGNvbnRyb2xsZXIgY29uc3RydWN0b3IgYXMgZGVmaW5lIGluIHJvdXRlIGRlZmluaXRp
b24uCi0gICAgICogICAtIGBsb2NhbHNgOiBBIG1hcCBvZiBsb2NhbHMgd2hpY2ggaXMgdXNlZCBi
eSB7QGxpbmsgbmcuJGNvbnRyb2xsZXIgJGNvbnRyb2xsZXJ9IHNlcnZpY2UgZm9yCi0gICAgICog
ICAgIGNvbnRyb2xsZXIgaW5zdGFudGlhdGlvbi4gVGhlIGBsb2NhbHNgIGNvbnRhaW4KLSAgICAg
KiAgICAgdGhlIHJlc29sdmVkIHZhbHVlcyBvZiB0aGUgYHJlc29sdmVgIG1hcC4gQWRkaXRpb25h
bGx5IHRoZSBgbG9jYWxzYCBhbHNvIGNvbnRhaW46Ci0gICAgICoKLSAgICAgKiAgICAgLSBgJHNj
b3BlYCAtIFRoZSBjdXJyZW50IHJvdXRlIHNjb3BlLgotICAgICAqICAgICAtIGAkdGVtcGxhdGVg
IC0gVGhlIGN1cnJlbnQgcm91dGUgdGVtcGxhdGUgSFRNTC4KLSAgICAgKgotICAgICAqIEBwcm9w
ZXJ0eSB7QXJyYXkuPE9iamVjdD59IHJvdXRlcyBBcnJheSBvZiBhbGwgY29uZmlndXJlZCByb3V0
ZXMuCi0gICAgICoKLSAgICAgKiBAZGVzY3JpcHRpb24KLSAgICAgKiBJcyB1c2VkIGZvciBkZWVw
LWxpbmtpbmcgVVJMcyB0byBjb250cm9sbGVycyBhbmQgdmlld3MgKEhUTUwgcGFydGlhbHMpLgot
ICAgICAqIEl0IHdhdGNoZXMgYCRsb2NhdGlvbi51cmwoKWAgYW5kIHRyaWVzIHRvIG1hcCB0aGUg
cGF0aCB0byBhbiBleGlzdGluZyByb3V0ZSBkZWZpbml0aW9uLgotICAgICAqCi0gICAgICogWW91
IGNhbiBkZWZpbmUgcm91dGVzIHRocm91Z2gge0BsaW5rIG5nLiRyb3V0ZVByb3ZpZGVyICRyb3V0
ZVByb3ZpZGVyfSdzIEFQSS4KLSAgICAgKgotICAgICAqIFRoZSBgJHJvdXRlYCBzZXJ2aWNlIGlz
IHR5cGljYWxseSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGgge0BsaW5rIG5nLmRpcmVjdGl2ZTpu
Z1ZpZXcgbmdWaWV3fQotICAgICAqIGRpcmVjdGl2ZSBhbmQgdGhlIHtAbGluayBuZy4kcm91dGVQ
YXJhbXMgJHJvdXRlUGFyYW1zfSBzZXJ2aWNlLgotICAgICAqCi0gICAgICogQGV4YW1wbGUKLSAg
ICAgICBUaGlzIGV4YW1wbGUgc2hvd3MgaG93IGNoYW5naW5nIHRoZSBVUkwgaGFzaCBjYXVzZXMg
dGhlIGAkcm91dGVgIHRvIG1hdGNoIGEgcm91dGUgYWdhaW5zdCB0aGUKLSAgICAgICBVUkwsIGFu
ZCB0aGUgYG5nVmlld2AgcHVsbHMgaW4gdGhlIHBhcnRpYWwuCi0KLSAgICAgICBOb3RlIHRoYXQg
dGhpcyBleGFtcGxlIGlzIHVzaW5nIHtAbGluayBuZy5kaXJlY3RpdmU6c2NyaXB0IGlubGluZWQg
dGVtcGxhdGVzfQotICAgICAgIHRvIGdldCBpdCB3b3JraW5nIG9uIGpzZmlkZGxlIGFzIHdlbGwu
Ci0KLSAgICAgPGV4YW1wbGUgbW9kdWxlPSJuZ1ZpZXciPgotICAgICAgIDxmaWxlIG5hbWU9Imlu
ZGV4Lmh0bWwiPgotICAgICAgICAgPGRpdiBuZy1jb250cm9sbGVyPSJNYWluQ250bCI+Ci0gICAg
ICAgICAgIENob29zZToKLSAgICAgICAgICAgPGEgaHJlZj0iQm9vay9Nb2J5Ij5Nb2J5PC9hPiB8
Ci0gICAgICAgICAgIDxhIGhyZWY9IkJvb2svTW9ieS9jaC8xIj5Nb2J5OiBDaDE8L2E+IHwKLSAg
ICAgICAgICAgPGEgaHJlZj0iQm9vay9HYXRzYnkiPkdhdHNieTwvYT4gfAotICAgICAgICAgICA8
YSBocmVmPSJCb29rL0dhdHNieS9jaC80P2tleT12YWx1ZSI+R2F0c2J5OiBDaDQ8L2E+IHwKLSAg
ICAgICAgICAgPGEgaHJlZj0iQm9vay9TY2FybGV0Ij5TY2FybGV0IExldHRlcjwvYT48YnIvPgot
Ci0gICAgICAgICAgIDxkaXYgbmctdmlldz48L2Rpdj4KLSAgICAgICAgICAgPGhyIC8+Ci0KLSAg
ICAgICAgICAgPHByZT4kbG9jYXRpb24ucGF0aCgpID0ge3skbG9jYXRpb24ucGF0aCgpfX08L3By
ZT4KLSAgICAgICAgICAgPHByZT4kcm91dGUuY3VycmVudC50ZW1wbGF0ZVVybCA9IHt7JHJvdXRl
LmN1cnJlbnQudGVtcGxhdGVVcmx9fTwvcHJlPgotICAgICAgICAgICA8cHJlPiRyb3V0ZS5jdXJy
ZW50LnBhcmFtcyA9IHt7JHJvdXRlLmN1cnJlbnQucGFyYW1zfX08L3ByZT4KLSAgICAgICAgICAg
PHByZT4kcm91dGUuY3VycmVudC5zY29wZS5uYW1lID0ge3skcm91dGUuY3VycmVudC5zY29wZS5u
YW1lfX08L3ByZT4KLSAgICAgICAgICAgPHByZT4kcm91dGVQYXJhbXMgPSB7eyRyb3V0ZVBhcmFt
c319PC9wcmU+Ci0gICAgICAgICA8L2Rpdj4KLSAgICAgICA8L2ZpbGU+Ci0KLSAgICAgICA8Zmls
ZSBuYW1lPSJib29rLmh0bWwiPgotICAgICAgICAgY29udHJvbGxlcjoge3tuYW1lfX08YnIgLz4K
LSAgICAgICAgIEJvb2sgSWQ6IHt7cGFyYW1zLmJvb2tJZH19PGJyIC8+Ci0gICAgICAgPC9maWxl
PgotCi0gICAgICAgPGZpbGUgbmFtZT0iY2hhcHRlci5odG1sIj4KLSAgICAgICAgIGNvbnRyb2xs
ZXI6IHt7bmFtZX19PGJyIC8+Ci0gICAgICAgICBCb29rIElkOiB7e3BhcmFtcy5ib29rSWR9fTxi
ciAvPgotICAgICAgICAgQ2hhcHRlciBJZDoge3twYXJhbXMuY2hhcHRlcklkfX0KLSAgICAgICA8
L2ZpbGU+Ci0KLSAgICAgICA8ZmlsZSBuYW1lPSJzY3JpcHQuanMiPgotICAgICAgICAgYW5ndWxh
ci5tb2R1bGUoJ25nVmlldycsIFtdLCBmdW5jdGlvbigkcm91dGVQcm92aWRlciwgJGxvY2F0aW9u
UHJvdmlkZXIpIHsKLSAgICAgICAgICAgJHJvdXRlUHJvdmlkZXIud2hlbignL0Jvb2svOmJvb2tJ
ZCcsIHsKLSAgICAgICAgICAgICB0ZW1wbGF0ZVVybDogJ2Jvb2suaHRtbCcsCi0gICAgICAgICAg
ICAgY29udHJvbGxlcjogQm9va0NudGwsCi0gICAgICAgICAgICAgcmVzb2x2ZTogewotICAgICAg
ICAgICAgICAgLy8gSSB3aWxsIGNhdXNlIGEgMSBzZWNvbmQgZGVsYXkKLSAgICAgICAgICAgICAg
IGRlbGF5OiBmdW5jdGlvbigkcSwgJHRpbWVvdXQpIHsKLSAgICAgICAgICAgICAgICAgdmFyIGRl
bGF5ID0gJHEuZGVmZXIoKTsKLSAgICAgICAgICAgICAgICAgJHRpbWVvdXQoZGVsYXkucmVzb2x2
ZSwgMTAwMCk7Ci0gICAgICAgICAgICAgICAgIHJldHVybiBkZWxheS5wcm9taXNlOwotICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICRy
b3V0ZVByb3ZpZGVyLndoZW4oJy9Cb29rLzpib29rSWQvY2gvOmNoYXB0ZXJJZCcsIHsKLSAgICAg
ICAgICAgICB0ZW1wbGF0ZVVybDogJ2NoYXB0ZXIuaHRtbCcsCi0gICAgICAgICAgICAgY29udHJv
bGxlcjogQ2hhcHRlckNudGwKLSAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgLy8gY29uZmln
dXJlIGh0bWw1IHRvIGdldCBsaW5rcyB3b3JraW5nIG9uIGpzZmlkZGxlCi0gICAgICAgICAgICRs
b2NhdGlvblByb3ZpZGVyLmh0bWw1TW9kZSh0cnVlKTsKLSAgICAgICAgIH0pOwotCi0gICAgICAg
ICBmdW5jdGlvbiBNYWluQ250bCgkc2NvcGUsICRyb3V0ZSwgJHJvdXRlUGFyYW1zLCAkbG9jYXRp
b24pIHsKLSAgICAgICAgICAgJHNjb3BlLiRyb3V0ZSA9ICRyb3V0ZTsKLSAgICAgICAgICAgJHNj
b3BlLiRsb2NhdGlvbiA9ICRsb2NhdGlvbjsKLSAgICAgICAgICAgJHNjb3BlLiRyb3V0ZVBhcmFt
cyA9ICRyb3V0ZVBhcmFtczsKLSAgICAgICAgIH0KLQotICAgICAgICAgZnVuY3Rpb24gQm9va0Nu
dGwoJHNjb3BlLCAkcm91dGVQYXJhbXMpIHsKLSAgICAgICAgICAgJHNjb3BlLm5hbWUgPSAiQm9v
a0NudGwiOwotICAgICAgICAgICAkc2NvcGUucGFyYW1zID0gJHJvdXRlUGFyYW1zOwotICAgICAg
ICAgfQotCi0gICAgICAgICBmdW5jdGlvbiBDaGFwdGVyQ250bCgkc2NvcGUsICRyb3V0ZVBhcmFt
cykgewotICAgICAgICAgICAkc2NvcGUubmFtZSA9ICJDaGFwdGVyQ250bCI7Ci0gICAgICAgICAg
ICRzY29wZS5wYXJhbXMgPSAkcm91dGVQYXJhbXM7Ci0gICAgICAgICB9Ci0gICAgICAgPC9maWxl
PgotCi0gICAgICAgPGZpbGUgbmFtZT0ic2NlbmFyaW8uanMiPgotICAgICAgICAgaXQoJ3Nob3Vs
ZCBsb2FkIGFuZCBjb21waWxlIGNvcnJlY3QgdGVtcGxhdGUnLCBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgZWxlbWVudCgnYTpjb250YWlucygiTW9ieTogQ2gxIiknKS5jbGljaygpOwotICAgICAg
ICAgICB2YXIgY29udGVudCA9IGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlIFtuZy12aWV3XScp
LnRleHQoKTsKLSAgICAgICAgICAgZXhwZWN0KGNvbnRlbnQpLnRvTWF0Y2goL2NvbnRyb2xsZXJc
OiBDaGFwdGVyQ250bC8pOwotICAgICAgICAgICBleHBlY3QoY29udGVudCkudG9NYXRjaCgvQm9v
ayBJZFw6IE1vYnkvKTsKLSAgICAgICAgICAgZXhwZWN0KGNvbnRlbnQpLnRvTWF0Y2goL0NoYXB0
ZXIgSWRcOiAxLyk7Ci0KLSAgICAgICAgICAgZWxlbWVudCgnYTpjb250YWlucygiU2NhcmxldCIp
JykuY2xpY2soKTsKLSAgICAgICAgICAgc2xlZXAoMik7IC8vIHByb21pc2VzIGFyZSBub3QgcGFy
dCBvZiBzY2VuYXJpbyB3YWl0aW5nCi0gICAgICAgICAgIGNvbnRlbnQgPSBlbGVtZW50KCcuZG9j
LWV4YW1wbGUtbGl2ZSBbbmctdmlld10nKS50ZXh0KCk7Ci0gICAgICAgICAgIGV4cGVjdChjb250
ZW50KS50b01hdGNoKC9jb250cm9sbGVyXDogQm9va0NudGwvKTsKLSAgICAgICAgICAgZXhwZWN0
KGNvbnRlbnQpLnRvTWF0Y2goL0Jvb2sgSWRcOiBTY2FybGV0Lyk7Ci0gICAgICAgICB9KTsKLSAg
ICAgICA8L2ZpbGU+Ci0gICAgIDwvZXhhbXBsZT4KLSAgICAgKi8KLQotICAgIC8qKgotICAgICAq
IEBuZ2RvYyBldmVudAotICAgICAqIEBuYW1lIG5nLiRyb3V0ZSMkcm91dGVDaGFuZ2VTdGFydAot
ICAgICAqIEBldmVudE9mIG5nLiRyb3V0ZQotICAgICAqIEBldmVudFR5cGUgYnJvYWRjYXN0IG9u
IHJvb3Qgc2NvcGUKLSAgICAgKiBAZGVzY3JpcHRpb24KLSAgICAgKiBCcm9hZGNhc3RlZCBiZWZv
cmUgYSByb3V0ZSBjaGFuZ2UuIEF0IHRoaXMgIHBvaW50IHRoZSByb3V0ZSBzZXJ2aWNlcyBzdGFy
dHMKLSAgICAgKiByZXNvbHZpbmcgYWxsIG9mIHRoZSBkZXBlbmRlbmNpZXMgbmVlZGVkIGZvciB0
aGUgcm91dGUgY2hhbmdlIHRvIG9jY3Vycy4KLSAgICAgKiBUeXBpY2FsbHkgdGhpcyBpbnZvbHZl
cyBmZXRjaGluZyB0aGUgdmlldyB0ZW1wbGF0ZSBhcyB3ZWxsIGFzIGFueSBkZXBlbmRlbmNpZXMK
LSAgICAgKiBkZWZpbmVkIGluIGByZXNvbHZlYCByb3V0ZSBwcm9wZXJ0eS4gT25jZSAgYWxsIG9m
IHRoZSBkZXBlbmRlbmNpZXMgYXJlIHJlc29sdmVkCi0gICAgICogYCRyb3V0ZUNoYW5nZVN1Y2Nl
c3NgIGlzIGZpcmVkLgotICAgICAqCi0gICAgICogQHBhcmFtIHtSb3V0ZX0gbmV4dCBGdXR1cmUg
cm91dGUgaW5mb3JtYXRpb24uCi0gICAgICogQHBhcmFtIHtSb3V0ZX0gY3VycmVudCBDdXJyZW50
IHJvdXRlIGluZm9ybWF0aW9uLgotICAgICAqLwotCi0gICAgLyoqCi0gICAgICogQG5nZG9jIGV2
ZW50Ci0gICAgICogQG5hbWUgbmcuJHJvdXRlIyRyb3V0ZUNoYW5nZVN1Y2Nlc3MKLSAgICAgKiBA
ZXZlbnRPZiBuZy4kcm91dGUKLSAgICAgKiBAZXZlbnRUeXBlIGJyb2FkY2FzdCBvbiByb290IHNj
b3BlCi0gICAgICogQGRlc2NyaXB0aW9uCi0gICAgICogQnJvYWRjYXN0ZWQgYWZ0ZXIgYSByb3V0
ZSBkZXBlbmRlbmNpZXMgYXJlIHJlc29sdmVkLgotICAgICAqIHtAbGluayBuZy5kaXJlY3RpdmU6
bmdWaWV3IG5nVmlld30gbGlzdGVucyBmb3IgdGhlIGRpcmVjdGl2ZQotICAgICAqIHRvIGluc3Rh
bnRpYXRlIHRoZSBjb250cm9sbGVyIGFuZCByZW5kZXIgdGhlIHZpZXcuCi0gICAgICoKLSAgICAg
KiBAcGFyYW0ge09iamVjdH0gYW5ndWxhckV2ZW50IFN5bnRoZXRpYyBldmVudCBvYmplY3QuCi0g
ICAgICogQHBhcmFtIHtSb3V0ZX0gY3VycmVudCBDdXJyZW50IHJvdXRlIGluZm9ybWF0aW9uLgot
ICAgICAqIEBwYXJhbSB7Um91dGV8VW5kZWZpbmVkfSBwcmV2aW91cyBQcmV2aW91cyByb3V0ZSBp
bmZvcm1hdGlvbiwgb3IgdW5kZWZpbmVkIGlmIGN1cnJlbnQgaXMgZmlyc3Qgcm91dGUgZW50ZXJl
ZC4KLSAgICAgKi8KLQotICAgIC8qKgotICAgICAqIEBuZ2RvYyBldmVudAotICAgICAqIEBuYW1l
IG5nLiRyb3V0ZSMkcm91dGVDaGFuZ2VFcnJvcgotICAgICAqIEBldmVudE9mIG5nLiRyb3V0ZQot
ICAgICAqIEBldmVudFR5cGUgYnJvYWRjYXN0IG9uIHJvb3Qgc2NvcGUKLSAgICAgKiBAZGVzY3Jp
cHRpb24KLSAgICAgKiBCcm9hZGNhc3RlZCBpZiBhbnkgb2YgdGhlIHJlc29sdmUgcHJvbWlzZXMg
YXJlIHJlamVjdGVkLgotICAgICAqCi0gICAgICogQHBhcmFtIHtSb3V0ZX0gY3VycmVudCBDdXJy
ZW50IHJvdXRlIGluZm9ybWF0aW9uLgotICAgICAqIEBwYXJhbSB7Um91dGV9IHByZXZpb3VzIFBy
ZXZpb3VzIHJvdXRlIGluZm9ybWF0aW9uLgotICAgICAqIEBwYXJhbSB7Um91dGV9IHJlamVjdGlv
biBSZWplY3Rpb24gb2YgdGhlIHByb21pc2UuIFVzdWFsbHkgdGhlIGVycm9yIG9mIHRoZSBmYWls
ZWQgcHJvbWlzZS4KLSAgICAgKi8KLQotICAgIC8qKgotICAgICAqIEBuZ2RvYyBldmVudAotICAg
ICAqIEBuYW1lIG5nLiRyb3V0ZSMkcm91dGVVcGRhdGUKLSAgICAgKiBAZXZlbnRPZiBuZy4kcm91
dGUKLSAgICAgKiBAZXZlbnRUeXBlIGJyb2FkY2FzdCBvbiByb290IHNjb3BlCi0gICAgICogQGRl
c2NyaXB0aW9uCi0gICAgICoKLSAgICAgKiBUaGUgYHJlbG9hZE9uU2VhcmNoYCBwcm9wZXJ0eSBo
YXMgYmVlbiBzZXQgdG8gZmFsc2UsIGFuZCB3ZSBhcmUgcmV1c2luZyB0aGUgc2FtZQotICAgICAq
IGluc3RhbmNlIG9mIHRoZSBDb250cm9sbGVyLgotICAgICAqLwotCi0gICAgdmFyIGZvcmNlUmVs
b2FkID0gZmFsc2UsCi0gICAgICAgICRyb3V0ZSA9IHsKLSAgICAgICAgICByb3V0ZXM6IHJvdXRl
cywKLQotICAgICAgICAgIC8qKgotICAgICAgICAgICAqIEBuZ2RvYyBtZXRob2QKLSAgICAgICAg
ICAgKiBAbmFtZSBuZy4kcm91dGUjcmVsb2FkCi0gICAgICAgICAgICogQG1ldGhvZE9mIG5nLiRy
b3V0ZQotICAgICAgICAgICAqCi0gICAgICAgICAgICogQGRlc2NyaXB0aW9uCi0gICAgICAgICAg
ICogQ2F1c2VzIGAkcm91dGVgIHNlcnZpY2UgdG8gcmVsb2FkIHRoZSBjdXJyZW50IHJvdXRlIGV2
ZW4gaWYKLSAgICAgICAgICAgKiB7QGxpbmsgbmcuJGxvY2F0aW9uICRsb2NhdGlvbn0gaGFzbid0
IGNoYW5nZWQuCi0gICAgICAgICAgICoKLSAgICAgICAgICAgKiBBcyBhIHJlc3VsdCBvZiB0aGF0
LCB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nVmlldyBuZ1ZpZXd9Ci0gICAgICAgICAgICogY3JlYXRl
cyBuZXcgc2NvcGUsIHJlaW5zdGFudGlhdGVzIHRoZSBjb250cm9sbGVyLgotICAgICAgICAgICAq
LwotICAgICAgICAgIHJlbG9hZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBmb3JjZVJlbG9h
ZCA9IHRydWU7Ci0gICAgICAgICAgICAkcm9vdFNjb3BlLiRldmFsQXN5bmModXBkYXRlUm91dGUp
OwotICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICRyb290U2NvcGUuJG9uKCckbG9jYXRp
b25DaGFuZ2VTdWNjZXNzJywgdXBkYXRlUm91dGUpOwotCi0gICAgcmV0dXJuICRyb3V0ZTsKLQot
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0gb24ge3N0cmluZ30gY3VycmVudCB1cmwKLSAgICAg
KiBAcGFyYW0gd2hlbiB7c3RyaW5nfSByb3V0ZSB3aGVuIHRlbXBsYXRlIHRvIG1hdGNoIHRoZSB1
cmwgYWdhaW5zdAotICAgICAqIEByZXR1cm4gez9PYmplY3R9Ci0gICAgICovCi0gICAgZnVuY3Rp
b24gc3dpdGNoUm91dGVNYXRjaGVyKG9uLCB3aGVuKSB7Ci0gICAgICAvLyBUT0RPKGkpOiB0aGlz
IGNvZGUgaXMgY29udm9sdXRlZCBhbmQgaW5lZmZpY2llbnQsIHdlIHNob3VsZCBjb25zdHJ1Y3Qg
dGhlIHJvdXRlIG1hdGNoaW5nCi0gICAgICAvLyAgIHJlZ2V4IG9ubHkgb25jZSBhbmQgdGhlbiBy
ZXVzZSBpdAotCi0gICAgICAvLyBFc2NhcGUgcmVnZXhwIHNwZWNpYWwgY2hhcmFjdGVycy4KLSAg
ICAgIHdoZW4gPSAnXicgKyB3aGVuLnJlcGxhY2UoL1stXC9cXF4kKis/LigpfFtcXXt9XS9nLCAi
XFwkJiIpICsgJyQnOwotICAgICAgdmFyIHJlZ2V4ID0gJycsCi0gICAgICAgICAgcGFyYW1zID0g
W10sCi0gICAgICAgICAgZHN0ID0ge307Ci0KLSAgICAgIHZhciByZSA9IC86KFx3KykvZywKLSAg
ICAgICAgICBwYXJhbU1hdGNoLAotICAgICAgICAgIGxhc3RNYXRjaGVkSW5kZXggPSAwOwotCi0g
ICAgICB3aGlsZSAoKHBhcmFtTWF0Y2ggPSByZS5leGVjKHdoZW4pKSAhPT0gbnVsbCkgewotICAg
ICAgICAvLyBGaW5kIGVhY2ggOnBhcmFtIGluIGB3aGVuYCBhbmQgcmVwbGFjZSBpdCB3aXRoIGEg
Y2FwdHVyaW5nIGdyb3VwLgotICAgICAgICAvLyBBcHBlbmQgYWxsIG90aGVyIHNlY3Rpb25zIG9m
IHdoZW4gdW5jaGFuZ2VkLgotICAgICAgICByZWdleCArPSB3aGVuLnNsaWNlKGxhc3RNYXRjaGVk
SW5kZXgsIHBhcmFtTWF0Y2guaW5kZXgpOwotICAgICAgICByZWdleCArPSAnKFteXFwvXSopJzsK
LSAgICAgICAgcGFyYW1zLnB1c2gocGFyYW1NYXRjaFsxXSk7Ci0gICAgICAgIGxhc3RNYXRjaGVk
SW5kZXggPSByZS5sYXN0SW5kZXg7Ci0gICAgICB9Ci0gICAgICAvLyBBcHBlbmQgdHJhaWxpbmcg
cGF0aCBwYXJ0LgotICAgICAgcmVnZXggKz0gd2hlbi5zdWJzdHIobGFzdE1hdGNoZWRJbmRleCk7
Ci0KLSAgICAgIHZhciBtYXRjaCA9IG9uLm1hdGNoKG5ldyBSZWdFeHAocmVnZXgpKTsKLSAgICAg
IGlmIChtYXRjaCkgewotICAgICAgICBmb3JFYWNoKHBhcmFtcywgZnVuY3Rpb24obmFtZSwgaW5k
ZXgpIHsKLSAgICAgICAgICBkc3RbbmFtZV0gPSBtYXRjaFtpbmRleCArIDFdOwotICAgICAgICB9
KTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBtYXRjaCA/IGRzdCA6IG51bGw7Ci0gICAgfQotCi0g
ICAgZnVuY3Rpb24gdXBkYXRlUm91dGUoKSB7Ci0gICAgICB2YXIgbmV4dCA9IHBhcnNlUm91dGUo
KSwKLSAgICAgICAgICBsYXN0ID0gJHJvdXRlLmN1cnJlbnQ7Ci0KLSAgICAgIGlmIChuZXh0ICYm
IGxhc3QgJiYgbmV4dC4kJHJvdXRlID09PSBsYXN0LiQkcm91dGUKLSAgICAgICAgICAmJiBlcXVh
bHMobmV4dC5wYXRoUGFyYW1zLCBsYXN0LnBhdGhQYXJhbXMpICYmICFuZXh0LnJlbG9hZE9uU2Vh
cmNoICYmICFmb3JjZVJlbG9hZCkgewotICAgICAgICBsYXN0LnBhcmFtcyA9IG5leHQucGFyYW1z
OwotICAgICAgICBjb3B5KGxhc3QucGFyYW1zLCAkcm91dGVQYXJhbXMpOwotICAgICAgICAkcm9v
dFNjb3BlLiRicm9hZGNhc3QoJyRyb3V0ZVVwZGF0ZScsIGxhc3QpOwotICAgICAgfSBlbHNlIGlm
IChuZXh0IHx8IGxhc3QpIHsKLSAgICAgICAgZm9yY2VSZWxvYWQgPSBmYWxzZTsKLSAgICAgICAg
JHJvb3RTY29wZS4kYnJvYWRjYXN0KCckcm91dGVDaGFuZ2VTdGFydCcsIG5leHQsIGxhc3QpOwot
ICAgICAgICAkcm91dGUuY3VycmVudCA9IG5leHQ7Ci0gICAgICAgIGlmIChuZXh0KSB7Ci0gICAg
ICAgICAgaWYgKG5leHQucmVkaXJlY3RUbykgewotICAgICAgICAgICAgaWYgKGlzU3RyaW5nKG5l
eHQucmVkaXJlY3RUbykpIHsKLSAgICAgICAgICAgICAgJGxvY2F0aW9uLnBhdGgoaW50ZXJwb2xh
dGUobmV4dC5yZWRpcmVjdFRvLCBuZXh0LnBhcmFtcykpLnNlYXJjaChuZXh0LnBhcmFtcykKLSAg
ICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICRsb2NhdGlvbi51cmwobmV4dC5yZWRpcmVjdFRvKG5leHQucGF0aFBhcmFt
cywgJGxvY2F0aW9uLnBhdGgoKSwgJGxvY2F0aW9uLnNlYXJjaCgpKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgLnJlcGxhY2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICAkcS53aGVuKG5leHQpLgotICAgICAgICAgIHRoZW4oZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICBpZiAobmV4dCkgewotICAgICAgICAgICAgICB2YXIga2V5cyA9IFtdLAot
ICAgICAgICAgICAgICAgICAgdmFsdWVzID0gW10sCi0gICAgICAgICAgICAgICAgICB0ZW1wbGF0
ZTsKLQotICAgICAgICAgICAgICBmb3JFYWNoKG5leHQucmVzb2x2ZSB8fCB7fSwgZnVuY3Rpb24o
dmFsdWUsIGtleSkgewotICAgICAgICAgICAgICAgIGtleXMucHVzaChrZXkpOwotICAgICAgICAg
ICAgICAgIHZhbHVlcy5wdXNoKGlzU3RyaW5nKHZhbHVlKSA/ICRpbmplY3Rvci5nZXQodmFsdWUp
IDogJGluamVjdG9yLmludm9rZSh2YWx1ZSkpOwotICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgICAgaWYgKGlzRGVmaW5lZCh0ZW1wbGF0ZSA9IG5leHQudGVtcGxhdGUpKSB7Ci0gICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoaXNEZWZpbmVkKHRlbXBsYXRlID0gbmV4dC50ZW1wbGF0ZVVybCkp
IHsKLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA9ICRodHRwLmdldCh0ZW1wbGF0ZSwge2NhY2hl
OiAkdGVtcGxhdGVDYWNoZX0pLgotICAgICAgICAgICAgICAgICAgICB0aGVuKGZ1bmN0aW9uKHJl
c3BvbnNlKSB7IHJldHVybiByZXNwb25zZS5kYXRhOyB9KTsKLSAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHRlbXBsYXRlKSkgewotICAgICAgICAgICAgICAgIGtl
eXMucHVzaCgnJHRlbXBsYXRlJyk7Ci0gICAgICAgICAgICAgICAgdmFsdWVzLnB1c2godGVtcGxh
dGUpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIHJldHVybiAkcS5hbGwodmFsdWVz
KS50aGVuKGZ1bmN0aW9uKHZhbHVlcykgewotICAgICAgICAgICAgICAgIHZhciBsb2NhbHMgPSB7
fTsKLSAgICAgICAgICAgICAgICBmb3JFYWNoKHZhbHVlcywgZnVuY3Rpb24odmFsdWUsIGluZGV4
KSB7Ci0gICAgICAgICAgICAgICAgICBsb2NhbHNba2V5c1tpbmRleF1dID0gdmFsdWU7Ci0gICAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsczsKLSAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSkuCi0gICAgICAgICAgLy8gYWZ0
ZXIgcm91dGUgY2hhbmdlCi0gICAgICAgICAgdGhlbihmdW5jdGlvbihsb2NhbHMpIHsKLSAgICAg
ICAgICAgIGlmIChuZXh0ID09ICRyb3V0ZS5jdXJyZW50KSB7Ci0gICAgICAgICAgICAgIGlmIChu
ZXh0KSB7Ci0gICAgICAgICAgICAgICAgbmV4dC5sb2NhbHMgPSBsb2NhbHM7Ci0gICAgICAgICAg
ICAgICAgY29weShuZXh0LnBhcmFtcywgJHJvdXRlUGFyYW1zKTsKLSAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAkcm9vdFNjb3BlLiRicm9hZGNhc3QoJyRyb3V0ZUNoYW5nZVN1Y2Nlc3Mn
LCBuZXh0LCBsYXN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9LCBmdW5jdGlvbihlcnJv
cikgewotICAgICAgICAgICAgaWYgKG5leHQgPT0gJHJvdXRlLmN1cnJlbnQpIHsKLSAgICAgICAg
ICAgICAgJHJvb3RTY29wZS4kYnJvYWRjYXN0KCckcm91dGVDaGFuZ2VFcnJvcicsIG5leHQsIGxh
c3QsIGVycm9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9KTsKLSAgICAgIH0KLSAgICB9
Ci0KLQotICAgIC8qKgotICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IGFjdGl2ZSByb3V0ZSwg
YnkgbWF0Y2hpbmcgaXQgYWdhaW5zdCB0aGUgVVJMCi0gICAgICovCi0gICAgZnVuY3Rpb24gcGFy
c2VSb3V0ZSgpIHsKLSAgICAgIC8vIE1hdGNoIGEgcm91dGUKLSAgICAgIHZhciBwYXJhbXMsIG1h
dGNoOwotICAgICAgZm9yRWFjaChyb3V0ZXMsIGZ1bmN0aW9uKHJvdXRlLCBwYXRoKSB7Ci0gICAg
ICAgIGlmICghbWF0Y2ggJiYgKHBhcmFtcyA9IHN3aXRjaFJvdXRlTWF0Y2hlcigkbG9jYXRpb24u
cGF0aCgpLCBwYXRoKSkpIHsKLSAgICAgICAgICBtYXRjaCA9IGluaGVyaXQocm91dGUsIHsKLSAg
ICAgICAgICAgIHBhcmFtczogZXh0ZW5kKHt9LCAkbG9jYXRpb24uc2VhcmNoKCksIHBhcmFtcyks
Ci0gICAgICAgICAgICBwYXRoUGFyYW1zOiBwYXJhbXN9KTsKLSAgICAgICAgICBtYXRjaC4kJHJv
dXRlID0gcm91dGU7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgICAgLy8gTm8gcm91dGUgbWF0
Y2hlZDsgZmFsbGJhY2sgdG8gIm90aGVyd2lzZSIgcm91dGUKLSAgICAgIHJldHVybiBtYXRjaCB8
fCByb3V0ZXNbbnVsbF0gJiYgaW5oZXJpdChyb3V0ZXNbbnVsbF0sIHtwYXJhbXM6IHt9LCBwYXRo
UGFyYW1zOnt9fSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHJldHVybnMgaW50ZXJwb2xh
dGlvbiBvZiB0aGUgcmVkaXJlY3QgcGF0aCB3aXRoIHRoZSBwYXJhbWV0cnMKLSAgICAgKi8KLSAg
ICBmdW5jdGlvbiBpbnRlcnBvbGF0ZShzdHJpbmcsIHBhcmFtcykgewotICAgICAgdmFyIHJlc3Vs
dCA9IFtdOwotICAgICAgZm9yRWFjaCgoc3RyaW5nfHwnJykuc3BsaXQoJzonKSwgZnVuY3Rpb24o
c2VnbWVudCwgaSkgewotICAgICAgICBpZiAoaSA9PSAwKSB7Ci0gICAgICAgICAgcmVzdWx0LnB1
c2goc2VnbWVudCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdmFyIHNlZ21lbnRNYXRj
aCA9IHNlZ21lbnQubWF0Y2goLyhcdyspKC4qKS8pOwotICAgICAgICAgIHZhciBrZXkgPSBzZWdt
ZW50TWF0Y2hbMV07Ci0gICAgICAgICAgcmVzdWx0LnB1c2gocGFyYW1zW2tleV0pOwotICAgICAg
ICAgIHJlc3VsdC5wdXNoKHNlZ21lbnRNYXRjaFsyXSB8fCAnJyk7Ci0gICAgICAgICAgZGVsZXRl
IHBhcmFtc1trZXldOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiByZXN1bHQu
am9pbignJyk7Ci0gICAgfQotICB9XTsKLX0KLQotLyoqCi0gKiBAbmdkb2Mgb2JqZWN0Ci0gKiBA
bmFtZSBuZy4kcm91dGVQYXJhbXMKLSAqIEByZXF1aXJlcyAkcm91dGUKLSAqCi0gKiBAZGVzY3Jp
cHRpb24KLSAqIEN1cnJlbnQgc2V0IG9mIHJvdXRlIHBhcmFtZXRlcnMuIFRoZSByb3V0ZSBwYXJh
bWV0ZXJzIGFyZSBhIGNvbWJpbmF0aW9uIG9mIHRoZQotICoge0BsaW5rIG5nLiRsb2NhdGlvbiAk
bG9jYXRpb259IGBzZWFyY2goKWAsIGFuZCBgcGF0aCgpYC4gVGhlIGBwYXRoYCBwYXJhbWV0ZXJz
Ci0gKiBhcmUgZXh0cmFjdGVkIHdoZW4gdGhlIHtAbGluayBuZy4kcm91dGUgJHJvdXRlfSBwYXRo
IGlzIG1hdGNoZWQuCi0gKgotICogSW4gY2FzZSBvZiBwYXJhbWV0ZXIgbmFtZSBjb2xsaXNpb24s
IGBwYXRoYCBwYXJhbXMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgYHNlYXJjaGAgcGFyYW1zLgotICoK
LSAqIFRoZSBzZXJ2aWNlIGd1YXJhbnRlZXMgdGhhdCB0aGUgaWRlbnRpdHkgb2YgdGhlIGAkcm91
dGVQYXJhbXNgIG9iamVjdCB3aWxsIHJlbWFpbiB1bmNoYW5nZWQKLSAqIChidXQgaXRzIHByb3Bl
cnRpZXMgd2lsbCBsaWtlbHkgY2hhbmdlKSBldmVuIHdoZW4gYSByb3V0ZSBjaGFuZ2Ugb2NjdXJz
LgotICoKLSAqIEBleGFtcGxlCi0gKiA8cHJlPgotICogIC8vIEdpdmVuOgotICogIC8vIFVSTDog
aHR0cDovL3NlcnZlci5jb20vaW5kZXguaHRtbCMvQ2hhcHRlci8xL1NlY3Rpb24vMj9zZWFyY2g9
bW9ieQotICogIC8vIFJvdXRlOiAvQ2hhcHRlci86Y2hhcHRlcklkL1NlY3Rpb24vOnNlY3Rpb25J
ZAotICogIC8vCi0gKiAgLy8gVGhlbgotICogICRyb3V0ZVBhcmFtcyA9PT4ge2NoYXB0ZXJJZDox
LCBzZWN0aW9uSWQ6Miwgc2VhcmNoOidtb2J5J30KLSAqIDwvcHJlPgotICovCi1mdW5jdGlvbiAk
Um91dGVQYXJhbXNQcm92aWRlcigpIHsKLSAgdGhpcy4kZ2V0ID0gdmFsdWVGbih7fSk7Ci19Ci0K
LS8qKgotICogREVTSUdOIE5PVEVTCi0gKgotICogVGhlIGRlc2lnbiBkZWNpc2lvbnMgYmVoaW5k
IHRoZSBzY29wZSBhcmUgaGVhdmlseSBmYXZvcmVkIGZvciBzcGVlZCBhbmQgbWVtb3J5IGNvbnN1
bXB0aW9uLgotICoKLSAqIFRoZSB0eXBpY2FsIHVzZSBvZiBzY29wZSBpcyB0byB3YXRjaCB0aGUg
ZXhwcmVzc2lvbnMsIHdoaWNoIG1vc3Qgb2YgdGhlIHRpbWUgcmV0dXJuIHRoZSBzYW1lCi0gKiB2
YWx1ZSBhcyBsYXN0IHRpbWUgc28gd2Ugb3B0aW1pemUgdGhlIG9wZXJhdGlvbi4KLSAqCi0gKiBD
bG9zdXJlcyBjb25zdHJ1Y3Rpb24gaXMgZXhwZW5zaXZlIGluIHRlcm1zIG9mIHNwZWVkIGFzIHdl
bGwgYXMgbWVtb3J5OgotICogICAtIE5vIGNsb3N1cmVzLCBpbnN0ZWFkIHVzZSBwcm90b3R5cGlj
YWwgaW5oZXJpdGFuY2UgZm9yIEFQSQotICogICAtIEludGVybmFsIHN0YXRlIG5lZWRzIHRvIGJl
IHN0b3JlZCBvbiBzY29wZSBkaXJlY3RseSwgd2hpY2ggbWVhbnMgdGhhdCBwcml2YXRlIHN0YXRl
IGlzCi0gKiAgICAgZXhwb3NlZCBhcyAkJF9fX18gcHJvcGVydGllcwotICoKLSAqIExvb3Agb3Bl
cmF0aW9ucyBhcmUgb3B0aW1pemVkIGJ5IHVzaW5nIHdoaWxlKGNvdW50LS0pIHsgLi4uIH0KLSAq
ICAgLSB0aGlzIG1lYW5zIHRoYXQgaW4gb3JkZXIgdG8ga2VlcCB0aGUgc2FtZSBvcmRlciBvZiBl
eGVjdXRpb24gYXMgYWRkaXRpb24gd2UgaGF2ZSB0byBhZGQKLSAqICAgICBpdGVtcyB0byB0aGUg
YXJyYXkgYXQgdGhlIGJlZ2lubmluZyAoc2hpZnQpIGluc3RlYWQgb2YgYXQgdGhlIGVuZCAocHVz
aCkKLSAqCi0gKiBDaGlsZCBzY29wZXMgYXJlIGNyZWF0ZWQgYW5kIHJlbW92ZWQgb2Z0ZW4KLSAq
ICAgLSBVc2luZyBhbiBhcnJheSB3b3VsZCBiZSBzbG93IHNpbmNlIGluc2VydHMgaW4gbWlkZGxl
IGFyZSBleHBlbnNpdmUgc28gd2UgdXNlIGxpbmtlZCBsaXN0Ci0gKgotICogVGhlcmUgYXJlIGZl
dyB3YXRjaGVzIHRoZW4gYSBsb3Qgb2Ygb2JzZXJ2ZXJzLiBUaGlzIGlzIHdoeSB5b3UgZG9uJ3Qg
d2FudCB0aGUgb2JzZXJ2ZXIgdG8gYmUKLSAqIGltcGxlbWVudGVkIGluIHRoZSBzYW1lIHdheSBh
cyB3YXRjaC4gV2F0Y2ggcmVxdWlyZXMgcmV0dXJuIG9mIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9u
IHdoaWNoCi0gKiBhcmUgZXhwZW5zaXZlIHRvIGNvbnN0cnVjdC4KLSAqLwotCi0KLS8qKgotICog
QG5nZG9jIG9iamVjdAotICogQG5hbWUgbmcuJHJvb3RTY29wZVByb3ZpZGVyCi0gKiBAZGVzY3Jp
cHRpb24KLSAqCi0gKiBQcm92aWRlciBmb3IgdGhlICRyb290U2NvcGUgc2VydmljZS4KLSAqLwot
Ci0vKioKLSAqIEBuZ2RvYyBmdW5jdGlvbgotICogQG5hbWUgbmcuJHJvb3RTY29wZVByb3ZpZGVy
I2RpZ2VzdFR0bAotICogQG1ldGhvZE9mIG5nLiRyb290U2NvcGVQcm92aWRlcgotICogQGRlc2Ny
aXB0aW9uCi0gKgotICogU2V0cyB0aGUgbnVtYmVyIG9mIGRpZ2VzdCBpdGVyYXRpb25zIHRoZSBz
Y29wZSBzaG91bGQgYXR0ZW1wdCB0byBleGVjdXRlIGJlZm9yZSBnaXZpbmcgdXAgYW5kCi0gKiBh
c3N1bWluZyB0aGF0IHRoZSBtb2RlbCBpcyB1bnN0YWJsZS4KLSAqCi0gKiBUaGUgY3VycmVudCBk
ZWZhdWx0IGlzIDEwIGl0ZXJhdGlvbnMuCi0gKgotICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IFRo
ZSBudW1iZXIgb2YgZGlnZXN0IGl0ZXJhdGlvbnMuCi0gKi8KLQotCi0vKioKLSAqIEBuZ2RvYyBv
YmplY3QKLSAqIEBuYW1lIG5nLiRyb290U2NvcGUKLSAqIEBkZXNjcmlwdGlvbgotICoKLSAqIEV2
ZXJ5IGFwcGxpY2F0aW9uIGhhcyBhIHNpbmdsZSByb290IHtAbGluayBuZy4kcm9vdFNjb3BlLlNj
b3BlIHNjb3BlfS4KLSAqIEFsbCBvdGhlciBzY29wZXMgYXJlIGNoaWxkIHNjb3BlcyBvZiB0aGUg
cm9vdCBzY29wZS4gU2NvcGVzIHByb3ZpZGUgbWVjaGFuaXNtIGZvciB3YXRjaGluZyB0aGUgbW9k
ZWwgYW5kIHByb3ZpZGUKLSAqIGV2ZW50IHByb2Nlc3NpbmcgbGlmZS1jeWNsZS4gU2VlIHtAbGlu
ayBndWlkZS9zY29wZSBkZXZlbG9wZXIgZ3VpZGUgb24gc2NvcGVzfS4KLSAqLwotZnVuY3Rpb24g
JFJvb3RTY29wZVByb3ZpZGVyKCl7Ci0gIHZhciBUVEwgPSAxMDsKLQotICB0aGlzLmRpZ2VzdFR0
bCA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHsKLSAgICAg
IFRUTCA9IHZhbHVlOwotICAgIH0KLSAgICByZXR1cm4gVFRMOwotICB9OwotCi0gIHRoaXMuJGdl
dCA9IFsnJGluamVjdG9yJywgJyRleGNlcHRpb25IYW5kbGVyJywgJyRwYXJzZScsCi0gICAgICBm
dW5jdGlvbiggJGluamVjdG9yLCAgICRleGNlcHRpb25IYW5kbGVyLCAgICRwYXJzZSkgewotCi0g
ICAgLyoqCi0gICAgICogQG5nZG9jIGZ1bmN0aW9uCi0gICAgICogQG5hbWUgbmcuJHJvb3RTY29w
ZS5TY29wZQotICAgICAqCi0gICAgICogQGRlc2NyaXB0aW9uCi0gICAgICogQSByb290IHNjb3Bl
IGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcgdGhlIHtAbGluayBuZy4kcm9vdFNjb3BlICRyb290U2Nv
cGV9IGtleSBmcm9tIHRoZQotICAgICAqIHtAbGluayBBVVRPLiRpbmplY3RvciAkaW5qZWN0b3J9
LiBDaGlsZCBzY29wZXMgYXJlIGNyZWF0ZWQgdXNpbmcgdGhlCi0gICAgICoge0BsaW5rIG5nLiRy
b290U2NvcGUuU2NvcGUjJG5ldyAkbmV3KCl9IG1ldGhvZC4gKE1vc3Qgc2NvcGVzIGFyZSBjcmVh
dGVkIGF1dG9tYXRpY2FsbHkgd2hlbgotICAgICAqIGNvbXBpbGVkIEhUTUwgdGVtcGxhdGUgaXMg
ZXhlY3V0ZWQuKQotICAgICAqCi0gICAgICogSGVyZSBpcyBhIHNpbXBsZSBzY29wZSBzbmlwcGV0
IHRvIHNob3cgaG93IHlvdSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgc2NvcGUuCi0gICAgICogPHBy
ZT4KLSAgICAgICAgYW5ndWxhci5pbmplY3RvcihbJ25nJ10pLmludm9rZShmdW5jdGlvbigkcm9v
dFNjb3BlKSB7Ci0gICAgICAgICAgIHZhciBzY29wZSA9ICRyb290U2NvcGUuJG5ldygpOwotICAg
ICAgICAgICBzY29wZS5zYWx1dGF0aW9uID0gJ0hlbGxvJzsKLSAgICAgICAgICAgc2NvcGUubmFt
ZSA9ICdXb3JsZCc7Ci0KLSAgICAgICAgICAgZXhwZWN0KHNjb3BlLmdyZWV0aW5nKS50b0VxdWFs
KHVuZGVmaW5lZCk7Ci0KLSAgICAgICAgICAgc2NvcGUuJHdhdGNoKCduYW1lJywgZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAgc2NvcGUuZ3JlZXRpbmcgPSBzY29wZS5zYWx1dGF0aW9uICsgJyAn
ICsgc2NvcGUubmFtZSArICchJzsKLSAgICAgICAgICAgfSk7IC8vIGluaXRpYWxpemUgdGhlIHdh
dGNoCi0KLSAgICAgICAgICAgZXhwZWN0KHNjb3BlLmdyZWV0aW5nKS50b0VxdWFsKHVuZGVmaW5l
ZCk7Ci0gICAgICAgICAgIHNjb3BlLm5hbWUgPSAnTWlza28nOwotICAgICAgICAgICAvLyBzdGls
bCBvbGQgdmFsdWUsIHNpbmNlIHdhdGNoZXMgaGF2ZSBub3QgYmVlbiBjYWxsZWQgeWV0Ci0gICAg
ICAgICAgIGV4cGVjdChzY29wZS5ncmVldGluZykudG9FcXVhbCh1bmRlZmluZWQpOwotCi0gICAg
ICAgICAgIHNjb3BlLiRkaWdlc3QoKTsgLy8gZmlyZSBhbGwgIHRoZSB3YXRjaGVzCi0gICAgICAg
ICAgIGV4cGVjdChzY29wZS5ncmVldGluZykudG9FcXVhbCgnSGVsbG8gTWlza28hJyk7Ci0gICAg
ICAgIH0pOwotICAgICAqIDwvcHJlPgotICAgICAqCi0gICAgICogIyBJbmhlcml0YW5jZQotICAg
ICAqIEEgc2NvcGUgY2FuIGluaGVyaXQgZnJvbSBhIHBhcmVudCBzY29wZSwgYXMgaW4gdGhpcyBl
eGFtcGxlOgotICAgICAqIDxwcmU+Ci0gICAgICAgICB2YXIgcGFyZW50ID0gJHJvb3RTY29wZTsK
LSAgICAgICAgIHZhciBjaGlsZCA9IHBhcmVudC4kbmV3KCk7Ci0KLSAgICAgICAgIHBhcmVudC5z
YWx1dGF0aW9uID0gIkhlbGxvIjsKLSAgICAgICAgIGNoaWxkLm5hbWUgPSAiV29ybGQiOwotICAg
ICAgICAgZXhwZWN0KGNoaWxkLnNhbHV0YXRpb24pLnRvRXF1YWwoJ0hlbGxvJyk7Ci0KLSAgICAg
ICAgIGNoaWxkLnNhbHV0YXRpb24gPSAiV2VsY29tZSI7Ci0gICAgICAgICBleHBlY3QoY2hpbGQu
c2FsdXRhdGlvbikudG9FcXVhbCgnV2VsY29tZScpOwotICAgICAgICAgZXhwZWN0KHBhcmVudC5z
YWx1dGF0aW9uKS50b0VxdWFsKCdIZWxsbycpOwotICAgICAqIDwvcHJlPgotICAgICAqCi0gICAg
ICoKLSAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCBmdW5jdGlvbigpPj19IHByb3ZpZGVy
cyBNYXAgb2Ygc2VydmljZSBmYWN0b3J5IHdoaWNoIG5lZWQgdG8gYmUgcHJvdmlkZWQKLSAgICAg
KiAgICAgZm9yIHRoZSBjdXJyZW50IHNjb3BlLiBEZWZhdWx0cyB0byB7QGxpbmsgbmd9LgotICAg
ICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsICo+PX0gaW5zdGFuY2VDYWNoZSBQcm92aWRlcyBw
cmUtaW5zdGFudGlhdGVkIHNlcnZpY2VzIHdoaWNoIHNob3VsZAotICAgICAqICAgICBhcHBlbmQv
b3ZlcnJpZGUgc2VydmljZXMgcHJvdmlkZWQgYnkgYHByb3ZpZGVyc2AuIFRoaXMgaXMgaGFuZHkg
d2hlbiB1bml0LXRlc3RpbmcgYW5kIGhhdmluZwotICAgICAqICAgICB0aGUgbmVlZCB0byBvdmVy
cmlkZSBhIGRlZmF1bHQgc2VydmljZS4KLSAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBOZXdseSBj
cmVhdGVkIHNjb3BlLgotICAgICAqCi0gICAgICovCi0gICAgZnVuY3Rpb24gU2NvcGUoKSB7Ci0g
ICAgICB0aGlzLiRpZCA9IG5leHRVaWQoKTsKLSAgICAgIHRoaXMuJCRwaGFzZSA9IHRoaXMuJHBh
cmVudCA9IHRoaXMuJCR3YXRjaGVycyA9Ci0gICAgICAgICAgICAgICAgICAgICB0aGlzLiQkbmV4
dFNpYmxpbmcgPSB0aGlzLiQkcHJldlNpYmxpbmcgPQotICAgICAgICAgICAgICAgICAgICAgdGhp
cy4kJGNoaWxkSGVhZCA9IHRoaXMuJCRjaGlsZFRhaWwgPSBudWxsOwotICAgICAgdGhpc1sndGhp
cyddID0gdGhpcy4kcm9vdCA9ICB0aGlzOwotICAgICAgdGhpcy4kJGRlc3Ryb3llZCA9IGZhbHNl
OwotICAgICAgdGhpcy4kJGFzeW5jUXVldWUgPSBbXTsKLSAgICAgIHRoaXMuJCRsaXN0ZW5lcnMg
PSB7fTsKLSAgICAgIHRoaXMuJCRpc29sYXRlQmluZGluZ3MgPSB7fTsKLSAgICB9Ci0KLSAgICAv
KioKLSAgICAgKiBAbmdkb2MgcHJvcGVydHkKLSAgICAgKiBAbmFtZSBuZy4kcm9vdFNjb3BlLlNj
b3BlIyRpZAotICAgICAqIEBwcm9wZXJ0eU9mIG5nLiRyb290U2NvcGUuU2NvcGUKLSAgICAgKiBA
cmV0dXJucyB7bnVtYmVyfSBVbmlxdWUgc2NvcGUgSUQgKG1vbm90b25pY2FsbHkgaW5jcmVhc2lu
ZyBhbHBoYW51bWVyaWMgc2VxdWVuY2UpIHVzZWZ1bCBmb3IKLSAgICAgKiAgIGRlYnVnZ2luZy4K
LSAgICAgKi8KLQotCi0gICAgU2NvcGUucHJvdG90eXBlID0gewotICAgICAgLyoqCi0gICAgICAg
KiBAbmdkb2MgZnVuY3Rpb24KLSAgICAgICAqIEBuYW1lIG5nLiRyb290U2NvcGUuU2NvcGUjJG5l
dwotICAgICAgICogQG1ldGhvZE9mIG5nLiRyb290U2NvcGUuU2NvcGUKLSAgICAgICAqIEBmdW5j
dGlvbgotICAgICAgICoKLSAgICAgICAqIEBkZXNjcmlwdGlvbgotICAgICAgICogQ3JlYXRlcyBh
IG5ldyBjaGlsZCB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSBzY29wZX0uCi0gICAgICAgKgot
ICAgICAgICogVGhlIHBhcmVudCBzY29wZSB3aWxsIHByb3BhZ2F0ZSB0aGUge0BsaW5rIG5nLiRy
b290U2NvcGUuU2NvcGUjJGRpZ2VzdCAkZGlnZXN0KCl9IGFuZAotICAgICAgICoge0BsaW5rIG5n
LiRyb290U2NvcGUuU2NvcGUjJGRpZ2VzdCAkZGlnZXN0KCl9IGV2ZW50cy4gVGhlIHNjb3BlIGNh
biBiZSByZW1vdmVkIGZyb20gdGhlIHNjb3BlCi0gICAgICAgKiBoaWVyYXJjaHkgdXNpbmcge0Bs
aW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGRlc3Ryb3kgJGRlc3Ryb3koKX0uCi0gICAgICAgKgot
ICAgICAgICoge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGRlc3Ryb3kgJGRlc3Ryb3koKX0g
bXVzdCBiZSBjYWxsZWQgb24gYSBzY29wZSB3aGVuIGl0IGlzIGRlc2lyZWQgZm9yCi0gICAgICAg
KiB0aGUgc2NvcGUgYW5kIGl0cyBjaGlsZCBzY29wZXMgdG8gYmUgcGVybWFuZW50bHkgZGV0YWNo
ZWQgZnJvbSB0aGUgcGFyZW50IGFuZCB0aHVzIHN0b3AKLSAgICAgICAqIHBhcnRpY2lwYXRpbmcg
aW4gbW9kZWwgY2hhbmdlIGRldGVjdGlvbiBhbmQgbGlzdGVuZXIgbm90aWZpY2F0aW9uIGJ5IGlu
dm9raW5nLgotICAgICAgICoKLSAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNvbGF0ZSBpZiB0
cnVlIHRoZW4gdGhlIHNjb3BlIGRvZXMgbm90IHByb3RvdHlwaWNhbGx5IGluaGVyaXQgZnJvbSB0
aGUKLSAgICAgICAqICAgICAgICAgcGFyZW50IHNjb3BlLiBUaGUgc2NvcGUgaXMgaXNvbGF0ZWQs
IGFzIGl0IGNhbiBub3Qgc2VlIHBhcmVudCBzY29wZSBwcm9wZXJ0aWVzLgotICAgICAgICogICAg
ICAgICBXaGVuIGNyZWF0aW5nIHdpZGdldHMgaXQgaXMgdXNlZnVsIGZvciB0aGUgd2lkZ2V0IHRv
IG5vdCBhY2NpZGVudGFsbHkgcmVhZCBwYXJlbnQKLSAgICAgICAqICAgICAgICAgc3RhdGUuCi0g
ICAgICAgKgotICAgICAgICogQHJldHVybnMge09iamVjdH0gVGhlIG5ld2x5IGNyZWF0ZWQgY2hp
bGQgc2NvcGUuCi0gICAgICAgKgotICAgICAgICovCi0gICAgICAkbmV3OiBmdW5jdGlvbihpc29s
YXRlKSB7Ci0gICAgICAgIHZhciBDaGlsZCwKLSAgICAgICAgICAgIGNoaWxkOwotCi0gICAgICAg
IGlmIChpc0Z1bmN0aW9uKGlzb2xhdGUpKSB7Ci0gICAgICAgICAgLy8gVE9ETzogcmVtb3ZlIGF0
IHNvbWUgcG9pbnQKLSAgICAgICAgICB0aHJvdyBFcnJvcignQVBJLUNIQU5HRTogVXNlICRjb250
cm9sbGVyIHRvIGluc3RhbnRpYXRlIGNvbnRyb2xsZXJzLicpOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChpc29sYXRlKSB7Ci0gICAgICAgICAgY2hpbGQgPSBuZXcgU2NvcGUoKTsKLSAgICAgICAg
ICBjaGlsZC4kcm9vdCA9IHRoaXMuJHJvb3Q7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
Q2hpbGQgPSBmdW5jdGlvbigpIHt9OyAvLyBzaG91bGQgYmUgYW5vbnltb3VzOyBUaGlzIGlzIHNv
IHRoYXQgd2hlbiB0aGUgbWluaWZpZXIgbXVuZ2VzCi0gICAgICAgICAgICAvLyB0aGUgbmFtZSBp
dCBkb2VzIG5vdCBiZWNvbWUgcmFuZG9tIHNldCBvZiBjaGFycy4gVGhlc2Ugd2lsbCB0aGVuIHNo
b3cgdXAgYXMgY2xhc3MKLSAgICAgICAgICAgIC8vIG5hbWUgaW4gdGhlIGRlYnVnZ2VyLgotICAg
ICAgICAgIENoaWxkLnByb3RvdHlwZSA9IHRoaXM7Ci0gICAgICAgICAgY2hpbGQgPSBuZXcgQ2hp
bGQoKTsKLSAgICAgICAgICBjaGlsZC4kaWQgPSBuZXh0VWlkKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2hpbGRbJ3RoaXMnXSA9IGNoaWxkOwotICAgICAgICBjaGlsZC4kJGxpc3RlbmVycyA9IHt9
OwotICAgICAgICBjaGlsZC4kcGFyZW50ID0gdGhpczsKLSAgICAgICAgY2hpbGQuJCRhc3luY1F1
ZXVlID0gW107Ci0gICAgICAgIGNoaWxkLiQkd2F0Y2hlcnMgPSBjaGlsZC4kJG5leHRTaWJsaW5n
ID0gY2hpbGQuJCRjaGlsZEhlYWQgPSBjaGlsZC4kJGNoaWxkVGFpbCA9IG51bGw7Ci0gICAgICAg
IGNoaWxkLiQkcHJldlNpYmxpbmcgPSB0aGlzLiQkY2hpbGRUYWlsOwotICAgICAgICBpZiAodGhp
cy4kJGNoaWxkSGVhZCkgewotICAgICAgICAgIHRoaXMuJCRjaGlsZFRhaWwuJCRuZXh0U2libGlu
ZyA9IGNoaWxkOwotICAgICAgICAgIHRoaXMuJCRjaGlsZFRhaWwgPSBjaGlsZDsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICB0aGlzLiQkY2hpbGRIZWFkID0gdGhpcy4kJGNoaWxkVGFpbCA9
IGNoaWxkOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBjaGlsZDsKLSAgICAgIH0sCi0KLSAg
ICAgIC8qKgotICAgICAgICogQG5nZG9jIGZ1bmN0aW9uCi0gICAgICAgKiBAbmFtZSBuZy4kcm9v
dFNjb3BlLlNjb3BlIyR3YXRjaAotICAgICAgICogQG1ldGhvZE9mIG5nLiRyb290U2NvcGUuU2Nv
cGUKLSAgICAgICAqIEBmdW5jdGlvbgotICAgICAgICoKLSAgICAgICAqIEBkZXNjcmlwdGlvbgot
ICAgICAgICogUmVnaXN0ZXJzIGEgYGxpc3RlbmVyYCBjYWxsYmFjayB0byBiZSBleGVjdXRlZCB3
aGVuZXZlciB0aGUgYHdhdGNoRXhwcmVzc2lvbmAgY2hhbmdlcy4KLSAgICAgICAqCi0gICAgICAg
KiAtIFRoZSBgd2F0Y2hFeHByZXNzaW9uYCBpcyBjYWxsZWQgb24gZXZlcnkgY2FsbCB0byB7QGxp
bmsgbmcuJHJvb3RTY29wZS5TY29wZSMkZGlnZXN0ICRkaWdlc3QoKX0gYW5kCi0gICAgICAgKiAg
IHNob3VsZCByZXR1cm4gdGhlIHZhbHVlIHdoaWNoIHdpbGwgYmUgd2F0Y2hlZC4gKFNpbmNlIHtA
bGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRkaWdlc3QgJGRpZ2VzdCgpfQotICAgICAgICogICBy
ZXJ1bnMgd2hlbiBpdCBkZXRlY3RzIGNoYW5nZXMgdGhlIGB3YXRjaEV4cHJlc3Npb25gIGNhbiBl
eGVjdXRlIG11bHRpcGxlIHRpbWVzIHBlcgotICAgICAgICogICB7QGxpbmsgbmcuJHJvb3RTY29w
ZS5TY29wZSMkZGlnZXN0ICRkaWdlc3QoKX0gYW5kIHNob3VsZCBiZSBpZGVtcG90ZW50LikKLSAg
ICAgICAqIC0gVGhlIGBsaXN0ZW5lcmAgaXMgY2FsbGVkIG9ubHkgd2hlbiB0aGUgdmFsdWUgZnJv
bSB0aGUgY3VycmVudCBgd2F0Y2hFeHByZXNzaW9uYCBhbmQgdGhlCi0gICAgICAgKiAgIHByZXZp
b3VzIGNhbGwgdG8gYHdhdGNoRXhwcmVzc2lvbmAgYXJlIG5vdCBlcXVhbCAod2l0aCB0aGUgZXhj
ZXB0aW9uIG9mIHRoZSBpbml0aWFsIHJ1biwKLSAgICAgICAqICAgc2VlIGJlbG93KS4gVGhlIGlu
ZXF1YWxpdHkgaXMgZGV0ZXJtaW5lZCBhY2NvcmRpbmcgdG8KLSAgICAgICAqICAge0BsaW5rIGFu
Z3VsYXIuZXF1YWxzfSBmdW5jdGlvbi4gVG8gc2F2ZSB0aGUgdmFsdWUgb2YgdGhlIG9iamVjdCBm
b3IgbGF0ZXIgY29tcGFyaXNvbiwgdGhlCi0gICAgICAgKiAgIHtAbGluayBhbmd1bGFyLmNvcHl9
IGZ1bmN0aW9uIGlzIHVzZWQuIEl0IGFsc28gbWVhbnMgdGhhdCB3YXRjaGluZyBjb21wbGV4IG9w
dGlvbnMgd2lsbAotICAgICAgICogICBoYXZlIGFkdmVyc2UgbWVtb3J5IGFuZCBwZXJmb3JtYW5j
ZSBpbXBsaWNhdGlvbnMuCi0gICAgICAgKiAtIFRoZSB3YXRjaCBgbGlzdGVuZXJgIG1heSBjaGFu
Z2UgdGhlIG1vZGVsLCB3aGljaCBtYXkgdHJpZ2dlciBvdGhlciBgbGlzdGVuZXJgcyB0byBmaXJl
LiBUaGlzCi0gICAgICAgKiAgIGlzIGFjaGlldmVkIGJ5IHJlcnVubmluZyB0aGUgd2F0Y2hlcnMg
dW50aWwgbm8gY2hhbmdlcyBhcmUgZGV0ZWN0ZWQuIFRoZSByZXJ1biBpdGVyYXRpb24KLSAgICAg
ICAqICAgbGltaXQgaXMgMTAgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wIGRlYWRsb2NrLgot
ICAgICAgICoKLSAgICAgICAqCi0gICAgICAgKiBJZiB5b3Ugd2FudCB0byBiZSBub3RpZmllZCB3
aGVuZXZlciB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkZGlnZXN0ICRkaWdlc3R9IGlzIGNh
bGxlZCwKLSAgICAgICAqIHlvdSBjYW4gcmVnaXN0ZXIgYSBgd2F0Y2hFeHByZXNzaW9uYCBmdW5j
dGlvbiB3aXRoIG5vIGBsaXN0ZW5lcmAuIChTaW5jZSBgd2F0Y2hFeHByZXNzaW9uYAotICAgICAg
ICogY2FuIGV4ZWN1dGUgbXVsdGlwbGUgdGltZXMgcGVyIHtAbGluayBuZy4kcm9vdFNjb3BlLlNj
b3BlIyRkaWdlc3QgJGRpZ2VzdH0gY3ljbGUgd2hlbiBhIGNoYW5nZSBpcwotICAgICAgICogZGV0
ZWN0ZWQsIGJlIHByZXBhcmVkIGZvciBtdWx0aXBsZSBjYWxscyB0byB5b3VyIGxpc3RlbmVyLikK
LSAgICAgICAqCi0gICAgICAgKiBBZnRlciBhIHdhdGNoZXIgaXMgcmVnaXN0ZXJlZCB3aXRoIHRo
ZSBzY29wZSwgdGhlIGBsaXN0ZW5lcmAgZm4gaXMgY2FsbGVkIGFzeW5jaHJvbm91c2x5Ci0gICAg
ICAgKiAodmlhIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRldmFsQXN5bmMgJGV2YWxBc3lu
Y30pIHRvIGluaXRpYWxpemUgdGhlCi0gICAgICAgKiB3YXRjaGVyLiBJbiByYXJlIGNhc2VzLCB0
aGlzIGlzIHVuZGVzaXJhYmxlIGJlY2F1c2UgdGhlIGxpc3RlbmVyIGlzIGNhbGxlZCB3aGVuIHRo
ZSByZXN1bHQKLSAgICAgICAqIG9mIGB3YXRjaEV4cHJlc3Npb25gIGRpZG4ndCBjaGFuZ2UuIFRv
IGRldGVjdCB0aGlzIHNjZW5hcmlvIHdpdGhpbiB0aGUgYGxpc3RlbmVyYCBmbiwgeW91Ci0gICAg
ICAgKiBjYW4gY29tcGFyZSB0aGUgYG5ld1ZhbGAgYW5kIGBvbGRWYWxgLiBJZiB0aGVzZSB0d28g
dmFsdWVzIGFyZSBpZGVudGljYWwgKGA9PT1gKSB0aGVuIHRoZQotICAgICAgICogbGlzdGVuZXIg
d2FzIGNhbGxlZCBkdWUgdG8gaW5pdGlhbGl6YXRpb24uCi0gICAgICAgKgotICAgICAgICoKLSAg
ICAgICAqICMgRXhhbXBsZQotICAgICAgICogPHByZT4KLSAgICAgICAgICAgLy8gbGV0J3MgYXNz
dW1lIHRoYXQgc2NvcGUgd2FzIGRlcGVuZGVuY3kgaW5qZWN0ZWQgYXMgdGhlICRyb290U2NvcGUK
LSAgICAgICAgICAgdmFyIHNjb3BlID0gJHJvb3RTY29wZTsKLSAgICAgICAgICAgc2NvcGUubmFt
ZSA9ICdtaXNrbyc7Ci0gICAgICAgICAgIHNjb3BlLmNvdW50ZXIgPSAwOwotCi0gICAgICAgICAg
IGV4cGVjdChzY29wZS5jb3VudGVyKS50b0VxdWFsKDApOwotICAgICAgICAgICBzY29wZS4kd2F0
Y2goJ25hbWUnLCBmdW5jdGlvbihuZXdWYWx1ZSwgb2xkVmFsdWUpIHsgc2NvcGUuY291bnRlciA9
IHNjb3BlLmNvdW50ZXIgKyAxOyB9KTsKLSAgICAgICAgICAgZXhwZWN0KHNjb3BlLmNvdW50ZXIp
LnRvRXF1YWwoMCk7Ci0KLSAgICAgICAgICAgc2NvcGUuJGRpZ2VzdCgpOwotICAgICAgICAgICAv
LyBubyB2YXJpYWJsZSBjaGFuZ2UKLSAgICAgICAgICAgZXhwZWN0KHNjb3BlLmNvdW50ZXIpLnRv
RXF1YWwoMCk7Ci0KLSAgICAgICAgICAgc2NvcGUubmFtZSA9ICdhZGFtJzsKLSAgICAgICAgICAg
c2NvcGUuJGRpZ2VzdCgpOwotICAgICAgICAgICBleHBlY3Qoc2NvcGUuY291bnRlcikudG9FcXVh
bCgxKTsKLSAgICAgICAqIDwvcHJlPgotICAgICAgICoKLSAgICAgICAqCi0gICAgICAgKgotICAg
ICAgICogQHBhcmFtIHsoZnVuY3Rpb24oKXxzdHJpbmcpfSB3YXRjaEV4cHJlc3Npb24gRXhwcmVz
c2lvbiB0aGF0IGlzIGV2YWx1YXRlZCBvbiBlYWNoCi0gICAgICAgKiAgICB7QGxpbmsgbmcuJHJv
b3RTY29wZS5TY29wZSMkZGlnZXN0ICRkaWdlc3R9IGN5Y2xlLiBBIGNoYW5nZSBpbiB0aGUgcmV0
dXJuIHZhbHVlIHRyaWdnZXJzIGEKLSAgICAgICAqICAgIGNhbGwgdG8gdGhlIGBsaXN0ZW5lcmAu
Ci0gICAgICAgKgotICAgICAgICogICAgLSBgc3RyaW5nYDogRXZhbHVhdGVkIGFzIHtAbGluayBn
dWlkZS9leHByZXNzaW9uIGV4cHJlc3Npb259Ci0gICAgICAgKiAgICAtIGBmdW5jdGlvbihzY29w
ZSlgOiBjYWxsZWQgd2l0aCBjdXJyZW50IGBzY29wZWAgYXMgYSBwYXJhbWV0ZXIuCi0gICAgICAg
KiBAcGFyYW0geyhmdW5jdGlvbigpfHN0cmluZyk9fSBsaXN0ZW5lciBDYWxsYmFjayBjYWxsZWQg
d2hlbmV2ZXIgdGhlIHJldHVybiB2YWx1ZSBvZgotICAgICAgICogICB0aGUgYHdhdGNoRXhwcmVz
c2lvbmAgY2hhbmdlcy4KLSAgICAgICAqCi0gICAgICAgKiAgICAtIGBzdHJpbmdgOiBFdmFsdWF0
ZWQgYXMge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0KLSAgICAgICAqICAgIC0g
YGZ1bmN0aW9uKG5ld1ZhbHVlLCBvbGRWYWx1ZSwgc2NvcGUpYDogY2FsbGVkIHdpdGggY3VycmVu
dCBhbmQgcHJldmlvdXMgdmFsdWVzIGFzIHBhcmFtZXRlcnMuCi0gICAgICAgKgotICAgICAgICog
QHBhcmFtIHtib29sZWFuPX0gb2JqZWN0RXF1YWxpdHkgQ29tcGFyZSBvYmplY3QgZm9yIGVxdWFs
aXR5IHJhdGhlciB0aGFuIGZvciByZWZlcmVuY2UuCi0gICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rp
b24oKX0gUmV0dXJucyBhIGRlcmVnaXN0cmF0aW9uIGZ1bmN0aW9uIGZvciB0aGlzIGxpc3RlbmVy
LgotICAgICAgICovCi0gICAgICAkd2F0Y2g6IGZ1bmN0aW9uKHdhdGNoRXhwLCBsaXN0ZW5lciwg
b2JqZWN0RXF1YWxpdHkpIHsKLSAgICAgICAgdmFyIHNjb3BlID0gdGhpcywKLSAgICAgICAgICAg
IGdldCA9IGNvbXBpbGVUb0ZuKHdhdGNoRXhwLCAnd2F0Y2gnKSwKLSAgICAgICAgICAgIGFycmF5
ID0gc2NvcGUuJCR3YXRjaGVycywKLSAgICAgICAgICAgIHdhdGNoZXIgPSB7Ci0gICAgICAgICAg
ICAgIGZuOiBsaXN0ZW5lciwKLSAgICAgICAgICAgICAgbGFzdDogaW5pdFdhdGNoVmFsLAotICAg
ICAgICAgICAgICBnZXQ6IGdldCwKLSAgICAgICAgICAgICAgZXhwOiB3YXRjaEV4cCwKLSAgICAg
ICAgICAgICAgZXE6ICEhb2JqZWN0RXF1YWxpdHkKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAg
Ly8gaW4gdGhlIGNhc2UgdXNlciBwYXNzIHN0cmluZywgd2UgbmVlZCB0byBjb21waWxlIGl0LCBk
byB3ZSByZWFsbHkgbmVlZCB0aGlzID8KLSAgICAgICAgaWYgKCFpc0Z1bmN0aW9uKGxpc3RlbmVy
KSkgewotICAgICAgICAgIHZhciBsaXN0ZW5GbiA9IGNvbXBpbGVUb0ZuKGxpc3RlbmVyIHx8IG5v
b3AsICdsaXN0ZW5lcicpOwotICAgICAgICAgIHdhdGNoZXIuZm4gPSBmdW5jdGlvbihuZXdWYWws
IG9sZFZhbCwgc2NvcGUpIHtsaXN0ZW5GbihzY29wZSk7fTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmICghYXJyYXkpIHsKLSAgICAgICAgICBhcnJheSA9IHNjb3BlLiQkd2F0Y2hlcnMgPSBbXTsK
LSAgICAgICAgfQotICAgICAgICAvLyB3ZSB1c2UgdW5zaGlmdCBzaW5jZSB3ZSB1c2UgYSB3aGls
ZSBsb29wIGluICRkaWdlc3QgZm9yIHNwZWVkLgotICAgICAgICAvLyB0aGUgd2hpbGUgbG9vcCBy
ZWFkcyBpbiByZXZlcnNlIG9yZGVyLgotICAgICAgICBhcnJheS51bnNoaWZ0KHdhdGNoZXIpOwot
Ci0gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKLSAgICAgICAgICBhcnJheVJlbW92ZShhcnJh
eSwgd2F0Y2hlcik7Ci0gICAgICAgIH07Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAq
IEBuZ2RvYyBmdW5jdGlvbgotICAgICAgICogQG5hbWUgbmcuJHJvb3RTY29wZS5TY29wZSMkZGln
ZXN0Ci0gICAgICAgKiBAbWV0aG9kT2YgbmcuJHJvb3RTY29wZS5TY29wZQotICAgICAgICogQGZ1
bmN0aW9uCi0gICAgICAgKgotICAgICAgICogQGRlc2NyaXB0aW9uCi0gICAgICAgKiBQcm9jZXNz
ZXMgYWxsIG9mIHRoZSB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkd2F0Y2ggd2F0Y2hlcnN9
IG9mIHRoZSBjdXJyZW50IHNjb3BlIGFuZCBpdHMgY2hpbGRyZW4uCi0gICAgICAgKiBCZWNhdXNl
IGEge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJHdhdGNoIHdhdGNoZXJ9J3MgbGlzdGVuZXIg
Y2FuIGNoYW5nZSB0aGUgbW9kZWwsIHRoZQotICAgICAgICogYCRkaWdlc3QoKWAga2VlcHMgY2Fs
bGluZyB0aGUge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJHdhdGNoIHdhdGNoZXJzfSB1bnRp
bCBubyBtb3JlIGxpc3RlbmVycyBhcmUKLSAgICAgICAqIGZpcmluZy4gVGhpcyBtZWFucyB0aGF0
IGl0IGlzIHBvc3NpYmxlIHRvIGdldCBpbnRvIGFuIGluZmluaXRlIGxvb3AuIFRoaXMgZnVuY3Rp
b24gd2lsbCB0aHJvdwotICAgICAgICogYCdNYXhpbXVtIGl0ZXJhdGlvbiBsaW1pdCBleGNlZWRl
ZC4nYCBpZiB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgZXhjZWVkcyAxMC4KLSAgICAgICAqCi0g
ICAgICAgKiBVc3VhbGx5IHlvdSBkb24ndCBjYWxsIGAkZGlnZXN0KClgIGRpcmVjdGx5IGluCi0g
ICAgICAgKiB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nQ29udHJvbGxlciBjb250cm9sbGVyc30gb3Ig
aW4KLSAgICAgICAqIHtAbGluayBuZy4kY29tcGlsZVByb3ZpZGVyI2RpcmVjdGl2ZSBkaXJlY3Rp
dmVzfS4KLSAgICAgICAqIEluc3RlYWQgYSBjYWxsIHRvIHtAbGluayBuZy4kcm9vdFNjb3BlLlNj
b3BlIyRhcHBseSAkYXBwbHkoKX0gKHR5cGljYWxseSBmcm9tIHdpdGhpbiBhCi0gICAgICAgKiB7
QGxpbmsgbmcuJGNvbXBpbGVQcm92aWRlciNkaXJlY3RpdmUgZGlyZWN0aXZlc30pIHdpbGwgZm9y
Y2UgYSBgJGRpZ2VzdCgpYC4KLSAgICAgICAqCi0gICAgICAgKiBJZiB5b3Ugd2FudCB0byBiZSBu
b3RpZmllZCB3aGVuZXZlciBgJGRpZ2VzdCgpYCBpcyBjYWxsZWQsCi0gICAgICAgKiB5b3UgY2Fu
IHJlZ2lzdGVyIGEgYHdhdGNoRXhwcmVzc2lvbmAgZnVuY3Rpb24gIHdpdGgge0BsaW5rIG5nLiRy
b290U2NvcGUuU2NvcGUjJHdhdGNoICR3YXRjaCgpfQotICAgICAgICogd2l0aCBubyBgbGlzdGVu
ZXJgLgotICAgICAgICoKLSAgICAgICAqIFlvdSBtYXkgaGF2ZSBhIG5lZWQgdG8gY2FsbCBgJGRp
Z2VzdCgpYCBmcm9tIHdpdGhpbiB1bml0LXRlc3RzLCB0byBzaW11bGF0ZSB0aGUgc2NvcGUKLSAg
ICAgICAqIGxpZmUtY3ljbGUuCi0gICAgICAgKgotICAgICAgICogIyBFeGFtcGxlCi0gICAgICAg
KiA8cHJlPgotICAgICAgICAgICB2YXIgc2NvcGUgPSAuLi47Ci0gICAgICAgICAgIHNjb3BlLm5h
bWUgPSAnbWlza28nOwotICAgICAgICAgICBzY29wZS5jb3VudGVyID0gMDsKLQotICAgICAgICAg
ICBleHBlY3Qoc2NvcGUuY291bnRlcikudG9FcXVhbCgwKTsKLSAgICAgICAgICAgc2NvcGUuJHdh
dGNoKCduYW1lJywgZnVuY3Rpb24obmV3VmFsdWUsIG9sZFZhbHVlKSB7Ci0gICAgICAgICAgICAg
c2NvcGUuY291bnRlciA9IHNjb3BlLmNvdW50ZXIgKyAxOwotICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgZXhwZWN0KHNjb3BlLmNvdW50ZXIpLnRvRXF1YWwoMCk7Ci0KLSAgICAgICAgICAgc2Nv
cGUuJGRpZ2VzdCgpOwotICAgICAgICAgICAvLyBubyB2YXJpYWJsZSBjaGFuZ2UKLSAgICAgICAg
ICAgZXhwZWN0KHNjb3BlLmNvdW50ZXIpLnRvRXF1YWwoMCk7Ci0KLSAgICAgICAgICAgc2NvcGUu
bmFtZSA9ICdhZGFtJzsKLSAgICAgICAgICAgc2NvcGUuJGRpZ2VzdCgpOwotICAgICAgICAgICBl
eHBlY3Qoc2NvcGUuY291bnRlcikudG9FcXVhbCgxKTsKLSAgICAgICAqIDwvcHJlPgotICAgICAg
ICoKLSAgICAgICAqLwotICAgICAgJGRpZ2VzdDogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciB3
YXRjaCwgdmFsdWUsIGxhc3QsCi0gICAgICAgICAgICB3YXRjaGVycywKLSAgICAgICAgICAgIGFz
eW5jUXVldWUsCi0gICAgICAgICAgICBsZW5ndGgsCi0gICAgICAgICAgICBkaXJ0eSwgdHRsID0g
VFRMLAotICAgICAgICAgICAgbmV4dCwgY3VycmVudCwgdGFyZ2V0ID0gdGhpcywKLSAgICAgICAg
ICAgIHdhdGNoTG9nID0gW10sCi0gICAgICAgICAgICBsb2dJZHgsIGxvZ01zZzsKLQotICAgICAg
ICBiZWdpblBoYXNlKCckZGlnZXN0Jyk7Ci0KLSAgICAgICAgZG8gewotICAgICAgICAgIGRpcnR5
ID0gZmFsc2U7Ci0gICAgICAgICAgY3VycmVudCA9IHRhcmdldDsKLSAgICAgICAgICBkbyB7Ci0g
ICAgICAgICAgICBhc3luY1F1ZXVlID0gY3VycmVudC4kJGFzeW5jUXVldWU7Ci0gICAgICAgICAg
ICB3aGlsZShhc3luY1F1ZXVlLmxlbmd0aCkgewotICAgICAgICAgICAgICB0cnkgewotICAgICAg
ICAgICAgICAgIGN1cnJlbnQuJGV2YWwoYXN5bmNRdWV1ZS5zaGlmdCgpKTsKLSAgICAgICAgICAg
ICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgICAgICRleGNlcHRpb25IYW5kbGVyKGUpOwot
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKHdhdGNoZXJz
ID0gY3VycmVudC4kJHdhdGNoZXJzKSkgewotICAgICAgICAgICAgICAvLyBwcm9jZXNzIG91ciB3
YXRjaGVzCi0gICAgICAgICAgICAgIGxlbmd0aCA9IHdhdGNoZXJzLmxlbmd0aDsKLSAgICAgICAg
ICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAg
ICAgICAgICAgIHdhdGNoID0gd2F0Y2hlcnNbbGVuZ3RoXTsKLSAgICAgICAgICAgICAgICAgIC8v
IE1vc3QgY29tbW9uIHdhdGNoZXMgYXJlIG9uIHByaW1pdGl2ZXMsIGluIHdoaWNoIGNhc2Ugd2Ug
Y2FuIHNob3J0Ci0gICAgICAgICAgICAgICAgICAvLyBjaXJjdWl0IGl0IHdpdGggPT09IG9wZXJh
dG9yLCBvbmx5IHdoZW4gPT09IGZhaWxzIGRvIHdlIHVzZSAuZXF1YWxzCi0gICAgICAgICAgICAg
ICAgICBpZiAoKHZhbHVlID0gd2F0Y2guZ2V0KGN1cnJlbnQpKSAhPT0gKGxhc3QgPSB3YXRjaC5s
YXN0KSAmJgotICAgICAgICAgICAgICAgICAgICAgICEod2F0Y2guZXEKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgPyBlcXVhbHModmFsdWUsIGxhc3QpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIDogKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJiB0eXBlb2YgbGFzdCA9PSAnbnVtYmVy
JwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBpc05hTih2YWx1ZSkgJiYgaXNOYU4o
bGFzdCkpKSkgewotICAgICAgICAgICAgICAgICAgICBkaXJ0eSA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIHdhdGNoLmxhc3QgPSB3YXRjaC5lcSA/IGNvcHkodmFsdWUpIDogdmFsdWU7Ci0g
ICAgICAgICAgICAgICAgICAgIHdhdGNoLmZuKHZhbHVlLCAoKGxhc3QgPT09IGluaXRXYXRjaFZh
bCkgPyB2YWx1ZSA6IGxhc3QpLCBjdXJyZW50KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHR0
bCA8IDUpIHsKLSAgICAgICAgICAgICAgICAgICAgICBsb2dJZHggPSA0IC0gdHRsOwotICAgICAg
ICAgICAgICAgICAgICAgIGlmICghd2F0Y2hMb2dbbG9nSWR4XSkgd2F0Y2hMb2dbbG9nSWR4XSA9
IFtdOwotICAgICAgICAgICAgICAgICAgICAgIGxvZ01zZyA9IChpc0Z1bmN0aW9uKHdhdGNoLmV4
cCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2ZuOiAnICsgKHdhdGNoLmV4cC5uYW1l
IHx8IHdhdGNoLmV4cC50b1N0cmluZygpKQotICAgICAgICAgICAgICAgICAgICAgICAgICA6IHdh
dGNoLmV4cDsKLSAgICAgICAgICAgICAgICAgICAgICBsb2dNc2cgKz0gJzsgbmV3VmFsOiAnICsg
dG9Kc29uKHZhbHVlKSArICc7IG9sZFZhbDogJyArIHRvSnNvbihsYXN0KTsKLSAgICAgICAgICAg
ICAgICAgICAgICB3YXRjaExvZ1tsb2dJZHhdLnB1c2gobG9nTXNnKTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUp
IHsKLSAgICAgICAgICAgICAgICAgICRleGNlcHRpb25IYW5kbGVyKGUpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBJ
bnNhbml0eSBXYXJuaW5nOiBzY29wZSBkZXB0aC1maXJzdCB0cmF2ZXJzYWwKLSAgICAgICAgICAg
IC8vIHllcywgdGhpcyBjb2RlIGlzIGEgYml0IGNyYXp5LCBidXQgaXQgd29ya3MgYW5kIHdlIGhh
dmUgdGVzdHMgdG8gcHJvdmUgaXQhCi0gICAgICAgICAgICAvLyB0aGlzIHBpZWNlIHNob3VsZCBi
ZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgdHJhdmVyc2FsIGluICRicm9hZGNhc3QKLSAgICAgICAg
ICAgIGlmICghKG5leHQgPSAoY3VycmVudC4kJGNoaWxkSGVhZCB8fCAoY3VycmVudCAhPT0gdGFy
Z2V0ICYmIGN1cnJlbnQuJCRuZXh0U2libGluZykpKSkgewotICAgICAgICAgICAgICB3aGlsZShj
dXJyZW50ICE9PSB0YXJnZXQgJiYgIShuZXh0ID0gY3VycmVudC4kJG5leHRTaWJsaW5nKSkgewot
ICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LiRwYXJlbnQ7Ci0gICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IHdoaWxlICgoY3VycmVudCA9IG5leHQpKTsK
LQotICAgICAgICAgIGlmKGRpcnR5ICYmICEodHRsLS0pKSB7Ci0gICAgICAgICAgICBjbGVhclBo
YXNlKCk7Ci0gICAgICAgICAgICB0aHJvdyBFcnJvcihUVEwgKyAnICRkaWdlc3QoKSBpdGVyYXRp
b25zIHJlYWNoZWQuIEFib3J0aW5nIVxuJyArCi0gICAgICAgICAgICAgICAgJ1dhdGNoZXJzIGZp
cmVkIGluIHRoZSBsYXN0IDUgaXRlcmF0aW9uczogJyArIHRvSnNvbih3YXRjaExvZykpOwotICAg
ICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSAoZGlydHkgfHwgYXN5bmNRdWV1ZS5sZW5ndGgpOwot
Ci0gICAgICAgIGNsZWFyUGhhc2UoKTsKLSAgICAgIH0sCi0KLQotICAgICAgLyoqCi0gICAgICAg
KiBAbmdkb2MgZXZlbnQKLSAgICAgICAqIEBuYW1lIG5nLiRyb290U2NvcGUuU2NvcGUjJGRlc3Ry
b3kKLSAgICAgICAqIEBldmVudE9mIG5nLiRyb290U2NvcGUuU2NvcGUKLSAgICAgICAqIEBldmVu
dFR5cGUgYnJvYWRjYXN0IG9uIHNjb3BlIGJlaW5nIGRlc3Ryb3llZAotICAgICAgICoKLSAgICAg
ICAqIEBkZXNjcmlwdGlvbgotICAgICAgICogQnJvYWRjYXN0ZWQgd2hlbiBhIHNjb3BlIGFuZCBp
dHMgY2hpbGRyZW4gYXJlIGJlaW5nIGRlc3Ryb3llZC4KLSAgICAgICAqLwotCi0gICAgICAvKioK
LSAgICAgICAqIEBuZ2RvYyBmdW5jdGlvbgotICAgICAgICogQG5hbWUgbmcuJHJvb3RTY29wZS5T
Y29wZSMkZGVzdHJveQotICAgICAgICogQG1ldGhvZE9mIG5nLiRyb290U2NvcGUuU2NvcGUKLSAg
ICAgICAqIEBmdW5jdGlvbgotICAgICAgICoKLSAgICAgICAqIEBkZXNjcmlwdGlvbgotICAgICAg
ICogUmVtb3ZlcyB0aGUgY3VycmVudCBzY29wZSAoYW5kIGFsbCBvZiBpdHMgY2hpbGRyZW4pIGZy
b20gdGhlIHBhcmVudCBzY29wZS4gUmVtb3ZhbCBpbXBsaWVzCi0gICAgICAgKiB0aGF0IGNhbGxz
IHRvIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRkaWdlc3QgJGRpZ2VzdCgpfSB3aWxsIG5v
IGxvbmdlcgotICAgICAgICogcHJvcGFnYXRlIHRvIHRoZSBjdXJyZW50IHNjb3BlIGFuZCBpdHMg
Y2hpbGRyZW4uIFJlbW92YWwgYWxzbyBpbXBsaWVzIHRoYXQgdGhlIGN1cnJlbnQKLSAgICAgICAq
IHNjb3BlIGlzIGVsaWdpYmxlIGZvciBnYXJiYWdlIGNvbGxlY3Rpb24uCi0gICAgICAgKgotICAg
ICAgICogVGhlIGAkZGVzdHJveSgpYCBpcyB1c3VhbGx5IHVzZWQgYnkgZGlyZWN0aXZlcyBzdWNo
IGFzCi0gICAgICAgKiB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nUmVwZWF0IG5nUmVwZWF0fSBmb3Ig
bWFuYWdpbmcgdGhlCi0gICAgICAgKiB1bnJvbGxpbmcgb2YgdGhlIGxvb3AuCi0gICAgICAgKgot
ICAgICAgICogSnVzdCBiZWZvcmUgYSBzY29wZSBpcyBkZXN0cm95ZWQgYSBgJGRlc3Ryb3lgIGV2
ZW50IGlzIGJyb2FkY2FzdGVkIG9uIHRoaXMgc2NvcGUuCi0gICAgICAgKiBBcHBsaWNhdGlvbiBj
b2RlIGNhbiByZWdpc3RlciBhIGAkZGVzdHJveWAgZXZlbnQgaGFuZGxlciB0aGF0IHdpbGwgZ2l2
ZSBpdCBjaGFuY2UgdG8KLSAgICAgICAqIHBlcmZvcm0gYW55IG5lY2Vzc2FyeSBjbGVhbnVwLgot
ICAgICAgICovCi0gICAgICAkZGVzdHJveTogZnVuY3Rpb24oKSB7Ci0gICAgICAgIC8vIHdlIGNh
bid0IGRlc3Ryb3kgdGhlIHJvb3Qgc2NvcGUgb3IgYSBzY29wZSB0aGF0IGhhcyBiZWVuIGFscmVh
ZHkgZGVzdHJveWVkCi0gICAgICAgIGlmICgkcm9vdFNjb3BlID09IHRoaXMgfHwgdGhpcy4kJGRl
c3Ryb3llZCkgcmV0dXJuOwotICAgICAgICB2YXIgcGFyZW50ID0gdGhpcy4kcGFyZW50OwotCi0g
ICAgICAgIHRoaXMuJGJyb2FkY2FzdCgnJGRlc3Ryb3knKTsKLSAgICAgICAgdGhpcy4kJGRlc3Ry
b3llZCA9IHRydWU7Ci0KLSAgICAgICAgaWYgKHBhcmVudC4kJGNoaWxkSGVhZCA9PSB0aGlzKSBw
YXJlbnQuJCRjaGlsZEhlYWQgPSB0aGlzLiQkbmV4dFNpYmxpbmc7Ci0gICAgICAgIGlmIChwYXJl
bnQuJCRjaGlsZFRhaWwgPT0gdGhpcykgcGFyZW50LiQkY2hpbGRUYWlsID0gdGhpcy4kJHByZXZT
aWJsaW5nOwotICAgICAgICBpZiAodGhpcy4kJHByZXZTaWJsaW5nKSB0aGlzLiQkcHJldlNpYmxp
bmcuJCRuZXh0U2libGluZyA9IHRoaXMuJCRuZXh0U2libGluZzsKLSAgICAgICAgaWYgKHRoaXMu
JCRuZXh0U2libGluZykgdGhpcy4kJG5leHRTaWJsaW5nLiQkcHJldlNpYmxpbmcgPSB0aGlzLiQk
cHJldlNpYmxpbmc7Ci0KLSAgICAgICAgLy8gVGhpcyBpcyBib2d1cyBjb2RlIHRoYXQgd29ya3Mg
YXJvdW5kIENocm9tZSdzIEdDIGxlYWsKLSAgICAgICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5j
b20vYW5ndWxhci9hbmd1bGFyLmpzL2lzc3Vlcy8xMzEzI2lzc3VlY29tbWVudC0xMDM3ODQ1MQot
ICAgICAgICB0aGlzLiRwYXJlbnQgPSB0aGlzLiQkbmV4dFNpYmxpbmcgPSB0aGlzLiQkcHJldlNp
YmxpbmcgPSB0aGlzLiQkY2hpbGRIZWFkID0KLSAgICAgICAgICAgIHRoaXMuJCRjaGlsZFRhaWwg
PSBudWxsOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgKiBAbmdkb2MgZnVuY3Rpb24K
LSAgICAgICAqIEBuYW1lIG5nLiRyb290U2NvcGUuU2NvcGUjJGV2YWwKLSAgICAgICAqIEBtZXRo
b2RPZiBuZy4kcm9vdFNjb3BlLlNjb3BlCi0gICAgICAgKiBAZnVuY3Rpb24KLSAgICAgICAqCi0g
ICAgICAgKiBAZGVzY3JpcHRpb24KLSAgICAgICAqIEV4ZWN1dGVzIHRoZSBgZXhwcmVzc2lvbmAg
b24gdGhlIGN1cnJlbnQgc2NvcGUgcmV0dXJuaW5nIHRoZSByZXN1bHQuIEFueSBleGNlcHRpb25z
IGluIHRoZQotICAgICAgICogZXhwcmVzc2lvbiBhcmUgcHJvcGFnYXRlZCAodW5jYXVnaHQpLiBU
aGlzIGlzIHVzZWZ1bCB3aGVuIGV2YWx1YXRpbmcgQW5ndWxhciBleHByZXNzaW9ucy4KLSAgICAg
ICAqCi0gICAgICAgKiAjIEV4YW1wbGUKLSAgICAgICAqIDxwcmU+Ci0gICAgICAgICAgIHZhciBz
Y29wZSA9IG5nLiRyb290U2NvcGUuU2NvcGUoKTsKLSAgICAgICAgICAgc2NvcGUuYSA9IDE7Ci0g
ICAgICAgICAgIHNjb3BlLmIgPSAyOwotCi0gICAgICAgICAgIGV4cGVjdChzY29wZS4kZXZhbCgn
YStiJykpLnRvRXF1YWwoMyk7Ci0gICAgICAgICAgIGV4cGVjdChzY29wZS4kZXZhbChmdW5jdGlv
bihzY29wZSl7IHJldHVybiBzY29wZS5hICsgc2NvcGUuYjsgfSkpLnRvRXF1YWwoMyk7Ci0gICAg
ICAgKiA8L3ByZT4KLSAgICAgICAqCi0gICAgICAgKiBAcGFyYW0geyhzdHJpbmd8ZnVuY3Rpb24o
KSk9fSBleHByZXNzaW9uIEFuIGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBiZSBleGVjdXRlZC4KLSAg
ICAgICAqCi0gICAgICAgKiAgICAtIGBzdHJpbmdgOiBleGVjdXRlIHVzaW5nIHRoZSBydWxlcyBh
cyBkZWZpbmVkIGluICB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBleHByZXNzaW9ufS4KLSAgICAg
ICAqICAgIC0gYGZ1bmN0aW9uKHNjb3BlKWA6IGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIHdpdGggdGhl
IGN1cnJlbnQgYHNjb3BlYCBwYXJhbWV0ZXIuCi0gICAgICAgKgotICAgICAgICogQHJldHVybnMg
eyp9IFRoZSByZXN1bHQgb2YgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbi4KLSAgICAgICAqLwot
ICAgICAgJGV2YWw6IGZ1bmN0aW9uKGV4cHIsIGxvY2FscykgewotICAgICAgICByZXR1cm4gJHBh
cnNlKGV4cHIpKHRoaXMsIGxvY2Fscyk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAq
IEBuZ2RvYyBmdW5jdGlvbgotICAgICAgICogQG5hbWUgbmcuJHJvb3RTY29wZS5TY29wZSMkZXZh
bEFzeW5jCi0gICAgICAgKiBAbWV0aG9kT2YgbmcuJHJvb3RTY29wZS5TY29wZQotICAgICAgICog
QGZ1bmN0aW9uCi0gICAgICAgKgotICAgICAgICogQGRlc2NyaXB0aW9uCi0gICAgICAgKiBFeGVj
dXRlcyB0aGUgZXhwcmVzc2lvbiBvbiB0aGUgY3VycmVudCBzY29wZSBhdCBhIGxhdGVyIHBvaW50
IGluIHRpbWUuCi0gICAgICAgKgotICAgICAgICogVGhlIGAkZXZhbEFzeW5jYCBtYWtlcyBubyBn
dWFyYW50ZWVzIGFzIHRvIHdoZW4gdGhlIGBleHByZXNzaW9uYCB3aWxsIGJlIGV4ZWN1dGVkLCBv
bmx5IHRoYXQ6Ci0gICAgICAgKgotICAgICAgICogICAtIGl0IHdpbGwgZXhlY3V0ZSBpbiB0aGUg
Y3VycmVudCBzY3JpcHQgZXhlY3V0aW9uIGNvbnRleHQgKGJlZm9yZSBhbnkgRE9NIHJlbmRlcmlu
ZykuCi0gICAgICAgKiAgIC0gYXQgbGVhc3Qgb25lIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3Bl
IyRkaWdlc3QgJGRpZ2VzdCBjeWNsZX0gd2lsbCBiZSBwZXJmb3JtZWQgYWZ0ZXIKLSAgICAgICAq
ICAgICBgZXhwcmVzc2lvbmAgZXhlY3V0aW9uLgotICAgICAgICoKLSAgICAgICAqIEFueSBleGNl
cHRpb25zIGZyb20gdGhlIGV4ZWN1dGlvbiBvZiB0aGUgZXhwcmVzc2lvbiBhcmUgZm9yd2FyZGVk
IHRvIHRoZQotICAgICAgICoge0BsaW5rIG5nLiRleGNlcHRpb25IYW5kbGVyICRleGNlcHRpb25I
YW5kbGVyfSBzZXJ2aWNlLgotICAgICAgICoKLSAgICAgICAqIEBwYXJhbSB7KHN0cmluZ3xmdW5j
dGlvbigpKT19IGV4cHJlc3Npb24gQW4gYW5ndWxhciBleHByZXNzaW9uIHRvIGJlIGV4ZWN1dGVk
LgotICAgICAgICoKLSAgICAgICAqICAgIC0gYHN0cmluZ2A6IGV4ZWN1dGUgdXNpbmcgdGhlIHJ1
bGVzIGFzIGRlZmluZWQgaW4gIHtAbGluayBndWlkZS9leHByZXNzaW9uIGV4cHJlc3Npb259Lgot
ICAgICAgICogICAgLSBgZnVuY3Rpb24oc2NvcGUpYDogZXhlY3V0ZSB0aGUgZnVuY3Rpb24gd2l0
aCB0aGUgY3VycmVudCBgc2NvcGVgIHBhcmFtZXRlci4KLSAgICAgICAqCi0gICAgICAgKi8KLSAg
ICAgICRldmFsQXN5bmM6IGZ1bmN0aW9uKGV4cHIpIHsKLSAgICAgICAgdGhpcy4kJGFzeW5jUXVl
dWUucHVzaChleHByKTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICogQG5nZG9jIGZ1
bmN0aW9uCi0gICAgICAgKiBAbmFtZSBuZy4kcm9vdFNjb3BlLlNjb3BlIyRhcHBseQotICAgICAg
ICogQG1ldGhvZE9mIG5nLiRyb290U2NvcGUuU2NvcGUKLSAgICAgICAqIEBmdW5jdGlvbgotICAg
ICAgICoKLSAgICAgICAqIEBkZXNjcmlwdGlvbgotICAgICAgICogYCRhcHBseSgpYCBpcyB1c2Vk
IHRvIGV4ZWN1dGUgYW4gZXhwcmVzc2lvbiBpbiBhbmd1bGFyIGZyb20gb3V0c2lkZSBvZiB0aGUg
YW5ndWxhciBmcmFtZXdvcmsuCi0gICAgICAgKiAoRm9yIGV4YW1wbGUgZnJvbSBicm93c2VyIERP
TSBldmVudHMsIHNldFRpbWVvdXQsIFhIUiBvciB0aGlyZCBwYXJ0eSBsaWJyYXJpZXMpLgotICAg
ICAgICogQmVjYXVzZSB3ZSBhcmUgY2FsbGluZyBpbnRvIHRoZSBhbmd1bGFyIGZyYW1ld29yayB3
ZSBuZWVkIHRvIHBlcmZvcm0gcHJvcGVyIHNjb3BlIGxpZmUtY3ljbGUKLSAgICAgICAqIG9mIHtA
bGluayBuZy4kZXhjZXB0aW9uSGFuZGxlciBleGNlcHRpb24gaGFuZGxpbmd9LAotICAgICAgICog
e0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGRpZ2VzdCBleGVjdXRpbmcgd2F0Y2hlc30uCi0g
ICAgICAgKgotICAgICAgICogIyMgTGlmZSBjeWNsZQotICAgICAgICoKLSAgICAgICAqICMgUHNl
dWRvLUNvZGUgb2YgYCRhcHBseSgpYAotICAgICAgICogPHByZT4KLSAgICAgICAgICAgZnVuY3Rp
b24gJGFwcGx5KGV4cHIpIHsKLSAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgcmV0
dXJuICRldmFsKGV4cHIpOwotICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAg
ICAgICRleGNlcHRpb25IYW5kbGVyKGUpOwotICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAg
ICAgICAgICAgICAkcm9vdC4kZGlnZXN0KCk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICB9
Ci0gICAgICAgKiA8L3ByZT4KLSAgICAgICAqCi0gICAgICAgKgotICAgICAgICogU2NvcGUncyBg
JGFwcGx5KClgIG1ldGhvZCB0cmFuc2l0aW9ucyB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgc3RhZ2Vz
OgotICAgICAgICoKLSAgICAgICAqIDEuIFRoZSB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBleHBy
ZXNzaW9ufSBpcyBleGVjdXRlZCB1c2luZyB0aGUKLSAgICAgICAqICAgIHtAbGluayBuZy4kcm9v
dFNjb3BlLlNjb3BlIyRldmFsICRldmFsKCl9IG1ldGhvZC4KLSAgICAgICAqIDIuIEFueSBleGNl
cHRpb25zIGZyb20gdGhlIGV4ZWN1dGlvbiBvZiB0aGUgZXhwcmVzc2lvbiBhcmUgZm9yd2FyZGVk
IHRvIHRoZQotICAgICAgICogICAge0BsaW5rIG5nLiRleGNlcHRpb25IYW5kbGVyICRleGNlcHRp
b25IYW5kbGVyfSBzZXJ2aWNlLgotICAgICAgICogMy4gVGhlIHtAbGluayBuZy4kcm9vdFNjb3Bl
LlNjb3BlIyR3YXRjaCB3YXRjaH0gbGlzdGVuZXJzIGFyZSBmaXJlZCBpbW1lZGlhdGVseSBhZnRl
ciB0aGUgZXhwcmVzc2lvbgotICAgICAgICogICAgd2FzIGV4ZWN1dGVkIHVzaW5nIHRoZSB7QGxp
bmsgbmcuJHJvb3RTY29wZS5TY29wZSMkZGlnZXN0ICRkaWdlc3QoKX0gbWV0aG9kLgotICAgICAg
ICoKLSAgICAgICAqCi0gICAgICAgKiBAcGFyYW0geyhzdHJpbmd8ZnVuY3Rpb24oKSk9fSBleHAg
QW4gYW5ndWxhciBleHByZXNzaW9uIHRvIGJlIGV4ZWN1dGVkLgotICAgICAgICoKLSAgICAgICAq
ICAgIC0gYHN0cmluZ2A6IGV4ZWN1dGUgdXNpbmcgdGhlIHJ1bGVzIGFzIGRlZmluZWQgaW4ge0Bs
aW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0uCi0gICAgICAgKiAgICAtIGBmdW5jdGlv
bihzY29wZSlgOiBleGVjdXRlIHRoZSBmdW5jdGlvbiB3aXRoIGN1cnJlbnQgYHNjb3BlYCBwYXJh
bWV0ZXIuCi0gICAgICAgKgotICAgICAgICogQHJldHVybnMgeyp9IFRoZSByZXN1bHQgb2YgZXZh
bHVhdGluZyB0aGUgZXhwcmVzc2lvbi4KLSAgICAgICAqLwotICAgICAgJGFwcGx5OiBmdW5jdGlv
bihleHByKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgYmVnaW5QaGFzZSgnJGFwcGx5Jyk7
Ci0gICAgICAgICAgcmV0dXJuIHRoaXMuJGV2YWwoZXhwcik7Ci0gICAgICAgIH0gY2F0Y2ggKGUp
IHsKLSAgICAgICAgICAkZXhjZXB0aW9uSGFuZGxlcihlKTsKLSAgICAgICAgfSBmaW5hbGx5IHsK
LSAgICAgICAgICBjbGVhclBoYXNlKCk7Ci0gICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICRy
b290U2NvcGUuJGRpZ2VzdCgpOwotICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAg
ICRleGNlcHRpb25IYW5kbGVyKGUpOwotICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICogQG5nZG9jIGZ1bmN0
aW9uCi0gICAgICAgKiBAbmFtZSBuZy4kcm9vdFNjb3BlLlNjb3BlIyRvbgotICAgICAgICogQG1l
dGhvZE9mIG5nLiRyb290U2NvcGUuU2NvcGUKLSAgICAgICAqIEBmdW5jdGlvbgotICAgICAgICoK
LSAgICAgICAqIEBkZXNjcmlwdGlvbgotICAgICAgICogTGlzdGVucyBvbiBldmVudHMgb2YgYSBn
aXZlbiB0eXBlLiBTZWUge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGVtaXQgJGVtaXR9IGZv
ciBkaXNjdXNzaW9uIG9mCi0gICAgICAgKiBldmVudCBsaWZlIGN5Y2xlLgotICAgICAgICoKLSAg
ICAgICAqIFRoZSBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBmb3JtYXQgaXM6IGBmdW5jdGlvbihl
dmVudCwgYXJncy4uLilgLiBUaGUgYGV2ZW50YCBvYmplY3QKLSAgICAgICAqIHBhc3NlZCBpbnRv
IHRoZSBsaXN0ZW5lciBoYXMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOgotICAgICAgICoKLSAg
ICAgICAqICAgLSBgdGFyZ2V0U2NvcGVgIC0gYHtTY29wZX1gOiB0aGUgc2NvcGUgb24gd2hpY2gg
dGhlIGV2ZW50IHdhcyBgJGVtaXRgLWVkIG9yIGAkYnJvYWRjYXN0YC1lZC4KLSAgICAgICAqICAg
LSBgY3VycmVudFNjb3BlYCAtIGB7U2NvcGV9YDogdGhlIGN1cnJlbnQgc2NvcGUgd2hpY2ggaXMg
aGFuZGxpbmcgdGhlIGV2ZW50LgotICAgICAgICogICAtIGBuYW1lYCAtIGB7c3RyaW5nfWA6IE5h
bWUgb2YgdGhlIGV2ZW50LgotICAgICAgICogICAtIGBzdG9wUHJvcGFnYXRpb25gIC0gYHtmdW5j
dGlvbj19YDogY2FsbGluZyBgc3RvcFByb3BhZ2F0aW9uYCBmdW5jdGlvbiB3aWxsIGNhbmNlbCBm
dXJ0aGVyIGV2ZW50Ci0gICAgICAgKiAgICAgcHJvcGFnYXRpb24gKGF2YWlsYWJsZSBvbmx5IGZv
ciBldmVudHMgdGhhdCB3ZXJlIGAkZW1pdGAtZWQpLgotICAgICAgICogICAtIGBwcmV2ZW50RGVm
YXVsdGAgLSBge2Z1bmN0aW9ufWA6IGNhbGxpbmcgYHByZXZlbnREZWZhdWx0YCBzZXRzIGBkZWZh
dWx0UHJldmVudGVkYCBmbGFnIHRvIHRydWUuCi0gICAgICAgKiAgIC0gYGRlZmF1bHRQcmV2ZW50
ZWRgIC0gYHtib29sZWFufWA6IHRydWUgaWYgYHByZXZlbnREZWZhdWx0YCB3YXMgY2FsbGVkLgot
ICAgICAgICoKLSAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIEV2ZW50IG5hbWUgdG8gbGlz
dGVuIG9uLgotICAgICAgICogQHBhcmFtIHtmdW5jdGlvbihldmVudCwgYXJncy4uLil9IGxpc3Rl
bmVyIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgZXZlbnQgaXMgZW1pdHRlZC4KLSAgICAgICAq
IEByZXR1cm5zIHtmdW5jdGlvbigpfSBSZXR1cm5zIGEgZGVyZWdpc3RyYXRpb24gZnVuY3Rpb24g
Zm9yIHRoaXMgbGlzdGVuZXIuCi0gICAgICAgKi8KLSAgICAgICRvbjogZnVuY3Rpb24obmFtZSwg
bGlzdGVuZXIpIHsKLSAgICAgICAgdmFyIG5hbWVkTGlzdGVuZXJzID0gdGhpcy4kJGxpc3RlbmVy
c1tuYW1lXTsKLSAgICAgICAgaWYgKCFuYW1lZExpc3RlbmVycykgewotICAgICAgICAgIHRoaXMu
JCRsaXN0ZW5lcnNbbmFtZV0gPSBuYW1lZExpc3RlbmVycyA9IFtdOwotICAgICAgICB9Ci0gICAg
ICAgIG5hbWVkTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpOwotCi0gICAgICAgIHJldHVybiBmdW5j
dGlvbigpIHsKLSAgICAgICAgICBuYW1lZExpc3RlbmVyc1tpbmRleE9mKG5hbWVkTGlzdGVuZXJz
LCBsaXN0ZW5lcildID0gbnVsbDsKLSAgICAgICAgfTsKLSAgICAgIH0sCi0KLQotICAgICAgLyoq
Ci0gICAgICAgKiBAbmdkb2MgZnVuY3Rpb24KLSAgICAgICAqIEBuYW1lIG5nLiRyb290U2NvcGUu
U2NvcGUjJGVtaXQKLSAgICAgICAqIEBtZXRob2RPZiBuZy4kcm9vdFNjb3BlLlNjb3BlCi0gICAg
ICAgKiBAZnVuY3Rpb24KLSAgICAgICAqCi0gICAgICAgKiBAZGVzY3JpcHRpb24KLSAgICAgICAq
IERpc3BhdGNoZXMgYW4gZXZlbnQgYG5hbWVgIHVwd2FyZHMgdGhyb3VnaCB0aGUgc2NvcGUgaGll
cmFyY2h5IG5vdGlmeWluZyB0aGUKLSAgICAgICAqIHJlZ2lzdGVyZWQge0BsaW5rIG5nLiRyb290
U2NvcGUuU2NvcGUjJG9ufSBsaXN0ZW5lcnMuCi0gICAgICAgKgotICAgICAgICogVGhlIGV2ZW50
IGxpZmUgY3ljbGUgc3RhcnRzIGF0IHRoZSBzY29wZSBvbiB3aGljaCBgJGVtaXRgIHdhcyBjYWxs
ZWQuIEFsbAotICAgICAgICoge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJG9uIGxpc3RlbmVy
c30gbGlzdGVuaW5nIGZvciBgbmFtZWAgZXZlbnQgb24gdGhpcyBzY29wZSBnZXQgbm90aWZpZWQu
Ci0gICAgICAgKiBBZnRlcndhcmRzLCB0aGUgZXZlbnQgdHJhdmVyc2VzIHVwd2FyZHMgdG93YXJk
IHRoZSByb290IHNjb3BlIGFuZCBjYWxscyBhbGwgcmVnaXN0ZXJlZAotICAgICAgICogbGlzdGVu
ZXJzIGFsb25nIHRoZSB3YXkuIFRoZSBldmVudCB3aWxsIHN0b3AgcHJvcGFnYXRpbmcgaWYgb25l
IG9mIHRoZSBsaXN0ZW5lcnMgY2FuY2VscyBpdC4KLSAgICAgICAqCi0gICAgICAgKiBBbnkgZXhj
ZXB0aW9uIGVtaXR0ZWQgZnJvbSB0aGUge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJG9uIGxp
c3RlbmVyc30gd2lsbCBiZSBwYXNzZWQKLSAgICAgICAqIG9udG8gdGhlIHtAbGluayBuZy4kZXhj
ZXB0aW9uSGFuZGxlciAkZXhjZXB0aW9uSGFuZGxlcn0gc2VydmljZS4KLSAgICAgICAqCi0gICAg
ICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBFdmVudCBuYW1lIHRvIGVtaXQuCi0gICAgICAgKiBA
cGFyYW0gey4uLip9IGFyZ3MgT3B0aW9uYWwgc2V0IG9mIGFyZ3VtZW50cyB3aGljaCB3aWxsIGJl
IHBhc3NlZCBvbnRvIHRoZSBldmVudCBsaXN0ZW5lcnMuCi0gICAgICAgKiBAcmV0dXJuIHtPYmpl
Y3R9IEV2ZW50IG9iamVjdCwgc2VlIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRvbn0KLSAg
ICAgICAqLwotICAgICAgJGVtaXQ6IGZ1bmN0aW9uKG5hbWUsIGFyZ3MpIHsKLSAgICAgICAgdmFy
IGVtcHR5ID0gW10sCi0gICAgICAgICAgICBuYW1lZExpc3RlbmVycywKLSAgICAgICAgICAgIHNj
b3BlID0gdGhpcywKLSAgICAgICAgICAgIHN0b3BQcm9wYWdhdGlvbiA9IGZhbHNlLAotICAgICAg
ICAgICAgZXZlbnQgPSB7Ci0gICAgICAgICAgICAgIG5hbWU6IG5hbWUsCi0gICAgICAgICAgICAg
IHRhcmdldFNjb3BlOiBzY29wZSwKLSAgICAgICAgICAgICAgc3RvcFByb3BhZ2F0aW9uOiBmdW5j
dGlvbigpIHtzdG9wUHJvcGFnYXRpb24gPSB0cnVlO30sCi0gICAgICAgICAgICAgIHByZXZlbnRE
ZWZhdWx0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBldmVudC5kZWZhdWx0UHJldmVu
dGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgZGVmYXVsdFByZXZl
bnRlZDogZmFsc2UKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBsaXN0ZW5lckFyZ3MgPSBj
b25jYXQoW2V2ZW50XSwgYXJndW1lbnRzLCAxKSwKLSAgICAgICAgICAgIGksIGxlbmd0aDsKLQot
ICAgICAgICBkbyB7Ci0gICAgICAgICAgbmFtZWRMaXN0ZW5lcnMgPSBzY29wZS4kJGxpc3RlbmVy
c1tuYW1lXSB8fCBlbXB0eTsKLSAgICAgICAgICBldmVudC5jdXJyZW50U2NvcGUgPSBzY29wZTsK
LSAgICAgICAgICBmb3IgKGk9MCwgbGVuZ3RoPW5hbWVkTGlzdGVuZXJzLmxlbmd0aDsgaTxsZW5n
dGg7IGkrKykgewotCi0gICAgICAgICAgICAvLyBpZiBsaXN0ZW5lcnMgd2VyZSBkZXJlZ2lzdGVy
ZWQsIGRlZnJhZ21lbnQgdGhlIGFycmF5Ci0gICAgICAgICAgICBpZiAoIW5hbWVkTGlzdGVuZXJz
W2ldKSB7Ci0gICAgICAgICAgICAgIG5hbWVkTGlzdGVuZXJzLnNwbGljZShpLCAxKTsKLSAgICAg
ICAgICAgICAgaS0tOwotICAgICAgICAgICAgICBsZW5ndGgtLTsKLSAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICBu
YW1lZExpc3RlbmVyc1tpXS5hcHBseShudWxsLCBsaXN0ZW5lckFyZ3MpOwotICAgICAgICAgICAg
ICBpZiAoc3RvcFByb3BhZ2F0aW9uKSByZXR1cm4gZXZlbnQ7Ci0gICAgICAgICAgICB9IGNhdGNo
IChlKSB7Ci0gICAgICAgICAgICAgICRleGNlcHRpb25IYW5kbGVyKGUpOwotICAgICAgICAgICAg
fQotICAgICAgICAgIH0KLSAgICAgICAgICAvL3RyYXZlcnNlIHVwd2FyZHMKLSAgICAgICAgICBz
Y29wZSA9IHNjb3BlLiRwYXJlbnQ7Ci0gICAgICAgIH0gd2hpbGUgKHNjb3BlKTsKLQotICAgICAg
ICByZXR1cm4gZXZlbnQ7Ci0gICAgICB9LAotCi0KLSAgICAgIC8qKgotICAgICAgICogQG5nZG9j
IGZ1bmN0aW9uCi0gICAgICAgKiBAbmFtZSBuZy4kcm9vdFNjb3BlLlNjb3BlIyRicm9hZGNhc3QK
LSAgICAgICAqIEBtZXRob2RPZiBuZy4kcm9vdFNjb3BlLlNjb3BlCi0gICAgICAgKiBAZnVuY3Rp
b24KLSAgICAgICAqCi0gICAgICAgKiBAZGVzY3JpcHRpb24KLSAgICAgICAqIERpc3BhdGNoZXMg
YW4gZXZlbnQgYG5hbWVgIGRvd253YXJkcyB0byBhbGwgY2hpbGQgc2NvcGVzIChhbmQgdGhlaXIg
Y2hpbGRyZW4pIG5vdGlmeWluZyB0aGUKLSAgICAgICAqIHJlZ2lzdGVyZWQge0BsaW5rIG5nLiRy
b290U2NvcGUuU2NvcGUjJG9ufSBsaXN0ZW5lcnMuCi0gICAgICAgKgotICAgICAgICogVGhlIGV2
ZW50IGxpZmUgY3ljbGUgc3RhcnRzIGF0IHRoZSBzY29wZSBvbiB3aGljaCBgJGJyb2FkY2FzdGAg
d2FzIGNhbGxlZC4gQWxsCi0gICAgICAgKiB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkb24g
bGlzdGVuZXJzfSBsaXN0ZW5pbmcgZm9yIGBuYW1lYCBldmVudCBvbiB0aGlzIHNjb3BlIGdldCBu
b3RpZmllZC4KLSAgICAgICAqIEFmdGVyd2FyZHMsIHRoZSBldmVudCBwcm9wYWdhdGVzIHRvIGFs
bCBkaXJlY3QgYW5kIGluZGlyZWN0IHNjb3BlcyBvZiB0aGUgY3VycmVudCBzY29wZSBhbmQKLSAg
ICAgICAqIGNhbGxzIGFsbCByZWdpc3RlcmVkIGxpc3RlbmVycyBhbG9uZyB0aGUgd2F5LiBUaGUg
ZXZlbnQgY2Fubm90IGJlIGNhbmNlbGVkLgotICAgICAgICoKLSAgICAgICAqIEFueSBleGNlcHRp
b24gZW1taXRlZCBmcm9tIHRoZSB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkb24gbGlzdGVu
ZXJzfSB3aWxsIGJlIHBhc3NlZAotICAgICAgICogb250byB0aGUge0BsaW5rIG5nLiRleGNlcHRp
b25IYW5kbGVyICRleGNlcHRpb25IYW5kbGVyfSBzZXJ2aWNlLgotICAgICAgICoKLSAgICAgICAq
IEBwYXJhbSB7c3RyaW5nfSBuYW1lIEV2ZW50IG5hbWUgdG8gYnJvYWRjYXN0LgotICAgICAgICog
QHBhcmFtIHsuLi4qfSBhcmdzIE9wdGlvbmFsIHNldCBvZiBhcmd1bWVudHMgd2hpY2ggd2lsbCBi
ZSBwYXNzZWQgb250byB0aGUgZXZlbnQgbGlzdGVuZXJzLgotICAgICAgICogQHJldHVybiB7T2Jq
ZWN0fSBFdmVudCBvYmplY3QsIHNlZSB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkb259Ci0g
ICAgICAgKi8KLSAgICAgICRicm9hZGNhc3Q6IGZ1bmN0aW9uKG5hbWUsIGFyZ3MpIHsKLSAgICAg
ICAgdmFyIHRhcmdldCA9IHRoaXMsCi0gICAgICAgICAgICBjdXJyZW50ID0gdGFyZ2V0LAotICAg
ICAgICAgICAgbmV4dCA9IHRhcmdldCwKLSAgICAgICAgICAgIGV2ZW50ID0gewotICAgICAgICAg
ICAgICBuYW1lOiBuYW1lLAotICAgICAgICAgICAgICB0YXJnZXRTY29wZTogdGFyZ2V0LAotICAg
ICAgICAgICAgICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
ZXZlbnQuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgIH0sCi0gICAgICAg
ICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQ6IGZhbHNlCi0gICAgICAgICAgICB9LAotICAgICAgICAg
ICAgbGlzdGVuZXJBcmdzID0gY29uY2F0KFtldmVudF0sIGFyZ3VtZW50cywgMSksCi0gICAgICAg
ICAgICBsaXN0ZW5lcnMsIGksIGxlbmd0aDsKLQotICAgICAgICAvL2Rvd24gd2hpbGUgeW91IGNh
biwgdGhlbiB1cCBhbmQgbmV4dCBzaWJsaW5nIG9yIHVwIGFuZCBuZXh0IHNpYmxpbmcgdW50aWwg
YmFjayBhdCByb290Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICBjdXJyZW50ID0gbmV4dDsKLSAg
ICAgICAgICBldmVudC5jdXJyZW50U2NvcGUgPSBjdXJyZW50OwotICAgICAgICAgIGxpc3RlbmVy
cyA9IGN1cnJlbnQuJCRsaXN0ZW5lcnNbbmFtZV0gfHwgW107Ci0gICAgICAgICAgZm9yIChpPTAs
IGxlbmd0aCA9IGxpc3RlbmVycy5sZW5ndGg7IGk8bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAg
IC8vIGlmIGxpc3RlbmVycyB3ZXJlIGRlcmVnaXN0ZXJlZCwgZGVmcmFnbWVudCB0aGUgYXJyYXkK
LSAgICAgICAgICAgIGlmICghbGlzdGVuZXJzW2ldKSB7Ci0gICAgICAgICAgICAgIGxpc3RlbmVy
cy5zcGxpY2UoaSwgMSk7Ci0gICAgICAgICAgICAgIGktLTsKLSAgICAgICAgICAgICAgbGVuZ3Ro
LS07Ci0gICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICB0cnkgewotICAgICAgICAgICAgICBsaXN0ZW5lcnNbaV0uYXBwbHkobnVsbCwgbGlzdGVuZXJB
cmdzKTsKLSAgICAgICAgICAgIH0gY2F0Y2goZSkgewotICAgICAgICAgICAgICAkZXhjZXB0aW9u
SGFuZGxlcihlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAvLyBJ
bnNhbml0eSBXYXJuaW5nOiBzY29wZSBkZXB0aC1maXJzdCB0cmF2ZXJzYWwKLSAgICAgICAgICAv
LyB5ZXMsIHRoaXMgY29kZSBpcyBhIGJpdCBjcmF6eSwgYnV0IGl0IHdvcmtzIGFuZCB3ZSBoYXZl
IHRlc3RzIHRvIHByb3ZlIGl0IQotICAgICAgICAgIC8vIHRoaXMgcGllY2Ugc2hvdWxkIGJlIGtl
cHQgaW4gc3luYyB3aXRoIHRoZSB0cmF2ZXJzYWwgaW4gJGRpZ2VzdAotICAgICAgICAgIGlmICgh
KG5leHQgPSAoY3VycmVudC4kJGNoaWxkSGVhZCB8fCAoY3VycmVudCAhPT0gdGFyZ2V0ICYmIGN1
cnJlbnQuJCRuZXh0U2libGluZykpKSkgewotICAgICAgICAgICAgd2hpbGUoY3VycmVudCAhPT0g
dGFyZ2V0ICYmICEobmV4dCA9IGN1cnJlbnQuJCRuZXh0U2libGluZykpIHsKLSAgICAgICAgICAg
ICAgY3VycmVudCA9IGN1cnJlbnQuJHBhcmVudDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9
Ci0gICAgICAgIH0gd2hpbGUgKChjdXJyZW50ID0gbmV4dCkpOwotCi0gICAgICAgIHJldHVybiBl
dmVudDsKLSAgICAgIH0KLSAgICB9OwotCi0gICAgdmFyICRyb290U2NvcGUgPSBuZXcgU2NvcGUo
KTsKLQotICAgIHJldHVybiAkcm9vdFNjb3BlOwotCi0KLSAgICBmdW5jdGlvbiBiZWdpblBoYXNl
KHBoYXNlKSB7Ci0gICAgICBpZiAoJHJvb3RTY29wZS4kJHBoYXNlKSB7Ci0gICAgICAgIHRocm93
IEVycm9yKCRyb290U2NvcGUuJCRwaGFzZSArICcgYWxyZWFkeSBpbiBwcm9ncmVzcycpOwotICAg
ICAgfQotCi0gICAgICAkcm9vdFNjb3BlLiQkcGhhc2UgPSBwaGFzZTsKLSAgICB9Ci0KLSAgICBm
dW5jdGlvbiBjbGVhclBoYXNlKCkgewotICAgICAgJHJvb3RTY29wZS4kJHBoYXNlID0gbnVsbDsK
LSAgICB9Ci0KLSAgICBmdW5jdGlvbiBjb21waWxlVG9GbihleHAsIG5hbWUpIHsKLSAgICAgIHZh
ciBmbiA9ICRwYXJzZShleHApOwotICAgICAgYXNzZXJ0QXJnRm4oZm4sIG5hbWUpOwotICAgICAg
cmV0dXJuIGZuOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIGZ1bmN0aW9uIHVzZWQgYXMgYW4g
aW5pdGlhbCB2YWx1ZSBmb3Igd2F0Y2hlcnMuCi0gICAgICogYmVjYXVzZSBpdCdzIHVuaXF1ZSB3
ZSBjYW4gZWFzaWx5IHRlbGwgaXQgYXBhcnQgZnJvbSBvdGhlciB2YWx1ZXMKLSAgICAgKi8KLSAg
ICBmdW5jdGlvbiBpbml0V2F0Y2hWYWwoKSB7fQotICB9XTsKLX0KLQotLyoqCi0gKiAhISEgVGhp
cyBpcyBhbiB1bmRvY3VtZW50ZWQgInByaXZhdGUiIHNlcnZpY2UgISEhCi0gKgotICogQG5hbWUg
bmcuJHNuaWZmZXIKLSAqIEByZXF1aXJlcyAkd2luZG93Ci0gKgotICogQHByb3BlcnR5IHtib29s
ZWFufSBoaXN0b3J5IERvZXMgdGhlIGJyb3dzZXIgc3VwcG9ydCBodG1sNSBoaXN0b3J5IGFwaSA/
Ci0gKiBAcHJvcGVydHkge2Jvb2xlYW59IGhhc2hjaGFuZ2UgRG9lcyB0aGUgYnJvd3NlciBzdXBw
b3J0IGhhc2hjaGFuZ2UgZXZlbnQgPwotICoKLSAqIEBkZXNjcmlwdGlvbgotICogVGhpcyBpcyB2
ZXJ5IHNpbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiB0ZXN0aW5nIGJyb3dzZXIncyBmZWF0dXJlcy4K
LSAqLwotZnVuY3Rpb24gJFNuaWZmZXJQcm92aWRlcigpIHsKLSAgdGhpcy4kZ2V0ID0gWyckd2lu
ZG93JywgZnVuY3Rpb24oJHdpbmRvdykgewotICAgIHZhciBldmVudFN1cHBvcnQgPSB7fSwKLSAg
ICAgICAgYW5kcm9pZCA9IGludCgoL2FuZHJvaWQgKFxkKykvLmV4ZWMobG93ZXJjYXNlKCR3aW5k
b3cubmF2aWdhdG9yLnVzZXJBZ2VudCkpIHx8IFtdKVsxXSk7Ci0KLSAgICByZXR1cm4gewotICAg
ICAgLy8gQW5kcm9pZCBoYXMgaGlzdG9yeS5wdXNoU3RhdGUsIGJ1dCBpdCBkb2VzIG5vdCB1cGRh
dGUgbG9jYXRpb24gY29ycmVjdGx5Ci0gICAgICAvLyBzbyBsZXQncyBub3QgdXNlIHRoZSBoaXN0
b3J5IEFQSSBhdCBhbGwuCi0gICAgICAvLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvYW5kcm9p
ZC9pc3N1ZXMvZGV0YWlsP2lkPTE3NDcxCi0gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5n
dWxhci9hbmd1bGFyLmpzL2lzc3Vlcy85MDQKLSAgICAgIGhpc3Rvcnk6ICEhKCR3aW5kb3cuaGlz
dG9yeSAmJiAkd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlICYmICEoYW5kcm9pZCA8IDQpKSwKLSAg
ICAgIGhhc2hjaGFuZ2U6ICdvbmhhc2hjaGFuZ2UnIGluICR3aW5kb3cgJiYKLSAgICAgICAgICAg
ICAgICAgIC8vIElFOCBjb21wYXRpYmxlIG1vZGUgbGllcwotICAgICAgICAgICAgICAgICAgKCEk
d2luZG93LmRvY3VtZW50LmRvY3VtZW50TW9kZSB8fCAkd2luZG93LmRvY3VtZW50LmRvY3VtZW50
TW9kZSA+IDcpLAotICAgICAgaGFzRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgICAgIC8v
IElFOSBpbXBsZW1lbnRzICdpbnB1dCcgZXZlbnQgaXQncyBzbyBmdWJhcmVkIHRoYXQgd2UgcmF0
aGVyIHByZXRlbmQgdGhhdCBpdCBkb2Vzbid0IGhhdmUKLSAgICAgICAgLy8gaXQuIEluIHBhcnRp
Y3VsYXIgdGhlIGV2ZW50IGlzIG5vdCBmaXJlZCB3aGVuIGJhY2tzcGFjZSBvciBkZWxldGUga2V5
IGFyZSBwcmVzc2VkIG9yCi0gICAgICAgIC8vIHdoZW4gY3V0IG9wZXJhdGlvbiBpcyBwZXJmb3Jt
ZWQuCi0gICAgICAgIGlmIChldmVudCA9PSAnaW5wdXQnICYmIG1zaWUgPT0gOSkgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIGlmIChpc1VuZGVmaW5lZChldmVudFN1cHBvcnRbZXZlbnRdKSkgewot
ICAgICAgICAgIHZhciBkaXZFbG0gPSAkd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpOwotICAgICAgICAgIGV2ZW50U3VwcG9ydFtldmVudF0gPSAnb24nICsgZXZlbnQgaW4gZGl2
RWxtOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGV2ZW50U3VwcG9ydFtldmVudF07Ci0g
ICAgICB9LAotICAgICAgLy8gVE9ETyhpKTogY3VycmVudGx5IHRoZXJlIGlzIG5vIHdheSB0byBm
ZWF0dXJlIGRldGVjdCBDU1Agd2l0aG91dCB0cmlnZ2VyaW5nIGFsZXJ0cwotICAgICAgY3NwOiBm
YWxzZQotICAgIH07Ci0gIH1dOwotfQotCi0vKioKLSAqIEBuZ2RvYyBvYmplY3QKLSAqIEBuYW1l
IG5nLiR3aW5kb3cKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIEEgcmVmZXJlbmNlIHRvIHRoZSBi
cm93c2VyJ3MgYHdpbmRvd2Agb2JqZWN0LiBXaGlsZSBgd2luZG93YAotICogaXMgZ2xvYmFsbHkg
YXZhaWxhYmxlIGluIEphdmFTY3JpcHQsIGl0IGNhdXNlcyB0ZXN0YWJpbGl0eSBwcm9ibGVtcywg
YmVjYXVzZQotICogaXQgaXMgYSBnbG9iYWwgdmFyaWFibGUuIEluIGFuZ3VsYXIgd2UgYWx3YXlz
IHJlZmVyIHRvIGl0IHRocm91Z2ggdGhlCi0gKiBgJHdpbmRvd2Agc2VydmljZSwgc28gaXQgbWF5
IGJlIG92ZXJyaWRlbiwgcmVtb3ZlZCBvciBtb2NrZWQgZm9yIHRlc3RpbmcuCi0gKgotICogQWxs
IGV4cHJlc3Npb25zIGFyZSBldmFsdWF0ZWQgd2l0aCByZXNwZWN0IHRvIGN1cnJlbnQgc2NvcGUg
c28gdGhleSBkb24ndAotICogc3VmZmVyIGZyb20gd2luZG93IGdsb2JhbGl0eS4KLSAqCi0gKiBA
ZXhhbXBsZQotICAgPGRvYzpleGFtcGxlPgotICAgICA8ZG9jOnNvdXJjZT4KLSAgICAgICA8c2Ny
aXB0PgotICAgICAgICAgZnVuY3Rpb24gQ3RybCgkc2NvcGUsICR3aW5kb3cpIHsKLSAgICAgICAg
ICAgJHNjb3BlLiR3aW5kb3cgPSAkd2luZG93OwotICAgICAgICAgICAkc2NvcGUuZ3JlZXRpbmcg
PSAnSGVsbG8sIFdvcmxkISc7Ci0gICAgICAgICB9Ci0gICAgICAgPC9zY3JpcHQ+Ci0gICAgICAg
PGRpdiBuZy1jb250cm9sbGVyPSJDdHJsIj4KLSAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBu
Zy1tb2RlbD0iZ3JlZXRpbmciIC8+Ci0gICAgICAgICA8YnV0dG9uIG5nLWNsaWNrPSIkd2luZG93
LmFsZXJ0KGdyZWV0aW5nKSI+QUxFUlQ8L2J1dHRvbj4KLSAgICAgICA8L2Rpdj4KLSAgICAgPC9k
b2M6c291cmNlPgotICAgICA8ZG9jOnNjZW5hcmlvPgotICAgICAgaXQoJ3Nob3VsZCBkaXNwbGF5
IHRoZSBncmVldGluZyBpbiB0aGUgaW5wdXQgYm94JywgZnVuY3Rpb24oKSB7Ci0gICAgICAgaW5w
dXQoJ2dyZWV0aW5nJykuZW50ZXIoJ0hlbGxvLCBFMkUgVGVzdHMnKTsKLSAgICAgICAvLyBJZiB3
ZSBjbGljayB0aGUgYnV0dG9uIGl0IHdpbGwgYmxvY2sgdGhlIHRlc3QgcnVubmVyCi0gICAgICAg
Ly8gZWxlbWVudCgnOmJ1dHRvbicpLmNsaWNrKCk7Ci0gICAgICB9KTsKLSAgICAgPC9kb2M6c2Nl
bmFyaW8+Ci0gICA8L2RvYzpleGFtcGxlPgotICovCi1mdW5jdGlvbiAkV2luZG93UHJvdmlkZXIo
KXsKLSAgdGhpcy4kZ2V0ID0gdmFsdWVGbih3aW5kb3cpOwotfQotCi0vKioKLSAqIFBhcnNlIGhl
YWRlcnMgaW50byBrZXkgdmFsdWUgb2JqZWN0Ci0gKgotICogQHBhcmFtIHtzdHJpbmd9IGhlYWRl
cnMgUmF3IGhlYWRlcnMgYXMgYSBzdHJpbmcKLSAqIEByZXR1cm5zIHtPYmplY3R9IFBhcnNlZCBo
ZWFkZXJzIGFzIGtleSB2YWx1ZSBvYmplY3QKLSAqLwotZnVuY3Rpb24gcGFyc2VIZWFkZXJzKGhl
YWRlcnMpIHsKLSAgdmFyIHBhcnNlZCA9IHt9LCBrZXksIHZhbCwgaTsKLQotICBpZiAoIWhlYWRl
cnMpIHJldHVybiBwYXJzZWQ7Ci0KLSAgZm9yRWFjaChoZWFkZXJzLnNwbGl0KCdcbicpLCBmdW5j
dGlvbihsaW5lKSB7Ci0gICAgaSA9IGxpbmUuaW5kZXhPZignOicpOwotICAgIGtleSA9IGxvd2Vy
Y2FzZSh0cmltKGxpbmUuc3Vic3RyKDAsIGkpKSk7Ci0gICAgdmFsID0gdHJpbShsaW5lLnN1YnN0
cihpICsgMSkpOwotCi0gICAgaWYgKGtleSkgewotICAgICAgaWYgKHBhcnNlZFtrZXldKSB7Ci0g
ICAgICAgIHBhcnNlZFtrZXldICs9ICcsICcgKyB2YWw7Ci0gICAgICB9IGVsc2UgewotICAgICAg
ICBwYXJzZWRba2V5XSA9IHZhbDsKLSAgICAgIH0KLSAgICB9Ci0gIH0pOwotCi0gIHJldHVybiBw
YXJzZWQ7Ci19Ci0KLQotLyoqCi0gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBwcm92aWRlcyBh
Y2Nlc3MgdG8gcGFyc2VkIGhlYWRlcnMuCi0gKgotICogSGVhZGVycyBhcmUgbGF6eSBwYXJzZWQg
d2hlbiBmaXJzdCByZXF1ZXN0ZWQuCi0gKiBAc2VlIHBhcnNlSGVhZGVycwotICoKLSAqIEBwYXJh
bSB7KHN0cmluZ3xPYmplY3QpfSBoZWFkZXJzIEhlYWRlcnMgdG8gcHJvdmlkZSBhY2Nlc3MgdG8u
Ci0gKiBAcmV0dXJucyB7ZnVuY3Rpb24oc3RyaW5nPSl9IFJldHVybnMgYSBnZXR0ZXIgZnVuY3Rp
b24gd2hpY2ggaWYgY2FsbGVkIHdpdGg6Ci0gKgotICogICAtIGlmIGNhbGxlZCB3aXRoIHNpbmds
ZSBhbiBhcmd1bWVudCByZXR1cm5zIGEgc2luZ2xlIGhlYWRlciB2YWx1ZSBvciBudWxsCi0gKiAg
IC0gaWYgY2FsbGVkIHdpdGggbm8gYXJndW1lbnRzIHJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5p
bmcgYWxsIGhlYWRlcnMuCi0gKi8KLWZ1bmN0aW9uIGhlYWRlcnNHZXR0ZXIoaGVhZGVycykgewot
ICB2YXIgaGVhZGVyc09iaiA9IGlzT2JqZWN0KGhlYWRlcnMpID8gaGVhZGVycyA6IHVuZGVmaW5l
ZDsKLQotICByZXR1cm4gZnVuY3Rpb24obmFtZSkgewotICAgIGlmICghaGVhZGVyc09iaikgaGVh
ZGVyc09iaiA9ICBwYXJzZUhlYWRlcnMoaGVhZGVycyk7Ci0KLSAgICBpZiAobmFtZSkgewotICAg
ICAgcmV0dXJuIGhlYWRlcnNPYmpbbG93ZXJjYXNlKG5hbWUpXSB8fCBudWxsOwotICAgIH0KLQot
ICAgIHJldHVybiBoZWFkZXJzT2JqOwotICB9OwotfQotCi0KLS8qKgotICogQ2hhaW4gYWxsIGdp
dmVuIGZ1bmN0aW9ucwotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IgYm90aCByZXF1
ZXN0IGFuZCByZXNwb25zZSB0cmFuc2Zvcm1pbmcKLSAqCi0gKiBAcGFyYW0geyp9IGRhdGEgRGF0
YSB0byB0cmFuc2Zvcm0uCi0gKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZz0pfSBoZWFkZXJzIEh0
dHAgaGVhZGVycyBnZXR0ZXIgZm4uCi0gKiBAcGFyYW0geyhmdW5jdGlvbnxBcnJheS48ZnVuY3Rp
b24+KX0gZm5zIEZ1bmN0aW9uIG9yIGFuIGFycmF5IG9mIGZ1bmN0aW9ucy4KLSAqIEByZXR1cm5z
IHsqfSBUcmFuc2Zvcm1lZCBkYXRhLgotICovCi1mdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGRhdGEs
IGhlYWRlcnMsIGZucykgewotICBpZiAoaXNGdW5jdGlvbihmbnMpKQotICAgIHJldHVybiBmbnMo
ZGF0YSwgaGVhZGVycyk7Ci0KLSAgZm9yRWFjaChmbnMsIGZ1bmN0aW9uKGZuKSB7Ci0gICAgZGF0
YSA9IGZuKGRhdGEsIGhlYWRlcnMpOwotICB9KTsKLQotICByZXR1cm4gZGF0YTsKLX0KLQotCi1m
dW5jdGlvbiBpc1N1Y2Nlc3Moc3RhdHVzKSB7Ci0gIHJldHVybiAyMDAgPD0gc3RhdHVzICYmIHN0
YXR1cyA8IDMwMDsKLX0KLQotCi1mdW5jdGlvbiAkSHR0cFByb3ZpZGVyKCkgewotICB2YXIgSlNP
Tl9TVEFSVCA9IC9eXHMqKFxbfFx7W15ce10pLywKLSAgICAgIEpTT05fRU5EID0gL1tcfVxdXVxz
KiQvLAotICAgICAgUFJPVEVDVElPTl9QUkVGSVggPSAvXlwpXF1cfScsP1xuLzsKLQotICB2YXIg
JGNvbmZpZyA9IHRoaXMuZGVmYXVsdHMgPSB7Ci0gICAgLy8gdHJhbnNmb3JtIGluY29taW5nIHJl
c3BvbnNlIGRhdGEKLSAgICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uKGRhdGEpIHsKLSAg
ICAgIGlmIChpc1N0cmluZyhkYXRhKSkgewotICAgICAgICAvLyBzdHJpcCBqc29uIHZ1bG5lcmFi
aWxpdHkgcHJvdGVjdGlvbiBwcmVmaXgKLSAgICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZShQUk9U
RUNUSU9OX1BSRUZJWCwgJycpOwotICAgICAgICBpZiAoSlNPTl9TVEFSVC50ZXN0KGRhdGEpICYm
IEpTT05fRU5ELnRlc3QoZGF0YSkpCi0gICAgICAgICAgZGF0YSA9IGZyb21Kc29uKGRhdGEsIHRy
dWUpOwotICAgICAgfQotICAgICAgcmV0dXJuIGRhdGE7Ci0gICAgfV0sCi0KLSAgICAvLyB0cmFu
c2Zvcm0gb3V0Z29pbmcgcmVxdWVzdCBkYXRhCi0gICAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0
aW9uKGQpIHsKLSAgICAgIHJldHVybiBpc09iamVjdChkKSAmJiAhaXNGaWxlKGQpID8gdG9Kc29u
KGQpIDogZDsKLSAgICB9XSwKLQotICAgIC8vIGRlZmF1bHQgaGVhZGVycwotICAgIGhlYWRlcnM6
IHsKLSAgICAgIGNvbW1vbjogewotICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24s
IHRleHQvcGxhaW4sICovKicsCi0gICAgICAgICdYLVJlcXVlc3RlZC1XaXRoJzogJ1hNTEh0dHBS
ZXF1ZXN0JwotICAgICAgfSwKLSAgICAgIHBvc3Q6IHsnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0
aW9uL2pzb247Y2hhcnNldD11dGYtOCd9LAotICAgICAgcHV0OiAgeydDb250ZW50LVR5cGUnOiAn
YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04J30KLSAgICB9Ci0gIH07Ci0KLSAgdmFyIHBy
b3ZpZGVyUmVzcG9uc2VJbnRlcmNlcHRvcnMgPSB0aGlzLnJlc3BvbnNlSW50ZXJjZXB0b3JzID0g
W107Ci0KLSAgdGhpcy4kZ2V0ID0gWyckaHR0cEJhY2tlbmQnLCAnJGJyb3dzZXInLCAnJGNhY2hl
RmFjdG9yeScsICckcm9vdFNjb3BlJywgJyRxJywgJyRpbmplY3RvcicsCi0gICAgICBmdW5jdGlv
bigkaHR0cEJhY2tlbmQsICRicm93c2VyLCAkY2FjaGVGYWN0b3J5LCAkcm9vdFNjb3BlLCAkcSwg
JGluamVjdG9yKSB7Ci0KLSAgICB2YXIgZGVmYXVsdENhY2hlID0gJGNhY2hlRmFjdG9yeSgnJGh0
dHAnKSwKLSAgICAgICAgcmVzcG9uc2VJbnRlcmNlcHRvcnMgPSBbXTsKLQotICAgIGZvckVhY2go
cHJvdmlkZXJSZXNwb25zZUludGVyY2VwdG9ycywgZnVuY3Rpb24oaW50ZXJjZXB0b3IpIHsKLSAg
ICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JzLnB1c2goCi0gICAgICAgICAgaXNTdHJpbmcoaW50ZXJj
ZXB0b3IpCi0gICAgICAgICAgICAgID8gJGluamVjdG9yLmdldChpbnRlcmNlcHRvcikKLSAgICAg
ICAgICAgICAgOiAkaW5qZWN0b3IuaW52b2tlKGludGVyY2VwdG9yKQotICAgICAgKTsKLSAgICB9
KTsKLQotCi0gICAgLyoqCi0gICAgICogQG5nZG9jIGZ1bmN0aW9uCi0gICAgICogQG5hbWUgbmcu
JGh0dHAKLSAgICAgKiBAcmVxdWlyZXMgJGh0dHBCYWNrZW5kCi0gICAgICogQHJlcXVpcmVzICRi
cm93c2VyCi0gICAgICogQHJlcXVpcmVzICRjYWNoZUZhY3RvcnkKLSAgICAgKiBAcmVxdWlyZXMg
JHJvb3RTY29wZQotICAgICAqIEByZXF1aXJlcyAkcQotICAgICAqIEByZXF1aXJlcyAkaW5qZWN0
b3IKLSAgICAgKgotICAgICAqIEBkZXNjcmlwdGlvbgotICAgICAqIFRoZSBgJGh0dHBgIHNlcnZp
Y2UgaXMgYSBjb3JlIEFuZ3VsYXIgc2VydmljZSB0aGF0IGZhY2lsaXRhdGVzIGNvbW11bmljYXRp
b24gd2l0aCB0aGUgcmVtb3RlCi0gICAgICogSFRUUCBzZXJ2ZXJzIHZpYSB0aGUgYnJvd3Nlcidz
IHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi94bWxodHRwcmVxdWVzdAot
ICAgICAqIFhNTEh0dHBSZXF1ZXN0fSBvYmplY3Qgb3IgdmlhIHtAbGluayBodHRwOi8vZW4ud2lr
aXBlZGlhLm9yZy93aWtpL0pTT05QIEpTT05QfS4KLSAgICAgKgotICAgICAqIEZvciB1bml0IHRl
c3RpbmcgYXBwbGljYXRpb25zIHRoYXQgdXNlIGAkaHR0cGAgc2VydmljZSwgc2VlCi0gICAgICog
e0BsaW5rIG5nTW9jay4kaHR0cEJhY2tlbmQgJGh0dHBCYWNrZW5kIG1vY2t9LgotICAgICAqCi0g
ICAgICogRm9yIGEgaGlnaGVyIGxldmVsIG9mIGFic3RyYWN0aW9uLCBwbGVhc2UgY2hlY2sgb3V0
IHRoZSB7QGxpbmsgbmdSZXNvdXJjZS4kcmVzb3VyY2UKLSAgICAgKiAkcmVzb3VyY2V9IHNlcnZp
Y2UuCi0gICAgICoKLSAgICAgKiBUaGUgJGh0dHAgQVBJIGlzIGJhc2VkIG9uIHRoZSB7QGxpbmsg
bmcuJHEgZGVmZXJyZWQvcHJvbWlzZSBBUElzfSBleHBvc2VkIGJ5Ci0gICAgICogdGhlICRxIHNl
cnZpY2UuIFdoaWxlIGZvciBzaW1wbGUgdXNhZ2UgcGF0dGVybnMgdGhpcyBkb2Vzbid0IG1hdHRl
ciBtdWNoLCBmb3IgYWR2YW5jZWQgdXNhZ2UKLSAgICAgKiBpdCBpcyBpbXBvcnRhbnQgdG8gZmFt
aWxpYXJpemUgeW91cnNlbGYgd2l0aCB0aGVzZSBBUElzIGFuZCB0aGUgZ3VhcmFudGVlcyB0aGV5
IHByb3ZpZGUuCi0gICAgICoKLSAgICAgKgotICAgICAqICMgR2VuZXJhbCB1c2FnZQotICAgICAq
IFRoZSBgJGh0dHBgIHNlcnZpY2UgaXMgYSBmdW5jdGlvbiB3aGljaCB0YWtlcyBhIHNpbmdsZSBh
cmd1bWVudCDigJQgYSBjb25maWd1cmF0aW9uIG9iamVjdCDigJQKLSAgICAgKiB0aGF0IGlzIHVz
ZWQgdG8gZ2VuZXJhdGUgYW4gSFRUUCByZXF1ZXN0IGFuZCByZXR1cm5zICBhIHtAbGluayBuZy4k
cSBwcm9taXNlfQotICAgICAqIHdpdGggdHdvICRodHRwIHNwZWNpZmljIG1ldGhvZHM6IGBzdWNj
ZXNzYCBhbmQgYGVycm9yYC4KLSAgICAgKgotICAgICAqIDxwcmU+Ci0gICAgICogICAkaHR0cCh7
bWV0aG9kOiAnR0VUJywgdXJsOiAnL3NvbWVVcmwnfSkuCi0gICAgICogICAgIHN1Y2Nlc3MoZnVu
Y3Rpb24oZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHsKLSAgICAgKiAgICAgICAvLyB0
aGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGFzeW5jaHJvbm91c2x5Ci0gICAgICogICAgICAg
Ly8gd2hlbiB0aGUgcmVzcG9uc2UgaXMgYXZhaWxhYmxlCi0gICAgICogICAgIH0pLgotICAgICAq
ICAgICBlcnJvcihmdW5jdGlvbihkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykgewotICAg
ICAqICAgICAgIC8vIGNhbGxlZCBhc3luY2hyb25vdXNseSBpZiBhbiBlcnJvciBvY2N1cnMKLSAg
ICAgKiAgICAgICAvLyBvciBzZXJ2ZXIgcmV0dXJucyByZXNwb25zZSB3aXRoIGFuIGVycm9yIHN0
YXR1cy4KLSAgICAgKiAgICAgfSk7Ci0gICAgICogPC9wcmU+Ci0gICAgICoKLSAgICAgKiBTaW5j
ZSB0aGUgcmV0dXJuZWQgdmFsdWUgb2YgY2FsbGluZyB0aGUgJGh0dHAgZnVuY3Rpb24gaXMgYSBg
cHJvbWlzZWAsIHlvdSBjYW4gYWxzbyB1c2UKLSAgICAgKiB0aGUgYHRoZW5gIG1ldGhvZCB0byBy
ZWdpc3RlciBjYWxsYmFja3MsIGFuZCB0aGVzZSBjYWxsYmFja3Mgd2lsbCByZWNlaXZlIGEgc2lu
Z2xlIGFyZ3VtZW50IOKAkwotICAgICAqIGFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHJlc3Bv
bnNlLiBTZWUgdGhlIEFQSSBzaWduYXR1cmUgYW5kIHR5cGUgaW5mbyBiZWxvdyBmb3IgbW9yZQot
ICAgICAqIGRldGFpbHMuCi0gICAgICoKLSAgICAgKiBBIHJlc3BvbnNlIHN0YXR1cyBjb2RlIGJl
dHdlZW4gMjAwIGFuZCAyOTkgaXMgY29uc2lkZXJlZCBhIHN1Y2Nlc3Mgc3RhdHVzIGFuZAotICAg
ICAqIHdpbGwgcmVzdWx0IGluIHRoZSBzdWNjZXNzIGNhbGxiYWNrIGJlaW5nIGNhbGxlZC4gTm90
ZSB0aGF0IGlmIHRoZSByZXNwb25zZSBpcyBhIHJlZGlyZWN0LAotICAgICAqIFhNTEh0dHBSZXF1
ZXN0IHdpbGwgdHJhbnNwYXJlbnRseSBmb2xsb3cgaXQsIG1lYW5pbmcgdGhhdCB0aGUgZXJyb3Ig
Y2FsbGJhY2sgd2lsbCBub3QgYmUKLSAgICAgKiBjYWxsZWQgZm9yIHN1Y2ggcmVzcG9uc2VzLgot
ICAgICAqCi0gICAgICogIyBTaG9ydGN1dCBtZXRob2RzCi0gICAgICoKLSAgICAgKiBTaW5jZSBh
bGwgaW52b2NhdGlvbnMgb2YgdGhlICRodHRwIHNlcnZpY2UgcmVxdWlyZSBwYXNzaW5nIGluIGFu
IEhUVFAgbWV0aG9kIGFuZCBVUkwsIGFuZAotICAgICAqIFBPU1QvUFVUIHJlcXVlc3RzIHJlcXVp
cmUgcmVxdWVzdCBkYXRhIHRvIGJlIHByb3ZpZGVkIGFzIHdlbGwsIHNob3J0Y3V0IG1ldGhvZHMK
LSAgICAgKiB3ZXJlIGNyZWF0ZWQ6Ci0gICAgICoKLSAgICAgKiA8cHJlPgotICAgICAqICAgJGh0
dHAuZ2V0KCcvc29tZVVybCcpLnN1Y2Nlc3Moc3VjY2Vzc0NhbGxiYWNrKTsKLSAgICAgKiAgICRo
dHRwLnBvc3QoJy9zb21lVXJsJywgZGF0YSkuc3VjY2VzcyhzdWNjZXNzQ2FsbGJhY2spOwotICAg
ICAqIDwvcHJlPgotICAgICAqCi0gICAgICogQ29tcGxldGUgbGlzdCBvZiBzaG9ydGN1dCBtZXRo
b2RzOgotICAgICAqCi0gICAgICogLSB7QGxpbmsgbmcuJGh0dHAjZ2V0ICRodHRwLmdldH0KLSAg
ICAgKiAtIHtAbGluayBuZy4kaHR0cCNoZWFkICRodHRwLmhlYWR9Ci0gICAgICogLSB7QGxpbmsg
bmcuJGh0dHAjcG9zdCAkaHR0cC5wb3N0fQotICAgICAqIC0ge0BsaW5rIG5nLiRodHRwI3B1dCAk
aHR0cC5wdXR9Ci0gICAgICogLSB7QGxpbmsgbmcuJGh0dHAjZGVsZXRlICRodHRwLmRlbGV0ZX0K
LSAgICAgKiAtIHtAbGluayBuZy4kaHR0cCNqc29ucCAkaHR0cC5qc29ucH0KLSAgICAgKgotICAg
ICAqCi0gICAgICogIyBTZXR0aW5nIEhUVFAgSGVhZGVycwotICAgICAqCi0gICAgICogVGhlICRo
dHRwIHNlcnZpY2Ugd2lsbCBhdXRvbWF0aWNhbGx5IGFkZCBjZXJ0YWluIEhUVFAgaGVhZGVycyB0
byBhbGwgcmVxdWVzdHMuIFRoZXNlIGRlZmF1bHRzCi0gICAgICogY2FuIGJlIGZ1bGx5IGNvbmZp
Z3VyZWQgYnkgYWNjZXNzaW5nIHRoZSBgJGh0dHBQcm92aWRlci5kZWZhdWx0cy5oZWFkZXJzYCBj
b25maWd1cmF0aW9uCi0gICAgICogb2JqZWN0LCB3aGljaCBjdXJyZW50bHkgY29udGFpbnMgdGhp
cyBkZWZhdWx0IGNvbmZpZ3VyYXRpb246Ci0gICAgICoKLSAgICAgKiAtIGAkaHR0cFByb3ZpZGVy
LmRlZmF1bHRzLmhlYWRlcnMuY29tbW9uYCAoaGVhZGVycyB0aGF0IGFyZSBjb21tb24gZm9yIGFs
bCByZXF1ZXN0cyk6Ci0gICAgICogICAtIGBBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24sIHRleHQv
cGxhaW4sICogLyAqYAotICAgICAqICAgLSBgWC1SZXF1ZXN0ZWQtV2l0aDogWE1MSHR0cFJlcXVl
c3RgCi0gICAgICogLSBgJGh0dHBQcm92aWRlci5kZWZhdWx0cy5oZWFkZXJzLnBvc3RgOiAoaGVh
ZGVyIGRlZmF1bHRzIGZvciBQT1NUIHJlcXVlc3RzKQotICAgICAqICAgLSBgQ29udGVudC1UeXBl
OiBhcHBsaWNhdGlvbi9qc29uYAotICAgICAqIC0gYCRodHRwUHJvdmlkZXIuZGVmYXVsdHMuaGVh
ZGVycy5wdXRgIChoZWFkZXIgZGVmYXVsdHMgZm9yIFBVVCByZXF1ZXN0cykKLSAgICAgKiAgIC0g
YENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbmAKLSAgICAgKgotICAgICAqIFRvIGFkZCBv
ciBvdmVyd3JpdGUgdGhlc2UgZGVmYXVsdHMsIHNpbXBseSBhZGQgb3IgcmVtb3ZlIGEgcHJvcGVy
dHkgZnJvbSB0aGVzZSBjb25maWd1cmF0aW9uCi0gICAgICogb2JqZWN0cy4gVG8gYWRkIGhlYWRl
cnMgZm9yIGFuIEhUVFAgbWV0aG9kIG90aGVyIHRoYW4gUE9TVCBvciBQVVQsIHNpbXBseSBhZGQg
YSBuZXcgb2JqZWN0Ci0gICAgICogd2l0aCB0aGUgbG93ZXJjYXNlZCBIVFRQIG1ldGhvZCBuYW1l
IGFzIHRoZSBrZXksIGUuZy4KLSAgICAgKiBgJGh0dHBQcm92aWRlci5kZWZhdWx0cy5oZWFkZXJz
LmdldFsnTXktSGVhZGVyJ109J3ZhbHVlJ2AuCi0gICAgICoKLSAgICAgKiBBZGRpdGlvbmFsbHks
IHRoZSBkZWZhdWx0cyBjYW4gYmUgc2V0IGF0IHJ1bnRpbWUgdmlhIHRoZSBgJGh0dHAuZGVmYXVs
dHNgIG9iamVjdCBpbiB0aGUgc2FtZQotICAgICAqIGZhc2hpb24uCi0gICAgICoKLSAgICAgKgot
ICAgICAqICMgVHJhbnNmb3JtaW5nIFJlcXVlc3RzIGFuZCBSZXNwb25zZXMKLSAgICAgKgotICAg
ICAqIEJvdGggcmVxdWVzdHMgYW5kIHJlc3BvbnNlcyBjYW4gYmUgdHJhbnNmb3JtZWQgdXNpbmcg
dHJhbnNmb3JtIGZ1bmN0aW9ucy4gQnkgZGVmYXVsdCwgQW5ndWxhcgotICAgICAqIGFwcGxpZXMg
dGhlc2UgdHJhbnNmb3JtYXRpb25zOgotICAgICAqCi0gICAgICogUmVxdWVzdCB0cmFuc2Zvcm1h
dGlvbnM6Ci0gICAgICoKLSAgICAgKiAtIElmIHRoZSBgZGF0YWAgcHJvcGVydHkgb2YgdGhlIHJl
cXVlc3QgY29uZmlndXJhdGlvbiBvYmplY3QgY29udGFpbnMgYW4gb2JqZWN0LCBzZXJpYWxpemUg
aXQgaW50bwotICAgICAqICAgSlNPTiBmb3JtYXQuCi0gICAgICoKLSAgICAgKiBSZXNwb25zZSB0
cmFuc2Zvcm1hdGlvbnM6Ci0gICAgICoKLSAgICAgKiAgLSBJZiBYU1JGIHByZWZpeCBpcyBkZXRl
Y3RlZCwgc3RyaXAgaXQgKHNlZSBTZWN1cml0eSBDb25zaWRlcmF0aW9ucyBzZWN0aW9uIGJlbG93
KS4KLSAgICAgKiAgLSBJZiBKU09OIHJlc3BvbnNlIGlzIGRldGVjdGVkLCBkZXNlcmlhbGl6ZSBp
dCB1c2luZyBhIEpTT04gcGFyc2VyLgotICAgICAqCi0gICAgICogVG8gZ2xvYmFsbHkgYXVnbWVu
dCBvciBvdmVycmlkZSB0aGUgZGVmYXVsdCB0cmFuc2Zvcm1zLCBtb2RpZnkgdGhlIGAkaHR0cFBy
b3ZpZGVyLmRlZmF1bHRzLnRyYW5zZm9ybVJlcXVlc3RgIGFuZAotICAgICAqIGAkaHR0cFByb3Zp
ZGVyLmRlZmF1bHRzLnRyYW5zZm9ybVJlc3BvbnNlYCBwcm9wZXJ0aWVzLiBUaGVzZSBwcm9wZXJ0
aWVzIGFyZSBieSBkZWZhdWx0IGFuCi0gICAgICogYXJyYXkgb2YgdHJhbnNmb3JtIGZ1bmN0aW9u
cywgd2hpY2ggYWxsb3dzIHlvdSB0byBgcHVzaGAgb3IgYHVuc2hpZnRgIGEgbmV3IHRyYW5zZm9y
bWF0aW9uIGZ1bmN0aW9uIGludG8gdGhlCi0gICAgICogdHJhbnNmb3JtYXRpb24gY2hhaW4uIFlv
dSBjYW4gYWxzbyBkZWNpZGUgdG8gY29tcGxldGVseSBvdmVycmlkZSBhbnkgZGVmYXVsdCB0cmFu
c2Zvcm1hdGlvbnMgYnkgYXNzaWduaW5nIHlvdXIKLSAgICAgKiB0cmFuc2Zvcm1hdGlvbiBmdW5j
dGlvbnMgdG8gdGhlc2UgcHJvcGVydGllcyBkaXJlY3RseSB3aXRob3V0IHRoZSBhcnJheSB3cmFw
cGVyLgotICAgICAqCi0gICAgICogU2ltaWxhcmx5LCB0byBsb2NhbGx5IG92ZXJyaWRlIHRoZSBy
ZXF1ZXN0L3Jlc3BvbnNlIHRyYW5zZm9ybXMsIGF1Z21lbnQgdGhlIGB0cmFuc2Zvcm1SZXF1ZXN0
YCBhbmQvb3IKLSAgICAgKiBgdHJhbnNmb3JtUmVzcG9uc2VgIHByb3BlcnRpZXMgb2YgdGhlIGNv
bmZpZ3VyYXRpb24gb2JqZWN0IHBhc3NlZCBpbnRvIGAkaHR0cGAuCi0gICAgICoKLSAgICAgKgot
ICAgICAqICMgQ2FjaGluZwotICAgICAqCi0gICAgICogVG8gZW5hYmxlIGNhY2hpbmcsIHNldCB0
aGUgY29uZmlndXJhdGlvbiBwcm9wZXJ0eSBgY2FjaGVgIHRvIGB0cnVlYC4gV2hlbiB0aGUgY2Fj
aGUgaXMKLSAgICAgKiBlbmFibGVkLCBgJGh0dHBgIHN0b3JlcyB0aGUgcmVzcG9uc2UgZnJvbSB0
aGUgc2VydmVyIGluIGxvY2FsIGNhY2hlLiBOZXh0IHRpbWUgdGhlCi0gICAgICogcmVzcG9uc2Ug
aXMgc2VydmVkIGZyb20gdGhlIGNhY2hlIHdpdGhvdXQgc2VuZGluZyBhIHJlcXVlc3QgdG8gdGhl
IHNlcnZlci4KLSAgICAgKgotICAgICAqIE5vdGUgdGhhdCBldmVuIGlmIHRoZSByZXNwb25zZSBp
cyBzZXJ2ZWQgZnJvbSBjYWNoZSwgZGVsaXZlcnkgb2YgdGhlIGRhdGEgaXMgYXN5bmNocm9ub3Vz
IGluCi0gICAgICogdGhlIHNhbWUgd2F5IHRoYXQgcmVhbCByZXF1ZXN0cyBhcmUuCi0gICAgICoK
LSAgICAgKiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgR0VUIHJlcXVlc3RzIGZvciB0aGUgc2FtZSBV
UkwgdGhhdCBzaG91bGQgYmUgY2FjaGVkIHVzaW5nIHRoZSBzYW1lCi0gICAgICogY2FjaGUsIGJ1
dCB0aGUgY2FjaGUgaXMgbm90IHBvcHVsYXRlZCB5ZXQsIG9ubHkgb25lIHJlcXVlc3QgdG8gdGhl
IHNlcnZlciB3aWxsIGJlIG1hZGUgYW5kCi0gICAgICogdGhlIHJlbWFpbmluZyByZXF1ZXN0cyB3
aWxsIGJlIGZ1bGZpbGxlZCB1c2luZyB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgZmlyc3QgcmVxdWVz
dC4KLSAgICAgKgotICAgICAqCi0gICAgICogIyBSZXNwb25zZSBpbnRlcmNlcHRvcnMKLSAgICAg
KgotICAgICAqIEJlZm9yZSB5b3Ugc3RhcnQgY3JlYXRpbmcgaW50ZXJjZXB0b3JzLCBiZSBzdXJl
IHRvIHVuZGVyc3RhbmQgdGhlCi0gICAgICoge0BsaW5rIG5nLiRxICRxIGFuZCBkZWZlcnJlZC9w
cm9taXNlIEFQSXN9LgotICAgICAqCi0gICAgICogRm9yIHB1cnBvc2VzIG9mIGdsb2JhbCBlcnJv
ciBoYW5kbGluZywgYXV0aGVudGljYXRpb24gb3IgYW55IGtpbmQgb2Ygc3luY2hyb25vdXMgb3IK
LSAgICAgKiBhc3luY2hyb25vdXMgcHJlcHJvY2Vzc2luZyBvZiByZWNlaXZlZCByZXNwb25zZXMs
IGl0IGlzIGRlc2lyYWJsZSB0byBiZSBhYmxlIHRvIGludGVyY2VwdAotICAgICAqIHJlc3BvbnNl
cyBmb3IgaHR0cCByZXF1ZXN0cyBiZWZvcmUgdGhleSBhcmUgaGFuZGVkIG92ZXIgdG8gdGhlIGFw
cGxpY2F0aW9uIGNvZGUgdGhhdAotICAgICAqIGluaXRpYXRlZCB0aGVzZSByZXF1ZXN0cy4gVGhl
IHJlc3BvbnNlIGludGVyY2VwdG9ycyBsZXZlcmFnZSB0aGUge0BsaW5rIG5nLiRxCi0gICAgICog
cHJvbWlzZSBhcGlzfSB0byBmdWxmaWwgdGhpcyBuZWVkIGZvciBib3RoIHN5bmNocm9ub3VzIGFu
ZCBhc3luY2hyb25vdXMgcHJlcHJvY2Vzc2luZy4KLSAgICAgKgotICAgICAqIFRoZSBpbnRlcmNl
cHRvcnMgYXJlIHNlcnZpY2UgZmFjdG9yaWVzIHRoYXQgYXJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUg
JGh0dHBQcm92aWRlciBieQotICAgICAqIGFkZGluZyB0aGVtIHRvIHRoZSBgJGh0dHBQcm92aWRl
ci5yZXNwb25zZUludGVyY2VwdG9yc2AgYXJyYXkuIFRoZSBmYWN0b3J5IGlzIGNhbGxlZCBhbmQK
LSAgICAgKiBpbmplY3RlZCB3aXRoIGRlcGVuZGVuY2llcyAoaWYgc3BlY2lmaWVkKSBhbmQgcmV0
dXJucyB0aGUgaW50ZXJjZXB0b3IgIOKAlCBhIGZ1bmN0aW9uIHRoYXQKLSAgICAgKiB0YWtlcyBh
IHtAbGluayBuZy4kcSBwcm9taXNlfSBhbmQgcmV0dXJucyB0aGUgb3JpZ2luYWwgb3IgYSBuZXcg
cHJvbWlzZS4KLSAgICAgKgotICAgICAqIDxwcmU+Ci0gICAgICogICAvLyByZWdpc3RlciB0aGUg
aW50ZXJjZXB0b3IgYXMgYSBzZXJ2aWNlCi0gICAgICogICAkcHJvdmlkZS5mYWN0b3J5KCdteUh0
dHBJbnRlcmNlcHRvcicsIGZ1bmN0aW9uKCRxLCBkZXBlbmRlbmN5MSwgZGVwZW5kZW5jeTIpIHsK
LSAgICAgKiAgICAgcmV0dXJuIGZ1bmN0aW9uKHByb21pc2UpIHsKLSAgICAgKiAgICAgICByZXR1
cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7Ci0gICAgICogICAgICAgICAvLyBk
byBzb21ldGhpbmcgb24gc3VjY2VzcwotICAgICAqICAgICAgIH0sIGZ1bmN0aW9uKHJlc3BvbnNl
KSB7Ci0gICAgICogICAgICAgICAvLyBkbyBzb21ldGhpbmcgb24gZXJyb3IKLSAgICAgKiAgICAg
ICAgIGlmIChjYW5SZWNvdmVyKHJlc3BvbnNlKSkgewotICAgICAqICAgICAgICAgICByZXR1cm4g
cmVzcG9uc2VPck5ld1Byb21pc2UKLSAgICAgKiAgICAgICAgIH0KLSAgICAgKiAgICAgICAgIHJl
dHVybiAkcS5yZWplY3QocmVzcG9uc2UpOwotICAgICAqICAgICAgIH0pOwotICAgICAqICAgICB9
Ci0gICAgICogICB9KTsKLSAgICAgKgotICAgICAqICAgJGh0dHBQcm92aWRlci5yZXNwb25zZUlu
dGVyY2VwdG9ycy5wdXNoKCdteUh0dHBJbnRlcmNlcHRvcicpOwotICAgICAqCi0gICAgICoKLSAg
ICAgKiAgIC8vIHJlZ2lzdGVyIHRoZSBpbnRlcmNlcHRvciB2aWEgYW4gYW5vbnltb3VzIGZhY3Rv
cnkKLSAgICAgKiAgICRodHRwUHJvdmlkZXIucmVzcG9uc2VJbnRlcmNlcHRvcnMucHVzaChmdW5j
dGlvbigkcSwgZGVwZW5kZW5jeTEsIGRlcGVuZGVuY3kyKSB7Ci0gICAgICogICAgIHJldHVybiBm
dW5jdGlvbihwcm9taXNlKSB7Ci0gICAgICogICAgICAgLy8gc2FtZSBhcyBhYm92ZQotICAgICAq
ICAgICB9Ci0gICAgICogICB9KTsKLSAgICAgKiA8L3ByZT4KLSAgICAgKgotICAgICAqCi0gICAg
ICogIyBTZWN1cml0eSBDb25zaWRlcmF0aW9ucwotICAgICAqCi0gICAgICogV2hlbiBkZXNpZ25p
bmcgd2ViIGFwcGxpY2F0aW9ucywgY29uc2lkZXIgc2VjdXJpdHkgdGhyZWF0cyBmcm9tOgotICAg
ICAqCi0gICAgICogLSB7QGxpbmsgaHR0cDovL2hhYWNrZWQuY29tL2FyY2hpdmUvMjAwOC8xMS8y
MC9hbmF0b215LW9mLWEtc3VidGxlLWpzb24tdnVsbmVyYWJpbGl0eS5hc3B4Ci0gICAgICogICBK
U09OIHZ1bG5lcmFiaWxpdHl9Ci0gICAgICogLSB7QGxpbmsgaHR0cDovL2VuLndpa2lwZWRpYS5v
cmcvd2lraS9Dcm9zcy1zaXRlX3JlcXVlc3RfZm9yZ2VyeSBYU1JGfQotICAgICAqCi0gICAgICog
Qm90aCBzZXJ2ZXIgYW5kIHRoZSBjbGllbnQgbXVzdCBjb29wZXJhdGUgaW4gb3JkZXIgdG8gZWxp
bWluYXRlIHRoZXNlIHRocmVhdHMuIEFuZ3VsYXIgY29tZXMKLSAgICAgKiBwcmUtY29uZmlndXJl
ZCB3aXRoIHN0cmF0ZWdpZXMgdGhhdCBhZGRyZXNzIHRoZXNlIGlzc3VlcywgYnV0IGZvciB0aGlz
IHRvIHdvcmsgYmFja2VuZCBzZXJ2ZXIKLSAgICAgKiBjb29wZXJhdGlvbiBpcyByZXF1aXJlZC4K
LSAgICAgKgotICAgICAqICMjIEpTT04gVnVsbmVyYWJpbGl0eSBQcm90ZWN0aW9uCi0gICAgICoK
LSAgICAgKiBBIHtAbGluayBodHRwOi8vaGFhY2tlZC5jb20vYXJjaGl2ZS8yMDA4LzExLzIwL2Fu
YXRvbXktb2YtYS1zdWJ0bGUtanNvbi12dWxuZXJhYmlsaXR5LmFzcHgKLSAgICAgKiBKU09OIHZ1
bG5lcmFiaWxpdHl9IGFsbG93cyB0aGlyZCBwYXJ0eSB3ZWJzaXRlIHRvIHR1cm4geW91ciBKU09O
IHJlc291cmNlIFVSTCBpbnRvCi0gICAgICoge0BsaW5rIGh0dHA6Ly9lbi53aWtpcGVkaWEub3Jn
L3dpa2kvSlNPTlAgSlNPTlB9IHJlcXVlc3QgdW5kZXIgc29tZSBjb25kaXRpb25zLiBUbwotICAg
ICAqIGNvdW50ZXIgdGhpcyB5b3VyIHNlcnZlciBjYW4gcHJlZml4IGFsbCBKU09OIHJlcXVlc3Rz
IHdpdGggZm9sbG93aW5nIHN0cmluZyBgIildfScsXG4iYC4KLSAgICAgKiBBbmd1bGFyIHdpbGwg
YXV0b21hdGljYWxseSBzdHJpcCB0aGUgcHJlZml4IGJlZm9yZSBwcm9jZXNzaW5nIGl0IGFzIEpT
T04uCi0gICAgICoKLSAgICAgKiBGb3IgZXhhbXBsZSBpZiB5b3VyIHNlcnZlciBuZWVkcyB0byBy
ZXR1cm46Ci0gICAgICogPHByZT4KLSAgICAgKiBbJ29uZScsJ3R3byddCi0gICAgICogPC9wcmU+
Ci0gICAgICoKLSAgICAgKiB3aGljaCBpcyB2dWxuZXJhYmxlIHRvIGF0dGFjaywgeW91ciBzZXJ2
ZXIgY2FuIHJldHVybjoKLSAgICAgKiA8cHJlPgotICAgICAqICldfScsCi0gICAgICogWydvbmUn
LCd0d28nXQotICAgICAqIDwvcHJlPgotICAgICAqCi0gICAgICogQW5ndWxhciB3aWxsIHN0cmlw
IHRoZSBwcmVmaXgsIGJlZm9yZSBwcm9jZXNzaW5nIHRoZSBKU09OLgotICAgICAqCi0gICAgICoK
LSAgICAgKiAjIyBDcm9zcyBTaXRlIFJlcXVlc3QgRm9yZ2VyeSAoWFNSRikgUHJvdGVjdGlvbgot
ICAgICAqCi0gICAgICoge0BsaW5rIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ3Jvc3Mt
c2l0ZV9yZXF1ZXN0X2ZvcmdlcnkgWFNSRn0gaXMgYSB0ZWNobmlxdWUgYnkgd2hpY2gKLSAgICAg
KiBhbiB1bmF1dGhvcml6ZWQgc2l0ZSBjYW4gZ2FpbiB5b3VyIHVzZXIncyBwcml2YXRlIGRhdGEu
IEFuZ3VsYXIgcHJvdmlkZXMgYSBtZWNoYW5pc20KLSAgICAgKiB0byBjb3VudGVyIFhTUkYuIFdo
ZW4gcGVyZm9ybWluZyBYSFIgcmVxdWVzdHMsIHRoZSAkaHR0cCBzZXJ2aWNlIHJlYWRzIGEgdG9r
ZW4gZnJvbSBhIGNvb2tpZQotICAgICAqIGNhbGxlZCBgWFNSRi1UT0tFTmAgYW5kIHNldHMgaXQg
YXMgdGhlIEhUVFAgaGVhZGVyIGBYLVhTUkYtVE9LRU5gLiBTaW5jZSBvbmx5IEphdmFTY3JpcHQg
dGhhdAotICAgICAqIHJ1bnMgb24geW91ciBkb21haW4gY291bGQgcmVhZCB0aGUgY29va2llLCB5
b3VyIHNlcnZlciBjYW4gYmUgYXNzdXJlZCB0aGF0IHRoZSBYSFIgY2FtZSBmcm9tCi0gICAgICog
SmF2YVNjcmlwdCBydW5uaW5nIG9uIHlvdXIgZG9tYWluLgotICAgICAqCi0gICAgICogVG8gdGFr
ZSBhZHZhbnRhZ2Ugb2YgdGhpcywgeW91ciBzZXJ2ZXIgbmVlZHMgdG8gc2V0IGEgdG9rZW4gaW4g
YSBKYXZhU2NyaXB0IHJlYWRhYmxlIHNlc3Npb24KLSAgICAgKiBjb29raWUgY2FsbGVkIGBYU1JG
LVRPS0VOYCBvbiB0aGUgZmlyc3QgSFRUUCBHRVQgcmVxdWVzdC4gT24gc3Vic2VxdWVudCBYSFIg
cmVxdWVzdHMgdGhlCi0gICAgICogc2VydmVyIGNhbiB2ZXJpZnkgdGhhdCB0aGUgY29va2llIG1h
dGNoZXMgYFgtWFNSRi1UT0tFTmAgSFRUUCBoZWFkZXIsIGFuZCB0aGVyZWZvcmUgYmUgc3VyZQot
ICAgICAqIHRoYXQgb25seSBKYXZhU2NyaXB0IHJ1bm5pbmcgb24geW91ciBkb21haW4gY291bGQg
aGF2ZSBzZW50IHRoZSByZXF1ZXN0LiBUaGUgdG9rZW4gbXVzdCBiZQotICAgICAqIHVuaXF1ZSBm
b3IgZWFjaCB1c2VyIGFuZCBtdXN0IGJlIHZlcmlmaWFibGUgYnkgdGhlIHNlcnZlciAodG8gcHJl
dmVudCB0aGUgSmF2YVNjcmlwdCBmcm9tIG1ha2luZwotICAgICAqIHVwIGl0cyBvd24gdG9rZW5z
KS4gV2UgcmVjb21tZW5kIHRoYXQgdGhlIHRva2VuIGlzIGEgZGlnZXN0IG9mIHlvdXIgc2l0ZSdz
IGF1dGhlbnRpY2F0aW9uCi0gICAgICogY29va2llIHdpdGggYSB7QGxpbmsgaHR0cHM6Ly9lbi53
aWtpcGVkaWEub3JnL3dpa2kvU2FsdF8oY3J5cHRvZ3JhcGh5KSBzYWx0fSBmb3IgYWRkZWQgc2Vj
dXJpdHkuCi0gICAgICoKLSAgICAgKgotICAgICAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgT2Jq
ZWN0IGRlc2NyaWJpbmcgdGhlIHJlcXVlc3QgdG8gYmUgbWFkZSBhbmQgaG93IGl0IHNob3VsZCBi
ZQotICAgICAqICAgIHByb2Nlc3NlZC4gVGhlIG9iamVjdCBoYXMgZm9sbG93aW5nIHByb3BlcnRp
ZXM6Ci0gICAgICoKLSAgICAgKiAgICAtICoqbWV0aG9kKiog4oCTIGB7c3RyaW5nfWAg4oCTIEhU
VFAgbWV0aG9kIChlLmcuICdHRVQnLCAnUE9TVCcsIGV0YykKLSAgICAgKiAgICAtICoqdXJsKiog
4oCTIGB7c3RyaW5nfWAg4oCTIEFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCBvZiB0aGUgcmVzb3Vy
Y2UgdGhhdCBpcyBiZWluZyByZXF1ZXN0ZWQuCi0gICAgICogICAgLSAqKnBhcmFtcyoqIOKAkyBg
e09iamVjdC48c3RyaW5nfE9iamVjdD59YCDigJMgTWFwIG9mIHN0cmluZ3Mgb3Igb2JqZWN0cyB3
aGljaCB3aWxsIGJlIHR1cm5lZCB0bwotICAgICAqICAgICAgYD9rZXkxPXZhbHVlMSZrZXkyPXZh
bHVlMmAgYWZ0ZXIgdGhlIHVybC4gSWYgdGhlIHZhbHVlIGlzIG5vdCBhIHN0cmluZywgaXQgd2ls
bCBiZSBKU09OaWZpZWQuCi0gICAgICogICAgLSAqKmRhdGEqKiDigJMgYHtzdHJpbmd8T2JqZWN0
fWAg4oCTIERhdGEgdG8gYmUgc2VudCBhcyB0aGUgcmVxdWVzdCBtZXNzYWdlIGRhdGEuCi0gICAg
ICogICAgLSAqKmhlYWRlcnMqKiDigJMgYHtPYmplY3R9YCDigJMgTWFwIG9mIHN0cmluZ3MgcmVw
cmVzZW50aW5nIEhUVFAgaGVhZGVycyB0byBzZW5kIHRvIHRoZSBzZXJ2ZXIuCi0gICAgICogICAg
LSAqKnRyYW5zZm9ybVJlcXVlc3QqKiDigJMgYHtmdW5jdGlvbihkYXRhLCBoZWFkZXJzR2V0dGVy
KXxBcnJheS48ZnVuY3Rpb24oZGF0YSwgaGVhZGVyc0dldHRlcik+fWAg4oCTCi0gICAgICogICAg
ICB0cmFuc2Zvcm0gZnVuY3Rpb24gb3IgYW4gYXJyYXkgb2Ygc3VjaCBmdW5jdGlvbnMuIFRoZSB0
cmFuc2Zvcm0gZnVuY3Rpb24gdGFrZXMgdGhlIGh0dHAKLSAgICAgKiAgICAgIHJlcXVlc3QgYm9k
eSBhbmQgaGVhZGVycyBhbmQgcmV0dXJucyBpdHMgdHJhbnNmb3JtZWQgKHR5cGljYWxseSBzZXJp
YWxpemVkKSB2ZXJzaW9uLgotICAgICAqICAgIC0gKip0cmFuc2Zvcm1SZXNwb25zZSoqIOKAkyBg
e2Z1bmN0aW9uKGRhdGEsIGhlYWRlcnNHZXR0ZXIpfEFycmF5LjxmdW5jdGlvbihkYXRhLCBoZWFk
ZXJzR2V0dGVyKT59YCDigJMKLSAgICAgKiAgICAgIHRyYW5zZm9ybSBmdW5jdGlvbiBvciBhbiBh
cnJheSBvZiBzdWNoIGZ1bmN0aW9ucy4gVGhlIHRyYW5zZm9ybSBmdW5jdGlvbiB0YWtlcyB0aGUg
aHR0cAotICAgICAqICAgICAgcmVzcG9uc2UgYm9keSBhbmQgaGVhZGVycyBhbmQgcmV0dXJucyBp
dHMgdHJhbnNmb3JtZWQgKHR5cGljYWxseSBkZXNlcmlhbGl6ZWQpIHZlcnNpb24uCi0gICAgICog
ICAgLSAqKmNhY2hlKiog4oCTIGB7Ym9vbGVhbnxDYWNoZX1gIOKAkyBJZiB0cnVlLCBhIGRlZmF1
bHQgJGh0dHAgY2FjaGUgd2lsbCBiZSB1c2VkIHRvIGNhY2hlIHRoZQotICAgICAqICAgICAgR0VU
IHJlcXVlc3QsIG90aGVyd2lzZSBpZiBhIGNhY2hlIGluc3RhbmNlIGJ1aWx0IHdpdGgKLSAgICAg
KiAgICAgIHtAbGluayBuZy4kY2FjaGVGYWN0b3J5ICRjYWNoZUZhY3Rvcnl9LCB0aGlzIGNhY2hl
IHdpbGwgYmUgdXNlZCBmb3IKLSAgICAgKiAgICAgIGNhY2hpbmcuCi0gICAgICogICAgLSAqKnRp
bWVvdXQqKiDigJMgYHtudW1iZXJ9YCDigJMgdGltZW91dCBpbiBtaWxsaXNlY29uZHMuCi0gICAg
ICogICAgLSAqKndpdGhDcmVkZW50aWFscyoqIC0gYHtib29sZWFufWAgLSB3aGV0aGVyIHRvIHRv
IHNldCB0aGUgYHdpdGhDcmVkZW50aWFsc2AgZmxhZyBvbiB0aGUKLSAgICAgKiAgICAgIFhIUiBv
YmplY3QuIFNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vaHR0cF9h
Y2Nlc3NfY29udHJvbCNzZWN0aW9uXzUKLSAgICAgKiAgICAgIHJlcXVlc3RzIHdpdGggY3JlZGVu
dGlhbHN9IGZvciBtb3JlIGluZm9ybWF0aW9uLgotICAgICAqCi0gICAgICogQHJldHVybnMge0h0
dHBQcm9taXNlfSBSZXR1cm5zIGEge0BsaW5rIG5nLiRxIHByb21pc2V9IG9iamVjdCB3aXRoIHRo
ZQotICAgICAqICAgc3RhbmRhcmQgYHRoZW5gIG1ldGhvZCBhbmQgdHdvIGh0dHAgc3BlY2lmaWMg
bWV0aG9kczogYHN1Y2Nlc3NgIGFuZCBgZXJyb3JgLiBUaGUgYHRoZW5gCi0gICAgICogICBtZXRo
b2QgdGFrZXMgdHdvIGFyZ3VtZW50cyBhIHN1Y2Nlc3MgYW5kIGFuIGVycm9yIGNhbGxiYWNrIHdo
aWNoIHdpbGwgYmUgY2FsbGVkIHdpdGggYQotICAgICAqICAgcmVzcG9uc2Ugb2JqZWN0LiBUaGUg
YHN1Y2Nlc3NgIGFuZCBgZXJyb3JgIG1ldGhvZHMgdGFrZSBhIHNpbmdsZSBhcmd1bWVudCAtIGEg
ZnVuY3Rpb24gdGhhdAotICAgICAqICAgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBz
dWNjZWVkcyBvciBmYWlscyByZXNwZWN0aXZlbHkuIFRoZSBhcmd1bWVudHMgcGFzc2VkIGludG8K
LSAgICAgKiAgIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVzdHJ1Y3R1cmVkIHJlcHJlc2VudGF0aW9u
IG9mIHRoZSByZXNwb25zZSBvYmplY3QgcGFzc2VkIGludG8gdGhlCi0gICAgICogICBgdGhlbmAg
bWV0aG9kLiBUaGUgcmVzcG9uc2Ugb2JqZWN0IGhhcyB0aGVzZSBwcm9wZXJ0aWVzOgotICAgICAq
Ci0gICAgICogICAtICoqZGF0YSoqIOKAkyBge3N0cmluZ3xPYmplY3R9YCDigJMgVGhlIHJlc3Bv
bnNlIGJvZHkgdHJhbnNmb3JtZWQgd2l0aCB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9ucy4KLSAgICAg
KiAgIC0gKipzdGF0dXMqKiDigJMgYHtudW1iZXJ9YCDigJMgSFRUUCBzdGF0dXMgY29kZSBvZiB0
aGUgcmVzcG9uc2UuCi0gICAgICogICAtICoqaGVhZGVycyoqIOKAkyBge2Z1bmN0aW9uKFtoZWFk
ZXJOYW1lXSl9YCDigJMgSGVhZGVyIGdldHRlciBmdW5jdGlvbi4KLSAgICAgKiAgIC0gKipjb25m
aWcqKiDigJMgYHtPYmplY3R9YCDigJMgVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRoYXQgd2Fz
IHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHJlcXVlc3QuCi0gICAgICoKLSAgICAgKiBAcHJvcGVydHkg
e0FycmF5LjxPYmplY3Q+fSBwZW5kaW5nUmVxdWVzdHMgQXJyYXkgb2YgY29uZmlnIG9iamVjdHMg
Zm9yIGN1cnJlbnRseSBwZW5kaW5nCi0gICAgICogICByZXF1ZXN0cy4gVGhpcyBpcyBwcmltYXJp
bHkgbWVhbnQgdG8gYmUgdXNlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgotICAgICAqCi0gICAg
ICoKLSAgICAgKiBAZXhhbXBsZQotICAgICAgPGV4YW1wbGU+Ci0gICAgICAgIDxmaWxlIG5hbWU9
ImluZGV4Lmh0bWwiPgotICAgICAgICAgIDxkaXYgbmctY29udHJvbGxlcj0iRmV0Y2hDdHJsIj4K
LSAgICAgICAgICAgIDxzZWxlY3QgbmctbW9kZWw9Im1ldGhvZCI+Ci0gICAgICAgICAgICAgIDxv
cHRpb24+R0VUPC9vcHRpb24+Ci0gICAgICAgICAgICAgIDxvcHRpb24+SlNPTlA8L29wdGlvbj4K
LSAgICAgICAgICAgIDwvc2VsZWN0PgotICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5n
LW1vZGVsPSJ1cmwiIHNpemU9IjgwIi8+Ci0gICAgICAgICAgICA8YnV0dG9uIG5nLWNsaWNrPSJm
ZXRjaCgpIj5mZXRjaDwvYnV0dG9uPjxicj4KLSAgICAgICAgICAgIDxidXR0b24gbmctY2xpY2s9
InVwZGF0ZU1vZGVsKCdHRVQnLCAnaHR0cC1oZWxsby5odG1sJykiPlNhbXBsZSBHRVQ8L2J1dHRv
bj4KLSAgICAgICAgICAgIDxidXR0b24gbmctY2xpY2s9InVwZGF0ZU1vZGVsKCdKU09OUCcsICdo
dHRwOi8vYW5ndWxhcmpzLm9yZy9ncmVldC5waHA/Y2FsbGJhY2s9SlNPTl9DQUxMQkFDSyZuYW1l
PVN1cGVyJTIwSGVybycpIj5TYW1wbGUgSlNPTlA8L2J1dHRvbj4KLSAgICAgICAgICAgIDxidXR0
b24gbmctY2xpY2s9InVwZGF0ZU1vZGVsKCdKU09OUCcsICdodHRwOi8vYW5ndWxhcmpzLm9yZy9k
b2VzbnRleGlzdCZjYWxsYmFjaz1KU09OX0NBTExCQUNLJykiPkludmFsaWQgSlNPTlA8L2J1dHRv
bj4KLSAgICAgICAgICAgIDxwcmU+aHR0cCBzdGF0dXMgY29kZToge3tzdGF0dXN9fTwvcHJlPgot
ICAgICAgICAgICAgPHByZT5odHRwIHJlc3BvbnNlIGRhdGE6IHt7ZGF0YX19PC9wcmU+Ci0gICAg
ICAgICAgPC9kaXY+Ci0gICAgICAgIDwvZmlsZT4KLSAgICAgICAgPGZpbGUgbmFtZT0ic2NyaXB0
LmpzIj4KLSAgICAgICAgICBmdW5jdGlvbiBGZXRjaEN0cmwoJHNjb3BlLCAkaHR0cCwgJHRlbXBs
YXRlQ2FjaGUpIHsKLSAgICAgICAgICAgICRzY29wZS5tZXRob2QgPSAnR0VUJzsKLSAgICAgICAg
ICAgICRzY29wZS51cmwgPSAnaHR0cC1oZWxsby5odG1sJzsKLQotICAgICAgICAgICAgJHNjb3Bl
LmZldGNoID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICRzY29wZS5jb2RlID0gbnVsbDsK
LSAgICAgICAgICAgICAgJHNjb3BlLnJlc3BvbnNlID0gbnVsbDsKLQotICAgICAgICAgICAgICAk
aHR0cCh7bWV0aG9kOiAkc2NvcGUubWV0aG9kLCB1cmw6ICRzY29wZS51cmwsIGNhY2hlOiAkdGVt
cGxhdGVDYWNoZX0pLgotICAgICAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24oZGF0YSwgc3Rh
dHVzKSB7Ci0gICAgICAgICAgICAgICAgICAkc2NvcGUuc3RhdHVzID0gc3RhdHVzOwotICAgICAg
ICAgICAgICAgICAgJHNjb3BlLmRhdGEgPSBkYXRhOwotICAgICAgICAgICAgICAgIH0pLgotICAg
ICAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uKGRhdGEsIHN0YXR1cykgewotICAgICAgICAgICAg
ICAgICAgJHNjb3BlLmRhdGEgPSBkYXRhIHx8ICJSZXF1ZXN0IGZhaWxlZCI7Ci0gICAgICAgICAg
ICAgICAgICAkc2NvcGUuc3RhdHVzID0gc3RhdHVzOwotICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgIH07Ci0KLSAgICAgICAgICAgICRzY29wZS51cGRhdGVNb2RlbCA9IGZ1bmN0aW9uKG1l
dGhvZCwgdXJsKSB7Ci0gICAgICAgICAgICAgICRzY29wZS5tZXRob2QgPSBtZXRob2Q7Ci0gICAg
ICAgICAgICAgICRzY29wZS51cmwgPSB1cmw7Ci0gICAgICAgICAgICB9OwotICAgICAgICAgIH0K
LSAgICAgICAgPC9maWxlPgotICAgICAgICA8ZmlsZSBuYW1lPSJodHRwLWhlbGxvLmh0bWwiPgot
ICAgICAgICAgIEhlbGxvLCAkaHR0cCEKLSAgICAgICAgPC9maWxlPgotICAgICAgICA8ZmlsZSBu
YW1lPSJzY2VuYXJpby5qcyI+Ci0gICAgICAgICAgaXQoJ3Nob3VsZCBtYWtlIGFuIHhociBHRVQg
cmVxdWVzdCcsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgZWxlbWVudCgnOmJ1dHRvbjpjb250
YWlucygiU2FtcGxlIEdFVCIpJykuY2xpY2soKTsKLSAgICAgICAgICAgIGVsZW1lbnQoJzpidXR0
b246Y29udGFpbnMoImZldGNoIiknKS5jbGljaygpOwotICAgICAgICAgICAgZXhwZWN0KGJpbmRp
bmcoJ3N0YXR1cycpKS50b0JlKCcyMDAnKTsKLSAgICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdk
YXRhJykpLnRvTWF0Y2goL0hlbGxvLCBcJGh0dHAhLyk7Ci0gICAgICAgICAgfSk7Ci0KLSAgICAg
ICAgICBpdCgnc2hvdWxkIG1ha2UgYSBKU09OUCByZXF1ZXN0IHRvIGFuZ3VsYXJqcy5vcmcnLCBm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgIGVsZW1lbnQoJzpidXR0b246Y29udGFpbnMoIlNhbXBs
ZSBKU09OUCIpJykuY2xpY2soKTsKLSAgICAgICAgICAgIGVsZW1lbnQoJzpidXR0b246Y29udGFp
bnMoImZldGNoIiknKS5jbGljaygpOwotICAgICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ3N0YXR1
cycpKS50b0JlKCcyMDAnKTsKLSAgICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdkYXRhJykpLnRv
TWF0Y2goL1N1cGVyIEhlcm8hLyk7Ci0gICAgICAgICAgfSk7Ci0KLSAgICAgICAgICBpdCgnc2hv
dWxkIG1ha2UgSlNPTlAgcmVxdWVzdCB0byBpbnZhbGlkIFVSTCBhbmQgaW52b2tlIHRoZSBlcnJv
ciBoYW5kbGVyJywKLSAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBlbGVt
ZW50KCc6YnV0dG9uOmNvbnRhaW5zKCJJbnZhbGlkIEpTT05QIiknKS5jbGljaygpOwotICAgICAg
ICAgICAgZWxlbWVudCgnOmJ1dHRvbjpjb250YWlucygiZmV0Y2giKScpLmNsaWNrKCk7Ci0gICAg
ICAgICAgICBleHBlY3QoYmluZGluZygnc3RhdHVzJykpLnRvQmUoJzAnKTsKLSAgICAgICAgICAg
IGV4cGVjdChiaW5kaW5nKCdkYXRhJykpLnRvQmUoJ1JlcXVlc3QgZmFpbGVkJyk7Ci0gICAgICAg
ICAgfSk7Ci0gICAgICAgIDwvZmlsZT4KLSAgICAgIDwvZXhhbXBsZT4KLSAgICAgKi8KLSAgICBm
dW5jdGlvbiAkaHR0cChjb25maWcpIHsKLSAgICAgIGNvbmZpZy5tZXRob2QgPSB1cHBlcmNhc2Uo
Y29uZmlnLm1ldGhvZCk7Ci0KLSAgICAgIHZhciByZXFUcmFuc2Zvcm1GbiA9IGNvbmZpZy50cmFu
c2Zvcm1SZXF1ZXN0IHx8ICRjb25maWcudHJhbnNmb3JtUmVxdWVzdCwKLSAgICAgICAgICByZXNw
VHJhbnNmb3JtRm4gPSBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UgfHwgJGNvbmZpZy50cmFuc2Zv
cm1SZXNwb25zZSwKLSAgICAgICAgICBkZWZIZWFkZXJzID0gJGNvbmZpZy5oZWFkZXJzLAotICAg
ICAgICAgIHJlcUhlYWRlcnMgPSBleHRlbmQoeydYLVhTUkYtVE9LRU4nOiAkYnJvd3Nlci5jb29r
aWVzKClbJ1hTUkYtVE9LRU4nXX0sCi0gICAgICAgICAgICAgIGRlZkhlYWRlcnMuY29tbW9uLCBk
ZWZIZWFkZXJzW2xvd2VyY2FzZShjb25maWcubWV0aG9kKV0sIGNvbmZpZy5oZWFkZXJzKSwKLSAg
ICAgICAgICByZXFEYXRhID0gdHJhbnNmb3JtRGF0YShjb25maWcuZGF0YSwgaGVhZGVyc0dldHRl
cihyZXFIZWFkZXJzKSwgcmVxVHJhbnNmb3JtRm4pLAotICAgICAgICAgIHByb21pc2U7Ci0KLSAg
ICAgIC8vIHN0cmlwIGNvbnRlbnQtdHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZAotICAgICAgaWYg
KGlzVW5kZWZpbmVkKGNvbmZpZy5kYXRhKSkgewotICAgICAgICBkZWxldGUgcmVxSGVhZGVyc1sn
Q29udGVudC1UeXBlJ107Ci0gICAgICB9Ci0KLSAgICAgIC8vIHNlbmQgcmVxdWVzdAotICAgICAg
cHJvbWlzZSA9IHNlbmRSZXEoY29uZmlnLCByZXFEYXRhLCByZXFIZWFkZXJzKTsKLQotCi0gICAg
ICAvLyB0cmFuc2Zvcm0gZnV0dXJlIHJlc3BvbnNlCi0gICAgICBwcm9taXNlID0gcHJvbWlzZS50
aGVuKHRyYW5zZm9ybVJlc3BvbnNlLCB0cmFuc2Zvcm1SZXNwb25zZSk7Ci0KLSAgICAgIC8vIGFw
cGx5IGludGVyY2VwdG9ycwotICAgICAgZm9yRWFjaChyZXNwb25zZUludGVyY2VwdG9ycywgZnVu
Y3Rpb24oaW50ZXJjZXB0b3IpIHsKLSAgICAgICAgcHJvbWlzZSA9IGludGVyY2VwdG9yKHByb21p
c2UpOwotICAgICAgfSk7Ci0KLSAgICAgIHByb21pc2Uuc3VjY2VzcyA9IGZ1bmN0aW9uKGZuKSB7
Ci0gICAgICAgIHByb21pc2UudGhlbihmdW5jdGlvbihyZXNwb25zZSkgewotICAgICAgICAgIGZu
KHJlc3BvbnNlLmRhdGEsIHJlc3BvbnNlLnN0YXR1cywgcmVzcG9uc2UuaGVhZGVycywgY29uZmln
KTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiBwcm9taXNlOwotICAgICAgfTsKLQotICAg
ICAgcHJvbWlzZS5lcnJvciA9IGZ1bmN0aW9uKGZuKSB7Ci0gICAgICAgIHByb21pc2UudGhlbihu
dWxsLCBmdW5jdGlvbihyZXNwb25zZSkgewotICAgICAgICAgIGZuKHJlc3BvbnNlLmRhdGEsIHJl
c3BvbnNlLnN0YXR1cywgcmVzcG9uc2UuaGVhZGVycywgY29uZmlnKTsKLSAgICAgICAgfSk7Ci0g
ICAgICAgIHJldHVybiBwcm9taXNlOwotICAgICAgfTsKLQotICAgICAgcmV0dXJuIHByb21pc2U7
Ci0KLSAgICAgIGZ1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKHJlc3BvbnNlKSB7Ci0gICAgICAg
IC8vIG1ha2UgYSBjb3B5IHNpbmNlIHRoZSByZXNwb25zZSBtdXN0IGJlIGNhY2hlYWJsZQotICAg
ICAgICB2YXIgcmVzcCA9IGV4dGVuZCh7fSwgcmVzcG9uc2UsIHsKLSAgICAgICAgICBkYXRhOiB0
cmFuc2Zvcm1EYXRhKHJlc3BvbnNlLmRhdGEsIHJlc3BvbnNlLmhlYWRlcnMsIHJlc3BUcmFuc2Zv
cm1GbikKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiAoaXNTdWNjZXNzKHJlc3BvbnNlLnN0
YXR1cykpCi0gICAgICAgICAgPyByZXNwCi0gICAgICAgICAgOiAkcS5yZWplY3QocmVzcCk7Ci0g
ICAgICB9Ci0gICAgfQotCi0gICAgJGh0dHAucGVuZGluZ1JlcXVlc3RzID0gW107Ci0KLSAgICAv
KioKLSAgICAgKiBAbmdkb2MgbWV0aG9kCi0gICAgICogQG5hbWUgbmcuJGh0dHAjZ2V0Ci0gICAg
ICogQG1ldGhvZE9mIG5nLiRodHRwCi0gICAgICoKLSAgICAgKiBAZGVzY3JpcHRpb24KLSAgICAg
KiBTaG9ydGN1dCBtZXRob2QgdG8gcGVyZm9ybSBgR0VUYCByZXF1ZXN0LgotICAgICAqCi0gICAg
ICogQHBhcmFtIHtzdHJpbmd9IHVybCBSZWxhdGl2ZSBvciBhYnNvbHV0ZSBVUkwgc3BlY2lmeWlu
ZyB0aGUgZGVzdGluYXRpb24gb2YgdGhlIHJlcXVlc3QKLSAgICAgKiBAcGFyYW0ge09iamVjdD19
IGNvbmZpZyBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9iamVjdAotICAgICAqIEByZXR1cm5zIHtI
dHRwUHJvbWlzZX0gRnV0dXJlIG9iamVjdAotICAgICAqLwotCi0gICAgLyoqCi0gICAgICogQG5n
ZG9jIG1ldGhvZAotICAgICAqIEBuYW1lIG5nLiRodHRwI2RlbGV0ZQotICAgICAqIEBtZXRob2RP
ZiBuZy4kaHR0cAotICAgICAqCi0gICAgICogQGRlc2NyaXB0aW9uCi0gICAgICogU2hvcnRjdXQg
bWV0aG9kIHRvIHBlcmZvcm0gYERFTEVURWAgcmVxdWVzdC4KLSAgICAgKgotICAgICAqIEBwYXJh
bSB7c3RyaW5nfSB1cmwgUmVsYXRpdmUgb3IgYWJzb2x1dGUgVVJMIHNwZWNpZnlpbmcgdGhlIGRl
c3RpbmF0aW9uIG9mIHRoZSByZXF1ZXN0Ci0gICAgICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcg
T3B0aW9uYWwgY29uZmlndXJhdGlvbiBvYmplY3QKLSAgICAgKiBAcmV0dXJucyB7SHR0cFByb21p
c2V9IEZ1dHVyZSBvYmplY3QKLSAgICAgKi8KLQotICAgIC8qKgotICAgICAqIEBuZ2RvYyBtZXRo
b2QKLSAgICAgKiBAbmFtZSBuZy4kaHR0cCNoZWFkCi0gICAgICogQG1ldGhvZE9mIG5nLiRodHRw
Ci0gICAgICoKLSAgICAgKiBAZGVzY3JpcHRpb24KLSAgICAgKiBTaG9ydGN1dCBtZXRob2QgdG8g
cGVyZm9ybSBgSEVBRGAgcmVxdWVzdC4KLSAgICAgKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1
cmwgUmVsYXRpdmUgb3IgYWJzb2x1dGUgVVJMIHNwZWNpZnlpbmcgdGhlIGRlc3RpbmF0aW9uIG9m
IHRoZSByZXF1ZXN0Ci0gICAgICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgT3B0aW9uYWwgY29u
ZmlndXJhdGlvbiBvYmplY3QKLSAgICAgKiBAcmV0dXJucyB7SHR0cFByb21pc2V9IEZ1dHVyZSBv
YmplY3QKLSAgICAgKi8KLQotICAgIC8qKgotICAgICAqIEBuZ2RvYyBtZXRob2QKLSAgICAgKiBA
bmFtZSBuZy4kaHR0cCNqc29ucAotICAgICAqIEBtZXRob2RPZiBuZy4kaHR0cAotICAgICAqCi0g
ICAgICogQGRlc2NyaXB0aW9uCi0gICAgICogU2hvcnRjdXQgbWV0aG9kIHRvIHBlcmZvcm0gYEpT
T05QYCByZXF1ZXN0LgotICAgICAqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBSZWxhdGl2
ZSBvciBhYnNvbHV0ZSBVUkwgc3BlY2lmeWluZyB0aGUgZGVzdGluYXRpb24gb2YgdGhlIHJlcXVl
c3QuCi0gICAgICogICAgICAgICAgICAgICAgICAgICBTaG91bGQgY29udGFpbiBgSlNPTl9DQUxM
QkFDS2Agc3RyaW5nLgotICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIE9wdGlvbmFsIGNv
bmZpZ3VyYXRpb24gb2JqZWN0Ci0gICAgICogQHJldHVybnMge0h0dHBQcm9taXNlfSBGdXR1cmUg
b2JqZWN0Ci0gICAgICovCi0gICAgY3JlYXRlU2hvcnRNZXRob2RzKCdnZXQnLCAnZGVsZXRlJywg
J2hlYWQnLCAnanNvbnAnKTsKLQotICAgIC8qKgotICAgICAqIEBuZ2RvYyBtZXRob2QKLSAgICAg
KiBAbmFtZSBuZy4kaHR0cCNwb3N0Ci0gICAgICogQG1ldGhvZE9mIG5nLiRodHRwCi0gICAgICoK
LSAgICAgKiBAZGVzY3JpcHRpb24KLSAgICAgKiBTaG9ydGN1dCBtZXRob2QgdG8gcGVyZm9ybSBg
UE9TVGAgcmVxdWVzdC4KLSAgICAgKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgUmVsYXRp
dmUgb3IgYWJzb2x1dGUgVVJMIHNwZWNpZnlpbmcgdGhlIGRlc3RpbmF0aW9uIG9mIHRoZSByZXF1
ZXN0Ci0gICAgICogQHBhcmFtIHsqfSBkYXRhIFJlcXVlc3QgY29udGVudAotICAgICAqIEBwYXJh
bSB7T2JqZWN0PX0gY29uZmlnIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb2JqZWN0Ci0gICAgICog
QHJldHVybnMge0h0dHBQcm9taXNlfSBGdXR1cmUgb2JqZWN0Ci0gICAgICovCi0KLSAgICAvKioK
LSAgICAgKiBAbmdkb2MgbWV0aG9kCi0gICAgICogQG5hbWUgbmcuJGh0dHAjcHV0Ci0gICAgICog
QG1ldGhvZE9mIG5nLiRodHRwCi0gICAgICoKLSAgICAgKiBAZGVzY3JpcHRpb24KLSAgICAgKiBT
aG9ydGN1dCBtZXRob2QgdG8gcGVyZm9ybSBgUFVUYCByZXF1ZXN0LgotICAgICAqCi0gICAgICog
QHBhcmFtIHtzdHJpbmd9IHVybCBSZWxhdGl2ZSBvciBhYnNvbHV0ZSBVUkwgc3BlY2lmeWluZyB0
aGUgZGVzdGluYXRpb24gb2YgdGhlIHJlcXVlc3QKLSAgICAgKiBAcGFyYW0geyp9IGRhdGEgUmVx
dWVzdCBjb250ZW50Ci0gICAgICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgT3B0aW9uYWwgY29u
ZmlndXJhdGlvbiBvYmplY3QKLSAgICAgKiBAcmV0dXJucyB7SHR0cFByb21pc2V9IEZ1dHVyZSBv
YmplY3QKLSAgICAgKi8KLSAgICBjcmVhdGVTaG9ydE1ldGhvZHNXaXRoRGF0YSgncG9zdCcsICdw
dXQnKTsKLQotICAgICAgICAvKioKLSAgICAgICAgICogQG5nZG9jIHByb3BlcnR5Ci0gICAgICAg
ICAqIEBuYW1lIG5nLiRodHRwI2RlZmF1bHRzCi0gICAgICAgICAqIEBwcm9wZXJ0eU9mIG5nLiRo
dHRwCi0gICAgICAgICAqCi0gICAgICAgICAqIEBkZXNjcmlwdGlvbgotICAgICAgICAgKiBSdW50
aW1lIGVxdWl2YWxlbnQgb2YgdGhlIGAkaHR0cFByb3ZpZGVyLmRlZmF1bHRzYCBwcm9wZXJ0eS4g
QWxsb3dzIGNvbmZpZ3VyYXRpb24gb2YKLSAgICAgICAgICogZGVmYXVsdCBoZWFkZXJzIGFzIHdl
bGwgYXMgcmVxdWVzdCBhbmQgcmVzcG9uc2UgdHJhbnNmb3JtYXRpb25zLgotICAgICAgICAgKgot
ICAgICAgICAgKiBTZWUgIlNldHRpbmcgSFRUUCBIZWFkZXJzIiBhbmQgIlRyYW5zZm9ybWluZyBS
ZXF1ZXN0cyBhbmQgUmVzcG9uc2VzIiBzZWN0aW9ucyBhYm92ZS4KLSAgICAgICAgICovCi0gICAg
JGh0dHAuZGVmYXVsdHMgPSAkY29uZmlnOwotCi0KLSAgICByZXR1cm4gJGh0dHA7Ci0KLQotICAg
IGZ1bmN0aW9uIGNyZWF0ZVNob3J0TWV0aG9kcyhuYW1lcykgewotICAgICAgZm9yRWFjaChhcmd1
bWVudHMsIGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAgICAgJGh0dHBbbmFtZV0gPSBmdW5jdGlvbih1
cmwsIGNvbmZpZykgewotICAgICAgICAgIHJldHVybiAkaHR0cChleHRlbmQoY29uZmlnIHx8IHt9
LCB7Ci0gICAgICAgICAgICBtZXRob2Q6IG5hbWUsCi0gICAgICAgICAgICB1cmw6IHVybAotICAg
ICAgICAgIH0pKTsKLSAgICAgICAgfTsKLSAgICAgIH0pOwotICAgIH0KLQotCi0gICAgZnVuY3Rp
b24gY3JlYXRlU2hvcnRNZXRob2RzV2l0aERhdGEobmFtZSkgewotICAgICAgZm9yRWFjaChhcmd1
bWVudHMsIGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAgICAgJGh0dHBbbmFtZV0gPSBmdW5jdGlvbih1
cmwsIGRhdGEsIGNvbmZpZykgewotICAgICAgICAgIHJldHVybiAkaHR0cChleHRlbmQoY29uZmln
IHx8IHt9LCB7Ci0gICAgICAgICAgICBtZXRob2Q6IG5hbWUsCi0gICAgICAgICAgICB1cmw6IHVy
bCwKLSAgICAgICAgICAgIGRhdGE6IGRhdGEKLSAgICAgICAgICB9KSk7Ci0gICAgICAgIH07Ci0g
ICAgICB9KTsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIE1ha2VzIHRoZSByZXF1ZXN0Lgot
ICAgICAqCi0gICAgICogISEhIEFDQ0VTU0VTIENMT1NVUkUgVkFSUzoKLSAgICAgKiAkaHR0cEJh
Y2tlbmQsICRjb25maWcsICRsb2csICRyb290U2NvcGUsIGRlZmF1bHRDYWNoZSwgJGh0dHAucGVu
ZGluZ1JlcXVlc3RzCi0gICAgICovCi0gICAgZnVuY3Rpb24gc2VuZFJlcShjb25maWcsIHJlcURh
dGEsIHJlcUhlYWRlcnMpIHsKLSAgICAgIHZhciBkZWZlcnJlZCA9ICRxLmRlZmVyKCksCi0gICAg
ICAgICAgcHJvbWlzZSA9IGRlZmVycmVkLnByb21pc2UsCi0gICAgICAgICAgY2FjaGUsCi0gICAg
ICAgICAgY2FjaGVkUmVzcCwKLSAgICAgICAgICB1cmwgPSBidWlsZFVybChjb25maWcudXJsLCBj
b25maWcucGFyYW1zKTsKLQotICAgICAgJGh0dHAucGVuZGluZ1JlcXVlc3RzLnB1c2goY29uZmln
KTsKLSAgICAgIHByb21pc2UudGhlbihyZW1vdmVQZW5kaW5nUmVxLCByZW1vdmVQZW5kaW5nUmVx
KTsKLQotCi0gICAgICBpZiAoY29uZmlnLmNhY2hlICYmIGNvbmZpZy5tZXRob2QgPT0gJ0dFVCcp
IHsKLSAgICAgICAgY2FjaGUgPSBpc09iamVjdChjb25maWcuY2FjaGUpID8gY29uZmlnLmNhY2hl
IDogZGVmYXVsdENhY2hlOwotICAgICAgfQotCi0gICAgICBpZiAoY2FjaGUpIHsKLSAgICAgICAg
Y2FjaGVkUmVzcCA9IGNhY2hlLmdldCh1cmwpOwotICAgICAgICBpZiAoY2FjaGVkUmVzcCkgewot
ICAgICAgICAgIGlmIChjYWNoZWRSZXNwLnRoZW4pIHsKLSAgICAgICAgICAgIC8vIGNhY2hlZCBy
ZXF1ZXN0IGhhcyBhbHJlYWR5IGJlZW4gc2VudCwgYnV0IHRoZXJlIGlzIG5vIHJlc3BvbnNlIHll
dAotICAgICAgICAgICAgY2FjaGVkUmVzcC50aGVuKHJlbW92ZVBlbmRpbmdSZXEsIHJlbW92ZVBl
bmRpbmdSZXEpOwotICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFJlc3A7Ci0gICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIC8vIHNlcnZpbmcgZnJvbSBjYWNoZQotICAgICAgICAgICAgaWYg
KGlzQXJyYXkoY2FjaGVkUmVzcCkpIHsKLSAgICAgICAgICAgICAgcmVzb2x2ZVByb21pc2UoY2Fj
aGVkUmVzcFsxXSwgY2FjaGVkUmVzcFswXSwgY29weShjYWNoZWRSZXNwWzJdKSk7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICByZXNvbHZlUHJvbWlzZShjYWNoZWRSZXNwLCAy
MDAsIHt9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgLy8gcHV0IHRoZSBwcm9taXNlIGZvciB0aGUgbm9uLXRyYW5zZm9ybWVkIHJlc3Bv
bnNlIGludG8gY2FjaGUgYXMgYSBwbGFjZWhvbGRlcgotICAgICAgICAgIGNhY2hlLnB1dCh1cmws
IHByb21pc2UpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIGlmIHdlIHdvbid0IGhh
dmUgdGhlIHJlc3BvbnNlIGluIGNhY2hlLCBzZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBiYWNrZW5k
Ci0gICAgICBpZiAoIWNhY2hlZFJlc3ApIHsKLSAgICAgICAgJGh0dHBCYWNrZW5kKGNvbmZpZy5t
ZXRob2QsIHVybCwgcmVxRGF0YSwgZG9uZSwgcmVxSGVhZGVycywgY29uZmlnLnRpbWVvdXQsCi0g
ICAgICAgICAgICBjb25maWcud2l0aENyZWRlbnRpYWxzKTsKLSAgICAgIH0KLQotICAgICAgcmV0
dXJuIHByb21pc2U7Ci0KLQotICAgICAgLyoqCi0gICAgICAgKiBDYWxsYmFjayByZWdpc3RlcmVk
IHRvICRodHRwQmFja2VuZCgpOgotICAgICAgICogIC0gY2FjaGVzIHRoZSByZXNwb25zZSBpZiBk
ZXNpcmVkCi0gICAgICAgKiAgLSByZXNvbHZlcyB0aGUgcmF3ICRodHRwIHByb21pc2UKLSAgICAg
ICAqICAtIGNhbGxzICRhcHBseQotICAgICAgICovCi0gICAgICBmdW5jdGlvbiBkb25lKHN0YXR1
cywgcmVzcG9uc2UsIGhlYWRlcnNTdHJpbmcpIHsKLSAgICAgICAgaWYgKGNhY2hlKSB7Ci0gICAg
ICAgICAgaWYgKGlzU3VjY2VzcyhzdGF0dXMpKSB7Ci0gICAgICAgICAgICBjYWNoZS5wdXQodXJs
LCBbc3RhdHVzLCByZXNwb25zZSwgcGFyc2VIZWFkZXJzKGhlYWRlcnNTdHJpbmcpXSk7Ci0gICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIHJlbW92ZSBwcm9taXNlIGZyb20gdGhlIGNh
Y2hlCi0gICAgICAgICAgICBjYWNoZS5yZW1vdmUodXJsKTsKLSAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICByZXNvbHZlUHJvbWlzZShyZXNwb25zZSwgc3RhdHVzLCBoZWFkZXJzU3Ry
aW5nKTsKLSAgICAgICAgJHJvb3RTY29wZS4kYXBwbHkoKTsKLSAgICAgIH0KLQotCi0gICAgICAv
KioKLSAgICAgICAqIFJlc29sdmVzIHRoZSByYXcgJGh0dHAgcHJvbWlzZS4KLSAgICAgICAqLwot
ICAgICAgZnVuY3Rpb24gcmVzb2x2ZVByb21pc2UocmVzcG9uc2UsIHN0YXR1cywgaGVhZGVycykg
ewotICAgICAgICAvLyBub3JtYWxpemUgaW50ZXJuYWwgc3RhdHVzZXMgdG8gMAotICAgICAgICBz
dGF0dXMgPSBNYXRoLm1heChzdGF0dXMsIDApOwotCi0gICAgICAgIChpc1N1Y2Nlc3Moc3RhdHVz
KSA/IGRlZmVycmVkLnJlc29sdmUgOiBkZWZlcnJlZC5yZWplY3QpKHsKLSAgICAgICAgICBkYXRh
OiByZXNwb25zZSwKLSAgICAgICAgICBzdGF0dXM6IHN0YXR1cywKLSAgICAgICAgICBoZWFkZXJz
OiBoZWFkZXJzR2V0dGVyKGhlYWRlcnMpLAotICAgICAgICAgIGNvbmZpZzogY29uZmlnCi0gICAg
ICAgIH0pOwotICAgICAgfQotCi0KLSAgICAgIGZ1bmN0aW9uIHJlbW92ZVBlbmRpbmdSZXEoKSB7
Ci0gICAgICAgIHZhciBpZHggPSBpbmRleE9mKCRodHRwLnBlbmRpbmdSZXF1ZXN0cywgY29uZmln
KTsKLSAgICAgICAgaWYgKGlkeCAhPT0gLTEpICRodHRwLnBlbmRpbmdSZXF1ZXN0cy5zcGxpY2Uo
aWR4LCAxKTsKLSAgICAgIH0KLSAgICB9Ci0KLQotICAgIGZ1bmN0aW9uIGJ1aWxkVXJsKHVybCwg
cGFyYW1zKSB7Ci0gICAgICAgICAgaWYgKCFwYXJhbXMpIHJldHVybiB1cmw7Ci0gICAgICAgICAg
dmFyIHBhcnRzID0gW107Ci0gICAgICAgICAgZm9yRWFjaFNvcnRlZChwYXJhbXMsIGZ1bmN0aW9u
KHZhbHVlLCBrZXkpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09
IHVuZGVmaW5lZCkgcmV0dXJuOwotICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHZhbHVlKSkgewot
ICAgICAgICAgICAgICB2YWx1ZSA9IHRvSnNvbih2YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBwYXJ0cy5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChrZXkpICsgJz0nICsgZW5jb2Rl
VVJJQ29tcG9uZW50KHZhbHVlKSk7Ci0gICAgICAgICAgfSk7Ci0gICAgICAgICAgcmV0dXJuIHVy
bCArICgodXJsLmluZGV4T2YoJz8nKSA9PSAtMSkgPyAnPycgOiAnJicpICsgcGFydHMuam9pbign
JicpOwotICAgICAgICB9Ci0KLQotICB9XTsKLX0KLQotdmFyIFhIUiA9IHdpbmRvdy5YTUxIdHRw
UmVxdWVzdCB8fCBmdW5jdGlvbigpIHsKLSAgdHJ5IHsgcmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0
KCJNc3htbDIuWE1MSFRUUC42LjAiKTsgfSBjYXRjaCAoZTEpIHt9Ci0gIHRyeSB7IHJldHVybiBu
ZXcgQWN0aXZlWE9iamVjdCgiTXN4bWwyLlhNTEhUVFAuMy4wIik7IH0gY2F0Y2ggKGUyKSB7fQot
ICB0cnkgeyByZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoIk1zeG1sMi5YTUxIVFRQIik7IH0gY2F0
Y2ggKGUzKSB7fQotICB0aHJvdyBuZXcgRXJyb3IoIlRoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBw
b3J0IFhNTEh0dHBSZXF1ZXN0LiIpOwotfTsKLQotCi0vKioKLSAqIEBuZ2RvYyBvYmplY3QKLSAq
IEBuYW1lIG5nLiRodHRwQmFja2VuZAotICogQHJlcXVpcmVzICRicm93c2VyCi0gKiBAcmVxdWly
ZXMgJHdpbmRvdwotICogQHJlcXVpcmVzICRkb2N1bWVudAotICoKLSAqIEBkZXNjcmlwdGlvbgot
ICogSFRUUCBiYWNrZW5kIHVzZWQgYnkgdGhlIHtAbGluayBuZy4kaHR0cCBzZXJ2aWNlfSB0aGF0
IGRlbGVnYXRlcyB0bwotICogWE1MSHR0cFJlcXVlc3Qgb2JqZWN0IG9yIEpTT05QIGFuZCBkZWFs
cyB3aXRoIGJyb3dzZXIgaW5jb21wYXRpYmlsaXRpZXMuCi0gKgotICogWW91IHNob3VsZCBuZXZl
ciBuZWVkIHRvIHVzZSB0aGlzIHNlcnZpY2UgZGlyZWN0bHksIGluc3RlYWQgdXNlIHRoZSBoaWdo
ZXItbGV2ZWwgYWJzdHJhY3Rpb25zOgotICoge0BsaW5rIG5nLiRodHRwICRodHRwfSBvciB7QGxp
bmsgbmdSZXNvdXJjZS4kcmVzb3VyY2UgJHJlc291cmNlfS4KLSAqCi0gKiBEdXJpbmcgdGVzdGlu
ZyB0aGlzIGltcGxlbWVudGF0aW9uIGlzIHN3YXBwZWQgd2l0aCB7QGxpbmsgbmdNb2NrLiRodHRw
QmFja2VuZCBtb2NrCi0gKiAkaHR0cEJhY2tlbmR9IHdoaWNoIGNhbiBiZSB0cmFpbmVkIHdpdGgg
cmVzcG9uc2VzLgotICovCi1mdW5jdGlvbiAkSHR0cEJhY2tlbmRQcm92aWRlcigpIHsKLSAgdGhp
cy4kZ2V0ID0gWyckYnJvd3NlcicsICckd2luZG93JywgJyRkb2N1bWVudCcsIGZ1bmN0aW9uKCRi
cm93c2VyLCAkd2luZG93LCAkZG9jdW1lbnQpIHsKLSAgICByZXR1cm4gY3JlYXRlSHR0cEJhY2tl
bmQoJGJyb3dzZXIsIFhIUiwgJGJyb3dzZXIuZGVmZXIsICR3aW5kb3cuYW5ndWxhci5jYWxsYmFj
a3MsCi0gICAgICAgICRkb2N1bWVudFswXSwgJHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbC5yZXBs
YWNlKCc6JywgJycpKTsKLSAgfV07Ci19Ci0KLWZ1bmN0aW9uIGNyZWF0ZUh0dHBCYWNrZW5kKCRi
cm93c2VyLCBYSFIsICRicm93c2VyRGVmZXIsIGNhbGxiYWNrcywgcmF3RG9jdW1lbnQsIGxvY2F0
aW9uUHJvdG9jb2wpIHsKLSAgLy8gVE9ETyh2b2p0YSk6IGZpeCB0aGUgc2lnbmF0dXJlCi0gIHJl
dHVybiBmdW5jdGlvbihtZXRob2QsIHVybCwgcG9zdCwgY2FsbGJhY2ssIGhlYWRlcnMsIHRpbWVv
dXQsIHdpdGhDcmVkZW50aWFscykgewotICAgICRicm93c2VyLiQkaW5jT3V0c3RhbmRpbmdSZXF1
ZXN0Q291bnQoKTsKLSAgICB1cmwgPSB1cmwgfHwgJGJyb3dzZXIudXJsKCk7Ci0KLSAgICBpZiAo
bG93ZXJjYXNlKG1ldGhvZCkgPT0gJ2pzb25wJykgewotICAgICAgdmFyIGNhbGxiYWNrSWQgPSAn
XycgKyAoY2FsbGJhY2tzLmNvdW50ZXIrKykudG9TdHJpbmcoMzYpOwotICAgICAgY2FsbGJhY2tz
W2NhbGxiYWNrSWRdID0gZnVuY3Rpb24oZGF0YSkgewotICAgICAgICBjYWxsYmFja3NbY2FsbGJh
Y2tJZF0uZGF0YSA9IGRhdGE7Ci0gICAgICB9OwotCi0gICAgICBqc29ucFJlcSh1cmwucmVwbGFj
ZSgnSlNPTl9DQUxMQkFDSycsICdhbmd1bGFyLmNhbGxiYWNrcy4nICsgY2FsbGJhY2tJZCksCi0g
ICAgICAgICAgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmIChjYWxsYmFja3NbY2FsbGJhY2tJZF0u
ZGF0YSkgewotICAgICAgICAgIGNvbXBsZXRlUmVxdWVzdChjYWxsYmFjaywgMjAwLCBjYWxsYmFj
a3NbY2FsbGJhY2tJZF0uZGF0YSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgY29tcGxl
dGVSZXF1ZXN0KGNhbGxiYWNrLCAtMik7Ci0gICAgICAgIH0KLSAgICAgICAgZGVsZXRlIGNhbGxi
YWNrc1tjYWxsYmFja0lkXTsKLSAgICAgIH0pOwotICAgIH0gZWxzZSB7Ci0gICAgICB2YXIgeGhy
ID0gbmV3IFhIUigpOwotICAgICAgeGhyLm9wZW4obWV0aG9kLCB1cmwsIHRydWUpOwotICAgICAg
Zm9yRWFjaChoZWFkZXJzLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7Ci0gICAgICAgIGlmICh2YWx1
ZSkgeGhyLnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWx1ZSk7Ci0gICAgICB9KTsKLQotICAgICAg
dmFyIHN0YXR1czsKLQotICAgICAgLy8gSW4gSUU2IGFuZCA3LCB0aGlzIG1pZ2h0IGJlIGNhbGxl
ZCBzeW5jaHJvbm91c2x5IHdoZW4geGhyLnNlbmQgYmVsb3cgaXMgY2FsbGVkIGFuZCB0aGUKLSAg
ICAgIC8vIHJlc3BvbnNlIGlzIGluIHRoZSBjYWNoZS4gdGhlIHByb21pc2UgYXBpIHdpbGwgZW5z
dXJlIHRoYXQgdG8gdGhlIGFwcCBjb2RlIHRoZSBhcGkgaXMKLSAgICAgIC8vIGFsd2F5cyBhc3lu
YwotICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICBp
ZiAoeGhyLnJlYWR5U3RhdGUgPT0gNCkgewotICAgICAgICAgIHZhciByZXNwb25zZUhlYWRlcnMg
PSB4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk7Ci0KLSAgICAgICAgICAvLyBUT0RPKHZvanRh
KTogcmVtb3ZlIG9uY2UgRmlyZWZveCAyMSBnZXRzIHJlbGVhc2VkLgotICAgICAgICAgIC8vIGJl
Z2luOiB3b3JrYXJvdW5kIHRvIG92ZXJjb21lIEZpcmVmb3ggQ09SUyBodHRwIHJlc3BvbnNlIGhl
YWRlcnMgYnVnCi0gICAgICAgICAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjA4NzM1Ci0gICAgICAgICAgLy8gRmlyZWZveCBhbHJlYWR5IHBhdGNoZWQg
aW4gbmlnaHRseS4gU2hvdWxkIGxhbmQgaW4gRmlyZWZveCAyMS4KLQotICAgICAgICAgIC8vIENP
UlMgInNpbXBsZSByZXNwb25zZSBoZWFkZXJzIiBodHRwOi8vd3d3LnczLm9yZy9UUi9jb3JzLwot
ICAgICAgICAgIHZhciB2YWx1ZSwKLSAgICAgICAgICAgICAgc2ltcGxlSGVhZGVycyA9IFsiQ2Fj
aGUtQ29udHJvbCIsICJDb250ZW50LUxhbmd1YWdlIiwgIkNvbnRlbnQtVHlwZSIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV4cGlyZXMiLCAiTGFzdC1Nb2RpZmllZCIsICJQ
cmFnbWEiXTsKLSAgICAgICAgICBpZiAoIXJlc3BvbnNlSGVhZGVycykgewotICAgICAgICAgICAg
cmVzcG9uc2VIZWFkZXJzID0gIiI7Ci0gICAgICAgICAgICBmb3JFYWNoKHNpbXBsZUhlYWRlcnMs
IGZ1bmN0aW9uIChoZWFkZXIpIHsKLSAgICAgICAgICAgICAgdmFyIHZhbHVlID0geGhyLmdldFJl
c3BvbnNlSGVhZGVyKGhlYWRlcik7Ci0gICAgICAgICAgICAgIGlmICh2YWx1ZSkgewotICAgICAg
ICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzICs9IGhlYWRlciArICI6ICIgKyB2YWx1ZSArICJc
biI7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICAgIH0KLSAgICAg
ICAgICAvLyBlbmQgb2YgdGhlIHdvcmthcm91bmQuCi0KLSAgICAgICAgICBjb21wbGV0ZVJlcXVl
c3QoY2FsbGJhY2ssIHN0YXR1cyB8fCB4aHIuc3RhdHVzLCB4aHIucmVzcG9uc2VUZXh0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnMpOwotICAgICAgICB9Ci0gICAg
ICB9OwotCi0gICAgICBpZiAod2l0aENyZWRlbnRpYWxzKSB7Ci0gICAgICAgIHhoci53aXRoQ3Jl
ZGVudGlhbHMgPSB0cnVlOwotICAgICAgfQotCi0gICAgICB4aHIuc2VuZChwb3N0IHx8ICcnKTsK
LQotICAgICAgaWYgKHRpbWVvdXQgPiAwKSB7Ci0gICAgICAgICRicm93c2VyRGVmZXIoZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgc3RhdHVzID0gLTE7Ci0gICAgICAgICAgeGhyLmFib3J0KCk7Ci0g
ICAgICAgIH0sIHRpbWVvdXQpOwotICAgICAgfQotICAgIH0KLQotCi0gICAgZnVuY3Rpb24gY29t
cGxldGVSZXF1ZXN0KGNhbGxiYWNrLCBzdGF0dXMsIHJlc3BvbnNlLCBoZWFkZXJzU3RyaW5nKSB7
Ci0gICAgICAvLyBVUkxfTUFUQ0ggaXMgZGVmaW5lZCBpbiBzcmMvc2VydmljZS9sb2NhdGlvbi5q
cwotICAgICAgdmFyIHByb3RvY29sID0gKHVybC5tYXRjaChVUkxfTUFUQ0gpIHx8IFsnJywgbG9j
YXRpb25Qcm90b2NvbF0pWzFdOwotCi0gICAgICAvLyBmaXggc3RhdHVzIGNvZGUgZm9yIGZpbGUg
cHJvdG9jb2wgKGl0J3MgYWx3YXlzIDApCi0gICAgICBzdGF0dXMgPSAocHJvdG9jb2wgPT0gJ2Zp
bGUnKSA/IChyZXNwb25zZSA/IDIwMCA6IDQwNCkgOiBzdGF0dXM7Ci0KLSAgICAgIC8vIG5vcm1h
bGl6ZSBJRSBidWcgKGh0dHA6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzE0NTApCi0gICAgICBz
dGF0dXMgPSBzdGF0dXMgPT0gMTIyMyA/IDIwNCA6IHN0YXR1czsKLQotICAgICAgY2FsbGJhY2so
c3RhdHVzLCByZXNwb25zZSwgaGVhZGVyc1N0cmluZyk7Ci0gICAgICAkYnJvd3Nlci4kJGNvbXBs
ZXRlT3V0c3RhbmRpbmdSZXF1ZXN0KG5vb3ApOwotICAgIH0KLSAgfTsKLQotICBmdW5jdGlvbiBq
c29ucFJlcSh1cmwsIGRvbmUpIHsKLSAgICAvLyB3ZSBjYW4ndCB1c2UgalF1ZXJ5L2pxTGl0ZSBo
ZXJlIGJlY2F1c2UgalF1ZXJ5IGRvZXMgY3Jhenkgc2hpdCB3aXRoIHNjcmlwdCBlbGVtZW50cywg
ZS5nLjoKLSAgICAvLyAtIGZldGNoZXMgbG9jYWwgc2NyaXB0cyB2aWEgWEhSIGFuZCBldmFscyB0
aGVtCi0gICAgLy8gLSBhZGRzIGFuZCBpbW1lZGlhdGVseSByZW1vdmVzIHNjcmlwdCBlbGVtZW50
cyBmcm9tIHRoZSBkb2N1bWVudAotICAgIHZhciBzY3JpcHQgPSByYXdEb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdzY3JpcHQnKSwKLSAgICAgICAgZG9uZVdyYXBwZXIgPSBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICByYXdEb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHNjcmlwdCk7Ci0gICAgICAgICAg
aWYgKGRvbmUpIGRvbmUoKTsKLSAgICAgICAgfTsKLQotICAgIHNjcmlwdC50eXBlID0gJ3RleHQv
amF2YXNjcmlwdCc7Ci0gICAgc2NyaXB0LnNyYyA9IHVybDsKLQotICAgIGlmIChtc2llKSB7Ci0g
ICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlm
ICgvbG9hZGVkfGNvbXBsZXRlLy50ZXN0KHNjcmlwdC5yZWFkeVN0YXRlKSkgZG9uZVdyYXBwZXIo
KTsKLSAgICAgIH07Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNjcmlwdC5vbmxvYWQgPSBzY3JpcHQu
b25lcnJvciA9IGRvbmVXcmFwcGVyOwotICAgIH0KLQotICAgIHJhd0RvY3VtZW50LmJvZHkuYXBw
ZW5kQ2hpbGQoc2NyaXB0KTsKLSAgfQotfQotCi0vKioKLSAqIEBuZ2RvYyBvYmplY3QKLSAqIEBu
YW1lIG5nLiRsb2NhbGUKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqICRsb2NhbGUgc2VydmljZSBw
cm92aWRlcyBsb2NhbGl6YXRpb24gcnVsZXMgZm9yIHZhcmlvdXMgQW5ndWxhciBjb21wb25lbnRz
LiBBcyBvZiByaWdodCBub3cgdGhlCi0gKiBvbmx5IHB1YmxpYyBhcGkgaXM6Ci0gKgotICogKiBg
aWRgIOKAkyBge3N0cmluZ31gIOKAkyBsb2NhbGUgaWQgZm9ybWF0dGVkIGFzIGBsYW5ndWFnZUlk
LWNvdW50cnlJZGAgKGUuZy4gYGVuLXVzYCkKLSAqLwotZnVuY3Rpb24gJExvY2FsZVByb3ZpZGVy
KCl7Ci0gIHRoaXMuJGdldCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB7Ci0gICAgICBpZDog
J2VuLXVzJywKLQotICAgICAgTlVNQkVSX0ZPUk1BVFM6IHsKLSAgICAgICAgREVDSU1BTF9TRVA6
ICcuJywKLSAgICAgICAgR1JPVVBfU0VQOiAnLCcsCi0gICAgICAgIFBBVFRFUk5TOiBbCi0gICAg
ICAgICAgeyAvLyBEZWNpbWFsIFBhdHRlcm4KLSAgICAgICAgICAgIG1pbkludDogMSwKLSAgICAg
ICAgICAgIG1pbkZyYWM6IDAsCi0gICAgICAgICAgICBtYXhGcmFjOiAzLAotICAgICAgICAgICAg
cG9zUHJlOiAnJywKLSAgICAgICAgICAgIHBvc1N1ZjogJycsCi0gICAgICAgICAgICBuZWdQcmU6
ICctJywKLSAgICAgICAgICAgIG5lZ1N1ZjogJycsCi0gICAgICAgICAgICBnU2l6ZTogMywKLSAg
ICAgICAgICAgIGxnU2l6ZTogMwotICAgICAgICAgIH0seyAvL0N1cnJlbmN5IFBhdHRlcm4KLSAg
ICAgICAgICAgIG1pbkludDogMSwKLSAgICAgICAgICAgIG1pbkZyYWM6IDIsCi0gICAgICAgICAg
ICBtYXhGcmFjOiAyLAotICAgICAgICAgICAgcG9zUHJlOiAnXHUwMEE0JywKLSAgICAgICAgICAg
IHBvc1N1ZjogJycsCi0gICAgICAgICAgICBuZWdQcmU6ICcoXHUwMEE0JywKLSAgICAgICAgICAg
IG5lZ1N1ZjogJyknLAotICAgICAgICAgICAgZ1NpemU6IDMsCi0gICAgICAgICAgICBsZ1NpemU6
IDMKLSAgICAgICAgICB9Ci0gICAgICAgIF0sCi0gICAgICAgIENVUlJFTkNZX1NZTTogJyQnCi0g
ICAgICB9LAotCi0gICAgICBEQVRFVElNRV9GT1JNQVRTOiB7Ci0gICAgICAgIE1PTlRIOiAnSmFu
dWFyeSxGZWJydWFyeSxNYXJjaCxBcHJpbCxNYXksSnVuZSxKdWx5LEF1Z3VzdCxTZXB0ZW1iZXIs
T2N0b2JlcixOb3ZlbWJlcixEZWNlbWJlcicKLSAgICAgICAgICAgICAgICAuc3BsaXQoJywnKSwK
LSAgICAgICAgU0hPUlRNT05USDogICdKYW4sRmViLE1hcixBcHIsTWF5LEp1bixKdWwsQXVnLFNl
cCxPY3QsTm92LERlYycuc3BsaXQoJywnKSwKLSAgICAgICAgREFZOiAnU3VuZGF5LE1vbmRheSxU
dWVzZGF5LFdlZG5lc2RheSxUaHVyc2RheSxGcmlkYXksU2F0dXJkYXknLnNwbGl0KCcsJyksCi0g
ICAgICAgIFNIT1JUREFZOiAnU3VuLE1vbixUdWUsV2VkLFRodSxGcmksU2F0Jy5zcGxpdCgnLCcp
LAotICAgICAgICBBTVBNUzogWydBTScsJ1BNJ10sCi0gICAgICAgIG1lZGl1bTogJ01NTSBkLCB5
IGg6bW06c3MgYScsCi0gICAgICAgIHNob3J0OiAnTS9kL3l5IGg6bW0gYScsCi0gICAgICAgIGZ1
bGxEYXRlOiAnRUVFRSwgTU1NTSBkLCB5JywKLSAgICAgICAgbG9uZ0RhdGU6ICdNTU1NIGQsIHkn
LAotICAgICAgICBtZWRpdW1EYXRlOiAnTU1NIGQsIHknLAotICAgICAgICBzaG9ydERhdGU6ICdN
L2QveXknLAotICAgICAgICBtZWRpdW1UaW1lOiAnaDptbTpzcyBhJywKLSAgICAgICAgc2hvcnRU
aW1lOiAnaDptbSBhJwotICAgICAgfSwKLQotICAgICAgcGx1cmFsQ2F0OiBmdW5jdGlvbihudW0p
IHsKLSAgICAgICAgaWYgKG51bSA9PT0gMSkgewotICAgICAgICAgIHJldHVybiAnb25lJzsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gJ290aGVyJzsKLSAgICAgIH0KLSAgICB9OwotICB9Owot
fQotCi1mdW5jdGlvbiAkVGltZW91dFByb3ZpZGVyKCkgewotICB0aGlzLiRnZXQgPSBbJyRyb290
U2NvcGUnLCAnJGJyb3dzZXInLCAnJHEnLCAnJGV4Y2VwdGlvbkhhbmRsZXInLAotICAgICAgIGZ1
bmN0aW9uKCRyb290U2NvcGUsICAgJGJyb3dzZXIsICAgJHEsICAgJGV4Y2VwdGlvbkhhbmRsZXIp
IHsKLSAgICB2YXIgZGVmZXJyZWRzID0ge307Ci0KLQotICAgICAvKioKLSAgICAgICogQG5nZG9j
IGZ1bmN0aW9uCi0gICAgICAqIEBuYW1lIG5nLiR0aW1lb3V0Ci0gICAgICAqIEByZXF1aXJlcyAk
YnJvd3NlcgotICAgICAgKgotICAgICAgKiBAZGVzY3JpcHRpb24KLSAgICAgICogQW5ndWxhcidz
IHdyYXBwZXIgZm9yIGB3aW5kb3cuc2V0VGltZW91dGAuIFRoZSBgZm5gIGZ1bmN0aW9uIGlzIHdy
YXBwZWQgaW50byBhIHRyeS9jYXRjaAotICAgICAgKiBibG9jayBhbmQgZGVsZWdhdGVzIGFueSBl
eGNlcHRpb25zIHRvCi0gICAgICAqIHtAbGluayBuZy4kZXhjZXB0aW9uSGFuZGxlciAkZXhjZXB0
aW9uSGFuZGxlcn0gc2VydmljZS4KLSAgICAgICoKLSAgICAgICogVGhlIHJldHVybiB2YWx1ZSBv
ZiByZWdpc3RlcmluZyBhIHRpbWVvdXQgZnVuY3Rpb24gaXMgYSBwcm9taXNlLCB3aGljaCB3aWxs
IGJlIHJlc29sdmVkIHdoZW4KLSAgICAgICogdGhlIHRpbWVvdXQgaXMgcmVhY2hlZCBhbmQgdGhl
IHRpbWVvdXQgZnVuY3Rpb24gaXMgZXhlY3V0ZWQuCi0gICAgICAqCi0gICAgICAqIFRvIGNhbmNl
bCBhIHRpbWVvdXQgcmVxdWVzdCwgY2FsbCBgJHRpbWVvdXQuY2FuY2VsKHByb21pc2UpYC4KLSAg
ICAgICoKLSAgICAgICogSW4gdGVzdHMgeW91IGNhbiB1c2Uge0BsaW5rIG5nTW9jay4kdGltZW91
dCBgJHRpbWVvdXQuZmx1c2goKWB9IHRvCi0gICAgICAqIHN5bmNocm9ub3VzbHkgZmx1c2ggdGhl
IHF1ZXVlIG9mIGRlZmVycmVkIGZ1bmN0aW9ucy4KLSAgICAgICoKLSAgICAgICogQHBhcmFtIHtm
dW5jdGlvbigpfSBmbiBBIGZ1bmN0aW9uLCB3aG9zZSBleGVjdXRpb24gc2hvdWxkIGJlIGRlbGF5
ZWQuCi0gICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gW2RlbGF5PTBdIERlbGF5IGluIG1pbGxpc2Vj
b25kcy4KLSAgICAgICogQHBhcmFtIHtib29sZWFuPX0gW2ludm9rZUFwcGx5PXRydWVdIElmIHNl
dCB0byBgZmFsc2VgIHNraXBzIG1vZGVsIGRpcnR5IGNoZWNraW5nLCBvdGhlcndpc2UKLSAgICAg
ICogICB3aWxsIGludm9rZSBgZm5gIHdpdGhpbiB0aGUge0BsaW5rIG5nLiRyb290U2NvcGUuU2Nv
cGUjJGFwcGx5ICRhcHBseX0gYmxvY2suCi0gICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9t
aXNlIHRoYXQgd2lsbCBiZSByZXNvbHZlZCB3aGVuIHRoZSB0aW1lb3V0IGlzIHJlYWNoZWQuIFRo
ZSB2YWx1ZSB0aGlzCi0gICAgICAqICAgcHJvbWlzZSB3aWxsIGJlIHJlc29sdmVkIHdpdGggaXMg
dGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgYGZuYCBmdW5jdGlvbi4KLSAgICAgICovCi0gICAgZnVu
Y3Rpb24gdGltZW91dChmbiwgZGVsYXksIGludm9rZUFwcGx5KSB7Ci0gICAgICB2YXIgZGVmZXJy
ZWQgPSAkcS5kZWZlcigpLAotICAgICAgICAgIHByb21pc2UgPSBkZWZlcnJlZC5wcm9taXNlLAot
ICAgICAgICAgIHNraXBBcHBseSA9IChpc0RlZmluZWQoaW52b2tlQXBwbHkpICYmICFpbnZva2VB
cHBseSksCi0gICAgICAgICAgdGltZW91dElkLCBjbGVhbnVwOwotCi0gICAgICB0aW1lb3V0SWQg
PSAkYnJvd3Nlci5kZWZlcihmdW5jdGlvbigpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICBk
ZWZlcnJlZC5yZXNvbHZlKGZuKCkpOwotICAgICAgICB9IGNhdGNoKGUpIHsKLSAgICAgICAgICBk
ZWZlcnJlZC5yZWplY3QoZSk7Ci0gICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoZSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoIXNraXBBcHBseSkgJHJvb3RTY29wZS4kYXBwbHkoKTsKLSAg
ICAgIH0sIGRlbGF5KTsKLQotICAgICAgY2xlYW51cCA9IGZ1bmN0aW9uKCkgewotICAgICAgICBk
ZWxldGUgZGVmZXJyZWRzW3Byb21pc2UuJCR0aW1lb3V0SWRdOwotICAgICAgfTsKLQotICAgICAg
cHJvbWlzZS4kJHRpbWVvdXRJZCA9IHRpbWVvdXRJZDsKLSAgICAgIGRlZmVycmVkc1t0aW1lb3V0
SWRdID0gZGVmZXJyZWQ7Ci0gICAgICBwcm9taXNlLnRoZW4oY2xlYW51cCwgY2xlYW51cCk7Ci0K
LSAgICAgIHJldHVybiBwcm9taXNlOwotICAgIH0KLQotCi0gICAgIC8qKgotICAgICAgKiBAbmdk
b2MgZnVuY3Rpb24KLSAgICAgICogQG5hbWUgbmcuJHRpbWVvdXQjY2FuY2VsCi0gICAgICAqIEBt
ZXRob2RPZiBuZy4kdGltZW91dAotICAgICAgKgotICAgICAgKiBAZGVzY3JpcHRpb24KLSAgICAg
ICogQ2FuY2VscyBhIHRhc2sgYXNzb2NpYXRlZCB3aXRoIHRoZSBgcHJvbWlzZWAuIEFzIGEgcmVz
dWx0IG9mIHRoaXMsIHRoZSBwcm9taXNlIHdpbGwgYmUKLSAgICAgICogcmVzb2x2ZWQgd2l0aCBh
IHJlamVjdGlvbi4KLSAgICAgICoKLSAgICAgICogQHBhcmFtIHtQcm9taXNlPX0gcHJvbWlzZSBQ
cm9taXNlIHJldHVybmVkIGJ5IHRoZSBgJHRpbWVvdXRgIGZ1bmN0aW9uLgotICAgICAgKiBAcmV0
dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHRhc2sgaGFzbid0IGV4ZWN1dGVk
IHlldCBhbmQgd2FzIHN1Y2Nlc3NmdWxseQotICAgICAgKiAgIGNhbmNlbGVkLgotICAgICAgKi8K
LSAgICB0aW1lb3V0LmNhbmNlbCA9IGZ1bmN0aW9uKHByb21pc2UpIHsKLSAgICAgIGlmIChwcm9t
aXNlICYmIHByb21pc2UuJCR0aW1lb3V0SWQgaW4gZGVmZXJyZWRzKSB7Ci0gICAgICAgIGRlZmVy
cmVkc1twcm9taXNlLiQkdGltZW91dElkXS5yZWplY3QoJ2NhbmNlbGVkJyk7Ci0gICAgICAgIHJl
dHVybiAkYnJvd3Nlci5kZWZlci5jYW5jZWwocHJvbWlzZS4kJHRpbWVvdXRJZCk7Ci0gICAgICB9
Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfTsKLQotICAgIHJldHVybiB0aW1lb3V0OwotICB9
XTsKLX0KLQotLyoqCi0gKiBAbmdkb2Mgb2JqZWN0Ci0gKiBAbmFtZSBuZy4kZmlsdGVyUHJvdmlk
ZXIKLSAqIEBkZXNjcmlwdGlvbgotICoKLSAqIEZpbHRlcnMgYXJlIGp1c3QgZnVuY3Rpb25zIHdo
aWNoIHRyYW5zZm9ybSBpbnB1dCB0byBhbiBvdXRwdXQuIEhvd2V2ZXIgZmlsdGVycyBuZWVkIHRv
IGJlIERlcGVuZGVuY3kgSW5qZWN0ZWQuIFRvCi0gKiBhY2hpZXZlIHRoaXMgYSBmaWx0ZXIgZGVm
aW5pdGlvbiBjb25zaXN0cyBvZiBhIGZhY3RvcnkgZnVuY3Rpb24gd2hpY2ggaXMgYW5ub3RhdGVk
IHdpdGggZGVwZW5kZW5jaWVzIGFuZCBpcwotICogcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGEg
ZmlsdGVyIGZ1bmN0aW9uLgotICoKLSAqIDxwcmU+Ci0gKiAgIC8vIEZpbHRlciByZWdpc3RyYXRp
b24KLSAqICAgZnVuY3Rpb24gTXlNb2R1bGUoJHByb3ZpZGUsICRmaWx0ZXJQcm92aWRlcikgewot
ICogICAgIC8vIGNyZWF0ZSBhIHNlcnZpY2UgdG8gZGVtb25zdHJhdGUgaW5qZWN0aW9uIChub3Qg
YWx3YXlzIG5lZWRlZCkKLSAqICAgICAkcHJvdmlkZS52YWx1ZSgnZ3JlZXQnLCBmdW5jdGlvbihu
YW1lKXsKLSAqICAgICAgIHJldHVybiAnSGVsbG8gJyArIG5hbWUgKyAnISc7Ci0gKiAgICAgfSk7
Ci0gKgotICogICAgIC8vIHJlZ2lzdGVyIGEgZmlsdGVyIGZhY3Rvcnkgd2hpY2ggdXNlcyB0aGUK
LSAqICAgICAvLyBncmVldCBzZXJ2aWNlIHRvIGRlbW9uc3RyYXRlIERJLgotICogICAgICRmaWx0
ZXJQcm92aWRlci5yZWdpc3RlcignZ3JlZXQnLCBmdW5jdGlvbihncmVldCl7Ci0gKiAgICAgICAv
LyByZXR1cm4gdGhlIGZpbHRlciBmdW5jdGlvbiB3aGljaCB1c2VzIHRoZSBncmVldCBzZXJ2aWNl
Ci0gKiAgICAgICAvLyB0byBnZW5lcmF0ZSBzYWx1dGF0aW9uCi0gKiAgICAgICByZXR1cm4gZnVu
Y3Rpb24odGV4dCkgewotICogICAgICAgICAvLyBmaWx0ZXJzIG5lZWQgdG8gYmUgZm9yZ2l2aW5n
IHNvIGNoZWNrIGlucHV0IHZhbGlkaXR5Ci0gKiAgICAgICAgIHJldHVybiB0ZXh0ICYmIGdyZWV0
KHRleHQpIHx8IHRleHQ7Ci0gKiAgICAgICB9OwotICogICAgIH0pOwotICogICB9Ci0gKiA8L3By
ZT4KLSAqCi0gKiBUaGUgZmlsdGVyIGZ1bmN0aW9uIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgYCRp
bmplY3RvcmAgdW5kZXIgdGhlIGZpbHRlciBuYW1lIHN1ZmZpeGUgd2l0aCBgRmlsdGVyYC4KLSAq
IDxwcmU+Ci0gKiAgIGl0KCdzaG91bGQgYmUgdGhlIHNhbWUgaW5zdGFuY2UnLCBpbmplY3QoCi0g
KiAgICAgZnVuY3Rpb24oJGZpbHRlclByb3ZpZGVyKSB7Ci0gKiAgICAgICAkZmlsdGVyUHJvdmlk
ZXIucmVnaXN0ZXIoJ3JldmVyc2UnLCBmdW5jdGlvbigpewotICogICAgICAgICByZXR1cm4gLi4u
OwotICogICAgICAgfSk7Ci0gKiAgICAgfSwKLSAqICAgICBmdW5jdGlvbigkZmlsdGVyLCByZXZl
cnNlRmlsdGVyKSB7Ci0gKiAgICAgICBleHBlY3QoJGZpbHRlcigncmV2ZXJzZScpKS50b0JlKHJl
dmVyc2VGaWx0ZXIpOwotICogICAgIH0pOwotICogPC9wcmU+Ci0gKgotICoKLSAqIEZvciBtb3Jl
IGluZm9ybWF0aW9uIGFib3V0IGhvdyBhbmd1bGFyIGZpbHRlcnMgd29yaywgYW5kIGhvdyB0byBj
cmVhdGUgeW91ciBvd24gZmlsdGVycywgc2VlCi0gKiB7QGxpbmsgZ3VpZGUvZGV2X2d1aWRlLnRl
bXBsYXRlcy5maWx0ZXJzIFVuZGVyc3RhbmRpbmcgQW5ndWxhciBGaWx0ZXJzfSBpbiB0aGUgYW5n
dWxhciBEZXZlbG9wZXIKLSAqIEd1aWRlLgotICovCi0vKioKLSAqIEBuZ2RvYyBtZXRob2QKLSAq
IEBuYW1lIG5nLiRmaWx0ZXJQcm92aWRlciNyZWdpc3RlcgotICogQG1ldGhvZE9mIG5nLiRmaWx0
ZXJQcm92aWRlcgotICogQGRlc2NyaXB0aW9uCi0gKiBSZWdpc3RlciBmaWx0ZXIgZmFjdG9yeSBm
dW5jdGlvbi4KLSAqCi0gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBOYW1lIG9mIHRoZSBmaWx0ZXIu
Ci0gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmbiBUaGUgZmlsdGVyIGZhY3RvcnkgZnVuY3Rpb24gd2hp
Y2ggaXMgaW5qZWN0YWJsZS4KLSAqLwotCi0KLS8qKgotICogQG5nZG9jIGZ1bmN0aW9uCi0gKiBA
bmFtZSBuZy4kZmlsdGVyCi0gKiBAZnVuY3Rpb24KLSAqIEBkZXNjcmlwdGlvbgotICogRmlsdGVy
cyBhcmUgdXNlZCBmb3IgZm9ybWF0dGluZyBkYXRhIGRpc3BsYXllZCB0byB0aGUgdXNlci4KLSAq
Ci0gKiBUaGUgZ2VuZXJhbCBzeW50YXggaW4gdGVtcGxhdGVzIGlzIGFzIGZvbGxvd3M6Ci0gKgot
ICogICAgICAgICB7eyBleHByZXNzaW9uIFt8IGZpbHRlcl9uYW1lWzpwYXJhbWV0ZXJfdmFsdWVd
IC4uLiBdIH19Ci0gKgotICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgTmFtZSBvZiB0aGUgZmlsdGVy
IGZ1bmN0aW9uIHRvIHJldHJpZXZlCi0gKiBAcmV0dXJuIHtGdW5jdGlvbn0gdGhlIGZpbHRlciBm
dW5jdGlvbgotICovCi0kRmlsdGVyUHJvdmlkZXIuJGluamVjdCA9IFsnJHByb3ZpZGUnXTsKLWZ1
bmN0aW9uICRGaWx0ZXJQcm92aWRlcigkcHJvdmlkZSkgewotICB2YXIgc3VmZml4ID0gJ0ZpbHRl
cic7Ci0KLSAgZnVuY3Rpb24gcmVnaXN0ZXIobmFtZSwgZmFjdG9yeSkgewotICAgIHJldHVybiAk
cHJvdmlkZS5mYWN0b3J5KG5hbWUgKyBzdWZmaXgsIGZhY3RvcnkpOwotICB9Ci0gIHRoaXMucmVn
aXN0ZXIgPSByZWdpc3RlcjsKLQotICB0aGlzLiRnZXQgPSBbJyRpbmplY3RvcicsIGZ1bmN0aW9u
KCRpbmplY3RvcikgewotICAgIHJldHVybiBmdW5jdGlvbihuYW1lKSB7Ci0gICAgICByZXR1cm4g
JGluamVjdG9yLmdldChuYW1lICsgc3VmZml4KTsKLSAgICB9Ci0gIH1dOwotCi0gIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotICByZWdpc3RlcignY3VycmVuY3kn
LCBjdXJyZW5jeUZpbHRlcik7Ci0gIHJlZ2lzdGVyKCdkYXRlJywgZGF0ZUZpbHRlcik7Ci0gIHJl
Z2lzdGVyKCdmaWx0ZXInLCBmaWx0ZXJGaWx0ZXIpOwotICByZWdpc3RlcignanNvbicsIGpzb25G
aWx0ZXIpOwotICByZWdpc3RlcignbGltaXRUbycsIGxpbWl0VG9GaWx0ZXIpOwotICByZWdpc3Rl
cignbG93ZXJjYXNlJywgbG93ZXJjYXNlRmlsdGVyKTsKLSAgcmVnaXN0ZXIoJ251bWJlcicsIG51
bWJlckZpbHRlcik7Ci0gIHJlZ2lzdGVyKCdvcmRlckJ5Jywgb3JkZXJCeUZpbHRlcik7Ci0gIHJl
Z2lzdGVyKCd1cHBlcmNhc2UnLCB1cHBlcmNhc2VGaWx0ZXIpOwotfQotCi0vKioKLSAqIEBuZ2Rv
YyBmaWx0ZXIKLSAqIEBuYW1lIG5nLmZpbHRlcjpmaWx0ZXIKLSAqIEBmdW5jdGlvbgotICoKLSAq
IEBkZXNjcmlwdGlvbgotICogU2VsZWN0cyBhIHN1YnNldCBvZiBpdGVtcyBmcm9tIGBhcnJheWAg
YW5kIHJldHVybnMgaXQgYXMgYSBuZXcgYXJyYXkuCi0gKgotICogTm90ZTogVGhpcyBmdW5jdGlv
biBpcyB1c2VkIHRvIGF1Z21lbnQgdGhlIGBBcnJheWAgdHlwZSBpbiBBbmd1bGFyIGV4cHJlc3Np
b25zLiBTZWUKLSAqIHtAbGluayBuZy4kZmlsdGVyfSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91
dCBBbmd1bGFyIGFycmF5cy4KLSAqCi0gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgc291cmNl
IGFycmF5LgotICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fGZ1bmN0aW9uKCl9IGV4cHJlc3Npb24g
VGhlIHByZWRpY2F0ZSB0byBiZSB1c2VkIGZvciBzZWxlY3RpbmcgaXRlbXMgZnJvbQotICogICBg
YXJyYXlgLgotICoKLSAqICAgQ2FuIGJlIG9uZSBvZjoKLSAqCi0gKiAgIC0gYHN0cmluZ2A6IFBy
ZWRpY2F0ZSB0aGF0IHJlc3VsdHMgaW4gYSBzdWJzdHJpbmcgbWF0Y2ggdXNpbmcgdGhlIHZhbHVl
IG9mIGBleHByZXNzaW9uYAotICogICAgIHN0cmluZy4gQWxsIHN0cmluZ3Mgb3Igb2JqZWN0cyB3
aXRoIHN0cmluZyBwcm9wZXJ0aWVzIGluIGBhcnJheWAgdGhhdCBjb250YWluIHRoaXMgc3RyaW5n
Ci0gKiAgICAgd2lsbCBiZSByZXR1cm5lZC4gVGhlIHByZWRpY2F0ZSBjYW4gYmUgbmVnYXRlZCBi
eSBwcmVmaXhpbmcgdGhlIHN0cmluZyB3aXRoIGAhYC4KLSAqCi0gKiAgIC0gYE9iamVjdGA6IEEg
cGF0dGVybiBvYmplY3QgY2FuIGJlIHVzZWQgdG8gZmlsdGVyIHNwZWNpZmljIHByb3BlcnRpZXMg
b24gb2JqZWN0cyBjb250YWluZWQKLSAqICAgICBieSBgYXJyYXlgLiBGb3IgZXhhbXBsZSBge25h
bWU6Ik0iLCBwaG9uZToiMSJ9YCBwcmVkaWNhdGUgd2lsbCByZXR1cm4gYW4gYXJyYXkgb2YgaXRl
bXMKLSAqICAgICB3aGljaCBoYXZlIHByb3BlcnR5IGBuYW1lYCBjb250YWluaW5nICJNIiBhbmQg
cHJvcGVydHkgYHBob25lYCBjb250YWluaW5nICIxIi4gQSBzcGVjaWFsCi0gKiAgICAgcHJvcGVy
dHkgbmFtZSBgJGAgY2FuIGJlIHVzZWQgKGFzIGluIGB7JDoidGV4dCJ9YCkgdG8gYWNjZXB0IGEg
bWF0Y2ggYWdhaW5zdCBhbnkKLSAqICAgICBwcm9wZXJ0eSBvZiB0aGUgb2JqZWN0LiBUaGF0J3Mg
ZXF1aXZhbGVudCB0byB0aGUgc2ltcGxlIHN1YnN0cmluZyBtYXRjaCB3aXRoIGEgYHN0cmluZ2AK
LSAqICAgICBhcyBkZXNjcmliZWQgYWJvdmUuCi0gKgotICogICAtIGBmdW5jdGlvbmA6IEEgcHJl
ZGljYXRlIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHdyaXRlIGFyYml0cmFyeSBmaWx0ZXJzLiBU
aGUgZnVuY3Rpb24gaXMKLSAqICAgICBjYWxsZWQgZm9yIGVhY2ggZWxlbWVudCBvZiBgYXJyYXlg
LiBUaGUgZmluYWwgcmVzdWx0IGlzIGFuIGFycmF5IG9mIHRob3NlIGVsZW1lbnRzIHRoYXQKLSAq
ICAgICB0aGUgcHJlZGljYXRlIHJldHVybmVkIHRydWUgZm9yLgotICoKLSAqIEBleGFtcGxlCi0g
ICA8ZG9jOmV4YW1wbGU+Ci0gICAgIDxkb2M6c291cmNlPgotICAgICAgIDxkaXYgbmctaW5pdD0i
ZnJpZW5kcyA9IFt7bmFtZTonSm9obicsIHBob25lOic1NTUtMTI3Nid9LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7bmFtZTonTWFyeScsIHBob25lOic4MDAtQklHLU1BUlknfSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge25hbWU6J01pa2UnLCBwaG9uZTonNTU1
LTQzMjEnfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge25hbWU6J0FkYW0nLCBw
aG9uZTonNTU1LTU2NzgnfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge25hbWU6
J0p1bGllJywgcGhvbmU6JzU1NS04NzY1J31dIj48L2Rpdj4KLQotICAgICAgIFNlYXJjaDogPGlu
cHV0IG5nLW1vZGVsPSJzZWFyY2hUZXh0Ij4KLSAgICAgICA8dGFibGUgaWQ9InNlYXJjaFRleHRS
ZXN1bHRzIj4KLSAgICAgICAgIDx0cj48dGg+TmFtZTwvdGg+PHRoPlBob25lPC90aD48L3RyPgot
ICAgICAgICAgPHRyIG5nLXJlcGVhdD0iZnJpZW5kIGluIGZyaWVuZHMgfCBmaWx0ZXI6c2VhcmNo
VGV4dCI+Ci0gICAgICAgICAgIDx0ZD57e2ZyaWVuZC5uYW1lfX08L3RkPgotICAgICAgICAgICA8
dGQ+e3tmcmllbmQucGhvbmV9fTwvdGQ+Ci0gICAgICAgICA8L3RyPgotICAgICAgIDwvdGFibGU+
Ci0gICAgICAgPGhyPgotICAgICAgIEFueTogPGlucHV0IG5nLW1vZGVsPSJzZWFyY2guJCI+IDxi
cj4KLSAgICAgICBOYW1lIG9ubHkgPGlucHV0IG5nLW1vZGVsPSJzZWFyY2gubmFtZSI+PGJyPgot
ICAgICAgIFBob25lIG9ubHkgPGlucHV0IG5nLW1vZGVsPSJzZWFyY2gucGhvbmUiPjxicj4KLSAg
ICAgICA8dGFibGUgaWQ9InNlYXJjaE9ialJlc3VsdHMiPgotICAgICAgICAgPHRyPjx0aD5OYW1l
PC90aD48dGg+UGhvbmU8L3RoPjwvdHI+Ci0gICAgICAgICA8dHIgbmctcmVwZWF0PSJmcmllbmQg
aW4gZnJpZW5kcyB8IGZpbHRlcjpzZWFyY2giPgotICAgICAgICAgICA8dGQ+e3tmcmllbmQubmFt
ZX19PC90ZD4KLSAgICAgICAgICAgPHRkPnt7ZnJpZW5kLnBob25lfX08L3RkPgotICAgICAgICAg
PC90cj4KLSAgICAgICA8L3RhYmxlPgotICAgICA8L2RvYzpzb3VyY2U+Ci0gICAgIDxkb2M6c2Nl
bmFyaW8+Ci0gICAgICAgaXQoJ3Nob3VsZCBzZWFyY2ggYWNyb3NzIGFsbCBmaWVsZHMgd2hlbiBm
aWx0ZXJpbmcgd2l0aCBhIHN0cmluZycsIGZ1bmN0aW9uKCkgewotICAgICAgICAgaW5wdXQoJ3Nl
YXJjaFRleHQnKS5lbnRlcignbScpOwotICAgICAgICAgZXhwZWN0KHJlcGVhdGVyKCcjc2VhcmNo
VGV4dFJlc3VsdHMgdHInLCAnZnJpZW5kIGluIGZyaWVuZHMnKS5jb2x1bW4oJ2ZyaWVuZC5uYW1l
JykpLgotICAgICAgICAgICB0b0VxdWFsKFsnTWFyeScsICdNaWtlJywgJ0FkYW0nXSk7Ci0KLSAg
ICAgICAgIGlucHV0KCdzZWFyY2hUZXh0JykuZW50ZXIoJzc2Jyk7Ci0gICAgICAgICBleHBlY3Qo
cmVwZWF0ZXIoJyNzZWFyY2hUZXh0UmVzdWx0cyB0cicsICdmcmllbmQgaW4gZnJpZW5kcycpLmNv
bHVtbignZnJpZW5kLm5hbWUnKSkuCi0gICAgICAgICAgIHRvRXF1YWwoWydKb2huJywgJ0p1bGll
J10pOwotICAgICAgIH0pOwotCi0gICAgICAgaXQoJ3Nob3VsZCBzZWFyY2ggaW4gc3BlY2lmaWMg
ZmllbGRzIHdoZW4gZmlsdGVyaW5nIHdpdGggYSBwcmVkaWNhdGUgb2JqZWN0JywgZnVuY3Rpb24o
KSB7Ci0gICAgICAgICBpbnB1dCgnc2VhcmNoLiQnKS5lbnRlcignaScpOwotICAgICAgICAgZXhw
ZWN0KHJlcGVhdGVyKCcjc2VhcmNoT2JqUmVzdWx0cyB0cicsICdmcmllbmQgaW4gZnJpZW5kcycp
LmNvbHVtbignZnJpZW5kLm5hbWUnKSkuCi0gICAgICAgICAgIHRvRXF1YWwoWydNYXJ5JywgJ01p
a2UnLCAnSnVsaWUnXSk7Ci0gICAgICAgfSk7Ci0gICAgIDwvZG9jOnNjZW5hcmlvPgotICAgPC9k
b2M6ZXhhbXBsZT4KLSAqLwotZnVuY3Rpb24gZmlsdGVyRmlsdGVyKCkgewotICByZXR1cm4gZnVu
Y3Rpb24oYXJyYXksIGV4cHJlc3Npb24pIHsKLSAgICBpZiAoIWlzQXJyYXkoYXJyYXkpKSByZXR1
cm4gYXJyYXk7Ci0gICAgdmFyIHByZWRpY2F0ZXMgPSBbXTsKLSAgICBwcmVkaWNhdGVzLmNoZWNr
ID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcHJlZGljYXRl
cy5sZW5ndGg7IGorKykgewotICAgICAgICBpZighcHJlZGljYXRlc1tqXSh2YWx1ZSkpIHsKLSAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiB0
cnVlOwotICAgIH07Ci0gICAgdmFyIHNlYXJjaCA9IGZ1bmN0aW9uKG9iaiwgdGV4dCl7Ci0gICAg
ICBpZiAodGV4dC5jaGFyQXQoMCkgPT09ICchJykgewotICAgICAgICByZXR1cm4gIXNlYXJjaChv
YmosIHRleHQuc3Vic3RyKDEpKTsKLSAgICAgIH0KLSAgICAgIHN3aXRjaCAodHlwZW9mIG9iaikg
ewotICAgICAgICBjYXNlICJib29sZWFuIjoKLSAgICAgICAgY2FzZSAibnVtYmVyIjoKLSAgICAg
ICAgY2FzZSAic3RyaW5nIjoKLSAgICAgICAgICByZXR1cm4gKCcnICsgb2JqKS50b0xvd2VyQ2Fz
ZSgpLmluZGV4T2YodGV4dCkgPiAtMTsKLSAgICAgICAgY2FzZSAib2JqZWN0IjoKLSAgICAgICAg
ICBmb3IgKCB2YXIgb2JqS2V5IGluIG9iaikgewotICAgICAgICAgICAgaWYgKG9iaktleS5jaGFy
QXQoMCkgIT09ICckJyAmJiBzZWFyY2gob2JqW29iaktleV0sIHRleHQpKSB7Ci0gICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNhc2UgImFycmF5IjoKLSAgICAgICAgICBmb3IgKCB2YXIg
aSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChzZWFyY2gob2Jq
W2ldLCB0ZXh0KSkgewotICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9OwotICAgIHN3aXRjaCAodHlw
ZW9mIGV4cHJlc3Npb24pIHsKLSAgICAgIGNhc2UgImJvb2xlYW4iOgotICAgICAgY2FzZSAibnVt
YmVyIjoKLSAgICAgIGNhc2UgInN0cmluZyI6Ci0gICAgICAgIGV4cHJlc3Npb24gPSB7JDpleHBy
ZXNzaW9ufTsKLSAgICAgIGNhc2UgIm9iamVjdCI6Ci0gICAgICAgIGZvciAodmFyIGtleSBpbiBl
eHByZXNzaW9uKSB7Ci0gICAgICAgICAgaWYgKGtleSA9PSAnJCcpIHsKLSAgICAgICAgICAgIChm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgdmFyIHRleHQgPSAoJycrZXhwcmVzc2lvbltrZXld
KS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAgICAgICBpZiAoIXRleHQpIHJldHVybjsKLSAgICAg
ICAgICAgICAgcHJlZGljYXRlcy5wdXNoKGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHNlYXJjaCh2YWx1ZSwgdGV4dCk7Ci0gICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgfSkoKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgKGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICB2YXIgcGF0aCA9IGtleTsKLSAgICAgICAgICAgICAgdmFyIHRleHQg
PSAoJycrZXhwcmVzc2lvbltrZXldKS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAgICAgICBpZiAo
IXRleHQpIHJldHVybjsKLSAgICAgICAgICAgICAgcHJlZGljYXRlcy5wdXNoKGZ1bmN0aW9uKHZh
bHVlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNlYXJjaChnZXR0ZXIodmFsdWUsIHBhdGgp
LCB0ZXh0KTsKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9KSgpOwotICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgJ2Z1bmN0aW9uJzoKLSAg
ICAgICAgcHJlZGljYXRlcy5wdXNoKGV4cHJlc3Npb24pOwotICAgICAgICBicmVhazsKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBhcnJheTsKLSAgICB9Ci0gICAgdmFyIGZpbHRlcmVk
ID0gW107Ci0gICAgZm9yICggdmFyIGogPSAwOyBqIDwgYXJyYXkubGVuZ3RoOyBqKyspIHsKLSAg
ICAgIHZhciB2YWx1ZSA9IGFycmF5W2pdOwotICAgICAgaWYgKHByZWRpY2F0ZXMuY2hlY2sodmFs
dWUpKSB7Ci0gICAgICAgIGZpbHRlcmVkLnB1c2godmFsdWUpOwotICAgICAgfQotICAgIH0KLSAg
ICByZXR1cm4gZmlsdGVyZWQ7Ci0gIH0KLX0KLQotLyoqCi0gKiBAbmdkb2MgZmlsdGVyCi0gKiBA
bmFtZSBuZy5maWx0ZXI6Y3VycmVuY3kKLSAqIEBmdW5jdGlvbgotICoKLSAqIEBkZXNjcmlwdGlv
bgotICogRm9ybWF0cyBhIG51bWJlciBhcyBhIGN1cnJlbmN5IChpZSAkMSwyMzQuNTYpLiBXaGVu
IG5vIGN1cnJlbmN5IHN5bWJvbCBpcyBwcm92aWRlZCwgZGVmYXVsdAotICogc3ltYm9sIGZvciBj
dXJyZW50IGxvY2FsZSBpcyB1c2VkLgotICoKLSAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnQgSW5w
dXQgdG8gZmlsdGVyLgotICogQHBhcmFtIHtzdHJpbmc9fSBzeW1ib2wgQ3VycmVuY3kgc3ltYm9s
IG9yIGlkZW50aWZpZXIgdG8gYmUgZGlzcGxheWVkLgotICogQHJldHVybnMge3N0cmluZ30gRm9y
bWF0dGVkIG51bWJlci4KLSAqCi0gKgotICogQGV4YW1wbGUKLSAgIDxkb2M6ZXhhbXBsZT4KLSAg
ICAgPGRvYzpzb3VyY2U+Ci0gICAgICAgPHNjcmlwdD4KLSAgICAgICAgIGZ1bmN0aW9uIEN0cmwo
JHNjb3BlKSB7Ci0gICAgICAgICAgICRzY29wZS5hbW91bnQgPSAxMjM0LjU2OwotICAgICAgICAg
fQotICAgICAgIDwvc2NyaXB0PgotICAgICAgIDxkaXYgbmctY29udHJvbGxlcj0iQ3RybCI+Ci0g
ICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBuZy1tb2RlbD0iYW1vdW50Ij4gPGJyPgotICAg
ICAgICAgZGVmYXVsdCBjdXJyZW5jeSBzeW1ib2wgKCQpOiB7e2Ftb3VudCB8IGN1cnJlbmN5fX08
YnI+Ci0gICAgICAgICBjdXN0b20gY3VycmVuY3kgaWRlbnRpZmllciAoVVNEJCk6IHt7YW1vdW50
IHwgY3VycmVuY3k6IlVTRCQifX0KLSAgICAgICA8L2Rpdj4KLSAgICAgPC9kb2M6c291cmNlPgot
ICAgICA8ZG9jOnNjZW5hcmlvPgotICAgICAgIGl0KCdzaG91bGQgaW5pdCB3aXRoIDEyMzQuNTYn
LCBmdW5jdGlvbigpIHsKLSAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdhbW91bnQgfCBjdXJyZW5j
eScpKS50b0JlKCckMSwyMzQuNTYnKTsKLSAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdhbW91bnQg
fCBjdXJyZW5jeToiVVNEJCInKSkudG9CZSgnVVNEJDEsMjM0LjU2Jyk7Ci0gICAgICAgfSk7Ci0g
ICAgICAgaXQoJ3Nob3VsZCB1cGRhdGUnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgIGlucHV0KCdh
bW91bnQnKS5lbnRlcignLTEyMzQnKTsKLSAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdhbW91bnQg
fCBjdXJyZW5jeScpKS50b0JlKCcoJDEsMjM0LjAwKScpOwotICAgICAgICAgZXhwZWN0KGJpbmRp
bmcoJ2Ftb3VudCB8IGN1cnJlbmN5OiJVU0QkIicpKS50b0JlKCcoVVNEJDEsMjM0LjAwKScpOwot
ICAgICAgIH0pOwotICAgICA8L2RvYzpzY2VuYXJpbz4KLSAgIDwvZG9jOmV4YW1wbGU+Ci0gKi8K
LWN1cnJlbmN5RmlsdGVyLiRpbmplY3QgPSBbJyRsb2NhbGUnXTsKLWZ1bmN0aW9uIGN1cnJlbmN5
RmlsdGVyKCRsb2NhbGUpIHsKLSAgdmFyIGZvcm1hdHMgPSAkbG9jYWxlLk5VTUJFUl9GT1JNQVRT
OwotICByZXR1cm4gZnVuY3Rpb24oYW1vdW50LCBjdXJyZW5jeVN5bWJvbCl7Ci0gICAgaWYgKGlz
VW5kZWZpbmVkKGN1cnJlbmN5U3ltYm9sKSkgY3VycmVuY3lTeW1ib2wgPSBmb3JtYXRzLkNVUlJF
TkNZX1NZTTsKLSAgICByZXR1cm4gZm9ybWF0TnVtYmVyKGFtb3VudCwgZm9ybWF0cy5QQVRURVJO
U1sxXSwgZm9ybWF0cy5HUk9VUF9TRVAsIGZvcm1hdHMuREVDSU1BTF9TRVAsIDIpLgotICAgICAg
ICAgICAgICAgIHJlcGxhY2UoL1x1MDBBNC9nLCBjdXJyZW5jeVN5bWJvbCk7Ci0gIH07Ci19Ci0K
LS8qKgotICogQG5nZG9jIGZpbHRlcgotICogQG5hbWUgbmcuZmlsdGVyOm51bWJlcgotICogQGZ1
bmN0aW9uCi0gKgotICogQGRlc2NyaXB0aW9uCi0gKiBGb3JtYXRzIGEgbnVtYmVyIGFzIHRleHQu
Ci0gKgotICogSWYgdGhlIGlucHV0IGlzIG5vdCBhIG51bWJlciBhbiBlbXB0eSBzdHJpbmcgaXMg
cmV0dXJuZWQuCi0gKgotICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBudW1iZXIgTnVtYmVyIHRv
IGZvcm1hdC4KLSAqIEBwYXJhbSB7KG51bWJlcnxzdHJpbmcpPX0gW2ZyYWN0aW9uU2l6ZT0yXSBO
dW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgdG8gcm91bmQgdGhlIG51bWJlciB0by4KLSAqIEByZXR1
cm5zIHtzdHJpbmd9IE51bWJlciByb3VuZGVkIHRvIGRlY2ltYWxQbGFjZXMgYW5kIHBsYWNlcyBh
IOKAnCzigJ0gYWZ0ZXIgZWFjaCB0aGlyZCBkaWdpdC4KLSAqCi0gKiBAZXhhbXBsZQotICAgPGRv
YzpleGFtcGxlPgotICAgICA8ZG9jOnNvdXJjZT4KLSAgICAgICA8c2NyaXB0PgotICAgICAgICAg
ZnVuY3Rpb24gQ3RybCgkc2NvcGUpIHsKLSAgICAgICAgICAgJHNjb3BlLnZhbCA9IDEyMzQuNTY3
ODk7Ci0gICAgICAgICB9Ci0gICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgPGRpdiBuZy1jb250cm9s
bGVyPSJDdHJsIj4KLSAgICAgICAgIEVudGVyIG51bWJlcjogPGlucHV0IG5nLW1vZGVsPSd2YWwn
Pjxicj4KLSAgICAgICAgIERlZmF1bHQgZm9ybWF0dGluZzoge3t2YWwgfCBudW1iZXJ9fTxicj4K
LSAgICAgICAgIE5vIGZyYWN0aW9uczoge3t2YWwgfCBudW1iZXI6MH19PGJyPgotICAgICAgICAg
TmVnYXRpdmUgbnVtYmVyOiB7ey12YWwgfCBudW1iZXI6NH19Ci0gICAgICAgPC9kaXY+Ci0gICAg
IDwvZG9jOnNvdXJjZT4KLSAgICAgPGRvYzpzY2VuYXJpbz4KLSAgICAgICBpdCgnc2hvdWxkIGZv
cm1hdCBudW1iZXJzJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICBleHBlY3QoYmluZGluZygndmFs
IHwgbnVtYmVyJykpLnRvQmUoJzEsMjM0LjU2OCcpOwotICAgICAgICAgZXhwZWN0KGJpbmRpbmco
J3ZhbCB8IG51bWJlcjowJykpLnRvQmUoJzEsMjM1Jyk7Ci0gICAgICAgICBleHBlY3QoYmluZGlu
ZygnLXZhbCB8IG51bWJlcjo0JykpLnRvQmUoJy0xLDIzNC41Njc5Jyk7Ci0gICAgICAgfSk7Ci0K
LSAgICAgICBpdCgnc2hvdWxkIHVwZGF0ZScsIGZ1bmN0aW9uKCkgewotICAgICAgICAgaW5wdXQo
J3ZhbCcpLmVudGVyKCczMzc0LjMzMycpOwotICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ3ZhbCB8
IG51bWJlcicpKS50b0JlKCczLDM3NC4zMzMnKTsKLSAgICAgICAgIGV4cGVjdChiaW5kaW5nKCd2
YWwgfCBudW1iZXI6MCcpKS50b0JlKCczLDM3NCcpOwotICAgICAgICAgZXhwZWN0KGJpbmRpbmco
Jy12YWwgfCBudW1iZXI6NCcpKS50b0JlKCctMywzNzQuMzMzMCcpOwotICAgICAgIH0pOwotICAg
ICA8L2RvYzpzY2VuYXJpbz4KLSAgIDwvZG9jOmV4YW1wbGU+Ci0gKi8KLQotCi1udW1iZXJGaWx0
ZXIuJGluamVjdCA9IFsnJGxvY2FsZSddOwotZnVuY3Rpb24gbnVtYmVyRmlsdGVyKCRsb2NhbGUp
IHsKLSAgdmFyIGZvcm1hdHMgPSAkbG9jYWxlLk5VTUJFUl9GT1JNQVRTOwotICByZXR1cm4gZnVu
Y3Rpb24obnVtYmVyLCBmcmFjdGlvblNpemUpIHsKLSAgICByZXR1cm4gZm9ybWF0TnVtYmVyKG51
bWJlciwgZm9ybWF0cy5QQVRURVJOU1swXSwgZm9ybWF0cy5HUk9VUF9TRVAsIGZvcm1hdHMuREVD
SU1BTF9TRVAsCi0gICAgICBmcmFjdGlvblNpemUpOwotICB9OwotfQotCi12YXIgREVDSU1BTF9T
RVAgPSAnLic7Ci1mdW5jdGlvbiBmb3JtYXROdW1iZXIobnVtYmVyLCBwYXR0ZXJuLCBncm91cFNl
cCwgZGVjaW1hbFNlcCwgZnJhY3Rpb25TaXplKSB7Ci0gIGlmIChpc05hTihudW1iZXIpIHx8ICFp
c0Zpbml0ZShudW1iZXIpKSByZXR1cm4gJyc7Ci0KLSAgdmFyIGlzTmVnYXRpdmUgPSBudW1iZXIg
PCAwOwotICBudW1iZXIgPSBNYXRoLmFicyhudW1iZXIpOwotICB2YXIgbnVtU3RyID0gbnVtYmVy
ICsgJycsCi0gICAgICBmb3JtYXRlZFRleHQgPSAnJywKLSAgICAgIHBhcnRzID0gW107Ci0KLSAg
dmFyIGhhc0V4cG9uZW50ID0gZmFsc2U7Ci0gIGlmIChudW1TdHIuaW5kZXhPZignZScpICE9PSAt
MSkgewotICAgIHZhciBtYXRjaCA9IG51bVN0ci5tYXRjaCgvKFtcZFwuXSspZSgtPykoXGQrKS8p
OwotICAgIGlmIChtYXRjaCAmJiBtYXRjaFsyXSA9PSAnLScgJiYgbWF0Y2hbM10gPiBmcmFjdGlv
blNpemUgKyAxKSB7Ci0gICAgICBudW1TdHIgPSAnMCc7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZv
cm1hdGVkVGV4dCA9IG51bVN0cjsKLSAgICAgIGhhc0V4cG9uZW50ID0gdHJ1ZTsKLSAgICB9Ci0g
IH0KLQotICBpZiAoIWhhc0V4cG9uZW50KSB7Ci0gICAgdmFyIGZyYWN0aW9uTGVuID0gKG51bVN0
ci5zcGxpdChERUNJTUFMX1NFUClbMV0gfHwgJycpLmxlbmd0aDsKLQotICAgIC8vIGRldGVybWlu
ZSBmcmFjdGlvblNpemUgaWYgaXQgaXMgbm90IHNwZWNpZmllZAotICAgIGlmIChpc1VuZGVmaW5l
ZChmcmFjdGlvblNpemUpKSB7Ci0gICAgICBmcmFjdGlvblNpemUgPSBNYXRoLm1pbihNYXRoLm1h
eChwYXR0ZXJuLm1pbkZyYWMsIGZyYWN0aW9uTGVuKSwgcGF0dGVybi5tYXhGcmFjKTsKLSAgICB9
Ci0KLSAgICB2YXIgcG93ID0gTWF0aC5wb3coMTAsIGZyYWN0aW9uU2l6ZSk7Ci0gICAgbnVtYmVy
ID0gTWF0aC5yb3VuZChudW1iZXIgKiBwb3cpIC8gcG93OwotICAgIHZhciBmcmFjdGlvbiA9ICgn
JyArIG51bWJlcikuc3BsaXQoREVDSU1BTF9TRVApOwotICAgIHZhciB3aG9sZSA9IGZyYWN0aW9u
WzBdOwotICAgIGZyYWN0aW9uID0gZnJhY3Rpb25bMV0gfHwgJyc7Ci0KLSAgICB2YXIgcG9zID0g
MCwKLSAgICAgICAgbGdyb3VwID0gcGF0dGVybi5sZ1NpemUsCi0gICAgICAgIGdyb3VwID0gcGF0
dGVybi5nU2l6ZTsKLQotICAgIGlmICh3aG9sZS5sZW5ndGggPj0gKGxncm91cCArIGdyb3VwKSkg
ewotICAgICAgcG9zID0gd2hvbGUubGVuZ3RoIC0gbGdyb3VwOwotICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBwb3M7IGkrKykgewotICAgICAgICBpZiAoKHBvcyAtIGkpJWdyb3VwID09PSAwICYm
IGkgIT09IDApIHsKLSAgICAgICAgICBmb3JtYXRlZFRleHQgKz0gZ3JvdXBTZXA7Ci0gICAgICAg
IH0KLSAgICAgICAgZm9ybWF0ZWRUZXh0ICs9IHdob2xlLmNoYXJBdChpKTsKLSAgICAgIH0KLSAg
ICB9Ci0KLSAgICBmb3IgKGkgPSBwb3M7IGkgPCB3aG9sZS5sZW5ndGg7IGkrKykgewotICAgICAg
aWYgKCh3aG9sZS5sZW5ndGggLSBpKSVsZ3JvdXAgPT09IDAgJiYgaSAhPT0gMCkgewotICAgICAg
ICBmb3JtYXRlZFRleHQgKz0gZ3JvdXBTZXA7Ci0gICAgICB9Ci0gICAgICBmb3JtYXRlZFRleHQg
Kz0gd2hvbGUuY2hhckF0KGkpOwotICAgIH0KLQotICAgIC8vIGZvcm1hdCBmcmFjdGlvbiBwYXJ0
LgotICAgIHdoaWxlKGZyYWN0aW9uLmxlbmd0aCA8IGZyYWN0aW9uU2l6ZSkgewotICAgICAgZnJh
Y3Rpb24gKz0gJzAnOwotICAgIH0KLQotICAgIGlmIChmcmFjdGlvblNpemUgJiYgZnJhY3Rpb25T
aXplICE9PSAiMCIpIGZvcm1hdGVkVGV4dCArPSBkZWNpbWFsU2VwICsgZnJhY3Rpb24uc3Vic3Ry
KDAsIGZyYWN0aW9uU2l6ZSk7Ci0gIH0KLQotICBwYXJ0cy5wdXNoKGlzTmVnYXRpdmUgPyBwYXR0
ZXJuLm5lZ1ByZSA6IHBhdHRlcm4ucG9zUHJlKTsKLSAgcGFydHMucHVzaChmb3JtYXRlZFRleHQp
OwotICBwYXJ0cy5wdXNoKGlzTmVnYXRpdmUgPyBwYXR0ZXJuLm5lZ1N1ZiA6IHBhdHRlcm4ucG9z
U3VmKTsKLSAgcmV0dXJuIHBhcnRzLmpvaW4oJycpOwotfQotCi1mdW5jdGlvbiBwYWROdW1iZXIo
bnVtLCBkaWdpdHMsIHRyaW0pIHsKLSAgdmFyIG5lZyA9ICcnOwotICBpZiAobnVtIDwgMCkgewot
ICAgIG5lZyA9ICAnLSc7Ci0gICAgbnVtID0gLW51bTsKLSAgfQotICBudW0gPSAnJyArIG51bTsK
LSAgd2hpbGUobnVtLmxlbmd0aCA8IGRpZ2l0cykgbnVtID0gJzAnICsgbnVtOwotICBpZiAodHJp
bSkKLSAgICBudW0gPSBudW0uc3Vic3RyKG51bS5sZW5ndGggLSBkaWdpdHMpOwotICByZXR1cm4g
bmVnICsgbnVtOwotfQotCi0KLWZ1bmN0aW9uIGRhdGVHZXR0ZXIobmFtZSwgc2l6ZSwgb2Zmc2V0
LCB0cmltKSB7Ci0gIG9mZnNldCA9IG9mZnNldCB8fCAwOwotICByZXR1cm4gZnVuY3Rpb24oZGF0
ZSkgewotICAgIHZhciB2YWx1ZSA9IGRhdGVbJ2dldCcgKyBuYW1lXSgpOwotICAgIGlmIChvZmZz
ZXQgPiAwIHx8IHZhbHVlID4gLW9mZnNldCkKLSAgICAgIHZhbHVlICs9IG9mZnNldDsKLSAgICBp
ZiAodmFsdWUgPT09IDAgJiYgb2Zmc2V0ID09IC0xMiApIHZhbHVlID0gMTI7Ci0gICAgcmV0dXJu
IHBhZE51bWJlcih2YWx1ZSwgc2l6ZSwgdHJpbSk7Ci0gIH07Ci19Ci0KLWZ1bmN0aW9uIGRhdGVT
dHJHZXR0ZXIobmFtZSwgc2hvcnRGb3JtKSB7Ci0gIHJldHVybiBmdW5jdGlvbihkYXRlLCBmb3Jt
YXRzKSB7Ci0gICAgdmFyIHZhbHVlID0gZGF0ZVsnZ2V0JyArIG5hbWVdKCk7Ci0gICAgdmFyIGdl
dCA9IHVwcGVyY2FzZShzaG9ydEZvcm0gPyAoJ1NIT1JUJyArIG5hbWUpIDogbmFtZSk7Ci0KLSAg
ICByZXR1cm4gZm9ybWF0c1tnZXRdW3ZhbHVlXTsKLSAgfTsKLX0KLQotZnVuY3Rpb24gdGltZVpv
bmVHZXR0ZXIoZGF0ZSkgewotICB2YXIgem9uZSA9IC0xICogZGF0ZS5nZXRUaW1lem9uZU9mZnNl
dCgpOwotICB2YXIgcGFkZGVkWm9uZSA9ICh6b25lID49IDApID8gIisiIDogIiI7Ci0KLSAgcGFk
ZGVkWm9uZSArPSBwYWROdW1iZXIoTWF0aFt6b25lID4gMCA/ICdmbG9vcicgOiAnY2VpbCddKHpv
bmUgLyA2MCksIDIpICsKLSAgICAgICAgICAgICAgICBwYWROdW1iZXIoTWF0aC5hYnMoem9uZSAl
IDYwKSwgMik7Ci0KLSAgcmV0dXJuIHBhZGRlZFpvbmU7Ci19Ci0KLWZ1bmN0aW9uIGFtcG1HZXR0
ZXIoZGF0ZSwgZm9ybWF0cykgewotICByZXR1cm4gZGF0ZS5nZXRIb3VycygpIDwgMTIgPyBmb3Jt
YXRzLkFNUE1TWzBdIDogZm9ybWF0cy5BTVBNU1sxXTsKLX0KLQotdmFyIERBVEVfRk9STUFUUyA9
IHsKLSAgeXl5eTogZGF0ZUdldHRlcignRnVsbFllYXInLCA0KSwKLSAgICB5eTogZGF0ZUdldHRl
cignRnVsbFllYXInLCAyLCAwLCB0cnVlKSwKLSAgICAgeTogZGF0ZUdldHRlcignRnVsbFllYXIn
LCAxKSwKLSAgTU1NTTogZGF0ZVN0ckdldHRlcignTW9udGgnKSwKLSAgIE1NTTogZGF0ZVN0ckdl
dHRlcignTW9udGgnLCB0cnVlKSwKLSAgICBNTTogZGF0ZUdldHRlcignTW9udGgnLCAyLCAxKSwK
LSAgICAgTTogZGF0ZUdldHRlcignTW9udGgnLCAxLCAxKSwKLSAgICBkZDogZGF0ZUdldHRlcign
RGF0ZScsIDIpLAotICAgICBkOiBkYXRlR2V0dGVyKCdEYXRlJywgMSksCi0gICAgSEg6IGRhdGVH
ZXR0ZXIoJ0hvdXJzJywgMiksCi0gICAgIEg6IGRhdGVHZXR0ZXIoJ0hvdXJzJywgMSksCi0gICAg
aGg6IGRhdGVHZXR0ZXIoJ0hvdXJzJywgMiwgLTEyKSwKLSAgICAgaDogZGF0ZUdldHRlcignSG91
cnMnLCAxLCAtMTIpLAotICAgIG1tOiBkYXRlR2V0dGVyKCdNaW51dGVzJywgMiksCi0gICAgIG06
IGRhdGVHZXR0ZXIoJ01pbnV0ZXMnLCAxKSwKLSAgICBzczogZGF0ZUdldHRlcignU2Vjb25kcycs
IDIpLAotICAgICBzOiBkYXRlR2V0dGVyKCdTZWNvbmRzJywgMSksCi0gIEVFRUU6IGRhdGVTdHJH
ZXR0ZXIoJ0RheScpLAotICAgRUVFOiBkYXRlU3RyR2V0dGVyKCdEYXknLCB0cnVlKSwKLSAgICAg
YTogYW1wbUdldHRlciwKLSAgICAgWjogdGltZVpvbmVHZXR0ZXIKLX07Ci0KLXZhciBEQVRFX0ZP
Uk1BVFNfU1BMSVQgPSAvKCg/OlteeU1kSGhtc2FaRSddKyl8KD86Jyg/OlteJ118JycpKicpfCg/
OkUrfHkrfE0rfGQrfEgrfGgrfG0rfHMrfGF8WikpKC4qKS8sCi0gICAgTlVNQkVSX1NUUklORyA9
IC9eXGQrJC87Ci0KLS8qKgotICogQG5nZG9jIGZpbHRlcgotICogQG5hbWUgbmcuZmlsdGVyOmRh
dGUKLSAqIEBmdW5jdGlvbgotICoKLSAqIEBkZXNjcmlwdGlvbgotICogICBGb3JtYXRzIGBkYXRl
YCB0byBhIHN0cmluZyBiYXNlZCBvbiB0aGUgcmVxdWVzdGVkIGBmb3JtYXRgLgotICoKLSAqICAg
YGZvcm1hdGAgc3RyaW5nIGNhbiBiZSBjb21wb3NlZCBvZiB0aGUgZm9sbG93aW5nIGVsZW1lbnRz
OgotICoKLSAqICAgKiBgJ3l5eXknYDogNCBkaWdpdCByZXByZXNlbnRhdGlvbiBvZiB5ZWFyIChl
LmcuIEFEIDEgPT4gMDAwMSwgQUQgMjAxMCA9PiAyMDEwKQotICogICAqIGAneXknYDogMiBkaWdp
dCByZXByZXNlbnRhdGlvbiBvZiB5ZWFyLCBwYWRkZWQgKDAwLTk5KS4gKGUuZy4gQUQgMjAwMSA9
PiAwMSwgQUQgMjAxMCA9PiAxMCkKLSAqICAgKiBgJ3knYDogMSBkaWdpdCByZXByZXNlbnRhdGlv
biBvZiB5ZWFyLCBlLmcuIChBRCAxID0+IDEsIEFEIDE5OSA9PiAxOTkpCi0gKiAgICogYCdNTU1N
J2A6IE1vbnRoIGluIHllYXIgKEphbnVhcnktRGVjZW1iZXIpCi0gKiAgICogYCdNTU0nYDogTW9u
dGggaW4geWVhciAoSmFuLURlYykKLSAqICAgKiBgJ01NJ2A6IE1vbnRoIGluIHllYXIsIHBhZGRl
ZCAoMDEtMTIpCi0gKiAgICogYCdNJ2A6IE1vbnRoIGluIHllYXIgKDEtMTIpCi0gKiAgICogYCdk
ZCdgOiBEYXkgaW4gbW9udGgsIHBhZGRlZCAoMDEtMzEpCi0gKiAgICogYCdkJ2A6IERheSBpbiBt
b250aCAoMS0zMSkKLSAqICAgKiBgJ0VFRUUnYDogRGF5IGluIFdlZWssKFN1bmRheS1TYXR1cmRh
eSkKLSAqICAgKiBgJ0VFRSdgOiBEYXkgaW4gV2VlaywgKFN1bi1TYXQpCi0gKiAgICogYCdISCdg
OiBIb3VyIGluIGRheSwgcGFkZGVkICgwMC0yMykKLSAqICAgKiBgJ0gnYDogSG91ciBpbiBkYXkg
KDAtMjMpCi0gKiAgICogYCdoaCdgOiBIb3VyIGluIGFtL3BtLCBwYWRkZWQgKDAxLTEyKQotICog
ICAqIGAnaCdgOiBIb3VyIGluIGFtL3BtLCAoMS0xMikKLSAqICAgKiBgJ21tJ2A6IE1pbnV0ZSBp
biBob3VyLCBwYWRkZWQgKDAwLTU5KQotICogICAqIGAnbSdgOiBNaW51dGUgaW4gaG91ciAoMC01
OSkKLSAqICAgKiBgJ3NzJ2A6IFNlY29uZCBpbiBtaW51dGUsIHBhZGRlZCAoMDAtNTkpCi0gKiAg
ICogYCdzJ2A6IFNlY29uZCBpbiBtaW51dGUgKDAtNTkpCi0gKiAgICogYCdhJ2A6IGFtL3BtIG1h
cmtlcgotICogICAqIGAnWidgOiA0IGRpZ2l0ICgrc2lnbikgcmVwcmVzZW50YXRpb24gb2YgdGhl
IHRpbWV6b25lIG9mZnNldCAoLTEyMDAtKzEyMDApCi0gKgotICogICBgZm9ybWF0YCBzdHJpbmcg
Y2FuIGFsc28gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgcHJlZGVmaW5lZAotICogICB7QGxpbmsg
Z3VpZGUvaTE4biBsb2NhbGl6YWJsZSBmb3JtYXRzfToKLSAqCi0gKiAgICogYCdtZWRpdW0nYDog
ZXF1aXZhbGVudCB0byBgJ01NTSBkLCB5IGg6bW06c3MgYSdgIGZvciBlbl9VUyBsb2NhbGUKLSAq
ICAgICAoZS5nLiBTZXAgMywgMjAxMCAxMjowNTowOCBwbSkKLSAqICAgKiBgJ3Nob3J0J2A6IGVx
dWl2YWxlbnQgdG8gYCdNL2QveXkgaDptbSBhJ2AgZm9yIGVuX1VTICBsb2NhbGUgKGUuZy4gOS8z
LzEwIDEyOjA1IHBtKQotICogICAqIGAnZnVsbERhdGUnYDogZXF1aXZhbGVudCB0byBgJ0VFRUUs
IE1NTU0gZCx5J2AgZm9yIGVuX1VTICBsb2NhbGUKLSAqICAgICAoZS5nLiBGcmlkYXksIFNlcHRl
bWJlciAzLCAyMDEwKQotICogICAqIGAnbG9uZ0RhdGUnYDogZXF1aXZhbGVudCB0byBgJ01NTU0g
ZCwgeSdgIGZvciBlbl9VUyAgbG9jYWxlIChlLmcuIFNlcHRlbWJlciAzLCAyMDEwCi0gKiAgICog
YCdtZWRpdW1EYXRlJ2A6IGVxdWl2YWxlbnQgdG8gYCdNTU0gZCwgeSdgIGZvciBlbl9VUyAgbG9j
YWxlIChlLmcuIFNlcCAzLCAyMDEwKQotICogICAqIGAnc2hvcnREYXRlJ2A6IGVxdWl2YWxlbnQg
dG8gYCdNL2QveXknYCBmb3IgZW5fVVMgbG9jYWxlIChlLmcuIDkvMy8xMCkKLSAqICAgKiBgJ21l
ZGl1bVRpbWUnYDogZXF1aXZhbGVudCB0byBgJ2g6bW06c3MgYSdgIGZvciBlbl9VUyBsb2NhbGUg
KGUuZy4gMTI6MDU6MDggcG0pCi0gKiAgICogYCdzaG9ydFRpbWUnYDogZXF1aXZhbGVudCB0byBg
J2g6bW0gYSdgIGZvciBlbl9VUyBsb2NhbGUgKGUuZy4gMTI6MDUgcG0pCi0gKgotICogICBgZm9y
bWF0YCBzdHJpbmcgY2FuIGNvbnRhaW4gbGl0ZXJhbCB2YWx1ZXMuIFRoZXNlIG5lZWQgdG8gYmUg
cXVvdGVkIHdpdGggc2luZ2xlIHF1b3RlcyAoZS5nLgotICogICBgImggJ2luIHRoZSBtb3JuaW5n
JyJgKS4gSW4gb3JkZXIgdG8gb3V0cHV0IHNpbmdsZSBxdW90ZSwgdXNlIHR3byBzaW5nbGUgcXVv
dGVzIGluIGEgc2VxdWVuY2UKLSAqICAgKGUuZy4gYCJoIG8nJ2Nsb2NrImApLgotICoKLSAqIEBw
YXJhbSB7KERhdGV8bnVtYmVyfHN0cmluZyl9IGRhdGUgRGF0ZSB0byBmb3JtYXQgZWl0aGVyIGFz
IERhdGUgb2JqZWN0LCBtaWxsaXNlY29uZHMgKHN0cmluZyBvcgotICogICAgbnVtYmVyKSBvciB2
YXJpb3VzIElTTyA4NjAxIGRhdGV0aW1lIHN0cmluZyBmb3JtYXRzIChlLmcuIHl5eXktTU0tZGRU
SEg6bW06c3MuU1NTWiBhbmQgaXRzCi0gKiAgICBzaG9ydGVyIHZlcnNpb25zIGxpa2UgeXl5eS1N
TS1kZFRISDptbVosIHl5eXktTU0tZGQgb3IgeXl5eU1NZGRUSEhtbXNzWikuIElmIG5vIHRpbWV6
b25lIGlzCi0gKiAgICBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpbnB1dCwgdGhlIHRpbWUgaXMg
Y29uc2lkZXJlZCB0byBiZSBpbiB0aGUgbG9jYWwgdGltZXpvbmUuCi0gKiBAcGFyYW0ge3N0cmlu
Zz19IGZvcm1hdCBGb3JtYXR0aW5nIHJ1bGVzIChzZWUgRGVzY3JpcHRpb24pLiBJZiBub3Qgc3Bl
Y2lmaWVkLAotICogICAgYG1lZGl1bURhdGVgIGlzIHVzZWQuCi0gKiBAcmV0dXJucyB7c3RyaW5n
fSBGb3JtYXR0ZWQgc3RyaW5nIG9yIHRoZSBpbnB1dCBpZiBpbnB1dCBpcyBub3QgcmVjb2duaXpl
ZCBhcyBkYXRlL21pbGxpcy4KLSAqCi0gKiBAZXhhbXBsZQotICAgPGRvYzpleGFtcGxlPgotICAg
ICA8ZG9jOnNvdXJjZT4KLSAgICAgICA8c3BhbiBuZy1ub24tYmluZGFibGU+e3sxMjg4MzIzNjIz
MDA2IHwgZGF0ZTonbWVkaXVtJ319PC9zcGFuPjoKLSAgICAgICAgICAge3sxMjg4MzIzNjIzMDA2
IHwgZGF0ZTonbWVkaXVtJ319PGJyPgotICAgICAgIDxzcGFuIG5nLW5vbi1iaW5kYWJsZT57ezEy
ODgzMjM2MjMwMDYgfCBkYXRlOid5eXl5LU1NLWRkIEhIOm1tOnNzIFonfX08L3NwYW4+OgotICAg
ICAgICAgIHt7MTI4ODMyMzYyMzAwNiB8IGRhdGU6J3l5eXktTU0tZGQgSEg6bW06c3MgWid9fTxi
cj4KLSAgICAgICA8c3BhbiBuZy1ub24tYmluZGFibGU+e3sxMjg4MzIzNjIzMDA2IHwgZGF0ZTon
TU0vZGQveXl5eSBAIGg6bW1hJ319PC9zcGFuPjoKLSAgICAgICAgICB7eycxMjg4MzIzNjIzMDA2
JyB8IGRhdGU6J01NL2RkL3l5eXkgQCBoOm1tYSd9fTxicj4KLSAgICAgPC9kb2M6c291cmNlPgot
ICAgICA8ZG9jOnNjZW5hcmlvPgotICAgICAgIGl0KCdzaG91bGQgZm9ybWF0IGRhdGUnLCBmdW5j
dGlvbigpIHsKLSAgICAgICAgIGV4cGVjdChiaW5kaW5nKCIxMjg4MzIzNjIzMDA2IHwgZGF0ZTon
bWVkaXVtJyIpKS4KLSAgICAgICAgICAgIHRvTWF0Y2goL09jdCAyXGQsIDIwMTAgXGR7MSwyfTpc
ZHsyfTpcZHsyfSAoQU18UE0pLyk7Ci0gICAgICAgICBleHBlY3QoYmluZGluZygiMTI4ODMyMzYy
MzAwNiB8IGRhdGU6J3l5eXktTU0tZGQgSEg6bW06c3MgWiciKSkuCi0gICAgICAgICAgICB0b01h
dGNoKC8yMDEwXC0xMFwtMlxkIFxkezJ9OlxkezJ9OlxkezJ9IChcLXxcKyk/XGR7NH0vKTsKLSAg
ICAgICAgIGV4cGVjdChiaW5kaW5nKCInMTI4ODMyMzYyMzAwNicgfCBkYXRlOidNTS9kZC95eXl5
IEAgaDptbWEnIikpLgotICAgICAgICAgICAgdG9NYXRjaCgvMTBcLzJcZFwvMjAxMCBAIFxkezEs
Mn06XGR7Mn0oQU18UE0pLyk7Ci0gICAgICAgfSk7Ci0gICAgIDwvZG9jOnNjZW5hcmlvPgotICAg
PC9kb2M6ZXhhbXBsZT4KLSAqLwotZGF0ZUZpbHRlci4kaW5qZWN0ID0gWyckbG9jYWxlJ107Ci1m
dW5jdGlvbiBkYXRlRmlsdGVyKCRsb2NhbGUpIHsKLQotCi0gIHZhciBSX0lTTzg2MDFfU1RSID0g
L14oXGR7NH0pLT8oXGRcZCktPyhcZFxkKSg/OlQoXGRcZCkoPzo6PyhcZFxkKSg/Ojo/KFxkXGQp
KD86XC4oXGQrKSk/KT8pPyhafChbKy1dKShcZFxkKTo/KFxkXGQpKT8pPyQvOwotICBmdW5jdGlv
biBqc29uU3RyaW5nVG9EYXRlKHN0cmluZyl7Ci0gICAgdmFyIG1hdGNoOwotICAgIGlmIChtYXRj
aCA9IHN0cmluZy5tYXRjaChSX0lTTzg2MDFfU1RSKSkgewotICAgICAgdmFyIGRhdGUgPSBuZXcg
RGF0ZSgwKSwKLSAgICAgICAgICB0ekhvdXIgPSAwLAotICAgICAgICAgIHR6TWluICA9IDA7Ci0g
ICAgICBpZiAobWF0Y2hbOV0pIHsKLSAgICAgICAgdHpIb3VyID0gaW50KG1hdGNoWzldICsgbWF0
Y2hbMTBdKTsKLSAgICAgICAgdHpNaW4gPSBpbnQobWF0Y2hbOV0gKyBtYXRjaFsxMV0pOwotICAg
ICAgfQotICAgICAgZGF0ZS5zZXRVVENGdWxsWWVhcihpbnQobWF0Y2hbMV0pLCBpbnQobWF0Y2hb
Ml0pIC0gMSwgaW50KG1hdGNoWzNdKSk7Ci0gICAgICBkYXRlLnNldFVUQ0hvdXJzKGludChtYXRj
aFs0XXx8MCkgLSB0ekhvdXIsIGludChtYXRjaFs1XXx8MCkgLSB0ek1pbiwgaW50KG1hdGNoWzZd
fHwwKSwgaW50KG1hdGNoWzddfHwwKSk7Ci0gICAgICByZXR1cm4gZGF0ZTsKLSAgICB9Ci0gICAg
cmV0dXJuIHN0cmluZzsKLSAgfQotCi0KLSAgcmV0dXJuIGZ1bmN0aW9uKGRhdGUsIGZvcm1hdCkg
ewotICAgIHZhciB0ZXh0ID0gJycsCi0gICAgICAgIHBhcnRzID0gW10sCi0gICAgICAgIGZuLCBt
YXRjaDsKLQotICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAnbWVkaXVtRGF0ZSc7Ci0gICAgZm9ybWF0
ID0gJGxvY2FsZS5EQVRFVElNRV9GT1JNQVRTW2Zvcm1hdF0gfHwgZm9ybWF0OwotICAgIGlmIChp
c1N0cmluZyhkYXRlKSkgewotICAgICAgaWYgKE5VTUJFUl9TVFJJTkcudGVzdChkYXRlKSkgewot
ICAgICAgICBkYXRlID0gaW50KGRhdGUpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZGF0ZSA9
IGpzb25TdHJpbmdUb0RhdGUoZGF0ZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGlzTnVt
YmVyKGRhdGUpKSB7Ci0gICAgICBkYXRlID0gbmV3IERhdGUoZGF0ZSk7Ci0gICAgfQotCi0gICAg
aWYgKCFpc0RhdGUoZGF0ZSkpIHsKLSAgICAgIHJldHVybiBkYXRlOwotICAgIH0KLQotICAgIHdo
aWxlKGZvcm1hdCkgewotICAgICAgbWF0Y2ggPSBEQVRFX0ZPUk1BVFNfU1BMSVQuZXhlYyhmb3Jt
YXQpOwotICAgICAgaWYgKG1hdGNoKSB7Ci0gICAgICAgIHBhcnRzID0gY29uY2F0KHBhcnRzLCBt
YXRjaCwgMSk7Ci0gICAgICAgIGZvcm1hdCA9IHBhcnRzLnBvcCgpOwotICAgICAgfSBlbHNlIHsK
LSAgICAgICAgcGFydHMucHVzaChmb3JtYXQpOwotICAgICAgICBmb3JtYXQgPSBudWxsOwotICAg
ICAgfQotICAgIH0KLQotICAgIGZvckVhY2gocGFydHMsIGZ1bmN0aW9uKHZhbHVlKXsKLSAgICAg
IGZuID0gREFURV9GT1JNQVRTW3ZhbHVlXTsKLSAgICAgIHRleHQgKz0gZm4gPyBmbihkYXRlLCAk
bG9jYWxlLkRBVEVUSU1FX0ZPUk1BVFMpCi0gICAgICAgICAgICAgICAgIDogdmFsdWUucmVwbGFj
ZSgvKF4nfCckKS9nLCAnJykucmVwbGFjZSgvJycvZywgIiciKTsKLSAgICB9KTsKLQotICAgIHJl
dHVybiB0ZXh0OwotICB9OwotfQotCi0KLS8qKgotICogQG5nZG9jIGZpbHRlcgotICogQG5hbWUg
bmcuZmlsdGVyOmpzb24KLSAqIEBmdW5jdGlvbgotICoKLSAqIEBkZXNjcmlwdGlvbgotICogICBB
bGxvd3MgeW91IHRvIGNvbnZlcnQgYSBKYXZhU2NyaXB0IG9iamVjdCBpbnRvIEpTT04gc3RyaW5n
LgotICoKLSAqICAgVGhpcyBmaWx0ZXIgaXMgbW9zdGx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nLiBX
aGVuIHVzaW5nIHRoZSBkb3VibGUgY3VybHkge3t2YWx1ZX19IG5vdGF0aW9uCi0gKiAgIHRoZSBi
aW5kaW5nIGlzIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIEpTT04uCi0gKgotICogQHBhcmFt
IHsqfSBvYmplY3QgQW55IEphdmFTY3JpcHQgb2JqZWN0IChpbmNsdWRpbmcgYXJyYXlzIGFuZCBw
cmltaXRpdmUgdHlwZXMpIHRvIGZpbHRlci4KLSAqIEByZXR1cm5zIHtzdHJpbmd9IEpTT04gc3Ry
aW5nLgotICoKLSAqCi0gKiBAZXhhbXBsZToKLSAgIDxkb2M6ZXhhbXBsZT4KLSAgICAgPGRvYzpz
b3VyY2U+Ci0gICAgICAgPHByZT57eyB7J25hbWUnOid2YWx1ZSd9IHwganNvbiB9fTwvcHJlPgot
ICAgICA8L2RvYzpzb3VyY2U+Ci0gICAgIDxkb2M6c2NlbmFyaW8+Ci0gICAgICAgaXQoJ3Nob3Vs
ZCBqc29uaWZ5IGZpbHRlcmVkIG9iamVjdHMnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgIGV4cGVj
dChiaW5kaW5nKCJ7J25hbWUnOid2YWx1ZSd9IikpLnRvTWF0Y2goL1x7XG4gICJuYW1lIjogPyJ2
YWx1ZSJcbn0vKTsKLSAgICAgICB9KTsKLSAgICAgPC9kb2M6c2NlbmFyaW8+Ci0gICA8L2RvYzpl
eGFtcGxlPgotICoKLSAqLwotZnVuY3Rpb24ganNvbkZpbHRlcigpIHsKLSAgcmV0dXJuIGZ1bmN0
aW9uKG9iamVjdCkgewotICAgIHJldHVybiB0b0pzb24ob2JqZWN0LCB0cnVlKTsKLSAgfTsKLX0K
LQotCi0vKioKLSAqIEBuZ2RvYyBmaWx0ZXIKLSAqIEBuYW1lIG5nLmZpbHRlcjpsb3dlcmNhc2UK
LSAqIEBmdW5jdGlvbgotICogQGRlc2NyaXB0aW9uCi0gKiBDb252ZXJ0cyBzdHJpbmcgdG8gbG93
ZXJjYXNlLgotICogQHNlZSBhbmd1bGFyLmxvd2VyY2FzZQotICovCi12YXIgbG93ZXJjYXNlRmls
dGVyID0gdmFsdWVGbihsb3dlcmNhc2UpOwotCi0KLS8qKgotICogQG5nZG9jIGZpbHRlcgotICog
QG5hbWUgbmcuZmlsdGVyOnVwcGVyY2FzZQotICogQGZ1bmN0aW9uCi0gKiBAZGVzY3JpcHRpb24K
LSAqIENvbnZlcnRzIHN0cmluZyB0byB1cHBlcmNhc2UuCi0gKiBAc2VlIGFuZ3VsYXIudXBwZXJj
YXNlCi0gKi8KLXZhciB1cHBlcmNhc2VGaWx0ZXIgPSB2YWx1ZUZuKHVwcGVyY2FzZSk7Ci0KLS8q
KgotICogQG5nZG9jIGZ1bmN0aW9uCi0gKiBAbmFtZSBuZy5maWx0ZXI6bGltaXRUbwotICogQGZ1
bmN0aW9uCi0gKgotICogQGRlc2NyaXB0aW9uCi0gKiBDcmVhdGVzIGEgbmV3IGFycmF5IGNvbnRh
aW5pbmcgb25seSBhIHNwZWNpZmllZCBudW1iZXIgb2YgZWxlbWVudHMgaW4gYW4gYXJyYXkuIFRo
ZSBlbGVtZW50cwotICogYXJlIHRha2VuIGZyb20gZWl0aGVyIHRoZSBiZWdpbm5pbmcgb3IgdGhl
IGVuZCBvZiB0aGUgc291cmNlIGFycmF5LCBhcyBzcGVjaWZpZWQgYnkgdGhlCi0gKiB2YWx1ZSBh
bmQgc2lnbiAocG9zaXRpdmUgb3IgbmVnYXRpdmUpIG9mIGBsaW1pdGAuCi0gKgotICogTm90ZTog
VGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGF1Z21lbnQgdGhlIGBBcnJheWAgdHlwZSBpbiBBbmd1
bGFyIGV4cHJlc3Npb25zLiBTZWUKLSAqIHtAbGluayBuZy4kZmlsdGVyfSBmb3IgbW9yZSBpbmZv
cm1hdGlvbiBhYm91dCBBbmd1bGFyIGFycmF5cy4KLSAqCi0gKiBAcGFyYW0ge0FycmF5fSBhcnJh
eSBTb3VyY2UgYXJyYXkgdG8gYmUgbGltaXRlZC4KLSAqIEBwYXJhbSB7c3RyaW5nfE51bWJlcn0g
bGltaXQgVGhlIGxlbmd0aCBvZiB0aGUgcmV0dXJuZWQgYXJyYXkuIElmIHRoZSBgbGltaXRgIG51
bWJlciBpcwotICogICAgIHBvc2l0aXZlLCBgbGltaXRgIG51bWJlciBvZiBpdGVtcyBmcm9tIHRo
ZSBiZWdpbm5pbmcgb2YgdGhlIHNvdXJjZSBhcnJheSBhcmUgY29waWVkLgotICogICAgIElmIHRo
ZSBudW1iZXIgaXMgbmVnYXRpdmUsIGBsaW1pdGAgbnVtYmVyICBvZiBpdGVtcyBmcm9tIHRoZSBl
bmQgb2YgdGhlIHNvdXJjZSBhcnJheSBhcmUKLSAqICAgICBjb3BpZWQuIFRoZSBgbGltaXRgIHdp
bGwgYmUgdHJpbW1lZCBpZiBpdCBleGNlZWRzIGBhcnJheS5sZW5ndGhgCi0gKiBAcmV0dXJucyB7
QXJyYXl9IEEgbmV3IHN1Yi1hcnJheSBvZiBsZW5ndGggYGxpbWl0YCBvciBsZXNzIGlmIGlucHV0
IGFycmF5IGhhZCBsZXNzIHRoYW4gYGxpbWl0YAotICogICAgIGVsZW1lbnRzLgotICoKLSAqIEBl
eGFtcGxlCi0gICA8ZG9jOmV4YW1wbGU+Ci0gICAgIDxkb2M6c291cmNlPgotICAgICAgIDxzY3Jp
cHQ+Ci0gICAgICAgICBmdW5jdGlvbiBDdHJsKCRzY29wZSkgewotICAgICAgICAgICAkc2NvcGUu
bnVtYmVycyA9IFsxLDIsMyw0LDUsNiw3LDgsOV07Ci0gICAgICAgICAgICRzY29wZS5saW1pdCA9
IDM7Ci0gICAgICAgICB9Ci0gICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgPGRpdiBuZy1jb250cm9s
bGVyPSJDdHJsIj4KLSAgICAgICAgIExpbWl0IHt7bnVtYmVyc319IHRvOiA8aW5wdXQgdHlwZT0i
aW50ZWdlciIgbmctbW9kZWw9ImxpbWl0Ij4KLSAgICAgICAgIDxwPk91dHB1dDoge3sgbnVtYmVy
cyB8IGxpbWl0VG86bGltaXQgfX08L3A+Ci0gICAgICAgPC9kaXY+Ci0gICAgIDwvZG9jOnNvdXJj
ZT4KLSAgICAgPGRvYzpzY2VuYXJpbz4KLSAgICAgICBpdCgnc2hvdWxkIGxpbWl0IHRoZSBudW1l
ciBhcnJheSB0byBmaXJzdCB0aHJlZSBpdGVtcycsIGZ1bmN0aW9uKCkgewotICAgICAgICAgZXhw
ZWN0KGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlIGlucHV0W25nLW1vZGVsPWxpbWl0XScpLnZh
bCgpKS50b0JlKCczJyk7Ci0gICAgICAgICBleHBlY3QoYmluZGluZygnbnVtYmVycyB8IGxpbWl0
VG86bGltaXQnKSkudG9FcXVhbCgnWzEsMiwzXScpOwotICAgICAgIH0pOwotCi0gICAgICAgaXQo
J3Nob3VsZCB1cGRhdGUgdGhlIG91dHB1dCB3aGVuIC0zIGlzIGVudGVyZWQnLCBmdW5jdGlvbigp
IHsKLSAgICAgICAgIGlucHV0KCdsaW1pdCcpLmVudGVyKC0zKTsKLSAgICAgICAgIGV4cGVjdChi
aW5kaW5nKCdudW1iZXJzIHwgbGltaXRUbzpsaW1pdCcpKS50b0VxdWFsKCdbNyw4LDldJyk7Ci0g
ICAgICAgfSk7Ci0KLSAgICAgICBpdCgnc2hvdWxkIG5vdCBleGNlZWQgdGhlIG1heGltdW0gc2l6
ZSBvZiBpbnB1dCBhcnJheScsIGZ1bmN0aW9uKCkgewotICAgICAgICAgaW5wdXQoJ2xpbWl0Jyku
ZW50ZXIoMTAwKTsKLSAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdudW1iZXJzIHwgbGltaXRUbzps
aW1pdCcpKS50b0VxdWFsKCdbMSwyLDMsNCw1LDYsNyw4LDldJyk7Ci0gICAgICAgfSk7Ci0gICAg
IDwvZG9jOnNjZW5hcmlvPgotICAgPC9kb2M6ZXhhbXBsZT4KLSAqLwotZnVuY3Rpb24gbGltaXRU
b0ZpbHRlcigpewotICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIGxpbWl0KSB7Ci0gICAgaWYgKCEo
YXJyYXkgaW5zdGFuY2VvZiBBcnJheSkpIHJldHVybiBhcnJheTsKLSAgICBsaW1pdCA9IGludChs
aW1pdCk7Ci0gICAgdmFyIG91dCA9IFtdLAotICAgICAgaSwgbjsKLQotICAgIC8vIGNoZWNrIHRo
YXQgYXJyYXkgaXMgaXRlcmFibGUKLSAgICBpZiAoIWFycmF5IHx8ICEoYXJyYXkgaW5zdGFuY2Vv
ZiBBcnJheSkpCi0gICAgICByZXR1cm4gb3V0OwotCi0gICAgLy8gaWYgYWJzKGxpbWl0KSBleGNl
ZWRzIG1heGltdW0gbGVuZ3RoLCB0cmltIGl0Ci0gICAgaWYgKGxpbWl0ID4gYXJyYXkubGVuZ3Ro
KQotICAgICAgbGltaXQgPSBhcnJheS5sZW5ndGg7Ci0gICAgZWxzZSBpZiAobGltaXQgPCAtYXJy
YXkubGVuZ3RoKQotICAgICAgbGltaXQgPSAtYXJyYXkubGVuZ3RoOwotCi0gICAgaWYgKGxpbWl0
ID4gMCkgewotICAgICAgaSA9IDA7Ci0gICAgICBuID0gbGltaXQ7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgIGkgPSBhcnJheS5sZW5ndGggKyBsaW1pdDsKLSAgICAgIG4gPSBhcnJheS5sZW5ndGg7Ci0g
ICAgfQotCi0gICAgZm9yICg7IGk8bjsgaSsrKSB7Ci0gICAgICBvdXQucHVzaChhcnJheVtpXSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIG91dDsKLSAgfQotfQotCi0vKioKLSAqIEBuZ2RvYyBmdW5j
dGlvbgotICogQG5hbWUgbmcuZmlsdGVyOm9yZGVyQnkKLSAqIEBmdW5jdGlvbgotICoKLSAqIEBk
ZXNjcmlwdGlvbgotICogT3JkZXJzIGEgc3BlY2lmaWVkIGBhcnJheWAgYnkgdGhlIGBleHByZXNz
aW9uYCBwcmVkaWNhdGUuCi0gKgotICogTm90ZTogdGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGF1
Z21lbnQgdGhlIGBBcnJheWAgdHlwZSBpbiBBbmd1bGFyIGV4cHJlc3Npb25zLiBTZWUKLSAqIHtA
bGluayBuZy4kZmlsdGVyfSBmb3IgbW9yZSBpbmZvcm1hdG9uIGFib3V0IEFuZ3VsYXIgYXJyYXlz
LgotICoKLSAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzb3J0LgotICogQHBh
cmFtIHtmdW5jdGlvbigqKXxzdHJpbmd8QXJyYXkuPChmdW5jdGlvbigqKXxzdHJpbmcpPn0gZXhw
cmVzc2lvbiBBIHByZWRpY2F0ZSB0byBiZQotICogICAgdXNlZCBieSB0aGUgY29tcGFyYXRvciB0
byBkZXRlcm1pbmUgdGhlIG9yZGVyIG9mIGVsZW1lbnRzLgotICoKLSAqICAgIENhbiBiZSBvbmUg
b2Y6Ci0gKgotICogICAgLSBgZnVuY3Rpb25gOiBHZXR0ZXIgZnVuY3Rpb24uIFRoZSByZXN1bHQg
b2YgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHNvcnRlZCB1c2luZyB0aGUKLSAqICAgICAgYDxgLCBg
PWAsIGA+YCBvcGVyYXRvci4KLSAqICAgIC0gYHN0cmluZ2A6IEFuIEFuZ3VsYXIgZXhwcmVzc2lv
biB3aGljaCBldmFsdWF0ZXMgdG8gYW4gb2JqZWN0IHRvIG9yZGVyIGJ5LCBzdWNoIGFzICduYW1l
JwotICogICAgICB0byBzb3J0IGJ5IGEgcHJvcGVydHkgY2FsbGVkICduYW1lJy4gT3B0aW9uYWxs
eSBwcmVmaXhlZCB3aXRoIGArYCBvciBgLWAgdG8gY29udHJvbAotICogICAgICBhc2NlbmRpbmcg
b3IgZGVzY2VuZGluZyBzb3J0IG9yZGVyIChmb3IgZXhhbXBsZSwgK25hbWUgb3IgLW5hbWUpLgot
ICogICAgLSBgQXJyYXlgOiBBbiBhcnJheSBvZiBmdW5jdGlvbiBvciBzdHJpbmcgcHJlZGljYXRl
cy4gVGhlIGZpcnN0IHByZWRpY2F0ZSBpbiB0aGUgYXJyYXkKLSAqICAgICAgaXMgdXNlZCBmb3Ig
c29ydGluZywgYnV0IHdoZW4gdHdvIGl0ZW1zIGFyZSBlcXVpdmFsZW50LCB0aGUgbmV4dCBwcmVk
aWNhdGUgaXMgdXNlZC4KLSAqCi0gKiBAcGFyYW0ge2Jvb2xlYW49fSByZXZlcnNlIFJldmVyc2Ug
dGhlIG9yZGVyIHRoZSBhcnJheS4KLSAqIEByZXR1cm5zIHtBcnJheX0gU29ydGVkIGNvcHkgb2Yg
dGhlIHNvdXJjZSBhcnJheS4KLSAqCi0gKiBAZXhhbXBsZQotICAgPGRvYzpleGFtcGxlPgotICAg
ICA8ZG9jOnNvdXJjZT4KLSAgICAgICA8c2NyaXB0PgotICAgICAgICAgZnVuY3Rpb24gQ3RybCgk
c2NvcGUpIHsKLSAgICAgICAgICAgJHNjb3BlLmZyaWVuZHMgPQotICAgICAgICAgICAgICAgW3tu
YW1lOidKb2huJywgcGhvbmU6JzU1NS0xMjEyJywgYWdlOjEwfSwKLSAgICAgICAgICAgICAgICB7
bmFtZTonTWFyeScsIHBob25lOic1NTUtOTg3NicsIGFnZToxOX0sCi0gICAgICAgICAgICAgICAg
e25hbWU6J01pa2UnLCBwaG9uZTonNTU1LTQzMjEnLCBhZ2U6MjF9LAotICAgICAgICAgICAgICAg
IHtuYW1lOidBZGFtJywgcGhvbmU6JzU1NS01Njc4JywgYWdlOjM1fSwKLSAgICAgICAgICAgICAg
ICB7bmFtZTonSnVsaWUnLCBwaG9uZTonNTU1LTg3NjUnLCBhZ2U6Mjl9XQotICAgICAgICAgICAk
c2NvcGUucHJlZGljYXRlID0gJy1hZ2UnOwotICAgICAgICAgfQotICAgICAgIDwvc2NyaXB0Pgot
ICAgICAgIDxkaXYgbmctY29udHJvbGxlcj0iQ3RybCI+Ci0gICAgICAgICA8cHJlPlNvcnRpbmcg
cHJlZGljYXRlID0ge3twcmVkaWNhdGV9fTsgcmV2ZXJzZSA9IHt7cmV2ZXJzZX19PC9wcmU+Ci0g
ICAgICAgICA8aHIvPgotICAgICAgICAgWyA8YSBocmVmPSIiIG5nLWNsaWNrPSJwcmVkaWNhdGU9
JyciPnVuc29ydGVkPC9hPiBdCi0gICAgICAgICA8dGFibGUgY2xhc3M9ImZyaWVuZCI+Ci0gICAg
ICAgICAgIDx0cj4KLSAgICAgICAgICAgICA8dGg+PGEgaHJlZj0iIiBuZy1jbGljaz0icHJlZGlj
YXRlID0gJ25hbWUnOyByZXZlcnNlPWZhbHNlIj5OYW1lPC9hPgotICAgICAgICAgICAgICAgICAo
PGEgaHJlZiBuZy1jbGljaz0icHJlZGljYXRlID0gJy1uYW1lJzsgcmV2ZXJzZT1mYWxzZSI+Xjwv
YT4pPC90aD4KLSAgICAgICAgICAgICA8dGg+PGEgaHJlZj0iIiBuZy1jbGljaz0icHJlZGljYXRl
ID0gJ3Bob25lJzsgcmV2ZXJzZT0hcmV2ZXJzZSI+UGhvbmUgTnVtYmVyPC9hPjwvdGg+Ci0gICAg
ICAgICAgICAgPHRoPjxhIGhyZWY9IiIgbmctY2xpY2s9InByZWRpY2F0ZSA9ICdhZ2UnOyByZXZl
cnNlPSFyZXZlcnNlIj5BZ2U8L2E+PC90aD4KLSAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAg
PHRyIG5nLXJlcGVhdD0iZnJpZW5kIGluIGZyaWVuZHMgfCBvcmRlckJ5OnByZWRpY2F0ZTpyZXZl
cnNlIj4KLSAgICAgICAgICAgICA8dGQ+e3tmcmllbmQubmFtZX19PC90ZD4KLSAgICAgICAgICAg
ICA8dGQ+e3tmcmllbmQucGhvbmV9fTwvdGQ+Ci0gICAgICAgICAgICAgPHRkPnt7ZnJpZW5kLmFn
ZX19PC90ZD4KLSAgICAgICAgICAgPC90cj4KLSAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgPC9k
aXY+Ci0gICAgIDwvZG9jOnNvdXJjZT4KLSAgICAgPGRvYzpzY2VuYXJpbz4KLSAgICAgICBpdCgn
c2hvdWxkIGJlIHJldmVyc2Ugb3JkZXJlZCBieSBhZ2VkJywgZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICBleHBlY3QoYmluZGluZygncHJlZGljYXRlJykpLnRvQmUoJy1hZ2UnKTsKLSAgICAgICAgIGV4
cGVjdChyZXBlYXRlcigndGFibGUuZnJpZW5kJywgJ2ZyaWVuZCBpbiBmcmllbmRzJykuY29sdW1u
KCdmcmllbmQuYWdlJykpLgotICAgICAgICAgICB0b0VxdWFsKFsnMzUnLCAnMjknLCAnMjEnLCAn
MTknLCAnMTAnXSk7Ci0gICAgICAgICBleHBlY3QocmVwZWF0ZXIoJ3RhYmxlLmZyaWVuZCcsICdm
cmllbmQgaW4gZnJpZW5kcycpLmNvbHVtbignZnJpZW5kLm5hbWUnKSkuCi0gICAgICAgICAgIHRv
RXF1YWwoWydBZGFtJywgJ0p1bGllJywgJ01pa2UnLCAnTWFyeScsICdKb2huJ10pOwotICAgICAg
IH0pOwotCi0gICAgICAgaXQoJ3Nob3VsZCByZW9yZGVyIHRoZSB0YWJsZSB3aGVuIHVzZXIgc2Vs
ZWN0cyBkaWZmZXJlbnQgcHJlZGljYXRlJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICBlbGVtZW50
KCcuZG9jLWV4YW1wbGUtbGl2ZSBhOmNvbnRhaW5zKCJOYW1lIiknKS5jbGljaygpOwotICAgICAg
ICAgZXhwZWN0KHJlcGVhdGVyKCd0YWJsZS5mcmllbmQnLCAnZnJpZW5kIGluIGZyaWVuZHMnKS5j
b2x1bW4oJ2ZyaWVuZC5uYW1lJykpLgotICAgICAgICAgICB0b0VxdWFsKFsnQWRhbScsICdKb2hu
JywgJ0p1bGllJywgJ01hcnknLCAnTWlrZSddKTsKLSAgICAgICAgIGV4cGVjdChyZXBlYXRlcign
dGFibGUuZnJpZW5kJywgJ2ZyaWVuZCBpbiBmcmllbmRzJykuY29sdW1uKCdmcmllbmQuYWdlJykp
LgotICAgICAgICAgICB0b0VxdWFsKFsnMzUnLCAnMTAnLCAnMjknLCAnMTknLCAnMjEnXSk7Ci0K
LSAgICAgICAgIGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlIGE6Y29udGFpbnMoIlBob25lIikn
KS5jbGljaygpOwotICAgICAgICAgZXhwZWN0KHJlcGVhdGVyKCd0YWJsZS5mcmllbmQnLCAnZnJp
ZW5kIGluIGZyaWVuZHMnKS5jb2x1bW4oJ2ZyaWVuZC5waG9uZScpKS4KLSAgICAgICAgICAgdG9F
cXVhbChbJzU1NS05ODc2JywgJzU1NS04NzY1JywgJzU1NS01Njc4JywgJzU1NS00MzIxJywgJzU1
NS0xMjEyJ10pOwotICAgICAgICAgZXhwZWN0KHJlcGVhdGVyKCd0YWJsZS5mcmllbmQnLCAnZnJp
ZW5kIGluIGZyaWVuZHMnKS5jb2x1bW4oJ2ZyaWVuZC5uYW1lJykpLgotICAgICAgICAgICB0b0Vx
dWFsKFsnTWFyeScsICdKdWxpZScsICdBZGFtJywgJ01pa2UnLCAnSm9obiddKTsKLSAgICAgICB9
KTsKLSAgICAgPC9kb2M6c2NlbmFyaW8+Ci0gICA8L2RvYzpleGFtcGxlPgotICovCi1vcmRlckJ5
RmlsdGVyLiRpbmplY3QgPSBbJyRwYXJzZSddOwotZnVuY3Rpb24gb3JkZXJCeUZpbHRlcigkcGFy
c2UpewotICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIHNvcnRQcmVkaWNhdGUsIHJldmVyc2VPcmRl
cikgewotICAgIGlmICghaXNBcnJheShhcnJheSkpIHJldHVybiBhcnJheTsKLSAgICBpZiAoIXNv
cnRQcmVkaWNhdGUpIHJldHVybiBhcnJheTsKLSAgICBzb3J0UHJlZGljYXRlID0gaXNBcnJheShz
b3J0UHJlZGljYXRlKSA/IHNvcnRQcmVkaWNhdGU6IFtzb3J0UHJlZGljYXRlXTsKLSAgICBzb3J0
UHJlZGljYXRlID0gbWFwKHNvcnRQcmVkaWNhdGUsIGZ1bmN0aW9uKHByZWRpY2F0ZSl7Ci0gICAg
ICB2YXIgZGVzY2VuZGluZyA9IGZhbHNlLCBnZXQgPSBwcmVkaWNhdGUgfHwgaWRlbnRpdHk7Ci0g
ICAgICBpZiAoaXNTdHJpbmcocHJlZGljYXRlKSkgewotICAgICAgICBpZiAoKHByZWRpY2F0ZS5j
aGFyQXQoMCkgPT0gJysnIHx8IHByZWRpY2F0ZS5jaGFyQXQoMCkgPT0gJy0nKSkgewotICAgICAg
ICAgIGRlc2NlbmRpbmcgPSBwcmVkaWNhdGUuY2hhckF0KDApID09ICctJzsKLSAgICAgICAgICBw
cmVkaWNhdGUgPSBwcmVkaWNhdGUuc3Vic3RyaW5nKDEpOwotICAgICAgICB9Ci0gICAgICAgIGdl
dCA9ICRwYXJzZShwcmVkaWNhdGUpOwotICAgICAgfQotICAgICAgcmV0dXJuIHJldmVyc2VDb21w
YXJhdG9yKGZ1bmN0aW9uKGEsYil7Ci0gICAgICAgIHJldHVybiBjb21wYXJlKGdldChhKSxnZXQo
YikpOwotICAgICAgfSwgZGVzY2VuZGluZyk7Ci0gICAgfSk7Ci0gICAgdmFyIGFycmF5Q29weSA9
IFtdOwotICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7IGFycmF5
Q29weS5wdXNoKGFycmF5W2ldKTsgfQotICAgIHJldHVybiBhcnJheUNvcHkuc29ydChyZXZlcnNl
Q29tcGFyYXRvcihjb21wYXJhdG9yLCByZXZlcnNlT3JkZXIpKTsKLQotICAgIGZ1bmN0aW9uIGNv
bXBhcmF0b3IobzEsIG8yKXsKLSAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IHNvcnRQcmVkaWNh
dGUubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgdmFyIGNvbXAgPSBzb3J0UHJlZGljYXRlW2ldKG8x
LCBvMik7Ci0gICAgICAgIGlmIChjb21wICE9PSAwKSByZXR1cm4gY29tcDsKLSAgICAgIH0KLSAg
ICAgIHJldHVybiAwOwotICAgIH0KLSAgICBmdW5jdGlvbiByZXZlcnNlQ29tcGFyYXRvcihjb21w
LCBkZXNjZW5kaW5nKSB7Ci0gICAgICByZXR1cm4gdG9Cb29sZWFuKGRlc2NlbmRpbmcpCi0gICAg
ICAgICAgPyBmdW5jdGlvbihhLGIpe3JldHVybiBjb21wKGIsYSk7fQotICAgICAgICAgIDogY29t
cDsKLSAgICB9Ci0gICAgZnVuY3Rpb24gY29tcGFyZSh2MSwgdjIpewotICAgICAgdmFyIHQxID0g
dHlwZW9mIHYxOwotICAgICAgdmFyIHQyID0gdHlwZW9mIHYyOwotICAgICAgaWYgKHQxID09IHQy
KSB7Ci0gICAgICAgIGlmICh0MSA9PSAic3RyaW5nIikgdjEgPSB2MS50b0xvd2VyQ2FzZSgpOwot
ICAgICAgICBpZiAodDEgPT0gInN0cmluZyIpIHYyID0gdjIudG9Mb3dlckNhc2UoKTsKLSAgICAg
ICAgaWYgKHYxID09PSB2MikgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiB2MSA8IHYyID8gLTEg
OiAxOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIHQxIDwgdDIgPyAtMSA6IDE7Ci0g
ICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLWZ1bmN0aW9uIG5nRGlyZWN0aXZlKGRpcmVjdGl2ZSkg
ewotICBpZiAoaXNGdW5jdGlvbihkaXJlY3RpdmUpKSB7Ci0gICAgZGlyZWN0aXZlID0gewotICAg
ICAgbGluazogZGlyZWN0aXZlCi0gICAgfQotICB9Ci0gIGRpcmVjdGl2ZS5yZXN0cmljdCA9IGRp
cmVjdGl2ZS5yZXN0cmljdCB8fCAnQUMnOwotICByZXR1cm4gdmFsdWVGbihkaXJlY3RpdmUpOwot
fQotCi0vKioKLSAqIEBuZ2RvYyBkaXJlY3RpdmUKLSAqIEBuYW1lIG5nLmRpcmVjdGl2ZTphCi0g
KiBAcmVzdHJpY3QgRQotICoKLSAqIEBkZXNjcmlwdGlvbgotICogTW9kaWZpZXMgdGhlIGRlZmF1
bHQgYmVoYXZpb3Igb2YgaHRtbCBBIHRhZywgc28gdGhhdCB0aGUgZGVmYXVsdCBhY3Rpb24gaXMg
cHJldmVudGVkIHdoZW4gaHJlZgotICogYXR0cmlidXRlIGlzIGVtcHR5LgotICoKLSAqIFRoZSBy
ZWFzb25pbmcgZm9yIHRoaXMgY2hhbmdlIGlzIHRvIGFsbG93IGVhc3kgY3JlYXRpb24gb2YgYWN0
aW9uIGxpbmtzIHdpdGggYG5nQ2xpY2tgIGRpcmVjdGl2ZQotICogd2l0aG91dCBjaGFuZ2luZyB0
aGUgbG9jYXRpb24gb3IgY2F1c2luZyBwYWdlIHJlbG9hZHMsIGUuZy46Ci0gKiBgPGEgaHJlZj0i
IiBuZy1jbGljaz0ibW9kZWwuJHNhdmUoKSI+U2F2ZTwvYT5gCi0gKi8KLXZhciBodG1sQW5jaG9y
RGlyZWN0aXZlID0gdmFsdWVGbih7Ci0gIHJlc3RyaWN0OiAnRScsCi0gIGNvbXBpbGU6IGZ1bmN0
aW9uKGVsZW1lbnQsIGF0dHIpIHsKLQotICAgIGlmIChtc2llIDw9IDgpIHsKLQotICAgICAgLy8g
dHVybiA8YSBocmVmIG5nLWNsaWNrPSIuLiI+bGluazwvYT4gaW50byBhIHN0eWxhYmxlIGxpbmsg
aW4gSUUKLSAgICAgIC8vIGJ1dCBvbmx5IGlmIGl0IGRvZXNuJ3QgaGF2ZSBuYW1lIGF0dHJpYnV0
ZSwgaW4gd2hpY2ggY2FzZSBpdCdzIGFuIGFuY2hvcgotICAgICAgaWYgKCFhdHRyLmhyZWYgJiYg
IWF0dHIubmFtZSkgewotICAgICAgICBhdHRyLiRzZXQoJ2hyZWYnLCAnJyk7Ci0gICAgICB9Ci0K
LSAgICAgIC8vIGFkZCBhIGNvbW1lbnQgbm9kZSB0byBhbmNob3JzIHRvIHdvcmthcm91bmQgSUUg
YnVnIHRoYXQgY2F1c2VzIGVsZW1lbnQgY29udGVudCB0byBiZSByZXNldAotICAgICAgLy8gdG8g
bmV3IGF0dHJpYnV0ZSBjb250ZW50IGlmIGF0dHJpYnV0ZSBpcyB1cGRhdGVkIHdpdGggdmFsdWUg
Y29udGFpbmluZyBAIGFuZCBlbGVtZW50IGFsc28KLSAgICAgIC8vIGNvbnRhaW5zIHZhbHVlIHdp
dGggQAotICAgICAgLy8gc2VlIGlzc3VlICMxOTQ5Ci0gICAgICBlbGVtZW50LmFwcGVuZChkb2N1
bWVudC5jcmVhdGVDb21tZW50KCdJRSBmaXgnKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZ1bmN0
aW9uKHNjb3BlLCBlbGVtZW50KSB7Ci0gICAgICBlbGVtZW50LmJpbmQoJ2NsaWNrJywgZnVuY3Rp
b24oZXZlbnQpewotICAgICAgICAvLyBpZiB3ZSBoYXZlIG5vIGhyZWYgdXJsLCB0aGVuIGRvbid0
IG5hdmlnYXRlIGFueXdoZXJlLgotICAgICAgICBpZiAoIWVsZW1lbnQuYXR0cignaHJlZicpKSB7
Ci0gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICAgICAgfQotICAgICAgfSk7
Ci0gICAgfQotICB9Ci19KTsKLQotLyoqCi0gKiBAbmdkb2MgZGlyZWN0aXZlCi0gKiBAbmFtZSBu
Zy5kaXJlY3RpdmU6bmdIcmVmCi0gKiBAcmVzdHJpY3QgQQotICoKLSAqIEBkZXNjcmlwdGlvbgot
ICogVXNpbmcgQW5ndWxhciBtYXJrdXAgbGlrZSB7e2hhc2h9fSBpbiBhbiBocmVmIGF0dHJpYnV0
ZSBtYWtlcwotICogdGhlIHBhZ2Ugb3BlbiB0byBhIHdyb25nIFVSTCwgaWYgdGhlIHVzZXIgY2xp
Y2tzIHRoYXQgbGluayBiZWZvcmUKLSAqIGFuZ3VsYXIgaGFzIGEgY2hhbmNlIHRvIHJlcGxhY2Ug
dGhlIHt7aGFzaH19IHdpdGggYWN0dWFsIFVSTCwgdGhlCi0gKiBsaW5rIHdpbGwgYmUgYnJva2Vu
IGFuZCB3aWxsIG1vc3QgbGlrZWx5IHJldHVybiBhIDQwNCBlcnJvci4KLSAqIFRoZSBgbmdIcmVm
YCBkaXJlY3RpdmUgc29sdmVzIHRoaXMgcHJvYmxlbS4KLSAqCi0gKiBUaGUgYnVnZ3kgd2F5IHRv
IHdyaXRlIGl0OgotICogPHByZT4KLSAqIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ3JhdmF0YXIuY29t
L2F2YXRhci97e2hhc2h9fSIvPgotICogPC9wcmU+Ci0gKgotICogVGhlIGNvcnJlY3Qgd2F5IHRv
IHdyaXRlIGl0OgotICogPHByZT4KLSAqIDxhIG5nLWhyZWY9Imh0dHA6Ly93d3cuZ3JhdmF0YXIu
Y29tL2F2YXRhci97e2hhc2h9fSIvPgotICogPC9wcmU+Ci0gKgotICogQGVsZW1lbnQgQQotICog
QHBhcmFtIHt0ZW1wbGF0ZX0gbmdIcmVmIGFueSBzdHJpbmcgd2hpY2ggY2FuIGNvbnRhaW4gYHt7
fX1gIG1hcmt1cC4KLSAqCi0gKiBAZXhhbXBsZQotICogVGhpcyBleGFtcGxlIHVzZXMgYGxpbmtg
IHZhcmlhYmxlIGluc2lkZSBgaHJlZmAgYXR0cmlidXRlOgotICAgIDxkb2M6ZXhhbXBsZT4KLSAg
ICAgIDxkb2M6c291cmNlPgotICAgICAgICA8aW5wdXQgbmctbW9kZWw9InZhbHVlIiAvPjxiciAv
PgotICAgICAgICA8YSBpZD0ibGluay0xIiBocmVmIG5nLWNsaWNrPSJ2YWx1ZSA9IDEiPmxpbmsg
MTwvYT4gKGxpbmssIGRvbid0IHJlbG9hZCk8YnIgLz4KLSAgICAgICAgPGEgaWQ9ImxpbmstMiIg
aHJlZj0iIiBuZy1jbGljaz0idmFsdWUgPSAyIj5saW5rIDI8L2E+IChsaW5rLCBkb24ndCByZWxv
YWQpPGJyIC8+Ci0gICAgICAgIDxhIGlkPSJsaW5rLTMiIG5nLWhyZWY9Ii97eycxMjMnfX0iPmxp
bmsgMzwvYT4gKGxpbmssIHJlbG9hZCEpPGJyIC8+Ci0gICAgICAgIDxhIGlkPSJsaW5rLTQiIGhy
ZWY9IiIgbmFtZT0ieHgiIG5nLWNsaWNrPSJ2YWx1ZSA9IDQiPmFuY2hvcjwvYT4gKGxpbmssIGRv
bid0IHJlbG9hZCk8YnIgLz4KLSAgICAgICAgPGEgaWQ9ImxpbmstNSIgbmFtZT0ieHh4IiBuZy1j
bGljaz0idmFsdWUgPSA1Ij5hbmNob3I8L2E+IChubyBsaW5rKTxiciAvPgotICAgICAgICA8YSBp
ZD0ibGluay02IiBuZy1ocmVmPSJ7e3ZhbHVlfX0iPmxpbms8L2E+IChsaW5rLCBjaGFuZ2UgbG9j
YXRpb24pCi0gICAgICA8L2RvYzpzb3VyY2U+Ci0gICAgICA8ZG9jOnNjZW5hcmlvPgotICAgICAg
ICBpdCgnc2hvdWxkIGV4ZWN1dGUgbmctY2xpY2sgYnV0IG5vdCByZWxvYWQgd2hlbiBocmVmIHdp
dGhvdXQgdmFsdWUnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICBlbGVtZW50KCcjbGluay0xJyku
Y2xpY2soKTsKLSAgICAgICAgICBleHBlY3QoaW5wdXQoJ3ZhbHVlJykudmFsKCkpLnRvRXF1YWwo
JzEnKTsKLSAgICAgICAgICBleHBlY3QoZWxlbWVudCgnI2xpbmstMScpLmF0dHIoJ2hyZWYnKSku
dG9CZSgiIik7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGl0KCdzaG91bGQgZXhlY3V0ZSBuZy1j
bGljayBidXQgbm90IHJlbG9hZCB3aGVuIGhyZWYgZW1wdHkgc3RyaW5nJywgZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgZWxlbWVudCgnI2xpbmstMicpLmNsaWNrKCk7Ci0gICAgICAgICAgZXhwZWN0
KGlucHV0KCd2YWx1ZScpLnZhbCgpKS50b0VxdWFsKCcyJyk7Ci0gICAgICAgICAgZXhwZWN0KGVs
ZW1lbnQoJyNsaW5rLTInKS5hdHRyKCdocmVmJykpLnRvQmUoIiIpOwotICAgICAgICB9KTsKLQot
ICAgICAgICBpdCgnc2hvdWxkIGV4ZWN1dGUgbmctY2xpY2sgYW5kIGNoYW5nZSB1cmwgd2hlbiBu
Zy1ocmVmIHNwZWNpZmllZCcsIGZ1bmN0aW9uKCkgewotICAgICAgICAgIGV4cGVjdChlbGVtZW50
KCcjbGluay0zJykuYXR0cignaHJlZicpKS50b0JlKCIvMTIzIik7Ci0KLSAgICAgICAgICBlbGVt
ZW50KCcjbGluay0zJykuY2xpY2soKTsKLSAgICAgICAgICBleHBlY3QoYnJvd3NlcigpLndpbmRv
dygpLnBhdGgoKSkudG9FcXVhbCgnLzEyMycpOwotICAgICAgICB9KTsKLQotICAgICAgICBpdCgn
c2hvdWxkIGV4ZWN1dGUgbmctY2xpY2sgYnV0IG5vdCByZWxvYWQgd2hlbiBocmVmIGVtcHR5IHN0
cmluZyBhbmQgbmFtZSBzcGVjaWZpZWQnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICBlbGVtZW50
KCcjbGluay00JykuY2xpY2soKTsKLSAgICAgICAgICBleHBlY3QoaW5wdXQoJ3ZhbHVlJykudmFs
KCkpLnRvRXF1YWwoJzQnKTsKLSAgICAgICAgICBleHBlY3QoZWxlbWVudCgnI2xpbmstNCcpLmF0
dHIoJ2hyZWYnKSkudG9CZSgnJyk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGl0KCdzaG91bGQg
ZXhlY3V0ZSBuZy1jbGljayBidXQgbm90IHJlbG9hZCB3aGVuIG5vIGhyZWYgYnV0IG5hbWUgc3Bl
Y2lmaWVkJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgZWxlbWVudCgnI2xpbmstNScpLmNsaWNr
KCk7Ci0gICAgICAgICAgZXhwZWN0KGlucHV0KCd2YWx1ZScpLnZhbCgpKS50b0VxdWFsKCc1Jyk7
Ci0gICAgICAgICAgZXhwZWN0KGVsZW1lbnQoJyNsaW5rLTUnKS5hdHRyKCdocmVmJykpLnRvQmUo
dW5kZWZpbmVkKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgaXQoJ3Nob3VsZCBvbmx5IGNoYW5n
ZSB1cmwgd2hlbiBvbmx5IG5nLWhyZWYnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICBpbnB1dCgn
dmFsdWUnKS5lbnRlcignNicpOwotICAgICAgICAgIGV4cGVjdChlbGVtZW50KCcjbGluay02Jyku
YXR0cignaHJlZicpKS50b0JlKCc2Jyk7Ci0KLSAgICAgICAgICBlbGVtZW50KCcjbGluay02Jyku
Y2xpY2soKTsKLSAgICAgICAgICBleHBlY3QoYnJvd3NlcigpLmxvY2F0aW9uKCkudXJsKCkpLnRv
RXF1YWwoJy82Jyk7Ci0gICAgICAgIH0pOwotICAgICAgPC9kb2M6c2NlbmFyaW8+Ci0gICAgPC9k
b2M6ZXhhbXBsZT4KLSAqLwotCi0vKioKLSAqIEBuZ2RvYyBkaXJlY3RpdmUKLSAqIEBuYW1lIG5n
LmRpcmVjdGl2ZTpuZ1NyYwotICogQHJlc3RyaWN0IEEKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAq
IFVzaW5nIEFuZ3VsYXIgbWFya3VwIGxpa2UgYHt7aGFzaH19YCBpbiBhIGBzcmNgIGF0dHJpYnV0
ZSBkb2Vzbid0Ci0gKiB3b3JrIHJpZ2h0OiBUaGUgYnJvd3NlciB3aWxsIGZldGNoIGZyb20gdGhl
IFVSTCB3aXRoIHRoZSBsaXRlcmFsCi0gKiB0ZXh0IGB7e2hhc2h9fWAgdW50aWwgQW5ndWxhciBy
ZXBsYWNlcyB0aGUgZXhwcmVzc2lvbiBpbnNpZGUKLSAqIGB7e2hhc2h9fWAuIFRoZSBgbmdTcmNg
IGRpcmVjdGl2ZSBzb2x2ZXMgdGhpcyBwcm9ibGVtLgotICoKLSAqIFRoZSBidWdneSB3YXkgdG8g
d3JpdGUgaXQ6Ci0gKiA8cHJlPgotICogPGltZyBzcmM9Imh0dHA6Ly93d3cuZ3JhdmF0YXIuY29t
L2F2YXRhci97e2hhc2h9fSIvPgotICogPC9wcmU+Ci0gKgotICogVGhlIGNvcnJlY3Qgd2F5IHRv
IHdyaXRlIGl0OgotICogPHByZT4KLSAqIDxpbWcgbmctc3JjPSJodHRwOi8vd3d3LmdyYXZhdGFy
LmNvbS9hdmF0YXIve3toYXNofX0iLz4KLSAqIDwvcHJlPgotICoKLSAqIEBlbGVtZW50IElNRwot
ICogQHBhcmFtIHt0ZW1wbGF0ZX0gbmdTcmMgYW55IHN0cmluZyB3aGljaCBjYW4gY29udGFpbiBg
e3t9fWAgbWFya3VwLgotICovCi0KLS8qKgotICogQG5nZG9jIGRpcmVjdGl2ZQotICogQG5hbWUg
bmcuZGlyZWN0aXZlOm5nRGlzYWJsZWQKLSAqIEByZXN0cmljdCBBCi0gKgotICogQGRlc2NyaXB0
aW9uCi0gKgotICogVGhlIGZvbGxvd2luZyBtYXJrdXAgd2lsbCBtYWtlIHRoZSBidXR0b24gZW5h
YmxlZCBvbiBDaHJvbWUvRmlyZWZveCBidXQgbm90IG9uIElFOCBhbmQgb2xkZXIgSUVzOgotICog
PHByZT4KLSAqIDxkaXYgbmctaW5pdD0ic2NvcGUgPSB7IGlzRGlzYWJsZWQ6IGZhbHNlIH0iPgot
ICogIDxidXR0b24gZGlzYWJsZWQ9Int7c2NvcGUuaXNEaXNhYmxlZH19Ij5EaXNhYmxlZDwvYnV0
dG9uPgotICogPC9kaXY+Ci0gKiA8L3ByZT4KLSAqCi0gKiBUaGUgSFRNTCBzcGVjcyBkbyBub3Qg
cmVxdWlyZSBicm93c2VycyB0byBwcmVzZXJ2ZSB0aGUgc3BlY2lhbCBhdHRyaWJ1dGVzIHN1Y2gg
YXMgZGlzYWJsZWQuCi0gKiAoVGhlIHByZXNlbmNlIG9mIHRoZW0gbWVhbnMgdHJ1ZSBhbmQgYWJz
ZW5jZSBtZWFucyBmYWxzZSkKLSAqIFRoaXMgcHJldmVudHMgdGhlIGFuZ3VsYXIgY29tcGlsZXIg
ZnJvbSBjb3JyZWN0bHkgcmV0cmlldmluZyB0aGUgYmluZGluZyBleHByZXNzaW9uLgotICogVG8g
c29sdmUgdGhpcyBwcm9ibGVtLCB3ZSBpbnRyb2R1Y2UgdGhlIGBuZ0Rpc2FibGVkYCBkaXJlY3Rp
dmUuCi0gKgotICogQGV4YW1wbGUKLSAgICA8ZG9jOmV4YW1wbGU+Ci0gICAgICA8ZG9jOnNvdXJj
ZT4KLSAgICAgICAgQ2xpY2sgbWUgdG8gdG9nZ2xlOiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5n
LW1vZGVsPSJjaGVja2VkIj48YnIvPgotICAgICAgICA8YnV0dG9uIG5nLW1vZGVsPSJidXR0b24i
IG5nLWRpc2FibGVkPSJjaGVja2VkIj5CdXR0b248L2J1dHRvbj4KLSAgICAgIDwvZG9jOnNvdXJj
ZT4KLSAgICAgIDxkb2M6c2NlbmFyaW8+Ci0gICAgICAgIGl0KCdzaG91bGQgdG9nZ2xlIGJ1dHRv
bicsIGZ1bmN0aW9uKCkgewotICAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUt
bGl2ZSA6YnV0dG9uJykucHJvcCgnZGlzYWJsZWQnKSkudG9CZUZhbHN5KCk7Ci0gICAgICAgICAg
aW5wdXQoJ2NoZWNrZWQnKS5jaGVjaygpOwotICAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9j
LWV4YW1wbGUtbGl2ZSA6YnV0dG9uJykucHJvcCgnZGlzYWJsZWQnKSkudG9CZVRydXRoeSgpOwot
ICAgICAgICB9KTsKLSAgICAgIDwvZG9jOnNjZW5hcmlvPgotICAgIDwvZG9jOmV4YW1wbGU+Ci0g
KgotICogQGVsZW1lbnQgSU5QVVQKLSAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdEaXNhYmxlZCBB
bmd1bGFyIGV4cHJlc3Npb24gdGhhdCB3aWxsIGJlIGV2YWx1YXRlZC4KLSAqLwotCi0KLS8qKgot
ICogQG5nZG9jIGRpcmVjdGl2ZQotICogQG5hbWUgbmcuZGlyZWN0aXZlOm5nQ2hlY2tlZAotICog
QHJlc3RyaWN0IEEKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIFRoZSBIVE1MIHNwZWNzIGRvIG5v
dCByZXF1aXJlIGJyb3dzZXJzIHRvIHByZXNlcnZlIHRoZSBzcGVjaWFsIGF0dHJpYnV0ZXMgc3Vj
aCBhcyBjaGVja2VkLgotICogKFRoZSBwcmVzZW5jZSBvZiB0aGVtIG1lYW5zIHRydWUgYW5kIGFi
c2VuY2UgbWVhbnMgZmFsc2UpCi0gKiBUaGlzIHByZXZlbnRzIHRoZSBhbmd1bGFyIGNvbXBpbGVy
IGZyb20gY29ycmVjdGx5IHJldHJpZXZpbmcgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbi4KLSAqIFRv
IHNvbHZlIHRoaXMgcHJvYmxlbSwgd2UgaW50cm9kdWNlIHRoZSBgbmdDaGVja2VkYCBkaXJlY3Rp
dmUuCi0gKiBAZXhhbXBsZQotICAgIDxkb2M6ZXhhbXBsZT4KLSAgICAgIDxkb2M6c291cmNlPgot
ICAgICAgICBDaGVjayBtZSB0byBjaGVjayBib3RoOiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5n
LW1vZGVsPSJtYXN0ZXIiPjxici8+Ci0gICAgICAgIDxpbnB1dCBpZD0iY2hlY2tTbGF2ZSIgdHlw
ZT0iY2hlY2tib3giIG5nLWNoZWNrZWQ9Im1hc3RlciI+Ci0gICAgICA8L2RvYzpzb3VyY2U+Ci0g
ICAgICA8ZG9jOnNjZW5hcmlvPgotICAgICAgICBpdCgnc2hvdWxkIGNoZWNrIGJvdGggY2hlY2tC
b3hlcycsIGZ1bmN0aW9uKCkgewotICAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1w
bGUtbGl2ZSAjY2hlY2tTbGF2ZScpLnByb3AoJ2NoZWNrZWQnKSkudG9CZUZhbHN5KCk7Ci0gICAg
ICAgICAgaW5wdXQoJ21hc3RlcicpLmNoZWNrKCk7Ci0gICAgICAgICAgZXhwZWN0KGVsZW1lbnQo
Jy5kb2MtZXhhbXBsZS1saXZlICNjaGVja1NsYXZlJykucHJvcCgnY2hlY2tlZCcpKS50b0JlVHJ1
dGh5KCk7Ci0gICAgICAgIH0pOwotICAgICAgPC9kb2M6c2NlbmFyaW8+Ci0gICAgPC9kb2M6ZXhh
bXBsZT4KLSAqCi0gKiBAZWxlbWVudCBJTlBVVAotICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ0No
ZWNrZWQgQW5ndWxhciBleHByZXNzaW9uIHRoYXQgd2lsbCBiZSBldmFsdWF0ZWQuCi0gKi8KLQot
Ci0vKioKLSAqIEBuZ2RvYyBkaXJlY3RpdmUKLSAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpuZ011bHRp
cGxlCi0gKiBAcmVzdHJpY3QgQQotICoKLSAqIEBkZXNjcmlwdGlvbgotICogVGhlIEhUTUwgc3Bl
Y3MgZG8gbm90IHJlcXVpcmUgYnJvd3NlcnMgdG8gcHJlc2VydmUgdGhlIHNwZWNpYWwgYXR0cmli
dXRlcyBzdWNoIGFzIG11bHRpcGxlLgotICogKFRoZSBwcmVzZW5jZSBvZiB0aGVtIG1lYW5zIHRy
dWUgYW5kIGFic2VuY2UgbWVhbnMgZmFsc2UpCi0gKiBUaGlzIHByZXZlbnRzIHRoZSBhbmd1bGFy
IGNvbXBpbGVyIGZyb20gY29ycmVjdGx5IHJldHJpZXZpbmcgdGhlIGJpbmRpbmcgZXhwcmVzc2lv
bi4KLSAqIFRvIHNvbHZlIHRoaXMgcHJvYmxlbSwgd2UgaW50cm9kdWNlIHRoZSBgbmdNdWx0aXBs
ZWAgZGlyZWN0aXZlLgotICoKLSAqIEBleGFtcGxlCi0gICAgIDxkb2M6ZXhhbXBsZT4KLSAgICAg
ICA8ZG9jOnNvdXJjZT4KLSAgICAgICAgIENoZWNrIG1lIGNoZWNrIG11bHRpcGxlOiA8aW5wdXQg
dHlwZT0iY2hlY2tib3giIG5nLW1vZGVsPSJjaGVja2VkIj48YnIvPgotICAgICAgICAgPHNlbGVj
dCBpZD0ic2VsZWN0IiBuZy1tdWx0aXBsZT0iY2hlY2tlZCI+Ci0gICAgICAgICAgIDxvcHRpb24+
TWlza288L29wdGlvbj4KLSAgICAgICAgICAgPG9wdGlvbj5JZ29yPC9vcHRpb24+Ci0gICAgICAg
ICAgIDxvcHRpb24+Vm9qdGE8L29wdGlvbj4KLSAgICAgICAgICAgPG9wdGlvbj5EaTwvb3B0aW9u
PgotICAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICAgPC9kb2M6c291cmNlPgotICAgICAgIDxkb2M6
c2NlbmFyaW8+Ci0gICAgICAgICBpdCgnc2hvdWxkIHRvZ2dsZSBtdWx0aXBsZScsIGZ1bmN0aW9u
KCkgewotICAgICAgICAgICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgI3NlbGVj
dCcpLnByb3AoJ211bHRpcGxlJykpLnRvQmVGYWxzeSgpOwotICAgICAgICAgICBpbnB1dCgnY2hl
Y2tlZCcpLmNoZWNrKCk7Ci0gICAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUt
bGl2ZSAjc2VsZWN0JykucHJvcCgnbXVsdGlwbGUnKSkudG9CZVRydXRoeSgpOwotICAgICAgICAg
fSk7Ci0gICAgICAgPC9kb2M6c2NlbmFyaW8+Ci0gICAgIDwvZG9jOmV4YW1wbGU+Ci0gKgotICog
QGVsZW1lbnQgU0VMRUNUCi0gKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nTXVsdGlwbGUgQW5ndWxh
ciBleHByZXNzaW9uIHRoYXQgd2lsbCBiZSBldmFsdWF0ZWQuCi0gKi8KLQotCi0vKioKLSAqIEBu
Z2RvYyBkaXJlY3RpdmUKLSAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpuZ1JlYWRvbmx5Ci0gKiBAcmVz
dHJpY3QgQQotICoKLSAqIEBkZXNjcmlwdGlvbgotICogVGhlIEhUTUwgc3BlY3MgZG8gbm90IHJl
cXVpcmUgYnJvd3NlcnMgdG8gcHJlc2VydmUgdGhlIHNwZWNpYWwgYXR0cmlidXRlcyBzdWNoIGFz
IHJlYWRvbmx5LgotICogKFRoZSBwcmVzZW5jZSBvZiB0aGVtIG1lYW5zIHRydWUgYW5kIGFic2Vu
Y2UgbWVhbnMgZmFsc2UpCi0gKiBUaGlzIHByZXZlbnRzIHRoZSBhbmd1bGFyIGNvbXBpbGVyIGZy
b20gY29ycmVjdGx5IHJldHJpZXZpbmcgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbi4KLSAqIFRvIHNv
bHZlIHRoaXMgcHJvYmxlbSwgd2UgaW50cm9kdWNlIHRoZSBgbmdSZWFkb25seWAgZGlyZWN0aXZl
LgotICogQGV4YW1wbGUKLSAgICA8ZG9jOmV4YW1wbGU+Ci0gICAgICA8ZG9jOnNvdXJjZT4KLSAg
ICAgICAgQ2hlY2sgbWUgdG8gbWFrZSB0ZXh0IHJlYWRvbmx5OiA8aW5wdXQgdHlwZT0iY2hlY2ti
b3giIG5nLW1vZGVsPSJjaGVja2VkIj48YnIvPgotICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIg
bmctcmVhZG9ubHk9ImNoZWNrZWQiIHZhbHVlPSJJJ20gQW5ndWxhciIvPgotICAgICAgPC9kb2M6
c291cmNlPgotICAgICAgPGRvYzpzY2VuYXJpbz4KLSAgICAgICAgaXQoJ3Nob3VsZCB0b2dnbGUg
cmVhZG9ubHkgYXR0cicsIGZ1bmN0aW9uKCkgewotICAgICAgICAgIGV4cGVjdChlbGVtZW50KCcu
ZG9jLWV4YW1wbGUtbGl2ZSA6dGV4dCcpLnByb3AoJ3JlYWRvbmx5JykpLnRvQmVGYWxzeSgpOwot
ICAgICAgICAgIGlucHV0KCdjaGVja2VkJykuY2hlY2soKTsKLSAgICAgICAgICBleHBlY3QoZWxl
bWVudCgnLmRvYy1leGFtcGxlLWxpdmUgOnRleHQnKS5wcm9wKCdyZWFkb25seScpKS50b0JlVHJ1
dGh5KCk7Ci0gICAgICAgIH0pOwotICAgICAgPC9kb2M6c2NlbmFyaW8+Ci0gICAgPC9kb2M6ZXhh
bXBsZT4KLSAqCi0gKiBAZWxlbWVudCBJTlBVVAotICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Np
b24gQW5ndWxhciBleHByZXNzaW9uIHRoYXQgd2lsbCBiZSBldmFsdWF0ZWQuCi0gKi8KLQotCi0v
KioKLSAqIEBuZ2RvYyBkaXJlY3RpdmUKLSAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpuZ1NlbGVjdGVk
Ci0gKiBAcmVzdHJpY3QgQQotICoKLSAqIEBkZXNjcmlwdGlvbgotICogVGhlIEhUTUwgc3BlY3Mg
ZG8gbm90IHJlcXVpcmUgYnJvd3NlcnMgdG8gcHJlc2VydmUgdGhlIHNwZWNpYWwgYXR0cmlidXRl
cyBzdWNoIGFzIHNlbGVjdGVkLgotICogKFRoZSBwcmVzZW5jZSBvZiB0aGVtIG1lYW5zIHRydWUg
YW5kIGFic2VuY2UgbWVhbnMgZmFsc2UpCi0gKiBUaGlzIHByZXZlbnRzIHRoZSBhbmd1bGFyIGNv
bXBpbGVyIGZyb20gY29ycmVjdGx5IHJldHJpZXZpbmcgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbi4K
LSAqIFRvIHNvbHZlIHRoaXMgcHJvYmxlbSwgd2UgaW50cm9kdWNlZCB0aGUgYG5nU2VsZWN0ZWRg
IGRpcmVjdGl2ZS4KLSAqIEBleGFtcGxlCi0gICAgPGRvYzpleGFtcGxlPgotICAgICAgPGRvYzpz
b3VyY2U+Ci0gICAgICAgIENoZWNrIG1lIHRvIHNlbGVjdDogPGlucHV0IHR5cGU9ImNoZWNrYm94
IiBuZy1tb2RlbD0ic2VsZWN0ZWQiPjxici8+Ci0gICAgICAgIDxzZWxlY3Q+Ci0gICAgICAgICAg
PG9wdGlvbj5IZWxsbyE8L29wdGlvbj4KLSAgICAgICAgICA8b3B0aW9uIGlkPSJncmVldCIgbmct
c2VsZWN0ZWQ9InNlbGVjdGVkIj5HcmVldGluZ3MhPC9vcHRpb24+Ci0gICAgICAgIDwvc2VsZWN0
PgotICAgICAgPC9kb2M6c291cmNlPgotICAgICAgPGRvYzpzY2VuYXJpbz4KLSAgICAgICAgaXQo
J3Nob3VsZCBzZWxlY3QgR3JlZXRpbmdzIScsIGZ1bmN0aW9uKCkgewotICAgICAgICAgIGV4cGVj
dChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSAjZ3JlZXQnKS5wcm9wKCdzZWxlY3RlZCcpKS50
b0JlRmFsc3koKTsKLSAgICAgICAgICBpbnB1dCgnc2VsZWN0ZWQnKS5jaGVjaygpOwotICAgICAg
ICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSAjZ3JlZXQnKS5wcm9wKCdzZWxl
Y3RlZCcpKS50b0JlVHJ1dGh5KCk7Ci0gICAgICAgIH0pOwotICAgICAgPC9kb2M6c2NlbmFyaW8+
Ci0gICAgPC9kb2M6ZXhhbXBsZT4KLSAqCi0gKiBAZWxlbWVudCBPUFRJT04KLSAqIEBwYXJhbSB7
c3RyaW5nfSBleHByZXNzaW9uIEFuZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IHdpbGwgYmUgZXZhbHVh
dGVkLgotICovCi0KLQotdmFyIG5nQXR0cmlidXRlQWxpYXNEaXJlY3RpdmVzID0ge307Ci0KLQot
Ly8gYm9vbGVhbiBhdHRycyBhcmUgZXZhbHVhdGVkCi1mb3JFYWNoKEJPT0xFQU5fQVRUUiwgZnVu
Y3Rpb24ocHJvcE5hbWUsIGF0dHJOYW1lKSB7Ci0gIHZhciBub3JtYWxpemVkID0gZGlyZWN0aXZl
Tm9ybWFsaXplKCduZy0nICsgYXR0ck5hbWUpOwotICBuZ0F0dHJpYnV0ZUFsaWFzRGlyZWN0aXZl
c1tub3JtYWxpemVkXSA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB7Ci0gICAgICBwcmlvcml0
eTogMTAwLAotICAgICAgY29tcGlsZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiBmdW5j
dGlvbihzY29wZSwgZWxlbWVudCwgYXR0cikgewotICAgICAgICAgIHNjb3BlLiR3YXRjaChhdHRy
W25vcm1hbGl6ZWRdLCBmdW5jdGlvbiBuZ0Jvb2xlYW5BdHRyV2F0Y2hBY3Rpb24odmFsdWUpIHsK
LSAgICAgICAgICAgIGF0dHIuJHNldChhdHRyTmFtZSwgISF2YWx1ZSk7Ci0gICAgICAgICAgfSk7
Ci0gICAgICAgIH07Ci0gICAgICB9Ci0gICAgfTsKLSAgfTsKLX0pOwotCi0KLS8vIG5nLXNyYywg
bmctaHJlZiBhcmUgaW50ZXJwb2xhdGVkCi1mb3JFYWNoKFsnc3JjJywgJ2hyZWYnXSwgZnVuY3Rp
b24oYXR0ck5hbWUpIHsKLSAgdmFyIG5vcm1hbGl6ZWQgPSBkaXJlY3RpdmVOb3JtYWxpemUoJ25n
LScgKyBhdHRyTmFtZSk7Ci0gIG5nQXR0cmlidXRlQWxpYXNEaXJlY3RpdmVzW25vcm1hbGl6ZWRd
ID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHsKLSAgICAgIHByaW9yaXR5OiA5OSwgLy8gaXQg
bmVlZHMgdG8gcnVuIGFmdGVyIHRoZSBhdHRyaWJ1dGVzIGFyZSBpbnRlcnBvbGF0ZWQKLSAgICAg
IGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyKSB7Ci0gICAgICAgIGF0dHIuJG9i
c2VydmUobm9ybWFsaXplZCwgZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgICAgICBpZiAoIXZhbHVl
KQotICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGF0dHIuJHNldChhdHRyTmFtZSwg
dmFsdWUpOwotCi0gICAgICAgICAgLy8gb24gSUUsIGlmICJuZzpzcmMiIGRpcmVjdGl2ZSBkZWNs
YXJhdGlvbiBpcyB1c2VkIGFuZCAic3JjIiBhdHRyaWJ1dGUgZG9lc24ndCBleGlzdAotICAgICAg
ICAgIC8vIHRoZW4gY2FsbGluZyBlbGVtZW50LnNldEF0dHJpYnV0ZSgnc3JjJywgJ2ZvbycpIGRv
ZXNuJ3QgZG8gYW55dGhpbmcsIHNvIHdlIG5lZWQKLSAgICAgICAgICAvLyB0byBzZXQgdGhlIHBy
b3BlcnR5IGFzIHdlbGwgdG8gYWNoaWV2ZSB0aGUgZGVzaXJlZCBlZmZlY3QuCi0gICAgICAgICAg
Ly8gd2UgdXNlIGF0dHJbYXR0ck5hbWVdIHZhbHVlIHNpbmNlICRzZXQgY2FuIHNhbml0aXplIHRo
ZSB1cmwuCi0gICAgICAgICAgaWYgKG1zaWUpIGVsZW1lbnQucHJvcChhdHRyTmFtZSwgYXR0clth
dHRyTmFtZV0pOwotICAgICAgICB9KTsKLSAgICAgIH0KLSAgICB9OwotICB9OwotfSk7Ci0KLXZh
ciBudWxsRm9ybUN0cmwgPSB7Ci0gICRhZGRDb250cm9sOiBub29wLAotICAkcmVtb3ZlQ29udHJv
bDogbm9vcCwKLSAgJHNldFZhbGlkaXR5OiBub29wLAotICAkc2V0RGlydHk6IG5vb3AKLX07Ci0K
LS8qKgotICogQG5nZG9jIG9iamVjdAotICogQG5hbWUgbmcuZGlyZWN0aXZlOmZvcm0uRm9ybUNv
bnRyb2xsZXIKLSAqCi0gKiBAcHJvcGVydHkge2Jvb2xlYW59ICRwcmlzdGluZSBUcnVlIGlmIHVz
ZXIgaGFzIG5vdCBpbnRlcmFjdGVkIHdpdGggdGhlIGZvcm0geWV0LgotICogQHByb3BlcnR5IHti
b29sZWFufSAkZGlydHkgVHJ1ZSBpZiB1c2VyIGhhcyBhbHJlYWR5IGludGVyYWN0ZWQgd2l0aCB0
aGUgZm9ybS4KLSAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gJHZhbGlkIFRydWUgaWYgYWxsIG9mIHRo
ZSBjb250YWluaW5nIGZvcm1zIGFuZCBjb250cm9scyBhcmUgdmFsaWQuCi0gKiBAcHJvcGVydHkg
e2Jvb2xlYW59ICRpbnZhbGlkIFRydWUgaWYgYXQgbGVhc3Qgb25lIGNvbnRhaW5pbmcgY29udHJv
bCBvciBmb3JtIGlzIGludmFsaWQuCi0gKgotICogQHByb3BlcnR5IHtPYmplY3R9ICRlcnJvciBJ
cyBhbiBvYmplY3QgaGFzaCwgY29udGFpbmluZyByZWZlcmVuY2VzIHRvIGFsbCBpbnZhbGlkIGNv
bnRyb2xzIG9yCi0gKiAgZm9ybXMsIHdoZXJlOgotICoKLSAqICAtIGtleXMgYXJlIHZhbGlkYXRp
b24gdG9rZW5zIChlcnJvciBuYW1lcykg4oCUIHN1Y2ggYXMgYHJlcXVpcmVkYCwgYHVybGAgb3Ig
YGVtYWlsYCksCi0gKiAgLSB2YWx1ZXMgYXJlIGFycmF5cyBvZiBjb250cm9scyBvciBmb3JtcyB0
aGF0IGFyZSBpbnZhbGlkIHdpdGggZ2l2ZW4gZXJyb3IuCi0gKgotICogQGRlc2NyaXB0aW9uCi0g
KiBgRm9ybUNvbnRyb2xsZXJgIGtlZXBzIHRyYWNrIG9mIGFsbCBpdHMgY29udHJvbHMgYW5kIG5l
c3RlZCBmb3JtcyBhcyB3ZWxsIGFzIHN0YXRlIG9mIHRoZW0sCi0gKiBzdWNoIGFzIGJlaW5nIHZh
bGlkL2ludmFsaWQgb3IgZGlydHkvcHJpc3RpbmUuCi0gKgotICogRWFjaCB7QGxpbmsgbmcuZGly
ZWN0aXZlOmZvcm0gZm9ybX0gZGlyZWN0aXZlIGNyZWF0ZXMgYW4gaW5zdGFuY2UKLSAqIG9mIGBG
b3JtQ29udHJvbGxlcmAuCi0gKgotICovCi0vL2Fza3MgZm9yICRzY29wZSB0byBmb29sIHRoZSBC
QyBjb250cm9sbGVyIG1vZHVsZQotRm9ybUNvbnRyb2xsZXIuJGluamVjdCA9IFsnJGVsZW1lbnQn
LCAnJGF0dHJzJywgJyRzY29wZSddOwotZnVuY3Rpb24gRm9ybUNvbnRyb2xsZXIoZWxlbWVudCwg
YXR0cnMpIHsKLSAgdmFyIGZvcm0gPSB0aGlzLAotICAgICAgcGFyZW50Rm9ybSA9IGVsZW1lbnQu
cGFyZW50KCkuY29udHJvbGxlcignZm9ybScpIHx8IG51bGxGb3JtQ3RybCwKLSAgICAgIGludmFs
aWRDb3VudCA9IDAsIC8vIHVzZWQgdG8gZWFzaWx5IGRldGVybWluZSBpZiB3ZSBhcmUgdmFsaWQK
LSAgICAgIGVycm9ycyA9IGZvcm0uJGVycm9yID0ge307Ci0KLSAgLy8gaW5pdCBzdGF0ZQotICBm
b3JtLiRuYW1lID0gYXR0cnMubmFtZTsKLSAgZm9ybS4kZGlydHkgPSBmYWxzZTsKLSAgZm9ybS4k
cHJpc3RpbmUgPSB0cnVlOwotICBmb3JtLiR2YWxpZCA9IHRydWU7Ci0gIGZvcm0uJGludmFsaWQg
PSBmYWxzZTsKLQotICBwYXJlbnRGb3JtLiRhZGRDb250cm9sKGZvcm0pOwotCi0gIC8vIFNldHVw
IGluaXRpYWwgc3RhdGUgb2YgdGhlIGNvbnRyb2wKLSAgZWxlbWVudC5hZGRDbGFzcyhQUklTVElO
RV9DTEFTUyk7Ci0gIHRvZ2dsZVZhbGlkQ3NzKHRydWUpOwotCi0gIC8vIGNvbnZlbmllbmNlIG1l
dGhvZCBmb3IgZWFzeSB0b2dnbGluZyBvZiBjbGFzc2VzCi0gIGZ1bmN0aW9uIHRvZ2dsZVZhbGlk
Q3NzKGlzVmFsaWQsIHZhbGlkYXRpb25FcnJvcktleSkgewotICAgIHZhbGlkYXRpb25FcnJvcktl
eSA9IHZhbGlkYXRpb25FcnJvcktleSA/ICctJyArIHNuYWtlX2Nhc2UodmFsaWRhdGlvbkVycm9y
S2V5LCAnLScpIDogJyc7Ci0gICAgZWxlbWVudC4KLSAgICAgIHJlbW92ZUNsYXNzKChpc1ZhbGlk
ID8gSU5WQUxJRF9DTEFTUyA6IFZBTElEX0NMQVNTKSArIHZhbGlkYXRpb25FcnJvcktleSkuCi0g
ICAgICBhZGRDbGFzcygoaXNWYWxpZCA/IFZBTElEX0NMQVNTIDogSU5WQUxJRF9DTEFTUykgKyB2
YWxpZGF0aW9uRXJyb3JLZXkpOwotICB9Ci0KLSAgZm9ybS4kYWRkQ29udHJvbCA9IGZ1bmN0aW9u
KGNvbnRyb2wpIHsKLSAgICBpZiAoY29udHJvbC4kbmFtZSAmJiAhZm9ybS5oYXNPd25Qcm9wZXJ0
eShjb250cm9sLiRuYW1lKSkgewotICAgICAgZm9ybVtjb250cm9sLiRuYW1lXSA9IGNvbnRyb2w7
Ci0gICAgfQotICB9OwotCi0gIGZvcm0uJHJlbW92ZUNvbnRyb2wgPSBmdW5jdGlvbihjb250cm9s
KSB7Ci0gICAgaWYgKGNvbnRyb2wuJG5hbWUgJiYgZm9ybVtjb250cm9sLiRuYW1lXSA9PT0gY29u
dHJvbCkgewotICAgICAgZGVsZXRlIGZvcm1bY29udHJvbC4kbmFtZV07Ci0gICAgfQotICAgIGZv
ckVhY2goZXJyb3JzLCBmdW5jdGlvbihxdWV1ZSwgdmFsaWRhdGlvblRva2VuKSB7Ci0gICAgICBm
b3JtLiRzZXRWYWxpZGl0eSh2YWxpZGF0aW9uVG9rZW4sIHRydWUsIGNvbnRyb2wpOwotICAgIH0p
OwotICB9OwotCi0gIGZvcm0uJHNldFZhbGlkaXR5ID0gZnVuY3Rpb24odmFsaWRhdGlvblRva2Vu
LCBpc1ZhbGlkLCBjb250cm9sKSB7Ci0gICAgdmFyIHF1ZXVlID0gZXJyb3JzW3ZhbGlkYXRpb25U
b2tlbl07Ci0KLSAgICBpZiAoaXNWYWxpZCkgewotICAgICAgaWYgKHF1ZXVlKSB7Ci0gICAgICAg
IGFycmF5UmVtb3ZlKHF1ZXVlLCBjb250cm9sKTsKLSAgICAgICAgaWYgKCFxdWV1ZS5sZW5ndGgp
IHsKLSAgICAgICAgICBpbnZhbGlkQ291bnQtLTsKLSAgICAgICAgICBpZiAoIWludmFsaWRDb3Vu
dCkgewotICAgICAgICAgICAgdG9nZ2xlVmFsaWRDc3MoaXNWYWxpZCk7Ci0gICAgICAgICAgICBm
b3JtLiR2YWxpZCA9IHRydWU7Ci0gICAgICAgICAgICBmb3JtLiRpbnZhbGlkID0gZmFsc2U7Ci0g
ICAgICAgICAgfQotICAgICAgICAgIGVycm9yc1t2YWxpZGF0aW9uVG9rZW5dID0gZmFsc2U7Ci0g
ICAgICAgICAgdG9nZ2xlVmFsaWRDc3ModHJ1ZSwgdmFsaWRhdGlvblRva2VuKTsKLSAgICAgICAg
ICBwYXJlbnRGb3JtLiRzZXRWYWxpZGl0eSh2YWxpZGF0aW9uVG9rZW4sIHRydWUsIGZvcm0pOwot
ICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICB9IGVsc2UgewotICAgICAgaWYgKCFpbnZhbGlkQ291
bnQpIHsKLSAgICAgICAgdG9nZ2xlVmFsaWRDc3MoaXNWYWxpZCk7Ci0gICAgICB9Ci0gICAgICBp
ZiAocXVldWUpIHsKLSAgICAgICAgaWYgKGluY2x1ZGVzKHF1ZXVlLCBjb250cm9sKSkgcmV0dXJu
OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZXJyb3JzW3ZhbGlkYXRpb25Ub2tlbl0gPSBxdWV1
ZSA9IFtdOwotICAgICAgICBpbnZhbGlkQ291bnQrKzsKLSAgICAgICAgdG9nZ2xlVmFsaWRDc3Mo
ZmFsc2UsIHZhbGlkYXRpb25Ub2tlbik7Ci0gICAgICAgIHBhcmVudEZvcm0uJHNldFZhbGlkaXR5
KHZhbGlkYXRpb25Ub2tlbiwgZmFsc2UsIGZvcm0pOwotICAgICAgfQotICAgICAgcXVldWUucHVz
aChjb250cm9sKTsKLQotICAgICAgZm9ybS4kdmFsaWQgPSBmYWxzZTsKLSAgICAgIGZvcm0uJGlu
dmFsaWQgPSB0cnVlOwotICAgIH0KLSAgfTsKLQotICBmb3JtLiRzZXREaXJ0eSA9IGZ1bmN0aW9u
KCkgewotICAgIGVsZW1lbnQucmVtb3ZlQ2xhc3MoUFJJU1RJTkVfQ0xBU1MpLmFkZENsYXNzKERJ
UlRZX0NMQVNTKTsKLSAgICBmb3JtLiRkaXJ0eSA9IHRydWU7Ci0gICAgZm9ybS4kcHJpc3RpbmUg
PSBmYWxzZTsKLSAgICBwYXJlbnRGb3JtLiRzZXREaXJ0eSgpOwotICB9OwotCi19Ci0KLQotLyoq
Ci0gKiBAbmdkb2MgZGlyZWN0aXZlCi0gKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdGb3JtCi0gKiBA
cmVzdHJpY3QgRUFDCi0gKgotICogQGRlc2NyaXB0aW9uCi0gKiBOZXN0YWJsZSBhbGlhcyBvZiB7
QGxpbmsgbmcuZGlyZWN0aXZlOmZvcm0gYGZvcm1gfSBkaXJlY3RpdmUuIEhUTUwKLSAqIGRvZXMg
bm90IGFsbG93IG5lc3Rpbmcgb2YgZm9ybSBlbGVtZW50cy4gSXQgaXMgdXNlZnVsIHRvIG5lc3Qg
Zm9ybXMsIGZvciBleGFtcGxlIGlmIHRoZSB2YWxpZGl0eSBvZiBhCi0gKiBzdWItZ3JvdXAgb2Yg
Y29udHJvbHMgbmVlZHMgdG8gYmUgZGV0ZXJtaW5lZC4KLSAqCi0gKiBAcGFyYW0ge3N0cmluZz19
IG5hbWV8bmdGb3JtIE5hbWUgb2YgdGhlIGZvcm0uIElmIHNwZWNpZmllZCwgdGhlIGZvcm0gY29u
dHJvbGxlciB3aWxsIGJlIHB1Ymxpc2hlZCBpbnRvCi0gKiAgICAgICAgICAgICAgICAgICAgICAg
cmVsYXRlZCBzY29wZSwgdW5kZXIgdGhpcyBuYW1lLgotICoKLSAqLwotCi0gLyoqCi0gKiBAbmdk
b2MgZGlyZWN0aXZlCi0gKiBAbmFtZSBuZy5kaXJlY3RpdmU6Zm9ybQotICogQHJlc3RyaWN0IEUK
LSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIERpcmVjdGl2ZSB0aGF0IGluc3RhbnRpYXRlcwotICog
e0BsaW5rIG5nLmRpcmVjdGl2ZTpmb3JtLkZvcm1Db250cm9sbGVyIEZvcm1Db250cm9sbGVyfS4K
LSAqCi0gKiBJZiBgbmFtZWAgYXR0cmlidXRlIGlzIHNwZWNpZmllZCwgdGhlIGZvcm0gY29udHJv
bGxlciBpcyBwdWJsaXNoZWQgb250byB0aGUgY3VycmVudCBzY29wZSB1bmRlcgotICogdGhpcyBu
YW1lLgotICoKLSAqICMgQWxpYXM6IHtAbGluayBuZy5kaXJlY3RpdmU6bmdGb3JtIGBuZ0Zvcm1g
fQotICoKLSAqIEluIGFuZ3VsYXIgZm9ybXMgY2FuIGJlIG5lc3RlZC4gVGhpcyBtZWFucyB0aGF0
IHRoZSBvdXRlciBmb3JtIGlzIHZhbGlkIHdoZW4gYWxsIG9mIHRoZSBjaGlsZAotICogZm9ybXMg
YXJlIHZhbGlkIGFzIHdlbGwuIEhvd2V2ZXIgYnJvd3NlcnMgZG8gbm90IGFsbG93IG5lc3Rpbmcg
b2YgYDxmb3JtPmAgZWxlbWVudHMsIGZvciB0aGlzCi0gKiByZWFzb24gYW5ndWxhciBwcm92aWRl
cyB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nRm9ybSBgbmdGb3JtYH0gYWxpYXMKLSAqIHdoaWNoIGJl
aGF2ZXMgaWRlbnRpY2FsIHRvIGA8Zm9ybT5gIGJ1dCBhbGxvd3MgZm9ybSBuZXN0aW5nLgotICoK
LSAqCi0gKiAjIENTUyBjbGFzc2VzCi0gKiAgLSBgbmctdmFsaWRgIElzIHNldCBpZiB0aGUgZm9y
bSBpcyB2YWxpZC4KLSAqICAtIGBuZy1pbnZhbGlkYCBJcyBzZXQgaWYgdGhlIGZvcm0gaXMgaW52
YWxpZC4KLSAqICAtIGBuZy1wcmlzdGluZWAgSXMgc2V0IGlmIHRoZSBmb3JtIGlzIHByaXN0aW5l
LgotICogIC0gYG5nLWRpcnR5YCBJcyBzZXQgaWYgdGhlIGZvcm0gaXMgZGlydHkuCi0gKgotICoK
LSAqICMgU3VibWl0dGluZyBhIGZvcm0gYW5kIHByZXZlbnRpbmcgZGVmYXVsdCBhY3Rpb24KLSAq
Ci0gKiBTaW5jZSB0aGUgcm9sZSBvZiBmb3JtcyBpbiBjbGllbnQtc2lkZSBBbmd1bGFyIGFwcGxp
Y2F0aW9ucyBpcyBkaWZmZXJlbnQgdGhhbiBpbiBjbGFzc2ljYWwKLSAqIHJvdW5kdHJpcCBhcHBz
LCBpdCBpcyBkZXNpcmFibGUgZm9yIHRoZSBicm93c2VyIG5vdCB0byB0cmFuc2xhdGUgdGhlIGZv
cm0gc3VibWlzc2lvbiBpbnRvIGEgZnVsbAotICogcGFnZSByZWxvYWQgdGhhdCBzZW5kcyB0aGUg
ZGF0YSB0byB0aGUgc2VydmVyLiBJbnN0ZWFkIHNvbWUgamF2YXNjcmlwdCBsb2dpYyBzaG91bGQg
YmUgdHJpZ2dlcmVkCi0gKiB0byBoYW5kbGUgdGhlIGZvcm0gc3VibWlzc2lvbiBpbiBhcHBsaWNh
dGlvbiBzcGVjaWZpYyB3YXkuCi0gKgotICogRm9yIHRoaXMgcmVhc29uLCBBbmd1bGFyIHByZXZl
bnRzIHRoZSBkZWZhdWx0IGFjdGlvbiAoZm9ybSBzdWJtaXNzaW9uIHRvIHRoZSBzZXJ2ZXIpIHVu
bGVzcyB0aGUKLSAqIGA8Zm9ybT5gIGVsZW1lbnQgaGFzIGFuIGBhY3Rpb25gIGF0dHJpYnV0ZSBz
cGVjaWZpZWQuCi0gKgotICogWW91IGNhbiB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgdHdvIHdh
eXMgdG8gc3BlY2lmeSB3aGF0IGphdmFzY3JpcHQgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgd2hl
bgotICogYSBmb3JtIGlzIHN1Ym1pdHRlZDoKLSAqCi0gKiAtIHtAbGluayBuZy5kaXJlY3RpdmU6
bmdTdWJtaXQgbmdTdWJtaXR9IGRpcmVjdGl2ZSBvbiB0aGUgZm9ybSBlbGVtZW50Ci0gKiAtIHtA
bGluayBuZy5kaXJlY3RpdmU6bmdDbGljayBuZ0NsaWNrfSBkaXJlY3RpdmUgb24gdGhlIGZpcnN0
Ci0gICogIGJ1dHRvbiBvciBpbnB1dCBmaWVsZCBvZiB0eXBlIHN1Ym1pdCAoaW5wdXRbdHlwZT1z
dWJtaXRdKQotICoKLSAqIFRvIHByZXZlbnQgZG91YmxlIGV4ZWN1dGlvbiBvZiB0aGUgaGFuZGxl
ciwgdXNlIG9ubHkgb25lIG9mIG5nU3VibWl0IG9yIG5nQ2xpY2sgZGlyZWN0aXZlcy4gVGhpcwot
ICogaXMgYmVjYXVzZSBvZiB0aGUgZm9sbG93aW5nIGZvcm0gc3VibWlzc2lvbiBydWxlcyBjb21p
bmcgZnJvbSB0aGUgaHRtbCBzcGVjOgotICoKLSAqIC0gSWYgYSBmb3JtIGhhcyBvbmx5IG9uZSBp
bnB1dCBmaWVsZCB0aGVuIGhpdHRpbmcgZW50ZXIgaW4gdGhpcyBmaWVsZCB0cmlnZ2VycyBmb3Jt
IHN1Ym1pdAotICogKGBuZ1N1Ym1pdGApCi0gKiAtIGlmIGEgZm9ybSBoYXMgaGFzIDIrIGlucHV0
IGZpZWxkcyBhbmQgbm8gYnV0dG9ucyBvciBpbnB1dFt0eXBlPXN1Ym1pdF0gdGhlbiBoaXR0aW5n
IGVudGVyCi0gKiBkb2Vzbid0IHRyaWdnZXIgc3VibWl0Ci0gKiAtIGlmIGEgZm9ybSBoYXMgb25l
IG9yIG1vcmUgaW5wdXQgZmllbGRzIGFuZCBvbmUgb3IgbW9yZSBidXR0b25zIG9yIGlucHV0W3R5
cGU9c3VibWl0XSB0aGVuCi0gKiBoaXR0aW5nIGVudGVyIGluIGFueSBvZiB0aGUgaW5wdXQgZmll
bGRzIHdpbGwgdHJpZ2dlciB0aGUgY2xpY2sgaGFuZGxlciBvbiB0aGUgKmZpcnN0KiBidXR0b24g
b3IKLSAqIGlucHV0W3R5cGU9c3VibWl0XSAoYG5nQ2xpY2tgKSAqYW5kKiBhIHN1Ym1pdCBoYW5k
bGVyIG9uIHRoZSBlbmNsb3NpbmcgZm9ybSAoYG5nU3VibWl0YCkKLSAqCi0gKiBAcGFyYW0ge3N0
cmluZz19IG5hbWUgTmFtZSBvZiB0aGUgZm9ybS4gSWYgc3BlY2lmaWVkLCB0aGUgZm9ybSBjb250
cm9sbGVyIHdpbGwgYmUgcHVibGlzaGVkIGludG8KLSAqICAgICAgICAgICAgICAgICAgICAgICBy
ZWxhdGVkIHNjb3BlLCB1bmRlciB0aGlzIG5hbWUuCi0gKgotICogQGV4YW1wbGUKLSAgICA8ZG9j
OmV4YW1wbGU+Ci0gICAgICA8ZG9jOnNvdXJjZT4KLSAgICAgICA8c2NyaXB0PgotICAgICAgICAg
ZnVuY3Rpb24gQ3RybCgkc2NvcGUpIHsKLSAgICAgICAgICAgJHNjb3BlLnVzZXJUeXBlID0gJ2d1
ZXN0JzsKLSAgICAgICAgIH0KLSAgICAgICA8L3NjcmlwdD4KLSAgICAgICA8Zm9ybSBuYW1lPSJt
eUZvcm0iIG5nLWNvbnRyb2xsZXI9IkN0cmwiPgotICAgICAgICAgdXNlclR5cGU6IDxpbnB1dCBu
YW1lPSJpbnB1dCIgbmctbW9kZWw9InVzZXJUeXBlIiByZXF1aXJlZD4KLSAgICAgICAgIDxzcGFu
IGNsYXNzPSJlcnJvciIgbmctc2hvdz0ibXlGb3JtLmlucHV0LiRlcnJvci5yZXF1aXJlZCI+UmVx
dWlyZWQhPC9zcGFuPjxicj4KLSAgICAgICAgIDx0dD51c2VyVHlwZSA9IHt7dXNlclR5cGV9fTwv
dHQ+PGJyPgotICAgICAgICAgPHR0Pm15Rm9ybS5pbnB1dC4kdmFsaWQgPSB7e215Rm9ybS5pbnB1
dC4kdmFsaWR9fTwvdHQ+PGJyPgotICAgICAgICAgPHR0Pm15Rm9ybS5pbnB1dC4kZXJyb3IgPSB7
e215Rm9ybS5pbnB1dC4kZXJyb3J9fTwvdHQ+PGJyPgotICAgICAgICAgPHR0Pm15Rm9ybS4kdmFs
aWQgPSB7e215Rm9ybS4kdmFsaWR9fTwvdHQ+PGJyPgotICAgICAgICAgPHR0Pm15Rm9ybS4kZXJy
b3IucmVxdWlyZWQgPSB7eyEhbXlGb3JtLiRlcnJvci5yZXF1aXJlZH19PC90dD48YnI+Ci0gICAg
ICAgIDwvZm9ybT4KLSAgICAgIDwvZG9jOnNvdXJjZT4KLSAgICAgIDxkb2M6c2NlbmFyaW8+Ci0g
ICAgICAgIGl0KCdzaG91bGQgaW5pdGlhbGl6ZSB0byBtb2RlbCcsIGZ1bmN0aW9uKCkgewotICAg
ICAgICAgZXhwZWN0KGJpbmRpbmcoJ3VzZXJUeXBlJykpLnRvRXF1YWwoJ2d1ZXN0Jyk7Ci0gICAg
ICAgICBleHBlY3QoYmluZGluZygnbXlGb3JtLmlucHV0LiR2YWxpZCcpKS50b0VxdWFsKCd0cnVl
Jyk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBlbXB0
eScsIGZ1bmN0aW9uKCkgewotICAgICAgICAgaW5wdXQoJ3VzZXJUeXBlJykuZW50ZXIoJycpOwot
ICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ3VzZXJUeXBlJykpLnRvRXF1YWwoJycpOwotICAgICAg
ICAgZXhwZWN0KGJpbmRpbmcoJ215Rm9ybS5pbnB1dC4kdmFsaWQnKSkudG9FcXVhbCgnZmFsc2Un
KTsKLSAgICAgICAgfSk7Ci0gICAgICA8L2RvYzpzY2VuYXJpbz4KLSAgICA8L2RvYzpleGFtcGxl
PgotICovCi12YXIgZm9ybURpcmVjdGl2ZUZhY3RvcnkgPSBmdW5jdGlvbihpc05nRm9ybSkgewot
ICByZXR1cm4gWyckdGltZW91dCcsIGZ1bmN0aW9uKCR0aW1lb3V0KSB7Ci0gICAgdmFyIGZvcm1E
aXJlY3RpdmUgPSB7Ci0gICAgICBuYW1lOiAnZm9ybScsCi0gICAgICByZXN0cmljdDogJ0UnLAot
ICAgICAgY29udHJvbGxlcjogRm9ybUNvbnRyb2xsZXIsCi0gICAgICBjb21waWxlOiBmdW5jdGlv
bigpIHsKLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICBwcmU6IGZ1bmN0aW9uKHNjb3BlLCBm
b3JtRWxlbWVudCwgYXR0ciwgY29udHJvbGxlcikgewotICAgICAgICAgICAgaWYgKCFhdHRyLmFj
dGlvbikgewotICAgICAgICAgICAgICAvLyB3ZSBjYW4ndCB1c2UganEgZXZlbnRzIGJlY2F1c2Ug
aWYgYSBmb3JtIGlzIGRlc3Ryb3llZCBkdXJpbmcgc3VibWlzc2lvbiB0aGUgZGVmYXVsdAotICAg
ICAgICAgICAgICAvLyBhY3Rpb24gaXMgbm90IHByZXZlbnRlZC4gc2VlICMxMjM4Ci0gICAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICAgIC8vIElFIDkgaXMgbm90IGFmZmVjdGVkIGJlY2F1c2Ug
aXQgZG9lc24ndCBmaXJlIGEgc3VibWl0IGV2ZW50IGFuZCB0cnkgdG8gZG8gYSBmdWxsCi0gICAg
ICAgICAgICAgIC8vIHBhZ2UgcmVsb2FkIGlmIHRoZSBmb3JtIHdhcyBkZXN0cm95ZWQgYnkgc3Vi
bWlzc2lvbiBvZiB0aGUgZm9ybSB2aWEgYSBjbGljayBoYW5kbGVyCi0gICAgICAgICAgICAgIC8v
IG9uIGEgYnV0dG9uIGluIHRoZSBmb3JtLiBMb29rcyBsaWtlIGFuIElFOSBzcGVjaWZpYyBidWcu
Ci0gICAgICAgICAgICAgIHZhciBwcmV2ZW50RGVmYXVsdExpc3RlbmVyID0gZnVuY3Rpb24oZXZl
bnQpIHsKLSAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdAotICAgICAgICAgICAg
ICAgICAgPyBldmVudC5wcmV2ZW50RGVmYXVsdCgpCi0gICAgICAgICAgICAgICAgICA6IGV2ZW50
LnJldHVyblZhbHVlID0gZmFsc2U7IC8vIElFCi0gICAgICAgICAgICAgIH07Ci0KLSAgICAgICAg
ICAgICAgYWRkRXZlbnRMaXN0ZW5lckZuKGZvcm1FbGVtZW50WzBdLCAnc3VibWl0JywgcHJldmVu
dERlZmF1bHRMaXN0ZW5lcik7Ci0KLSAgICAgICAgICAgICAgLy8gdW5yZWdpc3RlciB0aGUgcHJl
dmVudERlZmF1bHQgbGlzdGVuZXIgc28gdGhhdCB3ZSBkb24ndCBub3QgbGVhayBtZW1vcnkgYnV0
IGluIGEKLSAgICAgICAgICAgICAgLy8gd2F5IHRoYXQgd2lsbCBhY2hpZXZlIHRoZSBwcmV2ZW50
aW9uIG9mIHRoZSBkZWZhdWx0IGFjdGlvbi4KLSAgICAgICAgICAgICAgZm9ybUVsZW1lbnQuYmlu
ZCgnJGRlc3Ryb3knLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAkdGltZW91dChmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXJGbihmb3JtRWxl
bWVudFswXSwgJ3N1Ym1pdCcsIHByZXZlbnREZWZhdWx0TGlzdGVuZXIpOwotICAgICAgICAgICAg
ICAgIH0sIDAsIGZhbHNlKTsKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHZhciBwYXJlbnRGb3JtQ3RybCA9IGZvcm1FbGVtZW50LnBhcmVudCgpLmNvbnRy
b2xsZXIoJ2Zvcm0nKSwKLSAgICAgICAgICAgICAgICBhbGlhcyA9IGF0dHIubmFtZSB8fCBhdHRy
Lm5nRm9ybTsKLQotICAgICAgICAgICAgaWYgKGFsaWFzKSB7Ci0gICAgICAgICAgICAgIHNjb3Bl
W2FsaWFzXSA9IGNvbnRyb2xsZXI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocGFy
ZW50Rm9ybUN0cmwpIHsKLSAgICAgICAgICAgICAgZm9ybUVsZW1lbnQuYmluZCgnJGRlc3Ryb3kn
LCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBwYXJlbnRGb3JtQ3RybC4kcmVtb3ZlQ29u
dHJvbChjb250cm9sbGVyKTsKLSAgICAgICAgICAgICAgICBpZiAoYWxpYXMpIHsKLSAgICAgICAg
ICAgICAgICAgIHNjb3BlW2FsaWFzXSA9IHVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgZXh0ZW5kKGNvbnRyb2xsZXIsIG51bGxGb3JtQ3RybCk7IC8vc3RvcCBw
cm9wYWdhdGluZyBjaGlsZCBkZXN0cnVjdGlvbiBoYW5kbGVycyB1cHdhcmRzCi0gICAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICAgIH0K
LSAgICB9OwotCi0gICAgcmV0dXJuIGlzTmdGb3JtID8gZXh0ZW5kKGNvcHkoZm9ybURpcmVjdGl2
ZSksIHtyZXN0cmljdDogJ0VBQyd9KSA6IGZvcm1EaXJlY3RpdmU7Ci0gIH1dOwotfTsKLQotdmFy
IGZvcm1EaXJlY3RpdmUgPSBmb3JtRGlyZWN0aXZlRmFjdG9yeSgpOwotdmFyIG5nRm9ybURpcmVj
dGl2ZSA9IGZvcm1EaXJlY3RpdmVGYWN0b3J5KHRydWUpOwotCi12YXIgVVJMX1JFR0VYUCA9IC9e
KGZ0cHxodHRwfGh0dHBzKTpcL1wvKFx3Kzp7MCwxfVx3KkApPyhcUyspKDpbMC05XSspPyhcL3xc
LyhbXHcjITouPys9JiVAIVwtXC9dKSk/JC87Ci12YXIgRU1BSUxfUkVHRVhQID0gL15bQS1aYS16
MC05Ll8lKy1dK0BbQS1aYS16MC05Li1dK1wuW0EtWmEtel17Miw0fSQvOwotdmFyIE5VTUJFUl9S
RUdFWFAgPSAvXlxzKihcLXxcKyk/KFxkK3woXGQqKFwuXGQqKSkpXHMqJC87Ci0KLXZhciBpbnB1
dFR5cGUgPSB7Ci0KLSAgLyoqCi0gICAqIEBuZ2RvYyBpbnB1dFR5cGUKLSAgICogQG5hbWUgbmcu
ZGlyZWN0aXZlOmlucHV0LnRleHQKLSAgICoKLSAgICogQGRlc2NyaXB0aW9uCi0gICAqIFN0YW5k
YXJkIEhUTUwgdGV4dCBpbnB1dCB3aXRoIGFuZ3VsYXIgZGF0YSBiaW5kaW5nLgotICAgKgotICAg
KiBAcGFyYW0ge3N0cmluZ30gbmdNb2RlbCBBc3NpZ25hYmxlIGFuZ3VsYXIgZXhwcmVzc2lvbiB0
byBkYXRhLWJpbmQgdG8uCi0gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmFtZSBQcm9wZXJ0eSBuYW1l
IG9mIHRoZSBmb3JtIHVuZGVyIHdoaWNoIHRoZSBjb250cm9sIGlzIHB1Ymxpc2hlZC4KLSAgICog
QHBhcmFtIHtzdHJpbmc9fSByZXF1aXJlZCBBZGRzIGByZXF1aXJlZGAgdmFsaWRhdGlvbiBlcnJv
ciBrZXkgaWYgdGhlIHZhbHVlIGlzIG5vdCBlbnRlcmVkLgotICAgKiBAcGFyYW0ge3N0cmluZz19
IG5nUmVxdWlyZWQgQWRkcyBgcmVxdWlyZWRgIGF0dHJpYnV0ZSBhbmQgYHJlcXVpcmVkYCB2YWxp
ZGF0aW9uIGNvbnN0cmFpbnQgdG8KLSAgICogICAgdGhlIGVsZW1lbnQgd2hlbiB0aGUgbmdSZXF1
aXJlZCBleHByZXNzaW9uIGV2YWx1YXRlcyB0byB0cnVlLiBVc2UgYG5nUmVxdWlyZWRgIGluc3Rl
YWQgb2YKLSAgICogICAgYHJlcXVpcmVkYCB3aGVuIHlvdSB3YW50IHRvIGRhdGEtYmluZCB0byB0
aGUgYHJlcXVpcmVkYCBhdHRyaWJ1dGUuCi0gICAqIEBwYXJhbSB7bnVtYmVyPX0gbmdNaW5sZW5n
dGggU2V0cyBgbWlubGVuZ3RoYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMg
c2hvcnRlciB0aGFuCi0gICAqICAgIG1pbmxlbmd0aC4KLSAgICogQHBhcmFtIHtudW1iZXI9fSBu
Z01heGxlbmd0aCBTZXRzIGBtYXhsZW5ndGhgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2
YWx1ZSBpcyBsb25nZXIgdGhhbgotICAgKiAgICBtYXhsZW5ndGguCi0gICAqIEBwYXJhbSB7c3Ry
aW5nPX0gbmdQYXR0ZXJuIFNldHMgYHBhdHRlcm5gIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRo
ZSB2YWx1ZSBkb2VzIG5vdCBtYXRjaCB0aGUKLSAgICogICAgUmVnRXhwIHBhdHRlcm4gZXhwcmVz
c2lvbi4gRXhwZWN0ZWQgdmFsdWUgaXMgYC9yZWdleHAvYCBmb3IgaW5saW5lIHBhdHRlcm5zIG9y
IGByZWdleHBgIGZvcgotICAgKiAgICBwYXR0ZXJucyBkZWZpbmVkIGFzIHNjb3BlIGV4cHJlc3Np
b25zLgotICAgKiBAcGFyYW0ge3N0cmluZz19IG5nQ2hhbmdlIEFuZ3VsYXIgZXhwcmVzc2lvbiB0
byBiZSBleGVjdXRlZCB3aGVuIGlucHV0IGNoYW5nZXMgZHVlIHRvIHVzZXIKLSAgICogICAgaW50
ZXJhY3Rpb24gd2l0aCB0aGUgaW5wdXQgZWxlbWVudC4KLSAgICoKLSAgICogQGV4YW1wbGUKLSAg
ICAgIDxkb2M6ZXhhbXBsZT4KLSAgICAgICAgPGRvYzpzb3VyY2U+Ci0gICAgICAgICA8c2NyaXB0
PgotICAgICAgICAgICBmdW5jdGlvbiBDdHJsKCRzY29wZSkgewotICAgICAgICAgICAgICRzY29w
ZS50ZXh0ID0gJ2d1ZXN0JzsKLSAgICAgICAgICAgICAkc2NvcGUud29yZCA9IC9eXHcqJC87Ci0g
ICAgICAgICAgIH0KLSAgICAgICAgIDwvc2NyaXB0PgotICAgICAgICAgPGZvcm0gbmFtZT0ibXlG
b3JtIiBuZy1jb250cm9sbGVyPSJDdHJsIj4KLSAgICAgICAgICAgU2luZ2xlIHdvcmQ6IDxpbnB1
dCB0eXBlPSJ0ZXh0IiBuYW1lPSJpbnB1dCIgbmctbW9kZWw9InRleHQiCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmctcGF0dGVybj0id29yZCIgcmVxdWlyZWQ+Ci0gICAgICAgICAg
IDxzcGFuIGNsYXNzPSJlcnJvciIgbmctc2hvdz0ibXlGb3JtLmlucHV0LiRlcnJvci5yZXF1aXJl
ZCI+Ci0gICAgICAgICAgICAgUmVxdWlyZWQhPC9zcGFuPgotICAgICAgICAgICA8c3BhbiBjbGFz
cz0iZXJyb3IiIG5nLXNob3c9Im15Rm9ybS5pbnB1dC4kZXJyb3IucGF0dGVybiI+Ci0gICAgICAg
ICAgICAgU2luZ2xlIHdvcmQgb25seSE8L3NwYW4+Ci0KLSAgICAgICAgICAgPHR0PnRleHQgPSB7
e3RleHR9fTwvdHQ+PGJyLz4KLSAgICAgICAgICAgPHR0Pm15Rm9ybS5pbnB1dC4kdmFsaWQgPSB7
e215Rm9ybS5pbnB1dC4kdmFsaWR9fTwvdHQ+PGJyLz4KLSAgICAgICAgICAgPHR0Pm15Rm9ybS5p
bnB1dC4kZXJyb3IgPSB7e215Rm9ybS5pbnB1dC4kZXJyb3J9fTwvdHQ+PGJyLz4KLSAgICAgICAg
ICAgPHR0Pm15Rm9ybS4kdmFsaWQgPSB7e215Rm9ybS4kdmFsaWR9fTwvdHQ+PGJyLz4KLSAgICAg
ICAgICAgPHR0Pm15Rm9ybS4kZXJyb3IucmVxdWlyZWQgPSB7eyEhbXlGb3JtLiRlcnJvci5yZXF1
aXJlZH19PC90dD48YnIvPgotICAgICAgICAgIDwvZm9ybT4KLSAgICAgICAgPC9kb2M6c291cmNl
PgotICAgICAgICA8ZG9jOnNjZW5hcmlvPgotICAgICAgICAgIGl0KCdzaG91bGQgaW5pdGlhbGl6
ZSB0byBtb2RlbCcsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ3Rl
eHQnKSkudG9FcXVhbCgnZ3Vlc3QnKTsKLSAgICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdteUZv
cm0uaW5wdXQuJHZhbGlkJykpLnRvRXF1YWwoJ3RydWUnKTsKLSAgICAgICAgICB9KTsKLQotICAg
ICAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBlbXB0eScsIGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgaW5wdXQoJ3RleHQnKS5lbnRlcignJyk7Ci0gICAgICAgICAgICBleHBlY3QoYmlu
ZGluZygndGV4dCcpKS50b0VxdWFsKCcnKTsKLSAgICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdt
eUZvcm0uaW5wdXQuJHZhbGlkJykpLnRvRXF1YWwoJ2ZhbHNlJyk7Ci0gICAgICAgICAgfSk7Ci0K
LSAgICAgICAgICBpdCgnc2hvdWxkIGJlIGludmFsaWQgaWYgbXVsdGkgd29yZCcsIGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgaW5wdXQoJ3RleHQnKS5lbnRlcignaGVsbG8gd29ybGQnKTsKLSAg
ICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdteUZvcm0uaW5wdXQuJHZhbGlkJykpLnRvRXF1YWwo
J2ZhbHNlJyk7Ci0gICAgICAgICAgfSk7Ci0gICAgICAgIDwvZG9jOnNjZW5hcmlvPgotICAgICAg
PC9kb2M6ZXhhbXBsZT4KLSAgICovCi0gICd0ZXh0JzogdGV4dElucHV0VHlwZSwKLQotCi0gIC8q
KgotICAgKiBAbmdkb2MgaW5wdXRUeXBlCi0gICAqIEBuYW1lIG5nLmRpcmVjdGl2ZTppbnB1dC5u
dW1iZXIKLSAgICoKLSAgICogQGRlc2NyaXB0aW9uCi0gICAqIFRleHQgaW5wdXQgd2l0aCBudW1i
ZXIgdmFsaWRhdGlvbiBhbmQgdHJhbnNmb3JtYXRpb24uIFNldHMgdGhlIGBudW1iZXJgIHZhbGlk
YXRpb24KLSAgICogZXJyb3IgaWYgbm90IGEgdmFsaWQgbnVtYmVyLgotICAgKgotICAgKiBAcGFy
YW0ge3N0cmluZ30gbmdNb2RlbCBBc3NpZ25hYmxlIGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBkYXRh
LWJpbmQgdG8uCi0gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmFtZSBQcm9wZXJ0eSBuYW1lIG9mIHRo
ZSBmb3JtIHVuZGVyIHdoaWNoIHRoZSBjb250cm9sIGlzIHB1Ymxpc2hlZC4KLSAgICogQHBhcmFt
IHtzdHJpbmc9fSBtaW4gU2V0cyB0aGUgYG1pbmAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhl
IHZhbHVlIGVudGVyZWQgaXMgbGVzcyB0aGFuIGBtaW5gLgotICAgKiBAcGFyYW0ge3N0cmluZz19
IG1heCBTZXRzIHRoZSBgbWF4YCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgZW50
ZXJlZCBpcyBncmVhdGVyIHRoYW4gYG1heGAuCi0gICAqIEBwYXJhbSB7c3RyaW5nPX0gcmVxdWly
ZWQgU2V0cyBgcmVxdWlyZWRgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBu
b3QgZW50ZXJlZC4KLSAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ1JlcXVpcmVkIEFkZHMgYHJlcXVp
cmVkYCBhdHRyaWJ1dGUgYW5kIGByZXF1aXJlZGAgdmFsaWRhdGlvbiBjb25zdHJhaW50IHRvCi0g
ICAqICAgIHRoZSBlbGVtZW50IHdoZW4gdGhlIG5nUmVxdWlyZWQgZXhwcmVzc2lvbiBldmFsdWF0
ZXMgdG8gdHJ1ZS4gVXNlIGBuZ1JlcXVpcmVkYCBpbnN0ZWFkIG9mCi0gICAqICAgIGByZXF1aXJl
ZGAgd2hlbiB5b3Ugd2FudCB0byBkYXRhLWJpbmQgdG8gdGhlIGByZXF1aXJlZGAgYXR0cmlidXRl
LgotICAgKiBAcGFyYW0ge251bWJlcj19IG5nTWlubGVuZ3RoIFNldHMgYG1pbmxlbmd0aGAgdmFs
aWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIHNob3J0ZXIgdGhhbgotICAgKiAgICBt
aW5sZW5ndGguCi0gICAqIEBwYXJhbSB7bnVtYmVyPX0gbmdNYXhsZW5ndGggU2V0cyBgbWF4bGVu
Z3RoYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgbG9uZ2VyIHRoYW4KLSAg
ICogICAgbWF4bGVuZ3RoLgotICAgKiBAcGFyYW0ge3N0cmluZz19IG5nUGF0dGVybiBTZXRzIGBw
YXR0ZXJuYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgZG9lcyBub3QgbWF0Y2gg
dGhlCi0gICAqICAgIFJlZ0V4cCBwYXR0ZXJuIGV4cHJlc3Npb24uIEV4cGVjdGVkIHZhbHVlIGlz
IGAvcmVnZXhwL2AgZm9yIGlubGluZSBwYXR0ZXJucyBvciBgcmVnZXhwYCBmb3IKLSAgICogICAg
cGF0dGVybnMgZGVmaW5lZCBhcyBzY29wZSBleHByZXNzaW9ucy4KLSAgICogQHBhcmFtIHtzdHJp
bmc9fSBuZ0NoYW5nZSBBbmd1bGFyIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWQgd2hlbiBpbnB1
dCBjaGFuZ2VzIGR1ZSB0byB1c2VyCi0gICAqICAgIGludGVyYWN0aW9uIHdpdGggdGhlIGlucHV0
IGVsZW1lbnQuCi0gICAqCi0gICAqIEBleGFtcGxlCi0gICAgICA8ZG9jOmV4YW1wbGU+Ci0gICAg
ICAgIDxkb2M6c291cmNlPgotICAgICAgICAgPHNjcmlwdD4KLSAgICAgICAgICAgZnVuY3Rpb24g
Q3RybCgkc2NvcGUpIHsKLSAgICAgICAgICAgICAkc2NvcGUudmFsdWUgPSAxMjsKLSAgICAgICAg
ICAgfQotICAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgICA8Zm9ybSBuYW1lPSJteUZvcm0iIG5n
LWNvbnRyb2xsZXI9IkN0cmwiPgotICAgICAgICAgICBOdW1iZXI6IDxpbnB1dCB0eXBlPSJudW1i
ZXIiIG5hbWU9ImlucHV0IiBuZy1tb2RlbD0idmFsdWUiCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIG1pbj0iMCIgbWF4PSI5OSIgcmVxdWlyZWQ+Ci0gICAgICAgICAgIDxzcGFuIGNsYXNzPSJl
cnJvciIgbmctc2hvdz0ibXlGb3JtLmxpc3QuJGVycm9yLnJlcXVpcmVkIj4KLSAgICAgICAgICAg
ICBSZXF1aXJlZCE8L3NwYW4+Ci0gICAgICAgICAgIDxzcGFuIGNsYXNzPSJlcnJvciIgbmctc2hv
dz0ibXlGb3JtLmxpc3QuJGVycm9yLm51bWJlciI+Ci0gICAgICAgICAgICAgTm90IHZhbGlkIG51
bWJlciE8L3NwYW4+Ci0gICAgICAgICAgIDx0dD52YWx1ZSA9IHt7dmFsdWV9fTwvdHQ+PGJyLz4K
LSAgICAgICAgICAgPHR0Pm15Rm9ybS5pbnB1dC4kdmFsaWQgPSB7e215Rm9ybS5pbnB1dC4kdmFs
aWR9fTwvdHQ+PGJyLz4KLSAgICAgICAgICAgPHR0Pm15Rm9ybS5pbnB1dC4kZXJyb3IgPSB7e215
Rm9ybS5pbnB1dC4kZXJyb3J9fTwvdHQ+PGJyLz4KLSAgICAgICAgICAgPHR0Pm15Rm9ybS4kdmFs
aWQgPSB7e215Rm9ybS4kdmFsaWR9fTwvdHQ+PGJyLz4KLSAgICAgICAgICAgPHR0Pm15Rm9ybS4k
ZXJyb3IucmVxdWlyZWQgPSB7eyEhbXlGb3JtLiRlcnJvci5yZXF1aXJlZH19PC90dD48YnIvPgot
ICAgICAgICAgIDwvZm9ybT4KLSAgICAgICAgPC9kb2M6c291cmNlPgotICAgICAgICA8ZG9jOnNj
ZW5hcmlvPgotICAgICAgICAgIGl0KCdzaG91bGQgaW5pdGlhbGl6ZSB0byBtb2RlbCcsIGZ1bmN0
aW9uKCkgewotICAgICAgICAgICBleHBlY3QoYmluZGluZygndmFsdWUnKSkudG9FcXVhbCgnMTIn
KTsKLSAgICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ215Rm9ybS5pbnB1dC4kdmFsaWQnKSkudG9F
cXVhbCgndHJ1ZScpOwotICAgICAgICAgIH0pOwotCi0gICAgICAgICAgaXQoJ3Nob3VsZCBiZSBp
bnZhbGlkIGlmIGVtcHR5JywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgIGlucHV0KCd2YWx1ZScp
LmVudGVyKCcnKTsKLSAgICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ3ZhbHVlJykpLnRvRXF1YWwo
JycpOwotICAgICAgICAgICBleHBlY3QoYmluZGluZygnbXlGb3JtLmlucHV0LiR2YWxpZCcpKS50
b0VxdWFsKCdmYWxzZScpOwotICAgICAgICAgIH0pOwotCi0gICAgICAgICAgaXQoJ3Nob3VsZCBi
ZSBpbnZhbGlkIGlmIG92ZXIgbWF4JywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgIGlucHV0KCd2
YWx1ZScpLmVudGVyKCcxMjMnKTsKLSAgICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ3ZhbHVlJykp
LnRvRXF1YWwoJycpOwotICAgICAgICAgICBleHBlY3QoYmluZGluZygnbXlGb3JtLmlucHV0LiR2
YWxpZCcpKS50b0VxdWFsKCdmYWxzZScpOwotICAgICAgICAgIH0pOwotICAgICAgICA8L2RvYzpz
Y2VuYXJpbz4KLSAgICAgIDwvZG9jOmV4YW1wbGU+Ci0gICAqLwotICAnbnVtYmVyJzogbnVtYmVy
SW5wdXRUeXBlLAotCi0KLSAgLyoqCi0gICAqIEBuZ2RvYyBpbnB1dFR5cGUKLSAgICogQG5hbWUg
bmcuZGlyZWN0aXZlOmlucHV0LnVybAotICAgKgotICAgKiBAZGVzY3JpcHRpb24KLSAgICogVGV4
dCBpbnB1dCB3aXRoIFVSTCB2YWxpZGF0aW9uLiBTZXRzIHRoZSBgdXJsYCB2YWxpZGF0aW9uIGVy
cm9yIGtleSBpZiB0aGUgY29udGVudCBpcyBub3QgYQotICAgKiB2YWxpZCBVUkwuCi0gICAqCi0g
ICAqIEBwYXJhbSB7c3RyaW5nfSBuZ01vZGVsIEFzc2lnbmFibGUgYW5ndWxhciBleHByZXNzaW9u
IHRvIGRhdGEtYmluZCB0by4KLSAgICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lIFByb3BlcnR5IG5h
bWUgb2YgdGhlIGZvcm0gdW5kZXIgd2hpY2ggdGhlIGNvbnRyb2wgaXMgcHVibGlzaGVkLgotICAg
KiBAcGFyYW0ge3N0cmluZz19IHJlcXVpcmVkIFNldHMgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGVy
cm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgbm90IGVudGVyZWQuCi0gICAqIEBwYXJhbSB7c3RyaW5n
PX0gbmdSZXF1aXJlZCBBZGRzIGByZXF1aXJlZGAgYXR0cmlidXRlIGFuZCBgcmVxdWlyZWRgIHZh
bGlkYXRpb24gY29uc3RyYWludCB0bwotICAgKiAgICB0aGUgZWxlbWVudCB3aGVuIHRoZSBuZ1Jl
cXVpcmVkIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRydWUuIFVzZSBgbmdSZXF1aXJlZGAgaW5z
dGVhZCBvZgotICAgKiAgICBgcmVxdWlyZWRgIHdoZW4geW91IHdhbnQgdG8gZGF0YS1iaW5kIHRv
IHRoZSBgcmVxdWlyZWRgIGF0dHJpYnV0ZS4KLSAgICogQHBhcmFtIHtudW1iZXI9fSBuZ01pbmxl
bmd0aCBTZXRzIGBtaW5sZW5ndGhgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBp
cyBzaG9ydGVyIHRoYW4KLSAgICogICAgbWlubGVuZ3RoLgotICAgKiBAcGFyYW0ge251bWJlcj19
IG5nTWF4bGVuZ3RoIFNldHMgYG1heGxlbmd0aGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhl
IHZhbHVlIGlzIGxvbmdlciB0aGFuCi0gICAqICAgIG1heGxlbmd0aC4KLSAgICogQHBhcmFtIHtz
dHJpbmc9fSBuZ1BhdHRlcm4gU2V0cyBgcGF0dGVybmAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYg
dGhlIHZhbHVlIGRvZXMgbm90IG1hdGNoIHRoZQotICAgKiAgICBSZWdFeHAgcGF0dGVybiBleHBy
ZXNzaW9uLiBFeHBlY3RlZCB2YWx1ZSBpcyBgL3JlZ2V4cC9gIGZvciBpbmxpbmUgcGF0dGVybnMg
b3IgYHJlZ2V4cGAgZm9yCi0gICAqICAgIHBhdHRlcm5zIGRlZmluZWQgYXMgc2NvcGUgZXhwcmVz
c2lvbnMuCi0gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdDaGFuZ2UgQW5ndWxhciBleHByZXNzaW9u
IHRvIGJlIGV4ZWN1dGVkIHdoZW4gaW5wdXQgY2hhbmdlcyBkdWUgdG8gdXNlcgotICAgKiAgICBp
bnRlcmFjdGlvbiB3aXRoIHRoZSBpbnB1dCBlbGVtZW50LgotICAgKgotICAgKiBAZXhhbXBsZQot
ICAgICAgPGRvYzpleGFtcGxlPgotICAgICAgICA8ZG9jOnNvdXJjZT4KLSAgICAgICAgIDxzY3Jp
cHQ+Ci0gICAgICAgICAgIGZ1bmN0aW9uIEN0cmwoJHNjb3BlKSB7Ci0gICAgICAgICAgICAgJHNj
b3BlLnRleHQgPSAnaHR0cDovL2dvb2dsZS5jb20nOwotICAgICAgICAgICB9Ci0gICAgICAgICA8
L3NjcmlwdD4KLSAgICAgICAgIDxmb3JtIG5hbWU9Im15Rm9ybSIgbmctY29udHJvbGxlcj0iQ3Ry
bCI+Ci0gICAgICAgICAgIFVSTDogPGlucHV0IHR5cGU9InVybCIgbmFtZT0iaW5wdXQiIG5nLW1v
ZGVsPSJ0ZXh0IiByZXF1aXJlZD4KLSAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVycm9yIiBuZy1z
aG93PSJteUZvcm0uaW5wdXQuJGVycm9yLnJlcXVpcmVkIj4KLSAgICAgICAgICAgICBSZXF1aXJl
ZCE8L3NwYW4+Ci0gICAgICAgICAgIDxzcGFuIGNsYXNzPSJlcnJvciIgbmctc2hvdz0ibXlGb3Jt
LmlucHV0LiRlcnJvci51cmwiPgotICAgICAgICAgICAgIE5vdCB2YWxpZCB1cmwhPC9zcGFuPgot
ICAgICAgICAgICA8dHQ+dGV4dCA9IHt7dGV4dH19PC90dD48YnIvPgotICAgICAgICAgICA8dHQ+
bXlGb3JtLmlucHV0LiR2YWxpZCA9IHt7bXlGb3JtLmlucHV0LiR2YWxpZH19PC90dD48YnIvPgot
ICAgICAgICAgICA8dHQ+bXlGb3JtLmlucHV0LiRlcnJvciA9IHt7bXlGb3JtLmlucHV0LiRlcnJv
cn19PC90dD48YnIvPgotICAgICAgICAgICA8dHQ+bXlGb3JtLiR2YWxpZCA9IHt7bXlGb3JtLiR2
YWxpZH19PC90dD48YnIvPgotICAgICAgICAgICA8dHQ+bXlGb3JtLiRlcnJvci5yZXF1aXJlZCA9
IHt7ISFteUZvcm0uJGVycm9yLnJlcXVpcmVkfX08L3R0Pjxici8+Ci0gICAgICAgICAgIDx0dD5t
eUZvcm0uJGVycm9yLnVybCA9IHt7ISFteUZvcm0uJGVycm9yLnVybH19PC90dD48YnIvPgotICAg
ICAgICAgIDwvZm9ybT4KLSAgICAgICAgPC9kb2M6c291cmNlPgotICAgICAgICA8ZG9jOnNjZW5h
cmlvPgotICAgICAgICAgIGl0KCdzaG91bGQgaW5pdGlhbGl6ZSB0byBtb2RlbCcsIGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ3RleHQnKSkudG9FcXVhbCgnaHR0cDov
L2dvb2dsZS5jb20nKTsKLSAgICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdteUZvcm0uaW5wdXQu
JHZhbGlkJykpLnRvRXF1YWwoJ3RydWUnKTsKLSAgICAgICAgICB9KTsKLQotICAgICAgICAgIGl0
KCdzaG91bGQgYmUgaW52YWxpZCBpZiBlbXB0eScsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
aW5wdXQoJ3RleHQnKS5lbnRlcignJyk7Ci0gICAgICAgICAgICBleHBlY3QoYmluZGluZygndGV4
dCcpKS50b0VxdWFsKCcnKTsKLSAgICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdteUZvcm0uaW5w
dXQuJHZhbGlkJykpLnRvRXF1YWwoJ2ZhbHNlJyk7Ci0gICAgICAgICAgfSk7Ci0KLSAgICAgICAg
ICBpdCgnc2hvdWxkIGJlIGludmFsaWQgaWYgbm90IHVybCcsIGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgaW5wdXQoJ3RleHQnKS5lbnRlcigneHh4Jyk7Ci0gICAgICAgICAgICBleHBlY3QoYmlu
ZGluZygnbXlGb3JtLmlucHV0LiR2YWxpZCcpKS50b0VxdWFsKCdmYWxzZScpOwotICAgICAgICAg
IH0pOwotICAgICAgICA8L2RvYzpzY2VuYXJpbz4KLSAgICAgIDwvZG9jOmV4YW1wbGU+Ci0gICAq
LwotICAndXJsJzogdXJsSW5wdXRUeXBlLAotCi0KLSAgLyoqCi0gICAqIEBuZ2RvYyBpbnB1dFR5
cGUKLSAgICogQG5hbWUgbmcuZGlyZWN0aXZlOmlucHV0LmVtYWlsCi0gICAqCi0gICAqIEBkZXNj
cmlwdGlvbgotICAgKiBUZXh0IGlucHV0IHdpdGggZW1haWwgdmFsaWRhdGlvbi4gU2V0cyB0aGUg
YGVtYWlsYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiBub3QgYSB2YWxpZCBlbWFpbAotICAgKiBh
ZGRyZXNzLgotICAgKgotICAgKiBAcGFyYW0ge3N0cmluZ30gbmdNb2RlbCBBc3NpZ25hYmxlIGFu
Z3VsYXIgZXhwcmVzc2lvbiB0byBkYXRhLWJpbmQgdG8uCi0gICAqIEBwYXJhbSB7c3RyaW5nPX0g
bmFtZSBQcm9wZXJ0eSBuYW1lIG9mIHRoZSBmb3JtIHVuZGVyIHdoaWNoIHRoZSBjb250cm9sIGlz
IHB1Ymxpc2hlZC4KLSAgICogQHBhcmFtIHtzdHJpbmc9fSByZXF1aXJlZCBTZXRzIGByZXF1aXJl
ZGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIG5vdCBlbnRlcmVkLgotICAg
KiBAcGFyYW0ge3N0cmluZz19IG5nUmVxdWlyZWQgQWRkcyBgcmVxdWlyZWRgIGF0dHJpYnV0ZSBh
bmQgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGNvbnN0cmFpbnQgdG8KLSAgICogICAgdGhlIGVsZW1l
bnQgd2hlbiB0aGUgbmdSZXF1aXJlZCBleHByZXNzaW9uIGV2YWx1YXRlcyB0byB0cnVlLiBVc2Ug
YG5nUmVxdWlyZWRgIGluc3RlYWQgb2YKLSAgICogICAgYHJlcXVpcmVkYCB3aGVuIHlvdSB3YW50
IHRvIGRhdGEtYmluZCB0byB0aGUgYHJlcXVpcmVkYCBhdHRyaWJ1dGUuCi0gICAqIEBwYXJhbSB7
bnVtYmVyPX0gbmdNaW5sZW5ndGggU2V0cyBgbWlubGVuZ3RoYCB2YWxpZGF0aW9uIGVycm9yIGtl
eSBpZiB0aGUgdmFsdWUgaXMgc2hvcnRlciB0aGFuCi0gICAqICAgIG1pbmxlbmd0aC4KLSAgICog
QHBhcmFtIHtudW1iZXI9fSBuZ01heGxlbmd0aCBTZXRzIGBtYXhsZW5ndGhgIHZhbGlkYXRpb24g
ZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBsb25nZXIgdGhhbgotICAgKiAgICBtYXhsZW5ndGgu
Ci0gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdQYXR0ZXJuIFNldHMgYHBhdHRlcm5gIHZhbGlkYXRp
b24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBkb2VzIG5vdCBtYXRjaCB0aGUKLSAgICogICAgUmVn
RXhwIHBhdHRlcm4gZXhwcmVzc2lvbi4gRXhwZWN0ZWQgdmFsdWUgaXMgYC9yZWdleHAvYCBmb3Ig
aW5saW5lIHBhdHRlcm5zIG9yIGByZWdleHBgIGZvcgotICAgKiAgICBwYXR0ZXJucyBkZWZpbmVk
IGFzIHNjb3BlIGV4cHJlc3Npb25zLgotICAgKgotICAgKiBAZXhhbXBsZQotICAgICAgPGRvYzpl
eGFtcGxlPgotICAgICAgICA8ZG9jOnNvdXJjZT4KLSAgICAgICAgIDxzY3JpcHQ+Ci0gICAgICAg
ICAgIGZ1bmN0aW9uIEN0cmwoJHNjb3BlKSB7Ci0gICAgICAgICAgICAgJHNjb3BlLnRleHQgPSAn
bWVAZXhhbXBsZS5jb20nOwotICAgICAgICAgICB9Ci0gICAgICAgICA8L3NjcmlwdD4KLSAgICAg
ICAgICAgPGZvcm0gbmFtZT0ibXlGb3JtIiBuZy1jb250cm9sbGVyPSJDdHJsIj4KLSAgICAgICAg
ICAgICBFbWFpbDogPGlucHV0IHR5cGU9ImVtYWlsIiBuYW1lPSJpbnB1dCIgbmctbW9kZWw9InRl
eHQiIHJlcXVpcmVkPgotICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlcnJvciIgbmctc2hvdz0i
bXlGb3JtLmlucHV0LiRlcnJvci5yZXF1aXJlZCI+Ci0gICAgICAgICAgICAgICBSZXF1aXJlZCE8
L3NwYW4+Ci0gICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVycm9yIiBuZy1zaG93PSJteUZvcm0u
aW5wdXQuJGVycm9yLmVtYWlsIj4KLSAgICAgICAgICAgICAgIE5vdCB2YWxpZCBlbWFpbCE8L3Nw
YW4+Ci0gICAgICAgICAgICAgPHR0PnRleHQgPSB7e3RleHR9fTwvdHQ+PGJyLz4KLSAgICAgICAg
ICAgICA8dHQ+bXlGb3JtLmlucHV0LiR2YWxpZCA9IHt7bXlGb3JtLmlucHV0LiR2YWxpZH19PC90
dD48YnIvPgotICAgICAgICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJGVycm9yID0ge3tteUZvcm0u
aW5wdXQuJGVycm9yfX08L3R0Pjxici8+Ci0gICAgICAgICAgICAgPHR0Pm15Rm9ybS4kdmFsaWQg
PSB7e215Rm9ybS4kdmFsaWR9fTwvdHQ+PGJyLz4KLSAgICAgICAgICAgICA8dHQ+bXlGb3JtLiRl
cnJvci5yZXF1aXJlZCA9IHt7ISFteUZvcm0uJGVycm9yLnJlcXVpcmVkfX08L3R0Pjxici8+Ci0g
ICAgICAgICAgICAgPHR0Pm15Rm9ybS4kZXJyb3IuZW1haWwgPSB7eyEhbXlGb3JtLiRlcnJvci5l
bWFpbH19PC90dD48YnIvPgotICAgICAgICAgICA8L2Zvcm0+Ci0gICAgICAgIDwvZG9jOnNvdXJj
ZT4KLSAgICAgICAgPGRvYzpzY2VuYXJpbz4KLSAgICAgICAgICBpdCgnc2hvdWxkIGluaXRpYWxp
emUgdG8gbW9kZWwnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCd0
ZXh0JykpLnRvRXF1YWwoJ21lQGV4YW1wbGUuY29tJyk7Ci0gICAgICAgICAgICBleHBlY3QoYmlu
ZGluZygnbXlGb3JtLmlucHV0LiR2YWxpZCcpKS50b0VxdWFsKCd0cnVlJyk7Ci0gICAgICAgICAg
fSk7Ci0KLSAgICAgICAgICBpdCgnc2hvdWxkIGJlIGludmFsaWQgaWYgZW1wdHknLCBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgIGlucHV0KCd0ZXh0JykuZW50ZXIoJycpOwotICAgICAgICAgICAg
ZXhwZWN0KGJpbmRpbmcoJ3RleHQnKSkudG9FcXVhbCgnJyk7Ci0gICAgICAgICAgICBleHBlY3Qo
YmluZGluZygnbXlGb3JtLmlucHV0LiR2YWxpZCcpKS50b0VxdWFsKCdmYWxzZScpOwotICAgICAg
ICAgIH0pOwotCi0gICAgICAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIG5vdCBlbWFpbCcs
IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgaW5wdXQoJ3RleHQnKS5lbnRlcigneHh4Jyk7Ci0g
ICAgICAgICAgICBleHBlY3QoYmluZGluZygnbXlGb3JtLmlucHV0LiR2YWxpZCcpKS50b0VxdWFs
KCdmYWxzZScpOwotICAgICAgICAgIH0pOwotICAgICAgICA8L2RvYzpzY2VuYXJpbz4KLSAgICAg
IDwvZG9jOmV4YW1wbGU+Ci0gICAqLwotICAnZW1haWwnOiBlbWFpbElucHV0VHlwZSwKLQotCi0g
IC8qKgotICAgKiBAbmdkb2MgaW5wdXRUeXBlCi0gICAqIEBuYW1lIG5nLmRpcmVjdGl2ZTppbnB1
dC5yYWRpbwotICAgKgotICAgKiBAZGVzY3JpcHRpb24KLSAgICogSFRNTCByYWRpbyBidXR0b24u
Ci0gICAqCi0gICAqIEBwYXJhbSB7c3RyaW5nfSBuZ01vZGVsIEFzc2lnbmFibGUgYW5ndWxhciBl
eHByZXNzaW9uIHRvIGRhdGEtYmluZCB0by4KLSAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIFRo
ZSB2YWx1ZSB0byB3aGljaCB0aGUgZXhwcmVzc2lvbiBzaG91bGQgYmUgc2V0IHdoZW4gc2VsZWN0
ZWQuCi0gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmFtZSBQcm9wZXJ0eSBuYW1lIG9mIHRoZSBmb3Jt
IHVuZGVyIHdoaWNoIHRoZSBjb250cm9sIGlzIHB1Ymxpc2hlZC4KLSAgICogQHBhcmFtIHtzdHJp
bmc9fSBuZ0NoYW5nZSBBbmd1bGFyIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWQgd2hlbiBpbnB1
dCBjaGFuZ2VzIGR1ZSB0byB1c2VyCi0gICAqICAgIGludGVyYWN0aW9uIHdpdGggdGhlIGlucHV0
IGVsZW1lbnQuCi0gICAqCi0gICAqIEBleGFtcGxlCi0gICAgICA8ZG9jOmV4YW1wbGU+Ci0gICAg
ICAgIDxkb2M6c291cmNlPgotICAgICAgICAgPHNjcmlwdD4KLSAgICAgICAgICAgZnVuY3Rpb24g
Q3RybCgkc2NvcGUpIHsKLSAgICAgICAgICAgICAkc2NvcGUuY29sb3IgPSAnYmx1ZSc7Ci0gICAg
ICAgICAgIH0KLSAgICAgICAgIDwvc2NyaXB0PgotICAgICAgICAgPGZvcm0gbmFtZT0ibXlGb3Jt
IiBuZy1jb250cm9sbGVyPSJDdHJsIj4KLSAgICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBu
Zy1tb2RlbD0iY29sb3IiIHZhbHVlPSJyZWQiPiAgUmVkIDxici8+Ci0gICAgICAgICAgIDxpbnB1
dCB0eXBlPSJyYWRpbyIgbmctbW9kZWw9ImNvbG9yIiB2YWx1ZT0iZ3JlZW4iPiBHcmVlbiA8YnIv
PgotICAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIG5nLW1vZGVsPSJjb2xvciIgdmFsdWU9
ImJsdWUiPiBCbHVlIDxici8+Ci0gICAgICAgICAgIDx0dD5jb2xvciA9IHt7Y29sb3J9fTwvdHQ+
PGJyLz4KLSAgICAgICAgICA8L2Zvcm0+Ci0gICAgICAgIDwvZG9jOnNvdXJjZT4KLSAgICAgICAg
PGRvYzpzY2VuYXJpbz4KLSAgICAgICAgICBpdCgnc2hvdWxkIGNoYW5nZSBzdGF0ZScsIGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ2NvbG9yJykpLnRvRXF1YWwoJ2Js
dWUnKTsKLQotICAgICAgICAgICAgaW5wdXQoJ2NvbG9yJykuc2VsZWN0KCdyZWQnKTsKLSAgICAg
ICAgICAgIGV4cGVjdChiaW5kaW5nKCdjb2xvcicpKS50b0VxdWFsKCdyZWQnKTsKLSAgICAgICAg
ICB9KTsKLSAgICAgICAgPC9kb2M6c2NlbmFyaW8+Ci0gICAgICA8L2RvYzpleGFtcGxlPgotICAg
Ki8KLSAgJ3JhZGlvJzogcmFkaW9JbnB1dFR5cGUsCi0KLQotICAvKioKLSAgICogQG5nZG9jIGlu
cHV0VHlwZQotICAgKiBAbmFtZSBuZy5kaXJlY3RpdmU6aW5wdXQuY2hlY2tib3gKLSAgICoKLSAg
ICogQGRlc2NyaXB0aW9uCi0gICAqIEhUTUwgY2hlY2tib3guCi0gICAqCi0gICAqIEBwYXJhbSB7
c3RyaW5nfSBuZ01vZGVsIEFzc2lnbmFibGUgYW5ndWxhciBleHByZXNzaW9uIHRvIGRhdGEtYmlu
ZCB0by4KLSAgICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lIFByb3BlcnR5IG5hbWUgb2YgdGhlIGZv
cm0gdW5kZXIgd2hpY2ggdGhlIGNvbnRyb2wgaXMgcHVibGlzaGVkLgotICAgKiBAcGFyYW0ge3N0
cmluZz19IG5nVHJ1ZVZhbHVlIFRoZSB2YWx1ZSB0byB3aGljaCB0aGUgZXhwcmVzc2lvbiBzaG91
bGQgYmUgc2V0IHdoZW4gc2VsZWN0ZWQuCi0gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdGYWxzZVZh
bHVlIFRoZSB2YWx1ZSB0byB3aGljaCB0aGUgZXhwcmVzc2lvbiBzaG91bGQgYmUgc2V0IHdoZW4g
bm90IHNlbGVjdGVkLgotICAgKiBAcGFyYW0ge3N0cmluZz19IG5nQ2hhbmdlIEFuZ3VsYXIgZXhw
cmVzc2lvbiB0byBiZSBleGVjdXRlZCB3aGVuIGlucHV0IGNoYW5nZXMgZHVlIHRvIHVzZXIKLSAg
ICogICAgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaW5wdXQgZWxlbWVudC4KLSAgICoKLSAgICogQGV4
YW1wbGUKLSAgICAgIDxkb2M6ZXhhbXBsZT4KLSAgICAgICAgPGRvYzpzb3VyY2U+Ci0gICAgICAg
ICA8c2NyaXB0PgotICAgICAgICAgICBmdW5jdGlvbiBDdHJsKCRzY29wZSkgewotICAgICAgICAg
ICAgICRzY29wZS52YWx1ZTEgPSB0cnVlOwotICAgICAgICAgICAgICRzY29wZS52YWx1ZTIgPSAn
WUVTJwotICAgICAgICAgICB9Ci0gICAgICAgICA8L3NjcmlwdD4KLSAgICAgICAgIDxmb3JtIG5h
bWU9Im15Rm9ybSIgbmctY29udHJvbGxlcj0iQ3RybCI+Ci0gICAgICAgICAgIFZhbHVlMTogPGlu
cHV0IHR5cGU9ImNoZWNrYm94IiBuZy1tb2RlbD0idmFsdWUxIj4gPGJyLz4KLSAgICAgICAgICAg
VmFsdWUyOiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5nLW1vZGVsPSJ2YWx1ZTIiCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIG5nLXRydWUtdmFsdWU9IllFUyIgbmctZmFsc2UtdmFsdWU9Ik5P
Ij4gPGJyLz4KLSAgICAgICAgICAgPHR0PnZhbHVlMSA9IHt7dmFsdWUxfX08L3R0Pjxici8+Ci0g
ICAgICAgICAgIDx0dD52YWx1ZTIgPSB7e3ZhbHVlMn19PC90dD48YnIvPgotICAgICAgICAgIDwv
Zm9ybT4KLSAgICAgICAgPC9kb2M6c291cmNlPgotICAgICAgICA8ZG9jOnNjZW5hcmlvPgotICAg
ICAgICAgIGl0KCdzaG91bGQgY2hhbmdlIHN0YXRlJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICBleHBlY3QoYmluZGluZygndmFsdWUxJykpLnRvRXF1YWwoJ3RydWUnKTsKLSAgICAgICAgICAg
IGV4cGVjdChiaW5kaW5nKCd2YWx1ZTInKSkudG9FcXVhbCgnWUVTJyk7Ci0KLSAgICAgICAgICAg
IGlucHV0KCd2YWx1ZTEnKS5jaGVjaygpOwotICAgICAgICAgICAgaW5wdXQoJ3ZhbHVlMicpLmNo
ZWNrKCk7Ci0gICAgICAgICAgICBleHBlY3QoYmluZGluZygndmFsdWUxJykpLnRvRXF1YWwoJ2Zh
bHNlJyk7Ci0gICAgICAgICAgICBleHBlY3QoYmluZGluZygndmFsdWUyJykpLnRvRXF1YWwoJ05P
Jyk7Ci0gICAgICAgICAgfSk7Ci0gICAgICAgIDwvZG9jOnNjZW5hcmlvPgotICAgICAgPC9kb2M6
ZXhhbXBsZT4KLSAgICovCi0gICdjaGVja2JveCc6IGNoZWNrYm94SW5wdXRUeXBlLAotCi0gICdo
aWRkZW4nOiBub29wLAotICAnYnV0dG9uJzogbm9vcCwKLSAgJ3N1Ym1pdCc6IG5vb3AsCi0gICdy
ZXNldCc6IG5vb3AKLX07Ci0KLQotZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkgewotICByZXR1cm4g
aXNVbmRlZmluZWQodmFsdWUpIHx8IHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2
YWx1ZSAhPT0gdmFsdWU7Ci19Ci0KLQotZnVuY3Rpb24gdGV4dElucHV0VHlwZShzY29wZSwgZWxl
bWVudCwgYXR0ciwgY3RybCwgJHNuaWZmZXIsICRicm93c2VyKSB7Ci0KLSAgdmFyIGxpc3RlbmVy
ID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHZhbHVlID0gdHJpbShlbGVtZW50LnZhbCgpKTsKLQot
ICAgIGlmIChjdHJsLiR2aWV3VmFsdWUgIT09IHZhbHVlKSB7Ci0gICAgICBzY29wZS4kYXBwbHko
ZnVuY3Rpb24oKSB7Ci0gICAgICAgIGN0cmwuJHNldFZpZXdWYWx1ZSh2YWx1ZSk7Ci0gICAgICB9
KTsKLSAgICB9Ci0gIH07Ci0KLSAgLy8gaWYgdGhlIGJyb3dzZXIgZG9lcyBzdXBwb3J0ICJpbnB1
dCIgZXZlbnQsIHdlIGFyZSBmaW5lIC0gZXhjZXB0IG9uIElFOSB3aGljaCBkb2Vzbid0IGZpcmUg
dGhlCi0gIC8vIGlucHV0IGV2ZW50IG9uIGJhY2tzcGFjZSwgZGVsZXRlIG9yIGN1dAotICBpZiAo
JHNuaWZmZXIuaGFzRXZlbnQoJ2lucHV0JykpIHsKLSAgICBlbGVtZW50LmJpbmQoJ2lucHV0Jywg
bGlzdGVuZXIpOwotICB9IGVsc2UgewotICAgIHZhciB0aW1lb3V0OwotCi0gICAgdmFyIGRlZmVy
TGlzdGVuZXIgPSBmdW5jdGlvbigpIHsKLSAgICAgIGlmICghdGltZW91dCkgewotICAgICAgICB0
aW1lb3V0ID0gJGJyb3dzZXIuZGVmZXIoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgbGlzdGVuZXIo
KTsKLSAgICAgICAgICB0aW1lb3V0ID0gbnVsbDsKLSAgICAgICAgfSk7Ci0gICAgICB9Ci0gICAg
fTsKLQotICAgIGVsZW1lbnQuYmluZCgna2V5ZG93bicsIGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAg
ICB2YXIga2V5ID0gZXZlbnQua2V5Q29kZTsKLQotICAgICAgLy8gaWdub3JlCi0gICAgICAvLyAg
ICBjb21tYW5kICAgICAgICAgICAgbW9kaWZpZXJzICAgICAgICAgICAgICAgICAgIGFycm93cwot
ICAgICAgaWYgKGtleSA9PT0gOTEgfHwgKDE1IDwga2V5ICYmIGtleSA8IDE5KSB8fCAoMzcgPD0g
a2V5ICYmIGtleSA8PSA0MCkpIHJldHVybjsKLQotICAgICAgZGVmZXJMaXN0ZW5lcigpOwotICAg
IH0pOwotCi0gICAgLy8gaWYgdXNlciBwYXN0ZSBpbnRvIGlucHV0IHVzaW5nIG1vdXNlLCB3ZSBu
ZWVkICJjaGFuZ2UiIGV2ZW50IHRvIGNhdGNoIGl0Ci0gICAgZWxlbWVudC5iaW5kKCdjaGFuZ2Un
LCBsaXN0ZW5lcik7Ci0KLSAgICAvLyBpZiB1c2VyIG1vZGlmaWVzIGlucHV0IHZhbHVlIHVzaW5n
IGNvbnRleHQgbWVudSBpbiBJRSwgd2UgbmVlZCAicGFzdGUiIGFuZCAiY3V0IiBldmVudHMgdG8g
Y2F0Y2ggaXQKLSAgICBpZiAoJHNuaWZmZXIuaGFzRXZlbnQoJ3Bhc3RlJykpIHsKLSAgICAgIGVs
ZW1lbnQuYmluZCgncGFzdGUgY3V0JywgZGVmZXJMaXN0ZW5lcik7Ci0gICAgfQotICB9Ci0KLQot
ICBjdHJsLiRyZW5kZXIgPSBmdW5jdGlvbigpIHsKLSAgICBlbGVtZW50LnZhbChpc0VtcHR5KGN0
cmwuJHZpZXdWYWx1ZSkgPyAnJyA6IGN0cmwuJHZpZXdWYWx1ZSk7Ci0gIH07Ci0KLSAgLy8gcGF0
dGVybiB2YWxpZGF0b3IKLSAgdmFyIHBhdHRlcm4gPSBhdHRyLm5nUGF0dGVybiwKLSAgICAgIHBh
dHRlcm5WYWxpZGF0b3I7Ci0KLSAgdmFyIHZhbGlkYXRlID0gZnVuY3Rpb24ocmVnZXhwLCB2YWx1
ZSkgewotICAgIGlmIChpc0VtcHR5KHZhbHVlKSB8fCByZWdleHAudGVzdCh2YWx1ZSkpIHsKLSAg
ICAgIGN0cmwuJHNldFZhbGlkaXR5KCdwYXR0ZXJuJywgdHJ1ZSk7Ci0gICAgICByZXR1cm4gdmFs
dWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGN0cmwuJHNldFZhbGlkaXR5KCdwYXR0ZXJuJywgZmFs
c2UpOwotICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKLSAgICB9Ci0gIH07Ci0KLSAgaWYgKHBhdHRl
cm4pIHsKLSAgICBpZiAocGF0dGVybi5tYXRjaCgvXlwvKC4qKVwvJC8pKSB7Ci0gICAgICBwYXR0
ZXJuID0gbmV3IFJlZ0V4cChwYXR0ZXJuLnN1YnN0cigxLCBwYXR0ZXJuLmxlbmd0aCAtIDIpKTsK
LSAgICAgIHBhdHRlcm5WYWxpZGF0b3IgPSBmdW5jdGlvbih2YWx1ZSkgewotICAgICAgICByZXR1
cm4gdmFsaWRhdGUocGF0dGVybiwgdmFsdWUpCi0gICAgICB9OwotICAgIH0gZWxzZSB7Ci0gICAg
ICBwYXR0ZXJuVmFsaWRhdG9yID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgICAgdmFyIHBhdHRl
cm5PYmogPSBzY29wZS4kZXZhbChwYXR0ZXJuKTsKLQotICAgICAgICBpZiAoIXBhdHRlcm5PYmog
fHwgIXBhdHRlcm5PYmoudGVzdCkgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0
ZWQgJyArIHBhdHRlcm4gKyAnIHRvIGJlIGEgUmVnRXhwIGJ1dCB3YXMgJyArIHBhdHRlcm5PYmop
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWxpZGF0ZShwYXR0ZXJuT2JqLCB2YWx1ZSk7
Ci0gICAgICB9OwotICAgIH0KLQotICAgIGN0cmwuJGZvcm1hdHRlcnMucHVzaChwYXR0ZXJuVmFs
aWRhdG9yKTsKLSAgICBjdHJsLiRwYXJzZXJzLnB1c2gocGF0dGVyblZhbGlkYXRvcik7Ci0gIH0K
LQotICAvLyBtaW4gbGVuZ3RoIHZhbGlkYXRvcgotICBpZiAoYXR0ci5uZ01pbmxlbmd0aCkgewot
ICAgIHZhciBtaW5sZW5ndGggPSBpbnQoYXR0ci5uZ01pbmxlbmd0aCk7Ci0gICAgdmFyIG1pbkxl
bmd0aFZhbGlkYXRvciA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICBpZiAoIWlzRW1wdHkodmFs
dWUpICYmIHZhbHVlLmxlbmd0aCA8IG1pbmxlbmd0aCkgewotICAgICAgICBjdHJsLiRzZXRWYWxp
ZGl0eSgnbWlubGVuZ3RoJywgZmFsc2UpOwotICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwotICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgY3RybC4kc2V0VmFsaWRpdHkoJ21pbmxlbmd0aCcsIHRydWUp
OwotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICB9Ci0gICAgfTsKLQotICAgIGN0cmwuJHBh
cnNlcnMucHVzaChtaW5MZW5ndGhWYWxpZGF0b3IpOwotICAgIGN0cmwuJGZvcm1hdHRlcnMucHVz
aChtaW5MZW5ndGhWYWxpZGF0b3IpOwotICB9Ci0KLSAgLy8gbWF4IGxlbmd0aCB2YWxpZGF0b3IK
LSAgaWYgKGF0dHIubmdNYXhsZW5ndGgpIHsKLSAgICB2YXIgbWF4bGVuZ3RoID0gaW50KGF0dHIu
bmdNYXhsZW5ndGgpOwotICAgIHZhciBtYXhMZW5ndGhWYWxpZGF0b3IgPSBmdW5jdGlvbih2YWx1
ZSkgewotICAgICAgaWYgKCFpc0VtcHR5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPiBtYXhsZW5n
dGgpIHsKLSAgICAgICAgY3RybC4kc2V0VmFsaWRpdHkoJ21heGxlbmd0aCcsIGZhbHNlKTsKLSAg
ICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGN0cmwuJHNl
dFZhbGlkaXR5KCdtYXhsZW5ndGgnLCB0cnVlKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAg
ICAgfQotICAgIH07Ci0KLSAgICBjdHJsLiRwYXJzZXJzLnB1c2gobWF4TGVuZ3RoVmFsaWRhdG9y
KTsKLSAgICBjdHJsLiRmb3JtYXR0ZXJzLnB1c2gobWF4TGVuZ3RoVmFsaWRhdG9yKTsKLSAgfQot
fQotCi1mdW5jdGlvbiBudW1iZXJJbnB1dFR5cGUoc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmws
ICRzbmlmZmVyLCAkYnJvd3NlcikgewotICB0ZXh0SW5wdXRUeXBlKHNjb3BlLCBlbGVtZW50LCBh
dHRyLCBjdHJsLCAkc25pZmZlciwgJGJyb3dzZXIpOwotCi0gIGN0cmwuJHBhcnNlcnMucHVzaChm
dW5jdGlvbih2YWx1ZSkgewotICAgIHZhciBlbXB0eSA9IGlzRW1wdHkodmFsdWUpOwotICAgIGlm
IChlbXB0eSB8fCBOVU1CRVJfUkVHRVhQLnRlc3QodmFsdWUpKSB7Ci0gICAgICBjdHJsLiRzZXRW
YWxpZGl0eSgnbnVtYmVyJywgdHJ1ZSk7Ci0gICAgICByZXR1cm4gdmFsdWUgPT09ICcnID8gbnVs
bCA6IChlbXB0eSA/IHZhbHVlIDogcGFyc2VGbG9hdCh2YWx1ZSkpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICBjdHJsLiRzZXRWYWxpZGl0eSgnbnVtYmVyJywgZmFsc2UpOwotICAgICAgcmV0dXJuIHVu
ZGVmaW5lZDsKLSAgICB9Ci0gIH0pOwotCi0gIGN0cmwuJGZvcm1hdHRlcnMucHVzaChmdW5jdGlv
bih2YWx1ZSkgewotICAgIHJldHVybiBpc0VtcHR5KHZhbHVlKSA/ICcnIDogJycgKyB2YWx1ZTsK
LSAgfSk7Ci0KLSAgaWYgKGF0dHIubWluKSB7Ci0gICAgdmFyIG1pbiA9IHBhcnNlRmxvYXQoYXR0
ci5taW4pOwotICAgIHZhciBtaW5WYWxpZGF0b3IgPSBmdW5jdGlvbih2YWx1ZSkgewotICAgICAg
aWYgKCFpc0VtcHR5KHZhbHVlKSAmJiB2YWx1ZSA8IG1pbikgewotICAgICAgICBjdHJsLiRzZXRW
YWxpZGl0eSgnbWluJywgZmFsc2UpOwotICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwotICAgICAg
fSBlbHNlIHsKLSAgICAgICAgY3RybC4kc2V0VmFsaWRpdHkoJ21pbicsIHRydWUpOwotICAgICAg
ICByZXR1cm4gdmFsdWU7Ci0gICAgICB9Ci0gICAgfTsKLQotICAgIGN0cmwuJHBhcnNlcnMucHVz
aChtaW5WYWxpZGF0b3IpOwotICAgIGN0cmwuJGZvcm1hdHRlcnMucHVzaChtaW5WYWxpZGF0b3Ip
OwotICB9Ci0KLSAgaWYgKGF0dHIubWF4KSB7Ci0gICAgdmFyIG1heCA9IHBhcnNlRmxvYXQoYXR0
ci5tYXgpOwotICAgIHZhciBtYXhWYWxpZGF0b3IgPSBmdW5jdGlvbih2YWx1ZSkgewotICAgICAg
aWYgKCFpc0VtcHR5KHZhbHVlKSAmJiB2YWx1ZSA+IG1heCkgewotICAgICAgICBjdHJsLiRzZXRW
YWxpZGl0eSgnbWF4JywgZmFsc2UpOwotICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwotICAgICAg
fSBlbHNlIHsKLSAgICAgICAgY3RybC4kc2V0VmFsaWRpdHkoJ21heCcsIHRydWUpOwotICAgICAg
ICByZXR1cm4gdmFsdWU7Ci0gICAgICB9Ci0gICAgfTsKLQotICAgIGN0cmwuJHBhcnNlcnMucHVz
aChtYXhWYWxpZGF0b3IpOwotICAgIGN0cmwuJGZvcm1hdHRlcnMucHVzaChtYXhWYWxpZGF0b3Ip
OwotICB9Ci0KLSAgY3RybC4kZm9ybWF0dGVycy5wdXNoKGZ1bmN0aW9uKHZhbHVlKSB7Ci0KLSAg
ICBpZiAoaXNFbXB0eSh2YWx1ZSkgfHwgaXNOdW1iZXIodmFsdWUpKSB7Ci0gICAgICBjdHJsLiRz
ZXRWYWxpZGl0eSgnbnVtYmVyJywgdHJ1ZSk7Ci0gICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfSBl
bHNlIHsKLSAgICAgIGN0cmwuJHNldFZhbGlkaXR5KCdudW1iZXInLCBmYWxzZSk7Ci0gICAgICBy
ZXR1cm4gdW5kZWZpbmVkOwotICAgIH0KLSAgfSk7Ci19Ci0KLWZ1bmN0aW9uIHVybElucHV0VHlw
ZShzY29wZSwgZWxlbWVudCwgYXR0ciwgY3RybCwgJHNuaWZmZXIsICRicm93c2VyKSB7Ci0gIHRl
eHRJbnB1dFR5cGUoc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwsICRzbmlmZmVyLCAkYnJvd3Nl
cik7Ci0KLSAgdmFyIHVybFZhbGlkYXRvciA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgaWYgKGlz
RW1wdHkodmFsdWUpIHx8IFVSTF9SRUdFWFAudGVzdCh2YWx1ZSkpIHsKLSAgICAgIGN0cmwuJHNl
dFZhbGlkaXR5KCd1cmwnLCB0cnVlKTsKLSAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9IGVsc2Ug
ewotICAgICAgY3RybC4kc2V0VmFsaWRpdHkoJ3VybCcsIGZhbHNlKTsKLSAgICAgIHJldHVybiB1
bmRlZmluZWQ7Ci0gICAgfQotICB9OwotCi0gIGN0cmwuJGZvcm1hdHRlcnMucHVzaCh1cmxWYWxp
ZGF0b3IpOwotICBjdHJsLiRwYXJzZXJzLnB1c2godXJsVmFsaWRhdG9yKTsKLX0KLQotZnVuY3Rp
b24gZW1haWxJbnB1dFR5cGUoc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwsICRzbmlmZmVyLCAk
YnJvd3NlcikgewotICB0ZXh0SW5wdXRUeXBlKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsLCAk
c25pZmZlciwgJGJyb3dzZXIpOwotCi0gIHZhciBlbWFpbFZhbGlkYXRvciA9IGZ1bmN0aW9uKHZh
bHVlKSB7Ci0gICAgaWYgKGlzRW1wdHkodmFsdWUpIHx8IEVNQUlMX1JFR0VYUC50ZXN0KHZhbHVl
KSkgewotICAgICAgY3RybC4kc2V0VmFsaWRpdHkoJ2VtYWlsJywgdHJ1ZSk7Ci0gICAgICByZXR1
cm4gdmFsdWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGN0cmwuJHNldFZhbGlkaXR5KCdlbWFpbCcs
IGZhbHNlKTsKLSAgICAgIHJldHVybiB1bmRlZmluZWQ7Ci0gICAgfQotICB9OwotCi0gIGN0cmwu
JGZvcm1hdHRlcnMucHVzaChlbWFpbFZhbGlkYXRvcik7Ci0gIGN0cmwuJHBhcnNlcnMucHVzaChl
bWFpbFZhbGlkYXRvcik7Ci19Ci0KLWZ1bmN0aW9uIHJhZGlvSW5wdXRUeXBlKHNjb3BlLCBlbGVt
ZW50LCBhdHRyLCBjdHJsKSB7Ci0gIC8vIG1ha2UgdGhlIG5hbWUgdW5pcXVlLCBpZiBub3QgZGVm
aW5lZAotICBpZiAoaXNVbmRlZmluZWQoYXR0ci5uYW1lKSkgewotICAgIGVsZW1lbnQuYXR0cign
bmFtZScsIG5leHRVaWQoKSk7Ci0gIH0KLQotICBlbGVtZW50LmJpbmQoJ2NsaWNrJywgZnVuY3Rp
b24oKSB7Ci0gICAgaWYgKGVsZW1lbnRbMF0uY2hlY2tlZCkgewotICAgICAgc2NvcGUuJGFwcGx5
KGZ1bmN0aW9uKCkgewotICAgICAgICBjdHJsLiRzZXRWaWV3VmFsdWUoYXR0ci52YWx1ZSk7Ci0g
ICAgICB9KTsKLSAgICB9Ci0gIH0pOwotCi0gIGN0cmwuJHJlbmRlciA9IGZ1bmN0aW9uKCkgewot
ICAgIHZhciB2YWx1ZSA9IGF0dHIudmFsdWU7Ci0gICAgZWxlbWVudFswXS5jaGVja2VkID0gKHZh
bHVlID09IGN0cmwuJHZpZXdWYWx1ZSk7Ci0gIH07Ci0KLSAgYXR0ci4kb2JzZXJ2ZSgndmFsdWUn
LCBjdHJsLiRyZW5kZXIpOwotfQotCi1mdW5jdGlvbiBjaGVja2JveElucHV0VHlwZShzY29wZSwg
ZWxlbWVudCwgYXR0ciwgY3RybCkgewotICB2YXIgdHJ1ZVZhbHVlID0gYXR0ci5uZ1RydWVWYWx1
ZSwKLSAgICAgIGZhbHNlVmFsdWUgPSBhdHRyLm5nRmFsc2VWYWx1ZTsKLQotICBpZiAoIWlzU3Ry
aW5nKHRydWVWYWx1ZSkpIHRydWVWYWx1ZSA9IHRydWU7Ci0gIGlmICghaXNTdHJpbmcoZmFsc2VW
YWx1ZSkpIGZhbHNlVmFsdWUgPSBmYWxzZTsKLQotICBlbGVtZW50LmJpbmQoJ2NsaWNrJywgZnVu
Y3Rpb24oKSB7Ci0gICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uKCkgewotICAgICAgY3RybC4kc2V0
Vmlld1ZhbHVlKGVsZW1lbnRbMF0uY2hlY2tlZCk7Ci0gICAgfSk7Ci0gIH0pOwotCi0gIGN0cmwu
JHJlbmRlciA9IGZ1bmN0aW9uKCkgewotICAgIGVsZW1lbnRbMF0uY2hlY2tlZCA9IGN0cmwuJHZp
ZXdWYWx1ZTsKLSAgfTsKLQotICBjdHJsLiRmb3JtYXR0ZXJzLnB1c2goZnVuY3Rpb24odmFsdWUp
IHsKLSAgICByZXR1cm4gdmFsdWUgPT09IHRydWVWYWx1ZTsKLSAgfSk7Ci0KLSAgY3RybC4kcGFy
c2Vycy5wdXNoKGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgcmV0dXJuIHZhbHVlID8gdHJ1ZVZhbHVl
IDogZmFsc2VWYWx1ZTsKLSAgfSk7Ci19Ci0KLQotLyoqCi0gKiBAbmdkb2MgZGlyZWN0aXZlCi0g
KiBAbmFtZSBuZy5kaXJlY3RpdmU6dGV4dGFyZWEKLSAqIEByZXN0cmljdCBFCi0gKgotICogQGRl
c2NyaXB0aW9uCi0gKiBIVE1MIHRleHRhcmVhIGVsZW1lbnQgY29udHJvbCB3aXRoIGFuZ3VsYXIg
ZGF0YS1iaW5kaW5nLiBUaGUgZGF0YS1iaW5kaW5nIGFuZCB2YWxpZGF0aW9uCi0gKiBwcm9wZXJ0
aWVzIG9mIHRoaXMgZWxlbWVudCBhcmUgZXhhY3RseSB0aGUgc2FtZSBhcyB0aG9zZSBvZiB0aGUK
LSAqIHtAbGluayBuZy5kaXJlY3RpdmU6aW5wdXQgaW5wdXQgZWxlbWVudH0uCi0gKgotICogQHBh
cmFtIHtzdHJpbmd9IG5nTW9kZWwgQXNzaWduYWJsZSBhbmd1bGFyIGV4cHJlc3Npb24gdG8gZGF0
YS1iaW5kIHRvLgotICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lIFByb3BlcnR5IG5hbWUgb2YgdGhl
IGZvcm0gdW5kZXIgd2hpY2ggdGhlIGNvbnRyb2wgaXMgcHVibGlzaGVkLgotICogQHBhcmFtIHtz
dHJpbmc9fSByZXF1aXJlZCBTZXRzIGByZXF1aXJlZGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYg
dGhlIHZhbHVlIGlzIG5vdCBlbnRlcmVkLgotICogQHBhcmFtIHtzdHJpbmc9fSBuZ1JlcXVpcmVk
IEFkZHMgYHJlcXVpcmVkYCBhdHRyaWJ1dGUgYW5kIGByZXF1aXJlZGAgdmFsaWRhdGlvbiBjb25z
dHJhaW50IHRvCi0gKiAgICB0aGUgZWxlbWVudCB3aGVuIHRoZSBuZ1JlcXVpcmVkIGV4cHJlc3Np
b24gZXZhbHVhdGVzIHRvIHRydWUuIFVzZSBgbmdSZXF1aXJlZGAgaW5zdGVhZCBvZgotICogICAg
YHJlcXVpcmVkYCB3aGVuIHlvdSB3YW50IHRvIGRhdGEtYmluZCB0byB0aGUgYHJlcXVpcmVkYCBh
dHRyaWJ1dGUuCi0gKiBAcGFyYW0ge251bWJlcj19IG5nTWlubGVuZ3RoIFNldHMgYG1pbmxlbmd0
aGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIHNob3J0ZXIgdGhhbgotICog
ICAgbWlubGVuZ3RoLgotICogQHBhcmFtIHtudW1iZXI9fSBuZ01heGxlbmd0aCBTZXRzIGBtYXhs
ZW5ndGhgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBsb25nZXIgdGhhbgot
ICogICAgbWF4bGVuZ3RoLgotICogQHBhcmFtIHtzdHJpbmc9fSBuZ1BhdHRlcm4gU2V0cyBgcGF0
dGVybmAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGRvZXMgbm90IG1hdGNoIHRo
ZQotICogICAgUmVnRXhwIHBhdHRlcm4gZXhwcmVzc2lvbi4gRXhwZWN0ZWQgdmFsdWUgaXMgYC9y
ZWdleHAvYCBmb3IgaW5saW5lIHBhdHRlcm5zIG9yIGByZWdleHBgIGZvcgotICogICAgcGF0dGVy
bnMgZGVmaW5lZCBhcyBzY29wZSBleHByZXNzaW9ucy4KLSAqIEBwYXJhbSB7c3RyaW5nPX0gbmdD
aGFuZ2UgQW5ndWxhciBleHByZXNzaW9uIHRvIGJlIGV4ZWN1dGVkIHdoZW4gaW5wdXQgY2hhbmdl
cyBkdWUgdG8gdXNlcgotICogICAgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaW5wdXQgZWxlbWVudC4K
LSAqLwotCi0KLS8qKgotICogQG5nZG9jIGRpcmVjdGl2ZQotICogQG5hbWUgbmcuZGlyZWN0aXZl
OmlucHV0Ci0gKiBAcmVzdHJpY3QgRQotICoKLSAqIEBkZXNjcmlwdGlvbgotICogSFRNTCBpbnB1
dCBlbGVtZW50IGNvbnRyb2wgd2l0aCBhbmd1bGFyIGRhdGEtYmluZGluZy4gSW5wdXQgY29udHJv
bCBmb2xsb3dzIEhUTUw1IGlucHV0IHR5cGVzCi0gKiBhbmQgcG9seWZpbGxzIHRoZSBIVE1MNSB2
YWxpZGF0aW9uIGJlaGF2aW9yIGZvciBvbGRlciBicm93c2Vycy4KLSAqCi0gKiBAcGFyYW0ge3N0
cmluZ30gbmdNb2RlbCBBc3NpZ25hYmxlIGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBkYXRhLWJpbmQg
dG8uCi0gKiBAcGFyYW0ge3N0cmluZz19IG5hbWUgUHJvcGVydHkgbmFtZSBvZiB0aGUgZm9ybSB1
bmRlciB3aGljaCB0aGUgY29udHJvbCBpcyBwdWJsaXNoZWQuCi0gKiBAcGFyYW0ge3N0cmluZz19
IHJlcXVpcmVkIFNldHMgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFs
dWUgaXMgbm90IGVudGVyZWQuCi0gKiBAcGFyYW0ge2Jvb2xlYW49fSBuZ1JlcXVpcmVkIFNldHMg
YHJlcXVpcmVkYCBhdHRyaWJ1dGUgaWYgc2V0IHRvIHRydWUKLSAqIEBwYXJhbSB7bnVtYmVyPX0g
bmdNaW5sZW5ndGggU2V0cyBgbWlubGVuZ3RoYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUg
dmFsdWUgaXMgc2hvcnRlciB0aGFuCi0gKiAgICBtaW5sZW5ndGguCi0gKiBAcGFyYW0ge251bWJl
cj19IG5nTWF4bGVuZ3RoIFNldHMgYG1heGxlbmd0aGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYg
dGhlIHZhbHVlIGlzIGxvbmdlciB0aGFuCi0gKiAgICBtYXhsZW5ndGguCi0gKiBAcGFyYW0ge3N0
cmluZz19IG5nUGF0dGVybiBTZXRzIGBwYXR0ZXJuYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0
aGUgdmFsdWUgZG9lcyBub3QgbWF0Y2ggdGhlCi0gKiAgICBSZWdFeHAgcGF0dGVybiBleHByZXNz
aW9uLiBFeHBlY3RlZCB2YWx1ZSBpcyBgL3JlZ2V4cC9gIGZvciBpbmxpbmUgcGF0dGVybnMgb3Ig
YHJlZ2V4cGAgZm9yCi0gKiAgICBwYXR0ZXJucyBkZWZpbmVkIGFzIHNjb3BlIGV4cHJlc3Npb25z
LgotICogQHBhcmFtIHtzdHJpbmc9fSBuZ0NoYW5nZSBBbmd1bGFyIGV4cHJlc3Npb24gdG8gYmUg
ZXhlY3V0ZWQgd2hlbiBpbnB1dCBjaGFuZ2VzIGR1ZSB0byB1c2VyCi0gKiAgICBpbnRlcmFjdGlv
biB3aXRoIHRoZSBpbnB1dCBlbGVtZW50LgotICoKLSAqIEBleGFtcGxlCi0gICAgPGRvYzpleGFt
cGxlPgotICAgICAgPGRvYzpzb3VyY2U+Ci0gICAgICAgPHNjcmlwdD4KLSAgICAgICAgIGZ1bmN0
aW9uIEN0cmwoJHNjb3BlKSB7Ci0gICAgICAgICAgICRzY29wZS51c2VyID0ge25hbWU6ICdndWVz
dCcsIGxhc3Q6ICd2aXNpdG9yJ307Ci0gICAgICAgICB9Ci0gICAgICAgPC9zY3JpcHQ+Ci0gICAg
ICAgPGRpdiBuZy1jb250cm9sbGVyPSJDdHJsIj4KLSAgICAgICAgIDxmb3JtIG5hbWU9Im15Rm9y
bSI+Ci0gICAgICAgICAgIFVzZXIgbmFtZTogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InVzZXJO
YW1lIiBuZy1tb2RlbD0idXNlci5uYW1lIiByZXF1aXJlZD4KLSAgICAgICAgICAgPHNwYW4gY2xh
c3M9ImVycm9yIiBuZy1zaG93PSJteUZvcm0udXNlck5hbWUuJGVycm9yLnJlcXVpcmVkIj4KLSAg
ICAgICAgICAgICBSZXF1aXJlZCE8L3NwYW4+PGJyPgotICAgICAgICAgICBMYXN0IG5hbWU6IDxp
bnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJsYXN0TmFtZSIgbmctbW9kZWw9InVzZXIubGFzdCIKLSAg
ICAgICAgICAgICBuZy1taW5sZW5ndGg9IjMiIG5nLW1heGxlbmd0aD0iMTAiPgotICAgICAgICAg
ICA8c3BhbiBjbGFzcz0iZXJyb3IiIG5nLXNob3c9Im15Rm9ybS5sYXN0TmFtZS4kZXJyb3IubWlu
bGVuZ3RoIj4KLSAgICAgICAgICAgICBUb28gc2hvcnQhPC9zcGFuPgotICAgICAgICAgICA8c3Bh
biBjbGFzcz0iZXJyb3IiIG5nLXNob3c9Im15Rm9ybS5sYXN0TmFtZS4kZXJyb3IubWF4bGVuZ3Ro
Ij4KLSAgICAgICAgICAgICBUb28gbG9uZyE8L3NwYW4+PGJyPgotICAgICAgICAgPC9mb3JtPgot
ICAgICAgICAgPGhyPgotICAgICAgICAgPHR0PnVzZXIgPSB7e3VzZXJ9fTwvdHQ+PGJyLz4KLSAg
ICAgICAgIDx0dD5teUZvcm0udXNlck5hbWUuJHZhbGlkID0ge3tteUZvcm0udXNlck5hbWUuJHZh
bGlkfX08L3R0Pjxicj4KLSAgICAgICAgIDx0dD5teUZvcm0udXNlck5hbWUuJGVycm9yID0ge3tt
eUZvcm0udXNlck5hbWUuJGVycm9yfX08L3R0Pjxicj4KLSAgICAgICAgIDx0dD5teUZvcm0ubGFz
dE5hbWUuJHZhbGlkID0ge3tteUZvcm0ubGFzdE5hbWUuJHZhbGlkfX08L3R0Pjxicj4KLSAgICAg
ICAgIDx0dD5teUZvcm0ubGFzdE5hbWUuJGVycm9yID0ge3tteUZvcm0ubGFzdE5hbWUuJGVycm9y
fX08L3R0Pjxicj4KLSAgICAgICAgIDx0dD5teUZvcm0uJHZhbGlkID0ge3tteUZvcm0uJHZhbGlk
fX08L3R0Pjxicj4KLSAgICAgICAgIDx0dD5teUZvcm0uJGVycm9yLnJlcXVpcmVkID0ge3shIW15
Rm9ybS4kZXJyb3IucmVxdWlyZWR9fTwvdHQ+PGJyPgotICAgICAgICAgPHR0Pm15Rm9ybS4kZXJy
b3IubWlubGVuZ3RoID0ge3shIW15Rm9ybS4kZXJyb3IubWlubGVuZ3RofX08L3R0Pjxicj4KLSAg
ICAgICAgIDx0dD5teUZvcm0uJGVycm9yLm1heGxlbmd0aCA9IHt7ISFteUZvcm0uJGVycm9yLm1h
eGxlbmd0aH19PC90dD48YnI+Ci0gICAgICAgPC9kaXY+Ci0gICAgICA8L2RvYzpzb3VyY2U+Ci0g
ICAgICA8ZG9jOnNjZW5hcmlvPgotICAgICAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgdG8gbW9k
ZWwnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICBleHBlY3QoYmluZGluZygndXNlcicpKS50b0Vx
dWFsKCd7Im5hbWUiOiJndWVzdCIsImxhc3QiOiJ2aXNpdG9yIn0nKTsKLSAgICAgICAgICBleHBl
Y3QoYmluZGluZygnbXlGb3JtLnVzZXJOYW1lLiR2YWxpZCcpKS50b0VxdWFsKCd0cnVlJyk7Ci0g
ICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ215Rm9ybS4kdmFsaWQnKSkudG9FcXVhbCgndHJ1ZScp
OwotICAgICAgICB9KTsKLQotICAgICAgICBpdCgnc2hvdWxkIGJlIGludmFsaWQgaWYgZW1wdHkg
d2hlbiByZXF1aXJlZCcsIGZ1bmN0aW9uKCkgewotICAgICAgICAgIGlucHV0KCd1c2VyLm5hbWUn
KS5lbnRlcignJyk7Ci0gICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ3VzZXInKSkudG9FcXVhbCgn
eyJsYXN0IjoidmlzaXRvciJ9Jyk7Ci0gICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ215Rm9ybS51
c2VyTmFtZS4kdmFsaWQnKSkudG9FcXVhbCgnZmFsc2UnKTsKLSAgICAgICAgICBleHBlY3QoYmlu
ZGluZygnbXlGb3JtLiR2YWxpZCcpKS50b0VxdWFsKCdmYWxzZScpOwotICAgICAgICB9KTsKLQot
ICAgICAgICBpdCgnc2hvdWxkIGJlIHZhbGlkIGlmIGVtcHR5IHdoZW4gbWluIGxlbmd0aCBpcyBz
ZXQnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICBpbnB1dCgndXNlci5sYXN0JykuZW50ZXIoJycp
OwotICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCd1c2VyJykpLnRvRXF1YWwoJ3sibmFtZSI6Imd1
ZXN0IiwibGFzdCI6IiJ9Jyk7Ci0gICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ215Rm9ybS5sYXN0
TmFtZS4kdmFsaWQnKSkudG9FcXVhbCgndHJ1ZScpOwotICAgICAgICAgIGV4cGVjdChiaW5kaW5n
KCdteUZvcm0uJHZhbGlkJykpLnRvRXF1YWwoJ3RydWUnKTsKLSAgICAgICAgfSk7Ci0KLSAgICAg
ICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIGxlc3MgdGhhbiByZXF1aXJlZCBtaW4gbGVuZ3Ro
JywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgaW5wdXQoJ3VzZXIubGFzdCcpLmVudGVyKCd4eCcp
OwotICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCd1c2VyJykpLnRvRXF1YWwoJ3sibmFtZSI6Imd1
ZXN0In0nKTsKLSAgICAgICAgICBleHBlY3QoYmluZGluZygnbXlGb3JtLmxhc3ROYW1lLiR2YWxp
ZCcpKS50b0VxdWFsKCdmYWxzZScpOwotICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdteUZvcm0u
bGFzdE5hbWUuJGVycm9yJykpLnRvTWF0Y2goL21pbmxlbmd0aC8pOwotICAgICAgICAgIGV4cGVj
dChiaW5kaW5nKCdteUZvcm0uJHZhbGlkJykpLnRvRXF1YWwoJ2ZhbHNlJyk7Ci0gICAgICAgIH0p
OwotCi0gICAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBsb25nZXIgdGhhbiBtYXggbGVu
Z3RoJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgaW5wdXQoJ3VzZXIubGFzdCcpLmVudGVyKCdz
b21lIHJpZGljdWxvdXNseSBsb25nIG5hbWUnKTsKLSAgICAgICAgICBleHBlY3QoYmluZGluZygn
dXNlcicpKQotICAgICAgICAgICAgLnRvRXF1YWwoJ3sibmFtZSI6Imd1ZXN0In0nKTsKLSAgICAg
ICAgICBleHBlY3QoYmluZGluZygnbXlGb3JtLmxhc3ROYW1lLiR2YWxpZCcpKS50b0VxdWFsKCdm
YWxzZScpOwotICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdteUZvcm0ubGFzdE5hbWUuJGVycm9y
JykpLnRvTWF0Y2goL21heGxlbmd0aC8pOwotICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdteUZv
cm0uJHZhbGlkJykpLnRvRXF1YWwoJ2ZhbHNlJyk7Ci0gICAgICAgIH0pOwotICAgICAgPC9kb2M6
c2NlbmFyaW8+Ci0gICAgPC9kb2M6ZXhhbXBsZT4KLSAqLwotdmFyIGlucHV0RGlyZWN0aXZlID0g
WyckYnJvd3NlcicsICckc25pZmZlcicsIGZ1bmN0aW9uKCRicm93c2VyLCAkc25pZmZlcikgewot
ICByZXR1cm4gewotICAgIHJlc3RyaWN0OiAnRScsCi0gICAgcmVxdWlyZTogJz9uZ01vZGVsJywK
LSAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0ciwgY3RybCkgewotICAgICAg
aWYgKGN0cmwpIHsKLSAgICAgICAgKGlucHV0VHlwZVtsb3dlcmNhc2UoYXR0ci50eXBlKV0gfHwg
aW5wdXRUeXBlLnRleHQpKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsLCAkc25pZmZlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICRicm93c2VyKTsKLSAgICAgIH0KLSAgICB9Ci0gIH07Ci19XTsKLQotdmFyIFZBTElEX0NMQVNT
ID0gJ25nLXZhbGlkJywKLSAgICBJTlZBTElEX0NMQVNTID0gJ25nLWludmFsaWQnLAotICAgIFBS
SVNUSU5FX0NMQVNTID0gJ25nLXByaXN0aW5lJywKLSAgICBESVJUWV9DTEFTUyA9ICduZy1kaXJ0
eSc7Ci0KLS8qKgotICogQG5nZG9jIG9iamVjdAotICogQG5hbWUgbmcuZGlyZWN0aXZlOm5nTW9k
ZWwuTmdNb2RlbENvbnRyb2xsZXIKLSAqCi0gKiBAcHJvcGVydHkge3N0cmluZ30gJHZpZXdWYWx1
ZSBBY3R1YWwgc3RyaW5nIHZhbHVlIGluIHRoZSB2aWV3LgotICogQHByb3BlcnR5IHsqfSAkbW9k
ZWxWYWx1ZSBUaGUgdmFsdWUgaW4gdGhlIG1vZGVsLCB0aGF0IHRoZSBjb250cm9sIGlzIGJvdW5k
IHRvLgotICogQHByb3BlcnR5IHtBcnJheS48RnVuY3Rpb24+fSAkcGFyc2VycyBXaGVuZXZlciB0
aGUgY29udHJvbCByZWFkcyB2YWx1ZSBmcm9tIHRoZSBET00sIGl0IGV4ZWN1dGVzCi0gKiAgICAg
YWxsIG9mIHRoZXNlIGZ1bmN0aW9ucyB0byBzYW5pdGl6ZSAvIGNvbnZlcnQgdGhlIHZhbHVlIGFz
IHdlbGwgYXMgdmFsaWRhdGUuCi0gKgotICogQHByb3BlcnR5IHtBcnJheS48RnVuY3Rpb24+fSAk
Zm9ybWF0dGVycyBXaGVuZXZlciB0aGUgbW9kZWwgdmFsdWUgY2hhbmdlcywgaXQgZXhlY3V0ZXMg
YWxsIG9mCi0gKiAgICAgdGhlc2UgZnVuY3Rpb25zIHRvIGNvbnZlcnQgdGhlIHZhbHVlIGFzIHdl
bGwgYXMgdmFsaWRhdGUuCi0gKgotICogQHByb3BlcnR5IHtPYmplY3R9ICRlcnJvciBBbiBiamVj
dCBoYXNoIHdpdGggYWxsIGVycm9ycyBhcyBrZXlzLgotICoKLSAqIEBwcm9wZXJ0eSB7Ym9vbGVh
bn0gJHByaXN0aW5lIFRydWUgaWYgdXNlciBoYXMgbm90IGludGVyYWN0ZWQgd2l0aCB0aGUgY29u
dHJvbCB5ZXQuCi0gKiBAcHJvcGVydHkge2Jvb2xlYW59ICRkaXJ0eSBUcnVlIGlmIHVzZXIgaGFz
IGFscmVhZHkgaW50ZXJhY3RlZCB3aXRoIHRoZSBjb250cm9sLgotICogQHByb3BlcnR5IHtib29s
ZWFufSAkdmFsaWQgVHJ1ZSBpZiB0aGVyZSBpcyBubyBlcnJvci4KLSAqIEBwcm9wZXJ0eSB7Ym9v
bGVhbn0gJGludmFsaWQgVHJ1ZSBpZiBhdCBsZWFzdCBvbmUgZXJyb3Igb24gdGhlIGNvbnRyb2wu
Ci0gKgotICogQGRlc2NyaXB0aW9uCi0gKgotICogYE5nTW9kZWxDb250cm9sbGVyYCBwcm92aWRl
cyBBUEkgZm9yIHRoZSBgbmctbW9kZWxgIGRpcmVjdGl2ZS4gVGhlIGNvbnRyb2xsZXIgY29udGFp
bnMKLSAqIHNlcnZpY2VzIGZvciBkYXRhLWJpbmRpbmcsIHZhbGlkYXRpb24sIENTUyB1cGRhdGUs
IHZhbHVlIGZvcm1hdHRpbmcgYW5kIHBhcnNpbmcuIEl0Ci0gKiBzcGVjaWZpY2FsbHkgZG9lcyBu
b3QgY29udGFpbiBhbnkgbG9naWMgd2hpY2ggZGVhbHMgd2l0aCBET00gcmVuZGVyaW5nIG9yIGxp
c3RlbmluZyB0bwotICogRE9NIGV2ZW50cy4gVGhlIGBOZ01vZGVsQ29udHJvbGxlcmAgaXMgbWVh
bnQgdG8gYmUgZXh0ZW5kZWQgYnkgb3RoZXIgZGlyZWN0aXZlcyB3aGVyZSwgdGhlCi0gKiBkaXJl
Y3RpdmUgcHJvdmlkZXMgRE9NIG1hbmlwdWxhdGlvbiBhbmQgdGhlIGBOZ01vZGVsQ29udHJvbGxl
cmAgcHJvdmlkZXMgdGhlIGRhdGEtYmluZGluZy4KLSAqCi0gKiBUaGlzIGV4YW1wbGUgc2hvd3Mg
aG93IHRvIHVzZSBgTmdNb2RlbENvbnRyb2xsZXJgIHdpdGggYSBjdXN0b20gY29udHJvbCB0byBh
Y2hpZXZlCi0gKiBkYXRhLWJpbmRpbmcuIE5vdGljZSBob3cgZGlmZmVyZW50IGRpcmVjdGl2ZXMg
KGBjb250ZW50ZWRpdGFibGVgLCBgbmctbW9kZWxgLCBhbmQgYHJlcXVpcmVkYCkKLSAqIGNvbGxh
Ym9yYXRlIHRvZ2V0aGVyIHRvIGFjaGlldmUgdGhlIGRlc2lyZWQgcmVzdWx0LgotICoKLSAqIDxl
eGFtcGxlIG1vZHVsZT0iY3VzdG9tQ29udHJvbCI+Ci0gICAgPGZpbGUgbmFtZT0ic3R5bGUuY3Nz
Ij4KLSAgICAgIFtjb250ZW50ZWRpdGFibGVdIHsKLSAgICAgICAgYm9yZGVyOiAxcHggc29saWQg
YmxhY2s7Ci0gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwotICAgICAgICBtaW4taGVp
Z2h0OiAyMHB4OwotICAgICAgfQotCi0gICAgICAubmctaW52YWxpZCB7Ci0gICAgICAgIGJvcmRl
cjogMXB4IHNvbGlkIHJlZDsKLSAgICAgIH0KLQotICAgIDwvZmlsZT4KLSAgICA8ZmlsZSBuYW1l
PSJzY3JpcHQuanMiPgotICAgICAgYW5ndWxhci5tb2R1bGUoJ2N1c3RvbUNvbnRyb2wnLCBbXSku
Ci0gICAgICAgIGRpcmVjdGl2ZSgnY29udGVudGVkaXRhYmxlJywgZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgIHJlc3RyaWN0OiAnQScsIC8vIG9ubHkgYWN0aXZh
dGUgb24gZWxlbWVudCBhdHRyaWJ1dGUKLSAgICAgICAgICAgIHJlcXVpcmU6ICc/bmdNb2RlbCcs
IC8vIGdldCBhIGhvbGQgb2YgTmdNb2RlbENvbnRyb2xsZXIKLSAgICAgICAgICAgIGxpbms6IGZ1
bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRycywgbmdNb2RlbCkgewotICAgICAgICAgICAgICBp
ZighbmdNb2RlbCkgcmV0dXJuOyAvLyBkbyBub3RoaW5nIGlmIG5vIG5nLW1vZGVsCi0KLSAgICAg
ICAgICAgICAgLy8gU3BlY2lmeSBob3cgVUkgc2hvdWxkIGJlIHVwZGF0ZWQKLSAgICAgICAgICAg
ICAgbmdNb2RlbC4kcmVuZGVyID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgZWxlbWVu
dC5odG1sKG5nTW9kZWwuJHZpZXdWYWx1ZSB8fCAnJyk7Ci0gICAgICAgICAgICAgIH07Ci0KLSAg
ICAgICAgICAgICAgLy8gTGlzdGVuIGZvciBjaGFuZ2UgZXZlbnRzIHRvIGVuYWJsZSBiaW5kaW5n
Ci0gICAgICAgICAgICAgIGVsZW1lbnQuYmluZCgnYmx1ciBrZXl1cCBjaGFuZ2UnLCBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgICAgICBzY29wZS4kYXBwbHkocmVhZCk7Ci0gICAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgICByZWFkKCk7IC8vIGluaXRpYWxpemUKLQotICAgICAgICAgICAg
ICAvLyBXcml0ZSBkYXRhIHRvIHRoZSBtb2RlbAotICAgICAgICAgICAgICBmdW5jdGlvbiByZWFk
KCkgewotICAgICAgICAgICAgICAgIG5nTW9kZWwuJHNldFZpZXdWYWx1ZShlbGVtZW50Lmh0bWwo
KSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9OwotICAgICAg
ICB9KTsKLSAgICA8L2ZpbGU+Ci0gICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+Ci0gICAgICA8
Zm9ybSBuYW1lPSJteUZvcm0iPgotICAgICAgIDxkaXYgY29udGVudGVkaXRhYmxlCi0gICAgICAg
ICAgICBuYW1lPSJteVdpZGdldCIgbmctbW9kZWw9InVzZXJDb250ZW50IgotICAgICAgICAgICAg
cmVxdWlyZWQ+Q2hhbmdlIG1lITwvZGl2PgotICAgICAgICA8c3BhbiBuZy1zaG93PSJteUZvcm0u
bXlXaWRnZXQuJGVycm9yLnJlcXVpcmVkIj5SZXF1aXJlZCE8L3NwYW4+Ci0gICAgICAgPGhyPgot
ICAgICAgIDx0ZXh0YXJlYSBuZy1tb2RlbD0idXNlckNvbnRlbnQiPjwvdGV4dGFyZWE+Ci0gICAg
ICA8L2Zvcm0+Ci0gICAgPC9maWxlPgotICAgIDxmaWxlIG5hbWU9InNjZW5hcmlvLmpzIj4KLSAg
ICAgIGl0KCdzaG91bGQgZGF0YS1iaW5kIGFuZCBiZWNvbWUgaW52YWxpZCcsIGZ1bmN0aW9uKCkg
ewotICAgICAgICB2YXIgY29udGVudEVkaXRhYmxlID0gZWxlbWVudCgnW2NvbnRlbnRlZGl0YWJs
ZV0nKTsKLQotICAgICAgICBleHBlY3QoY29udGVudEVkaXRhYmxlLnRleHQoKSkudG9FcXVhbCgn
Q2hhbmdlIG1lIScpOwotICAgICAgICBpbnB1dCgndXNlckNvbnRlbnQnKS5lbnRlcignJyk7Ci0g
ICAgICAgIGV4cGVjdChjb250ZW50RWRpdGFibGUudGV4dCgpKS50b0VxdWFsKCcnKTsKLSAgICAg
ICAgZXhwZWN0KGNvbnRlbnRFZGl0YWJsZS5wcm9wKCdjbGFzc05hbWUnKSkudG9NYXRjaCgvbmct
aW52YWxpZC1yZXF1aXJlZC8pOwotICAgICAgfSk7Ci0gICAgPC9maWxlPgotICogPC9leGFtcGxl
PgotICoKLSAqLwotdmFyIE5nTW9kZWxDb250cm9sbGVyID0gWyckc2NvcGUnLCAnJGV4Y2VwdGlv
bkhhbmRsZXInLCAnJGF0dHJzJywgJyRlbGVtZW50JywgJyRwYXJzZScsCi0gICAgZnVuY3Rpb24o
JHNjb3BlLCAkZXhjZXB0aW9uSGFuZGxlciwgJGF0dHIsICRlbGVtZW50LCAkcGFyc2UpIHsKLSAg
dGhpcy4kdmlld1ZhbHVlID0gTnVtYmVyLk5hTjsKLSAgdGhpcy4kbW9kZWxWYWx1ZSA9IE51bWJl
ci5OYU47Ci0gIHRoaXMuJHBhcnNlcnMgPSBbXTsKLSAgdGhpcy4kZm9ybWF0dGVycyA9IFtdOwot
ICB0aGlzLiR2aWV3Q2hhbmdlTGlzdGVuZXJzID0gW107Ci0gIHRoaXMuJHByaXN0aW5lID0gdHJ1
ZTsKLSAgdGhpcy4kZGlydHkgPSBmYWxzZTsKLSAgdGhpcy4kdmFsaWQgPSB0cnVlOwotICB0aGlz
LiRpbnZhbGlkID0gZmFsc2U7Ci0gIHRoaXMuJG5hbWUgPSAkYXR0ci5uYW1lOwotCi0gIHZhciBu
Z01vZGVsR2V0ID0gJHBhcnNlKCRhdHRyLm5nTW9kZWwpLAotICAgICAgbmdNb2RlbFNldCA9IG5n
TW9kZWxHZXQuYXNzaWduOwotCi0gIGlmICghbmdNb2RlbFNldCkgewotICAgIHRocm93IEVycm9y
KE5PTl9BU1NJR05BQkxFX01PREVMX0VYUFJFU1NJT04gKyAkYXR0ci5uZ01vZGVsICsKLSAgICAg
ICAgJyAoJyArIHN0YXJ0aW5nVGFnKCRlbGVtZW50KSArICcpJyk7Ci0gIH0KLQotICAvKioKLSAg
ICogQG5nZG9jIGZ1bmN0aW9uCi0gICAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpuZ01vZGVsLk5nTW9k
ZWxDb250cm9sbGVyIyRyZW5kZXIKLSAgICogQG1ldGhvZE9mIG5nLmRpcmVjdGl2ZTpuZ01vZGVs
Lk5nTW9kZWxDb250cm9sbGVyCi0gICAqCi0gICAqIEBkZXNjcmlwdGlvbgotICAgKiBDYWxsZWQg
d2hlbiB0aGUgdmlldyBuZWVkcyB0byBiZSB1cGRhdGVkLiBJdCBpcyBleHBlY3RlZCB0aGF0IHRo
ZSB1c2VyIG9mIHRoZSBuZy1tb2RlbAotICAgKiBkaXJlY3RpdmUgd2lsbCBpbXBsZW1lbnQgdGhp
cyBtZXRob2QuCi0gICAqLwotICB0aGlzLiRyZW5kZXIgPSBub29wOwotCi0gIHZhciBwYXJlbnRG
b3JtID0gJGVsZW1lbnQuaW5oZXJpdGVkRGF0YSgnJGZvcm1Db250cm9sbGVyJykgfHwgbnVsbEZv
cm1DdHJsLAotICAgICAgaW52YWxpZENvdW50ID0gMCwgLy8gdXNlZCB0byBlYXNpbHkgZGV0ZXJt
aW5lIGlmIHdlIGFyZSB2YWxpZAotICAgICAgJGVycm9yID0gdGhpcy4kZXJyb3IgPSB7fTsgLy8g
a2VlcCBpbnZhbGlkIGtleXMgaGVyZQotCi0KLSAgLy8gU2V0dXAgaW5pdGlhbCBzdGF0ZSBvZiB0
aGUgY29udHJvbAotICAkZWxlbWVudC5hZGRDbGFzcyhQUklTVElORV9DTEFTUyk7Ci0gIHRvZ2ds
ZVZhbGlkQ3NzKHRydWUpOwotCi0gIC8vIGNvbnZlbmllbmNlIG1ldGhvZCBmb3IgZWFzeSB0b2dn
bGluZyBvZiBjbGFzc2VzCi0gIGZ1bmN0aW9uIHRvZ2dsZVZhbGlkQ3NzKGlzVmFsaWQsIHZhbGlk
YXRpb25FcnJvcktleSkgewotICAgIHZhbGlkYXRpb25FcnJvcktleSA9IHZhbGlkYXRpb25FcnJv
cktleSA/ICctJyArIHNuYWtlX2Nhc2UodmFsaWRhdGlvbkVycm9yS2V5LCAnLScpIDogJyc7Ci0g
ICAgJGVsZW1lbnQuCi0gICAgICByZW1vdmVDbGFzcygoaXNWYWxpZCA/IElOVkFMSURfQ0xBU1Mg
OiBWQUxJRF9DTEFTUykgKyB2YWxpZGF0aW9uRXJyb3JLZXkpLgotICAgICAgYWRkQ2xhc3MoKGlz
VmFsaWQgPyBWQUxJRF9DTEFTUyA6IElOVkFMSURfQ0xBU1MpICsgdmFsaWRhdGlvbkVycm9yS2V5
KTsKLSAgfQotCi0gIC8qKgotICAgKiBAbmdkb2MgZnVuY3Rpb24KLSAgICogQG5hbWUgbmcuZGly
ZWN0aXZlOm5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXIjJHNldFZhbGlkaXR5Ci0gICAqIEBtZXRo
b2RPZiBuZy5kaXJlY3RpdmU6bmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlcgotICAgKgotICAgKiBA
ZGVzY3JpcHRpb24KLSAgICogQ2hhbmdlIHRoZSB2YWxpZGl0eSBzdGF0ZSwgYW5kIG5vdGlmaWVz
IHRoZSBmb3JtIHdoZW4gdGhlIGNvbnRyb2wgY2hhbmdlcyB2YWxpZGl0eS4gKGkuZS4gaXQKLSAg
ICogZG9lcyBub3Qgbm90aWZ5IGZvcm0gaWYgZ2l2ZW4gdmFsaWRhdG9yIGlzIGFscmVhZHkgbWFy
a2VkIGFzIGludmFsaWQpLgotICAgKgotICAgKiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVk
IGJ5IHZhbGlkYXRvcnMgLSBpLmUuIHRoZSBwYXJzZXIgb3IgZm9ybWF0dGVyIGZ1bmN0aW9ucy4K
LSAgICoKLSAgICogQHBhcmFtIHtzdHJpbmd9IHZhbGlkYXRpb25FcnJvcktleSBOYW1lIG9mIHRo
ZSB2YWxpZGF0b3IuIHRoZSBgdmFsaWRhdGlvbkVycm9yS2V5YCB3aWxsIGFzc2lnbgotICAgKiAg
ICAgICAgdG8gYCRlcnJvclt2YWxpZGF0aW9uRXJyb3JLZXldPWlzVmFsaWRgIHNvIHRoYXQgaXQg
aXMgYXZhaWxhYmxlIGZvciBkYXRhLWJpbmRpbmcuCi0gICAqICAgICAgICBUaGUgYHZhbGlkYXRp
b25FcnJvcktleWAgc2hvdWxkIGJlIGluIGNhbWVsQ2FzZSBhbmQgd2lsbCBnZXQgY29udmVydGVk
IGludG8gZGFzaC1jYXNlCi0gICAqICAgICAgICBmb3IgY2xhc3MgbmFtZS4gRXhhbXBsZTogYG15
RXJyb3JgIHdpbGwgcmVzdWx0IGluIGBuZy12YWxpZC1teS1lcnJvcmAgYW5kIGBuZy1pbnZhbGlk
LW15LWVycm9yYAotICAgKiAgICAgICAgY2xhc3MgYW5kIGNhbiBiZSBib3VuZCB0byBhcyAgYHt7
c29tZUZvcm0uc29tZUNvbnRyb2wuJGVycm9yLm15RXJyb3J9fWAgLgotICAgKiBAcGFyYW0ge2Jv
b2xlYW59IGlzVmFsaWQgV2hldGhlciB0aGUgY3VycmVudCBzdGF0ZSBpcyB2YWxpZCAodHJ1ZSkg
b3IgaW52YWxpZCAoZmFsc2UpLgotICAgKi8KLSAgdGhpcy4kc2V0VmFsaWRpdHkgPSBmdW5jdGlv
bih2YWxpZGF0aW9uRXJyb3JLZXksIGlzVmFsaWQpIHsKLSAgICBpZiAoJGVycm9yW3ZhbGlkYXRp
b25FcnJvcktleV0gPT09ICFpc1ZhbGlkKSByZXR1cm47Ci0KLSAgICBpZiAoaXNWYWxpZCkgewot
ICAgICAgaWYgKCRlcnJvclt2YWxpZGF0aW9uRXJyb3JLZXldKSBpbnZhbGlkQ291bnQtLTsKLSAg
ICAgIGlmICghaW52YWxpZENvdW50KSB7Ci0gICAgICAgIHRvZ2dsZVZhbGlkQ3NzKHRydWUpOwot
ICAgICAgICB0aGlzLiR2YWxpZCA9IHRydWU7Ci0gICAgICAgIHRoaXMuJGludmFsaWQgPSBmYWxz
ZTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgdG9nZ2xlVmFsaWRDc3MoZmFsc2UpOwot
ICAgICAgdGhpcy4kaW52YWxpZCA9IHRydWU7Ci0gICAgICB0aGlzLiR2YWxpZCA9IGZhbHNlOwot
ICAgICAgaW52YWxpZENvdW50Kys7Ci0gICAgfQotCi0gICAgJGVycm9yW3ZhbGlkYXRpb25FcnJv
cktleV0gPSAhaXNWYWxpZDsKLSAgICB0b2dnbGVWYWxpZENzcyhpc1ZhbGlkLCB2YWxpZGF0aW9u
RXJyb3JLZXkpOwotCi0gICAgcGFyZW50Rm9ybS4kc2V0VmFsaWRpdHkodmFsaWRhdGlvbkVycm9y
S2V5LCBpc1ZhbGlkLCB0aGlzKTsKLSAgfTsKLQotCi0gIC8qKgotICAgKiBAbmdkb2MgZnVuY3Rp
b24KLSAgICogQG5hbWUgbmcuZGlyZWN0aXZlOm5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXIjJHNl
dFZpZXdWYWx1ZQotICAgKiBAbWV0aG9kT2YgbmcuZGlyZWN0aXZlOm5nTW9kZWwuTmdNb2RlbENv
bnRyb2xsZXIKLSAgICoKLSAgICogQGRlc2NyaXB0aW9uCi0gICAqIFJlYWQgYSB2YWx1ZSBmcm9t
IHZpZXcuCi0gICAqCi0gICAqIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgZnJvbSB3aXRo
aW4gYSBET00gZXZlbnQgaGFuZGxlci4KLSAgICogRm9yIGV4YW1wbGUge0BsaW5rIG5nLmRpcmVj
dGl2ZTppbnB1dCBpbnB1dH0gb3IKLSAgICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpzZWxlY3Qgc2Vs
ZWN0fSBkaXJlY3RpdmVzIGNhbGwgaXQuCi0gICAqCi0gICAqIEl0IGludGVybmFsbHkgY2FsbHMg
YWxsIGBwYXJzZXJzYCBhbmQgaWYgcmVzdWx0ZWQgdmFsdWUgaXMgdmFsaWQsIHVwZGF0ZXMgdGhl
IG1vZGVsIGFuZAotICAgKiBjYWxscyBhbGwgcmVnaXN0ZXJlZCBjaGFuZ2UgbGlzdGVuZXJzLgot
ICAgKgotICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgVmFsdWUgZnJvbSB0aGUgdmlldy4KLSAg
ICovCi0gIHRoaXMuJHNldFZpZXdWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgdGhpcy4k
dmlld1ZhbHVlID0gdmFsdWU7Ci0KLSAgICAvLyBjaGFuZ2UgdG8gZGlydHkKLSAgICBpZiAodGhp
cy4kcHJpc3RpbmUpIHsKLSAgICAgIHRoaXMuJGRpcnR5ID0gdHJ1ZTsKLSAgICAgIHRoaXMuJHBy
aXN0aW5lID0gZmFsc2U7Ci0gICAgICAkZWxlbWVudC5yZW1vdmVDbGFzcyhQUklTVElORV9DTEFT
UykuYWRkQ2xhc3MoRElSVFlfQ0xBU1MpOwotICAgICAgcGFyZW50Rm9ybS4kc2V0RGlydHkoKTsK
LSAgICB9Ci0KLSAgICBmb3JFYWNoKHRoaXMuJHBhcnNlcnMsIGZ1bmN0aW9uKGZuKSB7Ci0gICAg
ICB2YWx1ZSA9IGZuKHZhbHVlKTsKLSAgICB9KTsKLQotICAgIGlmICh0aGlzLiRtb2RlbFZhbHVl
ICE9PSB2YWx1ZSkgewotICAgICAgdGhpcy4kbW9kZWxWYWx1ZSA9IHZhbHVlOwotICAgICAgbmdN
b2RlbFNldCgkc2NvcGUsIHZhbHVlKTsKLSAgICAgIGZvckVhY2godGhpcy4kdmlld0NoYW5nZUxp
c3RlbmVycywgZnVuY3Rpb24obGlzdGVuZXIpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICBs
aXN0ZW5lcigpOwotICAgICAgICB9IGNhdGNoKGUpIHsKLSAgICAgICAgICAkZXhjZXB0aW9uSGFu
ZGxlcihlKTsKLSAgICAgICAgfQotICAgICAgfSkKLSAgICB9Ci0gIH07Ci0KLSAgLy8gbW9kZWwg
LT4gdmFsdWUKLSAgdmFyIGN0cmwgPSB0aGlzOwotCi0gICRzY29wZS4kd2F0Y2goZnVuY3Rpb24g
bmdNb2RlbFdhdGNoKCkgewotICAgIHZhciB2YWx1ZSA9IG5nTW9kZWxHZXQoJHNjb3BlKTsKLQot
ICAgIC8vIGlmIHNjb3BlIG1vZGVsIHZhbHVlIGFuZCBuZ01vZGVsIHZhbHVlIGFyZSBvdXQgb2Yg
c3luYwotICAgIGlmIChjdHJsLiRtb2RlbFZhbHVlICE9PSB2YWx1ZSkgewotCi0gICAgICB2YXIg
Zm9ybWF0dGVycyA9IGN0cmwuJGZvcm1hdHRlcnMsCi0gICAgICAgICAgaWR4ID0gZm9ybWF0dGVy
cy5sZW5ndGg7Ci0KLSAgICAgIGN0cmwuJG1vZGVsVmFsdWUgPSB2YWx1ZTsKLSAgICAgIHdoaWxl
KGlkeC0tKSB7Ci0gICAgICAgIHZhbHVlID0gZm9ybWF0dGVyc1tpZHhdKHZhbHVlKTsKLSAgICAg
IH0KLQotICAgICAgaWYgKGN0cmwuJHZpZXdWYWx1ZSAhPT0gdmFsdWUpIHsKLSAgICAgICAgY3Ry
bC4kdmlld1ZhbHVlID0gdmFsdWU7Ci0gICAgICAgIGN0cmwuJHJlbmRlcigpOwotICAgICAgfQot
ICAgIH0KLSAgfSk7Ci19XTsKLQotCi0vKioKLSAqIEBuZ2RvYyBkaXJlY3RpdmUKLSAqIEBuYW1l
IG5nLmRpcmVjdGl2ZTpuZ01vZGVsCi0gKgotICogQGVsZW1lbnQgaW5wdXQKLSAqCi0gKiBAZGVz
Y3JpcHRpb24KLSAqIElzIGRpcmVjdGl2ZSB0aGF0IHRlbGxzIEFuZ3VsYXIgdG8gZG8gdHdvLXdh
eSBkYXRhIGJpbmRpbmcuIEl0IHdvcmtzIHRvZ2V0aGVyIHdpdGggYGlucHV0YCwKLSAqIGBzZWxl
Y3RgLCBgdGV4dGFyZWFgLiBZb3UgY2FuIGVhc2lseSB3cml0ZSB5b3VyIG93biBkaXJlY3RpdmVz
IHRvIHVzZSBgbmdNb2RlbGAgYXMgd2VsbC4KLSAqCi0gKiBgbmdNb2RlbGAgaXMgcmVzcG9uc2li
bGUgZm9yOgotICoKLSAqIC0gYmluZGluZyB0aGUgdmlldyBpbnRvIHRoZSBtb2RlbCwgd2hpY2gg
b3RoZXIgZGlyZWN0aXZlcyBzdWNoIGFzIGBpbnB1dGAsIGB0ZXh0YXJlYWAgb3IgYHNlbGVjdGAK
LSAqICAgcmVxdWlyZSwKLSAqIC0gcHJvdmlkaW5nIHZhbGlkYXRpb24gYmVoYXZpb3IgKGkuZS4g
cmVxdWlyZWQsIG51bWJlciwgZW1haWwsIHVybCksCi0gKiAtIGtlZXBpbmcgc3RhdGUgb2YgdGhl
IGNvbnRyb2wgKHZhbGlkL2ludmFsaWQsIGRpcnR5L3ByaXN0aW5lLCB2YWxpZGF0aW9uIGVycm9y
cyksCi0gKiAtIHNldHRpbmcgcmVsYXRlZCBjc3MgY2xhc3Mgb250byB0aGUgZWxlbWVudCAoYG5n
LXZhbGlkYCwgYG5nLWludmFsaWRgLCBgbmctZGlydHlgLCBgbmctcHJpc3RpbmVgKSwKLSAqIC0g
cmVnaXN0ZXIgdGhlIGNvbnRyb2wgd2l0aCBwYXJlbnQge0BsaW5rIG5nLmRpcmVjdGl2ZTpmb3Jt
IGZvcm19LgotICoKLSAqIEZvciBiYXNpYyBleGFtcGxlcywgaG93IHRvIHVzZSBgbmdNb2RlbGAs
IHNlZToKLSAqCi0gKiAgLSB7QGxpbmsgbmcuZGlyZWN0aXZlOmlucHV0IGlucHV0fQotICogICAg
LSB7QGxpbmsgbmcuZGlyZWN0aXZlOmlucHV0LnRleHQgdGV4dH0KLSAqICAgIC0ge0BsaW5rIG5n
LmRpcmVjdGl2ZTppbnB1dC5jaGVja2JveCBjaGVja2JveH0KLSAqICAgIC0ge0BsaW5rIG5nLmRp
cmVjdGl2ZTppbnB1dC5yYWRpbyByYWRpb30KLSAqICAgIC0ge0BsaW5rIG5nLmRpcmVjdGl2ZTpp
bnB1dC5udW1iZXIgbnVtYmVyfQotICogICAgLSB7QGxpbmsgbmcuZGlyZWN0aXZlOmlucHV0LmVt
YWlsIGVtYWlsfQotICogICAgLSB7QGxpbmsgbmcuZGlyZWN0aXZlOmlucHV0LnVybCB1cmx9Ci0g
KiAgLSB7QGxpbmsgbmcuZGlyZWN0aXZlOnNlbGVjdCBzZWxlY3R9Ci0gKiAgLSB7QGxpbmsgbmcu
ZGlyZWN0aXZlOnRleHRhcmVhIHRleHRhcmVhfQotICoKLSAqLwotdmFyIG5nTW9kZWxEaXJlY3Rp
dmUgPSBmdW5jdGlvbigpIHsKLSAgcmV0dXJuIHsKLSAgICByZXF1aXJlOiBbJ25nTW9kZWwnLCAn
Xj9mb3JtJ10sCi0gICAgY29udHJvbGxlcjogTmdNb2RlbENvbnRyb2xsZXIsCi0gICAgbGluazog
ZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmxzKSB7Ci0gICAgICAvLyBub3RpZnkg
b3RoZXJzLCBlc3BlY2lhbGx5IHBhcmVudCBmb3JtcwotCi0gICAgICB2YXIgbW9kZWxDdHJsID0g
Y3RybHNbMF0sCi0gICAgICAgICAgZm9ybUN0cmwgPSBjdHJsc1sxXSB8fCBudWxsRm9ybUN0cmw7
Ci0KLSAgICAgIGZvcm1DdHJsLiRhZGRDb250cm9sKG1vZGVsQ3RybCk7Ci0KLSAgICAgIGVsZW1l
bnQuYmluZCgnJGRlc3Ryb3knLCBmdW5jdGlvbigpIHsKLSAgICAgICAgZm9ybUN0cmwuJHJlbW92
ZUNvbnRyb2wobW9kZWxDdHJsKTsKLSAgICAgIH0pOwotICAgIH0KLSAgfTsKLX07Ci0KLQotLyoq
Ci0gKiBAbmdkb2MgZGlyZWN0aXZlCi0gKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdDaGFuZ2UKLSAq
IEByZXN0cmljdCBFCi0gKgotICogQGRlc2NyaXB0aW9uCi0gKiBFdmFsdWF0ZSBnaXZlbiBleHBy
ZXNzaW9uIHdoZW4gdXNlciBjaGFuZ2VzIHRoZSBpbnB1dC4KLSAqIFRoZSBleHByZXNzaW9uIGlz
IG5vdCBldmFsdWF0ZWQgd2hlbiB0aGUgdmFsdWUgY2hhbmdlIGlzIGNvbWluZyBmcm9tIHRoZSBt
b2RlbC4KLSAqCi0gKiBOb3RlLCB0aGlzIGRpcmVjdGl2ZSByZXF1aXJlcyBgbmdNb2RlbGAgdG8g
YmUgcHJlc2VudC4KLSAqCi0gKiBAZWxlbWVudCBpbnB1dAotICoKLSAqIEBleGFtcGxlCi0gKiA8
ZG9jOmV4YW1wbGU+Ci0gKiAgIDxkb2M6c291cmNlPgotICogICAgIDxzY3JpcHQ+Ci0gKiAgICAg
ICBmdW5jdGlvbiBDb250cm9sbGVyKCRzY29wZSkgewotICogICAgICAgICAkc2NvcGUuY291bnRl
ciA9IDA7Ci0gKiAgICAgICAgICRzY29wZS5jaGFuZ2UgPSBmdW5jdGlvbigpIHsKLSAqICAgICAg
ICAgICAkc2NvcGUuY291bnRlcisrOwotICogICAgICAgICB9OwotICogICAgICAgfQotICogICAg
IDwvc2NyaXB0PgotICogICAgIDxkaXYgbmctY29udHJvbGxlcj0iQ29udHJvbGxlciI+Ci0gKiAg
ICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5nLW1vZGVsPSJjb25maXJtZWQiIG5nLWNoYW5n
ZT0iY2hhbmdlKCkiIGlkPSJuZy1jaGFuZ2UtZXhhbXBsZTEiIC8+Ci0gKiAgICAgICA8aW5wdXQg
dHlwZT0iY2hlY2tib3giIG5nLW1vZGVsPSJjb25maXJtZWQiIGlkPSJuZy1jaGFuZ2UtZXhhbXBs
ZTIiIC8+Ci0gKiAgICAgICA8bGFiZWwgZm9yPSJuZy1jaGFuZ2UtZXhhbXBsZTIiPkNvbmZpcm1l
ZDwvbGFiZWw+PGJyIC8+Ci0gKiAgICAgICBkZWJ1ZyA9IHt7Y29uZmlybWVkfX08YnIgLz4KLSAq
ICAgICAgIGNvdW50ZXIgPSB7e2NvdW50ZXJ9fQotICogICAgIDwvZGl2PgotICogICA8L2RvYzpz
b3VyY2U+Ci0gKiAgIDxkb2M6c2NlbmFyaW8+Ci0gKiAgICAgaXQoJ3Nob3VsZCBldmFsdWF0ZSB0
aGUgZXhwcmVzc2lvbiBpZiBjaGFuZ2luZyBmcm9tIHZpZXcnLCBmdW5jdGlvbigpIHsKLSAqICAg
ICAgIGV4cGVjdChiaW5kaW5nKCdjb3VudGVyJykpLnRvRXF1YWwoJzAnKTsKLSAqICAgICAgIGVs
ZW1lbnQoJyNuZy1jaGFuZ2UtZXhhbXBsZTEnKS5jbGljaygpOwotICogICAgICAgZXhwZWN0KGJp
bmRpbmcoJ2NvdW50ZXInKSkudG9FcXVhbCgnMScpOwotICogICAgICAgZXhwZWN0KGJpbmRpbmco
J2NvbmZpcm1lZCcpKS50b0VxdWFsKCd0cnVlJyk7Ci0gKiAgICAgfSk7Ci0gKgotICogICAgIGl0
KCdzaG91bGQgbm90IGV2YWx1YXRlIHRoZSBleHByZXNzaW9uIGlmIGNoYW5naW5nIGZyb20gbW9k
ZWwnLCBmdW5jdGlvbigpIHsKLSAqICAgICAgIGVsZW1lbnQoJyNuZy1jaGFuZ2UtZXhhbXBsZTIn
KS5jbGljaygpOwotICogICAgICAgZXhwZWN0KGJpbmRpbmcoJ2NvdW50ZXInKSkudG9FcXVhbCgn
MCcpOwotICogICAgICAgZXhwZWN0KGJpbmRpbmcoJ2NvbmZpcm1lZCcpKS50b0VxdWFsKCd0cnVl
Jyk7Ci0gKiAgICAgfSk7Ci0gKiAgIDwvZG9jOnNjZW5hcmlvPgotICogPC9kb2M6ZXhhbXBsZT4K
LSAqLwotdmFyIG5nQ2hhbmdlRGlyZWN0aXZlID0gdmFsdWVGbih7Ci0gIHJlcXVpcmU6ICduZ01v
ZGVsJywKLSAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwpIHsKLSAg
ICBjdHJsLiR2aWV3Q2hhbmdlTGlzdGVuZXJzLnB1c2goZnVuY3Rpb24oKSB7Ci0gICAgICBzY29w
ZS4kZXZhbChhdHRyLm5nQ2hhbmdlKTsKLSAgICB9KTsKLSAgfQotfSk7Ci0KLQotdmFyIHJlcXVp
cmVkRGlyZWN0aXZlID0gZnVuY3Rpb24oKSB7Ci0gIHJldHVybiB7Ci0gICAgcmVxdWlyZTogJz9u
Z01vZGVsJywKLSAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxtLCBhdHRyLCBjdHJsKSB7Ci0g
ICAgICBpZiAoIWN0cmwpIHJldHVybjsKLSAgICAgIGF0dHIucmVxdWlyZWQgPSB0cnVlOyAvLyBm
b3JjZSB0cnV0aHkgaW4gY2FzZSB3ZSBhcmUgb24gbm9uIGlucHV0IGVsZW1lbnQKLQotICAgICAg
dmFyIHZhbGlkYXRvciA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICAgIGlmIChhdHRyLnJlcXVp
cmVkICYmIChpc0VtcHR5KHZhbHVlKSB8fCB2YWx1ZSA9PT0gZmFsc2UpKSB7Ci0gICAgICAgICAg
Y3RybC4kc2V0VmFsaWRpdHkoJ3JlcXVpcmVkJywgZmFsc2UpOwotICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBjdHJsLiRzZXRWYWxpZGl0eSgncmVxdWlyZWQn
LCB0cnVlKTsKLSAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgIH0KLSAgICAgIH07Ci0K
LSAgICAgIGN0cmwuJGZvcm1hdHRlcnMucHVzaCh2YWxpZGF0b3IpOwotICAgICAgY3RybC4kcGFy
c2Vycy51bnNoaWZ0KHZhbGlkYXRvcik7Ci0KLSAgICAgIGF0dHIuJG9ic2VydmUoJ3JlcXVpcmVk
JywgZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhbGlkYXRvcihjdHJsLiR2aWV3VmFsdWUpOwotICAg
ICAgfSk7Ci0gICAgfQotICB9OwotfTsKLQotCi0vKioKLSAqIEBuZ2RvYyBkaXJlY3RpdmUKLSAq
IEBuYW1lIG5nLmRpcmVjdGl2ZTpuZ0xpc3QKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIFRleHQg
aW5wdXQgdGhhdCBjb252ZXJ0cyBiZXR3ZWVuIGNvbW1hLXNlcGFyYXRlZCBzdHJpbmcgaW50byBh
biBhcnJheSBvZiBzdHJpbmdzLgotICoKLSAqIEBlbGVtZW50IGlucHV0Ci0gKiBAcGFyYW0ge3N0
cmluZz19IG5nTGlzdCBvcHRpb25hbCBkZWxpbWl0ZXIgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBz
cGxpdCB0aGUgdmFsdWUuIElmCi0gKiAgIHNwZWNpZmllZCBpbiBmb3JtIGAvc29tZXRoaW5nL2Ag
dGhlbiB0aGUgdmFsdWUgd2lsbCBiZSBjb252ZXJ0ZWQgaW50byBhIHJlZ3VsYXIgZXhwcmVzc2lv
bi4KLSAqCi0gKiBAZXhhbXBsZQotICAgIDxkb2M6ZXhhbXBsZT4KLSAgICAgIDxkb2M6c291cmNl
PgotICAgICAgIDxzY3JpcHQ+Ci0gICAgICAgICBmdW5jdGlvbiBDdHJsKCRzY29wZSkgewotICAg
ICAgICAgICAkc2NvcGUubmFtZXMgPSBbJ2lnb3InLCAnbWlza28nLCAndm9qdGEnXTsKLSAgICAg
ICAgIH0KLSAgICAgICA8L3NjcmlwdD4KLSAgICAgICA8Zm9ybSBuYW1lPSJteUZvcm0iIG5nLWNv
bnRyb2xsZXI9IkN0cmwiPgotICAgICAgICAgTGlzdDogPGlucHV0IG5hbWU9Im5hbWVzSW5wdXQi
IG5nLW1vZGVsPSJuYW1lcyIgbmctbGlzdCByZXF1aXJlZD4KLSAgICAgICAgIDxzcGFuIGNsYXNz
PSJlcnJvciIgbmctc2hvdz0ibXlGb3JtLmxpc3QuJGVycm9yLnJlcXVpcmVkIj4KLSAgICAgICAg
ICAgUmVxdWlyZWQhPC9zcGFuPgotICAgICAgICAgPHR0Pm5hbWVzID0ge3tuYW1lc319PC90dD48
YnIvPgotICAgICAgICAgPHR0Pm15Rm9ybS5uYW1lc0lucHV0LiR2YWxpZCA9IHt7bXlGb3JtLm5h
bWVzSW5wdXQuJHZhbGlkfX08L3R0Pjxici8+Ci0gICAgICAgICA8dHQ+bXlGb3JtLm5hbWVzSW5w
dXQuJGVycm9yID0ge3tteUZvcm0ubmFtZXNJbnB1dC4kZXJyb3J9fTwvdHQ+PGJyLz4KLSAgICAg
ICAgIDx0dD5teUZvcm0uJHZhbGlkID0ge3tteUZvcm0uJHZhbGlkfX08L3R0Pjxici8+Ci0gICAg
ICAgICA8dHQ+bXlGb3JtLiRlcnJvci5yZXF1aXJlZCA9IHt7ISFteUZvcm0uJGVycm9yLnJlcXVp
cmVkfX08L3R0Pjxici8+Ci0gICAgICAgIDwvZm9ybT4KLSAgICAgIDwvZG9jOnNvdXJjZT4KLSAg
ICAgIDxkb2M6c2NlbmFyaW8+Ci0gICAgICAgIGl0KCdzaG91bGQgaW5pdGlhbGl6ZSB0byBtb2Rl
bCcsIGZ1bmN0aW9uKCkgewotICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCduYW1lcycpKS50b0Vx
dWFsKCdbImlnb3IiLCJtaXNrbyIsInZvanRhIl0nKTsKLSAgICAgICAgICBleHBlY3QoYmluZGlu
ZygnbXlGb3JtLm5hbWVzSW5wdXQuJHZhbGlkJykpLnRvRXF1YWwoJ3RydWUnKTsKLSAgICAgICAg
fSk7Ci0KLSAgICAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIGVtcHR5JywgZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgaW5wdXQoJ25hbWVzJykuZW50ZXIoJycpOwotICAgICAgICAgIGV4cGVj
dChiaW5kaW5nKCduYW1lcycpKS50b0VxdWFsKCdbXScpOwotICAgICAgICAgIGV4cGVjdChiaW5k
aW5nKCdteUZvcm0ubmFtZXNJbnB1dC4kdmFsaWQnKSkudG9FcXVhbCgnZmFsc2UnKTsKLSAgICAg
ICAgfSk7Ci0gICAgICA8L2RvYzpzY2VuYXJpbz4KLSAgICA8L2RvYzpleGFtcGxlPgotICovCi12
YXIgbmdMaXN0RGlyZWN0aXZlID0gZnVuY3Rpb24oKSB7Ci0gIHJldHVybiB7Ci0gICAgcmVxdWly
ZTogJ25nTW9kZWwnLAotICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBj
dHJsKSB7Ci0gICAgICB2YXIgbWF0Y2ggPSAvXC8oLiopXC8vLmV4ZWMoYXR0ci5uZ0xpc3QpLAot
ICAgICAgICAgIHNlcGFyYXRvciA9IG1hdGNoICYmIG5ldyBSZWdFeHAobWF0Y2hbMV0pIHx8IGF0
dHIubmdMaXN0IHx8ICcsJzsKLQotICAgICAgdmFyIHBhcnNlID0gZnVuY3Rpb24odmlld1ZhbHVl
KSB7Ci0gICAgICAgIHZhciBsaXN0ID0gW107Ci0KLSAgICAgICAgaWYgKHZpZXdWYWx1ZSkgewot
ICAgICAgICAgIGZvckVhY2godmlld1ZhbHVlLnNwbGl0KHNlcGFyYXRvciksIGZ1bmN0aW9uKHZh
bHVlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUpIGxpc3QucHVzaCh0cmltKHZhbHVlKSk7Ci0g
ICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbGlzdDsKLSAgICAgIH07
Ci0KLSAgICAgIGN0cmwuJHBhcnNlcnMucHVzaChwYXJzZSk7Ci0gICAgICBjdHJsLiRmb3JtYXR0
ZXJzLnB1c2goZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7
Ci0gICAgICAgICAgcmV0dXJuIHZhbHVlLmpvaW4oJywgJyk7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gdW5kZWZpbmVkOwotICAgICAgfSk7Ci0gICAgfQotICB9OwotfTsKLQotCi12YXIg
Q09OU1RBTlRfVkFMVUVfUkVHRVhQID0gL14odHJ1ZXxmYWxzZXxcZCspJC87Ci0KLXZhciBuZ1Zh
bHVlRGlyZWN0aXZlID0gZnVuY3Rpb24oKSB7Ci0gIHJldHVybiB7Ci0gICAgcHJpb3JpdHk6IDEw
MCwKLSAgICBjb21waWxlOiBmdW5jdGlvbih0cGwsIHRwbEF0dHIpIHsKLSAgICAgIGlmIChDT05T
VEFOVF9WQUxVRV9SRUdFWFAudGVzdCh0cGxBdHRyLm5nVmFsdWUpKSB7Ci0gICAgICAgIHJldHVy
biBmdW5jdGlvbihzY29wZSwgZWxtLCBhdHRyKSB7Ci0gICAgICAgICAgYXR0ci4kc2V0KCd2YWx1
ZScsIHNjb3BlLiRldmFsKGF0dHIubmdWYWx1ZSkpOwotICAgICAgICB9OwotICAgICAgfSBlbHNl
IHsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBlbG0sIGF0dHIpIHsKLSAgICAgICAg
ICBzY29wZS4kd2F0Y2goYXR0ci5uZ1ZhbHVlLCBmdW5jdGlvbiB2YWx1ZVdhdGNoQWN0aW9uKHZh
bHVlKSB7Ci0gICAgICAgICAgICBhdHRyLiRzZXQoJ3ZhbHVlJywgdmFsdWUsIGZhbHNlKTsKLSAg
ICAgICAgICB9KTsKLSAgICAgICAgfTsKLSAgICAgIH0KLSAgICB9Ci0gIH07Ci19OwotCi0vKioK
LSAqIEBuZ2RvYyBkaXJlY3RpdmUKLSAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpuZ0JpbmQKLSAqCi0g
KiBAZGVzY3JpcHRpb24KLSAqIFRoZSBgbmdCaW5kYCBhdHRyaWJ1dGUgdGVsbHMgQW5ndWxhciB0
byByZXBsYWNlIHRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIHNwZWNpZmllZCBIVE1MIGVsZW1lbnQK
LSAqIHdpdGggdGhlIHZhbHVlIG9mIGEgZ2l2ZW4gZXhwcmVzc2lvbiwgYW5kIHRvIHVwZGF0ZSB0
aGUgdGV4dCBjb250ZW50IHdoZW4gdGhlIHZhbHVlIG9mIHRoYXQKLSAqIGV4cHJlc3Npb24gY2hh
bmdlcy4KLSAqCi0gKiBUeXBpY2FsbHksIHlvdSBkb24ndCB1c2UgYG5nQmluZGAgZGlyZWN0bHks
IGJ1dCBpbnN0ZWFkIHlvdSB1c2UgdGhlIGRvdWJsZSBjdXJseSBtYXJrdXAgbGlrZQotICogYHt7
IGV4cHJlc3Npb24gfX1gIHdoaWNoIGlzIHNpbWlsYXIgYnV0IGxlc3MgdmVyYm9zZS4KLSAqCi0g
KiBPbmUgc2NlbmFyaW8gaW4gd2hpY2ggdGhlIHVzZSBvZiBgbmdCaW5kYCBpcyBwcmVmZXJyZWQg
b3ZlciBge3sgZXhwcmVzc2lvbiB9fWAgYmluZGluZyBpcyB3aGVuCi0gKiBpdCdzIGRlc2lyYWJs
ZSB0byBwdXQgYmluZGluZ3MgaW50byB0ZW1wbGF0ZSB0aGF0IGlzIG1vbWVudGFyaWx5IGRpc3Bs
YXllZCBieSB0aGUgYnJvd3NlciBpbiBpdHMKLSAqIHJhdyBzdGF0ZSBiZWZvcmUgQW5ndWxhciBj
b21waWxlcyBpdC4gU2luY2UgYG5nQmluZGAgaXMgYW4gZWxlbWVudCBhdHRyaWJ1dGUsIGl0IG1h
a2VzIHRoZQotICogYmluZGluZ3MgaW52aXNpYmxlIHRvIHRoZSB1c2VyIHdoaWxlIHRoZSBwYWdl
IGlzIGxvYWRpbmcuCi0gKgotICogQW4gYWx0ZXJuYXRpdmUgc29sdXRpb24gdG8gdGhpcyBwcm9i
bGVtIHdvdWxkIGJlIHVzaW5nIHRoZQotICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0Nsb2FrIG5n
Q2xvYWt9IGRpcmVjdGl2ZS4KLSAqCi0gKgotICogQGVsZW1lbnQgQU5ZCi0gKiBAcGFyYW0ge2V4
cHJlc3Npb259IG5nQmluZCB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBl
dmFsdWF0ZS4KLSAqCi0gKiBAZXhhbXBsZQotICogRW50ZXIgYSBuYW1lIGluIHRoZSBMaXZlIFBy
ZXZpZXcgdGV4dCBib3g7IHRoZSBncmVldGluZyBiZWxvdyB0aGUgdGV4dCBib3ggY2hhbmdlcyBp
bnN0YW50bHkuCi0gICA8ZG9jOmV4YW1wbGU+Ci0gICAgIDxkb2M6c291cmNlPgotICAgICAgIDxz
Y3JpcHQ+Ci0gICAgICAgICBmdW5jdGlvbiBDdHJsKCRzY29wZSkgewotICAgICAgICAgICAkc2Nv
cGUubmFtZSA9ICdXaGlybGVkJzsKLSAgICAgICAgIH0KLSAgICAgICA8L3NjcmlwdD4KLSAgICAg
ICA8ZGl2IG5nLWNvbnRyb2xsZXI9IkN0cmwiPgotICAgICAgICAgRW50ZXIgbmFtZTogPGlucHV0
IHR5cGU9InRleHQiIG5nLW1vZGVsPSJuYW1lIj48YnI+Ci0gICAgICAgICBIZWxsbyA8c3BhbiBu
Zy1iaW5kPSJuYW1lIj48L3NwYW4+IQotICAgICAgIDwvZGl2PgotICAgICA8L2RvYzpzb3VyY2U+
Ci0gICAgIDxkb2M6c2NlbmFyaW8+Ci0gICAgICAgaXQoJ3Nob3VsZCBjaGVjayBuZy1iaW5kJywg
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICBleHBlY3QodXNpbmcoJy5kb2MtZXhhbXBsZS1saXZlJyku
YmluZGluZygnbmFtZScpKS50b0JlKCdXaGlybGVkJyk7Ci0gICAgICAgICB1c2luZygnLmRvYy1l
eGFtcGxlLWxpdmUnKS5pbnB1dCgnbmFtZScpLmVudGVyKCd3b3JsZCcpOwotICAgICAgICAgZXhw
ZWN0KHVzaW5nKCcuZG9jLWV4YW1wbGUtbGl2ZScpLmJpbmRpbmcoJ25hbWUnKSkudG9CZSgnd29y
bGQnKTsKLSAgICAgICB9KTsKLSAgICAgPC9kb2M6c2NlbmFyaW8+Ci0gICA8L2RvYzpleGFtcGxl
PgotICovCi12YXIgbmdCaW5kRGlyZWN0aXZlID0gbmdEaXJlY3RpdmUoZnVuY3Rpb24oc2NvcGUs
IGVsZW1lbnQsIGF0dHIpIHsKLSAgZWxlbWVudC5hZGRDbGFzcygnbmctYmluZGluZycpLmRhdGEo
JyRiaW5kaW5nJywgYXR0ci5uZ0JpbmQpOwotICBzY29wZS4kd2F0Y2goYXR0ci5uZ0JpbmQsIGZ1
bmN0aW9uIG5nQmluZFdhdGNoQWN0aW9uKHZhbHVlKSB7Ci0gICAgZWxlbWVudC50ZXh0KHZhbHVl
ID09IHVuZGVmaW5lZCA/ICcnIDogdmFsdWUpOwotICB9KTsKLX0pOwotCi0KLS8qKgotICogQG5n
ZG9jIGRpcmVjdGl2ZQotICogQG5hbWUgbmcuZGlyZWN0aXZlOm5nQmluZFRlbXBsYXRlCi0gKgot
ICogQGRlc2NyaXB0aW9uCi0gKiBUaGUgYG5nQmluZFRlbXBsYXRlYCBkaXJlY3RpdmUgc3BlY2lm
aWVzIHRoYXQgdGhlIGVsZW1lbnQKLSAqIHRleHQgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggdGhl
IHRlbXBsYXRlIGluIG5nQmluZFRlbXBsYXRlLgotICogVW5saWtlIG5nQmluZCB0aGUgbmdCaW5k
VGVtcGxhdGUgY2FuIGNvbnRhaW4gbXVsdGlwbGUgYHt7YCBgfX1gCi0gKiBleHByZXNzaW9ucy4g
KFRoaXMgaXMgcmVxdWlyZWQgc2luY2Ugc29tZSBIVE1MIGVsZW1lbnRzCi0gKiBjYW4gbm90IGhh
dmUgU1BBTiBlbGVtZW50cyBzdWNoIGFzIFRJVExFLCBvciBPUFRJT04gdG8gbmFtZSBhIGZldy4p
Ci0gKgotICogQGVsZW1lbnQgQU5ZCi0gKiBAcGFyYW0ge3N0cmluZ30gbmdCaW5kVGVtcGxhdGUg
dGVtcGxhdGUgb2YgZm9ybQotICogICA8dHQ+e3s8L3R0PiA8dHQ+ZXhwcmVzc2lvbjwvdHQ+IDx0
dD59fTwvdHQ+IHRvIGV2YWwuCi0gKgotICogQGV4YW1wbGUKLSAqIFRyeSBpdCBoZXJlOiBlbnRl
ciB0ZXh0IGluIHRleHQgYm94IGFuZCB3YXRjaCB0aGUgZ3JlZXRpbmcgY2hhbmdlLgotICAgPGRv
YzpleGFtcGxlPgotICAgICA8ZG9jOnNvdXJjZT4KLSAgICAgICA8c2NyaXB0PgotICAgICAgICAg
ZnVuY3Rpb24gQ3RybCgkc2NvcGUpIHsKLSAgICAgICAgICAgJHNjb3BlLnNhbHV0YXRpb24gPSAn
SGVsbG8nOwotICAgICAgICAgICAkc2NvcGUubmFtZSA9ICdXb3JsZCc7Ci0gICAgICAgICB9Ci0g
ICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgPGRpdiBuZy1jb250cm9sbGVyPSJDdHJsIj4KLSAgICAg
ICAgU2FsdXRhdGlvbjogPGlucHV0IHR5cGU9InRleHQiIG5nLW1vZGVsPSJzYWx1dGF0aW9uIj48
YnI+Ci0gICAgICAgIE5hbWU6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuZy1tb2RlbD0ibmFtZSI+PGJy
PgotICAgICAgICA8cHJlIG5nLWJpbmQtdGVtcGxhdGU9Int7c2FsdXRhdGlvbn19IHt7bmFtZX19
ISI+PC9wcmU+Ci0gICAgICAgPC9kaXY+Ci0gICAgIDwvZG9jOnNvdXJjZT4KLSAgICAgPGRvYzpz
Y2VuYXJpbz4KLSAgICAgICBpdCgnc2hvdWxkIGNoZWNrIG5nLWJpbmQnLCBmdW5jdGlvbigpIHsK
LSAgICAgICAgIGV4cGVjdCh1c2luZygnLmRvYy1leGFtcGxlLWxpdmUnKS5iaW5kaW5nKCdzYWx1
dGF0aW9uJykpLgotICAgICAgICAgICB0b0JlKCdIZWxsbycpOwotICAgICAgICAgZXhwZWN0KHVz
aW5nKCcuZG9jLWV4YW1wbGUtbGl2ZScpLmJpbmRpbmcoJ25hbWUnKSkuCi0gICAgICAgICAgIHRv
QmUoJ1dvcmxkJyk7Ci0gICAgICAgICB1c2luZygnLmRvYy1leGFtcGxlLWxpdmUnKS5pbnB1dCgn
c2FsdXRhdGlvbicpLmVudGVyKCdHcmVldGluZ3MnKTsKLSAgICAgICAgIHVzaW5nKCcuZG9jLWV4
YW1wbGUtbGl2ZScpLmlucHV0KCduYW1lJykuZW50ZXIoJ3VzZXInKTsKLSAgICAgICAgIGV4cGVj
dCh1c2luZygnLmRvYy1leGFtcGxlLWxpdmUnKS5iaW5kaW5nKCdzYWx1dGF0aW9uJykpLgotICAg
ICAgICAgICB0b0JlKCdHcmVldGluZ3MnKTsKLSAgICAgICAgIGV4cGVjdCh1c2luZygnLmRvYy1l
eGFtcGxlLWxpdmUnKS5iaW5kaW5nKCduYW1lJykpLgotICAgICAgICAgICB0b0JlKCd1c2VyJyk7
Ci0gICAgICAgfSk7Ci0gICAgIDwvZG9jOnNjZW5hcmlvPgotICAgPC9kb2M6ZXhhbXBsZT4KLSAq
LwotdmFyIG5nQmluZFRlbXBsYXRlRGlyZWN0aXZlID0gWyckaW50ZXJwb2xhdGUnLCBmdW5jdGlv
bigkaW50ZXJwb2xhdGUpIHsKLSAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRy
KSB7Ci0gICAgLy8gVE9ETzogbW92ZSB0aGlzIHRvIHNjZW5hcmlvIHJ1bm5lcgotICAgIHZhciBp
bnRlcnBvbGF0ZUZuID0gJGludGVycG9sYXRlKGVsZW1lbnQuYXR0cihhdHRyLiRhdHRyLm5nQmlu
ZFRlbXBsYXRlKSk7Ci0gICAgZWxlbWVudC5hZGRDbGFzcygnbmctYmluZGluZycpLmRhdGEoJyRi
aW5kaW5nJywgaW50ZXJwb2xhdGVGbik7Ci0gICAgYXR0ci4kb2JzZXJ2ZSgnbmdCaW5kVGVtcGxh
dGUnLCBmdW5jdGlvbih2YWx1ZSkgewotICAgICAgZWxlbWVudC50ZXh0KHZhbHVlKTsKLSAgICB9
KTsKLSAgfQotfV07Ci0KLQotLyoqCi0gKiBAbmdkb2MgZGlyZWN0aXZlCi0gKiBAbmFtZSBuZy5k
aXJlY3RpdmU6bmdCaW5kSHRtbFVuc2FmZQotICoKLSAqIEBkZXNjcmlwdGlvbgotICogQ3JlYXRl
cyBhIGJpbmRpbmcgdGhhdCB3aWxsIGlubmVySFRNTCB0aGUgcmVzdWx0IG9mIGV2YWx1YXRpbmcg
dGhlIGBleHByZXNzaW9uYCBpbnRvIHRoZSBjdXJyZW50Ci0gKiBlbGVtZW50LiAqVGhlIGlubmVy
SFRNTC1lZCBjb250ZW50IHdpbGwgbm90IGJlIHNhbml0aXplZCEqIFlvdSBzaG91bGQgdXNlIHRo
aXMgZGlyZWN0aXZlIG9ubHkgaWYKLSAqIHtAbGluayBuZ1Nhbml0aXplLmRpcmVjdGl2ZTpuZ0Jp
bmRIdG1sIG5nQmluZEh0bWx9IGRpcmVjdGl2ZSBpcyB0b28KLSAqIHJlc3RyaWN0aXZlIGFuZCB3
aGVuIHlvdSBhYnNvbHV0ZWx5IHRydXN0IHRoZSBzb3VyY2Ugb2YgdGhlIGNvbnRlbnQgeW91IGFy
ZSBiaW5kaW5nIHRvLgotICoKLSAqIFNlZSB7QGxpbmsgbmdTYW5pdGl6ZS4kc2FuaXRpemUgJHNh
bml0aXplfSBkb2NzIGZvciBleGFtcGxlcy4KLSAqCi0gKiBAZWxlbWVudCBBTlkKLSAqIEBwYXJh
bSB7ZXhwcmVzc2lvbn0gbmdCaW5kSHRtbFVuc2FmZSB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBF
eHByZXNzaW9ufSB0byBldmFsdWF0ZS4KLSAqLwotdmFyIG5nQmluZEh0bWxVbnNhZmVEaXJlY3Rp
dmUgPSBbZnVuY3Rpb24oKSB7Ci0gIHJldHVybiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0
cikgewotICAgIGVsZW1lbnQuYWRkQ2xhc3MoJ25nLWJpbmRpbmcnKS5kYXRhKCckYmluZGluZycs
IGF0dHIubmdCaW5kSHRtbFVuc2FmZSk7Ci0gICAgc2NvcGUuJHdhdGNoKGF0dHIubmdCaW5kSHRt
bFVuc2FmZSwgZnVuY3Rpb24gbmdCaW5kSHRtbFVuc2FmZVdhdGNoQWN0aW9uKHZhbHVlKSB7Ci0g
ICAgICBlbGVtZW50Lmh0bWwodmFsdWUgfHwgJycpOwotICAgIH0pOwotICB9OwotfV07Ci0KLWZ1
bmN0aW9uIGNsYXNzRGlyZWN0aXZlKG5hbWUsIHNlbGVjdG9yKSB7Ci0gIG5hbWUgPSAnbmdDbGFz
cycgKyBuYW1lOwotICByZXR1cm4gbmdEaXJlY3RpdmUoZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQs
IGF0dHIpIHsKLSAgICB2YXIgb2xkVmFsID0gdW5kZWZpbmVkOwotCi0gICAgc2NvcGUuJHdhdGNo
KGF0dHJbbmFtZV0sIG5nQ2xhc3NXYXRjaEFjdGlvbiwgdHJ1ZSk7Ci0KLSAgICBhdHRyLiRvYnNl
cnZlKCdjbGFzcycsIGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICB2YXIgbmdDbGFzcyA9IHNjb3Bl
LiRldmFsKGF0dHJbbmFtZV0pOwotICAgICAgbmdDbGFzc1dhdGNoQWN0aW9uKG5nQ2xhc3MsIG5n
Q2xhc3MpOwotICAgIH0pOwotCi0KLSAgICBpZiAobmFtZSAhPT0gJ25nQ2xhc3MnKSB7Ci0gICAg
ICBzY29wZS4kd2F0Y2goJyRpbmRleCcsIGZ1bmN0aW9uKCRpbmRleCwgb2xkJGluZGV4KSB7Ci0g
ICAgICAgIHZhciBtb2QgPSAkaW5kZXggJiAxOwotICAgICAgICBpZiAobW9kICE9PSBvbGQkaW5k
ZXggJiAxKSB7Ci0gICAgICAgICAgaWYgKG1vZCA9PT0gc2VsZWN0b3IpIHsKLSAgICAgICAgICAg
IGFkZENsYXNzKHNjb3BlLiRldmFsKGF0dHJbbmFtZV0pKTsKLSAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgcmVtb3ZlQ2xhc3Moc2NvcGUuJGV2YWwoYXR0cltuYW1lXSkpOwotICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgfQotCi0KLSAgICBmdW5jdGlvbiBuZ0Ns
YXNzV2F0Y2hBY3Rpb24obmV3VmFsKSB7Ci0gICAgICBpZiAoc2VsZWN0b3IgPT09IHRydWUgfHwg
c2NvcGUuJGluZGV4ICUgMiA9PT0gc2VsZWN0b3IpIHsKLSAgICAgICAgaWYgKG9sZFZhbCAmJiAh
ZXF1YWxzKG5ld1ZhbCxvbGRWYWwpKSB7Ci0gICAgICAgICAgcmVtb3ZlQ2xhc3Mob2xkVmFsKTsK
LSAgICAgICAgfQotICAgICAgICBhZGRDbGFzcyhuZXdWYWwpOwotICAgICAgfQotICAgICAgb2xk
VmFsID0gY29weShuZXdWYWwpOwotICAgIH0KLQotCi0gICAgZnVuY3Rpb24gcmVtb3ZlQ2xhc3Mo
Y2xhc3NWYWwpIHsKLSAgICAgIGlmIChpc09iamVjdChjbGFzc1ZhbCkgJiYgIWlzQXJyYXkoY2xh
c3NWYWwpKSB7Ci0gICAgICAgIGNsYXNzVmFsID0gbWFwKGNsYXNzVmFsLCBmdW5jdGlvbih2LCBr
KSB7IGlmICh2KSByZXR1cm4gayB9KTsKLSAgICAgIH0KLSAgICAgIGVsZW1lbnQucmVtb3ZlQ2xh
c3MoaXNBcnJheShjbGFzc1ZhbCkgPyBjbGFzc1ZhbC5qb2luKCcgJykgOiBjbGFzc1ZhbCk7Ci0g
ICAgfQotCi0KLSAgICBmdW5jdGlvbiBhZGRDbGFzcyhjbGFzc1ZhbCkgewotICAgICAgaWYgKGlz
T2JqZWN0KGNsYXNzVmFsKSAmJiAhaXNBcnJheShjbGFzc1ZhbCkpIHsKLSAgICAgICAgY2xhc3NW
YWwgPSBtYXAoY2xhc3NWYWwsIGZ1bmN0aW9uKHYsIGspIHsgaWYgKHYpIHJldHVybiBrIH0pOwot
ICAgICAgfQotICAgICAgaWYgKGNsYXNzVmFsKSB7Ci0gICAgICAgIGVsZW1lbnQuYWRkQ2xhc3Mo
aXNBcnJheShjbGFzc1ZhbCkgPyBjbGFzc1ZhbC5qb2luKCcgJykgOiBjbGFzc1ZhbCk7Ci0gICAg
ICB9Ci0gICAgfQotICB9KTsKLX0KLQotLyoqCi0gKiBAbmdkb2MgZGlyZWN0aXZlCi0gKiBAbmFt
ZSBuZy5kaXJlY3RpdmU6bmdDbGFzcwotICoKLSAqIEBkZXNjcmlwdGlvbgotICogVGhlIGBuZ0Ns
YXNzYCBhbGxvd3MgeW91IHRvIHNldCBDU1MgY2xhc3Mgb24gSFRNTCBlbGVtZW50IGR5bmFtaWNh
bGx5IGJ5IGRhdGFiaW5kaW5nIGFuCi0gKiBleHByZXNzaW9uIHRoYXQgcmVwcmVzZW50cyBhbGwg
Y2xhc3NlcyB0byBiZSBhZGRlZC4KLSAqCi0gKiBUaGUgZGlyZWN0aXZlIHdvbid0IGFkZCBkdXBs
aWNhdGUgY2xhc3NlcyBpZiBhIHBhcnRpY3VsYXIgY2xhc3Mgd2FzIGFscmVhZHkgc2V0LgotICoK
LSAqIFdoZW4gdGhlIGV4cHJlc3Npb24gY2hhbmdlcywgdGhlIHByZXZpb3VzbHkgYWRkZWQgY2xh
c3NlcyBhcmUgcmVtb3ZlZCBhbmQgb25seSB0aGVuIHRoZQotICogbmV3IGNsYXNzZXMgYXJlIGFk
ZGVkLgotICoKLSAqIEBlbGVtZW50IEFOWQotICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ0NsYXNz
IHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWwuIFRoZSByZXN1bHQK
LSAqICAgb2YgdGhlIGV2YWx1YXRpb24gY2FuIGJlIGEgc3RyaW5nIHJlcHJlc2VudGluZyBzcGFj
ZSBkZWxpbWl0ZWQgY2xhc3MKLSAqICAgbmFtZXMsIGFuIGFycmF5LCBvciBhIG1hcCBvZiBjbGFz
cyBuYW1lcyB0byBib29sZWFuIHZhbHVlcy4KLSAqCi0gKiBAZXhhbXBsZQotICAgPGV4YW1wbGU+
Ci0gICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgotICAgICAgPGlucHV0IHR5cGU9ImJ1dHRv
biIgdmFsdWU9InNldCIgbmctY2xpY2s9Im15VmFyPSdteS1jbGFzcyciPgotICAgICAgPGlucHV0
IHR5cGU9ImJ1dHRvbiIgdmFsdWU9ImNsZWFyIiBuZy1jbGljaz0ibXlWYXI9JyciPgotICAgICAg
PGJyPgotICAgICAgPHNwYW4gbmctY2xhc3M9Im15VmFyIj5TYW1wbGUgVGV4dDwvc3Bhbj4KLSAg
ICAgPC9maWxlPgotICAgICA8ZmlsZSBuYW1lPSJzdHlsZS5jc3MiPgotICAgICAgIC5teS1jbGFz
cyB7Ci0gICAgICAgICBjb2xvcjogcmVkOwotICAgICAgIH0KLSAgICAgPC9maWxlPgotICAgICA8
ZmlsZSBuYW1lPSJzY2VuYXJpby5qcyI+Ci0gICAgICAgaXQoJ3Nob3VsZCBjaGVjayBuZy1jbGFz
cycsIGZ1bmN0aW9uKCkgewotICAgICAgICAgZXhwZWN0KGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1s
aXZlIHNwYW4nKS5wcm9wKCdjbGFzc05hbWUnKSkubm90KCkuCi0gICAgICAgICAgIHRvTWF0Y2go
L215LWNsYXNzLyk7Ci0KLSAgICAgICAgIHVzaW5nKCcuZG9jLWV4YW1wbGUtbGl2ZScpLmVsZW1l
bnQoJzpidXR0b246Zmlyc3QnKS5jbGljaygpOwotCi0gICAgICAgICBleHBlY3QoZWxlbWVudCgn
LmRvYy1leGFtcGxlLWxpdmUgc3BhbicpLnByb3AoJ2NsYXNzTmFtZScpKS4KLSAgICAgICAgICAg
dG9NYXRjaCgvbXktY2xhc3MvKTsKLQotICAgICAgICAgdXNpbmcoJy5kb2MtZXhhbXBsZS1saXZl
JykuZWxlbWVudCgnOmJ1dHRvbjpsYXN0JykuY2xpY2soKTsKLQotICAgICAgICAgZXhwZWN0KGVs
ZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlIHNwYW4nKS5wcm9wKCdjbGFzc05hbWUnKSkubm90KCku
Ci0gICAgICAgICAgIHRvTWF0Y2goL215LWNsYXNzLyk7Ci0gICAgICAgfSk7Ci0gICAgIDwvZmls
ZT4KLSAgIDwvZXhhbXBsZT4KLSAqLwotdmFyIG5nQ2xhc3NEaXJlY3RpdmUgPSBjbGFzc0RpcmVj
dGl2ZSgnJywgdHJ1ZSk7Ci0KLS8qKgotICogQG5nZG9jIGRpcmVjdGl2ZQotICogQG5hbWUgbmcu
ZGlyZWN0aXZlOm5nQ2xhc3NPZGQKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIFRoZSBgbmdDbGFz
c09kZGAgYW5kIGBuZ0NsYXNzRXZlbmAgZGlyZWN0aXZlcyB3b3JrIGV4YWN0bHkgYXMKLSAqIHtA
bGluayBuZy5kaXJlY3RpdmU6bmdDbGFzcyBuZ0NsYXNzfSwgZXhjZXB0IGl0IHdvcmtzIGluCi0g
KiBjb25qdW5jdGlvbiB3aXRoIGBuZ1JlcGVhdGAgYW5kIHRha2VzIGFmZmVjdCBvbmx5IG9uIG9k
ZCAoZXZlbikgcm93cy4KLSAqCi0gKiBUaGlzIGRpcmVjdGl2ZSBjYW4gYmUgYXBwbGllZCBvbmx5
IHdpdGhpbiBhIHNjb3BlIG9mIGFuCi0gKiB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nUmVwZWF0IG5n
UmVwZWF0fS4KLSAqCi0gKiBAZWxlbWVudCBBTlkKLSAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdD
bGFzc09kZCB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsLiBUaGUg
cmVzdWx0Ci0gKiAgIG9mIHRoZSBldmFsdWF0aW9uIGNhbiBiZSBhIHN0cmluZyByZXByZXNlbnRp
bmcgc3BhY2UgZGVsaW1pdGVkIGNsYXNzIG5hbWVzIG9yIGFuIGFycmF5LgotICoKLSAqIEBleGFt
cGxlCi0gICA8ZXhhbXBsZT4KLSAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+Ci0gICAgICAg
IDxvbCBuZy1pbml0PSJuYW1lcz1bJ0pvaG4nLCAnTWFyeScsICdDYXRlJywgJ1N1eiddIj4KLSAg
ICAgICAgICA8bGkgbmctcmVwZWF0PSJuYW1lIGluIG5hbWVzIj4KLSAgICAgICAgICAgPHNwYW4g
bmctY2xhc3Mtb2RkPSInb2RkJyIgbmctY2xhc3MtZXZlbj0iJ2V2ZW4nIj4KLSAgICAgICAgICAg
ICB7e25hbWV9fQotICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgPC9saT4KLSAgICAgICAg
PC9vbD4KLSAgICAgPC9maWxlPgotICAgICA8ZmlsZSBuYW1lPSJzdHlsZS5jc3MiPgotICAgICAg
IC5vZGQgewotICAgICAgICAgY29sb3I6IHJlZDsKLSAgICAgICB9Ci0gICAgICAgLmV2ZW4gewot
ICAgICAgICAgY29sb3I6IGJsdWU7Ci0gICAgICAgfQotICAgICA8L2ZpbGU+Ci0gICAgIDxmaWxl
IG5hbWU9InNjZW5hcmlvLmpzIj4KLSAgICAgICBpdCgnc2hvdWxkIGNoZWNrIG5nLWNsYXNzLW9k
ZCBhbmQgbmctY2xhc3MtZXZlbicsIGZ1bmN0aW9uKCkgewotICAgICAgICAgZXhwZWN0KGVsZW1l
bnQoJy5kb2MtZXhhbXBsZS1saXZlIGxpOmZpcnN0IHNwYW4nKS5wcm9wKCdjbGFzc05hbWUnKSku
Ci0gICAgICAgICAgIHRvTWF0Y2goL29kZC8pOwotICAgICAgICAgZXhwZWN0KGVsZW1lbnQoJy5k
b2MtZXhhbXBsZS1saXZlIGxpOmxhc3Qgc3BhbicpLnByb3AoJ2NsYXNzTmFtZScpKS4KLSAgICAg
ICAgICAgdG9NYXRjaCgvZXZlbi8pOwotICAgICAgIH0pOwotICAgICA8L2ZpbGU+Ci0gICA8L2V4
YW1wbGU+Ci0gKi8KLXZhciBuZ0NsYXNzT2RkRGlyZWN0aXZlID0gY2xhc3NEaXJlY3RpdmUoJ09k
ZCcsIDApOwotCi0vKioKLSAqIEBuZ2RvYyBkaXJlY3RpdmUKLSAqIEBuYW1lIG5nLmRpcmVjdGl2
ZTpuZ0NsYXNzRXZlbgotICoKLSAqIEBkZXNjcmlwdGlvbgotICogVGhlIGBuZ0NsYXNzT2RkYCBh
bmQgYG5nQ2xhc3NFdmVuYCBkaXJlY3RpdmVzIHdvcmsgZXhhY3RseSBhcwotICoge0BsaW5rIG5n
LmRpcmVjdGl2ZTpuZ0NsYXNzIG5nQ2xhc3N9LCBleGNlcHQgaXQgd29ya3MgaW4KLSAqIGNvbmp1
bmN0aW9uIHdpdGggYG5nUmVwZWF0YCBhbmQgdGFrZXMgYWZmZWN0IG9ubHkgb24gb2RkIChldmVu
KSByb3dzLgotICoKLSAqIFRoaXMgZGlyZWN0aXZlIGNhbiBiZSBhcHBsaWVkIG9ubHkgd2l0aGlu
IGEgc2NvcGUgb2YgYW4KLSAqIHtAbGluayBuZy5kaXJlY3RpdmU6bmdSZXBlYXQgbmdSZXBlYXR9
LgotICoKLSAqIEBlbGVtZW50IEFOWQotICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ0NsYXNzRXZl
biB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsLiBUaGUKLSAqICAg
cmVzdWx0IG9mIHRoZSBldmFsdWF0aW9uIGNhbiBiZSBhIHN0cmluZyByZXByZXNlbnRpbmcgc3Bh
Y2UgZGVsaW1pdGVkIGNsYXNzIG5hbWVzIG9yIGFuIGFycmF5LgotICoKLSAqIEBleGFtcGxlCi0g
ICA8ZXhhbXBsZT4KLSAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+Ci0gICAgICAgIDxvbCBu
Zy1pbml0PSJuYW1lcz1bJ0pvaG4nLCAnTWFyeScsICdDYXRlJywgJ1N1eiddIj4KLSAgICAgICAg
ICA8bGkgbmctcmVwZWF0PSJuYW1lIGluIG5hbWVzIj4KLSAgICAgICAgICAgPHNwYW4gbmctY2xh
c3Mtb2RkPSInb2RkJyIgbmctY2xhc3MtZXZlbj0iJ2V2ZW4nIj4KLSAgICAgICAgICAgICB7e25h
bWV9fSAmbmJzcDsgJm5ic3A7ICZuYnNwOwotICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAg
PC9saT4KLSAgICAgICAgPC9vbD4KLSAgICAgPC9maWxlPgotICAgICA8ZmlsZSBuYW1lPSJzdHls
ZS5jc3MiPgotICAgICAgIC5vZGQgewotICAgICAgICAgY29sb3I6IHJlZDsKLSAgICAgICB9Ci0g
ICAgICAgLmV2ZW4gewotICAgICAgICAgY29sb3I6IGJsdWU7Ci0gICAgICAgfQotICAgICA8L2Zp
bGU+Ci0gICAgIDxmaWxlIG5hbWU9InNjZW5hcmlvLmpzIj4KLSAgICAgICBpdCgnc2hvdWxkIGNo
ZWNrIG5nLWNsYXNzLW9kZCBhbmQgbmctY2xhc3MtZXZlbicsIGZ1bmN0aW9uKCkgewotICAgICAg
ICAgZXhwZWN0KGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlIGxpOmZpcnN0IHNwYW4nKS5wcm9w
KCdjbGFzc05hbWUnKSkuCi0gICAgICAgICAgIHRvTWF0Y2goL29kZC8pOwotICAgICAgICAgZXhw
ZWN0KGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlIGxpOmxhc3Qgc3BhbicpLnByb3AoJ2NsYXNz
TmFtZScpKS4KLSAgICAgICAgICAgdG9NYXRjaCgvZXZlbi8pOwotICAgICAgIH0pOwotICAgICA8
L2ZpbGU+Ci0gICA8L2V4YW1wbGU+Ci0gKi8KLXZhciBuZ0NsYXNzRXZlbkRpcmVjdGl2ZSA9IGNs
YXNzRGlyZWN0aXZlKCdFdmVuJywgMSk7Ci0KLS8qKgotICogQG5nZG9jIGRpcmVjdGl2ZQotICog
QG5hbWUgbmcuZGlyZWN0aXZlOm5nQ2xvYWsKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIFRoZSBg
bmdDbG9ha2AgZGlyZWN0aXZlIGlzIHVzZWQgdG8gcHJldmVudCB0aGUgQW5ndWxhciBodG1sIHRl
bXBsYXRlIGZyb20gYmVpbmcgYnJpZWZseQotICogZGlzcGxheWVkIGJ5IHRoZSBicm93c2VyIGlu
IGl0cyByYXcgKHVuY29tcGlsZWQpIGZvcm0gd2hpbGUgeW91ciBhcHBsaWNhdGlvbiBpcyBsb2Fk
aW5nLiBVc2UgdGhpcwotICogZGlyZWN0aXZlIHRvIGF2b2lkIHRoZSB1bmRlc2lyYWJsZSBmbGlj
a2VyIGVmZmVjdCBjYXVzZWQgYnkgdGhlIGh0bWwgdGVtcGxhdGUgZGlzcGxheS4KLSAqCi0gKiBU
aGUgZGlyZWN0aXZlIGNhbiBiZSBhcHBsaWVkIHRvIHRoZSBgPGJvZHk+YCBlbGVtZW50LCBidXQg
dHlwaWNhbGx5IGEgZmluZS1ncmFpbmVkIGFwcGxpY2F0aW9uIGlzCi0gKiBwcmVmZXJlZCBpbiBv
cmRlciB0byBiZW5lZml0IGZyb20gcHJvZ3Jlc3NpdmUgcmVuZGVyaW5nIG9mIHRoZSBicm93c2Vy
IHZpZXcuCi0gKgotICogYG5nQ2xvYWtgIHdvcmtzIGluIGNvb3BlcmF0aW9uIHdpdGggYSBjc3Mg
cnVsZSB0aGF0IGlzIGVtYmVkZGVkIHdpdGhpbiBgYW5ndWxhci5qc2AgYW5kCi0gKiAgYGFuZ3Vs
YXIubWluLmpzYCBmaWxlcy4gRm9sbG93aW5nIGlzIHRoZSBjc3MgcnVsZToKLSAqCi0gKiA8cHJl
PgotICogW25nXDpjbG9ha10sIFtuZy1jbG9ha10sIFtkYXRhLW5nLWNsb2FrXSwgW3gtbmctY2xv
YWtdLCAubmctY2xvYWssIC54LW5nLWNsb2FrIHsKLSAqICAgZGlzcGxheTogbm9uZTsKLSAqIH0K
LSAqIDwvcHJlPgotICoKLSAqIFdoZW4gdGhpcyBjc3MgcnVsZSBpcyBsb2FkZWQgYnkgdGhlIGJy
b3dzZXIsIGFsbCBodG1sIGVsZW1lbnRzIChpbmNsdWRpbmcgdGhlaXIgY2hpbGRyZW4pIHRoYXQK
LSAqIGFyZSB0YWdnZWQgd2l0aCB0aGUgYG5nLWNsb2FrYCBkaXJlY3RpdmUgYXJlIGhpZGRlbi4g
V2hlbiBBbmd1bGFyIGNvbWVzIGFjcm9zcyB0aGlzIGRpcmVjdGl2ZQotICogZHVyaW5nIHRoZSBj
b21waWxhdGlvbiBvZiB0aGUgdGVtcGxhdGUgaXQgZGVsZXRlcyB0aGUgYG5nQ2xvYWtgIGVsZW1l
bnQgYXR0cmlidXRlLCB3aGljaAotICogbWFrZXMgdGhlIGNvbXBpbGVkIGVsZW1lbnQgdmlzaWJs
ZS4KLSAqCi0gKiBGb3IgdGhlIGJlc3QgcmVzdWx0LCBgYW5ndWxhci5qc2Agc2NyaXB0IG11c3Qg
YmUgbG9hZGVkIGluIHRoZSBoZWFkIHNlY3Rpb24gb2YgdGhlIGh0bWwgZmlsZTsKLSAqIGFsdGVy
bmF0aXZlbHksIHRoZSBjc3MgcnVsZSAoYWJvdmUpIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIGV4
dGVybmFsIHN0eWxlc2hlZXQgb2YgdGhlCi0gKiBhcHBsaWNhdGlvbi4KLSAqCi0gKiBMZWdhY3kg
YnJvd3NlcnMsIGxpa2UgSUU3LCBkbyBub3QgcHJvdmlkZSBhdHRyaWJ1dGUgc2VsZWN0b3Igc3Vw
cG9ydCAoYWRkZWQgaW4gQ1NTIDIuMSkgc28gdGhleQotICogY2Fubm90IG1hdGNoIHRoZSBgW25n
XDpjbG9ha11gIHNlbGVjdG9yLiBUbyB3b3JrIGFyb3VuZCB0aGlzIGxpbWl0YXRpb24sIHlvdSBt
dXN0IGFkZCB0aGUgY3NzCi0gKiBjbGFzcyBgbmdDbG9ha2AgaW4gYWRkaXRpb24gdG8gYG5nQ2xv
YWtgIGRpcmVjdGl2ZSBhcyBzaG93biBpbiB0aGUgZXhhbXBsZSBiZWxvdy4KLSAqCi0gKiBAZWxl
bWVudCBBTlkKLSAqCi0gKiBAZXhhbXBsZQotICAgPGRvYzpleGFtcGxlPgotICAgICA8ZG9jOnNv
dXJjZT4KLSAgICAgICAgPGRpdiBpZD0idGVtcGxhdGUxIiBuZy1jbG9haz57eyAnaGVsbG8nIH19
PC9kaXY+Ci0gICAgICAgIDxkaXYgaWQ9InRlbXBsYXRlMiIgbmctY2xvYWsgY2xhc3M9Im5nLWNs
b2FrIj57eyAnaGVsbG8gSUU3JyB9fTwvZGl2PgotICAgICA8L2RvYzpzb3VyY2U+Ci0gICAgIDxk
b2M6c2NlbmFyaW8+Ci0gICAgICAgaXQoJ3Nob3VsZCByZW1vdmUgdGhlIHRlbXBsYXRlIGRpcmVj
dGl2ZSBhbmQgY3NzIGNsYXNzJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICBleHBlY3QoZWxlbWVu
dCgnLmRvYy1leGFtcGxlLWxpdmUgI3RlbXBsYXRlMScpLmF0dHIoJ25nLWNsb2FrJykpLgotICAg
ICAgICAgICBub3QoKS50b0JlRGVmaW5lZCgpOwotICAgICAgICAgZXhwZWN0KGVsZW1lbnQoJy5k
b2MtZXhhbXBsZS1saXZlICN0ZW1wbGF0ZTInKS5hdHRyKCduZy1jbG9haycpKS4KLSAgICAgICAg
ICAgbm90KCkudG9CZURlZmluZWQoKTsKLSAgICAgICB9KTsKLSAgICAgPC9kb2M6c2NlbmFyaW8+
Ci0gICA8L2RvYzpleGFtcGxlPgotICoKLSAqLwotdmFyIG5nQ2xvYWtEaXJlY3RpdmUgPSBuZ0Rp
cmVjdGl2ZSh7Ci0gIGNvbXBpbGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHIpIHsKLSAgICBhdHRy
LiRzZXQoJ25nQ2xvYWsnLCB1bmRlZmluZWQpOwotICAgIGVsZW1lbnQucmVtb3ZlQ2xhc3MoJ25n
LWNsb2FrJyk7Ci0gIH0KLX0pOwotCi0vKioKLSAqIEBuZ2RvYyBkaXJlY3RpdmUKLSAqIEBuYW1l
IG5nLmRpcmVjdGl2ZTpuZ0NvbnRyb2xsZXIKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIFRoZSBg
bmdDb250cm9sbGVyYCBkaXJlY3RpdmUgYXNzaWducyBiZWhhdmlvciB0byBhIHNjb3BlLiBUaGlz
IGlzIGEga2V5IGFzcGVjdCBvZiBob3cgYW5ndWxhcgotICogc3VwcG9ydHMgdGhlIHByaW5jaXBs
ZXMgYmVoaW5kIHRoZSBNb2RlbC1WaWV3LUNvbnRyb2xsZXIgZGVzaWduIHBhdHRlcm4uCi0gKgot
ICogTVZDIGNvbXBvbmVudHMgaW4gYW5ndWxhcjoKLSAqCi0gKiAqIE1vZGVsIOKAlCBUaGUgTW9k
ZWwgaXMgZGF0YSBpbiBzY29wZSBwcm9wZXJ0aWVzOyBzY29wZXMgYXJlIGF0dGFjaGVkIHRvIHRo
ZSBET00uCi0gKiAqIFZpZXcg4oCUIFRoZSB0ZW1wbGF0ZSAoSFRNTCB3aXRoIGRhdGEgYmluZGlu
Z3MpIGlzIHJlbmRlcmVkIGludG8gdGhlIFZpZXcuCi0gKiAqIENvbnRyb2xsZXIg4oCUIFRoZSBg
bmdDb250cm9sbGVyYCBkaXJlY3RpdmUgc3BlY2lmaWVzIGEgQ29udHJvbGxlciBjbGFzczsgdGhl
IGNsYXNzIGhhcwotICogICBtZXRob2RzIHRoYXQgdHlwaWNhbGx5IGV4cHJlc3MgdGhlIGJ1c2lu
ZXNzIGxvZ2ljIGJlaGluZCB0aGUgYXBwbGljYXRpb24uCi0gKgotICogTm90ZSB0aGF0IGFuIGFs
dGVybmF0aXZlIHdheSB0byBkZWZpbmUgY29udHJvbGxlcnMgaXMgdmlhIHRoZSB7QGxpbmsgbmcu
JHJvdXRlICRyb3V0ZX0gc2VydmljZS4KLSAqCi0gKiBAZWxlbWVudCBBTlkKLSAqIEBzY29wZQot
ICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ0NvbnRyb2xsZXIgTmFtZSBvZiBhIGdsb2JhbGx5IGFj
Y2Vzc2libGUgY29uc3RydWN0b3IgZnVuY3Rpb24gb3IgYW4KLSAqICAgICB7QGxpbmsgZ3VpZGUv
ZXhwcmVzc2lvbiBleHByZXNzaW9ufSB0aGF0IG9uIHRoZSBjdXJyZW50IHNjb3BlIGV2YWx1YXRl
cyB0byBhCi0gKiAgICAgY29uc3RydWN0b3IgZnVuY3Rpb24uCi0gKgotICogQGV4YW1wbGUKLSAq
IEhlcmUgaXMgYSBzaW1wbGUgZm9ybSBmb3IgZWRpdGluZyB1c2VyIGNvbnRhY3QgaW5mb3JtYXRp
b24uIEFkZGluZywgcmVtb3ZpbmcsIGNsZWFyaW5nLCBhbmQKLSAqIGdyZWV0aW5nIGFyZSBtZXRo
b2RzIGRlY2xhcmVkIG9uIHRoZSBjb250cm9sbGVyIChzZWUgc291cmNlIHRhYikuIFRoZXNlIG1l
dGhvZHMgY2FuCi0gKiBlYXNpbHkgYmUgY2FsbGVkIGZyb20gdGhlIGFuZ3VsYXIgbWFya3VwLiBO
b3RpY2UgdGhhdCB0aGUgc2NvcGUgYmVjb21lcyB0aGUgYHRoaXNgIGZvciB0aGUKLSAqIGNvbnRy
b2xsZXIncyBpbnN0YW5jZS4gVGhpcyBhbGxvd3MgZm9yIGVhc3kgYWNjZXNzIHRvIHRoZSB2aWV3
IGRhdGEgZnJvbSB0aGUgY29udHJvbGxlci4gQWxzbwotICogbm90aWNlIHRoYXQgYW55IGNoYW5n
ZXMgdG8gdGhlIGRhdGEgYXJlIGF1dG9tYXRpY2FsbHkgcmVmbGVjdGVkIGluIHRoZSBWaWV3IHdp
dGhvdXQgdGhlIG5lZWQKLSAqIGZvciBhIG1hbnVhbCB1cGRhdGUuCi0gICA8ZG9jOmV4YW1wbGU+
Ci0gICAgIDxkb2M6c291cmNlPgotICAgICAgPHNjcmlwdD4KLSAgICAgICAgZnVuY3Rpb24gU2V0
dGluZ3NDb250cm9sbGVyKCRzY29wZSkgewotICAgICAgICAgICRzY29wZS5uYW1lID0gIkpvaG4g
U21pdGgiOwotICAgICAgICAgICRzY29wZS5jb250YWN0cyA9IFsKLSAgICAgICAgICAgIHt0eXBl
OidwaG9uZScsIHZhbHVlOic0MDggNTU1IDEyMTInfSwKLSAgICAgICAgICAgIHt0eXBlOidlbWFp
bCcsIHZhbHVlOidqb2huLnNtaXRoQGV4YW1wbGUub3JnJ30gXTsKLQotICAgICAgICAgICRzY29w
ZS5ncmVldCA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICBhbGVydCh0aGlzLm5hbWUpOwotICAg
ICAgICAgIH07Ci0KLSAgICAgICAgICAkc2NvcGUuYWRkQ29udGFjdCA9IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICB0aGlzLmNvbnRhY3RzLnB1c2goe3R5cGU6J2VtYWlsJywgdmFsdWU6J3lvdXJu
YW1lQGV4YW1wbGUub3JnJ30pOwotICAgICAgICAgIH07Ci0KLSAgICAgICAgICAkc2NvcGUucmVt
b3ZlQ29udGFjdCA9IGZ1bmN0aW9uKGNvbnRhY3RUb1JlbW92ZSkgewotICAgICAgICAgICB2YXIg
aW5kZXggPSB0aGlzLmNvbnRhY3RzLmluZGV4T2YoY29udGFjdFRvUmVtb3ZlKTsKLSAgICAgICAg
ICAgdGhpcy5jb250YWN0cy5zcGxpY2UoaW5kZXgsIDEpOwotICAgICAgICAgIH07Ci0KLSAgICAg
ICAgICAkc2NvcGUuY2xlYXJDb250YWN0ID0gZnVuY3Rpb24oY29udGFjdCkgewotICAgICAgICAg
ICBjb250YWN0LnR5cGUgPSAncGhvbmUnOwotICAgICAgICAgICBjb250YWN0LnZhbHVlID0gJyc7
Ci0gICAgICAgICAgfTsKLSAgICAgICAgfQotICAgICAgPC9zY3JpcHQ+Ci0gICAgICA8ZGl2IG5n
LWNvbnRyb2xsZXI9IlNldHRpbmdzQ29udHJvbGxlciI+Ci0gICAgICAgIE5hbWU6IDxpbnB1dCB0
eXBlPSJ0ZXh0IiBuZy1tb2RlbD0ibmFtZSIvPgotICAgICAgICBbIDxhIGhyZWY9IiIgbmctY2xp
Y2s9ImdyZWV0KCkiPmdyZWV0PC9hPiBdPGJyLz4KLSAgICAgICAgQ29udGFjdDoKLSAgICAgICAg
PHVsPgotICAgICAgICAgIDxsaSBuZy1yZXBlYXQ9ImNvbnRhY3QgaW4gY29udGFjdHMiPgotICAg
ICAgICAgICAgPHNlbGVjdCBuZy1tb2RlbD0iY29udGFjdC50eXBlIj4KLSAgICAgICAgICAgICAg
IDxvcHRpb24+cGhvbmU8L29wdGlvbj4KLSAgICAgICAgICAgICAgIDxvcHRpb24+ZW1haWw8L29w
dGlvbj4KLSAgICAgICAgICAgIDwvc2VsZWN0PgotICAgICAgICAgICAgPGlucHV0IHR5cGU9InRl
eHQiIG5nLW1vZGVsPSJjb250YWN0LnZhbHVlIi8+Ci0gICAgICAgICAgICBbIDxhIGhyZWY9IiIg
bmctY2xpY2s9ImNsZWFyQ29udGFjdChjb250YWN0KSI+Y2xlYXI8L2E+Ci0gICAgICAgICAgICB8
IDxhIGhyZWY9IiIgbmctY2xpY2s9InJlbW92ZUNvbnRhY3QoY29udGFjdCkiPlg8L2E+IF0KLSAg
ICAgICAgICA8L2xpPgotICAgICAgICAgIDxsaT5bIDxhIGhyZWY9IiIgbmctY2xpY2s9ImFkZENv
bnRhY3QoKSI+YWRkPC9hPiBdPC9saT4KLSAgICAgICA8L3VsPgotICAgICAgPC9kaXY+Ci0gICAg
IDwvZG9jOnNvdXJjZT4KLSAgICAgPGRvYzpzY2VuYXJpbz4KLSAgICAgICBpdCgnc2hvdWxkIGNo
ZWNrIGNvbnRyb2xsZXInLCBmdW5jdGlvbigpIHsKLSAgICAgICAgIGV4cGVjdChlbGVtZW50KCcu
ZG9jLWV4YW1wbGUtbGl2ZSBkaXY+OmlucHV0JykudmFsKCkpLnRvQmUoJ0pvaG4gU21pdGgnKTsK
LSAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBsaTpudGgtY2hpbGQo
MSkgaW5wdXQnKS52YWwoKSkKLSAgICAgICAgICAgLnRvQmUoJzQwOCA1NTUgMTIxMicpOwotICAg
ICAgICAgZXhwZWN0KGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlIGxpOm50aC1jaGlsZCgyKSBp
bnB1dCcpLnZhbCgpKQotICAgICAgICAgICAudG9CZSgnam9obi5zbWl0aEBleGFtcGxlLm9yZycp
OwotCi0gICAgICAgICBlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBsaTpmaXJzdCBhOmNvbnRh
aW5zKCJjbGVhciIpJykuY2xpY2soKTsKLSAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4
YW1wbGUtbGl2ZSBsaTpmaXJzdCBpbnB1dCcpLnZhbCgpKS50b0JlKCcnKTsKLQotICAgICAgICAg
ZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgbGk6bGFzdCBhOmNvbnRhaW5zKCJhZGQiKScpLmNs
aWNrKCk7Ci0gICAgICAgICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgbGk6bnRo
LWNoaWxkKDMpIGlucHV0JykudmFsKCkpCi0gICAgICAgICAgIC50b0JlKCd5b3VybmFtZUBleGFt
cGxlLm9yZycpOwotICAgICAgIH0pOwotICAgICA8L2RvYzpzY2VuYXJpbz4KLSAgIDwvZG9jOmV4
YW1wbGU+Ci0gKi8KLXZhciBuZ0NvbnRyb2xsZXJEaXJlY3RpdmUgPSBbZnVuY3Rpb24oKSB7Ci0g
IHJldHVybiB7Ci0gICAgc2NvcGU6IHRydWUsCi0gICAgY29udHJvbGxlcjogJ0AnCi0gIH07Ci19
XTsKLQotLyoqCi0gKiBAbmdkb2MgZGlyZWN0aXZlCi0gKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdD
c3AKLSAqIEBwcmlvcml0eSAxMDAwCi0gKgotICogQGVsZW1lbnQgaHRtbAotICogQGRlc2NyaXB0
aW9uCi0gKiBFbmFibGVzIFtDU1AgKENvbnRlbnQgU2VjdXJpdHkgUG9saWN5KV0oaHR0cHM6Ly9k
ZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vU2VjdXJpdHkvQ1NQKSBzdXBwb3J0LgotICogCi0gKiBU
aGlzIGlzIG5lY2Vzc2FyeSB3aGVuIGRldmVsb3BpbmcgdGhpbmdzIGxpa2UgR29vZ2xlIENocm9t
ZSBFeHRlbnNpb25zLgotICogCi0gKiBDU1AgZm9yYmlkcyBhcHBzIHRvIHVzZSBgZXZhbGAgb3Ig
YEZ1bmN0aW9uKHN0cmluZylgIGdlbmVyYXRlZCBmdW5jdGlvbnMgKGFtb25nIG90aGVyIHRoaW5n
cykuCi0gKiBGb3IgdXMgdG8gYmUgY29tcGF0aWJsZSwgd2UganVzdCBuZWVkIHRvIGltcGxlbWVu
dCB0aGUgImdldHRlckZuIiBpbiAkcGFyc2Ugd2l0aG91dCB2aW9sYXRpbmcKLSAqIGFueSBvZiB0
aGVzZSByZXN0cmljdGlvbnMuCi0gKiAKLSAqIEFuZ3VsYXJKUyB1c2VzIGBGdW5jdGlvbihzdHJp
bmcpYCBnZW5lcmF0ZWQgZnVuY3Rpb25zIGFzIGEgc3BlZWQgb3B0aW1pemF0aW9uLiBCeSBhcHBs
eWluZyBgbmdDc3BgCi0gKiBpdCBpcyBiZSBwb3NzaWJsZSB0byBvcHQgaW50byB0aGUgQ1NQIGNv
bXBhdGlibGUgbW9kZS4gV2hlbiB0aGlzIG1vZGUgaXMgb24gQW5ndWxhckpTIHdpbGwKLSAqIGV2
YWx1YXRlIGFsbCBleHByZXNzaW9ucyB1cCB0byAzMCUgc2xvd2VyIHRoYW4gaW4gbm9uLUNTUCBt
b2RlLCBidXQgbm8gc2VjdXJpdHkgdmlvbGF0aW9ucyB3aWxsCi0gKiBiZSByYWlzZWQuCi0gKiAK
LSAqIEluIG9yZGVyIHRvIHVzZSB0aGlzIGZlYXR1cmUgcHV0IGBuZ0NzcGAgZGlyZWN0aXZlIG9u
IHRoZSByb290IGVsZW1lbnQgb2YgdGhlIGFwcGxpY2F0aW9uLgotICogCi0gKiBAZXhhbXBsZQot
ICogVGhpcyBleGFtcGxlIHNob3dzIGhvdyB0byBhcHBseSB0aGUgYG5nQ3NwYCBkaXJlY3RpdmUg
dG8gdGhlIGBodG1sYCB0YWcuCi0gICA8cHJlPgotICAgICA8IWRvY3R5cGUgaHRtbD4KLSAgICAg
PGh0bWwgbmctYXBwIG5nLWNzcD4KLSAgICAgLi4uCi0gICAgIC4uLgotICAgICA8L2h0bWw+Ci0g
ICA8L3ByZT4KLSAqLwotCi12YXIgbmdDc3BEaXJlY3RpdmUgPSBbJyRzbmlmZmVyJywgZnVuY3Rp
b24oJHNuaWZmZXIpIHsKLSAgcmV0dXJuIHsKLSAgICBwcmlvcml0eTogMTAwMCwKLSAgICBjb21w
aWxlOiBmdW5jdGlvbigpIHsKLSAgICAgICRzbmlmZmVyLmNzcCA9IHRydWU7Ci0gICAgfQotICB9
OwotfV07Ci0KLS8qKgotICogQG5nZG9jIGRpcmVjdGl2ZQotICogQG5hbWUgbmcuZGlyZWN0aXZl
Om5nQ2xpY2sKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIFRoZSBuZ0NsaWNrIGFsbG93cyB5b3Ug
dG8gc3BlY2lmeSBjdXN0b20gYmVoYXZpb3Igd2hlbgotICogZWxlbWVudCBpcyBjbGlja2VkLgot
ICoKLSAqIEBlbGVtZW50IEFOWQotICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ0NsaWNrIHtAbGlu
ayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWx1YXRlIHVwb24KLSAqIGNsaWNr
LiAoRXZlbnQgb2JqZWN0IGlzIGF2YWlsYWJsZSBhcyBgJGV2ZW50YCkKLSAqCi0gKiBAZXhhbXBs
ZQotICAgPGRvYzpleGFtcGxlPgotICAgICA8ZG9jOnNvdXJjZT4KLSAgICAgIDxidXR0b24gbmct
Y2xpY2s9ImNvdW50ID0gY291bnQgKyAxIiBuZy1pbml0PSJjb3VudD0wIj4KLSAgICAgICAgSW5j
cmVtZW50Ci0gICAgICA8L2J1dHRvbj4KLSAgICAgIGNvdW50OiB7e2NvdW50fX0KLSAgICAgPC9k
b2M6c291cmNlPgotICAgICA8ZG9jOnNjZW5hcmlvPgotICAgICAgIGl0KCdzaG91bGQgY2hlY2sg
bmctY2xpY2snLCBmdW5jdGlvbigpIHsKLSAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdjb3VudCcp
KS50b0JlKCcwJyk7Ci0gICAgICAgICBlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSA6YnV0dG9u
JykuY2xpY2soKTsKLSAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdjb3VudCcpKS50b0JlKCcxJyk7
Ci0gICAgICAgfSk7Ci0gICAgIDwvZG9jOnNjZW5hcmlvPgotICAgPC9kb2M6ZXhhbXBsZT4KLSAq
LwotLyoKLSAqIEEgZGlyZWN0aXZlIHRoYXQgYWxsb3dzIGNyZWF0aW9uIG9mIGN1c3RvbSBvbmNs
aWNrIGhhbmRsZXJzIHRoYXQgYXJlIGRlZmluZWQgYXMgYW5ndWxhcgotICogZXhwcmVzc2lvbnMg
YW5kIGFyZSBjb21waWxlZCBhbmQgZXhlY3V0ZWQgd2l0aGluIHRoZSBjdXJyZW50IHNjb3BlLgot
ICoKLSAqIEV2ZW50cyB0aGF0IGFyZSBoYW5kbGVkIHZpYSB0aGVzZSBoYW5kbGVyIGFyZSBhbHdh
eXMgY29uZmlndXJlZCBub3QgdG8gcHJvcGFnYXRlIGZ1cnRoZXIuCi0gKi8KLXZhciBuZ0V2ZW50
RGlyZWN0aXZlcyA9IHt9OwotZm9yRWFjaCgKLSAgJ2NsaWNrIGRibGNsaWNrIG1vdXNlZG93biBt
b3VzZXVwIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZW1vdmUgbW91c2VlbnRlciBtb3VzZWxlYXZl
Jy5zcGxpdCgnICcpLAotICBmdW5jdGlvbihuYW1lKSB7Ci0gICAgdmFyIGRpcmVjdGl2ZU5hbWUg
PSBkaXJlY3RpdmVOb3JtYWxpemUoJ25nLScgKyBuYW1lKTsKLSAgICBuZ0V2ZW50RGlyZWN0aXZl
c1tkaXJlY3RpdmVOYW1lXSA9IFsnJHBhcnNlJywgZnVuY3Rpb24oJHBhcnNlKSB7Ci0gICAgICBy
ZXR1cm4gZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHIpIHsKLSAgICAgICAgdmFyIGZuID0g
JHBhcnNlKGF0dHJbZGlyZWN0aXZlTmFtZV0pOwotICAgICAgICBlbGVtZW50LmJpbmQobG93ZXJj
YXNlKG5hbWUpLCBmdW5jdGlvbihldmVudCkgewotICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgIGZuKHNjb3BlLCB7JGV2ZW50OmV2ZW50fSk7Ci0gICAgICAg
ICAgfSk7Ci0gICAgICAgIH0pOwotICAgICAgfTsKLSAgICB9XTsKLSAgfQotKTsKLQotLyoqCi0g
KiBAbmdkb2MgZGlyZWN0aXZlCi0gKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdEYmxjbGljawotICoK
LSAqIEBkZXNjcmlwdGlvbgotICogVGhlIGBuZ0RibGNsaWNrYCBkaXJlY3RpdmUgYWxsb3dzIHlv
dSB0byBzcGVjaWZ5IGN1c3RvbSBiZWhhdmlvciBvbiBkYmxjbGljayBldmVudC4KLSAqCi0gKiBA
ZWxlbWVudCBBTlkKLSAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdEYmxjbGljayB7QGxpbmsgZ3Vp
ZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9uCi0gKiBkYmxjbGljay4g
KEV2ZW50IG9iamVjdCBpcyBhdmFpbGFibGUgYXMgYCRldmVudGApCi0gKgotICogQGV4YW1wbGUK
LSAqIFNlZSB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nQ2xpY2sgbmdDbGlja30KLSAqLwotCi0KLS8q
KgotICogQG5nZG9jIGRpcmVjdGl2ZQotICogQG5hbWUgbmcuZGlyZWN0aXZlOm5nTW91c2Vkb3du
Ci0gKgotICogQGRlc2NyaXB0aW9uCi0gKiBUaGUgbmdNb3VzZWRvd24gZGlyZWN0aXZlIGFsbG93
cyB5b3UgdG8gc3BlY2lmeSBjdXN0b20gYmVoYXZpb3Igb24gbW91c2Vkb3duIGV2ZW50LgotICoK
LSAqIEBlbGVtZW50IEFOWQotICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ01vdXNlZG93biB7QGxp
bmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9uCi0gKiBtb3Vz
ZWRvd24uIChFdmVudCBvYmplY3QgaXMgYXZhaWxhYmxlIGFzIGAkZXZlbnRgKQotICoKLSAqIEBl
eGFtcGxlCi0gKiBTZWUge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0NsaWNrIG5nQ2xpY2t9Ci0gKi8K
LQotCi0vKioKLSAqIEBuZ2RvYyBkaXJlY3RpdmUKLSAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpuZ01v
dXNldXAKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIFNwZWNpZnkgY3VzdG9tIGJlaGF2aW9yIG9u
IG1vdXNldXAgZXZlbnQuCi0gKgotICogQGVsZW1lbnQgQU5ZCi0gKiBAcGFyYW0ge2V4cHJlc3Np
b259IG5nTW91c2V1cCB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFs
dWF0ZSB1cG9uCi0gKiBtb3VzZXVwLiAoRXZlbnQgb2JqZWN0IGlzIGF2YWlsYWJsZSBhcyBgJGV2
ZW50YCkKLSAqCi0gKiBAZXhhbXBsZQotICogU2VlIHtAbGluayBuZy5kaXJlY3RpdmU6bmdDbGlj
ayBuZ0NsaWNrfQotICovCi0KLS8qKgotICogQG5nZG9jIGRpcmVjdGl2ZQotICogQG5hbWUgbmcu
ZGlyZWN0aXZlOm5nTW91c2VvdmVyCi0gKgotICogQGRlc2NyaXB0aW9uCi0gKiBTcGVjaWZ5IGN1
c3RvbSBiZWhhdmlvciBvbiBtb3VzZW92ZXIgZXZlbnQuCi0gKgotICogQGVsZW1lbnQgQU5ZCi0g
KiBAcGFyYW0ge2V4cHJlc3Npb259IG5nTW91c2VvdmVyIHtAbGluayBndWlkZS9leHByZXNzaW9u
IEV4cHJlc3Npb259IHRvIGV2YWx1YXRlIHVwb24KLSAqIG1vdXNlb3Zlci4gKEV2ZW50IG9iamVj
dCBpcyBhdmFpbGFibGUgYXMgYCRldmVudGApCi0gKgotICogQGV4YW1wbGUKLSAqIFNlZSB7QGxp
bmsgbmcuZGlyZWN0aXZlOm5nQ2xpY2sgbmdDbGlja30KLSAqLwotCi0KLS8qKgotICogQG5nZG9j
IGRpcmVjdGl2ZQotICogQG5hbWUgbmcuZGlyZWN0aXZlOm5nTW91c2VlbnRlcgotICoKLSAqIEBk
ZXNjcmlwdGlvbgotICogU3BlY2lmeSBjdXN0b20gYmVoYXZpb3Igb24gbW91c2VlbnRlciBldmVu
dC4KLSAqCi0gKiBAZWxlbWVudCBBTlkKLSAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdNb3VzZWVu
dGVyIHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWx1YXRlIHVwb24K
LSAqIG1vdXNlZW50ZXIuIChFdmVudCBvYmplY3QgaXMgYXZhaWxhYmxlIGFzIGAkZXZlbnRgKQot
ICoKLSAqIEBleGFtcGxlCi0gKiBTZWUge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0NsaWNrIG5nQ2xp
Y2t9Ci0gKi8KLQotCi0vKioKLSAqIEBuZ2RvYyBkaXJlY3RpdmUKLSAqIEBuYW1lIG5nLmRpcmVj
dGl2ZTpuZ01vdXNlbGVhdmUKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIFNwZWNpZnkgY3VzdG9t
IGJlaGF2aW9yIG9uIG1vdXNlbGVhdmUgZXZlbnQuCi0gKgotICogQGVsZW1lbnQgQU5ZCi0gKiBA
cGFyYW0ge2V4cHJlc3Npb259IG5nTW91c2VsZWF2ZSB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBF
eHByZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9uCi0gKiBtb3VzZWxlYXZlLiAoRXZlbnQgb2JqZWN0
IGlzIGF2YWlsYWJsZSBhcyBgJGV2ZW50YCkKLSAqCi0gKiBAZXhhbXBsZQotICogU2VlIHtAbGlu
ayBuZy5kaXJlY3RpdmU6bmdDbGljayBuZ0NsaWNrfQotICovCi0KLQotLyoqCi0gKiBAbmdkb2Mg
ZGlyZWN0aXZlCi0gKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdNb3VzZW1vdmUKLSAqCi0gKiBAZGVz
Y3JpcHRpb24KLSAqIFNwZWNpZnkgY3VzdG9tIGJlaGF2aW9yIG9uIG1vdXNlbW92ZSBldmVudC4K
LSAqCi0gKiBAZWxlbWVudCBBTlkKLSAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdNb3VzZW1vdmUg
e0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbHVhdGUgdXBvbgotICog
bW91c2Vtb3ZlLiAoRXZlbnQgb2JqZWN0IGlzIGF2YWlsYWJsZSBhcyBgJGV2ZW50YCkKLSAqCi0g
KiBAZXhhbXBsZQotICogU2VlIHtAbGluayBuZy5kaXJlY3RpdmU6bmdDbGljayBuZ0NsaWNrfQot
ICovCi0KLQotLyoqCi0gKiBAbmdkb2MgZGlyZWN0aXZlCi0gKiBAbmFtZSBuZy5kaXJlY3RpdmU6
bmdTdWJtaXQKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIEVuYWJsZXMgYmluZGluZyBhbmd1bGFy
IGV4cHJlc3Npb25zIHRvIG9uc3VibWl0IGV2ZW50cy4KLSAqCi0gKiBBZGRpdGlvbmFsbHkgaXQg
cHJldmVudHMgdGhlIGRlZmF1bHQgYWN0aW9uICh3aGljaCBmb3IgZm9ybSBtZWFucyBzZW5kaW5n
IHRoZSByZXF1ZXN0IHRvIHRoZQotICogc2VydmVyIGFuZCByZWxvYWRpbmcgdGhlIGN1cnJlbnQg
cGFnZSkuCi0gKgotICogQGVsZW1lbnQgZm9ybQotICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ1N1
Ym1pdCB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsLgotICoKLSAq
IEBleGFtcGxlCi0gICA8ZG9jOmV4YW1wbGU+Ci0gICAgIDxkb2M6c291cmNlPgotICAgICAgPHNj
cmlwdD4KLSAgICAgICAgZnVuY3Rpb24gQ3RybCgkc2NvcGUpIHsKLSAgICAgICAgICAkc2NvcGUu
bGlzdCA9IFtdOwotICAgICAgICAgICRzY29wZS50ZXh0ID0gJ2hlbGxvJzsKLSAgICAgICAgICAk
c2NvcGUuc3VibWl0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy50ZXh0KSB7
Ci0gICAgICAgICAgICAgIHRoaXMubGlzdC5wdXNoKHRoaXMudGV4dCk7Ci0gICAgICAgICAgICAg
IHRoaXMudGV4dCA9ICcnOwotICAgICAgICAgICAgfQotICAgICAgICAgIH07Ci0gICAgICAgIH0K
LSAgICAgIDwvc2NyaXB0PgotICAgICAgPGZvcm0gbmctc3VibWl0PSJzdWJtaXQoKSIgbmctY29u
dHJvbGxlcj0iQ3RybCI+Ci0gICAgICAgIEVudGVyIHRleHQgYW5kIGhpdCBlbnRlcjoKLSAgICAg
ICAgPGlucHV0IHR5cGU9InRleHQiIG5nLW1vZGVsPSJ0ZXh0IiBuYW1lPSJ0ZXh0IiAvPgotICAg
ICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBpZD0ic3VibWl0IiB2YWx1ZT0iU3VibWl0IiAvPgot
ICAgICAgICA8cHJlPmxpc3Q9e3tsaXN0fX08L3ByZT4KLSAgICAgIDwvZm9ybT4KLSAgICAgPC9k
b2M6c291cmNlPgotICAgICA8ZG9jOnNjZW5hcmlvPgotICAgICAgIGl0KCdzaG91bGQgY2hlY2sg
bmctc3VibWl0JywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICBleHBlY3QoYmluZGluZygnbGlzdCcp
KS50b0JlKCdbXScpOwotICAgICAgICAgZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgI3N1Ym1p
dCcpLmNsaWNrKCk7Ci0gICAgICAgICBleHBlY3QoYmluZGluZygnbGlzdCcpKS50b0JlKCdbImhl
bGxvIl0nKTsKLSAgICAgICAgIGV4cGVjdChpbnB1dCgndGV4dCcpLnZhbCgpKS50b0JlKCcnKTsK
LSAgICAgICB9KTsKLSAgICAgICBpdCgnc2hvdWxkIGlnbm9yZSBlbXB0eSBzdHJpbmdzJywgZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICBleHBlY3QoYmluZGluZygnbGlzdCcpKS50b0JlKCdbXScpOwot
ICAgICAgICAgZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgI3N1Ym1pdCcpLmNsaWNrKCk7Ci0g
ICAgICAgICBlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSAjc3VibWl0JykuY2xpY2soKTsKLSAg
ICAgICAgIGV4cGVjdChiaW5kaW5nKCdsaXN0JykpLnRvQmUoJ1siaGVsbG8iXScpOwotICAgICAg
IH0pOwotICAgICA8L2RvYzpzY2VuYXJpbz4KLSAgIDwvZG9jOmV4YW1wbGU+Ci0gKi8KLXZhciBu
Z1N1Ym1pdERpcmVjdGl2ZSA9IG5nRGlyZWN0aXZlKGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBh
dHRycykgewotICBlbGVtZW50LmJpbmQoJ3N1Ym1pdCcsIGZ1bmN0aW9uKCkgewotICAgIHNjb3Bl
LiRhcHBseShhdHRycy5uZ1N1Ym1pdCk7Ci0gIH0pOwotfSk7Ci0KLS8qKgotICogQG5nZG9jIGRp
cmVjdGl2ZQotICogQG5hbWUgbmcuZGlyZWN0aXZlOm5nSW5jbHVkZQotICogQHJlc3RyaWN0IEVD
QQotICoKLSAqIEBkZXNjcmlwdGlvbgotICogRmV0Y2hlcywgY29tcGlsZXMgYW5kIGluY2x1ZGVz
IGFuIGV4dGVybmFsIEhUTUwgZnJhZ21lbnQuCi0gKgotICogS2VlcCBpbiBtaW5kIHRoYXQgU2Ft
ZSBPcmlnaW4gUG9saWN5IGFwcGxpZXMgdG8gaW5jbHVkZWQgcmVzb3VyY2VzCi0gKiAoZS5nLiBu
Z0luY2x1ZGUgd29uJ3Qgd29yayBmb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzIG9uIGFsbCBicm93
c2VycyBhbmQgZm9yCi0gKiAgZmlsZTovLyBhY2Nlc3Mgb24gc29tZSBicm93c2VycykuCi0gKgot
ICogQHNjb3BlCi0gKgotICogQHBhcmFtIHtzdHJpbmd9IG5nSW5jbHVkZXxzcmMgYW5ndWxhciBl
eHByZXNzaW9uIGV2YWx1YXRpbmcgdG8gVVJMLiBJZiB0aGUgc291cmNlIGlzIGEgc3RyaW5nIGNv
bnN0YW50LAotICogICAgICAgICAgICAgICAgIG1ha2Ugc3VyZSB5b3Ugd3JhcCBpdCBpbiBxdW90
ZXMsIGUuZy4gYHNyYz0iJ215UGFydGlhbFRlbXBsYXRlLmh0bWwnImAuCi0gKiBAcGFyYW0ge3N0
cmluZz19IG9ubG9hZCBFeHByZXNzaW9uIHRvIGV2YWx1YXRlIHdoZW4gYSBuZXcgcGFydGlhbCBp
cyBsb2FkZWQuCi0gKgotICogQHBhcmFtIHtzdHJpbmc9fSBhdXRvc2Nyb2xsIFdoZXRoZXIgYG5n
SW5jbHVkZWAgc2hvdWxkIGNhbGwge0BsaW5rIG5nLiRhbmNob3JTY3JvbGwKLSAqICAgICAgICAg
ICAgICAgICAgJGFuY2hvclNjcm9sbH0gdG8gc2Nyb2xsIHRoZSB2aWV3cG9ydCBhZnRlciB0aGUg
Y29udGVudCBpcyBsb2FkZWQuCi0gKgotICogICAgICAgICAgICAgICAgICAtIElmIHRoZSBhdHRy
aWJ1dGUgaXMgbm90IHNldCwgZGlzYWJsZSBzY3JvbGxpbmcuCi0gKiAgICAgICAgICAgICAgICAg
IC0gSWYgdGhlIGF0dHJpYnV0ZSBpcyBzZXQgd2l0aG91dCB2YWx1ZSwgZW5hYmxlIHNjcm9sbGlu
Zy4KLSAqICAgICAgICAgICAgICAgICAgLSBPdGhlcndpc2UgZW5hYmxlIHNjcm9sbGluZyBvbmx5
IGlmIHRoZSBleHByZXNzaW9uIGV2YWx1YXRlcyB0byB0cnV0aHkgdmFsdWUuCi0gKgotICogQGV4
YW1wbGUKLSAgPGV4YW1wbGU+Ci0gICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+Ci0gICAgIDxk
aXYgbmctY29udHJvbGxlcj0iQ3RybCI+Ci0gICAgICAgPHNlbGVjdCBuZy1tb2RlbD0idGVtcGxh
dGUiIG5nLW9wdGlvbnM9InQubmFtZSBmb3IgdCBpbiB0ZW1wbGF0ZXMiPgotICAgICAgICA8b3B0
aW9uIHZhbHVlPSIiPihibGFuayk8L29wdGlvbj4KLSAgICAgICA8L3NlbGVjdD4KLSAgICAgICB1
cmwgb2YgdGhlIHRlbXBsYXRlOiA8dHQ+e3t0ZW1wbGF0ZS51cmx9fTwvdHQ+Ci0gICAgICAgPGhy
Lz4KLSAgICAgICA8ZGl2IG5nLWluY2x1ZGUgc3JjPSJ0ZW1wbGF0ZS51cmwiPjwvZGl2PgotICAg
ICA8L2Rpdj4KLSAgICA8L2ZpbGU+Ci0gICAgPGZpbGUgbmFtZT0ic2NyaXB0LmpzIj4KLSAgICAg
IGZ1bmN0aW9uIEN0cmwoJHNjb3BlKSB7Ci0gICAgICAgICRzY29wZS50ZW1wbGF0ZXMgPQotICAg
ICAgICAgIFsgeyBuYW1lOiAndGVtcGxhdGUxLmh0bWwnLCB1cmw6ICd0ZW1wbGF0ZTEuaHRtbCd9
Ci0gICAgICAgICAgLCB7IG5hbWU6ICd0ZW1wbGF0ZTIuaHRtbCcsIHVybDogJ3RlbXBsYXRlMi5o
dG1sJ30gXTsKLSAgICAgICAgJHNjb3BlLnRlbXBsYXRlID0gJHNjb3BlLnRlbXBsYXRlc1swXTsK
LSAgICAgIH0KLSAgICAgPC9maWxlPgotICAgIDxmaWxlIG5hbWU9InRlbXBsYXRlMS5odG1sIj4K
LSAgICAgIENvbnRlbnQgb2YgdGVtcGxhdGUxLmh0bWwKLSAgICA8L2ZpbGU+Ci0gICAgPGZpbGUg
bmFtZT0idGVtcGxhdGUyLmh0bWwiPgotICAgICAgQ29udGVudCBvZiB0ZW1wbGF0ZTIuaHRtbAot
ICAgIDwvZmlsZT4KLSAgICA8ZmlsZSBuYW1lPSJzY2VuYXJpby5qcyI+Ci0gICAgICBpdCgnc2hv
dWxkIGxvYWQgdGVtcGxhdGUxLmh0bWwnLCBmdW5jdGlvbigpIHsKLSAgICAgICBleHBlY3QoZWxl
bWVudCgnLmRvYy1leGFtcGxlLWxpdmUgW25nLWluY2x1ZGVdJykudGV4dCgpKS4KLSAgICAgICAg
IHRvTWF0Y2goL0NvbnRlbnQgb2YgdGVtcGxhdGUxLmh0bWwvKTsKLSAgICAgIH0pOwotICAgICAg
aXQoJ3Nob3VsZCBsb2FkIHRlbXBsYXRlMi5odG1sJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgc2Vs
ZWN0KCd0ZW1wbGF0ZScpLm9wdGlvbignMScpOwotICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9j
LWV4YW1wbGUtbGl2ZSBbbmctaW5jbHVkZV0nKS50ZXh0KCkpLgotICAgICAgICAgdG9NYXRjaCgv
Q29udGVudCBvZiB0ZW1wbGF0ZTIuaHRtbC8pOwotICAgICAgfSk7Ci0gICAgICBpdCgnc2hvdWxk
IGNoYW5nZSB0byBibGFuaycsIGZ1bmN0aW9uKCkgewotICAgICAgIHNlbGVjdCgndGVtcGxhdGUn
KS5vcHRpb24oJycpOwotICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBb
bmctaW5jbHVkZV0nKS50ZXh0KCkpLnRvRXF1YWwoJycpOwotICAgICAgfSk7Ci0gICAgPC9maWxl
PgotICA8L2V4YW1wbGU+Ci0gKi8KLQotCi0vKioKLSAqIEBuZ2RvYyBldmVudAotICogQG5hbWUg
bmcuZGlyZWN0aXZlOm5nSW5jbHVkZSMkaW5jbHVkZUNvbnRlbnRMb2FkZWQKLSAqIEBldmVudE9m
IG5nLmRpcmVjdGl2ZTpuZ0luY2x1ZGUKLSAqIEBldmVudFR5cGUgZW1pdCBvbiB0aGUgY3VycmVu
dCBuZ0luY2x1ZGUgc2NvcGUKLSAqIEBkZXNjcmlwdGlvbgotICogRW1pdHRlZCBldmVyeSB0aW1l
IHRoZSBuZ0luY2x1ZGUgY29udGVudCBpcyByZWxvYWRlZC4KLSAqLwotdmFyIG5nSW5jbHVkZURp
cmVjdGl2ZSA9IFsnJGh0dHAnLCAnJHRlbXBsYXRlQ2FjaGUnLCAnJGFuY2hvclNjcm9sbCcsICck
Y29tcGlsZScsCi0gICAgICAgICAgICAgICAgICBmdW5jdGlvbigkaHR0cCwgICAkdGVtcGxhdGVD
YWNoZSwgICAkYW5jaG9yU2Nyb2xsLCAgICRjb21waWxlKSB7Ci0gIHJldHVybiB7Ci0gICAgcmVz
dHJpY3Q6ICdFQ0EnLAotICAgIHRlcm1pbmFsOiB0cnVlLAotICAgIGNvbXBpbGU6IGZ1bmN0aW9u
KGVsZW1lbnQsIGF0dHIpIHsKLSAgICAgIHZhciBzcmNFeHAgPSBhdHRyLm5nSW5jbHVkZSB8fCBh
dHRyLnNyYywKLSAgICAgICAgICBvbmxvYWRFeHAgPSBhdHRyLm9ubG9hZCB8fCAnJywKLSAgICAg
ICAgICBhdXRvU2Nyb2xsRXhwID0gYXR0ci5hdXRvc2Nyb2xsOwotCi0gICAgICByZXR1cm4gZnVu
Y3Rpb24oc2NvcGUsIGVsZW1lbnQpIHsKLSAgICAgICAgdmFyIGNoYW5nZUNvdW50ZXIgPSAwLAot
ICAgICAgICAgICAgY2hpbGRTY29wZTsKLQotICAgICAgICB2YXIgY2xlYXJDb250ZW50ID0gZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgaWYgKGNoaWxkU2NvcGUpIHsKLSAgICAgICAgICAgIGNoaWxk
U2NvcGUuJGRlc3Ryb3koKTsKLSAgICAgICAgICAgIGNoaWxkU2NvcGUgPSBudWxsOwotICAgICAg
ICAgIH0KLQotICAgICAgICAgIGVsZW1lbnQuaHRtbCgnJyk7Ci0gICAgICAgIH07Ci0KLSAgICAg
ICAgc2NvcGUuJHdhdGNoKHNyY0V4cCwgZnVuY3Rpb24gbmdJbmNsdWRlV2F0Y2hBY3Rpb24oc3Jj
KSB7Ci0gICAgICAgICAgdmFyIHRoaXNDaGFuZ2VJZCA9ICsrY2hhbmdlQ291bnRlcjsKLQotICAg
ICAgICAgIGlmIChzcmMpIHsKLSAgICAgICAgICAgICRodHRwLmdldChzcmMsIHtjYWNoZTogJHRl
bXBsYXRlQ2FjaGV9KS5zdWNjZXNzKGZ1bmN0aW9uKHJlc3BvbnNlKSB7Ci0gICAgICAgICAgICAg
IGlmICh0aGlzQ2hhbmdlSWQgIT09IGNoYW5nZUNvdW50ZXIpIHJldHVybjsKLQotICAgICAgICAg
ICAgICBpZiAoY2hpbGRTY29wZSkgY2hpbGRTY29wZS4kZGVzdHJveSgpOwotICAgICAgICAgICAg
ICBjaGlsZFNjb3BlID0gc2NvcGUuJG5ldygpOwotCi0gICAgICAgICAgICAgIGVsZW1lbnQuaHRt
bChyZXNwb25zZSk7Ci0gICAgICAgICAgICAgICRjb21waWxlKGVsZW1lbnQuY29udGVudHMoKSko
Y2hpbGRTY29wZSk7Ci0KLSAgICAgICAgICAgICAgaWYgKGlzRGVmaW5lZChhdXRvU2Nyb2xsRXhw
KSAmJiAoIWF1dG9TY3JvbGxFeHAgfHwgc2NvcGUuJGV2YWwoYXV0b1Njcm9sbEV4cCkpKSB7Ci0g
ICAgICAgICAgICAgICAgJGFuY2hvclNjcm9sbCgpOwotICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgY2hpbGRTY29wZS4kZW1pdCgnJGluY2x1ZGVDb250ZW50TG9hZGVkJyk7Ci0gICAg
ICAgICAgICAgIHNjb3BlLiRldmFsKG9ubG9hZEV4cCk7Ci0gICAgICAgICAgICB9KS5lcnJvcihm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgaWYgKHRoaXNDaGFuZ2VJZCA9PT0gY2hhbmdlQ291
bnRlcikgY2xlYXJDb250ZW50KCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICB9IGVsc2Ug
Y2xlYXJDb250ZW50KCk7Ci0gICAgICAgIH0pOwotICAgICAgfTsKLSAgICB9Ci0gIH07Ci19XTsK
LQotLyoqCi0gKiBAbmdkb2MgZGlyZWN0aXZlCi0gKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdJbml0
Ci0gKgotICogQGRlc2NyaXB0aW9uCi0gKiBUaGUgYG5nSW5pdGAgZGlyZWN0aXZlIHNwZWNpZmll
cyBpbml0aWFsaXphdGlvbiB0YXNrcyB0byBiZSBleGVjdXRlZAotICogIGJlZm9yZSB0aGUgdGVt
cGxhdGUgZW50ZXJzIGV4ZWN1dGlvbiBtb2RlIGR1cmluZyBib290c3RyYXAuCi0gKgotICogQGVs
ZW1lbnQgQU5ZCi0gKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nSW5pdCB7QGxpbmsgZ3VpZGUvZXhw
cmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsLgotICoKLSAqIEBleGFtcGxlCi0gICA8ZG9jOmV4
YW1wbGU+Ci0gICAgIDxkb2M6c291cmNlPgotICAgIDxkaXYgbmctaW5pdD0iZ3JlZXRpbmc9J0hl
bGxvJzsgcGVyc29uPSdXb3JsZCciPgotICAgICAge3tncmVldGluZ319IHt7cGVyc29ufX0hCi0g
ICAgPC9kaXY+Ci0gICAgIDwvZG9jOnNvdXJjZT4KLSAgICAgPGRvYzpzY2VuYXJpbz4KLSAgICAg
ICBpdCgnc2hvdWxkIGNoZWNrIGdyZWV0aW5nJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICBleHBl
Y3QoYmluZGluZygnZ3JlZXRpbmcnKSkudG9CZSgnSGVsbG8nKTsKLSAgICAgICAgIGV4cGVjdChi
aW5kaW5nKCdwZXJzb24nKSkudG9CZSgnV29ybGQnKTsKLSAgICAgICB9KTsKLSAgICAgPC9kb2M6
c2NlbmFyaW8+Ci0gICA8L2RvYzpleGFtcGxlPgotICovCi12YXIgbmdJbml0RGlyZWN0aXZlID0g
bmdEaXJlY3RpdmUoewotICBjb21waWxlOiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gewotICAg
ICAgcHJlOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cnMpIHsKLSAgICAgICAgc2NvcGUu
JGV2YWwoYXR0cnMubmdJbml0KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0pOwotCi0vKioKLSAq
IEBuZ2RvYyBkaXJlY3RpdmUKLSAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpuZ05vbkJpbmRhYmxlCi0g
KiBAcHJpb3JpdHkgMTAwMAotICoKLSAqIEBkZXNjcmlwdGlvbgotICogU29tZXRpbWVzIGl0IGlz
IG5lY2Vzc2FyeSB0byB3cml0ZSBjb2RlIHdoaWNoIGxvb2tzIGxpa2UgYmluZGluZ3MgYnV0IHdo
aWNoIHNob3VsZCBiZSBsZWZ0IGFsb25lCi0gKiBieSBhbmd1bGFyLiBVc2UgYG5nTm9uQmluZGFi
bGVgIHRvIG1ha2UgYW5ndWxhciBpZ25vcmUgYSBjaHVuayBvZiBIVE1MLgotICoKLSAqIEBlbGVt
ZW50IEFOWQotICoKLSAqIEBleGFtcGxlCi0gKiBJbiB0aGlzIGV4YW1wbGUgdGhlcmUgYXJlIHR3
byBsb2NhdGlvbiB3aGVyZSBhIHNpbXBsZSBiaW5kaW5nIChge3t9fWApIGlzIHByZXNlbnQsIGJ1
dCB0aGUgb25lCi0gKiB3cmFwcGVkIGluIGBuZ05vbkJpbmRhYmxlYCBpcyBsZWZ0IGFsb25lLgot
ICoKLSAqIEBleGFtcGxlCi0gICAgPGRvYzpleGFtcGxlPgotICAgICAgPGRvYzpzb3VyY2U+Ci0g
ICAgICAgIDxkaXY+Tm9ybWFsOiB7ezEgKyAyfX08L2Rpdj4KLSAgICAgICAgPGRpdiBuZy1ub24t
YmluZGFibGU+SWdub3JlZDoge3sxICsgMn19PC9kaXY+Ci0gICAgICA8L2RvYzpzb3VyY2U+Ci0g
ICAgICA8ZG9jOnNjZW5hcmlvPgotICAgICAgIGl0KCdzaG91bGQgY2hlY2sgbmctbm9uLWJpbmRh
YmxlJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICBleHBlY3QodXNpbmcoJy5kb2MtZXhhbXBsZS1s
aXZlJykuYmluZGluZygnMSArIDInKSkudG9CZSgnMycpOwotICAgICAgICAgZXhwZWN0KHVzaW5n
KCcuZG9jLWV4YW1wbGUtbGl2ZScpLmVsZW1lbnQoJ2RpdjpsYXN0JykudGV4dCgpKS4KLSAgICAg
ICAgICAgdG9NYXRjaCgvMSBcKyAyLyk7Ci0gICAgICAgfSk7Ci0gICAgICA8L2RvYzpzY2VuYXJp
bz4KLSAgICA8L2RvYzpleGFtcGxlPgotICovCi12YXIgbmdOb25CaW5kYWJsZURpcmVjdGl2ZSA9
IG5nRGlyZWN0aXZlKHsgdGVybWluYWw6IHRydWUsIHByaW9yaXR5OiAxMDAwIH0pOwotCi0vKioK
LSAqIEBuZ2RvYyBkaXJlY3RpdmUKLSAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpuZ1BsdXJhbGl6ZQot
ICogQHJlc3RyaWN0IEVBCi0gKgotICogQGRlc2NyaXB0aW9uCi0gKiAjIE92ZXJ2aWV3Ci0gKiBg
bmdQbHVyYWxpemVgIGlzIGEgZGlyZWN0aXZlIHRoYXQgZGlzcGxheXMgbWVzc2FnZXMgYWNjb3Jk
aW5nIHRvIGVuLVVTIGxvY2FsaXphdGlvbiBydWxlcy4KLSAqIFRoZXNlIHJ1bGVzIGFyZSBidW5k
bGVkIHdpdGggYW5ndWxhci5qcyBhbmQgdGhlIHJ1bGVzIGNhbiBiZSBvdmVycmlkZGVuCi0gKiAo
c2VlIHtAbGluayBndWlkZS9pMThuIEFuZ3VsYXIgaTE4bn0gZGV2IGd1aWRlKS4gWW91IGNvbmZp
Z3VyZSBuZ1BsdXJhbGl6ZSBkaXJlY3RpdmUKLSAqIGJ5IHNwZWNpZnlpbmcgdGhlIG1hcHBpbmdz
IGJldHdlZW4KLSAqIHtAbGluayBodHRwOi8vdW5pY29kZS5vcmcvcmVwb3MvY2xkci10bXAvdHJ1
bmsvZGlmZi9zdXBwbGVtZW50YWwvbGFuZ3VhZ2VfcGx1cmFsX3J1bGVzLmh0bWwKLSAqIHBsdXJh
bCBjYXRlZ29yaWVzfSBhbmQgdGhlIHN0cmluZ3MgdG8gYmUgZGlzcGxheWVkLgotICoKLSAqICMg
UGx1cmFsIGNhdGVnb3JpZXMgYW5kIGV4cGxpY2l0IG51bWJlciBydWxlcwotICogVGhlcmUgYXJl
IHR3bwotICoge0BsaW5rIGh0dHA6Ly91bmljb2RlLm9yZy9yZXBvcy9jbGRyLXRtcC90cnVuay9k
aWZmL3N1cHBsZW1lbnRhbC9sYW5ndWFnZV9wbHVyYWxfcnVsZXMuaHRtbAotICogcGx1cmFsIGNh
dGVnb3JpZXN9IGluIEFuZ3VsYXIncyBkZWZhdWx0IGVuLVVTIGxvY2FsZTogIm9uZSIgYW5kICJv
dGhlciIuCi0gKgotICogV2hpbGUgYSBwdXJhbCBjYXRlZ29yeSBtYXkgbWF0Y2ggbWFueSBudW1i
ZXJzIChmb3IgZXhhbXBsZSwgaW4gZW4tVVMgbG9jYWxlLCAib3RoZXIiIGNhbiBtYXRjaAotICog
YW55IG51bWJlciB0aGF0IGlzIG5vdCAxKSwgYW4gZXhwbGljaXQgbnVtYmVyIHJ1bGUgY2FuIG9u
bHkgbWF0Y2ggb25lIG51bWJlci4gRm9yIGV4YW1wbGUsIHRoZQotICogZXhwbGljaXQgbnVtYmVy
IHJ1bGUgZm9yICIzIiBtYXRjaGVzIHRoZSBudW1iZXIgMy4gWW91IHdpbGwgc2VlIHRoZSB1c2Ug
b2YgcGx1cmFsIGNhdGVnb3JpZXMKLSAqIGFuZCBleHBsaWNpdCBudW1iZXIgcnVsZXMgdGhyb3Vn
aG91dCBsYXRlciBwYXJ0cyBvZiB0aGlzIGRvY3VtZW50YXRpb24uCi0gKgotICogIyBDb25maWd1
cmluZyBuZ1BsdXJhbGl6ZQotICogWW91IGNvbmZpZ3VyZSBuZ1BsdXJhbGl6ZSBieSBwcm92aWRp
bmcgMiBhdHRyaWJ1dGVzOiBgY291bnRgIGFuZCBgd2hlbmAuCi0gKiBZb3UgY2FuIGFsc28gcHJv
dmlkZSBhbiBvcHRpb25hbCBhdHRyaWJ1dGUsIGBvZmZzZXRgLgotICoKLSAqIFRoZSB2YWx1ZSBv
ZiB0aGUgYGNvdW50YCBhdHRyaWJ1dGUgY2FuIGJlIGVpdGhlciBhIHN0cmluZyBvciBhbiB7QGxp
bmsgZ3VpZGUvZXhwcmVzc2lvbgotICogQW5ndWxhciBleHByZXNzaW9ufTsgdGhlc2UgYXJlIGV2
YWx1YXRlZCBvbiB0aGUgY3VycmVudCBzY29wZSBmb3IgaXRzIGJvdW5kIHZhbHVlLgotICoKLSAq
IFRoZSBgd2hlbmAgYXR0cmlidXRlIHNwZWNpZmllcyB0aGUgbWFwcGluZ3MgYmV0d2VlbiBwbHVy
YWwgY2F0ZWdvcmllcyBhbmQgdGhlIGFjdHVhbAotICogc3RyaW5nIHRvIGJlIGRpc3BsYXllZC4g
VGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgc2hvdWxkIGJlIGEgSlNPTiBvYmplY3Qgc28gdGhh
dCBBbmd1bGFyCi0gKiBjYW4gaW50ZXJwcmV0IGl0IGNvcnJlY3RseS4KLSAqCi0gKiBUaGUgZm9s
bG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRvIGNvbmZpZ3VyZSBuZ1BsdXJhbGl6ZToKLSAqCi0g
KiA8cHJlPgotICogPG5nLXBsdXJhbGl6ZSBjb3VudD0icGVyc29uQ291bnQiCi0gICAgICAgICAg
ICAgICAgIHdoZW49InsnMCc6ICdOb2JvZHkgaXMgdmlld2luZy4nLAotICogICAgICAgICAgICAg
ICAgICAgICAgJ29uZSc6ICcxIHBlcnNvbiBpcyB2aWV3aW5nLicsCi0gKiAgICAgICAgICAgICAg
ICAgICAgICAnb3RoZXInOiAne30gcGVvcGxlIGFyZSB2aWV3aW5nLid9Ij4KLSAqIDwvbmctcGx1
cmFsaXplPgotICo8L3ByZT4KLSAqCi0gKiBJbiB0aGUgZXhhbXBsZSwgYCIwOiBOb2JvZHkgaXMg
dmlld2luZy4iYCBpcyBhbiBleHBsaWNpdCBudW1iZXIgcnVsZS4gSWYgeW91IGRpZCBub3QKLSAq
IHNwZWNpZnkgdGhpcyBydWxlLCAwIHdvdWxkIGJlIG1hdGNoZWQgdG8gdGhlICJvdGhlciIgY2F0
ZWdvcnkgYW5kICIwIHBlb3BsZSBhcmUgdmlld2luZyIKLSAqIHdvdWxkIGJlIHNob3duIGluc3Rl
YWQgb2YgIk5vYm9keSBpcyB2aWV3aW5nIi4gWW91IGNhbiBzcGVjaWZ5IGFuIGV4cGxpY2l0IG51
bWJlciBydWxlIGZvcgotICogb3RoZXIgbnVtYmVycywgZm9yIGV4YW1wbGUgMTIsIHNvIHRoYXQg
aW5zdGVhZCBvZiBzaG93aW5nICIxMiBwZW9wbGUgYXJlIHZpZXdpbmciLCB5b3UgY2FuCi0gKiBz
aG93ICJhIGRvemVuIHBlb3BsZSBhcmUgdmlld2luZyIuCi0gKgotICogWW91IGNhbiB1c2UgYSBz
ZXQgb2YgY2xvc2VkIGJyYWNlcyhge31gKSBhcyBhIHBsYWNlaG9sZGVyIGZvciB0aGUgbnVtYmVy
IHRoYXQgeW91IHdhbnQgc3Vic3RpdHV0ZWQKLSAqIGludG8gcGx1cmFsaXplZCBzdHJpbmdzLiBJ
biB0aGUgcHJldmlvdXMgZXhhbXBsZSwgQW5ndWxhciB3aWxsIHJlcGxhY2UgYHt9YCB3aXRoCi0g
KiA8c3BhbiBuZy1ub24tYmluZGFibGU+YHt7cGVyc29uQ291bnR9fWA8L3NwYW4+LiBUaGUgY2xv
c2VkIGJyYWNlcyBge31gIGlzIGEgcGxhY2Vob2xkZXIKLSAqIGZvciA8c3BhbiBuZy1ub24tYmlu
ZGFibGU+e3tudW1iZXJFeHByZXNzaW9ufX08L3NwYW4+LgotICoKLSAqICMgQ29uZmlndXJpbmcg
bmdQbHVyYWxpemUgd2l0aCBvZmZzZXQKLSAqIFRoZSBgb2Zmc2V0YCBhdHRyaWJ1dGUgYWxsb3dz
IGZ1cnRoZXIgY3VzdG9taXphdGlvbiBvZiBwbHVyYWxpemVkIHRleHQsIHdoaWNoIGNhbiByZXN1
bHQgaW4KLSAqIGEgYmV0dGVyIHVzZXIgZXhwZXJpZW5jZS4gRm9yIGV4YW1wbGUsIGluc3RlYWQg
b2YgdGhlIG1lc3NhZ2UgIjQgcGVvcGxlIGFyZSB2aWV3aW5nIHRoaXMgZG9jdW1lbnQiLAotICog
eW91IG1pZ2h0IGRpc3BsYXkgIkpvaG4sIEthdGUgYW5kIDIgb3RoZXJzIGFyZSB2aWV3aW5nIHRo
aXMgZG9jdW1lbnQiLgotICogVGhlIG9mZnNldCBhdHRyaWJ1dGUgYWxsb3dzIHlvdSB0byBvZmZz
ZXQgYSBudW1iZXIgYnkgYW55IGRlc2lyZWQgdmFsdWUuCi0gKiBMZXQncyB0YWtlIGEgbG9vayBh
dCBhbiBleGFtcGxlOgotICoKLSAqIDxwcmU+Ci0gKiA8bmctcGx1cmFsaXplIGNvdW50PSJwZXJz
b25Db3VudCIgb2Zmc2V0PTIKLSAqICAgICAgICAgICAgICAgd2hlbj0ieycwJzogJ05vYm9keSBp
cyB2aWV3aW5nLicsCi0gKiAgICAgICAgICAgICAgICAgICAgICAnMSc6ICd7e3BlcnNvbjF9fSBp
cyB2aWV3aW5nLicsCi0gKiAgICAgICAgICAgICAgICAgICAgICAnMic6ICd7e3BlcnNvbjF9fSBh
bmQge3twZXJzb24yfX0gYXJlIHZpZXdpbmcuJywKLSAqICAgICAgICAgICAgICAgICAgICAgICdv
bmUnOiAne3twZXJzb24xfX0sIHt7cGVyc29uMn19IGFuZCBvbmUgb3RoZXIgcGVyc29uIGFyZSB2
aWV3aW5nLicsCi0gKiAgICAgICAgICAgICAgICAgICAgICAnb3RoZXInOiAne3twZXJzb24xfX0s
IHt7cGVyc29uMn19IGFuZCB7fSBvdGhlciBwZW9wbGUgYXJlIHZpZXdpbmcuJ30iPgotICogPC9u
Zy1wbHVyYWxpemU+Ci0gKiA8L3ByZT4KLSAqCi0gKiBOb3RpY2UgdGhhdCB3ZSBhcmUgc3RpbGwg
dXNpbmcgdHdvIHBsdXJhbCBjYXRlZ29yaWVzKG9uZSwgb3RoZXIpLCBidXQgd2UgYWRkZWQKLSAq
IHRocmVlIGV4cGxpY2l0IG51bWJlciBydWxlcyAwLCAxIGFuZCAyLgotICogV2hlbiBvbmUgcGVy
c29uLCBwZXJoYXBzIEpvaG4sIHZpZXdzIHRoZSBkb2N1bWVudCwgIkpvaG4gaXMgdmlld2luZyIg
d2lsbCBiZSBzaG93bi4KLSAqIFdoZW4gdGhyZWUgcGVvcGxlIHZpZXcgdGhlIGRvY3VtZW50LCBu
byBleHBsaWNpdCBudW1iZXIgcnVsZSBpcyBmb3VuZCwgc28KLSAqIGFuIG9mZnNldCBvZiAyIGlz
IHRha2VuIG9mZiAzLCBhbmQgQW5ndWxhciB1c2VzIDEgdG8gZGVjaWRlIHRoZSBwbHVyYWwgY2F0
ZWdvcnkuCi0gKiBJbiB0aGlzIGNhc2UsIHBsdXJhbCBjYXRlZ29yeSAnb25lJyBpcyBtYXRjaGVk
IGFuZCAiSm9obiwgTWFycnkgYW5kIG9uZSBvdGhlciBwZXJzb24gYXJlIHZpZXdpbmciCi0gKiBp
cyBzaG93bi4KLSAqCi0gKiBOb3RlIHRoYXQgd2hlbiB5b3Ugc3BlY2lmeSBvZmZzZXRzLCB5b3Ug
bXVzdCBwcm92aWRlIGV4cGxpY2l0IG51bWJlciBydWxlcyBmb3IKLSAqIG51bWJlcnMgZnJvbSAw
IHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIG9mZnNldC4gSWYgeW91IHVzZSBhbiBvZmZzZXQgb2Yg
MywgZm9yIGV4YW1wbGUsCi0gKiB5b3UgbXVzdCBwcm92aWRlIGV4cGxpY2l0IG51bWJlciBydWxl
cyBmb3IgMCwgMSwgMiBhbmQgMy4gWW91IG11c3QgYWxzbyBwcm92aWRlIHBsdXJhbCBzdHJpbmdz
IGZvcgotICogcGx1cmFsIGNhdGVnb3JpZXMgIm9uZSIgYW5kICJvdGhlciIuCi0gKgotICogQHBh
cmFtIHtzdHJpbmd8ZXhwcmVzc2lvbn0gY291bnQgVGhlIHZhcmlhYmxlIHRvIGJlIGJvdW5kZWQg
dG8uCi0gKiBAcGFyYW0ge3N0cmluZ30gd2hlbiBUaGUgbWFwcGluZyBiZXR3ZWVuIHBsdXJhbCBj
YXRlZ29yeSB0byBpdHMgY29ycmVzcG9kaW5nIHN0cmluZ3MuCi0gKiBAcGFyYW0ge251bWJlcj19
IG9mZnNldCBPZmZzZXQgdG8gZGVkdWN0IGZyb20gdGhlIHRvdGFsIG51bWJlci4KLSAqCi0gKiBA
ZXhhbXBsZQotICAgIDxkb2M6ZXhhbXBsZT4KLSAgICAgIDxkb2M6c291cmNlPgotICAgICAgICA8
c2NyaXB0PgotICAgICAgICAgIGZ1bmN0aW9uIEN0cmwoJHNjb3BlKSB7Ci0gICAgICAgICAgICAk
c2NvcGUucGVyc29uMSA9ICdJZ29yJzsKLSAgICAgICAgICAgICRzY29wZS5wZXJzb24yID0gJ01p
c2tvJzsKLSAgICAgICAgICAgICRzY29wZS5wZXJzb25Db3VudCA9IDE7Ci0gICAgICAgICAgfQot
ICAgICAgICA8L3NjcmlwdD4KLSAgICAgICAgPGRpdiBuZy1jb250cm9sbGVyPSJDdHJsIj4KLSAg
ICAgICAgICBQZXJzb24gMTo8aW5wdXQgdHlwZT0idGV4dCIgbmctbW9kZWw9InBlcnNvbjEiIHZh
bHVlPSJJZ29yIiAvPjxici8+Ci0gICAgICAgICAgUGVyc29uIDI6PGlucHV0IHR5cGU9InRleHQi
IG5nLW1vZGVsPSJwZXJzb24yIiB2YWx1ZT0iTWlza28iIC8+PGJyLz4KLSAgICAgICAgICBOdW1i
ZXIgb2YgUGVvcGxlOjxpbnB1dCB0eXBlPSJ0ZXh0IiBuZy1tb2RlbD0icGVyc29uQ291bnQiIHZh
bHVlPSIxIiAvPjxici8+Ci0KLSAgICAgICAgICA8IS0tLSBFeGFtcGxlIHdpdGggc2ltcGxlIHBs
dXJhbGl6YXRpb24gcnVsZXMgZm9yIGVuIGxvY2FsZSAtLS0+Ci0gICAgICAgICAgV2l0aG91dCBP
ZmZzZXQ6Ci0gICAgICAgICAgPG5nLXBsdXJhbGl6ZSBjb3VudD0icGVyc29uQ291bnQiCi0gICAg
ICAgICAgICAgICAgICAgICAgICB3aGVuPSJ7JzAnOiAnTm9ib2R5IGlzIHZpZXdpbmcuJywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25lJzogJzEgcGVyc29uIGlzIHZpZXdpbmcu
JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3RoZXInOiAne30gcGVvcGxlIGFy
ZSB2aWV3aW5nLid9Ij4KLSAgICAgICAgICA8L25nLXBsdXJhbGl6ZT48YnI+Ci0KLSAgICAgICAg
ICA8IS0tLSBFeGFtcGxlIHdpdGggb2Zmc2V0IC0tLT4KLSAgICAgICAgICBXaXRoIE9mZnNldCgy
KToKLSAgICAgICAgICA8bmctcGx1cmFsaXplIGNvdW50PSJwZXJzb25Db3VudCIgb2Zmc2V0PTIK
LSAgICAgICAgICAgICAgICAgICAgICAgIHdoZW49InsnMCc6ICdOb2JvZHkgaXMgdmlld2luZy4n
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxJzogJ3t7cGVyc29uMX19IGlzIHZp
ZXdpbmcuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMic6ICd7e3BlcnNvbjF9
fSBhbmQge3twZXJzb24yfX0gYXJlIHZpZXdpbmcuJywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnb25lJzogJ3t7cGVyc29uMX19LCB7e3BlcnNvbjJ9fSBhbmQgb25lIG90aGVyIHBl
cnNvbiBhcmUgdmlld2luZy4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvdGhl
cic6ICd7e3BlcnNvbjF9fSwge3twZXJzb24yfX0gYW5kIHt9IG90aGVyIHBlb3BsZSBhcmUgdmll
d2luZy4nfSI+Ci0gICAgICAgICAgPC9uZy1wbHVyYWxpemU+Ci0gICAgICAgIDwvZGl2PgotICAg
ICAgPC9kb2M6c291cmNlPgotICAgICAgPGRvYzpzY2VuYXJpbz4KLSAgICAgICAgaXQoJ3Nob3Vs
ZCBzaG93IGNvcnJlY3QgcGx1cmFsaXplZCBzdHJpbmcnLCBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgbmctcGx1cmFsaXplOmZpcnN0Jyku
dGV4dCgpKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
QmUoJzEgcGVyc29uIGlzIHZpZXdpbmcuJyk7Ci0gICAgICAgICAgZXhwZWN0KGVsZW1lbnQoJy5k
b2MtZXhhbXBsZS1saXZlIG5nLXBsdXJhbGl6ZTpsYXN0JykudGV4dCgpKS4KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvQmUoJ0lnb3IgaXMgdmlld2lu
Zy4nKTsKLQotICAgICAgICAgIHVzaW5nKCcuZG9jLWV4YW1wbGUtbGl2ZScpLmlucHV0KCdwZXJz
b25Db3VudCcpLmVudGVyKCcwJyk7Ci0gICAgICAgICAgZXhwZWN0KGVsZW1lbnQoJy5kb2MtZXhh
bXBsZS1saXZlIG5nLXBsdXJhbGl6ZTpmaXJzdCcpLnRleHQoKSkuCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvQmUoJ05vYm9keSBpcyB2aWV3aW5nLicp
OwotICAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBuZy1wbHVyYWxp
emU6bGFzdCcpLnRleHQoKSkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9CZSgnTm9ib2R5IGlzIHZpZXdpbmcuJyk7Ci0KLSAgICAgICAgICB1c2luZygn
LmRvYy1leGFtcGxlLWxpdmUnKS5pbnB1dCgncGVyc29uQ291bnQnKS5lbnRlcignMicpOwotICAg
ICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBuZy1wbHVyYWxpemU6Zmly
c3QnKS50ZXh0KCkpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0b0JlKCcyIHBlb3BsZSBhcmUgdmlld2luZy4nKTsKLSAgICAgICAgICBleHBlY3QoZWxlbWVu
dCgnLmRvYy1leGFtcGxlLWxpdmUgbmctcGx1cmFsaXplOmxhc3QnKS50ZXh0KCkpLgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG9CZSgnSWdvciBhbmQgTWlza28gYXJlIHZpZXdpbmcu
Jyk7Ci0KLSAgICAgICAgICB1c2luZygnLmRvYy1leGFtcGxlLWxpdmUnKS5pbnB1dCgncGVyc29u
Q291bnQnKS5lbnRlcignMycpOwotICAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1w
bGUtbGl2ZSBuZy1wbHVyYWxpemU6Zmlyc3QnKS50ZXh0KCkpLgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b0JlKCczIHBlb3BsZSBhcmUgdmlld2luZy4nKTsK
LSAgICAgICAgICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgbmctcGx1cmFsaXpl
Omxhc3QnKS50ZXh0KCkpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9CZSgnSWdv
ciwgTWlza28gYW5kIG9uZSBvdGhlciBwZXJzb24gYXJlIHZpZXdpbmcuJyk7Ci0KLSAgICAgICAg
ICB1c2luZygnLmRvYy1leGFtcGxlLWxpdmUnKS5pbnB1dCgncGVyc29uQ291bnQnKS5lbnRlcign
NCcpOwotICAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBuZy1wbHVy
YWxpemU6Zmlyc3QnKS50ZXh0KCkpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b0JlKCc0IHBlb3BsZSBhcmUgdmlld2luZy4nKTsKLSAgICAgICAgICBleHBl
Y3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgbmctcGx1cmFsaXplOmxhc3QnKS50ZXh0KCkp
LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9CZSgnSWdvciwgTWlza28gYW5kIDIg
b3RoZXIgcGVvcGxlIGFyZSB2aWV3aW5nLicpOwotICAgICAgICB9KTsKLQotICAgICAgICBpdCgn
c2hvdWxkIHNob3cgZGF0YS1iaW5kZWQgbmFtZXMnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICB1
c2luZygnLmRvYy1leGFtcGxlLWxpdmUnKS5pbnB1dCgncGVyc29uQ291bnQnKS5lbnRlcignNCcp
OwotICAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBuZy1wbHVyYWxp
emU6bGFzdCcpLnRleHQoKSkuCi0gICAgICAgICAgICAgIHRvQmUoJ0lnb3IsIE1pc2tvIGFuZCAy
IG90aGVyIHBlb3BsZSBhcmUgdmlld2luZy4nKTsKLQotICAgICAgICAgIHVzaW5nKCcuZG9jLWV4
YW1wbGUtbGl2ZScpLmlucHV0KCdwZXJzb24xJykuZW50ZXIoJ0RpJyk7Ci0gICAgICAgICAgdXNp
bmcoJy5kb2MtZXhhbXBsZS1saXZlJykuaW5wdXQoJ3BlcnNvbjInKS5lbnRlcignVm9qdGEnKTsK
LSAgICAgICAgICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgbmctcGx1cmFsaXpl
Omxhc3QnKS50ZXh0KCkpLgotICAgICAgICAgICAgICB0b0JlKCdEaSwgVm9qdGEgYW5kIDIgb3Ro
ZXIgcGVvcGxlIGFyZSB2aWV3aW5nLicpOwotICAgICAgICB9KTsKLSAgICAgIDwvZG9jOnNjZW5h
cmlvPgotICAgIDwvZG9jOmV4YW1wbGU+Ci0gKi8KLXZhciBuZ1BsdXJhbGl6ZURpcmVjdGl2ZSA9
IFsnJGxvY2FsZScsICckaW50ZXJwb2xhdGUnLCBmdW5jdGlvbigkbG9jYWxlLCAkaW50ZXJwb2xh
dGUpIHsKLSAgdmFyIEJSQUNFID0gL3t9L2c7Ci0gIHJldHVybiB7Ci0gICAgcmVzdHJpY3Q6ICdF
QScsCi0gICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHIpIHsKLSAgICAgIHZh
ciBudW1iZXJFeHAgPSBhdHRyLmNvdW50LAotICAgICAgICAgIHdoZW5FeHAgPSBlbGVtZW50LmF0
dHIoYXR0ci4kYXR0ci53aGVuKSwgLy8gdGhpcyBpcyBiZWNhdXNlIHdlIGhhdmUge3t9fSBpbiBh
dHRycwotICAgICAgICAgIG9mZnNldCA9IGF0dHIub2Zmc2V0IHx8IDAsCi0gICAgICAgICAgd2hl
bnMgPSBzY29wZS4kZXZhbCh3aGVuRXhwKSwKLSAgICAgICAgICB3aGVuc0V4cEZucyA9IHt9LAot
ICAgICAgICAgIHN0YXJ0U3ltYm9sID0gJGludGVycG9sYXRlLnN0YXJ0U3ltYm9sKCksCi0gICAg
ICAgICAgZW5kU3ltYm9sID0gJGludGVycG9sYXRlLmVuZFN5bWJvbCgpOwotCi0gICAgICBmb3JF
YWNoKHdoZW5zLCBmdW5jdGlvbihleHByZXNzaW9uLCBrZXkpIHsKLSAgICAgICAgd2hlbnNFeHBG
bnNba2V5XSA9Ci0gICAgICAgICAgJGludGVycG9sYXRlKGV4cHJlc3Npb24ucmVwbGFjZShCUkFD
RSwgc3RhcnRTeW1ib2wgKyBudW1iZXJFeHAgKyAnLScgKwotICAgICAgICAgICAgb2Zmc2V0ICsg
ZW5kU3ltYm9sKSk7Ci0gICAgICB9KTsKLQotICAgICAgc2NvcGUuJHdhdGNoKGZ1bmN0aW9uIG5n
UGx1cmFsaXplV2F0Y2goKSB7Ci0gICAgICAgIHZhciB2YWx1ZSA9IHBhcnNlRmxvYXQoc2NvcGUu
JGV2YWwobnVtYmVyRXhwKSk7Ci0KLSAgICAgICAgaWYgKCFpc05hTih2YWx1ZSkpIHsKLSAgICAg
ICAgICAvL2lmIGV4cGxpY2l0IG51bWJlciBydWxlIHN1Y2ggYXMgMSwgMiwgMy4uLiBpcyBkZWZp
bmVkLCBqdXN0IHVzZSBpdC4gT3RoZXJ3aXNlLAotICAgICAgICAgIC8vY2hlY2sgaXQgYWdhaW5z
dCBwbHVyYWxpemF0aW9uIHJ1bGVzIGluICRsb2NhbGUgc2VydmljZQotICAgICAgICAgIGlmICgh
KHZhbHVlIGluIHdoZW5zKSkgdmFsdWUgPSAkbG9jYWxlLnBsdXJhbENhdCh2YWx1ZSAtIG9mZnNl
dCk7Ci0gICAgICAgICAgIHJldHVybiB3aGVuc0V4cEZuc1t2YWx1ZV0oc2NvcGUsIGVsZW1lbnQs
IHRydWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHJldHVybiAnJzsKLSAgICAgICAg
fQotICAgICAgfSwgZnVuY3Rpb24gbmdQbHVyYWxpemVXYXRjaEFjdGlvbihuZXdWYWwpIHsKLSAg
ICAgICAgZWxlbWVudC50ZXh0KG5ld1ZhbCk7Ci0gICAgICB9KTsKLSAgICB9Ci0gIH07Ci19XTsK
LQotLyoqCi0gKiBAbmdkb2MgZGlyZWN0aXZlCi0gKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdSZXBl
YXQKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIFRoZSBgbmdSZXBlYXRgIGRpcmVjdGl2ZSBpbnN0
YW50aWF0ZXMgYSB0ZW1wbGF0ZSBvbmNlIHBlciBpdGVtIGZyb20gYSBjb2xsZWN0aW9uLiBFYWNo
IHRlbXBsYXRlCi0gKiBpbnN0YW5jZSBnZXRzIGl0cyBvd24gc2NvcGUsIHdoZXJlIHRoZSBnaXZl
biBsb29wIHZhcmlhYmxlIGlzIHNldCB0byB0aGUgY3VycmVudCBjb2xsZWN0aW9uIGl0ZW0sCi0g
KiBhbmQgYCRpbmRleGAgaXMgc2V0IHRvIHRoZSBpdGVtIGluZGV4IG9yIGtleS4KLSAqCi0gKiBT
cGVjaWFsIHByb3BlcnRpZXMgYXJlIGV4cG9zZWQgb24gdGhlIGxvY2FsIHNjb3BlIG9mIGVhY2gg
dGVtcGxhdGUgaW5zdGFuY2UsIGluY2x1ZGluZzoKLSAqCi0gKiAgICogYCRpbmRleGAg4oCTIGB7
bnVtYmVyfWAg4oCTIGl0ZXJhdG9yIG9mZnNldCBvZiB0aGUgcmVwZWF0ZWQgZWxlbWVudCAoMC4u
bGVuZ3RoLTEpCi0gKiAgICogYCRmaXJzdGAg4oCTIGB7Ym9vbGVhbn1gIOKAkyB0cnVlIGlmIHRo
ZSByZXBlYXRlZCBlbGVtZW50IGlzIGZpcnN0IGluIHRoZSBpdGVyYXRvci4KLSAqICAgKiBgJG1p
ZGRsZWAg4oCTIGB7Ym9vbGVhbn1gIOKAkyB0cnVlIGlmIHRoZSByZXBlYXRlZCBlbGVtZW50IGlz
IGJldHdlZW4gdGhlIGZpcnN0IGFuZCBsYXN0IGluIHRoZSBpdGVyYXRvci4KLSAqICAgKiBgJGxh
c3RgIOKAkyBge2Jvb2xlYW59YCDigJMgdHJ1ZSBpZiB0aGUgcmVwZWF0ZWQgZWxlbWVudCBpcyBs
YXN0IGluIHRoZSBpdGVyYXRvci4KLSAqCi0gKgotICogQGVsZW1lbnQgQU5ZCi0gKiBAc2NvcGUK
LSAqIEBwcmlvcml0eSAxMDAwCi0gKiBAcGFyYW0ge3JlcGVhdF9leHByZXNzaW9ufSBuZ1JlcGVh
dCBUaGUgZXhwcmVzc2lvbiBpbmRpY2F0aW5nIGhvdyB0byBlbnVtZXJhdGUgYSBjb2xsZWN0aW9u
LiBUd28KLSAqICAgZm9ybWF0cyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZDoKLSAqCi0gKiAgICog
YHZhcmlhYmxlIGluIGV4cHJlc3Npb25gIOKAkyB3aGVyZSB2YXJpYWJsZSBpcyB0aGUgdXNlciBk
ZWZpbmVkIGxvb3AgdmFyaWFibGUgYW5kIGBleHByZXNzaW9uYAotICogICAgIGlzIGEgc2NvcGUg
ZXhwcmVzc2lvbiBnaXZpbmcgdGhlIGNvbGxlY3Rpb24gdG8gZW51bWVyYXRlLgotICoKLSAqICAg
ICBGb3IgZXhhbXBsZTogYHRyYWNrIGluIGNkLnRyYWNrc2AuCi0gKgotICogICAqIGAoa2V5LCB2
YWx1ZSkgaW4gZXhwcmVzc2lvbmAg4oCTIHdoZXJlIGBrZXlgIGFuZCBgdmFsdWVgIGNhbiBiZSBh
bnkgdXNlciBkZWZpbmVkIGlkZW50aWZpZXJzLAotICogICAgIGFuZCBgZXhwcmVzc2lvbmAgaXMg
dGhlIHNjb3BlIGV4cHJlc3Npb24gZ2l2aW5nIHRoZSBjb2xsZWN0aW9uIHRvIGVudW1lcmF0ZS4K
LSAqCi0gKiAgICAgRm9yIGV4YW1wbGU6IGAobmFtZSwgYWdlKSBpbiB7J2FkYW0nOjEwLCAnYW1h
bGllJzoxMn1gLgotICoKLSAqIEBleGFtcGxlCi0gKiBUaGlzIGV4YW1wbGUgaW5pdGlhbGl6ZXMg
dGhlIHNjb3BlIHRvIGEgbGlzdCBvZiBuYW1lcyBhbmQKLSAqIHRoZW4gdXNlcyBgbmdSZXBlYXRg
IHRvIGRpc3BsYXkgZXZlcnkgcGVyc29uOgotICAgIDxkb2M6ZXhhbXBsZT4KLSAgICAgIDxkb2M6
c291cmNlPgotICAgICAgICA8ZGl2IG5nLWluaXQ9ImZyaWVuZHMgPSBbe25hbWU6J0pvaG4nLCBh
Z2U6MjV9LCB7bmFtZTonTWFyeScsIGFnZToyOH1dIj4KLSAgICAgICAgICBJIGhhdmUge3tmcmll
bmRzLmxlbmd0aH19IGZyaWVuZHMuIFRoZXkgYXJlOgotICAgICAgICAgIDx1bD4KLSAgICAgICAg
ICAgIDxsaSBuZy1yZXBlYXQ9ImZyaWVuZCBpbiBmcmllbmRzIj4KLSAgICAgICAgICAgICAgW3t7
JGluZGV4ICsgMX19XSB7e2ZyaWVuZC5uYW1lfX0gd2hvIGlzIHt7ZnJpZW5kLmFnZX19IHllYXJz
IG9sZC4KLSAgICAgICAgICAgIDwvbGk+Ci0gICAgICAgICAgPC91bD4KLSAgICAgICAgPC9kaXY+
Ci0gICAgICA8L2RvYzpzb3VyY2U+Ci0gICAgICA8ZG9jOnNjZW5hcmlvPgotICAgICAgICAgaXQo
J3Nob3VsZCBjaGVjayBuZy1yZXBlYXQnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgdmFyIHIg
PSB1c2luZygnLmRvYy1leGFtcGxlLWxpdmUnKS5yZXBlYXRlcigndWwgbGknKTsKLSAgICAgICAg
ICAgZXhwZWN0KHIuY291bnQoKSkudG9CZSgyKTsKLSAgICAgICAgICAgZXhwZWN0KHIucm93KDAp
KS50b0VxdWFsKFsiMSIsIkpvaG4iLCIyNSJdKTsKLSAgICAgICAgICAgZXhwZWN0KHIucm93KDEp
KS50b0VxdWFsKFsiMiIsIk1hcnkiLCIyOCJdKTsKLSAgICAgICAgIH0pOwotICAgICAgPC9kb2M6
c2NlbmFyaW8+Ci0gICAgPC9kb2M6ZXhhbXBsZT4KLSAqLwotdmFyIG5nUmVwZWF0RGlyZWN0aXZl
ID0gbmdEaXJlY3RpdmUoewotICB0cmFuc2NsdWRlOiAnZWxlbWVudCcsCi0gIHByaW9yaXR5OiAx
MDAwLAotICB0ZXJtaW5hbDogdHJ1ZSwKLSAgY29tcGlsZTogZnVuY3Rpb24oZWxlbWVudCwgYXR0
ciwgbGlua2VyKSB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBpdGVyU3RhcnRFbGVtZW50
LCBhdHRyKXsKLSAgICAgIHZhciBleHByZXNzaW9uID0gYXR0ci5uZ1JlcGVhdDsKLSAgICAgIHZh
ciBtYXRjaCA9IGV4cHJlc3Npb24ubWF0Y2goL15ccyooLispXHMraW5ccysoLiopXHMqJC8pLAot
ICAgICAgICBsaHMsIHJocywgdmFsdWVJZGVudCwga2V5SWRlbnQ7Ci0gICAgICBpZiAoISBtYXRj
aCkgewotICAgICAgICB0aHJvdyBFcnJvcigiRXhwZWN0ZWQgbmdSZXBlYXQgaW4gZm9ybSBvZiAn
X2l0ZW1fIGluIF9jb2xsZWN0aW9uXycgYnV0IGdvdCAnIiArCi0gICAgICAgICAgZXhwcmVzc2lv
biArICInLiIpOwotICAgICAgfQotICAgICAgbGhzID0gbWF0Y2hbMV07Ci0gICAgICByaHMgPSBt
YXRjaFsyXTsKLSAgICAgIG1hdGNoID0gbGhzLm1hdGNoKC9eKD86KFtcJFx3XSspfFwoKFtcJFx3
XSspXHMqLFxzKihbXCRcd10rKVwpKSQvKTsKLSAgICAgIGlmICghbWF0Y2gpIHsKLSAgICAgICAg
dGhyb3cgRXJyb3IoIidpdGVtJyBpbiAnaXRlbSBpbiBjb2xsZWN0aW9uJyBzaG91bGQgYmUgaWRl
bnRpZmllciBvciAoa2V5LCB2YWx1ZSkgYnV0IGdvdCAnIiArCi0gICAgICAgICAgICBsaHMgKyAi
Jy4iKTsKLSAgICAgIH0KLSAgICAgIHZhbHVlSWRlbnQgPSBtYXRjaFszXSB8fCBtYXRjaFsxXTsK
LSAgICAgIGtleUlkZW50ID0gbWF0Y2hbMl07Ci0KLSAgICAgIC8vIFN0b3JlIGEgbGlzdCBvZiBl
bGVtZW50cyBmcm9tIHByZXZpb3VzIHJ1bi4gVGhpcyBpcyBhIGhhc2ggd2hlcmUga2V5IGlzIHRo
ZSBpdGVtIGZyb20gdGhlCi0gICAgICAvLyBpdGVyYXRvciwgYW5kIHRoZSB2YWx1ZSBpcyBhbiBh
cnJheSBvZiBvYmplY3RzIHdpdGggZm9sbG93aW5nIHByb3BlcnRpZXMuCi0gICAgICAvLyAgIC0g
c2NvcGU6IGJvdW5kIHNjb3BlCi0gICAgICAvLyAgIC0gZWxlbWVudDogcHJldmlvdXMgZWxlbWVu
dC4KLSAgICAgIC8vICAgLSBpbmRleDogcG9zaXRpb24KLSAgICAgIC8vIFdlIG5lZWQgYW4gYXJy
YXkgb2YgdGhlc2Ugb2JqZWN0cyBzaW5jZSB0aGUgc2FtZSBvYmplY3QgY2FuIGJlIHJldHVybmVk
IGZyb20gdGhlIGl0ZXJhdG9yLgotICAgICAgLy8gV2UgZXhwZWN0IHRoaXMgdG8gYmUgYSByYXJl
IGNhc2UuCi0gICAgICB2YXIgbGFzdE9yZGVyID0gbmV3IEhhc2hRdWV1ZU1hcCgpOwotCi0gICAg
ICBzY29wZS4kd2F0Y2goZnVuY3Rpb24gbmdSZXBlYXRXYXRjaChzY29wZSl7Ci0gICAgICAgIHZh
ciBpbmRleCwgbGVuZ3RoLAotICAgICAgICAgICAgY29sbGVjdGlvbiA9IHNjb3BlLiRldmFsKHJo
cyksCi0gICAgICAgICAgICBjdXJzb3IgPSBpdGVyU3RhcnRFbGVtZW50LCAgICAgLy8gY3VycmVu
dCBwb3NpdGlvbiBvZiB0aGUgbm9kZQotICAgICAgICAgICAgLy8gU2FtZSBhcyBsYXN0T3JkZXIg
YnV0IGl0IGhhcyB0aGUgY3VycmVudCBzdGF0ZS4gSXQgd2lsbCBiZWNvbWUgdGhlCi0gICAgICAg
ICAgICAvLyBsYXN0T3JkZXIgb24gdGhlIG5leHQgaXRlcmF0aW9uLgotICAgICAgICAgICAgbmV4
dE9yZGVyID0gbmV3IEhhc2hRdWV1ZU1hcCgpLAotICAgICAgICAgICAgYXJyYXlCb3VuZCwKLSAg
ICAgICAgICAgIGNoaWxkU2NvcGUsCi0gICAgICAgICAgICBrZXksIHZhbHVlLCAvLyBrZXkvdmFs
dWUgb2YgaXRlcmF0aW9uCi0gICAgICAgICAgICBhcnJheSwKLSAgICAgICAgICAgIGxhc3Q7ICAg
ICAgIC8vIGxhc3Qgb2JqZWN0IGluZm9ybWF0aW9uIHtzY29wZSwgZWxlbWVudCwgaW5kZXh9Ci0K
LQotCi0gICAgICAgIGlmICghaXNBcnJheShjb2xsZWN0aW9uKSkgewotICAgICAgICAgIC8vIGlm
IG9iamVjdCwgZXh0cmFjdCBrZXlzLCBzb3J0IHRoZW0gYW5kIHVzZSB0byBkZXRlcm1pbmUgb3Jk
ZXIgb2YgaXRlcmF0aW9uIG92ZXIgb2JqIHByb3BzCi0gICAgICAgICAgYXJyYXkgPSBbXTsKLSAg
ICAgICAgICBmb3Ioa2V5IGluIGNvbGxlY3Rpb24pIHsKLSAgICAgICAgICAgIGlmIChjb2xsZWN0
aW9uLmhhc093blByb3BlcnR5KGtleSkgJiYga2V5LmNoYXJBdCgwKSAhPSAnJCcpIHsKLSAgICAg
ICAgICAgICAgYXJyYXkucHVzaChrZXkpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAg
ICAgICAgICBhcnJheS5zb3J0KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgYXJyYXkg
PSBjb2xsZWN0aW9uIHx8IFtdOwotICAgICAgICB9Ci0KLSAgICAgICAgYXJyYXlCb3VuZCA9IGFy
cmF5Lmxlbmd0aC0xOwotCi0gICAgICAgIC8vIHdlIGFyZSBub3QgdXNpbmcgZm9yRWFjaCBmb3Ig
cGVyZiByZWFzb25zICh0cnlpbmcgdG8gYXZvaWQgI2NhbGwpCi0gICAgICAgIGZvciAoaW5kZXgg
PSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7Ci0g
ICAgICAgICAga2V5ID0gKGNvbGxlY3Rpb24gPT09IGFycmF5KSA/IGluZGV4IDogYXJyYXlbaW5k
ZXhdOwotICAgICAgICAgIHZhbHVlID0gY29sbGVjdGlvbltrZXldOwotCi0gICAgICAgICAgbGFz
dCA9IGxhc3RPcmRlci5zaGlmdCh2YWx1ZSk7Ci0KLSAgICAgICAgICBpZiAobGFzdCkgewotICAg
ICAgICAgICAgLy8gaWYgd2UgaGF2ZSBhbHJlYWR5IHNlZW4gdGhpcyBvYmplY3QsIHRoZW4gd2Ug
bmVlZCB0byByZXVzZSB0aGUKLSAgICAgICAgICAgIC8vIGFzc29jaWF0ZWQgc2NvcGUvZWxlbWVu
dAotICAgICAgICAgICAgY2hpbGRTY29wZSA9IGxhc3Quc2NvcGU7Ci0gICAgICAgICAgICBuZXh0
T3JkZXIucHVzaCh2YWx1ZSwgbGFzdCk7Ci0KLSAgICAgICAgICAgIGlmIChpbmRleCA9PT0gbGFz
dC5pbmRleCkgewotICAgICAgICAgICAgICAvLyBkbyBub3RoaW5nCi0gICAgICAgICAgICAgIGN1
cnNvciA9IGxhc3QuZWxlbWVudDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
IC8vIGV4aXN0aW5nIGl0ZW0gd2hpY2ggZ290IG1vdmVkCi0gICAgICAgICAgICAgIGxhc3QuaW5k
ZXggPSBpbmRleDsKLSAgICAgICAgICAgICAgLy8gVGhpcyBtYXkgYmUgYSBub29wLCBpZiB0aGUg
ZWxlbWVudCBpcyBuZXh0LCBidXQgSSBkb24ndCBrbm93IG9mIGEgZ29vZCB3YXkgdG8KLSAgICAg
ICAgICAgICAgLy8gZmlndXJlIHRoaXMgb3V0LCAgc2luY2UgaXQgd291bGQgcmVxdWlyZSBleHRy
YSBET00gYWNjZXNzLCBzbyBsZXQncyBqdXN0IGhvcGUgdGhhdAotICAgICAgICAgICAgICAvLyB0
aGUgYnJvd3NlcnMgcmVhbGl6ZXMgdGhhdCBpdCBpcyBub29wLCBhbmQgdHJlYXRzIGl0IGFzIHN1
Y2guCi0gICAgICAgICAgICAgIGN1cnNvci5hZnRlcihsYXN0LmVsZW1lbnQpOwotICAgICAgICAg
ICAgICBjdXJzb3IgPSBsYXN0LmVsZW1lbnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIC8vIG5ldyBpdGVtIHdoaWNoIHdlIGRvbid0IGtub3cgYWJvdXQK
LSAgICAgICAgICAgIGNoaWxkU2NvcGUgPSBzY29wZS4kbmV3KCk7Ci0gICAgICAgICAgfQotCi0g
ICAgICAgICAgY2hpbGRTY29wZVt2YWx1ZUlkZW50XSA9IHZhbHVlOwotICAgICAgICAgIGlmIChr
ZXlJZGVudCkgY2hpbGRTY29wZVtrZXlJZGVudF0gPSBrZXk7Ci0gICAgICAgICAgY2hpbGRTY29w
ZS4kaW5kZXggPSBpbmRleDsKLQotICAgICAgICAgIGNoaWxkU2NvcGUuJGZpcnN0ID0gKGluZGV4
ID09PSAwKTsKLSAgICAgICAgICBjaGlsZFNjb3BlLiRsYXN0ID0gKGluZGV4ID09PSBhcnJheUJv
dW5kKTsKLSAgICAgICAgICBjaGlsZFNjb3BlLiRtaWRkbGUgPSAhKGNoaWxkU2NvcGUuJGZpcnN0
IHx8IGNoaWxkU2NvcGUuJGxhc3QpOwotCi0gICAgICAgICAgaWYgKCFsYXN0KSB7Ci0gICAgICAg
ICAgICBsaW5rZXIoY2hpbGRTY29wZSwgZnVuY3Rpb24oY2xvbmUpewotICAgICAgICAgICAgICBj
dXJzb3IuYWZ0ZXIoY2xvbmUpOwotICAgICAgICAgICAgICBsYXN0ID0gewotICAgICAgICAgICAg
ICAgICAgc2NvcGU6IGNoaWxkU2NvcGUsCi0gICAgICAgICAgICAgICAgICBlbGVtZW50OiAoY3Vy
c29yID0gY2xvbmUpLAotICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4Ci0gICAgICAgICAg
ICAgICAgfTsKLSAgICAgICAgICAgICAgbmV4dE9yZGVyLnB1c2godmFsdWUsIGxhc3QpOwotICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy9zaHJpbmsg
Y2hpbGRyZW4KLSAgICAgICAgZm9yIChrZXkgaW4gbGFzdE9yZGVyKSB7Ci0gICAgICAgICAgaWYg
KGxhc3RPcmRlci5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7Ci0gICAgICAgICAgICBhcnJheSA9IGxh
c3RPcmRlcltrZXldOwotICAgICAgICAgICAgd2hpbGUoYXJyYXkubGVuZ3RoKSB7Ci0gICAgICAg
ICAgICAgIHZhbHVlID0gYXJyYXkucG9wKCk7Ci0gICAgICAgICAgICAgIHZhbHVlLmVsZW1lbnQu
cmVtb3ZlKCk7Ci0gICAgICAgICAgICAgIHZhbHVlLnNjb3BlLiRkZXN0cm95KCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgbGFzdE9yZGVyID0gbmV4
dE9yZGVyOwotICAgICAgfSk7Ci0gICAgfTsKLSAgfQotfSk7Ci0KLS8qKgotICogQG5nZG9jIGRp
cmVjdGl2ZQotICogQG5hbWUgbmcuZGlyZWN0aXZlOm5nU2hvdwotICoKLSAqIEBkZXNjcmlwdGlv
bgotICogVGhlIGBuZ1Nob3dgIGFuZCBgbmdIaWRlYCBkaXJlY3RpdmVzIHNob3cgb3IgaGlkZSBh
IHBvcnRpb24gb2YgdGhlIERPTSB0cmVlIChIVE1MKQotICogY29uZGl0aW9uYWxseS4KLSAqCi0g
KiBAZWxlbWVudCBBTlkKLSAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdTaG93IElmIHRoZSB7QGxp
bmsgZ3VpZGUvZXhwcmVzc2lvbiBleHByZXNzaW9ufSBpcyB0cnV0aHkKLSAqICAgICB0aGVuIHRo
ZSBlbGVtZW50IGlzIHNob3duIG9yIGhpZGRlbiByZXNwZWN0aXZlbHkuCi0gKgotICogQGV4YW1w
bGUKLSAgIDxkb2M6ZXhhbXBsZT4KLSAgICAgPGRvYzpzb3VyY2U+Ci0gICAgICAgIENsaWNrIG1l
OiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5nLW1vZGVsPSJjaGVja2VkIj48YnIvPgotICAgICAg
ICBTaG93OiA8c3BhbiBuZy1zaG93PSJjaGVja2VkIj5JIHNob3cgdXAgd2hlbiB5b3VyIGNoZWNr
Ym94IGlzIGNoZWNrZWQuPC9zcGFuPiA8YnIvPgotICAgICAgICBIaWRlOiA8c3BhbiBuZy1oaWRl
PSJjaGVja2VkIj5JIGhpZGUgd2hlbiB5b3VyIGNoZWNrYm94IGlzIGNoZWNrZWQuPC9zcGFuPgot
ICAgICA8L2RvYzpzb3VyY2U+Ci0gICAgIDxkb2M6c2NlbmFyaW8+Ci0gICAgICAgaXQoJ3Nob3Vs
ZCBjaGVjayBuZy1zaG93IC8gbmctaGlkZScsIGZ1bmN0aW9uKCkgewotICAgICAgICAgZXhwZWN0
KGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlIHNwYW46Zmlyc3Q6aGlkZGVuJykuY291bnQoKSku
dG9FcXVhbCgxKTsKLSAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBz
cGFuOmxhc3Q6dmlzaWJsZScpLmNvdW50KCkpLnRvRXF1YWwoMSk7Ci0KLSAgICAgICAgIGlucHV0
KCdjaGVja2VkJykuY2hlY2soKTsKLQotICAgICAgICAgZXhwZWN0KGVsZW1lbnQoJy5kb2MtZXhh
bXBsZS1saXZlIHNwYW46Zmlyc3Q6dmlzaWJsZScpLmNvdW50KCkpLnRvRXF1YWwoMSk7Ci0gICAg
ICAgICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgc3BhbjpsYXN0OmhpZGRlbicp
LmNvdW50KCkpLnRvRXF1YWwoMSk7Ci0gICAgICAgfSk7Ci0gICAgIDwvZG9jOnNjZW5hcmlvPgot
ICAgPC9kb2M6ZXhhbXBsZT4KLSAqLwotLy9UT0RPKG1pc2tvKTogcmVmYWN0b3IgdG8gcmVtb3Zl
IGVsZW1lbnQgZnJvbSB0aGUgRE9NCi12YXIgbmdTaG93RGlyZWN0aXZlID0gbmdEaXJlY3RpdmUo
ZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHIpewotICBzY29wZS4kd2F0Y2goYXR0ci5uZ1No
b3csIGZ1bmN0aW9uIG5nU2hvd1dhdGNoQWN0aW9uKHZhbHVlKXsKLSAgICBlbGVtZW50LmNzcygn
ZGlzcGxheScsIHRvQm9vbGVhbih2YWx1ZSkgPyAnJyA6ICdub25lJyk7Ci0gIH0pOwotfSk7Ci0K
LQotLyoqCi0gKiBAbmdkb2MgZGlyZWN0aXZlCi0gKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdIaWRl
Ci0gKgotICogQGRlc2NyaXB0aW9uCi0gKiBUaGUgYG5nSGlkZWAgYW5kIGBuZ1Nob3dgIGRpcmVj
dGl2ZXMgaGlkZSBvciBzaG93IGEgcG9ydGlvbiBvZiB0aGUgRE9NIHRyZWUgKEhUTUwpCi0gKiBj
b25kaXRpb25hbGx5LgotICoKLSAqIEBlbGVtZW50IEFOWQotICogQHBhcmFtIHtleHByZXNzaW9u
fSBuZ0hpZGUgSWYgdGhlIHtAbGluayBndWlkZS9leHByZXNzaW9uIGV4cHJlc3Npb259IGlzIHRy
dXRoeSB0aGVuCi0gKiAgICAgdGhlIGVsZW1lbnQgaXMgc2hvd24gb3IgaGlkZGVuIHJlc3BlY3Rp
dmVseS4KLSAqCi0gKiBAZXhhbXBsZQotICAgPGRvYzpleGFtcGxlPgotICAgICA8ZG9jOnNvdXJj
ZT4KLSAgICAgICAgQ2xpY2sgbWU6IDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmctbW9kZWw9ImNo
ZWNrZWQiPjxici8+Ci0gICAgICAgIFNob3c6IDxzcGFuIG5nLXNob3c9ImNoZWNrZWQiPkkgc2hv
dyB1cCB3aGVuIHlvdSBjaGVja2JveCBpcyBjaGVja2VkPzwvc3Bhbj4gPGJyLz4KLSAgICAgICAg
SGlkZTogPHNwYW4gbmctaGlkZT0iY2hlY2tlZCI+SSBoaWRlIHdoZW4geW91IGNoZWNrYm94IGlz
IGNoZWNrZWQ/PC9zcGFuPgotICAgICA8L2RvYzpzb3VyY2U+Ci0gICAgIDxkb2M6c2NlbmFyaW8+
Ci0gICAgICAgaXQoJ3Nob3VsZCBjaGVjayBuZy1zaG93IC8gbmctaGlkZScsIGZ1bmN0aW9uKCkg
ewotICAgICAgICAgZXhwZWN0KGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlIHNwYW46Zmlyc3Q6
aGlkZGVuJykuY291bnQoKSkudG9FcXVhbCgxKTsKLSAgICAgICAgIGV4cGVjdChlbGVtZW50KCcu
ZG9jLWV4YW1wbGUtbGl2ZSBzcGFuOmxhc3Q6dmlzaWJsZScpLmNvdW50KCkpLnRvRXF1YWwoMSk7
Ci0KLSAgICAgICAgIGlucHV0KCdjaGVja2VkJykuY2hlY2soKTsKLQotICAgICAgICAgZXhwZWN0
KGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlIHNwYW46Zmlyc3Q6dmlzaWJsZScpLmNvdW50KCkp
LnRvRXF1YWwoMSk7Ci0gICAgICAgICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUg
c3BhbjpsYXN0OmhpZGRlbicpLmNvdW50KCkpLnRvRXF1YWwoMSk7Ci0gICAgICAgfSk7Ci0gICAg
IDwvZG9jOnNjZW5hcmlvPgotICAgPC9kb2M6ZXhhbXBsZT4KLSAqLwotLy9UT0RPKG1pc2tvKTog
cmVmYWN0b3IgdG8gcmVtb3ZlIGVsZW1lbnQgZnJvbSB0aGUgRE9NCi12YXIgbmdIaWRlRGlyZWN0
aXZlID0gbmdEaXJlY3RpdmUoZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHIpewotICBzY29w
ZS4kd2F0Y2goYXR0ci5uZ0hpZGUsIGZ1bmN0aW9uIG5nSGlkZVdhdGNoQWN0aW9uKHZhbHVlKXsK
LSAgICBlbGVtZW50LmNzcygnZGlzcGxheScsIHRvQm9vbGVhbih2YWx1ZSkgPyAnbm9uZScgOiAn
Jyk7Ci0gIH0pOwotfSk7Ci0KLS8qKgotICogQG5nZG9jIGRpcmVjdGl2ZQotICogQG5hbWUgbmcu
ZGlyZWN0aXZlOm5nU3R5bGUKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIFRoZSBgbmdTdHlsZWAg
ZGlyZWN0aXZlIGFsbG93cyB5b3UgdG8gc2V0IENTUyBzdHlsZSBvbiBhbiBIVE1MIGVsZW1lbnQg
Y29uZGl0aW9uYWxseS4KLSAqCi0gKiBAZWxlbWVudCBBTlkKLSAqIEBwYXJhbSB7ZXhwcmVzc2lv
bn0gbmdTdHlsZSB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB3aGljaCBldmFs
cyB0byBhbgotICogICAgICBvYmplY3Qgd2hvc2Uga2V5cyBhcmUgQ1NTIHN0eWxlIG5hbWVzIGFu
ZCB2YWx1ZXMgYXJlIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGZvciB0aG9zZSBDU1MKLSAqICAgICAg
a2V5cy4KLSAqCi0gKiBAZXhhbXBsZQotICAgPGV4YW1wbGU+Ci0gICAgIDxmaWxlIG5hbWU9Imlu
ZGV4Lmh0bWwiPgotICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0ic2V0IiBuZy1j
bGljaz0ibXlTdHlsZT17Y29sb3I6J3JlZCd9Ij4KLSAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRv
biIgdmFsdWU9ImNsZWFyIiBuZy1jbGljaz0ibXlTdHlsZT17fSI+Ci0gICAgICAgIDxici8+Ci0g
ICAgICAgIDxzcGFuIG5nLXN0eWxlPSJteVN0eWxlIj5TYW1wbGUgVGV4dDwvc3Bhbj4KLSAgICAg
ICAgPHByZT5teVN0eWxlPXt7bXlTdHlsZX19PC9wcmU+Ci0gICAgIDwvZmlsZT4KLSAgICAgPGZp
bGUgbmFtZT0ic3R5bGUuY3NzIj4KLSAgICAgICBzcGFuIHsKLSAgICAgICAgIGNvbG9yOiBibGFj
azsKLSAgICAgICB9Ci0gICAgIDwvZmlsZT4KLSAgICAgPGZpbGUgbmFtZT0ic2NlbmFyaW8uanMi
PgotICAgICAgIGl0KCdzaG91bGQgY2hlY2sgbmctc3R5bGUnLCBmdW5jdGlvbigpIHsKLSAgICAg
ICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBzcGFuJykuY3NzKCdjb2xvcicp
KS50b0JlKCdyZ2IoMCwgMCwgMCknKTsKLSAgICAgICAgIGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1s
aXZlIDpidXR0b25bdmFsdWU9c2V0XScpLmNsaWNrKCk7Ci0gICAgICAgICBleHBlY3QoZWxlbWVu
dCgnLmRvYy1leGFtcGxlLWxpdmUgc3BhbicpLmNzcygnY29sb3InKSkudG9CZSgncmdiKDI1NSwg
MCwgMCknKTsKLSAgICAgICAgIGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlIDpidXR0b25bdmFs
dWU9Y2xlYXJdJykuY2xpY2soKTsKLSAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1w
bGUtbGl2ZSBzcGFuJykuY3NzKCdjb2xvcicpKS50b0JlKCdyZ2IoMCwgMCwgMCknKTsKLSAgICAg
ICB9KTsKLSAgICAgPC9maWxlPgotICAgPC9leGFtcGxlPgotICovCi12YXIgbmdTdHlsZURpcmVj
dGl2ZSA9IG5nRGlyZWN0aXZlKGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyKSB7Ci0gIHNj
b3BlLiR3YXRjaChhdHRyLm5nU3R5bGUsIGZ1bmN0aW9uIG5nU3R5bGVXYXRjaEFjdGlvbihuZXdT
dHlsZXMsIG9sZFN0eWxlcykgewotICAgIGlmIChvbGRTdHlsZXMgJiYgKG5ld1N0eWxlcyAhPT0g
b2xkU3R5bGVzKSkgewotICAgICAgZm9yRWFjaChvbGRTdHlsZXMsIGZ1bmN0aW9uKHZhbCwgc3R5
bGUpIHsgZWxlbWVudC5jc3Moc3R5bGUsICcnKTt9KTsKLSAgICB9Ci0gICAgaWYgKG5ld1N0eWxl
cykgZWxlbWVudC5jc3MobmV3U3R5bGVzKTsKLSAgfSwgdHJ1ZSk7Ci19KTsKLQotLyoqCi0gKiBA
bmdkb2MgZGlyZWN0aXZlCi0gKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdTd2l0Y2gKLSAqIEByZXN0
cmljdCBFQQotICoKLSAqIEBkZXNjcmlwdGlvbgotICogQ29uZGl0aW9uYWxseSBjaGFuZ2UgdGhl
IERPTSBzdHJ1Y3R1cmUuCi0gKgotICogQHVzYWdlCi0gKiA8QU5ZIG5nLXN3aXRjaD0iZXhwcmVz
c2lvbiI+Ci0gKiAgIDxBTlkgbmctc3dpdGNoLXdoZW49Im1hdGNoVmFsdWUxIj4uLi48L0FOWT4K
LSAqICAgPEFOWSBuZy1zd2l0Y2gtd2hlbj0ibWF0Y2hWYWx1ZTIiPi4uLjwvQU5ZPgotICogICAu
Li4KLSAqICAgPEFOWSBuZy1zd2l0Y2gtZGVmYXVsdD4uLi48L0FOWT4KLSAqIDwvQU5ZPgotICoK
LSAqIEBzY29wZQotICogQHBhcmFtIHsqfSBuZ1N3aXRjaHxvbiBleHByZXNzaW9uIHRvIG1hdGNo
IGFnYWluc3QgPHR0Pm5nLXN3aXRjaC13aGVuPC90dD4uCi0gKiBAcGFyYW1EZXNjcmlwdGlvbgot
ICogT24gY2hpbGQgZWxtZW50cyBhZGQ6Ci0gKgotICogKiBgbmdTd2l0Y2hXaGVuYDogdGhlIGNh
c2Ugc3RhdGVtZW50IHRvIG1hdGNoIGFnYWluc3QuIElmIG1hdGNoIHRoZW4gdGhpcwotICogICBj
YXNlIHdpbGwgYmUgZGlzcGxheWVkLgotICogKiBgbmdTd2l0Y2hEZWZhdWx0YDogdGhlIGRlZmF1
bHQgY2FzZSB3aGVuIG5vIG90aGVyIGNhc3NlcyBtYXRjaC4KLSAqCi0gKiBAZXhhbXBsZQotICAg
IDxkb2M6ZXhhbXBsZT4KLSAgICAgIDxkb2M6c291cmNlPgotICAgICAgICA8c2NyaXB0PgotICAg
ICAgICAgIGZ1bmN0aW9uIEN0cmwoJHNjb3BlKSB7Ci0gICAgICAgICAgICAkc2NvcGUuaXRlbXMg
PSBbJ3NldHRpbmdzJywgJ2hvbWUnLCAnb3RoZXInXTsKLSAgICAgICAgICAgICRzY29wZS5zZWxl
Y3Rpb24gPSAkc2NvcGUuaXRlbXNbMF07Ci0gICAgICAgICAgfQotICAgICAgICA8L3NjcmlwdD4K
LSAgICAgICAgPGRpdiBuZy1jb250cm9sbGVyPSJDdHJsIj4KLSAgICAgICAgICA8c2VsZWN0IG5n
LW1vZGVsPSJzZWxlY3Rpb24iIG5nLW9wdGlvbnM9Iml0ZW0gZm9yIGl0ZW0gaW4gaXRlbXMiPgot
ICAgICAgICAgIDwvc2VsZWN0PgotICAgICAgICAgIDx0dD5zZWxlY3Rpb249e3tzZWxlY3Rpb259
fTwvdHQ+Ci0gICAgICAgICAgPGhyLz4KLSAgICAgICAgICA8ZGl2IG5nLXN3aXRjaCBvbj0ic2Vs
ZWN0aW9uIiA+Ci0gICAgICAgICAgICA8ZGl2IG5nLXN3aXRjaC13aGVuPSJzZXR0aW5ncyI+U2V0
dGluZ3MgRGl2PC9kaXY+Ci0gICAgICAgICAgICA8c3BhbiBuZy1zd2l0Y2gtd2hlbj0iaG9tZSI+
SG9tZSBTcGFuPC9zcGFuPgotICAgICAgICAgICAgPHNwYW4gbmctc3dpdGNoLWRlZmF1bHQ+ZGVm
YXVsdDwvc3Bhbj4KLSAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgPC9kaXY+Ci0gICAgICA8L2Rv
Yzpzb3VyY2U+Ci0gICAgICA8ZG9jOnNjZW5hcmlvPgotICAgICAgICBpdCgnc2hvdWxkIHN0YXJ0
IGluIHNldHRpbmdzJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICBleHBlY3QoZWxlbWVudCgnLmRv
Yy1leGFtcGxlLWxpdmUgW25nLXN3aXRjaF0nKS50ZXh0KCkpLnRvTWF0Y2goL1NldHRpbmdzIERp
di8pOwotICAgICAgICB9KTsKLSAgICAgICAgaXQoJ3Nob3VsZCBjaGFuZ2UgdG8gaG9tZScsIGZ1
bmN0aW9uKCkgewotICAgICAgICAgc2VsZWN0KCdzZWxlY3Rpb24nKS5vcHRpb24oJ2hvbWUnKTsK
LSAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBbbmctc3dpdGNoXScp
LnRleHQoKSkudG9NYXRjaCgvSG9tZSBTcGFuLyk7Ci0gICAgICAgIH0pOwotICAgICAgICBpdCgn
c2hvdWxkIHNlbGVjdCBkZWFmYXVsdCcsIGZ1bmN0aW9uKCkgewotICAgICAgICAgc2VsZWN0KCdz
ZWxlY3Rpb24nKS5vcHRpb24oJ290aGVyJyk7Ci0gICAgICAgICBleHBlY3QoZWxlbWVudCgnLmRv
Yy1leGFtcGxlLWxpdmUgW25nLXN3aXRjaF0nKS50ZXh0KCkpLnRvTWF0Y2goL2RlZmF1bHQvKTsK
LSAgICAgICAgfSk7Ci0gICAgICA8L2RvYzpzY2VuYXJpbz4KLSAgICA8L2RvYzpleGFtcGxlPgot
ICovCi12YXIgTkdfU1dJVENIID0gJ25nLXN3aXRjaCc7Ci12YXIgbmdTd2l0Y2hEaXJlY3RpdmUg
PSB2YWx1ZUZuKHsKLSAgcmVzdHJpY3Q6ICdFQScsCi0gIHJlcXVpcmU6ICduZ1N3aXRjaCcsCi0g
IC8vIGFza3MgZm9yICRzY29wZSB0byBmb29sIHRoZSBCQyBjb250cm9sbGVyIG1vZHVsZQotICBj
b250cm9sbGVyOiBbJyRzY29wZScsIGZ1bmN0aW9uIG5nU3dpdGNoQ29udHJvbGxlcigpIHsKLSAg
ICB0aGlzLmNhc2VzID0ge307Ci0gIH1dLAotICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVu
dCwgYXR0ciwgY3RybCkgewotICAgIHZhciB3YXRjaEV4cHIgPSBhdHRyLm5nU3dpdGNoIHx8IGF0
dHIub24sCi0gICAgICAgIHNlbGVjdGVkVHJhbnNjbHVkZSwKLSAgICAgICAgc2VsZWN0ZWRFbGVt
ZW50LAotICAgICAgICBzZWxlY3RlZFNjb3BlOwotCi0gICAgc2NvcGUuJHdhdGNoKHdhdGNoRXhw
ciwgZnVuY3Rpb24gbmdTd2l0Y2hXYXRjaEFjdGlvbih2YWx1ZSkgewotICAgICAgaWYgKHNlbGVj
dGVkRWxlbWVudCkgewotICAgICAgICBzZWxlY3RlZFNjb3BlLiRkZXN0cm95KCk7Ci0gICAgICAg
IHNlbGVjdGVkRWxlbWVudC5yZW1vdmUoKTsKLSAgICAgICAgc2VsZWN0ZWRFbGVtZW50ID0gc2Vs
ZWN0ZWRTY29wZSA9IG51bGw7Ci0gICAgICB9Ci0gICAgICBpZiAoKHNlbGVjdGVkVHJhbnNjbHVk
ZSA9IGN0cmwuY2FzZXNbJyEnICsgdmFsdWVdIHx8IGN0cmwuY2FzZXNbJz8nXSkpIHsKLSAgICAg
ICAgc2NvcGUuJGV2YWwoYXR0ci5jaGFuZ2UpOwotICAgICAgICBzZWxlY3RlZFNjb3BlID0gc2Nv
cGUuJG5ldygpOwotICAgICAgICBzZWxlY3RlZFRyYW5zY2x1ZGUoc2VsZWN0ZWRTY29wZSwgZnVu
Y3Rpb24oY2FzZUVsZW1lbnQpIHsKLSAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQgPSBjYXNlRWxl
bWVudDsKLSAgICAgICAgICBlbGVtZW50LmFwcGVuZChjYXNlRWxlbWVudCk7Ci0gICAgICAgIH0p
OwotICAgICAgfQotICAgIH0pOwotICB9Ci19KTsKLQotdmFyIG5nU3dpdGNoV2hlbkRpcmVjdGl2
ZSA9IG5nRGlyZWN0aXZlKHsKLSAgdHJhbnNjbHVkZTogJ2VsZW1lbnQnLAotICBwcmlvcml0eTog
NTAwLAotICByZXF1aXJlOiAnXm5nU3dpdGNoJywKLSAgY29tcGlsZTogZnVuY3Rpb24oZWxlbWVu
dCwgYXR0cnMsIHRyYW5zY2x1ZGUpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUsIGVsZW1l
bnQsIGF0dHIsIGN0cmwpIHsKLSAgICAgIGN0cmwuY2FzZXNbJyEnICsgYXR0cnMubmdTd2l0Y2hX
aGVuXSA9IHRyYW5zY2x1ZGU7Ci0gICAgfTsKLSAgfQotfSk7Ci0KLXZhciBuZ1N3aXRjaERlZmF1
bHREaXJlY3RpdmUgPSBuZ0RpcmVjdGl2ZSh7Ci0gIHRyYW5zY2x1ZGU6ICdlbGVtZW50JywKLSAg
cHJpb3JpdHk6IDUwMCwKLSAgcmVxdWlyZTogJ15uZ1N3aXRjaCcsCi0gIGNvbXBpbGU6IGZ1bmN0
aW9uKGVsZW1lbnQsIGF0dHJzLCB0cmFuc2NsdWRlKSB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKHNj
b3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsKSB7Ci0gICAgICBjdHJsLmNhc2VzWyc/J10gPSB0cmFu
c2NsdWRlOwotICAgIH07Ci0gIH0KLX0pOwotCi0vKioKLSAqIEBuZ2RvYyBkaXJlY3RpdmUKLSAq
IEBuYW1lIG5nLmRpcmVjdGl2ZTpuZ1RyYW5zY2x1ZGUKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAq
IEluc2VydCB0aGUgdHJhbnNjbHVkZWQgRE9NIGhlcmUuCi0gKgotICogQGVsZW1lbnQgQU5ZCi0g
KgotICogQGV4YW1wbGUKLSAgIDxkb2M6ZXhhbXBsZSBtb2R1bGU9InRyYW5zY2x1ZGUiPgotICAg
ICA8ZG9jOnNvdXJjZT4KLSAgICAgICA8c2NyaXB0PgotICAgICAgICAgZnVuY3Rpb24gQ3RybCgk
c2NvcGUpIHsKLSAgICAgICAgICAgJHNjb3BlLnRpdGxlID0gJ0xvcmVtIElwc3VtJzsKLSAgICAg
ICAgICAgJHNjb3BlLnRleHQgPSAnTmVxdWUgcG9ycm8gcXVpc3F1YW0gZXN0IHF1aSBkb2xvcmVt
IGlwc3VtIHF1aWEgZG9sb3IuLi4nOwotICAgICAgICAgfQotCi0gICAgICAgICBhbmd1bGFyLm1v
ZHVsZSgndHJhbnNjbHVkZScsIFtdKQotICAgICAgICAgIC5kaXJlY3RpdmUoJ3BhbmUnLCBmdW5j
dGlvbigpewotICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICByZXN0cmljdDog
J0UnLAotICAgICAgICAgICAgICAgdHJhbnNjbHVkZTogdHJ1ZSwKLSAgICAgICAgICAgICAgIHNj
b3BlOiAnaXNvbGF0ZScsCi0gICAgICAgICAgICAgICBsb2NhbHM6IHsgdGl0bGU6J2JpbmQnIH0s
Ci0gICAgICAgICAgICAgICB0ZW1wbGF0ZTogJzxkaXYgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlk
IGJsYWNrOyI+JyArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBzdHlsZT0iYmFj
a2dyb3VuZC1jb2xvcjogZ3JheSI+e3t0aXRsZX19PC9kaXY+JyArCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAnPGRpdiBuZy10cmFuc2NsdWRlPjwvZGl2PicgKwotICAgICAgICAgICAgICAg
ICAgICAgICAgICc8L2Rpdj4nCi0gICAgICAgICAgICAgfTsKLSAgICAgICAgIH0pOwotICAgICAg
IDwvc2NyaXB0PgotICAgICAgIDxkaXYgbmctY29udHJvbGxlcj0iQ3RybCI+Ci0gICAgICAgICA8
aW5wdXQgbmctbW9kZWw9InRpdGxlIj48YnI+Ci0gICAgICAgICA8dGV4dGFyZWEgbmctbW9kZWw9
InRleHQiPjwvdGV4dGFyZWE+IDxici8+Ci0gICAgICAgICA8cGFuZSB0aXRsZT0ie3t0aXRsZX19
Ij57e3RleHR9fTwvcGFuZT4KLSAgICAgICA8L2Rpdj4KLSAgICAgPC9kb2M6c291cmNlPgotICAg
ICA8ZG9jOnNjZW5hcmlvPgotICAgICAgICBpdCgnc2hvdWxkIGhhdmUgdHJhbnNjbHVkZWQnLCBm
dW5jdGlvbigpIHsKLSAgICAgICAgICBpbnB1dCgndGl0bGUnKS5lbnRlcignVElUTEUnKTsKLSAg
ICAgICAgICBpbnB1dCgndGV4dCcpLmVudGVyKCdURVhUJyk7Ci0gICAgICAgICAgZXhwZWN0KGJp
bmRpbmcoJ3RpdGxlJykpLnRvRXF1YWwoJ1RJVExFJyk7Ci0gICAgICAgICAgZXhwZWN0KGJpbmRp
bmcoJ3RleHQnKSkudG9FcXVhbCgnVEVYVCcpOwotICAgICAgICB9KTsKLSAgICAgPC9kb2M6c2Nl
bmFyaW8+Ci0gICA8L2RvYzpleGFtcGxlPgotICoKLSAqLwotdmFyIG5nVHJhbnNjbHVkZURpcmVj
dGl2ZSA9IG5nRGlyZWN0aXZlKHsKLSAgY29udHJvbGxlcjogWyckdHJhbnNjbHVkZScsICckZWxl
bWVudCcsIGZ1bmN0aW9uKCR0cmFuc2NsdWRlLCAkZWxlbWVudCkgewotICAgICR0cmFuc2NsdWRl
KGZ1bmN0aW9uKGNsb25lKSB7Ci0gICAgICAkZWxlbWVudC5hcHBlbmQoY2xvbmUpOwotICAgIH0p
OwotICB9XQotfSk7Ci0KLS8qKgotICogQG5nZG9jIGRpcmVjdGl2ZQotICogQG5hbWUgbmcuZGly
ZWN0aXZlOm5nVmlldwotICogQHJlc3RyaWN0IEVDQQotICoKLSAqIEBkZXNjcmlwdGlvbgotICog
IyBPdmVydmlldwotICogYG5nVmlld2AgaXMgYSBkaXJlY3RpdmUgdGhhdCBjb21wbGVtZW50cyB0
aGUge0BsaW5rIG5nLiRyb3V0ZSAkcm91dGV9IHNlcnZpY2UgYnkKLSAqIGluY2x1ZGluZyB0aGUg
cmVuZGVyZWQgdGVtcGxhdGUgb2YgdGhlIGN1cnJlbnQgcm91dGUgaW50byB0aGUgbWFpbiBsYXlv
dXQgKGBpbmRleC5odG1sYCkgZmlsZS4KLSAqIEV2ZXJ5IHRpbWUgdGhlIGN1cnJlbnQgcm91dGUg
Y2hhbmdlcywgdGhlIGluY2x1ZGVkIHZpZXcgY2hhbmdlcyB3aXRoIGl0IGFjY29yZGluZyB0byB0
aGUKLSAqIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGAkcm91dGVgIHNlcnZpY2UuCi0gKgotICogQHNj
b3BlCi0gKiBAZXhhbXBsZQotICAgIDxleGFtcGxlIG1vZHVsZT0ibmdWaWV3Ij4KLSAgICAgIDxm
aWxlIG5hbWU9ImluZGV4Lmh0bWwiPgotICAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9Ik1haW5D
bnRsIj4KLSAgICAgICAgICBDaG9vc2U6Ci0gICAgICAgICAgPGEgaHJlZj0iQm9vay9Nb2J5Ij5N
b2J5PC9hPiB8Ci0gICAgICAgICAgPGEgaHJlZj0iQm9vay9Nb2J5L2NoLzEiPk1vYnk6IENoMTwv
YT4gfAotICAgICAgICAgIDxhIGhyZWY9IkJvb2svR2F0c2J5Ij5HYXRzYnk8L2E+IHwKLSAgICAg
ICAgICA8YSBocmVmPSJCb29rL0dhdHNieS9jaC80P2tleT12YWx1ZSI+R2F0c2J5OiBDaDQ8L2E+
IHwKLSAgICAgICAgICA8YSBocmVmPSJCb29rL1NjYXJsZXQiPlNjYXJsZXQgTGV0dGVyPC9hPjxi
ci8+Ci0KLSAgICAgICAgICA8ZGl2IG5nLXZpZXc+PC9kaXY+Ci0gICAgICAgICAgPGhyIC8+Ci0K
LSAgICAgICAgICA8cHJlPiRsb2NhdGlvbi5wYXRoKCkgPSB7eyRsb2NhdGlvbi5wYXRoKCl9fTwv
cHJlPgotICAgICAgICAgIDxwcmU+JHJvdXRlLmN1cnJlbnQudGVtcGxhdGVVcmwgPSB7eyRyb3V0
ZS5jdXJyZW50LnRlbXBsYXRlVXJsfX08L3ByZT4KLSAgICAgICAgICA8cHJlPiRyb3V0ZS5jdXJy
ZW50LnBhcmFtcyA9IHt7JHJvdXRlLmN1cnJlbnQucGFyYW1zfX08L3ByZT4KLSAgICAgICAgICA8
cHJlPiRyb3V0ZS5jdXJyZW50LnNjb3BlLm5hbWUgPSB7eyRyb3V0ZS5jdXJyZW50LnNjb3BlLm5h
bWV9fTwvcHJlPgotICAgICAgICAgIDxwcmU+JHJvdXRlUGFyYW1zID0ge3skcm91dGVQYXJhbXN9
fTwvcHJlPgotICAgICAgICA8L2Rpdj4KLSAgICAgIDwvZmlsZT4KLQotICAgICAgPGZpbGUgbmFt
ZT0iYm9vay5odG1sIj4KLSAgICAgICAgY29udHJvbGxlcjoge3tuYW1lfX08YnIgLz4KLSAgICAg
ICAgQm9vayBJZDoge3twYXJhbXMuYm9va0lkfX08YnIgLz4KLSAgICAgIDwvZmlsZT4KLQotICAg
ICAgPGZpbGUgbmFtZT0iY2hhcHRlci5odG1sIj4KLSAgICAgICAgY29udHJvbGxlcjoge3tuYW1l
fX08YnIgLz4KLSAgICAgICAgQm9vayBJZDoge3twYXJhbXMuYm9va0lkfX08YnIgLz4KLSAgICAg
ICAgQ2hhcHRlciBJZDoge3twYXJhbXMuY2hhcHRlcklkfX0KLSAgICAgIDwvZmlsZT4KLQotICAg
ICAgPGZpbGUgbmFtZT0ic2NyaXB0LmpzIj4KLSAgICAgICAgYW5ndWxhci5tb2R1bGUoJ25nVmll
dycsIFtdLCBmdW5jdGlvbigkcm91dGVQcm92aWRlciwgJGxvY2F0aW9uUHJvdmlkZXIpIHsKLSAg
ICAgICAgICAkcm91dGVQcm92aWRlci53aGVuKCcvQm9vay86Ym9va0lkJywgewotICAgICAgICAg
ICAgdGVtcGxhdGVVcmw6ICdib29rLmh0bWwnLAotICAgICAgICAgICAgY29udHJvbGxlcjogQm9v
a0NudGwKLSAgICAgICAgICB9KTsKLSAgICAgICAgICAkcm91dGVQcm92aWRlci53aGVuKCcvQm9v
ay86Ym9va0lkL2NoLzpjaGFwdGVySWQnLCB7Ci0gICAgICAgICAgICB0ZW1wbGF0ZVVybDogJ2No
YXB0ZXIuaHRtbCcsCi0gICAgICAgICAgICBjb250cm9sbGVyOiBDaGFwdGVyQ250bAotICAgICAg
ICAgIH0pOwotCi0gICAgICAgICAgLy8gY29uZmlndXJlIGh0bWw1IHRvIGdldCBsaW5rcyB3b3Jr
aW5nIG9uIGpzZmlkZGxlCi0gICAgICAgICAgJGxvY2F0aW9uUHJvdmlkZXIuaHRtbDVNb2RlKHRy
dWUpOwotICAgICAgICB9KTsKLQotICAgICAgICBmdW5jdGlvbiBNYWluQ250bCgkc2NvcGUsICRy
b3V0ZSwgJHJvdXRlUGFyYW1zLCAkbG9jYXRpb24pIHsKLSAgICAgICAgICAkc2NvcGUuJHJvdXRl
ID0gJHJvdXRlOwotICAgICAgICAgICRzY29wZS4kbG9jYXRpb24gPSAkbG9jYXRpb247Ci0gICAg
ICAgICAgJHNjb3BlLiRyb3V0ZVBhcmFtcyA9ICRyb3V0ZVBhcmFtczsKLSAgICAgICAgfQotCi0g
ICAgICAgIGZ1bmN0aW9uIEJvb2tDbnRsKCRzY29wZSwgJHJvdXRlUGFyYW1zKSB7Ci0gICAgICAg
ICAgJHNjb3BlLm5hbWUgPSAiQm9va0NudGwiOwotICAgICAgICAgICRzY29wZS5wYXJhbXMgPSAk
cm91dGVQYXJhbXM7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBDaGFwdGVyQ250bCgk
c2NvcGUsICRyb3V0ZVBhcmFtcykgewotICAgICAgICAgICRzY29wZS5uYW1lID0gIkNoYXB0ZXJD
bnRsIjsKLSAgICAgICAgICAkc2NvcGUucGFyYW1zID0gJHJvdXRlUGFyYW1zOwotICAgICAgICB9
Ci0gICAgICA8L2ZpbGU+Ci0KLSAgICAgIDxmaWxlIG5hbWU9InNjZW5hcmlvLmpzIj4KLSAgICAg
ICAgaXQoJ3Nob3VsZCBsb2FkIGFuZCBjb21waWxlIGNvcnJlY3QgdGVtcGxhdGUnLCBmdW5jdGlv
bigpIHsKLSAgICAgICAgICBlbGVtZW50KCdhOmNvbnRhaW5zKCJNb2J5OiBDaDEiKScpLmNsaWNr
KCk7Ci0gICAgICAgICAgdmFyIGNvbnRlbnQgPSBlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBb
bmctdmlld10nKS50ZXh0KCk7Ci0gICAgICAgICAgZXhwZWN0KGNvbnRlbnQpLnRvTWF0Y2goL2Nv
bnRyb2xsZXJcOiBDaGFwdGVyQ250bC8pOwotICAgICAgICAgIGV4cGVjdChjb250ZW50KS50b01h
dGNoKC9Cb29rIElkXDogTW9ieS8pOwotICAgICAgICAgIGV4cGVjdChjb250ZW50KS50b01hdGNo
KC9DaGFwdGVyIElkXDogMS8pOwotCi0gICAgICAgICAgZWxlbWVudCgnYTpjb250YWlucygiU2Nh
cmxldCIpJykuY2xpY2soKTsKLSAgICAgICAgICBjb250ZW50ID0gZWxlbWVudCgnLmRvYy1leGFt
cGxlLWxpdmUgW25nLXZpZXddJykudGV4dCgpOwotICAgICAgICAgIGV4cGVjdChjb250ZW50KS50
b01hdGNoKC9jb250cm9sbGVyXDogQm9va0NudGwvKTsKLSAgICAgICAgICBleHBlY3QoY29udGVu
dCkudG9NYXRjaCgvQm9vayBJZFw6IFNjYXJsZXQvKTsKLSAgICAgICAgfSk7Ci0gICAgICA8L2Zp
bGU+Ci0gICAgPC9leGFtcGxlPgotICovCi0KLQotLyoqCi0gKiBAbmdkb2MgZXZlbnQKLSAqIEBu
YW1lIG5nLmRpcmVjdGl2ZTpuZ1ZpZXcjJHZpZXdDb250ZW50TG9hZGVkCi0gKiBAZXZlbnRPZiBu
Zy5kaXJlY3RpdmU6bmdWaWV3Ci0gKiBAZXZlbnRUeXBlIGVtaXQgb24gdGhlIGN1cnJlbnQgbmdW
aWV3IHNjb3BlCi0gKiBAZGVzY3JpcHRpb24KLSAqIEVtaXR0ZWQgZXZlcnkgdGltZSB0aGUgbmdW
aWV3IGNvbnRlbnQgaXMgcmVsb2FkZWQuCi0gKi8KLXZhciBuZ1ZpZXdEaXJlY3RpdmUgPSBbJyRo
dHRwJywgJyR0ZW1wbGF0ZUNhY2hlJywgJyRyb3V0ZScsICckYW5jaG9yU2Nyb2xsJywgJyRjb21w
aWxlJywKLSAgICAgICAgICAgICAgICAgICAgICAgJyRjb250cm9sbGVyJywKLSAgICAgICAgICAg
ICAgIGZ1bmN0aW9uKCRodHRwLCAgICR0ZW1wbGF0ZUNhY2hlLCAgICRyb3V0ZSwgICAkYW5jaG9y
U2Nyb2xsLCAgICRjb21waWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRyb2xsZXIp
IHsKLSAgcmV0dXJuIHsKLSAgICByZXN0cmljdDogJ0VDQScsCi0gICAgdGVybWluYWw6IHRydWUs
Ci0gICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHIpIHsKLSAgICAgIHZhciBs
YXN0U2NvcGUsCi0gICAgICAgICAgb25sb2FkRXhwID0gYXR0ci5vbmxvYWQgfHwgJyc7Ci0KLSAg
ICAgIHNjb3BlLiRvbignJHJvdXRlQ2hhbmdlU3VjY2VzcycsIHVwZGF0ZSk7Ci0gICAgICB1cGRh
dGUoKTsKLQotCi0gICAgICBmdW5jdGlvbiBkZXN0cm95TGFzdFNjb3BlKCkgewotICAgICAgICBp
ZiAobGFzdFNjb3BlKSB7Ci0gICAgICAgICAgbGFzdFNjb3BlLiRkZXN0cm95KCk7Ci0gICAgICAg
ICAgbGFzdFNjb3BlID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBmdW5jdGlv
biBjbGVhckNvbnRlbnQoKSB7Ci0gICAgICAgIGVsZW1lbnQuaHRtbCgnJyk7Ci0gICAgICAgIGRl
c3Ryb3lMYXN0U2NvcGUoKTsKLSAgICAgIH0KLQotICAgICAgZnVuY3Rpb24gdXBkYXRlKCkgewot
ICAgICAgICB2YXIgbG9jYWxzID0gJHJvdXRlLmN1cnJlbnQgJiYgJHJvdXRlLmN1cnJlbnQubG9j
YWxzLAotICAgICAgICAgICAgdGVtcGxhdGUgPSBsb2NhbHMgJiYgbG9jYWxzLiR0ZW1wbGF0ZTsK
LQotICAgICAgICBpZiAodGVtcGxhdGUpIHsKLSAgICAgICAgICBlbGVtZW50Lmh0bWwodGVtcGxh
dGUpOwotICAgICAgICAgIGRlc3Ryb3lMYXN0U2NvcGUoKTsKLQotICAgICAgICAgIHZhciBsaW5r
ID0gJGNvbXBpbGUoZWxlbWVudC5jb250ZW50cygpKSwKLSAgICAgICAgICAgICAgY3VycmVudCA9
ICRyb3V0ZS5jdXJyZW50LAotICAgICAgICAgICAgICBjb250cm9sbGVyOwotCi0gICAgICAgICAg
bGFzdFNjb3BlID0gY3VycmVudC5zY29wZSA9IHNjb3BlLiRuZXcoKTsKLSAgICAgICAgICBpZiAo
Y3VycmVudC5jb250cm9sbGVyKSB7Ci0gICAgICAgICAgICBsb2NhbHMuJHNjb3BlID0gbGFzdFNj
b3BlOwotICAgICAgICAgICAgY29udHJvbGxlciA9ICRjb250cm9sbGVyKGN1cnJlbnQuY29udHJv
bGxlciwgbG9jYWxzKTsKLSAgICAgICAgICAgIGVsZW1lbnQuY2hpbGRyZW4oKS5kYXRhKCckbmdD
b250cm9sbGVyQ29udHJvbGxlcicsIGNvbnRyb2xsZXIpOwotICAgICAgICAgIH0KLQotICAgICAg
ICAgIGxpbmsobGFzdFNjb3BlKTsKLSAgICAgICAgICBsYXN0U2NvcGUuJGVtaXQoJyR2aWV3Q29u
dGVudExvYWRlZCcpOwotICAgICAgICAgIGxhc3RTY29wZS4kZXZhbChvbmxvYWRFeHApOwotCi0g
ICAgICAgICAgLy8gJGFuY2hvclNjcm9sbCBtaWdodCBsaXN0ZW4gb24gZXZlbnQuLi4KLSAgICAg
ICAgICAkYW5jaG9yU2Nyb2xsKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgY2xlYXJD
b250ZW50KCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH07Ci19XTsKLQotLyoqCi0g
KiBAbmdkb2MgZGlyZWN0aXZlCi0gKiBAbmFtZSBuZy5kaXJlY3RpdmU6c2NyaXB0Ci0gKgotICog
QGRlc2NyaXB0aW9uCi0gKiBMb2FkIGNvbnRlbnQgb2YgYSBzY3JpcHQgdGFnLCB3aXRoIHR5cGUg
YHRleHQvbmctdGVtcGxhdGVgLCBpbnRvIGAkdGVtcGxhdGVDYWNoZWAsIHNvIHRoYXQgdGhlCi0g
KiB0ZW1wbGF0ZSBjYW4gYmUgdXNlZCBieSBgbmdJbmNsdWRlYCwgYG5nVmlld2Agb3IgZGlyZWN0
aXZlIHRlbXBsYXRlcy4KLSAqCi0gKiBAcmVzdHJpY3QgRQotICogQHBhcmFtIHsndGV4dC9uZy10
ZW1wbGF0ZSd9IHR5cGUgbXVzdCBiZSBzZXQgdG8gYCd0ZXh0L25nLXRlbXBsYXRlJ2AKLSAqCi0g
KiBAZXhhbXBsZQotICA8ZG9jOmV4YW1wbGU+Ci0gICAgPGRvYzpzb3VyY2U+Ci0gICAgICA8c2Ny
aXB0IHR5cGU9InRleHQvbmctdGVtcGxhdGUiIGlkPSIvdHBsLmh0bWwiPgotICAgICAgICBDb250
ZW50IG9mIHRoZSB0ZW1wbGF0ZS4KLSAgICAgIDwvc2NyaXB0PgotCi0gICAgICA8YSBuZy1jbGlj
az0iY3VycmVudFRwbD0nL3RwbC5odG1sJyIgaWQ9InRwbC1saW5rIj5Mb2FkIGlubGluZWQgdGVt
cGxhdGU8L2E+Ci0gICAgICA8ZGl2IGlkPSJ0cGwtY29udGVudCIgbmctaW5jbHVkZSBzcmM9ImN1
cnJlbnRUcGwiPjwvZGl2PgotICAgIDwvZG9jOnNvdXJjZT4KLSAgICA8ZG9jOnNjZW5hcmlvPgot
ICAgICAgaXQoJ3Nob3VsZCBsb2FkIHRlbXBsYXRlIGRlZmluZWQgaW5zaWRlIHNjcmlwdCB0YWcn
LCBmdW5jdGlvbigpIHsKLSAgICAgICAgZWxlbWVudCgnI3RwbC1saW5rJykuY2xpY2soKTsKLSAg
ICAgICAgZXhwZWN0KGVsZW1lbnQoJyN0cGwtY29udGVudCcpLnRleHQoKSkudG9NYXRjaCgvQ29u
dGVudCBvZiB0aGUgdGVtcGxhdGUvKTsKLSAgICAgIH0pOwotICAgIDwvZG9jOnNjZW5hcmlvPgot
ICA8L2RvYzpleGFtcGxlPgotICovCi12YXIgc2NyaXB0RGlyZWN0aXZlID0gWyckdGVtcGxhdGVD
YWNoZScsIGZ1bmN0aW9uKCR0ZW1wbGF0ZUNhY2hlKSB7Ci0gIHJldHVybiB7Ci0gICAgcmVzdHJp
Y3Q6ICdFJywKLSAgICB0ZXJtaW5hbDogdHJ1ZSwKLSAgICBjb21waWxlOiBmdW5jdGlvbihlbGVt
ZW50LCBhdHRyKSB7Ci0gICAgICBpZiAoYXR0ci50eXBlID09ICd0ZXh0L25nLXRlbXBsYXRlJykg
ewotICAgICAgICB2YXIgdGVtcGxhdGVVcmwgPSBhdHRyLmlkLAotICAgICAgICAgICAgLy8gSUUg
aXMgbm90IGNvbnNpc3RlbnQsIGluIHNjcmlwdHMgd2UgaGF2ZSB0byByZWFkIC50ZXh0IGJ1dCBp
biBvdGhlciBub2RlcyB3ZSBoYXZlIHRvIHJlYWQgLnRleHRDb250ZW50Ci0gICAgICAgICAgICB0
ZXh0ID0gZWxlbWVudFswXS50ZXh0OwotCi0gICAgICAgICR0ZW1wbGF0ZUNhY2hlLnB1dCh0ZW1w
bGF0ZVVybCwgdGV4dCk7Ci0gICAgICB9Ci0gICAgfQotICB9OwotfV07Ci0KLS8qKgotICogQG5n
ZG9jIGRpcmVjdGl2ZQotICogQG5hbWUgbmcuZGlyZWN0aXZlOnNlbGVjdAotICogQHJlc3RyaWN0
IEUKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIEhUTUwgYFNFTEVDVGAgZWxlbWVudCB3aXRoIGFu
Z3VsYXIgZGF0YS1iaW5kaW5nLgotICoKLSAqICMgYG5nT3B0aW9uc2AKLSAqCi0gKiBPcHRpb25h
bGx5IGBuZ09wdGlvbnNgIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBkeW5hbWljYWxseSBnZW5l
cmF0ZSBhIGxpc3Qgb2YgYDxvcHRpb24+YAotICogZWxlbWVudHMgZm9yIGEgYDxzZWxlY3Q+YCBl
bGVtZW50IHVzaW5nIGFuIGFycmF5IG9yIGFuIG9iamVjdCBvYnRhaW5lZCBieSBldmFsdWF0aW5n
IHRoZQotICogYG5nT3B0aW9uc2AgZXhwcmVzc2lvbi4KLSAqy53LnQotICogV2hlbiBhbiBpdGVt
IGluIHRoZSBzZWxlY3QgbWVudSBpcyBzZWxlY3QsIHRoZSB2YWx1ZSBvZiBhcnJheSBlbGVtZW50
IG9yIG9iamVjdCBwcm9wZXJ0eQotICogcmVwcmVzZW50ZWQgYnkgdGhlIHNlbGVjdGVkIG9wdGlv
biB3aWxsIGJlIGJvdW5kIHRvIHRoZSBtb2RlbCBpZGVudGlmaWVkIGJ5IHRoZSBgbmdNb2RlbGAK
LSAqIGRpcmVjdGl2ZSBvZiB0aGUgcGFyZW50IHNlbGVjdCBlbGVtZW50LgotICoKLSAqIE9wdGlv
bmFsbHksIGEgc2luZ2xlIGhhcmQtY29kZWQgYDxvcHRpb24+YCBlbGVtZW50LCB3aXRoIHRoZSB2
YWx1ZSBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nLCBjYW4KLSAqIGJlIG5lc3RlZCBpbnRvIHRoZSBg
PHNlbGVjdD5gIGVsZW1lbnQuIFRoaXMgZWxlbWVudCB3aWxsIHRoZW4gcmVwcmVzZW50IGBudWxs
YCBvciAibm90IHNlbGVjdGVkIgotICogb3B0aW9uLiBTZWUgZXhhbXBsZSBiZWxvdyBmb3IgZGVt
b25zdHJhdGlvbi4KLSAqCi0gKiBOb3RlOiBgbmdPcHRpb25zYCBwcm92aWRlcyBpdGVyYXRvciBm
YWNpbGl0eSBmb3IgYDxvcHRpb24+YCBlbGVtZW50IHdoaWNoIHNob3VsZCBiZSB1c2VkIGluc3Rl
YWQKLSAqIG9mIHtAbGluayBuZy5kaXJlY3RpdmU6bmdSZXBlYXQgbmdSZXBlYXR9IHdoZW4geW91
IHdhbnQgdGhlCi0gKiBgc2VsZWN0YCBtb2RlbCB0byBiZSBib3VuZCB0byBhIG5vbi1zdHJpbmcg
dmFsdWUuIFRoaXMgaXMgYmVjYXVzZSBhbiBvcHRpb24gZWxlbWVudCBjYW4gY3VycmVudGx5Ci0g
KiBiZSBib3VuZCB0byBzdHJpbmcgdmFsdWVzIG9ubHkuCi0gKgotICogQHBhcmFtIHtzdHJpbmd9
IG5nTW9kZWwgQXNzaWduYWJsZSBhbmd1bGFyIGV4cHJlc3Npb24gdG8gZGF0YS1iaW5kIHRvLgot
ICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lIFByb3BlcnR5IG5hbWUgb2YgdGhlIGZvcm0gdW5kZXIg
d2hpY2ggdGhlIGNvbnRyb2wgaXMgcHVibGlzaGVkLgotICogQHBhcmFtIHtzdHJpbmc9fSByZXF1
aXJlZCBUaGUgY29udHJvbCBpcyBjb25zaWRlcmVkIHZhbGlkIG9ubHkgaWYgdmFsdWUgaXMgZW50
ZXJlZC4KLSAqIEBwYXJhbSB7c3RyaW5nPX0gbmdSZXF1aXJlZCBBZGRzIGByZXF1aXJlZGAgYXR0
cmlidXRlIGFuZCBgcmVxdWlyZWRgIHZhbGlkYXRpb24gY29uc3RyYWludCB0bwotICogICAgdGhl
IGVsZW1lbnQgd2hlbiB0aGUgbmdSZXF1aXJlZCBleHByZXNzaW9uIGV2YWx1YXRlcyB0byB0cnVl
LiBVc2UgYG5nUmVxdWlyZWRgIGluc3RlYWQgb2YKLSAqICAgIGByZXF1aXJlZGAgd2hlbiB5b3Ug
d2FudCB0byBkYXRhLWJpbmQgdG8gdGhlIGByZXF1aXJlZGAgYXR0cmlidXRlLgotICogQHBhcmFt
IHtjb21wcmVoZW5zaW9uX2V4cHJlc3Npb249fSBuZ09wdGlvbnMgaW4gb25lIG9mIHRoZSBmb2xs
b3dpbmcgZm9ybXM6Ci0gKgotICogICAqIGZvciBhcnJheSBkYXRhIHNvdXJjZXM6Ci0gKiAgICAg
KiBgbGFiZWxgICoqYGZvcmAqKiBgdmFsdWVgICoqYGluYCoqIGBhcnJheWAKLSAqICAgICAqIGBz
ZWxlY3RgICoqYGFzYCoqIGBsYWJlbGAgKipgZm9yYCoqIGB2YWx1ZWAgKipgaW5gKiogYGFycmF5
YAotICogICAgICogYGxhYmVsYCAgKipgZ3JvdXAgYnlgKiogYGdyb3VwYCAqKmBmb3JgKiogYHZh
bHVlYCAqKmBpbmAqKiBgYXJyYXlgCi0gKiAgICAgKiBgc2VsZWN0YCAqKmBhc2AqKiBgbGFiZWxg
ICoqYGdyb3VwIGJ5YCoqIGBncm91cGAgKipgZm9yYCoqIGB2YWx1ZWAgKipgaW5gKiogYGFycmF5
YAotICogICAqIGZvciBvYmplY3QgZGF0YSBzb3VyY2VzOgotICogICAgICogYGxhYmVsYCAqKmBm
b3IgKGAqKmBrZXlgICoqYCxgKiogYHZhbHVlYCoqYCkgaW5gKiogYG9iamVjdGAKLSAqICAgICAq
IGBzZWxlY3RgICoqYGFzYCoqIGBsYWJlbGAgKipgZm9yIChgKipga2V5YCAqKmAsYCoqIGB2YWx1
ZWAqKmApIGluYCoqIGBvYmplY3RgCi0gKiAgICAgKiBgbGFiZWxgICoqYGdyb3VwIGJ5YCoqIGBn
cm91cGAgKipgZm9yIChgKipga2V5YCoqYCxgKiogYHZhbHVlYCoqYCkgaW5gKiogYG9iamVjdGAK
LSAqICAgICAqIGBzZWxlY3RgICoqYGFzYCoqIGBsYWJlbGAgKipgZ3JvdXAgYnlgKiogYGdyb3Vw
YAotICogICAgICAgICAqKmBmb3JgIGAoYCoqYGtleWAqKmAsYCoqIGB2YWx1ZWAqKmApIGluYCoq
IGBvYmplY3RgCi0gKgotICogV2hlcmU6Ci0gKgotICogICAqIGBhcnJheWAgLyBgb2JqZWN0YDog
YW4gZXhwcmVzc2lvbiB3aGljaCBldmFsdWF0ZXMgdG8gYW4gYXJyYXkgLyBvYmplY3QgdG8gaXRl
cmF0ZSBvdmVyLgotICogICAqIGB2YWx1ZWA6IGxvY2FsIHZhcmlhYmxlIHdoaWNoIHdpbGwgcmVm
ZXIgdG8gZWFjaCBpdGVtIGluIHRoZSBgYXJyYXlgIG9yIGVhY2ggcHJvcGVydHkgdmFsdWUKLSAq
ICAgICAgb2YgYG9iamVjdGAgZHVyaW5nIGl0ZXJhdGlvbi4KLSAqICAgKiBga2V5YDogbG9jYWwg
dmFyaWFibGUgd2hpY2ggd2lsbCByZWZlciB0byBhIHByb3BlcnR5IG5hbWUgaW4gYG9iamVjdGAg
ZHVyaW5nIGl0ZXJhdGlvbi4KLSAqICAgKiBgbGFiZWxgOiBUaGUgcmVzdWx0IG9mIHRoaXMgZXhw
cmVzc2lvbiB3aWxsIGJlIHRoZSBsYWJlbCBmb3IgYDxvcHRpb24+YCBlbGVtZW50LiBUaGUKLSAq
ICAgICBgZXhwcmVzc2lvbmAgd2lsbCBtb3N0IGxpa2VseSByZWZlciB0byB0aGUgYHZhbHVlYCB2
YXJpYWJsZSAoZS5nLiBgdmFsdWUucHJvcGVydHlOYW1lYCkuCi0gKiAgICogYHNlbGVjdGA6IFRo
ZSByZXN1bHQgb2YgdGhpcyBleHByZXNzaW9uIHdpbGwgYmUgYm91bmQgdG8gdGhlIG1vZGVsIG9m
IHRoZSBwYXJlbnQgYDxzZWxlY3Q+YAotICogICAgICBlbGVtZW50LiBJZiBub3Qgc3BlY2lmaWVk
LCBgc2VsZWN0YCBleHByZXNzaW9uIHdpbGwgZGVmYXVsdCB0byBgdmFsdWVgLgotICogICAqIGBn
cm91cGA6IFRoZSByZXN1bHQgb2YgdGhpcyBleHByZXNzaW9uIHdpbGwgYmUgdXNlZCB0byBncm91
cCBvcHRpb25zIHVzaW5nIHRoZSBgPG9wdGdyb3VwPmAKLSAqICAgICAgRE9NIGVsZW1lbnQuCi0g
KgotICogQGV4YW1wbGUKLSAgICA8ZG9jOmV4YW1wbGU+Ci0gICAgICA8ZG9jOnNvdXJjZT4KLSAg
ICAgICAgPHNjcmlwdD4KLSAgICAgICAgZnVuY3Rpb24gTXlDbnRybCgkc2NvcGUpIHsKLSAgICAg
ICAgICAkc2NvcGUuY29sb3JzID0gWwotICAgICAgICAgICAge25hbWU6J2JsYWNrJywgc2hhZGU6
J2RhcmsnfSwKLSAgICAgICAgICAgIHtuYW1lOid3aGl0ZScsIHNoYWRlOidsaWdodCd9LAotICAg
ICAgICAgICAge25hbWU6J3JlZCcsIHNoYWRlOidkYXJrJ30sCi0gICAgICAgICAgICB7bmFtZTon
Ymx1ZScsIHNoYWRlOidkYXJrJ30sCi0gICAgICAgICAgICB7bmFtZToneWVsbG93Jywgc2hhZGU6
J2xpZ2h0J30KLSAgICAgICAgICBdOwotICAgICAgICAgICRzY29wZS5jb2xvciA9ICRzY29wZS5j
b2xvcnNbMl07IC8vIHJlZAotICAgICAgICB9Ci0gICAgICAgIDwvc2NyaXB0PgotICAgICAgICA8
ZGl2IG5nLWNvbnRyb2xsZXI9Ik15Q250cmwiPgotICAgICAgICAgIDx1bD4KLSAgICAgICAgICAg
IDxsaSBuZy1yZXBlYXQ9ImNvbG9yIGluIGNvbG9ycyI+Ci0gICAgICAgICAgICAgIE5hbWU6IDxp
bnB1dCBuZy1tb2RlbD0iY29sb3IubmFtZSI+Ci0gICAgICAgICAgICAgIFs8YSBocmVmIG5nLWNs
aWNrPSJjb2xvcnMuc3BsaWNlKCRpbmRleCwgMSkiPlg8L2E+XQotICAgICAgICAgICAgPC9saT4K
LSAgICAgICAgICAgIDxsaT4KLSAgICAgICAgICAgICAgWzxhIGhyZWYgbmctY2xpY2s9ImNvbG9y
cy5wdXNoKHt9KSI+YWRkPC9hPl0KLSAgICAgICAgICAgIDwvbGk+Ci0gICAgICAgICAgPC91bD4K
LSAgICAgICAgICA8aHIvPgotICAgICAgICAgIENvbG9yIChudWxsIG5vdCBhbGxvd2VkKToKLSAg
ICAgICAgICA8c2VsZWN0IG5nLW1vZGVsPSJjb2xvciIgbmctb3B0aW9ucz0iYy5uYW1lIGZvciBj
IGluIGNvbG9ycyI+PC9zZWxlY3Q+PGJyPgotCi0gICAgICAgICAgQ29sb3IgKG51bGwgYWxsb3dl
ZCk6Ci0gICAgICAgICAgPHNwYW4gIGNsYXNzPSJudWxsYWJsZSI+Ci0gICAgICAgICAgICA8c2Vs
ZWN0IG5nLW1vZGVsPSJjb2xvciIgbmctb3B0aW9ucz0iYy5uYW1lIGZvciBjIGluIGNvbG9ycyI+
Ci0gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IiI+LS0gY2hvc2UgY29sb3IgLS08L29wdGlv
bj4KLSAgICAgICAgICAgIDwvc2VsZWN0PgotICAgICAgICAgIDwvc3Bhbj48YnIvPgotCi0gICAg
ICAgICAgQ29sb3IgZ3JvdXBlZCBieSBzaGFkZToKLSAgICAgICAgICA8c2VsZWN0IG5nLW1vZGVs
PSJjb2xvciIgbmctb3B0aW9ucz0iYy5uYW1lIGdyb3VwIGJ5IGMuc2hhZGUgZm9yIGMgaW4gY29s
b3JzIj4KLSAgICAgICAgICA8L3NlbGVjdD48YnIvPgotCi0KLSAgICAgICAgICBTZWxlY3QgPGEg
aHJlZiBuZy1jbGljaz0iY29sb3I9e25hbWU6J25vdCBpbiBsaXN0J30iPmJvZ3VzPC9hPi48YnI+
Ci0gICAgICAgICAgPGhyLz4KLSAgICAgICAgICBDdXJyZW50bHkgc2VsZWN0ZWQ6IHt7IHtzZWxl
Y3RlZF9jb2xvcjpjb2xvcn0gIH19Ci0gICAgICAgICAgPGRpdiBzdHlsZT0iYm9yZGVyOnNvbGlk
IDFweCBibGFjazsgaGVpZ2h0OjIwcHgiCi0gICAgICAgICAgICAgICBuZy1zdHlsZT0ieydiYWNr
Z3JvdW5kLWNvbG9yJzpjb2xvci5uYW1lfSI+Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgIDwv
ZGl2PgotICAgICAgPC9kb2M6c291cmNlPgotICAgICAgPGRvYzpzY2VuYXJpbz4KLSAgICAgICAg
IGl0KCdzaG91bGQgY2hlY2sgbmctb3B0aW9ucycsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICBl
eHBlY3QoYmluZGluZygne3NlbGVjdGVkX2NvbG9yOmNvbG9yfScpKS50b01hdGNoKCdyZWQnKTsK
LSAgICAgICAgICAgc2VsZWN0KCdjb2xvcicpLm9wdGlvbignMCcpOwotICAgICAgICAgICBleHBl
Y3QoYmluZGluZygne3NlbGVjdGVkX2NvbG9yOmNvbG9yfScpKS50b01hdGNoKCdibGFjaycpOwot
ICAgICAgICAgICB1c2luZygnLm51bGxhYmxlJykuc2VsZWN0KCdjb2xvcicpLm9wdGlvbignJyk7
Ci0gICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCd7c2VsZWN0ZWRfY29sb3I6Y29sb3J9JykpLnRv
TWF0Y2goJ251bGwnKTsKLSAgICAgICAgIH0pOwotICAgICAgPC9kb2M6c2NlbmFyaW8+Ci0gICAg
PC9kb2M6ZXhhbXBsZT4KLSAqLwotCi12YXIgbmdPcHRpb25zRGlyZWN0aXZlID0gdmFsdWVGbih7
IHRlcm1pbmFsOiB0cnVlIH0pOwotdmFyIHNlbGVjdERpcmVjdGl2ZSA9IFsnJGNvbXBpbGUnLCAn
JHBhcnNlJywgZnVuY3Rpb24oJGNvbXBpbGUsICAgJHBhcnNlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgLy8wMDAwMTExMTEwMDAwMDAwMDAwMDIyMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MzMzMzAwMDAwMDAwMDAwMDAwNDQ0NDQ0NDQ0NDQ0NDQ0NDQwMDAwMDAwMDA1NTU1NTU1NTU1NTU1
NTU1NTAwMDAwMDA2NjY2NjY2NjY2NjY2NjY2NjAwMDAwMDAwMDAwMDAwMDc3NzcwCi0gIHZhciBO
R19PUFRJT05TX1JFR0VYUCA9IC9eXHMqKC4qPykoPzpccythc1xzKyguKj8pKT8oPzpccytncm91
cFxzK2J5XHMrKC4qKSk/XHMrZm9yXHMrKD86KFtcJFx3XVtcJFx3XGRdKil8KD86XChccyooW1wk
XHddW1wkXHdcZF0qKVxzKixccyooW1wkXHddW1wkXHdcZF0qKVxzKlwpKSlccytpblxzKyguKikk
LywKLSAgICAgIG51bGxNb2RlbEN0cmwgPSB7JHNldFZpZXdWYWx1ZTogbm9vcH07Ci0KLSAgcmV0
dXJuIHsKLSAgICByZXN0cmljdDogJ0UnLAotICAgIHJlcXVpcmU6IFsnc2VsZWN0JywgJz9uZ01v
ZGVsJ10sCi0gICAgY29udHJvbGxlcjogWyckZWxlbWVudCcsICckc2NvcGUnLCAnJGF0dHJzJywg
ZnVuY3Rpb24oJGVsZW1lbnQsICRzY29wZSwgJGF0dHJzKSB7Ci0gICAgICB2YXIgc2VsZiA9IHRo
aXMsCi0gICAgICAgICAgb3B0aW9uc01hcCA9IHt9LAotICAgICAgICAgIG5nTW9kZWxDdHJsID0g
bnVsbE1vZGVsQ3RybCwKLSAgICAgICAgICBudWxsT3B0aW9uLAotICAgICAgICAgIHVua25vd25P
cHRpb247Ci0KLQotICAgICAgc2VsZi5kYXRhYm91bmQgPSAkYXR0cnMubmdNb2RlbDsKLQotCi0g
ICAgICBzZWxmLmluaXQgPSBmdW5jdGlvbihuZ01vZGVsQ3RybF8sIG51bGxPcHRpb25fLCB1bmtu
b3duT3B0aW9uXykgewotICAgICAgICBuZ01vZGVsQ3RybCA9IG5nTW9kZWxDdHJsXzsKLSAgICAg
ICAgbnVsbE9wdGlvbiA9IG51bGxPcHRpb25fOwotICAgICAgICB1bmtub3duT3B0aW9uID0gdW5r
bm93bk9wdGlvbl87Ci0gICAgICB9Ci0KLQotICAgICAgc2VsZi5hZGRPcHRpb24gPSBmdW5jdGlv
bih2YWx1ZSkgewotICAgICAgICBvcHRpb25zTWFwW3ZhbHVlXSA9IHRydWU7Ci0KLSAgICAgICAg
aWYgKG5nTW9kZWxDdHJsLiR2aWV3VmFsdWUgPT0gdmFsdWUpIHsKLSAgICAgICAgICAkZWxlbWVu
dC52YWwodmFsdWUpOwotICAgICAgICAgIGlmICh1bmtub3duT3B0aW9uLnBhcmVudCgpKSB1bmtu
b3duT3B0aW9uLnJlbW92ZSgpOwotICAgICAgICB9Ci0gICAgICB9OwotCi0KLSAgICAgIHNlbGYu
cmVtb3ZlT3B0aW9uID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3B0
aW9uKHZhbHVlKSkgewotICAgICAgICAgIGRlbGV0ZSBvcHRpb25zTWFwW3ZhbHVlXTsKLSAgICAg
ICAgICBpZiAobmdNb2RlbEN0cmwuJHZpZXdWYWx1ZSA9PSB2YWx1ZSkgewotICAgICAgICAgICAg
dGhpcy5yZW5kZXJVbmtub3duT3B0aW9uKHZhbHVlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgIH07Ci0KLQotICAgICAgc2VsZi5yZW5kZXJVbmtub3duT3B0aW9uID0gZnVuY3Rpb24o
dmFsKSB7Ci0gICAgICAgIHZhciB1bmtub3duVmFsID0gJz8gJyArIGhhc2hLZXkodmFsKSArICcg
Pyc7Ci0gICAgICAgIHVua25vd25PcHRpb24udmFsKHVua25vd25WYWwpOwotICAgICAgICAkZWxl
bWVudC5wcmVwZW5kKHVua25vd25PcHRpb24pOwotICAgICAgICAkZWxlbWVudC52YWwodW5rbm93
blZhbCk7Ci0gICAgICAgIHVua25vd25PcHRpb24ucHJvcCgnc2VsZWN0ZWQnLCB0cnVlKTsgLy8g
bmVlZGVkIGZvciBJRQotICAgICAgfQotCi0KLSAgICAgIHNlbGYuaGFzT3B0aW9uID0gZnVuY3Rp
b24odmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIG9wdGlvbnNNYXAuaGFzT3duUHJvcGVydHkodmFs
dWUpOwotICAgICAgfQotCi0gICAgICAkc2NvcGUuJG9uKCckZGVzdHJveScsIGZ1bmN0aW9uKCkg
ewotICAgICAgICAvLyBkaXNhYmxlIHVua25vd24gb3B0aW9uIHNvIHRoYXQgd2UgZG9uJ3QgZG8g
d29yayB3aGVuIHRoZSB3aG9sZSBzZWxlY3QgaXMgYmVpbmcgZGVzdHJveWVkCi0gICAgICAgIHNl
bGYucmVuZGVyVW5rbm93bk9wdGlvbiA9IG5vb3A7Ci0gICAgICB9KTsKLSAgICB9XSwKLQotICAg
IGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJscykgewotICAgICAgLy8g
aWYgbmdNb2RlbCBpcyBub3QgZGVmaW5lZCwgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZwot
ICAgICAgaWYgKCFjdHJsc1sxXSkgcmV0dXJuOwotCi0gICAgICB2YXIgc2VsZWN0Q3RybCA9IGN0
cmxzWzBdLAotICAgICAgICAgIG5nTW9kZWxDdHJsID0gY3RybHNbMV0sCi0gICAgICAgICAgbXVs
dGlwbGUgPSBhdHRyLm11bHRpcGxlLAotICAgICAgICAgIG9wdGlvbnNFeHAgPSBhdHRyLm5nT3B0
aW9ucywKLSAgICAgICAgICBudWxsT3B0aW9uID0gZmFsc2UsIC8vIGlmIGZhbHNlLCB1c2VyIHdp
bGwgbm90IGJlIGFibGUgdG8gc2VsZWN0IGl0ICh1c2VkIGJ5IG5nT3B0aW9ucykKLSAgICAgICAg
ICBlbXB0eU9wdGlvbiwKLSAgICAgICAgICAvLyB3ZSBjYW4ndCBqdXN0IGpxTGl0ZSgnPG9wdGlv
bj4nKSBzaW5jZSBqcUxpdGUgaXMgbm90IHNtYXJ0IGVub3VnaAotICAgICAgICAgIC8vIHRvIGNy
ZWF0ZSBpdCBpbiA8c2VsZWN0PiBhbmQgSUUgYmFyZnMgb3RoZXJ3aXNlLgotICAgICAgICAgIG9w
dGlvblRlbXBsYXRlID0ganFMaXRlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpKSwK
LSAgICAgICAgICBvcHRHcm91cFRlbXBsYXRlID1qcUxpdGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnb3B0Z3JvdXAnKSksCi0gICAgICAgICAgdW5rbm93bk9wdGlvbiA9IG9wdGlvblRlbXBsYXRl
LmNsb25lKCk7Ci0KLSAgICAgIC8vIGZpbmQgIm51bGwiIG9wdGlvbgotICAgICAgZm9yKHZhciBp
ID0gMCwgY2hpbGRyZW4gPSBlbGVtZW50LmNoaWxkcmVuKCksIGlpID0gY2hpbGRyZW4ubGVuZ3Ro
OyBpIDwgaWk7IGkrKykgewotICAgICAgICBpZiAoY2hpbGRyZW5baV0udmFsdWUgPT0gJycpIHsK
LSAgICAgICAgICBlbXB0eU9wdGlvbiA9IG51bGxPcHRpb24gPSBjaGlsZHJlbi5lcShpKTsKLSAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBzZWxlY3RDdHJsLmlu
aXQobmdNb2RlbEN0cmwsIG51bGxPcHRpb24sIHVua25vd25PcHRpb24pOwotCi0gICAgICAvLyBy
ZXF1aXJlZCB2YWxpZGF0b3IKLSAgICAgIGlmIChtdWx0aXBsZSAmJiAoYXR0ci5yZXF1aXJlZCB8
fCBhdHRyLm5nUmVxdWlyZWQpKSB7Ci0gICAgICAgIHZhciByZXF1aXJlZFZhbGlkYXRvciA9IGZ1
bmN0aW9uKHZhbHVlKSB7Ci0gICAgICAgICAgbmdNb2RlbEN0cmwuJHNldFZhbGlkaXR5KCdyZXF1
aXJlZCcsICFhdHRyLnJlcXVpcmVkIHx8ICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGgpKTsKLSAgICAg
ICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgbmdNb2RlbEN0cmwuJHBh
cnNlcnMucHVzaChyZXF1aXJlZFZhbGlkYXRvcik7Ci0gICAgICAgIG5nTW9kZWxDdHJsLiRmb3Jt
YXR0ZXJzLnVuc2hpZnQocmVxdWlyZWRWYWxpZGF0b3IpOwotCi0gICAgICAgIGF0dHIuJG9ic2Vy
dmUoJ3JlcXVpcmVkJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgcmVxdWlyZWRWYWxpZGF0b3Io
bmdNb2RlbEN0cmwuJHZpZXdWYWx1ZSk7Ci0gICAgICAgIH0pOwotICAgICAgfQotCi0gICAgICBp
ZiAob3B0aW9uc0V4cCkgT3B0aW9ucyhzY29wZSwgZWxlbWVudCwgbmdNb2RlbEN0cmwpOwotICAg
ICAgZWxzZSBpZiAobXVsdGlwbGUpIE11bHRpcGxlKHNjb3BlLCBlbGVtZW50LCBuZ01vZGVsQ3Ry
bCk7Ci0gICAgICBlbHNlIFNpbmdsZShzY29wZSwgZWxlbWVudCwgbmdNb2RlbEN0cmwsIHNlbGVj
dEN0cmwpOwotCi0KLSAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotCi0KLSAg
ICAgIGZ1bmN0aW9uIFNpbmdsZShzY29wZSwgc2VsZWN0RWxlbWVudCwgbmdNb2RlbEN0cmwsIHNl
bGVjdEN0cmwpIHsKLSAgICAgICAgbmdNb2RlbEN0cmwuJHJlbmRlciA9IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgIHZhciB2aWV3VmFsdWUgPSBuZ01vZGVsQ3RybC4kdmlld1ZhbHVlOwotCi0gICAg
ICAgICAgaWYgKHNlbGVjdEN0cmwuaGFzT3B0aW9uKHZpZXdWYWx1ZSkpIHsKLSAgICAgICAgICAg
IGlmICh1bmtub3duT3B0aW9uLnBhcmVudCgpKSB1bmtub3duT3B0aW9uLnJlbW92ZSgpOwotICAg
ICAgICAgICAgc2VsZWN0RWxlbWVudC52YWwodmlld1ZhbHVlKTsKLSAgICAgICAgICAgIGlmICh2
aWV3VmFsdWUgPT09ICcnKSBlbXB0eU9wdGlvbi5wcm9wKCdzZWxlY3RlZCcsIHRydWUpOyAvLyB0
byBtYWtlIElFOSBoYXBweQotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoaXNV
bmRlZmluZWQodmlld1ZhbHVlKSAmJiBlbXB0eU9wdGlvbikgewotICAgICAgICAgICAgICBzZWxl
Y3RFbGVtZW50LnZhbCgnJyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICBz
ZWxlY3RDdHJsLnJlbmRlclVua25vd25PcHRpb24odmlld1ZhbHVlKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgc2VsZWN0RWxlbWVudC5iaW5kKCdj
aGFuZ2UnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICBzY29wZS4kYXBwbHkoZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICBpZiAodW5rbm93bk9wdGlvbi5wYXJlbnQoKSkgdW5rbm93bk9wdGlvbi5y
ZW1vdmUoKTsKLSAgICAgICAgICAgIG5nTW9kZWxDdHJsLiRzZXRWaWV3VmFsdWUoc2VsZWN0RWxl
bWVudC52YWwoKSk7Ci0gICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgICAgfQotCi0gICAg
ICBmdW5jdGlvbiBNdWx0aXBsZShzY29wZSwgc2VsZWN0RWxlbWVudCwgY3RybCkgewotICAgICAg
ICB2YXIgbGFzdFZpZXc7Ci0gICAgICAgIGN0cmwuJHJlbmRlciA9IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgIHZhciBpdGVtcyA9IG5ldyBIYXNoTWFwKGN0cmwuJHZpZXdWYWx1ZSk7Ci0gICAgICAg
ICAgZm9yRWFjaChzZWxlY3RFbGVtZW50LmZpbmQoJ29wdGlvbicpLCBmdW5jdGlvbihvcHRpb24p
IHsKLSAgICAgICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IGlzRGVmaW5lZChpdGVtcy5nZXQob3B0
aW9uLnZhbHVlKSk7Ci0gICAgICAgICAgfSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLy8gd2Ug
aGF2ZSB0byBkbyBpdCBvbiBlYWNoIHdhdGNoIHNpbmNlIG5nTW9kZWwgd2F0Y2hlcyByZWZlcmVu
Y2UsIGJ1dAotICAgICAgICAvLyB3ZSBuZWVkIHRvIHdvcmsgb2YgYW4gYXJyYXksIHNvIHdlIG5l
ZWQgdG8gc2VlIGlmIGFueXRoaW5nIHdhcyBpbnNlcnRlZC9yZW1vdmVkCi0gICAgICAgIHNjb3Bl
LiR3YXRjaChmdW5jdGlvbiBzZWxlY3RNdWx0aXBsZVdhdGNoKCkgewotICAgICAgICAgIGlmICgh
ZXF1YWxzKGxhc3RWaWV3LCBjdHJsLiR2aWV3VmFsdWUpKSB7Ci0gICAgICAgICAgICBsYXN0Vmll
dyA9IGNvcHkoY3RybC4kdmlld1ZhbHVlKTsKLSAgICAgICAgICAgIGN0cmwuJHJlbmRlcigpOwot
ICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgc2VsZWN0RWxlbWVudC5iaW5kKCdj
aGFuZ2UnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICBzY29wZS4kYXBwbHkoZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICB2YXIgYXJyYXkgPSBbXTsKLSAgICAgICAgICAgIGZvckVhY2goc2VsZWN0
RWxlbWVudC5maW5kKCdvcHRpb24nKSwgZnVuY3Rpb24ob3B0aW9uKSB7Ci0gICAgICAgICAgICAg
IGlmIChvcHRpb24uc2VsZWN0ZWQpIHsKLSAgICAgICAgICAgICAgICBhcnJheS5wdXNoKG9wdGlv
bi52YWx1ZSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
Y3RybC4kc2V0Vmlld1ZhbHVlKGFycmF5KTsKLSAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0g
ICAgICB9Ci0KLSAgICAgIGZ1bmN0aW9uIE9wdGlvbnMoc2NvcGUsIHNlbGVjdEVsZW1lbnQsIGN0
cmwpIHsKLSAgICAgICAgdmFyIG1hdGNoOwotCi0gICAgICAgIGlmICghIChtYXRjaCA9IG9wdGlv
bnNFeHAubWF0Y2goTkdfT1BUSU9OU19SRUdFWFApKSkgewotICAgICAgICAgIHRocm93IEVycm9y
KAotICAgICAgICAgICAgIkV4cGVjdGVkIG5nT3B0aW9ucyBpbiBmb3JtIG9mICdfc2VsZWN0XyAo
YXMgX2xhYmVsXyk/IGZvciAoX2tleV8sKT9fdmFsdWVfIGluIF9jb2xsZWN0aW9uXyciICsKLSAg
ICAgICAgICAgICIgYnV0IGdvdCAnIiArIG9wdGlvbnNFeHAgKyAiJy4iKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZhciBkaXNwbGF5Rm4gPSAkcGFyc2UobWF0Y2hbMl0gfHwgbWF0Y2hbMV0pLAot
ICAgICAgICAgICAgdmFsdWVOYW1lID0gbWF0Y2hbNF0gfHwgbWF0Y2hbNl0sCi0gICAgICAgICAg
ICBrZXlOYW1lID0gbWF0Y2hbNV0sCi0gICAgICAgICAgICBncm91cEJ5Rm4gPSAkcGFyc2UobWF0
Y2hbM10gfHwgJycpLAotICAgICAgICAgICAgdmFsdWVGbiA9ICRwYXJzZShtYXRjaFsyXSA/IG1h
dGNoWzFdIDogdmFsdWVOYW1lKSwKLSAgICAgICAgICAgIHZhbHVlc0ZuID0gJHBhcnNlKG1hdGNo
WzddKSwKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgYW4gYXJyYXkgb2YgYXJyYXkgb2YgZXhpc3Rp
bmcgb3B0aW9uIGdyb3VwcyBpbiBET00uIFdlIHRyeSB0byByZXVzZSB0aGVzZSBpZiBwb3NzaWJs
ZQotICAgICAgICAgICAgLy8gb3B0aW9uR3JvdXBzQ2FjaGVbMF0gaXMgdGhlIG9wdGlvbnMgd2l0
aCBubyBvcHRpb24gZ3JvdXAKLSAgICAgICAgICAgIC8vIG9wdGlvbkdyb3Vwc0NhY2hlWz9dWzBd
IGlzIHRoZSBwYXJlbnQ6IGVpdGhlciB0aGUgU0VMRUNUIG9yIE9QVEdST1VQIGVsZW1lbnQKLSAg
ICAgICAgICAgIG9wdGlvbkdyb3Vwc0NhY2hlID0gW1t7ZWxlbWVudDogc2VsZWN0RWxlbWVudCwg
bGFiZWw6Jyd9XV07Ci0KLSAgICAgICAgaWYgKG51bGxPcHRpb24pIHsKLSAgICAgICAgICAvLyBj
b21waWxlIHRoZSBlbGVtZW50IHNpbmNlIHRoZXJlIG1pZ2h0IGJlIGJpbmRpbmdzIGluIGl0Ci0g
ICAgICAgICAgJGNvbXBpbGUobnVsbE9wdGlvbikoc2NvcGUpOwotCi0gICAgICAgICAgLy8gcmVt
b3ZlIHRoZSBjbGFzcywgd2hpY2ggaXMgYWRkZWQgYXV0b21hdGljYWxseSBiZWNhdXNlIHdlIHJl
Y29tcGlsZSB0aGUgZWxlbWVudCBhbmQgaXQKLSAgICAgICAgICAvLyBiZWNvbWVzIHRoZSBjb21w
aWxhdGlvbiByb290Ci0gICAgICAgICAgbnVsbE9wdGlvbi5yZW1vdmVDbGFzcygnbmctc2NvcGUn
KTsKLQotICAgICAgICAgIC8vIHdlIG5lZWQgdG8gcmVtb3ZlIGl0IGJlZm9yZSBjYWxsaW5nIHNl
bGVjdEVsZW1lbnQuaHRtbCgnJykgYmVjYXVzZSBvdGhlcndpc2UgSUUgd2lsbAotICAgICAgICAg
IC8vIHJlbW92ZSB0aGUgbGFiZWwgZnJvbSB0aGUgZWxlbWVudC4gd3RmPwotICAgICAgICAgIG51
bGxPcHRpb24ucmVtb3ZlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBjbGVhciBjb250ZW50
cywgd2UnbGwgYWRkIHdoYXQncyBuZWVkZWQgYmFzZWQgb24gdGhlIG1vZGVsCi0gICAgICAgIHNl
bGVjdEVsZW1lbnQuaHRtbCgnJyk7Ci0KLSAgICAgICAgc2VsZWN0RWxlbWVudC5iaW5kKCdjaGFu
Z2UnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICBzY29wZS4kYXBwbHkoZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICB2YXIgb3B0aW9uR3JvdXAsCi0gICAgICAgICAgICAgICAgY29sbGVjdGlvbiA9
IHZhbHVlc0ZuKHNjb3BlKSB8fCBbXSwKLSAgICAgICAgICAgICAgICBsb2NhbHMgPSB7fSwKLSAg
ICAgICAgICAgICAgICBrZXksIHZhbHVlLCBvcHRpb25FbGVtZW50LCBpbmRleCwgZ3JvdXBJbmRl
eCwgbGVuZ3RoLCBncm91cExlbmd0aDsKLQotICAgICAgICAgICAgaWYgKG11bHRpcGxlKSB7Ci0g
ICAgICAgICAgICAgIHZhbHVlID0gW107Ci0gICAgICAgICAgICAgIGZvciAoZ3JvdXBJbmRleCA9
IDAsIGdyb3VwTGVuZ3RoID0gb3B0aW9uR3JvdXBzQ2FjaGUubGVuZ3RoOwotICAgICAgICAgICAg
ICAgICAgIGdyb3VwSW5kZXggPCBncm91cExlbmd0aDsKLSAgICAgICAgICAgICAgICAgICBncm91
cEluZGV4KyspIHsKLSAgICAgICAgICAgICAgICAvLyBsaXN0IG9mIG9wdGlvbnMgZm9yIHRoYXQg
Z3JvdXAuIChmaXJzdCBpdGVtIGhhcyB0aGUgcGFyZW50KQotICAgICAgICAgICAgICAgIG9wdGlv
bkdyb3VwID0gb3B0aW9uR3JvdXBzQ2FjaGVbZ3JvdXBJbmRleF07Ci0KLSAgICAgICAgICAgICAg
ICBmb3IoaW5kZXggPSAxLCBsZW5ndGggPSBvcHRpb25Hcm91cC5sZW5ndGg7IGluZGV4IDwgbGVu
Z3RoOyBpbmRleCsrKSB7Ci0gICAgICAgICAgICAgICAgICBpZiAoKG9wdGlvbkVsZW1lbnQgPSBv
cHRpb25Hcm91cFtpbmRleF0uZWxlbWVudClbMF0uc2VsZWN0ZWQpIHsKLSAgICAgICAgICAgICAg
ICAgICAga2V5ID0gb3B0aW9uRWxlbWVudC52YWwoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGtleU5hbWUpIGxvY2Fsc1trZXlOYW1lXSA9IGtleTsKLSAgICAgICAgICAgICAgICAgICAgbG9j
YWxzW3ZhbHVlTmFtZV0gPSBjb2xsZWN0aW9uW2tleV07Ci0gICAgICAgICAgICAgICAgICAgIHZh
bHVlLnB1c2godmFsdWVGbihzY29wZSwgbG9jYWxzKSk7Ci0gICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICBrZXkgPSBzZWxlY3RFbGVtZW50LnZhbCgpOwotICAgICAgICAgICAgICBp
ZiAoa2V5ID09ICc/JykgewotICAgICAgICAgICAgICAgIHZhbHVlID0gdW5kZWZpbmVkOwotICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAnJyl7Ci0gICAgICAgICAgICAgICAgdmFsdWUg
PSBudWxsOwotICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGxvY2Fsc1t2
YWx1ZU5hbWVdID0gY29sbGVjdGlvbltrZXldOwotICAgICAgICAgICAgICAgIGlmIChrZXlOYW1l
KSBsb2NhbHNba2V5TmFtZV0gPSBrZXk7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZUZu
KHNjb3BlLCBsb2NhbHMpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBjdHJsLiRzZXRWaWV3VmFsdWUodmFsdWUpOwotICAgICAgICAgIH0pOwotICAgICAgICB9
KTsKLQotICAgICAgICBjdHJsLiRyZW5kZXIgPSByZW5kZXI7Ci0KLSAgICAgICAgLy8gVE9ETyh2
b2p0YSk6IGNhbid0IHdlIG9wdGltaXplIHRoaXMgPwotICAgICAgICBzY29wZS4kd2F0Y2gocmVu
ZGVyKTsKLQotICAgICAgICBmdW5jdGlvbiByZW5kZXIoKSB7Ci0gICAgICAgICAgdmFyIG9wdGlv
bkdyb3VwcyA9IHsnJzpbXX0sIC8vIFRlbXBvcmFyeSBsb2NhdGlvbiBmb3IgdGhlIG9wdGlvbiBn
cm91cHMgYmVmb3JlIHdlIHJlbmRlciB0aGVtCi0gICAgICAgICAgICAgIG9wdGlvbkdyb3VwTmFt
ZXMgPSBbJyddLAotICAgICAgICAgICAgICBvcHRpb25Hcm91cE5hbWUsCi0gICAgICAgICAgICAg
IG9wdGlvbkdyb3VwLAotICAgICAgICAgICAgICBvcHRpb24sCi0gICAgICAgICAgICAgIGV4aXN0
aW5nUGFyZW50LCBleGlzdGluZ09wdGlvbnMsIGV4aXN0aW5nT3B0aW9uLAotICAgICAgICAgICAg
ICBtb2RlbFZhbHVlID0gY3RybC4kbW9kZWxWYWx1ZSwKLSAgICAgICAgICAgICAgdmFsdWVzID0g
dmFsdWVzRm4oc2NvcGUpIHx8IFtdLAotICAgICAgICAgICAgICBrZXlzID0ga2V5TmFtZSA/IHNv
cnRlZEtleXModmFsdWVzKSA6IHZhbHVlcywKLSAgICAgICAgICAgICAgZ3JvdXBMZW5ndGgsIGxl
bmd0aCwKLSAgICAgICAgICAgICAgZ3JvdXBJbmRleCwgaW5kZXgsCi0gICAgICAgICAgICAgIGxv
Y2FscyA9IHt9LAotICAgICAgICAgICAgICBzZWxlY3RlZCwKLSAgICAgICAgICAgICAgc2VsZWN0
ZWRTZXQgPSBmYWxzZSwgLy8gbm90aGluZyBpcyBzZWxlY3RlZCB5ZXQKLSAgICAgICAgICAgICAg
bGFzdEVsZW1lbnQsCi0gICAgICAgICAgICAgIGVsZW1lbnQsCi0gICAgICAgICAgICAgIGxhYmVs
OwotCi0gICAgICAgICAgaWYgKG11bHRpcGxlKSB7Ci0gICAgICAgICAgICBzZWxlY3RlZFNldCA9
IG5ldyBIYXNoTWFwKG1vZGVsVmFsdWUpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIC8vIFdl
IG5vdyBidWlsZCB1cCB0aGUgbGlzdCBvZiBvcHRpb25zIHdlIG5lZWQgKHdlIG1lcmdlIGxhdGVy
KQotICAgICAgICAgIGZvciAoaW5kZXggPSAwOyBsZW5ndGggPSBrZXlzLmxlbmd0aCwgaW5kZXgg
PCBsZW5ndGg7IGluZGV4KyspIHsKLSAgICAgICAgICAgICAgIGxvY2Fsc1t2YWx1ZU5hbWVdID0g
dmFsdWVzW2tleU5hbWUgPyBsb2NhbHNba2V5TmFtZV09a2V5c1tpbmRleF06aW5kZXhdOwotICAg
ICAgICAgICAgICAgb3B0aW9uR3JvdXBOYW1lID0gZ3JvdXBCeUZuKHNjb3BlLCBsb2NhbHMpIHx8
ICcnOwotICAgICAgICAgICAgaWYgKCEob3B0aW9uR3JvdXAgPSBvcHRpb25Hcm91cHNbb3B0aW9u
R3JvdXBOYW1lXSkpIHsKLSAgICAgICAgICAgICAgb3B0aW9uR3JvdXAgPSBvcHRpb25Hcm91cHNb
b3B0aW9uR3JvdXBOYW1lXSA9IFtdOwotICAgICAgICAgICAgICBvcHRpb25Hcm91cE5hbWVzLnB1
c2gob3B0aW9uR3JvdXBOYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtdWx0
aXBsZSkgewotICAgICAgICAgICAgICBzZWxlY3RlZCA9IHNlbGVjdGVkU2V0LnJlbW92ZSh2YWx1
ZUZuKHNjb3BlLCBsb2NhbHMpKSAhPSB1bmRlZmluZWQ7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICBzZWxlY3RlZCA9IG1vZGVsVmFsdWUgPT09IHZhbHVlRm4oc2NvcGUsIGxv
Y2Fscyk7Ci0gICAgICAgICAgICAgIHNlbGVjdGVkU2V0ID0gc2VsZWN0ZWRTZXQgfHwgc2VsZWN0
ZWQ7IC8vIHNlZSBpZiBhdCBsZWFzdCBvbmUgaXRlbSBpcyBzZWxlY3RlZAotICAgICAgICAgICAg
fQotICAgICAgICAgICAgbGFiZWwgPSBkaXNwbGF5Rm4oc2NvcGUsIGxvY2Fscyk7IC8vIHdoYXQg
d2lsbCBiZSBzZWVuIGJ5IHRoZSB1c2VyCi0gICAgICAgICAgICBsYWJlbCA9IGxhYmVsID09PSB1
bmRlZmluZWQgPyAnJyA6IGxhYmVsOyAvLyBkb2luZyBkaXNwbGF5Rm4oc2NvcGUsIGxvY2Fscykg
fHwgJycgb3ZlcndyaXRlcyB6ZXJvIHZhbHVlcwotICAgICAgICAgICAgb3B0aW9uR3JvdXAucHVz
aCh7Ci0gICAgICAgICAgICAgIGlkOiBrZXlOYW1lID8ga2V5c1tpbmRleF0gOiBpbmRleCwgICAv
LyBlaXRoZXIgdGhlIGluZGV4IGludG8gYXJyYXkgb3Iga2V5IGZyb20gb2JqZWN0Ci0gICAgICAg
ICAgICAgIGxhYmVsOiBsYWJlbCwKLSAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHNlbGVjdGVkICAg
ICAgICAgICAgICAgICAgIC8vIGRldGVybWluZSBpZiB3ZSBzaG91bGQgYmUgc2VsZWN0ZWQKLSAg
ICAgICAgICAgIH0pOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoIW11bHRpcGxlKSB7Ci0g
ICAgICAgICAgICBpZiAobnVsbE9wdGlvbiB8fCBtb2RlbFZhbHVlID09PSBudWxsKSB7Ci0gICAg
ICAgICAgICAgIC8vIGluc2VydCBudWxsIG9wdGlvbiBpZiB3ZSBoYXZlIGEgcGxhY2Vob2xkZXIs
IG9yIHRoZSBtb2RlbCBpcyBudWxsCi0gICAgICAgICAgICAgIG9wdGlvbkdyb3Vwc1snJ10udW5z
aGlmdCh7aWQ6JycsIGxhYmVsOicnLCBzZWxlY3RlZDohc2VsZWN0ZWRTZXR9KTsKLSAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIXNlbGVjdGVkU2V0KSB7Ci0gICAgICAgICAgICAgIC8vIG9wdGlvbiBj
b3VsZCBub3QgYmUgZm91bmQsIHdlIGhhdmUgdG8gaW5zZXJ0IHRoZSB1bmRlZmluZWQgaXRlbQot
ICAgICAgICAgICAgICBvcHRpb25Hcm91cHNbJyddLnVuc2hpZnQoe2lkOic/JywgbGFiZWw6Jycs
IHNlbGVjdGVkOnRydWV9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAvLyBOb3cgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGxpc3Qgb2YgRE9NIG5vZGVzIHRvIG1hdGNo
IHRoZSBvcHRpb25Hcm91cHMgd2UgY29tcHV0ZWQgYWJvdmUKLSAgICAgICAgICBmb3IgKGdyb3Vw
SW5kZXggPSAwLCBncm91cExlbmd0aCA9IG9wdGlvbkdyb3VwTmFtZXMubGVuZ3RoOwotICAgICAg
ICAgICAgICAgZ3JvdXBJbmRleCA8IGdyb3VwTGVuZ3RoOwotICAgICAgICAgICAgICAgZ3JvdXBJ
bmRleCsrKSB7Ci0gICAgICAgICAgICAvLyBjdXJyZW50IG9wdGlvbiBncm91cCBuYW1lIG9yICcn
IGlmIG5vIGdyb3VwCi0gICAgICAgICAgICBvcHRpb25Hcm91cE5hbWUgPSBvcHRpb25Hcm91cE5h
bWVzW2dyb3VwSW5kZXhdOwotCi0gICAgICAgICAgICAvLyBsaXN0IG9mIG9wdGlvbnMgZm9yIHRo
YXQgZ3JvdXAuIChmaXJzdCBpdGVtIGhhcyB0aGUgcGFyZW50KQotICAgICAgICAgICAgb3B0aW9u
R3JvdXAgPSBvcHRpb25Hcm91cHNbb3B0aW9uR3JvdXBOYW1lXTsKLQotICAgICAgICAgICAgaWYg
KG9wdGlvbkdyb3Vwc0NhY2hlLmxlbmd0aCA8PSBncm91cEluZGV4KSB7Ci0gICAgICAgICAgICAg
IC8vIHdlIG5lZWQgdG8gZ3JvdyB0aGUgb3B0aW9uR3JvdXBzCi0gICAgICAgICAgICAgIGV4aXN0
aW5nUGFyZW50ID0gewotICAgICAgICAgICAgICAgIGVsZW1lbnQ6IG9wdEdyb3VwVGVtcGxhdGUu
Y2xvbmUoKS5hdHRyKCdsYWJlbCcsIG9wdGlvbkdyb3VwTmFtZSksCi0gICAgICAgICAgICAgICAg
bGFiZWw6IG9wdGlvbkdyb3VwLmxhYmVsCi0gICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAg
IGV4aXN0aW5nT3B0aW9ucyA9IFtleGlzdGluZ1BhcmVudF07Ci0gICAgICAgICAgICAgIG9wdGlv
bkdyb3Vwc0NhY2hlLnB1c2goZXhpc3RpbmdPcHRpb25zKTsKLSAgICAgICAgICAgICAgc2VsZWN0
RWxlbWVudC5hcHBlbmQoZXhpc3RpbmdQYXJlbnQuZWxlbWVudCk7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICBleGlzdGluZ09wdGlvbnMgPSBvcHRpb25Hcm91cHNDYWNoZVtn
cm91cEluZGV4XTsKLSAgICAgICAgICAgICAgZXhpc3RpbmdQYXJlbnQgPSBleGlzdGluZ09wdGlv
bnNbMF07ICAvLyBlaXRoZXIgU0VMRUNUIChubyBncm91cCkgb3IgT1BUR1JPVVAgZWxlbWVudAot
Ci0gICAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgT1BUR1JPVVAgbGFiZWwgaWYgbm90IHRoZSBz
YW1lLgotICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdQYXJlbnQubGFiZWwgIT0gb3B0aW9uR3Jv
dXBOYW1lKSB7Ci0gICAgICAgICAgICAgICAgZXhpc3RpbmdQYXJlbnQuZWxlbWVudC5hdHRyKCds
YWJlbCcsIGV4aXN0aW5nUGFyZW50LmxhYmVsID0gb3B0aW9uR3JvdXBOYW1lKTsKLSAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBsYXN0RWxlbWVudCA9IG51bGw7
ICAvLyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nCi0gICAgICAgICAgICBmb3IoaW5kZXggPSAwLCBs
ZW5ndGggPSBvcHRpb25Hcm91cC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7Ci0g
ICAgICAgICAgICAgIG9wdGlvbiA9IG9wdGlvbkdyb3VwW2luZGV4XTsKLSAgICAgICAgICAgICAg
aWYgKChleGlzdGluZ09wdGlvbiA9IGV4aXN0aW5nT3B0aW9uc1tpbmRleCsxXSkpIHsKLSAgICAg
ICAgICAgICAgICAvLyByZXVzZSBlbGVtZW50cwotICAgICAgICAgICAgICAgIGxhc3RFbGVtZW50
ID0gZXhpc3RpbmdPcHRpb24uZWxlbWVudDsKLSAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdP
cHRpb24ubGFiZWwgIT09IG9wdGlvbi5sYWJlbCkgewotICAgICAgICAgICAgICAgICAgbGFzdEVs
ZW1lbnQudGV4dChleGlzdGluZ09wdGlvbi5sYWJlbCA9IG9wdGlvbi5sYWJlbCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ09wdGlvbi5pZCAhPT0gb3B0
aW9uLmlkKSB7Ci0gICAgICAgICAgICAgICAgICBsYXN0RWxlbWVudC52YWwoZXhpc3RpbmdPcHRp
b24uaWQgPSBvcHRpb24uaWQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAv
LyBsYXN0RWxlbWVudC5wcm9wKCdzZWxlY3RlZCcpIHByb3ZpZGVkIGJ5IGpRdWVyeSBoYXMgc2lk
ZS1lZmZlY3RzCi0gICAgICAgICAgICAgICAgaWYgKGxhc3RFbGVtZW50WzBdLnNlbGVjdGVkICE9
PSBvcHRpb24uc2VsZWN0ZWQpIHsKLSAgICAgICAgICAgICAgICAgIGxhc3RFbGVtZW50LnByb3Ao
J3NlbGVjdGVkJywgKGV4aXN0aW5nT3B0aW9uLnNlbGVjdGVkID0gb3B0aW9uLnNlbGVjdGVkKSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIC8vIGdyb3cgZWxlbWVudHMKLQotICAgICAgICAgICAgICAgIC8vIGlmIGl0J3MgYSBudWxs
IG9wdGlvbgotICAgICAgICAgICAgICAgIGlmIChvcHRpb24uaWQgPT09ICcnICYmIG51bGxPcHRp
b24pIHsKLSAgICAgICAgICAgICAgICAgIC8vIHB1dCBiYWNrIHRoZSBwcmUtY29tcGlsZWQgZWxl
bWVudAotICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IG51bGxPcHRpb247Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgIC8vIGpRdWVyeSh2MS40LjIpIEJ1Zzog
V2Ugc2hvdWxkIGJlIGFibGUgdG8gY2hhaW4gdGhlIG1ldGhvZCBjYWxscywgYnV0Ci0gICAgICAg
ICAgICAgICAgICAvLyBpbiB0aGlzIHZlcnNpb24gb2YgalF1ZXJ5IG9uIHNvbWUgYnJvd3NlciB0
aGUgLnRleHQoKSByZXR1cm5zIGEgc3RyaW5nCi0gICAgICAgICAgICAgICAgICAvLyByYXRoZXIg
dGhlbiB0aGUgZWxlbWVudC4KLSAgICAgICAgICAgICAgICAgIChlbGVtZW50ID0gb3B0aW9uVGVt
cGxhdGUuY2xvbmUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAudmFsKG9wdGlvbi5pZCkKLSAg
ICAgICAgICAgICAgICAgICAgICAuYXR0cignc2VsZWN0ZWQnLCBvcHRpb24uc2VsZWN0ZWQpCi0g
ICAgICAgICAgICAgICAgICAgICAgLnRleHQob3B0aW9uLmxhYmVsKTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBleGlzdGluZ09wdGlvbnMucHVzaChleGlzdGluZ09wdGlv
biA9IHsKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudCwKLSAgICAgICAgICAg
ICAgICAgICAgbGFiZWw6IG9wdGlvbi5sYWJlbCwKLSAgICAgICAgICAgICAgICAgICAgaWQ6IG9w
dGlvbi5pZCwKLSAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IG9wdGlvbi5zZWxlY3RlZAot
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIGlmIChsYXN0RWxlbWVudCkgewot
ICAgICAgICAgICAgICAgICAgbGFzdEVsZW1lbnQuYWZ0ZXIoZWxlbWVudCk7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgIGV4aXN0aW5nUGFyZW50LmVsZW1lbnQu
YXBwZW5kKGVsZW1lbnQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBsYXN0
RWxlbWVudCA9IGVsZW1lbnQ7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIC8vIHJlbW92ZSBhbnkgZXhjZXNzaXZlIE9QVElPTnMgaW4gYSBncm91cAotICAgICAg
ICAgICAgaW5kZXgrKzsgLy8gaW5jcmVtZW50IHNpbmNlIHRoZSBleGlzdGluZ09wdGlvbnNbMF0g
aXMgcGFyZW50IGVsZW1lbnQgbm90IE9QVElPTgotICAgICAgICAgICAgd2hpbGUoZXhpc3RpbmdP
cHRpb25zLmxlbmd0aCA+IGluZGV4KSB7Ci0gICAgICAgICAgICAgIGV4aXN0aW5nT3B0aW9ucy5w
b3AoKS5lbGVtZW50LnJlbW92ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAg
ICAgICAvLyByZW1vdmUgYW55IGV4Y2Vzc2l2ZSBPUFRHUk9VUHMgZnJvbSBzZWxlY3QKLSAgICAg
ICAgICB3aGlsZShvcHRpb25Hcm91cHNDYWNoZS5sZW5ndGggPiBncm91cEluZGV4KSB7Ci0gICAg
ICAgICAgICBvcHRpb25Hcm91cHNDYWNoZS5wb3AoKVswXS5lbGVtZW50LnJlbW92ZSgpOwotICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotfV07Ci0KLXZhciBvcHRp
b25EaXJlY3RpdmUgPSBbJyRpbnRlcnBvbGF0ZScsIGZ1bmN0aW9uKCRpbnRlcnBvbGF0ZSkgewot
ICB2YXIgbnVsbFNlbGVjdEN0cmwgPSB7Ci0gICAgYWRkT3B0aW9uOiBub29wLAotICAgIHJlbW92
ZU9wdGlvbjogbm9vcAotICB9OwotCi0gIHJldHVybiB7Ci0gICAgcmVzdHJpY3Q6ICdFJywKLSAg
ICBwcmlvcml0eTogMTAwLAotICAgIGNvbXBpbGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHIpIHsK
LSAgICAgIGlmIChpc1VuZGVmaW5lZChhdHRyLnZhbHVlKSkgewotICAgICAgICB2YXIgaW50ZXJw
b2xhdGVGbiA9ICRpbnRlcnBvbGF0ZShlbGVtZW50LnRleHQoKSwgdHJ1ZSk7Ci0gICAgICAgIGlm
ICghaW50ZXJwb2xhdGVGbikgewotICAgICAgICAgIGF0dHIuJHNldCgndmFsdWUnLCBlbGVtZW50
LnRleHQoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcmV0dXJuIGZ1bmN0aW9uIChz
Y29wZSwgZWxlbWVudCwgYXR0cikgewotICAgICAgICB2YXIgc2VsZWN0Q3RybE5hbWUgPSAnJHNl
bGVjdENvbnRyb2xsZXInLAotICAgICAgICAgICAgcGFyZW50ID0gZWxlbWVudC5wYXJlbnQoKSwK
LSAgICAgICAgICAgIHNlbGVjdEN0cmwgPSBwYXJlbnQuZGF0YShzZWxlY3RDdHJsTmFtZSkgfHwK
LSAgICAgICAgICAgICAgcGFyZW50LnBhcmVudCgpLmRhdGEoc2VsZWN0Q3RybE5hbWUpOyAvLyBp
biBjYXNlIHdlIGFyZSBpbiBvcHRncm91cAotCi0gICAgICAgIGlmIChzZWxlY3RDdHJsICYmIHNl
bGVjdEN0cmwuZGF0YWJvdW5kKSB7Ci0gICAgICAgICAgLy8gRm9yIHNvbWUgcmVhc29uIE9wZXJh
IGRlZmF1bHRzIHRvIHRydWUgYW5kIGlmIG5vdCBvdmVycmlkZGVuIHRoaXMgbWVzc2VzIHVwIHRo
ZSByZXBlYXRlci4KLSAgICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRoZSB2aWV3IHRvIGRyaXZl
IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgbW9kZWwgYW55d2F5LgotICAgICAgICAgIGVsZW1l
bnQucHJvcCgnc2VsZWN0ZWQnLCBmYWxzZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
c2VsZWN0Q3RybCA9IG51bGxTZWxlY3RDdHJsOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlu
dGVycG9sYXRlRm4pIHsKLSAgICAgICAgICBzY29wZS4kd2F0Y2goaW50ZXJwb2xhdGVGbiwgZnVu
Y3Rpb24gaW50ZXJwb2xhdGVXYXRjaEFjdGlvbihuZXdWYWwsIG9sZFZhbCkgewotICAgICAgICAg
ICAgYXR0ci4kc2V0KCd2YWx1ZScsIG5ld1ZhbCk7Ci0gICAgICAgICAgICBpZiAobmV3VmFsICE9
PSBvbGRWYWwpIHNlbGVjdEN0cmwucmVtb3ZlT3B0aW9uKG9sZFZhbCk7Ci0gICAgICAgICAgICBz
ZWxlY3RDdHJsLmFkZE9wdGlvbihuZXdWYWwpOwotICAgICAgICAgIH0pOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgIHNlbGVjdEN0cmwuYWRkT3B0aW9uKGF0dHIudmFsdWUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZWxlbWVudC5iaW5kKCckZGVzdHJveScsIGZ1bmN0aW9uKCkgewotICAg
ICAgICAgIHNlbGVjdEN0cmwucmVtb3ZlT3B0aW9uKGF0dHIudmFsdWUpOwotICAgICAgICB9KTsK
LSAgICAgIH07Ci0gICAgfQotICB9Ci19XTsKLQotdmFyIHN0eWxlRGlyZWN0aXZlID0gdmFsdWVG
bih7Ci0gIHJlc3RyaWN0OiAnRScsCi0gIHRlcm1pbmFsOiB0cnVlCi19KTsKLQotICAvL3RyeSB0
byBiaW5kIHRvIGpxdWVyeSBub3cgc28gdGhhdCBvbmUgY2FuIHdyaXRlIGFuZ3VsYXIuZWxlbWVu
dCgpLnJlYWQoKQotICAvL2J1dCB3ZSB3aWxsIHJlYmluZCBvbiBib290c3RyYXAgYWdhaW4uCi0g
IGJpbmRKUXVlcnkoKTsKLQotICBwdWJsaXNoRXh0ZXJuYWxBUEkoYW5ndWxhcik7Ci0KLSAganFM
aXRlKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKLSAgICBhbmd1bGFySW5pdChkb2N1bWVu
dCwgYm9vdHN0cmFwKTsKLSAgfSk7Ci0KLX0pKHdpbmRvdywgZG9jdW1lbnQpOwotYW5ndWxhci5l
bGVtZW50KGRvY3VtZW50KS5maW5kKCdoZWFkJykuYXBwZW5kKCc8c3R5bGUgdHlwZT0idGV4dC9j
c3MiPkBjaGFyc2V0ICJVVEYtOCI7W25nXFw6Y2xvYWtdLFtuZy1jbG9ha10sW2RhdGEtbmctY2xv
YWtdLFt4LW5nLWNsb2FrXSwubmctY2xvYWssLngtbmctY2xvYWt7ZGlzcGxheTpub25lO31uZ1xc
OmZvcm17ZGlzcGxheTpibG9jazt9PC9zdHlsZT4nKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvYm93ZXJfY29tcG9uZW50cy90
b2RvbXZjLWNvbW1vbi9iYXNlLmNzcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9ib3dlcl9jb21w
b25lbnRzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3MzdjZDljYzhjN2UwN2U0NjkxZDRlZTFiYWE3MDJlNDk5M2NhMjFhLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJq
cy9ib3dlcl9jb21wb25lbnRzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzCisrKyAvZGV2L251bGwK
QEAgLTEsNTU0ICswLDAgQEAKLWh0bWwsCi1ib2R5IHsKLSAgICBtYXJnaW46IDA7Ci0gICAgcGFk
ZGluZzogMDsKLX0KLQotYnV0dG9uIHsKLSAgICBtYXJnaW46IDA7Ci0gICAgcGFkZGluZzogMDsK
LSAgICBib3JkZXI6IDA7Ci0gICAgYmFja2dyb3VuZDogbm9uZTsKLSAgICBmb250LXNpemU6IDEw
MCU7Ci0gICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOwotICAgIGZvbnQtZmFtaWx5OiBpbmhl
cml0OwotICAgIGNvbG9yOiBpbmhlcml0OwotICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsK
LSAgICAvKi1tb3otYXBwZWFyYW5jZTogbm9uZTsqLwotICAgIC1tcy1hcHBlYXJhbmNlOiBub25l
OwotICAgIC1vLWFwcGVhcmFuY2U6IG5vbmU7Ci0gICAgYXBwZWFyYW5jZTogbm9uZTsKLX0KLQot
Ym9keSB7Ci0gICAgZm9udDogMTRweCAnSGVsdmV0aWNhIE5ldWUnLCBIZWx2ZXRpY2EsIEFyaWFs
LCBzYW5zLXNlcmlmOwotICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsKLSAgICBiYWNrZ3JvdW5kOiAj
ZWFlYWVhIHVybCgnYmcucG5nJyk7Ci0gICAgY29sb3I6ICM0ZDRkNGQ7Ci0gICAgd2lkdGg6IDU1
MHB4OwotICAgIG1hcmdpbjogMCBhdXRvOwotICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFu
dGlhbGlhc2VkOwotICAgIC1tb3otZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwotICAgIC1t
cy1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ci0gICAgLW8tZm9udC1zbW9vdGhpbmc6IGFu
dGlhbGlhc2VkOwotICAgIGZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLX0KLQotI3RvZG9h
cHAgewotICAgIGJhY2tncm91bmQ6ICNmZmY7Ci0gICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1
NSwgMjU1LCAwLjkpOwotICAgIG1hcmdpbjogMTMwcHggMCA0MHB4IDA7Ci0gICAgYm9yZGVyOiAx
cHggc29saWQgI2NjYzsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgYm9yZGVyLXRvcC1s
ZWZ0LXJhZGl1czogMnB4OwotICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAycHg7Ci0gICAg
Ym94LXNoYWRvdzogMCAycHggNnB4IDAgcmdiYSgwLCAwLCAwLCAwLjIpLAotICAgIDAgMjVweCA1
MHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE1KTsKLX0KLQotI3RvZG9hcHA6YmVmb3JlIHsKLSAgICBj
b250ZW50OiAnJzsKLSAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNmNWQ2ZDY7Ci0gICAgYm9y
ZGVyLXJpZ2h0OiAxcHggc29saWQgI2Y1ZDZkNjsKLSAgICB3aWR0aDogMnB4OwotICAgIHBvc2l0
aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDA7Ci0gICAgbGVmdDogNDBweDsKLSAgICBoZWlnaHQ6
IDEwMCU7Ci19Ci0KLSN0b2RvYXBwIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHsK
LSAgICBmb250LXN0eWxlOiBpdGFsaWM7Ci19Ci0KLSN0b2RvYXBwIGlucHV0OjotbW96LXBsYWNl
aG9sZGVyIHsKLSAgICBmb250LXN0eWxlOiBpdGFsaWM7Ci0gICAgY29sb3I6ICNhOWE5YTk7Ci19
Ci0KLSN0b2RvYXBwIGgxIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAtMTIw
cHg7Ci0gICAgd2lkdGg6IDEwMCU7Ci0gICAgZm9udC1zaXplOiA3MHB4OwotICAgIGZvbnQtd2Vp
Z2h0OiBib2xkOwotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLSAgICBjb2xvcjogI2IzYjNiMzsK
LSAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpOwotICAgIHRleHQtc2hhZG93OiAt
MXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpOwotICAgIC13ZWJraXQtdGV4dC1yZW5kZXJpbmc6
IG9wdGltaXplTGVnaWJpbGl0eTsKLSAgICAtbW96LXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxl
Z2liaWxpdHk7Ci0gICAgLW1zLXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7Ci0g
ICAgLW8tdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKLSAgICB0ZXh0LXJlbmRl
cmluZzogb3B0aW1pemVMZWdpYmlsaXR5OwotfQotCi0jaGVhZGVyIHsKLSAgICBwYWRkaW5nLXRv
cDogMTVweDsKLSAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0OwotfQotCi0jaGVhZGVyOmJlZm9y
ZSB7Ci0gICAgY29udGVudDogJyc7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDog
MDsKLSAgICByaWdodDogMDsKLSAgICBsZWZ0OiAwOwotICAgIGhlaWdodDogMTVweDsKLSAgICB6
LWluZGV4OiAyOwotICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNmM2MTVjOwotICAgIGJh
Y2tncm91bmQ6ICM4ZDdkNzc7Ci0gICAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5l
YXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbShyZ2JhKDEzMiwgMTEwLCAxMDAsIDAuOCkp
LHRvKHJnYmEoMTAxLCA4NCwgNzYsIDAuOCkpKTsKLSAgICBiYWNrZ3JvdW5kOiAtd2Via2l0LWxp
bmVhci1ncmFkaWVudCh0b3AsIHJnYmEoMTMyLCAxMTAsIDEwMCwgMC44KSwgcmdiYSgxMDEsIDg0
LCA3NiwgMC44KSk7Ci0gICAgYmFja2dyb3VuZDogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCBy
Z2JhKDEzMiwgMTEwLCAxMDAsIDAuOCksIHJnYmEoMTAxLCA4NCwgNzYsIDAuOCkpOwotICAgIGJh
Y2tncm91bmQ6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsIHJnYmEoMTMyLCAxMTAsIDEwMCwgMC44
KSwgcmdiYSgxMDEsIDg0LCA3NiwgMC44KSk7Ci0gICAgYmFja2dyb3VuZDogLW1zLWxpbmVhci1n
cmFkaWVudCh0b3AsIHJnYmEoMTMyLCAxMTAsIDEwMCwgMC44KSwgcmdiYSgxMDEsIDg0LCA3Niwg
MC44KSk7Ci0gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvcCwgcmdiYSgxMzIsIDEx
MCwgMTAwLCAwLjgpLCByZ2JhKDEwMSwgODQsIDc2LCAwLjgpKTsKLSAgICBib3JkZXItdG9wLWxl
ZnQtcmFkaXVzOiAxcHg7Ci0gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDFweDsKLX0KLQot
I25ldy10b2RvLAotLmVkaXQgewotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICBtYXJnaW46
IDA7Ci0gICAgd2lkdGg6IDEwMCU7Ci0gICAgZm9udC1zaXplOiAyNHB4OwotICAgIGZvbnQtZmFt
aWx5OiBpbmhlcml0OwotICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsKLSAgICBib3JkZXI6IDA7Ci0g
ICAgb3V0bGluZTogbm9uZTsKLSAgICBjb2xvcjogaW5oZXJpdDsKLSAgICBwYWRkaW5nOiA2cHg7
Ci0gICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTsKLSAgICBib3gtc2hhZG93OiBpbnNldCAwIC0x
cHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjIpOwotICAgIC13ZWJraXQtYm94LXNpemluZzogYm9y
ZGVyLWJveDsKLSAgICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7Ci0gICAgLW1zLWJveC1z
aXppbmc6IGJvcmRlci1ib3g7Ci0gICAgLW8tYm94LXNpemluZzogYm9yZGVyLWJveDsKLSAgICBi
b3gtc2l6aW5nOiBib3JkZXItYm94OwotICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlh
bGlhc2VkOwotICAgIC1tb3otZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwotICAgIC1tcy1m
b250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ci0gICAgLW8tZm9udC1zbW9vdGhpbmc6IGFudGlh
bGlhc2VkOwotICAgIGZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLX0KLQotI25ldy10b2Rv
IHsKLSAgICBwYWRkaW5nOiAxNnB4IDE2cHggMTZweCA2MHB4OwotICAgIGJvcmRlcjogbm9uZTsK
LSAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDIpOwotICAgIHotaW5kZXg6IDI7Ci0g
ICAgYm94LXNoYWRvdzogbm9uZTsKLX0KLQotI21haW4gewotICAgIHBvc2l0aW9uOiByZWxhdGl2
ZTsKLSAgICB6LWluZGV4OiAyOwotICAgIGJvcmRlci10b3A6IDFweCBkb3R0ZWQgI2FkYWRhZDsK
LX0KLQotbGFiZWxbZm9yPSd0b2dnbGUtYWxsJ10gewotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0K
LSN0b2dnbGUtYWxsIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAtNDJweDsK
LSAgICBsZWZ0OiAtNHB4OwotICAgIHdpZHRoOiA0MHB4OwotICAgIHRleHQtYWxpZ246IGNlbnRl
cjsKLSAgICBib3JkZXI6IG5vbmU7IC8qIE1vYmlsZSBTYWZhcmkgKi8KLX0KLQotI3RvZ2dsZS1h
bGw6YmVmb3JlIHsKLSAgICBjb250ZW50OiAnwrsnOwotICAgIGZvbnQtc2l6ZTogMjhweDsKLSAg
ICBjb2xvcjogI2Q5ZDlkOTsKLSAgICBwYWRkaW5nOiAwIDI1cHggN3B4OwotfQotCi0jdG9nZ2xl
LWFsbDpjaGVja2VkOmJlZm9yZSB7Ci0gICAgY29sb3I6ICM3MzczNzM7Ci19Ci0KLSN0b2RvLWxp
c3QgewotICAgIG1hcmdpbjogMDsKLSAgICBwYWRkaW5nOiAwOwotICAgIGxpc3Qtc3R5bGU6IG5v
bmU7Ci19Ci0KLSN0b2RvLWxpc3QgbGkgewotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICBm
b250LXNpemU6IDI0cHg7Ci0gICAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZCAjY2NjOwotfQot
Ci0jdG9kby1saXN0IGxpOmxhc3QtY2hpbGQgewotICAgIGJvcmRlci1ib3R0b206IG5vbmU7Ci19
Ci0KLSN0b2RvLWxpc3QgbGkuZWRpdGluZyB7Ci0gICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKLSAg
ICBwYWRkaW5nOiAwOwotfQotCi0jdG9kby1saXN0IGxpLmVkaXRpbmcgLmVkaXQgewotICAgIGRp
c3BsYXk6IGJsb2NrOwotICAgIHdpZHRoOiA1MDZweDsKLSAgICBwYWRkaW5nOiAxM3B4IDE3cHgg
MTJweCAxN3B4OwotICAgIG1hcmdpbjogMCAwIDAgNDNweDsKLX0KLQotI3RvZG8tbGlzdCBsaS5l
ZGl0aW5nIC52aWV3IHsKLSAgICBkaXNwbGF5OiBub25lOwotfQotCi0jdG9kby1saXN0IGxpIC50
b2dnbGUgewotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLSAgICB3aWR0aDogNDBweDsKLSAgICAv
KiBhdXRvLCBzaW5jZSBub24tV2ViS2l0IGJyb3dzZXJzIGRvZXNuJ3Qgc3VwcG9ydCBpbnB1dCBz
dHlsaW5nICovCi0gICAgaGVpZ2h0OiBhdXRvOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAg
ICB0b3A6IDA7Ci0gICAgYm90dG9tOiAwOwotICAgIG1hcmdpbjogYXV0byAwOwotICAgIGJvcmRl
cjogbm9uZTsgLyogTW9iaWxlIFNhZmFyaSAqLwotICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9u
ZTsKLSAgICAvKi1tb3otYXBwZWFyYW5jZTogbm9uZTsqLwotICAgIC1tcy1hcHBlYXJhbmNlOiBu
b25lOwotICAgIC1vLWFwcGVhcmFuY2U6IG5vbmU7Ci0gICAgYXBwZWFyYW5jZTogbm9uZTsKLX0K
LQotI3RvZG8tbGlzdCBsaSAudG9nZ2xlOmFmdGVyIHsKLSAgICBjb250ZW50OiAn4pyUJzsKLSAg
ICBsaW5lLWhlaWdodDogNDNweDsgLyogNDAgKyBhIGNvdXBsZSBvZiBwaXhlbHMgdmlzdWFsIGFk
anVzdG1lbnQgKi8KLSAgICBmb250LXNpemU6IDIwcHg7Ci0gICAgY29sb3I6ICNkOWQ5ZDk7Ci0g
ICAgdGV4dC1zaGFkb3c6IDAgLTFweCAwICNiZmJmYmY7Ci19Ci0KLSN0b2RvLWxpc3QgbGkgLnRv
Z2dsZTpjaGVja2VkOmFmdGVyIHsKLSAgICBjb2xvcjogIzg1YWRhNzsKLSAgICB0ZXh0LXNoYWRv
dzogMCAxcHggMCAjNjY5OTkxOwotICAgIGJvdHRvbTogMXB4OwotICAgIHBvc2l0aW9uOiByZWxh
dGl2ZTsKLX0KLQotI3RvZG8tbGlzdCBsaSBsYWJlbCB7Ci0gICAgd29yZC1icmVhazogYnJlYWst
d29yZDsKLSAgICBwYWRkaW5nOiAxNXB4OwotICAgIG1hcmdpbi1sZWZ0OiA0NXB4OwotICAgIGRp
c3BsYXk6IGJsb2NrOwotICAgIGxpbmUtaGVpZ2h0OiAxLjI7Ci0gICAgLXdlYmtpdC10cmFuc2l0
aW9uOiBjb2xvciAwLjRzOwotICAgIC1tb3otdHJhbnNpdGlvbjogY29sb3IgMC40czsKLSAgICAt
bXMtdHJhbnNpdGlvbjogY29sb3IgMC40czsKLSAgICAtby10cmFuc2l0aW9uOiBjb2xvciAwLjRz
OwotICAgIHRyYW5zaXRpb246IGNvbG9yIDAuNHM7Ci19Ci0KLSN0b2RvLWxpc3QgbGkuY29tcGxl
dGVkIGxhYmVsIHsKLSAgICBjb2xvcjogI2E5YTlhOTsKLSAgICB0ZXh0LWRlY29yYXRpb246IGxp
bmUtdGhyb3VnaDsKLX0KLQotI3RvZG8tbGlzdCBsaSAuZGVzdHJveSB7Ci0gICAgZGlzcGxheTog
bm9uZTsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwOwotICAgIHJpZ2h0OiAx
MHB4OwotICAgIGJvdHRvbTogMDsKLSAgICB3aWR0aDogNDBweDsKLSAgICBoZWlnaHQ6IDQwcHg7
Ci0gICAgbWFyZ2luOiBhdXRvIDA7Ci0gICAgZm9udC1zaXplOiAyMnB4OwotICAgIGNvbG9yOiAj
YTg4YThhOwotICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDAuMnM7Ci0gICAgLW1vei10cmFu
c2l0aW9uOiBhbGwgMC4yczsKLSAgICAtbXMtdHJhbnNpdGlvbjogYWxsIDAuMnM7Ci0gICAgLW8t
dHJhbnNpdGlvbjogYWxsIDAuMnM7Ci0gICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7Ci19Ci0KLSN0
b2RvLWxpc3QgbGkgLmRlc3Ryb3k6aG92ZXIgewotICAgIHRleHQtc2hhZG93OiAwIDAgMXB4ICMw
MDAsCi0gICAgIDAgMCAxMHB4IHJnYmEoMTk5LCAxMDcsIDEwNywgMC44KTsKLSAgICAtd2Via2l0
LXRyYW5zZm9ybTogc2NhbGUoMS4zKTsKLSAgICAtbW96LXRyYW5zZm9ybTogc2NhbGUoMS4zKTsK
LSAgICAtbXMtdHJhbnNmb3JtOiBzY2FsZSgxLjMpOwotICAgIC1vLXRyYW5zZm9ybTogc2NhbGUo
MS4zKTsKLSAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMyk7Ci19Ci0KLSN0b2RvLWxpc3QgbGkgLmRl
c3Ryb3k6YWZ0ZXIgewotICAgIGNvbnRlbnQ6ICfinJYnOwotfQotCi0jdG9kby1saXN0IGxpOmhv
dmVyIC5kZXN0cm95IHsKLSAgICBkaXNwbGF5OiBibG9jazsKLX0KLQotI3RvZG8tbGlzdCBsaSAu
ZWRpdCB7Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KLQotI3RvZG8tbGlzdCBsaS5lZGl0aW5nOmxh
c3QtY2hpbGQgewotICAgIG1hcmdpbi1ib3R0b206IC0xcHg7Ci19Ci0KLSNmb290ZXIgewotICAg
IGNvbG9yOiAjNzc3OwotICAgIHBhZGRpbmc6IDAgMTVweDsKLSAgICBwb3NpdGlvbjogYWJzb2x1
dGU7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgYm90dG9tOiAtMzFweDsKLSAgICBsZWZ0OiAwOwotICAg
IGhlaWdodDogMjBweDsKLSAgICB6LWluZGV4OiAxOwotICAgIHRleHQtYWxpZ246IGNlbnRlcjsK
LX0KLQotI2Zvb3RlcjpiZWZvcmUgewotICAgIGNvbnRlbnQ6ICcnOwotICAgIHBvc2l0aW9uOiBh
YnNvbHV0ZTsKLSAgICByaWdodDogMDsKLSAgICBib3R0b206IDMxcHg7Ci0gICAgbGVmdDogMDsK
LSAgICBoZWlnaHQ6IDUwcHg7Ci0gICAgei1pbmRleDogLTE7Ci0gICAgYm94LXNoYWRvdzogMCAx
cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4zKSwKLSAgICAwIDZweCAwIC0zcHggcmdiYSgyNTUsIDI1
NSwgMjU1LCAwLjgpLAotICAgIDAgN3B4IDFweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4zKSwKLSAg
ICAwIDQzcHggMCAtNnB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KSwKLSAgICAwIDQ0cHggMnB4
IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpOwotfQotCi0jdG9kby1jb3VudCB7Ci0gICAgZmxvYXQ6
IGxlZnQ7Ci0gICAgdGV4dC1hbGlnbjogbGVmdDsKLX0KLQotI2ZpbHRlcnMgewotICAgIG1hcmdp
bjogMDsKLSAgICBwYWRkaW5nOiAwOwotICAgIGxpc3Qtc3R5bGU6IG5vbmU7Ci0gICAgcG9zaXRp
b246IGFic29sdXRlOwotICAgIHJpZ2h0OiAwOwotICAgIGxlZnQ6IDA7Ci19Ci0KLSNmaWx0ZXJz
IGxpIHsKLSAgICBkaXNwbGF5OiBpbmxpbmU7Ci19Ci0KLSNmaWx0ZXJzIGxpIGEgewotICAgIGNv
bG9yOiAjODM3NTZmOwotICAgIG1hcmdpbjogMnB4OwotICAgIHRleHQtZGVjb3JhdGlvbjogbm9u
ZTsKLX0KLQotI2ZpbHRlcnMgbGkgYS5zZWxlY3RlZCB7Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7
Ci19Ci0KLSNjbGVhci1jb21wbGV0ZWQgewotICAgIGZsb2F0OiByaWdodDsKLSAgICBwb3NpdGlv
bjogcmVsYXRpdmU7Ci0gICAgbGluZS1oZWlnaHQ6IDIwcHg7Ci0gICAgdGV4dC1kZWNvcmF0aW9u
OiBub25lOwotICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4xKTsKLSAgICBmb250LXNp
emU6IDExcHg7Ci0gICAgcGFkZGluZzogMCAxMHB4OwotICAgIGJvcmRlci1yYWRpdXM6IDNweDsK
LSAgICBib3gtc2hhZG93OiAwIC0xcHggMCAwIHJnYmEoMCwgMCwgMCwgMC4yKTsKLX0KLQotI2Ns
ZWFyLWNvbXBsZXRlZDpob3ZlciB7Ci0gICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjE1
KTsKLSAgICBib3gtc2hhZG93OiAwIC0xcHggMCAwIHJnYmEoMCwgMCwgMCwgMC4zKTsKLX0KLQot
I2luZm8gewotICAgIG1hcmdpbjogNjVweCBhdXRvIDA7Ci0gICAgY29sb3I6ICNhNmE2YTY7Ci0g
ICAgZm9udC1zaXplOiAxMnB4OwotICAgIHRleHQtc2hhZG93OiAwIDFweCAwIHJnYmEoMjU1LCAy
NTUsIDI1NSwgMC43KTsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci19Ci0KLSNpbmZvIGEgewot
ICAgIGNvbG9yOiBpbmhlcml0OwotfQotCi0vKgotICAgIEhhY2sgdG8gcmVtb3ZlIGJhY2tncm91
bmQgZnJvbSBNb2JpbGUgU2FmYXJpLgotICAgIENhbid0IHVzZSBpdCBnbG9iYWxseSBzaW5jZSBp
dCBkZXN0cm95cyBjaGVja2JveGVzIGluIEZpcmVmb3ggYW5kIE9wZXJhCi0qLwotQG1lZGlhIHNj
cmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzowKSB7Ci0gICAgI3RvZ2ds
ZS1hbGwsCi0gICAgI3RvZG8tbGlzdCBsaSAudG9nZ2xlIHsKLSAgICBiYWNrZ3JvdW5kOiBub25l
OwotICAgIH0KLQotICAgICN0b2RvLWxpc3QgbGkgLnRvZ2dsZSB7Ci0gICAgaGVpZ2h0OiA0MHB4
OwotICAgIH0KLQotICAgICN0b2dnbGUtYWxsIHsKLSAgICB0b3A6IC01NnB4OwotICAgIGxlZnQ6
IC0xNXB4OwotICAgIHdpZHRoOiA2NXB4OwotICAgIGhlaWdodDogNDFweDsKLSAgICAtd2Via2l0
LXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKLSAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7
Ci0gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwotICAgIGFwcGVhcmFuY2U6IG5vbmU7Ci0g
ICAgfQotfQotCi0uaGlkZGVuewotICAgIGRpc3BsYXk6bm9uZTsKLX0KLQotaHIgewotICAgIG1h
cmdpbjogMjBweCAwOwotICAgIGJvcmRlcjogMDsKLSAgICBib3JkZXItdG9wOiAxcHggZGFzaGVk
ICNDNUM1QzU7Ci0gICAgYm9yZGVyLWJvdHRvbTogMXB4IGRhc2hlZCAjRjdGN0Y3OwotfQotCi0u
bGVhcm4gYSB7Ci0gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKLSAgICB0ZXh0LWRlY29yYXRpb246
IG5vbmU7Ci0gICAgY29sb3I6ICNiODNmNDU7Ci19Ci0KLS5sZWFybiBhOmhvdmVyIHsKLSAgICB0
ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKLSAgICBjb2xvcjogIzc4N2U3ZTsKLX0KLQotLmxl
YXJuIGgzLAotLmxlYXJuIGg0LAotLmxlYXJuIGg1IHsKLSAgICBtYXJnaW46IDEwcHggMDsKLSAg
ICBmb250LXdlaWdodDogNTAwOwotICAgIGxpbmUtaGVpZ2h0OiAxLjI7Ci0gICAgY29sb3I6ICMw
MDA7Ci19Ci0KLS5sZWFybiBoMyB7Ci0gICAgZm9udC1zaXplOiAyNHB4OwotfQotCi0ubGVhcm4g
aDQgewotICAgIGZvbnQtc2l6ZTogMThweDsKLX0KLQotLmxlYXJuIGg1IHsKLSAgICBtYXJnaW4t
Ym90dG9tOiAwOwotICAgIGZvbnQtc2l6ZTogMTRweDsKLX0KLQotLmxlYXJuIHVsIHsKLSAgICBw
YWRkaW5nOiAwOwotICAgIG1hcmdpbjogMCAwIDMwcHggMjVweDsKLX0KLQotLmxlYXJuIGxpIHsK
LSAgICBsaW5lLWhlaWdodDogMjBweDsKLX0KLQotLmxlYXJuIHAgewotICAgIGZvbnQtc2l6ZTog
MTVweDsKLSAgICBmb250LXdlaWdodDogMzAwOwotICAgIGxpbmUtaGVpZ2h0OiAxLjM7Ci0gICAg
bWFyZ2luLXRvcDogMDsKLSAgICBtYXJnaW4tYm90dG9tOiAwOwotfQotCi0ucXVvdGUgewotICAg
IGJvcmRlcjogbm9uZTsKLSAgICBtYXJnaW46IDIwcHggMCA2MHB4IDA7Ci19Ci0KLS5xdW90ZSBw
IHsKLSAgICBmb250LXN0eWxlOiBpdGFsaWM7Ci19Ci0KLS5xdW90ZSBwOmJlZm9yZSB7Ci0gICAg
Y29udGVudDogJ+KAnCc7Ci0gICAgZm9udC1zaXplOiA1MHB4OwotICAgIG9wYWNpdHk6IC4xNTsK
LSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAtMjBweDsKLSAgICBsZWZ0OiAzcHg7
Ci19Ci0KLS5xdW90ZSBwOmFmdGVyIHsKLSAgICBjb250ZW50OiAn4oCdJzsKLSAgICBmb250LXNp
emU6IDUwcHg7Ci0gICAgb3BhY2l0eTogLjE1OwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAg
ICBib3R0b206IC00MnB4OwotICAgIHJpZ2h0OiAzcHg7Ci19Ci0KLS5xdW90ZSBmb290ZXIgewot
ICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICBib3R0b206IC00MHB4OwotICAgIHJpZ2h0OiAw
OwotfQotCi0ucXVvdGUgZm9vdGVyIGltZyB7Ci0gICAgYm9yZGVyLXJhZGl1czogM3B4OwotfQot
Ci0ucXVvdGUgZm9vdGVyIGEgewotICAgIG1hcmdpbi1sZWZ0OiA1cHg7Ci0gICAgdmVydGljYWwt
YWxpZ246IG1pZGRsZTsKLX0KLQotLnNwZWVjaC1idWJibGUgewotICAgIHBvc2l0aW9uOiByZWxh
dGl2ZTsKLSAgICBwYWRkaW5nOiAxMHB4OwotICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwg
LjA0KTsKLSAgICBib3JkZXItcmFkaXVzOiA1cHg7Ci19Ci0KLS5zcGVlY2gtYnViYmxlOmFmdGVy
IHsKLSAgICBjb250ZW50OiAnJzsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAx
MDAlOwotICAgIHJpZ2h0OiAzMHB4OwotICAgIGJvcmRlcjogMTNweCBzb2xpZCB0cmFuc3BhcmVu
dDsKLSAgICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDAsIDAsIDAsIC4wNCk7Ci19Ci0KLS8qKmJv
ZHkqLy5sZWFybi1iYXIgPiAubGVhcm4gewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB3
aWR0aDogMjcycHg7Ci0gICAgdG9wOiA4cHg7Ci0gICAgbGVmdDogLTMwMHB4OwotICAgIHBhZGRp
bmc6IDEwcHg7Ci0gICAgYm9yZGVyLXJhZGl1czogNXB4OwotICAgIGJhY2tncm91bmQtY29sb3I6
IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjYpOwotICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IGxlZnQ7
Ci0gICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogNTAwbXM7Ci19Ci0KLUBtZWRpYSAobWluLXdpZHRo
OiA4OTlweCkgewotICAgIC8qKmJvZHkqLy5sZWFybi1iYXIgewotICAgIHdpZHRoOiBhdXRvOwot
ICAgIG1hcmdpbjogMCAwIDAgMzAwcHg7Ci0gICAgfQotICAgIC8qKmJvZHkqLy5sZWFybi1iYXIg
PiAubGVhcm4gewotICAgIGxlZnQ6IDhweDsKLSAgICB9Ci0gICAgLyoqYm9keSovLmxlYXJuLWJh
ciAjdG9kb2FwcCB7Ci0gICAgd2lkdGg6IDU1MHB4OwotICAgIG1hcmdpbjogMTMwcHggYXV0byA0
MHB4IGF1dG87Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2Jv
d2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmFzZS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3Vs
YXJqcy9ib3dlcl9jb21wb25lbnRzL3RvZG9tdmMtY29tbW9uL2Jhc2UuanMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGY5YmY0MjQwZmFkOWE5YzExOTRjODE1ODZkYzI5MTZiZWMxY2Nh
NzguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvYW5ndWxhcmpzL2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmFzZS5qcwor
KysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi0oZnVuY3Rpb24gKCkgewotICAgICd1c2Ug
c3RyaWN0JzsKLQotICAgIC8vIFVuZGVyc2NvcmUncyBUZW1wbGF0ZSBNb2R1bGUKLSAgICAvLyBD
b3VydGVzeSBvZiB1bmRlcnNjb3JlanMub3JnCi0gICAgdmFyIF8gPSAoZnVuY3Rpb24gKF8pIHsK
LSAgICBfLmRlZmF1bHRzID0gZnVuY3Rpb24gKG9iamVjdCkgewotICAgIGlmICghb2JqZWN0KSB7
Ci0gICAgcmV0dXJuIG9iamVjdDsKLSAgICB9Ci0gICAgZm9yICh2YXIgYXJnc0luZGV4ID0gMSwg
YXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGFyZ3NJbmRleCA8IGFyZ3NMZW5ndGg7IGFy
Z3NJbmRleCsrKSB7Ci0gICAgdmFyIGl0ZXJhYmxlID0gYXJndW1lbnRzW2FyZ3NJbmRleF07Ci0g
ICAgaWYgKGl0ZXJhYmxlKSB7Ci0gICAgZm9yICh2YXIga2V5IGluIGl0ZXJhYmxlKSB7Ci0gICAg
aWYgKG9iamVjdFtrZXldID09IG51bGwpIHsKLSAgICBvYmplY3Rba2V5XSA9IGl0ZXJhYmxlW2tl
eV07Ci0gICAgfQotICAgIH0KLSAgICB9Ci0gICAgfQotICAgIHJldHVybiBvYmplY3Q7Ci0gICAg
fQotCi0gICAgLy8gQnkgZGVmYXVsdCwgVW5kZXJzY29yZSB1c2VzIEVSQi1zdHlsZSB0ZW1wbGF0
ZSBkZWxpbWl0ZXJzLCBjaGFuZ2UgdGhlCi0gICAgLy8gZm9sbG93aW5nIHRlbXBsYXRlIHNldHRp
bmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLgotICAgIF8udGVtcGxhdGVTZXR0aW5n
cyA9IHsKLSAgICBldmFsdWF0ZSAgICA6IC88JShbXHNcU10rPyklPi9nLAotICAgIGludGVycG9s
YXRlIDogLzwlPShbXHNcU10rPyklPi9nLAotICAgIGVzY2FwZSAgICAgIDogLzwlLShbXHNcU10r
PyklPi9nCi0gICAgfTsKLQotICAgIC8vIFdoZW4gY3VzdG9taXppbmcgYHRlbXBsYXRlU2V0dGlu
Z3NgLCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBkZWZpbmUgYW4KLSAgICAvLyBpbnRlcnBvbGF0aW9u
LCBldmFsdWF0aW9uIG9yIGVzY2FwaW5nIHJlZ2V4LCB3ZSBuZWVkIG9uZSB0aGF0IGlzCi0gICAg
Ly8gZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2guCi0gICAgdmFyIG5vTWF0Y2ggPSAvKC4pXi87Ci0K
LSAgICAvLyBDZXJ0YWluIGNoYXJhY3RlcnMgbmVlZCB0byBiZSBlc2NhcGVkIHNvIHRoYXQgdGhl
eSBjYW4gYmUgcHV0IGludG8gYQotICAgIC8vIHN0cmluZyBsaXRlcmFsLgotICAgIHZhciBlc2Nh
cGVzID0gewotICAgICInIjogICAgICAiJyIsCi0gICAgJ1xcJzogICAgICdcXCcsCi0gICAgJ1xy
JzogICAgICdyJywKLSAgICAnXG4nOiAgICAgJ24nLAotICAgICdcdCc6ICAgICAndCcsCi0gICAg
J1x1MjAyOCc6ICd1MjAyOCcsCi0gICAgJ1x1MjAyOSc6ICd1MjAyOScKLSAgICB9OwotCi0gICAg
dmFyIGVzY2FwZXIgPSAvXFx8J3xccnxcbnxcdHxcdTIwMjh8XHUyMDI5L2c7Ci0KLSAgICAvLyBK
YXZhU2NyaXB0IG1pY3JvLXRlbXBsYXRpbmcsIHNpbWlsYXIgdG8gSm9obiBSZXNpZydzIGltcGxl
bWVudGF0aW9uLgotICAgIC8vIFVuZGVyc2NvcmUgdGVtcGxhdGluZyBoYW5kbGVzIGFyYml0cmFy
eSBkZWxpbWl0ZXJzLCBwcmVzZXJ2ZXMgd2hpdGVzcGFjZSwKLSAgICAvLyBhbmQgY29ycmVjdGx5
IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS4KLSAgICBfLnRlbXBsYXRl
ID0gZnVuY3Rpb24odGV4dCwgZGF0YSwgc2V0dGluZ3MpIHsKLSAgICB2YXIgcmVuZGVyOwotICAg
IHNldHRpbmdzID0gXy5kZWZhdWx0cyh7fSwgc2V0dGluZ3MsIF8udGVtcGxhdGVTZXR0aW5ncyk7
Ci0KLSAgICAvLyBDb21iaW5lIGRlbGltaXRlcnMgaW50byBvbmUgcmVndWxhciBleHByZXNzaW9u
IHZpYSBhbHRlcm5hdGlvbi4KLSAgICB2YXIgbWF0Y2hlciA9IG5ldyBSZWdFeHAoWwotICAgIChz
ZXR0aW5ncy5lc2NhcGUgfHwgbm9NYXRjaCkuc291cmNlLAotICAgIChzZXR0aW5ncy5pbnRlcnBv
bGF0ZSB8fCBub01hdGNoKS5zb3VyY2UsCi0gICAgKHNldHRpbmdzLmV2YWx1YXRlIHx8IG5vTWF0
Y2gpLnNvdXJjZQotICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTsKLQotICAgIC8vIENvbXBp
bGUgdGhlIHRlbXBsYXRlIHNvdXJjZSwgZXNjYXBpbmcgc3RyaW5nIGxpdGVyYWxzIGFwcHJvcHJp
YXRlbHkuCi0gICAgdmFyIGluZGV4ID0gMDsKLSAgICB2YXIgc291cmNlID0gIl9fcCs9JyI7Ci0g
ICAgdGV4dC5yZXBsYWNlKG1hdGNoZXIsIGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGUsIGludGVycG9s
YXRlLCBldmFsdWF0ZSwgb2Zmc2V0KSB7Ci0gICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgs
IG9mZnNldCkKLSAgICAucmVwbGFjZShlc2NhcGVyLCBmdW5jdGlvbihtYXRjaCkgeyByZXR1cm4g
J1xcJyArIGVzY2FwZXNbbWF0Y2hdOyB9KTsKLQotICAgIGlmIChlc2NhcGUpIHsKLSAgICBzb3Vy
Y2UgKz0gIicrXG4oKF9fdD0oIiArIGVzY2FwZSArICIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3Qp
KStcbiciOwotICAgIH0KLSAgICBpZiAoaW50ZXJwb2xhdGUpIHsKLSAgICBzb3VyY2UgKz0gIicr
XG4oKF9fdD0oIiArIGludGVycG9sYXRlICsgIikpPT1udWxsPycnOl9fdCkrXG4nIjsKLSAgICB9
Ci0gICAgaWYgKGV2YWx1YXRlKSB7Ci0gICAgc291cmNlICs9ICInO1xuIiArIGV2YWx1YXRlICsg
IlxuX19wKz0nIjsKLSAgICB9Ci0gICAgaW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7Ci0g
ICAgcmV0dXJuIG1hdGNoOwotICAgIH0pOwotICAgIHNvdXJjZSArPSAiJztcbiI7Ci0KLSAgICAv
LyBJZiBhIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxv
Y2FsIHNjb3BlLgotICAgIGlmICghc2V0dGluZ3MudmFyaWFibGUpIHNvdXJjZSA9ICd3aXRoKG9i
anx8e30pe1xuJyArIHNvdXJjZSArICd9XG4nOwotCi0gICAgc291cmNlID0gInZhciBfX3QsX19w
PScnLF9faj1BcnJheS5wcm90b3R5cGUuam9pbiwiICsKLSAgICAicHJpbnQ9ZnVuY3Rpb24oKXtf
X3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcbiIgKwotICAgIHNvdXJjZSArICJyZXR1cm4g
X19wO1xuIjsKLQotICAgIHRyeSB7Ci0gICAgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdz
LnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7Ci0gICAgfSBjYXRjaCAoZSkgewotICAg
IGUuc291cmNlID0gc291cmNlOwotICAgIHRocm93IGU7Ci0gICAgfQotCi0gICAgaWYgKGRhdGEp
IHJldHVybiByZW5kZXIoZGF0YSwgXyk7Ci0gICAgdmFyIHRlbXBsYXRlID0gZnVuY3Rpb24oZGF0
YSkgewotICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRhLCBfKTsKLSAgICB9OwotCi0g
ICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgZnVuY3Rpb24gc291cmNlIGFzIGEgY29udmVuaWVu
Y2UgZm9yIHByZWNvbXBpbGF0aW9uLgotICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbign
ICsgKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonKSArICcpe1xuJyArIHNvdXJjZSArICd9JzsK
LQotICAgIHJldHVybiB0ZW1wbGF0ZTsKLSAgICB9OwotCi0gICAgcmV0dXJuIF87Ci0gICAgfSko
e30pOwotCi0gICAgaWYgKGxvY2F0aW9uLmhvc3RuYW1lID09PSAndG9kb212Yy5jb20nKSB7Ci0g
ICAgd2luZG93Ll9nYXEgPSBbWydfc2V0QWNjb3VudCcsJ1VBLTMxMDgxMDYyLTEnXSxbJ190cmFj
a1BhZ2V2aWV3J11dOyhmdW5jdGlvbihkLHQpe3ZhciBnPWQuY3JlYXRlRWxlbWVudCh0KSxzPWQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUodClbMF07Zy5zcmM9Jy8vd3d3Lmdvb2dsZS1hbmFseXRpY3Mu
Y29tL2dhLmpzJztzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGcscyl9KGRvY3VtZW50LCdzY3Jp
cHQnKSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcmVkaXJlY3QoKSB7Ci0gICAgaWYgKGxvY2F0
aW9uLmhvc3RuYW1lID09PSAndGFzdGVqcy5naXRodWIuaW8nKSB7Ci0gICAgbG9jYXRpb24uaHJl
ZiA9IGxvY2F0aW9uLmhyZWYucmVwbGFjZSgndGFzdGVqcy5naXRodWIuaW8vdG9kb212YycsICd0
b2RvbXZjLmNvbScpOwotICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBmaW5kUm9vdCgpIHsK
LSAgICB2YXIgYmFzZTsKLQotICAgIFsvbGFicy8sIC9cdyotZXhhbXBsZXMvXS5mb3JFYWNoKGZ1
bmN0aW9uIChocmVmKSB7Ci0gICAgdmFyIG1hdGNoID0gbG9jYXRpb24uaHJlZi5tYXRjaChocmVm
KTsKLQotICAgIGlmICghYmFzZSAmJiBtYXRjaCkgewotICAgIGJhc2UgPSBsb2NhdGlvbi5ocmVm
LmluZGV4T2YobWF0Y2gpOwotICAgIH0KLSAgICB9KTsKLQotICAgIHJldHVybiBsb2NhdGlvbi5o
cmVmLnN1YnN0cigwLCBiYXNlKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBnZXRGaWxlKGZpbGUs
IGNhbGxiYWNrKSB7Ci0gICAgaWYgKCFsb2NhdGlvbi5ob3N0KSB7Ci0gICAgcmV0dXJuIGNvbnNv
bGUuaW5mbygnTWlzcyB0aGUgaW5mbyBiYXI/IFJ1biBUb2RvTVZDIGZyb20gYSBzZXJ2ZXIgdG8g
YXZvaWQgYSBjcm9zcy1vcmlnaW4gZXJyb3IuJyk7Ci0gICAgfQotCi0gICAgdmFyIHhociA9IG5l
dyBYTUxIdHRwUmVxdWVzdCgpOwotCi0gICAgeGhyLm9wZW4oJ0dFVCcsIGZpbmRSb290KCkgKyBm
aWxlLCB0cnVlKTsKLSAgICB4aHIuc2VuZCgpOwotCi0gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9u
ICgpIHsKLSAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYmIGNhbGxiYWNrKSB7Ci0gICAgY2Fs
bGJhY2soeGhyLnJlc3BvbnNlVGV4dCk7Ci0gICAgfQotICAgIH07Ci0gICAgfQotCi0gICAgZnVu
Y3Rpb24gTGVhcm4obGVhcm5KU09OLCBjb25maWcpIHsKLSAgICBpZiAoISh0aGlzIGluc3RhbmNl
b2YgTGVhcm4pKSB7Ci0gICAgcmV0dXJuIG5ldyBMZWFybihsZWFybkpTT04sIGNvbmZpZyk7Ci0g
ICAgfQotCi0gICAgdmFyIHRlbXBsYXRlLCBmcmFtZXdvcms7Ci0KLSAgICBpZiAodHlwZW9mIGxl
YXJuSlNPTiAhPT0gJ29iamVjdCcpIHsKLSAgICB0cnkgewotICAgIGxlYXJuSlNPTiA9IEpTT04u
cGFyc2UobGVhcm5KU09OKTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgcmV0dXJuOwotICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAoY29uZmlnKSB7Ci0gICAgdGVtcGxhdGUgPSBjb25maWcudGVtcGxh
dGU7Ci0gICAgZnJhbWV3b3JrID0gY29uZmlnLmZyYW1ld29yazsKLSAgICB9Ci0KLSAgICBpZiAo
IXRlbXBsYXRlICYmIGxlYXJuSlNPTi50ZW1wbGF0ZXMpIHsKLSAgICB0ZW1wbGF0ZSA9IGxlYXJu
SlNPTi50ZW1wbGF0ZXMudG9kb212YzsKLSAgICB9Ci0KLSAgICBpZiAoIWZyYW1ld29yayAmJiBk
b2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1mcmFtZXdvcmtdJykpIHsKLSAgICBmcmFtZXdv
cmsgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1mcmFtZXdvcmtdJykuZ2V0QXR0cmli
dXRlKCdkYXRhLWZyYW1ld29yaycpOwotICAgIH0KLQotCi0gICAgaWYgKHRlbXBsYXRlICYmIGxl
YXJuSlNPTltmcmFtZXdvcmtdKSB7Ci0gICAgdGhpcy5mcmFtZXdvcmtKU09OID0gbGVhcm5KU09O
W2ZyYW1ld29ya107Ci0gICAgdGhpcy50ZW1wbGF0ZSA9IHRlbXBsYXRlOwotCi0gICAgdGhpcy5h
cHBlbmQoKTsKLSAgICB9Ci0gICAgfQotCi0gICAgTGVhcm4ucHJvdG90eXBlLmFwcGVuZCA9IGZ1
bmN0aW9uICgpIHsKLSAgICB2YXIgYXNpZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhc2lk
ZScpOwotICAgIGFzaWRlLmlubmVySFRNTCA9IF8udGVtcGxhdGUodGhpcy50ZW1wbGF0ZSwgdGhp
cy5mcmFtZXdvcmtKU09OKTsKLSAgICBhc2lkZS5jbGFzc05hbWUgPSAnbGVhcm4nOwotCi0gICAg
Ly8gTG9jYWxpemUgZGVtbyBsaW5rcwotICAgIHZhciBkZW1vTGlua3MgPSBhc2lkZS5xdWVyeVNl
bGVjdG9yQWxsKCcuZGVtby1saW5rJyk7Ci0gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2Fs
bChkZW1vTGlua3MsIGZ1bmN0aW9uIChkZW1vTGluaykgewotICAgIGRlbW9MaW5rLnNldEF0dHJp
YnV0ZSgnaHJlZicsIGZpbmRSb290KCkgKyBkZW1vTGluay5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSk7
Ci0gICAgfSk7Ci0KLSAgICBkb2N1bWVudC5ib2R5LmNsYXNzTmFtZSA9IChkb2N1bWVudC5ib2R5
LmNsYXNzTmFtZSArICcgbGVhcm4tYmFyJykudHJpbSgpOwotICAgIGRvY3VtZW50LmJvZHkuaW5z
ZXJ0QWRqYWNlbnRIVE1MKCdhZnRlckJlZ2luJywgYXNpZGUub3V0ZXJIVE1MKTsKLSAgICB9Owot
Ci0gICAgcmVkaXJlY3QoKTsKLSAgICBnZXRGaWxlKCdsZWFybi5qc29uJywgTGVhcm4pOwotfSko
KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9ib3dlcl9jb21wb25lbnRzL3Rv
ZG9tdmMtY29tbW9uL2JnLnBuZyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9ib3dlcl9jb21wb25l
bnRzL3RvZG9tdmMtY29tbW9uL2JnLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YjJhNzYwMDgyNWVlMTFmMjE4NDllZDQ3NTQ5OWM3ZDFlY2JjYzg3MC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21W
P2QwMDAwMQoKbGl0ZXJhbCAyMTI2CnpjbVYtVTIoa0J4UCk8aDszS3xMazAwMGUxTkpMVHEwMDNr
RjAwM2tIMHt7UjM0VUIhcTAwMDBDUCl0LXM/KFhqRQp6Pis5eWA9SEs3bnQ9fjN0MDAwTzVOa2w8
WmN3VGp1KFE0dn43S1dFVyNZbT9sS192O1RtfCFGYylATndFbm10c2gKenghT356ODFKVDNwRnNt
Pm09MDRoVmFfbFhsX2JtPStNOz1lSTwlJHJPMnRhYHN1aCpTciNQT3cqP2FkcSFPIUNWCnoqMCZi
KXJrQ0NFVikxbkl1aUxCbnRVSC1NSkk7JnFZZ3p8ZEBOaG5uX2FiaTJnYHB1NE5BTVZpZDNoUyU/
cXV6fgp6amxKZih4OGNqPFBHY2puKkorYXsmSDVwKm41JDVlMz88S0NjP28wNm1Bc05TYmdQV08/
UHojQ3puPCE9ez57VlMKelVWRVAxbXNnOWBeT0ZVaFNPNXJ0WEhoUmx5VTJpPjYkQlQ9Z2xHYHtK
bGN0R0hyd1JJbSk2QnV1NjVqTFFuXkg4Cnp2bDlsWnFVQkErJXF2TTVYQyt5WUBtZkEoWUJ+WFA9
ZXw2PHslJF5lVThucks/djJjY2JASm9tNUNHPnJLQUw3Sgp6cGxIRUlhdlZwfDBwMSZtIUdgVGk/
PDdpWjt9QEc3I1opfUttJTIhRkhuUTAqJj9QTFIpRyFIQWFIZ1UjY3wkZHoKenBqIzBIbWVhZEll
PmAjKT1Kamtie0I9RktuVTNwYy0mWUBqX2o2KGg0WX4rVXE8UFUzNkM7NWI9TV5GYD1wMWRJCnpr
PENRT1BOYTc+IV5KPUxIdW54MXhpNFFYSy1ZeyZNb1Q4a3k2VmI5Y3xXaG5Pd0Z+Yz0zek95OGFn
a3RsaVM2Iwp6YCM4RmA5SClEPWJtazlCNU1uVyZfciMpZiRjKzskTFNyLUBeQW44ZGhjfklxdXV2
PmpPSzdwdzdMSjsmWDBpMUMKekdNc0hkUDFPc0BueSQkaiE+WEFpaSU3YnA1az5gcHlOQSF+ZXBi
KSgpcDl6UjRZbDZ6PVV9e0NJZGgxeihGcEFvCnpRSVchOzB6cEN5QzQqN1lMa1pDT0BjdWwwUl8m
emdoc0E4RWspeiU8IXAtYnZzc3BsWVkyfVA7IXY0Q1lqOWttRgp6YjBiTl9tNFYqZl5ZWk1vYjIo
ajNwS2p+N3YjWnRrcz1Jbyt7c3UlV2l1a2RKSCRiP2Zaa2lBPVBZXzNPaERCa28KeihMVFFIWSZG
Xl4yaEctWWAqWjkzdmJ+Yz8qKEpjaERqVGZDcz96Um0qYCpOKlYtJD0/UXF0aG5Tcio/T1Mzc2pL
CnpvPF9VXmZ7fmFnNjB1bD5qTnBLYTkye0BOSCtTc3RYJUB9eEIqSmshbH1QWjFjQ2xJbnN+fTVe
IVJuY1VrKnJtQQp6JVNJVmd0NThFUXhMSitPaUZxPHl1NGVPRHw5THQzZE5zZWZ4T3VxKUQmJF8l
ajBEZ3FDeTFnemN8dFREMyptZWUKens9JXw8YGB9X0h5cGhPdXs7KXhrUmcrUW5IQ0MzVGYra3Nw
cVY2KnxRSy1SY3FEfTQ+S2tCdXdxdXlaTFVwfGdyCnpQVWJVYkZiQnJQZDF4T2BeQypyLWkzcDkq
RiMoT0JoITRXeUBhQyYqIXxPfEdYY2pEQSZZaEZ7O2NENypvKEdTXgp6QHBRU0U3KXhfODE9UXlq
ZTYqTFEjVFh1LTcobztTOHUzdHBEQTxTZ2NLY0tPcG1BOz1IQlpTQE9GVEBfWE92eHEKeipOfDNL
THl0Z3pINkdVJiZVb2M0WnprNGx1bTNQezk/ZnBJNCtRR1BKK3Y2YDFsZlJxM0xjUyooTSpXSyt8
YiVPCnplJHo+MF9kZGolaG1Dc3BlWGRoWVJ9LWk5QT1DYEVvQ2hVWXVIfl54ITkrfCYoUGdiKj5D
azw9OWp8KSpAeHlmVAp6cFAjK0t0PH0zOWJ8M1dsNGZ4VCgrRz9hSD5nR15kQE1FYVVPSlJmeTU1
VHRGSTdeWSlWdU1VPTdQcDB5NTVqU34KeitUSilpZ015cnFrWDt3VThqNjhpSUR0cUpZaFNfRDNf
T2VtLUBnNm1lX1JmaVF9dVRfSy1BLTlxRyV9Z2szRTljCnohOGBLZ3NNTlhtKWJlbG9QZk1xbCp8
JiRNPjFxYGkhY1kpUkZZbmpOWXUqZ1N2QDhYZWJWNyV9eFlMPjYpR0pQSgp6SnBBN0szMWxjSnVJ
RktTdy17eDRGWDBLMkF6KX5YZzxgc091JDR8XjxNQzdAK3hid3hzR2dUdkpJQUxqUHs2OEwKejhB
WXVTR1MwR1VnazZXYHY0VztSeSp1b0VUbnVsUGl8NTczJWx2Klp4dyN2NnlVUV5NT2ZjcFQjVjhS
SURWIyNOCnpEMWArQWVtc09oKXdiV0RFeFZjZnBLeilqeVY9PH4mWlhQZzZjfFpERTdVNGJrPERe
Pi0oXlhKWDRZem9pTlJ2TAp6eXVZN34yNnctUF5adyU2Rn1zaEJ3VjIkMDJjOFJzU1V5NmRNOTJk
aUNBeGlYM0lVcXNxNWlnNj5VXyFWeSpxNSQKemptfTE2dEpyK1FaJlQ/SGtrcGVJd1ZYLXIxRUk9
QCVabHQ7Njx0d0g4NklEPmcqbWomRSFBKSklZ1hKPXg2dSNsCnpjS0VQPmJ4NHJxViprYEJCclok
TXFqdHtUc0hjeFVIPjspaUFLfUIoS2lsYSZWRCViPzZtJl4wV0s0XiZFWk5BSQp6OEFNWXNfJSRE
JXxNK0ArY1FxTC1oaTR5Rz5oKmp3ZGlpIVcxe31wPlpod0ZZdF80U3Uxa2pZOTxiQVpqen45ZWsK
el9EaWFyK0FmSkZQXzlAeW1VbyRLVz48LTVgISRWTk9JMXkoRURTSDRXcENpakVfPmFsIU50PV5l
VkVSI3VKMT1iCno7QldGMklneUY1TGV4Vit5ZWMkS2luO0FpQG15bztHPnpKJmpyZFcjZWNYaEla
cGg1T1lxd19QRWZjRjU2PE8xOQp6TCk4ciFLTSgpaWYwYEA/VzQoSmRjKTdXb1BHXiY9JDx6VXNN
K0hDV2FrQ14zdFp4aytQalFHfUI+WjU8WjZWeHcKekJASHJWJCZsfkBUYWo3MHBjZXtpU3VSTHNV
Y3pEWV81VG5EcThQeV9RM3doYEQ4ITRqSzt2RmRSUCtRMD16SnkqCnp6dVdkJSFhaUBEe3wqSjxJ
O09EJmklbHtKcC04KlB1M1ZHTFdpeWs2diNYbVFxd2AtKyVlJHxDSncqQGA1emIzPAp6RX16Iztr
UmhMJnE1UERHNkBtbSokPlp1X1paRSNxM01jK04mMU9eN2hvaDlRUjdgK0wkY0JQNXBxRz1mcUEw
dWgKelVCdWtheFRGbUgpPHxYYnZwMmM9SFNiTmtwWHc3M2E1bHY3ViRqYjkyI3laMTQxQCRYP0Z9
SnQ4Z0lVN1dtNm05Cno/ZV87O3pzbm02YExaZVA+VD0kKUtyPlo/a3IqVW1GcVI3engwQzZeYm1j
c2NAMUFHdHdfck5IPi1YbSRkKnxRPAp6biYxTG4wdTc9bCZJTHM+JUNrSnBgRGlHOUYxOHg0TmUr
bGc8I2k/ZTdqTCV4OzRablJrTl5NeDA3KnFvTTZOPCQKRWYoPjBOITJrZE4KCmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9hbmd1bGFyanMvaW5kZXguaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJq
cy9pbmRleC5odG1sCmluZGV4IDdmMzc4YmRiMmM4OGNmMTRlODZkN2QwNjNiOWU3ZGRjZWE5YzRh
N2QuLmZmMTdjOTg4ZjZhYWVlZGFjN2M3NDc0ZTBjNTZmZTVlNzUyZTk4MzQgMTAwNjQ0Ci0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9pbmRleC5odG1sCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3Vs
YXJqcy9pbmRleC5odG1sCkBAIC0xLDcxICsxLDIxIEBACiA8IWRvY3R5cGUgaHRtbD4KLTxodG1s
IGxhbmc9ImVuIiBuZy1hcHA9InRvZG9tdmMiIGRhdGEtZnJhbWV3b3JrPSJhbmd1bGFyanMiPgor
PGh0bWwgbGFuZz0iZW4iIGRhdGEtZnJhbWV3b3JrPSJhbmd1bGFyanMiPgogICAgIDxoZWFkPgot
ICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNv
bXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiPgotICAgIDx0aXRsZT5Bbmd1bGFySlMg4oCiIFRv
ZG9NVkM8L3RpdGxlPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iYm93ZXJfY29t
cG9uZW50cy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzcyI+Ci0gICAgPHN0eWxlPltuZy1jbG9ha10g
eyBkaXNwbGF5OiBub25lOyB9PC9zdHlsZT4KKyAgICAgICAgPG1ldGEgY2hhcnNldD0idXRmLTgi
PgorICAgICAgICA8dGl0bGU+QW5ndWxhckpTIOKAoiBUb2RvTVZDPC90aXRsZT4KKyAgICAgICAg
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24v
YmFzZS5jc3MiPgorICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Im5vZGVfbW9k
dWxlcy90b2RvbXZjLWFwcC1jc3MvaW5kZXguY3NzIj4KKyAgICAgICAgPHN0eWxlPltuZy1jbG9h
a10geyBkaXNwbGF5OiBub25lOyB9PC9zdHlsZT4KICAgICA8L2hlYWQ+Ci0gICAgPGJvZHk+Ci0g
ICAgPHNlY3Rpb24gaWQ9InRvZG9hcHAiIG5nLWNvbnRyb2xsZXI9IlRvZG9DdHJsIj4KLSAgICA8
aGVhZGVyIGlkPSJoZWFkZXIiPgotICAgIDxoMT50b2RvczwvaDE+Ci0gICAgPGZvcm0gaWQ9InRv
ZG8tZm9ybSIgbmctc3VibWl0PSJhZGRUb2RvKCkiPgotICAgIDxpbnB1dCBpZD0ibmV3LXRvZG8i
IHBsYWNlaG9sZGVyPSJXaGF0IG5lZWRzIHRvIGJlIGRvbmU/IiBuZy1tb2RlbD0ibmV3VG9kbyIg
YXV0b2ZvY3VzPgotICAgIDwvZm9ybT4KLSAgICA8L2hlYWRlcj4KLSAgICA8c2VjdGlvbiBpZD0i
bWFpbiIgbmctc2hvdz0idG9kb3MubGVuZ3RoIiBuZy1jbG9haz4KLSAgICA8aW5wdXQgaWQ9InRv
Z2dsZS1hbGwiIHR5cGU9ImNoZWNrYm94IiBuZy1tb2RlbD0iYWxsQ2hlY2tlZCIgbmctY2xpY2s9
Im1hcmtBbGwoYWxsQ2hlY2tlZCkiPgotICAgIDxsYWJlbCBmb3I9InRvZ2dsZS1hbGwiPk1hcmsg
YWxsIGFzIGNvbXBsZXRlPC9sYWJlbD4KLSAgICA8dWwgaWQ9InRvZG8tbGlzdCI+Ci0gICAgPGxp
IG5nLXJlcGVhdD0idG9kbyBpbiB0b2RvcyB8IGZpbHRlcjpzdGF0dXNGaWx0ZXIiIG5nLWNsYXNz
PSJ7Y29tcGxldGVkOiB0b2RvLmNvbXBsZXRlZCwgZWRpdGluZzogdG9kbyA9PSBlZGl0ZWRUb2Rv
fSI+Ci0gICAgPGRpdiBjbGFzcz0idmlldyI+Ci0gICAgPGlucHV0IGNsYXNzPSJ0b2dnbGUiIHR5
cGU9ImNoZWNrYm94IiBuZy1tb2RlbD0idG9kby5jb21wbGV0ZWQiPgotICAgIDxsYWJlbCBuZy1k
YmxjbGljaz0iZWRpdFRvZG8odG9kbykiPnt7dG9kby50aXRsZX19PC9sYWJlbD4KLSAgICA8YnV0
dG9uIGNsYXNzPSJkZXN0cm95IiBuZy1jbGljaz0icmVtb3ZlVG9kbyh0b2RvKSI+PC9idXR0b24+
Ci0gICAgPC9kaXY+Ci0gICAgPGZvcm0gbmctc3VibWl0PSJkb25lRWRpdGluZyh0b2RvKSI+Ci0g
ICAgPGlucHV0IGNsYXNzPSJlZGl0IiBuZy1tb2RlbD0idG9kby50aXRsZSIgdG9kby1lc2NhcGU9
InJldmVydEVkaXRpbmcodG9kbykiIHRvZG8tYmx1cj0iZG9uZUVkaXRpbmcodG9kbykiIHRvZG8t
Zm9jdXM9InRvZG8gPT0gZWRpdGVkVG9kbyI+Ci0gICAgPC9mb3JtPgotICAgIDwvbGk+Ci0gICAg
PC91bD4KLSAgICA8L3NlY3Rpb24+Ci0gICAgPGZvb3RlciBpZD0iZm9vdGVyIiBuZy1zaG93PSJ0
b2Rvcy5sZW5ndGgiIG5nLWNsb2FrPgotICAgIDxzcGFuIGlkPSJ0b2RvLWNvdW50Ij48c3Ryb25n
Pnt7cmVtYWluaW5nQ291bnR9fTwvc3Ryb25nPgotICAgIDxuZy1wbHVyYWxpemUgY291bnQ9InJl
bWFpbmluZ0NvdW50IiB3aGVuPSJ7IG9uZTogJ2l0ZW0gbGVmdCcsIG90aGVyOiAnaXRlbXMgbGVm
dCcgfSI+PC9uZy1wbHVyYWxpemU+Ci0gICAgPC9zcGFuPgotICAgIDx1bCBpZD0iZmlsdGVycyI+
Ci0gICAgPGxpPgotICAgIDxhIG5nLWNsYXNzPSJ7c2VsZWN0ZWQ6IGxvY2F0aW9uLnBhdGgoKSA9
PSAnLyd9ICIgaHJlZj0iIy8iPkFsbDwvYT4KLSAgICA8L2xpPgotICAgIDxsaT4KLSAgICA8YSBu
Zy1jbGFzcz0ie3NlbGVjdGVkOiBsb2NhdGlvbi5wYXRoKCkgPT0gJy9hY3RpdmUnfSIgaHJlZj0i
Iy9hY3RpdmUiPkFjdGl2ZTwvYT4KLSAgICA8L2xpPgotICAgIDxsaT4KLSAgICA8YSBuZy1jbGFz
cz0ie3NlbGVjdGVkOiBsb2NhdGlvbi5wYXRoKCkgPT0gJy9jb21wbGV0ZWQnfSIgaHJlZj0iIy9j
b21wbGV0ZWQiPkNvbXBsZXRlZDwvYT4KLSAgICA8L2xpPgotICAgIDwvdWw+Ci0gICAgPGJ1dHRv
biBpZD0iY2xlYXItY29tcGxldGVkIiBuZy1jbGljaz0iY2xlYXJDb21wbGV0ZWRUb2RvcygpIiBu
Zy1zaG93PSJjb21wbGV0ZWRDb3VudCI+Q2xlYXIgY29tcGxldGVkICh7e2NvbXBsZXRlZENvdW50
fX0pPC9idXR0b24+Ci0gICAgPC9mb290ZXI+Ci0gICAgPC9zZWN0aW9uPgotICAgIDxmb290ZXIg
aWQ9ImluZm8iPgotICAgIDxwPkRvdWJsZS1jbGljayB0byBlZGl0IGEgdG9kbzwvcD4KLSAgICA8
cD5DcmVkaXRzOgotICAgIDxhIGhyZWY9Imh0dHA6Ly90d2l0dGVyLmNvbS9jYnVyZ2RvcmYiPkNo
cmlzdG9waCBCdXJnZG9yZjwvYT4sCi0gICAgPGEgaHJlZj0iaHR0cDovL2VyaWNiaWRlbG1hbi5j
b20iPkVyaWMgQmlkZWxtYW48L2E+LAotICAgIDxhIGhyZWY9Imh0dHA6Ly9qYWNvYm11bW0uY29t
Ij5KYWNvYiBNdW1tPC9hPiBhbmQKLSAgICA8YSBocmVmPSJodHRwOi8vaWdvcm1pbmFyLmNvbSI+
SWdvciBNaW5hcjwvYT4KLSAgICA8L3A+Ci0gICAgPHA+UGFydCBvZiA8YSBocmVmPSJodHRwOi8v
dG9kb212Yy5jb20iPlRvZG9NVkM8L2E+PC9wPgotICAgIDwvZm9vdGVyPgotICAgIDxzY3JpcHQg
c3JjPSJib3dlcl9jb21wb25lbnRzL3RvZG9tdmMtY29tbW9uL2Jhc2UuanMiPjwvc2NyaXB0Pgot
ICAgIDxzY3JpcHQgc3JjPSJib3dlcl9jb21wb25lbnRzL2FuZ3VsYXIvYW5ndWxhci5qcyI+PC9z
Y3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9ImpzL2FwcC5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlw
dCBzcmM9ImpzL2NvbnRyb2xsZXJzL3RvZG9DdHJsLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0
IHNyYz0ianMvc2VydmljZXMvdG9kb1N0b3JhZ2UuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQg
c3JjPSJqcy9kaXJlY3RpdmVzL3RvZG9Gb2N1cy5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBz
cmM9ImpzL2RpcmVjdGl2ZXMvdG9kb0JsdXIuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3Jj
PSJqcy9kaXJlY3RpdmVzL3RvZG9Fc2NhcGUuanMiPjwvc2NyaXB0PgorICAgIDxib2R5IG5nLWFw
cD0idG9kb212YyI+CisgICAgICAgIDxuZy12aWV3IC8+CisgICAgICAgIDxzY3JpcHQgc3JjPSJu
b2RlX21vZHVsZXMvYW5ndWxhci9hbmd1bGFyLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlw
dCBzcmM9Im5vZGVfbW9kdWxlcy9hbmd1bGFyLXJvdXRlL2FuZ3VsYXItcm91dGUuanMiPjwvc2Ny
aXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0ibm9kZV9tb2R1bGVzL2FuZ3VsYXItcmVzb3VyY2Uv
YW5ndWxhci1yZXNvdXJjZS5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJqcy9h
cHAuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0ianMvY29udHJvbGxlcnMvdG9k
b0N0cmwuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0ianMvc2VydmljZXMvdG9k
b1N0b3JhZ2UuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0ianMvZGlyZWN0aXZl
cy90b2RvRm9jdXMuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0ianMvZGlyZWN0
aXZlcy90b2RvRXNjYXBlLmpzIj48L3NjcmlwdD4KICAgICA8L2JvZHk+CiA8L2h0bWw+CmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvanMvYXBwLmpzIGIvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5n
dWxhcmpzL2pzL2FwcC5qcwppbmRleCA4MjNmZTc5ODMxNDkxY2Q1ZjAxNjUwZTcxOTdjODQ1MTc2
ZjEwYjQ5Li41ZjMwZWEzYTExOTk1MTA5ODQ1MGE1NmRhZDk3MWVhNDExMjljZGEyIDEwMDY0NAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvanMvYXBwLmpzCisrKyBiL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2Fu
Z3VsYXJqcy9qcy9hcHAuanMKQEAgLTEsMTAgKzEsMzIgQEAKIC8qZ2xvYmFsIGFuZ3VsYXIgKi8K
LS8qanNoaW50IHVudXNlZDpmYWxzZSAqLwotJ3VzZSBzdHJpY3QnOwogCiAvKioKICAqIFRoZSBt
YWluIFRvZG9NVkMgYXBwIG1vZHVsZQogICoKICAqIEB0eXBlIHthbmd1bGFyLk1vZHVsZX0KICAq
LwotdmFyIHRvZG9tdmMgPSBhbmd1bGFyLm1vZHVsZSgndG9kb212YycsIFtdKTsKK2FuZ3VsYXIu
bW9kdWxlKCd0b2RvbXZjJywgWyduZ1JvdXRlJywgJ25nUmVzb3VyY2UnXSkKKyAgICAuY29uZmln
KGZ1bmN0aW9uICgkcm91dGVQcm92aWRlcikgeworICAgICAgICAndXNlIHN0cmljdCc7CisKKyAg
ICAgICAgdmFyIHJvdXRlQ29uZmlnID0geworICAgICAgICAgICAgY29udHJvbGxlcjogJ1RvZG9D
dHJsJywKKyAgICAgICAgICAgIHRlbXBsYXRlVXJsOiAndG9kb212Yy1pbmRleC5odG1sJywKKyAg
ICAgICAgICAgIHJlc29sdmU6IHsKKyAgICAgICAgICAgICAgICBzdG9yZTogZnVuY3Rpb24gKHRv
ZG9TdG9yYWdlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgY29ycmVjdCBtb2R1
bGUgKEFQSSBvciBsb2NhbFN0b3JhZ2UpLgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9k
b1N0b3JhZ2UudGhlbihmdW5jdGlvbiAobW9kdWxlKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtb2R1bGUuZ2V0KCk7IC8vIEZldGNoIHRoZSB0b2RvIHJlY29yZHMgaW4gdGhlIGJhY2tncm91
bmQuCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlOworICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07
CisKKyAgICAgICAgJHJvdXRlUHJvdmlkZXIKKyAgICAgICAgICAgIC53aGVuKCcvJywgcm91dGVD
b25maWcpCisgICAgICAgICAgICAud2hlbignLzpzdGF0dXMnLCByb3V0ZUNvbmZpZykKKyAgICAg
ICAgICAgIC5vdGhlcndpc2UoeworICAgICAgICAgICAgICAgIHJlZGlyZWN0VG86ICcvJworICAg
ICAgICAgICAgfSk7CisgICAgfSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMv
anMvY29udHJvbGxlcnMvdG9kb0N0cmwuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvanMvY29u
dHJvbGxlcnMvdG9kb0N0cmwuanMKaW5kZXggNDkwYTJmNWM5NTNlODc0MGI4MmUyYWYzYWE3ZmQ2
Nzg2ZTdlODJkMC4uYTM5ZDVhZWM4YzI0MzQxZGIwMzZjZTBhNTBjNDE2ZTEyMjcyZjVmYSAxMDA2
NDQKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2pzL2NvbnRyb2xsZXJzL3RvZG9DdHJsLmpz
CisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9qcy9jb250cm9sbGVycy90b2RvQ3RybC5qcwpA
QCAtMSw4NSArMSwxMjYgQEAKLS8qZ2xvYmFsIHRvZG9tdmMsIGFuZ3VsYXIgKi8KLSd1c2Ugc3Ry
aWN0JzsKKy8qZ2xvYmFsIGFuZ3VsYXIgKi8KIAogLyoqCiAgKiBUaGUgbWFpbiBjb250cm9sbGVy
IGZvciB0aGUgYXBwLiBUaGUgY29udHJvbGxlcjoKICAqIC0gcmV0cmlldmVzIGFuZCBwZXJzaXN0
cyB0aGUgbW9kZWwgdmlhIHRoZSB0b2RvU3RvcmFnZSBzZXJ2aWNlCiAgKiAtIGV4cG9zZXMgdGhl
IG1vZGVsIHRvIHRoZSB0ZW1wbGF0ZSBhbmQgcHJvdmlkZXMgZXZlbnQgaGFuZGxlcnMKICAqLwot
dG9kb212Yy5jb250cm9sbGVyKCdUb2RvQ3RybCcsIGZ1bmN0aW9uIFRvZG9DdHJsKCRzY29wZSwg
JGxvY2F0aW9uLCB0b2RvU3RvcmFnZSwgZmlsdGVyRmlsdGVyKSB7Ci0gICAgdmFyIHRvZG9zID0g
JHNjb3BlLnRvZG9zID0gdG9kb1N0b3JhZ2UuZ2V0KCk7Ci0KLSAgICAkc2NvcGUubmV3VG9kbyA9
ICcnOwotICAgICRzY29wZS5lZGl0ZWRUb2RvID0gbnVsbDsKLQotICAgICRzY29wZS4kd2F0Y2go
J3RvZG9zJywgZnVuY3Rpb24gKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgewotICAgICRzY29wZS5yZW1h
aW5pbmdDb3VudCA9IGZpbHRlckZpbHRlcih0b2RvcywgeyBjb21wbGV0ZWQ6IGZhbHNlIH0pLmxl
bmd0aDsKLSAgICAkc2NvcGUuY29tcGxldGVkQ291bnQgPSB0b2Rvcy5sZW5ndGggLSAkc2NvcGUu
cmVtYWluaW5nQ291bnQ7Ci0gICAgJHNjb3BlLmFsbENoZWNrZWQgPSAhJHNjb3BlLnJlbWFpbmlu
Z0NvdW50OwotICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUpIHsgLy8gVGhpcyBwcmV2ZW50
cyB1bm5lZWRlZCBjYWxscyB0byB0aGUgbG9jYWwgc3RvcmFnZQotICAgIHRvZG9TdG9yYWdlLnB1
dCh0b2Rvcyk7Ci0gICAgfQotICAgIH0sIHRydWUpOwotCi0gICAgaWYgKCRsb2NhdGlvbi5wYXRo
KCkgPT09ICcnKSB7Ci0gICAgJGxvY2F0aW9uLnBhdGgoJy8nKTsKLSAgICB9Ci0KLSAgICAkc2Nv
cGUubG9jYXRpb24gPSAkbG9jYXRpb247Ci0KLSAgICAkc2NvcGUuJHdhdGNoKCdsb2NhdGlvbi5w
YXRoKCknLCBmdW5jdGlvbiAocGF0aCkgewotICAgICRzY29wZS5zdGF0dXNGaWx0ZXIgPSAocGF0
aCA9PT0gJy9hY3RpdmUnKSA/Ci0gICAgeyBjb21wbGV0ZWQ6IGZhbHNlIH0gOiAocGF0aCA9PT0g
Jy9jb21wbGV0ZWQnKSA/Ci0gICAgeyBjb21wbGV0ZWQ6IHRydWUgfSA6IG51bGw7Cithbmd1bGFy
Lm1vZHVsZSgndG9kb212YycpCisgICAgLmNvbnRyb2xsZXIoJ1RvZG9DdHJsJywgZnVuY3Rpb24g
VG9kb0N0cmwoJHNjb3BlLCAkcm91dGVQYXJhbXMsICRmaWx0ZXIsIHN0b3JlKSB7CisgICAgICAg
ICd1c2Ugc3RyaWN0JzsKKworICAgICAgICB2YXIgdG9kb3MgPSAkc2NvcGUudG9kb3MgPSBzdG9y
ZS50b2RvczsKKworICAgICAgICAkc2NvcGUubmV3VG9kbyA9ICcnOworICAgICAgICAkc2NvcGUu
ZWRpdGVkVG9kbyA9IG51bGw7CisgICAgICAgICRzY29wZS5zdGF0dXMgPSAnJzsKKworICAgICAg
ICAkc2NvcGUuJHdhdGNoKCd0b2RvcycsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICRzY29w
ZS5yZW1haW5pbmdDb3VudCA9ICRmaWx0ZXIoJ2ZpbHRlcicpKHRvZG9zLCB7IGNvbXBsZXRlZDog
ZmFsc2UgfSkubGVuZ3RoOworICAgICAgICAgICAgJHNjb3BlLmNvbXBsZXRlZENvdW50ID0gdG9k
b3MubGVuZ3RoIC0gJHNjb3BlLnJlbWFpbmluZ0NvdW50OworICAgICAgICAgICAgJHNjb3BlLmFs
bENoZWNrZWQgPSAhJHNjb3BlLnJlbWFpbmluZ0NvdW50OworICAgICAgICB9LCB0cnVlKTsKKwor
ICAgICAgICAvLyBNb25pdG9yIHRoZSBjdXJyZW50IHJvdXRlIGZvciBjaGFuZ2VzIGFuZCBhZGp1
c3QgdGhlIGZpbHRlciBhY2NvcmRpbmdseS4KKyAgICAgICAgJHNjb3BlLiRvbignJHJvdXRlQ2hh
bmdlU3VjY2VzcycsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBzdGF0dXMgPSAkc2Nv
cGUuc3RhdHVzID0gJHJvdXRlUGFyYW1zLnN0YXR1cyB8fCAnJzsKKyAgICAgICAgICAgICRzY29w
ZS5zdGF0dXNGaWx0ZXIgPSAoc3RhdHVzID09PSAnYWN0aXZlJykgPworICAgICAgICAgICAgICAg
IHsgY29tcGxldGVkOiBmYWxzZSB9IDogKHN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcpID8KKyAgICAg
ICAgICAgICAgICB7IGNvbXBsZXRlZDogdHJ1ZSB9IDoge307CisgICAgICAgIH0pOworCisgICAg
ICAgICRzY29wZS5hZGRUb2RvID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIG5ld1Rv
ZG8gPSB7CisgICAgICAgICAgICAgICAgdGl0bGU6ICRzY29wZS5uZXdUb2RvLnRyaW0oKSwKKyAg
ICAgICAgICAgICAgICBjb21wbGV0ZWQ6IGZhbHNlCisgICAgICAgICAgICB9OworCisgICAgICAg
ICAgICBpZiAoIW5ld1RvZG8udGl0bGUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICRzY29wZS5zYXZpbmcgPSB0cnVlOworICAgICAgICAg
ICAgc3RvcmUuaW5zZXJ0KG5ld1RvZG8pCisgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24g
c3VjY2VzcygpIHsKKyAgICAgICAgICAgICAgICAgICAgJHNjb3BlLm5ld1RvZG8gPSAnJzsKKyAg
ICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC5maW5hbGx5KGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnNhdmluZyA9IGZhbHNlOworICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICB9OworCisgICAgICAgICRzY29wZS5lZGl0VG9kbyA9IGZ1bmN0aW9u
ICh0b2RvKSB7CisgICAgICAgICAgICAkc2NvcGUuZWRpdGVkVG9kbyA9IHRvZG87CisgICAgICAg
ICAgICAvLyBDbG9uZSB0aGUgb3JpZ2luYWwgdG9kbyB0byByZXN0b3JlIGl0IG9uIGRlbWFuZC4K
KyAgICAgICAgICAgICRzY29wZS5vcmlnaW5hbFRvZG8gPSBhbmd1bGFyLmV4dGVuZCh7fSwgdG9k
byk7CisgICAgICAgIH07CisKKyAgICAgICAgJHNjb3BlLnNhdmVFZGl0cyA9IGZ1bmN0aW9uICh0
b2RvLCBldmVudCkgeworICAgICAgICAgICAgLy8gQmx1ciBldmVudHMgYXJlIGF1dG9tYXRpY2Fs
bHkgdHJpZ2dlcmVkIGFmdGVyIHRoZSBmb3JtIHN1Ym1pdCBldmVudC4KKyAgICAgICAgICAgIC8v
IFRoaXMgZG9lcyBzb21lIHVuZm9ydHVuYXRlIGxvZ2ljIGhhbmRsaW5nIHRvIHByZXZlbnQgc2F2
aW5nIHR3aWNlLgorICAgICAgICAgICAgaWYgKGV2ZW50ID09PSAnYmx1cicgJiYgJHNjb3BlLnNh
dmVFdmVudCA9PT0gJ3N1Ym1pdCcpIHsKKyAgICAgICAgICAgICAgICAkc2NvcGUuc2F2ZUV2ZW50
ID0gbnVsbDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICRzY29wZS5zYXZlRXZlbnQgPSBldmVudDsKKworICAgICAgICAgICAgaWYgKCRzY29w
ZS5yZXZlcnRlZCkgeworICAgICAgICAgICAgICAgIC8vIFRvZG8gZWRpdHMgd2VyZSByZXZlcnRl
ZC0tIGRvbid0IHNhdmUuCisgICAgICAgICAgICAgICAgJHNjb3BlLnJldmVydGVkID0gbnVsbDsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRv
ZG8udGl0bGUgPSB0b2RvLnRpdGxlLnRyaW0oKTsKKworICAgICAgICAgICAgaWYgKHRvZG8udGl0
bGUgPT09ICRzY29wZS5vcmlnaW5hbFRvZG8udGl0bGUpIHsKKyAgICAgICAgICAgICAgICAkc2Nv
cGUuZWRpdGVkVG9kbyA9IG51bGw7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBzdG9yZVt0b2RvLnRpdGxlID8gJ3B1dCcgOiAnZGVsZXRlJ10o
dG9kbykKKyAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiBzdWNjZXNzKCkge30sIGZ1bmN0
aW9uIGVycm9yKCkgeworICAgICAgICAgICAgICAgICAgICB0b2RvLnRpdGxlID0gJHNjb3BlLm9y
aWdpbmFsVG9kby50aXRsZTsKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC5m
aW5hbGx5KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVkaXRlZFRv
ZG8gPSBudWxsOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9OworCisgICAgICAgICRz
Y29wZS5yZXZlcnRFZGl0cyA9IGZ1bmN0aW9uICh0b2RvKSB7CisgICAgICAgICAgICB0b2Rvc1t0
b2Rvcy5pbmRleE9mKHRvZG8pXSA9ICRzY29wZS5vcmlnaW5hbFRvZG87CisgICAgICAgICAgICAk
c2NvcGUuZWRpdGVkVG9kbyA9IG51bGw7CisgICAgICAgICAgICAkc2NvcGUub3JpZ2luYWxUb2Rv
ID0gbnVsbDsKKyAgICAgICAgICAgICRzY29wZS5yZXZlcnRlZCA9IHRydWU7CisgICAgICAgIH07
CisKKyAgICAgICAgJHNjb3BlLnJlbW92ZVRvZG8gPSBmdW5jdGlvbiAodG9kbykgeworICAgICAg
ICAgICAgc3RvcmUuZGVsZXRlKHRvZG8pOworICAgICAgICB9OworCisgICAgICAgICRzY29wZS5z
YXZlVG9kbyA9IGZ1bmN0aW9uICh0b2RvKSB7CisgICAgICAgICAgICBzdG9yZS5wdXQodG9kbyk7
CisgICAgICAgIH07CisKKyAgICAgICAgJHNjb3BlLnRvZ2dsZUNvbXBsZXRlZCA9IGZ1bmN0aW9u
ICh0b2RvLCBjb21wbGV0ZWQpIHsKKyAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZChj
b21wbGV0ZWQpKSB7CisgICAgICAgICAgICAgICAgdG9kby5jb21wbGV0ZWQgPSBjb21wbGV0ZWQ7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdG9yZS5wdXQodG9kbywgdG9kb3MuaW5kZXhP
Zih0b2RvKSkKKyAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiBzdWNjZXNzKCkge30sIGZ1
bmN0aW9uIGVycm9yKCkgeworICAgICAgICAgICAgICAgICAgICB0b2RvLmNvbXBsZXRlZCA9ICF0
b2RvLmNvbXBsZXRlZDsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfTsKKworICAgICAg
ICAkc2NvcGUuY2xlYXJDb21wbGV0ZWRUb2RvcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHN0b3JlLmNsZWFyQ29tcGxldGVkKCk7CisgICAgICAgIH07CisKKyAgICAgICAgJHNjb3BlLm1h
cmtBbGwgPSBmdW5jdGlvbiAoY29tcGxldGVkKSB7CisgICAgICAgICAgICB0b2Rvcy5mb3JFYWNo
KGZ1bmN0aW9uICh0b2RvKSB7CisgICAgICAgICAgICAgICAgaWYgKHRvZG8uY29tcGxldGVkICE9
PSBjb21wbGV0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnRvZ2dsZUNvbXBsZXRl
ZCh0b2RvLCBjb21wbGV0ZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9OwogICAgIH0pOwotCi0gICAgJHNjb3BlLmFkZFRvZG8gPSBmdW5jdGlvbiAoKSB7
Ci0gICAgdmFyIG5ld1RvZG8gPSAkc2NvcGUubmV3VG9kby50cmltKCk7Ci0gICAgaWYgKCFuZXdU
b2RvLmxlbmd0aCkgewotICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB0b2Rvcy5wdXNoKHsKLSAg
ICB0aXRsZTogbmV3VG9kbywKLSAgICBjb21wbGV0ZWQ6IGZhbHNlCi0gICAgfSk7Ci0KLSAgICAk
c2NvcGUubmV3VG9kbyA9ICcnOwotICAgIH07Ci0KLSAgICAkc2NvcGUuZWRpdFRvZG8gPSBmdW5j
dGlvbiAodG9kbykgewotICAgICRzY29wZS5lZGl0ZWRUb2RvID0gdG9kbzsKLSAgICAvLyBDbG9u
ZSB0aGUgb3JpZ2luYWwgdG9kbyB0byByZXN0b3JlIGl0IG9uIGRlbWFuZC4KLSAgICAkc2NvcGUu
b3JpZ2luYWxUb2RvID0gYW5ndWxhci5leHRlbmQoe30sIHRvZG8pOwotICAgIH07Ci0KLSAgICAk
c2NvcGUuZG9uZUVkaXRpbmcgPSBmdW5jdGlvbiAodG9kbykgewotICAgICRzY29wZS5lZGl0ZWRU
b2RvID0gbnVsbDsKLSAgICB0b2RvLnRpdGxlID0gdG9kby50aXRsZS50cmltKCk7Ci0KLSAgICBp
ZiAoIXRvZG8udGl0bGUpIHsKLSAgICAkc2NvcGUucmVtb3ZlVG9kbyh0b2RvKTsKLSAgICB9Ci0g
ICAgfTsKLQotICAgICRzY29wZS5yZXZlcnRFZGl0aW5nID0gZnVuY3Rpb24gKHRvZG8pIHsKLSAg
ICB0b2Rvc1t0b2Rvcy5pbmRleE9mKHRvZG8pXSA9ICRzY29wZS5vcmlnaW5hbFRvZG87Ci0gICAg
JHNjb3BlLmRvbmVFZGl0aW5nKCRzY29wZS5vcmlnaW5hbFRvZG8pOwotICAgIH07Ci0KLSAgICAk
c2NvcGUucmVtb3ZlVG9kbyA9IGZ1bmN0aW9uICh0b2RvKSB7Ci0gICAgdG9kb3Muc3BsaWNlKHRv
ZG9zLmluZGV4T2YodG9kbyksIDEpOwotICAgIH07Ci0KLSAgICAkc2NvcGUuY2xlYXJDb21wbGV0
ZWRUb2RvcyA9IGZ1bmN0aW9uICgpIHsKLSAgICAkc2NvcGUudG9kb3MgPSB0b2RvcyA9IHRvZG9z
LmZpbHRlcihmdW5jdGlvbiAodmFsKSB7Ci0gICAgcmV0dXJuICF2YWwuY29tcGxldGVkOwotICAg
IH0pOwotICAgIH07Ci0KLSAgICAkc2NvcGUubWFya0FsbCA9IGZ1bmN0aW9uIChjb21wbGV0ZWQp
IHsKLSAgICB0b2Rvcy5mb3JFYWNoKGZ1bmN0aW9uICh0b2RvKSB7Ci0gICAgdG9kby5jb21wbGV0
ZWQgPSBjb21wbGV0ZWQ7Ci0gICAgfSk7Ci0gICAgfTsKLX0pOwpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvYW5ndWxhcmpzL2pzL2RpcmVjdGl2ZXMvdG9kb0JsdXIuanMgYi9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9h
bmd1bGFyanMvanMvZGlyZWN0aXZlcy90b2RvQmx1ci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMjhlMDMwYWZiZTQ1YjA3NDYxNDVkNTdjOTIxOGZkYjhhNTY4MThkZS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1
bGFyanMvanMvZGlyZWN0aXZlcy90b2RvQmx1ci5qcworKysgL2Rldi9udWxsCkBAIC0xLDEzICsw
LDAgQEAKLS8qZ2xvYmFsIHRvZG9tdmMgKi8KLSd1c2Ugc3RyaWN0JzsKLQotLyoqCi0gKiBEaXJl
Y3RpdmUgdGhhdCBleGVjdXRlcyBhbiBleHByZXNzaW9uIHdoZW4gdGhlIGVsZW1lbnQgaXQgaXMg
YXBwbGllZCB0byBsb3NlcyBmb2N1cwotICovCi10b2RvbXZjLmRpcmVjdGl2ZSgndG9kb0JsdXIn
LCBmdW5jdGlvbiAoKSB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uIChzY29wZSwgZWxlbSwgYXR0cnMp
IHsKLSAgICBlbGVtLmJpbmQoJ2JsdXInLCBmdW5jdGlvbiAoKSB7Ci0gICAgc2NvcGUuJGFwcGx5
KGF0dHJzLnRvZG9CbHVyKTsKLSAgICB9KTsKLSAgICB9OwotfSk7CmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9hbmd1bGFyanMvanMvZGlyZWN0aXZlcy90b2RvRXNjYXBlLmpzIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvYW5ndWxhcmpzL2pzL2RpcmVjdGl2ZXMvdG9kb0VzY2FwZS5qcwppbmRleCBlZDE1ZmVjMGNm
ZjYxOWExOTI4YWEzNmJjMjhjZTEzNjhhMWI1ZTZmLi45NDRiNTJjNWYzNWI3NzI2OWI5N2NkNjZk
MGE4YzFkNTlhOTkyMjljIDEwMDY0NAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvanMvZGly
ZWN0aXZlcy90b2RvRXNjYXBlLmpzCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9qcy9kaXJl
Y3RpdmVzL3RvZG9Fc2NhcGUuanMKQEAgLTEsMTggKzEsMjQgQEAKLS8qZ2xvYmFsIHRvZG9tdmMg
Ki8KLSd1c2Ugc3RyaWN0JzsKKy8qZ2xvYmFsIGFuZ3VsYXIgKi8KIAogLyoqCiAgKiBEaXJlY3Rp
dmUgdGhhdCBleGVjdXRlcyBhbiBleHByZXNzaW9uIHdoZW4gdGhlIGVsZW1lbnQgaXQgaXMgYXBw
bGllZCB0byBnZXRzCiAgKiBhbiBgZXNjYXBlYCBrZXlkb3duIGV2ZW50LgogICovCi10b2RvbXZj
LmRpcmVjdGl2ZSgndG9kb0VzY2FwZScsIGZ1bmN0aW9uICgpIHsKLSAgICB2YXIgRVNDQVBFX0tF
WSA9IDI3OwotICAgIHJldHVybiBmdW5jdGlvbiAoc2NvcGUsIGVsZW0sIGF0dHJzKSB7Ci0gICAg
ZWxlbS5iaW5kKCdrZXlkb3duJywgZnVuY3Rpb24gKGV2ZW50KSB7Ci0gICAgaWYgKGV2ZW50Lmtl
eUNvZGUgPT09IEVTQ0FQRV9LRVkpIHsKLSAgICBzY29wZS4kYXBwbHkoYXR0cnMudG9kb0VzY2Fw
ZSk7Ci0gICAgfQotICAgIH0pOwotICAgIH07Ci19KTsKK2FuZ3VsYXIubW9kdWxlKCd0b2RvbXZj
JykKKyAgICAuZGlyZWN0aXZlKCd0b2RvRXNjYXBlJywgZnVuY3Rpb24gKCkgeworICAgICAgICAn
dXNlIHN0cmljdCc7CisKKyAgICAgICAgdmFyIEVTQ0FQRV9LRVkgPSAyNzsKIAorICAgICAgICBy
ZXR1cm4gZnVuY3Rpb24gKHNjb3BlLCBlbGVtLCBhdHRycykgeworICAgICAgICAgICAgZWxlbS5i
aW5kKCdrZXlkb3duJywgZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKGV2
ZW50LmtleUNvZGUgPT09IEVTQ0FQRV9LRVkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2NvcGUu
JGFwcGx5KGF0dHJzLnRvZG9Fc2NhcGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0pOworCisgICAgICAgICAgICBzY29wZS4kb24oJyRkZXN0cm95JywgZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgICAgIGVsZW0udW5iaW5kKCdrZXlkb3duJyk7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfTsKKyAgICB9KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9q
cy9kaXJlY3RpdmVzL3RvZG9Gb2N1cy5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9qcy9kaXJl
Y3RpdmVzL3RvZG9Gb2N1cy5qcwppbmRleCA3YzlkYzA5NThlNzYyMDU1ZDA0Y2E0YWM0NThmNjM0
YzRmZTYzODU3Li5lMWU2YzIxYzkwMGU2MmExNGJjZmI1NmY1YTI1Yjg3YzRjOTZiOWYyIDEwMDY0
NAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvanMvZGlyZWN0aXZlcy90b2RvRm9jdXMuanMK
KysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2pzL2RpcmVjdGl2ZXMvdG9kb0ZvY3VzLmpzCkBA
IC0xLDE3ICsxLDIwIEBACi0vKmdsb2JhbCB0b2RvbXZjICovCi0ndXNlIHN0cmljdCc7CisvKmds
b2JhbCBhbmd1bGFyICovCiAKIC8qKgotICogRGlyZWN0aXZlIHRoYXQgcGxhY2VzIGZvY3VzIG9u
IHRoZSBlbGVtZW50IGl0IGlzIGFwcGxpZWQgdG8gd2hlbiB0aGUgZXhwcmVzc2lvbiBpdCBiaW5k
cyB0byBldmFsdWF0ZXMgdG8gdHJ1ZQorICogRGlyZWN0aXZlIHRoYXQgcGxhY2VzIGZvY3VzIG9u
IHRoZSBlbGVtZW50IGl0IGlzIGFwcGxpZWQgdG8gd2hlbiB0aGUKKyAqIGV4cHJlc3Npb24gaXQg
YmluZHMgdG8gZXZhbHVhdGVzIHRvIHRydWUKICAqLwotdG9kb212Yy5kaXJlY3RpdmUoJ3RvZG9G
b2N1cycsIGZ1bmN0aW9uIHRvZG9Gb2N1cygkdGltZW91dCkgewotICAgIHJldHVybiBmdW5jdGlv
biAoc2NvcGUsIGVsZW0sIGF0dHJzKSB7Ci0gICAgc2NvcGUuJHdhdGNoKGF0dHJzLnRvZG9Gb2N1
cywgZnVuY3Rpb24gKG5ld1ZhbCkgewotICAgIGlmIChuZXdWYWwpIHsKLSAgICAkdGltZW91dChm
dW5jdGlvbiAoKSB7Ci0gICAgZWxlbVswXS5mb2N1cygpOwotICAgIH0sIDAsIGZhbHNlKTsKLSAg
ICB9Cithbmd1bGFyLm1vZHVsZSgndG9kb212YycpCisgICAgLmRpcmVjdGl2ZSgndG9kb0ZvY3Vz
JywgZnVuY3Rpb24gdG9kb0ZvY3VzKCR0aW1lb3V0KSB7CisgICAgICAgICd1c2Ugc3RyaWN0JzsK
KworICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHNjb3BlLCBlbGVtLCBhdHRycykgeworICAgICAg
ICAgICAgc2NvcGUuJHdhdGNoKGF0dHJzLnRvZG9Gb2N1cywgZnVuY3Rpb24gKG5ld1ZhbCkgewor
ICAgICAgICAgICAgICAgIGlmIChuZXdWYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgJHRpbWVv
dXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVswXS5mb2N1cygp
OworICAgICAgICAgICAgICAgICAgICB9LCAwLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH07CiAgICAgfSk7Ci0gICAgfTsKLX0pOwpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2pzL3NlcnZpY2VzL3RvZG9TdG9yYWdlLmpzIGIv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2pzL3NlcnZpY2VzL3RvZG9TdG9yYWdlLmpzCmluZGV4IDc2
N2I3YjIyZWQzYzE0ZTE4NzI1NjNjNDg5MDg1ZTg1NmU1ODFmZmYuLmI2OGU1OTYyOGQxZDE2ZmYw
YWNmNWExNzJkZTFhOTM0MDg2MGFjMWMgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJq
cy9qcy9zZXJ2aWNlcy90b2RvU3RvcmFnZS5qcworKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMv
anMvc2VydmljZXMvdG9kb1N0b3JhZ2UuanMKQEAgLTEsMjQgKzEsOTYgQEAKLS8qZ2xvYmFsIHRv
ZG9tdmMgKi8KLSd1c2Ugc3RyaWN0JzsKKy8qZ2xvYmFsIGFuZ3VsYXIgKi8KIAogLyoqCi0gKiBT
ZXJ2aWNlcyB0aGF0IHBlcnNpc3RzIGFuZCByZXRyaWV2ZXMgVE9ET3MgZnJvbSBsb2NhbFN0b3Jh
Z2UKKyAqIFNlcnZpY2VzIHRoYXQgcGVyc2lzdHMgYW5kIHJldHJpZXZlcyB0b2RvcyBmcm9tIG1l
bW9yeSBvciBhIGJhY2tlbmQgQVBJCisgKiBpZiBhdmFpbGFibGUuCisgKgorICogVGhleSBib3Ro
IGZvbGxvdyB0aGUgc2FtZSBBUEksIHJldHVybmluZyBwcm9taXNlcyBmb3IgYWxsIGNoYW5nZXMg
dG8gdGhlCisgKiBtb2RlbC4KICAqLwotdG9kb212Yy5mYWN0b3J5KCd0b2RvU3RvcmFnZScsIGZ1
bmN0aW9uICgpIHsKLSAgICB2YXIgU1RPUkFHRV9JRCA9ICd0b2Rvcy1hbmd1bGFyanMnOwotCi0g
ICAgdmFyIGxvY2FsU3RvcmFnZSA9IHsKLSAgICAgICAgZ2V0SXRlbTogZnVuY3Rpb24gKGlkKSB7
IHRoaXNbaWRdOyB9LAotICAgICAgICBzZXRJdGVtOiBmdW5jdGlvbiAoaWQsIHZhbHVlKSB7IHRo
aXNbaWRdID0gdmFsdWU7IH0KLSAgICB9OwotCi0gICAgcmV0dXJuIHsKLSAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKLSAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTVE9S
QUdFX0lEKSB8fCAnW10nKTsKLSAgICB9LAotCi0gICAgcHV0OiBmdW5jdGlvbiAodG9kb3MpIHsK
LSAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0lELCBKU09OLnN0cmluZ2lmeSh0b2Rv
cykpOwotICAgIH0KLSAgICB9OwotfSk7Cithbmd1bGFyLm1vZHVsZSgndG9kb212YycpCisgICAg
LmZhY3RvcnkoJ3RvZG9TdG9yYWdlJywgZnVuY3Rpb24gKCRodHRwLCAkaW5qZWN0b3IpIHsKKyAg
ICAgICAgJ3VzZSBzdHJpY3QnOworICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhl
bihmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiAkaW5qZWN0b3IuZ2V0KCdsb2NhbENh
Y2hlJyk7CisgICAgICAgIH0pOworICAgIH0pCisKKyAgICAuZmFjdG9yeSgnbG9jYWxDYWNoZScs
IGZ1bmN0aW9uICgkcSkgeworICAgICAgICAndXNlIHN0cmljdCc7CisKKyAgICAgICAgdmFyIFNU
T1JBR0VfSUQgPSAndG9kb3MtYW5ndWxhcmpzJzsKKworICAgICAgICB2YXIgc3RvcmUgPSB7Cisg
ICAgICAgICAgICB0b2RvczogW10sCisgICAgICAgICAgICBjYWNoZTogW10sCisKKyAgICAgICAg
ICAgIF9nZXRGcm9tTG9jYWxDYWNoZTogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIC8v
IHJldHVybiBKU09OLnBhcnNlKHRoaXMuY2FjaGVbU1RPUkFHRV9JRF0gfHwgJ1tdJyk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIFtdOworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgX3Nh
dmVUb0xvY2FsQ2FjaGU6IGZ1bmN0aW9uICh0b2RvcykgeworICAgICAgICAgICAgICAgIC8vIHRo
aXMuY2FjaGVbU1RPUkFHRV9JRF0gPSBKU09OLnN0cmluZ2lmeSh0b2Rvcyk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgY2xlYXJDb21wbGV0
ZWQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICB2YXIgZGVmZXJyZWQgPSAkcS5kZWZl
cigpOworCisgICAgICAgICAgICAgICAgdmFyIGluY29tcGxldGVUb2RvcyA9IHN0b3JlLnRvZG9z
LmZpbHRlcihmdW5jdGlvbiAodG9kbykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gIXRv
ZG8uY29tcGxldGVkOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgYW5n
dWxhci5jb3B5KGluY29tcGxldGVUb2Rvcywgc3RvcmUudG9kb3MpOworCisgICAgICAgICAgICAg
ICAgc3RvcmUuX3NhdmVUb0xvY2FsQ2FjaGUoc3RvcmUudG9kb3MpOworICAgICAgICAgICAgICAg
IGRlZmVycmVkLnJlc29sdmUoc3RvcmUudG9kb3MpOworCisgICAgICAgICAgICAgICAgcmV0dXJu
IGRlZmVycmVkLnByb21pc2U7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICBkZWxldGU6
IGZ1bmN0aW9uICh0b2RvKSB7CisgICAgICAgICAgICAgICAgdmFyIGRlZmVycmVkID0gJHEuZGVm
ZXIoKTsKKworICAgICAgICAgICAgICAgIHN0b3JlLnRvZG9zLnNwbGljZShzdG9yZS50b2Rvcy5p
bmRleE9mKHRvZG8pLCAxKTsKKworICAgICAgICAgICAgICAgIHN0b3JlLl9zYXZlVG9Mb2NhbENh
Y2hlKHN0b3JlLnRvZG9zKTsKKyAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKHN0b3Jl
LnRvZG9zKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZC5wcm9taXNlOworICAg
ICAgICAgICAgfSwKKworICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICAgICAgdmFyIGRlZmVycmVkID0gJHEuZGVmZXIoKTsKKworICAgICAgICAgICAgICAgIGFuZ3Vs
YXIuY29weShzdG9yZS5fZ2V0RnJvbUxvY2FsQ2FjaGUoKSwgc3RvcmUudG9kb3MpOworICAgICAg
ICAgICAgICAgIGRlZmVycmVkLnJlc29sdmUoc3RvcmUudG9kb3MpOworCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGRlZmVycmVkLnByb21pc2U7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAg
ICBpbnNlcnQ6IGZ1bmN0aW9uICh0b2RvKSB7CisgICAgICAgICAgICAgICAgdmFyIGRlZmVycmVk
ID0gJHEuZGVmZXIoKTsKKworICAgICAgICAgICAgICAgIHN0b3JlLnRvZG9zLnB1c2godG9kbyk7
CisKKyAgICAgICAgICAgICAgICBzdG9yZS5fc2F2ZVRvTG9jYWxDYWNoZShzdG9yZS50b2Rvcyk7
CisgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZShzdG9yZS50b2Rvcyk7CisKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQucHJvbWlzZTsKKyAgICAgICAgICAgIH0sCisKKyAg
ICAgICAgICAgIHB1dDogZnVuY3Rpb24gKHRvZG8sIGluZGV4KSB7CisgICAgICAgICAgICAgICAg
dmFyIGRlZmVycmVkID0gJHEuZGVmZXIoKTsKKworICAgICAgICAgICAgICAgIHN0b3JlLnRvZG9z
W2luZGV4XSA9IHRvZG87CisKKyAgICAgICAgICAgICAgICBzdG9yZS5fc2F2ZVRvTG9jYWxDYWNo
ZShzdG9yZS50b2Rvcyk7CisgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZShzdG9yZS50
b2Rvcyk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQucHJvbWlzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICByZXR1cm4gc3RvcmU7CisgICAgfSk7CmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvbm9kZV9tb2R1bGVzL2FuZ3VsYXItcmVz
b3VyY2UvYW5ndWxhci1yZXNvdXJjZS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9ub2RlX21v
ZHVsZXMvYW5ndWxhci1yZXNvdXJjZS9hbmd1bGFyLXJlc291cmNlLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZj
NDFjMzlhNTdiMGY0YmFiNjM2ZWYyNWExNWU4YmIzNWVjOWQwN2UKLS0tIC9kZXYvbnVsbAorKysg
Yi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9hbmd1bGFyanMvbm9kZV9tb2R1bGVzL2FuZ3VsYXItcmVzb3VyY2UvYW5n
dWxhci1yZXNvdXJjZS5qcwpAQCAtMCwwICsxLDg2MSBAQAorLyoqCisgKiBAbGljZW5zZSBBbmd1
bGFySlMgdjEuNS45CisgKiAoYykgMjAxMC0yMDE2IEdvb2dsZSwgSW5jLiBodHRwOi8vYW5ndWxh
cmpzLm9yZworICogTGljZW5zZTogTUlUCisgKi8KKyhmdW5jdGlvbih3aW5kb3csIGFuZ3VsYXIp
IHsndXNlIHN0cmljdCc7CisKK3ZhciAkcmVzb3VyY2VNaW5FcnIgPSBhbmd1bGFyLiQkbWluRXJy
KCckcmVzb3VyY2UnKTsKKworLy8gSGVscGVyIGZ1bmN0aW9ucyBhbmQgcmVnZXggdG8gbG9va3Vw
IGEgZG90dGVkIHBhdGggb24gYW4gb2JqZWN0CisvLyBzdG9wcGluZyBhdCB1bmRlZmluZWQvbnVs
bC4gIFRoZSBwYXRoIG11c3QgYmUgY29tcG9zZWQgb2YgQVNDSUkKKy8vIGlkZW50aWZpZXJzIChq
dXN0IGxpa2UgJHBhcnNlKQordmFyIE1FTUJFUl9OQU1FX1JFR0VYID0gL14oXC5bYS16QS1aXyRA
XVswLTlhLXpBLVpfJEBdKikrJC87CisKK2Z1bmN0aW9uIGlzVmFsaWREb3R0ZWRQYXRoKHBhdGgp
IHsKKyAgcmV0dXJuIChwYXRoICE9IG51bGwgJiYgcGF0aCAhPT0gJycgJiYgcGF0aCAhPT0gJ2hh
c093blByb3BlcnR5JyAmJgorICAgICAgTUVNQkVSX05BTUVfUkVHRVgudGVzdCgnLicgKyBwYXRo
KSk7Cit9CisKK2Z1bmN0aW9uIGxvb2t1cERvdHRlZFBhdGgob2JqLCBwYXRoKSB7CisgIGlmICgh
aXNWYWxpZERvdHRlZFBhdGgocGF0aCkpIHsKKyAgICB0aHJvdyAkcmVzb3VyY2VNaW5FcnIoJ2Jh
ZG1lbWJlcicsICdEb3R0ZWQgbWVtYmVyIHBhdGggIkB7MH0iIGlzIGludmFsaWQuJywgcGF0aCk7
CisgIH0KKyAgdmFyIGtleXMgPSBwYXRoLnNwbGl0KCcuJyk7CisgIGZvciAodmFyIGkgPSAwLCBp
aSA9IGtleXMubGVuZ3RoOyBpIDwgaWkgJiYgYW5ndWxhci5pc0RlZmluZWQob2JqKTsgaSsrKSB7
CisgICAgdmFyIGtleSA9IGtleXNbaV07CisgICAgb2JqID0gKG9iaiAhPT0gbnVsbCkgPyBvYmpb
a2V5XSA6IHVuZGVmaW5lZDsKKyAgfQorICByZXR1cm4gb2JqOworfQorCisvKioKKyAqIENyZWF0
ZSBhIHNoYWxsb3cgY29weSBvZiBhbiBvYmplY3QgYW5kIGNsZWFyIG90aGVyIGZpZWxkcyBmcm9t
IHRoZSBkZXN0aW5hdGlvbgorICovCitmdW5jdGlvbiBzaGFsbG93Q2xlYXJBbmRDb3B5KHNyYywg
ZHN0KSB7CisgIGRzdCA9IGRzdCB8fCB7fTsKKworICBhbmd1bGFyLmZvckVhY2goZHN0LCBmdW5j
dGlvbih2YWx1ZSwga2V5KSB7CisgICAgZGVsZXRlIGRzdFtrZXldOworICB9KTsKKworICBmb3Ig
KHZhciBrZXkgaW4gc3JjKSB7CisgICAgaWYgKHNyYy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICEo
a2V5LmNoYXJBdCgwKSA9PT0gJyQnICYmIGtleS5jaGFyQXQoMSkgPT09ICckJykpIHsKKyAgICAg
IGRzdFtrZXldID0gc3JjW2tleV07CisgICAgfQorICB9CisKKyAgcmV0dXJuIGRzdDsKK30KKwor
LyoqCisgKiBAbmdkb2MgbW9kdWxlCisgKiBAbmFtZSBuZ1Jlc291cmNlCisgKiBAZGVzY3JpcHRp
b24KKyAqCisgKiAjIG5nUmVzb3VyY2UKKyAqCisgKiBUaGUgYG5nUmVzb3VyY2VgIG1vZHVsZSBw
cm92aWRlcyBpbnRlcmFjdGlvbiBzdXBwb3J0IHdpdGggUkVTVGZ1bCBzZXJ2aWNlcworICogdmlh
IHRoZSAkcmVzb3VyY2Ugc2VydmljZS4KKyAqCisgKgorICogPGRpdiBkb2MtbW9kdWxlLWNvbXBv
bmVudHM9Im5nUmVzb3VyY2UiPjwvZGl2PgorICoKKyAqIFNlZSB7QGxpbmsgbmdSZXNvdXJjZS4k
cmVzb3VyY2VQcm92aWRlcn0gYW5kIHtAbGluayBuZ1Jlc291cmNlLiRyZXNvdXJjZX0gZm9yIHVz
YWdlLgorICovCisKKy8qKgorICogQG5nZG9jIHByb3ZpZGVyCisgKiBAbmFtZSAkcmVzb3VyY2VQ
cm92aWRlcgorICoKKyAqIEBkZXNjcmlwdGlvbgorICoKKyAqIFVzZSBgJHJlc291cmNlUHJvdmlk
ZXJgIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUge0BsaW5rIG5nUmVzb3Vy
Y2UuJHJlc291cmNlfQorICogc2VydmljZS4KKyAqCisgKiAjIyBEZXBlbmRlbmNpZXMKKyAqIFJl
cXVpcmVzIHRoZSB7QGxpbmsgbmdSZXNvdXJjZSB9IG1vZHVsZSB0byBiZSBpbnN0YWxsZWQuCisg
KgorICovCisKKy8qKgorICogQG5nZG9jIHNlcnZpY2UKKyAqIEBuYW1lICRyZXNvdXJjZQorICog
QHJlcXVpcmVzICRodHRwCisgKiBAcmVxdWlyZXMgbmcuJGxvZworICogQHJlcXVpcmVzICRxCisg
KiBAcmVxdWlyZXMgbmcuJHRpbWVvdXQKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIEEgZmFjdG9y
eSB3aGljaCBjcmVhdGVzIGEgcmVzb3VyY2Ugb2JqZWN0IHRoYXQgbGV0cyB5b3UgaW50ZXJhY3Qg
d2l0aAorICogW1JFU1RmdWxdKGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUmVwcmVzZW50
YXRpb25hbF9TdGF0ZV9UcmFuc2Zlcikgc2VydmVyLXNpZGUgZGF0YSBzb3VyY2VzLgorICoKKyAq
IFRoZSByZXR1cm5lZCByZXNvdXJjZSBvYmplY3QgaGFzIGFjdGlvbiBtZXRob2RzIHdoaWNoIHBy
b3ZpZGUgaGlnaC1sZXZlbCBiZWhhdmlvcnMgd2l0aG91dAorICogdGhlIG5lZWQgdG8gaW50ZXJh
Y3Qgd2l0aCB0aGUgbG93IGxldmVsIHtAbGluayBuZy4kaHR0cCAkaHR0cH0gc2VydmljZS4KKyAq
CisgKiBSZXF1aXJlcyB0aGUge0BsaW5rIG5nUmVzb3VyY2UgYG5nUmVzb3VyY2VgfSBtb2R1bGUg
dG8gYmUgaW5zdGFsbGVkLgorICoKKyAqIEJ5IGRlZmF1bHQsIHRyYWlsaW5nIHNsYXNoZXMgd2ls
bCBiZSBzdHJpcHBlZCBmcm9tIHRoZSBjYWxjdWxhdGVkIFVSTHMsCisgKiB3aGljaCBjYW4gcG9z
ZSBwcm9ibGVtcyB3aXRoIHNlcnZlciBiYWNrZW5kcyB0aGF0IGRvIG5vdCBleHBlY3QgdGhhdAor
ICogYmVoYXZpb3IuICBUaGlzIGNhbiBiZSBkaXNhYmxlZCBieSBjb25maWd1cmluZyB0aGUgYCRy
ZXNvdXJjZVByb3ZpZGVyYCBsaWtlCisgKiB0aGlzOgorICoKKyAqIGBgYGpzCisgICAgIGFwcC5j
b25maWcoWyckcmVzb3VyY2VQcm92aWRlcicsIGZ1bmN0aW9uKCRyZXNvdXJjZVByb3ZpZGVyKSB7
CisgICAgICAgLy8gRG9uJ3Qgc3RyaXAgdHJhaWxpbmcgc2xhc2hlcyBmcm9tIGNhbGN1bGF0ZWQg
VVJMcworICAgICAgICRyZXNvdXJjZVByb3ZpZGVyLmRlZmF1bHRzLnN0cmlwVHJhaWxpbmdTbGFz
aGVzID0gZmFsc2U7CisgICAgIH1dKTsKKyAqIGBgYAorICoKKyAqIEBwYXJhbSB7c3RyaW5nfSB1
cmwgQSBwYXJhbWV0ZXJpemVkIFVSTCB0ZW1wbGF0ZSB3aXRoIHBhcmFtZXRlcnMgcHJlZml4ZWQg
YnkgYDpgIGFzIGluCisgKiAgIGAvdXNlci86dXNlcm5hbWVgLiBJZiB5b3UgYXJlIHVzaW5nIGEg
VVJMIHdpdGggYSBwb3J0IG51bWJlciAoZS5nLgorICogICBgaHR0cDovL2V4YW1wbGUuY29tOjgw
ODAvYXBpYCksIGl0IHdpbGwgYmUgcmVzcGVjdGVkLgorICoKKyAqICAgSWYgeW91IGFyZSB1c2lu
ZyBhIHVybCB3aXRoIGEgc3VmZml4LCBqdXN0IGFkZCB0aGUgc3VmZml4LCBsaWtlIHRoaXM6Cisg
KiAgIGAkcmVzb3VyY2UoJ2h0dHA6Ly9leGFtcGxlLmNvbS9yZXNvdXJjZS5qc29uJylgIG9yIGAk
cmVzb3VyY2UoJ2h0dHA6Ly9leGFtcGxlLmNvbS86aWQuanNvbicpYAorICogICBvciBldmVuIGAk
cmVzb3VyY2UoJ2h0dHA6Ly9leGFtcGxlLmNvbS9yZXNvdXJjZS86cmVzb3VyY2VfaWQuOmZvcm1h
dCcpYAorICogICBJZiB0aGUgcGFyYW1ldGVyIGJlZm9yZSB0aGUgc3VmZml4IGlzIGVtcHR5LCA6
cmVzb3VyY2VfaWQgaW4gdGhpcyBjYXNlLCB0aGVuIHRoZSBgLy5gIHdpbGwgYmUKKyAqICAgY29s
bGFwc2VkIGRvd24gdG8gYSBzaW5nbGUgYC5gLiAgSWYgeW91IG5lZWQgdGhpcyBzZXF1ZW5jZSB0
byBhcHBlYXIgYW5kIG5vdCBjb2xsYXBzZSB0aGVuIHlvdQorICogICBjYW4gZXNjYXBlIGl0IHdp
dGggYC9cLmAuCisgKgorICogQHBhcmFtIHtPYmplY3Q9fSBwYXJhbURlZmF1bHRzIERlZmF1bHQg
dmFsdWVzIGZvciBgdXJsYCBwYXJhbWV0ZXJzLiBUaGVzZSBjYW4gYmUgb3ZlcnJpZGRlbiBpbgor
ICogICBgYWN0aW9uc2AgbWV0aG9kcy4gSWYgYSBwYXJhbWV0ZXIgdmFsdWUgaXMgYSBmdW5jdGlv
biwgaXQgd2lsbCBiZSBjYWxsZWQgZXZlcnkgdGltZQorICogICBhIHBhcmFtIHZhbHVlIG5lZWRz
IHRvIGJlIG9idGFpbmVkIGZvciBhIHJlcXVlc3QgKHVubGVzcyB0aGUgcGFyYW0gd2FzIG92ZXJy
aWRkZW4pLiBUaGUgZnVuY3Rpb24KKyAqICAgd2lsbCBiZSBwYXNzZWQgdGhlIGN1cnJlbnQgZGF0
YSB2YWx1ZSBhcyBhbiBhcmd1bWVudC4KKyAqCisgKiAgIEVhY2gga2V5IHZhbHVlIGluIHRoZSBw
YXJhbWV0ZXIgb2JqZWN0IGlzIGZpcnN0IGJvdW5kIHRvIHVybCB0ZW1wbGF0ZSBpZiBwcmVzZW50
IGFuZCB0aGVuIGFueQorICogICBleGNlc3Mga2V5cyBhcmUgYXBwZW5kZWQgdG8gdGhlIHVybCBz
ZWFyY2ggcXVlcnkgYWZ0ZXIgdGhlIGA/YC4KKyAqCisgKiAgIEdpdmVuIGEgdGVtcGxhdGUgYC9w
YXRoLzp2ZXJiYCBhbmQgcGFyYW1ldGVyIGB7dmVyYjonZ3JlZXQnLCBzYWx1dGF0aW9uOidIZWxs
byd9YCByZXN1bHRzIGluCisgKiAgIFVSTCBgL3BhdGgvZ3JlZXQ/c2FsdXRhdGlvbj1IZWxsb2Au
CisgKgorICogICBJZiB0aGUgcGFyYW1ldGVyIHZhbHVlIGlzIHByZWZpeGVkIHdpdGggYEBgLCB0
aGVuIHRoZSB2YWx1ZSBmb3IgdGhhdCBwYXJhbWV0ZXIgd2lsbCBiZQorICogICBleHRyYWN0ZWQg
ZnJvbSB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSBvbiB0aGUgYGRhdGFgIG9iamVjdCAocHJv
dmlkZWQgd2hlbiBjYWxsaW5nIGEKKyAqICAgIm5vbi1HRVQiIGFjdGlvbiBtZXRob2QpLgorICog
ICBGb3IgZXhhbXBsZSwgaWYgdGhlIGBkZWZhdWx0UGFyYW1gIG9iamVjdCBpcyBge3NvbWVQYXJh
bTogJ0Bzb21lUHJvcCd9YCB0aGVuIHRoZSB2YWx1ZSBvZgorICogICBgc29tZVBhcmFtYCB3aWxs
IGJlIGBkYXRhLnNvbWVQcm9wYC4KKyAqICAgTm90ZSB0aGF0IHRoZSBwYXJhbWV0ZXIgd2lsbCBi
ZSBpZ25vcmVkLCB3aGVuIGNhbGxpbmcgYSAiR0VUIiBhY3Rpb24gbWV0aG9kIChpLmUuIGFuIGFj
dGlvbgorICogICBtZXRob2QgdGhhdCBkb2VzIG5vdCBhY2NlcHQgYSByZXF1ZXN0IGJvZHkpCisg
KgorICogQHBhcmFtIHtPYmplY3QuPE9iamVjdD49fSBhY3Rpb25zIEhhc2ggd2l0aCBkZWNsYXJh
dGlvbiBvZiBjdXN0b20gYWN0aW9ucyB0aGF0IHNob3VsZCBleHRlbmQKKyAqICAgdGhlIGRlZmF1
bHQgc2V0IG9mIHJlc291cmNlIGFjdGlvbnMuIFRoZSBkZWNsYXJhdGlvbiBzaG91bGQgYmUgY3Jl
YXRlZCBpbiB0aGUgZm9ybWF0IG9mIHtAbGluaworICogICBuZy4kaHR0cCN1c2FnZSAkaHR0cC5j
b25maWd9OgorICoKKyAqICAgICAgIHthY3Rpb24xOiB7bWV0aG9kOj8sIHBhcmFtczo/LCBpc0Fy
cmF5Oj8sIGhlYWRlcnM6PywgLi4ufSwKKyAqICAgICAgICBhY3Rpb24yOiB7bWV0aG9kOj8sIHBh
cmFtczo/LCBpc0FycmF5Oj8sIGhlYWRlcnM6PywgLi4ufSwKKyAqICAgICAgICAuLi59CisgKgor
ICogICBXaGVyZToKKyAqCisgKiAgIC0gKipgYWN0aW9uYCoqIOKAkyB7c3RyaW5nfSDigJMgVGhl
IG5hbWUgb2YgYWN0aW9uLiBUaGlzIG5hbWUgYmVjb21lcyB0aGUgbmFtZSBvZiB0aGUgbWV0aG9k
IG9uCisgKiAgICAgeW91ciByZXNvdXJjZSBvYmplY3QuCisgKiAgIC0gKipgbWV0aG9kYCoqIOKA
kyB7c3RyaW5nfSDigJMgQ2FzZSBpbnNlbnNpdGl2ZSBIVFRQIG1ldGhvZCAoZS5nLiBgR0VUYCwg
YFBPU1RgLCBgUFVUYCwKKyAqICAgICBgREVMRVRFYCwgYEpTT05QYCwgZXRjKS4KKyAqICAgLSAq
KmBwYXJhbXNgKiog4oCTIHtPYmplY3Q9fSDigJMgT3B0aW9uYWwgc2V0IG9mIHByZS1ib3VuZCBw
YXJhbWV0ZXJzIGZvciB0aGlzIGFjdGlvbi4gSWYgYW55IG9mCisgKiAgICAgdGhlIHBhcmFtZXRl
ciB2YWx1ZSBpcyBhIGZ1bmN0aW9uLCBpdCB3aWxsIGJlIGNhbGxlZCBldmVyeSB0aW1lIHdoZW4g
YSBwYXJhbSB2YWx1ZSBuZWVkcyB0bworICogICAgIGJlIG9idGFpbmVkIGZvciBhIHJlcXVlc3Qg
KHVubGVzcyB0aGUgcGFyYW0gd2FzIG92ZXJyaWRkZW4pLiBUaGUgZnVuY3Rpb24gd2lsbCBiZSBw
YXNzZWQgdGhlCisgKiAgICAgY3VycmVudCBkYXRhIHZhbHVlIGFzIGFuIGFyZ3VtZW50LgorICog
ICAtICoqYHVybGAqKiDigJMge3N0cmluZ30g4oCTIGFjdGlvbiBzcGVjaWZpYyBgdXJsYCBvdmVy
cmlkZS4gVGhlIHVybCB0ZW1wbGF0aW5nIGlzIHN1cHBvcnRlZCBqdXN0CisgKiAgICAgbGlrZSBm
b3IgdGhlIHJlc291cmNlLWxldmVsIHVybHMuCisgKiAgIC0gKipgaXNBcnJheWAqKiDigJMge2Jv
b2xlYW49fSDigJMgSWYgdHJ1ZSB0aGVuIHRoZSByZXR1cm5lZCBvYmplY3QgZm9yIHRoaXMgYWN0
aW9uIGlzIGFuIGFycmF5LAorICogICAgIHNlZSBgcmV0dXJuc2Agc2VjdGlvbi4KKyAqICAgLSAq
KmB0cmFuc2Zvcm1SZXF1ZXN0YCoqIOKAkworICogICAgIGB7ZnVuY3Rpb24oZGF0YSwgaGVhZGVy
c0dldHRlcil8QXJyYXkuPGZ1bmN0aW9uKGRhdGEsIGhlYWRlcnNHZXR0ZXIpPn1gIOKAkworICog
ICAgIHRyYW5zZm9ybSBmdW5jdGlvbiBvciBhbiBhcnJheSBvZiBzdWNoIGZ1bmN0aW9ucy4gVGhl
IHRyYW5zZm9ybSBmdW5jdGlvbiB0YWtlcyB0aGUgaHR0cAorICogICAgIHJlcXVlc3QgYm9keSBh
bmQgaGVhZGVycyBhbmQgcmV0dXJucyBpdHMgdHJhbnNmb3JtZWQgKHR5cGljYWxseSBzZXJpYWxp
emVkKSB2ZXJzaW9uLgorICogICAgIEJ5IGRlZmF1bHQsIHRyYW5zZm9ybVJlcXVlc3Qgd2lsbCBj
b250YWluIG9uZSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGUgcmVxdWVzdCBkYXRhIGlzCisg
KiAgICAgYW4gb2JqZWN0IGFuZCBzZXJpYWxpemVzIHRvIHVzaW5nIGBhbmd1bGFyLnRvSnNvbmAu
IFRvIHByZXZlbnQgdGhpcyBiZWhhdmlvciwgc2V0CisgKiAgICAgYHRyYW5zZm9ybVJlcXVlc3Rg
IHRvIGFuIGVtcHR5IGFycmF5OiBgdHJhbnNmb3JtUmVxdWVzdDogW11gCisgKiAgIC0gKipgdHJh
bnNmb3JtUmVzcG9uc2VgKiog4oCTCisgKiAgICAgYHtmdW5jdGlvbihkYXRhLCBoZWFkZXJzR2V0
dGVyKXxBcnJheS48ZnVuY3Rpb24oZGF0YSwgaGVhZGVyc0dldHRlcik+fWAg4oCTCisgKiAgICAg
dHJhbnNmb3JtIGZ1bmN0aW9uIG9yIGFuIGFycmF5IG9mIHN1Y2ggZnVuY3Rpb25zLiBUaGUgdHJh
bnNmb3JtIGZ1bmN0aW9uIHRha2VzIHRoZSBodHRwCisgKiAgICAgcmVzcG9uc2UgYm9keSBhbmQg
aGVhZGVycyBhbmQgcmV0dXJucyBpdHMgdHJhbnNmb3JtZWQgKHR5cGljYWxseSBkZXNlcmlhbGl6
ZWQpIHZlcnNpb24uCisgKiAgICAgQnkgZGVmYXVsdCwgdHJhbnNmb3JtUmVzcG9uc2Ugd2lsbCBj
b250YWluIG9uZSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGUgcmVzcG9uc2UgbG9va3MKKyAq
ICAgICBsaWtlIGEgSlNPTiBzdHJpbmcgYW5kIGRlc2VyaWFsaXplcyBpdCB1c2luZyBgYW5ndWxh
ci5mcm9tSnNvbmAuIFRvIHByZXZlbnQgdGhpcyBiZWhhdmlvciwKKyAqICAgICBzZXQgYHRyYW5z
Zm9ybVJlc3BvbnNlYCB0byBhbiBlbXB0eSBhcnJheTogYHRyYW5zZm9ybVJlc3BvbnNlOiBbXWAK
KyAqICAgLSAqKmBjYWNoZWAqKiDigJMgYHtib29sZWFufENhY2hlfWAg4oCTIElmIHRydWUsIGEg
ZGVmYXVsdCAkaHR0cCBjYWNoZSB3aWxsIGJlIHVzZWQgdG8gY2FjaGUgdGhlCisgKiAgICAgR0VU
IHJlcXVlc3QsIG90aGVyd2lzZSBpZiBhIGNhY2hlIGluc3RhbmNlIGJ1aWx0IHdpdGgKKyAqICAg
ICB7QGxpbmsgbmcuJGNhY2hlRmFjdG9yeSAkY2FjaGVGYWN0b3J5fSwgdGhpcyBjYWNoZSB3aWxs
IGJlIHVzZWQgZm9yCisgKiAgICAgY2FjaGluZy4KKyAqICAgLSAqKmB0aW1lb3V0YCoqIOKAkyBg
e251bWJlcn1gIOKAkyB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy48YnIgLz4KKyAqICAgICAqKk5v
dGU6KiogSW4gY29udHJhc3QgdG8ge0BsaW5rIG5nLiRodHRwI3VzYWdlICRodHRwLmNvbmZpZ30s
IHtAbGluayBuZy4kcSBwcm9taXNlc30gYXJlCisgKiAgICAgKipub3QqKiBzdXBwb3J0ZWQgaW4g
JHJlc291cmNlLCBiZWNhdXNlIHRoZSBzYW1lIHZhbHVlIHdvdWxkIGJlIHVzZWQgZm9yIG11bHRp
cGxlIHJlcXVlc3RzLgorICogICAgIElmIHlvdSBhcmUgbG9va2luZyBmb3IgYSB3YXkgdG8gY2Fu
Y2VsIHJlcXVlc3RzLCB5b3Ugc2hvdWxkIHVzZSB0aGUgYGNhbmNlbGxhYmxlYCBvcHRpb24uCisg
KiAgIC0gKipgY2FuY2VsbGFibGVgKiog4oCTIGB7Ym9vbGVhbn1gIOKAkyBpZiBzZXQgdG8gdHJ1
ZSwgdGhlIHJlcXVlc3QgbWFkZSBieSBhICJub24taW5zdGFuY2UiIGNhbGwKKyAqICAgICB3aWxs
IGJlIGNhbmNlbGxlZCAoaWYgbm90IGFscmVhZHkgY29tcGxldGVkKSBieSBjYWxsaW5nIGAkY2Fu
Y2VsUmVxdWVzdCgpYCBvbiB0aGUgY2FsbCdzCisgKiAgICAgcmV0dXJuIHZhbHVlLiBDYWxsaW5n
IGAkY2FuY2VsUmVxdWVzdCgpYCBmb3IgYSBub24tY2FuY2VsbGFibGUgb3IgYW4gYWxyZWFkeQor
ICogICAgIGNvbXBsZXRlZC9jYW5jZWxsZWQgcmVxdWVzdCB3aWxsIGhhdmUgbm8gZWZmZWN0Ljxi
ciAvPgorICogICAtICoqYHdpdGhDcmVkZW50aWFsc2AqKiAtIGB7Ym9vbGVhbn1gIC0gd2hldGhl
ciB0byBzZXQgdGhlIGB3aXRoQ3JlZGVudGlhbHNgIGZsYWcgb24gdGhlCisgKiAgICAgWEhSIG9i
amVjdC4gU2VlCisgKiAgICAgW3JlcXVlc3RzIHdpdGggY3JlZGVudGlhbHNdKGh0dHBzOi8vZGV2
ZWxvcGVyLm1vemlsbGEub3JnL2VuL2h0dHBfYWNjZXNzX2NvbnRyb2wjc2VjdGlvbl81KQorICog
ICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICogICAtICoqYHJlc3BvbnNlVHlwZWAqKiAtIGB7
c3RyaW5nfWAgLSBzZWUKKyAqICAgICBbcmVxdWVzdFR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1v
emlsbGEub3JnL2VuLVVTL2RvY3MvRE9NL1hNTEh0dHBSZXF1ZXN0I3Jlc3BvbnNlVHlwZSkuCisg
KiAgIC0gKipgaW50ZXJjZXB0b3JgKiogLSBge09iamVjdD19YCAtIFRoZSBpbnRlcmNlcHRvciBv
YmplY3QgaGFzIHR3byBvcHRpb25hbCBtZXRob2RzIC0KKyAqICAgICBgcmVzcG9uc2VgIGFuZCBg
cmVzcG9uc2VFcnJvcmAuIEJvdGggYHJlc3BvbnNlYCBhbmQgYHJlc3BvbnNlRXJyb3JgIGludGVy
Y2VwdG9ycyBnZXQgY2FsbGVkCisgKiAgICAgd2l0aCBgaHR0cCByZXNwb25zZWAgb2JqZWN0LiBT
ZWUge0BsaW5rIG5nLiRodHRwICRodHRwIGludGVyY2VwdG9yc30uCisgKgorICogQHBhcmFtIHtP
YmplY3R9IG9wdGlvbnMgSGFzaCB3aXRoIGN1c3RvbSBzZXR0aW5ncyB0aGF0IHNob3VsZCBleHRl
bmQgdGhlCisgKiAgIGRlZmF1bHQgYCRyZXNvdXJjZVByb3ZpZGVyYCBiZWhhdmlvci4gIFRoZSBz
dXBwb3J0ZWQgb3B0aW9ucyBhcmU6CisgKgorICogICAtICoqYHN0cmlwVHJhaWxpbmdTbGFzaGVz
YCoqIOKAkyB7Ym9vbGVhbn0g4oCTIElmIHRydWUgdGhlbiB0aGUgdHJhaWxpbmcKKyAqICAgc2xh
c2hlcyBmcm9tIGFueSBjYWxjdWxhdGVkIFVSTCB3aWxsIGJlIHN0cmlwcGVkLiAoRGVmYXVsdHMg
dG8gdHJ1ZS4pCisgKiAgIC0gKipgY2FuY2VsbGFibGVgKiog4oCTIHtib29sZWFufSDigJMgSWYg
dHJ1ZSwgdGhlIHJlcXVlc3QgbWFkZSBieSBhICJub24taW5zdGFuY2UiIGNhbGwgd2lsbCBiZQor
ICogICBjYW5jZWxsZWQgKGlmIG5vdCBhbHJlYWR5IGNvbXBsZXRlZCkgYnkgY2FsbGluZyBgJGNh
bmNlbFJlcXVlc3QoKWAgb24gdGhlIGNhbGwncyByZXR1cm4gdmFsdWUuCisgKiAgIFRoaXMgY2Fu
IGJlIG92ZXJ3cml0dGVuIHBlciBhY3Rpb24uIChEZWZhdWx0cyB0byBmYWxzZS4pCisgKgorICog
QHJldHVybnMge09iamVjdH0gQSByZXNvdXJjZSAiY2xhc3MiIG9iamVjdCB3aXRoIG1ldGhvZHMg
Zm9yIHRoZSBkZWZhdWx0IHNldCBvZiByZXNvdXJjZSBhY3Rpb25zCisgKiAgIG9wdGlvbmFsbHkg
ZXh0ZW5kZWQgd2l0aCBjdXN0b20gYGFjdGlvbnNgLiBUaGUgZGVmYXVsdCBzZXQgY29udGFpbnMg
dGhlc2UgYWN0aW9uczoKKyAqICAgYGBganMKKyAqICAgeyAnZ2V0JzogICAge21ldGhvZDonR0VU
J30sCisgKiAgICAgJ3NhdmUnOiAgIHttZXRob2Q6J1BPU1QnfSwKKyAqICAgICAncXVlcnknOiAg
e21ldGhvZDonR0VUJywgaXNBcnJheTp0cnVlfSwKKyAqICAgICAncmVtb3ZlJzoge21ldGhvZDon
REVMRVRFJ30sCisgKiAgICAgJ2RlbGV0ZSc6IHttZXRob2Q6J0RFTEVURSd9IH07CisgKiAgIGBg
YAorICoKKyAqICAgQ2FsbGluZyB0aGVzZSBtZXRob2RzIGludm9rZSBhbiB7QGxpbmsgbmcuJGh0
dHB9IHdpdGggdGhlIHNwZWNpZmllZCBodHRwIG1ldGhvZCwKKyAqICAgZGVzdGluYXRpb24gYW5k
IHBhcmFtZXRlcnMuIFdoZW4gdGhlIGRhdGEgaXMgcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyIHRo
ZW4gdGhlIG9iamVjdCBpcyBhbgorICogICBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UgY2xhc3Mu
IFRoZSBhY3Rpb25zIGBzYXZlYCwgYHJlbW92ZWAgYW5kIGBkZWxldGVgIGFyZSBhdmFpbGFibGUg
b24gaXQKKyAqICAgYXMgIG1ldGhvZHMgd2l0aCB0aGUgYCRgIHByZWZpeC4gVGhpcyBhbGxvd3Mg
eW91IHRvIGVhc2lseSBwZXJmb3JtIENSVUQgb3BlcmF0aW9ucyAoY3JlYXRlLAorICogICByZWFk
LCB1cGRhdGUsIGRlbGV0ZSkgb24gc2VydmVyLXNpZGUgZGF0YSBsaWtlIHRoaXM6CisgKiAgIGBg
YGpzCisgKiAgIHZhciBVc2VyID0gJHJlc291cmNlKCcvdXNlci86dXNlcklkJywge3VzZXJJZDon
QGlkJ30pOworICogICB2YXIgdXNlciA9IFVzZXIuZ2V0KHt1c2VySWQ6MTIzfSwgZnVuY3Rpb24o
KSB7CisgKiAgICAgdXNlci5hYmMgPSB0cnVlOworICogICAgIHVzZXIuJHNhdmUoKTsKKyAqICAg
fSk7CisgKiAgIGBgYAorICoKKyAqICAgSXQgaXMgaW1wb3J0YW50IHRvIHJlYWxpemUgdGhhdCBp
bnZva2luZyBhICRyZXNvdXJjZSBvYmplY3QgbWV0aG9kIGltbWVkaWF0ZWx5IHJldHVybnMgYW4K
KyAqICAgZW1wdHkgcmVmZXJlbmNlIChvYmplY3Qgb3IgYXJyYXkgZGVwZW5kaW5nIG9uIGBpc0Fy
cmF5YCkuIE9uY2UgdGhlIGRhdGEgaXMgcmV0dXJuZWQgZnJvbSB0aGUKKyAqICAgc2VydmVyIHRo
ZSBleGlzdGluZyByZWZlcmVuY2UgaXMgcG9wdWxhdGVkIHdpdGggdGhlIGFjdHVhbCBkYXRhLiBU
aGlzIGlzIGEgdXNlZnVsIHRyaWNrIHNpbmNlCisgKiAgIHVzdWFsbHkgdGhlIHJlc291cmNlIGlz
IGFzc2lnbmVkIHRvIGEgbW9kZWwgd2hpY2ggaXMgdGhlbiByZW5kZXJlZCBieSB0aGUgdmlldy4g
SGF2aW5nIGFuIGVtcHR5CisgKiAgIG9iamVjdCByZXN1bHRzIGluIG5vIHJlbmRlcmluZywgb25j
ZSB0aGUgZGF0YSBhcnJpdmVzIGZyb20gdGhlIHNlcnZlciB0aGVuIHRoZSBvYmplY3QgaXMKKyAq
ICAgcG9wdWxhdGVkIHdpdGggdGhlIGRhdGEgYW5kIHRoZSB2aWV3IGF1dG9tYXRpY2FsbHkgcmUt
cmVuZGVycyBpdHNlbGYgc2hvd2luZyB0aGUgbmV3IGRhdGEuIFRoaXMKKyAqICAgbWVhbnMgdGhh
dCBpbiBtb3N0IGNhc2VzIG9uZSBuZXZlciBoYXMgdG8gd3JpdGUgYSBjYWxsYmFjayBmdW5jdGlv
biBmb3IgdGhlIGFjdGlvbiBtZXRob2RzLgorICoKKyAqICAgVGhlIGFjdGlvbiBtZXRob2RzIG9u
IHRoZSBjbGFzcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2JqZWN0IGNhbiBiZSBpbnZva2VkIHdpdGgg
dGhlIGZvbGxvd2luZworICogICBwYXJhbWV0ZXJzOgorICoKKyAqICAgLSBIVFRQIEdFVCAiY2xh
c3MiIGFjdGlvbnM6IGBSZXNvdXJjZS5hY3Rpb24oW3BhcmFtZXRlcnNdLCBbc3VjY2Vzc10sIFtl
cnJvcl0pYAorICogICAtIG5vbi1HRVQgImNsYXNzIiBhY3Rpb25zOiBgUmVzb3VyY2UuYWN0aW9u
KFtwYXJhbWV0ZXJzXSwgcG9zdERhdGEsIFtzdWNjZXNzXSwgW2Vycm9yXSlgCisgKiAgIC0gbm9u
LUdFVCBpbnN0YW5jZSBhY3Rpb25zOiAgYGluc3RhbmNlLiRhY3Rpb24oW3BhcmFtZXRlcnNdLCBb
c3VjY2Vzc10sIFtlcnJvcl0pYAorICoKKyAqCisgKiAgIFN1Y2Nlc3MgY2FsbGJhY2sgaXMgY2Fs
bGVkIHdpdGggKHZhbHVlLCByZXNwb25zZUhlYWRlcnMpIGFyZ3VtZW50cywgd2hlcmUgdGhlIHZh
bHVlIGlzCisgKiAgIHRoZSBwb3B1bGF0ZWQgcmVzb3VyY2UgaW5zdGFuY2Ugb3IgY29sbGVjdGlv
biBvYmplY3QuIFRoZSBlcnJvciBjYWxsYmFjayBpcyBjYWxsZWQKKyAqICAgd2l0aCAoaHR0cFJl
c3BvbnNlKSBhcmd1bWVudC4KKyAqCisgKiAgIENsYXNzIGFjdGlvbnMgcmV0dXJuIGVtcHR5IGlu
c3RhbmNlICh3aXRoIGFkZGl0aW9uYWwgcHJvcGVydGllcyBiZWxvdykuCisgKiAgIEluc3RhbmNl
IGFjdGlvbnMgcmV0dXJuIHByb21pc2Ugb2YgdGhlIGFjdGlvbi4KKyAqCisgKiAgIFRoZSBSZXNv
dXJjZSBpbnN0YW5jZXMgYW5kIGNvbGxlY3Rpb25zIGhhdmUgdGhlc2UgYWRkaXRpb25hbCBwcm9w
ZXJ0aWVzOgorICoKKyAqICAgLSBgJHByb21pc2VgOiB0aGUge0BsaW5rIG5nLiRxIHByb21pc2V9
IG9mIHRoZSBvcmlnaW5hbCBzZXJ2ZXIgaW50ZXJhY3Rpb24gdGhhdCBjcmVhdGVkIHRoaXMKKyAq
ICAgICBpbnN0YW5jZSBvciBjb2xsZWN0aW9uLgorICoKKyAqICAgICBPbiBzdWNjZXNzLCB0aGUg
cHJvbWlzZSBpcyByZXNvbHZlZCB3aXRoIHRoZSBzYW1lIHJlc291cmNlIGluc3RhbmNlIG9yIGNv
bGxlY3Rpb24gb2JqZWN0LAorICogICAgIHVwZGF0ZWQgd2l0aCBkYXRhIGZyb20gc2VydmVyLiBU
aGlzIG1ha2VzIGl0IGVhc3kgdG8gdXNlIGluCisgKiAgICAge0BsaW5rIG5nUm91dGUuJHJvdXRl
UHJvdmlkZXIgcmVzb2x2ZSBzZWN0aW9uIG9mICRyb3V0ZVByb3ZpZGVyLndoZW4oKX0gdG8gZGVm
ZXIgdmlldworICogICAgIHJlbmRlcmluZyB1bnRpbCB0aGUgcmVzb3VyY2UocykgYXJlIGxvYWRl
ZC4KKyAqCisgKiAgICAgT24gZmFpbHVyZSwgdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQgd2l0aCB0
aGUge0BsaW5rIG5nLiRodHRwIGh0dHAgcmVzcG9uc2V9IG9iamVjdCwgd2l0aG91dAorICogICAg
IHRoZSBgcmVzb3VyY2VgIHByb3BlcnR5LgorICoKKyAqICAgICBJZiBhbiBpbnRlcmNlcHRvciBv
YmplY3Qgd2FzIHByb3ZpZGVkLCB0aGUgcHJvbWlzZSB3aWxsIGluc3RlYWQgYmUgcmVzb2x2ZWQg
d2l0aCB0aGUgdmFsdWUKKyAqICAgICByZXR1cm5lZCBieSB0aGUgaW50ZXJjZXB0b3IuCisgKgor
ICogICAtIGAkcmVzb2x2ZWRgOiBgdHJ1ZWAgYWZ0ZXIgZmlyc3Qgc2VydmVyIGludGVyYWN0aW9u
IGlzIGNvbXBsZXRlZCAoZWl0aGVyIHdpdGggc3VjY2VzcyBvcgorICogICAgICByZWplY3Rpb24p
LCBgZmFsc2VgIGJlZm9yZSB0aGF0LiBLbm93aW5nIGlmIHRoZSBSZXNvdXJjZSBoYXMgYmVlbiBy
ZXNvbHZlZCBpcyB1c2VmdWwgaW4KKyAqICAgICAgZGF0YS1iaW5kaW5nLgorICoKKyAqICAgVGhl
IFJlc291cmNlIGluc3RhbmNlcyBhbmQgY29sbGVjdGlvbnMgaGF2ZSB0aGVzZSBhZGRpdGlvbmFs
IG1ldGhvZHM6CisgKgorICogICAtIGAkY2FuY2VsUmVxdWVzdGA6IElmIHRoZXJlIGlzIGEgY2Fu
Y2VsbGFibGUsIHBlbmRpbmcgcmVxdWVzdCByZWxhdGVkIHRvIHRoZSBpbnN0YW5jZSBvcgorICog
ICAgICBjb2xsZWN0aW9uLCBjYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgYWJvcnQgdGhlIHJlcXVl
c3QuCisgKgorICogICBUaGUgUmVzb3VyY2UgaW5zdGFuY2VzIGhhdmUgdGhlc2UgYWRkaXRpb25h
bCBtZXRob2RzOgorICoKKyAqICAgLSBgdG9KU09OYDogSXQgcmV0dXJucyBhIHNpbXBsZSBvYmpl
Y3Qgd2l0aG91dCBhbnkgb2YgdGhlIGV4dHJhIHByb3BlcnRpZXMgYWRkZWQgYXMgcGFydCBvZgor
ICogICAgIHRoZSBSZXNvdXJjZSBBUEkuIFRoaXMgb2JqZWN0IGNhbiBiZSBzZXJpYWxpemVkIHRo
cm91Z2gge0BsaW5rIGFuZ3VsYXIudG9Kc29ufSBzYWZlbHkKKyAqICAgICB3aXRob3V0IGF0dGFj
aGluZyBBbmd1bGFyLXNwZWNpZmljIGZpZWxkcy4gTm90aWNlIHRoYXQgYEpTT04uc3RyaW5naWZ5
YCAoYW5kCisgKiAgICAgYGFuZ3VsYXIudG9Kc29uYCkgYXV0b21hdGljYWxseSB1c2UgdGhpcyBt
ZXRob2Qgd2hlbiBzZXJpYWxpemluZyBhIFJlc291cmNlIGluc3RhbmNlCisgKiAgICAgKHNlZSBb
TUROXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2Ny
aXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9KU09OL3N0cmluZ2lmeSN0b0pTT04oKV9iZWhh
dmlvcikpLgorICoKKyAqIEBleGFtcGxlCisgKgorICogIyBDcmVkaXQgY2FyZCByZXNvdXJjZQor
ICoKKyAqIGBgYGpzCisgICAgIC8vIERlZmluZSBDcmVkaXRDYXJkIGNsYXNzCisgICAgIHZhciBD
cmVkaXRDYXJkID0gJHJlc291cmNlKCcvdXNlci86dXNlcklkL2NhcmQvOmNhcmRJZCcsCisgICAg
ICB7dXNlcklkOjEyMywgY2FyZElkOidAaWQnfSwgeworICAgICAgIGNoYXJnZToge21ldGhvZDon
UE9TVCcsIHBhcmFtczp7Y2hhcmdlOnRydWV9fQorICAgICAgfSk7CisKKyAgICAgLy8gV2UgY2Fu
IHJldHJpZXZlIGEgY29sbGVjdGlvbiBmcm9tIHRoZSBzZXJ2ZXIKKyAgICAgdmFyIGNhcmRzID0g
Q3JlZGl0Q2FyZC5xdWVyeShmdW5jdGlvbigpIHsKKyAgICAgICAvLyBHRVQ6IC91c2VyLzEyMy9j
YXJkCisgICAgICAgLy8gc2VydmVyIHJldHVybnM6IFsge2lkOjQ1NiwgbnVtYmVyOicxMjM0Jywg
bmFtZTonU21pdGgnfSBdOworCisgICAgICAgdmFyIGNhcmQgPSBjYXJkc1swXTsKKyAgICAgICAv
LyBlYWNoIGl0ZW0gaXMgYW4gaW5zdGFuY2Ugb2YgQ3JlZGl0Q2FyZAorICAgICAgIGV4cGVjdChj
YXJkIGluc3RhbmNlb2YgQ3JlZGl0Q2FyZCkudG9FcXVhbCh0cnVlKTsKKyAgICAgICBjYXJkLm5h
bWUgPSAiSi4gU21pdGgiOworICAgICAgIC8vIG5vbiBHRVQgbWV0aG9kcyBhcmUgbWFwcGVkIG9u
dG8gdGhlIGluc3RhbmNlcworICAgICAgIGNhcmQuJHNhdmUoKTsKKyAgICAgICAvLyBQT1NUOiAv
dXNlci8xMjMvY2FyZC80NTYge2lkOjQ1NiwgbnVtYmVyOicxMjM0JywgbmFtZTonSi4gU21pdGgn
fQorICAgICAgIC8vIHNlcnZlciByZXR1cm5zOiB7aWQ6NDU2LCBudW1iZXI6JzEyMzQnLCBuYW1l
OiAnSi4gU21pdGgnfTsKKworICAgICAgIC8vIG91ciBjdXN0b20gbWV0aG9kIGlzIG1hcHBlZCBh
cyB3ZWxsLgorICAgICAgIGNhcmQuJGNoYXJnZSh7YW1vdW50OjkuOTl9KTsKKyAgICAgICAvLyBQ
T1NUOiAvdXNlci8xMjMvY2FyZC80NTY/YW1vdW50PTkuOTkmY2hhcmdlPXRydWUge2lkOjQ1Niwg
bnVtYmVyOicxMjM0JywgbmFtZTonSi4gU21pdGgnfQorICAgICB9KTsKKworICAgICAvLyB3ZSBj
YW4gY3JlYXRlIGFuIGluc3RhbmNlIGFzIHdlbGwKKyAgICAgdmFyIG5ld0NhcmQgPSBuZXcgQ3Jl
ZGl0Q2FyZCh7bnVtYmVyOicwMTIzJ30pOworICAgICBuZXdDYXJkLm5hbWUgPSAiTWlrZSBTbWl0
aCI7CisgICAgIG5ld0NhcmQuJHNhdmUoKTsKKyAgICAgLy8gUE9TVDogL3VzZXIvMTIzL2NhcmQg
e251bWJlcjonMDEyMycsIG5hbWU6J01pa2UgU21pdGgnfQorICAgICAvLyBzZXJ2ZXIgcmV0dXJu
czoge2lkOjc4OSwgbnVtYmVyOicwMTIzJywgbmFtZTogJ01pa2UgU21pdGgnfTsKKyAgICAgZXhw
ZWN0KG5ld0NhcmQuaWQpLnRvRXF1YWwoNzg5KTsKKyAqIGBgYAorICoKKyAqIFRoZSBvYmplY3Qg
cmV0dXJuZWQgZnJvbSB0aGlzIGZ1bmN0aW9uIGV4ZWN1dGlvbiBpcyBhIHJlc291cmNlICJjbGFz
cyIgd2hpY2ggaGFzICJzdGF0aWMiIG1ldGhvZAorICogZm9yIGVhY2ggYWN0aW9uIGluIHRoZSBk
ZWZpbml0aW9uLgorICoKKyAqIENhbGxpbmcgdGhlc2UgbWV0aG9kcyBpbnZva2UgYCRodHRwYCBv
biB0aGUgYHVybGAgdGVtcGxhdGUgd2l0aCB0aGUgZ2l2ZW4gYG1ldGhvZGAsIGBwYXJhbXNgIGFu
ZAorICogYGhlYWRlcnNgLgorICoKKyAqIEBleGFtcGxlCisgKgorICogIyBVc2VyIHJlc291cmNl
CisgKgorICogV2hlbiB0aGUgZGF0YSBpcyByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIgdGhlbiB0
aGUgb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZSB0eXBlIGFuZAorICogYWxs
IG9mIHRoZSBub24tR0VUIG1ldGhvZHMgYXJlIGF2YWlsYWJsZSB3aXRoIGAkYCBwcmVmaXguIFRo
aXMgYWxsb3dzIHlvdSB0byBlYXNpbHkgc3VwcG9ydCBDUlVECisgKiBvcGVyYXRpb25zIChjcmVh
dGUsIHJlYWQsIHVwZGF0ZSwgZGVsZXRlKSBvbiBzZXJ2ZXItc2lkZSBkYXRhLgorCisgICBgYGBq
cworICAgICB2YXIgVXNlciA9ICRyZXNvdXJjZSgnL3VzZXIvOnVzZXJJZCcsIHt1c2VySWQ6J0Bp
ZCd9KTsKKyAgICAgVXNlci5nZXQoe3VzZXJJZDoxMjN9LCBmdW5jdGlvbih1c2VyKSB7CisgICAg
ICAgdXNlci5hYmMgPSB0cnVlOworICAgICAgIHVzZXIuJHNhdmUoKTsKKyAgICAgfSk7CisgICBg
YGAKKyAqCisgKiBJdCdzIHdvcnRoIG5vdGluZyB0aGF0IHRoZSBzdWNjZXNzIGNhbGxiYWNrIGZv
ciBgZ2V0YCwgYHF1ZXJ5YCBhbmQgb3RoZXIgbWV0aG9kcyBnZXRzIHBhc3NlZAorICogaW4gdGhl
IHJlc3BvbnNlIHRoYXQgY2FtZSBmcm9tIHRoZSBzZXJ2ZXIgYXMgd2VsbCBhcyAkaHR0cCBoZWFk
ZXIgZ2V0dGVyIGZ1bmN0aW9uLCBzbyBvbmUKKyAqIGNvdWxkIHJld3JpdGUgdGhlIGFib3ZlIGV4
YW1wbGUgYW5kIGdldCBhY2Nlc3MgdG8gaHR0cCBoZWFkZXJzIGFzOgorICoKKyAgIGBgYGpzCisg
ICAgIHZhciBVc2VyID0gJHJlc291cmNlKCcvdXNlci86dXNlcklkJywge3VzZXJJZDonQGlkJ30p
OworICAgICBVc2VyLmdldCh7dXNlcklkOjEyM30sIGZ1bmN0aW9uKHVzZXIsIGdldFJlc3BvbnNl
SGVhZGVycyl7CisgICAgICAgdXNlci5hYmMgPSB0cnVlOworICAgICAgIHVzZXIuJHNhdmUoZnVu
Y3Rpb24odXNlciwgcHV0UmVzcG9uc2VIZWFkZXJzKSB7CisgICAgICAgICAvL3VzZXIgPT4gc2F2
ZWQgdXNlciBvYmplY3QKKyAgICAgICAgIC8vcHV0UmVzcG9uc2VIZWFkZXJzID0+ICRodHRwIGhl
YWRlciBnZXR0ZXIKKyAgICAgICB9KTsKKyAgICAgfSk7CisgICBgYGAKKyAqCisgKiBZb3UgY2Fu
IGFsc28gYWNjZXNzIHRoZSByYXcgYCRodHRwYCBwcm9taXNlIHZpYSB0aGUgYCRwcm9taXNlYCBw
cm9wZXJ0eSBvbiB0aGUgb2JqZWN0IHJldHVybmVkCisgKgorICAgYGBgCisgICAgIHZhciBVc2Vy
ID0gJHJlc291cmNlKCcvdXNlci86dXNlcklkJywge3VzZXJJZDonQGlkJ30pOworICAgICBVc2Vy
LmdldCh7dXNlcklkOjEyM30pCisgICAgICAgICAuJHByb21pc2UudGhlbihmdW5jdGlvbih1c2Vy
KSB7CisgICAgICAgICAgICRzY29wZS51c2VyID0gdXNlcjsKKyAgICAgICAgIH0pOworICAgYGBg
CisgKgorICogQGV4YW1wbGUKKyAqCisgKiAjIENyZWF0aW5nIGEgY3VzdG9tICdQVVQnIHJlcXVl
c3QKKyAqCisgKiBJbiB0aGlzIGV4YW1wbGUgd2UgY3JlYXRlIGEgY3VzdG9tIG1ldGhvZCBvbiBv
dXIgcmVzb3VyY2UgdG8gbWFrZSBhIFBVVCByZXF1ZXN0CisgKiBgYGBqcworICogICAgdmFyIGFw
cCA9IGFuZ3VsYXIubW9kdWxlKCdhcHAnLCBbJ25nUmVzb3VyY2UnLCAnbmdSb3V0ZSddKTsKKyAq
CisgKiAgICAvLyBTb21lIEFQSXMgZXhwZWN0IGEgUFVUIHJlcXVlc3QgaW4gdGhlIGZvcm1hdCBV
Ukwvb2JqZWN0L0lECisgKiAgICAvLyBIZXJlIHdlIGFyZSBjcmVhdGluZyBhbiAndXBkYXRlJyBt
ZXRob2QKKyAqICAgIGFwcC5mYWN0b3J5KCdOb3RlcycsIFsnJHJlc291cmNlJywgZnVuY3Rpb24o
JHJlc291cmNlKSB7CisgKiAgICByZXR1cm4gJHJlc291cmNlKCcvbm90ZXMvOmlkJywgbnVsbCwK
KyAqICAgICAgICB7CisgKiAgICAgICAgICAgICd1cGRhdGUnOiB7IG1ldGhvZDonUFVUJyB9Cisg
KiAgICAgICAgfSk7CisgKiAgICB9XSk7CisgKgorICogICAgLy8gSW4gb3VyIGNvbnRyb2xsZXIg
d2UgZ2V0IHRoZSBJRCBmcm9tIHRoZSBVUkwgdXNpbmcgbmdSb3V0ZSBhbmQgJHJvdXRlUGFyYW1z
CisgKiAgICAvLyBXZSBwYXNzIGluICRyb3V0ZVBhcmFtcyBhbmQgb3VyIE5vdGVzIGZhY3Rvcnkg
YWxvbmcgd2l0aCAkc2NvcGUKKyAqICAgIGFwcC5jb250cm9sbGVyKCdOb3Rlc0N0cmwnLCBbJyRz
Y29wZScsICckcm91dGVQYXJhbXMnLCAnTm90ZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmdW5jdGlvbigkc2NvcGUsICRyb3V0ZVBhcmFtcywgTm90ZXMpIHsKKyAq
ICAgIC8vIEZpcnN0IGdldCBhIG5vdGUgb2JqZWN0IGZyb20gdGhlIGZhY3RvcnkKKyAqICAgIHZh
ciBub3RlID0gTm90ZXMuZ2V0KHsgaWQ6JHJvdXRlUGFyYW1zLmlkIH0pOworICogICAgJGlkID0g
bm90ZS5pZDsKKyAqCisgKiAgICAvLyBOb3cgY2FsbCB1cGRhdGUgcGFzc2luZyBpbiB0aGUgSUQg
Zmlyc3QgdGhlbiB0aGUgb2JqZWN0IHlvdSBhcmUgdXBkYXRpbmcKKyAqICAgIE5vdGVzLnVwZGF0
ZSh7IGlkOiRpZCB9LCBub3RlKTsKKyAqCisgKiAgICAvLyBUaGlzIHdpbGwgUFVUIC9ub3Rlcy9J
RCB3aXRoIHRoZSBub3RlIG9iamVjdCBpbiB0aGUgcmVxdWVzdCBwYXlsb2FkCisgKiAgICB9XSk7
CisgKiBgYGAKKyAqCisgKiBAZXhhbXBsZQorICoKKyAqICMgQ2FuY2VsbGluZyByZXF1ZXN0cwor
ICoKKyAqIElmIGFuIGFjdGlvbidzIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVzIHRoYXQgaXQgaXMg
Y2FuY2VsbGFibGUsIHlvdSBjYW4gY2FuY2VsIHRoZSByZXF1ZXN0IHJlbGF0ZWQKKyAqIHRvIGFu
IGluc3RhbmNlIG9yIGNvbGxlY3Rpb24gKGFzIGxvbmcgYXMgaXQgaXMgYSByZXN1bHQgb2YgYSAi
bm9uLWluc3RhbmNlIiBjYWxsKToKKyAqCisgICBgYGBqcworICAgICAvLyAuLi5kZWZpbmluZyB0
aGUgYEhvdGVsYCByZXNvdXJjZS4uLgorICAgICB2YXIgSG90ZWwgPSAkcmVzb3VyY2UoJy9hcGkv
aG90ZWwvOmlkJywge2lkOiAnQGlkJ30sIHsKKyAgICAgICAvLyBMZXQncyBtYWtlIHRoZSBgcXVl
cnkoKWAgbWV0aG9kIGNhbmNlbGxhYmxlCisgICAgICAgcXVlcnk6IHttZXRob2Q6ICdnZXQnLCBp
c0FycmF5OiB0cnVlLCBjYW5jZWxsYWJsZTogdHJ1ZX0KKyAgICAgfSk7CisKKyAgICAgLy8gLi4u
c29tZXdoZXJlIGluIHRoZSBQbGFuVmFjYXRpb25Db250cm9sbGVyLi4uCisgICAgIC4uLgorICAg
ICB0aGlzLm9uRGVzdGluYXRpb25DaGFuZ2VkID0gZnVuY3Rpb24gb25EZXN0aW5hdGlvbkNoYW5n
ZWQoZGVzdGluYXRpb24pIHsKKyAgICAgICAvLyBXZSBkb24ndCBjYXJlIGFib3V0IGFueSBwZW5k
aW5nIHJlcXVlc3QgZm9yIGhvdGVscworICAgICAgIC8vIGluIGEgZGlmZmVyZW50IGRlc3RpbmF0
aW9uIGFueSBtb3JlCisgICAgICAgdGhpcy5hdmFpbGFibGVIb3RlbHMuJGNhbmNlbFJlcXVlc3Qo
KTsKKworICAgICAgIC8vIExldCdzIHF1ZXJ5IGZvciBob3RlbHMgaW4gJzxkZXN0aW5hdGlvbj4n
CisgICAgICAgLy8gKGNhbGxzOiAvYXBpL2hvdGVsP2xvY2F0aW9uPTxkZXN0aW5hdGlvbj4pCisg
ICAgICAgdGhpcy5hdmFpbGFibGVIb3RlbHMgPSBIb3RlbC5xdWVyeSh7bG9jYXRpb246IGRlc3Rp
bmF0aW9ufSk7CisgICAgIH07CisgICBgYGAKKyAqCisgKi8KK2FuZ3VsYXIubW9kdWxlKCduZ1Jl
c291cmNlJywgWyduZyddKS4KKyAgcHJvdmlkZXIoJyRyZXNvdXJjZScsIGZ1bmN0aW9uIFJlc291
cmNlUHJvdmlkZXIoKSB7CisgICAgdmFyIFBST1RPQ09MX0FORF9ET01BSU5fUkVHRVggPSAvXmh0
dHBzPzpcL1wvW15cL10qLzsKKworICAgIHZhciBwcm92aWRlciA9IHRoaXM7CisKKyAgICAvKioK
KyAgICAgKiBAbmdkb2MgcHJvcGVydHkKKyAgICAgKiBAbmFtZSAkcmVzb3VyY2VQcm92aWRlciNk
ZWZhdWx0cworICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAqIE9iamVjdCBjb250YWluaW5nIGRl
ZmF1bHQgb3B0aW9ucyB1c2VkIHdoZW4gY3JlYXRpbmcgYCRyZXNvdXJjZWAgaW5zdGFuY2VzLgor
ICAgICAqCisgICAgICogVGhlIGRlZmF1bHQgdmFsdWVzIHNhdGlzZnkgYSB3aWRlIHJhbmdlIG9m
IHVzZWNhc2VzLCBidXQgeW91IG1heSBjaG9vc2UgdG8gb3ZlcndyaXRlIGFueSBvZgorICAgICAq
IHRoZW0gdG8gZnVydGhlciBjdXN0b21pemUgeW91ciBpbnN0YW5jZXMuIFRoZSBhdmFpbGFibGUg
cHJvcGVydGllcyBhcmU6CisgICAgICoKKyAgICAgKiAtICoqc3RyaXBUcmFpbGluZ1NsYXNoZXMq
KiDigJMgYHtib29sZWFufWAg4oCTIElmIHRydWUsIHRoZW4gdGhlIHRyYWlsaW5nIHNsYXNoZXMg
ZnJvbSBhbnkKKyAgICAgKiAgIGNhbGN1bGF0ZWQgVVJMIHdpbGwgYmUgc3RyaXBwZWQuPGJyIC8+
CisgICAgICogICAoRGVmYXVsdHMgdG8gdHJ1ZS4pCisgICAgICogLSAqKmNhbmNlbGxhYmxlKiog
4oCTIGB7Ym9vbGVhbn1gIOKAkyBJZiB0cnVlLCB0aGUgcmVxdWVzdCBtYWRlIGJ5IGEgIm5vbi1p
bnN0YW5jZSIgY2FsbCB3aWxsIGJlCisgICAgICogICBjYW5jZWxsZWQgKGlmIG5vdCBhbHJlYWR5
IGNvbXBsZXRlZCkgYnkgY2FsbGluZyBgJGNhbmNlbFJlcXVlc3QoKWAgb24gdGhlIGNhbGwncyBy
ZXR1cm4KKyAgICAgKiAgIHZhbHVlLiBGb3IgbW9yZSBkZXRhaWxzLCBzZWUge0BsaW5rIG5nUmVz
b3VyY2UuJHJlc291cmNlfS4gVGhpcyBjYW4gYmUgb3ZlcndyaXR0ZW4gcGVyCisgICAgICogICBy
ZXNvdXJjZSBjbGFzcyBvciBhY3Rpb24uPGJyIC8+CisgICAgICogICAoRGVmYXVsdHMgdG8gZmFs
c2UuKQorICAgICAqIC0gKiphY3Rpb25zKiogLSBge09iamVjdC48T2JqZWN0Pn1gIC0gQSBoYXNo
IHdpdGggZGVmYXVsdCBhY3Rpb25zIGRlY2xhcmF0aW9ucy4gQWN0aW9ucyBhcmUKKyAgICAgKiAg
IGhpZ2gtbGV2ZWwgbWV0aG9kcyBjb3JyZXNwb25kaW5nIHRvIFJFU1RmdWwgYWN0aW9ucy9tZXRo
b2RzIG9uIHJlc291cmNlcy4gQW4gYWN0aW9uIG1heQorICAgICAqICAgc3BlY2lmeSB3aGF0IEhU
VFAgbWV0aG9kIHRvIHVzZSwgd2hhdCBVUkwgdG8gaGl0LCBpZiB0aGUgcmV0dXJuIHZhbHVlIHdp
bGwgYmUgYSBzaW5nbGUKKyAgICAgKiAgIG9iamVjdCBvciBhIGNvbGxlY3Rpb24gKGFycmF5KSBv
ZiBvYmplY3RzIGV0Yy4gRm9yIG1vcmUgZGV0YWlscywgc2VlCisgICAgICogICB7QGxpbmsgbmdS
ZXNvdXJjZS4kcmVzb3VyY2V9LiBUaGUgYWN0aW9ucyBjYW4gYWxzbyBiZSBlbmhhbmNlZCBvciBv
dmVyd3JpdHRlbiBwZXIgcmVzb3VyY2UKKyAgICAgKiAgIGNsYXNzLjxiciAvPgorICAgICAqICAg
VGhlIGRlZmF1bHQgYWN0aW9ucyBhcmU6CisgICAgICogICBgYGBqcworICAgICAqICAgeworICAg
ICAqICAgICBnZXQ6IHttZXRob2Q6ICdHRVQnfSwKKyAgICAgKiAgICAgc2F2ZToge21ldGhvZDog
J1BPU1QnfSwKKyAgICAgKiAgICAgcXVlcnk6IHttZXRob2Q6ICdHRVQnLCBpc0FycmF5OiB0cnVl
fSwKKyAgICAgKiAgICAgcmVtb3ZlOiB7bWV0aG9kOiAnREVMRVRFJ30sCisgICAgICogICAgIGRl
bGV0ZToge21ldGhvZDogJ0RFTEVURSd9CisgICAgICogICB9CisgICAgICogICBgYGAKKyAgICAg
KgorICAgICAqICMjIyMgRXhhbXBsZQorICAgICAqCisgICAgICogRm9yIGV4YW1wbGUsIHlvdSBj
YW4gc3BlY2lmeSBhIG5ldyBgdXBkYXRlYCBhY3Rpb24gdGhhdCB1c2VzIHRoZSBgUFVUYCBIVFRQ
IHZlcmI6CisgICAgICoKKyAgICAgKiBgYGBqcworICAgICAqICAgYW5ndWxhci4KKyAgICAgKiAg
ICAgbW9kdWxlKCdteUFwcCcpLgorICAgICAqICAgICBjb25maWcoWydyZXNvdXJjZVByb3ZpZGVy
JywgZnVuY3Rpb24gKCRyZXNvdXJjZVByb3ZpZGVyKSB7CisgICAgICogICAgICAgJHJlc291cmNl
UHJvdmlkZXIuZGVmYXVsdHMuYWN0aW9ucy51cGRhdGUgPSB7CisgICAgICogICAgICAgICBtZXRo
b2Q6ICdQVVQnCisgICAgICogICAgICAgfTsKKyAgICAgKiAgICAgfSk7CisgICAgICogYGBgCisg
ICAgICoKKyAgICAgKiBPciB5b3UgY2FuIGV2ZW4gb3ZlcndyaXRlIHRoZSB3aG9sZSBgYWN0aW9u
c2AgbGlzdCBhbmQgc3BlY2lmeSB5b3VyIG93bjoKKyAgICAgKgorICAgICAqIGBgYGpzCisgICAg
ICogICBhbmd1bGFyLgorICAgICAqICAgICBtb2R1bGUoJ215QXBwJykuCisgICAgICogICAgIGNv
bmZpZyhbJ3Jlc291cmNlUHJvdmlkZXInLCBmdW5jdGlvbiAoJHJlc291cmNlUHJvdmlkZXIpIHsK
KyAgICAgKiAgICAgICAkcmVzb3VyY2VQcm92aWRlci5kZWZhdWx0cy5hY3Rpb25zID0geworICAg
ICAqICAgICAgICAgY3JlYXRlOiB7bWV0aG9kOiAnUE9TVCd9CisgICAgICogICAgICAgICBnZXQ6
ICAgIHttZXRob2Q6ICdHRVQnfSwKKyAgICAgKiAgICAgICAgIGdldEFsbDoge21ldGhvZDogJ0dF
VCcsIGlzQXJyYXk6dHJ1ZX0sCisgICAgICogICAgICAgICB1cGRhdGU6IHttZXRob2Q6ICdQVVQn
fSwKKyAgICAgKiAgICAgICAgIGRlbGV0ZToge21ldGhvZDogJ0RFTEVURSd9CisgICAgICogICAg
ICAgfTsKKyAgICAgKiAgICAgfSk7CisgICAgICogYGBgCisgICAgICoKKyAgICAgKi8KKyAgICB0
aGlzLmRlZmF1bHRzID0geworICAgICAgLy8gU3RyaXAgc2xhc2hlcyBieSBkZWZhdWx0CisgICAg
ICBzdHJpcFRyYWlsaW5nU2xhc2hlczogdHJ1ZSwKKworICAgICAgLy8gTWFrZSBub24taW5zdGFu
Y2UgcmVxdWVzdHMgY2FuY2VsbGFibGUgKHZpYSBgJGNhbmNlbFJlcXVlc3QoKWApCisgICAgICBj
YW5jZWxsYWJsZTogZmFsc2UsCisKKyAgICAgIC8vIERlZmF1bHQgYWN0aW9ucyBjb25maWd1cmF0
aW9uCisgICAgICBhY3Rpb25zOiB7CisgICAgICAgICdnZXQnOiB7bWV0aG9kOiAnR0VUJ30sCisg
ICAgICAgICdzYXZlJzoge21ldGhvZDogJ1BPU1QnfSwKKyAgICAgICAgJ3F1ZXJ5Jzoge21ldGhv
ZDogJ0dFVCcsIGlzQXJyYXk6IHRydWV9LAorICAgICAgICAncmVtb3ZlJzoge21ldGhvZDogJ0RF
TEVURSd9LAorICAgICAgICAnZGVsZXRlJzoge21ldGhvZDogJ0RFTEVURSd9CisgICAgICB9Cisg
ICAgfTsKKworICAgIHRoaXMuJGdldCA9IFsnJGh0dHAnLCAnJGxvZycsICckcScsICckdGltZW91
dCcsIGZ1bmN0aW9uKCRodHRwLCAkbG9nLCAkcSwgJHRpbWVvdXQpIHsKKworICAgICAgdmFyIG5v
b3AgPSBhbmd1bGFyLm5vb3AsCisgICAgICAgIGZvckVhY2ggPSBhbmd1bGFyLmZvckVhY2gsCisg
ICAgICAgIGV4dGVuZCA9IGFuZ3VsYXIuZXh0ZW5kLAorICAgICAgICBjb3B5ID0gYW5ndWxhci5j
b3B5LAorICAgICAgICBpc0Z1bmN0aW9uID0gYW5ndWxhci5pc0Z1bmN0aW9uOworCisgICAgICAv
KioKKyAgICAgICAqIFdlIG5lZWQgb3VyIGN1c3RvbSBtZXRob2QgYmVjYXVzZSBlbmNvZGVVUklD
b21wb25lbnQgaXMgdG9vIGFnZ3Jlc3NpdmUgYW5kIGRvZXNuJ3QgZm9sbG93CisgICAgICAgKiBo
dHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMzOTg2LnR4dCB3aXRoIHJlZ2FyZHMgdG8gdGhlIGNo
YXJhY3RlciBzZXQKKyAgICAgICAqIChwY2hhcikgYWxsb3dlZCBpbiBwYXRoIHNlZ21lbnRzOgor
ICAgICAgICogICAgc2VnbWVudCAgICAgICA9ICpwY2hhcgorICAgICAgICogICAgcGNoYXIgICAg
ICAgICA9IHVucmVzZXJ2ZWQgLyBwY3QtZW5jb2RlZCAvIHN1Yi1kZWxpbXMgLyAiOiIgLyAiQCIK
KyAgICAgICAqICAgIHBjdC1lbmNvZGVkICAgPSAiJSIgSEVYRElHIEhFWERJRworICAgICAgICog
ICAgdW5yZXNlcnZlZCAgICA9IEFMUEhBIC8gRElHSVQgLyAiLSIgLyAiLiIgLyAiXyIgLyAifiIK
KyAgICAgICAqICAgIHN1Yi1kZWxpbXMgICAgPSAiISIgLyAiJCIgLyAiJiIgLyAiJyIgLyAiKCIg
LyAiKSIKKyAgICAgICAqICAgICAgICAgICAgICAgICAgICAgLyAiKiIgLyAiKyIgLyAiLCIgLyAi
OyIgLyAiPSIKKyAgICAgICAqLworICAgICAgZnVuY3Rpb24gZW5jb2RlVXJpU2VnbWVudCh2YWwp
IHsKKyAgICAgICAgcmV0dXJuIGVuY29kZVVyaVF1ZXJ5KHZhbCwgdHJ1ZSkuCisgICAgICAgICAg
cmVwbGFjZSgvJTI2L2dpLCAnJicpLgorICAgICAgICAgIHJlcGxhY2UoLyUzRC9naSwgJz0nKS4K
KyAgICAgICAgICByZXBsYWNlKC8lMkIvZ2ksICcrJyk7CisgICAgICB9CisKKworICAgICAgLyoq
CisgICAgICAgKiBUaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCBmb3IgZW5jb2RpbmcgKmtleSogb3Ig
KnZhbHVlKiBwYXJ0cyBvZiBxdWVyeSBjb21wb25lbnQuIFdlIG5lZWQgYQorICAgICAgICogY3Vz
dG9tIG1ldGhvZCBiZWNhdXNlIGVuY29kZVVSSUNvbXBvbmVudCBpcyB0b28gYWdncmVzc2l2ZSBh
bmQgZW5jb2RlcyBzdHVmZiB0aGF0IGRvZXNuJ3QKKyAgICAgICAqIGhhdmUgdG8gYmUgZW5jb2Rl
ZCBwZXIgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NjoKKyAgICAgICAqICAgIHF1
ZXJ5ICAgICAgID0gKiggcGNoYXIgLyAiLyIgLyAiPyIgKQorICAgICAgICogICAgcGNoYXIgICAg
ICAgICA9IHVucmVzZXJ2ZWQgLyBwY3QtZW5jb2RlZCAvIHN1Yi1kZWxpbXMgLyAiOiIgLyAiQCIK
KyAgICAgICAqICAgIHVucmVzZXJ2ZWQgICAgPSBBTFBIQSAvIERJR0lUIC8gIi0iIC8gIi4iIC8g
Il8iIC8gIn4iCisgICAgICAgKiAgICBwY3QtZW5jb2RlZCAgID0gIiUiIEhFWERJRyBIRVhESUcK
KyAgICAgICAqICAgIHN1Yi1kZWxpbXMgICAgPSAiISIgLyAiJCIgLyAiJiIgLyAiJyIgLyAiKCIg
LyAiKSIKKyAgICAgICAqICAgICAgICAgICAgICAgICAgICAgLyAiKiIgLyAiKyIgLyAiLCIgLyAi
OyIgLyAiPSIKKyAgICAgICAqLworICAgICAgZnVuY3Rpb24gZW5jb2RlVXJpUXVlcnkodmFsLCBw
Y3RFbmNvZGVTcGFjZXMpIHsKKyAgICAgICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwp
LgorICAgICAgICAgIHJlcGxhY2UoLyU0MC9naSwgJ0AnKS4KKyAgICAgICAgICByZXBsYWNlKC8l
M0EvZ2ksICc6JykuCisgICAgICAgICAgcmVwbGFjZSgvJTI0L2csICckJykuCisgICAgICAgICAg
cmVwbGFjZSgvJTJDL2dpLCAnLCcpLgorICAgICAgICAgIHJlcGxhY2UoLyUyMC9nLCAocGN0RW5j
b2RlU3BhY2VzID8gJyUyMCcgOiAnKycpKTsKKyAgICAgIH0KKworICAgICAgZnVuY3Rpb24gUm91
dGUodGVtcGxhdGUsIGRlZmF1bHRzKSB7CisgICAgICAgIHRoaXMudGVtcGxhdGUgPSB0ZW1wbGF0
ZTsKKyAgICAgICAgdGhpcy5kZWZhdWx0cyA9IGV4dGVuZCh7fSwgcHJvdmlkZXIuZGVmYXVsdHMs
IGRlZmF1bHRzKTsKKyAgICAgICAgdGhpcy51cmxQYXJhbXMgPSB7fTsKKyAgICAgIH0KKworICAg
ICAgUm91dGUucHJvdG90eXBlID0geworICAgICAgICBzZXRVcmxQYXJhbXM6IGZ1bmN0aW9uKGNv
bmZpZywgcGFyYW1zLCBhY3Rpb25VcmwpIHsKKyAgICAgICAgICB2YXIgc2VsZiA9IHRoaXMsCisg
ICAgICAgICAgICB1cmwgPSBhY3Rpb25VcmwgfHwgc2VsZi50ZW1wbGF0ZSwKKyAgICAgICAgICAg
IHZhbCwKKyAgICAgICAgICAgIGVuY29kZWRWYWwsCisgICAgICAgICAgICBwcm90b2NvbEFuZERv
bWFpbiA9ICcnOworCisgICAgICAgICAgdmFyIHVybFBhcmFtcyA9IHNlbGYudXJsUGFyYW1zID0g
e307CisgICAgICAgICAgZm9yRWFjaCh1cmwuc3BsaXQoL1xXLyksIGZ1bmN0aW9uKHBhcmFtKSB7
CisgICAgICAgICAgICBpZiAocGFyYW0gPT09ICdoYXNPd25Qcm9wZXJ0eScpIHsKKyAgICAgICAg
ICAgICAgdGhyb3cgJHJlc291cmNlTWluRXJyKCdiYWRuYW1lJywgJ2hhc093blByb3BlcnR5IGlz
IG5vdCBhIHZhbGlkIHBhcmFtZXRlciBuYW1lLicpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKCEobmV3IFJlZ0V4cCgnXlxcZCskJykudGVzdChwYXJhbSkpICYmIHBhcmFtICYmCisg
ICAgICAgICAgICAgIChuZXcgUmVnRXhwKCcoXnxbXlxcXFxdKTonICsgcGFyYW0gKyAnKFxcV3wk
KScpLnRlc3QodXJsKSkpIHsKKyAgICAgICAgICAgICAgdXJsUGFyYW1zW3BhcmFtXSA9IHsKKyAg
ICAgICAgICAgICAgICBpc1F1ZXJ5UGFyYW1WYWx1ZTogKG5ldyBSZWdFeHAoJ1xcPy4qPTonICsg
cGFyYW0gKyAnKD86XFxXfCQpJykpLnRlc3QodXJsKQorICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgfQorICAgICAgICAgIH0pOworICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKC9cXDov
ZywgJzonKTsKKyAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZShQUk9UT0NPTF9BTkRfRE9NQUlO
X1JFR0VYLCBmdW5jdGlvbihtYXRjaCkgeworICAgICAgICAgICAgcHJvdG9jb2xBbmREb21haW4g
PSBtYXRjaDsKKyAgICAgICAgICAgIHJldHVybiAnJzsKKyAgICAgICAgICB9KTsKKworICAgICAg
ICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTsKKyAgICAgICAgICBmb3JFYWNoKHNlbGYudXJsUGFy
YW1zLCBmdW5jdGlvbihwYXJhbUluZm8sIHVybFBhcmFtKSB7CisgICAgICAgICAgICB2YWwgPSBw
YXJhbXMuaGFzT3duUHJvcGVydHkodXJsUGFyYW0pID8gcGFyYW1zW3VybFBhcmFtXSA6IHNlbGYu
ZGVmYXVsdHNbdXJsUGFyYW1dOworICAgICAgICAgICAgaWYgKGFuZ3VsYXIuaXNEZWZpbmVkKHZh
bCkgJiYgdmFsICE9PSBudWxsKSB7CisgICAgICAgICAgICAgIGlmIChwYXJhbUluZm8uaXNRdWVy
eVBhcmFtVmFsdWUpIHsKKyAgICAgICAgICAgICAgICBlbmNvZGVkVmFsID0gZW5jb2RlVXJpUXVl
cnkodmFsLCB0cnVlKTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBl
bmNvZGVkVmFsID0gZW5jb2RlVXJpU2VnbWVudCh2YWwpOworICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKG5ldyBSZWdFeHAoJzonICsgdXJsUGFyYW0gKyAn
KFxcV3wkKScsICdnJyksIGZ1bmN0aW9uKG1hdGNoLCBwMSkgeworICAgICAgICAgICAgICAgIHJl
dHVybiBlbmNvZGVkVmFsICsgcDE7CisgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UobmV3IFJlZ0V4cCgnKC8/KTon
ICsgdXJsUGFyYW0gKyAnKFxcV3wkKScsICdnJyksIGZ1bmN0aW9uKG1hdGNoLAorICAgICAgICAg
ICAgICAgICAgbGVhZGluZ1NsYXNoZXMsIHRhaWwpIHsKKyAgICAgICAgICAgICAgICBpZiAodGFp
bC5jaGFyQXQoMCkgPT09ICcvJykgeworICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhaWw7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBsZWFkaW5n
U2xhc2hlcyArIHRhaWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICB9KTsKKworICAgICAgICAgIC8vIHN0cmlwIHRyYWlsaW5n
IHNsYXNoZXMgYW5kIHNldCB0aGUgdXJsICh1bmxlc3MgdGhpcyBiZWhhdmlvciBpcyBzcGVjaWZp
Y2FsbHkgZGlzYWJsZWQpCisgICAgICAgICAgaWYgKHNlbGYuZGVmYXVsdHMuc3RyaXBUcmFpbGlu
Z1NsYXNoZXMpIHsKKyAgICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKC9cLyskLywgJycpIHx8
ICcvJzsKKyAgICAgICAgICB9CisKKyAgICAgICAgICAvLyB0aGVuIHJlcGxhY2UgY29sbGFwc2Ug
YC8uYCBpZiBmb3VuZCBpbiB0aGUgbGFzdCBVUkwgcGF0aCBzZWdtZW50IGJlZm9yZSB0aGUgcXVl
cnkKKyAgICAgICAgICAvLyBFLmcuIGBodHRwOi8vdXJsLmNvbS9pZC4vZm9ybWF0P3E9eGAgYmVj
b21lcyBgaHR0cDovL3VybC5jb20vaWQuZm9ybWF0P3E9eGAKKyAgICAgICAgICB1cmwgPSB1cmwu
cmVwbGFjZSgvXC9cLig/PVx3KygkfFw/KSkvLCAnLicpOworICAgICAgICAgIC8vIHJlcGxhY2Ug
ZXNjYXBlZCBgL1wuYCB3aXRoIGAvLmAKKyAgICAgICAgICBjb25maWcudXJsID0gcHJvdG9jb2xB
bmREb21haW4gKyB1cmwucmVwbGFjZSgvXC9cXFwuLywgJy8uJyk7CisKKworICAgICAgICAgIC8v
IHNldCBwYXJhbXMgLSBkZWxlZ2F0ZSBwYXJhbSBlbmNvZGluZyB0byAkaHR0cAorICAgICAgICAg
IGZvckVhY2gocGFyYW1zLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7CisgICAgICAgICAgICBpZiAo
IXNlbGYudXJsUGFyYW1zW2tleV0pIHsKKyAgICAgICAgICAgICAgY29uZmlnLnBhcmFtcyA9IGNv
bmZpZy5wYXJhbXMgfHwge307CisgICAgICAgICAgICAgIGNvbmZpZy5wYXJhbXNba2V5XSA9IHZh
bHVlOworICAgICAgICAgICAgfQorICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICB9Owor
CisKKyAgICAgIGZ1bmN0aW9uIHJlc291cmNlRmFjdG9yeSh1cmwsIHBhcmFtRGVmYXVsdHMsIGFj
dGlvbnMsIG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIHJvdXRlID0gbmV3IFJvdXRlKHVybCwgb3B0
aW9ucyk7CisKKyAgICAgICAgYWN0aW9ucyA9IGV4dGVuZCh7fSwgcHJvdmlkZXIuZGVmYXVsdHMu
YWN0aW9ucywgYWN0aW9ucyk7CisKKyAgICAgICAgZnVuY3Rpb24gZXh0cmFjdFBhcmFtcyhkYXRh
LCBhY3Rpb25QYXJhbXMpIHsKKyAgICAgICAgICB2YXIgaWRzID0ge307CisgICAgICAgICAgYWN0
aW9uUGFyYW1zID0gZXh0ZW5kKHt9LCBwYXJhbURlZmF1bHRzLCBhY3Rpb25QYXJhbXMpOworICAg
ICAgICAgIGZvckVhY2goYWN0aW9uUGFyYW1zLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7CisgICAg
ICAgICAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHsgdmFsdWUgPSB2YWx1ZShkYXRhKTsgfQor
ICAgICAgICAgICAgaWRzW2tleV0gPSB2YWx1ZSAmJiB2YWx1ZS5jaGFyQXQgJiYgdmFsdWUuY2hh
ckF0KDApID09PSAnQCcgPworICAgICAgICAgICAgICBsb29rdXBEb3R0ZWRQYXRoKGRhdGEsIHZh
bHVlLnN1YnN0cigxKSkgOiB2YWx1ZTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgICByZXR1cm4g
aWRzOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFJlc3BvbnNlSW50ZXJj
ZXB0b3IocmVzcG9uc2UpIHsKKyAgICAgICAgICByZXR1cm4gcmVzcG9uc2UucmVzb3VyY2U7Cisg
ICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBSZXNvdXJjZSh2YWx1ZSkgeworICAgICAgICAg
IHNoYWxsb3dDbGVhckFuZENvcHkodmFsdWUgfHwge30sIHRoaXMpOworICAgICAgICB9CisKKyAg
ICAgICAgUmVzb3VyY2UucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkgeworICAgICAgICAg
IHZhciBkYXRhID0gZXh0ZW5kKHt9LCB0aGlzKTsKKyAgICAgICAgICBkZWxldGUgZGF0YS4kcHJv
bWlzZTsKKyAgICAgICAgICBkZWxldGUgZGF0YS4kcmVzb2x2ZWQ7CisgICAgICAgICAgcmV0dXJu
IGRhdGE7CisgICAgICAgIH07CisKKyAgICAgICAgZm9yRWFjaChhY3Rpb25zLCBmdW5jdGlvbihh
Y3Rpb24sIG5hbWUpIHsKKyAgICAgICAgICB2YXIgaGFzQm9keSA9IC9eKFBPU1R8UFVUfFBBVENI
KSQvaS50ZXN0KGFjdGlvbi5tZXRob2QpOworICAgICAgICAgIHZhciBudW1lcmljVGltZW91dCA9
IGFjdGlvbi50aW1lb3V0OworICAgICAgICAgIHZhciBjYW5jZWxsYWJsZSA9IGFuZ3VsYXIuaXNE
ZWZpbmVkKGFjdGlvbi5jYW5jZWxsYWJsZSkgPyBhY3Rpb24uY2FuY2VsbGFibGUgOgorICAgICAg
ICAgICAgICAob3B0aW9ucyAmJiBhbmd1bGFyLmlzRGVmaW5lZChvcHRpb25zLmNhbmNlbGxhYmxl
KSkgPyBvcHRpb25zLmNhbmNlbGxhYmxlIDoKKyAgICAgICAgICAgICAgcHJvdmlkZXIuZGVmYXVs
dHMuY2FuY2VsbGFibGU7CisKKyAgICAgICAgICBpZiAobnVtZXJpY1RpbWVvdXQgJiYgIWFuZ3Vs
YXIuaXNOdW1iZXIobnVtZXJpY1RpbWVvdXQpKSB7CisgICAgICAgICAgICAkbG9nLmRlYnVnKCdu
Z1Jlc291cmNlOlxuJyArCisgICAgICAgICAgICAgICAgICAgICAgICcgIE9ubHkgbnVtZXJpYyB2
YWx1ZXMgYXJlIGFsbG93ZWQgYXMgYHRpbWVvdXRgLlxuJyArCisgICAgICAgICAgICAgICAgICAg
ICAgICcgIFByb21pc2VzIGFyZSBub3Qgc3VwcG9ydGVkIGluICRyZXNvdXJjZSwgYmVjYXVzZSB0
aGUgc2FtZSB2YWx1ZSB3b3VsZCAnICsKKyAgICAgICAgICAgICAgICAgICAgICAgJ2JlIHVzZWQg
Zm9yIG11bHRpcGxlIHJlcXVlc3RzLiBJZiB5b3UgYXJlIGxvb2tpbmcgZm9yIGEgd2F5IHRvIGNh
bmNlbCAnICsKKyAgICAgICAgICAgICAgICAgICAgICAgJ3JlcXVlc3RzLCB5b3Ugc2hvdWxkIHVz
ZSB0aGUgYGNhbmNlbGxhYmxlYCBvcHRpb24uJyk7CisgICAgICAgICAgICBkZWxldGUgYWN0aW9u
LnRpbWVvdXQ7CisgICAgICAgICAgICBudW1lcmljVGltZW91dCA9IG51bGw7CisgICAgICAgICAg
fQorCisgICAgICAgICAgUmVzb3VyY2VbbmFtZV0gPSBmdW5jdGlvbihhMSwgYTIsIGEzLCBhNCkg
eworICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHt9LCBkYXRhLCBzdWNjZXNzLCBlcnJvcjsKKwor
ICAgICAgICAgICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7CisgICAgICAgICAgICAgIGNh
c2UgNDoKKyAgICAgICAgICAgICAgICBlcnJvciA9IGE0OworICAgICAgICAgICAgICAgIHN1Y2Nl
c3MgPSBhMzsKKyAgICAgICAgICAgICAgICAvLyBmYWxscyB0aHJvdWdoCisgICAgICAgICAgICAg
IGNhc2UgMzoKKyAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIGlmIChpc0Z1
bmN0aW9uKGEyKSkgeworICAgICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oYTEpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBhMTsKKyAgICAgICAgICAgICAgICAgICAgZXJy
b3IgPSBhMjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBhMjsKKyAgICAgICAgICAgICAgICAgIGVy
cm9yID0gYTM7CisgICAgICAgICAgICAgICAgICAvLyBmYWxscyB0aHJvdWdoCisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIHBhcmFtcyA9IGExOworICAgICAgICAg
ICAgICAgICAgZGF0YSA9IGEyOworICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGEzOworICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IC8vIGZhbGxzIHRocm91Z2gKKyAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAg
IGlmIChpc0Z1bmN0aW9uKGExKSkgc3VjY2VzcyA9IGExOworICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGhhc0JvZHkpIGRhdGEgPSBhMTsKKyAgICAgICAgICAgICAgICBlbHNlIHBhcmFtcyA9IGEx
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDA6IGJyZWFrOwor
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHRocm93ICRyZXNvdXJjZU1p
bkVycignYmFkYXJncycsCisgICAgICAgICAgICAgICAgICAnRXhwZWN0ZWQgdXAgdG8gNCBhcmd1
bWVudHMgW3BhcmFtcywgZGF0YSwgc3VjY2VzcywgZXJyb3JdLCBnb3QgezB9IGFyZ3VtZW50cycs
CisgICAgICAgICAgICAgICAgICBhcmd1bWVudHMubGVuZ3RoKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgdmFyIGlzSW5zdGFuY2VDYWxsID0gdGhpcyBpbnN0YW5jZW9mIFJlc291cmNl
OworICAgICAgICAgICAgdmFyIHZhbHVlID0gaXNJbnN0YW5jZUNhbGwgPyBkYXRhIDogKGFjdGlv
bi5pc0FycmF5ID8gW10gOiBuZXcgUmVzb3VyY2UoZGF0YSkpOworICAgICAgICAgICAgdmFyIGh0
dHBDb25maWcgPSB7fTsKKyAgICAgICAgICAgIHZhciByZXNwb25zZUludGVyY2VwdG9yID0gYWN0
aW9uLmludGVyY2VwdG9yICYmIGFjdGlvbi5pbnRlcmNlcHRvci5yZXNwb25zZSB8fAorICAgICAg
ICAgICAgICBkZWZhdWx0UmVzcG9uc2VJbnRlcmNlcHRvcjsKKyAgICAgICAgICAgIHZhciByZXNw
b25zZUVycm9ySW50ZXJjZXB0b3IgPSBhY3Rpb24uaW50ZXJjZXB0b3IgJiYgYWN0aW9uLmludGVy
Y2VwdG9yLnJlc3BvbnNlRXJyb3IgfHwKKyAgICAgICAgICAgICAgdW5kZWZpbmVkOworICAgICAg
ICAgICAgdmFyIHRpbWVvdXREZWZlcnJlZDsKKyAgICAgICAgICAgIHZhciBudW1lcmljVGltZW91
dFByb21pc2U7CisKKyAgICAgICAgICAgIGZvckVhY2goYWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwg
a2V5KSB7CisgICAgICAgICAgICAgIHN3aXRjaCAoa2V5KSB7CisgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgIGh0dHBDb25maWdba2V5XSA9IGNvcHkodmFsdWUpOwor
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAncGFyYW1zJzoK
KyAgICAgICAgICAgICAgICBjYXNlICdpc0FycmF5JzoKKyAgICAgICAgICAgICAgICBjYXNlICdp
bnRlcmNlcHRvcic6CisgICAgICAgICAgICAgICAgY2FzZSAnY2FuY2VsbGFibGUnOgorICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworCisg
ICAgICAgICAgICBpZiAoIWlzSW5zdGFuY2VDYWxsICYmIGNhbmNlbGxhYmxlKSB7CisgICAgICAg
ICAgICAgIHRpbWVvdXREZWZlcnJlZCA9ICRxLmRlZmVyKCk7CisgICAgICAgICAgICAgIGh0dHBD
b25maWcudGltZW91dCA9IHRpbWVvdXREZWZlcnJlZC5wcm9taXNlOworCisgICAgICAgICAgICAg
IGlmIChudW1lcmljVGltZW91dCkgeworICAgICAgICAgICAgICAgIG51bWVyaWNUaW1lb3V0UHJv
bWlzZSA9ICR0aW1lb3V0KHRpbWVvdXREZWZlcnJlZC5yZXNvbHZlLCBudW1lcmljVGltZW91dCk7
CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGhhc0Jv
ZHkpIGh0dHBDb25maWcuZGF0YSA9IGRhdGE7CisgICAgICAgICAgICByb3V0ZS5zZXRVcmxQYXJh
bXMoaHR0cENvbmZpZywKKyAgICAgICAgICAgICAgZXh0ZW5kKHt9LCBleHRyYWN0UGFyYW1zKGRh
dGEsIGFjdGlvbi5wYXJhbXMgfHwge30pLCBwYXJhbXMpLAorICAgICAgICAgICAgICBhY3Rpb24u
dXJsKTsKKworICAgICAgICAgICAgdmFyIHByb21pc2UgPSAkaHR0cChodHRwQ29uZmlnKS50aGVu
KGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgICAgICAgIHZhciBkYXRhID0gcmVzcG9uc2Uu
ZGF0YTsKKworICAgICAgICAgICAgICBpZiAoZGF0YSkgeworICAgICAgICAgICAgICAgIC8vIE5l
ZWQgdG8gY29udmVydCBhY3Rpb24uaXNBcnJheSB0byBib29sZWFuIGluIGNhc2UgaXQgaXMgdW5k
ZWZpbmVkCisgICAgICAgICAgICAgICAgaWYgKGFuZ3VsYXIuaXNBcnJheShkYXRhKSAhPT0gKCEh
YWN0aW9uLmlzQXJyYXkpKSB7CisgICAgICAgICAgICAgICAgICB0aHJvdyAkcmVzb3VyY2VNaW5F
cnIoJ2JhZGNmZycsCisgICAgICAgICAgICAgICAgICAgICAgJ0Vycm9yIGluIHJlc291cmNlIGNv
bmZpZ3VyYXRpb24gZm9yIGFjdGlvbiBgezB9YC4gRXhwZWN0ZWQgcmVzcG9uc2UgdG8gJyArCisg
ICAgICAgICAgICAgICAgICAgICAgJ2NvbnRhaW4gYW4gezF9IGJ1dCBnb3QgYW4gezJ9IChSZXF1
ZXN0OiB7M30gezR9KScsIG5hbWUsIGFjdGlvbi5pc0FycmF5ID8gJ2FycmF5JyA6ICdvYmplY3Qn
LAorICAgICAgICAgICAgICAgICAgICBhbmd1bGFyLmlzQXJyYXkoZGF0YSkgPyAnYXJyYXknIDog
J29iamVjdCcsIGh0dHBDb25maWcubWV0aG9kLCBodHRwQ29uZmlnLnVybCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uaXNBcnJheSkgeworICAgICAgICAg
ICAgICAgICAgdmFsdWUubGVuZ3RoID0gMDsKKyAgICAgICAgICAgICAgICAgIGZvckVhY2goZGF0
YSwgZnVuY3Rpb24oaXRlbSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0g
PT09ICdvYmplY3QnKSB7CisgICAgICAgICAgICAgICAgICAgICAgdmFsdWUucHVzaChuZXcgUmVz
b3VyY2UoaXRlbSkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgIC8vIFZhbGlkIEpTT04gdmFsdWVzIG1heSBiZSBzdHJpbmcgbGl0ZXJhbHMsIGFu
ZCB0aGVzZSBzaG91bGQgbm90IGJlIGNvbnZlcnRlZAorICAgICAgICAgICAgICAgICAgICAgIC8v
IGludG8gb2JqZWN0cy4gVGhlc2UgaXRlbXMgd2lsbCBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIFJl
c291cmNlIHByb3RvdHlwZQorICAgICAgICAgICAgICAgICAgICAgIC8vIG1ldGhvZHMsIGJ1dCB1
bmZvcnR1bmF0ZWx5IHRoZXJlCisgICAgICAgICAgICAgICAgICAgICAgdmFsdWUucHVzaChpdGVt
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIHZhciBwcm9taXNlID0gdmFsdWUu
JHByb21pc2U7ICAgICAvLyBTYXZlIHRoZSBwcm9taXNlCisgICAgICAgICAgICAgICAgICBzaGFs
bG93Q2xlYXJBbmRDb3B5KGRhdGEsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgIHZhbHVlLiRw
cm9taXNlID0gcHJvbWlzZTsgICAgICAgICAvLyBSZXN0b3JlIHRoZSBwcm9taXNlCisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHJlc3BvbnNlLnJlc291
cmNlID0gdmFsdWU7CisKKyAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOworICAgICAgICAg
ICAgfSwgZnVuY3Rpb24ocmVzcG9uc2UpIHsKKyAgICAgICAgICAgICAgKGVycm9yIHx8IG5vb3Ap
KHJlc3BvbnNlKTsKKyAgICAgICAgICAgICAgcmV0dXJuICRxLnJlamVjdChyZXNwb25zZSk7Cisg
ICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgcHJvbWlzZVsnZmluYWxseSddKGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgICB2YWx1ZS4kcmVzb2x2ZWQgPSB0cnVlOworICAgICAgICAgICAg
ICBpZiAoIWlzSW5zdGFuY2VDYWxsICYmIGNhbmNlbGxhYmxlKSB7CisgICAgICAgICAgICAgICAg
dmFsdWUuJGNhbmNlbFJlcXVlc3QgPSBhbmd1bGFyLm5vb3A7CisgICAgICAgICAgICAgICAgJHRp
bWVvdXQuY2FuY2VsKG51bWVyaWNUaW1lb3V0UHJvbWlzZSk7CisgICAgICAgICAgICAgICAgdGlt
ZW91dERlZmVycmVkID0gbnVtZXJpY1RpbWVvdXRQcm9taXNlID0gaHR0cENvbmZpZy50aW1lb3V0
ID0gbnVsbDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAg
IHByb21pc2UgPSBwcm9taXNlLnRoZW4oCisgICAgICAgICAgICAgIGZ1bmN0aW9uKHJlc3BvbnNl
KSB7CisgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gcmVzcG9uc2VJbnRlcmNlcHRvcihyZXNw
b25zZSk7CisgICAgICAgICAgICAgICAgKHN1Y2Nlc3MgfHwgbm9vcCkodmFsdWUsIHJlc3BvbnNl
LmhlYWRlcnMpOworICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgICAgcmVzcG9uc2VFcnJvckludGVyY2VwdG9yKTsKKworICAgICAgICAg
ICAgaWYgKCFpc0luc3RhbmNlQ2FsbCkgeworICAgICAgICAgICAgICAvLyB3ZSBhcmUgY3JlYXRp
bmcgaW5zdGFuY2UgLyBjb2xsZWN0aW9uCisgICAgICAgICAgICAgIC8vIC0gc2V0IHRoZSBpbml0
aWFsIHByb21pc2UKKyAgICAgICAgICAgICAgLy8gLSByZXR1cm4gdGhlIGluc3RhbmNlIC8gY29s
bGVjdGlvbgorICAgICAgICAgICAgICB2YWx1ZS4kcHJvbWlzZSA9IHByb21pc2U7CisgICAgICAg
ICAgICAgIHZhbHVlLiRyZXNvbHZlZCA9IGZhbHNlOworICAgICAgICAgICAgICBpZiAoY2FuY2Vs
bGFibGUpIHZhbHVlLiRjYW5jZWxSZXF1ZXN0ID0gdGltZW91dERlZmVycmVkLnJlc29sdmU7CisK
KyAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBpbnN0YW5jZSBjYWxsCisgICAgICAgICAgICByZXR1cm4gcHJvbWlzZTsKKyAgICAgICAg
ICB9OworCisKKyAgICAgICAgICBSZXNvdXJjZS5wcm90b3R5cGVbJyQnICsgbmFtZV0gPSBmdW5j
dGlvbihwYXJhbXMsIHN1Y2Nlc3MsIGVycm9yKSB7CisgICAgICAgICAgICBpZiAoaXNGdW5jdGlv
bihwYXJhbXMpKSB7CisgICAgICAgICAgICAgIGVycm9yID0gc3VjY2Vzczsgc3VjY2VzcyA9IHBh
cmFtczsgcGFyYW1zID0ge307CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgcmVzdWx0
ID0gUmVzb3VyY2VbbmFtZV0uY2FsbCh0aGlzLCBwYXJhbXMsIHRoaXMsIHN1Y2Nlc3MsIGVycm9y
KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQuJHByb21pc2UgfHwgcmVzdWx0OworICAgICAg
ICAgIH07CisgICAgICAgIH0pOworCisgICAgICAgIFJlc291cmNlLmJpbmQgPSBmdW5jdGlvbihh
ZGRpdGlvbmFsUGFyYW1EZWZhdWx0cykgeworICAgICAgICAgIHJldHVybiByZXNvdXJjZUZhY3Rv
cnkodXJsLCBleHRlbmQoe30sIHBhcmFtRGVmYXVsdHMsIGFkZGl0aW9uYWxQYXJhbURlZmF1bHRz
KSwgYWN0aW9ucyk7CisgICAgICAgIH07CisKKyAgICAgICAgcmV0dXJuIFJlc291cmNlOworICAg
ICAgfQorCisgICAgICByZXR1cm4gcmVzb3VyY2VGYWN0b3J5OworICAgIH1dOworICB9KTsKKwor
Cit9KSh3aW5kb3csIHdpbmRvdy5hbmd1bGFyKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2Fu
Z3VsYXJqcy9ub2RlX21vZHVsZXMvYW5ndWxhci1yb3V0ZS9hbmd1bGFyLXJvdXRlLmpzIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvYW5ndWxhcmpzL25vZGVfbW9kdWxlcy9hbmd1bGFyLXJvdXRlL2FuZ3VsYXItcm91
dGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOGZhYzNjZDA4YTAxYmU1MTM0ZTJkMmRhY2QwMmJkMjI0OGE3MWY4
OQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9ub2RlX21vZHVsZXMv
YW5ndWxhci1yb3V0ZS9hbmd1bGFyLXJvdXRlLmpzCkBAIC0wLDAgKzEsMTA3MSBAQAorLyoqCisg
KiBAbGljZW5zZSBBbmd1bGFySlMgdjEuNS45CisgKiAoYykgMjAxMC0yMDE2IEdvb2dsZSwgSW5j
LiBodHRwOi8vYW5ndWxhcmpzLm9yZworICogTGljZW5zZTogTUlUCisgKi8KKyhmdW5jdGlvbih3
aW5kb3csIGFuZ3VsYXIpIHsndXNlIHN0cmljdCc7CisKKy8qIGdsb2JhbCBzaGFsbG93Q29weTog
dHJ1ZSAqLworCisvKioKKyAqIENyZWF0ZXMgYSBzaGFsbG93IGNvcHkgb2YgYW4gb2JqZWN0LCBh
biBhcnJheSBvciBhIHByaW1pdGl2ZS4KKyAqCisgKiBBc3N1bWVzIHRoYXQgdGhlcmUgYXJlIG5v
IHByb3RvIHByb3BlcnRpZXMgZm9yIG9iamVjdHMuCisgKi8KK2Z1bmN0aW9uIHNoYWxsb3dDb3B5
KHNyYywgZHN0KSB7CisgIGlmIChpc0FycmF5KHNyYykpIHsKKyAgICBkc3QgPSBkc3QgfHwgW107
CisKKyAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBzcmMubGVuZ3RoOyBpIDwgaWk7IGkrKykgewor
ICAgICAgZHN0W2ldID0gc3JjW2ldOworICAgIH0KKyAgfSBlbHNlIGlmIChpc09iamVjdChzcmMp
KSB7CisgICAgZHN0ID0gZHN0IHx8IHt9OworCisgICAgZm9yICh2YXIga2V5IGluIHNyYykgewor
ICAgICAgaWYgKCEoa2V5LmNoYXJBdCgwKSA9PT0gJyQnICYmIGtleS5jaGFyQXQoMSkgPT09ICck
JykpIHsKKyAgICAgICAgZHN0W2tleV0gPSBzcmNba2V5XTsKKyAgICAgIH0KKyAgICB9CisgIH0K
KworICByZXR1cm4gZHN0IHx8IHNyYzsKK30KKworLyogZ2xvYmFsIHNoYWxsb3dDb3B5OiBmYWxz
ZSAqLworCisvLyBUaGVyZSBhcmUgbmVjZXNzYXJ5IGZvciBgc2hhbGxvd0NvcHkoKWAgKGluY2x1
ZGVkIHZpYSBgc3JjL3NoYWxsb3dDb3B5LmpzYCkuCisvLyBUaGV5IGFyZSBpbml0aWFsaXplZCBp
bnNpZGUgdGhlIGAkUm91dGVQcm92aWRlcmAsIHRvIGVuc3VyZSBgd2luZG93LmFuZ3VsYXJgIGlz
IGF2YWlsYWJsZS4KK3ZhciBpc0FycmF5OwordmFyIGlzT2JqZWN0OworCisvKioKKyAqIEBuZ2Rv
YyBtb2R1bGUKKyAqIEBuYW1lIG5nUm91dGUKKyAqIEBkZXNjcmlwdGlvbgorICoKKyAqICMgbmdS
b3V0ZQorICoKKyAqIFRoZSBgbmdSb3V0ZWAgbW9kdWxlIHByb3ZpZGVzIHJvdXRpbmcgYW5kIGRl
ZXBsaW5raW5nIHNlcnZpY2VzIGFuZCBkaXJlY3RpdmVzIGZvciBhbmd1bGFyIGFwcHMuCisgKgor
ICogIyMgRXhhbXBsZQorICogU2VlIHtAbGluayBuZ1JvdXRlLiRyb3V0ZSNleGFtcGxlICRyb3V0
ZX0gZm9yIGFuIGV4YW1wbGUgb2YgY29uZmlndXJpbmcgYW5kIHVzaW5nIGBuZ1JvdXRlYC4KKyAq
CisgKgorICogPGRpdiBkb2MtbW9kdWxlLWNvbXBvbmVudHM9Im5nUm91dGUiPjwvZGl2PgorICov
CisgLyogZ2xvYmFsIC1uZ1JvdXRlTW9kdWxlICovCit2YXIgbmdSb3V0ZU1vZHVsZSA9IGFuZ3Vs
YXIubW9kdWxlKCduZ1JvdXRlJywgWyduZyddKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIHBy
b3ZpZGVyKCckcm91dGUnLCAkUm91dGVQcm92aWRlciksCisgICAgJHJvdXRlTWluRXJyID0gYW5n
dWxhci4kJG1pbkVycignbmdSb3V0ZScpOworCisvKioKKyAqIEBuZ2RvYyBwcm92aWRlcgorICog
QG5hbWUgJHJvdXRlUHJvdmlkZXIKKyAqIEB0aGlzCisgKgorICogQGRlc2NyaXB0aW9uCisgKgor
ICogVXNlZCBmb3IgY29uZmlndXJpbmcgcm91dGVzLgorICoKKyAqICMjIEV4YW1wbGUKKyAqIFNl
ZSB7QGxpbmsgbmdSb3V0ZS4kcm91dGUjZXhhbXBsZSAkcm91dGV9IGZvciBhbiBleGFtcGxlIG9m
IGNvbmZpZ3VyaW5nIGFuZCB1c2luZyBgbmdSb3V0ZWAuCisgKgorICogIyMgRGVwZW5kZW5jaWVz
CisgKiBSZXF1aXJlcyB0aGUge0BsaW5rIG5nUm91dGUgYG5nUm91dGVgfSBtb2R1bGUgdG8gYmUg
aW5zdGFsbGVkLgorICovCitmdW5jdGlvbiAkUm91dGVQcm92aWRlcigpIHsKKyAgaXNBcnJheSA9
IGFuZ3VsYXIuaXNBcnJheTsKKyAgaXNPYmplY3QgPSBhbmd1bGFyLmlzT2JqZWN0OworCisgIGZ1
bmN0aW9uIGluaGVyaXQocGFyZW50LCBleHRyYSkgeworICAgIHJldHVybiBhbmd1bGFyLmV4dGVu
ZChPYmplY3QuY3JlYXRlKHBhcmVudCksIGV4dHJhKTsKKyAgfQorCisgIHZhciByb3V0ZXMgPSB7
fTsKKworICAvKioKKyAgICogQG5nZG9jIG1ldGhvZAorICAgKiBAbmFtZSAkcm91dGVQcm92aWRl
ciN3aGVuCisgICAqCisgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFJvdXRlIHBhdGggKG1hdGNo
ZWQgYWdhaW5zdCBgJGxvY2F0aW9uLnBhdGhgKS4gSWYgYCRsb2NhdGlvbi5wYXRoYAorICAgKiAg
ICBjb250YWlucyByZWR1bmRhbnQgdHJhaWxpbmcgc2xhc2ggb3IgaXMgbWlzc2luZyBvbmUsIHRo
ZSByb3V0ZSB3aWxsIHN0aWxsIG1hdGNoIGFuZCB0aGUKKyAgICogICAgYCRsb2NhdGlvbi5wYXRo
YCB3aWxsIGJlIHVwZGF0ZWQgdG8gYWRkIG9yIGRyb3AgdGhlIHRyYWlsaW5nIHNsYXNoIHRvIGV4
YWN0bHkgbWF0Y2ggdGhlCisgICAqICAgIHJvdXRlIGRlZmluaXRpb24uCisgICAqCisgICAqICAg
ICogYHBhdGhgIGNhbiBjb250YWluIG5hbWVkIGdyb3VwcyBzdGFydGluZyB3aXRoIGEgY29sb246
IGUuZy4gYDpuYW1lYC4gQWxsIGNoYXJhY3RlcnMgdXAKKyAgICogICAgICAgIHRvIHRoZSBuZXh0
IHNsYXNoIGFyZSBtYXRjaGVkIGFuZCBzdG9yZWQgaW4gYCRyb3V0ZVBhcmFtc2AgdW5kZXIgdGhl
IGdpdmVuIGBuYW1lYAorICAgKiAgICAgICAgd2hlbiB0aGUgcm91dGUgbWF0Y2hlcy4KKyAgICog
ICAgKiBgcGF0aGAgY2FuIGNvbnRhaW4gbmFtZWQgZ3JvdXBzIHN0YXJ0aW5nIHdpdGggYSBjb2xv
biBhbmQgZW5kaW5nIHdpdGggYSBzdGFyOgorICAgKiAgICAgICAgZS5nLmA6bmFtZSpgLiBBbGwg
Y2hhcmFjdGVycyBhcmUgZWFnZXJseSBzdG9yZWQgaW4gYCRyb3V0ZVBhcmFtc2AgdW5kZXIgdGhl
IGdpdmVuIGBuYW1lYAorICAgKiAgICAgICAgd2hlbiB0aGUgcm91dGUgbWF0Y2hlcy4KKyAgICog
ICAgKiBgcGF0aGAgY2FuIGNvbnRhaW4gb3B0aW9uYWwgbmFtZWQgZ3JvdXBzIHdpdGggYSBxdWVz
dGlvbiBtYXJrOiBlLmcuYDpuYW1lP2AuCisgICAqCisgICAqICAgIEZvciBleGFtcGxlLCByb3V0
ZXMgbGlrZSBgL2NvbG9yLzpjb2xvci9sYXJnZWNvZGUvOmxhcmdlY29kZSpcL2VkaXRgIHdpbGwg
bWF0Y2gKKyAgICogICAgYC9jb2xvci9icm93bi9sYXJnZWNvZGUvY29kZS93aXRoL3NsYXNoZXMv
ZWRpdGAgYW5kIGV4dHJhY3Q6CisgICAqCisgICAqICAgICogYGNvbG9yOiBicm93bmAKKyAgICog
ICAgKiBgbGFyZ2Vjb2RlOiBjb2RlL3dpdGgvc2xhc2hlc2AuCisgICAqCisgICAqCisgICAqIEBw
YXJhbSB7T2JqZWN0fSByb3V0ZSBNYXBwaW5nIGluZm9ybWF0aW9uIHRvIGJlIGFzc2lnbmVkIHRv
IGAkcm91dGUuY3VycmVudGAgb24gcm91dGUKKyAgICogICAgbWF0Y2guCisgICAqCisgICAqICAg
IE9iamVjdCBwcm9wZXJ0aWVzOgorICAgKgorICAgKiAgICAtIGBjb250cm9sbGVyYCDigJMgYHso
c3RyaW5nfGZ1bmN0aW9uKCk9fWAg4oCTIENvbnRyb2xsZXIgZm4gdGhhdCBzaG91bGQgYmUgYXNz
b2NpYXRlZCB3aXRoCisgICAqICAgICAgbmV3bHkgY3JlYXRlZCBzY29wZSBvciB0aGUgbmFtZSBv
ZiBhIHtAbGluayBhbmd1bGFyLk1vZHVsZSNjb250cm9sbGVyIHJlZ2lzdGVyZWQKKyAgICogICAg
ICBjb250cm9sbGVyfSBpZiBwYXNzZWQgYXMgYSBzdHJpbmcuCisgICAqICAgIC0gYGNvbnRyb2xs
ZXJBc2Ag4oCTIGB7c3RyaW5nPX1gIOKAkyBBbiBpZGVudGlmaWVyIG5hbWUgZm9yIGEgcmVmZXJl
bmNlIHRvIHRoZSBjb250cm9sbGVyLgorICAgKiAgICAgIElmIHByZXNlbnQsIHRoZSBjb250cm9s
bGVyIHdpbGwgYmUgcHVibGlzaGVkIHRvIHNjb3BlIHVuZGVyIHRoZSBgY29udHJvbGxlckFzYCBu
YW1lLgorICAgKiAgICAtIGB0ZW1wbGF0ZWAg4oCTIGB7c3RyaW5nPXxmdW5jdGlvbigpPX1gIOKA
kyBodG1sIHRlbXBsYXRlIGFzIGEgc3RyaW5nIG9yIGEgZnVuY3Rpb24gdGhhdAorICAgKiAgICAg
IHJldHVybnMgYW4gaHRtbCB0ZW1wbGF0ZSBhcyBhIHN0cmluZyB3aGljaCBzaG91bGQgYmUgdXNl
ZCBieSB7QGxpbmsKKyAgICogICAgICBuZ1JvdXRlLmRpcmVjdGl2ZTpuZ1ZpZXcgbmdWaWV3fSBv
ciB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nSW5jbHVkZSBuZ0luY2x1ZGV9IGRpcmVjdGl2ZXMuCisg
ICAqICAgICAgVGhpcyBwcm9wZXJ0eSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgYHRlbXBsYXRlVXJs
YC4KKyAgICoKKyAgICogICAgICBJZiBgdGVtcGxhdGVgIGlzIGEgZnVuY3Rpb24sIGl0IHdpbGwg
YmUgY2FsbGVkIHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgorICAgKgorICAgKiAgICAg
IC0gYHtBcnJheS48T2JqZWN0Pn1gIC0gcm91dGUgcGFyYW1ldGVycyBleHRyYWN0ZWQgZnJvbSB0
aGUgY3VycmVudAorICAgKiAgICAgICAgYCRsb2NhdGlvbi5wYXRoKClgIGJ5IGFwcGx5aW5nIHRo
ZSBjdXJyZW50IHJvdXRlCisgICAqCisgICAqICAgIC0gYHRlbXBsYXRlVXJsYCDigJMgYHtzdHJp
bmc9fGZ1bmN0aW9uKCk9fWAg4oCTIHBhdGggb3IgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgcGF0
aCB0byBhbiBodG1sCisgICAqICAgICAgdGVtcGxhdGUgdGhhdCBzaG91bGQgYmUgdXNlZCBieSB7
QGxpbmsgbmdSb3V0ZS5kaXJlY3RpdmU6bmdWaWV3IG5nVmlld30uCisgICAqCisgICAqICAgICAg
SWYgYHRlbXBsYXRlVXJsYCBpcyBhIGZ1bmN0aW9uLCBpdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRo
ZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKKyAgICoKKyAgICogICAgICAtIGB7QXJyYXkuPE9iamVj
dD59YCAtIHJvdXRlIHBhcmFtZXRlcnMgZXh0cmFjdGVkIGZyb20gdGhlIGN1cnJlbnQKKyAgICog
ICAgICAgIGAkbG9jYXRpb24ucGF0aCgpYCBieSBhcHBseWluZyB0aGUgY3VycmVudCByb3V0ZQor
ICAgKgorICAgKiAgICAtIGByZXNvbHZlYCAtIGB7T2JqZWN0LjxzdHJpbmcsIGZ1bmN0aW9uPj19
YCAtIEFuIG9wdGlvbmFsIG1hcCBvZiBkZXBlbmRlbmNpZXMgd2hpY2ggc2hvdWxkCisgICAqICAg
ICAgYmUgaW5qZWN0ZWQgaW50byB0aGUgY29udHJvbGxlci4gSWYgYW55IG9mIHRoZXNlIGRlcGVu
ZGVuY2llcyBhcmUgcHJvbWlzZXMsIHRoZSByb3V0ZXIKKyAgICogICAgICB3aWxsIHdhaXQgZm9y
IHRoZW0gYWxsIHRvIGJlIHJlc29sdmVkIG9yIG9uZSB0byBiZSByZWplY3RlZCBiZWZvcmUgdGhl
IGNvbnRyb2xsZXIgaXMKKyAgICogICAgICBpbnN0YW50aWF0ZWQuCisgICAqICAgICAgSWYgYWxs
IHRoZSBwcm9taXNlcyBhcmUgcmVzb2x2ZWQgc3VjY2Vzc2Z1bGx5LCB0aGUgdmFsdWVzIG9mIHRo
ZSByZXNvbHZlZCBwcm9taXNlcyBhcmUKKyAgICogICAgICBpbmplY3RlZCBhbmQge0BsaW5rIG5n
Um91dGUuJHJvdXRlIyRyb3V0ZUNoYW5nZVN1Y2Nlc3MgJHJvdXRlQ2hhbmdlU3VjY2Vzc30gZXZl
bnQgaXMKKyAgICogICAgICBmaXJlZC4gSWYgYW55IG9mIHRoZSBwcm9taXNlcyBhcmUgcmVqZWN0
ZWQgdGhlCisgICAqICAgICAge0BsaW5rIG5nUm91dGUuJHJvdXRlIyRyb3V0ZUNoYW5nZUVycm9y
ICRyb3V0ZUNoYW5nZUVycm9yfSBldmVudCBpcyBmaXJlZC4KKyAgICogICAgICBGb3IgZWFzaWVy
IGFjY2VzcyB0byB0aGUgcmVzb2x2ZWQgZGVwZW5kZW5jaWVzIGZyb20gdGhlIHRlbXBsYXRlLCB0
aGUgYHJlc29sdmVgIG1hcCB3aWxsCisgICAqICAgICAgYmUgYXZhaWxhYmxlIG9uIHRoZSBzY29w
ZSBvZiB0aGUgcm91dGUsIHVuZGVyIGAkcmVzb2x2ZWAgKGJ5IGRlZmF1bHQpIG9yIGEgY3VzdG9t
IG5hbWUKKyAgICogICAgICBzcGVjaWZpZWQgYnkgdGhlIGByZXNvbHZlQXNgIHByb3BlcnR5IChz
ZWUgYmVsb3cpLiBUaGlzIGNhbiBiZSBwYXJ0aWN1bGFybHkgdXNlZnVsLCB3aGVuCisgICAqICAg
ICAgd29ya2luZyB3aXRoIHtAbGluayBhbmd1bGFyLk1vZHVsZSNjb21wb25lbnQgY29tcG9uZW50
c30gYXMgcm91dGUgdGVtcGxhdGVzLjxiciAvPgorICAgKiAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0
IGFsZXJ0LXdhcm5pbmciPgorICAgKiAgICAgICAgKipOb3RlOioqIElmIHlvdXIgc2NvcGUgYWxy
ZWFkeSBjb250YWlucyBhIHByb3BlcnR5IHdpdGggdGhpcyBuYW1lLCBpdCB3aWxsIGJlIGhpZGRl
bgorICAgKiAgICAgICAgb3Igb3ZlcndyaXR0ZW4uIE1ha2Ugc3VyZSwgeW91IHNwZWNpZnkgYW4g
YXBwcm9wcmlhdGUgbmFtZSBmb3IgdGhpcyBwcm9wZXJ0eSwgdGhhdAorICAgKiAgICAgICAgZG9l
cyBub3QgY29sbGlkZSB3aXRoIG90aGVyIHByb3BlcnRpZXMgb24gdGhlIHNjb3BlLgorICAgKiAg
ICAgIDwvZGl2PgorICAgKiAgICAgIFRoZSBtYXAgb2JqZWN0IGlzOgorICAgKgorICAgKiAgICAg
IC0gYGtleWAg4oCTIGB7c3RyaW5nfWA6IGEgbmFtZSBvZiBhIGRlcGVuZGVuY3kgdG8gYmUgaW5q
ZWN0ZWQgaW50byB0aGUgY29udHJvbGxlci4KKyAgICogICAgICAtIGBmYWN0b3J5YCAtIGB7c3Ry
aW5nfGZ1bmN0aW9ufWA6IElmIGBzdHJpbmdgIHRoZW4gaXQgaXMgYW4gYWxpYXMgZm9yIGEgc2Vy
dmljZS4KKyAgICogICAgICAgIE90aGVyd2lzZSBpZiBmdW5jdGlvbiwgdGhlbiBpdCBpcyB7QGxp
bmsgYXV0by4kaW5qZWN0b3IjaW52b2tlIGluamVjdGVkfQorICAgKiAgICAgICAgYW5kIHRoZSBy
ZXR1cm4gdmFsdWUgaXMgdHJlYXRlZCBhcyB0aGUgZGVwZW5kZW5jeS4gSWYgdGhlIHJlc3VsdCBp
cyBhIHByb21pc2UsIGl0IGlzCisgICAqICAgICAgICByZXNvbHZlZCBiZWZvcmUgaXRzIHZhbHVl
IGlzIGluamVjdGVkIGludG8gdGhlIGNvbnRyb2xsZXIuIEJlIGF3YXJlIHRoYXQKKyAgICogICAg
ICAgIGBuZ1JvdXRlLiRyb3V0ZVBhcmFtc2Agd2lsbCBzdGlsbCByZWZlciB0byB0aGUgcHJldmlv
dXMgcm91dGUgd2l0aGluIHRoZXNlIHJlc29sdmUKKyAgICogICAgICAgIGZ1bmN0aW9ucy4gIFVz
ZSBgJHJvdXRlLmN1cnJlbnQucGFyYW1zYCB0byBhY2Nlc3MgdGhlIG5ldyByb3V0ZSBwYXJhbWV0
ZXJzLCBpbnN0ZWFkLgorICAgKgorICAgKiAgICAtIGByZXNvbHZlQXNgIC0gYHtzdHJpbmc9fWAg
LSBUaGUgbmFtZSB1bmRlciB3aGljaCB0aGUgYHJlc29sdmVgIG1hcCB3aWxsIGJlIGF2YWlsYWJs
ZSBvbgorICAgKiAgICAgIHRoZSBzY29wZSBvZiB0aGUgcm91dGUuIElmIG9taXR0ZWQsIGRlZmF1
bHRzIHRvIGAkcmVzb2x2ZWAuCisgICAqCisgICAqICAgIC0gYHJlZGlyZWN0VG9gIOKAkyBgeyhz
dHJpbmd8ZnVuY3Rpb24oKSk9fWAg4oCTIHZhbHVlIHRvIHVwZGF0ZQorICAgKiAgICAgIHtAbGlu
ayBuZy4kbG9jYXRpb24gJGxvY2F0aW9ufSBwYXRoIHdpdGggYW5kIHRyaWdnZXIgcm91dGUgcmVk
aXJlY3Rpb24uCisgICAqCisgICAqICAgICAgSWYgYHJlZGlyZWN0VG9gIGlzIGEgZnVuY3Rpb24s
IGl0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgorICAgKgor
ICAgKiAgICAgIC0gYHtPYmplY3QuPHN0cmluZz59YCAtIHJvdXRlIHBhcmFtZXRlcnMgZXh0cmFj
dGVkIGZyb20gdGhlIGN1cnJlbnQKKyAgICogICAgICAgIGAkbG9jYXRpb24ucGF0aCgpYCBieSBh
cHBseWluZyB0aGUgY3VycmVudCByb3V0ZSB0ZW1wbGF0ZVVybC4KKyAgICogICAgICAtIGB7c3Ry
aW5nfWAgLSBjdXJyZW50IGAkbG9jYXRpb24ucGF0aCgpYAorICAgKiAgICAgIC0gYHtPYmplY3R9
YCAtIGN1cnJlbnQgYCRsb2NhdGlvbi5zZWFyY2goKWAKKyAgICoKKyAgICogICAgICBUaGUgY3Vz
dG9tIGByZWRpcmVjdFRvYCBmdW5jdGlvbiBpcyBleHBlY3RlZCB0byByZXR1cm4gYSBzdHJpbmcg
d2hpY2ggd2lsbCBiZSB1c2VkCisgICAqICAgICAgdG8gdXBkYXRlIGAkbG9jYXRpb24ucGF0aCgp
YCBhbmQgYCRsb2NhdGlvbi5zZWFyY2goKWAuCisgICAqCisgICAqICAgIC0gYFtyZWxvYWRPblNl
YXJjaD10cnVlXWAgLSBge2Jvb2xlYW49fWAgLSByZWxvYWQgcm91dGUgd2hlbiBvbmx5IGAkbG9j
YXRpb24uc2VhcmNoKClgCisgICAqICAgICAgb3IgYCRsb2NhdGlvbi5oYXNoKClgIGNoYW5nZXMu
CisgICAqCisgICAqICAgICAgSWYgdGhlIG9wdGlvbiBpcyBzZXQgdG8gYGZhbHNlYCBhbmQgdXJs
IGluIHRoZSBicm93c2VyIGNoYW5nZXMsIHRoZW4KKyAgICogICAgICBgJHJvdXRlVXBkYXRlYCBl
dmVudCBpcyBicm9hZGNhc3RlZCBvbiB0aGUgcm9vdCBzY29wZS4KKyAgICoKKyAgICogICAgLSBg
W2Nhc2VJbnNlbnNpdGl2ZU1hdGNoPWZhbHNlXWAgLSBge2Jvb2xlYW49fWAgLSBtYXRjaCByb3V0
ZXMgd2l0aG91dCBiZWluZyBjYXNlIHNlbnNpdGl2ZQorICAgKgorICAgKiAgICAgIElmIHRoZSBv
cHRpb24gaXMgc2V0IHRvIGB0cnVlYCwgdGhlbiB0aGUgcGFydGljdWxhciByb3V0ZSBjYW4gYmUg
bWF0Y2hlZCB3aXRob3V0IGJlaW5nCisgICAqICAgICAgY2FzZSBzZW5zaXRpdmUKKyAgICoKKyAg
ICogQHJldHVybnMge09iamVjdH0gc2VsZgorICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAgICog
QWRkcyBhIG5ldyByb3V0ZSBkZWZpbml0aW9uIHRvIHRoZSBgJHJvdXRlYCBzZXJ2aWNlLgorICAg
Ki8KKyAgdGhpcy53aGVuID0gZnVuY3Rpb24ocGF0aCwgcm91dGUpIHsKKyAgICAvL2NvcHkgb3Jp
Z2luYWwgcm91dGUgb2JqZWN0IHRvIHByZXNlcnZlIHBhcmFtcyBpbmhlcml0ZWQgZnJvbSBwcm90
byBjaGFpbgorICAgIHZhciByb3V0ZUNvcHkgPSBzaGFsbG93Q29weShyb3V0ZSk7CisgICAgaWYg
KGFuZ3VsYXIuaXNVbmRlZmluZWQocm91dGVDb3B5LnJlbG9hZE9uU2VhcmNoKSkgeworICAgICAg
cm91dGVDb3B5LnJlbG9hZE9uU2VhcmNoID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGFuZ3VsYXIu
aXNVbmRlZmluZWQocm91dGVDb3B5LmNhc2VJbnNlbnNpdGl2ZU1hdGNoKSkgeworICAgICAgcm91
dGVDb3B5LmNhc2VJbnNlbnNpdGl2ZU1hdGNoID0gdGhpcy5jYXNlSW5zZW5zaXRpdmVNYXRjaDsK
KyAgICB9CisgICAgcm91dGVzW3BhdGhdID0gYW5ndWxhci5leHRlbmQoCisgICAgICByb3V0ZUNv
cHksCisgICAgICBwYXRoICYmIHBhdGhSZWdFeHAocGF0aCwgcm91dGVDb3B5KQorICAgICk7CisK
KyAgICAvLyBjcmVhdGUgcmVkaXJlY3Rpb24gZm9yIHRyYWlsaW5nIHNsYXNoZXMKKyAgICBpZiAo
cGF0aCkgeworICAgICAgdmFyIHJlZGlyZWN0UGF0aCA9IChwYXRoW3BhdGgubGVuZ3RoIC0gMV0g
PT09ICcvJykKKyAgICAgICAgICAgID8gcGF0aC5zdWJzdHIoMCwgcGF0aC5sZW5ndGggLSAxKQor
ICAgICAgICAgICAgOiBwYXRoICsgJy8nOworCisgICAgICByb3V0ZXNbcmVkaXJlY3RQYXRoXSA9
IGFuZ3VsYXIuZXh0ZW5kKAorICAgICAgICB7cmVkaXJlY3RUbzogcGF0aH0sCisgICAgICAgIHBh
dGhSZWdFeHAocmVkaXJlY3RQYXRoLCByb3V0ZUNvcHkpCisgICAgICApOworICAgIH0KKworICAg
IHJldHVybiB0aGlzOworICB9OworCisgIC8qKgorICAgKiBAbmdkb2MgcHJvcGVydHkKKyAgICog
QG5hbWUgJHJvdXRlUHJvdmlkZXIjY2FzZUluc2Vuc2l0aXZlTWF0Y2gKKyAgICogQGRlc2NyaXB0
aW9uCisgICAqCisgICAqIEEgYm9vbGVhbiBwcm9wZXJ0eSBpbmRpY2F0aW5nIGlmIHJvdXRlcyBk
ZWZpbmVkCisgICAqIHVzaW5nIHRoaXMgcHJvdmlkZXIgc2hvdWxkIGJlIG1hdGNoZWQgdXNpbmcg
YSBjYXNlIGluc2Vuc2l0aXZlCisgICAqIGFsZ29yaXRobS4gRGVmYXVsdHMgdG8gYGZhbHNlYC4K
KyAgICovCisgIHRoaXMuY2FzZUluc2Vuc2l0aXZlTWF0Y2ggPSBmYWxzZTsKKworICAgLyoqCisg
ICAgKiBAcGFyYW0gcGF0aCB7c3RyaW5nfSBwYXRoCisgICAgKiBAcGFyYW0gb3B0cyB7T2JqZWN0
fSBvcHRpb25zCisgICAgKiBAcmV0dXJuIHs/T2JqZWN0fQorICAgICoKKyAgICAqIEBkZXNjcmlw
dGlvbgorICAgICogTm9ybWFsaXplcyB0aGUgZ2l2ZW4gcGF0aCwgcmV0dXJuaW5nIGEgcmVndWxh
ciBleHByZXNzaW9uCisgICAgKiBhbmQgdGhlIG9yaWdpbmFsIHBhdGguCisgICAgKgorICAgICog
SW5zcGlyZWQgYnkgcGF0aFJleHAgaW4gdmlzaW9ubWVkaWEvZXhwcmVzcy9saWIvdXRpbHMuanMu
CisgICAgKi8KKyAgZnVuY3Rpb24gcGF0aFJlZ0V4cChwYXRoLCBvcHRzKSB7CisgICAgdmFyIGlu
c2Vuc2l0aXZlID0gb3B0cy5jYXNlSW5zZW5zaXRpdmVNYXRjaCwKKyAgICAgICAgcmV0ID0gewor
ICAgICAgICAgIG9yaWdpbmFsUGF0aDogcGF0aCwKKyAgICAgICAgICByZWdleHA6IHBhdGgKKyAg
ICAgICAgfSwKKyAgICAgICAga2V5cyA9IHJldC5rZXlzID0gW107CisKKyAgICBwYXRoID0gcGF0
aAorICAgICAgLnJlcGxhY2UoLyhbKCkuXSkvZywgJ1xcJDEnKQorICAgICAgLnJlcGxhY2UoLyhc
Lyk/OihcdyspKFwqXD98W1w/XCpdKT8vZywgZnVuY3Rpb24oXywgc2xhc2gsIGtleSwgb3B0aW9u
KSB7CisgICAgICAgIHZhciBvcHRpb25hbCA9IChvcHRpb24gPT09ICc/JyB8fCBvcHRpb24gPT09
ICcqPycpID8gJz8nIDogbnVsbDsKKyAgICAgICAgdmFyIHN0YXIgPSAob3B0aW9uID09PSAnKicg
fHwgb3B0aW9uID09PSAnKj8nKSA/ICcqJyA6IG51bGw7CisgICAgICAgIGtleXMucHVzaCh7IG5h
bWU6IGtleSwgb3B0aW9uYWw6ICEhb3B0aW9uYWwgfSk7CisgICAgICAgIHNsYXNoID0gc2xhc2gg
fHwgJyc7CisgICAgICAgIHJldHVybiAnJworICAgICAgICAgICsgKG9wdGlvbmFsID8gJycgOiBz
bGFzaCkKKyAgICAgICAgICArICcoPzonCisgICAgICAgICAgKyAob3B0aW9uYWwgPyBzbGFzaCA6
ICcnKQorICAgICAgICAgICsgKHN0YXIgJiYgJyguKz8pJyB8fCAnKFteL10rKScpCisgICAgICAg
ICAgKyAob3B0aW9uYWwgfHwgJycpCisgICAgICAgICAgKyAnKScKKyAgICAgICAgICArIChvcHRp
b25hbCB8fCAnJyk7CisgICAgICB9KQorICAgICAgLnJlcGxhY2UoLyhbXC8kXCpdKS9nLCAnXFwk
MScpOworCisgICAgcmV0LnJlZ2V4cCA9IG5ldyBSZWdFeHAoJ14nICsgcGF0aCArICckJywgaW5z
ZW5zaXRpdmUgPyAnaScgOiAnJyk7CisgICAgcmV0dXJuIHJldDsKKyAgfQorCisgIC8qKgorICAg
KiBAbmdkb2MgbWV0aG9kCisgICAqIEBuYW1lICRyb3V0ZVByb3ZpZGVyI290aGVyd2lzZQorICAg
KgorICAgKiBAZGVzY3JpcHRpb24KKyAgICogU2V0cyByb3V0ZSBkZWZpbml0aW9uIHRoYXQgd2ls
bCBiZSB1c2VkIG9uIHJvdXRlIGNoYW5nZSB3aGVuIG5vIG90aGVyIHJvdXRlIGRlZmluaXRpb24K
KyAgICogaXMgbWF0Y2hlZC4KKyAgICoKKyAgICogQHBhcmFtIHtPYmplY3R8c3RyaW5nfSBwYXJh
bXMgTWFwcGluZyBpbmZvcm1hdGlvbiB0byBiZSBhc3NpZ25lZCB0byBgJHJvdXRlLmN1cnJlbnRg
LgorICAgKiBJZiBjYWxsZWQgd2l0aCBhIHN0cmluZywgdGhlIHZhbHVlIG1hcHMgdG8gYHJlZGly
ZWN0VG9gLgorICAgKiBAcmV0dXJucyB7T2JqZWN0fSBzZWxmCisgICAqLworICB0aGlzLm90aGVy
d2lzZSA9IGZ1bmN0aW9uKHBhcmFtcykgeworICAgIGlmICh0eXBlb2YgcGFyYW1zID09PSAnc3Ry
aW5nJykgeworICAgICAgcGFyYW1zID0ge3JlZGlyZWN0VG86IHBhcmFtc307CisgICAgfQorICAg
IHRoaXMud2hlbihudWxsLCBwYXJhbXMpOworICAgIHJldHVybiB0aGlzOworICB9OworCisKKyAg
dGhpcy4kZ2V0ID0gWyckcm9vdFNjb3BlJywKKyAgICAgICAgICAgICAgICckbG9jYXRpb24nLAor
ICAgICAgICAgICAgICAgJyRyb3V0ZVBhcmFtcycsCisgICAgICAgICAgICAgICAnJHEnLAorICAg
ICAgICAgICAgICAgJyRpbmplY3RvcicsCisgICAgICAgICAgICAgICAnJHRlbXBsYXRlUmVxdWVz
dCcsCisgICAgICAgICAgICAgICAnJHNjZScsCisgICAgICBmdW5jdGlvbigkcm9vdFNjb3BlLCAk
bG9jYXRpb24sICRyb3V0ZVBhcmFtcywgJHEsICRpbmplY3RvciwgJHRlbXBsYXRlUmVxdWVzdCwg
JHNjZSkgeworCisgICAgLyoqCisgICAgICogQG5nZG9jIHNlcnZpY2UKKyAgICAgKiBAbmFtZSAk
cm91dGUKKyAgICAgKiBAcmVxdWlyZXMgJGxvY2F0aW9uCisgICAgICogQHJlcXVpcmVzICRyb3V0
ZVBhcmFtcworICAgICAqCisgICAgICogQHByb3BlcnR5IHtPYmplY3R9IGN1cnJlbnQgUmVmZXJl
bmNlIHRvIHRoZSBjdXJyZW50IHJvdXRlIGRlZmluaXRpb24uCisgICAgICogVGhlIHJvdXRlIGRl
ZmluaXRpb24gY29udGFpbnM6CisgICAgICoKKyAgICAgKiAgIC0gYGNvbnRyb2xsZXJgOiBUaGUg
Y29udHJvbGxlciBjb25zdHJ1Y3RvciBhcyBkZWZpbmVkIGluIHRoZSByb3V0ZSBkZWZpbml0aW9u
LgorICAgICAqICAgLSBgbG9jYWxzYDogQSBtYXAgb2YgbG9jYWxzIHdoaWNoIGlzIHVzZWQgYnkg
e0BsaW5rIG5nLiRjb250cm9sbGVyICRjb250cm9sbGVyfSBzZXJ2aWNlIGZvcgorICAgICAqICAg
ICBjb250cm9sbGVyIGluc3RhbnRpYXRpb24uIFRoZSBgbG9jYWxzYCBjb250YWluCisgICAgICog
ICAgIHRoZSByZXNvbHZlZCB2YWx1ZXMgb2YgdGhlIGByZXNvbHZlYCBtYXAuIEFkZGl0aW9uYWxs
eSB0aGUgYGxvY2Fsc2AgYWxzbyBjb250YWluOgorICAgICAqCisgICAgICogICAgIC0gYCRzY29w
ZWAgLSBUaGUgY3VycmVudCByb3V0ZSBzY29wZS4KKyAgICAgKiAgICAgLSBgJHRlbXBsYXRlYCAt
IFRoZSBjdXJyZW50IHJvdXRlIHRlbXBsYXRlIEhUTUwuCisgICAgICoKKyAgICAgKiAgICAgVGhl
IGBsb2NhbHNgIHdpbGwgYmUgYXNzaWduZWQgdG8gdGhlIHJvdXRlIHNjb3BlJ3MgYCRyZXNvbHZl
YCBwcm9wZXJ0eS4gWW91IGNhbiBvdmVycmlkZQorICAgICAqICAgICB0aGUgcHJvcGVydHkgbmFt
ZSwgdXNpbmcgYHJlc29sdmVBc2AgaW4gdGhlIHJvdXRlIGRlZmluaXRpb24uIFNlZQorICAgICAq
ICAgICB7QGxpbmsgbmdSb3V0ZS4kcm91dGVQcm92aWRlciAkcm91dGVQcm92aWRlcn0gZm9yIG1v
cmUgaW5mby4KKyAgICAgKgorICAgICAqIEBwcm9wZXJ0eSB7T2JqZWN0fSByb3V0ZXMgT2JqZWN0
IHdpdGggYWxsIHJvdXRlIGNvbmZpZ3VyYXRpb24gT2JqZWN0cyBhcyBpdHMgcHJvcGVydGllcy4K
KyAgICAgKgorICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAqIGAkcm91dGVgIGlzIHVzZWQgZm9y
IGRlZXAtbGlua2luZyBVUkxzIHRvIGNvbnRyb2xsZXJzIGFuZCB2aWV3cyAoSFRNTCBwYXJ0aWFs
cykuCisgICAgICogSXQgd2F0Y2hlcyBgJGxvY2F0aW9uLnVybCgpYCBhbmQgdHJpZXMgdG8gbWFw
IHRoZSBwYXRoIHRvIGFuIGV4aXN0aW5nIHJvdXRlIGRlZmluaXRpb24uCisgICAgICoKKyAgICAg
KiBSZXF1aXJlcyB0aGUge0BsaW5rIG5nUm91dGUgYG5nUm91dGVgfSBtb2R1bGUgdG8gYmUgaW5z
dGFsbGVkLgorICAgICAqCisgICAgICogWW91IGNhbiBkZWZpbmUgcm91dGVzIHRocm91Z2gge0Bs
aW5rIG5nUm91dGUuJHJvdXRlUHJvdmlkZXIgJHJvdXRlUHJvdmlkZXJ9J3MgQVBJLgorICAgICAq
CisgICAgICogVGhlIGAkcm91dGVgIHNlcnZpY2UgaXMgdHlwaWNhbGx5IHVzZWQgaW4gY29uanVu
Y3Rpb24gd2l0aCB0aGUKKyAgICAgKiB7QGxpbmsgbmdSb3V0ZS5kaXJlY3RpdmU6bmdWaWV3IGBu
Z1ZpZXdgfSBkaXJlY3RpdmUgYW5kIHRoZQorICAgICAqIHtAbGluayBuZ1JvdXRlLiRyb3V0ZVBh
cmFtcyBgJHJvdXRlUGFyYW1zYH0gc2VydmljZS4KKyAgICAgKgorICAgICAqIEBleGFtcGxlCisg
ICAgICogVGhpcyBleGFtcGxlIHNob3dzIGhvdyBjaGFuZ2luZyB0aGUgVVJMIGhhc2ggY2F1c2Vz
IHRoZSBgJHJvdXRlYCB0byBtYXRjaCBhIHJvdXRlIGFnYWluc3QgdGhlCisgICAgICogVVJMLCBh
bmQgdGhlIGBuZ1ZpZXdgIHB1bGxzIGluIHRoZSBwYXJ0aWFsLgorICAgICAqCisgICAgICogPGV4
YW1wbGUgbmFtZT0iJHJvdXRlLXNlcnZpY2UiIG1vZHVsZT0ibmdSb3V0ZUV4YW1wbGUiCisgICAg
ICogICAgICAgICAgZGVwcz0iYW5ndWxhci1yb3V0ZS5qcyIgZml4QmFzZT0idHJ1ZSI+CisgICAg
ICogICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgKiAgICAgPGRpdiBuZy1jb250cm9s
bGVyPSJNYWluQ29udHJvbGxlciI+CisgICAgICogICAgICAgQ2hvb3NlOgorICAgICAqICAgICAg
IDxhIGhyZWY9IkJvb2svTW9ieSI+TW9ieTwvYT4gfAorICAgICAqICAgICAgIDxhIGhyZWY9IkJv
b2svTW9ieS9jaC8xIj5Nb2J5OiBDaDE8L2E+IHwKKyAgICAgKiAgICAgICA8YSBocmVmPSJCb29r
L0dhdHNieSI+R2F0c2J5PC9hPiB8CisgICAgICogICAgICAgPGEgaHJlZj0iQm9vay9HYXRzYnkv
Y2gvND9rZXk9dmFsdWUiPkdhdHNieTogQ2g0PC9hPiB8CisgICAgICogICAgICAgPGEgaHJlZj0i
Qm9vay9TY2FybGV0Ij5TY2FybGV0IExldHRlcjwvYT48YnIvPgorICAgICAqCisgICAgICogICAg
ICAgPGRpdiBuZy12aWV3PjwvZGl2PgorICAgICAqCisgICAgICogICAgICAgPGhyIC8+CisgICAg
ICoKKyAgICAgKiAgICAgICA8cHJlPiRsb2NhdGlvbi5wYXRoKCkgPSB7eyRsb2NhdGlvbi5wYXRo
KCl9fTwvcHJlPgorICAgICAqICAgICAgIDxwcmU+JHJvdXRlLmN1cnJlbnQudGVtcGxhdGVVcmwg
PSB7eyRyb3V0ZS5jdXJyZW50LnRlbXBsYXRlVXJsfX08L3ByZT4KKyAgICAgKiAgICAgICA8cHJl
PiRyb3V0ZS5jdXJyZW50LnBhcmFtcyA9IHt7JHJvdXRlLmN1cnJlbnQucGFyYW1zfX08L3ByZT4K
KyAgICAgKiAgICAgICA8cHJlPiRyb3V0ZS5jdXJyZW50LnNjb3BlLm5hbWUgPSB7eyRyb3V0ZS5j
dXJyZW50LnNjb3BlLm5hbWV9fTwvcHJlPgorICAgICAqICAgICAgIDxwcmU+JHJvdXRlUGFyYW1z
ID0ge3skcm91dGVQYXJhbXN9fTwvcHJlPgorICAgICAqICAgICA8L2Rpdj4KKyAgICAgKiAgIDwv
ZmlsZT4KKyAgICAgKgorICAgICAqICAgPGZpbGUgbmFtZT0iYm9vay5odG1sIj4KKyAgICAgKiAg
ICAgY29udHJvbGxlcjoge3tuYW1lfX08YnIgLz4KKyAgICAgKiAgICAgQm9vayBJZDoge3twYXJh
bXMuYm9va0lkfX08YnIgLz4KKyAgICAgKiAgIDwvZmlsZT4KKyAgICAgKgorICAgICAqICAgPGZp
bGUgbmFtZT0iY2hhcHRlci5odG1sIj4KKyAgICAgKiAgICAgY29udHJvbGxlcjoge3tuYW1lfX08
YnIgLz4KKyAgICAgKiAgICAgQm9vayBJZDoge3twYXJhbXMuYm9va0lkfX08YnIgLz4KKyAgICAg
KiAgICAgQ2hhcHRlciBJZDoge3twYXJhbXMuY2hhcHRlcklkfX0KKyAgICAgKiAgIDwvZmlsZT4K
KyAgICAgKgorICAgICAqICAgPGZpbGUgbmFtZT0ic2NyaXB0LmpzIj4KKyAgICAgKiAgICAgYW5n
dWxhci5tb2R1bGUoJ25nUm91dGVFeGFtcGxlJywgWyduZ1JvdXRlJ10pCisgICAgICoKKyAgICAg
KiAgICAgIC5jb250cm9sbGVyKCdNYWluQ29udHJvbGxlcicsIGZ1bmN0aW9uKCRzY29wZSwgJHJv
dXRlLCAkcm91dGVQYXJhbXMsICRsb2NhdGlvbikgeworICAgICAqICAgICAgICAgICRzY29wZS4k
cm91dGUgPSAkcm91dGU7CisgICAgICogICAgICAgICAgJHNjb3BlLiRsb2NhdGlvbiA9ICRsb2Nh
dGlvbjsKKyAgICAgKiAgICAgICAgICAkc2NvcGUuJHJvdXRlUGFyYW1zID0gJHJvdXRlUGFyYW1z
OworICAgICAqICAgICAgfSkKKyAgICAgKgorICAgICAqICAgICAgLmNvbnRyb2xsZXIoJ0Jvb2tD
b250cm9sbGVyJywgZnVuY3Rpb24oJHNjb3BlLCAkcm91dGVQYXJhbXMpIHsKKyAgICAgKiAgICAg
ICAgICAkc2NvcGUubmFtZSA9ICdCb29rQ29udHJvbGxlcic7CisgICAgICogICAgICAgICAgJHNj
b3BlLnBhcmFtcyA9ICRyb3V0ZVBhcmFtczsKKyAgICAgKiAgICAgIH0pCisgICAgICoKKyAgICAg
KiAgICAgIC5jb250cm9sbGVyKCdDaGFwdGVyQ29udHJvbGxlcicsIGZ1bmN0aW9uKCRzY29wZSwg
JHJvdXRlUGFyYW1zKSB7CisgICAgICogICAgICAgICAgJHNjb3BlLm5hbWUgPSAnQ2hhcHRlckNv
bnRyb2xsZXInOworICAgICAqICAgICAgICAgICRzY29wZS5wYXJhbXMgPSAkcm91dGVQYXJhbXM7
CisgICAgICogICAgICB9KQorICAgICAqCisgICAgICogICAgIC5jb25maWcoZnVuY3Rpb24oJHJv
dXRlUHJvdmlkZXIsICRsb2NhdGlvblByb3ZpZGVyKSB7CisgICAgICogICAgICAgJHJvdXRlUHJv
dmlkZXIKKyAgICAgKiAgICAgICAgLndoZW4oJy9Cb29rLzpib29rSWQnLCB7CisgICAgICogICAg
ICAgICB0ZW1wbGF0ZVVybDogJ2Jvb2suaHRtbCcsCisgICAgICogICAgICAgICBjb250cm9sbGVy
OiAnQm9va0NvbnRyb2xsZXInLAorICAgICAqICAgICAgICAgcmVzb2x2ZTogeworICAgICAqICAg
ICAgICAgICAvLyBJIHdpbGwgY2F1c2UgYSAxIHNlY29uZCBkZWxheQorICAgICAqICAgICAgICAg
ICBkZWxheTogZnVuY3Rpb24oJHEsICR0aW1lb3V0KSB7CisgICAgICogICAgICAgICAgICAgdmFy
IGRlbGF5ID0gJHEuZGVmZXIoKTsKKyAgICAgKiAgICAgICAgICAgICAkdGltZW91dChkZWxheS5y
ZXNvbHZlLCAxMDAwKTsKKyAgICAgKiAgICAgICAgICAgICByZXR1cm4gZGVsYXkucHJvbWlzZTsK
KyAgICAgKiAgICAgICAgICAgfQorICAgICAqICAgICAgICAgfQorICAgICAqICAgICAgIH0pCisg
ICAgICogICAgICAgLndoZW4oJy9Cb29rLzpib29rSWQvY2gvOmNoYXB0ZXJJZCcsIHsKKyAgICAg
KiAgICAgICAgIHRlbXBsYXRlVXJsOiAnY2hhcHRlci5odG1sJywKKyAgICAgKiAgICAgICAgIGNv
bnRyb2xsZXI6ICdDaGFwdGVyQ29udHJvbGxlcicKKyAgICAgKiAgICAgICB9KTsKKyAgICAgKgor
ICAgICAqICAgICAgIC8vIGNvbmZpZ3VyZSBodG1sNSB0byBnZXQgbGlua3Mgd29ya2luZyBvbiBq
c2ZpZGRsZQorICAgICAqICAgICAgICRsb2NhdGlvblByb3ZpZGVyLmh0bWw1TW9kZSh0cnVlKTsK
KyAgICAgKiAgICAgfSk7CisgICAgICoKKyAgICAgKiAgIDwvZmlsZT4KKyAgICAgKgorICAgICAq
ICAgPGZpbGUgbmFtZT0icHJvdHJhY3Rvci5qcyIgdHlwZT0icHJvdHJhY3RvciI+CisgICAgICog
ICAgIGl0KCdzaG91bGQgbG9hZCBhbmQgY29tcGlsZSBjb3JyZWN0IHRlbXBsYXRlJywgZnVuY3Rp
b24oKSB7CisgICAgICogICAgICAgZWxlbWVudChieS5saW5rVGV4dCgnTW9ieTogQ2gxJykpLmNs
aWNrKCk7CisgICAgICogICAgICAgdmFyIGNvbnRlbnQgPSBlbGVtZW50KGJ5LmNzcygnW25nLXZp
ZXddJykpLmdldFRleHQoKTsKKyAgICAgKiAgICAgICBleHBlY3QoY29udGVudCkudG9NYXRjaCgv
Y29udHJvbGxlcjogQ2hhcHRlckNvbnRyb2xsZXIvKTsKKyAgICAgKiAgICAgICBleHBlY3QoY29u
dGVudCkudG9NYXRjaCgvQm9vayBJZDogTW9ieS8pOworICAgICAqICAgICAgIGV4cGVjdChjb250
ZW50KS50b01hdGNoKC9DaGFwdGVyIElkOiAxLyk7CisgICAgICoKKyAgICAgKiAgICAgICBlbGVt
ZW50KGJ5LnBhcnRpYWxMaW5rVGV4dCgnU2NhcmxldCcpKS5jbGljaygpOworICAgICAqCisgICAg
ICogICAgICAgY29udGVudCA9IGVsZW1lbnQoYnkuY3NzKCdbbmctdmlld10nKSkuZ2V0VGV4dCgp
OworICAgICAqICAgICAgIGV4cGVjdChjb250ZW50KS50b01hdGNoKC9jb250cm9sbGVyOiBCb29r
Q29udHJvbGxlci8pOworICAgICAqICAgICAgIGV4cGVjdChjb250ZW50KS50b01hdGNoKC9Cb29r
IElkOiBTY2FybGV0Lyk7CisgICAgICogICAgIH0pOworICAgICAqICAgPC9maWxlPgorICAgICAq
IDwvZXhhbXBsZT4KKyAgICAgKi8KKworICAgIC8qKgorICAgICAqIEBuZ2RvYyBldmVudAorICAg
ICAqIEBuYW1lICRyb3V0ZSMkcm91dGVDaGFuZ2VTdGFydAorICAgICAqIEBldmVudFR5cGUgYnJv
YWRjYXN0IG9uIHJvb3Qgc2NvcGUKKyAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgKiBCcm9hZGNh
c3RlZCBiZWZvcmUgYSByb3V0ZSBjaGFuZ2UuIEF0IHRoaXMgIHBvaW50IHRoZSByb3V0ZSBzZXJ2
aWNlcyBzdGFydHMKKyAgICAgKiByZXNvbHZpbmcgYWxsIG9mIHRoZSBkZXBlbmRlbmNpZXMgbmVl
ZGVkIGZvciB0aGUgcm91dGUgY2hhbmdlIHRvIG9jY3VyLgorICAgICAqIFR5cGljYWxseSB0aGlz
IGludm9sdmVzIGZldGNoaW5nIHRoZSB2aWV3IHRlbXBsYXRlIGFzIHdlbGwgYXMgYW55IGRlcGVu
ZGVuY2llcworICAgICAqIGRlZmluZWQgaW4gYHJlc29sdmVgIHJvdXRlIHByb3BlcnR5LiBPbmNl
ICBhbGwgb2YgdGhlIGRlcGVuZGVuY2llcyBhcmUgcmVzb2x2ZWQKKyAgICAgKiBgJHJvdXRlQ2hh
bmdlU3VjY2Vzc2AgaXMgZmlyZWQuCisgICAgICoKKyAgICAgKiBUaGUgcm91dGUgY2hhbmdlIChh
bmQgdGhlIGAkbG9jYXRpb25gIGNoYW5nZSB0aGF0IHRyaWdnZXJlZCBpdCkgY2FuIGJlIHByZXZl
bnRlZAorICAgICAqIGJ5IGNhbGxpbmcgYHByZXZlbnREZWZhdWx0YCBtZXRob2Qgb2YgdGhlIGV2
ZW50LiBTZWUge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJG9ufQorICAgICAqIGZvciBtb3Jl
IGRldGFpbHMgYWJvdXQgZXZlbnQgb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtIHtPYmpl
Y3R9IGFuZ3VsYXJFdmVudCBTeW50aGV0aWMgZXZlbnQgb2JqZWN0LgorICAgICAqIEBwYXJhbSB7
Um91dGV9IG5leHQgRnV0dXJlIHJvdXRlIGluZm9ybWF0aW9uLgorICAgICAqIEBwYXJhbSB7Um91
dGV9IGN1cnJlbnQgQ3VycmVudCByb3V0ZSBpbmZvcm1hdGlvbi4KKyAgICAgKi8KKworICAgIC8q
KgorICAgICAqIEBuZ2RvYyBldmVudAorICAgICAqIEBuYW1lICRyb3V0ZSMkcm91dGVDaGFuZ2VT
dWNjZXNzCisgICAgICogQGV2ZW50VHlwZSBicm9hZGNhc3Qgb24gcm9vdCBzY29wZQorICAgICAq
IEBkZXNjcmlwdGlvbgorICAgICAqIEJyb2FkY2FzdGVkIGFmdGVyIGEgcm91dGUgY2hhbmdlIGhh
cyBoYXBwZW5lZCBzdWNjZXNzZnVsbHkuCisgICAgICogVGhlIGByZXNvbHZlYCBkZXBlbmRlbmNp
ZXMgYXJlIG5vdyBhdmFpbGFibGUgaW4gdGhlIGBjdXJyZW50LmxvY2Fsc2AgcHJvcGVydHkuCisg
ICAgICoKKyAgICAgKiB7QGxpbmsgbmdSb3V0ZS5kaXJlY3RpdmU6bmdWaWV3IG5nVmlld30gbGlz
dGVucyBmb3IgdGhlIGRpcmVjdGl2ZQorICAgICAqIHRvIGluc3RhbnRpYXRlIHRoZSBjb250cm9s
bGVyIGFuZCByZW5kZXIgdGhlIHZpZXcuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge09iamVjdH0g
YW5ndWxhckV2ZW50IFN5bnRoZXRpYyBldmVudCBvYmplY3QuCisgICAgICogQHBhcmFtIHtSb3V0
ZX0gY3VycmVudCBDdXJyZW50IHJvdXRlIGluZm9ybWF0aW9uLgorICAgICAqIEBwYXJhbSB7Um91
dGV8VW5kZWZpbmVkfSBwcmV2aW91cyBQcmV2aW91cyByb3V0ZSBpbmZvcm1hdGlvbiwgb3IgdW5k
ZWZpbmVkIGlmIGN1cnJlbnQgaXMKKyAgICAgKiBmaXJzdCByb3V0ZSBlbnRlcmVkLgorICAgICAq
LworCisgICAgLyoqCisgICAgICogQG5nZG9jIGV2ZW50CisgICAgICogQG5hbWUgJHJvdXRlIyRy
b3V0ZUNoYW5nZUVycm9yCisgICAgICogQGV2ZW50VHlwZSBicm9hZGNhc3Qgb24gcm9vdCBzY29w
ZQorICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAqIEJyb2FkY2FzdGVkIGlmIGFueSBvZiB0aGUg
cmVzb2x2ZSBwcm9taXNlcyBhcmUgcmVqZWN0ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge09i
amVjdH0gYW5ndWxhckV2ZW50IFN5bnRoZXRpYyBldmVudCBvYmplY3QKKyAgICAgKiBAcGFyYW0g
e1JvdXRlfSBjdXJyZW50IEN1cnJlbnQgcm91dGUgaW5mb3JtYXRpb24uCisgICAgICogQHBhcmFt
IHtSb3V0ZX0gcHJldmlvdXMgUHJldmlvdXMgcm91dGUgaW5mb3JtYXRpb24uCisgICAgICogQHBh
cmFtIHtSb3V0ZX0gcmVqZWN0aW9uIFJlamVjdGlvbiBvZiB0aGUgcHJvbWlzZS4gVXN1YWxseSB0
aGUgZXJyb3Igb2YgdGhlIGZhaWxlZCBwcm9taXNlLgorICAgICAqLworCisgICAgLyoqCisgICAg
ICogQG5nZG9jIGV2ZW50CisgICAgICogQG5hbWUgJHJvdXRlIyRyb3V0ZVVwZGF0ZQorICAgICAq
IEBldmVudFR5cGUgYnJvYWRjYXN0IG9uIHJvb3Qgc2NvcGUKKyAgICAgKiBAZGVzY3JpcHRpb24K
KyAgICAgKiBUaGUgYHJlbG9hZE9uU2VhcmNoYCBwcm9wZXJ0eSBoYXMgYmVlbiBzZXQgdG8gZmFs
c2UsIGFuZCB3ZSBhcmUgcmV1c2luZyB0aGUgc2FtZQorICAgICAqIGluc3RhbmNlIG9mIHRoZSBD
b250cm9sbGVyLgorICAgICAqCisgICAgICogQHBhcmFtIHtPYmplY3R9IGFuZ3VsYXJFdmVudCBT
eW50aGV0aWMgZXZlbnQgb2JqZWN0CisgICAgICogQHBhcmFtIHtSb3V0ZX0gY3VycmVudCBDdXJy
ZW50L3ByZXZpb3VzIHJvdXRlIGluZm9ybWF0aW9uLgorICAgICAqLworCisgICAgdmFyIGZvcmNl
UmVsb2FkID0gZmFsc2UsCisgICAgICAgIHByZXBhcmVkUm91dGUsCisgICAgICAgIHByZXBhcmVk
Um91dGVJc1VwZGF0ZU9ubHksCisgICAgICAgICRyb3V0ZSA9IHsKKyAgICAgICAgICByb3V0ZXM6
IHJvdXRlcywKKworICAgICAgICAgIC8qKgorICAgICAgICAgICAqIEBuZ2RvYyBtZXRob2QKKyAg
ICAgICAgICAgKiBAbmFtZSAkcm91dGUjcmVsb2FkCisgICAgICAgICAgICoKKyAgICAgICAgICAg
KiBAZGVzY3JpcHRpb24KKyAgICAgICAgICAgKiBDYXVzZXMgYCRyb3V0ZWAgc2VydmljZSB0byBy
ZWxvYWQgdGhlIGN1cnJlbnQgcm91dGUgZXZlbiBpZgorICAgICAgICAgICAqIHtAbGluayBuZy4k
bG9jYXRpb24gJGxvY2F0aW9ufSBoYXNuJ3QgY2hhbmdlZC4KKyAgICAgICAgICAgKgorICAgICAg
ICAgICAqIEFzIGEgcmVzdWx0IG9mIHRoYXQsIHtAbGluayBuZ1JvdXRlLmRpcmVjdGl2ZTpuZ1Zp
ZXcgbmdWaWV3fQorICAgICAgICAgICAqIGNyZWF0ZXMgbmV3IHNjb3BlIGFuZCByZWluc3RhbnRp
YXRlcyB0aGUgY29udHJvbGxlci4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICByZWxvYWQ6IGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgZm9yY2VSZWxvYWQgPSB0cnVlOworCisgICAgICAgICAg
ICB2YXIgZmFrZUxvY2F0aW9uRXZlbnQgPSB7CisgICAgICAgICAgICAgIGRlZmF1bHRQcmV2ZW50
ZWQ6IGZhbHNlLAorICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24gZmFrZVBy
ZXZlbnREZWZhdWx0KCkgeworICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgZm9yY2VSZWxvYWQgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgJHJvb3RTY29wZS4kZXZhbEFzeW5j
KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICBwcmVwYXJlUm91dGUoZmFrZUxvY2F0aW9uRXZl
bnQpOworICAgICAgICAgICAgICBpZiAoIWZha2VMb2NhdGlvbkV2ZW50LmRlZmF1bHRQcmV2ZW50
ZWQpIGNvbW1pdFJvdXRlKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICB9LAorCisgICAg
ICAgICAgLyoqCisgICAgICAgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAgICAgICAqIEBuYW1l
ICRyb3V0ZSN1cGRhdGVQYXJhbXMKKyAgICAgICAgICAgKgorICAgICAgICAgICAqIEBkZXNjcmlw
dGlvbgorICAgICAgICAgICAqIENhdXNlcyBgJHJvdXRlYCBzZXJ2aWNlIHRvIHVwZGF0ZSB0aGUg
Y3VycmVudCBVUkwsIHJlcGxhY2luZworICAgICAgICAgICAqIGN1cnJlbnQgcm91dGUgcGFyYW1l
dGVycyB3aXRoIHRob3NlIHNwZWNpZmllZCBpbiBgbmV3UGFyYW1zYC4KKyAgICAgICAgICAgKiBQ
cm92aWRlZCBwcm9wZXJ0eSBuYW1lcyB0aGF0IG1hdGNoIHRoZSByb3V0ZSdzIHBhdGggc2VnbWVu
dAorICAgICAgICAgICAqIGRlZmluaXRpb25zIHdpbGwgYmUgaW50ZXJwb2xhdGVkIGludG8gdGhl
IGxvY2F0aW9uJ3MgcGF0aCwgd2hpbGUKKyAgICAgICAgICAgKiByZW1haW5pbmcgcHJvcGVydGll
cyB3aWxsIGJlIHRyZWF0ZWQgYXMgcXVlcnkgcGFyYW1zLgorICAgICAgICAgICAqCisgICAgICAg
ICAgICogQHBhcmFtIHshT2JqZWN0PHN0cmluZywgc3RyaW5nPn0gbmV3UGFyYW1zIG1hcHBpbmcg
b2YgVVJMIHBhcmFtZXRlciBuYW1lcyB0byB2YWx1ZXMKKyAgICAgICAgICAgKi8KKyAgICAgICAg
ICB1cGRhdGVQYXJhbXM6IGZ1bmN0aW9uKG5ld1BhcmFtcykgeworICAgICAgICAgICAgaWYgKHRo
aXMuY3VycmVudCAmJiB0aGlzLmN1cnJlbnQuJCRyb3V0ZSkgeworICAgICAgICAgICAgICBuZXdQ
YXJhbXMgPSBhbmd1bGFyLmV4dGVuZCh7fSwgdGhpcy5jdXJyZW50LnBhcmFtcywgbmV3UGFyYW1z
KTsKKyAgICAgICAgICAgICAgJGxvY2F0aW9uLnBhdGgoaW50ZXJwb2xhdGUodGhpcy5jdXJyZW50
LiQkcm91dGUub3JpZ2luYWxQYXRoLCBuZXdQYXJhbXMpKTsKKyAgICAgICAgICAgICAgLy8gaW50
ZXJwb2xhdGUgbW9kaWZpZXMgbmV3UGFyYW1zLCBvbmx5IHF1ZXJ5IHBhcmFtcyBhcmUgbGVmdAor
ICAgICAgICAgICAgICAkbG9jYXRpb24uc2VhcmNoKG5ld1BhcmFtcyk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICB0aHJvdyAkcm91dGVNaW5FcnIoJ25vcm91dCcsICdUcmll
ZCB1cGRhdGluZyByb3V0ZSB3aGVuIHdpdGggbm8gY3VycmVudCByb3V0ZScpOworICAgICAgICAg
ICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICRyb290U2NvcGUuJG9uKCckbG9j
YXRpb25DaGFuZ2VTdGFydCcsIHByZXBhcmVSb3V0ZSk7CisgICAgJHJvb3RTY29wZS4kb24oJyRs
b2NhdGlvbkNoYW5nZVN1Y2Nlc3MnLCBjb21taXRSb3V0ZSk7CisKKyAgICByZXR1cm4gJHJvdXRl
OworCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKworICAgIC8qKgorICAgICAqIEBwYXJhbSBvbiB7c3RyaW5nfSBjdXJyZW50IHVybAor
ICAgICAqIEBwYXJhbSByb3V0ZSB7T2JqZWN0fSByb3V0ZSByZWdleHAgdG8gbWF0Y2ggdGhlIHVy
bCBhZ2FpbnN0CisgICAgICogQHJldHVybiB7P09iamVjdH0KKyAgICAgKgorICAgICAqIEBkZXNj
cmlwdGlvbgorICAgICAqIENoZWNrIGlmIHRoZSByb3V0ZSBtYXRjaGVzIHRoZSBjdXJyZW50IHVy
bC4KKyAgICAgKgorICAgICAqIEluc3BpcmVkIGJ5IG1hdGNoIGluCisgICAgICogdmlzaW9ubWVk
aWEvZXhwcmVzcy9saWIvcm91dGVyL3JvdXRlci5qcy4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBz
d2l0Y2hSb3V0ZU1hdGNoZXIob24sIHJvdXRlKSB7CisgICAgICB2YXIga2V5cyA9IHJvdXRlLmtl
eXMsCisgICAgICAgICAgcGFyYW1zID0ge307CisKKyAgICAgIGlmICghcm91dGUucmVnZXhwKSBy
ZXR1cm4gbnVsbDsKKworICAgICAgdmFyIG0gPSByb3V0ZS5yZWdleHAuZXhlYyhvbik7CisgICAg
ICBpZiAoIW0pIHJldHVybiBudWxsOworCisgICAgICBmb3IgKHZhciBpID0gMSwgbGVuID0gbS5s
ZW5ndGg7IGkgPCBsZW47ICsraSkgeworICAgICAgICB2YXIga2V5ID0ga2V5c1tpIC0gMV07CisK
KyAgICAgICAgdmFyIHZhbCA9IG1baV07CisKKyAgICAgICAgaWYgKGtleSAmJiB2YWwpIHsKKyAg
ICAgICAgICBwYXJhbXNba2V5Lm5hbWVdID0gdmFsOworICAgICAgICB9CisgICAgICB9CisgICAg
ICByZXR1cm4gcGFyYW1zOworICAgIH0KKworICAgIGZ1bmN0aW9uIHByZXBhcmVSb3V0ZSgkbG9j
YXRpb25FdmVudCkgeworICAgICAgdmFyIGxhc3RSb3V0ZSA9ICRyb3V0ZS5jdXJyZW50OworCisg
ICAgICBwcmVwYXJlZFJvdXRlID0gcGFyc2VSb3V0ZSgpOworICAgICAgcHJlcGFyZWRSb3V0ZUlz
VXBkYXRlT25seSA9IHByZXBhcmVkUm91dGUgJiYgbGFzdFJvdXRlICYmIHByZXBhcmVkUm91dGUu
JCRyb3V0ZSA9PT0gbGFzdFJvdXRlLiQkcm91dGUKKyAgICAgICAgICAmJiBhbmd1bGFyLmVxdWFs
cyhwcmVwYXJlZFJvdXRlLnBhdGhQYXJhbXMsIGxhc3RSb3V0ZS5wYXRoUGFyYW1zKQorICAgICAg
ICAgICYmICFwcmVwYXJlZFJvdXRlLnJlbG9hZE9uU2VhcmNoICYmICFmb3JjZVJlbG9hZDsKKwor
ICAgICAgaWYgKCFwcmVwYXJlZFJvdXRlSXNVcGRhdGVPbmx5ICYmIChsYXN0Um91dGUgfHwgcHJl
cGFyZWRSb3V0ZSkpIHsKKyAgICAgICAgaWYgKCRyb290U2NvcGUuJGJyb2FkY2FzdCgnJHJvdXRl
Q2hhbmdlU3RhcnQnLCBwcmVwYXJlZFJvdXRlLCBsYXN0Um91dGUpLmRlZmF1bHRQcmV2ZW50ZWQp
IHsKKyAgICAgICAgICBpZiAoJGxvY2F0aW9uRXZlbnQpIHsKKyAgICAgICAgICAgICRsb2NhdGlv
bkV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9
CisgICAgfQorCisgICAgZnVuY3Rpb24gY29tbWl0Um91dGUoKSB7CisgICAgICB2YXIgbGFzdFJv
dXRlID0gJHJvdXRlLmN1cnJlbnQ7CisgICAgICB2YXIgbmV4dFJvdXRlID0gcHJlcGFyZWRSb3V0
ZTsKKworICAgICAgaWYgKHByZXBhcmVkUm91dGVJc1VwZGF0ZU9ubHkpIHsKKyAgICAgICAgbGFz
dFJvdXRlLnBhcmFtcyA9IG5leHRSb3V0ZS5wYXJhbXM7CisgICAgICAgIGFuZ3VsYXIuY29weShs
YXN0Um91dGUucGFyYW1zLCAkcm91dGVQYXJhbXMpOworICAgICAgICAkcm9vdFNjb3BlLiRicm9h
ZGNhc3QoJyRyb3V0ZVVwZGF0ZScsIGxhc3RSb3V0ZSk7CisgICAgICB9IGVsc2UgaWYgKG5leHRS
b3V0ZSB8fCBsYXN0Um91dGUpIHsKKyAgICAgICAgZm9yY2VSZWxvYWQgPSBmYWxzZTsKKyAgICAg
ICAgJHJvdXRlLmN1cnJlbnQgPSBuZXh0Um91dGU7CisgICAgICAgIGlmIChuZXh0Um91dGUpIHsK
KyAgICAgICAgICBpZiAobmV4dFJvdXRlLnJlZGlyZWN0VG8pIHsKKyAgICAgICAgICAgIGlmIChh
bmd1bGFyLmlzU3RyaW5nKG5leHRSb3V0ZS5yZWRpcmVjdFRvKSkgeworICAgICAgICAgICAgICAk
bG9jYXRpb24ucGF0aChpbnRlcnBvbGF0ZShuZXh0Um91dGUucmVkaXJlY3RUbywgbmV4dFJvdXRl
LnBhcmFtcykpLnNlYXJjaChuZXh0Um91dGUucGFyYW1zKQorICAgICAgICAgICAgICAgICAgICAg
ICAucmVwbGFjZSgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgJGxvY2F0
aW9uLnVybChuZXh0Um91dGUucmVkaXJlY3RUbyhuZXh0Um91dGUucGF0aFBhcmFtcywgJGxvY2F0
aW9uLnBhdGgoKSwgJGxvY2F0aW9uLnNlYXJjaCgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
LnJlcGxhY2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICAkcS53aGVuKG5leHRSb3V0ZSkuCisgICAgICAgICAgdGhlbihyZXNvbHZlTG9jYWxzKS4K
KyAgICAgICAgICB0aGVuKGZ1bmN0aW9uKGxvY2FscykgeworICAgICAgICAgICAgLy8gYWZ0ZXIg
cm91dGUgY2hhbmdlCisgICAgICAgICAgICBpZiAobmV4dFJvdXRlID09PSAkcm91dGUuY3VycmVu
dCkgeworICAgICAgICAgICAgICBpZiAobmV4dFJvdXRlKSB7CisgICAgICAgICAgICAgICAgbmV4
dFJvdXRlLmxvY2FscyA9IGxvY2FsczsKKyAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkobmV4
dFJvdXRlLnBhcmFtcywgJHJvdXRlUGFyYW1zKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAkcm9vdFNjb3BlLiRicm9hZGNhc3QoJyRyb3V0ZUNoYW5nZVN1Y2Nlc3MnLCBuZXh0Um91
dGUsIGxhc3RSb3V0ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSwgZnVuY3Rpb24oZXJy
b3IpIHsKKyAgICAgICAgICAgIGlmIChuZXh0Um91dGUgPT09ICRyb3V0ZS5jdXJyZW50KSB7Cisg
ICAgICAgICAgICAgICRyb290U2NvcGUuJGJyb2FkY2FzdCgnJHJvdXRlQ2hhbmdlRXJyb3InLCBu
ZXh0Um91dGUsIGxhc3RSb3V0ZSwgZXJyb3IpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0p
OworICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIHJlc29sdmVMb2NhbHMocm91dGUpIHsK
KyAgICAgIGlmIChyb3V0ZSkgeworICAgICAgICB2YXIgbG9jYWxzID0gYW5ndWxhci5leHRlbmQo
e30sIHJvdXRlLnJlc29sdmUpOworICAgICAgICBhbmd1bGFyLmZvckVhY2gobG9jYWxzLCBmdW5j
dGlvbih2YWx1ZSwga2V5KSB7CisgICAgICAgICAgbG9jYWxzW2tleV0gPSBhbmd1bGFyLmlzU3Ry
aW5nKHZhbHVlKSA/CisgICAgICAgICAgICAgICRpbmplY3Rvci5nZXQodmFsdWUpIDoKKyAgICAg
ICAgICAgICAgJGluamVjdG9yLmludm9rZSh2YWx1ZSwgbnVsbCwgbnVsbCwga2V5KTsKKyAgICAg
ICAgfSk7CisgICAgICAgIHZhciB0ZW1wbGF0ZSA9IGdldFRlbXBsYXRlRm9yKHJvdXRlKTsKKyAg
ICAgICAgaWYgKGFuZ3VsYXIuaXNEZWZpbmVkKHRlbXBsYXRlKSkgeworICAgICAgICAgIGxvY2Fs
c1snJHRlbXBsYXRlJ10gPSB0ZW1wbGF0ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gJHEu
YWxsKGxvY2Fscyk7CisgICAgICB9CisgICAgfQorCisKKyAgICBmdW5jdGlvbiBnZXRUZW1wbGF0
ZUZvcihyb3V0ZSkgeworICAgICAgdmFyIHRlbXBsYXRlLCB0ZW1wbGF0ZVVybDsKKyAgICAgIGlm
IChhbmd1bGFyLmlzRGVmaW5lZCh0ZW1wbGF0ZSA9IHJvdXRlLnRlbXBsYXRlKSkgeworICAgICAg
ICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKHRlbXBsYXRlKSkgeworICAgICAgICAgIHRlbXBsYXRl
ID0gdGVtcGxhdGUocm91dGUucGFyYW1zKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIGlmIChh
bmd1bGFyLmlzRGVmaW5lZCh0ZW1wbGF0ZVVybCA9IHJvdXRlLnRlbXBsYXRlVXJsKSkgeworICAg
ICAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKHRlbXBsYXRlVXJsKSkgeworICAgICAgICAgIHRl
bXBsYXRlVXJsID0gdGVtcGxhdGVVcmwocm91dGUucGFyYW1zKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoYW5ndWxhci5pc0RlZmluZWQodGVtcGxhdGVVcmwpKSB7CisgICAgICAgICAgcm91dGUu
bG9hZGVkVGVtcGxhdGVVcmwgPSAkc2NlLnZhbHVlT2YodGVtcGxhdGVVcmwpOworICAgICAgICAg
IHRlbXBsYXRlID0gJHRlbXBsYXRlUmVxdWVzdCh0ZW1wbGF0ZVVybCk7CisgICAgICAgIH0KKyAg
ICAgIH0KKyAgICAgIHJldHVybiB0ZW1wbGF0ZTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAq
IEByZXR1cm5zIHtPYmplY3R9IHRoZSBjdXJyZW50IGFjdGl2ZSByb3V0ZSwgYnkgbWF0Y2hpbmcg
aXQgYWdhaW5zdCB0aGUgVVJMCisgICAgICovCisgICAgZnVuY3Rpb24gcGFyc2VSb3V0ZSgpIHsK
KyAgICAgIC8vIE1hdGNoIGEgcm91dGUKKyAgICAgIHZhciBwYXJhbXMsIG1hdGNoOworICAgICAg
YW5ndWxhci5mb3JFYWNoKHJvdXRlcywgZnVuY3Rpb24ocm91dGUsIHBhdGgpIHsKKyAgICAgICAg
aWYgKCFtYXRjaCAmJiAocGFyYW1zID0gc3dpdGNoUm91dGVNYXRjaGVyKCRsb2NhdGlvbi5wYXRo
KCksIHJvdXRlKSkpIHsKKyAgICAgICAgICBtYXRjaCA9IGluaGVyaXQocm91dGUsIHsKKyAgICAg
ICAgICAgIHBhcmFtczogYW5ndWxhci5leHRlbmQoe30sICRsb2NhdGlvbi5zZWFyY2goKSwgcGFy
YW1zKSwKKyAgICAgICAgICAgIHBhdGhQYXJhbXM6IHBhcmFtc30pOworICAgICAgICAgIG1hdGNo
LiQkcm91dGUgPSByb3V0ZTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgICAvLyBObyByb3V0
ZSBtYXRjaGVkOyBmYWxsYmFjayB0byAib3RoZXJ3aXNlIiByb3V0ZQorICAgICAgcmV0dXJuIG1h
dGNoIHx8IHJvdXRlc1tudWxsXSAmJiBpbmhlcml0KHJvdXRlc1tudWxsXSwge3BhcmFtczoge30s
IHBhdGhQYXJhbXM6e319KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJucyB7c3Ry
aW5nfSBpbnRlcnBvbGF0aW9uIG9mIHRoZSByZWRpcmVjdCBwYXRoIHdpdGggdGhlIHBhcmFtZXRl
cnMKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpbnRlcnBvbGF0ZShzdHJpbmcsIHBhcmFtcykgewor
ICAgICAgdmFyIHJlc3VsdCA9IFtdOworICAgICAgYW5ndWxhci5mb3JFYWNoKChzdHJpbmcgfHwg
JycpLnNwbGl0KCc6JyksIGZ1bmN0aW9uKHNlZ21lbnQsIGkpIHsKKyAgICAgICAgaWYgKGkgPT09
IDApIHsKKyAgICAgICAgICByZXN1bHQucHVzaChzZWdtZW50KTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICB2YXIgc2VnbWVudE1hdGNoID0gc2VnbWVudC5tYXRjaCgvKFx3KykoPzpbPypd
KT8oLiopLyk7CisgICAgICAgICAgdmFyIGtleSA9IHNlZ21lbnRNYXRjaFsxXTsKKyAgICAgICAg
ICByZXN1bHQucHVzaChwYXJhbXNba2V5XSk7CisgICAgICAgICAgcmVzdWx0LnB1c2goc2VnbWVu
dE1hdGNoWzJdIHx8ICcnKTsKKyAgICAgICAgICBkZWxldGUgcGFyYW1zW2tleV07CisgICAgICAg
IH0KKyAgICAgIH0pOworICAgICAgcmV0dXJuIHJlc3VsdC5qb2luKCcnKTsKKyAgICB9CisgIH1d
OworfQorCituZ1JvdXRlTW9kdWxlLnByb3ZpZGVyKCckcm91dGVQYXJhbXMnLCAkUm91dGVQYXJh
bXNQcm92aWRlcik7CisKKworLyoqCisgKiBAbmdkb2Mgc2VydmljZQorICogQG5hbWUgJHJvdXRl
UGFyYW1zCisgKiBAcmVxdWlyZXMgJHJvdXRlCisgKiBAdGhpcworICoKKyAqIEBkZXNjcmlwdGlv
bgorICogVGhlIGAkcm91dGVQYXJhbXNgIHNlcnZpY2UgYWxsb3dzIHlvdSB0byByZXRyaWV2ZSB0
aGUgY3VycmVudCBzZXQgb2Ygcm91dGUgcGFyYW1ldGVycy4KKyAqCisgKiBSZXF1aXJlcyB0aGUg
e0BsaW5rIG5nUm91dGUgYG5nUm91dGVgfSBtb2R1bGUgdG8gYmUgaW5zdGFsbGVkLgorICoKKyAq
IFRoZSByb3V0ZSBwYXJhbWV0ZXJzIGFyZSBhIGNvbWJpbmF0aW9uIG9mIHtAbGluayBuZy4kbG9j
YXRpb24gYCRsb2NhdGlvbmB9J3MKKyAqIHtAbGluayBuZy4kbG9jYXRpb24jc2VhcmNoIGBzZWFy
Y2goKWB9IGFuZCB7QGxpbmsgbmcuJGxvY2F0aW9uI3BhdGggYHBhdGgoKWB9LgorICogVGhlIGBw
YXRoYCBwYXJhbWV0ZXJzIGFyZSBleHRyYWN0ZWQgd2hlbiB0aGUge0BsaW5rIG5nUm91dGUuJHJv
dXRlIGAkcm91dGVgfSBwYXRoIGlzIG1hdGNoZWQuCisgKgorICogSW4gY2FzZSBvZiBwYXJhbWV0
ZXIgbmFtZSBjb2xsaXNpb24sIGBwYXRoYCBwYXJhbXMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgYHNl
YXJjaGAgcGFyYW1zLgorICoKKyAqIFRoZSBzZXJ2aWNlIGd1YXJhbnRlZXMgdGhhdCB0aGUgaWRl
bnRpdHkgb2YgdGhlIGAkcm91dGVQYXJhbXNgIG9iamVjdCB3aWxsIHJlbWFpbiB1bmNoYW5nZWQK
KyAqIChidXQgaXRzIHByb3BlcnRpZXMgd2lsbCBsaWtlbHkgY2hhbmdlKSBldmVuIHdoZW4gYSBy
b3V0ZSBjaGFuZ2Ugb2NjdXJzLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgYCRyb3V0ZVBhcmFtc2Ag
YXJlIG9ubHkgdXBkYXRlZCAqYWZ0ZXIqIGEgcm91dGUgY2hhbmdlIGNvbXBsZXRlcyBzdWNjZXNz
ZnVsbHkuCisgKiBUaGlzIG1lYW5zIHRoYXQgeW91IGNhbm5vdCByZWx5IG9uIGAkcm91dGVQYXJh
bXNgIGJlaW5nIGNvcnJlY3QgaW4gcm91dGUgcmVzb2x2ZSBmdW5jdGlvbnMuCisgKiBJbnN0ZWFk
IHlvdSBjYW4gdXNlIGAkcm91dGUuY3VycmVudC5wYXJhbXNgIHRvIGFjY2VzcyB0aGUgbmV3IHJv
dXRlJ3MgcGFyYW1ldGVycy4KKyAqCisgKiBAZXhhbXBsZQorICogYGBganMKKyAqICAvLyBHaXZl
bjoKKyAqICAvLyBVUkw6IGh0dHA6Ly9zZXJ2ZXIuY29tL2luZGV4Lmh0bWwjL0NoYXB0ZXIvMS9T
ZWN0aW9uLzI/c2VhcmNoPW1vYnkKKyAqICAvLyBSb3V0ZTogL0NoYXB0ZXIvOmNoYXB0ZXJJZC9T
ZWN0aW9uLzpzZWN0aW9uSWQKKyAqICAvLworICogIC8vIFRoZW4KKyAqICAkcm91dGVQYXJhbXMg
PT0+IHtjaGFwdGVySWQ6JzEnLCBzZWN0aW9uSWQ6JzInLCBzZWFyY2g6J21vYnknfQorICogYGBg
CisgKi8KK2Z1bmN0aW9uICRSb3V0ZVBhcmFtc1Byb3ZpZGVyKCkgeworICB0aGlzLiRnZXQgPSBm
dW5jdGlvbigpIHsgcmV0dXJuIHt9OyB9OworfQorCituZ1JvdXRlTW9kdWxlLmRpcmVjdGl2ZSgn
bmdWaWV3JywgbmdWaWV3RmFjdG9yeSk7CituZ1JvdXRlTW9kdWxlLmRpcmVjdGl2ZSgnbmdWaWV3
JywgbmdWaWV3RmlsbENvbnRlbnRGYWN0b3J5KTsKKworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3Rp
dmUKKyAqIEBuYW1lIG5nVmlldworICogQHJlc3RyaWN0IEVDQQorICoKKyAqIEBkZXNjcmlwdGlv
bgorICogIyBPdmVydmlldworICogYG5nVmlld2AgaXMgYSBkaXJlY3RpdmUgdGhhdCBjb21wbGVt
ZW50cyB0aGUge0BsaW5rIG5nUm91dGUuJHJvdXRlICRyb3V0ZX0gc2VydmljZSBieQorICogaW5j
bHVkaW5nIHRoZSByZW5kZXJlZCB0ZW1wbGF0ZSBvZiB0aGUgY3VycmVudCByb3V0ZSBpbnRvIHRo
ZSBtYWluIGxheW91dCAoYGluZGV4Lmh0bWxgKSBmaWxlLgorICogRXZlcnkgdGltZSB0aGUgY3Vy
cmVudCByb3V0ZSBjaGFuZ2VzLCB0aGUgaW5jbHVkZWQgdmlldyBjaGFuZ2VzIHdpdGggaXQgYWNj
b3JkaW5nIHRvIHRoZQorICogY29uZmlndXJhdGlvbiBvZiB0aGUgYCRyb3V0ZWAgc2VydmljZS4K
KyAqCisgKiBSZXF1aXJlcyB0aGUge0BsaW5rIG5nUm91dGUgYG5nUm91dGVgfSBtb2R1bGUgdG8g
YmUgaW5zdGFsbGVkLgorICoKKyAqIEBhbmltYXRpb25zCisgKiB8IEFuaW1hdGlvbiAgICAgICAg
ICAgICAgICAgICAgICAgIHwgT2NjdXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAor
ICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAqIHwge0BsaW5rIG5nLiRhbmltYXRlI2VudGVyIGVudGVy
fSAgfCB3aGVuIHRoZSBuZXcgZWxlbWVudCBpcyBpbnNlcnRlZCB0byB0aGUgRE9NIHwKKyAqIHwg
e0BsaW5rIG5nLiRhbmltYXRlI2xlYXZlIGxlYXZlfSAgfCB3aGVuIHRoZSBvbGQgZWxlbWVudCBp
cyByZW1vdmVkIGZyb20gdG8gdGhlIERPTSAgfAorICoKKyAqIFRoZSBlbnRlciBhbmQgbGVhdmUg
YW5pbWF0aW9uIG9jY3VyIGNvbmN1cnJlbnRseS4KKyAqCisgKiBAa25vd25Jc3N1ZSBJZiBgbmdW
aWV3YCBpcyBjb250YWluZWQgaW4gYW4gYXN5bmNocm9ub3VzbHkgbG9hZGVkIHRlbXBsYXRlIChl
LmcuIGluIGFub3RoZXIKKyAqICAgICAgICAgICAgIGRpcmVjdGl2ZSdzIHRlbXBsYXRlVXJsIG9y
IGluIGEgdGVtcGxhdGUgbG9hZGVkIHVzaW5nIGBuZ0luY2x1ZGVgKSwgdGhlbiB5b3UgbmVlZCB0
bworICogICAgICAgICAgICAgbWFrZSBzdXJlIHRoYXQgYCRyb3V0ZWAgaXMgaW5zdGFudGlhdGVk
IGluIHRpbWUgdG8gY2FwdHVyZSB0aGUgaW5pdGlhbAorICogICAgICAgICAgICAgYCRsb2NhdGlv
bkNoYW5nZVN0YXJ0YCBldmVudCBhbmQgbG9hZCB0aGUgYXBwcm9wcmlhdGUgdmlldy4gT25lIHdh
eSB0byBhY2hpZXZlIHRoaXMKKyAqICAgICAgICAgICAgIGlzIHRvIGhhdmUgaXQgYXMgYSBkZXBl
bmRlbmN5IGluIGEgYC5ydW5gIGJsb2NrOgorICogICAgICAgICAgICAgYG15TW9kdWxlLnJ1bihb
JyRyb3V0ZScsIGZ1bmN0aW9uKCkge31dKTtgCisgKgorICogQHNjb3BlCisgKiBAcHJpb3JpdHkg
NDAwCisgKiBAcGFyYW0ge3N0cmluZz19IG9ubG9hZCBFeHByZXNzaW9uIHRvIGV2YWx1YXRlIHdo
ZW5ldmVyIHRoZSB2aWV3IHVwZGF0ZXMuCisgKgorICogQHBhcmFtIHtzdHJpbmc9fSBhdXRvc2Ny
b2xsIFdoZXRoZXIgYG5nVmlld2Agc2hvdWxkIGNhbGwge0BsaW5rIG5nLiRhbmNob3JTY3JvbGwK
KyAqICAgICAgICAgICAgICAgICAgJGFuY2hvclNjcm9sbH0gdG8gc2Nyb2xsIHRoZSB2aWV3cG9y
dCBhZnRlciB0aGUgdmlldyBpcyB1cGRhdGVkLgorICoKKyAqICAgICAgICAgICAgICAgICAgLSBJ
ZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzZXQsIGRpc2FibGUgc2Nyb2xsaW5nLgorICogICAgICAg
ICAgICAgICAgICAtIElmIHRoZSBhdHRyaWJ1dGUgaXMgc2V0IHdpdGhvdXQgdmFsdWUsIGVuYWJs
ZSBzY3JvbGxpbmcuCisgKiAgICAgICAgICAgICAgICAgIC0gT3RoZXJ3aXNlIGVuYWJsZSBzY3Jv
bGxpbmcgb25seSBpZiB0aGUgYGF1dG9zY3JvbGxgIGF0dHJpYnV0ZSB2YWx1ZSBldmFsdWF0ZWQK
KyAqICAgICAgICAgICAgICAgICAgICBhcyBhbiBleHByZXNzaW9uIHlpZWxkcyBhIHRydXRoeSB2
YWx1ZS4KKyAqIEBleGFtcGxlCisgICAgPGV4YW1wbGUgbmFtZT0ibmdWaWV3LWRpcmVjdGl2ZSIg
bW9kdWxlPSJuZ1ZpZXdFeGFtcGxlIgorICAgICAgICAgICAgIGRlcHM9ImFuZ3VsYXItcm91dGUu
anM7YW5ndWxhci1hbmltYXRlLmpzIgorICAgICAgICAgICAgIGFuaW1hdGlvbnM9InRydWUiIGZp
eEJhc2U9InRydWUiPgorICAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAgICAgIDxk
aXYgbmctY29udHJvbGxlcj0iTWFpbkN0cmwgYXMgbWFpbiI+CisgICAgICAgICAgQ2hvb3NlOgor
ICAgICAgICAgIDxhIGhyZWY9IkJvb2svTW9ieSI+TW9ieTwvYT4gfAorICAgICAgICAgIDxhIGhy
ZWY9IkJvb2svTW9ieS9jaC8xIj5Nb2J5OiBDaDE8L2E+IHwKKyAgICAgICAgICA8YSBocmVmPSJC
b29rL0dhdHNieSI+R2F0c2J5PC9hPiB8CisgICAgICAgICAgPGEgaHJlZj0iQm9vay9HYXRzYnkv
Y2gvND9rZXk9dmFsdWUiPkdhdHNieTogQ2g0PC9hPiB8CisgICAgICAgICAgPGEgaHJlZj0iQm9v
ay9TY2FybGV0Ij5TY2FybGV0IExldHRlcjwvYT48YnIvPgorCisgICAgICAgICAgPGRpdiBjbGFz
cz0idmlldy1hbmltYXRlLWNvbnRhaW5lciI+CisgICAgICAgICAgICA8ZGl2IG5nLXZpZXcgY2xh
c3M9InZpZXctYW5pbWF0ZSI+PC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPGhy
IC8+CisKKyAgICAgICAgICA8cHJlPiRsb2NhdGlvbi5wYXRoKCkgPSB7e21haW4uJGxvY2F0aW9u
LnBhdGgoKX19PC9wcmU+CisgICAgICAgICAgPHByZT4kcm91dGUuY3VycmVudC50ZW1wbGF0ZVVy
bCA9IHt7bWFpbi4kcm91dGUuY3VycmVudC50ZW1wbGF0ZVVybH19PC9wcmU+CisgICAgICAgICAg
PHByZT4kcm91dGUuY3VycmVudC5wYXJhbXMgPSB7e21haW4uJHJvdXRlLmN1cnJlbnQucGFyYW1z
fX08L3ByZT4KKyAgICAgICAgICA8cHJlPiRyb3V0ZVBhcmFtcyA9IHt7bWFpbi4kcm91dGVQYXJh
bXN9fTwvcHJlPgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZmlsZT4KKworICAgICAgPGZpbGUg
bmFtZT0iYm9vay5odG1sIj4KKyAgICAgICAgPGRpdj4KKyAgICAgICAgICBjb250cm9sbGVyOiB7
e2Jvb2submFtZX19PGJyIC8+CisgICAgICAgICAgQm9vayBJZDoge3tib29rLnBhcmFtcy5ib29r
SWR9fTxiciAvPgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZmlsZT4KKworICAgICAgPGZpbGUg
bmFtZT0iY2hhcHRlci5odG1sIj4KKyAgICAgICAgPGRpdj4KKyAgICAgICAgICBjb250cm9sbGVy
OiB7e2NoYXB0ZXIubmFtZX19PGJyIC8+CisgICAgICAgICAgQm9vayBJZDoge3tjaGFwdGVyLnBh
cmFtcy5ib29rSWR9fTxiciAvPgorICAgICAgICAgIENoYXB0ZXIgSWQ6IHt7Y2hhcHRlci5wYXJh
bXMuY2hhcHRlcklkfX0KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2ZpbGU+CisKKyAgICAgIDxm
aWxlIG5hbWU9ImFuaW1hdGlvbnMuY3NzIj4KKyAgICAgICAgLnZpZXctYW5pbWF0ZS1jb250YWlu
ZXIgeworICAgICAgICAgIHBvc2l0aW9uOnJlbGF0aXZlOworICAgICAgICAgIGhlaWdodDoxMDBw
eCFpbXBvcnRhbnQ7CisgICAgICAgICAgYmFja2dyb3VuZDp3aGl0ZTsKKyAgICAgICAgICBib3Jk
ZXI6MXB4IHNvbGlkIGJsYWNrOworICAgICAgICAgIGhlaWdodDo0MHB4OworICAgICAgICAgIG92
ZXJmbG93OmhpZGRlbjsKKyAgICAgICAgfQorCisgICAgICAgIC52aWV3LWFuaW1hdGUgeworICAg
ICAgICAgIHBhZGRpbmc6MTBweDsKKyAgICAgICAgfQorCisgICAgICAgIC52aWV3LWFuaW1hdGUu
bmctZW50ZXIsIC52aWV3LWFuaW1hdGUubmctbGVhdmUgeworICAgICAgICAgIHRyYW5zaXRpb246
YWxsIGN1YmljLWJlemllcigwLjI1MCwgMC40NjAsIDAuNDUwLCAwLjk0MCkgMS41czsKKworICAg
ICAgICAgIGRpc3BsYXk6YmxvY2s7CisgICAgICAgICAgd2lkdGg6MTAwJTsKKyAgICAgICAgICBi
b3JkZXItbGVmdDoxcHggc29saWQgYmxhY2s7CisKKyAgICAgICAgICBwb3NpdGlvbjphYnNvbHV0
ZTsKKyAgICAgICAgICB0b3A6MDsKKyAgICAgICAgICBsZWZ0OjA7CisgICAgICAgICAgcmlnaHQ6
MDsKKyAgICAgICAgICBib3R0b206MDsKKyAgICAgICAgICBwYWRkaW5nOjEwcHg7CisgICAgICAg
IH0KKworICAgICAgICAudmlldy1hbmltYXRlLm5nLWVudGVyIHsKKyAgICAgICAgICBsZWZ0OjEw
MCU7CisgICAgICAgIH0KKyAgICAgICAgLnZpZXctYW5pbWF0ZS5uZy1lbnRlci5uZy1lbnRlci1h
Y3RpdmUgeworICAgICAgICAgIGxlZnQ6MDsKKyAgICAgICAgfQorICAgICAgICAudmlldy1hbmlt
YXRlLm5nLWxlYXZlLm5nLWxlYXZlLWFjdGl2ZSB7CisgICAgICAgICAgbGVmdDotMTAwJTsKKyAg
ICAgICAgfQorICAgICAgPC9maWxlPgorCisgICAgICA8ZmlsZSBuYW1lPSJzY3JpcHQuanMiPgor
ICAgICAgICBhbmd1bGFyLm1vZHVsZSgnbmdWaWV3RXhhbXBsZScsIFsnbmdSb3V0ZScsICduZ0Fu
aW1hdGUnXSkKKyAgICAgICAgICAuY29uZmlnKFsnJHJvdXRlUHJvdmlkZXInLCAnJGxvY2F0aW9u
UHJvdmlkZXInLAorICAgICAgICAgICAgZnVuY3Rpb24oJHJvdXRlUHJvdmlkZXIsICRsb2NhdGlv
blByb3ZpZGVyKSB7CisgICAgICAgICAgICAgICRyb3V0ZVByb3ZpZGVyCisgICAgICAgICAgICAg
ICAgLndoZW4oJy9Cb29rLzpib29rSWQnLCB7CisgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVVy
bDogJ2Jvb2suaHRtbCcsCisgICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiAnQm9va0N0cmwn
LAorICAgICAgICAgICAgICAgICAgY29udHJvbGxlckFzOiAnYm9vaycKKyAgICAgICAgICAgICAg
ICB9KQorICAgICAgICAgICAgICAgIC53aGVuKCcvQm9vay86Ym9va0lkL2NoLzpjaGFwdGVySWQn
LCB7CisgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVVybDogJ2NoYXB0ZXIuaHRtbCcsCisgICAg
ICAgICAgICAgICAgICBjb250cm9sbGVyOiAnQ2hhcHRlckN0cmwnLAorICAgICAgICAgICAgICAg
ICAgY29udHJvbGxlckFzOiAnY2hhcHRlcicKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAg
ICAgICAgICAkbG9jYXRpb25Qcm92aWRlci5odG1sNU1vZGUodHJ1ZSk7CisgICAgICAgICAgfV0p
CisgICAgICAgICAgLmNvbnRyb2xsZXIoJ01haW5DdHJsJywgWyckcm91dGUnLCAnJHJvdXRlUGFy
YW1zJywgJyRsb2NhdGlvbicsCisgICAgICAgICAgICBmdW5jdGlvbiBNYWluQ3RybCgkcm91dGUs
ICRyb3V0ZVBhcmFtcywgJGxvY2F0aW9uKSB7CisgICAgICAgICAgICAgIHRoaXMuJHJvdXRlID0g
JHJvdXRlOworICAgICAgICAgICAgICB0aGlzLiRsb2NhdGlvbiA9ICRsb2NhdGlvbjsKKyAgICAg
ICAgICAgICAgdGhpcy4kcm91dGVQYXJhbXMgPSAkcm91dGVQYXJhbXM7CisgICAgICAgICAgfV0p
CisgICAgICAgICAgLmNvbnRyb2xsZXIoJ0Jvb2tDdHJsJywgWyckcm91dGVQYXJhbXMnLCBmdW5j
dGlvbiBCb29rQ3RybCgkcm91dGVQYXJhbXMpIHsKKyAgICAgICAgICAgIHRoaXMubmFtZSA9ICdC
b29rQ3RybCc7CisgICAgICAgICAgICB0aGlzLnBhcmFtcyA9ICRyb3V0ZVBhcmFtczsKKyAgICAg
ICAgICB9XSkKKyAgICAgICAgICAuY29udHJvbGxlcignQ2hhcHRlckN0cmwnLCBbJyRyb3V0ZVBh
cmFtcycsIGZ1bmN0aW9uIENoYXB0ZXJDdHJsKCRyb3V0ZVBhcmFtcykgeworICAgICAgICAgICAg
dGhpcy5uYW1lID0gJ0NoYXB0ZXJDdHJsJzsKKyAgICAgICAgICAgIHRoaXMucGFyYW1zID0gJHJv
dXRlUGFyYW1zOworICAgICAgICAgIH1dKTsKKworICAgICAgPC9maWxlPgorCisgICAgICA8Zmls
ZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFjdG9yIj4KKyAgICAgICAgaXQoJ3No
b3VsZCBsb2FkIGFuZCBjb21waWxlIGNvcnJlY3QgdGVtcGxhdGUnLCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICBlbGVtZW50KGJ5LmxpbmtUZXh0KCdNb2J5OiBDaDEnKSkuY2xpY2soKTsKKyAgICAg
ICAgICB2YXIgY29udGVudCA9IGVsZW1lbnQoYnkuY3NzKCdbbmctdmlld10nKSkuZ2V0VGV4dCgp
OworICAgICAgICAgIGV4cGVjdChjb250ZW50KS50b01hdGNoKC9jb250cm9sbGVyOiBDaGFwdGVy
Q3RybC8pOworICAgICAgICAgIGV4cGVjdChjb250ZW50KS50b01hdGNoKC9Cb29rIElkOiBNb2J5
Lyk7CisgICAgICAgICAgZXhwZWN0KGNvbnRlbnQpLnRvTWF0Y2goL0NoYXB0ZXIgSWQ6IDEvKTsK
KworICAgICAgICAgIGVsZW1lbnQoYnkucGFydGlhbExpbmtUZXh0KCdTY2FybGV0JykpLmNsaWNr
KCk7CisKKyAgICAgICAgICBjb250ZW50ID0gZWxlbWVudChieS5jc3MoJ1tuZy12aWV3XScpKS5n
ZXRUZXh0KCk7CisgICAgICAgICAgZXhwZWN0KGNvbnRlbnQpLnRvTWF0Y2goL2NvbnRyb2xsZXI6
IEJvb2tDdHJsLyk7CisgICAgICAgICAgZXhwZWN0KGNvbnRlbnQpLnRvTWF0Y2goL0Jvb2sgSWQ6
IFNjYXJsZXQvKTsKKyAgICAgICAgfSk7CisgICAgICA8L2ZpbGU+CisgICAgPC9leGFtcGxlPgor
ICovCisKKworLyoqCisgKiBAbmdkb2MgZXZlbnQKKyAqIEBuYW1lIG5nVmlldyMkdmlld0NvbnRl
bnRMb2FkZWQKKyAqIEBldmVudFR5cGUgZW1pdCBvbiB0aGUgY3VycmVudCBuZ1ZpZXcgc2NvcGUK
KyAqIEBkZXNjcmlwdGlvbgorICogRW1pdHRlZCBldmVyeSB0aW1lIHRoZSBuZ1ZpZXcgY29udGVu
dCBpcyByZWxvYWRlZC4KKyAqLworbmdWaWV3RmFjdG9yeS4kaW5qZWN0ID0gWyckcm91dGUnLCAn
JGFuY2hvclNjcm9sbCcsICckYW5pbWF0ZSddOworZnVuY3Rpb24gbmdWaWV3RmFjdG9yeSgkcm91
dGUsICRhbmNob3JTY3JvbGwsICRhbmltYXRlKSB7CisgIHJldHVybiB7CisgICAgcmVzdHJpY3Q6
ICdFQ0EnLAorICAgIHRlcm1pbmFsOiB0cnVlLAorICAgIHByaW9yaXR5OiA0MDAsCisgICAgdHJh
bnNjbHVkZTogJ2VsZW1lbnQnLAorICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCAkZWxlbWVudCwg
YXR0ciwgY3RybCwgJHRyYW5zY2x1ZGUpIHsKKyAgICAgICAgdmFyIGN1cnJlbnRTY29wZSwKKyAg
ICAgICAgICAgIGN1cnJlbnRFbGVtZW50LAorICAgICAgICAgICAgcHJldmlvdXNMZWF2ZUFuaW1h
dGlvbiwKKyAgICAgICAgICAgIGF1dG9TY3JvbGxFeHAgPSBhdHRyLmF1dG9zY3JvbGwsCisgICAg
ICAgICAgICBvbmxvYWRFeHAgPSBhdHRyLm9ubG9hZCB8fCAnJzsKKworICAgICAgICBzY29wZS4k
b24oJyRyb3V0ZUNoYW5nZVN1Y2Nlc3MnLCB1cGRhdGUpOworICAgICAgICB1cGRhdGUoKTsKKwor
ICAgICAgICBmdW5jdGlvbiBjbGVhbnVwTGFzdFZpZXcoKSB7CisgICAgICAgICAgaWYgKHByZXZp
b3VzTGVhdmVBbmltYXRpb24pIHsKKyAgICAgICAgICAgICRhbmltYXRlLmNhbmNlbChwcmV2aW91
c0xlYXZlQW5pbWF0aW9uKTsKKyAgICAgICAgICAgIHByZXZpb3VzTGVhdmVBbmltYXRpb24gPSBu
dWxsOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChjdXJyZW50U2NvcGUpIHsKKyAgICAg
ICAgICAgIGN1cnJlbnRTY29wZS4kZGVzdHJveSgpOworICAgICAgICAgICAgY3VycmVudFNjb3Bl
ID0gbnVsbDsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50KSB7Cisg
ICAgICAgICAgICBwcmV2aW91c0xlYXZlQW5pbWF0aW9uID0gJGFuaW1hdGUubGVhdmUoY3VycmVu
dEVsZW1lbnQpOworICAgICAgICAgICAgcHJldmlvdXNMZWF2ZUFuaW1hdGlvbi50aGVuKGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgICBwcmV2aW91c0xlYXZlQW5pbWF0aW9uID0gbnVsbDsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgY3VycmVudEVsZW1lbnQgPSBudWxsOworICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHVwZGF0ZSgpIHsKKyAgICAgICAg
ICB2YXIgbG9jYWxzID0gJHJvdXRlLmN1cnJlbnQgJiYgJHJvdXRlLmN1cnJlbnQubG9jYWxzLAor
ICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IGxvY2FscyAmJiBsb2NhbHMuJHRlbXBsYXRlOworCisg
ICAgICAgICAgaWYgKGFuZ3VsYXIuaXNEZWZpbmVkKHRlbXBsYXRlKSkgeworICAgICAgICAgICAg
dmFyIG5ld1Njb3BlID0gc2NvcGUuJG5ldygpOworICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSAk
cm91dGUuY3VycmVudDsKKworICAgICAgICAgICAgLy8gTm90ZTogVGhpcyB3aWxsIGFsc28gbGlu
ayBhbGwgY2hpbGRyZW4gb2YgbmctdmlldyB0aGF0IHdlcmUgY29udGFpbmVkIGluIHRoZSBvcmln
aW5hbAorICAgICAgICAgICAgLy8gaHRtbC4gSWYgdGhhdCBjb250ZW50IGNvbnRhaW5zIGNvbnRy
b2xsZXJzLCAuLi4gdGhleSBjb3VsZCBwb2xsdXRlL2NoYW5nZSB0aGUgc2NvcGUuCisgICAgICAg
ICAgICAvLyBIb3dldmVyLCB1c2luZyBuZy12aWV3IG9uIGFuIGVsZW1lbnQgd2l0aCBhZGRpdGlv
bmFsIGNvbnRlbnQgZG9lcyBub3QgbWFrZSBzZW5zZS4uLgorICAgICAgICAgICAgLy8gTm90ZTog
V2UgY2FuJ3QgcmVtb3ZlIHRoZW0gaW4gdGhlIGNsb25lQXR0Y2hGbiBvZiAkdHJhbnNjbHVkZSBh
cyB0aGF0CisgICAgICAgICAgICAvLyBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIGxpbmtpbmcg
dGhlIGNvbnRlbnQsIHdoaWNoIHdvdWxkIGFwcGx5IGNoaWxkCisgICAgICAgICAgICAvLyBkaXJl
Y3RpdmVzIHRvIG5vbiBleGlzdGluZyBlbGVtZW50cy4KKyAgICAgICAgICAgIHZhciBjbG9uZSA9
ICR0cmFuc2NsdWRlKG5ld1Njb3BlLCBmdW5jdGlvbihjbG9uZSkgeworICAgICAgICAgICAgICAk
YW5pbWF0ZS5lbnRlcihjbG9uZSwgbnVsbCwgY3VycmVudEVsZW1lbnQgfHwgJGVsZW1lbnQpLnRo
ZW4oZnVuY3Rpb24gb25OZ1ZpZXdFbnRlcigpIHsKKyAgICAgICAgICAgICAgICBpZiAoYW5ndWxh
ci5pc0RlZmluZWQoYXV0b1Njcm9sbEV4cCkKKyAgICAgICAgICAgICAgICAgICYmICghYXV0b1Nj
cm9sbEV4cCB8fCBzY29wZS4kZXZhbChhdXRvU2Nyb2xsRXhwKSkpIHsKKyAgICAgICAgICAgICAg
ICAgICRhbmNob3JTY3JvbGwoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICBjbGVhbnVwTGFzdFZpZXcoKTsKKyAgICAgICAgICAgIH0pOworCisg
ICAgICAgICAgICBjdXJyZW50RWxlbWVudCA9IGNsb25lOworICAgICAgICAgICAgY3VycmVudFNj
b3BlID0gY3VycmVudC5zY29wZSA9IG5ld1Njb3BlOworICAgICAgICAgICAgY3VycmVudFNjb3Bl
LiRlbWl0KCckdmlld0NvbnRlbnRMb2FkZWQnKTsKKyAgICAgICAgICAgIGN1cnJlbnRTY29wZS4k
ZXZhbChvbmxvYWRFeHApOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjbGVhbnVw
TGFzdFZpZXcoKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgIH07Cit9CisKKy8v
IFRoaXMgZGlyZWN0aXZlIGlzIGNhbGxlZCBkdXJpbmcgdGhlICR0cmFuc2NsdWRlIGNhbGwgb2Yg
dGhlIGZpcnN0IGBuZ1ZpZXdgIGRpcmVjdGl2ZS4KKy8vIEl0IHdpbGwgcmVwbGFjZSBhbmQgY29t
cGlsZSB0aGUgY29udGVudCBvZiB0aGUgZWxlbWVudCB3aXRoIHRoZSBsb2FkZWQgdGVtcGxhdGUu
CisvLyBXZSBuZWVkIHRoaXMgZGlyZWN0aXZlIHNvIHRoYXQgdGhlIGVsZW1lbnQgY29udGVudCBp
cyBhbHJlYWR5IGZpbGxlZCB3aGVuCisvLyB0aGUgbGluayBmdW5jdGlvbiBvZiBhbm90aGVyIGRp
cmVjdGl2ZSBvbiB0aGUgc2FtZSBlbGVtZW50IGFzIG5nVmlldworLy8gaXMgY2FsbGVkLgorbmdW
aWV3RmlsbENvbnRlbnRGYWN0b3J5LiRpbmplY3QgPSBbJyRjb21waWxlJywgJyRjb250cm9sbGVy
JywgJyRyb3V0ZSddOworZnVuY3Rpb24gbmdWaWV3RmlsbENvbnRlbnRGYWN0b3J5KCRjb21waWxl
LCAkY29udHJvbGxlciwgJHJvdXRlKSB7CisgIHJldHVybiB7CisgICAgcmVzdHJpY3Q6ICdFQ0En
LAorICAgIHByaW9yaXR5OiAtNDAwLAorICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCAkZWxlbWVu
dCkgeworICAgICAgdmFyIGN1cnJlbnQgPSAkcm91dGUuY3VycmVudCwKKyAgICAgICAgICBsb2Nh
bHMgPSBjdXJyZW50LmxvY2FsczsKKworICAgICAgJGVsZW1lbnQuaHRtbChsb2NhbHMuJHRlbXBs
YXRlKTsKKworICAgICAgdmFyIGxpbmsgPSAkY29tcGlsZSgkZWxlbWVudC5jb250ZW50cygpKTsK
KworICAgICAgaWYgKGN1cnJlbnQuY29udHJvbGxlcikgeworICAgICAgICBsb2NhbHMuJHNjb3Bl
ID0gc2NvcGU7CisgICAgICAgIHZhciBjb250cm9sbGVyID0gJGNvbnRyb2xsZXIoY3VycmVudC5j
b250cm9sbGVyLCBsb2NhbHMpOworICAgICAgICBpZiAoY3VycmVudC5jb250cm9sbGVyQXMpIHsK
KyAgICAgICAgICBzY29wZVtjdXJyZW50LmNvbnRyb2xsZXJBc10gPSBjb250cm9sbGVyOworICAg
ICAgICB9CisgICAgICAgICRlbGVtZW50LmRhdGEoJyRuZ0NvbnRyb2xsZXJDb250cm9sbGVyJywg
Y29udHJvbGxlcik7CisgICAgICAgICRlbGVtZW50LmNoaWxkcmVuKCkuZGF0YSgnJG5nQ29udHJv
bGxlckNvbnRyb2xsZXInLCBjb250cm9sbGVyKTsKKyAgICAgIH0KKyAgICAgIHNjb3BlW2N1cnJl
bnQucmVzb2x2ZUFzIHx8ICckcmVzb2x2ZSddID0gbG9jYWxzOworCisgICAgICBsaW5rKHNjb3Bl
KTsKKyAgICB9CisgIH07Cit9CisKKworfSkod2luZG93LCB3aW5kb3cuYW5ndWxhcik7CmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvbm9kZV9tb2R1bGVzL2FuZ3VsYXIvYW5ndWxh
ci5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9ub2RlX21vZHVsZXMvYW5ndWxhci9hbmd1bGFy
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmY3NDQyYzBiMDMxY2M4YWZhYjU3OGU3NzlmOWFkZGEwOTZkN2ViNDcK
LS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvbm9kZV9tb2R1bGVzL2Fu
Z3VsYXIvYW5ndWxhci5qcwpAQCAtMCwwICsxLDI4MzY0IEBACisvKioKKyAqIEBsaWNlbnNlIEFu
Z3VsYXJKUyB2MS40LjMKKyAqIChjKSAyMDEwLTIwMTUgR29vZ2xlLCBJbmMuIGh0dHA6Ly9hbmd1
bGFyanMub3JnCisgKiBMaWNlbnNlOiBNSVQKKyAqLworKGZ1bmN0aW9uKHdpbmRvdywgZG9jdW1l
bnQsIHVuZGVmaW5lZCkgeyd1c2Ugc3RyaWN0JzsKKworLyoqCisgKiBAZGVzY3JpcHRpb24KKyAq
CisgKiBUaGlzIG9iamVjdCBwcm92aWRlcyBhIHV0aWxpdHkgZm9yIHByb2R1Y2luZyByaWNoIEVy
cm9yIG1lc3NhZ2VzIHdpdGhpbgorICogQW5ndWxhci4gSXQgY2FuIGJlIGNhbGxlZCBhcyBmb2xs
b3dzOgorICoKKyAqIHZhciBleGFtcGxlTWluRXJyID0gbWluRXJyKCdleGFtcGxlJyk7CisgKiB0
aHJvdyBleGFtcGxlTWluRXJyKCdvbmUnLCAnVGhpcyB7MH0gaXMgezF9JywgZm9vLCBiYXIpOwor
ICoKKyAqIFRoZSBhYm92ZSBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIG1pbkVyciBpbiB0aGUgZXhh
bXBsZSBuYW1lc3BhY2UuIFRoZQorICogcmVzdWx0aW5nIGVycm9yIHdpbGwgaGF2ZSBhIG5hbWVz
cGFjZWQgZXJyb3IgY29kZSBvZiBleGFtcGxlLm9uZS4gIFRoZQorICogcmVzdWx0aW5nIGVycm9y
IHdpbGwgcmVwbGFjZSB7MH0gd2l0aCB0aGUgdmFsdWUgb2YgZm9vLCBhbmQgezF9IHdpdGggdGhl
CisgKiB2YWx1ZSBvZiBiYXIuIFRoZSBvYmplY3QgaXMgbm90IHJlc3RyaWN0ZWQgaW4gdGhlIG51
bWJlciBvZiBhcmd1bWVudHMgaXQgY2FuCisgKiB0YWtlLgorICoKKyAqIElmIGZld2VyIGFyZ3Vt
ZW50cyBhcmUgc3BlY2lmaWVkIHRoYW4gbmVjZXNzYXJ5IGZvciBpbnRlcnBvbGF0aW9uLCB0aGUg
ZXh0cmEKKyAqIGludGVycG9sYXRpb24gbWFya2VycyB3aWxsIGJlIHByZXNlcnZlZCBpbiB0aGUg
ZmluYWwgc3RyaW5nLgorICoKKyAqIFNpbmNlIGRhdGEgd2lsbCBiZSBwYXJzZWQgc3RhdGljYWxs
eSBkdXJpbmcgYSBidWlsZCBzdGVwLCBzb21lIHJlc3RyaWN0aW9ucworICogYXJlIGFwcGxpZWQg
d2l0aCByZXNwZWN0IHRvIGhvdyBtaW5FcnIgaW5zdGFuY2VzIGFyZSBjcmVhdGVkIGFuZCBjYWxs
ZWQuCisgKiBJbnN0YW5jZXMgc2hvdWxkIGhhdmUgbmFtZXMgb2YgdGhlIGZvcm0gbmFtZXNwYWNl
TWluRXJyIGZvciBhIG1pbkVyciBjcmVhdGVkCisgKiB1c2luZyBtaW5FcnIoJ25hbWVzcGFjZScp
IC4gRXJyb3IgY29kZXMsIG5hbWVzcGFjZXMgYW5kIHRlbXBsYXRlIHN0cmluZ3MKKyAqIHNob3Vs
ZCBhbGwgYmUgc3RhdGljIHN0cmluZ3MsIG5vdCB2YXJpYWJsZXMgb3IgZ2VuZXJhbCBleHByZXNz
aW9ucy4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gbW9kdWxlIFRoZSBuYW1lc3BhY2UgdG8gdXNl
IGZvciB0aGUgbmV3IG1pbkVyciBpbnN0YW5jZS4KKyAqIEBwYXJhbSB7ZnVuY3Rpb259IEVycm9y
Q29uc3RydWN0b3IgQ3VzdG9tIGVycm9yIGNvbnN0cnVjdG9yIHRvIGJlIGluc3RhbnRpYXRlZCB3
aGVuIHJldHVybmluZworICogICBlcnJvciBmcm9tIHJldHVybmVkIGZ1bmN0aW9uLCBmb3IgY2Fz
ZXMgd2hlbiBhIHBhcnRpY3VsYXIgdHlwZSBvZiBlcnJvciBpcyB1c2VmdWwuCisgKiBAcmV0dXJu
cyB7ZnVuY3Rpb24oY29kZTpzdHJpbmcsIHRlbXBsYXRlOnN0cmluZywgLi4udGVtcGxhdGVBcmdz
KTogRXJyb3J9IG1pbkVyciBpbnN0YW5jZQorICovCisKK2Z1bmN0aW9uIG1pbkVycihtb2R1bGUs
IEVycm9yQ29uc3RydWN0b3IpIHsKKyAgRXJyb3JDb25zdHJ1Y3RvciA9IEVycm9yQ29uc3RydWN0
b3IgfHwgRXJyb3I7CisgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICB2YXIgU0tJUF9JTkRFWEVT
ID0gMjsKKworICAgIHZhciB0ZW1wbGF0ZUFyZ3MgPSBhcmd1bWVudHMsCisgICAgICBjb2RlID0g
dGVtcGxhdGVBcmdzWzBdLAorICAgICAgbWVzc2FnZSA9ICdbJyArIChtb2R1bGUgPyBtb2R1bGUg
KyAnOicgOiAnJykgKyBjb2RlICsgJ10gJywKKyAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGVBcmdz
WzFdLAorICAgICAgcGFyYW1QcmVmaXgsIGk7CisKKyAgICBtZXNzYWdlICs9IHRlbXBsYXRlLnJl
cGxhY2UoL1x7XGQrXH0vZywgZnVuY3Rpb24obWF0Y2gpIHsKKyAgICAgIHZhciBpbmRleCA9ICtt
YXRjaC5zbGljZSgxLCAtMSksCisgICAgICAgIHNoaWZ0ZWRJbmRleCA9IGluZGV4ICsgU0tJUF9J
TkRFWEVTOworCisgICAgICBpZiAoc2hpZnRlZEluZGV4IDwgdGVtcGxhdGVBcmdzLmxlbmd0aCkg
eworICAgICAgICByZXR1cm4gdG9EZWJ1Z1N0cmluZyh0ZW1wbGF0ZUFyZ3Nbc2hpZnRlZEluZGV4
XSk7CisgICAgICB9CisKKyAgICAgIHJldHVybiBtYXRjaDsKKyAgICB9KTsKKworICAgIG1lc3Nh
Z2UgKz0gJ1xuaHR0cDovL2Vycm9ycy5hbmd1bGFyanMub3JnLzEuNC4zLycgKworICAgICAgKG1v
ZHVsZSA/IG1vZHVsZSArICcvJyA6ICcnKSArIGNvZGU7CisKKyAgICBmb3IgKGkgPSBTS0lQX0lO
REVYRVMsIHBhcmFtUHJlZml4ID0gJz8nOyBpIDwgdGVtcGxhdGVBcmdzLmxlbmd0aDsgaSsrLCBw
YXJhbVByZWZpeCA9ICcmJykgeworICAgICAgbWVzc2FnZSArPSBwYXJhbVByZWZpeCArICdwJyAr
IChpIC0gU0tJUF9JTkRFWEVTKSArICc9JyArCisgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudCh0
b0RlYnVnU3RyaW5nKHRlbXBsYXRlQXJnc1tpXSkpOworICAgIH0KKworICAgIHJldHVybiBuZXcg
RXJyb3JDb25zdHJ1Y3RvcihtZXNzYWdlKTsKKyAgfTsKK30KKworLyogV2UgbmVlZCB0byB0ZWxs
IGpzaGludCB3aGF0IHZhcmlhYmxlcyBhcmUgYmVpbmcgZXhwb3J0ZWQgKi8KKy8qIGdsb2JhbCBh
bmd1bGFyOiB0cnVlLAorICBtc2llOiB0cnVlLAorICBqcUxpdGU6IHRydWUsCisgIGpRdWVyeTog
dHJ1ZSwKKyAgc2xpY2U6IHRydWUsCisgIHNwbGljZTogdHJ1ZSwKKyAgcHVzaDogdHJ1ZSwKKyAg
dG9TdHJpbmc6IHRydWUsCisgIG5nTWluRXJyOiB0cnVlLAorICBhbmd1bGFyTW9kdWxlOiB0cnVl
LAorICB1aWQ6IHRydWUsCisgIFJFR0VYX1NUUklOR19SRUdFWFA6IHRydWUsCisgIFZBTElESVRZ
X1NUQVRFX1BST1BFUlRZOiB0cnVlLAorCisgIGxvd2VyY2FzZTogdHJ1ZSwKKyAgdXBwZXJjYXNl
OiB0cnVlLAorICBtYW51YWxMb3dlcmNhc2U6IHRydWUsCisgIG1hbnVhbFVwcGVyY2FzZTogdHJ1
ZSwKKyAgbm9kZU5hbWVfOiB0cnVlLAorICBpc0FycmF5TGlrZTogdHJ1ZSwKKyAgZm9yRWFjaDog
dHJ1ZSwKKyAgZm9yRWFjaFNvcnRlZDogdHJ1ZSwKKyAgcmV2ZXJzZVBhcmFtczogdHJ1ZSwKKyAg
bmV4dFVpZDogdHJ1ZSwKKyAgc2V0SGFzaEtleTogdHJ1ZSwKKyAgZXh0ZW5kOiB0cnVlLAorICB0
b0ludDogdHJ1ZSwKKyAgaW5oZXJpdDogdHJ1ZSwKKyAgbWVyZ2U6IHRydWUsCisgIG5vb3A6IHRy
dWUsCisgIGlkZW50aXR5OiB0cnVlLAorICB2YWx1ZUZuOiB0cnVlLAorICBpc1VuZGVmaW5lZDog
dHJ1ZSwKKyAgaXNEZWZpbmVkOiB0cnVlLAorICBpc09iamVjdDogdHJ1ZSwKKyAgaXNCbGFua09i
amVjdDogdHJ1ZSwKKyAgaXNTdHJpbmc6IHRydWUsCisgIGlzTnVtYmVyOiB0cnVlLAorICBpc0Rh
dGU6IHRydWUsCisgIGlzQXJyYXk6IHRydWUsCisgIGlzRnVuY3Rpb246IHRydWUsCisgIGlzUmVn
RXhwOiB0cnVlLAorICBpc1dpbmRvdzogdHJ1ZSwKKyAgaXNTY29wZTogdHJ1ZSwKKyAgaXNGaWxl
OiB0cnVlLAorICBpc0Zvcm1EYXRhOiB0cnVlLAorICBpc0Jsb2I6IHRydWUsCisgIGlzQm9vbGVh
bjogdHJ1ZSwKKyAgaXNQcm9taXNlTGlrZTogdHJ1ZSwKKyAgdHJpbTogdHJ1ZSwKKyAgZXNjYXBl
Rm9yUmVnZXhwOiB0cnVlLAorICBpc0VsZW1lbnQ6IHRydWUsCisgIG1ha2VNYXA6IHRydWUsCisg
IGluY2x1ZGVzOiB0cnVlLAorICBhcnJheVJlbW92ZTogdHJ1ZSwKKyAgY29weTogdHJ1ZSwKKyAg
c2hhbGxvd0NvcHk6IHRydWUsCisgIGVxdWFsczogdHJ1ZSwKKyAgY3NwOiB0cnVlLAorICBqcTog
dHJ1ZSwKKyAgY29uY2F0OiB0cnVlLAorICBzbGljZUFyZ3M6IHRydWUsCisgIGJpbmQ6IHRydWUs
CisgIHRvSnNvblJlcGxhY2VyOiB0cnVlLAorICB0b0pzb246IHRydWUsCisgIGZyb21Kc29uOiB0
cnVlLAorICBjb252ZXJ0VGltZXpvbmVUb0xvY2FsOiB0cnVlLAorICB0aW1lem9uZVRvT2Zmc2V0
OiB0cnVlLAorICBzdGFydGluZ1RhZzogdHJ1ZSwKKyAgdHJ5RGVjb2RlVVJJQ29tcG9uZW50OiB0
cnVlLAorICBwYXJzZUtleVZhbHVlOiB0cnVlLAorICB0b0tleVZhbHVlOiB0cnVlLAorICBlbmNv
ZGVVcmlTZWdtZW50OiB0cnVlLAorICBlbmNvZGVVcmlRdWVyeTogdHJ1ZSwKKyAgYW5ndWxhcklu
aXQ6IHRydWUsCisgIGJvb3RzdHJhcDogdHJ1ZSwKKyAgZ2V0VGVzdGFiaWxpdHk6IHRydWUsCisg
IHNuYWtlX2Nhc2U6IHRydWUsCisgIGJpbmRKUXVlcnk6IHRydWUsCisgIGFzc2VydEFyZzogdHJ1
ZSwKKyAgYXNzZXJ0QXJnRm46IHRydWUsCisgIGFzc2VydE5vdEhhc093blByb3BlcnR5OiB0cnVl
LAorICBnZXR0ZXI6IHRydWUsCisgIGdldEJsb2NrTm9kZXM6IHRydWUsCisgIGhhc093blByb3Bl
cnR5OiB0cnVlLAorICBjcmVhdGVNYXA6IHRydWUsCisKKyAgTk9ERV9UWVBFX0VMRU1FTlQ6IHRy
dWUsCisgIE5PREVfVFlQRV9BVFRSSUJVVEU6IHRydWUsCisgIE5PREVfVFlQRV9URVhUOiB0cnVl
LAorICBOT0RFX1RZUEVfQ09NTUVOVDogdHJ1ZSwKKyAgTk9ERV9UWVBFX0RPQ1VNRU5UOiB0cnVl
LAorICBOT0RFX1RZUEVfRE9DVU1FTlRfRlJBR01FTlQ6IHRydWUsCisqLworCisvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLyoqCisgKiBAbmdkb2MgbW9kdWxlCisgKiBA
bmFtZSBuZworICogQG1vZHVsZSBuZworICogQGRlc2NyaXB0aW9uCisgKgorICogIyBuZyAoY29y
ZSBtb2R1bGUpCisgKiBUaGUgbmcgbW9kdWxlIGlzIGxvYWRlZCBieSBkZWZhdWx0IHdoZW4gYW4g
QW5ndWxhckpTIGFwcGxpY2F0aW9uIGlzIHN0YXJ0ZWQuIFRoZSBtb2R1bGUgaXRzZWxmCisgKiBj
b250YWlucyB0aGUgZXNzZW50aWFsIGNvbXBvbmVudHMgZm9yIGFuIEFuZ3VsYXJKUyBhcHBsaWNh
dGlvbiB0byBmdW5jdGlvbi4gVGhlIHRhYmxlIGJlbG93CisgKiBsaXN0cyBhIGhpZ2ggbGV2ZWwg
YnJlYWtkb3duIG9mIGVhY2ggb2YgdGhlIHNlcnZpY2VzL2ZhY3RvcmllcywgZmlsdGVycywgZGly
ZWN0aXZlcyBhbmQgdGVzdGluZworICogY29tcG9uZW50cyBhdmFpbGFibGUgd2l0aGluIHRoaXMg
Y29yZSBtb2R1bGUuCisgKgorICogPGRpdiBkb2MtbW9kdWxlLWNvbXBvbmVudHM9Im5nIj48L2Rp
dj4KKyAqLworCit2YXIgUkVHRVhfU1RSSU5HX1JFR0VYUCA9IC9eXC8oLispXC8oW2Etel0qKSQv
OworCisvLyBUaGUgbmFtZSBvZiBhIGZvcm0gY29udHJvbCdzIFZhbGlkaXR5U3RhdGUgcHJvcGVy
dHkuCisvLyBUaGlzIGlzIHVzZWQgc28gdGhhdCBpdCdzIHBvc3NpYmxlIGZvciBpbnRlcm5hbCB0
ZXN0cyB0byBjcmVhdGUgbW9jayBWYWxpZGl0eVN0YXRlcy4KK3ZhciBWQUxJRElUWV9TVEFURV9Q
Uk9QRVJUWSA9ICd2YWxpZGl0eSc7CisKKy8qKgorICogQG5nZG9jIGZ1bmN0aW9uCisgKiBAbmFt
ZSBhbmd1bGFyLmxvd2VyY2FzZQorICogQG1vZHVsZSBuZworICogQGtpbmQgZnVuY3Rpb24KKyAq
CisgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIHNwZWNpZmllZCBzdHJpbmcgdG8gbG93ZXJj
YXNlLgorICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBTdHJpbmcgdG8gYmUgY29udmVydGVkIHRv
IGxvd2VyY2FzZS4KKyAqIEByZXR1cm5zIHtzdHJpbmd9IExvd2VyY2FzZWQgc3RyaW5nLgorICov
Cit2YXIgbG93ZXJjYXNlID0gZnVuY3Rpb24oc3RyaW5nKSB7cmV0dXJuIGlzU3RyaW5nKHN0cmlu
ZykgPyBzdHJpbmcudG9Mb3dlckNhc2UoKSA6IHN0cmluZzt9OwordmFyIGhhc093blByb3BlcnR5
ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTsKKworLyoqCisgKiBAbmdkb2MgZnVu
Y3Rpb24KKyAqIEBuYW1lIGFuZ3VsYXIudXBwZXJjYXNlCisgKiBAbW9kdWxlIG5nCisgKiBAa2lu
ZCBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgc3BlY2lmaWVkIHN0
cmluZyB0byB1cHBlcmNhc2UuCisgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFN0cmluZyB0byBi
ZSBjb252ZXJ0ZWQgdG8gdXBwZXJjYXNlLgorICogQHJldHVybnMge3N0cmluZ30gVXBwZXJjYXNl
ZCBzdHJpbmcuCisgKi8KK3ZhciB1cHBlcmNhc2UgPSBmdW5jdGlvbihzdHJpbmcpIHtyZXR1cm4g
aXNTdHJpbmcoc3RyaW5nKSA/IHN0cmluZy50b1VwcGVyQ2FzZSgpIDogc3RyaW5nO307CisKKwor
dmFyIG1hbnVhbExvd2VyY2FzZSA9IGZ1bmN0aW9uKHMpIHsKKyAgLyoganNoaW50IGJpdHdpc2U6
IGZhbHNlICovCisgIHJldHVybiBpc1N0cmluZyhzKQorICAgICAgPyBzLnJlcGxhY2UoL1tBLVpd
L2csIGZ1bmN0aW9uKGNoKSB7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY2guY2hhckNvZGVB
dCgwKSB8IDMyKTt9KQorICAgICAgOiBzOworfTsKK3ZhciBtYW51YWxVcHBlcmNhc2UgPSBmdW5j
dGlvbihzKSB7CisgIC8qIGpzaGludCBiaXR3aXNlOiBmYWxzZSAqLworICByZXR1cm4gaXNTdHJp
bmcocykKKyAgICAgID8gcy5yZXBsYWNlKC9bYS16XS9nLCBmdW5jdGlvbihjaCkge3JldHVybiBT
dHJpbmcuZnJvbUNoYXJDb2RlKGNoLmNoYXJDb2RlQXQoMCkgJiB+MzIpO30pCisgICAgICA6IHM7
Cit9OworCisKKy8vIFN0cmluZyN0b0xvd2VyQ2FzZSBhbmQgU3RyaW5nI3RvVXBwZXJDYXNlIGRv
bid0IHByb2R1Y2UgY29ycmVjdCByZXN1bHRzIGluIGJyb3dzZXJzIHdpdGggVHVya2lzaAorLy8g
bG9jYWxlLCBmb3IgdGhpcyByZWFzb24gd2UgbmVlZCB0byBkZXRlY3QgdGhpcyBjYXNlIGFuZCBy
ZWRlZmluZSBsb3dlcmNhc2UvdXBwZXJjYXNlIG1ldGhvZHMKKy8vIHdpdGggY29ycmVjdCBidXQg
c2xvd2VyIGFsdGVybmF0aXZlcy4KK2lmICgnaScgIT09ICdJJy50b0xvd2VyQ2FzZSgpKSB7Cisg
IGxvd2VyY2FzZSA9IG1hbnVhbExvd2VyY2FzZTsKKyAgdXBwZXJjYXNlID0gbWFudWFsVXBwZXJj
YXNlOworfQorCisKK3ZhcgorICAgIG1zaWUsICAgICAgICAgICAgIC8vIGhvbGRzIG1ham9yIHZl
cnNpb24gbnVtYmVyIGZvciBJRSwgb3IgTmFOIGlmIFVBIGlzIG5vdCBJRS4KKyAgICBqcUxpdGUs
ICAgICAgICAgICAvLyBkZWxheSBiaW5kaW5nIHNpbmNlIGpRdWVyeSBjb3VsZCBiZSBsb2FkZWQg
YWZ0ZXIgdXMuCisgICAgalF1ZXJ5LCAgICAgICAgICAgLy8gZGVsYXkgYmluZGluZworICAgIHNs
aWNlICAgICAgICAgICAgID0gW10uc2xpY2UsCisgICAgc3BsaWNlICAgICAgICAgICAgPSBbXS5z
cGxpY2UsCisgICAgcHVzaCAgICAgICAgICAgICAgPSBbXS5wdXNoLAorICAgIHRvU3RyaW5nICAg
ICAgICAgID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZywKKyAgICBnZXRQcm90b3R5cGVPZiAg
ICA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiwKKyAgICBuZ01pbkVyciAgICAgICAgICA9IG1pbkVy
cignbmcnKSwKKworICAgIC8qKiBAbmFtZSBhbmd1bGFyICovCisgICAgYW5ndWxhciAgICAgICAg
ICAgPSB3aW5kb3cuYW5ndWxhciB8fCAod2luZG93LmFuZ3VsYXIgPSB7fSksCisgICAgYW5ndWxh
ck1vZHVsZSwKKyAgICB1aWQgICAgICAgICAgICAgICA9IDA7CisKKy8qKgorICogZG9jdW1lbnRN
b2RlIGlzIGFuIElFLW9ubHkgcHJvcGVydHkKKyAqIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20v
ZW4tdXMvbGlicmFyeS9pZS9jYzE5Njk4OCh2PXZzLjg1KS5hc3B4CisgKi8KK21zaWUgPSBkb2N1
bWVudC5kb2N1bWVudE1vZGU7CisKKworLyoqCisgKiBAcHJpdmF0ZQorICogQHBhcmFtIHsqfSBv
YmoKKyAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiBgb2JqYCBpcyBhbiBhcnJh
eSBvciBhcnJheS1saWtlIG9iamVjdCAoTm9kZUxpc3QsIEFyZ3VtZW50cywKKyAqICAgICAgICAg
ICAgICAgICAgIFN0cmluZyAuLi4pCisgKi8KK2Z1bmN0aW9uIGlzQXJyYXlMaWtlKG9iaikgewor
ICBpZiAob2JqID09IG51bGwgfHwgaXNXaW5kb3cob2JqKSkgeworICAgIHJldHVybiBmYWxzZTsK
KyAgfQorCisgIC8vIFN1cHBvcnQ6IGlPUyA4LjIgKG5vdCByZXByb2R1Y2libGUgaW4gc2ltdWxh
dG9yKQorICAvLyAibGVuZ3RoIiBpbiBvYmogdXNlZCB0byBwcmV2ZW50IEpJVCBlcnJvciAoZ2gt
MTE1MDgpCisgIHZhciBsZW5ndGggPSAibGVuZ3RoIiBpbiBPYmplY3Qob2JqKSAmJiBvYmoubGVu
Z3RoOworCisgIGlmIChvYmoubm9kZVR5cGUgPT09IE5PREVfVFlQRV9FTEVNRU5UICYmIGxlbmd0
aCkgeworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgcmV0dXJuIGlzU3RyaW5nKG9iaikgfHwg
aXNBcnJheShvYmopIHx8IGxlbmd0aCA9PT0gMCB8fAorICAgICAgICAgdHlwZW9mIGxlbmd0aCA9
PT0gJ251bWJlcicgJiYgbGVuZ3RoID4gMCAmJiAobGVuZ3RoIC0gMSkgaW4gb2JqOworfQorCisv
KioKKyAqIEBuZ2RvYyBmdW5jdGlvbgorICogQG5hbWUgYW5ndWxhci5mb3JFYWNoCisgKiBAbW9k
dWxlIG5nCisgKiBAa2luZCBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlvbgorICogSW52b2tl
cyB0aGUgYGl0ZXJhdG9yYCBmdW5jdGlvbiBvbmNlIGZvciBlYWNoIGl0ZW0gaW4gYG9iamAgY29s
bGVjdGlvbiwgd2hpY2ggY2FuIGJlIGVpdGhlciBhbgorICogb2JqZWN0IG9yIGFuIGFycmF5LiBU
aGUgYGl0ZXJhdG9yYCBmdW5jdGlvbiBpcyBpbnZva2VkIHdpdGggYGl0ZXJhdG9yKHZhbHVlLCBr
ZXksIG9iailgLCB3aGVyZSBgdmFsdWVgCisgKiBpcyB0aGUgdmFsdWUgb2YgYW4gb2JqZWN0IHBy
b3BlcnR5IG9yIGFuIGFycmF5IGVsZW1lbnQsIGBrZXlgIGlzIHRoZSBvYmplY3QgcHJvcGVydHkg
a2V5IG9yCisgKiBhcnJheSBlbGVtZW50IGluZGV4IGFuZCBvYmogaXMgdGhlIGBvYmpgIGl0c2Vs
Zi4gU3BlY2lmeWluZyBhIGBjb250ZXh0YCBmb3IgdGhlIGZ1bmN0aW9uIGlzIG9wdGlvbmFsLgor
ICoKKyAqIEl0IGlzIHdvcnRoIG5vdGluZyB0aGF0IGAuZm9yRWFjaGAgZG9lcyBub3QgaXRlcmF0
ZSBvdmVyIGluaGVyaXRlZCBwcm9wZXJ0aWVzIGJlY2F1c2UgaXQgZmlsdGVycworICogdXNpbmcg
dGhlIGBoYXNPd25Qcm9wZXJ0eWAgbWV0aG9kLgorICoKKyAqIFVubGlrZSBFUzI2MidzCisgKiBb
QXJyYXkucHJvdG90eXBlLmZvckVhY2hdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9y
Zy9lY21hLTI2Mi81LjEvI3NlYy0xNS40LjQuMTgpLAorICogUHJvdmlkaW5nICd1bmRlZmluZWQn
IG9yICdudWxsJyB2YWx1ZXMgZm9yIGBvYmpgIHdpbGwgbm90IHRocm93IGEgVHlwZUVycm9yLCBi
dXQgcmF0aGVyIGp1c3QKKyAqIHJldHVybiB0aGUgdmFsdWUgcHJvdmlkZWQuCisgKgorICAgYGBg
anMKKyAgICAgdmFyIHZhbHVlcyA9IHtuYW1lOiAnbWlza28nLCBnZW5kZXI6ICdtYWxlJ307Cisg
ICAgIHZhciBsb2cgPSBbXTsKKyAgICAgYW5ndWxhci5mb3JFYWNoKHZhbHVlcywgZnVuY3Rpb24o
dmFsdWUsIGtleSkgeworICAgICAgIHRoaXMucHVzaChrZXkgKyAnOiAnICsgdmFsdWUpOworICAg
ICB9LCBsb2cpOworICAgICBleHBlY3QobG9nKS50b0VxdWFsKFsnbmFtZTogbWlza28nLCAnZ2Vu
ZGVyOiBtYWxlJ10pOworICAgYGBgCisgKgorICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBP
YmplY3QgdG8gaXRlcmF0ZSBvdmVyLgorICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0b3IgSXRl
cmF0b3IgZnVuY3Rpb24uCisgKiBAcGFyYW0ge09iamVjdD19IGNvbnRleHQgT2JqZWN0IHRvIGJl
Y29tZSBjb250ZXh0IChgdGhpc2ApIGZvciB0aGUgaXRlcmF0b3IgZnVuY3Rpb24uCisgKiBAcmV0
dXJucyB7T2JqZWN0fEFycmF5fSBSZWZlcmVuY2UgdG8gYG9iamAuCisgKi8KKworZnVuY3Rpb24g
Zm9yRWFjaChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7CisgIHZhciBrZXksIGxlbmd0aDsKKyAg
aWYgKG9iaikgeworICAgIGlmIChpc0Z1bmN0aW9uKG9iaikpIHsKKyAgICAgIGZvciAoa2V5IGlu
IG9iaikgeworICAgICAgICAvLyBOZWVkIHRvIGNoZWNrIGlmIGhhc093blByb3BlcnR5IGV4aXN0
cywKKyAgICAgICAgLy8gYXMgb24gSUU4IHRoZSByZXN1bHQgb2YgcXVlcnlTZWxlY3RvckFsbCBp
cyBhbiBvYmplY3Qgd2l0aG91dCBhIGhhc093blByb3BlcnR5IGZ1bmN0aW9uCisgICAgICAgIGlm
IChrZXkgIT0gJ3Byb3RvdHlwZScgJiYga2V5ICE9ICdsZW5ndGgnICYmIGtleSAhPSAnbmFtZScg
JiYgKCFvYmouaGFzT3duUHJvcGVydHkgfHwgb2JqLmhhc093blByb3BlcnR5KGtleSkpKSB7Cisg
ICAgICAgICAgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpba2V5XSwga2V5LCBvYmopOworICAg
ICAgICB9CisgICAgICB9CisgICAgfSBlbHNlIGlmIChpc0FycmF5KG9iaikgfHwgaXNBcnJheUxp
a2Uob2JqKSkgeworICAgICAgdmFyIGlzUHJpbWl0aXZlID0gdHlwZW9mIG9iaiAhPT0gJ29iamVj
dCc7CisgICAgICBmb3IgKGtleSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGtleSA8IGxlbmd0
aDsga2V5KyspIHsKKyAgICAgICAgaWYgKGlzUHJpbWl0aXZlIHx8IGtleSBpbiBvYmopIHsKKyAg
ICAgICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtrZXldLCBrZXksIG9iaik7CisgICAg
ICAgIH0KKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG9iai5mb3JFYWNoICYmIG9iai5mb3JFYWNo
ICE9PSBmb3JFYWNoKSB7CisgICAgICAgIG9iai5mb3JFYWNoKGl0ZXJhdG9yLCBjb250ZXh0LCBv
YmopOworICAgIH0gZWxzZSBpZiAoaXNCbGFua09iamVjdChvYmopKSB7CisgICAgICAvLyBjcmVh
dGVNYXAoKSBmYXN0IHBhdGggLS0tIFNhZmUgdG8gYXZvaWQgaGFzT3duUHJvcGVydHkgY2hlY2sg
YmVjYXVzZSBwcm90b3R5cGUgY2hhaW4gaXMgZW1wdHkKKyAgICAgIGZvciAoa2V5IGluIG9iaikg
eworICAgICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtrZXldLCBrZXksIG9iaik7Cisg
ICAgICB9CisgICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqLmhhc093blByb3BlcnR5ID09PSAnZnVu
Y3Rpb24nKSB7CisgICAgICAvLyBTbG93IHBhdGggZm9yIG9iamVjdHMgaW5oZXJpdGluZyBPYmpl
Y3QucHJvdG90eXBlLCBoYXNPd25Qcm9wZXJ0eSBjaGVjayBuZWVkZWQKKyAgICAgIGZvciAoa2V5
IGluIG9iaikgeworICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHsKKyAgICAg
ICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtrZXldLCBrZXksIG9iaik7CisgICAgICAg
IH0KKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgLy8gU2xvdyBwYXRoIGZvciBvYmplY3Rz
IHdoaWNoIGRvIG5vdCBoYXZlIGEgbWV0aG9kIGBoYXNPd25Qcm9wZXJ0eWAKKyAgICAgIGZvciAo
a2V5IGluIG9iaikgeworICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkp
IHsKKyAgICAgICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtrZXldLCBrZXksIG9iaik7
CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIG9iajsKK30KKworZnVu
Y3Rpb24gZm9yRWFjaFNvcnRlZChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7CisgIHZhciBrZXlz
ID0gT2JqZWN0LmtleXMob2JqKS5zb3J0KCk7CisgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5s
ZW5ndGg7IGkrKykgeworICAgIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2tleXNbaV1dLCBr
ZXlzW2ldKTsKKyAgfQorICByZXR1cm4ga2V5czsKK30KKworCisvKioKKyAqIHdoZW4gdXNpbmcg
Zm9yRWFjaCB0aGUgcGFyYW1zIGFyZSB2YWx1ZSwga2V5LCBidXQgaXQgaXMgb2Z0ZW4gdXNlZnVs
IHRvIGhhdmUga2V5LCB2YWx1ZS4KKyAqIEBwYXJhbSB7ZnVuY3Rpb24oc3RyaW5nLCAqKX0gaXRl
cmF0b3JGbgorICogQHJldHVybnMge2Z1bmN0aW9uKCosIHN0cmluZyl9CisgKi8KK2Z1bmN0aW9u
IHJldmVyc2VQYXJhbXMoaXRlcmF0b3JGbikgeworICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIGtl
eSkgeyBpdGVyYXRvckZuKGtleSwgdmFsdWUpOyB9OworfQorCisvKioKKyAqIEEgY29uc2lzdGVu
dCB3YXkgb2YgY3JlYXRpbmcgdW5pcXVlIElEcyBpbiBhbmd1bGFyLgorICoKKyAqIFVzaW5nIHNp
bXBsZSBudW1iZXJzIGFsbG93cyB1cyB0byBnZW5lcmF0ZSAyOC42IG1pbGxpb24gdW5pcXVlIGlk
cyBwZXIgc2Vjb25kIGZvciAxMCB5ZWFycyBiZWZvcmUKKyAqIHdlIGhpdCBudW1iZXIgcHJlY2lz
aW9uIGlzc3VlcyBpbiBKYXZhU2NyaXB0LgorICoKKyAqIE1hdGgucG93KDIsNTMpIC8gNjAgLyA2
MCAvIDI0IC8gMzY1IC8gMTAgPSAyOC42TQorICoKKyAqIEByZXR1cm5zIHtudW1iZXJ9IGFuIHVu
aXF1ZSBhbHBoYS1udW1lcmljIHN0cmluZworICovCitmdW5jdGlvbiBuZXh0VWlkKCkgeworICBy
ZXR1cm4gKyt1aWQ7Cit9CisKKworLyoqCisgKiBTZXQgb3IgY2xlYXIgdGhlIGhhc2hrZXkgZm9y
IGFuIG9iamVjdC4KKyAqIEBwYXJhbSBvYmogb2JqZWN0CisgKiBAcGFyYW0gaCB0aGUgaGFzaGtl
eSAoIXRydXRoeSB0byBkZWxldGUgdGhlIGhhc2hrZXkpCisgKi8KK2Z1bmN0aW9uIHNldEhhc2hL
ZXkob2JqLCBoKSB7CisgIGlmIChoKSB7CisgICAgb2JqLiQkaGFzaEtleSA9IGg7CisgIH0gZWxz
ZSB7CisgICAgZGVsZXRlIG9iai4kJGhhc2hLZXk7CisgIH0KK30KKworCitmdW5jdGlvbiBiYXNl
RXh0ZW5kKGRzdCwgb2JqcywgZGVlcCkgeworICB2YXIgaCA9IGRzdC4kJGhhc2hLZXk7CisKKyAg
Zm9yICh2YXIgaSA9IDAsIGlpID0gb2Jqcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7CisgICAgdmFy
IG9iaiA9IG9ianNbaV07CisgICAgaWYgKCFpc09iamVjdChvYmopICYmICFpc0Z1bmN0aW9uKG9i
aikpIGNvbnRpbnVlOworICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTsKKyAgICBmb3Ig
KHZhciBqID0gMCwgamogPSBrZXlzLmxlbmd0aDsgaiA8IGpqOyBqKyspIHsKKyAgICAgIHZhciBr
ZXkgPSBrZXlzW2pdOworICAgICAgdmFyIHNyYyA9IG9ialtrZXldOworCisgICAgICBpZiAoZGVl
cCAmJiBpc09iamVjdChzcmMpKSB7CisgICAgICAgIGlmIChpc0RhdGUoc3JjKSkgeworICAgICAg
ICAgIGRzdFtrZXldID0gbmV3IERhdGUoc3JjLnZhbHVlT2YoKSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgaWYgKCFpc09iamVjdChkc3Rba2V5XSkpIGRzdFtrZXldID0gaXNBcnJheShz
cmMpID8gW10gOiB7fTsKKyAgICAgICAgICBiYXNlRXh0ZW5kKGRzdFtrZXldLCBbc3JjXSwgdHJ1
ZSk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGRzdFtrZXldID0gc3JjOwor
ICAgICAgfQorICAgIH0KKyAgfQorCisgIHNldEhhc2hLZXkoZHN0LCBoKTsKKyAgcmV0dXJuIGRz
dDsKK30KKworLyoqCisgKiBAbmdkb2MgZnVuY3Rpb24KKyAqIEBuYW1lIGFuZ3VsYXIuZXh0ZW5k
CisgKiBAbW9kdWxlIG5nCisgKiBAa2luZCBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlvbgor
ICogRXh0ZW5kcyB0aGUgZGVzdGluYXRpb24gb2JqZWN0IGBkc3RgIGJ5IGNvcHlpbmcgb3duIGVu
dW1lcmFibGUgcHJvcGVydGllcyBmcm9tIHRoZSBgc3JjYCBvYmplY3QocykKKyAqIHRvIGBkc3Rg
LiBZb3UgY2FuIHNwZWNpZnkgbXVsdGlwbGUgYHNyY2Agb2JqZWN0cy4gSWYgeW91IHdhbnQgdG8g
cHJlc2VydmUgb3JpZ2luYWwgb2JqZWN0cywgeW91IGNhbiBkbyBzbworICogYnkgcGFzc2luZyBh
biBlbXB0eSBvYmplY3QgYXMgdGhlIHRhcmdldDogYHZhciBvYmplY3QgPSBhbmd1bGFyLmV4dGVu
ZCh7fSwgb2JqZWN0MSwgb2JqZWN0MilgLgorICoKKyAqICoqTm90ZToqKiBLZWVwIGluIG1pbmQg
dGhhdCBgYW5ndWxhci5leHRlbmRgIGRvZXMgbm90IHN1cHBvcnQgcmVjdXJzaXZlIG1lcmdlIChk
ZWVwIGNvcHkpLiBVc2UKKyAqIHtAbGluayBhbmd1bGFyLm1lcmdlfSBmb3IgdGhpcy4KKyAqCisg
KiBAcGFyYW0ge09iamVjdH0gZHN0IERlc3RpbmF0aW9uIG9iamVjdC4KKyAqIEBwYXJhbSB7Li4u
T2JqZWN0fSBzcmMgU291cmNlIG9iamVjdChzKS4KKyAqIEByZXR1cm5zIHtPYmplY3R9IFJlZmVy
ZW5jZSB0byBgZHN0YC4KKyAqLworZnVuY3Rpb24gZXh0ZW5kKGRzdCkgeworICByZXR1cm4gYmFz
ZUV4dGVuZChkc3QsIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSwgZmFsc2UpOworfQorCisKKy8q
KgorKiBAbmdkb2MgZnVuY3Rpb24KKyogQG5hbWUgYW5ndWxhci5tZXJnZQorKiBAbW9kdWxlIG5n
CisqIEBraW5kIGZ1bmN0aW9uCisqCisqIEBkZXNjcmlwdGlvbgorKiBEZWVwbHkgZXh0ZW5kcyB0
aGUgZGVzdGluYXRpb24gb2JqZWN0IGBkc3RgIGJ5IGNvcHlpbmcgb3duIGVudW1lcmFibGUgcHJv
cGVydGllcyBmcm9tIHRoZSBgc3JjYCBvYmplY3QocykKKyogdG8gYGRzdGAuIFlvdSBjYW4gc3Bl
Y2lmeSBtdWx0aXBsZSBgc3JjYCBvYmplY3RzLiBJZiB5b3Ugd2FudCB0byBwcmVzZXJ2ZSBvcmln
aW5hbCBvYmplY3RzLCB5b3UgY2FuIGRvIHNvCisqIGJ5IHBhc3NpbmcgYW4gZW1wdHkgb2JqZWN0
IGFzIHRoZSB0YXJnZXQ6IGB2YXIgb2JqZWN0ID0gYW5ndWxhci5tZXJnZSh7fSwgb2JqZWN0MSwg
b2JqZWN0MilgLgorKgorKiBVbmxpa2Uge0BsaW5rIGFuZ3VsYXIuZXh0ZW5kIGV4dGVuZCgpfSwg
YG1lcmdlKClgIHJlY3Vyc2l2ZWx5IGRlc2NlbmRzIGludG8gb2JqZWN0IHByb3BlcnRpZXMgb2Yg
c291cmNlCisqIG9iamVjdHMsIHBlcmZvcm1pbmcgYSBkZWVwIGNvcHkuCisqCisqIEBwYXJhbSB7
T2JqZWN0fSBkc3QgRGVzdGluYXRpb24gb2JqZWN0LgorKiBAcGFyYW0gey4uLk9iamVjdH0gc3Jj
IFNvdXJjZSBvYmplY3QocykuCisqIEByZXR1cm5zIHtPYmplY3R9IFJlZmVyZW5jZSB0byBgZHN0
YC4KKyovCitmdW5jdGlvbiBtZXJnZShkc3QpIHsKKyAgcmV0dXJuIGJhc2VFeHRlbmQoZHN0LCBz
bGljZS5jYWxsKGFyZ3VtZW50cywgMSksIHRydWUpOworfQorCisKKworZnVuY3Rpb24gdG9JbnQo
c3RyKSB7CisgIHJldHVybiBwYXJzZUludChzdHIsIDEwKTsKK30KKworCitmdW5jdGlvbiBpbmhl
cml0KHBhcmVudCwgZXh0cmEpIHsKKyAgcmV0dXJuIGV4dGVuZChPYmplY3QuY3JlYXRlKHBhcmVu
dCksIGV4dHJhKTsKK30KKworLyoqCisgKiBAbmdkb2MgZnVuY3Rpb24KKyAqIEBuYW1lIGFuZ3Vs
YXIubm9vcAorICogQG1vZHVsZSBuZworICogQGtpbmQgZnVuY3Rpb24KKyAqCisgKiBAZGVzY3Jp
cHRpb24KKyAqIEEgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBubyBvcGVyYXRpb25zLiBUaGlzIGZ1
bmN0aW9uIGNhbiBiZSB1c2VmdWwgd2hlbiB3cml0aW5nIGNvZGUgaW4gdGhlCisgKiBmdW5jdGlv
bmFsIHN0eWxlLgorICAgYGBganMKKyAgICAgZnVuY3Rpb24gZm9vKGNhbGxiYWNrKSB7CisgICAg
ICAgdmFyIHJlc3VsdCA9IGNhbGN1bGF0ZVJlc3VsdCgpOworICAgICAgIChjYWxsYmFjayB8fCBh
bmd1bGFyLm5vb3ApKHJlc3VsdCk7CisgICAgIH0KKyAgIGBgYAorICovCitmdW5jdGlvbiBub29w
KCkge30KK25vb3AuJGluamVjdCA9IFtdOworCisKKy8qKgorICogQG5nZG9jIGZ1bmN0aW9uCisg
KiBAbmFtZSBhbmd1bGFyLmlkZW50aXR5CisgKiBAbW9kdWxlIG5nCisgKiBAa2luZCBmdW5jdGlv
bgorICoKKyAqIEBkZXNjcmlwdGlvbgorICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgaXRzIGZp
cnN0IGFyZ3VtZW50LiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCB3aGVuIHdyaXRpbmcgY29kZSBp
biB0aGUKKyAqIGZ1bmN0aW9uYWwgc3R5bGUuCisgKgorICAgYGBganMKKyAgICAgZnVuY3Rpb24g
dHJhbnNmb3JtZXIodHJhbnNmb3JtYXRpb25GbiwgdmFsdWUpIHsKKyAgICAgICByZXR1cm4gKHRy
YW5zZm9ybWF0aW9uRm4gfHwgYW5ndWxhci5pZGVudGl0eSkodmFsdWUpOworICAgICB9OworICAg
YGBgCisgICogQHBhcmFtIHsqfSB2YWx1ZSB0byBiZSByZXR1cm5lZC4KKyAgKiBAcmV0dXJucyB7
Kn0gdGhlIHZhbHVlIHBhc3NlZCBpbi4KKyAqLworZnVuY3Rpb24gaWRlbnRpdHkoJCkge3JldHVy
biAkO30KK2lkZW50aXR5LiRpbmplY3QgPSBbXTsKKworCitmdW5jdGlvbiB2YWx1ZUZuKHZhbHVl
KSB7cmV0dXJuIGZ1bmN0aW9uKCkge3JldHVybiB2YWx1ZTt9O30KKworZnVuY3Rpb24gaGFzQ3Vz
dG9tVG9TdHJpbmcob2JqKSB7CisgIHJldHVybiBpc0Z1bmN0aW9uKG9iai50b1N0cmluZykgJiYg
b2JqLnRvU3RyaW5nICE9PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nOworfQorCisKKy8qKgor
ICogQG5nZG9jIGZ1bmN0aW9uCisgKiBAbmFtZSBhbmd1bGFyLmlzVW5kZWZpbmVkCisgKiBAbW9k
dWxlIG5nCisgKiBAa2luZCBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlvbgorICogRGV0ZXJt
aW5lcyBpZiBhIHJlZmVyZW5jZSBpcyB1bmRlZmluZWQuCisgKgorICogQHBhcmFtIHsqfSB2YWx1
ZSBSZWZlcmVuY2UgdG8gY2hlY2suCisgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBgdmFs
dWVgIGlzIHVuZGVmaW5lZC4KKyAqLworZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsdWUpIHtyZXR1
cm4gdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJzt9CisKKworLyoqCisgKiBAbmdkb2MgZnVu
Y3Rpb24KKyAqIEBuYW1lIGFuZ3VsYXIuaXNEZWZpbmVkCisgKiBAbW9kdWxlIG5nCisgKiBAa2lu
ZCBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlvbgorICogRGV0ZXJtaW5lcyBpZiBhIHJlZmVy
ZW5jZSBpcyBkZWZpbmVkLgorICoKKyAqIEBwYXJhbSB7Kn0gdmFsdWUgUmVmZXJlbmNlIHRvIGNo
ZWNrLgorICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYHZhbHVlYCBpcyBkZWZpbmVkLgor
ICovCitmdW5jdGlvbiBpc0RlZmluZWQodmFsdWUpIHtyZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAn
dW5kZWZpbmVkJzt9CisKKworLyoqCisgKiBAbmdkb2MgZnVuY3Rpb24KKyAqIEBuYW1lIGFuZ3Vs
YXIuaXNPYmplY3QKKyAqIEBtb2R1bGUgbmcKKyAqIEBraW5kIGZ1bmN0aW9uCisgKgorICogQGRl
c2NyaXB0aW9uCisgKiBEZXRlcm1pbmVzIGlmIGEgcmVmZXJlbmNlIGlzIGFuIGBPYmplY3RgLiBV
bmxpa2UgYHR5cGVvZmAgaW4gSmF2YVNjcmlwdCwgYG51bGxgcyBhcmUgbm90CisgKiBjb25zaWRl
cmVkIHRvIGJlIG9iamVjdHMuIE5vdGUgdGhhdCBKYXZhU2NyaXB0IGFycmF5cyBhcmUgb2JqZWN0
cy4KKyAqCisgKiBAcGFyYW0geyp9IHZhbHVlIFJlZmVyZW5jZSB0byBjaGVjay4KKyAqIEByZXR1
cm5zIHtib29sZWFufSBUcnVlIGlmIGB2YWx1ZWAgaXMgYW4gYE9iamVjdGAgYnV0IG5vdCBgbnVs
bGAuCisgKi8KK2Z1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7CisgIC8vIGh0dHA6Ly9qc3BlcmYu
Y29tL2lzb2JqZWN0NAorICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09
PSAnb2JqZWN0JzsKK30KKworCisvKioKKyAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIG9i
amVjdCB3aXRoIGEgbnVsbCBwcm90b3R5cGUKKyAqCisgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1
ZSBpZiBgdmFsdWVgIGlzIGFuIGBPYmplY3RgIHdpdGggYSBudWxsIHByb3RvdHlwZQorICovCitm
dW5jdGlvbiBpc0JsYW5rT2JqZWN0KHZhbHVlKSB7CisgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAm
JiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFnZXRQcm90b3R5cGVPZih2YWx1ZSk7Cit9
CisKKworLyoqCisgKiBAbmdkb2MgZnVuY3Rpb24KKyAqIEBuYW1lIGFuZ3VsYXIuaXNTdHJpbmcK
KyAqIEBtb2R1bGUgbmcKKyAqIEBraW5kIGZ1bmN0aW9uCisgKgorICogQGRlc2NyaXB0aW9uCisg
KiBEZXRlcm1pbmVzIGlmIGEgcmVmZXJlbmNlIGlzIGEgYFN0cmluZ2AuCisgKgorICogQHBhcmFt
IHsqfSB2YWx1ZSBSZWZlcmVuY2UgdG8gY2hlY2suCisgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1
ZSBpZiBgdmFsdWVgIGlzIGEgYFN0cmluZ2AuCisgKi8KK2Z1bmN0aW9uIGlzU3RyaW5nKHZhbHVl
KSB7cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7fQorCisKKy8qKgorICogQG5nZG9j
IGZ1bmN0aW9uCisgKiBAbmFtZSBhbmd1bGFyLmlzTnVtYmVyCisgKiBAbW9kdWxlIG5nCisgKiBA
a2luZCBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlvbgorICogRGV0ZXJtaW5lcyBpZiBhIHJl
ZmVyZW5jZSBpcyBhIGBOdW1iZXJgLgorICoKKyAqIFRoaXMgaW5jbHVkZXMgdGhlICJzcGVjaWFs
IiBudW1iZXJzIGBOYU5gLCBgK0luZmluaXR5YCBhbmQgYC1JbmZpbml0eWAuCisgKgorICogSWYg
eW91IHdpc2ggdG8gZXhjbHVkZSB0aGVzZSB0aGVuIHlvdSBjYW4gdXNlIHRoZSBuYXRpdmUKKyAq
IFtgaXNGaW5pdGUnXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dl
Yi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9pc0Zpbml0ZSkKKyAqIG1ldGhv
ZC4KKyAqCisgKiBAcGFyYW0geyp9IHZhbHVlIFJlZmVyZW5jZSB0byBjaGVjay4KKyAqIEByZXR1
cm5zIHtib29sZWFufSBUcnVlIGlmIGB2YWx1ZWAgaXMgYSBgTnVtYmVyYC4KKyAqLworZnVuY3Rp
b24gaXNOdW1iZXIodmFsdWUpIHtyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJzt9CisK
KworLyoqCisgKiBAbmdkb2MgZnVuY3Rpb24KKyAqIEBuYW1lIGFuZ3VsYXIuaXNEYXRlCisgKiBA
bW9kdWxlIG5nCisgKiBAa2luZCBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlvbgorICogRGV0
ZXJtaW5lcyBpZiBhIHZhbHVlIGlzIGEgZGF0ZS4KKyAqCisgKiBAcGFyYW0geyp9IHZhbHVlIFJl
ZmVyZW5jZSB0byBjaGVjay4KKyAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGB2YWx1ZWAg
aXMgYSBgRGF0ZWAuCisgKi8KK2Z1bmN0aW9uIGlzRGF0ZSh2YWx1ZSkgeworICByZXR1cm4gdG9T
dHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJzsKK30KKworCisvKioKKyAqIEBu
Z2RvYyBmdW5jdGlvbgorICogQG5hbWUgYW5ndWxhci5pc0FycmF5CisgKiBAbW9kdWxlIG5nCisg
KiBAa2luZCBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlvbgorICogRGV0ZXJtaW5lcyBpZiBh
IHJlZmVyZW5jZSBpcyBhbiBgQXJyYXlgLgorICoKKyAqIEBwYXJhbSB7Kn0gdmFsdWUgUmVmZXJl
bmNlIHRvIGNoZWNrLgorICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYHZhbHVlYCBpcyBh
biBgQXJyYXlgLgorICovCit2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7CisKKy8qKgorICog
QG5nZG9jIGZ1bmN0aW9uCisgKiBAbmFtZSBhbmd1bGFyLmlzRnVuY3Rpb24KKyAqIEBtb2R1bGUg
bmcKKyAqIEBraW5kIGZ1bmN0aW9uCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBEZXRlcm1pbmVz
IGlmIGEgcmVmZXJlbmNlIGlzIGEgYEZ1bmN0aW9uYC4KKyAqCisgKiBAcGFyYW0geyp9IHZhbHVl
IFJlZmVyZW5jZSB0byBjaGVjay4KKyAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGB2YWx1
ZWAgaXMgYSBgRnVuY3Rpb25gLgorICovCitmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7cmV0
dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJzt9CisKKworLyoqCisgKiBEZXRlcm1pbmVz
IGlmIGEgdmFsdWUgaXMgYSByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0LgorICoKKyAqIEBwcml2
YXRlCisgKiBAcGFyYW0geyp9IHZhbHVlIFJlZmVyZW5jZSB0byBjaGVjay4KKyAqIEByZXR1cm5z
IHtib29sZWFufSBUcnVlIGlmIGB2YWx1ZWAgaXMgYSBgUmVnRXhwYC4KKyAqLworZnVuY3Rpb24g
aXNSZWdFeHAodmFsdWUpIHsKKyAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29i
amVjdCBSZWdFeHBdJzsKK30KKworCisvKioKKyAqIENoZWNrcyBpZiBgb2JqYCBpcyBhIHdpbmRv
dyBvYmplY3QuCisgKgorICogQHByaXZhdGUKKyAqIEBwYXJhbSB7Kn0gb2JqIE9iamVjdCB0byBj
aGVjaworICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYG9iamAgaXMgYSB3aW5kb3cgb2Jq
LgorICovCitmdW5jdGlvbiBpc1dpbmRvdyhvYmopIHsKKyAgcmV0dXJuIG9iaiAmJiBvYmoud2lu
ZG93ID09PSBvYmo7Cit9CisKKworZnVuY3Rpb24gaXNTY29wZShvYmopIHsKKyAgcmV0dXJuIG9i
aiAmJiBvYmouJGV2YWxBc3luYyAmJiBvYmouJHdhdGNoOworfQorCisKK2Z1bmN0aW9uIGlzRmls
ZShvYmopIHsKKyAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgRmlsZV0n
OworfQorCisKK2Z1bmN0aW9uIGlzRm9ybURhdGEob2JqKSB7CisgIHJldHVybiB0b1N0cmluZy5j
YWxsKG9iaikgPT09ICdbb2JqZWN0IEZvcm1EYXRhXSc7Cit9CisKKworZnVuY3Rpb24gaXNCbG9i
KG9iaikgeworICByZXR1cm4gdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBCbG9iXSc7
Cit9CisKKworZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlKSB7CisgIHJldHVybiB0eXBlb2YgdmFs
dWUgPT09ICdib29sZWFuJzsKK30KKworCitmdW5jdGlvbiBpc1Byb21pc2VMaWtlKG9iaikgewor
ICByZXR1cm4gb2JqICYmIGlzRnVuY3Rpb24ob2JqLnRoZW4pOworfQorCisKK3ZhciBUWVBFRF9B
UlJBWV9SRUdFWFAgPSAvXlxbb2JqZWN0IChVaW50OChDbGFtcGVkKT8pfChVaW50MTYpfChVaW50
MzIpfChJbnQ4KXwoSW50MTYpfChJbnQzMil8KEZsb2F0KDMyKXwoNjQpKUFycmF5XF0kLzsKK2Z1
bmN0aW9uIGlzVHlwZWRBcnJheSh2YWx1ZSkgeworICByZXR1cm4gVFlQRURfQVJSQVlfUkVHRVhQ
LnRlc3QodG9TdHJpbmcuY2FsbCh2YWx1ZSkpOworfQorCisKK3ZhciB0cmltID0gZnVuY3Rpb24o
dmFsdWUpIHsKKyAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlKSA/IHZhbHVlLnRyaW0oKSA6IHZhbHVl
OworfTsKKworLy8gQ29waWVkIGZyb206CisvLyBodHRwOi8vZG9jcy5jbG9zdXJlLWxpYnJhcnku
Z29vZ2xlY29kZS5jb20vZ2l0L2xvY2FsX2Nsb3N1cmVfZ29vZ19zdHJpbmdfc3RyaW5nLmpzLnNv
dXJjZS5odG1sI2xpbmUxMDIxCisvLyBQcmVyZXE6IHMgaXMgYSBzdHJpbmcuCit2YXIgZXNjYXBl
Rm9yUmVnZXhwID0gZnVuY3Rpb24ocykgeworICByZXR1cm4gcy5yZXBsYWNlKC8oWy0oKVxbXF17
fSs/Ki4kXF58LDojPCFcXF0pL2csICdcXCQxJykuCisgICAgICAgICAgIHJlcGxhY2UoL1x4MDgv
ZywgJ1xceDA4Jyk7Cit9OworCisKKy8qKgorICogQG5nZG9jIGZ1bmN0aW9uCisgKiBAbmFtZSBh
bmd1bGFyLmlzRWxlbWVudAorICogQG1vZHVsZSBuZworICogQGtpbmQgZnVuY3Rpb24KKyAqCisg
KiBAZGVzY3JpcHRpb24KKyAqIERldGVybWluZXMgaWYgYSByZWZlcmVuY2UgaXMgYSBET00gZWxl
bWVudCAob3Igd3JhcHBlZCBqUXVlcnkgZWxlbWVudCkuCisgKgorICogQHBhcmFtIHsqfSB2YWx1
ZSBSZWZlcmVuY2UgdG8gY2hlY2suCisgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBgdmFs
dWVgIGlzIGEgRE9NIGVsZW1lbnQgKG9yIHdyYXBwZWQgalF1ZXJ5IGVsZW1lbnQpLgorICovCitm
dW5jdGlvbiBpc0VsZW1lbnQobm9kZSkgeworICByZXR1cm4gISEobm9kZSAmJgorICAgIChub2Rl
Lm5vZGVOYW1lICAvLyB3ZSBhcmUgYSBkaXJlY3QgZWxlbWVudAorICAgIHx8IChub2RlLnByb3Ag
JiYgbm9kZS5hdHRyICYmIG5vZGUuZmluZCkpKTsgIC8vIHdlIGhhdmUgYW4gb24gYW5kIGZpbmQg
bWV0aG9kIHBhcnQgb2YgalF1ZXJ5IEFQSQorfQorCisvKioKKyAqIEBwYXJhbSBzdHIgJ2tleTEs
a2V5MiwuLi4nCisgKiBAcmV0dXJucyB7b2JqZWN0fSBpbiB0aGUgZm9ybSBvZiB7a2V5MTp0cnVl
LCBrZXkyOnRydWUsIC4uLn0KKyAqLworZnVuY3Rpb24gbWFrZU1hcChzdHIpIHsKKyAgdmFyIG9i
aiA9IHt9LCBpdGVtcyA9IHN0ci5zcGxpdCgiLCIpLCBpOworICBmb3IgKGkgPSAwOyBpIDwgaXRl
bXMubGVuZ3RoOyBpKyspIHsKKyAgICBvYmpbaXRlbXNbaV1dID0gdHJ1ZTsKKyAgfQorICByZXR1
cm4gb2JqOworfQorCisKK2Z1bmN0aW9uIG5vZGVOYW1lXyhlbGVtZW50KSB7CisgIHJldHVybiBs
b3dlcmNhc2UoZWxlbWVudC5ub2RlTmFtZSB8fCAoZWxlbWVudFswXSAmJiBlbGVtZW50WzBdLm5v
ZGVOYW1lKSk7Cit9CisKK2Z1bmN0aW9uIGluY2x1ZGVzKGFycmF5LCBvYmopIHsKKyAgcmV0dXJu
IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYXJyYXksIG9iaikgIT0gLTE7Cit9CisKK2Z1
bmN0aW9uIGFycmF5UmVtb3ZlKGFycmF5LCB2YWx1ZSkgeworICB2YXIgaW5kZXggPSBhcnJheS5p
bmRleE9mKHZhbHVlKTsKKyAgaWYgKGluZGV4ID49IDApIHsKKyAgICBhcnJheS5zcGxpY2UoaW5k
ZXgsIDEpOworICB9CisgIHJldHVybiBpbmRleDsKK30KKworLyoqCisgKiBAbmdkb2MgZnVuY3Rp
b24KKyAqIEBuYW1lIGFuZ3VsYXIuY29weQorICogQG1vZHVsZSBuZworICogQGtpbmQgZnVuY3Rp
b24KKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIENyZWF0ZXMgYSBkZWVwIGNvcHkgb2YgYHNvdXJj
ZWAsIHdoaWNoIHNob3VsZCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXkuCisgKgorICogKiBJZiBu
byBkZXN0aW5hdGlvbiBpcyBzdXBwbGllZCwgYSBjb3B5IG9mIHRoZSBvYmplY3Qgb3IgYXJyYXkg
aXMgY3JlYXRlZC4KKyAqICogSWYgYSBkZXN0aW5hdGlvbiBpcyBwcm92aWRlZCwgYWxsIG9mIGl0
cyBlbGVtZW50cyAoZm9yIGFycmF5cykgb3IgcHJvcGVydGllcyAoZm9yIG9iamVjdHMpCisgKiAg
IGFyZSBkZWxldGVkIGFuZCB0aGVuIGFsbCBlbGVtZW50cy9wcm9wZXJ0aWVzIGZyb20gdGhlIHNv
dXJjZSBhcmUgY29waWVkIHRvIGl0LgorICogKiBJZiBgc291cmNlYCBpcyBub3QgYW4gb2JqZWN0
IG9yIGFycmF5IChpbmMuIGBudWxsYCBhbmQgYHVuZGVmaW5lZGApLCBgc291cmNlYCBpcyByZXR1
cm5lZC4KKyAqICogSWYgYHNvdXJjZWAgaXMgaWRlbnRpY2FsIHRvICdkZXN0aW5hdGlvbicgYW4g
ZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLgorICoKKyAqIEBwYXJhbSB7Kn0gc291cmNlIFRoZSBz
b3VyY2UgdGhhdCB3aWxsIGJlIHVzZWQgdG8gbWFrZSBhIGNvcHkuCisgKiAgICAgICAgICAgICAg
ICAgICBDYW4gYmUgYW55IHR5cGUsIGluY2x1ZGluZyBwcmltaXRpdmVzLCBgbnVsbGAsIGFuZCBg
dW5kZWZpbmVkYC4KKyAqIEBwYXJhbSB7KE9iamVjdHxBcnJheSk9fSBkZXN0aW5hdGlvbiBEZXN0
aW5hdGlvbiBpbnRvIHdoaWNoIHRoZSBzb3VyY2UgaXMgY29waWVkLiBJZgorICogICAgIHByb3Zp
ZGVkLCBtdXN0IGJlIG9mIHRoZSBzYW1lIHR5cGUgYXMgYHNvdXJjZWAuCisgKiBAcmV0dXJucyB7
Kn0gVGhlIGNvcHkgb3IgdXBkYXRlZCBgZGVzdGluYXRpb25gLCBpZiBgZGVzdGluYXRpb25gIHdh
cyBzcGVjaWZpZWQuCisgKgorICogQGV4YW1wbGUKKyA8ZXhhbXBsZSBtb2R1bGU9ImNvcHlFeGFt
cGxlIj4KKyA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyA8ZGl2IG5nLWNvbnRyb2xsZXI9IkV4
YW1wbGVDb250cm9sbGVyIj4KKyA8Zm9ybSBub3ZhbGlkYXRlIGNsYXNzPSJzaW1wbGUtZm9ybSI+
CisgTmFtZTogPGlucHV0IHR5cGU9InRleHQiIG5nLW1vZGVsPSJ1c2VyLm5hbWUiIC8+PGJyIC8+
CisgRS1tYWlsOiA8aW5wdXQgdHlwZT0iZW1haWwiIG5nLW1vZGVsPSJ1c2VyLmVtYWlsIiAvPjxi
ciAvPgorIEdlbmRlcjogPGlucHV0IHR5cGU9InJhZGlvIiBuZy1tb2RlbD0idXNlci5nZW5kZXIi
IHZhbHVlPSJtYWxlIiAvPm1hbGUKKyA8aW5wdXQgdHlwZT0icmFkaW8iIG5nLW1vZGVsPSJ1c2Vy
LmdlbmRlciIgdmFsdWU9ImZlbWFsZSIgLz5mZW1hbGU8YnIgLz4KKyA8YnV0dG9uIG5nLWNsaWNr
PSJyZXNldCgpIj5SRVNFVDwvYnV0dG9uPgorIDxidXR0b24gbmctY2xpY2s9InVwZGF0ZSh1c2Vy
KSI+U0FWRTwvYnV0dG9uPgorIDwvZm9ybT4KKyA8cHJlPmZvcm0gPSB7e3VzZXIgfCBqc29ufX08
L3ByZT4KKyA8cHJlPm1hc3RlciA9IHt7bWFzdGVyIHwganNvbn19PC9wcmU+CisgPC9kaXY+CisK
KyA8c2NyaXB0PgorICBhbmd1bGFyLm1vZHVsZSgnY29weUV4YW1wbGUnLCBbXSkKKyAgICAuY29u
dHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkg
eworICAgICAgJHNjb3BlLm1hc3Rlcj0ge307CisKKyAgICAgICRzY29wZS51cGRhdGUgPSBmdW5j
dGlvbih1c2VyKSB7CisgICAgICAgIC8vIEV4YW1wbGUgd2l0aCAxIGFyZ3VtZW50CisgICAgICAg
ICRzY29wZS5tYXN0ZXI9IGFuZ3VsYXIuY29weSh1c2VyKTsKKyAgICAgIH07CisKKyAgICAgICRz
Y29wZS5yZXNldCA9IGZ1bmN0aW9uKCkgeworICAgICAgICAvLyBFeGFtcGxlIHdpdGggMiBhcmd1
bWVudHMKKyAgICAgICAgYW5ndWxhci5jb3B5KCRzY29wZS5tYXN0ZXIsICRzY29wZS51c2VyKTsK
KyAgICAgIH07CisKKyAgICAgICRzY29wZS5yZXNldCgpOworICAgIH1dKTsKKyA8L3NjcmlwdD4K
KyA8L2ZpbGU+CisgPC9leGFtcGxlPgorICovCitmdW5jdGlvbiBjb3B5KHNvdXJjZSwgZGVzdGlu
YXRpb24sIHN0YWNrU291cmNlLCBzdGFja0Rlc3QpIHsKKyAgaWYgKGlzV2luZG93KHNvdXJjZSkg
fHwgaXNTY29wZShzb3VyY2UpKSB7CisgICAgdGhyb3cgbmdNaW5FcnIoJ2Nwd3MnLAorICAgICAg
IkNhbid0IGNvcHkhIE1ha2luZyBjb3BpZXMgb2YgV2luZG93IG9yIFNjb3BlIGluc3RhbmNlcyBp
cyBub3Qgc3VwcG9ydGVkLiIpOworICB9CisgIGlmIChpc1R5cGVkQXJyYXkoZGVzdGluYXRpb24p
KSB7CisgICAgdGhyb3cgbmdNaW5FcnIoJ2NwdGEnLAorICAgICAgIkNhbid0IGNvcHkhIFR5cGVk
QXJyYXkgZGVzdGluYXRpb24gY2Fubm90IGJlIG11dGF0ZWQuIik7CisgIH0KKworICBpZiAoIWRl
c3RpbmF0aW9uKSB7CisgICAgZGVzdGluYXRpb24gPSBzb3VyY2U7CisgICAgaWYgKGlzT2JqZWN0
KHNvdXJjZSkpIHsKKyAgICAgIHZhciBpbmRleDsKKyAgICAgIGlmIChzdGFja1NvdXJjZSAmJiAo
aW5kZXggPSBzdGFja1NvdXJjZS5pbmRleE9mKHNvdXJjZSkpICE9PSAtMSkgeworICAgICAgICBy
ZXR1cm4gc3RhY2tEZXN0W2luZGV4XTsKKyAgICAgIH0KKworICAgICAgLy8gVHlwZWRBcnJheSwg
RGF0ZSBhbmQgUmVnRXhwIGhhdmUgc3BlY2lmaWMgY29weSBmdW5jdGlvbmFsaXR5IGFuZCBtdXN0
IGJlCisgICAgICAvLyBwdXNoZWQgb250byB0aGUgc3RhY2sgYmVmb3JlIHJldHVybmluZy4KKyAg
ICAgIC8vIEFycmF5IGFuZCBvdGhlciBvYmplY3RzIGNyZWF0ZSB0aGUgYmFzZSBvYmplY3QgYW5k
IHJlY3Vyc2UgdG8gY29weSBjaGlsZAorICAgICAgLy8gb2JqZWN0cy4gVGhlIGFycmF5L29iamVj
dCB3aWxsIGJlIHB1c2hlZCBvbnRvIHRoZSBzdGFjayB3aGVuIHJlY3Vyc2VkLgorICAgICAgaWYg
KGlzQXJyYXkoc291cmNlKSkgeworICAgICAgICByZXR1cm4gY29weShzb3VyY2UsIFtdLCBzdGFj
a1NvdXJjZSwgc3RhY2tEZXN0KTsKKyAgICAgIH0gZWxzZSBpZiAoaXNUeXBlZEFycmF5KHNvdXJj
ZSkpIHsKKyAgICAgICAgZGVzdGluYXRpb24gPSBuZXcgc291cmNlLmNvbnN0cnVjdG9yKHNvdXJj
ZSk7CisgICAgICB9IGVsc2UgaWYgKGlzRGF0ZShzb3VyY2UpKSB7CisgICAgICAgIGRlc3RpbmF0
aW9uID0gbmV3IERhdGUoc291cmNlLmdldFRpbWUoKSk7CisgICAgICB9IGVsc2UgaWYgKGlzUmVn
RXhwKHNvdXJjZSkpIHsKKyAgICAgICAgZGVzdGluYXRpb24gPSBuZXcgUmVnRXhwKHNvdXJjZS5z
b3VyY2UsIHNvdXJjZS50b1N0cmluZygpLm1hdGNoKC9bXlwvXSokLylbMF0pOworICAgICAgICBk
ZXN0aW5hdGlvbi5sYXN0SW5kZXggPSBzb3VyY2UubGFzdEluZGV4OworICAgICAgfSBlbHNlIHsK
KyAgICAgICAgdmFyIGVtcHR5T2JqZWN0ID0gT2JqZWN0LmNyZWF0ZShnZXRQcm90b3R5cGVPZihz
b3VyY2UpKTsKKyAgICAgICAgcmV0dXJuIGNvcHkoc291cmNlLCBlbXB0eU9iamVjdCwgc3RhY2tT
b3VyY2UsIHN0YWNrRGVzdCk7CisgICAgICB9CisKKyAgICAgIGlmIChzdGFja0Rlc3QpIHsKKyAg
ICAgICAgc3RhY2tTb3VyY2UucHVzaChzb3VyY2UpOworICAgICAgICBzdGFja0Rlc3QucHVzaChk
ZXN0aW5hdGlvbik7CisgICAgICB9CisgICAgfQorICB9IGVsc2UgeworICAgIGlmIChzb3VyY2Ug
PT09IGRlc3RpbmF0aW9uKSB0aHJvdyBuZ01pbkVycignY3BpJywKKyAgICAgICJDYW4ndCBjb3B5
ISBTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSBpZGVudGljYWwuIik7CisKKyAgICBzdGFja1Nv
dXJjZSA9IHN0YWNrU291cmNlIHx8IFtdOworICAgIHN0YWNrRGVzdCA9IHN0YWNrRGVzdCB8fCBb
XTsKKworICAgIGlmIChpc09iamVjdChzb3VyY2UpKSB7CisgICAgICBzdGFja1NvdXJjZS5wdXNo
KHNvdXJjZSk7CisgICAgICBzdGFja0Rlc3QucHVzaChkZXN0aW5hdGlvbik7CisgICAgfQorCisg
ICAgdmFyIHJlc3VsdCwga2V5OworICAgIGlmIChpc0FycmF5KHNvdXJjZSkpIHsKKyAgICAgIGRl
c3RpbmF0aW9uLmxlbmd0aCA9IDA7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvdXJjZS5s
ZW5ndGg7IGkrKykgeworICAgICAgICBkZXN0aW5hdGlvbi5wdXNoKGNvcHkoc291cmNlW2ldLCBu
dWxsLCBzdGFja1NvdXJjZSwgc3RhY2tEZXN0KSk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgIHZhciBoID0gZGVzdGluYXRpb24uJCRoYXNoS2V5OworICAgICAgaWYgKGlzQXJyYXkoZGVz
dGluYXRpb24pKSB7CisgICAgICAgIGRlc3RpbmF0aW9uLmxlbmd0aCA9IDA7CisgICAgICB9IGVs
c2UgeworICAgICAgICBmb3JFYWNoKGRlc3RpbmF0aW9uLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7
CisgICAgICAgICAgZGVsZXRlIGRlc3RpbmF0aW9uW2tleV07CisgICAgICAgIH0pOworICAgICAg
fQorICAgICAgaWYgKGlzQmxhbmtPYmplY3Qoc291cmNlKSkgeworICAgICAgICAvLyBjcmVhdGVN
YXAoKSBmYXN0IHBhdGggLS0tIFNhZmUgdG8gYXZvaWQgaGFzT3duUHJvcGVydHkgY2hlY2sgYmVj
YXVzZSBwcm90b3R5cGUgY2hhaW4gaXMgZW1wdHkKKyAgICAgICAgZm9yIChrZXkgaW4gc291cmNl
KSB7CisgICAgICAgICAgZGVzdGluYXRpb25ba2V5XSA9IGNvcHkoc291cmNlW2tleV0sIG51bGws
IHN0YWNrU291cmNlLCBzdGFja0Rlc3QpOworICAgICAgICB9CisgICAgICB9IGVsc2UgaWYgKHNv
dXJjZSAmJiB0eXBlb2Ygc291cmNlLmhhc093blByb3BlcnR5ID09PSAnZnVuY3Rpb24nKSB7Cisg
ICAgICAgIC8vIFNsb3cgcGF0aCwgd2hpY2ggbXVzdCByZWx5IG9uIGhhc093blByb3BlcnR5Cisg
ICAgICAgIGZvciAoa2V5IGluIHNvdXJjZSkgeworICAgICAgICAgIGlmIChzb3VyY2UuaGFzT3du
UHJvcGVydHkoa2V5KSkgeworICAgICAgICAgICAgZGVzdGluYXRpb25ba2V5XSA9IGNvcHkoc291
cmNlW2tleV0sIG51bGwsIHN0YWNrU291cmNlLCBzdGFja0Rlc3QpOworICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gU2xvd2VzdCBwYXRoIC0tLSBoYXNP
d25Qcm9wZXJ0eSBjYW4ndCBiZSBjYWxsZWQgYXMgYSBtZXRob2QKKyAgICAgICAgZm9yIChrZXkg
aW4gc291cmNlKSB7CisgICAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBr
ZXkpKSB7CisgICAgICAgICAgICBkZXN0aW5hdGlvbltrZXldID0gY29weShzb3VyY2Vba2V5XSwg
bnVsbCwgc3RhY2tTb3VyY2UsIHN0YWNrRGVzdCk7CisgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICB9CisgICAgICBzZXRIYXNoS2V5KGRlc3RpbmF0aW9uLGgpOworICAgIH0KKyAgfQorICBy
ZXR1cm4gZGVzdGluYXRpb247Cit9CisKKy8qKgorICogQ3JlYXRlcyBhIHNoYWxsb3cgY29weSBv
ZiBhbiBvYmplY3QsIGFuIGFycmF5IG9yIGEgcHJpbWl0aXZlLgorICoKKyAqIEFzc3VtZXMgdGhh
dCB0aGVyZSBhcmUgbm8gcHJvdG8gcHJvcGVydGllcyBmb3Igb2JqZWN0cy4KKyAqLworZnVuY3Rp
b24gc2hhbGxvd0NvcHkoc3JjLCBkc3QpIHsKKyAgaWYgKGlzQXJyYXkoc3JjKSkgeworICAgIGRz
dCA9IGRzdCB8fCBbXTsKKworICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHNyYy5sZW5ndGg7IGkg
PCBpaTsgaSsrKSB7CisgICAgICBkc3RbaV0gPSBzcmNbaV07CisgICAgfQorICB9IGVsc2UgaWYg
KGlzT2JqZWN0KHNyYykpIHsKKyAgICBkc3QgPSBkc3QgfHwge307CisKKyAgICBmb3IgKHZhciBr
ZXkgaW4gc3JjKSB7CisgICAgICBpZiAoIShrZXkuY2hhckF0KDApID09PSAnJCcgJiYga2V5LmNo
YXJBdCgxKSA9PT0gJyQnKSkgeworICAgICAgICBkc3Rba2V5XSA9IHNyY1trZXldOworICAgICAg
fQorICAgIH0KKyAgfQorCisgIHJldHVybiBkc3QgfHwgc3JjOworfQorCisKKy8qKgorICogQG5n
ZG9jIGZ1bmN0aW9uCisgKiBAbmFtZSBhbmd1bGFyLmVxdWFscworICogQG1vZHVsZSBuZworICog
QGtpbmQgZnVuY3Rpb24KKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIERldGVybWluZXMgaWYgdHdv
IG9iamVjdHMgb3IgdHdvIHZhbHVlcyBhcmUgZXF1aXZhbGVudC4gU3VwcG9ydHMgdmFsdWUgdHlw
ZXMsIHJlZ3VsYXIKKyAqIGV4cHJlc3Npb25zLCBhcnJheXMgYW5kIG9iamVjdHMuCisgKgorICog
VHdvIG9iamVjdHMgb3IgdmFsdWVzIGFyZSBjb25zaWRlcmVkIGVxdWl2YWxlbnQgaWYgYXQgbGVh
c3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKKyAqCisgKiAqIEJvdGggb2JqZWN0cyBv
ciB2YWx1ZXMgcGFzcyBgPT09YCBjb21wYXJpc29uLgorICogKiBCb3RoIG9iamVjdHMgb3IgdmFs
dWVzIGFyZSBvZiB0aGUgc2FtZSB0eXBlIGFuZCBhbGwgb2YgdGhlaXIgcHJvcGVydGllcyBhcmUg
ZXF1YWwgYnkKKyAqICAgY29tcGFyaW5nIHRoZW0gd2l0aCBgYW5ndWxhci5lcXVhbHNgLgorICog
KiBCb3RoIHZhbHVlcyBhcmUgTmFOLiAoSW4gSmF2YVNjcmlwdCwgTmFOID09IE5hTiA9PiBmYWxz
ZS4gQnV0IHdlIGNvbnNpZGVyIHR3byBOYU4gYXMgZXF1YWwpCisgKiAqIEJvdGggdmFsdWVzIHJl
cHJlc2VudCB0aGUgc2FtZSByZWd1bGFyIGV4cHJlc3Npb24gKEluIEphdmFTY3JpcHQsCisgKiAg
IC9hYmMvID09IC9hYmMvID0+IGZhbHNlLiBCdXQgd2UgY29uc2lkZXIgdHdvIHJlZ3VsYXIgZXhw
cmVzc2lvbnMgYXMgZXF1YWwgd2hlbiB0aGVpciB0ZXh0dWFsCisgKiAgIHJlcHJlc2VudGF0aW9u
IG1hdGNoZXMpLgorICoKKyAqIER1cmluZyBhIHByb3BlcnR5IGNvbXBhcmlzb24sIHByb3BlcnRp
ZXMgb2YgYGZ1bmN0aW9uYCB0eXBlIGFuZCBwcm9wZXJ0aWVzIHdpdGggbmFtZXMKKyAqIHRoYXQg
YmVnaW4gd2l0aCBgJGAgYXJlIGlnbm9yZWQuCisgKgorICogU2NvcGUgYW5kIERPTVdpbmRvdyBv
YmplY3RzIGFyZSBiZWluZyBjb21wYXJlZCBvbmx5IGJ5IGlkZW50aWZ5IChgPT09YCkuCisgKgor
ICogQHBhcmFtIHsqfSBvMSBPYmplY3Qgb3IgdmFsdWUgdG8gY29tcGFyZS4KKyAqIEBwYXJhbSB7
Kn0gbzIgT2JqZWN0IG9yIHZhbHVlIHRvIGNvbXBhcmUuCisgKiBAcmV0dXJucyB7Ym9vbGVhbn0g
VHJ1ZSBpZiBhcmd1bWVudHMgYXJlIGVxdWFsLgorICovCitmdW5jdGlvbiBlcXVhbHMobzEsIG8y
KSB7CisgIGlmIChvMSA9PT0gbzIpIHJldHVybiB0cnVlOworICBpZiAobzEgPT09IG51bGwgfHwg
bzIgPT09IG51bGwpIHJldHVybiBmYWxzZTsKKyAgaWYgKG8xICE9PSBvMSAmJiBvMiAhPT0gbzIp
IHJldHVybiB0cnVlOyAvLyBOYU4gPT09IE5hTgorICB2YXIgdDEgPSB0eXBlb2YgbzEsIHQyID0g
dHlwZW9mIG8yLCBsZW5ndGgsIGtleSwga2V5U2V0OworICBpZiAodDEgPT0gdDIpIHsKKyAgICBp
ZiAodDEgPT0gJ29iamVjdCcpIHsKKyAgICAgIGlmIChpc0FycmF5KG8xKSkgeworICAgICAgICBp
ZiAoIWlzQXJyYXkobzIpKSByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICgobGVuZ3RoID0gbzEu
bGVuZ3RoKSA9PSBvMi5sZW5ndGgpIHsKKyAgICAgICAgICBmb3IgKGtleSA9IDA7IGtleSA8IGxl
bmd0aDsga2V5KyspIHsKKyAgICAgICAgICAgIGlmICghZXF1YWxzKG8xW2tleV0sIG8yW2tleV0p
KSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgICB9IGVsc2UgaWYgKGlzRGF0ZShvMSkpIHsKKyAgICAgICAgaWYgKCFpc0Rh
dGUobzIpKSByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBlcXVhbHMobzEuZ2V0VGltZSgp
LCBvMi5nZXRUaW1lKCkpOworICAgICAgfSBlbHNlIGlmIChpc1JlZ0V4cChvMSkpIHsKKyAgICAg
ICAgcmV0dXJuIGlzUmVnRXhwKG8yKSA/IG8xLnRvU3RyaW5nKCkgPT0gbzIudG9TdHJpbmcoKSA6
IGZhbHNlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGlzU2NvcGUobzEpIHx8IGlzU2Nv
cGUobzIpIHx8IGlzV2luZG93KG8xKSB8fCBpc1dpbmRvdyhvMikgfHwKKyAgICAgICAgICBpc0Fy
cmF5KG8yKSB8fCBpc0RhdGUobzIpIHx8IGlzUmVnRXhwKG8yKSkgcmV0dXJuIGZhbHNlOworICAg
ICAgICBrZXlTZXQgPSBjcmVhdGVNYXAoKTsKKyAgICAgICAgZm9yIChrZXkgaW4gbzEpIHsKKyAg
ICAgICAgICBpZiAoa2V5LmNoYXJBdCgwKSA9PT0gJyQnIHx8IGlzRnVuY3Rpb24obzFba2V5XSkp
IGNvbnRpbnVlOworICAgICAgICAgIGlmICghZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKSByZXR1
cm4gZmFsc2U7CisgICAgICAgICAga2V5U2V0W2tleV0gPSB0cnVlOworICAgICAgICB9CisgICAg
ICAgIGZvciAoa2V5IGluIG8yKSB7CisgICAgICAgICAgaWYgKCEoa2V5IGluIGtleVNldCkgJiYK
KyAgICAgICAgICAgICAga2V5LmNoYXJBdCgwKSAhPT0gJyQnICYmCisgICAgICAgICAgICAgIG8y
W2tleV0gIT09IHVuZGVmaW5lZCAmJgorICAgICAgICAgICAgICAhaXNGdW5jdGlvbihvMltrZXld
KSkgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
fQorICAgIH0KKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKK3ZhciBjc3AgPSBmdW5jdGlvbigp
IHsKKyAgaWYgKGlzRGVmaW5lZChjc3AuaXNBY3RpdmVfKSkgcmV0dXJuIGNzcC5pc0FjdGl2ZV87
CisKKyAgdmFyIGFjdGl2ZSA9ICEhKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tuZy1jc3BdJykg
fHwKKyAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLW5nLWNz
cF0nKSk7CisKKyAgaWYgKCFhY3RpdmUpIHsKKyAgICB0cnkgeworICAgICAgLyoganNoaW50IC1X
MDMxLCAtVzA1NCAqLworICAgICAgbmV3IEZ1bmN0aW9uKCcnKTsKKyAgICAgIC8qIGpzaGludCAr
VzAzMSwgK1cwNTQgKi8KKyAgICB9IGNhdGNoIChlKSB7CisgICAgICBhY3RpdmUgPSB0cnVlOwor
ICAgIH0KKyAgfQorCisgIHJldHVybiAoY3NwLmlzQWN0aXZlXyA9IGFjdGl2ZSk7Cit9OworCisv
KioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBtb2R1bGUgbmcKKyAqIEBuYW1lIG5nSnEKKyAq
CisgKiBAZWxlbWVudCBBTlkKKyAqIEBwYXJhbSB7c3RyaW5nPX0gbmdKcSB0aGUgbmFtZSBvZiB0
aGUgbGlicmFyeSBhdmFpbGFibGUgdW5kZXIgYHdpbmRvd2AKKyAqIHRvIGJlIHVzZWQgZm9yIGFu
Z3VsYXIuZWxlbWVudAorICogQGRlc2NyaXB0aW9uCisgKiBVc2UgdGhpcyBkaXJlY3RpdmUgdG8g
Zm9yY2UgdGhlIGFuZ3VsYXIuZWxlbWVudCBsaWJyYXJ5LiAgVGhpcyBzaG91bGQgYmUKKyAqIHVz
ZWQgdG8gZm9yY2UgZWl0aGVyIGpxTGl0ZSBieSBsZWF2aW5nIG5nLWpxIGJsYW5rIG9yIHNldHRp
bmcgdGhlIG5hbWUgb2YKKyAqIHRoZSBqcXVlcnkgdmFyaWFibGUgdW5kZXIgd2luZG93IChlZy4g
alF1ZXJ5KS4KKyAqCisgKiBTaW5jZSBhbmd1bGFyIGxvb2tzIGZvciB0aGlzIGRpcmVjdGl2ZSB3
aGVuIGl0IGlzIGxvYWRlZCAoZG9lc24ndCB3YWl0IGZvciB0aGUKKyAqIERPTUNvbnRlbnRMb2Fk
ZWQgZXZlbnQpLCBpdCBtdXN0IGJlIHBsYWNlZCBvbiBhbiBlbGVtZW50IHRoYXQgY29tZXMgYmVm
b3JlIHRoZSBzY3JpcHQKKyAqIHdoaWNoIGxvYWRzIGFuZ3VsYXIuIEFsc28sIG9ubHkgdGhlIGZp
cnN0IGluc3RhbmNlIG9mIGBuZy1qcWAgd2lsbCBiZSB1c2VkIGFuZCBhbGwKKyAqIG90aGVycyBp
Z25vcmVkLgorICoKKyAqIEBleGFtcGxlCisgKiBUaGlzIGV4YW1wbGUgc2hvd3MgaG93IHRvIGZv
cmNlIGpxTGl0ZSB1c2luZyB0aGUgYG5nSnFgIGRpcmVjdGl2ZSB0byB0aGUgYGh0bWxgIHRhZy4K
KyBgYGBodG1sCisgPCFkb2N0eXBlIGh0bWw+CisgPGh0bWwgbmctYXBwIG5nLWpxPgorIC4uLgor
IC4uLgorIDwvaHRtbD4KKyBgYGAKKyAqIEBleGFtcGxlCisgKiBUaGlzIGV4YW1wbGUgc2hvd3Mg
aG93IHRvIHVzZSBhIGpRdWVyeSBiYXNlZCBsaWJyYXJ5IG9mIGEgZGlmZmVyZW50IG5hbWUuCisg
KiBUaGUgbGlicmFyeSBuYW1lIG11c3QgYmUgYXZhaWxhYmxlIGF0IHRoZSB0b3AgbW9zdCAnd2lu
ZG93Jy4KKyBgYGBodG1sCisgPCFkb2N0eXBlIGh0bWw+CisgPGh0bWwgbmctYXBwIG5nLWpxPSJq
UXVlcnlMaWIiPgorIC4uLgorIC4uLgorIDwvaHRtbD4KKyBgYGAKKyAqLwordmFyIGpxID0gZnVu
Y3Rpb24oKSB7CisgIGlmIChpc0RlZmluZWQoanEubmFtZV8pKSByZXR1cm4ganEubmFtZV87Cisg
IHZhciBlbDsKKyAgdmFyIGksIGlpID0gbmdBdHRyUHJlZml4ZXMubGVuZ3RoLCBwcmVmaXgsIG5h
bWU7CisgIGZvciAoaSA9IDA7IGkgPCBpaTsgKytpKSB7CisgICAgcHJlZml4ID0gbmdBdHRyUHJl
Zml4ZXNbaV07CisgICAgaWYgKGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignWycgKyBwcmVm
aXgucmVwbGFjZSgnOicsICdcXDonKSArICdqcV0nKSkgeworICAgICAgbmFtZSA9IGVsLmdldEF0
dHJpYnV0ZShwcmVmaXggKyAnanEnKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIHJl
dHVybiAoanEubmFtZV8gPSBuYW1lKTsKK307CisKK2Z1bmN0aW9uIGNvbmNhdChhcnJheTEsIGFy
cmF5MiwgaW5kZXgpIHsKKyAgcmV0dXJuIGFycmF5MS5jb25jYXQoc2xpY2UuY2FsbChhcnJheTIs
IGluZGV4KSk7Cit9CisKK2Z1bmN0aW9uIHNsaWNlQXJncyhhcmdzLCBzdGFydEluZGV4KSB7Cisg
IHJldHVybiBzbGljZS5jYWxsKGFyZ3MsIHN0YXJ0SW5kZXggfHwgMCk7Cit9CisKKworLyoganNo
aW50IC1XMTAxICovCisvKioKKyAqIEBuZ2RvYyBmdW5jdGlvbgorICogQG5hbWUgYW5ndWxhci5i
aW5kCisgKiBAbW9kdWxlIG5nCisgKiBAa2luZCBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlv
bgorICogUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbGxzIGZ1bmN0aW9uIGBmbmAgYm91bmQg
dG8gYHNlbGZgIChgc2VsZmAgYmVjb21lcyB0aGUgYHRoaXNgIGZvcgorICogYGZuYCkuIFlvdSBj
YW4gc3VwcGx5IG9wdGlvbmFsIGBhcmdzYCB0aGF0IGFyZSBwcmVib3VuZCB0byB0aGUgZnVuY3Rp
b24uIFRoaXMgZmVhdHVyZSBpcyBhbHNvCisgKiBrbm93biBhcyBbcGFydGlhbCBhcHBsaWNhdGlv
bl0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QYXJ0aWFsX2FwcGxpY2F0aW9uKSwgYXMK
KyAqIGRpc3Rpbmd1aXNoZWQgZnJvbSBbZnVuY3Rpb24gY3VycnlpbmddKGh0dHA6Ly9lbi53aWtp
cGVkaWEub3JnL3dpa2kvQ3VycnlpbmcjQ29udHJhc3Rfd2l0aF9wYXJ0aWFsX2Z1bmN0aW9uX2Fw
cGxpY2F0aW9uKS4KKyAqCisgKiBAcGFyYW0ge09iamVjdH0gc2VsZiBDb250ZXh0IHdoaWNoIGBm
bmAgc2hvdWxkIGJlIGV2YWx1YXRlZCBpbi4KKyAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gZm4gRnVu
Y3Rpb24gdG8gYmUgYm91bmQuCisgKiBAcGFyYW0gey4uLip9IGFyZ3MgT3B0aW9uYWwgYXJndW1l
bnRzIHRvIGJlIHByZWJvdW5kIHRvIHRoZSBgZm5gIGZ1bmN0aW9uIGNhbGwuCisgKiBAcmV0dXJu
cyB7ZnVuY3Rpb24oKX0gRnVuY3Rpb24gdGhhdCB3cmFwcyB0aGUgYGZuYCB3aXRoIGFsbCB0aGUg
c3BlY2lmaWVkIGJpbmRpbmdzLgorICovCisvKiBqc2hpbnQgK1cxMDEgKi8KK2Z1bmN0aW9uIGJp
bmQoc2VsZiwgZm4pIHsKKyAgdmFyIGN1cnJ5QXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8g
c2xpY2VBcmdzKGFyZ3VtZW50cywgMikgOiBbXTsKKyAgaWYgKGlzRnVuY3Rpb24oZm4pICYmICEo
Zm4gaW5zdGFuY2VvZiBSZWdFeHApKSB7CisgICAgcmV0dXJuIGN1cnJ5QXJncy5sZW5ndGgKKyAg
ICAgID8gZnVuY3Rpb24oKSB7CisgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgKKyAg
ICAgICAgICAgID8gZm4uYXBwbHkoc2VsZiwgY29uY2F0KGN1cnJ5QXJncywgYXJndW1lbnRzLCAw
KSkKKyAgICAgICAgICAgIDogZm4uYXBwbHkoc2VsZiwgY3VycnlBcmdzKTsKKyAgICAgICAgfQor
ICAgICAgOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aAor
ICAgICAgICAgICAgPyBmbi5hcHBseShzZWxmLCBhcmd1bWVudHMpCisgICAgICAgICAgICA6IGZu
LmNhbGwoc2VsZik7CisgICAgICAgIH07CisgIH0gZWxzZSB7CisgICAgLy8gaW4gSUUsIG5hdGl2
ZSBtZXRob2RzIGFyZSBub3QgZnVuY3Rpb25zIHNvIHRoZXkgY2Fubm90IGJlIGJvdW5kIChub3Rl
OiB0aGV5IGRvbid0IG5lZWQgdG8gYmUpCisgICAgcmV0dXJuIGZuOworICB9Cit9CisKKworZnVu
Y3Rpb24gdG9Kc29uUmVwbGFjZXIoa2V5LCB2YWx1ZSkgeworICB2YXIgdmFsID0gdmFsdWU7CisK
KyAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmIGtleS5jaGFyQXQoMCkgPT09ICckJyAm
JiBrZXkuY2hhckF0KDEpID09PSAnJCcpIHsKKyAgICB2YWwgPSB1bmRlZmluZWQ7CisgIH0gZWxz
ZSBpZiAoaXNXaW5kb3codmFsdWUpKSB7CisgICAgdmFsID0gJyRXSU5ET1cnOworICB9IGVsc2Ug
aWYgKHZhbHVlICYmICBkb2N1bWVudCA9PT0gdmFsdWUpIHsKKyAgICB2YWwgPSAnJERPQ1VNRU5U
JzsKKyAgfSBlbHNlIGlmIChpc1Njb3BlKHZhbHVlKSkgeworICAgIHZhbCA9ICckU0NPUEUnOwor
ICB9CisKKyAgcmV0dXJuIHZhbDsKK30KKworCisvKioKKyAqIEBuZ2RvYyBmdW5jdGlvbgorICog
QG5hbWUgYW5ndWxhci50b0pzb24KKyAqIEBtb2R1bGUgbmcKKyAqIEBraW5kIGZ1bmN0aW9uCisg
KgorICogQGRlc2NyaXB0aW9uCisgKiBTZXJpYWxpemVzIGlucHV0IGludG8gYSBKU09OLWZvcm1h
dHRlZCBzdHJpbmcuIFByb3BlcnRpZXMgd2l0aCBsZWFkaW5nICQkIGNoYXJhY3RlcnMgd2lsbCBi
ZQorICogc3RyaXBwZWQgc2luY2UgYW5ndWxhciB1c2VzIHRoaXMgbm90YXRpb24gaW50ZXJuYWxs
eS4KKyAqCisgKiBAcGFyYW0ge09iamVjdHxBcnJheXxEYXRlfHN0cmluZ3xudW1iZXJ9IG9iaiBJ
bnB1dCB0byBiZSBzZXJpYWxpemVkIGludG8gSlNPTi4KKyAqIEBwYXJhbSB7Ym9vbGVhbnxudW1i
ZXJ9IFtwcmV0dHk9Ml0gSWYgc2V0IHRvIHRydWUsIHRoZSBKU09OIG91dHB1dCB3aWxsIGNvbnRh
aW4gbmV3bGluZXMgYW5kIHdoaXRlc3BhY2UuCisgKiAgICBJZiBzZXQgdG8gYW4gaW50ZWdlciwg
dGhlIEpTT04gb3V0cHV0IHdpbGwgY29udGFpbiB0aGF0IG1hbnkgc3BhY2VzIHBlciBpbmRlbnRh
dGlvbi4KKyAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBKU09OLWlmaWVkIHN0cmluZyBy
ZXByZXNlbnRpbmcgYG9iamAuCisgKi8KK2Z1bmN0aW9uIHRvSnNvbihvYmosIHByZXR0eSkgewor
ICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiB1bmRlZmluZWQ7CisgIGlm
ICghaXNOdW1iZXIocHJldHR5KSkgeworICAgIHByZXR0eSA9IHByZXR0eSA/IDIgOiBudWxsOwor
ICB9CisgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmosIHRvSnNvblJlcGxhY2VyLCBwcmV0dHkp
OworfQorCisKKy8qKgorICogQG5nZG9jIGZ1bmN0aW9uCisgKiBAbmFtZSBhbmd1bGFyLmZyb21K
c29uCisgKiBAbW9kdWxlIG5nCisgKiBAa2luZCBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlv
bgorICogRGVzZXJpYWxpemVzIGEgSlNPTiBzdHJpbmcuCisgKgorICogQHBhcmFtIHtzdHJpbmd9
IGpzb24gSlNPTiBzdHJpbmcgdG8gZGVzZXJpYWxpemUuCisgKiBAcmV0dXJucyB7T2JqZWN0fEFy
cmF5fHN0cmluZ3xudW1iZXJ9IERlc2VyaWFsaXplZCBKU09OIHN0cmluZy4KKyAqLworZnVuY3Rp
b24gZnJvbUpzb24oanNvbikgeworICByZXR1cm4gaXNTdHJpbmcoanNvbikKKyAgICAgID8gSlNP
Ti5wYXJzZShqc29uKQorICAgICAgOiBqc29uOworfQorCisKK2Z1bmN0aW9uIHRpbWV6b25lVG9P
ZmZzZXQodGltZXpvbmUsIGZhbGxiYWNrKSB7CisgIHZhciByZXF1ZXN0ZWRUaW1lem9uZU9mZnNl
dCA9IERhdGUucGFyc2UoJ0phbiAwMSwgMTk3MCAwMDowMDowMCAnICsgdGltZXpvbmUpIC8gNjAw
MDA7CisgIHJldHVybiBpc05hTihyZXF1ZXN0ZWRUaW1lem9uZU9mZnNldCkgPyBmYWxsYmFjayA6
IHJlcXVlc3RlZFRpbWV6b25lT2Zmc2V0OworfQorCisKK2Z1bmN0aW9uIGFkZERhdGVNaW51dGVz
KGRhdGUsIG1pbnV0ZXMpIHsKKyAgZGF0ZSA9IG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpKTsKKyAg
ZGF0ZS5zZXRNaW51dGVzKGRhdGUuZ2V0TWludXRlcygpICsgbWludXRlcyk7CisgIHJldHVybiBk
YXRlOworfQorCisKK2Z1bmN0aW9uIGNvbnZlcnRUaW1lem9uZVRvTG9jYWwoZGF0ZSwgdGltZXpv
bmUsIHJldmVyc2UpIHsKKyAgcmV2ZXJzZSA9IHJldmVyc2UgPyAtMSA6IDE7CisgIHZhciB0aW1l
em9uZU9mZnNldCA9IHRpbWV6b25lVG9PZmZzZXQodGltZXpvbmUsIGRhdGUuZ2V0VGltZXpvbmVP
ZmZzZXQoKSk7CisgIHJldHVybiBhZGREYXRlTWludXRlcyhkYXRlLCByZXZlcnNlICogKHRpbWV6
b25lT2Zmc2V0IC0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpKSk7Cit9CisKKworLyoqCisgKiBA
cmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhl
IGVsZW1lbnQuCisgKi8KK2Z1bmN0aW9uIHN0YXJ0aW5nVGFnKGVsZW1lbnQpIHsKKyAgZWxlbWVu
dCA9IGpxTGl0ZShlbGVtZW50KS5jbG9uZSgpOworICB0cnkgeworICAgIC8vIHR1cm5zIG91dCBJ
RSBkb2VzIG5vdCBsZXQgeW91IHNldCAuaHRtbCgpIG9uIGVsZW1lbnRzIHdoaWNoCisgICAgLy8g
YXJlIG5vdCBhbGxvd2VkIHRvIGhhdmUgY2hpbGRyZW4uIFNvIHdlIGp1c3QgaWdub3JlIGl0Lgor
ICAgIGVsZW1lbnQuZW1wdHkoKTsKKyAgfSBjYXRjaCAoZSkge30KKyAgdmFyIGVsZW1IdG1sID0g
anFMaXRlKCc8ZGl2PicpLmFwcGVuZChlbGVtZW50KS5odG1sKCk7CisgIHRyeSB7CisgICAgcmV0
dXJuIGVsZW1lbnRbMF0ubm9kZVR5cGUgPT09IE5PREVfVFlQRV9URVhUID8gbG93ZXJjYXNlKGVs
ZW1IdG1sKSA6CisgICAgICAgIGVsZW1IdG1sLgorICAgICAgICAgIG1hdGNoKC9eKDxbXj5dKz4p
LylbMV0uCisgICAgICAgICAgcmVwbGFjZSgvXjwoW1x3XC1dKykvLCBmdW5jdGlvbihtYXRjaCwg
bm9kZU5hbWUpIHsgcmV0dXJuICc8JyArIGxvd2VyY2FzZShub2RlTmFtZSk7IH0pOworICB9IGNh
dGNoIChlKSB7CisgICAgcmV0dXJuIGxvd2VyY2FzZShlbGVtSHRtbCk7CisgIH0KKworfQorCisK
Ky8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLyoq
CisgKiBUcmllcyB0byBkZWNvZGUgdGhlIFVSSSBjb21wb25lbnQgd2l0aG91dCB0aHJvd2luZyBh
biBleGNlcHRpb24uCisgKgorICogQHByaXZhdGUKKyAqIEBwYXJhbSBzdHIgdmFsdWUgcG90ZW50
aWFsIFVSSSBjb21wb25lbnQgdG8gY2hlY2suCisgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBp
ZiBgdmFsdWVgIGNhbiBiZSBkZWNvZGVkCisgKiB3aXRoIHRoZSBkZWNvZGVVUklDb21wb25lbnQg
ZnVuY3Rpb24uCisgKi8KK2Z1bmN0aW9uIHRyeURlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkgewor
ICB0cnkgeworICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpOworICB9IGNhdGNo
IChlKSB7CisgICAgLy8gSWdub3JlIGFueSBpbnZhbGlkIHVyaSBjb21wb25lbnQKKyAgfQorfQor
CisKKy8qKgorICogUGFyc2VzIGFuIGVzY2FwZWQgdXJsIHF1ZXJ5IHN0cmluZyBpbnRvIGtleS12
YWx1ZSBwYWlycy4KKyAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZyxib29sZWFufEFycmF5Pn0K
KyAqLworZnVuY3Rpb24gcGFyc2VLZXlWYWx1ZSgvKipzdHJpbmcqL2tleVZhbHVlKSB7CisgIHZh
ciBvYmogPSB7fSwga2V5X3ZhbHVlLCBrZXk7CisgIGZvckVhY2goKGtleVZhbHVlIHx8ICIiKS5z
cGxpdCgnJicpLCBmdW5jdGlvbihrZXlWYWx1ZSkgeworICAgIGlmIChrZXlWYWx1ZSkgeworICAg
ICAga2V5X3ZhbHVlID0ga2V5VmFsdWUucmVwbGFjZSgvXCsvZywnJTIwJykuc3BsaXQoJz0nKTsK
KyAgICAgIGtleSA9IHRyeURlY29kZVVSSUNvbXBvbmVudChrZXlfdmFsdWVbMF0pOworICAgICAg
aWYgKGlzRGVmaW5lZChrZXkpKSB7CisgICAgICAgIHZhciB2YWwgPSBpc0RlZmluZWQoa2V5X3Zh
bHVlWzFdKSA/IHRyeURlY29kZVVSSUNvbXBvbmVudChrZXlfdmFsdWVbMV0pIDogdHJ1ZTsKKyAg
ICAgICAgaWYgKCFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgeworICAgICAgICAgIG9i
altrZXldID0gdmFsOworICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqW2tleV0pKSB7Cisg
ICAgICAgICAgb2JqW2tleV0ucHVzaCh2YWwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
IG9ialtrZXldID0gW29ialtrZXldLHZhbF07CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9Cisg
IH0pOworICByZXR1cm4gb2JqOworfQorCitmdW5jdGlvbiB0b0tleVZhbHVlKG9iaikgeworICB2
YXIgcGFydHMgPSBbXTsKKyAgZm9yRWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHsKKyAg
ICBpZiAoaXNBcnJheSh2YWx1ZSkpIHsKKyAgICAgIGZvckVhY2godmFsdWUsIGZ1bmN0aW9uKGFy
cmF5VmFsdWUpIHsKKyAgICAgICAgcGFydHMucHVzaChlbmNvZGVVcmlRdWVyeShrZXksIHRydWUp
ICsKKyAgICAgICAgICAgICAgICAgICAoYXJyYXlWYWx1ZSA9PT0gdHJ1ZSA/ICcnIDogJz0nICsg
ZW5jb2RlVXJpUXVlcnkoYXJyYXlWYWx1ZSwgdHJ1ZSkpKTsKKyAgICAgIH0pOworICAgIH0gZWxz
ZSB7CisgICAgcGFydHMucHVzaChlbmNvZGVVcmlRdWVyeShrZXksIHRydWUpICsKKyAgICAgICAg
ICAgICAgICh2YWx1ZSA9PT0gdHJ1ZSA/ICcnIDogJz0nICsgZW5jb2RlVXJpUXVlcnkodmFsdWUs
IHRydWUpKSk7CisgICAgfQorICB9KTsKKyAgcmV0dXJuIHBhcnRzLmxlbmd0aCA/IHBhcnRzLmpv
aW4oJyYnKSA6ICcnOworfQorCisKKy8qKgorICogV2UgbmVlZCBvdXIgY3VzdG9tIG1ldGhvZCBi
ZWNhdXNlIGVuY29kZVVSSUNvbXBvbmVudCBpcyB0b28gYWdncmVzc2l2ZSBhbmQgZG9lc24ndCBm
b2xsb3cKKyAqIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzM5ODYudHh0IHdpdGggcmVnYXJk
cyB0byB0aGUgY2hhcmFjdGVyIHNldCAocGNoYXIpIGFsbG93ZWQgaW4gcGF0aAorICogc2VnbWVu
dHM6CisgKiAgICBzZWdtZW50ICAgICAgID0gKnBjaGFyCisgKiAgICBwY2hhciAgICAgICAgID0g
dW5yZXNlcnZlZCAvIHBjdC1lbmNvZGVkIC8gc3ViLWRlbGltcyAvICI6IiAvICJAIgorICogICAg
cGN0LWVuY29kZWQgICA9ICIlIiBIRVhESUcgSEVYRElHCisgKiAgICB1bnJlc2VydmVkICAgID0g
QUxQSEEgLyBESUdJVCAvICItIiAvICIuIiAvICJfIiAvICJ+IgorICogICAgc3ViLWRlbGltcyAg
ICA9ICIhIiAvICIkIiAvICImIiAvICInIiAvICIoIiAvICIpIgorICogICAgICAgICAgICAgICAg
ICAgICAvICIqIiAvICIrIiAvICIsIiAvICI7IiAvICI9IgorICovCitmdW5jdGlvbiBlbmNvZGVV
cmlTZWdtZW50KHZhbCkgeworICByZXR1cm4gZW5jb2RlVXJpUXVlcnkodmFsLCB0cnVlKS4KKyAg
ICAgICAgICAgICByZXBsYWNlKC8lMjYvZ2ksICcmJykuCisgICAgICAgICAgICAgcmVwbGFjZSgv
JTNEL2dpLCAnPScpLgorICAgICAgICAgICAgIHJlcGxhY2UoLyUyQi9naSwgJysnKTsKK30KKwor
CisvKioKKyAqIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIGZvciBlbmNvZGluZyAqa2V5KiBvciAq
dmFsdWUqIHBhcnRzIG9mIHF1ZXJ5IGNvbXBvbmVudC4gV2UgbmVlZCBhIGN1c3RvbQorICogbWV0
aG9kIGJlY2F1c2UgZW5jb2RlVVJJQ29tcG9uZW50IGlzIHRvbyBhZ2dyZXNzaXZlIGFuZCBlbmNv
ZGVzIHN0dWZmIHRoYXQgZG9lc24ndCBoYXZlIHRvIGJlCisgKiBlbmNvZGVkIHBlciBodHRwOi8v
dG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2OgorICogICAgcXVlcnkgICAgICAgPSAqKCBwY2hh
ciAvICIvIiAvICI/IiApCisgKiAgICBwY2hhciAgICAgICAgID0gdW5yZXNlcnZlZCAvIHBjdC1l
bmNvZGVkIC8gc3ViLWRlbGltcyAvICI6IiAvICJAIgorICogICAgdW5yZXNlcnZlZCAgICA9IEFM
UEhBIC8gRElHSVQgLyAiLSIgLyAiLiIgLyAiXyIgLyAifiIKKyAqICAgIHBjdC1lbmNvZGVkICAg
PSAiJSIgSEVYRElHIEhFWERJRworICogICAgc3ViLWRlbGltcyAgICA9ICIhIiAvICIkIiAvICIm
IiAvICInIiAvICIoIiAvICIpIgorICogICAgICAgICAgICAgICAgICAgICAvICIqIiAvICIrIiAv
ICIsIiAvICI7IiAvICI9IgorICovCitmdW5jdGlvbiBlbmNvZGVVcmlRdWVyeSh2YWwsIHBjdEVu
Y29kZVNwYWNlcykgeworICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuCisgICAgICAg
ICAgICAgcmVwbGFjZSgvJTQwL2dpLCAnQCcpLgorICAgICAgICAgICAgIHJlcGxhY2UoLyUzQS9n
aSwgJzonKS4KKyAgICAgICAgICAgICByZXBsYWNlKC8lMjQvZywgJyQnKS4KKyAgICAgICAgICAg
ICByZXBsYWNlKC8lMkMvZ2ksICcsJykuCisgICAgICAgICAgICAgcmVwbGFjZSgvJTNCL2dpLCAn
OycpLgorICAgICAgICAgICAgIHJlcGxhY2UoLyUyMC9nLCAocGN0RW5jb2RlU3BhY2VzID8gJyUy
MCcgOiAnKycpKTsKK30KKwordmFyIG5nQXR0clByZWZpeGVzID0gWyduZy0nLCAnZGF0YS1uZy0n
LCAnbmc6JywgJ3gtbmctJ107CisKK2Z1bmN0aW9uIGdldE5nQXR0cmlidXRlKGVsZW1lbnQsIG5n
QXR0cikgeworICB2YXIgYXR0ciwgaSwgaWkgPSBuZ0F0dHJQcmVmaXhlcy5sZW5ndGg7CisgIGZv
ciAoaSA9IDA7IGkgPCBpaTsgKytpKSB7CisgICAgYXR0ciA9IG5nQXR0clByZWZpeGVzW2ldICsg
bmdBdHRyOworICAgIGlmIChpc1N0cmluZyhhdHRyID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0
cikpKSB7CisgICAgICByZXR1cm4gYXR0cjsKKyAgICB9CisgIH0KKyAgcmV0dXJuIG51bGw7Cit9
CisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgbmdBcHAKKyAqIEBtb2R1bGUg
bmcKKyAqCisgKiBAZWxlbWVudCBBTlkKKyAqIEBwYXJhbSB7YW5ndWxhci5Nb2R1bGV9IG5nQXBw
IGFuIG9wdGlvbmFsIGFwcGxpY2F0aW9uCisgKiAgIHtAbGluayBhbmd1bGFyLm1vZHVsZSBtb2R1
bGV9IG5hbWUgdG8gbG9hZC4KKyAqIEBwYXJhbSB7Ym9vbGVhbj19IG5nU3RyaWN0RGkgaWYgdGhp
cyBhdHRyaWJ1dGUgaXMgcHJlc2VudCBvbiB0aGUgYXBwIGVsZW1lbnQsIHRoZSBpbmplY3RvciB3
aWxsIGJlCisgKiAgIGNyZWF0ZWQgaW4gInN0cmljdC1kaSIgbW9kZS4gVGhpcyBtZWFucyB0aGF0
IHRoZSBhcHBsaWNhdGlvbiB3aWxsIGZhaWwgdG8gaW52b2tlIGZ1bmN0aW9ucyB3aGljaAorICog
ICBkbyBub3QgdXNlIGV4cGxpY2l0IGZ1bmN0aW9uIGFubm90YXRpb24gKGFuZCBhcmUgdGh1cyB1
bnN1aXRhYmxlIGZvciBtaW5pZmljYXRpb24pLCBhcyBkZXNjcmliZWQKKyAqICAgaW4ge0BsaW5r
IGd1aWRlL2RpIHRoZSBEZXBlbmRlbmN5IEluamVjdGlvbiBndWlkZX0sIGFuZCB1c2VmdWwgZGVi
dWdnaW5nIGluZm8gd2lsbCBhc3Npc3QgaW4KKyAqICAgdHJhY2tpbmcgZG93biB0aGUgcm9vdCBv
ZiB0aGVzZSBidWdzLgorICoKKyAqIEBkZXNjcmlwdGlvbgorICoKKyAqIFVzZSB0aGlzIGRpcmVj
dGl2ZSB0byAqKmF1dG8tYm9vdHN0cmFwKiogYW4gQW5ndWxhckpTIGFwcGxpY2F0aW9uLiBUaGUg
YG5nQXBwYCBkaXJlY3RpdmUKKyAqIGRlc2lnbmF0ZXMgdGhlICoqcm9vdCBlbGVtZW50Kiogb2Yg
dGhlIGFwcGxpY2F0aW9uIGFuZCBpcyB0eXBpY2FsbHkgcGxhY2VkIG5lYXIgdGhlIHJvb3QgZWxl
bWVudAorICogb2YgdGhlIHBhZ2UgLSBlLmcuIG9uIHRoZSBgPGJvZHk+YCBvciBgPGh0bWw+YCB0
YWdzLgorICoKKyAqIE9ubHkgb25lIEFuZ3VsYXJKUyBhcHBsaWNhdGlvbiBjYW4gYmUgYXV0by1i
b290c3RyYXBwZWQgcGVyIEhUTUwgZG9jdW1lbnQuIFRoZSBmaXJzdCBgbmdBcHBgCisgKiBmb3Vu
ZCBpbiB0aGUgZG9jdW1lbnQgd2lsbCBiZSB1c2VkIHRvIGRlZmluZSB0aGUgcm9vdCBlbGVtZW50
IHRvIGF1dG8tYm9vdHN0cmFwIGFzIGFuCisgKiBhcHBsaWNhdGlvbi4gVG8gcnVuIG11bHRpcGxl
IGFwcGxpY2F0aW9ucyBpbiBhbiBIVE1MIGRvY3VtZW50IHlvdSBtdXN0IG1hbnVhbGx5IGJvb3Rz
dHJhcCB0aGVtIHVzaW5nCisgKiB7QGxpbmsgYW5ndWxhci5ib290c3RyYXB9IGluc3RlYWQuIEFu
Z3VsYXJKUyBhcHBsaWNhdGlvbnMgY2Fubm90IGJlIG5lc3RlZCB3aXRoaW4gZWFjaCBvdGhlci4K
KyAqCisgKiBZb3UgY2FuIHNwZWNpZnkgYW4gKipBbmd1bGFySlMgbW9kdWxlKiogdG8gYmUgdXNl
ZCBhcyB0aGUgcm9vdCBtb2R1bGUgZm9yIHRoZSBhcHBsaWNhdGlvbi4gIFRoaXMKKyAqIG1vZHVs
ZSB3aWxsIGJlIGxvYWRlZCBpbnRvIHRoZSB7QGxpbmsgYXV0by4kaW5qZWN0b3J9IHdoZW4gdGhl
IGFwcGxpY2F0aW9uIGlzIGJvb3RzdHJhcHBlZC4gSXQKKyAqIHNob3VsZCBjb250YWluIHRoZSBh
cHBsaWNhdGlvbiBjb2RlIG5lZWRlZCBvciBoYXZlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBtb2R1
bGVzIHRoYXQgd2lsbAorICogY29udGFpbiB0aGUgY29kZS4gU2VlIHtAbGluayBhbmd1bGFyLm1v
ZHVsZX0gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogSW4gdGhlIGV4YW1wbGUgYmVsb3cg
aWYgdGhlIGBuZ0FwcGAgZGlyZWN0aXZlIHdlcmUgbm90IHBsYWNlZCBvbiB0aGUgYGh0bWxgIGVs
ZW1lbnQgdGhlbiB0aGUKKyAqIGRvY3VtZW50IHdvdWxkIG5vdCBiZSBjb21waWxlZCwgdGhlIGBB
cHBDb250cm9sbGVyYCB3b3VsZCBub3QgYmUgaW5zdGFudGlhdGVkIGFuZCB0aGUgYHt7IGErYiB9
fWAKKyAqIHdvdWxkIG5vdCBiZSByZXNvbHZlZCB0byBgM2AuCisgKgorICogYG5nQXBwYCBpcyB0
aGUgZWFzaWVzdCwgYW5kIG1vc3QgY29tbW9uIHdheSB0byBib290c3RyYXAgYW4gYXBwbGljYXRp
b24uCisgKgorIDxleGFtcGxlIG1vZHVsZT0ibmdBcHBEZW1vIj4KKyAgIDxmaWxlIG5hbWU9Imlu
ZGV4Lmh0bWwiPgorICAgPGRpdiBuZy1jb250cm9sbGVyPSJuZ0FwcERlbW9Db250cm9sbGVyIj4K
KyAgICAgSSBjYW4gYWRkOiB7e2F9fSArIHt7Yn19ID0gIHt7IGErYiB9fQorICAgPC9kaXY+Cisg
ICA8L2ZpbGU+CisgICA8ZmlsZSBuYW1lPSJzY3JpcHQuanMiPgorICAgYW5ndWxhci5tb2R1bGUo
J25nQXBwRGVtbycsIFtdKS5jb250cm9sbGVyKCduZ0FwcERlbW9Db250cm9sbGVyJywgZnVuY3Rp
b24oJHNjb3BlKSB7CisgICAgICRzY29wZS5hID0gMTsKKyAgICAgJHNjb3BlLmIgPSAyOworICAg
fSk7CisgICA8L2ZpbGU+CisgPC9leGFtcGxlPgorICoKKyAqIFVzaW5nIGBuZ1N0cmljdERpYCwg
eW91IHdvdWxkIHNlZSBzb21ldGhpbmcgbGlrZSB0aGlzOgorICoKKyA8ZXhhbXBsZSBuZy1hcHAt
aW5jbHVkZWQ9InRydWUiPgorICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICA8ZGl2IG5n
LWFwcD0ibmdBcHBTdHJpY3REZW1vIiBuZy1zdHJpY3QtZGk+CisgICAgICAgPGRpdiBuZy1jb250
cm9sbGVyPSJHb29kQ29udHJvbGxlcjEiPgorICAgICAgICAgICBJIGNhbiBhZGQ6IHt7YX19ICsg
e3tifX0gPSAge3sgYStiIH19CisKKyAgICAgICAgICAgPHA+VGhpcyByZW5kZXJzIGJlY2F1c2Ug
dGhlIGNvbnRyb2xsZXIgZG9lcyBub3QgZmFpbCB0bworICAgICAgICAgICAgICBpbnN0YW50aWF0
ZSwgYnkgdXNpbmcgZXhwbGljaXQgYW5ub3RhdGlvbiBzdHlsZSAoc2VlCisgICAgICAgICAgICAg
IHNjcmlwdC5qcyBmb3IgZGV0YWlscykKKyAgICAgICAgICAgPC9wPgorICAgICAgIDwvZGl2Pgor
CisgICAgICAgPGRpdiBuZy1jb250cm9sbGVyPSJHb29kQ29udHJvbGxlcjIiPgorICAgICAgICAg
ICBOYW1lOiA8aW5wdXQgbmctbW9kZWw9Im5hbWUiPjxiciAvPgorICAgICAgICAgICBIZWxsbywg
e3tuYW1lfX0hCisKKyAgICAgICAgICAgPHA+VGhpcyByZW5kZXJzIGJlY2F1c2UgdGhlIGNvbnRy
b2xsZXIgZG9lcyBub3QgZmFpbCB0bworICAgICAgICAgICAgICBpbnN0YW50aWF0ZSwgYnkgdXNp
bmcgZXhwbGljaXQgYW5ub3RhdGlvbiBzdHlsZQorICAgICAgICAgICAgICAoc2VlIHNjcmlwdC5q
cyBmb3IgZGV0YWlscykKKyAgICAgICAgICAgPC9wPgorICAgICAgIDwvZGl2PgorCisgICAgICAg
PGRpdiBuZy1jb250cm9sbGVyPSJCYWRDb250cm9sbGVyIj4KKyAgICAgICAgICAgSSBjYW4gYWRk
OiB7e2F9fSArIHt7Yn19ID0gIHt7IGErYiB9fQorCisgICAgICAgICAgIDxwPlRoZSBjb250cm9s
bGVyIGNvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQsIGR1ZSB0byByZWx5aW5nCisgICAgICAgICAg
ICAgIG9uIGF1dG9tYXRpYyBmdW5jdGlvbiBhbm5vdGF0aW9ucyAod2hpY2ggYXJlIGRpc2FibGVk
IGluCisgICAgICAgICAgICAgIHN0cmljdCBtb2RlKS4gQXMgc3VjaCwgdGhlIGNvbnRlbnQgb2Yg
dGhpcyBzZWN0aW9uIGlzIG5vdAorICAgICAgICAgICAgICBpbnRlcnBvbGF0ZWQsIGFuZCB0aGVy
ZSBzaG91bGQgYmUgYW4gZXJyb3IgaW4geW91ciB3ZWIgY29uc29sZS4KKyAgICAgICAgICAgPC9w
PgorICAgICAgIDwvZGl2PgorICAgPC9kaXY+CisgICA8L2ZpbGU+CisgICA8ZmlsZSBuYW1lPSJz
Y3JpcHQuanMiPgorICAgYW5ndWxhci5tb2R1bGUoJ25nQXBwU3RyaWN0RGVtbycsIFtdKQorICAg
ICAvLyBCYWRDb250cm9sbGVyIHdpbGwgZmFpbCB0byBpbnN0YW50aWF0ZSwgZHVlIHRvIHJlbHlp
bmcgb24gYXV0b21hdGljIGZ1bmN0aW9uIGFubm90YXRpb24sCisgICAgIC8vIHJhdGhlciB0aGFu
IGFuIGV4cGxpY2l0IGFubm90YXRpb24KKyAgICAgLmNvbnRyb2xsZXIoJ0JhZENvbnRyb2xsZXIn
LCBmdW5jdGlvbigkc2NvcGUpIHsKKyAgICAgICAkc2NvcGUuYSA9IDE7CisgICAgICAgJHNjb3Bl
LmIgPSAyOworICAgICB9KQorICAgICAvLyBVbmxpa2UgQmFkQ29udHJvbGxlciwgR29vZENvbnRy
b2xsZXIxIGFuZCBHb29kQ29udHJvbGxlcjIgd2lsbCBub3QgZmFpbCB0byBiZSBpbnN0YW50aWF0
ZWQsCisgICAgIC8vIGR1ZSB0byB1c2luZyBleHBsaWNpdCBhbm5vdGF0aW9ucyB1c2luZyB0aGUg
YXJyYXkgc3R5bGUgYW5kICRpbmplY3QgcHJvcGVydHksIHJlc3BlY3RpdmVseS4KKyAgICAgLmNv
bnRyb2xsZXIoJ0dvb2RDb250cm9sbGVyMScsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7
CisgICAgICAgJHNjb3BlLmEgPSAxOworICAgICAgICRzY29wZS5iID0gMjsKKyAgICAgfV0pCisg
ICAgIC5jb250cm9sbGVyKCdHb29kQ29udHJvbGxlcjInLCBHb29kQ29udHJvbGxlcjIpOworICAg
ICBmdW5jdGlvbiBHb29kQ29udHJvbGxlcjIoJHNjb3BlKSB7CisgICAgICAgJHNjb3BlLm5hbWUg
PSAiV29ybGQiOworICAgICB9CisgICAgIEdvb2RDb250cm9sbGVyMi4kaW5qZWN0ID0gWyckc2Nv
cGUnXTsKKyAgIDwvZmlsZT4KKyAgIDxmaWxlIG5hbWU9InN0eWxlLmNzcyI+CisgICBkaXZbbmct
Y29udHJvbGxlcl0geworICAgICAgIG1hcmdpbi1ib3R0b206IDFlbTsKKyAgICAgICAtd2Via2l0
LWJvcmRlci1yYWRpdXM6IDRweDsKKyAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CisgICAgICAg
Ym9yZGVyOiAxcHggc29saWQ7CisgICAgICAgcGFkZGluZzogLjVlbTsKKyAgIH0KKyAgIGRpdltu
Zy1jb250cm9sbGVyXj1Hb29kXSB7CisgICAgICAgYm9yZGVyLWNvbG9yOiAjZDZlOWM2OworICAg
ICAgIGJhY2tncm91bmQtY29sb3I6ICNkZmYwZDg7CisgICAgICAgY29sb3I6ICMzYzc2M2Q7Cisg
ICB9CisgICBkaXZbbmctY29udHJvbGxlcl49QmFkXSB7CisgICAgICAgYm9yZGVyLWNvbG9yOiAj
ZWJjY2QxOworICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMmRlZGU7CisgICAgICAgY29sb3I6
ICNhOTQ0NDI7CisgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKKyAgIH0KKyAgIDwvZmlsZT4KKyA8
L2V4YW1wbGU+CisgKi8KK2Z1bmN0aW9uIGFuZ3VsYXJJbml0KGVsZW1lbnQsIGJvb3RzdHJhcCkg
eworICB2YXIgYXBwRWxlbWVudCwKKyAgICAgIG1vZHVsZSwKKyAgICAgIGNvbmZpZyA9IHt9Owor
CisgIC8vIFRoZSBlbGVtZW50IGBlbGVtZW50YCBoYXMgcHJpb3JpdHkgb3ZlciBhbnkgb3RoZXIg
ZWxlbWVudAorICBmb3JFYWNoKG5nQXR0clByZWZpeGVzLCBmdW5jdGlvbihwcmVmaXgpIHsKKyAg
ICB2YXIgbmFtZSA9IHByZWZpeCArICdhcHAnOworCisgICAgaWYgKCFhcHBFbGVtZW50ICYmIGVs
ZW1lbnQuaGFzQXR0cmlidXRlICYmIGVsZW1lbnQuaGFzQXR0cmlidXRlKG5hbWUpKSB7CisgICAg
ICBhcHBFbGVtZW50ID0gZWxlbWVudDsKKyAgICAgIG1vZHVsZSA9IGVsZW1lbnQuZ2V0QXR0cmli
dXRlKG5hbWUpOworICAgIH0KKyAgfSk7CisgIGZvckVhY2gobmdBdHRyUHJlZml4ZXMsIGZ1bmN0
aW9uKHByZWZpeCkgeworICAgIHZhciBuYW1lID0gcHJlZml4ICsgJ2FwcCc7CisgICAgdmFyIGNh
bmRpZGF0ZTsKKworICAgIGlmICghYXBwRWxlbWVudCAmJiAoY2FuZGlkYXRlID0gZWxlbWVudC5x
dWVyeVNlbGVjdG9yKCdbJyArIG5hbWUucmVwbGFjZSgnOicsICdcXDonKSArICddJykpKSB7Cisg
ICAgICBhcHBFbGVtZW50ID0gY2FuZGlkYXRlOworICAgICAgbW9kdWxlID0gY2FuZGlkYXRlLmdl
dEF0dHJpYnV0ZShuYW1lKTsKKyAgICB9CisgIH0pOworICBpZiAoYXBwRWxlbWVudCkgeworICAg
IGNvbmZpZy5zdHJpY3REaSA9IGdldE5nQXR0cmlidXRlKGFwcEVsZW1lbnQsICJzdHJpY3QtZGki
KSAhPT0gbnVsbDsKKyAgICBib290c3RyYXAoYXBwRWxlbWVudCwgbW9kdWxlID8gW21vZHVsZV0g
OiBbXSwgY29uZmlnKTsKKyAgfQorfQorCisvKioKKyAqIEBuZ2RvYyBmdW5jdGlvbgorICogQG5h
bWUgYW5ndWxhci5ib290c3RyYXAKKyAqIEBtb2R1bGUgbmcKKyAqIEBkZXNjcmlwdGlvbgorICog
VXNlIHRoaXMgZnVuY3Rpb24gdG8gbWFudWFsbHkgc3RhcnQgdXAgYW5ndWxhciBhcHBsaWNhdGlv
bi4KKyAqCisgKiBTZWU6IHtAbGluayBndWlkZS9ib290c3RyYXAgQm9vdHN0cmFwfQorICoKKyAq
IE5vdGUgdGhhdCBQcm90cmFjdG9yIGJhc2VkIGVuZC10by1lbmQgdGVzdHMgY2Fubm90IHVzZSB0
aGlzIGZ1bmN0aW9uIHRvIGJvb3RzdHJhcCBtYW51YWxseS4KKyAqIFRoZXkgbXVzdCB1c2Uge0Bs
aW5rIG5nLmRpcmVjdGl2ZTpuZ0FwcCBuZ0FwcH0uCisgKgorICogQW5ndWxhciB3aWxsIGRldGVj
dCBpZiBpdCBoYXMgYmVlbiBsb2FkZWQgaW50byB0aGUgYnJvd3NlciBtb3JlIHRoYW4gb25jZSBh
bmQgb25seSBhbGxvdyB0aGUKKyAqIGZpcnN0IGxvYWRlZCBzY3JpcHQgdG8gYmUgYm9vdHN0cmFw
cGVkIGFuZCB3aWxsIHJlcG9ydCBhIHdhcm5pbmcgdG8gdGhlIGJyb3dzZXIgY29uc29sZSBmb3IK
KyAqIGVhY2ggb2YgdGhlIHN1YnNlcXVlbnQgc2NyaXB0cy4gVGhpcyBwcmV2ZW50cyBzdHJhbmdl
IHJlc3VsdHMgaW4gYXBwbGljYXRpb25zLCB3aGVyZSBvdGhlcndpc2UKKyAqIG11bHRpcGxlIGlu
c3RhbmNlcyBvZiBBbmd1bGFyIHRyeSB0byB3b3JrIG9uIHRoZSBET00uCisgKgorICogYGBgaHRt
bAorICogPCFkb2N0eXBlIGh0bWw+CisgKiA8aHRtbD4KKyAqIDxib2R5PgorICogPGRpdiBuZy1j
b250cm9sbGVyPSJXZWxjb21lQ29udHJvbGxlciI+CisgKiAgIHt7Z3JlZXRpbmd9fQorICogPC9k
aXY+CisgKgorICogPHNjcmlwdCBzcmM9ImFuZ3VsYXIuanMiPjwvc2NyaXB0PgorICogPHNjcmlw
dD4KKyAqICAgdmFyIGFwcCA9IGFuZ3VsYXIubW9kdWxlKCdkZW1vJywgW10pCisgKiAgIC5jb250
cm9sbGVyKCdXZWxjb21lQ29udHJvbGxlcicsIGZ1bmN0aW9uKCRzY29wZSkgeworICogICAgICAg
JHNjb3BlLmdyZWV0aW5nID0gJ1dlbGNvbWUhJzsKKyAqICAgfSk7CisgKiAgIGFuZ3VsYXIuYm9v
dHN0cmFwKGRvY3VtZW50LCBbJ2RlbW8nXSk7CisgKiA8L3NjcmlwdD4KKyAqIDwvYm9keT4KKyAq
IDwvaHRtbD4KKyAqIGBgYAorICoKKyAqIEBwYXJhbSB7RE9NRWxlbWVudH0gZWxlbWVudCBET00g
ZWxlbWVudCB3aGljaCBpcyB0aGUgcm9vdCBvZiBhbmd1bGFyIGFwcGxpY2F0aW9uLgorICogQHBh
cmFtIHtBcnJheTxTdHJpbmd8RnVuY3Rpb258QXJyYXk+PX0gbW9kdWxlcyBhbiBhcnJheSBvZiBt
b2R1bGVzIHRvIGxvYWQgaW50byB0aGUgYXBwbGljYXRpb24uCisgKiAgICAgRWFjaCBpdGVtIGlu
IHRoZSBhcnJheSBzaG91bGQgYmUgdGhlIG5hbWUgb2YgYSBwcmVkZWZpbmVkIG1vZHVsZSBvciBh
IChESSBhbm5vdGF0ZWQpCisgKiAgICAgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGludm9rZWQgYnkg
dGhlIGluamVjdG9yIGFzIGEgYGNvbmZpZ2AgYmxvY2suCisgKiAgICAgU2VlOiB7QGxpbmsgYW5n
dWxhci5tb2R1bGUgbW9kdWxlc30KKyAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIGFuIG9iamVj
dCBmb3IgZGVmaW5pbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgYXBwbGljYXRpb24u
IFRoZQorICogICAgIGZvbGxvd2luZyBrZXlzIGFyZSBzdXBwb3J0ZWQ6CisgKgorICogKiBgc3Ry
aWN0RGlgIC0gZGlzYWJsZSBhdXRvbWF0aWMgZnVuY3Rpb24gYW5ub3RhdGlvbiBmb3IgdGhlIGFw
cGxpY2F0aW9uLiBUaGlzIGlzIG1lYW50IHRvCisgKiAgIGFzc2lzdCBpbiBmaW5kaW5nIGJ1Z3Mg
d2hpY2ggYnJlYWsgbWluaWZpZWQgY29kZS4gRGVmYXVsdHMgdG8gYGZhbHNlYC4KKyAqCisgKiBA
cmV0dXJucyB7YXV0by4kaW5qZWN0b3J9IFJldHVybnMgdGhlIG5ld2x5IGNyZWF0ZWQgaW5qZWN0
b3IgZm9yIHRoaXMgYXBwLgorICovCitmdW5jdGlvbiBib290c3RyYXAoZWxlbWVudCwgbW9kdWxl
cywgY29uZmlnKSB7CisgIGlmICghaXNPYmplY3QoY29uZmlnKSkgY29uZmlnID0ge307CisgIHZh
ciBkZWZhdWx0Q29uZmlnID0geworICAgIHN0cmljdERpOiBmYWxzZQorICB9OworICBjb25maWcg
PSBleHRlbmQoZGVmYXVsdENvbmZpZywgY29uZmlnKTsKKyAgdmFyIGRvQm9vdHN0cmFwID0gZnVu
Y3Rpb24oKSB7CisgICAgZWxlbWVudCA9IGpxTGl0ZShlbGVtZW50KTsKKworICAgIGlmIChlbGVt
ZW50LmluamVjdG9yKCkpIHsKKyAgICAgIHZhciB0YWcgPSAoZWxlbWVudFswXSA9PT0gZG9jdW1l
bnQpID8gJ2RvY3VtZW50JyA6IHN0YXJ0aW5nVGFnKGVsZW1lbnQpOworICAgICAgLy9FbmNvZGUg
YW5nbGUgYnJhY2tldHMgdG8gcHJldmVudCBpbnB1dCBmcm9tIGJlaW5nIHNhbml0aXplZCB0byBl
bXB0eSBzdHJpbmcgIzg2ODMKKyAgICAgIHRocm93IG5nTWluRXJyKAorICAgICAgICAgICdidHN0
cnBkJywKKyAgICAgICAgICAiQXBwIEFscmVhZHkgQm9vdHN0cmFwcGVkIHdpdGggdGhpcyBFbGVt
ZW50ICd7MH0nIiwKKyAgICAgICAgICB0YWcucmVwbGFjZSgvPC8sJyZsdDsnKS5yZXBsYWNlKC8+
LywnJmd0OycpKTsKKyAgICB9CisKKyAgICBtb2R1bGVzID0gbW9kdWxlcyB8fCBbXTsKKyAgICBt
b2R1bGVzLnVuc2hpZnQoWyckcHJvdmlkZScsIGZ1bmN0aW9uKCRwcm92aWRlKSB7CisgICAgICAk
cHJvdmlkZS52YWx1ZSgnJHJvb3RFbGVtZW50JywgZWxlbWVudCk7CisgICAgfV0pOworCisgICAg
aWYgKGNvbmZpZy5kZWJ1Z0luZm9FbmFibGVkKSB7CisgICAgICAvLyBQdXNoaW5nIHNvIHRoYXQg
dGhpcyBvdmVycmlkZXMgYGRlYnVnSW5mb0VuYWJsZWRgIHNldHRpbmcgZGVmaW5lZCBpbiB1c2Vy
J3MgYG1vZHVsZXNgLgorICAgICAgbW9kdWxlcy5wdXNoKFsnJGNvbXBpbGVQcm92aWRlcicsIGZ1
bmN0aW9uKCRjb21waWxlUHJvdmlkZXIpIHsKKyAgICAgICAgJGNvbXBpbGVQcm92aWRlci5kZWJ1
Z0luZm9FbmFibGVkKHRydWUpOworICAgICAgfV0pOworICAgIH0KKworICAgIG1vZHVsZXMudW5z
aGlmdCgnbmcnKTsKKyAgICB2YXIgaW5qZWN0b3IgPSBjcmVhdGVJbmplY3Rvcihtb2R1bGVzLCBj
b25maWcuc3RyaWN0RGkpOworICAgIGluamVjdG9yLmludm9rZShbJyRyb290U2NvcGUnLCAnJHJv
b3RFbGVtZW50JywgJyRjb21waWxlJywgJyRpbmplY3RvcicsCisgICAgICAgZnVuY3Rpb24gYm9v
dHN0cmFwQXBwbHkoc2NvcGUsIGVsZW1lbnQsIGNvbXBpbGUsIGluamVjdG9yKSB7CisgICAgICAg
IHNjb3BlLiRhcHBseShmdW5jdGlvbigpIHsKKyAgICAgICAgICBlbGVtZW50LmRhdGEoJyRpbmpl
Y3RvcicsIGluamVjdG9yKTsKKyAgICAgICAgICBjb21waWxlKGVsZW1lbnQpKHNjb3BlKTsKKyAg
ICAgICAgfSk7CisgICAgICB9XQorICAgICk7CisgICAgcmV0dXJuIGluamVjdG9yOworICB9Owor
CisgIHZhciBOR19FTkFCTEVfREVCVUdfSU5GTyA9IC9eTkdfRU5BQkxFX0RFQlVHX0lORk8hLzsK
KyAgdmFyIE5HX0RFRkVSX0JPT1RTVFJBUCA9IC9eTkdfREVGRVJfQk9PVFNUUkFQIS87CisKKyAg
aWYgKHdpbmRvdyAmJiBOR19FTkFCTEVfREVCVUdfSU5GTy50ZXN0KHdpbmRvdy5uYW1lKSkgewor
ICAgIGNvbmZpZy5kZWJ1Z0luZm9FbmFibGVkID0gdHJ1ZTsKKyAgICB3aW5kb3cubmFtZSA9IHdp
bmRvdy5uYW1lLnJlcGxhY2UoTkdfRU5BQkxFX0RFQlVHX0lORk8sICcnKTsKKyAgfQorCisgIGlm
ICh3aW5kb3cgJiYgIU5HX0RFRkVSX0JPT1RTVFJBUC50ZXN0KHdpbmRvdy5uYW1lKSkgeworICAg
IHJldHVybiBkb0Jvb3RzdHJhcCgpOworICB9CisKKyAgd2luZG93Lm5hbWUgPSB3aW5kb3cubmFt
ZS5yZXBsYWNlKE5HX0RFRkVSX0JPT1RTVFJBUCwgJycpOworICBhbmd1bGFyLnJlc3VtZUJvb3Rz
dHJhcCA9IGZ1bmN0aW9uKGV4dHJhTW9kdWxlcykgeworICAgIGZvckVhY2goZXh0cmFNb2R1bGVz
LCBmdW5jdGlvbihtb2R1bGUpIHsKKyAgICAgIG1vZHVsZXMucHVzaChtb2R1bGUpOworICAgIH0p
OworICAgIHJldHVybiBkb0Jvb3RzdHJhcCgpOworICB9OworCisgIGlmIChpc0Z1bmN0aW9uKGFu
Z3VsYXIucmVzdW1lRGVmZXJyZWRCb290c3RyYXApKSB7CisgICAgYW5ndWxhci5yZXN1bWVEZWZl
cnJlZEJvb3RzdHJhcCgpOworICB9Cit9CisKKy8qKgorICogQG5nZG9jIGZ1bmN0aW9uCisgKiBA
bmFtZSBhbmd1bGFyLnJlbG9hZFdpdGhEZWJ1Z0luZm8KKyAqIEBtb2R1bGUgbmcKKyAqIEBkZXNj
cmlwdGlvbgorICogVXNlIHRoaXMgZnVuY3Rpb24gdG8gcmVsb2FkIHRoZSBjdXJyZW50IGFwcGxp
Y2F0aW9uIHdpdGggZGVidWcgaW5mb3JtYXRpb24gdHVybmVkIG9uLgorICogVGhpcyB0YWtlcyBw
cmVjZWRlbmNlIG92ZXIgYSBjYWxsIHRvIGAkY29tcGlsZVByb3ZpZGVyLmRlYnVnSW5mb0VuYWJs
ZWQoZmFsc2UpYC4KKyAqCisgKiBTZWUge0BsaW5rIG5nLiRjb21waWxlUHJvdmlkZXIjZGVidWdJ
bmZvRW5hYmxlZH0gZm9yIG1vcmUuCisgKi8KK2Z1bmN0aW9uIHJlbG9hZFdpdGhEZWJ1Z0luZm8o
KSB7CisgIHdpbmRvdy5uYW1lID0gJ05HX0VOQUJMRV9ERUJVR19JTkZPIScgKyB3aW5kb3cubmFt
ZTsKKyAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOworfQorCisvKioKKyAqIEBuYW1lIGFuZ3Vs
YXIuZ2V0VGVzdGFiaWxpdHkKKyAqIEBtb2R1bGUgbmcKKyAqIEBkZXNjcmlwdGlvbgorICogR2V0
IHRoZSB0ZXN0YWJpbGl0eSBzZXJ2aWNlIGZvciB0aGUgaW5zdGFuY2Ugb2YgQW5ndWxhciBvbiB0
aGUgZ2l2ZW4KKyAqIGVsZW1lbnQuCisgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGVsZW1lbnQgRE9N
IGVsZW1lbnQgd2hpY2ggaXMgdGhlIHJvb3Qgb2YgYW5ndWxhciBhcHBsaWNhdGlvbi4KKyAqLwor
ZnVuY3Rpb24gZ2V0VGVzdGFiaWxpdHkocm9vdEVsZW1lbnQpIHsKKyAgdmFyIGluamVjdG9yID0g
YW5ndWxhci5lbGVtZW50KHJvb3RFbGVtZW50KS5pbmplY3RvcigpOworICBpZiAoIWluamVjdG9y
KSB7CisgICAgdGhyb3cgbmdNaW5FcnIoJ3Rlc3QnLAorICAgICAgJ25vIGluamVjdG9yIGZvdW5k
IGZvciBlbGVtZW50IGFyZ3VtZW50IHRvIGdldFRlc3RhYmlsaXR5Jyk7CisgIH0KKyAgcmV0dXJu
IGluamVjdG9yLmdldCgnJCR0ZXN0YWJpbGl0eScpOworfQorCit2YXIgU05BS0VfQ0FTRV9SRUdF
WFAgPSAvW0EtWl0vZzsKK2Z1bmN0aW9uIHNuYWtlX2Nhc2UobmFtZSwgc2VwYXJhdG9yKSB7Cisg
IHNlcGFyYXRvciA9IHNlcGFyYXRvciB8fCAnXyc7CisgIHJldHVybiBuYW1lLnJlcGxhY2UoU05B
S0VfQ0FTRV9SRUdFWFAsIGZ1bmN0aW9uKGxldHRlciwgcG9zKSB7CisgICAgcmV0dXJuIChwb3Mg
PyBzZXBhcmF0b3IgOiAnJykgKyBsZXR0ZXIudG9Mb3dlckNhc2UoKTsKKyAgfSk7Cit9CisKK3Zh
ciBiaW5kSlF1ZXJ5RmlyZWQgPSBmYWxzZTsKK3ZhciBza2lwRGVzdHJveU9uTmV4dEpRdWVyeUNs
ZWFuRGF0YTsKK2Z1bmN0aW9uIGJpbmRKUXVlcnkoKSB7CisgIHZhciBvcmlnaW5hbENsZWFuRGF0
YTsKKworICBpZiAoYmluZEpRdWVyeUZpcmVkKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgLy8g
YmluZCB0byBqUXVlcnkgaWYgcHJlc2VudDsKKyAgdmFyIGpxTmFtZSA9IGpxKCk7CisgIGpRdWVy
eSA9IHdpbmRvdy5qUXVlcnk7IC8vIHVzZSBkZWZhdWx0IGpRdWVyeS4KKyAgaWYgKGlzRGVmaW5l
ZChqcU5hbWUpKSB7IC8vIGBuZ0pxYCBwcmVzZW50CisgICAgalF1ZXJ5ID0ganFOYW1lID09PSBu
dWxsID8gdW5kZWZpbmVkIDogd2luZG93W2pxTmFtZV07IC8vIGlmIGVtcHR5OyB1c2UganFMaXRl
LiBpZiBub3QgZW1wdHksIHVzZSBqUXVlcnkgc3BlY2lmaWVkIGJ5IGBuZ0pxYC4KKyAgfQorCisg
IC8vIFVzZSBqUXVlcnkgaWYgaXQgZXhpc3RzIHdpdGggcHJvcGVyIGZ1bmN0aW9uYWxpdHksIG90
aGVyd2lzZSBkZWZhdWx0IHRvIHVzLgorICAvLyBBbmd1bGFyIDEuMisgcmVxdWlyZXMgalF1ZXJ5
IDEuNysgZm9yIG9uKCkvb2ZmKCkgc3VwcG9ydC4KKyAgLy8gQW5ndWxhciAxLjMrIHRlY2huaWNh
bGx5IHJlcXVpcmVzIGF0IGxlYXN0IGpRdWVyeSAyLjErIGJ1dCBpdCBtYXkgd29yayB3aXRoIG9s
ZGVyCisgIC8vIHZlcnNpb25zLiBJdCB3aWxsIG5vdCB3b3JrIGZvciBzdXJlIHdpdGggalF1ZXJ5
IDwxLjcsIHRob3VnaC4KKyAgaWYgKGpRdWVyeSAmJiBqUXVlcnkuZm4ub24pIHsKKyAgICBqcUxp
dGUgPSBqUXVlcnk7CisgICAgZXh0ZW5kKGpRdWVyeS5mbiwgeworICAgICAgc2NvcGU6IEpRTGl0
ZVByb3RvdHlwZS5zY29wZSwKKyAgICAgIGlzb2xhdGVTY29wZTogSlFMaXRlUHJvdG90eXBlLmlz
b2xhdGVTY29wZSwKKyAgICAgIGNvbnRyb2xsZXI6IEpRTGl0ZVByb3RvdHlwZS5jb250cm9sbGVy
LAorICAgICAgaW5qZWN0b3I6IEpRTGl0ZVByb3RvdHlwZS5pbmplY3RvciwKKyAgICAgIGluaGVy
aXRlZERhdGE6IEpRTGl0ZVByb3RvdHlwZS5pbmhlcml0ZWREYXRhCisgICAgfSk7CisKKyAgICAv
LyBBbGwgbm9kZXMgcmVtb3ZlZCBmcm9tIHRoZSBET00gdmlhIHZhcmlvdXMgalF1ZXJ5IEFQSXMg
bGlrZSAucmVtb3ZlKCkKKyAgICAvLyBhcmUgcGFzc2VkIHRocm91Z2ggalF1ZXJ5LmNsZWFuRGF0
YS4gTW9ua2V5LXBhdGNoIHRoaXMgbWV0aG9kIHRvIGZpcmUKKyAgICAvLyB0aGUgJGRlc3Ryb3kg
ZXZlbnQgb24gYWxsIHJlbW92ZWQgbm9kZXMuCisgICAgb3JpZ2luYWxDbGVhbkRhdGEgPSBqUXVl
cnkuY2xlYW5EYXRhOworICAgIGpRdWVyeS5jbGVhbkRhdGEgPSBmdW5jdGlvbihlbGVtcykgewor
ICAgICAgdmFyIGV2ZW50czsKKyAgICAgIGlmICghc2tpcERlc3Ryb3lPbk5leHRKUXVlcnlDbGVh
bkRhdGEpIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGVsZW07IChlbGVtID0gZWxlbXNbaV0p
ICE9IG51bGw7IGkrKykgeworICAgICAgICAgIGV2ZW50cyA9IGpRdWVyeS5fZGF0YShlbGVtLCAi
ZXZlbnRzIik7CisgICAgICAgICAgaWYgKGV2ZW50cyAmJiBldmVudHMuJGRlc3Ryb3kpIHsKKyAg
ICAgICAgICAgIGpRdWVyeShlbGVtKS50cmlnZ2VySGFuZGxlcignJGRlc3Ryb3knKTsKKyAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHNraXBEZXN0cm95T25O
ZXh0SlF1ZXJ5Q2xlYW5EYXRhID0gZmFsc2U7CisgICAgICB9CisgICAgICBvcmlnaW5hbENsZWFu
RGF0YShlbGVtcyk7CisgICAgfTsKKyAgfSBlbHNlIHsKKyAgICBqcUxpdGUgPSBKUUxpdGU7Cisg
IH0KKworICBhbmd1bGFyLmVsZW1lbnQgPSBqcUxpdGU7CisKKyAgLy8gUHJldmVudCBkb3VibGUt
cHJveHlpbmcuCisgIGJpbmRKUXVlcnlGaXJlZCA9IHRydWU7Cit9CisKKy8qKgorICogdGhyb3cg
ZXJyb3IgaWYgdGhlIGFyZ3VtZW50IGlzIGZhbHN5LgorICovCitmdW5jdGlvbiBhc3NlcnRBcmco
YXJnLCBuYW1lLCByZWFzb24pIHsKKyAgaWYgKCFhcmcpIHsKKyAgICB0aHJvdyBuZ01pbkVycign
YXJlcScsICJBcmd1bWVudCAnezB9JyBpcyB7MX0iLCAobmFtZSB8fCAnPycpLCAocmVhc29uIHx8
ICJyZXF1aXJlZCIpKTsKKyAgfQorICByZXR1cm4gYXJnOworfQorCitmdW5jdGlvbiBhc3NlcnRB
cmdGbihhcmcsIG5hbWUsIGFjY2VwdEFycmF5QW5ub3RhdGlvbikgeworICBpZiAoYWNjZXB0QXJy
YXlBbm5vdGF0aW9uICYmIGlzQXJyYXkoYXJnKSkgeworICAgICAgYXJnID0gYXJnW2FyZy5sZW5n
dGggLSAxXTsKKyAgfQorCisgIGFzc2VydEFyZyhpc0Z1bmN0aW9uKGFyZyksIG5hbWUsICdub3Qg
YSBmdW5jdGlvbiwgZ290ICcgKworICAgICAgKGFyZyAmJiB0eXBlb2YgYXJnID09PSAnb2JqZWN0
JyA/IGFyZy5jb25zdHJ1Y3Rvci5uYW1lIHx8ICdPYmplY3QnIDogdHlwZW9mIGFyZykpOworICBy
ZXR1cm4gYXJnOworfQorCisvKioKKyAqIHRocm93IGVycm9yIGlmIHRoZSBuYW1lIGdpdmVuIGlz
IGhhc093blByb3BlcnR5CisgKiBAcGFyYW0gIHtTdHJpbmd9IG5hbWUgICAgdGhlIG5hbWUgdG8g
dGVzdAorICogQHBhcmFtICB7U3RyaW5nfSBjb250ZXh0IHRoZSBjb250ZXh0IGluIHdoaWNoIHRo
ZSBuYW1lIGlzIHVzZWQsIHN1Y2ggYXMgbW9kdWxlIG9yIGRpcmVjdGl2ZQorICovCitmdW5jdGlv
biBhc3NlcnROb3RIYXNPd25Qcm9wZXJ0eShuYW1lLCBjb250ZXh0KSB7CisgIGlmIChuYW1lID09
PSAnaGFzT3duUHJvcGVydHknKSB7CisgICAgdGhyb3cgbmdNaW5FcnIoJ2JhZG5hbWUnLCAiaGFz
T3duUHJvcGVydHkgaXMgbm90IGEgdmFsaWQgezB9IG5hbWUiLCBjb250ZXh0KTsKKyAgfQorfQor
CisvKioKKyAqIFJldHVybiB0aGUgdmFsdWUgYWNjZXNzaWJsZSBmcm9tIHRoZSBvYmplY3QgYnkg
cGF0aC4gQW55IHVuZGVmaW5lZCB0cmF2ZXJzYWxzIGFyZSBpZ25vcmVkCisgKiBAcGFyYW0ge09i
amVjdH0gb2JqIHN0YXJ0aW5nIG9iamVjdAorICogQHBhcmFtIHtTdHJpbmd9IHBhdGggcGF0aCB0
byB0cmF2ZXJzZQorICogQHBhcmFtIHtib29sZWFufSBbYmluZEZuVG9TY29wZT10cnVlXQorICog
QHJldHVybnMge09iamVjdH0gdmFsdWUgYXMgYWNjZXNzaWJsZSBieSBwYXRoCisgKi8KKy8vVE9E
TyhtaXNrbyk6IHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgcmVtb3ZlZAorZnVuY3Rpb24gZ2V0
dGVyKG9iaiwgcGF0aCwgYmluZEZuVG9TY29wZSkgeworICBpZiAoIXBhdGgpIHJldHVybiBvYmo7
CisgIHZhciBrZXlzID0gcGF0aC5zcGxpdCgnLicpOworICB2YXIga2V5OworICB2YXIgbGFzdElu
c3RhbmNlID0gb2JqOworICB2YXIgbGVuID0ga2V5cy5sZW5ndGg7CisKKyAgZm9yICh2YXIgaSA9
IDA7IGkgPCBsZW47IGkrKykgeworICAgIGtleSA9IGtleXNbaV07CisgICAgaWYgKG9iaikgewor
ICAgICAgb2JqID0gKGxhc3RJbnN0YW5jZSA9IG9iailba2V5XTsKKyAgICB9CisgIH0KKyAgaWYg
KCFiaW5kRm5Ub1Njb3BlICYmIGlzRnVuY3Rpb24ob2JqKSkgeworICAgIHJldHVybiBiaW5kKGxh
c3RJbnN0YW5jZSwgb2JqKTsKKyAgfQorICByZXR1cm4gb2JqOworfQorCisvKioKKyAqIFJldHVy
biB0aGUgRE9NIHNpYmxpbmdzIGJldHdlZW4gdGhlIGZpcnN0IGFuZCBsYXN0IG5vZGUgaW4gdGhl
IGdpdmVuIGFycmF5LgorICogQHBhcmFtIHtBcnJheX0gYXJyYXkgbGlrZSBvYmplY3QKKyAqIEBy
ZXR1cm5zIHtqcUxpdGV9IGpxTGl0ZSBjb2xsZWN0aW9uIGNvbnRhaW5pbmcgdGhlIG5vZGVzCisg
Ki8KK2Z1bmN0aW9uIGdldEJsb2NrTm9kZXMobm9kZXMpIHsKKyAgLy8gVE9ETyhwZXJmKToganVz
dCBjaGVjayBpZiBhbGwgaXRlbXMgaW4gYG5vZGVzYCBhcmUgc2libGluZ3MgYW5kIGlmIHRoZXkg
YXJlIHJldHVybiB0aGUgb3JpZ2luYWwKKyAgLy8gICAgICAgICAgICAgY29sbGVjdGlvbiwgb3Ro
ZXJ3aXNlIHVwZGF0ZSB0aGUgb3JpZ2luYWwgY29sbGVjdGlvbi4KKyAgdmFyIG5vZGUgPSBub2Rl
c1swXTsKKyAgdmFyIGVuZE5vZGUgPSBub2Rlc1tub2Rlcy5sZW5ndGggLSAxXTsKKyAgdmFyIGJs
b2NrTm9kZXMgPSBbbm9kZV07CisKKyAgZG8geworICAgIG5vZGUgPSBub2RlLm5leHRTaWJsaW5n
OworICAgIGlmICghbm9kZSkgYnJlYWs7CisgICAgYmxvY2tOb2Rlcy5wdXNoKG5vZGUpOworICB9
IHdoaWxlIChub2RlICE9PSBlbmROb2RlKTsKKworICByZXR1cm4ganFMaXRlKGJsb2NrTm9kZXMp
OworfQorCisKKy8qKgorICogQ3JlYXRlcyBhIG5ldyBvYmplY3Qgd2l0aG91dCBhIHByb3RvdHlw
ZS4gVGhpcyBvYmplY3QgaXMgdXNlZnVsIGZvciBsb29rdXAgd2l0aG91dCBoYXZpbmcgdG8KKyAq
IGd1YXJkIGFnYWluc3QgcHJvdG90eXBpY2FsbHkgaW5oZXJpdGVkIHByb3BlcnRpZXMgdmlhIGhh
c093blByb3BlcnR5LgorICoKKyAqIFJlbGF0ZWQgbWljcm8tYmVuY2htYXJrczoKKyAqIC0gaHR0
cDovL2pzcGVyZi5jb20vb2JqZWN0LWNyZWF0ZTIKKyAqIC0gaHR0cDovL2pzcGVyZi5jb20vcHJv
dG8tbWFwLWxvb2t1cC8yCisgKiAtIGh0dHA6Ly9qc3BlcmYuY29tL2Zvci1pbi12cy1vYmplY3Qt
a2V5czIKKyAqCisgKiBAcmV0dXJucyB7T2JqZWN0fQorICovCitmdW5jdGlvbiBjcmVhdGVNYXAo
KSB7CisgIHJldHVybiBPYmplY3QuY3JlYXRlKG51bGwpOworfQorCit2YXIgTk9ERV9UWVBFX0VM
RU1FTlQgPSAxOwordmFyIE5PREVfVFlQRV9BVFRSSUJVVEUgPSAyOwordmFyIE5PREVfVFlQRV9U
RVhUID0gMzsKK3ZhciBOT0RFX1RZUEVfQ09NTUVOVCA9IDg7Cit2YXIgTk9ERV9UWVBFX0RPQ1VN
RU5UID0gOTsKK3ZhciBOT0RFX1RZUEVfRE9DVU1FTlRfRlJBR01FTlQgPSAxMTsKKworLyoqCisg
KiBAbmdkb2MgdHlwZQorICogQG5hbWUgYW5ndWxhci5Nb2R1bGUKKyAqIEBtb2R1bGUgbmcKKyAq
IEBkZXNjcmlwdGlvbgorICoKKyAqIEludGVyZmFjZSBmb3IgY29uZmlndXJpbmcgYW5ndWxhciB7
QGxpbmsgYW5ndWxhci5tb2R1bGUgbW9kdWxlc30uCisgKi8KKworZnVuY3Rpb24gc2V0dXBNb2R1
bGVMb2FkZXIod2luZG93KSB7CisKKyAgdmFyICRpbmplY3Rvck1pbkVyciA9IG1pbkVycignJGlu
amVjdG9yJyk7CisgIHZhciBuZ01pbkVyciA9IG1pbkVycignbmcnKTsKKworICBmdW5jdGlvbiBl
bnN1cmUob2JqLCBuYW1lLCBmYWN0b3J5KSB7CisgICAgcmV0dXJuIG9ialtuYW1lXSB8fCAob2Jq
W25hbWVdID0gZmFjdG9yeSgpKTsKKyAgfQorCisgIHZhciBhbmd1bGFyID0gZW5zdXJlKHdpbmRv
dywgJ2FuZ3VsYXInLCBPYmplY3QpOworCisgIC8vIFdlIG5lZWQgdG8gZXhwb3NlIGBhbmd1bGFy
LiQkbWluRXJyYCB0byBtb2R1bGVzIHN1Y2ggYXMgYG5nUmVzb3VyY2VgIHRoYXQgcmVmZXJlbmNl
IGl0IGR1cmluZyBib290c3RyYXAKKyAgYW5ndWxhci4kJG1pbkVyciA9IGFuZ3VsYXIuJCRtaW5F
cnIgfHwgbWluRXJyOworCisgIHJldHVybiBlbnN1cmUoYW5ndWxhciwgJ21vZHVsZScsIGZ1bmN0
aW9uKCkgeworICAgIC8qKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsIGFuZ3VsYXIuTW9kdWxlPn0g
Ki8KKyAgICB2YXIgbW9kdWxlcyA9IHt9OworCisgICAgLyoqCisgICAgICogQG5nZG9jIGZ1bmN0
aW9uCisgICAgICogQG5hbWUgYW5ndWxhci5tb2R1bGUKKyAgICAgKiBAbW9kdWxlIG5nCisgICAg
ICogQGRlc2NyaXB0aW9uCisgICAgICoKKyAgICAgKiBUaGUgYGFuZ3VsYXIubW9kdWxlYCBpcyBh
IGdsb2JhbCBwbGFjZSBmb3IgY3JlYXRpbmcsIHJlZ2lzdGVyaW5nIGFuZCByZXRyaWV2aW5nIEFu
Z3VsYXIKKyAgICAgKiBtb2R1bGVzLgorICAgICAqIEFsbCBtb2R1bGVzIChhbmd1bGFyIGNvcmUg
b3IgM3JkIHBhcnR5KSB0aGF0IHNob3VsZCBiZSBhdmFpbGFibGUgdG8gYW4gYXBwbGljYXRpb24g
bXVzdCBiZQorICAgICAqIHJlZ2lzdGVyZWQgdXNpbmcgdGhpcyBtZWNoYW5pc20uCisgICAgICoK
KyAgICAgKiBXaGVuIHBhc3NlZCB0d28gb3IgbW9yZSBhcmd1bWVudHMsIGEgbmV3IG1vZHVsZSBp
cyBjcmVhdGVkLiAgSWYgcGFzc2VkIG9ubHkgb25lIGFyZ3VtZW50LCBhbgorICAgICAqIGV4aXN0
aW5nIG1vZHVsZSAodGhlIG5hbWUgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBgbW9k
dWxlYCkgaXMgcmV0cmlldmVkLgorICAgICAqCisgICAgICoKKyAgICAgKiAjIE1vZHVsZQorICAg
ICAqCisgICAgICogQSBtb2R1bGUgaXMgYSBjb2xsZWN0aW9uIG9mIHNlcnZpY2VzLCBkaXJlY3Rp
dmVzLCBjb250cm9sbGVycywgZmlsdGVycywgYW5kIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24u
CisgICAgICogYGFuZ3VsYXIubW9kdWxlYCBpcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUge0BsaW5r
IGF1dG8uJGluamVjdG9yICRpbmplY3Rvcn0uCisgICAgICoKKyAgICAgKiBgYGBqcworICAgICAq
IC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUKKyAgICAgKiB2YXIgbXlNb2R1bGUgPSBhbmd1bGFyLm1v
ZHVsZSgnbXlNb2R1bGUnLCBbXSk7CisgICAgICoKKyAgICAgKiAvLyByZWdpc3RlciBhIG5ldyBz
ZXJ2aWNlCisgICAgICogbXlNb2R1bGUudmFsdWUoJ2FwcE5hbWUnLCAnTXlDb29sQXBwJyk7Cisg
ICAgICoKKyAgICAgKiAvLyBjb25maWd1cmUgZXhpc3Rpbmcgc2VydmljZXMgaW5zaWRlIGluaXRp
YWxpemF0aW9uIGJsb2Nrcy4KKyAgICAgKiBteU1vZHVsZS5jb25maWcoWyckbG9jYXRpb25Qcm92
aWRlcicsIGZ1bmN0aW9uKCRsb2NhdGlvblByb3ZpZGVyKSB7CisgICAgICogICAvLyBDb25maWd1
cmUgZXhpc3RpbmcgcHJvdmlkZXJzCisgICAgICogICAkbG9jYXRpb25Qcm92aWRlci5oYXNoUHJl
Zml4KCchJyk7CisgICAgICogfV0pOworICAgICAqIGBgYAorICAgICAqCisgICAgICogVGhlbiB5
b3UgY2FuIGNyZWF0ZSBhbiBpbmplY3RvciBhbmQgbG9hZCB5b3VyIG1vZHVsZXMgbGlrZSB0aGlz
OgorICAgICAqCisgICAgICogYGBganMKKyAgICAgKiB2YXIgaW5qZWN0b3IgPSBhbmd1bGFyLmlu
amVjdG9yKFsnbmcnLCAnbXlNb2R1bGUnXSkKKyAgICAgKiBgYGAKKyAgICAgKgorICAgICAqIEhv
d2V2ZXIgaXQncyBtb3JlIGxpa2VseSB0aGF0IHlvdSdsbCBqdXN0IHVzZQorICAgICAqIHtAbGlu
ayBuZy5kaXJlY3RpdmU6bmdBcHAgbmdBcHB9IG9yCisgICAgICoge0BsaW5rIGFuZ3VsYXIuYm9v
dHN0cmFwfSB0byBzaW1wbGlmeSB0aGlzIHByb2Nlc3MgZm9yIHlvdS4KKyAgICAgKgorICAgICAq
IEBwYXJhbSB7IXN0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRvIGNyZWF0ZSBv
ciByZXRyaWV2ZS4KKyAgICAgKiBAcGFyYW0geyFBcnJheS48c3RyaW5nPj19IHJlcXVpcmVzIElm
IHNwZWNpZmllZCB0aGVuIG5ldyBtb2R1bGUgaXMgYmVpbmcgY3JlYXRlZC4gSWYKKyAgICAgKiAg
ICAgICAgdW5zcGVjaWZpZWQgdGhlbiB0aGUgbW9kdWxlIGlzIGJlaW5nIHJldHJpZXZlZCBmb3Ig
ZnVydGhlciBjb25maWd1cmF0aW9uLgorICAgICAqIEBwYXJhbSB7RnVuY3Rpb249fSBjb25maWdG
biBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgbW9kdWxlLiBTYW1lIGFz
CisgICAgICogICAgICAgIHtAbGluayBhbmd1bGFyLk1vZHVsZSNjb25maWcgTW9kdWxlI2NvbmZp
ZygpfS4KKyAgICAgKiBAcmV0dXJucyB7bW9kdWxlfSBuZXcgbW9kdWxlIHdpdGggdGhlIHtAbGlu
ayBhbmd1bGFyLk1vZHVsZX0gYXBpLgorICAgICAqLworICAgIHJldHVybiBmdW5jdGlvbiBtb2R1
bGUobmFtZSwgcmVxdWlyZXMsIGNvbmZpZ0ZuKSB7CisgICAgICB2YXIgYXNzZXJ0Tm90SGFzT3du
UHJvcGVydHkgPSBmdW5jdGlvbihuYW1lLCBjb250ZXh0KSB7CisgICAgICAgIGlmIChuYW1lID09
PSAnaGFzT3duUHJvcGVydHknKSB7CisgICAgICAgICAgdGhyb3cgbmdNaW5FcnIoJ2JhZG5hbWUn
LCAnaGFzT3duUHJvcGVydHkgaXMgbm90IGEgdmFsaWQgezB9IG5hbWUnLCBjb250ZXh0KTsKKyAg
ICAgICAgfQorICAgICAgfTsKKworICAgICAgYXNzZXJ0Tm90SGFzT3duUHJvcGVydHkobmFtZSwg
J21vZHVsZScpOworICAgICAgaWYgKHJlcXVpcmVzICYmIG1vZHVsZXMuaGFzT3duUHJvcGVydHko
bmFtZSkpIHsKKyAgICAgICAgbW9kdWxlc1tuYW1lXSA9IG51bGw7CisgICAgICB9CisgICAgICBy
ZXR1cm4gZW5zdXJlKG1vZHVsZXMsIG5hbWUsIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoIXJl
cXVpcmVzKSB7CisgICAgICAgICAgdGhyb3cgJGluamVjdG9yTWluRXJyKCdub21vZCcsICJNb2R1
bGUgJ3swfScgaXMgbm90IGF2YWlsYWJsZSEgWW91IGVpdGhlciBtaXNzcGVsbGVkICIgKworICAg
ICAgICAgICAgICJ0aGUgbW9kdWxlIG5hbWUgb3IgZm9yZ290IHRvIGxvYWQgaXQuIElmIHJlZ2lz
dGVyaW5nIGEgbW9kdWxlIGVuc3VyZSB0aGF0IHlvdSAiICsKKyAgICAgICAgICAgICAic3BlY2lm
eSB0aGUgZGVwZW5kZW5jaWVzIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQuIiwgbmFtZSk7CisgICAg
ICAgIH0KKworICAgICAgICAvKiogQHR5cGUgeyFBcnJheS48QXJyYXkuPCo+Pn0gKi8KKyAgICAg
ICAgdmFyIGludm9rZVF1ZXVlID0gW107CisKKyAgICAgICAgLyoqIEB0eXBlIHshQXJyYXkuPEZ1
bmN0aW9uPn0gKi8KKyAgICAgICAgdmFyIGNvbmZpZ0Jsb2NrcyA9IFtdOworCisgICAgICAgIC8q
KiBAdHlwZSB7IUFycmF5LjxGdW5jdGlvbj59ICovCisgICAgICAgIHZhciBydW5CbG9ja3MgPSBb
XTsKKworICAgICAgICB2YXIgY29uZmlnID0gaW52b2tlTGF0ZXIoJyRpbmplY3RvcicsICdpbnZv
a2UnLCAncHVzaCcsIGNvbmZpZ0Jsb2Nrcyk7CisKKyAgICAgICAgLyoqIEB0eXBlIHthbmd1bGFy
Lk1vZHVsZX0gKi8KKyAgICAgICAgdmFyIG1vZHVsZUluc3RhbmNlID0geworICAgICAgICAgIC8v
IFByaXZhdGUgc3RhdGUKKyAgICAgICAgICBfaW52b2tlUXVldWU6IGludm9rZVF1ZXVlLAorICAg
ICAgICAgIF9jb25maWdCbG9ja3M6IGNvbmZpZ0Jsb2NrcywKKyAgICAgICAgICBfcnVuQmxvY2tz
OiBydW5CbG9ja3MsCisKKyAgICAgICAgICAvKioKKyAgICAgICAgICAgKiBAbmdkb2MgcHJvcGVy
dHkKKyAgICAgICAgICAgKiBAbmFtZSBhbmd1bGFyLk1vZHVsZSNyZXF1aXJlcworICAgICAgICAg
ICAqIEBtb2R1bGUgbmcKKyAgICAgICAgICAgKgorICAgICAgICAgICAqIEBkZXNjcmlwdGlvbgor
ICAgICAgICAgICAqIEhvbGRzIHRoZSBsaXN0IG9mIG1vZHVsZXMgd2hpY2ggdGhlIGluamVjdG9y
IHdpbGwgbG9hZCBiZWZvcmUgdGhlIGN1cnJlbnQgbW9kdWxlIGlzCisgICAgICAgICAgICogbG9h
ZGVkLgorICAgICAgICAgICAqLworICAgICAgICAgIHJlcXVpcmVzOiByZXF1aXJlcywKKworICAg
ICAgICAgIC8qKgorICAgICAgICAgICAqIEBuZ2RvYyBwcm9wZXJ0eQorICAgICAgICAgICAqIEBu
YW1lIGFuZ3VsYXIuTW9kdWxlI25hbWUKKyAgICAgICAgICAgKiBAbW9kdWxlIG5nCisgICAgICAg
ICAgICoKKyAgICAgICAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgICAgICAgKiBOYW1lIG9mIHRo
ZSBtb2R1bGUuCisgICAgICAgICAgICovCisgICAgICAgICAgbmFtZTogbmFtZSwKKworCisgICAg
ICAgICAgLyoqCisgICAgICAgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAgICAgICAqIEBuYW1l
IGFuZ3VsYXIuTW9kdWxlI3Byb3ZpZGVyCisgICAgICAgICAgICogQG1vZHVsZSBuZworICAgICAg
ICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIHNlcnZpY2UgbmFtZQorICAgICAgICAgICAqIEBw
YXJhbSB7RnVuY3Rpb259IHByb3ZpZGVyVHlwZSBDb25zdHJ1Y3Rpb24gZnVuY3Rpb24gZm9yIGNy
ZWF0aW5nIG5ldyBpbnN0YW5jZSBvZiB0aGUKKyAgICAgICAgICAgKiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VydmljZS4KKyAgICAgICAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAg
ICAgICAgKiBTZWUge0BsaW5rIGF1dG8uJHByb3ZpZGUjcHJvdmlkZXIgJHByb3ZpZGUucHJvdmlk
ZXIoKX0uCisgICAgICAgICAgICovCisgICAgICAgICAgcHJvdmlkZXI6IGludm9rZUxhdGVyQW5k
U2V0TW9kdWxlTmFtZSgnJHByb3ZpZGUnLCAncHJvdmlkZXInKSwKKworICAgICAgICAgIC8qKgor
ICAgICAgICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgICAgICAgKiBAbmFtZSBhbmd1bGFyLk1v
ZHVsZSNmYWN0b3J5CisgICAgICAgICAgICogQG1vZHVsZSBuZworICAgICAgICAgICAqIEBwYXJh
bSB7c3RyaW5nfSBuYW1lIHNlcnZpY2UgbmFtZQorICAgICAgICAgICAqIEBwYXJhbSB7RnVuY3Rp
b259IHByb3ZpZGVyRnVuY3Rpb24gRnVuY3Rpb24gZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZSBv
ZiB0aGUgc2VydmljZS4KKyAgICAgICAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgICAgICAgKiBT
ZWUge0BsaW5rIGF1dG8uJHByb3ZpZGUjZmFjdG9yeSAkcHJvdmlkZS5mYWN0b3J5KCl9LgorICAg
ICAgICAgICAqLworICAgICAgICAgIGZhY3Rvcnk6IGludm9rZUxhdGVyQW5kU2V0TW9kdWxlTmFt
ZSgnJHByb3ZpZGUnLCAnZmFjdG9yeScpLAorCisgICAgICAgICAgLyoqCisgICAgICAgICAgICog
QG5nZG9jIG1ldGhvZAorICAgICAgICAgICAqIEBuYW1lIGFuZ3VsYXIuTW9kdWxlI3NlcnZpY2UK
KyAgICAgICAgICAgKiBAbW9kdWxlIG5nCisgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5h
bWUgc2VydmljZSBuYW1lCisgICAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29uc3RydWN0
b3IgQSBjb25zdHJ1Y3RvciBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgaW5zdGFudGlhdGVkLgorICAg
ICAgICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAgICAgICAqIFNlZSB7QGxpbmsgYXV0by4kcHJv
dmlkZSNzZXJ2aWNlICRwcm92aWRlLnNlcnZpY2UoKX0uCisgICAgICAgICAgICovCisgICAgICAg
ICAgc2VydmljZTogaW52b2tlTGF0ZXJBbmRTZXRNb2R1bGVOYW1lKCckcHJvdmlkZScsICdzZXJ2
aWNlJyksCisKKyAgICAgICAgICAvKioKKyAgICAgICAgICAgKiBAbmdkb2MgbWV0aG9kCisgICAg
ICAgICAgICogQG5hbWUgYW5ndWxhci5Nb2R1bGUjdmFsdWUKKyAgICAgICAgICAgKiBAbW9kdWxl
IG5nCisgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgc2VydmljZSBuYW1lCisgICAg
ICAgICAgICogQHBhcmFtIHsqfSBvYmplY3QgU2VydmljZSBpbnN0YW5jZSBvYmplY3QuCisgICAg
ICAgICAgICogQGRlc2NyaXB0aW9uCisgICAgICAgICAgICogU2VlIHtAbGluayBhdXRvLiRwcm92
aWRlI3ZhbHVlICRwcm92aWRlLnZhbHVlKCl9LgorICAgICAgICAgICAqLworICAgICAgICAgIHZh
bHVlOiBpbnZva2VMYXRlcignJHByb3ZpZGUnLCAndmFsdWUnKSwKKworICAgICAgICAgIC8qKgor
ICAgICAgICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgICAgICAgKiBAbmFtZSBhbmd1bGFyLk1v
ZHVsZSNjb25zdGFudAorICAgICAgICAgICAqIEBtb2R1bGUgbmcKKyAgICAgICAgICAgKiBAcGFy
YW0ge3N0cmluZ30gbmFtZSBjb25zdGFudCBuYW1lCisgICAgICAgICAgICogQHBhcmFtIHsqfSBv
YmplY3QgQ29uc3RhbnQgdmFsdWUuCisgICAgICAgICAgICogQGRlc2NyaXB0aW9uCisgICAgICAg
ICAgICogQmVjYXVzZSB0aGUgY29uc3RhbnQgYXJlIGZpeGVkLCB0aGV5IGdldCBhcHBsaWVkIGJl
Zm9yZSBvdGhlciBwcm92aWRlIG1ldGhvZHMuCisgICAgICAgICAgICogU2VlIHtAbGluayBhdXRv
LiRwcm92aWRlI2NvbnN0YW50ICRwcm92aWRlLmNvbnN0YW50KCl9LgorICAgICAgICAgICAqLwor
ICAgICAgICAgIGNvbnN0YW50OiBpbnZva2VMYXRlcignJHByb3ZpZGUnLCAnY29uc3RhbnQnLCAn
dW5zaGlmdCcpLAorCisgICAgICAgICAgIC8qKgorICAgICAgICAgICAqIEBuZ2RvYyBtZXRob2QK
KyAgICAgICAgICAgKiBAbmFtZSBhbmd1bGFyLk1vZHVsZSNkZWNvcmF0b3IKKyAgICAgICAgICAg
KiBAbW9kdWxlIG5nCisgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRo
ZSBzZXJ2aWNlIHRvIGRlY29yYXRlLgorICAgICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFRo
aXMgZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIHdoZW4gdGhlIHNlcnZpY2UgbmVlZHMgdG8gYmUK
KyAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbnRp
YXRlZCBhbmQgc2hvdWxkIHJldHVybiB0aGUgZGVjb3JhdGVkIHNlcnZpY2UgaW5zdGFuY2UuCisg
ICAgICAgICAgICogQGRlc2NyaXB0aW9uCisgICAgICAgICAgICogU2VlIHtAbGluayBhdXRvLiRw
cm92aWRlI2RlY29yYXRvciAkcHJvdmlkZS5kZWNvcmF0b3IoKX0uCisgICAgICAgICAgICovCisg
ICAgICAgICAgZGVjb3JhdG9yOiBpbnZva2VMYXRlckFuZFNldE1vZHVsZU5hbWUoJyRwcm92aWRl
JywgJ2RlY29yYXRvcicpLAorCisgICAgICAgICAgLyoqCisgICAgICAgICAgICogQG5nZG9jIG1l
dGhvZAorICAgICAgICAgICAqIEBuYW1lIGFuZ3VsYXIuTW9kdWxlI2FuaW1hdGlvbgorICAgICAg
ICAgICAqIEBtb2R1bGUgbmcKKyAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBhbmlt
YXRpb24gbmFtZQorICAgICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGFuaW1hdGlvbkZhY3Rv
cnkgRmFjdG9yeSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlIG9mIGFuCisgICAg
ICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24uCisg
ICAgICAgICAgICogQGRlc2NyaXB0aW9uCisgICAgICAgICAgICoKKyAgICAgICAgICAgKiAqKk5P
VEUqKjogYW5pbWF0aW9ucyB0YWtlIGVmZmVjdCBvbmx5IGlmIHRoZSAqKm5nQW5pbWF0ZSoqIG1v
ZHVsZSBpcyBsb2FkZWQuCisgICAgICAgICAgICoKKyAgICAgICAgICAgKgorICAgICAgICAgICAq
IERlZmluZXMgYW4gYW5pbWF0aW9uIGhvb2sgdGhhdCBjYW4gYmUgbGF0ZXIgdXNlZCB3aXRoCisg
ICAgICAgICAgICoge0BsaW5rICRhbmltYXRlICRhbmltYXRlfSBzZXJ2aWNlIGFuZCBkaXJlY3Rp
dmVzIHRoYXQgdXNlIHRoaXMgc2VydmljZS4KKyAgICAgICAgICAgKgorICAgICAgICAgICAqIGBg
YGpzCisgICAgICAgICAgICogbW9kdWxlLmFuaW1hdGlvbignLmFuaW1hdGlvbi1uYW1lJywgZnVu
Y3Rpb24oJGluamVjdDEsICRpbmplY3QyKSB7CisgICAgICAgICAgICogICByZXR1cm4geworICAg
ICAgICAgICAqICAgICBldmVudE5hbWUgOiBmdW5jdGlvbihlbGVtZW50LCBkb25lKSB7CisgICAg
ICAgICAgICogICAgICAgLy9jb2RlIHRvIHJ1biB0aGUgYW5pbWF0aW9uCisgICAgICAgICAgICog
ICAgICAgLy9vbmNlIGNvbXBsZXRlLCB0aGVuIHJ1biBkb25lKCkKKyAgICAgICAgICAgKiAgICAg
ICByZXR1cm4gZnVuY3Rpb24gY2FuY2VsbGF0aW9uRnVuY3Rpb24oZWxlbWVudCkgeworICAgICAg
ICAgICAqICAgICAgICAgLy9jb2RlIHRvIGNhbmNlbCB0aGUgYW5pbWF0aW9uCisgICAgICAgICAg
ICogICAgICAgfQorICAgICAgICAgICAqICAgICB9CisgICAgICAgICAgICogICB9CisgICAgICAg
ICAgICogfSkKKyAgICAgICAgICAgKiBgYGAKKyAgICAgICAgICAgKgorICAgICAgICAgICAqIFNl
ZSB7QGxpbmsgbmcuJGFuaW1hdGVQcm92aWRlciNyZWdpc3RlciAkYW5pbWF0ZVByb3ZpZGVyLnJl
Z2lzdGVyKCl9IGFuZAorICAgICAgICAgICAqIHtAbGluayBuZ0FuaW1hdGUgbmdBbmltYXRlIG1v
ZHVsZX0gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICovCisgICAgICAgICAgYW5p
bWF0aW9uOiBpbnZva2VMYXRlckFuZFNldE1vZHVsZU5hbWUoJyRhbmltYXRlUHJvdmlkZXInLCAn
cmVnaXN0ZXInKSwKKworICAgICAgICAgIC8qKgorICAgICAgICAgICAqIEBuZ2RvYyBtZXRob2QK
KyAgICAgICAgICAgKiBAbmFtZSBhbmd1bGFyLk1vZHVsZSNmaWx0ZXIKKyAgICAgICAgICAgKiBA
bW9kdWxlIG5nCisgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgRmlsdGVyIG5hbWUg
LSB0aGlzIG11c3QgYmUgYSB2YWxpZCBhbmd1bGFyIGV4cHJlc3Npb24gaWRlbnRpZmllcgorICAg
ICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZpbHRlckZhY3RvcnkgRmFjdG9yeSBmdW5jdGlv
biBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlIG9mIGZpbHRlci4KKyAgICAgICAgICAgKiBAZGVz
Y3JpcHRpb24KKyAgICAgICAgICAgKiBTZWUge0BsaW5rIG5nLiRmaWx0ZXJQcm92aWRlciNyZWdp
c3RlciAkZmlsdGVyUHJvdmlkZXIucmVnaXN0ZXIoKX0uCisgICAgICAgICAgICoKKyAgICAgICAg
ICAgKiA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC13YXJuaW5nIj4KKyAgICAgICAgICAgKiAqKk5v
dGU6KiogRmlsdGVyIG5hbWVzIG11c3QgYmUgdmFsaWQgYW5ndWxhciB7QGxpbmsgZXhwcmVzc2lv
bn0gaWRlbnRpZmllcnMsIHN1Y2ggYXMgYHVwcGVyY2FzZWAgb3IgYG9yZGVyQnlgLgorICAgICAg
ICAgICAqIE5hbWVzIHdpdGggc3BlY2lhbCBjaGFyYWN0ZXJzLCBzdWNoIGFzIGh5cGhlbnMgYW5k
IGRvdHMsIGFyZSBub3QgYWxsb3dlZC4gSWYgeW91IHdpc2ggdG8gbmFtZXNwYWNlCisgICAgICAg
ICAgICogeW91ciBmaWx0ZXJzLCB0aGVuIHlvdSBjYW4gdXNlIGNhcGl0YWxpemF0aW9uIChgbXlh
cHBTdWJzZWN0aW9uRmlsdGVyeGApIG9yIHVuZGVyc2NvcmVzCisgICAgICAgICAgICogKGBteWFw
cF9zdWJzZWN0aW9uX2ZpbHRlcnhgKS4KKyAgICAgICAgICAgKiA8L2Rpdj4KKyAgICAgICAgICAg
Ki8KKyAgICAgICAgICBmaWx0ZXI6IGludm9rZUxhdGVyQW5kU2V0TW9kdWxlTmFtZSgnJGZpbHRl
clByb3ZpZGVyJywgJ3JlZ2lzdGVyJyksCisKKyAgICAgICAgICAvKioKKyAgICAgICAgICAgKiBA
bmdkb2MgbWV0aG9kCisgICAgICAgICAgICogQG5hbWUgYW5ndWxhci5Nb2R1bGUjY29udHJvbGxl
cgorICAgICAgICAgICAqIEBtb2R1bGUgbmcKKyAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ3xP
YmplY3R9IG5hbWUgQ29udHJvbGxlciBuYW1lLCBvciBhbiBvYmplY3QgbWFwIG9mIGNvbnRyb2xs
ZXJzIHdoZXJlIHRoZQorICAgICAgICAgICAqICAgIGtleXMgYXJlIHRoZSBuYW1lcyBhbmQgdGhl
IHZhbHVlcyBhcmUgdGhlIGNvbnN0cnVjdG9ycy4KKyAgICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0
aW9ufSBjb25zdHJ1Y3RvciBDb250cm9sbGVyIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLgorICAgICAg
ICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAgICAgICAqIFNlZSB7QGxpbmsgbmcuJGNvbnRyb2xs
ZXJQcm92aWRlciNyZWdpc3RlciAkY29udHJvbGxlclByb3ZpZGVyLnJlZ2lzdGVyKCl9LgorICAg
ICAgICAgICAqLworICAgICAgICAgIGNvbnRyb2xsZXI6IGludm9rZUxhdGVyQW5kU2V0TW9kdWxl
TmFtZSgnJGNvbnRyb2xsZXJQcm92aWRlcicsICdyZWdpc3RlcicpLAorCisgICAgICAgICAgLyoq
CisgICAgICAgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAgICAgICAqIEBuYW1lIGFuZ3VsYXIu
TW9kdWxlI2RpcmVjdGl2ZQorICAgICAgICAgICAqIEBtb2R1bGUgbmcKKyAgICAgICAgICAgKiBA
cGFyYW0ge3N0cmluZ3xPYmplY3R9IG5hbWUgRGlyZWN0aXZlIG5hbWUsIG9yIGFuIG9iamVjdCBt
YXAgb2YgZGlyZWN0aXZlcyB3aGVyZSB0aGUKKyAgICAgICAgICAgKiAgICBrZXlzIGFyZSB0aGUg
bmFtZXMgYW5kIHRoZSB2YWx1ZXMgYXJlIHRoZSBmYWN0b3JpZXMuCisgICAgICAgICAgICogQHBh
cmFtIHtGdW5jdGlvbn0gZGlyZWN0aXZlRmFjdG9yeSBGYWN0b3J5IGZ1bmN0aW9uIGZvciBjcmVh
dGluZyBuZXcgaW5zdGFuY2Ugb2YKKyAgICAgICAgICAgKiBkaXJlY3RpdmVzLgorICAgICAgICAg
ICAqIEBkZXNjcmlwdGlvbgorICAgICAgICAgICAqIFNlZSB7QGxpbmsgbmcuJGNvbXBpbGVQcm92
aWRlciNkaXJlY3RpdmUgJGNvbXBpbGVQcm92aWRlci5kaXJlY3RpdmUoKX0uCisgICAgICAgICAg
ICovCisgICAgICAgICAgZGlyZWN0aXZlOiBpbnZva2VMYXRlckFuZFNldE1vZHVsZU5hbWUoJyRj
b21waWxlUHJvdmlkZXInLCAnZGlyZWN0aXZlJyksCisKKyAgICAgICAgICAvKioKKyAgICAgICAg
ICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICAgICAgICogQG5hbWUgYW5ndWxhci5Nb2R1bGUjY29u
ZmlnCisgICAgICAgICAgICogQG1vZHVsZSBuZworICAgICAgICAgICAqIEBwYXJhbSB7RnVuY3Rp
b259IGNvbmZpZ0ZuIEV4ZWN1dGUgdGhpcyBmdW5jdGlvbiBvbiBtb2R1bGUgbG9hZC4gVXNlZnVs
IGZvciBzZXJ2aWNlCisgICAgICAgICAgICogICAgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAg
KiBAZGVzY3JpcHRpb24KKyAgICAgICAgICAgKiBVc2UgdGhpcyBtZXRob2QgdG8gcmVnaXN0ZXIg
d29yayB3aGljaCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgb24gbW9kdWxlIGxvYWRpbmcuCisgICAg
ICAgICAgICogRm9yIG1vcmUgYWJvdXQgaG93IHRvIGNvbmZpZ3VyZSBzZXJ2aWNlcywgc2VlCisg
ICAgICAgICAgICoge0BsaW5rIHByb3ZpZGVycyNwcm92aWRlci1yZWNpcGUgUHJvdmlkZXIgUmVj
aXBlfS4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICBjb25maWc6IGNvbmZpZywKKworICAgICAg
ICAgIC8qKgorICAgICAgICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgICAgICAgKiBAbmFtZSBh
bmd1bGFyLk1vZHVsZSNydW4KKyAgICAgICAgICAgKiBAbW9kdWxlIG5nCisgICAgICAgICAgICog
QHBhcmFtIHtGdW5jdGlvbn0gaW5pdGlhbGl6YXRpb25GbiBFeGVjdXRlIHRoaXMgZnVuY3Rpb24g
YWZ0ZXIgaW5qZWN0b3IgY3JlYXRpb24uCisgICAgICAgICAgICogICAgVXNlZnVsIGZvciBhcHBs
aWNhdGlvbiBpbml0aWFsaXphdGlvbi4KKyAgICAgICAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAg
ICAgICAgKiBVc2UgdGhpcyBtZXRob2QgdG8gcmVnaXN0ZXIgd29yayB3aGljaCBzaG91bGQgYmUg
cGVyZm9ybWVkIHdoZW4gdGhlIGluamVjdG9yIGlzIGRvbmUKKyAgICAgICAgICAgKiBsb2FkaW5n
IGFsbCBtb2R1bGVzLgorICAgICAgICAgICAqLworICAgICAgICAgIHJ1bjogZnVuY3Rpb24oYmxv
Y2spIHsKKyAgICAgICAgICAgIHJ1bkJsb2Nrcy5wdXNoKGJsb2NrKTsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzOworICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBpZiAoY29uZmln
Rm4pIHsKKyAgICAgICAgICBjb25maWcoY29uZmlnRm4pOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIG1vZHVsZUluc3RhbmNlOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBAcGFyYW0g
e3N0cmluZ30gcHJvdmlkZXIKKyAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZAorICAg
ICAgICAgKiBAcGFyYW0ge1N0cmluZz19IGluc2VydE1ldGhvZAorICAgICAgICAgKiBAcmV0dXJu
cyB7YW5ndWxhci5Nb2R1bGV9CisgICAgICAgICAqLworICAgICAgICBmdW5jdGlvbiBpbnZva2VM
YXRlcihwcm92aWRlciwgbWV0aG9kLCBpbnNlcnRNZXRob2QsIHF1ZXVlKSB7CisgICAgICAgICAg
aWYgKCFxdWV1ZSkgcXVldWUgPSBpbnZva2VRdWV1ZTsKKyAgICAgICAgICByZXR1cm4gZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICBxdWV1ZVtpbnNlcnRNZXRob2QgfHwgJ3B1c2gnXShbcHJvdmlk
ZXIsIG1ldGhvZCwgYXJndW1lbnRzXSk7CisgICAgICAgICAgICByZXR1cm4gbW9kdWxlSW5zdGFu
Y2U7CisgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBA
cGFyYW0ge3N0cmluZ30gcHJvdmlkZXIKKyAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhv
ZAorICAgICAgICAgKiBAcmV0dXJucyB7YW5ndWxhci5Nb2R1bGV9CisgICAgICAgICAqLworICAg
ICAgICBmdW5jdGlvbiBpbnZva2VMYXRlckFuZFNldE1vZHVsZU5hbWUocHJvdmlkZXIsIG1ldGhv
ZCkgeworICAgICAgICAgIHJldHVybiBmdW5jdGlvbihyZWNpcGVOYW1lLCBmYWN0b3J5RnVuY3Rp
b24pIHsKKyAgICAgICAgICAgIGlmIChmYWN0b3J5RnVuY3Rpb24gJiYgaXNGdW5jdGlvbihmYWN0
b3J5RnVuY3Rpb24pKSBmYWN0b3J5RnVuY3Rpb24uJCRtb2R1bGVOYW1lID0gbmFtZTsKKyAgICAg
ICAgICAgIGludm9rZVF1ZXVlLnB1c2goW3Byb3ZpZGVyLCBtZXRob2QsIGFyZ3VtZW50c10pOwor
ICAgICAgICAgICAgcmV0dXJuIG1vZHVsZUluc3RhbmNlOworICAgICAgICAgIH07CisgICAgICAg
IH0KKyAgICAgIH0pOworICAgIH07CisgIH0pOworCit9CisKKy8qIGdsb2JhbDogdG9EZWJ1Z1N0
cmluZzogdHJ1ZSAqLworCitmdW5jdGlvbiBzZXJpYWxpemVPYmplY3Qob2JqKSB7CisgIHZhciBz
ZWVuID0gW107CisKKyAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiwgZnVuY3Rpb24oa2V5LCB2
YWwpIHsKKyAgICB2YWwgPSB0b0pzb25SZXBsYWNlcihrZXksIHZhbCk7CisgICAgaWYgKGlzT2Jq
ZWN0KHZhbCkpIHsKKworICAgICAgaWYgKHNlZW4uaW5kZXhPZih2YWwpID49IDApIHJldHVybiAn
PDxhbHJlYWR5IHNlZW4+Pic7CisKKyAgICAgIHNlZW4ucHVzaCh2YWwpOworICAgIH0KKyAgICBy
ZXR1cm4gdmFsOworICB9KTsKK30KKworZnVuY3Rpb24gdG9EZWJ1Z1N0cmluZyhvYmopIHsKKyAg
aWYgKHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpIHsKKyAgICByZXR1cm4gb2JqLnRvU3RyaW5n
KCkucmVwbGFjZSgvIFx7W1xzXFNdKiQvLCAnJyk7CisgIH0gZWxzZSBpZiAodHlwZW9mIG9iaiA9
PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICByZXR1cm4gJ3VuZGVmaW5lZCc7CisgIH0gZWxzZSBpZiAo
dHlwZW9mIG9iaiAhPT0gJ3N0cmluZycpIHsKKyAgICByZXR1cm4gc2VyaWFsaXplT2JqZWN0KG9i
aik7CisgIH0KKyAgcmV0dXJuIG9iajsKK30KKworLyogZ2xvYmFsIGFuZ3VsYXJNb2R1bGU6IHRy
dWUsCisgIHZlcnNpb246IHRydWUsCisKKyAgJExvY2FsZVByb3ZpZGVyLAorICAkQ29tcGlsZVBy
b3ZpZGVyLAorCisgIGh0bWxBbmNob3JEaXJlY3RpdmUsCisgIGlucHV0RGlyZWN0aXZlLAorICBp
bnB1dERpcmVjdGl2ZSwKKyAgZm9ybURpcmVjdGl2ZSwKKyAgc2NyaXB0RGlyZWN0aXZlLAorICBz
ZWxlY3REaXJlY3RpdmUsCisgIHN0eWxlRGlyZWN0aXZlLAorICBvcHRpb25EaXJlY3RpdmUsCisg
IG5nQmluZERpcmVjdGl2ZSwKKyAgbmdCaW5kSHRtbERpcmVjdGl2ZSwKKyAgbmdCaW5kVGVtcGxh
dGVEaXJlY3RpdmUsCisgIG5nQ2xhc3NEaXJlY3RpdmUsCisgIG5nQ2xhc3NFdmVuRGlyZWN0aXZl
LAorICBuZ0NsYXNzT2RkRGlyZWN0aXZlLAorICBuZ0NzcERpcmVjdGl2ZSwKKyAgbmdDbG9ha0Rp
cmVjdGl2ZSwKKyAgbmdDb250cm9sbGVyRGlyZWN0aXZlLAorICBuZ0Zvcm1EaXJlY3RpdmUsCisg
IG5nSGlkZURpcmVjdGl2ZSwKKyAgbmdJZkRpcmVjdGl2ZSwKKyAgbmdJbmNsdWRlRGlyZWN0aXZl
LAorICBuZ0luY2x1ZGVGaWxsQ29udGVudERpcmVjdGl2ZSwKKyAgbmdJbml0RGlyZWN0aXZlLAor
ICBuZ05vbkJpbmRhYmxlRGlyZWN0aXZlLAorICBuZ1BsdXJhbGl6ZURpcmVjdGl2ZSwKKyAgbmdS
ZXBlYXREaXJlY3RpdmUsCisgIG5nU2hvd0RpcmVjdGl2ZSwKKyAgbmdTdHlsZURpcmVjdGl2ZSwK
KyAgbmdTd2l0Y2hEaXJlY3RpdmUsCisgIG5nU3dpdGNoV2hlbkRpcmVjdGl2ZSwKKyAgbmdTd2l0
Y2hEZWZhdWx0RGlyZWN0aXZlLAorICBuZ09wdGlvbnNEaXJlY3RpdmUsCisgIG5nVHJhbnNjbHVk
ZURpcmVjdGl2ZSwKKyAgbmdNb2RlbERpcmVjdGl2ZSwKKyAgbmdMaXN0RGlyZWN0aXZlLAorICBu
Z0NoYW5nZURpcmVjdGl2ZSwKKyAgcGF0dGVybkRpcmVjdGl2ZSwKKyAgcGF0dGVybkRpcmVjdGl2
ZSwKKyAgcmVxdWlyZWREaXJlY3RpdmUsCisgIHJlcXVpcmVkRGlyZWN0aXZlLAorICBtaW5sZW5n
dGhEaXJlY3RpdmUsCisgIG1pbmxlbmd0aERpcmVjdGl2ZSwKKyAgbWF4bGVuZ3RoRGlyZWN0aXZl
LAorICBtYXhsZW5ndGhEaXJlY3RpdmUsCisgIG5nVmFsdWVEaXJlY3RpdmUsCisgIG5nTW9kZWxP
cHRpb25zRGlyZWN0aXZlLAorICBuZ0F0dHJpYnV0ZUFsaWFzRGlyZWN0aXZlcywKKyAgbmdFdmVu
dERpcmVjdGl2ZXMsCisKKyAgJEFuY2hvclNjcm9sbFByb3ZpZGVyLAorICAkQW5pbWF0ZVByb3Zp
ZGVyLAorICAkJENvcmVBbmltYXRlUXVldWVQcm92aWRlciwKKyAgJCRDb3JlQW5pbWF0ZVJ1bm5l
clByb3ZpZGVyLAorICAkQnJvd3NlclByb3ZpZGVyLAorICAkQ2FjaGVGYWN0b3J5UHJvdmlkZXIs
CisgICRDb250cm9sbGVyUHJvdmlkZXIsCisgICREb2N1bWVudFByb3ZpZGVyLAorICAkRXhjZXB0
aW9uSGFuZGxlclByb3ZpZGVyLAorICAkRmlsdGVyUHJvdmlkZXIsCisgICRJbnRlcnBvbGF0ZVBy
b3ZpZGVyLAorICAkSW50ZXJ2YWxQcm92aWRlciwKKyAgJCRIYXNoTWFwUHJvdmlkZXIsCisgICRI
dHRwUHJvdmlkZXIsCisgICRIdHRwUGFyYW1TZXJpYWxpemVyUHJvdmlkZXIsCisgICRIdHRwUGFy
YW1TZXJpYWxpemVySlFMaWtlUHJvdmlkZXIsCisgICRIdHRwQmFja2VuZFByb3ZpZGVyLAorICAk
TG9jYXRpb25Qcm92aWRlciwKKyAgJExvZ1Byb3ZpZGVyLAorICAkUGFyc2VQcm92aWRlciwKKyAg
JFJvb3RTY29wZVByb3ZpZGVyLAorICAkUVByb3ZpZGVyLAorICAkJFFQcm92aWRlciwKKyAgJCRT
YW5pdGl6ZVVyaVByb3ZpZGVyLAorICAkU2NlUHJvdmlkZXIsCisgICRTY2VEZWxlZ2F0ZVByb3Zp
ZGVyLAorICAkU25pZmZlclByb3ZpZGVyLAorICAkVGVtcGxhdGVDYWNoZVByb3ZpZGVyLAorICAk
VGVtcGxhdGVSZXF1ZXN0UHJvdmlkZXIsCisgICQkVGVzdGFiaWxpdHlQcm92aWRlciwKKyAgJFRp
bWVvdXRQcm92aWRlciwKKyAgJCRSQUZQcm92aWRlciwKKyAgJFdpbmRvd1Byb3ZpZGVyLAorICAk
JGpxTGl0ZVByb3ZpZGVyLAorICAkJENvb2tpZVJlYWRlclByb3ZpZGVyCisqLworCisKKy8qKgor
ICogQG5nZG9jIG9iamVjdAorICogQG5hbWUgYW5ndWxhci52ZXJzaW9uCisgKiBAbW9kdWxlIG5n
CisgKiBAZGVzY3JpcHRpb24KKyAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9u
IGFib3V0IHRoZSBjdXJyZW50IEFuZ3VsYXJKUyB2ZXJzaW9uLiBUaGlzIG9iamVjdCBoYXMgdGhl
CisgKiBmb2xsb3dpbmcgcHJvcGVydGllczoKKyAqCisgKiAtIGBmdWxsYCDigJMgYHtzdHJpbmd9
YCDigJMgRnVsbCB2ZXJzaW9uIHN0cmluZywgc3VjaCBhcyAiMC45LjE4Ii4KKyAqIC0gYG1ham9y
YCDigJMgYHtudW1iZXJ9YCDigJMgTWFqb3IgdmVyc2lvbiBudW1iZXIsIHN1Y2ggYXMgIjAiLgor
ICogLSBgbWlub3JgIOKAkyBge251bWJlcn1gIOKAkyBNaW5vciB2ZXJzaW9uIG51bWJlciwgc3Vj
aCBhcyAiOSIuCisgKiAtIGBkb3RgIOKAkyBge251bWJlcn1gIOKAkyBEb3QgdmVyc2lvbiBudW1i
ZXIsIHN1Y2ggYXMgIjE4Ii4KKyAqIC0gYGNvZGVOYW1lYCDigJMgYHtzdHJpbmd9YCDigJMgQ29k
ZSBuYW1lIG9mIHRoZSByZWxlYXNlLCBzdWNoIGFzICJqaWdnbGluZy1hcm1mYXQiLgorICovCit2
YXIgdmVyc2lvbiA9IHsKKyAgZnVsbDogJzEuNC4zJywgICAgLy8gYWxsIG9mIHRoZXNlIHBsYWNl
aG9sZGVyIHN0cmluZ3Mgd2lsbCBiZSByZXBsYWNlZCBieSBncnVudCdzCisgIG1ham9yOiAxLCAg
ICAvLyBwYWNrYWdlIHRhc2sKKyAgbWlub3I6IDQsCisgIGRvdDogMywKKyAgY29kZU5hbWU6ICdm
b2FtLWFjY2VsZXJhdGlvbicKK307CisKKworZnVuY3Rpb24gcHVibGlzaEV4dGVybmFsQVBJKGFu
Z3VsYXIpIHsKKyAgZXh0ZW5kKGFuZ3VsYXIsIHsKKyAgICAnYm9vdHN0cmFwJzogYm9vdHN0cmFw
LAorICAgICdjb3B5JzogY29weSwKKyAgICAnZXh0ZW5kJzogZXh0ZW5kLAorICAgICdtZXJnZSc6
IG1lcmdlLAorICAgICdlcXVhbHMnOiBlcXVhbHMsCisgICAgJ2VsZW1lbnQnOiBqcUxpdGUsCisg
ICAgJ2ZvckVhY2gnOiBmb3JFYWNoLAorICAgICdpbmplY3Rvcic6IGNyZWF0ZUluamVjdG9yLAor
ICAgICdub29wJzogbm9vcCwKKyAgICAnYmluZCc6IGJpbmQsCisgICAgJ3RvSnNvbic6IHRvSnNv
biwKKyAgICAnZnJvbUpzb24nOiBmcm9tSnNvbiwKKyAgICAnaWRlbnRpdHknOiBpZGVudGl0eSwK
KyAgICAnaXNVbmRlZmluZWQnOiBpc1VuZGVmaW5lZCwKKyAgICAnaXNEZWZpbmVkJzogaXNEZWZp
bmVkLAorICAgICdpc1N0cmluZyc6IGlzU3RyaW5nLAorICAgICdpc0Z1bmN0aW9uJzogaXNGdW5j
dGlvbiwKKyAgICAnaXNPYmplY3QnOiBpc09iamVjdCwKKyAgICAnaXNOdW1iZXInOiBpc051bWJl
ciwKKyAgICAnaXNFbGVtZW50JzogaXNFbGVtZW50LAorICAgICdpc0FycmF5JzogaXNBcnJheSwK
KyAgICAndmVyc2lvbic6IHZlcnNpb24sCisgICAgJ2lzRGF0ZSc6IGlzRGF0ZSwKKyAgICAnbG93
ZXJjYXNlJzogbG93ZXJjYXNlLAorICAgICd1cHBlcmNhc2UnOiB1cHBlcmNhc2UsCisgICAgJ2Nh
bGxiYWNrcyc6IHtjb3VudGVyOiAwfSwKKyAgICAnZ2V0VGVzdGFiaWxpdHknOiBnZXRUZXN0YWJp
bGl0eSwKKyAgICAnJCRtaW5FcnInOiBtaW5FcnIsCisgICAgJyQkY3NwJzogY3NwLAorICAgICdy
ZWxvYWRXaXRoRGVidWdJbmZvJzogcmVsb2FkV2l0aERlYnVnSW5mbworICB9KTsKKworICBhbmd1
bGFyTW9kdWxlID0gc2V0dXBNb2R1bGVMb2FkZXIod2luZG93KTsKKyAgdHJ5IHsKKyAgICBhbmd1
bGFyTW9kdWxlKCduZ0xvY2FsZScpOworICB9IGNhdGNoIChlKSB7CisgICAgYW5ndWxhck1vZHVs
ZSgnbmdMb2NhbGUnLCBbXSkucHJvdmlkZXIoJyRsb2NhbGUnLCAkTG9jYWxlUHJvdmlkZXIpOwor
ICB9CisKKyAgYW5ndWxhck1vZHVsZSgnbmcnLCBbJ25nTG9jYWxlJ10sIFsnJHByb3ZpZGUnLAor
ICAgIGZ1bmN0aW9uIG5nTW9kdWxlKCRwcm92aWRlKSB7CisgICAgICAvLyAkJHNhbml0aXplVXJp
UHJvdmlkZXIgbmVlZHMgdG8gYmUgYmVmb3JlICRjb21waWxlUHJvdmlkZXIgYXMgaXQgaXMgdXNl
ZCBieSBpdC4KKyAgICAgICRwcm92aWRlLnByb3ZpZGVyKHsKKyAgICAgICAgJCRzYW5pdGl6ZVVy
aTogJCRTYW5pdGl6ZVVyaVByb3ZpZGVyCisgICAgICB9KTsKKyAgICAgICRwcm92aWRlLnByb3Zp
ZGVyKCckY29tcGlsZScsICRDb21waWxlUHJvdmlkZXIpLgorICAgICAgICBkaXJlY3RpdmUoewor
ICAgICAgICAgICAgYTogaHRtbEFuY2hvckRpcmVjdGl2ZSwKKyAgICAgICAgICAgIGlucHV0OiBp
bnB1dERpcmVjdGl2ZSwKKyAgICAgICAgICAgIHRleHRhcmVhOiBpbnB1dERpcmVjdGl2ZSwKKyAg
ICAgICAgICAgIGZvcm06IGZvcm1EaXJlY3RpdmUsCisgICAgICAgICAgICBzY3JpcHQ6IHNjcmlw
dERpcmVjdGl2ZSwKKyAgICAgICAgICAgIHNlbGVjdDogc2VsZWN0RGlyZWN0aXZlLAorICAgICAg
ICAgICAgc3R5bGU6IHN0eWxlRGlyZWN0aXZlLAorICAgICAgICAgICAgb3B0aW9uOiBvcHRpb25E
aXJlY3RpdmUsCisgICAgICAgICAgICBuZ0JpbmQ6IG5nQmluZERpcmVjdGl2ZSwKKyAgICAgICAg
ICAgIG5nQmluZEh0bWw6IG5nQmluZEh0bWxEaXJlY3RpdmUsCisgICAgICAgICAgICBuZ0JpbmRU
ZW1wbGF0ZTogbmdCaW5kVGVtcGxhdGVEaXJlY3RpdmUsCisgICAgICAgICAgICBuZ0NsYXNzOiBu
Z0NsYXNzRGlyZWN0aXZlLAorICAgICAgICAgICAgbmdDbGFzc0V2ZW46IG5nQ2xhc3NFdmVuRGly
ZWN0aXZlLAorICAgICAgICAgICAgbmdDbGFzc09kZDogbmdDbGFzc09kZERpcmVjdGl2ZSwKKyAg
ICAgICAgICAgIG5nQ2xvYWs6IG5nQ2xvYWtEaXJlY3RpdmUsCisgICAgICAgICAgICBuZ0NvbnRy
b2xsZXI6IG5nQ29udHJvbGxlckRpcmVjdGl2ZSwKKyAgICAgICAgICAgIG5nRm9ybTogbmdGb3Jt
RGlyZWN0aXZlLAorICAgICAgICAgICAgbmdIaWRlOiBuZ0hpZGVEaXJlY3RpdmUsCisgICAgICAg
ICAgICBuZ0lmOiBuZ0lmRGlyZWN0aXZlLAorICAgICAgICAgICAgbmdJbmNsdWRlOiBuZ0luY2x1
ZGVEaXJlY3RpdmUsCisgICAgICAgICAgICBuZ0luaXQ6IG5nSW5pdERpcmVjdGl2ZSwKKyAgICAg
ICAgICAgIG5nTm9uQmluZGFibGU6IG5nTm9uQmluZGFibGVEaXJlY3RpdmUsCisgICAgICAgICAg
ICBuZ1BsdXJhbGl6ZTogbmdQbHVyYWxpemVEaXJlY3RpdmUsCisgICAgICAgICAgICBuZ1JlcGVh
dDogbmdSZXBlYXREaXJlY3RpdmUsCisgICAgICAgICAgICBuZ1Nob3c6IG5nU2hvd0RpcmVjdGl2
ZSwKKyAgICAgICAgICAgIG5nU3R5bGU6IG5nU3R5bGVEaXJlY3RpdmUsCisgICAgICAgICAgICBu
Z1N3aXRjaDogbmdTd2l0Y2hEaXJlY3RpdmUsCisgICAgICAgICAgICBuZ1N3aXRjaFdoZW46IG5n
U3dpdGNoV2hlbkRpcmVjdGl2ZSwKKyAgICAgICAgICAgIG5nU3dpdGNoRGVmYXVsdDogbmdTd2l0
Y2hEZWZhdWx0RGlyZWN0aXZlLAorICAgICAgICAgICAgbmdPcHRpb25zOiBuZ09wdGlvbnNEaXJl
Y3RpdmUsCisgICAgICAgICAgICBuZ1RyYW5zY2x1ZGU6IG5nVHJhbnNjbHVkZURpcmVjdGl2ZSwK
KyAgICAgICAgICAgIG5nTW9kZWw6IG5nTW9kZWxEaXJlY3RpdmUsCisgICAgICAgICAgICBuZ0xp
c3Q6IG5nTGlzdERpcmVjdGl2ZSwKKyAgICAgICAgICAgIG5nQ2hhbmdlOiBuZ0NoYW5nZURpcmVj
dGl2ZSwKKyAgICAgICAgICAgIHBhdHRlcm46IHBhdHRlcm5EaXJlY3RpdmUsCisgICAgICAgICAg
ICBuZ1BhdHRlcm46IHBhdHRlcm5EaXJlY3RpdmUsCisgICAgICAgICAgICByZXF1aXJlZDogcmVx
dWlyZWREaXJlY3RpdmUsCisgICAgICAgICAgICBuZ1JlcXVpcmVkOiByZXF1aXJlZERpcmVjdGl2
ZSwKKyAgICAgICAgICAgIG1pbmxlbmd0aDogbWlubGVuZ3RoRGlyZWN0aXZlLAorICAgICAgICAg
ICAgbmdNaW5sZW5ndGg6IG1pbmxlbmd0aERpcmVjdGl2ZSwKKyAgICAgICAgICAgIG1heGxlbmd0
aDogbWF4bGVuZ3RoRGlyZWN0aXZlLAorICAgICAgICAgICAgbmdNYXhsZW5ndGg6IG1heGxlbmd0
aERpcmVjdGl2ZSwKKyAgICAgICAgICAgIG5nVmFsdWU6IG5nVmFsdWVEaXJlY3RpdmUsCisgICAg
ICAgICAgICBuZ01vZGVsT3B0aW9uczogbmdNb2RlbE9wdGlvbnNEaXJlY3RpdmUKKyAgICAgICAg
fSkuCisgICAgICAgIGRpcmVjdGl2ZSh7CisgICAgICAgICAgbmdJbmNsdWRlOiBuZ0luY2x1ZGVG
aWxsQ29udGVudERpcmVjdGl2ZQorICAgICAgICB9KS4KKyAgICAgICAgZGlyZWN0aXZlKG5nQXR0
cmlidXRlQWxpYXNEaXJlY3RpdmVzKS4KKyAgICAgICAgZGlyZWN0aXZlKG5nRXZlbnREaXJlY3Rp
dmVzKTsKKyAgICAgICRwcm92aWRlLnByb3ZpZGVyKHsKKyAgICAgICAgJGFuY2hvclNjcm9sbDog
JEFuY2hvclNjcm9sbFByb3ZpZGVyLAorICAgICAgICAkYW5pbWF0ZTogJEFuaW1hdGVQcm92aWRl
ciwKKyAgICAgICAgJCRhbmltYXRlUXVldWU6ICQkQ29yZUFuaW1hdGVRdWV1ZVByb3ZpZGVyLAor
ICAgICAgICAkJEFuaW1hdGVSdW5uZXI6ICQkQ29yZUFuaW1hdGVSdW5uZXJQcm92aWRlciwKKyAg
ICAgICAgJGJyb3dzZXI6ICRCcm93c2VyUHJvdmlkZXIsCisgICAgICAgICRjYWNoZUZhY3Rvcnk6
ICRDYWNoZUZhY3RvcnlQcm92aWRlciwKKyAgICAgICAgJGNvbnRyb2xsZXI6ICRDb250cm9sbGVy
UHJvdmlkZXIsCisgICAgICAgICRkb2N1bWVudDogJERvY3VtZW50UHJvdmlkZXIsCisgICAgICAg
ICRleGNlcHRpb25IYW5kbGVyOiAkRXhjZXB0aW9uSGFuZGxlclByb3ZpZGVyLAorICAgICAgICAk
ZmlsdGVyOiAkRmlsdGVyUHJvdmlkZXIsCisgICAgICAgICRpbnRlcnBvbGF0ZTogJEludGVycG9s
YXRlUHJvdmlkZXIsCisgICAgICAgICRpbnRlcnZhbDogJEludGVydmFsUHJvdmlkZXIsCisgICAg
ICAgICRodHRwOiAkSHR0cFByb3ZpZGVyLAorICAgICAgICAkaHR0cFBhcmFtU2VyaWFsaXplcjog
JEh0dHBQYXJhbVNlcmlhbGl6ZXJQcm92aWRlciwKKyAgICAgICAgJGh0dHBQYXJhbVNlcmlhbGl6
ZXJKUUxpa2U6ICRIdHRwUGFyYW1TZXJpYWxpemVySlFMaWtlUHJvdmlkZXIsCisgICAgICAgICRo
dHRwQmFja2VuZDogJEh0dHBCYWNrZW5kUHJvdmlkZXIsCisgICAgICAgICRsb2NhdGlvbjogJExv
Y2F0aW9uUHJvdmlkZXIsCisgICAgICAgICRsb2c6ICRMb2dQcm92aWRlciwKKyAgICAgICAgJHBh
cnNlOiAkUGFyc2VQcm92aWRlciwKKyAgICAgICAgJHJvb3RTY29wZTogJFJvb3RTY29wZVByb3Zp
ZGVyLAorICAgICAgICAkcTogJFFQcm92aWRlciwKKyAgICAgICAgJCRxOiAkJFFQcm92aWRlciwK
KyAgICAgICAgJHNjZTogJFNjZVByb3ZpZGVyLAorICAgICAgICAkc2NlRGVsZWdhdGU6ICRTY2VE
ZWxlZ2F0ZVByb3ZpZGVyLAorICAgICAgICAkc25pZmZlcjogJFNuaWZmZXJQcm92aWRlciwKKyAg
ICAgICAgJHRlbXBsYXRlQ2FjaGU6ICRUZW1wbGF0ZUNhY2hlUHJvdmlkZXIsCisgICAgICAgICR0
ZW1wbGF0ZVJlcXVlc3Q6ICRUZW1wbGF0ZVJlcXVlc3RQcm92aWRlciwKKyAgICAgICAgJCR0ZXN0
YWJpbGl0eTogJCRUZXN0YWJpbGl0eVByb3ZpZGVyLAorICAgICAgICAkdGltZW91dDogJFRpbWVv
dXRQcm92aWRlciwKKyAgICAgICAgJHdpbmRvdzogJFdpbmRvd1Byb3ZpZGVyLAorICAgICAgICAk
JHJBRjogJCRSQUZQcm92aWRlciwKKyAgICAgICAgJCRqcUxpdGU6ICQkanFMaXRlUHJvdmlkZXIs
CisgICAgICAgICQkSGFzaE1hcDogJCRIYXNoTWFwUHJvdmlkZXIsCisgICAgICAgICQkY29va2ll
UmVhZGVyOiAkJENvb2tpZVJlYWRlclByb3ZpZGVyCisgICAgICB9KTsKKyAgICB9CisgIF0pOwor
fQorCisvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAq
ICogKiAqICogKiAqICogKiAqICogKiAqCisgKiAgICAgQW55IGNvbW1pdHMgdG8gdGhpcyBmaWxl
IHNob3VsZCBiZSByZXZpZXdlZCB3aXRoIHNlY3VyaXR5IGluIG1pbmQuICAqCisgKiAgIENoYW5n
ZXMgdG8gdGhpcyBmaWxlIGNhbiBwb3RlbnRpYWxseSBjcmVhdGUgc2VjdXJpdHkgdnVsbmVyYWJp
bGl0aWVzLiAqCisgKiAgICAgICAgICBBbiBhcHByb3ZhbCBmcm9tIDIgQ29yZSBtZW1iZXJzIHdp
dGggaGlzdG9yeSBvZiBtb2RpZnlpbmcgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzIGZpbGUgaXMgcmVxdWlyZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqCisgKiAgRG9lcyB0aGUgY2hhbmdlIHNvbWVob3cgYWxsb3cgZm9yIGFy
Yml0cmFyeSBqYXZhc2NyaXB0IHRvIGJlIGV4ZWN1dGVkPyAqCisgKiAgICBPciBhbGxvd3MgZm9y
IHNvbWVvbmUgdG8gY2hhbmdlIHRoZSBwcm90b3R5cGUgb2YgYnVpbHQtaW4gb2JqZWN0cz8gICAq
CisgKiAgICAgT3IgZ2l2ZXMgdW5kZXNpcmVkIGFjY2VzcyB0byB2YXJpYWJsZXMgbGlrZXMgZG9j
dW1lbnQgb3Igd2luZG93PyAgICAqCisgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAq
ICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCisvKiBnbG9iYWwg
SlFMaXRlUHJvdG90eXBlOiB0cnVlLAorICBhZGRFdmVudExpc3RlbmVyRm46IHRydWUsCisgIHJl
bW92ZUV2ZW50TGlzdGVuZXJGbjogdHJ1ZSwKKyAgQk9PTEVBTl9BVFRSOiB0cnVlLAorICBBTElB
U0VEX0FUVFI6IHRydWUsCisqLworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisvL0pRTGl0ZQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvKioKKyAq
IEBuZ2RvYyBmdW5jdGlvbgorICogQG5hbWUgYW5ndWxhci5lbGVtZW50CisgKiBAbW9kdWxlIG5n
CisgKiBAa2luZCBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlvbgorICogV3JhcHMgYSByYXcg
RE9NIGVsZW1lbnQgb3IgSFRNTCBzdHJpbmcgYXMgYSBbalF1ZXJ5XShodHRwOi8vanF1ZXJ5LmNv
bSkgZWxlbWVudC4KKyAqCisgKiBJZiBqUXVlcnkgaXMgYXZhaWxhYmxlLCBgYW5ndWxhci5lbGVt
ZW50YCBpcyBhbiBhbGlhcyBmb3IgdGhlCisgKiBbalF1ZXJ5XShodHRwOi8vYXBpLmpxdWVyeS5j
b20valF1ZXJ5LykgZnVuY3Rpb24uIElmIGpRdWVyeSBpcyBub3QgYXZhaWxhYmxlLCBgYW5ndWxh
ci5lbGVtZW50YAorICogZGVsZWdhdGVzIHRvIEFuZ3VsYXIncyBidWlsdC1pbiBzdWJzZXQgb2Yg
alF1ZXJ5LCBjYWxsZWQgImpRdWVyeSBsaXRlIiBvciAianFMaXRlLiIKKyAqCisgKiA8ZGl2IGNs
YXNzPSJhbGVydCBhbGVydC1zdWNjZXNzIj5qcUxpdGUgaXMgYSB0aW55LCBBUEktY29tcGF0aWJs
ZSBzdWJzZXQgb2YgalF1ZXJ5IHRoYXQgYWxsb3dzCisgKiBBbmd1bGFyIHRvIG1hbmlwdWxhdGUg
dGhlIERPTSBpbiBhIGNyb3NzLWJyb3dzZXIgY29tcGF0aWJsZSB3YXkuICoqanFMaXRlKiogaW1w
bGVtZW50cyBvbmx5IHRoZSBtb3N0CisgKiBjb21tb25seSBuZWVkZWQgZnVuY3Rpb25hbGl0eSB3
aXRoIHRoZSBnb2FsIG9mIGhhdmluZyBhIHZlcnkgc21hbGwgZm9vdHByaW50LjwvZGl2PgorICoK
KyAqIFRvIHVzZSBgalF1ZXJ5YCwgc2ltcGx5IGVuc3VyZSBpdCBpcyBsb2FkZWQgYmVmb3JlIHRo
ZSBgYW5ndWxhci5qc2AgZmlsZS4KKyAqCisgKiA8ZGl2IGNsYXNzPSJhbGVydCI+KipOb3RlOioq
IGFsbCBlbGVtZW50IHJlZmVyZW5jZXMgaW4gQW5ndWxhciBhcmUgYWx3YXlzIHdyYXBwZWQgd2l0
aCBqUXVlcnkgb3IKKyAqIGpxTGl0ZTsgdGhleSBhcmUgbmV2ZXIgcmF3IERPTSByZWZlcmVuY2Vz
LjwvZGl2PgorICoKKyAqICMjIEFuZ3VsYXIncyBqcUxpdGUKKyAqIGpxTGl0ZSBwcm92aWRlcyBv
bmx5IHRoZSBmb2xsb3dpbmcgalF1ZXJ5IG1ldGhvZHM6CisgKgorICogLSBbYGFkZENsYXNzKClg
XShodHRwOi8vYXBpLmpxdWVyeS5jb20vYWRkQ2xhc3MvKQorICogLSBbYGFmdGVyKClgXShodHRw
Oi8vYXBpLmpxdWVyeS5jb20vYWZ0ZXIvKQorICogLSBbYGFwcGVuZCgpYF0oaHR0cDovL2FwaS5q
cXVlcnkuY29tL2FwcGVuZC8pCisgKiAtIFtgYXR0cigpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29t
L2F0dHIvKSAtIERvZXMgbm90IHN1cHBvcnQgZnVuY3Rpb25zIGFzIHBhcmFtZXRlcnMKKyAqIC0g
W2BiaW5kKClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vYmluZC8pIC0gRG9lcyBub3Qgc3VwcG9y
dCBuYW1lc3BhY2VzLCBzZWxlY3RvcnMgb3IgZXZlbnREYXRhCisgKiAtIFtgY2hpbGRyZW4oKWBd
KGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9jaGlsZHJlbi8pIC0gRG9lcyBub3Qgc3VwcG9ydCBzZWxl
Y3RvcnMKKyAqIC0gW2BjbG9uZSgpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL2Nsb25lLykKKyAq
IC0gW2Bjb250ZW50cygpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL2NvbnRlbnRzLykKKyAqIC0g
W2Bjc3MoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9jc3MvKSAtIE9ubHkgcmV0cmlldmVzIGlu
bGluZS1zdHlsZXMsIGRvZXMgbm90IGNhbGwgYGdldENvbXB1dGVkU3R5bGUoKWAuIEFzIGEgc2V0
dGVyLCBkb2VzIG5vdCBjb252ZXJ0IG51bWJlcnMgdG8gc3RyaW5ncyBvciBhcHBlbmQgJ3B4Jy4K
KyAqIC0gW2BkYXRhKClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vZGF0YS8pCisgKiAtIFtgZGV0
YWNoKClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vZGV0YWNoLykKKyAqIC0gW2BlbXB0eSgpYF0o
aHR0cDovL2FwaS5qcXVlcnkuY29tL2VtcHR5LykKKyAqIC0gW2BlcSgpYF0oaHR0cDovL2FwaS5q
cXVlcnkuY29tL2VxLykKKyAqIC0gW2BmaW5kKClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vZmlu
ZC8pIC0gTGltaXRlZCB0byBsb29rdXBzIGJ5IHRhZyBuYW1lCisgKiAtIFtgaGFzQ2xhc3MoKWBd
KGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9oYXNDbGFzcy8pCisgKiAtIFtgaHRtbCgpYF0oaHR0cDov
L2FwaS5qcXVlcnkuY29tL2h0bWwvKQorICogLSBbYG5leHQoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5
LmNvbS9uZXh0LykgLSBEb2VzIG5vdCBzdXBwb3J0IHNlbGVjdG9ycworICogLSBbYG9uKClgXSho
dHRwOi8vYXBpLmpxdWVyeS5jb20vb24vKSAtIERvZXMgbm90IHN1cHBvcnQgbmFtZXNwYWNlcywg
c2VsZWN0b3JzIG9yIGV2ZW50RGF0YQorICogLSBbYG9mZigpYF0oaHR0cDovL2FwaS5qcXVlcnku
Y29tL29mZi8pIC0gRG9lcyBub3Qgc3VwcG9ydCBuYW1lc3BhY2VzIG9yIHNlbGVjdG9ycworICog
LSBbYG9uZSgpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL29uZS8pIC0gRG9lcyBub3Qgc3VwcG9y
dCBuYW1lc3BhY2VzIG9yIHNlbGVjdG9ycworICogLSBbYHBhcmVudCgpYF0oaHR0cDovL2FwaS5q
cXVlcnkuY29tL3BhcmVudC8pIC0gRG9lcyBub3Qgc3VwcG9ydCBzZWxlY3RvcnMKKyAqIC0gW2Bw
cmVwZW5kKClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vcHJlcGVuZC8pCisgKiAtIFtgcHJvcCgp
YF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL3Byb3AvKQorICogLSBbYHJlYWR5KClgXShodHRwOi8v
YXBpLmpxdWVyeS5jb20vcmVhZHkvKQorICogLSBbYHJlbW92ZSgpYF0oaHR0cDovL2FwaS5qcXVl
cnkuY29tL3JlbW92ZS8pCisgKiAtIFtgcmVtb3ZlQXR0cigpYF0oaHR0cDovL2FwaS5qcXVlcnku
Y29tL3JlbW92ZUF0dHIvKQorICogLSBbYHJlbW92ZUNsYXNzKClgXShodHRwOi8vYXBpLmpxdWVy
eS5jb20vcmVtb3ZlQ2xhc3MvKQorICogLSBbYHJlbW92ZURhdGEoKWBdKGh0dHA6Ly9hcGkuanF1
ZXJ5LmNvbS9yZW1vdmVEYXRhLykKKyAqIC0gW2ByZXBsYWNlV2l0aCgpYF0oaHR0cDovL2FwaS5q
cXVlcnkuY29tL3JlcGxhY2VXaXRoLykKKyAqIC0gW2B0ZXh0KClgXShodHRwOi8vYXBpLmpxdWVy
eS5jb20vdGV4dC8pCisgKiAtIFtgdG9nZ2xlQ2xhc3MoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNv
bS90b2dnbGVDbGFzcy8pCisgKiAtIFtgdHJpZ2dlckhhbmRsZXIoKWBdKGh0dHA6Ly9hcGkuanF1
ZXJ5LmNvbS90cmlnZ2VySGFuZGxlci8pIC0gUGFzc2VzIGEgZHVtbXkgZXZlbnQgb2JqZWN0IHRv
IGhhbmRsZXJzLgorICogLSBbYHVuYmluZCgpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL3VuYmlu
ZC8pIC0gRG9lcyBub3Qgc3VwcG9ydCBuYW1lc3BhY2VzCisgKiAtIFtgdmFsKClgXShodHRwOi8v
YXBpLmpxdWVyeS5jb20vdmFsLykKKyAqIC0gW2B3cmFwKClgXShodHRwOi8vYXBpLmpxdWVyeS5j
b20vd3JhcC8pCisgKgorICogIyMgalF1ZXJ5L2pxTGl0ZSBFeHRyYXMKKyAqIEFuZ3VsYXIgYWxz
byBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgbWV0aG9kcyBhbmQgZXZlbnRzIHRv
IGJvdGggalF1ZXJ5IGFuZCBqcUxpdGU6CisgKgorICogIyMjIEV2ZW50cworICogLSBgJGRlc3Ry
b3lgIC0gQW5ndWxhckpTIGludGVyY2VwdHMgYWxsIGpxTGl0ZS9qUXVlcnkncyBET00gZGVzdHJ1
Y3Rpb24gYXBpcyBhbmQgZmlyZXMgdGhpcyBldmVudAorICogICAgb24gYWxsIERPTSBub2RlcyBi
ZWluZyByZW1vdmVkLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBjbGVhbiB1cCBhbnkgM3JkIHBhcnR5
IGJpbmRpbmdzIHRvIHRoZSBET00KKyAqICAgIGVsZW1lbnQgYmVmb3JlIGl0IGlzIHJlbW92ZWQu
CisgKgorICogIyMjIE1ldGhvZHMKKyAqIC0gYGNvbnRyb2xsZXIobmFtZSlgIC0gcmV0cmlldmVz
IHRoZSBjb250cm9sbGVyIG9mIHRoZSBjdXJyZW50IGVsZW1lbnQgb3IgaXRzIHBhcmVudC4gQnkg
ZGVmYXVsdAorICogICByZXRyaWV2ZXMgY29udHJvbGxlciBhc3NvY2lhdGVkIHdpdGggdGhlIGBu
Z0NvbnRyb2xsZXJgIGRpcmVjdGl2ZS4gSWYgYG5hbWVgIGlzIHByb3ZpZGVkIGFzCisgKiAgIGNh
bWVsQ2FzZSBkaXJlY3RpdmUgbmFtZSwgdGhlbiB0aGUgY29udHJvbGxlciBmb3IgdGhpcyBkaXJl
Y3RpdmUgd2lsbCBiZSByZXRyaWV2ZWQgKGUuZy4KKyAqICAgYCduZ01vZGVsJ2ApLgorICogLSBg
aW5qZWN0b3IoKWAgLSByZXRyaWV2ZXMgdGhlIGluamVjdG9yIG9mIHRoZSBjdXJyZW50IGVsZW1l
bnQgb3IgaXRzIHBhcmVudC4KKyAqIC0gYHNjb3BlKClgIC0gcmV0cmlldmVzIHRoZSB7QGxpbmsg
bmcuJHJvb3RTY29wZS5TY29wZSBzY29wZX0gb2YgdGhlIGN1cnJlbnQKKyAqICAgZWxlbWVudCBv
ciBpdHMgcGFyZW50LiBSZXF1aXJlcyB7QGxpbmsgZ3VpZGUvcHJvZHVjdGlvbiNkaXNhYmxpbmct
ZGVidWctZGF0YSBEZWJ1ZyBEYXRhfSB0bworICogICBiZSBlbmFibGVkLgorICogLSBgaXNvbGF0
ZVNjb3BlKClgIC0gcmV0cmlldmVzIGFuIGlzb2xhdGUge0BsaW5rIG5nLiRyb290U2NvcGUuU2Nv
cGUgc2NvcGV9IGlmIG9uZSBpcyBhdHRhY2hlZCBkaXJlY3RseSB0byB0aGUKKyAqICAgY3VycmVu
dCBlbGVtZW50LiBUaGlzIGdldHRlciBzaG91bGQgYmUgdXNlZCBvbmx5IG9uIGVsZW1lbnRzIHRo
YXQgY29udGFpbiBhIGRpcmVjdGl2ZSB3aGljaCBzdGFydHMgYSBuZXcgaXNvbGF0ZQorICogICBz
Y29wZS4gQ2FsbGluZyBgc2NvcGUoKWAgb24gdGhpcyBlbGVtZW50IGFsd2F5cyByZXR1cm5zIHRo
ZSBvcmlnaW5hbCBub24taXNvbGF0ZSBzY29wZS4KKyAqICAgUmVxdWlyZXMge0BsaW5rIGd1aWRl
L3Byb2R1Y3Rpb24jZGlzYWJsaW5nLWRlYnVnLWRhdGEgRGVidWcgRGF0YX0gdG8gYmUgZW5hYmxl
ZC4KKyAqIC0gYGluaGVyaXRlZERhdGEoKWAgLSBzYW1lIGFzIGBkYXRhKClgLCBidXQgd2Fsa3Mg
dXAgdGhlIERPTSB1bnRpbCBhIHZhbHVlIGlzIGZvdW5kIG9yIHRoZSB0b3AKKyAqICAgcGFyZW50
IGVsZW1lbnQgaXMgcmVhY2hlZC4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ3xET01FbGVtZW50fSBl
bGVtZW50IEhUTUwgc3RyaW5nIG9yIERPTUVsZW1lbnQgdG8gYmUgd3JhcHBlZCBpbnRvIGpRdWVy
eS4KKyAqIEByZXR1cm5zIHtPYmplY3R9IGpRdWVyeSBvYmplY3QuCisgKi8KKworSlFMaXRlLmV4
cGFuZG8gPSAnbmczMzknOworCit2YXIganFDYWNoZSA9IEpRTGl0ZS5jYWNoZSA9IHt9LAorICAg
IGpxSWQgPSAxLAorICAgIGFkZEV2ZW50TGlzdGVuZXJGbiA9IGZ1bmN0aW9uKGVsZW1lbnQsIHR5
cGUsIGZuKSB7CisgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZm4sIGZhbHNl
KTsKKyAgICB9LAorICAgIHJlbW92ZUV2ZW50TGlzdGVuZXJGbiA9IGZ1bmN0aW9uKGVsZW1lbnQs
IHR5cGUsIGZuKSB7CisgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZm4s
IGZhbHNlKTsKKyAgICB9OworCisvKgorICogISEhIFRoaXMgaXMgYW4gdW5kb2N1bWVudGVkICJw
cml2YXRlIiBmdW5jdGlvbiAhISEKKyAqLworSlFMaXRlLl9kYXRhID0gZnVuY3Rpb24obm9kZSkg
eworICAvL2pRdWVyeSBhbHdheXMgcmV0dXJucyBhbiBvYmplY3Qgb24gY2FjaGUgbWlzcworICBy
ZXR1cm4gdGhpcy5jYWNoZVtub2RlW3RoaXMuZXhwYW5kb11dIHx8IHt9OworfTsKKworZnVuY3Rp
b24ganFOZXh0SWQoKSB7IHJldHVybiArK2pxSWQ7IH0KKworCit2YXIgU1BFQ0lBTF9DSEFSU19S
RUdFWFAgPSAvKFtcOlwtXF9dKyguKSkvZzsKK3ZhciBNT1pfSEFDS19SRUdFWFAgPSAvXm1veihb
QS1aXSkvOwordmFyIE1PVVNFX0VWRU5UX01BUD0geyBtb3VzZWxlYXZlOiAibW91c2VvdXQiLCBt
b3VzZWVudGVyOiAibW91c2VvdmVyIn07Cit2YXIganFMaXRlTWluRXJyID0gbWluRXJyKCdqcUxp
dGUnKTsKKworLyoqCisgKiBDb252ZXJ0cyBzbmFrZV9jYXNlIHRvIGNhbWVsQ2FzZS4KKyAqIEFs
c28gdGhlcmUgaXMgc3BlY2lhbCBjYXNlIGZvciBNb3ogcHJlZml4IHN0YXJ0aW5nIHdpdGggdXBw
ZXIgY2FzZSBsZXR0ZXIuCisgKiBAcGFyYW0gbmFtZSBOYW1lIHRvIG5vcm1hbGl6ZQorICovCitm
dW5jdGlvbiBjYW1lbENhc2UobmFtZSkgeworICByZXR1cm4gbmFtZS4KKyAgICByZXBsYWNlKFNQ
RUNJQUxfQ0hBUlNfUkVHRVhQLCBmdW5jdGlvbihfLCBzZXBhcmF0b3IsIGxldHRlciwgb2Zmc2V0
KSB7CisgICAgICByZXR1cm4gb2Zmc2V0ID8gbGV0dGVyLnRvVXBwZXJDYXNlKCkgOiBsZXR0ZXI7
CisgICAgfSkuCisgICAgcmVwbGFjZShNT1pfSEFDS19SRUdFWFAsICdNb3okMScpOworfQorCit2
YXIgU0lOR0xFX1RBR19SRUdFWFAgPSAvXjwoXHcrKVxzKlwvPz4oPzo8XC9cMT58KSQvOwordmFy
IEhUTUxfUkVHRVhQID0gLzx8JiM/XHcrOy87Cit2YXIgVEFHX05BTUVfUkVHRVhQID0gLzwoW1x3
Ol0rKS87Cit2YXIgWEhUTUxfVEFHX1JFR0VYUCA9IC88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8
aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilcLz4vZ2k7CisKK3ZhciB3
cmFwTWFwID0geworICAnb3B0aW9uJzogWzEsICc8c2VsZWN0IG11bHRpcGxlPSJtdWx0aXBsZSI+
JywgJzwvc2VsZWN0PiddLAorCisgICd0aGVhZCc6IFsxLCAnPHRhYmxlPicsICc8L3RhYmxlPidd
LAorICAnY29sJzogWzIsICc8dGFibGU+PGNvbGdyb3VwPicsICc8L2NvbGdyb3VwPjwvdGFibGU+
J10sCisgICd0cic6IFsyLCAnPHRhYmxlPjx0Ym9keT4nLCAnPC90Ym9keT48L3RhYmxlPiddLAor
ICAndGQnOiBbMywgJzx0YWJsZT48dGJvZHk+PHRyPicsICc8L3RyPjwvdGJvZHk+PC90YWJsZT4n
XSwKKyAgJ19kZWZhdWx0JzogWzAsICIiLCAiIl0KK307CisKK3dyYXBNYXAub3B0Z3JvdXAgPSB3
cmFwTWFwLm9wdGlvbjsKK3dyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5j
b2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7Cit3cmFwTWFwLnRoID0g
d3JhcE1hcC50ZDsKKworCitmdW5jdGlvbiBqcUxpdGVJc1RleHROb2RlKGh0bWwpIHsKKyAgcmV0
dXJuICFIVE1MX1JFR0VYUC50ZXN0KGh0bWwpOworfQorCitmdW5jdGlvbiBqcUxpdGVBY2NlcHRz
RGF0YShub2RlKSB7CisgIC8vIFRoZSB3aW5kb3cgb2JqZWN0IGNhbiBhY2NlcHQgZGF0YSBidXQg
aGFzIG5vIG5vZGVUeXBlCisgIC8vIE90aGVyd2lzZSB3ZSBhcmUgb25seSBpbnRlcmVzdGVkIGlu
IGVsZW1lbnRzICgxKSBhbmQgZG9jdW1lbnRzICg5KQorICB2YXIgbm9kZVR5cGUgPSBub2RlLm5v
ZGVUeXBlOworICByZXR1cm4gbm9kZVR5cGUgPT09IE5PREVfVFlQRV9FTEVNRU5UIHx8ICFub2Rl
VHlwZSB8fCBub2RlVHlwZSA9PT0gTk9ERV9UWVBFX0RPQ1VNRU5UOworfQorCitmdW5jdGlvbiBq
cUxpdGVIYXNEYXRhKG5vZGUpIHsKKyAgZm9yICh2YXIga2V5IGluIGpxQ2FjaGVbbm9kZS5uZzMz
OV0pIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKK2Z1bmN0
aW9uIGpxTGl0ZUJ1aWxkRnJhZ21lbnQoaHRtbCwgY29udGV4dCkgeworICB2YXIgdG1wLCB0YWcs
IHdyYXAsCisgICAgICBmcmFnbWVudCA9IGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgp
LAorICAgICAgbm9kZXMgPSBbXSwgaTsKKworICBpZiAoanFMaXRlSXNUZXh0Tm9kZShodG1sKSkg
eworICAgIC8vIENvbnZlcnQgbm9uLWh0bWwgaW50byBhIHRleHQgbm9kZQorICAgIG5vZGVzLnB1
c2goY29udGV4dC5jcmVhdGVUZXh0Tm9kZShodG1sKSk7CisgIH0gZWxzZSB7CisgICAgLy8gQ29u
dmVydCBodG1sIGludG8gRE9NIG5vZGVzCisgICAgdG1wID0gdG1wIHx8IGZyYWdtZW50LmFwcGVu
ZENoaWxkKGNvbnRleHQuY3JlYXRlRWxlbWVudCgiZGl2IikpOworICAgIHRhZyA9IChUQUdfTkFN
RV9SRUdFWFAuZXhlYyhodG1sKSB8fCBbIiIsICIiXSlbMV0udG9Mb3dlckNhc2UoKTsKKyAgICB3
cmFwID0gd3JhcE1hcFt0YWddIHx8IHdyYXBNYXAuX2RlZmF1bHQ7CisgICAgdG1wLmlubmVySFRN
TCA9IHdyYXBbMV0gKyBodG1sLnJlcGxhY2UoWEhUTUxfVEFHX1JFR0VYUCwgIjwkMT48LyQyPiIp
ICsgd3JhcFsyXTsKKworICAgIC8vIERlc2NlbmQgdGhyb3VnaCB3cmFwcGVycyB0byB0aGUgcmln
aHQgY29udGVudAorICAgIGkgPSB3cmFwWzBdOworICAgIHdoaWxlIChpLS0pIHsKKyAgICAgIHRt
cCA9IHRtcC5sYXN0Q2hpbGQ7CisgICAgfQorCisgICAgbm9kZXMgPSBjb25jYXQobm9kZXMsIHRt
cC5jaGlsZE5vZGVzKTsKKworICAgIHRtcCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7CisgICAgdG1w
LnRleHRDb250ZW50ID0gIiI7CisgIH0KKworICAvLyBSZW1vdmUgd3JhcHBlciBmcm9tIGZyYWdt
ZW50CisgIGZyYWdtZW50LnRleHRDb250ZW50ID0gIiI7CisgIGZyYWdtZW50LmlubmVySFRNTCA9
ICIiOyAvLyBDbGVhciBpbm5lciBIVE1MCisgIGZvckVhY2gobm9kZXMsIGZ1bmN0aW9uKG5vZGUp
IHsKKyAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChub2RlKTsKKyAgfSk7CisKKyAgcmV0dXJuIGZy
YWdtZW50OworfQorCitmdW5jdGlvbiBqcUxpdGVQYXJzZUhUTUwoaHRtbCwgY29udGV4dCkgewor
ICBjb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDsKKyAgdmFyIHBhcnNlZDsKKworICBpZiAo
KHBhcnNlZCA9IFNJTkdMRV9UQUdfUkVHRVhQLmV4ZWMoaHRtbCkpKSB7CisgICAgcmV0dXJuIFtj
b250ZXh0LmNyZWF0ZUVsZW1lbnQocGFyc2VkWzFdKV07CisgIH0KKworICBpZiAoKHBhcnNlZCA9
IGpxTGl0ZUJ1aWxkRnJhZ21lbnQoaHRtbCwgY29udGV4dCkpKSB7CisgICAgcmV0dXJuIHBhcnNl
ZC5jaGlsZE5vZGVzOworICB9CisKKyAgcmV0dXJuIFtdOworfQorCisvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2Z1bmN0aW9uIEpRTGl0ZShlbGVtZW50KSB7
CisgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSlFMaXRlKSB7CisgICAgcmV0dXJuIGVsZW1lbnQ7
CisgIH0KKworICB2YXIgYXJnSXNTdHJpbmc7CisKKyAgaWYgKGlzU3RyaW5nKGVsZW1lbnQpKSB7
CisgICAgZWxlbWVudCA9IHRyaW0oZWxlbWVudCk7CisgICAgYXJnSXNTdHJpbmcgPSB0cnVlOwor
ICB9CisgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBKUUxpdGUpKSB7CisgICAgaWYgKGFyZ0lzU3Ry
aW5nICYmIGVsZW1lbnQuY2hhckF0KDApICE9ICc8JykgeworICAgICAgdGhyb3cganFMaXRlTWlu
RXJyKCdub3NlbCcsICdMb29raW5nIHVwIGVsZW1lbnRzIHZpYSBzZWxlY3RvcnMgaXMgbm90IHN1
cHBvcnRlZCBieSBqcUxpdGUhIFNlZTogaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvYW5n
dWxhci5lbGVtZW50Jyk7CisgICAgfQorICAgIHJldHVybiBuZXcgSlFMaXRlKGVsZW1lbnQpOwor
ICB9CisKKyAgaWYgKGFyZ0lzU3RyaW5nKSB7CisgICAganFMaXRlQWRkTm9kZXModGhpcywganFM
aXRlUGFyc2VIVE1MKGVsZW1lbnQpKTsKKyAgfSBlbHNlIHsKKyAgICBqcUxpdGVBZGROb2Rlcyh0
aGlzLCBlbGVtZW50KTsKKyAgfQorfQorCitmdW5jdGlvbiBqcUxpdGVDbG9uZShlbGVtZW50KSB7
CisgIHJldHVybiBlbGVtZW50LmNsb25lTm9kZSh0cnVlKTsKK30KKworZnVuY3Rpb24ganFMaXRl
RGVhbG9jKGVsZW1lbnQsIG9ubHlEZXNjZW5kYW50cykgeworICBpZiAoIW9ubHlEZXNjZW5kYW50
cykganFMaXRlUmVtb3ZlRGF0YShlbGVtZW50KTsKKworICBpZiAoZWxlbWVudC5xdWVyeVNlbGVj
dG9yQWxsKSB7CisgICAgdmFyIGRlc2NlbmRhbnRzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxs
KCcqJyk7CisgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBkZXNjZW5kYW50cy5sZW5ndGg7IGkgPCBs
OyBpKyspIHsKKyAgICAgIGpxTGl0ZVJlbW92ZURhdGEoZGVzY2VuZGFudHNbaV0pOworICAgIH0K
KyAgfQorfQorCitmdW5jdGlvbiBqcUxpdGVPZmYoZWxlbWVudCwgdHlwZSwgZm4sIHVuc3VwcG9y
dGVkKSB7CisgIGlmIChpc0RlZmluZWQodW5zdXBwb3J0ZWQpKSB0aHJvdyBqcUxpdGVNaW5FcnIo
J29mZmFyZ3MnLCAnanFMaXRlI29mZigpIGRvZXMgbm90IHN1cHBvcnQgdGhlIGBzZWxlY3RvcmAg
YXJndW1lbnQnKTsKKworICB2YXIgZXhwYW5kb1N0b3JlID0ganFMaXRlRXhwYW5kb1N0b3JlKGVs
ZW1lbnQpOworICB2YXIgZXZlbnRzID0gZXhwYW5kb1N0b3JlICYmIGV4cGFuZG9TdG9yZS5ldmVu
dHM7CisgIHZhciBoYW5kbGUgPSBleHBhbmRvU3RvcmUgJiYgZXhwYW5kb1N0b3JlLmhhbmRsZTsK
KworICBpZiAoIWhhbmRsZSkgcmV0dXJuOyAvL25vIGxpc3RlbmVycyByZWdpc3RlcmVkCisKKyAg
aWYgKCF0eXBlKSB7CisgICAgZm9yICh0eXBlIGluIGV2ZW50cykgeworICAgICAgaWYgKHR5cGUg
IT09ICckZGVzdHJveScpIHsKKyAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lckZuKGVsZW1lbnQs
IHR5cGUsIGhhbmRsZSk7CisgICAgICB9CisgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdOworICAg
IH0KKyAgfSBlbHNlIHsKKyAgICBmb3JFYWNoKHR5cGUuc3BsaXQoJyAnKSwgZnVuY3Rpb24odHlw
ZSkgeworICAgICAgaWYgKGlzRGVmaW5lZChmbikpIHsKKyAgICAgICAgdmFyIGxpc3RlbmVyRm5z
ID0gZXZlbnRzW3R5cGVdOworICAgICAgICBhcnJheVJlbW92ZShsaXN0ZW5lckZucyB8fCBbXSwg
Zm4pOworICAgICAgICBpZiAobGlzdGVuZXJGbnMgJiYgbGlzdGVuZXJGbnMubGVuZ3RoID4gMCkg
eworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICByZW1vdmVF
dmVudExpc3RlbmVyRm4oZWxlbWVudCwgdHlwZSwgaGFuZGxlKTsKKyAgICAgIGRlbGV0ZSBldmVu
dHNbdHlwZV07CisgICAgfSk7CisgIH0KK30KKworZnVuY3Rpb24ganFMaXRlUmVtb3ZlRGF0YShl
bGVtZW50LCBuYW1lKSB7CisgIHZhciBleHBhbmRvSWQgPSBlbGVtZW50Lm5nMzM5OworICB2YXIg
ZXhwYW5kb1N0b3JlID0gZXhwYW5kb0lkICYmIGpxQ2FjaGVbZXhwYW5kb0lkXTsKKworICBpZiAo
ZXhwYW5kb1N0b3JlKSB7CisgICAgaWYgKG5hbWUpIHsKKyAgICAgIGRlbGV0ZSBleHBhbmRvU3Rv
cmUuZGF0YVtuYW1lXTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZXhwYW5kb1N0
b3JlLmhhbmRsZSkgeworICAgICAgaWYgKGV4cGFuZG9TdG9yZS5ldmVudHMuJGRlc3Ryb3kpIHsK
KyAgICAgICAgZXhwYW5kb1N0b3JlLmhhbmRsZSh7fSwgJyRkZXN0cm95Jyk7CisgICAgICB9Cisg
ICAgICBqcUxpdGVPZmYoZWxlbWVudCk7CisgICAgfQorICAgIGRlbGV0ZSBqcUNhY2hlW2V4cGFu
ZG9JZF07CisgICAgZWxlbWVudC5uZzMzOSA9IHVuZGVmaW5lZDsgLy8gZG9uJ3QgZGVsZXRlIERP
TSBleHBhbmRvcy4gSUUgYW5kIENocm9tZSBkb24ndCBsaWtlIGl0CisgIH0KK30KKworCitmdW5j
dGlvbiBqcUxpdGVFeHBhbmRvU3RvcmUoZWxlbWVudCwgY3JlYXRlSWZOZWNlc3NhcnkpIHsKKyAg
dmFyIGV4cGFuZG9JZCA9IGVsZW1lbnQubmczMzksCisgICAgICBleHBhbmRvU3RvcmUgPSBleHBh
bmRvSWQgJiYganFDYWNoZVtleHBhbmRvSWRdOworCisgIGlmIChjcmVhdGVJZk5lY2Vzc2FyeSAm
JiAhZXhwYW5kb1N0b3JlKSB7CisgICAgZWxlbWVudC5uZzMzOSA9IGV4cGFuZG9JZCA9IGpxTmV4
dElkKCk7CisgICAgZXhwYW5kb1N0b3JlID0ganFDYWNoZVtleHBhbmRvSWRdID0ge2V2ZW50czog
e30sIGRhdGE6IHt9LCBoYW5kbGU6IHVuZGVmaW5lZH07CisgIH0KKworICByZXR1cm4gZXhwYW5k
b1N0b3JlOworfQorCisKK2Z1bmN0aW9uIGpxTGl0ZURhdGEoZWxlbWVudCwga2V5LCB2YWx1ZSkg
eworICBpZiAoanFMaXRlQWNjZXB0c0RhdGEoZWxlbWVudCkpIHsKKworICAgIHZhciBpc1NpbXBs
ZVNldHRlciA9IGlzRGVmaW5lZCh2YWx1ZSk7CisgICAgdmFyIGlzU2ltcGxlR2V0dGVyID0gIWlz
U2ltcGxlU2V0dGVyICYmIGtleSAmJiAhaXNPYmplY3Qoa2V5KTsKKyAgICB2YXIgbWFzc0dldHRl
ciA9ICFrZXk7CisgICAgdmFyIGV4cGFuZG9TdG9yZSA9IGpxTGl0ZUV4cGFuZG9TdG9yZShlbGVt
ZW50LCAhaXNTaW1wbGVHZXR0ZXIpOworICAgIHZhciBkYXRhID0gZXhwYW5kb1N0b3JlICYmIGV4
cGFuZG9TdG9yZS5kYXRhOworCisgICAgaWYgKGlzU2ltcGxlU2V0dGVyKSB7IC8vIGRhdGEoJ2tl
eScsIHZhbHVlKQorICAgICAgZGF0YVtrZXldID0gdmFsdWU7CisgICAgfSBlbHNlIHsKKyAgICAg
IGlmIChtYXNzR2V0dGVyKSB7ICAvLyBkYXRhKCkKKyAgICAgICAgcmV0dXJuIGRhdGE7CisgICAg
ICB9IGVsc2UgeworICAgICAgICBpZiAoaXNTaW1wbGVHZXR0ZXIpIHsgLy8gZGF0YSgna2V5JykK
KyAgICAgICAgICAvLyBkb24ndCBmb3JjZSBjcmVhdGlvbiBvZiBleHBhbmRvU3RvcmUgaWYgaXQg
ZG9lc24ndCBleGlzdCB5ZXQKKyAgICAgICAgICByZXR1cm4gZGF0YSAmJiBkYXRhW2tleV07Cisg
ICAgICAgIH0gZWxzZSB7IC8vIG1hc3Mtc2V0dGVyOiBkYXRhKHtrZXkxOiB2YWwxLCBrZXkyOiB2
YWwyfSkKKyAgICAgICAgICBleHRlbmQoZGF0YSwga2V5KTsKKyAgICAgICAgfQorICAgICAgfQor
ICAgIH0KKyAgfQorfQorCitmdW5jdGlvbiBqcUxpdGVIYXNDbGFzcyhlbGVtZW50LCBzZWxlY3Rv
cikgeworICBpZiAoIWVsZW1lbnQuZ2V0QXR0cmlidXRlKSByZXR1cm4gZmFsc2U7CisgIHJldHVy
biAoKCIgIiArIChlbGVtZW50LmdldEF0dHJpYnV0ZSgnY2xhc3MnKSB8fCAnJykgKyAiICIpLnJl
cGxhY2UoL1tcblx0XS9nLCAiICIpLgorICAgICAgaW5kZXhPZigiICIgKyBzZWxlY3RvciArICIg
IikgPiAtMSk7Cit9CisKK2Z1bmN0aW9uIGpxTGl0ZVJlbW92ZUNsYXNzKGVsZW1lbnQsIGNzc0Ns
YXNzZXMpIHsKKyAgaWYgKGNzc0NsYXNzZXMgJiYgZWxlbWVudC5zZXRBdHRyaWJ1dGUpIHsKKyAg
ICBmb3JFYWNoKGNzc0NsYXNzZXMuc3BsaXQoJyAnKSwgZnVuY3Rpb24oY3NzQ2xhc3MpIHsKKyAg
ICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdjbGFzcycsIHRyaW0oCisgICAgICAgICAgKCIgIiAr
IChlbGVtZW50LmdldEF0dHJpYnV0ZSgnY2xhc3MnKSB8fCAnJykgKyAiICIpCisgICAgICAgICAg
LnJlcGxhY2UoL1tcblx0XS9nLCAiICIpCisgICAgICAgICAgLnJlcGxhY2UoIiAiICsgdHJpbShj
c3NDbGFzcykgKyAiICIsICIgIikpCisgICAgICApOworICAgIH0pOworICB9Cit9CisKK2Z1bmN0
aW9uIGpxTGl0ZUFkZENsYXNzKGVsZW1lbnQsIGNzc0NsYXNzZXMpIHsKKyAgaWYgKGNzc0NsYXNz
ZXMgJiYgZWxlbWVudC5zZXRBdHRyaWJ1dGUpIHsKKyAgICB2YXIgZXhpc3RpbmdDbGFzc2VzID0g
KCcgJyArIChlbGVtZW50LmdldEF0dHJpYnV0ZSgnY2xhc3MnKSB8fCAnJykgKyAnICcpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcblx0XS9nLCAiICIpOworCisgICAg
Zm9yRWFjaChjc3NDbGFzc2VzLnNwbGl0KCcgJyksIGZ1bmN0aW9uKGNzc0NsYXNzKSB7CisgICAg
ICBjc3NDbGFzcyA9IHRyaW0oY3NzQ2xhc3MpOworICAgICAgaWYgKGV4aXN0aW5nQ2xhc3Nlcy5p
bmRleE9mKCcgJyArIGNzc0NsYXNzICsgJyAnKSA9PT0gLTEpIHsKKyAgICAgICAgZXhpc3RpbmdD
bGFzc2VzICs9IGNzc0NsYXNzICsgJyAnOworICAgICAgfQorICAgIH0pOworCisgICAgZWxlbWVu
dC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgdHJpbShleGlzdGluZ0NsYXNzZXMpKTsKKyAgfQorfQor
CisKK2Z1bmN0aW9uIGpxTGl0ZUFkZE5vZGVzKHJvb3QsIGVsZW1lbnRzKSB7CisgIC8vIFRISVMg
Q09ERSBJUyBWRVJZIEhPVC4gRG9uJ3QgbWFrZSBjaGFuZ2VzIHdpdGhvdXQgYmVuY2htYXJraW5n
LgorCisgIGlmIChlbGVtZW50cykgeworCisgICAgLy8gaWYgYSBOb2RlICh0aGUgbW9zdCBjb21t
b24gY2FzZSkKKyAgICBpZiAoZWxlbWVudHMubm9kZVR5cGUpIHsKKyAgICAgIHJvb3Rbcm9vdC5s
ZW5ndGgrK10gPSBlbGVtZW50czsKKyAgICB9IGVsc2UgeworICAgICAgdmFyIGxlbmd0aCA9IGVs
ZW1lbnRzLmxlbmd0aDsKKworICAgICAgLy8gaWYgYW4gQXJyYXkgb3IgTm9kZUxpc3QgYW5kIG5v
dCBhIFdpbmRvdworICAgICAgaWYgKHR5cGVvZiBsZW5ndGggPT09ICdudW1iZXInICYmIGVsZW1l
bnRzLndpbmRvdyAhPT0gZWxlbWVudHMpIHsKKyAgICAgICAgaWYgKGxlbmd0aCkgeworICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHJvb3Rb
cm9vdC5sZW5ndGgrK10gPSBlbGVtZW50c1tpXTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgIH0gZWxzZSB7CisgICAgICAgIHJvb3Rbcm9vdC5sZW5ndGgrK10gPSBlbGVtZW50czsKKyAg
ICAgIH0KKyAgICB9CisgIH0KK30KKworCitmdW5jdGlvbiBqcUxpdGVDb250cm9sbGVyKGVsZW1l
bnQsIG5hbWUpIHsKKyAgcmV0dXJuIGpxTGl0ZUluaGVyaXRlZERhdGEoZWxlbWVudCwgJyQnICsg
KG5hbWUgfHwgJ25nQ29udHJvbGxlcicpICsgJ0NvbnRyb2xsZXInKTsKK30KKworZnVuY3Rpb24g
anFMaXRlSW5oZXJpdGVkRGF0YShlbGVtZW50LCBuYW1lLCB2YWx1ZSkgeworICAvLyBpZiBlbGVt
ZW50IGlzIHRoZSBkb2N1bWVudCBvYmplY3Qgd29yayB3aXRoIHRoZSBodG1sIGVsZW1lbnQgaW5z
dGVhZAorICAvLyB0aGlzIG1ha2VzICQoZG9jdW1lbnQpLnNjb3BlKCkgcG9zc2libGUKKyAgaWYg
KGVsZW1lbnQubm9kZVR5cGUgPT0gTk9ERV9UWVBFX0RPQ1VNRU5UKSB7CisgICAgZWxlbWVudCA9
IGVsZW1lbnQuZG9jdW1lbnRFbGVtZW50OworICB9CisgIHZhciBuYW1lcyA9IGlzQXJyYXkobmFt
ZSkgPyBuYW1lIDogW25hbWVdOworCisgIHdoaWxlIChlbGVtZW50KSB7CisgICAgZm9yICh2YXIg
aSA9IDAsIGlpID0gbmFtZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgaWYgKCh2YWx1
ZSA9IGpxTGl0ZS5kYXRhKGVsZW1lbnQsIG5hbWVzW2ldKSkgIT09IHVuZGVmaW5lZCkgcmV0dXJu
IHZhbHVlOworICAgIH0KKworICAgIC8vIElmIGRlYWxpbmcgd2l0aCBhIGRvY3VtZW50IGZyYWdt
ZW50IG5vZGUgd2l0aCBhIGhvc3QgZWxlbWVudCwgYW5kIG5vIHBhcmVudCwgdXNlIHRoZSBob3N0
CisgICAgLy8gZWxlbWVudCBhcyB0aGUgcGFyZW50LiBUaGlzIGVuYWJsZXMgZGlyZWN0aXZlcyB3
aXRoaW4gYSBTaGFkb3cgRE9NIG9yIHBvbHlmaWxsZWQgU2hhZG93IERPTQorICAgIC8vIHRvIGxv
b2t1cCBwYXJlbnQgY29udHJvbGxlcnMuCisgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9k
ZSB8fCAoZWxlbWVudC5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFX0RPQ1VNRU5UX0ZSQUdNRU5UICYm
IGVsZW1lbnQuaG9zdCk7CisgIH0KK30KKworZnVuY3Rpb24ganFMaXRlRW1wdHkoZWxlbWVudCkg
eworICBqcUxpdGVEZWFsb2MoZWxlbWVudCwgdHJ1ZSk7CisgIHdoaWxlIChlbGVtZW50LmZpcnN0
Q2hpbGQpIHsKKyAgICBlbGVtZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQuZmlyc3RDaGlsZCk7Cisg
IH0KK30KKworZnVuY3Rpb24ganFMaXRlUmVtb3ZlKGVsZW1lbnQsIGtlZXBEYXRhKSB7CisgIGlm
ICgha2VlcERhdGEpIGpxTGl0ZURlYWxvYyhlbGVtZW50KTsKKyAgdmFyIHBhcmVudCA9IGVsZW1l
bnQucGFyZW50Tm9kZTsKKyAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQp
OworfQorCisKK2Z1bmN0aW9uIGpxTGl0ZURvY3VtZW50TG9hZGVkKGFjdGlvbiwgd2luKSB7Cisg
IHdpbiA9IHdpbiB8fCB3aW5kb3c7CisgIGlmICh3aW4uZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0g
J2NvbXBsZXRlJykgeworICAgIC8vIEZvcmNlIHRoZSBhY3Rpb24gdG8gYmUgcnVuIGFzeW5jIGZv
ciBjb25zaXN0ZW50IGJlaGF2aW91cgorICAgIC8vIGZyb20gdGhlIGFjdGlvbidzIHBvaW50IG9m
IHZpZXcKKyAgICAvLyBpLmUuIGl0IHdpbGwgZGVmaW5pdGVseSBub3QgYmUgaW4gYSAkYXBwbHkK
KyAgICB3aW4uc2V0VGltZW91dChhY3Rpb24pOworICB9IGVsc2UgeworICAgIC8vIE5vIG5lZWQg
dG8gdW5iaW5kIHRoaXMgaGFuZGxlciBhcyBsb2FkIGlzIG9ubHkgZXZlciBjYWxsZWQgb25jZQor
ICAgIGpxTGl0ZSh3aW4pLm9uKCdsb2FkJywgYWN0aW9uKTsKKyAgfQorfQorCisvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIEZ1bmN0aW9ucyB3aGljaCBhcmUg
ZGVjbGFyZWQgZGlyZWN0bHkuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KK3ZhciBKUUxpdGVQcm90b3R5cGUgPSBKUUxpdGUucHJvdG90eXBlID0geworICByZWFk
eTogZnVuY3Rpb24oZm4pIHsKKyAgICB2YXIgZmlyZWQgPSBmYWxzZTsKKworICAgIGZ1bmN0aW9u
IHRyaWdnZXIoKSB7CisgICAgICBpZiAoZmlyZWQpIHJldHVybjsKKyAgICAgIGZpcmVkID0gdHJ1
ZTsKKyAgICAgIGZuKCk7CisgICAgfQorCisgICAgLy8gY2hlY2sgaWYgZG9jdW1lbnQgaXMgYWxy
ZWFkeSBsb2FkZWQKKyAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJykg
eworICAgICAgc2V0VGltZW91dCh0cmlnZ2VyKTsKKyAgICB9IGVsc2UgeworICAgICAgdGhpcy5v
bignRE9NQ29udGVudExvYWRlZCcsIHRyaWdnZXIpOyAvLyB3b3JrcyBmb3IgbW9kZXJuIGJyb3dz
ZXJzIGFuZCBJRTkKKyAgICAgIC8vIHdlIGNhbiBub3QgdXNlIGpxTGl0ZSBzaW5jZSB3ZSBhcmUg
bm90IGRvbmUgbG9hZGluZyBhbmQgalF1ZXJ5IGNvdWxkIGJlIGxvYWRlZCBsYXRlci4KKyAgICAg
IC8vIGpzaGludCAtVzA2NAorICAgICAgSlFMaXRlKHdpbmRvdykub24oJ2xvYWQnLCB0cmlnZ2Vy
KTsgLy8gZmFsbGJhY2sgdG8gd2luZG93Lm9ubG9hZCBmb3Igb3RoZXJzCisgICAgICAvLyBqc2hp
bnQgK1cwNjQKKyAgICB9CisgIH0sCisgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHsKKyAgICB2YXIg
dmFsdWUgPSBbXTsKKyAgICBmb3JFYWNoKHRoaXMsIGZ1bmN0aW9uKGUpIHsgdmFsdWUucHVzaCgn
JyArIGUpO30pOworICAgIHJldHVybiAnWycgKyB2YWx1ZS5qb2luKCcsICcpICsgJ10nOworICB9
LAorCisgIGVxOiBmdW5jdGlvbihpbmRleCkgeworICAgICAgcmV0dXJuIChpbmRleCA+PSAwKSA/
IGpxTGl0ZSh0aGlzW2luZGV4XSkgOiBqcUxpdGUodGhpc1t0aGlzLmxlbmd0aCArIGluZGV4XSk7
CisgIH0sCisKKyAgbGVuZ3RoOiAwLAorICBwdXNoOiBwdXNoLAorICBzb3J0OiBbXS5zb3J0LAor
ICBzcGxpY2U6IFtdLnNwbGljZQorfTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCisvLyBGdW5jdGlvbnMgaXRlcmF0aW5nIGdldHRlci9zZXR0ZXJzLgorLy8g
dGhlc2UgZnVuY3Rpb25zIHJldHVybiBzZWxmIG9uIHNldHRlciBhbmQKKy8vIHZhbHVlIG9uIGdl
dC4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwordmFyIEJPT0xF
QU5fQVRUUiA9IHt9OworZm9yRWFjaCgnbXVsdGlwbGUsc2VsZWN0ZWQsY2hlY2tlZCxkaXNhYmxl
ZCxyZWFkT25seSxyZXF1aXJlZCxvcGVuJy5zcGxpdCgnLCcpLCBmdW5jdGlvbih2YWx1ZSkgewor
ICBCT09MRUFOX0FUVFJbbG93ZXJjYXNlKHZhbHVlKV0gPSB2YWx1ZTsKK30pOwordmFyIEJPT0xF
QU5fRUxFTUVOVFMgPSB7fTsKK2ZvckVhY2goJ2lucHV0LHNlbGVjdCxvcHRpb24sdGV4dGFyZWEs
YnV0dG9uLGZvcm0sZGV0YWlscycuc3BsaXQoJywnKSwgZnVuY3Rpb24odmFsdWUpIHsKKyAgQk9P
TEVBTl9FTEVNRU5UU1t2YWx1ZV0gPSB0cnVlOworfSk7Cit2YXIgQUxJQVNFRF9BVFRSID0gewor
ICAnbmdNaW5sZW5ndGgnOiAnbWlubGVuZ3RoJywKKyAgJ25nTWF4bGVuZ3RoJzogJ21heGxlbmd0
aCcsCisgICduZ01pbic6ICdtaW4nLAorICAnbmdNYXgnOiAnbWF4JywKKyAgJ25nUGF0dGVybic6
ICdwYXR0ZXJuJworfTsKKworZnVuY3Rpb24gZ2V0Qm9vbGVhbkF0dHJOYW1lKGVsZW1lbnQsIG5h
bWUpIHsKKyAgLy8gY2hlY2sgZG9tIGxhc3Qgc2luY2Ugd2Ugd2lsbCBtb3N0IGxpa2VseSBmYWls
IG9uIG5hbWUKKyAgdmFyIGJvb2xlYW5BdHRyID0gQk9PTEVBTl9BVFRSW25hbWUudG9Mb3dlckNh
c2UoKV07CisKKyAgLy8gYm9vbGVhbkF0dHIgaXMgaGVyZSB0d2ljZSB0byBtaW5pbWl6ZSBET00g
YWNjZXNzCisgIHJldHVybiBib29sZWFuQXR0ciAmJiBCT09MRUFOX0VMRU1FTlRTW25vZGVOYW1l
XyhlbGVtZW50KV0gJiYgYm9vbGVhbkF0dHI7Cit9CisKK2Z1bmN0aW9uIGdldEFsaWFzZWRBdHRy
TmFtZShlbGVtZW50LCBuYW1lKSB7CisgIHZhciBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWU7
CisgIHJldHVybiAobm9kZU5hbWUgPT09ICdJTlBVVCcgfHwgbm9kZU5hbWUgPT09ICdURVhUQVJF
QScpICYmIEFMSUFTRURfQVRUUltuYW1lXTsKK30KKworZm9yRWFjaCh7CisgIGRhdGE6IGpxTGl0
ZURhdGEsCisgIHJlbW92ZURhdGE6IGpxTGl0ZVJlbW92ZURhdGEsCisgIGhhc0RhdGE6IGpxTGl0
ZUhhc0RhdGEKK30sIGZ1bmN0aW9uKGZuLCBuYW1lKSB7CisgIEpRTGl0ZVtuYW1lXSA9IGZuOwor
fSk7CisKK2ZvckVhY2goeworICBkYXRhOiBqcUxpdGVEYXRhLAorICBpbmhlcml0ZWREYXRhOiBq
cUxpdGVJbmhlcml0ZWREYXRhLAorCisgIHNjb3BlOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAg
Ly8gQ2FuJ3QgdXNlIGpxTGl0ZURhdGEgaGVyZSBkaXJlY3RseSBzbyB3ZSBzdGF5IGNvbXBhdGli
bGUgd2l0aCBqUXVlcnkhCisgICAgcmV0dXJuIGpxTGl0ZS5kYXRhKGVsZW1lbnQsICckc2NvcGUn
KSB8fCBqcUxpdGVJbmhlcml0ZWREYXRhKGVsZW1lbnQucGFyZW50Tm9kZSB8fCBlbGVtZW50LCBb
JyRpc29sYXRlU2NvcGUnLCAnJHNjb3BlJ10pOworICB9LAorCisgIGlzb2xhdGVTY29wZTogZnVu
Y3Rpb24oZWxlbWVudCkgeworICAgIC8vIENhbid0IHVzZSBqcUxpdGVEYXRhIGhlcmUgZGlyZWN0
bHkgc28gd2Ugc3RheSBjb21wYXRpYmxlIHdpdGggalF1ZXJ5IQorICAgIHJldHVybiBqcUxpdGUu
ZGF0YShlbGVtZW50LCAnJGlzb2xhdGVTY29wZScpIHx8IGpxTGl0ZS5kYXRhKGVsZW1lbnQsICck
aXNvbGF0ZVNjb3BlTm9UZW1wbGF0ZScpOworICB9LAorCisgIGNvbnRyb2xsZXI6IGpxTGl0ZUNv
bnRyb2xsZXIsCisKKyAgaW5qZWN0b3I6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICByZXR1cm4g
anFMaXRlSW5oZXJpdGVkRGF0YShlbGVtZW50LCAnJGluamVjdG9yJyk7CisgIH0sCisKKyAgcmVt
b3ZlQXR0cjogZnVuY3Rpb24oZWxlbWVudCwgbmFtZSkgeworICAgIGVsZW1lbnQucmVtb3ZlQXR0
cmlidXRlKG5hbWUpOworICB9LAorCisgIGhhc0NsYXNzOiBqcUxpdGVIYXNDbGFzcywKKworICBj
c3M6IGZ1bmN0aW9uKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7CisgICAgbmFtZSA9IGNhbWVsQ2Fz
ZShuYW1lKTsKKworICAgIGlmIChpc0RlZmluZWQodmFsdWUpKSB7CisgICAgICBlbGVtZW50LnN0
eWxlW25hbWVdID0gdmFsdWU7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBlbGVtZW50LnN0
eWxlW25hbWVdOworICAgIH0KKyAgfSwKKworICBhdHRyOiBmdW5jdGlvbihlbGVtZW50LCBuYW1l
LCB2YWx1ZSkgeworICAgIHZhciBub2RlVHlwZSA9IGVsZW1lbnQubm9kZVR5cGU7CisgICAgaWYg
KG5vZGVUeXBlID09PSBOT0RFX1RZUEVfVEVYVCB8fCBub2RlVHlwZSA9PT0gTk9ERV9UWVBFX0FU
VFJJQlVURSB8fCBub2RlVHlwZSA9PT0gTk9ERV9UWVBFX0NPTU1FTlQpIHsKKyAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgdmFyIGxvd2VyY2FzZWROYW1lID0gbG93ZXJjYXNlKG5hbWUpOworICAg
IGlmIChCT09MRUFOX0FUVFJbbG93ZXJjYXNlZE5hbWVdKSB7CisgICAgICBpZiAoaXNEZWZpbmVk
KHZhbHVlKSkgeworICAgICAgICBpZiAoISF2YWx1ZSkgeworICAgICAgICAgIGVsZW1lbnRbbmFt
ZV0gPSB0cnVlOworICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIGxvd2VyY2Fz
ZWROYW1lKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBlbGVtZW50W25hbWVdID0gZmFs
c2U7CisgICAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobG93ZXJjYXNlZE5hbWUpOwor
ICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gKGVsZW1lbnRbbmFtZV0g
fHwKKyAgICAgICAgICAgICAgICAgKGVsZW1lbnQuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0obmFt
ZSkgfHwgbm9vcCkuc3BlY2lmaWVkKQorICAgICAgICAgICAgICAgPyBsb3dlcmNhc2VkTmFtZQor
ICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7CisgICAgICB9CisgICAgfSBlbHNlIGlmIChpc0Rl
ZmluZWQodmFsdWUpKSB7CisgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7
CisgICAgfSBlbHNlIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZSkgeworICAgICAgLy8gdGhlIGV4
dHJhIGFyZ3VtZW50ICIyIiBpcyB0byBnZXQgdGhlIHJpZ2h0IHRoaW5nIGZvciBhLmhyZWYgaW4g
SUUsIHNlZSBqUXVlcnkgY29kZQorICAgICAgLy8gc29tZSBlbGVtZW50cyAoZS5nLiBEb2N1bWVu
dCkgZG9uJ3QgaGF2ZSBnZXQgYXR0cmlidXRlLCBzbyByZXR1cm4gdW5kZWZpbmVkCisgICAgICB2
YXIgcmV0ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUobmFtZSwgMik7CisgICAgICAvLyBub3JtYWxp
emUgbm9uLWV4aXN0aW5nIGF0dHJpYnV0ZXMgdG8gdW5kZWZpbmVkIChhcyBqUXVlcnkpCisgICAg
ICByZXR1cm4gcmV0ID09PSBudWxsID8gdW5kZWZpbmVkIDogcmV0OworICAgIH0KKyAgfSwKKwor
ICBwcm9wOiBmdW5jdGlvbihlbGVtZW50LCBuYW1lLCB2YWx1ZSkgeworICAgIGlmIChpc0RlZmlu
ZWQodmFsdWUpKSB7CisgICAgICBlbGVtZW50W25hbWVdID0gdmFsdWU7CisgICAgfSBlbHNlIHsK
KyAgICAgIHJldHVybiBlbGVtZW50W25hbWVdOworICAgIH0KKyAgfSwKKworICB0ZXh0OiAoZnVu
Y3Rpb24oKSB7CisgICAgZ2V0VGV4dC4kZHYgPSAnJzsKKyAgICByZXR1cm4gZ2V0VGV4dDsKKwor
ICAgIGZ1bmN0aW9uIGdldFRleHQoZWxlbWVudCwgdmFsdWUpIHsKKyAgICAgIGlmIChpc1VuZGVm
aW5lZCh2YWx1ZSkpIHsKKyAgICAgICAgdmFyIG5vZGVUeXBlID0gZWxlbWVudC5ub2RlVHlwZTsK
KyAgICAgICAgcmV0dXJuIChub2RlVHlwZSA9PT0gTk9ERV9UWVBFX0VMRU1FTlQgfHwgbm9kZVR5
cGUgPT09IE5PREVfVFlQRV9URVhUKSA/IGVsZW1lbnQudGV4dENvbnRlbnQgOiAnJzsKKyAgICAg
IH0KKyAgICAgIGVsZW1lbnQudGV4dENvbnRlbnQgPSB2YWx1ZTsKKyAgICB9CisgIH0pKCksCisK
KyAgdmFsOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZSkgeworICAgIGlmIChpc1VuZGVmaW5lZCh2
YWx1ZSkpIHsKKyAgICAgIGlmIChlbGVtZW50Lm11bHRpcGxlICYmIG5vZGVOYW1lXyhlbGVtZW50
KSA9PT0gJ3NlbGVjdCcpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IFtdOworICAgICAgICBmb3JF
YWNoKGVsZW1lbnQub3B0aW9ucywgZnVuY3Rpb24ob3B0aW9uKSB7CisgICAgICAgICAgaWYgKG9w
dGlvbi5zZWxlY3RlZCkgeworICAgICAgICAgICAgcmVzdWx0LnB1c2gob3B0aW9uLnZhbHVlIHx8
IG9wdGlvbi50ZXh0KTsKKyAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4g
cmVzdWx0Lmxlbmd0aCA9PT0gMCA/IG51bGwgOiByZXN1bHQ7CisgICAgICB9CisgICAgICByZXR1
cm4gZWxlbWVudC52YWx1ZTsKKyAgICB9CisgICAgZWxlbWVudC52YWx1ZSA9IHZhbHVlOworICB9
LAorCisgIGh0bWw6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlKSB7CisgICAgaWYgKGlzVW5kZWZp
bmVkKHZhbHVlKSkgeworICAgICAgcmV0dXJuIGVsZW1lbnQuaW5uZXJIVE1MOworICAgIH0KKyAg
ICBqcUxpdGVEZWFsb2MoZWxlbWVudCwgdHJ1ZSk7CisgICAgZWxlbWVudC5pbm5lckhUTUwgPSB2
YWx1ZTsKKyAgfSwKKworICBlbXB0eToganFMaXRlRW1wdHkKK30sIGZ1bmN0aW9uKGZuLCBuYW1l
KSB7CisgIC8qKgorICAgKiBQcm9wZXJ0aWVzOiB3cml0ZXMgcmV0dXJuIHNlbGVjdGlvbiwgcmVh
ZHMgcmV0dXJuIGZpcnN0IHZhbHVlCisgICAqLworICBKUUxpdGUucHJvdG90eXBlW25hbWVdID0g
ZnVuY3Rpb24oYXJnMSwgYXJnMikgeworICAgIHZhciBpLCBrZXk7CisgICAgdmFyIG5vZGVDb3Vu
dCA9IHRoaXMubGVuZ3RoOworCisgICAgLy8ganFMaXRlSGFzQ2xhc3MgaGFzIG9ubHkgdHdvIGFy
Z3VtZW50cywgYnV0IGlzIGEgZ2V0dGVyLW9ubHkgZm4sIHNvIHdlIG5lZWQgdG8gc3BlY2lhbC1j
YXNlIGl0CisgICAgLy8gaW4gYSB3YXkgdGhhdCBzdXJ2aXZlcyBtaW5pZmljYXRpb24uCisgICAg
Ly8ganFMaXRlRW1wdHkgdGFrZXMgbm8gYXJndW1lbnRzIGJ1dCBpcyBhIHNldHRlci4KKyAgICBp
ZiAoZm4gIT09IGpxTGl0ZUVtcHR5ICYmCisgICAgICAgICgoKGZuLmxlbmd0aCA9PSAyICYmIChm
biAhPT0ganFMaXRlSGFzQ2xhc3MgJiYgZm4gIT09IGpxTGl0ZUNvbnRyb2xsZXIpKSA/IGFyZzEg
OiBhcmcyKSA9PT0gdW5kZWZpbmVkKSkgeworICAgICAgaWYgKGlzT2JqZWN0KGFyZzEpKSB7CisK
KyAgICAgICAgLy8gd2UgYXJlIGEgd3JpdGUsIGJ1dCB0aGUgb2JqZWN0IHByb3BlcnRpZXMgYXJl
IHRoZSBrZXkvdmFsdWVzCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBub2RlQ291bnQ7IGkrKykg
eworICAgICAgICAgIGlmIChmbiA9PT0ganFMaXRlRGF0YSkgeworICAgICAgICAgICAgLy8gZGF0
YSgpIHRha2VzIHRoZSB3aG9sZSBvYmplY3QgaW4galF1ZXJ5CisgICAgICAgICAgICBmbih0aGlz
W2ldLCBhcmcxKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yIChrZXkgaW4g
YXJnMSkgeworICAgICAgICAgICAgICBmbih0aGlzW2ldLCBrZXksIGFyZzFba2V5XSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIHJldHVybiBzZWxm
IGZvciBjaGFpbmluZworICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIHdlIGFyZSBhIHJlYWQsIHNvIHJlYWQgdGhlIGZpcnN0IGNoaWxkLgorICAgICAgICAv
LyBUT0RPOiBkbyB3ZSBzdGlsbCBuZWVkIHRoaXM/CisgICAgICAgIHZhciB2YWx1ZSA9IGZuLiRk
djsKKyAgICAgICAgLy8gT25seSBpZiB3ZSBoYXZlICRkdiBkbyB3ZSBpdGVyYXRlIG92ZXIgYWxs
LCBvdGhlcndpc2UgaXQgaXMganVzdCB0aGUgZmlyc3QgZWxlbWVudC4KKyAgICAgICAgdmFyIGpq
ID0gKHZhbHVlID09PSB1bmRlZmluZWQpID8gTWF0aC5taW4obm9kZUNvdW50LCAxKSA6IG5vZGVD
b3VudDsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBqajsgaisrKSB7CisgICAgICAgICAg
dmFyIG5vZGVWYWx1ZSA9IGZuKHRoaXNbal0sIGFyZzEsIGFyZzIpOworICAgICAgICAgIHZhbHVl
ID0gdmFsdWUgPyB2YWx1ZSArIG5vZGVWYWx1ZSA6IG5vZGVWYWx1ZTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdmFsdWU7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIHdlIGFy
ZSBhIHdyaXRlLCBzbyBhcHBseSB0byBhbGwgY2hpbGRyZW4KKyAgICAgIGZvciAoaSA9IDA7IGkg
PCBub2RlQ291bnQ7IGkrKykgeworICAgICAgICBmbih0aGlzW2ldLCBhcmcxLCBhcmcyKTsKKyAg
ICAgIH0KKyAgICAgIC8vIHJldHVybiBzZWxmIGZvciBjaGFpbmluZworICAgICAgcmV0dXJuIHRo
aXM7CisgICAgfQorICB9OworfSk7CisKK2Z1bmN0aW9uIGNyZWF0ZUV2ZW50SGFuZGxlcihlbGVt
ZW50LCBldmVudHMpIHsKKyAgdmFyIGV2ZW50SGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50LCB0eXBl
KSB7CisgICAgLy8galF1ZXJ5IHNwZWNpZmljIGFwaQorICAgIGV2ZW50LmlzRGVmYXVsdFByZXZl
bnRlZCA9IGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuIGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQ7
CisgICAgfTsKKworICAgIHZhciBldmVudEZucyA9IGV2ZW50c1t0eXBlIHx8IGV2ZW50LnR5cGVd
OworICAgIHZhciBldmVudEZuc0xlbmd0aCA9IGV2ZW50Rm5zID8gZXZlbnRGbnMubGVuZ3RoIDog
MDsKKworICAgIGlmICghZXZlbnRGbnNMZW5ndGgpIHJldHVybjsKKworICAgIGlmIChpc1VuZGVm
aW5lZChldmVudC5pbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQpKSB7CisgICAgICB2YXIgb3Jp
Z2luYWxTdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gPSBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFn
YXRpb247CisgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgZXZlbnQuaW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gdHJ1ZTsKKwor
ICAgICAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSB7CisgICAgICAgICAgZXZlbnQuc3Rv
cFByb3BhZ2F0aW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAob3JpZ2luYWxTdG9wSW1t
ZWRpYXRlUHJvcGFnYXRpb24pIHsKKyAgICAgICAgICBvcmlnaW5hbFN0b3BJbW1lZGlhdGVQcm9w
YWdhdGlvbi5jYWxsKGV2ZW50KTsKKyAgICAgICAgfQorICAgICAgfTsKKyAgICB9CisKKyAgICBl
dmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IGZ1bmN0aW9uKCkgeworICAgICAg
cmV0dXJuIGV2ZW50LmltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9PT0gdHJ1ZTsKKyAgICB9
OworCisgICAgLy8gQ29weSBldmVudCBoYW5kbGVycyBpbiBjYXNlIGV2ZW50IGhhbmRsZXJzIGFy
cmF5IGlzIG1vZGlmaWVkIGR1cmluZyBleGVjdXRpb24uCisgICAgaWYgKChldmVudEZuc0xlbmd0
aCA+IDEpKSB7CisgICAgICBldmVudEZucyA9IHNoYWxsb3dDb3B5KGV2ZW50Rm5zKTsKKyAgICB9
CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50Rm5zTGVuZ3RoOyBpKyspIHsKKyAgICAg
IGlmICghZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSkgeworICAgICAgICBl
dmVudEZuc1tpXS5jYWxsKGVsZW1lbnQsIGV2ZW50KTsKKyAgICAgIH0KKyAgICB9CisgIH07CisK
KyAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2sgZm9yIGFuZ3VsYXJNb2Nrcy9jbGVhckRhdGFDYWNo
ZSB0aGF0IG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRlcmVnaXN0ZXIgYWxsCisgIC8vICAgICAgIGV2
ZW50cyBvbiBgZWxlbWVudGAKKyAgZXZlbnRIYW5kbGVyLmVsZW0gPSBlbGVtZW50OworICByZXR1
cm4gZXZlbnRIYW5kbGVyOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KKy8vIEZ1bmN0aW9ucyBpdGVyYXRpbmcgdHJhdmVyc2FsLgorLy8gVGhlc2UgZnVu
Y3Rpb25zIGNoYWluIHJlc3VsdHMgaW50byBhIHNpbmdsZQorLy8gc2VsZWN0b3IuCisvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2ZvckVhY2goeworICByZW1vdmVE
YXRhOiBqcUxpdGVSZW1vdmVEYXRhLAorCisgIG9uOiBmdW5jdGlvbiBqcUxpdGVPbihlbGVtZW50
LCB0eXBlLCBmbiwgdW5zdXBwb3J0ZWQpIHsKKyAgICBpZiAoaXNEZWZpbmVkKHVuc3VwcG9ydGVk
KSkgdGhyb3cganFMaXRlTWluRXJyKCdvbmFyZ3MnLCAnanFMaXRlI29uKCkgZG9lcyBub3Qgc3Vw
cG9ydCB0aGUgYHNlbGVjdG9yYCBvciBgZXZlbnREYXRhYCBwYXJhbWV0ZXJzJyk7CisKKyAgICAv
LyBEbyBub3QgYWRkIGV2ZW50IGhhbmRsZXJzIHRvIG5vbi1lbGVtZW50cyBiZWNhdXNlIHRoZXkg
d2lsbCBub3QgYmUgY2xlYW5lZCB1cC4KKyAgICBpZiAoIWpxTGl0ZUFjY2VwdHNEYXRhKGVsZW1l
bnQpKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgdmFyIGV4cGFuZG9TdG9yZSA9IGpx
TGl0ZUV4cGFuZG9TdG9yZShlbGVtZW50LCB0cnVlKTsKKyAgICB2YXIgZXZlbnRzID0gZXhwYW5k
b1N0b3JlLmV2ZW50czsKKyAgICB2YXIgaGFuZGxlID0gZXhwYW5kb1N0b3JlLmhhbmRsZTsKKwor
ICAgIGlmICghaGFuZGxlKSB7CisgICAgICBoYW5kbGUgPSBleHBhbmRvU3RvcmUuaGFuZGxlID0g
Y3JlYXRlRXZlbnRIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cyk7CisgICAgfQorCisgICAgLy8gaHR0
cDovL2pzcGVyZi5jb20vc3RyaW5nLWluZGV4b2YtdnMtc3BsaXQKKyAgICB2YXIgdHlwZXMgPSB0
eXBlLmluZGV4T2YoJyAnKSA+PSAwID8gdHlwZS5zcGxpdCgnICcpIDogW3R5cGVdOworICAgIHZh
ciBpID0gdHlwZXMubGVuZ3RoOworCisgICAgd2hpbGUgKGktLSkgeworICAgICAgdHlwZSA9IHR5
cGVzW2ldOworICAgICAgdmFyIGV2ZW50Rm5zID0gZXZlbnRzW3R5cGVdOworCisgICAgICBpZiAo
IWV2ZW50Rm5zKSB7CisgICAgICAgIGV2ZW50c1t0eXBlXSA9IFtdOworCisgICAgICAgIGlmICh0
eXBlID09PSAnbW91c2VlbnRlcicgfHwgdHlwZSA9PT0gJ21vdXNlbGVhdmUnKSB7CisgICAgICAg
ICAgLy8gUmVmZXIgdG8galF1ZXJ5J3MgaW1wbGVtZW50YXRpb24gb2YgbW91c2VlbnRlciAmIG1v
dXNlbGVhdmUKKyAgICAgICAgICAvLyBSZWFkIGFib3V0IG1vdXNlZW50ZXIgYW5kIG1vdXNlbGVh
dmU6CisgICAgICAgICAgLy8gaHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9qcy9ldmVudHNfbW91
c2UuaHRtbCNsaW5rOAorCisgICAgICAgICAganFMaXRlT24oZWxlbWVudCwgTU9VU0VfRVZFTlRf
TUFQW3R5cGVdLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRo
aXMsIHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0OworICAgICAgICAgICAgLy8gRm9yIG1v
dXNlbnRlci9sZWF2ZSBjYWxsIHRoZSBoYW5kbGVyIGlmIHJlbGF0ZWQgaXMgb3V0c2lkZSB0aGUg
dGFyZ2V0LgorICAgICAgICAgICAgLy8gTkI6IE5vIHJlbGF0ZWRUYXJnZXQgaWYgdGhlIG1vdXNl
IGxlZnQvZW50ZXJlZCB0aGUgYnJvd3NlciB3aW5kb3cKKyAgICAgICAgICAgIGlmICghcmVsYXRl
ZCB8fCAocmVsYXRlZCAhPT0gdGFyZ2V0ICYmICF0YXJnZXQuY29udGFpbnMocmVsYXRlZCkpKSB7
CisgICAgICAgICAgICAgIGhhbmRsZShldmVudCwgdHlwZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgfSk7CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpZiAodHlwZSAhPT0gJyRk
ZXN0cm95JykgeworICAgICAgICAgICAgYWRkRXZlbnRMaXN0ZW5lckZuKGVsZW1lbnQsIHR5cGUs
IGhhbmRsZSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGV2ZW50Rm5zID0gZXZl
bnRzW3R5cGVdOworICAgICAgfQorICAgICAgZXZlbnRGbnMucHVzaChmbik7CisgICAgfQorICB9
LAorCisgIG9mZjoganFMaXRlT2ZmLAorCisgIG9uZTogZnVuY3Rpb24oZWxlbWVudCwgdHlwZSwg
Zm4pIHsKKyAgICBlbGVtZW50ID0ganFMaXRlKGVsZW1lbnQpOworCisgICAgLy9hZGQgdGhlIGxp
c3RlbmVyIHR3aWNlIHNvIHRoYXQgd2hlbiBpdCBpcyBjYWxsZWQKKyAgICAvL3lvdSBjYW4gcmVt
b3ZlIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBhbmQgc3RpbGwgYmUKKyAgICAvL2FibGUgdG8gY2Fs
bCBlbGVtZW50Lm9mZihldiwgZm4pIG5vcm1hbGx5CisgICAgZWxlbWVudC5vbih0eXBlLCBmdW5j
dGlvbiBvbkZuKCkgeworICAgICAgZWxlbWVudC5vZmYodHlwZSwgZm4pOworICAgICAgZWxlbWVu
dC5vZmYodHlwZSwgb25Gbik7CisgICAgfSk7CisgICAgZWxlbWVudC5vbih0eXBlLCBmbik7Cisg
IH0sCisKKyAgcmVwbGFjZVdpdGg6IGZ1bmN0aW9uKGVsZW1lbnQsIHJlcGxhY2VOb2RlKSB7Cisg
ICAgdmFyIGluZGV4LCBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7CisgICAganFMaXRlRGVh
bG9jKGVsZW1lbnQpOworICAgIGZvckVhY2gobmV3IEpRTGl0ZShyZXBsYWNlTm9kZSksIGZ1bmN0
aW9uKG5vZGUpIHsKKyAgICAgIGlmIChpbmRleCkgeworICAgICAgICBwYXJlbnQuaW5zZXJ0QmVm
b3JlKG5vZGUsIGluZGV4Lm5leHRTaWJsaW5nKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHBh
cmVudC5yZXBsYWNlQ2hpbGQobm9kZSwgZWxlbWVudCk7CisgICAgICB9CisgICAgICBpbmRleCA9
IG5vZGU7CisgICAgfSk7CisgIH0sCisKKyAgY2hpbGRyZW46IGZ1bmN0aW9uKGVsZW1lbnQpIHsK
KyAgICB2YXIgY2hpbGRyZW4gPSBbXTsKKyAgICBmb3JFYWNoKGVsZW1lbnQuY2hpbGROb2Rlcywg
ZnVuY3Rpb24oZWxlbWVudCkgeworICAgICAgaWYgKGVsZW1lbnQubm9kZVR5cGUgPT09IE5PREVf
VFlQRV9FTEVNRU5UKSB7CisgICAgICAgIGNoaWxkcmVuLnB1c2goZWxlbWVudCk7CisgICAgICB9
CisgICAgfSk7CisgICAgcmV0dXJuIGNoaWxkcmVuOworICB9LAorCisgIGNvbnRlbnRzOiBmdW5j
dGlvbihlbGVtZW50KSB7CisgICAgcmV0dXJuIGVsZW1lbnQuY29udGVudERvY3VtZW50IHx8IGVs
ZW1lbnQuY2hpbGROb2RlcyB8fCBbXTsKKyAgfSwKKworICBhcHBlbmQ6IGZ1bmN0aW9uKGVsZW1l
bnQsIG5vZGUpIHsKKyAgICB2YXIgbm9kZVR5cGUgPSBlbGVtZW50Lm5vZGVUeXBlOworICAgIGlm
IChub2RlVHlwZSAhPT0gTk9ERV9UWVBFX0VMRU1FTlQgJiYgbm9kZVR5cGUgIT09IE5PREVfVFlQ
RV9ET0NVTUVOVF9GUkFHTUVOVCkgcmV0dXJuOworCisgICAgbm9kZSA9IG5ldyBKUUxpdGUobm9k
ZSk7CisKKyAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBub2RlLmxlbmd0aDsgaSA8IGlpOyBpKysp
IHsKKyAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07CisgICAgICBlbGVtZW50LmFwcGVuZENoaWxk
KGNoaWxkKTsKKyAgICB9CisgIH0sCisKKyAgcHJlcGVuZDogZnVuY3Rpb24oZWxlbWVudCwgbm9k
ZSkgeworICAgIGlmIChlbGVtZW50Lm5vZGVUeXBlID09PSBOT0RFX1RZUEVfRUxFTUVOVCkgewor
ICAgICAgdmFyIGluZGV4ID0gZWxlbWVudC5maXJzdENoaWxkOworICAgICAgZm9yRWFjaChuZXcg
SlFMaXRlKG5vZGUpLCBmdW5jdGlvbihjaGlsZCkgeworICAgICAgICBlbGVtZW50Lmluc2VydEJl
Zm9yZShjaGlsZCwgaW5kZXgpOworICAgICAgfSk7CisgICAgfQorICB9LAorCisgIHdyYXA6IGZ1
bmN0aW9uKGVsZW1lbnQsIHdyYXBOb2RlKSB7CisgICAgd3JhcE5vZGUgPSBqcUxpdGUod3JhcE5v
ZGUpLmVxKDApLmNsb25lKClbMF07CisgICAgdmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9k
ZTsKKyAgICBpZiAocGFyZW50KSB7CisgICAgICBwYXJlbnQucmVwbGFjZUNoaWxkKHdyYXBOb2Rl
LCBlbGVtZW50KTsKKyAgICB9CisgICAgd3JhcE5vZGUuYXBwZW5kQ2hpbGQoZWxlbWVudCk7Cisg
IH0sCisKKyAgcmVtb3ZlOiBqcUxpdGVSZW1vdmUsCisKKyAgZGV0YWNoOiBmdW5jdGlvbihlbGVt
ZW50KSB7CisgICAganFMaXRlUmVtb3ZlKGVsZW1lbnQsIHRydWUpOworICB9LAorCisgIGFmdGVy
OiBmdW5jdGlvbihlbGVtZW50LCBuZXdFbGVtZW50KSB7CisgICAgdmFyIGluZGV4ID0gZWxlbWVu
dCwgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlOworICAgIG5ld0VsZW1lbnQgPSBuZXcgSlFM
aXRlKG5ld0VsZW1lbnQpOworCisgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gbmV3RWxlbWVudC5s
ZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICB2YXIgbm9kZSA9IG5ld0VsZW1lbnRbaV07Cisg
ICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5vZGUsIGluZGV4Lm5leHRTaWJsaW5nKTsKKyAgICAg
IGluZGV4ID0gbm9kZTsKKyAgICB9CisgIH0sCisKKyAgYWRkQ2xhc3M6IGpxTGl0ZUFkZENsYXNz
LAorICByZW1vdmVDbGFzczoganFMaXRlUmVtb3ZlQ2xhc3MsCisKKyAgdG9nZ2xlQ2xhc3M6IGZ1
bmN0aW9uKGVsZW1lbnQsIHNlbGVjdG9yLCBjb25kaXRpb24pIHsKKyAgICBpZiAoc2VsZWN0b3Ip
IHsKKyAgICAgIGZvckVhY2goc2VsZWN0b3Iuc3BsaXQoJyAnKSwgZnVuY3Rpb24oY2xhc3NOYW1l
KSB7CisgICAgICAgIHZhciBjbGFzc0NvbmRpdGlvbiA9IGNvbmRpdGlvbjsKKyAgICAgICAgaWYg
KGlzVW5kZWZpbmVkKGNsYXNzQ29uZGl0aW9uKSkgeworICAgICAgICAgIGNsYXNzQ29uZGl0aW9u
ID0gIWpxTGl0ZUhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSk7CisgICAgICAgIH0KKyAgICAg
ICAgKGNsYXNzQ29uZGl0aW9uID8ganFMaXRlQWRkQ2xhc3MgOiBqcUxpdGVSZW1vdmVDbGFzcyko
ZWxlbWVudCwgY2xhc3NOYW1lKTsKKyAgICAgIH0pOworICAgIH0KKyAgfSwKKworICBwYXJlbnQ6
IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICB2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2Rl
OworICAgIHJldHVybiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSBOT0RFX1RZUEVfRE9D
VU1FTlRfRlJBR01FTlQgPyBwYXJlbnQgOiBudWxsOworICB9LAorCisgIG5leHQ6IGZ1bmN0aW9u
KGVsZW1lbnQpIHsKKyAgICByZXR1cm4gZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmc7CisgIH0s
CisKKyAgZmluZDogZnVuY3Rpb24oZWxlbWVudCwgc2VsZWN0b3IpIHsKKyAgICBpZiAoZWxlbWVu
dC5nZXRFbGVtZW50c0J5VGFnTmFtZSkgeworICAgICAgcmV0dXJuIGVsZW1lbnQuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoc2VsZWN0b3IpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gW107Cisg
ICAgfQorICB9LAorCisgIGNsb25lOiBqcUxpdGVDbG9uZSwKKworICB0cmlnZ2VySGFuZGxlcjog
ZnVuY3Rpb24oZWxlbWVudCwgZXZlbnQsIGV4dHJhUGFyYW1ldGVycykgeworCisgICAgdmFyIGR1
bW15RXZlbnQsIGV2ZW50Rm5zQ29weSwgaGFuZGxlckFyZ3M7CisgICAgdmFyIGV2ZW50TmFtZSA9
IGV2ZW50LnR5cGUgfHwgZXZlbnQ7CisgICAgdmFyIGV4cGFuZG9TdG9yZSA9IGpxTGl0ZUV4cGFu
ZG9TdG9yZShlbGVtZW50KTsKKyAgICB2YXIgZXZlbnRzID0gZXhwYW5kb1N0b3JlICYmIGV4cGFu
ZG9TdG9yZS5ldmVudHM7CisgICAgdmFyIGV2ZW50Rm5zID0gZXZlbnRzICYmIGV2ZW50c1tldmVu
dE5hbWVdOworCisgICAgaWYgKGV2ZW50Rm5zKSB7CisgICAgICAvLyBDcmVhdGUgYSBkdW1teSBl
dmVudCB0byBwYXNzIHRvIHRoZSBoYW5kbGVycworICAgICAgZHVtbXlFdmVudCA9IHsKKyAgICAg
ICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkgeyB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0
cnVlOyB9LAorICAgICAgICBpc0RlZmF1bHRQcmV2ZW50ZWQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4g
dGhpcy5kZWZhdWx0UHJldmVudGVkID09PSB0cnVlOyB9LAorICAgICAgICBzdG9wSW1tZWRpYXRl
UHJvcGFnYXRpb246IGZ1bmN0aW9uKCkgeyB0aGlzLmltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBl
ZCA9IHRydWU7IH0sCisgICAgICAgIGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiBmdW5j
dGlvbigpIHsgcmV0dXJuIHRoaXMuaW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID09PSB0cnVl
OyB9LAorICAgICAgICBzdG9wUHJvcGFnYXRpb246IG5vb3AsCisgICAgICAgIHR5cGU6IGV2ZW50
TmFtZSwKKyAgICAgICAgdGFyZ2V0OiBlbGVtZW50CisgICAgICB9OworCisgICAgICAvLyBJZiBh
IGN1c3RvbSBldmVudCB3YXMgcHJvdmlkZWQgdGhlbiBleHRlbmQgb3VyIGR1bW15IGV2ZW50IHdp
dGggaXQKKyAgICAgIGlmIChldmVudC50eXBlKSB7CisgICAgICAgIGR1bW15RXZlbnQgPSBleHRl
bmQoZHVtbXlFdmVudCwgZXZlbnQpOworICAgICAgfQorCisgICAgICAvLyBDb3B5IGV2ZW50IGhh
bmRsZXJzIGluIGNhc2UgZXZlbnQgaGFuZGxlcnMgYXJyYXkgaXMgbW9kaWZpZWQgZHVyaW5nIGV4
ZWN1dGlvbi4KKyAgICAgIGV2ZW50Rm5zQ29weSA9IHNoYWxsb3dDb3B5KGV2ZW50Rm5zKTsKKyAg
ICAgIGhhbmRsZXJBcmdzID0gZXh0cmFQYXJhbWV0ZXJzID8gW2R1bW15RXZlbnRdLmNvbmNhdChl
eHRyYVBhcmFtZXRlcnMpIDogW2R1bW15RXZlbnRdOworCisgICAgICBmb3JFYWNoKGV2ZW50Rm5z
Q29weSwgZnVuY3Rpb24oZm4pIHsKKyAgICAgICAgaWYgKCFkdW1teUV2ZW50LmlzSW1tZWRpYXRl
UHJvcGFnYXRpb25TdG9wcGVkKCkpIHsKKyAgICAgICAgICBmbi5hcHBseShlbGVtZW50LCBoYW5k
bGVyQXJncyk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKyAgfQorfSwgZnVuY3Rpb24o
Zm4sIG5hbWUpIHsKKyAgLyoqCisgICAqIGNoYWluaW5nIGZ1bmN0aW9ucworICAgKi8KKyAgSlFM
aXRlLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKGFyZzEsIGFyZzIsIGFyZzMpIHsKKyAgICB2
YXIgdmFsdWU7CisKKyAgICBmb3IgKHZhciBpID0gMCwgaWkgPSB0aGlzLmxlbmd0aDsgaSA8IGlp
OyBpKyspIHsKKyAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpIHsKKyAgICAgICAgdmFsdWUg
PSBmbih0aGlzW2ldLCBhcmcxLCBhcmcyLCBhcmczKTsKKyAgICAgICAgaWYgKGlzRGVmaW5lZCh2
YWx1ZSkpIHsKKyAgICAgICAgICAvLyBhbnkgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhIHZhbHVl
IG5lZWRzIHRvIGJlIHdyYXBwZWQKKyAgICAgICAgICB2YWx1ZSA9IGpxTGl0ZSh2YWx1ZSk7Cisg
ICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGpxTGl0ZUFkZE5vZGVzKHZhbHVlLCBm
bih0aGlzW2ldLCBhcmcxLCBhcmcyLCBhcmczKSk7CisgICAgICB9CisgICAgfQorICAgIHJldHVy
biBpc0RlZmluZWQodmFsdWUpID8gdmFsdWUgOiB0aGlzOworICB9OworCisgIC8vIGJpbmQgbGVn
YWN5IGJpbmQvdW5iaW5kIHRvIG9uL29mZgorICBKUUxpdGUucHJvdG90eXBlLmJpbmQgPSBKUUxp
dGUucHJvdG90eXBlLm9uOworICBKUUxpdGUucHJvdG90eXBlLnVuYmluZCA9IEpRTGl0ZS5wcm90
b3R5cGUub2ZmOworfSk7CisKKworLy8gUHJvdmlkZXIgZm9yIHByaXZhdGUgJCRqcUxpdGUgc2Vy
dmljZQorZnVuY3Rpb24gJCRqcUxpdGVQcm92aWRlcigpIHsKKyAgdGhpcy4kZ2V0ID0gZnVuY3Rp
b24gJCRqcUxpdGUoKSB7CisgICAgcmV0dXJuIGV4dGVuZChKUUxpdGUsIHsKKyAgICAgIGhhc0Ns
YXNzOiBmdW5jdGlvbihub2RlLCBjbGFzc2VzKSB7CisgICAgICAgIGlmIChub2RlLmF0dHIpIG5v
ZGUgPSBub2RlWzBdOworICAgICAgICByZXR1cm4ganFMaXRlSGFzQ2xhc3Mobm9kZSwgY2xhc3Nl
cyk7CisgICAgICB9LAorICAgICAgYWRkQ2xhc3M6IGZ1bmN0aW9uKG5vZGUsIGNsYXNzZXMpIHsK
KyAgICAgICAgaWYgKG5vZGUuYXR0cikgbm9kZSA9IG5vZGVbMF07CisgICAgICAgIHJldHVybiBq
cUxpdGVBZGRDbGFzcyhub2RlLCBjbGFzc2VzKTsKKyAgICAgIH0sCisgICAgICByZW1vdmVDbGFz
czogZnVuY3Rpb24obm9kZSwgY2xhc3NlcykgeworICAgICAgICBpZiAobm9kZS5hdHRyKSBub2Rl
ID0gbm9kZVswXTsKKyAgICAgICAgcmV0dXJuIGpxTGl0ZVJlbW92ZUNsYXNzKG5vZGUsIGNsYXNz
ZXMpOworICAgICAgfQorICAgIH0pOworICB9OworfQorCisvKioKKyAqIENvbXB1dGVzIGEgaGFz
aCBvZiBhbiAnb2JqJy4KKyAqIEhhc2ggb2YgYToKKyAqICBzdHJpbmcgaXMgc3RyaW5nCisgKiAg
bnVtYmVyIGlzIG51bWJlciBhcyBzdHJpbmcKKyAqICBvYmplY3QgaXMgZWl0aGVyIHJlc3VsdCBv
ZiBjYWxsaW5nICQkaGFzaEtleSBmdW5jdGlvbiBvbiB0aGUgb2JqZWN0IG9yIHVuaXF1ZWx5IGdl
bmVyYXRlZCBpZCwKKyAqICAgICAgICAgdGhhdCBpcyBhbHNvIGFzc2lnbmVkIHRvIHRoZSAkJGhh
c2hLZXkgcHJvcGVydHkgb2YgdGhlIG9iamVjdC4KKyAqCisgKiBAcGFyYW0gb2JqCisgKiBAcmV0
dXJucyB7c3RyaW5nfSBoYXNoIHN0cmluZyBzdWNoIHRoYXQgdGhlIHNhbWUgaW5wdXQgd2lsbCBo
YXZlIHRoZSBzYW1lIGhhc2ggc3RyaW5nLgorICogICAgICAgICBUaGUgcmVzdWx0aW5nIHN0cmlu
ZyBrZXkgaXMgaW4gJ3R5cGU6aGFzaEtleScgZm9ybWF0LgorICovCitmdW5jdGlvbiBoYXNoS2V5
KG9iaiwgbmV4dFVpZEZuKSB7CisgIHZhciBrZXkgPSBvYmogJiYgb2JqLiQkaGFzaEtleTsKKwor
ICBpZiAoa2V5KSB7CisgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpIHsKKyAgICAg
IGtleSA9IG9iai4kJGhhc2hLZXkoKTsKKyAgICB9CisgICAgcmV0dXJuIGtleTsKKyAgfQorCisg
IHZhciBvYmpUeXBlID0gdHlwZW9mIG9iajsKKyAgaWYgKG9ialR5cGUgPT0gJ2Z1bmN0aW9uJyB8
fCAob2JqVHlwZSA9PSAnb2JqZWN0JyAmJiBvYmogIT09IG51bGwpKSB7CisgICAga2V5ID0gb2Jq
LiQkaGFzaEtleSA9IG9ialR5cGUgKyAnOicgKyAobmV4dFVpZEZuIHx8IG5leHRVaWQpKCk7Cisg
IH0gZWxzZSB7CisgICAga2V5ID0gb2JqVHlwZSArICc6JyArIG9iajsKKyAgfQorCisgIHJldHVy
biBrZXk7Cit9CisKKy8qKgorICogSGFzaE1hcCB3aGljaCBjYW4gdXNlIG9iamVjdHMgYXMga2V5
cworICovCitmdW5jdGlvbiBIYXNoTWFwKGFycmF5LCBpc29sYXRlZFVpZCkgeworICBpZiAoaXNv
bGF0ZWRVaWQpIHsKKyAgICB2YXIgdWlkID0gMDsKKyAgICB0aGlzLm5leHRVaWQgPSBmdW5jdGlv
bigpIHsKKyAgICAgIHJldHVybiArK3VpZDsKKyAgICB9OworICB9CisgIGZvckVhY2goYXJyYXks
IHRoaXMucHV0LCB0aGlzKTsKK30KK0hhc2hNYXAucHJvdG90eXBlID0geworICAvKioKKyAgICog
U3RvcmUga2V5IHZhbHVlIHBhaXIKKyAgICogQHBhcmFtIGtleSBrZXkgdG8gc3RvcmUgY2FuIGJl
IGFueSB0eXBlCisgICAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSB0byBzdG9yZSBjYW4gYmUgYW55IHR5
cGUKKyAgICovCisgIHB1dDogZnVuY3Rpb24oa2V5LCB2YWx1ZSkgeworICAgIHRoaXNbaGFzaEtl
eShrZXksIHRoaXMubmV4dFVpZCldID0gdmFsdWU7CisgIH0sCisKKyAgLyoqCisgICAqIEBwYXJh
bSBrZXkKKyAgICogQHJldHVybnMge09iamVjdH0gdGhlIHZhbHVlIGZvciB0aGUga2V5CisgICAq
LworICBnZXQ6IGZ1bmN0aW9uKGtleSkgeworICAgIHJldHVybiB0aGlzW2hhc2hLZXkoa2V5LCB0
aGlzLm5leHRVaWQpXTsKKyAgfSwKKworICAvKioKKyAgICogUmVtb3ZlIHRoZSBrZXkvdmFsdWUg
cGFpcgorICAgKiBAcGFyYW0ga2V5CisgICAqLworICByZW1vdmU6IGZ1bmN0aW9uKGtleSkgewor
ICAgIHZhciB2YWx1ZSA9IHRoaXNba2V5ID0gaGFzaEtleShrZXksIHRoaXMubmV4dFVpZCldOwor
ICAgIGRlbGV0ZSB0aGlzW2tleV07CisgICAgcmV0dXJuIHZhbHVlOworICB9Cit9OworCit2YXIg
JCRIYXNoTWFwUHJvdmlkZXIgPSBbZnVuY3Rpb24oKSB7CisgIHRoaXMuJGdldCA9IFtmdW5jdGlv
bigpIHsKKyAgICByZXR1cm4gSGFzaE1hcDsKKyAgfV07Cit9XTsKKworLyoqCisgKiBAbmdkb2Mg
ZnVuY3Rpb24KKyAqIEBtb2R1bGUgbmcKKyAqIEBuYW1lIGFuZ3VsYXIuaW5qZWN0b3IKKyAqIEBr
aW5kIGZ1bmN0aW9uCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBDcmVhdGVzIGFuIGluamVjdG9y
IG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGZvciByZXRyaWV2aW5nIHNlcnZpY2VzIGFzIHdlbGwg
YXMgZm9yCisgKiBkZXBlbmRlbmN5IGluamVjdGlvbiAoc2VlIHtAbGluayBndWlkZS9kaSBkZXBl
bmRlbmN5IGluamVjdGlvbn0pLgorICoKKyAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZ3xGdW5jdGlv
bj59IG1vZHVsZXMgQSBsaXN0IG9mIG1vZHVsZSBmdW5jdGlvbnMgb3IgdGhlaXIgYWxpYXNlcy4g
U2VlCisgKiAgICAge0BsaW5rIGFuZ3VsYXIubW9kdWxlfS4gVGhlIGBuZ2AgbW9kdWxlIG11c3Qg
YmUgZXhwbGljaXRseSBhZGRlZC4KKyAqIEBwYXJhbSB7Ym9vbGVhbj19IFtzdHJpY3REaT1mYWxz
ZV0gV2hldGhlciB0aGUgaW5qZWN0b3Igc2hvdWxkIGJlIGluIHN0cmljdCBtb2RlLCB3aGljaAor
ICogICAgIGRpc2FsbG93cyBhcmd1bWVudCBuYW1lIGFubm90YXRpb24gaW5mZXJlbmNlLgorICog
QHJldHVybnMge2luamVjdG9yfSBJbmplY3RvciBvYmplY3QuIFNlZSB7QGxpbmsgYXV0by4kaW5q
ZWN0b3IgJGluamVjdG9yfS4KKyAqCisgKiBAZXhhbXBsZQorICogVHlwaWNhbCB1c2FnZQorICog
YGBganMKKyAqICAgLy8gY3JlYXRlIGFuIGluamVjdG9yCisgKiAgIHZhciAkaW5qZWN0b3IgPSBh
bmd1bGFyLmluamVjdG9yKFsnbmcnXSk7CisgKgorICogICAvLyB1c2UgdGhlIGluamVjdG9yIHRv
IGtpY2sgb2ZmIHlvdXIgYXBwbGljYXRpb24KKyAqICAgLy8gdXNlIHRoZSB0eXBlIGluZmVyZW5j
ZSB0byBhdXRvIGluamVjdCBhcmd1bWVudHMsIG9yIHVzZSBpbXBsaWNpdCBpbmplY3Rpb24KKyAq
ICAgJGluamVjdG9yLmludm9rZShmdW5jdGlvbigkcm9vdFNjb3BlLCAkY29tcGlsZSwgJGRvY3Vt
ZW50KSB7CisgKiAgICAgJGNvbXBpbGUoJGRvY3VtZW50KSgkcm9vdFNjb3BlKTsKKyAqICAgICAk
cm9vdFNjb3BlLiRkaWdlc3QoKTsKKyAqICAgfSk7CisgKiBgYGAKKyAqCisgKiBTb21ldGltZXMg
eW91IHdhbnQgdG8gZ2V0IGFjY2VzcyB0byB0aGUgaW5qZWN0b3Igb2YgYSBjdXJyZW50bHkgcnVu
bmluZyBBbmd1bGFyIGFwcAorICogZnJvbSBvdXRzaWRlIEFuZ3VsYXIuIFBlcmhhcHMsIHlvdSB3
YW50IHRvIGluamVjdCBhbmQgY29tcGlsZSBzb21lIG1hcmt1cCBhZnRlciB0aGUKKyAqIGFwcGxp
Y2F0aW9uIGhhcyBiZWVuIGJvb3RzdHJhcHBlZC4gWW91IGNhbiBkbyB0aGlzIHVzaW5nIHRoZSBl
eHRyYSBgaW5qZWN0b3IoKWAgYWRkZWQKKyAqIHRvIEpRdWVyeS9qcUxpdGUgZWxlbWVudHMuIFNl
ZSB7QGxpbmsgYW5ndWxhci5lbGVtZW50fS4KKyAqCisgKiAqVGhpcyBpcyBmYWlybHkgcmFyZSBi
dXQgY291bGQgYmUgdGhlIGNhc2UgaWYgYSB0aGlyZCBwYXJ0eSBsaWJyYXJ5IGlzIGluamVjdGlu
ZyB0aGUKKyAqIG1hcmt1cC4qCisgKgorICogSW4gdGhlIGZvbGxvd2luZyBleGFtcGxlIGEgbmV3
IGJsb2NrIG9mIEhUTUwgY29udGFpbmluZyBhIGBuZy1jb250cm9sbGVyYAorICogZGlyZWN0aXZl
IGlzIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50IGJvZHkgYnkgSlF1ZXJ5LiBXZSB0
aGVuIGNvbXBpbGUgYW5kIGxpbmsKKyAqIGl0IGludG8gdGhlIGN1cnJlbnQgQW5ndWxhckpTIHNj
b3BlLgorICoKKyAqIGBgYGpzCisgKiB2YXIgJGRpdiA9ICQoJzxkaXYgbmctY29udHJvbGxlcj0i
TXlDdHJsIj57e2NvbnRlbnQubGFiZWx9fTwvZGl2PicpOworICogJChkb2N1bWVudC5ib2R5KS5h
cHBlbmQoJGRpdik7CisgKgorICogYW5ndWxhci5lbGVtZW50KGRvY3VtZW50KS5pbmplY3Rvcigp
Lmludm9rZShmdW5jdGlvbigkY29tcGlsZSkgeworICogICB2YXIgc2NvcGUgPSBhbmd1bGFyLmVs
ZW1lbnQoJGRpdikuc2NvcGUoKTsKKyAqICAgJGNvbXBpbGUoJGRpdikoc2NvcGUpOworICogfSk7
CisgKiBgYGAKKyAqLworCisKKy8qKgorICogQG5nZG9jIG1vZHVsZQorICogQG5hbWUgYXV0bwor
ICogQGRlc2NyaXB0aW9uCisgKgorICogSW1wbGljaXQgbW9kdWxlIHdoaWNoIGdldHMgYXV0b21h
dGljYWxseSBhZGRlZCB0byBlYWNoIHtAbGluayBhdXRvLiRpbmplY3RvciAkaW5qZWN0b3J9Lgor
ICovCisKK3ZhciBGTl9BUkdTID0gL15mdW5jdGlvblxzKlteXChdKlwoXHMqKFteXCldKilcKS9t
OwordmFyIEZOX0FSR19TUExJVCA9IC8sLzsKK3ZhciBGTl9BUkcgPSAvXlxzKihfPykoXFMrPylc
MVxzKiQvOwordmFyIFNUUklQX0NPTU1FTlRTID0gLygoXC9cLy4qJCl8KFwvXCpbXHNcU10qP1wq
XC8pKS9tZzsKK3ZhciAkaW5qZWN0b3JNaW5FcnIgPSBtaW5FcnIoJyRpbmplY3RvcicpOworCitm
dW5jdGlvbiBhbm9uRm4oZm4pIHsKKyAgLy8gRm9yIGFub255bW91cyBmdW5jdGlvbnMsIHNob3dp
bmcgYXQgdGhlIHZlcnkgbGVhc3QgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBjYW4gaGVscCBpbgor
ICAvLyBkZWJ1Z2dpbmcuCisgIHZhciBmblRleHQgPSBmbi50b1N0cmluZygpLnJlcGxhY2UoU1RS
SVBfQ09NTUVOVFMsICcnKSwKKyAgICAgIGFyZ3MgPSBmblRleHQubWF0Y2goRk5fQVJHUyk7Cisg
IGlmIChhcmdzKSB7CisgICAgcmV0dXJuICdmdW5jdGlvbignICsgKGFyZ3NbMV0gfHwgJycpLnJl
cGxhY2UoL1tcc1xyXG5dKy8sICcgJykgKyAnKSc7CisgIH0KKyAgcmV0dXJuICdmbic7Cit9CisK
K2Z1bmN0aW9uIGFubm90YXRlKGZuLCBzdHJpY3REaSwgbmFtZSkgeworICB2YXIgJGluamVjdCwK
KyAgICAgIGZuVGV4dCwKKyAgICAgIGFyZ0RlY2wsCisgICAgICBsYXN0OworCisgIGlmICh0eXBl
b2YgZm4gPT09ICdmdW5jdGlvbicpIHsKKyAgICBpZiAoISgkaW5qZWN0ID0gZm4uJGluamVjdCkp
IHsKKyAgICAgICRpbmplY3QgPSBbXTsKKyAgICAgIGlmIChmbi5sZW5ndGgpIHsKKyAgICAgICAg
aWYgKHN0cmljdERpKSB7CisgICAgICAgICAgaWYgKCFpc1N0cmluZyhuYW1lKSB8fCAhbmFtZSkg
eworICAgICAgICAgICAgbmFtZSA9IGZuLm5hbWUgfHwgYW5vbkZuKGZuKTsKKyAgICAgICAgICB9
CisgICAgICAgICAgdGhyb3cgJGluamVjdG9yTWluRXJyKCdzdHJpY3RkaScsCisgICAgICAgICAg
ICAnezB9IGlzIG5vdCB1c2luZyBleHBsaWNpdCBhbm5vdGF0aW9uIGFuZCBjYW5ub3QgYmUgaW52
b2tlZCBpbiBzdHJpY3QgbW9kZScsIG5hbWUpOworICAgICAgICB9CisgICAgICAgIGZuVGV4dCA9
IGZuLnRvU3RyaW5nKCkucmVwbGFjZShTVFJJUF9DT01NRU5UUywgJycpOworICAgICAgICBhcmdE
ZWNsID0gZm5UZXh0Lm1hdGNoKEZOX0FSR1MpOworICAgICAgICBmb3JFYWNoKGFyZ0RlY2xbMV0u
c3BsaXQoRk5fQVJHX1NQTElUKSwgZnVuY3Rpb24oYXJnKSB7CisgICAgICAgICAgYXJnLnJlcGxh
Y2UoRk5fQVJHLCBmdW5jdGlvbihhbGwsIHVuZGVyc2NvcmUsIG5hbWUpIHsKKyAgICAgICAgICAg
ICRpbmplY3QucHVzaChuYW1lKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgICB9
CisgICAgICBmbi4kaW5qZWN0ID0gJGluamVjdDsKKyAgICB9CisgIH0gZWxzZSBpZiAoaXNBcnJh
eShmbikpIHsKKyAgICBsYXN0ID0gZm4ubGVuZ3RoIC0gMTsKKyAgICBhc3NlcnRBcmdGbihmblts
YXN0XSwgJ2ZuJyk7CisgICAgJGluamVjdCA9IGZuLnNsaWNlKDAsIGxhc3QpOworICB9IGVsc2Ug
eworICAgIGFzc2VydEFyZ0ZuKGZuLCAnZm4nLCB0cnVlKTsKKyAgfQorICByZXR1cm4gJGluamVj
dDsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8qKgor
ICogQG5nZG9jIHNlcnZpY2UKKyAqIEBuYW1lICRpbmplY3RvcgorICoKKyAqIEBkZXNjcmlwdGlv
bgorICoKKyAqIGAkaW5qZWN0b3JgIGlzIHVzZWQgdG8gcmV0cmlldmUgb2JqZWN0IGluc3RhbmNl
cyBhcyBkZWZpbmVkIGJ5CisgKiB7QGxpbmsgYXV0by4kcHJvdmlkZSBwcm92aWRlcn0sIGluc3Rh
bnRpYXRlIHR5cGVzLCBpbnZva2UgbWV0aG9kcywKKyAqIGFuZCBsb2FkIG1vZHVsZXMuCisgKgor
ICogVGhlIGZvbGxvd2luZyBhbHdheXMgaG9sZHMgdHJ1ZToKKyAqCisgKiBgYGBqcworICogICB2
YXIgJGluamVjdG9yID0gYW5ndWxhci5pbmplY3RvcigpOworICogICBleHBlY3QoJGluamVjdG9y
LmdldCgnJGluamVjdG9yJykpLnRvQmUoJGluamVjdG9yKTsKKyAqICAgZXhwZWN0KCRpbmplY3Rv
ci5pbnZva2UoZnVuY3Rpb24oJGluamVjdG9yKSB7CisgKiAgICAgcmV0dXJuICRpbmplY3RvcjsK
KyAqICAgfSkpLnRvQmUoJGluamVjdG9yKTsKKyAqIGBgYAorICoKKyAqICMgSW5qZWN0aW9uIEZ1
bmN0aW9uIEFubm90YXRpb24KKyAqCisgKiBKYXZhU2NyaXB0IGRvZXMgbm90IGhhdmUgYW5ub3Rh
dGlvbnMsIGFuZCBhbm5vdGF0aW9ucyBhcmUgbmVlZGVkIGZvciBkZXBlbmRlbmN5IGluamVjdGlv
bi4gVGhlCisgKiBmb2xsb3dpbmcgYXJlIGFsbCB2YWxpZCB3YXlzIG9mIGFubm90YXRpbmcgZnVu
Y3Rpb24gd2l0aCBpbmplY3Rpb24gYXJndW1lbnRzIGFuZCBhcmUgZXF1aXZhbGVudC4KKyAqCisg
KiBgYGBqcworICogICAvLyBpbmZlcnJlZCAob25seSB3b3JrcyBpZiBjb2RlIG5vdCBtaW5pZmll
ZC9vYmZ1c2NhdGVkKQorICogICAkaW5qZWN0b3IuaW52b2tlKGZ1bmN0aW9uKHNlcnZpY2VBKXt9
KTsKKyAqCisgKiAgIC8vIGFubm90YXRlZAorICogICBmdW5jdGlvbiBleHBsaWNpdChzZXJ2aWNl
QSkge307CisgKiAgIGV4cGxpY2l0LiRpbmplY3QgPSBbJ3NlcnZpY2VBJ107CisgKiAgICRpbmpl
Y3Rvci5pbnZva2UoZXhwbGljaXQpOworICoKKyAqICAgLy8gaW5saW5lCisgKiAgICRpbmplY3Rv
ci5pbnZva2UoWydzZXJ2aWNlQScsIGZ1bmN0aW9uKHNlcnZpY2VBKXt9XSk7CisgKiBgYGAKKyAq
CisgKiAjIyBJbmZlcmVuY2UKKyAqCisgKiBJbiBKYXZhU2NyaXB0IGNhbGxpbmcgYHRvU3RyaW5n
KClgIG9uIGEgZnVuY3Rpb24gcmV0dXJucyB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gVGhlIGRl
ZmluaXRpb24KKyAqIGNhbiB0aGVuIGJlIHBhcnNlZCBhbmQgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50
cyBjYW4gYmUgZXh0cmFjdGVkLiBUaGlzIG1ldGhvZCBvZiBkaXNjb3ZlcmluZworICogYW5ub3Rh
dGlvbnMgaXMgZGlzYWxsb3dlZCB3aGVuIHRoZSBpbmplY3RvciBpcyBpbiBzdHJpY3QgbW9kZS4K
KyAqICpOT1RFOiogVGhpcyBkb2VzIG5vdCB3b3JrIHdpdGggbWluaWZpY2F0aW9uLCBhbmQgb2Jm
dXNjYXRpb24gdG9vbHMgc2luY2UgdGhlc2UgdG9vbHMgY2hhbmdlIHRoZQorICogYXJndW1lbnQg
bmFtZXMuCisgKgorICogIyMgYCRpbmplY3RgIEFubm90YXRpb24KKyAqIEJ5IGFkZGluZyBhbiBg
JGluamVjdGAgcHJvcGVydHkgb250byBhIGZ1bmN0aW9uIHRoZSBpbmplY3Rpb24gcGFyYW1ldGVy
cyBjYW4gYmUgc3BlY2lmaWVkLgorICoKKyAqICMjIElubGluZQorICogQXMgYW4gYXJyYXkgb2Yg
aW5qZWN0aW9uIG5hbWVzLCB3aGVyZSB0aGUgbGFzdCBpdGVtIGluIHRoZSBhcnJheSBpcyB0aGUg
ZnVuY3Rpb24gdG8gY2FsbC4KKyAqLworCisvKioKKyAqIEBuZ2RvYyBtZXRob2QKKyAqIEBuYW1l
ICRpbmplY3RvciNnZXQKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFJldHVybiBhbiBpbnN0YW5j
ZSBvZiB0aGUgc2VydmljZS4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBv
ZiB0aGUgaW5zdGFuY2UgdG8gcmV0cmlldmUuCisgKiBAcGFyYW0ge3N0cmluZz19IGNhbGxlciBB
biBvcHRpb25hbCBzdHJpbmcgdG8gcHJvdmlkZSB0aGUgb3JpZ2luIG9mIHRoZSBmdW5jdGlvbiBj
YWxsIGZvciBlcnJvciBtZXNzYWdlcy4KKyAqIEByZXR1cm4geyp9IFRoZSBpbnN0YW5jZS4KKyAq
LworCisvKioKKyAqIEBuZ2RvYyBtZXRob2QKKyAqIEBuYW1lICRpbmplY3RvciNpbnZva2UKKyAq
CisgKiBAZGVzY3JpcHRpb24KKyAqIEludm9rZSB0aGUgbWV0aG9kIGFuZCBzdXBwbHkgdGhlIG1l
dGhvZCBhcmd1bWVudHMgZnJvbSB0aGUgYCRpbmplY3RvcmAuCisgKgorICogQHBhcmFtIHtGdW5j
dGlvbnxBcnJheS48c3RyaW5nfEZ1bmN0aW9uPn0gZm4gVGhlIGluamVjdGFibGUgZnVuY3Rpb24g
dG8gaW52b2tlLiBGdW5jdGlvbiBwYXJhbWV0ZXJzIGFyZQorICogICBpbmplY3RlZCBhY2NvcmRp
bmcgdG8gdGhlIHtAbGluayBndWlkZS9kaSAkaW5qZWN0IEFubm90YXRpb259IHJ1bGVzLgorICog
QHBhcmFtIHtPYmplY3Q9fSBzZWxmIFRoZSBgdGhpc2AgZm9yIHRoZSBpbnZva2VkIG1ldGhvZC4K
KyAqIEBwYXJhbSB7T2JqZWN0PX0gbG9jYWxzIE9wdGlvbmFsIG9iamVjdC4gSWYgcHJlc2V0IHRo
ZW4gYW55IGFyZ3VtZW50IG5hbWVzIGFyZSByZWFkIGZyb20gdGhpcworICogICAgICAgICAgICAg
ICAgICAgICAgICAgb2JqZWN0IGZpcnN0LCBiZWZvcmUgdGhlIGAkaW5qZWN0b3JgIGlzIGNvbnN1
bHRlZC4KKyAqIEByZXR1cm5zIHsqfSB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGludm9rZWQg
YGZuYCBmdW5jdGlvbi4KKyAqLworCisvKioKKyAqIEBuZ2RvYyBtZXRob2QKKyAqIEBuYW1lICRp
bmplY3RvciNoYXMKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIEFsbG93cyB0aGUgdXNlciB0byBx
dWVyeSBpZiB0aGUgcGFydGljdWxhciBzZXJ2aWNlIGV4aXN0cy4KKyAqCisgKiBAcGFyYW0ge3N0
cmluZ30gbmFtZSBOYW1lIG9mIHRoZSBzZXJ2aWNlIHRvIHF1ZXJ5LgorICogQHJldHVybnMge2Jv
b2xlYW59IGB0cnVlYCBpZiBpbmplY3RvciBoYXMgZ2l2ZW4gc2VydmljZS4KKyAqLworCisvKioK
KyAqIEBuZ2RvYyBtZXRob2QKKyAqIEBuYW1lICRpbmplY3RvciNpbnN0YW50aWF0ZQorICogQGRl
c2NyaXB0aW9uCisgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgSlMgdHlwZS4gVGhlIG1ldGhv
ZCB0YWtlcyBhIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLCBpbnZva2VzIHRoZSBuZXcKKyAqIG9wZXJh
dG9yLCBhbmQgc3VwcGxpZXMgYWxsIG9mIHRoZSBhcmd1bWVudHMgdG8gdGhlIGNvbnN0cnVjdG9y
IGZ1bmN0aW9uIGFzIHNwZWNpZmllZCBieSB0aGUKKyAqIGNvbnN0cnVjdG9yIGFubm90YXRpb24u
CisgKgorICogQHBhcmFtIHtGdW5jdGlvbn0gVHlwZSBBbm5vdGF0ZWQgY29uc3RydWN0b3IgZnVu
Y3Rpb24uCisgKiBAcGFyYW0ge09iamVjdD19IGxvY2FscyBPcHRpb25hbCBvYmplY3QuIElmIHBy
ZXNldCB0aGVuIGFueSBhcmd1bWVudCBuYW1lcyBhcmUgcmVhZCBmcm9tIHRoaXMKKyAqIG9iamVj
dCBmaXJzdCwgYmVmb3JlIHRoZSBgJGluamVjdG9yYCBpcyBjb25zdWx0ZWQuCisgKiBAcmV0dXJu
cyB7T2JqZWN0fSBuZXcgaW5zdGFuY2Ugb2YgYFR5cGVgLgorICovCisKKy8qKgorICogQG5nZG9j
IG1ldGhvZAorICogQG5hbWUgJGluamVjdG9yI2Fubm90YXRlCisgKgorICogQGRlc2NyaXB0aW9u
CisgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHNlcnZpY2UgbmFtZXMgd2hpY2ggdGhlIGZ1bmN0aW9u
IGlzIHJlcXVlc3RpbmcgZm9yIGluamVjdGlvbi4gVGhpcyBBUEkgaXMKKyAqIHVzZWQgYnkgdGhl
IGluamVjdG9yIHRvIGRldGVybWluZSB3aGljaCBzZXJ2aWNlcyBuZWVkIHRvIGJlIGluamVjdGVk
IGludG8gdGhlIGZ1bmN0aW9uIHdoZW4gdGhlCisgKiBmdW5jdGlvbiBpcyBpbnZva2VkLiBUaGVy
ZSBhcmUgdGhyZWUgd2F5cyBpbiB3aGljaCB0aGUgZnVuY3Rpb24gY2FuIGJlIGFubm90YXRlZCB3
aXRoIHRoZSBuZWVkZWQKKyAqIGRlcGVuZGVuY2llcy4KKyAqCisgKiAjIEFyZ3VtZW50IG5hbWVz
CisgKgorICogVGhlIHNpbXBsZXN0IGZvcm0gaXMgdG8gZXh0cmFjdCB0aGUgZGVwZW5kZW5jaWVz
IGZyb20gdGhlIGFyZ3VtZW50cyBvZiB0aGUgZnVuY3Rpb24uIFRoaXMgaXMgZG9uZQorICogYnkg
Y29udmVydGluZyB0aGUgZnVuY3Rpb24gaW50byBhIHN0cmluZyB1c2luZyBgdG9TdHJpbmcoKWAg
bWV0aG9kIGFuZCBleHRyYWN0aW5nIHRoZSBhcmd1bWVudAorICogbmFtZXMuCisgKiBgYGBqcwor
ICogICAvLyBHaXZlbgorICogICBmdW5jdGlvbiBNeUNvbnRyb2xsZXIoJHNjb3BlLCAkcm91dGUp
IHsKKyAqICAgICAvLyAuLi4KKyAqICAgfQorICoKKyAqICAgLy8gVGhlbgorICogICBleHBlY3Qo
aW5qZWN0b3IuYW5ub3RhdGUoTXlDb250cm9sbGVyKSkudG9FcXVhbChbJyRzY29wZScsICckcm91
dGUnXSk7CisgKiBgYGAKKyAqCisgKiBZb3UgY2FuIGRpc2FsbG93IHRoaXMgbWV0aG9kIGJ5IHVz
aW5nIHN0cmljdCBpbmplY3Rpb24gbW9kZS4KKyAqCisgKiBUaGlzIG1ldGhvZCBkb2VzIG5vdCB3
b3JrIHdpdGggY29kZSBtaW5pZmljYXRpb24gLyBvYmZ1c2NhdGlvbi4gRm9yIHRoaXMgcmVhc29u
IHRoZSBmb2xsb3dpbmcKKyAqIGFubm90YXRpb24gc3RyYXRlZ2llcyBhcmUgc3VwcG9ydGVkLgor
ICoKKyAqICMgVGhlIGAkaW5qZWN0YCBwcm9wZXJ0eQorICoKKyAqIElmIGEgZnVuY3Rpb24gaGFz
IGFuIGAkaW5qZWN0YCBwcm9wZXJ0eSBhbmQgaXRzIHZhbHVlIGlzIGFuIGFycmF5IG9mIHN0cmlu
Z3MsIHRoZW4gdGhlIHN0cmluZ3MKKyAqIHJlcHJlc2VudCBuYW1lcyBvZiBzZXJ2aWNlcyB0byBi
ZSBpbmplY3RlZCBpbnRvIHRoZSBmdW5jdGlvbi4KKyAqIGBgYGpzCisgKiAgIC8vIEdpdmVuCisg
KiAgIHZhciBNeUNvbnRyb2xsZXIgPSBmdW5jdGlvbihvYmZ1c2NhdGVkU2NvcGUsIG9iZnVzY2F0
ZWRSb3V0ZSkgeworICogICAgIC8vIC4uLgorICogICB9CisgKiAgIC8vIERlZmluZSBmdW5jdGlv
biBkZXBlbmRlbmNpZXMKKyAqICAgTXlDb250cm9sbGVyWyckaW5qZWN0J10gPSBbJyRzY29wZScs
ICckcm91dGUnXTsKKyAqCisgKiAgIC8vIFRoZW4KKyAqICAgZXhwZWN0KGluamVjdG9yLmFubm90
YXRlKE15Q29udHJvbGxlcikpLnRvRXF1YWwoWyckc2NvcGUnLCAnJHJvdXRlJ10pOworICogYGBg
CisgKgorICogIyBUaGUgYXJyYXkgbm90YXRpb24KKyAqCisgKiBJdCBpcyBvZnRlbiBkZXNpcmFi
bGUgdG8gaW5saW5lIEluamVjdGVkIGZ1bmN0aW9ucyBhbmQgdGhhdCdzIHdoZW4gc2V0dGluZyB0
aGUgYCRpbmplY3RgIHByb3BlcnR5CisgKiBpcyB2ZXJ5IGluY29udmVuaWVudC4gSW4gdGhlc2Ug
c2l0dWF0aW9ucyB1c2luZyB0aGUgYXJyYXkgbm90YXRpb24gdG8gc3BlY2lmeSB0aGUgZGVwZW5k
ZW5jaWVzIGluCisgKiBhIHdheSB0aGF0IHN1cnZpdmVzIG1pbmlmaWNhdGlvbiBpcyBhIGJldHRl
ciBjaG9pY2U6CisgKgorICogYGBganMKKyAqICAgLy8gV2Ugd2lzaCB0byB3cml0ZSB0aGlzIChu
b3QgbWluaWZpY2F0aW9uIC8gb2JmdXNjYXRpb24gc2FmZSkKKyAqICAgaW5qZWN0b3IuaW52b2tl
KGZ1bmN0aW9uKCRjb21waWxlLCAkcm9vdFNjb3BlKSB7CisgKiAgICAgLy8gLi4uCisgKiAgIH0p
OworICoKKyAqICAgLy8gV2UgYXJlIGZvcmNlZCB0byB3cml0ZSBicmVhayBpbmxpbmluZworICog
ICB2YXIgdG1wRm4gPSBmdW5jdGlvbihvYmZ1c2NhdGVkQ29tcGlsZSwgb2JmdXNjYXRlZFJvb3RT
Y29wZSkgeworICogICAgIC8vIC4uLgorICogICB9OworICogICB0bXBGbi4kaW5qZWN0ID0gWyck
Y29tcGlsZScsICckcm9vdFNjb3BlJ107CisgKiAgIGluamVjdG9yLmludm9rZSh0bXBGbik7Cisg
KgorICogICAvLyBUbyBiZXR0ZXIgc3VwcG9ydCBpbmxpbmUgZnVuY3Rpb24gdGhlIGlubGluZSBh
bm5vdGF0aW9uIGlzIHN1cHBvcnRlZAorICogICBpbmplY3Rvci5pbnZva2UoWyckY29tcGlsZScs
ICckcm9vdFNjb3BlJywgZnVuY3Rpb24ob2JmQ29tcGlsZSwgb2JmUm9vdFNjb3BlKSB7CisgKiAg
ICAgLy8gLi4uCisgKiAgIH1dKTsKKyAqCisgKiAgIC8vIFRoZXJlZm9yZQorICogICBleHBlY3Qo
aW5qZWN0b3IuYW5ub3RhdGUoCisgKiAgICAgIFsnJGNvbXBpbGUnLCAnJHJvb3RTY29wZScsIGZ1
bmN0aW9uKG9iZnVzXyRjb21waWxlLCBvYmZ1c18kcm9vdFNjb3BlKSB7fV0pCisgKiAgICApLnRv
RXF1YWwoWyckY29tcGlsZScsICckcm9vdFNjb3BlJ10pOworICogYGBgCisgKgorICogQHBhcmFt
IHtGdW5jdGlvbnxBcnJheS48c3RyaW5nfEZ1bmN0aW9uPn0gZm4gRnVuY3Rpb24gZm9yIHdoaWNo
IGRlcGVuZGVudCBzZXJ2aWNlIG5hbWVzIG5lZWQgdG8KKyAqIGJlIHJldHJpZXZlZCBhcyBkZXNj
cmliZWQgYWJvdmUuCisgKgorICogQHBhcmFtIHtib29sZWFuPX0gW3N0cmljdERpPWZhbHNlXSBE
aXNhbGxvdyBhcmd1bWVudCBuYW1lIGFubm90YXRpb24gaW5mZXJlbmNlLgorICoKKyAqIEByZXR1
cm5zIHtBcnJheS48c3RyaW5nPn0gVGhlIG5hbWVzIG9mIHRoZSBzZXJ2aWNlcyB3aGljaCB0aGUg
ZnVuY3Rpb24gcmVxdWlyZXMuCisgKi8KKworCisKKworLyoqCisgKiBAbmdkb2Mgc2VydmljZQor
ICogQG5hbWUgJHByb3ZpZGUKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqCisgKiBUaGUge0BsaW5r
IGF1dG8uJHByb3ZpZGUgJHByb3ZpZGV9IHNlcnZpY2UgaGFzIGEgbnVtYmVyIG9mIG1ldGhvZHMg
Zm9yIHJlZ2lzdGVyaW5nIGNvbXBvbmVudHMKKyAqIHdpdGggdGhlIHtAbGluayBhdXRvLiRpbmpl
Y3RvciAkaW5qZWN0b3J9LiBNYW55IG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWxzbyBleHBvc2Vk
IG9uCisgKiB7QGxpbmsgYW5ndWxhci5Nb2R1bGV9LgorICoKKyAqIEFuIEFuZ3VsYXIgKipzZXJ2
aWNlKiogaXMgYSBzaW5nbGV0b24gb2JqZWN0IGNyZWF0ZWQgYnkgYSAqKnNlcnZpY2UgZmFjdG9y
eSoqLiAgVGhlc2UgKipzZXJ2aWNlCisgKiBmYWN0b3JpZXMqKiBhcmUgZnVuY3Rpb25zIHdoaWNo
LCBpbiB0dXJuLCBhcmUgY3JlYXRlZCBieSBhICoqc2VydmljZSBwcm92aWRlcioqLgorICogVGhl
ICoqc2VydmljZSBwcm92aWRlcnMqKiBhcmUgY29uc3RydWN0b3IgZnVuY3Rpb25zLiBXaGVuIGlu
c3RhbnRpYXRlZCB0aGV5IG11c3QgY29udGFpbiBhCisgKiBwcm9wZXJ0eSBjYWxsZWQgYCRnZXRg
LCB3aGljaCBob2xkcyB0aGUgKipzZXJ2aWNlIGZhY3RvcnkqKiBmdW5jdGlvbi4KKyAqCisgKiBX
aGVuIHlvdSByZXF1ZXN0IGEgc2VydmljZSwgdGhlIHtAbGluayBhdXRvLiRpbmplY3RvciAkaW5q
ZWN0b3J9IGlzIHJlc3BvbnNpYmxlIGZvciBmaW5kaW5nIHRoZQorICogY29ycmVjdCAqKnNlcnZp
Y2UgcHJvdmlkZXIqKiwgaW5zdGFudGlhdGluZyBpdCBhbmQgdGhlbiBjYWxsaW5nIGl0cyBgJGdl
dGAgKipzZXJ2aWNlIGZhY3RvcnkqKgorICogZnVuY3Rpb24gdG8gZ2V0IHRoZSBpbnN0YW5jZSBv
ZiB0aGUgKipzZXJ2aWNlKiouCisgKgorICogT2Z0ZW4gc2VydmljZXMgaGF2ZSBubyBjb25maWd1
cmF0aW9uIG9wdGlvbnMgYW5kIHRoZXJlIGlzIG5vIG5lZWQgdG8gYWRkIG1ldGhvZHMgdG8gdGhl
IHNlcnZpY2UKKyAqIHByb3ZpZGVyLiAgVGhlIHByb3ZpZGVyIHdpbGwgYmUgbm8gbW9yZSB0aGFu
IGEgY29uc3RydWN0b3IgZnVuY3Rpb24gd2l0aCBhIGAkZ2V0YCBwcm9wZXJ0eS4gRm9yCisgKiB0
aGVzZSBjYXNlcyB0aGUge0BsaW5rIGF1dG8uJHByb3ZpZGUgJHByb3ZpZGV9IHNlcnZpY2UgaGFz
IGFkZGl0aW9uYWwgaGVscGVyIG1ldGhvZHMgdG8gcmVnaXN0ZXIKKyAqIHNlcnZpY2VzIHdpdGhv
dXQgc3BlY2lmeWluZyBhIHByb3ZpZGVyLgorICoKKyAqICoge0BsaW5rIGF1dG8uJHByb3ZpZGUj
cHJvdmlkZXIgcHJvdmlkZXIocHJvdmlkZXIpfSAtIHJlZ2lzdGVycyBhICoqc2VydmljZSBwcm92
aWRlcioqIHdpdGggdGhlCisgKiAgICAge0BsaW5rIGF1dG8uJGluamVjdG9yICRpbmplY3Rvcn0K
KyAqICoge0BsaW5rIGF1dG8uJHByb3ZpZGUjY29uc3RhbnQgY29uc3RhbnQob2JqKX0gLSByZWdp
c3RlcnMgYSB2YWx1ZS9vYmplY3QgdGhhdCBjYW4gYmUgYWNjZXNzZWQgYnkKKyAqICAgICBwcm92
aWRlcnMgYW5kIHNlcnZpY2VzLgorICogKiB7QGxpbmsgYXV0by4kcHJvdmlkZSN2YWx1ZSB2YWx1
ZShvYmopfSAtIHJlZ2lzdGVycyBhIHZhbHVlL29iamVjdCB0aGF0IGNhbiBvbmx5IGJlIGFjY2Vz
c2VkIGJ5CisgKiAgICAgc2VydmljZXMsIG5vdCBwcm92aWRlcnMuCisgKiAqIHtAbGluayBhdXRv
LiRwcm92aWRlI2ZhY3RvcnkgZmFjdG9yeShmbil9IC0gcmVnaXN0ZXJzIGEgc2VydmljZSAqKmZh
Y3RvcnkgZnVuY3Rpb24qKiwgYGZuYCwKKyAqICAgICB0aGF0IHdpbGwgYmUgd3JhcHBlZCBpbiBh
ICoqc2VydmljZSBwcm92aWRlcioqIG9iamVjdCwgd2hvc2UgYCRnZXRgIHByb3BlcnR5IHdpbGwg
Y29udGFpbiB0aGUKKyAqICAgICBnaXZlbiBmYWN0b3J5IGZ1bmN0aW9uLgorICogKiB7QGxpbmsg
YXV0by4kcHJvdmlkZSNzZXJ2aWNlIHNlcnZpY2UoY2xhc3MpfSAtIHJlZ2lzdGVycyBhICoqY29u
c3RydWN0b3IgZnVuY3Rpb24qKiwgYGNsYXNzYAorICogICAgIHRoYXQgd2lsbCBiZSB3cmFwcGVk
IGluIGEgKipzZXJ2aWNlIHByb3ZpZGVyKiogb2JqZWN0LCB3aG9zZSBgJGdldGAgcHJvcGVydHkg
d2lsbCBpbnN0YW50aWF0ZQorICogICAgICBhIG5ldyBvYmplY3QgdXNpbmcgdGhlIGdpdmVuIGNv
bnN0cnVjdG9yIGZ1bmN0aW9uLgorICoKKyAqIFNlZSB0aGUgaW5kaXZpZHVhbCBtZXRob2RzIGZv
ciBtb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlcy4KKyAqLworCisvKioKKyAqIEBuZ2RvYyBt
ZXRob2QKKyAqIEBuYW1lICRwcm92aWRlI3Byb3ZpZGVyCisgKiBAZGVzY3JpcHRpb24KKyAqCisg
KiBSZWdpc3RlciBhICoqcHJvdmlkZXIgZnVuY3Rpb24qKiB3aXRoIHRoZSB7QGxpbmsgYXV0by4k
aW5qZWN0b3IgJGluamVjdG9yfS4gUHJvdmlkZXIgZnVuY3Rpb25zCisgKiBhcmUgY29uc3RydWN0
b3IgZnVuY3Rpb25zLCB3aG9zZSBpbnN0YW5jZXMgYXJlIHJlc3BvbnNpYmxlIGZvciAicHJvdmlk
aW5nIiBhIGZhY3RvcnkgZm9yIGEKKyAqIHNlcnZpY2UuCisgKgorICogU2VydmljZSBwcm92aWRl
ciBuYW1lcyBzdGFydCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIHRoZXkgcHJvdmlkZSBm
b2xsb3dlZCBieSBgUHJvdmlkZXJgLgorICogRm9yIGV4YW1wbGUsIHRoZSB7QGxpbmsgbmcuJGxv
ZyAkbG9nfSBzZXJ2aWNlIGhhcyBhIHByb3ZpZGVyIGNhbGxlZAorICoge0BsaW5rIG5nLiRsb2dQ
cm92aWRlciAkbG9nUHJvdmlkZXJ9LgorICoKKyAqIFNlcnZpY2UgcHJvdmlkZXIgb2JqZWN0cyBj
YW4gaGF2ZSBhZGRpdGlvbmFsIG1ldGhvZHMgd2hpY2ggYWxsb3cgY29uZmlndXJhdGlvbiBvZiB0
aGUgcHJvdmlkZXIKKyAqIGFuZCBpdHMgc2VydmljZS4gSW1wb3J0YW50bHksIHlvdSBjYW4gY29u
ZmlndXJlIHdoYXQga2luZCBvZiBzZXJ2aWNlIGlzIGNyZWF0ZWQgYnkgdGhlIGAkZ2V0YAorICog
bWV0aG9kLCBvciBob3cgdGhhdCBzZXJ2aWNlIHdpbGwgYWN0LiBGb3IgZXhhbXBsZSwgdGhlIHtA
bGluayBuZy4kbG9nUHJvdmlkZXIgJGxvZ1Byb3ZpZGVyfSBoYXMgYQorICogbWV0aG9kIHtAbGlu
ayBuZy4kbG9nUHJvdmlkZXIjZGVidWdFbmFibGVkIGRlYnVnRW5hYmxlZH0KKyAqIHdoaWNoIGxl
dHMgeW91IHNwZWNpZnkgd2hldGhlciB0aGUge0BsaW5rIG5nLiRsb2cgJGxvZ30gc2VydmljZSB3
aWxsIGxvZyBkZWJ1ZyBtZXNzYWdlcyB0byB0aGUKKyAqIGNvbnNvbGUgb3Igbm90LgorICoKKyAq
IEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBpbnN0YW5jZS4gTk9URTogdGhl
IHByb3ZpZGVyIHdpbGwgYmUgYXZhaWxhYmxlIHVuZGVyIGBuYW1lICsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICdQcm92aWRlcidgIGtleS4KKyAqIEBwYXJhbSB7KE9iamVjdHxmdW5jdGlvbigp
KX0gcHJvdmlkZXIgSWYgdGhlIHByb3ZpZGVyIGlzOgorICoKKyAqICAgLSBgT2JqZWN0YDogdGhl
biBpdCBzaG91bGQgaGF2ZSBhIGAkZ2V0YCBtZXRob2QuIFRoZSBgJGdldGAgbWV0aG9kIHdpbGwg
YmUgaW52b2tlZCB1c2luZworICogICAgIHtAbGluayBhdXRvLiRpbmplY3RvciNpbnZva2UgJGlu
amVjdG9yLmludm9rZSgpfSB3aGVuIGFuIGluc3RhbmNlIG5lZWRzIHRvIGJlIGNyZWF0ZWQuCisg
KiAgIC0gYENvbnN0cnVjdG9yYDogYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIHByb3ZpZGVyIHdpbGwg
YmUgY3JlYXRlZCB1c2luZworICogICAgIHtAbGluayBhdXRvLiRpbmplY3RvciNpbnN0YW50aWF0
ZSAkaW5qZWN0b3IuaW5zdGFudGlhdGUoKX0sIHRoZW4gdHJlYXRlZCBhcyBgb2JqZWN0YC4KKyAq
CisgKiBAcmV0dXJucyB7T2JqZWN0fSByZWdpc3RlcmVkIHByb3ZpZGVyIGluc3RhbmNlCisKKyAq
IEBleGFtcGxlCisgKgorICogVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byBjcmVh
dGUgYSBzaW1wbGUgZXZlbnQgdHJhY2tpbmcgc2VydmljZSBhbmQgcmVnaXN0ZXIgaXQgdXNpbmcK
KyAqIHtAbGluayBhdXRvLiRwcm92aWRlI3Byb3ZpZGVyICRwcm92aWRlLnByb3ZpZGVyKCl9Lgor
ICoKKyAqIGBgYGpzCisgKiAgLy8gRGVmaW5lIHRoZSBldmVudFRyYWNrZXIgcHJvdmlkZXIKKyAq
ICBmdW5jdGlvbiBFdmVudFRyYWNrZXJQcm92aWRlcigpIHsKKyAqICAgIHZhciB0cmFja2luZ1Vy
bCA9ICcvdHJhY2snOworICoKKyAqICAgIC8vIEEgcHJvdmlkZXIgbWV0aG9kIGZvciBjb25maWd1
cmluZyB3aGVyZSB0aGUgdHJhY2tlZCBldmVudHMgc2hvdWxkIGJlZW4gc2F2ZWQKKyAqICAgIHRo
aXMuc2V0VHJhY2tpbmdVcmwgPSBmdW5jdGlvbih1cmwpIHsKKyAqICAgICAgdHJhY2tpbmdVcmwg
PSB1cmw7CisgKiAgICB9OworICoKKyAqICAgIC8vIFRoZSBzZXJ2aWNlIGZhY3RvcnkgZnVuY3Rp
b24KKyAqICAgIHRoaXMuJGdldCA9IFsnJGh0dHAnLCBmdW5jdGlvbigkaHR0cCkgeworICogICAg
ICB2YXIgdHJhY2tlZEV2ZW50cyA9IHt9OworICogICAgICByZXR1cm4geworICogICAgICAgIC8v
IENhbGwgdGhpcyB0byB0cmFjayBhbiBldmVudAorICogICAgICAgIGV2ZW50OiBmdW5jdGlvbihl
dmVudCkgeworICogICAgICAgICAgdmFyIGNvdW50ID0gdHJhY2tlZEV2ZW50c1tldmVudF0gfHwg
MDsKKyAqICAgICAgICAgIGNvdW50ICs9IDE7CisgKiAgICAgICAgICB0cmFja2VkRXZlbnRzW2V2
ZW50XSA9IGNvdW50OworICogICAgICAgICAgcmV0dXJuIGNvdW50OworICogICAgICAgIH0sCisg
KiAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIHNhdmUgdGhlIHRyYWNrZWQgZXZlbnRzIHRvIHRoZSB0
cmFja2luZ1VybAorICogICAgICAgIHNhdmU6IGZ1bmN0aW9uKCkgeworICogICAgICAgICAgJGh0
dHAucG9zdCh0cmFja2luZ1VybCwgdHJhY2tlZEV2ZW50cyk7CisgKiAgICAgICAgfQorICogICAg
ICB9OworICogICAgfV07CisgKiAgfQorICoKKyAqICBkZXNjcmliZSgnZXZlbnRUcmFja2VyJywg
ZnVuY3Rpb24oKSB7CisgKiAgICB2YXIgcG9zdFNweTsKKyAqCisgKiAgICBiZWZvcmVFYWNoKG1v
ZHVsZShmdW5jdGlvbigkcHJvdmlkZSkgeworICogICAgICAvLyBSZWdpc3RlciB0aGUgZXZlbnRU
cmFja2VyIHByb3ZpZGVyCisgKiAgICAgICRwcm92aWRlLnByb3ZpZGVyKCdldmVudFRyYWNrZXIn
LCBFdmVudFRyYWNrZXJQcm92aWRlcik7CisgKiAgICB9KSk7CisgKgorICogICAgYmVmb3JlRWFj
aChtb2R1bGUoZnVuY3Rpb24oZXZlbnRUcmFja2VyUHJvdmlkZXIpIHsKKyAqICAgICAgLy8gQ29u
ZmlndXJlIGV2ZW50VHJhY2tlciBwcm92aWRlcgorICogICAgICBldmVudFRyYWNrZXJQcm92aWRl
ci5zZXRUcmFja2luZ1VybCgnL2N1c3RvbS10cmFjaycpOworICogICAgfSkpOworICoKKyAqICAg
IGl0KCd0cmFja3MgZXZlbnRzJywgaW5qZWN0KGZ1bmN0aW9uKGV2ZW50VHJhY2tlcikgeworICog
ICAgICBleHBlY3QoZXZlbnRUcmFja2VyLmV2ZW50KCdsb2dpbicpKS50b0VxdWFsKDEpOworICog
ICAgICBleHBlY3QoZXZlbnRUcmFja2VyLmV2ZW50KCdsb2dpbicpKS50b0VxdWFsKDIpOworICog
ICAgfSkpOworICoKKyAqICAgIGl0KCdzYXZlcyB0byB0aGUgdHJhY2tpbmcgdXJsJywgaW5qZWN0
KGZ1bmN0aW9uKGV2ZW50VHJhY2tlciwgJGh0dHApIHsKKyAqICAgICAgcG9zdFNweSA9IHNweU9u
KCRodHRwLCAncG9zdCcpOworICogICAgICBldmVudFRyYWNrZXIuZXZlbnQoJ2xvZ2luJyk7Cisg
KiAgICAgIGV2ZW50VHJhY2tlci5zYXZlKCk7CisgKiAgICAgIGV4cGVjdChwb3N0U3B5KS50b0hh
dmVCZWVuQ2FsbGVkKCk7CisgKiAgICAgIGV4cGVjdChwb3N0U3B5Lm1vc3RSZWNlbnRDYWxsLmFy
Z3NbMF0pLm5vdC50b0VxdWFsKCcvdHJhY2snKTsKKyAqICAgICAgZXhwZWN0KHBvc3RTcHkubW9z
dFJlY2VudENhbGwuYXJnc1swXSkudG9FcXVhbCgnL2N1c3RvbS10cmFjaycpOworICogICAgICBl
eHBlY3QocG9zdFNweS5tb3N0UmVjZW50Q2FsbC5hcmdzWzFdKS50b0VxdWFsKHsgJ2xvZ2luJzog
MSB9KTsKKyAqICAgIH0pKTsKKyAqICB9KTsKKyAqIGBgYAorICovCisKKy8qKgorICogQG5nZG9j
IG1ldGhvZAorICogQG5hbWUgJHByb3ZpZGUjZmFjdG9yeQorICogQGRlc2NyaXB0aW9uCisgKgor
ICogUmVnaXN0ZXIgYSAqKnNlcnZpY2UgZmFjdG9yeSoqLCB3aGljaCB3aWxsIGJlIGNhbGxlZCB0
byByZXR1cm4gdGhlIHNlcnZpY2UgaW5zdGFuY2UuCisgKiBUaGlzIGlzIHNob3J0IGZvciByZWdp
c3RlcmluZyBhIHNlcnZpY2Ugd2hlcmUgaXRzIHByb3ZpZGVyIGNvbnNpc3RzIG9mIG9ubHkgYSBg
JGdldGAgcHJvcGVydHksCisgKiB3aGljaCBpcyB0aGUgZ2l2ZW4gc2VydmljZSBmYWN0b3J5IGZ1
bmN0aW9uLgorICogWW91IHNob3VsZCB1c2Uge0BsaW5rIGF1dG8uJHByb3ZpZGUjZmFjdG9yeSAk
cHJvdmlkZS5mYWN0b3J5KGdldEZuKX0gaWYgeW91IGRvIG5vdCBuZWVkIHRvCisgKiBjb25maWd1
cmUgeW91ciBzZXJ2aWNlIGluIGEgcHJvdmlkZXIuCisgKgorICogQHBhcmFtIHtzdHJpbmd9IG5h
bWUgVGhlIG5hbWUgb2YgdGhlIGluc3RhbmNlLgorICogQHBhcmFtIHtGdW5jdGlvbnxBcnJheS48
c3RyaW5nfEZ1bmN0aW9uPn0gJGdldEZuIFRoZSBpbmplY3RhYmxlICRnZXRGbiBmb3IgdGhlIGlu
c3RhbmNlIGNyZWF0aW9uLgorICogICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxseSB0aGlz
IGlzIGEgc2hvcnQgaGFuZCBmb3IgYCRwcm92aWRlLnByb3ZpZGVyKG5hbWUsIHskZ2V0OiAkZ2V0
Rm59KWAuCisgKiBAcmV0dXJucyB7T2JqZWN0fSByZWdpc3RlcmVkIHByb3ZpZGVyIGluc3RhbmNl
CisgKgorICogQGV4YW1wbGUKKyAqIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiByZWdpc3RlcmluZyBh
IHNlcnZpY2UKKyAqIGBgYGpzCisgKiAgICRwcm92aWRlLmZhY3RvcnkoJ3BpbmcnLCBbJyRodHRw
JywgZnVuY3Rpb24oJGh0dHApIHsKKyAqICAgICByZXR1cm4gZnVuY3Rpb24gcGluZygpIHsKKyAq
ICAgICAgIHJldHVybiAkaHR0cC5zZW5kKCcvcGluZycpOworICogICAgIH07CisgKiAgIH1dKTsK
KyAqIGBgYAorICogWW91IHdvdWxkIHRoZW4gaW5qZWN0IGFuZCB1c2UgdGhpcyBzZXJ2aWNlIGxp
a2UgdGhpczoKKyAqIGBgYGpzCisgKiAgIHNvbWVNb2R1bGUuY29udHJvbGxlcignQ3RybCcsIFsn
cGluZycsIGZ1bmN0aW9uKHBpbmcpIHsKKyAqICAgICBwaW5nKCk7CisgKiAgIH1dKTsKKyAqIGBg
YAorICovCisKKworLyoqCisgKiBAbmdkb2MgbWV0aG9kCisgKiBAbmFtZSAkcHJvdmlkZSNzZXJ2
aWNlCisgKiBAZGVzY3JpcHRpb24KKyAqCisgKiBSZWdpc3RlciBhICoqc2VydmljZSBjb25zdHJ1
Y3RvcioqLCB3aGljaCB3aWxsIGJlIGludm9rZWQgd2l0aCBgbmV3YCB0byBjcmVhdGUgdGhlIHNl
cnZpY2UKKyAqIGluc3RhbmNlLgorICogVGhpcyBpcyBzaG9ydCBmb3IgcmVnaXN0ZXJpbmcgYSBz
ZXJ2aWNlIHdoZXJlIGl0cyBwcm92aWRlcidzIGAkZ2V0YCBwcm9wZXJ0eSBpcyB0aGUgc2Vydmlj
ZQorICogY29uc3RydWN0b3IgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHVzZWQgdG8gaW5zdGFudGlh
dGUgdGhlIHNlcnZpY2UgaW5zdGFuY2UuCisgKgorICogWW91IHNob3VsZCB1c2Uge0BsaW5rIGF1
dG8uJHByb3ZpZGUjc2VydmljZSAkcHJvdmlkZS5zZXJ2aWNlKGNsYXNzKX0gaWYgeW91IGRlZmlu
ZSB5b3VyIHNlcnZpY2UKKyAqIGFzIGEgdHlwZS9jbGFzcy4KKyAqCisgKiBAcGFyYW0ge3N0cmlu
Z30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgaW5zdGFuY2UuCisgKiBAcGFyYW0ge0Z1bmN0aW9ufEFy
cmF5LjxzdHJpbmd8RnVuY3Rpb24+fSBjb25zdHJ1Y3RvciBBbiBpbmplY3RhYmxlIGNsYXNzIChj
b25zdHJ1Y3RvciBmdW5jdGlvbikKKyAqICAgICB0aGF0IHdpbGwgYmUgaW5zdGFudGlhdGVkLgor
ICogQHJldHVybnMge09iamVjdH0gcmVnaXN0ZXJlZCBwcm92aWRlciBpbnN0YW5jZQorICoKKyAq
IEBleGFtcGxlCisgKiBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgcmVnaXN0ZXJpbmcgYSBzZXJ2aWNl
IHVzaW5nCisgKiB7QGxpbmsgYXV0by4kcHJvdmlkZSNzZXJ2aWNlICRwcm92aWRlLnNlcnZpY2Uo
Y2xhc3MpfS4KKyAqIGBgYGpzCisgKiAgIHZhciBQaW5nID0gZnVuY3Rpb24oJGh0dHApIHsKKyAq
ICAgICB0aGlzLiRodHRwID0gJGh0dHA7CisgKiAgIH07CisgKgorICogICBQaW5nLiRpbmplY3Qg
PSBbJyRodHRwJ107CisgKgorICogICBQaW5nLnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24oKSB7
CisgKiAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KCcvcGluZycpOworICogICB9OworICogICAk
cHJvdmlkZS5zZXJ2aWNlKCdwaW5nJywgUGluZyk7CisgKiBgYGAKKyAqIFlvdSB3b3VsZCB0aGVu
IGluamVjdCBhbmQgdXNlIHRoaXMgc2VydmljZSBsaWtlIHRoaXM6CisgKiBgYGBqcworICogICBz
b21lTW9kdWxlLmNvbnRyb2xsZXIoJ0N0cmwnLCBbJ3BpbmcnLCBmdW5jdGlvbihwaW5nKSB7Cisg
KiAgICAgcGluZy5zZW5kKCk7CisgKiAgIH1dKTsKKyAqIGBgYAorICovCisKKworLyoqCisgKiBA
bmdkb2MgbWV0aG9kCisgKiBAbmFtZSAkcHJvdmlkZSN2YWx1ZQorICogQGRlc2NyaXB0aW9uCisg
KgorICogUmVnaXN0ZXIgYSAqKnZhbHVlIHNlcnZpY2UqKiB3aXRoIHRoZSB7QGxpbmsgYXV0by4k
aW5qZWN0b3IgJGluamVjdG9yfSwgc3VjaCBhcyBhIHN0cmluZywgYQorICogbnVtYmVyLCBhbiBh
cnJheSwgYW4gb2JqZWN0IG9yIGEgZnVuY3Rpb24uICBUaGlzIGlzIHNob3J0IGZvciByZWdpc3Rl
cmluZyBhIHNlcnZpY2Ugd2hlcmUgaXRzCisgKiBwcm92aWRlcidzIGAkZ2V0YCBwcm9wZXJ0eSBp
cyBhIGZhY3RvcnkgZnVuY3Rpb24gdGhhdCB0YWtlcyBubyBhcmd1bWVudHMgYW5kIHJldHVybnMg
dGhlICoqdmFsdWUKKyAqIHNlcnZpY2UqKi4KKyAqCisgKiBWYWx1ZSBzZXJ2aWNlcyBhcmUgc2lt
aWxhciB0byBjb25zdGFudCBzZXJ2aWNlcywgZXhjZXB0IHRoYXQgdGhleSBjYW5ub3QgYmUgaW5q
ZWN0ZWQgaW50byBhCisgKiBtb2R1bGUgY29uZmlndXJhdGlvbiBmdW5jdGlvbiAoc2VlIHtAbGlu
ayBhbmd1bGFyLk1vZHVsZSNjb25maWd9KSBidXQgdGhleSBjYW4gYmUgb3ZlcnJpZGRlbiBieQor
ICogYW4gQW5ndWxhcgorICoge0BsaW5rIGF1dG8uJHByb3ZpZGUjZGVjb3JhdG9yIGRlY29yYXRv
cn0uCisgKgorICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGluc3RhbmNl
LgorICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUuCisgKiBAcmV0dXJucyB7T2JqZWN0fSBy
ZWdpc3RlcmVkIHByb3ZpZGVyIGluc3RhbmNlCisgKgorICogQGV4YW1wbGUKKyAqIEhlcmUgYXJl
IHNvbWUgZXhhbXBsZXMgb2YgY3JlYXRpbmcgdmFsdWUgc2VydmljZXMuCisgKiBgYGBqcworICog
ICAkcHJvdmlkZS52YWx1ZSgnQURNSU5fVVNFUicsICdhZG1pbicpOworICoKKyAqICAgJHByb3Zp
ZGUudmFsdWUoJ1JvbGVMb29rdXAnLCB7IGFkbWluOiAwLCB3cml0ZXI6IDEsIHJlYWRlcjogMiB9
KTsKKyAqCisgKiAgICRwcm92aWRlLnZhbHVlKCdoYWxmT2YnLCBmdW5jdGlvbih2YWx1ZSkgewor
ICogICAgIHJldHVybiB2YWx1ZSAvIDI7CisgKiAgIH0pOworICogYGBgCisgKi8KKworCisvKioK
KyAqIEBuZ2RvYyBtZXRob2QKKyAqIEBuYW1lICRwcm92aWRlI2NvbnN0YW50CisgKiBAZGVzY3Jp
cHRpb24KKyAqCisgKiBSZWdpc3RlciBhICoqY29uc3RhbnQgc2VydmljZSoqLCBzdWNoIGFzIGEg
c3RyaW5nLCBhIG51bWJlciwgYW4gYXJyYXksIGFuIG9iamVjdCBvciBhIGZ1bmN0aW9uLAorICog
d2l0aCB0aGUge0BsaW5rIGF1dG8uJGluamVjdG9yICRpbmplY3Rvcn0uIFVubGlrZSB7QGxpbmsg
YXV0by4kcHJvdmlkZSN2YWx1ZSB2YWx1ZX0gaXQgY2FuIGJlCisgKiBpbmplY3RlZCBpbnRvIGEg
bW9kdWxlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24gKHNlZSB7QGxpbmsgYW5ndWxhci5Nb2R1bGUj
Y29uZmlnfSkgYW5kIGl0IGNhbm5vdAorICogYmUgb3ZlcnJpZGRlbiBieSBhbiBBbmd1bGFyIHtA
bGluayBhdXRvLiRwcm92aWRlI2RlY29yYXRvciBkZWNvcmF0b3J9LgorICoKKyAqIEBwYXJhbSB7
c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBjb25zdGFudC4KKyAqIEBwYXJhbSB7Kn0gdmFs
dWUgVGhlIGNvbnN0YW50IHZhbHVlLgorICogQHJldHVybnMge09iamVjdH0gcmVnaXN0ZXJlZCBp
bnN0YW5jZQorICoKKyAqIEBleGFtcGxlCisgKiBIZXJlIGEgc29tZSBleGFtcGxlcyBvZiBjcmVh
dGluZyBjb25zdGFudHM6CisgKiBgYGBqcworICogICAkcHJvdmlkZS5jb25zdGFudCgnU0hBUkRf
SEVJR0hUJywgMzA2KTsKKyAqCisgKiAgICRwcm92aWRlLmNvbnN0YW50KCdNWV9DT0xPVVJTJywg
WydyZWQnLCAnYmx1ZScsICdncmV5J10pOworICoKKyAqICAgJHByb3ZpZGUuY29uc3RhbnQoJ2Rv
dWJsZScsIGZ1bmN0aW9uKHZhbHVlKSB7CisgKiAgICAgcmV0dXJuIHZhbHVlICogMjsKKyAqICAg
fSk7CisgKiBgYGAKKyAqLworCisKKy8qKgorICogQG5nZG9jIG1ldGhvZAorICogQG5hbWUgJHBy
b3ZpZGUjZGVjb3JhdG9yCisgKiBAZGVzY3JpcHRpb24KKyAqCisgKiBSZWdpc3RlciBhICoqc2Vy
dmljZSBkZWNvcmF0b3IqKiB3aXRoIHRoZSB7QGxpbmsgYXV0by4kaW5qZWN0b3IgJGluamVjdG9y
fS4gQSBzZXJ2aWNlIGRlY29yYXRvcgorICogaW50ZXJjZXB0cyB0aGUgY3JlYXRpb24gb2YgYSBz
ZXJ2aWNlLCBhbGxvd2luZyBpdCB0byBvdmVycmlkZSBvciBtb2RpZnkgdGhlIGJlaGF2aW91ciBv
ZiB0aGUKKyAqIHNlcnZpY2UuIFRoZSBvYmplY3QgcmV0dXJuZWQgYnkgdGhlIGRlY29yYXRvciBt
YXkgYmUgdGhlIG9yaWdpbmFsIHNlcnZpY2UsIG9yIGEgbmV3IHNlcnZpY2UKKyAqIG9iamVjdCB3
aGljaCByZXBsYWNlcyBvciB3cmFwcyBhbmQgZGVsZWdhdGVzIHRvIHRoZSBvcmlnaW5hbCBzZXJ2
aWNlLgorICoKKyAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNl
IHRvIGRlY29yYXRlLgorICogQHBhcmFtIHtGdW5jdGlvbnxBcnJheS48c3RyaW5nfEZ1bmN0aW9u
Pn0gZGVjb3JhdG9yIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIHdoZW4gdGhlIHNlcnZp
Y2UgbmVlZHMgdG8gYmUKKyAqICAgIGluc3RhbnRpYXRlZCBhbmQgc2hvdWxkIHJldHVybiB0aGUg
ZGVjb3JhdGVkIHNlcnZpY2UgaW5zdGFuY2UuIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgdXNpbmcK
KyAqICAgIHRoZSB7QGxpbmsgYXV0by4kaW5qZWN0b3IjaW52b2tlIGluamVjdG9yLmludm9rZX0g
bWV0aG9kIGFuZCBpcyB0aGVyZWZvcmUgZnVsbHkgaW5qZWN0YWJsZS4KKyAqICAgIExvY2FsIGlu
amVjdGlvbiBhcmd1bWVudHM6CisgKgorICogICAgKiBgJGRlbGVnYXRlYCAtIFRoZSBvcmlnaW5h
bCBzZXJ2aWNlIGluc3RhbmNlLCB3aGljaCBjYW4gYmUgbW9ua2V5IHBhdGNoZWQsIGNvbmZpZ3Vy
ZWQsCisgKiAgICAgIGRlY29yYXRlZCBvciBkZWxlZ2F0ZWQgdG8uCisgKgorICogQGV4YW1wbGUK
KyAqIEhlcmUgd2UgZGVjb3JhdGUgdGhlIHtAbGluayBuZy4kbG9nICRsb2d9IHNlcnZpY2UgdG8g
Y29udmVydCB3YXJuaW5ncyB0byBlcnJvcnMgYnkgaW50ZXJjZXB0aW5nCisgKiBjYWxscyB0byB7
QGxpbmsgbmcuJGxvZyNlcnJvciAkbG9nLndhcm4oKX0uCisgKiBgYGBqcworICogICAkcHJvdmlk
ZS5kZWNvcmF0b3IoJyRsb2cnLCBbJyRkZWxlZ2F0ZScsIGZ1bmN0aW9uKCRkZWxlZ2F0ZSkgewor
ICogICAgICRkZWxlZ2F0ZS53YXJuID0gJGRlbGVnYXRlLmVycm9yOworICogICAgIHJldHVybiAk
ZGVsZWdhdGU7CisgKiAgIH1dKTsKKyAqIGBgYAorICovCisKKworZnVuY3Rpb24gY3JlYXRlSW5q
ZWN0b3IobW9kdWxlc1RvTG9hZCwgc3RyaWN0RGkpIHsKKyAgc3RyaWN0RGkgPSAoc3RyaWN0RGkg
PT09IHRydWUpOworICB2YXIgSU5TVEFOVElBVElORyA9IHt9LAorICAgICAgcHJvdmlkZXJTdWZm
aXggPSAnUHJvdmlkZXInLAorICAgICAgcGF0aCA9IFtdLAorICAgICAgbG9hZGVkTW9kdWxlcyA9
IG5ldyBIYXNoTWFwKFtdLCB0cnVlKSwKKyAgICAgIHByb3ZpZGVyQ2FjaGUgPSB7CisgICAgICAg
ICRwcm92aWRlOiB7CisgICAgICAgICAgICBwcm92aWRlcjogc3VwcG9ydE9iamVjdChwcm92aWRl
ciksCisgICAgICAgICAgICBmYWN0b3J5OiBzdXBwb3J0T2JqZWN0KGZhY3RvcnkpLAorICAgICAg
ICAgICAgc2VydmljZTogc3VwcG9ydE9iamVjdChzZXJ2aWNlKSwKKyAgICAgICAgICAgIHZhbHVl
OiBzdXBwb3J0T2JqZWN0KHZhbHVlKSwKKyAgICAgICAgICAgIGNvbnN0YW50OiBzdXBwb3J0T2Jq
ZWN0KGNvbnN0YW50KSwKKyAgICAgICAgICAgIGRlY29yYXRvcjogZGVjb3JhdG9yCisgICAgICAg
ICAgfQorICAgICAgfSwKKyAgICAgIHByb3ZpZGVySW5qZWN0b3IgPSAocHJvdmlkZXJDYWNoZS4k
aW5qZWN0b3IgPQorICAgICAgICAgIGNyZWF0ZUludGVybmFsSW5qZWN0b3IocHJvdmlkZXJDYWNo
ZSwgZnVuY3Rpb24oc2VydmljZU5hbWUsIGNhbGxlcikgeworICAgICAgICAgICAgaWYgKGFuZ3Vs
YXIuaXNTdHJpbmcoY2FsbGVyKSkgeworICAgICAgICAgICAgICBwYXRoLnB1c2goY2FsbGVyKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRocm93ICRpbmplY3Rvck1pbkVycigndW5wcics
ICJVbmtub3duIHByb3ZpZGVyOiB7MH0iLCBwYXRoLmpvaW4oJyA8LSAnKSk7CisgICAgICAgICAg
fSkpLAorICAgICAgaW5zdGFuY2VDYWNoZSA9IHt9LAorICAgICAgaW5zdGFuY2VJbmplY3RvciA9
IChpbnN0YW5jZUNhY2hlLiRpbmplY3RvciA9CisgICAgICAgICAgY3JlYXRlSW50ZXJuYWxJbmpl
Y3RvcihpbnN0YW5jZUNhY2hlLCBmdW5jdGlvbihzZXJ2aWNlTmFtZSwgY2FsbGVyKSB7CisgICAg
ICAgICAgICB2YXIgcHJvdmlkZXIgPSBwcm92aWRlckluamVjdG9yLmdldChzZXJ2aWNlTmFtZSAr
IHByb3ZpZGVyU3VmZml4LCBjYWxsZXIpOworICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlSW5q
ZWN0b3IuaW52b2tlKHByb3ZpZGVyLiRnZXQsIHByb3ZpZGVyLCB1bmRlZmluZWQsIHNlcnZpY2VO
YW1lKTsKKyAgICAgICAgICB9KSk7CisKKworICBmb3JFYWNoKGxvYWRNb2R1bGVzKG1vZHVsZXNU
b0xvYWQpLCBmdW5jdGlvbihmbikgeyBpZiAoZm4pIGluc3RhbmNlSW5qZWN0b3IuaW52b2tlKGZu
KTsgfSk7CisKKyAgcmV0dXJuIGluc3RhbmNlSW5qZWN0b3I7CisKKyAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisgIC8vICRwcm92aWRlcgorICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKworICBmdW5jdGlvbiBzdXBwb3J0T2JqZWN0KGRlbGVnYXRl
KSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgICAgIGlmIChpc09iamVj
dChrZXkpKSB7CisgICAgICAgIGZvckVhY2goa2V5LCByZXZlcnNlUGFyYW1zKGRlbGVnYXRlKSk7
CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gZGVsZWdhdGUoa2V5LCB2YWx1ZSk7Cisg
ICAgICB9CisgICAgfTsKKyAgfQorCisgIGZ1bmN0aW9uIHByb3ZpZGVyKG5hbWUsIHByb3ZpZGVy
XykgeworICAgIGFzc2VydE5vdEhhc093blByb3BlcnR5KG5hbWUsICdzZXJ2aWNlJyk7CisgICAg
aWYgKGlzRnVuY3Rpb24ocHJvdmlkZXJfKSB8fCBpc0FycmF5KHByb3ZpZGVyXykpIHsKKyAgICAg
IHByb3ZpZGVyXyA9IHByb3ZpZGVySW5qZWN0b3IuaW5zdGFudGlhdGUocHJvdmlkZXJfKTsKKyAg
ICB9CisgICAgaWYgKCFwcm92aWRlcl8uJGdldCkgeworICAgICAgdGhyb3cgJGluamVjdG9yTWlu
RXJyKCdwZ2V0JywgIlByb3ZpZGVyICd7MH0nIG11c3QgZGVmaW5lICRnZXQgZmFjdG9yeSBtZXRo
b2QuIiwgbmFtZSk7CisgICAgfQorICAgIHJldHVybiBwcm92aWRlckNhY2hlW25hbWUgKyBwcm92
aWRlclN1ZmZpeF0gPSBwcm92aWRlcl87CisgIH0KKworICBmdW5jdGlvbiBlbmZvcmNlUmV0dXJu
VmFsdWUobmFtZSwgZmFjdG9yeSkgeworICAgIHJldHVybiBmdW5jdGlvbiBlbmZvcmNlZFJldHVy
blZhbHVlKCkgeworICAgICAgdmFyIHJlc3VsdCA9IGluc3RhbmNlSW5qZWN0b3IuaW52b2tlKGZh
Y3RvcnksIHRoaXMpOworICAgICAgaWYgKGlzVW5kZWZpbmVkKHJlc3VsdCkpIHsKKyAgICAgICAg
dGhyb3cgJGluamVjdG9yTWluRXJyKCd1bmRlZicsICJQcm92aWRlciAnezB9JyBtdXN0IHJldHVy
biBhIHZhbHVlIGZyb20gJGdldCBmYWN0b3J5IG1ldGhvZC4iLCBuYW1lKTsKKyAgICAgIH0KKyAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKyAgfQorCisgIGZ1bmN0aW9uIGZhY3RvcnkobmFt
ZSwgZmFjdG9yeUZuLCBlbmZvcmNlKSB7CisgICAgcmV0dXJuIHByb3ZpZGVyKG5hbWUsIHsKKyAg
ICAgICRnZXQ6IGVuZm9yY2UgIT09IGZhbHNlID8gZW5mb3JjZVJldHVyblZhbHVlKG5hbWUsIGZh
Y3RvcnlGbikgOiBmYWN0b3J5Rm4KKyAgICB9KTsKKyAgfQorCisgIGZ1bmN0aW9uIHNlcnZpY2Uo
bmFtZSwgY29uc3RydWN0b3IpIHsKKyAgICByZXR1cm4gZmFjdG9yeShuYW1lLCBbJyRpbmplY3Rv
cicsIGZ1bmN0aW9uKCRpbmplY3RvcikgeworICAgICAgcmV0dXJuICRpbmplY3Rvci5pbnN0YW50
aWF0ZShjb25zdHJ1Y3Rvcik7CisgICAgfV0pOworICB9CisKKyAgZnVuY3Rpb24gdmFsdWUobmFt
ZSwgdmFsKSB7IHJldHVybiBmYWN0b3J5KG5hbWUsIHZhbHVlRm4odmFsKSwgZmFsc2UpOyB9CisK
KyAgZnVuY3Rpb24gY29uc3RhbnQobmFtZSwgdmFsdWUpIHsKKyAgICBhc3NlcnROb3RIYXNPd25Q
cm9wZXJ0eShuYW1lLCAnY29uc3RhbnQnKTsKKyAgICBwcm92aWRlckNhY2hlW25hbWVdID0gdmFs
dWU7CisgICAgaW5zdGFuY2VDYWNoZVtuYW1lXSA9IHZhbHVlOworICB9CisKKyAgZnVuY3Rpb24g
ZGVjb3JhdG9yKHNlcnZpY2VOYW1lLCBkZWNvckZuKSB7CisgICAgdmFyIG9yaWdQcm92aWRlciA9
IHByb3ZpZGVySW5qZWN0b3IuZ2V0KHNlcnZpY2VOYW1lICsgcHJvdmlkZXJTdWZmaXgpLAorICAg
ICAgICBvcmlnJGdldCA9IG9yaWdQcm92aWRlci4kZ2V0OworCisgICAgb3JpZ1Byb3ZpZGVyLiRn
ZXQgPSBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBvcmlnSW5zdGFuY2UgPSBpbnN0YW5jZUluamVj
dG9yLmludm9rZShvcmlnJGdldCwgb3JpZ1Byb3ZpZGVyKTsKKyAgICAgIHJldHVybiBpbnN0YW5j
ZUluamVjdG9yLmludm9rZShkZWNvckZuLCBudWxsLCB7JGRlbGVnYXRlOiBvcmlnSW5zdGFuY2V9
KTsKKyAgICB9OworICB9CisKKyAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisgIC8vIE1vZHVsZSBMb2FkaW5nCisgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLworICBmdW5jdGlvbiBsb2FkTW9kdWxlcyhtb2R1bGVzVG9Mb2FkKSB7CisgICAgdmFyIHJ1
bkJsb2NrcyA9IFtdLCBtb2R1bGVGbjsKKyAgICBmb3JFYWNoKG1vZHVsZXNUb0xvYWQsIGZ1bmN0
aW9uKG1vZHVsZSkgeworICAgICAgaWYgKGxvYWRlZE1vZHVsZXMuZ2V0KG1vZHVsZSkpIHJldHVy
bjsKKyAgICAgIGxvYWRlZE1vZHVsZXMucHV0KG1vZHVsZSwgdHJ1ZSk7CisKKyAgICAgIGZ1bmN0
aW9uIHJ1bkludm9rZVF1ZXVlKHF1ZXVlKSB7CisgICAgICAgIHZhciBpLCBpaTsKKyAgICAgICAg
Zm9yIChpID0gMCwgaWkgPSBxdWV1ZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAg
dmFyIGludm9rZUFyZ3MgPSBxdWV1ZVtpXSwKKyAgICAgICAgICAgICAgcHJvdmlkZXIgPSBwcm92
aWRlckluamVjdG9yLmdldChpbnZva2VBcmdzWzBdKTsKKworICAgICAgICAgIHByb3ZpZGVyW2lu
dm9rZUFyZ3NbMV1dLmFwcGx5KHByb3ZpZGVyLCBpbnZva2VBcmdzWzJdKTsKKyAgICAgICAgfQor
ICAgICAgfQorCisgICAgICB0cnkgeworICAgICAgICBpZiAoaXNTdHJpbmcobW9kdWxlKSkgewor
ICAgICAgICAgIG1vZHVsZUZuID0gYW5ndWxhck1vZHVsZShtb2R1bGUpOworICAgICAgICAgIHJ1
bkJsb2NrcyA9IHJ1bkJsb2Nrcy5jb25jYXQobG9hZE1vZHVsZXMobW9kdWxlRm4ucmVxdWlyZXMp
KS5jb25jYXQobW9kdWxlRm4uX3J1bkJsb2Nrcyk7CisgICAgICAgICAgcnVuSW52b2tlUXVldWUo
bW9kdWxlRm4uX2ludm9rZVF1ZXVlKTsKKyAgICAgICAgICBydW5JbnZva2VRdWV1ZShtb2R1bGVG
bi5fY29uZmlnQmxvY2tzKTsKKyAgICAgICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKG1vZHVsZSkp
IHsKKyAgICAgICAgICAgIHJ1bkJsb2Nrcy5wdXNoKHByb3ZpZGVySW5qZWN0b3IuaW52b2tlKG1v
ZHVsZSkpOworICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkobW9kdWxlKSkgeworICAgICAgICAg
ICAgcnVuQmxvY2tzLnB1c2gocHJvdmlkZXJJbmplY3Rvci5pbnZva2UobW9kdWxlKSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgYXNzZXJ0QXJnRm4obW9kdWxlLCAnbW9kdWxlJyk7Cisg
ICAgICAgIH0KKyAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgaWYgKGlzQXJyYXkobW9kdWxl
KSkgeworICAgICAgICAgIG1vZHVsZSA9IG1vZHVsZVttb2R1bGUubGVuZ3RoIC0gMV07CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGUubWVzc2FnZSAmJiBlLnN0YWNrICYmIGUuc3RhY2suaW5kZXhP
ZihlLm1lc3NhZ2UpID09IC0xKSB7CisgICAgICAgICAgLy8gU2FmYXJpICYgRkYncyBzdGFjayB0
cmFjZXMgZG9uJ3QgY29udGFpbiBlcnJvci5tZXNzYWdlIGNvbnRlbnQKKyAgICAgICAgICAvLyB1
bmxpa2UgdGhvc2Ugb2YgQ2hyb21lIGFuZCBJRQorICAgICAgICAgIC8vIFNvIGlmIHN0YWNrIGRv
ZXNuJ3QgY29udGFpbiBtZXNzYWdlLCB3ZSBjcmVhdGUgYSBuZXcgc3RyaW5nIHRoYXQgY29udGFp
bnMgYm90aC4KKyAgICAgICAgICAvLyBTaW5jZSBlcnJvci5zdGFjayBpcyByZWFkLW9ubHkgaW4g
U2FmYXJpLCBJJ20gb3ZlcnJpZGluZyBlIGFuZCBub3QgZS5zdGFjayBoZXJlLgorICAgICAgICAg
IC8qIGpzaGludCAtVzAyMiAqLworICAgICAgICAgIGUgPSBlLm1lc3NhZ2UgKyAnXG4nICsgZS5z
dGFjazsKKyAgICAgICAgfQorICAgICAgICB0aHJvdyAkaW5qZWN0b3JNaW5FcnIoJ21vZHVsZXJy
JywgIkZhaWxlZCB0byBpbnN0YW50aWF0ZSBtb2R1bGUgezB9IGR1ZSB0bzpcbnsxfSIsCisgICAg
ICAgICAgICAgICAgICBtb2R1bGUsIGUuc3RhY2sgfHwgZS5tZXNzYWdlIHx8IGUpOworICAgICAg
fQorICAgIH0pOworICAgIHJldHVybiBydW5CbG9ja3M7CisgIH0KKworICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgLy8gaW50ZXJuYWwgSW5qZWN0b3IKKyAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgZnVuY3Rpb24gY3JlYXRlSW50ZXJu
YWxJbmplY3RvcihjYWNoZSwgZmFjdG9yeSkgeworCisgICAgZnVuY3Rpb24gZ2V0U2VydmljZShz
ZXJ2aWNlTmFtZSwgY2FsbGVyKSB7CisgICAgICBpZiAoY2FjaGUuaGFzT3duUHJvcGVydHkoc2Vy
dmljZU5hbWUpKSB7CisgICAgICAgIGlmIChjYWNoZVtzZXJ2aWNlTmFtZV0gPT09IElOU1RBTlRJ
QVRJTkcpIHsKKyAgICAgICAgICB0aHJvdyAkaW5qZWN0b3JNaW5FcnIoJ2NkZXAnLCAnQ2lyY3Vs
YXIgZGVwZW5kZW5jeSBmb3VuZDogezB9JywKKyAgICAgICAgICAgICAgICAgICAgc2VydmljZU5h
bWUgKyAnIDwtICcgKyBwYXRoLmpvaW4oJyA8LSAnKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGNhY2hlW3NlcnZpY2VOYW1lXTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgcGF0aC51bnNoaWZ0KHNlcnZpY2VOYW1lKTsKKyAgICAgICAgICBjYWNoZVtzZXJ2
aWNlTmFtZV0gPSBJTlNUQU5USUFUSU5HOworICAgICAgICAgIHJldHVybiBjYWNoZVtzZXJ2aWNl
TmFtZV0gPSBmYWN0b3J5KHNlcnZpY2VOYW1lLCBjYWxsZXIpOworICAgICAgICB9IGNhdGNoIChl
cnIpIHsKKyAgICAgICAgICBpZiAoY2FjaGVbc2VydmljZU5hbWVdID09PSBJTlNUQU5USUFUSU5H
KSB7CisgICAgICAgICAgICBkZWxldGUgY2FjaGVbc2VydmljZU5hbWVdOworICAgICAgICAgIH0K
KyAgICAgICAgICB0aHJvdyBlcnI7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgcGF0
aC5zaGlmdCgpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gaW52
b2tlKGZuLCBzZWxmLCBsb2NhbHMsIHNlcnZpY2VOYW1lKSB7CisgICAgICBpZiAodHlwZW9mIGxv
Y2FscyA9PT0gJ3N0cmluZycpIHsKKyAgICAgICAgc2VydmljZU5hbWUgPSBsb2NhbHM7CisgICAg
ICAgIGxvY2FscyA9IG51bGw7CisgICAgICB9CisKKyAgICAgIHZhciBhcmdzID0gW10sCisgICAg
ICAgICAgJGluamVjdCA9IGNyZWF0ZUluamVjdG9yLiQkYW5ub3RhdGUoZm4sIHN0cmljdERpLCBz
ZXJ2aWNlTmFtZSksCisgICAgICAgICAgbGVuZ3RoLCBpLAorICAgICAgICAgIGtleTsKKworICAg
ICAgZm9yIChpID0gMCwgbGVuZ3RoID0gJGluamVjdC5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykg
eworICAgICAgICBrZXkgPSAkaW5qZWN0W2ldOworICAgICAgICBpZiAodHlwZW9mIGtleSAhPT0g
J3N0cmluZycpIHsKKyAgICAgICAgICB0aHJvdyAkaW5qZWN0b3JNaW5FcnIoJ2l0a24nLAorICAg
ICAgICAgICAgICAgICAgJ0luY29ycmVjdCBpbmplY3Rpb24gdG9rZW4hIEV4cGVjdGVkIHNlcnZp
Y2UgbmFtZSBhcyBzdHJpbmcsIGdvdCB7MH0nLCBrZXkpOworICAgICAgICB9CisgICAgICAgIGFy
Z3MucHVzaCgKKyAgICAgICAgICBsb2NhbHMgJiYgbG9jYWxzLmhhc093blByb3BlcnR5KGtleSkK
KyAgICAgICAgICA/IGxvY2Fsc1trZXldCisgICAgICAgICAgOiBnZXRTZXJ2aWNlKGtleSwgc2Vy
dmljZU5hbWUpCisgICAgICAgICk7CisgICAgICB9CisgICAgICBpZiAoaXNBcnJheShmbikpIHsK
KyAgICAgICAgZm4gPSBmbltsZW5ndGhdOworICAgICAgfQorCisgICAgICAvLyBodHRwOi8vanNw
ZXJmLmNvbS9hbmd1bGFyanMtaW52b2tlLWFwcGx5LXZzLXN3aXRjaAorICAgICAgLy8gIzUzODgK
KyAgICAgIHJldHVybiBmbi5hcHBseShzZWxmLCBhcmdzKTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBpbnN0YW50aWF0ZShUeXBlLCBsb2NhbHMsIHNlcnZpY2VOYW1lKSB7CisgICAgICAvLyBDaGVj
ayBpZiBUeXBlIGlzIGFubm90YXRlZCBhbmQgdXNlIGp1c3QgdGhlIGdpdmVuIGZ1bmN0aW9uIGF0
IG4tMSBhcyBwYXJhbWV0ZXIKKyAgICAgIC8vIGUuZy4gc29tZU1vZHVsZS5mYWN0b3J5KCdncmVl
dGVyJywgWyckd2luZG93JywgZnVuY3Rpb24ocmVuYW1lZCR3aW5kb3cpIHt9XSk7CisgICAgICAv
LyBPYmplY3QgY3JlYXRpb246IGh0dHA6Ly9qc3BlcmYuY29tL2NyZWF0ZS1jb25zdHJ1Y3Rvci8y
CisgICAgICB2YXIgaW5zdGFuY2UgPSBPYmplY3QuY3JlYXRlKChpc0FycmF5KFR5cGUpID8gVHlw
ZVtUeXBlLmxlbmd0aCAtIDFdIDogVHlwZSkucHJvdG90eXBlIHx8IG51bGwpOworICAgICAgdmFy
IHJldHVybmVkVmFsdWUgPSBpbnZva2UoVHlwZSwgaW5zdGFuY2UsIGxvY2Fscywgc2VydmljZU5h
bWUpOworCisgICAgICByZXR1cm4gaXNPYmplY3QocmV0dXJuZWRWYWx1ZSkgfHwgaXNGdW5jdGlv
bihyZXR1cm5lZFZhbHVlKSA/IHJldHVybmVkVmFsdWUgOiBpbnN0YW5jZTsKKyAgICB9CisKKyAg
ICByZXR1cm4geworICAgICAgaW52b2tlOiBpbnZva2UsCisgICAgICBpbnN0YW50aWF0ZTogaW5z
dGFudGlhdGUsCisgICAgICBnZXQ6IGdldFNlcnZpY2UsCisgICAgICBhbm5vdGF0ZTogY3JlYXRl
SW5qZWN0b3IuJCRhbm5vdGF0ZSwKKyAgICAgIGhhczogZnVuY3Rpb24obmFtZSkgeworICAgICAg
ICByZXR1cm4gcHJvdmlkZXJDYWNoZS5oYXNPd25Qcm9wZXJ0eShuYW1lICsgcHJvdmlkZXJTdWZm
aXgpIHx8IGNhY2hlLmhhc093blByb3BlcnR5KG5hbWUpOworICAgICAgfQorICAgIH07CisgIH0K
K30KKworY3JlYXRlSW5qZWN0b3IuJCRhbm5vdGF0ZSA9IGFubm90YXRlOworCisvKioKKyAqIEBu
Z2RvYyBwcm92aWRlcgorICogQG5hbWUgJGFuY2hvclNjcm9sbFByb3ZpZGVyCisgKgorICogQGRl
c2NyaXB0aW9uCisgKiBVc2UgYCRhbmNob3JTY3JvbGxQcm92aWRlcmAgdG8gZGlzYWJsZSBhdXRv
bWF0aWMgc2Nyb2xsaW5nIHdoZW5ldmVyCisgKiB7QGxpbmsgbmcuJGxvY2F0aW9uI2hhc2ggJGxv
Y2F0aW9uLmhhc2goKX0gY2hhbmdlcy4KKyAqLworZnVuY3Rpb24gJEFuY2hvclNjcm9sbFByb3Zp
ZGVyKCkgeworCisgIHZhciBhdXRvU2Nyb2xsaW5nRW5hYmxlZCA9IHRydWU7CisKKyAgLyoqCisg
ICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgJGFuY2hvclNjcm9sbFByb3ZpZGVyI2Rpc2Fi
bGVBdXRvU2Nyb2xsaW5nCisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBCeSBkZWZhdWx0
LCB7QGxpbmsgbmcuJGFuY2hvclNjcm9sbCAkYW5jaG9yU2Nyb2xsKCl9IHdpbGwgYXV0b21hdGlj
YWxseSBkZXRlY3QgY2hhbmdlcyB0bworICAgKiB7QGxpbmsgbmcuJGxvY2F0aW9uI2hhc2ggJGxv
Y2F0aW9uLmhhc2goKX0gYW5kIHNjcm9sbCB0byB0aGUgZWxlbWVudCBtYXRjaGluZyB0aGUgbmV3
IGhhc2guPGJyIC8+CisgICAqIFVzZSB0aGlzIG1ldGhvZCB0byBkaXNhYmxlIGF1dG9tYXRpYyBz
Y3JvbGxpbmcuCisgICAqCisgICAqIElmIGF1dG9tYXRpYyBzY3JvbGxpbmcgaXMgZGlzYWJsZWQs
IG9uZSBtdXN0IGV4cGxpY2l0bHkgY2FsbAorICAgKiB7QGxpbmsgbmcuJGFuY2hvclNjcm9sbCAk
YW5jaG9yU2Nyb2xsKCl9IGluIG9yZGVyIHRvIHNjcm9sbCB0byB0aGUgZWxlbWVudCByZWxhdGVk
IHRvIHRoZQorICAgKiBjdXJyZW50IGhhc2guCisgICAqLworICB0aGlzLmRpc2FibGVBdXRvU2Ny
b2xsaW5nID0gZnVuY3Rpb24oKSB7CisgICAgYXV0b1Njcm9sbGluZ0VuYWJsZWQgPSBmYWxzZTsK
KyAgfTsKKworICAvKioKKyAgICogQG5nZG9jIHNlcnZpY2UKKyAgICogQG5hbWUgJGFuY2hvclNj
cm9sbAorICAgKiBAa2luZCBmdW5jdGlvbgorICAgKiBAcmVxdWlyZXMgJHdpbmRvdworICAgKiBA
cmVxdWlyZXMgJGxvY2F0aW9uCisgICAqIEByZXF1aXJlcyAkcm9vdFNjb3BlCisgICAqCisgICAq
IEBkZXNjcmlwdGlvbgorICAgKiBXaGVuIGNhbGxlZCwgaXQgc2Nyb2xscyB0byB0aGUgZWxlbWVu
dCByZWxhdGVkIHRvIHRoZSBzcGVjaWZpZWQgYGhhc2hgIG9yIChpZiBvbWl0dGVkKSB0byB0aGUK
KyAgICogY3VycmVudCB2YWx1ZSBvZiB7QGxpbmsgbmcuJGxvY2F0aW9uI2hhc2ggJGxvY2F0aW9u
Lmhhc2goKX0sIGFjY29yZGluZyB0byB0aGUgcnVsZXMgc3BlY2lmaWVkCisgICAqIGluIHRoZQor
ICAgKiBbSFRNTDUgc3BlY10oaHR0cDovL2Rldi53My5vcmcvaHRtbDUvc3BlYy9PdmVydmlldy5o
dG1sI3RoZS1pbmRpY2F0ZWQtcGFydC1vZi10aGUtZG9jdW1lbnQpLgorICAgKgorICAgKiBJdCBh
bHNvIHdhdGNoZXMgdGhlIHtAbGluayBuZy4kbG9jYXRpb24jaGFzaCAkbG9jYXRpb24uaGFzaCgp
fSBhbmQgYXV0b21hdGljYWxseSBzY3JvbGxzIHRvCisgICAqIG1hdGNoIGFueSBhbmNob3Igd2hl
bmV2ZXIgaXQgY2hhbmdlcy4gVGhpcyBjYW4gYmUgZGlzYWJsZWQgYnkgY2FsbGluZworICAgKiB7
QGxpbmsgbmcuJGFuY2hvclNjcm9sbFByb3ZpZGVyI2Rpc2FibGVBdXRvU2Nyb2xsaW5nICRhbmNo
b3JTY3JvbGxQcm92aWRlci5kaXNhYmxlQXV0b1Njcm9sbGluZygpfS4KKyAgICoKKyAgICogQWRk
aXRpb25hbGx5LCB5b3UgY2FuIHVzZSBpdHMge0BsaW5rIG5nLiRhbmNob3JTY3JvbGwjeU9mZnNl
dCB5T2Zmc2V0fSBwcm9wZXJ0eSB0byBzcGVjaWZ5IGEKKyAgICogdmVydGljYWwgc2Nyb2xsLW9m
ZnNldCAoZWl0aGVyIGZpeGVkIG9yIGR5bmFtaWMpLgorICAgKgorICAgKiBAcGFyYW0ge3N0cmlu
Zz19IGhhc2ggVGhlIGhhc2ggc3BlY2lmeWluZyB0aGUgZWxlbWVudCB0byBzY3JvbGwgdG8uIElm
IG9taXR0ZWQsIHRoZSB2YWx1ZSBvZgorICAgKiAgICAgICAgICAgICAgICAgICAgICAge0BsaW5r
IG5nLiRsb2NhdGlvbiNoYXNoICRsb2NhdGlvbi5oYXNoKCl9IHdpbGwgYmUgdXNlZC4KKyAgICoK
KyAgICogQHByb3BlcnR5IHsobnVtYmVyfGZ1bmN0aW9ufGpxTGl0ZSl9IHlPZmZzZXQKKyAgICog
SWYgc2V0LCBzcGVjaWZpZXMgYSB2ZXJ0aWNhbCBzY3JvbGwtb2Zmc2V0LiBUaGlzIGlzIG9mdGVu
IHVzZWZ1bCB3aGVuIHRoZXJlIGFyZSBmaXhlZAorICAgKiBwb3NpdGlvbmVkIGVsZW1lbnRzIGF0
IHRoZSB0b3Agb2YgdGhlIHBhZ2UsIHN1Y2ggYXMgbmF2YmFycywgaGVhZGVycyBldGMuCisgICAq
CisgICAqIGB5T2Zmc2V0YCBjYW4gYmUgc3BlY2lmaWVkIGluIHZhcmlvdXMgd2F5czoKKyAgICog
LSAqKm51bWJlcioqOiBBIGZpeGVkIG51bWJlciBvZiBwaXhlbHMgdG8gYmUgdXNlZCBhcyBvZmZz
ZXQuPGJyIC8+PGJyIC8+CisgICAqIC0gKipmdW5jdGlvbioqOiBBIGdldHRlciBmdW5jdGlvbiBj
YWxsZWQgZXZlcnl0aW1lIGAkYW5jaG9yU2Nyb2xsKClgIGlzIGV4ZWN1dGVkLiBNdXN0IHJldHVy
bgorICAgKiAgIGEgbnVtYmVyIHJlcHJlc2VudGluZyB0aGUgb2Zmc2V0IChpbiBwaXhlbHMpLjxi
ciAvPjxiciAvPgorICAgKiAtICoqanFMaXRlKio6IEEganFMaXRlL2pRdWVyeSBlbGVtZW50IHRv
IGJlIHVzZWQgZm9yIHNwZWNpZnlpbmcgdGhlIG9mZnNldC4gVGhlIGRpc3RhbmNlIGZyb20KKyAg
ICogICB0aGUgdG9wIG9mIHRoZSBwYWdlIHRvIHRoZSBlbGVtZW50J3MgYm90dG9tIHdpbGwgYmUg
dXNlZCBhcyBvZmZzZXQuPGJyIC8+CisgICAqICAgKipOb3RlKio6IFRoZSBlbGVtZW50IHdpbGwg
YmUgdGFrZW4gaW50byBhY2NvdW50IG9ubHkgYXMgbG9uZyBhcyBpdHMgYHBvc2l0aW9uYCBpcyBz
ZXQgdG8KKyAgICogICBgZml4ZWRgLiBUaGlzIG9wdGlvbiBpcyB1c2VmdWwsIHdoZW4gZGVhbGlu
ZyB3aXRoIHJlc3BvbnNpdmUgbmF2YmFycy9oZWFkZXJzIHRoYXQgYWRqdXN0CisgICAqICAgdGhl
aXIgaGVpZ2h0IGFuZC9vciBwb3NpdGlvbmluZyBhY2NvcmRpbmcgdG8gdGhlIHZpZXdwb3J0J3Mg
c2l6ZS4KKyAgICoKKyAgICogPGJyIC8+CisgICAqIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LXdh
cm5pbmciPgorICAgKiBJbiBvcmRlciBmb3IgYHlPZmZzZXRgIHRvIHdvcmsgcHJvcGVybHksIHNj
cm9sbGluZyBzaG91bGQgdGFrZSBwbGFjZSBvbiB0aGUgZG9jdW1lbnQncyByb290IGFuZAorICAg
KiBub3Qgc29tZSBjaGlsZCBlbGVtZW50LgorICAgKiA8L2Rpdj4KKyAgICoKKyAgICogQGV4YW1w
bGUKKyAgICAgPGV4YW1wbGUgbW9kdWxlPSJhbmNob3JTY3JvbGxFeGFtcGxlIj4KKyAgICAgICA8
ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgICAgIDxkaXYgaWQ9InNjcm9sbEFyZWEiIG5n
LWNvbnRyb2xsZXI9IlNjcm9sbENvbnRyb2xsZXIiPgorICAgICAgICAgICA8YSBuZy1jbGljaz0i
Z290b0JvdHRvbSgpIj5HbyB0byBib3R0b208L2E+CisgICAgICAgICAgIDxhIGlkPSJib3R0b20i
PjwvYT4gWW91J3JlIGF0IHRoZSBib3R0b20hCisgICAgICAgICA8L2Rpdj4KKyAgICAgICA8L2Zp
bGU+CisgICAgICAgPGZpbGUgbmFtZT0ic2NyaXB0LmpzIj4KKyAgICAgICAgIGFuZ3VsYXIubW9k
dWxlKCdhbmNob3JTY3JvbGxFeGFtcGxlJywgW10pCisgICAgICAgICAgIC5jb250cm9sbGVyKCdT
Y3JvbGxDb250cm9sbGVyJywgWyckc2NvcGUnLCAnJGxvY2F0aW9uJywgJyRhbmNob3JTY3JvbGwn
LAorICAgICAgICAgICAgIGZ1bmN0aW9uICgkc2NvcGUsICRsb2NhdGlvbiwgJGFuY2hvclNjcm9s
bCkgeworICAgICAgICAgICAgICAgJHNjb3BlLmdvdG9Cb3R0b20gPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICAgLy8gc2V0IHRoZSBsb2NhdGlvbi5oYXNoIHRvIHRoZSBpZCBvZgorICAg
ICAgICAgICAgICAgICAvLyB0aGUgZWxlbWVudCB5b3Ugd2lzaCB0byBzY3JvbGwgdG8uCisgICAg
ICAgICAgICAgICAgICRsb2NhdGlvbi5oYXNoKCdib3R0b20nKTsKKworICAgICAgICAgICAgICAg
ICAvLyBjYWxsICRhbmNob3JTY3JvbGwoKQorICAgICAgICAgICAgICAgICAkYW5jaG9yU2Nyb2xs
KCk7CisgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgIH1dKTsKKyAgICAgICA8L2ZpbGU+
CisgICAgICAgPGZpbGUgbmFtZT0ic3R5bGUuY3NzIj4KKyAgICAgICAgICNzY3JvbGxBcmVhIHsK
KyAgICAgICAgICAgaGVpZ2h0OiAyODBweDsKKyAgICAgICAgICAgb3ZlcmZsb3c6IGF1dG87Cisg
ICAgICAgICB9CisKKyAgICAgICAgICNib3R0b20geworICAgICAgICAgICBkaXNwbGF5OiBibG9j
azsKKyAgICAgICAgICAgbWFyZ2luLXRvcDogMjAwMHB4OworICAgICAgICAgfQorICAgICAgIDwv
ZmlsZT4KKyAgICAgPC9leGFtcGxlPgorICAgKgorICAgKiA8aHIgLz4KKyAgICogVGhlIGV4YW1w
bGUgYmVsb3cgaWxsdXN0cmF0ZXMgdGhlIHVzZSBvZiBhIHZlcnRpY2FsIHNjcm9sbC1vZmZzZXQg
KHNwZWNpZmllZCBhcyBhIGZpeGVkIHZhbHVlKS4KKyAgICogU2VlIHtAbGluayBuZy4kYW5jaG9y
U2Nyb2xsI3lPZmZzZXQgJGFuY2hvclNjcm9sbC55T2Zmc2V0fSBmb3IgbW9yZSBkZXRhaWxzLgor
ICAgKgorICAgKiBAZXhhbXBsZQorICAgICA8ZXhhbXBsZSBtb2R1bGU9ImFuY2hvclNjcm9sbE9m
ZnNldEV4YW1wbGUiPgorICAgICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICAgICAg
PGRpdiBjbGFzcz0iZml4ZWQtaGVhZGVyIiBuZy1jb250cm9sbGVyPSJoZWFkZXJDdHJsIj4KKyAg
ICAgICAgICAgPGEgaHJlZj0iIiBuZy1jbGljaz0iZ290b0FuY2hvcih4KSIgbmctcmVwZWF0PSJ4
IGluIFsxLDIsMyw0LDVdIj4KKyAgICAgICAgICAgICBHbyB0byBhbmNob3Ige3t4fX0KKyAgICAg
ICAgICAgPC9hPgorICAgICAgICAgPC9kaXY+CisgICAgICAgICA8ZGl2IGlkPSJhbmNob3J7e3h9
fSIgY2xhc3M9ImFuY2hvciIgbmctcmVwZWF0PSJ4IGluIFsxLDIsMyw0LDVdIj4KKyAgICAgICAg
ICAgQW5jaG9yIHt7eH19IG9mIDUKKyAgICAgICAgIDwvZGl2PgorICAgICAgIDwvZmlsZT4KKyAg
ICAgICA8ZmlsZSBuYW1lPSJzY3JpcHQuanMiPgorICAgICAgICAgYW5ndWxhci5tb2R1bGUoJ2Fu
Y2hvclNjcm9sbE9mZnNldEV4YW1wbGUnLCBbXSkKKyAgICAgICAgICAgLnJ1bihbJyRhbmNob3JT
Y3JvbGwnLCBmdW5jdGlvbigkYW5jaG9yU2Nyb2xsKSB7CisgICAgICAgICAgICAgJGFuY2hvclNj
cm9sbC55T2Zmc2V0ID0gNTA7ICAgLy8gYWx3YXlzIHNjcm9sbCBieSA1MCBleHRyYSBwaXhlbHMK
KyAgICAgICAgICAgfV0pCisgICAgICAgICAgIC5jb250cm9sbGVyKCdoZWFkZXJDdHJsJywgWyck
YW5jaG9yU2Nyb2xsJywgJyRsb2NhdGlvbicsICckc2NvcGUnLAorICAgICAgICAgICAgIGZ1bmN0
aW9uICgkYW5jaG9yU2Nyb2xsLCAkbG9jYXRpb24sICRzY29wZSkgeworICAgICAgICAgICAgICAg
JHNjb3BlLmdvdG9BbmNob3IgPSBmdW5jdGlvbih4KSB7CisgICAgICAgICAgICAgICAgIHZhciBu
ZXdIYXNoID0gJ2FuY2hvcicgKyB4OworICAgICAgICAgICAgICAgICBpZiAoJGxvY2F0aW9uLmhh
c2goKSAhPT0gbmV3SGFzaCkgeworICAgICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgJGxvY2F0
aW9uLmhhc2ggdG8gYG5ld0hhc2hgIGFuZAorICAgICAgICAgICAgICAgICAgIC8vICRhbmNob3JT
Y3JvbGwgd2lsbCBhdXRvbWF0aWNhbGx5IHNjcm9sbCB0byBpdAorICAgICAgICAgICAgICAgICAg
ICRsb2NhdGlvbi5oYXNoKCdhbmNob3InICsgeCk7CisgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgLy8gY2FsbCAkYW5jaG9yU2Nyb2xsKCkgZXhwbGljaXRseSwK
KyAgICAgICAgICAgICAgICAgICAvLyBzaW5jZSAkbG9jYXRpb24uaGFzaCBoYXNuJ3QgY2hhbmdl
ZAorICAgICAgICAgICAgICAgICAgICRhbmNob3JTY3JvbGwoKTsKKyAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgIF0pOworICAg
ICAgIDwvZmlsZT4KKyAgICAgICA8ZmlsZSBuYW1lPSJzdHlsZS5jc3MiPgorICAgICAgICAgYm9k
eSB7CisgICAgICAgICAgIHBhZGRpbmctdG9wOiA1MHB4OworICAgICAgICAgfQorCisgICAgICAg
ICAuYW5jaG9yIHsKKyAgICAgICAgICAgYm9yZGVyOiAycHggZGFzaGVkIERhcmtPcmNoaWQ7Cisg
ICAgICAgICAgIHBhZGRpbmc6IDEwcHggMTBweCAyMDBweCAxMHB4OworICAgICAgICAgfQorCisg
ICAgICAgICAuZml4ZWQtaGVhZGVyIHsKKyAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdi
YSgwLCAwLCAwLCAwLjIpOworICAgICAgICAgICBoZWlnaHQ6IDUwcHg7CisgICAgICAgICAgIHBv
c2l0aW9uOiBmaXhlZDsKKyAgICAgICAgICAgdG9wOiAwOyBsZWZ0OiAwOyByaWdodDogMDsKKyAg
ICAgICAgIH0KKworICAgICAgICAgLmZpeGVkLWhlYWRlciA+IGEgeworICAgICAgICAgICBkaXNw
bGF5OiBpbmxpbmUtYmxvY2s7CisgICAgICAgICAgIG1hcmdpbjogNXB4IDE1cHg7CisgICAgICAg
ICB9CisgICAgICAgPC9maWxlPgorICAgICA8L2V4YW1wbGU+CisgICAqLworICB0aGlzLiRnZXQg
PSBbJyR3aW5kb3cnLCAnJGxvY2F0aW9uJywgJyRyb290U2NvcGUnLCBmdW5jdGlvbigkd2luZG93
LCAkbG9jYXRpb24sICRyb290U2NvcGUpIHsKKyAgICB2YXIgZG9jdW1lbnQgPSAkd2luZG93LmRv
Y3VtZW50OworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCBmaXJzdCBhbmNob3IgZnJv
bSBhIE5vZGVMaXN0CisgICAgLy8gKHVzaW5nIGBBcnJheSNzb21lKClgIGluc3RlYWQgb2YgYGFu
Z3VsYXIjZm9yRWFjaCgpYCBzaW5jZSBpdCdzIG1vcmUgcGVyZm9ybWFudAorICAgIC8vICBhbmQg
d29ya2luZyBpbiBhbGwgc3VwcG9ydGVkIGJyb3dzZXJzLikKKyAgICBmdW5jdGlvbiBnZXRGaXJz
dEFuY2hvcihsaXN0KSB7CisgICAgICB2YXIgcmVzdWx0ID0gbnVsbDsKKyAgICAgIEFycmF5LnBy
b3RvdHlwZS5zb21lLmNhbGwobGlzdCwgZnVuY3Rpb24oZWxlbWVudCkgeworICAgICAgICBpZiAo
bm9kZU5hbWVfKGVsZW1lbnQpID09PSAnYScpIHsKKyAgICAgICAgICByZXN1bHQgPSBlbGVtZW50
OworICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICB9KTsKKyAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgZnVuY3Rpb24gZ2V0WU9mZnNldCgpIHsKKworICAg
ICAgdmFyIG9mZnNldCA9IHNjcm9sbC55T2Zmc2V0OworCisgICAgICBpZiAoaXNGdW5jdGlvbihv
ZmZzZXQpKSB7CisgICAgICAgIG9mZnNldCA9IG9mZnNldCgpOworICAgICAgfSBlbHNlIGlmIChp
c0VsZW1lbnQob2Zmc2V0KSkgeworICAgICAgICB2YXIgZWxlbSA9IG9mZnNldFswXTsKKyAgICAg
ICAgdmFyIHN0eWxlID0gJHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW0pOworICAgICAgICBp
ZiAoc3R5bGUucG9zaXRpb24gIT09ICdmaXhlZCcpIHsKKyAgICAgICAgICBvZmZzZXQgPSAwOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgIG9mZnNldCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGll
bnRSZWN0KCkuYm90dG9tOworICAgICAgICB9CisgICAgICB9IGVsc2UgaWYgKCFpc051bWJlcihv
ZmZzZXQpKSB7CisgICAgICAgIG9mZnNldCA9IDA7CisgICAgICB9CisKKyAgICAgIHJldHVybiBv
ZmZzZXQ7CisgICAgfQorCisgICAgZnVuY3Rpb24gc2Nyb2xsVG8oZWxlbSkgeworICAgICAgaWYg
KGVsZW0pIHsKKyAgICAgICAgZWxlbS5zY3JvbGxJbnRvVmlldygpOworCisgICAgICAgIHZhciBv
ZmZzZXQgPSBnZXRZT2Zmc2V0KCk7CisKKyAgICAgICAgaWYgKG9mZnNldCkgeworICAgICAgICAg
IC8vIGBvZmZzZXRgIGlzIHRoZSBudW1iZXIgb2YgcGl4ZWxzIHdlIHNob3VsZCBzY3JvbGwgVVAg
aW4gb3JkZXIgdG8gYWxpZ24gYGVsZW1gIHByb3Blcmx5LgorICAgICAgICAgIC8vIFRoaXMgaXMg
dHJ1ZSBPTkxZIGlmIHRoZSBjYWxsIHRvIGBlbGVtLnNjcm9sbEludG9WaWV3KClgIGluaXRpYWxs
eSBhbGlnbnMgYGVsZW1gIGF0IHRoZQorICAgICAgICAgIC8vIHRvcCBvZiB0aGUgdmlld3BvcnQu
CisgICAgICAgICAgLy8KKyAgICAgICAgICAvLyBJRiB0aGUgbnVtYmVyIG9mIHBpeGVscyBmcm9t
IHRoZSB0b3Agb2YgYGVsZW1gIHRvIHRoZSBlbmQgb2YgdGhlIHBhZ2UncyBjb250ZW50IGlzIGxl
c3MKKyAgICAgICAgICAvLyB0aGFuIHRoZSBoZWlnaHQgb2YgdGhlIHZpZXdwb3J0LCB0aGVuIGBl
bGVtLnNjcm9sbEludG9WaWV3KClgIHdpbGwgYWxpZ24gdGhlIGBlbGVtYCBzb21lCisgICAgICAg
ICAgLy8gd2F5IGRvd24gdGhlIHBhZ2UuCisgICAgICAgICAgLy8KKyAgICAgICAgICAvLyBUaGlz
IGlzIG9mdGVuIHRoZSBjYXNlIGZvciBlbGVtZW50cyBuZWFyIHRoZSBib3R0b20gb2YgdGhlIHBh
Z2UuCisgICAgICAgICAgLy8KKyAgICAgICAgICAvLyBJbiBzdWNoIGNhc2VzIHdlIGRvIG5vdCBu
ZWVkIHRvIHNjcm9sbCB0aGUgd2hvbGUgYG9mZnNldGAgdXAsIGp1c3QgdGhlIGRpZmZlcmVuY2Ug
YmV0d2VlbgorICAgICAgICAgIC8vIHRoZSB0b3Agb2YgdGhlIGVsZW1lbnQgYW5kIHRoZSBvZmZz
ZXQsIHdoaWNoIGlzIGVub3VnaCB0byBhbGlnbiB0aGUgdG9wIG9mIGBlbGVtYCBhdCB0aGUKKyAg
ICAgICAgICAvLyBkZXNpcmVkIHBvc2l0aW9uLgorICAgICAgICAgIHZhciBlbGVtVG9wID0gZWxl
bS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7CisgICAgICAgICAgJHdpbmRvdy5zY3JvbGxC
eSgwLCBlbGVtVG9wIC0gb2Zmc2V0KTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgJHdpbmRvdy5zY3JvbGxUbygwLCAwKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlv
biBzY3JvbGwoaGFzaCkgeworICAgICAgaGFzaCA9IGlzU3RyaW5nKGhhc2gpID8gaGFzaCA6ICRs
b2NhdGlvbi5oYXNoKCk7CisgICAgICB2YXIgZWxtOworCisgICAgICAvLyBlbXB0eSBoYXNoLCBz
Y3JvbGwgdG8gdGhlIHRvcCBvZiB0aGUgcGFnZQorICAgICAgaWYgKCFoYXNoKSBzY3JvbGxUbyhu
dWxsKTsKKworICAgICAgLy8gZWxlbWVudCB3aXRoIGdpdmVuIGlkCisgICAgICBlbHNlIGlmICgo
ZWxtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaGFzaCkpKSBzY3JvbGxUbyhlbG0pOworCisg
ICAgICAvLyBmaXJzdCBhbmNob3Igd2l0aCBnaXZlbiBuYW1lIDotRAorICAgICAgZWxzZSBpZiAo
KGVsbSA9IGdldEZpcnN0QW5jaG9yKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKGhhc2gpKSkp
IHNjcm9sbFRvKGVsbSk7CisKKyAgICAgIC8vIG5vIGVsZW1lbnQgYW5kIGhhc2ggPT0gJ3RvcCcs
IHNjcm9sbCB0byB0aGUgdG9wIG9mIHRoZSBwYWdlCisgICAgICBlbHNlIGlmIChoYXNoID09PSAn
dG9wJykgc2Nyb2xsVG8obnVsbCk7CisgICAgfQorCisgICAgLy8gZG9lcyBub3Qgc2Nyb2xsIHdo
ZW4gdXNlciBjbGlja3Mgb24gYW5jaG9yIGxpbmsgdGhhdCBpcyBjdXJyZW50bHkgb24KKyAgICAv
LyAobm8gdXJsIGNoYW5nZSwgbm8gJGxvY2F0aW9uLmhhc2goKSBjaGFuZ2UpLCBicm93c2VyIG5h
dGl2ZSBkb2VzIHNjcm9sbAorICAgIGlmIChhdXRvU2Nyb2xsaW5nRW5hYmxlZCkgeworICAgICAg
JHJvb3RTY29wZS4kd2F0Y2goZnVuY3Rpb24gYXV0b1Njcm9sbFdhdGNoKCkge3JldHVybiAkbG9j
YXRpb24uaGFzaCgpO30sCisgICAgICAgIGZ1bmN0aW9uIGF1dG9TY3JvbGxXYXRjaEFjdGlvbihu
ZXdWYWwsIG9sZFZhbCkgeworICAgICAgICAgIC8vIHNraXAgdGhlIGluaXRpYWwgc2Nyb2xsIGlm
ICRsb2NhdGlvbi5oYXNoIGlzIGVtcHR5CisgICAgICAgICAgaWYgKG5ld1ZhbCA9PT0gb2xkVmFs
ICYmIG5ld1ZhbCA9PT0gJycpIHJldHVybjsKKworICAgICAgICAgIGpxTGl0ZURvY3VtZW50TG9h
ZGVkKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgJHJvb3RTY29wZS4kZXZhbEFzeW5jKHNjcm9s
bCk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHJldHVybiBzY3Jv
bGw7CisgIH1dOworfQorCit2YXIgJGFuaW1hdGVNaW5FcnIgPSBtaW5FcnIoJyRhbmltYXRlJyk7
Cit2YXIgRUxFTUVOVF9OT0RFID0gMTsKK3ZhciBOR19BTklNQVRFX0NMQVNTTkFNRSA9ICduZy1h
bmltYXRlJzsKKworZnVuY3Rpb24gbWVyZ2VDbGFzc2VzKGEsYikgeworICBpZiAoIWEgJiYgIWIp
IHJldHVybiAnJzsKKyAgaWYgKCFhKSByZXR1cm4gYjsKKyAgaWYgKCFiKSByZXR1cm4gYTsKKyAg
aWYgKGlzQXJyYXkoYSkpIGEgPSBhLmpvaW4oJyAnKTsKKyAgaWYgKGlzQXJyYXkoYikpIGIgPSBi
LmpvaW4oJyAnKTsKKyAgcmV0dXJuIGEgKyAnICcgKyBiOworfQorCitmdW5jdGlvbiBleHRyYWN0
RWxlbWVudE5vZGUoZWxlbWVudCkgeworICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnQubGVu
Z3RoOyBpKyspIHsKKyAgICB2YXIgZWxtID0gZWxlbWVudFtpXTsKKyAgICBpZiAoZWxtLm5vZGVU
eXBlID09PSBFTEVNRU5UX05PREUpIHsKKyAgICAgIHJldHVybiBlbG07CisgICAgfQorICB9Cit9
CisKK2Z1bmN0aW9uIHNwbGl0Q2xhc3NlcyhjbGFzc2VzKSB7CisgIGlmIChpc1N0cmluZyhjbGFz
c2VzKSkgeworICAgIGNsYXNzZXMgPSBjbGFzc2VzLnNwbGl0KCcgJyk7CisgIH0KKworICAvLyBV
c2UgY3JlYXRlTWFwKCkgdG8gcHJldmVudCBjbGFzcyBhc3N1bXB0aW9ucyBpbnZvbHZpbmcgcHJv
cGVydHkgbmFtZXMgaW4KKyAgLy8gT2JqZWN0LnByb3RvdHlwZQorICB2YXIgb2JqID0gY3JlYXRl
TWFwKCk7CisgIGZvckVhY2goY2xhc3NlcywgZnVuY3Rpb24oa2xhc3MpIHsKKyAgICAvLyBzb21l
dGltZXMgdGhlIHNwbGl0IGxlYXZlcyBlbXB0eSBzdHJpbmcgdmFsdWVzCisgICAgLy8gaW5jYXNl
IGV4dHJhIHNwYWNlcyB3ZXJlIGFwcGxpZWQgdG8gdGhlIG9wdGlvbnMKKyAgICBpZiAoa2xhc3Mu
bGVuZ3RoKSB7CisgICAgICBvYmpba2xhc3NdID0gdHJ1ZTsKKyAgICB9CisgIH0pOworICByZXR1
cm4gb2JqOworfQorCisvLyBpZiBhbnkgb3RoZXIgdHlwZSBvZiBvcHRpb25zIHZhbHVlIGJlc2lk
ZXMgYW4gT2JqZWN0IHZhbHVlIGlzCisvLyBwYXNzZWQgaW50byB0aGUgJGFuaW1hdGUubWV0aG9k
KCkgYW5pbWF0aW9uIHRoZW4gdGhpcyBoZWxwZXIgY29kZQorLy8gd2lsbCBiZSBydW4gd2hpY2gg
d2lsbCBpZ25vcmUgaXQuIFdoaWxlIHRoaXMgcGF0Y2ggaXMgbm90IHRoZQorLy8gZ3JlYXRlc3Qg
c29sdXRpb24gdG8gdGhpcywgYSBsb3Qgb2YgZXhpc3RpbmcgcGx1Z2lucyBkZXBlbmQgb24KKy8v
ICRhbmltYXRlIHRvIGVpdGhlciBjYWxsIHRoZSBjYWxsYmFjayAoPCAxLjIpIG9yIHJldHVybiBh
IHByb21pc2UKKy8vIHRoYXQgY2FuIGJlIGNoYW5nZWQuIFRoaXMgaGVscGVyIGZ1bmN0aW9uIGVu
c3VyZXMgdGhhdCB0aGUgb3B0aW9ucworLy8gYXJlIHdpcGVkIGNsZWFuIGluY2FzZSBhIGNhbGxi
YWNrIGZ1bmN0aW9uIGlzIHByb3ZpZGVkLgorZnVuY3Rpb24gcHJlcGFyZUFuaW1hdGVPcHRpb25z
KG9wdGlvbnMpIHsKKyAgcmV0dXJuIGlzT2JqZWN0KG9wdGlvbnMpCisgICAgICA/IG9wdGlvbnMK
KyAgICAgIDoge307Cit9CisKK3ZhciAkJENvcmVBbmltYXRlUnVubmVyUHJvdmlkZXIgPSBmdW5j
dGlvbigpIHsKKyAgdGhpcy4kZ2V0ID0gWyckcScsICckJHJBRicsIGZ1bmN0aW9uKCRxLCAkJHJB
RikgeworICAgIGZ1bmN0aW9uIEFuaW1hdGVSdW5uZXIoKSB7fQorICAgIEFuaW1hdGVSdW5uZXIu
YWxsID0gbm9vcDsKKyAgICBBbmltYXRlUnVubmVyLmNoYWluID0gbm9vcDsKKyAgICBBbmltYXRl
UnVubmVyLnByb3RvdHlwZSA9IHsKKyAgICAgIGVuZDogbm9vcCwKKyAgICAgIGNhbmNlbDogbm9v
cCwKKyAgICAgIHJlc3VtZTogbm9vcCwKKyAgICAgIHBhdXNlOiBub29wLAorICAgICAgY29tcGxl
dGU6IG5vb3AsCisgICAgICB0aGVuOiBmdW5jdGlvbihwYXNzLCBmYWlsKSB7CisgICAgICAgIHJl
dHVybiAkcShmdW5jdGlvbihyZXNvbHZlKSB7CisgICAgICAgICAgJCRyQUYoZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICByZXNvbHZlKCk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0pLnRoZW4o
cGFzcywgZmFpbCk7CisgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gQW5pbWF0ZVJ1bm5lcjsK
KyAgfV07Cit9OworCisvLyB0aGlzIGlzIHByZWZpeGVkIHdpdGggQ29yZSBzaW5jZSBpdCBjb25m
bGljdHMgd2l0aAorLy8gdGhlIGFuaW1hdGVRdWV1ZVByb3ZpZGVyIGRlZmluZWQgaW4gbmdBbmlt
YXRlL2FuaW1hdGVRdWV1ZS5qcwordmFyICQkQ29yZUFuaW1hdGVRdWV1ZVByb3ZpZGVyID0gZnVu
Y3Rpb24oKSB7CisgIHZhciBwb3N0RGlnZXN0UXVldWUgPSBuZXcgSGFzaE1hcCgpOworICB2YXIg
cG9zdERpZ2VzdEVsZW1lbnRzID0gW107CisKKyAgdGhpcy4kZ2V0ID0gWyckJEFuaW1hdGVSdW5u
ZXInLCAnJHJvb3RTY29wZScsCisgICAgICAgZnVuY3Rpb24oJCRBbmltYXRlUnVubmVyLCAgICRy
b290U2NvcGUpIHsKKyAgICByZXR1cm4geworICAgICAgZW5hYmxlZDogbm9vcCwKKyAgICAgIG9u
OiBub29wLAorICAgICAgb2ZmOiBub29wLAorICAgICAgcGluOiBub29wLAorCisgICAgICBwdXNo
OiBmdW5jdGlvbihlbGVtZW50LCBldmVudCwgb3B0aW9ucywgZG9tT3BlcmF0aW9uKSB7CisgICAg
ICAgIGRvbU9wZXJhdGlvbiAgICAgICAgJiYgZG9tT3BlcmF0aW9uKCk7CisKKyAgICAgICAgb3B0
aW9ucyA9IG9wdGlvbnMgfHwge307CisgICAgICAgIG9wdGlvbnMuZnJvbSAgICAgICAgJiYgZWxl
bWVudC5jc3Mob3B0aW9ucy5mcm9tKTsKKyAgICAgICAgb3B0aW9ucy50byAgICAgICAgICAmJiBl
bGVtZW50LmNzcyhvcHRpb25zLnRvKTsKKworICAgICAgICBpZiAob3B0aW9ucy5hZGRDbGFzcyB8
fCBvcHRpb25zLnJlbW92ZUNsYXNzKSB7CisgICAgICAgICAgYWRkUmVtb3ZlQ2xhc3Nlc1Bvc3RE
aWdlc3QoZWxlbWVudCwgb3B0aW9ucy5hZGRDbGFzcywgb3B0aW9ucy5yZW1vdmVDbGFzcyk7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmV3ICQkQW5pbWF0ZVJ1bm5lcigpOyAvLyBqc2hp
bnQgaWdub3JlOmxpbmUKKyAgICAgIH0KKyAgICB9OworCisgICAgZnVuY3Rpb24gYWRkUmVtb3Zl
Q2xhc3Nlc1Bvc3REaWdlc3QoZWxlbWVudCwgYWRkLCByZW1vdmUpIHsKKyAgICAgIHZhciBkYXRh
ID0gcG9zdERpZ2VzdFF1ZXVlLmdldChlbGVtZW50KTsKKyAgICAgIHZhciBjbGFzc1ZhbDsKKwor
ICAgICAgaWYgKCFkYXRhKSB7CisgICAgICAgIHBvc3REaWdlc3RRdWV1ZS5wdXQoZWxlbWVudCwg
ZGF0YSA9IHt9KTsKKyAgICAgICAgcG9zdERpZ2VzdEVsZW1lbnRzLnB1c2goZWxlbWVudCk7Cisg
ICAgICB9CisKKyAgICAgIGlmIChhZGQpIHsKKyAgICAgICAgZm9yRWFjaChhZGQuc3BsaXQoJyAn
KSwgZnVuY3Rpb24oY2xhc3NOYW1lKSB7CisgICAgICAgICAgaWYgKGNsYXNzTmFtZSkgeworICAg
ICAgICAgICAgZGF0YVtjbGFzc05hbWVdID0gdHJ1ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0p
OworICAgICAgfQorCisgICAgICBpZiAocmVtb3ZlKSB7CisgICAgICAgIGZvckVhY2gocmVtb3Zl
LnNwbGl0KCcgJyksIGZ1bmN0aW9uKGNsYXNzTmFtZSkgeworICAgICAgICAgIGlmIChjbGFzc05h
bWUpIHsKKyAgICAgICAgICAgIGRhdGFbY2xhc3NOYW1lXSA9IGZhbHNlOworICAgICAgICAgIH0K
KyAgICAgICAgfSk7CisgICAgICB9CisKKyAgICAgIGlmIChwb3N0RGlnZXN0RWxlbWVudHMubGVu
Z3RoID4gMSkgcmV0dXJuOworCisgICAgICAkcm9vdFNjb3BlLiQkcG9zdERpZ2VzdChmdW5jdGlv
bigpIHsKKyAgICAgICAgZm9yRWFjaChwb3N0RGlnZXN0RWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1l
bnQpIHsKKyAgICAgICAgICB2YXIgZGF0YSA9IHBvc3REaWdlc3RRdWV1ZS5nZXQoZWxlbWVudCk7
CisgICAgICAgICAgaWYgKGRhdGEpIHsKKyAgICAgICAgICAgIHZhciBleGlzdGluZyA9IHNwbGl0
Q2xhc3NlcyhlbGVtZW50LmF0dHIoJ2NsYXNzJykpOworICAgICAgICAgICAgdmFyIHRvQWRkID0g
Jyc7CisgICAgICAgICAgICB2YXIgdG9SZW1vdmUgPSAnJzsKKyAgICAgICAgICAgIGZvckVhY2go
ZGF0YSwgZnVuY3Rpb24oc3RhdHVzLCBjbGFzc05hbWUpIHsKKyAgICAgICAgICAgICAgdmFyIGhh
c0NsYXNzID0gISFleGlzdGluZ1tjbGFzc05hbWVdOworICAgICAgICAgICAgICBpZiAoc3RhdHVz
ICE9PSBoYXNDbGFzcykgeworICAgICAgICAgICAgICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAg
ICAgICAgICAgIHRvQWRkICs9ICh0b0FkZC5sZW5ndGggPyAnICcgOiAnJykgKyBjbGFzc05hbWU7
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIHRvUmVtb3ZlICs9
ICh0b1JlbW92ZS5sZW5ndGggPyAnICcgOiAnJykgKyBjbGFzc05hbWU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgZm9y
RWFjaChlbGVtZW50LCBmdW5jdGlvbihlbG0pIHsKKyAgICAgICAgICAgICAgdG9BZGQgICAgJiYg
anFMaXRlQWRkQ2xhc3MoZWxtLCB0b0FkZCk7CisgICAgICAgICAgICAgIHRvUmVtb3ZlICYmIGpx
TGl0ZVJlbW92ZUNsYXNzKGVsbSwgdG9SZW1vdmUpOworICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICBwb3N0RGlnZXN0UXVldWUucmVtb3ZlKGVsZW1lbnQpOworICAgICAgICAgIH0KKyAgICAg
ICAgfSk7CisKKyAgICAgICAgcG9zdERpZ2VzdEVsZW1lbnRzLmxlbmd0aCA9IDA7CisgICAgICB9
KTsKKyAgICB9CisgIH1dOworfTsKKworLyoqCisgKiBAbmdkb2MgcHJvdmlkZXIKKyAqIEBuYW1l
ICRhbmltYXRlUHJvdmlkZXIKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIERlZmF1bHQgaW1wbGVt
ZW50YXRpb24gb2YgJGFuaW1hdGUgdGhhdCBkb2Vzbid0IHBlcmZvcm0gYW55IGFuaW1hdGlvbnMs
IGluc3RlYWQganVzdAorICogc3luY2hyb25vdXNseSBwZXJmb3JtcyBET00gdXBkYXRlcyBhbmQg
cmVzb2x2ZXMgdGhlIHJldHVybmVkIHJ1bm5lciBwcm9taXNlLgorICoKKyAqIEluIG9yZGVyIHRv
IGVuYWJsZSBhbmltYXRpb25zIHRoZSBgbmdBbmltYXRlYCBtb2R1bGUgaGFzIHRvIGJlIGxvYWRl
ZC4KKyAqCisgKiBUbyBzZWUgdGhlIGZ1bmN0aW9uYWwgaW1wbGVtZW50YXRpb24gY2hlY2sgb3V0
IGBzcmMvbmdBbmltYXRlL2FuaW1hdGUuanNgLgorICovCit2YXIgJEFuaW1hdGVQcm92aWRlciA9
IFsnJHByb3ZpZGUnLCBmdW5jdGlvbigkcHJvdmlkZSkgeworICB2YXIgcHJvdmlkZXIgPSB0aGlz
OworCisgIHRoaXMuJCRyZWdpc3RlcmVkQW5pbWF0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7
CisKKyAgIC8qKgorICAgKiBAbmdkb2MgbWV0aG9kCisgICAqIEBuYW1lICRhbmltYXRlUHJvdmlk
ZXIjcmVnaXN0ZXIKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIFJlZ2lzdGVycyBhIG5l
dyBpbmplY3RhYmxlIGFuaW1hdGlvbiBmYWN0b3J5IGZ1bmN0aW9uLiBUaGUgZmFjdG9yeSBmdW5j
dGlvbiBwcm9kdWNlcyB0aGUKKyAgICogYW5pbWF0aW9uIG9iamVjdCB3aGljaCBjb250YWlucyBj
YWxsYmFjayBmdW5jdGlvbnMgZm9yIGVhY2ggZXZlbnQgdGhhdCBpcyBleHBlY3RlZCB0byBiZQor
ICAgKiBhbmltYXRlZC4KKyAgICoKKyAgICogICAqIGBldmVudEZuYDogYGZ1bmN0aW9uKGVsZW1l
bnQsIC4uLiAsIGRvbmVGdW5jdGlvbiwgb3B0aW9ucylgCisgICAqICAgVGhlIGVsZW1lbnQgdG8g
YW5pbWF0ZSwgdGhlIGBkb25lRnVuY3Rpb25gIGFuZCB0aGUgb3B0aW9ucyBmZWQgaW50byB0aGUg
YW5pbWF0aW9uLiBEZXBlbmRpbmcKKyAgICogICBvbiB0aGUgdHlwZSBvZiBhbmltYXRpb24gYWRk
aXRpb25hbCBhcmd1bWVudHMgd2lsbCBiZSBpbmplY3RlZCBpbnRvIHRoZSBhbmltYXRpb24gZnVu
Y3Rpb24uIFRoZQorICAgKiAgIGxpc3QgYmVsb3cgZXhwbGFpbnMgdGhlIGZ1bmN0aW9uIHNpZ25h
dHVyZXMgZm9yIHRoZSBkaWZmZXJlbnQgYW5pbWF0aW9uIG1ldGhvZHM6CisgICAqCisgICAqICAg
LSBzZXRDbGFzczogZnVuY3Rpb24oZWxlbWVudCwgYWRkZWRDbGFzc2VzLCByZW1vdmVkQ2xhc3Nl
cywgZG9uZUZ1bmN0aW9uLCBvcHRpb25zKQorICAgKiAgIC0gYWRkQ2xhc3M6IGZ1bmN0aW9uKGVs
ZW1lbnQsIGFkZGVkQ2xhc3NlcywgZG9uZUZ1bmN0aW9uLCBvcHRpb25zKQorICAgKiAgIC0gcmVt
b3ZlQ2xhc3M6IGZ1bmN0aW9uKGVsZW1lbnQsIHJlbW92ZWRDbGFzc2VzLCBkb25lRnVuY3Rpb24s
IG9wdGlvbnMpCisgICAqICAgLSBlbnRlciwgbGVhdmUsIG1vdmU6IGZ1bmN0aW9uKGVsZW1lbnQs
IGRvbmVGdW5jdGlvbiwgb3B0aW9ucykKKyAgICogICAtIGFuaW1hdGU6IGZ1bmN0aW9uKGVsZW1l
bnQsIGZyb21TdHlsZXMsIHRvU3R5bGVzLCBkb25lRnVuY3Rpb24sIG9wdGlvbnMpCisgICAqCisg
ICAqICAgTWFrZSBzdXJlIHRvIHRyaWdnZXIgdGhlIGBkb25lRnVuY3Rpb25gIG9uY2UgdGhlIGFu
aW1hdGlvbiBpcyBmdWxseSBjb21wbGV0ZS4KKyAgICoKKyAgICogYGBganMKKyAgICogICByZXR1
cm4geworICAgKiAgICAgLy9lbnRlciwgbGVhdmUsIG1vdmUgc2lnbmF0dXJlCisgICAqICAgICBl
dmVudEZuIDogZnVuY3Rpb24oZWxlbWVudCwgZG9uZSwgb3B0aW9ucykgeworICAgKiAgICAgICAv
L2NvZGUgdG8gcnVuIHRoZSBhbmltYXRpb24KKyAgICogICAgICAgLy9vbmNlIGNvbXBsZXRlLCB0
aGVuIHJ1biBkb25lKCkKKyAgICogICAgICAgcmV0dXJuIGZ1bmN0aW9uIGVuZEZ1bmN0aW9uKHdh
c0NhbmNlbGxlZCkgeworICAgKiAgICAgICAgIC8vY29kZSB0byBjYW5jZWwgdGhlIGFuaW1hdGlv
bgorICAgKiAgICAgICB9CisgICAqICAgICB9CisgICAqICAgfQorICAgKiBgYGAKKyAgICoKKyAg
ICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGFuaW1hdGlvbiAodGhpcyBp
cyB3aGF0IHRoZSBjbGFzcy1iYXNlZCBDU1MgdmFsdWUgd2lsbCBiZSBjb21wYXJlZCB0bykuCisg
ICAqIEBwYXJhbSB7RnVuY3Rpb259IGZhY3RvcnkgVGhlIGZhY3RvcnkgZnVuY3Rpb24gdGhhdCB3
aWxsIGJlIGV4ZWN1dGVkIHRvIHJldHVybiB0aGUgYW5pbWF0aW9uCisgICAqICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb2JqZWN0LgorICAgKi8KKyAgdGhpcy5yZWdpc3RlciA9IGZ1bmN0aW9u
KG5hbWUsIGZhY3RvcnkpIHsKKyAgICBpZiAobmFtZSAmJiBuYW1lLmNoYXJBdCgwKSAhPT0gJy4n
KSB7CisgICAgICB0aHJvdyAkYW5pbWF0ZU1pbkVycignbm90Y3NlbCcsICJFeHBlY3RpbmcgY2xh
c3Mgc2VsZWN0b3Igc3RhcnRpbmcgd2l0aCAnLicgZ290ICd7MH0nLiIsIG5hbWUpOworICAgIH0K
KworICAgIHZhciBrZXkgPSBuYW1lICsgJy1hbmltYXRpb24nOworICAgIHByb3ZpZGVyLiQkcmVn
aXN0ZXJlZEFuaW1hdGlvbnNbbmFtZS5zdWJzdHIoMSldID0ga2V5OworICAgICRwcm92aWRlLmZh
Y3Rvcnkoa2V5LCBmYWN0b3J5KTsKKyAgfTsKKworICAvKioKKyAgICogQG5nZG9jIG1ldGhvZAor
ICAgKiBAbmFtZSAkYW5pbWF0ZVByb3ZpZGVyI2NsYXNzTmFtZUZpbHRlcgorICAgKgorICAgKiBA
ZGVzY3JpcHRpb24KKyAgICogU2V0cyBhbmQvb3IgcmV0dXJucyB0aGUgQ1NTIGNsYXNzIHJlZ3Vs
YXIgZXhwcmVzc2lvbiB0aGF0IGlzIGNoZWNrZWQgd2hlbiBwZXJmb3JtaW5nCisgICAqIGFuIGFu
aW1hdGlvbi4gVXBvbiBib290c3RyYXAgdGhlIGNsYXNzTmFtZUZpbHRlciB2YWx1ZSBpcyBub3Qg
c2V0IGF0IGFsbCBhbmQgd2lsbAorICAgKiB0aGVyZWZvcmUgZW5hYmxlICRhbmltYXRlIHRvIGF0
dGVtcHQgdG8gcGVyZm9ybSBhbiBhbmltYXRpb24gb24gYW55IGVsZW1lbnQgdGhhdCBpcyB0cmln
Z2VyZWQuCisgICAqIFdoZW4gc2V0dGluZyB0aGUgYGNsYXNzTmFtZUZpbHRlcmAgdmFsdWUsIGFu
aW1hdGlvbnMgd2lsbCBvbmx5IGJlIHBlcmZvcm1lZCBvbiBlbGVtZW50cworICAgKiB0aGF0IHN1
Y2Nlc3NmdWxseSBtYXRjaCB0aGUgZmlsdGVyIGV4cHJlc3Npb24uIFRoaXMgaW4gdHVybiBjYW4g
Ym9vc3QgcGVyZm9ybWFuY2UKKyAgICogZm9yIGxvdy1wb3dlcmVkIGRldmljZXMgYXMgd2VsbCBh
cyBhcHBsaWNhdGlvbnMgY29udGFpbmluZyBhIGxvdCBvZiBzdHJ1Y3R1cmFsIG9wZXJhdGlvbnMu
CisgICAqIEBwYXJhbSB7UmVnRXhwPX0gZXhwcmVzc2lvbiBUaGUgY2xhc3NOYW1lIGV4cHJlc3Np
b24gd2hpY2ggd2lsbCBiZSBjaGVja2VkIGFnYWluc3QgYWxsIGFuaW1hdGlvbnMKKyAgICogQHJl
dHVybiB7UmVnRXhwfSBUaGUgY3VycmVudCBDU1MgY2xhc3NOYW1lIGV4cHJlc3Npb24gdmFsdWUu
IElmIG51bGwgdGhlbiB0aGVyZSBpcyBubyBleHByZXNzaW9uIHZhbHVlCisgICAqLworICB0aGlz
LmNsYXNzTmFtZUZpbHRlciA9IGZ1bmN0aW9uKGV4cHJlc3Npb24pIHsKKyAgICBpZiAoYXJndW1l
bnRzLmxlbmd0aCA9PT0gMSkgeworICAgICAgdGhpcy4kJGNsYXNzTmFtZUZpbHRlciA9IChleHBy
ZXNzaW9uIGluc3RhbmNlb2YgUmVnRXhwKSA/IGV4cHJlc3Npb24gOiBudWxsOworICAgICAgaWYg
KHRoaXMuJCRjbGFzc05hbWVGaWx0ZXIpIHsKKyAgICAgICAgdmFyIHJlc2VydmVkUmVnZXggPSBu
ZXcgUmVnRXhwKCIoXFxzK3xcXC8pIiArIE5HX0FOSU1BVEVfQ0xBU1NOQU1FICsgIihcXHMrfFxc
LykiKTsKKyAgICAgICAgaWYgKHJlc2VydmVkUmVnZXgudGVzdCh0aGlzLiQkY2xhc3NOYW1lRmls
dGVyLnRvU3RyaW5nKCkpKSB7CisgICAgICAgICAgdGhyb3cgJGFuaW1hdGVNaW5FcnIoJ25vbmdj
bHMnLCckYW5pbWF0ZVByb3ZpZGVyLmNsYXNzTmFtZUZpbHRlcihyZWdleCkgcHJvaGliaXRzIGFj
Y2VwdGluZyBhIHJlZ2V4IHZhbHVlIHdoaWNoIG1hdGNoZXMvY29udGFpbnMgdGhlICJ7MH0iIENT
UyBjbGFzcy4nLCBOR19BTklNQVRFX0NMQVNTTkFNRSk7CisKKyAgICAgICAgfQorICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gdGhpcy4kJGNsYXNzTmFtZUZpbHRlcjsKKyAgfTsKKworICB0aGlz
LiRnZXQgPSBbJyQkYW5pbWF0ZVF1ZXVlJywgZnVuY3Rpb24oJCRhbmltYXRlUXVldWUpIHsKKyAg
ICBmdW5jdGlvbiBkb21JbnNlcnQoZWxlbWVudCwgcGFyZW50RWxlbWVudCwgYWZ0ZXJFbGVtZW50
KSB7CisgICAgICAvLyBpZiBmb3Igc29tZSByZWFzb24gdGhlIHByZXZpb3VzIGVsZW1lbnQgd2Fz
IHJlbW92ZWQKKyAgICAgIC8vIGZyb20gdGhlIGRvbSBzb21ldGltZSBiZWZvcmUgdGhpcyBjb2Rl
IHJ1bnMgdGhlbiBsZXQncworICAgICAgLy8ganVzdCBzdGljayB0byB1c2luZyB0aGUgcGFyZW50
IGVsZW1lbnQgYXMgdGhlIGFuY2hvcgorICAgICAgaWYgKGFmdGVyRWxlbWVudCkgeworICAgICAg
ICB2YXIgYWZ0ZXJOb2RlID0gZXh0cmFjdEVsZW1lbnROb2RlKGFmdGVyRWxlbWVudCk7CisgICAg
ICAgIGlmIChhZnRlck5vZGUgJiYgIWFmdGVyTm9kZS5wYXJlbnROb2RlICYmICFhZnRlck5vZGUu
cHJldmlvdXNFbGVtZW50U2libGluZykgeworICAgICAgICAgIGFmdGVyRWxlbWVudCA9IG51bGw7
CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGFmdGVyRWxlbWVudCA/IGFmdGVyRWxlbWVudC5h
ZnRlcihlbGVtZW50KSA6IHBhcmVudEVsZW1lbnQucHJlcGVuZChlbGVtZW50KTsKKyAgICB9CisK
KyAgICAvKioKKyAgICAgKiBAbmdkb2Mgc2VydmljZQorICAgICAqIEBuYW1lICRhbmltYXRlCisg
ICAgICogQGRlc2NyaXB0aW9uIFRoZSAkYW5pbWF0ZSBzZXJ2aWNlIGV4cG9zZXMgYSBzZXJpZXMg
b2YgRE9NIHV0aWxpdHkgbWV0aG9kcyB0aGF0IHByb3ZpZGUgc3VwcG9ydAorICAgICAqIGZvciBh
bmltYXRpb24gaG9va3MuIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRoZSBhcHBsaWNhdGlvbiBv
ZiBET00gb3BlcmF0aW9ucywgaG93ZXZlciwKKyAgICAgKiB3aGVuIGFuIGFuaW1hdGlvbiBpcyBk
ZXRlY3RlZCAoYW5kIGFuaW1hdGlvbnMgYXJlIGVuYWJsZWQpLCAkYW5pbWF0ZSB3aWxsIGRvIHRo
ZSBoZWF2eSBsaWZ0aW5nCisgICAgICogdG8gZW5zdXJlIHRoYXQgYW5pbWF0aW9uIHJ1bnMgd2l0
aCB0aGUgdHJpZ2dlcmVkIERPTSBvcGVyYXRpb24uCisgICAgICoKKyAgICAgKiBCeSBkZWZhdWx0
ICRhbmltYXRlIGRvZXNuJ3QgdHJpZ2dlciBhbiBhbmltYXRpb25zLiBUaGlzIGlzIGJlY2F1c2Ug
dGhlIGBuZ0FuaW1hdGVgIG1vZHVsZSBpc24ndAorICAgICAqIGluY2x1ZGVkIGFuZCBvbmx5IHdo
ZW4gaXQgaXMgYWN0aXZlIHRoZW4gdGhlIGFuaW1hdGlvbiBob29rcyB0aGF0IGAkYW5pbWF0ZWAg
dHJpZ2dlcnMgd2lsbCBiZQorICAgICAqIGZ1bmN0aW9uYWwuIE9uY2UgYWN0aXZlIHRoZW4gYWxs
IHN0cnVjdHVyYWwgYG5nLWAgZGlyZWN0aXZlcyB3aWxsIHRyaWdnZXIgYW5pbWF0aW9ucyBhcyB0
aGV5IHBlcmZvcm0KKyAgICAgKiB0aGVpciBET00tcmVsYXRlZCBvcGVyYXRpb25zIChlbnRlciwg
bGVhdmUgYW5kIG1vdmUpLiBPdGhlciBkaXJlY3RpdmVzIHN1Y2ggYXMgYG5nQ2xhc3NgLAorICAg
ICAqIGBuZ1Nob3dgLCBgbmdIaWRlYCBhbmQgYG5nTWVzc2FnZXNgIGFsc28gcHJvdmlkZSBzdXBw
b3J0IGZvciBhbmltYXRpb25zLgorICAgICAqCisgICAgICogSXQgaXMgcmVjb21tZW5kZWQgdGhh
dCB0aGVgJGFuaW1hdGVgIHNlcnZpY2UgaXMgYWx3YXlzIHVzZWQgd2hlbiBleGVjdXRpbmcgRE9N
LXJlbGF0ZWQgcHJvY2VkdXJlcyB3aXRoaW4gZGlyZWN0aXZlcy4KKyAgICAgKgorICAgICAqIFRv
IGxlYXJuIG1vcmUgYWJvdXQgZW5hYmxpbmcgYW5pbWF0aW9uIHN1cHBvcnQsIGNsaWNrIGhlcmUg
dG8gdmlzaXQgdGhlCisgICAgICoge0BsaW5rIG5nQW5pbWF0ZSBuZ0FuaW1hdGUgbW9kdWxlIHBh
Z2V9LgorICAgICAqLworICAgIHJldHVybiB7CisgICAgICAvLyB3ZSBkb24ndCBjYWxsIGl0IGRp
cmVjdGx5IHNpbmNlIG5vbi1leGlzdGFudCBhcmd1bWVudHMgbWF5CisgICAgICAvLyBiZSBpbnRl
cnByZXRlZCBhcyBudWxsIHdpdGhpbiB0aGUgc3ViIGVuYWJsZWQgZnVuY3Rpb24KKworICAgICAg
LyoqCisgICAgICAgKgorICAgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAgICogQG5hbWUgJGFu
aW1hdGUjb24KKyAgICAgICAqIEBraW5kIGZ1bmN0aW9uCisgICAgICAgKiBAZGVzY3JpcHRpb24g
U2V0cyB1cCBhbiBldmVudCBsaXN0ZW5lciB0byBmaXJlIHdoZW5ldmVyIHRoZSBhbmltYXRpb24g
ZXZlbnQgKGVudGVyLCBsZWF2ZSwgbW92ZSwgZXRjLi4uKQorICAgICAgICogICAgaGFzIGZpcmVk
IG9uIHRoZSBnaXZlbiBlbGVtZW50IG9yIGFtb25nIGFueSBvZiBpdHMgY2hpbGRyZW4uIE9uY2Ug
dGhlIGxpc3RlbmVyIGlzIGZpcmVkLCB0aGUgcHJvdmlkZWQgY2FsbGJhY2sKKyAgICAgICAqICAg
IGlzIGZpcmVkIHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbXM6CisgICAgICAgKgorICAgICAgICog
YGBganMKKyAgICAgICAqICRhbmltYXRlLm9uKCdlbnRlcicsIGNvbnRhaW5lciwKKyAgICAgICAq
ICAgIGZ1bmN0aW9uIGNhbGxiYWNrKGVsZW1lbnQsIHBoYXNlKSB7CisgICAgICAgKiAgICAgIC8v
IGNvb2wgd2UgZGV0ZWN0ZWQgYW4gZW50ZXIgYW5pbWF0aW9uIHdpdGhpbiB0aGUgY29udGFpbmVy
CisgICAgICAgKiAgICB9CisgICAgICAgKiApOworICAgICAgICogYGBgCisgICAgICAgKgorICAg
ICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50IHRoZSBhbmltYXRpb24gZXZlbnQgdGhhdCB3aWxs
IGJlIGNhcHR1cmVkIChlLmcuIGVudGVyLCBsZWF2ZSwgbW92ZSwgYWRkQ2xhc3MsIHJlbW92ZUNs
YXNzLCBldGMuLi4pCisgICAgICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGNvbnRhaW5lciB0aGUg
Y29udGFpbmVyIGVsZW1lbnQgdGhhdCB3aWxsIGNhcHR1cmUgZWFjaCBvZiB0aGUgYW5pbWF0aW9u
IGV2ZW50cyB0aGF0IGFyZSBmaXJlZCBvbiBpdHNlbGYKKyAgICAgICAqICAgICBhcyB3ZWxsIGFz
IGFtb25nIGl0cyBjaGlsZHJlbgorICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sg
dGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBmaXJlZCB3aGVuIHRoZSBsaXN0ZW5l
ciBpcyB0cmlnZ2VyZWQKKyAgICAgICAqCisgICAgICAgKiBUaGUgYXJndW1lbnRzIHByZXNlbnQg
aW4gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGFyZToKKyAgICAgICAqICogYGVsZW1lbnRgIC0gVGhl
IGNhcHR1cmVkIERPTSBlbGVtZW50IHRoYXQgdGhlIGFuaW1hdGlvbiB3YXMgZmlyZWQgb24uCisg
ICAgICAgKiAqIGBwaGFzZWAgLSBUaGUgcGhhc2Ugb2YgdGhlIGFuaW1hdGlvbi4gVGhlIHR3byBw
b3NzaWJsZSBwaGFzZXMgYXJlICoqc3RhcnQqKiAod2hlbiB0aGUgYW5pbWF0aW9uIHN0YXJ0cykg
YW5kICoqY2xvc2UqKiAod2hlbiBpdCBlbmRzKS4KKyAgICAgICAqLworICAgICAgb246ICQkYW5p
bWF0ZVF1ZXVlLm9uLAorCisgICAgICAvKioKKyAgICAgICAqCisgICAgICAgKiBAbmdkb2MgbWV0
aG9kCisgICAgICAgKiBAbmFtZSAkYW5pbWF0ZSNvZmYKKyAgICAgICAqIEBraW5kIGZ1bmN0aW9u
CisgICAgICAgKiBAZGVzY3JpcHRpb24gRGVyZWdpc3RlcnMgYW4gZXZlbnQgbGlzdGVuZXIgYmFz
ZWQgb24gdGhlIGV2ZW50IHdoaWNoIGhhcyBiZWVuIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJvdmlk
ZWQgZWxlbWVudC4gVGhpcyBtZXRob2QKKyAgICAgICAqIGNhbiBiZSB1c2VkIGluIHRocmVlIGRp
ZmZlcmVudCB3YXlzIGRlcGVuZGluZyBvbiB0aGUgYXJndW1lbnRzOgorICAgICAgICoKKyAgICAg
ICAqIGBgYGpzCisgICAgICAgKiAvLyByZW1vdmUgYWxsIHRoZSBhbmltYXRpb24gZXZlbnQgbGlz
dGVuZXJzIGxpc3RlbmluZyBmb3IgYGVudGVyYAorICAgICAgICogJGFuaW1hdGUub2ZmKCdlbnRl
cicpOworICAgICAgICoKKyAgICAgICAqIC8vIHJlbW92ZSBhbGwgdGhlIGFuaW1hdGlvbiBldmVu
dCBsaXN0ZW5lcnMgbGlzdGVuaW5nIGZvciBgZW50ZXJgIG9uIHRoZSBnaXZlbiBlbGVtZW50IGFu
ZCBpdHMgY2hpbGRyZW4KKyAgICAgICAqICRhbmltYXRlLm9mZignZW50ZXInLCBjb250YWluZXIp
OworICAgICAgICoKKyAgICAgICAqIC8vIHJlbW92ZSB0aGUgZXZlbnQgbGlzdGVuZXIgZnVuY3Rp
b24gcHJvdmlkZWQgYnkgYGxpc3RlbmVyRm5gIHRoYXQgaXMgc2V0CisgICAgICAgKiAvLyB0byBs
aXN0ZW4gZm9yIGBlbnRlcmAgb24gdGhlIGdpdmVuIGBlbGVtZW50YCBhcyB3ZWxsIGFzIGl0cyBj
aGlsZHJlbgorICAgICAgICogJGFuaW1hdGUub2ZmKCdlbnRlcicsIGNvbnRhaW5lciwgY2FsbGJh
Y2spOworICAgICAgICogYGBgCisgICAgICAgKgorICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGV2
ZW50IHRoZSBhbmltYXRpb24gZXZlbnQgKGUuZy4gZW50ZXIsIGxlYXZlLCBtb3ZlLCBhZGRDbGFz
cywgcmVtb3ZlQ2xhc3MsIGV0Yy4uLikKKyAgICAgICAqIEBwYXJhbSB7RE9NRWxlbWVudD19IGNv
bnRhaW5lciB0aGUgY29udGFpbmVyIGVsZW1lbnQgdGhlIGV2ZW50IGxpc3RlbmVyIHdhcyBwbGFj
ZWQgb24KKyAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayB0aGUgY2FsbGJhY2sg
ZnVuY3Rpb24gdGhhdCB3YXMgcmVnaXN0ZXJlZCBhcyB0aGUgbGlzdGVuZXIKKyAgICAgICAqLwor
ICAgICAgb2ZmOiAkJGFuaW1hdGVRdWV1ZS5vZmYsCisKKyAgICAgIC8qKgorICAgICAgICogQG5n
ZG9jIG1ldGhvZAorICAgICAgICogQG5hbWUgJGFuaW1hdGUjcGluCisgICAgICAgKiBAa2luZCBm
dW5jdGlvbgorICAgICAgICogQGRlc2NyaXB0aW9uIEFzc29jaWF0ZXMgdGhlIHByb3ZpZGVkIGVs
ZW1lbnQgd2l0aCBhIGhvc3QgcGFyZW50IGVsZW1lbnQgdG8gYWxsb3cgdGhlIGVsZW1lbnQgdG8g
YmUgYW5pbWF0ZWQgZXZlbiBpZiBpdCBleGlzdHMKKyAgICAgICAqICAgIG91dHNpZGUgb2YgdGhl
IERPTSBzdHJ1Y3R1cmUgb2YgdGhlIEFuZ3VsYXIgYXBwbGljYXRpb24uIEJ5IGRvaW5nIHNvLCBh
bnkgYW5pbWF0aW9uIHRyaWdnZXJlZCB2aWEgYCRhbmltYXRlYCBjYW4gYmUgaXNzdWVkIG9uIHRo
ZQorICAgICAgICogICAgZWxlbWVudCBkZXNwaXRlIGJlaW5nIG91dHNpZGUgdGhlIHJlYWxtIG9m
IHRoZSBhcHBsaWNhdGlvbiBvciB3aXRoaW4gYW5vdGhlciBhcHBsaWNhdGlvbi4gU2F5IGZvciBl
eGFtcGxlIGlmIHRoZSBhcHBsaWNhdGlvbgorICAgICAgICogICAgd2FzIGJvb3RzdHJhcHBlZCBv
biBhbiBlbGVtZW50IHRoYXQgaXMgc29tZXdoZXJlIGluc2lkZSBvZiB0aGUgYDxib2R5PmAgdGFn
LCBidXQgd2Ugd2FudGVkIHRvIGFsbG93IGZvciBhbiBlbGVtZW50IHRvIGJlIHNpdHVhdGVkCisg
ICAgICAgKiAgICBhcyBhIGRpcmVjdCBjaGlsZCBvZiBgZG9jdW1lbnQuYm9keWAsIHRoZW4gdGhp
cyBjYW4gYmUgYWNoaWV2ZWQgYnkgcGlubmluZyB0aGUgZWxlbWVudCB2aWEgYCRhbmltYXRlLnBp
bihlbGVtZW50KWAuIEtlZXAgaW4gbWluZAorICAgICAgICogICAgdGhhdCBjYWxsaW5nIGAkYW5p
bWF0ZS5waW4oZWxlbWVudCwgcGFyZW50RWxlbWVudClgIHdpbGwgbm90IGFjdHVhbGx5IGluc2Vy
dCBpbnRvIHRoZSBET00gYW55d2hlcmU7IGl0IHdpbGwganVzdCBjcmVhdGUgdGhlIGFzc29jaWF0
aW9uLgorICAgICAgICoKKyAgICAgICAqICAgIE5vdGUgdGhhdCB0aGlzIGZlYXR1cmUgaXMgb25s
eSBhY3RpdmUgd2hlbiB0aGUgYG5nQW5pbWF0ZWAgbW9kdWxlIGlzIHVzZWQuCisgICAgICAgKgor
ICAgICAgICogQHBhcmFtIHtET01FbGVtZW50fSBlbGVtZW50IHRoZSBleHRlcm5hbCBlbGVtZW50
IHRoYXQgd2lsbCBiZSBwaW5uZWQKKyAgICAgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gcGFyZW50
RWxlbWVudCB0aGUgaG9zdCBwYXJlbnQgZWxlbWVudCB0aGF0IHdpbGwgYmUgYXNzb2NpYXRlZCB3
aXRoIHRoZSBleHRlcm5hbCBlbGVtZW50CisgICAgICAgKi8KKyAgICAgIHBpbjogJCRhbmltYXRl
UXVldWUucGluLAorCisgICAgICAvKioKKyAgICAgICAqCisgICAgICAgKiBAbmdkb2MgbWV0aG9k
CisgICAgICAgKiBAbmFtZSAkYW5pbWF0ZSNlbmFibGVkCisgICAgICAgKiBAa2luZCBmdW5jdGlv
bgorICAgICAgICogQGRlc2NyaXB0aW9uIFVzZWQgdG8gZ2V0IGFuZCBzZXQgd2hldGhlciBhbmlt
YXRpb25zIGFyZSBlbmFibGVkIG9yIG5vdCBvbiB0aGUgZW50aXJlIGFwcGxpY2F0aW9uIG9yIG9u
IGFuIGVsZW1lbnQgYW5kIGl0cyBjaGlsZHJlbi4gVGhpcworICAgICAgICogZnVuY3Rpb24gY2Fu
IGJlIGNhbGxlZCBpbiBmb3VyIHdheXM6CisgICAgICAgKgorICAgICAgICogYGBganMKKyAgICAg
ICAqIC8vIHJldHVybnMgdHJ1ZSBvciBmYWxzZQorICAgICAgICogJGFuaW1hdGUuZW5hYmxlZCgp
OworICAgICAgICoKKyAgICAgICAqIC8vIGNoYW5nZXMgdGhlIGVuYWJsZWQgc3RhdGUgZm9yIGFs
bCBhbmltYXRpb25zCisgICAgICAgKiAkYW5pbWF0ZS5lbmFibGVkKGZhbHNlKTsKKyAgICAgICAq
ICRhbmltYXRlLmVuYWJsZWQodHJ1ZSk7CisgICAgICAgKgorICAgICAgICogLy8gcmV0dXJucyB0
cnVlIG9yIGZhbHNlIGlmIGFuaW1hdGlvbnMgYXJlIGVuYWJsZWQgZm9yIGFuIGVsZW1lbnQKKyAg
ICAgICAqICRhbmltYXRlLmVuYWJsZWQoZWxlbWVudCk7CisgICAgICAgKgorICAgICAgICogLy8g
Y2hhbmdlcyB0aGUgZW5hYmxlZCBzdGF0ZSBmb3IgYW4gZWxlbWVudCBhbmQgaXRzIGNoaWxkcmVu
CisgICAgICAgKiAkYW5pbWF0ZS5lbmFibGVkKGVsZW1lbnQsIHRydWUpOworICAgICAgICogJGFu
aW1hdGUuZW5hYmxlZChlbGVtZW50LCBmYWxzZSk7CisgICAgICAgKiBgYGAKKyAgICAgICAqCisg
ICAgICAgKiBAcGFyYW0ge0RPTUVsZW1lbnQ9fSBlbGVtZW50IHRoZSBlbGVtZW50IHRoYXQgd2ls
bCBiZSBjb25zaWRlcmVkIGZvciBjaGVja2luZy9zZXR0aW5nIHRoZSBlbmFibGVkIHN0YXRlCisg
ICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBlbmFibGVkIHdoZXRoZXIgb3Igbm90IHRoZSBhbmlt
YXRpb25zIHdpbGwgYmUgZW5hYmxlZCBmb3IgdGhlIGVsZW1lbnQKKyAgICAgICAqCisgICAgICAg
KiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIG9yIG5vdCBhbmltYXRpb25zIGFyZSBlbmFibGVk
CisgICAgICAgKi8KKyAgICAgIGVuYWJsZWQ6ICQkYW5pbWF0ZVF1ZXVlLmVuYWJsZWQsCisKKyAg
ICAgIC8qKgorICAgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAgICogQG5hbWUgJGFuaW1hdGUj
Y2FuY2VsCisgICAgICAgKiBAa2luZCBmdW5jdGlvbgorICAgICAgICogQGRlc2NyaXB0aW9uIENh
bmNlbHMgdGhlIHByb3ZpZGVkIGFuaW1hdGlvbi4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0g
e1Byb21pc2V9IGFuaW1hdGlvblByb21pc2UgVGhlIGFuaW1hdGlvbiBwcm9taXNlIHRoYXQgaXMg
cmV0dXJuZWQgd2hlbiBhbiBhbmltYXRpb24gaXMgc3RhcnRlZC4KKyAgICAgICAqLworICAgICAg
Y2FuY2VsOiBmdW5jdGlvbihydW5uZXIpIHsKKyAgICAgICAgcnVubmVyLmVuZCAmJiBydW5uZXIu
ZW5kKCk7CisgICAgICB9LAorCisgICAgICAvKioKKyAgICAgICAqCisgICAgICAgKiBAbmdkb2Mg
bWV0aG9kCisgICAgICAgKiBAbmFtZSAkYW5pbWF0ZSNlbnRlcgorICAgICAgICogQGtpbmQgZnVu
Y3Rpb24KKyAgICAgICAqIEBkZXNjcmlwdGlvbiBJbnNlcnRzIHRoZSBlbGVtZW50IGludG8gdGhl
IERPTSBlaXRoZXIgYWZ0ZXIgdGhlIGBhZnRlcmAgZWxlbWVudCAoaWYgcHJvdmlkZWQpIG9yCisg
ICAgICAgKiAgIGFzIHRoZSBmaXJzdCBjaGlsZCB3aXRoaW4gdGhlIGBwYXJlbnRgIGVsZW1lbnQg
YW5kIHRoZW4gdHJpZ2dlcnMgYW4gYW5pbWF0aW9uLgorICAgICAgICogICBBIHByb21pc2UgaXMg
cmV0dXJuZWQgdGhhdCB3aWxsIGJlIHJlc29sdmVkIGR1cmluZyB0aGUgbmV4dCBkaWdlc3Qgb25j
ZSB0aGUgYW5pbWF0aW9uCisgICAgICAgKiAgIGhhcyBjb21wbGV0ZWQuCisgICAgICAgKgorICAg
ICAgICogQHBhcmFtIHtET01FbGVtZW50fSBlbGVtZW50IHRoZSBlbGVtZW50IHdoaWNoIHdpbGwg
YmUgaW5zZXJ0ZWQgaW50byB0aGUgRE9NCisgICAgICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IHBh
cmVudCB0aGUgcGFyZW50IGVsZW1lbnQgd2hpY2ggd2lsbCBhcHBlbmQgdGhlIGVsZW1lbnQgYXMK
KyAgICAgICAqICAgYSBjaGlsZCAoc28gbG9uZyBhcyB0aGUgYWZ0ZXIgZWxlbWVudCBpcyBub3Qg
cHJlc2VudCkKKyAgICAgICAqIEBwYXJhbSB7RE9NRWxlbWVudD19IGFmdGVyIHRoZSBzaWJsaW5n
IGVsZW1lbnQgYWZ0ZXIgd2hpY2ggdGhlIGVsZW1lbnQgd2lsbCBiZSBhcHBlbmRlZAorICAgICAg
ICogQHBhcmFtIHtvYmplY3Q9fSBvcHRpb25zIGFuIG9wdGlvbmFsIGNvbGxlY3Rpb24gb2Ygb3B0
aW9ucy9zdHlsZXMgdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGVsZW1lbnQKKyAgICAgICAq
CisgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlfSB0aGUgYW5pbWF0aW9uIGNhbGxiYWNrIHByb21p
c2UKKyAgICAgICAqLworICAgICAgZW50ZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIHBhcmVudCwgYWZ0
ZXIsIG9wdGlvbnMpIHsKKyAgICAgICAgcGFyZW50ID0gcGFyZW50ICYmIGpxTGl0ZShwYXJlbnQp
OworICAgICAgICBhZnRlciA9IGFmdGVyICYmIGpxTGl0ZShhZnRlcik7CisgICAgICAgIHBhcmVu
dCA9IHBhcmVudCB8fCBhZnRlci5wYXJlbnQoKTsKKyAgICAgICAgZG9tSW5zZXJ0KGVsZW1lbnQs
IHBhcmVudCwgYWZ0ZXIpOworICAgICAgICByZXR1cm4gJCRhbmltYXRlUXVldWUucHVzaChlbGVt
ZW50LCAnZW50ZXInLCBwcmVwYXJlQW5pbWF0ZU9wdGlvbnMob3B0aW9ucykpOworICAgICAgfSwK
KworICAgICAgLyoqCisgICAgICAgKgorICAgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAgICog
QG5hbWUgJGFuaW1hdGUjbW92ZQorICAgICAgICogQGtpbmQgZnVuY3Rpb24KKyAgICAgICAqIEBk
ZXNjcmlwdGlvbiBJbnNlcnRzIChtb3ZlcykgdGhlIGVsZW1lbnQgaW50byBpdHMgbmV3IHBvc2l0
aW9uIGluIHRoZSBET00gZWl0aGVyIGFmdGVyCisgICAgICAgKiAgIHRoZSBgYWZ0ZXJgIGVsZW1l
bnQgKGlmIHByb3ZpZGVkKSBvciBhcyB0aGUgZmlyc3QgY2hpbGQgd2l0aGluIHRoZSBgcGFyZW50
YCBlbGVtZW50CisgICAgICAgKiAgIGFuZCB0aGVuIHRyaWdnZXJzIGFuIGFuaW1hdGlvbi4gQSBw
cm9taXNlIGlzIHJldHVybmVkIHRoYXQgd2lsbCBiZSByZXNvbHZlZAorICAgICAgICogICBkdXJp
bmcgdGhlIG5leHQgZGlnZXN0IG9uY2UgdGhlIGFuaW1hdGlvbiBoYXMgY29tcGxldGVkLgorICAg
ICAgICoKKyAgICAgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gZWxlbWVudCB0aGUgZWxlbWVudCB3
aGljaCB3aWxsIGJlIG1vdmVkIGludG8gdGhlIG5ldyBET00gcG9zaXRpb24KKyAgICAgICAqIEBw
YXJhbSB7RE9NRWxlbWVudH0gcGFyZW50IHRoZSBwYXJlbnQgZWxlbWVudCB3aGljaCB3aWxsIGFw
cGVuZCB0aGUgZWxlbWVudCBhcworICAgICAgICogICBhIGNoaWxkIChzbyBsb25nIGFzIHRoZSBh
ZnRlciBlbGVtZW50IGlzIG5vdCBwcmVzZW50KQorICAgICAgICogQHBhcmFtIHtET01FbGVtZW50
PX0gYWZ0ZXIgdGhlIHNpYmxpbmcgZWxlbWVudCBhZnRlciB3aGljaCB0aGUgZWxlbWVudCB3aWxs
IGJlIGFwcGVuZGVkCisgICAgICAgKiBAcGFyYW0ge29iamVjdD19IG9wdGlvbnMgYW4gb3B0aW9u
YWwgY29sbGVjdGlvbiBvZiBvcHRpb25zL3N0eWxlcyB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0
aGUgZWxlbWVudAorICAgICAgICoKKyAgICAgICAqIEByZXR1cm4ge1Byb21pc2V9IHRoZSBhbmlt
YXRpb24gY2FsbGJhY2sgcHJvbWlzZQorICAgICAgICovCisgICAgICBtb3ZlOiBmdW5jdGlvbihl
bGVtZW50LCBwYXJlbnQsIGFmdGVyLCBvcHRpb25zKSB7CisgICAgICAgIHBhcmVudCA9IHBhcmVu
dCAmJiBqcUxpdGUocGFyZW50KTsKKyAgICAgICAgYWZ0ZXIgPSBhZnRlciAmJiBqcUxpdGUoYWZ0
ZXIpOworICAgICAgICBwYXJlbnQgPSBwYXJlbnQgfHwgYWZ0ZXIucGFyZW50KCk7CisgICAgICAg
IGRvbUluc2VydChlbGVtZW50LCBwYXJlbnQsIGFmdGVyKTsKKyAgICAgICAgcmV0dXJuICQkYW5p
bWF0ZVF1ZXVlLnB1c2goZWxlbWVudCwgJ21vdmUnLCBwcmVwYXJlQW5pbWF0ZU9wdGlvbnMob3B0
aW9ucykpOworICAgICAgfSwKKworICAgICAgLyoqCisgICAgICAgKiBAbmdkb2MgbWV0aG9kCisg
ICAgICAgKiBAbmFtZSAkYW5pbWF0ZSNsZWF2ZQorICAgICAgICogQGtpbmQgZnVuY3Rpb24KKyAg
ICAgICAqIEBkZXNjcmlwdGlvbiBUcmlnZ2VycyBhbiBhbmltYXRpb24gYW5kIHRoZW4gcmVtb3Zl
cyB0aGUgZWxlbWVudCBmcm9tIHRoZSBET00uCisgICAgICAgKiBXaGVuIHRoZSBmdW5jdGlvbiBp
cyBjYWxsZWQgYSBwcm9taXNlIGlzIHJldHVybmVkIHRoYXQgd2lsbCBiZSByZXNvbHZlZCBkdXJp
bmcgdGhlIG5leHQKKyAgICAgICAqIGRpZ2VzdCBvbmNlIHRoZSBhbmltYXRpb24gaGFzIGNvbXBs
ZXRlZC4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGVsZW1lbnQgdGhl
IGVsZW1lbnQgd2hpY2ggd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIERPTQorICAgICAgICogQHBh
cmFtIHtvYmplY3Q9fSBvcHRpb25zIGFuIG9wdGlvbmFsIGNvbGxlY3Rpb24gb2Ygb3B0aW9ucy9z
dHlsZXMgdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGVsZW1lbnQKKyAgICAgICAqCisgICAg
ICAgKiBAcmV0dXJuIHtQcm9taXNlfSB0aGUgYW5pbWF0aW9uIGNhbGxiYWNrIHByb21pc2UKKyAg
ICAgICAqLworICAgICAgbGVhdmU6IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpIHsKKyAgICAg
ICAgcmV0dXJuICQkYW5pbWF0ZVF1ZXVlLnB1c2goZWxlbWVudCwgJ2xlYXZlJywgcHJlcGFyZUFu
aW1hdGVPcHRpb25zKG9wdGlvbnMpLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICBlbGVtZW50LnJl
bW92ZSgpOworICAgICAgICB9KTsKKyAgICAgIH0sCisKKyAgICAgIC8qKgorICAgICAgICogQG5n
ZG9jIG1ldGhvZAorICAgICAgICogQG5hbWUgJGFuaW1hdGUjYWRkQ2xhc3MKKyAgICAgICAqIEBr
aW5kIGZ1bmN0aW9uCisgICAgICAgKgorICAgICAgICogQGRlc2NyaXB0aW9uIFRyaWdnZXJzIGFu
IGFkZENsYXNzIGFuaW1hdGlvbiBzdXJyb3VuZGluZyB0aGUgYWRkaXRpb24gb2YgdGhlIHByb3Zp
ZGVkIENTUyBjbGFzcyhlcykuIFVwb24KKyAgICAgICAqICAgZXhlY3V0aW9uLCB0aGUgYWRkQ2xh
c3Mgb3BlcmF0aW9uIHdpbGwgb25seSBiZSBoYW5kbGVkIGFmdGVyIHRoZSBuZXh0IGRpZ2VzdCBh
bmQgaXQgd2lsbCBub3QgdHJpZ2dlciBhbgorICAgICAgICogICBhbmltYXRpb24gaWYgZWxlbWVu
dCBhbHJlYWR5IGNvbnRhaW5zIHRoZSBDU1MgY2xhc3Mgb3IgaWYgdGhlIGNsYXNzIGlzIHJlbW92
ZWQgYXQgYSBsYXRlciBzdGVwLgorICAgICAgICogICBOb3RlIHRoYXQgY2xhc3MtYmFzZWQgYW5p
bWF0aW9ucyBhcmUgdHJlYXRlZCBkaWZmZXJlbnRseSBjb21wYXJlZCB0byBzdHJ1Y3R1cmFsIGFu
aW1hdGlvbnMKKyAgICAgICAqICAgKGxpa2UgZW50ZXIsIG1vdmUgYW5kIGxlYXZlKSBzaW5jZSB0
aGUgQ1NTIGNsYXNzZXMgbWF5IGJlIGFkZGVkL3JlbW92ZWQgYXQgZGlmZmVyZW50IHBvaW50cwor
ICAgICAgICogICBkZXBlbmRpbmcgaWYgQ1NTIG9yIEphdmFTY3JpcHQgYW5pbWF0aW9ucyBhcmUg
dXNlZC4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGVsZW1lbnQgdGhl
IGVsZW1lbnQgd2hpY2ggdGhlIENTUyBjbGFzc2VzIHdpbGwgYmUgYXBwbGllZCB0bworICAgICAg
ICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSB0aGUgQ1NTIGNsYXNzKGVzKSB0aGF0IHdpbGwg
YmUgYWRkZWQgKG11bHRpcGxlIGNsYXNzZXMgYXJlIHNlcGFyYXRlZCB2aWEgc3BhY2VzKQorICAg
ICAgICogQHBhcmFtIHtvYmplY3Q9fSBvcHRpb25zIGFuIG9wdGlvbmFsIGNvbGxlY3Rpb24gb2Yg
b3B0aW9ucy9zdHlsZXMgdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGVsZW1lbnQKKyAgICAg
ICAqCisgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlfSB0aGUgYW5pbWF0aW9uIGNhbGxiYWNrIHBy
b21pc2UKKyAgICAgICAqLworICAgICAgYWRkQ2xhc3M6IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNz
TmFtZSwgb3B0aW9ucykgeworICAgICAgICBvcHRpb25zID0gcHJlcGFyZUFuaW1hdGVPcHRpb25z
KG9wdGlvbnMpOworICAgICAgICBvcHRpb25zLmFkZENsYXNzID0gbWVyZ2VDbGFzc2VzKG9wdGlv
bnMuYWRkY2xhc3MsIGNsYXNzTmFtZSk7CisgICAgICAgIHJldHVybiAkJGFuaW1hdGVRdWV1ZS5w
dXNoKGVsZW1lbnQsICdhZGRDbGFzcycsIG9wdGlvbnMpOworICAgICAgfSwKKworICAgICAgLyoq
CisgICAgICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICAgKiBAbmFtZSAkYW5pbWF0ZSNyZW1vdmVD
bGFzcworICAgICAgICogQGtpbmQgZnVuY3Rpb24KKyAgICAgICAqCisgICAgICAgKiBAZGVzY3Jp
cHRpb24gVHJpZ2dlcnMgYSByZW1vdmVDbGFzcyBhbmltYXRpb24gc3Vycm91bmRpbmcgdGhlIHJl
bW92YWwgb2YgdGhlIHByb3ZpZGVkIENTUyBjbGFzcyhlcykuIFVwb24KKyAgICAgICAqICAgZXhl
Y3V0aW9uLCB0aGUgcmVtb3ZlQ2xhc3Mgb3BlcmF0aW9uIHdpbGwgb25seSBiZSBoYW5kbGVkIGFm
dGVyIHRoZSBuZXh0IGRpZ2VzdCBhbmQgaXQgd2lsbCBub3QgdHJpZ2dlciBhbgorICAgICAgICog
ICBhbmltYXRpb24gaWYgZWxlbWVudCBkb2VzIG5vdCBjb250YWluIHRoZSBDU1MgY2xhc3Mgb3Ig
aWYgdGhlIGNsYXNzIGlzIGFkZGVkIGF0IGEgbGF0ZXIgc3RlcC4KKyAgICAgICAqICAgTm90ZSB0
aGF0IGNsYXNzLWJhc2VkIGFuaW1hdGlvbnMgYXJlIHRyZWF0ZWQgZGlmZmVyZW50bHkgY29tcGFy
ZWQgdG8gc3RydWN0dXJhbCBhbmltYXRpb25zCisgICAgICAgKiAgIChsaWtlIGVudGVyLCBtb3Zl
IGFuZCBsZWF2ZSkgc2luY2UgdGhlIENTUyBjbGFzc2VzIG1heSBiZSBhZGRlZC9yZW1vdmVkIGF0
IGRpZmZlcmVudCBwb2ludHMKKyAgICAgICAqICAgZGVwZW5kaW5nIGlmIENTUyBvciBKYXZhU2Ny
aXB0IGFuaW1hdGlvbnMgYXJlIHVzZWQuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIHtET01F
bGVtZW50fSBlbGVtZW50IHRoZSBlbGVtZW50IHdoaWNoIHRoZSBDU1MgY2xhc3NlcyB3aWxsIGJl
IGFwcGxpZWQgdG8KKyAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWUgdGhlIENTUyBj
bGFzcyhlcykgdGhhdCB3aWxsIGJlIHJlbW92ZWQgKG11bHRpcGxlIGNsYXNzZXMgYXJlIHNlcGFy
YXRlZCB2aWEgc3BhY2VzKQorICAgICAgICogQHBhcmFtIHtvYmplY3Q9fSBvcHRpb25zIGFuIG9w
dGlvbmFsIGNvbGxlY3Rpb24gb2Ygb3B0aW9ucy9zdHlsZXMgdGhhdCB3aWxsIGJlIGFwcGxpZWQg
dG8gdGhlIGVsZW1lbnQKKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlfSB0aGUg
YW5pbWF0aW9uIGNhbGxiYWNrIHByb21pc2UKKyAgICAgICAqLworICAgICAgcmVtb3ZlQ2xhc3M6
IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSwgb3B0aW9ucykgeworICAgICAgICBvcHRpb25z
ID0gcHJlcGFyZUFuaW1hdGVPcHRpb25zKG9wdGlvbnMpOworICAgICAgICBvcHRpb25zLnJlbW92
ZUNsYXNzID0gbWVyZ2VDbGFzc2VzKG9wdGlvbnMucmVtb3ZlQ2xhc3MsIGNsYXNzTmFtZSk7Cisg
ICAgICAgIHJldHVybiAkJGFuaW1hdGVRdWV1ZS5wdXNoKGVsZW1lbnQsICdyZW1vdmVDbGFzcycs
IG9wdGlvbnMpOworICAgICAgfSwKKworICAgICAgLyoqCisgICAgICAgKiBAbmdkb2MgbWV0aG9k
CisgICAgICAgKiBAbmFtZSAkYW5pbWF0ZSNzZXRDbGFzcworICAgICAgICogQGtpbmQgZnVuY3Rp
b24KKyAgICAgICAqCisgICAgICAgKiBAZGVzY3JpcHRpb24gUGVyZm9ybXMgYm90aCB0aGUgYWRk
aXRpb24gYW5kIHJlbW92YWwgb2YgYSBDU1MgY2xhc3NlcyBvbiBhbiBlbGVtZW50IGFuZCAoZHVy
aW5nIHRoZSBwcm9jZXNzKQorICAgICAgICogICAgdHJpZ2dlcnMgYW4gYW5pbWF0aW9uIHN1cnJv
dW5kaW5nIHRoZSBjbGFzcyBhZGRpdGlvbi9yZW1vdmFsLiBNdWNoIGxpa2UgYCRhbmltYXRlLmFk
ZENsYXNzYCBhbmQKKyAgICAgICAqICAgIGAkYW5pbWF0ZS5yZW1vdmVDbGFzc2AsIGBzZXRDbGFz
c2Agd2lsbCBvbmx5IGV2YWx1YXRlIHRoZSBjbGFzc2VzIGJlaW5nIGFkZGVkL3JlbW92ZWQgb25j
ZSBhIGRpZ2VzdCBoYXMKKyAgICAgICAqICAgIHBhc3NlZC4gTm90ZSB0aGF0IGNsYXNzLWJhc2Vk
IGFuaW1hdGlvbnMgYXJlIHRyZWF0ZWQgZGlmZmVyZW50bHkgY29tcGFyZWQgdG8gc3RydWN0dXJh
bCBhbmltYXRpb25zCisgICAgICAgKiAgICAobGlrZSBlbnRlciwgbW92ZSBhbmQgbGVhdmUpIHNp
bmNlIHRoZSBDU1MgY2xhc3NlcyBtYXkgYmUgYWRkZWQvcmVtb3ZlZCBhdCBkaWZmZXJlbnQgcG9p
bnRzCisgICAgICAgKiAgICBkZXBlbmRpbmcgaWYgQ1NTIG9yIEphdmFTY3JpcHQgYW5pbWF0aW9u
cyBhcmUgdXNlZC4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGVsZW1l
bnQgdGhlIGVsZW1lbnQgd2hpY2ggdGhlIENTUyBjbGFzc2VzIHdpbGwgYmUgYXBwbGllZCB0bwor
ICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGFkZCB0aGUgQ1NTIGNsYXNzKGVzKSB0aGF0IHdpbGwg
YmUgYWRkZWQgKG11bHRpcGxlIGNsYXNzZXMgYXJlIHNlcGFyYXRlZCB2aWEgc3BhY2VzKQorICAg
ICAgICogQHBhcmFtIHtzdHJpbmd9IHJlbW92ZSB0aGUgQ1NTIGNsYXNzKGVzKSB0aGF0IHdpbGwg
YmUgcmVtb3ZlZCAobXVsdGlwbGUgY2xhc3NlcyBhcmUgc2VwYXJhdGVkIHZpYSBzcGFjZXMpCisg
ICAgICAgKiBAcGFyYW0ge29iamVjdD19IG9wdGlvbnMgYW4gb3B0aW9uYWwgY29sbGVjdGlvbiBv
ZiBvcHRpb25zL3N0eWxlcyB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgZWxlbWVudAorICAg
ICAgICoKKyAgICAgICAqIEByZXR1cm4ge1Byb21pc2V9IHRoZSBhbmltYXRpb24gY2FsbGJhY2sg
cHJvbWlzZQorICAgICAgICovCisgICAgICBzZXRDbGFzczogZnVuY3Rpb24oZWxlbWVudCwgYWRk
LCByZW1vdmUsIG9wdGlvbnMpIHsKKyAgICAgICAgb3B0aW9ucyA9IHByZXBhcmVBbmltYXRlT3B0
aW9ucyhvcHRpb25zKTsKKyAgICAgICAgb3B0aW9ucy5hZGRDbGFzcyA9IG1lcmdlQ2xhc3Nlcyhv
cHRpb25zLmFkZENsYXNzLCBhZGQpOworICAgICAgICBvcHRpb25zLnJlbW92ZUNsYXNzID0gbWVy
Z2VDbGFzc2VzKG9wdGlvbnMucmVtb3ZlQ2xhc3MsIHJlbW92ZSk7CisgICAgICAgIHJldHVybiAk
JGFuaW1hdGVRdWV1ZS5wdXNoKGVsZW1lbnQsICdzZXRDbGFzcycsIG9wdGlvbnMpOworICAgICAg
fSwKKworICAgICAgLyoqCisgICAgICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICAgKiBAbmFtZSAk
YW5pbWF0ZSNhbmltYXRlCisgICAgICAgKiBAa2luZCBmdW5jdGlvbgorICAgICAgICoKKyAgICAg
ICAqIEBkZXNjcmlwdGlvbiBQZXJmb3JtcyBhbiBpbmxpbmUgYW5pbWF0aW9uIG9uIHRoZSBlbGVt
ZW50IHdoaWNoIGFwcGxpZXMgdGhlIHByb3ZpZGVkIHRvIGFuZCBmcm9tIENTUyBzdHlsZXMgdG8g
dGhlIGVsZW1lbnQuCisgICAgICAgKiBJZiBhbnkgZGV0ZWN0ZWQgQ1NTIHRyYW5zaXRpb24sIGtl
eWZyYW1lIG9yIEphdmFTY3JpcHQgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgY2xhc3NOYW1lIHZhbHVl
IHRoZW4gdGhlIGFuaW1hdGlvbiB3aWxsIHRha2UKKyAgICAgICAqIG9uIHRoZSBwcm92aWRlZCBz
dHlsZXMuIEZvciBleGFtcGxlLCBpZiBhIHRyYW5zaXRpb24gYW5pbWF0aW9uIGlzIHNldCBmb3Ig
dGhlIGdpdmVuIGNsYXNzTmFtZSB0aGVuIHRoZSBwcm92aWRlZCBmcm9tIGFuZAorICAgICAgICog
dG8gc3R5bGVzIHdpbGwgYmUgYXBwbGllZCBhbG9uZ3NpZGUgdGhlIGdpdmVuIHRyYW5zaXRpb24u
IElmIGEgSmF2YVNjcmlwdCBhbmltYXRpb24gaXMgZGV0ZWN0ZWQgdGhlbiB0aGUgcHJvdmlkZWQg
c3R5bGVzCisgICAgICAgKiB3aWxsIGJlIGdpdmVuIGluIGFzIGZ1bmN0aW9uIHBhcmFtdGVycyBp
bnRvIHRoZSBgYW5pbWF0ZWAgbWV0aG9kIChvciBhcyBhcGFydCBvZiB0aGUgYG9wdGlvbnNgIHBh
cmFtZXRlcikuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIHtET01FbGVtZW50fSBlbGVtZW50
IHRoZSBlbGVtZW50IHdoaWNoIHRoZSBDU1Mgc3R5bGVzIHdpbGwgYmUgYXBwbGllZCB0bworICAg
ICAgICogQHBhcmFtIHtvYmplY3R9IGZyb20gdGhlIGZyb20gKHN0YXJ0aW5nKSBDU1Mgc3R5bGVz
IHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50IGFuZCBhY3Jvc3MgdGhlIGFuaW1h
dGlvbi4KKyAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSB0byB0aGUgdG8gKGRlc3RpbmF0aW9uKSBD
U1Mgc3R5bGVzIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50IGFuZCBhY3Jvc3Mg
dGhlIGFuaW1hdGlvbi4KKyAgICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gY2xhc3NOYW1lIGFuIG9w
dGlvbmFsIENTUyBjbGFzcyB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgZWxlbWVudCBmb3Ig
dGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24uIElmCisgICAgICAgKiAgICB0aGlzIHZhbHVl
IGlzIGxlZnQgYXMgZW1wdHkgdGhlbiBhIENTUyBjbGFzcyBvZiBgbmctaW5saW5lLWFuaW1hdGVg
IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgZWxlbWVudC4KKyAgICAgICAqICAgIChOb3RlIHRoYXQg
aWYgbm8gYW5pbWF0aW9uIGlzIGRldGVjdGVkIHRoZW4gdGhpcyB2YWx1ZSB3aWxsIG5vdCBiZSBh
cHBwbGllZCB0byB0aGUgZWxlbWVudC4pCisgICAgICAgKiBAcGFyYW0ge29iamVjdD19IG9wdGlv
bnMgYW4gb3B0aW9uYWwgY29sbGVjdGlvbiBvZiBvcHRpb25zL3N0eWxlcyB0aGF0IHdpbGwgYmUg
YXBwbGllZCB0byB0aGUgZWxlbWVudAorICAgICAgICoKKyAgICAgICAqIEByZXR1cm4ge1Byb21p
c2V9IHRoZSBhbmltYXRpb24gY2FsbGJhY2sgcHJvbWlzZQorICAgICAgICovCisgICAgICBhbmlt
YXRlOiBmdW5jdGlvbihlbGVtZW50LCBmcm9tLCB0bywgY2xhc3NOYW1lLCBvcHRpb25zKSB7Cisg
ICAgICAgIG9wdGlvbnMgPSBwcmVwYXJlQW5pbWF0ZU9wdGlvbnMob3B0aW9ucyk7CisgICAgICAg
IG9wdGlvbnMuZnJvbSA9IG9wdGlvbnMuZnJvbSA/IGV4dGVuZChvcHRpb25zLmZyb20sIGZyb20p
IDogZnJvbTsKKyAgICAgICAgb3B0aW9ucy50byAgID0gb3B0aW9ucy50byAgID8gZXh0ZW5kKG9w
dGlvbnMudG8sIHRvKSAgICAgOiB0bzsKKworICAgICAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUg
fHwgJ25nLWlubGluZS1hbmltYXRlJzsKKyAgICAgICAgb3B0aW9ucy50ZW1wQ2xhc3NlcyA9IG1l
cmdlQ2xhc3NlcyhvcHRpb25zLnRlbXBDbGFzc2VzLCBjbGFzc05hbWUpOworICAgICAgICByZXR1
cm4gJCRhbmltYXRlUXVldWUucHVzaChlbGVtZW50LCAnYW5pbWF0ZScsIG9wdGlvbnMpOworICAg
ICAgfQorICAgIH07CisgIH1dOworfV07CisKK2Z1bmN0aW9uICQkQXN5bmNDYWxsYmFja1Byb3Zp
ZGVyKCkgeworICB0aGlzLiRnZXQgPSBbJyQkckFGJywgJyR0aW1lb3V0JywgZnVuY3Rpb24oJCRy
QUYsICR0aW1lb3V0KSB7CisgICAgcmV0dXJuICQkckFGLnN1cHBvcnRlZAorICAgICAgPyBmdW5j
dGlvbihmbikgeyByZXR1cm4gJCRyQUYoZm4pOyB9CisgICAgICA6IGZ1bmN0aW9uKGZuKSB7Cisg
ICAgICAgIHJldHVybiAkdGltZW91dChmbiwgMCwgZmFsc2UpOworICAgICAgfTsKKyAgfV07Cit9
CisKKy8qIGdsb2JhbCBzdHJpcEhhc2g6IHRydWUgKi8KKworLyoqCisgKiAhIFRoaXMgaXMgYSBw
cml2YXRlIHVuZG9jdW1lbnRlZCBzZXJ2aWNlICEKKyAqCisgKiBAbmFtZSAkYnJvd3NlcgorICog
QHJlcXVpcmVzICRsb2cKKyAqIEBkZXNjcmlwdGlvbgorICogVGhpcyBvYmplY3QgaGFzIHR3byBn
b2FsczoKKyAqCisgKiAtIGhpZGUgYWxsIHRoZSBnbG9iYWwgc3RhdGUgaW4gdGhlIGJyb3dzZXIg
Y2F1c2VkIGJ5IHRoZSB3aW5kb3cgb2JqZWN0CisgKiAtIGFic3RyYWN0IGF3YXkgYWxsIHRoZSBi
cm93c2VyIHNwZWNpZmljIGZlYXR1cmVzIGFuZCBpbmNvbnNpc3RlbmNpZXMKKyAqCisgKiBGb3Ig
dGVzdHMgd2UgcHJvdmlkZSB7QGxpbmsgbmdNb2NrLiRicm93c2VyIG1vY2sgaW1wbGVtZW50YXRp
b259IG9mIHRoZSBgJGJyb3dzZXJgCisgKiBzZXJ2aWNlLCB3aGljaCBjYW4gYmUgdXNlZCBmb3Ig
Y29udmVuaWVudCB0ZXN0aW5nIG9mIHRoZSBhcHBsaWNhdGlvbiB3aXRob3V0IHRoZSBpbnRlcmFj
dGlvbiB3aXRoCisgKiB0aGUgcmVhbCBicm93c2VyIGFwaXMuCisgKi8KKy8qKgorICogQHBhcmFt
IHtvYmplY3R9IHdpbmRvdyBUaGUgZ2xvYmFsIHdpbmRvdyBvYmplY3QuCisgKiBAcGFyYW0ge29i
amVjdH0gZG9jdW1lbnQgalF1ZXJ5IHdyYXBwZWQgZG9jdW1lbnQuCisgKiBAcGFyYW0ge29iamVj
dH0gJGxvZyB3aW5kb3cuY29uc29sZSBvciBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBpbnRlcmZh
Y2UuCisgKiBAcGFyYW0ge29iamVjdH0gJHNuaWZmZXIgJHNuaWZmZXIgc2VydmljZQorICovCitm
dW5jdGlvbiBCcm93c2VyKHdpbmRvdywgZG9jdW1lbnQsICRsb2csICRzbmlmZmVyKSB7CisgIHZh
ciBzZWxmID0gdGhpcywKKyAgICAgIHJhd0RvY3VtZW50ID0gZG9jdW1lbnRbMF0sCisgICAgICBs
b2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbiwKKyAgICAgIGhpc3RvcnkgPSB3aW5kb3cuaGlzdG9y
eSwKKyAgICAgIHNldFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCwKKyAgICAgIGNsZWFyVGlt
ZW91dCA9IHdpbmRvdy5jbGVhclRpbWVvdXQsCisgICAgICBwZW5kaW5nRGVmZXJJZHMgPSB7fTsK
KworICBzZWxmLmlzTW9jayA9IGZhbHNlOworCisgIHZhciBvdXRzdGFuZGluZ1JlcXVlc3RDb3Vu
dCA9IDA7CisgIHZhciBvdXRzdGFuZGluZ1JlcXVlc3RDYWxsYmFja3MgPSBbXTsKKworICAvLyBU
T0RPKHZvanRhKTogcmVtb3ZlIHRoaXMgdGVtcG9yYXJ5IGFwaQorICBzZWxmLiQkY29tcGxldGVP
dXRzdGFuZGluZ1JlcXVlc3QgPSBjb21wbGV0ZU91dHN0YW5kaW5nUmVxdWVzdDsKKyAgc2VsZi4k
JGluY091dHN0YW5kaW5nUmVxdWVzdENvdW50ID0gZnVuY3Rpb24oKSB7IG91dHN0YW5kaW5nUmVx
dWVzdENvdW50Kys7IH07CisKKyAgLyoqCisgICAqIEV4ZWN1dGVzIHRoZSBgZm5gIGZ1bmN0aW9u
KHN1cHBvcnRzIGN1cnJ5aW5nKSBhbmQgZGVjcmVtZW50cyB0aGUgYG91dHN0YW5kaW5nUmVxdWVz
dENhbGxiYWNrc2AKKyAgICogY291bnRlci4gSWYgdGhlIGNvdW50ZXIgcmVhY2hlcyAwLCBhbGwg
dGhlIGBvdXRzdGFuZGluZ1JlcXVlc3RDYWxsYmFja3NgIGFyZSBleGVjdXRlZC4KKyAgICovCisg
IGZ1bmN0aW9uIGNvbXBsZXRlT3V0c3RhbmRpbmdSZXF1ZXN0KGZuKSB7CisgICAgdHJ5IHsKKyAg
ICAgIGZuLmFwcGx5KG51bGwsIHNsaWNlQXJncyhhcmd1bWVudHMsIDEpKTsKKyAgICB9IGZpbmFs
bHkgeworICAgICAgb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQtLTsKKyAgICAgIGlmIChvdXRzdGFu
ZGluZ1JlcXVlc3RDb3VudCA9PT0gMCkgeworICAgICAgICB3aGlsZSAob3V0c3RhbmRpbmdSZXF1
ZXN0Q2FsbGJhY2tzLmxlbmd0aCkgeworICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBvdXRz
dGFuZGluZ1JlcXVlc3RDYWxsYmFja3MucG9wKCkoKTsKKyAgICAgICAgICB9IGNhdGNoIChlKSB7
CisgICAgICAgICAgICAkbG9nLmVycm9yKGUpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgfQorICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIGdldEhhc2godXJsKSB7CisgICAgdmFyIGlu
ZGV4ID0gdXJsLmluZGV4T2YoJyMnKTsKKyAgICByZXR1cm4gaW5kZXggPT09IC0xID8gJycgOiB1
cmwuc3Vic3RyKGluZGV4KTsKKyAgfQorCisgIC8qKgorICAgKiBAcHJpdmF0ZQorICAgKiBOb3Rl
OiB0aGlzIG1ldGhvZCBpcyB1c2VkIG9ubHkgYnkgc2NlbmFyaW8gcnVubmVyCisgICAqIFRPRE8o
dm9qdGEpOiBwcmVmaXggdGhpcyBtZXRob2Qgd2l0aCAkJCA/CisgICAqIEBwYXJhbSB7ZnVuY3Rp
b24oKX0gY2FsbGJhY2sgRnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIG5vIG91dHN0
YW5kaW5nIHJlcXVlc3QKKyAgICovCisgIHNlbGYubm90aWZ5V2hlbk5vT3V0c3RhbmRpbmdSZXF1
ZXN0cyA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7CisgICAgaWYgKG91dHN0YW5kaW5nUmVxdWVzdENv
dW50ID09PSAwKSB7CisgICAgICBjYWxsYmFjaygpOworICAgIH0gZWxzZSB7CisgICAgICBvdXRz
dGFuZGluZ1JlcXVlc3RDYWxsYmFja3MucHVzaChjYWxsYmFjayk7CisgICAgfQorICB9OworCisg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisgIC8vIFVSTCBBUEkKKyAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICB2YXIgY2FjaGVkU3RhdGUsIGxhc3RI
aXN0b3J5U3RhdGUsCisgICAgICBsYXN0QnJvd3NlclVybCA9IGxvY2F0aW9uLmhyZWYsCisgICAg
ICBiYXNlRWxlbWVudCA9IGRvY3VtZW50LmZpbmQoJ2Jhc2UnKSwKKyAgICAgIHJlbG9hZExvY2F0
aW9uID0gbnVsbDsKKworICBjYWNoZVN0YXRlKCk7CisgIGxhc3RIaXN0b3J5U3RhdGUgPSBjYWNo
ZWRTdGF0ZTsKKworICAvKioKKyAgICogQG5hbWUgJGJyb3dzZXIjdXJsCisgICAqCisgICAqIEBk
ZXNjcmlwdGlvbgorICAgKiBHRVRURVI6CisgICAqIFdpdGhvdXQgYW55IGFyZ3VtZW50LCB0aGlz
IG1ldGhvZCBqdXN0IHJldHVybnMgY3VycmVudCB2YWx1ZSBvZiBsb2NhdGlvbi5ocmVmLgorICAg
KgorICAgKiBTRVRURVI6CisgICAqIFdpdGggYXQgbGVhc3Qgb25lIGFyZ3VtZW50LCB0aGlzIG1l
dGhvZCBzZXRzIHVybCB0byBuZXcgdmFsdWUuCisgICAqIElmIGh0bWw1IGhpc3RvcnkgYXBpIHN1
cHBvcnRlZCwgcHVzaFN0YXRlL3JlcGxhY2VTdGF0ZSBpcyB1c2VkLCBvdGhlcndpc2UKKyAgICog
bG9jYXRpb24uaHJlZi9sb2NhdGlvbi5yZXBsYWNlIGlzIHVzZWQuCisgICAqIFJldHVybnMgaXRz
IG93biBpbnN0YW5jZSB0byBhbGxvdyBjaGFpbmluZworICAgKgorICAgKiBOT1RFOiB0aGlzIGFw
aSBpcyBpbnRlbmRlZCBmb3IgdXNlIG9ubHkgYnkgdGhlICRsb2NhdGlvbiBzZXJ2aWNlLiBQbGVh
c2UgdXNlIHRoZQorICAgKiB7QGxpbmsgbmcuJGxvY2F0aW9uICRsb2NhdGlvbiBzZXJ2aWNlfSB0
byBjaGFuZ2UgdXJsLgorICAgKgorICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIE5ldyB1cmwgKHdo
ZW4gdXNlZCBhcyBzZXR0ZXIpCisgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHJlcGxhY2UgU2hvdWxk
IG5ldyB1cmwgcmVwbGFjZSBjdXJyZW50IGhpc3RvcnkgcmVjb3JkPworICAgKiBAcGFyYW0ge29i
amVjdD19IHN0YXRlIG9iamVjdCB0byB1c2Ugd2l0aCBwdXNoU3RhdGUvcmVwbGFjZVN0YXRlCisg
ICAqLworICBzZWxmLnVybCA9IGZ1bmN0aW9uKHVybCwgcmVwbGFjZSwgc3RhdGUpIHsKKyAgICAv
LyBJbiBtb2Rlcm4gYnJvd3NlcnMgYGhpc3Rvcnkuc3RhdGVgIGlzIGBudWxsYCBieSBkZWZhdWx0
OyB0cmVhdGluZyBpdCBzZXBhcmF0ZWx5CisgICAgLy8gZnJvbSBgdW5kZWZpbmVkYCB3b3VsZCBj
YXVzZSBgJGJyb3dzZXIudXJsKCcvZm9vJylgIHRvIGNoYW5nZSBgaGlzdG9yeS5zdGF0ZWAKKyAg
ICAvLyB0byB1bmRlZmluZWQgdmlhIGBwdXNoU3RhdGVgLiBJbnN0ZWFkLCBsZXQncyBjaGFuZ2Ug
YHVuZGVmaW5lZGAgdG8gYG51bGxgIGhlcmUuCisgICAgaWYgKGlzVW5kZWZpbmVkKHN0YXRlKSkg
eworICAgICAgc3RhdGUgPSBudWxsOworICAgIH0KKworICAgIC8vIEFuZHJvaWQgQnJvd3NlciBC
RkNhY2hlIGNhdXNlcyBsb2NhdGlvbiwgaGlzdG9yeSByZWZlcmVuY2UgdG8gYmVjb21lIHN0YWxl
LgorICAgIGlmIChsb2NhdGlvbiAhPT0gd2luZG93LmxvY2F0aW9uKSBsb2NhdGlvbiA9IHdpbmRv
dy5sb2NhdGlvbjsKKyAgICBpZiAoaGlzdG9yeSAhPT0gd2luZG93Lmhpc3RvcnkpIGhpc3Rvcnkg
PSB3aW5kb3cuaGlzdG9yeTsKKworICAgIC8vIHNldHRlcgorICAgIGlmICh1cmwpIHsKKyAgICAg
IHZhciBzYW1lU3RhdGUgPSBsYXN0SGlzdG9yeVN0YXRlID09PSBzdGF0ZTsKKworICAgICAgLy8g
RG9uJ3QgY2hhbmdlIGFueXRoaW5nIGlmIHByZXZpb3VzIGFuZCBjdXJyZW50IFVSTHMgYW5kIHN0
YXRlcyBtYXRjaC4gVGhpcyBhbHNvIHByZXZlbnRzCisgICAgICAvLyBJRTwxMCBmcm9tIGdldHRp
bmcgaW50byByZWRpcmVjdCBsb29wIHdoZW4gaW4gTG9jYXRpb25IYXNoYmFuZ0luSHRtbDVVcmwg
bW9kZS4KKyAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyLmpz
L2NvbW1pdC9mZmIyNzAxCisgICAgICBpZiAobGFzdEJyb3dzZXJVcmwgPT09IHVybCAmJiAoISRz
bmlmZmVyLmhpc3RvcnkgfHwgc2FtZVN0YXRlKSkgeworICAgICAgICByZXR1cm4gc2VsZjsKKyAg
ICAgIH0KKyAgICAgIHZhciBzYW1lQmFzZSA9IGxhc3RCcm93c2VyVXJsICYmIHN0cmlwSGFzaChs
YXN0QnJvd3NlclVybCkgPT09IHN0cmlwSGFzaCh1cmwpOworICAgICAgbGFzdEJyb3dzZXJVcmwg
PSB1cmw7CisgICAgICBsYXN0SGlzdG9yeVN0YXRlID0gc3RhdGU7CisgICAgICAvLyBEb24ndCB1
c2UgaGlzdG9yeSBBUEkgaWYgb25seSB0aGUgaGFzaCBjaGFuZ2VkCisgICAgICAvLyBkdWUgdG8g
YSBidWcgaW4gSUUxMC9JRTExIHdoaWNoIGxlYWRzCisgICAgICAvLyB0byBub3QgZmlyaW5nIGEg
YGhhc2hjaGFuZ2VgIG5vciBgcG9wc3RhdGVgIGV2ZW50CisgICAgICAvLyBpbiBzb21lIGNhc2Vz
IChzZWUgIzkxNDMpLgorICAgICAgaWYgKCRzbmlmZmVyLmhpc3RvcnkgJiYgKCFzYW1lQmFzZSB8
fCAhc2FtZVN0YXRlKSkgeworICAgICAgICBoaXN0b3J5W3JlcGxhY2UgPyAncmVwbGFjZVN0YXRl
JyA6ICdwdXNoU3RhdGUnXShzdGF0ZSwgJycsIHVybCk7CisgICAgICAgIGNhY2hlU3RhdGUoKTsK
KyAgICAgICAgLy8gRG8gdGhlIGFzc2lnbm1lbnQgYWdhaW4gc28gdGhhdCB0aG9zZSB0d28gdmFy
aWFibGVzIGFyZSByZWZlcmVudGlhbGx5IGlkZW50aWNhbC4KKyAgICAgICAgbGFzdEhpc3RvcnlT
dGF0ZSA9IGNhY2hlZFN0YXRlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFzYW1lQmFz
ZSB8fCByZWxvYWRMb2NhdGlvbikgeworICAgICAgICAgIHJlbG9hZExvY2F0aW9uID0gdXJsOwor
ICAgICAgICB9CisgICAgICAgIGlmIChyZXBsYWNlKSB7CisgICAgICAgICAgbG9jYXRpb24ucmVw
bGFjZSh1cmwpOworICAgICAgICB9IGVsc2UgaWYgKCFzYW1lQmFzZSkgeworICAgICAgICAgIGxv
Y2F0aW9uLmhyZWYgPSB1cmw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbG9jYXRpb24u
aGFzaCA9IGdldEhhc2godXJsKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgcmV0dXJuIHNl
bGY7CisgICAgLy8gZ2V0dGVyCisgICAgfSBlbHNlIHsKKyAgICAgIC8vIC0gcmVsb2FkTG9jYXRp
b24gaXMgbmVlZGVkIGFzIGJyb3dzZXJzIGRvbid0IGFsbG93IHRvIHJlYWQgb3V0CisgICAgICAv
LyAgIHRoZSBuZXcgbG9jYXRpb24uaHJlZiBpZiBhIHJlbG9hZCBoYXBwZW5lZC4KKyAgICAgIC8v
IC0gdGhlIHJlcGxhY2VtZW50IGlzIGEgd29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9idWd6aWxsYS5t
b3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA3MTcyCisgICAgICByZXR1cm4gcmVsb2FkTG9j
YXRpb24gfHwgbG9jYXRpb24uaHJlZi5yZXBsYWNlKC8lMjcvZywiJyIpOworICAgIH0KKyAgfTsK
KworICAvKioKKyAgICogQG5hbWUgJGJyb3dzZXIjc3RhdGUKKyAgICoKKyAgICogQGRlc2NyaXB0
aW9uCisgICAqIFRoaXMgbWV0aG9kIGlzIGEgZ2V0dGVyLgorICAgKgorICAgKiBSZXR1cm4gaGlz
dG9yeS5zdGF0ZSBvciBudWxsIGlmIGhpc3Rvcnkuc3RhdGUgaXMgdW5kZWZpbmVkLgorICAgKgor
ICAgKiBAcmV0dXJucyB7b2JqZWN0fSBzdGF0ZQorICAgKi8KKyAgc2VsZi5zdGF0ZSA9IGZ1bmN0
aW9uKCkgeworICAgIHJldHVybiBjYWNoZWRTdGF0ZTsKKyAgfTsKKworICB2YXIgdXJsQ2hhbmdl
TGlzdGVuZXJzID0gW10sCisgICAgICB1cmxDaGFuZ2VJbml0ID0gZmFsc2U7CisKKyAgZnVuY3Rp
b24gY2FjaGVTdGF0ZUFuZEZpcmVVcmxDaGFuZ2UoKSB7CisgICAgY2FjaGVTdGF0ZSgpOworICAg
IGZpcmVVcmxDaGFuZ2UoKTsKKyAgfQorCisgIGZ1bmN0aW9uIGdldEN1cnJlbnRTdGF0ZSgpIHsK
KyAgICB0cnkgeworICAgICAgcmV0dXJuIGhpc3Rvcnkuc3RhdGU7CisgICAgfSBjYXRjaCAoZSkg
eworICAgICAgLy8gTVNJRSBjYW4gcmVwb3J0ZWRseSB0aHJvdyB3aGVuIHRoZXJlIGlzIG5vIHN0
YXRlIChVTkNPTkZJUk1FRCkuCisgICAgfQorICB9CisKKyAgLy8gVGhpcyB2YXJpYWJsZSBzaG91
bGQgYmUgdXNlZCAqb25seSogaW5zaWRlIHRoZSBjYWNoZVN0YXRlIGZ1bmN0aW9uLgorICB2YXIg
bGFzdENhY2hlZFN0YXRlID0gbnVsbDsKKyAgZnVuY3Rpb24gY2FjaGVTdGF0ZSgpIHsKKyAgICAv
LyBUaGlzIHNob3VsZCBiZSB0aGUgb25seSBwbGFjZSBpbiAkYnJvd3NlciB3aGVyZSBgaGlzdG9y
eS5zdGF0ZWAgaXMgcmVhZC4KKyAgICBjYWNoZWRTdGF0ZSA9IGdldEN1cnJlbnRTdGF0ZSgpOwor
ICAgIGNhY2hlZFN0YXRlID0gaXNVbmRlZmluZWQoY2FjaGVkU3RhdGUpID8gbnVsbCA6IGNhY2hl
ZFN0YXRlOworCisgICAgLy8gUHJldmVudCBjYWxsYmFja3MgZm8gZmlyZSB0d2ljZSBpZiBib3Ro
IGhhc2hjaGFuZ2UgJiBwb3BzdGF0ZSB3ZXJlIGZpcmVkLgorICAgIGlmIChlcXVhbHMoY2FjaGVk
U3RhdGUsIGxhc3RDYWNoZWRTdGF0ZSkpIHsKKyAgICAgIGNhY2hlZFN0YXRlID0gbGFzdENhY2hl
ZFN0YXRlOworICAgIH0KKyAgICBsYXN0Q2FjaGVkU3RhdGUgPSBjYWNoZWRTdGF0ZTsKKyAgfQor
CisgIGZ1bmN0aW9uIGZpcmVVcmxDaGFuZ2UoKSB7CisgICAgaWYgKGxhc3RCcm93c2VyVXJsID09
PSBzZWxmLnVybCgpICYmIGxhc3RIaXN0b3J5U3RhdGUgPT09IGNhY2hlZFN0YXRlKSB7CisgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgbGFzdEJyb3dzZXJVcmwgPSBzZWxmLnVybCgpOworICAg
IGxhc3RIaXN0b3J5U3RhdGUgPSBjYWNoZWRTdGF0ZTsKKyAgICBmb3JFYWNoKHVybENoYW5nZUxp
c3RlbmVycywgZnVuY3Rpb24obGlzdGVuZXIpIHsKKyAgICAgIGxpc3RlbmVyKHNlbGYudXJsKCks
IGNhY2hlZFN0YXRlKTsKKyAgICB9KTsKKyAgfQorCisgIC8qKgorICAgKiBAbmFtZSAkYnJvd3Nl
ciNvblVybENoYW5nZQorICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAgICogUmVnaXN0ZXIgY2Fs
bGJhY2sgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCwgd2hlbiB1cmwgY2hhbmdlcy4KKyAg
ICoKKyAgICogSXQncyBvbmx5IGNhbGxlZCB3aGVuIHRoZSB1cmwgaXMgY2hhbmdlZCBmcm9tIG91
dHNpZGUgb2YgYW5ndWxhcjoKKyAgICogLSB1c2VyIHR5cGVzIGRpZmZlcmVudCB1cmwgaW50byBh
ZGRyZXNzIGJhcgorICAgKiAtIHVzZXIgY2xpY2tzIG9uIGhpc3RvcnkgKGZvcndhcmQvYmFjaykg
YnV0dG9uCisgICAqIC0gdXNlciBjbGlja3Mgb24gYSBsaW5rCisgICAqCisgICAqIEl0J3Mgbm90
IGNhbGxlZCB3aGVuIHVybCBpcyBjaGFuZ2VkIGJ5ICRicm93c2VyLnVybCgpIG1ldGhvZAorICAg
KgorICAgKiBUaGUgbGlzdGVuZXIgZ2V0cyBjYWxsZWQgd2l0aCBuZXcgdXJsIGFzIHBhcmFtZXRl
ci4KKyAgICoKKyAgICogTk9URTogdGhpcyBhcGkgaXMgaW50ZW5kZWQgZm9yIHVzZSBvbmx5IGJ5
IHRoZSAkbG9jYXRpb24gc2VydmljZS4gUGxlYXNlIHVzZSB0aGUKKyAgICoge0BsaW5rIG5nLiRs
b2NhdGlvbiAkbG9jYXRpb24gc2VydmljZX0gdG8gbW9uaXRvciB1cmwgY2hhbmdlcyBpbiBhbmd1
bGFyIGFwcHMuCisgICAqCisgICAqIEBwYXJhbSB7ZnVuY3Rpb24oc3RyaW5nKX0gbGlzdGVuZXIg
TGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdXJsIGNoYW5nZXMuCisgICAqIEBy
ZXR1cm4ge2Z1bmN0aW9uKHN0cmluZyl9IFJldHVybnMgdGhlIHJlZ2lzdGVyZWQgbGlzdGVuZXIg
Zm4gLSBoYW5keSBpZiB0aGUgZm4gaXMgYW5vbnltb3VzLgorICAgKi8KKyAgc2VsZi5vblVybENo
YW5nZSA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7CisgICAgLy8gVE9ETyh2b2p0YSk6IHJlZmFjdG9y
IHRvIHVzZSBub2RlJ3Mgc3ludGF4IGZvciBldmVudHMKKyAgICBpZiAoIXVybENoYW5nZUluaXQp
IHsKKyAgICAgIC8vIFdlIGxpc3RlbiBvbiBib3RoIChoYXNoY2hhbmdlL3BvcHN0YXRlKSB3aGVu
IGF2YWlsYWJsZSwgYXMgc29tZSBicm93c2VycyAoZS5nLiBPcGVyYSkKKyAgICAgIC8vIGRvbid0
IGZpcmUgcG9wc3RhdGUgd2hlbiB1c2VyIGNoYW5nZSB0aGUgYWRkcmVzcyBiYXIgYW5kIGRvbid0
IGZpcmUgaGFzaGNoYW5nZSB3aGVuIHVybAorICAgICAgLy8gY2hhbmdlZCBieSBwdXNoL3JlcGxh
Y2VTdGF0ZQorCisgICAgICAvLyBodG1sNSBoaXN0b3J5IGFwaSAtIHBvcHN0YXRlIGV2ZW50Cisg
ICAgICBpZiAoJHNuaWZmZXIuaGlzdG9yeSkganFMaXRlKHdpbmRvdykub24oJ3BvcHN0YXRlJywg
Y2FjaGVTdGF0ZUFuZEZpcmVVcmxDaGFuZ2UpOworICAgICAgLy8gaGFzaGNoYW5nZSBldmVudAor
ICAgICAganFMaXRlKHdpbmRvdykub24oJ2hhc2hjaGFuZ2UnLCBjYWNoZVN0YXRlQW5kRmlyZVVy
bENoYW5nZSk7CisKKyAgICAgIHVybENoYW5nZUluaXQgPSB0cnVlOworICAgIH0KKworICAgIHVy
bENoYW5nZUxpc3RlbmVycy5wdXNoKGNhbGxiYWNrKTsKKyAgICByZXR1cm4gY2FsbGJhY2s7Cisg
IH07CisKKyAgLyoqCisgICAqIEBwcml2YXRlCisgICAqIFJlbW92ZSBwb3BzdGF0ZSBhbmQgaGFz
aGNoYW5nZSBoYW5kbGVyIGZyb20gd2luZG93LgorICAgKgorICAgKiBOT1RFOiB0aGlzIGFwaSBp
cyBpbnRlbmRlZCBmb3IgdXNlIG9ubHkgYnkgJHJvb3RTY29wZS4KKyAgICovCisgIHNlbGYuJCRh
cHBsaWNhdGlvbkRlc3Ryb3llZCA9IGZ1bmN0aW9uKCkgeworICAgIGpxTGl0ZSh3aW5kb3cpLm9m
ZignaGFzaGNoYW5nZSBwb3BzdGF0ZScsIGNhY2hlU3RhdGVBbmRGaXJlVXJsQ2hhbmdlKTsKKyAg
fTsKKworICAvKioKKyAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIHVybCBoYXMgY2hhbmdlZCBvdXRz
aWRlIG9mIEFuZ3VsYXIuCisgICAqIE5lZWRzIHRvIGJlIGV4cG9ydGVkIHRvIGJlIGFibGUgdG8g
Y2hlY2sgZm9yIGNoYW5nZXMgdGhhdCBoYXZlIGJlZW4gZG9uZSBpbiBzeW5jLAorICAgKiBhcyBo
YXNoY2hhbmdlL3BvcHN0YXRlIGV2ZW50cyBmaXJlIGluIGFzeW5jLgorICAgKi8KKyAgc2VsZi4k
JGNoZWNrVXJsQ2hhbmdlID0gZmlyZVVybENoYW5nZTsKKworICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAvLyBNaXNjIEFQ
SQorICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLworCisgIC8qKgorICAgKiBAbmFtZSAkYnJvd3NlciNiYXNlSHJlZgorICAgKgor
ICAgKiBAZGVzY3JpcHRpb24KKyAgICogUmV0dXJucyBjdXJyZW50IDxiYXNlIGhyZWY+CisgICAq
IChhbHdheXMgcmVsYXRpdmUgLSB3aXRob3V0IGRvbWFpbikKKyAgICoKKyAgICogQHJldHVybnMg
e3N0cmluZ30gVGhlIGN1cnJlbnQgYmFzZSBocmVmCisgICAqLworICBzZWxmLmJhc2VIcmVmID0g
ZnVuY3Rpb24oKSB7CisgICAgdmFyIGhyZWYgPSBiYXNlRWxlbWVudC5hdHRyKCdocmVmJyk7Cisg
ICAgcmV0dXJuIGhyZWYgPyBocmVmLnJlcGxhY2UoL14oaHR0cHM/XDopP1wvXC9bXlwvXSovLCAn
JykgOiAnJzsKKyAgfTsKKworICAvKioKKyAgICogQG5hbWUgJGJyb3dzZXIjZGVmZXIKKyAgICog
QHBhcmFtIHtmdW5jdGlvbigpfSBmbiBBIGZ1bmN0aW9uLCB3aG8ncyBleGVjdXRpb24gc2hvdWxk
IGJlIGRlZmVycmVkLgorICAgKiBAcGFyYW0ge251bWJlcj19IFtkZWxheT0wXSBvZiBtaWxsaXNl
Y29uZHMgdG8gZGVmZXIgdGhlIGZ1bmN0aW9uIGV4ZWN1dGlvbi4KKyAgICogQHJldHVybnMgeyp9
IERlZmVySWQgdGhhdCBjYW4gYmUgdXNlZCB0byBjYW5jZWwgdGhlIHRhc2sgdmlhIGAkYnJvd3Nl
ci5kZWZlci5jYW5jZWwoKWAuCisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBFeGVjdXRl
cyBhIGZuIGFzeW5jaHJvbm91c2x5IHZpYSBgc2V0VGltZW91dChmbiwgZGVsYXkpYC4KKyAgICoK
KyAgICogVW5saWtlIHdoZW4gY2FsbGluZyBgc2V0VGltZW91dGAgZGlyZWN0bHksIGluIHRlc3Qg
dGhpcyBmdW5jdGlvbiBpcyBtb2NrZWQgYW5kIGluc3RlYWQgb2YgdXNpbmcKKyAgICogYHNldFRp
bWVvdXRgIGluIHRlc3RzLCB0aGUgZm5zIGFyZSBxdWV1ZWQgaW4gYW4gYXJyYXksIHdoaWNoIGNh
biBiZSBwcm9ncmFtbWF0aWNhbGx5IGZsdXNoZWQKKyAgICogdmlhIGAkYnJvd3Nlci5kZWZlci5m
bHVzaCgpYC4KKyAgICoKKyAgICovCisgIHNlbGYuZGVmZXIgPSBmdW5jdGlvbihmbiwgZGVsYXkp
IHsKKyAgICB2YXIgdGltZW91dElkOworICAgIG91dHN0YW5kaW5nUmVxdWVzdENvdW50Kys7Cisg
ICAgdGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgIGRlbGV0ZSBwZW5k
aW5nRGVmZXJJZHNbdGltZW91dElkXTsKKyAgICAgIGNvbXBsZXRlT3V0c3RhbmRpbmdSZXF1ZXN0
KGZuKTsKKyAgICB9LCBkZWxheSB8fCAwKTsKKyAgICBwZW5kaW5nRGVmZXJJZHNbdGltZW91dElk
XSA9IHRydWU7CisgICAgcmV0dXJuIHRpbWVvdXRJZDsKKyAgfTsKKworCisgIC8qKgorICAgKiBA
bmFtZSAkYnJvd3NlciNkZWZlci5jYW5jZWwKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAq
IENhbmNlbHMgYSBkZWZlcnJlZCB0YXNrIGlkZW50aWZpZWQgd2l0aCBgZGVmZXJJZGAuCisgICAq
CisgICAqIEBwYXJhbSB7Kn0gZGVmZXJJZCBUb2tlbiByZXR1cm5lZCBieSB0aGUgYCRicm93c2Vy
LmRlZmVyYCBmdW5jdGlvbi4KKyAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVg
IGlmIHRoZSB0YXNrIGhhc24ndCBleGVjdXRlZCB5ZXQgYW5kIHdhcyBzdWNjZXNzZnVsbHkKKyAg
ICogICAgICAgICAgICAgICAgICAgIGNhbmNlbGVkLgorICAgKi8KKyAgc2VsZi5kZWZlci5jYW5j
ZWwgPSBmdW5jdGlvbihkZWZlcklkKSB7CisgICAgaWYgKHBlbmRpbmdEZWZlcklkc1tkZWZlcklk
XSkgeworICAgICAgZGVsZXRlIHBlbmRpbmdEZWZlcklkc1tkZWZlcklkXTsKKyAgICAgIGNsZWFy
VGltZW91dChkZWZlcklkKTsKKyAgICAgIGNvbXBsZXRlT3V0c3RhbmRpbmdSZXF1ZXN0KG5vb3Ap
OworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAgfTsKKwor
fQorCitmdW5jdGlvbiAkQnJvd3NlclByb3ZpZGVyKCkgeworICB0aGlzLiRnZXQgPSBbJyR3aW5k
b3cnLCAnJGxvZycsICckc25pZmZlcicsICckZG9jdW1lbnQnLAorICAgICAgZnVuY3Rpb24oJHdp
bmRvdywgJGxvZywgJHNuaWZmZXIsICRkb2N1bWVudCkgeworICAgICAgICByZXR1cm4gbmV3IEJy
b3dzZXIoJHdpbmRvdywgJGRvY3VtZW50LCAkbG9nLCAkc25pZmZlcik7CisgICAgICB9XTsKK30K
KworLyoqCisgKiBAbmdkb2Mgc2VydmljZQorICogQG5hbWUgJGNhY2hlRmFjdG9yeQorICoKKyAq
IEBkZXNjcmlwdGlvbgorICogRmFjdG9yeSB0aGF0IGNvbnN0cnVjdHMge0BsaW5rICRjYWNoZUZh
Y3RvcnkuQ2FjaGUgQ2FjaGV9IG9iamVjdHMgYW5kIGdpdmVzIGFjY2VzcyB0bworICogdGhlbS4K
KyAqCisgKiBgYGBqcworICoKKyAqICB2YXIgY2FjaGUgPSAkY2FjaGVGYWN0b3J5KCdjYWNoZUlk
Jyk7CisgKiAgZXhwZWN0KCRjYWNoZUZhY3RvcnkuZ2V0KCdjYWNoZUlkJykpLnRvQmUoY2FjaGUp
OworICogIGV4cGVjdCgkY2FjaGVGYWN0b3J5LmdldCgnbm9TdWNoQ2FjaGVJZCcpKS5ub3QudG9C
ZURlZmluZWQoKTsKKyAqCisgKiAgY2FjaGUucHV0KCJrZXkiLCAidmFsdWUiKTsKKyAqICBjYWNo
ZS5wdXQoImFub3RoZXIga2V5IiwgImFub3RoZXIgdmFsdWUiKTsKKyAqCisgKiAgLy8gV2UndmUg
c3BlY2lmaWVkIG5vIG9wdGlvbnMgb24gY3JlYXRpb24KKyAqICBleHBlY3QoY2FjaGUuaW5mbygp
KS50b0VxdWFsKHtpZDogJ2NhY2hlSWQnLCBzaXplOiAyfSk7CisgKgorICogYGBgCisgKgorICoK
KyAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZUlkIE5hbWUgb3IgaWQgb2YgdGhlIG5ld2x5IGNyZWF0
ZWQgY2FjaGUuCisgKiBAcGFyYW0ge29iamVjdD19IG9wdGlvbnMgT3B0aW9ucyBvYmplY3QgdGhh
dCBzcGVjaWZpZXMgdGhlIGNhY2hlIGJlaGF2aW9yLiBQcm9wZXJ0aWVzOgorICoKKyAqICAgLSBg
e251bWJlcj19YCBgY2FwYWNpdHlgIOKAlCB0dXJucyB0aGUgY2FjaGUgaW50byBMUlUgY2FjaGUu
CisgKgorICogQHJldHVybnMge29iamVjdH0gTmV3bHkgY3JlYXRlZCBjYWNoZSBvYmplY3Qgd2l0
aCB0aGUgZm9sbG93aW5nIHNldCBvZiBtZXRob2RzOgorICoKKyAqIC0gYHtvYmplY3R9YCBgaW5m
bygpYCDigJQgUmV0dXJucyBpZCwgc2l6ZSwgYW5kIG9wdGlvbnMgb2YgY2FjaGUuCisgKiAtIGB7
eyp9fWAgYHB1dCh7c3RyaW5nfSBrZXksIHsqfSB2YWx1ZSlgIOKAlCBQdXRzIGEgbmV3IGtleS12
YWx1ZSBwYWlyIGludG8gdGhlIGNhY2hlIGFuZCByZXR1cm5zCisgKiAgIGl0LgorICogLSBge3sq
fX1gIGBnZXQoe3N0cmluZ30ga2V5KWAg4oCUIFJldHVybnMgY2FjaGVkIHZhbHVlIGZvciBga2V5
YCBvciB1bmRlZmluZWQgZm9yIGNhY2hlIG1pc3MuCisgKiAtIGB7dm9pZH1gIGByZW1vdmUoe3N0
cmluZ30ga2V5KWAg4oCUIFJlbW92ZXMgYSBrZXktdmFsdWUgcGFpciBmcm9tIHRoZSBjYWNoZS4K
KyAqIC0gYHt2b2lkfWAgYHJlbW92ZUFsbCgpYCDigJQgUmVtb3ZlcyBhbGwgY2FjaGVkIHZhbHVl
cy4KKyAqIC0gYHt2b2lkfWAgYGRlc3Ryb3koKWAg4oCUIFJlbW92ZXMgcmVmZXJlbmNlcyB0byB0
aGlzIGNhY2hlIGZyb20gJGNhY2hlRmFjdG9yeS4KKyAqCisgKiBAZXhhbXBsZQorICAgPGV4YW1w
bGUgbW9kdWxlPSJjYWNoZUV4YW1wbGVBcHAiPgorICAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1s
Ij4KKyAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9IkNhY2hlQ29udHJvbGxlciI+CisgICAgICAg
ICA8aW5wdXQgbmctbW9kZWw9Im5ld0NhY2hlS2V5IiBwbGFjZWhvbGRlcj0iS2V5Ij4KKyAgICAg
ICAgIDxpbnB1dCBuZy1tb2RlbD0ibmV3Q2FjaGVWYWx1ZSIgcGxhY2Vob2xkZXI9IlZhbHVlIj4K
KyAgICAgICAgIDxidXR0b24gbmctY2xpY2s9InB1dChuZXdDYWNoZUtleSwgbmV3Q2FjaGVWYWx1
ZSkiPkNhY2hlPC9idXR0b24+CisKKyAgICAgICAgIDxwIG5nLWlmPSJrZXlzLmxlbmd0aCI+Q2Fj
aGVkIFZhbHVlczwvcD4KKyAgICAgICAgIDxkaXYgbmctcmVwZWF0PSJrZXkgaW4ga2V5cyI+Cisg
ICAgICAgICAgIDxzcGFuIG5nLWJpbmQ9ImtleSI+PC9zcGFuPgorICAgICAgICAgICA8c3Bhbj46
IDwvc3Bhbj4KKyAgICAgICAgICAgPGIgbmctYmluZD0iY2FjaGUuZ2V0KGtleSkiPjwvYj4KKyAg
ICAgICAgIDwvZGl2PgorCisgICAgICAgICA8cD5DYWNoZSBJbmZvPC9wPgorICAgICAgICAgPGRp
diBuZy1yZXBlYXQ9IihrZXksIHZhbHVlKSBpbiBjYWNoZS5pbmZvKCkiPgorICAgICAgICAgICA8
c3BhbiBuZy1iaW5kPSJrZXkiPjwvc3Bhbj4KKyAgICAgICAgICAgPHNwYW4+OiA8L3NwYW4+Cisg
ICAgICAgICAgIDxiIG5nLWJpbmQ9InZhbHVlIj48L2I+CisgICAgICAgICA8L2Rpdj4KKyAgICAg
ICA8L2Rpdj4KKyAgICAgPC9maWxlPgorICAgICA8ZmlsZSBuYW1lPSJzY3JpcHQuanMiPgorICAg
ICAgIGFuZ3VsYXIubW9kdWxlKCdjYWNoZUV4YW1wbGVBcHAnLCBbXSkuCisgICAgICAgICBjb250
cm9sbGVyKCdDYWNoZUNvbnRyb2xsZXInLCBbJyRzY29wZScsICckY2FjaGVGYWN0b3J5JywgZnVu
Y3Rpb24oJHNjb3BlLCAkY2FjaGVGYWN0b3J5KSB7CisgICAgICAgICAgICRzY29wZS5rZXlzID0g
W107CisgICAgICAgICAgICRzY29wZS5jYWNoZSA9ICRjYWNoZUZhY3RvcnkoJ2NhY2hlSWQnKTsK
KyAgICAgICAgICAgJHNjb3BlLnB1dCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgICAgICAg
ICAgICBpZiAoJHNjb3BlLmNhY2hlLmdldChrZXkpID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAg
ICAgICAgICRzY29wZS5rZXlzLnB1c2goa2V5KTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgJHNjb3BlLmNhY2hlLnB1dChrZXksIHZhbHVlID09PSB1bmRlZmluZWQgPyBudWxsIDogdmFs
dWUpOworICAgICAgICAgICB9OworICAgICAgICAgfV0pOworICAgICA8L2ZpbGU+CisgICAgIDxm
aWxlIG5hbWU9InN0eWxlLmNzcyI+CisgICAgICAgcCB7CisgICAgICAgICBtYXJnaW46IDEwcHgg
MCAzcHg7CisgICAgICAgfQorICAgICA8L2ZpbGU+CisgICA8L2V4YW1wbGU+CisgKi8KK2Z1bmN0
aW9uICRDYWNoZUZhY3RvcnlQcm92aWRlcigpIHsKKworICB0aGlzLiRnZXQgPSBmdW5jdGlvbigp
IHsKKyAgICB2YXIgY2FjaGVzID0ge307CisKKyAgICBmdW5jdGlvbiBjYWNoZUZhY3RvcnkoY2Fj
aGVJZCwgb3B0aW9ucykgeworICAgICAgaWYgKGNhY2hlSWQgaW4gY2FjaGVzKSB7CisgICAgICAg
IHRocm93IG1pbkVycignJGNhY2hlRmFjdG9yeScpKCdpaWQnLCAiQ2FjaGVJZCAnezB9JyBpcyBh
bHJlYWR5IHRha2VuISIsIGNhY2hlSWQpOworICAgICAgfQorCisgICAgICB2YXIgc2l6ZSA9IDAs
CisgICAgICAgICAgc3RhdHMgPSBleHRlbmQoe30sIG9wdGlvbnMsIHtpZDogY2FjaGVJZH0pLAor
ICAgICAgICAgIGRhdGEgPSB7fSwKKyAgICAgICAgICBjYXBhY2l0eSA9IChvcHRpb25zICYmIG9w
dGlvbnMuY2FwYWNpdHkpIHx8IE51bWJlci5NQVhfVkFMVUUsCisgICAgICAgICAgbHJ1SGFzaCA9
IHt9LAorICAgICAgICAgIGZyZXNoRW5kID0gbnVsbCwKKyAgICAgICAgICBzdGFsZUVuZCA9IG51
bGw7CisKKyAgICAgIC8qKgorICAgICAgICogQG5nZG9jIHR5cGUKKyAgICAgICAqIEBuYW1lICRj
YWNoZUZhY3RvcnkuQ2FjaGUKKyAgICAgICAqCisgICAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAg
ICAqIEEgY2FjaGUgb2JqZWN0IHVzZWQgdG8gc3RvcmUgYW5kIHJldHJpZXZlIGRhdGEsIHByaW1h
cmlseSB1c2VkIGJ5CisgICAgICAgKiB7QGxpbmsgJGh0dHAgJGh0dHB9IGFuZCB0aGUge0BsaW5r
IG5nLmRpcmVjdGl2ZTpzY3JpcHQgc2NyaXB0fSBkaXJlY3RpdmUgdG8gY2FjaGUKKyAgICAgICAq
IHRlbXBsYXRlcyBhbmQgb3RoZXIgZGF0YS4KKyAgICAgICAqCisgICAgICAgKiBgYGBqcworICAg
ICAgICogIGFuZ3VsYXIubW9kdWxlKCdzdXBlckNhY2hlJykKKyAgICAgICAqICAgIC5mYWN0b3J5
KCdzdXBlckNhY2hlJywgWyckY2FjaGVGYWN0b3J5JywgZnVuY3Rpb24oJGNhY2hlRmFjdG9yeSkg
eworICAgICAgICogICAgICByZXR1cm4gJGNhY2hlRmFjdG9yeSgnc3VwZXItY2FjaGUnKTsKKyAg
ICAgICAqICAgIH1dKTsKKyAgICAgICAqIGBgYAorICAgICAgICoKKyAgICAgICAqIEV4YW1wbGUg
dGVzdDoKKyAgICAgICAqCisgICAgICAgKiBgYGBqcworICAgICAgICogIGl0KCdzaG91bGQgYmVo
YXZlIGxpa2UgYSBjYWNoZScsIGluamVjdChmdW5jdGlvbihzdXBlckNhY2hlKSB7CisgICAgICAg
KiAgICBzdXBlckNhY2hlLnB1dCgna2V5JywgJ3ZhbHVlJyk7CisgICAgICAgKiAgICBzdXBlckNh
Y2hlLnB1dCgnYW5vdGhlciBrZXknLCAnYW5vdGhlciB2YWx1ZScpOworICAgICAgICoKKyAgICAg
ICAqICAgIGV4cGVjdChzdXBlckNhY2hlLmluZm8oKSkudG9FcXVhbCh7CisgICAgICAgKiAgICAg
IGlkOiAnc3VwZXItY2FjaGUnLAorICAgICAgICogICAgICBzaXplOiAyCisgICAgICAgKiAgICB9
KTsKKyAgICAgICAqCisgICAgICAgKiAgICBzdXBlckNhY2hlLnJlbW92ZSgnYW5vdGhlciBrZXkn
KTsKKyAgICAgICAqICAgIGV4cGVjdChzdXBlckNhY2hlLmdldCgnYW5vdGhlciBrZXknKSkudG9C
ZVVuZGVmaW5lZCgpOworICAgICAgICoKKyAgICAgICAqICAgIHN1cGVyQ2FjaGUucmVtb3ZlQWxs
KCk7CisgICAgICAgKiAgICBleHBlY3Qoc3VwZXJDYWNoZS5pbmZvKCkpLnRvRXF1YWwoeworICAg
ICAgICogICAgICBpZDogJ3N1cGVyLWNhY2hlJywKKyAgICAgICAqICAgICAgc2l6ZTogMAorICAg
ICAgICogICAgfSk7CisgICAgICAgKiAgfSkpOworICAgICAgICogYGBgCisgICAgICAgKi8KKyAg
ICAgIHJldHVybiBjYWNoZXNbY2FjaGVJZF0gPSB7CisKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEBuZ2RvYyBtZXRob2QKKyAgICAgICAgICogQG5hbWUgJGNhY2hlRmFjdG9yeS5DYWNoZSNwdXQK
KyAgICAgICAgICogQGtpbmQgZnVuY3Rpb24KKyAgICAgICAgICoKKyAgICAgICAgICogQGRlc2Ny
aXB0aW9uCisgICAgICAgICAqIEluc2VydHMgYSBuYW1lZCBlbnRyeSBpbnRvIHRoZSB7QGxpbmsg
JGNhY2hlRmFjdG9yeS5DYWNoZSBDYWNoZX0gb2JqZWN0IHRvIGJlCisgICAgICAgICAqIHJldHJp
ZXZlZCBsYXRlciwgYW5kIGluY3JlbWVudGluZyB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUgaWYgdGhl
IGtleSB3YXMgbm90IGFscmVhZHkKKyAgICAgICAgICogcHJlc2VudCBpbiB0aGUgY2FjaGUuIElm
IGJlaGF2aW5nIGxpa2UgYW4gTFJVIGNhY2hlLCBpdCB3aWxsIGFsc28gcmVtb3ZlIHN0YWxlCisg
ICAgICAgICAqIGVudHJpZXMgZnJvbSB0aGUgc2V0LgorICAgICAgICAgKgorICAgICAgICAgKiBJ
dCB3aWxsIG5vdCBpbnNlcnQgdW5kZWZpbmVkIHZhbHVlcyBpbnRvIHRoZSBjYWNoZS4KKyAgICAg
ICAgICoKKyAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSB0aGUga2V5IHVuZGVyIHdoaWNo
IHRoZSBjYWNoZWQgZGF0YSBpcyBzdG9yZWQuCisgICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUg
dGhlIHZhbHVlIHRvIHN0b3JlIGFsb25nc2lkZSB0aGUga2V5LiBJZiBpdCBpcyB1bmRlZmluZWQs
IHRoZSBrZXkKKyAgICAgICAgICogICAgd2lsbCBub3QgYmUgc3RvcmVkLgorICAgICAgICAgKiBA
cmV0dXJucyB7Kn0gdGhlIHZhbHVlIHN0b3JlZC4KKyAgICAgICAgICovCisgICAgICAgIHB1dDog
ZnVuY3Rpb24oa2V5LCB2YWx1ZSkgeworICAgICAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkp
IHJldHVybjsKKyAgICAgICAgICBpZiAoY2FwYWNpdHkgPCBOdW1iZXIuTUFYX1ZBTFVFKSB7Cisg
ICAgICAgICAgICB2YXIgbHJ1RW50cnkgPSBscnVIYXNoW2tleV0gfHwgKGxydUhhc2hba2V5XSA9
IHtrZXk6IGtleX0pOworCisgICAgICAgICAgICByZWZyZXNoKGxydUVudHJ5KTsKKyAgICAgICAg
ICB9CisKKyAgICAgICAgICBpZiAoIShrZXkgaW4gZGF0YSkpIHNpemUrKzsKKyAgICAgICAgICBk
YXRhW2tleV0gPSB2YWx1ZTsKKworICAgICAgICAgIGlmIChzaXplID4gY2FwYWNpdHkpIHsKKyAg
ICAgICAgICAgIHRoaXMucmVtb3ZlKHN0YWxlRW5kLmtleSk7CisgICAgICAgICAgfQorCisgICAg
ICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICB9LAorCisgICAgICAgIC8qKgorICAgICAgICAg
KiBAbmdkb2MgbWV0aG9kCisgICAgICAgICAqIEBuYW1lICRjYWNoZUZhY3RvcnkuQ2FjaGUjZ2V0
CisgICAgICAgICAqIEBraW5kIGZ1bmN0aW9uCisgICAgICAgICAqCisgICAgICAgICAqIEBkZXNj
cmlwdGlvbgorICAgICAgICAgKiBSZXRyaWV2ZXMgbmFtZWQgZGF0YSBzdG9yZWQgaW4gdGhlIHtA
bGluayAkY2FjaGVGYWN0b3J5LkNhY2hlIENhY2hlfSBvYmplY3QuCisgICAgICAgICAqCisgICAg
ICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgdGhlIGtleSBvZiB0aGUgZGF0YSB0byBiZSByZXRy
aWV2ZWQKKyAgICAgICAgICogQHJldHVybnMgeyp9IHRoZSB2YWx1ZSBzdG9yZWQuCisgICAgICAg
ICAqLworICAgICAgICBnZXQ6IGZ1bmN0aW9uKGtleSkgeworICAgICAgICAgIGlmIChjYXBhY2l0
eSA8IE51bWJlci5NQVhfVkFMVUUpIHsKKyAgICAgICAgICAgIHZhciBscnVFbnRyeSA9IGxydUhh
c2hba2V5XTsKKworICAgICAgICAgICAgaWYgKCFscnVFbnRyeSkgcmV0dXJuOworCisgICAgICAg
ICAgICByZWZyZXNoKGxydUVudHJ5KTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICByZXR1cm4g
ZGF0YVtrZXldOworICAgICAgICB9LAorCisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBuZ2Rv
YyBtZXRob2QKKyAgICAgICAgICogQG5hbWUgJGNhY2hlRmFjdG9yeS5DYWNoZSNyZW1vdmUKKyAg
ICAgICAgICogQGtpbmQgZnVuY3Rpb24KKyAgICAgICAgICoKKyAgICAgICAgICogQGRlc2NyaXB0
aW9uCisgICAgICAgICAqIFJlbW92ZXMgYW4gZW50cnkgZnJvbSB0aGUge0BsaW5rICRjYWNoZUZh
Y3RvcnkuQ2FjaGUgQ2FjaGV9IG9iamVjdC4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFt
IHtzdHJpbmd9IGtleSB0aGUga2V5IG9mIHRoZSBlbnRyeSB0byBiZSByZW1vdmVkCisgICAgICAg
ICAqLworICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKGtleSkgeworICAgICAgICAgIGlmIChjYXBh
Y2l0eSA8IE51bWJlci5NQVhfVkFMVUUpIHsKKyAgICAgICAgICAgIHZhciBscnVFbnRyeSA9IGxy
dUhhc2hba2V5XTsKKworICAgICAgICAgICAgaWYgKCFscnVFbnRyeSkgcmV0dXJuOworCisgICAg
ICAgICAgICBpZiAobHJ1RW50cnkgPT0gZnJlc2hFbmQpIGZyZXNoRW5kID0gbHJ1RW50cnkucDsK
KyAgICAgICAgICAgIGlmIChscnVFbnRyeSA9PSBzdGFsZUVuZCkgc3RhbGVFbmQgPSBscnVFbnRy
eS5uOworICAgICAgICAgICAgbGluayhscnVFbnRyeS5uLGxydUVudHJ5LnApOworCisgICAgICAg
ICAgICBkZWxldGUgbHJ1SGFzaFtrZXldOworICAgICAgICAgIH0KKworICAgICAgICAgIGRlbGV0
ZSBkYXRhW2tleV07CisgICAgICAgICAgc2l6ZS0tOworICAgICAgICB9LAorCisKKyAgICAgICAg
LyoqCisgICAgICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgICAgICogQG5hbWUgJGNhY2hlRmFj
dG9yeS5DYWNoZSNyZW1vdmVBbGwKKyAgICAgICAgICogQGtpbmQgZnVuY3Rpb24KKyAgICAgICAg
ICoKKyAgICAgICAgICogQGRlc2NyaXB0aW9uCisgICAgICAgICAqIENsZWFycyB0aGUgY2FjaGUg
b2JqZWN0IG9mIGFueSBlbnRyaWVzLgorICAgICAgICAgKi8KKyAgICAgICAgcmVtb3ZlQWxsOiBm
dW5jdGlvbigpIHsKKyAgICAgICAgICBkYXRhID0ge307CisgICAgICAgICAgc2l6ZSA9IDA7Cisg
ICAgICAgICAgbHJ1SGFzaCA9IHt9OworICAgICAgICAgIGZyZXNoRW5kID0gc3RhbGVFbmQgPSBu
dWxsOworICAgICAgICB9LAorCisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBuZ2RvYyBtZXRo
b2QKKyAgICAgICAgICogQG5hbWUgJGNhY2hlRmFjdG9yeS5DYWNoZSNkZXN0cm95CisgICAgICAg
ICAqIEBraW5kIGZ1bmN0aW9uCisgICAgICAgICAqCisgICAgICAgICAqIEBkZXNjcmlwdGlvbgor
ICAgICAgICAgKiBEZXN0cm95cyB0aGUge0BsaW5rICRjYWNoZUZhY3RvcnkuQ2FjaGUgQ2FjaGV9
IG9iamVjdCBlbnRpcmVseSwKKyAgICAgICAgICogcmVtb3ZpbmcgaXQgZnJvbSB0aGUge0BsaW5r
ICRjYWNoZUZhY3RvcnkgJGNhY2hlRmFjdG9yeX0gc2V0LgorICAgICAgICAgKi8KKyAgICAgICAg
ZGVzdHJveTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgZGF0YSA9IG51bGw7CisgICAgICAgICAg
c3RhdHMgPSBudWxsOworICAgICAgICAgIGxydUhhc2ggPSBudWxsOworICAgICAgICAgIGRlbGV0
ZSBjYWNoZXNbY2FjaGVJZF07CisgICAgICAgIH0sCisKKworICAgICAgICAvKioKKyAgICAgICAg
ICogQG5nZG9jIG1ldGhvZAorICAgICAgICAgKiBAbmFtZSAkY2FjaGVGYWN0b3J5LkNhY2hlI2lu
Zm8KKyAgICAgICAgICogQGtpbmQgZnVuY3Rpb24KKyAgICAgICAgICoKKyAgICAgICAgICogQGRl
c2NyaXB0aW9uCisgICAgICAgICAqIFJldHJpZXZlIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBhIHBh
cnRpY3VsYXIge0BsaW5rICRjYWNoZUZhY3RvcnkuQ2FjaGUgQ2FjaGV9LgorICAgICAgICAgKgor
ICAgICAgICAgKiBAcmV0dXJucyB7b2JqZWN0fSBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5n
IHByb3BlcnRpZXM6CisgICAgICAgICAqICAgPHVsPgorICAgICAgICAgKiAgICAgPGxpPioqaWQq
KjogdGhlIGlkIG9mIHRoZSBjYWNoZSBpbnN0YW5jZTwvbGk+CisgICAgICAgICAqICAgICA8bGk+
KipzaXplKio6IHRoZSBudW1iZXIgb2YgZW50cmllcyBrZXB0IGluIHRoZSBjYWNoZSBpbnN0YW5j
ZTwvbGk+CisgICAgICAgICAqICAgICA8bGk+KiouLi4qKjogYW55IGFkZGl0aW9uYWwgcHJvcGVy
dGllcyBmcm9tIHRoZSBvcHRpb25zIG9iamVjdCB3aGVuIGNyZWF0aW5nIHRoZQorICAgICAgICAg
KiAgICAgICBjYWNoZS48L2xpPgorICAgICAgICAgKiAgIDwvdWw+CisgICAgICAgICAqLworICAg
ICAgICBpbmZvOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICByZXR1cm4gZXh0ZW5kKHt9LCBzdGF0
cywge3NpemU6IHNpemV9KTsKKyAgICAgICAgfQorICAgICAgfTsKKworCisgICAgICAvKioKKyAg
ICAgICAqIG1ha2VzIHRoZSBgZW50cnlgIHRoZSBmcmVzaEVuZCBvZiB0aGUgTFJVIGxpbmtlZCBs
aXN0CisgICAgICAgKi8KKyAgICAgIGZ1bmN0aW9uIHJlZnJlc2goZW50cnkpIHsKKyAgICAgICAg
aWYgKGVudHJ5ICE9IGZyZXNoRW5kKSB7CisgICAgICAgICAgaWYgKCFzdGFsZUVuZCkgeworICAg
ICAgICAgICAgc3RhbGVFbmQgPSBlbnRyeTsKKyAgICAgICAgICB9IGVsc2UgaWYgKHN0YWxlRW5k
ID09IGVudHJ5KSB7CisgICAgICAgICAgICBzdGFsZUVuZCA9IGVudHJ5Lm47CisgICAgICAgICAg
fQorCisgICAgICAgICAgbGluayhlbnRyeS5uLCBlbnRyeS5wKTsKKyAgICAgICAgICBsaW5rKGVu
dHJ5LCBmcmVzaEVuZCk7CisgICAgICAgICAgZnJlc2hFbmQgPSBlbnRyeTsKKyAgICAgICAgICBm
cmVzaEVuZC5uID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgfQorCisKKyAgICAgIC8qKgorICAg
ICAgICogYmlkaXJlY3Rpb25hbGx5IGxpbmtzIHR3byBlbnRyaWVzIG9mIHRoZSBMUlUgbGlua2Vk
IGxpc3QKKyAgICAgICAqLworICAgICAgZnVuY3Rpb24gbGluayhuZXh0RW50cnksIHByZXZFbnRy
eSkgeworICAgICAgICBpZiAobmV4dEVudHJ5ICE9IHByZXZFbnRyeSkgeworICAgICAgICAgIGlm
IChuZXh0RW50cnkpIG5leHRFbnRyeS5wID0gcHJldkVudHJ5OyAvL3Agc3RhbmRzIGZvciBwcmV2
aW91cywgJ3ByZXYnIGRpZG4ndCBtaW5pZnkKKyAgICAgICAgICBpZiAocHJldkVudHJ5KSBwcmV2
RW50cnkubiA9IG5leHRFbnRyeTsgLy9uIHN0YW5kcyBmb3IgbmV4dCwgJ25leHQnIGRpZG4ndCBt
aW5pZnkKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworCisgIC8qKgorICAgKiBAbmdkb2Mg
bWV0aG9kCisgICAqIEBuYW1lICRjYWNoZUZhY3RvcnkjaW5mbworICAgKgorICAgKiBAZGVzY3Jp
cHRpb24KKyAgICogR2V0IGluZm9ybWF0aW9uIGFib3V0IGFsbCB0aGUgY2FjaGVzIHRoYXQgaGF2
ZSBiZWVuIGNyZWF0ZWQKKyAgICoKKyAgICogQHJldHVybnMge09iamVjdH0gLSBrZXktdmFsdWUg
bWFwIG9mIGBjYWNoZUlkYCB0byB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgYGNhY2hlI2luZm9gCisg
ICAqLworICAgIGNhY2hlRmFjdG9yeS5pbmZvID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgaW5m
byA9IHt9OworICAgICAgZm9yRWFjaChjYWNoZXMsIGZ1bmN0aW9uKGNhY2hlLCBjYWNoZUlkKSB7
CisgICAgICAgIGluZm9bY2FjaGVJZF0gPSBjYWNoZS5pbmZvKCk7CisgICAgICB9KTsKKyAgICAg
IHJldHVybiBpbmZvOworICAgIH07CisKKworICAvKioKKyAgICogQG5nZG9jIG1ldGhvZAorICAg
KiBAbmFtZSAkY2FjaGVGYWN0b3J5I2dldAorICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAgICog
R2V0IGFjY2VzcyB0byBhIGNhY2hlIG9iamVjdCBieSB0aGUgYGNhY2hlSWRgIHVzZWQgd2hlbiBp
dCB3YXMgY3JlYXRlZC4KKyAgICoKKyAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlSWQgTmFtZSBv
ciBpZCBvZiBhIGNhY2hlIHRvIGFjY2Vzcy4KKyAgICogQHJldHVybnMge29iamVjdH0gQ2FjaGUg
b2JqZWN0IGlkZW50aWZpZWQgYnkgdGhlIGNhY2hlSWQgb3IgdW5kZWZpbmVkIGlmIG5vIHN1Y2gg
Y2FjaGUuCisgICAqLworICAgIGNhY2hlRmFjdG9yeS5nZXQgPSBmdW5jdGlvbihjYWNoZUlkKSB7
CisgICAgICByZXR1cm4gY2FjaGVzW2NhY2hlSWRdOworICAgIH07CisKKworICAgIHJldHVybiBj
YWNoZUZhY3Rvcnk7CisgIH07Cit9CisKKy8qKgorICogQG5nZG9jIHNlcnZpY2UKKyAqIEBuYW1l
ICR0ZW1wbGF0ZUNhY2hlCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBUaGUgZmlyc3QgdGltZSBh
IHRlbXBsYXRlIGlzIHVzZWQsIGl0IGlzIGxvYWRlZCBpbiB0aGUgdGVtcGxhdGUgY2FjaGUgZm9y
IHF1aWNrIHJldHJpZXZhbC4gWW91CisgKiBjYW4gbG9hZCB0ZW1wbGF0ZXMgZGlyZWN0bHkgaW50
byB0aGUgY2FjaGUgaW4gYSBgc2NyaXB0YCB0YWcsIG9yIGJ5IGNvbnN1bWluZyB0aGUKKyAqIGAk
dGVtcGxhdGVDYWNoZWAgc2VydmljZSBkaXJlY3RseS4KKyAqCisgKiBBZGRpbmcgdmlhIHRoZSBg
c2NyaXB0YCB0YWc6CisgKgorICogYGBgaHRtbAorICogICA8c2NyaXB0IHR5cGU9InRleHQvbmct
dGVtcGxhdGUiIGlkPSJ0ZW1wbGF0ZUlkLmh0bWwiPgorICogICAgIDxwPlRoaXMgaXMgdGhlIGNv
bnRlbnQgb2YgdGhlIHRlbXBsYXRlPC9wPgorICogICA8L3NjcmlwdD4KKyAqIGBgYAorICoKKyAq
ICoqTm90ZToqKiB0aGUgYHNjcmlwdGAgdGFnIGNvbnRhaW5pbmcgdGhlIHRlbXBsYXRlIGRvZXMg
bm90IG5lZWQgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGBoZWFkYCBvZgorICogdGhlIGRvY3VtZW50
LCBidXQgaXQgbXVzdCBiZSBhIGRlc2NlbmRlbnQgb2YgdGhlIHtAbGluayBuZy4kcm9vdEVsZW1l
bnQgJHJvb3RFbGVtZW50fSAoSUUsCisgKiBlbGVtZW50IHdpdGggbmctYXBwIGF0dHJpYnV0ZSks
IG90aGVyd2lzZSB0aGUgdGVtcGxhdGUgd2lsbCBiZSBpZ25vcmVkLgorICoKKyAqIEFkZGluZyB2
aWEgdGhlIGAkdGVtcGxhdGVDYWNoZWAgc2VydmljZToKKyAqCisgKiBgYGBqcworICogdmFyIG15
QXBwID0gYW5ndWxhci5tb2R1bGUoJ215QXBwJywgW10pOworICogbXlBcHAucnVuKGZ1bmN0aW9u
KCR0ZW1wbGF0ZUNhY2hlKSB7CisgKiAgICR0ZW1wbGF0ZUNhY2hlLnB1dCgndGVtcGxhdGVJZC5o
dG1sJywgJ1RoaXMgaXMgdGhlIGNvbnRlbnQgb2YgdGhlIHRlbXBsYXRlJyk7CisgKiB9KTsKKyAq
IGBgYAorICoKKyAqIFRvIHJldHJpZXZlIHRoZSB0ZW1wbGF0ZSBsYXRlciwgc2ltcGx5IHVzZSBp
dCBpbiB5b3VyIEhUTUw6CisgKiBgYGBodG1sCisgKiA8ZGl2IG5nLWluY2x1ZGU9IiAndGVtcGxh
dGVJZC5odG1sJyAiPjwvZGl2PgorICogYGBgCisgKgorICogb3IgZ2V0IGl0IHZpYSBKYXZhc2Ny
aXB0OgorICogYGBganMKKyAqICR0ZW1wbGF0ZUNhY2hlLmdldCgndGVtcGxhdGVJZC5odG1sJykK
KyAqIGBgYAorICoKKyAqIFNlZSB7QGxpbmsgbmcuJGNhY2hlRmFjdG9yeSAkY2FjaGVGYWN0b3J5
fS4KKyAqCisgKi8KK2Z1bmN0aW9uICRUZW1wbGF0ZUNhY2hlUHJvdmlkZXIoKSB7CisgIHRoaXMu
JGdldCA9IFsnJGNhY2hlRmFjdG9yeScsIGZ1bmN0aW9uKCRjYWNoZUZhY3RvcnkpIHsKKyAgICBy
ZXR1cm4gJGNhY2hlRmFjdG9yeSgndGVtcGxhdGVzJyk7CisgIH1dOworfQorCisvKiAqICogKiAq
ICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICog
KiAqICogKiAqCisgKiAgICAgQW55IGNvbW1pdHMgdG8gdGhpcyBmaWxlIHNob3VsZCBiZSByZXZp
ZXdlZCB3aXRoIHNlY3VyaXR5IGluIG1pbmQuICAqCisgKiAgIENoYW5nZXMgdG8gdGhpcyBmaWxl
IGNhbiBwb3RlbnRpYWxseSBjcmVhdGUgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiAqCisgKiAg
ICAgICAgICBBbiBhcHByb3ZhbCBmcm9tIDIgQ29yZSBtZW1iZXJzIHdpdGggaGlzdG9yeSBvZiBt
b2RpZnlpbmcgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGZpbGUgaXMg
cmVxdWlyZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
CisgKiAgRG9lcyB0aGUgY2hhbmdlIHNvbWVob3cgYWxsb3cgZm9yIGFyYml0cmFyeSBqYXZhc2Ny
aXB0IHRvIGJlIGV4ZWN1dGVkPyAqCisgKiAgICBPciBhbGxvd3MgZm9yIHNvbWVvbmUgdG8gY2hh
bmdlIHRoZSBwcm90b3R5cGUgb2YgYnVpbHQtaW4gb2JqZWN0cz8gICAqCisgKiAgICAgT3IgZ2l2
ZXMgdW5kZXNpcmVkIGFjY2VzcyB0byB2YXJpYWJsZXMgbGlrZXMgZG9jdW1lbnQgb3Igd2luZG93
PyAgICAqCisgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICog
KiAqICogKiAqICogKiAqICogKiAqICogKiAqLworCisvKiAhIFZBUklBQkxFL0ZVTkNUSU9OIE5B
TUlORyBDT05WRU5USU9OUyBUSEFUIEFQUExZIFRPIFRISVMgRklMRSEKKyAqCisgKiBET00tcmVs
YXRlZCB2YXJpYWJsZXM6CisgKgorICogLSAibm9kZSIgLSBET00gTm9kZQorICogLSAiZWxlbWVu
dCIgLSBET00gRWxlbWVudCBvciBOb2RlCisgKiAtICIkbm9kZSIgb3IgIiRlbGVtZW50IiAtIGpx
TGl0ZS13cmFwcGVkIG5vZGUgb3IgZWxlbWVudAorICoKKyAqCisgKiBDb21waWxlciByZWxhdGVk
IHN0dWZmOgorICoKKyAqIC0gImxpbmtGbiIgLSBsaW5raW5nIGZuIG9mIGEgc2luZ2xlIGRpcmVj
dGl2ZQorICogLSAibm9kZUxpbmtGbiIgLSBmdW5jdGlvbiB0aGF0IGFnZ3JlZ2F0ZXMgYWxsIGxp
bmtpbmcgZm5zIGZvciBhIHBhcnRpY3VsYXIgbm9kZQorICogLSAiY2hpbGRMaW5rRm4iIC0gIGZ1
bmN0aW9uIHRoYXQgYWdncmVnYXRlcyBhbGwgbGlua2luZyBmbnMgZm9yIGNoaWxkIG5vZGVzIG9m
IGEgcGFydGljdWxhciBub2RlCisgKiAtICJjb21wb3NpdGVMaW5rRm4iIC0gZnVuY3Rpb24gdGhh
dCBhZ2dyZWdhdGVzIGFsbCBsaW5raW5nIGZucyBmb3IgYSBjb21waWxhdGlvbiByb290IChub2Rl
TGlzdCkKKyAqLworCisKKy8qKgorICogQG5nZG9jIHNlcnZpY2UKKyAqIEBuYW1lICRjb21waWxl
CisgKiBAa2luZCBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlvbgorICogQ29tcGlsZXMgYW4g
SFRNTCBzdHJpbmcgb3IgRE9NIGludG8gYSB0ZW1wbGF0ZSBhbmQgcHJvZHVjZXMgYSB0ZW1wbGF0
ZSBmdW5jdGlvbiwgd2hpY2gKKyAqIGNhbiB0aGVuIGJlIHVzZWQgdG8gbGluayB7QGxpbmsgbmcu
JHJvb3RTY29wZS5TY29wZSBgc2NvcGVgfSBhbmQgdGhlIHRlbXBsYXRlIHRvZ2V0aGVyLgorICoK
KyAqIFRoZSBjb21waWxhdGlvbiBpcyBhIHByb2Nlc3Mgb2Ygd2Fsa2luZyB0aGUgRE9NIHRyZWUg
YW5kIG1hdGNoaW5nIERPTSBlbGVtZW50cyB0bworICoge0BsaW5rIG5nLiRjb21waWxlUHJvdmlk
ZXIjZGlyZWN0aXZlIGRpcmVjdGl2ZXN9LgorICoKKyAqIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0
LXdhcm5pbmciPgorICogKipOb3RlOioqIFRoaXMgZG9jdW1lbnQgaXMgYW4gaW4tZGVwdGggcmVm
ZXJlbmNlIG9mIGFsbCBkaXJlY3RpdmUgb3B0aW9ucy4KKyAqIEZvciBhIGdlbnRsZSBpbnRyb2R1
Y3Rpb24gdG8gZGlyZWN0aXZlcyB3aXRoIGV4YW1wbGVzIG9mIGNvbW1vbiB1c2UgY2FzZXMsCisg
KiBzZWUgdGhlIHtAbGluayBndWlkZS9kaXJlY3RpdmUgZGlyZWN0aXZlIGd1aWRlfS4KKyAqIDwv
ZGl2PgorICoKKyAqICMjIENvbXByZWhlbnNpdmUgRGlyZWN0aXZlIEFQSQorICoKKyAqIFRoZXJl
IGFyZSBtYW55IGRpZmZlcmVudCBvcHRpb25zIGZvciBhIGRpcmVjdGl2ZS4KKyAqCisgKiBUaGUg
ZGlmZmVyZW5jZSByZXNpZGVzIGluIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZhY3RvcnkgZnVu
Y3Rpb24uCisgKiBZb3UgY2FuIGVpdGhlciByZXR1cm4gYSAiRGlyZWN0aXZlIERlZmluaXRpb24g
T2JqZWN0IiAoc2VlIGJlbG93KSB0aGF0IGRlZmluZXMgdGhlIGRpcmVjdGl2ZSBwcm9wZXJ0aWVz
LAorICogb3IganVzdCB0aGUgYHBvc3RMaW5rYCBmdW5jdGlvbiAoYWxsIG90aGVyIHByb3BlcnRp
ZXMgd2lsbCBoYXZlIHRoZSBkZWZhdWx0IHZhbHVlcykuCisgKgorICogPGRpdiBjbGFzcz0iYWxl
cnQgYWxlcnQtc3VjY2VzcyI+CisgKiAqKkJlc3QgUHJhY3RpY2U6KiogSXQncyByZWNvbW1lbmRl
ZCB0byB1c2UgdGhlICJkaXJlY3RpdmUgZGVmaW5pdGlvbiBvYmplY3QiIGZvcm0uCisgKiA8L2Rp
dj4KKyAqCisgKiBIZXJlJ3MgYW4gZXhhbXBsZSBkaXJlY3RpdmUgZGVjbGFyZWQgd2l0aCBhIERp
cmVjdGl2ZSBEZWZpbml0aW9uIE9iamVjdDoKKyAqCisgKiBgYGBqcworICogICB2YXIgbXlNb2R1
bGUgPSBhbmd1bGFyLm1vZHVsZSguLi4pOworICoKKyAqICAgbXlNb2R1bGUuZGlyZWN0aXZlKCdk
aXJlY3RpdmVOYW1lJywgZnVuY3Rpb24gZmFjdG9yeShpbmplY3RhYmxlcykgeworICogICAgIHZh
ciBkaXJlY3RpdmVEZWZpbml0aW9uT2JqZWN0ID0geworICogICAgICAgcHJpb3JpdHk6IDAsCisg
KiAgICAgICB0ZW1wbGF0ZTogJzxkaXY+PC9kaXY+JywgLy8gb3IgLy8gZnVuY3Rpb24odEVsZW1l
bnQsIHRBdHRycykgeyAuLi4gfSwKKyAqICAgICAgIC8vIG9yCisgKiAgICAgICAvLyB0ZW1wbGF0
ZVVybDogJ2RpcmVjdGl2ZS5odG1sJywgLy8gb3IgLy8gZnVuY3Rpb24odEVsZW1lbnQsIHRBdHRy
cykgeyAuLi4gfSwKKyAqICAgICAgIHRyYW5zY2x1ZGU6IGZhbHNlLAorICogICAgICAgcmVzdHJp
Y3Q6ICdBJywKKyAqICAgICAgIHRlbXBsYXRlTmFtZXNwYWNlOiAnaHRtbCcsCisgKiAgICAgICBz
Y29wZTogZmFsc2UsCisgKiAgICAgICBjb250cm9sbGVyOiBmdW5jdGlvbigkc2NvcGUsICRlbGVt
ZW50LCAkYXR0cnMsICR0cmFuc2NsdWRlLCBvdGhlckluamVjdGFibGVzKSB7IC4uLiB9LAorICog
ICAgICAgY29udHJvbGxlckFzOiAnc3RyaW5nSWRlbnRpZmllcicsCisgKiAgICAgICBiaW5kVG9D
b250cm9sbGVyOiBmYWxzZSwKKyAqICAgICAgIHJlcXVpcmU6ICdzaWJsaW5nRGlyZWN0aXZlTmFt
ZScsIC8vIG9yIC8vIFsnXnBhcmVudERpcmVjdGl2ZU5hbWUnLCAnP29wdGlvbmFsRGlyZWN0aXZl
TmFtZScsICc/Xm9wdGlvbmFsUGFyZW50J10sCisgKiAgICAgICBjb21waWxlOiBmdW5jdGlvbiBj
b21waWxlKHRFbGVtZW50LCB0QXR0cnMsIHRyYW5zY2x1ZGUpIHsKKyAqICAgICAgICAgcmV0dXJu
IHsKKyAqICAgICAgICAgICBwcmU6IGZ1bmN0aW9uIHByZUxpbmsoc2NvcGUsIGlFbGVtZW50LCBp
QXR0cnMsIGNvbnRyb2xsZXIpIHsgLi4uIH0sCisgKiAgICAgICAgICAgcG9zdDogZnVuY3Rpb24g
cG9zdExpbmsoc2NvcGUsIGlFbGVtZW50LCBpQXR0cnMsIGNvbnRyb2xsZXIpIHsgLi4uIH0KKyAq
ICAgICAgICAgfQorICogICAgICAgICAvLyBvcgorICogICAgICAgICAvLyByZXR1cm4gZnVuY3Rp
b24gcG9zdExpbmsoIC4uLiApIHsgLi4uIH0KKyAqICAgICAgIH0sCisgKiAgICAgICAvLyBvcgor
ICogICAgICAgLy8gbGluazogeworICogICAgICAgLy8gIHByZTogZnVuY3Rpb24gcHJlTGluayhz
Y29wZSwgaUVsZW1lbnQsIGlBdHRycywgY29udHJvbGxlcikgeyAuLi4gfSwKKyAqICAgICAgIC8v
ICBwb3N0OiBmdW5jdGlvbiBwb3N0TGluayhzY29wZSwgaUVsZW1lbnQsIGlBdHRycywgY29udHJv
bGxlcikgeyAuLi4gfQorICogICAgICAgLy8gfQorICogICAgICAgLy8gb3IKKyAqICAgICAgIC8v
IGxpbms6IGZ1bmN0aW9uIHBvc3RMaW5rKCAuLi4gKSB7IC4uLiB9CisgKiAgICAgfTsKKyAqICAg
ICByZXR1cm4gZGlyZWN0aXZlRGVmaW5pdGlvbk9iamVjdDsKKyAqICAgfSk7CisgKiBgYGAKKyAq
CisgKiA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC13YXJuaW5nIj4KKyAqICoqTm90ZToqKiBBbnkg
dW5zcGVjaWZpZWQgb3B0aW9ucyB3aWxsIHVzZSB0aGUgZGVmYXVsdCB2YWx1ZS4gWW91IGNhbiBz
ZWUgdGhlIGRlZmF1bHQgdmFsdWVzIGJlbG93LgorICogPC9kaXY+CisgKgorICogVGhlcmVmb3Jl
IHRoZSBhYm92ZSBjYW4gYmUgc2ltcGxpZmllZCBhczoKKyAqCisgKiBgYGBqcworICogICB2YXIg
bXlNb2R1bGUgPSBhbmd1bGFyLm1vZHVsZSguLi4pOworICoKKyAqICAgbXlNb2R1bGUuZGlyZWN0
aXZlKCdkaXJlY3RpdmVOYW1lJywgZnVuY3Rpb24gZmFjdG9yeShpbmplY3RhYmxlcykgeworICog
ICAgIHZhciBkaXJlY3RpdmVEZWZpbml0aW9uT2JqZWN0ID0geworICogICAgICAgbGluazogZnVu
Y3Rpb24gcG9zdExpbmsoc2NvcGUsIGlFbGVtZW50LCBpQXR0cnMpIHsgLi4uIH0KKyAqICAgICB9
OworICogICAgIHJldHVybiBkaXJlY3RpdmVEZWZpbml0aW9uT2JqZWN0OworICogICAgIC8vIG9y
CisgKiAgICAgLy8gcmV0dXJuIGZ1bmN0aW9uIHBvc3RMaW5rKHNjb3BlLCBpRWxlbWVudCwgaUF0
dHJzKSB7IC4uLiB9CisgKiAgIH0pOworICogYGBgCisgKgorICoKKyAqCisgKiAjIyMgRGlyZWN0
aXZlIERlZmluaXRpb24gT2JqZWN0CisgKgorICogVGhlIGRpcmVjdGl2ZSBkZWZpbml0aW9uIG9i
amVjdCBwcm92aWRlcyBpbnN0cnVjdGlvbnMgdG8gdGhlIHtAbGluayBuZy4kY29tcGlsZQorICog
Y29tcGlsZXJ9LiBUaGUgYXR0cmlidXRlcyBhcmU6CisgKgorICogIyMjIyBgbXVsdGlFbGVtZW50
YAorICogV2hlbiB0aGlzIHByb3BlcnR5IGlzIHNldCB0byB0cnVlLCB0aGUgSFRNTCBjb21waWxl
ciB3aWxsIGNvbGxlY3QgRE9NIG5vZGVzIGJldHdlZW4KKyAqIG5vZGVzIHdpdGggdGhlIGF0dHJp
YnV0ZXMgYGRpcmVjdGl2ZS1uYW1lLXN0YXJ0YCBhbmQgYGRpcmVjdGl2ZS1uYW1lLWVuZGAsIGFu
ZCBncm91cCB0aGVtCisgKiB0b2dldGhlciBhcyB0aGUgZGlyZWN0aXZlIGVsZW1lbnRzLiBJdCBp
cyByZWNvbW1lbmRlZCB0aGF0IHRoaXMgZmVhdHVyZSBiZSB1c2VkIG9uIGRpcmVjdGl2ZXMKKyAq
IHdoaWNoIGFyZSBub3Qgc3RyaWN0bHkgYmVoYXZpb3VyYWwgKHN1Y2ggYXMge0BsaW5rIG5nQ2xp
Y2t9KSwgYW5kIHdoaWNoCisgKiBkbyBub3QgbWFuaXB1bGF0ZSBvciByZXBsYWNlIGNoaWxkIG5v
ZGVzIChzdWNoIGFzIHtAbGluayBuZ0luY2x1ZGV9KS4KKyAqCisgKiAjIyMjIGBwcmlvcml0eWAK
KyAqIFdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGRpcmVjdGl2ZXMgZGVmaW5lZCBvbiBhIHNpbmds
ZSBET00gZWxlbWVudCwgc29tZXRpbWVzIGl0CisgKiBpcyBuZWNlc3NhcnkgdG8gc3BlY2lmeSB0
aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGRpcmVjdGl2ZXMgYXJlIGFwcGxpZWQuIFRoZSBgcHJpb3Jp
dHlgIGlzIHVzZWQKKyAqIHRvIHNvcnQgdGhlIGRpcmVjdGl2ZXMgYmVmb3JlIHRoZWlyIGBjb21w
aWxlYCBmdW5jdGlvbnMgZ2V0IGNhbGxlZC4gUHJpb3JpdHkgaXMgZGVmaW5lZCBhcyBhCisgKiBu
dW1iZXIuIERpcmVjdGl2ZXMgd2l0aCBncmVhdGVyIG51bWVyaWNhbCBgcHJpb3JpdHlgIGFyZSBj
b21waWxlZCBmaXJzdC4gUHJlLWxpbmsgZnVuY3Rpb25zCisgKiBhcmUgYWxzbyBydW4gaW4gcHJp
b3JpdHkgb3JkZXIsIGJ1dCBwb3N0LWxpbmsgZnVuY3Rpb25zIGFyZSBydW4gaW4gcmV2ZXJzZSBv
cmRlci4gVGhlIG9yZGVyCisgKiBvZiBkaXJlY3RpdmVzIHdpdGggdGhlIHNhbWUgcHJpb3JpdHkg
aXMgdW5kZWZpbmVkLiBUaGUgZGVmYXVsdCBwcmlvcml0eSBpcyBgMGAuCisgKgorICogIyMjIyBg
dGVybWluYWxgCisgKiBJZiBzZXQgdG8gdHJ1ZSB0aGVuIHRoZSBjdXJyZW50IGBwcmlvcml0eWAg
d2lsbCBiZSB0aGUgbGFzdCBzZXQgb2YgZGlyZWN0aXZlcworICogd2hpY2ggd2lsbCBleGVjdXRl
IChhbnkgZGlyZWN0aXZlcyBhdCB0aGUgY3VycmVudCBwcmlvcml0eSB3aWxsIHN0aWxsIGV4ZWN1
dGUKKyAqIGFzIHRoZSBvcmRlciBvZiBleGVjdXRpb24gb24gc2FtZSBgcHJpb3JpdHlgIGlzIHVu
ZGVmaW5lZCkuIE5vdGUgdGhhdCBleHByZXNzaW9ucworICogYW5kIG90aGVyIGRpcmVjdGl2ZXMg
dXNlZCBpbiB0aGUgZGlyZWN0aXZlJ3MgdGVtcGxhdGUgd2lsbCBhbHNvIGJlIGV4Y2x1ZGVkIGZy
b20gZXhlY3V0aW9uLgorICoKKyAqICMjIyMgYHNjb3BlYAorICogKipJZiBzZXQgdG8gYHRydWVg
LCoqIHRoZW4gYSBuZXcgc2NvcGUgd2lsbCBiZSBjcmVhdGVkIGZvciB0aGlzIGRpcmVjdGl2ZS4g
SWYgbXVsdGlwbGUgZGlyZWN0aXZlcyBvbiB0aGUKKyAqIHNhbWUgZWxlbWVudCByZXF1ZXN0IGEg
bmV3IHNjb3BlLCBvbmx5IG9uZSBuZXcgc2NvcGUgaXMgY3JlYXRlZC4gVGhlIG5ldyBzY29wZSBy
dWxlIGRvZXMgbm90CisgKiBhcHBseSBmb3IgdGhlIHJvb3Qgb2YgdGhlIHRlbXBsYXRlIHNpbmNl
IHRoZSByb290IG9mIHRoZSB0ZW1wbGF0ZSBhbHdheXMgZ2V0cyBhIG5ldyBzY29wZS4KKyAqCisg
KiAqKklmIHNldCB0byBge31gIChvYmplY3QgaGFzaCksKiogdGhlbiBhIG5ldyAiaXNvbGF0ZSIg
c2NvcGUgaXMgY3JlYXRlZC4gVGhlICdpc29sYXRlJyBzY29wZSBkaWZmZXJzIGZyb20KKyAqIG5v
cm1hbCBzY29wZSBpbiB0aGF0IGl0IGRvZXMgbm90IHByb3RvdHlwaWNhbGx5IGluaGVyaXQgZnJv
bSB0aGUgcGFyZW50IHNjb3BlLiBUaGlzIGlzIHVzZWZ1bAorICogd2hlbiBjcmVhdGluZyByZXVz
YWJsZSBjb21wb25lbnRzLCB3aGljaCBzaG91bGQgbm90IGFjY2lkZW50YWxseSByZWFkIG9yIG1v
ZGlmeSBkYXRhIGluIHRoZQorICogcGFyZW50IHNjb3BlLgorICoKKyAqIFRoZSAnaXNvbGF0ZScg
c2NvcGUgdGFrZXMgYW4gb2JqZWN0IGhhc2ggd2hpY2ggZGVmaW5lcyBhIHNldCBvZiBsb2NhbCBz
Y29wZSBwcm9wZXJ0aWVzCisgKiBkZXJpdmVkIGZyb20gdGhlIHBhcmVudCBzY29wZS4gVGhlc2Ug
bG9jYWwgcHJvcGVydGllcyBhcmUgdXNlZnVsIGZvciBhbGlhc2luZyB2YWx1ZXMgZm9yCisgKiB0
ZW1wbGF0ZXMuIExvY2FscyBkZWZpbml0aW9uIGlzIGEgaGFzaCBvZiBsb2NhbCBzY29wZSBwcm9w
ZXJ0eSB0byBpdHMgc291cmNlOgorICoKKyAqICogYEBgIG9yIGBAYXR0cmAgLSBiaW5kIGEgbG9j
YWwgc2NvcGUgcHJvcGVydHkgdG8gdGhlIHZhbHVlIG9mIERPTSBhdHRyaWJ1dGUuIFRoZSByZXN1
bHQgaXMKKyAqICAgYWx3YXlzIGEgc3RyaW5nIHNpbmNlIERPTSBhdHRyaWJ1dGVzIGFyZSBzdHJp
bmdzLiBJZiBubyBgYXR0cmAgbmFtZSBpcyBzcGVjaWZpZWQgIHRoZW4gdGhlCisgKiAgIGF0dHJp
YnV0ZSBuYW1lIGlzIGFzc3VtZWQgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIGxvY2FsIG5hbWUuCisg
KiAgIEdpdmVuIGA8d2lkZ2V0IG15LWF0dHI9ImhlbGxvIHt7bmFtZX19Ij5gIGFuZCB3aWRnZXQg
ZGVmaW5pdGlvbgorICogICBvZiBgc2NvcGU6IHsgbG9jYWxOYW1lOidAbXlBdHRyJyB9YCwgdGhl
biB3aWRnZXQgc2NvcGUgcHJvcGVydHkgYGxvY2FsTmFtZWAgd2lsbCByZWZsZWN0CisgKiAgIHRo
ZSBpbnRlcnBvbGF0ZWQgdmFsdWUgb2YgYGhlbGxvIHt7bmFtZX19YC4gQXMgdGhlIGBuYW1lYCBh
dHRyaWJ1dGUgY2hhbmdlcyBzbyB3aWxsIHRoZQorICogICBgbG9jYWxOYW1lYCBwcm9wZXJ0eSBv
biB0aGUgd2lkZ2V0IHNjb3BlLiBUaGUgYG5hbWVgIGlzIHJlYWQgZnJvbSB0aGUgcGFyZW50IHNj
b3BlIChub3QKKyAqICAgY29tcG9uZW50IHNjb3BlKS4KKyAqCisgKiAqIGA9YCBvciBgPWF0dHJg
IC0gc2V0IHVwIGJpLWRpcmVjdGlvbmFsIGJpbmRpbmcgYmV0d2VlbiBhIGxvY2FsIHNjb3BlIHBy
b3BlcnR5IGFuZCB0aGUKKyAqICAgcGFyZW50IHNjb3BlIHByb3BlcnR5IG9mIG5hbWUgZGVmaW5l
ZCB2aWEgdGhlIHZhbHVlIG9mIHRoZSBgYXR0cmAgYXR0cmlidXRlLiBJZiBubyBgYXR0cmAKKyAq
ICAgbmFtZSBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgYXR0cmlidXRlIG5hbWUgaXMgYXNzdW1lZCB0
byBiZSB0aGUgc2FtZSBhcyB0aGUgbG9jYWwgbmFtZS4KKyAqICAgR2l2ZW4gYDx3aWRnZXQgbXkt
YXR0cj0icGFyZW50TW9kZWwiPmAgYW5kIHdpZGdldCBkZWZpbml0aW9uIG9mCisgKiAgIGBzY29w
ZTogeyBsb2NhbE1vZGVsOic9bXlBdHRyJyB9YCwgdGhlbiB3aWRnZXQgc2NvcGUgcHJvcGVydHkg
YGxvY2FsTW9kZWxgIHdpbGwgcmVmbGVjdCB0aGUKKyAqICAgdmFsdWUgb2YgYHBhcmVudE1vZGVs
YCBvbiB0aGUgcGFyZW50IHNjb3BlLiBBbnkgY2hhbmdlcyB0byBgcGFyZW50TW9kZWxgIHdpbGwg
YmUgcmVmbGVjdGVkCisgKiAgIGluIGBsb2NhbE1vZGVsYCBhbmQgYW55IGNoYW5nZXMgaW4gYGxv
Y2FsTW9kZWxgIHdpbGwgcmVmbGVjdCBpbiBgcGFyZW50TW9kZWxgLiBJZiB0aGUgcGFyZW50Cisg
KiAgIHNjb3BlIHByb3BlcnR5IGRvZXNuJ3QgZXhpc3QsIGl0IHdpbGwgdGhyb3cgYSBOT05fQVNT
SUdOQUJMRV9NT0RFTF9FWFBSRVNTSU9OIGV4Y2VwdGlvbi4gWW91CisgKiAgIGNhbiBhdm9pZCB0
aGlzIGJlaGF2aW9yIHVzaW5nIGA9P2Agb3IgYD0/YXR0cmAgaW4gb3JkZXIgdG8gZmxhZyB0aGUg
cHJvcGVydHkgYXMgb3B0aW9uYWwuIElmCisgKiAgIHlvdSB3YW50IHRvIHNoYWxsb3cgd2F0Y2gg
Zm9yIGNoYW5nZXMgKGkuZS4gJHdhdGNoQ29sbGVjdGlvbiBpbnN0ZWFkIG9mICR3YXRjaCkgeW91
IGNhbiB1c2UKKyAqICAgYD0qYCBvciBgPSphdHRyYCAoYD0qP2Agb3IgYD0qP2F0dHJgIGlmIHRo
ZSBwcm9wZXJ0eSBpcyBvcHRpb25hbCkuCisgKgorICogKiBgJmAgb3IgYCZhdHRyYCAtIHByb3Zp
ZGVzIGEgd2F5IHRvIGV4ZWN1dGUgYW4gZXhwcmVzc2lvbiBpbiB0aGUgY29udGV4dCBvZiB0aGUg
cGFyZW50IHNjb3BlLgorICogICBJZiBubyBgYXR0cmAgbmFtZSBpcyBzcGVjaWZpZWQgdGhlbiB0
aGUgYXR0cmlidXRlIG5hbWUgaXMgYXNzdW1lZCB0byBiZSB0aGUgc2FtZSBhcyB0aGUKKyAqICAg
bG9jYWwgbmFtZS4gR2l2ZW4gYDx3aWRnZXQgbXktYXR0cj0iY291bnQgPSBjb3VudCArIHZhbHVl
Ij5gIGFuZCB3aWRnZXQgZGVmaW5pdGlvbiBvZgorICogICBgc2NvcGU6IHsgbG9jYWxGbjonJm15
QXR0cicgfWAsIHRoZW4gaXNvbGF0ZSBzY29wZSBwcm9wZXJ0eSBgbG9jYWxGbmAgd2lsbCBwb2lu
dCB0bworICogICBhIGZ1bmN0aW9uIHdyYXBwZXIgZm9yIHRoZSBgY291bnQgPSBjb3VudCArIHZh
bHVlYCBleHByZXNzaW9uLiBPZnRlbiBpdCdzIGRlc2lyYWJsZSB0bworICogICBwYXNzIGRhdGEg
ZnJvbSB0aGUgaXNvbGF0ZWQgc2NvcGUgdmlhIGFuIGV4cHJlc3Npb24gdG8gdGhlIHBhcmVudCBz
Y29wZSwgdGhpcyBjYW4gYmUKKyAqICAgZG9uZSBieSBwYXNzaW5nIGEgbWFwIG9mIGxvY2FsIHZh
cmlhYmxlIG5hbWVzIGFuZCB2YWx1ZXMgaW50byB0aGUgZXhwcmVzc2lvbiB3cmFwcGVyIGZuLgor
ICogICBGb3IgZXhhbXBsZSwgaWYgdGhlIGV4cHJlc3Npb24gaXMgYGluY3JlbWVudChhbW91bnQp
YCB0aGVuIHdlIGNhbiBzcGVjaWZ5IHRoZSBhbW91bnQgdmFsdWUKKyAqICAgYnkgY2FsbGluZyB0
aGUgYGxvY2FsRm5gIGFzIGBsb2NhbEZuKHthbW91bnQ6IDIyfSlgLgorICoKKyAqCisgKiAjIyMj
IGBiaW5kVG9Db250cm9sbGVyYAorICogV2hlbiBhbiBpc29sYXRlIHNjb3BlIGlzIHVzZWQgZm9y
IGEgY29tcG9uZW50IChzZWUgYWJvdmUpLCBhbmQgYGNvbnRyb2xsZXJBc2AgaXMgdXNlZCwgYGJp
bmRUb0NvbnRyb2xsZXI6IHRydWVgIHdpbGwKKyAqIGFsbG93IGEgY29tcG9uZW50IHRvIGhhdmUg
aXRzIHByb3BlcnRpZXMgYm91bmQgdG8gdGhlIGNvbnRyb2xsZXIsIHJhdGhlciB0aGFuIHRvIHNj
b3BlLiBXaGVuIHRoZSBjb250cm9sbGVyCisgKiBpcyBpbnN0YW50aWF0ZWQsIHRoZSBpbml0aWFs
IHZhbHVlcyBvZiB0aGUgaXNvbGF0ZSBzY29wZSBiaW5kaW5ncyBhcmUgYWxyZWFkeSBhdmFpbGFi
bGUuCisgKgorICogIyMjIyBgY29udHJvbGxlcmAKKyAqIENvbnRyb2xsZXIgY29uc3RydWN0b3Ig
ZnVuY3Rpb24uIFRoZSBjb250cm9sbGVyIGlzIGluc3RhbnRpYXRlZCBiZWZvcmUgdGhlCisgKiBw
cmUtbGlua2luZyBwaGFzZSBhbmQgaXQgaXMgc2hhcmVkIHdpdGggb3RoZXIgZGlyZWN0aXZlcyAo
c2VlCisgKiBgcmVxdWlyZWAgYXR0cmlidXRlKS4gVGhpcyBhbGxvd3MgdGhlIGRpcmVjdGl2ZXMg
dG8gY29tbXVuaWNhdGUgd2l0aCBlYWNoIG90aGVyIGFuZCBhdWdtZW50CisgKiBlYWNoIG90aGVy
J3MgYmVoYXZpb3IuIFRoZSBjb250cm9sbGVyIGlzIGluamVjdGFibGUgKGFuZCBzdXBwb3J0cyBi
cmFja2V0IG5vdGF0aW9uKSB3aXRoIHRoZSBmb2xsb3dpbmcgbG9jYWxzOgorICoKKyAqICogYCRz
Y29wZWAgLSBDdXJyZW50IHNjb3BlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZWxlbWVudAorICogKiBg
JGVsZW1lbnRgIC0gQ3VycmVudCBlbGVtZW50CisgKiAqIGAkYXR0cnNgIC0gQ3VycmVudCBhdHRy
aWJ1dGVzIG9iamVjdCBmb3IgdGhlIGVsZW1lbnQKKyAqICogYCR0cmFuc2NsdWRlYCAtIEEgdHJh
bnNjbHVkZSBsaW5raW5nIGZ1bmN0aW9uIHByZS1ib3VuZCB0byB0aGUgY29ycmVjdCB0cmFuc2Ns
dXNpb24gc2NvcGU6CisgKiAgIGBmdW5jdGlvbihbc2NvcGVdLCBjbG9uZUxpbmtpbmdGbiwgZnV0
dXJlUGFyZW50RWxlbWVudClgLgorICogICAgKiBgc2NvcGVgOiBvcHRpb25hbCBhcmd1bWVudCB0
byBvdmVycmlkZSB0aGUgc2NvcGUuCisgKiAgICAqIGBjbG9uZUxpbmtpbmdGbmA6IG9wdGlvbmFs
IGFyZ3VtZW50IHRvIGNyZWF0ZSBjbG9uZXMgb2YgdGhlIG9yaWdpbmFsIHRyYW5zY2x1ZGVkIGNv
bnRlbnQuCisgKiAgICAqIGBmdXR1cmVQYXJlbnRFbGVtZW50YDoKKyAqICAgICAgICAqIGRlZmlu
ZXMgdGhlIHBhcmVudCB0byB3aGljaCB0aGUgYGNsb25lTGlua2luZ0ZuYCB3aWxsIGFkZCB0aGUg
Y2xvbmVkIGVsZW1lbnRzLgorICogICAgICAgICogZGVmYXVsdDogYCRlbGVtZW50LnBhcmVudCgp
YCByZXNwLiBgJGVsZW1lbnRgIGZvciBgdHJhbnNjbHVkZTonZWxlbWVudCdgIHJlc3AuIGB0cmFu
c2NsdWRlOnRydWVgLgorICogICAgICAgICogb25seSBuZWVkZWQgZm9yIHRyYW5zY2x1ZGVzIHRo
YXQgYXJlIGFsbG93ZWQgdG8gY29udGFpbiBub24gaHRtbCBlbGVtZW50cyAoZS5nLiBTVkcgZWxl
bWVudHMpCisgKiAgICAgICAgICBhbmQgd2hlbiB0aGUgYGNsb25lTGlua2luRm5gIGlzIHBhc3Nl
ZCwKKyAqICAgICAgICAgIGFzIHRob3NlIGVsZW1lbnRzIG5lZWQgdG8gY3JlYXRlZCBhbmQgY2xv
bmVkIGluIGEgc3BlY2lhbCB3YXkgd2hlbiB0aGV5IGFyZSBkZWZpbmVkIG91dHNpZGUgdGhlaXIK
KyAqICAgICAgICAgIHVzdWFsIGNvbnRhaW5lcnMgKGUuZy4gbGlrZSBgPHN2Zz5gKS4KKyAqICAg
ICAgICAqIFNlZSBhbHNvIHRoZSBgZGlyZWN0aXZlLnRlbXBsYXRlTmFtZXNwYWNlYCBwcm9wZXJ0
eS4KKyAqCisgKgorICogIyMjIyBgcmVxdWlyZWAKKyAqIFJlcXVpcmUgYW5vdGhlciBkaXJlY3Rp
dmUgYW5kIGluamVjdCBpdHMgY29udHJvbGxlciBhcyB0aGUgZm91cnRoIGFyZ3VtZW50IHRvIHRo
ZSBsaW5raW5nIGZ1bmN0aW9uLiBUaGUKKyAqIGByZXF1aXJlYCB0YWtlcyBhIHN0cmluZyBuYW1l
IChvciBhcnJheSBvZiBzdHJpbmdzKSBvZiB0aGUgZGlyZWN0aXZlKHMpIHRvIHBhc3MgaW4uIElm
IGFuIGFycmF5IGlzIHVzZWQsIHRoZQorICogaW5qZWN0ZWQgYXJndW1lbnQgd2lsbCBiZSBhbiBh
cnJheSBpbiBjb3JyZXNwb25kaW5nIG9yZGVyLiBJZiBubyBzdWNoIGRpcmVjdGl2ZSBjYW4gYmUK
KyAqIGZvdW5kLCBvciBpZiB0aGUgZGlyZWN0aXZlIGRvZXMgbm90IGhhdmUgYSBjb250cm9sbGVy
LCB0aGVuIGFuIGVycm9yIGlzIHJhaXNlZCAodW5sZXNzIG5vIGxpbmsgZnVuY3Rpb24KKyAqIGlz
IHNwZWNpZmllZCwgaW4gd2hpY2ggY2FzZSBlcnJvciBjaGVja2luZyBpcyBza2lwcGVkKS4gVGhl
IG5hbWUgY2FuIGJlIHByZWZpeGVkIHdpdGg6CisgKgorICogKiAobm8gcHJlZml4KSAtIExvY2F0
ZSB0aGUgcmVxdWlyZWQgY29udHJvbGxlciBvbiB0aGUgY3VycmVudCBlbGVtZW50LiBUaHJvdyBh
biBlcnJvciBpZiBub3QgZm91bmQuCisgKiAqIGA/YCAtIEF0dGVtcHQgdG8gbG9jYXRlIHRoZSBy
ZXF1aXJlZCBjb250cm9sbGVyIG9yIHBhc3MgYG51bGxgIHRvIHRoZSBgbGlua2AgZm4gaWYgbm90
IGZvdW5kLgorICogKiBgXmAgLSBMb2NhdGUgdGhlIHJlcXVpcmVkIGNvbnRyb2xsZXIgYnkgc2Vh
cmNoaW5nIHRoZSBlbGVtZW50IGFuZCBpdHMgcGFyZW50cy4gVGhyb3cgYW4gZXJyb3IgaWYgbm90
IGZvdW5kLgorICogKiBgXl5gIC0gTG9jYXRlIHRoZSByZXF1aXJlZCBjb250cm9sbGVyIGJ5IHNl
YXJjaGluZyB0aGUgZWxlbWVudCdzIHBhcmVudHMuIFRocm93IGFuIGVycm9yIGlmIG5vdCBmb3Vu
ZC4KKyAqICogYD9eYCAtIEF0dGVtcHQgdG8gbG9jYXRlIHRoZSByZXF1aXJlZCBjb250cm9sbGVy
IGJ5IHNlYXJjaGluZyB0aGUgZWxlbWVudCBhbmQgaXRzIHBhcmVudHMgb3IgcGFzcworICogICBg
bnVsbGAgdG8gdGhlIGBsaW5rYCBmbiBpZiBub3QgZm91bmQuCisgKiAqIGA/Xl5gIC0gQXR0ZW1w
dCB0byBsb2NhdGUgdGhlIHJlcXVpcmVkIGNvbnRyb2xsZXIgYnkgc2VhcmNoaW5nIHRoZSBlbGVt
ZW50J3MgcGFyZW50cywgb3IgcGFzcworICogICBgbnVsbGAgdG8gdGhlIGBsaW5rYCBmbiBpZiBu
b3QgZm91bmQuCisgKgorICoKKyAqICMjIyMgYGNvbnRyb2xsZXJBc2AKKyAqIElkZW50aWZpZXIg
bmFtZSBmb3IgYSByZWZlcmVuY2UgdG8gdGhlIGNvbnRyb2xsZXIgaW4gdGhlIGRpcmVjdGl2ZSdz
IHNjb3BlLgorICogVGhpcyBhbGxvd3MgdGhlIGNvbnRyb2xsZXIgdG8gYmUgcmVmZXJlbmNlZCBm
cm9tIHRoZSBkaXJlY3RpdmUgdGVtcGxhdGUuIFRoZSBkaXJlY3RpdmUKKyAqIG5lZWRzIHRvIGRl
ZmluZSBhIHNjb3BlIGZvciB0aGlzIGNvbmZpZ3VyYXRpb24gdG8gYmUgdXNlZC4gVXNlZnVsIGlu
IHRoZSBjYXNlIHdoZW4KKyAqIGRpcmVjdGl2ZSBpcyB1c2VkIGFzIGNvbXBvbmVudC4KKyAqCisg
KgorICogIyMjIyBgcmVzdHJpY3RgCisgKiBTdHJpbmcgb2Ygc3Vic2V0IG9mIGBFQUNNYCB3aGlj
aCByZXN0cmljdHMgdGhlIGRpcmVjdGl2ZSB0byBhIHNwZWNpZmljIGRpcmVjdGl2ZQorICogZGVj
bGFyYXRpb24gc3R5bGUuIElmIG9taXR0ZWQsIHRoZSBkZWZhdWx0cyAoZWxlbWVudHMgYW5kIGF0
dHJpYnV0ZXMpIGFyZSB1c2VkLgorICoKKyAqICogYEVgIC0gRWxlbWVudCBuYW1lIChkZWZhdWx0
KTogYDxteS1kaXJlY3RpdmU+PC9teS1kaXJlY3RpdmU+YAorICogKiBgQWAgLSBBdHRyaWJ1dGUg
KGRlZmF1bHQpOiBgPGRpdiBteS1kaXJlY3RpdmU9ImV4cCI+PC9kaXY+YAorICogKiBgQ2AgLSBD
bGFzczogYDxkaXYgY2xhc3M9Im15LWRpcmVjdGl2ZTogZXhwOyI+PC9kaXY+YAorICogKiBgTWAg
LSBDb21tZW50OiBgPCEtLSBkaXJlY3RpdmU6IG15LWRpcmVjdGl2ZSBleHAgLS0+YAorICoKKyAq
CisgKiAjIyMjIGB0ZW1wbGF0ZU5hbWVzcGFjZWAKKyAqIFN0cmluZyByZXByZXNlbnRpbmcgdGhl
IGRvY3VtZW50IHR5cGUgdXNlZCBieSB0aGUgbWFya3VwIGluIHRoZSB0ZW1wbGF0ZS4KKyAqIEFu
Z3VsYXJKUyBuZWVkcyB0aGlzIGluZm9ybWF0aW9uIGFzIHRob3NlIGVsZW1lbnRzIG5lZWQgdG8g
YmUgY3JlYXRlZCBhbmQgY2xvbmVkCisgKiBpbiBhIHNwZWNpYWwgd2F5IHdoZW4gdGhleSBhcmUg
ZGVmaW5lZCBvdXRzaWRlIHRoZWlyIHVzdWFsIGNvbnRhaW5lcnMgbGlrZSBgPHN2Zz5gIGFuZCBg
PG1hdGg+YC4KKyAqCisgKiAqIGBodG1sYCAtIEFsbCByb290IG5vZGVzIGluIHRoZSB0ZW1wbGF0
ZSBhcmUgSFRNTC4gUm9vdCBub2RlcyBtYXkgYWxzbyBiZQorICogICB0b3AtbGV2ZWwgZWxlbWVu
dHMgc3VjaCBhcyBgPHN2Zz5gIG9yIGA8bWF0aD5gLgorICogKiBgc3ZnYCAtIFRoZSByb290IG5v
ZGVzIGluIHRoZSB0ZW1wbGF0ZSBhcmUgU1ZHIGVsZW1lbnRzIChleGNsdWRpbmcgYDxtYXRoPmAp
LgorICogKiBgbWF0aGAgLSBUaGUgcm9vdCBub2RlcyBpbiB0aGUgdGVtcGxhdGUgYXJlIE1hdGhN
TCBlbGVtZW50cyAoZXhjbHVkaW5nIGA8c3ZnPmApLgorICoKKyAqIElmIG5vIGB0ZW1wbGF0ZU5h
bWVzcGFjZWAgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBuYW1lc3BhY2UgaXMgY29uc2lkZXJlZCB0
byBiZSBgaHRtbGAuCisgKgorICogIyMjIyBgdGVtcGxhdGVgCisgKiBIVE1MIG1hcmt1cCB0aGF0
IG1heToKKyAqICogUmVwbGFjZSB0aGUgY29udGVudHMgb2YgdGhlIGRpcmVjdGl2ZSdzIGVsZW1l
bnQgKGRlZmF1bHQpLgorICogKiBSZXBsYWNlIHRoZSBkaXJlY3RpdmUncyBlbGVtZW50IGl0c2Vs
ZiAoaWYgYHJlcGxhY2VgIGlzIHRydWUgLSBERVBSRUNBVEVEKS4KKyAqICogV3JhcCB0aGUgY29u
dGVudHMgb2YgdGhlIGRpcmVjdGl2ZSdzIGVsZW1lbnQgKGlmIGB0cmFuc2NsdWRlYCBpcyB0cnVl
KS4KKyAqCisgKiBWYWx1ZSBtYXkgYmU6CisgKgorICogKiBBIHN0cmluZy4gRm9yIGV4YW1wbGUg
YDxkaXYgcmVkLW9uLWhvdmVyPnt7ZGVsZXRlX3N0cn19PC9kaXY+YC4KKyAqICogQSBmdW5jdGlv
biB3aGljaCB0YWtlcyB0d28gYXJndW1lbnRzIGB0RWxlbWVudGAgYW5kIGB0QXR0cnNgIChkZXNj
cmliZWQgaW4gdGhlIGBjb21waWxlYAorICogICBmdW5jdGlvbiBhcGkgYmVsb3cpIGFuZCByZXR1
cm5zIGEgc3RyaW5nIHZhbHVlLgorICoKKyAqCisgKiAjIyMjIGB0ZW1wbGF0ZVVybGAKKyAqIFRo
aXMgaXMgc2ltaWxhciB0byBgdGVtcGxhdGVgIGJ1dCB0aGUgdGVtcGxhdGUgaXMgbG9hZGVkIGZy
b20gdGhlIHNwZWNpZmllZCBVUkwsIGFzeW5jaHJvbm91c2x5LgorICoKKyAqIEJlY2F1c2UgdGVt
cGxhdGUgbG9hZGluZyBpcyBhc3luY2hyb25vdXMgdGhlIGNvbXBpbGVyIHdpbGwgc3VzcGVuZCBj
b21waWxhdGlvbiBvZiBkaXJlY3RpdmVzIG9uIHRoYXQgZWxlbWVudAorICogZm9yIGxhdGVyIHdo
ZW4gdGhlIHRlbXBsYXRlIGhhcyBiZWVuIHJlc29sdmVkLiAgSW4gdGhlIG1lYW50aW1lIGl0IHdp
bGwgY29udGludWUgdG8gY29tcGlsZSBhbmQgbGluaworICogc2libGluZyBhbmQgcGFyZW50IGVs
ZW1lbnRzIGFzIHRob3VnaCB0aGlzIGVsZW1lbnQgaGFkIG5vdCBjb250YWluZWQgYW55IGRpcmVj
dGl2ZXMuCisgKgorICogVGhlIGNvbXBpbGVyIGRvZXMgbm90IHN1c3BlbmQgdGhlIGVudGlyZSBj
b21waWxhdGlvbiB0byB3YWl0IGZvciB0ZW1wbGF0ZXMgdG8gYmUgbG9hZGVkIGJlY2F1c2UgdGhp
cworICogd291bGQgcmVzdWx0IGluIHRoZSB3aG9sZSBhcHAgInN0YWxsaW5nIiB1bnRpbCBhbGwg
dGVtcGxhdGVzIGFyZSBsb2FkZWQgYXN5bmNocm9ub3VzbHkgLSBldmVuIGluIHRoZQorICogY2Fz
ZSB3aGVuIG9ubHkgb25lIGRlZXBseSBuZXN0ZWQgZGlyZWN0aXZlIGhhcyBgdGVtcGxhdGVVcmxg
LgorICoKKyAqIFRlbXBsYXRlIGxvYWRpbmcgaXMgYXN5bmNocm9ub3VzIGV2ZW4gaWYgdGhlIHRl
bXBsYXRlIGhhcyBiZWVuIHByZWxvYWRlZCBpbnRvIHRoZSB7QGxpbmsgJHRlbXBsYXRlQ2FjaGV9
CisgKgorICogWW91IGNhbiBzcGVjaWZ5IGB0ZW1wbGF0ZVVybGAgYXMgYSBzdHJpbmcgcmVwcmVz
ZW50aW5nIHRoZSBVUkwgb3IgYXMgYSBmdW5jdGlvbiB3aGljaCB0YWtlcyB0d28KKyAqIGFyZ3Vt
ZW50cyBgdEVsZW1lbnRgIGFuZCBgdEF0dHJzYCAoZGVzY3JpYmVkIGluIHRoZSBgY29tcGlsZWAg
ZnVuY3Rpb24gYXBpIGJlbG93KSBhbmQgcmV0dXJucworICogYSBzdHJpbmcgdmFsdWUgcmVwcmVz
ZW50aW5nIHRoZSB1cmwuICBJbiBlaXRoZXIgY2FzZSwgdGhlIHRlbXBsYXRlIFVSTCBpcyBwYXNz
ZWQgdGhyb3VnaCB7QGxpbmsKKyAqICRzY2UjZ2V0VHJ1c3RlZFJlc291cmNlVXJsICRzY2UuZ2V0
VHJ1c3RlZFJlc291cmNlVXJsfS4KKyAqCisgKgorICogIyMjIyBgcmVwbGFjZWAgKFsqREVQUkVD
QVRFRCohXSwgd2lsbCBiZSByZW1vdmVkIGluIG5leHQgbWFqb3IgcmVsZWFzZSAtIGkuZS4gdjIu
MCkKKyAqIHNwZWNpZnkgd2hhdCB0aGUgdGVtcGxhdGUgc2hvdWxkIHJlcGxhY2UuIERlZmF1bHRz
IHRvIGBmYWxzZWAuCisgKgorICogKiBgdHJ1ZWAgLSB0aGUgdGVtcGxhdGUgd2lsbCByZXBsYWNl
IHRoZSBkaXJlY3RpdmUncyBlbGVtZW50LgorICogKiBgZmFsc2VgIC0gdGhlIHRlbXBsYXRlIHdp
bGwgcmVwbGFjZSB0aGUgY29udGVudHMgb2YgdGhlIGRpcmVjdGl2ZSdzIGVsZW1lbnQuCisgKgor
ICogVGhlIHJlcGxhY2VtZW50IHByb2Nlc3MgbWlncmF0ZXMgYWxsIG9mIHRoZSBhdHRyaWJ1dGVz
IC8gY2xhc3NlcyBmcm9tIHRoZSBvbGQgZWxlbWVudCB0byB0aGUgbmV3CisgKiBvbmUuIFNlZSB0
aGUge0BsaW5rIGd1aWRlL2RpcmVjdGl2ZSN0ZW1wbGF0ZS1leHBhbmRpbmctZGlyZWN0aXZlCisg
KiBEaXJlY3RpdmVzIEd1aWRlfSBmb3IgYW4gZXhhbXBsZS4KKyAqCisgKiBUaGVyZSBhcmUgdmVy
eSBmZXcgc2NlbmFyaW9zIHdoZXJlIGVsZW1lbnQgcmVwbGFjZW1lbnQgaXMgcmVxdWlyZWQgZm9y
IHRoZSBhcHBsaWNhdGlvbiBmdW5jdGlvbiwKKyAqIHRoZSBtYWluIG9uZSBiZWluZyByZXVzYWJs
ZSBjdXN0b20gY29tcG9uZW50cyB0aGF0IGFyZSB1c2VkIHdpdGhpbiBTVkcgY29udGV4dHMKKyAq
IChiZWNhdXNlIFNWRyBkb2Vzbid0IHdvcmsgd2l0aCBjdXN0b20gZWxlbWVudHMgaW4gdGhlIERP
TSB0cmVlKS4KKyAqCisgKiAjIyMjIGB0cmFuc2NsdWRlYAorICogRXh0cmFjdCB0aGUgY29udGVu
dHMgb2YgdGhlIGVsZW1lbnQgd2hlcmUgdGhlIGRpcmVjdGl2ZSBhcHBlYXJzIGFuZCBtYWtlIGl0
IGF2YWlsYWJsZSB0byB0aGUgZGlyZWN0aXZlLgorICogVGhlIGNvbnRlbnRzIGFyZSBjb21waWxl
ZCBhbmQgcHJvdmlkZWQgdG8gdGhlIGRpcmVjdGl2ZSBhcyBhICoqdHJhbnNjbHVzaW9uIGZ1bmN0
aW9uKiouIFNlZSB0aGUKKyAqIHtAbGluayAkY29tcGlsZSN0cmFuc2NsdXNpb24gVHJhbnNjbHVz
aW9ufSBzZWN0aW9uIGJlbG93LgorICoKKyAqIFRoZXJlIGFyZSB0d28ga2luZHMgb2YgdHJhbnNj
bHVzaW9uIGRlcGVuZGluZyB1cG9uIHdoZXRoZXIgeW91IHdhbnQgdG8gdHJhbnNjbHVkZSBqdXN0
IHRoZSBjb250ZW50cyBvZiB0aGUKKyAqIGRpcmVjdGl2ZSdzIGVsZW1lbnQgb3IgdGhlIGVudGly
ZSBlbGVtZW50OgorICoKKyAqICogYHRydWVgIC0gdHJhbnNjbHVkZSB0aGUgY29udGVudCAoaS5l
LiB0aGUgY2hpbGQgbm9kZXMpIG9mIHRoZSBkaXJlY3RpdmUncyBlbGVtZW50LgorICogKiBgJ2Vs
ZW1lbnQnYCAtIHRyYW5zY2x1ZGUgdGhlIHdob2xlIG9mIHRoZSBkaXJlY3RpdmUncyBlbGVtZW50
IGluY2x1ZGluZyBhbnkgZGlyZWN0aXZlcyBvbiB0aGlzCisgKiAgIGVsZW1lbnQgdGhhdCBkZWZp
bmVkIGF0IGEgbG93ZXIgcHJpb3JpdHkgdGhhbiB0aGlzIGRpcmVjdGl2ZS4gV2hlbiB1c2VkLCB0
aGUgYHRlbXBsYXRlYAorICogICBwcm9wZXJ0eSBpcyBpZ25vcmVkLgorICoKKyAqCisgKiAjIyMj
IGBjb21waWxlYAorICoKKyAqIGBgYGpzCisgKiAgIGZ1bmN0aW9uIGNvbXBpbGUodEVsZW1lbnQs
IHRBdHRycywgdHJhbnNjbHVkZSkgeyAuLi4gfQorICogYGBgCisgKgorICogVGhlIGNvbXBpbGUg
ZnVuY3Rpb24gZGVhbHMgd2l0aCB0cmFuc2Zvcm1pbmcgdGhlIHRlbXBsYXRlIERPTS4gU2luY2Ug
bW9zdCBkaXJlY3RpdmVzIGRvIG5vdCBkbworICogdGVtcGxhdGUgdHJhbnNmb3JtYXRpb24sIGl0
IGlzIG5vdCB1c2VkIG9mdGVuLiBUaGUgY29tcGlsZSBmdW5jdGlvbiB0YWtlcyB0aGUgZm9sbG93
aW5nIGFyZ3VtZW50czoKKyAqCisgKiAgICogYHRFbGVtZW50YCAtIHRlbXBsYXRlIGVsZW1lbnQg
LSBUaGUgZWxlbWVudCB3aGVyZSB0aGUgZGlyZWN0aXZlIGhhcyBiZWVuIGRlY2xhcmVkLiBJdCBp
cworICogICAgIHNhZmUgdG8gZG8gdGVtcGxhdGUgdHJhbnNmb3JtYXRpb24gb24gdGhlIGVsZW1l
bnQgYW5kIGNoaWxkIGVsZW1lbnRzIG9ubHkuCisgKgorICogICAqIGB0QXR0cnNgIC0gdGVtcGxh
dGUgYXR0cmlidXRlcyAtIE5vcm1hbGl6ZWQgbGlzdCBvZiBhdHRyaWJ1dGVzIGRlY2xhcmVkIG9u
IHRoaXMgZWxlbWVudCBzaGFyZWQKKyAqICAgICBiZXR3ZWVuIGFsbCBkaXJlY3RpdmUgY29tcGls
ZSBmdW5jdGlvbnMuCisgKgorICogICAqIGB0cmFuc2NsdWRlYCAtICBbKkRFUFJFQ0FURUQqIV0g
QSB0cmFuc2NsdWRlIGxpbmtpbmcgZnVuY3Rpb246IGBmdW5jdGlvbihzY29wZSwgY2xvbmVMaW5r
aW5nRm4pYAorICoKKyAqIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LXdhcm5pbmciPgorICogKipO
b3RlOioqIFRoZSB0ZW1wbGF0ZSBpbnN0YW5jZSBhbmQgdGhlIGxpbmsgaW5zdGFuY2UgbWF5IGJl
IGRpZmZlcmVudCBvYmplY3RzIGlmIHRoZSB0ZW1wbGF0ZSBoYXMKKyAqIGJlZW4gY2xvbmVkLiBG
b3IgdGhpcyByZWFzb24gaXQgaXMgKipub3QqKiBzYWZlIHRvIGRvIGFueXRoaW5nIG90aGVyIHRo
YW4gRE9NIHRyYW5zZm9ybWF0aW9ucyB0aGF0CisgKiBhcHBseSB0byBhbGwgY2xvbmVkIERPTSBu
b2RlcyB3aXRoaW4gdGhlIGNvbXBpbGUgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgRE9NIGxpc3Rl
bmVyIHJlZ2lzdHJhdGlvbgorICogc2hvdWxkIGJlIGRvbmUgaW4gYSBsaW5raW5nIGZ1bmN0aW9u
IHJhdGhlciB0aGFuIGluIGEgY29tcGlsZSBmdW5jdGlvbi4KKyAqIDwvZGl2PgorCisgKiA8ZGl2
IGNsYXNzPSJhbGVydCBhbGVydC13YXJuaW5nIj4KKyAqICoqTm90ZToqKiBUaGUgY29tcGlsZSBm
dW5jdGlvbiBjYW5ub3QgaGFuZGxlIGRpcmVjdGl2ZXMgdGhhdCByZWN1cnNpdmVseSB1c2UgdGhl
bXNlbHZlcyBpbiB0aGVpcgorICogb3duIHRlbXBsYXRlcyBvciBjb21waWxlIGZ1bmN0aW9ucy4g
Q29tcGlsaW5nIHRoZXNlIGRpcmVjdGl2ZXMgcmVzdWx0cyBpbiBhbiBpbmZpbml0ZSBsb29wIGFu
ZCBhCisgKiBzdGFjayBvdmVyZmxvdyBlcnJvcnMuCisgKgorICogVGhpcyBjYW4gYmUgYXZvaWRl
ZCBieSBtYW51YWxseSB1c2luZyAkY29tcGlsZSBpbiB0aGUgcG9zdExpbmsgZnVuY3Rpb24gdG8g
aW1wZXJhdGl2ZWx5IGNvbXBpbGUKKyAqIGEgZGlyZWN0aXZlJ3MgdGVtcGxhdGUgaW5zdGVhZCBv
ZiByZWx5aW5nIG9uIGF1dG9tYXRpYyB0ZW1wbGF0ZSBjb21waWxhdGlvbiB2aWEgYHRlbXBsYXRl
YCBvcgorICogYHRlbXBsYXRlVXJsYCBkZWNsYXJhdGlvbiBvciBtYW51YWwgY29tcGlsYXRpb24g
aW5zaWRlIHRoZSBjb21waWxlIGZ1bmN0aW9uLgorICogPC9kaXY+CisgKgorICogPGRpdiBjbGFz
cz0iYWxlcnQgYWxlcnQtZGFuZ2VyIj4KKyAqICoqTm90ZToqKiBUaGUgYHRyYW5zY2x1ZGVgIGZ1
bmN0aW9uIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSBjb21waWxlIGZ1bmN0aW9uIGlzIGRlcHJlY2F0
ZWQsIGFzIGl0CisgKiAgIGUuZy4gZG9lcyBub3Qga25vdyBhYm91dCB0aGUgcmlnaHQgb3V0ZXIg
c2NvcGUuIFBsZWFzZSB1c2UgdGhlIHRyYW5zY2x1ZGUgZnVuY3Rpb24gdGhhdCBpcyBwYXNzZWQK
KyAqICAgdG8gdGhlIGxpbmsgZnVuY3Rpb24gaW5zdGVhZC4KKyAqIDwvZGl2PgorCisgKiBBIGNv
bXBpbGUgZnVuY3Rpb24gY2FuIGhhdmUgYSByZXR1cm4gdmFsdWUgd2hpY2ggY2FuIGJlIGVpdGhl
ciBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdC4KKyAqCisgKiAqIHJldHVybmluZyBhIChwb3N0LWxp
bmspIGZ1bmN0aW9uIC0gaXMgZXF1aXZhbGVudCB0byByZWdpc3RlcmluZyB0aGUgbGlua2luZyBm
dW5jdGlvbiB2aWEgdGhlCisgKiAgIGBsaW5rYCBwcm9wZXJ0eSBvZiB0aGUgY29uZmlnIG9iamVj
dCB3aGVuIHRoZSBjb21waWxlIGZ1bmN0aW9uIGlzIGVtcHR5LgorICoKKyAqICogcmV0dXJuaW5n
IGFuIG9iamVjdCB3aXRoIGZ1bmN0aW9uKHMpIHJlZ2lzdGVyZWQgdmlhIGBwcmVgIGFuZCBgcG9z
dGAgcHJvcGVydGllcyAtIGFsbG93cyB5b3UgdG8KKyAqICAgY29udHJvbCB3aGVuIGEgbGlua2lu
ZyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGR1cmluZyB0aGUgbGlua2luZyBwaGFzZS4gU2Vl
IGluZm8gYWJvdXQKKyAqICAgcHJlLWxpbmtpbmcgYW5kIHBvc3QtbGlua2luZyBmdW5jdGlvbnMg
YmVsb3cuCisgKgorICoKKyAqICMjIyMgYGxpbmtgCisgKiBUaGlzIHByb3BlcnR5IGlzIHVzZWQg
b25seSBpZiB0aGUgYGNvbXBpbGVgIHByb3BlcnR5IGlzIG5vdCBkZWZpbmVkLgorICoKKyAqIGBg
YGpzCisgKiAgIGZ1bmN0aW9uIGxpbmsoc2NvcGUsIGlFbGVtZW50LCBpQXR0cnMsIGNvbnRyb2xs
ZXIsIHRyYW5zY2x1ZGVGbikgeyAuLi4gfQorICogYGBgCisgKgorICogVGhlIGxpbmsgZnVuY3Rp
b24gaXMgcmVzcG9uc2libGUgZm9yIHJlZ2lzdGVyaW5nIERPTSBsaXN0ZW5lcnMgYXMgd2VsbCBh
cyB1cGRhdGluZyB0aGUgRE9NLiBJdCBpcworICogZXhlY3V0ZWQgYWZ0ZXIgdGhlIHRlbXBsYXRl
IGhhcyBiZWVuIGNsb25lZC4gVGhpcyBpcyB3aGVyZSBtb3N0IG9mIHRoZSBkaXJlY3RpdmUgbG9n
aWMgd2lsbCBiZQorICogcHV0LgorICoKKyAqICAgKiBgc2NvcGVgIC0ge0BsaW5rIG5nLiRyb290
U2NvcGUuU2NvcGUgU2NvcGV9IC0gVGhlIHNjb3BlIHRvIGJlIHVzZWQgYnkgdGhlCisgKiAgICAg
ZGlyZWN0aXZlIGZvciByZWdpc3RlcmluZyB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkd2F0
Y2ggd2F0Y2hlc30uCisgKgorICogICAqIGBpRWxlbWVudGAgLSBpbnN0YW5jZSBlbGVtZW50IC0g
VGhlIGVsZW1lbnQgd2hlcmUgdGhlIGRpcmVjdGl2ZSBpcyB0byBiZSB1c2VkLiBJdCBpcyBzYWZl
IHRvCisgKiAgICAgbWFuaXB1bGF0ZSB0aGUgY2hpbGRyZW4gb2YgdGhlIGVsZW1lbnQgb25seSBp
biBgcG9zdExpbmtgIGZ1bmN0aW9uIHNpbmNlIHRoZSBjaGlsZHJlbiBoYXZlCisgKiAgICAgYWxy
ZWFkeSBiZWVuIGxpbmtlZC4KKyAqCisgKiAgICogYGlBdHRyc2AgLSBpbnN0YW5jZSBhdHRyaWJ1
dGVzIC0gTm9ybWFsaXplZCBsaXN0IG9mIGF0dHJpYnV0ZXMgZGVjbGFyZWQgb24gdGhpcyBlbGVt
ZW50IHNoYXJlZAorICogICAgIGJldHdlZW4gYWxsIGRpcmVjdGl2ZSBsaW5raW5nIGZ1bmN0aW9u
cy4KKyAqCisgKiAgICogYGNvbnRyb2xsZXJgIC0gdGhlIGRpcmVjdGl2ZSdzIHJlcXVpcmVkIGNv
bnRyb2xsZXIgaW5zdGFuY2UocykgLSBJbnN0YW5jZXMgYXJlIHNoYXJlZAorICogICAgIGFtb25n
IGFsbCBkaXJlY3RpdmVzLCB3aGljaCBhbGxvd3MgdGhlIGRpcmVjdGl2ZXMgdG8gdXNlIHRoZSBj
b250cm9sbGVycyBhcyBhIGNvbW11bmljYXRpb24KKyAqICAgICBjaGFubmVsLiBUaGUgZXhhY3Qg
dmFsdWUgZGVwZW5kcyBvbiB0aGUgZGlyZWN0aXZlJ3MgYHJlcXVpcmVgIHByb3BlcnR5OgorICog
ICAgICAgKiBubyBjb250cm9sbGVyKHMpIHJlcXVpcmVkOiB0aGUgZGlyZWN0aXZlJ3Mgb3duIGNv
bnRyb2xsZXIsIG9yIGB1bmRlZmluZWRgIGlmIGl0IGRvZXNuJ3QgaGF2ZSBvbmUKKyAqICAgICAg
ICogYHN0cmluZ2A6IHRoZSBjb250cm9sbGVyIGluc3RhbmNlCisgKiAgICAgICAqIGBhcnJheWA6
IGFycmF5IG9mIGNvbnRyb2xsZXIgaW5zdGFuY2VzCisgKgorICogICAgIElmIGEgcmVxdWlyZWQg
Y29udHJvbGxlciBjYW5ub3QgYmUgZm91bmQsIGFuZCBpdCBpcyBvcHRpb25hbCwgdGhlIGluc3Rh
bmNlIGlzIGBudWxsYCwKKyAqICAgICBvdGhlcndpc2UgdGhlIHtAbGluayBlcnJvcjokY29tcGls
ZTpjdHJlcSBNaXNzaW5nIFJlcXVpcmVkIENvbnRyb2xsZXJ9IGVycm9yIGlzIHRocm93bi4KKyAq
CisgKiAgICAgTm90ZSB0aGF0IHlvdSBjYW4gYWxzbyByZXF1aXJlIHRoZSBkaXJlY3RpdmUncyBv
d24gY29udHJvbGxlciAtIGl0IHdpbGwgYmUgbWFkZSBhdmFpbGFibGUgbGlrZQorICogICAgIGxp
a2UgYW55IG90aGVyIGNvbnRyb2xsZXIuCisgKgorICogICAqIGB0cmFuc2NsdWRlRm5gIC0gQSB0
cmFuc2NsdWRlIGxpbmtpbmcgZnVuY3Rpb24gcHJlLWJvdW5kIHRvIHRoZSBjb3JyZWN0IHRyYW5z
Y2x1c2lvbiBzY29wZS4KKyAqICAgICBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBgJHRyYW5zY2x1
ZGVgCisgKiAgICAgcGFyYW1ldGVyIG9mIGRpcmVjdGl2ZSBjb250cm9sbGVycywgc2VlIHRoZXJl
IGZvciBkZXRhaWxzLgorICogICAgIGBmdW5jdGlvbihbc2NvcGVdLCBjbG9uZUxpbmtpbmdGbiwg
ZnV0dXJlUGFyZW50RWxlbWVudClgLgorICoKKyAqICMjIyMgUHJlLWxpbmtpbmcgZnVuY3Rpb24K
KyAqCisgKiBFeGVjdXRlZCBiZWZvcmUgdGhlIGNoaWxkIGVsZW1lbnRzIGFyZSBsaW5rZWQuIE5v
dCBzYWZlIHRvIGRvIERPTSB0cmFuc2Zvcm1hdGlvbiBzaW5jZSB0aGUKKyAqIGNvbXBpbGVyIGxp
bmtpbmcgZnVuY3Rpb24gd2lsbCBmYWlsIHRvIGxvY2F0ZSB0aGUgY29ycmVjdCBlbGVtZW50cyBm
b3IgbGlua2luZy4KKyAqCisgKiAjIyMjIFBvc3QtbGlua2luZyBmdW5jdGlvbgorICoKKyAqIEV4
ZWN1dGVkIGFmdGVyIHRoZSBjaGlsZCBlbGVtZW50cyBhcmUgbGlua2VkLgorICoKKyAqIE5vdGUg
dGhhdCBjaGlsZCBlbGVtZW50cyB0aGF0IGNvbnRhaW4gYHRlbXBsYXRlVXJsYCBkaXJlY3RpdmVz
IHdpbGwgbm90IGhhdmUgYmVlbiBjb21waWxlZAorICogYW5kIGxpbmtlZCBzaW5jZSB0aGV5IGFy
ZSB3YWl0aW5nIGZvciB0aGVpciB0ZW1wbGF0ZSB0byBsb2FkIGFzeW5jaHJvbm91c2x5IGFuZCB0
aGVpciBvd24KKyAqIGNvbXBpbGF0aW9uIGFuZCBsaW5raW5nIGhhcyBiZWVuIHN1c3BlbmRlZCB1
bnRpbCB0aGF0IG9jY3Vycy4KKyAqCisgKiBJdCBpcyBzYWZlIHRvIGRvIERPTSB0cmFuc2Zvcm1h
dGlvbiBpbiB0aGUgcG9zdC1saW5raW5nIGZ1bmN0aW9uIG9uIGVsZW1lbnRzIHRoYXQgYXJlIG5v
dCB3YWl0aW5nCisgKiBmb3IgdGhlaXIgYXN5bmMgdGVtcGxhdGVzIHRvIGJlIHJlc29sdmVkLgor
ICoKKyAqCisgKiAjIyMgVHJhbnNjbHVzaW9uCisgKgorICogVHJhbnNjbHVzaW9uIGlzIHRoZSBw
cm9jZXNzIG9mIGV4dHJhY3RpbmcgYSBjb2xsZWN0aW9uIG9mIERPTSBlbGVtZW50IGZyb20gb25l
IHBhcnQgb2YgdGhlIERPTSBhbmQKKyAqIGNvcHlpbmcgdGhlbSB0byBhbm90aGVyIHBhcnQgb2Yg
dGhlIERPTSwgd2hpbGUgbWFpbnRhaW5pbmcgdGhlaXIgY29ubmVjdGlvbiB0byB0aGUgb3JpZ2lu
YWwgQW5ndWxhckpTCisgKiBzY29wZSBmcm9tIHdoZXJlIHRoZXkgd2VyZSB0YWtlbi4KKyAqCisg
KiBUcmFuc2NsdXNpb24gaXMgdXNlZCAob2Z0ZW4gd2l0aCB7QGxpbmsgbmdUcmFuc2NsdWRlfSkg
dG8gaW5zZXJ0IHRoZQorICogb3JpZ2luYWwgY29udGVudHMgb2YgYSBkaXJlY3RpdmUncyBlbGVt
ZW50IGludG8gYSBzcGVjaWZpZWQgcGxhY2UgaW4gdGhlIHRlbXBsYXRlIG9mIHRoZSBkaXJlY3Rp
dmUuCisgKiBUaGUgYmVuZWZpdCBvZiB0cmFuc2NsdXNpb24sIG92ZXIgc2ltcGx5IG1vdmluZyB0
aGUgRE9NIGVsZW1lbnRzIG1hbnVhbGx5LCBpcyB0aGF0IHRoZSB0cmFuc2NsdWRlZAorICogY29u
dGVudCBoYXMgYWNjZXNzIHRvIHRoZSBwcm9wZXJ0aWVzIG9uIHRoZSBzY29wZSBmcm9tIHdoaWNo
IGl0IHdhcyB0YWtlbiwgZXZlbiBpZiB0aGUgZGlyZWN0aXZlCisgKiBoYXMgaXNvbGF0ZWQgc2Nv
cGUuCisgKiBTZWUgdGhlIHtAbGluayBndWlkZS9kaXJlY3RpdmUjY3JlYXRpbmctYS1kaXJlY3Rp
dmUtdGhhdC13cmFwcy1vdGhlci1lbGVtZW50cyBEaXJlY3RpdmVzIEd1aWRlfS4KKyAqCisgKiBU
aGlzIG1ha2VzIGl0IHBvc3NpYmxlIGZvciB0aGUgd2lkZ2V0IHRvIGhhdmUgcHJpdmF0ZSBzdGF0
ZSBmb3IgaXRzIHRlbXBsYXRlLCB3aGlsZSB0aGUgdHJhbnNjbHVkZWQKKyAqIGNvbnRlbnQgaGFz
IGFjY2VzcyB0byBpdHMgb3JpZ2luYXRpbmcgc2NvcGUuCisgKgorICogPGRpdiBjbGFzcz0iYWxl
cnQgYWxlcnQtd2FybmluZyI+CisgKiAqKk5vdGU6KiogV2hlbiB0ZXN0aW5nIGFuIGVsZW1lbnQg
dHJhbnNjbHVkZSBkaXJlY3RpdmUgeW91IG11c3Qgbm90IHBsYWNlIHRoZSBkaXJlY3RpdmUgYXQg
dGhlIHJvb3Qgb2YgdGhlCisgKiBET00gZnJhZ21lbnQgdGhhdCBpcyBiZWluZyBjb21waWxlZC4g
U2VlIHtAbGluayBndWlkZS91bml0LXRlc3RpbmcjdGVzdGluZy10cmFuc2NsdXNpb24tZGlyZWN0
aXZlcworICogVGVzdGluZyBUcmFuc2NsdXNpb24gRGlyZWN0aXZlc30uCisgKiA8L2Rpdj4KKyAq
CisgKiAjIyMjIFRyYW5zY2x1c2lvbiBGdW5jdGlvbnMKKyAqCisgKiBXaGVuIGEgZGlyZWN0aXZl
IHJlcXVlc3RzIHRyYW5zY2x1c2lvbiwgdGhlIGNvbXBpbGVyIGV4dHJhY3RzIGl0cyBjb250ZW50
cyBhbmQgcHJvdmlkZXMgYSAqKnRyYW5zY2x1c2lvbgorICogZnVuY3Rpb24qKiB0byB0aGUgZGly
ZWN0aXZlJ3MgYGxpbmtgIGZ1bmN0aW9uIGFuZCBgY29udHJvbGxlcmAuIFRoaXMgdHJhbnNjbHVz
aW9uIGZ1bmN0aW9uIGlzIGEgc3BlY2lhbAorICogKipsaW5raW5nIGZ1bmN0aW9uKiogdGhhdCB3
aWxsIHJldHVybiB0aGUgY29tcGlsZWQgY29udGVudHMgbGlua2VkIHRvIGEgbmV3IHRyYW5zY2x1
c2lvbiBzY29wZS4KKyAqCisgKiA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAqIElm
IHlvdSBhcmUganVzdCB1c2luZyB7QGxpbmsgbmdUcmFuc2NsdWRlfSB0aGVuIHlvdSBkb24ndCBu
ZWVkIHRvIHdvcnJ5IGFib3V0IHRoaXMgZnVuY3Rpb24sIHNpbmNlCisgKiBuZ1RyYW5zY2x1ZGUg
d2lsbCBkZWFsIHdpdGggaXQgZm9yIHVzLgorICogPC9kaXY+CisgKgorICogSWYgeW91IHdhbnQg
dG8gbWFudWFsbHkgY29udHJvbCB0aGUgaW5zZXJ0aW9uIGFuZCByZW1vdmFsIG9mIHRoZSB0cmFu
c2NsdWRlZCBjb250ZW50IGluIHlvdXIgZGlyZWN0aXZlCisgKiB0aGVuIHlvdSBtdXN0IHVzZSB0
aGlzIHRyYW5zY2x1ZGUgZnVuY3Rpb24uIFdoZW4geW91IGNhbGwgYSB0cmFuc2NsdWRlIGZ1bmN0
aW9uIGl0IHJldHVybnMgYSBhIGpxTGl0ZS9KUXVlcnkKKyAqIG9iamVjdCB0aGF0IGNvbnRhaW5z
IHRoZSBjb21waWxlZCBET00sIHdoaWNoIGlzIGxpbmtlZCB0byB0aGUgY29ycmVjdCB0cmFuc2Ns
dXNpb24gc2NvcGUuCisgKgorICogV2hlbiB5b3UgY2FsbCBhIHRyYW5zY2x1c2lvbiBmdW5jdGlv
biB5b3UgY2FuIHBhc3MgaW4gYSAqKmNsb25lIGF0dGFjaCBmdW5jdGlvbioqLiBUaGlzIGZ1bmN0
aW9uIGFjY2VwdHMKKyAqIHR3byBwYXJhbWV0ZXJzLCBgZnVuY3Rpb24oY2xvbmUsIHNjb3BlKSB7
IC4uLiB9YCwgd2hlcmUgdGhlIGBjbG9uZWAgaXMgYSBmcmVzaCBjb21waWxlZCBjb3B5IG9mIHlv
dXIgdHJhbnNjbHVkZWQKKyAqIGNvbnRlbnQgYW5kIHRoZSBgc2NvcGVgIGlzIHRoZSBuZXdseSBj
cmVhdGVkIHRyYW5zY2x1c2lvbiBzY29wZSwgdG8gd2hpY2ggdGhlIGNsb25lIGlzIGJvdW5kLgor
ICoKKyAqIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPgorICogKipCZXN0IFByYWN0aWNl
Kio6IEFsd2F5cyBwcm92aWRlIGEgYGNsb25lRm5gIChjbG9uZSBhdHRhY2ggZnVuY3Rpb24pIHdo
ZW4geW91IGNhbGwgYSB0cmFuc2x1ZGUgZnVuY3Rpb24KKyAqIHNpbmNlIHlvdSB0aGVuIGdldCBh
IGZyZXNoIGNsb25lIG9mIHRoZSBvcmlnaW5hbCBET00gYW5kIGFsc28gaGF2ZSBhY2Nlc3MgdG8g
dGhlIG5ldyB0cmFuc2NsdXNpb24gc2NvcGUuCisgKiA8L2Rpdj4KKyAqCisgKiBJdCBpcyBub3Jt
YWwgcHJhY3RpY2UgdG8gYXR0YWNoIHlvdXIgdHJhbnNjbHVkZWQgY29udGVudCAoYGNsb25lYCkg
dG8gdGhlIERPTSBpbnNpZGUgeW91ciAqKmNsb25lCisgKiBhdHRhY2ggZnVuY3Rpb24qKjoKKyAq
CisgKiBgYGBqcworICogdmFyIHRyYW5zY2x1ZGVkQ29udGVudCwgdHJhbnNjbHVzaW9uU2NvcGU7
CisgKgorICogJHRyYW5zY2x1ZGUoZnVuY3Rpb24oY2xvbmUsIHNjb3BlKSB7CisgKiAgIGVsZW1l
bnQuYXBwZW5kKGNsb25lKTsKKyAqICAgdHJhbnNjbHVkZWRDb250ZW50ID0gY2xvbmU7CisgKiAg
IHRyYW5zY2x1c2lvblNjb3BlID0gc2NvcGU7CisgKiB9KTsKKyAqIGBgYAorICoKKyAqIExhdGVy
LCBpZiB5b3Ugd2FudCB0byByZW1vdmUgdGhlIHRyYW5zY2x1ZGVkIGNvbnRlbnQgZnJvbSB5b3Vy
IERPTSB0aGVuIHlvdSBzaG91bGQgYWxzbyBkZXN0cm95IHRoZQorICogYXNzb2NpYXRlZCB0cmFu
c2NsdXNpb24gc2NvcGU6CisgKgorICogYGBganMKKyAqIHRyYW5zY2x1ZGVkQ29udGVudC5yZW1v
dmUoKTsKKyAqIHRyYW5zY2x1c2lvblNjb3BlLiRkZXN0cm95KCk7CisgKiBgYGAKKyAqCisgKiA8
ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAqICoqQmVzdCBQcmFjdGljZSoqOiBpZiB5
b3UgaW50ZW5kIHRvIGFkZCBhbmQgcmVtb3ZlIHRyYW5zY2x1ZGVkIGNvbnRlbnQgbWFudWFsbHkg
aW4geW91ciBkaXJlY3RpdmUKKyAqIChieSBjYWxsaW5nIHRoZSB0cmFuc2NsdWRlIGZ1bmN0aW9u
IHRvIGdldCB0aGUgRE9NIGFuZCBjYWxsaW5nIGBlbGVtZW50LnJlbW92ZSgpYCB0byByZW1vdmUg
aXQpLAorICogdGhlbiB5b3UgYXJlIGFsc28gcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgYCRkZXN0
cm95YCBvbiB0aGUgdHJhbnNjbHVzaW9uIHNjb3BlLgorICogPC9kaXY+CisgKgorICogVGhlIGJ1
aWx0LWluIERPTSBtYW5pcHVsYXRpb24gZGlyZWN0aXZlcywgc3VjaCBhcyB7QGxpbmsgbmdJZn0s
IHtAbGluayBuZ1N3aXRjaH0gYW5kIHtAbGluayBuZ1JlcGVhdH0KKyAqIGF1dG9tYXRpY2FsbHkg
ZGVzdHJveSB0aGVpciB0cmFuc2x1ZGVkIGNsb25lcyBhcyBuZWNlc3Nhcnkgc28geW91IGRvIG5v
dCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoaXMgaWYKKyAqIHlvdSBhcmUgc2ltcGx5IHVzaW5nIHtA
bGluayBuZ1RyYW5zY2x1ZGV9IHRvIGluamVjdCB0aGUgdHJhbnNjbHVzaW9uIGludG8geW91ciBk
aXJlY3RpdmUuCisgKgorICoKKyAqICMjIyMgVHJhbnNjbHVzaW9uIFNjb3BlcworICoKKyAqIFdo
ZW4geW91IGNhbGwgYSB0cmFuc2NsdWRlIGZ1bmN0aW9uIGl0IHJldHVybnMgYSBET00gZnJhZ21l
bnQgdGhhdCBpcyBwcmUtYm91bmQgdG8gYSAqKnRyYW5zY2x1c2lvbgorICogc2NvcGUqKi4gVGhp
cyBzY29wZSBpcyBzcGVjaWFsLCBpbiB0aGF0IGl0IGlzIGEgY2hpbGQgb2YgdGhlIGRpcmVjdGl2
ZSdzIHNjb3BlIChhbmQgc28gZ2V0cyBkZXN0cm95ZWQKKyAqIHdoZW4gdGhlIGRpcmVjdGl2ZSdz
IHNjb3BlIGdldHMgZGVzdHJveWVkKSBidXQgaXQgaW5oZXJpdHMgdGhlIHByb3BlcnRpZXMgb2Yg
dGhlIHNjb3BlIGZyb20gd2hpY2ggaXQKKyAqIHdhcyB0YWtlbi4KKyAqCisgKiBGb3IgZXhhbXBs
ZSBjb25zaWRlciBhIGRpcmVjdGl2ZSB0aGF0IHVzZXMgdHJhbnNjbHVzaW9uIGFuZCBpc29sYXRl
ZCBzY29wZS4gVGhlIERPTSBoaWVyYXJjaHkgbWlnaHQgbG9vaworICogbGlrZSB0aGlzOgorICoK
KyAqIGBgYGh0bWwKKyAqIDxkaXYgbmctYXBwPgorICogICA8ZGl2IGlzb2xhdGU+CisgKiAgICAg
PGRpdiB0cmFuc2NsdXNpb24+CisgKiAgICAgPC9kaXY+CisgKiAgIDwvZGl2PgorICogPC9kaXY+
CisgKiBgYGAKKyAqCisgKiBUaGUgYCRwYXJlbnRgIHNjb3BlIGhpZXJhcmNoeSB3aWxsIGxvb2sg
bGlrZSB0aGlzOgorICoKKyAqIGBgYAorICogLSAkcm9vdFNjb3BlCisgKiAgIC0gaXNvbGF0ZQor
ICogICAgIC0gdHJhbnNjbHVzaW9uCisgKiBgYGAKKyAqCisgKiBidXQgdGhlIHNjb3BlcyB3aWxs
IGluaGVyaXQgcHJvdG90eXBpY2FsbHkgZnJvbSBkaWZmZXJlbnQgc2NvcGVzIHRvIHRoZWlyIGAk
cGFyZW50YC4KKyAqCisgKiBgYGAKKyAqIC0gJHJvb3RTY29wZQorICogICAtIHRyYW5zY2x1c2lv
bgorICogLSBpc29sYXRlCisgKiBgYGAKKyAqCisgKgorICogIyMjIEF0dHJpYnV0ZXMKKyAqCisg
KiBUaGUge0BsaW5rIG5nLiRjb21waWxlLmRpcmVjdGl2ZS5BdHRyaWJ1dGVzIEF0dHJpYnV0ZXN9
IG9iamVjdCAtIHBhc3NlZCBhcyBhIHBhcmFtZXRlciBpbiB0aGUKKyAqIGBsaW5rKClgIG9yIGBj
b21waWxlKClgIGZ1bmN0aW9ucy4gSXQgaGFzIGEgdmFyaWV0eSBvZiB1c2VzLgorICoKKyAqIGFj
Y2Vzc2luZyAqTm9ybWFsaXplZCBhdHRyaWJ1dGUgbmFtZXM6KgorICogRGlyZWN0aXZlcyBsaWtl
ICduZ0JpbmQnIGNhbiBiZSBleHByZXNzZWQgaW4gbWFueSB3YXlzOiAnbmc6YmluZCcsIGBkYXRh
LW5nLWJpbmRgLCBvciAneC1uZy1iaW5kJy4KKyAqIHRoZSBhdHRyaWJ1dGVzIG9iamVjdCBhbGxv
d3MgZm9yIG5vcm1hbGl6ZWQgYWNjZXNzIHRvCisgKiAgIHRoZSBhdHRyaWJ1dGVzLgorICoKKyAq
ICogKkRpcmVjdGl2ZSBpbnRlci1jb21tdW5pY2F0aW9uOiogQWxsIGRpcmVjdGl2ZXMgc2hhcmUg
dGhlIHNhbWUgaW5zdGFuY2Ugb2YgdGhlIGF0dHJpYnV0ZXMKKyAqICAgb2JqZWN0IHdoaWNoIGFs
bG93cyB0aGUgZGlyZWN0aXZlcyB0byB1c2UgdGhlIGF0dHJpYnV0ZXMgb2JqZWN0IGFzIGludGVy
IGRpcmVjdGl2ZQorICogICBjb21tdW5pY2F0aW9uLgorICoKKyAqICogKlN1cHBvcnRzIGludGVy
cG9sYXRpb246KiBJbnRlcnBvbGF0aW9uIGF0dHJpYnV0ZXMgYXJlIGFzc2lnbmVkIHRvIHRoZSBh
dHRyaWJ1dGUgb2JqZWN0CisgKiAgIGFsbG93aW5nIG90aGVyIGRpcmVjdGl2ZXMgdG8gcmVhZCB0
aGUgaW50ZXJwb2xhdGVkIHZhbHVlLgorICoKKyAqICogKk9ic2VydmluZyBpbnRlcnBvbGF0ZWQg
YXR0cmlidXRlczoqIFVzZSBgJG9ic2VydmVgIHRvIG9ic2VydmUgdGhlIHZhbHVlIGNoYW5nZXMg
b2YgYXR0cmlidXRlcworICogICB0aGF0IGNvbnRhaW4gaW50ZXJwb2xhdGlvbiAoZS5nLiBgc3Jj
PSJ7e2Jhcn19ImApLiBOb3Qgb25seSBpcyB0aGlzIHZlcnkgZWZmaWNpZW50IGJ1dCBpdCdzIGFs
c28KKyAqICAgdGhlIG9ubHkgd2F5IHRvIGVhc2lseSBnZXQgdGhlIGFjdHVhbCB2YWx1ZSBiZWNh
dXNlIGR1cmluZyB0aGUgbGlua2luZyBwaGFzZSB0aGUgaW50ZXJwb2xhdGlvbgorICogICBoYXNu
J3QgYmVlbiBldmFsdWF0ZWQgeWV0IGFuZCBzbyB0aGUgdmFsdWUgaXMgYXQgdGhpcyB0aW1lIHNl
dCB0byBgdW5kZWZpbmVkYC4KKyAqCisgKiBgYGBqcworICogZnVuY3Rpb24gbGlua2luZ0ZuKHNj
b3BlLCBlbG0sIGF0dHJzLCBjdHJsKSB7CisgKiAgIC8vIGdldCB0aGUgYXR0cmlidXRlIHZhbHVl
CisgKiAgIGNvbnNvbGUubG9nKGF0dHJzLm5nTW9kZWwpOworICoKKyAqICAgLy8gY2hhbmdlIHRo
ZSBhdHRyaWJ1dGUKKyAqICAgYXR0cnMuJHNldCgnbmdNb2RlbCcsICduZXcgdmFsdWUnKTsKKyAq
CisgKiAgIC8vIG9ic2VydmUgY2hhbmdlcyB0byBpbnRlcnBvbGF0ZWQgYXR0cmlidXRlCisgKiAg
IGF0dHJzLiRvYnNlcnZlKCduZ01vZGVsJywgZnVuY3Rpb24odmFsdWUpIHsKKyAqICAgICBjb25z
b2xlLmxvZygnbmdNb2RlbCBoYXMgY2hhbmdlZCB2YWx1ZSB0byAnICsgdmFsdWUpOworICogICB9
KTsKKyAqIH0KKyAqIGBgYAorICoKKyAqICMjIEV4YW1wbGUKKyAqCisgKiA8ZGl2IGNsYXNzPSJh
bGVydCBhbGVydC13YXJuaW5nIj4KKyAqICoqTm90ZSoqOiBUeXBpY2FsbHkgZGlyZWN0aXZlcyBh
cmUgcmVnaXN0ZXJlZCB3aXRoIGBtb2R1bGUuZGlyZWN0aXZlYC4gVGhlIGV4YW1wbGUgYmVsb3cg
aXMKKyAqIHRvIGlsbHVzdHJhdGUgaG93IGAkY29tcGlsZWAgd29ya3MuCisgKiA8L2Rpdj4KKyAq
CisgPGV4YW1wbGUgbW9kdWxlPSJjb21waWxlRXhhbXBsZSI+CisgICA8ZmlsZSBuYW1lPSJpbmRl
eC5odG1sIj4KKyAgICA8c2NyaXB0PgorICAgICAgYW5ndWxhci5tb2R1bGUoJ2NvbXBpbGVFeGFt
cGxlJywgW10sIGZ1bmN0aW9uKCRjb21waWxlUHJvdmlkZXIpIHsKKyAgICAgICAgLy8gY29uZmln
dXJlIG5ldyAnY29tcGlsZScgZGlyZWN0aXZlIGJ5IHBhc3NpbmcgYSBkaXJlY3RpdmUKKyAgICAg
ICAgLy8gZmFjdG9yeSBmdW5jdGlvbi4gVGhlIGZhY3RvcnkgZnVuY3Rpb24gaW5qZWN0cyB0aGUg
JyRjb21waWxlJworICAgICAgICAkY29tcGlsZVByb3ZpZGVyLmRpcmVjdGl2ZSgnY29tcGlsZScs
IGZ1bmN0aW9uKCRjb21waWxlKSB7CisgICAgICAgICAgLy8gZGlyZWN0aXZlIGZhY3RvcnkgY3Jl
YXRlcyBhIGxpbmsgZnVuY3Rpb24KKyAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUsIGVs
ZW1lbnQsIGF0dHJzKSB7CisgICAgICAgICAgICBzY29wZS4kd2F0Y2goCisgICAgICAgICAgICAg
IGZ1bmN0aW9uKHNjb3BlKSB7CisgICAgICAgICAgICAgICAgIC8vIHdhdGNoIHRoZSAnY29tcGls
ZScgZXhwcmVzc2lvbiBmb3IgY2hhbmdlcworICAgICAgICAgICAgICAgIHJldHVybiBzY29wZS4k
ZXZhbChhdHRycy5jb21waWxlKTsKKyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgZnVu
Y3Rpb24odmFsdWUpIHsKKyAgICAgICAgICAgICAgICAvLyB3aGVuIHRoZSAnY29tcGlsZScgZXhw
cmVzc2lvbiBjaGFuZ2VzCisgICAgICAgICAgICAgICAgLy8gYXNzaWduIGl0IGludG8gdGhlIGN1
cnJlbnQgRE9NCisgICAgICAgICAgICAgICAgZWxlbWVudC5odG1sKHZhbHVlKTsKKworICAgICAg
ICAgICAgICAgIC8vIGNvbXBpbGUgdGhlIG5ldyBET00gYW5kIGxpbmsgaXQgdG8gdGhlIGN1cnJl
bnQKKyAgICAgICAgICAgICAgICAvLyBzY29wZS4KKyAgICAgICAgICAgICAgICAvLyBOT1RFOiB3
ZSBvbmx5IGNvbXBpbGUgLmNoaWxkTm9kZXMgc28gdGhhdAorICAgICAgICAgICAgICAgIC8vIHdl
IGRvbid0IGdldCBpbnRvIGluZmluaXRlIGxvb3AgY29tcGlsaW5nIG91cnNlbHZlcworICAgICAg
ICAgICAgICAgICRjb21waWxlKGVsZW1lbnQuY29udGVudHMoKSkoc2NvcGUpOworICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICApOworICAgICAgICAgIH07CisgICAgICAgIH0pOworICAgICAg
fSkKKyAgICAgIC5jb250cm9sbGVyKCdHcmVldGVyQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVu
Y3Rpb24oJHNjb3BlKSB7CisgICAgICAgICRzY29wZS5uYW1lID0gJ0FuZ3VsYXInOworICAgICAg
ICAkc2NvcGUuaHRtbCA9ICdIZWxsbyB7e25hbWV9fSc7CisgICAgICB9XSk7CisgICAgPC9zY3Jp
cHQ+CisgICAgPGRpdiBuZy1jb250cm9sbGVyPSJHcmVldGVyQ29udHJvbGxlciI+CisgICAgICA8
aW5wdXQgbmctbW9kZWw9Im5hbWUiPiA8YnIvPgorICAgICAgPHRleHRhcmVhIG5nLW1vZGVsPSJo
dG1sIj48L3RleHRhcmVhPiA8YnIvPgorICAgICAgPGRpdiBjb21waWxlPSJodG1sIj48L2Rpdj4K
KyAgICA8L2Rpdj4KKyAgIDwvZmlsZT4KKyAgIDxmaWxlIG5hbWU9InByb3RyYWN0b3IuanMiIHR5
cGU9InByb3RyYWN0b3IiPgorICAgICBpdCgnc2hvdWxkIGF1dG8gY29tcGlsZScsIGZ1bmN0aW9u
KCkgeworICAgICAgIHZhciB0ZXh0YXJlYSA9ICQoJ3RleHRhcmVhJyk7CisgICAgICAgdmFyIG91
dHB1dCA9ICQoJ2Rpdltjb21waWxlXScpOworICAgICAgIC8vIFRoZSBpbml0aWFsIHN0YXRlIHJl
YWRzICdIZWxsbyBBbmd1bGFyJy4KKyAgICAgICBleHBlY3Qob3V0cHV0LmdldFRleHQoKSkudG9C
ZSgnSGVsbG8gQW5ndWxhcicpOworICAgICAgIHRleHRhcmVhLmNsZWFyKCk7CisgICAgICAgdGV4
dGFyZWEuc2VuZEtleXMoJ3t7bmFtZX19IScpOworICAgICAgIGV4cGVjdChvdXRwdXQuZ2V0VGV4
dCgpKS50b0JlKCdBbmd1bGFyIScpOworICAgICB9KTsKKyAgIDwvZmlsZT4KKyA8L2V4YW1wbGU+
CisKKyAqCisgKgorICogQHBhcmFtIHtzdHJpbmd8RE9NRWxlbWVudH0gZWxlbWVudCBFbGVtZW50
IG9yIEhUTUwgc3RyaW5nIHRvIGNvbXBpbGUgaW50byBhIHRlbXBsYXRlIGZ1bmN0aW9uLgorICog
QHBhcmFtIHtmdW5jdGlvbihhbmd1bGFyLlNjb3BlLCBjbG9uZUF0dGFjaEZuPSl9IHRyYW5zY2x1
ZGUgZnVuY3Rpb24gYXZhaWxhYmxlIHRvIGRpcmVjdGl2ZXMgLSBERVBSRUNBVEVELgorICoKKyAq
IDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWRhbmdlciI+CisgKiAqKk5vdGU6KiogUGFzc2luZyBh
IGB0cmFuc2NsdWRlYCBmdW5jdGlvbiB0byB0aGUgJGNvbXBpbGUgZnVuY3Rpb24gaXMgZGVwcmVj
YXRlZCwgYXMgaXQKKyAqICAgZS5nLiB3aWxsIG5vdCB1c2UgdGhlIHJpZ2h0IG91dGVyIHNjb3Bl
LiBQbGVhc2UgcGFzcyB0aGUgdHJhbnNjbHVkZSBmdW5jdGlvbiBhcyBhCisgKiAgIGBwYXJlbnRC
b3VuZFRyYW5zY2x1ZGVGbmAgdG8gdGhlIGxpbmsgZnVuY3Rpb24gaW5zdGVhZC4KKyAqIDwvZGl2
PgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBtYXhQcmlvcml0eSBvbmx5IGFwcGx5IGRpcmVjdGl2
ZXMgbG93ZXIgdGhhbiBnaXZlbiBwcmlvcml0eSAoT25seSBlZmZlY3RzIHRoZQorICogICAgICAg
ICAgICAgICAgIHJvb3QgZWxlbWVudChzKSwgbm90IHRoZWlyIGNoaWxkcmVuKQorICogQHJldHVy
bnMge2Z1bmN0aW9uKHNjb3BlLCBjbG9uZUF0dGFjaEZuPSwgb3B0aW9ucz0pfSBhIGxpbmsgZnVu
Y3Rpb24gd2hpY2ggaXMgdXNlZCB0byBiaW5kIHRlbXBsYXRlCisgKiAoYSBET00gZWxlbWVudC90
cmVlKSB0byBhIHNjb3BlLiBXaGVyZToKKyAqCisgKiAgKiBgc2NvcGVgIC0gQSB7QGxpbmsgbmcu
JHJvb3RTY29wZS5TY29wZSBTY29wZX0gdG8gYmluZCB0by4KKyAqICAqIGBjbG9uZUF0dGFjaEZu
YCAtIElmIGBjbG9uZUF0dGFjaEZuYCBpcyBwcm92aWRlZCwgdGhlbiB0aGUgbGluayBmdW5jdGlv
biB3aWxsIGNsb25lIHRoZQorICogIGB0ZW1wbGF0ZWAgYW5kIGNhbGwgdGhlIGBjbG9uZUF0dGFj
aEZuYCBmdW5jdGlvbiBhbGxvd2luZyB0aGUgY2FsbGVyIHRvIGF0dGFjaCB0aGUKKyAqICBjbG9u
ZWQgZWxlbWVudHMgdG8gdGhlIERPTSBkb2N1bWVudCBhdCB0aGUgYXBwcm9wcmlhdGUgcGxhY2Uu
IFRoZSBgY2xvbmVBdHRhY2hGbmAgaXMKKyAqICBjYWxsZWQgYXM6IDxici8+IGBjbG9uZUF0dGFj
aEZuKGNsb25lZEVsZW1lbnQsIHNjb3BlKWAgd2hlcmU6CisgKgorICogICAgICAqIGBjbG9uZWRF
bGVtZW50YCAtIGlzIGEgY2xvbmUgb2YgdGhlIG9yaWdpbmFsIGBlbGVtZW50YCBwYXNzZWQgaW50
byB0aGUgY29tcGlsZXIuCisgKiAgICAgICogYHNjb3BlYCAtIGlzIHRoZSBjdXJyZW50IHNjb3Bl
IHdpdGggd2hpY2ggdGhlIGxpbmtpbmcgZnVuY3Rpb24gaXMgd29ya2luZyB3aXRoLgorICoKKyAq
ICAqIGBvcHRpb25zYCAtIEFuIG9wdGlvbmFsIG9iamVjdCBoYXNoIHdpdGggbGlua2luZyBvcHRp
b25zLiBJZiBgb3B0aW9uc2AgaXMgcHJvdmlkZWQsIHRoZW4gdGhlIGZvbGxvd2luZworICogIGtl
eXMgbWF5IGJlIHVzZWQgdG8gY29udHJvbCBsaW5raW5nIGJlaGF2aW9yOgorICoKKyAqICAgICAg
KiBgcGFyZW50Qm91bmRUcmFuc2NsdWRlRm5gIC0gdGhlIHRyYW5zY2x1ZGUgZnVuY3Rpb24gbWFk
ZSBhdmFpbGFibGUgdG8KKyAqICAgICAgICBkaXJlY3RpdmVzOyBpZiBnaXZlbiwgaXQgd2lsbCBi
ZSBwYXNzZWQgdGhyb3VnaCB0byB0aGUgbGluayBmdW5jdGlvbnMgb2YKKyAqICAgICAgICBkaXJl
Y3RpdmVzIGZvdW5kIGluIGBlbGVtZW50YCBkdXJpbmcgY29tcGlsYXRpb24uCisgKiAgICAgICog
YHRyYW5zY2x1ZGVDb250cm9sbGVyc2AgLSBhbiBvYmplY3QgaGFzaCB3aXRoIGtleXMgdGhhdCBt
YXAgY29udHJvbGxlciBuYW1lcworICogICAgICAgIHRvIGNvbnRyb2xsZXIgaW5zdGFuY2VzOyBp
ZiBnaXZlbiwgaXQgd2lsbCBtYWtlIHRoZSBjb250cm9sbGVycworICogICAgICAgIGF2YWlsYWJs
ZSB0byBkaXJlY3RpdmVzLgorICogICAgICAqIGBmdXR1cmVQYXJlbnRFbGVtZW50YCAtIGRlZmlu
ZXMgdGhlIHBhcmVudCB0byB3aGljaCB0aGUgYGNsb25lQXR0YWNoRm5gIHdpbGwgYWRkCisgKiAg
ICAgICAgdGhlIGNsb25lZCBlbGVtZW50czsgb25seSBuZWVkZWQgZm9yIHRyYW5zY2x1ZGVzIHRo
YXQgYXJlIGFsbG93ZWQgdG8gY29udGFpbiBub24gaHRtbAorICogICAgICAgIGVsZW1lbnRzIChl
LmcuIFNWRyBlbGVtZW50cykuIFNlZSBhbHNvIHRoZSBkaXJlY3RpdmUuY29udHJvbGxlciBwcm9w
ZXJ0eS4KKyAqCisgKiBDYWxsaW5nIHRoZSBsaW5raW5nIGZ1bmN0aW9uIHJldHVybnMgdGhlIGVs
ZW1lbnQgb2YgdGhlIHRlbXBsYXRlLiBJdCBpcyBlaXRoZXIgdGhlIG9yaWdpbmFsCisgKiBlbGVt
ZW50IHBhc3NlZCBpbiwgb3IgdGhlIGNsb25lIG9mIHRoZSBlbGVtZW50IGlmIHRoZSBgY2xvbmVB
dHRhY2hGbmAgaXMgcHJvdmlkZWQuCisgKgorICogQWZ0ZXIgbGlua2luZyB0aGUgdmlldyBpcyBu
b3QgdXBkYXRlZCB1bnRpbCBhZnRlciBhIGNhbGwgdG8gJGRpZ2VzdCB3aGljaCB0eXBpY2FsbHkg
aXMgZG9uZSBieQorICogQW5ndWxhciBhdXRvbWF0aWNhbGx5LgorICoKKyAqIElmIHlvdSBuZWVk
IGFjY2VzcyB0byB0aGUgYm91bmQgdmlldywgdGhlcmUgYXJlIHR3byB3YXlzIHRvIGRvIGl0Ogor
ICoKKyAqIC0gSWYgeW91IGFyZSBub3QgYXNraW5nIHRoZSBsaW5raW5nIGZ1bmN0aW9uIHRvIGNs
b25lIHRoZSB0ZW1wbGF0ZSwgY3JlYXRlIHRoZSBET00gZWxlbWVudChzKQorICogICBiZWZvcmUg
eW91IHNlbmQgdGhlbSB0byB0aGUgY29tcGlsZXIgYW5kIGtlZXAgdGhpcyByZWZlcmVuY2UgYXJv
dW5kLgorICogICBgYGBqcworICogICAgIHZhciBlbGVtZW50ID0gJGNvbXBpbGUoJzxwPnt7dG90
YWx9fTwvcD4nKShzY29wZSk7CisgKiAgIGBgYAorICoKKyAqIC0gaWYgb24gdGhlIG90aGVyIGhh
bmQsIHlvdSBuZWVkIHRoZSBlbGVtZW50IHRvIGJlIGNsb25lZCwgdGhlIHZpZXcgcmVmZXJlbmNl
IGZyb20gdGhlIG9yaWdpbmFsCisgKiAgIGV4YW1wbGUgd291bGQgbm90IHBvaW50IHRvIHRoZSBj
bG9uZSwgYnV0IHJhdGhlciB0byB0aGUgb3JpZ2luYWwgdGVtcGxhdGUgdGhhdCB3YXMgY2xvbmVk
LiBJbgorICogICB0aGlzIGNhc2UsIHlvdSBjYW4gYWNjZXNzIHRoZSBjbG9uZSB2aWEgdGhlIGNs
b25lQXR0YWNoRm46CisgKiAgIGBgYGpzCisgKiAgICAgdmFyIHRlbXBsYXRlRWxlbWVudCA9IGFu
Z3VsYXIuZWxlbWVudCgnPHA+e3t0b3RhbH19PC9wPicpLAorICogICAgICAgICBzY29wZSA9IC4u
Li47CisgKgorICogICAgIHZhciBjbG9uZWRFbGVtZW50ID0gJGNvbXBpbGUodGVtcGxhdGVFbGVt
ZW50KShzY29wZSwgZnVuY3Rpb24oY2xvbmVkRWxlbWVudCwgc2NvcGUpIHsKKyAqICAgICAgIC8v
YXR0YWNoIHRoZSBjbG9uZSB0byBET00gZG9jdW1lbnQgYXQgdGhlIHJpZ2h0IHBsYWNlCisgKiAg
ICAgfSk7CisgKgorICogICAgIC8vbm93IHdlIGhhdmUgcmVmZXJlbmNlIHRvIHRoZSBjbG9uZWQg
RE9NIHZpYSBgY2xvbmVkRWxlbWVudGAKKyAqICAgYGBgCisgKgorICoKKyAqIEZvciBpbmZvcm1h
dGlvbiBvbiBob3cgdGhlIGNvbXBpbGVyIHdvcmtzLCBzZWUgdGhlCisgKiB7QGxpbmsgZ3VpZGUv
Y29tcGlsZXIgQW5ndWxhciBIVE1MIENvbXBpbGVyfSBzZWN0aW9uIG9mIHRoZSBEZXZlbG9wZXIg
R3VpZGUuCisgKi8KKwordmFyICRjb21waWxlTWluRXJyID0gbWluRXJyKCckY29tcGlsZScpOwor
CisvKioKKyAqIEBuZ2RvYyBwcm92aWRlcgorICogQG5hbWUgJGNvbXBpbGVQcm92aWRlcgorICoK
KyAqIEBkZXNjcmlwdGlvbgorICovCiskQ29tcGlsZVByb3ZpZGVyLiRpbmplY3QgPSBbJyRwcm92
aWRlJywgJyQkc2FuaXRpemVVcmlQcm92aWRlciddOworZnVuY3Rpb24gJENvbXBpbGVQcm92aWRl
cigkcHJvdmlkZSwgJCRzYW5pdGl6ZVVyaVByb3ZpZGVyKSB7CisgIHZhciBoYXNEaXJlY3RpdmVz
ID0ge30sCisgICAgICBTdWZmaXggPSAnRGlyZWN0aXZlJywKKyAgICAgIENPTU1FTlRfRElSRUNU
SVZFX1JFR0VYUCA9IC9eXHMqZGlyZWN0aXZlXDpccyooW1x3XC1dKylccysoLiopJC8sCisgICAg
ICBDTEFTU19ESVJFQ1RJVkVfUkVHRVhQID0gLygoW1x3XC1dKykoPzpcOihbXjtdKykpPzs/KS8s
CisgICAgICBBTExfT1JfTk9USElOR19BVFRSUyA9IG1ha2VNYXAoJ25nU3JjLG5nU3Jjc2V0LHNy
YyxzcmNzZXQnKSwKKyAgICAgIFJFUVVJUkVfUFJFRklYX1JFR0VYUCA9IC9eKD86KFxeXF4/KT8o
XD8pPyhcXlxePyk/KT8vOworCisgIC8vIFJlZjogaHR0cDovL2RldmVsb3BlcnMud2hhdHdnLm9y
Zy93ZWJhcHBhcGlzLmh0bWwjZXZlbnQtaGFuZGxlci1pZGwtYXR0cmlidXRlcworICAvLyBUaGUg
YXNzdW1wdGlvbiBpcyB0aGF0IGZ1dHVyZSBET00gZXZlbnQgYXR0cmlidXRlIG5hbWVzIHdpbGwg
YmVnaW4gd2l0aAorICAvLyAnb24nIGFuZCBiZSBjb21wb3NlZCBvZiBvbmx5IEVuZ2xpc2ggbGV0
dGVycy4KKyAgdmFyIEVWRU5UX0hBTkRMRVJfQVRUUl9SRUdFWFAgPSAvXihvblthLXpdK3xmb3Jt
YWN0aW9uKSQvOworCisgIGZ1bmN0aW9uIHBhcnNlSXNvbGF0ZUJpbmRpbmdzKHNjb3BlLCBkaXJl
Y3RpdmVOYW1lLCBpc0NvbnRyb2xsZXIpIHsKKyAgICB2YXIgTE9DQUxfUkVHRVhQID0gL15ccyoo
W0AmXXw9KFwqPykpKFw/PylccyooXHcqKVxzKiQvOworCisgICAgdmFyIGJpbmRpbmdzID0ge307
CisKKyAgICBmb3JFYWNoKHNjb3BlLCBmdW5jdGlvbihkZWZpbml0aW9uLCBzY29wZU5hbWUpIHsK
KyAgICAgIHZhciBtYXRjaCA9IGRlZmluaXRpb24ubWF0Y2goTE9DQUxfUkVHRVhQKTsKKworICAg
ICAgaWYgKCFtYXRjaCkgeworICAgICAgICB0aHJvdyAkY29tcGlsZU1pbkVycignaXNjcCcsCisg
ICAgICAgICAgICAiSW52YWxpZCB7M30gZm9yIGRpcmVjdGl2ZSAnezB9Jy4iICsKKyAgICAgICAg
ICAgICIgRGVmaW5pdGlvbjogey4uLiB7MX06ICd7Mn0nIC4uLn0iLAorICAgICAgICAgICAgZGly
ZWN0aXZlTmFtZSwgc2NvcGVOYW1lLCBkZWZpbml0aW9uLAorICAgICAgICAgICAgKGlzQ29udHJv
bGxlciA/ICJjb250cm9sbGVyIGJpbmRpbmdzIGRlZmluaXRpb24iIDoKKyAgICAgICAgICAgICJp
c29sYXRlIHNjb3BlIGRlZmluaXRpb24iKSk7CisgICAgICB9CisKKyAgICAgIGJpbmRpbmdzW3Nj
b3BlTmFtZV0gPSB7CisgICAgICAgIG1vZGU6IG1hdGNoWzFdWzBdLAorICAgICAgICBjb2xsZWN0
aW9uOiBtYXRjaFsyXSA9PT0gJyonLAorICAgICAgICBvcHRpb25hbDogbWF0Y2hbM10gPT09ICc/
JywKKyAgICAgICAgYXR0ck5hbWU6IG1hdGNoWzRdIHx8IHNjb3BlTmFtZQorICAgICAgfTsKKyAg
ICB9KTsKKworICAgIHJldHVybiBiaW5kaW5nczsKKyAgfQorCisgIGZ1bmN0aW9uIHBhcnNlRGly
ZWN0aXZlQmluZGluZ3MoZGlyZWN0aXZlLCBkaXJlY3RpdmVOYW1lKSB7CisgICAgdmFyIGJpbmRp
bmdzID0geworICAgICAgaXNvbGF0ZVNjb3BlOiBudWxsLAorICAgICAgYmluZFRvQ29udHJvbGxl
cjogbnVsbAorICAgIH07CisgICAgaWYgKGlzT2JqZWN0KGRpcmVjdGl2ZS5zY29wZSkpIHsKKyAg
ICAgIGlmIChkaXJlY3RpdmUuYmluZFRvQ29udHJvbGxlciA9PT0gdHJ1ZSkgeworICAgICAgICBi
aW5kaW5ncy5iaW5kVG9Db250cm9sbGVyID0gcGFyc2VJc29sYXRlQmluZGluZ3MoZGlyZWN0aXZl
LnNjb3BlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGlyZWN0aXZlTmFtZSwgdHJ1ZSk7CisgICAgICAgIGJpbmRpbmdzLmlzb2xhdGVT
Y29wZSA9IHt9OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgYmluZGluZ3MuaXNvbGF0ZVNjb3Bl
ID0gcGFyc2VJc29sYXRlQmluZGluZ3MoZGlyZWN0aXZlLnNjb3BlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVOYW1lLCBmYWxz
ZSk7CisgICAgICB9CisgICAgfQorICAgIGlmIChpc09iamVjdChkaXJlY3RpdmUuYmluZFRvQ29u
dHJvbGxlcikpIHsKKyAgICAgIGJpbmRpbmdzLmJpbmRUb0NvbnRyb2xsZXIgPQorICAgICAgICAg
IHBhcnNlSXNvbGF0ZUJpbmRpbmdzKGRpcmVjdGl2ZS5iaW5kVG9Db250cm9sbGVyLCBkaXJlY3Rp
dmVOYW1lLCB0cnVlKTsKKyAgICB9CisgICAgaWYgKGlzT2JqZWN0KGJpbmRpbmdzLmJpbmRUb0Nv
bnRyb2xsZXIpKSB7CisgICAgICB2YXIgY29udHJvbGxlciA9IGRpcmVjdGl2ZS5jb250cm9sbGVy
OworICAgICAgdmFyIGNvbnRyb2xsZXJBcyA9IGRpcmVjdGl2ZS5jb250cm9sbGVyQXM7CisgICAg
ICBpZiAoIWNvbnRyb2xsZXIpIHsKKyAgICAgICAgLy8gVGhlcmUgaXMgbm8gY29udHJvbGxlciwg
dGhlcmUgbWF5IG9yIG1heSBub3QgYmUgYSBjb250cm9sbGVyQXMgcHJvcGVydHkKKyAgICAgICAg
dGhyb3cgJGNvbXBpbGVNaW5FcnIoJ25vY3RybCcsCisgICAgICAgICAgICAgICJDYW5ub3QgYmlu
ZCB0byBjb250cm9sbGVyIHdpdGhvdXQgZGlyZWN0aXZlICd7MH0ncyBjb250cm9sbGVyLiIsCisg
ICAgICAgICAgICAgIGRpcmVjdGl2ZU5hbWUpOworICAgICAgfSBlbHNlIGlmICghaWRlbnRpZmll
ckZvckNvbnRyb2xsZXIoY29udHJvbGxlciwgY29udHJvbGxlckFzKSkgeworICAgICAgICAvLyBU
aGVyZSBpcyBhIGNvbnRyb2xsZXIsIGJ1dCBubyBpZGVudGlmaWVyIG9yIGNvbnRyb2xsZXJBcyBw
cm9wZXJ0eQorICAgICAgICB0aHJvdyAkY29tcGlsZU1pbkVycignbm9pZGVudCcsCisgICAgICAg
ICAgICAgICJDYW5ub3QgYmluZCB0byBjb250cm9sbGVyIHdpdGhvdXQgaWRlbnRpZmllciBmb3Ig
ZGlyZWN0aXZlICd7MH0nLiIsCisgICAgICAgICAgICAgIGRpcmVjdGl2ZU5hbWUpOworICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gYmluZGluZ3M7CisgIH0KKworICBmdW5jdGlvbiBhc3NlcnRW
YWxpZERpcmVjdGl2ZU5hbWUobmFtZSkgeworICAgIHZhciBsZXR0ZXIgPSBuYW1lLmNoYXJBdCgw
KTsKKyAgICBpZiAoIWxldHRlciB8fCBsZXR0ZXIgIT09IGxvd2VyY2FzZShsZXR0ZXIpKSB7Cisg
ICAgICB0aHJvdyAkY29tcGlsZU1pbkVycignYmFkZGlyJywgIkRpcmVjdGl2ZSBuYW1lICd7MH0n
IGlzIGludmFsaWQuIFRoZSBmaXJzdCBjaGFyYWN0ZXIgbXVzdCBiZSBhIGxvd2VyY2FzZSBsZXR0
ZXIiLCBuYW1lKTsKKyAgICB9CisgICAgaWYgKG5hbWUgIT09IG5hbWUudHJpbSgpKSB7CisgICAg
ICB0aHJvdyAkY29tcGlsZU1pbkVycignYmFkZGlyJywKKyAgICAgICAgICAgICJEaXJlY3RpdmUg
bmFtZSAnezB9JyBpcyBpbnZhbGlkLiBUaGUgbmFtZSBzaG91bGQgbm90IGNvbnRhaW4gbGVhZGlu
ZyBvciB0cmFpbGluZyB3aGl0ZXNwYWNlcyIsCisgICAgICAgICAgICBuYW1lKTsKKyAgICB9Cisg
IH0KKworICAvKioKKyAgICogQG5nZG9jIG1ldGhvZAorICAgKiBAbmFtZSAkY29tcGlsZVByb3Zp
ZGVyI2RpcmVjdGl2ZQorICAgKiBAa2luZCBmdW5jdGlvbgorICAgKgorICAgKiBAZGVzY3JpcHRp
b24KKyAgICogUmVnaXN0ZXIgYSBuZXcgZGlyZWN0aXZlIHdpdGggdGhlIGNvbXBpbGVyLgorICAg
KgorICAgKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9IG5hbWUgTmFtZSBvZiB0aGUgZGlyZWN0aXZl
IGluIGNhbWVsLWNhc2UgKGkuZS4gPGNvZGU+bmdCaW5kPC9jb2RlPiB3aGljaAorICAgKiAgICB3
aWxsIG1hdGNoIGFzIDxjb2RlPm5nLWJpbmQ8L2NvZGU+KSwgb3IgYW4gb2JqZWN0IG1hcCBvZiBk
aXJlY3RpdmVzIHdoZXJlIHRoZSBrZXlzIGFyZSB0aGUKKyAgICogICAgbmFtZXMgYW5kIHRoZSB2
YWx1ZXMgYXJlIHRoZSBmYWN0b3JpZXMuCisgICAqIEBwYXJhbSB7RnVuY3Rpb258QXJyYXl9IGRp
cmVjdGl2ZUZhY3RvcnkgQW4gaW5qZWN0YWJsZSBkaXJlY3RpdmUgZmFjdG9yeSBmdW5jdGlvbi4g
U2VlCisgICAqICAgIHtAbGluayBndWlkZS9kaXJlY3RpdmV9IGZvciBtb3JlIGluZm8uCisgICAq
IEByZXR1cm5zIHtuZy4kY29tcGlsZVByb3ZpZGVyfSBTZWxmIGZvciBjaGFpbmluZy4KKyAgICov
CisgICB0aGlzLmRpcmVjdGl2ZSA9IGZ1bmN0aW9uIHJlZ2lzdGVyRGlyZWN0aXZlKG5hbWUsIGRp
cmVjdGl2ZUZhY3RvcnkpIHsKKyAgICBhc3NlcnROb3RIYXNPd25Qcm9wZXJ0eShuYW1lLCAnZGly
ZWN0aXZlJyk7CisgICAgaWYgKGlzU3RyaW5nKG5hbWUpKSB7CisgICAgICBhc3NlcnRWYWxpZERp
cmVjdGl2ZU5hbWUobmFtZSk7CisgICAgICBhc3NlcnRBcmcoZGlyZWN0aXZlRmFjdG9yeSwgJ2Rp
cmVjdGl2ZUZhY3RvcnknKTsKKyAgICAgIGlmICghaGFzRGlyZWN0aXZlcy5oYXNPd25Qcm9wZXJ0
eShuYW1lKSkgeworICAgICAgICBoYXNEaXJlY3RpdmVzW25hbWVdID0gW107CisgICAgICAgICRw
cm92aWRlLmZhY3RvcnkobmFtZSArIFN1ZmZpeCwgWyckaW5qZWN0b3InLCAnJGV4Y2VwdGlvbkhh
bmRsZXInLAorICAgICAgICAgIGZ1bmN0aW9uKCRpbmplY3RvciwgJGV4Y2VwdGlvbkhhbmRsZXIp
IHsKKyAgICAgICAgICAgIHZhciBkaXJlY3RpdmVzID0gW107CisgICAgICAgICAgICBmb3JFYWNo
KGhhc0RpcmVjdGl2ZXNbbmFtZV0sIGZ1bmN0aW9uKGRpcmVjdGl2ZUZhY3RvcnksIGluZGV4KSB7
CisgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgdmFyIGRpcmVjdGl2ZSA9ICRp
bmplY3Rvci5pbnZva2UoZGlyZWN0aXZlRmFjdG9yeSk7CisgICAgICAgICAgICAgICAgaWYgKGlz
RnVuY3Rpb24oZGlyZWN0aXZlKSkgeworICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlID0geyBj
b21waWxlOiB2YWx1ZUZuKGRpcmVjdGl2ZSkgfTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KCFkaXJlY3RpdmUuY29tcGlsZSAmJiBkaXJlY3RpdmUubGluaykgeworICAgICAgICAgICAgICAg
ICAgZGlyZWN0aXZlLmNvbXBpbGUgPSB2YWx1ZUZuKGRpcmVjdGl2ZS5saW5rKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlLnByaW9yaXR5ID0gZGlyZWN0aXZl
LnByaW9yaXR5IHx8IDA7CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlLmluZGV4ID0gaW5kZXg7
CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlLm5hbWUgPSBkaXJlY3RpdmUubmFtZSB8fCBuYW1l
OworICAgICAgICAgICAgICAgIGRpcmVjdGl2ZS5yZXF1aXJlID0gZGlyZWN0aXZlLnJlcXVpcmUg
fHwgKGRpcmVjdGl2ZS5jb250cm9sbGVyICYmIGRpcmVjdGl2ZS5uYW1lKTsKKyAgICAgICAgICAg
ICAgICBkaXJlY3RpdmUucmVzdHJpY3QgPSBkaXJlY3RpdmUucmVzdHJpY3QgfHwgJ0VBJzsKKyAg
ICAgICAgICAgICAgICB2YXIgYmluZGluZ3MgPSBkaXJlY3RpdmUuJCRiaW5kaW5ncyA9CisgICAg
ICAgICAgICAgICAgICAgIHBhcnNlRGlyZWN0aXZlQmluZGluZ3MoZGlyZWN0aXZlLCBkaXJlY3Rp
dmUubmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KGJpbmRpbmdzLmlzb2xhdGVT
Y29wZSkpIHsKKyAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZS4kJGlzb2xhdGVCaW5kaW5ncyA9
IGJpbmRpbmdzLmlzb2xhdGVTY29wZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZGlyZWN0aXZlLiQkbW9kdWxlTmFtZSA9IGRpcmVjdGl2ZUZhY3RvcnkuJCRtb2R1bGVOYW1l
OworICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMucHVzaChkaXJlY3RpdmUpOworICAgICAgICAg
ICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoZSk7
CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuIGRp
cmVjdGl2ZXM7CisgICAgICAgICAgfV0pOworICAgICAgfQorICAgICAgaGFzRGlyZWN0aXZlc1tu
YW1lXS5wdXNoKGRpcmVjdGl2ZUZhY3RvcnkpOworICAgIH0gZWxzZSB7CisgICAgICBmb3JFYWNo
KG5hbWUsIHJldmVyc2VQYXJhbXMocmVnaXN0ZXJEaXJlY3RpdmUpKTsKKyAgICB9CisgICAgcmV0
dXJuIHRoaXM7CisgIH07CisKKworICAvKioKKyAgICogQG5nZG9jIG1ldGhvZAorICAgKiBAbmFt
ZSAkY29tcGlsZVByb3ZpZGVyI2FIcmVmU2FuaXRpemF0aW9uV2hpdGVsaXN0CisgICAqIEBraW5k
IGZ1bmN0aW9uCisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBSZXRyaWV2ZXMgb3Igb3Zl
cnJpZGVzIHRoZSBkZWZhdWx0IHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IGlzIHVzZWQgZm9yIHdo
aXRlbGlzdGluZyBvZiBzYWZlCisgICAqIHVybHMgZHVyaW5nIGFbaHJlZl0gc2FuaXRpemF0aW9u
LgorICAgKgorICAgKiBUaGUgc2FuaXRpemF0aW9uIGlzIGEgc2VjdXJpdHkgbWVhc3VyZSBhaW1l
ZCBhdCBwcmV2ZW50aW5nIFhTUyBhdHRhY2tzIHZpYSBodG1sIGxpbmtzLgorICAgKgorICAgKiBB
bnkgdXJsIGFib3V0IHRvIGJlIGFzc2lnbmVkIHRvIGFbaHJlZl0gdmlhIGRhdGEtYmluZGluZyBp
cyBmaXJzdCBub3JtYWxpemVkIGFuZCB0dXJuZWQgaW50bworICAgKiBhbiBhYnNvbHV0ZSB1cmwu
IEFmdGVyd2FyZHMsIHRoZSB1cmwgaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBgYUhyZWZTYW5pdGl6
YXRpb25XaGl0ZWxpc3RgCisgICAqIHJlZ3VsYXIgZXhwcmVzc2lvbi4gSWYgYSBtYXRjaCBpcyBm
b3VuZCwgdGhlIG9yaWdpbmFsIHVybCBpcyB3cml0dGVuIGludG8gdGhlIGRvbS4gT3RoZXJ3aXNl
LAorICAgKiB0aGUgYWJzb2x1dGUgdXJsIGlzIHByZWZpeGVkIHdpdGggYCd1bnNhZmU6J2Agc3Ry
aW5nIGFuZCBvbmx5IHRoZW4gaXMgaXQgd3JpdHRlbiBpbnRvIHRoZSBET00uCisgICAqCisgICAq
IEBwYXJhbSB7UmVnRXhwPX0gcmVnZXhwIE5ldyByZWdleHAgdG8gd2hpdGVsaXN0IHVybHMgd2l0
aC4KKyAgICogQHJldHVybnMge1JlZ0V4cHxuZy4kY29tcGlsZVByb3ZpZGVyfSBDdXJyZW50IFJl
Z0V4cCBpZiBjYWxsZWQgd2l0aG91dCB2YWx1ZSBvciBzZWxmIGZvcgorICAgKiAgICBjaGFpbmlu
ZyBvdGhlcndpc2UuCisgICAqLworICB0aGlzLmFIcmVmU2FuaXRpemF0aW9uV2hpdGVsaXN0ID0g
ZnVuY3Rpb24ocmVnZXhwKSB7CisgICAgaWYgKGlzRGVmaW5lZChyZWdleHApKSB7CisgICAgICAk
JHNhbml0aXplVXJpUHJvdmlkZXIuYUhyZWZTYW5pdGl6YXRpb25XaGl0ZWxpc3QocmVnZXhwKTsK
KyAgICAgIHJldHVybiB0aGlzOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gJCRzYW5pdGl6
ZVVyaVByb3ZpZGVyLmFIcmVmU2FuaXRpemF0aW9uV2hpdGVsaXN0KCk7CisgICAgfQorICB9Owor
CisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgJGNvbXBpbGVQcm92aWRl
ciNpbWdTcmNTYW5pdGl6YXRpb25XaGl0ZWxpc3QKKyAgICogQGtpbmQgZnVuY3Rpb24KKyAgICoK
KyAgICogQGRlc2NyaXB0aW9uCisgICAqIFJldHJpZXZlcyBvciBvdmVycmlkZXMgdGhlIGRlZmF1
bHQgcmVndWxhciBleHByZXNzaW9uIHRoYXQgaXMgdXNlZCBmb3Igd2hpdGVsaXN0aW5nIG9mIHNh
ZmUKKyAgICogdXJscyBkdXJpbmcgaW1nW3NyY10gc2FuaXRpemF0aW9uLgorICAgKgorICAgKiBU
aGUgc2FuaXRpemF0aW9uIGlzIGEgc2VjdXJpdHkgbWVhc3VyZSBhaW1lZCBhdCBwcmV2ZW50IFhT
UyBhdHRhY2tzIHZpYSBodG1sIGxpbmtzLgorICAgKgorICAgKiBBbnkgdXJsIGFib3V0IHRvIGJl
IGFzc2lnbmVkIHRvIGltZ1tzcmNdIHZpYSBkYXRhLWJpbmRpbmcgaXMgZmlyc3Qgbm9ybWFsaXpl
ZCBhbmQgdHVybmVkIGludG8KKyAgICogYW4gYWJzb2x1dGUgdXJsLiBBZnRlcndhcmRzLCB0aGUg
dXJsIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgYGltZ1NyY1Nhbml0aXphdGlvbldoaXRlbGlzdGAK
KyAgICogcmVndWxhciBleHByZXNzaW9uLiBJZiBhIG1hdGNoIGlzIGZvdW5kLCB0aGUgb3JpZ2lu
YWwgdXJsIGlzIHdyaXR0ZW4gaW50byB0aGUgZG9tLiBPdGhlcndpc2UsCisgICAqIHRoZSBhYnNv
bHV0ZSB1cmwgaXMgcHJlZml4ZWQgd2l0aCBgJ3Vuc2FmZTonYCBzdHJpbmcgYW5kIG9ubHkgdGhl
biBpcyBpdCB3cml0dGVuIGludG8gdGhlIERPTS4KKyAgICoKKyAgICogQHBhcmFtIHtSZWdFeHA9
fSByZWdleHAgTmV3IHJlZ2V4cCB0byB3aGl0ZWxpc3QgdXJscyB3aXRoLgorICAgKiBAcmV0dXJu
cyB7UmVnRXhwfG5nLiRjb21waWxlUHJvdmlkZXJ9IEN1cnJlbnQgUmVnRXhwIGlmIGNhbGxlZCB3
aXRob3V0IHZhbHVlIG9yIHNlbGYgZm9yCisgICAqICAgIGNoYWluaW5nIG90aGVyd2lzZS4KKyAg
ICovCisgIHRoaXMuaW1nU3JjU2FuaXRpemF0aW9uV2hpdGVsaXN0ID0gZnVuY3Rpb24ocmVnZXhw
KSB7CisgICAgaWYgKGlzRGVmaW5lZChyZWdleHApKSB7CisgICAgICAkJHNhbml0aXplVXJpUHJv
dmlkZXIuaW1nU3JjU2FuaXRpemF0aW9uV2hpdGVsaXN0KHJlZ2V4cCk7CisgICAgICByZXR1cm4g
dGhpczsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuICQkc2FuaXRpemVVcmlQcm92aWRlci5p
bWdTcmNTYW5pdGl6YXRpb25XaGl0ZWxpc3QoKTsKKyAgICB9CisgIH07CisKKyAgLyoqCisgICAq
IEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgICRjb21waWxlUHJvdmlkZXIjZGVidWdJbmZvRW5h
YmxlZAorICAgKgorICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBlbmFibGVkIHVwZGF0ZSB0aGUgZGVi
dWdJbmZvRW5hYmxlZCBzdGF0ZSBpZiBwcm92aWRlZCwgb3RoZXJ3aXNlIGp1c3QgcmV0dXJuIHRo
ZQorICAgKiBjdXJyZW50IGRlYnVnSW5mb0VuYWJsZWQgc3RhdGUKKyAgICogQHJldHVybnMgeyp9
IGN1cnJlbnQgdmFsdWUgaWYgdXNlZCBhcyBnZXR0ZXIgb3IgaXRzZWxmIChjaGFpbmluZykgaWYg
dXNlZCBhcyBzZXR0ZXIKKyAgICoKKyAgICogQGtpbmQgZnVuY3Rpb24KKyAgICoKKyAgICogQGRl
c2NyaXB0aW9uCisgICAqIENhbGwgdGhpcyBtZXRob2QgdG8gZW5hYmxlL2Rpc2FibGUgdmFyaW91
cyBkZWJ1ZyBydW50aW1lIGluZm9ybWF0aW9uIGluIHRoZSBjb21waWxlciBzdWNoIGFzIGFkZGlu
ZworICAgKiBiaW5kaW5nIGluZm9ybWF0aW9uIGFuZCBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVu
dCBzY29wZSBvbiB0byBET00gZWxlbWVudHMuCisgICAqIElmIGVuYWJsZWQsIHRoZSBjb21waWxl
ciB3aWxsIGFkZCB0aGUgZm9sbG93aW5nIHRvIERPTSBlbGVtZW50cyB0aGF0IGhhdmUgYmVlbiBi
b3VuZCB0byB0aGUgc2NvcGUKKyAgICogKiBgbmctYmluZGluZ2AgQ1NTIGNsYXNzCisgICAqICog
YCRiaW5kaW5nYCBkYXRhIHByb3BlcnR5IGNvbnRhaW5pbmcgYW4gYXJyYXkgb2YgdGhlIGJpbmRp
bmcgZXhwcmVzc2lvbnMKKyAgICoKKyAgICogWW91IG1heSB3YW50IHRvIGRpc2FibGUgdGhpcyBp
biBwcm9kdWN0aW9uIGZvciBhIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGJvb3N0LiBTZWUKKyAg
ICoge0BsaW5rIGd1aWRlL3Byb2R1Y3Rpb24jZGlzYWJsaW5nLWRlYnVnLWRhdGEgRGlzYWJsaW5n
IERlYnVnIERhdGF9IGZvciBtb3JlLgorICAgKgorICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0
cnVlLgorICAgKi8KKyAgdmFyIGRlYnVnSW5mb0VuYWJsZWQgPSB0cnVlOworICB0aGlzLmRlYnVn
SW5mb0VuYWJsZWQgPSBmdW5jdGlvbihlbmFibGVkKSB7CisgICAgaWYgKGlzRGVmaW5lZChlbmFi
bGVkKSkgeworICAgICAgZGVidWdJbmZvRW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgICByZXR1cm4g
dGhpczsKKyAgICB9CisgICAgcmV0dXJuIGRlYnVnSW5mb0VuYWJsZWQ7CisgIH07CisKKyAgdGhp
cy4kZ2V0ID0gWworICAgICAgICAgICAgJyRpbmplY3RvcicsICckaW50ZXJwb2xhdGUnLCAnJGV4
Y2VwdGlvbkhhbmRsZXInLCAnJHRlbXBsYXRlUmVxdWVzdCcsICckcGFyc2UnLAorICAgICAgICAg
ICAgJyRjb250cm9sbGVyJywgJyRyb290U2NvcGUnLCAnJGRvY3VtZW50JywgJyRzY2UnLCAnJGFu
aW1hdGUnLCAnJCRzYW5pdGl6ZVVyaScsCisgICAgZnVuY3Rpb24oJGluamVjdG9yLCAgICRpbnRl
cnBvbGF0ZSwgICAkZXhjZXB0aW9uSGFuZGxlciwgICAkdGVtcGxhdGVSZXF1ZXN0LCAgICRwYXJz
ZSwKKyAgICAgICAgICAgICAkY29udHJvbGxlciwgICAkcm9vdFNjb3BlLCAgICRkb2N1bWVudCwg
ICAkc2NlLCAgICRhbmltYXRlLCAgICQkc2FuaXRpemVVcmkpIHsKKworICAgIHZhciBBdHRyaWJ1
dGVzID0gZnVuY3Rpb24oZWxlbWVudCwgYXR0cmlidXRlc1RvQ29weSkgeworICAgICAgaWYgKGF0
dHJpYnV0ZXNUb0NvcHkpIHsKKyAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhhdHRyaWJ1
dGVzVG9Db3B5KTsKKyAgICAgICAgdmFyIGksIGwsIGtleTsKKworICAgICAgICBmb3IgKGkgPSAw
LCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgICBrZXkgPSBrZXlzW2ld
OworICAgICAgICAgIHRoaXNba2V5XSA9IGF0dHJpYnV0ZXNUb0NvcHlba2V5XTsKKyAgICAgICAg
fQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpcy4kYXR0ciA9IHt9OworICAgICAgfQorCisg
ICAgICB0aGlzLiQkZWxlbWVudCA9IGVsZW1lbnQ7CisgICAgfTsKKworICAgIEF0dHJpYnV0ZXMu
cHJvdG90eXBlID0geworICAgICAgLyoqCisgICAgICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICAg
KiBAbmFtZSAkY29tcGlsZS5kaXJlY3RpdmUuQXR0cmlidXRlcyMkbm9ybWFsaXplCisgICAgICAg
KiBAa2luZCBmdW5jdGlvbgorICAgICAgICoKKyAgICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAg
ICogQ29udmVydHMgYW4gYXR0cmlidXRlIG5hbWUgKGUuZy4gZGFzaC9jb2xvbi91bmRlcnNjb3Jl
LWRlbGltaXRlZCBzdHJpbmcsIG9wdGlvbmFsbHkgcHJlZml4ZWQgd2l0aCBgeC1gIG9yCisgICAg
ICAgKiBgZGF0YS1gKSB0byBpdHMgbm9ybWFsaXplZCwgY2FtZWxDYXNlIGZvcm0uCisgICAgICAg
KgorICAgICAgICogQWxzbyB0aGVyZSBpcyBzcGVjaWFsIGNhc2UgZm9yIE1veiBwcmVmaXggc3Rh
cnRpbmcgd2l0aCB1cHBlciBjYXNlIGxldHRlci4KKyAgICAgICAqCisgICAgICAgKiBGb3IgZnVy
dGhlciBpbmZvcm1hdGlvbiBjaGVjayBvdXQgdGhlIGd1aWRlIG9uIHtAbGluayBndWlkZS9kaXJl
Y3RpdmUjbWF0Y2hpbmctZGlyZWN0aXZlcyBNYXRjaGluZyBEaXJlY3RpdmVzfQorICAgICAgICoK
KyAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgdG8gbm9ybWFsaXplCisgICAgICAg
Ki8KKyAgICAgICRub3JtYWxpemU6IGRpcmVjdGl2ZU5vcm1hbGl6ZSwKKworCisgICAgICAvKioK
KyAgICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgICAqIEBuYW1lICRjb21waWxlLmRpcmVjdGl2
ZS5BdHRyaWJ1dGVzIyRhZGRDbGFzcworICAgICAgICogQGtpbmQgZnVuY3Rpb24KKyAgICAgICAq
CisgICAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgICAqIEFkZHMgdGhlIENTUyBjbGFzcyB2YWx1
ZSBzcGVjaWZpZWQgYnkgdGhlIGNsYXNzVmFsIHBhcmFtZXRlciB0byB0aGUgZWxlbWVudC4gSWYg
YW5pbWF0aW9ucworICAgICAgICogYXJlIGVuYWJsZWQgdGhlbiBhbiBhbmltYXRpb24gd2lsbCBi
ZSB0cmlnZ2VyZWQgZm9yIHRoZSBjbGFzcyBhZGRpdGlvbi4KKyAgICAgICAqCisgICAgICAgKiBA
cGFyYW0ge3N0cmluZ30gY2xhc3NWYWwgVGhlIGNsYXNzTmFtZSB2YWx1ZSB0aGF0IHdpbGwgYmUg
YWRkZWQgdG8gdGhlIGVsZW1lbnQKKyAgICAgICAqLworICAgICAgJGFkZENsYXNzOiBmdW5jdGlv
bihjbGFzc1ZhbCkgeworICAgICAgICBpZiAoY2xhc3NWYWwgJiYgY2xhc3NWYWwubGVuZ3RoID4g
MCkgeworICAgICAgICAgICRhbmltYXRlLmFkZENsYXNzKHRoaXMuJCRlbGVtZW50LCBjbGFzc1Zh
bCk7CisgICAgICAgIH0KKyAgICAgIH0sCisKKyAgICAgIC8qKgorICAgICAgICogQG5nZG9jIG1l
dGhvZAorICAgICAgICogQG5hbWUgJGNvbXBpbGUuZGlyZWN0aXZlLkF0dHJpYnV0ZXMjJHJlbW92
ZUNsYXNzCisgICAgICAgKiBAa2luZCBmdW5jdGlvbgorICAgICAgICoKKyAgICAgICAqIEBkZXNj
cmlwdGlvbgorICAgICAgICogUmVtb3ZlcyB0aGUgQ1NTIGNsYXNzIHZhbHVlIHNwZWNpZmllZCBi
eSB0aGUgY2xhc3NWYWwgcGFyYW1ldGVyIGZyb20gdGhlIGVsZW1lbnQuIElmCisgICAgICAgKiBh
bmltYXRpb25zIGFyZSBlbmFibGVkIHRoZW4gYW4gYW5pbWF0aW9uIHdpbGwgYmUgdHJpZ2dlcmVk
IGZvciB0aGUgY2xhc3MgcmVtb3ZhbC4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0ge3N0cmlu
Z30gY2xhc3NWYWwgVGhlIGNsYXNzTmFtZSB2YWx1ZSB0aGF0IHdpbGwgYmUgcmVtb3ZlZCBmcm9t
IHRoZSBlbGVtZW50CisgICAgICAgKi8KKyAgICAgICRyZW1vdmVDbGFzczogZnVuY3Rpb24oY2xh
c3NWYWwpIHsKKyAgICAgICAgaWYgKGNsYXNzVmFsICYmIGNsYXNzVmFsLmxlbmd0aCA+IDApIHsK
KyAgICAgICAgICAkYW5pbWF0ZS5yZW1vdmVDbGFzcyh0aGlzLiQkZWxlbWVudCwgY2xhc3NWYWwp
OworICAgICAgICB9CisgICAgICB9LAorCisgICAgICAvKioKKyAgICAgICAqIEBuZ2RvYyBtZXRo
b2QKKyAgICAgICAqIEBuYW1lICRjb21waWxlLmRpcmVjdGl2ZS5BdHRyaWJ1dGVzIyR1cGRhdGVD
bGFzcworICAgICAgICogQGtpbmQgZnVuY3Rpb24KKyAgICAgICAqCisgICAgICAgKiBAZGVzY3Jp
cHRpb24KKyAgICAgICAqIEFkZHMgYW5kIHJlbW92ZXMgdGhlIGFwcHJvcHJpYXRlIENTUyBjbGFz
cyB2YWx1ZXMgdG8gdGhlIGVsZW1lbnQgYmFzZWQgb24gdGhlIGRpZmZlcmVuY2UKKyAgICAgICAq
IGJldHdlZW4gdGhlIG5ldyBhbmQgb2xkIENTUyBjbGFzcyB2YWx1ZXMgKHNwZWNpZmllZCBhcyBu
ZXdDbGFzc2VzIGFuZCBvbGRDbGFzc2VzKS4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0ge3N0
cmluZ30gbmV3Q2xhc3NlcyBUaGUgY3VycmVudCBDU1MgY2xhc3NOYW1lIHZhbHVlCisgICAgICAg
KiBAcGFyYW0ge3N0cmluZ30gb2xkQ2xhc3NlcyBUaGUgZm9ybWVyIENTUyBjbGFzc05hbWUgdmFs
dWUKKyAgICAgICAqLworICAgICAgJHVwZGF0ZUNsYXNzOiBmdW5jdGlvbihuZXdDbGFzc2VzLCBv
bGRDbGFzc2VzKSB7CisgICAgICAgIHZhciB0b0FkZCA9IHRva2VuRGlmZmVyZW5jZShuZXdDbGFz
c2VzLCBvbGRDbGFzc2VzKTsKKyAgICAgICAgaWYgKHRvQWRkICYmIHRvQWRkLmxlbmd0aCkgewor
ICAgICAgICAgICRhbmltYXRlLmFkZENsYXNzKHRoaXMuJCRlbGVtZW50LCB0b0FkZCk7CisgICAg
ICAgIH0KKworICAgICAgICB2YXIgdG9SZW1vdmUgPSB0b2tlbkRpZmZlcmVuY2Uob2xkQ2xhc3Nl
cywgbmV3Q2xhc3Nlcyk7CisgICAgICAgIGlmICh0b1JlbW92ZSAmJiB0b1JlbW92ZS5sZW5ndGgp
IHsKKyAgICAgICAgICAkYW5pbWF0ZS5yZW1vdmVDbGFzcyh0aGlzLiQkZWxlbWVudCwgdG9SZW1v
dmUpOworICAgICAgICB9CisgICAgICB9LAorCisgICAgICAvKioKKyAgICAgICAqIFNldCBhIG5v
cm1hbGl6ZWQgYXR0cmlidXRlIG9uIHRoZSBlbGVtZW50IGluIGEgd2F5IHN1Y2ggdGhhdCBhbGwg
ZGlyZWN0aXZlcworICAgICAgICogY2FuIHNoYXJlIHRoZSBhdHRyaWJ1dGUuIFRoaXMgZnVuY3Rp
b24gcHJvcGVybHkgaGFuZGxlcyBib29sZWFuIGF0dHJpYnV0ZXMuCisgICAgICAgKiBAcGFyYW0g
e3N0cmluZ30ga2V5IE5vcm1hbGl6ZWQga2V5LiAoaWUgbmdBdHRyaWJ1dGUpCisgICAgICAgKiBA
cGFyYW0ge3N0cmluZ3xib29sZWFufSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LiBJZiBgbnVsbGAg
YXR0cmlidXRlIHdpbGwgYmUgZGVsZXRlZC4KKyAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHdy
aXRlQXR0ciBJZiBmYWxzZSwgZG9lcyBub3Qgd3JpdGUgdGhlIHZhbHVlIHRvIERPTSBlbGVtZW50
IGF0dHJpYnV0ZS4KKyAgICAgICAqICAgICBEZWZhdWx0cyB0byB0cnVlLgorICAgICAgICogQHBh
cmFtIHtzdHJpbmc9fSBhdHRyTmFtZSBPcHRpb25hbCBub25lIG5vcm1hbGl6ZWQgbmFtZS4gRGVm
YXVsdHMgdG8ga2V5LgorICAgICAgICovCisgICAgICAkc2V0OiBmdW5jdGlvbihrZXksIHZhbHVl
LCB3cml0ZUF0dHIsIGF0dHJOYW1lKSB7CisgICAgICAgIC8vIFRPRE86IGRlY2lkZSB3aGV0aGVy
IG9yIG5vdCB0byB0aHJvdyBhbiBlcnJvciBpZiAiY2xhc3MiCisgICAgICAgIC8vaXMgc2V0IHRo
cm91Z2ggdGhpcyBmdW5jdGlvbiBzaW5jZSBpdCBtYXkgY2F1c2UgJHVwZGF0ZUNsYXNzIHRvCisg
ICAgICAgIC8vYmVjb21lIHVuc3RhYmxlLgorCisgICAgICAgIHZhciBub2RlID0gdGhpcy4kJGVs
ZW1lbnRbMF0sCisgICAgICAgICAgICBib29sZWFuS2V5ID0gZ2V0Qm9vbGVhbkF0dHJOYW1lKG5v
ZGUsIGtleSksCisgICAgICAgICAgICBhbGlhc2VkS2V5ID0gZ2V0QWxpYXNlZEF0dHJOYW1lKG5v
ZGUsIGtleSksCisgICAgICAgICAgICBvYnNlcnZlciA9IGtleSwKKyAgICAgICAgICAgIG5vZGVO
YW1lOworCisgICAgICAgIGlmIChib29sZWFuS2V5KSB7CisgICAgICAgICAgdGhpcy4kJGVsZW1l
bnQucHJvcChrZXksIHZhbHVlKTsKKyAgICAgICAgICBhdHRyTmFtZSA9IGJvb2xlYW5LZXk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoYWxpYXNlZEtleSkgeworICAgICAgICAgIHRoaXNbYWxpYXNlZEtl
eV0gPSB2YWx1ZTsKKyAgICAgICAgICBvYnNlcnZlciA9IGFsaWFzZWRLZXk7CisgICAgICAgIH0K
KworICAgICAgICB0aGlzW2tleV0gPSB2YWx1ZTsKKworICAgICAgICAvLyB0cmFuc2xhdGUgbm9y
bWFsaXplZCBrZXkgdG8gYWN0dWFsIGtleQorICAgICAgICBpZiAoYXR0ck5hbWUpIHsKKyAgICAg
ICAgICB0aGlzLiRhdHRyW2tleV0gPSBhdHRyTmFtZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICBhdHRyTmFtZSA9IHRoaXMuJGF0dHJba2V5XTsKKyAgICAgICAgICBpZiAoIWF0dHJOYW1l
KSB7CisgICAgICAgICAgICB0aGlzLiRhdHRyW2tleV0gPSBhdHRyTmFtZSA9IHNuYWtlX2Nhc2Uo
a2V5LCAnLScpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG5vZGVOYW1lID0g
bm9kZU5hbWVfKHRoaXMuJCRlbGVtZW50KTsKKworICAgICAgICBpZiAoKG5vZGVOYW1lID09PSAn
YScgJiYga2V5ID09PSAnaHJlZicpIHx8CisgICAgICAgICAgICAobm9kZU5hbWUgPT09ICdpbWcn
ICYmIGtleSA9PT0gJ3NyYycpKSB7CisgICAgICAgICAgLy8gc2FuaXRpemUgYVtocmVmXSBhbmQg
aW1nW3NyY10gdmFsdWVzCisgICAgICAgICAgdGhpc1trZXldID0gdmFsdWUgPSAkJHNhbml0aXpl
VXJpKHZhbHVlLCBrZXkgPT09ICdzcmMnKTsKKyAgICAgICAgfSBlbHNlIGlmIChub2RlTmFtZSA9
PT0gJ2ltZycgJiYga2V5ID09PSAnc3Jjc2V0JykgeworICAgICAgICAgIC8vIHNhbml0aXplIGlt
Z1tzcmNzZXRdIHZhbHVlcworICAgICAgICAgIHZhciByZXN1bHQgPSAiIjsKKworICAgICAgICAg
IC8vIGZpcnN0IGNoZWNrIGlmIHRoZXJlIGFyZSBzcGFjZXMgYmVjYXVzZSBpdCdzIG5vdCB0aGUg
c2FtZSBwYXR0ZXJuCisgICAgICAgICAgdmFyIHRyaW1tZWRTcmNzZXQgPSB0cmltKHZhbHVlKTsK
KyAgICAgICAgICAvLyAgICAgICAgICAgICAgICAoICAgOTk5eCAgICx8ICAgOTk5dyAgICx8ICAg
LHwsICAgKQorICAgICAgICAgIHZhciBzcmNQYXR0ZXJuID0gLyhccytcZCt4XHMqLHxccytcZCt3
XHMqLHxccyssfCxccyspLzsKKyAgICAgICAgICB2YXIgcGF0dGVybiA9IC9ccy8udGVzdCh0cmlt
bWVkU3Jjc2V0KSA/IHNyY1BhdHRlcm4gOiAvKCwpLzsKKworICAgICAgICAgIC8vIHNwbGl0IHNy
Y3NldCBpbnRvIHR1cGxlIG9mIHVyaSBhbmQgZGVzY3JpcHRvciBleGNlcHQgZm9yIHRoZSBsYXN0
IGl0ZW0KKyAgICAgICAgICB2YXIgcmF3VXJpcyA9IHRyaW1tZWRTcmNzZXQuc3BsaXQocGF0dGVy
bik7CisKKyAgICAgICAgICAvLyBmb3IgZWFjaCB0dXBsZXMKKyAgICAgICAgICB2YXIgbmJyVXJp
c1dpdGgycGFydHMgPSBNYXRoLmZsb29yKHJhd1VyaXMubGVuZ3RoIC8gMik7CisgICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBuYnJVcmlzV2l0aDJwYXJ0czsgaSsrKSB7CisgICAgICAgICAg
ICB2YXIgaW5uZXJJZHggPSBpICogMjsKKyAgICAgICAgICAgIC8vIHNhbml0aXplIHRoZSB1cmkK
KyAgICAgICAgICAgIHJlc3VsdCArPSAkJHNhbml0aXplVXJpKHRyaW0ocmF3VXJpc1tpbm5lcklk
eF0pLCB0cnVlKTsKKyAgICAgICAgICAgIC8vIGFkZCB0aGUgZGVzY3JpcHRvcgorICAgICAgICAg
ICAgcmVzdWx0ICs9ICgiICIgKyB0cmltKHJhd1VyaXNbaW5uZXJJZHggKyAxXSkpOworICAgICAg
ICAgIH0KKworICAgICAgICAgIC8vIHNwbGl0IHRoZSBsYXN0IGl0ZW0gaW50byB1cmkgYW5kIGRl
c2NyaXB0b3IKKyAgICAgICAgICB2YXIgbGFzdFR1cGxlID0gdHJpbShyYXdVcmlzW2kgKiAyXSku
c3BsaXQoL1xzLyk7CisKKyAgICAgICAgICAvLyBzYW5pdGl6ZSB0aGUgbGFzdCB1cmkKKyAgICAg
ICAgICByZXN1bHQgKz0gJCRzYW5pdGl6ZVVyaSh0cmltKGxhc3RUdXBsZVswXSksIHRydWUpOwor
CisgICAgICAgICAgLy8gYW5kIGFkZCB0aGUgbGFzdCBkZXNjcmlwdG9yIGlmIGFueQorICAgICAg
ICAgIGlmIChsYXN0VHVwbGUubGVuZ3RoID09PSAyKSB7CisgICAgICAgICAgICByZXN1bHQgKz0g
KCIgIiArIHRyaW0obGFzdFR1cGxlWzFdKSk7CisgICAgICAgICAgfQorICAgICAgICAgIHRoaXNb
a2V5XSA9IHZhbHVlID0gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHdyaXRlQXR0
ciAhPT0gZmFsc2UpIHsKKyAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09
IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgdGhpcy4kJGVsZW1lbnQucmVtb3ZlQXR0cihhdHRy
TmFtZSk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuJCRlbGVtZW50LmF0
dHIoYXR0ck5hbWUsIHZhbHVlKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAv
LyBmaXJlIG9ic2VydmVycworICAgICAgICB2YXIgJCRvYnNlcnZlcnMgPSB0aGlzLiQkb2JzZXJ2
ZXJzOworICAgICAgICAkJG9ic2VydmVycyAmJiBmb3JFYWNoKCQkb2JzZXJ2ZXJzW29ic2VydmVy
XSwgZnVuY3Rpb24oZm4pIHsKKyAgICAgICAgICB0cnkgeworICAgICAgICAgICAgZm4odmFsdWUp
OworICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICRleGNlcHRpb25IYW5kbGVy
KGUpOworICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICB9LAorCisKKyAgICAgIC8qKgor
ICAgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAgICogQG5hbWUgJGNvbXBpbGUuZGlyZWN0aXZl
LkF0dHJpYnV0ZXMjJG9ic2VydmUKKyAgICAgICAqIEBraW5kIGZ1bmN0aW9uCisgICAgICAgKgor
ICAgICAgICogQGRlc2NyaXB0aW9uCisgICAgICAgKiBPYnNlcnZlcyBhbiBpbnRlcnBvbGF0ZWQg
YXR0cmlidXRlLgorICAgICAgICoKKyAgICAgICAqIFRoZSBvYnNlcnZlciBmdW5jdGlvbiB3aWxs
IGJlIGludm9rZWQgb25jZSBkdXJpbmcgdGhlIG5leHQgYCRkaWdlc3RgIGZvbGxvd2luZworICAg
ICAgICogY29tcGlsYXRpb24uIFRoZSBvYnNlcnZlciBpcyB0aGVuIGludm9rZWQgd2hlbmV2ZXIg
dGhlIGludGVycG9sYXRlZCB2YWx1ZQorICAgICAgICogY2hhbmdlcy4KKyAgICAgICAqCisgICAg
ICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IE5vcm1hbGl6ZWQga2V5LiAoaWUgbmdBdHRyaWJ1dGUp
IC4KKyAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oaW50ZXJwb2xhdGVkVmFsdWUpfSBmbiBGdW5j
dGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyCisgICAgICAgICAgICAgICAgdGhlIGlu
dGVycG9sYXRlZCB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIGNoYW5nZXMuCisgICAgICAgKiAgICAg
ICAgU2VlIHRoZSB7QGxpbmsgZ3VpZGUvZGlyZWN0aXZlI3RleHQtYW5kLWF0dHJpYnV0ZS1iaW5k
aW5ncyBEaXJlY3RpdmVzfSBndWlkZSBmb3IgbW9yZSBpbmZvLgorICAgICAgICogQHJldHVybnMg
e2Z1bmN0aW9uKCl9IFJldHVybnMgYSBkZXJlZ2lzdHJhdGlvbiBmdW5jdGlvbiBmb3IgdGhpcyBv
YnNlcnZlci4KKyAgICAgICAqLworICAgICAgJG9ic2VydmU6IGZ1bmN0aW9uKGtleSwgZm4pIHsK
KyAgICAgICAgdmFyIGF0dHJzID0gdGhpcywKKyAgICAgICAgICAgICQkb2JzZXJ2ZXJzID0gKGF0
dHJzLiQkb2JzZXJ2ZXJzIHx8IChhdHRycy4kJG9ic2VydmVycyA9IGNyZWF0ZU1hcCgpKSksCisg
ICAgICAgICAgICBsaXN0ZW5lcnMgPSAoJCRvYnNlcnZlcnNba2V5XSB8fCAoJCRvYnNlcnZlcnNb
a2V5XSA9IFtdKSk7CisKKyAgICAgICAgbGlzdGVuZXJzLnB1c2goZm4pOworICAgICAgICAkcm9v
dFNjb3BlLiRldmFsQXN5bmMoZnVuY3Rpb24oKSB7CisgICAgICAgICAgaWYgKCFsaXN0ZW5lcnMu
JCRpbnRlciAmJiBhdHRycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICAgICAgICAvLyBu
byBvbmUgcmVnaXN0ZXJlZCBhdHRyaWJ1dGUgaW50ZXJwb2xhdGlvbiBmdW5jdGlvbiwgc28gbGV0
cyBjYWxsIGl0IG1hbnVhbGx5CisgICAgICAgICAgICBmbihhdHRyc1trZXldKTsKKyAgICAgICAg
ICB9CisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICBhcnJheVJlbW92ZShsaXN0ZW5lcnMsIGZuKTsKKyAgICAgICAgfTsKKyAgICAgIH0KKyAgICB9
OworCisKKyAgICBmdW5jdGlvbiBzYWZlQWRkQ2xhc3MoJGVsZW1lbnQsIGNsYXNzTmFtZSkgewor
ICAgICAgdHJ5IHsKKyAgICAgICAgJGVsZW1lbnQuYWRkQ2xhc3MoY2xhc3NOYW1lKTsKKyAgICAg
IH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgLy8gaWdub3JlLCBzaW5jZSBpdCBtZWFucyB0aGF0IHdl
IGFyZSB0cnlpbmcgdG8gc2V0IGNsYXNzIG9uCisgICAgICAgIC8vIFNWRyBlbGVtZW50LCB3aGVy
ZSBjbGFzcyBuYW1lIGlzIHJlYWQtb25seS4KKyAgICAgIH0KKyAgICB9CisKKworICAgIHZhciBz
dGFydFN5bWJvbCA9ICRpbnRlcnBvbGF0ZS5zdGFydFN5bWJvbCgpLAorICAgICAgICBlbmRTeW1i
b2wgPSAkaW50ZXJwb2xhdGUuZW5kU3ltYm9sKCksCisgICAgICAgIGRlbm9ybWFsaXplVGVtcGxh
dGUgPSAoc3RhcnRTeW1ib2wgPT0gJ3t7JyB8fCBlbmRTeW1ib2wgID09ICd9fScpCisgICAgICAg
ICAgICA/IGlkZW50aXR5CisgICAgICAgICAgICA6IGZ1bmN0aW9uIGRlbm9ybWFsaXplVGVtcGxh
dGUodGVtcGxhdGUpIHsKKyAgICAgICAgICAgICAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UoL1x7
XHsvZywgc3RhcnRTeW1ib2wpLnJlcGxhY2UoL319L2csIGVuZFN5bWJvbCk7CisgICAgICAgIH0s
CisgICAgICAgIE5HX0FUVFJfQklORElORyA9IC9ebmdBdHRyW0EtWl0vOworCisgICAgY29tcGls
ZS4kJGFkZEJpbmRpbmdJbmZvID0gZGVidWdJbmZvRW5hYmxlZCA/IGZ1bmN0aW9uICQkYWRkQmlu
ZGluZ0luZm8oJGVsZW1lbnQsIGJpbmRpbmcpIHsKKyAgICAgIHZhciBiaW5kaW5ncyA9ICRlbGVt
ZW50LmRhdGEoJyRiaW5kaW5nJykgfHwgW107CisKKyAgICAgIGlmIChpc0FycmF5KGJpbmRpbmcp
KSB7CisgICAgICAgIGJpbmRpbmdzID0gYmluZGluZ3MuY29uY2F0KGJpbmRpbmcpOworICAgICAg
fSBlbHNlIHsKKyAgICAgICAgYmluZGluZ3MucHVzaChiaW5kaW5nKTsKKyAgICAgIH0KKworICAg
ICAgJGVsZW1lbnQuZGF0YSgnJGJpbmRpbmcnLCBiaW5kaW5ncyk7CisgICAgfSA6IG5vb3A7CisK
KyAgICBjb21waWxlLiQkYWRkQmluZGluZ0NsYXNzID0gZGVidWdJbmZvRW5hYmxlZCA/IGZ1bmN0
aW9uICQkYWRkQmluZGluZ0NsYXNzKCRlbGVtZW50KSB7CisgICAgICBzYWZlQWRkQ2xhc3MoJGVs
ZW1lbnQsICduZy1iaW5kaW5nJyk7CisgICAgfSA6IG5vb3A7CisKKyAgICBjb21waWxlLiQkYWRk
U2NvcGVJbmZvID0gZGVidWdJbmZvRW5hYmxlZCA/IGZ1bmN0aW9uICQkYWRkU2NvcGVJbmZvKCRl
bGVtZW50LCBzY29wZSwgaXNvbGF0ZWQsIG5vVGVtcGxhdGUpIHsKKyAgICAgIHZhciBkYXRhTmFt
ZSA9IGlzb2xhdGVkID8gKG5vVGVtcGxhdGUgPyAnJGlzb2xhdGVTY29wZU5vVGVtcGxhdGUnIDog
JyRpc29sYXRlU2NvcGUnKSA6ICckc2NvcGUnOworICAgICAgJGVsZW1lbnQuZGF0YShkYXRhTmFt
ZSwgc2NvcGUpOworICAgIH0gOiBub29wOworCisgICAgY29tcGlsZS4kJGFkZFNjb3BlQ2xhc3Mg
PSBkZWJ1Z0luZm9FbmFibGVkID8gZnVuY3Rpb24gJCRhZGRTY29wZUNsYXNzKCRlbGVtZW50LCBp
c29sYXRlZCkgeworICAgICAgc2FmZUFkZENsYXNzKCRlbGVtZW50LCBpc29sYXRlZCA/ICduZy1p
c29sYXRlLXNjb3BlJyA6ICduZy1zY29wZScpOworICAgIH0gOiBub29wOworCisgICAgcmV0dXJu
IGNvbXBpbGU7CisKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAg
ICBmdW5jdGlvbiBjb21waWxlKCRjb21waWxlTm9kZXMsIHRyYW5zY2x1ZGVGbiwgbWF4UHJpb3Jp
dHksIGlnbm9yZURpcmVjdGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzQ29t
cGlsZUNvbnRleHQpIHsKKyAgICAgIGlmICghKCRjb21waWxlTm9kZXMgaW5zdGFuY2VvZiBqcUxp
dGUpKSB7CisgICAgICAgIC8vIGpxdWVyeSBhbHdheXMgcmV3cmFwcywgd2hlcmVhcyB3ZSBuZWVk
IHRvIHByZXNlcnZlIHRoZSBvcmlnaW5hbCBzZWxlY3RvciBzbyB0aGF0IHdlIGNhbgorICAgICAg
ICAvLyBtb2RpZnkgaXQuCisgICAgICAgICRjb21waWxlTm9kZXMgPSBqcUxpdGUoJGNvbXBpbGVO
b2Rlcyk7CisgICAgICB9CisgICAgICAvLyBXZSBjYW4gbm90IGNvbXBpbGUgdG9wIGxldmVsIHRl
eHQgZWxlbWVudHMgc2luY2UgdGV4dCBub2RlcyBjYW4gYmUgbWVyZ2VkIGFuZCB3ZSB3aWxsCisg
ICAgICAvLyBub3QgYmUgYWJsZSB0byBhdHRhY2ggc2NvcGUgZGF0YSB0byB0aGVtLCBzbyB3ZSB3
aWxsIHdyYXAgdGhlbSBpbiA8c3Bhbj4KKyAgICAgIGZvckVhY2goJGNvbXBpbGVOb2RlcywgZnVu
Y3Rpb24obm9kZSwgaW5kZXgpIHsKKyAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gTk9ERV9U
WVBFX1RFWFQgJiYgbm9kZS5ub2RlVmFsdWUubWF0Y2goL1xTKy8pIC8qIG5vbi1lbXB0eSAqLyAp
IHsKKyAgICAgICAgICAkY29tcGlsZU5vZGVzW2luZGV4XSA9IGpxTGl0ZShub2RlKS53cmFwKCc8
c3Bhbj48L3NwYW4+JykucGFyZW50KClbMF07CisgICAgICAgIH0KKyAgICAgIH0pOworICAgICAg
dmFyIGNvbXBvc2l0ZUxpbmtGbiA9CisgICAgICAgICAgICAgIGNvbXBpbGVOb2RlcygkY29tcGls
ZU5vZGVzLCB0cmFuc2NsdWRlRm4sICRjb21waWxlTm9kZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtYXhQcmlvcml0eSwgaWdub3JlRGlyZWN0aXZlLCBwcmV2aW91c0NvbXBpbGVDb250
ZXh0KTsKKyAgICAgIGNvbXBpbGUuJCRhZGRTY29wZUNsYXNzKCRjb21waWxlTm9kZXMpOworICAg
ICAgdmFyIG5hbWVzcGFjZSA9IG51bGw7CisgICAgICByZXR1cm4gZnVuY3Rpb24gcHVibGljTGlu
a0ZuKHNjb3BlLCBjbG9uZUNvbm5lY3RGbiwgb3B0aW9ucykgeworICAgICAgICBhc3NlcnRBcmco
c2NvcGUsICdzY29wZScpOworCisgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OworICAg
ICAgICB2YXIgcGFyZW50Qm91bmRUcmFuc2NsdWRlRm4gPSBvcHRpb25zLnBhcmVudEJvdW5kVHJh
bnNjbHVkZUZuLAorICAgICAgICAgIHRyYW5zY2x1ZGVDb250cm9sbGVycyA9IG9wdGlvbnMudHJh
bnNjbHVkZUNvbnRyb2xsZXJzLAorICAgICAgICAgIGZ1dHVyZVBhcmVudEVsZW1lbnQgPSBvcHRp
b25zLmZ1dHVyZVBhcmVudEVsZW1lbnQ7CisKKyAgICAgICAgLy8gV2hlbiBgcGFyZW50Qm91bmRU
cmFuc2NsdWRlRm5gIGlzIHBhc3NlZCwgaXQgaXMgYQorICAgICAgICAvLyBgY29udHJvbGxlcnNC
b3VuZFRyYW5zY2x1ZGVgIGZ1bmN0aW9uIChpdCB3YXMgcHJldmlvdXNseSBwYXNzZWQKKyAgICAg
ICAgLy8gYXMgYHRyYW5zY2x1ZGVgIHRvIGRpcmVjdGl2ZS5saW5rKSBzbyB3ZSBtdXN0IHVud3Jh
cCBpdCB0byBnZXQKKyAgICAgICAgLy8gaXRzIGBib3VuZFRyYW5zY2x1ZGVGbmAKKyAgICAgICAg
aWYgKHBhcmVudEJvdW5kVHJhbnNjbHVkZUZuICYmIHBhcmVudEJvdW5kVHJhbnNjbHVkZUZuLiQk
Ym91bmRUcmFuc2NsdWRlKSB7CisgICAgICAgICAgcGFyZW50Qm91bmRUcmFuc2NsdWRlRm4gPSBw
YXJlbnRCb3VuZFRyYW5zY2x1ZGVGbi4kJGJvdW5kVHJhbnNjbHVkZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICghbmFtZXNwYWNlKSB7CisgICAgICAgICAgbmFtZXNwYWNlID0gZGV0ZWN0TmFt
ZXNwYWNlRm9yQ2hpbGRFbGVtZW50cyhmdXR1cmVQYXJlbnRFbGVtZW50KTsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgJGxpbmtOb2RlOworICAgICAgICBpZiAobmFtZXNwYWNlICE9PSAnaHRtbCcp
IHsKKyAgICAgICAgICAvLyBXaGVuIHVzaW5nIGEgZGlyZWN0aXZlIHdpdGggcmVwbGFjZTp0cnVl
IGFuZCB0ZW1wbGF0ZVVybCB0aGUgJGNvbXBpbGVOb2RlcworICAgICAgICAgIC8vIChvciBhIGNo
aWxkIGVsZW1lbnQgaW5zaWRlIG9mIHRoZW0pCisgICAgICAgICAgLy8gbWlnaHQgY2hhbmdlLCBz
byB3ZSBuZWVkIHRvIHJlY3JlYXRlIHRoZSBuYW1lc3BhY2UgYWRhcHRlZCBjb21waWxlTm9kZXMK
KyAgICAgICAgICAvLyBmb3IgY2FsbCB0byB0aGUgbGluayBmdW5jdGlvbi4KKyAgICAgICAgICAv
LyBOb3RlOiBUaGlzIHdpbGwgYWxyZWFkeSBjbG9uZSB0aGUgbm9kZXMuLi4KKyAgICAgICAgICAk
bGlua05vZGUgPSBqcUxpdGUoCisgICAgICAgICAgICB3cmFwVGVtcGxhdGUobmFtZXNwYWNlLCBq
cUxpdGUoJzxkaXY+JykuYXBwZW5kKCRjb21waWxlTm9kZXMpLmh0bWwoKSkKKyAgICAgICAgICAp
OworICAgICAgICB9IGVsc2UgaWYgKGNsb25lQ29ubmVjdEZuKSB7CisgICAgICAgICAgLy8gaW1w
b3J0YW50ISE6IHdlIG11c3QgY2FsbCBvdXIganFMaXRlLmNsb25lKCkgc2luY2UgdGhlIGpRdWVy
eSBvbmUgaXMgdHJ5aW5nIHRvIGJlIHNtYXJ0CisgICAgICAgICAgLy8gYW5kIHNvbWV0aW1lcyBj
aGFuZ2VzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIERPTS4KKyAgICAgICAgICAkbGlua05vZGUgPSBK
UUxpdGVQcm90b3R5cGUuY2xvbmUuY2FsbCgkY29tcGlsZU5vZGVzKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAkbGlua05vZGUgPSAkY29tcGlsZU5vZGVzOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHRyYW5zY2x1ZGVDb250cm9sbGVycykgeworICAgICAgICAgIGZvciAodmFyIGNv
bnRyb2xsZXJOYW1lIGluIHRyYW5zY2x1ZGVDb250cm9sbGVycykgeworICAgICAgICAgICAgJGxp
bmtOb2RlLmRhdGEoJyQnICsgY29udHJvbGxlck5hbWUgKyAnQ29udHJvbGxlcicsIHRyYW5zY2x1
ZGVDb250cm9sbGVyc1tjb250cm9sbGVyTmFtZV0uaW5zdGFuY2UpOworICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGNvbXBpbGUuJCRhZGRTY29wZUluZm8oJGxpbmtOb2RlLCBzY29w
ZSk7CisKKyAgICAgICAgaWYgKGNsb25lQ29ubmVjdEZuKSBjbG9uZUNvbm5lY3RGbigkbGlua05v
ZGUsIHNjb3BlKTsKKyAgICAgICAgaWYgKGNvbXBvc2l0ZUxpbmtGbikgY29tcG9zaXRlTGlua0Zu
KHNjb3BlLCAkbGlua05vZGUsICRsaW5rTm9kZSwgcGFyZW50Qm91bmRUcmFuc2NsdWRlRm4pOwor
ICAgICAgICByZXR1cm4gJGxpbmtOb2RlOworICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBkZXRlY3ROYW1lc3BhY2VGb3JDaGlsZEVsZW1lbnRzKHBhcmVudEVsZW1lbnQpIHsKKyAgICAg
IC8vIFRPRE86IE1ha2UgdGhpcyBkZXRlY3QgTWF0aE1MIGFzIHdlbGwuLi4KKyAgICAgIHZhciBu
b2RlID0gcGFyZW50RWxlbWVudCAmJiBwYXJlbnRFbGVtZW50WzBdOworICAgICAgaWYgKCFub2Rl
KSB7CisgICAgICAgIHJldHVybiAnaHRtbCc7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1
cm4gbm9kZU5hbWVfKG5vZGUpICE9PSAnZm9yZWlnbm9iamVjdCcgJiYgbm9kZS50b1N0cmluZygp
Lm1hdGNoKC9TVkcvKSA/ICdzdmcnIDogJ2h0bWwnOworICAgICAgfQorICAgIH0KKworICAgIC8q
KgorICAgICAqIENvbXBpbGUgZnVuY3Rpb24gbWF0Y2hlcyBlYWNoIG5vZGUgaW4gbm9kZUxpc3Qg
YWdhaW5zdCB0aGUgZGlyZWN0aXZlcy4gT25jZSBhbGwgZGlyZWN0aXZlcworICAgICAqIGZvciBh
IHBhcnRpY3VsYXIgbm9kZSBhcmUgY29sbGVjdGVkIHRoZWlyIGNvbXBpbGUgZnVuY3Rpb25zIGFy
ZSBleGVjdXRlZC4gVGhlIGNvbXBpbGUKKyAgICAgKiBmdW5jdGlvbnMgcmV0dXJuIHZhbHVlcyAt
IHRoZSBsaW5raW5nIGZ1bmN0aW9ucyAtIGFyZSBjb21iaW5lZCBpbnRvIGEgY29tcG9zaXRlIGxp
bmtpbmcKKyAgICAgKiBmdW5jdGlvbiwgd2hpY2ggaXMgdGhlIGEgbGlua2luZyBmdW5jdGlvbiBm
b3IgdGhlIG5vZGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge05vZGVMaXN0fSBub2RlTGlzdCBh
biBhcnJheSBvZiBub2RlcyBvciBOb2RlTGlzdCB0byBjb21waWxlCisgICAgICogQHBhcmFtIHtm
dW5jdGlvbihhbmd1bGFyLlNjb3BlLCBjbG9uZUF0dGFjaEZuPSl9IHRyYW5zY2x1ZGVGbiBBIGxp
bmtpbmcgZnVuY3Rpb24sIHdoZXJlIHRoZQorICAgICAqICAgICAgICBzY29wZSBhcmd1bWVudCBp
cyBhdXRvLWdlbmVyYXRlZCB0byB0aGUgbmV3IGNoaWxkIG9mIHRoZSB0cmFuc2NsdWRlZCBwYXJl
bnQgc2NvcGUuCisgICAgICogQHBhcmFtIHtET01FbGVtZW50PX0gJHJvb3RFbGVtZW50IElmIHRo
ZSBub2RlTGlzdCBpcyB0aGUgcm9vdCBvZiB0aGUgY29tcGlsYXRpb24gdHJlZSB0aGVuCisgICAg
ICogICAgICAgIHRoZSByb290RWxlbWVudCBtdXN0IGJlIHNldCB0aGUganFMaXRlIGNvbGxlY3Rp
b24gb2YgdGhlIGNvbXBpbGUgcm9vdC4gVGhpcyBpcworICAgICAqICAgICAgICBuZWVkZWQgc28g
dGhhdCB0aGUganFMaXRlIGNvbGxlY3Rpb24gaXRlbXMgY2FuIGJlIHJlcGxhY2VkIHdpdGggd2lk
Z2V0cy4KKyAgICAgKiBAcGFyYW0ge251bWJlcj19IG1heFByaW9yaXR5IE1heCBkaXJlY3RpdmUg
cHJpb3JpdHkuCisgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGNvbXBvc2l0ZSBsaW5raW5n
IGZ1bmN0aW9uIG9mIGFsbCBvZiB0aGUgbWF0Y2hlZCBkaXJlY3RpdmVzIG9yIG51bGwuCisgICAg
ICovCisgICAgZnVuY3Rpb24gY29tcGlsZU5vZGVzKG5vZGVMaXN0LCB0cmFuc2NsdWRlRm4sICRy
b290RWxlbWVudCwgbWF4UHJpb3JpdHksIGlnbm9yZURpcmVjdGl2ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcmV2aW91c0NvbXBpbGVDb250ZXh0KSB7CisgICAgICB2YXIgbGlua0Zu
cyA9IFtdLAorICAgICAgICAgIGF0dHJzLCBkaXJlY3RpdmVzLCBub2RlTGlua0ZuLCBjaGlsZE5v
ZGVzLCBjaGlsZExpbmtGbiwgbGlua0ZuRm91bmQsIG5vZGVMaW5rRm5Gb3VuZDsKKworICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBub2RlTGlzdC5sZW5ndGg7IGkrKykgeworICAgICAgICBhdHRy
cyA9IG5ldyBBdHRyaWJ1dGVzKCk7CisKKyAgICAgICAgLy8gd2UgbXVzdCBhbHdheXMgcmVmZXIg
dG8gbm9kZUxpc3RbaV0gc2luY2UgdGhlIG5vZGVzIGNhbiBiZSByZXBsYWNlZCB1bmRlcm5lYXRo
IHVzLgorICAgICAgICBkaXJlY3RpdmVzID0gY29sbGVjdERpcmVjdGl2ZXMobm9kZUxpc3RbaV0s
IFtdLCBhdHRycywgaSA9PT0gMCA/IG1heFByaW9yaXR5IDogdW5kZWZpbmVkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZURpcmVjdGl2ZSk7CisKKyAgICAg
ICAgbm9kZUxpbmtGbiA9IChkaXJlY3RpdmVzLmxlbmd0aCkKKyAgICAgICAgICAgID8gYXBwbHlE
aXJlY3RpdmVzVG9Ob2RlKGRpcmVjdGl2ZXMsIG5vZGVMaXN0W2ldLCBhdHRycywgdHJhbnNjbHVk
ZUZuLCAkcm9vdEVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG51bGwsIFtdLCBbXSwgcHJldmlvdXNDb21waWxlQ29udGV4dCkKKyAgICAgICAgICAgIDogbnVs
bDsKKworICAgICAgICBpZiAobm9kZUxpbmtGbiAmJiBub2RlTGlua0ZuLnNjb3BlKSB7CisgICAg
ICAgICAgY29tcGlsZS4kJGFkZFNjb3BlQ2xhc3MoYXR0cnMuJCRlbGVtZW50KTsKKyAgICAgICAg
fQorCisgICAgICAgIGNoaWxkTGlua0ZuID0gKG5vZGVMaW5rRm4gJiYgbm9kZUxpbmtGbi50ZXJt
aW5hbCB8fAorICAgICAgICAgICAgICAgICAgICAgICEoY2hpbGROb2RlcyA9IG5vZGVMaXN0W2ld
LmNoaWxkTm9kZXMpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIWNoaWxkTm9kZXMubGVuZ3Ro
KQorICAgICAgICAgICAgPyBudWxsCisgICAgICAgICAgICA6IGNvbXBpbGVOb2RlcyhjaGlsZE5v
ZGVzLAorICAgICAgICAgICAgICAgICBub2RlTGlua0ZuID8gKAorICAgICAgICAgICAgICAgICAg
KG5vZGVMaW5rRm4udHJhbnNjbHVkZU9uVGhpc0VsZW1lbnQgfHwgIW5vZGVMaW5rRm4udGVtcGxh
dGVPblRoaXNFbGVtZW50KQorICAgICAgICAgICAgICAgICAgICAgJiYgbm9kZUxpbmtGbi50cmFu
c2NsdWRlKSA6IHRyYW5zY2x1ZGVGbik7CisKKyAgICAgICAgaWYgKG5vZGVMaW5rRm4gfHwgY2hp
bGRMaW5rRm4pIHsKKyAgICAgICAgICBsaW5rRm5zLnB1c2goaSwgbm9kZUxpbmtGbiwgY2hpbGRM
aW5rRm4pOworICAgICAgICAgIGxpbmtGbkZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICBub2RlTGlu
a0ZuRm91bmQgPSBub2RlTGlua0ZuRm91bmQgfHwgbm9kZUxpbmtGbjsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vdXNlIHRoZSBwcmV2aW91cyBjb250ZXh0IG9ubHkgZm9yIHRoZSBmaXJzdCBlbGVt
ZW50IGluIHRoZSB2aXJ0dWFsIGdyb3VwCisgICAgICAgIHByZXZpb3VzQ29tcGlsZUNvbnRleHQg
PSBudWxsOworICAgICAgfQorCisgICAgICAvLyByZXR1cm4gYSBsaW5raW5nIGZ1bmN0aW9uIGlm
IHdlIGhhdmUgZm91bmQgYW55dGhpbmcsIG51bGwgb3RoZXJ3aXNlCisgICAgICByZXR1cm4gbGlu
a0ZuRm91bmQgPyBjb21wb3NpdGVMaW5rRm4gOiBudWxsOworCisgICAgICBmdW5jdGlvbiBjb21w
b3NpdGVMaW5rRm4oc2NvcGUsIG5vZGVMaXN0LCAkcm9vdEVsZW1lbnQsIHBhcmVudEJvdW5kVHJh
bnNjbHVkZUZuKSB7CisgICAgICAgIHZhciBub2RlTGlua0ZuLCBjaGlsZExpbmtGbiwgbm9kZSwg
Y2hpbGRTY29wZSwgaSwgaWksIGlkeCwgY2hpbGRCb3VuZFRyYW5zY2x1ZGVGbjsKKyAgICAgICAg
dmFyIHN0YWJsZU5vZGVMaXN0OworCisKKyAgICAgICAgaWYgKG5vZGVMaW5rRm5Gb3VuZCkgewor
ICAgICAgICAgIC8vIGNvcHkgbm9kZUxpc3Qgc28gdGhhdCBpZiBhIG5vZGVMaW5rRm4gcmVtb3Zl
cyBvciBhZGRzIGFuIGVsZW1lbnQgYXQgdGhpcyBET00gbGV2ZWwgb3VyCisgICAgICAgICAgLy8g
b2Zmc2V0cyBkb24ndCBnZXQgc2NyZXdlZCB1cAorICAgICAgICAgIHZhciBub2RlTGlzdExlbmd0
aCA9IG5vZGVMaXN0Lmxlbmd0aDsKKyAgICAgICAgICBzdGFibGVOb2RlTGlzdCA9IG5ldyBBcnJh
eShub2RlTGlzdExlbmd0aCk7CisKKyAgICAgICAgICAvLyBjcmVhdGUgYSBzcGFyc2UgYXJyYXkg
Ynkgb25seSBjb3B5aW5nIHRoZSBlbGVtZW50cyB3aGljaCBoYXZlIGEgbGlua0ZuCisgICAgICAg
ICAgZm9yIChpID0gMDsgaSA8IGxpbmtGbnMubGVuZ3RoOyBpKz0zKSB7CisgICAgICAgICAgICBp
ZHggPSBsaW5rRm5zW2ldOworICAgICAgICAgICAgc3RhYmxlTm9kZUxpc3RbaWR4XSA9IG5vZGVM
aXN0W2lkeF07CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHN0YWJs
ZU5vZGVMaXN0ID0gbm9kZUxpc3Q7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGkgPSAwLCBp
aSA9IGxpbmtGbnMubGVuZ3RoOyBpIDwgaWk7KSB7CisgICAgICAgICAgbm9kZSA9IHN0YWJsZU5v
ZGVMaXN0W2xpbmtGbnNbaSsrXV07CisgICAgICAgICAgbm9kZUxpbmtGbiA9IGxpbmtGbnNbaSsr
XTsKKyAgICAgICAgICBjaGlsZExpbmtGbiA9IGxpbmtGbnNbaSsrXTsKKworICAgICAgICAgIGlm
IChub2RlTGlua0ZuKSB7CisgICAgICAgICAgICBpZiAobm9kZUxpbmtGbi5zY29wZSkgeworICAg
ICAgICAgICAgICBjaGlsZFNjb3BlID0gc2NvcGUuJG5ldygpOworICAgICAgICAgICAgICBjb21w
aWxlLiQkYWRkU2NvcGVJbmZvKGpxTGl0ZShub2RlKSwgY2hpbGRTY29wZSk7CisgICAgICAgICAg
ICAgIHZhciBkZXN0cm95QmluZGluZ3MgPSBub2RlTGlua0ZuLiQkZGVzdHJveUJpbmRpbmdzOwor
ICAgICAgICAgICAgICBpZiAoZGVzdHJveUJpbmRpbmdzKSB7CisgICAgICAgICAgICAgICAgbm9k
ZUxpbmtGbi4kJGRlc3Ryb3lCaW5kaW5ncyA9IG51bGw7CisgICAgICAgICAgICAgICAgY2hpbGRT
Y29wZS4kb24oJyRkZXN0cm95ZWQnLCBkZXN0cm95QmluZGluZ3MpOworICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBjaGlsZFNjb3BlID0gc2NvcGU7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChub2RlTGlua0ZuLnRyYW5zY2x1ZGVP
blRoaXNFbGVtZW50KSB7CisgICAgICAgICAgICAgIGNoaWxkQm91bmRUcmFuc2NsdWRlRm4gPSBj
cmVhdGVCb3VuZFRyYW5zY2x1ZGVGbigKKyAgICAgICAgICAgICAgICAgIHNjb3BlLCBub2RlTGlu
a0ZuLnRyYW5zY2x1ZGUsIHBhcmVudEJvdW5kVHJhbnNjbHVkZUZuKTsKKworICAgICAgICAgICAg
fSBlbHNlIGlmICghbm9kZUxpbmtGbi50ZW1wbGF0ZU9uVGhpc0VsZW1lbnQgJiYgcGFyZW50Qm91
bmRUcmFuc2NsdWRlRm4pIHsKKyAgICAgICAgICAgICAgY2hpbGRCb3VuZFRyYW5zY2x1ZGVGbiA9
IHBhcmVudEJvdW5kVHJhbnNjbHVkZUZuOworCisgICAgICAgICAgICB9IGVsc2UgaWYgKCFwYXJl
bnRCb3VuZFRyYW5zY2x1ZGVGbiAmJiB0cmFuc2NsdWRlRm4pIHsKKyAgICAgICAgICAgICAgY2hp
bGRCb3VuZFRyYW5zY2x1ZGVGbiA9IGNyZWF0ZUJvdW5kVHJhbnNjbHVkZUZuKHNjb3BlLCB0cmFu
c2NsdWRlRm4pOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBjaGlsZEJv
dW5kVHJhbnNjbHVkZUZuID0gbnVsbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbm9k
ZUxpbmtGbihjaGlsZExpbmtGbiwgY2hpbGRTY29wZSwgbm9kZSwgJHJvb3RFbGVtZW50LCBjaGls
ZEJvdW5kVHJhbnNjbHVkZUZuLAorICAgICAgICAgICAgICAgICAgICAgICBub2RlTGlua0ZuKTsK
KworICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRMaW5rRm4pIHsKKyAgICAgICAgICAgIGNoaWxk
TGlua0ZuKHNjb3BlLCBub2RlLmNoaWxkTm9kZXMsIHVuZGVmaW5lZCwgcGFyZW50Qm91bmRUcmFu
c2NsdWRlRm4pOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAg
IGZ1bmN0aW9uIGNyZWF0ZUJvdW5kVHJhbnNjbHVkZUZuKHNjb3BlLCB0cmFuc2NsdWRlRm4sIHBy
ZXZpb3VzQm91bmRUcmFuc2NsdWRlRm4pIHsKKworICAgICAgdmFyIGJvdW5kVHJhbnNjbHVkZUZu
ID0gZnVuY3Rpb24odHJhbnNjbHVkZWRTY29wZSwgY2xvbmVGbiwgY29udHJvbGxlcnMsIGZ1dHVy
ZVBhcmVudEVsZW1lbnQsIGNvbnRhaW5pbmdTY29wZSkgeworCisgICAgICAgIGlmICghdHJhbnNj
bHVkZWRTY29wZSkgeworICAgICAgICAgIHRyYW5zY2x1ZGVkU2NvcGUgPSBzY29wZS4kbmV3KGZh
bHNlLCBjb250YWluaW5nU2NvcGUpOworICAgICAgICAgIHRyYW5zY2x1ZGVkU2NvcGUuJCR0cmFu
c2NsdWRlZCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJhbnNjbHVkZUZu
KHRyYW5zY2x1ZGVkU2NvcGUsIGNsb25lRm4sIHsKKyAgICAgICAgICBwYXJlbnRCb3VuZFRyYW5z
Y2x1ZGVGbjogcHJldmlvdXNCb3VuZFRyYW5zY2x1ZGVGbiwKKyAgICAgICAgICB0cmFuc2NsdWRl
Q29udHJvbGxlcnM6IGNvbnRyb2xsZXJzLAorICAgICAgICAgIGZ1dHVyZVBhcmVudEVsZW1lbnQ6
IGZ1dHVyZVBhcmVudEVsZW1lbnQKKyAgICAgICAgfSk7CisgICAgICB9OworCisgICAgICByZXR1
cm4gYm91bmRUcmFuc2NsdWRlRm47CisgICAgfQorCisgICAgLyoqCisgICAgICogTG9va3MgZm9y
IGRpcmVjdGl2ZXMgb24gdGhlIGdpdmVuIG5vZGUgYW5kIGFkZHMgdGhlbSB0byB0aGUgZGlyZWN0
aXZlIGNvbGxlY3Rpb24gd2hpY2ggaXMKKyAgICAgKiBzb3J0ZWQuCisgICAgICoKKyAgICAgKiBA
cGFyYW0gbm9kZSBOb2RlIHRvIHNlYXJjaC4KKyAgICAgKiBAcGFyYW0gZGlyZWN0aXZlcyBBbiBh
cnJheSB0byB3aGljaCB0aGUgZGlyZWN0aXZlcyBhcmUgYWRkZWQgdG8uIFRoaXMgYXJyYXkgaXMg
c29ydGVkIGJlZm9yZQorICAgICAqICAgICAgICB0aGUgZnVuY3Rpb24gcmV0dXJucy4KKyAgICAg
KiBAcGFyYW0gYXR0cnMgVGhlIHNoYXJlZCBhdHRycyBvYmplY3Qgd2hpY2ggaXMgdXNlZCB0byBw
b3B1bGF0ZSB0aGUgbm9ybWFsaXplZCBhdHRyaWJ1dGVzLgorICAgICAqIEBwYXJhbSB7bnVtYmVy
PX0gbWF4UHJpb3JpdHkgTWF4IGRpcmVjdGl2ZSBwcmlvcml0eS4KKyAgICAgKi8KKyAgICBmdW5j
dGlvbiBjb2xsZWN0RGlyZWN0aXZlcyhub2RlLCBkaXJlY3RpdmVzLCBhdHRycywgbWF4UHJpb3Jp
dHksIGlnbm9yZURpcmVjdGl2ZSkgeworICAgICAgdmFyIG5vZGVUeXBlID0gbm9kZS5ub2RlVHlw
ZSwKKyAgICAgICAgICBhdHRyc01hcCA9IGF0dHJzLiRhdHRyLAorICAgICAgICAgIG1hdGNoLAor
ICAgICAgICAgIGNsYXNzTmFtZTsKKworICAgICAgc3dpdGNoIChub2RlVHlwZSkgeworICAgICAg
ICBjYXNlIE5PREVfVFlQRV9FTEVNRU5UOiAvKiBFbGVtZW50ICovCisgICAgICAgICAgLy8gdXNl
IHRoZSBub2RlIG5hbWU6IDxkaXJlY3RpdmU+CisgICAgICAgICAgYWRkRGlyZWN0aXZlKGRpcmVj
dGl2ZXMsCisgICAgICAgICAgICAgIGRpcmVjdGl2ZU5vcm1hbGl6ZShub2RlTmFtZV8obm9kZSkp
LCAnRScsIG1heFByaW9yaXR5LCBpZ25vcmVEaXJlY3RpdmUpOworCisgICAgICAgICAgLy8gaXRl
cmF0ZSBvdmVyIHRoZSBhdHRyaWJ1dGVzCisgICAgICAgICAgZm9yICh2YXIgYXR0ciwgbmFtZSwg
bk5hbWUsIG5nQXR0ck5hbWUsIHZhbHVlLCBpc05nQXR0ciwgbkF0dHJzID0gbm9kZS5hdHRyaWJ1
dGVzLAorICAgICAgICAgICAgICAgICAgIGogPSAwLCBqaiA9IG5BdHRycyAmJiBuQXR0cnMubGVu
Z3RoOyBqIDwgamo7IGorKykgeworICAgICAgICAgICAgdmFyIGF0dHJTdGFydE5hbWUgPSBmYWxz
ZTsKKyAgICAgICAgICAgIHZhciBhdHRyRW5kTmFtZSA9IGZhbHNlOworCisgICAgICAgICAgICBh
dHRyID0gbkF0dHJzW2pdOworICAgICAgICAgICAgbmFtZSA9IGF0dHIubmFtZTsKKyAgICAgICAg
ICAgIHZhbHVlID0gdHJpbShhdHRyLnZhbHVlKTsKKworICAgICAgICAgICAgLy8gc3VwcG9ydCBu
Z0F0dHIgYXR0cmlidXRlIGJpbmRpbmcKKyAgICAgICAgICAgIG5nQXR0ck5hbWUgPSBkaXJlY3Rp
dmVOb3JtYWxpemUobmFtZSk7CisgICAgICAgICAgICBpZiAoaXNOZ0F0dHIgPSBOR19BVFRSX0JJ
TkRJTkcudGVzdChuZ0F0dHJOYW1lKSkgeworICAgICAgICAgICAgICBuYW1lID0gbmFtZS5yZXBs
YWNlKFBSRUZJWF9SRUdFWFAsICcnKQorICAgICAgICAgICAgICAgIC5zdWJzdHIoOCkucmVwbGFj
ZSgvXyguKS9nLCBmdW5jdGlvbihtYXRjaCwgbGV0dGVyKSB7CisgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbGV0dGVyLnRvVXBwZXJDYXNlKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHZhciBkaXJlY3RpdmVOTmFtZSA9IG5nQXR0ck5hbWUucmVw
bGFjZSgvKFN0YXJ0fEVuZCkkLywgJycpOworICAgICAgICAgICAgaWYgKGRpcmVjdGl2ZUlzTXVs
dGlFbGVtZW50KGRpcmVjdGl2ZU5OYW1lKSkgeworICAgICAgICAgICAgICBpZiAobmdBdHRyTmFt
ZSA9PT0gZGlyZWN0aXZlTk5hbWUgKyAnU3RhcnQnKSB7CisgICAgICAgICAgICAgICAgYXR0clN0
YXJ0TmFtZSA9IG5hbWU7CisgICAgICAgICAgICAgICAgYXR0ckVuZE5hbWUgPSBuYW1lLnN1YnN0
cigwLCBuYW1lLmxlbmd0aCAtIDUpICsgJ2VuZCc7CisgICAgICAgICAgICAgICAgbmFtZSA9IG5h
bWUuc3Vic3RyKDAsIG5hbWUubGVuZ3RoIC0gNik7CisgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgbk5hbWUgPSBkaXJlY3RpdmVOb3JtYWxpemUobmFtZS50b0xv
d2VyQ2FzZSgpKTsKKyAgICAgICAgICAgIGF0dHJzTWFwW25OYW1lXSA9IG5hbWU7CisgICAgICAg
ICAgICBpZiAoaXNOZ0F0dHIgfHwgIWF0dHJzLmhhc093blByb3BlcnR5KG5OYW1lKSkgeworICAg
ICAgICAgICAgICAgIGF0dHJzW25OYW1lXSA9IHZhbHVlOworICAgICAgICAgICAgICAgIGlmIChn
ZXRCb29sZWFuQXR0ck5hbWUobm9kZSwgbk5hbWUpKSB7CisgICAgICAgICAgICAgICAgICBhdHRy
c1tuTmFtZV0gPSB0cnVlOyAvLyBwcmVzZW5jZSBtZWFucyB0cnVlCisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYWRkQXR0ckludGVycG9sYXRlRGlyZWN0aXZl
KG5vZGUsIGRpcmVjdGl2ZXMsIHZhbHVlLCBuTmFtZSwgaXNOZ0F0dHIpOworICAgICAgICAgICAg
YWRkRGlyZWN0aXZlKGRpcmVjdGl2ZXMsIG5OYW1lLCAnQScsIG1heFByaW9yaXR5LCBpZ25vcmVE
aXJlY3RpdmUsIGF0dHJTdGFydE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJF
bmROYW1lKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICAvLyB1c2UgY2xhc3MgYXMgZGlyZWN0
aXZlCisgICAgICAgICAgY2xhc3NOYW1lID0gbm9kZS5jbGFzc05hbWU7CisgICAgICAgICAgaWYg
KGlzT2JqZWN0KGNsYXNzTmFtZSkpIHsKKyAgICAgICAgICAgICAgLy8gTWF5YmUgU1ZHQW5pbWF0
ZWRTdHJpbmcKKyAgICAgICAgICAgICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lLmFuaW1WYWw7Cisg
ICAgICAgICAgfQorICAgICAgICAgIGlmIChpc1N0cmluZyhjbGFzc05hbWUpICYmIGNsYXNzTmFt
ZSAhPT0gJycpIHsKKyAgICAgICAgICAgIHdoaWxlIChtYXRjaCA9IENMQVNTX0RJUkVDVElWRV9S
RUdFWFAuZXhlYyhjbGFzc05hbWUpKSB7CisgICAgICAgICAgICAgIG5OYW1lID0gZGlyZWN0aXZl
Tm9ybWFsaXplKG1hdGNoWzJdKTsKKyAgICAgICAgICAgICAgaWYgKGFkZERpcmVjdGl2ZShkaXJl
Y3RpdmVzLCBuTmFtZSwgJ0MnLCBtYXhQcmlvcml0eSwgaWdub3JlRGlyZWN0aXZlKSkgeworICAg
ICAgICAgICAgICAgIGF0dHJzW25OYW1lXSA9IHRyaW0obWF0Y2hbM10pOworICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS5zdWJzdHIobWF0Y2guaW5k
ZXggKyBtYXRjaFswXS5sZW5ndGgpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOT0RFX1RZUEVfVEVYVDogLyogVGV4dCBOb2RlICov
CisgICAgICAgICAgaWYgKG1zaWUgPT09IDExKSB7CisgICAgICAgICAgICAvLyBXb3JrYXJvdW5k
IGZvciAjMTE3ODEKKyAgICAgICAgICAgIHdoaWxlIChub2RlLnBhcmVudE5vZGUgJiYgbm9kZS5u
ZXh0U2libGluZyAmJiBub2RlLm5leHRTaWJsaW5nLm5vZGVUeXBlID09PSBOT0RFX1RZUEVfVEVY
VCkgeworICAgICAgICAgICAgICBub2RlLm5vZGVWYWx1ZSA9IG5vZGUubm9kZVZhbHVlICsgbm9k
ZS5uZXh0U2libGluZy5ub2RlVmFsdWU7CisgICAgICAgICAgICAgIG5vZGUucGFyZW50Tm9kZS5y
ZW1vdmVDaGlsZChub2RlLm5leHRTaWJsaW5nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9
CisgICAgICAgICAgYWRkVGV4dEludGVycG9sYXRlRGlyZWN0aXZlKGRpcmVjdGl2ZXMsIG5vZGUu
bm9kZVZhbHVlKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOT0RFX1RZUEVfQ09N
TUVOVDogLyogQ29tbWVudCAqLworICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBtYXRjaCA9
IENPTU1FTlRfRElSRUNUSVZFX1JFR0VYUC5leGVjKG5vZGUubm9kZVZhbHVlKTsKKyAgICAgICAg
ICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgICBuTmFtZSA9IGRpcmVjdGl2ZU5vcm1hbGl6
ZShtYXRjaFsxXSk7CisgICAgICAgICAgICAgIGlmIChhZGREaXJlY3RpdmUoZGlyZWN0aXZlcywg
bk5hbWUsICdNJywgbWF4UHJpb3JpdHksIGlnbm9yZURpcmVjdGl2ZSkpIHsKKyAgICAgICAgICAg
ICAgICBhdHRyc1tuTmFtZV0gPSB0cmltKG1hdGNoWzJdKTsKKyAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIC8vIHR1cm5z
IG91dCB0aGF0IHVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcyBJRTkgdGhyb3dzIGVycm9ycyB3aGVu
IG9uZSBhdHRlbXB0cyB0byByZWFkCisgICAgICAgICAgICAvLyBjb21tZW50J3Mgbm9kZSB2YWx1
ZS4KKyAgICAgICAgICAgIC8vIEp1c3QgaWdub3JlIGl0IGFuZCBjb250aW51ZS4gKENhbid0IHNl
ZW0gdG8gcmVwcm9kdWNlIGluIHRlc3QgY2FzZS4pCisgICAgICAgICAgfQorICAgICAgICAgIGJy
ZWFrOworICAgICAgfQorCisgICAgICBkaXJlY3RpdmVzLnNvcnQoYnlQcmlvcml0eSk7CisgICAg
ICByZXR1cm4gZGlyZWN0aXZlczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHaXZlbiBhIG5v
ZGUgd2l0aCBhbiBkaXJlY3RpdmUtc3RhcnQgaXQgY29sbGVjdHMgYWxsIG9mIHRoZSBzaWJsaW5n
cyB1bnRpbCBpdCBmaW5kcworICAgICAqIGRpcmVjdGl2ZS1lbmQuCisgICAgICogQHBhcmFtIG5v
ZGUKKyAgICAgKiBAcGFyYW0gYXR0clN0YXJ0CisgICAgICogQHBhcmFtIGF0dHJFbmQKKyAgICAg
KiBAcmV0dXJucyB7Kn0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBncm91cFNjYW4obm9kZSwgYXR0
clN0YXJ0LCBhdHRyRW5kKSB7CisgICAgICB2YXIgbm9kZXMgPSBbXTsKKyAgICAgIHZhciBkZXB0
aCA9IDA7CisgICAgICBpZiAoYXR0clN0YXJ0ICYmIG5vZGUuaGFzQXR0cmlidXRlICYmIG5vZGUu
aGFzQXR0cmlidXRlKGF0dHJTdGFydCkpIHsKKyAgICAgICAgZG8geworICAgICAgICAgIGlmICgh
bm9kZSkgeworICAgICAgICAgICAgdGhyb3cgJGNvbXBpbGVNaW5FcnIoJ3V0ZXJkaXInLAorICAg
ICAgICAgICAgICAgICAgICAgICJVbnRlcm1pbmF0ZWQgYXR0cmlidXRlLCBmb3VuZCAnezB9JyBi
dXQgbm8gbWF0Y2hpbmcgJ3sxfScgZm91bmQuIiwKKyAgICAgICAgICAgICAgICAgICAgICBhdHRy
U3RhcnQsIGF0dHJFbmQpOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAobm9kZS5ub2RlVHlw
ZSA9PSBOT0RFX1RZUEVfRUxFTUVOVCkgeworICAgICAgICAgICAgaWYgKG5vZGUuaGFzQXR0cmli
dXRlKGF0dHJTdGFydCkpIGRlcHRoKys7CisgICAgICAgICAgICBpZiAobm9kZS5oYXNBdHRyaWJ1
dGUoYXR0ckVuZCkpIGRlcHRoLS07CisgICAgICAgICAgfQorICAgICAgICAgIG5vZGVzLnB1c2go
bm9kZSk7CisgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7CisgICAgICAgIH0gd2hp
bGUgKGRlcHRoID4gMCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBub2Rlcy5wdXNoKG5vZGUp
OworICAgICAgfQorCisgICAgICByZXR1cm4ganFMaXRlKG5vZGVzKTsKKyAgICB9CisKKyAgICAv
KioKKyAgICAgKiBXcmFwcGVyIGZvciBsaW5raW5nIGZ1bmN0aW9uIHdoaWNoIGNvbnZlcnRzIG5v
cm1hbCBsaW5raW5nIGZ1bmN0aW9uIGludG8gYSBncm91cGVkCisgICAgICogbGlua2luZyBmdW5j
dGlvbi4KKyAgICAgKiBAcGFyYW0gbGlua0ZuCisgICAgICogQHBhcmFtIGF0dHJTdGFydAorICAg
ICAqIEBwYXJhbSBhdHRyRW5kCisgICAgICogQHJldHVybnMge0Z1bmN0aW9ufQorICAgICAqLwor
ICAgIGZ1bmN0aW9uIGdyb3VwRWxlbWVudHNMaW5rRm5XcmFwcGVyKGxpbmtGbiwgYXR0clN0YXJ0
LCBhdHRyRW5kKSB7CisgICAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHJz
LCBjb250cm9sbGVycywgdHJhbnNjbHVkZUZuKSB7CisgICAgICAgIGVsZW1lbnQgPSBncm91cFNj
YW4oZWxlbWVudFswXSwgYXR0clN0YXJ0LCBhdHRyRW5kKTsKKyAgICAgICAgcmV0dXJuIGxpbmtG
bihzY29wZSwgZWxlbWVudCwgYXR0cnMsIGNvbnRyb2xsZXJzLCB0cmFuc2NsdWRlRm4pOworICAg
ICAgfTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPbmNlIHRoZSBkaXJlY3RpdmVzIGhhdmUg
YmVlbiBjb2xsZWN0ZWQsIHRoZWlyIGNvbXBpbGUgZnVuY3Rpb25zIGFyZSBleGVjdXRlZC4gVGhp
cyBtZXRob2QKKyAgICAgKiBpcyByZXNwb25zaWJsZSBmb3IgaW5saW5pbmcgZGlyZWN0aXZlIHRl
bXBsYXRlcyBhcyB3ZWxsIGFzIHRlcm1pbmF0aW5nIHRoZSBhcHBsaWNhdGlvbgorICAgICAqIG9m
IHRoZSBkaXJlY3RpdmVzIGlmIHRoZSB0ZXJtaW5hbCBkaXJlY3RpdmUgaGFzIGJlZW4gcmVhY2hl
ZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSB7QXJyYXl9IGRpcmVjdGl2ZXMgQXJyYXkgb2YgY29s
bGVjdGVkIGRpcmVjdGl2ZXMgdG8gZXhlY3V0ZSB0aGVpciBjb21waWxlIGZ1bmN0aW9uLgorICAg
ICAqICAgICAgICB0aGlzIG5lZWRzIHRvIGJlIHByZS1zb3J0ZWQgYnkgcHJpb3JpdHkgb3JkZXIu
CisgICAgICogQHBhcmFtIHtOb2RlfSBjb21waWxlTm9kZSBUaGUgcmF3IERPTSBub2RlIHRvIGFw
cGx5IHRoZSBjb21waWxlIGZ1bmN0aW9ucyB0bworICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0ZW1w
bGF0ZUF0dHJzIFRoZSBzaGFyZWQgYXR0cmlidXRlIGZ1bmN0aW9uCisgICAgICogQHBhcmFtIHtm
dW5jdGlvbihhbmd1bGFyLlNjb3BlLCBjbG9uZUF0dGFjaEZuPSl9IHRyYW5zY2x1ZGVGbiBBIGxp
bmtpbmcgZnVuY3Rpb24sIHdoZXJlIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZSBhcmd1bWVudCBpcyBhdXRvLWdlbmVyYXRl
ZCB0byB0aGUgbmV3CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoaWxkIG9mIHRoZSB0cmFuc2NsdWRlZCBwYXJlbnQgc2NvcGUuCisgICAg
ICogQHBhcmFtIHtKUUxpdGV9IGpxQ29sbGVjdGlvbiBJZiB3ZSBhcmUgd29ya2luZyBvbiB0aGUg
cm9vdCBvZiB0aGUgY29tcGlsZSB0cmVlIHRoZW4gdGhpcworICAgICAqICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXJndW1lbnQgaGFzIHRoZSByb290IGpxTGl0ZSBhcnJheSBzbyB0aGF0
IHdlIGNhbiByZXBsYWNlIG5vZGVzCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvbiBpdC4KKyAgICAgKiBAcGFyYW0ge09iamVjdD19IG9yaWdpbmFsUmVwbGFjZURpcmVjdGl2
ZSBBbiBvcHRpb25hbCBkaXJlY3RpdmUgdGhhdCB3aWxsIGJlIGlnbm9yZWQgd2hlbgorICAgICAq
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGluZyB0aGUg
dHJhbnNjbHVzaW9uLgorICAgICAqIEBwYXJhbSB7QXJyYXkuPEZ1bmN0aW9uPn0gcHJlTGlua0Zu
cworICAgICAqIEBwYXJhbSB7QXJyYXkuPEZ1bmN0aW9uPn0gcG9zdExpbmtGbnMKKyAgICAgKiBA
cGFyYW0ge09iamVjdH0gcHJldmlvdXNDb21waWxlQ29udGV4dCBDb250ZXh0IHVzZWQgZm9yIHBy
ZXZpb3VzIGNvbXBpbGF0aW9uIG9mIHRoZSBjdXJyZW50CisgICAgICogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZQorICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0g
bGlua0ZuCisgICAgICovCisgICAgZnVuY3Rpb24gYXBwbHlEaXJlY3RpdmVzVG9Ob2RlKGRpcmVj
dGl2ZXMsIGNvbXBpbGVOb2RlLCB0ZW1wbGF0ZUF0dHJzLCB0cmFuc2NsdWRlRm4sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpxQ29sbGVjdGlvbiwgb3JpZ2luYWxSZXBsYWNl
RGlyZWN0aXZlLCBwcmVMaW5rRm5zLCBwb3N0TGlua0ZucywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJldmlvdXNDb21waWxlQ29udGV4dCkgeworICAgICAgcHJldmlvdXND
b21waWxlQ29udGV4dCA9IHByZXZpb3VzQ29tcGlsZUNvbnRleHQgfHwge307CisKKyAgICAgIHZh
ciB0ZXJtaW5hbFByaW9yaXR5ID0gLU51bWJlci5NQVhfVkFMVUUsCisgICAgICAgICAgbmV3U2Nv
cGVEaXJlY3RpdmUgPSBwcmV2aW91c0NvbXBpbGVDb250ZXh0Lm5ld1Njb3BlRGlyZWN0aXZlLAor
ICAgICAgICAgIGNvbnRyb2xsZXJEaXJlY3RpdmVzID0gcHJldmlvdXNDb21waWxlQ29udGV4dC5j
b250cm9sbGVyRGlyZWN0aXZlcywKKyAgICAgICAgICBuZXdJc29sYXRlU2NvcGVEaXJlY3RpdmUg
PSBwcmV2aW91c0NvbXBpbGVDb250ZXh0Lm5ld0lzb2xhdGVTY29wZURpcmVjdGl2ZSwKKyAgICAg
ICAgICB0ZW1wbGF0ZURpcmVjdGl2ZSA9IHByZXZpb3VzQ29tcGlsZUNvbnRleHQudGVtcGxhdGVE
aXJlY3RpdmUsCisgICAgICAgICAgbm9uVGxiVHJhbnNjbHVkZURpcmVjdGl2ZSA9IHByZXZpb3Vz
Q29tcGlsZUNvbnRleHQubm9uVGxiVHJhbnNjbHVkZURpcmVjdGl2ZSwKKyAgICAgICAgICBoYXNU
cmFuc2NsdWRlRGlyZWN0aXZlID0gZmFsc2UsCisgICAgICAgICAgaGFzVGVtcGxhdGUgPSBmYWxz
ZSwKKyAgICAgICAgICBoYXNFbGVtZW50VHJhbnNjbHVkZURpcmVjdGl2ZSA9IHByZXZpb3VzQ29t
cGlsZUNvbnRleHQuaGFzRWxlbWVudFRyYW5zY2x1ZGVEaXJlY3RpdmUsCisgICAgICAgICAgJGNv
bXBpbGVOb2RlID0gdGVtcGxhdGVBdHRycy4kJGVsZW1lbnQgPSBqcUxpdGUoY29tcGlsZU5vZGUp
LAorICAgICAgICAgIGRpcmVjdGl2ZSwKKyAgICAgICAgICBkaXJlY3RpdmVOYW1lLAorICAgICAg
ICAgICR0ZW1wbGF0ZSwKKyAgICAgICAgICByZXBsYWNlRGlyZWN0aXZlID0gb3JpZ2luYWxSZXBs
YWNlRGlyZWN0aXZlLAorICAgICAgICAgIGNoaWxkVHJhbnNjbHVkZUZuID0gdHJhbnNjbHVkZUZu
LAorICAgICAgICAgIGxpbmtGbiwKKyAgICAgICAgICBkaXJlY3RpdmVWYWx1ZTsKKworICAgICAg
Ly8gZXhlY3V0ZXMgYWxsIGRpcmVjdGl2ZXMgb24gdGhlIGN1cnJlbnQgZWxlbWVudAorICAgICAg
Zm9yICh2YXIgaSA9IDAsIGlpID0gZGlyZWN0aXZlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7Cisg
ICAgICAgIGRpcmVjdGl2ZSA9IGRpcmVjdGl2ZXNbaV07CisgICAgICAgIHZhciBhdHRyU3RhcnQg
PSBkaXJlY3RpdmUuJCRzdGFydDsKKyAgICAgICAgdmFyIGF0dHJFbmQgPSBkaXJlY3RpdmUuJCRl
bmQ7CisKKyAgICAgICAgLy8gY29sbGVjdCBtdWx0aWJsb2NrIHNlY3Rpb25zCisgICAgICAgIGlm
IChhdHRyU3RhcnQpIHsKKyAgICAgICAgICAkY29tcGlsZU5vZGUgPSBncm91cFNjYW4oY29tcGls
ZU5vZGUsIGF0dHJTdGFydCwgYXR0ckVuZCk7CisgICAgICAgIH0KKyAgICAgICAgJHRlbXBsYXRl
ID0gdW5kZWZpbmVkOworCisgICAgICAgIGlmICh0ZXJtaW5hbFByaW9yaXR5ID4gZGlyZWN0aXZl
LnByaW9yaXR5KSB7CisgICAgICAgICAgYnJlYWs7IC8vIHByZXZlbnQgZnVydGhlciBwcm9jZXNz
aW5nIG9mIGRpcmVjdGl2ZXMKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkaXJlY3RpdmVWYWx1
ZSA9IGRpcmVjdGl2ZS5zY29wZSkgeworCisgICAgICAgICAgLy8gc2tpcCB0aGUgY2hlY2sgZm9y
IGRpcmVjdGl2ZXMgd2l0aCBhc3luYyB0ZW1wbGF0ZXMsIHdlJ2xsIGNoZWNrIHRoZSBkZXJpdmVk
IHN5bmMKKyAgICAgICAgICAvLyBkaXJlY3RpdmUgd2hlbiB0aGUgdGVtcGxhdGUgYXJyaXZlcwor
ICAgICAgICAgIGlmICghZGlyZWN0aXZlLnRlbXBsYXRlVXJsKSB7CisgICAgICAgICAgICBpZiAo
aXNPYmplY3QoZGlyZWN0aXZlVmFsdWUpKSB7CisgICAgICAgICAgICAgIC8vIFRoaXMgZGlyZWN0
aXZlIGlzIHRyeWluZyB0byBhZGQgYW4gaXNvbGF0ZWQgc2NvcGUuCisgICAgICAgICAgICAgIC8v
IENoZWNrIHRoYXQgdGhlcmUgaXMgbm8gc2NvcGUgb2YgYW55IGtpbmQgYWxyZWFkeQorICAgICAg
ICAgICAgICBhc3NlcnROb0R1cGxpY2F0ZSgnbmV3L2lzb2xhdGVkIHNjb3BlJywgbmV3SXNvbGF0
ZVNjb3BlRGlyZWN0aXZlIHx8IG5ld1Njb3BlRGlyZWN0aXZlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkaXJlY3RpdmUsICRjb21waWxlTm9kZSk7CisgICAgICAgICAgICAgIG5l
d0lzb2xhdGVTY29wZURpcmVjdGl2ZSA9IGRpcmVjdGl2ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgIC8vIFRoaXMgZGlyZWN0aXZlIGlzIHRyeWluZyB0byBhZGQgYSBjaGls
ZCBzY29wZS4KKyAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGVyZSBpcyBubyBpc29sYXRl
ZCBzY29wZSBhbHJlYWR5CisgICAgICAgICAgICAgIGFzc2VydE5vRHVwbGljYXRlKCduZXcvaXNv
bGF0ZWQgc2NvcGUnLCBuZXdJc29sYXRlU2NvcGVEaXJlY3RpdmUsIGRpcmVjdGl2ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbXBpbGVOb2RlKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICB9CisKKyAgICAgICAgICBuZXdTY29wZURpcmVjdGl2ZSA9IG5ld1Njb3BlRGly
ZWN0aXZlIHx8IGRpcmVjdGl2ZTsKKyAgICAgICAgfQorCisgICAgICAgIGRpcmVjdGl2ZU5hbWUg
PSBkaXJlY3RpdmUubmFtZTsKKworICAgICAgICBpZiAoIWRpcmVjdGl2ZS50ZW1wbGF0ZVVybCAm
JiBkaXJlY3RpdmUuY29udHJvbGxlcikgeworICAgICAgICAgIGRpcmVjdGl2ZVZhbHVlID0gZGly
ZWN0aXZlLmNvbnRyb2xsZXI7CisgICAgICAgICAgY29udHJvbGxlckRpcmVjdGl2ZXMgPSBjb250
cm9sbGVyRGlyZWN0aXZlcyB8fCBjcmVhdGVNYXAoKTsKKyAgICAgICAgICBhc3NlcnROb0R1cGxp
Y2F0ZSgiJyIgKyBkaXJlY3RpdmVOYW1lICsgIicgY29udHJvbGxlciIsCisgICAgICAgICAgICAg
IGNvbnRyb2xsZXJEaXJlY3RpdmVzW2RpcmVjdGl2ZU5hbWVdLCBkaXJlY3RpdmUsICRjb21waWxl
Tm9kZSk7CisgICAgICAgICAgY29udHJvbGxlckRpcmVjdGl2ZXNbZGlyZWN0aXZlTmFtZV0gPSBk
aXJlY3RpdmU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZGlyZWN0aXZlVmFsdWUgPSBkaXJl
Y3RpdmUudHJhbnNjbHVkZSkgeworICAgICAgICAgIGhhc1RyYW5zY2x1ZGVEaXJlY3RpdmUgPSB0
cnVlOworCisgICAgICAgICAgLy8gU3BlY2lhbCBjYXNlIG5nSWYgYW5kIG5nUmVwZWF0IHNvIHRo
YXQgd2UgZG9uJ3QgY29tcGxhaW4gYWJvdXQgZHVwbGljYXRlIHRyYW5zY2x1c2lvbi4KKyAgICAg
ICAgICAvLyBUaGlzIG9wdGlvbiBzaG91bGQgb25seSBiZSB1c2VkIGJ5IGRpcmVjdGl2ZXMgdGhh
dCBrbm93IGhvdyB0byBzYWZlbHkgaGFuZGxlIGVsZW1lbnQgdHJhbnNjbHVzaW9uLAorICAgICAg
ICAgIC8vIHdoZXJlIHRoZSB0cmFuc2NsdWRlZCBub2RlcyBhcmUgYWRkZWQgb3IgcmVwbGFjZWQg
YWZ0ZXIgbGlua2luZy4KKyAgICAgICAgICBpZiAoIWRpcmVjdGl2ZS4kJHRsYikgeworICAgICAg
ICAgICAgYXNzZXJ0Tm9EdXBsaWNhdGUoJ3RyYW5zY2x1c2lvbicsIG5vblRsYlRyYW5zY2x1ZGVE
aXJlY3RpdmUsIGRpcmVjdGl2ZSwgJGNvbXBpbGVOb2RlKTsKKyAgICAgICAgICAgIG5vblRsYlRy
YW5zY2x1ZGVEaXJlY3RpdmUgPSBkaXJlY3RpdmU7CisgICAgICAgICAgfQorCisgICAgICAgICAg
aWYgKGRpcmVjdGl2ZVZhbHVlID09ICdlbGVtZW50JykgeworICAgICAgICAgICAgaGFzRWxlbWVu
dFRyYW5zY2x1ZGVEaXJlY3RpdmUgPSB0cnVlOworICAgICAgICAgICAgdGVybWluYWxQcmlvcml0
eSA9IGRpcmVjdGl2ZS5wcmlvcml0eTsKKyAgICAgICAgICAgICR0ZW1wbGF0ZSA9ICRjb21waWxl
Tm9kZTsKKyAgICAgICAgICAgICRjb21waWxlTm9kZSA9IHRlbXBsYXRlQXR0cnMuJCRlbGVtZW50
ID0KKyAgICAgICAgICAgICAgICBqcUxpdGUoZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgnICcgKyBk
aXJlY3RpdmVOYW1lICsgJzogJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGVtcGxhdGVBdHRyc1tkaXJlY3RpdmVOYW1lXSArICcgJykpOworICAgICAg
ICAgICAgY29tcGlsZU5vZGUgPSAkY29tcGlsZU5vZGVbMF07CisgICAgICAgICAgICByZXBsYWNl
V2l0aChqcUNvbGxlY3Rpb24sIHNsaWNlQXJncygkdGVtcGxhdGUpLCBjb21waWxlTm9kZSk7CisK
KyAgICAgICAgICAgIGNoaWxkVHJhbnNjbHVkZUZuID0gY29tcGlsZSgkdGVtcGxhdGUsIHRyYW5z
Y2x1ZGVGbiwgdGVybWluYWxQcmlvcml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXBsYWNlRGlyZWN0aXZlICYmIHJlcGxhY2VEaXJlY3RpdmUubmFtZSwgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgcGFzcyBp
bjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC0gY29udHJv
bGxlckRpcmVjdGl2ZXMgLSBvdGhlcndpc2Ugd2UnbGwgY3JlYXRlIGR1cGxpY2F0ZXMgY29udHJv
bGxlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC0gbmV3
SXNvbGF0ZVNjb3BlRGlyZWN0aXZlIG9yIHRlbXBsYXRlRGlyZWN0aXZlIC0gY29tYmluaW5nIHRl
bXBsYXRlcyB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyAgIGVsZW1lbnQgdHJhbnNjbHVzaW9uIGRvZXNuJ3QgbWFrZSBzZW5zZS4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIG9ubHkgbm9uVGxiVHJhbnNjbHVkZURpcmVj
dGl2ZSBzbyB0aGF0IHdlIHByZXZlbnQgcHV0dGluZyB0cmFuc2NsdXNpb24KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9uIHRoZSBzYW1lIGVsZW1lbnQgbW9y
ZSB0aGFuIG9uY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b25UbGJUcmFuc2NsdWRlRGlyZWN0aXZlOiBub25UbGJUcmFuc2NsdWRlRGlyZWN0aXZlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICR0ZW1wbGF0ZSA9IGpxTGl0ZShqcUxpdGVDbG9uZShjb21waWxlTm9k
ZSkpLmNvbnRlbnRzKCk7CisgICAgICAgICAgICAkY29tcGlsZU5vZGUuZW1wdHkoKTsgLy8gY2xl
YXIgY29udGVudHMKKyAgICAgICAgICAgIGNoaWxkVHJhbnNjbHVkZUZuID0gY29tcGlsZSgkdGVt
cGxhdGUsIHRyYW5zY2x1ZGVGbik7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
aWYgKGRpcmVjdGl2ZS50ZW1wbGF0ZSkgeworICAgICAgICAgIGhhc1RlbXBsYXRlID0gdHJ1ZTsK
KyAgICAgICAgICBhc3NlcnROb0R1cGxpY2F0ZSgndGVtcGxhdGUnLCB0ZW1wbGF0ZURpcmVjdGl2
ZSwgZGlyZWN0aXZlLCAkY29tcGlsZU5vZGUpOworICAgICAgICAgIHRlbXBsYXRlRGlyZWN0aXZl
ID0gZGlyZWN0aXZlOworCisgICAgICAgICAgZGlyZWN0aXZlVmFsdWUgPSAoaXNGdW5jdGlvbihk
aXJlY3RpdmUudGVtcGxhdGUpKQorICAgICAgICAgICAgICA/IGRpcmVjdGl2ZS50ZW1wbGF0ZSgk
Y29tcGlsZU5vZGUsIHRlbXBsYXRlQXR0cnMpCisgICAgICAgICAgICAgIDogZGlyZWN0aXZlLnRl
bXBsYXRlOworCisgICAgICAgICAgZGlyZWN0aXZlVmFsdWUgPSBkZW5vcm1hbGl6ZVRlbXBsYXRl
KGRpcmVjdGl2ZVZhbHVlKTsKKworICAgICAgICAgIGlmIChkaXJlY3RpdmUucmVwbGFjZSkgewor
ICAgICAgICAgICAgcmVwbGFjZURpcmVjdGl2ZSA9IGRpcmVjdGl2ZTsKKyAgICAgICAgICAgIGlm
IChqcUxpdGVJc1RleHROb2RlKGRpcmVjdGl2ZVZhbHVlKSkgeworICAgICAgICAgICAgICAkdGVt
cGxhdGUgPSBbXTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICR0ZW1wbGF0
ZSA9IHJlbW92ZUNvbW1lbnRzKHdyYXBUZW1wbGF0ZShkaXJlY3RpdmUudGVtcGxhdGVOYW1lc3Bh
Y2UsIHRyaW0oZGlyZWN0aXZlVmFsdWUpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBj
b21waWxlTm9kZSA9ICR0ZW1wbGF0ZVswXTsKKworICAgICAgICAgICAgaWYgKCR0ZW1wbGF0ZS5s
ZW5ndGggIT0gMSB8fCBjb21waWxlTm9kZS5ub2RlVHlwZSAhPT0gTk9ERV9UWVBFX0VMRU1FTlQp
IHsKKyAgICAgICAgICAgICAgdGhyb3cgJGNvbXBpbGVNaW5FcnIoJ3RwbHJ0JywKKyAgICAgICAg
ICAgICAgICAgICJUZW1wbGF0ZSBmb3IgZGlyZWN0aXZlICd7MH0nIG11c3QgaGF2ZSBleGFjdGx5
IG9uZSByb290IGVsZW1lbnQuIHsxfSIsCisgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVOYW1l
LCAnJyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJlcGxhY2VXaXRoKGpxQ29sbGVj
dGlvbiwgJGNvbXBpbGVOb2RlLCBjb21waWxlTm9kZSk7CisKKyAgICAgICAgICAgIHZhciBuZXdU
ZW1wbGF0ZUF0dHJzID0geyRhdHRyOiB7fX07CisKKyAgICAgICAgICAgIC8vIGNvbWJpbmUgZGly
ZWN0aXZlcyBmcm9tIHRoZSBvcmlnaW5hbCBub2RlIGFuZCBmcm9tIHRoZSB0ZW1wbGF0ZToKKyAg
ICAgICAgICAgIC8vIC0gdGFrZSB0aGUgYXJyYXkgb2YgZGlyZWN0aXZlcyBmb3IgdGhpcyBlbGVt
ZW50CisgICAgICAgICAgICAvLyAtIHNwbGl0IGl0IGludG8gdHdvIHBhcnRzLCB0aG9zZSB0aGF0
IGFscmVhZHkgYXBwbGllZCAocHJvY2Vzc2VkKSBhbmQgdGhvc2UgdGhhdCB3ZXJlbid0ICh1bnBy
b2Nlc3NlZCkKKyAgICAgICAgICAgIC8vIC0gY29sbGVjdCBkaXJlY3RpdmVzIGZyb20gdGhlIHRl
bXBsYXRlIGFuZCBzb3J0IHRoZW0gYnkgcHJpb3JpdHkKKyAgICAgICAgICAgIC8vIC0gY29tYmlu
ZSBkaXJlY3RpdmVzIGFzOiBwcm9jZXNzZWQgKyB0ZW1wbGF0ZSArIHVucHJvY2Vzc2VkCisgICAg
ICAgICAgICB2YXIgdGVtcGxhdGVEaXJlY3RpdmVzID0gY29sbGVjdERpcmVjdGl2ZXMoY29tcGls
ZU5vZGUsIFtdLCBuZXdUZW1wbGF0ZUF0dHJzKTsKKyAgICAgICAgICAgIHZhciB1bnByb2Nlc3Nl
ZERpcmVjdGl2ZXMgPSBkaXJlY3RpdmVzLnNwbGljZShpICsgMSwgZGlyZWN0aXZlcy5sZW5ndGgg
LSAoaSArIDEpKTsKKworICAgICAgICAgICAgaWYgKG5ld0lzb2xhdGVTY29wZURpcmVjdGl2ZSkg
eworICAgICAgICAgICAgICBtYXJrRGlyZWN0aXZlc0FzSXNvbGF0ZSh0ZW1wbGF0ZURpcmVjdGl2
ZXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGlyZWN0aXZlcyA9IGRpcmVjdGl2ZXMu
Y29uY2F0KHRlbXBsYXRlRGlyZWN0aXZlcykuY29uY2F0KHVucHJvY2Vzc2VkRGlyZWN0aXZlcyk7
CisgICAgICAgICAgICBtZXJnZVRlbXBsYXRlQXR0cmlidXRlcyh0ZW1wbGF0ZUF0dHJzLCBuZXdU
ZW1wbGF0ZUF0dHJzKTsKKworICAgICAgICAgICAgaWkgPSBkaXJlY3RpdmVzLmxlbmd0aDsKKyAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJGNvbXBpbGVOb2RlLmh0bWwoZGlyZWN0aXZl
VmFsdWUpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChkaXJlY3RpdmUu
dGVtcGxhdGVVcmwpIHsKKyAgICAgICAgICBoYXNUZW1wbGF0ZSA9IHRydWU7CisgICAgICAgICAg
YXNzZXJ0Tm9EdXBsaWNhdGUoJ3RlbXBsYXRlJywgdGVtcGxhdGVEaXJlY3RpdmUsIGRpcmVjdGl2
ZSwgJGNvbXBpbGVOb2RlKTsKKyAgICAgICAgICB0ZW1wbGF0ZURpcmVjdGl2ZSA9IGRpcmVjdGl2
ZTsKKworICAgICAgICAgIGlmIChkaXJlY3RpdmUucmVwbGFjZSkgeworICAgICAgICAgICAgcmVw
bGFjZURpcmVjdGl2ZSA9IGRpcmVjdGl2ZTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBub2Rl
TGlua0ZuID0gY29tcGlsZVRlbXBsYXRlVXJsKGRpcmVjdGl2ZXMuc3BsaWNlKGksIGRpcmVjdGl2
ZXMubGVuZ3RoIC0gaSksICRjb21waWxlTm9kZSwKKyAgICAgICAgICAgICAgdGVtcGxhdGVBdHRy
cywganFDb2xsZWN0aW9uLCBoYXNUcmFuc2NsdWRlRGlyZWN0aXZlICYmIGNoaWxkVHJhbnNjbHVk
ZUZuLCBwcmVMaW5rRm5zLCBwb3N0TGlua0ZucywgeworICAgICAgICAgICAgICAgIGNvbnRyb2xs
ZXJEaXJlY3RpdmVzOiBjb250cm9sbGVyRGlyZWN0aXZlcywKKyAgICAgICAgICAgICAgICBuZXdT
Y29wZURpcmVjdGl2ZTogKG5ld1Njb3BlRGlyZWN0aXZlICE9PSBkaXJlY3RpdmUpICYmIG5ld1Nj
b3BlRGlyZWN0aXZlLAorICAgICAgICAgICAgICAgIG5ld0lzb2xhdGVTY29wZURpcmVjdGl2ZTog
bmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlLAorICAgICAgICAgICAgICAgIHRlbXBsYXRlRGlyZWN0
aXZlOiB0ZW1wbGF0ZURpcmVjdGl2ZSwKKyAgICAgICAgICAgICAgICBub25UbGJUcmFuc2NsdWRl
RGlyZWN0aXZlOiBub25UbGJUcmFuc2NsdWRlRGlyZWN0aXZlCisgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgIGlpID0gZGlyZWN0aXZlcy5sZW5ndGg7CisgICAgICAgIH0gZWxzZSBpZiAoZGly
ZWN0aXZlLmNvbXBpbGUpIHsKKyAgICAgICAgICB0cnkgeworICAgICAgICAgICAgbGlua0ZuID0g
ZGlyZWN0aXZlLmNvbXBpbGUoJGNvbXBpbGVOb2RlLCB0ZW1wbGF0ZUF0dHJzLCBjaGlsZFRyYW5z
Y2x1ZGVGbik7CisgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihsaW5rRm4pKSB7CisgICAgICAg
ICAgICAgIGFkZExpbmtGbnMobnVsbCwgbGlua0ZuLCBhdHRyU3RhcnQsIGF0dHJFbmQpOworICAg
ICAgICAgICAgfSBlbHNlIGlmIChsaW5rRm4pIHsKKyAgICAgICAgICAgICAgYWRkTGlua0Zucyhs
aW5rRm4ucHJlLCBsaW5rRm4ucG9zdCwgYXR0clN0YXJ0LCBhdHRyRW5kKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAkZXhjZXB0aW9uSGFuZGxl
cihlLCBzdGFydGluZ1RhZygkY29tcGlsZU5vZGUpKTsKKyAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBpZiAoZGlyZWN0aXZlLnRlcm1pbmFsKSB7CisgICAgICAgICAgbm9kZUxpbmtG
bi50ZXJtaW5hbCA9IHRydWU7CisgICAgICAgICAgdGVybWluYWxQcmlvcml0eSA9IE1hdGgubWF4
KHRlcm1pbmFsUHJpb3JpdHksIGRpcmVjdGl2ZS5wcmlvcml0eSk7CisgICAgICAgIH0KKworICAg
ICAgfQorCisgICAgICBub2RlTGlua0ZuLnNjb3BlID0gbmV3U2NvcGVEaXJlY3RpdmUgJiYgbmV3
U2NvcGVEaXJlY3RpdmUuc2NvcGUgPT09IHRydWU7CisgICAgICBub2RlTGlua0ZuLnRyYW5zY2x1
ZGVPblRoaXNFbGVtZW50ID0gaGFzVHJhbnNjbHVkZURpcmVjdGl2ZTsKKyAgICAgIG5vZGVMaW5r
Rm4udGVtcGxhdGVPblRoaXNFbGVtZW50ID0gaGFzVGVtcGxhdGU7CisgICAgICBub2RlTGlua0Zu
LnRyYW5zY2x1ZGUgPSBjaGlsZFRyYW5zY2x1ZGVGbjsKKworICAgICAgcHJldmlvdXNDb21waWxl
Q29udGV4dC5oYXNFbGVtZW50VHJhbnNjbHVkZURpcmVjdGl2ZSA9IGhhc0VsZW1lbnRUcmFuc2Ns
dWRlRGlyZWN0aXZlOworCisgICAgICAvLyBtaWdodCBiZSBub3JtYWwgb3IgZGVsYXllZCBub2Rl
TGlua0ZuIGRlcGVuZGluZyBvbiBpZiB0ZW1wbGF0ZVVybCBpcyBwcmVzZW50CisgICAgICByZXR1
cm4gbm9kZUxpbmtGbjsKKworICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgICAgZnVu
Y3Rpb24gYWRkTGlua0ZucyhwcmUsIHBvc3QsIGF0dHJTdGFydCwgYXR0ckVuZCkgeworICAgICAg
ICBpZiAocHJlKSB7CisgICAgICAgICAgaWYgKGF0dHJTdGFydCkgcHJlID0gZ3JvdXBFbGVtZW50
c0xpbmtGbldyYXBwZXIocHJlLCBhdHRyU3RhcnQsIGF0dHJFbmQpOworICAgICAgICAgIHByZS5y
ZXF1aXJlID0gZGlyZWN0aXZlLnJlcXVpcmU7CisgICAgICAgICAgcHJlLmRpcmVjdGl2ZU5hbWUg
PSBkaXJlY3RpdmVOYW1lOworICAgICAgICAgIGlmIChuZXdJc29sYXRlU2NvcGVEaXJlY3RpdmUg
PT09IGRpcmVjdGl2ZSB8fCBkaXJlY3RpdmUuJCRpc29sYXRlU2NvcGUpIHsKKyAgICAgICAgICAg
IHByZSA9IGNsb25lQW5kQW5ub3RhdGVGbihwcmUsIHtpc29sYXRlU2NvcGU6IHRydWV9KTsKKyAg
ICAgICAgICB9CisgICAgICAgICAgcHJlTGlua0Zucy5wdXNoKHByZSk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHBvc3QpIHsKKyAgICAgICAgICBpZiAoYXR0clN0YXJ0KSBwb3N0ID0gZ3JvdXBF
bGVtZW50c0xpbmtGbldyYXBwZXIocG9zdCwgYXR0clN0YXJ0LCBhdHRyRW5kKTsKKyAgICAgICAg
ICBwb3N0LnJlcXVpcmUgPSBkaXJlY3RpdmUucmVxdWlyZTsKKyAgICAgICAgICBwb3N0LmRpcmVj
dGl2ZU5hbWUgPSBkaXJlY3RpdmVOYW1lOworICAgICAgICAgIGlmIChuZXdJc29sYXRlU2NvcGVE
aXJlY3RpdmUgPT09IGRpcmVjdGl2ZSB8fCBkaXJlY3RpdmUuJCRpc29sYXRlU2NvcGUpIHsKKyAg
ICAgICAgICAgIHBvc3QgPSBjbG9uZUFuZEFubm90YXRlRm4ocG9zdCwge2lzb2xhdGVTY29wZTog
dHJ1ZX0pOworICAgICAgICAgIH0KKyAgICAgICAgICBwb3N0TGlua0Zucy5wdXNoKHBvc3QpOwor
ICAgICAgICB9CisgICAgICB9CisKKworICAgICAgZnVuY3Rpb24gZ2V0Q29udHJvbGxlcnMoZGly
ZWN0aXZlTmFtZSwgcmVxdWlyZSwgJGVsZW1lbnQsIGVsZW1lbnRDb250cm9sbGVycykgeworICAg
ICAgICB2YXIgdmFsdWU7CisKKyAgICAgICAgaWYgKGlzU3RyaW5nKHJlcXVpcmUpKSB7CisgICAg
ICAgICAgdmFyIG1hdGNoID0gcmVxdWlyZS5tYXRjaChSRVFVSVJFX1BSRUZJWF9SRUdFWFApOwor
ICAgICAgICAgIHZhciBuYW1lID0gcmVxdWlyZS5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKTsK
KyAgICAgICAgICB2YXIgaW5oZXJpdFR5cGUgPSBtYXRjaFsxXSB8fCBtYXRjaFszXTsKKyAgICAg
ICAgICB2YXIgb3B0aW9uYWwgPSBtYXRjaFsyXSA9PT0gJz8nOworCisgICAgICAgICAgLy9JZiBv
bmx5IHBhcmVudHMgdGhlbiBzdGFydCBhdCB0aGUgcGFyZW50IGVsZW1lbnQKKyAgICAgICAgICBp
ZiAoaW5oZXJpdFR5cGUgPT09ICdeXicpIHsKKyAgICAgICAgICAgICRlbGVtZW50ID0gJGVsZW1l
bnQucGFyZW50KCk7CisgICAgICAgICAgLy9PdGhlcndpc2UgYXR0ZW1wdCBnZXR0aW5nIHRoZSBj
b250cm9sbGVyIGZyb20gZWxlbWVudENvbnRyb2xsZXJzIGluIGNhc2UKKyAgICAgICAgICAvL3Ro
ZSBlbGVtZW50IGlzIHRyYW5zY2x1ZGVkIChhbmQgaGFzIG5vIGRhdGEpIGFuZCB0byBhdm9pZCAu
ZGF0YSBpZiBwb3NzaWJsZQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZSA9
IGVsZW1lbnRDb250cm9sbGVycyAmJiBlbGVtZW50Q29udHJvbGxlcnNbbmFtZV07CisgICAgICAg
ICAgICB2YWx1ZSA9IHZhbHVlICYmIHZhbHVlLmluc3RhbmNlOworICAgICAgICAgIH0KKworICAg
ICAgICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBkYXRhTmFtZSA9ICckJyArIG5h
bWUgKyAnQ29udHJvbGxlcic7CisgICAgICAgICAgICB2YWx1ZSA9IGluaGVyaXRUeXBlID8gJGVs
ZW1lbnQuaW5oZXJpdGVkRGF0YShkYXRhTmFtZSkgOiAkZWxlbWVudC5kYXRhKGRhdGFOYW1lKTsK
KyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoIXZhbHVlICYmICFvcHRpb25hbCkgeworICAg
ICAgICAgICAgdGhyb3cgJGNvbXBpbGVNaW5FcnIoJ2N0cmVxJywKKyAgICAgICAgICAgICAgICAi
Q29udHJvbGxlciAnezB9JywgcmVxdWlyZWQgYnkgZGlyZWN0aXZlICd7MX0nLCBjYW4ndCBiZSBm
b3VuZCEiLAorICAgICAgICAgICAgICAgIG5hbWUsIGRpcmVjdGl2ZU5hbWUpOworICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KHJlcXVpcmUpKSB7CisgICAgICAgICAgdmFs
dWUgPSBbXTsKKyAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSByZXF1aXJlLmxlbmd0aDsg
aSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgIHZhbHVlW2ldID0gZ2V0Q29udHJvbGxlcnMoZGly
ZWN0aXZlTmFtZSwgcmVxdWlyZVtpXSwgJGVsZW1lbnQsIGVsZW1lbnRDb250cm9sbGVycyk7Cisg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHZhbHVlIHx8IG51bGw7Cisg
ICAgICB9CisKKyAgICAgIGZ1bmN0aW9uIHNldHVwQ29udHJvbGxlcnMoJGVsZW1lbnQsIGF0dHJz
LCB0cmFuc2NsdWRlRm4sIGNvbnRyb2xsZXJEaXJlY3RpdmVzLCBpc29sYXRlU2NvcGUsIHNjb3Bl
KSB7CisgICAgICAgIHZhciBlbGVtZW50Q29udHJvbGxlcnMgPSBjcmVhdGVNYXAoKTsKKyAgICAg
ICAgZm9yICh2YXIgY29udHJvbGxlcktleSBpbiBjb250cm9sbGVyRGlyZWN0aXZlcykgeworICAg
ICAgICAgIHZhciBkaXJlY3RpdmUgPSBjb250cm9sbGVyRGlyZWN0aXZlc1tjb250cm9sbGVyS2V5
XTsKKyAgICAgICAgICB2YXIgbG9jYWxzID0geworICAgICAgICAgICAgJHNjb3BlOiBkaXJlY3Rp
dmUgPT09IG5ld0lzb2xhdGVTY29wZURpcmVjdGl2ZSB8fCBkaXJlY3RpdmUuJCRpc29sYXRlU2Nv
cGUgPyBpc29sYXRlU2NvcGUgOiBzY29wZSwKKyAgICAgICAgICAgICRlbGVtZW50OiAkZWxlbWVu
dCwKKyAgICAgICAgICAgICRhdHRyczogYXR0cnMsCisgICAgICAgICAgICAkdHJhbnNjbHVkZTog
dHJhbnNjbHVkZUZuCisgICAgICAgICAgfTsKKworICAgICAgICAgIHZhciBjb250cm9sbGVyID0g
ZGlyZWN0aXZlLmNvbnRyb2xsZXI7CisgICAgICAgICAgaWYgKGNvbnRyb2xsZXIgPT0gJ0AnKSB7
CisgICAgICAgICAgICBjb250cm9sbGVyID0gYXR0cnNbZGlyZWN0aXZlLm5hbWVdOworICAgICAg
ICAgIH0KKworICAgICAgICAgIHZhciBjb250cm9sbGVySW5zdGFuY2UgPSAkY29udHJvbGxlcihj
b250cm9sbGVyLCBsb2NhbHMsIHRydWUsIGRpcmVjdGl2ZS5jb250cm9sbGVyQXMpOworCisgICAg
ICAgICAgLy8gRm9yIGRpcmVjdGl2ZXMgd2l0aCBlbGVtZW50IHRyYW5zY2x1c2lvbiB0aGUgZWxl
bWVudCBpcyBhIGNvbW1lbnQsCisgICAgICAgICAgLy8gYnV0IGpRdWVyeSAuZGF0YSBkb2Vzbid0
IHN1cHBvcnQgYXR0YWNoaW5nIGRhdGEgdG8gY29tbWVudCBub2RlcyBhcyBpdCdzIGhhcmQgdG8K
KyAgICAgICAgICAvLyBjbGVhbiB1cCAoaHR0cDovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvODMz
NSkuCisgICAgICAgICAgLy8gSW5zdGVhZCwgd2Ugc2F2ZSB0aGUgY29udHJvbGxlcnMgZm9yIHRo
ZSBlbGVtZW50IGluIGEgbG9jYWwgaGFzaCBhbmQgYXR0YWNoIHRvIC5kYXRhCisgICAgICAgICAg
Ly8gbGF0ZXIsIG9uY2Ugd2UgaGF2ZSB0aGUgYWN0dWFsIGVsZW1lbnQuCisgICAgICAgICAgZWxl
bWVudENvbnRyb2xsZXJzW2RpcmVjdGl2ZS5uYW1lXSA9IGNvbnRyb2xsZXJJbnN0YW5jZTsKKyAg
ICAgICAgICBpZiAoIWhhc0VsZW1lbnRUcmFuc2NsdWRlRGlyZWN0aXZlKSB7CisgICAgICAgICAg
ICAkZWxlbWVudC5kYXRhKCckJyArIGRpcmVjdGl2ZS5uYW1lICsgJ0NvbnRyb2xsZXInLCBjb250
cm9sbGVySW5zdGFuY2UuaW5zdGFuY2UpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gZWxlbWVudENvbnRyb2xsZXJzOworICAgICAgfQorCisgICAgICBmdW5jdGlvbiBu
b2RlTGlua0ZuKGNoaWxkTGlua0ZuLCBzY29wZSwgbGlua05vZGUsICRyb290RWxlbWVudCwgYm91
bmRUcmFuc2NsdWRlRm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNMaW5rRm4pIHsK
KyAgICAgICAgdmFyIGksIGlpLCBsaW5rRm4sIGNvbnRyb2xsZXIsIGlzb2xhdGVTY29wZSwgZWxl
bWVudENvbnRyb2xsZXJzLCB0cmFuc2NsdWRlRm4sICRlbGVtZW50LAorICAgICAgICAgICAgYXR0
cnM7CisKKyAgICAgICAgaWYgKGNvbXBpbGVOb2RlID09PSBsaW5rTm9kZSkgeworICAgICAgICAg
IGF0dHJzID0gdGVtcGxhdGVBdHRyczsKKyAgICAgICAgICAkZWxlbWVudCA9IHRlbXBsYXRlQXR0
cnMuJCRlbGVtZW50OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICRlbGVtZW50ID0ganFM
aXRlKGxpbmtOb2RlKTsKKyAgICAgICAgICBhdHRycyA9IG5ldyBBdHRyaWJ1dGVzKCRlbGVtZW50
LCB0ZW1wbGF0ZUF0dHJzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChuZXdJc29sYXRlU2Nv
cGVEaXJlY3RpdmUpIHsKKyAgICAgICAgICBpc29sYXRlU2NvcGUgPSBzY29wZS4kbmV3KHRydWUp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJvdW5kVHJhbnNjbHVkZUZuKSB7CisgICAgICAg
ICAgLy8gdHJhY2sgYGJvdW5kVHJhbnNjbHVkZUZuYCBzbyBpdCBjYW4gYmUgdW53cmFwcGVkIGlm
IGB0cmFuc2NsdWRlRm5gCisgICAgICAgICAgLy8gaXMgbGF0ZXIgcGFzc2VkIGFzIGBwYXJlbnRC
b3VuZFRyYW5zY2x1ZGVGbmAgdG8gYHB1YmxpY0xpbmtGbmAKKyAgICAgICAgICB0cmFuc2NsdWRl
Rm4gPSBjb250cm9sbGVyc0JvdW5kVHJhbnNjbHVkZTsKKyAgICAgICAgICB0cmFuc2NsdWRlRm4u
JCRib3VuZFRyYW5zY2x1ZGUgPSBib3VuZFRyYW5zY2x1ZGVGbjsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChjb250cm9sbGVyRGlyZWN0aXZlcykgeworICAgICAgICAgIGVsZW1lbnRDb250cm9s
bGVycyA9IHNldHVwQ29udHJvbGxlcnMoJGVsZW1lbnQsIGF0dHJzLCB0cmFuc2NsdWRlRm4sIGNv
bnRyb2xsZXJEaXJlY3RpdmVzLCBpc29sYXRlU2NvcGUsIHNjb3BlKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChuZXdJc29sYXRlU2NvcGVEaXJlY3RpdmUpIHsKKyAgICAgICAgICAvLyBJbml0
aWFsaXplIGlzb2xhdGUgc2NvcGUgYmluZGluZ3MgZm9yIG5ldyBpc29sYXRlIHNjb3BlIGRpcmVj
dGl2ZS4KKyAgICAgICAgICBjb21waWxlLiQkYWRkU2NvcGVJbmZvKCRlbGVtZW50LCBpc29sYXRl
U2NvcGUsIHRydWUsICEodGVtcGxhdGVEaXJlY3RpdmUgJiYgKHRlbXBsYXRlRGlyZWN0aXZlID09
PSBuZXdJc29sYXRlU2NvcGVEaXJlY3RpdmUgfHwKKyAgICAgICAgICAgICAgdGVtcGxhdGVEaXJl
Y3RpdmUgPT09IG5ld0lzb2xhdGVTY29wZURpcmVjdGl2ZS4kJG9yaWdpbmFsRGlyZWN0aXZlKSkp
OworICAgICAgICAgIGNvbXBpbGUuJCRhZGRTY29wZUNsYXNzKCRlbGVtZW50LCB0cnVlKTsKKyAg
ICAgICAgICBpc29sYXRlU2NvcGUuJCRpc29sYXRlQmluZGluZ3MgPQorICAgICAgICAgICAgICBu
ZXdJc29sYXRlU2NvcGVEaXJlY3RpdmUuJCRpc29sYXRlQmluZGluZ3M7CisgICAgICAgICAgaW5p
dGlhbGl6ZURpcmVjdGl2ZUJpbmRpbmdzKHNjb3BlLCBhdHRycywgaXNvbGF0ZVNjb3BlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc29sYXRlU2NvcGUuJCRpc29sYXRl
QmluZGluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lzb2xh
dGVTY29wZURpcmVjdGl2ZSwgaXNvbGF0ZVNjb3BlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
ZWxlbWVudENvbnRyb2xsZXJzKSB7CisgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBiaW5kVG9Db250
cm9sbGVyIGJpbmRpbmdzIGZvciBuZXcvaXNvbGF0ZSBzY29wZXMKKyAgICAgICAgICB2YXIgc2Nv
cGVEaXJlY3RpdmUgPSBuZXdJc29sYXRlU2NvcGVEaXJlY3RpdmUgfHwgbmV3U2NvcGVEaXJlY3Rp
dmU7CisgICAgICAgICAgdmFyIGJpbmRpbmdzOworICAgICAgICAgIHZhciBjb250cm9sbGVyRm9y
QmluZGluZ3M7CisgICAgICAgICAgaWYgKHNjb3BlRGlyZWN0aXZlICYmIGVsZW1lbnRDb250cm9s
bGVyc1tzY29wZURpcmVjdGl2ZS5uYW1lXSkgeworICAgICAgICAgICAgYmluZGluZ3MgPSBzY29w
ZURpcmVjdGl2ZS4kJGJpbmRpbmdzLmJpbmRUb0NvbnRyb2xsZXI7CisgICAgICAgICAgICBjb250
cm9sbGVyID0gZWxlbWVudENvbnRyb2xsZXJzW3Njb3BlRGlyZWN0aXZlLm5hbWVdOworCisgICAg
ICAgICAgICBpZiAoY29udHJvbGxlciAmJiBjb250cm9sbGVyLmlkZW50aWZpZXIgJiYgYmluZGlu
Z3MpIHsKKyAgICAgICAgICAgICAgY29udHJvbGxlckZvckJpbmRpbmdzID0gY29udHJvbGxlcjsK
KyAgICAgICAgICAgICAgdGhpc0xpbmtGbi4kJGRlc3Ryb3lCaW5kaW5ncyA9CisgICAgICAgICAg
ICAgICAgICBpbml0aWFsaXplRGlyZWN0aXZlQmluZGluZ3Moc2NvcGUsIGF0dHJzLCBjb250cm9s
bGVyLmluc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJpbmRpbmdzLCBzY29wZURpcmVjdGl2ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
fQorICAgICAgICAgIGZvciAoaSBpbiBlbGVtZW50Q29udHJvbGxlcnMpIHsKKyAgICAgICAgICAg
IGNvbnRyb2xsZXIgPSBlbGVtZW50Q29udHJvbGxlcnNbaV07CisgICAgICAgICAgICB2YXIgY29u
dHJvbGxlclJlc3VsdCA9IGNvbnRyb2xsZXIoKTsKKworICAgICAgICAgICAgaWYgKGNvbnRyb2xs
ZXJSZXN1bHQgIT09IGNvbnRyb2xsZXIuaW5zdGFuY2UpIHsKKyAgICAgICAgICAgICAgLy8gSWYg
dGhlIGNvbnRyb2xsZXIgY29uc3RydWN0b3IgaGFzIGEgcmV0dXJuIHZhbHVlLCBvdmVyd3JpdGUg
dGhlIGluc3RhbmNlCisgICAgICAgICAgICAgIC8vIGZyb20gc2V0dXBDb250cm9sbGVycyBhbmQg
dXBkYXRlIHRoZSBlbGVtZW50IGRhdGEKKyAgICAgICAgICAgICAgY29udHJvbGxlci5pbnN0YW5j
ZSA9IGNvbnRyb2xsZXJSZXN1bHQ7CisgICAgICAgICAgICAgICRlbGVtZW50LmRhdGEoJyQnICsg
aSArICdDb250cm9sbGVyJywgY29udHJvbGxlclJlc3VsdCk7CisgICAgICAgICAgICAgIGlmIChj
b250cm9sbGVyID09PSBjb250cm9sbGVyRm9yQmluZGluZ3MpIHsKKyAgICAgICAgICAgICAgICAv
LyBSZW1vdmUgYW5kIHJlLWluc3RhbGwgYmluZFRvQ29udHJvbGxlciBiaW5kaW5ncworICAgICAg
ICAgICAgICAgIHRoaXNMaW5rRm4uJCRkZXN0cm95QmluZGluZ3MoKTsKKyAgICAgICAgICAgICAg
ICB0aGlzTGlua0ZuLiQkZGVzdHJveUJpbmRpbmdzID0KKyAgICAgICAgICAgICAgICAgIGluaXRp
YWxpemVEaXJlY3RpdmVCaW5kaW5ncyhzY29wZSwgYXR0cnMsIGNvbnRyb2xsZXJSZXN1bHQsIGJp
bmRpbmdzLCBzY29wZURpcmVjdGl2ZSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBQUkVMSU5LSU5HCisgICAgICAg
IGZvciAoaSA9IDAsIGlpID0gcHJlTGlua0Zucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAg
ICAgICAgbGlua0ZuID0gcHJlTGlua0Zuc1tpXTsKKyAgICAgICAgICBpbnZva2VMaW5rRm4obGlu
a0ZuLAorICAgICAgICAgICAgICBsaW5rRm4uaXNvbGF0ZVNjb3BlID8gaXNvbGF0ZVNjb3BlIDog
c2NvcGUsCisgICAgICAgICAgICAgICRlbGVtZW50LAorICAgICAgICAgICAgICBhdHRycywKKyAg
ICAgICAgICAgICAgbGlua0ZuLnJlcXVpcmUgJiYgZ2V0Q29udHJvbGxlcnMobGlua0ZuLmRpcmVj
dGl2ZU5hbWUsIGxpbmtGbi5yZXF1aXJlLCAkZWxlbWVudCwgZWxlbWVudENvbnRyb2xsZXJzKSwK
KyAgICAgICAgICAgICAgdHJhbnNjbHVkZUZuCisgICAgICAgICAgKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIFJFQ1VSU0lPTgorICAgICAgICAvLyBXZSBvbmx5IHBhc3MgdGhlIGlzb2xhdGUg
c2NvcGUsIGlmIHRoZSBpc29sYXRlIGRpcmVjdGl2ZSBoYXMgYSB0ZW1wbGF0ZSwKKyAgICAgICAg
Ly8gb3RoZXJ3aXNlIHRoZSBjaGlsZCBlbGVtZW50cyBkbyBub3QgYmVsb25nIHRvIHRoZSBpc29s
YXRlIGRpcmVjdGl2ZS4KKyAgICAgICAgdmFyIHNjb3BlVG9DaGlsZCA9IHNjb3BlOworICAgICAg
ICBpZiAobmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlICYmIChuZXdJc29sYXRlU2NvcGVEaXJlY3Rp
dmUudGVtcGxhdGUgfHwgbmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlLnRlbXBsYXRlVXJsID09PSBu
dWxsKSkgeworICAgICAgICAgIHNjb3BlVG9DaGlsZCA9IGlzb2xhdGVTY29wZTsKKyAgICAgICAg
fQorICAgICAgICBjaGlsZExpbmtGbiAmJiBjaGlsZExpbmtGbihzY29wZVRvQ2hpbGQsIGxpbmtO
b2RlLmNoaWxkTm9kZXMsIHVuZGVmaW5lZCwgYm91bmRUcmFuc2NsdWRlRm4pOworCisgICAgICAg
IC8vIFBPU1RMSU5LSU5HCisgICAgICAgIGZvciAoaSA9IHBvc3RMaW5rRm5zLmxlbmd0aCAtIDE7
IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgbGlua0ZuID0gcG9zdExpbmtGbnNbaV07CisgICAg
ICAgICAgaW52b2tlTGlua0ZuKGxpbmtGbiwKKyAgICAgICAgICAgICAgbGlua0ZuLmlzb2xhdGVT
Y29wZSA/IGlzb2xhdGVTY29wZSA6IHNjb3BlLAorICAgICAgICAgICAgICAkZWxlbWVudCwKKyAg
ICAgICAgICAgICAgYXR0cnMsCisgICAgICAgICAgICAgIGxpbmtGbi5yZXF1aXJlICYmIGdldENv
bnRyb2xsZXJzKGxpbmtGbi5kaXJlY3RpdmVOYW1lLCBsaW5rRm4ucmVxdWlyZSwgJGVsZW1lbnQs
IGVsZW1lbnRDb250cm9sbGVycyksCisgICAgICAgICAgICAgIHRyYW5zY2x1ZGVGbgorICAgICAg
ICAgICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0
IGlzIGluamVjdGVkIGFzIGAkdHJhbnNjbHVkZWAuCisgICAgICAgIC8vIE5vdGU6IGFsbCBhcmd1
bWVudHMgYXJlIG9wdGlvbmFsIQorICAgICAgICBmdW5jdGlvbiBjb250cm9sbGVyc0JvdW5kVHJh
bnNjbHVkZShzY29wZSwgY2xvbmVBdHRhY2hGbiwgZnV0dXJlUGFyZW50RWxlbWVudCkgeworICAg
ICAgICAgIHZhciB0cmFuc2NsdWRlQ29udHJvbGxlcnM7CisKKyAgICAgICAgICAvLyBObyBzY29w
ZSBwYXNzZWQgaW46CisgICAgICAgICAgaWYgKCFpc1Njb3BlKHNjb3BlKSkgeworICAgICAgICAg
ICAgZnV0dXJlUGFyZW50RWxlbWVudCA9IGNsb25lQXR0YWNoRm47CisgICAgICAgICAgICBjbG9u
ZUF0dGFjaEZuID0gc2NvcGU7CisgICAgICAgICAgICBzY29wZSA9IHVuZGVmaW5lZDsKKyAgICAg
ICAgICB9CisKKyAgICAgICAgICBpZiAoaGFzRWxlbWVudFRyYW5zY2x1ZGVEaXJlY3RpdmUpIHsK
KyAgICAgICAgICAgIHRyYW5zY2x1ZGVDb250cm9sbGVycyA9IGVsZW1lbnRDb250cm9sbGVyczsK
KyAgICAgICAgICB9CisgICAgICAgICAgaWYgKCFmdXR1cmVQYXJlbnRFbGVtZW50KSB7CisgICAg
ICAgICAgICBmdXR1cmVQYXJlbnRFbGVtZW50ID0gaGFzRWxlbWVudFRyYW5zY2x1ZGVEaXJlY3Rp
dmUgPyAkZWxlbWVudC5wYXJlbnQoKSA6ICRlbGVtZW50OworICAgICAgICAgIH0KKyAgICAgICAg
ICByZXR1cm4gYm91bmRUcmFuc2NsdWRlRm4oc2NvcGUsIGNsb25lQXR0YWNoRm4sIHRyYW5zY2x1
ZGVDb250cm9sbGVycywgZnV0dXJlUGFyZW50RWxlbWVudCwgc2NvcGVUb0NoaWxkKTsKKyAgICAg
ICAgfQorICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIG1hcmtEaXJlY3RpdmVzQXNJc29s
YXRlKGRpcmVjdGl2ZXMpIHsKKyAgICAgIC8vIG1hcmsgYWxsIGRpcmVjdGl2ZXMgYXMgbmVlZGlu
ZyBpc29sYXRlIHNjb3BlLgorICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gZGlyZWN0aXZlcy5s
ZW5ndGg7IGogPCBqajsgaisrKSB7CisgICAgICAgIGRpcmVjdGl2ZXNbal0gPSBpbmhlcml0KGRp
cmVjdGl2ZXNbal0sIHskJGlzb2xhdGVTY29wZTogdHJ1ZX0pOworICAgICAgfQorICAgIH0KKwor
ICAgIC8qKgorICAgICAqIGxvb2tzIHVwIHRoZSBkaXJlY3RpdmUgYW5kIGRlY29yYXRlcyBpdCB3
aXRoIGV4Y2VwdGlvbiBoYW5kbGluZyBhbmQgcHJvcGVyIHBhcmFtZXRlcnMuIFdlCisgICAgICog
Y2FsbCB0aGlzIHRoZSBib3VuZERpcmVjdGl2ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSBuYW1lIG5hbWUgb2YgdGhlIGRpcmVjdGl2ZSB0byBsb29rIHVwLgorICAgICAqIEBwYXJh
bSB7c3RyaW5nfSBsb2NhdGlvbiBUaGUgZGlyZWN0aXZlIG11c3QgYmUgZm91bmQgaW4gc3BlY2lm
aWMgZm9ybWF0LgorICAgICAqICAgU3RyaW5nIGNvbnRhaW5pbmcgYW55IG9mIHRoZXNlcyBjaGFy
YWN0ZXJzOgorICAgICAqCisgICAgICogICAqIGBFYDogZWxlbWVudCBuYW1lCisgICAgICogICAq
IGBBJzogYXR0cmlidXRlCisgICAgICogICAqIGBDYDogY2xhc3MKKyAgICAgKiAgICogYE1gOiBj
b21tZW50CisgICAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgZGlyZWN0aXZlIHdhcyBh
ZGRlZC4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBhZGREaXJlY3RpdmUodERpcmVjdGl2ZXMsIG5h
bWUsIGxvY2F0aW9uLCBtYXhQcmlvcml0eSwgaWdub3JlRGlyZWN0aXZlLCBzdGFydEF0dHJOYW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRBdHRyTmFtZSkgeworICAgICAgaWYgKG5h
bWUgPT09IGlnbm9yZURpcmVjdGl2ZSkgcmV0dXJuIG51bGw7CisgICAgICB2YXIgbWF0Y2ggPSBu
dWxsOworICAgICAgaWYgKGhhc0RpcmVjdGl2ZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHsKKyAg
ICAgICAgZm9yICh2YXIgZGlyZWN0aXZlLCBkaXJlY3RpdmVzID0gJGluamVjdG9yLmdldChuYW1l
ICsgU3VmZml4KSwKKyAgICAgICAgICAgIGkgPSAwLCBpaSA9IGRpcmVjdGl2ZXMubGVuZ3RoOyBp
IDwgaWk7IGkrKykgeworICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBkaXJlY3RpdmUgPSBk
aXJlY3RpdmVzW2ldOworICAgICAgICAgICAgaWYgKChtYXhQcmlvcml0eSA9PT0gdW5kZWZpbmVk
IHx8IG1heFByaW9yaXR5ID4gZGlyZWN0aXZlLnByaW9yaXR5KSAmJgorICAgICAgICAgICAgICAg
ICBkaXJlY3RpdmUucmVzdHJpY3QuaW5kZXhPZihsb2NhdGlvbikgIT0gLTEpIHsKKyAgICAgICAg
ICAgICAgaWYgKHN0YXJ0QXR0ck5hbWUpIHsKKyAgICAgICAgICAgICAgICBkaXJlY3RpdmUgPSBp
bmhlcml0KGRpcmVjdGl2ZSwgeyQkc3RhcnQ6IHN0YXJ0QXR0ck5hbWUsICQkZW5kOiBlbmRBdHRy
TmFtZX0pOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHREaXJlY3RpdmVzLnB1c2go
ZGlyZWN0aXZlKTsKKyAgICAgICAgICAgICAgbWF0Y2ggPSBkaXJlY3RpdmU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgfSBjYXRjaCAoZSkgeyAkZXhjZXB0aW9uSGFuZGxlcihlKTsgfQorICAg
ICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4gbWF0Y2g7CisgICAgfQorCisKKyAgICAvKioK
KyAgICAgKiBsb29rcyB1cCB0aGUgZGlyZWN0aXZlIGFuZCByZXR1cm5zIHRydWUgaWYgaXQgaXMg
YSBtdWx0aS1lbGVtZW50IGRpcmVjdGl2ZSwKKyAgICAgKiBhbmQgdGhlcmVmb3JlIHJlcXVpcmVz
IERPTSBub2RlcyBiZXR3ZWVuIC1zdGFydCBhbmQgLWVuZCBtYXJrZXJzIHRvIGJlIGdyb3VwZWQK
KyAgICAgKiB0b2dldGhlci4KKyAgICAgKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5h
bWUgb2YgdGhlIGRpcmVjdGl2ZSB0byBsb29rIHVwLgorICAgICAqIEByZXR1cm5zIHRydWUgaWYg
ZGlyZWN0aXZlIHdhcyByZWdpc3RlcmVkIGFzIG11bHRpLWVsZW1lbnQuCisgICAgICovCisgICAg
ZnVuY3Rpb24gZGlyZWN0aXZlSXNNdWx0aUVsZW1lbnQobmFtZSkgeworICAgICAgaWYgKGhhc0Rp
cmVjdGl2ZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHsKKyAgICAgICAgZm9yICh2YXIgZGlyZWN0
aXZlLCBkaXJlY3RpdmVzID0gJGluamVjdG9yLmdldChuYW1lICsgU3VmZml4KSwKKyAgICAgICAg
ICAgIGkgPSAwLCBpaSA9IGRpcmVjdGl2ZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAg
ICAgIGRpcmVjdGl2ZSA9IGRpcmVjdGl2ZXNbaV07CisgICAgICAgICAgaWYgKGRpcmVjdGl2ZS5t
dWx0aUVsZW1lbnQpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgfQorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qKgor
ICAgICAqIFdoZW4gdGhlIGVsZW1lbnQgaXMgcmVwbGFjZWQgd2l0aCBIVE1MIHRlbXBsYXRlIHRo
ZW4gdGhlIG5ldyBhdHRyaWJ1dGVzCisgICAgICogb24gdGhlIHRlbXBsYXRlIG5lZWQgdG8gYmUg
bWVyZ2VkIHdpdGggdGhlIGV4aXN0aW5nIGF0dHJpYnV0ZXMgaW4gdGhlIERPTS4KKyAgICAgKiBU
aGUgZGVzaXJlZCBlZmZlY3QgaXMgdG8gaGF2ZSBib3RoIG9mIHRoZSBhdHRyaWJ1dGVzIHByZXNl
bnQuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge29iamVjdH0gZHN0IGRlc3RpbmF0aW9uIGF0dHJp
YnV0ZXMgKG9yaWdpbmFsIERPTSkKKyAgICAgKiBAcGFyYW0ge29iamVjdH0gc3JjIHNvdXJjZSBh
dHRyaWJ1dGVzIChmcm9tIHRoZSBkaXJlY3RpdmUgdGVtcGxhdGUpCisgICAgICovCisgICAgZnVu
Y3Rpb24gbWVyZ2VUZW1wbGF0ZUF0dHJpYnV0ZXMoZHN0LCBzcmMpIHsKKyAgICAgIHZhciBzcmNB
dHRyID0gc3JjLiRhdHRyLAorICAgICAgICAgIGRzdEF0dHIgPSBkc3QuJGF0dHIsCisgICAgICAg
ICAgJGVsZW1lbnQgPSBkc3QuJCRlbGVtZW50OworCisgICAgICAvLyByZWFwcGx5IHRoZSBvbGQg
YXR0cmlidXRlcyB0byB0aGUgbmV3IGVsZW1lbnQKKyAgICAgIGZvckVhY2goZHN0LCBmdW5jdGlv
bih2YWx1ZSwga2V5KSB7CisgICAgICAgIGlmIChrZXkuY2hhckF0KDApICE9ICckJykgeworICAg
ICAgICAgIGlmIChzcmNba2V5XSAmJiBzcmNba2V5XSAhPT0gdmFsdWUpIHsKKyAgICAgICAgICAg
IHZhbHVlICs9IChrZXkgPT09ICdzdHlsZScgPyAnOycgOiAnICcpICsgc3JjW2tleV07CisgICAg
ICAgICAgfQorICAgICAgICAgIGRzdC4kc2V0KGtleSwgdmFsdWUsIHRydWUsIHNyY0F0dHJba2V5
XSk7CisgICAgICAgIH0KKyAgICAgIH0pOworCisgICAgICAvLyBjb3B5IHRoZSBuZXcgYXR0cmli
dXRlcyBvbiB0aGUgb2xkIGF0dHJzIG9iamVjdAorICAgICAgZm9yRWFjaChzcmMsIGZ1bmN0aW9u
KHZhbHVlLCBrZXkpIHsKKyAgICAgICAgaWYgKGtleSA9PSAnY2xhc3MnKSB7CisgICAgICAgICAg
c2FmZUFkZENsYXNzKCRlbGVtZW50LCB2YWx1ZSk7CisgICAgICAgICAgZHN0WydjbGFzcyddID0g
KGRzdFsnY2xhc3MnXSA/IGRzdFsnY2xhc3MnXSArICcgJyA6ICcnKSArIHZhbHVlOworICAgICAg
ICB9IGVsc2UgaWYgKGtleSA9PSAnc3R5bGUnKSB7CisgICAgICAgICAgJGVsZW1lbnQuYXR0cign
c3R5bGUnLCAkZWxlbWVudC5hdHRyKCdzdHlsZScpICsgJzsnICsgdmFsdWUpOworICAgICAgICAg
IGRzdFsnc3R5bGUnXSA9IChkc3RbJ3N0eWxlJ10gPyBkc3RbJ3N0eWxlJ10gKyAnOycgOiAnJykg
KyB2YWx1ZTsKKyAgICAgICAgICAvLyBgZHN0YCB3aWxsIG5ldmVyIGNvbnRhaW4gaGFzT3duUHJv
cGVydHkgYXMgRE9NIHBhcnNlciB3b24ndCBsZXQgaXQuCisgICAgICAgICAgLy8gWW91IHdpbGwg
Z2V0IGFuICJJbnZhbGlkQ2hhcmFjdGVyRXJyb3I6IERPTSBFeGNlcHRpb24gNSIgZXJyb3IgaWYg
eW91CisgICAgICAgICAgLy8gaGF2ZSBhbiBhdHRyaWJ1dGUgbGlrZSAiaGFzLW93bi1wcm9wZXJ0
eSIgb3IgImRhdGEtaGFzLW93bi1wcm9wZXJ0eSIsIGV0Yy4KKyAgICAgICAgfSBlbHNlIGlmIChr
ZXkuY2hhckF0KDApICE9ICckJyAmJiAhZHN0Lmhhc093blByb3BlcnR5KGtleSkpIHsKKyAgICAg
ICAgICBkc3Rba2V5XSA9IHZhbHVlOworICAgICAgICAgIGRzdEF0dHJba2V5XSA9IHNyY0F0dHJb
a2V5XTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfQorCisKKyAgICBmdW5jdGlvbiBjb21w
aWxlVGVtcGxhdGVVcmwoZGlyZWN0aXZlcywgJGNvbXBpbGVOb2RlLCB0QXR0cnMsCisgICAgICAg
ICRyb290RWxlbWVudCwgY2hpbGRUcmFuc2NsdWRlRm4sIHByZUxpbmtGbnMsIHBvc3RMaW5rRm5z
LCBwcmV2aW91c0NvbXBpbGVDb250ZXh0KSB7CisgICAgICB2YXIgbGlua1F1ZXVlID0gW10sCisg
ICAgICAgICAgYWZ0ZXJUZW1wbGF0ZU5vZGVMaW5rRm4sCisgICAgICAgICAgYWZ0ZXJUZW1wbGF0
ZUNoaWxkTGlua0ZuLAorICAgICAgICAgIGJlZm9yZVRlbXBsYXRlQ29tcGlsZU5vZGUgPSAkY29t
cGlsZU5vZGVbMF0sCisgICAgICAgICAgb3JpZ0FzeW5jRGlyZWN0aXZlID0gZGlyZWN0aXZlcy5z
aGlmdCgpLAorICAgICAgICAgIGRlcml2ZWRTeW5jRGlyZWN0aXZlID0gaW5oZXJpdChvcmlnQXN5
bmNEaXJlY3RpdmUsIHsKKyAgICAgICAgICAgIHRlbXBsYXRlVXJsOiBudWxsLCB0cmFuc2NsdWRl
OiBudWxsLCByZXBsYWNlOiBudWxsLCAkJG9yaWdpbmFsRGlyZWN0aXZlOiBvcmlnQXN5bmNEaXJl
Y3RpdmUKKyAgICAgICAgICB9KSwKKyAgICAgICAgICB0ZW1wbGF0ZVVybCA9IChpc0Z1bmN0aW9u
KG9yaWdBc3luY0RpcmVjdGl2ZS50ZW1wbGF0ZVVybCkpCisgICAgICAgICAgICAgID8gb3JpZ0Fz
eW5jRGlyZWN0aXZlLnRlbXBsYXRlVXJsKCRjb21waWxlTm9kZSwgdEF0dHJzKQorICAgICAgICAg
ICAgICA6IG9yaWdBc3luY0RpcmVjdGl2ZS50ZW1wbGF0ZVVybCwKKyAgICAgICAgICB0ZW1wbGF0
ZU5hbWVzcGFjZSA9IG9yaWdBc3luY0RpcmVjdGl2ZS50ZW1wbGF0ZU5hbWVzcGFjZTsKKworICAg
ICAgJGNvbXBpbGVOb2RlLmVtcHR5KCk7CisKKyAgICAgICR0ZW1wbGF0ZVJlcXVlc3QodGVtcGxh
dGVVcmwpCisgICAgICAgIC50aGVuKGZ1bmN0aW9uKGNvbnRlbnQpIHsKKyAgICAgICAgICB2YXIg
Y29tcGlsZU5vZGUsIHRlbXBUZW1wbGF0ZUF0dHJzLCAkdGVtcGxhdGUsIGNoaWxkQm91bmRUcmFu
c2NsdWRlRm47CisKKyAgICAgICAgICBjb250ZW50ID0gZGVub3JtYWxpemVUZW1wbGF0ZShjb250
ZW50KTsKKworICAgICAgICAgIGlmIChvcmlnQXN5bmNEaXJlY3RpdmUucmVwbGFjZSkgeworICAg
ICAgICAgICAgaWYgKGpxTGl0ZUlzVGV4dE5vZGUoY29udGVudCkpIHsKKyAgICAgICAgICAgICAg
JHRlbXBsYXRlID0gW107CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAkdGVt
cGxhdGUgPSByZW1vdmVDb21tZW50cyh3cmFwVGVtcGxhdGUodGVtcGxhdGVOYW1lc3BhY2UsIHRy
aW0oY29udGVudCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbXBpbGVOb2RlID0g
JHRlbXBsYXRlWzBdOworCisgICAgICAgICAgICBpZiAoJHRlbXBsYXRlLmxlbmd0aCAhPSAxIHx8
IGNvbXBpbGVOb2RlLm5vZGVUeXBlICE9PSBOT0RFX1RZUEVfRUxFTUVOVCkgeworICAgICAgICAg
ICAgICB0aHJvdyAkY29tcGlsZU1pbkVycigndHBscnQnLAorICAgICAgICAgICAgICAgICAgIlRl
bXBsYXRlIGZvciBkaXJlY3RpdmUgJ3swfScgbXVzdCBoYXZlIGV4YWN0bHkgb25lIHJvb3QgZWxl
bWVudC4gezF9IiwKKyAgICAgICAgICAgICAgICAgIG9yaWdBc3luY0RpcmVjdGl2ZS5uYW1lLCB0
ZW1wbGF0ZVVybCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRlbXBUZW1wbGF0ZUF0
dHJzID0geyRhdHRyOiB7fX07CisgICAgICAgICAgICByZXBsYWNlV2l0aCgkcm9vdEVsZW1lbnQs
ICRjb21waWxlTm9kZSwgY29tcGlsZU5vZGUpOworICAgICAgICAgICAgdmFyIHRlbXBsYXRlRGly
ZWN0aXZlcyA9IGNvbGxlY3REaXJlY3RpdmVzKGNvbXBpbGVOb2RlLCBbXSwgdGVtcFRlbXBsYXRl
QXR0cnMpOworCisgICAgICAgICAgICBpZiAoaXNPYmplY3Qob3JpZ0FzeW5jRGlyZWN0aXZlLnNj
b3BlKSkgeworICAgICAgICAgICAgICBtYXJrRGlyZWN0aXZlc0FzSXNvbGF0ZSh0ZW1wbGF0ZURp
cmVjdGl2ZXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGlyZWN0aXZlcyA9IHRlbXBs
YXRlRGlyZWN0aXZlcy5jb25jYXQoZGlyZWN0aXZlcyk7CisgICAgICAgICAgICBtZXJnZVRlbXBs
YXRlQXR0cmlidXRlcyh0QXR0cnMsIHRlbXBUZW1wbGF0ZUF0dHJzKTsKKyAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgY29tcGlsZU5vZGUgPSBiZWZvcmVUZW1wbGF0ZUNvbXBpbGVOb2Rl
OworICAgICAgICAgICAgJGNvbXBpbGVOb2RlLmh0bWwoY29udGVudCk7CisgICAgICAgICAgfQor
CisgICAgICAgICAgZGlyZWN0aXZlcy51bnNoaWZ0KGRlcml2ZWRTeW5jRGlyZWN0aXZlKTsKKwor
ICAgICAgICAgIGFmdGVyVGVtcGxhdGVOb2RlTGlua0ZuID0gYXBwbHlEaXJlY3RpdmVzVG9Ob2Rl
KGRpcmVjdGl2ZXMsIGNvbXBpbGVOb2RlLCB0QXR0cnMsCisgICAgICAgICAgICAgIGNoaWxkVHJh
bnNjbHVkZUZuLCAkY29tcGlsZU5vZGUsIG9yaWdBc3luY0RpcmVjdGl2ZSwgcHJlTGlua0Zucywg
cG9zdExpbmtGbnMsCisgICAgICAgICAgICAgIHByZXZpb3VzQ29tcGlsZUNvbnRleHQpOworICAg
ICAgICAgIGZvckVhY2goJHJvb3RFbGVtZW50LCBmdW5jdGlvbihub2RlLCBpKSB7CisgICAgICAg
ICAgICBpZiAobm9kZSA9PSBjb21waWxlTm9kZSkgeworICAgICAgICAgICAgICAkcm9vdEVsZW1l
bnRbaV0gPSAkY29tcGlsZU5vZGVbMF07CisgICAgICAgICAgICB9CisgICAgICAgICAgfSk7Cisg
ICAgICAgICAgYWZ0ZXJUZW1wbGF0ZUNoaWxkTGlua0ZuID0gY29tcGlsZU5vZGVzKCRjb21waWxl
Tm9kZVswXS5jaGlsZE5vZGVzLCBjaGlsZFRyYW5zY2x1ZGVGbik7CisKKyAgICAgICAgICB3aGls
ZSAobGlua1F1ZXVlLmxlbmd0aCkgeworICAgICAgICAgICAgdmFyIHNjb3BlID0gbGlua1F1ZXVl
LnNoaWZ0KCksCisgICAgICAgICAgICAgICAgYmVmb3JlVGVtcGxhdGVMaW5rTm9kZSA9IGxpbmtR
dWV1ZS5zaGlmdCgpLAorICAgICAgICAgICAgICAgIGxpbmtSb290RWxlbWVudCA9IGxpbmtRdWV1
ZS5zaGlmdCgpLAorICAgICAgICAgICAgICAgIGJvdW5kVHJhbnNjbHVkZUZuID0gbGlua1F1ZXVl
LnNoaWZ0KCksCisgICAgICAgICAgICAgICAgbGlua05vZGUgPSAkY29tcGlsZU5vZGVbMF07CisK
KyAgICAgICAgICAgIGlmIChzY29wZS4kJGRlc3Ryb3llZCkgY29udGludWU7CisKKyAgICAgICAg
ICAgIGlmIChiZWZvcmVUZW1wbGF0ZUxpbmtOb2RlICE9PSBiZWZvcmVUZW1wbGF0ZUNvbXBpbGVO
b2RlKSB7CisgICAgICAgICAgICAgIHZhciBvbGRDbGFzc2VzID0gYmVmb3JlVGVtcGxhdGVMaW5r
Tm9kZS5jbGFzc05hbWU7CisKKyAgICAgICAgICAgICAgaWYgKCEocHJldmlvdXNDb21waWxlQ29u
dGV4dC5oYXNFbGVtZW50VHJhbnNjbHVkZURpcmVjdGl2ZSAmJgorICAgICAgICAgICAgICAgICAg
b3JpZ0FzeW5jRGlyZWN0aXZlLnJlcGxhY2UpKSB7CisgICAgICAgICAgICAgICAgLy8gaXQgd2Fz
IGNsb25lZCB0aGVyZWZvcmUgd2UgaGF2ZSB0byBjbG9uZSBhcyB3ZWxsLgorICAgICAgICAgICAg
ICAgIGxpbmtOb2RlID0ganFMaXRlQ2xvbmUoY29tcGlsZU5vZGUpOworICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgIHJlcGxhY2VXaXRoKGxpbmtSb290RWxlbWVudCwganFMaXRlKGJlZm9y
ZVRlbXBsYXRlTGlua05vZGUpLCBsaW5rTm9kZSk7CisKKyAgICAgICAgICAgICAgLy8gQ29weSBp
biBDU1MgY2xhc3NlcyBmcm9tIG9yaWdpbmFsIG5vZGUKKyAgICAgICAgICAgICAgc2FmZUFkZENs
YXNzKGpxTGl0ZShsaW5rTm9kZSksIG9sZENsYXNzZXMpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGFmdGVyVGVtcGxhdGVOb2RlTGlua0ZuLnRyYW5zY2x1ZGVPblRoaXNFbGVtZW50
KSB7CisgICAgICAgICAgICAgIGNoaWxkQm91bmRUcmFuc2NsdWRlRm4gPSBjcmVhdGVCb3VuZFRy
YW5zY2x1ZGVGbihzY29wZSwgYWZ0ZXJUZW1wbGF0ZU5vZGVMaW5rRm4udHJhbnNjbHVkZSwgYm91
bmRUcmFuc2NsdWRlRm4pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgY2hp
bGRCb3VuZFRyYW5zY2x1ZGVGbiA9IGJvdW5kVHJhbnNjbHVkZUZuOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYWZ0ZXJUZW1wbGF0ZU5vZGVMaW5rRm4oYWZ0ZXJUZW1wbGF0ZUNoaWxkTGlu
a0ZuLCBzY29wZSwgbGlua05vZGUsICRyb290RWxlbWVudCwKKyAgICAgICAgICAgICAgY2hpbGRC
b3VuZFRyYW5zY2x1ZGVGbiwgYWZ0ZXJUZW1wbGF0ZU5vZGVMaW5rRm4pOworICAgICAgICAgIH0K
KyAgICAgICAgICBsaW5rUXVldWUgPSBudWxsOworICAgICAgICB9KTsKKworICAgICAgcmV0dXJu
IGZ1bmN0aW9uIGRlbGF5ZWROb2RlTGlua0ZuKGlnbm9yZUNoaWxkTGlua0ZuLCBzY29wZSwgbm9k
ZSwgcm9vdEVsZW1lbnQsIGJvdW5kVHJhbnNjbHVkZUZuKSB7CisgICAgICAgIHZhciBjaGlsZEJv
dW5kVHJhbnNjbHVkZUZuID0gYm91bmRUcmFuc2NsdWRlRm47CisgICAgICAgIGlmIChzY29wZS4k
JGRlc3Ryb3llZCkgcmV0dXJuOworICAgICAgICBpZiAobGlua1F1ZXVlKSB7CisgICAgICAgICAg
bGlua1F1ZXVlLnB1c2goc2NvcGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICByb290RWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGlsZEJvdW5kVHJhbnNjbHVkZUZuKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICBpZiAoYWZ0ZXJUZW1wbGF0ZU5vZGVMaW5rRm4udHJhbnNjbHVkZU9uVGhpc0VsZW1lbnQpIHsK
KyAgICAgICAgICAgIGNoaWxkQm91bmRUcmFuc2NsdWRlRm4gPSBjcmVhdGVCb3VuZFRyYW5zY2x1
ZGVGbihzY29wZSwgYWZ0ZXJUZW1wbGF0ZU5vZGVMaW5rRm4udHJhbnNjbHVkZSwgYm91bmRUcmFu
c2NsdWRlRm4pOworICAgICAgICAgIH0KKyAgICAgICAgICBhZnRlclRlbXBsYXRlTm9kZUxpbmtG
bihhZnRlclRlbXBsYXRlQ2hpbGRMaW5rRm4sIHNjb3BlLCBub2RlLCByb290RWxlbWVudCwgY2hp
bGRCb3VuZFRyYW5zY2x1ZGVGbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
ZnRlclRlbXBsYXRlTm9kZUxpbmtGbik7CisgICAgICAgIH0KKyAgICAgIH07CisgICAgfQorCisK
KyAgICAvKioKKyAgICAgKiBTb3J0aW5nIGZ1bmN0aW9uIGZvciBib3VuZCBkaXJlY3RpdmVzLgor
ICAgICAqLworICAgIGZ1bmN0aW9uIGJ5UHJpb3JpdHkoYSwgYikgeworICAgICAgdmFyIGRpZmYg
PSBiLnByaW9yaXR5IC0gYS5wcmlvcml0eTsKKyAgICAgIGlmIChkaWZmICE9PSAwKSByZXR1cm4g
ZGlmZjsKKyAgICAgIGlmIChhLm5hbWUgIT09IGIubmFtZSkgcmV0dXJuIChhLm5hbWUgPCBiLm5h
bWUpID8gLTEgOiAxOworICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4OworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGFzc2VydE5vRHVwbGljYXRlKHdoYXQsIHByZXZpb3VzRGlyZWN0aXZlLCBk
aXJlY3RpdmUsIGVsZW1lbnQpIHsKKworICAgICAgZnVuY3Rpb24gd3JhcE1vZHVsZU5hbWVJZkRl
ZmluZWQobW9kdWxlTmFtZSkgeworICAgICAgICByZXR1cm4gbW9kdWxlTmFtZSA/CisgICAgICAg
ICAgKCcgKG1vZHVsZTogJyArIG1vZHVsZU5hbWUgKyAnKScpIDoKKyAgICAgICAgICAnJzsKKyAg
ICAgIH0KKworICAgICAgaWYgKHByZXZpb3VzRGlyZWN0aXZlKSB7CisgICAgICAgIHRocm93ICRj
b21waWxlTWluRXJyKCdtdWx0aWRpcicsICdNdWx0aXBsZSBkaXJlY3RpdmVzIFt7MH17MX0sIHsy
fXszfV0gYXNraW5nIGZvciB7NH0gb246IHs1fScsCisgICAgICAgICAgICBwcmV2aW91c0RpcmVj
dGl2ZS5uYW1lLCB3cmFwTW9kdWxlTmFtZUlmRGVmaW5lZChwcmV2aW91c0RpcmVjdGl2ZS4kJG1v
ZHVsZU5hbWUpLAorICAgICAgICAgICAgZGlyZWN0aXZlLm5hbWUsIHdyYXBNb2R1bGVOYW1lSWZE
ZWZpbmVkKGRpcmVjdGl2ZS4kJG1vZHVsZU5hbWUpLCB3aGF0LCBzdGFydGluZ1RhZyhlbGVtZW50
KSk7CisgICAgICB9CisgICAgfQorCisKKyAgICBmdW5jdGlvbiBhZGRUZXh0SW50ZXJwb2xhdGVE
aXJlY3RpdmUoZGlyZWN0aXZlcywgdGV4dCkgeworICAgICAgdmFyIGludGVycG9sYXRlRm4gPSAk
aW50ZXJwb2xhdGUodGV4dCwgdHJ1ZSk7CisgICAgICBpZiAoaW50ZXJwb2xhdGVGbikgeworICAg
ICAgICBkaXJlY3RpdmVzLnB1c2goeworICAgICAgICAgIHByaW9yaXR5OiAwLAorICAgICAgICAg
IGNvbXBpbGU6IGZ1bmN0aW9uIHRleHRJbnRlcnBvbGF0ZUNvbXBpbGVGbih0ZW1wbGF0ZU5vZGUp
IHsKKyAgICAgICAgICAgIHZhciB0ZW1wbGF0ZU5vZGVQYXJlbnQgPSB0ZW1wbGF0ZU5vZGUucGFy
ZW50KCksCisgICAgICAgICAgICAgICAgaGFzQ29tcGlsZVBhcmVudCA9ICEhdGVtcGxhdGVOb2Rl
UGFyZW50Lmxlbmd0aDsKKworICAgICAgICAgICAgLy8gV2hlbiB0cmFuc2NsdWRpbmcgYSB0ZW1w
bGF0ZSB0aGF0IGhhcyBiaW5kaW5ncyBpbiB0aGUgcm9vdAorICAgICAgICAgICAgLy8gd2UgZG9u
J3QgaGF2ZSBhIHBhcmVudCBhbmQgdGh1cyBuZWVkIHRvIGFkZCB0aGUgY2xhc3MgZHVyaW5nIGxp
bmtpbmcgZm4uCisgICAgICAgICAgICBpZiAoaGFzQ29tcGlsZVBhcmVudCkgY29tcGlsZS4kJGFk
ZEJpbmRpbmdDbGFzcyh0ZW1wbGF0ZU5vZGVQYXJlbnQpOworCisgICAgICAgICAgICByZXR1cm4g
ZnVuY3Rpb24gdGV4dEludGVycG9sYXRlTGlua0ZuKHNjb3BlLCBub2RlKSB7CisgICAgICAgICAg
ICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudCgpOworICAgICAgICAgICAgICBpZiAoIWhhc0Nv
bXBpbGVQYXJlbnQpIGNvbXBpbGUuJCRhZGRCaW5kaW5nQ2xhc3MocGFyZW50KTsKKyAgICAgICAg
ICAgICAgY29tcGlsZS4kJGFkZEJpbmRpbmdJbmZvKHBhcmVudCwgaW50ZXJwb2xhdGVGbi5leHBy
ZXNzaW9ucyk7CisgICAgICAgICAgICAgIHNjb3BlLiR3YXRjaChpbnRlcnBvbGF0ZUZuLCBmdW5j
dGlvbiBpbnRlcnBvbGF0ZUZuV2F0Y2hBY3Rpb24odmFsdWUpIHsKKyAgICAgICAgICAgICAgICBu
b2RlWzBdLm5vZGVWYWx1ZSA9IHZhbHVlOworICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IH07CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH0KKyAgICB9CisKKworICAgIGZ1
bmN0aW9uIHdyYXBUZW1wbGF0ZSh0eXBlLCB0ZW1wbGF0ZSkgeworICAgICAgdHlwZSA9IGxvd2Vy
Y2FzZSh0eXBlIHx8ICdodG1sJyk7CisgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgIGNhc2Ug
J3N2Zyc6CisgICAgICBjYXNlICdtYXRoJzoKKyAgICAgICAgdmFyIHdyYXBwZXIgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgd3JhcHBlci5pbm5lckhUTUwgPSAnPCcg
KyB0eXBlICsgJz4nICsgdGVtcGxhdGUgKyAnPC8nICsgdHlwZSArICc+JzsKKyAgICAgICAgcmV0
dXJuIHdyYXBwZXIuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzOworICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIHRlbXBsYXRlOworICAgICAgfQorICAgIH0KKworCisgICAgZnVuY3Rpb24g
Z2V0VHJ1c3RlZENvbnRleHQobm9kZSwgYXR0ck5vcm1hbGl6ZWROYW1lKSB7CisgICAgICBpZiAo
YXR0ck5vcm1hbGl6ZWROYW1lID09ICJzcmNkb2MiKSB7CisgICAgICAgIHJldHVybiAkc2NlLkhU
TUw7CisgICAgICB9CisgICAgICB2YXIgdGFnID0gbm9kZU5hbWVfKG5vZGUpOworICAgICAgLy8g
bWFjdGlvblt4bGluazpocmVmXSBjYW4gc291cmNlIFNWRy4gIEl0J3Mgbm90IGxpbWl0ZWQgdG8g
PG1hY3Rpb24+LgorICAgICAgaWYgKGF0dHJOb3JtYWxpemVkTmFtZSA9PSAieGxpbmtIcmVmIiB8
fAorICAgICAgICAgICh0YWcgPT0gImZvcm0iICYmIGF0dHJOb3JtYWxpemVkTmFtZSA9PSAiYWN0
aW9uIikgfHwKKyAgICAgICAgICAodGFnICE9ICJpbWciICYmIChhdHRyTm9ybWFsaXplZE5hbWUg
PT0gInNyYyIgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyTm9ybWFsaXplZE5h
bWUgPT0gIm5nU3JjIikpKSB7CisgICAgICAgIHJldHVybiAkc2NlLlJFU09VUkNFX1VSTDsKKyAg
ICAgIH0KKyAgICB9CisKKworICAgIGZ1bmN0aW9uIGFkZEF0dHJJbnRlcnBvbGF0ZURpcmVjdGl2
ZShub2RlLCBkaXJlY3RpdmVzLCB2YWx1ZSwgbmFtZSwgYWxsT3JOb3RoaW5nKSB7CisgICAgICB2
YXIgdHJ1c3RlZENvbnRleHQgPSBnZXRUcnVzdGVkQ29udGV4dChub2RlLCBuYW1lKTsKKyAgICAg
IGFsbE9yTm90aGluZyA9IEFMTF9PUl9OT1RISU5HX0FUVFJTW25hbWVdIHx8IGFsbE9yTm90aGlu
ZzsKKworICAgICAgdmFyIGludGVycG9sYXRlRm4gPSAkaW50ZXJwb2xhdGUodmFsdWUsIHRydWUs
IHRydXN0ZWRDb250ZXh0LCBhbGxPck5vdGhpbmcpOworCisgICAgICAvLyBubyBpbnRlcnBvbGF0
aW9uIGZvdW5kIC0+IGlnbm9yZQorICAgICAgaWYgKCFpbnRlcnBvbGF0ZUZuKSByZXR1cm47CisK
KworICAgICAgaWYgKG5hbWUgPT09ICJtdWx0aXBsZSIgJiYgbm9kZU5hbWVfKG5vZGUpID09PSAi
c2VsZWN0IikgeworICAgICAgICB0aHJvdyAkY29tcGlsZU1pbkVycigic2VsbXVsdGkiLAorICAg
ICAgICAgICAgIkJpbmRpbmcgdG8gdGhlICdtdWx0aXBsZScgYXR0cmlidXRlIGlzIG5vdCBzdXBw
b3J0ZWQuIEVsZW1lbnQ6IHswfSIsCisgICAgICAgICAgICBzdGFydGluZ1RhZyhub2RlKSk7Cisg
ICAgICB9CisKKyAgICAgIGRpcmVjdGl2ZXMucHVzaCh7CisgICAgICAgIHByaW9yaXR5OiAxMDAs
CisgICAgICAgIGNvbXBpbGU6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgICAgcHJlOiBmdW5jdGlvbiBhdHRySW50ZXJwb2xhdGVQcmVMaW5rRm4oc2NvcGUs
IGVsZW1lbnQsIGF0dHIpIHsKKyAgICAgICAgICAgICAgICB2YXIgJCRvYnNlcnZlcnMgPSAoYXR0
ci4kJG9ic2VydmVycyB8fCAoYXR0ci4kJG9ic2VydmVycyA9IHt9KSk7CisKKyAgICAgICAgICAg
ICAgICBpZiAoRVZFTlRfSEFORExFUl9BVFRSX1JFR0VYUC50ZXN0KG5hbWUpKSB7CisgICAgICAg
ICAgICAgICAgICB0aHJvdyAkY29tcGlsZU1pbkVycignbm9kb21ldmVudHMnLAorICAgICAgICAg
ICAgICAgICAgICAgICJJbnRlcnBvbGF0aW9ucyBmb3IgSFRNTCBET00gZXZlbnQgYXR0cmlidXRl
cyBhcmUgZGlzYWxsb3dlZC4gIFBsZWFzZSB1c2UgdGhlICIgKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAibmctIHZlcnNpb25zIChzdWNoIGFzIG5nLWNsaWNrIGluc3RlYWQgb2Ygb25jbGlj
aykgaW5zdGVhZC4iKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBJ
ZiB0aGUgYXR0cmlidXRlIGhhcyBjaGFuZ2VkIHNpbmNlIGxhc3QgJGludGVycG9sYXRlKCllZAor
ICAgICAgICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IGF0dHJbbmFtZV07CisgICAgICAgICAgICAg
ICAgaWYgKG5ld1ZhbHVlICE9PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgLy8gd2UgbmVl
ZCB0byBpbnRlcnBvbGF0ZSBhZ2FpbiBzaW5jZSB0aGUgYXR0cmlidXRlIHZhbHVlIGhhcyBiZWVu
IHVwZGF0ZWQKKyAgICAgICAgICAgICAgICAgIC8vIChlLmcuIGJ5IGFub3RoZXIgZGlyZWN0aXZl
J3MgY29tcGlsZSBmdW5jdGlvbikKKyAgICAgICAgICAgICAgICAgIC8vIGVuc3VyZSB1bnNldC9l
bXB0eSB2YWx1ZXMgbWFrZSBpbnRlcnBvbGF0ZUZuIGZhbHN5CisgICAgICAgICAgICAgICAgICBp
bnRlcnBvbGF0ZUZuID0gbmV3VmFsdWUgJiYgJGludGVycG9sYXRlKG5ld1ZhbHVlLCB0cnVlLCB0
cnVzdGVkQ29udGV4dCwgYWxsT3JOb3RoaW5nKTsKKyAgICAgICAgICAgICAgICAgIHZhbHVlID0g
bmV3VmFsdWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gaWYgYXR0
cmlidXRlIHdhcyB1cGRhdGVkIHNvIHRoYXQgdGhlcmUgaXMgbm8gaW50ZXJwb2xhdGlvbiBnb2lu
ZyBvbiB3ZSBkb24ndCB3YW50IHRvCisgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgYW55IG9i
c2VydmVycworICAgICAgICAgICAgICAgIGlmICghaW50ZXJwb2xhdGVGbikgcmV0dXJuOworCisg
ICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBhdHRyIG9iamVjdCBzbyB0aGF0IGl0J3MgcmVh
ZHkgaW4gY2FzZSB3ZSBuZWVkIHRoZSB2YWx1ZSBmb3IgaXNvbGF0ZQorICAgICAgICAgICAgICAg
IC8vIHNjb3BlIGluaXRpYWxpemF0aW9uLCBvdGhlcndpc2UgdGhlIHZhbHVlIHdvdWxkIG5vdCBi
ZSBhdmFpbGFibGUgZnJvbSBpc29sYXRlCisgICAgICAgICAgICAgICAgLy8gZGlyZWN0aXZlJ3Mg
bGlua2luZyBmbiBkdXJpbmcgbGlua2luZyBwaGFzZQorICAgICAgICAgICAgICAgIGF0dHJbbmFt
ZV0gPSBpbnRlcnBvbGF0ZUZuKHNjb3BlKTsKKworICAgICAgICAgICAgICAgICgkJG9ic2VydmVy
c1tuYW1lXSB8fCAoJCRvYnNlcnZlcnNbbmFtZV0gPSBbXSkpLiQkaW50ZXIgPSB0cnVlOworICAg
ICAgICAgICAgICAgIChhdHRyLiQkb2JzZXJ2ZXJzICYmIGF0dHIuJCRvYnNlcnZlcnNbbmFtZV0u
JCRzY29wZSB8fCBzY29wZSkuCisgICAgICAgICAgICAgICAgICAkd2F0Y2goaW50ZXJwb2xhdGVG
biwgZnVuY3Rpb24gaW50ZXJwb2xhdGVGbldhdGNoQWN0aW9uKG5ld1ZhbHVlLCBvbGRWYWx1ZSkg
eworICAgICAgICAgICAgICAgICAgICAvL3NwZWNpYWwgY2FzZSBmb3IgY2xhc3MgYXR0cmlidXRl
IGFkZGl0aW9uICsgcmVtb3ZhbAorICAgICAgICAgICAgICAgICAgICAvL3NvIHRoYXQgY2xhc3Mg
Y2hhbmdlcyBjYW4gdGFwIGludG8gdGhlIGFuaW1hdGlvbgorICAgICAgICAgICAgICAgICAgICAv
L2hvb2tzIHByb3ZpZGVkIGJ5IHRoZSAkYW5pbWF0ZSBzZXJ2aWNlLiBCZSBzdXJlIHRvCisgICAg
ICAgICAgICAgICAgICAgIC8vc2tpcCBhbmltYXRpb25zIHdoZW4gdGhlIGZpcnN0IGRpZ2VzdCBv
Y2N1cnMgKHdoZW4KKyAgICAgICAgICAgICAgICAgICAgLy9ib3RoIHRoZSBuZXcgYW5kIHRoZSBv
bGQgdmFsdWVzIGFyZSB0aGUgc2FtZSkgc2luY2UKKyAgICAgICAgICAgICAgICAgICAgLy90aGUg
Q1NTIGNsYXNzZXMgYXJlIHRoZSBub24taW50ZXJwb2xhdGVkIHZhbHVlcworICAgICAgICAgICAg
ICAgICAgICBpZiAobmFtZSA9PT0gJ2NsYXNzJyAmJiBuZXdWYWx1ZSAhPSBvbGRWYWx1ZSkgewor
ICAgICAgICAgICAgICAgICAgICAgIGF0dHIuJHVwZGF0ZUNsYXNzKG5ld1ZhbHVlLCBvbGRWYWx1
ZSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
YXR0ci4kc2V0KG5hbWUsIG5ld1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAg
ICAgfQorICAgICAgfSk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBUaGlzIGlzIGEgc3Bl
Y2lhbCBqcUxpdGUucmVwbGFjZVdpdGgsIHdoaWNoIGNhbiByZXBsYWNlIGl0ZW1zIHdoaWNoCisg
ICAgICogaGF2ZSBubyBwYXJlbnRzLCBwcm92aWRlZCB0aGF0IHRoZSBjb250YWluaW5nIGpxTGl0
ZSBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLgorICAgICAqCisgICAgICogQHBhcmFtIHtKcUxpdGU9
fSAkcm9vdEVsZW1lbnQgVGhlIHJvb3Qgb2YgdGhlIGNvbXBpbGUgdHJlZS4gVXNlZCBzbyB0aGF0
IHdlIGNhbiByZXBsYWNlIG5vZGVzCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW4gdGhlIHJvb3Qgb2YgdGhlIHRyZWUuCisgICAgICogQHBhcmFtIHtKcUxpdGV9IGVsZW1l
bnRzVG9SZW1vdmUgVGhlIGpxTGl0ZSBlbGVtZW50IHdoaWNoIHdlIGFyZSBnb2luZyB0byByZXBs
YWNlLiBXZSBrZWVwCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhl
IHNoZWxsLCBidXQgcmVwbGFjZSBpdHMgRE9NIG5vZGUgcmVmZXJlbmNlLgorICAgICAqIEBwYXJh
bSB7Tm9kZX0gbmV3Tm9kZSBUaGUgbmV3IERPTSBub2RlLgorICAgICAqLworICAgIGZ1bmN0aW9u
IHJlcGxhY2VXaXRoKCRyb290RWxlbWVudCwgZWxlbWVudHNUb1JlbW92ZSwgbmV3Tm9kZSkgewor
ICAgICAgdmFyIGZpcnN0RWxlbWVudFRvUmVtb3ZlID0gZWxlbWVudHNUb1JlbW92ZVswXSwKKyAg
ICAgICAgICByZW1vdmVDb3VudCA9IGVsZW1lbnRzVG9SZW1vdmUubGVuZ3RoLAorICAgICAgICAg
IHBhcmVudCA9IGZpcnN0RWxlbWVudFRvUmVtb3ZlLnBhcmVudE5vZGUsCisgICAgICAgICAgaSwg
aWk7CisKKyAgICAgIGlmICgkcm9vdEVsZW1lbnQpIHsKKyAgICAgICAgZm9yIChpID0gMCwgaWkg
PSAkcm9vdEVsZW1lbnQubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgIGlmICgkcm9v
dEVsZW1lbnRbaV0gPT0gZmlyc3RFbGVtZW50VG9SZW1vdmUpIHsKKyAgICAgICAgICAgICRyb290
RWxlbWVudFtpKytdID0gbmV3Tm9kZTsKKyAgICAgICAgICAgIGZvciAodmFyIGogPSBpLCBqMiA9
IGogKyByZW1vdmVDb3VudCAtIDEsCisgICAgICAgICAgICAgICAgICAgICBqaiA9ICRyb290RWxl
bWVudC5sZW5ndGg7CisgICAgICAgICAgICAgICAgIGogPCBqajsgaisrLCBqMisrKSB7CisgICAg
ICAgICAgICAgIGlmIChqMiA8IGpqKSB7CisgICAgICAgICAgICAgICAgJHJvb3RFbGVtZW50W2pd
ID0gJHJvb3RFbGVtZW50W2oyXTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBkZWxldGUgJHJvb3RFbGVtZW50W2pdOworICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAkcm9vdEVsZW1lbnQubGVuZ3RoIC09IHJlbW92ZUNvdW50IC0gMTsK
KworICAgICAgICAgICAgLy8gSWYgdGhlIHJlcGxhY2VkIGVsZW1lbnQgaXMgYWxzbyB0aGUgalF1
ZXJ5IC5jb250ZXh0IHRoZW4gcmVwbGFjZSBpdAorICAgICAgICAgICAgLy8gLmNvbnRleHQgaXMg
YSBkZXByZWNhdGVkIGpRdWVyeSBhcGksIHNvIHdlIHNob3VsZCBzZXQgaXQgb25seSB3aGVuIGpR
dWVyeSBzZXQgaXQKKyAgICAgICAgICAgIC8vIGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9jb250ZXh0
LworICAgICAgICAgICAgaWYgKCRyb290RWxlbWVudC5jb250ZXh0ID09PSBmaXJzdEVsZW1lbnRU
b1JlbW92ZSkgeworICAgICAgICAgICAgICAkcm9vdEVsZW1lbnQuY29udGV4dCA9IG5ld05vZGU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgIH0KKworICAgICAgaWYgKHBhcmVudCkgeworICAgICAgICBwYXJlbnQucmVwbGFj
ZUNoaWxkKG5ld05vZGUsIGZpcnN0RWxlbWVudFRvUmVtb3ZlKTsKKyAgICAgIH0KKworICAgICAg
Ly8gVE9ETyhwZXJmKTogd2hhdCdzIHRoaXMgZG9jdW1lbnQgZnJhZ21lbnQgZm9yPyBpcyBpdCBu
ZWVkZWQ/IGNhbiB3ZSBhdCBsZWFzdCByZXVzZSBpdD8KKyAgICAgIHZhciBmcmFnbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKyAgICAgIGZyYWdtZW50LmFwcGVuZENo
aWxkKGZpcnN0RWxlbWVudFRvUmVtb3ZlKTsKKworICAgICAgaWYgKGpxTGl0ZS5oYXNEYXRhKGZp
cnN0RWxlbWVudFRvUmVtb3ZlKSkgeworICAgICAgICAvLyBDb3B5IG92ZXIgdXNlciBkYXRhICh0
aGF0IGluY2x1ZGVzIEFuZ3VsYXIncyAkc2NvcGUgZXRjLikuIERvbid0IGNvcHkgcHJpdmF0ZQor
ICAgICAgICAvLyBkYXRhIGhlcmUgYmVjYXVzZSB0aGVyZSdzIG5vIHB1YmxpYyBpbnRlcmZhY2Ug
aW4galF1ZXJ5IHRvIGRvIHRoYXQgYW5kIGNvcHlpbmcgb3ZlcgorICAgICAgICAvLyBldmVudCBs
aXN0ZW5lcnMgKHdoaWNoIGlzIHRoZSBtYWluIHVzZSBvZiBwcml2YXRlIGRhdGEpIHdvdWxkbid0
IHdvcmsgYW55d2F5LgorICAgICAgICBqcUxpdGUobmV3Tm9kZSkuZGF0YShqcUxpdGUoZmlyc3RF
bGVtZW50VG9SZW1vdmUpLmRhdGEoKSk7CisKKyAgICAgICAgLy8gUmVtb3ZlIGRhdGEgb2YgdGhl
IHJlcGxhY2VkIGVsZW1lbnQuIFdlIGNhbm5vdCBqdXN0IGNhbGwgLnJlbW92ZSgpCisgICAgICAg
IC8vIG9uIHRoZSBlbGVtZW50IGl0IHNpbmNlIHRoYXQgd291bGQgZGVhbGxvY2F0ZSBzY29wZSB0
aGF0IGlzIG5lZWRlZAorICAgICAgICAvLyBmb3IgdGhlIG5ldyBub2RlLiBJbnN0ZWFkLCByZW1v
dmUgdGhlIGRhdGEgIm1hbnVhbGx5Ii4KKyAgICAgICAgaWYgKCFqUXVlcnkpIHsKKyAgICAgICAg
ICBkZWxldGUganFMaXRlLmNhY2hlW2ZpcnN0RWxlbWVudFRvUmVtb3ZlW2pxTGl0ZS5leHBhbmRv
XV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgLy8galF1ZXJ5IDIueCBkb2Vzbid0IGV4
cG9zZSB0aGUgZGF0YSBzdG9yYWdlLiBVc2UgalF1ZXJ5LmNsZWFuRGF0YSB0byBjbGVhbiB1cCBh
ZnRlcgorICAgICAgICAgIC8vIHRoZSByZXBsYWNlZCBlbGVtZW50LiBUaGUgY2xlYW5EYXRhIHZl
cnNpb24gbW9ua2V5LXBhdGNoZWQgYnkgQW5ndWxhciB3b3VsZCBjYXVzZQorICAgICAgICAgIC8v
IHRoZSBzY29wZSB0byBiZSB0cmFzaGVkIGFuZCB3ZSBkbyBuZWVkIHRoZSB2ZXJ5IHNhbWUgc2Nv
cGUgdG8gd29yayB3aXRoIHRoZSBuZXcKKyAgICAgICAgICAvLyBlbGVtZW50LiBIb3dldmVyLCB3
ZSBjYW5ub3QganVzdCBjYWNoZSB0aGUgbm9uLXBhdGNoZWQgdmVyc2lvbiBhbmQgdXNlIGl0IGhl
cmUgYXMKKyAgICAgICAgICAvLyB0aGF0IHdvdWxkIGJyZWFrIGlmIGFub3RoZXIgbGlicmFyeSBw
YXRjaGVzIHRoZSBtZXRob2QgYWZ0ZXIgQW5ndWxhciBkb2VzIChvbmUKKyAgICAgICAgICAvLyBl
eGFtcGxlIGlzIGpRdWVyeSBVSSkuIEluc3RlYWQsIHNldCBhIGZsYWcgaW5kaWNhdGluZyBzY29w
ZSBkZXN0cm95aW5nIHNob3VsZCBiZQorICAgICAgICAgIC8vIHNraXBwZWQgdGhpcyBvbmUgdGlt
ZS4KKyAgICAgICAgICBza2lwRGVzdHJveU9uTmV4dEpRdWVyeUNsZWFuRGF0YSA9IHRydWU7Cisg
ICAgICAgICAgalF1ZXJ5LmNsZWFuRGF0YShbZmlyc3RFbGVtZW50VG9SZW1vdmVdKTsKKyAgICAg
ICAgfQorICAgICAgfQorCisgICAgICBmb3IgKHZhciBrID0gMSwga2sgPSBlbGVtZW50c1RvUmVt
b3ZlLmxlbmd0aDsgayA8IGtrOyBrKyspIHsKKyAgICAgICAgdmFyIGVsZW1lbnQgPSBlbGVtZW50
c1RvUmVtb3ZlW2tdOworICAgICAgICBqcUxpdGUoZWxlbWVudCkucmVtb3ZlKCk7IC8vIG11c3Qg
ZG8gdGhpcyB3YXkgdG8gY2xlYW4gdXAgZXhwYW5kbworICAgICAgICBmcmFnbWVudC5hcHBlbmRD
aGlsZChlbGVtZW50KTsKKyAgICAgICAgZGVsZXRlIGVsZW1lbnRzVG9SZW1vdmVba107CisgICAg
ICB9CisKKyAgICAgIGVsZW1lbnRzVG9SZW1vdmVbMF0gPSBuZXdOb2RlOworICAgICAgZWxlbWVu
dHNUb1JlbW92ZS5sZW5ndGggPSAxOworICAgIH0KKworCisgICAgZnVuY3Rpb24gY2xvbmVBbmRB
bm5vdGF0ZUZuKGZuLCBhbm5vdGF0aW9uKSB7CisgICAgICByZXR1cm4gZXh0ZW5kKGZ1bmN0aW9u
KCkgeyByZXR1cm4gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfSwgZm4sIGFubm90YXRpb24p
OworICAgIH0KKworCisgICAgZnVuY3Rpb24gaW52b2tlTGlua0ZuKGxpbmtGbiwgc2NvcGUsICRl
bGVtZW50LCBhdHRycywgY29udHJvbGxlcnMsIHRyYW5zY2x1ZGVGbikgeworICAgICAgdHJ5IHsK
KyAgICAgICAgbGlua0ZuKHNjb3BlLCAkZWxlbWVudCwgYXR0cnMsIGNvbnRyb2xsZXJzLCB0cmFu
c2NsdWRlRm4pOworICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAkZXhjZXB0aW9uSGFuZGxl
cihlLCBzdGFydGluZ1RhZygkZWxlbWVudCkpOworICAgICAgfQorICAgIH0KKworCisgICAgLy8g
U2V0IHVwICR3YXRjaGVzIGZvciBpc29sYXRlIHNjb3BlIGFuZCBjb250cm9sbGVyIGJpbmRpbmdz
LiBUaGlzIHByb2Nlc3MKKyAgICAvLyBvbmx5IG9jY3VycyBmb3IgaXNvbGF0ZSBzY29wZXMgYW5k
IG5ldyBzY29wZXMgd2l0aCBjb250cm9sbGVyQXMuCisgICAgZnVuY3Rpb24gaW5pdGlhbGl6ZURp
cmVjdGl2ZUJpbmRpbmdzKHNjb3BlLCBhdHRycywgZGVzdGluYXRpb24sIGJpbmRpbmdzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmUsIG5ld1Njb3Bl
KSB7CisgICAgICB2YXIgb25OZXdTY29wZURlc3Ryb3llZDsKKyAgICAgIGZvckVhY2goYmluZGlu
Z3MsIGZ1bmN0aW9uKGRlZmluaXRpb24sIHNjb3BlTmFtZSkgeworICAgICAgICB2YXIgYXR0ck5h
bWUgPSBkZWZpbml0aW9uLmF0dHJOYW1lLAorICAgICAgICBvcHRpb25hbCA9IGRlZmluaXRpb24u
b3B0aW9uYWwsCisgICAgICAgIG1vZGUgPSBkZWZpbml0aW9uLm1vZGUsIC8vIEAsID0sIG9yICYK
KyAgICAgICAgbGFzdFZhbHVlLAorICAgICAgICBwYXJlbnRHZXQsIHBhcmVudFNldCwgY29tcGFy
ZTsKKworICAgICAgICBpZiAoIWhhc093blByb3BlcnR5LmNhbGwoYXR0cnMsIGF0dHJOYW1lKSkg
eworICAgICAgICAgIC8vIEluIHRoZSBjYXNlIG9mIHVzZXIgZGVmaW5lZCBhIGJpbmRpbmcgd2l0
aCB0aGUgc2FtZSBuYW1lIGFzIGEgbWV0aG9kIGluIE9iamVjdC5wcm90b3R5cGUgYnV0IGRpZG4n
dCBzZXQKKyAgICAgICAgICAvLyB0aGUgY29ycmVzcG9uZGluZyBhdHRyaWJ1dGUuIFdlIG5lZWQg
dG8gbWFrZSBzdXJlIHN1YnNlcXVlbnQgY29kZSB3b24ndCBhY2Nlc3MgdG8gdGhlIHByb3RvdHlw
ZSBmdW5jdGlvbgorICAgICAgICAgIGF0dHJzW2F0dHJOYW1lXSA9IHVuZGVmaW5lZDsKKyAgICAg
ICAgfQorCisgICAgICAgIHN3aXRjaCAobW9kZSkgeworCisgICAgICAgICAgY2FzZSAnQCc6Cisg
ICAgICAgICAgICBpZiAoIWF0dHJzW2F0dHJOYW1lXSAmJiAhb3B0aW9uYWwpIHsKKyAgICAgICAg
ICAgICAgZGVzdGluYXRpb25bc2NvcGVOYW1lXSA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgYXR0cnMuJG9ic2VydmUoYXR0ck5hbWUsIGZ1bmN0aW9uKHZhbHVlKSB7
CisgICAgICAgICAgICAgIGRlc3RpbmF0aW9uW3Njb3BlTmFtZV0gPSB2YWx1ZTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgYXR0cnMuJCRvYnNlcnZlcnNbYXR0ck5hbWVdLiQkc2NvcGUg
PSBzY29wZTsKKyAgICAgICAgICAgIGlmIChhdHRyc1thdHRyTmFtZV0pIHsKKyAgICAgICAgICAg
ICAgLy8gSWYgdGhlIGF0dHJpYnV0ZSBoYXMgYmVlbiBwcm92aWRlZCB0aGVuIHdlIHRyaWdnZXIg
YW4gaW50ZXJwb2xhdGlvbiB0byBlbnN1cmUKKyAgICAgICAgICAgICAgLy8gdGhlIHZhbHVlIGlz
IHRoZXJlIGZvciB1c2UgaW4gdGhlIGxpbmsgZm4KKyAgICAgICAgICAgICAgZGVzdGluYXRpb25b
c2NvcGVOYW1lXSA9ICRpbnRlcnBvbGF0ZShhdHRyc1thdHRyTmFtZV0pKHNjb3BlKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSAnPSc6CisgICAg
ICAgICAgICBpZiAob3B0aW9uYWwgJiYgIWF0dHJzW2F0dHJOYW1lXSkgeworICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYXJlbnRHZXQgPSAkcGFyc2Uo
YXR0cnNbYXR0ck5hbWVdKTsKKworICAgICAgICAgICAgaWYgKHBhcmVudEdldC5saXRlcmFsKSB7
CisgICAgICAgICAgICAgIGNvbXBhcmUgPSBlcXVhbHM7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICBjb21wYXJlID0gZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYSA9PT0gYiB8
fCAoYSAhPT0gYSAmJiBiICE9PSBiKTsgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBh
cmVudFNldCA9IHBhcmVudEdldC5hc3NpZ24gfHwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
IC8vIHJlc2V0IHRoZSBjaGFuZ2UsIG9yIHdlIHdpbGwgdGhyb3cgdGhpcyBleGNlcHRpb24gb24g
ZXZlcnkgJGRpZ2VzdAorICAgICAgICAgICAgICBsYXN0VmFsdWUgPSBkZXN0aW5hdGlvbltzY29w
ZU5hbWVdID0gcGFyZW50R2V0KHNjb3BlKTsKKyAgICAgICAgICAgICAgdGhyb3cgJGNvbXBpbGVN
aW5FcnIoJ25vbmFzc2lnbicsCisgICAgICAgICAgICAgICAgICAiRXhwcmVzc2lvbiAnezB9JyB1
c2VkIHdpdGggZGlyZWN0aXZlICd7MX0nIGlzIG5vbi1hc3NpZ25hYmxlISIsCisgICAgICAgICAg
ICAgICAgICBhdHRyc1thdHRyTmFtZV0sIGRpcmVjdGl2ZS5uYW1lKTsKKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICBsYXN0VmFsdWUgPSBkZXN0aW5hdGlvbltzY29wZU5hbWVdID0gcGFyZW50
R2V0KHNjb3BlKTsKKyAgICAgICAgICAgIHZhciBwYXJlbnRWYWx1ZVdhdGNoID0gZnVuY3Rpb24g
cGFyZW50VmFsdWVXYXRjaChwYXJlbnRWYWx1ZSkgeworICAgICAgICAgICAgICBpZiAoIWNvbXBh
cmUocGFyZW50VmFsdWUsIGRlc3RpbmF0aW9uW3Njb3BlTmFtZV0pKSB7CisgICAgICAgICAgICAg
ICAgLy8gd2UgYXJlIG91dCBvZiBzeW5jIGFuZCBuZWVkIHRvIGNvcHkKKyAgICAgICAgICAgICAg
ICBpZiAoIWNvbXBhcmUocGFyZW50VmFsdWUsIGxhc3RWYWx1ZSkpIHsKKyAgICAgICAgICAgICAg
ICAgIC8vIHBhcmVudCBjaGFuZ2VkIGFuZCBpdCBoYXMgcHJlY2VkZW5jZQorICAgICAgICAgICAg
ICAgICAgZGVzdGluYXRpb25bc2NvcGVOYW1lXSA9IHBhcmVudFZhbHVlOworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgcGFyZW50IGNhbiBiZSBh
c3NpZ25lZCB0aGVuIGRvIHNvCisgICAgICAgICAgICAgICAgICBwYXJlbnRTZXQoc2NvcGUsIHBh
cmVudFZhbHVlID0gZGVzdGluYXRpb25bc2NvcGVOYW1lXSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHJldHVybiBsYXN0VmFsdWUgPSBwYXJlbnRW
YWx1ZTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBwYXJlbnRWYWx1ZVdhdGNoLiRzdGF0
ZWZ1bCA9IHRydWU7CisgICAgICAgICAgICB2YXIgdW53YXRjaDsKKyAgICAgICAgICAgIGlmIChk
ZWZpbml0aW9uLmNvbGxlY3Rpb24pIHsKKyAgICAgICAgICAgICAgdW53YXRjaCA9IHNjb3BlLiR3
YXRjaENvbGxlY3Rpb24oYXR0cnNbYXR0ck5hbWVdLCBwYXJlbnRWYWx1ZVdhdGNoKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHVud2F0Y2ggPSBzY29wZS4kd2F0Y2goJHBh
cnNlKGF0dHJzW2F0dHJOYW1lXSwgcGFyZW50VmFsdWVXYXRjaCksIG51bGwsIHBhcmVudEdldC5s
aXRlcmFsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9uTmV3U2NvcGVEZXN0cm95ZWQg
PSAob25OZXdTY29wZURlc3Ryb3llZCB8fCBbXSk7CisgICAgICAgICAgICBvbk5ld1Njb3BlRGVz
dHJveWVkLnB1c2godW53YXRjaCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNh
c2UgJyYnOgorICAgICAgICAgICAgcGFyZW50R2V0ID0gJHBhcnNlKGF0dHJzW2F0dHJOYW1lXSk7
CisKKyAgICAgICAgICAgIC8vIERvbid0IGFzc2lnbiBub29wIHRvIGRlc3RpbmF0aW9uIGlmIGV4
cHJlc3Npb24gaXMgbm90IHZhbGlkCisgICAgICAgICAgICBpZiAocGFyZW50R2V0ID09PSBub29w
ICYmIG9wdGlvbmFsKSBicmVhazsKKworICAgICAgICAgICAgZGVzdGluYXRpb25bc2NvcGVOYW1l
XSA9IGZ1bmN0aW9uKGxvY2FscykgeworICAgICAgICAgICAgICByZXR1cm4gcGFyZW50R2V0KHNj
b3BlLCBsb2NhbHMpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICB9KTsKKyAgICAgIHZhciBkZXN0cm95QmluZGluZ3MgPSBvbk5ld1Njb3BlRGVz
dHJveWVkID8gZnVuY3Rpb24gZGVzdHJveUJpbmRpbmdzKCkgeworICAgICAgICBmb3IgKHZhciBp
ID0gMCwgaWkgPSBvbk5ld1Njb3BlRGVzdHJveWVkLmxlbmd0aDsgaSA8IGlpOyArK2kpIHsKKyAg
ICAgICAgICBvbk5ld1Njb3BlRGVzdHJveWVkW2ldKCk7CisgICAgICAgIH0KKyAgICAgIH0gOiBu
b29wOworICAgICAgaWYgKG5ld1Njb3BlICYmIGRlc3Ryb3lCaW5kaW5ncyAhPT0gbm9vcCkgewor
ICAgICAgICBuZXdTY29wZS4kb24oJyRkZXN0cm95JywgZGVzdHJveUJpbmRpbmdzKTsKKyAgICAg
ICAgcmV0dXJuIG5vb3A7CisgICAgICB9CisgICAgICByZXR1cm4gZGVzdHJveUJpbmRpbmdzOwor
ICAgIH0KKyAgfV07Cit9CisKK3ZhciBQUkVGSVhfUkVHRVhQID0gL14oKD86eHxkYXRhKVtcOlwt
X10pL2k7CisvKioKKyAqIENvbnZlcnRzIGFsbCBhY2NlcHRlZCBkaXJlY3RpdmVzIGZvcm1hdCBp
bnRvIHByb3BlciBkaXJlY3RpdmUgbmFtZS4KKyAqIEBwYXJhbSBuYW1lIE5hbWUgdG8gbm9ybWFs
aXplCisgKi8KK2Z1bmN0aW9uIGRpcmVjdGl2ZU5vcm1hbGl6ZShuYW1lKSB7CisgIHJldHVybiBj
YW1lbENhc2UobmFtZS5yZXBsYWNlKFBSRUZJWF9SRUdFWFAsICcnKSk7Cit9CisKKy8qKgorICog
QG5nZG9jIHR5cGUKKyAqIEBuYW1lICRjb21waWxlLmRpcmVjdGl2ZS5BdHRyaWJ1dGVzCisgKgor
ICogQGRlc2NyaXB0aW9uCisgKiBBIHNoYXJlZCBvYmplY3QgYmV0d2VlbiBkaXJlY3RpdmUgY29t
cGlsZSAvIGxpbmtpbmcgZnVuY3Rpb25zIHdoaWNoIGNvbnRhaW5zIG5vcm1hbGl6ZWQgRE9NCisg
KiBlbGVtZW50IGF0dHJpYnV0ZXMuIFRoZSB2YWx1ZXMgcmVmbGVjdCBjdXJyZW50IGJpbmRpbmcg
c3RhdGUgYHt7IH19YC4gVGhlIG5vcm1hbGl6YXRpb24gaXMKKyAqIG5lZWRlZCBzaW5jZSBhbGwg
b2YgdGhlc2UgYXJlIHRyZWF0ZWQgYXMgZXF1aXZhbGVudCBpbiBBbmd1bGFyOgorICoKKyAqIGBg
YAorICogICAgPHNwYW4gbmc6YmluZD0iYSIgbmctYmluZD0iYSIgZGF0YS1uZy1iaW5kPSJhIiB4
LW5nLWJpbmQ9ImEiPgorICogYGBgCisgKi8KKworLyoqCisgKiBAbmdkb2MgcHJvcGVydHkKKyAq
IEBuYW1lICRjb21waWxlLmRpcmVjdGl2ZS5BdHRyaWJ1dGVzIyRhdHRyCisgKgorICogQGRlc2Ny
aXB0aW9uCisgKiBBIG1hcCBvZiBET00gZWxlbWVudCBhdHRyaWJ1dGUgbmFtZXMgdG8gdGhlIG5v
cm1hbGl6ZWQgbmFtZS4gVGhpcyBpcworICogbmVlZGVkIHRvIGRvIHJldmVyc2UgbG9va3VwIGZy
b20gbm9ybWFsaXplZCBuYW1lIGJhY2sgdG8gYWN0dWFsIG5hbWUuCisgKi8KKworCisvKioKKyAq
IEBuZ2RvYyBtZXRob2QKKyAqIEBuYW1lICRjb21waWxlLmRpcmVjdGl2ZS5BdHRyaWJ1dGVzIyRz
ZXQKKyAqIEBraW5kIGZ1bmN0aW9uCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBTZXQgRE9NIGVs
ZW1lbnQgYXR0cmlidXRlIHZhbHVlLgorICoKKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBO
b3JtYWxpemVkIGVsZW1lbnQgYXR0cmlidXRlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIG1vZGlm
eS4gVGhlIG5hbWUgaXMKKyAqICAgICAgICAgIHJldmVyc2UtdHJhbnNsYXRlZCB1c2luZyB0aGUg
e0BsaW5rIG5nLiRjb21waWxlLmRpcmVjdGl2ZS5BdHRyaWJ1dGVzIyRhdHRyICRhdHRyfQorICog
ICAgICAgICAgcHJvcGVydHkgdG8gdGhlIG9yaWdpbmFsIG5hbWUuCisgKiBAcGFyYW0ge3N0cmlu
Z30gdmFsdWUgVmFsdWUgdG8gc2V0IHRoZSBhdHRyaWJ1dGUgdG8uIFRoZSB2YWx1ZSBjYW4gYmUg
YW4gaW50ZXJwb2xhdGVkIHN0cmluZy4KKyAqLworCisKKworLyoqCisgKiBDbG9zdXJlIGNvbXBp
bGVyIHR5cGUgaW5mb3JtYXRpb24KKyAqLworCitmdW5jdGlvbiBub2Rlc2V0TGlua2luZ0ZuKAor
ICAvKiBhbmd1bGFyLlNjb3BlICovIHNjb3BlLAorICAvKiBOb2RlTGlzdCAqLyBub2RlTGlzdCwK
KyAgLyogRWxlbWVudCAqLyByb290RWxlbWVudCwKKyAgLyogZnVuY3Rpb24oRnVuY3Rpb24pICov
IGJvdW5kVHJhbnNjbHVkZUZuCispIHt9CisKK2Z1bmN0aW9uIGRpcmVjdGl2ZUxpbmtpbmdGbigK
KyAgLyogbm9kZXNldExpbmtpbmdGbiAqLyBub2Rlc2V0TGlua2luZ0ZuLAorICAvKiBhbmd1bGFy
LlNjb3BlICovIHNjb3BlLAorICAvKiBOb2RlICovIG5vZGUsCisgIC8qIEVsZW1lbnQgKi8gcm9v
dEVsZW1lbnQsCisgIC8qIGZ1bmN0aW9uKEZ1bmN0aW9uKSAqLyBib3VuZFRyYW5zY2x1ZGVGbgor
KSB7fQorCitmdW5jdGlvbiB0b2tlbkRpZmZlcmVuY2Uoc3RyMSwgc3RyMikgeworICB2YXIgdmFs
dWVzID0gJycsCisgICAgICB0b2tlbnMxID0gc3RyMS5zcGxpdCgvXHMrLyksCisgICAgICB0b2tl
bnMyID0gc3RyMi5zcGxpdCgvXHMrLyk7CisKKyAgb3V0ZXI6CisgIGZvciAodmFyIGkgPSAwOyBp
IDwgdG9rZW5zMS5sZW5ndGg7IGkrKykgeworICAgIHZhciB0b2tlbiA9IHRva2VuczFbaV07Cisg
ICAgZm9yICh2YXIgaiA9IDA7IGogPCB0b2tlbnMyLmxlbmd0aDsgaisrKSB7CisgICAgICBpZiAo
dG9rZW4gPT0gdG9rZW5zMltqXSkgY29udGludWUgb3V0ZXI7CisgICAgfQorICAgIHZhbHVlcyAr
PSAodmFsdWVzLmxlbmd0aCA+IDAgPyAnICcgOiAnJykgKyB0b2tlbjsKKyAgfQorICByZXR1cm4g
dmFsdWVzOworfQorCitmdW5jdGlvbiByZW1vdmVDb21tZW50cyhqcU5vZGVzKSB7CisgIGpxTm9k
ZXMgPSBqcUxpdGUoanFOb2Rlcyk7CisgIHZhciBpID0ganFOb2Rlcy5sZW5ndGg7CisKKyAgaWYg
KGkgPD0gMSkgeworICAgIHJldHVybiBqcU5vZGVzOworICB9CisKKyAgd2hpbGUgKGktLSkgewor
ICAgIHZhciBub2RlID0ganFOb2Rlc1tpXTsKKyAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTk9E
RV9UWVBFX0NPTU1FTlQpIHsKKyAgICAgIHNwbGljZS5jYWxsKGpxTm9kZXMsIGksIDEpOworICAg
IH0KKyAgfQorICByZXR1cm4ganFOb2RlczsKK30KKwordmFyICRjb250cm9sbGVyTWluRXJyID0g
bWluRXJyKCckY29udHJvbGxlcicpOworCisKK3ZhciBDTlRSTF9SRUcgPSAvXihcUyspKFxzK2Fz
XHMrKFx3KykpPyQvOworZnVuY3Rpb24gaWRlbnRpZmllckZvckNvbnRyb2xsZXIoY29udHJvbGxl
ciwgaWRlbnQpIHsKKyAgaWYgKGlkZW50ICYmIGlzU3RyaW5nKGlkZW50KSkgcmV0dXJuIGlkZW50
OworICBpZiAoaXNTdHJpbmcoY29udHJvbGxlcikpIHsKKyAgICB2YXIgbWF0Y2ggPSBDTlRSTF9S
RUcuZXhlYyhjb250cm9sbGVyKTsKKyAgICBpZiAobWF0Y2gpIHJldHVybiBtYXRjaFszXTsKKyAg
fQorfQorCisKKy8qKgorICogQG5nZG9jIHByb3ZpZGVyCisgKiBAbmFtZSAkY29udHJvbGxlclBy
b3ZpZGVyCisgKiBAZGVzY3JpcHRpb24KKyAqIFRoZSB7QGxpbmsgbmcuJGNvbnRyb2xsZXIgJGNv
bnRyb2xsZXIgc2VydmljZX0gaXMgdXNlZCBieSBBbmd1bGFyIHRvIGNyZWF0ZSBuZXcKKyAqIGNv
bnRyb2xsZXJzLgorICoKKyAqIFRoaXMgcHJvdmlkZXIgYWxsb3dzIGNvbnRyb2xsZXIgcmVnaXN0
cmF0aW9uIHZpYSB0aGUKKyAqIHtAbGluayBuZy4kY29udHJvbGxlclByb3ZpZGVyI3JlZ2lzdGVy
IHJlZ2lzdGVyfSBtZXRob2QuCisgKi8KK2Z1bmN0aW9uICRDb250cm9sbGVyUHJvdmlkZXIoKSB7
CisgIHZhciBjb250cm9sbGVycyA9IHt9LAorICAgICAgZ2xvYmFscyA9IGZhbHNlOworCisgIC8q
KgorICAgKiBAbmdkb2MgbWV0aG9kCisgICAqIEBuYW1lICRjb250cm9sbGVyUHJvdmlkZXIjcmVn
aXN0ZXIKKyAgICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fSBuYW1lIENvbnRyb2xsZXIgbmFtZSwg
b3IgYW4gb2JqZWN0IG1hcCBvZiBjb250cm9sbGVycyB3aGVyZSB0aGUga2V5cyBhcmUKKyAgICog
ICAgdGhlIG5hbWVzIGFuZCB0aGUgdmFsdWVzIGFyZSB0aGUgY29uc3RydWN0b3JzLgorICAgKiBA
cGFyYW0ge0Z1bmN0aW9ufEFycmF5fSBjb25zdHJ1Y3RvciBDb250cm9sbGVyIGNvbnN0cnVjdG9y
IGZuIChvcHRpb25hbGx5IGRlY29yYXRlZCB3aXRoIERJCisgICAqICAgIGFubm90YXRpb25zIGlu
IHRoZSBhcnJheSBub3RhdGlvbikuCisgICAqLworICB0aGlzLnJlZ2lzdGVyID0gZnVuY3Rpb24o
bmFtZSwgY29uc3RydWN0b3IpIHsKKyAgICBhc3NlcnROb3RIYXNPd25Qcm9wZXJ0eShuYW1lLCAn
Y29udHJvbGxlcicpOworICAgIGlmIChpc09iamVjdChuYW1lKSkgeworICAgICAgZXh0ZW5kKGNv
bnRyb2xsZXJzLCBuYW1lKTsKKyAgICB9IGVsc2UgeworICAgICAgY29udHJvbGxlcnNbbmFtZV0g
PSBjb25zdHJ1Y3RvcjsKKyAgICB9CisgIH07CisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRob2QK
KyAgICogQG5hbWUgJGNvbnRyb2xsZXJQcm92aWRlciNhbGxvd0dsb2JhbHMKKyAgICogQGRlc2Ny
aXB0aW9uIElmIGNhbGxlZCwgYWxsb3dzIGAkY29udHJvbGxlcmAgdG8gZmluZCBjb250cm9sbGVy
IGNvbnN0cnVjdG9ycyBvbiBgd2luZG93YAorICAgKi8KKyAgdGhpcy5hbGxvd0dsb2JhbHMgPSBm
dW5jdGlvbigpIHsKKyAgICBnbG9iYWxzID0gdHJ1ZTsKKyAgfTsKKworCisgIHRoaXMuJGdldCA9
IFsnJGluamVjdG9yJywgJyR3aW5kb3cnLCBmdW5jdGlvbigkaW5qZWN0b3IsICR3aW5kb3cpIHsK
KworICAgIC8qKgorICAgICAqIEBuZ2RvYyBzZXJ2aWNlCisgICAgICogQG5hbWUgJGNvbnRyb2xs
ZXIKKyAgICAgKiBAcmVxdWlyZXMgJGluamVjdG9yCisgICAgICoKKyAgICAgKiBAcGFyYW0ge0Z1
bmN0aW9ufHN0cmluZ30gY29uc3RydWN0b3IgSWYgY2FsbGVkIHdpdGggYSBmdW5jdGlvbiB0aGVu
IGl0J3MgY29uc2lkZXJlZCB0byBiZSB0aGUKKyAgICAgKiAgICBjb250cm9sbGVyIGNvbnN0cnVj
dG9yIGZ1bmN0aW9uLiBPdGhlcndpc2UgaXQncyBjb25zaWRlcmVkIHRvIGJlIGEgc3RyaW5nIHdo
aWNoIGlzIHVzZWQKKyAgICAgKiAgICB0byByZXRyaWV2ZSB0aGUgY29udHJvbGxlciBjb25zdHJ1
Y3RvciB1c2luZyB0aGUgZm9sbG93aW5nIHN0ZXBzOgorICAgICAqCisgICAgICogICAgKiBjaGVj
ayBpZiBhIGNvbnRyb2xsZXIgd2l0aCBnaXZlbiBuYW1lIGlzIHJlZ2lzdGVyZWQgdmlhIGAkY29u
dHJvbGxlclByb3ZpZGVyYAorICAgICAqICAgICogY2hlY2sgaWYgZXZhbHVhdGluZyB0aGUgc3Ry
aW5nIG9uIHRoZSBjdXJyZW50IHNjb3BlIHJldHVybnMgYSBjb25zdHJ1Y3RvcgorICAgICAqICAg
ICogaWYgJGNvbnRyb2xsZXJQcm92aWRlciNhbGxvd0dsb2JhbHMsIGNoZWNrIGB3aW5kb3dbY29u
c3RydWN0b3JdYCBvbiB0aGUgZ2xvYmFsCisgICAgICogICAgICBgd2luZG93YCBvYmplY3QgKG5v
dCByZWNvbW1lbmRlZCkKKyAgICAgKgorICAgICAqICAgIFRoZSBzdHJpbmcgY2FuIHVzZSB0aGUg
YGNvbnRyb2xsZXIgYXMgcHJvcGVydHlgIHN5bnRheCwgd2hlcmUgdGhlIGNvbnRyb2xsZXIgaW5z
dGFuY2UgaXMgcHVibGlzaGVkCisgICAgICogICAgYXMgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBv
biB0aGUgYHNjb3BlYDsgdGhlIGBzY29wZWAgbXVzdCBiZSBpbmplY3RlZCBpbnRvIGBsb2NhbHNg
IHBhcmFtIGZvciB0aGlzCisgICAgICogICAgdG8gd29yayBjb3JyZWN0bHkuCisgICAgICoKKyAg
ICAgKiBAcGFyYW0ge09iamVjdH0gbG9jYWxzIEluamVjdGlvbiBsb2NhbHMgZm9yIENvbnRyb2xs
ZXIuCisgICAgICogQHJldHVybiB7T2JqZWN0fSBJbnN0YW5jZSBvZiBnaXZlbiBjb250cm9sbGVy
LgorICAgICAqCisgICAgICogQGRlc2NyaXB0aW9uCisgICAgICogYCRjb250cm9sbGVyYCBzZXJ2
aWNlIGlzIHJlc3BvbnNpYmxlIGZvciBpbnN0YW50aWF0aW5nIGNvbnRyb2xsZXJzLgorICAgICAq
CisgICAgICogSXQncyBqdXN0IGEgc2ltcGxlIGNhbGwgdG8ge0BsaW5rIGF1dG8uJGluamVjdG9y
ICRpbmplY3Rvcn0sIGJ1dCBleHRyYWN0ZWQgaW50bworICAgICAqIGEgc2VydmljZSwgc28gdGhh
dCBvbmUgY2FuIG92ZXJyaWRlIHRoaXMgc2VydmljZSB3aXRoIFtCQyB2ZXJzaW9uXShodHRwczov
L2dpc3QuZ2l0aHViLmNvbS8xNjQ5Nzg4KS4KKyAgICAgKi8KKyAgICByZXR1cm4gZnVuY3Rpb24o
ZXhwcmVzc2lvbiwgbG9jYWxzLCBsYXRlciwgaWRlbnQpIHsKKyAgICAgIC8vIFBSSVZBVEUgQVBJ
OgorICAgICAgLy8gICBwYXJhbSBgbGF0ZXJgIC0tLSBpbmRpY2F0ZXMgdGhhdCB0aGUgY29udHJv
bGxlcidzIGNvbnN0cnVjdG9yIGlzIGludm9rZWQgYXQgYSBsYXRlciB0aW1lLgorICAgICAgLy8g
ICAgICAgICAgICAgICAgICAgICBJZiB0cnVlLCAkY29udHJvbGxlciB3aWxsIGFsbG9jYXRlIHRo
ZSBvYmplY3Qgd2l0aCB0aGUgY29ycmVjdAorICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBw
cm90b3R5cGUgY2hhaW4sIGJ1dCB3aWxsIG5vdCBpbnZva2UgdGhlIGNvbnRyb2xsZXIgdW50aWwg
YSByZXR1cm5lZAorICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayBpcyBpbnZv
a2VkLgorICAgICAgLy8gICBwYXJhbSBgaWRlbnRgIC0tLSBBbiBvcHRpb25hbCBsYWJlbCB3aGlj
aCBvdmVycmlkZXMgdGhlIGxhYmVsIHBhcnNlZCBmcm9tIHRoZSBjb250cm9sbGVyCisgICAgICAv
LyAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24sIGlmIGFueS4KKyAgICAgIHZhciBpbnN0
YW5jZSwgbWF0Y2gsIGNvbnN0cnVjdG9yLCBpZGVudGlmaWVyOworICAgICAgbGF0ZXIgPSBsYXRl
ciA9PT0gdHJ1ZTsKKyAgICAgIGlmIChpZGVudCAmJiBpc1N0cmluZyhpZGVudCkpIHsKKyAgICAg
ICAgaWRlbnRpZmllciA9IGlkZW50OworICAgICAgfQorCisgICAgICBpZiAoaXNTdHJpbmcoZXhw
cmVzc2lvbikpIHsKKyAgICAgICAgbWF0Y2ggPSBleHByZXNzaW9uLm1hdGNoKENOVFJMX1JFRyk7
CisgICAgICAgIGlmICghbWF0Y2gpIHsKKyAgICAgICAgICB0aHJvdyAkY29udHJvbGxlck1pbkVy
cignY3RybGZtdCcsCisgICAgICAgICAgICAiQmFkbHkgZm9ybWVkIGNvbnRyb2xsZXIgc3RyaW5n
ICd7MH0nLiAiICsKKyAgICAgICAgICAgICJNdXN0IG1hdGNoIGBfX25hbWVfXyBhcyBfX2lkX19g
IG9yIGBfX25hbWVfX2AuIiwgZXhwcmVzc2lvbik7CisgICAgICAgIH0KKyAgICAgICAgY29uc3Ry
dWN0b3IgPSBtYXRjaFsxXSwKKyAgICAgICAgaWRlbnRpZmllciA9IGlkZW50aWZpZXIgfHwgbWF0
Y2hbM107CisgICAgICAgIGV4cHJlc3Npb24gPSBjb250cm9sbGVycy5oYXNPd25Qcm9wZXJ0eShj
b25zdHJ1Y3RvcikKKyAgICAgICAgICAgID8gY29udHJvbGxlcnNbY29uc3RydWN0b3JdCisgICAg
ICAgICAgICA6IGdldHRlcihsb2NhbHMuJHNjb3BlLCBjb25zdHJ1Y3RvciwgdHJ1ZSkgfHwKKyAg
ICAgICAgICAgICAgICAoZ2xvYmFscyA/IGdldHRlcigkd2luZG93LCBjb25zdHJ1Y3RvciwgdHJ1
ZSkgOiB1bmRlZmluZWQpOworCisgICAgICAgIGFzc2VydEFyZ0ZuKGV4cHJlc3Npb24sIGNvbnN0
cnVjdG9yLCB0cnVlKTsKKyAgICAgIH0KKworICAgICAgaWYgKGxhdGVyKSB7CisgICAgICAgIC8v
IEluc3RhbnRpYXRlIGNvbnRyb2xsZXIgbGF0ZXI6CisgICAgICAgIC8vIFRoaXMgbWFjaGluZXJ5
IGlzIHVzZWQgdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBvYmplY3QgYmVmb3JlIGNhbGxp
bmcgdGhlCisgICAgICAgIC8vIGNvbnRyb2xsZXIncyBjb25zdHJ1Y3RvciBpdHNlbGYuCisgICAg
ICAgIC8vCisgICAgICAgIC8vIFRoaXMgYWxsb3dzIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8g
dGhlIGNvbnRyb2xsZXIgYmVmb3JlIHRoZSBjb25zdHJ1Y3RvciBpcworICAgICAgICAvLyBpbnZv
a2VkLiBQcmltYXJpbHksIHRoaXMgaXMgdXNlZCBmb3IgaXNvbGF0ZSBzY29wZSBiaW5kaW5ncyBp
biAkY29tcGlsZS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhpcyBmZWF0dXJlIGlzIG5vdCBp
bnRlbmRlZCBmb3IgdXNlIGJ5IGFwcGxpY2F0aW9ucywgYW5kIGlzIHRodXMgbm90IGRvY3VtZW50
ZWQKKyAgICAgICAgLy8gcHVibGljbHkuCisgICAgICAgIC8vIE9iamVjdCBjcmVhdGlvbjogaHR0
cDovL2pzcGVyZi5jb20vY3JlYXRlLWNvbnN0cnVjdG9yLzIKKyAgICAgICAgdmFyIGNvbnRyb2xs
ZXJQcm90b3R5cGUgPSAoaXNBcnJheShleHByZXNzaW9uKSA/CisgICAgICAgICAgZXhwcmVzc2lv
bltleHByZXNzaW9uLmxlbmd0aCAtIDFdIDogZXhwcmVzc2lvbikucHJvdG90eXBlOworICAgICAg
ICBpbnN0YW5jZSA9IE9iamVjdC5jcmVhdGUoY29udHJvbGxlclByb3RvdHlwZSB8fCBudWxsKTsK
KworICAgICAgICBpZiAoaWRlbnRpZmllcikgeworICAgICAgICAgIGFkZElkZW50aWZpZXIobG9j
YWxzLCBpZGVudGlmaWVyLCBpbnN0YW5jZSwgY29uc3RydWN0b3IgfHwgZXhwcmVzc2lvbi5uYW1l
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBpbnN0YW50aWF0ZTsKKyAgICAgICAgcmV0dXJu
IGluc3RhbnRpYXRlID0gZXh0ZW5kKGZ1bmN0aW9uKCkgeworICAgICAgICAgIHZhciByZXN1bHQg
PSAkaW5qZWN0b3IuaW52b2tlKGV4cHJlc3Npb24sIGluc3RhbmNlLCBsb2NhbHMsIGNvbnN0cnVj
dG9yKTsKKyAgICAgICAgICBpZiAocmVzdWx0ICE9PSBpbnN0YW5jZSAmJiAoaXNPYmplY3QocmVz
dWx0KSB8fCBpc0Z1bmN0aW9uKHJlc3VsdCkpKSB7CisgICAgICAgICAgICBpbnN0YW5jZSA9IHJl
c3VsdDsKKyAgICAgICAgICAgIGlmIChpZGVudGlmaWVyKSB7CisgICAgICAgICAgICAgIC8vIElm
IHJlc3VsdCBjaGFuZ2VkLCByZS1hc3NpZ24gY29udHJvbGxlckFzIHZhbHVlIHRvIHNjb3BlLgor
ICAgICAgICAgICAgICBhZGRJZGVudGlmaWVyKGxvY2FscywgaWRlbnRpZmllciwgaW5zdGFuY2Us
IGNvbnN0cnVjdG9yIHx8IGV4cHJlc3Npb24ubmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgfQorICAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICAgICAgfSwgeworICAgICAgICAg
IGluc3RhbmNlOiBpbnN0YW5jZSwKKyAgICAgICAgICBpZGVudGlmaWVyOiBpZGVudGlmaWVyCisg
ICAgICAgIH0pOworICAgICAgfQorCisgICAgICBpbnN0YW5jZSA9ICRpbmplY3Rvci5pbnN0YW50
aWF0ZShleHByZXNzaW9uLCBsb2NhbHMsIGNvbnN0cnVjdG9yKTsKKworICAgICAgaWYgKGlkZW50
aWZpZXIpIHsKKyAgICAgICAgYWRkSWRlbnRpZmllcihsb2NhbHMsIGlkZW50aWZpZXIsIGluc3Rh
bmNlLCBjb25zdHJ1Y3RvciB8fCBleHByZXNzaW9uLm5hbWUpOworICAgICAgfQorCisgICAgICBy
ZXR1cm4gaW5zdGFuY2U7CisgICAgfTsKKworICAgIGZ1bmN0aW9uIGFkZElkZW50aWZpZXIobG9j
YWxzLCBpZGVudGlmaWVyLCBpbnN0YW5jZSwgbmFtZSkgeworICAgICAgaWYgKCEobG9jYWxzICYm
IGlzT2JqZWN0KGxvY2Fscy4kc2NvcGUpKSkgeworICAgICAgICB0aHJvdyBtaW5FcnIoJyRjb250
cm9sbGVyJykoJ25vc2NwJywKKyAgICAgICAgICAiQ2Fubm90IGV4cG9ydCBjb250cm9sbGVyICd7
MH0nIGFzICd7MX0nISBObyAkc2NvcGUgb2JqZWN0IHByb3ZpZGVkIHZpYSBgbG9jYWxzYC4iLAor
ICAgICAgICAgIG5hbWUsIGlkZW50aWZpZXIpOworICAgICAgfQorCisgICAgICBsb2NhbHMuJHNj
b3BlW2lkZW50aWZpZXJdID0gaW5zdGFuY2U7CisgICAgfQorICB9XTsKK30KKworLyoqCisgKiBA
bmdkb2Mgc2VydmljZQorICogQG5hbWUgJGRvY3VtZW50CisgKiBAcmVxdWlyZXMgJHdpbmRvdwor
ICoKKyAqIEBkZXNjcmlwdGlvbgorICogQSB7QGxpbmsgYW5ndWxhci5lbGVtZW50IGpRdWVyeSBv
ciBqcUxpdGV9IHdyYXBwZXIgZm9yIHRoZSBicm93c2VyJ3MgYHdpbmRvdy5kb2N1bWVudGAgb2Jq
ZWN0LgorICoKKyAqIEBleGFtcGxlCisgICA8ZXhhbXBsZSBtb2R1bGU9ImRvY3VtZW50RXhhbXBs
ZSI+CisgICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICAgIDxkaXYgbmctY29udHJv
bGxlcj0iRXhhbXBsZUNvbnRyb2xsZXIiPgorICAgICAgICAgPHA+JGRvY3VtZW50IHRpdGxlOiA8
YiBuZy1iaW5kPSJ0aXRsZSI+PC9iPjwvcD4KKyAgICAgICAgIDxwPndpbmRvdy5kb2N1bWVudCB0
aXRsZTogPGIgbmctYmluZD0id2luZG93VGl0bGUiPjwvYj48L3A+CisgICAgICAgPC9kaXY+Cisg
ICAgIDwvZmlsZT4KKyAgICAgPGZpbGUgbmFtZT0ic2NyaXB0LmpzIj4KKyAgICAgICBhbmd1bGFy
Lm1vZHVsZSgnZG9jdW1lbnRFeGFtcGxlJywgW10pCisgICAgICAgICAuY29udHJvbGxlcignRXhh
bXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsICckZG9jdW1lbnQnLCBmdW5jdGlvbigkc2NvcGUs
ICRkb2N1bWVudCkgeworICAgICAgICAgICAkc2NvcGUudGl0bGUgPSAkZG9jdW1lbnRbMF0udGl0
bGU7CisgICAgICAgICAgICRzY29wZS53aW5kb3dUaXRsZSA9IGFuZ3VsYXIuZWxlbWVudCh3aW5k
b3cuZG9jdW1lbnQpWzBdLnRpdGxlOworICAgICAgICAgfV0pOworICAgICA8L2ZpbGU+CisgICA8
L2V4YW1wbGU+CisgKi8KK2Z1bmN0aW9uICREb2N1bWVudFByb3ZpZGVyKCkgeworICB0aGlzLiRn
ZXQgPSBbJyR3aW5kb3cnLCBmdW5jdGlvbih3aW5kb3cpIHsKKyAgICByZXR1cm4ganFMaXRlKHdp
bmRvdy5kb2N1bWVudCk7CisgIH1dOworfQorCisvKioKKyAqIEBuZ2RvYyBzZXJ2aWNlCisgKiBA
bmFtZSAkZXhjZXB0aW9uSGFuZGxlcgorICogQHJlcXVpcmVzIG5nLiRsb2cKKyAqCisgKiBAZGVz
Y3JpcHRpb24KKyAqIEFueSB1bmNhdWdodCBleGNlcHRpb24gaW4gYW5ndWxhciBleHByZXNzaW9u
cyBpcyBkZWxlZ2F0ZWQgdG8gdGhpcyBzZXJ2aWNlLgorICogVGhlIGRlZmF1bHQgaW1wbGVtZW50
YXRpb24gc2ltcGx5IGRlbGVnYXRlcyB0byBgJGxvZy5lcnJvcmAgd2hpY2ggbG9ncyBpdCBpbnRv
CisgKiB0aGUgYnJvd3NlciBjb25zb2xlLgorICoKKyAqIEluIHVuaXQgdGVzdHMsIGlmIGBhbmd1
bGFyLW1vY2tzLmpzYCBpcyBsb2FkZWQsIHRoaXMgc2VydmljZSBpcyBvdmVycmlkZGVuIGJ5Cisg
KiB7QGxpbmsgbmdNb2NrLiRleGNlcHRpb25IYW5kbGVyIG1vY2sgJGV4Y2VwdGlvbkhhbmRsZXJ9
IHdoaWNoIGFpZHMgaW4gdGVzdGluZy4KKyAqCisgKiAjIyBFeGFtcGxlOgorICoKKyAqIGBgYGpz
CisgKiAgIGFuZ3VsYXIubW9kdWxlKCdleGNlcHRpb25PdmVycmlkZScsIFtdKS5mYWN0b3J5KCck
ZXhjZXB0aW9uSGFuZGxlcicsIGZ1bmN0aW9uKCkgeworICogICAgIHJldHVybiBmdW5jdGlvbihl
eGNlcHRpb24sIGNhdXNlKSB7CisgKiAgICAgICBleGNlcHRpb24ubWVzc2FnZSArPSAnIChjYXVz
ZWQgYnkgIicgKyBjYXVzZSArICciKSc7CisgKiAgICAgICB0aHJvdyBleGNlcHRpb247CisgKiAg
ICAgfTsKKyAqICAgfSk7CisgKiBgYGAKKyAqCisgKiBUaGlzIGV4YW1wbGUgd2lsbCBvdmVycmlk
ZSB0aGUgbm9ybWFsIGFjdGlvbiBvZiBgJGV4Y2VwdGlvbkhhbmRsZXJgLCB0byBtYWtlIGFuZ3Vs
YXIKKyAqIGV4Y2VwdGlvbnMgZmFpbCBoYXJkIHdoZW4gdGhleSBoYXBwZW4sIGluc3RlYWQgb2Yg
anVzdCBsb2dnaW5nIHRvIHRoZSBjb25zb2xlLgorICoKKyAqIDxociAvPgorICogTm90ZSwgdGhh
dCBjb2RlIGV4ZWN1dGVkIGluIGV2ZW50LWxpc3RlbmVycyAoZXZlbiB0aG9zZSByZWdpc3RlcmVk
IHVzaW5nIGpxTGl0ZSdzIGBvbmAvYGJpbmRgCisgKiBtZXRob2RzKSBkb2VzIG5vdCBkZWxlZ2F0
ZSBleGNlcHRpb25zIHRvIHRoZSB7QGxpbmsgbmcuJGV4Y2VwdGlvbkhhbmRsZXIgJGV4Y2VwdGlv
bkhhbmRsZXJ9CisgKiAodW5sZXNzIGV4ZWN1dGVkIGR1cmluZyBhIGRpZ2VzdCkuCisgKgorICog
SWYgeW91IHdpc2gsIHlvdSBjYW4gbWFudWFsbHkgZGVsZWdhdGUgZXhjZXB0aW9ucywgZS5nLgor
ICogYHRyeSB7IC4uLiB9IGNhdGNoKGUpIHsgJGV4Y2VwdGlvbkhhbmRsZXIoZSk7IH1gCisgKgor
ICogQHBhcmFtIHtFcnJvcn0gZXhjZXB0aW9uIEV4Y2VwdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhl
IGVycm9yLgorICogQHBhcmFtIHtzdHJpbmc9fSBjYXVzZSBvcHRpb25hbCBpbmZvcm1hdGlvbiBh
Ym91dCB0aGUgY29udGV4dCBpbiB3aGljaAorICogICAgICAgdGhlIGVycm9yIHdhcyB0aHJvd24u
CisgKgorICovCitmdW5jdGlvbiAkRXhjZXB0aW9uSGFuZGxlclByb3ZpZGVyKCkgeworICB0aGlz
LiRnZXQgPSBbJyRsb2cnLCBmdW5jdGlvbigkbG9nKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKGV4
Y2VwdGlvbiwgY2F1c2UpIHsKKyAgICAgICRsb2cuZXJyb3IuYXBwbHkoJGxvZywgYXJndW1lbnRz
KTsKKyAgICB9OworICB9XTsKK30KKwordmFyIEFQUExJQ0FUSU9OX0pTT04gPSAnYXBwbGljYXRp
b24vanNvbic7Cit2YXIgQ09OVEVOVF9UWVBFX0FQUExJQ0FUSU9OX0pTT04gPSB7J0NvbnRlbnQt
VHlwZSc6IEFQUExJQ0FUSU9OX0pTT04gKyAnO2NoYXJzZXQ9dXRmLTgnfTsKK3ZhciBKU09OX1NU
QVJUID0gL15cW3xeXHsoPyFceykvOwordmFyIEpTT05fRU5EUyA9IHsKKyAgJ1snOiAvXSQvLAor
ICAneyc6IC99JC8KK307Cit2YXIgSlNPTl9QUk9URUNUSU9OX1BSRUZJWCA9IC9eXClcXVx9Jyw/
XG4vOworCitmdW5jdGlvbiBzZXJpYWxpemVWYWx1ZSh2KSB7CisgIGlmIChpc09iamVjdCh2KSkg
eworICAgIHJldHVybiBpc0RhdGUodikgPyB2LnRvSVNPU3RyaW5nKCkgOiB0b0pzb24odik7Cisg
IH0KKyAgcmV0dXJuIHY7Cit9CisKKworZnVuY3Rpb24gJEh0dHBQYXJhbVNlcmlhbGl6ZXJQcm92
aWRlcigpIHsKKyAgLyoqCisgICAqIEBuZ2RvYyBzZXJ2aWNlCisgICAqIEBuYW1lICRodHRwUGFy
YW1TZXJpYWxpemVyCisgICAqIEBkZXNjcmlwdGlvbgorICAgKgorICAgKiBEZWZhdWx0IHtAbGlu
ayAkaHR0cCBgJGh0dHBgfSBwYXJhbXMgc2VyaWFsaXplciB0aGF0IGNvbnZlcnRzIG9iamVjdHMg
dG8gc3RyaW5ncworICAgKiBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyBydWxlczoKKyAgICoK
KyAgICogKiBgeydmb28nOiAnYmFyJ31gIHJlc3VsdHMgaW4gYGZvbz1iYXJgCisgICAqICogYHsn
Zm9vJzogRGF0ZS5ub3coKX1gIHJlc3VsdHMgaW4gYGZvbz0yMDE1LTA0LTAxVDA5JTNBNTAlM0E0
OS4yNjJaYCAoYHRvSVNPU3RyaW5nKClgIGFuZCBlbmNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIGEg
RGF0ZSBvYmplY3QpCisgICAqICogYHsnZm9vJzogWydiYXInLCAnYmF6J119YCByZXN1bHRzIGlu
IGBmb289YmFyJmZvbz1iYXpgIChyZXBlYXRlZCBrZXkgZm9yIGVhY2ggYXJyYXkgZWxlbWVudCkK
KyAgICogKiBgeydmb28nOiB7J2Jhcic6J2Jheid9fWAgcmVzdWx0cyBpbiBgZm9vPSU3QiUyMmJh
ciUyMiUzQSUyMmJheiUyMiU3RCJgIChzdHJpbmdpZmllZCBhbmQgZW5jb2RlZCByZXByZXNlbnRh
dGlvbiBvZiBhbiBvYmplY3QpCisgICAqCisgICAqIE5vdGUgdGhhdCBzZXJpYWxpemVyIHdpbGwg
c29ydCB0aGUgcmVxdWVzdCBwYXJhbWV0ZXJzIGFscGhhYmV0aWNhbGx5LgorICAgKiAqLworCisg
IHRoaXMuJGdldCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBmdW5jdGlvbiBuZ1BhcmFtU2Vy
aWFsaXplcihwYXJhbXMpIHsKKyAgICAgIGlmICghcGFyYW1zKSByZXR1cm4gJyc7CisgICAgICB2
YXIgcGFydHMgPSBbXTsKKyAgICAgIGZvckVhY2hTb3J0ZWQocGFyYW1zLCBmdW5jdGlvbih2YWx1
ZSwga2V5KSB7CisgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCBpc1VuZGVmaW5lZCh2YWx1
ZSkpIHJldHVybjsKKyAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7CisgICAgICAgICAgZm9y
RWFjaCh2YWx1ZSwgZnVuY3Rpb24odiwgaykgeworICAgICAgICAgICAgcGFydHMucHVzaChlbmNv
ZGVVcmlRdWVyeShrZXkpICArICc9JyArIGVuY29kZVVyaVF1ZXJ5KHNlcmlhbGl6ZVZhbHVlKHYp
KSk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcGFydHMucHVz
aChlbmNvZGVVcmlRdWVyeShrZXkpICsgJz0nICsgZW5jb2RlVXJpUXVlcnkoc2VyaWFsaXplVmFs
dWUodmFsdWUpKSk7CisgICAgICAgIH0KKyAgICAgIH0pOworCisgICAgICByZXR1cm4gcGFydHMu
am9pbignJicpOworICAgIH07CisgIH07Cit9CisKK2Z1bmN0aW9uICRIdHRwUGFyYW1TZXJpYWxp
emVySlFMaWtlUHJvdmlkZXIoKSB7CisgIC8qKgorICAgKiBAbmdkb2Mgc2VydmljZQorICAgKiBA
bmFtZSAkaHR0cFBhcmFtU2VyaWFsaXplckpRTGlrZQorICAgKiBAZGVzY3JpcHRpb24KKyAgICoK
KyAgICogQWx0ZXJuYXRpdmUge0BsaW5rICRodHRwIGAkaHR0cGB9IHBhcmFtcyBzZXJpYWxpemVy
IHRoYXQgZm9sbG93cworICAgKiBqUXVlcnkncyBbYHBhcmFtKClgXShodHRwOi8vYXBpLmpxdWVy
eS5jb20vanF1ZXJ5LnBhcmFtLykgbWV0aG9kIGxvZ2ljLgorICAgKiBUaGUgc2VyaWFsaXplciB3
aWxsIGFsc28gc29ydCB0aGUgcGFyYW1zIGFscGhhYmV0aWNhbGx5LgorICAgKgorICAgKiBUbyB1
c2UgaXQgZm9yIHNlcmlhbGl6aW5nIGAkaHR0cGAgcmVxdWVzdCBwYXJhbWV0ZXJzLCBzZXQgaXQg
YXMgdGhlIGBwYXJhbVNlcmlhbGl6ZXJgIHByb3BlcnR5OgorICAgKgorICAgKiBgYGBqcworICAg
KiAkaHR0cCh7CisgICAqICAgdXJsOiBteVVybCwKKyAgICogICBtZXRob2Q6ICdHRVQnLAorICAg
KiAgIHBhcmFtczogbXlQYXJhbXMsCisgICAqICAgcGFyYW1TZXJpYWxpemVyOiAnJGh0dHBQYXJh
bVNlcmlhbGl6ZXJKUUxpa2UnCisgICAqIH0pOworICAgKiBgYGAKKyAgICoKKyAgICogSXQgaXMg
YWxzbyBwb3NzaWJsZSB0byBzZXQgaXQgYXMgdGhlIGRlZmF1bHQgYHBhcmFtU2VyaWFsaXplcmAg
aW4gdGhlCisgICAqIHtAbGluayAkaHR0cFByb3ZpZGVyI2RlZmF1bHRzIGAkaHR0cFByb3ZpZGVy
YH0uCisgICAqCisgICAqIEFkZGl0aW9uYWxseSwgeW91IGNhbiBpbmplY3QgdGhlIHNlcmlhbGl6
ZXIgYW5kIHVzZSBpdCBleHBsaWNpdGx5LCBmb3IgZXhhbXBsZSB0byBzZXJpYWxpemUKKyAgICog
Zm9ybSBkYXRhIGZvciBzdWJtaXNzaW9uOgorICAgKgorICAgKiBgYGBqcworICAgKiAuY29udHJv
bGxlcihmdW5jdGlvbigkaHR0cCwgJGh0dHBQYXJhbVNlcmlhbGl6ZXJKUUxpa2UpIHsKKyAgICog
ICAvLy4uLgorICAgKgorICAgKiAgICRodHRwKHsKKyAgICogICAgIHVybDogbXlVcmwsCisgICAq
ICAgICBtZXRob2Q6ICdQT1NUJywKKyAgICogICAgIGRhdGE6ICRodHRwUGFyYW1TZXJpYWxpemVy
SlFMaWtlKG15RGF0YSksCisgICAqICAgICBoZWFkZXJzOiB7CisgICAqICAgICAgICdDb250ZW50
LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJworICAgKiAgICAgfQor
ICAgKiAgIH0pOworICAgKgorICAgKiB9KTsKKyAgICogYGBgCisgICAqCisgICAqICovCisgIHRo
aXMuJGdldCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBmdW5jdGlvbiBqUXVlcnlMaWtlUGFy
YW1TZXJpYWxpemVyKHBhcmFtcykgeworICAgICAgaWYgKCFwYXJhbXMpIHJldHVybiAnJzsKKyAg
ICAgIHZhciBwYXJ0cyA9IFtdOworICAgICAgc2VyaWFsaXplKHBhcmFtcywgJycsIHRydWUpOwor
ICAgICAgcmV0dXJuIHBhcnRzLmpvaW4oJyYnKTsKKworICAgICAgZnVuY3Rpb24gc2VyaWFsaXpl
KHRvU2VyaWFsaXplLCBwcmVmaXgsIHRvcExldmVsKSB7CisgICAgICAgIGlmICh0b1NlcmlhbGl6
ZSA9PT0gbnVsbCB8fCBpc1VuZGVmaW5lZCh0b1NlcmlhbGl6ZSkpIHJldHVybjsKKyAgICAgICAg
aWYgKGlzQXJyYXkodG9TZXJpYWxpemUpKSB7CisgICAgICAgICAgZm9yRWFjaCh0b1NlcmlhbGl6
ZSwgZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgICAgIHNlcmlhbGl6ZSh2YWx1ZSwgcHJlZml4
ICsgJ1tdJyk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QodG9T
ZXJpYWxpemUpICYmICFpc0RhdGUodG9TZXJpYWxpemUpKSB7CisgICAgICAgICAgZm9yRWFjaFNv
cnRlZCh0b1NlcmlhbGl6ZSwgZnVuY3Rpb24odmFsdWUsIGtleSkgeworICAgICAgICAgICAgc2Vy
aWFsaXplKHZhbHVlLCBwcmVmaXggKworICAgICAgICAgICAgICAgICh0b3BMZXZlbCA/ICcnIDog
J1snKSArCisgICAgICAgICAgICAgICAga2V5ICsKKyAgICAgICAgICAgICAgICAodG9wTGV2ZWwg
PyAnJyA6ICddJykpOworICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
IHBhcnRzLnB1c2goZW5jb2RlVXJpUXVlcnkocHJlZml4KSArICc9JyArIGVuY29kZVVyaVF1ZXJ5
KHNlcmlhbGl6ZVZhbHVlKHRvU2VyaWFsaXplKSkpOworICAgICAgICB9CisgICAgICB9CisgICAg
fTsKKyAgfTsKK30KKworZnVuY3Rpb24gZGVmYXVsdEh0dHBSZXNwb25zZVRyYW5zZm9ybShkYXRh
LCBoZWFkZXJzKSB7CisgIGlmIChpc1N0cmluZyhkYXRhKSkgeworICAgIC8vIFN0cmlwIGpzb24g
dnVsbmVyYWJpbGl0eSBwcm90ZWN0aW9uIHByZWZpeCBhbmQgdHJpbSB3aGl0ZXNwYWNlCisgICAg
dmFyIHRlbXBEYXRhID0gZGF0YS5yZXBsYWNlKEpTT05fUFJPVEVDVElPTl9QUkVGSVgsICcnKS50
cmltKCk7CisKKyAgICBpZiAodGVtcERhdGEpIHsKKyAgICAgIHZhciBjb250ZW50VHlwZSA9IGhl
YWRlcnMoJ0NvbnRlbnQtVHlwZScpOworICAgICAgaWYgKChjb250ZW50VHlwZSAmJiAoY29udGVu
dFR5cGUuaW5kZXhPZihBUFBMSUNBVElPTl9KU09OKSA9PT0gMCkpIHx8IGlzSnNvbkxpa2UodGVt
cERhdGEpKSB7CisgICAgICAgIGRhdGEgPSBmcm9tSnNvbih0ZW1wRGF0YSk7CisgICAgICB9Cisg
ICAgfQorICB9CisKKyAgcmV0dXJuIGRhdGE7Cit9CisKK2Z1bmN0aW9uIGlzSnNvbkxpa2Uoc3Ry
KSB7CisgICAgdmFyIGpzb25TdGFydCA9IHN0ci5tYXRjaChKU09OX1NUQVJUKTsKKyAgICByZXR1
cm4ganNvblN0YXJ0ICYmIEpTT05fRU5EU1tqc29uU3RhcnRbMF1dLnRlc3Qoc3RyKTsKK30KKwor
LyoqCisgKiBQYXJzZSBoZWFkZXJzIGludG8ga2V5IHZhbHVlIG9iamVjdAorICoKKyAqIEBwYXJh
bSB7c3RyaW5nfSBoZWFkZXJzIFJhdyBoZWFkZXJzIGFzIGEgc3RyaW5nCisgKiBAcmV0dXJucyB7
T2JqZWN0fSBQYXJzZWQgaGVhZGVycyBhcyBrZXkgdmFsdWUgb2JqZWN0CisgKi8KK2Z1bmN0aW9u
IHBhcnNlSGVhZGVycyhoZWFkZXJzKSB7CisgIHZhciBwYXJzZWQgPSBjcmVhdGVNYXAoKSwgaTsK
KworICBmdW5jdGlvbiBmaWxsSW5QYXJzZWQoa2V5LCB2YWwpIHsKKyAgICBpZiAoa2V5KSB7Cisg
ICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFs
IDogdmFsOworICAgIH0KKyAgfQorCisgIGlmIChpc1N0cmluZyhoZWFkZXJzKSkgeworICAgIGZv
ckVhY2goaGVhZGVycy5zcGxpdCgnXG4nKSwgZnVuY3Rpb24obGluZSkgeworICAgICAgaSA9IGxp
bmUuaW5kZXhPZignOicpOworICAgICAgZmlsbEluUGFyc2VkKGxvd2VyY2FzZSh0cmltKGxpbmUu
c3Vic3RyKDAsIGkpKSksIHRyaW0obGluZS5zdWJzdHIoaSArIDEpKSk7CisgICAgfSk7CisgIH0g
ZWxzZSBpZiAoaXNPYmplY3QoaGVhZGVycykpIHsKKyAgICBmb3JFYWNoKGhlYWRlcnMsIGZ1bmN0
aW9uKGhlYWRlclZhbCwgaGVhZGVyS2V5KSB7CisgICAgICBmaWxsSW5QYXJzZWQobG93ZXJjYXNl
KGhlYWRlcktleSksIHRyaW0oaGVhZGVyVmFsKSk7CisgICAgfSk7CisgIH0KKworICByZXR1cm4g
cGFyc2VkOworfQorCisKKy8qKgorICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgcHJvdmlkZXMg
YWNjZXNzIHRvIHBhcnNlZCBoZWFkZXJzLgorICoKKyAqIEhlYWRlcnMgYXJlIGxhenkgcGFyc2Vk
IHdoZW4gZmlyc3QgcmVxdWVzdGVkLgorICogQHNlZSBwYXJzZUhlYWRlcnMKKyAqCisgKiBAcGFy
YW0geyhzdHJpbmd8T2JqZWN0KX0gaGVhZGVycyBIZWFkZXJzIHRvIHByb3ZpZGUgYWNjZXNzIHRv
LgorICogQHJldHVybnMge2Z1bmN0aW9uKHN0cmluZz0pfSBSZXR1cm5zIGEgZ2V0dGVyIGZ1bmN0
aW9uIHdoaWNoIGlmIGNhbGxlZCB3aXRoOgorICoKKyAqICAgLSBpZiBjYWxsZWQgd2l0aCBzaW5n
bGUgYW4gYXJndW1lbnQgcmV0dXJucyBhIHNpbmdsZSBoZWFkZXIgdmFsdWUgb3IgbnVsbAorICog
ICAtIGlmIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cyByZXR1cm5zIGFuIG9iamVjdCBjb250YWlu
aW5nIGFsbCBoZWFkZXJzLgorICovCitmdW5jdGlvbiBoZWFkZXJzR2V0dGVyKGhlYWRlcnMpIHsK
KyAgdmFyIGhlYWRlcnNPYmo7CisKKyAgcmV0dXJuIGZ1bmN0aW9uKG5hbWUpIHsKKyAgICBpZiAo
IWhlYWRlcnNPYmopIGhlYWRlcnNPYmogPSAgcGFyc2VIZWFkZXJzKGhlYWRlcnMpOworCisgICAg
aWYgKG5hbWUpIHsKKyAgICAgIHZhciB2YWx1ZSA9IGhlYWRlcnNPYmpbbG93ZXJjYXNlKG5hbWUp
XTsKKyAgICAgIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSB7CisgICAgICAgIHZhbHVlID0gbnVsbDsK
KyAgICAgIH0KKyAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gaGVhZGVy
c09iajsKKyAgfTsKK30KKworCisvKioKKyAqIENoYWluIGFsbCBnaXZlbiBmdW5jdGlvbnMKKyAq
CisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIGJvdGggcmVxdWVzdCBhbmQgcmVzcG9uc2Ug
dHJhbnNmb3JtaW5nCisgKgorICogQHBhcmFtIHsqfSBkYXRhIERhdGEgdG8gdHJhbnNmb3JtLgor
ICogQHBhcmFtIHtmdW5jdGlvbihzdHJpbmc9KX0gaGVhZGVycyBIVFRQIGhlYWRlcnMgZ2V0dGVy
IGZuLgorICogQHBhcmFtIHtudW1iZXJ9IHN0YXR1cyBIVFRQIHN0YXR1cyBjb2RlIG9mIHRoZSBy
ZXNwb25zZS4KKyAqIEBwYXJhbSB7KEZ1bmN0aW9ufEFycmF5LjxGdW5jdGlvbj4pfSBmbnMgRnVu
Y3Rpb24gb3IgYW4gYXJyYXkgb2YgZnVuY3Rpb25zLgorICogQHJldHVybnMgeyp9IFRyYW5zZm9y
bWVkIGRhdGEuCisgKi8KK2Z1bmN0aW9uIHRyYW5zZm9ybURhdGEoZGF0YSwgaGVhZGVycywgc3Rh
dHVzLCBmbnMpIHsKKyAgaWYgKGlzRnVuY3Rpb24oZm5zKSkgeworICAgIHJldHVybiBmbnMoZGF0
YSwgaGVhZGVycywgc3RhdHVzKTsKKyAgfQorCisgIGZvckVhY2goZm5zLCBmdW5jdGlvbihmbikg
eworICAgIGRhdGEgPSBmbihkYXRhLCBoZWFkZXJzLCBzdGF0dXMpOworICB9KTsKKworICByZXR1
cm4gZGF0YTsKK30KKworCitmdW5jdGlvbiBpc1N1Y2Nlc3Moc3RhdHVzKSB7CisgIHJldHVybiAy
MDAgPD0gc3RhdHVzICYmIHN0YXR1cyA8IDMwMDsKK30KKworCisvKioKKyAqIEBuZ2RvYyBwcm92
aWRlcgorICogQG5hbWUgJGh0dHBQcm92aWRlcgorICogQGRlc2NyaXB0aW9uCisgKiBVc2UgYCRo
dHRwUHJvdmlkZXJgIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUge0BsaW5r
IG5nLiRodHRwICRodHRwfSBzZXJ2aWNlLgorICogKi8KK2Z1bmN0aW9uICRIdHRwUHJvdmlkZXIo
KSB7CisgIC8qKgorICAgKiBAbmdkb2MgcHJvcGVydHkKKyAgICogQG5hbWUgJGh0dHBQcm92aWRl
ciNkZWZhdWx0cworICAgKiBAZGVzY3JpcHRpb24KKyAgICoKKyAgICogT2JqZWN0IGNvbnRhaW5p
bmcgZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCB7QGxpbmsgbmcuJGh0dHAgJGh0dHB9IHJlcXVlc3Rz
LgorICAgKgorICAgKiAtICoqYGRlZmF1bHRzLmNhY2hlYCoqIC0ge09iamVjdH0gLSBhbiBvYmpl
Y3QgYnVpbHQgd2l0aCB7QGxpbmsgbmcuJGNhY2hlRmFjdG9yeSBgJGNhY2hlRmFjdG9yeWB9Cisg
ICAqIHRoYXQgd2lsbCBwcm92aWRlIHRoZSBjYWNoZSBmb3IgYWxsIHJlcXVlc3RzIHdobyBzZXQg
dGhlaXIgYGNhY2hlYCBwcm9wZXJ0eSB0byBgdHJ1ZWAuCisgICAqIElmIHlvdSBzZXQgdGhlIGBk
ZWZhdWx0cy5jYWNoZSA9IGZhbHNlYCB0aGVuIG9ubHkgcmVxdWVzdHMgdGhhdCBzcGVjaWZ5IHRo
ZWlyIG93biBjdXN0b20KKyAgICogY2FjaGUgb2JqZWN0IHdpbGwgYmUgY2FjaGVkLiBTZWUge0Bs
aW5rICRodHRwI2NhY2hpbmcgJGh0dHAgQ2FjaGluZ30gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisg
ICAqCisgICAqIC0gKipgZGVmYXVsdHMueHNyZkNvb2tpZU5hbWVgKiogLSB7c3RyaW5nfSAtIE5h
bWUgb2YgY29va2llIGNvbnRhaW5pbmcgdGhlIFhTUkYgdG9rZW4uCisgICAqIERlZmF1bHRzIHZh
bHVlIGlzIGAnWFNSRi1UT0tFTidgLgorICAgKgorICAgKiAtICoqYGRlZmF1bHRzLnhzcmZIZWFk
ZXJOYW1lYCoqIC0ge3N0cmluZ30gLSBOYW1lIG9mIEhUVFAgaGVhZGVyIHRvIHBvcHVsYXRlIHdp
dGggdGhlCisgICAqIFhTUkYgdG9rZW4uIERlZmF1bHRzIHZhbHVlIGlzIGAnWC1YU1JGLVRPS0VO
J2AuCisgICAqCisgICAqIC0gKipgZGVmYXVsdHMuaGVhZGVyc2AqKiAtIHtPYmplY3R9IC0gRGVm
YXVsdCBoZWFkZXJzIGZvciBhbGwgJGh0dHAgcmVxdWVzdHMuCisgICAqIFJlZmVyIHRvIHtAbGlu
ayBuZy4kaHR0cCNzZXR0aW5nLWh0dHAtaGVhZGVycyAkaHR0cH0gZm9yIGRvY3VtZW50YXRpb24g
b24KKyAgICogc2V0dGluZyBkZWZhdWx0IGhlYWRlcnMuCisgICAqICAgICAtICoqYGRlZmF1bHRz
LmhlYWRlcnMuY29tbW9uYCoqCisgICAqICAgICAtICoqYGRlZmF1bHRzLmhlYWRlcnMucG9zdGAq
KgorICAgKiAgICAgLSAqKmBkZWZhdWx0cy5oZWFkZXJzLnB1dGAqKgorICAgKiAgICAgLSAqKmBk
ZWZhdWx0cy5oZWFkZXJzLnBhdGNoYCoqCisgICAqCisgICAqCisgICAqIC0gKipgZGVmYXVsdHMu
cGFyYW1TZXJpYWxpemVyYCoqIC0gYHtzdHJpbmd8ZnVuY3Rpb24oT2JqZWN0PHN0cmluZyxzdHJp
bmc+KTpzdHJpbmd9YCAtIEEgZnVuY3Rpb24KKyAgICogIHVzZWQgdG8gdGhlIHByZXBhcmUgc3Ry
aW5nIHJlcHJlc2VudGF0aW9uIG9mIHJlcXVlc3QgcGFyYW1ldGVycyAoc3BlY2lmaWVkIGFzIGFu
IG9iamVjdCkuCisgICAqICBJZiBzcGVjaWZpZWQgYXMgc3RyaW5nLCBpdCBpcyBpbnRlcnByZXRl
ZCBhcyBhIGZ1bmN0aW9uIHJlZ2lzdGVyZWQgd2l0aCB0aGUge0BsaW5rIGF1dG8uJGluamVjdG9y
ICRpbmplY3Rvcn0uCisgICAqICBEZWZhdWx0cyB0byB7QGxpbmsgbmcuJGh0dHBQYXJhbVNlcmlh
bGl6ZXIgJGh0dHBQYXJhbVNlcmlhbGl6ZXJ9LgorICAgKgorICAgKiovCisgIHZhciBkZWZhdWx0
cyA9IHRoaXMuZGVmYXVsdHMgPSB7CisgICAgLy8gdHJhbnNmb3JtIGluY29taW5nIHJlc3BvbnNl
IGRhdGEKKyAgICB0cmFuc2Zvcm1SZXNwb25zZTogW2RlZmF1bHRIdHRwUmVzcG9uc2VUcmFuc2Zv
cm1dLAorCisgICAgLy8gdHJhbnNmb3JtIG91dGdvaW5nIHJlcXVlc3QgZGF0YQorICAgIHRyYW5z
Zm9ybVJlcXVlc3Q6IFtmdW5jdGlvbihkKSB7CisgICAgICByZXR1cm4gaXNPYmplY3QoZCkgJiYg
IWlzRmlsZShkKSAmJiAhaXNCbG9iKGQpICYmICFpc0Zvcm1EYXRhKGQpID8gdG9Kc29uKGQpIDog
ZDsKKyAgICB9XSwKKworICAgIC8vIGRlZmF1bHQgaGVhZGVycworICAgIGhlYWRlcnM6IHsKKyAg
ICAgIGNvbW1vbjogeworICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQv
cGxhaW4sICovKicKKyAgICAgIH0sCisgICAgICBwb3N0OiAgIHNoYWxsb3dDb3B5KENPTlRFTlRf
VFlQRV9BUFBMSUNBVElPTl9KU09OKSwKKyAgICAgIHB1dDogICAgc2hhbGxvd0NvcHkoQ09OVEVO
VF9UWVBFX0FQUExJQ0FUSU9OX0pTT04pLAorICAgICAgcGF0Y2g6ICBzaGFsbG93Q29weShDT05U
RU5UX1RZUEVfQVBQTElDQVRJT05fSlNPTikKKyAgICB9LAorCisgICAgeHNyZkNvb2tpZU5hbWU6
ICdYU1JGLVRPS0VOJywKKyAgICB4c3JmSGVhZGVyTmFtZTogJ1gtWFNSRi1UT0tFTicsCisKKyAg
ICBwYXJhbVNlcmlhbGl6ZXI6ICckaHR0cFBhcmFtU2VyaWFsaXplcicKKyAgfTsKKworICB2YXIg
dXNlQXBwbHlBc3luYyA9IGZhbHNlOworICAvKioKKyAgICogQG5nZG9jIG1ldGhvZAorICAgKiBA
bmFtZSAkaHR0cFByb3ZpZGVyI3VzZUFwcGx5QXN5bmMKKyAgICogQGRlc2NyaXB0aW9uCisgICAq
CisgICAqIENvbmZpZ3VyZSAkaHR0cCBzZXJ2aWNlIHRvIGNvbWJpbmUgcHJvY2Vzc2luZyBvZiBt
dWx0aXBsZSBodHRwIHJlc3BvbnNlcyByZWNlaXZlZCBhdCBhcm91bmQKKyAgICogdGhlIHNhbWUg
dGltZSB2aWEge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGFwcGx5QXN5bmMgJHJvb3RTY29w
ZS4kYXBwbHlBc3luY30uIFRoaXMgY2FuIHJlc3VsdCBpbgorICAgKiBzaWduaWZpY2FudCBwZXJm
b3JtYW5jZSBpbXByb3ZlbWVudCBmb3IgYmlnZ2VyIGFwcGxpY2F0aW9ucyB0aGF0IG1ha2UgbWFu
eSBIVFRQIHJlcXVlc3RzCisgICAqIGNvbmN1cnJlbnRseSAoY29tbW9uIGR1cmluZyBhcHBsaWNh
dGlvbiBib290c3RyYXApLgorICAgKgorICAgKiBEZWZhdWx0cyB0byBmYWxzZS4gSWYgbm8gdmFs
dWUgaXMgc3BlY2lmaWVkLCByZXR1cm5zIHRoZSBjdXJyZW50IGNvbmZpZ3VyZWQgdmFsdWUuCisg
ICAqCisgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHZhbHVlIElmIHRydWUsIHdoZW4gcmVxdWVzdHMg
YXJlIGxvYWRlZCwgdGhleSB3aWxsIHNjaGVkdWxlIGEgZGVmZXJyZWQKKyAgICogICAgImFwcGx5
IiBvbiB0aGUgbmV4dCB0aWNrLCBnaXZpbmcgdGltZSBmb3Igc3Vic2VxdWVudCByZXF1ZXN0cyBp
biBhIHJvdWdobHkgfjEwbXMgd2luZG93CisgICAqICAgIHRvIGxvYWQgYW5kIHNoYXJlIHRoZSBz
YW1lIGRpZ2VzdCBjeWNsZS4KKyAgICoKKyAgICogQHJldHVybnMge2Jvb2xlYW58T2JqZWN0fSBJ
ZiBhIHZhbHVlIGlzIHNwZWNpZmllZCwgcmV0dXJucyB0aGUgJGh0dHBQcm92aWRlciBmb3IgY2hh
aW5pbmcuCisgICAqICAgIG90aGVyd2lzZSwgcmV0dXJucyB0aGUgY3VycmVudCBjb25maWd1cmVk
IHZhbHVlLgorICAgKiovCisgIHRoaXMudXNlQXBwbHlBc3luYyA9IGZ1bmN0aW9uKHZhbHVlKSB7
CisgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkpIHsKKyAgICAgIHVzZUFwcGx5QXN5bmMgPSAhIXZh
bHVlOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorICAgIHJldHVybiB1c2VBcHBseUFzeW5j
OworICB9OworCisgIC8qKgorICAgKiBAbmdkb2MgcHJvcGVydHkKKyAgICogQG5hbWUgJGh0dHBQ
cm92aWRlciNpbnRlcmNlcHRvcnMKKyAgICogQGRlc2NyaXB0aW9uCisgICAqCisgICAqIEFycmF5
IGNvbnRhaW5pbmcgc2VydmljZSBmYWN0b3JpZXMgZm9yIGFsbCBzeW5jaHJvbm91cyBvciBhc3lu
Y2hyb25vdXMge0BsaW5rIG5nLiRodHRwICRodHRwfQorICAgKiBwcmUtcHJvY2Vzc2luZyBvZiBy
ZXF1ZXN0IG9yIHBvc3Rwcm9jZXNzaW5nIG9mIHJlc3BvbnNlcy4KKyAgICoKKyAgICogVGhlc2Ug
c2VydmljZSBmYWN0b3JpZXMgYXJlIG9yZGVyZWQgYnkgcmVxdWVzdCwgaS5lLiB0aGV5IGFyZSBh
cHBsaWVkIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZQorICAgKiBhcnJheSwgb24gcmVxdWVzdCwg
YnV0IHJldmVyc2Ugb3JkZXIsIG9uIHJlc3BvbnNlLgorICAgKgorICAgKiB7QGxpbmsgbmcuJGh0
dHAjaW50ZXJjZXB0b3JzIEludGVyY2VwdG9ycyBkZXRhaWxlZCBpbmZvfQorICAgKiovCisgIHZh
ciBpbnRlcmNlcHRvckZhY3RvcmllcyA9IHRoaXMuaW50ZXJjZXB0b3JzID0gW107CisKKyAgdGhp
cy4kZ2V0ID0gWyckaHR0cEJhY2tlbmQnLCAnJCRjb29raWVSZWFkZXInLCAnJGNhY2hlRmFjdG9y
eScsICckcm9vdFNjb3BlJywgJyRxJywgJyRpbmplY3RvcicsCisgICAgICBmdW5jdGlvbigkaHR0
cEJhY2tlbmQsICQkY29va2llUmVhZGVyLCAkY2FjaGVGYWN0b3J5LCAkcm9vdFNjb3BlLCAkcSwg
JGluamVjdG9yKSB7CisKKyAgICB2YXIgZGVmYXVsdENhY2hlID0gJGNhY2hlRmFjdG9yeSgnJGh0
dHAnKTsKKworICAgIC8qKgorICAgICAqIE1ha2Ugc3VyZSB0aGF0IGRlZmF1bHQgcGFyYW0gc2Vy
aWFsaXplciBpcyBleHBvc2VkIGFzIGEgZnVuY3Rpb24KKyAgICAgKi8KKyAgICBkZWZhdWx0cy5w
YXJhbVNlcmlhbGl6ZXIgPSBpc1N0cmluZyhkZWZhdWx0cy5wYXJhbVNlcmlhbGl6ZXIpID8KKyAg
ICAgICRpbmplY3Rvci5nZXQoZGVmYXVsdHMucGFyYW1TZXJpYWxpemVyKSA6IGRlZmF1bHRzLnBh
cmFtU2VyaWFsaXplcjsKKworICAgIC8qKgorICAgICAqIEludGVyY2VwdG9ycyBzdG9yZWQgaW4g
cmV2ZXJzZSBvcmRlci4gSW5uZXIgaW50ZXJjZXB0b3JzIGJlZm9yZSBvdXRlciBpbnRlcmNlcHRv
cnMuCisgICAgICogVGhlIHJldmVyc2FsIGlzIG5lZWRlZCBzbyB0aGF0IHdlIGNhbiBidWlsZCB1
cCB0aGUgaW50ZXJjZXB0aW9uIGNoYWluIGFyb3VuZCB0aGUKKyAgICAgKiBzZXJ2ZXIgcmVxdWVz
dC4KKyAgICAgKi8KKyAgICB2YXIgcmV2ZXJzZWRJbnRlcmNlcHRvcnMgPSBbXTsKKworICAgIGZv
ckVhY2goaW50ZXJjZXB0b3JGYWN0b3JpZXMsIGZ1bmN0aW9uKGludGVyY2VwdG9yRmFjdG9yeSkg
eworICAgICAgcmV2ZXJzZWRJbnRlcmNlcHRvcnMudW5zaGlmdChpc1N0cmluZyhpbnRlcmNlcHRv
ckZhY3RvcnkpCisgICAgICAgICAgPyAkaW5qZWN0b3IuZ2V0KGludGVyY2VwdG9yRmFjdG9yeSkg
OiAkaW5qZWN0b3IuaW52b2tlKGludGVyY2VwdG9yRmFjdG9yeSkpOworICAgIH0pOworCisgICAg
LyoqCisgICAgICogQG5nZG9jIHNlcnZpY2UKKyAgICAgKiBAa2luZCBmdW5jdGlvbgorICAgICAq
IEBuYW1lICRodHRwCisgICAgICogQHJlcXVpcmVzIG5nLiRodHRwQmFja2VuZAorICAgICAqIEBy
ZXF1aXJlcyAkY2FjaGVGYWN0b3J5CisgICAgICogQHJlcXVpcmVzICRyb290U2NvcGUKKyAgICAg
KiBAcmVxdWlyZXMgJHEKKyAgICAgKiBAcmVxdWlyZXMgJGluamVjdG9yCisgICAgICoKKyAgICAg
KiBAZGVzY3JpcHRpb24KKyAgICAgKiBUaGUgYCRodHRwYCBzZXJ2aWNlIGlzIGEgY29yZSBBbmd1
bGFyIHNlcnZpY2UgdGhhdCBmYWNpbGl0YXRlcyBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHJlbW90
ZQorICAgICAqIEhUVFAgc2VydmVycyB2aWEgdGhlIGJyb3dzZXIncyBbWE1MSHR0cFJlcXVlc3Rd
KGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL3htbGh0dHByZXF1ZXN0KQorICAgICAq
IG9iamVjdCBvciB2aWEgW0pTT05QXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0pTT05Q
KS4KKyAgICAgKgorICAgICAqIEZvciB1bml0IHRlc3RpbmcgYXBwbGljYXRpb25zIHRoYXQgdXNl
IGAkaHR0cGAgc2VydmljZSwgc2VlCisgICAgICoge0BsaW5rIG5nTW9jay4kaHR0cEJhY2tlbmQg
JGh0dHBCYWNrZW5kIG1vY2t9LgorICAgICAqCisgICAgICogRm9yIGEgaGlnaGVyIGxldmVsIG9m
IGFic3RyYWN0aW9uLCBwbGVhc2UgY2hlY2sgb3V0IHRoZSB7QGxpbmsgbmdSZXNvdXJjZS4kcmVz
b3VyY2UKKyAgICAgKiAkcmVzb3VyY2V9IHNlcnZpY2UuCisgICAgICoKKyAgICAgKiBUaGUgJGh0
dHAgQVBJIGlzIGJhc2VkIG9uIHRoZSB7QGxpbmsgbmcuJHEgZGVmZXJyZWQvcHJvbWlzZSBBUElz
fSBleHBvc2VkIGJ5CisgICAgICogdGhlICRxIHNlcnZpY2UuIFdoaWxlIGZvciBzaW1wbGUgdXNh
Z2UgcGF0dGVybnMgdGhpcyBkb2Vzbid0IG1hdHRlciBtdWNoLCBmb3IgYWR2YW5jZWQgdXNhZ2UK
KyAgICAgKiBpdCBpcyBpbXBvcnRhbnQgdG8gZmFtaWxpYXJpemUgeW91cnNlbGYgd2l0aCB0aGVz
ZSBBUElzIGFuZCB0aGUgZ3VhcmFudGVlcyB0aGV5IHByb3ZpZGUuCisgICAgICoKKyAgICAgKgor
ICAgICAqICMjIEdlbmVyYWwgdXNhZ2UKKyAgICAgKiBUaGUgYCRodHRwYCBzZXJ2aWNlIGlzIGEg
ZnVuY3Rpb24gd2hpY2ggdGFrZXMgYSBzaW5nbGUgYXJndW1lbnQg4oCUIGEgY29uZmlndXJhdGlv
biBvYmplY3Qg4oCUCisgICAgICogdGhhdCBpcyB1c2VkIHRvIGdlbmVyYXRlIGFuIEhUVFAgcmVx
dWVzdCBhbmQgcmV0dXJucyAgYSB7QGxpbmsgbmcuJHEgcHJvbWlzZX0KKyAgICAgKiB3aXRoIHR3
byAkaHR0cCBzcGVjaWZpYyBtZXRob2RzOiBgc3VjY2Vzc2AgYW5kIGBlcnJvcmAuCisgICAgICoK
KyAgICAgKiBgYGBqcworICAgICAqICAgLy8gU2ltcGxlIEdFVCByZXF1ZXN0IGV4YW1wbGUgOgor
ICAgICAqICAgJGh0dHAuZ2V0KCcvc29tZVVybCcpLgorICAgICAqICAgICBzdWNjZXNzKGZ1bmN0
aW9uKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7CisgICAgICogICAgICAgLy8gdGhp
cyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBhc3luY2hyb25vdXNseQorICAgICAqICAgICAgIC8v
IHdoZW4gdGhlIHJlc3BvbnNlIGlzIGF2YWlsYWJsZQorICAgICAqICAgICB9KS4KKyAgICAgKiAg
ICAgZXJyb3IoZnVuY3Rpb24oZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHsKKyAgICAg
KiAgICAgICAvLyBjYWxsZWQgYXN5bmNocm9ub3VzbHkgaWYgYW4gZXJyb3Igb2NjdXJzCisgICAg
ICogICAgICAgLy8gb3Igc2VydmVyIHJldHVybnMgcmVzcG9uc2Ugd2l0aCBhbiBlcnJvciBzdGF0
dXMuCisgICAgICogICAgIH0pOworICAgICAqIGBgYAorICAgICAqCisgICAgICogYGBganMKKyAg
ICAgKiAgIC8vIFNpbXBsZSBQT1NUIHJlcXVlc3QgZXhhbXBsZSAocGFzc2luZyBkYXRhKSA6Cisg
ICAgICogICAkaHR0cC5wb3N0KCcvc29tZVVybCcsIHttc2c6J2hlbGxvIHdvcmQhJ30pLgorICAg
ICAqICAgICBzdWNjZXNzKGZ1bmN0aW9uKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7
CisgICAgICogICAgICAgLy8gdGhpcyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBhc3luY2hyb25v
dXNseQorICAgICAqICAgICAgIC8vIHdoZW4gdGhlIHJlc3BvbnNlIGlzIGF2YWlsYWJsZQorICAg
ICAqICAgICB9KS4KKyAgICAgKiAgICAgZXJyb3IoZnVuY3Rpb24oZGF0YSwgc3RhdHVzLCBoZWFk
ZXJzLCBjb25maWcpIHsKKyAgICAgKiAgICAgICAvLyBjYWxsZWQgYXN5bmNocm9ub3VzbHkgaWYg
YW4gZXJyb3Igb2NjdXJzCisgICAgICogICAgICAgLy8gb3Igc2VydmVyIHJldHVybnMgcmVzcG9u
c2Ugd2l0aCBhbiBlcnJvciBzdGF0dXMuCisgICAgICogICAgIH0pOworICAgICAqIGBgYAorICAg
ICAqCisgICAgICoKKyAgICAgKiBTaW5jZSB0aGUgcmV0dXJuZWQgdmFsdWUgb2YgY2FsbGluZyB0
aGUgJGh0dHAgZnVuY3Rpb24gaXMgYSBgcHJvbWlzZWAsIHlvdSBjYW4gYWxzbyB1c2UKKyAgICAg
KiB0aGUgYHRoZW5gIG1ldGhvZCB0byByZWdpc3RlciBjYWxsYmFja3MsIGFuZCB0aGVzZSBjYWxs
YmFja3Mgd2lsbCByZWNlaXZlIGEgc2luZ2xlIGFyZ3VtZW50IOKAkworICAgICAqIGFuIG9iamVj
dCByZXByZXNlbnRpbmcgdGhlIHJlc3BvbnNlLiBTZWUgdGhlIEFQSSBzaWduYXR1cmUgYW5kIHR5
cGUgaW5mbyBiZWxvdyBmb3IgbW9yZQorICAgICAqIGRldGFpbHMuCisgICAgICoKKyAgICAgKiBB
IHJlc3BvbnNlIHN0YXR1cyBjb2RlIGJldHdlZW4gMjAwIGFuZCAyOTkgaXMgY29uc2lkZXJlZCBh
IHN1Y2Nlc3Mgc3RhdHVzIGFuZAorICAgICAqIHdpbGwgcmVzdWx0IGluIHRoZSBzdWNjZXNzIGNh
bGxiYWNrIGJlaW5nIGNhbGxlZC4gTm90ZSB0aGF0IGlmIHRoZSByZXNwb25zZSBpcyBhIHJlZGly
ZWN0LAorICAgICAqIFhNTEh0dHBSZXF1ZXN0IHdpbGwgdHJhbnNwYXJlbnRseSBmb2xsb3cgaXQs
IG1lYW5pbmcgdGhhdCB0aGUgZXJyb3IgY2FsbGJhY2sgd2lsbCBub3QgYmUKKyAgICAgKiBjYWxs
ZWQgZm9yIHN1Y2ggcmVzcG9uc2VzLgorICAgICAqCisgICAgICogIyMgV3JpdGluZyBVbml0IFRl
c3RzIHRoYXQgdXNlICRodHRwCisgICAgICogV2hlbiB1bml0IHRlc3RpbmcgKHVzaW5nIHtAbGlu
ayBuZ01vY2sgbmdNb2NrfSksIGl0IGlzIG5lY2Vzc2FyeSB0byBjYWxsCisgICAgICoge0BsaW5r
IG5nTW9jay4kaHR0cEJhY2tlbmQjZmx1c2ggJGh0dHBCYWNrZW5kLmZsdXNoKCl9IHRvIGZsdXNo
IGVhY2ggcGVuZGluZworICAgICAqIHJlcXVlc3QgdXNpbmcgdHJhaW5lZCByZXNwb25zZXMuCisg
ICAgICoKKyAgICAgKiBgYGAKKyAgICAgKiAkaHR0cEJhY2tlbmQuZXhwZWN0R0VUKC4uLik7Cisg
ICAgICogJGh0dHAuZ2V0KC4uLik7CisgICAgICogJGh0dHBCYWNrZW5kLmZsdXNoKCk7CisgICAg
ICogYGBgCisgICAgICoKKyAgICAgKiAjIyBTaG9ydGN1dCBtZXRob2RzCisgICAgICoKKyAgICAg
KiBTaG9ydGN1dCBtZXRob2RzIGFyZSBhbHNvIGF2YWlsYWJsZS4gQWxsIHNob3J0Y3V0IG1ldGhv
ZHMgcmVxdWlyZSBwYXNzaW5nIGluIHRoZSBVUkwsIGFuZAorICAgICAqIHJlcXVlc3QgZGF0YSBt
dXN0IGJlIHBhc3NlZCBpbiBmb3IgUE9TVC9QVVQgcmVxdWVzdHMuCisgICAgICoKKyAgICAgKiBg
YGBqcworICAgICAqICAgJGh0dHAuZ2V0KCcvc29tZVVybCcpLnN1Y2Nlc3Moc3VjY2Vzc0NhbGxi
YWNrKTsKKyAgICAgKiAgICRodHRwLnBvc3QoJy9zb21lVXJsJywgZGF0YSkuc3VjY2VzcyhzdWNj
ZXNzQ2FsbGJhY2spOworICAgICAqIGBgYAorICAgICAqCisgICAgICogQ29tcGxldGUgbGlzdCBv
ZiBzaG9ydGN1dCBtZXRob2RzOgorICAgICAqCisgICAgICogLSB7QGxpbmsgbmcuJGh0dHAjZ2V0
ICRodHRwLmdldH0KKyAgICAgKiAtIHtAbGluayBuZy4kaHR0cCNoZWFkICRodHRwLmhlYWR9Cisg
ICAgICogLSB7QGxpbmsgbmcuJGh0dHAjcG9zdCAkaHR0cC5wb3N0fQorICAgICAqIC0ge0BsaW5r
IG5nLiRodHRwI3B1dCAkaHR0cC5wdXR9CisgICAgICogLSB7QGxpbmsgbmcuJGh0dHAjZGVsZXRl
ICRodHRwLmRlbGV0ZX0KKyAgICAgKiAtIHtAbGluayBuZy4kaHR0cCNqc29ucCAkaHR0cC5qc29u
cH0KKyAgICAgKiAtIHtAbGluayBuZy4kaHR0cCNwYXRjaCAkaHR0cC5wYXRjaH0KKyAgICAgKgor
ICAgICAqCisgICAgICogIyMgU2V0dGluZyBIVFRQIEhlYWRlcnMKKyAgICAgKgorICAgICAqIFRo
ZSAkaHR0cCBzZXJ2aWNlIHdpbGwgYXV0b21hdGljYWxseSBhZGQgY2VydGFpbiBIVFRQIGhlYWRl
cnMgdG8gYWxsIHJlcXVlc3RzLiBUaGVzZSBkZWZhdWx0cworICAgICAqIGNhbiBiZSBmdWxseSBj
b25maWd1cmVkIGJ5IGFjY2Vzc2luZyB0aGUgYCRodHRwUHJvdmlkZXIuZGVmYXVsdHMuaGVhZGVy
c2AgY29uZmlndXJhdGlvbgorICAgICAqIG9iamVjdCwgd2hpY2ggY3VycmVudGx5IGNvbnRhaW5z
IHRoaXMgZGVmYXVsdCBjb25maWd1cmF0aW9uOgorICAgICAqCisgICAgICogLSBgJGh0dHBQcm92
aWRlci5kZWZhdWx0cy5oZWFkZXJzLmNvbW1vbmAgKGhlYWRlcnMgdGhhdCBhcmUgY29tbW9uIGZv
ciBhbGwgcmVxdWVzdHMpOgorICAgICAqICAgLSBgQWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uLCB0
ZXh0L3BsYWluLCAqIC8gKmAKKyAgICAgKiAtIGAkaHR0cFByb3ZpZGVyLmRlZmF1bHRzLmhlYWRl
cnMucG9zdGA6IChoZWFkZXIgZGVmYXVsdHMgZm9yIFBPU1QgcmVxdWVzdHMpCisgICAgICogICAt
IGBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25gCisgICAgICogLSBgJGh0dHBQcm92aWRl
ci5kZWZhdWx0cy5oZWFkZXJzLnB1dGAgKGhlYWRlciBkZWZhdWx0cyBmb3IgUFVUIHJlcXVlc3Rz
KQorICAgICAqICAgLSBgQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uYAorICAgICAqCisg
ICAgICogVG8gYWRkIG9yIG92ZXJ3cml0ZSB0aGVzZSBkZWZhdWx0cywgc2ltcGx5IGFkZCBvciBy
ZW1vdmUgYSBwcm9wZXJ0eSBmcm9tIHRoZXNlIGNvbmZpZ3VyYXRpb24KKyAgICAgKiBvYmplY3Rz
LiBUbyBhZGQgaGVhZGVycyBmb3IgYW4gSFRUUCBtZXRob2Qgb3RoZXIgdGhhbiBQT1NUIG9yIFBV
VCwgc2ltcGx5IGFkZCBhIG5ldyBvYmplY3QKKyAgICAgKiB3aXRoIHRoZSBsb3dlcmNhc2VkIEhU
VFAgbWV0aG9kIG5hbWUgYXMgdGhlIGtleSwgZS5nLgorICAgICAqIGAkaHR0cFByb3ZpZGVyLmRl
ZmF1bHRzLmhlYWRlcnMuZ2V0ID0geyAnTXktSGVhZGVyJyA6ICd2YWx1ZScgfWAuCisgICAgICoK
KyAgICAgKiBUaGUgZGVmYXVsdHMgY2FuIGFsc28gYmUgc2V0IGF0IHJ1bnRpbWUgdmlhIHRoZSBg
JGh0dHAuZGVmYXVsdHNgIG9iamVjdCBpbiB0aGUgc2FtZQorICAgICAqIGZhc2hpb24uIEZvciBl
eGFtcGxlOgorICAgICAqCisgICAgICogYGBgCisgICAgICogbW9kdWxlLnJ1bihmdW5jdGlvbigk
aHR0cCkgeworICAgICAqICAgJGh0dHAuZGVmYXVsdHMuaGVhZGVycy5jb21tb24uQXV0aG9yaXph
dGlvbiA9ICdCYXNpYyBZbVZsY0RwaWIyOXcnCisgICAgICogfSk7CisgICAgICogYGBgCisgICAg
ICoKKyAgICAgKiBJbiBhZGRpdGlvbiwgeW91IGNhbiBzdXBwbHkgYSBgaGVhZGVyc2AgcHJvcGVy
dHkgaW4gdGhlIGNvbmZpZyBvYmplY3QgcGFzc2VkIHdoZW4KKyAgICAgKiBjYWxsaW5nIGAkaHR0
cChjb25maWcpYCwgd2hpY2ggb3ZlcnJpZGVzIHRoZSBkZWZhdWx0cyB3aXRob3V0IGNoYW5naW5n
IHRoZW0gZ2xvYmFsbHkuCisgICAgICoKKyAgICAgKiBUbyBleHBsaWNpdGx5IHJlbW92ZSBhIGhl
YWRlciBhdXRvbWF0aWNhbGx5IGFkZGVkIHZpYSAkaHR0cFByb3ZpZGVyLmRlZmF1bHRzLmhlYWRl
cnMgb24gYSBwZXIgcmVxdWVzdCBiYXNpcywKKyAgICAgKiBVc2UgdGhlIGBoZWFkZXJzYCBwcm9w
ZXJ0eSwgc2V0dGluZyB0aGUgZGVzaXJlZCBoZWFkZXIgdG8gYHVuZGVmaW5lZGAuIEZvciBleGFt
cGxlOgorICAgICAqCisgICAgICogYGBganMKKyAgICAgKiB2YXIgcmVxID0geworICAgICAqICBt
ZXRob2Q6ICdQT1NUJywKKyAgICAgKiAgdXJsOiAnaHR0cDovL2V4YW1wbGUuY29tJywKKyAgICAg
KiAgaGVhZGVyczogeworICAgICAqICAgICdDb250ZW50LVR5cGUnOiB1bmRlZmluZWQKKyAgICAg
KiAgfSwKKyAgICAgKiAgZGF0YTogeyB0ZXN0OiAndGVzdCcgfQorICAgICAqIH0KKyAgICAgKgor
ICAgICAqICRodHRwKHJlcSkuc3VjY2VzcyhmdW5jdGlvbigpey4uLn0pLmVycm9yKGZ1bmN0aW9u
KCl7Li4ufSk7CisgICAgICogYGBgCisgICAgICoKKyAgICAgKiAjIyBUcmFuc2Zvcm1pbmcgUmVx
dWVzdHMgYW5kIFJlc3BvbnNlcworICAgICAqCisgICAgICogQm90aCByZXF1ZXN0cyBhbmQgcmVz
cG9uc2VzIGNhbiBiZSB0cmFuc2Zvcm1lZCB1c2luZyB0cmFuc2Zvcm1hdGlvbiBmdW5jdGlvbnM6
IGB0cmFuc2Zvcm1SZXF1ZXN0YAorICAgICAqIGFuZCBgdHJhbnNmb3JtUmVzcG9uc2VgLiBUaGVz
ZSBwcm9wZXJ0aWVzIGNhbiBiZSBhIHNpbmdsZSBmdW5jdGlvbiB0aGF0IHJldHVybnMKKyAgICAg
KiB0aGUgdHJhbnNmb3JtZWQgdmFsdWUgKGBmdW5jdGlvbihkYXRhLCBoZWFkZXJzR2V0dGVyLCBz
dGF0dXMpYCkgb3IgYW4gYXJyYXkgb2Ygc3VjaCB0cmFuc2Zvcm1hdGlvbiBmdW5jdGlvbnMsCisg
ICAgICogd2hpY2ggYWxsb3dzIHlvdSB0byBgcHVzaGAgb3IgYHVuc2hpZnRgIGEgbmV3IHRyYW5z
Zm9ybWF0aW9uIGZ1bmN0aW9uIGludG8gdGhlIHRyYW5zZm9ybWF0aW9uIGNoYWluLgorICAgICAq
CisgICAgICogIyMjIERlZmF1bHQgVHJhbnNmb3JtYXRpb25zCisgICAgICoKKyAgICAgKiBUaGUg
YCRodHRwUHJvdmlkZXJgIHByb3ZpZGVyIGFuZCBgJGh0dHBgIHNlcnZpY2UgZXhwb3NlIGBkZWZh
dWx0cy50cmFuc2Zvcm1SZXF1ZXN0YCBhbmQKKyAgICAgKiBgZGVmYXVsdHMudHJhbnNmb3JtUmVz
cG9uc2VgIHByb3BlcnRpZXMuIElmIGEgcmVxdWVzdCBkb2VzIG5vdCBwcm92aWRlIGl0cyBvd24g
dHJhbnNmb3JtYXRpb25zCisgICAgICogdGhlbiB0aGVzZSB3aWxsIGJlIGFwcGxpZWQuCisgICAg
ICoKKyAgICAgKiBZb3UgY2FuIGF1Z21lbnQgb3IgcmVwbGFjZSB0aGUgZGVmYXVsdCB0cmFuc2Zv
cm1hdGlvbnMgYnkgbW9kaWZ5aW5nIHRoZXNlIHByb3BlcnRpZXMgYnkgYWRkaW5nIHRvIG9yCisg
ICAgICogcmVwbGFjaW5nIHRoZSBhcnJheS4KKyAgICAgKgorICAgICAqIEFuZ3VsYXIgcHJvdmlk
ZXMgdGhlIGZvbGxvd2luZyBkZWZhdWx0IHRyYW5zZm9ybWF0aW9uczoKKyAgICAgKgorICAgICAq
IFJlcXVlc3QgdHJhbnNmb3JtYXRpb25zIChgJGh0dHBQcm92aWRlci5kZWZhdWx0cy50cmFuc2Zv
cm1SZXF1ZXN0YCBhbmQgYCRodHRwLmRlZmF1bHRzLnRyYW5zZm9ybVJlcXVlc3RgKToKKyAgICAg
KgorICAgICAqIC0gSWYgdGhlIGBkYXRhYCBwcm9wZXJ0eSBvZiB0aGUgcmVxdWVzdCBjb25maWd1
cmF0aW9uIG9iamVjdCBjb250YWlucyBhbiBvYmplY3QsIHNlcmlhbGl6ZSBpdAorICAgICAqICAg
aW50byBKU09OIGZvcm1hdC4KKyAgICAgKgorICAgICAqIFJlc3BvbnNlIHRyYW5zZm9ybWF0aW9u
cyAoYCRodHRwUHJvdmlkZXIuZGVmYXVsdHMudHJhbnNmb3JtUmVzcG9uc2VgIGFuZCBgJGh0dHAu
ZGVmYXVsdHMudHJhbnNmb3JtUmVzcG9uc2VgKToKKyAgICAgKgorICAgICAqICAtIElmIFhTUkYg
cHJlZml4IGlzIGRldGVjdGVkLCBzdHJpcCBpdCAoc2VlIFNlY3VyaXR5IENvbnNpZGVyYXRpb25z
IHNlY3Rpb24gYmVsb3cpLgorICAgICAqICAtIElmIEpTT04gcmVzcG9uc2UgaXMgZGV0ZWN0ZWQs
IGRlc2VyaWFsaXplIGl0IHVzaW5nIGEgSlNPTiBwYXJzZXIuCisgICAgICoKKyAgICAgKgorICAg
ICAqICMjIyBPdmVycmlkaW5nIHRoZSBEZWZhdWx0IFRyYW5zZm9ybWF0aW9ucyBQZXIgUmVxdWVz
dAorICAgICAqCisgICAgICogSWYgeW91IHdpc2ggb3ZlcnJpZGUgdGhlIHJlcXVlc3QvcmVzcG9u
c2UgdHJhbnNmb3JtYXRpb25zIG9ubHkgZm9yIGEgc2luZ2xlIHJlcXVlc3QgdGhlbiBwcm92aWRl
CisgICAgICogYHRyYW5zZm9ybVJlcXVlc3RgIGFuZC9vciBgdHJhbnNmb3JtUmVzcG9uc2VgIHBy
b3BlcnRpZXMgb24gdGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHBhc3NlZAorICAgICAqIGludG8g
YCRodHRwYC4KKyAgICAgKgorICAgICAqIE5vdGUgdGhhdCBpZiB5b3UgcHJvdmlkZSB0aGVzZSBw
cm9wZXJ0aWVzIG9uIHRoZSBjb25maWcgb2JqZWN0IHRoZSBkZWZhdWx0IHRyYW5zZm9ybWF0aW9u
cyB3aWxsIGJlCisgICAgICogb3ZlcndyaXR0ZW4uIElmIHlvdSB3aXNoIHRvIGF1Z21lbnQgdGhl
IGRlZmF1bHQgdHJhbnNmb3JtYXRpb25zIHRoZW4geW91IG11c3QgaW5jbHVkZSB0aGVtIGluIHlv
dXIKKyAgICAgKiBsb2NhbCB0cmFuc2Zvcm1hdGlvbiBhcnJheS4KKyAgICAgKgorICAgICAqIFRo
ZSBmb2xsb3dpbmcgY29kZSBkZW1vbnN0cmF0ZXMgYWRkaW5nIGEgbmV3IHJlc3BvbnNlIHRyYW5z
Zm9ybWF0aW9uIHRvIGJlIHJ1biBhZnRlciB0aGUgZGVmYXVsdCByZXNwb25zZQorICAgICAqIHRy
YW5zZm9ybWF0aW9ucyBoYXZlIGJlZW4gcnVuLgorICAgICAqCisgICAgICogYGBganMKKyAgICAg
KiBmdW5jdGlvbiBhcHBlbmRUcmFuc2Zvcm0oZGVmYXVsdHMsIHRyYW5zZm9ybSkgeworICAgICAq
CisgICAgICogICAvLyBXZSBjYW4ndCBndWFyYW50ZWUgdGhhdCB0aGUgZGVmYXVsdCB0cmFuc2Zv
cm1hdGlvbiBpcyBhbiBhcnJheQorICAgICAqICAgZGVmYXVsdHMgPSBhbmd1bGFyLmlzQXJyYXko
ZGVmYXVsdHMpID8gZGVmYXVsdHMgOiBbZGVmYXVsdHNdOworICAgICAqCisgICAgICogICAvLyBB
cHBlbmQgdGhlIG5ldyB0cmFuc2Zvcm1hdGlvbiB0byB0aGUgZGVmYXVsdHMKKyAgICAgKiAgIHJl
dHVybiBkZWZhdWx0cy5jb25jYXQodHJhbnNmb3JtKTsKKyAgICAgKiB9CisgICAgICoKKyAgICAg
KiAkaHR0cCh7CisgICAgICogICB1cmw6ICcuLi4nLAorICAgICAqICAgbWV0aG9kOiAnR0VUJywK
KyAgICAgKiAgIHRyYW5zZm9ybVJlc3BvbnNlOiBhcHBlbmRUcmFuc2Zvcm0oJGh0dHAuZGVmYXVs
dHMudHJhbnNmb3JtUmVzcG9uc2UsIGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICogICAgIHJldHVy
biBkb1RyYW5zZm9ybSh2YWx1ZSk7CisgICAgICogICB9KQorICAgICAqIH0pOworICAgICAqIGBg
YAorICAgICAqCisgICAgICoKKyAgICAgKiAjIyBDYWNoaW5nCisgICAgICoKKyAgICAgKiBUbyBl
bmFibGUgY2FjaGluZywgc2V0IHRoZSByZXF1ZXN0IGNvbmZpZ3VyYXRpb24gYGNhY2hlYCBwcm9w
ZXJ0eSB0byBgdHJ1ZWAgKHRvIHVzZSBkZWZhdWx0CisgICAgICogY2FjaGUpIG9yIHRvIGEgY3Vz
dG9tIGNhY2hlIG9iamVjdCAoYnVpbHQgd2l0aCB7QGxpbmsgbmcuJGNhY2hlRmFjdG9yeSBgJGNh
Y2hlRmFjdG9yeWB9KS4KKyAgICAgKiBXaGVuIHRoZSBjYWNoZSBpcyBlbmFibGVkLCBgJGh0dHBg
IHN0b3JlcyB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyIGluIHRoZSBzcGVjaWZpZWQKKyAg
ICAgKiBjYWNoZS4gVGhlIG5leHQgdGltZSB0aGUgc2FtZSByZXF1ZXN0IGlzIG1hZGUsIHRoZSBy
ZXNwb25zZSBpcyBzZXJ2ZWQgZnJvbSB0aGUgY2FjaGUgd2l0aG91dAorICAgICAqIHNlbmRpbmcg
YSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIuCisgICAgICoKKyAgICAgKiBOb3RlIHRoYXQgZXZlbiBp
ZiB0aGUgcmVzcG9uc2UgaXMgc2VydmVkIGZyb20gY2FjaGUsIGRlbGl2ZXJ5IG9mIHRoZSBkYXRh
IGlzIGFzeW5jaHJvbm91cyBpbgorICAgICAqIHRoZSBzYW1lIHdheSB0aGF0IHJlYWwgcmVxdWVz
dHMgYXJlLgorICAgICAqCisgICAgICogSWYgdGhlcmUgYXJlIG11bHRpcGxlIEdFVCByZXF1ZXN0
cyBmb3IgdGhlIHNhbWUgVVJMIHRoYXQgc2hvdWxkIGJlIGNhY2hlZCB1c2luZyB0aGUgc2FtZQor
ICAgICAqIGNhY2hlLCBidXQgdGhlIGNhY2hlIGlzIG5vdCBwb3B1bGF0ZWQgeWV0LCBvbmx5IG9u
ZSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgd2lsbCBiZSBtYWRlIGFuZAorICAgICAqIHRoZSByZW1h
aW5pbmcgcmVxdWVzdHMgd2lsbCBiZSBmdWxmaWxsZWQgdXNpbmcgdGhlIHJlc3BvbnNlIGZyb20g
dGhlIGZpcnN0IHJlcXVlc3QuCisgICAgICoKKyAgICAgKiBZb3UgY2FuIGNoYW5nZSB0aGUgZGVm
YXVsdCBjYWNoZSB0byBhIG5ldyBvYmplY3QgKGJ1aWx0IHdpdGgKKyAgICAgKiB7QGxpbmsgbmcu
JGNhY2hlRmFjdG9yeSBgJGNhY2hlRmFjdG9yeWB9KSBieSB1cGRhdGluZyB0aGUKKyAgICAgKiB7
QGxpbmsgbmcuJGh0dHAjZGVmYXVsdHMgYCRodHRwLmRlZmF1bHRzLmNhY2hlYH0gcHJvcGVydHku
IEFsbCByZXF1ZXN0cyB3aG8gc2V0CisgICAgICogdGhlaXIgYGNhY2hlYCBwcm9wZXJ0eSB0byBg
dHJ1ZWAgd2lsbCBub3cgdXNlIHRoaXMgY2FjaGUgb2JqZWN0LgorICAgICAqCisgICAgICogSWYg
eW91IHNldCB0aGUgZGVmYXVsdCBjYWNoZSB0byBgZmFsc2VgIHRoZW4gb25seSByZXF1ZXN0cyB0
aGF0IHNwZWNpZnkgdGhlaXIgb3duIGN1c3RvbQorICAgICAqIGNhY2hlIG9iamVjdCB3aWxsIGJl
IGNhY2hlZC4KKyAgICAgKgorICAgICAqICMjIEludGVyY2VwdG9ycworICAgICAqCisgICAgICog
QmVmb3JlIHlvdSBzdGFydCBjcmVhdGluZyBpbnRlcmNlcHRvcnMsIGJlIHN1cmUgdG8gdW5kZXJz
dGFuZCB0aGUKKyAgICAgKiB7QGxpbmsgbmcuJHEgJHEgYW5kIGRlZmVycmVkL3Byb21pc2UgQVBJ
c30uCisgICAgICoKKyAgICAgKiBGb3IgcHVycG9zZXMgb2YgZ2xvYmFsIGVycm9yIGhhbmRsaW5n
LCBhdXRoZW50aWNhdGlvbiwgb3IgYW55IGtpbmQgb2Ygc3luY2hyb25vdXMgb3IKKyAgICAgKiBh
c3luY2hyb25vdXMgcHJlLXByb2Nlc3Npbmcgb2YgcmVxdWVzdCBvciBwb3N0cHJvY2Vzc2luZyBv
ZiByZXNwb25zZXMsIGl0IGlzIGRlc2lyYWJsZSB0byBiZQorICAgICAqIGFibGUgdG8gaW50ZXJj
ZXB0IHJlcXVlc3RzIGJlZm9yZSB0aGV5IGFyZSBoYW5kZWQgdG8gdGhlIHNlcnZlciBhbmQKKyAg
ICAgKiByZXNwb25zZXMgYmVmb3JlIHRoZXkgYXJlIGhhbmRlZCBvdmVyIHRvIHRoZSBhcHBsaWNh
dGlvbiBjb2RlIHRoYXQKKyAgICAgKiBpbml0aWF0ZWQgdGhlc2UgcmVxdWVzdHMuIFRoZSBpbnRl
cmNlcHRvcnMgbGV2ZXJhZ2UgdGhlIHtAbGluayBuZy4kcQorICAgICAqIHByb21pc2UgQVBJc30g
dG8gZnVsZmlsbCB0aGlzIG5lZWQgZm9yIGJvdGggc3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91
cyBwcmUtcHJvY2Vzc2luZy4KKyAgICAgKgorICAgICAqIFRoZSBpbnRlcmNlcHRvcnMgYXJlIHNl
cnZpY2UgZmFjdG9yaWVzIHRoYXQgYXJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgYCRodHRwUHJvdmlk
ZXJgIGJ5CisgICAgICogYWRkaW5nIHRoZW0gdG8gdGhlIGAkaHR0cFByb3ZpZGVyLmludGVyY2Vw
dG9yc2AgYXJyYXkuIFRoZSBmYWN0b3J5IGlzIGNhbGxlZCBhbmQKKyAgICAgKiBpbmplY3RlZCB3
aXRoIGRlcGVuZGVuY2llcyAoaWYgc3BlY2lmaWVkKSBhbmQgcmV0dXJucyB0aGUgaW50ZXJjZXB0
b3IuCisgICAgICoKKyAgICAgKiBUaGVyZSBhcmUgdHdvIGtpbmRzIG9mIGludGVyY2VwdG9ycyAo
YW5kIHR3byBraW5kcyBvZiByZWplY3Rpb24gaW50ZXJjZXB0b3JzKToKKyAgICAgKgorICAgICAq
ICAgKiBgcmVxdWVzdGA6IGludGVyY2VwdG9ycyBnZXQgY2FsbGVkIHdpdGggYSBodHRwIGBjb25m
aWdgIG9iamVjdC4gVGhlIGZ1bmN0aW9uIGlzIGZyZWUgdG8KKyAgICAgKiAgICAgbW9kaWZ5IHRo
ZSBgY29uZmlnYCBvYmplY3Qgb3IgY3JlYXRlIGEgbmV3IG9uZS4gVGhlIGZ1bmN0aW9uIG5lZWRz
IHRvIHJldHVybiB0aGUgYGNvbmZpZ2AKKyAgICAgKiAgICAgb2JqZWN0IGRpcmVjdGx5LCBvciBh
IHByb21pc2UgY29udGFpbmluZyB0aGUgYGNvbmZpZ2Agb3IgYSBuZXcgYGNvbmZpZ2Agb2JqZWN0
LgorICAgICAqICAgKiBgcmVxdWVzdEVycm9yYDogaW50ZXJjZXB0b3IgZ2V0cyBjYWxsZWQgd2hl
biBhIHByZXZpb3VzIGludGVyY2VwdG9yIHRocmV3IGFuIGVycm9yIG9yCisgICAgICogICAgIHJl
c29sdmVkIHdpdGggYSByZWplY3Rpb24uCisgICAgICogICAqIGByZXNwb25zZWA6IGludGVyY2Vw
dG9ycyBnZXQgY2FsbGVkIHdpdGggaHR0cCBgcmVzcG9uc2VgIG9iamVjdC4gVGhlIGZ1bmN0aW9u
IGlzIGZyZWUgdG8KKyAgICAgKiAgICAgbW9kaWZ5IHRoZSBgcmVzcG9uc2VgIG9iamVjdCBvciBj
cmVhdGUgYSBuZXcgb25lLiBUaGUgZnVuY3Rpb24gbmVlZHMgdG8gcmV0dXJuIHRoZSBgcmVzcG9u
c2VgCisgICAgICogICAgIG9iamVjdCBkaXJlY3RseSwgb3IgYXMgYSBwcm9taXNlIGNvbnRhaW5p
bmcgdGhlIGByZXNwb25zZWAgb3IgYSBuZXcgYHJlc3BvbnNlYCBvYmplY3QuCisgICAgICogICAq
IGByZXNwb25zZUVycm9yYDogaW50ZXJjZXB0b3IgZ2V0cyBjYWxsZWQgd2hlbiBhIHByZXZpb3Vz
IGludGVyY2VwdG9yIHRocmV3IGFuIGVycm9yIG9yCisgICAgICogICAgIHJlc29sdmVkIHdpdGgg
YSByZWplY3Rpb24uCisgICAgICoKKyAgICAgKgorICAgICAqIGBgYGpzCisgICAgICogICAvLyBy
ZWdpc3RlciB0aGUgaW50ZXJjZXB0b3IgYXMgYSBzZXJ2aWNlCisgICAgICogICAkcHJvdmlkZS5m
YWN0b3J5KCdteUh0dHBJbnRlcmNlcHRvcicsIGZ1bmN0aW9uKCRxLCBkZXBlbmRlbmN5MSwgZGVw
ZW5kZW5jeTIpIHsKKyAgICAgKiAgICAgcmV0dXJuIHsKKyAgICAgKiAgICAgICAvLyBvcHRpb25h
bCBtZXRob2QKKyAgICAgKiAgICAgICAncmVxdWVzdCc6IGZ1bmN0aW9uKGNvbmZpZykgeworICAg
ICAqICAgICAgICAgLy8gZG8gc29tZXRoaW5nIG9uIHN1Y2Nlc3MKKyAgICAgKiAgICAgICAgIHJl
dHVybiBjb25maWc7CisgICAgICogICAgICAgfSwKKyAgICAgKgorICAgICAqICAgICAgIC8vIG9w
dGlvbmFsIG1ldGhvZAorICAgICAqICAgICAgJ3JlcXVlc3RFcnJvcic6IGZ1bmN0aW9uKHJlamVj
dGlvbikgeworICAgICAqICAgICAgICAgLy8gZG8gc29tZXRoaW5nIG9uIGVycm9yCisgICAgICog
ICAgICAgICBpZiAoY2FuUmVjb3ZlcihyZWplY3Rpb24pKSB7CisgICAgICogICAgICAgICAgIHJl
dHVybiByZXNwb25zZU9yTmV3UHJvbWlzZQorICAgICAqICAgICAgICAgfQorICAgICAqICAgICAg
ICAgcmV0dXJuICRxLnJlamVjdChyZWplY3Rpb24pOworICAgICAqICAgICAgIH0sCisgICAgICoK
KyAgICAgKgorICAgICAqCisgICAgICogICAgICAgLy8gb3B0aW9uYWwgbWV0aG9kCisgICAgICog
ICAgICAgJ3Jlc3BvbnNlJzogZnVuY3Rpb24ocmVzcG9uc2UpIHsKKyAgICAgKiAgICAgICAgIC8v
IGRvIHNvbWV0aGluZyBvbiBzdWNjZXNzCisgICAgICogICAgICAgICByZXR1cm4gcmVzcG9uc2U7
CisgICAgICogICAgICAgfSwKKyAgICAgKgorICAgICAqICAgICAgIC8vIG9wdGlvbmFsIG1ldGhv
ZAorICAgICAqICAgICAgJ3Jlc3BvbnNlRXJyb3InOiBmdW5jdGlvbihyZWplY3Rpb24pIHsKKyAg
ICAgKiAgICAgICAgIC8vIGRvIHNvbWV0aGluZyBvbiBlcnJvcgorICAgICAqICAgICAgICAgaWYg
KGNhblJlY292ZXIocmVqZWN0aW9uKSkgeworICAgICAqICAgICAgICAgICByZXR1cm4gcmVzcG9u
c2VPck5ld1Byb21pc2UKKyAgICAgKiAgICAgICAgIH0KKyAgICAgKiAgICAgICAgIHJldHVybiAk
cS5yZWplY3QocmVqZWN0aW9uKTsKKyAgICAgKiAgICAgICB9CisgICAgICogICAgIH07CisgICAg
ICogICB9KTsKKyAgICAgKgorICAgICAqICAgJGh0dHBQcm92aWRlci5pbnRlcmNlcHRvcnMucHVz
aCgnbXlIdHRwSW50ZXJjZXB0b3InKTsKKyAgICAgKgorICAgICAqCisgICAgICogICAvLyBhbHRl
cm5hdGl2ZWx5LCByZWdpc3RlciB0aGUgaW50ZXJjZXB0b3IgdmlhIGFuIGFub255bW91cyBmYWN0
b3J5CisgICAgICogICAkaHR0cFByb3ZpZGVyLmludGVyY2VwdG9ycy5wdXNoKGZ1bmN0aW9uKCRx
LCBkZXBlbmRlbmN5MSwgZGVwZW5kZW5jeTIpIHsKKyAgICAgKiAgICAgcmV0dXJuIHsKKyAgICAg
KiAgICAgICdyZXF1ZXN0JzogZnVuY3Rpb24oY29uZmlnKSB7CisgICAgICogICAgICAgICAgLy8g
c2FtZSBhcyBhYm92ZQorICAgICAqICAgICAgIH0sCisgICAgICoKKyAgICAgKiAgICAgICAncmVz
cG9uc2UnOiBmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAqICAgICAgICAgIC8vIHNhbWUgYXMg
YWJvdmUKKyAgICAgKiAgICAgICB9CisgICAgICogICAgIH07CisgICAgICogICB9KTsKKyAgICAg
KiBgYGAKKyAgICAgKgorICAgICAqICMjIFNlY3VyaXR5IENvbnNpZGVyYXRpb25zCisgICAgICoK
KyAgICAgKiBXaGVuIGRlc2lnbmluZyB3ZWIgYXBwbGljYXRpb25zLCBjb25zaWRlciBzZWN1cml0
eSB0aHJlYXRzIGZyb206CisgICAgICoKKyAgICAgKiAtIFtKU09OIHZ1bG5lcmFiaWxpdHldKGh0
dHA6Ly9oYWFja2VkLmNvbS9hcmNoaXZlLzIwMDgvMTEvMjAvYW5hdG9teS1vZi1hLXN1YnRsZS1q
c29uLXZ1bG5lcmFiaWxpdHkuYXNweCkKKyAgICAgKiAtIFtYU1JGXShodHRwOi8vZW4ud2lraXBl
ZGlhLm9yZy93aWtpL0Nyb3NzLXNpdGVfcmVxdWVzdF9mb3JnZXJ5KQorICAgICAqCisgICAgICog
Qm90aCBzZXJ2ZXIgYW5kIHRoZSBjbGllbnQgbXVzdCBjb29wZXJhdGUgaW4gb3JkZXIgdG8gZWxp
bWluYXRlIHRoZXNlIHRocmVhdHMuIEFuZ3VsYXIgY29tZXMKKyAgICAgKiBwcmUtY29uZmlndXJl
ZCB3aXRoIHN0cmF0ZWdpZXMgdGhhdCBhZGRyZXNzIHRoZXNlIGlzc3VlcywgYnV0IGZvciB0aGlz
IHRvIHdvcmsgYmFja2VuZCBzZXJ2ZXIKKyAgICAgKiBjb29wZXJhdGlvbiBpcyByZXF1aXJlZC4K
KyAgICAgKgorICAgICAqICMjIyBKU09OIFZ1bG5lcmFiaWxpdHkgUHJvdGVjdGlvbgorICAgICAq
CisgICAgICogQSBbSlNPTiB2dWxuZXJhYmlsaXR5XShodHRwOi8vaGFhY2tlZC5jb20vYXJjaGl2
ZS8yMDA4LzExLzIwL2FuYXRvbXktb2YtYS1zdWJ0bGUtanNvbi12dWxuZXJhYmlsaXR5LmFzcHgp
CisgICAgICogYWxsb3dzIHRoaXJkIHBhcnR5IHdlYnNpdGUgdG8gdHVybiB5b3VyIEpTT04gcmVz
b3VyY2UgVVJMIGludG8KKyAgICAgKiBbSlNPTlBdKGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dp
a2kvSlNPTlApIHJlcXVlc3QgdW5kZXIgc29tZSBjb25kaXRpb25zLiBUbworICAgICAqIGNvdW50
ZXIgdGhpcyB5b3VyIHNlcnZlciBjYW4gcHJlZml4IGFsbCBKU09OIHJlcXVlc3RzIHdpdGggZm9s
bG93aW5nIHN0cmluZyBgIildfScsXG4iYC4KKyAgICAgKiBBbmd1bGFyIHdpbGwgYXV0b21hdGlj
YWxseSBzdHJpcCB0aGUgcHJlZml4IGJlZm9yZSBwcm9jZXNzaW5nIGl0IGFzIEpTT04uCisgICAg
ICoKKyAgICAgKiBGb3IgZXhhbXBsZSBpZiB5b3VyIHNlcnZlciBuZWVkcyB0byByZXR1cm46Cisg
ICAgICogYGBganMKKyAgICAgKiBbJ29uZScsJ3R3byddCisgICAgICogYGBgCisgICAgICoKKyAg
ICAgKiB3aGljaCBpcyB2dWxuZXJhYmxlIHRvIGF0dGFjaywgeW91ciBzZXJ2ZXIgY2FuIHJldHVy
bjoKKyAgICAgKiBgYGBqcworICAgICAqICldfScsCisgICAgICogWydvbmUnLCd0d28nXQorICAg
ICAqIGBgYAorICAgICAqCisgICAgICogQW5ndWxhciB3aWxsIHN0cmlwIHRoZSBwcmVmaXgsIGJl
Zm9yZSBwcm9jZXNzaW5nIHRoZSBKU09OLgorICAgICAqCisgICAgICoKKyAgICAgKiAjIyMgQ3Jv
c3MgU2l0ZSBSZXF1ZXN0IEZvcmdlcnkgKFhTUkYpIFByb3RlY3Rpb24KKyAgICAgKgorICAgICAq
IFtYU1JGXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Nyb3NzLXNpdGVfcmVxdWVzdF9m
b3JnZXJ5KSBpcyBhIHRlY2huaXF1ZSBieSB3aGljaAorICAgICAqIGFuIHVuYXV0aG9yaXplZCBz
aXRlIGNhbiBnYWluIHlvdXIgdXNlcidzIHByaXZhdGUgZGF0YS4gQW5ndWxhciBwcm92aWRlcyBh
IG1lY2hhbmlzbQorICAgICAqIHRvIGNvdW50ZXIgWFNSRi4gV2hlbiBwZXJmb3JtaW5nIFhIUiBy
ZXF1ZXN0cywgdGhlICRodHRwIHNlcnZpY2UgcmVhZHMgYSB0b2tlbiBmcm9tIGEgY29va2llCisg
ICAgICogKGJ5IGRlZmF1bHQsIGBYU1JGLVRPS0VOYCkgYW5kIHNldHMgaXQgYXMgYW4gSFRUUCBo
ZWFkZXIgKGBYLVhTUkYtVE9LRU5gKS4gU2luY2Ugb25seQorICAgICAqIEphdmFTY3JpcHQgdGhh
dCBydW5zIG9uIHlvdXIgZG9tYWluIGNvdWxkIHJlYWQgdGhlIGNvb2tpZSwgeW91ciBzZXJ2ZXIg
Y2FuIGJlIGFzc3VyZWQgdGhhdAorICAgICAqIHRoZSBYSFIgY2FtZSBmcm9tIEphdmFTY3JpcHQg
cnVubmluZyBvbiB5b3VyIGRvbWFpbi4gVGhlIGhlYWRlciB3aWxsIG5vdCBiZSBzZXQgZm9yCisg
ICAgICogY3Jvc3MtZG9tYWluIHJlcXVlc3RzLgorICAgICAqCisgICAgICogVG8gdGFrZSBhZHZh
bnRhZ2Ugb2YgdGhpcywgeW91ciBzZXJ2ZXIgbmVlZHMgdG8gc2V0IGEgdG9rZW4gaW4gYSBKYXZh
U2NyaXB0IHJlYWRhYmxlIHNlc3Npb24KKyAgICAgKiBjb29raWUgY2FsbGVkIGBYU1JGLVRPS0VO
YCBvbiB0aGUgZmlyc3QgSFRUUCBHRVQgcmVxdWVzdC4gT24gc3Vic2VxdWVudCBYSFIgcmVxdWVz
dHMgdGhlCisgICAgICogc2VydmVyIGNhbiB2ZXJpZnkgdGhhdCB0aGUgY29va2llIG1hdGNoZXMg
YFgtWFNSRi1UT0tFTmAgSFRUUCBoZWFkZXIsIGFuZCB0aGVyZWZvcmUgYmUgc3VyZQorICAgICAq
IHRoYXQgb25seSBKYXZhU2NyaXB0IHJ1bm5pbmcgb24geW91ciBkb21haW4gY291bGQgaGF2ZSBz
ZW50IHRoZSByZXF1ZXN0LiBUaGUgdG9rZW4gbXVzdCBiZQorICAgICAqIHVuaXF1ZSBmb3IgZWFj
aCB1c2VyIGFuZCBtdXN0IGJlIHZlcmlmaWFibGUgYnkgdGhlIHNlcnZlciAodG8gcHJldmVudCB0
aGUgSmF2YVNjcmlwdCBmcm9tCisgICAgICogbWFraW5nIHVwIGl0cyBvd24gdG9rZW5zKS4gV2Ug
cmVjb21tZW5kIHRoYXQgdGhlIHRva2VuIGlzIGEgZGlnZXN0IG9mIHlvdXIgc2l0ZSdzCisgICAg
ICogYXV0aGVudGljYXRpb24gY29va2llIHdpdGggYSBbc2FsdF0oaHR0cHM6Ly9lbi53aWtpcGVk
aWEub3JnL3dpa2kvU2FsdF8oY3J5cHRvZ3JhcGh5JiM0MTspCisgICAgICogZm9yIGFkZGVkIHNl
Y3VyaXR5LgorICAgICAqCisgICAgICogVGhlIG5hbWUgb2YgdGhlIGhlYWRlcnMgY2FuIGJlIHNw
ZWNpZmllZCB1c2luZyB0aGUgeHNyZkhlYWRlck5hbWUgYW5kIHhzcmZDb29raWVOYW1lCisgICAg
ICogcHJvcGVydGllcyBvZiBlaXRoZXIgJGh0dHBQcm92aWRlci5kZWZhdWx0cyBhdCBjb25maWct
dGltZSwgJGh0dHAuZGVmYXVsdHMgYXQgcnVuLXRpbWUsCisgICAgICogb3IgdGhlIHBlci1yZXF1
ZXN0IGNvbmZpZyBvYmplY3QuCisgICAgICoKKyAgICAgKiBJbiBvcmRlciB0byBwcmV2ZW50IGNv
bGxpc2lvbnMgaW4gZW52aXJvbm1lbnRzIHdoZXJlIG11bHRpcGxlIEFuZ3VsYXIgYXBwcyBzaGFy
ZSB0aGUKKyAgICAgKiBzYW1lIGRvbWFpbiBvciBzdWJkb21haW4sIHdlIHJlY29tbWVuZCB0aGF0
IGVhY2ggYXBwbGljYXRpb24gdXNlcyB1bmlxdWUgY29va2llIG5hbWUuCisgICAgICoKKyAgICAg
KgorICAgICAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgT2JqZWN0IGRlc2NyaWJpbmcgdGhlIHJl
cXVlc3QgdG8gYmUgbWFkZSBhbmQgaG93IGl0IHNob3VsZCBiZQorICAgICAqICAgIHByb2Nlc3Nl
ZC4gVGhlIG9iamVjdCBoYXMgZm9sbG93aW5nIHByb3BlcnRpZXM6CisgICAgICoKKyAgICAgKiAg
ICAtICoqbWV0aG9kKiog4oCTIGB7c3RyaW5nfWAg4oCTIEhUVFAgbWV0aG9kIChlLmcuICdHRVQn
LCAnUE9TVCcsIGV0YykKKyAgICAgKiAgICAtICoqdXJsKiog4oCTIGB7c3RyaW5nfWAg4oCTIEFi
c29sdXRlIG9yIHJlbGF0aXZlIFVSTCBvZiB0aGUgcmVzb3VyY2UgdGhhdCBpcyBiZWluZyByZXF1
ZXN0ZWQuCisgICAgICogICAgLSAqKnBhcmFtcyoqIOKAkyBge09iamVjdC48c3RyaW5nfE9iamVj
dD59YCDigJMgTWFwIG9mIHN0cmluZ3Mgb3Igb2JqZWN0cyB3aGljaCB3aWxsIGJlIHNlcmlhbGl6
ZWQKKyAgICAgKiAgICAgIHdpdGggdGhlIGBwYXJhbVNlcmlhbGl6ZXJgIGFuZCBhcHBlbmRlZCBh
cyBHRVQgcGFyYW1ldGVycy4KKyAgICAgKiAgICAtICoqZGF0YSoqIOKAkyBge3N0cmluZ3xPYmpl
Y3R9YCDigJMgRGF0YSB0byBiZSBzZW50IGFzIHRoZSByZXF1ZXN0IG1lc3NhZ2UgZGF0YS4KKyAg
ICAgKiAgICAtICoqaGVhZGVycyoqIOKAkyBge09iamVjdH1gIOKAkyBNYXAgb2Ygc3RyaW5ncyBv
ciBmdW5jdGlvbnMgd2hpY2ggcmV0dXJuIHN0cmluZ3MgcmVwcmVzZW50aW5nCisgICAgICogICAg
ICBIVFRQIGhlYWRlcnMgdG8gc2VuZCB0byB0aGUgc2VydmVyLiBJZiB0aGUgcmV0dXJuIHZhbHVl
IG9mIGEgZnVuY3Rpb24gaXMgbnVsbCwgdGhlCisgICAgICogICAgICBoZWFkZXIgd2lsbCBub3Qg
YmUgc2VudC4gRnVuY3Rpb25zIGFjY2VwdCBhIGNvbmZpZyBvYmplY3QgYXMgYW4gYXJndW1lbnQu
CisgICAgICogICAgLSAqKnhzcmZIZWFkZXJOYW1lKiog4oCTIGB7c3RyaW5nfWAg4oCTIE5hbWUg
b2YgSFRUUCBoZWFkZXIgdG8gcG9wdWxhdGUgd2l0aCB0aGUgWFNSRiB0b2tlbi4KKyAgICAgKiAg
ICAtICoqeHNyZkNvb2tpZU5hbWUqKiDigJMgYHtzdHJpbmd9YCDigJMgTmFtZSBvZiBjb29raWUg
Y29udGFpbmluZyB0aGUgWFNSRiB0b2tlbi4KKyAgICAgKiAgICAtICoqdHJhbnNmb3JtUmVxdWVz
dCoqIOKAkworICAgICAqICAgICAgYHtmdW5jdGlvbihkYXRhLCBoZWFkZXJzR2V0dGVyKXxBcnJh
eS48ZnVuY3Rpb24oZGF0YSwgaGVhZGVyc0dldHRlcik+fWAg4oCTCisgICAgICogICAgICB0cmFu
c2Zvcm0gZnVuY3Rpb24gb3IgYW4gYXJyYXkgb2Ygc3VjaCBmdW5jdGlvbnMuIFRoZSB0cmFuc2Zv
cm0gZnVuY3Rpb24gdGFrZXMgdGhlIGh0dHAKKyAgICAgKiAgICAgIHJlcXVlc3QgYm9keSBhbmQg
aGVhZGVycyBhbmQgcmV0dXJucyBpdHMgdHJhbnNmb3JtZWQgKHR5cGljYWxseSBzZXJpYWxpemVk
KSB2ZXJzaW9uLgorICAgICAqICAgICAgU2VlIHtAbGluayBuZy4kaHR0cCNvdmVycmlkaW5nLXRo
ZS1kZWZhdWx0LXRyYW5zZm9ybWF0aW9ucy1wZXItcmVxdWVzdAorICAgICAqICAgICAgT3ZlcnJp
ZGluZyB0aGUgRGVmYXVsdCBUcmFuc2Zvcm1hdGlvbnN9CisgICAgICogICAgLSAqKnRyYW5zZm9y
bVJlc3BvbnNlKiog4oCTCisgICAgICogICAgICBge2Z1bmN0aW9uKGRhdGEsIGhlYWRlcnNHZXR0
ZXIsIHN0YXR1cyl8QXJyYXkuPGZ1bmN0aW9uKGRhdGEsIGhlYWRlcnNHZXR0ZXIsIHN0YXR1cyk+
fWAg4oCTCisgICAgICogICAgICB0cmFuc2Zvcm0gZnVuY3Rpb24gb3IgYW4gYXJyYXkgb2Ygc3Vj
aCBmdW5jdGlvbnMuIFRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24gdGFrZXMgdGhlIGh0dHAKKyAgICAg
KiAgICAgIHJlc3BvbnNlIGJvZHksIGhlYWRlcnMgYW5kIHN0YXR1cyBhbmQgcmV0dXJucyBpdHMg
dHJhbnNmb3JtZWQgKHR5cGljYWxseSBkZXNlcmlhbGl6ZWQpIHZlcnNpb24uCisgICAgICogICAg
ICBTZWUge0BsaW5rIG5nLiRodHRwI292ZXJyaWRpbmctdGhlLWRlZmF1bHQtdHJhbnNmb3JtYXRp
b25zLXBlci1yZXF1ZXN0CisgICAgICogICAgICBPdmVycmlkaW5nIHRoZSBEZWZhdWx0IFRyYW5z
Zm9ybWF0aW9uanFMaWtzfQorICAgICAqICAgIC0gKipwYXJhbVNlcmlhbGl6ZXIqKiAtIGB7c3Ry
aW5nfGZ1bmN0aW9uKE9iamVjdDxzdHJpbmcsc3RyaW5nPik6c3RyaW5nfWAgLSBBIGZ1bmN0aW9u
IHVzZWQgdG8KKyAgICAgKiAgICAgIHByZXBhcmUgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBv
ZiByZXF1ZXN0IHBhcmFtZXRlcnMgKHNwZWNpZmllZCBhcyBhbiBvYmplY3QpLgorICAgICAqICAg
ICAgSWYgc3BlY2lmaWVkIGFzIHN0cmluZywgaXQgaXMgaW50ZXJwcmV0ZWQgYXMgZnVuY3Rpb24g
cmVnaXN0ZXJlZCB3aXRoIHRoZQorICAgICAqICAgICAge0BsaW5rICRpbmplY3RvciAkaW5qZWN0
b3J9LCB3aGljaCBtZWFucyB5b3UgY2FuIGNyZWF0ZSB5b3VyIG93biBzZXJpYWxpemVyCisgICAg
ICogICAgICBieSByZWdpc3RlcmluZyBpdCBhcyBhIHtAbGluayBhdXRvLiRwcm92aWRlI3NlcnZp
Y2Ugc2VydmljZX0uCisgICAgICogICAgICBUaGUgZGVmYXVsdCBzZXJpYWxpemVyIGlzIHRoZSB7
QGxpbmsgJGh0dHBQYXJhbVNlcmlhbGl6ZXIgJGh0dHBQYXJhbVNlcmlhbGl6ZXJ9OworICAgICAq
ICAgICAgYWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgdGhlIHtAbGluayAkaHR0cFBhcmFtU2Vy
aWFsaXplckpRTGlrZSAkaHR0cFBhcmFtU2VyaWFsaXplckpRTGlrZX0KKyAgICAgKiAgICAtICoq
Y2FjaGUqKiDigJMgYHtib29sZWFufENhY2hlfWAg4oCTIElmIHRydWUsIGEgZGVmYXVsdCAkaHR0
cCBjYWNoZSB3aWxsIGJlIHVzZWQgdG8gY2FjaGUgdGhlCisgICAgICogICAgICBHRVQgcmVxdWVz
dCwgb3RoZXJ3aXNlIGlmIGEgY2FjaGUgaW5zdGFuY2UgYnVpbHQgd2l0aAorICAgICAqICAgICAg
e0BsaW5rIG5nLiRjYWNoZUZhY3RvcnkgJGNhY2hlRmFjdG9yeX0sIHRoaXMgY2FjaGUgd2lsbCBi
ZSB1c2VkIGZvcgorICAgICAqICAgICAgY2FjaGluZy4KKyAgICAgKiAgICAtICoqdGltZW91dCoq
IOKAkyBge251bWJlcnxQcm9taXNlfWAg4oCTIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLCBvciB7
QGxpbmsgbmcuJHEgcHJvbWlzZX0KKyAgICAgKiAgICAgIHRoYXQgc2hvdWxkIGFib3J0IHRoZSBy
ZXF1ZXN0IHdoZW4gcmVzb2x2ZWQuCisgICAgICogICAgLSAqKndpdGhDcmVkZW50aWFscyoqIC0g
YHtib29sZWFufWAgLSB3aGV0aGVyIHRvIHNldCB0aGUgYHdpdGhDcmVkZW50aWFsc2AgZmxhZyBv
biB0aGUKKyAgICAgKiAgICAgIFhIUiBvYmplY3QuIFNlZSBbcmVxdWVzdHMgd2l0aCBjcmVkZW50
aWFsc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRUUC9BY2Nlc3Nf
Y29udHJvbF9DT1JTI1JlcXVlc3RzX3dpdGhfY3JlZGVudGlhbHMpCisgICAgICogICAgICBmb3Ig
bW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgKiAgICAtICoqcmVzcG9uc2VUeXBlKiogLSBge3N0cmlu
Z31gIC0gc2VlCisgICAgICogICAgICBbWE1MSHR0cFJlcXVlc3QucmVzcG9uc2VUeXBlXShodHRw
czovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvWE1MSHR0cFJlcXVl
c3QjeG1saHR0cHJlcXVlc3QtcmVzcG9uc2V0eXBlKS4KKyAgICAgKgorICAgICAqIEByZXR1cm5z
IHtIdHRwUHJvbWlzZX0gUmV0dXJucyBhIHtAbGluayBuZy4kcSBwcm9taXNlfSBvYmplY3Qgd2l0
aCB0aGUKKyAgICAgKiAgIHN0YW5kYXJkIGB0aGVuYCBtZXRob2QgYW5kIHR3byBodHRwIHNwZWNp
ZmljIG1ldGhvZHM6IGBzdWNjZXNzYCBhbmQgYGVycm9yYC4gVGhlIGB0aGVuYAorICAgICAqICAg
bWV0aG9kIHRha2VzIHR3byBhcmd1bWVudHMgYSBzdWNjZXNzIGFuZCBhbiBlcnJvciBjYWxsYmFj
ayB3aGljaCB3aWxsIGJlIGNhbGxlZCB3aXRoIGEKKyAgICAgKiAgIHJlc3BvbnNlIG9iamVjdC4g
VGhlIGBzdWNjZXNzYCBhbmQgYGVycm9yYCBtZXRob2RzIHRha2UgYSBzaW5nbGUgYXJndW1lbnQg
LSBhIGZ1bmN0aW9uIHRoYXQKKyAgICAgKiAgIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHJlcXVl
c3Qgc3VjY2VlZHMgb3IgZmFpbHMgcmVzcGVjdGl2ZWx5LiBUaGUgYXJndW1lbnRzIHBhc3NlZCBp
bnRvCisgICAgICogICB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlc3RydWN0dXJlZCByZXByZXNlbnRh
dGlvbiBvZiB0aGUgcmVzcG9uc2Ugb2JqZWN0IHBhc3NlZCBpbnRvIHRoZQorICAgICAqICAgYHRo
ZW5gIG1ldGhvZC4gVGhlIHJlc3BvbnNlIG9iamVjdCBoYXMgdGhlc2UgcHJvcGVydGllczoKKyAg
ICAgKgorICAgICAqICAgLSAqKmRhdGEqKiDigJMgYHtzdHJpbmd8T2JqZWN0fWAg4oCTIFRoZSBy
ZXNwb25zZSBib2R5IHRyYW5zZm9ybWVkIHdpdGggdGhlIHRyYW5zZm9ybQorICAgICAqICAgICBm
dW5jdGlvbnMuCisgICAgICogICAtICoqc3RhdHVzKiog4oCTIGB7bnVtYmVyfWAg4oCTIEhUVFAg
c3RhdHVzIGNvZGUgb2YgdGhlIHJlc3BvbnNlLgorICAgICAqICAgLSAqKmhlYWRlcnMqKiDigJMg
YHtmdW5jdGlvbihbaGVhZGVyTmFtZV0pfWAg4oCTIEhlYWRlciBnZXR0ZXIgZnVuY3Rpb24uCisg
ICAgICogICAtICoqY29uZmlnKiog4oCTIGB7T2JqZWN0fWAg4oCTIFRoZSBjb25maWd1cmF0aW9u
IG9iamVjdCB0aGF0IHdhcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSByZXF1ZXN0LgorICAgICAqICAg
LSAqKnN0YXR1c1RleHQqKiDigJMgYHtzdHJpbmd9YCDigJMgSFRUUCBzdGF0dXMgdGV4dCBvZiB0
aGUgcmVzcG9uc2UuCisgICAgICoKKyAgICAgKiBAcHJvcGVydHkge0FycmF5LjxPYmplY3Q+fSBw
ZW5kaW5nUmVxdWVzdHMgQXJyYXkgb2YgY29uZmlnIG9iamVjdHMgZm9yIGN1cnJlbnRseSBwZW5k
aW5nCisgICAgICogICByZXF1ZXN0cy4gVGhpcyBpcyBwcmltYXJpbHkgbWVhbnQgdG8gYmUgdXNl
ZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorICAgICAqCisgICAgICoKKyAgICAgKiBAZXhhbXBs
ZQorPGV4YW1wbGUgbW9kdWxlPSJodHRwRXhhbXBsZSI+Cis8ZmlsZSBuYW1lPSJpbmRleC5odG1s
Ij4KKyAgPGRpdiBuZy1jb250cm9sbGVyPSJGZXRjaENvbnRyb2xsZXIiPgorICAgIDxzZWxlY3Qg
bmctbW9kZWw9Im1ldGhvZCIgYXJpYS1sYWJlbD0iUmVxdWVzdCBtZXRob2QiPgorICAgICAgPG9w
dGlvbj5HRVQ8L29wdGlvbj4KKyAgICAgIDxvcHRpb24+SlNPTlA8L29wdGlvbj4KKyAgICA8L3Nl
bGVjdD4KKyAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmctbW9kZWw9InVybCIgc2l6ZT0iODAiIGFy
aWEtbGFiZWw9IlVSTCIgLz4KKyAgICA8YnV0dG9uIGlkPSJmZXRjaGJ0biIgbmctY2xpY2s9ImZl
dGNoKCkiPmZldGNoPC9idXR0b24+PGJyPgorICAgIDxidXR0b24gaWQ9InNhbXBsZWdldGJ0biIg
bmctY2xpY2s9InVwZGF0ZU1vZGVsKCdHRVQnLCAnaHR0cC1oZWxsby5odG1sJykiPlNhbXBsZSBH
RVQ8L2J1dHRvbj4KKyAgICA8YnV0dG9uIGlkPSJzYW1wbGVqc29ucGJ0biIKKyAgICAgIG5nLWNs
aWNrPSJ1cGRhdGVNb2RlbCgnSlNPTlAnLAorICAgICAgICAgICAgICAgICAgICAnaHR0cHM6Ly9h
bmd1bGFyanMub3JnL2dyZWV0LnBocD9jYWxsYmFjaz1KU09OX0NBTExCQUNLJm5hbWU9U3VwZXIl
MjBIZXJvJykiPgorICAgICAgU2FtcGxlIEpTT05QCisgICAgPC9idXR0b24+CisgICAgPGJ1dHRv
biBpZD0iaW52YWxpZGpzb25wYnRuIgorICAgICAgbmctY2xpY2s9InVwZGF0ZU1vZGVsKCdKU09O
UCcsICdodHRwczovL2FuZ3VsYXJqcy5vcmcvZG9lc250ZXhpc3QmY2FsbGJhY2s9SlNPTl9DQUxM
QkFDSycpIj4KKyAgICAgICAgSW52YWxpZCBKU09OUAorICAgICAgPC9idXR0b24+CisgICAgPHBy
ZT5odHRwIHN0YXR1cyBjb2RlOiB7e3N0YXR1c319PC9wcmU+CisgICAgPHByZT5odHRwIHJlc3Bv
bnNlIGRhdGE6IHt7ZGF0YX19PC9wcmU+CisgIDwvZGl2PgorPC9maWxlPgorPGZpbGUgbmFtZT0i
c2NyaXB0LmpzIj4KKyAgYW5ndWxhci5tb2R1bGUoJ2h0dHBFeGFtcGxlJywgW10pCisgICAgLmNv
bnRyb2xsZXIoJ0ZldGNoQ29udHJvbGxlcicsIFsnJHNjb3BlJywgJyRodHRwJywgJyR0ZW1wbGF0
ZUNhY2hlJywKKyAgICAgIGZ1bmN0aW9uKCRzY29wZSwgJGh0dHAsICR0ZW1wbGF0ZUNhY2hlKSB7
CisgICAgICAgICRzY29wZS5tZXRob2QgPSAnR0VUJzsKKyAgICAgICAgJHNjb3BlLnVybCA9ICdo
dHRwLWhlbGxvLmh0bWwnOworCisgICAgICAgICRzY29wZS5mZXRjaCA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICRzY29wZS5jb2RlID0gbnVsbDsKKyAgICAgICAgICAkc2NvcGUucmVzcG9uc2Ug
PSBudWxsOworCisgICAgICAgICAgJGh0dHAoe21ldGhvZDogJHNjb3BlLm1ldGhvZCwgdXJsOiAk
c2NvcGUudXJsLCBjYWNoZTogJHRlbXBsYXRlQ2FjaGV9KS4KKyAgICAgICAgICAgIHN1Y2Nlc3Mo
ZnVuY3Rpb24oZGF0YSwgc3RhdHVzKSB7CisgICAgICAgICAgICAgICRzY29wZS5zdGF0dXMgPSBz
dGF0dXM7CisgICAgICAgICAgICAgICRzY29wZS5kYXRhID0gZGF0YTsKKyAgICAgICAgICAgIH0p
LgorICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24oZGF0YSwgc3RhdHVzKSB7CisgICAgICAgICAg
ICAgICRzY29wZS5kYXRhID0gZGF0YSB8fCAiUmVxdWVzdCBmYWlsZWQiOworICAgICAgICAgICAg
ICAkc2NvcGUuc3RhdHVzID0gc3RhdHVzOworICAgICAgICAgIH0pOworICAgICAgICB9OworCisg
ICAgICAgICRzY29wZS51cGRhdGVNb2RlbCA9IGZ1bmN0aW9uKG1ldGhvZCwgdXJsKSB7CisgICAg
ICAgICAgJHNjb3BlLm1ldGhvZCA9IG1ldGhvZDsKKyAgICAgICAgICAkc2NvcGUudXJsID0gdXJs
OworICAgICAgICB9OworICAgICAgfV0pOworPC9maWxlPgorPGZpbGUgbmFtZT0iaHR0cC1oZWxs
by5odG1sIj4KKyAgSGVsbG8sICRodHRwIQorPC9maWxlPgorPGZpbGUgbmFtZT0icHJvdHJhY3Rv
ci5qcyIgdHlwZT0icHJvdHJhY3RvciI+CisgIHZhciBzdGF0dXMgPSBlbGVtZW50KGJ5LmJpbmRp
bmcoJ3N0YXR1cycpKTsKKyAgdmFyIGRhdGEgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ2RhdGEnKSk7
CisgIHZhciBmZXRjaEJ0biA9IGVsZW1lbnQoYnkuaWQoJ2ZldGNoYnRuJykpOworICB2YXIgc2Ft
cGxlR2V0QnRuID0gZWxlbWVudChieS5pZCgnc2FtcGxlZ2V0YnRuJykpOworICB2YXIgc2FtcGxl
SnNvbnBCdG4gPSBlbGVtZW50KGJ5LmlkKCdzYW1wbGVqc29ucGJ0bicpKTsKKyAgdmFyIGludmFs
aWRKc29ucEJ0biA9IGVsZW1lbnQoYnkuaWQoJ2ludmFsaWRqc29ucGJ0bicpKTsKKworICBpdCgn
c2hvdWxkIG1ha2UgYW4geGhyIEdFVCByZXF1ZXN0JywgZnVuY3Rpb24oKSB7CisgICAgc2FtcGxl
R2V0QnRuLmNsaWNrKCk7CisgICAgZmV0Y2hCdG4uY2xpY2soKTsKKyAgICBleHBlY3Qoc3RhdHVz
LmdldFRleHQoKSkudG9NYXRjaCgnMjAwJyk7CisgICAgZXhwZWN0KGRhdGEuZ2V0VGV4dCgpKS50
b01hdGNoKC9IZWxsbywgXCRodHRwIS8pOworICB9KTsKKworLy8gQ29tbWVudGVkIG91dCBkdWUg
dG8gZmxha2VzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci5qcy9pc3N1
ZXMvOTE4NQorLy8gaXQoJ3Nob3VsZCBtYWtlIGEgSlNPTlAgcmVxdWVzdCB0byBhbmd1bGFyanMu
b3JnJywgZnVuY3Rpb24oKSB7CisvLyAgIHNhbXBsZUpzb25wQnRuLmNsaWNrKCk7CisvLyAgIGZl
dGNoQnRuLmNsaWNrKCk7CisvLyAgIGV4cGVjdChzdGF0dXMuZ2V0VGV4dCgpKS50b01hdGNoKCcy
MDAnKTsKKy8vICAgZXhwZWN0KGRhdGEuZ2V0VGV4dCgpKS50b01hdGNoKC9TdXBlciBIZXJvIS8p
OworLy8gfSk7CisKKyAgaXQoJ3Nob3VsZCBtYWtlIEpTT05QIHJlcXVlc3QgdG8gaW52YWxpZCBV
UkwgYW5kIGludm9rZSB0aGUgZXJyb3IgaGFuZGxlcicsCisgICAgICBmdW5jdGlvbigpIHsKKyAg
ICBpbnZhbGlkSnNvbnBCdG4uY2xpY2soKTsKKyAgICBmZXRjaEJ0bi5jbGljaygpOworICAgIGV4
cGVjdChzdGF0dXMuZ2V0VGV4dCgpKS50b01hdGNoKCcwJyk7CisgICAgZXhwZWN0KGRhdGEuZ2V0
VGV4dCgpKS50b01hdGNoKCdSZXF1ZXN0IGZhaWxlZCcpOworICB9KTsKKzwvZmlsZT4KKzwvZXhh
bXBsZT4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiAkaHR0cChyZXF1ZXN0Q29uZmlnKSB7CisKKyAg
ICAgIGlmICghYW5ndWxhci5pc09iamVjdChyZXF1ZXN0Q29uZmlnKSkgeworICAgICAgICB0aHJv
dyBtaW5FcnIoJyRodHRwJykoJ2JhZHJlcScsICdIdHRwIHJlcXVlc3QgY29uZmlndXJhdGlvbiBt
dXN0IGJlIGFuIG9iamVjdC4gIFJlY2VpdmVkOiB7MH0nLCByZXF1ZXN0Q29uZmlnKTsKKyAgICAg
IH0KKworICAgICAgdmFyIGNvbmZpZyA9IGV4dGVuZCh7CisgICAgICAgIG1ldGhvZDogJ2dldCcs
CisgICAgICAgIHRyYW5zZm9ybVJlcXVlc3Q6IGRlZmF1bHRzLnRyYW5zZm9ybVJlcXVlc3QsCisg
ICAgICAgIHRyYW5zZm9ybVJlc3BvbnNlOiBkZWZhdWx0cy50cmFuc2Zvcm1SZXNwb25zZSwKKyAg
ICAgICAgcGFyYW1TZXJpYWxpemVyOiBkZWZhdWx0cy5wYXJhbVNlcmlhbGl6ZXIKKyAgICAgIH0s
IHJlcXVlc3RDb25maWcpOworCisgICAgICBjb25maWcuaGVhZGVycyA9IG1lcmdlSGVhZGVycyhy
ZXF1ZXN0Q29uZmlnKTsKKyAgICAgIGNvbmZpZy5tZXRob2QgPSB1cHBlcmNhc2UoY29uZmlnLm1l
dGhvZCk7CisgICAgICBjb25maWcucGFyYW1TZXJpYWxpemVyID0gaXNTdHJpbmcoY29uZmlnLnBh
cmFtU2VyaWFsaXplcikgPworICAgICAgICAkaW5qZWN0b3IuZ2V0KGNvbmZpZy5wYXJhbVNlcmlh
bGl6ZXIpIDogY29uZmlnLnBhcmFtU2VyaWFsaXplcjsKKworICAgICAgdmFyIHNlcnZlclJlcXVl
c3QgPSBmdW5jdGlvbihjb25maWcpIHsKKyAgICAgICAgdmFyIGhlYWRlcnMgPSBjb25maWcuaGVh
ZGVyczsKKyAgICAgICAgdmFyIHJlcURhdGEgPSB0cmFuc2Zvcm1EYXRhKGNvbmZpZy5kYXRhLCBo
ZWFkZXJzR2V0dGVyKGhlYWRlcnMpLCB1bmRlZmluZWQsIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0
KTsKKworICAgICAgICAvLyBzdHJpcCBjb250ZW50LXR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWQK
KyAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHJlcURhdGEpKSB7CisgICAgICAgICAgZm9yRWFjaCho
ZWFkZXJzLCBmdW5jdGlvbih2YWx1ZSwgaGVhZGVyKSB7CisgICAgICAgICAgICBpZiAobG93ZXJj
YXNlKGhlYWRlcikgPT09ICdjb250ZW50LXR5cGUnKSB7CisgICAgICAgICAgICAgICAgZGVsZXRl
IGhlYWRlcnNbaGVhZGVyXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9KTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChpc1VuZGVmaW5lZChjb25maWcud2l0aENyZWRlbnRpYWxzKSAmJiAh
aXNVbmRlZmluZWQoZGVmYXVsdHMud2l0aENyZWRlbnRpYWxzKSkgeworICAgICAgICAgIGNvbmZp
Zy53aXRoQ3JlZGVudGlhbHMgPSBkZWZhdWx0cy53aXRoQ3JlZGVudGlhbHM7CisgICAgICAgIH0K
KworICAgICAgICAvLyBzZW5kIHJlcXVlc3QKKyAgICAgICAgcmV0dXJuIHNlbmRSZXEoY29uZmln
LCByZXFEYXRhKS50aGVuKHRyYW5zZm9ybVJlc3BvbnNlLCB0cmFuc2Zvcm1SZXNwb25zZSk7Cisg
ICAgICB9OworCisgICAgICB2YXIgY2hhaW4gPSBbc2VydmVyUmVxdWVzdCwgdW5kZWZpbmVkXTsK
KyAgICAgIHZhciBwcm9taXNlID0gJHEud2hlbihjb25maWcpOworCisgICAgICAvLyBhcHBseSBp
bnRlcmNlcHRvcnMKKyAgICAgIGZvckVhY2gocmV2ZXJzZWRJbnRlcmNlcHRvcnMsIGZ1bmN0aW9u
KGludGVyY2VwdG9yKSB7CisgICAgICAgIGlmIChpbnRlcmNlcHRvci5yZXF1ZXN0IHx8IGludGVy
Y2VwdG9yLnJlcXVlc3RFcnJvcikgeworICAgICAgICAgIGNoYWluLnVuc2hpZnQoaW50ZXJjZXB0
b3IucmVxdWVzdCwgaW50ZXJjZXB0b3IucmVxdWVzdEVycm9yKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoaW50ZXJjZXB0b3IucmVzcG9uc2UgfHwgaW50ZXJjZXB0b3IucmVzcG9uc2VFcnJvcikg
eworICAgICAgICAgIGNoYWluLnB1c2goaW50ZXJjZXB0b3IucmVzcG9uc2UsIGludGVyY2VwdG9y
LnJlc3BvbnNlRXJyb3IpOworICAgICAgICB9CisgICAgICB9KTsKKworICAgICAgd2hpbGUgKGNo
YWluLmxlbmd0aCkgeworICAgICAgICB2YXIgdGhlbkZuID0gY2hhaW4uc2hpZnQoKTsKKyAgICAg
ICAgdmFyIHJlamVjdEZuID0gY2hhaW4uc2hpZnQoKTsKKworICAgICAgICBwcm9taXNlID0gcHJv
bWlzZS50aGVuKHRoZW5GbiwgcmVqZWN0Rm4pOworICAgICAgfQorCisgICAgICBwcm9taXNlLnN1
Y2Nlc3MgPSBmdW5jdGlvbihmbikgeworICAgICAgICBhc3NlcnRBcmdGbihmbiwgJ2ZuJyk7CisK
KyAgICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgICAgZm4o
cmVzcG9uc2UuZGF0YSwgcmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5oZWFkZXJzLCBjb25maWcp
OworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHByb21pc2U7CisgICAgICB9OworCisgICAg
ICBwcm9taXNlLmVycm9yID0gZnVuY3Rpb24oZm4pIHsKKyAgICAgICAgYXNzZXJ0QXJnRm4oZm4s
ICdmbicpOworCisgICAgICAgIHByb21pc2UudGhlbihudWxsLCBmdW5jdGlvbihyZXNwb25zZSkg
eworICAgICAgICAgIGZuKHJlc3BvbnNlLmRhdGEsIHJlc3BvbnNlLnN0YXR1cywgcmVzcG9uc2Uu
aGVhZGVycywgY29uZmlnKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBwcm9taXNlOwor
ICAgICAgfTsKKworICAgICAgcmV0dXJuIHByb21pc2U7CisKKyAgICAgIGZ1bmN0aW9uIHRyYW5z
Zm9ybVJlc3BvbnNlKHJlc3BvbnNlKSB7CisgICAgICAgIC8vIG1ha2UgYSBjb3B5IHNpbmNlIHRo
ZSByZXNwb25zZSBtdXN0IGJlIGNhY2hlYWJsZQorICAgICAgICB2YXIgcmVzcCA9IGV4dGVuZCh7
fSwgcmVzcG9uc2UpOworICAgICAgICBpZiAoIXJlc3BvbnNlLmRhdGEpIHsKKyAgICAgICAgICBy
ZXNwLmRhdGEgPSByZXNwb25zZS5kYXRhOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJl
c3AuZGF0YSA9IHRyYW5zZm9ybURhdGEocmVzcG9uc2UuZGF0YSwgcmVzcG9uc2UuaGVhZGVycywg
cmVzcG9uc2Uuc3RhdHVzLCBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiAoaXNTdWNjZXNzKHJlc3BvbnNlLnN0YXR1cykpCisgICAgICAgICAgPyBy
ZXNwCisgICAgICAgICAgOiAkcS5yZWplY3QocmVzcCk7CisgICAgICB9CisKKyAgICAgIGZ1bmN0
aW9uIGV4ZWN1dGVIZWFkZXJGbnMoaGVhZGVycywgY29uZmlnKSB7CisgICAgICAgIHZhciBoZWFk
ZXJDb250ZW50LCBwcm9jZXNzZWRIZWFkZXJzID0ge307CisKKyAgICAgICAgZm9yRWFjaChoZWFk
ZXJzLCBmdW5jdGlvbihoZWFkZXJGbiwgaGVhZGVyKSB7CisgICAgICAgICAgaWYgKGlzRnVuY3Rp
b24oaGVhZGVyRm4pKSB7CisgICAgICAgICAgICBoZWFkZXJDb250ZW50ID0gaGVhZGVyRm4oY29u
ZmlnKTsKKyAgICAgICAgICAgIGlmIChoZWFkZXJDb250ZW50ICE9IG51bGwpIHsKKyAgICAgICAg
ICAgICAgcHJvY2Vzc2VkSGVhZGVyc1toZWFkZXJdID0gaGVhZGVyQ29udGVudDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJvY2Vzc2VkSGVhZGVyc1to
ZWFkZXJdID0gaGVhZGVyRm47CisgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBy
ZXR1cm4gcHJvY2Vzc2VkSGVhZGVyczsKKyAgICAgIH0KKworICAgICAgZnVuY3Rpb24gbWVyZ2VI
ZWFkZXJzKGNvbmZpZykgeworICAgICAgICB2YXIgZGVmSGVhZGVycyA9IGRlZmF1bHRzLmhlYWRl
cnMsCisgICAgICAgICAgICByZXFIZWFkZXJzID0gZXh0ZW5kKHt9LCBjb25maWcuaGVhZGVycyks
CisgICAgICAgICAgICBkZWZIZWFkZXJOYW1lLCBsb3dlcmNhc2VEZWZIZWFkZXJOYW1lLCByZXFI
ZWFkZXJOYW1lOworCisgICAgICAgIGRlZkhlYWRlcnMgPSBleHRlbmQoe30sIGRlZkhlYWRlcnMu
Y29tbW9uLCBkZWZIZWFkZXJzW2xvd2VyY2FzZShjb25maWcubWV0aG9kKV0pOworCisgICAgICAg
IC8vIHVzaW5nIGZvci1pbiBpbnN0ZWFkIG9mIGZvckVhY2ggdG8gYXZvaWQgdW5lY2Vzc2FyeSBp
dGVyYXRpb24gYWZ0ZXIgaGVhZGVyIGhhcyBiZWVuIGZvdW5kCisgICAgICAgIGRlZmF1bHRIZWFk
ZXJzSXRlcmF0aW9uOgorICAgICAgICBmb3IgKGRlZkhlYWRlck5hbWUgaW4gZGVmSGVhZGVycykg
eworICAgICAgICAgIGxvd2VyY2FzZURlZkhlYWRlck5hbWUgPSBsb3dlcmNhc2UoZGVmSGVhZGVy
TmFtZSk7CisKKyAgICAgICAgICBmb3IgKHJlcUhlYWRlck5hbWUgaW4gcmVxSGVhZGVycykgewor
ICAgICAgICAgICAgaWYgKGxvd2VyY2FzZShyZXFIZWFkZXJOYW1lKSA9PT0gbG93ZXJjYXNlRGVm
SGVhZGVyTmFtZSkgeworICAgICAgICAgICAgICBjb250aW51ZSBkZWZhdWx0SGVhZGVyc0l0ZXJh
dGlvbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICByZXFIZWFkZXJz
W2RlZkhlYWRlck5hbWVdID0gZGVmSGVhZGVyc1tkZWZIZWFkZXJOYW1lXTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIGV4ZWN1dGUgaWYgaGVhZGVyIHZhbHVlIGlzIGEgZnVuY3Rpb24gZm9yIG1l
cmdlZCBoZWFkZXJzCisgICAgICAgIHJldHVybiBleGVjdXRlSGVhZGVyRm5zKHJlcUhlYWRlcnMs
IHNoYWxsb3dDb3B5KGNvbmZpZykpOworICAgICAgfQorICAgIH0KKworICAgICRodHRwLnBlbmRp
bmdSZXF1ZXN0cyA9IFtdOworCisgICAgLyoqCisgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAq
IEBuYW1lICRodHRwI2dldAorICAgICAqCisgICAgICogQGRlc2NyaXB0aW9uCisgICAgICogU2hv
cnRjdXQgbWV0aG9kIHRvIHBlcmZvcm0gYEdFVGAgcmVxdWVzdC4KKyAgICAgKgorICAgICAqIEBw
YXJhbSB7c3RyaW5nfSB1cmwgUmVsYXRpdmUgb3IgYWJzb2x1dGUgVVJMIHNwZWNpZnlpbmcgdGhl
IGRlc3RpbmF0aW9uIG9mIHRoZSByZXF1ZXN0CisgICAgICogQHBhcmFtIHtPYmplY3Q9fSBjb25m
aWcgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvYmplY3QKKyAgICAgKiBAcmV0dXJucyB7SHR0cFBy
b21pc2V9IEZ1dHVyZSBvYmplY3QKKyAgICAgKi8KKworICAgIC8qKgorICAgICAqIEBuZ2RvYyBt
ZXRob2QKKyAgICAgKiBAbmFtZSAkaHR0cCNkZWxldGUKKyAgICAgKgorICAgICAqIEBkZXNjcmlw
dGlvbgorICAgICAqIFNob3J0Y3V0IG1ldGhvZCB0byBwZXJmb3JtIGBERUxFVEVgIHJlcXVlc3Qu
CisgICAgICoKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFJlbGF0aXZlIG9yIGFic29sdXRl
IFVSTCBzcGVjaWZ5aW5nIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgcmVxdWVzdAorICAgICAqIEBw
YXJhbSB7T2JqZWN0PX0gY29uZmlnIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb2JqZWN0CisgICAg
ICogQHJldHVybnMge0h0dHBQcm9taXNlfSBGdXR1cmUgb2JqZWN0CisgICAgICovCisKKyAgICAv
KioKKyAgICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICogQG5hbWUgJGh0dHAjaGVhZAorICAgICAq
CisgICAgICogQGRlc2NyaXB0aW9uCisgICAgICogU2hvcnRjdXQgbWV0aG9kIHRvIHBlcmZvcm0g
YEhFQURgIHJlcXVlc3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFJlbGF0
aXZlIG9yIGFic29sdXRlIFVSTCBzcGVjaWZ5aW5nIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgcmVx
dWVzdAorICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIE9wdGlvbmFsIGNvbmZpZ3VyYXRp
b24gb2JqZWN0CisgICAgICogQHJldHVybnMge0h0dHBQcm9taXNlfSBGdXR1cmUgb2JqZWN0Cisg
ICAgICovCisKKyAgICAvKioKKyAgICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICogQG5hbWUgJGh0
dHAjanNvbnAKKyAgICAgKgorICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAqIFNob3J0Y3V0IG1l
dGhvZCB0byBwZXJmb3JtIGBKU09OUGAgcmVxdWVzdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSB7
c3RyaW5nfSB1cmwgUmVsYXRpdmUgb3IgYWJzb2x1dGUgVVJMIHNwZWNpZnlpbmcgdGhlIGRlc3Rp
bmF0aW9uIG9mIHRoZSByZXF1ZXN0LgorICAgICAqICAgICAgICAgICAgICAgICAgICAgVGhlIG5h
bWUgb2YgdGhlIGNhbGxiYWNrIHNob3VsZCBiZSB0aGUgc3RyaW5nIGBKU09OX0NBTExCQUNLYC4K
KyAgICAgKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9i
amVjdAorICAgICAqIEByZXR1cm5zIHtIdHRwUHJvbWlzZX0gRnV0dXJlIG9iamVjdAorICAgICAq
LworICAgIGNyZWF0ZVNob3J0TWV0aG9kcygnZ2V0JywgJ2RlbGV0ZScsICdoZWFkJywgJ2pzb25w
Jyk7CisKKyAgICAvKioKKyAgICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICogQG5hbWUgJGh0dHAj
cG9zdAorICAgICAqCisgICAgICogQGRlc2NyaXB0aW9uCisgICAgICogU2hvcnRjdXQgbWV0aG9k
IHRvIHBlcmZvcm0gYFBPU1RgIHJlcXVlc3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge3N0cmlu
Z30gdXJsIFJlbGF0aXZlIG9yIGFic29sdXRlIFVSTCBzcGVjaWZ5aW5nIHRoZSBkZXN0aW5hdGlv
biBvZiB0aGUgcmVxdWVzdAorICAgICAqIEBwYXJhbSB7Kn0gZGF0YSBSZXF1ZXN0IGNvbnRlbnQK
KyAgICAgKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9i
amVjdAorICAgICAqIEByZXR1cm5zIHtIdHRwUHJvbWlzZX0gRnV0dXJlIG9iamVjdAorICAgICAq
LworCisgICAgLyoqCisgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAqIEBuYW1lICRodHRwI3B1
dAorICAgICAqCisgICAgICogQGRlc2NyaXB0aW9uCisgICAgICogU2hvcnRjdXQgbWV0aG9kIHRv
IHBlcmZvcm0gYFBVVGAgcmVxdWVzdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1
cmwgUmVsYXRpdmUgb3IgYWJzb2x1dGUgVVJMIHNwZWNpZnlpbmcgdGhlIGRlc3RpbmF0aW9uIG9m
IHRoZSByZXF1ZXN0CisgICAgICogQHBhcmFtIHsqfSBkYXRhIFJlcXVlc3QgY29udGVudAorICAg
ICAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb2JqZWN0
CisgICAgICogQHJldHVybnMge0h0dHBQcm9taXNlfSBGdXR1cmUgb2JqZWN0CisgICAgICovCisK
KyAgICAgLyoqCisgICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgICogQG5hbWUgJGh0dHAjcGF0
Y2gKKyAgICAgICoKKyAgICAgICogQGRlc2NyaXB0aW9uCisgICAgICAqIFNob3J0Y3V0IG1ldGhv
ZCB0byBwZXJmb3JtIGBQQVRDSGAgcmVxdWVzdC4KKyAgICAgICoKKyAgICAgICogQHBhcmFtIHtz
dHJpbmd9IHVybCBSZWxhdGl2ZSBvciBhYnNvbHV0ZSBVUkwgc3BlY2lmeWluZyB0aGUgZGVzdGlu
YXRpb24gb2YgdGhlIHJlcXVlc3QKKyAgICAgICogQHBhcmFtIHsqfSBkYXRhIFJlcXVlc3QgY29u
dGVudAorICAgICAgKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyBPcHRpb25hbCBjb25maWd1cmF0
aW9uIG9iamVjdAorICAgICAgKiBAcmV0dXJucyB7SHR0cFByb21pc2V9IEZ1dHVyZSBvYmplY3QK
KyAgICAgICovCisgICAgY3JlYXRlU2hvcnRNZXRob2RzV2l0aERhdGEoJ3Bvc3QnLCAncHV0Jywg
J3BhdGNoJyk7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBuZ2RvYyBwcm9wZXJ0eQorICAg
ICAgICAgKiBAbmFtZSAkaHR0cCNkZWZhdWx0cworICAgICAgICAgKgorICAgICAgICAgKiBAZGVz
Y3JpcHRpb24KKyAgICAgICAgICogUnVudGltZSBlcXVpdmFsZW50IG9mIHRoZSBgJGh0dHBQcm92
aWRlci5kZWZhdWx0c2AgcHJvcGVydHkuIEFsbG93cyBjb25maWd1cmF0aW9uIG9mCisgICAgICAg
ICAqIGRlZmF1bHQgaGVhZGVycywgd2l0aENyZWRlbnRpYWxzIGFzIHdlbGwgYXMgcmVxdWVzdCBh
bmQgcmVzcG9uc2UgdHJhbnNmb3JtYXRpb25zLgorICAgICAgICAgKgorICAgICAgICAgKiBTZWUg
IlNldHRpbmcgSFRUUCBIZWFkZXJzIiBhbmQgIlRyYW5zZm9ybWluZyBSZXF1ZXN0cyBhbmQgUmVz
cG9uc2VzIiBzZWN0aW9ucyBhYm92ZS4KKyAgICAgICAgICovCisgICAgJGh0dHAuZGVmYXVsdHMg
PSBkZWZhdWx0czsKKworCisgICAgcmV0dXJuICRodHRwOworCisKKyAgICBmdW5jdGlvbiBjcmVh
dGVTaG9ydE1ldGhvZHMobmFtZXMpIHsKKyAgICAgIGZvckVhY2goYXJndW1lbnRzLCBmdW5jdGlv
bihuYW1lKSB7CisgICAgICAgICRodHRwW25hbWVdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHsK
KyAgICAgICAgICByZXR1cm4gJGh0dHAoZXh0ZW5kKHt9LCBjb25maWcgfHwge30sIHsKKyAgICAg
ICAgICAgIG1ldGhvZDogbmFtZSwKKyAgICAgICAgICAgIHVybDogdXJsCisgICAgICAgICAgfSkp
OworICAgICAgICB9OworICAgICAgfSk7CisgICAgfQorCisKKyAgICBmdW5jdGlvbiBjcmVhdGVT
aG9ydE1ldGhvZHNXaXRoRGF0YShuYW1lKSB7CisgICAgICBmb3JFYWNoKGFyZ3VtZW50cywgZnVu
Y3Rpb24obmFtZSkgeworICAgICAgICAkaHR0cFtuYW1lXSA9IGZ1bmN0aW9uKHVybCwgZGF0YSwg
Y29uZmlnKSB7CisgICAgICAgICAgcmV0dXJuICRodHRwKGV4dGVuZCh7fSwgY29uZmlnIHx8IHt9
LCB7CisgICAgICAgICAgICBtZXRob2Q6IG5hbWUsCisgICAgICAgICAgICB1cmw6IHVybCwKKyAg
ICAgICAgICAgIGRhdGE6IGRhdGEKKyAgICAgICAgICB9KSk7CisgICAgICAgIH07CisgICAgICB9
KTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIE1ha2VzIHRoZSByZXF1ZXN0LgorICAgICAq
CisgICAgICogISEhIEFDQ0VTU0VTIENMT1NVUkUgVkFSUzoKKyAgICAgKiAkaHR0cEJhY2tlbmQs
IGRlZmF1bHRzLCAkbG9nLCAkcm9vdFNjb3BlLCBkZWZhdWx0Q2FjaGUsICRodHRwLnBlbmRpbmdS
ZXF1ZXN0cworICAgICAqLworICAgIGZ1bmN0aW9uIHNlbmRSZXEoY29uZmlnLCByZXFEYXRhKSB7
CisgICAgICB2YXIgZGVmZXJyZWQgPSAkcS5kZWZlcigpLAorICAgICAgICAgIHByb21pc2UgPSBk
ZWZlcnJlZC5wcm9taXNlLAorICAgICAgICAgIGNhY2hlLAorICAgICAgICAgIGNhY2hlZFJlc3As
CisgICAgICAgICAgcmVxSGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzLAorICAgICAgICAgIHVybCA9
IGJ1aWxkVXJsKGNvbmZpZy51cmwsIGNvbmZpZy5wYXJhbVNlcmlhbGl6ZXIoY29uZmlnLnBhcmFt
cykpOworCisgICAgICAkaHR0cC5wZW5kaW5nUmVxdWVzdHMucHVzaChjb25maWcpOworICAgICAg
cHJvbWlzZS50aGVuKHJlbW92ZVBlbmRpbmdSZXEsIHJlbW92ZVBlbmRpbmdSZXEpOworCisKKyAg
ICAgIGlmICgoY29uZmlnLmNhY2hlIHx8IGRlZmF1bHRzLmNhY2hlKSAmJiBjb25maWcuY2FjaGUg
IT09IGZhbHNlICYmCisgICAgICAgICAgKGNvbmZpZy5tZXRob2QgPT09ICdHRVQnIHx8IGNvbmZp
Zy5tZXRob2QgPT09ICdKU09OUCcpKSB7CisgICAgICAgIGNhY2hlID0gaXNPYmplY3QoY29uZmln
LmNhY2hlKSA/IGNvbmZpZy5jYWNoZQorICAgICAgICAgICAgICA6IGlzT2JqZWN0KGRlZmF1bHRz
LmNhY2hlKSA/IGRlZmF1bHRzLmNhY2hlCisgICAgICAgICAgICAgIDogZGVmYXVsdENhY2hlOwor
ICAgICAgfQorCisgICAgICBpZiAoY2FjaGUpIHsKKyAgICAgICAgY2FjaGVkUmVzcCA9IGNhY2hl
LmdldCh1cmwpOworICAgICAgICBpZiAoaXNEZWZpbmVkKGNhY2hlZFJlc3ApKSB7CisgICAgICAg
ICAgaWYgKGlzUHJvbWlzZUxpa2UoY2FjaGVkUmVzcCkpIHsKKyAgICAgICAgICAgIC8vIGNhY2hl
ZCByZXF1ZXN0IGhhcyBhbHJlYWR5IGJlZW4gc2VudCwgYnV0IHRoZXJlIGlzIG5vIHJlc3BvbnNl
IHlldAorICAgICAgICAgICAgY2FjaGVkUmVzcC50aGVuKHJlc29sdmVQcm9taXNlV2l0aFJlc3Vs
dCwgcmVzb2x2ZVByb21pc2VXaXRoUmVzdWx0KTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgLy8gc2VydmluZyBmcm9tIGNhY2hlCisgICAgICAgICAgICBpZiAoaXNBcnJheShjYWNo
ZWRSZXNwKSkgeworICAgICAgICAgICAgICByZXNvbHZlUHJvbWlzZShjYWNoZWRSZXNwWzFdLCBj
YWNoZWRSZXNwWzBdLCBzaGFsbG93Q29weShjYWNoZWRSZXNwWzJdKSwgY2FjaGVkUmVzcFszXSk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICByZXNvbHZlUHJvbWlzZShjYWNo
ZWRSZXNwLCAyMDAsIHt9LCAnT0snKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgLy8gcHV0IHRoZSBwcm9taXNlIGZvciB0aGUgbm9uLXRy
YW5zZm9ybWVkIHJlc3BvbnNlIGludG8gY2FjaGUgYXMgYSBwbGFjZWhvbGRlcgorICAgICAgICAg
IGNhY2hlLnB1dCh1cmwsIHByb21pc2UpOworICAgICAgICB9CisgICAgICB9CisKKworICAgICAg
Ly8gaWYgd2Ugd29uJ3QgaGF2ZSB0aGUgcmVzcG9uc2UgaW4gY2FjaGUsIHNldCB0aGUgeHNyZiBo
ZWFkZXJzIGFuZAorICAgICAgLy8gc2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgYmFja2VuZAorICAg
ICAgaWYgKGlzVW5kZWZpbmVkKGNhY2hlZFJlc3ApKSB7CisgICAgICAgIHZhciB4c3JmVmFsdWUg
PSB1cmxJc1NhbWVPcmlnaW4oY29uZmlnLnVybCkKKyAgICAgICAgICAgID8gJCRjb29raWVSZWFk
ZXIoKVtjb25maWcueHNyZkNvb2tpZU5hbWUgfHwgZGVmYXVsdHMueHNyZkNvb2tpZU5hbWVdCisg
ICAgICAgICAgICA6IHVuZGVmaW5lZDsKKyAgICAgICAgaWYgKHhzcmZWYWx1ZSkgeworICAgICAg
ICAgIHJlcUhlYWRlcnNbKGNvbmZpZy54c3JmSGVhZGVyTmFtZSB8fCBkZWZhdWx0cy54c3JmSGVh
ZGVyTmFtZSldID0geHNyZlZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgJGh0dHBCYWNrZW5k
KGNvbmZpZy5tZXRob2QsIHVybCwgcmVxRGF0YSwgZG9uZSwgcmVxSGVhZGVycywgY29uZmlnLnRp
bWVvdXQsCisgICAgICAgICAgICBjb25maWcud2l0aENyZWRlbnRpYWxzLCBjb25maWcucmVzcG9u
c2VUeXBlKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHByb21pc2U7CisKKworICAgICAgLyoq
CisgICAgICAgKiBDYWxsYmFjayByZWdpc3RlcmVkIHRvICRodHRwQmFja2VuZCgpOgorICAgICAg
ICogIC0gY2FjaGVzIHRoZSByZXNwb25zZSBpZiBkZXNpcmVkCisgICAgICAgKiAgLSByZXNvbHZl
cyB0aGUgcmF3ICRodHRwIHByb21pc2UKKyAgICAgICAqICAtIGNhbGxzICRhcHBseQorICAgICAg
ICovCisgICAgICBmdW5jdGlvbiBkb25lKHN0YXR1cywgcmVzcG9uc2UsIGhlYWRlcnNTdHJpbmcs
IHN0YXR1c1RleHQpIHsKKyAgICAgICAgaWYgKGNhY2hlKSB7CisgICAgICAgICAgaWYgKGlzU3Vj
Y2VzcyhzdGF0dXMpKSB7CisgICAgICAgICAgICBjYWNoZS5wdXQodXJsLCBbc3RhdHVzLCByZXNw
b25zZSwgcGFyc2VIZWFkZXJzKGhlYWRlcnNTdHJpbmcpLCBzdGF0dXNUZXh0XSk7CisgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIHJlbW92ZSBwcm9taXNlIGZyb20gdGhlIGNhY2hl
CisgICAgICAgICAgICBjYWNoZS5yZW1vdmUodXJsKTsKKyAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBmdW5jdGlvbiByZXNvbHZlSHR0cFByb21pc2UoKSB7CisgICAgICAgICAgcmVz
b2x2ZVByb21pc2UocmVzcG9uc2UsIHN0YXR1cywgaGVhZGVyc1N0cmluZywgc3RhdHVzVGV4dCk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAodXNlQXBwbHlBc3luYykgeworICAgICAgICAgICRy
b290U2NvcGUuJGFwcGx5QXN5bmMocmVzb2x2ZUh0dHBQcm9taXNlKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICByZXNvbHZlSHR0cFByb21pc2UoKTsKKyAgICAgICAgICBpZiAoISRyb290
U2NvcGUuJCRwaGFzZSkgJHJvb3RTY29wZS4kYXBwbHkoKTsKKyAgICAgICAgfQorICAgICAgfQor
CisKKyAgICAgIC8qKgorICAgICAgICogUmVzb2x2ZXMgdGhlIHJhdyAkaHR0cCBwcm9taXNlLgor
ICAgICAgICovCisgICAgICBmdW5jdGlvbiByZXNvbHZlUHJvbWlzZShyZXNwb25zZSwgc3RhdHVz
LCBoZWFkZXJzLCBzdGF0dXNUZXh0KSB7CisgICAgICAgIC8vIG5vcm1hbGl6ZSBpbnRlcm5hbCBz
dGF0dXNlcyB0byAwCisgICAgICAgIHN0YXR1cyA9IE1hdGgubWF4KHN0YXR1cywgMCk7CisKKyAg
ICAgICAgKGlzU3VjY2VzcyhzdGF0dXMpID8gZGVmZXJyZWQucmVzb2x2ZSA6IGRlZmVycmVkLnJl
amVjdCkoeworICAgICAgICAgIGRhdGE6IHJlc3BvbnNlLAorICAgICAgICAgIHN0YXR1czogc3Rh
dHVzLAorICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnNHZXR0ZXIoaGVhZGVycyksCisgICAgICAg
ICAgY29uZmlnOiBjb25maWcsCisgICAgICAgICAgc3RhdHVzVGV4dDogc3RhdHVzVGV4dAorICAg
ICAgICB9KTsKKyAgICAgIH0KKworICAgICAgZnVuY3Rpb24gcmVzb2x2ZVByb21pc2VXaXRoUmVz
dWx0KHJlc3VsdCkgeworICAgICAgICByZXNvbHZlUHJvbWlzZShyZXN1bHQuZGF0YSwgcmVzdWx0
LnN0YXR1cywgc2hhbGxvd0NvcHkocmVzdWx0LmhlYWRlcnMoKSksIHJlc3VsdC5zdGF0dXNUZXh0
KTsKKyAgICAgIH0KKworICAgICAgZnVuY3Rpb24gcmVtb3ZlUGVuZGluZ1JlcSgpIHsKKyAgICAg
ICAgdmFyIGlkeCA9ICRodHRwLnBlbmRpbmdSZXF1ZXN0cy5pbmRleE9mKGNvbmZpZyk7CisgICAg
ICAgIGlmIChpZHggIT09IC0xKSAkaHR0cC5wZW5kaW5nUmVxdWVzdHMuc3BsaWNlKGlkeCwgMSk7
CisgICAgICB9CisgICAgfQorCisKKyAgICBmdW5jdGlvbiBidWlsZFVybCh1cmwsIHNlcmlhbGl6
ZWRQYXJhbXMpIHsKKyAgICAgIGlmIChzZXJpYWxpemVkUGFyYW1zLmxlbmd0aCA+IDApIHsKKyAg
ICAgICAgdXJsICs9ICgodXJsLmluZGV4T2YoJz8nKSA9PSAtMSkgPyAnPycgOiAnJicpICsgc2Vy
aWFsaXplZFBhcmFtczsKKyAgICAgIH0KKyAgICAgIHJldHVybiB1cmw7CisgICAgfQorICB9XTsK
K30KKworZnVuY3Rpb24gY3JlYXRlWGhyKCkgeworICAgIHJldHVybiBuZXcgd2luZG93LlhNTEh0
dHBSZXF1ZXN0KCk7Cit9CisKKy8qKgorICogQG5nZG9jIHNlcnZpY2UKKyAqIEBuYW1lICRodHRw
QmFja2VuZAorICogQHJlcXVpcmVzICR3aW5kb3cKKyAqIEByZXF1aXJlcyAkZG9jdW1lbnQKKyAq
CisgKiBAZGVzY3JpcHRpb24KKyAqIEhUVFAgYmFja2VuZCB1c2VkIGJ5IHRoZSB7QGxpbmsgbmcu
JGh0dHAgc2VydmljZX0gdGhhdCBkZWxlZ2F0ZXMgdG8KKyAqIFhNTEh0dHBSZXF1ZXN0IG9iamVj
dCBvciBKU09OUCBhbmQgZGVhbHMgd2l0aCBicm93c2VyIGluY29tcGF0aWJpbGl0aWVzLgorICoK
KyAqIFlvdSBzaG91bGQgbmV2ZXIgbmVlZCB0byB1c2UgdGhpcyBzZXJ2aWNlIGRpcmVjdGx5LCBp
bnN0ZWFkIHVzZSB0aGUgaGlnaGVyLWxldmVsIGFic3RyYWN0aW9uczoKKyAqIHtAbGluayBuZy4k
aHR0cCAkaHR0cH0gb3Ige0BsaW5rIG5nUmVzb3VyY2UuJHJlc291cmNlICRyZXNvdXJjZX0uCisg
KgorICogRHVyaW5nIHRlc3RpbmcgdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBzd2FwcGVkIHdpdGgg
e0BsaW5rIG5nTW9jay4kaHR0cEJhY2tlbmQgbW9jaworICogJGh0dHBCYWNrZW5kfSB3aGljaCBj
YW4gYmUgdHJhaW5lZCB3aXRoIHJlc3BvbnNlcy4KKyAqLworZnVuY3Rpb24gJEh0dHBCYWNrZW5k
UHJvdmlkZXIoKSB7CisgIHRoaXMuJGdldCA9IFsnJGJyb3dzZXInLCAnJHdpbmRvdycsICckZG9j
dW1lbnQnLCBmdW5jdGlvbigkYnJvd3NlciwgJHdpbmRvdywgJGRvY3VtZW50KSB7CisgICAgcmV0
dXJuIGNyZWF0ZUh0dHBCYWNrZW5kKCRicm93c2VyLCBjcmVhdGVYaHIsICRicm93c2VyLmRlZmVy
LCAkd2luZG93LmFuZ3VsYXIuY2FsbGJhY2tzLCAkZG9jdW1lbnRbMF0pOworICB9XTsKK30KKwor
ZnVuY3Rpb24gY3JlYXRlSHR0cEJhY2tlbmQoJGJyb3dzZXIsIGNyZWF0ZVhociwgJGJyb3dzZXJE
ZWZlciwgY2FsbGJhY2tzLCByYXdEb2N1bWVudCkgeworICAvLyBUT0RPKHZvanRhKTogZml4IHRo
ZSBzaWduYXR1cmUKKyAgcmV0dXJuIGZ1bmN0aW9uKG1ldGhvZCwgdXJsLCBwb3N0LCBjYWxsYmFj
aywgaGVhZGVycywgdGltZW91dCwgd2l0aENyZWRlbnRpYWxzLCByZXNwb25zZVR5cGUpIHsKKyAg
ICAkYnJvd3Nlci4kJGluY091dHN0YW5kaW5nUmVxdWVzdENvdW50KCk7CisgICAgdXJsID0gdXJs
IHx8ICRicm93c2VyLnVybCgpOworCisgICAgaWYgKGxvd2VyY2FzZShtZXRob2QpID09ICdqc29u
cCcpIHsKKyAgICAgIHZhciBjYWxsYmFja0lkID0gJ18nICsgKGNhbGxiYWNrcy5jb3VudGVyKysp
LnRvU3RyaW5nKDM2KTsKKyAgICAgIGNhbGxiYWNrc1tjYWxsYmFja0lkXSA9IGZ1bmN0aW9uKGRh
dGEpIHsKKyAgICAgICAgY2FsbGJhY2tzW2NhbGxiYWNrSWRdLmRhdGEgPSBkYXRhOworICAgICAg
ICBjYWxsYmFja3NbY2FsbGJhY2tJZF0uY2FsbGVkID0gdHJ1ZTsKKyAgICAgIH07CisKKyAgICAg
IHZhciBqc29ucERvbmUgPSBqc29ucFJlcSh1cmwucmVwbGFjZSgnSlNPTl9DQUxMQkFDSycsICdh
bmd1bGFyLmNhbGxiYWNrcy4nICsgY2FsbGJhY2tJZCksCisgICAgICAgICAgY2FsbGJhY2tJZCwg
ZnVuY3Rpb24oc3RhdHVzLCB0ZXh0KSB7CisgICAgICAgIGNvbXBsZXRlUmVxdWVzdChjYWxsYmFj
aywgc3RhdHVzLCBjYWxsYmFja3NbY2FsbGJhY2tJZF0uZGF0YSwgIiIsIHRleHQpOworICAgICAg
ICBjYWxsYmFja3NbY2FsbGJhY2tJZF0gPSBub29wOworICAgICAgfSk7CisgICAgfSBlbHNlIHsK
KworICAgICAgdmFyIHhociA9IGNyZWF0ZVhocigpOworCisgICAgICB4aHIub3BlbihtZXRob2Qs
IHVybCwgdHJ1ZSk7CisgICAgICBmb3JFYWNoKGhlYWRlcnMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkp
IHsKKyAgICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIHhoci5zZXRS
ZXF1ZXN0SGVhZGVyKGtleSwgdmFsdWUpOworICAgICAgICB9CisgICAgICB9KTsKKworICAgICAg
eGhyLm9ubG9hZCA9IGZ1bmN0aW9uIHJlcXVlc3RMb2FkZWQoKSB7CisgICAgICAgIHZhciBzdGF0
dXNUZXh0ID0geGhyLnN0YXR1c1RleHQgfHwgJyc7CisKKyAgICAgICAgLy8gcmVzcG9uc2VUZXh0
IGlzIHRoZSBvbGQtc2Nob29sIHdheSBvZiByZXRyaWV2aW5nIHJlc3BvbnNlIChzdXBwb3J0ZWQg
YnkgSUU4ICYgOSkKKyAgICAgICAgLy8gcmVzcG9uc2UvcmVzcG9uc2VUeXBlIHByb3BlcnRpZXMg
d2VyZSBpbnRyb2R1Y2VkIGluIFhIUiBMZXZlbDIgc3BlYyAoc3VwcG9ydGVkIGJ5IElFMTApCisg
ICAgICAgIHZhciByZXNwb25zZSA9ICgncmVzcG9uc2UnIGluIHhocikgPyB4aHIucmVzcG9uc2Ug
OiB4aHIucmVzcG9uc2VUZXh0OworCisgICAgICAgIC8vIG5vcm1hbGl6ZSBJRTkgYnVnIChodHRw
Oi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xNDUwKQorICAgICAgICB2YXIgc3RhdHVzID0geGhy
LnN0YXR1cyA9PT0gMTIyMyA/IDIwNCA6IHhoci5zdGF0dXM7CisKKyAgICAgICAgLy8gZml4IHN0
YXR1cyBjb2RlIHdoZW4gaXQgaXMgMCAoMCBzdGF0dXMgaXMgdW5kb2N1bWVudGVkKS4KKyAgICAg
ICAgLy8gT2NjdXJzIHdoZW4gYWNjZXNzaW5nIGZpbGUgcmVzb3VyY2VzIG9yIG9uIEFuZHJvaWQg
NC4xIHN0b2NrIGJyb3dzZXIKKyAgICAgICAgLy8gd2hpbGUgcmV0cmlldmluZyBmaWxlcyBmcm9t
IGFwcGxpY2F0aW9uIGNhY2hlLgorICAgICAgICBpZiAoc3RhdHVzID09PSAwKSB7CisgICAgICAg
ICAgc3RhdHVzID0gcmVzcG9uc2UgPyAyMDAgOiB1cmxSZXNvbHZlKHVybCkucHJvdG9jb2wgPT0g
J2ZpbGUnID8gNDA0IDogMDsKKyAgICAgICAgfQorCisgICAgICAgIGNvbXBsZXRlUmVxdWVzdChj
YWxsYmFjaywKKyAgICAgICAgICAgIHN0YXR1cywKKyAgICAgICAgICAgIHJlc3BvbnNlLAorICAg
ICAgICAgICAgeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpLAorICAgICAgICAgICAgc3RhdHVz
VGV4dCk7CisgICAgICB9OworCisgICAgICB2YXIgcmVxdWVzdEVycm9yID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIC8vIFRoZSByZXNwb25zZSBpcyBhbHdheXMgZW1wdHkKKyAgICAgICAgLy8gU2Vl
IGh0dHBzOi8veGhyLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdC1lcnJvci1zdGVwcyBhbmQgaHR0
cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtbmV0d29yay1lcnJvcgorICAgICAg
ICBjb21wbGV0ZVJlcXVlc3QoY2FsbGJhY2ssIC0xLCBudWxsLCBudWxsLCAnJyk7CisgICAgICB9
OworCisgICAgICB4aHIub25lcnJvciA9IHJlcXVlc3RFcnJvcjsKKyAgICAgIHhoci5vbmFib3J0
ID0gcmVxdWVzdEVycm9yOworCisgICAgICBpZiAod2l0aENyZWRlbnRpYWxzKSB7CisgICAgICAg
IHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlOworICAgICAgfQorCisgICAgICBpZiAocmVzcG9u
c2VUeXBlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IHJl
c3BvbnNlVHlwZTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgIC8vIFdlYktpdCBh
ZGRlZCBzdXBwb3J0IGZvciB0aGUganNvbiByZXNwb25zZVR5cGUgdmFsdWUgb24gMDkvMDMvMjAx
MworICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MzY0OC4gVmVyc2lvbnMgb2YgU2FmYXJpIHByaW9yIHRvIDcgYXJlCisgICAgICAgICAgLy8ga25v
d24gdG8gdGhyb3cgd2hlbiBzZXR0aW5nIHRoZSB2YWx1ZSAianNvbiIgYXMgdGhlIHJlc3BvbnNl
IHR5cGUuIE90aGVyIG9sZGVyCisgICAgICAgICAgLy8gYnJvd3NlcnMgaW1wbGVtZW50aW5nIHRo
ZSByZXNwb25zZVR5cGUKKyAgICAgICAgICAvLworICAgICAgICAgIC8vIFRoZSBqc29uIHJlc3Bv
bnNlIHR5cGUgY2FuIGJlIGlnbm9yZWQgaWYgbm90IHN1cHBvcnRlZCwgYmVjYXVzZSBKU09OIHBh
eWxvYWRzIGFyZQorICAgICAgICAgIC8vIHBhcnNlZCBvbiB0aGUgY2xpZW50LXNpZGUgcmVnYXJk
bGVzcy4KKyAgICAgICAgICBpZiAocmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHsKKyAgICAgICAg
ICAgIHRocm93IGU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHho
ci5zZW5kKHBvc3QpOworICAgIH0KKworICAgIGlmICh0aW1lb3V0ID4gMCkgeworICAgICAgdmFy
IHRpbWVvdXRJZCA9ICRicm93c2VyRGVmZXIodGltZW91dFJlcXVlc3QsIHRpbWVvdXQpOworICAg
IH0gZWxzZSBpZiAoaXNQcm9taXNlTGlrZSh0aW1lb3V0KSkgeworICAgICAgdGltZW91dC50aGVu
KHRpbWVvdXRSZXF1ZXN0KTsKKyAgICB9CisKKworICAgIGZ1bmN0aW9uIHRpbWVvdXRSZXF1ZXN0
KCkgeworICAgICAganNvbnBEb25lICYmIGpzb25wRG9uZSgpOworICAgICAgeGhyICYmIHhoci5h
Ym9ydCgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNvbXBsZXRlUmVxdWVzdChjYWxsYmFjaywg
c3RhdHVzLCByZXNwb25zZSwgaGVhZGVyc1N0cmluZywgc3RhdHVzVGV4dCkgeworICAgICAgLy8g
Y2FuY2VsIHRpbWVvdXQgYW5kIHN1YnNlcXVlbnQgdGltZW91dCBwcm9taXNlIHJlc29sdXRpb24K
KyAgICAgIGlmICh0aW1lb3V0SWQgIT09IHVuZGVmaW5lZCkgeworICAgICAgICAkYnJvd3NlckRl
ZmVyLmNhbmNlbCh0aW1lb3V0SWQpOworICAgICAgfQorICAgICAganNvbnBEb25lID0geGhyID0g
bnVsbDsKKworICAgICAgY2FsbGJhY2soc3RhdHVzLCByZXNwb25zZSwgaGVhZGVyc1N0cmluZywg
c3RhdHVzVGV4dCk7CisgICAgICAkYnJvd3Nlci4kJGNvbXBsZXRlT3V0c3RhbmRpbmdSZXF1ZXN0
KG5vb3ApOworICAgIH0KKyAgfTsKKworICBmdW5jdGlvbiBqc29ucFJlcSh1cmwsIGNhbGxiYWNr
SWQsIGRvbmUpIHsKKyAgICAvLyB3ZSBjYW4ndCB1c2UgalF1ZXJ5L2pxTGl0ZSBoZXJlIGJlY2F1
c2UgalF1ZXJ5IGRvZXMgY3Jhenkgc3R1ZmYgd2l0aCBzY3JpcHQgZWxlbWVudHMsIGUuZy46Cisg
ICAgLy8gLSBmZXRjaGVzIGxvY2FsIHNjcmlwdHMgdmlhIFhIUiBhbmQgZXZhbHMgdGhlbQorICAg
IC8vIC0gYWRkcyBhbmQgaW1tZWRpYXRlbHkgcmVtb3ZlcyBzY3JpcHQgZWxlbWVudHMgZnJvbSB0
aGUgZG9jdW1lbnQKKyAgICB2YXIgc2NyaXB0ID0gcmF3RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
c2NyaXB0JyksIGNhbGxiYWNrID0gbnVsbDsKKyAgICBzY3JpcHQudHlwZSA9ICJ0ZXh0L2phdmFz
Y3JpcHQiOworICAgIHNjcmlwdC5zcmMgPSB1cmw7CisgICAgc2NyaXB0LmFzeW5jID0gdHJ1ZTsK
KworICAgIGNhbGxiYWNrID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgIHJlbW92ZUV2ZW50TGlz
dGVuZXJGbihzY3JpcHQsICJsb2FkIiwgY2FsbGJhY2spOworICAgICAgcmVtb3ZlRXZlbnRMaXN0
ZW5lckZuKHNjcmlwdCwgImVycm9yIiwgY2FsbGJhY2spOworICAgICAgcmF3RG9jdW1lbnQuYm9k
eS5yZW1vdmVDaGlsZChzY3JpcHQpOworICAgICAgc2NyaXB0ID0gbnVsbDsKKyAgICAgIHZhciBz
dGF0dXMgPSAtMTsKKyAgICAgIHZhciB0ZXh0ID0gInVua25vd24iOworCisgICAgICBpZiAoZXZl
bnQpIHsKKyAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICJsb2FkIiAmJiAhY2FsbGJhY2tzW2Nh
bGxiYWNrSWRdLmNhbGxlZCkgeworICAgICAgICAgIGV2ZW50ID0geyB0eXBlOiAiZXJyb3IiIH07
CisgICAgICAgIH0KKyAgICAgICAgdGV4dCA9IGV2ZW50LnR5cGU7CisgICAgICAgIHN0YXR1cyA9
IGV2ZW50LnR5cGUgPT09ICJlcnJvciIgPyA0MDQgOiAyMDA7CisgICAgICB9CisKKyAgICAgIGlm
IChkb25lKSB7CisgICAgICAgIGRvbmUoc3RhdHVzLCB0ZXh0KTsKKyAgICAgIH0KKyAgICB9Owor
CisgICAgYWRkRXZlbnRMaXN0ZW5lckZuKHNjcmlwdCwgImxvYWQiLCBjYWxsYmFjayk7CisgICAg
YWRkRXZlbnRMaXN0ZW5lckZuKHNjcmlwdCwgImVycm9yIiwgY2FsbGJhY2spOworICAgIHJhd0Rv
Y3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKKyAgICByZXR1cm4gY2FsbGJhY2s7Cisg
IH0KK30KKwordmFyICRpbnRlcnBvbGF0ZU1pbkVyciA9IGFuZ3VsYXIuJGludGVycG9sYXRlTWlu
RXJyID0gbWluRXJyKCckaW50ZXJwb2xhdGUnKTsKKyRpbnRlcnBvbGF0ZU1pbkVyci50aHJvd05v
Y29uY2F0ID0gZnVuY3Rpb24odGV4dCkgeworICB0aHJvdyAkaW50ZXJwb2xhdGVNaW5FcnIoJ25v
Y29uY2F0JywKKyAgICAgICJFcnJvciB3aGlsZSBpbnRlcnBvbGF0aW5nOiB7MH1cblN0cmljdCBD
b250ZXh0dWFsIEVzY2FwaW5nIGRpc2FsbG93cyAiICsKKyAgICAgICJpbnRlcnBvbGF0aW9ucyB0
aGF0IGNvbmNhdGVuYXRlIG11bHRpcGxlIGV4cHJlc3Npb25zIHdoZW4gYSB0cnVzdGVkIHZhbHVl
IGlzICIgKworICAgICAgInJlcXVpcmVkLiAgU2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcv
YXBpL25nLiRzY2UiLCB0ZXh0KTsKK307CisKKyRpbnRlcnBvbGF0ZU1pbkVyci5pbnRlcnIgPSBm
dW5jdGlvbih0ZXh0LCBlcnIpIHsKKyAgcmV0dXJuICRpbnRlcnBvbGF0ZU1pbkVycignaW50ZXJy
JywgIkNhbid0IGludGVycG9sYXRlOiB7MH1cbnsxfSIsIHRleHQsIGVyci50b1N0cmluZygpKTsK
K307CisKKy8qKgorICogQG5nZG9jIHByb3ZpZGVyCisgKiBAbmFtZSAkaW50ZXJwb2xhdGVQcm92
aWRlcgorICoKKyAqIEBkZXNjcmlwdGlvbgorICoKKyAqIFVzZWQgZm9yIGNvbmZpZ3VyaW5nIHRo
ZSBpbnRlcnBvbGF0aW9uIG1hcmt1cC4gRGVmYXVsdHMgdG8gYHt7YCBhbmQgYH19YC4KKyAqCisg
KiBAZXhhbXBsZQorPGV4YW1wbGUgbW9kdWxlPSJjdXN0b21JbnRlcnBvbGF0aW9uQXBwIj4KKzxm
aWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorPHNjcmlwdD4KKyAgdmFyIGN1c3RvbUludGVycG9sYXRp
b25BcHAgPSBhbmd1bGFyLm1vZHVsZSgnY3VzdG9tSW50ZXJwb2xhdGlvbkFwcCcsIFtdKTsKKwor
ICBjdXN0b21JbnRlcnBvbGF0aW9uQXBwLmNvbmZpZyhmdW5jdGlvbigkaW50ZXJwb2xhdGVQcm92
aWRlcikgeworICAgICRpbnRlcnBvbGF0ZVByb3ZpZGVyLnN0YXJ0U3ltYm9sKCcvLycpOworICAg
ICRpbnRlcnBvbGF0ZVByb3ZpZGVyLmVuZFN5bWJvbCgnLy8nKTsKKyAgfSk7CisKKworICBjdXN0
b21JbnRlcnBvbGF0aW9uQXBwLmNvbnRyb2xsZXIoJ0RlbW9Db250cm9sbGVyJywgZnVuY3Rpb24o
KSB7CisgICAgICB0aGlzLmxhYmVsID0gIlRoaXMgYmluZGluZyBpcyBicm91Z2h0IHlvdSBieSAv
LyBpbnRlcnBvbGF0aW9uIHN5bWJvbHMuIjsKKyAgfSk7Cis8L3NjcmlwdD4KKzxkaXYgbmctYXBw
PSJBcHAiIG5nLWNvbnRyb2xsZXI9IkRlbW9Db250cm9sbGVyIGFzIGRlbW8iPgorICAgIC8vZGVt
by5sYWJlbC8vCis8L2Rpdj4KKzwvZmlsZT4KKzxmaWxlIG5hbWU9InByb3RyYWN0b3IuanMiIHR5
cGU9InByb3RyYWN0b3IiPgorICBpdCgnc2hvdWxkIGludGVycG9sYXRlIGJpbmRpbmcgd2l0aCBj
dXN0b20gc3ltYm9scycsIGZ1bmN0aW9uKCkgeworICAgIGV4cGVjdChlbGVtZW50KGJ5LmJpbmRp
bmcoJ2RlbW8ubGFiZWwnKSkuZ2V0VGV4dCgpKS50b0JlKCdUaGlzIGJpbmRpbmcgaXMgYnJvdWdo
dCB5b3UgYnkgLy8gaW50ZXJwb2xhdGlvbiBzeW1ib2xzLicpOworICB9KTsKKzwvZmlsZT4KKzwv
ZXhhbXBsZT4KKyAqLworZnVuY3Rpb24gJEludGVycG9sYXRlUHJvdmlkZXIoKSB7CisgIHZhciBz
dGFydFN5bWJvbCA9ICd7eyc7CisgIHZhciBlbmRTeW1ib2wgPSAnfX0nOworCisgIC8qKgorICAg
KiBAbmdkb2MgbWV0aG9kCisgICAqIEBuYW1lICRpbnRlcnBvbGF0ZVByb3ZpZGVyI3N0YXJ0U3lt
Ym9sCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBTeW1ib2wgdG8gZGVub3RlIHN0YXJ0IG9mIGV4
cHJlc3Npb24gaW4gdGhlIGludGVycG9sYXRlZCBzdHJpbmcuIERlZmF1bHRzIHRvIGB7e2AuCisg
ICAqCisgICAqIEBwYXJhbSB7c3RyaW5nPX0gdmFsdWUgbmV3IHZhbHVlIHRvIHNldCB0aGUgc3Rh
cnRpbmcgc3ltYm9sIHRvLgorICAgKiBAcmV0dXJucyB7c3RyaW5nfHNlbGZ9IFJldHVybnMgdGhl
IHN5bWJvbCB3aGVuIHVzZWQgYXMgZ2V0dGVyIGFuZCBzZWxmIGlmIHVzZWQgYXMgc2V0dGVyLgor
ICAgKi8KKyAgdGhpcy5zdGFydFN5bWJvbCA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgaWYgKHZh
bHVlKSB7CisgICAgICBzdGFydFN5bWJvbCA9IHZhbHVlOworICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBzdGFydFN5bWJvbDsKKyAgICB9CisgIH07CisKKyAg
LyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgJGludGVycG9sYXRlUHJvdmlkZXIj
ZW5kU3ltYm9sCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBTeW1ib2wgdG8gZGVub3RlIHRoZSBl
bmQgb2YgZXhwcmVzc2lvbiBpbiB0aGUgaW50ZXJwb2xhdGVkIHN0cmluZy4gRGVmYXVsdHMgdG8g
YH19YC4KKyAgICoKKyAgICogQHBhcmFtIHtzdHJpbmc9fSB2YWx1ZSBuZXcgdmFsdWUgdG8gc2V0
IHRoZSBlbmRpbmcgc3ltYm9sIHRvLgorICAgKiBAcmV0dXJucyB7c3RyaW5nfHNlbGZ9IFJldHVy
bnMgdGhlIHN5bWJvbCB3aGVuIHVzZWQgYXMgZ2V0dGVyIGFuZCBzZWxmIGlmIHVzZWQgYXMgc2V0
dGVyLgorICAgKi8KKyAgdGhpcy5lbmRTeW1ib2wgPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIGlm
ICh2YWx1ZSkgeworICAgICAgZW5kU3ltYm9sID0gdmFsdWU7CisgICAgICByZXR1cm4gdGhpczsK
KyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIGVuZFN5bWJvbDsKKyAgICB9CisgIH07CisKKwor
ICB0aGlzLiRnZXQgPSBbJyRwYXJzZScsICckZXhjZXB0aW9uSGFuZGxlcicsICckc2NlJywgZnVu
Y3Rpb24oJHBhcnNlLCAkZXhjZXB0aW9uSGFuZGxlciwgJHNjZSkgeworICAgIHZhciBzdGFydFN5
bWJvbExlbmd0aCA9IHN0YXJ0U3ltYm9sLmxlbmd0aCwKKyAgICAgICAgZW5kU3ltYm9sTGVuZ3Ro
ID0gZW5kU3ltYm9sLmxlbmd0aCwKKyAgICAgICAgZXNjYXBlZFN0YXJ0UmVnZXhwID0gbmV3IFJl
Z0V4cChzdGFydFN5bWJvbC5yZXBsYWNlKC8uL2csIGVzY2FwZSksICdnJyksCisgICAgICAgIGVz
Y2FwZWRFbmRSZWdleHAgPSBuZXcgUmVnRXhwKGVuZFN5bWJvbC5yZXBsYWNlKC8uL2csIGVzY2Fw
ZSksICdnJyk7CisKKyAgICBmdW5jdGlvbiBlc2NhcGUoY2gpIHsKKyAgICAgIHJldHVybiAnXFxc
XFxcJyArIGNoOworICAgIH0KKworICAgIGZ1bmN0aW9uIHVuZXNjYXBlVGV4dCh0ZXh0KSB7Cisg
ICAgICByZXR1cm4gdGV4dC5yZXBsYWNlKGVzY2FwZWRTdGFydFJlZ2V4cCwgc3RhcnRTeW1ib2wp
LgorICAgICAgICByZXBsYWNlKGVzY2FwZWRFbmRSZWdleHAsIGVuZFN5bWJvbCk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gc3RyaW5naWZ5KHZhbHVlKSB7CisgICAgICBpZiAodmFsdWUgPT0gbnVs
bCkgeyAvLyBudWxsIHx8IHVuZGVmaW5lZAorICAgICAgICByZXR1cm4gJyc7CisgICAgICB9Cisg
ICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkgeworICAgICAgICBjYXNlICdzdHJpbmcnOgorICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdudW1iZXInOgorICAgICAgICAgIHZhbHVlID0g
JycgKyB2YWx1ZTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICB2YWx1ZSA9IHRvSnNvbih2YWx1ZSk7CisgICAgICB9CisKKyAgICAgIHJldHVybiB2YWx1ZTsK
KyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAbmdkb2Mgc2VydmljZQorICAgICAqIEBuYW1lICRp
bnRlcnBvbGF0ZQorICAgICAqIEBraW5kIGZ1bmN0aW9uCisgICAgICoKKyAgICAgKiBAcmVxdWly
ZXMgJHBhcnNlCisgICAgICogQHJlcXVpcmVzICRzY2UKKyAgICAgKgorICAgICAqIEBkZXNjcmlw
dGlvbgorICAgICAqCisgICAgICogQ29tcGlsZXMgYSBzdHJpbmcgd2l0aCBtYXJrdXAgaW50byBh
biBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uLiBUaGlzIHNlcnZpY2UgaXMgdXNlZCBieSB0aGUKKyAg
ICAgKiBIVE1MIHtAbGluayBuZy4kY29tcGlsZSAkY29tcGlsZX0gc2VydmljZSBmb3IgZGF0YSBi
aW5kaW5nLiBTZWUKKyAgICAgKiB7QGxpbmsgbmcuJGludGVycG9sYXRlUHJvdmlkZXIgJGludGVy
cG9sYXRlUHJvdmlkZXJ9IGZvciBjb25maWd1cmluZyB0aGUKKyAgICAgKiBpbnRlcnBvbGF0aW9u
IG1hcmt1cC4KKyAgICAgKgorICAgICAqCisgICAgICogYGBganMKKyAgICAgKiAgIHZhciAkaW50
ZXJwb2xhdGUgPSAuLi47IC8vIGluamVjdGVkCisgICAgICogICB2YXIgZXhwID0gJGludGVycG9s
YXRlKCdIZWxsbyB7e25hbWUgfCB1cHBlcmNhc2V9fSEnKTsKKyAgICAgKiAgIGV4cGVjdChleHAo
e25hbWU6J0FuZ3VsYXInfSkudG9FcXVhbCgnSGVsbG8gQU5HVUxBUiEnKTsKKyAgICAgKiBgYGAK
KyAgICAgKgorICAgICAqIGAkaW50ZXJwb2xhdGVgIHRha2VzIGFuIG9wdGlvbmFsIGZvdXJ0aCBh
cmd1bWVudCwgYGFsbE9yTm90aGluZ2AuIElmIGBhbGxPck5vdGhpbmdgIGlzCisgICAgICogYHRy
dWVgLCB0aGUgaW50ZXJwb2xhdGlvbiBmdW5jdGlvbiB3aWxsIHJldHVybiBgdW5kZWZpbmVkYCB1
bmxlc3MgYWxsIGVtYmVkZGVkIGV4cHJlc3Npb25zCisgICAgICogZXZhbHVhdGUgdG8gYSB2YWx1
ZSBvdGhlciB0aGFuIGB1bmRlZmluZWRgLgorICAgICAqCisgICAgICogYGBganMKKyAgICAgKiAg
IHZhciAkaW50ZXJwb2xhdGUgPSAuLi47IC8vIGluamVjdGVkCisgICAgICogICB2YXIgY29udGV4
dCA9IHtncmVldGluZzogJ0hlbGxvJywgbmFtZTogdW5kZWZpbmVkIH07CisgICAgICoKKyAgICAg
KiAgIC8vIGRlZmF1bHQgImZvcmdpdmluZyIgbW9kZQorICAgICAqICAgdmFyIGV4cCA9ICRpbnRl
cnBvbGF0ZSgne3tncmVldGluZ319IHt7bmFtZX19IScpOworICAgICAqICAgZXhwZWN0KGV4cChj
b250ZXh0KSkudG9FcXVhbCgnSGVsbG8gIScpOworICAgICAqCisgICAgICogICAvLyAiYWxsT3JO
b3RoaW5nIiBtb2RlCisgICAgICogICBleHAgPSAkaW50ZXJwb2xhdGUoJ3t7Z3JlZXRpbmd9fSB7
e25hbWV9fSEnLCBmYWxzZSwgbnVsbCwgdHJ1ZSk7CisgICAgICogICBleHBlY3QoZXhwKGNvbnRl
eHQpKS50b0JlVW5kZWZpbmVkKCk7CisgICAgICogICBjb250ZXh0Lm5hbWUgPSAnQW5ndWxhcic7
CisgICAgICogICBleHBlY3QoZXhwKGNvbnRleHQpKS50b0VxdWFsKCdIZWxsbyBBbmd1bGFyIScp
OworICAgICAqIGBgYAorICAgICAqCisgICAgICogYGFsbE9yTm90aGluZ2AgaXMgdXNlZnVsIGZv
ciBpbnRlcnBvbGF0aW5nIFVSTHMuIGBuZ1NyY2AgYW5kIGBuZ1NyY3NldGAgdXNlIHRoaXMgYmVo
YXZpb3IuCisgICAgICoKKyAgICAgKiAjIyMjRXNjYXBlZCBJbnRlcnBvbGF0aW9uCisgICAgICog
JGludGVycG9sYXRlIHByb3ZpZGVzIGEgbWVjaGFuaXNtIGZvciBlc2NhcGluZyBpbnRlcnBvbGF0
aW9uIG1hcmtlcnMuIFN0YXJ0IGFuZCBlbmQgbWFya2VycworICAgICAqIGNhbiBiZSBlc2NhcGVk
IGJ5IHByZWNlZGluZyBlYWNoIG9mIHRoZWlyIGNoYXJhY3RlcnMgd2l0aCBhIFJFVkVSU0UgU09M
SURVUyBVKzAwNUMgKGJhY2tzbGFzaCkuCisgICAgICogSXQgd2lsbCBiZSByZW5kZXJlZCBhcyBh
IHJlZ3VsYXIgc3RhcnQvZW5kIG1hcmtlciwgYW5kIHdpbGwgbm90IGJlIGludGVycHJldGVkIGFz
IGFuIGV4cHJlc3Npb24KKyAgICAgKiBvciBiaW5kaW5nLgorICAgICAqCisgICAgICogVGhpcyBl
bmFibGVzIHdlYi1zZXJ2ZXJzIHRvIHByZXZlbnQgc2NyaXB0IGluamVjdGlvbiBhdHRhY2tzIGFu
ZCBkZWZhY2luZyBhdHRhY2tzLCB0byBzb21lCisgICAgICogZGVncmVlLCB3aGlsZSBhbHNvIGVu
YWJsaW5nIGNvZGUgZXhhbXBsZXMgdG8gd29yayB3aXRob3V0IHJlbHlpbmcgb24gdGhlCisgICAg
ICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ05vbkJpbmRhYmxlIG5nTm9uQmluZGFibGV9IGRpcmVj
dGl2ZS4KKyAgICAgKgorICAgICAqICoqRm9yIHNlY3VyaXR5IHB1cnBvc2VzLCBpdCBpcyBzdHJv
bmdseSBlbmNvdXJhZ2VkIHRoYXQgd2ViIHNlcnZlcnMgZXNjYXBlIHVzZXItc3VwcGxpZWQgZGF0
YSwKKyAgICAgKiByZXBsYWNpbmcgYW5nbGUgYnJhY2tldHMgKCZsdDssICZndDspIHdpdGggJmFt
cDtsdDsgYW5kICZhbXA7Z3Q7IHJlc3BlY3RpdmVseSwgYW5kIHJlcGxhY2luZyBhbGwKKyAgICAg
KiBpbnRlcnBvbGF0aW9uIHN0YXJ0L2VuZCBtYXJrZXJzIHdpdGggdGhlaXIgZXNjYXBlZCBjb3Vu
dGVycGFydHMuKioKKyAgICAgKgorICAgICAqIEVzY2FwZWQgaW50ZXJwb2xhdGlvbiBtYXJrZXJz
IGFyZSBvbmx5IHJlcGxhY2VkIHdpdGggdGhlIGFjdHVhbCBpbnRlcnBvbGF0aW9uIG1hcmtlcnMg
aW4gcmVuZGVyZWQKKyAgICAgKiBvdXRwdXQgd2hlbiB0aGUgJGludGVycG9sYXRlIHNlcnZpY2Ug
cHJvY2Vzc2VzIHRoZSB0ZXh0LiBTbywgZm9yIEhUTUwgZWxlbWVudHMgaW50ZXJwb2xhdGVkCisg
ICAgICogYnkge0BsaW5rIG5nLiRjb21waWxlICRjb21waWxlfSwgb3Igb3RoZXJ3aXNlIGludGVy
cG9sYXRlZCB3aXRoIHRoZSBgbXVzdEhhdmVFeHByZXNzaW9uYCBwYXJhbWV0ZXIKKyAgICAgKiBz
ZXQgdG8gYHRydWVgLCB0aGUgaW50ZXJwb2xhdGVkIHRleHQgbXVzdCBjb250YWluIGFuIHVuZXNj
YXBlZCBpbnRlcnBvbGF0aW9uIGV4cHJlc3Npb24uIEFzIHN1Y2gsCisgICAgICogdGhpcyBpcyB0
eXBpY2FsbHkgdXNlZnVsIG9ubHkgd2hlbiB1c2VyLWRhdGEgaXMgdXNlZCBpbiByZW5kZXJpbmcg
YSB0ZW1wbGF0ZSBmcm9tIHRoZSBzZXJ2ZXIsIG9yCisgICAgICogd2hlbiBvdGhlcndpc2UgdW50
cnVzdGVkIGRhdGEgaXMgdXNlZCBieSBhIGRpcmVjdGl2ZS4KKyAgICAgKgorICAgICAqIDxleGFt
cGxlPgorICAgICAqICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgKiAgICA8ZGl2IG5n
LWluaXQ9InVzZXJuYW1lPSdBIHVzZXInIj4KKyAgICAgKiAgICAgIDxwIG5nLWluaXQ9ImFwcHRp
dGxlPSdFc2NhcGluZyBkZW1vJyI+e3thcHB0aXRsZX19OiBce1x7IHVzZXJuYW1lID0gImRlZmFj
ZWQgdmFsdWUiOyBcfVx9CisgICAgICogICAgICAgIDwvcD4KKyAgICAgKiAgICAgIDxwPjxzdHJv
bmc+e3t1c2VybmFtZX19PC9zdHJvbmc+IGF0dGVtcHRzIHRvIGluamVjdCBjb2RlIHdoaWNoIHdp
bGwgZGVmYWNlIHRoZQorICAgICAqICAgICAgICBhcHBsaWNhdGlvbiwgYnV0IGZhaWxzIHRvIGFj
Y29tcGxpc2ggdGhlaXIgdGFzaywgYmVjYXVzZSB0aGUgc2VydmVyIGhhcyBjb3JyZWN0bHkKKyAg
ICAgKiAgICAgICAgZXNjYXBlZCB0aGUgaW50ZXJwb2xhdGlvbiBzdGFydC9lbmQgbWFya2VycyB3
aXRoIFJFVkVSU0UgU09MSURVUyBVKzAwNUMgKGJhY2tzbGFzaCkKKyAgICAgKiAgICAgICAgY2hh
cmFjdGVycy48L3A+CisgICAgICogICAgICA8cD5JbnN0ZWFkLCB0aGUgcmVzdWx0IG9mIHRoZSBh
dHRlbXB0ZWQgc2NyaXB0IGluamVjdGlvbiBpcyB2aXNpYmxlLCBhbmQgY2FuIGJlIHJlbW92ZWQK
KyAgICAgKiAgICAgICAgZnJvbSB0aGUgZGF0YWJhc2UgYnkgYW4gYWRtaW5pc3RyYXRvci48L3A+
CisgICAgICogICAgPC9kaXY+CisgICAgICogIDwvZmlsZT4KKyAgICAgKiA8L2V4YW1wbGU+Cisg
ICAgICoKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBUaGUgdGV4dCB3aXRoIG1hcmt1cCB0
byBpbnRlcnBvbGF0ZS4KKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBtdXN0SGF2ZUV4cHJlc3Np
b24gaWYgc2V0IHRvIHRydWUgdGhlbiB0aGUgaW50ZXJwb2xhdGlvbiBzdHJpbmcgbXVzdCBoYXZl
CisgICAgICogICAgZW1iZWRkZWQgZXhwcmVzc2lvbiBpbiBvcmRlciB0byByZXR1cm4gYW4gaW50
ZXJwb2xhdGlvbiBmdW5jdGlvbi4gU3RyaW5ncyB3aXRoIG5vCisgICAgICogICAgZW1iZWRkZWQg
ZXhwcmVzc2lvbiB3aWxsIHJldHVybiBudWxsIGZvciB0aGUgaW50ZXJwb2xhdGlvbiBmdW5jdGlv
bi4KKyAgICAgKiBAcGFyYW0ge3N0cmluZz19IHRydXN0ZWRDb250ZXh0IHdoZW4gcHJvdmlkZWQs
IHRoZSByZXR1cm5lZCBmdW5jdGlvbiBwYXNzZXMgdGhlIGludGVycG9sYXRlZAorICAgICAqICAg
IHJlc3VsdCB0aHJvdWdoIHtAbGluayBuZy4kc2NlI2dldFRydXN0ZWQgJHNjZS5nZXRUcnVzdGVk
KGludGVycG9sYXRlZFJlc3VsdCwKKyAgICAgKiAgICB0cnVzdGVkQ29udGV4dCl9IGJlZm9yZSBy
ZXR1cm5pbmcgaXQuICBSZWZlciB0byB0aGUge0BsaW5rIG5nLiRzY2UgJHNjZX0gc2VydmljZSB0
aGF0CisgICAgICogICAgcHJvdmlkZXMgU3RyaWN0IENvbnRleHR1YWwgRXNjYXBpbmcgZm9yIGRl
dGFpbHMuCisgICAgICogQHBhcmFtIHtib29sZWFuPX0gYWxsT3JOb3RoaW5nIGlmIGB0cnVlYCwg
dGhlbiB0aGUgcmV0dXJuZWQgZnVuY3Rpb24gcmV0dXJucyB1bmRlZmluZWQKKyAgICAgKiAgICB1
bmxlc3MgYWxsIGVtYmVkZGVkIGV4cHJlc3Npb25zIGV2YWx1YXRlIHRvIGEgdmFsdWUgb3RoZXIg
dGhhbiBgdW5kZWZpbmVkYC4KKyAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb24oY29udGV4dCl9IGFu
IGludGVycG9sYXRpb24gZnVuY3Rpb24gd2hpY2ggaXMgdXNlZCB0byBjb21wdXRlIHRoZQorICAg
ICAqICAgIGludGVycG9sYXRlZCBzdHJpbmcuIFRoZSBmdW5jdGlvbiBoYXMgdGhlc2UgcGFyYW1l
dGVyczoKKyAgICAgKgorICAgICAqIC0gYGNvbnRleHRgOiBldmFsdWF0aW9uIGNvbnRleHQgZm9y
IGFsbCBleHByZXNzaW9ucyBlbWJlZGRlZCBpbiB0aGUgaW50ZXJwb2xhdGVkIHRleHQKKyAgICAg
Ki8KKyAgICBmdW5jdGlvbiAkaW50ZXJwb2xhdGUodGV4dCwgbXVzdEhhdmVFeHByZXNzaW9uLCB0
cnVzdGVkQ29udGV4dCwgYWxsT3JOb3RoaW5nKSB7CisgICAgICBhbGxPck5vdGhpbmcgPSAhIWFs
bE9yTm90aGluZzsKKyAgICAgIHZhciBzdGFydEluZGV4LAorICAgICAgICAgIGVuZEluZGV4LAor
ICAgICAgICAgIGluZGV4ID0gMCwKKyAgICAgICAgICBleHByZXNzaW9ucyA9IFtdLAorICAgICAg
ICAgIHBhcnNlRm5zID0gW10sCisgICAgICAgICAgdGV4dExlbmd0aCA9IHRleHQubGVuZ3RoLAor
ICAgICAgICAgIGV4cCwKKyAgICAgICAgICBjb25jYXQgPSBbXSwKKyAgICAgICAgICBleHByZXNz
aW9uUG9zaXRpb25zID0gW107CisKKyAgICAgIHdoaWxlIChpbmRleCA8IHRleHRMZW5ndGgpIHsK
KyAgICAgICAgaWYgKCgoc3RhcnRJbmRleCA9IHRleHQuaW5kZXhPZihzdGFydFN5bWJvbCwgaW5k
ZXgpKSAhPSAtMSkgJiYKKyAgICAgICAgICAgICAoKGVuZEluZGV4ID0gdGV4dC5pbmRleE9mKGVu
ZFN5bWJvbCwgc3RhcnRJbmRleCArIHN0YXJ0U3ltYm9sTGVuZ3RoKSkgIT0gLTEpKSB7CisgICAg
ICAgICAgaWYgKGluZGV4ICE9PSBzdGFydEluZGV4KSB7CisgICAgICAgICAgICBjb25jYXQucHVz
aCh1bmVzY2FwZVRleHQodGV4dC5zdWJzdHJpbmcoaW5kZXgsIHN0YXJ0SW5kZXgpKSk7CisgICAg
ICAgICAgfQorICAgICAgICAgIGV4cCA9IHRleHQuc3Vic3RyaW5nKHN0YXJ0SW5kZXggKyBzdGFy
dFN5bWJvbExlbmd0aCwgZW5kSW5kZXgpOworICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2goZXhw
KTsKKyAgICAgICAgICBwYXJzZUZucy5wdXNoKCRwYXJzZShleHAsIHBhcnNlU3RyaW5naWZ5SW50
ZXJjZXB0b3IpKTsKKyAgICAgICAgICBpbmRleCA9IGVuZEluZGV4ICsgZW5kU3ltYm9sTGVuZ3Ro
OworICAgICAgICAgIGV4cHJlc3Npb25Qb3NpdGlvbnMucHVzaChjb25jYXQubGVuZ3RoKTsKKyAg
ICAgICAgICBjb25jYXQucHVzaCgnJyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgLy8g
d2UgZGlkIG5vdCBmaW5kIGFuIGludGVycG9sYXRpb24sIHNvIHdlIGhhdmUgdG8gYWRkIHRoZSBy
ZW1haW5kZXIgdG8gdGhlIHNlcGFyYXRvcnMgYXJyYXkKKyAgICAgICAgICBpZiAoaW5kZXggIT09
IHRleHRMZW5ndGgpIHsKKyAgICAgICAgICAgIGNvbmNhdC5wdXNoKHVuZXNjYXBlVGV4dCh0ZXh0
LnN1YnN0cmluZyhpbmRleCkpKTsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgIH0KKworICAgICAgLy8gQ29uY2F0ZW5hdGluZyBleHByZXNzaW9ucyBtYWtl
cyBpdCBoYXJkIHRvIHJlYXNvbiBhYm91dCB3aGV0aGVyIHNvbWUgY29tYmluYXRpb24gb2YKKyAg
ICAgIC8vIGNvbmNhdGVuYXRlZCB2YWx1ZXMgYXJlIHVuc2FmZSB0byB1c2UgYW5kIGNvdWxkIGVh
c2lseSBsZWFkIHRvIFhTUy4gIEJ5IHJlcXVpcmluZyB0aGF0IGEKKyAgICAgIC8vIHNpbmdsZSBl
eHByZXNzaW9uIGJlIHVzZWQgZm9yIGlmcmFtZVtzcmNdLCBvYmplY3Rbc3JjXSwgZXRjLiwgd2Ug
ZW5zdXJlIHRoYXQgdGhlIHZhbHVlCisgICAgICAvLyB0aGF0J3MgdXNlZCBpcyBhc3NpZ25lZCBv
ciBjb25zdHJ1Y3RlZCBieSBzb21lIEpTIGNvZGUgc29tZXdoZXJlIHRoYXQgaXMgbW9yZSB0ZXN0
YWJsZSBvcgorICAgICAgLy8gbWFrZSBpdCBvYnZpb3VzIHRoYXQgeW91IGJvdW5kIHRoZSB2YWx1
ZSB0byBzb21lIHVzZXIgY29udHJvbGxlZCB2YWx1ZS4gIFRoaXMgaGVscHMgcmVkdWNlCisgICAg
ICAvLyB0aGUgbG9hZCB3aGVuIGF1ZGl0aW5nIGZvciBYU1MgaXNzdWVzLgorICAgICAgaWYgKHRy
dXN0ZWRDb250ZXh0ICYmIGNvbmNhdC5sZW5ndGggPiAxKSB7CisgICAgICAgICAgJGludGVycG9s
YXRlTWluRXJyLnRocm93Tm9jb25jYXQodGV4dCk7CisgICAgICB9CisKKyAgICAgIGlmICghbXVz
dEhhdmVFeHByZXNzaW9uIHx8IGV4cHJlc3Npb25zLmxlbmd0aCkgeworICAgICAgICB2YXIgY29t
cHV0ZSA9IGZ1bmN0aW9uKHZhbHVlcykgeworICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9
IGV4cHJlc3Npb25zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChhbGxP
ck5vdGhpbmcgJiYgaXNVbmRlZmluZWQodmFsdWVzW2ldKSkgcmV0dXJuOworICAgICAgICAgICAg
Y29uY2F0W2V4cHJlc3Npb25Qb3NpdGlvbnNbaV1dID0gdmFsdWVzW2ldOworICAgICAgICAgIH0K
KyAgICAgICAgICByZXR1cm4gY29uY2F0LmpvaW4oJycpOworICAgICAgICB9OworCisgICAgICAg
IHZhciBnZXRWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAgICAgcmV0dXJuIHRydXN0
ZWRDb250ZXh0ID8KKyAgICAgICAgICAgICRzY2UuZ2V0VHJ1c3RlZCh0cnVzdGVkQ29udGV4dCwg
dmFsdWUpIDoKKyAgICAgICAgICAgICRzY2UudmFsdWVPZih2YWx1ZSk7CisgICAgICAgIH07CisK
KyAgICAgICAgcmV0dXJuIGV4dGVuZChmdW5jdGlvbiBpbnRlcnBvbGF0aW9uRm4oY29udGV4dCkg
eworICAgICAgICAgICAgdmFyIGkgPSAwOworICAgICAgICAgICAgdmFyIGlpID0gZXhwcmVzc2lv
bnMubGVuZ3RoOworICAgICAgICAgICAgdmFyIHZhbHVlcyA9IG5ldyBBcnJheShpaSk7CisKKyAg
ICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgIGZvciAoOyBpIDwgaWk7IGkrKykgeworICAg
ICAgICAgICAgICAgIHZhbHVlc1tpXSA9IHBhcnNlRm5zW2ldKGNvbnRleHQpOworICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGUodmFsdWVzKTsKKyAgICAgICAg
ICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgICAgICAgICAkZXhjZXB0aW9uSGFuZGxlcigkaW50
ZXJwb2xhdGVNaW5FcnIuaW50ZXJyKHRleHQsIGVycikpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgfSwgeworICAgICAgICAgIC8vIGFsbCBvZiB0aGVzZSBwcm9wZXJ0aWVzIGFyZSB1bmRv
Y3VtZW50ZWQgZm9yIG5vdworICAgICAgICAgIGV4cDogdGV4dCwgLy9qdXN0IGZvciBjb21wYXRp
YmlsaXR5IHdpdGggcmVndWxhciB3YXRjaGVycyBjcmVhdGVkIHZpYSAkd2F0Y2gKKyAgICAgICAg
ICBleHByZXNzaW9uczogZXhwcmVzc2lvbnMsCisgICAgICAgICAgJCR3YXRjaERlbGVnYXRlOiBm
dW5jdGlvbihzY29wZSwgbGlzdGVuZXIpIHsKKyAgICAgICAgICAgIHZhciBsYXN0VmFsdWU7Cisg
ICAgICAgICAgICByZXR1cm4gc2NvcGUuJHdhdGNoR3JvdXAocGFyc2VGbnMsIGZ1bmN0aW9uIGlu
dGVycG9sYXRlRm5XYXRjaGVyKHZhbHVlcywgb2xkVmFsdWVzKSB7CisgICAgICAgICAgICAgIHZh
ciBjdXJyVmFsdWUgPSBjb21wdXRlKHZhbHVlcyk7CisgICAgICAgICAgICAgIGlmIChpc0Z1bmN0
aW9uKGxpc3RlbmVyKSkgeworICAgICAgICAgICAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgY3Vy
clZhbHVlLCB2YWx1ZXMgIT09IG9sZFZhbHVlcyA/IGxhc3RWYWx1ZSA6IGN1cnJWYWx1ZSwgc2Nv
cGUpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGxhc3RWYWx1ZSA9IGN1cnJWYWx1
ZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICB9CisK
KyAgICAgIGZ1bmN0aW9uIHBhcnNlU3RyaW5naWZ5SW50ZXJjZXB0b3IodmFsdWUpIHsKKyAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICB2YWx1ZSA9IGdldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgICBy
ZXR1cm4gYWxsT3JOb3RoaW5nICYmICFpc0RlZmluZWQodmFsdWUpID8gdmFsdWUgOiBzdHJpbmdp
ZnkodmFsdWUpOworICAgICAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgICAkZXhjZXB0aW9u
SGFuZGxlcigkaW50ZXJwb2xhdGVNaW5FcnIuaW50ZXJyKHRleHQsIGVycikpOworICAgICAgICB9
CisgICAgICB9CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBAbmdkb2MgbWV0aG9kCisgICAg
ICogQG5hbWUgJGludGVycG9sYXRlI3N0YXJ0U3ltYm9sCisgICAgICogQGRlc2NyaXB0aW9uCisg
ICAgICogU3ltYm9sIHRvIGRlbm90ZSB0aGUgc3RhcnQgb2YgZXhwcmVzc2lvbiBpbiB0aGUgaW50
ZXJwb2xhdGVkIHN0cmluZy4gRGVmYXVsdHMgdG8gYHt7YC4KKyAgICAgKgorICAgICAqIFVzZSB7
QGxpbmsgbmcuJGludGVycG9sYXRlUHJvdmlkZXIjc3RhcnRTeW1ib2wgYCRpbnRlcnBvbGF0ZVBy
b3ZpZGVyLnN0YXJ0U3ltYm9sYH0gdG8gY2hhbmdlCisgICAgICogdGhlIHN5bWJvbC4KKyAgICAg
KgorICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IHN0YXJ0IHN5bWJvbC4KKyAgICAgKi8KKyAgICAk
aW50ZXJwb2xhdGUuc3RhcnRTeW1ib2wgPSBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiBzdGFy
dFN5bWJvbDsKKyAgICB9OworCisKKyAgICAvKioKKyAgICAgKiBAbmdkb2MgbWV0aG9kCisgICAg
ICogQG5hbWUgJGludGVycG9sYXRlI2VuZFN5bWJvbAorICAgICAqIEBkZXNjcmlwdGlvbgorICAg
ICAqIFN5bWJvbCB0byBkZW5vdGUgdGhlIGVuZCBvZiBleHByZXNzaW9uIGluIHRoZSBpbnRlcnBv
bGF0ZWQgc3RyaW5nLiBEZWZhdWx0cyB0byBgfX1gLgorICAgICAqCisgICAgICogVXNlIHtAbGlu
ayBuZy4kaW50ZXJwb2xhdGVQcm92aWRlciNlbmRTeW1ib2wgYCRpbnRlcnBvbGF0ZVByb3ZpZGVy
LmVuZFN5bWJvbGB9IHRvIGNoYW5nZQorICAgICAqIHRoZSBzeW1ib2wuCisgICAgICoKKyAgICAg
KiBAcmV0dXJucyB7c3RyaW5nfSBlbmQgc3ltYm9sLgorICAgICAqLworICAgICRpbnRlcnBvbGF0
ZS5lbmRTeW1ib2wgPSBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiBlbmRTeW1ib2w7CisgICAg
fTsKKworICAgIHJldHVybiAkaW50ZXJwb2xhdGU7CisgIH1dOworfQorCitmdW5jdGlvbiAkSW50
ZXJ2YWxQcm92aWRlcigpIHsKKyAgdGhpcy4kZ2V0ID0gWyckcm9vdFNjb3BlJywgJyR3aW5kb3cn
LCAnJHEnLCAnJCRxJywKKyAgICAgICBmdW5jdGlvbigkcm9vdFNjb3BlLCAgICR3aW5kb3csICAg
JHEsICAgJCRxKSB7CisgICAgdmFyIGludGVydmFscyA9IHt9OworCisKKyAgICAgLyoqCisgICAg
ICAqIEBuZ2RvYyBzZXJ2aWNlCisgICAgICAqIEBuYW1lICRpbnRlcnZhbAorICAgICAgKgorICAg
ICAgKiBAZGVzY3JpcHRpb24KKyAgICAgICogQW5ndWxhcidzIHdyYXBwZXIgZm9yIGB3aW5kb3cu
c2V0SW50ZXJ2YWxgLiBUaGUgYGZuYCBmdW5jdGlvbiBpcyBleGVjdXRlZCBldmVyeSBgZGVsYXlg
CisgICAgICAqIG1pbGxpc2Vjb25kcy4KKyAgICAgICoKKyAgICAgICogVGhlIHJldHVybiB2YWx1
ZSBvZiByZWdpc3RlcmluZyBhbiBpbnRlcnZhbCBmdW5jdGlvbiBpcyBhIHByb21pc2UuIFRoaXMg
cHJvbWlzZSB3aWxsIGJlCisgICAgICAqIG5vdGlmaWVkIHVwb24gZWFjaCB0aWNrIG9mIHRoZSBp
bnRlcnZhbCwgYW5kIHdpbGwgYmUgcmVzb2x2ZWQgYWZ0ZXIgYGNvdW50YCBpdGVyYXRpb25zLCBv
cgorICAgICAgKiBydW4gaW5kZWZpbml0ZWx5IGlmIGBjb3VudGAgaXMgbm90IGRlZmluZWQuIFRo
ZSB2YWx1ZSBvZiB0aGUgbm90aWZpY2F0aW9uIHdpbGwgYmUgdGhlCisgICAgICAqIG51bWJlciBv
ZiBpdGVyYXRpb25zIHRoYXQgaGF2ZSBydW4uCisgICAgICAqIFRvIGNhbmNlbCBhbiBpbnRlcnZh
bCwgY2FsbCBgJGludGVydmFsLmNhbmNlbChwcm9taXNlKWAuCisgICAgICAqCisgICAgICAqIElu
IHRlc3RzIHlvdSBjYW4gdXNlIHtAbGluayBuZ01vY2suJGludGVydmFsI2ZsdXNoIGAkaW50ZXJ2
YWwuZmx1c2gobWlsbGlzKWB9IHRvCisgICAgICAqIG1vdmUgZm9yd2FyZCBieSBgbWlsbGlzYCBt
aWxsaXNlY29uZHMgYW5kIHRyaWdnZXIgYW55IGZ1bmN0aW9ucyBzY2hlZHVsZWQgdG8gcnVuIGlu
IHRoYXQKKyAgICAgICogdGltZS4KKyAgICAgICoKKyAgICAgICogPGRpdiBjbGFzcz0iYWxlcnQg
YWxlcnQtd2FybmluZyI+CisgICAgICAqICoqTm90ZSoqOiBJbnRlcnZhbHMgY3JlYXRlZCBieSB0
aGlzIHNlcnZpY2UgbXVzdCBiZSBleHBsaWNpdGx5IGRlc3Ryb3llZCB3aGVuIHlvdSBhcmUgZmlu
aXNoZWQKKyAgICAgICogd2l0aCB0aGVtLiAgSW4gcGFydGljdWxhciB0aGV5IGFyZSBub3QgYXV0
b21hdGljYWxseSBkZXN0cm95ZWQgd2hlbiBhIGNvbnRyb2xsZXIncyBzY29wZSBvciBhCisgICAg
ICAqIGRpcmVjdGl2ZSdzIGVsZW1lbnQgYXJlIGRlc3Ryb3llZC4KKyAgICAgICogWW91IHNob3Vs
ZCB0YWtlIHRoaXMgaW50byBjb25zaWRlcmF0aW9uIGFuZCBtYWtlIHN1cmUgdG8gYWx3YXlzIGNh
bmNlbCB0aGUgaW50ZXJ2YWwgYXQgdGhlCisgICAgICAqIGFwcHJvcHJpYXRlIG1vbWVudC4gIFNl
ZSB0aGUgZXhhbXBsZSBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzIG9uIGhvdyBhbmQgd2hlbiB0byBk
byB0aGlzLgorICAgICAgKiA8L2Rpdj4KKyAgICAgICoKKyAgICAgICogQHBhcmFtIHtmdW5jdGlv
bigpfSBmbiBBIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIGNhbGxlZCByZXBlYXRlZGx5LgorICAg
ICAgKiBAcGFyYW0ge251bWJlcn0gZGVsYXkgTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBiZXR3ZWVu
IGVhY2ggZnVuY3Rpb24gY2FsbC4KKyAgICAgICogQHBhcmFtIHtudW1iZXI9fSBbY291bnQ9MF0g
TnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdC4gSWYgbm90IHNldCwgb3IgMCwgd2lsbCByZXBlYXQK
KyAgICAgICogICBpbmRlZmluaXRlbHkuCisgICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IFtpbnZv
a2VBcHBseT10cnVlXSBJZiBzZXQgdG8gYGZhbHNlYCBza2lwcyBtb2RlbCBkaXJ0eSBjaGVja2lu
Zywgb3RoZXJ3aXNlCisgICAgICAqICAgd2lsbCBpbnZva2UgYGZuYCB3aXRoaW4gdGhlIHtAbGlu
ayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRhcHBseSAkYXBwbHl9IGJsb2NrLgorICAgICAgKiBAcGFy
YW0gey4uLio9fSBQYXNzIGFkZGl0aW9uYWwgcGFyYW1ldGVycyB0byB0aGUgZXhlY3V0ZWQgZnVu
Y3Rpb24uCisgICAgICAqIEByZXR1cm5zIHtwcm9taXNlfSBBIHByb21pc2Ugd2hpY2ggd2lsbCBi
ZSBub3RpZmllZCBvbiBlYWNoIGl0ZXJhdGlvbi4KKyAgICAgICoKKyAgICAgICogQGV4YW1wbGUK
KyAgICAgICogPGV4YW1wbGUgbW9kdWxlPSJpbnRlcnZhbEV4YW1wbGUiPgorICAgICAgKiA8Zmls
ZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgICogICA8c2NyaXB0PgorICAgICAgKiAgICAgYW5n
dWxhci5tb2R1bGUoJ2ludGVydmFsRXhhbXBsZScsIFtdKQorICAgICAgKiAgICAgICAuY29udHJv
bGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsICckaW50ZXJ2YWwnLAorICAgICAg
KiAgICAgICAgIGZ1bmN0aW9uKCRzY29wZSwgJGludGVydmFsKSB7CisgICAgICAqICAgICAgICAg
ICAkc2NvcGUuZm9ybWF0ID0gJ00vZC95eSBoOm1tOnNzIGEnOworICAgICAgKiAgICAgICAgICAg
JHNjb3BlLmJsb29kXzEgPSAxMDA7CisgICAgICAqICAgICAgICAgICAkc2NvcGUuYmxvb2RfMiA9
IDEyMDsKKyAgICAgICoKKyAgICAgICogICAgICAgICAgIHZhciBzdG9wOworICAgICAgKiAgICAg
ICAgICAgJHNjb3BlLmZpZ2h0ID0gZnVuY3Rpb24oKSB7CisgICAgICAqICAgICAgICAgICAgIC8v
IERvbid0IHN0YXJ0IGEgbmV3IGZpZ2h0IGlmIHdlIGFyZSBhbHJlYWR5IGZpZ2h0aW5nCisgICAg
ICAqICAgICAgICAgICAgIGlmICggYW5ndWxhci5pc0RlZmluZWQoc3RvcCkgKSByZXR1cm47Cisg
ICAgICAqCisgICAgICAqICAgICAgICAgICAgIHN0b3AgPSAkaW50ZXJ2YWwoZnVuY3Rpb24oKSB7
CisgICAgICAqICAgICAgICAgICAgICAgaWYgKCRzY29wZS5ibG9vZF8xID4gMCAmJiAkc2NvcGUu
Ymxvb2RfMiA+IDApIHsKKyAgICAgICogICAgICAgICAgICAgICAgICRzY29wZS5ibG9vZF8xID0g
JHNjb3BlLmJsb29kXzEgLSAzOworICAgICAgKiAgICAgICAgICAgICAgICAgJHNjb3BlLmJsb29k
XzIgPSAkc2NvcGUuYmxvb2RfMiAtIDQ7CisgICAgICAqICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICogICAgICAgICAgICAgICAgICRzY29wZS5zdG9wRmlnaHQoKTsKKyAgICAgICogICAg
ICAgICAgICAgICB9CisgICAgICAqICAgICAgICAgICAgIH0sIDEwMCk7CisgICAgICAqICAgICAg
ICAgICB9OworICAgICAgKgorICAgICAgKiAgICAgICAgICAgJHNjb3BlLnN0b3BGaWdodCA9IGZ1
bmN0aW9uKCkgeworICAgICAgKiAgICAgICAgICAgICBpZiAoYW5ndWxhci5pc0RlZmluZWQoc3Rv
cCkpIHsKKyAgICAgICogICAgICAgICAgICAgICAkaW50ZXJ2YWwuY2FuY2VsKHN0b3ApOworICAg
ICAgKiAgICAgICAgICAgICAgIHN0b3AgPSB1bmRlZmluZWQ7CisgICAgICAqICAgICAgICAgICAg
IH0KKyAgICAgICogICAgICAgICAgIH07CisgICAgICAqCisgICAgICAqICAgICAgICAgICAkc2Nv
cGUucmVzZXRGaWdodCA9IGZ1bmN0aW9uKCkgeworICAgICAgKiAgICAgICAgICAgICAkc2NvcGUu
Ymxvb2RfMSA9IDEwMDsKKyAgICAgICogICAgICAgICAgICAgJHNjb3BlLmJsb29kXzIgPSAxMjA7
CisgICAgICAqICAgICAgICAgICB9OworICAgICAgKgorICAgICAgKiAgICAgICAgICAgJHNjb3Bl
LiRvbignJGRlc3Ryb3knLCBmdW5jdGlvbigpIHsKKyAgICAgICogICAgICAgICAgICAgLy8gTWFr
ZSBzdXJlIHRoYXQgdGhlIGludGVydmFsIGlzIGRlc3Ryb3llZCB0b28KKyAgICAgICogICAgICAg
ICAgICAgJHNjb3BlLnN0b3BGaWdodCgpOworICAgICAgKiAgICAgICAgICAgfSk7CisgICAgICAq
ICAgICAgICAgfV0pCisgICAgICAqICAgICAgIC8vIFJlZ2lzdGVyIHRoZSAnbXlDdXJyZW50VGlt
ZScgZGlyZWN0aXZlIGZhY3RvcnkgbWV0aG9kLgorICAgICAgKiAgICAgICAvLyBXZSBpbmplY3Qg
JGludGVydmFsIGFuZCBkYXRlRmlsdGVyIHNlcnZpY2Ugc2luY2UgdGhlIGZhY3RvcnkgbWV0aG9k
IGlzIERJLgorICAgICAgKiAgICAgICAuZGlyZWN0aXZlKCdteUN1cnJlbnRUaW1lJywgWyckaW50
ZXJ2YWwnLCAnZGF0ZUZpbHRlcicsCisgICAgICAqICAgICAgICAgZnVuY3Rpb24oJGludGVydmFs
LCBkYXRlRmlsdGVyKSB7CisgICAgICAqICAgICAgICAgICAvLyByZXR1cm4gdGhlIGRpcmVjdGl2
ZSBsaW5rIGZ1bmN0aW9uLiAoY29tcGlsZSBmdW5jdGlvbiBub3QgbmVlZGVkKQorICAgICAgKiAg
ICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRycykgeworICAgICAg
KiAgICAgICAgICAgICB2YXIgZm9ybWF0LCAgLy8gZGF0ZSBmb3JtYXQKKyAgICAgICogICAgICAg
ICAgICAgICAgIHN0b3BUaW1lOyAvLyBzbyB0aGF0IHdlIGNhbiBjYW5jZWwgdGhlIHRpbWUgdXBk
YXRlcworICAgICAgKgorICAgICAgKiAgICAgICAgICAgICAvLyB1c2VkIHRvIHVwZGF0ZSB0aGUg
VUkKKyAgICAgICogICAgICAgICAgICAgZnVuY3Rpb24gdXBkYXRlVGltZSgpIHsKKyAgICAgICog
ICAgICAgICAgICAgICBlbGVtZW50LnRleHQoZGF0ZUZpbHRlcihuZXcgRGF0ZSgpLCBmb3JtYXQp
KTsKKyAgICAgICogICAgICAgICAgICAgfQorICAgICAgKgorICAgICAgKiAgICAgICAgICAgICAv
LyB3YXRjaCB0aGUgZXhwcmVzc2lvbiwgYW5kIHVwZGF0ZSB0aGUgVUkgb24gY2hhbmdlLgorICAg
ICAgKiAgICAgICAgICAgICBzY29wZS4kd2F0Y2goYXR0cnMubXlDdXJyZW50VGltZSwgZnVuY3Rp
b24odmFsdWUpIHsKKyAgICAgICogICAgICAgICAgICAgICBmb3JtYXQgPSB2YWx1ZTsKKyAgICAg
ICogICAgICAgICAgICAgICB1cGRhdGVUaW1lKCk7CisgICAgICAqICAgICAgICAgICAgIH0pOwor
ICAgICAgKgorICAgICAgKiAgICAgICAgICAgICBzdG9wVGltZSA9ICRpbnRlcnZhbCh1cGRhdGVU
aW1lLCAxMDAwKTsKKyAgICAgICoKKyAgICAgICogICAgICAgICAgICAgLy8gbGlzdGVuIG9uIERP
TSBkZXN0cm95IChyZW1vdmFsKSBldmVudCwgYW5kIGNhbmNlbCB0aGUgbmV4dCBVSSB1cGRhdGUK
KyAgICAgICogICAgICAgICAgICAgLy8gdG8gcHJldmVudCB1cGRhdGluZyB0aW1lIGFmdGVyIHRo
ZSBET00gZWxlbWVudCB3YXMgcmVtb3ZlZC4KKyAgICAgICogICAgICAgICAgICAgZWxlbWVudC5v
bignJGRlc3Ryb3knLCBmdW5jdGlvbigpIHsKKyAgICAgICogICAgICAgICAgICAgICAkaW50ZXJ2
YWwuY2FuY2VsKHN0b3BUaW1lKTsKKyAgICAgICogICAgICAgICAgICAgfSk7CisgICAgICAqICAg
ICAgICAgICB9CisgICAgICAqICAgICAgICAgfV0pOworICAgICAgKiAgIDwvc2NyaXB0PgorICAg
ICAgKgorICAgICAgKiAgIDxkaXY+CisgICAgICAqICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9IkV4
YW1wbGVDb250cm9sbGVyIj4KKyAgICAgICogICAgICAgPGxhYmVsPkRhdGUgZm9ybWF0OiA8aW5w
dXQgbmctbW9kZWw9ImZvcm1hdCI+PC9sYWJlbD4gPGhyLz4KKyAgICAgICogICAgICAgQ3VycmVu
dCB0aW1lIGlzOiA8c3BhbiBteS1jdXJyZW50LXRpbWU9ImZvcm1hdCI+PC9zcGFuPgorICAgICAg
KiAgICAgICA8aHIvPgorICAgICAgKiAgICAgICBCbG9vZCAxIDogPGZvbnQgY29sb3I9J3JlZCc+
e3tibG9vZF8xfX08L2ZvbnQ+CisgICAgICAqICAgICAgIEJsb29kIDIgOiA8Zm9udCBjb2xvcj0n
cmVkJz57e2Jsb29kXzJ9fTwvZm9udD4KKyAgICAgICogICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0
b24iIGRhdGEtbmctY2xpY2s9ImZpZ2h0KCkiPkZpZ2h0PC9idXR0b24+CisgICAgICAqICAgICAg
IDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLW5nLWNsaWNrPSJzdG9wRmlnaHQoKSI+U3RvcEZp
Z2h0PC9idXR0b24+CisgICAgICAqICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLW5n
LWNsaWNrPSJyZXNldEZpZ2h0KCkiPnJlc2V0RmlnaHQ8L2J1dHRvbj4KKyAgICAgICogICAgIDwv
ZGl2PgorICAgICAgKiAgIDwvZGl2PgorICAgICAgKgorICAgICAgKiA8L2ZpbGU+CisgICAgICAq
IDwvZXhhbXBsZT4KKyAgICAgICovCisgICAgZnVuY3Rpb24gaW50ZXJ2YWwoZm4sIGRlbGF5LCBj
b3VudCwgaW52b2tlQXBwbHkpIHsKKyAgICAgIHZhciBoYXNQYXJhbXMgPSBhcmd1bWVudHMubGVu
Z3RoID4gNCwKKyAgICAgICAgICBhcmdzID0gaGFzUGFyYW1zID8gc2xpY2VBcmdzKGFyZ3VtZW50
cywgNCkgOiBbXSwKKyAgICAgICAgICBzZXRJbnRlcnZhbCA9ICR3aW5kb3cuc2V0SW50ZXJ2YWws
CisgICAgICAgICAgY2xlYXJJbnRlcnZhbCA9ICR3aW5kb3cuY2xlYXJJbnRlcnZhbCwKKyAgICAg
ICAgICBpdGVyYXRpb24gPSAwLAorICAgICAgICAgIHNraXBBcHBseSA9IChpc0RlZmluZWQoaW52
b2tlQXBwbHkpICYmICFpbnZva2VBcHBseSksCisgICAgICAgICAgZGVmZXJyZWQgPSAoc2tpcEFw
cGx5ID8gJCRxIDogJHEpLmRlZmVyKCksCisgICAgICAgICAgcHJvbWlzZSA9IGRlZmVycmVkLnBy
b21pc2U7CisKKyAgICAgIGNvdW50ID0gaXNEZWZpbmVkKGNvdW50KSA/IGNvdW50IDogMDsKKwor
ICAgICAgcHJvbWlzZS50aGVuKG51bGwsIG51bGwsICghaGFzUGFyYW1zKSA/IGZuIDogZnVuY3Rp
b24oKSB7CisgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MpOworICAgICAgfSk7CisKKyAgICAg
IHByb21pc2UuJCRpbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gdGljaygpIHsKKyAg
ICAgICAgZGVmZXJyZWQubm90aWZ5KGl0ZXJhdGlvbisrKTsKKworICAgICAgICBpZiAoY291bnQg
PiAwICYmIGl0ZXJhdGlvbiA+PSBjb3VudCkgeworICAgICAgICAgIGRlZmVycmVkLnJlc29sdmUo
aXRlcmF0aW9uKTsKKyAgICAgICAgICBjbGVhckludGVydmFsKHByb21pc2UuJCRpbnRlcnZhbElk
KTsKKyAgICAgICAgICBkZWxldGUgaW50ZXJ2YWxzW3Byb21pc2UuJCRpbnRlcnZhbElkXTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICghc2tpcEFwcGx5KSAkcm9vdFNjb3BlLiRhcHBseSgpOwor
CisgICAgICB9LCBkZWxheSk7CisKKyAgICAgIGludGVydmFsc1twcm9taXNlLiQkaW50ZXJ2YWxJ
ZF0gPSBkZWZlcnJlZDsKKworICAgICAgcmV0dXJuIHByb21pc2U7CisgICAgfQorCisKKyAgICAg
LyoqCisgICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgICogQG5hbWUgJGludGVydmFsI2NhbmNl
bAorICAgICAgKgorICAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgICogQ2FuY2VscyBhIHRhc2sg
YXNzb2NpYXRlZCB3aXRoIHRoZSBgcHJvbWlzZWAuCisgICAgICAqCisgICAgICAqIEBwYXJhbSB7
cHJvbWlzZX0gcHJvbWlzZSByZXR1cm5lZCBieSB0aGUgYCRpbnRlcnZhbGAgZnVuY3Rpb24uCisg
ICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdGFzayB3YXMg
c3VjY2Vzc2Z1bGx5IGNhbmNlbGVkLgorICAgICAgKi8KKyAgICBpbnRlcnZhbC5jYW5jZWwgPSBm
dW5jdGlvbihwcm9taXNlKSB7CisgICAgICBpZiAocHJvbWlzZSAmJiBwcm9taXNlLiQkaW50ZXJ2
YWxJZCBpbiBpbnRlcnZhbHMpIHsKKyAgICAgICAgaW50ZXJ2YWxzW3Byb21pc2UuJCRpbnRlcnZh
bElkXS5yZWplY3QoJ2NhbmNlbGVkJyk7CisgICAgICAgICR3aW5kb3cuY2xlYXJJbnRlcnZhbChw
cm9taXNlLiQkaW50ZXJ2YWxJZCk7CisgICAgICAgIGRlbGV0ZSBpbnRlcnZhbHNbcHJvbWlzZS4k
JGludGVydmFsSWRdOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9OworCisgICAgcmV0dXJuIGludGVydmFsOworICB9XTsKK30KKworLyoq
CisgKiBAbmdkb2Mgc2VydmljZQorICogQG5hbWUgJGxvY2FsZQorICoKKyAqIEBkZXNjcmlwdGlv
bgorICogJGxvY2FsZSBzZXJ2aWNlIHByb3ZpZGVzIGxvY2FsaXphdGlvbiBydWxlcyBmb3IgdmFy
aW91cyBBbmd1bGFyIGNvbXBvbmVudHMuIEFzIG9mIHJpZ2h0IG5vdyB0aGUKKyAqIG9ubHkgcHVi
bGljIGFwaSBpczoKKyAqCisgKiAqIGBpZGAg4oCTIGB7c3RyaW5nfWAg4oCTIGxvY2FsZSBpZCBm
b3JtYXR0ZWQgYXMgYGxhbmd1YWdlSWQtY291bnRyeUlkYCAoZS5nLiBgZW4tdXNgKQorICovCitm
dW5jdGlvbiAkTG9jYWxlUHJvdmlkZXIoKSB7CisgIHRoaXMuJGdldCA9IGZ1bmN0aW9uKCkgewor
ICAgIHJldHVybiB7CisgICAgICBpZDogJ2VuLXVzJywKKworICAgICAgTlVNQkVSX0ZPUk1BVFM6
IHsKKyAgICAgICAgREVDSU1BTF9TRVA6ICcuJywKKyAgICAgICAgR1JPVVBfU0VQOiAnLCcsCisg
ICAgICAgIFBBVFRFUk5TOiBbCisgICAgICAgICAgeyAvLyBEZWNpbWFsIFBhdHRlcm4KKyAgICAg
ICAgICAgIG1pbkludDogMSwKKyAgICAgICAgICAgIG1pbkZyYWM6IDAsCisgICAgICAgICAgICBt
YXhGcmFjOiAzLAorICAgICAgICAgICAgcG9zUHJlOiAnJywKKyAgICAgICAgICAgIHBvc1N1Zjog
JycsCisgICAgICAgICAgICBuZWdQcmU6ICctJywKKyAgICAgICAgICAgIG5lZ1N1ZjogJycsCisg
ICAgICAgICAgICBnU2l6ZTogMywKKyAgICAgICAgICAgIGxnU2l6ZTogMworICAgICAgICAgIH0s
eyAvL0N1cnJlbmN5IFBhdHRlcm4KKyAgICAgICAgICAgIG1pbkludDogMSwKKyAgICAgICAgICAg
IG1pbkZyYWM6IDIsCisgICAgICAgICAgICBtYXhGcmFjOiAyLAorICAgICAgICAgICAgcG9zUHJl
OiAnXHUwMEE0JywKKyAgICAgICAgICAgIHBvc1N1ZjogJycsCisgICAgICAgICAgICBuZWdQcmU6
ICcoXHUwMEE0JywKKyAgICAgICAgICAgIG5lZ1N1ZjogJyknLAorICAgICAgICAgICAgZ1NpemU6
IDMsCisgICAgICAgICAgICBsZ1NpemU6IDMKKyAgICAgICAgICB9CisgICAgICAgIF0sCisgICAg
ICAgIENVUlJFTkNZX1NZTTogJyQnCisgICAgICB9LAorCisgICAgICBEQVRFVElNRV9GT1JNQVRT
OiB7CisgICAgICAgIE1PTlRIOgorICAgICAgICAgICAgJ0phbnVhcnksRmVicnVhcnksTWFyY2gs
QXByaWwsTWF5LEp1bmUsSnVseSxBdWd1c3QsU2VwdGVtYmVyLE9jdG9iZXIsTm92ZW1iZXIsRGVj
ZW1iZXInCisgICAgICAgICAgICAuc3BsaXQoJywnKSwKKyAgICAgICAgU0hPUlRNT05USDogICdK
YW4sRmViLE1hcixBcHIsTWF5LEp1bixKdWwsQXVnLFNlcCxPY3QsTm92LERlYycuc3BsaXQoJywn
KSwKKyAgICAgICAgREFZOiAnU3VuZGF5LE1vbmRheSxUdWVzZGF5LFdlZG5lc2RheSxUaHVyc2Rh
eSxGcmlkYXksU2F0dXJkYXknLnNwbGl0KCcsJyksCisgICAgICAgIFNIT1JUREFZOiAnU3VuLE1v
bixUdWUsV2VkLFRodSxGcmksU2F0Jy5zcGxpdCgnLCcpLAorICAgICAgICBBTVBNUzogWydBTScs
J1BNJ10sCisgICAgICAgIG1lZGl1bTogJ01NTSBkLCB5IGg6bW06c3MgYScsCisgICAgICAgICdz
aG9ydCc6ICdNL2QveXkgaDptbSBhJywKKyAgICAgICAgZnVsbERhdGU6ICdFRUVFLCBNTU1NIGQs
IHknLAorICAgICAgICBsb25nRGF0ZTogJ01NTU0gZCwgeScsCisgICAgICAgIG1lZGl1bURhdGU6
ICdNTU0gZCwgeScsCisgICAgICAgIHNob3J0RGF0ZTogJ00vZC95eScsCisgICAgICAgIG1lZGl1
bVRpbWU6ICdoOm1tOnNzIGEnLAorICAgICAgICBzaG9ydFRpbWU6ICdoOm1tIGEnLAorICAgICAg
ICBFUkFOQU1FUzogWworICAgICAgICAgICJCZWZvcmUgQ2hyaXN0IiwKKyAgICAgICAgICAiQW5u
byBEb21pbmkiCisgICAgICAgIF0sCisgICAgICAgIEVSQVM6IFsKKyAgICAgICAgICAiQkMiLAor
ICAgICAgICAgICJBRCIKKyAgICAgICAgXQorICAgICAgfSwKKworICAgICAgcGx1cmFsQ2F0OiBm
dW5jdGlvbihudW0pIHsKKyAgICAgICAgaWYgKG51bSA9PT0gMSkgeworICAgICAgICAgIHJldHVy
biAnb25lJzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gJ290aGVyJzsKKyAgICAgIH0KKyAg
ICB9OworICB9OworfQorCit2YXIgUEFUSF9NQVRDSCA9IC9eKFteXD8jXSopKFw/KFteI10qKSk/
KCMoLiopKT8kLywKKyAgICBERUZBVUxUX1BPUlRTID0geydodHRwJzogODAsICdodHRwcyc6IDQ0
MywgJ2Z0cCc6IDIxfTsKK3ZhciAkbG9jYXRpb25NaW5FcnIgPSBtaW5FcnIoJyRsb2NhdGlvbicp
OworCisKKy8qKgorICogRW5jb2RlIHBhdGggdXNpbmcgZW5jb2RlVXJpU2VnbWVudCwgaWdub3Jp
bmcgZm9yd2FyZCBzbGFzaGVzCisgKgorICogQHBhcmFtIHtzdHJpbmd9IHBhdGggUGF0aCB0byBl
bmNvZGUKKyAqIEByZXR1cm5zIHtzdHJpbmd9CisgKi8KK2Z1bmN0aW9uIGVuY29kZVBhdGgocGF0
aCkgeworICB2YXIgc2VnbWVudHMgPSBwYXRoLnNwbGl0KCcvJyksCisgICAgICBpID0gc2VnbWVu
dHMubGVuZ3RoOworCisgIHdoaWxlIChpLS0pIHsKKyAgICBzZWdtZW50c1tpXSA9IGVuY29kZVVy
aVNlZ21lbnQoc2VnbWVudHNbaV0pOworICB9CisKKyAgcmV0dXJuIHNlZ21lbnRzLmpvaW4oJy8n
KTsKK30KKworZnVuY3Rpb24gcGFyc2VBYnNvbHV0ZVVybChhYnNvbHV0ZVVybCwgbG9jYXRpb25P
YmopIHsKKyAgdmFyIHBhcnNlZFVybCA9IHVybFJlc29sdmUoYWJzb2x1dGVVcmwpOworCisgIGxv
Y2F0aW9uT2JqLiQkcHJvdG9jb2wgPSBwYXJzZWRVcmwucHJvdG9jb2w7CisgIGxvY2F0aW9uT2Jq
LiQkaG9zdCA9IHBhcnNlZFVybC5ob3N0bmFtZTsKKyAgbG9jYXRpb25PYmouJCRwb3J0ID0gdG9J
bnQocGFyc2VkVXJsLnBvcnQpIHx8IERFRkFVTFRfUE9SVFNbcGFyc2VkVXJsLnByb3RvY29sXSB8
fCBudWxsOworfQorCisKK2Z1bmN0aW9uIHBhcnNlQXBwVXJsKHJlbGF0aXZlVXJsLCBsb2NhdGlv
bk9iaikgeworICB2YXIgcHJlZml4ZWQgPSAocmVsYXRpdmVVcmwuY2hhckF0KDApICE9PSAnLycp
OworICBpZiAocHJlZml4ZWQpIHsKKyAgICByZWxhdGl2ZVVybCA9ICcvJyArIHJlbGF0aXZlVXJs
OworICB9CisgIHZhciBtYXRjaCA9IHVybFJlc29sdmUocmVsYXRpdmVVcmwpOworICBsb2NhdGlv
bk9iai4kJHBhdGggPSBkZWNvZGVVUklDb21wb25lbnQocHJlZml4ZWQgJiYgbWF0Y2gucGF0aG5h
bWUuY2hhckF0KDApID09PSAnLycgPworICAgICAgbWF0Y2gucGF0aG5hbWUuc3Vic3RyaW5nKDEp
IDogbWF0Y2gucGF0aG5hbWUpOworICBsb2NhdGlvbk9iai4kJHNlYXJjaCA9IHBhcnNlS2V5VmFs
dWUobWF0Y2guc2VhcmNoKTsKKyAgbG9jYXRpb25PYmouJCRoYXNoID0gZGVjb2RlVVJJQ29tcG9u
ZW50KG1hdGNoLmhhc2gpOworCisgIC8vIG1ha2Ugc3VyZSBwYXRoIHN0YXJ0cyB3aXRoICcvJzsK
KyAgaWYgKGxvY2F0aW9uT2JqLiQkcGF0aCAmJiBsb2NhdGlvbk9iai4kJHBhdGguY2hhckF0KDAp
ICE9ICcvJykgeworICAgIGxvY2F0aW9uT2JqLiQkcGF0aCA9ICcvJyArIGxvY2F0aW9uT2JqLiQk
cGF0aDsKKyAgfQorfQorCisKKy8qKgorICoKKyAqIEBwYXJhbSB7c3RyaW5nfSBiZWdpbgorICog
QHBhcmFtIHtzdHJpbmd9IHdob2xlCisgKiBAcmV0dXJucyB7c3RyaW5nfSByZXR1cm5zIHRleHQg
ZnJvbSB3aG9sZSBhZnRlciBiZWdpbiBvciB1bmRlZmluZWQgaWYgaXQgZG9lcyBub3QgYmVnaW4g
d2l0aAorICogICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgc3RyaW5nLgorICovCitmdW5jdGlv
biBiZWdpbnNXaXRoKGJlZ2luLCB3aG9sZSkgeworICBpZiAod2hvbGUuaW5kZXhPZihiZWdpbikg
PT09IDApIHsKKyAgICByZXR1cm4gd2hvbGUuc3Vic3RyKGJlZ2luLmxlbmd0aCk7CisgIH0KK30K
KworCitmdW5jdGlvbiBzdHJpcEhhc2godXJsKSB7CisgIHZhciBpbmRleCA9IHVybC5pbmRleE9m
KCcjJyk7CisgIHJldHVybiBpbmRleCA9PSAtMSA/IHVybCA6IHVybC5zdWJzdHIoMCwgaW5kZXgp
OworfQorCitmdW5jdGlvbiB0cmltRW1wdHlIYXNoKHVybCkgeworICByZXR1cm4gdXJsLnJlcGxh
Y2UoLygjLispfCMkLywgJyQxJyk7Cit9CisKKworZnVuY3Rpb24gc3RyaXBGaWxlKHVybCkgewor
ICByZXR1cm4gdXJsLnN1YnN0cigwLCBzdHJpcEhhc2godXJsKS5sYXN0SW5kZXhPZignLycpICsg
MSk7Cit9CisKKy8qIHJldHVybiB0aGUgc2VydmVyIG9ubHkgKHNjaGVtZTovL2hvc3Q6cG9ydCkg
Ki8KK2Z1bmN0aW9uIHNlcnZlckJhc2UodXJsKSB7CisgIHJldHVybiB1cmwuc3Vic3RyaW5nKDAs
IHVybC5pbmRleE9mKCcvJywgdXJsLmluZGV4T2YoJy8vJykgKyAyKSk7Cit9CisKKworLyoqCisg
KiBMb2NhdGlvbkh0bWw1VXJsIHJlcHJlc2VudHMgYW4gdXJsCisgKiBUaGlzIG9iamVjdCBpcyBl
eHBvc2VkIGFzICRsb2NhdGlvbiBzZXJ2aWNlIHdoZW4gSFRNTDUgbW9kZSBpcyBlbmFibGVkIGFu
ZCBzdXBwb3J0ZWQKKyAqCisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7c3RyaW5nfSBhcHBC
YXNlIGFwcGxpY2F0aW9uIGJhc2UgVVJMCisgKiBAcGFyYW0ge3N0cmluZ30gYmFzZVByZWZpeCB1
cmwgcGF0aCBwcmVmaXgKKyAqLworZnVuY3Rpb24gTG9jYXRpb25IdG1sNVVybChhcHBCYXNlLCBi
YXNlUHJlZml4KSB7CisgIHRoaXMuJCRodG1sNSA9IHRydWU7CisgIGJhc2VQcmVmaXggPSBiYXNl
UHJlZml4IHx8ICcnOworICB2YXIgYXBwQmFzZU5vRmlsZSA9IHN0cmlwRmlsZShhcHBCYXNlKTsK
KyAgcGFyc2VBYnNvbHV0ZVVybChhcHBCYXNlLCB0aGlzKTsKKworCisgIC8qKgorICAgKiBQYXJz
ZSBnaXZlbiBodG1sNSAocmVndWxhcikgdXJsIHN0cmluZyBpbnRvIHByb3BlcnRpZXMKKyAgICog
QHBhcmFtIHtzdHJpbmd9IHVybCBIVE1MNSB1cmwKKyAgICogQHByaXZhdGUKKyAgICovCisgIHRo
aXMuJCRwYXJzZSA9IGZ1bmN0aW9uKHVybCkgeworICAgIHZhciBwYXRoVXJsID0gYmVnaW5zV2l0
aChhcHBCYXNlTm9GaWxlLCB1cmwpOworICAgIGlmICghaXNTdHJpbmcocGF0aFVybCkpIHsKKyAg
ICAgIHRocm93ICRsb2NhdGlvbk1pbkVycignaXB0aHByZngnLCAnSW52YWxpZCB1cmwgInswfSIs
IG1pc3NpbmcgcGF0aCBwcmVmaXggInsxfSIuJywgdXJsLAorICAgICAgICAgIGFwcEJhc2VOb0Zp
bGUpOworICAgIH0KKworICAgIHBhcnNlQXBwVXJsKHBhdGhVcmwsIHRoaXMpOworCisgICAgaWYg
KCF0aGlzLiQkcGF0aCkgeworICAgICAgdGhpcy4kJHBhdGggPSAnLyc7CisgICAgfQorCisgICAg
dGhpcy4kJGNvbXBvc2UoKTsKKyAgfTsKKworICAvKioKKyAgICogQ29tcG9zZSB1cmwgYW5kIHVw
ZGF0ZSBgYWJzVXJsYCBwcm9wZXJ0eQorICAgKiBAcHJpdmF0ZQorICAgKi8KKyAgdGhpcy4kJGNv
bXBvc2UgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgc2VhcmNoID0gdG9LZXlWYWx1ZSh0aGlzLiQk
c2VhcmNoKSwKKyAgICAgICAgaGFzaCA9IHRoaXMuJCRoYXNoID8gJyMnICsgZW5jb2RlVXJpU2Vn
bWVudCh0aGlzLiQkaGFzaCkgOiAnJzsKKworICAgIHRoaXMuJCR1cmwgPSBlbmNvZGVQYXRoKHRo
aXMuJCRwYXRoKSArIChzZWFyY2ggPyAnPycgKyBzZWFyY2ggOiAnJykgKyBoYXNoOworICAgIHRo
aXMuJCRhYnNVcmwgPSBhcHBCYXNlTm9GaWxlICsgdGhpcy4kJHVybC5zdWJzdHIoMSk7IC8vIGZp
cnN0IGNoYXIgaXMgYWx3YXlzICcvJworICB9OworCisgIHRoaXMuJCRwYXJzZUxpbmtVcmwgPSBm
dW5jdGlvbih1cmwsIHJlbEhyZWYpIHsKKyAgICBpZiAocmVsSHJlZiAmJiByZWxIcmVmWzBdID09
PSAnIycpIHsKKyAgICAgIC8vIHNwZWNpYWwgY2FzZSBmb3IgbGlua3MgdG8gaGFzaCBmcmFnbWVu
dHM6CisgICAgICAvLyBrZWVwIHRoZSBvbGQgdXJsIGFuZCBvbmx5IHJlcGxhY2UgdGhlIGhhc2gg
ZnJhZ21lbnQKKyAgICAgIHRoaXMuaGFzaChyZWxIcmVmLnNsaWNlKDEpKTsKKyAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICB2YXIgYXBwVXJsLCBwcmV2QXBwVXJsOworICAgIHZhciByZXdy
aXR0ZW5Vcmw7CisKKyAgICBpZiAoKGFwcFVybCA9IGJlZ2luc1dpdGgoYXBwQmFzZSwgdXJsKSkg
IT09IHVuZGVmaW5lZCkgeworICAgICAgcHJldkFwcFVybCA9IGFwcFVybDsKKyAgICAgIGlmICgo
YXBwVXJsID0gYmVnaW5zV2l0aChiYXNlUHJlZml4LCBhcHBVcmwpKSAhPT0gdW5kZWZpbmVkKSB7
CisgICAgICAgIHJld3JpdHRlblVybCA9IGFwcEJhc2VOb0ZpbGUgKyAoYmVnaW5zV2l0aCgnLycs
IGFwcFVybCkgfHwgYXBwVXJsKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJld3JpdHRlblVy
bCA9IGFwcEJhc2UgKyBwcmV2QXBwVXJsOworICAgICAgfQorICAgIH0gZWxzZSBpZiAoKGFwcFVy
bCA9IGJlZ2luc1dpdGgoYXBwQmFzZU5vRmlsZSwgdXJsKSkgIT09IHVuZGVmaW5lZCkgeworICAg
ICAgcmV3cml0dGVuVXJsID0gYXBwQmFzZU5vRmlsZSArIGFwcFVybDsKKyAgICB9IGVsc2UgaWYg
KGFwcEJhc2VOb0ZpbGUgPT0gdXJsICsgJy8nKSB7CisgICAgICByZXdyaXR0ZW5VcmwgPSBhcHBC
YXNlTm9GaWxlOworICAgIH0KKyAgICBpZiAocmV3cml0dGVuVXJsKSB7CisgICAgICB0aGlzLiQk
cGFyc2UocmV3cml0dGVuVXJsKTsKKyAgICB9CisgICAgcmV0dXJuICEhcmV3cml0dGVuVXJsOwor
ICB9OworfQorCisKKy8qKgorICogTG9jYXRpb25IYXNoYmFuZ1VybCByZXByZXNlbnRzIHVybAor
ICogVGhpcyBvYmplY3QgaXMgZXhwb3NlZCBhcyAkbG9jYXRpb24gc2VydmljZSB3aGVuIGRldmVs
b3BlciBkb2Vzbid0IG9wdCBpbnRvIGh0bWw1IG1vZGUuCisgKiBJdCBhbHNvIHNlcnZlcyBhcyB0
aGUgYmFzZSBjbGFzcyBmb3IgaHRtbDUgbW9kZSBmYWxsYmFjayBvbiBsZWdhY3kgYnJvd3NlcnMu
CisgKgorICogQGNvbnN0cnVjdG9yCisgKiBAcGFyYW0ge3N0cmluZ30gYXBwQmFzZSBhcHBsaWNh
dGlvbiBiYXNlIFVSTAorICogQHBhcmFtIHtzdHJpbmd9IGhhc2hQcmVmaXggaGFzaGJhbmcgcHJl
Zml4CisgKi8KK2Z1bmN0aW9uIExvY2F0aW9uSGFzaGJhbmdVcmwoYXBwQmFzZSwgaGFzaFByZWZp
eCkgeworICB2YXIgYXBwQmFzZU5vRmlsZSA9IHN0cmlwRmlsZShhcHBCYXNlKTsKKworICBwYXJz
ZUFic29sdXRlVXJsKGFwcEJhc2UsIHRoaXMpOworCisKKyAgLyoqCisgICAqIFBhcnNlIGdpdmVu
IGhhc2hiYW5nIHVybCBpbnRvIHByb3BlcnRpZXMKKyAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBI
YXNoYmFuZyB1cmwKKyAgICogQHByaXZhdGUKKyAgICovCisgIHRoaXMuJCRwYXJzZSA9IGZ1bmN0
aW9uKHVybCkgeworICAgIHZhciB3aXRob3V0QmFzZVVybCA9IGJlZ2luc1dpdGgoYXBwQmFzZSwg
dXJsKSB8fCBiZWdpbnNXaXRoKGFwcEJhc2VOb0ZpbGUsIHVybCk7CisgICAgdmFyIHdpdGhvdXRI
YXNoVXJsOworCisgICAgaWYgKCFpc1VuZGVmaW5lZCh3aXRob3V0QmFzZVVybCkgJiYgd2l0aG91
dEJhc2VVcmwuY2hhckF0KDApID09PSAnIycpIHsKKworICAgICAgLy8gVGhlIHJlc3Qgb2YgdGhl
IHVybCBzdGFydHMgd2l0aCBhIGhhc2ggc28gd2UgaGF2ZQorICAgICAgLy8gZ290IGVpdGhlciBh
IGhhc2hiYW5nIHBhdGggb3IgYSBwbGFpbiBoYXNoIGZyYWdtZW50CisgICAgICB3aXRob3V0SGFz
aFVybCA9IGJlZ2luc1dpdGgoaGFzaFByZWZpeCwgd2l0aG91dEJhc2VVcmwpOworICAgICAgaWYg
KGlzVW5kZWZpbmVkKHdpdGhvdXRIYXNoVXJsKSkgeworICAgICAgICAvLyBUaGVyZSB3YXMgbm8g
aGFzaGJhbmcgcHJlZml4IHNvIHdlIGp1c3QgaGF2ZSBhIGhhc2ggZnJhZ21lbnQKKyAgICAgICAg
d2l0aG91dEhhc2hVcmwgPSB3aXRob3V0QmFzZVVybDsKKyAgICAgIH0KKworICAgIH0gZWxzZSB7
CisgICAgICAvLyBUaGVyZSB3YXMgbm8gaGFzaGJhbmcgcGF0aCBub3IgaGFzaCBmcmFnbWVudDoK
KyAgICAgIC8vIElmIHdlIGFyZSBpbiBIVE1MNSBtb2RlIHdlIHVzZSB3aGF0IGlzIGxlZnQgYXMg
dGhlIHBhdGg7CisgICAgICAvLyBPdGhlcndpc2Ugd2UgaWdub3JlIHdoYXQgaXMgbGVmdAorICAg
ICAgaWYgKHRoaXMuJCRodG1sNSkgeworICAgICAgICB3aXRob3V0SGFzaFVybCA9IHdpdGhvdXRC
YXNlVXJsOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgd2l0aG91dEhhc2hVcmwgPSAnJzsKKyAg
ICAgICAgaWYgKGlzVW5kZWZpbmVkKHdpdGhvdXRCYXNlVXJsKSkgeworICAgICAgICAgIGFwcEJh
c2UgPSB1cmw7CisgICAgICAgICAgdGhpcy5yZXBsYWNlKCk7CisgICAgICAgIH0KKyAgICAgIH0K
KyAgICB9CisKKyAgICBwYXJzZUFwcFVybCh3aXRob3V0SGFzaFVybCwgdGhpcyk7CisKKyAgICB0
aGlzLiQkcGF0aCA9IHJlbW92ZVdpbmRvd3NEcml2ZU5hbWUodGhpcy4kJHBhdGgsIHdpdGhvdXRI
YXNoVXJsLCBhcHBCYXNlKTsKKworICAgIHRoaXMuJCRjb21wb3NlKCk7CisKKyAgICAvKgorICAg
ICAqIEluIFdpbmRvd3MsIG9uIGFuIGFuY2hvciBub2RlIG9uIGRvY3VtZW50cyBsb2FkZWQgZnJv
bQorICAgICAqIHRoZSBmaWxlc3lzdGVtLCB0aGUgYnJvd3NlciB3aWxsIHJldHVybiBhIHBhdGhu
YW1lCisgICAgICogcHJlZml4ZWQgd2l0aCB0aGUgZHJpdmUgbmFtZSAoJy9DOi9wYXRoJykgd2hl
biBhCisgICAgICogcGF0aG5hbWUgd2l0aG91dCBhIGRyaXZlIGlzIHNldDoKKyAgICAgKiAgKiBh
LnNldEF0dHJpYnV0ZSgnaHJlZicsICcvZm9vJykKKyAgICAgKiAgICogYS5wYXRobmFtZSA9PT0g
Jy9DOi9mb28nIC8vdHJ1ZQorICAgICAqCisgICAgICogSW5zaWRlIG9mIEFuZ3VsYXIsIHdlJ3Jl
IGFsd2F5cyB1c2luZyBwYXRobmFtZXMgdGhhdAorICAgICAqIGRvIG5vdCBpbmNsdWRlIGRyaXZl
IG5hbWVzIGZvciByb3V0aW5nLgorICAgICAqLworICAgIGZ1bmN0aW9uIHJlbW92ZVdpbmRvd3NE
cml2ZU5hbWUocGF0aCwgdXJsLCBiYXNlKSB7CisgICAgICAvKgorICAgICAgTWF0Y2hlcyBwYXRo
cyBmb3IgZmlsZSBwcm90b2NvbCBvbiB3aW5kb3dzLAorICAgICAgc3VjaCBhcyAvQzovZm9vL2Jh
ciwgYW5kIGNhcHR1cmVzIG9ubHkgL2Zvby9iYXIuCisgICAgICAqLworICAgICAgdmFyIHdpbmRv
d3NGaWxlUGF0aEV4cCA9IC9eXC9bQS1aXTooXC8uKikvOworCisgICAgICB2YXIgZmlyc3RQYXRo
U2VnbWVudE1hdGNoOworCisgICAgICAvL0dldCB0aGUgcmVsYXRpdmUgcGF0aCBmcm9tIHRoZSBp
bnB1dCBVUkwuCisgICAgICBpZiAodXJsLmluZGV4T2YoYmFzZSkgPT09IDApIHsKKyAgICAgICAg
dXJsID0gdXJsLnJlcGxhY2UoYmFzZSwgJycpOworICAgICAgfQorCisgICAgICAvLyBUaGUgaW5w
dXQgVVJMIGludGVudGlvbmFsbHkgY29udGFpbnMgYSBmaXJzdCBwYXRoIHNlZ21lbnQgdGhhdCBl
bmRzIHdpdGggYSBjb2xvbi4KKyAgICAgIGlmICh3aW5kb3dzRmlsZVBhdGhFeHAuZXhlYyh1cmwp
KSB7CisgICAgICAgIHJldHVybiBwYXRoOworICAgICAgfQorCisgICAgICBmaXJzdFBhdGhTZWdt
ZW50TWF0Y2ggPSB3aW5kb3dzRmlsZVBhdGhFeHAuZXhlYyhwYXRoKTsKKyAgICAgIHJldHVybiBm
aXJzdFBhdGhTZWdtZW50TWF0Y2ggPyBmaXJzdFBhdGhTZWdtZW50TWF0Y2hbMV0gOiBwYXRoOwor
ICAgIH0KKyAgfTsKKworICAvKioKKyAgICogQ29tcG9zZSBoYXNoYmFuZyB1cmwgYW5kIHVwZGF0
ZSBgYWJzVXJsYCBwcm9wZXJ0eQorICAgKiBAcHJpdmF0ZQorICAgKi8KKyAgdGhpcy4kJGNvbXBv
c2UgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgc2VhcmNoID0gdG9LZXlWYWx1ZSh0aGlzLiQkc2Vh
cmNoKSwKKyAgICAgICAgaGFzaCA9IHRoaXMuJCRoYXNoID8gJyMnICsgZW5jb2RlVXJpU2VnbWVu
dCh0aGlzLiQkaGFzaCkgOiAnJzsKKworICAgIHRoaXMuJCR1cmwgPSBlbmNvZGVQYXRoKHRoaXMu
JCRwYXRoKSArIChzZWFyY2ggPyAnPycgKyBzZWFyY2ggOiAnJykgKyBoYXNoOworICAgIHRoaXMu
JCRhYnNVcmwgPSBhcHBCYXNlICsgKHRoaXMuJCR1cmwgPyBoYXNoUHJlZml4ICsgdGhpcy4kJHVy
bCA6ICcnKTsKKyAgfTsKKworICB0aGlzLiQkcGFyc2VMaW5rVXJsID0gZnVuY3Rpb24odXJsLCBy
ZWxIcmVmKSB7CisgICAgaWYgKHN0cmlwSGFzaChhcHBCYXNlKSA9PSBzdHJpcEhhc2godXJsKSkg
eworICAgICAgdGhpcy4kJHBhcnNlKHVybCk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgcmV0dXJuIGZhbHNlOworICB9OworfQorCisKKy8qKgorICogTG9jYXRpb25IYXNoYmFuZ1Vy
bCByZXByZXNlbnRzIHVybAorICogVGhpcyBvYmplY3QgaXMgZXhwb3NlZCBhcyAkbG9jYXRpb24g
c2VydmljZSB3aGVuIGh0bWw1IGhpc3RvcnkgYXBpIGlzIGVuYWJsZWQgYnV0IHRoZSBicm93c2Vy
CisgKiBkb2VzIG5vdCBzdXBwb3J0IGl0LgorICoKKyAqIEBjb25zdHJ1Y3RvcgorICogQHBhcmFt
IHtzdHJpbmd9IGFwcEJhc2UgYXBwbGljYXRpb24gYmFzZSBVUkwKKyAqIEBwYXJhbSB7c3RyaW5n
fSBoYXNoUHJlZml4IGhhc2hiYW5nIHByZWZpeAorICovCitmdW5jdGlvbiBMb2NhdGlvbkhhc2hi
YW5nSW5IdG1sNVVybChhcHBCYXNlLCBoYXNoUHJlZml4KSB7CisgIHRoaXMuJCRodG1sNSA9IHRy
dWU7CisgIExvY2F0aW9uSGFzaGJhbmdVcmwuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKworICB2
YXIgYXBwQmFzZU5vRmlsZSA9IHN0cmlwRmlsZShhcHBCYXNlKTsKKworICB0aGlzLiQkcGFyc2VM
aW5rVXJsID0gZnVuY3Rpb24odXJsLCByZWxIcmVmKSB7CisgICAgaWYgKHJlbEhyZWYgJiYgcmVs
SHJlZlswXSA9PT0gJyMnKSB7CisgICAgICAvLyBzcGVjaWFsIGNhc2UgZm9yIGxpbmtzIHRvIGhh
c2ggZnJhZ21lbnRzOgorICAgICAgLy8ga2VlcCB0aGUgb2xkIHVybCBhbmQgb25seSByZXBsYWNl
IHRoZSBoYXNoIGZyYWdtZW50CisgICAgICB0aGlzLmhhc2gocmVsSHJlZi5zbGljZSgxKSk7Cisg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2YXIgcmV3cml0dGVuVXJsOworICAgIHZh
ciBhcHBVcmw7CisKKyAgICBpZiAoYXBwQmFzZSA9PSBzdHJpcEhhc2godXJsKSkgeworICAgICAg
cmV3cml0dGVuVXJsID0gdXJsOworICAgIH0gZWxzZSBpZiAoKGFwcFVybCA9IGJlZ2luc1dpdGgo
YXBwQmFzZU5vRmlsZSwgdXJsKSkpIHsKKyAgICAgIHJld3JpdHRlblVybCA9IGFwcEJhc2UgKyBo
YXNoUHJlZml4ICsgYXBwVXJsOworICAgIH0gZWxzZSBpZiAoYXBwQmFzZU5vRmlsZSA9PT0gdXJs
ICsgJy8nKSB7CisgICAgICByZXdyaXR0ZW5VcmwgPSBhcHBCYXNlTm9GaWxlOworICAgIH0KKyAg
ICBpZiAocmV3cml0dGVuVXJsKSB7CisgICAgICB0aGlzLiQkcGFyc2UocmV3cml0dGVuVXJsKTsK
KyAgICB9CisgICAgcmV0dXJuICEhcmV3cml0dGVuVXJsOworICB9OworCisgIHRoaXMuJCRjb21w
b3NlID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHNlYXJjaCA9IHRvS2V5VmFsdWUodGhpcy4kJHNl
YXJjaCksCisgICAgICAgIGhhc2ggPSB0aGlzLiQkaGFzaCA/ICcjJyArIGVuY29kZVVyaVNlZ21l
bnQodGhpcy4kJGhhc2gpIDogJyc7CisKKyAgICB0aGlzLiQkdXJsID0gZW5jb2RlUGF0aCh0aGlz
LiQkcGF0aCkgKyAoc2VhcmNoID8gJz8nICsgc2VhcmNoIDogJycpICsgaGFzaDsKKyAgICAvLyBp
bmNsdWRlIGhhc2hQcmVmaXggaW4gJCRhYnNVcmwgd2hlbiAkJHVybCBpcyBlbXB0eSBzbyBJRTgg
JiA5IGRvIG5vdCByZWxvYWQgcGFnZSBiZWNhdXNlIG9mIHJlbW92YWwgb2YgJyMnCisgICAgdGhp
cy4kJGFic1VybCA9IGFwcEJhc2UgKyBoYXNoUHJlZml4ICsgdGhpcy4kJHVybDsKKyAgfTsKKwor
fQorCisKK3ZhciBsb2NhdGlvblByb3RvdHlwZSA9IHsKKworICAvKioKKyAgICogQXJlIHdlIGlu
IGh0bWw1IG1vZGU/CisgICAqIEBwcml2YXRlCisgICAqLworICAkJGh0bWw1OiBmYWxzZSwKKwor
ICAvKioKKyAgICogSGFzIGFueSBjaGFuZ2UgYmVlbiByZXBsYWNpbmc/CisgICAqIEBwcml2YXRl
CisgICAqLworICAkJHJlcGxhY2U6IGZhbHNlLAorCisgIC8qKgorICAgKiBAbmdkb2MgbWV0aG9k
CisgICAqIEBuYW1lICRsb2NhdGlvbiNhYnNVcmwKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisg
ICAqIFRoaXMgbWV0aG9kIGlzIGdldHRlciBvbmx5LgorICAgKgorICAgKiBSZXR1cm4gZnVsbCB1
cmwgcmVwcmVzZW50YXRpb24gd2l0aCBhbGwgc2VnbWVudHMgZW5jb2RlZCBhY2NvcmRpbmcgdG8g
cnVsZXMgc3BlY2lmaWVkIGluCisgICAqIFtSRkMgMzk4Nl0oaHR0cDovL3d3dy5pZXRmLm9yZy9y
ZmMvcmZjMzk4Ni50eHQpLgorICAgKgorICAgKgorICAgKiBgYGBqcworICAgKiAvLyBnaXZlbiB1
cmwgaHR0cDovL2V4YW1wbGUuY29tLyMvc29tZS9wYXRoP2Zvbz1iYXImYmF6PXhveG8KKyAgICog
dmFyIGFic1VybCA9ICRsb2NhdGlvbi5hYnNVcmwoKTsKKyAgICogLy8gPT4gImh0dHA6Ly9leGFt
cGxlLmNvbS8jL3NvbWUvcGF0aD9mb289YmFyJmJhej14b3hvIgorICAgKiBgYGAKKyAgICoKKyAg
ICogQHJldHVybiB7c3RyaW5nfSBmdWxsIHVybAorICAgKi8KKyAgYWJzVXJsOiBsb2NhdGlvbkdl
dHRlcignJCRhYnNVcmwnKSwKKworICAvKioKKyAgICogQG5nZG9jIG1ldGhvZAorICAgKiBAbmFt
ZSAkbG9jYXRpb24jdXJsCisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBUaGlzIG1ldGhv
ZCBpcyBnZXR0ZXIgLyBzZXR0ZXIuCisgICAqCisgICAqIFJldHVybiB1cmwgKGUuZy4gYC9wYXRo
P2E9YiNoYXNoYCkgd2hlbiBjYWxsZWQgd2l0aG91dCBhbnkgcGFyYW1ldGVyLgorICAgKgorICAg
KiBDaGFuZ2UgcGF0aCwgc2VhcmNoIGFuZCBoYXNoLCB3aGVuIGNhbGxlZCB3aXRoIHBhcmFtZXRl
ciBhbmQgcmV0dXJuIGAkbG9jYXRpb25gLgorICAgKgorICAgKgorICAgKiBgYGBqcworICAgKiAv
LyBnaXZlbiB1cmwgaHR0cDovL2V4YW1wbGUuY29tLyMvc29tZS9wYXRoP2Zvbz1iYXImYmF6PXhv
eG8KKyAgICogdmFyIHVybCA9ICRsb2NhdGlvbi51cmwoKTsKKyAgICogLy8gPT4gIi9zb21lL3Bh
dGg/Zm9vPWJhciZiYXo9eG94byIKKyAgICogYGBgCisgICAqCisgICAqIEBwYXJhbSB7c3RyaW5n
PX0gdXJsIE5ldyB1cmwgd2l0aG91dCBiYXNlIHByZWZpeCAoZS5nLiBgL3BhdGg/YT1iI2hhc2hg
KQorICAgKiBAcmV0dXJuIHtzdHJpbmd9IHVybAorICAgKi8KKyAgdXJsOiBmdW5jdGlvbih1cmwp
IHsKKyAgICBpZiAoaXNVbmRlZmluZWQodXJsKSkgeworICAgICAgcmV0dXJuIHRoaXMuJCR1cmw7
CisgICAgfQorCisgICAgdmFyIG1hdGNoID0gUEFUSF9NQVRDSC5leGVjKHVybCk7CisgICAgaWYg
KG1hdGNoWzFdIHx8IHVybCA9PT0gJycpIHRoaXMucGF0aChkZWNvZGVVUklDb21wb25lbnQobWF0
Y2hbMV0pKTsKKyAgICBpZiAobWF0Y2hbMl0gfHwgbWF0Y2hbMV0gfHwgdXJsID09PSAnJykgdGhp
cy5zZWFyY2gobWF0Y2hbM10gfHwgJycpOworICAgIHRoaXMuaGFzaChtYXRjaFs1XSB8fCAnJyk7
CisKKyAgICByZXR1cm4gdGhpczsKKyAgfSwKKworICAvKioKKyAgICogQG5nZG9jIG1ldGhvZAor
ICAgKiBAbmFtZSAkbG9jYXRpb24jcHJvdG9jb2wKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisg
ICAqIFRoaXMgbWV0aG9kIGlzIGdldHRlciBvbmx5LgorICAgKgorICAgKiBSZXR1cm4gcHJvdG9j
b2wgb2YgY3VycmVudCB1cmwuCisgICAqCisgICAqCisgICAqIGBgYGpzCisgICAqIC8vIGdpdmVu
IHVybCBodHRwOi8vZXhhbXBsZS5jb20vIy9zb21lL3BhdGg/Zm9vPWJhciZiYXo9eG94bworICAg
KiB2YXIgcHJvdG9jb2wgPSAkbG9jYXRpb24ucHJvdG9jb2woKTsKKyAgICogLy8gPT4gImh0dHAi
CisgICAqIGBgYAorICAgKgorICAgKiBAcmV0dXJuIHtzdHJpbmd9IHByb3RvY29sIG9mIGN1cnJl
bnQgdXJsCisgICAqLworICBwcm90b2NvbDogbG9jYXRpb25HZXR0ZXIoJyQkcHJvdG9jb2wnKSwK
KworICAvKioKKyAgICogQG5nZG9jIG1ldGhvZAorICAgKiBAbmFtZSAkbG9jYXRpb24jaG9zdAor
ICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAgICogVGhpcyBtZXRob2QgaXMgZ2V0dGVyIG9ubHku
CisgICAqCisgICAqIFJldHVybiBob3N0IG9mIGN1cnJlbnQgdXJsLgorICAgKgorICAgKiBOb3Rl
OiBjb21wYXJlZCB0byB0aGUgbm9uLWFuZ3VsYXIgdmVyc2lvbiBgbG9jYXRpb24uaG9zdGAgd2hp
Y2ggcmV0dXJucyBgaG9zdG5hbWU6cG9ydGAsIHRoaXMgcmV0dXJucyB0aGUgYGhvc3RuYW1lYCBw
b3J0aW9uIG9ubHkuCisgICAqCisgICAqCisgICAqIGBgYGpzCisgICAqIC8vIGdpdmVuIHVybCBo
dHRwOi8vZXhhbXBsZS5jb20vIy9zb21lL3BhdGg/Zm9vPWJhciZiYXo9eG94bworICAgKiB2YXIg
aG9zdCA9ICRsb2NhdGlvbi5ob3N0KCk7CisgICAqIC8vID0+ICJleGFtcGxlLmNvbSIKKyAgICoK
KyAgICogLy8gZ2l2ZW4gdXJsIGh0dHA6Ly91c2VyOnBhc3N3b3JkQGV4YW1wbGUuY29tOjgwODAv
Iy9zb21lL3BhdGg/Zm9vPWJhciZiYXo9eG94bworICAgKiBob3N0ID0gJGxvY2F0aW9uLmhvc3Qo
KTsKKyAgICogLy8gPT4gImV4YW1wbGUuY29tIgorICAgKiBob3N0ID0gbG9jYXRpb24uaG9zdDsK
KyAgICogLy8gPT4gImV4YW1wbGUuY29tOjgwODAiCisgICAqIGBgYAorICAgKgorICAgKiBAcmV0
dXJuIHtzdHJpbmd9IGhvc3Qgb2YgY3VycmVudCB1cmwuCisgICAqLworICBob3N0OiBsb2NhdGlv
bkdldHRlcignJCRob3N0JyksCisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5h
bWUgJGxvY2F0aW9uI3BvcnQKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIFRoaXMgbWV0
aG9kIGlzIGdldHRlciBvbmx5LgorICAgKgorICAgKiBSZXR1cm4gcG9ydCBvZiBjdXJyZW50IHVy
bC4KKyAgICoKKyAgICoKKyAgICogYGBganMKKyAgICogLy8gZ2l2ZW4gdXJsIGh0dHA6Ly9leGFt
cGxlLmNvbS8jL3NvbWUvcGF0aD9mb289YmFyJmJhej14b3hvCisgICAqIHZhciBwb3J0ID0gJGxv
Y2F0aW9uLnBvcnQoKTsKKyAgICogLy8gPT4gODAKKyAgICogYGBgCisgICAqCisgICAqIEByZXR1
cm4ge051bWJlcn0gcG9ydAorICAgKi8KKyAgcG9ydDogbG9jYXRpb25HZXR0ZXIoJyQkcG9ydCcp
LAorCisgIC8qKgorICAgKiBAbmdkb2MgbWV0aG9kCisgICAqIEBuYW1lICRsb2NhdGlvbiNwYXRo
CisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBUaGlzIG1ldGhvZCBpcyBnZXR0ZXIgLyBz
ZXR0ZXIuCisgICAqCisgICAqIFJldHVybiBwYXRoIG9mIGN1cnJlbnQgdXJsIHdoZW4gY2FsbGVk
IHdpdGhvdXQgYW55IHBhcmFtZXRlci4KKyAgICoKKyAgICogQ2hhbmdlIHBhdGggd2hlbiBjYWxs
ZWQgd2l0aCBwYXJhbWV0ZXIgYW5kIHJldHVybiBgJGxvY2F0aW9uYC4KKyAgICoKKyAgICogTm90
ZTogUGF0aCBzaG91bGQgYWx3YXlzIGJlZ2luIHdpdGggZm9yd2FyZCBzbGFzaCAoLyksIHRoaXMg
bWV0aG9kIHdpbGwgYWRkIHRoZSBmb3J3YXJkIHNsYXNoCisgICAqIGlmIGl0IGlzIG1pc3Npbmcu
CisgICAqCisgICAqCisgICAqIGBgYGpzCisgICAqIC8vIGdpdmVuIHVybCBodHRwOi8vZXhhbXBs
ZS5jb20vIy9zb21lL3BhdGg/Zm9vPWJhciZiYXo9eG94bworICAgKiB2YXIgcGF0aCA9ICRsb2Nh
dGlvbi5wYXRoKCk7CisgICAqIC8vID0+ICIvc29tZS9wYXRoIgorICAgKiBgYGAKKyAgICoKKyAg
ICogQHBhcmFtIHsoc3RyaW5nfG51bWJlcik9fSBwYXRoIE5ldyBwYXRoCisgICAqIEByZXR1cm4g
e3N0cmluZ30gcGF0aAorICAgKi8KKyAgcGF0aDogbG9jYXRpb25HZXR0ZXJTZXR0ZXIoJyQkcGF0
aCcsIGZ1bmN0aW9uKHBhdGgpIHsKKyAgICBwYXRoID0gcGF0aCAhPT0gbnVsbCA/IHBhdGgudG9T
dHJpbmcoKSA6ICcnOworICAgIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PSAnLycgPyBwYXRoIDog
Jy8nICsgcGF0aDsKKyAgfSksCisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5h
bWUgJGxvY2F0aW9uI3NlYXJjaAorICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAgICogVGhpcyBt
ZXRob2QgaXMgZ2V0dGVyIC8gc2V0dGVyLgorICAgKgorICAgKiBSZXR1cm4gc2VhcmNoIHBhcnQg
KGFzIG9iamVjdCkgb2YgY3VycmVudCB1cmwgd2hlbiBjYWxsZWQgd2l0aG91dCBhbnkgcGFyYW1l
dGVyLgorICAgKgorICAgKiBDaGFuZ2Ugc2VhcmNoIHBhcnQgd2hlbiBjYWxsZWQgd2l0aCBwYXJh
bWV0ZXIgYW5kIHJldHVybiBgJGxvY2F0aW9uYC4KKyAgICoKKyAgICoKKyAgICogYGBganMKKyAg
ICogLy8gZ2l2ZW4gdXJsIGh0dHA6Ly9leGFtcGxlLmNvbS8jL3NvbWUvcGF0aD9mb289YmFyJmJh
ej14b3hvCisgICAqIHZhciBzZWFyY2hPYmplY3QgPSAkbG9jYXRpb24uc2VhcmNoKCk7CisgICAq
IC8vID0+IHtmb286ICdiYXInLCBiYXo6ICd4b3hvJ30KKyAgICoKKyAgICogLy8gc2V0IGZvbyB0
byAneWlwZWUnCisgICAqICRsb2NhdGlvbi5zZWFyY2goJ2ZvbycsICd5aXBlZScpOworICAgKiAv
LyAkbG9jYXRpb24uc2VhcmNoKCkgPT4ge2ZvbzogJ3lpcGVlJywgYmF6OiAneG94byd9CisgICAq
IGBgYAorICAgKgorICAgKiBAcGFyYW0ge3N0cmluZ3xPYmplY3QuPHN0cmluZz58T2JqZWN0LjxB
cnJheS48c3RyaW5nPj59IHNlYXJjaCBOZXcgc2VhcmNoIHBhcmFtcyAtIHN0cmluZyBvcgorICAg
KiBoYXNoIG9iamVjdC4KKyAgICoKKyAgICogV2hlbiBjYWxsZWQgd2l0aCBhIHNpbmdsZSBhcmd1
bWVudCB0aGUgbWV0aG9kIGFjdHMgYXMgYSBzZXR0ZXIsIHNldHRpbmcgdGhlIGBzZWFyY2hgIGNv
bXBvbmVudAorICAgKiBvZiBgJGxvY2F0aW9uYCB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLgorICAg
KgorICAgKiBJZiB0aGUgYXJndW1lbnQgaXMgYSBoYXNoIG9iamVjdCBjb250YWluaW5nIGFuIGFy
cmF5IG9mIHZhbHVlcywgdGhlc2UgdmFsdWVzIHdpbGwgYmUgZW5jb2RlZAorICAgKiBhcyBkdXBs
aWNhdGUgc2VhcmNoIHBhcmFtZXRlcnMgaW4gdGhlIHVybC4KKyAgICoKKyAgICogQHBhcmFtIHso
c3RyaW5nfE51bWJlcnxBcnJheTxzdHJpbmc+fGJvb2xlYW4pPX0gcGFyYW1WYWx1ZSBJZiBgc2Vh
cmNoYCBpcyBhIHN0cmluZyBvciBudW1iZXIsIHRoZW4gYHBhcmFtVmFsdWVgCisgICAqIHdpbGwg
b3ZlcnJpZGUgb25seSBhIHNpbmdsZSBzZWFyY2ggcHJvcGVydHkuCisgICAqCisgICAqIElmIGBw
YXJhbVZhbHVlYCBpcyBhbiBhcnJheSwgaXQgd2lsbCBvdmVycmlkZSB0aGUgcHJvcGVydHkgb2Yg
dGhlIGBzZWFyY2hgIGNvbXBvbmVudCBvZgorICAgKiBgJGxvY2F0aW9uYCBzcGVjaWZpZWQgdmlh
IHRoZSBmaXJzdCBhcmd1bWVudC4KKyAgICoKKyAgICogSWYgYHBhcmFtVmFsdWVgIGlzIGBudWxs
YCwgdGhlIHByb3BlcnR5IHNwZWNpZmllZCB2aWEgdGhlIGZpcnN0IGFyZ3VtZW50IHdpbGwgYmUg
ZGVsZXRlZC4KKyAgICoKKyAgICogSWYgYHBhcmFtVmFsdWVgIGlzIGB0cnVlYCwgdGhlIHByb3Bl
cnR5IHNwZWNpZmllZCB2aWEgdGhlIGZpcnN0IGFyZ3VtZW50IHdpbGwgYmUgYWRkZWQgd2l0aCBu
bworICAgKiB2YWx1ZSBub3IgdHJhaWxpbmcgZXF1YWwgc2lnbi4KKyAgICoKKyAgICogQHJldHVy
biB7T2JqZWN0fSBJZiBjYWxsZWQgd2l0aCBubyBhcmd1bWVudHMgcmV0dXJucyB0aGUgcGFyc2Vk
IGBzZWFyY2hgIG9iamVjdC4gSWYgY2FsbGVkIHdpdGgKKyAgICogb25lIG9yIG1vcmUgYXJndW1l
bnRzIHJldHVybnMgYCRsb2NhdGlvbmAgb2JqZWN0IGl0c2VsZi4KKyAgICovCisgIHNlYXJjaDog
ZnVuY3Rpb24oc2VhcmNoLCBwYXJhbVZhbHVlKSB7CisgICAgc3dpdGNoIChhcmd1bWVudHMubGVu
Z3RoKSB7CisgICAgICBjYXNlIDA6CisgICAgICAgIHJldHVybiB0aGlzLiQkc2VhcmNoOworICAg
ICAgY2FzZSAxOgorICAgICAgICBpZiAoaXNTdHJpbmcoc2VhcmNoKSB8fCBpc051bWJlcihzZWFy
Y2gpKSB7CisgICAgICAgICAgc2VhcmNoID0gc2VhcmNoLnRvU3RyaW5nKCk7CisgICAgICAgICAg
dGhpcy4kJHNlYXJjaCA9IHBhcnNlS2V5VmFsdWUoc2VhcmNoKTsKKyAgICAgICAgfSBlbHNlIGlm
IChpc09iamVjdChzZWFyY2gpKSB7CisgICAgICAgICAgc2VhcmNoID0gY29weShzZWFyY2gsIHt9
KTsKKyAgICAgICAgICAvLyByZW1vdmUgb2JqZWN0IHVuZGVmaW5lZCBvciBudWxsIHByb3BlcnRp
ZXMKKyAgICAgICAgICBmb3JFYWNoKHNlYXJjaCwgZnVuY3Rpb24odmFsdWUsIGtleSkgeworICAg
ICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIGRlbGV0ZSBzZWFyY2hba2V5XTsKKyAgICAgICAg
ICB9KTsKKworICAgICAgICAgIHRoaXMuJCRzZWFyY2ggPSBzZWFyY2g7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgdGhyb3cgJGxvY2F0aW9uTWluRXJyKCdpc3JjaGFyZycsCisgICAgICAg
ICAgICAgICdUaGUgZmlyc3QgYXJndW1lbnQgb2YgdGhlIGAkbG9jYXRpb24jc2VhcmNoKClgIGNh
bGwgbXVzdCBiZSBhIHN0cmluZyBvciBhbiBvYmplY3QuJyk7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBpZiAoaXNVbmRlZmluZWQocGFyYW1WYWx1
ZSkgfHwgcGFyYW1WYWx1ZSA9PT0gbnVsbCkgeworICAgICAgICAgIGRlbGV0ZSB0aGlzLiQkc2Vh
cmNoW3NlYXJjaF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdGhpcy4kJHNlYXJjaFtz
ZWFyY2hdID0gcGFyYW1WYWx1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRoaXMuJCRjb21w
b3NlKCk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0sCisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRo
b2QKKyAgICogQG5hbWUgJGxvY2F0aW9uI2hhc2gKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisg
ICAqIFRoaXMgbWV0aG9kIGlzIGdldHRlciAvIHNldHRlci4KKyAgICoKKyAgICogUmV0dXJuIGhh
c2ggZnJhZ21lbnQgd2hlbiBjYWxsZWQgd2l0aG91dCBhbnkgcGFyYW1ldGVyLgorICAgKgorICAg
KiBDaGFuZ2UgaGFzaCBmcmFnbWVudCB3aGVuIGNhbGxlZCB3aXRoIHBhcmFtZXRlciBhbmQgcmV0
dXJuIGAkbG9jYXRpb25gLgorICAgKgorICAgKgorICAgKiBgYGBqcworICAgKiAvLyBnaXZlbiB1
cmwgaHR0cDovL2V4YW1wbGUuY29tLyMvc29tZS9wYXRoP2Zvbz1iYXImYmF6PXhveG8jaGFzaFZh
bHVlCisgICAqIHZhciBoYXNoID0gJGxvY2F0aW9uLmhhc2goKTsKKyAgICogLy8gPT4gImhhc2hW
YWx1ZSIKKyAgICogYGBgCisgICAqCisgICAqIEBwYXJhbSB7KHN0cmluZ3xudW1iZXIpPX0gaGFz
aCBOZXcgaGFzaCBmcmFnbWVudAorICAgKiBAcmV0dXJuIHtzdHJpbmd9IGhhc2gKKyAgICovCisg
IGhhc2g6IGxvY2F0aW9uR2V0dGVyU2V0dGVyKCckJGhhc2gnLCBmdW5jdGlvbihoYXNoKSB7Cisg
ICAgcmV0dXJuIGhhc2ggIT09IG51bGwgPyBoYXNoLnRvU3RyaW5nKCkgOiAnJzsKKyAgfSksCisK
KyAgLyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgJGxvY2F0aW9uI3JlcGxhY2UK
KyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIElmIGNhbGxlZCwgYWxsIGNoYW5nZXMgdG8g
JGxvY2F0aW9uIGR1cmluZyBjdXJyZW50IGAkZGlnZXN0YCB3aWxsIGJlIHJlcGxhY2luZyBjdXJy
ZW50IGhpc3RvcnkKKyAgICogcmVjb3JkLCBpbnN0ZWFkIG9mIGFkZGluZyBuZXcgb25lLgorICAg
Ki8KKyAgcmVwbGFjZTogZnVuY3Rpb24oKSB7CisgICAgdGhpcy4kJHJlcGxhY2UgPSB0cnVlOwor
ICAgIHJldHVybiB0aGlzOworICB9Cit9OworCitmb3JFYWNoKFtMb2NhdGlvbkhhc2hiYW5nSW5I
dG1sNVVybCwgTG9jYXRpb25IYXNoYmFuZ1VybCwgTG9jYXRpb25IdG1sNVVybF0sIGZ1bmN0aW9u
KExvY2F0aW9uKSB7CisgIExvY2F0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUobG9jYXRp
b25Qcm90b3R5cGUpOworCisgIC8qKgorICAgKiBAbmdkb2MgbWV0aG9kCisgICAqIEBuYW1lICRs
b2NhdGlvbiNzdGF0ZQorICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAgICogVGhpcyBtZXRob2Qg
aXMgZ2V0dGVyIC8gc2V0dGVyLgorICAgKgorICAgKiBSZXR1cm4gdGhlIGhpc3Rvcnkgc3RhdGUg
b2JqZWN0IHdoZW4gY2FsbGVkIHdpdGhvdXQgYW55IHBhcmFtZXRlci4KKyAgICoKKyAgICogQ2hh
bmdlIHRoZSBoaXN0b3J5IHN0YXRlIG9iamVjdCB3aGVuIGNhbGxlZCB3aXRoIG9uZSBwYXJhbWV0
ZXIgYW5kIHJldHVybiBgJGxvY2F0aW9uYC4KKyAgICogVGhlIHN0YXRlIG9iamVjdCBpcyBsYXRl
ciBwYXNzZWQgdG8gYHB1c2hTdGF0ZWAgb3IgYHJlcGxhY2VTdGF0ZWAuCisgICAqCisgICAqIE5P
VEU6IFRoaXMgbWV0aG9kIGlzIHN1cHBvcnRlZCBvbmx5IGluIEhUTUw1IG1vZGUgYW5kIG9ubHkg
aW4gYnJvd3NlcnMgc3VwcG9ydGluZworICAgKiB0aGUgSFRNTDUgSGlzdG9yeSBBUEkgKGkuZS4g
bWV0aG9kcyBgcHVzaFN0YXRlYCBhbmQgYHJlcGxhY2VTdGF0ZWApLiBJZiB5b3UgbmVlZCB0byBz
dXBwb3J0CisgICAqIG9sZGVyIGJyb3dzZXJzIChsaWtlIElFOSBvciBBbmRyb2lkIDwgNC4wKSwg
ZG9uJ3QgdXNlIHRoaXMgbWV0aG9kLgorICAgKgorICAgKiBAcGFyYW0ge29iamVjdD19IHN0YXRl
IFN0YXRlIG9iamVjdCBmb3IgcHVzaFN0YXRlIG9yIHJlcGxhY2VTdGF0ZQorICAgKiBAcmV0dXJu
IHtvYmplY3R9IHN0YXRlCisgICAqLworICBMb2NhdGlvbi5wcm90b3R5cGUuc3RhdGUgPSBmdW5j
dGlvbihzdGF0ZSkgeworICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgeworICAgICAgcmV0dXJu
IHRoaXMuJCRzdGF0ZTsKKyAgICB9CisKKyAgICBpZiAoTG9jYXRpb24gIT09IExvY2F0aW9uSHRt
bDVVcmwgfHwgIXRoaXMuJCRodG1sNSkgeworICAgICAgdGhyb3cgJGxvY2F0aW9uTWluRXJyKCdu
b3N0YXRlJywgJ0hpc3RvcnkgQVBJIHN0YXRlIHN1cHBvcnQgaXMgYXZhaWxhYmxlIG9ubHkgJyAr
CisgICAgICAgICdpbiBIVE1MNSBtb2RlIGFuZCBvbmx5IGluIGJyb3dzZXJzIHN1cHBvcnRpbmcg
SFRNTDUgSGlzdG9yeSBBUEknKTsKKyAgICB9CisgICAgLy8gVGhlIHVzZXIgbWlnaHQgbW9kaWZ5
IGBzdGF0ZU9iamVjdGAgYWZ0ZXIgaW52b2tpbmcgYCRsb2NhdGlvbi5zdGF0ZShzdGF0ZU9iamVj
dClgCisgICAgLy8gYnV0IHdlJ3JlIGNoYW5naW5nIHRoZSAkJHN0YXRlIHJlZmVyZW5jZSB0byAk
YnJvd3Nlci5zdGF0ZSgpIGR1cmluZyB0aGUgJGRpZ2VzdAorICAgIC8vIHNvIHRoZSBtb2RpZmlj
YXRpb24gd2luZG93IGlzIG5hcnJvdy4KKyAgICB0aGlzLiQkc3RhdGUgPSBpc1VuZGVmaW5lZChz
dGF0ZSkgPyBudWxsIDogc3RhdGU7CisKKyAgICByZXR1cm4gdGhpczsKKyAgfTsKK30pOworCisK
K2Z1bmN0aW9uIGxvY2F0aW9uR2V0dGVyKHByb3BlcnR5KSB7CisgIHJldHVybiBmdW5jdGlvbigp
IHsKKyAgICByZXR1cm4gdGhpc1twcm9wZXJ0eV07CisgIH07Cit9CisKKworZnVuY3Rpb24gbG9j
YXRpb25HZXR0ZXJTZXR0ZXIocHJvcGVydHksIHByZXByb2Nlc3MpIHsKKyAgcmV0dXJuIGZ1bmN0
aW9uKHZhbHVlKSB7CisgICAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSkgeworICAgICAgcmV0dXJu
IHRoaXNbcHJvcGVydHldOworICAgIH0KKworICAgIHRoaXNbcHJvcGVydHldID0gcHJlcHJvY2Vz
cyh2YWx1ZSk7CisgICAgdGhpcy4kJGNvbXBvc2UoKTsKKworICAgIHJldHVybiB0aGlzOworICB9
OworfQorCisKKy8qKgorICogQG5nZG9jIHNlcnZpY2UKKyAqIEBuYW1lICRsb2NhdGlvbgorICoK
KyAqIEByZXF1aXJlcyAkcm9vdEVsZW1lbnQKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFRoZSAk
bG9jYXRpb24gc2VydmljZSBwYXJzZXMgdGhlIFVSTCBpbiB0aGUgYnJvd3NlciBhZGRyZXNzIGJh
ciAoYmFzZWQgb24gdGhlCisgKiBbd2luZG93LmxvY2F0aW9uXShodHRwczovL2RldmVsb3Blci5t
b3ppbGxhLm9yZy9lbi93aW5kb3cubG9jYXRpb24pKSBhbmQgbWFrZXMgdGhlIFVSTAorICogYXZh
aWxhYmxlIHRvIHlvdXIgYXBwbGljYXRpb24uIENoYW5nZXMgdG8gdGhlIFVSTCBpbiB0aGUgYWRk
cmVzcyBiYXIgYXJlIHJlZmxlY3RlZCBpbnRvCisgKiAkbG9jYXRpb24gc2VydmljZSBhbmQgY2hh
bmdlcyB0byAkbG9jYXRpb24gYXJlIHJlZmxlY3RlZCBpbnRvIHRoZSBicm93c2VyIGFkZHJlc3Mg
YmFyLgorICoKKyAqICoqVGhlICRsb2NhdGlvbiBzZXJ2aWNlOioqCisgKgorICogLSBFeHBvc2Vz
IHRoZSBjdXJyZW50IFVSTCBpbiB0aGUgYnJvd3NlciBhZGRyZXNzIGJhciwgc28geW91IGNhbgor
ICogICAtIFdhdGNoIGFuZCBvYnNlcnZlIHRoZSBVUkwuCisgKiAgIC0gQ2hhbmdlIHRoZSBVUkwu
CisgKiAtIFN5bmNocm9uaXplcyB0aGUgVVJMIHdpdGggdGhlIGJyb3dzZXIgd2hlbiB0aGUgdXNl
cgorICogICAtIENoYW5nZXMgdGhlIGFkZHJlc3MgYmFyLgorICogICAtIENsaWNrcyB0aGUgYmFj
ayBvciBmb3J3YXJkIGJ1dHRvbiAob3IgY2xpY2tzIGEgSGlzdG9yeSBsaW5rKS4KKyAqICAgLSBD
bGlja3Mgb24gYSBsaW5rLgorICogLSBSZXByZXNlbnRzIHRoZSBVUkwgb2JqZWN0IGFzIGEgc2V0
IG9mIG1ldGhvZHMgKHByb3RvY29sLCBob3N0LCBwb3J0LCBwYXRoLCBzZWFyY2gsIGhhc2gpLgor
ICoKKyAqIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB7QGxpbmsgZ3VpZGUvJGxvY2F0aW9uIERl
dmVsb3BlciBHdWlkZTogVXNpbmcgJGxvY2F0aW9ufQorICovCisKKy8qKgorICogQG5nZG9jIHBy
b3ZpZGVyCisgKiBAbmFtZSAkbG9jYXRpb25Qcm92aWRlcgorICogQGRlc2NyaXB0aW9uCisgKiBV
c2UgdGhlIGAkbG9jYXRpb25Qcm92aWRlcmAgdG8gY29uZmlndXJlIGhvdyB0aGUgYXBwbGljYXRp
b24gZGVlcCBsaW5raW5nIHBhdGhzIGFyZSBzdG9yZWQuCisgKi8KK2Z1bmN0aW9uICRMb2NhdGlv
blByb3ZpZGVyKCkgeworICB2YXIgaGFzaFByZWZpeCA9ICcnLAorICAgICAgaHRtbDVNb2RlID0g
eworICAgICAgICBlbmFibGVkOiBmYWxzZSwKKyAgICAgICAgcmVxdWlyZUJhc2U6IHRydWUsCisg
ICAgICAgIHJld3JpdGVMaW5rczogdHJ1ZQorICAgICAgfTsKKworICAvKioKKyAgICogQG5nZG9j
IG1ldGhvZAorICAgKiBAbmFtZSAkbG9jYXRpb25Qcm92aWRlciNoYXNoUHJlZml4CisgICAqIEBk
ZXNjcmlwdGlvbgorICAgKiBAcGFyYW0ge3N0cmluZz19IHByZWZpeCBQcmVmaXggZm9yIGhhc2gg
cGFydCAoY29udGFpbmluZyBwYXRoIGFuZCBzZWFyY2gpCisgICAqIEByZXR1cm5zIHsqfSBjdXJy
ZW50IHZhbHVlIGlmIHVzZWQgYXMgZ2V0dGVyIG9yIGl0c2VsZiAoY2hhaW5pbmcpIGlmIHVzZWQg
YXMgc2V0dGVyCisgICAqLworICB0aGlzLmhhc2hQcmVmaXggPSBmdW5jdGlvbihwcmVmaXgpIHsK
KyAgICBpZiAoaXNEZWZpbmVkKHByZWZpeCkpIHsKKyAgICAgIGhhc2hQcmVmaXggPSBwcmVmaXg7
CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIGhhc2hQcmVm
aXg7CisgICAgfQorICB9OworCisgIC8qKgorICAgKiBAbmdkb2MgbWV0aG9kCisgICAqIEBuYW1l
ICRsb2NhdGlvblByb3ZpZGVyI2h0bWw1TW9kZQorICAgKiBAZGVzY3JpcHRpb24KKyAgICogQHBh
cmFtIHsoYm9vbGVhbnxPYmplY3QpPX0gbW9kZSBJZiBib29sZWFuLCBzZXRzIGBodG1sNU1vZGUu
ZW5hYmxlZGAgdG8gdmFsdWUuCisgICAqICAgSWYgb2JqZWN0LCBzZXRzIGBlbmFibGVkYCwgYHJl
cXVpcmVCYXNlYCBhbmQgYHJld3JpdGVMaW5rc2AgdG8gcmVzcGVjdGl2ZSB2YWx1ZXMuIFN1cHBv
cnRlZAorICAgKiAgIHByb3BlcnRpZXM6CisgICAqICAgLSAqKmVuYWJsZWQqKiDigJMgYHtib29s
ZWFufWAg4oCTIChkZWZhdWx0OiBmYWxzZSkgSWYgdHJ1ZSwgd2lsbCByZWx5IG9uIGBoaXN0b3J5
LnB1c2hTdGF0ZWAgdG8KKyAgICogICAgIGNoYW5nZSB1cmxzIHdoZXJlIHN1cHBvcnRlZC4gV2ls
bCBmYWxsIGJhY2sgdG8gaGFzaC1wcmVmaXhlZCBwYXRocyBpbiBicm93c2VycyB0aGF0IGRvIG5v
dAorICAgKiAgICAgc3VwcG9ydCBgcHVzaFN0YXRlYC4KKyAgICogICAtICoqcmVxdWlyZUJhc2Uq
KiAtIGB7Ym9vbGVhbn1gIC0gKGRlZmF1bHQ6IGB0cnVlYCkgV2hlbiBodG1sNU1vZGUgaXMgZW5h
YmxlZCwgc3BlY2lmaWVzCisgICAqICAgICB3aGV0aGVyIG9yIG5vdCBhIDxiYXNlPiB0YWcgaXMg
cmVxdWlyZWQgdG8gYmUgcHJlc2VudC4gSWYgYGVuYWJsZWRgIGFuZCBgcmVxdWlyZUJhc2VgIGFy
ZQorICAgKiAgICAgdHJ1ZSwgYW5kIGEgYmFzZSB0YWcgaXMgbm90IHByZXNlbnQsIGFuIGVycm9y
IHdpbGwgYmUgdGhyb3duIHdoZW4gYCRsb2NhdGlvbmAgaXMgaW5qZWN0ZWQuCisgICAqICAgICBT
ZWUgdGhlIHtAbGluayBndWlkZS8kbG9jYXRpb24gJGxvY2F0aW9uIGd1aWRlIGZvciBtb3JlIGlu
Zm9ybWF0aW9ufQorICAgKiAgIC0gKipyZXdyaXRlTGlua3MqKiAtIGB7Ym9vbGVhbn1gIC0gKGRl
ZmF1bHQ6IGB0cnVlYCkgV2hlbiBodG1sNU1vZGUgaXMgZW5hYmxlZCwKKyAgICogICAgIGVuYWJs
ZXMvZGlzYWJsZXMgdXJsIHJld3JpdGluZyBmb3IgcmVsYXRpdmUgbGlua3MuCisgICAqCisgICAq
IEByZXR1cm5zIHtPYmplY3R9IGh0bWw1TW9kZSBvYmplY3QgaWYgdXNlZCBhcyBnZXR0ZXIgb3Ig
aXRzZWxmIChjaGFpbmluZykgaWYgdXNlZCBhcyBzZXR0ZXIKKyAgICovCisgIHRoaXMuaHRtbDVN
b2RlID0gZnVuY3Rpb24obW9kZSkgeworICAgIGlmIChpc0Jvb2xlYW4obW9kZSkpIHsKKyAgICAg
IGh0bWw1TW9kZS5lbmFibGVkID0gbW9kZTsKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0gZWxz
ZSBpZiAoaXNPYmplY3QobW9kZSkpIHsKKworICAgICAgaWYgKGlzQm9vbGVhbihtb2RlLmVuYWJs
ZWQpKSB7CisgICAgICAgIGh0bWw1TW9kZS5lbmFibGVkID0gbW9kZS5lbmFibGVkOworICAgICAg
fQorCisgICAgICBpZiAoaXNCb29sZWFuKG1vZGUucmVxdWlyZUJhc2UpKSB7CisgICAgICAgIGh0
bWw1TW9kZS5yZXF1aXJlQmFzZSA9IG1vZGUucmVxdWlyZUJhc2U7CisgICAgICB9CisKKyAgICAg
IGlmIChpc0Jvb2xlYW4obW9kZS5yZXdyaXRlTGlua3MpKSB7CisgICAgICAgIGh0bWw1TW9kZS5y
ZXdyaXRlTGlua3MgPSBtb2RlLnJld3JpdGVMaW5rczsKKyAgICAgIH0KKworICAgICAgcmV0dXJu
IHRoaXM7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBodG1sNU1vZGU7CisgICAgfQorICB9
OworCisgIC8qKgorICAgKiBAbmdkb2MgZXZlbnQKKyAgICogQG5hbWUgJGxvY2F0aW9uIyRsb2Nh
dGlvbkNoYW5nZVN0YXJ0CisgICAqIEBldmVudFR5cGUgYnJvYWRjYXN0IG9uIHJvb3Qgc2NvcGUK
KyAgICogQGRlc2NyaXB0aW9uCisgICAqIEJyb2FkY2FzdGVkIGJlZm9yZSBhIFVSTCB3aWxsIGNo
YW5nZS4KKyAgICoKKyAgICogVGhpcyBjaGFuZ2UgY2FuIGJlIHByZXZlbnRlZCBieSBjYWxsaW5n
CisgICAqIGBwcmV2ZW50RGVmYXVsdGAgbWV0aG9kIG9mIHRoZSBldmVudC4gU2VlIHtAbGluayBu
Zy4kcm9vdFNjb3BlLlNjb3BlIyRvbn0gZm9yIG1vcmUKKyAgICogZGV0YWlscyBhYm91dCBldmVu
dCBvYmplY3QuIFVwb24gc3VjY2Vzc2Z1bCBjaGFuZ2UKKyAgICoge0BsaW5rIG5nLiRsb2NhdGlv
biMkbG9jYXRpb25DaGFuZ2VTdWNjZXNzICRsb2NhdGlvbkNoYW5nZVN1Y2Nlc3N9IGlzIGZpcmVk
LgorICAgKgorICAgKiBUaGUgYG5ld1N0YXRlYCBhbmQgYG9sZFN0YXRlYCBwYXJhbWV0ZXJzIG1h
eSBiZSBkZWZpbmVkIG9ubHkgaW4gSFRNTDUgbW9kZSBhbmQgd2hlbgorICAgKiB0aGUgYnJvd3Nl
ciBzdXBwb3J0cyB0aGUgSFRNTDUgSGlzdG9yeSBBUEkuCisgICAqCisgICAqIEBwYXJhbSB7T2Jq
ZWN0fSBhbmd1bGFyRXZlbnQgU3ludGhldGljIGV2ZW50IG9iamVjdC4KKyAgICogQHBhcmFtIHtz
dHJpbmd9IG5ld1VybCBOZXcgVVJMCisgICAqIEBwYXJhbSB7c3RyaW5nPX0gb2xkVXJsIFVSTCB0
aGF0IHdhcyBiZWZvcmUgaXQgd2FzIGNoYW5nZWQuCisgICAqIEBwYXJhbSB7c3RyaW5nPX0gbmV3
U3RhdGUgTmV3IGhpc3Rvcnkgc3RhdGUgb2JqZWN0CisgICAqIEBwYXJhbSB7c3RyaW5nPX0gb2xk
U3RhdGUgSGlzdG9yeSBzdGF0ZSBvYmplY3QgdGhhdCB3YXMgYmVmb3JlIGl0IHdhcyBjaGFuZ2Vk
LgorICAgKi8KKworICAvKioKKyAgICogQG5nZG9jIGV2ZW50CisgICAqIEBuYW1lICRsb2NhdGlv
biMkbG9jYXRpb25DaGFuZ2VTdWNjZXNzCisgICAqIEBldmVudFR5cGUgYnJvYWRjYXN0IG9uIHJv
b3Qgc2NvcGUKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIEJyb2FkY2FzdGVkIGFmdGVyIGEgVVJM
IHdhcyBjaGFuZ2VkLgorICAgKgorICAgKiBUaGUgYG5ld1N0YXRlYCBhbmQgYG9sZFN0YXRlYCBw
YXJhbWV0ZXJzIG1heSBiZSBkZWZpbmVkIG9ubHkgaW4gSFRNTDUgbW9kZSBhbmQgd2hlbgorICAg
KiB0aGUgYnJvd3NlciBzdXBwb3J0cyB0aGUgSFRNTDUgSGlzdG9yeSBBUEkuCisgICAqCisgICAq
IEBwYXJhbSB7T2JqZWN0fSBhbmd1bGFyRXZlbnQgU3ludGhldGljIGV2ZW50IG9iamVjdC4KKyAg
ICogQHBhcmFtIHtzdHJpbmd9IG5ld1VybCBOZXcgVVJMCisgICAqIEBwYXJhbSB7c3RyaW5nPX0g
b2xkVXJsIFVSTCB0aGF0IHdhcyBiZWZvcmUgaXQgd2FzIGNoYW5nZWQuCisgICAqIEBwYXJhbSB7
c3RyaW5nPX0gbmV3U3RhdGUgTmV3IGhpc3Rvcnkgc3RhdGUgb2JqZWN0CisgICAqIEBwYXJhbSB7
c3RyaW5nPX0gb2xkU3RhdGUgSGlzdG9yeSBzdGF0ZSBvYmplY3QgdGhhdCB3YXMgYmVmb3JlIGl0
IHdhcyBjaGFuZ2VkLgorICAgKi8KKworICB0aGlzLiRnZXQgPSBbJyRyb290U2NvcGUnLCAnJGJy
b3dzZXInLCAnJHNuaWZmZXInLCAnJHJvb3RFbGVtZW50JywgJyR3aW5kb3cnLAorICAgICAgZnVu
Y3Rpb24oJHJvb3RTY29wZSwgJGJyb3dzZXIsICRzbmlmZmVyLCAkcm9vdEVsZW1lbnQsICR3aW5k
b3cpIHsKKyAgICB2YXIgJGxvY2F0aW9uLAorICAgICAgICBMb2NhdGlvbk1vZGUsCisgICAgICAg
IGJhc2VIcmVmID0gJGJyb3dzZXIuYmFzZUhyZWYoKSwgLy8gaWYgYmFzZVtocmVmXSBpcyB1bmRl
ZmluZWQsIGl0IGRlZmF1bHRzIHRvICcnCisgICAgICAgIGluaXRpYWxVcmwgPSAkYnJvd3Nlci51
cmwoKSwKKyAgICAgICAgYXBwQmFzZTsKKworICAgIGlmIChodG1sNU1vZGUuZW5hYmxlZCkgewor
ICAgICAgaWYgKCFiYXNlSHJlZiAmJiBodG1sNU1vZGUucmVxdWlyZUJhc2UpIHsKKyAgICAgICAg
dGhyb3cgJGxvY2F0aW9uTWluRXJyKCdub2Jhc2UnLAorICAgICAgICAgICIkbG9jYXRpb24gaW4g
SFRNTDUgbW9kZSByZXF1aXJlcyBhIDxiYXNlPiB0YWcgdG8gYmUgcHJlc2VudCEiKTsKKyAgICAg
IH0KKyAgICAgIGFwcEJhc2UgPSBzZXJ2ZXJCYXNlKGluaXRpYWxVcmwpICsgKGJhc2VIcmVmIHx8
ICcvJyk7CisgICAgICBMb2NhdGlvbk1vZGUgPSAkc25pZmZlci5oaXN0b3J5ID8gTG9jYXRpb25I
dG1sNVVybCA6IExvY2F0aW9uSGFzaGJhbmdJbkh0bWw1VXJsOworICAgIH0gZWxzZSB7CisgICAg
ICBhcHBCYXNlID0gc3RyaXBIYXNoKGluaXRpYWxVcmwpOworICAgICAgTG9jYXRpb25Nb2RlID0g
TG9jYXRpb25IYXNoYmFuZ1VybDsKKyAgICB9CisgICAgJGxvY2F0aW9uID0gbmV3IExvY2F0aW9u
TW9kZShhcHBCYXNlLCAnIycgKyBoYXNoUHJlZml4KTsKKyAgICAkbG9jYXRpb24uJCRwYXJzZUxp
bmtVcmwoaW5pdGlhbFVybCwgaW5pdGlhbFVybCk7CisKKyAgICAkbG9jYXRpb24uJCRzdGF0ZSA9
ICRicm93c2VyLnN0YXRlKCk7CisKKyAgICB2YXIgSUdOT1JFX1VSSV9SRUdFWFAgPSAvXlxzKihq
YXZhc2NyaXB0fG1haWx0byk6L2k7CisKKyAgICBmdW5jdGlvbiBzZXRCcm93c2VyVXJsV2l0aEZh
bGxiYWNrKHVybCwgcmVwbGFjZSwgc3RhdGUpIHsKKyAgICAgIHZhciBvbGRVcmwgPSAkbG9jYXRp
b24udXJsKCk7CisgICAgICB2YXIgb2xkU3RhdGUgPSAkbG9jYXRpb24uJCRzdGF0ZTsKKyAgICAg
IHRyeSB7CisgICAgICAgICRicm93c2VyLnVybCh1cmwsIHJlcGxhY2UsIHN0YXRlKTsKKworICAg
ICAgICAvLyBNYWtlIHN1cmUgJGxvY2F0aW9uLnN0YXRlKCkgcmV0dXJucyByZWZlcmVudGlhbGx5
IGlkZW50aWNhbCAobm90IGp1c3QgZGVlcGx5IGVxdWFsKQorICAgICAgICAvLyBzdGF0ZSBvYmpl
Y3Q7IHRoaXMgbWFrZXMgcG9zc2libGUgcXVpY2sgY2hlY2tpbmcgaWYgdGhlIHN0YXRlIGNoYW5n
ZWQgaW4gdGhlIGRpZ2VzdAorICAgICAgICAvLyBsb29wLiBDaGVja2luZyBkZWVwIGVxdWFsaXR5
IHdvdWxkIGJlIHRvbyBleHBlbnNpdmUuCisgICAgICAgICRsb2NhdGlvbi4kJHN0YXRlID0gJGJy
b3dzZXIuc3RhdGUoKTsKKyAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgLy8gUmVzdG9yZSBv
bGQgdmFsdWVzIGlmIHB1c2hTdGF0ZSBmYWlscworICAgICAgICAkbG9jYXRpb24udXJsKG9sZFVy
bCk7CisgICAgICAgICRsb2NhdGlvbi4kJHN0YXRlID0gb2xkU3RhdGU7CisKKyAgICAgICAgdGhy
b3cgZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAkcm9vdEVsZW1lbnQub24oJ2NsaWNrJywgZnVu
Y3Rpb24oZXZlbnQpIHsKKyAgICAgIC8vIFRPRE8odm9qdGEpOiByZXdyaXRlIGxpbmsgd2hlbiBv
cGVuaW5nIGluIG5ldyB0YWIvd2luZG93IChpbiBsZWdhY3kgYnJvd3NlcikKKyAgICAgIC8vIGN1
cnJlbnRseSB3ZSBvcGVuIG5pY2UgdXJsIGxpbmsgYW5kIHJlZGlyZWN0IHRoZW4KKworICAgICAg
aWYgKCFodG1sNU1vZGUucmV3cml0ZUxpbmtzIHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0
YUtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC53aGljaCA9PSAyIHx8IGV2ZW50LmJ1dHRv
biA9PSAyKSByZXR1cm47CisKKyAgICAgIHZhciBlbG0gPSBqcUxpdGUoZXZlbnQudGFyZ2V0KTsK
KworICAgICAgLy8gdHJhdmVyc2UgdGhlIERPTSB1cCB0byBmaW5kIGZpcnN0IEEgdGFnCisgICAg
ICB3aGlsZSAobm9kZU5hbWVfKGVsbVswXSkgIT09ICdhJykgeworICAgICAgICAvLyBpZ25vcmUg
cmV3cml0aW5nIGlmIG5vIEEgdGFnIChyZWFjaGVkIHJvb3QgZWxlbWVudCwgb3Igbm8gcGFyZW50
IC0gcmVtb3ZlZCBmcm9tIGRvY3VtZW50KQorICAgICAgICBpZiAoZWxtWzBdID09PSAkcm9vdEVs
ZW1lbnRbMF0gfHwgIShlbG0gPSBlbG0ucGFyZW50KCkpWzBdKSByZXR1cm47CisgICAgICB9CisK
KyAgICAgIHZhciBhYnNIcmVmID0gZWxtLnByb3AoJ2hyZWYnKTsKKyAgICAgIC8vIGdldCB0aGUg
YWN0dWFsIGhyZWYgYXR0cmlidXRlIC0gc2VlCisgICAgICAvLyBodHRwOi8vbXNkbi5taWNyb3Nv
ZnQuY29tL2VuLXVzL2xpYnJhcnkvaWUvZGQzNDcxNDgodj12cy44NSkuYXNweAorICAgICAgdmFy
IHJlbEhyZWYgPSBlbG0uYXR0cignaHJlZicpIHx8IGVsbS5hdHRyKCd4bGluazpocmVmJyk7CisK
KyAgICAgIGlmIChpc09iamVjdChhYnNIcmVmKSAmJiBhYnNIcmVmLnRvU3RyaW5nKCkgPT09ICdb
b2JqZWN0IFNWR0FuaW1hdGVkU3RyaW5nXScpIHsKKyAgICAgICAgLy8gU1ZHQW5pbWF0ZWRTdHJp
bmcuYW5pbVZhbCBzaG91bGQgYmUgaWRlbnRpY2FsIHRvIFNWR0FuaW1hdGVkU3RyaW5nLmJhc2VW
YWwsIHVubGVzcyBkdXJpbmcKKyAgICAgICAgLy8gYW4gYW5pbWF0aW9uLgorICAgICAgICBhYnNI
cmVmID0gdXJsUmVzb2x2ZShhYnNIcmVmLmFuaW1WYWwpLmhyZWY7CisgICAgICB9CisKKyAgICAg
IC8vIElnbm9yZSB3aGVuIHVybCBpcyBzdGFydGVkIHdpdGggamF2YXNjcmlwdDogb3IgbWFpbHRv
OgorICAgICAgaWYgKElHTk9SRV9VUklfUkVHRVhQLnRlc3QoYWJzSHJlZikpIHJldHVybjsKKwor
ICAgICAgaWYgKGFic0hyZWYgJiYgIWVsbS5hdHRyKCd0YXJnZXQnKSAmJiAhZXZlbnQuaXNEZWZh
dWx0UHJldmVudGVkKCkpIHsKKyAgICAgICAgaWYgKCRsb2NhdGlvbi4kJHBhcnNlTGlua1VybChh
YnNIcmVmLCByZWxIcmVmKSkgeworICAgICAgICAgIC8vIFdlIGRvIGEgcHJldmVudERlZmF1bHQg
Zm9yIGFsbCB1cmxzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIGFuZ3VsYXIgYXBwbGljYXRpb24sCisg
ICAgICAgICAgLy8gaW4gaHRtbDVtb2RlIGFuZCBhbHNvIHdpdGhvdXQsIHNvIHRoYXQgd2UgYXJl
IGFibGUgdG8gYWJvcnQgbmF2aWdhdGlvbiB3aXRob3V0CisgICAgICAgICAgLy8gZ2V0dGluZyBk
b3VibGUgZW50cmllcyBpbiB0aGUgbG9jYXRpb24gaGlzdG9yeS4KKyAgICAgICAgICBldmVudC5w
cmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgIC8vIHVwZGF0ZSBsb2NhdGlvbiBtYW51YWxseQor
ICAgICAgICAgIGlmICgkbG9jYXRpb24uYWJzVXJsKCkgIT0gJGJyb3dzZXIudXJsKCkpIHsKKyAg
ICAgICAgICAgICRyb290U2NvcGUuJGFwcGx5KCk7CisgICAgICAgICAgICAvLyBoYWNrIHRvIHdv
cmsgYXJvdW5kIEZGNiBidWcgNjg0MjA4IHdoZW4gc2NlbmFyaW8gcnVubmVyIGNsaWNrcyBvbiBs
aW5rcworICAgICAgICAgICAgJHdpbmRvdy5hbmd1bGFyWydmZi02ODQyMDgtcHJldmVudERlZmF1
bHQnXSA9IHRydWU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfSk7CisK
KworICAgIC8vIHJld3JpdGUgaGFzaGJhbmcgdXJsIDw+IGh0bWw1IHVybAorICAgIGlmICh0cmlt
RW1wdHlIYXNoKCRsb2NhdGlvbi5hYnNVcmwoKSkgIT0gdHJpbUVtcHR5SGFzaChpbml0aWFsVXJs
KSkgeworICAgICAgJGJyb3dzZXIudXJsKCRsb2NhdGlvbi5hYnNVcmwoKSwgdHJ1ZSk7CisgICAg
fQorCisgICAgdmFyIGluaXRpYWxpemluZyA9IHRydWU7CisKKyAgICAvLyB1cGRhdGUgJGxvY2F0
aW9uIHdoZW4gJGJyb3dzZXIgdXJsIGNoYW5nZXMKKyAgICAkYnJvd3Nlci5vblVybENoYW5nZShm
dW5jdGlvbihuZXdVcmwsIG5ld1N0YXRlKSB7CisgICAgICAkcm9vdFNjb3BlLiRldmFsQXN5bmMo
ZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBvbGRVcmwgPSAkbG9jYXRpb24uYWJzVXJsKCk7Cisg
ICAgICAgIHZhciBvbGRTdGF0ZSA9ICRsb2NhdGlvbi4kJHN0YXRlOworICAgICAgICB2YXIgZGVm
YXVsdFByZXZlbnRlZDsKKworICAgICAgICAkbG9jYXRpb24uJCRwYXJzZShuZXdVcmwpOworICAg
ICAgICAkbG9jYXRpb24uJCRzdGF0ZSA9IG5ld1N0YXRlOworCisgICAgICAgIGRlZmF1bHRQcmV2
ZW50ZWQgPSAkcm9vdFNjb3BlLiRicm9hZGNhc3QoJyRsb2NhdGlvbkNoYW5nZVN0YXJ0JywgbmV3
VXJsLCBvbGRVcmwsCisgICAgICAgICAgICBuZXdTdGF0ZSwgb2xkU3RhdGUpLmRlZmF1bHRQcmV2
ZW50ZWQ7CisKKyAgICAgICAgLy8gaWYgdGhlIGxvY2F0aW9uIHdhcyBjaGFuZ2VkIGJ5IGEgYCRs
b2NhdGlvbkNoYW5nZVN0YXJ0YCBoYW5kbGVyIHRoZW4gc3RvcAorICAgICAgICAvLyBwcm9jZXNz
aW5nIHRoaXMgbG9jYXRpb24gY2hhbmdlCisgICAgICAgIGlmICgkbG9jYXRpb24uYWJzVXJsKCkg
IT09IG5ld1VybCkgcmV0dXJuOworCisgICAgICAgIGlmIChkZWZhdWx0UHJldmVudGVkKSB7Cisg
ICAgICAgICAgJGxvY2F0aW9uLiQkcGFyc2Uob2xkVXJsKTsKKyAgICAgICAgICAkbG9jYXRpb24u
JCRzdGF0ZSA9IG9sZFN0YXRlOworICAgICAgICAgIHNldEJyb3dzZXJVcmxXaXRoRmFsbGJhY2so
b2xkVXJsLCBmYWxzZSwgb2xkU3RhdGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGlu
aXRpYWxpemluZyA9IGZhbHNlOworICAgICAgICAgIGFmdGVyTG9jYXRpb25DaGFuZ2Uob2xkVXJs
LCBvbGRTdGF0ZSk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgICAgaWYgKCEkcm9vdFNjb3Bl
LiQkcGhhc2UpICRyb290U2NvcGUuJGRpZ2VzdCgpOworICAgIH0pOworCisgICAgLy8gdXBkYXRl
IGJyb3dzZXIKKyAgICAkcm9vdFNjb3BlLiR3YXRjaChmdW5jdGlvbiAkbG9jYXRpb25XYXRjaCgp
IHsKKyAgICAgIHZhciBvbGRVcmwgPSB0cmltRW1wdHlIYXNoKCRicm93c2VyLnVybCgpKTsKKyAg
ICAgIHZhciBuZXdVcmwgPSB0cmltRW1wdHlIYXNoKCRsb2NhdGlvbi5hYnNVcmwoKSk7CisgICAg
ICB2YXIgb2xkU3RhdGUgPSAkYnJvd3Nlci5zdGF0ZSgpOworICAgICAgdmFyIGN1cnJlbnRSZXBs
YWNlID0gJGxvY2F0aW9uLiQkcmVwbGFjZTsKKyAgICAgIHZhciB1cmxPclN0YXRlQ2hhbmdlZCA9
IG9sZFVybCAhPT0gbmV3VXJsIHx8CisgICAgICAgICgkbG9jYXRpb24uJCRodG1sNSAmJiAkc25p
ZmZlci5oaXN0b3J5ICYmIG9sZFN0YXRlICE9PSAkbG9jYXRpb24uJCRzdGF0ZSk7CisKKyAgICAg
IGlmIChpbml0aWFsaXppbmcgfHwgdXJsT3JTdGF0ZUNoYW5nZWQpIHsKKyAgICAgICAgaW5pdGlh
bGl6aW5nID0gZmFsc2U7CisKKyAgICAgICAgJHJvb3RTY29wZS4kZXZhbEFzeW5jKGZ1bmN0aW9u
KCkgeworICAgICAgICAgIHZhciBuZXdVcmwgPSAkbG9jYXRpb24uYWJzVXJsKCk7CisgICAgICAg
ICAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSAkcm9vdFNjb3BlLiRicm9hZGNhc3QoJyRsb2NhdGlv
bkNoYW5nZVN0YXJ0JywgbmV3VXJsLCBvbGRVcmwsCisgICAgICAgICAgICAgICRsb2NhdGlvbi4k
JHN0YXRlLCBvbGRTdGF0ZSkuZGVmYXVsdFByZXZlbnRlZDsKKworICAgICAgICAgIC8vIGlmIHRo
ZSBsb2NhdGlvbiB3YXMgY2hhbmdlZCBieSBhIGAkbG9jYXRpb25DaGFuZ2VTdGFydGAgaGFuZGxl
ciB0aGVuIHN0b3AKKyAgICAgICAgICAvLyBwcm9jZXNzaW5nIHRoaXMgbG9jYXRpb24gY2hhbmdl
CisgICAgICAgICAgaWYgKCRsb2NhdGlvbi5hYnNVcmwoKSAhPT0gbmV3VXJsKSByZXR1cm47CisK
KyAgICAgICAgICBpZiAoZGVmYXVsdFByZXZlbnRlZCkgeworICAgICAgICAgICAgJGxvY2F0aW9u
LiQkcGFyc2Uob2xkVXJsKTsKKyAgICAgICAgICAgICRsb2NhdGlvbi4kJHN0YXRlID0gb2xkU3Rh
dGU7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh1cmxPclN0YXRlQ2hhbmdl
ZCkgeworICAgICAgICAgICAgICBzZXRCcm93c2VyVXJsV2l0aEZhbGxiYWNrKG5ld1VybCwgY3Vy
cmVudFJlcGxhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xk
U3RhdGUgPT09ICRsb2NhdGlvbi4kJHN0YXRlID8gbnVsbCA6ICRsb2NhdGlvbi4kJHN0YXRlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFmdGVyTG9jYXRpb25DaGFuZ2Uob2xkVXJsLCBv
bGRTdGF0ZSk7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH0KKworICAgICAgJGxv
Y2F0aW9uLiQkcmVwbGFjZSA9IGZhbHNlOworCisgICAgICAvLyB3ZSBkb24ndCBuZWVkIHRvIHJl
dHVybiBhbnl0aGluZyBiZWNhdXNlICRldmFsQXN5bmMgd2lsbCBtYWtlIHRoZSBkaWdlc3QgbG9v
cCBkaXJ0eSB3aGVuCisgICAgICAvLyB0aGVyZSBpcyBhIGNoYW5nZQorICAgIH0pOworCisgICAg
cmV0dXJuICRsb2NhdGlvbjsKKworICAgIGZ1bmN0aW9uIGFmdGVyTG9jYXRpb25DaGFuZ2Uob2xk
VXJsLCBvbGRTdGF0ZSkgeworICAgICAgJHJvb3RTY29wZS4kYnJvYWRjYXN0KCckbG9jYXRpb25D
aGFuZ2VTdWNjZXNzJywgJGxvY2F0aW9uLmFic1VybCgpLCBvbGRVcmwsCisgICAgICAgICRsb2Nh
dGlvbi4kJHN0YXRlLCBvbGRTdGF0ZSk7CisgICAgfQorfV07Cit9CisKKy8qKgorICogQG5nZG9j
IHNlcnZpY2UKKyAqIEBuYW1lICRsb2cKKyAqIEByZXF1aXJlcyAkd2luZG93CisgKgorICogQGRl
c2NyaXB0aW9uCisgKiBTaW1wbGUgc2VydmljZSBmb3IgbG9nZ2luZy4gRGVmYXVsdCBpbXBsZW1l
bnRhdGlvbiBzYWZlbHkgd3JpdGVzIHRoZSBtZXNzYWdlCisgKiBpbnRvIHRoZSBicm93c2VyJ3Mg
Y29uc29sZSAoaWYgcHJlc2VudCkuCisgKgorICogVGhlIG1haW4gcHVycG9zZSBvZiB0aGlzIHNl
cnZpY2UgaXMgdG8gc2ltcGxpZnkgZGVidWdnaW5nIGFuZCB0cm91Ymxlc2hvb3RpbmcuCisgKgor
ICogVGhlIGRlZmF1bHQgaXMgdG8gbG9nIGBkZWJ1Z2AgbWVzc2FnZXMuIFlvdSBjYW4gdXNlCisg
KiB7QGxpbmsgbmcuJGxvZ1Byb3ZpZGVyIG5nLiRsb2dQcm92aWRlciNkZWJ1Z0VuYWJsZWR9IHRv
IGNoYW5nZSB0aGlzLgorICoKKyAqIEBleGFtcGxlCisgICA8ZXhhbXBsZSBtb2R1bGU9ImxvZ0V4
YW1wbGUiPgorICAgICA8ZmlsZSBuYW1lPSJzY3JpcHQuanMiPgorICAgICAgIGFuZ3VsYXIubW9k
dWxlKCdsb2dFeGFtcGxlJywgW10pCisgICAgICAgICAuY29udHJvbGxlcignTG9nQ29udHJvbGxl
cicsIFsnJHNjb3BlJywgJyRsb2cnLCBmdW5jdGlvbigkc2NvcGUsICRsb2cpIHsKKyAgICAgICAg
ICAgJHNjb3BlLiRsb2cgPSAkbG9nOworICAgICAgICAgICAkc2NvcGUubWVzc2FnZSA9ICdIZWxs
byBXb3JsZCEnOworICAgICAgICAgfV0pOworICAgICA8L2ZpbGU+CisgICAgIDxmaWxlIG5hbWU9
ImluZGV4Lmh0bWwiPgorICAgICAgIDxkaXYgbmctY29udHJvbGxlcj0iTG9nQ29udHJvbGxlciI+
CisgICAgICAgICA8cD5SZWxvYWQgdGhpcyBwYWdlIHdpdGggb3BlbiBjb25zb2xlLCBlbnRlciB0
ZXh0IGFuZCBoaXQgdGhlIGxvZyBidXR0b24uLi48L3A+CisgICAgICAgICA8bGFiZWw+TWVzc2Fn
ZToKKyAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuZy1tb2RlbD0ibWVzc2FnZSIgLz48L2xh
YmVsPgorICAgICAgICAgPGJ1dHRvbiBuZy1jbGljaz0iJGxvZy5sb2cobWVzc2FnZSkiPmxvZzwv
YnV0dG9uPgorICAgICAgICAgPGJ1dHRvbiBuZy1jbGljaz0iJGxvZy53YXJuKG1lc3NhZ2UpIj53
YXJuPC9idXR0b24+CisgICAgICAgICA8YnV0dG9uIG5nLWNsaWNrPSIkbG9nLmluZm8obWVzc2Fn
ZSkiPmluZm88L2J1dHRvbj4KKyAgICAgICAgIDxidXR0b24gbmctY2xpY2s9IiRsb2cuZXJyb3Io
bWVzc2FnZSkiPmVycm9yPC9idXR0b24+CisgICAgICAgICA8YnV0dG9uIG5nLWNsaWNrPSIkbG9n
LmRlYnVnKG1lc3NhZ2UpIj5kZWJ1ZzwvYnV0dG9uPgorICAgICAgIDwvZGl2PgorICAgICA8L2Zp
bGU+CisgICA8L2V4YW1wbGU+CisgKi8KKworLyoqCisgKiBAbmdkb2MgcHJvdmlkZXIKKyAqIEBu
YW1lICRsb2dQcm92aWRlcgorICogQGRlc2NyaXB0aW9uCisgKiBVc2UgdGhlIGAkbG9nUHJvdmlk
ZXJgIHRvIGNvbmZpZ3VyZSBob3cgdGhlIGFwcGxpY2F0aW9uIGxvZ3MgbWVzc2FnZXMKKyAqLwor
ZnVuY3Rpb24gJExvZ1Byb3ZpZGVyKCkgeworICB2YXIgZGVidWcgPSB0cnVlLAorICAgICAgc2Vs
ZiA9IHRoaXM7CisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgJGxvZ1By
b3ZpZGVyI2RlYnVnRW5hYmxlZAorICAgKiBAZGVzY3JpcHRpb24KKyAgICogQHBhcmFtIHtib29s
ZWFuPX0gZmxhZyBlbmFibGUgb3IgZGlzYWJsZSBkZWJ1ZyBsZXZlbCBtZXNzYWdlcworICAgKiBA
cmV0dXJucyB7Kn0gY3VycmVudCB2YWx1ZSBpZiB1c2VkIGFzIGdldHRlciBvciBpdHNlbGYgKGNo
YWluaW5nKSBpZiB1c2VkIGFzIHNldHRlcgorICAgKi8KKyAgdGhpcy5kZWJ1Z0VuYWJsZWQgPSBm
dW5jdGlvbihmbGFnKSB7CisgICAgaWYgKGlzRGVmaW5lZChmbGFnKSkgeworICAgICAgZGVidWcg
PSBmbGFnOworICAgIHJldHVybiB0aGlzOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gZGVi
dWc7CisgICAgfQorICB9OworCisgIHRoaXMuJGdldCA9IFsnJHdpbmRvdycsIGZ1bmN0aW9uKCR3
aW5kb3cpIHsKKyAgICByZXR1cm4geworICAgICAgLyoqCisgICAgICAgKiBAbmdkb2MgbWV0aG9k
CisgICAgICAgKiBAbmFtZSAkbG9nI2xvZworICAgICAgICoKKyAgICAgICAqIEBkZXNjcmlwdGlv
bgorICAgICAgICogV3JpdGUgYSBsb2cgbWVzc2FnZQorICAgICAgICovCisgICAgICBsb2c6IGNv
bnNvbGVMb2coJ2xvZycpLAorCisgICAgICAvKioKKyAgICAgICAqIEBuZ2RvYyBtZXRob2QKKyAg
ICAgICAqIEBuYW1lICRsb2cjaW5mbworICAgICAgICoKKyAgICAgICAqIEBkZXNjcmlwdGlvbgor
ICAgICAgICogV3JpdGUgYW4gaW5mb3JtYXRpb24gbWVzc2FnZQorICAgICAgICovCisgICAgICBp
bmZvOiBjb25zb2xlTG9nKCdpbmZvJyksCisKKyAgICAgIC8qKgorICAgICAgICogQG5nZG9jIG1l
dGhvZAorICAgICAgICogQG5hbWUgJGxvZyN3YXJuCisgICAgICAgKgorICAgICAgICogQGRlc2Ny
aXB0aW9uCisgICAgICAgKiBXcml0ZSBhIHdhcm5pbmcgbWVzc2FnZQorICAgICAgICovCisgICAg
ICB3YXJuOiBjb25zb2xlTG9nKCd3YXJuJyksCisKKyAgICAgIC8qKgorICAgICAgICogQG5nZG9j
IG1ldGhvZAorICAgICAgICogQG5hbWUgJGxvZyNlcnJvcgorICAgICAgICoKKyAgICAgICAqIEBk
ZXNjcmlwdGlvbgorICAgICAgICogV3JpdGUgYW4gZXJyb3IgbWVzc2FnZQorICAgICAgICovCisg
ICAgICBlcnJvcjogY29uc29sZUxvZygnZXJyb3InKSwKKworICAgICAgLyoqCisgICAgICAgKiBA
bmdkb2MgbWV0aG9kCisgICAgICAgKiBAbmFtZSAkbG9nI2RlYnVnCisgICAgICAgKgorICAgICAg
ICogQGRlc2NyaXB0aW9uCisgICAgICAgKiBXcml0ZSBhIGRlYnVnIG1lc3NhZ2UKKyAgICAgICAq
LworICAgICAgZGVidWc6IChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGZuID0gY29uc29sZUxv
ZygnZGVidWcnKTsKKworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgaWYg
KGRlYnVnKSB7CisgICAgICAgICAgICBmbi5hcHBseShzZWxmLCBhcmd1bWVudHMpOworICAgICAg
ICAgIH0KKyAgICAgICAgfTsKKyAgICAgIH0oKSkKKyAgICB9OworCisgICAgZnVuY3Rpb24gZm9y
bWF0RXJyb3IoYXJnKSB7CisgICAgICBpZiAoYXJnIGluc3RhbmNlb2YgRXJyb3IpIHsKKyAgICAg
ICAgaWYgKGFyZy5zdGFjaykgeworICAgICAgICAgIGFyZyA9IChhcmcubWVzc2FnZSAmJiBhcmcu
c3RhY2suaW5kZXhPZihhcmcubWVzc2FnZSkgPT09IC0xKQorICAgICAgICAgICAgICA/ICdFcnJv
cjogJyArIGFyZy5tZXNzYWdlICsgJ1xuJyArIGFyZy5zdGFjaworICAgICAgICAgICAgICA6IGFy
Zy5zdGFjazsKKyAgICAgICAgfSBlbHNlIGlmIChhcmcuc291cmNlVVJMKSB7CisgICAgICAgICAg
YXJnID0gYXJnLm1lc3NhZ2UgKyAnXG4nICsgYXJnLnNvdXJjZVVSTCArICc6JyArIGFyZy5saW5l
OworICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4gYXJnOworICAgIH0KKworICAgIGZ1
bmN0aW9uIGNvbnNvbGVMb2codHlwZSkgeworICAgICAgdmFyIGNvbnNvbGUgPSAkd2luZG93LmNv
bnNvbGUgfHwge30sCisgICAgICAgICAgbG9nRm4gPSBjb25zb2xlW3R5cGVdIHx8IGNvbnNvbGUu
bG9nIHx8IG5vb3AsCisgICAgICAgICAgaGFzQXBwbHkgPSBmYWxzZTsKKworICAgICAgLy8gTm90
ZTogcmVhZGluZyBsb2dGbi5hcHBseSB0aHJvd3MgYW4gZXJyb3IgaW4gSUUxMSBpbiBJRTggZG9j
dW1lbnQgbW9kZS4KKyAgICAgIC8vIFRoZSByZWFzb24gYmVoaW5kIHRoaXMgaXMgdGhhdCBjb25z
b2xlLmxvZyBoYXMgdHlwZSAib2JqZWN0IiBpbiBJRTguLi4KKyAgICAgIHRyeSB7CisgICAgICAg
IGhhc0FwcGx5ID0gISFsb2dGbi5hcHBseTsKKyAgICAgIH0gY2F0Y2ggKGUpIHt9CisKKyAgICAg
IGlmIChoYXNBcHBseSkgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAg
dmFyIGFyZ3MgPSBbXTsKKyAgICAgICAgICBmb3JFYWNoKGFyZ3VtZW50cywgZnVuY3Rpb24oYXJn
KSB7CisgICAgICAgICAgICBhcmdzLnB1c2goZm9ybWF0RXJyb3IoYXJnKSk7CisgICAgICAgICAg
fSk7CisgICAgICAgICAgcmV0dXJuIGxvZ0ZuLmFwcGx5KGNvbnNvbGUsIGFyZ3MpOworICAgICAg
ICB9OworICAgICAgfQorCisgICAgICAvLyB3ZSBhcmUgSUUgd2hpY2ggZWl0aGVyIGRvZXNuJ3Qg
aGF2ZSB3aW5kb3cuY29uc29sZSA9PiB0aGlzIGlzIG5vb3AgYW5kIHdlIGRvIG5vdGhpbmcsCisg
ICAgICAvLyBvciB3ZSBhcmUgSUUgd2hlcmUgY29uc29sZS5sb2cgZG9lc24ndCBoYXZlIGFwcGx5
IHNvIHdlIGxvZyBhdCBsZWFzdCBmaXJzdCAyIGFyZ3MKKyAgICAgIHJldHVybiBmdW5jdGlvbihh
cmcxLCBhcmcyKSB7CisgICAgICAgIGxvZ0ZuKGFyZzEsIGFyZzIgPT0gbnVsbCA/ICcnIDogYXJn
Mik7CisgICAgICB9OworICAgIH0KKyAgfV07Cit9CisKKy8qICogKiAqICogKiAqICogKiAqICog
KiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKyAq
ICAgICBBbnkgY29tbWl0cyB0byB0aGlzIGZpbGUgc2hvdWxkIGJlIHJldmlld2VkIHdpdGggc2Vj
dXJpdHkgaW4gbWluZC4gICoKKyAqICAgQ2hhbmdlcyB0byB0aGlzIGZpbGUgY2FuIHBvdGVudGlh
bGx5IGNyZWF0ZSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuICoKKyAqICAgICAgICAgIEFuIGFw
cHJvdmFsIGZyb20gMiBDb3JlIG1lbWJlcnMgd2l0aCBoaXN0b3J5IG9mIG1vZGlmeWluZyAgICAg
ICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgZmlsZSBpcyByZXF1aXJlZC4gICAg
ICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBEb2VzIHRo
ZSBjaGFuZ2Ugc29tZWhvdyBhbGxvdyBmb3IgYXJiaXRyYXJ5IGphdmFzY3JpcHQgdG8gYmUgZXhl
Y3V0ZWQ/ICoKKyAqICAgIE9yIGFsbG93cyBmb3Igc29tZW9uZSB0byBjaGFuZ2UgdGhlIHByb3Rv
dHlwZSBvZiBidWlsdC1pbiBvYmplY3RzPyAgICoKKyAqICAgICBPciBnaXZlcyB1bmRlc2lyZWQg
YWNjZXNzIHRvIHZhcmlhYmxlcyBsaWtlcyBkb2N1bWVudCBvciB3aW5kb3c/ICAgICoKKyAqICog
KiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAq
ICogKiAqICogKiAqICovCisKK3ZhciAkcGFyc2VNaW5FcnIgPSBtaW5FcnIoJyRwYXJzZScpOwor
CisvLyBTYW5kYm94aW5nIEFuZ3VsYXIgRXhwcmVzc2lvbnMKKy8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorLy8gQW5ndWxhciBleHByZXNzaW9ucyBhcmUgZ2VuZXJhbGx5IGNvbnNp
ZGVyZWQgc2FmZSBiZWNhdXNlIHRoZXNlIGV4cHJlc3Npb25zIG9ubHkgaGF2ZSBkaXJlY3QKKy8v
IGFjY2VzcyB0byBgJHNjb3BlYCBhbmQgbG9jYWxzLiBIb3dldmVyLCBvbmUgY2FuIG9idGFpbiB0
aGUgYWJpbGl0eSB0byBleGVjdXRlIGFyYml0cmFyeSBKUyBjb2RlIGJ5CisvLyBvYnRhaW5pbmcg
YSByZWZlcmVuY2UgdG8gbmF0aXZlIEpTIGZ1bmN0aW9ucyBzdWNoIGFzIHRoZSBGdW5jdGlvbiBj
b25zdHJ1Y3Rvci4KKy8vCisvLyBBcyBhbiBleGFtcGxlLCBjb25zaWRlciB0aGUgZm9sbG93aW5n
IEFuZ3VsYXIgZXhwcmVzc2lvbjoKKy8vCisvLyAgIHt9LnRvU3RyaW5nLmNvbnN0cnVjdG9yKCdh
bGVydCgiZXZpbCBKUyBjb2RlIiknKQorLy8KKy8vIFRoaXMgc2FuZGJveGluZyB0ZWNobmlxdWUg
aXMgbm90IHBlcmZlY3QgYW5kIGRvZXNuJ3QgYWltIHRvIGJlLiBUaGUgZ29hbCBpcyB0byBwcmV2
ZW50IGV4cGxvaXRzCisvLyBhZ2FpbnN0IHRoZSBleHByZXNzaW9uIGxhbmd1YWdlLCBidXQgbm90
IHRvIHByZXZlbnQgZXhwbG9pdHMgdGhhdCB3ZXJlIGVuYWJsZWQgYnkgZXhwb3NpbmcKKy8vIHNl
bnNpdGl2ZSBKYXZhU2NyaXB0IG9yIGJyb3dzZXIgQVBJcyBvbiBTY29wZS4gRXhwb3Npbmcgc3Vj
aCBvYmplY3RzIG9uIGEgU2NvcGUgaXMgbmV2ZXIgYSBnb29kCisvLyBwcmFjdGljZSBhbmQgdGhl
cmVmb3JlIHdlIGFyZSBub3QgZXZlbiB0cnlpbmcgdG8gcHJvdGVjdCBhZ2FpbnN0IGludGVyYWN0
aW9uIHdpdGggYW4gb2JqZWN0CisvLyBleHBsaWNpdGx5IGV4cG9zZWQgaW4gdGhpcyB3YXkuCisv
LworLy8gSW4gZ2VuZXJhbCwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGFjY2VzcyBhIFdpbmRvdyBv
YmplY3QgZnJvbSBhbiBhbmd1bGFyIGV4cHJlc3Npb24gdW5sZXNzIGEKKy8vIHdpbmRvdyBvciBz
b21lIERPTSBvYmplY3QgdGhhdCBoYXMgYSByZWZlcmVuY2UgdG8gd2luZG93IGlzIHB1Ymxpc2hl
ZCBvbnRvIGEgU2NvcGUuCisvLyBTaW1pbGFybHkgd2UgcHJldmVudCBpbnZvY2F0aW9ucyBvZiBm
dW5jdGlvbiBrbm93biB0byBiZSBkYW5nZXJvdXMsIGFzIHdlbGwgYXMgYXNzaWdubWVudHMgdG8K
Ky8vIG5hdGl2ZSBvYmplY3RzLgorLy8KKy8vIFNlZSBodHRwczovL2RvY3MuYW5ndWxhcmpzLm9y
Zy9ndWlkZS9zZWN1cml0eQorCisKK2Z1bmN0aW9uIGVuc3VyZVNhZmVNZW1iZXJOYW1lKG5hbWUs
IGZ1bGxFeHByZXNzaW9uKSB7CisgIGlmIChuYW1lID09PSAiX19kZWZpbmVHZXR0ZXJfXyIgfHwg
bmFtZSA9PT0gIl9fZGVmaW5lU2V0dGVyX18iCisgICAgICB8fCBuYW1lID09PSAiX19sb29rdXBH
ZXR0ZXJfXyIgfHwgbmFtZSA9PT0gIl9fbG9va3VwU2V0dGVyX18iCisgICAgICB8fCBuYW1lID09
PSAiX19wcm90b19fIikgeworICAgIHRocm93ICRwYXJzZU1pbkVycignaXNlY2ZsZCcsCisgICAg
ICAgICdBdHRlbXB0aW5nIHRvIGFjY2VzcyBhIGRpc2FsbG93ZWQgZmllbGQgaW4gQW5ndWxhciBl
eHByZXNzaW9ucyEgJworICAgICAgICArICdFeHByZXNzaW9uOiB7MH0nLCBmdWxsRXhwcmVzc2lv
bik7CisgIH0KKyAgcmV0dXJuIG5hbWU7Cit9CisKK2Z1bmN0aW9uIGVuc3VyZVNhZmVPYmplY3Qo
b2JqLCBmdWxsRXhwcmVzc2lvbikgeworICAvLyBuaWZ0eSBjaGVjayBpZiBvYmogaXMgRnVuY3Rp
b24gdGhhdCBpcyBmYXN0IGFuZCB3b3JrcyBhY3Jvc3MgaWZyYW1lcyBhbmQgb3RoZXIgY29udGV4
dHMKKyAgaWYgKG9iaikgeworICAgIGlmIChvYmouY29uc3RydWN0b3IgPT09IG9iaikgeworICAg
ICAgdGhyb3cgJHBhcnNlTWluRXJyKCdpc2VjZm4nLAorICAgICAgICAgICdSZWZlcmVuY2luZyBG
dW5jdGlvbiBpbiBBbmd1bGFyIGV4cHJlc3Npb25zIGlzIGRpc2FsbG93ZWQhIEV4cHJlc3Npb246
IHswfScsCisgICAgICAgICAgZnVsbEV4cHJlc3Npb24pOworICAgIH0gZWxzZSBpZiAoLy8gaXNX
aW5kb3cob2JqKQorICAgICAgICBvYmoud2luZG93ID09PSBvYmopIHsKKyAgICAgIHRocm93ICRw
YXJzZU1pbkVycignaXNlY3dpbmRvdycsCisgICAgICAgICAgJ1JlZmVyZW5jaW5nIHRoZSBXaW5k
b3cgaW4gQW5ndWxhciBleHByZXNzaW9ucyBpcyBkaXNhbGxvd2VkISBFeHByZXNzaW9uOiB7MH0n
LAorICAgICAgICAgIGZ1bGxFeHByZXNzaW9uKTsKKyAgICB9IGVsc2UgaWYgKC8vIGlzRWxlbWVu
dChvYmopCisgICAgICAgIG9iai5jaGlsZHJlbiAmJiAob2JqLm5vZGVOYW1lIHx8IChvYmoucHJv
cCAmJiBvYmouYXR0ciAmJiBvYmouZmluZCkpKSB7CisgICAgICB0aHJvdyAkcGFyc2VNaW5FcnIo
J2lzZWNkb20nLAorICAgICAgICAgICdSZWZlcmVuY2luZyBET00gbm9kZXMgaW4gQW5ndWxhciBl
eHByZXNzaW9ucyBpcyBkaXNhbGxvd2VkISBFeHByZXNzaW9uOiB7MH0nLAorICAgICAgICAgIGZ1
bGxFeHByZXNzaW9uKTsKKyAgICB9IGVsc2UgaWYgKC8vIGJsb2NrIE9iamVjdCBzbyB0aGF0IHdl
IGNhbid0IGdldCBob2xkIG9mIGRhbmdlcm91cyBPYmplY3QuKiBtZXRob2RzCisgICAgICAgIG9i
aiA9PT0gT2JqZWN0KSB7CisgICAgICB0aHJvdyAkcGFyc2VNaW5FcnIoJ2lzZWNvYmonLAorICAg
ICAgICAgICdSZWZlcmVuY2luZyBPYmplY3QgaW4gQW5ndWxhciBleHByZXNzaW9ucyBpcyBkaXNh
bGxvd2VkISBFeHByZXNzaW9uOiB7MH0nLAorICAgICAgICAgIGZ1bGxFeHByZXNzaW9uKTsKKyAg
ICB9CisgIH0KKyAgcmV0dXJuIG9iajsKK30KKwordmFyIENBTEwgPSBGdW5jdGlvbi5wcm90b3R5
cGUuY2FsbDsKK3ZhciBBUFBMWSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseTsKK3ZhciBCSU5E
ID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7CisKK2Z1bmN0aW9uIGVuc3VyZVNhZmVGdW5jdGlv
bihvYmosIGZ1bGxFeHByZXNzaW9uKSB7CisgIGlmIChvYmopIHsKKyAgICBpZiAob2JqLmNvbnN0
cnVjdG9yID09PSBvYmopIHsKKyAgICAgIHRocm93ICRwYXJzZU1pbkVycignaXNlY2ZuJywKKyAg
ICAgICAgJ1JlZmVyZW5jaW5nIEZ1bmN0aW9uIGluIEFuZ3VsYXIgZXhwcmVzc2lvbnMgaXMgZGlz
YWxsb3dlZCEgRXhwcmVzc2lvbjogezB9JywKKyAgICAgICAgZnVsbEV4cHJlc3Npb24pOworICAg
IH0gZWxzZSBpZiAob2JqID09PSBDQUxMIHx8IG9iaiA9PT0gQVBQTFkgfHwgb2JqID09PSBCSU5E
KSB7CisgICAgICB0aHJvdyAkcGFyc2VNaW5FcnIoJ2lzZWNmZicsCisgICAgICAgICdSZWZlcmVu
Y2luZyBjYWxsLCBhcHBseSBvciBiaW5kIGluIEFuZ3VsYXIgZXhwcmVzc2lvbnMgaXMgZGlzYWxs
b3dlZCEgRXhwcmVzc2lvbjogezB9JywKKyAgICAgICAgZnVsbEV4cHJlc3Npb24pOworICAgIH0K
KyAgfQorfQorCit2YXIgT1BFUkFUT1JTID0gY3JlYXRlTWFwKCk7Citmb3JFYWNoKCcrIC0gKiAv
ICUgPT09ICE9PSA9PSAhPSA8ID4gPD0gPj0gJiYgfHwgISA9IHwnLnNwbGl0KCcgJyksIGZ1bmN0
aW9uKG9wZXJhdG9yKSB7IE9QRVJBVE9SU1tvcGVyYXRvcl0gPSB0cnVlOyB9KTsKK3ZhciBFU0NB
UEUgPSB7Im4iOiJcbiIsICJmIjoiXGYiLCAiciI6IlxyIiwgInQiOiJcdCIsICJ2IjoiXHYiLCAi
JyI6IiciLCAnIic6JyInfTsKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLworCisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKi8KK3ZhciBMZXhlciA9IGZ1bmN0
aW9uKG9wdGlvbnMpIHsKKyAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKK307CisKK0xleGVyLnBy
b3RvdHlwZSA9IHsKKyAgY29uc3RydWN0b3I6IExleGVyLAorCisgIGxleDogZnVuY3Rpb24odGV4
dCkgeworICAgIHRoaXMudGV4dCA9IHRleHQ7CisgICAgdGhpcy5pbmRleCA9IDA7CisgICAgdGhp
cy50b2tlbnMgPSBbXTsKKworICAgIHdoaWxlICh0aGlzLmluZGV4IDwgdGhpcy50ZXh0Lmxlbmd0
aCkgeworICAgICAgdmFyIGNoID0gdGhpcy50ZXh0LmNoYXJBdCh0aGlzLmluZGV4KTsKKyAgICAg
IGlmIChjaCA9PT0gJyInIHx8IGNoID09PSAiJyIpIHsKKyAgICAgICAgdGhpcy5yZWFkU3RyaW5n
KGNoKTsKKyAgICAgIH0gZWxzZSBpZiAodGhpcy5pc051bWJlcihjaCkgfHwgY2ggPT09ICcuJyAm
JiB0aGlzLmlzTnVtYmVyKHRoaXMucGVlaygpKSkgeworICAgICAgICB0aGlzLnJlYWROdW1iZXIo
KTsKKyAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0lkZW50KGNoKSkgeworICAgICAgICB0aGlzLnJl
YWRJZGVudCgpOworICAgICAgfSBlbHNlIGlmICh0aGlzLmlzKGNoLCAnKCl7fVtdLiw7Oj8nKSkg
eworICAgICAgICB0aGlzLnRva2Vucy5wdXNoKHtpbmRleDogdGhpcy5pbmRleCwgdGV4dDogY2h9
KTsKKyAgICAgICAgdGhpcy5pbmRleCsrOworICAgICAgfSBlbHNlIGlmICh0aGlzLmlzV2hpdGVz
cGFjZShjaCkpIHsKKyAgICAgICAgdGhpcy5pbmRleCsrOworICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgdmFyIGNoMiA9IGNoICsgdGhpcy5wZWVrKCk7CisgICAgICAgIHZhciBjaDMgPSBjaDIgKyB0
aGlzLnBlZWsoMik7CisgICAgICAgIHZhciBvcDEgPSBPUEVSQVRPUlNbY2hdOworICAgICAgICB2
YXIgb3AyID0gT1BFUkFUT1JTW2NoMl07CisgICAgICAgIHZhciBvcDMgPSBPUEVSQVRPUlNbY2gz
XTsKKyAgICAgICAgaWYgKG9wMSB8fCBvcDIgfHwgb3AzKSB7CisgICAgICAgICAgdmFyIHRva2Vu
ID0gb3AzID8gY2gzIDogKG9wMiA/IGNoMiA6IGNoKTsKKyAgICAgICAgICB0aGlzLnRva2Vucy5w
dXNoKHtpbmRleDogdGhpcy5pbmRleCwgdGV4dDogdG9rZW4sIG9wZXJhdG9yOiB0cnVlfSk7Cisg
ICAgICAgICAgdGhpcy5pbmRleCArPSB0b2tlbi5sZW5ndGg7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgdGhpcy50aHJvd0Vycm9yKCdVbmV4cGVjdGVkIG5leHQgY2hhcmFjdGVyICcsIHRo
aXMuaW5kZXgsIHRoaXMuaW5kZXggKyAxKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gdGhpcy50b2tlbnM7CisgIH0sCisKKyAgaXM6IGZ1bmN0aW9uKGNoLCBjaGFycykg
eworICAgIHJldHVybiBjaGFycy5pbmRleE9mKGNoKSAhPT0gLTE7CisgIH0sCisKKyAgcGVlazog
ZnVuY3Rpb24oaSkgeworICAgIHZhciBudW0gPSBpIHx8IDE7CisgICAgcmV0dXJuICh0aGlzLmlu
ZGV4ICsgbnVtIDwgdGhpcy50ZXh0Lmxlbmd0aCkgPyB0aGlzLnRleHQuY2hhckF0KHRoaXMuaW5k
ZXggKyBudW0pIDogZmFsc2U7CisgIH0sCisKKyAgaXNOdW1iZXI6IGZ1bmN0aW9uKGNoKSB7Cisg
ICAgcmV0dXJuICgnMCcgPD0gY2ggJiYgY2ggPD0gJzknKSAmJiB0eXBlb2YgY2ggPT09ICJzdHJp
bmciOworICB9LAorCisgIGlzV2hpdGVzcGFjZTogZnVuY3Rpb24oY2gpIHsKKyAgICAvLyBJRSB0
cmVhdHMgbm9uLWJyZWFraW5nIHNwYWNlIGFzIFx1MDBBMAorICAgIHJldHVybiAoY2ggPT09ICcg
JyB8fCBjaCA9PT0gJ1xyJyB8fCBjaCA9PT0gJ1x0JyB8fAorICAgICAgICAgICAgY2ggPT09ICdc
bicgfHwgY2ggPT09ICdcdicgfHwgY2ggPT09ICdcdTAwQTAnKTsKKyAgfSwKKworICBpc0lkZW50
OiBmdW5jdGlvbihjaCkgeworICAgIHJldHVybiAoJ2EnIDw9IGNoICYmIGNoIDw9ICd6JyB8fAor
ICAgICAgICAgICAgJ0EnIDw9IGNoICYmIGNoIDw9ICdaJyB8fAorICAgICAgICAgICAgJ18nID09
PSBjaCB8fCBjaCA9PT0gJyQnKTsKKyAgfSwKKworICBpc0V4cE9wZXJhdG9yOiBmdW5jdGlvbihj
aCkgeworICAgIHJldHVybiAoY2ggPT09ICctJyB8fCBjaCA9PT0gJysnIHx8IHRoaXMuaXNOdW1i
ZXIoY2gpKTsKKyAgfSwKKworICB0aHJvd0Vycm9yOiBmdW5jdGlvbihlcnJvciwgc3RhcnQsIGVu
ZCkgeworICAgIGVuZCA9IGVuZCB8fCB0aGlzLmluZGV4OworICAgIHZhciBjb2xTdHIgPSAoaXNE
ZWZpbmVkKHN0YXJ0KQorICAgICAgICAgICAgPyAncyAnICsgc3RhcnQgKyAgJy0nICsgdGhpcy5p
bmRleCArICcgWycgKyB0aGlzLnRleHQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpICsgJ10nCisgICAg
ICAgICAgICA6ICcgJyArIGVuZCk7CisgICAgdGhyb3cgJHBhcnNlTWluRXJyKCdsZXhlcnInLCAn
TGV4ZXIgRXJyb3I6IHswfSBhdCBjb2x1bW57MX0gaW4gZXhwcmVzc2lvbiBbezJ9XS4nLAorICAg
ICAgICBlcnJvciwgY29sU3RyLCB0aGlzLnRleHQpOworICB9LAorCisgIHJlYWROdW1iZXI6IGZ1
bmN0aW9uKCkgeworICAgIHZhciBudW1iZXIgPSAnJzsKKyAgICB2YXIgc3RhcnQgPSB0aGlzLmlu
ZGV4OworICAgIHdoaWxlICh0aGlzLmluZGV4IDwgdGhpcy50ZXh0Lmxlbmd0aCkgeworICAgICAg
dmFyIGNoID0gbG93ZXJjYXNlKHRoaXMudGV4dC5jaGFyQXQodGhpcy5pbmRleCkpOworICAgICAg
aWYgKGNoID09ICcuJyB8fCB0aGlzLmlzTnVtYmVyKGNoKSkgeworICAgICAgICBudW1iZXIgKz0g
Y2g7CisgICAgICB9IGVsc2UgeworICAgICAgICB2YXIgcGVla0NoID0gdGhpcy5wZWVrKCk7Cisg
ICAgICAgIGlmIChjaCA9PSAnZScgJiYgdGhpcy5pc0V4cE9wZXJhdG9yKHBlZWtDaCkpIHsKKyAg
ICAgICAgICBudW1iZXIgKz0gY2g7CisgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0V4cE9wZXJh
dG9yKGNoKSAmJgorICAgICAgICAgICAgcGVla0NoICYmIHRoaXMuaXNOdW1iZXIocGVla0NoKSAm
JgorICAgICAgICAgICAgbnVtYmVyLmNoYXJBdChudW1iZXIubGVuZ3RoIC0gMSkgPT0gJ2UnKSB7
CisgICAgICAgICAgbnVtYmVyICs9IGNoOworICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNFeHBP
cGVyYXRvcihjaCkgJiYKKyAgICAgICAgICAgICghcGVla0NoIHx8ICF0aGlzLmlzTnVtYmVyKHBl
ZWtDaCkpICYmCisgICAgICAgICAgICBudW1iZXIuY2hhckF0KG51bWJlci5sZW5ndGggLSAxKSA9
PSAnZScpIHsKKyAgICAgICAgICB0aGlzLnRocm93RXJyb3IoJ0ludmFsaWQgZXhwb25lbnQnKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQor
ICAgICAgdGhpcy5pbmRleCsrOworICAgIH0KKyAgICB0aGlzLnRva2Vucy5wdXNoKHsKKyAgICAg
IGluZGV4OiBzdGFydCwKKyAgICAgIHRleHQ6IG51bWJlciwKKyAgICAgIGNvbnN0YW50OiB0cnVl
LAorICAgICAgdmFsdWU6IE51bWJlcihudW1iZXIpCisgICAgfSk7CisgIH0sCisKKyAgcmVhZElk
ZW50OiBmdW5jdGlvbigpIHsKKyAgICB2YXIgc3RhcnQgPSB0aGlzLmluZGV4OworICAgIHdoaWxl
ICh0aGlzLmluZGV4IDwgdGhpcy50ZXh0Lmxlbmd0aCkgeworICAgICAgdmFyIGNoID0gdGhpcy50
ZXh0LmNoYXJBdCh0aGlzLmluZGV4KTsKKyAgICAgIGlmICghKHRoaXMuaXNJZGVudChjaCkgfHwg
dGhpcy5pc051bWJlcihjaCkpKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgdGhp
cy5pbmRleCsrOworICAgIH0KKyAgICB0aGlzLnRva2Vucy5wdXNoKHsKKyAgICAgIGluZGV4OiBz
dGFydCwKKyAgICAgIHRleHQ6IHRoaXMudGV4dC5zbGljZShzdGFydCwgdGhpcy5pbmRleCksCisg
ICAgICBpZGVudGlmaWVyOiB0cnVlCisgICAgfSk7CisgIH0sCisKKyAgcmVhZFN0cmluZzogZnVu
Y3Rpb24ocXVvdGUpIHsKKyAgICB2YXIgc3RhcnQgPSB0aGlzLmluZGV4OworICAgIHRoaXMuaW5k
ZXgrKzsKKyAgICB2YXIgc3RyaW5nID0gJyc7CisgICAgdmFyIHJhd1N0cmluZyA9IHF1b3RlOwor
ICAgIHZhciBlc2NhcGUgPSBmYWxzZTsKKyAgICB3aGlsZSAodGhpcy5pbmRleCA8IHRoaXMudGV4
dC5sZW5ndGgpIHsKKyAgICAgIHZhciBjaCA9IHRoaXMudGV4dC5jaGFyQXQodGhpcy5pbmRleCk7
CisgICAgICByYXdTdHJpbmcgKz0gY2g7CisgICAgICBpZiAoZXNjYXBlKSB7CisgICAgICAgIGlm
IChjaCA9PT0gJ3UnKSB7CisgICAgICAgICAgdmFyIGhleCA9IHRoaXMudGV4dC5zdWJzdHJpbmco
dGhpcy5pbmRleCArIDEsIHRoaXMuaW5kZXggKyA1KTsKKyAgICAgICAgICBpZiAoIWhleC5tYXRj
aCgvW1xkYS1mXXs0fS9pKSkgeworICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKCdJbnZhbGlk
IHVuaWNvZGUgZXNjYXBlIFtcXHUnICsgaGV4ICsgJ10nKTsKKyAgICAgICAgICB9CisgICAgICAg
ICAgdGhpcy5pbmRleCArPSA0OworICAgICAgICAgIHN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJD
b2RlKHBhcnNlSW50KGhleCwgMTYpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB2YXIg
cmVwID0gRVNDQVBFW2NoXTsKKyAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcgKyAocmVwIHx8IGNo
KTsKKyAgICAgICAgfQorICAgICAgICBlc2NhcGUgPSBmYWxzZTsKKyAgICAgIH0gZWxzZSBpZiAo
Y2ggPT09ICdcXCcpIHsKKyAgICAgICAgZXNjYXBlID0gdHJ1ZTsKKyAgICAgIH0gZWxzZSBpZiAo
Y2ggPT09IHF1b3RlKSB7CisgICAgICAgIHRoaXMuaW5kZXgrKzsKKyAgICAgICAgdGhpcy50b2tl
bnMucHVzaCh7CisgICAgICAgICAgaW5kZXg6IHN0YXJ0LAorICAgICAgICAgIHRleHQ6IHJhd1N0
cmluZywKKyAgICAgICAgICBjb25zdGFudDogdHJ1ZSwKKyAgICAgICAgICB2YWx1ZTogc3RyaW5n
CisgICAgICAgIH0pOworICAgICAgICByZXR1cm47CisgICAgICB9IGVsc2UgeworICAgICAgICBz
dHJpbmcgKz0gY2g7CisgICAgICB9CisgICAgICB0aGlzLmluZGV4Kys7CisgICAgfQorICAgIHRo
aXMudGhyb3dFcnJvcignVW50ZXJtaW5hdGVkIHF1b3RlJywgc3RhcnQpOworICB9Cit9OworCit2
YXIgQVNUID0gZnVuY3Rpb24obGV4ZXIsIG9wdGlvbnMpIHsKKyAgdGhpcy5sZXhlciA9IGxleGVy
OworICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOworfTsKKworQVNULlByb2dyYW0gPSAnUHJvZ3Jh
bSc7CitBU1QuRXhwcmVzc2lvblN0YXRlbWVudCA9ICdFeHByZXNzaW9uU3RhdGVtZW50JzsKK0FT
VC5Bc3NpZ25tZW50RXhwcmVzc2lvbiA9ICdBc3NpZ25tZW50RXhwcmVzc2lvbic7CitBU1QuQ29u
ZGl0aW9uYWxFeHByZXNzaW9uID0gJ0NvbmRpdGlvbmFsRXhwcmVzc2lvbic7CitBU1QuTG9naWNh
bEV4cHJlc3Npb24gPSAnTG9naWNhbEV4cHJlc3Npb24nOworQVNULkJpbmFyeUV4cHJlc3Npb24g
PSAnQmluYXJ5RXhwcmVzc2lvbic7CitBU1QuVW5hcnlFeHByZXNzaW9uID0gJ1VuYXJ5RXhwcmVz
c2lvbic7CitBU1QuQ2FsbEV4cHJlc3Npb24gPSAnQ2FsbEV4cHJlc3Npb24nOworQVNULk1lbWJl
ckV4cHJlc3Npb24gPSAnTWVtYmVyRXhwcmVzc2lvbic7CitBU1QuSWRlbnRpZmllciA9ICdJZGVu
dGlmaWVyJzsKK0FTVC5MaXRlcmFsID0gJ0xpdGVyYWwnOworQVNULkFycmF5RXhwcmVzc2lvbiA9
ICdBcnJheUV4cHJlc3Npb24nOworQVNULlByb3BlcnR5ID0gJ1Byb3BlcnR5JzsKK0FTVC5PYmpl
Y3RFeHByZXNzaW9uID0gJ09iamVjdEV4cHJlc3Npb24nOworQVNULlRoaXNFeHByZXNzaW9uID0g
J1RoaXNFeHByZXNzaW9uJzsKKworLy8gSW50ZXJuYWwgdXNlIG9ubHkKK0FTVC5OR1ZhbHVlUGFy
YW1ldGVyID0gJ05HVmFsdWVQYXJhbWV0ZXInOworCitBU1QucHJvdG90eXBlID0geworICBhc3Q6
IGZ1bmN0aW9uKHRleHQpIHsKKyAgICB0aGlzLnRleHQgPSB0ZXh0OworICAgIHRoaXMudG9rZW5z
ID0gdGhpcy5sZXhlci5sZXgodGV4dCk7CisKKyAgICB2YXIgdmFsdWUgPSB0aGlzLnByb2dyYW0o
KTsKKworICAgIGlmICh0aGlzLnRva2Vucy5sZW5ndGggIT09IDApIHsKKyAgICAgIHRoaXMudGhy
b3dFcnJvcignaXMgYW4gdW5leHBlY3RlZCB0b2tlbicsIHRoaXMudG9rZW5zWzBdKTsKKyAgICB9
CisKKyAgICByZXR1cm4gdmFsdWU7CisgIH0sCisKKyAgcHJvZ3JhbTogZnVuY3Rpb24oKSB7Cisg
ICAgdmFyIGJvZHkgPSBbXTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgaWYgKHRoaXMudG9r
ZW5zLmxlbmd0aCA+IDAgJiYgIXRoaXMucGVlaygnfScsICcpJywgJzsnLCAnXScpKQorICAgICAg
ICBib2R5LnB1c2godGhpcy5leHByZXNzaW9uU3RhdGVtZW50KCkpOworICAgICAgaWYgKCF0aGlz
LmV4cGVjdCgnOycpKSB7CisgICAgICAgIHJldHVybiB7IHR5cGU6IEFTVC5Qcm9ncmFtLCBib2R5
OiBib2R5fTsKKyAgICAgIH0KKyAgICB9CisgIH0sCisKKyAgZXhwcmVzc2lvblN0YXRlbWVudDog
ZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHsgdHlwZTogQVNULkV4cHJlc3Npb25TdGF0ZW1lbnQs
IGV4cHJlc3Npb246IHRoaXMuZmlsdGVyQ2hhaW4oKSB9OworICB9LAorCisgIGZpbHRlckNoYWlu
OiBmdW5jdGlvbigpIHsKKyAgICB2YXIgbGVmdCA9IHRoaXMuZXhwcmVzc2lvbigpOworICAgIHZh
ciB0b2tlbjsKKyAgICB3aGlsZSAoKHRva2VuID0gdGhpcy5leHBlY3QoJ3wnKSkpIHsKKyAgICAg
IGxlZnQgPSB0aGlzLmZpbHRlcihsZWZ0KTsKKyAgICB9CisgICAgcmV0dXJuIGxlZnQ7CisgIH0s
CisKKyAgZXhwcmVzc2lvbjogZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuYXNzaWdubWVu
dCgpOworICB9LAorCisgIGFzc2lnbm1lbnQ6IGZ1bmN0aW9uKCkgeworICAgIHZhciByZXN1bHQg
PSB0aGlzLnRlcm5hcnkoKTsKKyAgICBpZiAodGhpcy5leHBlY3QoJz0nKSkgeworICAgICAgcmVz
dWx0ID0geyB0eXBlOiBBU1QuQXNzaWdubWVudEV4cHJlc3Npb24sIGxlZnQ6IHJlc3VsdCwgcmln
aHQ6IHRoaXMuYXNzaWdubWVudCgpLCBvcGVyYXRvcjogJz0nfTsKKyAgICB9CisgICAgcmV0dXJu
IHJlc3VsdDsKKyAgfSwKKworICB0ZXJuYXJ5OiBmdW5jdGlvbigpIHsKKyAgICB2YXIgdGVzdCA9
IHRoaXMubG9naWNhbE9SKCk7CisgICAgdmFyIGFsdGVybmF0ZTsKKyAgICB2YXIgY29uc2VxdWVu
dDsKKyAgICBpZiAodGhpcy5leHBlY3QoJz8nKSkgeworICAgICAgYWx0ZXJuYXRlID0gdGhpcy5l
eHByZXNzaW9uKCk7CisgICAgICBpZiAodGhpcy5jb25zdW1lKCc6JykpIHsKKyAgICAgICAgY29u
c2VxdWVudCA9IHRoaXMuZXhwcmVzc2lvbigpOworICAgICAgICByZXR1cm4geyB0eXBlOiBBU1Qu
Q29uZGl0aW9uYWxFeHByZXNzaW9uLCB0ZXN0OiB0ZXN0LCBhbHRlcm5hdGU6IGFsdGVybmF0ZSwg
Y29uc2VxdWVudDogY29uc2VxdWVudH07CisgICAgICB9CisgICAgfQorICAgIHJldHVybiB0ZXN0
OworICB9LAorCisgIGxvZ2ljYWxPUjogZnVuY3Rpb24oKSB7CisgICAgdmFyIGxlZnQgPSB0aGlz
LmxvZ2ljYWxBTkQoKTsKKyAgICB3aGlsZSAodGhpcy5leHBlY3QoJ3x8JykpIHsKKyAgICAgIGxl
ZnQgPSB7IHR5cGU6IEFTVC5Mb2dpY2FsRXhwcmVzc2lvbiwgb3BlcmF0b3I6ICd8fCcsIGxlZnQ6
IGxlZnQsIHJpZ2h0OiB0aGlzLmxvZ2ljYWxBTkQoKSB9OworICAgIH0KKyAgICByZXR1cm4gbGVm
dDsKKyAgfSwKKworICBsb2dpY2FsQU5EOiBmdW5jdGlvbigpIHsKKyAgICB2YXIgbGVmdCA9IHRo
aXMuZXF1YWxpdHkoKTsKKyAgICB3aGlsZSAodGhpcy5leHBlY3QoJyYmJykpIHsKKyAgICAgIGxl
ZnQgPSB7IHR5cGU6IEFTVC5Mb2dpY2FsRXhwcmVzc2lvbiwgb3BlcmF0b3I6ICcmJicsIGxlZnQ6
IGxlZnQsIHJpZ2h0OiB0aGlzLmVxdWFsaXR5KCl9OworICAgIH0KKyAgICByZXR1cm4gbGVmdDsK
KyAgfSwKKworICBlcXVhbGl0eTogZnVuY3Rpb24oKSB7CisgICAgdmFyIGxlZnQgPSB0aGlzLnJl
bGF0aW9uYWwoKTsKKyAgICB2YXIgdG9rZW47CisgICAgd2hpbGUgKCh0b2tlbiA9IHRoaXMuZXhw
ZWN0KCc9PScsJyE9JywnPT09JywnIT09JykpKSB7CisgICAgICBsZWZ0ID0geyB0eXBlOiBBU1Qu
QmluYXJ5RXhwcmVzc2lvbiwgb3BlcmF0b3I6IHRva2VuLnRleHQsIGxlZnQ6IGxlZnQsIHJpZ2h0
OiB0aGlzLnJlbGF0aW9uYWwoKSB9OworICAgIH0KKyAgICByZXR1cm4gbGVmdDsKKyAgfSwKKwor
ICByZWxhdGlvbmFsOiBmdW5jdGlvbigpIHsKKyAgICB2YXIgbGVmdCA9IHRoaXMuYWRkaXRpdmUo
KTsKKyAgICB2YXIgdG9rZW47CisgICAgd2hpbGUgKCh0b2tlbiA9IHRoaXMuZXhwZWN0KCc8Jywg
Jz4nLCAnPD0nLCAnPj0nKSkpIHsKKyAgICAgIGxlZnQgPSB7IHR5cGU6IEFTVC5CaW5hcnlFeHBy
ZXNzaW9uLCBvcGVyYXRvcjogdG9rZW4udGV4dCwgbGVmdDogbGVmdCwgcmlnaHQ6IHRoaXMuYWRk
aXRpdmUoKSB9OworICAgIH0KKyAgICByZXR1cm4gbGVmdDsKKyAgfSwKKworICBhZGRpdGl2ZTog
ZnVuY3Rpb24oKSB7CisgICAgdmFyIGxlZnQgPSB0aGlzLm11bHRpcGxpY2F0aXZlKCk7CisgICAg
dmFyIHRva2VuOworICAgIHdoaWxlICgodG9rZW4gPSB0aGlzLmV4cGVjdCgnKycsJy0nKSkpIHsK
KyAgICAgIGxlZnQgPSB7IHR5cGU6IEFTVC5CaW5hcnlFeHByZXNzaW9uLCBvcGVyYXRvcjogdG9r
ZW4udGV4dCwgbGVmdDogbGVmdCwgcmlnaHQ6IHRoaXMubXVsdGlwbGljYXRpdmUoKSB9OworICAg
IH0KKyAgICByZXR1cm4gbGVmdDsKKyAgfSwKKworICBtdWx0aXBsaWNhdGl2ZTogZnVuY3Rpb24o
KSB7CisgICAgdmFyIGxlZnQgPSB0aGlzLnVuYXJ5KCk7CisgICAgdmFyIHRva2VuOworICAgIHdo
aWxlICgodG9rZW4gPSB0aGlzLmV4cGVjdCgnKicsJy8nLCclJykpKSB7CisgICAgICBsZWZ0ID0g
eyB0eXBlOiBBU1QuQmluYXJ5RXhwcmVzc2lvbiwgb3BlcmF0b3I6IHRva2VuLnRleHQsIGxlZnQ6
IGxlZnQsIHJpZ2h0OiB0aGlzLnVuYXJ5KCkgfTsKKyAgICB9CisgICAgcmV0dXJuIGxlZnQ7Cisg
IH0sCisKKyAgdW5hcnk6IGZ1bmN0aW9uKCkgeworICAgIHZhciB0b2tlbjsKKyAgICBpZiAoKHRv
a2VuID0gdGhpcy5leHBlY3QoJysnLCAnLScsICchJykpKSB7CisgICAgICByZXR1cm4geyB0eXBl
OiBBU1QuVW5hcnlFeHByZXNzaW9uLCBvcGVyYXRvcjogdG9rZW4udGV4dCwgcHJlZml4OiB0cnVl
LCBhcmd1bWVudDogdGhpcy51bmFyeSgpIH07CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiB0
aGlzLnByaW1hcnkoKTsKKyAgICB9CisgIH0sCisKKyAgcHJpbWFyeTogZnVuY3Rpb24oKSB7Cisg
ICAgdmFyIHByaW1hcnk7CisgICAgaWYgKHRoaXMuZXhwZWN0KCcoJykpIHsKKyAgICAgIHByaW1h
cnkgPSB0aGlzLmZpbHRlckNoYWluKCk7CisgICAgICB0aGlzLmNvbnN1bWUoJyknKTsKKyAgICB9
IGVsc2UgaWYgKHRoaXMuZXhwZWN0KCdbJykpIHsKKyAgICAgIHByaW1hcnkgPSB0aGlzLmFycmF5
RGVjbGFyYXRpb24oKTsKKyAgICB9IGVsc2UgaWYgKHRoaXMuZXhwZWN0KCd7JykpIHsKKyAgICAg
IHByaW1hcnkgPSB0aGlzLm9iamVjdCgpOworICAgIH0gZWxzZSBpZiAodGhpcy5jb25zdGFudHMu
aGFzT3duUHJvcGVydHkodGhpcy5wZWVrKCkudGV4dCkpIHsKKyAgICAgIHByaW1hcnkgPSBjb3B5
KHRoaXMuY29uc3RhbnRzW3RoaXMuY29uc3VtZSgpLnRleHRdKTsKKyAgICB9IGVsc2UgaWYgKHRo
aXMucGVlaygpLmlkZW50aWZpZXIpIHsKKyAgICAgIHByaW1hcnkgPSB0aGlzLmlkZW50aWZpZXIo
KTsKKyAgICB9IGVsc2UgaWYgKHRoaXMucGVlaygpLmNvbnN0YW50KSB7CisgICAgICBwcmltYXJ5
ID0gdGhpcy5jb25zdGFudCgpOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLnRocm93RXJyb3Io
J25vdCBhIHByaW1hcnkgZXhwcmVzc2lvbicsIHRoaXMucGVlaygpKTsKKyAgICB9CisKKyAgICB2
YXIgbmV4dDsKKyAgICB3aGlsZSAoKG5leHQgPSB0aGlzLmV4cGVjdCgnKCcsICdbJywgJy4nKSkp
IHsKKyAgICAgIGlmIChuZXh0LnRleHQgPT09ICcoJykgeworICAgICAgICBwcmltYXJ5ID0ge3R5
cGU6IEFTVC5DYWxsRXhwcmVzc2lvbiwgY2FsbGVlOiBwcmltYXJ5LCBhcmd1bWVudHM6IHRoaXMu
cGFyc2VBcmd1bWVudHMoKSB9OworICAgICAgICB0aGlzLmNvbnN1bWUoJyknKTsKKyAgICAgIH0g
ZWxzZSBpZiAobmV4dC50ZXh0ID09PSAnWycpIHsKKyAgICAgICAgcHJpbWFyeSA9IHsgdHlwZTog
QVNULk1lbWJlckV4cHJlc3Npb24sIG9iamVjdDogcHJpbWFyeSwgcHJvcGVydHk6IHRoaXMuZXhw
cmVzc2lvbigpLCBjb21wdXRlZDogdHJ1ZSB9OworICAgICAgICB0aGlzLmNvbnN1bWUoJ10nKTsK
KyAgICAgIH0gZWxzZSBpZiAobmV4dC50ZXh0ID09PSAnLicpIHsKKyAgICAgICAgcHJpbWFyeSA9
IHsgdHlwZTogQVNULk1lbWJlckV4cHJlc3Npb24sIG9iamVjdDogcHJpbWFyeSwgcHJvcGVydHk6
IHRoaXMuaWRlbnRpZmllcigpLCBjb21wdXRlZDogZmFsc2UgfTsKKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgIHRoaXMudGhyb3dFcnJvcignSU1QT1NTSUJMRScpOworICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gcHJpbWFyeTsKKyAgfSwKKworICBmaWx0ZXI6IGZ1bmN0aW9uKGJhc2VFeHByZXNz
aW9uKSB7CisgICAgdmFyIGFyZ3MgPSBbYmFzZUV4cHJlc3Npb25dOworICAgIHZhciByZXN1bHQg
PSB7dHlwZTogQVNULkNhbGxFeHByZXNzaW9uLCBjYWxsZWU6IHRoaXMuaWRlbnRpZmllcigpLCBh
cmd1bWVudHM6IGFyZ3MsIGZpbHRlcjogdHJ1ZX07CisKKyAgICB3aGlsZSAodGhpcy5leHBlY3Qo
JzonKSkgeworICAgICAgYXJncy5wdXNoKHRoaXMuZXhwcmVzc2lvbigpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gcmVzdWx0OworICB9LAorCisgIHBhcnNlQXJndW1lbnRzOiBmdW5jdGlvbigpIHsK
KyAgICB2YXIgYXJncyA9IFtdOworICAgIGlmICh0aGlzLnBlZWtUb2tlbigpLnRleHQgIT09ICcp
JykgeworICAgICAgZG8geworICAgICAgICBhcmdzLnB1c2godGhpcy5leHByZXNzaW9uKCkpOwor
ICAgICAgfSB3aGlsZSAodGhpcy5leHBlY3QoJywnKSk7CisgICAgfQorICAgIHJldHVybiBhcmdz
OworICB9LAorCisgIGlkZW50aWZpZXI6IGZ1bmN0aW9uKCkgeworICAgIHZhciB0b2tlbiA9IHRo
aXMuY29uc3VtZSgpOworICAgIGlmICghdG9rZW4uaWRlbnRpZmllcikgeworICAgICAgdGhpcy50
aHJvd0Vycm9yKCdpcyBub3QgYSB2YWxpZCBpZGVudGlmaWVyJywgdG9rZW4pOworICAgIH0KKyAg
ICByZXR1cm4geyB0eXBlOiBBU1QuSWRlbnRpZmllciwgbmFtZTogdG9rZW4udGV4dCB9OworICB9
LAorCisgIGNvbnN0YW50OiBmdW5jdGlvbigpIHsKKyAgICAvLyBUT0RPIGNoZWNrIHRoYXQgaXQg
aXMgYSBjb25zdGFudAorICAgIHJldHVybiB7IHR5cGU6IEFTVC5MaXRlcmFsLCB2YWx1ZTogdGhp
cy5jb25zdW1lKCkudmFsdWUgfTsKKyAgfSwKKworICBhcnJheURlY2xhcmF0aW9uOiBmdW5jdGlv
bigpIHsKKyAgICB2YXIgZWxlbWVudHMgPSBbXTsKKyAgICBpZiAodGhpcy5wZWVrVG9rZW4oKS50
ZXh0ICE9PSAnXScpIHsKKyAgICAgIGRvIHsKKyAgICAgICAgaWYgKHRoaXMucGVlaygnXScpKSB7
CisgICAgICAgICAgLy8gU3VwcG9ydCB0cmFpbGluZyBjb21tYXMgcGVyIEVTNS4xLgorICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsZW1lbnRzLnB1c2godGhpcy5leHByZXNz
aW9uKCkpOworICAgICAgfSB3aGlsZSAodGhpcy5leHBlY3QoJywnKSk7CisgICAgfQorICAgIHRo
aXMuY29uc3VtZSgnXScpOworCisgICAgcmV0dXJuIHsgdHlwZTogQVNULkFycmF5RXhwcmVzc2lv
biwgZWxlbWVudHM6IGVsZW1lbnRzIH07CisgIH0sCisKKyAgb2JqZWN0OiBmdW5jdGlvbigpIHsK
KyAgICB2YXIgcHJvcGVydGllcyA9IFtdLCBwcm9wZXJ0eTsKKyAgICBpZiAodGhpcy5wZWVrVG9r
ZW4oKS50ZXh0ICE9PSAnfScpIHsKKyAgICAgIGRvIHsKKyAgICAgICAgaWYgKHRoaXMucGVlaygn
fScpKSB7CisgICAgICAgICAgLy8gU3VwcG9ydCB0cmFpbGluZyBjb21tYXMgcGVyIEVTNS4xLgor
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHByb3BlcnR5ID0ge3R5cGU6IEFT
VC5Qcm9wZXJ0eSwga2luZDogJ2luaXQnfTsKKyAgICAgICAgaWYgKHRoaXMucGVlaygpLmNvbnN0
YW50KSB7CisgICAgICAgICAgcHJvcGVydHkua2V5ID0gdGhpcy5jb25zdGFudCgpOworICAgICAg
ICB9IGVsc2UgaWYgKHRoaXMucGVlaygpLmlkZW50aWZpZXIpIHsKKyAgICAgICAgICBwcm9wZXJ0
eS5rZXkgPSB0aGlzLmlkZW50aWZpZXIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0
aGlzLnRocm93RXJyb3IoImludmFsaWQga2V5IiwgdGhpcy5wZWVrKCkpOworICAgICAgICB9Cisg
ICAgICAgIHRoaXMuY29uc3VtZSgnOicpOworICAgICAgICBwcm9wZXJ0eS52YWx1ZSA9IHRoaXMu
ZXhwcmVzc2lvbigpOworICAgICAgICBwcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpOworICAgICAg
fSB3aGlsZSAodGhpcy5leHBlY3QoJywnKSk7CisgICAgfQorICAgIHRoaXMuY29uc3VtZSgnfScp
OworCisgICAgcmV0dXJuIHt0eXBlOiBBU1QuT2JqZWN0RXhwcmVzc2lvbiwgcHJvcGVydGllczog
cHJvcGVydGllcyB9OworICB9LAorCisgIHRocm93RXJyb3I6IGZ1bmN0aW9uKG1zZywgdG9rZW4p
IHsKKyAgICB0aHJvdyAkcGFyc2VNaW5FcnIoJ3N5bnRheCcsCisgICAgICAgICdTeW50YXggRXJy
b3I6IFRva2VuIFwnezB9XCcgezF9IGF0IGNvbHVtbiB7Mn0gb2YgdGhlIGV4cHJlc3Npb24gW3sz
fV0gc3RhcnRpbmcgYXQgW3s0fV0uJywKKyAgICAgICAgICB0b2tlbi50ZXh0LCBtc2csICh0b2tl
bi5pbmRleCArIDEpLCB0aGlzLnRleHQsIHRoaXMudGV4dC5zdWJzdHJpbmcodG9rZW4uaW5kZXgp
KTsKKyAgfSwKKworICBjb25zdW1lOiBmdW5jdGlvbihlMSkgeworICAgIGlmICh0aGlzLnRva2Vu
cy5sZW5ndGggPT09IDApIHsKKyAgICAgIHRocm93ICRwYXJzZU1pbkVycigndWVvZScsICdVbmV4
cGVjdGVkIGVuZCBvZiBleHByZXNzaW9uOiB7MH0nLCB0aGlzLnRleHQpOworICAgIH0KKworICAg
IHZhciB0b2tlbiA9IHRoaXMuZXhwZWN0KGUxKTsKKyAgICBpZiAoIXRva2VuKSB7CisgICAgICB0
aGlzLnRocm93RXJyb3IoJ2lzIHVuZXhwZWN0ZWQsIGV4cGVjdGluZyBbJyArIGUxICsgJ10nLCB0
aGlzLnBlZWsoKSk7CisgICAgfQorICAgIHJldHVybiB0b2tlbjsKKyAgfSwKKworICBwZWVrVG9r
ZW46IGZ1bmN0aW9uKCkgeworICAgIGlmICh0aGlzLnRva2Vucy5sZW5ndGggPT09IDApIHsKKyAg
ICAgIHRocm93ICRwYXJzZU1pbkVycigndWVvZScsICdVbmV4cGVjdGVkIGVuZCBvZiBleHByZXNz
aW9uOiB7MH0nLCB0aGlzLnRleHQpOworICAgIH0KKyAgICByZXR1cm4gdGhpcy50b2tlbnNbMF07
CisgIH0sCisKKyAgcGVlazogZnVuY3Rpb24oZTEsIGUyLCBlMywgZTQpIHsKKyAgICByZXR1cm4g
dGhpcy5wZWVrQWhlYWQoMCwgZTEsIGUyLCBlMywgZTQpOworICB9LAorCisgIHBlZWtBaGVhZDog
ZnVuY3Rpb24oaSwgZTEsIGUyLCBlMywgZTQpIHsKKyAgICBpZiAodGhpcy50b2tlbnMubGVuZ3Ro
ID4gaSkgeworICAgICAgdmFyIHRva2VuID0gdGhpcy50b2tlbnNbaV07CisgICAgICB2YXIgdCA9
IHRva2VuLnRleHQ7CisgICAgICBpZiAodCA9PT0gZTEgfHwgdCA9PT0gZTIgfHwgdCA9PT0gZTMg
fHwgdCA9PT0gZTQgfHwKKyAgICAgICAgICAoIWUxICYmICFlMiAmJiAhZTMgJiYgIWU0KSkgewor
ICAgICAgICByZXR1cm4gdG9rZW47CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
KyAgfSwKKworICBleHBlY3Q6IGZ1bmN0aW9uKGUxLCBlMiwgZTMsIGU0KSB7CisgICAgdmFyIHRv
a2VuID0gdGhpcy5wZWVrKGUxLCBlMiwgZTMsIGU0KTsKKyAgICBpZiAodG9rZW4pIHsKKyAgICAg
IHRoaXMudG9rZW5zLnNoaWZ0KCk7CisgICAgICByZXR1cm4gdG9rZW47CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKKyAgfSwKKworCisgIC8qIGB1bmRlZmluZWRgIGlzIG5vdCBhIGNvbnN0YW50
LCBpdCBpcyBhbiBpZGVudGlmaWVyLAorICAgKiBidXQgdXNpbmcgaXQgYXMgYW4gaWRlbnRpZmll
ciBpcyBub3Qgc3VwcG9ydGVkCisgICAqLworICBjb25zdGFudHM6IHsKKyAgICAndHJ1ZSc6IHsg
dHlwZTogQVNULkxpdGVyYWwsIHZhbHVlOiB0cnVlIH0sCisgICAgJ2ZhbHNlJzogeyB0eXBlOiBB
U1QuTGl0ZXJhbCwgdmFsdWU6IGZhbHNlIH0sCisgICAgJ251bGwnOiB7IHR5cGU6IEFTVC5MaXRl
cmFsLCB2YWx1ZTogbnVsbCB9LAorICAgICd1bmRlZmluZWQnOiB7dHlwZTogQVNULkxpdGVyYWws
IHZhbHVlOiB1bmRlZmluZWQgfSwKKyAgICAndGhpcyc6IHt0eXBlOiBBU1QuVGhpc0V4cHJlc3Np
b24gfQorICB9Cit9OworCitmdW5jdGlvbiBpZkRlZmluZWQodiwgZCkgeworICByZXR1cm4gdHlw
ZW9mIHYgIT09ICd1bmRlZmluZWQnID8gdiA6IGQ7Cit9CisKK2Z1bmN0aW9uIHBsdXNGbihsLCBy
KSB7CisgIGlmICh0eXBlb2YgbCA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiByOworICBpZiAodHlw
ZW9mIHIgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gbDsKKyAgcmV0dXJuIGwgKyByOworfQorCitm
dW5jdGlvbiBpc1N0YXRlbGVzcygkZmlsdGVyLCBmaWx0ZXJOYW1lKSB7CisgIHZhciBmbiA9ICRm
aWx0ZXIoZmlsdGVyTmFtZSk7CisgIHJldHVybiAhZm4uJHN0YXRlZnVsOworfQorCitmdW5jdGlv
biBmaW5kQ29uc3RhbnRBbmRXYXRjaEV4cHJlc3Npb25zKGFzdCwgJGZpbHRlcikgeworICB2YXIg
YWxsQ29uc3RhbnRzOworICB2YXIgYXJnc1RvV2F0Y2g7CisgIHN3aXRjaCAoYXN0LnR5cGUpIHsK
KyAgY2FzZSBBU1QuUHJvZ3JhbToKKyAgICBhbGxDb25zdGFudHMgPSB0cnVlOworICAgIGZvckVh
Y2goYXN0LmJvZHksIGZ1bmN0aW9uKGV4cHIpIHsKKyAgICAgIGZpbmRDb25zdGFudEFuZFdhdGNo
RXhwcmVzc2lvbnMoZXhwci5leHByZXNzaW9uLCAkZmlsdGVyKTsKKyAgICAgIGFsbENvbnN0YW50
cyA9IGFsbENvbnN0YW50cyAmJiBleHByLmV4cHJlc3Npb24uY29uc3RhbnQ7CisgICAgfSk7Cisg
ICAgYXN0LmNvbnN0YW50ID0gYWxsQ29uc3RhbnRzOworICAgIGJyZWFrOworICBjYXNlIEFTVC5M
aXRlcmFsOgorICAgIGFzdC5jb25zdGFudCA9IHRydWU7CisgICAgYXN0LnRvV2F0Y2ggPSBbXTsK
KyAgICBicmVhazsKKyAgY2FzZSBBU1QuVW5hcnlFeHByZXNzaW9uOgorICAgIGZpbmRDb25zdGFu
dEFuZFdhdGNoRXhwcmVzc2lvbnMoYXN0LmFyZ3VtZW50LCAkZmlsdGVyKTsKKyAgICBhc3QuY29u
c3RhbnQgPSBhc3QuYXJndW1lbnQuY29uc3RhbnQ7CisgICAgYXN0LnRvV2F0Y2ggPSBhc3QuYXJn
dW1lbnQudG9XYXRjaDsKKyAgICBicmVhazsKKyAgY2FzZSBBU1QuQmluYXJ5RXhwcmVzc2lvbjoK
KyAgICBmaW5kQ29uc3RhbnRBbmRXYXRjaEV4cHJlc3Npb25zKGFzdC5sZWZ0LCAkZmlsdGVyKTsK
KyAgICBmaW5kQ29uc3RhbnRBbmRXYXRjaEV4cHJlc3Npb25zKGFzdC5yaWdodCwgJGZpbHRlcik7
CisgICAgYXN0LmNvbnN0YW50ID0gYXN0LmxlZnQuY29uc3RhbnQgJiYgYXN0LnJpZ2h0LmNvbnN0
YW50OworICAgIGFzdC50b1dhdGNoID0gYXN0LmxlZnQudG9XYXRjaC5jb25jYXQoYXN0LnJpZ2h0
LnRvV2F0Y2gpOworICAgIGJyZWFrOworICBjYXNlIEFTVC5Mb2dpY2FsRXhwcmVzc2lvbjoKKyAg
ICBmaW5kQ29uc3RhbnRBbmRXYXRjaEV4cHJlc3Npb25zKGFzdC5sZWZ0LCAkZmlsdGVyKTsKKyAg
ICBmaW5kQ29uc3RhbnRBbmRXYXRjaEV4cHJlc3Npb25zKGFzdC5yaWdodCwgJGZpbHRlcik7Cisg
ICAgYXN0LmNvbnN0YW50ID0gYXN0LmxlZnQuY29uc3RhbnQgJiYgYXN0LnJpZ2h0LmNvbnN0YW50
OworICAgIGFzdC50b1dhdGNoID0gYXN0LmNvbnN0YW50ID8gW10gOiBbYXN0XTsKKyAgICBicmVh
azsKKyAgY2FzZSBBU1QuQ29uZGl0aW9uYWxFeHByZXNzaW9uOgorICAgIGZpbmRDb25zdGFudEFu
ZFdhdGNoRXhwcmVzc2lvbnMoYXN0LnRlc3QsICRmaWx0ZXIpOworICAgIGZpbmRDb25zdGFudEFu
ZFdhdGNoRXhwcmVzc2lvbnMoYXN0LmFsdGVybmF0ZSwgJGZpbHRlcik7CisgICAgZmluZENvbnN0
YW50QW5kV2F0Y2hFeHByZXNzaW9ucyhhc3QuY29uc2VxdWVudCwgJGZpbHRlcik7CisgICAgYXN0
LmNvbnN0YW50ID0gYXN0LnRlc3QuY29uc3RhbnQgJiYgYXN0LmFsdGVybmF0ZS5jb25zdGFudCAm
JiBhc3QuY29uc2VxdWVudC5jb25zdGFudDsKKyAgICBhc3QudG9XYXRjaCA9IGFzdC5jb25zdGFu
dCA/IFtdIDogW2FzdF07CisgICAgYnJlYWs7CisgIGNhc2UgQVNULklkZW50aWZpZXI6CisgICAg
YXN0LmNvbnN0YW50ID0gZmFsc2U7CisgICAgYXN0LnRvV2F0Y2ggPSBbYXN0XTsKKyAgICBicmVh
azsKKyAgY2FzZSBBU1QuTWVtYmVyRXhwcmVzc2lvbjoKKyAgICBmaW5kQ29uc3RhbnRBbmRXYXRj
aEV4cHJlc3Npb25zKGFzdC5vYmplY3QsICRmaWx0ZXIpOworICAgIGlmIChhc3QuY29tcHV0ZWQp
IHsKKyAgICAgIGZpbmRDb25zdGFudEFuZFdhdGNoRXhwcmVzc2lvbnMoYXN0LnByb3BlcnR5LCAk
ZmlsdGVyKTsKKyAgICB9CisgICAgYXN0LmNvbnN0YW50ID0gYXN0Lm9iamVjdC5jb25zdGFudCAm
JiAoIWFzdC5jb21wdXRlZCB8fCBhc3QucHJvcGVydHkuY29uc3RhbnQpOworICAgIGFzdC50b1dh
dGNoID0gW2FzdF07CisgICAgYnJlYWs7CisgIGNhc2UgQVNULkNhbGxFeHByZXNzaW9uOgorICAg
IGFsbENvbnN0YW50cyA9IGFzdC5maWx0ZXIgPyBpc1N0YXRlbGVzcygkZmlsdGVyLCBhc3QuY2Fs
bGVlLm5hbWUpIDogZmFsc2U7CisgICAgYXJnc1RvV2F0Y2ggPSBbXTsKKyAgICBmb3JFYWNoKGFz
dC5hcmd1bWVudHMsIGZ1bmN0aW9uKGV4cHIpIHsKKyAgICAgIGZpbmRDb25zdGFudEFuZFdhdGNo
RXhwcmVzc2lvbnMoZXhwciwgJGZpbHRlcik7CisgICAgICBhbGxDb25zdGFudHMgPSBhbGxDb25z
dGFudHMgJiYgZXhwci5jb25zdGFudDsKKyAgICAgIGlmICghZXhwci5jb25zdGFudCkgeworICAg
ICAgICBhcmdzVG9XYXRjaC5wdXNoLmFwcGx5KGFyZ3NUb1dhdGNoLCBleHByLnRvV2F0Y2gpOwor
ICAgICAgfQorICAgIH0pOworICAgIGFzdC5jb25zdGFudCA9IGFsbENvbnN0YW50czsKKyAgICBh
c3QudG9XYXRjaCA9IGFzdC5maWx0ZXIgJiYgaXNTdGF0ZWxlc3MoJGZpbHRlciwgYXN0LmNhbGxl
ZS5uYW1lKSA/IGFyZ3NUb1dhdGNoIDogW2FzdF07CisgICAgYnJlYWs7CisgIGNhc2UgQVNULkFz
c2lnbm1lbnRFeHByZXNzaW9uOgorICAgIGZpbmRDb25zdGFudEFuZFdhdGNoRXhwcmVzc2lvbnMo
YXN0LmxlZnQsICRmaWx0ZXIpOworICAgIGZpbmRDb25zdGFudEFuZFdhdGNoRXhwcmVzc2lvbnMo
YXN0LnJpZ2h0LCAkZmlsdGVyKTsKKyAgICBhc3QuY29uc3RhbnQgPSBhc3QubGVmdC5jb25zdGFu
dCAmJiBhc3QucmlnaHQuY29uc3RhbnQ7CisgICAgYXN0LnRvV2F0Y2ggPSBbYXN0XTsKKyAgICBi
cmVhazsKKyAgY2FzZSBBU1QuQXJyYXlFeHByZXNzaW9uOgorICAgIGFsbENvbnN0YW50cyA9IHRy
dWU7CisgICAgYXJnc1RvV2F0Y2ggPSBbXTsKKyAgICBmb3JFYWNoKGFzdC5lbGVtZW50cywgZnVu
Y3Rpb24oZXhwcikgeworICAgICAgZmluZENvbnN0YW50QW5kV2F0Y2hFeHByZXNzaW9ucyhleHBy
LCAkZmlsdGVyKTsKKyAgICAgIGFsbENvbnN0YW50cyA9IGFsbENvbnN0YW50cyAmJiBleHByLmNv
bnN0YW50OworICAgICAgaWYgKCFleHByLmNvbnN0YW50KSB7CisgICAgICAgIGFyZ3NUb1dhdGNo
LnB1c2guYXBwbHkoYXJnc1RvV2F0Y2gsIGV4cHIudG9XYXRjaCk7CisgICAgICB9CisgICAgfSk7
CisgICAgYXN0LmNvbnN0YW50ID0gYWxsQ29uc3RhbnRzOworICAgIGFzdC50b1dhdGNoID0gYXJn
c1RvV2F0Y2g7CisgICAgYnJlYWs7CisgIGNhc2UgQVNULk9iamVjdEV4cHJlc3Npb246CisgICAg
YWxsQ29uc3RhbnRzID0gdHJ1ZTsKKyAgICBhcmdzVG9XYXRjaCA9IFtdOworICAgIGZvckVhY2go
YXN0LnByb3BlcnRpZXMsIGZ1bmN0aW9uKHByb3BlcnR5KSB7CisgICAgICBmaW5kQ29uc3RhbnRB
bmRXYXRjaEV4cHJlc3Npb25zKHByb3BlcnR5LnZhbHVlLCAkZmlsdGVyKTsKKyAgICAgIGFsbENv
bnN0YW50cyA9IGFsbENvbnN0YW50cyAmJiBwcm9wZXJ0eS52YWx1ZS5jb25zdGFudDsKKyAgICAg
IGlmICghcHJvcGVydHkudmFsdWUuY29uc3RhbnQpIHsKKyAgICAgICAgYXJnc1RvV2F0Y2gucHVz
aC5hcHBseShhcmdzVG9XYXRjaCwgcHJvcGVydHkudmFsdWUudG9XYXRjaCk7CisgICAgICB9Cisg
ICAgfSk7CisgICAgYXN0LmNvbnN0YW50ID0gYWxsQ29uc3RhbnRzOworICAgIGFzdC50b1dhdGNo
ID0gYXJnc1RvV2F0Y2g7CisgICAgYnJlYWs7CisgIGNhc2UgQVNULlRoaXNFeHByZXNzaW9uOgor
ICAgIGFzdC5jb25zdGFudCA9IGZhbHNlOworICAgIGFzdC50b1dhdGNoID0gW107CisgICAgYnJl
YWs7CisgIH0KK30KKworZnVuY3Rpb24gZ2V0SW5wdXRzKGJvZHkpIHsKKyAgaWYgKGJvZHkubGVu
Z3RoICE9IDEpIHJldHVybjsKKyAgdmFyIGxhc3RFeHByZXNzaW9uID0gYm9keVswXS5leHByZXNz
aW9uOworICB2YXIgY2FuZGlkYXRlID0gbGFzdEV4cHJlc3Npb24udG9XYXRjaDsKKyAgaWYgKGNh
bmRpZGF0ZS5sZW5ndGggIT09IDEpIHJldHVybiBjYW5kaWRhdGU7CisgIHJldHVybiBjYW5kaWRh
dGVbMF0gIT09IGxhc3RFeHByZXNzaW9uID8gY2FuZGlkYXRlIDogdW5kZWZpbmVkOworfQorCitm
dW5jdGlvbiBpc0Fzc2lnbmFibGUoYXN0KSB7CisgIHJldHVybiBhc3QudHlwZSA9PT0gQVNULklk
ZW50aWZpZXIgfHwgYXN0LnR5cGUgPT09IEFTVC5NZW1iZXJFeHByZXNzaW9uOworfQorCitmdW5j
dGlvbiBhc3NpZ25hYmxlQVNUKGFzdCkgeworICBpZiAoYXN0LmJvZHkubGVuZ3RoID09PSAxICYm
IGlzQXNzaWduYWJsZShhc3QuYm9keVswXS5leHByZXNzaW9uKSkgeworICAgIHJldHVybiB7dHlw
ZTogQVNULkFzc2lnbm1lbnRFeHByZXNzaW9uLCBsZWZ0OiBhc3QuYm9keVswXS5leHByZXNzaW9u
LCByaWdodDoge3R5cGU6IEFTVC5OR1ZhbHVlUGFyYW1ldGVyfSwgb3BlcmF0b3I6ICc9J307Cisg
IH0KK30KKworZnVuY3Rpb24gaXNMaXRlcmFsKGFzdCkgeworICByZXR1cm4gYXN0LmJvZHkubGVu
Z3RoID09PSAwIHx8CisgICAgICBhc3QuYm9keS5sZW5ndGggPT09IDEgJiYgKAorICAgICAgYXN0
LmJvZHlbMF0uZXhwcmVzc2lvbi50eXBlID09PSBBU1QuTGl0ZXJhbCB8fAorICAgICAgYXN0LmJv
ZHlbMF0uZXhwcmVzc2lvbi50eXBlID09PSBBU1QuQXJyYXlFeHByZXNzaW9uIHx8CisgICAgICBh
c3QuYm9keVswXS5leHByZXNzaW9uLnR5cGUgPT09IEFTVC5PYmplY3RFeHByZXNzaW9uKTsKK30K
KworZnVuY3Rpb24gaXNDb25zdGFudChhc3QpIHsKKyAgcmV0dXJuIGFzdC5jb25zdGFudDsKK30K
KworZnVuY3Rpb24gQVNUQ29tcGlsZXIoYXN0QnVpbGRlciwgJGZpbHRlcikgeworICB0aGlzLmFz
dEJ1aWxkZXIgPSBhc3RCdWlsZGVyOworICB0aGlzLiRmaWx0ZXIgPSAkZmlsdGVyOworfQorCitB
U1RDb21waWxlci5wcm90b3R5cGUgPSB7CisgIGNvbXBpbGU6IGZ1bmN0aW9uKGV4cHJlc3Npb24s
IGV4cGVuc2l2ZUNoZWNrcykgeworICAgIHZhciBzZWxmID0gdGhpczsKKyAgICB2YXIgYXN0ID0g
dGhpcy5hc3RCdWlsZGVyLmFzdChleHByZXNzaW9uKTsKKyAgICB0aGlzLnN0YXRlID0geworICAg
ICAgbmV4dElkOiAwLAorICAgICAgZmlsdGVyczoge30sCisgICAgICBleHBlbnNpdmVDaGVja3M6
IGV4cGVuc2l2ZUNoZWNrcywKKyAgICAgIGZuOiB7dmFyczogW10sIGJvZHk6IFtdLCBvd246IHt9
fSwKKyAgICAgIGFzc2lnbjoge3ZhcnM6IFtdLCBib2R5OiBbXSwgb3duOiB7fX0sCisgICAgICBp
bnB1dHM6IFtdCisgICAgfTsKKyAgICBmaW5kQ29uc3RhbnRBbmRXYXRjaEV4cHJlc3Npb25zKGFz
dCwgc2VsZi4kZmlsdGVyKTsKKyAgICB2YXIgZXh0cmEgPSAnJzsKKyAgICB2YXIgYXNzaWduYWJs
ZTsKKyAgICB0aGlzLnN0YWdlID0gJ2Fzc2lnbic7CisgICAgaWYgKChhc3NpZ25hYmxlID0gYXNz
aWduYWJsZUFTVChhc3QpKSkgeworICAgICAgdGhpcy5zdGF0ZS5jb21wdXRpbmcgPSAnYXNzaWdu
JzsKKyAgICAgIHZhciByZXN1bHQgPSB0aGlzLm5leHRJZCgpOworICAgICAgdGhpcy5yZWN1cnNl
KGFzc2lnbmFibGUsIHJlc3VsdCk7CisgICAgICBleHRyYSA9ICdmbi5hc3NpZ249JyArIHRoaXMu
Z2VuZXJhdGVGdW5jdGlvbignYXNzaWduJywgJ3MsdixsJyk7CisgICAgfQorICAgIHZhciB0b1dh
dGNoID0gZ2V0SW5wdXRzKGFzdC5ib2R5KTsKKyAgICBzZWxmLnN0YWdlID0gJ2lucHV0cyc7Cisg
ICAgZm9yRWFjaCh0b1dhdGNoLCBmdW5jdGlvbih3YXRjaCwga2V5KSB7CisgICAgICB2YXIgZm5L
ZXkgPSAnZm4nICsga2V5OworICAgICAgc2VsZi5zdGF0ZVtmbktleV0gPSB7dmFyczogW10sIGJv
ZHk6IFtdLCBvd246IHt9fTsKKyAgICAgIHNlbGYuc3RhdGUuY29tcHV0aW5nID0gZm5LZXk7Cisg
ICAgICB2YXIgaW50b0lkID0gc2VsZi5uZXh0SWQoKTsKKyAgICAgIHNlbGYucmVjdXJzZSh3YXRj
aCwgaW50b0lkKTsKKyAgICAgIHNlbGYucmV0dXJuXyhpbnRvSWQpOworICAgICAgc2VsZi5zdGF0
ZS5pbnB1dHMucHVzaChmbktleSk7CisgICAgICB3YXRjaC53YXRjaElkID0ga2V5OworICAgIH0p
OworICAgIHRoaXMuc3RhdGUuY29tcHV0aW5nID0gJ2ZuJzsKKyAgICB0aGlzLnN0YWdlID0gJ21h
aW4nOworICAgIHRoaXMucmVjdXJzZShhc3QpOworICAgIHZhciBmblN0cmluZyA9CisgICAgICAv
LyBUaGUgYnVpbGQgYW5kIG1pbmlmaWNhdGlvbiBzdGVwcyByZW1vdmUgdGhlIHN0cmluZyAidXNl
IHN0cmljdCIgZnJvbSB0aGUgY29kZSwgYnV0IHRoaXMgaXMgZG9uZSB1c2luZyBhIHJlZ2V4Lgor
ICAgICAgLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIHRoaXMgdW50aWwgd2UgZG8gYSBiZXR0
ZXIgam9iIGF0IG9ubHkgcmVtb3ZpbmcgdGhlIHByZWZpeCBvbmx5IHdoZW4gd2Ugc2hvdWxkLgor
ICAgICAgJyInICsgdGhpcy5VU0UgKyAnICcgKyB0aGlzLlNUUklDVCArICciO1xuJyArCisgICAg
ICB0aGlzLmZpbHRlclByZWZpeCgpICsKKyAgICAgICd2YXIgZm49JyArIHRoaXMuZ2VuZXJhdGVG
dW5jdGlvbignZm4nLCAncyxsLGEsaScpICsKKyAgICAgIGV4dHJhICsKKyAgICAgIHRoaXMud2F0
Y2hGbnMoKSArCisgICAgICAncmV0dXJuIGZuOyc7CisKKyAgICAvKiBqc2hpbnQgLVcwNTQgKi8K
KyAgICB2YXIgZm4gPSAobmV3IEZ1bmN0aW9uKCckZmlsdGVyJywKKyAgICAgICAgJ2Vuc3VyZVNh
ZmVNZW1iZXJOYW1lJywKKyAgICAgICAgJ2Vuc3VyZVNhZmVPYmplY3QnLAorICAgICAgICAnZW5z
dXJlU2FmZUZ1bmN0aW9uJywKKyAgICAgICAgJ2lmRGVmaW5lZCcsCisgICAgICAgICdwbHVzJywK
KyAgICAgICAgJ3RleHQnLAorICAgICAgICBmblN0cmluZykpKAorICAgICAgICAgIHRoaXMuJGZp
bHRlciwKKyAgICAgICAgICBlbnN1cmVTYWZlTWVtYmVyTmFtZSwKKyAgICAgICAgICBlbnN1cmVT
YWZlT2JqZWN0LAorICAgICAgICAgIGVuc3VyZVNhZmVGdW5jdGlvbiwKKyAgICAgICAgICBpZkRl
ZmluZWQsCisgICAgICAgICAgcGx1c0ZuLAorICAgICAgICAgIGV4cHJlc3Npb24pOworICAgIC8q
IGpzaGludCArVzA1NCAqLworICAgIHRoaXMuc3RhdGUgPSB0aGlzLnN0YWdlID0gdW5kZWZpbmVk
OworICAgIGZuLmxpdGVyYWwgPSBpc0xpdGVyYWwoYXN0KTsKKyAgICBmbi5jb25zdGFudCA9IGlz
Q29uc3RhbnQoYXN0KTsKKyAgICByZXR1cm4gZm47CisgIH0sCisKKyAgVVNFOiAndXNlJywKKwor
ICBTVFJJQ1Q6ICdzdHJpY3QnLAorCisgIHdhdGNoRm5zOiBmdW5jdGlvbigpIHsKKyAgICB2YXIg
cmVzdWx0ID0gW107CisgICAgdmFyIGZucyA9IHRoaXMuc3RhdGUuaW5wdXRzOworICAgIHZhciBz
ZWxmID0gdGhpczsKKyAgICBmb3JFYWNoKGZucywgZnVuY3Rpb24obmFtZSkgeworICAgICAgcmVz
dWx0LnB1c2goJ3ZhciAnICsgbmFtZSArICc9JyArIHNlbGYuZ2VuZXJhdGVGdW5jdGlvbihuYW1l
LCAncycpKTsKKyAgICB9KTsKKyAgICBpZiAoZm5zLmxlbmd0aCkgeworICAgICAgcmVzdWx0LnB1
c2goJ2ZuLmlucHV0cz1bJyArIGZucy5qb2luKCcsJykgKyAnXTsnKTsKKyAgICB9CisgICAgcmV0
dXJuIHJlc3VsdC5qb2luKCcnKTsKKyAgfSwKKworICBnZW5lcmF0ZUZ1bmN0aW9uOiBmdW5jdGlv
bihuYW1lLCBwYXJhbXMpIHsKKyAgICByZXR1cm4gJ2Z1bmN0aW9uKCcgKyBwYXJhbXMgKyAnKXsn
ICsKKyAgICAgICAgdGhpcy52YXJzUHJlZml4KG5hbWUpICsKKyAgICAgICAgdGhpcy5ib2R5KG5h
bWUpICsKKyAgICAgICAgJ307JzsKKyAgfSwKKworICBmaWx0ZXJQcmVmaXg6IGZ1bmN0aW9uKCkg
eworICAgIHZhciBwYXJ0cyA9IFtdOworICAgIHZhciBzZWxmID0gdGhpczsKKyAgICBmb3JFYWNo
KHRoaXMuc3RhdGUuZmlsdGVycywgZnVuY3Rpb24oaWQsIGZpbHRlcikgeworICAgICAgcGFydHMu
cHVzaChpZCArICc9JGZpbHRlcignICsgc2VsZi5lc2NhcGUoZmlsdGVyKSArICcpJyk7CisgICAg
fSk7CisgICAgaWYgKHBhcnRzLmxlbmd0aCkgcmV0dXJuICd2YXIgJyArIHBhcnRzLmpvaW4oJywn
KSArICc7JzsKKyAgICByZXR1cm4gJyc7CisgIH0sCisKKyAgdmFyc1ByZWZpeDogZnVuY3Rpb24o
c2VjdGlvbikgeworICAgIHJldHVybiB0aGlzLnN0YXRlW3NlY3Rpb25dLnZhcnMubGVuZ3RoID8g
J3ZhciAnICsgdGhpcy5zdGF0ZVtzZWN0aW9uXS52YXJzLmpvaW4oJywnKSArICc7JyA6ICcnOwor
ICB9LAorCisgIGJvZHk6IGZ1bmN0aW9uKHNlY3Rpb24pIHsKKyAgICByZXR1cm4gdGhpcy5zdGF0
ZVtzZWN0aW9uXS5ib2R5LmpvaW4oJycpOworICB9LAorCisgIHJlY3Vyc2U6IGZ1bmN0aW9uKGFz
dCwgaW50b0lkLCBuYW1lSWQsIHJlY3Vyc2lvbkZuLCBjcmVhdGUsIHNraXBXYXRjaElkQ2hlY2sp
IHsKKyAgICB2YXIgbGVmdCwgcmlnaHQsIHNlbGYgPSB0aGlzLCBhcmdzLCBleHByZXNzaW9uOwor
ICAgIHJlY3Vyc2lvbkZuID0gcmVjdXJzaW9uRm4gfHwgbm9vcDsKKyAgICBpZiAoIXNraXBXYXRj
aElkQ2hlY2sgJiYgaXNEZWZpbmVkKGFzdC53YXRjaElkKSkgeworICAgICAgaW50b0lkID0gaW50
b0lkIHx8IHRoaXMubmV4dElkKCk7CisgICAgICB0aGlzLmlmXygnaScsCisgICAgICAgIHRoaXMu
bGF6eUFzc2lnbihpbnRvSWQsIHRoaXMuY29tcHV0ZWRNZW1iZXIoJ2knLCBhc3Qud2F0Y2hJZCkp
LAorICAgICAgICB0aGlzLmxhenlSZWN1cnNlKGFzdCwgaW50b0lkLCBuYW1lSWQsIHJlY3Vyc2lv
bkZuLCBjcmVhdGUsIHRydWUpCisgICAgICApOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBz
d2l0Y2ggKGFzdC50eXBlKSB7CisgICAgY2FzZSBBU1QuUHJvZ3JhbToKKyAgICAgIGZvckVhY2go
YXN0LmJvZHksIGZ1bmN0aW9uKGV4cHJlc3Npb24sIHBvcykgeworICAgICAgICBzZWxmLnJlY3Vy
c2UoZXhwcmVzc2lvbi5leHByZXNzaW9uLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZnVuY3Rpb24o
ZXhwcikgeyByaWdodCA9IGV4cHI7IH0pOworICAgICAgICBpZiAocG9zICE9PSBhc3QuYm9keS5s
ZW5ndGggLSAxKSB7CisgICAgICAgICAgc2VsZi5jdXJyZW50KCkuYm9keS5wdXNoKHJpZ2h0LCAn
OycpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHNlbGYucmV0dXJuXyhyaWdodCk7Cisg
ICAgICAgIH0KKyAgICAgIH0pOworICAgICAgYnJlYWs7CisgICAgY2FzZSBBU1QuTGl0ZXJhbDoK
KyAgICAgIGV4cHJlc3Npb24gPSB0aGlzLmVzY2FwZShhc3QudmFsdWUpOworICAgICAgdGhpcy5h
c3NpZ24oaW50b0lkLCBleHByZXNzaW9uKTsKKyAgICAgIHJlY3Vyc2lvbkZuKGV4cHJlc3Npb24p
OworICAgICAgYnJlYWs7CisgICAgY2FzZSBBU1QuVW5hcnlFeHByZXNzaW9uOgorICAgICAgdGhp
cy5yZWN1cnNlKGFzdC5hcmd1bWVudCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZ1bmN0aW9uKGV4
cHIpIHsgcmlnaHQgPSBleHByOyB9KTsKKyAgICAgIGV4cHJlc3Npb24gPSBhc3Qub3BlcmF0b3Ig
KyAnKCcgKyB0aGlzLmlmRGVmaW5lZChyaWdodCwgMCkgKyAnKSc7CisgICAgICB0aGlzLmFzc2ln
bihpbnRvSWQsIGV4cHJlc3Npb24pOworICAgICAgcmVjdXJzaW9uRm4oZXhwcmVzc2lvbik7Cisg
ICAgICBicmVhazsKKyAgICBjYXNlIEFTVC5CaW5hcnlFeHByZXNzaW9uOgorICAgICAgdGhpcy5y
ZWN1cnNlKGFzdC5sZWZ0LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZnVuY3Rpb24oZXhwcikgeyBs
ZWZ0ID0gZXhwcjsgfSk7CisgICAgICB0aGlzLnJlY3Vyc2UoYXN0LnJpZ2h0LCB1bmRlZmluZWQs
IHVuZGVmaW5lZCwgZnVuY3Rpb24oZXhwcikgeyByaWdodCA9IGV4cHI7IH0pOworICAgICAgaWYg
KGFzdC5vcGVyYXRvciA9PT0gJysnKSB7CisgICAgICAgIGV4cHJlc3Npb24gPSB0aGlzLnBsdXMo
bGVmdCwgcmlnaHQpOworICAgICAgfSBlbHNlIGlmIChhc3Qub3BlcmF0b3IgPT09ICctJykgewor
ICAgICAgICBleHByZXNzaW9uID0gdGhpcy5pZkRlZmluZWQobGVmdCwgMCkgKyBhc3Qub3BlcmF0
b3IgKyB0aGlzLmlmRGVmaW5lZChyaWdodCwgMCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBl
eHByZXNzaW9uID0gJygnICsgbGVmdCArICcpJyArIGFzdC5vcGVyYXRvciArICcoJyArIHJpZ2h0
ICsgJyknOworICAgICAgfQorICAgICAgdGhpcy5hc3NpZ24oaW50b0lkLCBleHByZXNzaW9uKTsK
KyAgICAgIHJlY3Vyc2lvbkZuKGV4cHJlc3Npb24pOworICAgICAgYnJlYWs7CisgICAgY2FzZSBB
U1QuTG9naWNhbEV4cHJlc3Npb246CisgICAgICBpbnRvSWQgPSBpbnRvSWQgfHwgdGhpcy5uZXh0
SWQoKTsKKyAgICAgIHNlbGYucmVjdXJzZShhc3QubGVmdCwgaW50b0lkKTsKKyAgICAgIHNlbGYu
aWZfKGFzdC5vcGVyYXRvciA9PT0gJyYmJyA/IGludG9JZCA6IHNlbGYubm90KGludG9JZCksIHNl
bGYubGF6eVJlY3Vyc2UoYXN0LnJpZ2h0LCBpbnRvSWQpKTsKKyAgICAgIHJlY3Vyc2lvbkZuKGlu
dG9JZCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEFTVC5Db25kaXRpb25hbEV4cHJlc3Npb246
CisgICAgICBpbnRvSWQgPSBpbnRvSWQgfHwgdGhpcy5uZXh0SWQoKTsKKyAgICAgIHNlbGYucmVj
dXJzZShhc3QudGVzdCwgaW50b0lkKTsKKyAgICAgIHNlbGYuaWZfKGludG9JZCwgc2VsZi5sYXp5
UmVjdXJzZShhc3QuYWx0ZXJuYXRlLCBpbnRvSWQpLCBzZWxmLmxhenlSZWN1cnNlKGFzdC5jb25z
ZXF1ZW50LCBpbnRvSWQpKTsKKyAgICAgIHJlY3Vyc2lvbkZuKGludG9JZCk7CisgICAgICBicmVh
azsKKyAgICBjYXNlIEFTVC5JZGVudGlmaWVyOgorICAgICAgaW50b0lkID0gaW50b0lkIHx8IHRo
aXMubmV4dElkKCk7CisgICAgICBpZiAobmFtZUlkKSB7CisgICAgICAgIG5hbWVJZC5jb250ZXh0
ID0gc2VsZi5zdGFnZSA9PT0gJ2lucHV0cycgPyAncycgOiB0aGlzLmFzc2lnbih0aGlzLm5leHRJ
ZCgpLCB0aGlzLmdldEhhc093blByb3BlcnR5KCdsJywgYXN0Lm5hbWUpICsgJz9sOnMnKTsKKyAg
ICAgICAgbmFtZUlkLmNvbXB1dGVkID0gZmFsc2U7CisgICAgICAgIG5hbWVJZC5uYW1lID0gYXN0
Lm5hbWU7CisgICAgICB9CisgICAgICBlbnN1cmVTYWZlTWVtYmVyTmFtZShhc3QubmFtZSk7Cisg
ICAgICBzZWxmLmlmXyhzZWxmLnN0YWdlID09PSAnaW5wdXRzJyB8fCBzZWxmLm5vdChzZWxmLmdl
dEhhc093blByb3BlcnR5KCdsJywgYXN0Lm5hbWUpKSwKKyAgICAgICAgZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgc2VsZi5pZl8oc2VsZi5zdGFnZSA9PT0gJ2lucHV0cycgfHwgJ3MnLCBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIGlmIChjcmVhdGUgJiYgY3JlYXRlICE9PSAxKSB7CisgICAgICAg
ICAgICAgIHNlbGYuaWZfKAorICAgICAgICAgICAgICAgIHNlbGYubm90KHNlbGYubm9uQ29tcHV0
ZWRNZW1iZXIoJ3MnLCBhc3QubmFtZSkpLAorICAgICAgICAgICAgICAgIHNlbGYubGF6eUFzc2ln
bihzZWxmLm5vbkNvbXB1dGVkTWVtYmVyKCdzJywgYXN0Lm5hbWUpLCAne30nKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBzZWxmLmFzc2lnbihpbnRvSWQsIHNlbGYubm9uQ29tcHV0ZWRN
ZW1iZXIoJ3MnLCBhc3QubmFtZSkpOworICAgICAgICAgIH0pOworICAgICAgICB9LCBpbnRvSWQg
JiYgc2VsZi5sYXp5QXNzaWduKGludG9JZCwgc2VsZi5ub25Db21wdXRlZE1lbWJlcignbCcsIGFz
dC5uYW1lKSkKKyAgICAgICAgKTsKKyAgICAgIGlmIChzZWxmLnN0YXRlLmV4cGVuc2l2ZUNoZWNr
cyB8fCBpc1Bvc3NpYmx5RGFuZ2Vyb3VzTWVtYmVyTmFtZShhc3QubmFtZSkpIHsKKyAgICAgICAg
c2VsZi5hZGRFbnN1cmVTYWZlT2JqZWN0KGludG9JZCk7CisgICAgICB9CisgICAgICByZWN1cnNp
b25GbihpbnRvSWQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBBU1QuTWVtYmVyRXhwcmVzc2lv
bjoKKyAgICAgIGxlZnQgPSBuYW1lSWQgJiYgKG5hbWVJZC5jb250ZXh0ID0gdGhpcy5uZXh0SWQo
KSkgfHwgdGhpcy5uZXh0SWQoKTsKKyAgICAgIGludG9JZCA9IGludG9JZCB8fCB0aGlzLm5leHRJ
ZCgpOworICAgICAgc2VsZi5yZWN1cnNlKGFzdC5vYmplY3QsIGxlZnQsIHVuZGVmaW5lZCwgZnVu
Y3Rpb24oKSB7CisgICAgICAgIHNlbGYuaWZfKHNlbGYubm90TnVsbChsZWZ0KSwgZnVuY3Rpb24o
KSB7CisgICAgICAgICAgaWYgKGFzdC5jb21wdXRlZCkgeworICAgICAgICAgICAgcmlnaHQgPSBz
ZWxmLm5leHRJZCgpOworICAgICAgICAgICAgc2VsZi5yZWN1cnNlKGFzdC5wcm9wZXJ0eSwgcmln
aHQpOworICAgICAgICAgICAgc2VsZi5hZGRFbnN1cmVTYWZlTWVtYmVyTmFtZShyaWdodCk7Cisg
ICAgICAgICAgICBpZiAoY3JlYXRlICYmIGNyZWF0ZSAhPT0gMSkgeworICAgICAgICAgICAgICBz
ZWxmLmlmXyhzZWxmLm5vdChzZWxmLmNvbXB1dGVkTWVtYmVyKGxlZnQsIHJpZ2h0KSksIHNlbGYu
bGF6eUFzc2lnbihzZWxmLmNvbXB1dGVkTWVtYmVyKGxlZnQsIHJpZ2h0KSwgJ3t9JykpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHNlbGYuZW5zdXJlU2FmZU9iamVj
dChzZWxmLmNvbXB1dGVkTWVtYmVyKGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICBzZWxmLmFz
c2lnbihpbnRvSWQsIGV4cHJlc3Npb24pOworICAgICAgICAgICAgaWYgKG5hbWVJZCkgeworICAg
ICAgICAgICAgICBuYW1lSWQuY29tcHV0ZWQgPSB0cnVlOworICAgICAgICAgICAgICBuYW1lSWQu
bmFtZSA9IHJpZ2h0OworICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBlbnN1cmVTYWZlTWVtYmVyTmFtZShhc3QucHJvcGVydHkubmFtZSk7CisgICAgICAgICAg
ICBpZiAoY3JlYXRlICYmIGNyZWF0ZSAhPT0gMSkgeworICAgICAgICAgICAgICBzZWxmLmlmXyhz
ZWxmLm5vdChzZWxmLm5vbkNvbXB1dGVkTWVtYmVyKGxlZnQsIGFzdC5wcm9wZXJ0eS5uYW1lKSks
IHNlbGYubGF6eUFzc2lnbihzZWxmLm5vbkNvbXB1dGVkTWVtYmVyKGxlZnQsIGFzdC5wcm9wZXJ0
eS5uYW1lKSwgJ3t9JykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXhwcmVzc2lvbiA9
IHNlbGYubm9uQ29tcHV0ZWRNZW1iZXIobGVmdCwgYXN0LnByb3BlcnR5Lm5hbWUpOworICAgICAg
ICAgICAgaWYgKHNlbGYuc3RhdGUuZXhwZW5zaXZlQ2hlY2tzIHx8IGlzUG9zc2libHlEYW5nZXJv
dXNNZW1iZXJOYW1lKGFzdC5wcm9wZXJ0eS5uYW1lKSkgeworICAgICAgICAgICAgICBleHByZXNz
aW9uID0gc2VsZi5lbnN1cmVTYWZlT2JqZWN0KGV4cHJlc3Npb24pOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgc2VsZi5hc3NpZ24oaW50b0lkLCBleHByZXNzaW9uKTsKKyAgICAgICAgICAg
IGlmIChuYW1lSWQpIHsKKyAgICAgICAgICAgICAgbmFtZUlkLmNvbXB1dGVkID0gZmFsc2U7Cisg
ICAgICAgICAgICAgIG5hbWVJZC5uYW1lID0gYXN0LnByb3BlcnR5Lm5hbWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgfQorICAgICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICBzZWxm
LmFzc2lnbihpbnRvSWQsICd1bmRlZmluZWQnKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJlY3Vy
c2lvbkZuKGludG9JZCk7CisgICAgICB9LCAhIWNyZWF0ZSk7CisgICAgICBicmVhazsKKyAgICBj
YXNlIEFTVC5DYWxsRXhwcmVzc2lvbjoKKyAgICAgIGludG9JZCA9IGludG9JZCB8fCB0aGlzLm5l
eHRJZCgpOworICAgICAgaWYgKGFzdC5maWx0ZXIpIHsKKyAgICAgICAgcmlnaHQgPSBzZWxmLmZp
bHRlcihhc3QuY2FsbGVlLm5hbWUpOworICAgICAgICBhcmdzID0gW107CisgICAgICAgIGZvckVh
Y2goYXN0LmFyZ3VtZW50cywgZnVuY3Rpb24oZXhwcikgeworICAgICAgICAgIHZhciBhcmd1bWVu
dCA9IHNlbGYubmV4dElkKCk7CisgICAgICAgICAgc2VsZi5yZWN1cnNlKGV4cHIsIGFyZ3VtZW50
KTsKKyAgICAgICAgICBhcmdzLnB1c2goYXJndW1lbnQpOworICAgICAgICB9KTsKKyAgICAgICAg
ZXhwcmVzc2lvbiA9IHJpZ2h0ICsgJygnICsgYXJncy5qb2luKCcsJykgKyAnKSc7CisgICAgICAg
IHNlbGYuYXNzaWduKGludG9JZCwgZXhwcmVzc2lvbik7CisgICAgICAgIHJlY3Vyc2lvbkZuKGlu
dG9JZCk7CisgICAgICB9IGVsc2UgeworICAgICAgICByaWdodCA9IHNlbGYubmV4dElkKCk7Cisg
ICAgICAgIGxlZnQgPSB7fTsKKyAgICAgICAgYXJncyA9IFtdOworICAgICAgICBzZWxmLnJlY3Vy
c2UoYXN0LmNhbGxlZSwgcmlnaHQsIGxlZnQsIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHNlbGYu
aWZfKHNlbGYubm90TnVsbChyaWdodCksIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgc2VsZi5h
ZGRFbnN1cmVTYWZlRnVuY3Rpb24ocmlnaHQpOworICAgICAgICAgICAgZm9yRWFjaChhc3QuYXJn
dW1lbnRzLCBmdW5jdGlvbihleHByKSB7CisgICAgICAgICAgICAgIHNlbGYucmVjdXJzZShleHBy
LCBzZWxmLm5leHRJZCgpLCB1bmRlZmluZWQsIGZ1bmN0aW9uKGFyZ3VtZW50KSB7CisgICAgICAg
ICAgICAgICAgYXJncy5wdXNoKHNlbGYuZW5zdXJlU2FmZU9iamVjdChhcmd1bWVudCkpOworICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYgKGxlZnQubmFt
ZSkgeworICAgICAgICAgICAgICBpZiAoIXNlbGYuc3RhdGUuZXhwZW5zaXZlQ2hlY2tzKSB7Cisg
ICAgICAgICAgICAgICAgc2VsZi5hZGRFbnN1cmVTYWZlT2JqZWN0KGxlZnQuY29udGV4dCk7Cisg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHNlbGYubWVtYmVyKGxl
ZnQuY29udGV4dCwgbGVmdC5uYW1lLCBsZWZ0LmNvbXB1dGVkKSArICcoJyArIGFyZ3Muam9pbign
LCcpICsgJyknOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgZXhwcmVzc2lv
biA9IHJpZ2h0ICsgJygnICsgYXJncy5qb2luKCcsJykgKyAnKSc7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBleHByZXNzaW9uID0gc2VsZi5lbnN1cmVTYWZlT2JqZWN0KGV4cHJlc3Npb24p
OworICAgICAgICAgICAgc2VsZi5hc3NpZ24oaW50b0lkLCBleHByZXNzaW9uKTsKKyAgICAgICAg
ICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHNlbGYuYXNzaWduKGludG9JZCwgJ3VuZGVm
aW5lZCcpOworICAgICAgICAgIH0pOworICAgICAgICAgIHJlY3Vyc2lvbkZuKGludG9JZCk7Cisg
ICAgICAgIH0pOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBBU1QuQXNzaWdubWVu
dEV4cHJlc3Npb246CisgICAgICByaWdodCA9IHRoaXMubmV4dElkKCk7CisgICAgICBsZWZ0ID0g
e307CisgICAgICBpZiAoIWlzQXNzaWduYWJsZShhc3QubGVmdCkpIHsKKyAgICAgICAgdGhyb3cg
JHBhcnNlTWluRXJyKCdsdmFsJywgJ1RyeWluZyB0byBhc3NpbmcgYSB2YWx1ZSB0byBhIG5vbiBs
LXZhbHVlJyk7CisgICAgICB9CisgICAgICB0aGlzLnJlY3Vyc2UoYXN0LmxlZnQsIHVuZGVmaW5l
ZCwgbGVmdCwgZnVuY3Rpb24oKSB7CisgICAgICAgIHNlbGYuaWZfKHNlbGYubm90TnVsbChsZWZ0
LmNvbnRleHQpLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICBzZWxmLnJlY3Vyc2UoYXN0LnJpZ2h0
LCByaWdodCk7CisgICAgICAgICAgc2VsZi5hZGRFbnN1cmVTYWZlT2JqZWN0KHNlbGYubWVtYmVy
KGxlZnQuY29udGV4dCwgbGVmdC5uYW1lLCBsZWZ0LmNvbXB1dGVkKSk7CisgICAgICAgICAgZXhw
cmVzc2lvbiA9IHNlbGYubWVtYmVyKGxlZnQuY29udGV4dCwgbGVmdC5uYW1lLCBsZWZ0LmNvbXB1
dGVkKSArIGFzdC5vcGVyYXRvciArIHJpZ2h0OworICAgICAgICAgIHNlbGYuYXNzaWduKGludG9J
ZCwgZXhwcmVzc2lvbik7CisgICAgICAgICAgcmVjdXJzaW9uRm4oaW50b0lkIHx8IGV4cHJlc3Np
b24pOworICAgICAgICB9KTsKKyAgICAgIH0sIDEpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBB
U1QuQXJyYXlFeHByZXNzaW9uOgorICAgICAgYXJncyA9IFtdOworICAgICAgZm9yRWFjaChhc3Qu
ZWxlbWVudHMsIGZ1bmN0aW9uKGV4cHIpIHsKKyAgICAgICAgc2VsZi5yZWN1cnNlKGV4cHIsIHNl
bGYubmV4dElkKCksIHVuZGVmaW5lZCwgZnVuY3Rpb24oYXJndW1lbnQpIHsKKyAgICAgICAgICBh
cmdzLnB1c2goYXJndW1lbnQpOworICAgICAgICB9KTsKKyAgICAgIH0pOworICAgICAgZXhwcmVz
c2lvbiA9ICdbJyArIGFyZ3Muam9pbignLCcpICsgJ10nOworICAgICAgdGhpcy5hc3NpZ24oaW50
b0lkLCBleHByZXNzaW9uKTsKKyAgICAgIHJlY3Vyc2lvbkZuKGV4cHJlc3Npb24pOworICAgICAg
YnJlYWs7CisgICAgY2FzZSBBU1QuT2JqZWN0RXhwcmVzc2lvbjoKKyAgICAgIGFyZ3MgPSBbXTsK
KyAgICAgIGZvckVhY2goYXN0LnByb3BlcnRpZXMsIGZ1bmN0aW9uKHByb3BlcnR5KSB7CisgICAg
ICAgIHNlbGYucmVjdXJzZShwcm9wZXJ0eS52YWx1ZSwgc2VsZi5uZXh0SWQoKSwgdW5kZWZpbmVk
LCBmdW5jdGlvbihleHByKSB7CisgICAgICAgICAgYXJncy5wdXNoKHNlbGYuZXNjYXBlKAorICAg
ICAgICAgICAgICBwcm9wZXJ0eS5rZXkudHlwZSA9PT0gQVNULklkZW50aWZpZXIgPyBwcm9wZXJ0
eS5rZXkubmFtZSA6CisgICAgICAgICAgICAgICAgKCcnICsgcHJvcGVydHkua2V5LnZhbHVlKSkg
KworICAgICAgICAgICAgICAnOicgKyBleHByKTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAg
ICAgIGV4cHJlc3Npb24gPSAneycgKyBhcmdzLmpvaW4oJywnKSArICd9JzsKKyAgICAgIHRoaXMu
YXNzaWduKGludG9JZCwgZXhwcmVzc2lvbik7CisgICAgICByZWN1cnNpb25GbihleHByZXNzaW9u
KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQVNULlRoaXNFeHByZXNzaW9uOgorICAgICAgdGhp
cy5hc3NpZ24oaW50b0lkLCAncycpOworICAgICAgcmVjdXJzaW9uRm4oJ3MnKTsKKyAgICAgIGJy
ZWFrOworICAgIGNhc2UgQVNULk5HVmFsdWVQYXJhbWV0ZXI6CisgICAgICB0aGlzLmFzc2lnbihp
bnRvSWQsICd2Jyk7CisgICAgICByZWN1cnNpb25GbigndicpOworICAgICAgYnJlYWs7CisgICAg
fQorICB9LAorCisgIGdldEhhc093blByb3BlcnR5OiBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0
eSkgeworICAgIHZhciBrZXkgPSBlbGVtZW50ICsgJy4nICsgcHJvcGVydHk7CisgICAgdmFyIG93
biA9IHRoaXMuY3VycmVudCgpLm93bjsKKyAgICBpZiAoIW93bi5oYXNPd25Qcm9wZXJ0eShrZXkp
KSB7CisgICAgICBvd25ba2V5XSA9IHRoaXMubmV4dElkKGZhbHNlLCBlbGVtZW50ICsgJyYmKCcg
KyB0aGlzLmVzY2FwZShwcm9wZXJ0eSkgKyAnIGluICcgKyBlbGVtZW50ICsgJyknKTsKKyAgICB9
CisgICAgcmV0dXJuIG93bltrZXldOworICB9LAorCisgIGFzc2lnbjogZnVuY3Rpb24oaWQsIHZh
bHVlKSB7CisgICAgaWYgKCFpZCkgcmV0dXJuOworICAgIHRoaXMuY3VycmVudCgpLmJvZHkucHVz
aChpZCwgJz0nLCB2YWx1ZSwgJzsnKTsKKyAgICByZXR1cm4gaWQ7CisgIH0sCisKKyAgZmlsdGVy
OiBmdW5jdGlvbihmaWx0ZXJOYW1lKSB7CisgICAgaWYgKCF0aGlzLnN0YXRlLmZpbHRlcnMuaGFz
T3duUHJvcGVydHkoZmlsdGVyTmFtZSkpIHsKKyAgICAgIHRoaXMuc3RhdGUuZmlsdGVyc1tmaWx0
ZXJOYW1lXSA9IHRoaXMubmV4dElkKHRydWUpOworICAgIH0KKyAgICByZXR1cm4gdGhpcy5zdGF0
ZS5maWx0ZXJzW2ZpbHRlck5hbWVdOworICB9LAorCisgIGlmRGVmaW5lZDogZnVuY3Rpb24oaWQs
IGRlZmF1bHRWYWx1ZSkgeworICAgIHJldHVybiAnaWZEZWZpbmVkKCcgKyBpZCArICcsJyArIHRo
aXMuZXNjYXBlKGRlZmF1bHRWYWx1ZSkgKyAnKSc7CisgIH0sCisKKyAgcGx1czogZnVuY3Rpb24o
bGVmdCwgcmlnaHQpIHsKKyAgICByZXR1cm4gJ3BsdXMoJyArIGxlZnQgKyAnLCcgKyByaWdodCAr
ICcpJzsKKyAgfSwKKworICByZXR1cm5fOiBmdW5jdGlvbihpZCkgeworICAgIHRoaXMuY3VycmVu
dCgpLmJvZHkucHVzaCgncmV0dXJuICcsIGlkLCAnOycpOworICB9LAorCisgIGlmXzogZnVuY3Rp
b24odGVzdCwgYWx0ZXJuYXRlLCBjb25zZXF1ZW50KSB7CisgICAgaWYgKHRlc3QgPT09IHRydWUp
IHsKKyAgICAgIGFsdGVybmF0ZSgpOworICAgIH0gZWxzZSB7CisgICAgICB2YXIgYm9keSA9IHRo
aXMuY3VycmVudCgpLmJvZHk7CisgICAgICBib2R5LnB1c2goJ2lmKCcsIHRlc3QsICcpeycpOwor
ICAgICAgYWx0ZXJuYXRlKCk7CisgICAgICBib2R5LnB1c2goJ30nKTsKKyAgICAgIGlmIChjb25z
ZXF1ZW50KSB7CisgICAgICAgIGJvZHkucHVzaCgnZWxzZXsnKTsKKyAgICAgICAgY29uc2VxdWVu
dCgpOworICAgICAgICBib2R5LnB1c2goJ30nKTsKKyAgICAgIH0KKyAgICB9CisgIH0sCisKKyAg
bm90OiBmdW5jdGlvbihleHByZXNzaW9uKSB7CisgICAgcmV0dXJuICchKCcgKyBleHByZXNzaW9u
ICsgJyknOworICB9LAorCisgIG5vdE51bGw6IGZ1bmN0aW9uKGV4cHJlc3Npb24pIHsKKyAgICBy
ZXR1cm4gZXhwcmVzc2lvbiArICchPW51bGwnOworICB9LAorCisgIG5vbkNvbXB1dGVkTWVtYmVy
OiBmdW5jdGlvbihsZWZ0LCByaWdodCkgeworICAgIHJldHVybiBsZWZ0ICsgJy4nICsgcmlnaHQ7
CisgIH0sCisKKyAgY29tcHV0ZWRNZW1iZXI6IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7CisgICAg
cmV0dXJuIGxlZnQgKyAnWycgKyByaWdodCArICddJzsKKyAgfSwKKworICBtZW1iZXI6IGZ1bmN0
aW9uKGxlZnQsIHJpZ2h0LCBjb21wdXRlZCkgeworICAgIGlmIChjb21wdXRlZCkgcmV0dXJuIHRo
aXMuY29tcHV0ZWRNZW1iZXIobGVmdCwgcmlnaHQpOworICAgIHJldHVybiB0aGlzLm5vbkNvbXB1
dGVkTWVtYmVyKGxlZnQsIHJpZ2h0KTsKKyAgfSwKKworICBhZGRFbnN1cmVTYWZlT2JqZWN0OiBm
dW5jdGlvbihpdGVtKSB7CisgICAgdGhpcy5jdXJyZW50KCkuYm9keS5wdXNoKHRoaXMuZW5zdXJl
U2FmZU9iamVjdChpdGVtKSwgJzsnKTsKKyAgfSwKKworICBhZGRFbnN1cmVTYWZlTWVtYmVyTmFt
ZTogZnVuY3Rpb24oaXRlbSkgeworICAgIHRoaXMuY3VycmVudCgpLmJvZHkucHVzaCh0aGlzLmVu
c3VyZVNhZmVNZW1iZXJOYW1lKGl0ZW0pLCAnOycpOworICB9LAorCisgIGFkZEVuc3VyZVNhZmVG
dW5jdGlvbjogZnVuY3Rpb24oaXRlbSkgeworICAgIHRoaXMuY3VycmVudCgpLmJvZHkucHVzaCh0
aGlzLmVuc3VyZVNhZmVGdW5jdGlvbihpdGVtKSwgJzsnKTsKKyAgfSwKKworICBlbnN1cmVTYWZl
T2JqZWN0OiBmdW5jdGlvbihpdGVtKSB7CisgICAgcmV0dXJuICdlbnN1cmVTYWZlT2JqZWN0KCcg
KyBpdGVtICsgJyx0ZXh0KSc7CisgIH0sCisKKyAgZW5zdXJlU2FmZU1lbWJlck5hbWU6IGZ1bmN0
aW9uKGl0ZW0pIHsKKyAgICByZXR1cm4gJ2Vuc3VyZVNhZmVNZW1iZXJOYW1lKCcgKyBpdGVtICsg
Jyx0ZXh0KSc7CisgIH0sCisKKyAgZW5zdXJlU2FmZUZ1bmN0aW9uOiBmdW5jdGlvbihpdGVtKSB7
CisgICAgcmV0dXJuICdlbnN1cmVTYWZlRnVuY3Rpb24oJyArIGl0ZW0gKyAnLHRleHQpJzsKKyAg
fSwKKworICBsYXp5UmVjdXJzZTogZnVuY3Rpb24oYXN0LCBpbnRvSWQsIG5hbWVJZCwgcmVjdXJz
aW9uRm4sIGNyZWF0ZSwgc2tpcFdhdGNoSWRDaGVjaykgeworICAgIHZhciBzZWxmID0gdGhpczsK
KyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICBzZWxmLnJlY3Vyc2UoYXN0LCBpbnRvSWQs
IG5hbWVJZCwgcmVjdXJzaW9uRm4sIGNyZWF0ZSwgc2tpcFdhdGNoSWRDaGVjayk7CisgICAgfTsK
KyAgfSwKKworICBsYXp5QXNzaWduOiBmdW5jdGlvbihpZCwgdmFsdWUpIHsKKyAgICB2YXIgc2Vs
ZiA9IHRoaXM7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgc2VsZi5hc3NpZ24oaWQs
IHZhbHVlKTsKKyAgICB9OworICB9LAorCisgIHN0cmluZ0VzY2FwZVJlZ2V4OiAvW14gYS16QS1a
MC05XS9nLAorCisgIHN0cmluZ0VzY2FwZUZuOiBmdW5jdGlvbihjKSB7CisgICAgcmV0dXJuICdc
XHUnICsgKCcwMDAwJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KTsK
KyAgfSwKKworICBlc2NhcGU6IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgaWYgKGlzU3RyaW5nKHZh
bHVlKSkgcmV0dXJuICInIiArIHZhbHVlLnJlcGxhY2UodGhpcy5zdHJpbmdFc2NhcGVSZWdleCwg
dGhpcy5zdHJpbmdFc2NhcGVGbikgKyAiJyI7CisgICAgaWYgKGlzTnVtYmVyKHZhbHVlKSkgcmV0
dXJuIHZhbHVlLnRvU3RyaW5nKCk7CisgICAgaWYgKHZhbHVlID09PSB0cnVlKSByZXR1cm4gJ3Ry
dWUnOworICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHJldHVybiAnZmFsc2UnOworICAgIGlmICh2
YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICdudWxsJzsKKyAgICBpZiAodHlwZW9mIHZhbHVlID09PSAn
dW5kZWZpbmVkJykgcmV0dXJuICd1bmRlZmluZWQnOworCisgICAgdGhyb3cgJHBhcnNlTWluRXJy
KCdlc2MnLCAnSU1QT1NTSUJMRScpOworICB9LAorCisgIG5leHRJZDogZnVuY3Rpb24oc2tpcCwg
aW5pdCkgeworICAgIHZhciBpZCA9ICd2JyArICh0aGlzLnN0YXRlLm5leHRJZCsrKTsKKyAgICBp
ZiAoIXNraXApIHsKKyAgICAgIHRoaXMuY3VycmVudCgpLnZhcnMucHVzaChpZCArIChpbml0ID8g
Jz0nICsgaW5pdCA6ICcnKSk7CisgICAgfQorICAgIHJldHVybiBpZDsKKyAgfSwKKworICBjdXJy
ZW50OiBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5zdGF0ZVt0aGlzLnN0YXRlLmNvbXB1
dGluZ107CisgIH0KK307CisKKworZnVuY3Rpb24gQVNUSW50ZXJwcmV0ZXIoYXN0QnVpbGRlciwg
JGZpbHRlcikgeworICB0aGlzLmFzdEJ1aWxkZXIgPSBhc3RCdWlsZGVyOworICB0aGlzLiRmaWx0
ZXIgPSAkZmlsdGVyOworfQorCitBU1RJbnRlcnByZXRlci5wcm90b3R5cGUgPSB7CisgIGNvbXBp
bGU6IGZ1bmN0aW9uKGV4cHJlc3Npb24sIGV4cGVuc2l2ZUNoZWNrcykgeworICAgIHZhciBzZWxm
ID0gdGhpczsKKyAgICB2YXIgYXN0ID0gdGhpcy5hc3RCdWlsZGVyLmFzdChleHByZXNzaW9uKTsK
KyAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uOworICAgIHRoaXMuZXhwZW5zaXZlQ2hl
Y2tzID0gZXhwZW5zaXZlQ2hlY2tzOworICAgIGZpbmRDb25zdGFudEFuZFdhdGNoRXhwcmVzc2lv
bnMoYXN0LCBzZWxmLiRmaWx0ZXIpOworICAgIHZhciBhc3NpZ25hYmxlOworICAgIHZhciBhc3Np
Z247CisgICAgaWYgKChhc3NpZ25hYmxlID0gYXNzaWduYWJsZUFTVChhc3QpKSkgeworICAgICAg
YXNzaWduID0gdGhpcy5yZWN1cnNlKGFzc2lnbmFibGUpOworICAgIH0KKyAgICB2YXIgdG9XYXRj
aCA9IGdldElucHV0cyhhc3QuYm9keSk7CisgICAgdmFyIGlucHV0czsKKyAgICBpZiAodG9XYXRj
aCkgeworICAgICAgaW5wdXRzID0gW107CisgICAgICBmb3JFYWNoKHRvV2F0Y2gsIGZ1bmN0aW9u
KHdhdGNoLCBrZXkpIHsKKyAgICAgICAgdmFyIGlucHV0ID0gc2VsZi5yZWN1cnNlKHdhdGNoKTsK
KyAgICAgICAgd2F0Y2guaW5wdXQgPSBpbnB1dDsKKyAgICAgICAgaW5wdXRzLnB1c2goaW5wdXQp
OworICAgICAgICB3YXRjaC53YXRjaElkID0ga2V5OworICAgICAgfSk7CisgICAgfQorICAgIHZh
ciBleHByZXNzaW9ucyA9IFtdOworICAgIGZvckVhY2goYXN0LmJvZHksIGZ1bmN0aW9uKGV4cHJl
c3Npb24pIHsKKyAgICAgIGV4cHJlc3Npb25zLnB1c2goc2VsZi5yZWN1cnNlKGV4cHJlc3Npb24u
ZXhwcmVzc2lvbikpOworICAgIH0pOworICAgIHZhciBmbiA9IGFzdC5ib2R5Lmxlbmd0aCA9PT0g
MCA/IGZ1bmN0aW9uKCkge30gOgorICAgICAgICAgICAgIGFzdC5ib2R5Lmxlbmd0aCA9PT0gMSA/
IGV4cHJlc3Npb25zWzBdIDoKKyAgICAgICAgICAgICBmdW5jdGlvbihzY29wZSwgbG9jYWxzKSB7
CisgICAgICAgICAgICAgICB2YXIgbGFzdFZhbHVlOworICAgICAgICAgICAgICAgZm9yRWFjaChl
eHByZXNzaW9ucywgZnVuY3Rpb24oZXhwKSB7CisgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSA9
IGV4cChzY29wZSwgbG9jYWxzKTsKKyAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
cmV0dXJuIGxhc3RWYWx1ZTsKKyAgICAgICAgICAgICB9OworICAgIGlmIChhc3NpZ24pIHsKKyAg
ICAgIGZuLmFzc2lnbiA9IGZ1bmN0aW9uKHNjb3BlLCB2YWx1ZSwgbG9jYWxzKSB7CisgICAgICAg
IHJldHVybiBhc3NpZ24oc2NvcGUsIGxvY2FscywgdmFsdWUpOworICAgICAgfTsKKyAgICB9Cisg
ICAgaWYgKGlucHV0cykgeworICAgICAgZm4uaW5wdXRzID0gaW5wdXRzOworICAgIH0KKyAgICBm
bi5saXRlcmFsID0gaXNMaXRlcmFsKGFzdCk7CisgICAgZm4uY29uc3RhbnQgPSBpc0NvbnN0YW50
KGFzdCk7CisgICAgcmV0dXJuIGZuOworICB9LAorCisgIHJlY3Vyc2U6IGZ1bmN0aW9uKGFzdCwg
Y29udGV4dCwgY3JlYXRlKSB7CisgICAgdmFyIGxlZnQsIHJpZ2h0LCBzZWxmID0gdGhpcywgYXJn
cywgZXhwcmVzc2lvbjsKKyAgICBpZiAoYXN0LmlucHV0KSB7CisgICAgICByZXR1cm4gdGhpcy5p
bnB1dHMoYXN0LmlucHV0LCBhc3Qud2F0Y2hJZCk7CisgICAgfQorICAgIHN3aXRjaCAoYXN0LnR5
cGUpIHsKKyAgICBjYXNlIEFTVC5MaXRlcmFsOgorICAgICAgcmV0dXJuIHRoaXMudmFsdWUoYXN0
LnZhbHVlLCBjb250ZXh0KTsKKyAgICBjYXNlIEFTVC5VbmFyeUV4cHJlc3Npb246CisgICAgICBy
aWdodCA9IHRoaXMucmVjdXJzZShhc3QuYXJndW1lbnQpOworICAgICAgcmV0dXJuIHRoaXNbJ3Vu
YXJ5JyArIGFzdC5vcGVyYXRvcl0ocmlnaHQsIGNvbnRleHQpOworICAgIGNhc2UgQVNULkJpbmFy
eUV4cHJlc3Npb246CisgICAgICBsZWZ0ID0gdGhpcy5yZWN1cnNlKGFzdC5sZWZ0KTsKKyAgICAg
IHJpZ2h0ID0gdGhpcy5yZWN1cnNlKGFzdC5yaWdodCk7CisgICAgICByZXR1cm4gdGhpc1snYmlu
YXJ5JyArIGFzdC5vcGVyYXRvcl0obGVmdCwgcmlnaHQsIGNvbnRleHQpOworICAgIGNhc2UgQVNU
LkxvZ2ljYWxFeHByZXNzaW9uOgorICAgICAgbGVmdCA9IHRoaXMucmVjdXJzZShhc3QubGVmdCk7
CisgICAgICByaWdodCA9IHRoaXMucmVjdXJzZShhc3QucmlnaHQpOworICAgICAgcmV0dXJuIHRo
aXNbJ2JpbmFyeScgKyBhc3Qub3BlcmF0b3JdKGxlZnQsIHJpZ2h0LCBjb250ZXh0KTsKKyAgICBj
YXNlIEFTVC5Db25kaXRpb25hbEV4cHJlc3Npb246CisgICAgICByZXR1cm4gdGhpc1sndGVybmFy
eT86J10oCisgICAgICAgIHRoaXMucmVjdXJzZShhc3QudGVzdCksCisgICAgICAgIHRoaXMucmVj
dXJzZShhc3QuYWx0ZXJuYXRlKSwKKyAgICAgICAgdGhpcy5yZWN1cnNlKGFzdC5jb25zZXF1ZW50
KSwKKyAgICAgICAgY29udGV4dAorICAgICAgKTsKKyAgICBjYXNlIEFTVC5JZGVudGlmaWVyOgor
ICAgICAgZW5zdXJlU2FmZU1lbWJlck5hbWUoYXN0Lm5hbWUsIHNlbGYuZXhwcmVzc2lvbik7Cisg
ICAgICByZXR1cm4gc2VsZi5pZGVudGlmaWVyKGFzdC5uYW1lLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLmV4cGVuc2l2ZUNoZWNrcyB8fCBpc1Bvc3NpYmx5RGFuZ2Vyb3VzTWVt
YmVyTmFtZShhc3QubmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQs
IGNyZWF0ZSwgc2VsZi5leHByZXNzaW9uKTsKKyAgICBjYXNlIEFTVC5NZW1iZXJFeHByZXNzaW9u
OgorICAgICAgbGVmdCA9IHRoaXMucmVjdXJzZShhc3Qub2JqZWN0LCBmYWxzZSwgISFjcmVhdGUp
OworICAgICAgaWYgKCFhc3QuY29tcHV0ZWQpIHsKKyAgICAgICAgZW5zdXJlU2FmZU1lbWJlck5h
bWUoYXN0LnByb3BlcnR5Lm5hbWUsIHNlbGYuZXhwcmVzc2lvbik7CisgICAgICAgIHJpZ2h0ID0g
YXN0LnByb3BlcnR5Lm5hbWU7CisgICAgICB9CisgICAgICBpZiAoYXN0LmNvbXB1dGVkKSByaWdo
dCA9IHRoaXMucmVjdXJzZShhc3QucHJvcGVydHkpOworICAgICAgcmV0dXJuIGFzdC5jb21wdXRl
ZCA/CisgICAgICAgIHRoaXMuY29tcHV0ZWRNZW1iZXIobGVmdCwgcmlnaHQsIGNvbnRleHQsIGNy
ZWF0ZSwgc2VsZi5leHByZXNzaW9uKSA6CisgICAgICAgIHRoaXMubm9uQ29tcHV0ZWRNZW1iZXIo
bGVmdCwgcmlnaHQsIHNlbGYuZXhwZW5zaXZlQ2hlY2tzLCBjb250ZXh0LCBjcmVhdGUsIHNlbGYu
ZXhwcmVzc2lvbik7CisgICAgY2FzZSBBU1QuQ2FsbEV4cHJlc3Npb246CisgICAgICBhcmdzID0g
W107CisgICAgICBmb3JFYWNoKGFzdC5hcmd1bWVudHMsIGZ1bmN0aW9uKGV4cHIpIHsKKyAgICAg
ICAgYXJncy5wdXNoKHNlbGYucmVjdXJzZShleHByKSk7CisgICAgICB9KTsKKyAgICAgIGlmIChh
c3QuZmlsdGVyKSByaWdodCA9IHRoaXMuJGZpbHRlcihhc3QuY2FsbGVlLm5hbWUpOworICAgICAg
aWYgKCFhc3QuZmlsdGVyKSByaWdodCA9IHRoaXMucmVjdXJzZShhc3QuY2FsbGVlLCB0cnVlKTsK
KyAgICAgIHJldHVybiBhc3QuZmlsdGVyID8KKyAgICAgICAgZnVuY3Rpb24oc2NvcGUsIGxvY2Fs
cywgYXNzaWduLCBpbnB1dHMpIHsKKyAgICAgICAgICB2YXIgdmFsdWVzID0gW107CisgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2
YWx1ZXMucHVzaChhcmdzW2ldKHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKSk7CisgICAg
ICAgICAgfQorICAgICAgICAgIHZhciB2YWx1ZSA9IHJpZ2h0LmFwcGx5KHVuZGVmaW5lZCwgdmFs
dWVzLCBpbnB1dHMpOworICAgICAgICAgIHJldHVybiBjb250ZXh0ID8ge2NvbnRleHQ6IHVuZGVm
aW5lZCwgbmFtZTogdW5kZWZpbmVkLCB2YWx1ZTogdmFsdWV9IDogdmFsdWU7CisgICAgICAgIH0g
OgorICAgICAgICBmdW5jdGlvbihzY29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0cykgeworICAg
ICAgICAgIHZhciByaHMgPSByaWdodChzY29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0cyk7Cisg
ICAgICAgICAgdmFyIHZhbHVlOworICAgICAgICAgIGlmIChyaHMudmFsdWUgIT0gbnVsbCkgewor
ICAgICAgICAgICAgZW5zdXJlU2FmZU9iamVjdChyaHMuY29udGV4dCwgc2VsZi5leHByZXNzaW9u
KTsKKyAgICAgICAgICAgIGVuc3VyZVNhZmVGdW5jdGlvbihyaHMudmFsdWUsIHNlbGYuZXhwcmVz
c2lvbik7CisgICAgICAgICAgICB2YXIgdmFsdWVzID0gW107CisgICAgICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgdmFsdWVzLnB1
c2goZW5zdXJlU2FmZU9iamVjdChhcmdzW2ldKHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRz
KSwgc2VsZi5leHByZXNzaW9uKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YWx1ZSA9
IGVuc3VyZVNhZmVPYmplY3QocmhzLnZhbHVlLmFwcGx5KHJocy5jb250ZXh0LCB2YWx1ZXMpLCBz
ZWxmLmV4cHJlc3Npb24pOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gY29udGV4dCA/
IHt2YWx1ZTogdmFsdWV9IDogdmFsdWU7CisgICAgICAgIH07CisgICAgY2FzZSBBU1QuQXNzaWdu
bWVudEV4cHJlc3Npb246CisgICAgICBsZWZ0ID0gdGhpcy5yZWN1cnNlKGFzdC5sZWZ0LCB0cnVl
LCAxKTsKKyAgICAgIHJpZ2h0ID0gdGhpcy5yZWN1cnNlKGFzdC5yaWdodCk7CisgICAgICByZXR1
cm4gZnVuY3Rpb24oc2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpIHsKKyAgICAgICAgdmFy
IGxocyA9IGxlZnQoc2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpOworICAgICAgICB2YXIg
cmhzID0gcmlnaHQoc2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpOworICAgICAgICBlbnN1
cmVTYWZlT2JqZWN0KGxocy52YWx1ZSwgc2VsZi5leHByZXNzaW9uKTsKKyAgICAgICAgbGhzLmNv
bnRleHRbbGhzLm5hbWVdID0gcmhzOworICAgICAgICByZXR1cm4gY29udGV4dCA/IHt2YWx1ZTog
cmhzfSA6IHJoczsKKyAgICAgIH07CisgICAgY2FzZSBBU1QuQXJyYXlFeHByZXNzaW9uOgorICAg
ICAgYXJncyA9IFtdOworICAgICAgZm9yRWFjaChhc3QuZWxlbWVudHMsIGZ1bmN0aW9uKGV4cHIp
IHsKKyAgICAgICAgYXJncy5wdXNoKHNlbGYucmVjdXJzZShleHByKSk7CisgICAgICB9KTsKKyAg
ICAgIHJldHVybiBmdW5jdGlvbihzY29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0cykgeworICAg
ICAgICB2YXIgdmFsdWUgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxl
bmd0aDsgKytpKSB7CisgICAgICAgICAgdmFsdWUucHVzaChhcmdzW2ldKHNjb3BlLCBsb2NhbHMs
IGFzc2lnbiwgaW5wdXRzKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvbnRleHQgPyB7
dmFsdWU6IHZhbHVlfSA6IHZhbHVlOworICAgICAgfTsKKyAgICBjYXNlIEFTVC5PYmplY3RFeHBy
ZXNzaW9uOgorICAgICAgYXJncyA9IFtdOworICAgICAgZm9yRWFjaChhc3QucHJvcGVydGllcywg
ZnVuY3Rpb24ocHJvcGVydHkpIHsKKyAgICAgICAgYXJncy5wdXNoKHtrZXk6IHByb3BlcnR5Lmtl
eS50eXBlID09PSBBU1QuSWRlbnRpZmllciA/CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0eS5rZXkubmFtZSA6CisgICAgICAgICAgICAgICAgICAgICAgICAoJycgKyBwcm9wZXJ0eS5r
ZXkudmFsdWUpLAorICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzZWxmLnJlY3Vyc2UocHJvcGVy
dHkudmFsdWUpCisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgICByZXR1cm4gZnVuY3Rpb24o
c2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpIHsKKyAgICAgICAgdmFyIHZhbHVlID0ge307
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7ICsraSkgeworICAgICAg
ICAgIHZhbHVlW2FyZ3NbaV0ua2V5XSA9IGFyZ3NbaV0udmFsdWUoc2NvcGUsIGxvY2FscywgYXNz
aWduLCBpbnB1dHMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjb250ZXh0ID8ge3ZhbHVl
OiB2YWx1ZX0gOiB2YWx1ZTsKKyAgICAgIH07CisgICAgY2FzZSBBU1QuVGhpc0V4cHJlc3Npb246
CisgICAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUpIHsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQg
PyB7dmFsdWU6IHNjb3BlfSA6IHNjb3BlOworICAgICAgfTsKKyAgICBjYXNlIEFTVC5OR1ZhbHVl
UGFyYW1ldGVyOgorICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwg
aW5wdXRzKSB7CisgICAgICAgIHJldHVybiBjb250ZXh0ID8ge3ZhbHVlOiBhc3NpZ259IDogYXNz
aWduOworICAgICAgfTsKKyAgICB9CisgIH0sCisKKyAgJ3VuYXJ5Kyc6IGZ1bmN0aW9uKGFyZ3Vt
ZW50LCBjb250ZXh0KSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBsb2NhbHMsIGFzc2ln
biwgaW5wdXRzKSB7CisgICAgICB2YXIgYXJnID0gYXJndW1lbnQoc2NvcGUsIGxvY2FscywgYXNz
aWduLCBpbnB1dHMpOworICAgICAgaWYgKGlzRGVmaW5lZChhcmcpKSB7CisgICAgICAgIGFyZyA9
ICthcmc7CisgICAgICB9IGVsc2UgeworICAgICAgICBhcmcgPSAwOworICAgICAgfQorICAgICAg
cmV0dXJuIGNvbnRleHQgPyB7dmFsdWU6IGFyZ30gOiBhcmc7CisgICAgfTsKKyAgfSwKKyAgJ3Vu
YXJ5LSc6IGZ1bmN0aW9uKGFyZ3VtZW50LCBjb250ZXh0KSB7CisgICAgcmV0dXJuIGZ1bmN0aW9u
KHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKSB7CisgICAgICB2YXIgYXJnID0gYXJndW1l
bnQoc2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpOworICAgICAgaWYgKGlzRGVmaW5lZChh
cmcpKSB7CisgICAgICAgIGFyZyA9IC1hcmc7CisgICAgICB9IGVsc2UgeworICAgICAgICBhcmcg
PSAwOworICAgICAgfQorICAgICAgcmV0dXJuIGNvbnRleHQgPyB7dmFsdWU6IGFyZ30gOiBhcmc7
CisgICAgfTsKKyAgfSwKKyAgJ3VuYXJ5ISc6IGZ1bmN0aW9uKGFyZ3VtZW50LCBjb250ZXh0KSB7
CisgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKSB7Cisg
ICAgICB2YXIgYXJnID0gIWFyZ3VtZW50KHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKTsK
KyAgICAgIHJldHVybiBjb250ZXh0ID8ge3ZhbHVlOiBhcmd9IDogYXJnOworICAgIH07CisgIH0s
CisgICdiaW5hcnkrJzogZnVuY3Rpb24obGVmdCwgcmlnaHQsIGNvbnRleHQpIHsKKyAgICByZXR1
cm4gZnVuY3Rpb24oc2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpIHsKKyAgICAgIHZhciBs
aHMgPSBsZWZ0KHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKTsKKyAgICAgIHZhciByaHMg
PSByaWdodChzY29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0cyk7CisgICAgICB2YXIgYXJnID0g
cGx1c0ZuKGxocywgcmhzKTsKKyAgICAgIHJldHVybiBjb250ZXh0ID8ge3ZhbHVlOiBhcmd9IDog
YXJnOworICAgIH07CisgIH0sCisgICdiaW5hcnktJzogZnVuY3Rpb24obGVmdCwgcmlnaHQsIGNv
bnRleHQpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1
dHMpIHsKKyAgICAgIHZhciBsaHMgPSBsZWZ0KHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRz
KTsKKyAgICAgIHZhciByaHMgPSByaWdodChzY29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0cyk7
CisgICAgICB2YXIgYXJnID0gKGlzRGVmaW5lZChsaHMpID8gbGhzIDogMCkgLSAoaXNEZWZpbmVk
KHJocykgPyByaHMgOiAwKTsKKyAgICAgIHJldHVybiBjb250ZXh0ID8ge3ZhbHVlOiBhcmd9IDog
YXJnOworICAgIH07CisgIH0sCisgICdiaW5hcnkqJzogZnVuY3Rpb24obGVmdCwgcmlnaHQsIGNv
bnRleHQpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1
dHMpIHsKKyAgICAgIHZhciBhcmcgPSBsZWZ0KHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRz
KSAqIHJpZ2h0KHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKTsKKyAgICAgIHJldHVybiBj
b250ZXh0ID8ge3ZhbHVlOiBhcmd9IDogYXJnOworICAgIH07CisgIH0sCisgICdiaW5hcnkvJzog
ZnVuY3Rpb24obGVmdCwgcmlnaHQsIGNvbnRleHQpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oc2Nv
cGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpIHsKKyAgICAgIHZhciBhcmcgPSBsZWZ0KHNjb3Bl
LCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKSAvIHJpZ2h0KHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwg
aW5wdXRzKTsKKyAgICAgIHJldHVybiBjb250ZXh0ID8ge3ZhbHVlOiBhcmd9IDogYXJnOworICAg
IH07CisgIH0sCisgICdiaW5hcnklJzogZnVuY3Rpb24obGVmdCwgcmlnaHQsIGNvbnRleHQpIHsK
KyAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpIHsKKyAg
ICAgIHZhciBhcmcgPSBsZWZ0KHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKSAlIHJpZ2h0
KHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKTsKKyAgICAgIHJldHVybiBjb250ZXh0ID8g
e3ZhbHVlOiBhcmd9IDogYXJnOworICAgIH07CisgIH0sCisgICdiaW5hcnk9PT0nOiBmdW5jdGlv
bihsZWZ0LCByaWdodCwgY29udGV4dCkgeworICAgIHJldHVybiBmdW5jdGlvbihzY29wZSwgbG9j
YWxzLCBhc3NpZ24sIGlucHV0cykgeworICAgICAgdmFyIGFyZyA9IGxlZnQoc2NvcGUsIGxvY2Fs
cywgYXNzaWduLCBpbnB1dHMpID09PSByaWdodChzY29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0
cyk7CisgICAgICByZXR1cm4gY29udGV4dCA/IHt2YWx1ZTogYXJnfSA6IGFyZzsKKyAgICB9Owor
ICB9LAorICAnYmluYXJ5IT09JzogZnVuY3Rpb24obGVmdCwgcmlnaHQsIGNvbnRleHQpIHsKKyAg
ICByZXR1cm4gZnVuY3Rpb24oc2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpIHsKKyAgICAg
IHZhciBhcmcgPSBsZWZ0KHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKSAhPT0gcmlnaHQo
c2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpOworICAgICAgcmV0dXJuIGNvbnRleHQgPyB7
dmFsdWU6IGFyZ30gOiBhcmc7CisgICAgfTsKKyAgfSwKKyAgJ2JpbmFyeT09JzogZnVuY3Rpb24o
bGVmdCwgcmlnaHQsIGNvbnRleHQpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUsIGxvY2Fs
cywgYXNzaWduLCBpbnB1dHMpIHsKKyAgICAgIHZhciBhcmcgPSBsZWZ0KHNjb3BlLCBsb2NhbHMs
IGFzc2lnbiwgaW5wdXRzKSA9PSByaWdodChzY29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0cyk7
CisgICAgICByZXR1cm4gY29udGV4dCA/IHt2YWx1ZTogYXJnfSA6IGFyZzsKKyAgICB9OworICB9
LAorICAnYmluYXJ5IT0nOiBmdW5jdGlvbihsZWZ0LCByaWdodCwgY29udGV4dCkgeworICAgIHJl
dHVybiBmdW5jdGlvbihzY29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0cykgeworICAgICAgdmFy
IGFyZyA9IGxlZnQoc2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpICE9IHJpZ2h0KHNjb3Bl
LCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKTsKKyAgICAgIHJldHVybiBjb250ZXh0ID8ge3ZhbHVl
OiBhcmd9IDogYXJnOworICAgIH07CisgIH0sCisgICdiaW5hcnk8JzogZnVuY3Rpb24obGVmdCwg
cmlnaHQsIGNvbnRleHQpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUsIGxvY2FscywgYXNz
aWduLCBpbnB1dHMpIHsKKyAgICAgIHZhciBhcmcgPSBsZWZ0KHNjb3BlLCBsb2NhbHMsIGFzc2ln
biwgaW5wdXRzKSA8IHJpZ2h0KHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKTsKKyAgICAg
IHJldHVybiBjb250ZXh0ID8ge3ZhbHVlOiBhcmd9IDogYXJnOworICAgIH07CisgIH0sCisgICdi
aW5hcnk+JzogZnVuY3Rpb24obGVmdCwgcmlnaHQsIGNvbnRleHQpIHsKKyAgICByZXR1cm4gZnVu
Y3Rpb24oc2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpIHsKKyAgICAgIHZhciBhcmcgPSBs
ZWZ0KHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKSA+IHJpZ2h0KHNjb3BlLCBsb2NhbHMs
IGFzc2lnbiwgaW5wdXRzKTsKKyAgICAgIHJldHVybiBjb250ZXh0ID8ge3ZhbHVlOiBhcmd9IDog
YXJnOworICAgIH07CisgIH0sCisgICdiaW5hcnk8PSc6IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0LCBj
b250ZXh0KSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5w
dXRzKSB7CisgICAgICB2YXIgYXJnID0gbGVmdChzY29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0
cykgPD0gcmlnaHQoc2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpOworICAgICAgcmV0dXJu
IGNvbnRleHQgPyB7dmFsdWU6IGFyZ30gOiBhcmc7CisgICAgfTsKKyAgfSwKKyAgJ2JpbmFyeT49
JzogZnVuY3Rpb24obGVmdCwgcmlnaHQsIGNvbnRleHQpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24o
c2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpIHsKKyAgICAgIHZhciBhcmcgPSBsZWZ0KHNj
b3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKSA+PSByaWdodChzY29wZSwgbG9jYWxzLCBhc3Np
Z24sIGlucHV0cyk7CisgICAgICByZXR1cm4gY29udGV4dCA/IHt2YWx1ZTogYXJnfSA6IGFyZzsK
KyAgICB9OworICB9LAorICAnYmluYXJ5JiYnOiBmdW5jdGlvbihsZWZ0LCByaWdodCwgY29udGV4
dCkgeworICAgIHJldHVybiBmdW5jdGlvbihzY29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0cykg
eworICAgICAgdmFyIGFyZyA9IGxlZnQoc2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpICYm
IHJpZ2h0KHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKTsKKyAgICAgIHJldHVybiBjb250
ZXh0ID8ge3ZhbHVlOiBhcmd9IDogYXJnOworICAgIH07CisgIH0sCisgICdiaW5hcnl8fCc6IGZ1
bmN0aW9uKGxlZnQsIHJpZ2h0LCBjb250ZXh0KSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3Bl
LCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKSB7CisgICAgICB2YXIgYXJnID0gbGVmdChzY29wZSwg
bG9jYWxzLCBhc3NpZ24sIGlucHV0cykgfHwgcmlnaHQoc2NvcGUsIGxvY2FscywgYXNzaWduLCBp
bnB1dHMpOworICAgICAgcmV0dXJuIGNvbnRleHQgPyB7dmFsdWU6IGFyZ30gOiBhcmc7CisgICAg
fTsKKyAgfSwKKyAgJ3Rlcm5hcnk/Oic6IGZ1bmN0aW9uKHRlc3QsIGFsdGVybmF0ZSwgY29uc2Vx
dWVudCwgY29udGV4dCkgeworICAgIHJldHVybiBmdW5jdGlvbihzY29wZSwgbG9jYWxzLCBhc3Np
Z24sIGlucHV0cykgeworICAgICAgdmFyIGFyZyA9IHRlc3Qoc2NvcGUsIGxvY2FscywgYXNzaWdu
LCBpbnB1dHMpID8gYWx0ZXJuYXRlKHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKSA6IGNv
bnNlcXVlbnQoc2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpOworICAgICAgcmV0dXJuIGNv
bnRleHQgPyB7dmFsdWU6IGFyZ30gOiBhcmc7CisgICAgfTsKKyAgfSwKKyAgdmFsdWU6IGZ1bmN0
aW9uKHZhbHVlLCBjb250ZXh0KSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeyByZXR1cm4gY29u
dGV4dCA/IHtjb250ZXh0OiB1bmRlZmluZWQsIG5hbWU6IHVuZGVmaW5lZCwgdmFsdWU6IHZhbHVl
fSA6IHZhbHVlOyB9OworICB9LAorICBpZGVudGlmaWVyOiBmdW5jdGlvbihuYW1lLCBleHBlbnNp
dmVDaGVja3MsIGNvbnRleHQsIGNyZWF0ZSwgZXhwcmVzc2lvbikgeworICAgIHJldHVybiBmdW5j
dGlvbihzY29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0cykgeworICAgICAgdmFyIGJhc2UgPSBs
b2NhbHMgJiYgKG5hbWUgaW4gbG9jYWxzKSA/IGxvY2FscyA6IHNjb3BlOworICAgICAgaWYgKGNy
ZWF0ZSAmJiBjcmVhdGUgIT09IDEgJiYgYmFzZSAmJiAhKGJhc2VbbmFtZV0pKSB7CisgICAgICAg
IGJhc2VbbmFtZV0gPSB7fTsKKyAgICAgIH0KKyAgICAgIHZhciB2YWx1ZSA9IGJhc2UgPyBiYXNl
W25hbWVdIDogdW5kZWZpbmVkOworICAgICAgaWYgKGV4cGVuc2l2ZUNoZWNrcykgeworICAgICAg
ICBlbnN1cmVTYWZlT2JqZWN0KHZhbHVlLCBleHByZXNzaW9uKTsKKyAgICAgIH0KKyAgICAgIGlm
IChjb250ZXh0KSB7CisgICAgICAgIHJldHVybiB7Y29udGV4dDogYmFzZSwgbmFtZTogbmFtZSwg
dmFsdWU6IHZhbHVlfTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAg
ICAgIH0KKyAgICB9OworICB9LAorICBjb21wdXRlZE1lbWJlcjogZnVuY3Rpb24obGVmdCwgcmln
aHQsIGNvbnRleHQsIGNyZWF0ZSwgZXhwcmVzc2lvbikgeworICAgIHJldHVybiBmdW5jdGlvbihz
Y29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0cykgeworICAgICAgdmFyIGxocyA9IGxlZnQoc2Nv
cGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpOworICAgICAgdmFyIHJoczsKKyAgICAgIHZhciB2
YWx1ZTsKKyAgICAgIGlmIChsaHMgIT0gbnVsbCkgeworICAgICAgICByaHMgPSByaWdodChzY29w
ZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0cyk7CisgICAgICAgIGVuc3VyZVNhZmVNZW1iZXJOYW1l
KHJocywgZXhwcmVzc2lvbik7CisgICAgICAgIGlmIChjcmVhdGUgJiYgY3JlYXRlICE9PSAxICYm
IGxocyAmJiAhKGxoc1tyaHNdKSkgeworICAgICAgICAgIGxoc1tyaHNdID0ge307CisgICAgICAg
IH0KKyAgICAgICAgdmFsdWUgPSBsaHNbcmhzXTsKKyAgICAgICAgZW5zdXJlU2FmZU9iamVjdCh2
YWx1ZSwgZXhwcmVzc2lvbik7CisgICAgICB9CisgICAgICBpZiAoY29udGV4dCkgeworICAgICAg
ICByZXR1cm4ge2NvbnRleHQ6IGxocywgbmFtZTogcmhzLCB2YWx1ZTogdmFsdWV9OworICAgICAg
fSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgfQorICAgIH07CisgIH0sCisg
IG5vbkNvbXB1dGVkTWVtYmVyOiBmdW5jdGlvbihsZWZ0LCByaWdodCwgZXhwZW5zaXZlQ2hlY2tz
LCBjb250ZXh0LCBjcmVhdGUsIGV4cHJlc3Npb24pIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oc2Nv
cGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpIHsKKyAgICAgIHZhciBsaHMgPSBsZWZ0KHNjb3Bl
LCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKTsKKyAgICAgIGlmIChjcmVhdGUgJiYgY3JlYXRlICE9
PSAxICYmIGxocyAmJiAhKGxoc1tyaWdodF0pKSB7CisgICAgICAgIGxoc1tyaWdodF0gPSB7fTsK
KyAgICAgIH0KKyAgICAgIHZhciB2YWx1ZSA9IGxocyAhPSBudWxsID8gbGhzW3JpZ2h0XSA6IHVu
ZGVmaW5lZDsKKyAgICAgIGlmIChleHBlbnNpdmVDaGVja3MgfHwgaXNQb3NzaWJseURhbmdlcm91
c01lbWJlck5hbWUocmlnaHQpKSB7CisgICAgICAgIGVuc3VyZVNhZmVPYmplY3QodmFsdWUsIGV4
cHJlc3Npb24pOworICAgICAgfQorICAgICAgaWYgKGNvbnRleHQpIHsKKyAgICAgICAgcmV0dXJu
IHtjb250ZXh0OiBsaHMsIG5hbWU6IHJpZ2h0LCB2YWx1ZTogdmFsdWV9OworICAgICAgfSBlbHNl
IHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgfQorICAgIH07CisgIH0sCisgIGlucHV0
czogZnVuY3Rpb24oaW5wdXQsIHdhdGNoSWQpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUs
IHZhbHVlLCBsb2NhbHMsIGlucHV0cykgeworICAgICAgaWYgKGlucHV0cykgcmV0dXJuIGlucHV0
c1t3YXRjaElkXTsKKyAgICAgIHJldHVybiBpbnB1dChzY29wZSwgdmFsdWUsIGxvY2Fscyk7Cisg
ICAgfTsKKyAgfQorfTsKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqLwordmFyIFBhcnNlciA9
IGZ1bmN0aW9uKGxleGVyLCAkZmlsdGVyLCBvcHRpb25zKSB7CisgIHRoaXMubGV4ZXIgPSBsZXhl
cjsKKyAgdGhpcy4kZmlsdGVyID0gJGZpbHRlcjsKKyAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsK
KyAgdGhpcy5hc3QgPSBuZXcgQVNUKHRoaXMubGV4ZXIpOworICB0aGlzLmFzdENvbXBpbGVyID0g
b3B0aW9ucy5jc3AgPyBuZXcgQVNUSW50ZXJwcmV0ZXIodGhpcy5hc3QsICRmaWx0ZXIpIDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEFTVENvbXBpbGVyKHRoaXMuYXN0
LCAkZmlsdGVyKTsKK307CisKK1BhcnNlci5wcm90b3R5cGUgPSB7CisgIGNvbnN0cnVjdG9yOiBQ
YXJzZXIsCisKKyAgcGFyc2U6IGZ1bmN0aW9uKHRleHQpIHsKKyAgICByZXR1cm4gdGhpcy5hc3RD
b21waWxlci5jb21waWxlKHRleHQsIHRoaXMub3B0aW9ucy5leHBlbnNpdmVDaGVja3MpOworICB9
Cit9OworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LworLy8gUGFyc2VyIGhlbHBlciBmdW5jdGlvbnMKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2Z1bmN0aW9uIHNldHRlcihvYmosIHBhdGgsIHNl
dFZhbHVlLCBmdWxsRXhwKSB7CisgIGVuc3VyZVNhZmVPYmplY3Qob2JqLCBmdWxsRXhwKTsKKwor
ICB2YXIgZWxlbWVudCA9IHBhdGguc3BsaXQoJy4nKSwga2V5OworICBmb3IgKHZhciBpID0gMDsg
ZWxlbWVudC5sZW5ndGggPiAxOyBpKyspIHsKKyAgICBrZXkgPSBlbnN1cmVTYWZlTWVtYmVyTmFt
ZShlbGVtZW50LnNoaWZ0KCksIGZ1bGxFeHApOworICAgIHZhciBwcm9wZXJ0eU9iaiA9IGVuc3Vy
ZVNhZmVPYmplY3Qob2JqW2tleV0sIGZ1bGxFeHApOworICAgIGlmICghcHJvcGVydHlPYmopIHsK
KyAgICAgIHByb3BlcnR5T2JqID0ge307CisgICAgICBvYmpba2V5XSA9IHByb3BlcnR5T2JqOwor
ICAgIH0KKyAgICBvYmogPSBwcm9wZXJ0eU9iajsKKyAgfQorICBrZXkgPSBlbnN1cmVTYWZlTWVt
YmVyTmFtZShlbGVtZW50LnNoaWZ0KCksIGZ1bGxFeHApOworICBlbnN1cmVTYWZlT2JqZWN0KG9i
altrZXldLCBmdWxsRXhwKTsKKyAgb2JqW2tleV0gPSBzZXRWYWx1ZTsKKyAgcmV0dXJuIHNldFZh
bHVlOworfQorCit2YXIgZ2V0dGVyRm5DYWNoZURlZmF1bHQgPSBjcmVhdGVNYXAoKTsKK3ZhciBn
ZXR0ZXJGbkNhY2hlRXhwZW5zaXZlID0gY3JlYXRlTWFwKCk7CisKK2Z1bmN0aW9uIGlzUG9zc2li
bHlEYW5nZXJvdXNNZW1iZXJOYW1lKG5hbWUpIHsKKyAgcmV0dXJuIG5hbWUgPT0gJ2NvbnN0cnVj
dG9yJzsKK30KKwordmFyIG9iamVjdFZhbHVlT2YgPSBPYmplY3QucHJvdG90eXBlLnZhbHVlT2Y7
CisKK2Z1bmN0aW9uIGdldFZhbHVlT2YodmFsdWUpIHsKKyAgcmV0dXJuIGlzRnVuY3Rpb24odmFs
dWUudmFsdWVPZikgPyB2YWx1ZS52YWx1ZU9mKCkgOiBvYmplY3RWYWx1ZU9mLmNhbGwodmFsdWUp
OworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvKioKKyAqIEBu
Z2RvYyBzZXJ2aWNlCisgKiBAbmFtZSAkcGFyc2UKKyAqIEBraW5kIGZ1bmN0aW9uCisgKgorICog
QGRlc2NyaXB0aW9uCisgKgorICogQ29udmVydHMgQW5ndWxhciB7QGxpbmsgZ3VpZGUvZXhwcmVz
c2lvbiBleHByZXNzaW9ufSBpbnRvIGEgZnVuY3Rpb24uCisgKgorICogYGBganMKKyAqICAgdmFy
IGdldHRlciA9ICRwYXJzZSgndXNlci5uYW1lJyk7CisgKiAgIHZhciBzZXR0ZXIgPSBnZXR0ZXIu
YXNzaWduOworICogICB2YXIgY29udGV4dCA9IHt1c2VyOntuYW1lOidhbmd1bGFyJ319OworICog
ICB2YXIgbG9jYWxzID0ge3VzZXI6e25hbWU6J2xvY2FsJ319OworICoKKyAqICAgZXhwZWN0KGdl
dHRlcihjb250ZXh0KSkudG9FcXVhbCgnYW5ndWxhcicpOworICogICBzZXR0ZXIoY29udGV4dCwg
J25ld1ZhbHVlJyk7CisgKiAgIGV4cGVjdChjb250ZXh0LnVzZXIubmFtZSkudG9FcXVhbCgnbmV3
VmFsdWUnKTsKKyAqICAgZXhwZWN0KGdldHRlcihjb250ZXh0LCBsb2NhbHMpKS50b0VxdWFsKCds
b2NhbCcpOworICogYGBgCisgKgorICoKKyAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIFN0
cmluZyBleHByZXNzaW9uIHRvIGNvbXBpbGUuCisgKiBAcmV0dXJucyB7ZnVuY3Rpb24oY29udGV4
dCwgbG9jYWxzKX0gYSBmdW5jdGlvbiB3aGljaCByZXByZXNlbnRzIHRoZSBjb21waWxlZCBleHBy
ZXNzaW9uOgorICoKKyAqICAgICogYGNvbnRleHRgIOKAkyBge29iamVjdH1gIOKAkyBhbiBvYmpl
Y3QgYWdhaW5zdCB3aGljaCBhbnkgZXhwcmVzc2lvbnMgZW1iZWRkZWQgaW4gdGhlIHN0cmluZ3MK
KyAqICAgICAgYXJlIGV2YWx1YXRlZCBhZ2FpbnN0ICh0eXBpY2FsbHkgYSBzY29wZSBvYmplY3Qp
LgorICogICAgKiBgbG9jYWxzYCDigJMgYHtvYmplY3Q9fWAg4oCTIGxvY2FsIHZhcmlhYmxlcyBj
b250ZXh0IG9iamVjdCwgdXNlZnVsIGZvciBvdmVycmlkaW5nIHZhbHVlcyBpbgorICogICAgICBg
Y29udGV4dGAuCisgKgorICogICAgVGhlIHJldHVybmVkIGZ1bmN0aW9uIGFsc28gaGFzIHRoZSBm
b2xsb3dpbmcgcHJvcGVydGllczoKKyAqICAgICAgKiBgbGl0ZXJhbGAg4oCTIGB7Ym9vbGVhbn1g
IOKAkyB3aGV0aGVyIHRoZSBleHByZXNzaW9uJ3MgdG9wLWxldmVsIG5vZGUgaXMgYSBKYXZhU2Ny
aXB0CisgKiAgICAgICAgbGl0ZXJhbC4KKyAqICAgICAgKiBgY29uc3RhbnRgIOKAkyBge2Jvb2xl
YW59YCDigJMgd2hldGhlciB0aGUgZXhwcmVzc2lvbiBpcyBtYWRlIGVudGlyZWx5IG9mIEphdmFT
Y3JpcHQKKyAqICAgICAgICBjb25zdGFudCBsaXRlcmFscy4KKyAqICAgICAgKiBgYXNzaWduYCDi
gJMgYHs/ZnVuY3Rpb24oY29udGV4dCwgdmFsdWUpfWAg4oCTIGlmIHRoZSBleHByZXNzaW9uIGlz
IGFzc2lnbmFibGUsIHRoaXMgd2lsbCBiZQorICogICAgICAgIHNldCB0byBhIGZ1bmN0aW9uIHRv
IGNoYW5nZSBpdHMgdmFsdWUgb24gdGhlIGdpdmVuIGNvbnRleHQuCisgKgorICovCisKKworLyoq
CisgKiBAbmdkb2MgcHJvdmlkZXIKKyAqIEBuYW1lICRwYXJzZVByb3ZpZGVyCisgKgorICogQGRl
c2NyaXB0aW9uCisgKiBgJHBhcnNlUHJvdmlkZXJgIGNhbiBiZSB1c2VkIGZvciBjb25maWd1cmlu
ZyB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUge0BsaW5rIG5nLiRwYXJzZSAkcGFyc2V9Cisg
KiAgc2VydmljZS4KKyAqLworZnVuY3Rpb24gJFBhcnNlUHJvdmlkZXIoKSB7CisgIHZhciBjYWNo
ZURlZmF1bHQgPSBjcmVhdGVNYXAoKTsKKyAgdmFyIGNhY2hlRXhwZW5zaXZlID0gY3JlYXRlTWFw
KCk7CisKKyAgdGhpcy4kZ2V0ID0gWyckZmlsdGVyJywgJyRzbmlmZmVyJywgZnVuY3Rpb24oJGZp
bHRlciwgJHNuaWZmZXIpIHsKKyAgICB2YXIgJHBhcnNlT3B0aW9ucyA9IHsKKyAgICAgICAgICBj
c3A6ICRzbmlmZmVyLmNzcCwKKyAgICAgICAgICBleHBlbnNpdmVDaGVja3M6IGZhbHNlCisgICAg
ICAgIH0sCisgICAgICAgICRwYXJzZU9wdGlvbnNFeHBlbnNpdmUgPSB7CisgICAgICAgICAgY3Nw
OiAkc25pZmZlci5jc3AsCisgICAgICAgICAgZXhwZW5zaXZlQ2hlY2tzOiB0cnVlCisgICAgICAg
IH07CisKKyAgICByZXR1cm4gZnVuY3Rpb24gJHBhcnNlKGV4cCwgaW50ZXJjZXB0b3JGbiwgZXhw
ZW5zaXZlQ2hlY2tzKSB7CisgICAgICB2YXIgcGFyc2VkRXhwcmVzc2lvbiwgb25lVGltZSwgY2Fj
aGVLZXk7CisKKyAgICAgIHN3aXRjaCAodHlwZW9mIGV4cCkgeworICAgICAgICBjYXNlICdzdHJp
bmcnOgorICAgICAgICAgIGV4cCA9IGV4cC50cmltKCk7CisgICAgICAgICAgY2FjaGVLZXkgPSBl
eHA7CisKKyAgICAgICAgICB2YXIgY2FjaGUgPSAoZXhwZW5zaXZlQ2hlY2tzID8gY2FjaGVFeHBl
bnNpdmUgOiBjYWNoZURlZmF1bHQpOworICAgICAgICAgIHBhcnNlZEV4cHJlc3Npb24gPSBjYWNo
ZVtjYWNoZUtleV07CisKKyAgICAgICAgICBpZiAoIXBhcnNlZEV4cHJlc3Npb24pIHsKKyAgICAg
ICAgICAgIGlmIChleHAuY2hhckF0KDApID09PSAnOicgJiYgZXhwLmNoYXJBdCgxKSA9PT0gJzon
KSB7CisgICAgICAgICAgICAgIG9uZVRpbWUgPSB0cnVlOworICAgICAgICAgICAgICBleHAgPSBl
eHAuc3Vic3RyaW5nKDIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHBhcnNlT3B0
aW9ucyA9IGV4cGVuc2l2ZUNoZWNrcyA/ICRwYXJzZU9wdGlvbnNFeHBlbnNpdmUgOiAkcGFyc2VP
cHRpb25zOworICAgICAgICAgICAgdmFyIGxleGVyID0gbmV3IExleGVyKHBhcnNlT3B0aW9ucyk7
CisgICAgICAgICAgICB2YXIgcGFyc2VyID0gbmV3IFBhcnNlcihsZXhlciwgJGZpbHRlciwgcGFy
c2VPcHRpb25zKTsKKyAgICAgICAgICAgIHBhcnNlZEV4cHJlc3Npb24gPSBwYXJzZXIucGFyc2Uo
ZXhwKTsKKyAgICAgICAgICAgIGlmIChwYXJzZWRFeHByZXNzaW9uLmNvbnN0YW50KSB7CisgICAg
ICAgICAgICAgIHBhcnNlZEV4cHJlc3Npb24uJCR3YXRjaERlbGVnYXRlID0gY29uc3RhbnRXYXRj
aERlbGVnYXRlOworICAgICAgICAgICAgfSBlbHNlIGlmIChvbmVUaW1lKSB7CisgICAgICAgICAg
ICAgIHBhcnNlZEV4cHJlc3Npb24uJCR3YXRjaERlbGVnYXRlID0gcGFyc2VkRXhwcmVzc2lvbi5s
aXRlcmFsID8KKyAgICAgICAgICAgICAgICAgIG9uZVRpbWVMaXRlcmFsV2F0Y2hEZWxlZ2F0ZSA6
IG9uZVRpbWVXYXRjaERlbGVnYXRlOworICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJzZWRFeHBy
ZXNzaW9uLmlucHV0cykgeworICAgICAgICAgICAgICBwYXJzZWRFeHByZXNzaW9uLiQkd2F0Y2hE
ZWxlZ2F0ZSA9IGlucHV0c1dhdGNoRGVsZWdhdGU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBjYWNoZVtjYWNoZUtleV0gPSBwYXJzZWRFeHByZXNzaW9uOworICAgICAgICAgIH0KKyAgICAg
ICAgICByZXR1cm4gYWRkSW50ZXJjZXB0b3IocGFyc2VkRXhwcmVzc2lvbiwgaW50ZXJjZXB0b3JG
bik7CisKKyAgICAgICAgY2FzZSAnZnVuY3Rpb24nOgorICAgICAgICAgIHJldHVybiBhZGRJbnRl
cmNlcHRvcihleHAsIGludGVyY2VwdG9yRm4pOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgcmV0dXJuIG5vb3A7CisgICAgICB9CisgICAgfTsKKworICAgIGZ1bmN0aW9uIGV4cHJlc3Np
b25JbnB1dERpcnR5Q2hlY2sobmV3VmFsdWUsIG9sZFZhbHVlT2ZWYWx1ZSkgeworCisgICAgICBp
ZiAobmV3VmFsdWUgPT0gbnVsbCB8fCBvbGRWYWx1ZU9mVmFsdWUgPT0gbnVsbCkgeyAvLyBudWxs
L3VuZGVmaW5lZAorICAgICAgICByZXR1cm4gbmV3VmFsdWUgPT09IG9sZFZhbHVlT2ZWYWx1ZTsK
KyAgICAgIH0KKworICAgICAgaWYgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ29iamVjdCcpIHsKKwor
ICAgICAgICAvLyBhdHRlbXB0IHRvIGNvbnZlcnQgdGhlIHZhbHVlIHRvIGEgcHJpbWl0aXZlIHR5
cGUKKyAgICAgICAgLy8gVE9ETyhkb2NzKTogYWRkIGEgbm90ZSB0byBkb2NzIHRoYXQgYnkgaW1w
bGVtZW50aW5nIHZhbHVlT2YgZXZlbiBvYmplY3RzIGFuZCBhcnJheXMgY2FuCisgICAgICAgIC8v
ICAgICAgICAgICAgIGJlIGNoZWFwbHkgZGlydHktY2hlY2tlZAorICAgICAgICBuZXdWYWx1ZSA9
IGdldFZhbHVlT2YobmV3VmFsdWUpOworCisgICAgICAgIGlmICh0eXBlb2YgbmV3VmFsdWUgPT09
ICdvYmplY3QnKSB7CisgICAgICAgICAgLy8gb2JqZWN0cy9hcnJheXMgYXJlIG5vdCBzdXBwb3J0
ZWQgLSBkZWVwLXdhdGNoaW5nIHRoZW0gd291bGQgYmUgdG9vIGV4cGVuc2l2ZQorICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGZhbGwtdGhyb3VnaCB0byB0
aGUgcHJpbWl0aXZlIGVxdWFsaXR5IGNoZWNrCisgICAgICB9CisKKyAgICAgIC8vUHJpbWl0aXZl
IG9yIE5hTgorICAgICAgcmV0dXJuIG5ld1ZhbHVlID09PSBvbGRWYWx1ZU9mVmFsdWUgfHwgKG5l
d1ZhbHVlICE9PSBuZXdWYWx1ZSAmJiBvbGRWYWx1ZU9mVmFsdWUgIT09IG9sZFZhbHVlT2ZWYWx1
ZSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gaW5wdXRzV2F0Y2hEZWxlZ2F0ZShzY29wZSwgbGlz
dGVuZXIsIG9iamVjdEVxdWFsaXR5LCBwYXJzZWRFeHByZXNzaW9uLCBwcmV0dHlQcmludEV4cHJl
c3Npb24pIHsKKyAgICAgIHZhciBpbnB1dEV4cHJlc3Npb25zID0gcGFyc2VkRXhwcmVzc2lvbi5p
bnB1dHM7CisgICAgICB2YXIgbGFzdFJlc3VsdDsKKworICAgICAgaWYgKGlucHV0RXhwcmVzc2lv
bnMubGVuZ3RoID09PSAxKSB7CisgICAgICAgIHZhciBvbGRJbnB1dFZhbHVlT2YgPSBleHByZXNz
aW9uSW5wdXREaXJ0eUNoZWNrOyAvLyBpbml0IHRvIHNvbWV0aGluZyB1bmlxdWUgc28gdGhhdCBl
cXVhbHMgY2hlY2sgZmFpbHMKKyAgICAgICAgaW5wdXRFeHByZXNzaW9ucyA9IGlucHV0RXhwcmVz
c2lvbnNbMF07CisgICAgICAgIHJldHVybiBzY29wZS4kd2F0Y2goZnVuY3Rpb24gZXhwcmVzc2lv
bklucHV0V2F0Y2goc2NvcGUpIHsKKyAgICAgICAgICB2YXIgbmV3SW5wdXRWYWx1ZSA9IGlucHV0
RXhwcmVzc2lvbnMoc2NvcGUpOworICAgICAgICAgIGlmICghZXhwcmVzc2lvbklucHV0RGlydHlD
aGVjayhuZXdJbnB1dFZhbHVlLCBvbGRJbnB1dFZhbHVlT2YpKSB7CisgICAgICAgICAgICBsYXN0
UmVzdWx0ID0gcGFyc2VkRXhwcmVzc2lvbihzY29wZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFtu
ZXdJbnB1dFZhbHVlXSk7CisgICAgICAgICAgICBvbGRJbnB1dFZhbHVlT2YgPSBuZXdJbnB1dFZh
bHVlICYmIGdldFZhbHVlT2YobmV3SW5wdXRWYWx1ZSk7CisgICAgICAgICAgfQorICAgICAgICAg
IHJldHVybiBsYXN0UmVzdWx0OworICAgICAgICB9LCBsaXN0ZW5lciwgb2JqZWN0RXF1YWxpdHks
IHByZXR0eVByaW50RXhwcmVzc2lvbik7CisgICAgICB9CisKKyAgICAgIHZhciBvbGRJbnB1dFZh
bHVlT2ZWYWx1ZXMgPSBbXTsKKyAgICAgIHZhciBvbGRJbnB1dFZhbHVlcyA9IFtdOworICAgICAg
Zm9yICh2YXIgaSA9IDAsIGlpID0gaW5wdXRFeHByZXNzaW9ucy5sZW5ndGg7IGkgPCBpaTsgaSsr
KSB7CisgICAgICAgIG9sZElucHV0VmFsdWVPZlZhbHVlc1tpXSA9IGV4cHJlc3Npb25JbnB1dERp
cnR5Q2hlY2s7IC8vIGluaXQgdG8gc29tZXRoaW5nIHVuaXF1ZSBzbyB0aGF0IGVxdWFscyBjaGVj
ayBmYWlscworICAgICAgICBvbGRJbnB1dFZhbHVlc1tpXSA9IG51bGw7CisgICAgICB9CisKKyAg
ICAgIHJldHVybiBzY29wZS4kd2F0Y2goZnVuY3Rpb24gZXhwcmVzc2lvbklucHV0c1dhdGNoKHNj
b3BlKSB7CisgICAgICAgIHZhciBjaGFuZ2VkID0gZmFsc2U7CisKKyAgICAgICAgZm9yICh2YXIg
aSA9IDAsIGlpID0gaW5wdXRFeHByZXNzaW9ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAg
ICAgICAgdmFyIG5ld0lucHV0VmFsdWUgPSBpbnB1dEV4cHJlc3Npb25zW2ldKHNjb3BlKTsKKyAg
ICAgICAgICBpZiAoY2hhbmdlZCB8fCAoY2hhbmdlZCA9ICFleHByZXNzaW9uSW5wdXREaXJ0eUNo
ZWNrKG5ld0lucHV0VmFsdWUsIG9sZElucHV0VmFsdWVPZlZhbHVlc1tpXSkpKSB7CisgICAgICAg
ICAgICBvbGRJbnB1dFZhbHVlc1tpXSA9IG5ld0lucHV0VmFsdWU7CisgICAgICAgICAgICBvbGRJ
bnB1dFZhbHVlT2ZWYWx1ZXNbaV0gPSBuZXdJbnB1dFZhbHVlICYmIGdldFZhbHVlT2YobmV3SW5w
dXRWYWx1ZSk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGNoYW5nZWQp
IHsKKyAgICAgICAgICBsYXN0UmVzdWx0ID0gcGFyc2VkRXhwcmVzc2lvbihzY29wZSwgdW5kZWZp
bmVkLCB1bmRlZmluZWQsIG9sZElucHV0VmFsdWVzKTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBsYXN0UmVzdWx0OworICAgICAgfSwgbGlzdGVuZXIsIG9iamVjdEVxdWFsaXR5LCBwcmV0
dHlQcmludEV4cHJlc3Npb24pOworICAgIH0KKworICAgIGZ1bmN0aW9uIG9uZVRpbWVXYXRjaERl
bGVnYXRlKHNjb3BlLCBsaXN0ZW5lciwgb2JqZWN0RXF1YWxpdHksIHBhcnNlZEV4cHJlc3Npb24p
IHsKKyAgICAgIHZhciB1bndhdGNoLCBsYXN0VmFsdWU7CisgICAgICByZXR1cm4gdW53YXRjaCA9
IHNjb3BlLiR3YXRjaChmdW5jdGlvbiBvbmVUaW1lV2F0Y2goc2NvcGUpIHsKKyAgICAgICAgcmV0
dXJuIHBhcnNlZEV4cHJlc3Npb24oc2NvcGUpOworICAgICAgfSwgZnVuY3Rpb24gb25lVGltZUxp
c3RlbmVyKHZhbHVlLCBvbGQsIHNjb3BlKSB7CisgICAgICAgIGxhc3RWYWx1ZSA9IHZhbHVlOwor
ICAgICAgICBpZiAoaXNGdW5jdGlvbihsaXN0ZW5lcikpIHsKKyAgICAgICAgICBsaXN0ZW5lci5h
cHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgICB9CisgICAgICAgIGlmIChpc0RlZmluZWQo
dmFsdWUpKSB7CisgICAgICAgICAgc2NvcGUuJCRwb3N0RGlnZXN0KGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgaWYgKGlzRGVmaW5lZChsYXN0VmFsdWUpKSB7CisgICAgICAgICAgICAgIHVud2F0
Y2goKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgfSwg
b2JqZWN0RXF1YWxpdHkpOworICAgIH0KKworICAgIGZ1bmN0aW9uIG9uZVRpbWVMaXRlcmFsV2F0
Y2hEZWxlZ2F0ZShzY29wZSwgbGlzdGVuZXIsIG9iamVjdEVxdWFsaXR5LCBwYXJzZWRFeHByZXNz
aW9uKSB7CisgICAgICB2YXIgdW53YXRjaCwgbGFzdFZhbHVlOworICAgICAgcmV0dXJuIHVud2F0
Y2ggPSBzY29wZS4kd2F0Y2goZnVuY3Rpb24gb25lVGltZVdhdGNoKHNjb3BlKSB7CisgICAgICAg
IHJldHVybiBwYXJzZWRFeHByZXNzaW9uKHNjb3BlKTsKKyAgICAgIH0sIGZ1bmN0aW9uIG9uZVRp
bWVMaXN0ZW5lcih2YWx1ZSwgb2xkLCBzY29wZSkgeworICAgICAgICBsYXN0VmFsdWUgPSB2YWx1
ZTsKKyAgICAgICAgaWYgKGlzRnVuY3Rpb24obGlzdGVuZXIpKSB7CisgICAgICAgICAgbGlzdGVu
ZXIuY2FsbCh0aGlzLCB2YWx1ZSwgb2xkLCBzY29wZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGlzQWxsRGVmaW5lZCh2YWx1ZSkpIHsKKyAgICAgICAgICBzY29wZS4kJHBvc3REaWdlc3QoZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICBpZiAoaXNBbGxEZWZpbmVkKGxhc3RWYWx1ZSkpIHVud2F0
Y2goKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgfSwgb2JqZWN0RXF1YWxpdHkp
OworCisgICAgICBmdW5jdGlvbiBpc0FsbERlZmluZWQodmFsdWUpIHsKKyAgICAgICAgdmFyIGFs
bERlZmluZWQgPSB0cnVlOworICAgICAgICBmb3JFYWNoKHZhbHVlLCBmdW5jdGlvbih2YWwpIHsK
KyAgICAgICAgICBpZiAoIWlzRGVmaW5lZCh2YWwpKSBhbGxEZWZpbmVkID0gZmFsc2U7CisgICAg
ICAgIH0pOworICAgICAgICByZXR1cm4gYWxsRGVmaW5lZDsKKyAgICAgIH0KKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBjb25zdGFudFdhdGNoRGVsZWdhdGUoc2NvcGUsIGxpc3RlbmVyLCBvYmplY3RF
cXVhbGl0eSwgcGFyc2VkRXhwcmVzc2lvbikgeworICAgICAgdmFyIHVud2F0Y2g7CisgICAgICBy
ZXR1cm4gdW53YXRjaCA9IHNjb3BlLiR3YXRjaChmdW5jdGlvbiBjb25zdGFudFdhdGNoKHNjb3Bl
KSB7CisgICAgICAgIHJldHVybiBwYXJzZWRFeHByZXNzaW9uKHNjb3BlKTsKKyAgICAgIH0sIGZ1
bmN0aW9uIGNvbnN0YW50TGlzdGVuZXIodmFsdWUsIG9sZCwgc2NvcGUpIHsKKyAgICAgICAgaWYg
KGlzRnVuY3Rpb24obGlzdGVuZXIpKSB7CisgICAgICAgICAgbGlzdGVuZXIuYXBwbHkodGhpcywg
YXJndW1lbnRzKTsKKyAgICAgICAgfQorICAgICAgICB1bndhdGNoKCk7CisgICAgICB9LCBvYmpl
Y3RFcXVhbGl0eSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gYWRkSW50ZXJjZXB0b3IocGFyc2Vk
RXhwcmVzc2lvbiwgaW50ZXJjZXB0b3JGbikgeworICAgICAgaWYgKCFpbnRlcmNlcHRvckZuKSBy
ZXR1cm4gcGFyc2VkRXhwcmVzc2lvbjsKKyAgICAgIHZhciB3YXRjaERlbGVnYXRlID0gcGFyc2Vk
RXhwcmVzc2lvbi4kJHdhdGNoRGVsZWdhdGU7CisKKyAgICAgIHZhciByZWd1bGFyV2F0Y2ggPQor
ICAgICAgICAgIHdhdGNoRGVsZWdhdGUgIT09IG9uZVRpbWVMaXRlcmFsV2F0Y2hEZWxlZ2F0ZSAm
JgorICAgICAgICAgIHdhdGNoRGVsZWdhdGUgIT09IG9uZVRpbWVXYXRjaERlbGVnYXRlOworCisg
ICAgICB2YXIgZm4gPSByZWd1bGFyV2F0Y2ggPyBmdW5jdGlvbiByZWd1bGFySW50ZXJjZXB0ZWRF
eHByZXNzaW9uKHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKSB7CisgICAgICAgIHZhciB2
YWx1ZSA9IHBhcnNlZEV4cHJlc3Npb24oc2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpOwor
ICAgICAgICByZXR1cm4gaW50ZXJjZXB0b3JGbih2YWx1ZSwgc2NvcGUsIGxvY2Fscyk7CisgICAg
ICB9IDogZnVuY3Rpb24gb25lVGltZUludGVyY2VwdGVkRXhwcmVzc2lvbihzY29wZSwgbG9jYWxz
LCBhc3NpZ24sIGlucHV0cykgeworICAgICAgICB2YXIgdmFsdWUgPSBwYXJzZWRFeHByZXNzaW9u
KHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKTsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGlu
dGVyY2VwdG9yRm4odmFsdWUsIHNjb3BlLCBsb2NhbHMpOworICAgICAgICAvLyB3ZSBvbmx5IHJl
dHVybiB0aGUgaW50ZXJjZXB0b3IncyByZXN1bHQgaWYgdGhlCisgICAgICAgIC8vIGluaXRpYWwg
dmFsdWUgaXMgZGVmaW5lZCAoZm9yIGJpbmQtb25jZSkKKyAgICAgICAgcmV0dXJuIGlzRGVmaW5l
ZCh2YWx1ZSkgPyByZXN1bHQgOiB2YWx1ZTsKKyAgICAgIH07CisKKyAgICAgIC8vIFByb3BhZ2F0
ZSAkJHdhdGNoRGVsZWdhdGVzIG90aGVyIHRoZW4gaW5wdXRzV2F0Y2hEZWxlZ2F0ZQorICAgICAg
aWYgKHBhcnNlZEV4cHJlc3Npb24uJCR3YXRjaERlbGVnYXRlICYmCisgICAgICAgICAgcGFyc2Vk
RXhwcmVzc2lvbi4kJHdhdGNoRGVsZWdhdGUgIT09IGlucHV0c1dhdGNoRGVsZWdhdGUpIHsKKyAg
ICAgICAgZm4uJCR3YXRjaERlbGVnYXRlID0gcGFyc2VkRXhwcmVzc2lvbi4kJHdhdGNoRGVsZWdh
dGU7CisgICAgICB9IGVsc2UgaWYgKCFpbnRlcmNlcHRvckZuLiRzdGF0ZWZ1bCkgeworICAgICAg
ICAvLyBJZiB0aGVyZSBpcyBhbiBpbnRlcmNlcHRvciwgYnV0IG5vIHdhdGNoRGVsZWdhdGUgdGhl
biB0cmVhdCB0aGUgaW50ZXJjZXB0b3IgbGlrZQorICAgICAgICAvLyB3ZSB0cmVhdCBmaWx0ZXJz
IC0gaXQgaXMgYXNzdW1lZCB0byBiZSBhIHB1cmUgZnVuY3Rpb24gdW5sZXNzIGZsYWdnZWQgd2l0
aCAkc3RhdGVmdWwKKyAgICAgICAgZm4uJCR3YXRjaERlbGVnYXRlID0gaW5wdXRzV2F0Y2hEZWxl
Z2F0ZTsKKyAgICAgICAgZm4uaW5wdXRzID0gcGFyc2VkRXhwcmVzc2lvbi5pbnB1dHMgPyBwYXJz
ZWRFeHByZXNzaW9uLmlucHV0cyA6IFtwYXJzZWRFeHByZXNzaW9uXTsKKyAgICAgIH0KKworICAg
ICAgcmV0dXJuIGZuOworICAgIH0KKyAgfV07Cit9CisKKy8qKgorICogQG5nZG9jIHNlcnZpY2UK
KyAqIEBuYW1lICRxCisgKiBAcmVxdWlyZXMgJHJvb3RTY29wZQorICoKKyAqIEBkZXNjcmlwdGlv
bgorICogQSBzZXJ2aWNlIHRoYXQgaGVscHMgeW91IHJ1biBmdW5jdGlvbnMgYXN5bmNocm9ub3Vz
bHksIGFuZCB1c2UgdGhlaXIgcmV0dXJuIHZhbHVlcyAob3IgZXhjZXB0aW9ucykKKyAqIHdoZW4g
dGhleSBhcmUgZG9uZSBwcm9jZXNzaW5nLgorICoKKyAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRp
b24gb2YgcHJvbWlzZXMvZGVmZXJyZWQgb2JqZWN0cyBpbnNwaXJlZCBieQorICogW0tyaXMgS293
YWwncyBRXShodHRwczovL2dpdGh1Yi5jb20va3Jpc2tvd2FsL3EpLgorICoKKyAqICRxIGNhbiBi
ZSB1c2VkIGluIHR3byBmYXNoaW9ucyAtLS0gb25lIHdoaWNoIGlzIG1vcmUgc2ltaWxhciB0byBL
cmlzIEtvd2FsJ3MgUSBvciBqUXVlcnkncyBEZWZlcnJlZAorICogaW1wbGVtZW50YXRpb25zLCBh
bmQgdGhlIG90aGVyIHdoaWNoIHJlc2VtYmxlcyBFUzYgcHJvbWlzZXMgdG8gc29tZSBkZWdyZWUu
CisgKgorICogIyAkcSBjb25zdHJ1Y3RvcgorICoKKyAqIFRoZSBzdHJlYW1saW5lZCBFUzYgc3R5
bGUgcHJvbWlzZSBpcyBlc3NlbnRpYWxseSBqdXN0IHVzaW5nICRxIGFzIGEgY29uc3RydWN0b3Ig
d2hpY2ggdGFrZXMgYSBgcmVzb2x2ZXJgCisgKiBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgYXJndW1l
bnQuIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgbmF0aXZlIFByb21pc2UgaW1wbGVtZW50YXRpb24g
ZnJvbSBFUzYgSGFybW9ueSwKKyAqIHNlZSBbTUROXShodHRwczovL2RldmVsb3Blci5tb3ppbGxh
Lm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9Q
cm9taXNlKS4KKyAqCisgKiBXaGlsZSB0aGUgY29uc3RydWN0b3Itc3R5bGUgdXNlIGlzIHN1cHBv
cnRlZCwgbm90IGFsbCBvZiB0aGUgc3VwcG9ydGluZyBtZXRob2RzIGZyb20gRVM2IEhhcm1vbnkg
cHJvbWlzZXMgYXJlCisgKiBhdmFpbGFibGUgeWV0LgorICoKKyAqIEl0IGNhbiBiZSB1c2VkIGxp
a2Ugc286CisgKgorICogYGBganMKKyAqICAgLy8gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgZXhh
bXBsZSBsZXQncyBhc3N1bWUgdGhhdCB2YXJpYWJsZXMgYCRxYCBhbmQgYG9rVG9HcmVldGAKKyAq
ICAgLy8gYXJlIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBsZXhpY2FsIHNjb3BlICh0aGV5IGNv
dWxkIGhhdmUgYmVlbiBpbmplY3RlZCBvciBwYXNzZWQgaW4pLgorICoKKyAqICAgZnVuY3Rpb24g
YXN5bmNHcmVldChuYW1lKSB7CisgKiAgICAgLy8gcGVyZm9ybSBzb21lIGFzeW5jaHJvbm91cyBv
cGVyYXRpb24sIHJlc29sdmUgb3IgcmVqZWN0IHRoZSBwcm9taXNlIHdoZW4gYXBwcm9wcmlhdGUu
CisgKiAgICAgcmV0dXJuICRxKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICogICAgICAg
c2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAqICAgICAgICAgaWYgKG9rVG9HcmVldChuYW1lKSkg
eworICogICAgICAgICAgIHJlc29sdmUoJ0hlbGxvLCAnICsgbmFtZSArICchJyk7CisgKiAgICAg
ICAgIH0gZWxzZSB7CisgKiAgICAgICAgICAgcmVqZWN0KCdHcmVldGluZyAnICsgbmFtZSArICcg
aXMgbm90IGFsbG93ZWQuJyk7CisgKiAgICAgICAgIH0KKyAqICAgICAgIH0sIDEwMDApOworICog
ICAgIH0pOworICogICB9CisgKgorICogICB2YXIgcHJvbWlzZSA9IGFzeW5jR3JlZXQoJ1JvYmlu
IEhvb2QnKTsKKyAqICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKGdyZWV0aW5nKSB7CisgKiAgICAg
YWxlcnQoJ1N1Y2Nlc3M6ICcgKyBncmVldGluZyk7CisgKiAgIH0sIGZ1bmN0aW9uKHJlYXNvbikg
eworICogICAgIGFsZXJ0KCdGYWlsZWQ6ICcgKyByZWFzb24pOworICogICB9KTsKKyAqIGBgYAor
ICoKKyAqIE5vdGU6IHByb2dyZXNzL25vdGlmeSBjYWxsYmFja3MgYXJlIG5vdCBjdXJyZW50bHkg
c3VwcG9ydGVkIHZpYSB0aGUgRVM2LXN0eWxlIGludGVyZmFjZS4KKyAqCisgKiBIb3dldmVyLCB0
aGUgbW9yZSB0cmFkaXRpb25hbCBDb21tb25KUy1zdHlsZSB1c2FnZSBpcyBzdGlsbCBhdmFpbGFi
bGUsIGFuZCBkb2N1bWVudGVkIGJlbG93LgorICoKKyAqIFtUaGUgQ29tbW9uSlMgUHJvbWlzZSBw
cm9wb3NhbF0oaHR0cDovL3dpa2kuY29tbW9uanMub3JnL3dpa2kvUHJvbWlzZXMpIGRlc2NyaWJl
cyBhIHByb21pc2UgYXMgYW4KKyAqIGludGVyZmFjZSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBhbiBv
YmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSByZXN1bHQgb2YgYW4gYWN0aW9uIHRoYXQgaXMKKyAq
IHBlcmZvcm1lZCBhc3luY2hyb25vdXNseSwgYW5kIG1heSBvciBtYXkgbm90IGJlIGZpbmlzaGVk
IGF0IGFueSBnaXZlbiBwb2ludCBpbiB0aW1lLgorICoKKyAqIEZyb20gdGhlIHBlcnNwZWN0aXZl
IG9mIGRlYWxpbmcgd2l0aCBlcnJvciBoYW5kbGluZywgZGVmZXJyZWQgYW5kIHByb21pc2UgQVBJ
cyBhcmUgdG8KKyAqIGFzeW5jaHJvbm91cyBwcm9ncmFtbWluZyB3aGF0IGB0cnlgLCBgY2F0Y2hg
IGFuZCBgdGhyb3dgIGtleXdvcmRzIGFyZSB0byBzeW5jaHJvbm91cyBwcm9ncmFtbWluZy4KKyAq
CisgKiBgYGBqcworICogICAvLyBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBleGFtcGxlIGxldCdz
IGFzc3VtZSB0aGF0IHZhcmlhYmxlcyBgJHFgIGFuZCBgb2tUb0dyZWV0YAorICogICAvLyBhcmUg
YXZhaWxhYmxlIGluIHRoZSBjdXJyZW50IGxleGljYWwgc2NvcGUgKHRoZXkgY291bGQgaGF2ZSBi
ZWVuIGluamVjdGVkIG9yIHBhc3NlZCBpbikuCisgKgorICogICBmdW5jdGlvbiBhc3luY0dyZWV0
KG5hbWUpIHsKKyAqICAgICB2YXIgZGVmZXJyZWQgPSAkcS5kZWZlcigpOworICoKKyAqICAgICBz
ZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICogICAgICAgZGVmZXJyZWQubm90aWZ5KCdBYm91dCB0
byBncmVldCAnICsgbmFtZSArICcuJyk7CisgKgorICogICAgICAgaWYgKG9rVG9HcmVldChuYW1l
KSkgeworICogICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKCdIZWxsbywgJyArIG5hbWUgKyAnIScp
OworICogICAgICAgfSBlbHNlIHsKKyAqICAgICAgICAgZGVmZXJyZWQucmVqZWN0KCdHcmVldGlu
ZyAnICsgbmFtZSArICcgaXMgbm90IGFsbG93ZWQuJyk7CisgKiAgICAgICB9CisgKiAgICAgfSwg
MTAwMCk7CisgKgorICogICAgIHJldHVybiBkZWZlcnJlZC5wcm9taXNlOworICogICB9CisgKgor
ICogICB2YXIgcHJvbWlzZSA9IGFzeW5jR3JlZXQoJ1JvYmluIEhvb2QnKTsKKyAqICAgcHJvbWlz
ZS50aGVuKGZ1bmN0aW9uKGdyZWV0aW5nKSB7CisgKiAgICAgYWxlcnQoJ1N1Y2Nlc3M6ICcgKyBn
cmVldGluZyk7CisgKiAgIH0sIGZ1bmN0aW9uKHJlYXNvbikgeworICogICAgIGFsZXJ0KCdGYWls
ZWQ6ICcgKyByZWFzb24pOworICogICB9LCBmdW5jdGlvbih1cGRhdGUpIHsKKyAqICAgICBhbGVy
dCgnR290IG5vdGlmaWNhdGlvbjogJyArIHVwZGF0ZSk7CisgKiAgIH0pOworICogYGBgCisgKgor
ICogQXQgZmlyc3QgaXQgbWlnaHQgbm90IGJlIG9idmlvdXMgd2h5IHRoaXMgZXh0cmEgY29tcGxl
eGl0eSBpcyB3b3J0aCB0aGUgdHJvdWJsZS4gVGhlIHBheW9mZgorICogY29tZXMgaW4gdGhlIHdh
eSBvZiBndWFyYW50ZWVzIHRoYXQgcHJvbWlzZSBhbmQgZGVmZXJyZWQgQVBJcyBtYWtlLCBzZWUK
KyAqIGh0dHBzOi8vZ2l0aHViLmNvbS9rcmlza293YWwvdW5jb21tb25qcy9ibG9iL21hc3Rlci9w
cm9taXNlcy9zcGVjaWZpY2F0aW9uLm1kLgorICoKKyAqIEFkZGl0aW9uYWxseSB0aGUgcHJvbWlz
ZSBhcGkgYWxsb3dzIGZvciBjb21wb3NpdGlvbiB0aGF0IGlzIHZlcnkgaGFyZCB0byBkbyB3aXRo
IHRoZQorICogdHJhZGl0aW9uYWwgY2FsbGJhY2sgKFtDUFNdKGh0dHA6Ly9lbi53aWtpcGVkaWEu
b3JnL3dpa2kvQ29udGludWF0aW9uLXBhc3Npbmdfc3R5bGUpKSBhcHByb2FjaC4KKyAqIEZvciBt
b3JlIG9uIHRoaXMgcGxlYXNlIHNlZSB0aGUgW1EgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9naXRo
dWIuY29tL2tyaXNrb3dhbC9xKSBlc3BlY2lhbGx5IHRoZQorICogc2VjdGlvbiBvbiBzZXJpYWwg
b3IgcGFyYWxsZWwgam9pbmluZyBvZiBwcm9taXNlcy4KKyAqCisgKiAjIFRoZSBEZWZlcnJlZCBB
UEkKKyAqCisgKiBBIG5ldyBpbnN0YW5jZSBvZiBkZWZlcnJlZCBpcyBjb25zdHJ1Y3RlZCBieSBj
YWxsaW5nIGAkcS5kZWZlcigpYC4KKyAqCisgKiBUaGUgcHVycG9zZSBvZiB0aGUgZGVmZXJyZWQg
b2JqZWN0IGlzIHRvIGV4cG9zZSB0aGUgYXNzb2NpYXRlZCBQcm9taXNlIGluc3RhbmNlIGFzIHdl
bGwgYXMgQVBJcworICogdGhhdCBjYW4gYmUgdXNlZCBmb3Igc2lnbmFsaW5nIHRoZSBzdWNjZXNz
ZnVsIG9yIHVuc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCBhcyB3ZWxsIGFzIHRoZSBzdGF0dXMKKyAq
IG9mIHRoZSB0YXNrLgorICoKKyAqICoqTWV0aG9kcyoqCisgKgorICogLSBgcmVzb2x2ZSh2YWx1
ZSlgIOKAkyByZXNvbHZlcyB0aGUgZGVyaXZlZCBwcm9taXNlIHdpdGggdGhlIGB2YWx1ZWAuIElm
IHRoZSB2YWx1ZSBpcyBhIHJlamVjdGlvbgorICogICBjb25zdHJ1Y3RlZCB2aWEgYCRxLnJlamVj
dGAsIHRoZSBwcm9taXNlIHdpbGwgYmUgcmVqZWN0ZWQgaW5zdGVhZC4KKyAqIC0gYHJlamVjdChy
ZWFzb24pYCDigJMgcmVqZWN0cyB0aGUgZGVyaXZlZCBwcm9taXNlIHdpdGggdGhlIGByZWFzb25g
LiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8KKyAqICAgcmVzb2x2aW5nIGl0IHdpdGggYSByZWplY3Rp
b24gY29uc3RydWN0ZWQgdmlhIGAkcS5yZWplY3RgLgorICogLSBgbm90aWZ5KHZhbHVlKWAgLSBw
cm92aWRlcyB1cGRhdGVzIG9uIHRoZSBzdGF0dXMgb2YgdGhlIHByb21pc2UncyBleGVjdXRpb24u
IFRoaXMgbWF5IGJlIGNhbGxlZAorICogICBtdWx0aXBsZSB0aW1lcyBiZWZvcmUgdGhlIHByb21p
c2UgaXMgZWl0aGVyIHJlc29sdmVkIG9yIHJlamVjdGVkLgorICoKKyAqICoqUHJvcGVydGllcyoq
CisgKgorICogLSBwcm9taXNlIOKAkyBge1Byb21pc2V9YCDigJMgcHJvbWlzZSBvYmplY3QgYXNz
b2NpYXRlZCB3aXRoIHRoaXMgZGVmZXJyZWQuCisgKgorICoKKyAqICMgVGhlIFByb21pc2UgQVBJ
CisgKgorICogQSBuZXcgcHJvbWlzZSBpbnN0YW5jZSBpcyBjcmVhdGVkIHdoZW4gYSBkZWZlcnJl
ZCBpbnN0YW5jZSBpcyBjcmVhdGVkIGFuZCBjYW4gYmUgcmV0cmlldmVkIGJ5CisgKiBjYWxsaW5n
IGBkZWZlcnJlZC5wcm9taXNlYC4KKyAqCisgKiBUaGUgcHVycG9zZSBvZiB0aGUgcHJvbWlzZSBv
YmplY3QgaXMgdG8gYWxsb3cgZm9yIGludGVyZXN0ZWQgcGFydGllcyB0byBnZXQgYWNjZXNzIHRv
IHRoZSByZXN1bHQKKyAqIG9mIHRoZSBkZWZlcnJlZCB0YXNrIHdoZW4gaXQgY29tcGxldGVzLgor
ICoKKyAqICoqTWV0aG9kcyoqCisgKgorICogLSBgdGhlbihzdWNjZXNzQ2FsbGJhY2ssIGVycm9y
Q2FsbGJhY2ssIG5vdGlmeUNhbGxiYWNrKWAg4oCTIHJlZ2FyZGxlc3Mgb2Ygd2hlbiB0aGUgcHJv
bWlzZSB3YXMgb3IKKyAqICAgd2lsbCBiZSByZXNvbHZlZCBvciByZWplY3RlZCwgYHRoZW5gIGNh
bGxzIG9uZSBvZiB0aGUgc3VjY2VzcyBvciBlcnJvciBjYWxsYmFja3MgYXN5bmNocm9ub3VzbHkK
KyAqICAgYXMgc29vbiBhcyB0aGUgcmVzdWx0IGlzIGF2YWlsYWJsZS4gVGhlIGNhbGxiYWNrcyBh
cmUgY2FsbGVkIHdpdGggYSBzaW5nbGUgYXJndW1lbnQ6IHRoZSByZXN1bHQKKyAqICAgb3IgcmVq
ZWN0aW9uIHJlYXNvbi4gQWRkaXRpb25hbGx5LCB0aGUgbm90aWZ5IGNhbGxiYWNrIG1heSBiZSBj
YWxsZWQgemVybyBvciBtb3JlIHRpbWVzIHRvCisgKiAgIHByb3ZpZGUgYSBwcm9ncmVzcyBpbmRp
Y2F0aW9uLCBiZWZvcmUgdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgb3IgcmVqZWN0ZWQuCisgKgor
ICogICBUaGlzIG1ldGhvZCAqcmV0dXJucyBhIG5ldyBwcm9taXNlKiB3aGljaCBpcyByZXNvbHZl
ZCBvciByZWplY3RlZCB2aWEgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUKKyAqICAgYHN1Y2Nlc3ND
YWxsYmFja2AsIGBlcnJvckNhbGxiYWNrYCAodW5sZXNzIHRoYXQgdmFsdWUgaXMgYSBwcm9taXNl
LCBpbiB3aGljaCBjYXNlIGl0IGlzIHJlc29sdmVkCisgKiAgIHdpdGggdGhlIHZhbHVlIHdoaWNo
IGlzIHJlc29sdmVkIGluIHRoYXQgcHJvbWlzZSB1c2luZworICogICBbcHJvbWlzZSBjaGFpbmlu
Z10oaHR0cDovL3d3dy5odG1sNXJvY2tzLmNvbS9lbi90dXRvcmlhbHMvZXM2L3Byb21pc2VzLyN0
b2MtcHJvbWlzZXMtcXVldWVzKSkuCisgKiAgIEl0IGFsc28gbm90aWZpZXMgdmlhIHRoZSByZXR1
cm4gdmFsdWUgb2YgdGhlIGBub3RpZnlDYWxsYmFja2AgbWV0aG9kLiBUaGUgcHJvbWlzZSBjYW5u
b3QgYmUKKyAqICAgcmVzb2x2ZWQgb3IgcmVqZWN0ZWQgZnJvbSB0aGUgbm90aWZ5Q2FsbGJhY2sg
bWV0aG9kLgorICoKKyAqIC0gYGNhdGNoKGVycm9yQ2FsbGJhY2spYCDigJMgc2hvcnRoYW5kIGZv
ciBgcHJvbWlzZS50aGVuKG51bGwsIGVycm9yQ2FsbGJhY2spYAorICoKKyAqIC0gYGZpbmFsbHko
Y2FsbGJhY2ssIG5vdGlmeUNhbGxiYWNrKWAg4oCTIGFsbG93cyB5b3UgdG8gb2JzZXJ2ZSBlaXRo
ZXIgdGhlIGZ1bGZpbGxtZW50IG9yIHJlamVjdGlvbiBvZiBhIHByb21pc2UsCisgKiAgIGJ1dCB0
byBkbyBzbyB3aXRob3V0IG1vZGlmeWluZyB0aGUgZmluYWwgdmFsdWUuIFRoaXMgaXMgdXNlZnVs
IHRvIHJlbGVhc2UgcmVzb3VyY2VzIG9yIGRvIHNvbWUKKyAqICAgY2xlYW4tdXAgdGhhdCBuZWVk
cyB0byBiZSBkb25lIHdoZXRoZXIgdGhlIHByb21pc2Ugd2FzIHJlamVjdGVkIG9yIHJlc29sdmVk
LiBTZWUgdGhlIFtmdWxsCisgKiAgIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9r
cmlza293YWwvcS93aWtpL0FQSS1SZWZlcmVuY2UjcHJvbWlzZWZpbmFsbHljYWxsYmFjaykgZm9y
CisgKiAgIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogIyBDaGFpbmluZyBwcm9taXNlcworICoK
KyAqIEJlY2F1c2UgY2FsbGluZyB0aGUgYHRoZW5gIG1ldGhvZCBvZiBhIHByb21pc2UgcmV0dXJu
cyBhIG5ldyBkZXJpdmVkIHByb21pc2UsIGl0IGlzIGVhc2lseQorICogcG9zc2libGUgdG8gY3Jl
YXRlIGEgY2hhaW4gb2YgcHJvbWlzZXM6CisgKgorICogYGBganMKKyAqICAgcHJvbWlzZUIgPSBw
cm9taXNlQS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgeworICogICAgIHJldHVybiByZXN1bHQgKyAx
OworICogICB9KTsKKyAqCisgKiAgIC8vIHByb21pc2VCIHdpbGwgYmUgcmVzb2x2ZWQgaW1tZWRp
YXRlbHkgYWZ0ZXIgcHJvbWlzZUEgaXMgcmVzb2x2ZWQgYW5kIGl0cyB2YWx1ZQorICogICAvLyB3
aWxsIGJlIHRoZSByZXN1bHQgb2YgcHJvbWlzZUEgaW5jcmVtZW50ZWQgYnkgMQorICogYGBgCisg
KgorICogSXQgaXMgcG9zc2libGUgdG8gY3JlYXRlIGNoYWlucyBvZiBhbnkgbGVuZ3RoIGFuZCBz
aW5jZSBhIHByb21pc2UgY2FuIGJlIHJlc29sdmVkIHdpdGggYW5vdGhlcgorICogcHJvbWlzZSAo
d2hpY2ggd2lsbCBkZWZlciBpdHMgcmVzb2x1dGlvbiBmdXJ0aGVyKSwgaXQgaXMgcG9zc2libGUg
dG8gcGF1c2UvZGVmZXIgcmVzb2x1dGlvbiBvZgorICogdGhlIHByb21pc2VzIGF0IGFueSBwb2lu
dCBpbiB0aGUgY2hhaW4uIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gaW1wbGVtZW50IHBvd2Vy
ZnVsIEFQSXMgbGlrZQorICogJGh0dHAncyByZXNwb25zZSBpbnRlcmNlcHRvcnMuCisgKgorICoK
KyAqICMgRGlmZmVyZW5jZXMgYmV0d2VlbiBLcmlzIEtvd2FsJ3MgUSBhbmQgJHEKKyAqCisgKiAg
VGhlcmUgYXJlIHR3byBtYWluIGRpZmZlcmVuY2VzOgorICoKKyAqIC0gJHEgaXMgaW50ZWdyYXRl
ZCB3aXRoIHRoZSB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZX0gU2NvcGUgbW9kZWwgb2JzZXJ2
YXRpb24KKyAqICAgbWVjaGFuaXNtIGluIGFuZ3VsYXIsIHdoaWNoIG1lYW5zIGZhc3RlciBwcm9w
YWdhdGlvbiBvZiByZXNvbHV0aW9uIG9yIHJlamVjdGlvbiBpbnRvIHlvdXIKKyAqICAgbW9kZWxz
IGFuZCBhdm9pZGluZyB1bm5lY2Vzc2FyeSBicm93c2VyIHJlcGFpbnRzLCB3aGljaCB3b3VsZCBy
ZXN1bHQgaW4gZmxpY2tlcmluZyBVSS4KKyAqIC0gUSBoYXMgbWFueSBtb3JlIGZlYXR1cmVzIHRo
YW4gJHEsIGJ1dCB0aGF0IGNvbWVzIGF0IGEgY29zdCBvZiBieXRlcy4gJHEgaXMgdGlueSwgYnV0
IGNvbnRhaW5zCisgKiAgIGFsbCB0aGUgaW1wb3J0YW50IGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZv
ciBjb21tb24gYXN5bmMgdGFza3MuCisgKgorICogICMgVGVzdGluZworICoKKyAqICBgYGBqcwor
ICogICAgaXQoJ3Nob3VsZCBzaW11bGF0ZSBwcm9taXNlJywgaW5qZWN0KGZ1bmN0aW9uKCRxLCAk
cm9vdFNjb3BlKSB7CisgKiAgICAgIHZhciBkZWZlcnJlZCA9ICRxLmRlZmVyKCk7CisgKiAgICAg
IHZhciBwcm9taXNlID0gZGVmZXJyZWQucHJvbWlzZTsKKyAqICAgICAgdmFyIHJlc29sdmVkVmFs
dWU7CisgKgorICogICAgICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpIHsgcmVzb2x2ZWRW
YWx1ZSA9IHZhbHVlOyB9KTsKKyAqICAgICAgZXhwZWN0KHJlc29sdmVkVmFsdWUpLnRvQmVVbmRl
ZmluZWQoKTsKKyAqCisgKiAgICAgIC8vIFNpbXVsYXRlIHJlc29sdmluZyBvZiBwcm9taXNlCisg
KiAgICAgIGRlZmVycmVkLnJlc29sdmUoMTIzKTsKKyAqICAgICAgLy8gTm90ZSB0aGF0IHRoZSAn
dGhlbicgZnVuY3Rpb24gZG9lcyBub3QgZ2V0IGNhbGxlZCBzeW5jaHJvbm91c2x5LgorICogICAg
ICAvLyBUaGlzIGlzIGJlY2F1c2Ugd2Ugd2FudCB0aGUgcHJvbWlzZSBBUEkgdG8gYWx3YXlzIGJl
IGFzeW5jLCB3aGV0aGVyIG9yIG5vdAorICogICAgICAvLyBpdCBnb3QgY2FsbGVkIHN5bmNocm9u
b3VzbHkgb3IgYXN5bmNocm9ub3VzbHkuCisgKiAgICAgIGV4cGVjdChyZXNvbHZlZFZhbHVlKS50
b0JlVW5kZWZpbmVkKCk7CisgKgorICogICAgICAvLyBQcm9wYWdhdGUgcHJvbWlzZSByZXNvbHV0
aW9uIHRvICd0aGVuJyBmdW5jdGlvbnMgdXNpbmcgJGFwcGx5KCkuCisgKiAgICAgICRyb290U2Nv
cGUuJGFwcGx5KCk7CisgKiAgICAgIGV4cGVjdChyZXNvbHZlZFZhbHVlKS50b0VxdWFsKDEyMyk7
CisgKiAgICB9KSk7CisgKiAgYGBgCisgKgorICogQHBhcmFtIHtmdW5jdGlvbihmdW5jdGlvbiwg
ZnVuY3Rpb24pfSByZXNvbHZlciBGdW5jdGlvbiB3aGljaCBpcyByZXNwb25zaWJsZSBmb3IgcmVz
b2x2aW5nIG9yCisgKiAgIHJlamVjdGluZyB0aGUgbmV3bHkgY3JlYXRlZCBwcm9taXNlLiBUaGUg
Zmlyc3QgcGFyYW1ldGVyIGlzIGEgZnVuY3Rpb24gd2hpY2ggcmVzb2x2ZXMgdGhlCisgKiAgIHBy
b21pc2UsIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIGEgZnVuY3Rpb24gd2hpY2ggcmVqZWN0cyB0
aGUgcHJvbWlzZS4KKyAqCisgKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIG5ld2x5IGNyZWF0ZWQg
cHJvbWlzZS4KKyAqLworZnVuY3Rpb24gJFFQcm92aWRlcigpIHsKKworICB0aGlzLiRnZXQgPSBb
JyRyb290U2NvcGUnLCAnJGV4Y2VwdGlvbkhhbmRsZXInLCBmdW5jdGlvbigkcm9vdFNjb3BlLCAk
ZXhjZXB0aW9uSGFuZGxlcikgeworICAgIHJldHVybiBxRmFjdG9yeShmdW5jdGlvbihjYWxsYmFj
aykgeworICAgICAgJHJvb3RTY29wZS4kZXZhbEFzeW5jKGNhbGxiYWNrKTsKKyAgICB9LCAkZXhj
ZXB0aW9uSGFuZGxlcik7CisgIH1dOworfQorCitmdW5jdGlvbiAkJFFQcm92aWRlcigpIHsKKyAg
dGhpcy4kZ2V0ID0gWyckYnJvd3NlcicsICckZXhjZXB0aW9uSGFuZGxlcicsIGZ1bmN0aW9uKCRi
cm93c2VyLCAkZXhjZXB0aW9uSGFuZGxlcikgeworICAgIHJldHVybiBxRmFjdG9yeShmdW5jdGlv
bihjYWxsYmFjaykgeworICAgICAgJGJyb3dzZXIuZGVmZXIoY2FsbGJhY2spOworICAgIH0sICRl
eGNlcHRpb25IYW5kbGVyKTsKKyAgfV07Cit9CisKKy8qKgorICogQ29uc3RydWN0cyBhIHByb21p
c2UgbWFuYWdlci4KKyAqCisgKiBAcGFyYW0ge2Z1bmN0aW9uKGZ1bmN0aW9uKX0gbmV4dFRpY2sg
RnVuY3Rpb24gZm9yIGV4ZWN1dGluZyBmdW5jdGlvbnMgaW4gdGhlIG5leHQgdHVybi4KKyAqIEBw
YXJhbSB7ZnVuY3Rpb24oLi4uKil9IGV4Y2VwdGlvbkhhbmRsZXIgRnVuY3Rpb24gaW50byB3aGlj
aCB1bmV4cGVjdGVkIGV4Y2VwdGlvbnMgYXJlIHBhc3NlZCBmb3IKKyAqICAgICBkZWJ1Z2dpbmcg
cHVycG9zZXMuCisgKiBAcmV0dXJucyB7b2JqZWN0fSBQcm9taXNlIG1hbmFnZXIuCisgKi8KK2Z1
bmN0aW9uIHFGYWN0b3J5KG5leHRUaWNrLCBleGNlcHRpb25IYW5kbGVyKSB7CisgIHZhciAkcU1p
bkVyciA9IG1pbkVycignJHEnLCBUeXBlRXJyb3IpOworICBmdW5jdGlvbiBjYWxsT25jZShzZWxm
LCByZXNvbHZlRm4sIHJlamVjdEZuKSB7CisgICAgdmFyIGNhbGxlZCA9IGZhbHNlOworICAgIGZ1
bmN0aW9uIHdyYXAoZm4pIHsKKyAgICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkgeworICAgICAg
ICBpZiAoY2FsbGVkKSByZXR1cm47CisgICAgICAgIGNhbGxlZCA9IHRydWU7CisgICAgICAgIGZu
LmNhbGwoc2VsZiwgdmFsdWUpOworICAgICAgfTsKKyAgICB9CisKKyAgICByZXR1cm4gW3dyYXAo
cmVzb2x2ZUZuKSwgd3JhcChyZWplY3RGbildOworICB9CisKKyAgLyoqCisgICAqIEBuZ2RvYyBt
ZXRob2QKKyAgICogQG5hbWUgbmcuJHEjZGVmZXIKKyAgICogQGtpbmQgZnVuY3Rpb24KKyAgICoK
KyAgICogQGRlc2NyaXB0aW9uCisgICAqIENyZWF0ZXMgYSBgRGVmZXJyZWRgIG9iamVjdCB3aGlj
aCByZXByZXNlbnRzIGEgdGFzayB3aGljaCB3aWxsIGZpbmlzaCBpbiB0aGUgZnV0dXJlLgorICAg
KgorICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgZGVm
ZXJyZWQuCisgICAqLworICB2YXIgZGVmZXIgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gbmV3
IERlZmVycmVkKCk7CisgIH07CisKKyAgZnVuY3Rpb24gUHJvbWlzZSgpIHsKKyAgICB0aGlzLiQk
c3RhdGUgPSB7IHN0YXR1czogMCB9OworICB9CisKKyAgUHJvbWlzZS5wcm90b3R5cGUgPSB7Cisg
ICAgdGhlbjogZnVuY3Rpb24ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHByb2dyZXNzQmFjaykg
eworICAgICAgdmFyIHJlc3VsdCA9IG5ldyBEZWZlcnJlZCgpOworCisgICAgICB0aGlzLiQkc3Rh
dGUucGVuZGluZyA9IHRoaXMuJCRzdGF0ZS5wZW5kaW5nIHx8IFtdOworICAgICAgdGhpcy4kJHN0
YXRlLnBlbmRpbmcucHVzaChbcmVzdWx0LCBvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcHJvZ3Jl
c3NCYWNrXSk7CisgICAgICBpZiAodGhpcy4kJHN0YXRlLnN0YXR1cyA+IDApIHNjaGVkdWxlUHJv
Y2Vzc1F1ZXVlKHRoaXMuJCRzdGF0ZSk7CisKKyAgICAgIHJldHVybiByZXN1bHQucHJvbWlzZTsK
KyAgICB9LAorCisgICAgImNhdGNoIjogZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgICAgIHJldHVy
biB0aGlzLnRoZW4obnVsbCwgY2FsbGJhY2spOworICAgIH0sCisKKyAgICAiZmluYWxseSI6IGZ1
bmN0aW9uKGNhbGxiYWNrLCBwcm9ncmVzc0JhY2spIHsKKyAgICAgIHJldHVybiB0aGlzLnRoZW4o
ZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIGhhbmRsZUNhbGxiYWNrKHZhbHVlLCB0
cnVlLCBjYWxsYmFjayk7CisgICAgICB9LCBmdW5jdGlvbihlcnJvcikgeworICAgICAgICByZXR1
cm4gaGFuZGxlQ2FsbGJhY2soZXJyb3IsIGZhbHNlLCBjYWxsYmFjayk7CisgICAgICB9LCBwcm9n
cmVzc0JhY2spOworICAgIH0KKyAgfTsKKworICAvL0Zhc3RlciwgbW9yZSBiYXNpYyB0aGFuIGFu
Z3VsYXIuYmluZCBodHRwOi8vanNwZXJmLmNvbS9hbmd1bGFyLWJpbmQtdnMtY3VzdG9tLXZzLW5h
dGl2ZQorICBmdW5jdGlvbiBzaW1wbGVCaW5kKGNvbnRleHQsIGZuKSB7CisgICAgcmV0dXJuIGZ1
bmN0aW9uKHZhbHVlKSB7CisgICAgICBmbi5jYWxsKGNvbnRleHQsIHZhbHVlKTsKKyAgICB9Owor
ICB9CisKKyAgZnVuY3Rpb24gcHJvY2Vzc1F1ZXVlKHN0YXRlKSB7CisgICAgdmFyIGZuLCBkZWZl
cnJlZCwgcGVuZGluZzsKKworICAgIHBlbmRpbmcgPSBzdGF0ZS5wZW5kaW5nOworICAgIHN0YXRl
LnByb2Nlc3NTY2hlZHVsZWQgPSBmYWxzZTsKKyAgICBzdGF0ZS5wZW5kaW5nID0gdW5kZWZpbmVk
OworICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHBlbmRpbmcubGVuZ3RoOyBpIDwgaWk7ICsraSkg
eworICAgICAgZGVmZXJyZWQgPSBwZW5kaW5nW2ldWzBdOworICAgICAgZm4gPSBwZW5kaW5nW2ld
W3N0YXRlLnN0YXR1c107CisgICAgICB0cnkgeworICAgICAgICBpZiAoaXNGdW5jdGlvbihmbikp
IHsKKyAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKGZuKHN0YXRlLnZhbHVlKSk7CisgICAgICAg
IH0gZWxzZSBpZiAoc3RhdGUuc3RhdHVzID09PSAxKSB7CisgICAgICAgICAgZGVmZXJyZWQucmVz
b2x2ZShzdGF0ZS52YWx1ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgZGVmZXJyZWQu
cmVqZWN0KHN0YXRlLnZhbHVlKTsKKyAgICAgICAgfQorICAgICAgfSBjYXRjaCAoZSkgeworICAg
ICAgICBkZWZlcnJlZC5yZWplY3QoZSk7CisgICAgICAgIGV4Y2VwdGlvbkhhbmRsZXIoZSk7Cisg
ICAgICB9CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gc2NoZWR1bGVQcm9jZXNzUXVldWUoc3Rh
dGUpIHsKKyAgICBpZiAoc3RhdGUucHJvY2Vzc1NjaGVkdWxlZCB8fCAhc3RhdGUucGVuZGluZykg
cmV0dXJuOworICAgIHN0YXRlLnByb2Nlc3NTY2hlZHVsZWQgPSB0cnVlOworICAgIG5leHRUaWNr
KGZ1bmN0aW9uKCkgeyBwcm9jZXNzUXVldWUoc3RhdGUpOyB9KTsKKyAgfQorCisgIGZ1bmN0aW9u
IERlZmVycmVkKCkgeworICAgIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKCk7CisgICAgLy9O
ZWNlc3NhcnkgdG8gc3VwcG9ydCB1bmJvdW5kIGV4ZWN1dGlvbiA6LworICAgIHRoaXMucmVzb2x2
ZSA9IHNpbXBsZUJpbmQodGhpcywgdGhpcy5yZXNvbHZlKTsKKyAgICB0aGlzLnJlamVjdCA9IHNp
bXBsZUJpbmQodGhpcywgdGhpcy5yZWplY3QpOworICAgIHRoaXMubm90aWZ5ID0gc2ltcGxlQmlu
ZCh0aGlzLCB0aGlzLm5vdGlmeSk7CisgIH0KKworICBEZWZlcnJlZC5wcm90b3R5cGUgPSB7Cisg
ICAgcmVzb2x2ZTogZnVuY3Rpb24odmFsKSB7CisgICAgICBpZiAodGhpcy5wcm9taXNlLiQkc3Rh
dGUuc3RhdHVzKSByZXR1cm47CisgICAgICBpZiAodmFsID09PSB0aGlzLnByb21pc2UpIHsKKyAg
ICAgICAgdGhpcy4kJHJlamVjdCgkcU1pbkVycigKKyAgICAgICAgICAncWN5Y2xlJywKKyAgICAg
ICAgICAiRXhwZWN0ZWQgcHJvbWlzZSB0byBiZSByZXNvbHZlZCB3aXRoIHZhbHVlIG90aGVyIHRo
YW4gaXRzZWxmICd7MH0nIiwKKyAgICAgICAgICB2YWwpKTsKKyAgICAgIH0gZWxzZSB7CisgICAg
ICAgIHRoaXMuJCRyZXNvbHZlKHZhbCk7CisgICAgICB9CisKKyAgICB9LAorCisgICAgJCRyZXNv
bHZlOiBmdW5jdGlvbih2YWwpIHsKKyAgICAgIHZhciB0aGVuLCBmbnM7CisKKyAgICAgIGZucyA9
IGNhbGxPbmNlKHRoaXMsIHRoaXMuJCRyZXNvbHZlLCB0aGlzLiQkcmVqZWN0KTsKKyAgICAgIHRy
eSB7CisgICAgICAgIGlmICgoaXNPYmplY3QodmFsKSB8fCBpc0Z1bmN0aW9uKHZhbCkpKSB0aGVu
ID0gdmFsICYmIHZhbC50aGVuOworICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGVuKSkgeworICAg
ICAgICAgIHRoaXMucHJvbWlzZS4kJHN0YXRlLnN0YXR1cyA9IC0xOworICAgICAgICAgIHRoZW4u
Y2FsbCh2YWwsIGZuc1swXSwgZm5zWzFdLCB0aGlzLm5vdGlmeSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgdGhpcy5wcm9taXNlLiQkc3RhdGUudmFsdWUgPSB2YWw7CisgICAgICAgICAg
dGhpcy5wcm9taXNlLiQkc3RhdGUuc3RhdHVzID0gMTsKKyAgICAgICAgICBzY2hlZHVsZVByb2Nl
c3NRdWV1ZSh0aGlzLnByb21pc2UuJCRzdGF0ZSk7CisgICAgICAgIH0KKyAgICAgIH0gY2F0Y2gg
KGUpIHsKKyAgICAgICAgZm5zWzFdKGUpOworICAgICAgICBleGNlcHRpb25IYW5kbGVyKGUpOwor
ICAgICAgfQorICAgIH0sCisKKyAgICByZWplY3Q6IGZ1bmN0aW9uKHJlYXNvbikgeworICAgICAg
aWYgKHRoaXMucHJvbWlzZS4kJHN0YXRlLnN0YXR1cykgcmV0dXJuOworICAgICAgdGhpcy4kJHJl
amVjdChyZWFzb24pOworICAgIH0sCisKKyAgICAkJHJlamVjdDogZnVuY3Rpb24ocmVhc29uKSB7
CisgICAgICB0aGlzLnByb21pc2UuJCRzdGF0ZS52YWx1ZSA9IHJlYXNvbjsKKyAgICAgIHRoaXMu
cHJvbWlzZS4kJHN0YXRlLnN0YXR1cyA9IDI7CisgICAgICBzY2hlZHVsZVByb2Nlc3NRdWV1ZSh0
aGlzLnByb21pc2UuJCRzdGF0ZSk7CisgICAgfSwKKworICAgIG5vdGlmeTogZnVuY3Rpb24ocHJv
Z3Jlc3MpIHsKKyAgICAgIHZhciBjYWxsYmFja3MgPSB0aGlzLnByb21pc2UuJCRzdGF0ZS5wZW5k
aW5nOworCisgICAgICBpZiAoKHRoaXMucHJvbWlzZS4kJHN0YXRlLnN0YXR1cyA8PSAwKSAmJiBj
YWxsYmFja3MgJiYgY2FsbGJhY2tzLmxlbmd0aCkgeworICAgICAgICBuZXh0VGljayhmdW5jdGlv
bigpIHsKKyAgICAgICAgICB2YXIgY2FsbGJhY2ssIHJlc3VsdDsKKyAgICAgICAgICBmb3IgKHZh
ciBpID0gMCwgaWkgPSBjYWxsYmFja3MubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAg
ICAgcmVzdWx0ID0gY2FsbGJhY2tzW2ldWzBdOworICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxs
YmFja3NbaV1bM107CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICByZXN1bHQubm90
aWZ5KGlzRnVuY3Rpb24oY2FsbGJhY2spID8gY2FsbGJhY2socHJvZ3Jlc3MpIDogcHJvZ3Jlc3Mp
OworICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICBleGNlcHRpb25IYW5k
bGVyKGUpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICB9
CisgICAgfQorICB9OworCisgIC8qKgorICAgKiBAbmdkb2MgbWV0aG9kCisgICAqIEBuYW1lICRx
I3JlamVjdAorICAgKiBAa2luZCBmdW5jdGlvbgorICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAg
ICogQ3JlYXRlcyBhIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCBhcyByZWplY3RlZCB3aXRoIHRo
ZSBzcGVjaWZpZWQgYHJlYXNvbmAuIFRoaXMgYXBpIHNob3VsZCBiZQorICAgKiB1c2VkIHRvIGZv
cndhcmQgcmVqZWN0aW9uIGluIGEgY2hhaW4gb2YgcHJvbWlzZXMuIElmIHlvdSBhcmUgZGVhbGlu
ZyB3aXRoIHRoZSBsYXN0IHByb21pc2UgaW4KKyAgICogYSBwcm9taXNlIGNoYWluLCB5b3UgZG9u
J3QgbmVlZCB0byB3b3JyeSBhYm91dCBpdC4KKyAgICoKKyAgICogV2hlbiBjb21wYXJpbmcgZGVm
ZXJyZWRzL3Byb21pc2VzIHRvIHRoZSBmYW1pbGlhciBiZWhhdmlvciBvZiB0cnkvY2F0Y2gvdGhy
b3csIHRoaW5rIG9mCisgICAqIGByZWplY3RgIGFzIHRoZSBgdGhyb3dgIGtleXdvcmQgaW4gSmF2
YVNjcmlwdC4gVGhpcyBhbHNvIG1lYW5zIHRoYXQgaWYgeW91ICJjYXRjaCIgYW4gZXJyb3Igdmlh
CisgICAqIGEgcHJvbWlzZSBlcnJvciBjYWxsYmFjayBhbmQgeW91IHdhbnQgdG8gZm9yd2FyZCB0
aGUgZXJyb3IgdG8gdGhlIHByb21pc2UgZGVyaXZlZCBmcm9tIHRoZQorICAgKiBjdXJyZW50IHBy
b21pc2UsIHlvdSBoYXZlIHRvICJyZXRocm93IiB0aGUgZXJyb3IgYnkgcmV0dXJuaW5nIGEgcmVq
ZWN0aW9uIGNvbnN0cnVjdGVkIHZpYQorICAgKiBgcmVqZWN0YC4KKyAgICoKKyAgICogYGBganMK
KyAgICogICBwcm9taXNlQiA9IHByb21pc2VBLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7CisgICAq
ICAgICAvLyBzdWNjZXNzOiBkbyBzb21ldGhpbmcgYW5kIHJlc29sdmUgcHJvbWlzZUIKKyAgICog
ICAgIC8vICAgICAgICAgIHdpdGggdGhlIG9sZCBvciBhIG5ldyByZXN1bHQKKyAgICogICAgIHJl
dHVybiByZXN1bHQ7CisgICAqICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7CisgICAqICAgICAvLyBl
cnJvcjogaGFuZGxlIHRoZSBlcnJvciBpZiBwb3NzaWJsZSBhbmQKKyAgICogICAgIC8vICAgICAg
ICByZXNvbHZlIHByb21pc2VCIHdpdGggbmV3UHJvbWlzZU9yVmFsdWUsCisgICAqICAgICAvLyAg
ICAgICAgb3RoZXJ3aXNlIGZvcndhcmQgdGhlIHJlamVjdGlvbiB0byBwcm9taXNlQgorICAgKiAg
ICAgaWYgKGNhbkhhbmRsZShyZWFzb24pKSB7CisgICAqICAgICAgLy8gaGFuZGxlIHRoZSBlcnJv
ciBhbmQgcmVjb3ZlcgorICAgKiAgICAgIHJldHVybiBuZXdQcm9taXNlT3JWYWx1ZTsKKyAgICog
ICAgIH0KKyAgICogICAgIHJldHVybiAkcS5yZWplY3QocmVhc29uKTsKKyAgICogICB9KTsKKyAg
ICogYGBgCisgICAqCisgICAqIEBwYXJhbSB7Kn0gcmVhc29uIENvbnN0YW50LCBtZXNzYWdlLCBl
eGNlcHRpb24gb3IgYW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVqZWN0aW9uIHJlYXNvbi4K
KyAgICogQHJldHVybnMge1Byb21pc2V9IFJldHVybnMgYSBwcm9taXNlIHRoYXQgd2FzIGFscmVh
ZHkgcmVzb2x2ZWQgYXMgcmVqZWN0ZWQgd2l0aCB0aGUgYHJlYXNvbmAuCisgICAqLworICB2YXIg
cmVqZWN0ID0gZnVuY3Rpb24ocmVhc29uKSB7CisgICAgdmFyIHJlc3VsdCA9IG5ldyBEZWZlcnJl
ZCgpOworICAgIHJlc3VsdC5yZWplY3QocmVhc29uKTsKKyAgICByZXR1cm4gcmVzdWx0LnByb21p
c2U7CisgIH07CisKKyAgdmFyIG1ha2VQcm9taXNlID0gZnVuY3Rpb24gbWFrZVByb21pc2UodmFs
dWUsIHJlc29sdmVkKSB7CisgICAgdmFyIHJlc3VsdCA9IG5ldyBEZWZlcnJlZCgpOworICAgIGlm
IChyZXNvbHZlZCkgeworICAgICAgcmVzdWx0LnJlc29sdmUodmFsdWUpOworICAgIH0gZWxzZSB7
CisgICAgICByZXN1bHQucmVqZWN0KHZhbHVlKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC5w
cm9taXNlOworICB9OworCisgIHZhciBoYW5kbGVDYWxsYmFjayA9IGZ1bmN0aW9uIGhhbmRsZUNh
bGxiYWNrKHZhbHVlLCBpc1Jlc29sdmVkLCBjYWxsYmFjaykgeworICAgIHZhciBjYWxsYmFja091
dHB1dCA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkg
Y2FsbGJhY2tPdXRwdXQgPSBjYWxsYmFjaygpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHJl
dHVybiBtYWtlUHJvbWlzZShlLCBmYWxzZSk7CisgICAgfQorICAgIGlmIChpc1Byb21pc2VMaWtl
KGNhbGxiYWNrT3V0cHV0KSkgeworICAgICAgcmV0dXJuIGNhbGxiYWNrT3V0cHV0LnRoZW4oZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiBtYWtlUHJvbWlzZSh2YWx1ZSwgaXNSZXNvbHZlZCk7
CisgICAgICB9LCBmdW5jdGlvbihlcnJvcikgeworICAgICAgICByZXR1cm4gbWFrZVByb21pc2Uo
ZXJyb3IsIGZhbHNlKTsKKyAgICAgIH0pOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gbWFr
ZVByb21pc2UodmFsdWUsIGlzUmVzb2x2ZWQpOworICAgIH0KKyAgfTsKKworICAvKioKKyAgICog
QG5nZG9jIG1ldGhvZAorICAgKiBAbmFtZSAkcSN3aGVuCisgICAqIEBraW5kIGZ1bmN0aW9uCisg
ICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBXcmFwcyBhbiBvYmplY3QgdGhhdCBtaWdodCBi
ZSBhIHZhbHVlIG9yIGEgKDNyZCBwYXJ0eSkgdGhlbi1hYmxlIHByb21pc2UgaW50byBhICRxIHBy
b21pc2UuCisgICAqIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91IGFyZSBkZWFsaW5nIHdpdGggYW4g
b2JqZWN0IHRoYXQgbWlnaHQgb3IgbWlnaHQgbm90IGJlIGEgcHJvbWlzZSwgb3IgaWYKKyAgICog
dGhlIHByb21pc2UgY29tZXMgZnJvbSBhIHNvdXJjZSB0aGF0IGNhbid0IGJlIHRydXN0ZWQuCisg
ICAqCisgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgb3IgYSBwcm9taXNlCisgICAqIEByZXR1
cm5zIHtQcm9taXNlfSBSZXR1cm5zIGEgcHJvbWlzZSBvZiB0aGUgcGFzc2VkIHZhbHVlIG9yIHBy
b21pc2UKKyAgICovCisKKworICB2YXIgd2hlbiA9IGZ1bmN0aW9uKHZhbHVlLCBjYWxsYmFjaywg
ZXJyYmFjaywgcHJvZ3Jlc3NCYWNrKSB7CisgICAgdmFyIHJlc3VsdCA9IG5ldyBEZWZlcnJlZCgp
OworICAgIHJlc3VsdC5yZXNvbHZlKHZhbHVlKTsKKyAgICByZXR1cm4gcmVzdWx0LnByb21pc2Uu
dGhlbihjYWxsYmFjaywgZXJyYmFjaywgcHJvZ3Jlc3NCYWNrKTsKKyAgfTsKKworICAvKioKKyAg
ICogQG5nZG9jIG1ldGhvZAorICAgKiBAbmFtZSAkcSNyZXNvbHZlCisgICAqIEBraW5kIGZ1bmN0
aW9uCisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBBbGlhcyBvZiB7QGxpbmsgbmcuJHEj
d2hlbiB3aGVufSB0byBtYWludGFpbiBuYW1pbmcgY29uc2lzdGVuY3kgd2l0aCBFUzYuCisgICAq
CisgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgb3IgYSBwcm9taXNlCisgICAqIEByZXR1cm5z
IHtQcm9taXNlfSBSZXR1cm5zIGEgcHJvbWlzZSBvZiB0aGUgcGFzc2VkIHZhbHVlIG9yIHByb21p
c2UKKyAgICovCisgIHZhciByZXNvbHZlID0gd2hlbjsKKworICAvKioKKyAgICogQG5nZG9jIG1l
dGhvZAorICAgKiBAbmFtZSAkcSNhbGwKKyAgICogQGtpbmQgZnVuY3Rpb24KKyAgICoKKyAgICog
QGRlc2NyaXB0aW9uCisgICAqIENvbWJpbmVzIG11bHRpcGxlIHByb21pc2VzIGludG8gYSBzaW5n
bGUgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gYWxsIG9mIHRoZSBpbnB1dAorICAgKiBw
cm9taXNlcyBhcmUgcmVzb2x2ZWQuCisgICAqCisgICAqIEBwYXJhbSB7QXJyYXkuPFByb21pc2U+
fE9iamVjdC48UHJvbWlzZT59IHByb21pc2VzIEFuIGFycmF5IG9yIGhhc2ggb2YgcHJvbWlzZXMu
CisgICAqIEByZXR1cm5zIHtQcm9taXNlfSBSZXR1cm5zIGEgc2luZ2xlIHByb21pc2UgdGhhdCB3
aWxsIGJlIHJlc29sdmVkIHdpdGggYW4gYXJyYXkvaGFzaCBvZiB2YWx1ZXMsCisgICAqICAgZWFj
aCB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9taXNlIGF0IHRoZSBzYW1lIGluZGV4L2tl
eSBpbiB0aGUgYHByb21pc2VzYCBhcnJheS9oYXNoLgorICAgKiAgIElmIGFueSBvZiB0aGUgcHJv
bWlzZXMgaXMgcmVzb2x2ZWQgd2l0aCBhIHJlamVjdGlvbiwgdGhpcyByZXN1bHRpbmcgcHJvbWlz
ZSB3aWxsIGJlIHJlamVjdGVkCisgICAqICAgd2l0aCB0aGUgc2FtZSByZWplY3Rpb24gdmFsdWUu
CisgICAqLworCisgIGZ1bmN0aW9uIGFsbChwcm9taXNlcykgeworICAgIHZhciBkZWZlcnJlZCA9
IG5ldyBEZWZlcnJlZCgpLAorICAgICAgICBjb3VudGVyID0gMCwKKyAgICAgICAgcmVzdWx0cyA9
IGlzQXJyYXkocHJvbWlzZXMpID8gW10gOiB7fTsKKworICAgIGZvckVhY2gocHJvbWlzZXMsIGZ1
bmN0aW9uKHByb21pc2UsIGtleSkgeworICAgICAgY291bnRlcisrOworICAgICAgd2hlbihwcm9t
aXNlKS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAgIGlmIChyZXN1bHRzLmhhc093blBy
b3BlcnR5KGtleSkpIHJldHVybjsKKyAgICAgICAgcmVzdWx0c1trZXldID0gdmFsdWU7CisgICAg
ICAgIGlmICghKC0tY291bnRlcikpIGRlZmVycmVkLnJlc29sdmUocmVzdWx0cyk7CisgICAgICB9
LCBmdW5jdGlvbihyZWFzb24pIHsKKyAgICAgICAgaWYgKHJlc3VsdHMuaGFzT3duUHJvcGVydHko
a2V5KSkgcmV0dXJuOworICAgICAgICBkZWZlcnJlZC5yZWplY3QocmVhc29uKTsKKyAgICAgIH0p
OworICAgIH0pOworCisgICAgaWYgKGNvdW50ZXIgPT09IDApIHsKKyAgICAgIGRlZmVycmVkLnJl
c29sdmUocmVzdWx0cyk7CisgICAgfQorCisgICAgcmV0dXJuIGRlZmVycmVkLnByb21pc2U7Cisg
IH0KKworICB2YXIgJFEgPSBmdW5jdGlvbiBRKHJlc29sdmVyKSB7CisgICAgaWYgKCFpc0Z1bmN0
aW9uKHJlc29sdmVyKSkgeworICAgICAgdGhyb3cgJHFNaW5FcnIoJ25vcnNsdnInLCAiRXhwZWN0
ZWQgcmVzb2x2ZXJGbiwgZ290ICd7MH0nIiwgcmVzb2x2ZXIpOworICAgIH0KKworICAgIGlmICgh
KHRoaXMgaW5zdGFuY2VvZiBRKSkgeworICAgICAgLy8gTW9yZSB1c2VmdWwgd2hlbiAkUSBpcyB0
aGUgUHJvbWlzZSBpdHNlbGYuCisgICAgICByZXR1cm4gbmV3IFEocmVzb2x2ZXIpOworICAgIH0K
KworICAgIHZhciBkZWZlcnJlZCA9IG5ldyBEZWZlcnJlZCgpOworCisgICAgZnVuY3Rpb24gcmVz
b2x2ZUZuKHZhbHVlKSB7CisgICAgICBkZWZlcnJlZC5yZXNvbHZlKHZhbHVlKTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiByZWplY3RGbihyZWFzb24pIHsKKyAgICAgIGRlZmVycmVkLnJlamVjdChy
ZWFzb24pOworICAgIH0KKworICAgIHJlc29sdmVyKHJlc29sdmVGbiwgcmVqZWN0Rm4pOworCisg
ICAgcmV0dXJuIGRlZmVycmVkLnByb21pc2U7CisgIH07CisKKyAgJFEuZGVmZXIgPSBkZWZlcjsK
KyAgJFEucmVqZWN0ID0gcmVqZWN0OworICAkUS53aGVuID0gd2hlbjsKKyAgJFEucmVzb2x2ZSA9
IHJlc29sdmU7CisgICRRLmFsbCA9IGFsbDsKKworICByZXR1cm4gJFE7Cit9CisKK2Z1bmN0aW9u
ICQkUkFGUHJvdmlkZXIoKSB7IC8vckFGCisgIHRoaXMuJGdldCA9IFsnJHdpbmRvdycsICckdGlt
ZW91dCcsIGZ1bmN0aW9uKCR3aW5kb3csICR0aW1lb3V0KSB7CisgICAgdmFyIHJlcXVlc3RBbmlt
YXRpb25GcmFtZSA9ICR3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICR3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1l
OworCisgICAgdmFyIGNhbmNlbEFuaW1hdGlvbkZyYW1lID0gJHdpbmRvdy5jYW5jZWxBbmltYXRp
b25GcmFtZSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR3aW5kb3cud2Via2l0
Q2FuY2VsQW5pbWF0aW9uRnJhbWUgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk
d2luZG93LndlYmtpdENhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZTsKKworICAgIHZhciByYWZT
dXBwb3J0ZWQgPSAhIXJlcXVlc3RBbmltYXRpb25GcmFtZTsKKyAgICB2YXIgcmFmRm4gPSByYWZT
dXBwb3J0ZWQKKyAgICAgID8gZnVuY3Rpb24oZm4pIHsKKyAgICAgICAgICB2YXIgaWQgPSByZXF1
ZXN0QW5pbWF0aW9uRnJhbWUoZm4pOworICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKTsKKyAgICAgICAgICB9OworICAgICAg
ICB9CisgICAgICA6IGZ1bmN0aW9uKGZuKSB7CisgICAgICAgICAgdmFyIHRpbWVyID0gJHRpbWVv
dXQoZm4sIDE2LjY2LCBmYWxzZSk7IC8vIDEwMDAgLyA2MCA9IDE2LjY2NgorICAgICAgICAgIHJl
dHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICR0aW1lb3V0LmNhbmNlbCh0aW1lcik7Cisg
ICAgICAgICAgfTsKKyAgICAgICAgfTsKKworICAgIHF1ZXVlRm4uc3VwcG9ydGVkID0gcmFmU3Vw
cG9ydGVkOworCisgICAgdmFyIGNhbmNlbExhc3RSQUY7CisgICAgdmFyIHRhc2tDb3VudCA9IDA7
CisgICAgdmFyIHRhc2tRdWV1ZSA9IFtdOworICAgIHJldHVybiBxdWV1ZUZuOworCisgICAgZnVu
Y3Rpb24gZmx1c2goKSB7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhc2tRdWV1ZS5sZW5n
dGg7IGkrKykgeworICAgICAgICB2YXIgdGFzayA9IHRhc2tRdWV1ZVtpXTsKKyAgICAgICAgaWYg
KHRhc2spIHsKKyAgICAgICAgICB0YXNrUXVldWVbaV0gPSBudWxsOworICAgICAgICAgIHRhc2so
KTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgdGFza0NvdW50ID0gdGFza1F1ZXVlLmxlbmd0
aCA9IDA7CisgICAgfQorCisgICAgZnVuY3Rpb24gcXVldWVGbihhc3luY0ZuKSB7CisgICAgICB2
YXIgaW5kZXggPSB0YXNrUXVldWUubGVuZ3RoOworCisgICAgICB0YXNrQ291bnQrKzsKKyAgICAg
IHRhc2tRdWV1ZS5wdXNoKGFzeW5jRm4pOworCisgICAgICBpZiAoaW5kZXggPT09IDApIHsKKyAg
ICAgICAgY2FuY2VsTGFzdFJBRiA9IHJhZkZuKGZsdXNoKTsKKyAgICAgIH0KKworICAgICAgcmV0
dXJuIGZ1bmN0aW9uIGNhbmNlbFF1ZXVlRm4oKSB7CisgICAgICAgIGlmIChpbmRleCA+PSAwKSB7
CisgICAgICAgICAgdGFza1F1ZXVlW2luZGV4XSA9IG51bGw7CisgICAgICAgICAgaW5kZXggPSBu
dWxsOworCisgICAgICAgICAgaWYgKC0tdGFza0NvdW50ID09PSAwICYmIGNhbmNlbExhc3RSQUYp
IHsKKyAgICAgICAgICAgIGNhbmNlbExhc3RSQUYoKTsKKyAgICAgICAgICAgIGNhbmNlbExhc3RS
QUYgPSBudWxsOworICAgICAgICAgICAgdGFza1F1ZXVlLmxlbmd0aCA9IDA7CisgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICB9OworICAgIH0KKyAgfV07Cit9CisKKy8qKgorICogREVTSUdO
IE5PVEVTCisgKgorICogVGhlIGRlc2lnbiBkZWNpc2lvbnMgYmVoaW5kIHRoZSBzY29wZSBhcmUg
aGVhdmlseSBmYXZvcmVkIGZvciBzcGVlZCBhbmQgbWVtb3J5IGNvbnN1bXB0aW9uLgorICoKKyAq
IFRoZSB0eXBpY2FsIHVzZSBvZiBzY29wZSBpcyB0byB3YXRjaCB0aGUgZXhwcmVzc2lvbnMsIHdo
aWNoIG1vc3Qgb2YgdGhlIHRpbWUgcmV0dXJuIHRoZSBzYW1lCisgKiB2YWx1ZSBhcyBsYXN0IHRp
bWUgc28gd2Ugb3B0aW1pemUgdGhlIG9wZXJhdGlvbi4KKyAqCisgKiBDbG9zdXJlcyBjb25zdHJ1
Y3Rpb24gaXMgZXhwZW5zaXZlIGluIHRlcm1zIG9mIHNwZWVkIGFzIHdlbGwgYXMgbWVtb3J5Ogor
ICogICAtIE5vIGNsb3N1cmVzLCBpbnN0ZWFkIHVzZSBwcm90b3R5cGljYWwgaW5oZXJpdGFuY2Ug
Zm9yIEFQSQorICogICAtIEludGVybmFsIHN0YXRlIG5lZWRzIHRvIGJlIHN0b3JlZCBvbiBzY29w
ZSBkaXJlY3RseSwgd2hpY2ggbWVhbnMgdGhhdCBwcml2YXRlIHN0YXRlIGlzCisgKiAgICAgZXhw
b3NlZCBhcyAkJF9fX18gcHJvcGVydGllcworICoKKyAqIExvb3Agb3BlcmF0aW9ucyBhcmUgb3B0
aW1pemVkIGJ5IHVzaW5nIHdoaWxlKGNvdW50LS0pIHsgLi4uIH0KKyAqICAgLSB0aGlzIG1lYW5z
IHRoYXQgaW4gb3JkZXIgdG8ga2VlcCB0aGUgc2FtZSBvcmRlciBvZiBleGVjdXRpb24gYXMgYWRk
aXRpb24gd2UgaGF2ZSB0byBhZGQKKyAqICAgICBpdGVtcyB0byB0aGUgYXJyYXkgYXQgdGhlIGJl
Z2lubmluZyAodW5zaGlmdCkgaW5zdGVhZCBvZiBhdCB0aGUgZW5kIChwdXNoKQorICoKKyAqIENo
aWxkIHNjb3BlcyBhcmUgY3JlYXRlZCBhbmQgcmVtb3ZlZCBvZnRlbgorICogICAtIFVzaW5nIGFu
IGFycmF5IHdvdWxkIGJlIHNsb3cgc2luY2UgaW5zZXJ0cyBpbiBtaWRkbGUgYXJlIGV4cGVuc2l2
ZSBzbyB3ZSB1c2UgbGlua2VkIGxpc3QKKyAqCisgKiBUaGVyZSBhcmUgZmV3IHdhdGNoZXMgdGhl
biBhIGxvdCBvZiBvYnNlcnZlcnMuIFRoaXMgaXMgd2h5IHlvdSBkb24ndCB3YW50IHRoZSBvYnNl
cnZlciB0byBiZQorICogaW1wbGVtZW50ZWQgaW4gdGhlIHNhbWUgd2F5IGFzIHdhdGNoLiBXYXRj
aCByZXF1aXJlcyByZXR1cm4gb2YgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gd2hpY2gKKyAqIGFy
ZSBleHBlbnNpdmUgdG8gY29uc3RydWN0LgorICovCisKKworLyoqCisgKiBAbmdkb2MgcHJvdmlk
ZXIKKyAqIEBuYW1lICRyb290U2NvcGVQcm92aWRlcgorICogQGRlc2NyaXB0aW9uCisgKgorICog
UHJvdmlkZXIgZm9yIHRoZSAkcm9vdFNjb3BlIHNlcnZpY2UuCisgKi8KKworLyoqCisgKiBAbmdk
b2MgbWV0aG9kCisgKiBAbmFtZSAkcm9vdFNjb3BlUHJvdmlkZXIjZGlnZXN0VHRsCisgKiBAZGVz
Y3JpcHRpb24KKyAqCisgKiBTZXRzIHRoZSBudW1iZXIgb2YgYCRkaWdlc3RgIGl0ZXJhdGlvbnMg
dGhlIHNjb3BlIHNob3VsZCBhdHRlbXB0IHRvIGV4ZWN1dGUgYmVmb3JlIGdpdmluZyB1cCBhbmQK
KyAqIGFzc3VtaW5nIHRoYXQgdGhlIG1vZGVsIGlzIHVuc3RhYmxlLgorICoKKyAqIFRoZSBjdXJy
ZW50IGRlZmF1bHQgaXMgMTAgaXRlcmF0aW9ucy4KKyAqCisgKiBJbiBjb21wbGV4IGFwcGxpY2F0
aW9ucyBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGAkd2F0Y2hg
cyB3aWxsIHJlc3VsdCBpbgorICogc2V2ZXJhbCBkaWdlc3QgaXRlcmF0aW9ucy4gSG93ZXZlciBp
ZiBhbiBhcHBsaWNhdGlvbiBuZWVkcyBtb3JlIHRoYW4gdGhlIGRlZmF1bHQgMTAgZGlnZXN0Cisg
KiBpdGVyYXRpb25zIGZvciBpdHMgbW9kZWwgdG8gc3RhYmlsaXplIHRoZW4geW91IHNob3VsZCBp
bnZlc3RpZ2F0ZSB3aGF0IGlzIGNhdXNpbmcgdGhlIG1vZGVsIHRvCisgKiBjb250aW51b3VzbHkg
Y2hhbmdlIGR1cmluZyB0aGUgZGlnZXN0LgorICoKKyAqIEluY3JlYXNpbmcgdGhlIFRUTCBjb3Vs
ZCBoYXZlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgc28geW91IHNob3VsZCBub3QgY2hhbmdl
IGl0IHdpdGhvdXQKKyAqIHByb3BlciBqdXN0aWZpY2F0aW9uLgorICoKKyAqIEBwYXJhbSB7bnVt
YmVyfSBsaW1pdCBUaGUgbnVtYmVyIG9mIGRpZ2VzdCBpdGVyYXRpb25zLgorICovCisKKworLyoq
CisgKiBAbmdkb2Mgc2VydmljZQorICogQG5hbWUgJHJvb3RTY29wZQorICogQGRlc2NyaXB0aW9u
CisgKgorICogRXZlcnkgYXBwbGljYXRpb24gaGFzIGEgc2luZ2xlIHJvb3Qge0BsaW5rIG5nLiRy
b290U2NvcGUuU2NvcGUgc2NvcGV9LgorICogQWxsIG90aGVyIHNjb3BlcyBhcmUgZGVzY2VuZGFu
dCBzY29wZXMgb2YgdGhlIHJvb3Qgc2NvcGUuIFNjb3BlcyBwcm92aWRlIHNlcGFyYXRpb24KKyAq
IGJldHdlZW4gdGhlIG1vZGVsIGFuZCB0aGUgdmlldywgdmlhIGEgbWVjaGFuaXNtIGZvciB3YXRj
aGluZyB0aGUgbW9kZWwgZm9yIGNoYW5nZXMuCisgKiBUaGV5IGFsc28gcHJvdmlkZSBhbiBldmVu
dCBlbWlzc2lvbi9icm9hZGNhc3QgYW5kIHN1YnNjcmlwdGlvbiBmYWNpbGl0eS4gU2VlIHRoZQor
ICoge0BsaW5rIGd1aWRlL3Njb3BlIGRldmVsb3BlciBndWlkZSBvbiBzY29wZXN9LgorICovCitm
dW5jdGlvbiAkUm9vdFNjb3BlUHJvdmlkZXIoKSB7CisgIHZhciBUVEwgPSAxMDsKKyAgdmFyICRy
b290U2NvcGVNaW5FcnIgPSBtaW5FcnIoJyRyb290U2NvcGUnKTsKKyAgdmFyIGxhc3REaXJ0eVdh
dGNoID0gbnVsbDsKKyAgdmFyIGFwcGx5QXN5bmNJZCA9IG51bGw7CisKKyAgdGhpcy5kaWdlc3RU
dGwgPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIGlmIChhcmd1bWVudHMubGVuZ3RoKSB7CisgICAg
ICBUVEwgPSB2YWx1ZTsKKyAgICB9CisgICAgcmV0dXJuIFRUTDsKKyAgfTsKKworICBmdW5jdGlv
biBjcmVhdGVDaGlsZFNjb3BlQ2xhc3MocGFyZW50KSB7CisgICAgZnVuY3Rpb24gQ2hpbGRTY29w
ZSgpIHsKKyAgICAgIHRoaXMuJCR3YXRjaGVycyA9IHRoaXMuJCRuZXh0U2libGluZyA9CisgICAg
ICAgICAgdGhpcy4kJGNoaWxkSGVhZCA9IHRoaXMuJCRjaGlsZFRhaWwgPSBudWxsOworICAgICAg
dGhpcy4kJGxpc3RlbmVycyA9IHt9OworICAgICAgdGhpcy4kJGxpc3RlbmVyQ291bnQgPSB7fTsK
KyAgICAgIHRoaXMuJCR3YXRjaGVyc0NvdW50ID0gMDsKKyAgICAgIHRoaXMuJGlkID0gbmV4dFVp
ZCgpOworICAgICAgdGhpcy4kJENoaWxkU2NvcGUgPSBudWxsOworICAgIH0KKyAgICBDaGlsZFNj
b3BlLnByb3RvdHlwZSA9IHBhcmVudDsKKyAgICByZXR1cm4gQ2hpbGRTY29wZTsKKyAgfQorCisg
IHRoaXMuJGdldCA9IFsnJGluamVjdG9yJywgJyRleGNlcHRpb25IYW5kbGVyJywgJyRwYXJzZScs
ICckYnJvd3NlcicsCisgICAgICBmdW5jdGlvbigkaW5qZWN0b3IsICRleGNlcHRpb25IYW5kbGVy
LCAkcGFyc2UsICRicm93c2VyKSB7CisKKyAgICBmdW5jdGlvbiBkZXN0cm95Q2hpbGRTY29wZSgk
ZXZlbnQpIHsKKyAgICAgICAgJGV2ZW50LmN1cnJlbnRTY29wZS4kJGRlc3Ryb3llZCA9IHRydWU7
CisgICAgfQorCisgICAgLyoqCisgICAgICogQG5nZG9jIHR5cGUKKyAgICAgKiBAbmFtZSAkcm9v
dFNjb3BlLlNjb3BlCisgICAgICoKKyAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgKiBBIHJvb3Qg
c2NvcGUgY2FuIGJlIHJldHJpZXZlZCB1c2luZyB0aGUge0BsaW5rIG5nLiRyb290U2NvcGUgJHJv
b3RTY29wZX0ga2V5IGZyb20gdGhlCisgICAgICoge0BsaW5rIGF1dG8uJGluamVjdG9yICRpbmpl
Y3Rvcn0uIENoaWxkIHNjb3BlcyBhcmUgY3JlYXRlZCB1c2luZyB0aGUKKyAgICAgKiB7QGxpbmsg
bmcuJHJvb3RTY29wZS5TY29wZSMkbmV3ICRuZXcoKX0gbWV0aG9kLiAoTW9zdCBzY29wZXMgYXJl
IGNyZWF0ZWQgYXV0b21hdGljYWxseSB3aGVuCisgICAgICogY29tcGlsZWQgSFRNTCB0ZW1wbGF0
ZSBpcyBleGVjdXRlZC4pCisgICAgICoKKyAgICAgKiBIZXJlIGlzIGEgc2ltcGxlIHNjb3BlIHNu
aXBwZXQgdG8gc2hvdyBob3cgeW91IGNhbiBpbnRlcmFjdCB3aXRoIHRoZSBzY29wZS4KKyAgICAg
KiBgYGBodG1sCisgICAgICogPGZpbGUgc3JjPSIuL3Rlc3Qvbmcvcm9vdFNjb3BlU3BlYy5qcyIg
dGFnPSJkb2NzMSIgLz4KKyAgICAgKiBgYGAKKyAgICAgKgorICAgICAqICMgSW5oZXJpdGFuY2UK
KyAgICAgKiBBIHNjb3BlIGNhbiBpbmhlcml0IGZyb20gYSBwYXJlbnQgc2NvcGUsIGFzIGluIHRo
aXMgZXhhbXBsZToKKyAgICAgKiBgYGBqcworICAgICAgICAgdmFyIHBhcmVudCA9ICRyb290U2Nv
cGU7CisgICAgICAgICB2YXIgY2hpbGQgPSBwYXJlbnQuJG5ldygpOworCisgICAgICAgICBwYXJl
bnQuc2FsdXRhdGlvbiA9ICJIZWxsbyI7CisgICAgICAgICBleHBlY3QoY2hpbGQuc2FsdXRhdGlv
bikudG9FcXVhbCgnSGVsbG8nKTsKKworICAgICAgICAgY2hpbGQuc2FsdXRhdGlvbiA9ICJXZWxj
b21lIjsKKyAgICAgICAgIGV4cGVjdChjaGlsZC5zYWx1dGF0aW9uKS50b0VxdWFsKCdXZWxjb21l
Jyk7CisgICAgICAgICBleHBlY3QocGFyZW50LnNhbHV0YXRpb24pLnRvRXF1YWwoJ0hlbGxvJyk7
CisgICAgICogYGBgCisgICAgICoKKyAgICAgKiBXaGVuIGludGVyYWN0aW5nIHdpdGggYFNjb3Bl
YCBpbiB0ZXN0cywgYWRkaXRpb25hbCBoZWxwZXIgbWV0aG9kcyBhcmUgYXZhaWxhYmxlIG9uIHRo
ZQorICAgICAqIGluc3RhbmNlcyBvZiBgU2NvcGVgIHR5cGUuIFNlZSB7QGxpbmsgbmdNb2NrLiRy
b290U2NvcGUuU2NvcGUgbmdNb2NrIFNjb3BlfSBmb3IgYWRkaXRpb25hbAorICAgICAqIGRldGFp
bHMuCisgICAgICoKKyAgICAgKgorICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsIGZ1bmN0
aW9uKCk+PX0gcHJvdmlkZXJzIE1hcCBvZiBzZXJ2aWNlIGZhY3Rvcnkgd2hpY2ggbmVlZCB0byBi
ZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQg
Zm9yIHRoZSBjdXJyZW50IHNjb3BlLiBEZWZhdWx0cyB0byB7QGxpbmsgbmd9LgorICAgICAqIEBw
YXJhbSB7T2JqZWN0LjxzdHJpbmcsICo+PX0gaW5zdGFuY2VDYWNoZSBQcm92aWRlcyBwcmUtaW5z
dGFudGlhdGVkIHNlcnZpY2VzIHdoaWNoIHNob3VsZAorICAgICAqICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kL292ZXJyaWRlIHNlcnZpY2VzIHByb3ZpZGVkIGJ5IGBwcm92aWRl
cnNgLiBUaGlzIGlzIGhhbmR5CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
aGVuIHVuaXQtdGVzdGluZyBhbmQgaGF2aW5nIHRoZSBuZWVkIHRvIG92ZXJyaWRlIGEgZGVmYXVs
dAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS4KKyAgICAgKiBA
cmV0dXJucyB7T2JqZWN0fSBOZXdseSBjcmVhdGVkIHNjb3BlLgorICAgICAqCisgICAgICovCisg
ICAgZnVuY3Rpb24gU2NvcGUoKSB7CisgICAgICB0aGlzLiRpZCA9IG5leHRVaWQoKTsKKyAgICAg
IHRoaXMuJCRwaGFzZSA9IHRoaXMuJHBhcmVudCA9IHRoaXMuJCR3YXRjaGVycyA9CisgICAgICAg
ICAgICAgICAgICAgICB0aGlzLiQkbmV4dFNpYmxpbmcgPSB0aGlzLiQkcHJldlNpYmxpbmcgPQor
ICAgICAgICAgICAgICAgICAgICAgdGhpcy4kJGNoaWxkSGVhZCA9IHRoaXMuJCRjaGlsZFRhaWwg
PSBudWxsOworICAgICAgdGhpcy4kcm9vdCA9IHRoaXM7CisgICAgICB0aGlzLiQkZGVzdHJveWVk
ID0gZmFsc2U7CisgICAgICB0aGlzLiQkbGlzdGVuZXJzID0ge307CisgICAgICB0aGlzLiQkbGlz
dGVuZXJDb3VudCA9IHt9OworICAgICAgdGhpcy4kJHdhdGNoZXJzQ291bnQgPSAwOworICAgICAg
dGhpcy4kJGlzb2xhdGVCaW5kaW5ncyA9IG51bGw7CisgICAgfQorCisgICAgLyoqCisgICAgICog
QG5nZG9jIHByb3BlcnR5CisgICAgICogQG5hbWUgJHJvb3RTY29wZS5TY29wZSMkaWQKKyAgICAg
KgorICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAqIFVuaXF1ZSBzY29wZSBJRCAobW9ub3Rvbmlj
YWxseSBpbmNyZWFzaW5nKSB1c2VmdWwgZm9yIGRlYnVnZ2luZy4KKyAgICAgKi8KKworICAgICAv
KioKKyAgICAgICogQG5nZG9jIHByb3BlcnR5CisgICAgICAqIEBuYW1lICRyb290U2NvcGUuU2Nv
cGUjJHBhcmVudAorICAgICAgKgorICAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgICogUmVmZXJl
bmNlIHRvIHRoZSBwYXJlbnQgc2NvcGUuCisgICAgICAqLworCisgICAgICAvKioKKyAgICAgICAq
IEBuZ2RvYyBwcm9wZXJ0eQorICAgICAgICogQG5hbWUgJHJvb3RTY29wZS5TY29wZSMkcm9vdAor
ICAgICAgICoKKyAgICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAgICogUmVmZXJlbmNlIHRvIHRo
ZSByb290IHNjb3BlLgorICAgICAgICovCisKKyAgICBTY29wZS5wcm90b3R5cGUgPSB7CisgICAg
ICBjb25zdHJ1Y3RvcjogU2NvcGUsCisgICAgICAvKioKKyAgICAgICAqIEBuZ2RvYyBtZXRob2QK
KyAgICAgICAqIEBuYW1lICRyb290U2NvcGUuU2NvcGUjJG5ldworICAgICAgICogQGtpbmQgZnVu
Y3Rpb24KKyAgICAgICAqCisgICAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgICAqIENyZWF0ZXMg
YSBuZXcgY2hpbGQge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUgc2NvcGV9LgorICAgICAgICoK
KyAgICAgICAqIFRoZSBwYXJlbnQgc2NvcGUgd2lsbCBwcm9wYWdhdGUgdGhlIHtAbGluayBuZy4k
cm9vdFNjb3BlLlNjb3BlIyRkaWdlc3QgJGRpZ2VzdCgpfSBldmVudC4KKyAgICAgICAqIFRoZSBz
Y29wZSBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBzY29wZSBoaWVyYXJjaHkgdXNpbmcge0BsaW5r
IG5nLiRyb290U2NvcGUuU2NvcGUjJGRlc3Ryb3kgJGRlc3Ryb3koKX0uCisgICAgICAgKgorICAg
ICAgICoge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGRlc3Ryb3kgJGRlc3Ryb3koKX0gbXVz
dCBiZSBjYWxsZWQgb24gYSBzY29wZSB3aGVuIGl0IGlzCisgICAgICAgKiBkZXNpcmVkIGZvciB0
aGUgc2NvcGUgYW5kIGl0cyBjaGlsZCBzY29wZXMgdG8gYmUgcGVybWFuZW50bHkgZGV0YWNoZWQg
ZnJvbSB0aGUgcGFyZW50IGFuZAorICAgICAgICogdGh1cyBzdG9wIHBhcnRpY2lwYXRpbmcgaW4g
bW9kZWwgY2hhbmdlIGRldGVjdGlvbiBhbmQgbGlzdGVuZXIgbm90aWZpY2F0aW9uIGJ5IGludm9r
aW5nLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNvbGF0ZSBJZiB0cnVl
LCB0aGVuIHRoZSBzY29wZSBkb2VzIG5vdCBwcm90b3R5cGljYWxseSBpbmhlcml0IGZyb20gdGhl
CisgICAgICAgKiAgICAgICAgIHBhcmVudCBzY29wZS4gVGhlIHNjb3BlIGlzIGlzb2xhdGVkLCBh
cyBpdCBjYW4gbm90IHNlZSBwYXJlbnQgc2NvcGUgcHJvcGVydGllcy4KKyAgICAgICAqICAgICAg
ICAgV2hlbiBjcmVhdGluZyB3aWRnZXRzLCBpdCBpcyB1c2VmdWwgZm9yIHRoZSB3aWRnZXQgdG8g
bm90IGFjY2lkZW50YWxseSByZWFkIHBhcmVudAorICAgICAgICogICAgICAgICBzdGF0ZS4KKyAg
ICAgICAqCisgICAgICAgKiBAcGFyYW0ge1Njb3BlfSBbcGFyZW50PXRoaXNdIFRoZSB7QGxpbmsg
bmcuJHJvb3RTY29wZS5TY29wZSBgU2NvcGVgfSB0aGF0IHdpbGwgYmUgdGhlIGAkcGFyZW50YAor
ICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgbmV3bHkgY3JlYXRl
ZCBzY29wZS4gRGVmYXVsdHMgdG8gYHRoaXNgIHNjb3BlIGlmIG5vdCBwcm92aWRlZC4KKyAgICAg
ICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyB1c2VkIHdoZW4gY3JlYXRp
bmcgYSB0cmFuc2NsdWRlIHNjb3BlIHRvIGNvcnJlY3RseSBwbGFjZSBpdAorICAgICAgICogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgc2NvcGUgaGllcmFyY2h5IHdoaWxlIG1h
aW50YWluaW5nIHRoZSBjb3JyZWN0IHByb3RvdHlwaWNhbAorICAgICAgICogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmhlcml0YW5jZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJu
cyB7T2JqZWN0fSBUaGUgbmV3bHkgY3JlYXRlZCBjaGlsZCBzY29wZS4KKyAgICAgICAqCisgICAg
ICAgKi8KKyAgICAgICRuZXc6IGZ1bmN0aW9uKGlzb2xhdGUsIHBhcmVudCkgeworICAgICAgICB2
YXIgY2hpbGQ7CisKKyAgICAgICAgcGFyZW50ID0gcGFyZW50IHx8IHRoaXM7CisKKyAgICAgICAg
aWYgKGlzb2xhdGUpIHsKKyAgICAgICAgICBjaGlsZCA9IG5ldyBTY29wZSgpOworICAgICAgICAg
IGNoaWxkLiRyb290ID0gdGhpcy4kcm9vdDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAv
LyBPbmx5IGNyZWF0ZSBhIGNoaWxkIHNjb3BlIGNsYXNzIGlmIHNvbWVib2R5IGFza3MgZm9yIG9u
ZSwKKyAgICAgICAgICAvLyBidXQgY2FjaGUgaXQgdG8gYWxsb3cgdGhlIFZNIHRvIG9wdGltaXpl
IGxvb2t1cHMuCisgICAgICAgICAgaWYgKCF0aGlzLiQkQ2hpbGRTY29wZSkgeworICAgICAgICAg
ICAgdGhpcy4kJENoaWxkU2NvcGUgPSBjcmVhdGVDaGlsZFNjb3BlQ2xhc3ModGhpcyk7CisgICAg
ICAgICAgfQorICAgICAgICAgIGNoaWxkID0gbmV3IHRoaXMuJCRDaGlsZFNjb3BlKCk7CisgICAg
ICAgIH0KKyAgICAgICAgY2hpbGQuJHBhcmVudCA9IHBhcmVudDsKKyAgICAgICAgY2hpbGQuJCRw
cmV2U2libGluZyA9IHBhcmVudC4kJGNoaWxkVGFpbDsKKyAgICAgICAgaWYgKHBhcmVudC4kJGNo
aWxkSGVhZCkgeworICAgICAgICAgIHBhcmVudC4kJGNoaWxkVGFpbC4kJG5leHRTaWJsaW5nID0g
Y2hpbGQ7CisgICAgICAgICAgcGFyZW50LiQkY2hpbGRUYWlsID0gY2hpbGQ7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgcGFyZW50LiQkY2hpbGRIZWFkID0gcGFyZW50LiQkY2hpbGRUYWls
ID0gY2hpbGQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBXaGVuIHRoZSBuZXcgc2NvcGUgaXMg
bm90IGlzb2xhdGVkIG9yIHdlIGluaGVyaXQgZnJvbSBgdGhpc2AsIGFuZAorICAgICAgICAvLyB0
aGUgcGFyZW50IHNjb3BlIGlzIGRlc3Ryb3llZCwgdGhlIHByb3BlcnR5IGAkJGRlc3Ryb3llZGAg
aXMgaW5oZXJpdGVkCisgICAgICAgIC8vIHByb3RvdHlwaWNhbGx5LiBJbiBhbGwgb3RoZXIgY2Fz
ZXMsIHRoaXMgcHJvcGVydHkgbmVlZHMgdG8gYmUgc2V0CisgICAgICAgIC8vIHdoZW4gdGhlIHBh
cmVudCBzY29wZSBpcyBkZXN0cm95ZWQuCisgICAgICAgIC8vIFRoZSBsaXN0ZW5lciBuZWVkcyB0
byBiZSBhZGRlZCBhZnRlciB0aGUgcGFyZW50IGlzIHNldAorICAgICAgICBpZiAoaXNvbGF0ZSB8
fCBwYXJlbnQgIT0gdGhpcykgY2hpbGQuJG9uKCckZGVzdHJveScsIGRlc3Ryb3lDaGlsZFNjb3Bl
KTsKKworICAgICAgICByZXR1cm4gY2hpbGQ7CisgICAgICB9LAorCisgICAgICAvKioKKyAgICAg
ICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgICAqIEBuYW1lICRyb290U2NvcGUuU2NvcGUjJHdhdGNo
CisgICAgICAgKiBAa2luZCBmdW5jdGlvbgorICAgICAgICoKKyAgICAgICAqIEBkZXNjcmlwdGlv
bgorICAgICAgICogUmVnaXN0ZXJzIGEgYGxpc3RlbmVyYCBjYWxsYmFjayB0byBiZSBleGVjdXRl
ZCB3aGVuZXZlciB0aGUgYHdhdGNoRXhwcmVzc2lvbmAgY2hhbmdlcy4KKyAgICAgICAqCisgICAg
ICAgKiAtIFRoZSBgd2F0Y2hFeHByZXNzaW9uYCBpcyBjYWxsZWQgb24gZXZlcnkgY2FsbCB0byB7
QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkZGlnZXN0CisgICAgICAgKiAgICRkaWdlc3QoKX0g
YW5kIHNob3VsZCByZXR1cm4gdGhlIHZhbHVlIHRoYXQgd2lsbCBiZSB3YXRjaGVkLiAoU2luY2UK
KyAgICAgICAqICAge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGRpZ2VzdCAkZGlnZXN0KCl9
IHJlcnVucyB3aGVuIGl0IGRldGVjdHMgY2hhbmdlcyB0aGUKKyAgICAgICAqICAgYHdhdGNoRXhw
cmVzc2lvbmAgY2FuIGV4ZWN1dGUgbXVsdGlwbGUgdGltZXMgcGVyCisgICAgICAgKiAgIHtAbGlu
ayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRkaWdlc3QgJGRpZ2VzdCgpfSBhbmQgc2hvdWxkIGJlIGlk
ZW1wb3RlbnQuKQorICAgICAgICogLSBUaGUgYGxpc3RlbmVyYCBpcyBjYWxsZWQgb25seSB3aGVu
IHRoZSB2YWx1ZSBmcm9tIHRoZSBjdXJyZW50IGB3YXRjaEV4cHJlc3Npb25gIGFuZCB0aGUKKyAg
ICAgICAqICAgcHJldmlvdXMgY2FsbCB0byBgd2F0Y2hFeHByZXNzaW9uYCBhcmUgbm90IGVxdWFs
ICh3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIGluaXRpYWwgcnVuLAorICAgICAgICogICBzZWUg
YmVsb3cpLiBJbmVxdWFsaXR5IGlzIGRldGVybWluZWQgYWNjb3JkaW5nIHRvIHJlZmVyZW5jZSBp
bmVxdWFsaXR5LAorICAgICAgICogICBbc3RyaWN0IGNvbXBhcmlzb25dKGh0dHBzOi8vZGV2ZWxv
cGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09wZXJh
dG9ycy9Db21wYXJpc29uX09wZXJhdG9ycykKKyAgICAgICAqICAgIHZpYSB0aGUgYCE9PWAgSmF2
YXNjcmlwdCBvcGVyYXRvciwgdW5sZXNzIGBvYmplY3RFcXVhbGl0eSA9PSB0cnVlYAorICAgICAg
ICogICAoc2VlIG5leHQgcG9pbnQpCisgICAgICAgKiAtIFdoZW4gYG9iamVjdEVxdWFsaXR5ID09
IHRydWVgLCBpbmVxdWFsaXR5IG9mIHRoZSBgd2F0Y2hFeHByZXNzaW9uYCBpcyBkZXRlcm1pbmVk
CisgICAgICAgKiAgIGFjY29yZGluZyB0byB0aGUge0BsaW5rIGFuZ3VsYXIuZXF1YWxzfSBmdW5j
dGlvbi4gVG8gc2F2ZSB0aGUgdmFsdWUgb2YgdGhlIG9iamVjdCBmb3IKKyAgICAgICAqICAgbGF0
ZXIgY29tcGFyaXNvbiwgdGhlIHtAbGluayBhbmd1bGFyLmNvcHl9IGZ1bmN0aW9uIGlzIHVzZWQu
IFRoaXMgdGhlcmVmb3JlIG1lYW5zIHRoYXQKKyAgICAgICAqICAgd2F0Y2hpbmcgY29tcGxleCBv
YmplY3RzIHdpbGwgaGF2ZSBhZHZlcnNlIG1lbW9yeSBhbmQgcGVyZm9ybWFuY2UgaW1wbGljYXRp
b25zLgorICAgICAgICogLSBUaGUgd2F0Y2ggYGxpc3RlbmVyYCBtYXkgY2hhbmdlIHRoZSBtb2Rl
bCwgd2hpY2ggbWF5IHRyaWdnZXIgb3RoZXIgYGxpc3RlbmVyYHMgdG8gZmlyZS4KKyAgICAgICAq
ICAgVGhpcyBpcyBhY2hpZXZlZCBieSByZXJ1bm5pbmcgdGhlIHdhdGNoZXJzIHVudGlsIG5vIGNo
YW5nZXMgYXJlIGRldGVjdGVkLiBUaGUgcmVydW4KKyAgICAgICAqICAgaXRlcmF0aW9uIGxpbWl0
IGlzIDEwIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCBkZWFkbG9jay4KKyAgICAgICAqCisg
ICAgICAgKgorICAgICAgICogSWYgeW91IHdhbnQgdG8gYmUgbm90aWZpZWQgd2hlbmV2ZXIge0Bs
aW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGRpZ2VzdCAkZGlnZXN0fSBpcyBjYWxsZWQsCisgICAg
ICAgKiB5b3UgY2FuIHJlZ2lzdGVyIGEgYHdhdGNoRXhwcmVzc2lvbmAgZnVuY3Rpb24gd2l0aCBu
byBgbGlzdGVuZXJgLiAoU2luY2UgYHdhdGNoRXhwcmVzc2lvbmAKKyAgICAgICAqIGNhbiBleGVj
dXRlIG11bHRpcGxlIHRpbWVzIHBlciB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkZGlnZXN0
ICRkaWdlc3R9IGN5Y2xlIHdoZW4gYQorICAgICAgICogY2hhbmdlIGlzIGRldGVjdGVkLCBiZSBw
cmVwYXJlZCBmb3IgbXVsdGlwbGUgY2FsbHMgdG8geW91ciBsaXN0ZW5lci4pCisgICAgICAgKgor
ICAgICAgICogQWZ0ZXIgYSB3YXRjaGVyIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgc2NvcGUsIHRo
ZSBgbGlzdGVuZXJgIGZuIGlzIGNhbGxlZCBhc3luY2hyb25vdXNseQorICAgICAgICogKHZpYSB7
QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkZXZhbEFzeW5jICRldmFsQXN5bmN9KSB0byBpbml0
aWFsaXplIHRoZQorICAgICAgICogd2F0Y2hlci4gSW4gcmFyZSBjYXNlcywgdGhpcyBpcyB1bmRl
c2lyYWJsZSBiZWNhdXNlIHRoZSBsaXN0ZW5lciBpcyBjYWxsZWQgd2hlbiB0aGUgcmVzdWx0Cisg
ICAgICAgKiBvZiBgd2F0Y2hFeHByZXNzaW9uYCBkaWRuJ3QgY2hhbmdlLiBUbyBkZXRlY3QgdGhp
cyBzY2VuYXJpbyB3aXRoaW4gdGhlIGBsaXN0ZW5lcmAgZm4sIHlvdQorICAgICAgICogY2FuIGNv
bXBhcmUgdGhlIGBuZXdWYWxgIGFuZCBgb2xkVmFsYC4gSWYgdGhlc2UgdHdvIHZhbHVlcyBhcmUg
aWRlbnRpY2FsIChgPT09YCkgdGhlbiB0aGUKKyAgICAgICAqIGxpc3RlbmVyIHdhcyBjYWxsZWQg
ZHVlIHRvIGluaXRpYWxpemF0aW9uLgorICAgICAgICoKKyAgICAgICAqCisgICAgICAgKgorICAg
ICAgICogIyBFeGFtcGxlCisgICAgICAgKiBgYGBqcworICAgICAgICAgICAvLyBsZXQncyBhc3N1
bWUgdGhhdCBzY29wZSB3YXMgZGVwZW5kZW5jeSBpbmplY3RlZCBhcyB0aGUgJHJvb3RTY29wZQor
ICAgICAgICAgICB2YXIgc2NvcGUgPSAkcm9vdFNjb3BlOworICAgICAgICAgICBzY29wZS5uYW1l
ID0gJ21pc2tvJzsKKyAgICAgICAgICAgc2NvcGUuY291bnRlciA9IDA7CisKKyAgICAgICAgICAg
ZXhwZWN0KHNjb3BlLmNvdW50ZXIpLnRvRXF1YWwoMCk7CisgICAgICAgICAgIHNjb3BlLiR3YXRj
aCgnbmFtZScsIGZ1bmN0aW9uKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgeworICAgICAgICAgICAgIHNj
b3BlLmNvdW50ZXIgPSBzY29wZS5jb3VudGVyICsgMTsKKyAgICAgICAgICAgfSk7CisgICAgICAg
ICAgIGV4cGVjdChzY29wZS5jb3VudGVyKS50b0VxdWFsKDApOworCisgICAgICAgICAgIHNjb3Bl
LiRkaWdlc3QoKTsKKyAgICAgICAgICAgLy8gdGhlIGxpc3RlbmVyIGlzIGFsd2F5cyBjYWxsZWQg
ZHVyaW5nIHRoZSBmaXJzdCAkZGlnZXN0IGxvb3AgYWZ0ZXIgaXQgd2FzIHJlZ2lzdGVyZWQKKyAg
ICAgICAgICAgZXhwZWN0KHNjb3BlLmNvdW50ZXIpLnRvRXF1YWwoMSk7CisKKyAgICAgICAgICAg
c2NvcGUuJGRpZ2VzdCgpOworICAgICAgICAgICAvLyBidXQgbm93IGl0IHdpbGwgbm90IGJlIGNh
bGxlZCB1bmxlc3MgdGhlIHZhbHVlIGNoYW5nZXMKKyAgICAgICAgICAgZXhwZWN0KHNjb3BlLmNv
dW50ZXIpLnRvRXF1YWwoMSk7CisKKyAgICAgICAgICAgc2NvcGUubmFtZSA9ICdhZGFtJzsKKyAg
ICAgICAgICAgc2NvcGUuJGRpZ2VzdCgpOworICAgICAgICAgICBleHBlY3Qoc2NvcGUuY291bnRl
cikudG9FcXVhbCgyKTsKKworCisKKyAgICAgICAgICAgLy8gVXNpbmcgYSBmdW5jdGlvbiBhcyBh
IHdhdGNoRXhwcmVzc2lvbgorICAgICAgICAgICB2YXIgZm9vZDsKKyAgICAgICAgICAgc2NvcGUu
Zm9vZENvdW50ZXIgPSAwOworICAgICAgICAgICBleHBlY3Qoc2NvcGUuZm9vZENvdW50ZXIpLnRv
RXF1YWwoMCk7CisgICAgICAgICAgIHNjb3BlLiR3YXRjaCgKKyAgICAgICAgICAgICAvLyBUaGlz
IGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIGJlaW5nIHdhdGNoZWQuIEl0IGlzIGNhbGxlZCBm
b3IgZWFjaCB0dXJuIG9mIHRoZSAkZGlnZXN0IGxvb3AKKyAgICAgICAgICAgICBmdW5jdGlvbigp
IHsgcmV0dXJuIGZvb2Q7IH0sCisgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgY2hhbmdlIGxp
c3RlbmVyLCBjYWxsZWQgd2hlbiB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSB0aGUgYWJvdmUgZnVu
Y3Rpb24gY2hhbmdlcworICAgICAgICAgICAgIGZ1bmN0aW9uKG5ld1ZhbHVlLCBvbGRWYWx1ZSkg
eworICAgICAgICAgICAgICAgaWYgKCBuZXdWYWx1ZSAhPT0gb2xkVmFsdWUgKSB7CisgICAgICAg
ICAgICAgICAgIC8vIE9ubHkgaW5jcmVtZW50IHRoZSBjb3VudGVyIGlmIHRoZSB2YWx1ZSBjaGFu
Z2VkCisgICAgICAgICAgICAgICAgIHNjb3BlLmZvb2RDb3VudGVyID0gc2NvcGUuZm9vZENvdW50
ZXIgKyAxOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgIH0KKyAgICAgICAgICAgKTsK
KyAgICAgICAgICAgLy8gTm8gZGlnZXN0IGhhcyBiZWVuIHJ1biBzbyB0aGUgY291bnRlciB3aWxs
IGJlIHplcm8KKyAgICAgICAgICAgZXhwZWN0KHNjb3BlLmZvb2RDb3VudGVyKS50b0VxdWFsKDAp
OworCisgICAgICAgICAgIC8vIFJ1biB0aGUgZGlnZXN0IGJ1dCBzaW5jZSBmb29kIGhhcyBub3Qg
Y2hhbmdlZCBjb3VudCB3aWxsIHN0aWxsIGJlIHplcm8KKyAgICAgICAgICAgc2NvcGUuJGRpZ2Vz
dCgpOworICAgICAgICAgICBleHBlY3Qoc2NvcGUuZm9vZENvdW50ZXIpLnRvRXF1YWwoMCk7CisK
KyAgICAgICAgICAgLy8gVXBkYXRlIGZvb2QgYW5kIHJ1biBkaWdlc3QuICBOb3cgdGhlIGNvdW50
ZXIgd2lsbCBpbmNyZW1lbnQKKyAgICAgICAgICAgZm9vZCA9ICdjaGVlc2VidXJnZXInOworICAg
ICAgICAgICBzY29wZS4kZGlnZXN0KCk7CisgICAgICAgICAgIGV4cGVjdChzY29wZS5mb29kQ291
bnRlcikudG9FcXVhbCgxKTsKKworICAgICAgICogYGBgCisgICAgICAgKgorICAgICAgICoKKyAg
ICAgICAqCisgICAgICAgKiBAcGFyYW0geyhmdW5jdGlvbigpfHN0cmluZyl9IHdhdGNoRXhwcmVz
c2lvbiBFeHByZXNzaW9uIHRoYXQgaXMgZXZhbHVhdGVkIG9uIGVhY2gKKyAgICAgICAqICAgIHtA
bGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRkaWdlc3QgJGRpZ2VzdH0gY3ljbGUuIEEgY2hhbmdl
IGluIHRoZSByZXR1cm4gdmFsdWUgdHJpZ2dlcnMKKyAgICAgICAqICAgIGEgY2FsbCB0byB0aGUg
YGxpc3RlbmVyYC4KKyAgICAgICAqCisgICAgICAgKiAgICAtIGBzdHJpbmdgOiBFdmFsdWF0ZWQg
YXMge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0KKyAgICAgICAqICAgIC0gYGZ1
bmN0aW9uKHNjb3BlKWA6IGNhbGxlZCB3aXRoIGN1cnJlbnQgYHNjb3BlYCBhcyBhIHBhcmFtZXRl
ci4KKyAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24obmV3VmFsLCBvbGRWYWwsIHNjb3BlKX0gbGlz
dGVuZXIgQ2FsbGJhY2sgY2FsbGVkIHdoZW5ldmVyIHRoZSB2YWx1ZQorICAgICAgICogICAgb2Yg
YHdhdGNoRXhwcmVzc2lvbmAgY2hhbmdlcy4KKyAgICAgICAqCisgICAgICAgKiAgICAtIGBuZXdW
YWxgIGNvbnRhaW5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBgd2F0Y2hFeHByZXNzaW9uYAor
ICAgICAgICogICAgLSBgb2xkVmFsYCBjb250YWlucyB0aGUgcHJldmlvdXMgdmFsdWUgb2YgdGhl
IGB3YXRjaEV4cHJlc3Npb25gCisgICAgICAgKiAgICAtIGBzY29wZWAgcmVmZXJzIHRvIHRoZSBj
dXJyZW50IHNjb3BlCisgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBvYmplY3RFcXVhbGl0eSBD
b21wYXJlIGZvciBvYmplY3QgZXF1YWxpdHkgdXNpbmcge0BsaW5rIGFuZ3VsYXIuZXF1YWxzfSBp
bnN0ZWFkIG9mCisgICAgICAgKiAgICAgY29tcGFyaW5nIGZvciByZWZlcmVuY2UgZXF1YWxpdHku
CisgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb24oKX0gUmV0dXJucyBhIGRlcmVnaXN0cmF0aW9u
IGZ1bmN0aW9uIGZvciB0aGlzIGxpc3RlbmVyLgorICAgICAgICovCisgICAgICAkd2F0Y2g6IGZ1
bmN0aW9uKHdhdGNoRXhwLCBsaXN0ZW5lciwgb2JqZWN0RXF1YWxpdHksIHByZXR0eVByaW50RXhw
cmVzc2lvbikgeworICAgICAgICB2YXIgZ2V0ID0gJHBhcnNlKHdhdGNoRXhwKTsKKworICAgICAg
ICBpZiAoZ2V0LiQkd2F0Y2hEZWxlZ2F0ZSkgeworICAgICAgICAgIHJldHVybiBnZXQuJCR3YXRj
aERlbGVnYXRlKHRoaXMsIGxpc3RlbmVyLCBvYmplY3RFcXVhbGl0eSwgZ2V0LCB3YXRjaEV4cCk7
CisgICAgICAgIH0KKyAgICAgICAgdmFyIHNjb3BlID0gdGhpcywKKyAgICAgICAgICAgIGFycmF5
ID0gc2NvcGUuJCR3YXRjaGVycywKKyAgICAgICAgICAgIHdhdGNoZXIgPSB7CisgICAgICAgICAg
ICAgIGZuOiBsaXN0ZW5lciwKKyAgICAgICAgICAgICAgbGFzdDogaW5pdFdhdGNoVmFsLAorICAg
ICAgICAgICAgICBnZXQ6IGdldCwKKyAgICAgICAgICAgICAgZXhwOiBwcmV0dHlQcmludEV4cHJl
c3Npb24gfHwgd2F0Y2hFeHAsCisgICAgICAgICAgICAgIGVxOiAhIW9iamVjdEVxdWFsaXR5Cisg
ICAgICAgICAgICB9OworCisgICAgICAgIGxhc3REaXJ0eVdhdGNoID0gbnVsbDsKKworICAgICAg
ICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKSB7CisgICAgICAgICAgd2F0Y2hlci5mbiA9IG5v
b3A7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWFycmF5KSB7CisgICAgICAgICAgYXJyYXkg
PSBzY29wZS4kJHdhdGNoZXJzID0gW107CisgICAgICAgIH0KKyAgICAgICAgLy8gd2UgdXNlIHVu
c2hpZnQgc2luY2Ugd2UgdXNlIGEgd2hpbGUgbG9vcCBpbiAkZGlnZXN0IGZvciBzcGVlZC4KKyAg
ICAgICAgLy8gdGhlIHdoaWxlIGxvb3AgcmVhZHMgaW4gcmV2ZXJzZSBvcmRlci4KKyAgICAgICAg
YXJyYXkudW5zaGlmdCh3YXRjaGVyKTsKKyAgICAgICAgaW5jcmVtZW50V2F0Y2hlcnNDb3VudCh0
aGlzLCAxKTsKKworICAgICAgICByZXR1cm4gZnVuY3Rpb24gZGVyZWdpc3RlcldhdGNoKCkgewor
ICAgICAgICAgIGlmIChhcnJheVJlbW92ZShhcnJheSwgd2F0Y2hlcikgPj0gMCkgeworICAgICAg
ICAgICAgaW5jcmVtZW50V2F0Y2hlcnNDb3VudChzY29wZSwgLTEpOworICAgICAgICAgIH0KKyAg
ICAgICAgICBsYXN0RGlydHlXYXRjaCA9IG51bGw7CisgICAgICAgIH07CisgICAgICB9LAorCisg
ICAgICAvKioKKyAgICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgICAqIEBuYW1lICRyb290U2Nv
cGUuU2NvcGUjJHdhdGNoR3JvdXAKKyAgICAgICAqIEBraW5kIGZ1bmN0aW9uCisgICAgICAgKgor
ICAgICAgICogQGRlc2NyaXB0aW9uCisgICAgICAgKiBBIHZhcmlhbnQgb2Yge0BsaW5rIG5nLiRy
b290U2NvcGUuU2NvcGUjJHdhdGNoICR3YXRjaCgpfSB3aGVyZSBpdCB3YXRjaGVzIGFuIGFycmF5
IG9mIGB3YXRjaEV4cHJlc3Npb25zYC4KKyAgICAgICAqIElmIGFueSBvbmUgZXhwcmVzc2lvbiBp
biB0aGUgY29sbGVjdGlvbiBjaGFuZ2VzIHRoZSBgbGlzdGVuZXJgIGlzIGV4ZWN1dGVkLgorICAg
ICAgICoKKyAgICAgICAqIC0gVGhlIGl0ZW1zIGluIHRoZSBgd2F0Y2hFeHByZXNzaW9uc2AgYXJy
YXkgYXJlIG9ic2VydmVkIHZpYSBzdGFuZGFyZCAkd2F0Y2ggb3BlcmF0aW9uIGFuZCBhcmUgZXhh
bWluZWQgb24gZXZlcnkKKyAgICAgICAqICAgY2FsbCB0byAkZGlnZXN0KCkgdG8gc2VlIGlmIGFu
eSBpdGVtcyBjaGFuZ2VzLgorICAgICAgICogLSBUaGUgYGxpc3RlbmVyYCBpcyBjYWxsZWQgd2hl
bmV2ZXIgYW55IGV4cHJlc3Npb24gaW4gdGhlIGB3YXRjaEV4cHJlc3Npb25zYCBhcnJheSBjaGFu
Z2VzLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZ3xGdW5jdGlvbihz
Y29wZSk+fSB3YXRjaEV4cHJlc3Npb25zIEFycmF5IG9mIGV4cHJlc3Npb25zIHRoYXQgd2lsbCBi
ZSBpbmRpdmlkdWFsbHkKKyAgICAgICAqIHdhdGNoZWQgdXNpbmcge0BsaW5rIG5nLiRyb290U2Nv
cGUuU2NvcGUjJHdhdGNoICR3YXRjaCgpfQorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSB7ZnVu
Y3Rpb24obmV3VmFsdWVzLCBvbGRWYWx1ZXMsIHNjb3BlKX0gbGlzdGVuZXIgQ2FsbGJhY2sgY2Fs
bGVkIHdoZW5ldmVyIHRoZSByZXR1cm4gdmFsdWUgb2YgYW55CisgICAgICAgKiAgICBleHByZXNz
aW9uIGluIGB3YXRjaEV4cHJlc3Npb25zYCBjaGFuZ2VzCisgICAgICAgKiAgICBUaGUgYG5ld1Zh
bHVlc2AgYXJyYXkgY29udGFpbnMgdGhlIGN1cnJlbnQgdmFsdWVzIG9mIHRoZSBgd2F0Y2hFeHBy
ZXNzaW9uc2AsIHdpdGggdGhlIGluZGV4ZXMgbWF0Y2hpbmcKKyAgICAgICAqICAgIHRob3NlIG9m
IGB3YXRjaEV4cHJlc3Npb25gCisgICAgICAgKiAgICBhbmQgdGhlIGBvbGRWYWx1ZXNgIGFycmF5
IGNvbnRhaW5zIHRoZSBwcmV2aW91cyB2YWx1ZXMgb2YgdGhlIGB3YXRjaEV4cHJlc3Npb25zYCwg
d2l0aCB0aGUgaW5kZXhlcyBtYXRjaGluZworICAgICAgICogICAgdGhvc2Ugb2YgYHdhdGNoRXhw
cmVzc2lvbmAKKyAgICAgICAqICAgIFRoZSBgc2NvcGVgIHJlZmVycyB0byB0aGUgY3VycmVudCBz
Y29wZS4KKyAgICAgICAqIEByZXR1cm5zIHtmdW5jdGlvbigpfSBSZXR1cm5zIGEgZGUtcmVnaXN0
cmF0aW9uIGZ1bmN0aW9uIGZvciBhbGwgbGlzdGVuZXJzLgorICAgICAgICovCisgICAgICAkd2F0
Y2hHcm91cDogZnVuY3Rpb24od2F0Y2hFeHByZXNzaW9ucywgbGlzdGVuZXIpIHsKKyAgICAgICAg
dmFyIG9sZFZhbHVlcyA9IG5ldyBBcnJheSh3YXRjaEV4cHJlc3Npb25zLmxlbmd0aCk7CisgICAg
ICAgIHZhciBuZXdWYWx1ZXMgPSBuZXcgQXJyYXkod2F0Y2hFeHByZXNzaW9ucy5sZW5ndGgpOwor
ICAgICAgICB2YXIgZGVyZWdpc3RlckZucyA9IFtdOworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7
CisgICAgICAgIHZhciBjaGFuZ2VSZWFjdGlvblNjaGVkdWxlZCA9IGZhbHNlOworICAgICAgICB2
YXIgZmlyc3RSdW4gPSB0cnVlOworCisgICAgICAgIGlmICghd2F0Y2hFeHByZXNzaW9ucy5sZW5n
dGgpIHsKKyAgICAgICAgICAvLyBObyBleHByZXNzaW9ucyBtZWFucyB3ZSBjYWxsIHRoZSBsaXN0
ZW5lciBBU0FQCisgICAgICAgICAgdmFyIHNob3VsZENhbGwgPSB0cnVlOworICAgICAgICAgIHNl
bGYuJGV2YWxBc3luYyhmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRDYWxsKSBs
aXN0ZW5lcihuZXdWYWx1ZXMsIG5ld1ZhbHVlcywgc2VsZik7CisgICAgICAgICAgfSk7CisgICAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uIGRlcmVnaXN0ZXJXYXRjaEdyb3VwKCkgeworICAgICAgICAg
ICAgc2hvdWxkQ2FsbCA9IGZhbHNlOworICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAg
ICBpZiAod2F0Y2hFeHByZXNzaW9ucy5sZW5ndGggPT09IDEpIHsKKyAgICAgICAgICAvLyBTcGVj
aWFsIGNhc2Ugc2l6ZSBvZiBvbmUKKyAgICAgICAgICByZXR1cm4gdGhpcy4kd2F0Y2god2F0Y2hF
eHByZXNzaW9uc1swXSwgZnVuY3Rpb24gd2F0Y2hHcm91cEFjdGlvbih2YWx1ZSwgb2xkVmFsdWUs
IHNjb3BlKSB7CisgICAgICAgICAgICBuZXdWYWx1ZXNbMF0gPSB2YWx1ZTsKKyAgICAgICAgICAg
IG9sZFZhbHVlc1swXSA9IG9sZFZhbHVlOworICAgICAgICAgICAgbGlzdGVuZXIobmV3VmFsdWVz
LCAodmFsdWUgPT09IG9sZFZhbHVlKSA/IG5ld1ZhbHVlcyA6IG9sZFZhbHVlcywgc2NvcGUpOwor
ICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgZm9yRWFjaCh3YXRjaEV4cHJlc3Np
b25zLCBmdW5jdGlvbihleHByLCBpKSB7CisgICAgICAgICAgdmFyIHVud2F0Y2hGbiA9IHNlbGYu
JHdhdGNoKGV4cHIsIGZ1bmN0aW9uIHdhdGNoR3JvdXBTdWJBY3Rpb24odmFsdWUsIG9sZFZhbHVl
KSB7CisgICAgICAgICAgICBuZXdWYWx1ZXNbaV0gPSB2YWx1ZTsKKyAgICAgICAgICAgIG9sZFZh
bHVlc1tpXSA9IG9sZFZhbHVlOworICAgICAgICAgICAgaWYgKCFjaGFuZ2VSZWFjdGlvblNjaGVk
dWxlZCkgeworICAgICAgICAgICAgICBjaGFuZ2VSZWFjdGlvblNjaGVkdWxlZCA9IHRydWU7Cisg
ICAgICAgICAgICAgIHNlbGYuJGV2YWxBc3luYyh3YXRjaEdyb3VwQWN0aW9uKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICB9KTsKKyAgICAgICAgICBkZXJlZ2lzdGVyRm5zLnB1c2godW53YXRj
aEZuKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZnVuY3Rpb24gd2F0Y2hHcm91cEFjdGlvbigp
IHsKKyAgICAgICAgICBjaGFuZ2VSZWFjdGlvblNjaGVkdWxlZCA9IGZhbHNlOworCisgICAgICAg
ICAgaWYgKGZpcnN0UnVuKSB7CisgICAgICAgICAgICBmaXJzdFJ1biA9IGZhbHNlOworICAgICAg
ICAgICAgbGlzdGVuZXIobmV3VmFsdWVzLCBuZXdWYWx1ZXMsIHNlbGYpOworICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBsaXN0ZW5lcihuZXdWYWx1ZXMsIG9sZFZhbHVlcywgc2VsZik7
CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGRlcmVn
aXN0ZXJXYXRjaEdyb3VwKCkgeworICAgICAgICAgIHdoaWxlIChkZXJlZ2lzdGVyRm5zLmxlbmd0
aCkgeworICAgICAgICAgICAgZGVyZWdpc3RlckZucy5zaGlmdCgpKCk7CisgICAgICAgICAgfQor
ICAgICAgICB9OworICAgICAgfSwKKworCisgICAgICAvKioKKyAgICAgICAqIEBuZ2RvYyBtZXRo
b2QKKyAgICAgICAqIEBuYW1lICRyb290U2NvcGUuU2NvcGUjJHdhdGNoQ29sbGVjdGlvbgorICAg
ICAgICogQGtpbmQgZnVuY3Rpb24KKyAgICAgICAqCisgICAgICAgKiBAZGVzY3JpcHRpb24KKyAg
ICAgICAqIFNoYWxsb3cgd2F0Y2hlcyB0aGUgcHJvcGVydGllcyBvZiBhbiBvYmplY3QgYW5kIGZp
cmVzIHdoZW5ldmVyIGFueSBvZiB0aGUgcHJvcGVydGllcyBjaGFuZ2UKKyAgICAgICAqIChmb3Ig
YXJyYXlzLCB0aGlzIGltcGxpZXMgd2F0Y2hpbmcgdGhlIGFycmF5IGl0ZW1zOyBmb3Igb2JqZWN0
IG1hcHMsIHRoaXMgaW1wbGllcyB3YXRjaGluZworICAgICAgICogdGhlIHByb3BlcnRpZXMpLiBJ
ZiBhIGNoYW5nZSBpcyBkZXRlY3RlZCwgdGhlIGBsaXN0ZW5lcmAgY2FsbGJhY2sgaXMgZmlyZWQu
CisgICAgICAgKgorICAgICAgICogLSBUaGUgYG9iamAgY29sbGVjdGlvbiBpcyBvYnNlcnZlZCB2
aWEgc3RhbmRhcmQgJHdhdGNoIG9wZXJhdGlvbiBhbmQgaXMgZXhhbWluZWQgb24gZXZlcnkKKyAg
ICAgICAqICAgY2FsbCB0byAkZGlnZXN0KCkgdG8gc2VlIGlmIGFueSBpdGVtcyBoYXZlIGJlZW4g
YWRkZWQsIHJlbW92ZWQsIG9yIG1vdmVkLgorICAgICAgICogLSBUaGUgYGxpc3RlbmVyYCBpcyBj
YWxsZWQgd2hlbmV2ZXIgYW55dGhpbmcgd2l0aGluIHRoZSBgb2JqYCBoYXMgY2hhbmdlZC4gRXhh
bXBsZXMgaW5jbHVkZQorICAgICAgICogICBhZGRpbmcsIHJlbW92aW5nLCBhbmQgbW92aW5nIGl0
ZW1zIGJlbG9uZ2luZyB0byBhbiBvYmplY3Qgb3IgYXJyYXkuCisgICAgICAgKgorICAgICAgICoK
KyAgICAgICAqICMgRXhhbXBsZQorICAgICAgICogYGBganMKKyAgICAgICAgICAkc2NvcGUubmFt
ZXMgPSBbJ2lnb3InLCAnbWF0aWFzJywgJ21pc2tvJywgJ2phbWVzJ107CisgICAgICAgICAgJHNj
b3BlLmRhdGFDb3VudCA9IDQ7CisKKyAgICAgICAgICAkc2NvcGUuJHdhdGNoQ29sbGVjdGlvbign
bmFtZXMnLCBmdW5jdGlvbihuZXdOYW1lcywgb2xkTmFtZXMpIHsKKyAgICAgICAgICAgICRzY29w
ZS5kYXRhQ291bnQgPSBuZXdOYW1lcy5sZW5ndGg7CisgICAgICAgICAgfSk7CisKKyAgICAgICAg
ICBleHBlY3QoJHNjb3BlLmRhdGFDb3VudCkudG9FcXVhbCg0KTsKKyAgICAgICAgICAkc2NvcGUu
JGRpZ2VzdCgpOworCisgICAgICAgICAgLy9zdGlsbCBhdCA0IC4uLiBubyBjaGFuZ2VzCisgICAg
ICAgICAgZXhwZWN0KCRzY29wZS5kYXRhQ291bnQpLnRvRXF1YWwoNCk7CisKKyAgICAgICAgICAk
c2NvcGUubmFtZXMucG9wKCk7CisgICAgICAgICAgJHNjb3BlLiRkaWdlc3QoKTsKKworICAgICAg
ICAgIC8vbm93IHRoZXJlJ3MgYmVlbiBhIGNoYW5nZQorICAgICAgICAgIGV4cGVjdCgkc2NvcGUu
ZGF0YUNvdW50KS50b0VxdWFsKDMpOworICAgICAgICogYGBgCisgICAgICAgKgorICAgICAgICoK
KyAgICAgICAqIEBwYXJhbSB7c3RyaW5nfGZ1bmN0aW9uKHNjb3BlKX0gb2JqIEV2YWx1YXRlZCBh
cyB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBleHByZXNzaW9ufS4gVGhlCisgICAgICAgKiAgICBl
eHByZXNzaW9uIHZhbHVlIHNob3VsZCBldmFsdWF0ZSB0byBhbiBvYmplY3Qgb3IgYW4gYXJyYXkg
d2hpY2ggaXMgb2JzZXJ2ZWQgb24gZWFjaAorICAgICAgICogICAge0BsaW5rIG5nLiRyb290U2Nv
cGUuU2NvcGUjJGRpZ2VzdCAkZGlnZXN0fSBjeWNsZS4gQW55IHNoYWxsb3cgY2hhbmdlIHdpdGhp
biB0aGUKKyAgICAgICAqICAgIGNvbGxlY3Rpb24gd2lsbCB0cmlnZ2VyIGEgY2FsbCB0byB0aGUg
YGxpc3RlbmVyYC4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG5ld0NvbGxl
Y3Rpb24sIG9sZENvbGxlY3Rpb24sIHNjb3BlKX0gbGlzdGVuZXIgYSBjYWxsYmFjayBmdW5jdGlv
biBjYWxsZWQKKyAgICAgICAqICAgIHdoZW4gYSBjaGFuZ2UgaXMgZGV0ZWN0ZWQuCisgICAgICAg
KiAgICAtIFRoZSBgbmV3Q29sbGVjdGlvbmAgb2JqZWN0IGlzIHRoZSBuZXdseSBtb2RpZmllZCBk
YXRhIG9idGFpbmVkIGZyb20gdGhlIGBvYmpgIGV4cHJlc3Npb24KKyAgICAgICAqICAgIC0gVGhl
IGBvbGRDb2xsZWN0aW9uYCBvYmplY3QgaXMgYSBjb3B5IG9mIHRoZSBmb3JtZXIgY29sbGVjdGlv
biBkYXRhLgorICAgICAgICogICAgICBEdWUgdG8gcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMs
IHRoZWBvbGRDb2xsZWN0aW9uYCB2YWx1ZSBpcyBjb21wdXRlZCBvbmx5IGlmIHRoZQorICAgICAg
ICogICAgICBgbGlzdGVuZXJgIGZ1bmN0aW9uIGRlY2xhcmVzIHR3byBvciBtb3JlIGFyZ3VtZW50
cy4KKyAgICAgICAqICAgIC0gVGhlIGBzY29wZWAgYXJndW1lbnQgcmVmZXJzIHRvIHRoZSBjdXJy
ZW50IHNjb3BlLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIHtmdW5jdGlvbigpfSBSZXR1
cm5zIGEgZGUtcmVnaXN0cmF0aW9uIGZ1bmN0aW9uIGZvciB0aGlzIGxpc3RlbmVyLiBXaGVuIHRo
ZQorICAgICAgICogICAgZGUtcmVnaXN0cmF0aW9uIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkLCB0aGUg
aW50ZXJuYWwgd2F0Y2ggb3BlcmF0aW9uIGlzIHRlcm1pbmF0ZWQuCisgICAgICAgKi8KKyAgICAg
ICR3YXRjaENvbGxlY3Rpb246IGZ1bmN0aW9uKG9iaiwgbGlzdGVuZXIpIHsKKyAgICAgICAgJHdh
dGNoQ29sbGVjdGlvbkludGVyY2VwdG9yLiRzdGF0ZWZ1bCA9IHRydWU7CisKKyAgICAgICAgdmFy
IHNlbGYgPSB0aGlzOworICAgICAgICAvLyB0aGUgY3VycmVudCB2YWx1ZSwgdXBkYXRlZCBvbiBl
YWNoIGRpcnR5LWNoZWNrIHJ1bgorICAgICAgICB2YXIgbmV3VmFsdWU7CisgICAgICAgIC8vIGEg
c2hhbGxvdyBjb3B5IG9mIHRoZSBuZXdWYWx1ZSBmcm9tIHRoZSBsYXN0IGRpcnR5LWNoZWNrIHJ1
biwKKyAgICAgICAgLy8gdXBkYXRlZCB0byBtYXRjaCBuZXdWYWx1ZSBkdXJpbmcgZGlydHktY2hl
Y2sgcnVuCisgICAgICAgIHZhciBvbGRWYWx1ZTsKKyAgICAgICAgLy8gYSBzaGFsbG93IGNvcHkg
b2YgdGhlIG5ld1ZhbHVlIGZyb20gd2hlbiB0aGUgbGFzdCBjaGFuZ2UgaGFwcGVuZWQKKyAgICAg
ICAgdmFyIHZlcnlPbGRWYWx1ZTsKKyAgICAgICAgLy8gb25seSB0cmFjayB2ZXJ5T2xkVmFsdWUg
aWYgdGhlIGxpc3RlbmVyIGlzIGFza2luZyBmb3IgaXQKKyAgICAgICAgdmFyIHRyYWNrVmVyeU9s
ZFZhbHVlID0gKGxpc3RlbmVyLmxlbmd0aCA+IDEpOworICAgICAgICB2YXIgY2hhbmdlRGV0ZWN0
ZWQgPSAwOworICAgICAgICB2YXIgY2hhbmdlRGV0ZWN0b3IgPSAkcGFyc2Uob2JqLCAkd2F0Y2hD
b2xsZWN0aW9uSW50ZXJjZXB0b3IpOworICAgICAgICB2YXIgaW50ZXJuYWxBcnJheSA9IFtdOwor
ICAgICAgICB2YXIgaW50ZXJuYWxPYmplY3QgPSB7fTsKKyAgICAgICAgdmFyIGluaXRSdW4gPSB0
cnVlOworICAgICAgICB2YXIgb2xkTGVuZ3RoID0gMDsKKworICAgICAgICBmdW5jdGlvbiAkd2F0
Y2hDb2xsZWN0aW9uSW50ZXJjZXB0b3IoX3ZhbHVlKSB7CisgICAgICAgICAgbmV3VmFsdWUgPSBf
dmFsdWU7CisgICAgICAgICAgdmFyIG5ld0xlbmd0aCwga2V5LCBib3RoTmFOLCBuZXdJdGVtLCBv
bGRJdGVtOworCisgICAgICAgICAgLy8gSWYgdGhlIG5ldyB2YWx1ZSBpcyB1bmRlZmluZWQsIHRo
ZW4gcmV0dXJuIHVuZGVmaW5lZCBhcyB0aGUgd2F0Y2ggbWF5IGJlIGEgb25lLXRpbWUgd2F0Y2gK
KyAgICAgICAgICBpZiAoaXNVbmRlZmluZWQobmV3VmFsdWUpKSByZXR1cm47CisKKyAgICAgICAg
ICBpZiAoIWlzT2JqZWN0KG5ld1ZhbHVlKSkgeyAvLyBpZiBwcmltaXRpdmUKKyAgICAgICAgICAg
IGlmIChvbGRWYWx1ZSAhPT0gbmV3VmFsdWUpIHsKKyAgICAgICAgICAgICAgb2xkVmFsdWUgPSBu
ZXdWYWx1ZTsKKyAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0ZWQrKzsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXlMaWtlKG5ld1ZhbHVlKSkgeworICAgICAgICAg
ICAgaWYgKG9sZFZhbHVlICE9PSBpbnRlcm5hbEFycmF5KSB7CisgICAgICAgICAgICAgIC8vIHdl
IGFyZSB0cmFuc2l0aW9uaW5nIGZyb20gc29tZXRoaW5nIHdoaWNoIHdhcyBub3QgYW4gYXJyYXkg
aW50byBhcnJheS4KKyAgICAgICAgICAgICAgb2xkVmFsdWUgPSBpbnRlcm5hbEFycmF5OworICAg
ICAgICAgICAgICBvbGRMZW5ndGggPSBvbGRWYWx1ZS5sZW5ndGggPSAwOworICAgICAgICAgICAg
ICBjaGFuZ2VEZXRlY3RlZCsrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBuZXdMZW5n
dGggPSBuZXdWYWx1ZS5sZW5ndGg7CisKKyAgICAgICAgICAgIGlmIChvbGRMZW5ndGggIT09IG5l
d0xlbmd0aCkgeworICAgICAgICAgICAgICAvLyBpZiBsZW5ndGhzIGRvIG5vdCBtYXRjaCB3ZSBu
ZWVkIHRvIHRyaWdnZXIgY2hhbmdlIG5vdGlmaWNhdGlvbgorICAgICAgICAgICAgICBjaGFuZ2VE
ZXRlY3RlZCsrOworICAgICAgICAgICAgICBvbGRWYWx1ZS5sZW5ndGggPSBvbGRMZW5ndGggPSBu
ZXdMZW5ndGg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBjb3B5IHRoZSBpdGVtcyB0
byBvbGRWYWx1ZSBhbmQgbG9vayBmb3IgY2hhbmdlcy4KKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbmV3TGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgb2xkSXRlbSA9IG9sZFZh
bHVlW2ldOworICAgICAgICAgICAgICBuZXdJdGVtID0gbmV3VmFsdWVbaV07CisKKyAgICAgICAg
ICAgICAgYm90aE5hTiA9IChvbGRJdGVtICE9PSBvbGRJdGVtKSAmJiAobmV3SXRlbSAhPT0gbmV3
SXRlbSk7CisgICAgICAgICAgICAgIGlmICghYm90aE5hTiAmJiAob2xkSXRlbSAhPT0gbmV3SXRl
bSkpIHsKKyAgICAgICAgICAgICAgICBjaGFuZ2VEZXRlY3RlZCsrOworICAgICAgICAgICAgICAg
IG9sZFZhbHVlW2ldID0gbmV3SXRlbTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAob2xkVmFsdWUgIT09IGludGVybmFs
T2JqZWN0KSB7CisgICAgICAgICAgICAgIC8vIHdlIGFyZSB0cmFuc2l0aW9uaW5nIGZyb20gc29t
ZXRoaW5nIHdoaWNoIHdhcyBub3QgYW4gb2JqZWN0IGludG8gb2JqZWN0LgorICAgICAgICAgICAg
ICBvbGRWYWx1ZSA9IGludGVybmFsT2JqZWN0ID0ge307CisgICAgICAgICAgICAgIG9sZExlbmd0
aCA9IDA7CisgICAgICAgICAgICAgIGNoYW5nZURldGVjdGVkKys7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAvLyBjb3B5IHRoZSBpdGVtcyB0byBvbGRWYWx1ZSBhbmQgbG9vayBmb3IgY2hh
bmdlcy4KKyAgICAgICAgICAgIG5ld0xlbmd0aCA9IDA7CisgICAgICAgICAgICBmb3IgKGtleSBp
biBuZXdWYWx1ZSkgeworICAgICAgICAgICAgICBpZiAobmV3VmFsdWUuaGFzT3duUHJvcGVydHko
a2V5KSkgeworICAgICAgICAgICAgICAgIG5ld0xlbmd0aCsrOworICAgICAgICAgICAgICAgIG5l
d0l0ZW0gPSBuZXdWYWx1ZVtrZXldOworICAgICAgICAgICAgICAgIG9sZEl0ZW0gPSBvbGRWYWx1
ZVtrZXldOworCisgICAgICAgICAgICAgICAgaWYgKGtleSBpbiBvbGRWYWx1ZSkgeworICAgICAg
ICAgICAgICAgICAgYm90aE5hTiA9IChvbGRJdGVtICE9PSBvbGRJdGVtKSAmJiAobmV3SXRlbSAh
PT0gbmV3SXRlbSk7CisgICAgICAgICAgICAgICAgICBpZiAoIWJvdGhOYU4gJiYgKG9sZEl0ZW0g
IT09IG5ld0l0ZW0pKSB7CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZURldGVjdGVkKys7Cisg
ICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlW2tleV0gPSBuZXdJdGVtOworICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICBvbGRM
ZW5ndGgrKzsKKyAgICAgICAgICAgICAgICAgIG9sZFZhbHVlW2tleV0gPSBuZXdJdGVtOworICAg
ICAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0ZWQrKzsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvbGRMZW5ndGggPiBu
ZXdMZW5ndGgpIHsKKyAgICAgICAgICAgICAgLy8gd2UgdXNlZCB0byBoYXZlIG1vcmUga2V5cywg
bmVlZCB0byBmaW5kIHRoZW0gYW5kIGRlc3Ryb3kgdGhlbS4KKyAgICAgICAgICAgICAgY2hhbmdl
RGV0ZWN0ZWQrKzsKKyAgICAgICAgICAgICAgZm9yIChrZXkgaW4gb2xkVmFsdWUpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIW5ld1ZhbHVlLmhhc093blByb3BlcnR5KGtleSkpIHsKKyAgICAgICAg
ICAgICAgICAgIG9sZExlbmd0aC0tOworICAgICAgICAgICAgICAgICAgZGVsZXRlIG9sZFZhbHVl
W2tleV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiBjaGFuZ2VEZXRlY3RlZDsKKyAgICAgICAg
fQorCisgICAgICAgIGZ1bmN0aW9uICR3YXRjaENvbGxlY3Rpb25BY3Rpb24oKSB7CisgICAgICAg
ICAgaWYgKGluaXRSdW4pIHsKKyAgICAgICAgICAgIGluaXRSdW4gPSBmYWxzZTsKKyAgICAgICAg
ICAgIGxpc3RlbmVyKG5ld1ZhbHVlLCBuZXdWYWx1ZSwgc2VsZik7CisgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGxpc3RlbmVyKG5ld1ZhbHVlLCB2ZXJ5T2xkVmFsdWUsIHNlbGYpOwor
ICAgICAgICAgIH0KKworICAgICAgICAgIC8vIG1ha2UgYSBjb3B5IGZvciB0aGUgbmV4dCB0aW1l
IGEgY29sbGVjdGlvbiBpcyBjaGFuZ2VkCisgICAgICAgICAgaWYgKHRyYWNrVmVyeU9sZFZhbHVl
KSB7CisgICAgICAgICAgICBpZiAoIWlzT2JqZWN0KG5ld1ZhbHVlKSkgeworICAgICAgICAgICAg
ICAvL3ByaW1pdGl2ZQorICAgICAgICAgICAgICB2ZXJ5T2xkVmFsdWUgPSBuZXdWYWx1ZTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheUxpa2UobmV3VmFsdWUpKSB7CisgICAgICAgICAg
ICAgIHZlcnlPbGRWYWx1ZSA9IG5ldyBBcnJheShuZXdWYWx1ZS5sZW5ndGgpOworICAgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld1ZhbHVlLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgdmVyeU9sZFZhbHVlW2ldID0gbmV3VmFsdWVbaV07CisgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0gZWxzZSB7IC8vIGlmIG9iamVjdAorICAgICAgICAgICAgICB2ZXJ5T2xk
VmFsdWUgPSB7fTsKKyAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG5ld1ZhbHVlKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwobmV3VmFsdWUsIGtleSkpIHsK
KyAgICAgICAgICAgICAgICAgIHZlcnlPbGRWYWx1ZVtrZXldID0gbmV3VmFsdWVba2V5XTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhpcy4kd2F0Y2goY2hhbmdlRGV0ZWN0
b3IsICR3YXRjaENvbGxlY3Rpb25BY3Rpb24pOworICAgICAgfSwKKworICAgICAgLyoqCisgICAg
ICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICAgKiBAbmFtZSAkcm9vdFNjb3BlLlNjb3BlIyRkaWdl
c3QKKyAgICAgICAqIEBraW5kIGZ1bmN0aW9uCisgICAgICAgKgorICAgICAgICogQGRlc2NyaXB0
aW9uCisgICAgICAgKiBQcm9jZXNzZXMgYWxsIG9mIHRoZSB7QGxpbmsgbmcuJHJvb3RTY29wZS5T
Y29wZSMkd2F0Y2ggd2F0Y2hlcnN9IG9mIHRoZSBjdXJyZW50IHNjb3BlIGFuZAorICAgICAgICog
aXRzIGNoaWxkcmVuLiBCZWNhdXNlIGEge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJHdhdGNo
IHdhdGNoZXJ9J3MgbGlzdGVuZXIgY2FuIGNoYW5nZQorICAgICAgICogdGhlIG1vZGVsLCB0aGUg
YCRkaWdlc3QoKWAga2VlcHMgY2FsbGluZyB0aGUge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUj
JHdhdGNoIHdhdGNoZXJzfQorICAgICAgICogdW50aWwgbm8gbW9yZSBsaXN0ZW5lcnMgYXJlIGZp
cmluZy4gVGhpcyBtZWFucyB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGdldCBpbnRvIGFuIGluZmlu
aXRlCisgICAgICAgKiBsb29wLiBUaGlzIGZ1bmN0aW9uIHdpbGwgdGhyb3cgYCdNYXhpbXVtIGl0
ZXJhdGlvbiBsaW1pdCBleGNlZWRlZC4nYCBpZiB0aGUgbnVtYmVyIG9mCisgICAgICAgKiBpdGVy
YXRpb25zIGV4Y2VlZHMgMTAuCisgICAgICAgKgorICAgICAgICogVXN1YWxseSwgeW91IGRvbid0
IGNhbGwgYCRkaWdlc3QoKWAgZGlyZWN0bHkgaW4KKyAgICAgICAqIHtAbGluayBuZy5kaXJlY3Rp
dmU6bmdDb250cm9sbGVyIGNvbnRyb2xsZXJzfSBvciBpbgorICAgICAgICoge0BsaW5rIG5nLiRj
b21waWxlUHJvdmlkZXIjZGlyZWN0aXZlIGRpcmVjdGl2ZXN9LgorICAgICAgICogSW5zdGVhZCwg
eW91IHNob3VsZCBjYWxsIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRhcHBseSAkYXBwbHko
KX0gKHR5cGljYWxseSBmcm9tIHdpdGhpbgorICAgICAgICogYSB7QGxpbmsgbmcuJGNvbXBpbGVQ
cm92aWRlciNkaXJlY3RpdmUgZGlyZWN0aXZlfSksIHdoaWNoIHdpbGwgZm9yY2UgYSBgJGRpZ2Vz
dCgpYC4KKyAgICAgICAqCisgICAgICAgKiBJZiB5b3Ugd2FudCB0byBiZSBub3RpZmllZCB3aGVu
ZXZlciBgJGRpZ2VzdCgpYCBpcyBjYWxsZWQsCisgICAgICAgKiB5b3UgY2FuIHJlZ2lzdGVyIGEg
YHdhdGNoRXhwcmVzc2lvbmAgZnVuY3Rpb24gd2l0aAorICAgICAgICoge0BsaW5rIG5nLiRyb290
U2NvcGUuU2NvcGUjJHdhdGNoICR3YXRjaCgpfSB3aXRoIG5vIGBsaXN0ZW5lcmAuCisgICAgICAg
KgorICAgICAgICogSW4gdW5pdCB0ZXN0cywgeW91IG1heSBuZWVkIHRvIGNhbGwgYCRkaWdlc3Qo
KWAgdG8gc2ltdWxhdGUgdGhlIHNjb3BlIGxpZmUgY3ljbGUuCisgICAgICAgKgorICAgICAgICog
IyBFeGFtcGxlCisgICAgICAgKiBgYGBqcworICAgICAgICAgICB2YXIgc2NvcGUgPSAuLi47Cisg
ICAgICAgICAgIHNjb3BlLm5hbWUgPSAnbWlza28nOworICAgICAgICAgICBzY29wZS5jb3VudGVy
ID0gMDsKKworICAgICAgICAgICBleHBlY3Qoc2NvcGUuY291bnRlcikudG9FcXVhbCgwKTsKKyAg
ICAgICAgICAgc2NvcGUuJHdhdGNoKCduYW1lJywgZnVuY3Rpb24obmV3VmFsdWUsIG9sZFZhbHVl
KSB7CisgICAgICAgICAgICAgc2NvcGUuY291bnRlciA9IHNjb3BlLmNvdW50ZXIgKyAxOworICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgZXhwZWN0KHNjb3BlLmNvdW50ZXIpLnRvRXF1YWwoMCk7
CisKKyAgICAgICAgICAgc2NvcGUuJGRpZ2VzdCgpOworICAgICAgICAgICAvLyB0aGUgbGlzdGVu
ZXIgaXMgYWx3YXlzIGNhbGxlZCBkdXJpbmcgdGhlIGZpcnN0ICRkaWdlc3QgbG9vcCBhZnRlciBp
dCB3YXMgcmVnaXN0ZXJlZAorICAgICAgICAgICBleHBlY3Qoc2NvcGUuY291bnRlcikudG9FcXVh
bCgxKTsKKworICAgICAgICAgICBzY29wZS4kZGlnZXN0KCk7CisgICAgICAgICAgIC8vIGJ1dCBu
b3cgaXQgd2lsbCBub3QgYmUgY2FsbGVkIHVubGVzcyB0aGUgdmFsdWUgY2hhbmdlcworICAgICAg
ICAgICBleHBlY3Qoc2NvcGUuY291bnRlcikudG9FcXVhbCgxKTsKKworICAgICAgICAgICBzY29w
ZS5uYW1lID0gJ2FkYW0nOworICAgICAgICAgICBzY29wZS4kZGlnZXN0KCk7CisgICAgICAgICAg
IGV4cGVjdChzY29wZS5jb3VudGVyKS50b0VxdWFsKDIpOworICAgICAgICogYGBgCisgICAgICAg
KgorICAgICAgICovCisgICAgICAkZGlnZXN0OiBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHdh
dGNoLCB2YWx1ZSwgbGFzdCwKKyAgICAgICAgICAgIHdhdGNoZXJzLAorICAgICAgICAgICAgbGVu
Z3RoLAorICAgICAgICAgICAgZGlydHksIHR0bCA9IFRUTCwKKyAgICAgICAgICAgIG5leHQsIGN1
cnJlbnQsIHRhcmdldCA9IHRoaXMsCisgICAgICAgICAgICB3YXRjaExvZyA9IFtdLAorICAgICAg
ICAgICAgbG9nSWR4LCBsb2dNc2csIGFzeW5jVGFzazsKKworICAgICAgICBiZWdpblBoYXNlKCck
ZGlnZXN0Jyk7CisgICAgICAgIC8vIENoZWNrIGZvciBjaGFuZ2VzIHRvIGJyb3dzZXIgdXJsIHRo
YXQgaGFwcGVuZWQgaW4gc3luYyBiZWZvcmUgdGhlIGNhbGwgdG8gJGRpZ2VzdAorICAgICAgICAk
YnJvd3Nlci4kJGNoZWNrVXJsQ2hhbmdlKCk7CisKKyAgICAgICAgaWYgKHRoaXMgPT09ICRyb290
U2NvcGUgJiYgYXBwbHlBc3luY0lkICE9PSBudWxsKSB7CisgICAgICAgICAgLy8gSWYgdGhpcyBp
cyB0aGUgcm9vdCBzY29wZSwgYW5kICRhcHBseUFzeW5jIGhhcyBzY2hlZHVsZWQgYSBkZWZlcnJl
ZCAkYXBwbHkoKSwgdGhlbgorICAgICAgICAgIC8vIGNhbmNlbCB0aGUgc2NoZWR1bGVkICRhcHBs
eSBhbmQgZmx1c2ggdGhlIHF1ZXVlIG9mIGV4cHJlc3Npb25zIHRvIGJlIGV2YWx1YXRlZC4KKyAg
ICAgICAgICAkYnJvd3Nlci5kZWZlci5jYW5jZWwoYXBwbHlBc3luY0lkKTsKKyAgICAgICAgICBm
bHVzaEFwcGx5QXN5bmMoKTsKKyAgICAgICAgfQorCisgICAgICAgIGxhc3REaXJ0eVdhdGNoID0g
bnVsbDsKKworICAgICAgICBkbyB7IC8vICJ3aGlsZSBkaXJ0eSIgbG9vcAorICAgICAgICAgIGRp
cnR5ID0gZmFsc2U7CisgICAgICAgICAgY3VycmVudCA9IHRhcmdldDsKKworICAgICAgICAgIHdo
aWxlIChhc3luY1F1ZXVlLmxlbmd0aCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
ICAgYXN5bmNUYXNrID0gYXN5bmNRdWV1ZS5zaGlmdCgpOworICAgICAgICAgICAgICBhc3luY1Rh
c2suc2NvcGUuJGV2YWwoYXN5bmNUYXNrLmV4cHJlc3Npb24sIGFzeW5jVGFzay5sb2NhbHMpOwor
ICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAkZXhjZXB0aW9uSGFuZGxl
cihlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxhc3REaXJ0eVdhdGNoID0gbnVsbDsK
KyAgICAgICAgICB9CisKKyAgICAgICAgICB0cmF2ZXJzZVNjb3Blc0xvb3A6CisgICAgICAgICAg
ZG8geyAvLyAidHJhdmVyc2UgdGhlIHNjb3BlcyIgbG9vcAorICAgICAgICAgICAgaWYgKCh3YXRj
aGVycyA9IGN1cnJlbnQuJCR3YXRjaGVycykpIHsKKyAgICAgICAgICAgICAgLy8gcHJvY2VzcyBv
dXIgd2F0Y2hlcworICAgICAgICAgICAgICBsZW5ndGggPSB3YXRjaGVycy5sZW5ndGg7CisgICAg
ICAgICAgICAgIHdoaWxlIChsZW5ndGgtLSkgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICAgICAgICB3YXRjaCA9IHdhdGNoZXJzW2xlbmd0aF07CisgICAgICAgICAgICAgICAg
ICAvLyBNb3N0IGNvbW1vbiB3YXRjaGVzIGFyZSBvbiBwcmltaXRpdmVzLCBpbiB3aGljaCBjYXNl
IHdlIGNhbiBzaG9ydAorICAgICAgICAgICAgICAgICAgLy8gY2lyY3VpdCBpdCB3aXRoID09PSBv
cGVyYXRvciwgb25seSB3aGVuID09PSBmYWlscyBkbyB3ZSB1c2UgLmVxdWFscworICAgICAgICAg
ICAgICAgICAgaWYgKHdhdGNoKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgodmFsdWUgPSB3
YXRjaC5nZXQoY3VycmVudCkpICE9PSAobGFzdCA9IHdhdGNoLmxhc3QpICYmCisgICAgICAgICAg
ICAgICAgICAgICAgICAhKHdhdGNoLmVxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBl
cXVhbHModmFsdWUsIGxhc3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAodHlwZW9m
IHZhbHVlID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgbGFzdCA9PT0gJ251bWJlcicKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmJiBpc05hTih2YWx1ZSkgJiYgaXNOYU4obGFzdCkpKSkg
eworICAgICAgICAgICAgICAgICAgICAgIGRpcnR5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICBsYXN0RGlydHlXYXRjaCA9IHdhdGNoOworICAgICAgICAgICAgICAgICAgICAgIHdhdGNo
Lmxhc3QgPSB3YXRjaC5lcSA/IGNvcHkodmFsdWUsIG51bGwpIDogdmFsdWU7CisgICAgICAgICAg
ICAgICAgICAgICAgd2F0Y2guZm4odmFsdWUsICgobGFzdCA9PT0gaW5pdFdhdGNoVmFsKSA/IHZh
bHVlIDogbGFzdCksIGN1cnJlbnQpOworICAgICAgICAgICAgICAgICAgICAgIGlmICh0dGwgPCA1
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dJZHggPSA0IC0gdHRsOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCF3YXRjaExvZ1tsb2dJZHhdKSB3YXRjaExvZ1tsb2dJZHhdID0g
W107CisgICAgICAgICAgICAgICAgICAgICAgICB3YXRjaExvZ1tsb2dJZHhdLnB1c2goeworICAg
ICAgICAgICAgICAgICAgICAgICAgICBtc2c6IGlzRnVuY3Rpb24od2F0Y2guZXhwKSA/ICdmbjog
JyArICh3YXRjaC5leHAubmFtZSB8fCB3YXRjaC5leHAudG9TdHJpbmcoKSkgOiB3YXRjaC5leHAs
CisgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhbDogdmFsdWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9sZFZhbDogbGFzdAorICAgICAgICAgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdh
dGNoID09PSBsYXN0RGlydHlXYXRjaCkgeworICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRo
ZSBtb3N0IHJlY2VudGx5IGRpcnR5IHdhdGNoZXIgaXMgbm93IGNsZWFuLCBzaG9ydCBjaXJjdWl0
IHNpbmNlIHRoZSByZW1haW5pbmcgd2F0Y2hlcnMKKyAgICAgICAgICAgICAgICAgICAgICAvLyBo
YXZlIGFscmVhZHkgYmVlbiB0ZXN0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgZGlydHkgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhayB0cmF2ZXJzZVNjb3Blc0xvb3A7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgICAkZXhjZXB0aW9uSGFuZGxlcihlKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gSW5zYW5pdHkgV2FybmluZzogc2NvcGUgZGVwdGgtZmlyc3QgdHJhdmVyc2Fs
CisgICAgICAgICAgICAvLyB5ZXMsIHRoaXMgY29kZSBpcyBhIGJpdCBjcmF6eSwgYnV0IGl0IHdv
cmtzIGFuZCB3ZSBoYXZlIHRlc3RzIHRvIHByb3ZlIGl0IQorICAgICAgICAgICAgLy8gdGhpcyBw
aWVjZSBzaG91bGQgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIHRyYXZlcnNhbCBpbiAkYnJvYWRj
YXN0CisgICAgICAgICAgICBpZiAoIShuZXh0ID0gKChjdXJyZW50LiQkd2F0Y2hlcnNDb3VudCAm
JiBjdXJyZW50LiQkY2hpbGRIZWFkKSB8fAorICAgICAgICAgICAgICAgIChjdXJyZW50ICE9PSB0
YXJnZXQgJiYgY3VycmVudC4kJG5leHRTaWJsaW5nKSkpKSB7CisgICAgICAgICAgICAgIHdoaWxl
IChjdXJyZW50ICE9PSB0YXJnZXQgJiYgIShuZXh0ID0gY3VycmVudC4kJG5leHRTaWJsaW5nKSkg
eworICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LiRwYXJlbnQ7CisgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IHdoaWxlICgoY3VycmVudCA9IG5leHQp
KTsKKworICAgICAgICAgIC8vIGBicmVhayB0cmF2ZXJzZVNjb3Blc0xvb3A7YCB0YWtlcyB1cyB0
byBoZXJlCisKKyAgICAgICAgICBpZiAoKGRpcnR5IHx8IGFzeW5jUXVldWUubGVuZ3RoKSAmJiAh
KHR0bC0tKSkgeworICAgICAgICAgICAgY2xlYXJQaGFzZSgpOworICAgICAgICAgICAgdGhyb3cg
JHJvb3RTY29wZU1pbkVycignaW5mZGlnJywKKyAgICAgICAgICAgICAgICAnezB9ICRkaWdlc3Qo
KSBpdGVyYXRpb25zIHJlYWNoZWQuIEFib3J0aW5nIVxuJyArCisgICAgICAgICAgICAgICAgJ1dh
dGNoZXJzIGZpcmVkIGluIHRoZSBsYXN0IDUgaXRlcmF0aW9uczogezF9JywKKyAgICAgICAgICAg
ICAgICBUVEwsIHdhdGNoTG9nKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgfSB3aGlsZSAoZGly
dHkgfHwgYXN5bmNRdWV1ZS5sZW5ndGgpOworCisgICAgICAgIGNsZWFyUGhhc2UoKTsKKworICAg
ICAgICB3aGlsZSAocG9zdERpZ2VzdFF1ZXVlLmxlbmd0aCkgeworICAgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICBwb3N0RGlnZXN0UXVldWUuc2hpZnQoKSgpOworICAgICAgICAgIH0gY2F0Y2gg
KGUpIHsKKyAgICAgICAgICAgICRleGNlcHRpb25IYW5kbGVyKGUpOworICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgfSwKKworCisgICAgICAvKioKKyAgICAgICAqIEBuZ2RvYyBldmVudAor
ICAgICAgICogQG5hbWUgJHJvb3RTY29wZS5TY29wZSMkZGVzdHJveQorICAgICAgICogQGV2ZW50
VHlwZSBicm9hZGNhc3Qgb24gc2NvcGUgYmVpbmcgZGVzdHJveWVkCisgICAgICAgKgorICAgICAg
ICogQGRlc2NyaXB0aW9uCisgICAgICAgKiBCcm9hZGNhc3RlZCB3aGVuIGEgc2NvcGUgYW5kIGl0
cyBjaGlsZHJlbiBhcmUgYmVpbmcgZGVzdHJveWVkLgorICAgICAgICoKKyAgICAgICAqIE5vdGUg
dGhhdCwgaW4gQW5ndWxhckpTLCB0aGVyZSBpcyBhbHNvIGEgYCRkZXN0cm95YCBqUXVlcnkgZXZl
bnQsIHdoaWNoIGNhbiBiZSB1c2VkIHRvCisgICAgICAgKiBjbGVhbiB1cCBET00gYmluZGluZ3Mg
YmVmb3JlIGFuIGVsZW1lbnQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBET00uCisgICAgICAgKi8KKwor
ICAgICAgLyoqCisgICAgICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICAgKiBAbmFtZSAkcm9vdFNj
b3BlLlNjb3BlIyRkZXN0cm95CisgICAgICAgKiBAa2luZCBmdW5jdGlvbgorICAgICAgICoKKyAg
ICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAgICogUmVtb3ZlcyB0aGUgY3VycmVudCBzY29wZSAo
YW5kIGFsbCBvZiBpdHMgY2hpbGRyZW4pIGZyb20gdGhlIHBhcmVudCBzY29wZS4gUmVtb3ZhbCBp
bXBsaWVzCisgICAgICAgKiB0aGF0IGNhbGxzIHRvIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3Bl
IyRkaWdlc3QgJGRpZ2VzdCgpfSB3aWxsIG5vIGxvbmdlcgorICAgICAgICogcHJvcGFnYXRlIHRv
IHRoZSBjdXJyZW50IHNjb3BlIGFuZCBpdHMgY2hpbGRyZW4uIFJlbW92YWwgYWxzbyBpbXBsaWVz
IHRoYXQgdGhlIGN1cnJlbnQKKyAgICAgICAqIHNjb3BlIGlzIGVsaWdpYmxlIGZvciBnYXJiYWdl
IGNvbGxlY3Rpb24uCisgICAgICAgKgorICAgICAgICogVGhlIGAkZGVzdHJveSgpYCBpcyB1c3Vh
bGx5IHVzZWQgYnkgZGlyZWN0aXZlcyBzdWNoIGFzCisgICAgICAgKiB7QGxpbmsgbmcuZGlyZWN0
aXZlOm5nUmVwZWF0IG5nUmVwZWF0fSBmb3IgbWFuYWdpbmcgdGhlCisgICAgICAgKiB1bnJvbGxp
bmcgb2YgdGhlIGxvb3AuCisgICAgICAgKgorICAgICAgICogSnVzdCBiZWZvcmUgYSBzY29wZSBp
cyBkZXN0cm95ZWQsIGEgYCRkZXN0cm95YCBldmVudCBpcyBicm9hZGNhc3RlZCBvbiB0aGlzIHNj
b3BlLgorICAgICAgICogQXBwbGljYXRpb24gY29kZSBjYW4gcmVnaXN0ZXIgYSBgJGRlc3Ryb3lg
IGV2ZW50IGhhbmRsZXIgdGhhdCB3aWxsIGdpdmUgaXQgYSBjaGFuY2UgdG8KKyAgICAgICAqIHBl
cmZvcm0gYW55IG5lY2Vzc2FyeSBjbGVhbnVwLgorICAgICAgICoKKyAgICAgICAqIE5vdGUgdGhh
dCwgaW4gQW5ndWxhckpTLCB0aGVyZSBpcyBhbHNvIGEgYCRkZXN0cm95YCBqUXVlcnkgZXZlbnQs
IHdoaWNoIGNhbiBiZSB1c2VkIHRvCisgICAgICAgKiBjbGVhbiB1cCBET00gYmluZGluZ3MgYmVm
b3JlIGFuIGVsZW1lbnQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBET00uCisgICAgICAgKi8KKyAgICAg
ICRkZXN0cm95OiBmdW5jdGlvbigpIHsKKyAgICAgICAgLy8gV2UgY2FuJ3QgZGVzdHJveSBhIHNj
b3BlIHRoYXQgaGFzIGJlZW4gYWxyZWFkeSBkZXN0cm95ZWQuCisgICAgICAgIGlmICh0aGlzLiQk
ZGVzdHJveWVkKSByZXR1cm47CisgICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLiRwYXJlbnQ7CisK
KyAgICAgICAgdGhpcy4kYnJvYWRjYXN0KCckZGVzdHJveScpOworICAgICAgICB0aGlzLiQkZGVz
dHJveWVkID0gdHJ1ZTsKKworICAgICAgICBpZiAodGhpcyA9PT0gJHJvb3RTY29wZSkgeworICAg
ICAgICAgIC8vUmVtb3ZlIGhhbmRsZXJzIGF0dGFjaGVkIHRvIHdpbmRvdyB3aGVuICRyb290U2Nv
cGUgaXMgcmVtb3ZlZAorICAgICAgICAgICRicm93c2VyLiQkYXBwbGljYXRpb25EZXN0cm95ZWQo
KTsKKyAgICAgICAgfQorCisgICAgICAgIGluY3JlbWVudFdhdGNoZXJzQ291bnQodGhpcywgLXRo
aXMuJCR3YXRjaGVyc0NvdW50KTsKKyAgICAgICAgZm9yICh2YXIgZXZlbnROYW1lIGluIHRoaXMu
JCRsaXN0ZW5lckNvdW50KSB7CisgICAgICAgICAgZGVjcmVtZW50TGlzdGVuZXJDb3VudCh0aGlz
LCB0aGlzLiQkbGlzdGVuZXJDb3VudFtldmVudE5hbWVdLCBldmVudE5hbWUpOworICAgICAgICB9
CisKKyAgICAgICAgLy8gc2V2ZXIgYWxsIHRoZSByZWZlcmVuY2VzIHRvIHBhcmVudCBzY29wZXMg
KGFmdGVyIHRoaXMgY2xlYW51cCwgdGhlIGN1cnJlbnQgc2NvcGUgc2hvdWxkCisgICAgICAgIC8v
IG5vdCBiZSByZXRhaW5lZCBieSBhbnkgb2Ygb3VyIHJlZmVyZW5jZXMgYW5kIHNob3VsZCBiZSBl
bGlnaWJsZSBmb3IgZ2FyYmFnZSBjb2xsZWN0aW9uKQorICAgICAgICBpZiAocGFyZW50ICYmIHBh
cmVudC4kJGNoaWxkSGVhZCA9PSB0aGlzKSBwYXJlbnQuJCRjaGlsZEhlYWQgPSB0aGlzLiQkbmV4
dFNpYmxpbmc7CisgICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LiQkY2hpbGRUYWlsID09IHRo
aXMpIHBhcmVudC4kJGNoaWxkVGFpbCA9IHRoaXMuJCRwcmV2U2libGluZzsKKyAgICAgICAgaWYg
KHRoaXMuJCRwcmV2U2libGluZykgdGhpcy4kJHByZXZTaWJsaW5nLiQkbmV4dFNpYmxpbmcgPSB0
aGlzLiQkbmV4dFNpYmxpbmc7CisgICAgICAgIGlmICh0aGlzLiQkbmV4dFNpYmxpbmcpIHRoaXMu
JCRuZXh0U2libGluZy4kJHByZXZTaWJsaW5nID0gdGhpcy4kJHByZXZTaWJsaW5nOworCisgICAg
ICAgIC8vIERpc2FibGUgbGlzdGVuZXJzLCB3YXRjaGVycyBhbmQgYXBwbHkvZGlnZXN0IG1ldGhv
ZHMKKyAgICAgICAgdGhpcy4kZGVzdHJveSA9IHRoaXMuJGRpZ2VzdCA9IHRoaXMuJGFwcGx5ID0g
dGhpcy4kZXZhbEFzeW5jID0gdGhpcy4kYXBwbHlBc3luYyA9IG5vb3A7CisgICAgICAgIHRoaXMu
JG9uID0gdGhpcy4kd2F0Y2ggPSB0aGlzLiR3YXRjaEdyb3VwID0gZnVuY3Rpb24oKSB7IHJldHVy
biBub29wOyB9OworICAgICAgICB0aGlzLiQkbGlzdGVuZXJzID0ge307CisKKyAgICAgICAgLy8g
QWxsIG9mIHRoZSBjb2RlIGJlbG93IGlzIGJvZ3VzIGNvZGUgdGhhdCB3b3JrcyBhcm91bmQgVjgn
cyBtZW1vcnkgbGVhayB2aWEgb3B0aW1pemVkIGNvZGUKKyAgICAgICAgLy8gYW5kIGlubGluZSBj
YWNoZXMuCisgICAgICAgIC8vCisgICAgICAgIC8vIHNlZToKKyAgICAgICAgLy8gLSBodHRwczov
L2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MjA3MyNjMjYKKyAgICAgICAg
Ly8gLSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyLmpzL2lzc3Vlcy82Nzk0I2lz
c3VlY29tbWVudC0zODY0ODkwOQorICAgICAgICAvLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1
bGFyL2FuZ3VsYXIuanMvaXNzdWVzLzEzMTMjaXNzdWVjb21tZW50LTEwMzc4NDUxCisKKyAgICAg
ICAgdGhpcy4kcGFyZW50ID0gdGhpcy4kJG5leHRTaWJsaW5nID0gdGhpcy4kJHByZXZTaWJsaW5n
ID0gdGhpcy4kJGNoaWxkSGVhZCA9CisgICAgICAgICAgICB0aGlzLiQkY2hpbGRUYWlsID0gdGhp
cy4kcm9vdCA9IHRoaXMuJCR3YXRjaGVycyA9IG51bGw7CisgICAgICB9LAorCisgICAgICAvKioK
KyAgICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgICAqIEBuYW1lICRyb290U2NvcGUuU2NvcGUj
JGV2YWwKKyAgICAgICAqIEBraW5kIGZ1bmN0aW9uCisgICAgICAgKgorICAgICAgICogQGRlc2Ny
aXB0aW9uCisgICAgICAgKiBFeGVjdXRlcyB0aGUgYGV4cHJlc3Npb25gIG9uIHRoZSBjdXJyZW50
IHNjb3BlIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuIEFueSBleGNlcHRpb25zIGluCisgICAgICAg
KiB0aGUgZXhwcmVzc2lvbiBhcmUgcHJvcGFnYXRlZCAodW5jYXVnaHQpLiBUaGlzIGlzIHVzZWZ1
bCB3aGVuIGV2YWx1YXRpbmcgQW5ndWxhcgorICAgICAgICogZXhwcmVzc2lvbnMuCisgICAgICAg
KgorICAgICAgICogIyBFeGFtcGxlCisgICAgICAgKiBgYGBqcworICAgICAgICAgICB2YXIgc2Nv
cGUgPSBuZy4kcm9vdFNjb3BlLlNjb3BlKCk7CisgICAgICAgICAgIHNjb3BlLmEgPSAxOworICAg
ICAgICAgICBzY29wZS5iID0gMjsKKworICAgICAgICAgICBleHBlY3Qoc2NvcGUuJGV2YWwoJ2Er
YicpKS50b0VxdWFsKDMpOworICAgICAgICAgICBleHBlY3Qoc2NvcGUuJGV2YWwoZnVuY3Rpb24o
c2NvcGUpeyByZXR1cm4gc2NvcGUuYSArIHNjb3BlLmI7IH0pKS50b0VxdWFsKDMpOworICAgICAg
ICogYGBgCisgICAgICAgKgorICAgICAgICogQHBhcmFtIHsoc3RyaW5nfGZ1bmN0aW9uKCkpPX0g
ZXhwcmVzc2lvbiBBbiBhbmd1bGFyIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWQuCisgICAgICAg
KgorICAgICAgICogICAgLSBgc3RyaW5nYDogZXhlY3V0ZSB1c2luZyB0aGUgcnVsZXMgYXMgZGVm
aW5lZCBpbiAge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0uCisgICAgICAgKiAg
ICAtIGBmdW5jdGlvbihzY29wZSlgOiBleGVjdXRlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBjdXJy
ZW50IGBzY29wZWAgcGFyYW1ldGVyLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSB7KG9iamVj
dCk9fSBsb2NhbHMgTG9jYWwgdmFyaWFibGVzIG9iamVjdCwgdXNlZnVsIGZvciBvdmVycmlkaW5n
IHZhbHVlcyBpbiBzY29wZS4KKyAgICAgICAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0IG9mIGV2
YWx1YXRpbmcgdGhlIGV4cHJlc3Npb24uCisgICAgICAgKi8KKyAgICAgICRldmFsOiBmdW5jdGlv
bihleHByLCBsb2NhbHMpIHsKKyAgICAgICAgcmV0dXJuICRwYXJzZShleHByKSh0aGlzLCBsb2Nh
bHMpOworICAgICAgfSwKKworICAgICAgLyoqCisgICAgICAgKiBAbmdkb2MgbWV0aG9kCisgICAg
ICAgKiBAbmFtZSAkcm9vdFNjb3BlLlNjb3BlIyRldmFsQXN5bmMKKyAgICAgICAqIEBraW5kIGZ1
bmN0aW9uCisgICAgICAgKgorICAgICAgICogQGRlc2NyaXB0aW9uCisgICAgICAgKiBFeGVjdXRl
cyB0aGUgZXhwcmVzc2lvbiBvbiB0aGUgY3VycmVudCBzY29wZSBhdCBhIGxhdGVyIHBvaW50IGlu
IHRpbWUuCisgICAgICAgKgorICAgICAgICogVGhlIGAkZXZhbEFzeW5jYCBtYWtlcyBubyBndWFy
YW50ZWVzIGFzIHRvIHdoZW4gdGhlIGBleHByZXNzaW9uYCB3aWxsIGJlIGV4ZWN1dGVkLCBvbmx5
CisgICAgICAgKiB0aGF0OgorICAgICAgICoKKyAgICAgICAqICAgLSBpdCB3aWxsIGV4ZWN1dGUg
YWZ0ZXIgdGhlIGZ1bmN0aW9uIHRoYXQgc2NoZWR1bGVkIHRoZSBldmFsdWF0aW9uIChwcmVmZXJh
Ymx5IGJlZm9yZSBET00KKyAgICAgICAqICAgICByZW5kZXJpbmcpLgorICAgICAgICogICAtIGF0
IGxlYXN0IG9uZSB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkZGlnZXN0ICRkaWdlc3QgY3lj
bGV9IHdpbGwgYmUgcGVyZm9ybWVkIGFmdGVyCisgICAgICAgKiAgICAgYGV4cHJlc3Npb25gIGV4
ZWN1dGlvbi4KKyAgICAgICAqCisgICAgICAgKiBBbnkgZXhjZXB0aW9ucyBmcm9tIHRoZSBleGVj
dXRpb24gb2YgdGhlIGV4cHJlc3Npb24gYXJlIGZvcndhcmRlZCB0byB0aGUKKyAgICAgICAqIHtA
bGluayBuZy4kZXhjZXB0aW9uSGFuZGxlciAkZXhjZXB0aW9uSGFuZGxlcn0gc2VydmljZS4KKyAg
ICAgICAqCisgICAgICAgKiBfX05vdGU6X18gaWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb3V0
c2lkZSBvZiBhIGAkZGlnZXN0YCBjeWNsZSwgYSBuZXcgYCRkaWdlc3RgIGN5Y2xlCisgICAgICAg
KiB3aWxsIGJlIHNjaGVkdWxlZC4gSG93ZXZlciwgaXQgaXMgZW5jb3VyYWdlZCB0byBhbHdheXMg
Y2FsbCBjb2RlIHRoYXQgY2hhbmdlcyB0aGUgbW9kZWwKKyAgICAgICAqIGZyb20gd2l0aGluIGFu
IGAkYXBwbHlgIGNhbGwuIFRoYXQgaW5jbHVkZXMgY29kZSBldmFsdWF0ZWQgdmlhIGAkZXZhbEFz
eW5jYC4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0geyhzdHJpbmd8ZnVuY3Rpb24oKSk9fSBl
eHByZXNzaW9uIEFuIGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBiZSBleGVjdXRlZC4KKyAgICAgICAq
CisgICAgICAgKiAgICAtIGBzdHJpbmdgOiBleGVjdXRlIHVzaW5nIHRoZSBydWxlcyBhcyBkZWZp
bmVkIGluIHtAbGluayBndWlkZS9leHByZXNzaW9uIGV4cHJlc3Npb259LgorICAgICAgICogICAg
LSBgZnVuY3Rpb24oc2NvcGUpYDogZXhlY3V0ZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgY3VycmVu
dCBgc2NvcGVgIHBhcmFtZXRlci4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0geyhvYmplY3Qp
PX0gbG9jYWxzIExvY2FsIHZhcmlhYmxlcyBvYmplY3QsIHVzZWZ1bCBmb3Igb3ZlcnJpZGluZyB2
YWx1ZXMgaW4gc2NvcGUuCisgICAgICAgKi8KKyAgICAgICRldmFsQXN5bmM6IGZ1bmN0aW9uKGV4
cHIsIGxvY2FscykgeworICAgICAgICAvLyBpZiB3ZSBhcmUgb3V0c2lkZSBvZiBhbiAkZGlnZXN0
IGxvb3AgYW5kIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UgYXJlIHNjaGVkdWxpbmcgYXN5bmMK
KyAgICAgICAgLy8gdGFzayBhbHNvIHNjaGVkdWxlIGFzeW5jIGF1dG8tZmx1c2gKKyAgICAgICAg
aWYgKCEkcm9vdFNjb3BlLiQkcGhhc2UgJiYgIWFzeW5jUXVldWUubGVuZ3RoKSB7CisgICAgICAg
ICAgJGJyb3dzZXIuZGVmZXIoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAoYXN5bmNRdWV1
ZS5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgJHJvb3RTY29wZS4kZGlnZXN0KCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBhc3luY1F1ZXVlLnB1
c2goe3Njb3BlOiB0aGlzLCBleHByZXNzaW9uOiBleHByLCBsb2NhbHM6IGxvY2Fsc30pOworICAg
ICAgfSwKKworICAgICAgJCRwb3N0RGlnZXN0OiBmdW5jdGlvbihmbikgeworICAgICAgICBwb3N0
RGlnZXN0UXVldWUucHVzaChmbik7CisgICAgICB9LAorCisgICAgICAvKioKKyAgICAgICAqIEBu
Z2RvYyBtZXRob2QKKyAgICAgICAqIEBuYW1lICRyb290U2NvcGUuU2NvcGUjJGFwcGx5CisgICAg
ICAgKiBAa2luZCBmdW5jdGlvbgorICAgICAgICoKKyAgICAgICAqIEBkZXNjcmlwdGlvbgorICAg
ICAgICogYCRhcHBseSgpYCBpcyB1c2VkIHRvIGV4ZWN1dGUgYW4gZXhwcmVzc2lvbiBpbiBhbmd1
bGFyIGZyb20gb3V0c2lkZSBvZiB0aGUgYW5ndWxhcgorICAgICAgICogZnJhbWV3b3JrLiAoRm9y
IGV4YW1wbGUgZnJvbSBicm93c2VyIERPTSBldmVudHMsIHNldFRpbWVvdXQsIFhIUiBvciB0aGly
ZCBwYXJ0eSBsaWJyYXJpZXMpLgorICAgICAgICogQmVjYXVzZSB3ZSBhcmUgY2FsbGluZyBpbnRv
IHRoZSBhbmd1bGFyIGZyYW1ld29yayB3ZSBuZWVkIHRvIHBlcmZvcm0gcHJvcGVyIHNjb3BlIGxp
ZmUKKyAgICAgICAqIGN5Y2xlIG9mIHtAbGluayBuZy4kZXhjZXB0aW9uSGFuZGxlciBleGNlcHRp
b24gaGFuZGxpbmd9LAorICAgICAgICoge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGRpZ2Vz
dCBleGVjdXRpbmcgd2F0Y2hlc30uCisgICAgICAgKgorICAgICAgICogIyMgTGlmZSBjeWNsZQor
ICAgICAgICoKKyAgICAgICAqICMgUHNldWRvLUNvZGUgb2YgYCRhcHBseSgpYAorICAgICAgICog
YGBganMKKyAgICAgICAgICAgZnVuY3Rpb24gJGFwcGx5KGV4cHIpIHsKKyAgICAgICAgICAgICB0
cnkgeworICAgICAgICAgICAgICAgcmV0dXJuICRldmFsKGV4cHIpOworICAgICAgICAgICAgIH0g
Y2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICRleGNlcHRpb25IYW5kbGVyKGUpOworICAgICAg
ICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAkcm9vdC4kZGlnZXN0KCk7CisgICAg
ICAgICAgICAgfQorICAgICAgICAgICB9CisgICAgICAgKiBgYGAKKyAgICAgICAqCisgICAgICAg
KgorICAgICAgICogU2NvcGUncyBgJGFwcGx5KClgIG1ldGhvZCB0cmFuc2l0aW9ucyB0aHJvdWdo
IHRoZSBmb2xsb3dpbmcgc3RhZ2VzOgorICAgICAgICoKKyAgICAgICAqIDEuIFRoZSB7QGxpbmsg
Z3VpZGUvZXhwcmVzc2lvbiBleHByZXNzaW9ufSBpcyBleGVjdXRlZCB1c2luZyB0aGUKKyAgICAg
ICAqICAgIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRldmFsICRldmFsKCl9IG1ldGhvZC4K
KyAgICAgICAqIDIuIEFueSBleGNlcHRpb25zIGZyb20gdGhlIGV4ZWN1dGlvbiBvZiB0aGUgZXhw
cmVzc2lvbiBhcmUgZm9yd2FyZGVkIHRvIHRoZQorICAgICAgICogICAge0BsaW5rIG5nLiRleGNl
cHRpb25IYW5kbGVyICRleGNlcHRpb25IYW5kbGVyfSBzZXJ2aWNlLgorICAgICAgICogMy4gVGhl
IHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyR3YXRjaCB3YXRjaH0gbGlzdGVuZXJzIGFyZSBm
aXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUKKyAgICAgICAqICAgIGV4cHJlc3Npb24gd2FzIGV4
ZWN1dGVkIHVzaW5nIHRoZSB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkZGlnZXN0ICRkaWdl
c3QoKX0gbWV0aG9kLgorICAgICAgICoKKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0geyhzdHJp
bmd8ZnVuY3Rpb24oKSk9fSBleHAgQW4gYW5ndWxhciBleHByZXNzaW9uIHRvIGJlIGV4ZWN1dGVk
LgorICAgICAgICoKKyAgICAgICAqICAgIC0gYHN0cmluZ2A6IGV4ZWN1dGUgdXNpbmcgdGhlIHJ1
bGVzIGFzIGRlZmluZWQgaW4ge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0uCisg
ICAgICAgKiAgICAtIGBmdW5jdGlvbihzY29wZSlgOiBleGVjdXRlIHRoZSBmdW5jdGlvbiB3aXRo
IGN1cnJlbnQgYHNjb3BlYCBwYXJhbWV0ZXIuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMg
eyp9IFRoZSByZXN1bHQgb2YgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbi4KKyAgICAgICAqLwor
ICAgICAgJGFwcGx5OiBmdW5jdGlvbihleHByKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAg
YmVnaW5QaGFzZSgnJGFwcGx5Jyk7CisgICAgICAgICAgcmV0dXJuIHRoaXMuJGV2YWwoZXhwcik7
CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAkZXhjZXB0aW9uSGFuZGxlcihlKTsK
KyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICBjbGVhclBoYXNlKCk7CisgICAgICAgICAg
dHJ5IHsKKyAgICAgICAgICAgICRyb290U2NvcGUuJGRpZ2VzdCgpOworICAgICAgICAgIH0gY2F0
Y2ggKGUpIHsKKyAgICAgICAgICAgICRleGNlcHRpb25IYW5kbGVyKGUpOworICAgICAgICAgICAg
dGhyb3cgZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0sCisKKyAgICAgIC8qKgor
ICAgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAgICogQG5hbWUgJHJvb3RTY29wZS5TY29wZSMk
YXBwbHlBc3luYworICAgICAgICogQGtpbmQgZnVuY3Rpb24KKyAgICAgICAqCisgICAgICAgKiBA
ZGVzY3JpcHRpb24KKyAgICAgICAqIFNjaGVkdWxlIHRoZSBpbnZvY2F0aW9uIG9mICRhcHBseSB0
byBvY2N1ciBhdCBhIGxhdGVyIHRpbWUuIFRoZSBhY3R1YWwgdGltZSBkaWZmZXJlbmNlCisgICAg
ICAgKiB2YXJpZXMgYWNyb3NzIGJyb3dzZXJzLCBidXQgaXMgdHlwaWNhbGx5IGFyb3VuZCB+MTAg
bWlsbGlzZWNvbmRzLgorICAgICAgICoKKyAgICAgICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gcXVl
dWUgdXAgbXVsdGlwbGUgZXhwcmVzc2lvbnMgd2hpY2ggbmVlZCB0byBiZSBldmFsdWF0ZWQgaW4g
dGhlIHNhbWUKKyAgICAgICAqIGRpZ2VzdC4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0geyhz
dHJpbmd8ZnVuY3Rpb24oKSk9fSBleHAgQW4gYW5ndWxhciBleHByZXNzaW9uIHRvIGJlIGV4ZWN1
dGVkLgorICAgICAgICoKKyAgICAgICAqICAgIC0gYHN0cmluZ2A6IGV4ZWN1dGUgdXNpbmcgdGhl
IHJ1bGVzIGFzIGRlZmluZWQgaW4ge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0u
CisgICAgICAgKiAgICAtIGBmdW5jdGlvbihzY29wZSlgOiBleGVjdXRlIHRoZSBmdW5jdGlvbiB3
aXRoIGN1cnJlbnQgYHNjb3BlYCBwYXJhbWV0ZXIuCisgICAgICAgKi8KKyAgICAgICRhcHBseUFz
eW5jOiBmdW5jdGlvbihleHByKSB7CisgICAgICAgIHZhciBzY29wZSA9IHRoaXM7CisgICAgICAg
IGV4cHIgJiYgYXBwbHlBc3luY1F1ZXVlLnB1c2goJGFwcGx5QXN5bmNFeHByZXNzaW9uKTsKKyAg
ICAgICAgc2NoZWR1bGVBcHBseUFzeW5jKCk7CisKKyAgICAgICAgZnVuY3Rpb24gJGFwcGx5QXN5
bmNFeHByZXNzaW9uKCkgeworICAgICAgICAgIHNjb3BlLiRldmFsKGV4cHIpOworICAgICAgICB9
CisgICAgICB9LAorCisgICAgICAvKioKKyAgICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgICAq
IEBuYW1lICRyb290U2NvcGUuU2NvcGUjJG9uCisgICAgICAgKiBAa2luZCBmdW5jdGlvbgorICAg
ICAgICoKKyAgICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAgICogTGlzdGVucyBvbiBldmVudHMg
b2YgYSBnaXZlbiB0eXBlLiBTZWUge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGVtaXQgJGVt
aXR9IGZvcgorICAgICAgICogZGlzY3Vzc2lvbiBvZiBldmVudCBsaWZlIGN5Y2xlLgorICAgICAg
ICoKKyAgICAgICAqIFRoZSBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBmb3JtYXQgaXM6IGBmdW5j
dGlvbihldmVudCwgYXJncy4uLilgLiBUaGUgYGV2ZW50YCBvYmplY3QKKyAgICAgICAqIHBhc3Nl
ZCBpbnRvIHRoZSBsaXN0ZW5lciBoYXMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOgorICAgICAg
ICoKKyAgICAgICAqICAgLSBgdGFyZ2V0U2NvcGVgIC0gYHtTY29wZX1gOiB0aGUgc2NvcGUgb24g
d2hpY2ggdGhlIGV2ZW50IHdhcyBgJGVtaXRgLWVkIG9yCisgICAgICAgKiAgICAgYCRicm9hZGNh
c3RgLWVkLgorICAgICAgICogICAtIGBjdXJyZW50U2NvcGVgIC0gYHtTY29wZX1gOiB0aGUgc2Nv
cGUgdGhhdCBpcyBjdXJyZW50bHkgaGFuZGxpbmcgdGhlIGV2ZW50LiBPbmNlIHRoZQorICAgICAg
ICogICAgIGV2ZW50IHByb3BhZ2F0ZXMgdGhyb3VnaCB0aGUgc2NvcGUgaGllcmFyY2h5LCB0aGlz
IHByb3BlcnR5IGlzIHNldCB0byBudWxsLgorICAgICAgICogICAtIGBuYW1lYCAtIGB7c3RyaW5n
fWA6IG5hbWUgb2YgdGhlIGV2ZW50LgorICAgICAgICogICAtIGBzdG9wUHJvcGFnYXRpb25gIC0g
YHtmdW5jdGlvbj19YDogY2FsbGluZyBgc3RvcFByb3BhZ2F0aW9uYCBmdW5jdGlvbiB3aWxsIGNh
bmNlbAorICAgICAgICogICAgIGZ1cnRoZXIgZXZlbnQgcHJvcGFnYXRpb24gKGF2YWlsYWJsZSBv
bmx5IGZvciBldmVudHMgdGhhdCB3ZXJlIGAkZW1pdGAtZWQpLgorICAgICAgICogICAtIGBwcmV2
ZW50RGVmYXVsdGAgLSBge2Z1bmN0aW9ufWA6IGNhbGxpbmcgYHByZXZlbnREZWZhdWx0YCBzZXRz
IGBkZWZhdWx0UHJldmVudGVkYCBmbGFnCisgICAgICAgKiAgICAgdG8gdHJ1ZS4KKyAgICAgICAq
ICAgLSBgZGVmYXVsdFByZXZlbnRlZGAgLSBge2Jvb2xlYW59YDogdHJ1ZSBpZiBgcHJldmVudERl
ZmF1bHRgIHdhcyBjYWxsZWQuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5h
bWUgRXZlbnQgbmFtZSB0byBsaXN0ZW4gb24uCisgICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGV2
ZW50LCAuLi5hcmdzKX0gbGlzdGVuZXIgRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBldmVudCBp
cyBlbWl0dGVkLgorICAgICAgICogQHJldHVybnMge2Z1bmN0aW9uKCl9IFJldHVybnMgYSBkZXJl
Z2lzdHJhdGlvbiBmdW5jdGlvbiBmb3IgdGhpcyBsaXN0ZW5lci4KKyAgICAgICAqLworICAgICAg
JG9uOiBmdW5jdGlvbihuYW1lLCBsaXN0ZW5lcikgeworICAgICAgICB2YXIgbmFtZWRMaXN0ZW5l
cnMgPSB0aGlzLiQkbGlzdGVuZXJzW25hbWVdOworICAgICAgICBpZiAoIW5hbWVkTGlzdGVuZXJz
KSB7CisgICAgICAgICAgdGhpcy4kJGxpc3RlbmVyc1tuYW1lXSA9IG5hbWVkTGlzdGVuZXJzID0g
W107CisgICAgICAgIH0KKyAgICAgICAgbmFtZWRMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7CisK
KyAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzOworICAgICAgICBkbyB7CisgICAgICAgICAgaWYg
KCFjdXJyZW50LiQkbGlzdGVuZXJDb3VudFtuYW1lXSkgeworICAgICAgICAgICAgY3VycmVudC4k
JGxpc3RlbmVyQ291bnRbbmFtZV0gPSAwOworICAgICAgICAgIH0KKyAgICAgICAgICBjdXJyZW50
LiQkbGlzdGVuZXJDb3VudFtuYW1lXSsrOworICAgICAgICB9IHdoaWxlICgoY3VycmVudCA9IGN1
cnJlbnQuJHBhcmVudCkpOworCisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHZhciBpbmRleE9mTGlzdGVuZXIgPSBuYW1lZExp
c3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTsKKyAgICAgICAgICBpZiAoaW5kZXhPZkxpc3RlbmVy
ICE9PSAtMSkgeworICAgICAgICAgICAgbmFtZWRMaXN0ZW5lcnNbaW5kZXhPZkxpc3RlbmVyXSA9
IG51bGw7CisgICAgICAgICAgICBkZWNyZW1lbnRMaXN0ZW5lckNvdW50KHNlbGYsIDEsIG5hbWUp
OworICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgIH0sCisKKworICAgICAgLyoqCisgICAg
ICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICAgKiBAbmFtZSAkcm9vdFNjb3BlLlNjb3BlIyRlbWl0
CisgICAgICAgKiBAa2luZCBmdW5jdGlvbgorICAgICAgICoKKyAgICAgICAqIEBkZXNjcmlwdGlv
bgorICAgICAgICogRGlzcGF0Y2hlcyBhbiBldmVudCBgbmFtZWAgdXB3YXJkcyB0aHJvdWdoIHRo
ZSBzY29wZSBoaWVyYXJjaHkgbm90aWZ5aW5nIHRoZQorICAgICAgICogcmVnaXN0ZXJlZCB7QGxp
bmsgbmcuJHJvb3RTY29wZS5TY29wZSMkb259IGxpc3RlbmVycy4KKyAgICAgICAqCisgICAgICAg
KiBUaGUgZXZlbnQgbGlmZSBjeWNsZSBzdGFydHMgYXQgdGhlIHNjb3BlIG9uIHdoaWNoIGAkZW1p
dGAgd2FzIGNhbGxlZC4gQWxsCisgICAgICAgKiB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMk
b24gbGlzdGVuZXJzfSBsaXN0ZW5pbmcgZm9yIGBuYW1lYCBldmVudCBvbiB0aGlzIHNjb3BlIGdl
dAorICAgICAgICogbm90aWZpZWQuIEFmdGVyd2FyZHMsIHRoZSBldmVudCB0cmF2ZXJzZXMgdXB3
YXJkcyB0b3dhcmQgdGhlIHJvb3Qgc2NvcGUgYW5kIGNhbGxzIGFsbAorICAgICAgICogcmVnaXN0
ZXJlZCBsaXN0ZW5lcnMgYWxvbmcgdGhlIHdheS4gVGhlIGV2ZW50IHdpbGwgc3RvcCBwcm9wYWdh
dGluZyBpZiBvbmUgb2YgdGhlIGxpc3RlbmVycworICAgICAgICogY2FuY2VscyBpdC4KKyAgICAg
ICAqCisgICAgICAgKiBBbnkgZXhjZXB0aW9uIGVtaXR0ZWQgZnJvbSB0aGUge0BsaW5rIG5nLiRy
b290U2NvcGUuU2NvcGUjJG9uIGxpc3RlbmVyc30gd2lsbCBiZSBwYXNzZWQKKyAgICAgICAqIG9u
dG8gdGhlIHtAbGluayBuZy4kZXhjZXB0aW9uSGFuZGxlciAkZXhjZXB0aW9uSGFuZGxlcn0gc2Vy
dmljZS4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBFdmVudCBuYW1l
IHRvIGVtaXQuCisgICAgICAgKiBAcGFyYW0gey4uLip9IGFyZ3MgT3B0aW9uYWwgb25lIG9yIG1v
cmUgYXJndW1lbnRzIHdoaWNoIHdpbGwgYmUgcGFzc2VkIG9udG8gdGhlIGV2ZW50IGxpc3RlbmVy
cy4KKyAgICAgICAqIEByZXR1cm4ge09iamVjdH0gRXZlbnQgb2JqZWN0IChzZWUge0BsaW5rIG5n
LiRyb290U2NvcGUuU2NvcGUjJG9ufSkuCisgICAgICAgKi8KKyAgICAgICRlbWl0OiBmdW5jdGlv
bihuYW1lLCBhcmdzKSB7CisgICAgICAgIHZhciBlbXB0eSA9IFtdLAorICAgICAgICAgICAgbmFt
ZWRMaXN0ZW5lcnMsCisgICAgICAgICAgICBzY29wZSA9IHRoaXMsCisgICAgICAgICAgICBzdG9w
UHJvcGFnYXRpb24gPSBmYWxzZSwKKyAgICAgICAgICAgIGV2ZW50ID0geworICAgICAgICAgICAg
ICBuYW1lOiBuYW1lLAorICAgICAgICAgICAgICB0YXJnZXRTY29wZTogc2NvcGUsCisgICAgICAg
ICAgICAgIHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7c3RvcFByb3BhZ2F0aW9uID0gdHJ1
ZTt9LAorICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICAgICAgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7CisgICAgICAgICAgICAgIH0s
CisgICAgICAgICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQ6IGZhbHNlCisgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgbGlzdGVuZXJBcmdzID0gY29uY2F0KFtldmVudF0sIGFyZ3VtZW50cywgMSks
CisgICAgICAgICAgICBpLCBsZW5ndGg7CisKKyAgICAgICAgZG8geworICAgICAgICAgIG5hbWVk
TGlzdGVuZXJzID0gc2NvcGUuJCRsaXN0ZW5lcnNbbmFtZV0gfHwgZW1wdHk7CisgICAgICAgICAg
ZXZlbnQuY3VycmVudFNjb3BlID0gc2NvcGU7CisgICAgICAgICAgZm9yIChpID0gMCwgbGVuZ3Ro
ID0gbmFtZWRMaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKKworICAgICAgICAg
ICAgLy8gaWYgbGlzdGVuZXJzIHdlcmUgZGVyZWdpc3RlcmVkLCBkZWZyYWdtZW50IHRoZSBhcnJh
eQorICAgICAgICAgICAgaWYgKCFuYW1lZExpc3RlbmVyc1tpXSkgeworICAgICAgICAgICAgICBu
YW1lZExpc3RlbmVycy5zcGxpY2UoaSwgMSk7CisgICAgICAgICAgICAgIGktLTsKKyAgICAgICAg
ICAgICAgbGVuZ3RoLS07CisgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgLy9hbGxvdyBhbGwgbGlzdGVuZXJzIGF0
dGFjaGVkIHRvIHRoZSBjdXJyZW50IHNjb3BlIHRvIHJ1bgorICAgICAgICAgICAgICBuYW1lZExp
c3RlbmVyc1tpXS5hcHBseShudWxsLCBsaXN0ZW5lckFyZ3MpOworICAgICAgICAgICAgfSBjYXRj
aCAoZSkgeworICAgICAgICAgICAgICAkZXhjZXB0aW9uSGFuZGxlcihlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICB9CisgICAgICAgICAgLy9pZiBhbnkgbGlzdGVuZXIgb24gdGhlIGN1cnJl
bnQgc2NvcGUgc3RvcHMgcHJvcGFnYXRpb24sIHByZXZlbnQgYnViYmxpbmcKKyAgICAgICAgICBp
ZiAoc3RvcFByb3BhZ2F0aW9uKSB7CisgICAgICAgICAgICBldmVudC5jdXJyZW50U2NvcGUgPSBu
dWxsOworICAgICAgICAgICAgcmV0dXJuIGV2ZW50OworICAgICAgICAgIH0KKyAgICAgICAgICAv
L3RyYXZlcnNlIHVwd2FyZHMKKyAgICAgICAgICBzY29wZSA9IHNjb3BlLiRwYXJlbnQ7CisgICAg
ICAgIH0gd2hpbGUgKHNjb3BlKTsKKworICAgICAgICBldmVudC5jdXJyZW50U2NvcGUgPSBudWxs
OworCisgICAgICAgIHJldHVybiBldmVudDsKKyAgICAgIH0sCisKKworICAgICAgLyoqCisgICAg
ICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICAgKiBAbmFtZSAkcm9vdFNjb3BlLlNjb3BlIyRicm9h
ZGNhc3QKKyAgICAgICAqIEBraW5kIGZ1bmN0aW9uCisgICAgICAgKgorICAgICAgICogQGRlc2Ny
aXB0aW9uCisgICAgICAgKiBEaXNwYXRjaGVzIGFuIGV2ZW50IGBuYW1lYCBkb3dud2FyZHMgdG8g
YWxsIGNoaWxkIHNjb3BlcyAoYW5kIHRoZWlyIGNoaWxkcmVuKSBub3RpZnlpbmcgdGhlCisgICAg
ICAgKiByZWdpc3RlcmVkIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRvbn0gbGlzdGVuZXJz
LgorICAgICAgICoKKyAgICAgICAqIFRoZSBldmVudCBsaWZlIGN5Y2xlIHN0YXJ0cyBhdCB0aGUg
c2NvcGUgb24gd2hpY2ggYCRicm9hZGNhc3RgIHdhcyBjYWxsZWQuIEFsbAorICAgICAgICoge0Bs
aW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJG9uIGxpc3RlbmVyc30gbGlzdGVuaW5nIGZvciBgbmFt
ZWAgZXZlbnQgb24gdGhpcyBzY29wZSBnZXQKKyAgICAgICAqIG5vdGlmaWVkLiBBZnRlcndhcmRz
LCB0aGUgZXZlbnQgcHJvcGFnYXRlcyB0byBhbGwgZGlyZWN0IGFuZCBpbmRpcmVjdCBzY29wZXMg
b2YgdGhlIGN1cnJlbnQKKyAgICAgICAqIHNjb3BlIGFuZCBjYWxscyBhbGwgcmVnaXN0ZXJlZCBs
aXN0ZW5lcnMgYWxvbmcgdGhlIHdheS4gVGhlIGV2ZW50IGNhbm5vdCBiZSBjYW5jZWxlZC4KKyAg
ICAgICAqCisgICAgICAgKiBBbnkgZXhjZXB0aW9uIGVtaXR0ZWQgZnJvbSB0aGUge0BsaW5rIG5n
LiRyb290U2NvcGUuU2NvcGUjJG9uIGxpc3RlbmVyc30gd2lsbCBiZSBwYXNzZWQKKyAgICAgICAq
IG9udG8gdGhlIHtAbGluayBuZy4kZXhjZXB0aW9uSGFuZGxlciAkZXhjZXB0aW9uSGFuZGxlcn0g
c2VydmljZS4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBFdmVudCBu
YW1lIHRvIGJyb2FkY2FzdC4KKyAgICAgICAqIEBwYXJhbSB7Li4uKn0gYXJncyBPcHRpb25hbCBv
bmUgb3IgbW9yZSBhcmd1bWVudHMgd2hpY2ggd2lsbCBiZSBwYXNzZWQgb250byB0aGUgZXZlbnQg
bGlzdGVuZXJzLgorICAgICAgICogQHJldHVybiB7T2JqZWN0fSBFdmVudCBvYmplY3QsIHNlZSB7
QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkb259CisgICAgICAgKi8KKyAgICAgICRicm9hZGNh
c3Q6IGZ1bmN0aW9uKG5hbWUsIGFyZ3MpIHsKKyAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMsCisg
ICAgICAgICAgICBjdXJyZW50ID0gdGFyZ2V0LAorICAgICAgICAgICAgbmV4dCA9IHRhcmdldCwK
KyAgICAgICAgICAgIGV2ZW50ID0geworICAgICAgICAgICAgICBuYW1lOiBuYW1lLAorICAgICAg
ICAgICAgICB0YXJnZXRTY29wZTogdGFyZ2V0LAorICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVs
dDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCA9
IHRydWU7CisgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQ6
IGZhbHNlCisgICAgICAgICAgICB9OworCisgICAgICAgIGlmICghdGFyZ2V0LiQkbGlzdGVuZXJD
b3VudFtuYW1lXSkgcmV0dXJuIGV2ZW50OworCisgICAgICAgIHZhciBsaXN0ZW5lckFyZ3MgPSBj
b25jYXQoW2V2ZW50XSwgYXJndW1lbnRzLCAxKSwKKyAgICAgICAgICAgIGxpc3RlbmVycywgaSwg
bGVuZ3RoOworCisgICAgICAgIC8vZG93biB3aGlsZSB5b3UgY2FuLCB0aGVuIHVwIGFuZCBuZXh0
IHNpYmxpbmcgb3IgdXAgYW5kIG5leHQgc2libGluZyB1bnRpbCBiYWNrIGF0IHJvb3QKKyAgICAg
ICAgd2hpbGUgKChjdXJyZW50ID0gbmV4dCkpIHsKKyAgICAgICAgICBldmVudC5jdXJyZW50U2Nv
cGUgPSBjdXJyZW50OworICAgICAgICAgIGxpc3RlbmVycyA9IGN1cnJlbnQuJCRsaXN0ZW5lcnNb
bmFtZV0gfHwgW107CisgICAgICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gbGlzdGVuZXJzLmxl
bmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAvLyBpZiBsaXN0ZW5lcnMgd2Vy
ZSBkZXJlZ2lzdGVyZWQsIGRlZnJhZ21lbnQgdGhlIGFycmF5CisgICAgICAgICAgICBpZiAoIWxp
c3RlbmVyc1tpXSkgeworICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpOworICAg
ICAgICAgICAgICBpLS07CisgICAgICAgICAgICAgIGxlbmd0aC0tOworICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
ICAgbGlzdGVuZXJzW2ldLmFwcGx5KG51bGwsIGxpc3RlbmVyQXJncyk7CisgICAgICAgICAgICB9
IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICRleGNlcHRpb25IYW5kbGVyKGUpOworICAgICAg
ICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIC8vIEluc2FuaXR5IFdhcm5pbmc6IHNj
b3BlIGRlcHRoLWZpcnN0IHRyYXZlcnNhbAorICAgICAgICAgIC8vIHllcywgdGhpcyBjb2RlIGlz
IGEgYml0IGNyYXp5LCBidXQgaXQgd29ya3MgYW5kIHdlIGhhdmUgdGVzdHMgdG8gcHJvdmUgaXQh
CisgICAgICAgICAgLy8gdGhpcyBwaWVjZSBzaG91bGQgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhl
IHRyYXZlcnNhbCBpbiAkZGlnZXN0CisgICAgICAgICAgLy8gKHRob3VnaCBpdCBkaWZmZXJzIGR1
ZSB0byBoYXZpbmcgdGhlIGV4dHJhIGNoZWNrIGZvciAkJGxpc3RlbmVyQ291bnQpCisgICAgICAg
ICAgaWYgKCEobmV4dCA9ICgoY3VycmVudC4kJGxpc3RlbmVyQ291bnRbbmFtZV0gJiYgY3VycmVu
dC4kJGNoaWxkSGVhZCkgfHwKKyAgICAgICAgICAgICAgKGN1cnJlbnQgIT09IHRhcmdldCAmJiBj
dXJyZW50LiQkbmV4dFNpYmxpbmcpKSkpIHsKKyAgICAgICAgICAgIHdoaWxlIChjdXJyZW50ICE9
PSB0YXJnZXQgJiYgIShuZXh0ID0gY3VycmVudC4kJG5leHRTaWJsaW5nKSkgeworICAgICAgICAg
ICAgICBjdXJyZW50ID0gY3VycmVudC4kcGFyZW50OworICAgICAgICAgICAgfQorICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGV2ZW50LmN1cnJlbnRTY29wZSA9IG51bGw7CisgICAg
ICAgIHJldHVybiBldmVudDsKKyAgICAgIH0KKyAgICB9OworCisgICAgdmFyICRyb290U2NvcGUg
PSBuZXcgU2NvcGUoKTsKKworICAgIC8vVGhlIGludGVybmFsIHF1ZXVlcy4gRXhwb3NlIHRoZW0g
b24gdGhlICRyb290U2NvcGUgZm9yIGRlYnVnZ2luZy90ZXN0aW5nIHB1cnBvc2VzLgorICAgIHZh
ciBhc3luY1F1ZXVlID0gJHJvb3RTY29wZS4kJGFzeW5jUXVldWUgPSBbXTsKKyAgICB2YXIgcG9z
dERpZ2VzdFF1ZXVlID0gJHJvb3RTY29wZS4kJHBvc3REaWdlc3RRdWV1ZSA9IFtdOworICAgIHZh
ciBhcHBseUFzeW5jUXVldWUgPSAkcm9vdFNjb3BlLiQkYXBwbHlBc3luY1F1ZXVlID0gW107CisK
KyAgICByZXR1cm4gJHJvb3RTY29wZTsKKworCisgICAgZnVuY3Rpb24gYmVnaW5QaGFzZShwaGFz
ZSkgeworICAgICAgaWYgKCRyb290U2NvcGUuJCRwaGFzZSkgeworICAgICAgICB0aHJvdyAkcm9v
dFNjb3BlTWluRXJyKCdpbnByb2cnLCAnezB9IGFscmVhZHkgaW4gcHJvZ3Jlc3MnLCAkcm9vdFNj
b3BlLiQkcGhhc2UpOworICAgICAgfQorCisgICAgICAkcm9vdFNjb3BlLiQkcGhhc2UgPSBwaGFz
ZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjbGVhclBoYXNlKCkgeworICAgICAgJHJvb3RTY29w
ZS4kJHBoYXNlID0gbnVsbDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpbmNyZW1lbnRXYXRjaGVy
c0NvdW50KGN1cnJlbnQsIGNvdW50KSB7CisgICAgICBkbyB7CisgICAgICAgIGN1cnJlbnQuJCR3
YXRjaGVyc0NvdW50ICs9IGNvdW50OworICAgICAgfSB3aGlsZSAoKGN1cnJlbnQgPSBjdXJyZW50
LiRwYXJlbnQpKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBkZWNyZW1lbnRMaXN0ZW5lckNvdW50
KGN1cnJlbnQsIGNvdW50LCBuYW1lKSB7CisgICAgICBkbyB7CisgICAgICAgIGN1cnJlbnQuJCRs
aXN0ZW5lckNvdW50W25hbWVdIC09IGNvdW50OworCisgICAgICAgIGlmIChjdXJyZW50LiQkbGlz
dGVuZXJDb3VudFtuYW1lXSA9PT0gMCkgeworICAgICAgICAgIGRlbGV0ZSBjdXJyZW50LiQkbGlz
dGVuZXJDb3VudFtuYW1lXTsKKyAgICAgICAgfQorICAgICAgfSB3aGlsZSAoKGN1cnJlbnQgPSBj
dXJyZW50LiRwYXJlbnQpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBmdW5jdGlvbiB1c2Vk
IGFzIGFuIGluaXRpYWwgdmFsdWUgZm9yIHdhdGNoZXJzLgorICAgICAqIGJlY2F1c2UgaXQncyB1
bmlxdWUgd2UgY2FuIGVhc2lseSB0ZWxsIGl0IGFwYXJ0IGZyb20gb3RoZXIgdmFsdWVzCisgICAg
ICovCisgICAgZnVuY3Rpb24gaW5pdFdhdGNoVmFsKCkge30KKworICAgIGZ1bmN0aW9uIGZsdXNo
QXBwbHlBc3luYygpIHsKKyAgICAgIHdoaWxlIChhcHBseUFzeW5jUXVldWUubGVuZ3RoKSB7Cisg
ICAgICAgIHRyeSB7CisgICAgICAgICAgYXBwbHlBc3luY1F1ZXVlLnNoaWZ0KCkoKTsKKyAgICAg
ICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICRleGNlcHRpb25IYW5kbGVyKGUpOworICAgICAg
ICB9CisgICAgICB9CisgICAgICBhcHBseUFzeW5jSWQgPSBudWxsOworICAgIH0KKworICAgIGZ1
bmN0aW9uIHNjaGVkdWxlQXBwbHlBc3luYygpIHsKKyAgICAgIGlmIChhcHBseUFzeW5jSWQgPT09
IG51bGwpIHsKKyAgICAgICAgYXBwbHlBc3luY0lkID0gJGJyb3dzZXIuZGVmZXIoZnVuY3Rpb24o
KSB7CisgICAgICAgICAgJHJvb3RTY29wZS4kYXBwbHkoZmx1c2hBcHBseUFzeW5jKTsKKyAgICAg
ICAgfSk7CisgICAgICB9CisgICAgfQorICB9XTsKK30KKworLyoqCisgKiBAZGVzY3JpcHRpb24K
KyAqIFByaXZhdGUgc2VydmljZSB0byBzYW5pdGl6ZSB1cmlzIGZvciBsaW5rcyBhbmQgaW1hZ2Vz
LiBVc2VkIGJ5ICRjb21waWxlIGFuZCAkc2FuaXRpemUuCisgKi8KK2Z1bmN0aW9uICQkU2FuaXRp
emVVcmlQcm92aWRlcigpIHsKKyAgdmFyIGFIcmVmU2FuaXRpemF0aW9uV2hpdGVsaXN0ID0gL15c
cyooaHR0cHM/fGZ0cHxtYWlsdG98dGVsfGZpbGUpOi8sCisgICAgaW1nU3JjU2FuaXRpemF0aW9u
V2hpdGVsaXN0ID0gL15ccyooKGh0dHBzP3xmdHB8ZmlsZXxibG9iKTp8ZGF0YTppbWFnZVwvKS87
CisKKyAgLyoqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBSZXRyaWV2ZXMgb3Igb3ZlcnJpZGVz
IHRoZSBkZWZhdWx0IHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IGlzIHVzZWQgZm9yIHdoaXRlbGlz
dGluZyBvZiBzYWZlCisgICAqIHVybHMgZHVyaW5nIGFbaHJlZl0gc2FuaXRpemF0aW9uLgorICAg
KgorICAgKiBUaGUgc2FuaXRpemF0aW9uIGlzIGEgc2VjdXJpdHkgbWVhc3VyZSBhaW1lZCBhdCBw
cmV2ZW50IFhTUyBhdHRhY2tzIHZpYSBodG1sIGxpbmtzLgorICAgKgorICAgKiBBbnkgdXJsIGFi
b3V0IHRvIGJlIGFzc2lnbmVkIHRvIGFbaHJlZl0gdmlhIGRhdGEtYmluZGluZyBpcyBmaXJzdCBu
b3JtYWxpemVkIGFuZCB0dXJuZWQgaW50bworICAgKiBhbiBhYnNvbHV0ZSB1cmwuIEFmdGVyd2Fy
ZHMsIHRoZSB1cmwgaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBgYUhyZWZTYW5pdGl6YXRpb25XaGl0
ZWxpc3RgCisgICAqIHJlZ3VsYXIgZXhwcmVzc2lvbi4gSWYgYSBtYXRjaCBpcyBmb3VuZCwgdGhl
IG9yaWdpbmFsIHVybCBpcyB3cml0dGVuIGludG8gdGhlIGRvbS4gT3RoZXJ3aXNlLAorICAgKiB0
aGUgYWJzb2x1dGUgdXJsIGlzIHByZWZpeGVkIHdpdGggYCd1bnNhZmU6J2Agc3RyaW5nIGFuZCBv
bmx5IHRoZW4gaXMgaXQgd3JpdHRlbiBpbnRvIHRoZSBET00uCisgICAqCisgICAqIEBwYXJhbSB7
UmVnRXhwPX0gcmVnZXhwIE5ldyByZWdleHAgdG8gd2hpdGVsaXN0IHVybHMgd2l0aC4KKyAgICog
QHJldHVybnMge1JlZ0V4cHxuZy4kY29tcGlsZVByb3ZpZGVyfSBDdXJyZW50IFJlZ0V4cCBpZiBj
YWxsZWQgd2l0aG91dCB2YWx1ZSBvciBzZWxmIGZvcgorICAgKiAgICBjaGFpbmluZyBvdGhlcndp
c2UuCisgICAqLworICB0aGlzLmFIcmVmU2FuaXRpemF0aW9uV2hpdGVsaXN0ID0gZnVuY3Rpb24o
cmVnZXhwKSB7CisgICAgaWYgKGlzRGVmaW5lZChyZWdleHApKSB7CisgICAgICBhSHJlZlNhbml0
aXphdGlvbldoaXRlbGlzdCA9IHJlZ2V4cDsKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0KKyAg
ICByZXR1cm4gYUhyZWZTYW5pdGl6YXRpb25XaGl0ZWxpc3Q7CisgIH07CisKKworICAvKioKKyAg
ICogQGRlc2NyaXB0aW9uCisgICAqIFJldHJpZXZlcyBvciBvdmVycmlkZXMgdGhlIGRlZmF1bHQg
cmVndWxhciBleHByZXNzaW9uIHRoYXQgaXMgdXNlZCBmb3Igd2hpdGVsaXN0aW5nIG9mIHNhZmUK
KyAgICogdXJscyBkdXJpbmcgaW1nW3NyY10gc2FuaXRpemF0aW9uLgorICAgKgorICAgKiBUaGUg
c2FuaXRpemF0aW9uIGlzIGEgc2VjdXJpdHkgbWVhc3VyZSBhaW1lZCBhdCBwcmV2ZW50IFhTUyBh
dHRhY2tzIHZpYSBodG1sIGxpbmtzLgorICAgKgorICAgKiBBbnkgdXJsIGFib3V0IHRvIGJlIGFz
c2lnbmVkIHRvIGltZ1tzcmNdIHZpYSBkYXRhLWJpbmRpbmcgaXMgZmlyc3Qgbm9ybWFsaXplZCBh
bmQgdHVybmVkIGludG8KKyAgICogYW4gYWJzb2x1dGUgdXJsLiBBZnRlcndhcmRzLCB0aGUgdXJs
IGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgYGltZ1NyY1Nhbml0aXphdGlvbldoaXRlbGlzdGAKKyAg
ICogcmVndWxhciBleHByZXNzaW9uLiBJZiBhIG1hdGNoIGlzIGZvdW5kLCB0aGUgb3JpZ2luYWwg
dXJsIGlzIHdyaXR0ZW4gaW50byB0aGUgZG9tLiBPdGhlcndpc2UsCisgICAqIHRoZSBhYnNvbHV0
ZSB1cmwgaXMgcHJlZml4ZWQgd2l0aCBgJ3Vuc2FmZTonYCBzdHJpbmcgYW5kIG9ubHkgdGhlbiBp
cyBpdCB3cml0dGVuIGludG8gdGhlIERPTS4KKyAgICoKKyAgICogQHBhcmFtIHtSZWdFeHA9fSBy
ZWdleHAgTmV3IHJlZ2V4cCB0byB3aGl0ZWxpc3QgdXJscyB3aXRoLgorICAgKiBAcmV0dXJucyB7
UmVnRXhwfG5nLiRjb21waWxlUHJvdmlkZXJ9IEN1cnJlbnQgUmVnRXhwIGlmIGNhbGxlZCB3aXRo
b3V0IHZhbHVlIG9yIHNlbGYgZm9yCisgICAqICAgIGNoYWluaW5nIG90aGVyd2lzZS4KKyAgICov
CisgIHRoaXMuaW1nU3JjU2FuaXRpemF0aW9uV2hpdGVsaXN0ID0gZnVuY3Rpb24ocmVnZXhwKSB7
CisgICAgaWYgKGlzRGVmaW5lZChyZWdleHApKSB7CisgICAgICBpbWdTcmNTYW5pdGl6YXRpb25X
aGl0ZWxpc3QgPSByZWdleHA7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisgICAgcmV0dXJu
IGltZ1NyY1Nhbml0aXphdGlvbldoaXRlbGlzdDsKKyAgfTsKKworICB0aGlzLiRnZXQgPSBmdW5j
dGlvbigpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24gc2FuaXRpemVVcmkodXJpLCBpc0ltYWdlKSB7
CisgICAgICB2YXIgcmVnZXggPSBpc0ltYWdlID8gaW1nU3JjU2FuaXRpemF0aW9uV2hpdGVsaXN0
IDogYUhyZWZTYW5pdGl6YXRpb25XaGl0ZWxpc3Q7CisgICAgICB2YXIgbm9ybWFsaXplZFZhbDsK
KyAgICAgIG5vcm1hbGl6ZWRWYWwgPSB1cmxSZXNvbHZlKHVyaSkuaHJlZjsKKyAgICAgIGlmIChu
b3JtYWxpemVkVmFsICE9PSAnJyAmJiAhbm9ybWFsaXplZFZhbC5tYXRjaChyZWdleCkpIHsKKyAg
ICAgICAgcmV0dXJuICd1bnNhZmU6JyArIG5vcm1hbGl6ZWRWYWw7CisgICAgICB9CisgICAgICBy
ZXR1cm4gdXJpOworICAgIH07CisgIH07Cit9CisKKy8qICogKiAqICogKiAqICogKiAqICogKiAq
ICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKKyAqICAg
ICBBbnkgY29tbWl0cyB0byB0aGlzIGZpbGUgc2hvdWxkIGJlIHJldmlld2VkIHdpdGggc2VjdXJp
dHkgaW4gbWluZC4gICoKKyAqICAgQ2hhbmdlcyB0byB0aGlzIGZpbGUgY2FuIHBvdGVudGlhbGx5
IGNyZWF0ZSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuICoKKyAqICAgICAgICAgIEFuIGFwcHJv
dmFsIGZyb20gMiBDb3JlIG1lbWJlcnMgd2l0aCBoaXN0b3J5IG9mIG1vZGlmeWluZyAgICAgICoK
KyAqICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgZmlsZSBpcyByZXF1aXJlZC4gICAgICAg
ICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBEb2VzIHRoZSBj
aGFuZ2Ugc29tZWhvdyBhbGxvdyBmb3IgYXJiaXRyYXJ5IGphdmFzY3JpcHQgdG8gYmUgZXhlY3V0
ZWQ/ICoKKyAqICAgIE9yIGFsbG93cyBmb3Igc29tZW9uZSB0byBjaGFuZ2UgdGhlIHByb3RvdHlw
ZSBvZiBidWlsdC1pbiBvYmplY3RzPyAgICoKKyAqICAgICBPciBnaXZlcyB1bmRlc2lyZWQgYWNj
ZXNzIHRvIHZhcmlhYmxlcyBsaWtlcyBkb2N1bWVudCBvciB3aW5kb3c/ICAgICoKKyAqICogKiAq
ICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICog
KiAqICogKiAqICovCisKK3ZhciAkc2NlTWluRXJyID0gbWluRXJyKCckc2NlJyk7CisKK3ZhciBT
Q0VfQ09OVEVYVFMgPSB7CisgIEhUTUw6ICdodG1sJywKKyAgQ1NTOiAnY3NzJywKKyAgVVJMOiAn
dXJsJywKKyAgLy8gUkVTT1VSQ0VfVVJMIGlzIGEgc3VidHlwZSBvZiBVUkwgdXNlZCBpbiBjb250
ZXh0cyB3aGVyZSBhIHByaXZpbGVnZWQgcmVzb3VyY2UgaXMgc291cmNlZCBmcm9tIGEKKyAgLy8g
dXJsLiAgKGUuZy4gbmctaW5jbHVkZSwgc2NyaXB0IHNyYywgdGVtcGxhdGVVcmwpCisgIFJFU09V
UkNFX1VSTDogJ3Jlc291cmNlVXJsJywKKyAgSlM6ICdqcycKK307CisKKy8vIEhlbHBlciBmdW5j
dGlvbnMgZm9sbG93LgorCitmdW5jdGlvbiBhZGp1c3RNYXRjaGVyKG1hdGNoZXIpIHsKKyAgaWYg
KG1hdGNoZXIgPT09ICdzZWxmJykgeworICAgIHJldHVybiBtYXRjaGVyOworICB9IGVsc2UgaWYg
KGlzU3RyaW5nKG1hdGNoZXIpKSB7CisgICAgLy8gU3RyaW5ncyBtYXRjaCBleGFjdGx5IGV4Y2Vw
dCBmb3IgMiB3aWxkY2FyZHMgLSAnKicgYW5kICcqKicuCisgICAgLy8gJyonIG1hdGNoZXMgYW55
IGNoYXJhY3RlciBleGNlcHQgdGhvc2UgZnJvbSB0aGUgc2V0ICc6Ly4/JicuCisgICAgLy8gJyoq
JyBtYXRjaGVzIGFueSBjaGFyYWN0ZXIgKGxpa2UgLiogaW4gYSBSZWdFeHApLgorICAgIC8vIE1v
cmUgdGhhbiAyIConcyByYWlzZXMgYW4gZXJyb3IgYXMgaXQncyBpbGwgZGVmaW5lZC4KKyAgICBp
ZiAobWF0Y2hlci5pbmRleE9mKCcqKionKSA+IC0xKSB7CisgICAgICB0aHJvdyAkc2NlTWluRXJy
KCdpd2NhcmQnLAorICAgICAgICAgICdJbGxlZ2FsIHNlcXVlbmNlICoqKiBpbiBzdHJpbmcgbWF0
Y2hlci4gIFN0cmluZzogezB9JywgbWF0Y2hlcik7CisgICAgfQorICAgIG1hdGNoZXIgPSBlc2Nh
cGVGb3JSZWdleHAobWF0Y2hlcikuCisgICAgICAgICAgICAgICAgICByZXBsYWNlKCdcXCpcXCon
LCAnLionKS4KKyAgICAgICAgICAgICAgICAgIHJlcGxhY2UoJ1xcKicsICdbXjovLj8mO10qJyk7
CisgICAgcmV0dXJuIG5ldyBSZWdFeHAoJ14nICsgbWF0Y2hlciArICckJyk7CisgIH0gZWxzZSBp
ZiAoaXNSZWdFeHAobWF0Y2hlcikpIHsKKyAgICAvLyBUaGUgb25seSBvdGhlciB0eXBlIG9mIG1h
dGNoZXIgYWxsb3dlZCBpcyBhIFJlZ2V4cC4KKyAgICAvLyBNYXRjaCBlbnRpcmUgVVJMIC8gZGlz
YWxsb3cgcGFydGlhbCBtYXRjaGVzLgorICAgIC8vIEZsYWdzIGFyZSByZXNldCAoaS5lLiBubyBn
bG9iYWwsIGlnbm9yZUNhc2Ugb3IgbXVsdGlsaW5lKQorICAgIHJldHVybiBuZXcgUmVnRXhwKCde
JyArIG1hdGNoZXIuc291cmNlICsgJyQnKTsKKyAgfSBlbHNlIHsKKyAgICB0aHJvdyAkc2NlTWlu
RXJyKCdpbWF0Y2hlcicsCisgICAgICAgICdNYXRjaGVycyBtYXkgb25seSBiZSAic2VsZiIsIHN0
cmluZyBwYXR0ZXJucyBvciBSZWdFeHAgb2JqZWN0cycpOworICB9Cit9CisKKworZnVuY3Rpb24g
YWRqdXN0TWF0Y2hlcnMobWF0Y2hlcnMpIHsKKyAgdmFyIGFkanVzdGVkTWF0Y2hlcnMgPSBbXTsK
KyAgaWYgKGlzRGVmaW5lZChtYXRjaGVycykpIHsKKyAgICBmb3JFYWNoKG1hdGNoZXJzLCBmdW5j
dGlvbihtYXRjaGVyKSB7CisgICAgICBhZGp1c3RlZE1hdGNoZXJzLnB1c2goYWRqdXN0TWF0Y2hl
cihtYXRjaGVyKSk7CisgICAgfSk7CisgIH0KKyAgcmV0dXJuIGFkanVzdGVkTWF0Y2hlcnM7Cit9
CisKKworLyoqCisgKiBAbmdkb2Mgc2VydmljZQorICogQG5hbWUgJHNjZURlbGVnYXRlCisgKiBA
a2luZCBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlvbgorICoKKyAqIGAkc2NlRGVsZWdhdGVg
IGlzIGEgc2VydmljZSB0aGF0IGlzIHVzZWQgYnkgdGhlIGAkc2NlYCBzZXJ2aWNlIHRvIHByb3Zp
ZGUge0BsaW5rIG5nLiRzY2UgU3RyaWN0CisgKiBDb250ZXh0dWFsIEVzY2FwaW5nIChTQ0UpfSBz
ZXJ2aWNlcyB0byBBbmd1bGFySlMuCisgKgorICogVHlwaWNhbGx5LCB5b3Ugd291bGQgY29uZmln
dXJlIG9yIG92ZXJyaWRlIHRoZSB7QGxpbmsgbmcuJHNjZURlbGVnYXRlICRzY2VEZWxlZ2F0ZX0g
aW5zdGVhZCBvZgorICogdGhlIGAkc2NlYCBzZXJ2aWNlIHRvIGN1c3RvbWl6ZSB0aGUgd2F5IFN0
cmljdCBDb250ZXh0dWFsIEVzY2FwaW5nIHdvcmtzIGluIEFuZ3VsYXJKUy4gIFRoaXMgaXMKKyAq
IGJlY2F1c2UsIHdoaWxlIHRoZSBgJHNjZWAgcHJvdmlkZXMgbnVtZXJvdXMgc2hvcnRoYW5kIG1l
dGhvZHMsIGV0Yy4sIHlvdSByZWFsbHkgb25seSBuZWVkIHRvCisgKiBvdmVycmlkZSAzIGNvcmUg
ZnVuY3Rpb25zIChgdHJ1c3RBc2AsIGBnZXRUcnVzdGVkYCBhbmQgYHZhbHVlT2ZgKSB0byByZXBs
YWNlIHRoZSB3YXkgdGhpbmdzCisgKiB3b3JrIGJlY2F1c2UgYCRzY2VgIGRlbGVnYXRlcyB0byBg
JHNjZURlbGVnYXRlYCBmb3IgdGhlc2Ugb3BlcmF0aW9ucy4KKyAqCisgKiBSZWZlciB7QGxpbmsg
bmcuJHNjZURlbGVnYXRlUHJvdmlkZXIgJHNjZURlbGVnYXRlUHJvdmlkZXJ9IHRvIGNvbmZpZ3Vy
ZSB0aGlzIHNlcnZpY2UuCisgKgorICogVGhlIGRlZmF1bHQgaW5zdGFuY2Ugb2YgYCRzY2VEZWxl
Z2F0ZWAgc2hvdWxkIHdvcmsgb3V0IG9mIHRoZSBib3ggd2l0aCBsaXR0bGUgcGFpbi4gIFdoaWxl
IHlvdQorICogY2FuIG92ZXJyaWRlIGl0IGNvbXBsZXRlbHkgdG8gY2hhbmdlIHRoZSBiZWhhdmlv
ciBvZiBgJHNjZWAsIHRoZSBjb21tb24gY2FzZSB3b3VsZAorICogaW52b2x2ZSBjb25maWd1cmlu
ZyB0aGUge0BsaW5rIG5nLiRzY2VEZWxlZ2F0ZVByb3ZpZGVyICRzY2VEZWxlZ2F0ZVByb3ZpZGVy
fSBpbnN0ZWFkIGJ5IHNldHRpbmcKKyAqIHlvdXIgb3duIHdoaXRlbGlzdHMgYW5kIGJsYWNrbGlz
dHMgZm9yIHRydXN0aW5nIFVSTHMgdXNlZCBmb3IgbG9hZGluZyBBbmd1bGFySlMgcmVzb3VyY2Vz
IHN1Y2ggYXMKKyAqIHRlbXBsYXRlcy4gIFJlZmVyIHtAbGluayBuZy4kc2NlRGVsZWdhdGVQcm92
aWRlciNyZXNvdXJjZVVybFdoaXRlbGlzdAorICogJHNjZURlbGVnYXRlUHJvdmlkZXIucmVzb3Vy
Y2VVcmxXaGl0ZWxpc3R9IGFuZCB7QGxpbmsKKyAqIG5nLiRzY2VEZWxlZ2F0ZVByb3ZpZGVyI3Jl
c291cmNlVXJsQmxhY2tsaXN0ICRzY2VEZWxlZ2F0ZVByb3ZpZGVyLnJlc291cmNlVXJsQmxhY2ts
aXN0fQorICovCisKKy8qKgorICogQG5nZG9jIHByb3ZpZGVyCisgKiBAbmFtZSAkc2NlRGVsZWdh
dGVQcm92aWRlcgorICogQGRlc2NyaXB0aW9uCisgKgorICogVGhlIGAkc2NlRGVsZWdhdGVQcm92
aWRlcmAgcHJvdmlkZXIgYWxsb3dzIGRldmVsb3BlcnMgdG8gY29uZmlndXJlIHRoZSB7QGxpbmsg
bmcuJHNjZURlbGVnYXRlCisgKiAkc2NlRGVsZWdhdGV9IHNlcnZpY2UuICBUaGlzIGFsbG93cyBv
bmUgdG8gZ2V0L3NldCB0aGUgd2hpdGVsaXN0cyBhbmQgYmxhY2tsaXN0cyB1c2VkIHRvIGVuc3Vy
ZQorICogdGhhdCB0aGUgVVJMcyB1c2VkIGZvciBzb3VyY2luZyBBbmd1bGFyIHRlbXBsYXRlcyBh
cmUgc2FmZS4gIFJlZmVyIHtAbGluaworICogbmcuJHNjZURlbGVnYXRlUHJvdmlkZXIjcmVzb3Vy
Y2VVcmxXaGl0ZWxpc3QgJHNjZURlbGVnYXRlUHJvdmlkZXIucmVzb3VyY2VVcmxXaGl0ZWxpc3R9
IGFuZAorICoge0BsaW5rIG5nLiRzY2VEZWxlZ2F0ZVByb3ZpZGVyI3Jlc291cmNlVXJsQmxhY2ts
aXN0ICRzY2VEZWxlZ2F0ZVByb3ZpZGVyLnJlc291cmNlVXJsQmxhY2tsaXN0fQorICoKKyAqIEZv
ciB0aGUgZ2VuZXJhbCBkZXRhaWxzIGFib3V0IHRoaXMgc2VydmljZSBpbiBBbmd1bGFyLCByZWFk
IHRoZSBtYWluIHBhZ2UgZm9yIHtAbGluayBuZy4kc2NlCisgKiBTdHJpY3QgQ29udGV4dHVhbCBF
c2NhcGluZyAoU0NFKX0uCisgKgorICogKipFeGFtcGxlKio6ICBDb25zaWRlciB0aGUgZm9sbG93
aW5nIGNhc2UuIDxhIG5hbWU9ImV4YW1wbGUiPjwvYT4KKyAqCisgKiAtIHlvdXIgYXBwIGlzIGhv
c3RlZCBhdCB1cmwgYGh0dHA6Ly9teWFwcC5leGFtcGxlLmNvbS9gCisgKiAtIGJ1dCBzb21lIG9m
IHlvdXIgdGVtcGxhdGVzIGFyZSBob3N0ZWQgb24gb3RoZXIgZG9tYWlucyB5b3UgY29udHJvbCBz
dWNoIGFzCisgKiAgIGBodHRwOi8vc3J2MDEuYXNzZXRzLmV4YW1wbGUuY29tL2AswqAgYGh0dHA6
Ly9zcnYwMi5hc3NldHMuZXhhbXBsZS5jb20vYCwgZXRjLgorICogLSBhbmQgeW91IGhhdmUgYW4g
b3BlbiByZWRpcmVjdCBhdCBgaHR0cDovL215YXBwLmV4YW1wbGUuY29tL2NsaWNrVGhydT8uLi5g
LgorICoKKyAqIEhlcmUgaXMgd2hhdCBhIHNlY3VyZSBjb25maWd1cmF0aW9uIGZvciB0aGlzIHNj
ZW5hcmlvIG1pZ2h0IGxvb2sgbGlrZToKKyAqCisgKiBgYGAKKyAqICBhbmd1bGFyLm1vZHVsZSgn
bXlBcHAnLCBbXSkuY29uZmlnKGZ1bmN0aW9uKCRzY2VEZWxlZ2F0ZVByb3ZpZGVyKSB7CisgKiAg
ICAkc2NlRGVsZWdhdGVQcm92aWRlci5yZXNvdXJjZVVybFdoaXRlbGlzdChbCisgKiAgICAgIC8v
IEFsbG93IHNhbWUgb3JpZ2luIHJlc291cmNlIGxvYWRzLgorICogICAgICAnc2VsZicsCisgKiAg
ICAgIC8vIEFsbG93IGxvYWRpbmcgZnJvbSBvdXIgYXNzZXRzIGRvbWFpbi4gIE5vdGljZSB0aGUg
ZGlmZmVyZW5jZSBiZXR3ZWVuICogYW5kICoqLgorICogICAgICAnaHR0cDovL3NydiouYXNzZXRz
LmV4YW1wbGUuY29tLyoqJworICogICAgXSk7CisgKgorICogICAgLy8gVGhlIGJsYWNrbGlzdCBv
dmVycmlkZXMgdGhlIHdoaXRlbGlzdCBzbyB0aGUgb3BlbiByZWRpcmVjdCBoZXJlIGlzIGJsb2Nr
ZWQuCisgKiAgICAkc2NlRGVsZWdhdGVQcm92aWRlci5yZXNvdXJjZVVybEJsYWNrbGlzdChbCisg
KiAgICAgICdodHRwOi8vbXlhcHAuZXhhbXBsZS5jb20vY2xpY2tUaHJ1KionCisgKiAgICBdKTsK
KyAqICB9KTsKKyAqIGBgYAorICovCisKK2Z1bmN0aW9uICRTY2VEZWxlZ2F0ZVByb3ZpZGVyKCkg
eworICB0aGlzLlNDRV9DT05URVhUUyA9IFNDRV9DT05URVhUUzsKKworICAvLyBSZXNvdXJjZSBV
UkxzIGNhbiBhbHNvIGJlIHRydXN0ZWQgYnkgcG9saWN5LgorICB2YXIgcmVzb3VyY2VVcmxXaGl0
ZWxpc3QgPSBbJ3NlbGYnXSwKKyAgICAgIHJlc291cmNlVXJsQmxhY2tsaXN0ID0gW107CisKKyAg
LyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgJHNjZURlbGVnYXRlUHJvdmlkZXIj
cmVzb3VyY2VVcmxXaGl0ZWxpc3QKKyAgICogQGtpbmQgZnVuY3Rpb24KKyAgICoKKyAgICogQHBh
cmFtIHtBcnJheT19IHdoaXRlbGlzdCBXaGVuIHByb3ZpZGVkLCByZXBsYWNlcyB0aGUgcmVzb3Vy
Y2VVcmxXaGl0ZWxpc3Qgd2l0aCB0aGUgdmFsdWUKKyAgICogICAgIHByb3ZpZGVkLiAgVGhpcyBt
dXN0IGJlIGFuIGFycmF5IG9yIG51bGwuICBBIHNuYXBzaG90IG9mIHRoaXMgYXJyYXkgaXMgdXNl
ZCBzbyBmdXJ0aGVyCisgICAqICAgICBjaGFuZ2VzIHRvIHRoZSBhcnJheSBhcmUgaWdub3JlZC4K
KyAgICoKKyAgICogICAgIEZvbGxvdyB7QGxpbmsgbmcuJHNjZSNyZXNvdXJjZVVybFBhdHRlcm5J
dGVtIHRoaXMgbGlua30gZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGl0ZW1zCisgICAqICAgICBh
bGxvd2VkIGluIHRoaXMgYXJyYXkuCisgICAqCisgICAqICAgICBOb3RlOiAqKmFuIGVtcHR5IHdo
aXRlbGlzdCBhcnJheSB3aWxsIGJsb2NrIGFsbCBVUkxzKiohCisgICAqCisgICAqIEByZXR1cm4g
e0FycmF5fSB0aGUgY3VycmVudGx5IHNldCB3aGl0ZWxpc3QgYXJyYXkuCisgICAqCisgICAqIFRo
ZSAqKmRlZmF1bHQgdmFsdWUqKiB3aGVuIG5vIHdoaXRlbGlzdCBoYXMgYmVlbiBleHBsaWNpdGx5
IHNldCBpcyBgWydzZWxmJ11gIGFsbG93aW5nIG9ubHkKKyAgICogc2FtZSBvcmlnaW4gcmVzb3Vy
Y2UgcmVxdWVzdHMuCisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBTZXRzL0dldHMgdGhl
IHdoaXRlbGlzdCBvZiB0cnVzdGVkIHJlc291cmNlIFVSTHMuCisgICAqLworICB0aGlzLnJlc291
cmNlVXJsV2hpdGVsaXN0ID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgICBpZiAoYXJndW1lbnRzLmxl
bmd0aCkgeworICAgICAgcmVzb3VyY2VVcmxXaGl0ZWxpc3QgPSBhZGp1c3RNYXRjaGVycyh2YWx1
ZSk7CisgICAgfQorICAgIHJldHVybiByZXNvdXJjZVVybFdoaXRlbGlzdDsKKyAgfTsKKworICAv
KioKKyAgICogQG5nZG9jIG1ldGhvZAorICAgKiBAbmFtZSAkc2NlRGVsZWdhdGVQcm92aWRlciNy
ZXNvdXJjZVVybEJsYWNrbGlzdAorICAgKiBAa2luZCBmdW5jdGlvbgorICAgKgorICAgKiBAcGFy
YW0ge0FycmF5PX0gYmxhY2tsaXN0IFdoZW4gcHJvdmlkZWQsIHJlcGxhY2VzIHRoZSByZXNvdXJj
ZVVybEJsYWNrbGlzdCB3aXRoIHRoZSB2YWx1ZQorICAgKiAgICAgcHJvdmlkZWQuICBUaGlzIG11
c3QgYmUgYW4gYXJyYXkgb3IgbnVsbC4gIEEgc25hcHNob3Qgb2YgdGhpcyBhcnJheSBpcyB1c2Vk
IHNvIGZ1cnRoZXIKKyAgICogICAgIGNoYW5nZXMgdG8gdGhlIGFycmF5IGFyZSBpZ25vcmVkLgor
ICAgKgorICAgKiAgICAgRm9sbG93IHtAbGluayBuZy4kc2NlI3Jlc291cmNlVXJsUGF0dGVybkl0
ZW0gdGhpcyBsaW5rfSBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgaXRlbXMKKyAgICogICAgIGFs
bG93ZWQgaW4gdGhpcyBhcnJheS4KKyAgICoKKyAgICogICAgIFRoZSB0eXBpY2FsIHVzYWdlIGZv
ciB0aGUgYmxhY2tsaXN0IGlzIHRvICoqYmxvY2sKKyAgICogICAgIFtvcGVuIHJlZGlyZWN0c10o
aHR0cDovL2N3ZS5taXRyZS5vcmcvZGF0YS9kZWZpbml0aW9ucy82MDEuaHRtbCkqKiBzZXJ2ZWQg
YnkgeW91ciBkb21haW4gYXMKKyAgICogICAgIHRoZXNlIHdvdWxkIG90aGVyd2lzZSBiZSB0cnVz
dGVkIGJ1dCBhY3R1YWxseSByZXR1cm4gY29udGVudCBmcm9tIHRoZSByZWRpcmVjdGVkIGRvbWFp
bi4KKyAgICoKKyAgICogICAgIEZpbmFsbHksICoqdGhlIGJsYWNrbGlzdCBvdmVycmlkZXMgdGhl
IHdoaXRlbGlzdCoqIGFuZCBoYXMgdGhlIGZpbmFsIHNheS4KKyAgICoKKyAgICogQHJldHVybiB7
QXJyYXl9IHRoZSBjdXJyZW50bHkgc2V0IGJsYWNrbGlzdCBhcnJheS4KKyAgICoKKyAgICogVGhl
ICoqZGVmYXVsdCB2YWx1ZSoqIHdoZW4gbm8gd2hpdGVsaXN0IGhhcyBiZWVuIGV4cGxpY2l0bHkg
c2V0IGlzIHRoZSBlbXB0eSBhcnJheSAoaS5lLiB0aGVyZQorICAgKiBpcyBubyBibGFja2xpc3Qu
KQorICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAgICogU2V0cy9HZXRzIHRoZSBibGFja2xpc3Qg
b2YgdHJ1c3RlZCByZXNvdXJjZSBVUkxzLgorICAgKi8KKworICB0aGlzLnJlc291cmNlVXJsQmxh
Y2tsaXN0ID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCkgewor
ICAgICAgcmVzb3VyY2VVcmxCbGFja2xpc3QgPSBhZGp1c3RNYXRjaGVycyh2YWx1ZSk7CisgICAg
fQorICAgIHJldHVybiByZXNvdXJjZVVybEJsYWNrbGlzdDsKKyAgfTsKKworICB0aGlzLiRnZXQg
PSBbJyRpbmplY3RvcicsIGZ1bmN0aW9uKCRpbmplY3RvcikgeworCisgICAgdmFyIGh0bWxTYW5p
dGl6ZXIgPSBmdW5jdGlvbiBodG1sU2FuaXRpemVyKGh0bWwpIHsKKyAgICAgIHRocm93ICRzY2VN
aW5FcnIoJ3Vuc2FmZScsICdBdHRlbXB0aW5nIHRvIHVzZSBhbiB1bnNhZmUgdmFsdWUgaW4gYSBz
YWZlIGNvbnRleHQuJyk7CisgICAgfTsKKworICAgIGlmICgkaW5qZWN0b3IuaGFzKCckc2FuaXRp
emUnKSkgeworICAgICAgaHRtbFNhbml0aXplciA9ICRpbmplY3Rvci5nZXQoJyRzYW5pdGl6ZScp
OworICAgIH0KKworCisgICAgZnVuY3Rpb24gbWF0Y2hVcmwobWF0Y2hlciwgcGFyc2VkVXJsKSB7
CisgICAgICBpZiAobWF0Y2hlciA9PT0gJ3NlbGYnKSB7CisgICAgICAgIHJldHVybiB1cmxJc1Nh
bWVPcmlnaW4ocGFyc2VkVXJsKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8vIGRlZmluaXRl
bHkgYSByZWdleC4gIFNlZSBhZGp1c3RNYXRjaGVycygpCisgICAgICAgIHJldHVybiAhIW1hdGNo
ZXIuZXhlYyhwYXJzZWRVcmwuaHJlZik7CisgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24g
aXNSZXNvdXJjZVVybEFsbG93ZWRCeVBvbGljeSh1cmwpIHsKKyAgICAgIHZhciBwYXJzZWRVcmwg
PSB1cmxSZXNvbHZlKHVybC50b1N0cmluZygpKTsKKyAgICAgIHZhciBpLCBuLCBhbGxvd2VkID0g
ZmFsc2U7CisgICAgICAvLyBFbnN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgaXRlbSBmcm9tIHRoZSB3
aGl0ZWxpc3QgYWxsb3dzIHRoaXMgdXJsLgorICAgICAgZm9yIChpID0gMCwgbiA9IHJlc291cmNl
VXJsV2hpdGVsaXN0Lmxlbmd0aDsgaSA8IG47IGkrKykgeworICAgICAgICBpZiAobWF0Y2hVcmwo
cmVzb3VyY2VVcmxXaGl0ZWxpc3RbaV0sIHBhcnNlZFVybCkpIHsKKyAgICAgICAgICBhbGxvd2Vk
ID0gdHJ1ZTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYg
KGFsbG93ZWQpIHsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgbm8gaXRlbSBmcm9tIHRoZSBibGFj
a2xpc3QgYmxvY2tlZCB0aGlzIHVybC4KKyAgICAgICAgZm9yIChpID0gMCwgbiA9IHJlc291cmNl
VXJsQmxhY2tsaXN0Lmxlbmd0aDsgaSA8IG47IGkrKykgeworICAgICAgICAgIGlmIChtYXRjaFVy
bChyZXNvdXJjZVVybEJsYWNrbGlzdFtpXSwgcGFyc2VkVXJsKSkgeworICAgICAgICAgICAgYWxs
b3dlZCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICB9CisgICAgICByZXR1cm4gYWxsb3dlZDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBn
ZW5lcmF0ZUhvbGRlclR5cGUoQmFzZSkgeworICAgICAgdmFyIGhvbGRlclR5cGUgPSBmdW5jdGlv
biBUcnVzdGVkVmFsdWVIb2xkZXJUeXBlKHRydXN0ZWRWYWx1ZSkgeworICAgICAgICB0aGlzLiQk
dW53cmFwVHJ1c3RlZFZhbHVlID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgcmV0dXJuIHRydXN0
ZWRWYWx1ZTsKKyAgICAgICAgfTsKKyAgICAgIH07CisgICAgICBpZiAoQmFzZSkgeworICAgICAg
ICBob2xkZXJUeXBlLnByb3RvdHlwZSA9IG5ldyBCYXNlKCk7CisgICAgICB9CisgICAgICBob2xk
ZXJUeXBlLnByb3RvdHlwZS52YWx1ZU9mID0gZnVuY3Rpb24gc2NlVmFsdWVPZigpIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuJCR1bndyYXBUcnVzdGVkVmFsdWUoKTsKKyAgICAgIH07CisgICAgICBo
b2xkZXJUeXBlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHNjZVRvU3RyaW5nKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy4kJHVud3JhcFRydXN0ZWRWYWx1ZSgpLnRvU3RyaW5nKCk7Cisg
ICAgICB9OworICAgICAgcmV0dXJuIGhvbGRlclR5cGU7CisgICAgfQorCisgICAgdmFyIHRydXN0
ZWRWYWx1ZUhvbGRlckJhc2UgPSBnZW5lcmF0ZUhvbGRlclR5cGUoKSwKKyAgICAgICAgYnlUeXBl
ID0ge307CisKKyAgICBieVR5cGVbU0NFX0NPTlRFWFRTLkhUTUxdID0gZ2VuZXJhdGVIb2xkZXJU
eXBlKHRydXN0ZWRWYWx1ZUhvbGRlckJhc2UpOworICAgIGJ5VHlwZVtTQ0VfQ09OVEVYVFMuQ1NT
XSA9IGdlbmVyYXRlSG9sZGVyVHlwZSh0cnVzdGVkVmFsdWVIb2xkZXJCYXNlKTsKKyAgICBieVR5
cGVbU0NFX0NPTlRFWFRTLlVSTF0gPSBnZW5lcmF0ZUhvbGRlclR5cGUodHJ1c3RlZFZhbHVlSG9s
ZGVyQmFzZSk7CisgICAgYnlUeXBlW1NDRV9DT05URVhUUy5KU10gPSBnZW5lcmF0ZUhvbGRlclR5
cGUodHJ1c3RlZFZhbHVlSG9sZGVyQmFzZSk7CisgICAgYnlUeXBlW1NDRV9DT05URVhUUy5SRVNP
VVJDRV9VUkxdID0gZ2VuZXJhdGVIb2xkZXJUeXBlKGJ5VHlwZVtTQ0VfQ09OVEVYVFMuVVJMXSk7
CisKKyAgICAvKioKKyAgICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICogQG5hbWUgJHNjZURlbGVn
YXRlI3RydXN0QXMKKyAgICAgKgorICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAqIFJldHVybnMg
YW4gb2JqZWN0IHRoYXQgaXMgdHJ1c3RlZCBieSBhbmd1bGFyIGZvciB1c2UgaW4gc3BlY2lmaWVk
IHN0cmljdAorICAgICAqIGNvbnRleHR1YWwgZXNjYXBpbmcgY29udGV4dHMgKHN1Y2ggYXMgbmct
YmluZC1odG1sLCBuZy1pbmNsdWRlLCBhbnkgc3JjCisgICAgICogYXR0cmlidXRlIGludGVycG9s
YXRpb24sIGFueSBkb20gZXZlbnQgYmluZGluZyBhdHRyaWJ1dGUgaW50ZXJwb2xhdGlvbgorICAg
ICAqIHN1Y2ggYXMgZm9yIG9uY2xpY2ssICBldGMuKSB0aGF0IHVzZXMgdGhlIHByb3ZpZGVkIHZh
bHVlLgorICAgICAqIFNlZSB7QGxpbmsgbmcuJHNjZSAkc2NlfSBmb3IgZW5hYmxpbmcgc3RyaWN0
IGNvbnRleHR1YWwgZXNjYXBpbmcuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlw
ZSBUaGUga2luZCBvZiBjb250ZXh0IGluIHdoaWNoIHRoaXMgdmFsdWUgaXMgc2FmZSBmb3IgdXNl
LiAgZS5nLiB1cmwsCisgICAgICogICByZXNvdXJjZVVybCwgaHRtbCwganMgYW5kIGNzcy4KKyAg
ICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0aGF0IHRoYXQgc2hvdWxkIGJlIGNvbnNp
ZGVyZWQgdHJ1c3RlZC9zYWZlLgorICAgICAqIEByZXR1cm5zIHsqfSBBIHZhbHVlIHRoYXQgY2Fu
IGJlIHVzZWQgdG8gc3RhbmQgaW4gZm9yIHRoZSBwcm92aWRlZCBgdmFsdWVgIGluIHBsYWNlcwor
ICAgICAqIHdoZXJlIEFuZ3VsYXIgZXhwZWN0cyBhICRzY2UudHJ1c3RBcygpIHJldHVybiB2YWx1
ZS4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiB0cnVzdEFzKHR5cGUsIHRydXN0ZWRWYWx1ZSkgewor
ICAgICAgdmFyIENvbnN0cnVjdG9yID0gKGJ5VHlwZS5oYXNPd25Qcm9wZXJ0eSh0eXBlKSA/IGJ5
VHlwZVt0eXBlXSA6IG51bGwpOworICAgICAgaWYgKCFDb25zdHJ1Y3RvcikgeworICAgICAgICB0
aHJvdyAkc2NlTWluRXJyKCdpY29udGV4dCcsCisgICAgICAgICAgICAnQXR0ZW1wdGVkIHRvIHRy
dXN0IGEgdmFsdWUgaW4gaW52YWxpZCBjb250ZXh0LiBDb250ZXh0OiB7MH07IFZhbHVlOiB7MX0n
LAorICAgICAgICAgICAgdHlwZSwgdHJ1c3RlZFZhbHVlKTsKKyAgICAgIH0KKyAgICAgIGlmICh0
cnVzdGVkVmFsdWUgPT09IG51bGwgfHwgdHJ1c3RlZFZhbHVlID09PSB1bmRlZmluZWQgfHwgdHJ1
c3RlZFZhbHVlID09PSAnJykgeworICAgICAgICByZXR1cm4gdHJ1c3RlZFZhbHVlOworICAgICAg
fQorICAgICAgLy8gQWxsIHRoZSBjdXJyZW50IGNvbnRleHRzIGluIFNDRV9DT05URVhUUyBoYXBw
ZW4gdG8gYmUgc3RyaW5ncy4gIEluIG9yZGVyIHRvIGF2b2lkIHRydXN0aW5nCisgICAgICAvLyBt
dXRhYmxlIG9iamVjdHMsIHdlIGVuc3VyZSBoZXJlIHRoYXQgdGhlIHZhbHVlIHBhc3NlZCBpbiBp
cyBhY3R1YWxseSBhIHN0cmluZy4KKyAgICAgIGlmICh0eXBlb2YgdHJ1c3RlZFZhbHVlICE9PSAn
c3RyaW5nJykgeworICAgICAgICB0aHJvdyAkc2NlTWluRXJyKCdpdHlwZScsCisgICAgICAgICAg
ICAnQXR0ZW1wdGVkIHRvIHRydXN0IGEgbm9uLXN0cmluZyB2YWx1ZSBpbiBhIGNvbnRlbnQgcmVx
dWlyaW5nIGEgc3RyaW5nOiBDb250ZXh0OiB7MH0nLAorICAgICAgICAgICAgdHlwZSk7CisgICAg
ICB9CisgICAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRydXN0ZWRWYWx1ZSk7CisgICAgfQor
CisgICAgLyoqCisgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAqIEBuYW1lICRzY2VEZWxlZ2F0
ZSN2YWx1ZU9mCisgICAgICoKKyAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgKiBJZiB0aGUgcGFz
c2VkIHBhcmFtZXRlciBoYWQgYmVlbiByZXR1cm5lZCBieSBhIHByaW9yIGNhbGwgdG8ge0BsaW5r
IG5nLiRzY2VEZWxlZ2F0ZSN0cnVzdEFzCisgICAgICogYCRzY2VEZWxlZ2F0ZS50cnVzdEFzYH0s
IHJldHVybnMgdGhlIHZhbHVlIHRoYXQgaGFkIGJlZW4gcGFzc2VkIHRvIHtAbGluaworICAgICAq
IG5nLiRzY2VEZWxlZ2F0ZSN0cnVzdEFzIGAkc2NlRGVsZWdhdGUudHJ1c3RBc2B9LgorICAgICAq
CisgICAgICogSWYgdGhlIHBhc3NlZCBwYXJhbWV0ZXIgaXMgbm90IGEgdmFsdWUgdGhhdCBoYWQg
YmVlbiByZXR1cm5lZCBieSB7QGxpbmsKKyAgICAgKiBuZy4kc2NlRGVsZWdhdGUjdHJ1c3RBcyBg
JHNjZURlbGVnYXRlLnRydXN0QXNgfSwgcmV0dXJucyBpdCBhcy1pcy4KKyAgICAgKgorICAgICAq
IEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHJlc3VsdCBvZiBhIHByaW9yIHtAbGluayBuZy4kc2NlRGVs
ZWdhdGUjdHJ1c3RBcyBgJHNjZURlbGVnYXRlLnRydXN0QXNgfQorICAgICAqICAgICAgY2FsbCBv
ciBhbnl0aGluZyBlbHNlLgorICAgICAqIEByZXR1cm5zIHsqfSBUaGUgYHZhbHVlYCB0aGF0IHdh
cyBvcmlnaW5hbGx5IHByb3ZpZGVkIHRvIHtAbGluayBuZy4kc2NlRGVsZWdhdGUjdHJ1c3RBcwor
ICAgICAqICAgICBgJHNjZURlbGVnYXRlLnRydXN0QXNgfSBpZiBgdmFsdWVgIGlzIHRoZSByZXN1
bHQgb2Ygc3VjaCBhIGNhbGwuICBPdGhlcndpc2UsIHJldHVybnMKKyAgICAgKiAgICAgYHZhbHVl
YCB1bmNoYW5nZWQuCisgICAgICovCisgICAgZnVuY3Rpb24gdmFsdWVPZihtYXliZVRydXN0ZWQp
IHsKKyAgICAgIGlmIChtYXliZVRydXN0ZWQgaW5zdGFuY2VvZiB0cnVzdGVkVmFsdWVIb2xkZXJC
YXNlKSB7CisgICAgICAgIHJldHVybiBtYXliZVRydXN0ZWQuJCR1bndyYXBUcnVzdGVkVmFsdWUo
KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBtYXliZVRydXN0ZWQ7CisgICAgICB9
CisgICAgfQorCisgICAgLyoqCisgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAqIEBuYW1lICRz
Y2VEZWxlZ2F0ZSNnZXRUcnVzdGVkCisgICAgICoKKyAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAg
KiBUYWtlcyB0aGUgcmVzdWx0IG9mIGEge0BsaW5rIG5nLiRzY2VEZWxlZ2F0ZSN0cnVzdEFzIGAk
c2NlRGVsZWdhdGUudHJ1c3RBc2B9IGNhbGwgYW5kCisgICAgICogcmV0dXJucyB0aGUgb3JpZ2lu
YWxseSBzdXBwbGllZCB2YWx1ZSBpZiB0aGUgcXVlcmllZCBjb250ZXh0IHR5cGUgaXMgYSBzdXBl
cnR5cGUgb2YgdGhlCisgICAgICogY3JlYXRlZCB0eXBlLiAgSWYgdGhpcyBjb25kaXRpb24gaXNu
J3Qgc2F0aXNmaWVkLCB0aHJvd3MgYW4gZXhjZXB0aW9uLgorICAgICAqCisgICAgICogQHBhcmFt
IHtzdHJpbmd9IHR5cGUgVGhlIGtpbmQgb2YgY29udGV4dCBpbiB3aGljaCB0aGlzIHZhbHVlIGlz
IHRvIGJlIHVzZWQuCisgICAgICogQHBhcmFtIHsqfSBtYXliZVRydXN0ZWQgVGhlIHJlc3VsdCBv
ZiBhIHByaW9yIHtAbGluayBuZy4kc2NlRGVsZWdhdGUjdHJ1c3RBcworICAgICAqICAgICBgJHNj
ZURlbGVnYXRlLnRydXN0QXNgfSBjYWxsLgorICAgICAqIEByZXR1cm5zIHsqfSBUaGUgdmFsdWUg
dGhlIHdhcyBvcmlnaW5hbGx5IHByb3ZpZGVkIHRvIHtAbGluayBuZy4kc2NlRGVsZWdhdGUjdHJ1
c3RBcworICAgICAqICAgICBgJHNjZURlbGVnYXRlLnRydXN0QXNgfSBpZiB2YWxpZCBpbiB0aGlz
IGNvbnRleHQuICBPdGhlcndpc2UsIHRocm93cyBhbiBleGNlcHRpb24uCisgICAgICovCisgICAg
ZnVuY3Rpb24gZ2V0VHJ1c3RlZCh0eXBlLCBtYXliZVRydXN0ZWQpIHsKKyAgICAgIGlmIChtYXli
ZVRydXN0ZWQgPT09IG51bGwgfHwgbWF5YmVUcnVzdGVkID09PSB1bmRlZmluZWQgfHwgbWF5YmVU
cnVzdGVkID09PSAnJykgeworICAgICAgICByZXR1cm4gbWF5YmVUcnVzdGVkOworICAgICAgfQor
ICAgICAgdmFyIGNvbnN0cnVjdG9yID0gKGJ5VHlwZS5oYXNPd25Qcm9wZXJ0eSh0eXBlKSA/IGJ5
VHlwZVt0eXBlXSA6IG51bGwpOworICAgICAgaWYgKGNvbnN0cnVjdG9yICYmIG1heWJlVHJ1c3Rl
ZCBpbnN0YW5jZW9mIGNvbnN0cnVjdG9yKSB7CisgICAgICAgIHJldHVybiBtYXliZVRydXN0ZWQu
JCR1bndyYXBUcnVzdGVkVmFsdWUoKTsKKyAgICAgIH0KKyAgICAgIC8vIElmIHdlIGdldCBoZXJl
LCB0aGVuIHdlIG1heSBvbmx5IHRha2Ugb25lIG9mIHR3byBhY3Rpb25zLgorICAgICAgLy8gMS4g
c2FuaXRpemUgdGhlIHZhbHVlIGZvciB0aGUgcmVxdWVzdGVkIHR5cGUsIG9yCisgICAgICAvLyAy
LiB0aHJvdyBhbiBleGNlcHRpb24uCisgICAgICBpZiAodHlwZSA9PT0gU0NFX0NPTlRFWFRTLlJF
U09VUkNFX1VSTCkgeworICAgICAgICBpZiAoaXNSZXNvdXJjZVVybEFsbG93ZWRCeVBvbGljeSht
YXliZVRydXN0ZWQpKSB7CisgICAgICAgICAgcmV0dXJuIG1heWJlVHJ1c3RlZDsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICB0aHJvdyAkc2NlTWluRXJyKCdpbnNlY3VybCcsCisgICAgICAg
ICAgICAgICdCbG9ja2VkIGxvYWRpbmcgcmVzb3VyY2UgZnJvbSB1cmwgbm90IGFsbG93ZWQgYnkg
JHNjZURlbGVnYXRlIHBvbGljeS4gIFVSTDogezB9JywKKyAgICAgICAgICAgICAgbWF5YmVUcnVz
dGVkLnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFND
RV9DT05URVhUUy5IVE1MKSB7CisgICAgICAgIHJldHVybiBodG1sU2FuaXRpemVyKG1heWJlVHJ1
c3RlZCk7CisgICAgICB9CisgICAgICB0aHJvdyAkc2NlTWluRXJyKCd1bnNhZmUnLCAnQXR0ZW1w
dGluZyB0byB1c2UgYW4gdW5zYWZlIHZhbHVlIGluIGEgc2FmZSBjb250ZXh0LicpOworICAgIH0K
KworICAgIHJldHVybiB7IHRydXN0QXM6IHRydXN0QXMsCisgICAgICAgICAgICAgZ2V0VHJ1c3Rl
ZDogZ2V0VHJ1c3RlZCwKKyAgICAgICAgICAgICB2YWx1ZU9mOiB2YWx1ZU9mIH07CisgIH1dOwor
fQorCisKKy8qKgorICogQG5nZG9jIHByb3ZpZGVyCisgKiBAbmFtZSAkc2NlUHJvdmlkZXIKKyAq
IEBkZXNjcmlwdGlvbgorICoKKyAqIFRoZSAkc2NlUHJvdmlkZXIgcHJvdmlkZXIgYWxsb3dzIGRl
dmVsb3BlcnMgdG8gY29uZmlndXJlIHRoZSB7QGxpbmsgbmcuJHNjZSAkc2NlfSBzZXJ2aWNlLgor
ICogLSAgIGVuYWJsZS9kaXNhYmxlIFN0cmljdCBDb250ZXh0dWFsIEVzY2FwaW5nIChTQ0UpIGlu
IGEgbW9kdWxlCisgKiAtICAgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2l0
aCBhIGN1c3RvbSBkZWxlZ2F0ZQorICoKKyAqIFJlYWQgbW9yZSBhYm91dCB7QGxpbmsgbmcuJHNj
ZSBTdHJpY3QgQ29udGV4dHVhbCBFc2NhcGluZyAoU0NFKX0uCisgKi8KKworLyoganNoaW50IG1h
eGxlbjogZmFsc2UqLworCisvKioKKyAqIEBuZ2RvYyBzZXJ2aWNlCisgKiBAbmFtZSAkc2NlCisg
KiBAa2luZCBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlvbgorICoKKyAqIGAkc2NlYCBpcyBh
IHNlcnZpY2UgdGhhdCBwcm92aWRlcyBTdHJpY3QgQ29udGV4dHVhbCBFc2NhcGluZyBzZXJ2aWNl
cyB0byBBbmd1bGFySlMuCisgKgorICogIyBTdHJpY3QgQ29udGV4dHVhbCBFc2NhcGluZworICoK
KyAqIFN0cmljdCBDb250ZXh0dWFsIEVzY2FwaW5nIChTQ0UpIGlzIGEgbW9kZSBpbiB3aGljaCBB
bmd1bGFySlMgcmVxdWlyZXMgYmluZGluZ3MgaW4gY2VydGFpbgorICogY29udGV4dHMgdG8gcmVz
dWx0IGluIGEgdmFsdWUgdGhhdCBpcyBtYXJrZWQgYXMgc2FmZSB0byB1c2UgZm9yIHRoYXQgY29u
dGV4dC4gIE9uZSBleGFtcGxlIG9mCisgKiBzdWNoIGEgY29udGV4dCBpcyBiaW5kaW5nIGFyYml0
cmFyeSBodG1sIGNvbnRyb2xsZWQgYnkgdGhlIHVzZXIgdmlhIGBuZy1iaW5kLWh0bWxgLiAgV2Ug
cmVmZXIKKyAqIHRvIHRoZXNlIGNvbnRleHRzIGFzIHByaXZpbGVnZWQgb3IgU0NFIGNvbnRleHRz
LgorICoKKyAqIEFzIG9mIHZlcnNpb24gMS4yLCBBbmd1bGFyIHNoaXBzIHdpdGggU0NFIGVuYWJs
ZWQgYnkgZGVmYXVsdC4KKyAqCisgKiBOb3RlOiAgV2hlbiBlbmFibGVkICh0aGUgZGVmYXVsdCks
IElFPDExIGluIHF1aXJrcyBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQuICBJbiB0aGlzIG1vZGUsIElF
PDExIGFsbG93CisgKiBvbmUgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgamF2YXNjcmlwdCBieSB0aGUg
dXNlIG9mIHRoZSBleHByZXNzaW9uKCkgc3ludGF4LiAgUmVmZXIKKyAqIDxodHRwOi8vYmxvZ3Mu
bXNkbi5jb20vYi9pZS9hcmNoaXZlLzIwMDgvMTAvMTYvZW5kaW5nLWV4cHJlc3Npb25zLmFzcHg+
IHRvIGxlYXJuIG1vcmUgYWJvdXQgdGhlbS4KKyAqIFlvdSBjYW4gZW5zdXJlIHlvdXIgZG9jdW1l
bnQgaXMgaW4gc3RhbmRhcmRzIG1vZGUgYW5kIG5vdCBxdWlya3MgbW9kZSBieSBhZGRpbmcgYDwh
ZG9jdHlwZSBodG1sPmAKKyAqIHRvIHRoZSB0b3Agb2YgeW91ciBIVE1MIGRvY3VtZW50LgorICoK
KyAqIFNDRSBhc3Npc3RzIGluIHdyaXRpbmcgY29kZSBpbiB3YXkgdGhhdCAoYSkgaXMgc2VjdXJl
IGJ5IGRlZmF1bHQgYW5kIChiKSBtYWtlcyBhdWRpdGluZyBmb3IKKyAqIHNlY3VyaXR5IHZ1bG5l
cmFiaWxpdGllcyBzdWNoIGFzIFhTUywgY2xpY2tqYWNraW5nLCBldGMuIGEgbG90IGVhc2llci4K
KyAqCisgKiBIZXJlJ3MgYW4gZXhhbXBsZSBvZiBhIGJpbmRpbmcgaW4gYSBwcml2aWxlZ2VkIGNv
bnRleHQ6CisgKgorICogYGBgCisgKiA8aW5wdXQgbmctbW9kZWw9InVzZXJIdG1sIiBhcmlhLWxh
YmVsPSJVc2VyIGlucHV0Ij4KKyAqIDxkaXYgbmctYmluZC1odG1sPSJ1c2VySHRtbCI+PC9kaXY+
CisgKiBgYGAKKyAqCisgKiBOb3RpY2UgdGhhdCBgbmctYmluZC1odG1sYCBpcyBib3VuZCB0byBg
dXNlckh0bWxgIGNvbnRyb2xsZWQgYnkgdGhlIHVzZXIuICBXaXRoIFNDRQorICogZGlzYWJsZWQs
IHRoaXMgYXBwbGljYXRpb24gYWxsb3dzIHRoZSB1c2VyIHRvIHJlbmRlciBhcmJpdHJhcnkgSFRN
TCBpbnRvIHRoZSBESVYuCisgKiBJbiBhIG1vcmUgcmVhbGlzdGljIGV4YW1wbGUsIG9uZSBtYXkg
YmUgcmVuZGVyaW5nIHVzZXIgY29tbWVudHMsIGJsb2cgYXJ0aWNsZXMsIGV0Yy4gdmlhCisgKiBi
aW5kaW5ncy4gIChIVE1MIGlzIGp1c3Qgb25lIGV4YW1wbGUgb2YgYSBjb250ZXh0IHdoZXJlIHJl
bmRlcmluZyB1c2VyIGNvbnRyb2xsZWQgaW5wdXQgY3JlYXRlcworICogc2VjdXJpdHkgdnVsbmVy
YWJpbGl0aWVzLikKKyAqCisgKiBGb3IgdGhlIGNhc2Ugb2YgSFRNTCwgeW91IG1pZ2h0IHVzZSBh
IGxpYnJhcnksIGVpdGhlciBvbiB0aGUgY2xpZW50IHNpZGUsIG9yIG9uIHRoZSBzZXJ2ZXIgc2lk
ZSwKKyAqIHRvIHNhbml0aXplIHVuc2FmZSBIVE1MIGJlZm9yZSBiaW5kaW5nIHRvIHRoZSB2YWx1
ZSBhbmQgcmVuZGVyaW5nIGl0IGluIHRoZSBkb2N1bWVudC4KKyAqCisgKiBIb3cgd291bGQgeW91
IGVuc3VyZSB0aGF0IGV2ZXJ5IHBsYWNlIHRoYXQgdXNlZCB0aGVzZSB0eXBlcyBvZiBiaW5kaW5n
cyB3YXMgYm91bmQgdG8gYSB2YWx1ZSB0aGF0CisgKiB3YXMgc2FuaXRpemVkIGJ5IHlvdXIgbGli
cmFyeSAob3IgcmV0dXJuZWQgYXMgc2FmZSBmb3IgcmVuZGVyaW5nIGJ5IHlvdXIgc2VydmVyPykg
IEhvdyBjYW4geW91CisgKiBlbnN1cmUgdGhhdCB5b3UgZGlkbid0IGFjY2lkZW50YWxseSBkZWxl
dGUgdGhlIGxpbmUgdGhhdCBzYW5pdGl6ZWQgdGhlIHZhbHVlLCBvciByZW5hbWVkIHNvbWUKKyAq
IHByb3BlcnRpZXMvZmllbGRzIGFuZCBmb3Jnb3QgdG8gdXBkYXRlIHRoZSBiaW5kaW5nIHRvIHRo
ZSBzYW5pdGl6ZWQgdmFsdWU/CisgKgorICogVG8gYmUgc2VjdXJlIGJ5IGRlZmF1bHQsIHlvdSB3
YW50IHRvIGVuc3VyZSB0aGF0IGFueSBzdWNoIGJpbmRpbmdzIGFyZSBkaXNhbGxvd2VkIHVubGVz
cyB5b3UgY2FuCisgKiBkZXRlcm1pbmUgdGhhdCBzb21ldGhpbmcgZXhwbGljaXRseSBzYXlzIGl0
J3Mgc2FmZSB0byB1c2UgYSB2YWx1ZSBmb3IgYmluZGluZyBpbiB0aGF0CisgKiBjb250ZXh0LiAg
WW91IGNhbiB0aGVuIGF1ZGl0IHlvdXIgY29kZSAoYSBzaW1wbGUgZ3JlcCB3b3VsZCBkbykgdG8g
ZW5zdXJlIHRoYXQgdGhpcyBpcyBvbmx5IGRvbmUKKyAqIGZvciB0aG9zZSB2YWx1ZXMgdGhhdCB5
b3UgY2FuIGVhc2lseSB0ZWxsIGFyZSBzYWZlIC0gYmVjYXVzZSB0aGV5IHdlcmUgcmVjZWl2ZWQg
ZnJvbSB5b3VyIHNlcnZlciwKKyAqIHNhbml0aXplZCBieSB5b3VyIGxpYnJhcnksIGV0Yy4gIFlv
dSBjYW4gb3JnYW5pemUgeW91ciBjb2RlYmFzZSB0byBoZWxwIHdpdGggdGhpcyAtIHBlcmhhcHMK
KyAqIGFsbG93aW5nIG9ubHkgdGhlIGZpbGVzIGluIGEgc3BlY2lmaWMgZGlyZWN0b3J5IHRvIGRv
IHRoaXMuICBFbnN1cmluZyB0aGF0IHRoZSBpbnRlcm5hbCBBUEkKKyAqIGV4cG9zZWQgYnkgdGhh
dCBjb2RlIGRvZXNuJ3QgbWFya3VwIGFyYml0cmFyeSB2YWx1ZXMgYXMgc2FmZSB0aGVuIGJlY29t
ZXMgYSBtb3JlIG1hbmFnZWFibGUgdGFzay4KKyAqCisgKiBJbiB0aGUgY2FzZSBvZiBBbmd1bGFy
SlMnIFNDRSBzZXJ2aWNlLCBvbmUgdXNlcyB7QGxpbmsgbmcuJHNjZSN0cnVzdEFzICRzY2UudHJ1
c3RBc30KKyAqIChhbmQgc2hvcnRoYW5kIG1ldGhvZHMgc3VjaCBhcyB7QGxpbmsgbmcuJHNjZSN0
cnVzdEFzSHRtbCAkc2NlLnRydXN0QXNIdG1sfSwgZXRjLikgdG8KKyAqIG9idGFpbiB2YWx1ZXMg
dGhhdCB3aWxsIGJlIGFjY2VwdGVkIGJ5IFNDRSAvIHByaXZpbGVnZWQgY29udGV4dHMuCisgKgor
ICoKKyAqICMjIEhvdyBkb2VzIGl0IHdvcms/CisgKgorICogSW4gcHJpdmlsZWdlZCBjb250ZXh0
cywgZGlyZWN0aXZlcyBhbmQgY29kZSB3aWxsIGJpbmQgdG8gdGhlIHJlc3VsdCBvZiB7QGxpbmsg
bmcuJHNjZSNnZXRUcnVzdGVkCisgKiAkc2NlLmdldFRydXN0ZWQoY29udGV4dCwgdmFsdWUpfSBy
YXRoZXIgdGhhbiB0byB0aGUgdmFsdWUgZGlyZWN0bHkuICBEaXJlY3RpdmVzIHVzZSB7QGxpbmsK
KyAqIG5nLiRzY2UjcGFyc2VBcyAkc2NlLnBhcnNlQXN9IHJhdGhlciB0aGFuIGAkcGFyc2VgIHRv
IHdhdGNoIGF0dHJpYnV0ZSBiaW5kaW5ncywgd2hpY2ggcGVyZm9ybXMgdGhlCisgKiB7QGxpbmsg
bmcuJHNjZSNnZXRUcnVzdGVkICRzY2UuZ2V0VHJ1c3RlZH0gYmVoaW5kIHRoZSBzY2VuZXMgb24g
bm9uLWNvbnN0YW50IGxpdGVyYWxzLgorICoKKyAqIEFzIGFuIGV4YW1wbGUsIHtAbGluayBuZy5k
aXJlY3RpdmU6bmdCaW5kSHRtbCBuZ0JpbmRIdG1sfSB1c2VzIHtAbGluaworICogbmcuJHNjZSNw
YXJzZUFzSHRtbCAkc2NlLnBhcnNlQXNIdG1sKGJpbmRpbmcgZXhwcmVzc2lvbil9LiAgSGVyZSdz
IHRoZSBhY3R1YWwgY29kZSAoc2xpZ2h0bHkKKyAqIHNpbXBsaWZpZWQpOgorICoKKyAqIGBgYAor
ICogdmFyIG5nQmluZEh0bWxEaXJlY3RpdmUgPSBbJyRzY2UnLCBmdW5jdGlvbigkc2NlKSB7Cisg
KiAgIHJldHVybiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cikgeworICogICAgIHNjb3Bl
LiR3YXRjaCgkc2NlLnBhcnNlQXNIdG1sKGF0dHIubmdCaW5kSHRtbCksIGZ1bmN0aW9uKHZhbHVl
KSB7CisgKiAgICAgICBlbGVtZW50Lmh0bWwodmFsdWUgfHwgJycpOworICogICAgIH0pOworICog
ICB9OworICogfV07CisgKiBgYGAKKyAqCisgKiAjIyBJbXBhY3Qgb24gbG9hZGluZyB0ZW1wbGF0
ZXMKKyAqCisgKiBUaGlzIGFwcGxpZXMgYm90aCB0byB0aGUge0BsaW5rIG5nLmRpcmVjdGl2ZTpu
Z0luY2x1ZGUgYG5nLWluY2x1ZGVgfSBkaXJlY3RpdmUgYXMgd2VsbCBhcworICogYHRlbXBsYXRl
VXJsYCdzIHNwZWNpZmllZCBieSB7QGxpbmsgZ3VpZGUvZGlyZWN0aXZlIGRpcmVjdGl2ZXN9Lgor
ICoKKyAqIEJ5IGRlZmF1bHQsIEFuZ3VsYXIgb25seSBsb2FkcyB0ZW1wbGF0ZXMgZnJvbSB0aGUg
c2FtZSBkb21haW4gYW5kIHByb3RvY29sIGFzIHRoZSBhcHBsaWNhdGlvbgorICogZG9jdW1lbnQu
ICBUaGlzIGlzIGRvbmUgYnkgY2FsbGluZyB7QGxpbmsgbmcuJHNjZSNnZXRUcnVzdGVkUmVzb3Vy
Y2VVcmwKKyAqICRzY2UuZ2V0VHJ1c3RlZFJlc291cmNlVXJsfSBvbiB0aGUgdGVtcGxhdGUgVVJM
LiAgVG8gbG9hZCB0ZW1wbGF0ZXMgZnJvbSBvdGhlciBkb21haW5zIGFuZC9vcgorICogcHJvdG9j
b2xzLCB5b3UgbWF5IGVpdGhlciBlaXRoZXIge0BsaW5rIG5nLiRzY2VEZWxlZ2F0ZVByb3ZpZGVy
I3Jlc291cmNlVXJsV2hpdGVsaXN0IHdoaXRlbGlzdAorICogdGhlbX0gb3Ige0BsaW5rIG5nLiRz
Y2UjdHJ1c3RBc1Jlc291cmNlVXJsIHdyYXAgaXR9IGludG8gYSB0cnVzdGVkIHZhbHVlLgorICoK
KyAqICpQbGVhc2Ugbm90ZSo6CisgKiBUaGUgYnJvd3NlcidzCisgKiBbU2FtZSBPcmlnaW4gUG9s
aWN5XShodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Jyb3dzZXJzZWMvd2lraS9QYXJ0MiNTYW1l
LW9yaWdpbl9wb2xpY3lfZm9yX1hNTEh0dHBSZXF1ZXN0KQorICogYW5kIFtDcm9zcy1PcmlnaW4g
UmVzb3VyY2UgU2hhcmluZyAoQ09SUyldKGh0dHA6Ly93d3cudzMub3JnL1RSL2NvcnMvKQorICog
cG9saWN5IGFwcGx5IGluIGFkZGl0aW9uIHRvIHRoaXMgYW5kIG1heSBmdXJ0aGVyIHJlc3RyaWN0
IHdoZXRoZXIgdGhlIHRlbXBsYXRlIGlzIHN1Y2Nlc3NmdWxseQorICogbG9hZGVkLiAgVGhpcyBt
ZWFucyB0aGF0IHdpdGhvdXQgdGhlIHJpZ2h0IENPUlMgcG9saWN5LCBsb2FkaW5nIHRlbXBsYXRl
cyBmcm9tIGEgZGlmZmVyZW50IGRvbWFpbgorICogd29uJ3Qgd29yayBvbiBhbGwgYnJvd3NlcnMu
ICBBbHNvLCBsb2FkaW5nIHRlbXBsYXRlcyBmcm9tIGBmaWxlOi8vYCBVUkwgZG9lcyBub3Qgd29y
ayBvbiBzb21lCisgKiBicm93c2Vycy4KKyAqCisgKiAjIyBUaGlzIGZlZWxzIGxpa2UgdG9vIG11
Y2ggb3ZlcmhlYWQKKyAqCisgKiBJdCdzIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IFNDRSBv
bmx5IGFwcGxpZXMgdG8gaW50ZXJwb2xhdGlvbiBleHByZXNzaW9ucy4KKyAqCisgKiBJZiB5b3Vy
IGV4cHJlc3Npb25zIGFyZSBjb25zdGFudCBsaXRlcmFscywgdGhleSdyZSBhdXRvbWF0aWNhbGx5
IHRydXN0ZWQgYW5kIHlvdSBkb24ndCBuZWVkIHRvCisgKiBjYWxsIGAkc2NlLnRydXN0QXNgIG9u
IHRoZW0gKHJlbWVtYmVyIHRvIGluY2x1ZGUgdGhlIGBuZ1Nhbml0aXplYCBtb2R1bGUpIChlLmcu
CisgKiBgPGRpdiBuZy1iaW5kLWh0bWw9Iic8Yj5pbXBsaWNpdGx5IHRydXN0ZWQ8L2I+JyI+PC9k
aXY+YCkganVzdCB3b3Jrcy4KKyAqCisgKiBBZGRpdGlvbmFsbHksIGBhW2hyZWZdYCBhbmQgYGlt
Z1tzcmNdYCBhdXRvbWF0aWNhbGx5IHNhbml0aXplIHRoZWlyIFVSTHMgYW5kIGRvIG5vdCBwYXNz
IHRoZW0KKyAqIHRocm91Z2gge0BsaW5rIG5nLiRzY2UjZ2V0VHJ1c3RlZCAkc2NlLmdldFRydXN0
ZWR9LiAgU0NFIGRvZXNuJ3QgcGxheSBhIHJvbGUgaGVyZS4KKyAqCisgKiBUaGUgaW5jbHVkZWQg
e0BsaW5rIG5nLiRzY2VEZWxlZ2F0ZSAkc2NlRGVsZWdhdGV9IGNvbWVzIHdpdGggc2FuZSBkZWZh
dWx0cyB0byBhbGxvdyB5b3UgdG8gbG9hZAorICogdGVtcGxhdGVzIGluIGBuZy1pbmNsdWRlYCBm
cm9tIHlvdXIgYXBwbGljYXRpb24ncyBkb21haW4gd2l0aG91dCBoYXZpbmcgdG8gZXZlbiBrbm93
IGFib3V0IFNDRS4KKyAqIEl0IGJsb2NrcyBsb2FkaW5nIHRlbXBsYXRlcyBmcm9tIG90aGVyIGRv
bWFpbnMgb3IgbG9hZGluZyB0ZW1wbGF0ZXMgb3ZlciBodHRwIGZyb20gYW4gaHR0cHMKKyAqIHNl
cnZlZCBkb2N1bWVudC4gIFlvdSBjYW4gY2hhbmdlIHRoZXNlIGJ5IHNldHRpbmcgeW91ciBvd24g
Y3VzdG9tIHtAbGluaworICogbmcuJHNjZURlbGVnYXRlUHJvdmlkZXIjcmVzb3VyY2VVcmxXaGl0
ZWxpc3Qgd2hpdGVsaXN0c30gYW5kIHtAbGluaworICogbmcuJHNjZURlbGVnYXRlUHJvdmlkZXIj
cmVzb3VyY2VVcmxCbGFja2xpc3QgYmxhY2tsaXN0c30gZm9yIG1hdGNoaW5nIHN1Y2ggVVJMcy4K
KyAqCisgKiBUaGlzIHNpZ25pZmljYW50bHkgcmVkdWNlcyB0aGUgb3ZlcmhlYWQuICBJdCBpcyBm
YXIgZWFzaWVyIHRvIHBheSB0aGUgc21hbGwgb3ZlcmhlYWQgYW5kIGhhdmUgYW4KKyAqIGFwcGxp
Y2F0aW9uIHRoYXQncyBzZWN1cmUgYW5kIGNhbiBiZSBhdWRpdGVkIHRvIHZlcmlmeSB0aGF0IHdp
dGggbXVjaCBtb3JlIGVhc2UgdGhhbiBib2x0aW5nCisgKiBzZWN1cml0eSBvbnRvIGFuIGFwcGxp
Y2F0aW9uIGxhdGVyLgorICoKKyAqIDxhIG5hbWU9ImNvbnRleHRzIj48L2E+CisgKiAjIyBXaGF0
IHRydXN0ZWQgY29udGV4dCB0eXBlcyBhcmUgc3VwcG9ydGVkPworICoKKyAqIHwgQ29udGV4dCAg
ICAgICAgICAgICB8IE5vdGVzICAgICAgICAgIHwKKyAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS18
LS0tLS0tLS0tLS0tLS0tLXwKKyAqIHwgYCRzY2UuSFRNTGAgICAgICAgICB8IEZvciBIVE1MIHRo
YXQncyBzYWZlIHRvIHNvdXJjZSBpbnRvIHRoZSBhcHBsaWNhdGlvbi4gIFRoZSB7QGxpbmsgbmcu
ZGlyZWN0aXZlOm5nQmluZEh0bWwgbmdCaW5kSHRtbH0gZGlyZWN0aXZlIHVzZXMgdGhpcyBjb250
ZXh0IGZvciBiaW5kaW5ncy4gSWYgYW4gdW5zYWZlIHZhbHVlIGlzIGVuY291bnRlcmVkIGFuZCB0
aGUge0BsaW5rIG5nU2FuaXRpemUgJHNhbml0aXplfSBtb2R1bGUgaXMgcHJlc2VudCB0aGlzIHdp
bGwgc2FuaXRpemUgdGhlIHZhbHVlIGluc3RlYWQgb2YgdGhyb3dpbmcgYW4gZXJyb3IuIHwKKyAq
IHwgYCRzY2UuQ1NTYCAgICAgICAgICB8IEZvciBDU1MgdGhhdCdzIHNhZmUgdG8gc291cmNlIGlu
dG8gdGhlIGFwcGxpY2F0aW9uLiAgQ3VycmVudGx5IHVudXNlZC4gIEZlZWwgZnJlZSB0byB1c2Ug
aXQgaW4geW91ciBvd24gZGlyZWN0aXZlcy4gfAorICogfCBgJHNjZS5VUkxgICAgICAgICAgIHwg
Rm9yIFVSTHMgdGhhdCBhcmUgc2FmZSB0byBmb2xsb3cgYXMgbGlua3MuICBDdXJyZW50bHkgdW51
c2VkIChgPGEgaHJlZj1gIGFuZCBgPGltZyBzcmM9YCBzYW5pdGl6ZSB0aGVpciB1cmxzIGFuZCBk
b24ndCBjb25zdGl0dXRlIGFuIFNDRSBjb250ZXh0LiB8CisgKiB8IGAkc2NlLlJFU09VUkNFX1VS
TGAgfCBGb3IgVVJMcyB0aGF0IGFyZSBub3Qgb25seSBzYWZlIHRvIGZvbGxvdyBhcyBsaW5rcywg
YnV0IHdob3NlIGNvbnRlbnRzIGFyZSBhbHNvIHNhZmUgdG8gaW5jbHVkZSBpbiB5b3VyIGFwcGxp
Y2F0aW9uLiAgRXhhbXBsZXMgaW5jbHVkZSBgbmctaW5jbHVkZWAsIGBzcmNgIC8gYG5nU3JjYCBi
aW5kaW5ncyBmb3IgdGFncyBvdGhlciB0aGFuIGBJTUdgIChlLmcuIGBJRlJBTUVgLCBgT0JKRUNU
YCwgZXRjLikgIDxicj48YnI+Tm90ZSB0aGF0IGAkc2NlLlJFU09VUkNFX1VSTGAgbWFrZXMgYSBz
dHJvbmdlciBzdGF0ZW1lbnQgYWJvdXQgdGhlIFVSTCB0aGFuIGAkc2NlLlVSTGAgZG9lcyBhbmQg
dGhlcmVmb3JlIGNvbnRleHRzIHJlcXVpcmluZyB2YWx1ZXMgdHJ1c3RlZCBmb3IgYCRzY2UuUkVT
T1VSQ0VfVVJMYCBjYW4gYmUgdXNlZCBhbnl3aGVyZSB0aGF0IHZhbHVlcyB0cnVzdGVkIGZvciBg
JHNjZS5VUkxgIGFyZSByZXF1aXJlZC4gfAorICogfCBgJHNjZS5KU2AgICAgICAgICAgIHwgRm9y
IEphdmFTY3JpcHQgdGhhdCBpcyBzYWZlIHRvIGV4ZWN1dGUgaW4geW91ciBhcHBsaWNhdGlvbidz
IGNvbnRleHQuICBDdXJyZW50bHkgdW51c2VkLiAgRmVlbCBmcmVlIHRvIHVzZSBpdCBpbiB5b3Vy
IG93biBkaXJlY3RpdmVzLiB8CisgKgorICogIyMgRm9ybWF0IG9mIGl0ZW1zIGluIHtAbGluayBu
Zy4kc2NlRGVsZWdhdGVQcm92aWRlciNyZXNvdXJjZVVybFdoaXRlbGlzdCByZXNvdXJjZVVybFdo
aXRlbGlzdH0ve0BsaW5rIG5nLiRzY2VEZWxlZ2F0ZVByb3ZpZGVyI3Jlc291cmNlVXJsQmxhY2ts
aXN0IEJsYWNrbGlzdH0gPGEgbmFtZT0icmVzb3VyY2VVcmxQYXR0ZXJuSXRlbSI+PC9hPgorICoK
KyAqICBFYWNoIGVsZW1lbnQgaW4gdGhlc2UgYXJyYXlzIG11c3QgYmUgb25lIG9mIHRoZSBmb2xs
b3dpbmc6CisgKgorICogIC0gKionc2VsZicqKgorICogICAgLSBUaGUgc3BlY2lhbCAqKnN0cmlu
ZyoqLCBgJ3NlbGYnYCwgY2FuIGJlIHVzZWQgdG8gbWF0Y2ggYWdhaW5zdCBhbGwgVVJMcyBvZiB0
aGUgKipzYW1lCisgKiAgICAgIGRvbWFpbioqIGFzIHRoZSBhcHBsaWNhdGlvbiBkb2N1bWVudCB1
c2luZyB0aGUgKipzYW1lIHByb3RvY29sKiouCisgKiAgLSAqKlN0cmluZyoqIChleGNlcHQgdGhl
IHNwZWNpYWwgdmFsdWUgYCdzZWxmJ2ApCisgKiAgICAtIFRoZSBzdHJpbmcgaXMgbWF0Y2hlZCBh
Z2FpbnN0IHRoZSBmdWxsICpub3JtYWxpemVkIC8gYWJzb2x1dGUgVVJMKiBvZiB0aGUgcmVzb3Vy
Y2UKKyAqICAgICAgYmVpbmcgdGVzdGVkIChzdWJzdHJpbmcgbWF0Y2hlcyBhcmUgbm90IGdvb2Qg
ZW5vdWdoLikKKyAqICAgIC0gVGhlcmUgYXJlIGV4YWN0bHkgKip0d28gd2lsZGNhcmQgc2VxdWVu
Y2VzKiogLSBgKmAgYW5kIGAqKmAuICBBbGwgb3RoZXIgY2hhcmFjdGVycworICogICAgICBtYXRj
aCB0aGVtc2VsdmVzLgorICogICAgLSBgKmA6IG1hdGNoZXMgemVybyBvciBtb3JlIG9jY3VycmVu
Y2VzIG9mIGFueSBjaGFyYWN0ZXIgb3RoZXIgdGhhbiBvbmUgb2YgdGhlIGZvbGxvd2luZyA2Cisg
KiAgICAgIGNoYXJhY3RlcnM6ICdgOmAnLCAnYC9gJywgJ2AuYCcsICdgP2AnLCAnYCZgJyBhbmQg
JzsnLiAgSXQncyBhIHVzZWZ1bCB3aWxkY2FyZCBmb3IgdXNlCisgKiAgICAgIGluIGEgd2hpdGVs
aXN0LgorICogICAgLSBgKipgOiBtYXRjaGVzIHplcm8gb3IgbW9yZSBvY2N1cnJlbmNlcyBvZiAq
YW55KiBjaGFyYWN0ZXIuICBBcyBzdWNoLCBpdCdzIG5vdAorICogICAgICBub3QgYXBwcm9wcmlh
dGUgdG8gdXNlIGluIGZvciBhIHNjaGVtZSwgZG9tYWluLCBldGMuIGFzIGl0IHdvdWxkIG1hdGNo
IHRvbyBtdWNoLiAgKGUuZy4KKyAqICAgICAgaHR0cDovLyoqLmV4YW1wbGUuY29tLyB3b3VsZCBt
YXRjaCBodHRwOi8vZXZpbC5jb20vP2lnbm9yZT0uZXhhbXBsZS5jb20vIGFuZCB0aGF0IG1pZ2h0
CisgKiAgICAgIG5vdCBoYXZlIGJlZW4gdGhlIGludGVudGlvbi4pICBJdHMgdXNhZ2UgYXQgdGhl
IHZlcnkgZW5kIG9mIHRoZSBwYXRoIGlzIG9rLiAgKGUuZy4KKyAqICAgICAgaHR0cDovL2Zvby5l
eGFtcGxlLmNvbS90ZW1wbGF0ZXMvKiopLgorICogIC0gKipSZWdFeHAqKiAoKnNlZSBjYXZlYXQg
YmVsb3cqKQorICogICAgLSAqQ2F2ZWF0KjogIFdoaWxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYXJl
IHBvd2VyZnVsIGFuZCBvZmZlciBncmVhdCBmbGV4aWJpbGl0eSwgIHRoZWlyIHN5bnRheAorICog
ICAgICAoYW5kIGFsbCB0aGUgaW5ldml0YWJsZSBlc2NhcGluZykgbWFrZXMgdGhlbSAqaGFyZGVy
IHRvIG1haW50YWluKi4gIEl0J3MgZWFzeSB0bworICogICAgICBhY2NpZGVudGFsbHkgaW50cm9k
dWNlIGEgYnVnIHdoZW4gb25lIHVwZGF0ZXMgYSBjb21wbGV4IGV4cHJlc3Npb24gKGltaG8sIGFs
bCByZWdleGVzIHNob3VsZAorICogICAgICBoYXZlIGdvb2QgdGVzdCBjb3ZlcmFnZS4pLiAgRm9y
IGluc3RhbmNlLCB0aGUgdXNlIG9mIGAuYCBpbiB0aGUgcmVnZXggaXMgY29ycmVjdCBvbmx5IGlu
IGEKKyAqICAgICAgc21hbGwgbnVtYmVyIG9mIGNhc2VzLiAgQSBgLmAgY2hhcmFjdGVyIGluIHRo
ZSByZWdleCB1c2VkIHdoZW4gbWF0Y2hpbmcgdGhlIHNjaGVtZSBvciBhCisgKiAgICAgIHN1YmRv
bWFpbiBjb3VsZCBiZSBtYXRjaGVkIGFnYWluc3QgYSBgOmAgb3IgbGl0ZXJhbCBgLmAgdGhhdCB3
YXMgbGlrZWx5IG5vdCBpbnRlbmRlZC4gICBJdAorICogICAgICBpcyBoaWdobHkgcmVjb21tZW5k
ZWQgdG8gdXNlIHRoZSBzdHJpbmcgcGF0dGVybnMgYW5kIG9ubHkgZmFsbCBiYWNrIHRvIHJlZ3Vs
YXIgZXhwcmVzc2lvbnMKKyAqICAgICAgaWYgdGhleSBhcyBhIGxhc3QgcmVzb3J0LgorICogICAg
LSBUaGUgcmVndWxhciBleHByZXNzaW9uIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgUmVnRXhwIChp
LmUuIG5vdCBhIHN0cmluZy4pICBJdCBpcworICogICAgICBtYXRjaGVkIGFnYWluc3QgdGhlICoq
ZW50aXJlKiogKm5vcm1hbGl6ZWQgLyBhYnNvbHV0ZSBVUkwqIG9mIHRoZSByZXNvdXJjZSBiZWlu
ZyB0ZXN0ZWQKKyAqICAgICAgKGV2ZW4gd2hlbiB0aGUgUmVnRXhwIGRpZCBub3QgaGF2ZSB0aGUg
YF5gIGFuZCBgJGAgY29kZXMuKSAgSW4gYWRkaXRpb24sIGFueSBmbGFncworICogICAgICBwcmVz
ZW50IG9uIHRoZSBSZWdFeHAgKHN1Y2ggYXMgbXVsdGlsaW5lLCBnbG9iYWwsIGlnbm9yZUNhc2Up
IGFyZSBpZ25vcmVkLgorICogICAgLSBJZiB5b3UgYXJlIGdlbmVyYXRpbmcgeW91ciBKYXZhU2Ny
aXB0IGZyb20gc29tZSBvdGhlciB0ZW1wbGF0aW5nIGVuZ2luZSAobm90CisgKiAgICAgIHJlY29t
bWVuZGVkLCBlLmcuIGluIGlzc3VlIFsjNDAwNl0oaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIv
YW5ndWxhci5qcy9pc3N1ZXMvNDAwNikpLAorICogICAgICByZW1lbWJlciB0byBlc2NhcGUgeW91
ciByZWd1bGFyIGV4cHJlc3Npb24gKGFuZCBiZSBhd2FyZSB0aGF0IHlvdSBtaWdodCBuZWVkIG1v
cmUgdGhhbgorICogICAgICBvbmUgbGV2ZWwgb2YgZXNjYXBpbmcgZGVwZW5kaW5nIG9uIHlvdXIg
dGVtcGxhdGluZyBlbmdpbmUgYW5kIHRoZSB3YXkgeW91IGludGVycG9sYXRlZAorICogICAgICB0
aGUgdmFsdWUuKSAgRG8gbWFrZSB1c2Ugb2YgeW91ciBwbGF0Zm9ybSdzIGVzY2FwaW5nIG1lY2hh
bmlzbSBhcyBpdCBtaWdodCBiZSBnb29kCisgKiAgICAgIGVub3VnaCBiZWZvcmUgY29kaW5nIHlv
dXIgb3duLiAgZS5nLiBSdWJ5IGhhcworICogICAgICBbUmVnZXhwLmVzY2FwZShzdHIpXShodHRw
Oi8vd3d3LnJ1YnktZG9jLm9yZy9jb3JlLTIuMC4wL1JlZ2V4cC5odG1sI21ldGhvZC1jLWVzY2Fw
ZSkKKyAqICAgICAgYW5kIFB5dGhvbiBoYXMgW3JlLmVzY2FwZV0oaHR0cDovL2RvY3MucHl0aG9u
Lm9yZy9saWJyYXJ5L3JlLmh0bWwjcmUuZXNjYXBlKS4KKyAqICAgICAgSmF2YXNjcmlwdCBsYWNr
cyBhIHNpbWlsYXIgYnVpbHQgaW4gZnVuY3Rpb24gZm9yIGVzY2FwaW5nLiAgVGFrZSBhIGxvb2sg
YXQgR29vZ2xlCisgKiAgICAgIENsb3N1cmUgbGlicmFyeSdzIFtnb29nLnN0cmluZy5yZWdFeHBF
c2NhcGUocyldKAorICogICAgICBodHRwOi8vZG9jcy5jbG9zdXJlLWxpYnJhcnkuZ29vZ2xlY29k
ZS5jb20vZ2l0L2Nsb3N1cmVfZ29vZ19zdHJpbmdfc3RyaW5nLmpzLnNvdXJjZS5odG1sI2xpbmU5
NjIpLgorICoKKyAqIFJlZmVyIHtAbGluayBuZy4kc2NlRGVsZWdhdGVQcm92aWRlciAkc2NlRGVs
ZWdhdGVQcm92aWRlcn0gZm9yIGFuIGV4YW1wbGUuCisgKgorICogIyMgU2hvdyBtZSBhbiBleGFt
cGxlIHVzaW5nIFNDRS4KKyAqCisgKiA8ZXhhbXBsZSBtb2R1bGU9Im15U2NlQXBwIiBkZXBzPSJh
bmd1bGFyLXNhbml0aXplLmpzIj4KKyAqIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICogICA8
ZGl2IG5nLWNvbnRyb2xsZXI9IkFwcENvbnRyb2xsZXIgYXMgbXlDdHJsIj4KKyAqICAgICA8aSBu
Zy1iaW5kLWh0bWw9Im15Q3RybC5leHBsaWNpdGx5VHJ1c3RlZEh0bWwiIGlkPSJleHBsaWNpdGx5
VHJ1c3RlZEh0bWwiPjwvaT48YnI+PGJyPgorICogICAgIDxiPlVzZXIgY29tbWVudHM8L2I+PGJy
PgorICogICAgIEJ5IGRlZmF1bHQsIEhUTUwgdGhhdCBpc24ndCBleHBsaWNpdGx5IHRydXN0ZWQg
KGUuZy4gQWxpY2UncyBjb21tZW50KSBpcyBzYW5pdGl6ZWQgd2hlbgorICogICAgICRzYW5pdGl6
ZSBpcyBhdmFpbGFibGUuICBJZiAkc2FuaXRpemUgaXNuJ3QgYXZhaWxhYmxlLCB0aGlzIHJlc3Vs
dHMgaW4gYW4gZXJyb3IgaW5zdGVhZCBvZiBhbgorICogICAgIGV4cGxvaXQuCisgKiAgICAgPGRp
diBjbGFzcz0id2VsbCI+CisgKiAgICAgICA8ZGl2IG5nLXJlcGVhdD0idXNlckNvbW1lbnQgaW4g
bXlDdHJsLnVzZXJDb21tZW50cyI+CisgKiAgICAgICAgIDxiPnt7dXNlckNvbW1lbnQubmFtZX19
PC9iPjoKKyAqICAgICAgICAgPHNwYW4gbmctYmluZC1odG1sPSJ1c2VyQ29tbWVudC5odG1sQ29t
bWVudCIgY2xhc3M9Imh0bWxDb21tZW50Ij48L3NwYW4+CisgKiAgICAgICAgIDxicj4KKyAqICAg
ICAgIDwvZGl2PgorICogICAgIDwvZGl2PgorICogICA8L2Rpdj4KKyAqIDwvZmlsZT4KKyAqCisg
KiA8ZmlsZSBuYW1lPSJzY3JpcHQuanMiPgorICogICBhbmd1bGFyLm1vZHVsZSgnbXlTY2VBcHAn
LCBbJ25nU2FuaXRpemUnXSkKKyAqICAgICAuY29udHJvbGxlcignQXBwQ29udHJvbGxlcicsIFsn
JGh0dHAnLCAnJHRlbXBsYXRlQ2FjaGUnLCAnJHNjZScsCisgKiAgICAgICBmdW5jdGlvbigkaHR0
cCwgJHRlbXBsYXRlQ2FjaGUsICRzY2UpIHsKKyAqICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwor
ICogICAgICAgICAkaHR0cC5nZXQoInRlc3RfZGF0YS5qc29uIiwge2NhY2hlOiAkdGVtcGxhdGVD
YWNoZX0pLnN1Y2Nlc3MoZnVuY3Rpb24odXNlckNvbW1lbnRzKSB7CisgKiAgICAgICAgICAgc2Vs
Zi51c2VyQ29tbWVudHMgPSB1c2VyQ29tbWVudHM7CisgKiAgICAgICAgIH0pOworICogICAgICAg
ICBzZWxmLmV4cGxpY2l0bHlUcnVzdGVkSHRtbCA9ICRzY2UudHJ1c3RBc0h0bWwoCisgKiAgICAg
ICAgICAgICAnPHNwYW4gb25tb3VzZW92ZXI9InRoaXMudGV4dENvbnRlbnQ9JnF1b3Q7RXhwbGlj
aXRseSB0cnVzdGVkIEhUTUwgYnlwYXNzZXMgJyArCisgKiAgICAgICAgICAgICAnc2FuaXRpemF0
aW9uLiZxdW90OyI+SG92ZXIgb3ZlciB0aGlzIHRleHQuPC9zcGFuPicpOworICogICAgICAgfV0p
OworICogPC9maWxlPgorICoKKyAqIDxmaWxlIG5hbWU9InRlc3RfZGF0YS5qc29uIj4KKyAqIFsK
KyAqICAgeyAibmFtZSI6ICJBbGljZSIsCisgKiAgICAgImh0bWxDb21tZW50IjoKKyAqICAgICAg
ICAgIjxzcGFuIG9ubW91c2VvdmVyPSd0aGlzLnRleHRDb250ZW50PVwiUFdOM0QhXCInPklzIDxp
PmFueW9uZTwvaT4gcmVhZGluZyB0aGlzPzwvc3Bhbj4iCisgKiAgIH0sCisgKiAgIHsgIm5hbWUi
OiAiQm9iIiwKKyAqICAgICAiaHRtbENvbW1lbnQiOiAiPGk+WWVzITwvaT4gIEFtIEkgdGhlIG9u
bHkgb3RoZXIgb25lPyIKKyAqICAgfQorICogXQorICogPC9maWxlPgorICoKKyAqIDxmaWxlIG5h
bWU9InByb3RyYWN0b3IuanMiIHR5cGU9InByb3RyYWN0b3IiPgorICogICBkZXNjcmliZSgnU0NF
IGRvYyBkZW1vJywgZnVuY3Rpb24oKSB7CisgKiAgICAgaXQoJ3Nob3VsZCBzYW5pdGl6ZSB1bnRy
dXN0ZWQgdmFsdWVzJywgZnVuY3Rpb24oKSB7CisgKiAgICAgICBleHBlY3QoZWxlbWVudC5hbGwo
YnkuY3NzKCcuaHRtbENvbW1lbnQnKSkuZmlyc3QoKS5nZXRJbm5lckh0bWwoKSkKKyAqICAgICAg
ICAgICAudG9CZSgnPHNwYW4+SXMgPGk+YW55b25lPC9pPiByZWFkaW5nIHRoaXM/PC9zcGFuPicp
OworICogICAgIH0pOworICoKKyAqICAgICBpdCgnc2hvdWxkIE5PVCBzYW5pdGl6ZSBleHBsaWNp
dGx5IHRydXN0ZWQgdmFsdWVzJywgZnVuY3Rpb24oKSB7CisgKiAgICAgICBleHBlY3QoZWxlbWVu
dChieS5pZCgnZXhwbGljaXRseVRydXN0ZWRIdG1sJykpLmdldElubmVySHRtbCgpKS50b0JlKAor
ICogICAgICAgICAgICc8c3BhbiBvbm1vdXNlb3Zlcj0idGhpcy50ZXh0Q29udGVudD0mcXVvdDtF
eHBsaWNpdGx5IHRydXN0ZWQgSFRNTCBieXBhc3NlcyAnICsKKyAqICAgICAgICAgICAnc2FuaXRp
emF0aW9uLiZxdW90OyI+SG92ZXIgb3ZlciB0aGlzIHRleHQuPC9zcGFuPicpOworICogICAgIH0p
OworICogICB9KTsKKyAqIDwvZmlsZT4KKyAqIDwvZXhhbXBsZT4KKyAqCisgKgorICoKKyAqICMj
IENhbiBJIGRpc2FibGUgU0NFIGNvbXBsZXRlbHk/CisgKgorICogWWVzLCB5b3UgY2FuLiAgSG93
ZXZlciwgdGhpcyBpcyBzdHJvbmdseSBkaXNjb3VyYWdlZC4gIFNDRSBnaXZlcyB5b3UgYSBsb3Qg
b2Ygc2VjdXJpdHkgYmVuZWZpdHMKKyAqIGZvciBsaXR0bGUgY29kaW5nIG92ZXJoZWFkLiAgSXQg
d2lsbCBiZSBtdWNoIGhhcmRlciB0byB0YWtlIGFuIFNDRSBkaXNhYmxlZCBhcHBsaWNhdGlvbiBh
bmQKKyAqIGVpdGhlciBzZWN1cmUgaXQgb24geW91ciBvd24gb3IgZW5hYmxlIFNDRSBhdCBhIGxh
dGVyIHN0YWdlLiAgSXQgbWlnaHQgbWFrZSBzZW5zZSB0byBkaXNhYmxlIFNDRQorICogZm9yIGNh
c2VzIHdoZXJlIHlvdSBoYXZlIGEgbG90IG9mIGV4aXN0aW5nIGNvZGUgdGhhdCB3YXMgd3JpdHRl
biBiZWZvcmUgU0NFIHdhcyBpbnRyb2R1Y2VkIGFuZAorICogeW91J3JlIG1pZ3JhdGluZyB0aGVt
IGEgbW9kdWxlIGF0IGEgdGltZS4KKyAqCisgKiBUaGF0IHNhaWQsIGhlcmUncyBob3cgeW91IGNh
biBjb21wbGV0ZWx5IGRpc2FibGUgU0NFOgorICoKKyAqIGBgYAorICogYW5ndWxhci5tb2R1bGUo
J215QXBwV2l0aFNjZURpc2FibGVkbXlBcHAnLCBbXSkuY29uZmlnKGZ1bmN0aW9uKCRzY2VQcm92
aWRlcikgeworICogICAvLyBDb21wbGV0ZWx5IGRpc2FibGUgU0NFLiAgRm9yIGRlbW9uc3RyYXRp
b24gcHVycG9zZXMgb25seSEKKyAqICAgLy8gRG8gbm90IHVzZSBpbiBuZXcgcHJvamVjdHMuCisg
KiAgICRzY2VQcm92aWRlci5lbmFibGVkKGZhbHNlKTsKKyAqIH0pOworICogYGBgCisgKgorICov
CisvKiBqc2hpbnQgbWF4bGVuOiAxMDAgKi8KKworZnVuY3Rpb24gJFNjZVByb3ZpZGVyKCkgewor
ICB2YXIgZW5hYmxlZCA9IHRydWU7CisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICog
QG5hbWUgJHNjZVByb3ZpZGVyI2VuYWJsZWQKKyAgICogQGtpbmQgZnVuY3Rpb24KKyAgICoKKyAg
ICogQHBhcmFtIHtib29sZWFuPX0gdmFsdWUgSWYgcHJvdmlkZWQsIHRoZW4gZW5hYmxlcy9kaXNh
YmxlcyBTQ0UuCisgICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgU0NFIGlzIGVuYWJsZWQs
IGZhbHNlIG90aGVyd2lzZS4KKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIEVuYWJsZXMv
ZGlzYWJsZXMgU0NFIGFuZCByZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlLgorICAgKi8KKyAgdGhp
cy5lbmFibGVkID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCkg
eworICAgICAgZW5hYmxlZCA9ICEhdmFsdWU7CisgICAgfQorICAgIHJldHVybiBlbmFibGVkOwor
ICB9OworCisKKyAgLyogRGVzaWduIG5vdGVzIG9uIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9u
IGZvciBTQ0UuCisgICAqCisgICAqIFRoZSBBUEkgY29udHJhY3QgZm9yIHRoZSBTQ0UgZGVsZWdh
dGUKKyAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgKiBUaGUg
U0NFIGRlbGVnYXRlIG9iamVjdCBtdXN0IHByb3ZpZGUgdGhlIGZvbGxvd2luZyAzIG1ldGhvZHM6
CisgICAqCisgICAqIC0gdHJ1c3RBcyhjb250ZXh0RW51bSwgdmFsdWUpCisgICAqICAgICBUaGlz
IG1ldGhvZCBpcyB1c2VkIHRvIHRlbGwgdGhlIFNDRSBzZXJ2aWNlIHRoYXQgdGhlIHByb3ZpZGVk
IHZhbHVlIGlzIE9LIHRvIHVzZSBpbiB0aGUKKyAgICogICAgIGNvbnRleHRzIHNwZWNpZmllZCBi
eSBjb250ZXh0RW51bS4gIEl0IG11c3QgcmV0dXJuIGFuIG9iamVjdCB0aGF0IHdpbGwgYmUgYWNj
ZXB0ZWQgYnkKKyAgICogICAgIGdldFRydXN0ZWQoKSBmb3IgYSBjb21wYXRpYmxlIGNvbnRleHRF
bnVtIGFuZCByZXR1cm4gdGhpcyB2YWx1ZS4KKyAgICoKKyAgICogLSB2YWx1ZU9mKHZhbHVlKQor
ICAgKiAgICAgRm9yIHZhbHVlcyB0aGF0IHdlcmUgbm90IHByb2R1Y2VkIGJ5IHRydXN0QXMoKSwg
cmV0dXJuIHRoZW0gYXMgaXMuICBGb3IgdmFsdWVzIHRoYXQgd2VyZQorICAgKiAgICAgcHJvZHVj
ZWQgYnkgdHJ1c3RBcygpLCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgaW5wdXQgdmFsdWUgdG8g
dHJ1c3RBcy4gIEJhc2ljYWxseSwgaWYKKyAgICogICAgIHRydXN0QXMgaXMgd3JhcHBpbmcgdGhl
IGdpdmVuIHZhbHVlcyBpbnRvIHNvbWUgdHlwZSwgdGhpcyBvcGVyYXRpb24gdW53cmFwcyBpdCB3
aGVuIGdpdmVuCisgICAqICAgICBzdWNoIGEgdmFsdWUuCisgICAqCisgICAqIC0gZ2V0VHJ1c3Rl
ZChjb250ZXh0RW51bSwgdmFsdWUpCisgICAqICAgICBUaGlzIGZ1bmN0aW9uIHNob3VsZCByZXR1
cm4gdGhlIGEgdmFsdWUgdGhhdCBpcyBzYWZlIHRvIHVzZSBpbiB0aGUgY29udGV4dCBzcGVjaWZp
ZWQgYnkKKyAgICogICAgIGNvbnRleHRFbnVtIG9yIHRocm93IGFuZCBleGNlcHRpb24gb3RoZXJ3
aXNlLgorICAgKgorICAgKiBOT1RFOiBUaGlzIGNvbnRyYWN0IGRlbGliZXJhdGVseSBkb2VzIE5P
VCBzdGF0ZSB0aGF0IHZhbHVlcyByZXR1cm5lZCBieSB0cnVzdEFzKCkgbXVzdCBiZQorICAgKiBv
cGFxdWUgb3Igd3JhcHBlZCBpbiBzb21lIGhvbGRlciBvYmplY3QuICBUaGF0IGhhcHBlbnMgdG8g
YmUgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLiAgRm9yCisgICAqIGluc3RhbmNlLCBhbiBpbXBs
ZW1lbnRhdGlvbiBjb3VsZCBtYWludGFpbiBhIHJlZ2lzdHJ5IG9mIGFsbCB0cnVzdGVkIG9iamVj
dHMgYnkgY29udGV4dC4gIEluCisgICAqIHN1Y2ggYSBjYXNlLCB0cnVzdEFzKCkgd291bGQgcmV0
dXJuIHRoZSBzYW1lIG9iamVjdCB0aGF0IHdhcyBwYXNzZWQgaW4uICBnZXRUcnVzdGVkKCkgd291
bGQKKyAgICogcmV0dXJuIHRoZSBzYW1lIG9iamVjdCBwYXNzZWQgaW4gaWYgaXQgd2FzIGZvdW5k
IGluIHRoZSByZWdpc3RyeSB1bmRlciBhIGNvbXBhdGlibGUgY29udGV4dCBvcgorICAgKiB0aHJv
dyBhbiBleGNlcHRpb24gb3RoZXJ3aXNlLiAgQW4gaW1wbGVtZW50YXRpb24gbWlnaHQgb25seSB3
cmFwIHZhbHVlcyBzb21lIG9mIHRoZSB0aW1lIGJhc2VkCisgICAqIG9uIHNvbWUgY3JpdGVyaWEu
ICBnZXRUcnVzdGVkKCkgbWlnaHQgcmV0dXJuIGEgdmFsdWUgYW5kIG5vdCB0aHJvdyBhbiBleGNl
cHRpb24gZm9yIHNwZWNpYWwKKyAgICogY29uc3RhbnRzIG9yIG9iamVjdHMgZXZlbiBpZiBub3Qg
d3JhcHBlZC4gIEFsbCBzdWNoIGltcGxlbWVudGF0aW9ucyBmdWxmaWxsIHRoaXMgY29udHJhY3Qu
CisgICAqCisgICAqCisgICAqIEEgbm90ZSBvbiB0aGUgaW5oZXJpdGFuY2UgbW9kZWwgZm9yIFND
RSBjb250ZXh0cworICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKyAgICogSSd2ZSB1c2VkIGluaGVyaXRhbmNlIGFuZCBtYWRlIFJFU09VUkNFX1VS
TCB3cmFwcGVkIHR5cGVzIGEgc3VidHlwZSBvZiBVUkwgd3JhcHBlZCB0eXBlcy4gIFRoaXMKKyAg
ICogaXMgcHVyZWx5IGFuIGltcGxlbWVudGF0aW9uIGRldGFpbHMuCisgICAqCisgICAqIFRoZSBj
b250cmFjdCBpcyBzaW1wbHkgdGhpczoKKyAgICoKKyAgICogICAgIGdldFRydXN0ZWQoJHNjZS5S
RVNPVVJDRV9VUkwsIHZhbHVlKSBzdWNjZWVkaW5nIGltcGxpZXMgdGhhdCBnZXRUcnVzdGVkKCRz
Y2UuVVJMLCB2YWx1ZSkKKyAgICogICAgIHdpbGwgYWxzbyBzdWNjZWVkLgorICAgKgorICAgKiBJ
bmhlcml0YW5jZSBoYXBwZW5zIHRvIGNhcHR1cmUgdGhpcyBpbiBhIG5hdHVyYWwgd2F5LiAgSW4g
c29tZSBmdXR1cmUsIHdlCisgICAqIG1heSBub3QgdXNlIGluaGVyaXRhbmNlIGFueW1vcmUuICBU
aGF0IGlzIE9LIGJlY2F1c2Ugbm8gY29kZSBvdXRzaWRlIG9mCisgICAqIHNjZS5qcyBhbmQgc2Nl
U3BlY3MuanMgd291bGQgbmVlZCB0byBiZSBhd2FyZSBvZiB0aGlzIGRldGFpbC4KKyAgICovCisK
KyAgdGhpcy4kZ2V0ID0gWyckcGFyc2UnLCAnJHNjZURlbGVnYXRlJywgZnVuY3Rpb24oCisgICAg
ICAgICAgICAgICAgJHBhcnNlLCAgICRzY2VEZWxlZ2F0ZSkgeworICAgIC8vIFByZXJlcTogRW5z
dXJlIHRoYXQgd2UncmUgbm90IHJ1bm5pbmcgaW4gSUU8MTEgcXVpcmtzIG1vZGUuICBJbiB0aGF0
IG1vZGUsIElFIDwgMTEgYWxsb3cKKyAgICAvLyB0aGUgImV4cHJlc3Npb24oamF2YXNjcmlwdCBl
eHByZXNzaW9uKSIgc3ludGF4IHdoaWNoIGlzIGluc2VjdXJlLgorICAgIGlmIChlbmFibGVkICYm
IG1zaWUgPCA4KSB7CisgICAgICB0aHJvdyAkc2NlTWluRXJyKCdpZXF1aXJrcycsCisgICAgICAg
ICdTdHJpY3QgQ29udGV4dHVhbCBFc2NhcGluZyBkb2VzIG5vdCBzdXBwb3J0IEludGVybmV0IEV4
cGxvcmVyIHZlcnNpb24gPCAxMSBpbiBxdWlya3MgJyArCisgICAgICAgICdtb2RlLiAgWW91IGNh
biBmaXggdGhpcyBieSBhZGRpbmcgdGhlIHRleHQgPCFkb2N0eXBlIGh0bWw+IHRvIHRoZSB0b3Ag
b2YgeW91ciBIVE1MICcgKworICAgICAgICAnZG9jdW1lbnQuICBTZWUgaHR0cDovL2RvY3MuYW5n
dWxhcmpzLm9yZy9hcGkvbmcuJHNjZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nKTsKKyAgICB9CisK
KyAgICB2YXIgc2NlID0gc2hhbGxvd0NvcHkoU0NFX0NPTlRFWFRTKTsKKworICAgIC8qKgorICAg
ICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgKiBAbmFtZSAkc2NlI2lzRW5hYmxlZAorICAgICAqIEBr
aW5kIGZ1bmN0aW9uCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlmIFND
RSBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UuICBJZiB5b3Ugd2FudCB0byBzZXQgdGhlIHZh
bHVlLCB5b3UKKyAgICAgKiBoYXZlIHRvIGRvIGl0IGF0IG1vZHVsZSBjb25maWcgdGltZSBvbiB7
QGxpbmsgbmcuJHNjZVByb3ZpZGVyICRzY2VQcm92aWRlcn0uCisgICAgICoKKyAgICAgKiBAZGVz
Y3JpcHRpb24KKyAgICAgKiBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIFNDRSBpcyBl
bmFibGVkLgorICAgICAqLworICAgIHNjZS5pc0VuYWJsZWQgPSBmdW5jdGlvbigpIHsKKyAgICAg
IHJldHVybiBlbmFibGVkOworICAgIH07CisgICAgc2NlLnRydXN0QXMgPSAkc2NlRGVsZWdhdGUu
dHJ1c3RBczsKKyAgICBzY2UuZ2V0VHJ1c3RlZCA9ICRzY2VEZWxlZ2F0ZS5nZXRUcnVzdGVkOwor
ICAgIHNjZS52YWx1ZU9mID0gJHNjZURlbGVnYXRlLnZhbHVlT2Y7CisKKyAgICBpZiAoIWVuYWJs
ZWQpIHsKKyAgICAgIHNjZS50cnVzdEFzID0gc2NlLmdldFRydXN0ZWQgPSBmdW5jdGlvbih0eXBl
LCB2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07CisgICAgICBzY2UudmFsdWVPZiA9IGlkZW50aXR5
OworICAgIH0KKworICAgIC8qKgorICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgKiBAbmFtZSAk
c2NlI3BhcnNlQXMKKyAgICAgKgorICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAqIENvbnZlcnRz
IEFuZ3VsYXIge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0gaW50byBhIGZ1bmN0
aW9uLiAgVGhpcyBpcyBsaWtlIHtAbGluaworICAgICAqIG5nLiRwYXJzZSAkcGFyc2V9IGFuZCBp
cyBpZGVudGljYWwgd2hlbiB0aGUgZXhwcmVzc2lvbiBpcyBhIGxpdGVyYWwgY29uc3RhbnQuICBP
dGhlcndpc2UsIGl0CisgICAgICogd3JhcHMgdGhlIGV4cHJlc3Npb24gaW4gYSBjYWxsIHRvIHtA
bGluayBuZy4kc2NlI2dldFRydXN0ZWQgJHNjZS5nZXRUcnVzdGVkKCp0eXBlKiwKKyAgICAgKiAq
cmVzdWx0Kil9CisgICAgICoKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUga2luZCBv
ZiBTQ0UgY29udGV4dCBpbiB3aGljaCB0aGlzIHJlc3VsdCB3aWxsIGJlIHVzZWQuCisgICAgICog
QHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gU3RyaW5nIGV4cHJlc3Npb24gdG8gY29tcGlsZS4K
KyAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb24oY29udGV4dCwgbG9jYWxzKX0gYSBmdW5jdGlvbiB3
aGljaCByZXByZXNlbnRzIHRoZSBjb21waWxlZCBleHByZXNzaW9uOgorICAgICAqCisgICAgICog
ICAgKiBgY29udGV4dGAg4oCTIGB7b2JqZWN0fWAg4oCTIGFuIG9iamVjdCBhZ2FpbnN0IHdoaWNo
IGFueSBleHByZXNzaW9ucyBlbWJlZGRlZCBpbiB0aGUgc3RyaW5ncworICAgICAqICAgICAgYXJl
IGV2YWx1YXRlZCBhZ2FpbnN0ICh0eXBpY2FsbHkgYSBzY29wZSBvYmplY3QpLgorICAgICAqICAg
ICogYGxvY2Fsc2Ag4oCTIGB7b2JqZWN0PX1gIOKAkyBsb2NhbCB2YXJpYWJsZXMgY29udGV4dCBv
YmplY3QsIHVzZWZ1bCBmb3Igb3ZlcnJpZGluZyB2YWx1ZXMgaW4KKyAgICAgKiAgICAgIGBjb250
ZXh0YC4KKyAgICAgKi8KKyAgICBzY2UucGFyc2VBcyA9IGZ1bmN0aW9uIHNjZVBhcnNlQXModHlw
ZSwgZXhwcikgeworICAgICAgdmFyIHBhcnNlZCA9ICRwYXJzZShleHByKTsKKyAgICAgIGlmIChw
YXJzZWQubGl0ZXJhbCAmJiBwYXJzZWQuY29uc3RhbnQpIHsKKyAgICAgICAgcmV0dXJuIHBhcnNl
ZDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAkcGFyc2UoZXhwciwgZnVuY3Rpb24o
dmFsdWUpIHsKKyAgICAgICAgICByZXR1cm4gc2NlLmdldFRydXN0ZWQodHlwZSwgdmFsdWUpOwor
ICAgICAgICB9KTsKKyAgICAgIH0KKyAgICB9OworCisgICAgLyoqCisgICAgICogQG5nZG9jIG1l
dGhvZAorICAgICAqIEBuYW1lICRzY2UjdHJ1c3RBcworICAgICAqCisgICAgICogQGRlc2NyaXB0
aW9uCisgICAgICogRGVsZWdhdGVzIHRvIHtAbGluayBuZy4kc2NlRGVsZWdhdGUjdHJ1c3RBcyBg
JHNjZURlbGVnYXRlLnRydXN0QXNgfS4gIEFzIHN1Y2gsCisgICAgICogcmV0dXJucyBhbiBvYmpl
Y3QgdGhhdCBpcyB0cnVzdGVkIGJ5IGFuZ3VsYXIgZm9yIHVzZSBpbiBzcGVjaWZpZWQgc3RyaWN0
IGNvbnRleHR1YWwKKyAgICAgKiBlc2NhcGluZyBjb250ZXh0cyAoc3VjaCBhcyBuZy1iaW5kLWh0
bWwsIG5nLWluY2x1ZGUsIGFueSBzcmMgYXR0cmlidXRlCisgICAgICogaW50ZXJwb2xhdGlvbiwg
YW55IGRvbSBldmVudCBiaW5kaW5nIGF0dHJpYnV0ZSBpbnRlcnBvbGF0aW9uIHN1Y2ggYXMgZm9y
IG9uY2xpY2ssICBldGMuKQorICAgICAqIHRoYXQgdXNlcyB0aGUgcHJvdmlkZWQgdmFsdWUuICBT
ZWUgKiB7QGxpbmsgbmcuJHNjZSAkc2NlfSBmb3IgZW5hYmxpbmcgc3RyaWN0IGNvbnRleHR1YWwK
KyAgICAgKiBlc2NhcGluZy4KKyAgICAgKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRo
ZSBraW5kIG9mIGNvbnRleHQgaW4gd2hpY2ggdGhpcyB2YWx1ZSBpcyBzYWZlIGZvciB1c2UuICBl
LmcuIHVybCwKKyAgICAgKiAgIHJlc291cmNlVXJsLCBodG1sLCBqcyBhbmQgY3NzLgorICAgICAq
IEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRoYXQgdGhhdCBzaG91bGQgYmUgY29uc2lkZXJl
ZCB0cnVzdGVkL3NhZmUuCisgICAgICogQHJldHVybnMgeyp9IEEgdmFsdWUgdGhhdCBjYW4gYmUg
dXNlZCB0byBzdGFuZCBpbiBmb3IgdGhlIHByb3ZpZGVkIGB2YWx1ZWAgaW4gcGxhY2VzCisgICAg
ICogd2hlcmUgQW5ndWxhciBleHBlY3RzIGEgJHNjZS50cnVzdEFzKCkgcmV0dXJuIHZhbHVlLgor
ICAgICAqLworCisgICAgLyoqCisgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAqIEBuYW1lICRz
Y2UjdHJ1c3RBc0h0bWwKKyAgICAgKgorICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAqIFNob3J0
aGFuZCBtZXRob2QuICBgJHNjZS50cnVzdEFzSHRtbCh2YWx1ZSlgIOKGkgorICAgICAqICAgICB7
QGxpbmsgbmcuJHNjZURlbGVnYXRlI3RydXN0QXMgYCRzY2VEZWxlZ2F0ZS50cnVzdEFzKCRzY2Uu
SFRNTCwgdmFsdWUpYH0KKyAgICAgKgorICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVl
IHRvIHRydXN0QXMuCisgICAgICogQHJldHVybnMgeyp9IEFuIG9iamVjdCB0aGF0IGNhbiBiZSBw
YXNzZWQgdG8ge0BsaW5rIG5nLiRzY2UjZ2V0VHJ1c3RlZEh0bWwKKyAgICAgKiAgICAgJHNjZS5n
ZXRUcnVzdGVkSHRtbCh2YWx1ZSl9IHRvIG9idGFpbiB0aGUgb3JpZ2luYWwgdmFsdWUuICAocHJp
dmlsZWdlZCBkaXJlY3RpdmVzCisgICAgICogICAgIG9ubHkgYWNjZXB0IGV4cHJlc3Npb25zIHRo
YXQgYXJlIGVpdGhlciBsaXRlcmFsIGNvbnN0YW50cyBvciBhcmUgdGhlCisgICAgICogICAgIHJl
dHVybiB2YWx1ZSBvZiB7QGxpbmsgbmcuJHNjZSN0cnVzdEFzICRzY2UudHJ1c3RBc30uKQorICAg
ICAqLworCisgICAgLyoqCisgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAqIEBuYW1lICRzY2Uj
dHJ1c3RBc1VybAorICAgICAqCisgICAgICogQGRlc2NyaXB0aW9uCisgICAgICogU2hvcnRoYW5k
IG1ldGhvZC4gIGAkc2NlLnRydXN0QXNVcmwodmFsdWUpYCDihpIKKyAgICAgKiAgICAge0BsaW5r
IG5nLiRzY2VEZWxlZ2F0ZSN0cnVzdEFzIGAkc2NlRGVsZWdhdGUudHJ1c3RBcygkc2NlLlVSTCwg
dmFsdWUpYH0KKyAgICAgKgorICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHRy
dXN0QXMuCisgICAgICogQHJldHVybnMgeyp9IEFuIG9iamVjdCB0aGF0IGNhbiBiZSBwYXNzZWQg
dG8ge0BsaW5rIG5nLiRzY2UjZ2V0VHJ1c3RlZFVybAorICAgICAqICAgICAkc2NlLmdldFRydXN0
ZWRVcmwodmFsdWUpfSB0byBvYnRhaW4gdGhlIG9yaWdpbmFsIHZhbHVlLiAgKHByaXZpbGVnZWQg
ZGlyZWN0aXZlcworICAgICAqICAgICBvbmx5IGFjY2VwdCBleHByZXNzaW9ucyB0aGF0IGFyZSBl
aXRoZXIgbGl0ZXJhbCBjb25zdGFudHMgb3IgYXJlIHRoZQorICAgICAqICAgICByZXR1cm4gdmFs
dWUgb2Yge0BsaW5rIG5nLiRzY2UjdHJ1c3RBcyAkc2NlLnRydXN0QXN9LikKKyAgICAgKi8KKwor
ICAgIC8qKgorICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgKiBAbmFtZSAkc2NlI3RydXN0QXNS
ZXNvdXJjZVVybAorICAgICAqCisgICAgICogQGRlc2NyaXB0aW9uCisgICAgICogU2hvcnRoYW5k
IG1ldGhvZC4gIGAkc2NlLnRydXN0QXNSZXNvdXJjZVVybCh2YWx1ZSlgIOKGkgorICAgICAqICAg
ICB7QGxpbmsgbmcuJHNjZURlbGVnYXRlI3RydXN0QXMgYCRzY2VEZWxlZ2F0ZS50cnVzdEFzKCRz
Y2UuUkVTT1VSQ0VfVVJMLCB2YWx1ZSlgfQorICAgICAqCisgICAgICogQHBhcmFtIHsqfSB2YWx1
ZSBUaGUgdmFsdWUgdG8gdHJ1c3RBcy4KKyAgICAgKiBAcmV0dXJucyB7Kn0gQW4gb2JqZWN0IHRo
YXQgY2FuIGJlIHBhc3NlZCB0byB7QGxpbmsgbmcuJHNjZSNnZXRUcnVzdGVkUmVzb3VyY2VVcmwK
KyAgICAgKiAgICAgJHNjZS5nZXRUcnVzdGVkUmVzb3VyY2VVcmwodmFsdWUpfSB0byBvYnRhaW4g
dGhlIG9yaWdpbmFsIHZhbHVlLiAgKHByaXZpbGVnZWQgZGlyZWN0aXZlcworICAgICAqICAgICBv
bmx5IGFjY2VwdCBleHByZXNzaW9ucyB0aGF0IGFyZSBlaXRoZXIgbGl0ZXJhbCBjb25zdGFudHMg
b3IgYXJlIHRoZSByZXR1cm4KKyAgICAgKiAgICAgdmFsdWUgb2Yge0BsaW5rIG5nLiRzY2UjdHJ1
c3RBcyAkc2NlLnRydXN0QXN9LikKKyAgICAgKi8KKworICAgIC8qKgorICAgICAqIEBuZ2RvYyBt
ZXRob2QKKyAgICAgKiBAbmFtZSAkc2NlI3RydXN0QXNKcworICAgICAqCisgICAgICogQGRlc2Ny
aXB0aW9uCisgICAgICogU2hvcnRoYW5kIG1ldGhvZC4gIGAkc2NlLnRydXN0QXNKcyh2YWx1ZSlg
IOKGkgorICAgICAqICAgICB7QGxpbmsgbmcuJHNjZURlbGVnYXRlI3RydXN0QXMgYCRzY2VEZWxl
Z2F0ZS50cnVzdEFzKCRzY2UuSlMsIHZhbHVlKWB9CisgICAgICoKKyAgICAgKiBAcGFyYW0geyp9
IHZhbHVlIFRoZSB2YWx1ZSB0byB0cnVzdEFzLgorICAgICAqIEByZXR1cm5zIHsqfSBBbiBvYmpl
Y3QgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHtAbGluayBuZy4kc2NlI2dldFRydXN0ZWRKcworICAg
ICAqICAgICAkc2NlLmdldFRydXN0ZWRKcyh2YWx1ZSl9IHRvIG9idGFpbiB0aGUgb3JpZ2luYWwg
dmFsdWUuICAocHJpdmlsZWdlZCBkaXJlY3RpdmVzCisgICAgICogICAgIG9ubHkgYWNjZXB0IGV4
cHJlc3Npb25zIHRoYXQgYXJlIGVpdGhlciBsaXRlcmFsIGNvbnN0YW50cyBvciBhcmUgdGhlCisg
ICAgICogICAgIHJldHVybiB2YWx1ZSBvZiB7QGxpbmsgbmcuJHNjZSN0cnVzdEFzICRzY2UudHJ1
c3RBc30uKQorICAgICAqLworCisgICAgLyoqCisgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAq
IEBuYW1lICRzY2UjZ2V0VHJ1c3RlZAorICAgICAqCisgICAgICogQGRlc2NyaXB0aW9uCisgICAg
ICogRGVsZWdhdGVzIHRvIHtAbGluayBuZy4kc2NlRGVsZWdhdGUjZ2V0VHJ1c3RlZCBgJHNjZURl
bGVnYXRlLmdldFRydXN0ZWRgfS4gIEFzIHN1Y2gsCisgICAgICogdGFrZXMgdGhlIHJlc3VsdCBv
ZiBhIHtAbGluayBuZy4kc2NlI3RydXN0QXMgYCRzY2UudHJ1c3RBc2B9KCkgY2FsbCBhbmQgcmV0
dXJucyB0aGUKKyAgICAgKiBvcmlnaW5hbGx5IHN1cHBsaWVkIHZhbHVlIGlmIHRoZSBxdWVyaWVk
IGNvbnRleHQgdHlwZSBpcyBhIHN1cGVydHlwZSBvZiB0aGUgY3JlYXRlZCB0eXBlLgorICAgICAq
IElmIHRoaXMgY29uZGl0aW9uIGlzbid0IHNhdGlzZmllZCwgdGhyb3dzIGFuIGV4Y2VwdGlvbi4K
KyAgICAgKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRoZSBraW5kIG9mIGNvbnRleHQg
aW4gd2hpY2ggdGhpcyB2YWx1ZSBpcyB0byBiZSB1c2VkLgorICAgICAqIEBwYXJhbSB7Kn0gbWF5
YmVUcnVzdGVkIFRoZSByZXN1bHQgb2YgYSBwcmlvciB7QGxpbmsgbmcuJHNjZSN0cnVzdEFzIGAk
c2NlLnRydXN0QXNgfQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGwuCisgICAg
ICogQHJldHVybnMgeyp9IFRoZSB2YWx1ZSB0aGUgd2FzIG9yaWdpbmFsbHkgcHJvdmlkZWQgdG8K
KyAgICAgKiAgICAgICAgICAgICAge0BsaW5rIG5nLiRzY2UjdHJ1c3RBcyBgJHNjZS50cnVzdEFz
YH0gaWYgdmFsaWQgaW4gdGhpcyBjb250ZXh0LgorICAgICAqICAgICAgICAgICAgICBPdGhlcndp
c2UsIHRocm93cyBhbiBleGNlcHRpb24uCisgICAgICovCisKKyAgICAvKioKKyAgICAgKiBAbmdk
b2MgbWV0aG9kCisgICAgICogQG5hbWUgJHNjZSNnZXRUcnVzdGVkSHRtbAorICAgICAqCisgICAg
ICogQGRlc2NyaXB0aW9uCisgICAgICogU2hvcnRoYW5kIG1ldGhvZC4gIGAkc2NlLmdldFRydXN0
ZWRIdG1sKHZhbHVlKWAg4oaSCisgICAgICogICAgIHtAbGluayBuZy4kc2NlRGVsZWdhdGUjZ2V0
VHJ1c3RlZCBgJHNjZURlbGVnYXRlLmdldFRydXN0ZWQoJHNjZS5IVE1MLCB2YWx1ZSlgfQorICAg
ICAqCisgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcGFzcyB0byBgJHNjZS5n
ZXRUcnVzdGVkYC4KKyAgICAgKiBAcmV0dXJucyB7Kn0gVGhlIHJldHVybiB2YWx1ZSBvZiBgJHNj
ZS5nZXRUcnVzdGVkKCRzY2UuSFRNTCwgdmFsdWUpYAorICAgICAqLworCisgICAgLyoqCisgICAg
ICogQG5nZG9jIG1ldGhvZAorICAgICAqIEBuYW1lICRzY2UjZ2V0VHJ1c3RlZENzcworICAgICAq
CisgICAgICogQGRlc2NyaXB0aW9uCisgICAgICogU2hvcnRoYW5kIG1ldGhvZC4gIGAkc2NlLmdl
dFRydXN0ZWRDc3ModmFsdWUpYCDihpIKKyAgICAgKiAgICAge0BsaW5rIG5nLiRzY2VEZWxlZ2F0
ZSNnZXRUcnVzdGVkIGAkc2NlRGVsZWdhdGUuZ2V0VHJ1c3RlZCgkc2NlLkNTUywgdmFsdWUpYH0K
KyAgICAgKgorICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHBhc3MgdG8gYCRz
Y2UuZ2V0VHJ1c3RlZGAuCisgICAgICogQHJldHVybnMgeyp9IFRoZSByZXR1cm4gdmFsdWUgb2Yg
YCRzY2UuZ2V0VHJ1c3RlZCgkc2NlLkNTUywgdmFsdWUpYAorICAgICAqLworCisgICAgLyoqCisg
ICAgICogQG5nZG9jIG1ldGhvZAorICAgICAqIEBuYW1lICRzY2UjZ2V0VHJ1c3RlZFVybAorICAg
ICAqCisgICAgICogQGRlc2NyaXB0aW9uCisgICAgICogU2hvcnRoYW5kIG1ldGhvZC4gIGAkc2Nl
LmdldFRydXN0ZWRVcmwodmFsdWUpYCDihpIKKyAgICAgKiAgICAge0BsaW5rIG5nLiRzY2VEZWxl
Z2F0ZSNnZXRUcnVzdGVkIGAkc2NlRGVsZWdhdGUuZ2V0VHJ1c3RlZCgkc2NlLlVSTCwgdmFsdWUp
YH0KKyAgICAgKgorICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHBhc3MgdG8g
YCRzY2UuZ2V0VHJ1c3RlZGAuCisgICAgICogQHJldHVybnMgeyp9IFRoZSByZXR1cm4gdmFsdWUg
b2YgYCRzY2UuZ2V0VHJ1c3RlZCgkc2NlLlVSTCwgdmFsdWUpYAorICAgICAqLworCisgICAgLyoq
CisgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAqIEBuYW1lICRzY2UjZ2V0VHJ1c3RlZFJlc291
cmNlVXJsCisgICAgICoKKyAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgKiBTaG9ydGhhbmQgbWV0
aG9kLiAgYCRzY2UuZ2V0VHJ1c3RlZFJlc291cmNlVXJsKHZhbHVlKWAg4oaSCisgICAgICogICAg
IHtAbGluayBuZy4kc2NlRGVsZWdhdGUjZ2V0VHJ1c3RlZCBgJHNjZURlbGVnYXRlLmdldFRydXN0
ZWQoJHNjZS5SRVNPVVJDRV9VUkwsIHZhbHVlKWB9CisgICAgICoKKyAgICAgKiBAcGFyYW0geyp9
IHZhbHVlIFRoZSB2YWx1ZSB0byBwYXNzIHRvIGAkc2NlRGVsZWdhdGUuZ2V0VHJ1c3RlZGAuCisg
ICAgICogQHJldHVybnMgeyp9IFRoZSByZXR1cm4gdmFsdWUgb2YgYCRzY2UuZ2V0VHJ1c3RlZCgk
c2NlLlJFU09VUkNFX1VSTCwgdmFsdWUpYAorICAgICAqLworCisgICAgLyoqCisgICAgICogQG5n
ZG9jIG1ldGhvZAorICAgICAqIEBuYW1lICRzY2UjZ2V0VHJ1c3RlZEpzCisgICAgICoKKyAgICAg
KiBAZGVzY3JpcHRpb24KKyAgICAgKiBTaG9ydGhhbmQgbWV0aG9kLiAgYCRzY2UuZ2V0VHJ1c3Rl
ZEpzKHZhbHVlKWAg4oaSCisgICAgICogICAgIHtAbGluayBuZy4kc2NlRGVsZWdhdGUjZ2V0VHJ1
c3RlZCBgJHNjZURlbGVnYXRlLmdldFRydXN0ZWQoJHNjZS5KUywgdmFsdWUpYH0KKyAgICAgKgor
ICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHBhc3MgdG8gYCRzY2UuZ2V0VHJ1
c3RlZGAuCisgICAgICogQHJldHVybnMgeyp9IFRoZSByZXR1cm4gdmFsdWUgb2YgYCRzY2UuZ2V0
VHJ1c3RlZCgkc2NlLkpTLCB2YWx1ZSlgCisgICAgICovCisKKyAgICAvKioKKyAgICAgKiBAbmdk
b2MgbWV0aG9kCisgICAgICogQG5hbWUgJHNjZSNwYXJzZUFzSHRtbAorICAgICAqCisgICAgICog
QGRlc2NyaXB0aW9uCisgICAgICogU2hvcnRoYW5kIG1ldGhvZC4gIGAkc2NlLnBhcnNlQXNIdG1s
KGV4cHJlc3Npb24gc3RyaW5nKWAg4oaSCisgICAgICogICAgIHtAbGluayBuZy4kc2NlI3BhcnNl
QXMgYCRzY2UucGFyc2VBcygkc2NlLkhUTUwsIHZhbHVlKWB9CisgICAgICoKKyAgICAgKiBAcGFy
YW0ge3N0cmluZ30gZXhwcmVzc2lvbiBTdHJpbmcgZXhwcmVzc2lvbiB0byBjb21waWxlLgorICAg
ICAqIEByZXR1cm5zIHtmdW5jdGlvbihjb250ZXh0LCBsb2NhbHMpfSBhIGZ1bmN0aW9uIHdoaWNo
IHJlcHJlc2VudHMgdGhlIGNvbXBpbGVkIGV4cHJlc3Npb246CisgICAgICoKKyAgICAgKiAgICAq
IGBjb250ZXh0YCDigJMgYHtvYmplY3R9YCDigJMgYW4gb2JqZWN0IGFnYWluc3Qgd2hpY2ggYW55
IGV4cHJlc3Npb25zIGVtYmVkZGVkIGluIHRoZSBzdHJpbmdzCisgICAgICogICAgICBhcmUgZXZh
bHVhdGVkIGFnYWluc3QgKHR5cGljYWxseSBhIHNjb3BlIG9iamVjdCkuCisgICAgICogICAgKiBg
bG9jYWxzYCDigJMgYHtvYmplY3Q9fWAg4oCTIGxvY2FsIHZhcmlhYmxlcyBjb250ZXh0IG9iamVj
dCwgdXNlZnVsIGZvciBvdmVycmlkaW5nIHZhbHVlcyBpbgorICAgICAqICAgICAgYGNvbnRleHRg
LgorICAgICAqLworCisgICAgLyoqCisgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAqIEBuYW1l
ICRzY2UjcGFyc2VBc0NzcworICAgICAqCisgICAgICogQGRlc2NyaXB0aW9uCisgICAgICogU2hv
cnRoYW5kIG1ldGhvZC4gIGAkc2NlLnBhcnNlQXNDc3ModmFsdWUpYCDihpIKKyAgICAgKiAgICAg
e0BsaW5rIG5nLiRzY2UjcGFyc2VBcyBgJHNjZS5wYXJzZUFzKCRzY2UuQ1NTLCB2YWx1ZSlgfQor
ICAgICAqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gU3RyaW5nIGV4cHJlc3Np
b24gdG8gY29tcGlsZS4KKyAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb24oY29udGV4dCwgbG9jYWxz
KX0gYSBmdW5jdGlvbiB3aGljaCByZXByZXNlbnRzIHRoZSBjb21waWxlZCBleHByZXNzaW9uOgor
ICAgICAqCisgICAgICogICAgKiBgY29udGV4dGAg4oCTIGB7b2JqZWN0fWAg4oCTIGFuIG9iamVj
dCBhZ2FpbnN0IHdoaWNoIGFueSBleHByZXNzaW9ucyBlbWJlZGRlZCBpbiB0aGUgc3RyaW5ncwor
ICAgICAqICAgICAgYXJlIGV2YWx1YXRlZCBhZ2FpbnN0ICh0eXBpY2FsbHkgYSBzY29wZSBvYmpl
Y3QpLgorICAgICAqICAgICogYGxvY2Fsc2Ag4oCTIGB7b2JqZWN0PX1gIOKAkyBsb2NhbCB2YXJp
YWJsZXMgY29udGV4dCBvYmplY3QsIHVzZWZ1bCBmb3Igb3ZlcnJpZGluZyB2YWx1ZXMgaW4KKyAg
ICAgKiAgICAgIGBjb250ZXh0YC4KKyAgICAgKi8KKworICAgIC8qKgorICAgICAqIEBuZ2RvYyBt
ZXRob2QKKyAgICAgKiBAbmFtZSAkc2NlI3BhcnNlQXNVcmwKKyAgICAgKgorICAgICAqIEBkZXNj
cmlwdGlvbgorICAgICAqIFNob3J0aGFuZCBtZXRob2QuICBgJHNjZS5wYXJzZUFzVXJsKHZhbHVl
KWAg4oaSCisgICAgICogICAgIHtAbGluayBuZy4kc2NlI3BhcnNlQXMgYCRzY2UucGFyc2VBcygk
c2NlLlVSTCwgdmFsdWUpYH0KKyAgICAgKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNz
aW9uIFN0cmluZyBleHByZXNzaW9uIHRvIGNvbXBpbGUuCisgICAgICogQHJldHVybnMge2Z1bmN0
aW9uKGNvbnRleHQsIGxvY2Fscyl9IGEgZnVuY3Rpb24gd2hpY2ggcmVwcmVzZW50cyB0aGUgY29t
cGlsZWQgZXhwcmVzc2lvbjoKKyAgICAgKgorICAgICAqICAgICogYGNvbnRleHRgIOKAkyBge29i
amVjdH1gIOKAkyBhbiBvYmplY3QgYWdhaW5zdCB3aGljaCBhbnkgZXhwcmVzc2lvbnMgZW1iZWRk
ZWQgaW4gdGhlIHN0cmluZ3MKKyAgICAgKiAgICAgIGFyZSBldmFsdWF0ZWQgYWdhaW5zdCAodHlw
aWNhbGx5IGEgc2NvcGUgb2JqZWN0KS4KKyAgICAgKiAgICAqIGBsb2NhbHNgIOKAkyBge29iamVj
dD19YCDigJMgbG9jYWwgdmFyaWFibGVzIGNvbnRleHQgb2JqZWN0LCB1c2VmdWwgZm9yIG92ZXJy
aWRpbmcgdmFsdWVzIGluCisgICAgICogICAgICBgY29udGV4dGAuCisgICAgICovCisKKyAgICAv
KioKKyAgICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICogQG5hbWUgJHNjZSNwYXJzZUFzUmVzb3Vy
Y2VVcmwKKyAgICAgKgorICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAqIFNob3J0aGFuZCBtZXRo
b2QuICBgJHNjZS5wYXJzZUFzUmVzb3VyY2VVcmwodmFsdWUpYCDihpIKKyAgICAgKiAgICAge0Bs
aW5rIG5nLiRzY2UjcGFyc2VBcyBgJHNjZS5wYXJzZUFzKCRzY2UuUkVTT1VSQ0VfVVJMLCB2YWx1
ZSlgfQorICAgICAqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gU3RyaW5nIGV4
cHJlc3Npb24gdG8gY29tcGlsZS4KKyAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb24oY29udGV4dCwg
bG9jYWxzKX0gYSBmdW5jdGlvbiB3aGljaCByZXByZXNlbnRzIHRoZSBjb21waWxlZCBleHByZXNz
aW9uOgorICAgICAqCisgICAgICogICAgKiBgY29udGV4dGAg4oCTIGB7b2JqZWN0fWAg4oCTIGFu
IG9iamVjdCBhZ2FpbnN0IHdoaWNoIGFueSBleHByZXNzaW9ucyBlbWJlZGRlZCBpbiB0aGUgc3Ry
aW5ncworICAgICAqICAgICAgYXJlIGV2YWx1YXRlZCBhZ2FpbnN0ICh0eXBpY2FsbHkgYSBzY29w
ZSBvYmplY3QpLgorICAgICAqICAgICogYGxvY2Fsc2Ag4oCTIGB7b2JqZWN0PX1gIOKAkyBsb2Nh
bCB2YXJpYWJsZXMgY29udGV4dCBvYmplY3QsIHVzZWZ1bCBmb3Igb3ZlcnJpZGluZyB2YWx1ZXMg
aW4KKyAgICAgKiAgICAgIGBjb250ZXh0YC4KKyAgICAgKi8KKworICAgIC8qKgorICAgICAqIEBu
Z2RvYyBtZXRob2QKKyAgICAgKiBAbmFtZSAkc2NlI3BhcnNlQXNKcworICAgICAqCisgICAgICog
QGRlc2NyaXB0aW9uCisgICAgICogU2hvcnRoYW5kIG1ldGhvZC4gIGAkc2NlLnBhcnNlQXNKcyh2
YWx1ZSlgIOKGkgorICAgICAqICAgICB7QGxpbmsgbmcuJHNjZSNwYXJzZUFzIGAkc2NlLnBhcnNl
QXMoJHNjZS5KUywgdmFsdWUpYH0KKyAgICAgKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBleHBy
ZXNzaW9uIFN0cmluZyBleHByZXNzaW9uIHRvIGNvbXBpbGUuCisgICAgICogQHJldHVybnMge2Z1
bmN0aW9uKGNvbnRleHQsIGxvY2Fscyl9IGEgZnVuY3Rpb24gd2hpY2ggcmVwcmVzZW50cyB0aGUg
Y29tcGlsZWQgZXhwcmVzc2lvbjoKKyAgICAgKgorICAgICAqICAgICogYGNvbnRleHRgIOKAkyBg
e29iamVjdH1gIOKAkyBhbiBvYmplY3QgYWdhaW5zdCB3aGljaCBhbnkgZXhwcmVzc2lvbnMgZW1i
ZWRkZWQgaW4gdGhlIHN0cmluZ3MKKyAgICAgKiAgICAgIGFyZSBldmFsdWF0ZWQgYWdhaW5zdCAo
dHlwaWNhbGx5IGEgc2NvcGUgb2JqZWN0KS4KKyAgICAgKiAgICAqIGBsb2NhbHNgIOKAkyBge29i
amVjdD19YCDigJMgbG9jYWwgdmFyaWFibGVzIGNvbnRleHQgb2JqZWN0LCB1c2VmdWwgZm9yIG92
ZXJyaWRpbmcgdmFsdWVzIGluCisgICAgICogICAgICBgY29udGV4dGAuCisgICAgICovCisKKyAg
ICAvLyBTaG9ydGhhbmQgZGVsZWdhdGlvbnMuCisgICAgdmFyIHBhcnNlID0gc2NlLnBhcnNlQXMs
CisgICAgICAgIGdldFRydXN0ZWQgPSBzY2UuZ2V0VHJ1c3RlZCwKKyAgICAgICAgdHJ1c3RBcyA9
IHNjZS50cnVzdEFzOworCisgICAgZm9yRWFjaChTQ0VfQ09OVEVYVFMsIGZ1bmN0aW9uKGVudW1W
YWx1ZSwgbmFtZSkgeworICAgICAgdmFyIGxOYW1lID0gbG93ZXJjYXNlKG5hbWUpOworICAgICAg
c2NlW2NhbWVsQ2FzZSgicGFyc2VfYXNfIiArIGxOYW1lKV0gPSBmdW5jdGlvbihleHByKSB7Cisg
ICAgICAgIHJldHVybiBwYXJzZShlbnVtVmFsdWUsIGV4cHIpOworICAgICAgfTsKKyAgICAgIHNj
ZVtjYW1lbENhc2UoImdldF90cnVzdGVkXyIgKyBsTmFtZSldID0gZnVuY3Rpb24odmFsdWUpIHsK
KyAgICAgICAgcmV0dXJuIGdldFRydXN0ZWQoZW51bVZhbHVlLCB2YWx1ZSk7CisgICAgICB9Owor
ICAgICAgc2NlW2NhbWVsQ2FzZSgidHJ1c3RfYXNfIiArIGxOYW1lKV0gPSBmdW5jdGlvbih2YWx1
ZSkgeworICAgICAgICByZXR1cm4gdHJ1c3RBcyhlbnVtVmFsdWUsIHZhbHVlKTsKKyAgICAgIH07
CisgICAgfSk7CisKKyAgICByZXR1cm4gc2NlOworICB9XTsKK30KKworLyoqCisgKiAhISEgVGhp
cyBpcyBhbiB1bmRvY3VtZW50ZWQgInByaXZhdGUiIHNlcnZpY2UgISEhCisgKgorICogQG5hbWUg
JHNuaWZmZXIKKyAqIEByZXF1aXJlcyAkd2luZG93CisgKiBAcmVxdWlyZXMgJGRvY3VtZW50Cisg
KgorICogQHByb3BlcnR5IHtib29sZWFufSBoaXN0b3J5IERvZXMgdGhlIGJyb3dzZXIgc3VwcG9y
dCBodG1sNSBoaXN0b3J5IGFwaSA/CisgKiBAcHJvcGVydHkge2Jvb2xlYW59IHRyYW5zaXRpb25z
IERvZXMgdGhlIGJyb3dzZXIgc3VwcG9ydCBDU1MgdHJhbnNpdGlvbiBldmVudHMgPworICogQHBy
b3BlcnR5IHtib29sZWFufSBhbmltYXRpb25zIERvZXMgdGhlIGJyb3dzZXIgc3VwcG9ydCBDU1Mg
YW5pbWF0aW9uIGV2ZW50cyA/CisgKgorICogQGRlc2NyaXB0aW9uCisgKiBUaGlzIGlzIHZlcnkg
c2ltcGxlIGltcGxlbWVudGF0aW9uIG9mIHRlc3RpbmcgYnJvd3NlcidzIGZlYXR1cmVzLgorICov
CitmdW5jdGlvbiAkU25pZmZlclByb3ZpZGVyKCkgeworICB0aGlzLiRnZXQgPSBbJyR3aW5kb3cn
LCAnJGRvY3VtZW50JywgZnVuY3Rpb24oJHdpbmRvdywgJGRvY3VtZW50KSB7CisgICAgdmFyIGV2
ZW50U3VwcG9ydCA9IHt9LAorICAgICAgICBhbmRyb2lkID0KKyAgICAgICAgICB0b0ludCgoL2Fu
ZHJvaWQgKFxkKykvLmV4ZWMobG93ZXJjYXNlKCgkd2luZG93Lm5hdmlnYXRvciB8fCB7fSkudXNl
ckFnZW50KSkgfHwgW10pWzFdKSwKKyAgICAgICAgYm94ZWUgPSAvQm94ZWUvaS50ZXN0KCgkd2lu
ZG93Lm5hdmlnYXRvciB8fCB7fSkudXNlckFnZW50KSwKKyAgICAgICAgZG9jdW1lbnQgPSAkZG9j
dW1lbnRbMF0gfHwge30sCisgICAgICAgIHZlbmRvclByZWZpeCwKKyAgICAgICAgdmVuZG9yUmVn
ZXggPSAvXihNb3p8d2Via2l0fG1zKSg/PVtBLVpdKS8sCisgICAgICAgIGJvZHlTdHlsZSA9IGRv
Y3VtZW50LmJvZHkgJiYgZG9jdW1lbnQuYm9keS5zdHlsZSwKKyAgICAgICAgdHJhbnNpdGlvbnMg
PSBmYWxzZSwKKyAgICAgICAgYW5pbWF0aW9ucyA9IGZhbHNlLAorICAgICAgICBtYXRjaDsKKwor
ICAgIGlmIChib2R5U3R5bGUpIHsKKyAgICAgIGZvciAodmFyIHByb3AgaW4gYm9keVN0eWxlKSB7
CisgICAgICAgIGlmIChtYXRjaCA9IHZlbmRvclJlZ2V4LmV4ZWMocHJvcCkpIHsKKyAgICAgICAg
ICB2ZW5kb3JQcmVmaXggPSBtYXRjaFswXTsKKyAgICAgICAgICB2ZW5kb3JQcmVmaXggPSB2ZW5k
b3JQcmVmaXguc3Vic3RyKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyB2ZW5kb3JQcmVmaXguc3Vic3Ry
KDEpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmICgh
dmVuZG9yUHJlZml4KSB7CisgICAgICAgIHZlbmRvclByZWZpeCA9ICgnV2Via2l0T3BhY2l0eScg
aW4gYm9keVN0eWxlKSAmJiAnd2Via2l0JzsKKyAgICAgIH0KKworICAgICAgdHJhbnNpdGlvbnMg
PSAhISgoJ3RyYW5zaXRpb24nIGluIGJvZHlTdHlsZSkgfHwgKHZlbmRvclByZWZpeCArICdUcmFu
c2l0aW9uJyBpbiBib2R5U3R5bGUpKTsKKyAgICAgIGFuaW1hdGlvbnMgID0gISEoKCdhbmltYXRp
b24nIGluIGJvZHlTdHlsZSkgfHwgKHZlbmRvclByZWZpeCArICdBbmltYXRpb24nIGluIGJvZHlT
dHlsZSkpOworCisgICAgICBpZiAoYW5kcm9pZCAmJiAoIXRyYW5zaXRpb25zIHx8ICAhYW5pbWF0
aW9ucykpIHsKKyAgICAgICAgdHJhbnNpdGlvbnMgPSBpc1N0cmluZyhib2R5U3R5bGUud2Via2l0
VHJhbnNpdGlvbik7CisgICAgICAgIGFuaW1hdGlvbnMgPSBpc1N0cmluZyhib2R5U3R5bGUud2Vi
a2l0QW5pbWF0aW9uKTsKKyAgICAgIH0KKyAgICB9CisKKworICAgIHJldHVybiB7CisgICAgICAv
LyBBbmRyb2lkIGhhcyBoaXN0b3J5LnB1c2hTdGF0ZSwgYnV0IGl0IGRvZXMgbm90IHVwZGF0ZSBs
b2NhdGlvbiBjb3JyZWN0bHkKKyAgICAgIC8vIHNvIGxldCdzIG5vdCB1c2UgdGhlIGhpc3Rvcnkg
QVBJIGF0IGFsbC4KKyAgICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmRyb2lkL2lz
c3Vlcy9kZXRhaWw/aWQ9MTc0NzEKKyAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFy
L2FuZ3VsYXIuanMvaXNzdWVzLzkwNAorCisgICAgICAvLyBvbGRlciB3ZWJraXQgYnJvd3NlciAo
NTMzLjkpIG9uIEJveGVlIGJveCBoYXMgZXhhY3RseSB0aGUgc2FtZSBwcm9ibGVtIGFzIEFuZHJv
aWQgaGFzCisgICAgICAvLyBzbyBsZXQncyBub3QgdXNlIHRoZSBoaXN0b3J5IEFQSSBhbHNvCisg
ICAgICAvLyBXZSBhcmUgcHVycG9zZWZ1bGx5IHVzaW5nIGAhKGFuZHJvaWQgPCA0KWAgdG8gY292
ZXIgdGhlIGNhc2Ugd2hlbiBgYW5kcm9pZGAgaXMgdW5kZWZpbmVkCisgICAgICAvLyBqc2hpbnQg
LVcwMTgKKyAgICAgIGhpc3Rvcnk6ICEhKCR3aW5kb3cuaGlzdG9yeSAmJiAkd2luZG93Lmhpc3Rv
cnkucHVzaFN0YXRlICYmICEoYW5kcm9pZCA8IDQpICYmICFib3hlZSksCisgICAgICAvLyBqc2hp
bnQgK1cwMTgKKyAgICAgIGhhc0V2ZW50OiBmdW5jdGlvbihldmVudCkgeworICAgICAgICAvLyBJ
RTkgaW1wbGVtZW50cyAnaW5wdXQnIGV2ZW50IGl0J3Mgc28gZnViYXJlZCB0aGF0IHdlIHJhdGhl
ciBwcmV0ZW5kIHRoYXQgaXQgZG9lc24ndCBoYXZlCisgICAgICAgIC8vIGl0LiBJbiBwYXJ0aWN1
bGFyIHRoZSBldmVudCBpcyBub3QgZmlyZWQgd2hlbiBiYWNrc3BhY2Ugb3IgZGVsZXRlIGtleSBh
cmUgcHJlc3NlZCBvcgorICAgICAgICAvLyB3aGVuIGN1dCBvcGVyYXRpb24gaXMgcGVyZm9ybWVk
LgorICAgICAgICAvLyBJRTEwKyBpbXBsZW1lbnRzICdpbnB1dCcgZXZlbnQgYnV0IGl0IGVycm9u
ZW91c2x5IGZpcmVzIHVuZGVyIHZhcmlvdXMgc2l0dWF0aW9ucywKKyAgICAgICAgLy8gZS5nLiB3
aGVuIHBsYWNlaG9sZGVyIGNoYW5nZXMsIG9yIGEgZm9ybSBpcyBmb2N1c2VkLgorICAgICAgICBp
ZiAoZXZlbnQgPT09ICdpbnB1dCcgJiYgbXNpZSA8PSAxMSkgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIGlmIChpc1VuZGVmaW5lZChldmVudFN1cHBvcnRbZXZlbnRdKSkgeworICAgICAgICAgIHZh
ciBkaXZFbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgICBldmVu
dFN1cHBvcnRbZXZlbnRdID0gJ29uJyArIGV2ZW50IGluIGRpdkVsbTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBldmVudFN1cHBvcnRbZXZlbnRdOworICAgICAgfSwKKyAgICAgIGNzcDog
Y3NwKCksCisgICAgICB2ZW5kb3JQcmVmaXg6IHZlbmRvclByZWZpeCwKKyAgICAgIHRyYW5zaXRp
b25zOiB0cmFuc2l0aW9ucywKKyAgICAgIGFuaW1hdGlvbnM6IGFuaW1hdGlvbnMsCisgICAgICBh
bmRyb2lkOiBhbmRyb2lkCisgICAgfTsKKyAgfV07Cit9CisKK3ZhciAkY29tcGlsZU1pbkVyciA9
IG1pbkVycignJGNvbXBpbGUnKTsKKworLyoqCisgKiBAbmdkb2Mgc2VydmljZQorICogQG5hbWUg
JHRlbXBsYXRlUmVxdWVzdAorICoKKyAqIEBkZXNjcmlwdGlvbgorICogVGhlIGAkdGVtcGxhdGVS
ZXF1ZXN0YCBzZXJ2aWNlIHJ1bnMgc2VjdXJpdHkgY2hlY2tzIHRoZW4gZG93bmxvYWRzIHRoZSBw
cm92aWRlZCB0ZW1wbGF0ZSB1c2luZworICogYCRodHRwYCBhbmQsIHVwb24gc3VjY2Vzcywgc3Rv
cmVzIHRoZSBjb250ZW50cyBpbnNpZGUgb2YgYCR0ZW1wbGF0ZUNhY2hlYC4gSWYgdGhlIEhUVFAg
cmVxdWVzdAorICogZmFpbHMgb3IgdGhlIHJlc3BvbnNlIGRhdGEgb2YgdGhlIEhUVFAgcmVxdWVz
dCBpcyBlbXB0eSwgYSBgJGNvbXBpbGVgIGVycm9yIHdpbGwgYmUgdGhyb3duICh0aGUKKyAqIGV4
Y2VwdGlvbiBjYW4gYmUgdGh3YXJ0ZWQgYnkgc2V0dGluZyB0aGUgMm5kIHBhcmFtZXRlciBvZiB0
aGUgZnVuY3Rpb24gdG8gdHJ1ZSkuIE5vdGUgdGhhdCB0aGUKKyAqIGNvbnRlbnRzIG9mIGAkdGVt
cGxhdGVDYWNoZWAgYXJlIHRydXN0ZWQsIHNvIHRoZSBjYWxsIHRvIGAkc2NlLmdldFRydXN0ZWRV
cmwodHBsKWAgaXMgb21pdHRlZAorICogd2hlbiBgdHBsYCBpcyBvZiB0eXBlIHN0cmluZyBhbmQg
YCR0ZW1wbGF0ZUNhY2hlYCBoYXMgdGhlIG1hdGNoaW5nIGVudHJ5LgorICoKKyAqIEBwYXJhbSB7
c3RyaW5nfFRydXN0ZWRSZXNvdXJjZVVybH0gdHBsIFRoZSBIVFRQIHJlcXVlc3QgdGVtcGxhdGUg
VVJMCisgKiBAcGFyYW0ge2Jvb2xlYW49fSBpZ25vcmVSZXF1ZXN0RXJyb3IgV2hldGhlciBvciBu
b3QgdG8gaWdub3JlIHRoZSBleGNlcHRpb24gd2hlbiB0aGUgcmVxdWVzdCBmYWlscyBvciB0aGUg
dGVtcGxhdGUgaXMgZW1wdHkKKyAqCisgKiBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgZm9y
IHRoZSBIVFRQIHJlc3BvbnNlIGRhdGEgb2YgdGhlIGdpdmVuIFVSTC4KKyAqCisgKiBAcHJvcGVy
dHkge251bWJlcn0gdG90YWxQZW5kaW5nUmVxdWVzdHMgdG90YWwgYW1vdW50IG9mIHBlbmRpbmcg
dGVtcGxhdGUgcmVxdWVzdHMgYmVpbmcgZG93bmxvYWRlZC4KKyAqLworZnVuY3Rpb24gJFRlbXBs
YXRlUmVxdWVzdFByb3ZpZGVyKCkgeworICB0aGlzLiRnZXQgPSBbJyR0ZW1wbGF0ZUNhY2hlJywg
JyRodHRwJywgJyRxJywgJyRzY2UnLCBmdW5jdGlvbigkdGVtcGxhdGVDYWNoZSwgJGh0dHAsICRx
LCAkc2NlKSB7CisgICAgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdEZuKHRwbCwgaWdub3JlUmVxdWVz
dEVycm9yKSB7CisgICAgICBoYW5kbGVSZXF1ZXN0Rm4udG90YWxQZW5kaW5nUmVxdWVzdHMrKzsK
KworICAgICAgLy8gV2UgY29uc2lkZXIgdGhlIHRlbXBsYXRlIGNhY2hlIGhvbGRzIG9ubHkgdHJ1
c3RlZCB0ZW1wbGF0ZXMsIHNvCisgICAgICAvLyB0aGVyZSdzIG5vIG5lZWQgdG8gZ28gdGhyb3Vn
aCB3aGl0ZWxpc3RpbmcgYWdhaW4gZm9yIGtleXMgdGhhdCBhbHJlYWR5CisgICAgICAvLyBhcmUg
aW5jbHVkZWQgaW4gdGhlcmUuIFRoaXMgYWxzbyBtYWtlcyBBbmd1bGFyIGFjY2VwdCBhbnkgc2Ny
aXB0CisgICAgICAvLyBkaXJlY3RpdmUsIG5vIG1hdHRlciBpdHMgbmFtZS4gSG93ZXZlciwgd2Ug
c3RpbGwgbmVlZCB0byB1bndyYXAgdHJ1c3RlZAorICAgICAgLy8gdHlwZXMuCisgICAgICBpZiAo
IWlzU3RyaW5nKHRwbCkgfHwgISR0ZW1wbGF0ZUNhY2hlLmdldCh0cGwpKSB7CisgICAgICAgIHRw
bCA9ICRzY2UuZ2V0VHJ1c3RlZFJlc291cmNlVXJsKHRwbCk7CisgICAgICB9CisKKyAgICAgIHZh
ciB0cmFuc2Zvcm1SZXNwb25zZSA9ICRodHRwLmRlZmF1bHRzICYmICRodHRwLmRlZmF1bHRzLnRy
YW5zZm9ybVJlc3BvbnNlOworCisgICAgICBpZiAoaXNBcnJheSh0cmFuc2Zvcm1SZXNwb25zZSkp
IHsKKyAgICAgICAgdHJhbnNmb3JtUmVzcG9uc2UgPSB0cmFuc2Zvcm1SZXNwb25zZS5maWx0ZXIo
ZnVuY3Rpb24odHJhbnNmb3JtZXIpIHsKKyAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtZXIgIT09
IGRlZmF1bHRIdHRwUmVzcG9uc2VUcmFuc2Zvcm07CisgICAgICAgIH0pOworICAgICAgfSBlbHNl
IGlmICh0cmFuc2Zvcm1SZXNwb25zZSA9PT0gZGVmYXVsdEh0dHBSZXNwb25zZVRyYW5zZm9ybSkg
eworICAgICAgICB0cmFuc2Zvcm1SZXNwb25zZSA9IG51bGw7CisgICAgICB9CisKKyAgICAgIHZh
ciBodHRwT3B0aW9ucyA9IHsKKyAgICAgICAgY2FjaGU6ICR0ZW1wbGF0ZUNhY2hlLAorICAgICAg
ICB0cmFuc2Zvcm1SZXNwb25zZTogdHJhbnNmb3JtUmVzcG9uc2UKKyAgICAgIH07CisKKyAgICAg
IHJldHVybiAkaHR0cC5nZXQodHBsLCBodHRwT3B0aW9ucykKKyAgICAgICAgWydmaW5hbGx5J10o
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgaGFuZGxlUmVxdWVzdEZuLnRvdGFsUGVuZGluZ1JlcXVl
c3RzLS07CisgICAgICAgIH0pCisgICAgICAgIC50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7Cisg
ICAgICAgICAgJHRlbXBsYXRlQ2FjaGUucHV0KHRwbCwgcmVzcG9uc2UuZGF0YSk7CisgICAgICAg
ICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7CisgICAgICAgIH0sIGhhbmRsZUVycm9yKTsKKworICAg
ICAgZnVuY3Rpb24gaGFuZGxlRXJyb3IocmVzcCkgeworICAgICAgICBpZiAoIWlnbm9yZVJlcXVl
c3RFcnJvcikgeworICAgICAgICAgIHRocm93ICRjb21waWxlTWluRXJyKCd0cGxvYWQnLCAnRmFp
bGVkIHRvIGxvYWQgdGVtcGxhdGU6IHswfSAoSFRUUCBzdGF0dXM6IHsxfSB7Mn0pJywKKyAgICAg
ICAgICAgIHRwbCwgcmVzcC5zdGF0dXMsIHJlc3Auc3RhdHVzVGV4dCk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuICRxLnJlamVjdChyZXNwKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBoYW5k
bGVSZXF1ZXN0Rm4udG90YWxQZW5kaW5nUmVxdWVzdHMgPSAwOworCisgICAgcmV0dXJuIGhhbmRs
ZVJlcXVlc3RGbjsKKyAgfV07Cit9CisKK2Z1bmN0aW9uICQkVGVzdGFiaWxpdHlQcm92aWRlcigp
IHsKKyAgdGhpcy4kZ2V0ID0gWyckcm9vdFNjb3BlJywgJyRicm93c2VyJywgJyRsb2NhdGlvbics
CisgICAgICAgZnVuY3Rpb24oJHJvb3RTY29wZSwgICAkYnJvd3NlciwgICAkbG9jYXRpb24pIHsK
KworICAgIC8qKgorICAgICAqIEBuYW1lICR0ZXN0YWJpbGl0eQorICAgICAqCisgICAgICogQGRl
c2NyaXB0aW9uCisgICAgICogVGhlIHByaXZhdGUgJCR0ZXN0YWJpbGl0eSBzZXJ2aWNlIHByb3Zp
ZGVzIGEgY29sbGVjdGlvbiBvZiBtZXRob2RzIGZvciB1c2Ugd2hlbiBkZWJ1Z2dpbmcKKyAgICAg
KiBvciBieSBhdXRvbWF0ZWQgdGVzdCBhbmQgZGVidWdnaW5nIHRvb2xzLgorICAgICAqLworICAg
IHZhciB0ZXN0YWJpbGl0eSA9IHt9OworCisgICAgLyoqCisgICAgICogQG5hbWUgJCR0ZXN0YWJp
bGl0eSNmaW5kQmluZGluZ3MKKyAgICAgKgorICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAqIFJl
dHVybnMgYW4gYXJyYXkgb2YgZWxlbWVudHMgdGhhdCBhcmUgYm91bmQgKHZpYSBuZy1iaW5kIG9y
IHt7fX0pCisgICAgICogdG8gZXhwcmVzc2lvbnMgbWF0Y2hpbmcgdGhlIGlucHV0LgorICAgICAq
CisgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRoZSBlbGVtZW50IHJvb3QgdG8gc2Vh
cmNoIGZyb20uCisgICAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gVGhlIGJpbmRpbmcg
ZXhwcmVzc2lvbiB0byBtYXRjaC4KKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdF9leGFjdE1h
dGNoIElmIHRydWUsIG9ubHkgcmV0dXJucyBleGFjdCBtYXRjaGVzCisgICAgICogICAgIGZvciB0
aGUgZXhwcmVzc2lvbi4gRmlsdGVycyBhbmQgd2hpdGVzcGFjZSBhcmUgaWdub3JlZC4KKyAgICAg
Ki8KKyAgICB0ZXN0YWJpbGl0eS5maW5kQmluZGluZ3MgPSBmdW5jdGlvbihlbGVtZW50LCBleHBy
ZXNzaW9uLCBvcHRfZXhhY3RNYXRjaCkgeworICAgICAgdmFyIGJpbmRpbmdzID0gZWxlbWVudC5n
ZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCduZy1iaW5kaW5nJyk7CisgICAgICB2YXIgbWF0Y2hlcyA9
IFtdOworICAgICAgZm9yRWFjaChiaW5kaW5ncywgZnVuY3Rpb24oYmluZGluZykgeworICAgICAg
ICB2YXIgZGF0YUJpbmRpbmcgPSBhbmd1bGFyLmVsZW1lbnQoYmluZGluZykuZGF0YSgnJGJpbmRp
bmcnKTsKKyAgICAgICAgaWYgKGRhdGFCaW5kaW5nKSB7CisgICAgICAgICAgZm9yRWFjaChkYXRh
QmluZGluZywgZnVuY3Rpb24oYmluZGluZ05hbWUpIHsKKyAgICAgICAgICAgIGlmIChvcHRfZXhh
Y3RNYXRjaCkgeworICAgICAgICAgICAgICB2YXIgbWF0Y2hlciA9IG5ldyBSZWdFeHAoJyhefFxc
cyknICsgZXNjYXBlRm9yUmVnZXhwKGV4cHJlc3Npb24pICsgJyhcXHN8XFx8fCQpJyk7CisgICAg
ICAgICAgICAgIGlmIChtYXRjaGVyLnRlc3QoYmluZGluZ05hbWUpKSB7CisgICAgICAgICAgICAg
ICAgbWF0Y2hlcy5wdXNoKGJpbmRpbmcpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICBpZiAoYmluZGluZ05hbWUuaW5kZXhPZihleHByZXNzaW9u
KSAhPSAtMSkgeworICAgICAgICAgICAgICAgIG1hdGNoZXMucHVzaChiaW5kaW5nKTsKKyAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0pOworICAgICAgICB9CisgICAg
ICB9KTsKKyAgICAgIHJldHVybiBtYXRjaGVzOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBA
bmFtZSAkJHRlc3RhYmlsaXR5I2ZpbmRNb2RlbHMKKyAgICAgKgorICAgICAqIEBkZXNjcmlwdGlv
bgorICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgZWxlbWVudHMgdGhhdCBhcmUgdHdvLXdheSBm
b3VuZCB2aWEgbmctbW9kZWwgdG8KKyAgICAgKiBleHByZXNzaW9ucyBtYXRjaGluZyB0aGUgaW5w
dXQuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGhlIGVsZW1lbnQg
cm9vdCB0byBzZWFyY2ggZnJvbS4KKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXhwcmVzc2lvbiBU
aGUgbW9kZWwgZXhwcmVzc2lvbiB0byBtYXRjaC4KKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9w
dF9leGFjdE1hdGNoIElmIHRydWUsIG9ubHkgcmV0dXJucyBleGFjdCBtYXRjaGVzCisgICAgICog
ICAgIGZvciB0aGUgZXhwcmVzc2lvbi4KKyAgICAgKi8KKyAgICB0ZXN0YWJpbGl0eS5maW5kTW9k
ZWxzID0gZnVuY3Rpb24oZWxlbWVudCwgZXhwcmVzc2lvbiwgb3B0X2V4YWN0TWF0Y2gpIHsKKyAg
ICAgIHZhciBwcmVmaXhlcyA9IFsnbmctJywgJ2RhdGEtbmctJywgJ25nXFw6J107CisgICAgICBm
b3IgKHZhciBwID0gMDsgcCA8IHByZWZpeGVzLmxlbmd0aDsgKytwKSB7CisgICAgICAgIHZhciBh
dHRyaWJ1dGVFcXVhbHMgPSBvcHRfZXhhY3RNYXRjaCA/ICc9JyA6ICcqPSc7CisgICAgICAgIHZh
ciBzZWxlY3RvciA9ICdbJyArIHByZWZpeGVzW3BdICsgJ21vZGVsJyArIGF0dHJpYnV0ZUVxdWFs
cyArICciJyArIGV4cHJlc3Npb24gKyAnIl0nOworICAgICAgICB2YXIgZWxlbWVudHMgPSBlbGVt
ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOworICAgICAgICBpZiAoZWxlbWVudHMubGVu
Z3RoKSB7CisgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzOworICAgICAgICB9CisgICAgICB9Cisg
ICAgfTsKKworICAgIC8qKgorICAgICAqIEBuYW1lICQkdGVzdGFiaWxpdHkjZ2V0TG9jYXRpb24K
KyAgICAgKgorICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAqIFNob3J0Y3V0IGZvciBnZXR0aW5n
IHRoZSBsb2NhdGlvbiBpbiBhIGJyb3dzZXIgYWdub3N0aWMgd2F5LiBSZXR1cm5zCisgICAgICog
ICAgIHRoZSBwYXRoLCBzZWFyY2gsIGFuZCBoYXNoLiAoZS5nLiAvcGF0aD9hPWIjaGFzaCkKKyAg
ICAgKi8KKyAgICB0ZXN0YWJpbGl0eS5nZXRMb2NhdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgICAg
cmV0dXJuICRsb2NhdGlvbi51cmwoKTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogQG5hbWUg
JCR0ZXN0YWJpbGl0eSNzZXRMb2NhdGlvbgorICAgICAqCisgICAgICogQGRlc2NyaXB0aW9uCisg
ICAgICogU2hvcnRjdXQgZm9yIG5hdmlnYXRpbmcgdG8gYSBsb2NhdGlvbiB3aXRob3V0IGRvaW5n
IGEgZnVsbCBwYWdlIHJlbG9hZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwg
VGhlIGxvY2F0aW9uIHVybCAocGF0aCwgc2VhcmNoIGFuZCBoYXNoLAorICAgICAqICAgICBlLmcu
IC9wYXRoP2E9YiNoYXNoKSB0byBnbyB0by4KKyAgICAgKi8KKyAgICB0ZXN0YWJpbGl0eS5zZXRM
b2NhdGlvbiA9IGZ1bmN0aW9uKHVybCkgeworICAgICAgaWYgKHVybCAhPT0gJGxvY2F0aW9uLnVy
bCgpKSB7CisgICAgICAgICRsb2NhdGlvbi51cmwodXJsKTsKKyAgICAgICAgJHJvb3RTY29wZS4k
ZGlnZXN0KCk7CisgICAgICB9CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEBuYW1lICQkdGVz
dGFiaWxpdHkjd2hlblN0YWJsZQorICAgICAqCisgICAgICogQGRlc2NyaXB0aW9uCisgICAgICog
Q2FsbHMgdGhlIGNhbGxiYWNrIHdoZW4gJHRpbWVvdXQgYW5kICRodHRwIHJlcXVlc3RzIGFyZSBj
b21wbGV0ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjaworICAg
ICAqLworICAgIHRlc3RhYmlsaXR5LndoZW5TdGFibGUgPSBmdW5jdGlvbihjYWxsYmFjaykgewor
ICAgICAgJGJyb3dzZXIubm90aWZ5V2hlbk5vT3V0c3RhbmRpbmdSZXF1ZXN0cyhjYWxsYmFjayk7
CisgICAgfTsKKworICAgIHJldHVybiB0ZXN0YWJpbGl0eTsKKyAgfV07Cit9CisKK2Z1bmN0aW9u
ICRUaW1lb3V0UHJvdmlkZXIoKSB7CisgIHRoaXMuJGdldCA9IFsnJHJvb3RTY29wZScsICckYnJv
d3NlcicsICckcScsICckJHEnLCAnJGV4Y2VwdGlvbkhhbmRsZXInLAorICAgICAgIGZ1bmN0aW9u
KCRyb290U2NvcGUsICAgJGJyb3dzZXIsICAgJHEsICAgJCRxLCAgICRleGNlcHRpb25IYW5kbGVy
KSB7CisKKyAgICB2YXIgZGVmZXJyZWRzID0ge307CisKKworICAgICAvKioKKyAgICAgICogQG5n
ZG9jIHNlcnZpY2UKKyAgICAgICogQG5hbWUgJHRpbWVvdXQKKyAgICAgICoKKyAgICAgICogQGRl
c2NyaXB0aW9uCisgICAgICAqIEFuZ3VsYXIncyB3cmFwcGVyIGZvciBgd2luZG93LnNldFRpbWVv
dXRgLiBUaGUgYGZuYCBmdW5jdGlvbiBpcyB3cmFwcGVkIGludG8gYSB0cnkvY2F0Y2gKKyAgICAg
ICogYmxvY2sgYW5kIGRlbGVnYXRlcyBhbnkgZXhjZXB0aW9ucyB0bworICAgICAgKiB7QGxpbmsg
bmcuJGV4Y2VwdGlvbkhhbmRsZXIgJGV4Y2VwdGlvbkhhbmRsZXJ9IHNlcnZpY2UuCisgICAgICAq
CisgICAgICAqIFRoZSByZXR1cm4gdmFsdWUgb2YgY2FsbGluZyBgJHRpbWVvdXRgIGlzIGEgcHJv
bWlzZSwgd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB3aGVuCisgICAgICAqIHRoZSBkZWxheSBoYXMg
cGFzc2VkIGFuZCB0aGUgdGltZW91dCBmdW5jdGlvbiwgaWYgcHJvdmlkZWQsIGlzIGV4ZWN1dGVk
LgorICAgICAgKgorICAgICAgKiBUbyBjYW5jZWwgYSB0aW1lb3V0IHJlcXVlc3QsIGNhbGwgYCR0
aW1lb3V0LmNhbmNlbChwcm9taXNlKWAuCisgICAgICAqCisgICAgICAqIEluIHRlc3RzIHlvdSBj
YW4gdXNlIHtAbGluayBuZ01vY2suJHRpbWVvdXQgYCR0aW1lb3V0LmZsdXNoKClgfSB0bworICAg
ICAgKiBzeW5jaHJvbm91c2x5IGZsdXNoIHRoZSBxdWV1ZSBvZiBkZWZlcnJlZCBmdW5jdGlvbnMu
CisgICAgICAqCisgICAgICAqIElmIHlvdSBvbmx5IHdhbnQgYSBwcm9taXNlIHRoYXQgd2lsbCBi
ZSByZXNvbHZlZCBhZnRlciBzb21lIHNwZWNpZmllZCBkZWxheQorICAgICAgKiB0aGVuIHlvdSBj
YW4gY2FsbCBgJHRpbWVvdXRgIHdpdGhvdXQgdGhlIGBmbmAgZnVuY3Rpb24uCisgICAgICAqCisg
ICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oKT19IGZuIEEgZnVuY3Rpb24sIHdob3NlIGV4ZWN1dGlv
biBzaG91bGQgYmUgZGVsYXllZC4KKyAgICAgICogQHBhcmFtIHtudW1iZXI9fSBbZGVsYXk9MF0g
RGVsYXkgaW4gbWlsbGlzZWNvbmRzLgorICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBbaW52b2tl
QXBwbHk9dHJ1ZV0gSWYgc2V0IHRvIGBmYWxzZWAgc2tpcHMgbW9kZWwgZGlydHkgY2hlY2tpbmcs
IG90aGVyd2lzZQorICAgICAgKiAgIHdpbGwgaW52b2tlIGBmbmAgd2l0aGluIHRoZSB7QGxpbmsg
bmcuJHJvb3RTY29wZS5TY29wZSMkYXBwbHkgJGFwcGx5fSBibG9jay4KKyAgICAgICogQHBhcmFt
IHsuLi4qPX0gUGFzcyBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgdG8gdGhlIGV4ZWN1dGVkIGZ1bmN0
aW9uLgorICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB0aGF0IHdpbGwgYmUgcmVz
b2x2ZWQgd2hlbiB0aGUgdGltZW91dCBpcyByZWFjaGVkLiBUaGUgdmFsdWUgdGhpcworICAgICAg
KiAgIHByb21pc2Ugd2lsbCBiZSByZXNvbHZlZCB3aXRoIGlzIHRoZSByZXR1cm4gdmFsdWUgb2Yg
dGhlIGBmbmAgZnVuY3Rpb24uCisgICAgICAqCisgICAgICAqLworICAgIGZ1bmN0aW9uIHRpbWVv
dXQoZm4sIGRlbGF5LCBpbnZva2VBcHBseSkgeworICAgICAgaWYgKCFpc0Z1bmN0aW9uKGZuKSkg
eworICAgICAgICBpbnZva2VBcHBseSA9IGRlbGF5OworICAgICAgICBkZWxheSA9IGZuOworICAg
ICAgICBmbiA9IG5vb3A7CisgICAgICB9CisKKyAgICAgIHZhciBhcmdzID0gc2xpY2VBcmdzKGFy
Z3VtZW50cywgMyksCisgICAgICAgICAgc2tpcEFwcGx5ID0gKGlzRGVmaW5lZChpbnZva2VBcHBs
eSkgJiYgIWludm9rZUFwcGx5KSwKKyAgICAgICAgICBkZWZlcnJlZCA9IChza2lwQXBwbHkgPyAk
JHEgOiAkcSkuZGVmZXIoKSwKKyAgICAgICAgICBwcm9taXNlID0gZGVmZXJyZWQucHJvbWlzZSwK
KyAgICAgICAgICB0aW1lb3V0SWQ7CisKKyAgICAgIHRpbWVvdXRJZCA9ICRicm93c2VyLmRlZmVy
KGZ1bmN0aW9uKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgIGRlZmVycmVkLnJlc29sdmUo
Zm4uYXBwbHkobnVsbCwgYXJncykpOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAg
ZGVmZXJyZWQucmVqZWN0KGUpOworICAgICAgICAgICRleGNlcHRpb25IYW5kbGVyKGUpOworICAg
ICAgICB9CisgICAgICAgIGZpbmFsbHkgeworICAgICAgICAgIGRlbGV0ZSBkZWZlcnJlZHNbcHJv
bWlzZS4kJHRpbWVvdXRJZF07CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXNraXBBcHBseSkg
JHJvb3RTY29wZS4kYXBwbHkoKTsKKyAgICAgIH0sIGRlbGF5KTsKKworICAgICAgcHJvbWlzZS4k
JHRpbWVvdXRJZCA9IHRpbWVvdXRJZDsKKyAgICAgIGRlZmVycmVkc1t0aW1lb3V0SWRdID0gZGVm
ZXJyZWQ7CisKKyAgICAgIHJldHVybiBwcm9taXNlOworICAgIH0KKworCisgICAgIC8qKgorICAg
ICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICAqIEBuYW1lICR0aW1lb3V0I2NhbmNlbAorICAgICAg
KgorICAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgICogQ2FuY2VscyBhIHRhc2sgYXNzb2NpYXRl
ZCB3aXRoIHRoZSBgcHJvbWlzZWAuIEFzIGEgcmVzdWx0IG9mIHRoaXMsIHRoZSBwcm9taXNlIHdp
bGwgYmUKKyAgICAgICogcmVzb2x2ZWQgd2l0aCBhIHJlamVjdGlvbi4KKyAgICAgICoKKyAgICAg
ICogQHBhcmFtIHtQcm9taXNlPX0gcHJvbWlzZSBQcm9taXNlIHJldHVybmVkIGJ5IHRoZSBgJHRp
bWVvdXRgIGZ1bmN0aW9uLgorICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1
ZWAgaWYgdGhlIHRhc2sgaGFzbid0IGV4ZWN1dGVkIHlldCBhbmQgd2FzIHN1Y2Nlc3NmdWxseQor
ICAgICAgKiAgIGNhbmNlbGVkLgorICAgICAgKi8KKyAgICB0aW1lb3V0LmNhbmNlbCA9IGZ1bmN0
aW9uKHByb21pc2UpIHsKKyAgICAgIGlmIChwcm9taXNlICYmIHByb21pc2UuJCR0aW1lb3V0SWQg
aW4gZGVmZXJyZWRzKSB7CisgICAgICAgIGRlZmVycmVkc1twcm9taXNlLiQkdGltZW91dElkXS5y
ZWplY3QoJ2NhbmNlbGVkJyk7CisgICAgICAgIGRlbGV0ZSBkZWZlcnJlZHNbcHJvbWlzZS4kJHRp
bWVvdXRJZF07CisgICAgICAgIHJldHVybiAkYnJvd3Nlci5kZWZlci5jYW5jZWwocHJvbWlzZS4k
JHRpbWVvdXRJZCk7CisgICAgICB9CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKworICAg
IHJldHVybiB0aW1lb3V0OworICB9XTsKK30KKworLy8gTk9URTogIFRoZSB1c2FnZSBvZiB3aW5k
b3cgYW5kIGRvY3VtZW50IGluc3RlYWQgb2YgJHdpbmRvdyBhbmQgJGRvY3VtZW50IGhlcmUgaXMK
Ky8vIGRlbGliZXJhdGUuICBUaGlzIHNlcnZpY2UgZGVwZW5kcyBvbiB0aGUgc3BlY2lmaWMgYmVo
YXZpb3Igb2YgYW5jaG9yIG5vZGVzIGNyZWF0ZWQgYnkgdGhlCisvLyBicm93c2VyIChyZXNvbHZp
bmcgYW5kIHBhcnNpbmcgVVJMcykgdGhhdCBpcyB1bmxpa2VseSB0byBiZSBwcm92aWRlZCBieSBt
b2NrIG9iamVjdHMgYW5kCisvLyBjYXVzZSB1cyB0byBicmVhayB0ZXN0cy4gIEluIGFkZGl0aW9u
LCB3aGVuIHRoZSBicm93c2VyIHJlc29sdmVzIGEgVVJMIGZvciBYSFIsIGl0CisvLyBkb2Vzbid0
IGtub3cgYWJvdXQgbW9ja2VkIGxvY2F0aW9ucyBhbmQgcmVzb2x2ZXMgVVJMcyB0byB0aGUgcmVh
bCBkb2N1bWVudCAtIHdoaWNoIGlzCisvLyBleGFjdGx5IHRoZSBiZWhhdmlvciBuZWVkZWQgaGVy
ZS4gIFRoZXJlIGlzIGxpdHRsZSB2YWx1ZSBpcyBtb2NraW5nIHRoZXNlIG91dCBmb3IgdGhpcwor
Ly8gc2VydmljZS4KK3ZhciB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImEiKTsKK3ZhciBvcmlnaW5VcmwgPSB1cmxSZXNvbHZlKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTsK
KworCisvKioKKyAqCisgKiBJbXBsZW1lbnRhdGlvbiBOb3RlcyBmb3Igbm9uLUlFIGJyb3dzZXJz
CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBBc3NpZ25p
bmcgYSBVUkwgdG8gdGhlIGhyZWYgcHJvcGVydHkgb2YgYW4gYW5jaG9yIERPTSBub2RlLCBldmVu
IG9uZSBhdHRhY2hlZCB0byB0aGUgRE9NLAorICogcmVzdWx0cyBib3RoIGluIHRoZSBub3JtYWxp
emluZyBhbmQgcGFyc2luZyBvZiB0aGUgVVJMLiAgTm9ybWFsaXppbmcgbWVhbnMgdGhhdCBhIHJl
bGF0aXZlCisgKiBVUkwgd2lsbCBiZSByZXNvbHZlZCBpbnRvIGFuIGFic29sdXRlIFVSTCBpbiB0
aGUgY29udGV4dCBvZiB0aGUgYXBwbGljYXRpb24gZG9jdW1lbnQuCisgKiBQYXJzaW5nIG1lYW5z
IHRoYXQgdGhlIGFuY2hvciBub2RlJ3MgaG9zdCwgaG9zdG5hbWUsIHByb3RvY29sLCBwb3J0LCBw
YXRobmFtZSBhbmQgcmVsYXRlZAorICogcHJvcGVydGllcyBhcmUgYWxsIHBvcHVsYXRlZCB0byBy
ZWZsZWN0IHRoZSBub3JtYWxpemVkIFVSTC4gIFRoaXMgYXBwcm9hY2ggaGFzIHdpZGUKKyAqIGNv
bXBhdGliaWxpdHkgLSBTYWZhcmkgMSssIE1vemlsbGEgMSssIE9wZXJhIDcrLGUgZXRjLiAgU2Vl
CisgKiBodHRwOi8vd3d3LmFwdGFuYS5jb20vcmVmZXJlbmNlL2h0bWwvYXBpL0hUTUxBbmNob3JF
bGVtZW50Lmh0bWwKKyAqCisgKiBJbXBsZW1lbnRhdGlvbiBOb3RlcyBmb3IgSUUKKyAqIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSUUgPj0gOCBhbmQgPD0gMTAgbm9ybWFsaXplcyB0
aGUgVVJMIHdoZW4gYXNzaWduZWQgdG8gdGhlIGFuY2hvciBub2RlIHNpbWlsYXIgdG8gdGhlIG90
aGVyCisgKiBicm93c2Vycy4gIEhvd2V2ZXIsIHRoZSBwYXJzZWQgY29tcG9uZW50cyB3aWxsIG5v
dCBiZSBzZXQgaWYgdGhlIFVSTCBhc3NpZ25lZCBkaWQgbm90IHNwZWNpZnkKKyAqIHRoZW0uICAo
ZS5nLiBpZiB5b3UgYXNzaWduIGEuaHJlZiA9ICJmb28iLCB0aGVuIGEucHJvdG9jb2wsIGEuaG9z
dCwgZXRjLiB3aWxsIGJlIGVtcHR5LikgIFdlCisgKiB3b3JrIGFyb3VuZCB0aGF0IGJ5IHBlcmZv
cm1pbmcgdGhlIHBhcnNpbmcgaW4gYSAybmQgc3RlcCBieSB0YWtpbmcgYSBwcmV2aW91c2x5IG5v
cm1hbGl6ZWQKKyAqIFVSTCAoZS5nLiBieSBhc3NpZ25pbmcgdG8gYS5ocmVmKSBhbmQgYXNzaWdu
aW5nIGl0IGEuaHJlZiBhZ2Fpbi4gIFRoaXMgY29ycmVjdGx5IHBvcHVsYXRlcyB0aGUKKyAqIHBy
b3BlcnRpZXMgc3VjaCBhcyBwcm90b2NvbCwgaG9zdG5hbWUsIHBvcnQsIGV0Yy4KKyAqCisgKiBJ
RTcgZG9lcyBub3Qgbm9ybWFsaXplIHRoZSBVUkwgd2hlbiBhc3NpZ25lZCB0byBhbiBhbmNob3Ig
bm9kZS4gIChBcHBhcmVudGx5LCBpdCBkb2VzLCBpZiBvbmUKKyAqIHVzZXMgdGhlIGlubmVyIEhU
TUwgYXBwcm9hY2ggdG8gYXNzaWduIHRoZSBVUkwgYXMgcGFydCBvZiBhbiBIVE1MIHNuaXBwZXQg
LQorICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDcyNzI5KSAgSG93ZXZlciwgc2V0dGlu
ZyBpbWdbc3JjXSBkb2VzIG5vcm1hbGl6ZSB0aGUgVVJMLgorICogVW5mb3J0dW5hdGVseSwgc2V0
dGluZyBpbWdbc3JjXSB0byBzb21ldGhpbmcgbGlrZSAiamF2YXNjcmlwdDpmb28iIG9uIElFIHRo
cm93cyBhbiBleGNlcHRpb24uCisgKiBTaW5jZSB0aGUgcHJpbWFyeSB1c2FnZSBmb3Igbm9ybWFs
aXppbmcgVVJMcyBpcyB0byBzYW5pdGl6ZSBzdWNoIFVSTHMsIHdlIGNhbid0IHVzZSB0aGF0Cisg
KiBtZXRob2QgYW5kIElFIDwgOCBpcyB1bnN1cHBvcnRlZC4KKyAqCisgKiBSZWZlcmVuY2VzOgor
ICogICBodHRwOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1M
QW5jaG9yRWxlbWVudAorICogICBodHRwOi8vd3d3LmFwdGFuYS5jb20vcmVmZXJlbmNlL2h0bWwv
YXBpL0hUTUxBbmNob3JFbGVtZW50Lmh0bWwKKyAqICAgaHR0cDovL3VybC5zcGVjLndoYXR3Zy5v
cmcvI3VybHV0aWxzCisgKiAgIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIuanMv
cHVsbC8yOTAyCisgKiAgIGh0dHA6Ly9qYW1lcy5wYWRvbHNleS5jb20vamF2YXNjcmlwdC9wYXJz
aW5nLXVybHMtd2l0aC10aGUtZG9tLworICoKKyAqIEBraW5kIGZ1bmN0aW9uCisgKiBAcGFyYW0g
e3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcGFyc2VkLgorICogQGRlc2NyaXB0aW9uIE5vcm1h
bGl6ZXMgYW5kIHBhcnNlcyBhIFVSTC4KKyAqIEByZXR1cm5zIHtvYmplY3R9IFJldHVybnMgdGhl
IG5vcm1hbGl6ZWQgVVJMIGFzIGEgZGljdGlvbmFyeS4KKyAqCisgKiAgIHwgbWVtYmVyIG5hbWUg
ICB8IERlc2NyaXB0aW9uICAgIHwKKyAqICAgfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0t
LS0tfAorICogICB8IGhyZWYgICAgICAgICAgfCBBIG5vcm1hbGl6ZWQgdmVyc2lvbiBvZiB0aGUg
cHJvdmlkZWQgVVJMIGlmIGl0IHdhcyBub3QgYW4gYWJzb2x1dGUgVVJMIHwKKyAqICAgfCBwcm90
b2NvbCAgICAgIHwgVGhlIHByb3RvY29sIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgY29sb24gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgIHwgaG9zdCAgICAgICAgICB8IFRoZSBo
b3N0IGFuZCBwb3J0IChpZiB0aGUgcG9ydCBpcyBub24tZGVmYXVsdCkgb2YgdGhlIG5vcm1hbGl6
ZWRVcmwgICAgfAorICogICB8IHNlYXJjaCAgICAgICAgfCBUaGUgc2VhcmNoIHBhcmFtcywgbWlu
dXMgdGhlIHF1ZXN0aW9uIG1hcmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAg
fCBoYXNoICAgICAgICAgIHwgVGhlIGhhc2ggc3RyaW5nLCBtaW51cyB0aGUgaGFzaCBzeW1ib2wK
KyAqICAgfCBob3N0bmFtZSAgICAgIHwgVGhlIGhvc3RuYW1lCisgKiAgIHwgcG9ydCAgICAgICAg
ICB8IFRoZSBwb3J0LCB3aXRob3V0ICI6IgorICogICB8IHBhdGhuYW1lICAgICAgfCBUaGUgcGF0
aG5hbWUsIGJlZ2lubmluZyB3aXRoICIvIgorICoKKyAqLworZnVuY3Rpb24gdXJsUmVzb2x2ZSh1
cmwpIHsKKyAgdmFyIGhyZWYgPSB1cmw7CisKKyAgaWYgKG1zaWUpIHsKKyAgICAvLyBOb3JtYWxp
emUgYmVmb3JlIHBhcnNlLiAgUmVmZXIgSW1wbGVtZW50YXRpb24gTm90ZXMgb24gd2h5IHRoaXMg
aXMKKyAgICAvLyBkb25lIGluIHR3byBzdGVwcyBvbiBJRS4KKyAgICB1cmxQYXJzaW5nTm9kZS5z
ZXRBdHRyaWJ1dGUoImhyZWYiLCBocmVmKTsKKyAgICBocmVmID0gdXJsUGFyc2luZ05vZGUuaHJl
ZjsKKyAgfQorCisgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpOwor
CisgIC8vIHVybFBhcnNpbmdOb2RlIHByb3ZpZGVzIHRoZSBVcmxVdGlscyBpbnRlcmZhY2UgLSBo
dHRwOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsdXRpbHMKKyAgcmV0dXJuIHsKKyAgICBocmVm
OiB1cmxQYXJzaW5nTm9kZS5ocmVmLAorICAgIHByb3RvY29sOiB1cmxQYXJzaW5nTm9kZS5wcm90
b2NvbCA/IHVybFBhcnNpbmdOb2RlLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpIDogJycsCisg
ICAgaG9zdDogdXJsUGFyc2luZ05vZGUuaG9zdCwKKyAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2Rl
LnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXD8vLCAnJykgOiAnJywK
KyAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBs
YWNlKC9eIy8sICcnKSA6ICcnLAorICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFt
ZSwKKyAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LAorICAgIHBhdGhuYW1lOiAodXJsUGFy
c2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpCisgICAgICA/IHVybFBhcnNpbmdO
b2RlLnBhdGhuYW1lCisgICAgICA6ICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lCisgIH07
Cit9CisKKy8qKgorICogUGFyc2UgYSByZXF1ZXN0IFVSTCBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIg
dGhpcyBpcyBhIHNhbWUtb3JpZ2luIHJlcXVlc3QgYXMgdGhlIGFwcGxpY2F0aW9uIGRvY3VtZW50
LgorICoKKyAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gcmVxdWVzdFVybCBUaGUgdXJsIG9mIHRo
ZSByZXF1ZXN0IGFzIGEgc3RyaW5nIHRoYXQgd2lsbCBiZSByZXNvbHZlZAorICogb3IgYSBwYXJz
ZWQgVVJMIG9iamVjdC4KKyAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSByZXF1ZXN0
IGlzIGZvciB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGFwcGxpY2F0aW9uIGRvY3VtZW50LgorICov
CitmdW5jdGlvbiB1cmxJc1NhbWVPcmlnaW4ocmVxdWVzdFVybCkgeworICB2YXIgcGFyc2VkID0g
KGlzU3RyaW5nKHJlcXVlc3RVcmwpKSA/IHVybFJlc29sdmUocmVxdWVzdFVybCkgOiByZXF1ZXN0
VXJsOworICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVXJsLnByb3RvY29sICYm
CisgICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVybC5ob3N0KTsKK30KKworLyoqCisg
KiBAbmdkb2Mgc2VydmljZQorICogQG5hbWUgJHdpbmRvdworICoKKyAqIEBkZXNjcmlwdGlvbgor
ICogQSByZWZlcmVuY2UgdG8gdGhlIGJyb3dzZXIncyBgd2luZG93YCBvYmplY3QuIFdoaWxlIGB3
aW5kb3dgCisgKiBpcyBnbG9iYWxseSBhdmFpbGFibGUgaW4gSmF2YVNjcmlwdCwgaXQgY2F1c2Vz
IHRlc3RhYmlsaXR5IHByb2JsZW1zLCBiZWNhdXNlCisgKiBpdCBpcyBhIGdsb2JhbCB2YXJpYWJs
ZS4gSW4gYW5ndWxhciB3ZSBhbHdheXMgcmVmZXIgdG8gaXQgdGhyb3VnaCB0aGUKKyAqIGAkd2lu
ZG93YCBzZXJ2aWNlLCBzbyBpdCBtYXkgYmUgb3ZlcnJpZGRlbiwgcmVtb3ZlZCBvciBtb2NrZWQg
Zm9yIHRlc3RpbmcuCisgKgorICogRXhwcmVzc2lvbnMsIGxpa2UgdGhlIG9uZSBkZWZpbmVkIGZv
ciB0aGUgYG5nQ2xpY2tgIGRpcmVjdGl2ZSBpbiB0aGUgZXhhbXBsZQorICogYmVsb3csIGFyZSBl
dmFsdWF0ZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBjdXJyZW50IHNjb3BlLiAgVGhlcmVmb3JlLCB0
aGVyZSBpcworICogbm8gcmlzayBvZiBpbmFkdmVydGVudGx5IGNvZGluZyBpbiBhIGRlcGVuZGVu
Y3kgb24gYSBnbG9iYWwgdmFsdWUgaW4gc3VjaCBhbgorICogZXhwcmVzc2lvbi4KKyAqCisgKiBA
ZXhhbXBsZQorICAgPGV4YW1wbGUgbW9kdWxlPSJ3aW5kb3dFeGFtcGxlIj4KKyAgICAgPGZpbGUg
bmFtZT0iaW5kZXguaHRtbCI+CisgICAgICAgPHNjcmlwdD4KKyAgICAgICAgIGFuZ3VsYXIubW9k
dWxlKCd3aW5kb3dFeGFtcGxlJywgW10pCisgICAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxl
Q29udHJvbGxlcicsIFsnJHNjb3BlJywgJyR3aW5kb3cnLCBmdW5jdGlvbigkc2NvcGUsICR3aW5k
b3cpIHsKKyAgICAgICAgICAgICAkc2NvcGUuZ3JlZXRpbmcgPSAnSGVsbG8sIFdvcmxkISc7Cisg
ICAgICAgICAgICAgJHNjb3BlLmRvR3JlZXRpbmcgPSBmdW5jdGlvbihncmVldGluZykgeworICAg
ICAgICAgICAgICAgJHdpbmRvdy5hbGVydChncmVldGluZyk7CisgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgfV0pOworICAgICAgIDwvc2NyaXB0PgorICAgICAgIDxkaXYgbmctY29udHJvbGxl
cj0iRXhhbXBsZUNvbnRyb2xsZXIiPgorICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5nLW1v
ZGVsPSJncmVldGluZyIgYXJpYS1sYWJlbD0iZ3JlZXRpbmciIC8+CisgICAgICAgICA8YnV0dG9u
IG5nLWNsaWNrPSJkb0dyZWV0aW5nKGdyZWV0aW5nKSI+QUxFUlQ8L2J1dHRvbj4KKyAgICAgICA8
L2Rpdj4KKyAgICAgPC9maWxlPgorICAgICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBl
PSJwcm90cmFjdG9yIj4KKyAgICAgIGl0KCdzaG91bGQgZGlzcGxheSB0aGUgZ3JlZXRpbmcgaW4g
dGhlIGlucHV0IGJveCcsIGZ1bmN0aW9uKCkgeworICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ2dy
ZWV0aW5nJykpLnNlbmRLZXlzKCdIZWxsbywgRTJFIFRlc3RzJyk7CisgICAgICAgLy8gSWYgd2Ug
Y2xpY2sgdGhlIGJ1dHRvbiBpdCB3aWxsIGJsb2NrIHRoZSB0ZXN0IHJ1bm5lcgorICAgICAgIC8v
IGVsZW1lbnQoJzpidXR0b24nKS5jbGljaygpOworICAgICAgfSk7CisgICAgIDwvZmlsZT4KKyAg
IDwvZXhhbXBsZT4KKyAqLworZnVuY3Rpb24gJFdpbmRvd1Byb3ZpZGVyKCkgeworICB0aGlzLiRn
ZXQgPSB2YWx1ZUZuKHdpbmRvdyk7Cit9CisKKy8qKgorICogQG5hbWUgJCRjb29raWVSZWFkZXIK
KyAqIEByZXF1aXJlcyAkZG9jdW1lbnQKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFRoaXMgaXMg
YSBwcml2YXRlIHNlcnZpY2UgZm9yIHJlYWRpbmcgY29va2llcyB1c2VkIGJ5ICRodHRwIGFuZCBu
Z0Nvb2tpZXMKKyAqCisgKiBAcmV0dXJuIHtPYmplY3R9IGEga2V5L3ZhbHVlIG1hcCBvZiB0aGUg
Y3VycmVudCBjb29raWVzCisgKi8KK2Z1bmN0aW9uICQkQ29va2llUmVhZGVyKCRkb2N1bWVudCkg
eworICB2YXIgcmF3RG9jdW1lbnQgPSAkZG9jdW1lbnRbMF0gfHwge307CisgIHZhciBsYXN0Q29v
a2llcyA9IHt9OworICB2YXIgbGFzdENvb2tpZVN0cmluZyA9ICcnOworCisgIGZ1bmN0aW9uIHNh
ZmVEZWNvZGVVUklDb21wb25lbnQoc3RyKSB7CisgICAgdHJ5IHsKKyAgICAgIHJldHVybiBkZWNv
ZGVVUklDb21wb25lbnQoc3RyKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICByZXR1cm4gc3Ry
OworICAgIH0KKyAgfQorCisgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICB2YXIgY29va2llQXJy
YXksIGNvb2tpZSwgaSwgaW5kZXgsIG5hbWU7CisgICAgdmFyIGN1cnJlbnRDb29raWVTdHJpbmcg
PSByYXdEb2N1bWVudC5jb29raWUgfHwgJyc7CisKKyAgICBpZiAoY3VycmVudENvb2tpZVN0cmlu
ZyAhPT0gbGFzdENvb2tpZVN0cmluZykgeworICAgICAgbGFzdENvb2tpZVN0cmluZyA9IGN1cnJl
bnRDb29raWVTdHJpbmc7CisgICAgICBjb29raWVBcnJheSA9IGxhc3RDb29raWVTdHJpbmcuc3Bs
aXQoJzsgJyk7CisgICAgICBsYXN0Q29va2llcyA9IHt9OworCisgICAgICBmb3IgKGkgPSAwOyBp
IDwgY29va2llQXJyYXkubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgY29va2llID0gY29va2llQXJy
YXlbaV07CisgICAgICAgIGluZGV4ID0gY29va2llLmluZGV4T2YoJz0nKTsKKyAgICAgICAgaWYg
KGluZGV4ID4gMCkgeyAvL2lnbm9yZSBuYW1lbGVzcyBjb29raWVzCisgICAgICAgICAgbmFtZSA9
IHNhZmVEZWNvZGVVUklDb21wb25lbnQoY29va2llLnN1YnN0cmluZygwLCBpbmRleCkpOworICAg
ICAgICAgIC8vIHRoZSBmaXJzdCB2YWx1ZSB0aGF0IGlzIHNlZW4gZm9yIGEgY29va2llIGlzIHRo
ZSBtb3N0CisgICAgICAgICAgLy8gc3BlY2lmaWMgb25lLiAgdmFsdWVzIGZvciB0aGUgc2FtZSBj
b29raWUgbmFtZSB0aGF0CisgICAgICAgICAgLy8gZm9sbG93IGFyZSBmb3IgbGVzcyBzcGVjaWZp
YyBwYXRocy4KKyAgICAgICAgICBpZiAobGFzdENvb2tpZXNbbmFtZV0gPT09IHVuZGVmaW5lZCkg
eworICAgICAgICAgICAgbGFzdENvb2tpZXNbbmFtZV0gPSBzYWZlRGVjb2RlVVJJQ29tcG9uZW50
KGNvb2tpZS5zdWJzdHJpbmcoaW5kZXggKyAxKSk7CisgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICB9CisgICAgfQorICAgIHJldHVybiBsYXN0Q29va2llczsKKyAgfTsKK30KKworJCRDb29r
aWVSZWFkZXIuJGluamVjdCA9IFsnJGRvY3VtZW50J107CisKK2Z1bmN0aW9uICQkQ29va2llUmVh
ZGVyUHJvdmlkZXIoKSB7CisgIHRoaXMuJGdldCA9ICQkQ29va2llUmVhZGVyOworfQorCisvKiBn
bG9iYWwgY3VycmVuY3lGaWx0ZXI6IHRydWUsCisgZGF0ZUZpbHRlcjogdHJ1ZSwKKyBmaWx0ZXJG
aWx0ZXI6IHRydWUsCisganNvbkZpbHRlcjogdHJ1ZSwKKyBsaW1pdFRvRmlsdGVyOiB0cnVlLAor
IGxvd2VyY2FzZUZpbHRlcjogdHJ1ZSwKKyBudW1iZXJGaWx0ZXI6IHRydWUsCisgb3JkZXJCeUZp
bHRlcjogdHJ1ZSwKKyB1cHBlcmNhc2VGaWx0ZXI6IHRydWUsCisgKi8KKworLyoqCisgKiBAbmdk
b2MgcHJvdmlkZXIKKyAqIEBuYW1lICRmaWx0ZXJQcm92aWRlcgorICogQGRlc2NyaXB0aW9uCisg
KgorICogRmlsdGVycyBhcmUganVzdCBmdW5jdGlvbnMgd2hpY2ggdHJhbnNmb3JtIGlucHV0IHRv
IGFuIG91dHB1dC4gSG93ZXZlciBmaWx0ZXJzIG5lZWQgdG8gYmUKKyAqIERlcGVuZGVuY3kgSW5q
ZWN0ZWQuIFRvIGFjaGlldmUgdGhpcyBhIGZpbHRlciBkZWZpbml0aW9uIGNvbnNpc3RzIG9mIGEg
ZmFjdG9yeSBmdW5jdGlvbiB3aGljaCBpcworICogYW5ub3RhdGVkIHdpdGggZGVwZW5kZW5jaWVz
IGFuZCBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uCisgKgor
ICogPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtd2FybmluZyI+CisgKiAqKk5vdGU6KiogRmlsdGVy
IG5hbWVzIG11c3QgYmUgdmFsaWQgYW5ndWxhciB7QGxpbmsgZXhwcmVzc2lvbn0gaWRlbnRpZmll
cnMsIHN1Y2ggYXMgYHVwcGVyY2FzZWAgb3IgYG9yZGVyQnlgLgorICogTmFtZXMgd2l0aCBzcGVj
aWFsIGNoYXJhY3RlcnMsIHN1Y2ggYXMgaHlwaGVucyBhbmQgZG90cywgYXJlIG5vdCBhbGxvd2Vk
LiBJZiB5b3Ugd2lzaCB0byBuYW1lc3BhY2UKKyAqIHlvdXIgZmlsdGVycywgdGhlbiB5b3UgY2Fu
IHVzZSBjYXBpdGFsaXphdGlvbiAoYG15YXBwU3Vic2VjdGlvbkZpbHRlcnhgKSBvciB1bmRlcnNj
b3JlcworICogKGBteWFwcF9zdWJzZWN0aW9uX2ZpbHRlcnhgKS4KKyAqIDwvZGl2PgorICoKKyAq
IGBgYGpzCisgKiAgIC8vIEZpbHRlciByZWdpc3RyYXRpb24KKyAqICAgZnVuY3Rpb24gTXlNb2R1
bGUoJHByb3ZpZGUsICRmaWx0ZXJQcm92aWRlcikgeworICogICAgIC8vIGNyZWF0ZSBhIHNlcnZp
Y2UgdG8gZGVtb25zdHJhdGUgaW5qZWN0aW9uIChub3QgYWx3YXlzIG5lZWRlZCkKKyAqICAgICAk
cHJvdmlkZS52YWx1ZSgnZ3JlZXQnLCBmdW5jdGlvbihuYW1lKXsKKyAqICAgICAgIHJldHVybiAn
SGVsbG8gJyArIG5hbWUgKyAnISc7CisgKiAgICAgfSk7CisgKgorICogICAgIC8vIHJlZ2lzdGVy
IGEgZmlsdGVyIGZhY3Rvcnkgd2hpY2ggdXNlcyB0aGUKKyAqICAgICAvLyBncmVldCBzZXJ2aWNl
IHRvIGRlbW9uc3RyYXRlIERJLgorICogICAgICRmaWx0ZXJQcm92aWRlci5yZWdpc3RlcignZ3Jl
ZXQnLCBmdW5jdGlvbihncmVldCl7CisgKiAgICAgICAvLyByZXR1cm4gdGhlIGZpbHRlciBmdW5j
dGlvbiB3aGljaCB1c2VzIHRoZSBncmVldCBzZXJ2aWNlCisgKiAgICAgICAvLyB0byBnZW5lcmF0
ZSBzYWx1dGF0aW9uCisgKiAgICAgICByZXR1cm4gZnVuY3Rpb24odGV4dCkgeworICogICAgICAg
ICAvLyBmaWx0ZXJzIG5lZWQgdG8gYmUgZm9yZ2l2aW5nIHNvIGNoZWNrIGlucHV0IHZhbGlkaXR5
CisgKiAgICAgICAgIHJldHVybiB0ZXh0ICYmIGdyZWV0KHRleHQpIHx8IHRleHQ7CisgKiAgICAg
ICB9OworICogICAgIH0pOworICogICB9CisgKiBgYGAKKyAqCisgKiBUaGUgZmlsdGVyIGZ1bmN0
aW9uIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgYCRpbmplY3RvcmAgdW5kZXIgdGhlIGZpbHRlciBu
YW1lIHN1ZmZpeCB3aXRoCisgKiBgRmlsdGVyYC4KKyAqCisgKiBgYGBqcworICogICBpdCgnc2hv
dWxkIGJlIHRoZSBzYW1lIGluc3RhbmNlJywgaW5qZWN0KAorICogICAgIGZ1bmN0aW9uKCRmaWx0
ZXJQcm92aWRlcikgeworICogICAgICAgJGZpbHRlclByb3ZpZGVyLnJlZ2lzdGVyKCdyZXZlcnNl
JywgZnVuY3Rpb24oKXsKKyAqICAgICAgICAgcmV0dXJuIC4uLjsKKyAqICAgICAgIH0pOworICog
ICAgIH0sCisgKiAgICAgZnVuY3Rpb24oJGZpbHRlciwgcmV2ZXJzZUZpbHRlcikgeworICogICAg
ICAgZXhwZWN0KCRmaWx0ZXIoJ3JldmVyc2UnKSkudG9CZShyZXZlcnNlRmlsdGVyKTsKKyAqICAg
ICB9KTsKKyAqIGBgYAorICoKKyAqCisgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cg
YW5ndWxhciBmaWx0ZXJzIHdvcmssIGFuZCBob3cgdG8gY3JlYXRlIHlvdXIgb3duIGZpbHRlcnMs
IHNlZQorICoge0BsaW5rIGd1aWRlL2ZpbHRlciBGaWx0ZXJzfSBpbiB0aGUgQW5ndWxhciBEZXZl
bG9wZXIgR3VpZGUuCisgKi8KKworLyoqCisgKiBAbmdkb2Mgc2VydmljZQorICogQG5hbWUgJGZp
bHRlcgorICogQGtpbmQgZnVuY3Rpb24KKyAqIEBkZXNjcmlwdGlvbgorICogRmlsdGVycyBhcmUg
dXNlZCBmb3IgZm9ybWF0dGluZyBkYXRhIGRpc3BsYXllZCB0byB0aGUgdXNlci4KKyAqCisgKiBU
aGUgZ2VuZXJhbCBzeW50YXggaW4gdGVtcGxhdGVzIGlzIGFzIGZvbGxvd3M6CisgKgorICogICAg
ICAgICB7eyBleHByZXNzaW9uIFt8IGZpbHRlcl9uYW1lWzpwYXJhbWV0ZXJfdmFsdWVdIC4uLiBd
IH19CisgKgorICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgTmFtZSBvZiB0aGUgZmlsdGVyIGZ1bmN0
aW9uIHRvIHJldHJpZXZlCisgKiBAcmV0dXJuIHtGdW5jdGlvbn0gdGhlIGZpbHRlciBmdW5jdGlv
bgorICogQGV4YW1wbGUKKyAgIDxleGFtcGxlIG5hbWU9IiRmaWx0ZXIiIG1vZHVsZT0iZmlsdGVy
RXhhbXBsZSI+CisgICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICAgIDxkaXYgbmct
Y29udHJvbGxlcj0iTWFpbkN0cmwiPgorICAgICAgICA8aDM+e3sgb3JpZ2luYWxUZXh0IH19PC9o
Mz4KKyAgICAgICAgPGgzPnt7IGZpbHRlcmVkVGV4dCB9fTwvaDM+CisgICAgICAgPC9kaXY+Cisg
ICAgIDwvZmlsZT4KKworICAgICA8ZmlsZSBuYW1lPSJzY3JpcHQuanMiPgorICAgICAgYW5ndWxh
ci5tb2R1bGUoJ2ZpbHRlckV4YW1wbGUnLCBbXSkKKyAgICAgIC5jb250cm9sbGVyKCdNYWluQ3Ry
bCcsIGZ1bmN0aW9uKCRzY29wZSwgJGZpbHRlcikgeworICAgICAgICAkc2NvcGUub3JpZ2luYWxU
ZXh0ID0gJ2hlbGxvJzsKKyAgICAgICAgJHNjb3BlLmZpbHRlcmVkVGV4dCA9ICRmaWx0ZXIoJ3Vw
cGVyY2FzZScpKCRzY29wZS5vcmlnaW5hbFRleHQpOworICAgICAgfSk7CisgICAgIDwvZmlsZT4K
KyAgIDwvZXhhbXBsZT4KKyAgKi8KKyRGaWx0ZXJQcm92aWRlci4kaW5qZWN0ID0gWyckcHJvdmlk
ZSddOworZnVuY3Rpb24gJEZpbHRlclByb3ZpZGVyKCRwcm92aWRlKSB7CisgIHZhciBzdWZmaXgg
PSAnRmlsdGVyJzsKKworICAvKioKKyAgICogQG5nZG9jIG1ldGhvZAorICAgKiBAbmFtZSAkZmls
dGVyUHJvdmlkZXIjcmVnaXN0ZXIKKyAgICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fSBuYW1lIE5h
bWUgb2YgdGhlIGZpbHRlciBmdW5jdGlvbiwgb3IgYW4gb2JqZWN0IG1hcCBvZiBmaWx0ZXJzIHdo
ZXJlCisgICAqICAgIHRoZSBrZXlzIGFyZSB0aGUgZmlsdGVyIG5hbWVzIGFuZCB0aGUgdmFsdWVz
IGFyZSB0aGUgZmlsdGVyIGZhY3Rvcmllcy4KKyAgICoKKyAgICogICAgPGRpdiBjbGFzcz0iYWxl
cnQgYWxlcnQtd2FybmluZyI+CisgICAqICAgICoqTm90ZToqKiBGaWx0ZXIgbmFtZXMgbXVzdCBi
ZSB2YWxpZCBhbmd1bGFyIHtAbGluayBleHByZXNzaW9ufSBpZGVudGlmaWVycywgc3VjaCBhcyBg
dXBwZXJjYXNlYCBvciBgb3JkZXJCeWAuCisgICAqICAgIE5hbWVzIHdpdGggc3BlY2lhbCBjaGFy
YWN0ZXJzLCBzdWNoIGFzIGh5cGhlbnMgYW5kIGRvdHMsIGFyZSBub3QgYWxsb3dlZC4gSWYgeW91
IHdpc2ggdG8gbmFtZXNwYWNlCisgICAqICAgIHlvdXIgZmlsdGVycywgdGhlbiB5b3UgY2FuIHVz
ZSBjYXBpdGFsaXphdGlvbiAoYG15YXBwU3Vic2VjdGlvbkZpbHRlcnhgKSBvciB1bmRlcnNjb3Jl
cworICAgKiAgICAoYG15YXBwX3N1YnNlY3Rpb25fZmlsdGVyeGApLgorICAgKiAgICA8L2Rpdj4K
KyAgICogQHJldHVybnMge09iamVjdH0gUmVnaXN0ZXJlZCBmaWx0ZXIgaW5zdGFuY2UsIG9yIGlm
IGEgbWFwIG9mIGZpbHRlcnMgd2FzIHByb3ZpZGVkIHRoZW4gYSBtYXAKKyAgICogICAgb2YgdGhl
IHJlZ2lzdGVyZWQgZmlsdGVyIGluc3RhbmNlcy4KKyAgICovCisgIGZ1bmN0aW9uIHJlZ2lzdGVy
KG5hbWUsIGZhY3RvcnkpIHsKKyAgICBpZiAoaXNPYmplY3QobmFtZSkpIHsKKyAgICAgIHZhciBm
aWx0ZXJzID0ge307CisgICAgICBmb3JFYWNoKG5hbWUsIGZ1bmN0aW9uKGZpbHRlciwga2V5KSB7
CisgICAgICAgIGZpbHRlcnNba2V5XSA9IHJlZ2lzdGVyKGtleSwgZmlsdGVyKTsKKyAgICAgIH0p
OworICAgICAgcmV0dXJuIGZpbHRlcnM7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiAkcHJv
dmlkZS5mYWN0b3J5KG5hbWUgKyBzdWZmaXgsIGZhY3RvcnkpOworICAgIH0KKyAgfQorICB0aGlz
LnJlZ2lzdGVyID0gcmVnaXN0ZXI7CisKKyAgdGhpcy4kZ2V0ID0gWyckaW5qZWN0b3InLCBmdW5j
dGlvbigkaW5qZWN0b3IpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24obmFtZSkgeworICAgICAgcmV0
dXJuICRpbmplY3Rvci5nZXQobmFtZSArIHN1ZmZpeCk7CisgICAgfTsKKyAgfV07CisKKyAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgIC8qIGdsb2JhbAorICAg
IGN1cnJlbmN5RmlsdGVyOiBmYWxzZSwKKyAgICBkYXRlRmlsdGVyOiBmYWxzZSwKKyAgICBmaWx0
ZXJGaWx0ZXI6IGZhbHNlLAorICAgIGpzb25GaWx0ZXI6IGZhbHNlLAorICAgIGxpbWl0VG9GaWx0
ZXI6IGZhbHNlLAorICAgIGxvd2VyY2FzZUZpbHRlcjogZmFsc2UsCisgICAgbnVtYmVyRmlsdGVy
OiBmYWxzZSwKKyAgICBvcmRlckJ5RmlsdGVyOiBmYWxzZSwKKyAgICB1cHBlcmNhc2VGaWx0ZXI6
IGZhbHNlLAorICAqLworCisgIHJlZ2lzdGVyKCdjdXJyZW5jeScsIGN1cnJlbmN5RmlsdGVyKTsK
KyAgcmVnaXN0ZXIoJ2RhdGUnLCBkYXRlRmlsdGVyKTsKKyAgcmVnaXN0ZXIoJ2ZpbHRlcicsIGZp
bHRlckZpbHRlcik7CisgIHJlZ2lzdGVyKCdqc29uJywganNvbkZpbHRlcik7CisgIHJlZ2lzdGVy
KCdsaW1pdFRvJywgbGltaXRUb0ZpbHRlcik7CisgIHJlZ2lzdGVyKCdsb3dlcmNhc2UnLCBsb3dl
cmNhc2VGaWx0ZXIpOworICByZWdpc3RlcignbnVtYmVyJywgbnVtYmVyRmlsdGVyKTsKKyAgcmVn
aXN0ZXIoJ29yZGVyQnknLCBvcmRlckJ5RmlsdGVyKTsKKyAgcmVnaXN0ZXIoJ3VwcGVyY2FzZScs
IHVwcGVyY2FzZUZpbHRlcik7Cit9CisKKy8qKgorICogQG5nZG9jIGZpbHRlcgorICogQG5hbWUg
ZmlsdGVyCisgKiBAa2luZCBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlvbgorICogU2VsZWN0
cyBhIHN1YnNldCBvZiBpdGVtcyBmcm9tIGBhcnJheWAgYW5kIHJldHVybnMgaXQgYXMgYSBuZXcg
YXJyYXkuCisgKgorICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvdXJjZSBhcnJheS4KKyAq
IEBwYXJhbSB7c3RyaW5nfE9iamVjdHxmdW5jdGlvbigpfSBleHByZXNzaW9uIFRoZSBwcmVkaWNh
dGUgdG8gYmUgdXNlZCBmb3Igc2VsZWN0aW5nIGl0ZW1zIGZyb20KKyAqICAgYGFycmF5YC4KKyAq
CisgKiAgIENhbiBiZSBvbmUgb2Y6CisgKgorICogICAtIGBzdHJpbmdgOiBUaGUgc3RyaW5nIGlz
IHVzZWQgZm9yIG1hdGNoaW5nIGFnYWluc3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBgYXJyYXlgLiBB
bGwgc3RyaW5ncyBvcgorICogICAgIG9iamVjdHMgd2l0aCBzdHJpbmcgcHJvcGVydGllcyBpbiBg
YXJyYXlgIHRoYXQgbWF0Y2ggdGhpcyBzdHJpbmcgd2lsbCBiZSByZXR1cm5lZC4gVGhpcyBhbHNv
CisgKiAgICAgYXBwbGllcyB0byBuZXN0ZWQgb2JqZWN0IHByb3BlcnRpZXMuCisgKiAgICAgVGhl
IHByZWRpY2F0ZSBjYW4gYmUgbmVnYXRlZCBieSBwcmVmaXhpbmcgdGhlIHN0cmluZyB3aXRoIGAh
YC4KKyAqCisgKiAgIC0gYE9iamVjdGA6IEEgcGF0dGVybiBvYmplY3QgY2FuIGJlIHVzZWQgdG8g
ZmlsdGVyIHNwZWNpZmljIHByb3BlcnRpZXMgb24gb2JqZWN0cyBjb250YWluZWQKKyAqICAgICBi
eSBgYXJyYXlgLiBGb3IgZXhhbXBsZSBge25hbWU6Ik0iLCBwaG9uZToiMSJ9YCBwcmVkaWNhdGUg
d2lsbCByZXR1cm4gYW4gYXJyYXkgb2YgaXRlbXMKKyAqICAgICB3aGljaCBoYXZlIHByb3BlcnR5
IGBuYW1lYCBjb250YWluaW5nICJNIiBhbmQgcHJvcGVydHkgYHBob25lYCBjb250YWluaW5nICIx
Ii4gQSBzcGVjaWFsCisgKiAgICAgcHJvcGVydHkgbmFtZSBgJGAgY2FuIGJlIHVzZWQgKGFzIGlu
IGB7JDoidGV4dCJ9YCkgdG8gYWNjZXB0IGEgbWF0Y2ggYWdhaW5zdCBhbnkKKyAqICAgICBwcm9w
ZXJ0eSBvZiB0aGUgb2JqZWN0IG9yIGl0cyBuZXN0ZWQgb2JqZWN0IHByb3BlcnRpZXMuIFRoYXQn
cyBlcXVpdmFsZW50IHRvIHRoZSBzaW1wbGUKKyAqICAgICBzdWJzdHJpbmcgbWF0Y2ggd2l0aCBh
IGBzdHJpbmdgIGFzIGRlc2NyaWJlZCBhYm92ZS4gVGhlIHByZWRpY2F0ZSBjYW4gYmUgbmVnYXRl
ZCBieSBwcmVmaXhpbmcKKyAqICAgICB0aGUgc3RyaW5nIHdpdGggYCFgLgorICogICAgIEZvciBl
eGFtcGxlIGB7bmFtZTogIiFNIn1gIHByZWRpY2F0ZSB3aWxsIHJldHVybiBhbiBhcnJheSBvZiBp
dGVtcyB3aGljaCBoYXZlIHByb3BlcnR5IGBuYW1lYAorICogICAgIG5vdCBjb250YWluaW5nICJN
Ii4KKyAqCisgKiAgICAgTm90ZSB0aGF0IGEgbmFtZWQgcHJvcGVydHkgd2lsbCBtYXRjaCBwcm9w
ZXJ0aWVzIG9uIHRoZSBzYW1lIGxldmVsIG9ubHksIHdoaWxlIHRoZSBzcGVjaWFsCisgKiAgICAg
YCRgIHByb3BlcnR5IHdpbGwgbWF0Y2ggcHJvcGVydGllcyBvbiB0aGUgc2FtZSBsZXZlbCBvciBk
ZWVwZXIuIEUuZy4gYW4gYXJyYXkgaXRlbSBsaWtlCisgKiAgICAgYHtuYW1lOiB7Zmlyc3Q6ICdK
b2huJywgbGFzdDogJ0RvZSd9fWAgd2lsbCAqKm5vdCoqIGJlIG1hdGNoZWQgYnkgYHtuYW1lOiAn
Sm9obid9YCwgYnV0CisgKiAgICAgKip3aWxsKiogYmUgbWF0Y2hlZCBieSBgeyQ6ICdKb2huJ31g
LgorICoKKyAqICAgLSBgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBhcnJheSlgOiBBIHByZWRpY2F0
ZSBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byB3cml0ZSBhcmJpdHJhcnkgZmlsdGVycy4KKyAqICAg
ICBUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBlYWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5LCB3
aXRoIHRoZSBlbGVtZW50LCBpdHMgaW5kZXgsIGFuZAorICogICAgIHRoZSBlbnRpcmUgYXJyYXkg
aXRzZWxmIGFzIGFyZ3VtZW50cy4KKyAqCisgKiAgICAgVGhlIGZpbmFsIHJlc3VsdCBpcyBhbiBh
cnJheSBvZiB0aG9zZSBlbGVtZW50cyB0aGF0IHRoZSBwcmVkaWNhdGUgcmV0dXJuZWQgdHJ1ZSBm
b3IuCisgKgorICogQHBhcmFtIHtmdW5jdGlvbihhY3R1YWwsIGV4cGVjdGVkKXx0cnVlfHVuZGVm
aW5lZH0gY29tcGFyYXRvciBDb21wYXJhdG9yIHdoaWNoIGlzIHVzZWQgaW4KKyAqICAgICBkZXRl
cm1pbmluZyBpZiB0aGUgZXhwZWN0ZWQgdmFsdWUgKGZyb20gdGhlIGZpbHRlciBleHByZXNzaW9u
KSBhbmQgYWN0dWFsIHZhbHVlIChmcm9tCisgKiAgICAgdGhlIG9iamVjdCBpbiB0aGUgYXJyYXkp
IHNob3VsZCBiZSBjb25zaWRlcmVkIGEgbWF0Y2guCisgKgorICogICBDYW4gYmUgb25lIG9mOgor
ICoKKyAqICAgLSBgZnVuY3Rpb24oYWN0dWFsLCBleHBlY3RlZClgOgorICogICAgIFRoZSBmdW5j
dGlvbiB3aWxsIGJlIGdpdmVuIHRoZSBvYmplY3QgdmFsdWUgYW5kIHRoZSBwcmVkaWNhdGUgdmFs
dWUgdG8gY29tcGFyZSBhbmQKKyAqICAgICBzaG91bGQgcmV0dXJuIHRydWUgaWYgYm90aCB2YWx1
ZXMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZXF1YWwuCisgKgorICogICAtIGB0cnVlYDogQSBzaG9y
dGhhbmQgZm9yIGBmdW5jdGlvbihhY3R1YWwsIGV4cGVjdGVkKSB7IHJldHVybiBhbmd1bGFyLmVx
dWFscyhhY3R1YWwsIGV4cGVjdGVkKX1gLgorICogICAgIFRoaXMgaXMgZXNzZW50aWFsbHkgc3Ry
aWN0IGNvbXBhcmlzb24gb2YgZXhwZWN0ZWQgYW5kIGFjdHVhbC4KKyAqCisgKiAgIC0gYGZhbHNl
fHVuZGVmaW5lZGA6IEEgc2hvcnQgaGFuZCBmb3IgYSBmdW5jdGlvbiB3aGljaCB3aWxsIGxvb2sg
Zm9yIGEgc3Vic3RyaW5nIG1hdGNoIGluIGNhc2UKKyAqICAgICBpbnNlbnNpdGl2ZSB3YXkuCisg
KgorICogICAgIFByaW1pdGl2ZSB2YWx1ZXMgYXJlIGNvbnZlcnRlZCB0byBzdHJpbmdzLiBPYmpl
Y3RzIGFyZSBub3QgY29tcGFyZWQgYWdhaW5zdCBwcmltaXRpdmVzLAorICogICAgIHVubGVzcyB0
aGV5IGhhdmUgYSBjdXN0b20gYHRvU3RyaW5nYCBtZXRob2QgKGUuZy4gYERhdGVgIG9iamVjdHMp
LgorICoKKyAqIEBleGFtcGxlCisgICA8ZXhhbXBsZT4KKyAgICAgPGZpbGUgbmFtZT0iaW5kZXgu
aHRtbCI+CisgICAgICAgPGRpdiBuZy1pbml0PSJmcmllbmRzID0gW3tuYW1lOidKb2huJywgcGhv
bmU6JzU1NS0xMjc2J30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtuYW1lOidN
YXJ5JywgcGhvbmU6JzgwMC1CSUctTUFSWSd9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7bmFtZTonTWlrZScsIHBob25lOic1NTUtNDMyMSd9LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7bmFtZTonQWRhbScsIHBob25lOic1NTUtNTY3OCd9LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7bmFtZTonSnVsaWUnLCBwaG9uZTonNTU1LTg3NjUnfSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge25hbWU6J0p1bGlldHRlJywgcGhvbmU6
JzU1NS01Njc4J31dIj48L2Rpdj4KKworICAgICAgIDxsYWJlbD5TZWFyY2g6IDxpbnB1dCBuZy1t
b2RlbD0ic2VhcmNoVGV4dCI+PC9sYWJlbD4KKyAgICAgICA8dGFibGUgaWQ9InNlYXJjaFRleHRS
ZXN1bHRzIj4KKyAgICAgICAgIDx0cj48dGg+TmFtZTwvdGg+PHRoPlBob25lPC90aD48L3RyPgor
ICAgICAgICAgPHRyIG5nLXJlcGVhdD0iZnJpZW5kIGluIGZyaWVuZHMgfCBmaWx0ZXI6c2VhcmNo
VGV4dCI+CisgICAgICAgICAgIDx0ZD57e2ZyaWVuZC5uYW1lfX08L3RkPgorICAgICAgICAgICA8
dGQ+e3tmcmllbmQucGhvbmV9fTwvdGQ+CisgICAgICAgICA8L3RyPgorICAgICAgIDwvdGFibGU+
CisgICAgICAgPGhyPgorICAgICAgIDxsYWJlbD5Bbnk6IDxpbnB1dCBuZy1tb2RlbD0ic2VhcmNo
LiQiPjwvbGFiZWw+IDxicj4KKyAgICAgICA8bGFiZWw+TmFtZSBvbmx5IDxpbnB1dCBuZy1tb2Rl
bD0ic2VhcmNoLm5hbWUiPjwvbGFiZWw+PGJyPgorICAgICAgIDxsYWJlbD5QaG9uZSBvbmx5IDxp
bnB1dCBuZy1tb2RlbD0ic2VhcmNoLnBob25lIj48L2xhYmVsPjxicj4KKyAgICAgICA8bGFiZWw+
RXF1YWxpdHkgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuZy1tb2RlbD0ic3RyaWN0Ij48L2xhYmVs
Pjxicj4KKyAgICAgICA8dGFibGUgaWQ9InNlYXJjaE9ialJlc3VsdHMiPgorICAgICAgICAgPHRy
Pjx0aD5OYW1lPC90aD48dGg+UGhvbmU8L3RoPjwvdHI+CisgICAgICAgICA8dHIgbmctcmVwZWF0
PSJmcmllbmRPYmogaW4gZnJpZW5kcyB8IGZpbHRlcjpzZWFyY2g6c3RyaWN0Ij4KKyAgICAgICAg
ICAgPHRkPnt7ZnJpZW5kT2JqLm5hbWV9fTwvdGQ+CisgICAgICAgICAgIDx0ZD57e2ZyaWVuZE9i
ai5waG9uZX19PC90ZD4KKyAgICAgICAgIDwvdHI+CisgICAgICAgPC90YWJsZT4KKyAgICAgPC9m
aWxlPgorICAgICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFjdG9yIj4K
KyAgICAgICB2YXIgZXhwZWN0RnJpZW5kTmFtZXMgPSBmdW5jdGlvbihleHBlY3RlZE5hbWVzLCBr
ZXkpIHsKKyAgICAgICAgIGVsZW1lbnQuYWxsKGJ5LnJlcGVhdGVyKGtleSArICcgaW4gZnJpZW5k
cycpLmNvbHVtbihrZXkgKyAnLm5hbWUnKSkudGhlbihmdW5jdGlvbihhcnIpIHsKKyAgICAgICAg
ICAgYXJyLmZvckVhY2goZnVuY3Rpb24od2QsIGkpIHsKKyAgICAgICAgICAgICBleHBlY3Qod2Qu
Z2V0VGV4dCgpKS50b01hdGNoKGV4cGVjdGVkTmFtZXNbaV0pOworICAgICAgICAgICB9KTsKKyAg
ICAgICAgIH0pOworICAgICAgIH07CisKKyAgICAgICBpdCgnc2hvdWxkIHNlYXJjaCBhY3Jvc3Mg
YWxsIGZpZWxkcyB3aGVuIGZpbHRlcmluZyB3aXRoIGEgc3RyaW5nJywgZnVuY3Rpb24oKSB7Cisg
ICAgICAgICB2YXIgc2VhcmNoVGV4dCA9IGVsZW1lbnQoYnkubW9kZWwoJ3NlYXJjaFRleHQnKSk7
CisgICAgICAgICBzZWFyY2hUZXh0LmNsZWFyKCk7CisgICAgICAgICBzZWFyY2hUZXh0LnNlbmRL
ZXlzKCdtJyk7CisgICAgICAgICBleHBlY3RGcmllbmROYW1lcyhbJ01hcnknLCAnTWlrZScsICdB
ZGFtJ10sICdmcmllbmQnKTsKKworICAgICAgICAgc2VhcmNoVGV4dC5jbGVhcigpOworICAgICAg
ICAgc2VhcmNoVGV4dC5zZW5kS2V5cygnNzYnKTsKKyAgICAgICAgIGV4cGVjdEZyaWVuZE5hbWVz
KFsnSm9obicsICdKdWxpZSddLCAnZnJpZW5kJyk7CisgICAgICAgfSk7CisKKyAgICAgICBpdCgn
c2hvdWxkIHNlYXJjaCBpbiBzcGVjaWZpYyBmaWVsZHMgd2hlbiBmaWx0ZXJpbmcgd2l0aCBhIHBy
ZWRpY2F0ZSBvYmplY3QnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgIHZhciBzZWFyY2hBbnkgPSBl
bGVtZW50KGJ5Lm1vZGVsKCdzZWFyY2guJCcpKTsKKyAgICAgICAgIHNlYXJjaEFueS5jbGVhcigp
OworICAgICAgICAgc2VhcmNoQW55LnNlbmRLZXlzKCdpJyk7CisgICAgICAgICBleHBlY3RGcmll
bmROYW1lcyhbJ01hcnknLCAnTWlrZScsICdKdWxpZScsICdKdWxpZXR0ZSddLCAnZnJpZW5kT2Jq
Jyk7CisgICAgICAgfSk7CisgICAgICAgaXQoJ3Nob3VsZCB1c2UgYSBlcXVhbCBjb21wYXJpc29u
IHdoZW4gY29tcGFyYXRvciBpcyB0cnVlJywgZnVuY3Rpb24oKSB7CisgICAgICAgICB2YXIgc2Vh
cmNoTmFtZSA9IGVsZW1lbnQoYnkubW9kZWwoJ3NlYXJjaC5uYW1lJykpOworICAgICAgICAgdmFy
IHN0cmljdCA9IGVsZW1lbnQoYnkubW9kZWwoJ3N0cmljdCcpKTsKKyAgICAgICAgIHNlYXJjaE5h
bWUuY2xlYXIoKTsKKyAgICAgICAgIHNlYXJjaE5hbWUuc2VuZEtleXMoJ0p1bGllJyk7CisgICAg
ICAgICBzdHJpY3QuY2xpY2soKTsKKyAgICAgICAgIGV4cGVjdEZyaWVuZE5hbWVzKFsnSnVsaWUn
XSwgJ2ZyaWVuZE9iaicpOworICAgICAgIH0pOworICAgICA8L2ZpbGU+CisgICA8L2V4YW1wbGU+
CisgKi8KK2Z1bmN0aW9uIGZpbHRlckZpbHRlcigpIHsKKyAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5
LCBleHByZXNzaW9uLCBjb21wYXJhdG9yKSB7CisgICAgaWYgKCFpc0FycmF5TGlrZShhcnJheSkp
IHsKKyAgICAgIGlmIChhcnJheSA9PSBudWxsKSB7CisgICAgICAgIHJldHVybiBhcnJheTsKKyAg
ICAgIH0gZWxzZSB7CisgICAgICAgIHRocm93IG1pbkVycignZmlsdGVyJykoJ25vdGFycmF5Jywg
J0V4cGVjdGVkIGFycmF5IGJ1dCByZWNlaXZlZDogezB9JywgYXJyYXkpOworICAgICAgfQorICAg
IH0KKworICAgIHZhciBleHByZXNzaW9uVHlwZSA9IGdldFR5cGVGb3JGaWx0ZXIoZXhwcmVzc2lv
bik7CisgICAgdmFyIHByZWRpY2F0ZUZuOworICAgIHZhciBtYXRjaEFnYWluc3RBbnlQcm9wOwor
CisgICAgc3dpdGNoIChleHByZXNzaW9uVHlwZSkgeworICAgICAgY2FzZSAnZnVuY3Rpb24nOgor
ICAgICAgICBwcmVkaWNhdGVGbiA9IGV4cHJlc3Npb247CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSAnYm9vbGVhbic6CisgICAgICBjYXNlICdudWxsJzoKKyAgICAgIGNhc2UgJ251bWJlcic6
CisgICAgICBjYXNlICdzdHJpbmcnOgorICAgICAgICBtYXRjaEFnYWluc3RBbnlQcm9wID0gdHJ1
ZTsKKyAgICAgICAgLy9qc2hpbnQgLVcwODYKKyAgICAgIGNhc2UgJ29iamVjdCc6CisgICAgICAg
IC8vanNoaW50ICtXMDg2CisgICAgICAgIHByZWRpY2F0ZUZuID0gY3JlYXRlUHJlZGljYXRlRm4o
ZXhwcmVzc2lvbiwgY29tcGFyYXRvciwgbWF0Y2hBZ2FpbnN0QW55UHJvcCk7CisgICAgICAgIGJy
ZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGFycmF5OworICAgIH0KKworICAg
IHJldHVybiBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoYXJyYXksIHByZWRpY2F0ZUZuKTsK
KyAgfTsKK30KKworLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgYGZpbHRlckZpbHRlcmAKK2Z1bmN0
aW9uIGNyZWF0ZVByZWRpY2F0ZUZuKGV4cHJlc3Npb24sIGNvbXBhcmF0b3IsIG1hdGNoQWdhaW5z
dEFueVByb3ApIHsKKyAgdmFyIHNob3VsZE1hdGNoUHJpbWl0aXZlcyA9IGlzT2JqZWN0KGV4cHJl
c3Npb24pICYmICgnJCcgaW4gZXhwcmVzc2lvbik7CisgIHZhciBwcmVkaWNhdGVGbjsKKworICBp
ZiAoY29tcGFyYXRvciA9PT0gdHJ1ZSkgeworICAgIGNvbXBhcmF0b3IgPSBlcXVhbHM7CisgIH0g
ZWxzZSBpZiAoIWlzRnVuY3Rpb24oY29tcGFyYXRvcikpIHsKKyAgICBjb21wYXJhdG9yID0gZnVu
Y3Rpb24oYWN0dWFsLCBleHBlY3RlZCkgeworICAgICAgaWYgKGlzVW5kZWZpbmVkKGFjdHVhbCkp
IHsKKyAgICAgICAgLy8gTm8gc3Vic3RyaW5nIG1hdGNoaW5nIGFnYWluc3QgYHVuZGVmaW5lZGAK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgICAgaWYgKChhY3R1YWwgPT09IG51
bGwpIHx8IChleHBlY3RlZCA9PT0gbnVsbCkpIHsKKyAgICAgICAgLy8gTm8gc3Vic3RyaW5nIG1h
dGNoaW5nIGFnYWluc3QgYG51bGxgOyBvbmx5IG1hdGNoIGFnYWluc3QgYG51bGxgCisgICAgICAg
IHJldHVybiBhY3R1YWwgPT09IGV4cGVjdGVkOworICAgICAgfQorICAgICAgaWYgKGlzT2JqZWN0
KGV4cGVjdGVkKSB8fCAoaXNPYmplY3QoYWN0dWFsKSAmJiAhaGFzQ3VzdG9tVG9TdHJpbmcoYWN0
dWFsKSkpIHsKKyAgICAgICAgLy8gU2hvdWxkIG5vdCBjb21wYXJlIHByaW1pdGl2ZXMgYWdhaW5z
dCBvYmplY3RzLCB1bmxlc3MgdGhleSBoYXZlIGN1c3RvbSBgdG9TdHJpbmdgIG1ldGhvZAorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisKKyAgICAgIGFjdHVhbCA9IGxvd2VyY2FzZSgn
JyArIGFjdHVhbCk7CisgICAgICBleHBlY3RlZCA9IGxvd2VyY2FzZSgnJyArIGV4cGVjdGVkKTsK
KyAgICAgIHJldHVybiBhY3R1YWwuaW5kZXhPZihleHBlY3RlZCkgIT09IC0xOworICAgIH07Cisg
IH0KKworICBwcmVkaWNhdGVGbiA9IGZ1bmN0aW9uKGl0ZW0pIHsKKyAgICBpZiAoc2hvdWxkTWF0
Y2hQcmltaXRpdmVzICYmICFpc09iamVjdChpdGVtKSkgeworICAgICAgcmV0dXJuIGRlZXBDb21w
YXJlKGl0ZW0sIGV4cHJlc3Npb24uJCwgY29tcGFyYXRvciwgZmFsc2UpOworICAgIH0KKyAgICBy
ZXR1cm4gZGVlcENvbXBhcmUoaXRlbSwgZXhwcmVzc2lvbiwgY29tcGFyYXRvciwgbWF0Y2hBZ2Fp
bnN0QW55UHJvcCk7CisgIH07CisKKyAgcmV0dXJuIHByZWRpY2F0ZUZuOworfQorCitmdW5jdGlv
biBkZWVwQ29tcGFyZShhY3R1YWwsIGV4cGVjdGVkLCBjb21wYXJhdG9yLCBtYXRjaEFnYWluc3RB
bnlQcm9wLCBkb250TWF0Y2hXaG9sZU9iamVjdCkgeworICB2YXIgYWN0dWFsVHlwZSA9IGdldFR5
cGVGb3JGaWx0ZXIoYWN0dWFsKTsKKyAgdmFyIGV4cGVjdGVkVHlwZSA9IGdldFR5cGVGb3JGaWx0
ZXIoZXhwZWN0ZWQpOworCisgIGlmICgoZXhwZWN0ZWRUeXBlID09PSAnc3RyaW5nJykgJiYgKGV4
cGVjdGVkLmNoYXJBdCgwKSA9PT0gJyEnKSkgeworICAgIHJldHVybiAhZGVlcENvbXBhcmUoYWN0
dWFsLCBleHBlY3RlZC5zdWJzdHJpbmcoMSksIGNvbXBhcmF0b3IsIG1hdGNoQWdhaW5zdEFueVBy
b3ApOworICB9IGVsc2UgaWYgKGlzQXJyYXkoYWN0dWFsKSkgeworICAgIC8vIEluIGNhc2UgYGFj
dHVhbGAgaXMgYW4gYXJyYXksIGNvbnNpZGVyIGl0IGEgbWF0Y2gKKyAgICAvLyBpZiBBTlkgb2Yg
aXQncyBpdGVtcyBtYXRjaGVzIGBleHBlY3RlZGAKKyAgICByZXR1cm4gYWN0dWFsLnNvbWUoZnVu
Y3Rpb24oaXRlbSkgeworICAgICAgcmV0dXJuIGRlZXBDb21wYXJlKGl0ZW0sIGV4cGVjdGVkLCBj
b21wYXJhdG9yLCBtYXRjaEFnYWluc3RBbnlQcm9wKTsKKyAgICB9KTsKKyAgfQorCisgIHN3aXRj
aCAoYWN0dWFsVHlwZSkgeworICAgIGNhc2UgJ29iamVjdCc6CisgICAgICB2YXIga2V5OworICAg
ICAgaWYgKG1hdGNoQWdhaW5zdEFueVByb3ApIHsKKyAgICAgICAgZm9yIChrZXkgaW4gYWN0dWFs
KSB7CisgICAgICAgICAgaWYgKChrZXkuY2hhckF0KDApICE9PSAnJCcpICYmIGRlZXBDb21wYXJl
KGFjdHVhbFtrZXldLCBleHBlY3RlZCwgY29tcGFyYXRvciwgdHJ1ZSkpIHsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZG9u
dE1hdGNoV2hvbGVPYmplY3QgPyBmYWxzZSA6IGRlZXBDb21wYXJlKGFjdHVhbCwgZXhwZWN0ZWQs
IGNvbXBhcmF0b3IsIGZhbHNlKTsKKyAgICAgIH0gZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSAn
b2JqZWN0JykgeworICAgICAgICBmb3IgKGtleSBpbiBleHBlY3RlZCkgeworICAgICAgICAgIHZh
ciBleHBlY3RlZFZhbCA9IGV4cGVjdGVkW2tleV07CisgICAgICAgICAgaWYgKGlzRnVuY3Rpb24o
ZXhwZWN0ZWRWYWwpIHx8IGlzVW5kZWZpbmVkKGV4cGVjdGVkVmFsKSkgeworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgfQorCisgICAgICAgICAgdmFyIG1hdGNoQW55UHJvcGVydHkg
PSBrZXkgPT09ICckJzsKKyAgICAgICAgICB2YXIgYWN0dWFsVmFsID0gbWF0Y2hBbnlQcm9wZXJ0
eSA/IGFjdHVhbCA6IGFjdHVhbFtrZXldOworICAgICAgICAgIGlmICghZGVlcENvbXBhcmUoYWN0
dWFsVmFsLCBleHBlY3RlZFZhbCwgY29tcGFyYXRvciwgbWF0Y2hBbnlQcm9wZXJ0eSwgbWF0Y2hB
bnlQcm9wZXJ0eSkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9IGVsc2UgeworICAgICAgICBy
ZXR1cm4gY29tcGFyYXRvcihhY3R1YWwsIGV4cGVjdGVkKTsKKyAgICAgIH0KKyAgICAgIGJyZWFr
OworICAgIGNhc2UgJ2Z1bmN0aW9uJzoKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0
OgorICAgICAgcmV0dXJuIGNvbXBhcmF0b3IoYWN0dWFsLCBleHBlY3RlZCk7CisgIH0KK30KKwor
Ly8gVXNlZCBmb3IgZWFzaWx5IGRpZmZlcmVudGlhdGluZyBiZXR3ZWVuIGBudWxsYCBhbmQgYWN0
dWFsIGBvYmplY3RgCitmdW5jdGlvbiBnZXRUeXBlRm9yRmlsdGVyKHZhbCkgeworICByZXR1cm4g
KHZhbCA9PT0gbnVsbCkgPyAnbnVsbCcgOiB0eXBlb2YgdmFsOworfQorCisvKioKKyAqIEBuZ2Rv
YyBmaWx0ZXIKKyAqIEBuYW1lIGN1cnJlbmN5CisgKiBAa2luZCBmdW5jdGlvbgorICoKKyAqIEBk
ZXNjcmlwdGlvbgorICogRm9ybWF0cyBhIG51bWJlciBhcyBhIGN1cnJlbmN5IChpZSAkMSwyMzQu
NTYpLiBXaGVuIG5vIGN1cnJlbmN5IHN5bWJvbCBpcyBwcm92aWRlZCwgZGVmYXVsdAorICogc3lt
Ym9sIGZvciBjdXJyZW50IGxvY2FsZSBpcyB1c2VkLgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBh
bW91bnQgSW5wdXQgdG8gZmlsdGVyLgorICogQHBhcmFtIHtzdHJpbmc9fSBzeW1ib2wgQ3VycmVu
Y3kgc3ltYm9sIG9yIGlkZW50aWZpZXIgdG8gYmUgZGlzcGxheWVkLgorICogQHBhcmFtIHtudW1i
ZXI9fSBmcmFjdGlvblNpemUgTnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIHRvIHJvdW5kIHRoZSBh
bW91bnQgdG8sIGRlZmF1bHRzIHRvIGRlZmF1bHQgbWF4IGZyYWN0aW9uIHNpemUgZm9yIGN1cnJl
bnQgbG9jYWxlCisgKiBAcmV0dXJucyB7c3RyaW5nfSBGb3JtYXR0ZWQgbnVtYmVyLgorICoKKyAq
CisgKiBAZXhhbXBsZQorICAgPGV4YW1wbGUgbW9kdWxlPSJjdXJyZW5jeUV4YW1wbGUiPgorICAg
ICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgICA8c2NyaXB0PgorICAgICAgICAgYW5n
dWxhci5tb2R1bGUoJ2N1cnJlbmN5RXhhbXBsZScsIFtdKQorICAgICAgICAgICAuY29udHJvbGxl
cignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkgeworICAg
ICAgICAgICAgICRzY29wZS5hbW91bnQgPSAxMjM0LjU2OworICAgICAgICAgICB9XSk7CisgICAg
ICAgPC9zY3JpcHQ+CisgICAgICAgPGRpdiBuZy1jb250cm9sbGVyPSJFeGFtcGxlQ29udHJvbGxl
ciI+CisgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBuZy1tb2RlbD0iYW1vdW50IiBhcmlh
LWxhYmVsPSJhbW91bnQiPiA8YnI+CisgICAgICAgICBkZWZhdWx0IGN1cnJlbmN5IHN5bWJvbCAo
JCk6IDxzcGFuIGlkPSJjdXJyZW5jeS1kZWZhdWx0Ij57e2Ftb3VudCB8IGN1cnJlbmN5fX08L3Nw
YW4+PGJyPgorICAgICAgICAgY3VzdG9tIGN1cnJlbmN5IGlkZW50aWZpZXIgKFVTRCQpOiA8c3Bh
biBpZD0iY3VycmVuY3ktY3VzdG9tIj57e2Ftb3VudCB8IGN1cnJlbmN5OiJVU0QkIn19PC9zcGFu
PgorICAgICAgICAgbm8gZnJhY3Rpb25zICgwKTogPHNwYW4gaWQ9ImN1cnJlbmN5LW5vLWZyYWN0
aW9ucyI+e3thbW91bnQgfCBjdXJyZW5jeToiVVNEJCI6MH19PC9zcGFuPgorICAgICAgIDwvZGl2
PgorICAgICA8L2ZpbGU+CisgICAgIDxmaWxlIG5hbWU9InByb3RyYWN0b3IuanMiIHR5cGU9InBy
b3RyYWN0b3IiPgorICAgICAgIGl0KCdzaG91bGQgaW5pdCB3aXRoIDEyMzQuNTYnLCBmdW5jdGlv
bigpIHsKKyAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmlkKCdjdXJyZW5jeS1kZWZhdWx0Jykp
LmdldFRleHQoKSkudG9CZSgnJDEsMjM0LjU2Jyk7CisgICAgICAgICBleHBlY3QoZWxlbWVudChi
eS5pZCgnY3VycmVuY3ktY3VzdG9tJykpLmdldFRleHQoKSkudG9CZSgnVVNEJDEsMjM0LjU2Jyk7
CisgICAgICAgICBleHBlY3QoZWxlbWVudChieS5pZCgnY3VycmVuY3ktbm8tZnJhY3Rpb25zJykp
LmdldFRleHQoKSkudG9CZSgnVVNEJDEsMjM1Jyk7CisgICAgICAgfSk7CisgICAgICAgaXQoJ3No
b3VsZCB1cGRhdGUnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgIGlmIChicm93c2VyLnBhcmFtcy5i
cm93c2VyID09ICdzYWZhcmknKSB7CisgICAgICAgICAgIC8vIFNhZmFyaSBkb2VzIG5vdCB1bmRl
cnN0YW5kIHRoZSBtaW51cyBrZXkuIFNlZQorICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5j
b20vYW5ndWxhci9wcm90cmFjdG9yL2lzc3Vlcy80ODEKKyAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgfQorICAgICAgICAgZWxlbWVudChieS5tb2RlbCgnYW1vdW50JykpLmNsZWFyKCk7Cisg
ICAgICAgICBlbGVtZW50KGJ5Lm1vZGVsKCdhbW91bnQnKSkuc2VuZEtleXMoJy0xMjM0Jyk7Cisg
ICAgICAgICBleHBlY3QoZWxlbWVudChieS5pZCgnY3VycmVuY3ktZGVmYXVsdCcpKS5nZXRUZXh0
KCkpLnRvQmUoJygkMSwyMzQuMDApJyk7CisgICAgICAgICBleHBlY3QoZWxlbWVudChieS5pZCgn
Y3VycmVuY3ktY3VzdG9tJykpLmdldFRleHQoKSkudG9CZSgnKFVTRCQxLDIzNC4wMCknKTsKKyAg
ICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmlkKCdjdXJyZW5jeS1uby1mcmFjdGlvbnMnKSkuZ2V0
VGV4dCgpKS50b0JlKCcoVVNEJDEsMjM0KScpOworICAgICAgIH0pOworICAgICA8L2ZpbGU+Cisg
ICA8L2V4YW1wbGU+CisgKi8KK2N1cnJlbmN5RmlsdGVyLiRpbmplY3QgPSBbJyRsb2NhbGUnXTsK
K2Z1bmN0aW9uIGN1cnJlbmN5RmlsdGVyKCRsb2NhbGUpIHsKKyAgdmFyIGZvcm1hdHMgPSAkbG9j
YWxlLk5VTUJFUl9GT1JNQVRTOworICByZXR1cm4gZnVuY3Rpb24oYW1vdW50LCBjdXJyZW5jeVN5
bWJvbCwgZnJhY3Rpb25TaXplKSB7CisgICAgaWYgKGlzVW5kZWZpbmVkKGN1cnJlbmN5U3ltYm9s
KSkgeworICAgICAgY3VycmVuY3lTeW1ib2wgPSBmb3JtYXRzLkNVUlJFTkNZX1NZTTsKKyAgICB9
CisKKyAgICBpZiAoaXNVbmRlZmluZWQoZnJhY3Rpb25TaXplKSkgeworICAgICAgZnJhY3Rpb25T
aXplID0gZm9ybWF0cy5QQVRURVJOU1sxXS5tYXhGcmFjOworICAgIH0KKworICAgIC8vIGlmIG51
bGwgb3IgdW5kZWZpbmVkIHBhc3MgaXQgdGhyb3VnaAorICAgIHJldHVybiAoYW1vdW50ID09IG51
bGwpCisgICAgICAgID8gYW1vdW50CisgICAgICAgIDogZm9ybWF0TnVtYmVyKGFtb3VudCwgZm9y
bWF0cy5QQVRURVJOU1sxXSwgZm9ybWF0cy5HUk9VUF9TRVAsIGZvcm1hdHMuREVDSU1BTF9TRVAs
IGZyYWN0aW9uU2l6ZSkuCisgICAgICAgICAgICByZXBsYWNlKC9cdTAwQTQvZywgY3VycmVuY3lT
eW1ib2wpOworICB9OworfQorCisvKioKKyAqIEBuZ2RvYyBmaWx0ZXIKKyAqIEBuYW1lIG51bWJl
cgorICogQGtpbmQgZnVuY3Rpb24KKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIEZvcm1hdHMgYSBu
dW1iZXIgYXMgdGV4dC4KKyAqCisgKiBJZiB0aGUgaW5wdXQgaXMgbnVsbCBvciB1bmRlZmluZWQs
IGl0IHdpbGwganVzdCBiZSByZXR1cm5lZC4KKyAqIElmIHRoZSBpbnB1dCBpcyBpbmZpbml0ZSAo
SW5maW5pdHkvLUluZmluaXR5KSB0aGUgSW5maW5pdHkgc3ltYm9sICfiiJ4nIGlzIHJldHVybmVk
LgorICogSWYgdGhlIGlucHV0IGlzIG5vdCBhIG51bWJlciBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0
dXJuZWQuCisgKgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gbnVtYmVyIE51bWJlciB0
byBmb3JtYXQuCisgKiBAcGFyYW0geyhudW1iZXJ8c3RyaW5nKT19IGZyYWN0aW9uU2l6ZSBOdW1i
ZXIgb2YgZGVjaW1hbCBwbGFjZXMgdG8gcm91bmQgdGhlIG51bWJlciB0by4KKyAqIElmIHRoaXMg
aXMgbm90IHByb3ZpZGVkIHRoZW4gdGhlIGZyYWN0aW9uIHNpemUgaXMgY29tcHV0ZWQgZnJvbSB0
aGUgY3VycmVudCBsb2NhbGUncyBudW1iZXIKKyAqIGZvcm1hdHRpbmcgcGF0dGVybi4gSW4gdGhl
IGNhc2Ugb2YgdGhlIGRlZmF1bHQgbG9jYWxlLCBpdCB3aWxsIGJlIDMuCisgKiBAcmV0dXJucyB7
c3RyaW5nfSBOdW1iZXIgcm91bmRlZCB0byBkZWNpbWFsUGxhY2VzIGFuZCBwbGFjZXMgYSDigJws
4oCdIGFmdGVyIGVhY2ggdGhpcmQgZGlnaXQuCisgKgorICogQGV4YW1wbGUKKyAgIDxleGFtcGxl
IG1vZHVsZT0ibnVtYmVyRmlsdGVyRXhhbXBsZSI+CisgICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0
bWwiPgorICAgICAgIDxzY3JpcHQ+CisgICAgICAgICBhbmd1bGFyLm1vZHVsZSgnbnVtYmVyRmls
dGVyRXhhbXBsZScsIFtdKQorICAgICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xs
ZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkgeworICAgICAgICAgICAgICRzY29wZS52
YWwgPSAxMjM0LjU2Nzg5OworICAgICAgICAgICB9XSk7CisgICAgICAgPC9zY3JpcHQ+CisgICAg
ICAgPGRpdiBuZy1jb250cm9sbGVyPSJFeGFtcGxlQ29udHJvbGxlciI+CisgICAgICAgICA8bGFi
ZWw+RW50ZXIgbnVtYmVyOiA8aW5wdXQgbmctbW9kZWw9J3ZhbCc+PC9sYWJlbD48YnI+CisgICAg
ICAgICBEZWZhdWx0IGZvcm1hdHRpbmc6IDxzcGFuIGlkPSdudW1iZXItZGVmYXVsdCc+e3t2YWwg
fCBudW1iZXJ9fTwvc3Bhbj48YnI+CisgICAgICAgICBObyBmcmFjdGlvbnM6IDxzcGFuPnt7dmFs
IHwgbnVtYmVyOjB9fTwvc3Bhbj48YnI+CisgICAgICAgICBOZWdhdGl2ZSBudW1iZXI6IDxzcGFu
Pnt7LXZhbCB8IG51bWJlcjo0fX08L3NwYW4+CisgICAgICAgPC9kaXY+CisgICAgIDwvZmlsZT4K
KyAgICAgPGZpbGUgbmFtZT0icHJvdHJhY3Rvci5qcyIgdHlwZT0icHJvdHJhY3RvciI+CisgICAg
ICAgaXQoJ3Nob3VsZCBmb3JtYXQgbnVtYmVycycsIGZ1bmN0aW9uKCkgeworICAgICAgICAgZXhw
ZWN0KGVsZW1lbnQoYnkuaWQoJ251bWJlci1kZWZhdWx0JykpLmdldFRleHQoKSkudG9CZSgnMSwy
MzQuNTY4Jyk7CisgICAgICAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKCd2YWwgfCBudW1i
ZXI6MCcpKS5nZXRUZXh0KCkpLnRvQmUoJzEsMjM1Jyk7CisgICAgICAgICBleHBlY3QoZWxlbWVu
dChieS5iaW5kaW5nKCctdmFsIHwgbnVtYmVyOjQnKSkuZ2V0VGV4dCgpKS50b0JlKCctMSwyMzQu
NTY3OScpOworICAgICAgIH0pOworCisgICAgICAgaXQoJ3Nob3VsZCB1cGRhdGUnLCBmdW5jdGlv
bigpIHsKKyAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ3ZhbCcpKS5jbGVhcigpOworICAgICAg
ICAgZWxlbWVudChieS5tb2RlbCgndmFsJykpLnNlbmRLZXlzKCczMzc0LjMzMycpOworICAgICAg
ICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ251bWJlci1kZWZhdWx0JykpLmdldFRleHQoKSkudG9C
ZSgnMywzNzQuMzMzJyk7CisgICAgICAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKCd2YWwg
fCBudW1iZXI6MCcpKS5nZXRUZXh0KCkpLnRvQmUoJzMsMzc0Jyk7CisgICAgICAgICBleHBlY3Qo
ZWxlbWVudChieS5iaW5kaW5nKCctdmFsIHwgbnVtYmVyOjQnKSkuZ2V0VGV4dCgpKS50b0JlKCct
MywzNzQuMzMzMCcpOworICAgICAgfSk7CisgICAgIDwvZmlsZT4KKyAgIDwvZXhhbXBsZT4KKyAq
LworCisKK251bWJlckZpbHRlci4kaW5qZWN0ID0gWyckbG9jYWxlJ107CitmdW5jdGlvbiBudW1i
ZXJGaWx0ZXIoJGxvY2FsZSkgeworICB2YXIgZm9ybWF0cyA9ICRsb2NhbGUuTlVNQkVSX0ZPUk1B
VFM7CisgIHJldHVybiBmdW5jdGlvbihudW1iZXIsIGZyYWN0aW9uU2l6ZSkgeworCisgICAgLy8g
aWYgbnVsbCBvciB1bmRlZmluZWQgcGFzcyBpdCB0aHJvdWdoCisgICAgcmV0dXJuIChudW1iZXIg
PT0gbnVsbCkKKyAgICAgICAgPyBudW1iZXIKKyAgICAgICAgOiBmb3JtYXROdW1iZXIobnVtYmVy
LCBmb3JtYXRzLlBBVFRFUk5TWzBdLCBmb3JtYXRzLkdST1VQX1NFUCwgZm9ybWF0cy5ERUNJTUFM
X1NFUCwKKyAgICAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb25TaXplKTsKKyAgfTsKK30KKwor
dmFyIERFQ0lNQUxfU0VQID0gJy4nOworZnVuY3Rpb24gZm9ybWF0TnVtYmVyKG51bWJlciwgcGF0
dGVybiwgZ3JvdXBTZXAsIGRlY2ltYWxTZXAsIGZyYWN0aW9uU2l6ZSkgeworICBpZiAoaXNPYmpl
Y3QobnVtYmVyKSkgcmV0dXJuICcnOworCisgIHZhciBpc05lZ2F0aXZlID0gbnVtYmVyIDwgMDsK
KyAgbnVtYmVyID0gTWF0aC5hYnMobnVtYmVyKTsKKworICB2YXIgaXNJbmZpbml0eSA9IG51bWJl
ciA9PT0gSW5maW5pdHk7CisgIGlmICghaXNJbmZpbml0eSAmJiAhaXNGaW5pdGUobnVtYmVyKSkg
cmV0dXJuICcnOworCisgIHZhciBudW1TdHIgPSBudW1iZXIgKyAnJywKKyAgICAgIGZvcm1hdGVk
VGV4dCA9ICcnLAorICAgICAgaGFzRXhwb25lbnQgPSBmYWxzZSwKKyAgICAgIHBhcnRzID0gW107
CisKKyAgaWYgKGlzSW5maW5pdHkpIGZvcm1hdGVkVGV4dCA9ICdcdTIyMWUnOworCisgIGlmICgh
aXNJbmZpbml0eSAmJiBudW1TdHIuaW5kZXhPZignZScpICE9PSAtMSkgeworICAgIHZhciBtYXRj
aCA9IG51bVN0ci5tYXRjaCgvKFtcZFwuXSspZSgtPykoXGQrKS8pOworICAgIGlmIChtYXRjaCAm
JiBtYXRjaFsyXSA9PSAnLScgJiYgbWF0Y2hbM10gPiBmcmFjdGlvblNpemUgKyAxKSB7CisgICAg
ICBudW1iZXIgPSAwOworICAgIH0gZWxzZSB7CisgICAgICBmb3JtYXRlZFRleHQgPSBudW1TdHI7
CisgICAgICBoYXNFeHBvbmVudCA9IHRydWU7CisgICAgfQorICB9CisKKyAgaWYgKCFpc0luZmlu
aXR5ICYmICFoYXNFeHBvbmVudCkgeworICAgIHZhciBmcmFjdGlvbkxlbiA9IChudW1TdHIuc3Bs
aXQoREVDSU1BTF9TRVApWzFdIHx8ICcnKS5sZW5ndGg7CisKKyAgICAvLyBkZXRlcm1pbmUgZnJh
Y3Rpb25TaXplIGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQKKyAgICBpZiAoaXNVbmRlZmluZWQoZnJh
Y3Rpb25TaXplKSkgeworICAgICAgZnJhY3Rpb25TaXplID0gTWF0aC5taW4oTWF0aC5tYXgocGF0
dGVybi5taW5GcmFjLCBmcmFjdGlvbkxlbiksIHBhdHRlcm4ubWF4RnJhYyk7CisgICAgfQorCisg
ICAgLy8gc2FmZWx5IHJvdW5kIG51bWJlcnMgaW4gSlMgd2l0aG91dCBoaXR0aW5nIGltcHJlY2lz
aW9ucyBvZiBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljcworICAgIC8vIGluc3BpcmVkIGJ5Ogor
ICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFT
Y3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvcm91bmQKKyAgICBudW1iZXIgPSAr
KE1hdGgucm91bmQoKyhudW1iZXIudG9TdHJpbmcoKSArICdlJyArIGZyYWN0aW9uU2l6ZSkpLnRv
U3RyaW5nKCkgKyAnZScgKyAtZnJhY3Rpb25TaXplKTsKKworICAgIHZhciBmcmFjdGlvbiA9ICgn
JyArIG51bWJlcikuc3BsaXQoREVDSU1BTF9TRVApOworICAgIHZhciB3aG9sZSA9IGZyYWN0aW9u
WzBdOworICAgIGZyYWN0aW9uID0gZnJhY3Rpb25bMV0gfHwgJyc7CisKKyAgICB2YXIgaSwgcG9z
ID0gMCwKKyAgICAgICAgbGdyb3VwID0gcGF0dGVybi5sZ1NpemUsCisgICAgICAgIGdyb3VwID0g
cGF0dGVybi5nU2l6ZTsKKworICAgIGlmICh3aG9sZS5sZW5ndGggPj0gKGxncm91cCArIGdyb3Vw
KSkgeworICAgICAgcG9zID0gd2hvbGUubGVuZ3RoIC0gbGdyb3VwOworICAgICAgZm9yIChpID0g
MDsgaSA8IHBvczsgaSsrKSB7CisgICAgICAgIGlmICgocG9zIC0gaSkgJSBncm91cCA9PT0gMCAm
JiBpICE9PSAwKSB7CisgICAgICAgICAgZm9ybWF0ZWRUZXh0ICs9IGdyb3VwU2VwOworICAgICAg
ICB9CisgICAgICAgIGZvcm1hdGVkVGV4dCArPSB3aG9sZS5jaGFyQXQoaSk7CisgICAgICB9Cisg
ICAgfQorCisgICAgZm9yIChpID0gcG9zOyBpIDwgd2hvbGUubGVuZ3RoOyBpKyspIHsKKyAgICAg
IGlmICgod2hvbGUubGVuZ3RoIC0gaSkgJSBsZ3JvdXAgPT09IDAgJiYgaSAhPT0gMCkgeworICAg
ICAgICBmb3JtYXRlZFRleHQgKz0gZ3JvdXBTZXA7CisgICAgICB9CisgICAgICBmb3JtYXRlZFRl
eHQgKz0gd2hvbGUuY2hhckF0KGkpOworICAgIH0KKworICAgIC8vIGZvcm1hdCBmcmFjdGlvbiBw
YXJ0LgorICAgIHdoaWxlIChmcmFjdGlvbi5sZW5ndGggPCBmcmFjdGlvblNpemUpIHsKKyAgICAg
IGZyYWN0aW9uICs9ICcwJzsKKyAgICB9CisKKyAgICBpZiAoZnJhY3Rpb25TaXplICYmIGZyYWN0
aW9uU2l6ZSAhPT0gIjAiKSBmb3JtYXRlZFRleHQgKz0gZGVjaW1hbFNlcCArIGZyYWN0aW9uLnN1
YnN0cigwLCBmcmFjdGlvblNpemUpOworICB9IGVsc2UgeworICAgIGlmIChmcmFjdGlvblNpemUg
PiAwICYmIG51bWJlciA8IDEpIHsKKyAgICAgIGZvcm1hdGVkVGV4dCA9IG51bWJlci50b0ZpeGVk
KGZyYWN0aW9uU2l6ZSk7CisgICAgICBudW1iZXIgPSBwYXJzZUZsb2F0KGZvcm1hdGVkVGV4dCk7
CisgICAgfQorICB9CisKKyAgaWYgKG51bWJlciA9PT0gMCkgeworICAgIGlzTmVnYXRpdmUgPSBm
YWxzZTsKKyAgfQorCisgIHBhcnRzLnB1c2goaXNOZWdhdGl2ZSA/IHBhdHRlcm4ubmVnUHJlIDog
cGF0dGVybi5wb3NQcmUsCisgICAgICAgICAgICAgZm9ybWF0ZWRUZXh0LAorICAgICAgICAgICAg
IGlzTmVnYXRpdmUgPyBwYXR0ZXJuLm5lZ1N1ZiA6IHBhdHRlcm4ucG9zU3VmKTsKKyAgcmV0dXJu
IHBhcnRzLmpvaW4oJycpOworfQorCitmdW5jdGlvbiBwYWROdW1iZXIobnVtLCBkaWdpdHMsIHRy
aW0pIHsKKyAgdmFyIG5lZyA9ICcnOworICBpZiAobnVtIDwgMCkgeworICAgIG5lZyA9ICAnLSc7
CisgICAgbnVtID0gLW51bTsKKyAgfQorICBudW0gPSAnJyArIG51bTsKKyAgd2hpbGUgKG51bS5s
ZW5ndGggPCBkaWdpdHMpIG51bSA9ICcwJyArIG51bTsKKyAgaWYgKHRyaW0pIHsKKyAgICBudW0g
PSBudW0uc3Vic3RyKG51bS5sZW5ndGggLSBkaWdpdHMpOworICB9CisgIHJldHVybiBuZWcgKyBu
dW07Cit9CisKKworZnVuY3Rpb24gZGF0ZUdldHRlcihuYW1lLCBzaXplLCBvZmZzZXQsIHRyaW0p
IHsKKyAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7CisgIHJldHVybiBmdW5jdGlvbihkYXRlKSB7Cisg
ICAgdmFyIHZhbHVlID0gZGF0ZVsnZ2V0JyArIG5hbWVdKCk7CisgICAgaWYgKG9mZnNldCA+IDAg
fHwgdmFsdWUgPiAtb2Zmc2V0KSB7CisgICAgICB2YWx1ZSArPSBvZmZzZXQ7CisgICAgfQorICAg
IGlmICh2YWx1ZSA9PT0gMCAmJiBvZmZzZXQgPT0gLTEyKSB2YWx1ZSA9IDEyOworICAgIHJldHVy
biBwYWROdW1iZXIodmFsdWUsIHNpemUsIHRyaW0pOworICB9OworfQorCitmdW5jdGlvbiBkYXRl
U3RyR2V0dGVyKG5hbWUsIHNob3J0Rm9ybSkgeworICByZXR1cm4gZnVuY3Rpb24oZGF0ZSwgZm9y
bWF0cykgeworICAgIHZhciB2YWx1ZSA9IGRhdGVbJ2dldCcgKyBuYW1lXSgpOworICAgIHZhciBn
ZXQgPSB1cHBlcmNhc2Uoc2hvcnRGb3JtID8gKCdTSE9SVCcgKyBuYW1lKSA6IG5hbWUpOworCisg
ICAgcmV0dXJuIGZvcm1hdHNbZ2V0XVt2YWx1ZV07CisgIH07Cit9CisKK2Z1bmN0aW9uIHRpbWVa
b25lR2V0dGVyKGRhdGUsIGZvcm1hdHMsIG9mZnNldCkgeworICB2YXIgem9uZSA9IC0xICogb2Zm
c2V0OworICB2YXIgcGFkZGVkWm9uZSA9ICh6b25lID49IDApID8gIisiIDogIiI7CisKKyAgcGFk
ZGVkWm9uZSArPSBwYWROdW1iZXIoTWF0aFt6b25lID4gMCA/ICdmbG9vcicgOiAnY2VpbCddKHpv
bmUgLyA2MCksIDIpICsKKyAgICAgICAgICAgICAgICBwYWROdW1iZXIoTWF0aC5hYnMoem9uZSAl
IDYwKSwgMik7CisKKyAgcmV0dXJuIHBhZGRlZFpvbmU7Cit9CisKK2Z1bmN0aW9uIGdldEZpcnN0
VGh1cnNkYXlPZlllYXIoeWVhcikgeworICAgIC8vIDAgPSBpbmRleCBvZiBKYW51YXJ5CisgICAg
dmFyIGRheU9mV2Vla09uRmlyc3QgPSAobmV3IERhdGUoeWVhciwgMCwgMSkpLmdldERheSgpOwor
ICAgIC8vIDQgPSBpbmRleCBvZiBUaHVyc2RheSAoKzEgdG8gYWNjb3VudCBmb3IgMXN0ID0gNSkK
KyAgICAvLyAxMSA9IGluZGV4IG9mICpuZXh0KiBUaHVyc2RheSAoKzEgYWNjb3VudCBmb3IgMXN0
ID0gMTIpCisgICAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIDAsICgoZGF5T2ZXZWVrT25GaXJzdCA8
PSA0KSA/IDUgOiAxMikgLSBkYXlPZldlZWtPbkZpcnN0KTsKK30KKworZnVuY3Rpb24gZ2V0VGh1
cnNkYXlUaGlzV2VlayhkYXRldGltZSkgeworICAgIHJldHVybiBuZXcgRGF0ZShkYXRldGltZS5n
ZXRGdWxsWWVhcigpLCBkYXRldGltZS5nZXRNb250aCgpLAorICAgICAgLy8gNCA9IGluZGV4IG9m
IFRodXJzZGF5CisgICAgICBkYXRldGltZS5nZXREYXRlKCkgKyAoNCAtIGRhdGV0aW1lLmdldERh
eSgpKSk7Cit9CisKK2Z1bmN0aW9uIHdlZWtHZXR0ZXIoc2l6ZSkgeworICAgcmV0dXJuIGZ1bmN0
aW9uKGRhdGUpIHsKKyAgICAgIHZhciBmaXJzdFRodXJzID0gZ2V0Rmlyc3RUaHVyc2RheU9mWWVh
cihkYXRlLmdldEZ1bGxZZWFyKCkpLAorICAgICAgICAgdGhpc1RodXJzID0gZ2V0VGh1cnNkYXlU
aGlzV2VlayhkYXRlKTsKKworICAgICAgdmFyIGRpZmYgPSArdGhpc1RodXJzIC0gK2ZpcnN0VGh1
cnMsCisgICAgICAgICByZXN1bHQgPSAxICsgTWF0aC5yb3VuZChkaWZmIC8gNi4wNDhlOCk7IC8v
IDYuMDQ4ZTggbXMgcGVyIHdlZWsKKworICAgICAgcmV0dXJuIHBhZE51bWJlcihyZXN1bHQsIHNp
emUpOworICAgfTsKK30KKworZnVuY3Rpb24gYW1wbUdldHRlcihkYXRlLCBmb3JtYXRzKSB7Cisg
IHJldHVybiBkYXRlLmdldEhvdXJzKCkgPCAxMiA/IGZvcm1hdHMuQU1QTVNbMF0gOiBmb3JtYXRz
LkFNUE1TWzFdOworfQorCitmdW5jdGlvbiBlcmFHZXR0ZXIoZGF0ZSwgZm9ybWF0cykgeworICBy
ZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpIDw9IDAgPyBmb3JtYXRzLkVSQVNbMF0gOiBmb3JtYXRz
LkVSQVNbMV07Cit9CisKK2Z1bmN0aW9uIGxvbmdFcmFHZXR0ZXIoZGF0ZSwgZm9ybWF0cykgewor
ICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpIDw9IDAgPyBmb3JtYXRzLkVSQU5BTUVTWzBdIDog
Zm9ybWF0cy5FUkFOQU1FU1sxXTsKK30KKwordmFyIERBVEVfRk9STUFUUyA9IHsKKyAgeXl5eTog
ZGF0ZUdldHRlcignRnVsbFllYXInLCA0KSwKKyAgICB5eTogZGF0ZUdldHRlcignRnVsbFllYXIn
LCAyLCAwLCB0cnVlKSwKKyAgICAgeTogZGF0ZUdldHRlcignRnVsbFllYXInLCAxKSwKKyAgTU1N
TTogZGF0ZVN0ckdldHRlcignTW9udGgnKSwKKyAgIE1NTTogZGF0ZVN0ckdldHRlcignTW9udGgn
LCB0cnVlKSwKKyAgICBNTTogZGF0ZUdldHRlcignTW9udGgnLCAyLCAxKSwKKyAgICAgTTogZGF0
ZUdldHRlcignTW9udGgnLCAxLCAxKSwKKyAgICBkZDogZGF0ZUdldHRlcignRGF0ZScsIDIpLAor
ICAgICBkOiBkYXRlR2V0dGVyKCdEYXRlJywgMSksCisgICAgSEg6IGRhdGVHZXR0ZXIoJ0hvdXJz
JywgMiksCisgICAgIEg6IGRhdGVHZXR0ZXIoJ0hvdXJzJywgMSksCisgICAgaGg6IGRhdGVHZXR0
ZXIoJ0hvdXJzJywgMiwgLTEyKSwKKyAgICAgaDogZGF0ZUdldHRlcignSG91cnMnLCAxLCAtMTIp
LAorICAgIG1tOiBkYXRlR2V0dGVyKCdNaW51dGVzJywgMiksCisgICAgIG06IGRhdGVHZXR0ZXIo
J01pbnV0ZXMnLCAxKSwKKyAgICBzczogZGF0ZUdldHRlcignU2Vjb25kcycsIDIpLAorICAgICBz
OiBkYXRlR2V0dGVyKCdTZWNvbmRzJywgMSksCisgICAgIC8vIHdoaWxlIElTTyA4NjAxIHJlcXVp
cmVzIGZyYWN0aW9ucyB0byBiZSBwcmVmaXhlZCB3aXRoIGAuYCBvciBgLGAKKyAgICAgLy8gd2Ug
Y2FuIGJlIGp1c3Qgc2FmZWx5IHJlbHkgb24gdXNpbmcgYHNzc2Agc2luY2Ugd2UgY3VycmVudGx5
IGRvbid0IHN1cHBvcnQgc2luZ2xlIG9yIHR3byBkaWdpdCBmcmFjdGlvbnMKKyAgIHNzczogZGF0
ZUdldHRlcignTWlsbGlzZWNvbmRzJywgMyksCisgIEVFRUU6IGRhdGVTdHJHZXR0ZXIoJ0RheScp
LAorICAgRUVFOiBkYXRlU3RyR2V0dGVyKCdEYXknLCB0cnVlKSwKKyAgICAgYTogYW1wbUdldHRl
ciwKKyAgICAgWjogdGltZVpvbmVHZXR0ZXIsCisgICAgd3c6IHdlZWtHZXR0ZXIoMiksCisgICAg
IHc6IHdlZWtHZXR0ZXIoMSksCisgICAgIEc6IGVyYUdldHRlciwKKyAgICAgR0c6IGVyYUdldHRl
ciwKKyAgICAgR0dHOiBlcmFHZXR0ZXIsCisgICAgIEdHR0c6IGxvbmdFcmFHZXR0ZXIKK307CisK
K3ZhciBEQVRFX0ZPUk1BVFNfU1BMSVQgPSAvKCg/OlteeU1kSGhtc2FaRXdHJ10rKXwoPzonKD86
W14nXXwnJykqJyl8KD86RSt8eSt8TSt8ZCt8SCt8aCt8bSt8cyt8YXxafEcrfHcrKSkoLiopLywK
KyAgICBOVU1CRVJfU1RSSU5HID0gL15cLT9cZCskLzsKKworLyoqCisgKiBAbmdkb2MgZmlsdGVy
CisgKiBAbmFtZSBkYXRlCisgKiBAa2luZCBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlvbgor
ICogICBGb3JtYXRzIGBkYXRlYCB0byBhIHN0cmluZyBiYXNlZCBvbiB0aGUgcmVxdWVzdGVkIGBm
b3JtYXRgLgorICoKKyAqICAgYGZvcm1hdGAgc3RyaW5nIGNhbiBiZSBjb21wb3NlZCBvZiB0aGUg
Zm9sbG93aW5nIGVsZW1lbnRzOgorICoKKyAqICAgKiBgJ3l5eXknYDogNCBkaWdpdCByZXByZXNl
bnRhdGlvbiBvZiB5ZWFyIChlLmcuIEFEIDEgPT4gMDAwMSwgQUQgMjAxMCA9PiAyMDEwKQorICog
ICAqIGAneXknYDogMiBkaWdpdCByZXByZXNlbnRhdGlvbiBvZiB5ZWFyLCBwYWRkZWQgKDAwLTk5
KS4gKGUuZy4gQUQgMjAwMSA9PiAwMSwgQUQgMjAxMCA9PiAxMCkKKyAqICAgKiBgJ3knYDogMSBk
aWdpdCByZXByZXNlbnRhdGlvbiBvZiB5ZWFyLCBlLmcuIChBRCAxID0+IDEsIEFEIDE5OSA9PiAx
OTkpCisgKiAgICogYCdNTU1NJ2A6IE1vbnRoIGluIHllYXIgKEphbnVhcnktRGVjZW1iZXIpCisg
KiAgICogYCdNTU0nYDogTW9udGggaW4geWVhciAoSmFuLURlYykKKyAqICAgKiBgJ01NJ2A6IE1v
bnRoIGluIHllYXIsIHBhZGRlZCAoMDEtMTIpCisgKiAgICogYCdNJ2A6IE1vbnRoIGluIHllYXIg
KDEtMTIpCisgKiAgICogYCdkZCdgOiBEYXkgaW4gbW9udGgsIHBhZGRlZCAoMDEtMzEpCisgKiAg
ICogYCdkJ2A6IERheSBpbiBtb250aCAoMS0zMSkKKyAqICAgKiBgJ0VFRUUnYDogRGF5IGluIFdl
ZWssKFN1bmRheS1TYXR1cmRheSkKKyAqICAgKiBgJ0VFRSdgOiBEYXkgaW4gV2VlaywgKFN1bi1T
YXQpCisgKiAgICogYCdISCdgOiBIb3VyIGluIGRheSwgcGFkZGVkICgwMC0yMykKKyAqICAgKiBg
J0gnYDogSG91ciBpbiBkYXkgKDAtMjMpCisgKiAgICogYCdoaCdgOiBIb3VyIGluIEFNL1BNLCBw
YWRkZWQgKDAxLTEyKQorICogICAqIGAnaCdgOiBIb3VyIGluIEFNL1BNLCAoMS0xMikKKyAqICAg
KiBgJ21tJ2A6IE1pbnV0ZSBpbiBob3VyLCBwYWRkZWQgKDAwLTU5KQorICogICAqIGAnbSdgOiBN
aW51dGUgaW4gaG91ciAoMC01OSkKKyAqICAgKiBgJ3NzJ2A6IFNlY29uZCBpbiBtaW51dGUsIHBh
ZGRlZCAoMDAtNTkpCisgKiAgICogYCdzJ2A6IFNlY29uZCBpbiBtaW51dGUgKDAtNTkpCisgKiAg
ICogYCdzc3MnYDogTWlsbGlzZWNvbmQgaW4gc2Vjb25kLCBwYWRkZWQgKDAwMC05OTkpCisgKiAg
ICogYCdhJ2A6IEFNL1BNIG1hcmtlcgorICogICAqIGAnWidgOiA0IGRpZ2l0ICgrc2lnbikgcmVw
cmVzZW50YXRpb24gb2YgdGhlIHRpbWV6b25lIG9mZnNldCAoLTEyMDAtKzEyMDApCisgKiAgICog
YCd3dydgOiBXZWVrIG9mIHllYXIsIHBhZGRlZCAoMDAtNTMpLiBXZWVrIDAxIGlzIHRoZSB3ZWVr
IHdpdGggdGhlIGZpcnN0IFRodXJzZGF5IG9mIHRoZSB5ZWFyCisgKiAgICogYCd3J2A6IFdlZWsg
b2YgeWVhciAoMC01MykuIFdlZWsgMSBpcyB0aGUgd2VlayB3aXRoIHRoZSBmaXJzdCBUaHVyc2Rh
eSBvZiB0aGUgeWVhcgorICogICAqIGAnRydgLCBgJ0dHJ2AsIGAnR0dHJ2A6IFRoZSBhYmJyZXZp
YXRlZCBmb3JtIG9mIHRoZSBlcmEgc3RyaW5nIChlLmcuICdBRCcpCisgKiAgICogYCdHR0dHJ2A6
IFRoZSBsb25nIGZvcm0gb2YgdGhlIGVyYSBzdHJpbmcgKGUuZy4gJ0Fubm8gRG9taW5pJykKKyAq
CisgKiAgIGBmb3JtYXRgIHN0cmluZyBjYW4gYWxzbyBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBw
cmVkZWZpbmVkCisgKiAgIHtAbGluayBndWlkZS9pMThuIGxvY2FsaXphYmxlIGZvcm1hdHN9Ogor
ICoKKyAqICAgKiBgJ21lZGl1bSdgOiBlcXVpdmFsZW50IHRvIGAnTU1NIGQsIHkgaDptbTpzcyBh
J2AgZm9yIGVuX1VTIGxvY2FsZQorICogICAgIChlLmcuIFNlcCAzLCAyMDEwIDEyOjA1OjA4IFBN
KQorICogICAqIGAnc2hvcnQnYDogZXF1aXZhbGVudCB0byBgJ00vZC95eSBoOm1tIGEnYCBmb3Ig
ZW5fVVMgIGxvY2FsZSAoZS5nLiA5LzMvMTAgMTI6MDUgUE0pCisgKiAgICogYCdmdWxsRGF0ZSdg
OiBlcXVpdmFsZW50IHRvIGAnRUVFRSwgTU1NTSBkLCB5J2AgZm9yIGVuX1VTICBsb2NhbGUKKyAq
ICAgICAoZS5nLiBGcmlkYXksIFNlcHRlbWJlciAzLCAyMDEwKQorICogICAqIGAnbG9uZ0RhdGUn
YDogZXF1aXZhbGVudCB0byBgJ01NTU0gZCwgeSdgIGZvciBlbl9VUyAgbG9jYWxlIChlLmcuIFNl
cHRlbWJlciAzLCAyMDEwKQorICogICAqIGAnbWVkaXVtRGF0ZSdgOiBlcXVpdmFsZW50IHRvIGAn
TU1NIGQsIHknYCBmb3IgZW5fVVMgIGxvY2FsZSAoZS5nLiBTZXAgMywgMjAxMCkKKyAqICAgKiBg
J3Nob3J0RGF0ZSdgOiBlcXVpdmFsZW50IHRvIGAnTS9kL3l5J2AgZm9yIGVuX1VTIGxvY2FsZSAo
ZS5nLiA5LzMvMTApCisgKiAgICogYCdtZWRpdW1UaW1lJ2A6IGVxdWl2YWxlbnQgdG8gYCdoOm1t
OnNzIGEnYCBmb3IgZW5fVVMgbG9jYWxlIChlLmcuIDEyOjA1OjA4IFBNKQorICogICAqIGAnc2hv
cnRUaW1lJ2A6IGVxdWl2YWxlbnQgdG8gYCdoOm1tIGEnYCBmb3IgZW5fVVMgbG9jYWxlIChlLmcu
IDEyOjA1IFBNKQorICoKKyAqICAgYGZvcm1hdGAgc3RyaW5nIGNhbiBjb250YWluIGxpdGVyYWwg
dmFsdWVzLiBUaGVzZSBuZWVkIHRvIGJlIGVzY2FwZWQgYnkgc3Vycm91bmRpbmcgd2l0aCBzaW5n
bGUgcXVvdGVzIChlLmcuCisgKiAgIGAiaCAnaW4gdGhlIG1vcm5pbmcnImApLiBJbiBvcmRlciB0
byBvdXRwdXQgYSBzaW5nbGUgcXVvdGUsIGVzY2FwZSBpdCAtIGkuZS4sIHR3byBzaW5nbGUgcXVv
dGVzIGluIGEgc2VxdWVuY2UKKyAqICAgKGUuZy4gYCJoICdvJydjbG9jayciYCkuCisgKgorICog
QHBhcmFtIHsoRGF0ZXxudW1iZXJ8c3RyaW5nKX0gZGF0ZSBEYXRlIHRvIGZvcm1hdCBlaXRoZXIg
YXMgRGF0ZSBvYmplY3QsIG1pbGxpc2Vjb25kcyAoc3RyaW5nIG9yCisgKiAgICBudW1iZXIpIG9y
IHZhcmlvdXMgSVNPIDg2MDEgZGF0ZXRpbWUgc3RyaW5nIGZvcm1hdHMgKGUuZy4geXl5eS1NTS1k
ZFRISDptbTpzcy5zc3NaIGFuZCBpdHMKKyAqICAgIHNob3J0ZXIgdmVyc2lvbnMgbGlrZSB5eXl5
LU1NLWRkVEhIOm1tWiwgeXl5eS1NTS1kZCBvciB5eXl5TU1kZFRISG1tc3NaKS4gSWYgbm8gdGlt
ZXpvbmUgaXMKKyAqICAgIHNwZWNpZmllZCBpbiB0aGUgc3RyaW5nIGlucHV0LCB0aGUgdGltZSBp
cyBjb25zaWRlcmVkIHRvIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZS4KKyAqIEBwYXJhbSB7c3Ry
aW5nPX0gZm9ybWF0IEZvcm1hdHRpbmcgcnVsZXMgKHNlZSBEZXNjcmlwdGlvbikuIElmIG5vdCBz
cGVjaWZpZWQsCisgKiAgICBgbWVkaXVtRGF0ZWAgaXMgdXNlZC4KKyAqIEBwYXJhbSB7c3RyaW5n
PX0gdGltZXpvbmUgVGltZXpvbmUgdG8gYmUgdXNlZCBmb3IgZm9ybWF0dGluZy4gSXQgdW5kZXJz
dGFuZHMgVVRDL0dNVCBhbmQgdGhlCisgKiAgICBjb250aW5lbnRhbCBVUyB0aW1lIHpvbmUgYWJi
cmV2aWF0aW9ucywgYnV0IGZvciBnZW5lcmFsIHVzZSwgdXNlIGEgdGltZSB6b25lIG9mZnNldCwg
Zm9yCisgKiAgICBleGFtcGxlLCBgJyswNDMwJ2AgKDQgaG91cnMsIDMwIG1pbnV0ZXMgZWFzdCBv
ZiB0aGUgR3JlZW53aWNoIG1lcmlkaWFuKQorICogICAgSWYgbm90IHNwZWNpZmllZCwgdGhlIHRp
bWV6b25lIG9mIHRoZSBicm93c2VyIHdpbGwgYmUgdXNlZC4KKyAqIEByZXR1cm5zIHtzdHJpbmd9
IEZvcm1hdHRlZCBzdHJpbmcgb3IgdGhlIGlucHV0IGlmIGlucHV0IGlzIG5vdCByZWNvZ25pemVk
IGFzIGRhdGUvbWlsbGlzLgorICoKKyAqIEBleGFtcGxlCisgICA8ZXhhbXBsZT4KKyAgICAgPGZp
bGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAgICAgPHNwYW4gbmctbm9uLWJpbmRhYmxlPnt7MTI4
ODMyMzYyMzAwNiB8IGRhdGU6J21lZGl1bSd9fTwvc3Bhbj46CisgICAgICAgICAgIDxzcGFuPnt7
MTI4ODMyMzYyMzAwNiB8IGRhdGU6J21lZGl1bSd9fTwvc3Bhbj48YnI+CisgICAgICAgPHNwYW4g
bmctbm9uLWJpbmRhYmxlPnt7MTI4ODMyMzYyMzAwNiB8IGRhdGU6J3l5eXktTU0tZGQgSEg6bW06
c3MgWid9fTwvc3Bhbj46CisgICAgICAgICAgPHNwYW4+e3sxMjg4MzIzNjIzMDA2IHwgZGF0ZTon
eXl5eS1NTS1kZCBISDptbTpzcyBaJ319PC9zcGFuPjxicj4KKyAgICAgICA8c3BhbiBuZy1ub24t
YmluZGFibGU+e3sxMjg4MzIzNjIzMDA2IHwgZGF0ZTonTU0vZGQveXl5eSBAIGg6bW1hJ319PC9z
cGFuPjoKKyAgICAgICAgICA8c3Bhbj57eycxMjg4MzIzNjIzMDA2JyB8IGRhdGU6J01NL2RkL3l5
eXkgQCBoOm1tYSd9fTwvc3Bhbj48YnI+CisgICAgICAgPHNwYW4gbmctbm9uLWJpbmRhYmxlPnt7
MTI4ODMyMzYyMzAwNiB8IGRhdGU6Ik1NL2RkL3l5eXkgJ2F0JyBoOm1tYSJ9fTwvc3Bhbj46Cisg
ICAgICAgICAgPHNwYW4+e3snMTI4ODMyMzYyMzAwNicgfCBkYXRlOiJNTS9kZC95eXl5ICdhdCcg
aDptbWEifX08L3NwYW4+PGJyPgorICAgICA8L2ZpbGU+CisgICAgIDxmaWxlIG5hbWU9InByb3Ry
YWN0b3IuanMiIHR5cGU9InByb3RyYWN0b3IiPgorICAgICAgIGl0KCdzaG91bGQgZm9ybWF0IGRh
dGUnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmJpbmRpbmcoIjEy
ODgzMjM2MjMwMDYgfCBkYXRlOidtZWRpdW0nIikpLmdldFRleHQoKSkuCisgICAgICAgICAgICB0
b01hdGNoKC9PY3QgMlxkLCAyMDEwIFxkezEsMn06XGR7Mn06XGR7Mn0gKEFNfFBNKS8pOworICAg
ICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGluZygiMTI4ODMyMzYyMzAwNiB8IGRhdGU6J3l5
eXktTU0tZGQgSEg6bW06c3MgWiciKSkuZ2V0VGV4dCgpKS4KKyAgICAgICAgICAgIHRvTWF0Y2go
LzIwMTBcLTEwXC0yXGQgXGR7Mn06XGR7Mn06XGR7Mn0gKFwtfFwrKT9cZHs0fS8pOworICAgICAg
ICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGluZygiJzEyODgzMjM2MjMwMDYnIHwgZGF0ZTonTU0v
ZGQveXl5eSBAIGg6bW1hJyIpKS5nZXRUZXh0KCkpLgorICAgICAgICAgICAgdG9NYXRjaCgvMTBc
LzJcZFwvMjAxMCBAIFxkezEsMn06XGR7Mn0oQU18UE0pLyk7CisgICAgICAgICBleHBlY3QoZWxl
bWVudChieS5iaW5kaW5nKCInMTI4ODMyMzYyMzAwNicgfCBkYXRlOlwiTU0vZGQveXl5eSAnYXQn
IGg6bW1hXCIiKSkuZ2V0VGV4dCgpKS4KKyAgICAgICAgICAgIHRvTWF0Y2goLzEwXC8yXGRcLzIw
MTAgYXQgXGR7MSwyfTpcZHsyfShBTXxQTSkvKTsKKyAgICAgICB9KTsKKyAgICAgPC9maWxlPgor
ICAgPC9leGFtcGxlPgorICovCitkYXRlRmlsdGVyLiRpbmplY3QgPSBbJyRsb2NhbGUnXTsKK2Z1
bmN0aW9uIGRhdGVGaWx0ZXIoJGxvY2FsZSkgeworCisKKyAgdmFyIFJfSVNPODYwMV9TVFIgPSAv
XihcZHs0fSktPyhcZFxkKS0/KFxkXGQpKD86VChcZFxkKSg/Ojo/KFxkXGQpKD86Oj8oXGRcZCko
PzpcLihcZCspKT8pPyk/KFp8KFsrLV0pKFxkXGQpOj8oXGRcZCkpPyk/JC87CisgICAgICAgICAg
ICAgICAgICAgICAvLyAxICAgICAgICAyICAgICAgIDMgICAgICAgICA0ICAgICAgICAgIDUgICAg
ICAgICAgNiAgICAgICAgICA3ICAgICAgICAgIDggIDkgICAgIDEwICAgICAgMTEKKyAgZnVuY3Rp
b24ganNvblN0cmluZ1RvRGF0ZShzdHJpbmcpIHsKKyAgICB2YXIgbWF0Y2g7CisgICAgaWYgKG1h
dGNoID0gc3RyaW5nLm1hdGNoKFJfSVNPODYwMV9TVFIpKSB7CisgICAgICB2YXIgZGF0ZSA9IG5l
dyBEYXRlKDApLAorICAgICAgICAgIHR6SG91ciA9IDAsCisgICAgICAgICAgdHpNaW4gID0gMCwK
KyAgICAgICAgICBkYXRlU2V0dGVyID0gbWF0Y2hbOF0gPyBkYXRlLnNldFVUQ0Z1bGxZZWFyIDog
ZGF0ZS5zZXRGdWxsWWVhciwKKyAgICAgICAgICB0aW1lU2V0dGVyID0gbWF0Y2hbOF0gPyBkYXRl
LnNldFVUQ0hvdXJzIDogZGF0ZS5zZXRIb3VyczsKKworICAgICAgaWYgKG1hdGNoWzldKSB7Cisg
ICAgICAgIHR6SG91ciA9IHRvSW50KG1hdGNoWzldICsgbWF0Y2hbMTBdKTsKKyAgICAgICAgdHpN
aW4gPSB0b0ludChtYXRjaFs5XSArIG1hdGNoWzExXSk7CisgICAgICB9CisgICAgICBkYXRlU2V0
dGVyLmNhbGwoZGF0ZSwgdG9JbnQobWF0Y2hbMV0pLCB0b0ludChtYXRjaFsyXSkgLSAxLCB0b0lu
dChtYXRjaFszXSkpOworICAgICAgdmFyIGggPSB0b0ludChtYXRjaFs0XSB8fCAwKSAtIHR6SG91
cjsKKyAgICAgIHZhciBtID0gdG9JbnQobWF0Y2hbNV0gfHwgMCkgLSB0ek1pbjsKKyAgICAgIHZh
ciBzID0gdG9JbnQobWF0Y2hbNl0gfHwgMCk7CisgICAgICB2YXIgbXMgPSBNYXRoLnJvdW5kKHBh
cnNlRmxvYXQoJzAuJyArIChtYXRjaFs3XSB8fCAwKSkgKiAxMDAwKTsKKyAgICAgIHRpbWVTZXR0
ZXIuY2FsbChkYXRlLCBoLCBtLCBzLCBtcyk7CisgICAgICByZXR1cm4gZGF0ZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHN0cmluZzsKKyAgfQorCisKKyAgcmV0dXJuIGZ1bmN0aW9uKGRhdGUsIGZvcm1h
dCwgdGltZXpvbmUpIHsKKyAgICB2YXIgdGV4dCA9ICcnLAorICAgICAgICBwYXJ0cyA9IFtdLAor
ICAgICAgICBmbiwgbWF0Y2g7CisKKyAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJ21lZGl1bURhdGUn
OworICAgIGZvcm1hdCA9ICRsb2NhbGUuREFURVRJTUVfRk9STUFUU1tmb3JtYXRdIHx8IGZvcm1h
dDsKKyAgICBpZiAoaXNTdHJpbmcoZGF0ZSkpIHsKKyAgICAgIGRhdGUgPSBOVU1CRVJfU1RSSU5H
LnRlc3QoZGF0ZSkgPyB0b0ludChkYXRlKSA6IGpzb25TdHJpbmdUb0RhdGUoZGF0ZSk7CisgICAg
fQorCisgICAgaWYgKGlzTnVtYmVyKGRhdGUpKSB7CisgICAgICBkYXRlID0gbmV3IERhdGUoZGF0
ZSk7CisgICAgfQorCisgICAgaWYgKCFpc0RhdGUoZGF0ZSkgfHwgIWlzRmluaXRlKGRhdGUuZ2V0
VGltZSgpKSkgeworICAgICAgcmV0dXJuIGRhdGU7CisgICAgfQorCisgICAgd2hpbGUgKGZvcm1h
dCkgeworICAgICAgbWF0Y2ggPSBEQVRFX0ZPUk1BVFNfU1BMSVQuZXhlYyhmb3JtYXQpOworICAg
ICAgaWYgKG1hdGNoKSB7CisgICAgICAgIHBhcnRzID0gY29uY2F0KHBhcnRzLCBtYXRjaCwgMSk7
CisgICAgICAgIGZvcm1hdCA9IHBhcnRzLnBvcCgpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAg
cGFydHMucHVzaChmb3JtYXQpOworICAgICAgICBmb3JtYXQgPSBudWxsOworICAgICAgfQorICAg
IH0KKworICAgIHZhciBkYXRlVGltZXpvbmVPZmZzZXQgPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0
KCk7CisgICAgaWYgKHRpbWV6b25lKSB7CisgICAgICBkYXRlVGltZXpvbmVPZmZzZXQgPSB0aW1l
em9uZVRvT2Zmc2V0KHRpbWV6b25lLCBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkpOworICAgICAg
ZGF0ZSA9IGNvbnZlcnRUaW1lem9uZVRvTG9jYWwoZGF0ZSwgdGltZXpvbmUsIHRydWUpOworICAg
IH0KKyAgICBmb3JFYWNoKHBhcnRzLCBmdW5jdGlvbih2YWx1ZSkgeworICAgICAgZm4gPSBEQVRF
X0ZPUk1BVFNbdmFsdWVdOworICAgICAgdGV4dCArPSBmbiA/IGZuKGRhdGUsICRsb2NhbGUuREFU
RVRJTUVfRk9STUFUUywgZGF0ZVRpbWV6b25lT2Zmc2V0KQorICAgICAgICAgICAgICAgICA6IHZh
bHVlLnJlcGxhY2UoLyheJ3wnJCkvZywgJycpLnJlcGxhY2UoLycnL2csICInIik7CisgICAgfSk7
CisKKyAgICByZXR1cm4gdGV4dDsKKyAgfTsKK30KKworCisvKioKKyAqIEBuZ2RvYyBmaWx0ZXIK
KyAqIEBuYW1lIGpzb24KKyAqIEBraW5kIGZ1bmN0aW9uCisgKgorICogQGRlc2NyaXB0aW9uCisg
KiAgIEFsbG93cyB5b3UgdG8gY29udmVydCBhIEphdmFTY3JpcHQgb2JqZWN0IGludG8gSlNPTiBz
dHJpbmcuCisgKgorICogICBUaGlzIGZpbHRlciBpcyBtb3N0bHkgdXNlZnVsIGZvciBkZWJ1Z2dp
bmcuIFdoZW4gdXNpbmcgdGhlIGRvdWJsZSBjdXJseSB7e3ZhbHVlfX0gbm90YXRpb24KKyAqICAg
dGhlIGJpbmRpbmcgaXMgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gSlNPTi4KKyAqCisgKiBA
cGFyYW0geyp9IG9iamVjdCBBbnkgSmF2YVNjcmlwdCBvYmplY3QgKGluY2x1ZGluZyBhcnJheXMg
YW5kIHByaW1pdGl2ZSB0eXBlcykgdG8gZmlsdGVyLgorICogQHBhcmFtIHtudW1iZXI9fSBzcGFj
aW5nIFRoZSBudW1iZXIgb2Ygc3BhY2VzIHRvIHVzZSBwZXIgaW5kZW50YXRpb24sIGRlZmF1bHRz
IHRvIDIuCisgKiBAcmV0dXJucyB7c3RyaW5nfSBKU09OIHN0cmluZy4KKyAqCisgKgorICogQGV4
YW1wbGUKKyAgIDxleGFtcGxlPgorICAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAg
ICA8cHJlIGlkPSJkZWZhdWx0LXNwYWNpbmciPnt7IHsnbmFtZSc6J3ZhbHVlJ30gfCBqc29uIH19
PC9wcmU+CisgICAgICAgPHByZSBpZD0iY3VzdG9tLXNwYWNpbmciPnt7IHsnbmFtZSc6J3ZhbHVl
J30gfCBqc29uOjQgfX08L3ByZT4KKyAgICAgPC9maWxlPgorICAgICA8ZmlsZSBuYW1lPSJwcm90
cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFjdG9yIj4KKyAgICAgICBpdCgnc2hvdWxkIGpzb25pZnkg
ZmlsdGVyZWQgb2JqZWN0cycsIGZ1bmN0aW9uKCkgeworICAgICAgICAgZXhwZWN0KGVsZW1lbnQo
YnkuaWQoJ2RlZmF1bHQtc3BhY2luZycpKS5nZXRUZXh0KCkpLnRvTWF0Y2goL1x7XG4gICJuYW1l
IjogPyJ2YWx1ZSJcbn0vKTsKKyAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmlkKCdjdXN0b20t
c3BhY2luZycpKS5nZXRUZXh0KCkpLnRvTWF0Y2goL1x7XG4gICAgIm5hbWUiOiA/InZhbHVlIlxu
fS8pOworICAgICAgIH0pOworICAgICA8L2ZpbGU+CisgICA8L2V4YW1wbGU+CisgKgorICovCitm
dW5jdGlvbiBqc29uRmlsdGVyKCkgeworICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBzcGFjaW5n
KSB7CisgICAgaWYgKGlzVW5kZWZpbmVkKHNwYWNpbmcpKSB7CisgICAgICAgIHNwYWNpbmcgPSAy
OworICAgIH0KKyAgICByZXR1cm4gdG9Kc29uKG9iamVjdCwgc3BhY2luZyk7CisgIH07Cit9CisK
KworLyoqCisgKiBAbmdkb2MgZmlsdGVyCisgKiBAbmFtZSBsb3dlcmNhc2UKKyAqIEBraW5kIGZ1
bmN0aW9uCisgKiBAZGVzY3JpcHRpb24KKyAqIENvbnZlcnRzIHN0cmluZyB0byBsb3dlcmNhc2Uu
CisgKiBAc2VlIGFuZ3VsYXIubG93ZXJjYXNlCisgKi8KK3ZhciBsb3dlcmNhc2VGaWx0ZXIgPSB2
YWx1ZUZuKGxvd2VyY2FzZSk7CisKKworLyoqCisgKiBAbmdkb2MgZmlsdGVyCisgKiBAbmFtZSB1
cHBlcmNhc2UKKyAqIEBraW5kIGZ1bmN0aW9uCisgKiBAZGVzY3JpcHRpb24KKyAqIENvbnZlcnRz
IHN0cmluZyB0byB1cHBlcmNhc2UuCisgKiBAc2VlIGFuZ3VsYXIudXBwZXJjYXNlCisgKi8KK3Zh
ciB1cHBlcmNhc2VGaWx0ZXIgPSB2YWx1ZUZuKHVwcGVyY2FzZSk7CisKKy8qKgorICogQG5nZG9j
IGZpbHRlcgorICogQG5hbWUgbGltaXRUbworICogQGtpbmQgZnVuY3Rpb24KKyAqCisgKiBAZGVz
Y3JpcHRpb24KKyAqIENyZWF0ZXMgYSBuZXcgYXJyYXkgb3Igc3RyaW5nIGNvbnRhaW5pbmcgb25s
eSBhIHNwZWNpZmllZCBudW1iZXIgb2YgZWxlbWVudHMuIFRoZSBlbGVtZW50cworICogYXJlIHRh
a2VuIGZyb20gZWl0aGVyIHRoZSBiZWdpbm5pbmcgb3IgdGhlIGVuZCBvZiB0aGUgc291cmNlIGFy
cmF5LCBzdHJpbmcgb3IgbnVtYmVyLCBhcyBzcGVjaWZpZWQgYnkKKyAqIHRoZSB2YWx1ZSBhbmQg
c2lnbiAocG9zaXRpdmUgb3IgbmVnYXRpdmUpIG9mIGBsaW1pdGAuIElmIGEgbnVtYmVyIGlzIHVz
ZWQgYXMgaW5wdXQsIGl0IGlzCisgKiBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcuCisgKgorICogQHBh
cmFtIHtBcnJheXxzdHJpbmd8bnVtYmVyfSBpbnB1dCBTb3VyY2UgYXJyYXksIHN0cmluZyBvciBu
dW1iZXIgdG8gYmUgbGltaXRlZC4KKyAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gbGltaXQgVGhl
IGxlbmd0aCBvZiB0aGUgcmV0dXJuZWQgYXJyYXkgb3Igc3RyaW5nLiBJZiB0aGUgYGxpbWl0YCBu
dW1iZXIKKyAqICAgICBpcyBwb3NpdGl2ZSwgYGxpbWl0YCBudW1iZXIgb2YgaXRlbXMgZnJvbSB0
aGUgYmVnaW5uaW5nIG9mIHRoZSBzb3VyY2UgYXJyYXkvc3RyaW5nIGFyZSBjb3BpZWQuCisgKiAg
ICAgSWYgdGhlIG51bWJlciBpcyBuZWdhdGl2ZSwgYGxpbWl0YCBudW1iZXIgIG9mIGl0ZW1zIGZy
b20gdGhlIGVuZCBvZiB0aGUgc291cmNlIGFycmF5L3N0cmluZworICogICAgIGFyZSBjb3BpZWQu
IFRoZSBgbGltaXRgIHdpbGwgYmUgdHJpbW1lZCBpZiBpdCBleGNlZWRzIGBhcnJheS5sZW5ndGhg
LiBJZiBgbGltaXRgIGlzIHVuZGVmaW5lZCwKKyAqICAgICB0aGUgaW5wdXQgd2lsbCBiZSByZXR1
cm5lZCB1bmNoYW5nZWQuCisgKiBAcGFyYW0geyhzdHJpbmd8bnVtYmVyKT19IGJlZ2luIEluZGV4
IGF0IHdoaWNoIHRvIGJlZ2luIGxpbWl0YXRpb24uIEFzIGEgbmVnYXRpdmUgaW5kZXgsIGBiZWdp
bmAKKyAqICAgICBpbmRpY2F0ZXMgYW4gb2Zmc2V0IGZyb20gdGhlIGVuZCBvZiBgaW5wdXRgLiBE
ZWZhdWx0cyB0byBgMGAuCisgKiBAcmV0dXJucyB7QXJyYXl8c3RyaW5nfSBBIG5ldyBzdWItYXJy
YXkgb3Igc3Vic3RyaW5nIG9mIGxlbmd0aCBgbGltaXRgIG9yIGxlc3MgaWYgaW5wdXQgYXJyYXkK
KyAqICAgICBoYWQgbGVzcyB0aGFuIGBsaW1pdGAgZWxlbWVudHMuCisgKgorICogQGV4YW1wbGUK
KyAgIDxleGFtcGxlIG1vZHVsZT0ibGltaXRUb0V4YW1wbGUiPgorICAgICA8ZmlsZSBuYW1lPSJp
bmRleC5odG1sIj4KKyAgICAgICA8c2NyaXB0PgorICAgICAgICAgYW5ndWxhci5tb2R1bGUoJ2xp
bWl0VG9FeGFtcGxlJywgW10pCisgICAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJv
bGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7CisgICAgICAgICAgICAgJHNjb3Bl
Lm51bWJlcnMgPSBbMSwyLDMsNCw1LDYsNyw4LDldOworICAgICAgICAgICAgICRzY29wZS5sZXR0
ZXJzID0gImFiY2RlZmdoaSI7CisgICAgICAgICAgICAgJHNjb3BlLmxvbmdOdW1iZXIgPSAyMzQ1
NDMyMzQyOworICAgICAgICAgICAgICRzY29wZS5udW1MaW1pdCA9IDM7CisgICAgICAgICAgICAg
JHNjb3BlLmxldHRlckxpbWl0ID0gMzsKKyAgICAgICAgICAgICAkc2NvcGUubG9uZ051bWJlckxp
bWl0ID0gMzsKKyAgICAgICAgICAgfV0pOworICAgICAgIDwvc2NyaXB0PgorICAgICAgIDxkaXYg
bmctY29udHJvbGxlcj0iRXhhbXBsZUNvbnRyb2xsZXIiPgorICAgICAgICAgPGxhYmVsPgorICAg
ICAgICAgICAgTGltaXQge3tudW1iZXJzfX0gdG86CisgICAgICAgICAgICA8aW5wdXQgdHlwZT0i
bnVtYmVyIiBzdGVwPSIxIiBuZy1tb2RlbD0ibnVtTGltaXQiPgorICAgICAgICAgPC9sYWJlbD4K
KyAgICAgICAgIDxwPk91dHB1dCBudW1iZXJzOiB7eyBudW1iZXJzIHwgbGltaXRUbzpudW1MaW1p
dCB9fTwvcD4KKyAgICAgICAgIDxsYWJlbD4KKyAgICAgICAgICAgIExpbWl0IHt7bGV0dGVyc319
IHRvOgorICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgc3RlcD0iMSIgbmctbW9kZWw9
ImxldHRlckxpbWl0Ij4KKyAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICA8cD5PdXRwdXQgbGV0
dGVyczoge3sgbGV0dGVycyB8IGxpbWl0VG86bGV0dGVyTGltaXQgfX08L3A+CisgICAgICAgICA8
bGFiZWw+CisgICAgICAgICAgICBMaW1pdCB7e2xvbmdOdW1iZXJ9fSB0bzoKKyAgICAgICAgICAg
IDxpbnB1dCB0eXBlPSJudW1iZXIiIHN0ZXA9IjEiIG5nLW1vZGVsPSJsb25nTnVtYmVyTGltaXQi
PgorICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgIDxwPk91dHB1dCBsb25nIG51bWJlcjoge3sg
bG9uZ051bWJlciB8IGxpbWl0VG86bG9uZ051bWJlckxpbWl0IH19PC9wPgorICAgICAgIDwvZGl2
PgorICAgICA8L2ZpbGU+CisgICAgIDxmaWxlIG5hbWU9InByb3RyYWN0b3IuanMiIHR5cGU9InBy
b3RyYWN0b3IiPgorICAgICAgIHZhciBudW1MaW1pdElucHV0ID0gZWxlbWVudChieS5tb2RlbCgn
bnVtTGltaXQnKSk7CisgICAgICAgdmFyIGxldHRlckxpbWl0SW5wdXQgPSBlbGVtZW50KGJ5Lm1v
ZGVsKCdsZXR0ZXJMaW1pdCcpKTsKKyAgICAgICB2YXIgbG9uZ051bWJlckxpbWl0SW5wdXQgPSBl
bGVtZW50KGJ5Lm1vZGVsKCdsb25nTnVtYmVyTGltaXQnKSk7CisgICAgICAgdmFyIGxpbWl0ZWRO
dW1iZXJzID0gZWxlbWVudChieS5iaW5kaW5nKCdudW1iZXJzIHwgbGltaXRUbzpudW1MaW1pdCcp
KTsKKyAgICAgICB2YXIgbGltaXRlZExldHRlcnMgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ2xldHRl
cnMgfCBsaW1pdFRvOmxldHRlckxpbWl0JykpOworICAgICAgIHZhciBsaW1pdGVkTG9uZ051bWJl
ciA9IGVsZW1lbnQoYnkuYmluZGluZygnbG9uZ051bWJlciB8IGxpbWl0VG86bG9uZ051bWJlckxp
bWl0JykpOworCisgICAgICAgaXQoJ3Nob3VsZCBsaW1pdCB0aGUgbnVtYmVyIGFycmF5IHRvIGZp
cnN0IHRocmVlIGl0ZW1zJywgZnVuY3Rpb24oKSB7CisgICAgICAgICBleHBlY3QobnVtTGltaXRJ
bnB1dC5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpLnRvQmUoJzMnKTsKKyAgICAgICAgIGV4cGVjdChs
ZXR0ZXJMaW1pdElucHV0LmdldEF0dHJpYnV0ZSgndmFsdWUnKSkudG9CZSgnMycpOworICAgICAg
ICAgZXhwZWN0KGxvbmdOdW1iZXJMaW1pdElucHV0LmdldEF0dHJpYnV0ZSgndmFsdWUnKSkudG9C
ZSgnMycpOworICAgICAgICAgZXhwZWN0KGxpbWl0ZWROdW1iZXJzLmdldFRleHQoKSkudG9FcXVh
bCgnT3V0cHV0IG51bWJlcnM6IFsxLDIsM10nKTsKKyAgICAgICAgIGV4cGVjdChsaW1pdGVkTGV0
dGVycy5nZXRUZXh0KCkpLnRvRXF1YWwoJ091dHB1dCBsZXR0ZXJzOiBhYmMnKTsKKyAgICAgICAg
IGV4cGVjdChsaW1pdGVkTG9uZ051bWJlci5nZXRUZXh0KCkpLnRvRXF1YWwoJ091dHB1dCBsb25n
IG51bWJlcjogMjM0Jyk7CisgICAgICAgfSk7CisKKyAgICAgICAvLyBUaGVyZSBpcyBhIGJ1ZyBp
biBzYWZhcmkgYW5kIHByb3RyYWN0b3IgdGhhdCBkb2Vzbid0IGxpa2UgdGhlIG1pbnVzIGtleQor
ICAgICAgIC8vIGl0KCdzaG91bGQgdXBkYXRlIHRoZSBvdXRwdXQgd2hlbiAtMyBpcyBlbnRlcmVk
JywgZnVuY3Rpb24oKSB7CisgICAgICAgLy8gICBudW1MaW1pdElucHV0LmNsZWFyKCk7CisgICAg
ICAgLy8gICBudW1MaW1pdElucHV0LnNlbmRLZXlzKCctMycpOworICAgICAgIC8vICAgbGV0dGVy
TGltaXRJbnB1dC5jbGVhcigpOworICAgICAgIC8vICAgbGV0dGVyTGltaXRJbnB1dC5zZW5kS2V5
cygnLTMnKTsKKyAgICAgICAvLyAgIGxvbmdOdW1iZXJMaW1pdElucHV0LmNsZWFyKCk7CisgICAg
ICAgLy8gICBsb25nTnVtYmVyTGltaXRJbnB1dC5zZW5kS2V5cygnLTMnKTsKKyAgICAgICAvLyAg
IGV4cGVjdChsaW1pdGVkTnVtYmVycy5nZXRUZXh0KCkpLnRvRXF1YWwoJ091dHB1dCBudW1iZXJz
OiBbNyw4LDldJyk7CisgICAgICAgLy8gICBleHBlY3QobGltaXRlZExldHRlcnMuZ2V0VGV4dCgp
KS50b0VxdWFsKCdPdXRwdXQgbGV0dGVyczogZ2hpJyk7CisgICAgICAgLy8gICBleHBlY3QobGlt
aXRlZExvbmdOdW1iZXIuZ2V0VGV4dCgpKS50b0VxdWFsKCdPdXRwdXQgbG9uZyBudW1iZXI6IDM0
MicpOworICAgICAgIC8vIH0pOworCisgICAgICAgaXQoJ3Nob3VsZCBub3QgZXhjZWVkIHRoZSBt
YXhpbXVtIHNpemUgb2YgaW5wdXQgYXJyYXknLCBmdW5jdGlvbigpIHsKKyAgICAgICAgIG51bUxp
bWl0SW5wdXQuY2xlYXIoKTsKKyAgICAgICAgIG51bUxpbWl0SW5wdXQuc2VuZEtleXMoJzEwMCcp
OworICAgICAgICAgbGV0dGVyTGltaXRJbnB1dC5jbGVhcigpOworICAgICAgICAgbGV0dGVyTGlt
aXRJbnB1dC5zZW5kS2V5cygnMTAwJyk7CisgICAgICAgICBsb25nTnVtYmVyTGltaXRJbnB1dC5j
bGVhcigpOworICAgICAgICAgbG9uZ051bWJlckxpbWl0SW5wdXQuc2VuZEtleXMoJzEwMCcpOwor
ICAgICAgICAgZXhwZWN0KGxpbWl0ZWROdW1iZXJzLmdldFRleHQoKSkudG9FcXVhbCgnT3V0cHV0
IG51bWJlcnM6IFsxLDIsMyw0LDUsNiw3LDgsOV0nKTsKKyAgICAgICAgIGV4cGVjdChsaW1pdGVk
TGV0dGVycy5nZXRUZXh0KCkpLnRvRXF1YWwoJ091dHB1dCBsZXR0ZXJzOiBhYmNkZWZnaGknKTsK
KyAgICAgICAgIGV4cGVjdChsaW1pdGVkTG9uZ051bWJlci5nZXRUZXh0KCkpLnRvRXF1YWwoJ091
dHB1dCBsb25nIG51bWJlcjogMjM0NTQzMjM0MicpOworICAgICAgIH0pOworICAgICA8L2ZpbGU+
CisgICA8L2V4YW1wbGU+CisqLworZnVuY3Rpb24gbGltaXRUb0ZpbHRlcigpIHsKKyAgcmV0dXJu
IGZ1bmN0aW9uKGlucHV0LCBsaW1pdCwgYmVnaW4pIHsKKyAgICBpZiAoTWF0aC5hYnMoTnVtYmVy
KGxpbWl0KSkgPT09IEluZmluaXR5KSB7CisgICAgICBsaW1pdCA9IE51bWJlcihsaW1pdCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgIGxpbWl0ID0gdG9JbnQobGltaXQpOworICAgIH0KKyAgICBpZiAo
aXNOYU4obGltaXQpKSByZXR1cm4gaW5wdXQ7CisKKyAgICBpZiAoaXNOdW1iZXIoaW5wdXQpKSBp
bnB1dCA9IGlucHV0LnRvU3RyaW5nKCk7CisgICAgaWYgKCFpc0FycmF5KGlucHV0KSAmJiAhaXNT
dHJpbmcoaW5wdXQpKSByZXR1cm4gaW5wdXQ7CisKKyAgICBiZWdpbiA9ICghYmVnaW4gfHwgaXNO
YU4oYmVnaW4pKSA/IDAgOiB0b0ludChiZWdpbik7CisgICAgYmVnaW4gPSAoYmVnaW4gPCAwICYm
IGJlZ2luID49IC1pbnB1dC5sZW5ndGgpID8gaW5wdXQubGVuZ3RoICsgYmVnaW4gOiBiZWdpbjsK
KworICAgIGlmIChsaW1pdCA+PSAwKSB7CisgICAgICByZXR1cm4gaW5wdXQuc2xpY2UoYmVnaW4s
IGJlZ2luICsgbGltaXQpOworICAgIH0gZWxzZSB7CisgICAgICBpZiAoYmVnaW4gPT09IDApIHsK
KyAgICAgICAgcmV0dXJuIGlucHV0LnNsaWNlKGxpbWl0LCBpbnB1dC5sZW5ndGgpOworICAgICAg
fSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGlucHV0LnNsaWNlKE1hdGgubWF4KDAsIGJlZ2luICsg
bGltaXQpLCBiZWdpbik7CisgICAgICB9CisgICAgfQorICB9OworfQorCisvKioKKyAqIEBuZ2Rv
YyBmaWx0ZXIKKyAqIEBuYW1lIG9yZGVyQnkKKyAqIEBraW5kIGZ1bmN0aW9uCisgKgorICogQGRl
c2NyaXB0aW9uCisgKiBPcmRlcnMgYSBzcGVjaWZpZWQgYGFycmF5YCBieSB0aGUgYGV4cHJlc3Np
b25gIHByZWRpY2F0ZS4gSXQgaXMgb3JkZXJlZCBhbHBoYWJldGljYWxseQorICogZm9yIHN0cmlu
Z3MgYW5kIG51bWVyaWNhbGx5IGZvciBudW1iZXJzLiBOb3RlOiBpZiB5b3Ugbm90aWNlIG51bWJl
cnMgYXJlIG5vdCBiZWluZyBzb3J0ZWQKKyAqIGFzIGV4cGVjdGVkLCBtYWtlIHN1cmUgdGhleSBh
cmUgYWN0dWFsbHkgYmVpbmcgc2F2ZWQgYXMgbnVtYmVycyBhbmQgbm90IHN0cmluZ3MuCisgKgor
ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNvcnQuCisgKiBAcGFyYW0ge2Z1
bmN0aW9uKCopfHN0cmluZ3xBcnJheS48KGZ1bmN0aW9uKCopfHN0cmluZyk+PX0gZXhwcmVzc2lv
biBBIHByZWRpY2F0ZSB0byBiZQorICogICAgdXNlZCBieSB0aGUgY29tcGFyYXRvciB0byBkZXRl
cm1pbmUgdGhlIG9yZGVyIG9mIGVsZW1lbnRzLgorICoKKyAqICAgIENhbiBiZSBvbmUgb2Y6Cisg
KgorICogICAgLSBgZnVuY3Rpb25gOiBHZXR0ZXIgZnVuY3Rpb24uIFRoZSByZXN1bHQgb2YgdGhp
cyBmdW5jdGlvbiB3aWxsIGJlIHNvcnRlZCB1c2luZyB0aGUKKyAqICAgICAgYDxgLCBgPT09YCwg
YD5gIG9wZXJhdG9yLgorICogICAgLSBgc3RyaW5nYDogQW4gQW5ndWxhciBleHByZXNzaW9uLiBU
aGUgcmVzdWx0IG9mIHRoaXMgZXhwcmVzc2lvbiBpcyB1c2VkIHRvIGNvbXBhcmUgZWxlbWVudHMK
KyAqICAgICAgKGZvciBleGFtcGxlIGBuYW1lYCB0byBzb3J0IGJ5IGEgcHJvcGVydHkgY2FsbGVk
IGBuYW1lYCBvciBgbmFtZS5zdWJzdHIoMCwgMylgIHRvIHNvcnQgYnkKKyAqICAgICAgMyBmaXJz
dCBjaGFyYWN0ZXJzIG9mIGEgcHJvcGVydHkgY2FsbGVkIGBuYW1lYCkuIFRoZSByZXN1bHQgb2Yg
YSBjb25zdGFudCBleHByZXNzaW9uCisgKiAgICAgIGlzIGludGVycHJldGVkIGFzIGEgcHJvcGVy
dHkgbmFtZSB0byBiZSB1c2VkIGluIGNvbXBhcmlzb25zIChmb3IgZXhhbXBsZSBgInNwZWNpYWwg
bmFtZSJgCisgKiAgICAgIHRvIHNvcnQgb2JqZWN0IGJ5IHRoZSB2YWx1ZSBvZiB0aGVpciBgc3Bl
Y2lhbCBuYW1lYCBwcm9wZXJ0eSkuIEFuIGV4cHJlc3Npb24gY2FuIGJlCisgKiAgICAgIG9wdGlv
bmFsbHkgcHJlZml4ZWQgd2l0aCBgK2Agb3IgYC1gIHRvIGNvbnRyb2wgYXNjZW5kaW5nIG9yIGRl
c2NlbmRpbmcgc29ydCBvcmRlcgorICogICAgICAoZm9yIGV4YW1wbGUsIGArbmFtZWAgb3IgYC1u
YW1lYCkuIElmIG5vIHByb3BlcnR5IGlzIHByb3ZpZGVkLCAoZS5nLiBgJysnYCkgdGhlbiB0aGUg
YXJyYXkKKyAqICAgICAgZWxlbWVudCBpdHNlbGYgaXMgdXNlZCB0byBjb21wYXJlIHdoZXJlIHNv
cnRpbmcuCisgKiAgICAtIGBBcnJheWA6IEFuIGFycmF5IG9mIGZ1bmN0aW9uIG9yIHN0cmluZyBw
cmVkaWNhdGVzLiBUaGUgZmlyc3QgcHJlZGljYXRlIGluIHRoZSBhcnJheQorICogICAgICBpcyB1
c2VkIGZvciBzb3J0aW5nLCBidXQgd2hlbiB0d28gaXRlbXMgYXJlIGVxdWl2YWxlbnQsIHRoZSBu
ZXh0IHByZWRpY2F0ZSBpcyB1c2VkLgorICoKKyAqICAgIElmIHRoZSBwcmVkaWNhdGUgaXMgbWlz
c2luZyBvciBlbXB0eSB0aGVuIGl0IGRlZmF1bHRzIHRvIGAnKydgLgorICoKKyAqIEBwYXJhbSB7
Ym9vbGVhbj19IHJldmVyc2UgUmV2ZXJzZSB0aGUgb3JkZXIgb2YgdGhlIGFycmF5LgorICogQHJl
dHVybnMge0FycmF5fSBTb3J0ZWQgY29weSBvZiB0aGUgc291cmNlIGFycmF5LgorICoKKyAqCisg
KiBAZXhhbXBsZQorICogVGhlIGV4YW1wbGUgYmVsb3cgZGVtb25zdHJhdGVzIGEgc2ltcGxlIG5n
UmVwZWF0LCB3aGVyZSB0aGUgZGF0YSBpcyBzb3J0ZWQKKyAqIGJ5IGFnZSBpbiBkZXNjZW5kaW5n
IG9yZGVyIChwcmVkaWNhdGUgaXMgc2V0IHRvIGAnLWFnZSdgKS4KKyAqIGByZXZlcnNlYCBpcyBu
b3Qgc2V0LCB3aGljaCBtZWFucyBpdCBkZWZhdWx0cyB0byBgZmFsc2VgLgorICAgPGV4YW1wbGUg
bW9kdWxlPSJvcmRlckJ5RXhhbXBsZSI+CisgICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgor
ICAgICAgIDxzY3JpcHQ+CisgICAgICAgICBhbmd1bGFyLm1vZHVsZSgnb3JkZXJCeUV4YW1wbGUn
LCBbXSkKKyAgICAgICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2Nv
cGUnLCBmdW5jdGlvbigkc2NvcGUpIHsKKyAgICAgICAgICAgICAkc2NvcGUuZnJpZW5kcyA9Cisg
ICAgICAgICAgICAgICAgIFt7bmFtZTonSm9obicsIHBob25lOic1NTUtMTIxMicsIGFnZToxMH0s
CisgICAgICAgICAgICAgICAgICB7bmFtZTonTWFyeScsIHBob25lOic1NTUtOTg3NicsIGFnZTox
OX0sCisgICAgICAgICAgICAgICAgICB7bmFtZTonTWlrZScsIHBob25lOic1NTUtNDMyMScsIGFn
ZToyMX0sCisgICAgICAgICAgICAgICAgICB7bmFtZTonQWRhbScsIHBob25lOic1NTUtNTY3OCcs
IGFnZTozNX0sCisgICAgICAgICAgICAgICAgICB7bmFtZTonSnVsaWUnLCBwaG9uZTonNTU1LTg3
NjUnLCBhZ2U6Mjl9XTsKKyAgICAgICAgICAgfV0pOworICAgICAgIDwvc2NyaXB0PgorICAgICAg
IDxkaXYgbmctY29udHJvbGxlcj0iRXhhbXBsZUNvbnRyb2xsZXIiPgorICAgICAgICAgPHRhYmxl
IGNsYXNzPSJmcmllbmQiPgorICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgPHRoPk5hbWU8
L3RoPgorICAgICAgICAgICAgIDx0aD5QaG9uZSBOdW1iZXI8L3RoPgorICAgICAgICAgICAgIDx0
aD5BZ2U8L3RoPgorICAgICAgICAgICA8L3RyPgorICAgICAgICAgICA8dHIgbmctcmVwZWF0PSJm
cmllbmQgaW4gZnJpZW5kcyB8IG9yZGVyQnk6Jy1hZ2UnIj4KKyAgICAgICAgICAgICA8dGQ+e3tm
cmllbmQubmFtZX19PC90ZD4KKyAgICAgICAgICAgICA8dGQ+e3tmcmllbmQucGhvbmV9fTwvdGQ+
CisgICAgICAgICAgICAgPHRkPnt7ZnJpZW5kLmFnZX19PC90ZD4KKyAgICAgICAgICAgPC90cj4K
KyAgICAgICAgIDwvdGFibGU+CisgICAgICAgPC9kaXY+CisgICAgIDwvZmlsZT4KKyAgIDwvZXhh
bXBsZT4KKyAqCisgKiBUaGUgcHJlZGljYXRlIGFuZCByZXZlcnNlIHBhcmFtZXRlcnMgY2FuIGJl
IGNvbnRyb2xsZWQgZHluYW1pY2FsbHkgdGhyb3VnaCBzY29wZSBwcm9wZXJ0aWVzLAorICogYXMg
c2hvd24gaW4gdGhlIG5leHQgZXhhbXBsZS4KKyAqIEBleGFtcGxlCisgICA8ZXhhbXBsZSBtb2R1
bGU9Im9yZGVyQnlFeGFtcGxlIj4KKyAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAg
ICAgPHNjcmlwdD4KKyAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCdvcmRlckJ5RXhhbXBsZScsIFtd
KQorICAgICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScs
IGZ1bmN0aW9uKCRzY29wZSkgeworICAgICAgICAgICAgICRzY29wZS5mcmllbmRzID0KKyAgICAg
ICAgICAgICAgICAgW3tuYW1lOidKb2huJywgcGhvbmU6JzU1NS0xMjEyJywgYWdlOjEwfSwKKyAg
ICAgICAgICAgICAgICAgIHtuYW1lOidNYXJ5JywgcGhvbmU6JzU1NS05ODc2JywgYWdlOjE5fSwK
KyAgICAgICAgICAgICAgICAgIHtuYW1lOidNaWtlJywgcGhvbmU6JzU1NS00MzIxJywgYWdlOjIx
fSwKKyAgICAgICAgICAgICAgICAgIHtuYW1lOidBZGFtJywgcGhvbmU6JzU1NS01Njc4JywgYWdl
OjM1fSwKKyAgICAgICAgICAgICAgICAgIHtuYW1lOidKdWxpZScsIHBob25lOic1NTUtODc2NScs
IGFnZToyOX1dOworICAgICAgICAgICAgICRzY29wZS5wcmVkaWNhdGUgPSAnYWdlJzsKKyAgICAg
ICAgICAgICAkc2NvcGUucmV2ZXJzZSA9IHRydWU7CisgICAgICAgICAgICAgJHNjb3BlLm9yZGVy
ID0gZnVuY3Rpb24ocHJlZGljYXRlKSB7CisgICAgICAgICAgICAgICAkc2NvcGUucmV2ZXJzZSA9
ICgkc2NvcGUucHJlZGljYXRlID09PSBwcmVkaWNhdGUpID8gISRzY29wZS5yZXZlcnNlIDogZmFs
c2U7CisgICAgICAgICAgICAgICAkc2NvcGUucHJlZGljYXRlID0gcHJlZGljYXRlOworICAgICAg
ICAgICAgIH07CisgICAgICAgICAgIH1dKTsKKyAgICAgICA8L3NjcmlwdD4KKyAgICAgICA8c3R5
bGUgdHlwZT0idGV4dC9jc3MiPgorICAgICAgICAgLnNvcnRvcmRlcjphZnRlciB7CisgICAgICAg
ICAgIGNvbnRlbnQ6ICdcMjViMic7CisgICAgICAgICB9CisgICAgICAgICAuc29ydG9yZGVyLnJl
dmVyc2U6YWZ0ZXIgeworICAgICAgICAgICBjb250ZW50OiAnXDI1YmMnOworICAgICAgICAgfQor
ICAgICAgIDwvc3R5bGU+CisgICAgICAgPGRpdiBuZy1jb250cm9sbGVyPSJFeGFtcGxlQ29udHJv
bGxlciI+CisgICAgICAgICA8cHJlPlNvcnRpbmcgcHJlZGljYXRlID0ge3twcmVkaWNhdGV9fTsg
cmV2ZXJzZSA9IHt7cmV2ZXJzZX19PC9wcmU+CisgICAgICAgICA8aHIvPgorICAgICAgICAgWyA8
YSBocmVmPSIiIG5nLWNsaWNrPSJwcmVkaWNhdGU9JyciPnVuc29ydGVkPC9hPiBdCisgICAgICAg
ICA8dGFibGUgY2xhc3M9ImZyaWVuZCI+CisgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICA8
dGg+CisgICAgICAgICAgICAgICA8YSBocmVmPSIiIG5nLWNsaWNrPSJvcmRlcignbmFtZScpIj5O
YW1lPC9hPgorICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNvcnRvcmRlciIgbmctc2hvdz0i
cHJlZGljYXRlID09PSAnbmFtZSciIG5nLWNsYXNzPSJ7cmV2ZXJzZTpyZXZlcnNlfSI+PC9zcGFu
PgorICAgICAgICAgICAgIDwvdGg+CisgICAgICAgICAgICAgPHRoPgorICAgICAgICAgICAgICAg
PGEgaHJlZj0iIiBuZy1jbGljaz0ib3JkZXIoJ3Bob25lJykiPlBob25lIE51bWJlcjwvYT4KKyAg
ICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzb3J0b3JkZXIiIG5nLXNob3c9InByZWRpY2F0ZSA9
PT0gJ3Bob25lJyIgbmctY2xhc3M9IntyZXZlcnNlOnJldmVyc2V9Ij48L3NwYW4+CisgICAgICAg
ICAgICAgPC90aD4KKyAgICAgICAgICAgICA8dGg+CisgICAgICAgICAgICAgICA8YSBocmVmPSIi
IG5nLWNsaWNrPSJvcmRlcignYWdlJykiPkFnZTwvYT4KKyAgICAgICAgICAgICAgIDxzcGFuIGNs
YXNzPSJzb3J0b3JkZXIiIG5nLXNob3c9InByZWRpY2F0ZSA9PT0gJ2FnZSciIG5nLWNsYXNzPSJ7
cmV2ZXJzZTpyZXZlcnNlfSI+PC9zcGFuPgorICAgICAgICAgICAgIDwvdGg+CisgICAgICAgICAg
IDwvdHI+CisgICAgICAgICAgIDx0ciBuZy1yZXBlYXQ9ImZyaWVuZCBpbiBmcmllbmRzIHwgb3Jk
ZXJCeTpwcmVkaWNhdGU6cmV2ZXJzZSI+CisgICAgICAgICAgICAgPHRkPnt7ZnJpZW5kLm5hbWV9
fTwvdGQ+CisgICAgICAgICAgICAgPHRkPnt7ZnJpZW5kLnBob25lfX08L3RkPgorICAgICAgICAg
ICAgIDx0ZD57e2ZyaWVuZC5hZ2V9fTwvdGQ+CisgICAgICAgICAgIDwvdHI+CisgICAgICAgICA8
L3RhYmxlPgorICAgICAgIDwvZGl2PgorICAgICA8L2ZpbGU+CisgICA8L2V4YW1wbGU+CisgKgor
ICogSXQncyBhbHNvIHBvc3NpYmxlIHRvIGNhbGwgdGhlIG9yZGVyQnkgZmlsdGVyIG1hbnVhbGx5
LCBieSBpbmplY3RpbmcgYCRmaWx0ZXJgLCByZXRyaWV2aW5nIHRoZQorICogZmlsdGVyIHJvdXRp
bmUgd2l0aCBgJGZpbHRlcignb3JkZXJCeScpYCwgYW5kIGNhbGxpbmcgdGhlIHJldHVybmVkIGZp
bHRlciByb3V0aW5lIHdpdGggdGhlCisgKiBkZXNpcmVkIHBhcmFtZXRlcnMuCisgKgorICogRXhh
bXBsZToKKyAqCisgKiBAZXhhbXBsZQorICA8ZXhhbXBsZSBtb2R1bGU9Im9yZGVyQnlFeGFtcGxl
Ij4KKyAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgIDxkaXYgbmctY29udHJvbGxl
cj0iRXhhbXBsZUNvbnRyb2xsZXIiPgorICAgICAgICA8dGFibGUgY2xhc3M9ImZyaWVuZCI+Cisg
ICAgICAgICAgPHRyPgorICAgICAgICAgICAgPHRoPjxhIGhyZWY9IiIgbmctY2xpY2s9InJldmVy
c2U9ZmFsc2U7b3JkZXIoJ25hbWUnLCBmYWxzZSkiPk5hbWU8L2E+CisgICAgICAgICAgICAgICg8
YSBocmVmPSIiIG5nLWNsaWNrPSJvcmRlcignLW5hbWUnLGZhbHNlKSI+XjwvYT4pPC90aD4KKyAg
ICAgICAgICAgIDx0aD48YSBocmVmPSIiIG5nLWNsaWNrPSJyZXZlcnNlPSFyZXZlcnNlO29yZGVy
KCdwaG9uZScsIHJldmVyc2UpIj5QaG9uZSBOdW1iZXI8L2E+PC90aD4KKyAgICAgICAgICAgIDx0
aD48YSBocmVmPSIiIG5nLWNsaWNrPSJyZXZlcnNlPSFyZXZlcnNlO29yZGVyKCdhZ2UnLHJldmVy
c2UpIj5BZ2U8L2E+PC90aD4KKyAgICAgICAgICA8L3RyPgorICAgICAgICAgIDx0ciBuZy1yZXBl
YXQ9ImZyaWVuZCBpbiBmcmllbmRzIj4KKyAgICAgICAgICAgIDx0ZD57e2ZyaWVuZC5uYW1lfX08
L3RkPgorICAgICAgICAgICAgPHRkPnt7ZnJpZW5kLnBob25lfX08L3RkPgorICAgICAgICAgICAg
PHRkPnt7ZnJpZW5kLmFnZX19PC90ZD4KKyAgICAgICAgICA8L3RyPgorICAgICAgICA8L3RhYmxl
PgorICAgICAgPC9kaXY+CisgICAgPC9maWxlPgorCisgICAgPGZpbGUgbmFtZT0ic2NyaXB0Lmpz
Ij4KKyAgICAgIGFuZ3VsYXIubW9kdWxlKCdvcmRlckJ5RXhhbXBsZScsIFtdKQorICAgICAgICAu
Y29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsICckZmlsdGVyJywgZnVu
Y3Rpb24oJHNjb3BlLCAkZmlsdGVyKSB7CisgICAgICAgICAgdmFyIG9yZGVyQnkgPSAkZmlsdGVy
KCdvcmRlckJ5Jyk7CisgICAgICAgICAgJHNjb3BlLmZyaWVuZHMgPSBbCisgICAgICAgICAgICB7
IG5hbWU6ICdKb2huJywgICAgcGhvbmU6ICc1NTUtMTIxMicsICAgIGFnZTogMTAgfSwKKyAgICAg
ICAgICAgIHsgbmFtZTogJ01hcnknLCAgICBwaG9uZTogJzU1NS05ODc2JywgICAgYWdlOiAxOSB9
LAorICAgICAgICAgICAgeyBuYW1lOiAnTWlrZScsICAgIHBob25lOiAnNTU1LTQzMjEnLCAgICBh
Z2U6IDIxIH0sCisgICAgICAgICAgICB7IG5hbWU6ICdBZGFtJywgICAgcGhvbmU6ICc1NTUtNTY3
OCcsICAgIGFnZTogMzUgfSwKKyAgICAgICAgICAgIHsgbmFtZTogJ0p1bGllJywgICBwaG9uZTog
JzU1NS04NzY1JywgICAgYWdlOiAyOSB9CisgICAgICAgICAgXTsKKyAgICAgICAgICAkc2NvcGUu
b3JkZXIgPSBmdW5jdGlvbihwcmVkaWNhdGUsIHJldmVyc2UpIHsKKyAgICAgICAgICAgICRzY29w
ZS5mcmllbmRzID0gb3JkZXJCeSgkc2NvcGUuZnJpZW5kcywgcHJlZGljYXRlLCByZXZlcnNlKTsK
KyAgICAgICAgICB9OworICAgICAgICAgICRzY29wZS5vcmRlcignLWFnZScsZmFsc2UpOworICAg
ICAgICB9XSk7CisgICAgPC9maWxlPgorPC9leGFtcGxlPgorICovCitvcmRlckJ5RmlsdGVyLiRp
bmplY3QgPSBbJyRwYXJzZSddOworZnVuY3Rpb24gb3JkZXJCeUZpbHRlcigkcGFyc2UpIHsKKyAg
cmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBzb3J0UHJlZGljYXRlLCByZXZlcnNlT3JkZXIpIHsKKwor
ICAgIGlmICghKGlzQXJyYXlMaWtlKGFycmF5KSkpIHJldHVybiBhcnJheTsKKworICAgIGlmICgh
aXNBcnJheShzb3J0UHJlZGljYXRlKSkgeyBzb3J0UHJlZGljYXRlID0gW3NvcnRQcmVkaWNhdGVd
OyB9CisgICAgaWYgKHNvcnRQcmVkaWNhdGUubGVuZ3RoID09PSAwKSB7IHNvcnRQcmVkaWNhdGUg
PSBbJysnXTsgfQorCisgICAgdmFyIHByZWRpY2F0ZXMgPSBwcm9jZXNzUHJlZGljYXRlcyhzb3J0
UHJlZGljYXRlLCByZXZlcnNlT3JkZXIpOworCisgICAgLy8gVGhlIG5leHQgdGhyZWUgbGluZXMg
YXJlIGEgdmVyc2lvbiBvZiBhIFN3YXJ0emlhbiBUcmFuc2Zvcm0gaWRpb20gZnJvbSBQZXJsCisg
ICAgLy8gKHNvbWV0aW1lcyBjYWxsZWQgdGhlIERlY29yYXRlLVNvcnQtVW5kZWNvcmF0ZSBpZGlv
bSkKKyAgICAvLyBTZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2Nod2FydHppYW5f
dHJhbnNmb3JtCisgICAgdmFyIGNvbXBhcmVWYWx1ZXMgPSBBcnJheS5wcm90b3R5cGUubWFwLmNh
bGwoYXJyYXksIGdldENvbXBhcmlzb25PYmplY3QpOworICAgIGNvbXBhcmVWYWx1ZXMuc29ydChk
b0NvbXBhcmlzb24pOworICAgIGFycmF5ID0gY29tcGFyZVZhbHVlcy5tYXAoZnVuY3Rpb24oaXRl
bSkgeyByZXR1cm4gaXRlbS52YWx1ZTsgfSk7CisKKyAgICByZXR1cm4gYXJyYXk7CisKKyAgICBm
dW5jdGlvbiBnZXRDb21wYXJpc29uT2JqZWN0KHZhbHVlLCBpbmRleCkgeworICAgICAgcmV0dXJu
IHsKKyAgICAgICAgdmFsdWU6IHZhbHVlLAorICAgICAgICBwcmVkaWNhdGVWYWx1ZXM6IHByZWRp
Y2F0ZXMubWFwKGZ1bmN0aW9uKHByZWRpY2F0ZSkgeworICAgICAgICAgIHJldHVybiBnZXRQcmVk
aWNhdGVWYWx1ZShwcmVkaWNhdGUuZ2V0KHZhbHVlKSwgaW5kZXgpOworICAgICAgICB9KQorICAg
ICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBkb0NvbXBhcmlzb24odjEsIHYyKSB7CisgICAg
ICB2YXIgcmVzdWx0ID0gMDsKKyAgICAgIGZvciAodmFyIGluZGV4PTAsIGxlbmd0aCA9IHByZWRp
Y2F0ZXMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkgeworICAgICAgICByZXN1bHQg
PSBjb21wYXJlKHYxLnByZWRpY2F0ZVZhbHVlc1tpbmRleF0sIHYyLnByZWRpY2F0ZVZhbHVlc1tp
bmRleF0pICogcHJlZGljYXRlc1tpbmRleF0uZGVzY2VuZGluZzsKKyAgICAgICAgaWYgKHJlc3Vs
dCkgYnJlYWs7CisgICAgICB9CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgfTsKKwor
ICBmdW5jdGlvbiBwcm9jZXNzUHJlZGljYXRlcyhzb3J0UHJlZGljYXRlLCByZXZlcnNlT3JkZXIp
IHsKKyAgICByZXZlcnNlT3JkZXIgPSByZXZlcnNlT3JkZXIgPyAtMSA6IDE7CisgICAgcmV0dXJu
IHNvcnRQcmVkaWNhdGUubWFwKGZ1bmN0aW9uKHByZWRpY2F0ZSkgeworICAgICAgdmFyIGRlc2Nl
bmRpbmcgPSAxLCBnZXQgPSBpZGVudGl0eTsKKworICAgICAgaWYgKGlzRnVuY3Rpb24ocHJlZGlj
YXRlKSkgeworICAgICAgICBnZXQgPSBwcmVkaWNhdGU7CisgICAgICB9IGVsc2UgaWYgKGlzU3Ry
aW5nKHByZWRpY2F0ZSkpIHsKKyAgICAgICAgaWYgKChwcmVkaWNhdGUuY2hhckF0KDApID09ICcr
JyB8fCBwcmVkaWNhdGUuY2hhckF0KDApID09ICctJykpIHsKKyAgICAgICAgICBkZXNjZW5kaW5n
ID0gcHJlZGljYXRlLmNoYXJBdCgwKSA9PSAnLScgPyAtMSA6IDE7CisgICAgICAgICAgcHJlZGlj
YXRlID0gcHJlZGljYXRlLnN1YnN0cmluZygxKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocHJl
ZGljYXRlICE9PSAnJykgeworICAgICAgICAgIGdldCA9ICRwYXJzZShwcmVkaWNhdGUpOworICAg
ICAgICAgIGlmIChnZXQuY29uc3RhbnQpIHsKKyAgICAgICAgICAgIHZhciBrZXkgPSBnZXQoKTsK
KyAgICAgICAgICAgIGdldCA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZVtrZXldOyB9
OworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgcmV0dXJuIHsgZ2V0OiBn
ZXQsIGRlc2NlbmRpbmc6IGRlc2NlbmRpbmcgKiByZXZlcnNlT3JkZXIgfTsKKyAgICB9KTsKKyAg
fQorCisgIGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7CisgICAgc3dpdGNoICh0eXBlb2Yg
dmFsdWUpIHsKKyAgICAgIGNhc2UgJ251bWJlcic6IC8qIGZhbGxzIHRocm91Z2ggKi8KKyAgICAg
IGNhc2UgJ2Jvb2xlYW4nOiAvKiBmYWxscyB0aHJvdWdoICovCisgICAgICBjYXNlICdzdHJpbmcn
OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiBvYmplY3RWYWx1ZSh2YWx1ZSwgaW5kZXgp
IHsKKyAgICAvLyBJZiBgdmFsdWVPZmAgaXMgYSB2YWxpZCBmdW5jdGlvbiB1c2UgdGhhdAorICAg
IGlmICh0eXBlb2YgdmFsdWUudmFsdWVPZiA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgdmFsdWUg
PSB2YWx1ZS52YWx1ZU9mKCk7CisgICAgICBpZiAoaXNQcmltaXRpdmUodmFsdWUpKSByZXR1cm4g
dmFsdWU7CisgICAgfQorICAgIC8vIElmIGB0b1N0cmluZ2AgaXMgYSB2YWxpZCBmdW5jdGlvbiBh
bmQgbm90IHRoZSBvbmUgZnJvbSBgT2JqZWN0LnByb3RvdHlwZWAgdXNlIHRoYXQKKyAgICBpZiAo
aGFzQ3VzdG9tVG9TdHJpbmcodmFsdWUpKSB7CisgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5n
KCk7CisgICAgICBpZiAoaXNQcmltaXRpdmUodmFsdWUpKSByZXR1cm4gdmFsdWU7CisgICAgfQor
ICAgIC8vIFdlIGhhdmUgYSBiYXNpYyBvYmplY3Qgc28gd2UgdXNlIHRoZSBwb3NpdGlvbiBvZiB0
aGUgb2JqZWN0IGluIHRoZSBjb2xsZWN0aW9uCisgICAgcmV0dXJuIGluZGV4OworICB9CisKKyAg
ZnVuY3Rpb24gZ2V0UHJlZGljYXRlVmFsdWUodmFsdWUsIGluZGV4KSB7CisgICAgdmFyIHR5cGUg
PSB0eXBlb2YgdmFsdWU7CisgICAgaWYgKHZhbHVlID09PSBudWxsKSB7CisgICAgICB0eXBlID0g
J3N0cmluZyc7CisgICAgICB2YWx1ZSA9ICdudWxsJzsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT09
ICdzdHJpbmcnKSB7CisgICAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7CisgICAgfSBl
bHNlIGlmICh0eXBlID09PSAnb2JqZWN0JykgeworICAgICAgdmFsdWUgPSBvYmplY3RWYWx1ZSh2
YWx1ZSwgaW5kZXgpOworICAgIH0KKyAgICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIHR5cGU6IHR5
cGUgfTsKKyAgfQorCisgIGZ1bmN0aW9uIGNvbXBhcmUodjEsIHYyKSB7CisgICAgdmFyIHJlc3Vs
dCA9IDA7CisgICAgaWYgKHYxLnR5cGUgPT09IHYyLnR5cGUpIHsKKyAgICAgIGlmICh2MS52YWx1
ZSAhPT0gdjIudmFsdWUpIHsKKyAgICAgICAgcmVzdWx0ID0gdjEudmFsdWUgPCB2Mi52YWx1ZSA/
IC0xIDogMTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgcmVzdWx0ID0gdjEudHlwZSA8
IHYyLnR5cGUgPyAtMSA6IDE7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisgIH0KK30KKwor
ZnVuY3Rpb24gbmdEaXJlY3RpdmUoZGlyZWN0aXZlKSB7CisgIGlmIChpc0Z1bmN0aW9uKGRpcmVj
dGl2ZSkpIHsKKyAgICBkaXJlY3RpdmUgPSB7CisgICAgICBsaW5rOiBkaXJlY3RpdmUKKyAgICB9
OworICB9CisgIGRpcmVjdGl2ZS5yZXN0cmljdCA9IGRpcmVjdGl2ZS5yZXN0cmljdCB8fCAnQUMn
OworICByZXR1cm4gdmFsdWVGbihkaXJlY3RpdmUpOworfQorCisvKioKKyAqIEBuZ2RvYyBkaXJl
Y3RpdmUKKyAqIEBuYW1lIGEKKyAqIEByZXN0cmljdCBFCisgKgorICogQGRlc2NyaXB0aW9uCisg
KiBNb2RpZmllcyB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUgaHRtbCBBIHRhZyBzbyB0aGF0
IHRoZSBkZWZhdWx0IGFjdGlvbiBpcyBwcmV2ZW50ZWQgd2hlbgorICogdGhlIGhyZWYgYXR0cmli
dXRlIGlzIGVtcHR5LgorICoKKyAqIFRoaXMgY2hhbmdlIHBlcm1pdHMgdGhlIGVhc3kgY3JlYXRp
b24gb2YgYWN0aW9uIGxpbmtzIHdpdGggdGhlIGBuZ0NsaWNrYCBkaXJlY3RpdmUKKyAqIHdpdGhv
dXQgY2hhbmdpbmcgdGhlIGxvY2F0aW9uIG9yIGNhdXNpbmcgcGFnZSByZWxvYWRzLCBlLmcuOgor
ICogYDxhIGhyZWY9IiIgbmctY2xpY2s9Imxpc3QuYWRkSXRlbSgpIj5BZGQgSXRlbTwvYT5gCisg
Ki8KK3ZhciBodG1sQW5jaG9yRGlyZWN0aXZlID0gdmFsdWVGbih7CisgIHJlc3RyaWN0OiAnRScs
CisgIGNvbXBpbGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHIpIHsKKyAgICBpZiAoIWF0dHIuaHJl
ZiAmJiAhYXR0ci54bGlua0hyZWYpIHsKKyAgICAgIHJldHVybiBmdW5jdGlvbihzY29wZSwgZWxl
bWVudCkgeworICAgICAgICAvLyBJZiB0aGUgbGlua2VkIGVsZW1lbnQgaXMgbm90IGFuIGFuY2hv
ciB0YWcgYW55bW9yZSwgZG8gbm90aGluZworICAgICAgICBpZiAoZWxlbWVudFswXS5ub2RlTmFt
ZS50b0xvd2VyQ2FzZSgpICE9PSAnYScpIHJldHVybjsKKworICAgICAgICAvLyBTVkdBRWxlbWVu
dCBkb2VzIG5vdCB1c2UgdGhlIGhyZWYgYXR0cmlidXRlLCBidXQgcmF0aGVyIHRoZSAneGxpbmtI
cmVmJyBhdHRyaWJ1dGUuCisgICAgICAgIHZhciBocmVmID0gdG9TdHJpbmcuY2FsbChlbGVtZW50
LnByb3AoJ2hyZWYnKSkgPT09ICdbb2JqZWN0IFNWR0FuaW1hdGVkU3RyaW5nXScgPworICAgICAg
ICAgICAgICAgICAgICd4bGluazpocmVmJyA6ICdocmVmJzsKKyAgICAgICAgZWxlbWVudC5vbign
Y2xpY2snLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgIC8vIGlmIHdlIGhhdmUgbm8gaHJl
ZiB1cmwsIHRoZW4gZG9uJ3QgbmF2aWdhdGUgYW55d2hlcmUuCisgICAgICAgICAgaWYgKCFlbGVt
ZW50LmF0dHIoaHJlZikpIHsKKyAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cisg
ICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH07CisgICAgfQorICB9Cit9KTsKKworLyoq
CisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBuZ0hyZWYKKyAqIEByZXN0cmljdCBBCisg
KiBAcHJpb3JpdHkgOTkKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFVzaW5nIEFuZ3VsYXIgbWFy
a3VwIGxpa2UgYHt7aGFzaH19YCBpbiBhbiBocmVmIGF0dHJpYnV0ZSB3aWxsCisgKiBtYWtlIHRo
ZSBsaW5rIGdvIHRvIHRoZSB3cm9uZyBVUkwgaWYgdGhlIHVzZXIgY2xpY2tzIGl0IGJlZm9yZQor
ICogQW5ndWxhciBoYXMgYSBjaGFuY2UgdG8gcmVwbGFjZSB0aGUgYHt7aGFzaH19YCBtYXJrdXAg
d2l0aCBpdHMKKyAqIHZhbHVlLiBVbnRpbCBBbmd1bGFyIHJlcGxhY2VzIHRoZSBtYXJrdXAgdGhl
IGxpbmsgd2lsbCBiZSBicm9rZW4KKyAqIGFuZCB3aWxsIG1vc3QgbGlrZWx5IHJldHVybiBhIDQw
NCBlcnJvci4gVGhlIGBuZ0hyZWZgIGRpcmVjdGl2ZQorICogc29sdmVzIHRoaXMgcHJvYmxlbS4K
KyAqCisgKiBUaGUgd3Jvbmcgd2F5IHRvIHdyaXRlIGl0OgorICogYGBgaHRtbAorICogPGEgaHJl
Zj0iaHR0cDovL3d3dy5ncmF2YXRhci5jb20vYXZhdGFyL3t7aGFzaH19Ij5saW5rMTwvYT4KKyAq
IGBgYAorICoKKyAqIFRoZSBjb3JyZWN0IHdheSB0byB3cml0ZSBpdDoKKyAqIGBgYGh0bWwKKyAq
IDxhIG5nLWhyZWY9Imh0dHA6Ly93d3cuZ3JhdmF0YXIuY29tL2F2YXRhci97e2hhc2h9fSI+bGlu
azE8L2E+CisgKiBgYGAKKyAqCisgKiBAZWxlbWVudCBBCisgKiBAcGFyYW0ge3RlbXBsYXRlfSBu
Z0hyZWYgYW55IHN0cmluZyB3aGljaCBjYW4gY29udGFpbiBge3t9fWAgbWFya3VwLgorICoKKyAq
IEBleGFtcGxlCisgKiBUaGlzIGV4YW1wbGUgc2hvd3MgdmFyaW91cyBjb21iaW5hdGlvbnMgb2Yg
YGhyZWZgLCBgbmctaHJlZmAgYW5kIGBuZy1jbGlja2AgYXR0cmlidXRlcworICogaW4gbGlua3Mg
YW5kIHRoZWlyIGRpZmZlcmVudCBiZWhhdmlvcnM6CisgICAgPGV4YW1wbGU+CisgICAgICA8Zmls
ZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgICAgPGlucHV0IG5nLW1vZGVsPSJ2YWx1ZSIgLz48
YnIgLz4KKyAgICAgICAgPGEgaWQ9ImxpbmstMSIgaHJlZiBuZy1jbGljaz0idmFsdWUgPSAxIj5s
aW5rIDE8L2E+IChsaW5rLCBkb24ndCByZWxvYWQpPGJyIC8+CisgICAgICAgIDxhIGlkPSJsaW5r
LTIiIGhyZWY9IiIgbmctY2xpY2s9InZhbHVlID0gMiI+bGluayAyPC9hPiAobGluaywgZG9uJ3Qg
cmVsb2FkKTxiciAvPgorICAgICAgICA8YSBpZD0ibGluay0zIiBuZy1ocmVmPSIve3snMTIzJ319
Ij5saW5rIDM8L2E+IChsaW5rLCByZWxvYWQhKTxiciAvPgorICAgICAgICA8YSBpZD0ibGluay00
IiBocmVmPSIiIG5hbWU9Inh4IiBuZy1jbGljaz0idmFsdWUgPSA0Ij5hbmNob3I8L2E+IChsaW5r
LCBkb24ndCByZWxvYWQpPGJyIC8+CisgICAgICAgIDxhIGlkPSJsaW5rLTUiIG5hbWU9Inh4eCIg
bmctY2xpY2s9InZhbHVlID0gNSI+YW5jaG9yPC9hPiAobm8gbGluayk8YnIgLz4KKyAgICAgICAg
PGEgaWQ9ImxpbmstNiIgbmctaHJlZj0ie3t2YWx1ZX19Ij5saW5rPC9hPiAobGluaywgY2hhbmdl
IGxvY2F0aW9uKQorICAgICAgPC9maWxlPgorICAgICAgPGZpbGUgbmFtZT0icHJvdHJhY3Rvci5q
cyIgdHlwZT0icHJvdHJhY3RvciI+CisgICAgICAgIGl0KCdzaG91bGQgZXhlY3V0ZSBuZy1jbGlj
ayBidXQgbm90IHJlbG9hZCB3aGVuIGhyZWYgd2l0aG91dCB2YWx1ZScsIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgIGVsZW1lbnQoYnkuaWQoJ2xpbmstMScpKS5jbGljaygpOworICAgICAgICAgIGV4
cGVjdChlbGVtZW50KGJ5Lm1vZGVsKCd2YWx1ZScpKS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpLnRv
RXF1YWwoJzEnKTsKKyAgICAgICAgICBleHBlY3QoZWxlbWVudChieS5pZCgnbGluay0xJykpLmdl
dEF0dHJpYnV0ZSgnaHJlZicpKS50b0JlKCcnKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQo
J3Nob3VsZCBleGVjdXRlIG5nLWNsaWNrIGJ1dCBub3QgcmVsb2FkIHdoZW4gaHJlZiBlbXB0eSBz
dHJpbmcnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICBlbGVtZW50KGJ5LmlkKCdsaW5rLTInKSku
Y2xpY2soKTsKKyAgICAgICAgICBleHBlY3QoZWxlbWVudChieS5tb2RlbCgndmFsdWUnKSkuZ2V0
QXR0cmlidXRlKCd2YWx1ZScpKS50b0VxdWFsKCcyJyk7CisgICAgICAgICAgZXhwZWN0KGVsZW1l
bnQoYnkuaWQoJ2xpbmstMicpKS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSkudG9CZSgnJyk7CisgICAg
ICAgIH0pOworCisgICAgICAgIGl0KCdzaG91bGQgZXhlY3V0ZSBuZy1jbGljayBhbmQgY2hhbmdl
IHVybCB3aGVuIG5nLWhyZWYgc3BlY2lmaWVkJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgZXhw
ZWN0KGVsZW1lbnQoYnkuaWQoJ2xpbmstMycpKS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSkudG9NYXRj
aCgvXC8xMjMkLyk7CisKKyAgICAgICAgICBlbGVtZW50KGJ5LmlkKCdsaW5rLTMnKSkuY2xpY2so
KTsKKworICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIG5hdmlnYXRlIGF3YXkgZnJvbSBh
biBBbmd1bGFyIHBhZ2UsIHNvIHdlIG5lZWQKKyAgICAgICAgICAvLyB0byB1c2UgYnJvd3Nlci5k
cml2ZXIgdG8gZ2V0IHRoZSBiYXNlIHdlYmRyaXZlci4KKworICAgICAgICAgIGJyb3dzZXIud2Fp
dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiBicm93c2VyLmRyaXZlci5nZXRDdXJy
ZW50VXJsKCkudGhlbihmdW5jdGlvbih1cmwpIHsKKyAgICAgICAgICAgICAgcmV0dXJuIHVybC5t
YXRjaCgvXC8xMjMkLyk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICB9LCA1MDAwLCAncGFn
ZSBzaG91bGQgbmF2aWdhdGUgdG8gLzEyMycpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgn
c2hvdWxkIGV4ZWN1dGUgbmctY2xpY2sgYnV0IG5vdCByZWxvYWQgd2hlbiBocmVmIGVtcHR5IHN0
cmluZyBhbmQgbmFtZSBzcGVjaWZpZWQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICBlbGVtZW50
KGJ5LmlkKCdsaW5rLTQnKSkuY2xpY2soKTsKKyAgICAgICAgICBleHBlY3QoZWxlbWVudChieS5t
b2RlbCgndmFsdWUnKSkuZ2V0QXR0cmlidXRlKCd2YWx1ZScpKS50b0VxdWFsKCc0Jyk7CisgICAg
ICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ2xpbmstNCcpKS5nZXRBdHRyaWJ1dGUoJ2hyZWYn
KSkudG9CZSgnJyk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdzaG91bGQgZXhlY3V0ZSBu
Zy1jbGljayBidXQgbm90IHJlbG9hZCB3aGVuIG5vIGhyZWYgYnV0IG5hbWUgc3BlY2lmaWVkJywg
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgZWxlbWVudChieS5pZCgnbGluay01JykpLmNsaWNrKCk7
CisgICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkubW9kZWwoJ3ZhbHVlJykpLmdldEF0dHJpYnV0
ZSgndmFsdWUnKSkudG9FcXVhbCgnNScpOworICAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5Lmlk
KCdsaW5rLTUnKSkuZ2V0QXR0cmlidXRlKCdocmVmJykpLnRvQmUobnVsbCk7CisgICAgICAgIH0p
OworCisgICAgICAgIGl0KCdzaG91bGQgb25seSBjaGFuZ2UgdXJsIHdoZW4gb25seSBuZy1ocmVm
JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgZWxlbWVudChieS5tb2RlbCgndmFsdWUnKSkuY2xl
YXIoKTsKKyAgICAgICAgICBlbGVtZW50KGJ5Lm1vZGVsKCd2YWx1ZScpKS5zZW5kS2V5cygnNicp
OworICAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmlkKCdsaW5rLTYnKSkuZ2V0QXR0cmlidXRl
KCdocmVmJykpLnRvTWF0Y2goL1wvNiQvKTsKKworICAgICAgICAgIGVsZW1lbnQoYnkuaWQoJ2xp
bmstNicpKS5jbGljaygpOworCisgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgbmF2aWdh
dGUgYXdheSBmcm9tIGFuIEFuZ3VsYXIgcGFnZSwgc28gd2UgbmVlZAorICAgICAgICAgIC8vIHRv
IHVzZSBicm93c2VyLmRyaXZlciB0byBnZXQgdGhlIGJhc2Ugd2ViZHJpdmVyLgorICAgICAgICAg
IGJyb3dzZXIud2FpdChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiBicm93c2VyLmRy
aXZlci5nZXRDdXJyZW50VXJsKCkudGhlbihmdW5jdGlvbih1cmwpIHsKKyAgICAgICAgICAgICAg
cmV0dXJuIHVybC5tYXRjaCgvXC82JC8pOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgfSwg
NTAwMCwgJ3BhZ2Ugc2hvdWxkIG5hdmlnYXRlIHRvIC82Jyk7CisgICAgICAgIH0pOworICAgICAg
PC9maWxlPgorICAgIDwvZXhhbXBsZT4KKyAqLworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUK
KyAqIEBuYW1lIG5nU3JjCisgKiBAcmVzdHJpY3QgQQorICogQHByaW9yaXR5IDk5CisgKgorICog
QGRlc2NyaXB0aW9uCisgKiBVc2luZyBBbmd1bGFyIG1hcmt1cCBsaWtlIGB7e2hhc2h9fWAgaW4g
YSBgc3JjYCBhdHRyaWJ1dGUgZG9lc24ndAorICogd29yayByaWdodDogVGhlIGJyb3dzZXIgd2ls
bCBmZXRjaCBmcm9tIHRoZSBVUkwgd2l0aCB0aGUgbGl0ZXJhbAorICogdGV4dCBge3toYXNofX1g
IHVudGlsIEFuZ3VsYXIgcmVwbGFjZXMgdGhlIGV4cHJlc3Npb24gaW5zaWRlCisgKiBge3toYXNo
fX1gLiBUaGUgYG5nU3JjYCBkaXJlY3RpdmUgc29sdmVzIHRoaXMgcHJvYmxlbS4KKyAqCisgKiBU
aGUgYnVnZ3kgd2F5IHRvIHdyaXRlIGl0OgorICogYGBgaHRtbAorICogPGltZyBzcmM9Imh0dHA6
Ly93d3cuZ3JhdmF0YXIuY29tL2F2YXRhci97e2hhc2h9fSIgYWx0PSJEZXNjcmlwdGlvbiIvPgor
ICogYGBgCisgKgorICogVGhlIGNvcnJlY3Qgd2F5IHRvIHdyaXRlIGl0OgorICogYGBgaHRtbAor
ICogPGltZyBuZy1zcmM9Imh0dHA6Ly93d3cuZ3JhdmF0YXIuY29tL2F2YXRhci97e2hhc2h9fSIg
YWx0PSJEZXNjcmlwdGlvbiIgLz4KKyAqIGBgYAorICoKKyAqIEBlbGVtZW50IElNRworICogQHBh
cmFtIHt0ZW1wbGF0ZX0gbmdTcmMgYW55IHN0cmluZyB3aGljaCBjYW4gY29udGFpbiBge3t9fWAg
bWFya3VwLgorICovCisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgbmdTcmNz
ZXQKKyAqIEByZXN0cmljdCBBCisgKiBAcHJpb3JpdHkgOTkKKyAqCisgKiBAZGVzY3JpcHRpb24K
KyAqIFVzaW5nIEFuZ3VsYXIgbWFya3VwIGxpa2UgYHt7aGFzaH19YCBpbiBhIGBzcmNzZXRgIGF0
dHJpYnV0ZSBkb2Vzbid0CisgKiB3b3JrIHJpZ2h0OiBUaGUgYnJvd3NlciB3aWxsIGZldGNoIGZy
b20gdGhlIFVSTCB3aXRoIHRoZSBsaXRlcmFsCisgKiB0ZXh0IGB7e2hhc2h9fWAgdW50aWwgQW5n
dWxhciByZXBsYWNlcyB0aGUgZXhwcmVzc2lvbiBpbnNpZGUKKyAqIGB7e2hhc2h9fWAuIFRoZSBg
bmdTcmNzZXRgIGRpcmVjdGl2ZSBzb2x2ZXMgdGhpcyBwcm9ibGVtLgorICoKKyAqIFRoZSBidWdn
eSB3YXkgdG8gd3JpdGUgaXQ6CisgKiBgYGBodG1sCisgKiA8aW1nIHNyY3NldD0iaHR0cDovL3d3
dy5ncmF2YXRhci5jb20vYXZhdGFyL3t7aGFzaH19IDJ4IiBhbHQ9IkRlc2NyaXB0aW9uIi8+Cisg
KiBgYGAKKyAqCisgKiBUaGUgY29ycmVjdCB3YXkgdG8gd3JpdGUgaXQ6CisgKiBgYGBodG1sCisg
KiA8aW1nIG5nLXNyY3NldD0iaHR0cDovL3d3dy5ncmF2YXRhci5jb20vYXZhdGFyL3t7aGFzaH19
IDJ4IiBhbHQ9IkRlc2NyaXB0aW9uIiAvPgorICogYGBgCisgKgorICogQGVsZW1lbnQgSU1HCisg
KiBAcGFyYW0ge3RlbXBsYXRlfSBuZ1NyY3NldCBhbnkgc3RyaW5nIHdoaWNoIGNhbiBjb250YWlu
IGB7e319YCBtYXJrdXAuCisgKi8KKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFt
ZSBuZ0Rpc2FibGVkCisgKiBAcmVzdHJpY3QgQQorICogQHByaW9yaXR5IDEwMAorICoKKyAqIEBk
ZXNjcmlwdGlvbgorICoKKyAqIFRoaXMgZGlyZWN0aXZlIHNldHMgdGhlIGBkaXNhYmxlZGAgYXR0
cmlidXRlIG9uIHRoZSBlbGVtZW50IGlmIHRoZQorICoge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24g
ZXhwcmVzc2lvbn0gaW5zaWRlIGBuZ0Rpc2FibGVkYCBldmFsdWF0ZXMgdG8gdHJ1dGh5LgorICoK
KyAqIEEgc3BlY2lhbCBkaXJlY3RpdmUgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgY2Fubm90IHVz
ZSBpbnRlcnBvbGF0aW9uIGluc2lkZSB0aGUgYGRpc2FibGVkYAorICogYXR0cmlidXRlLiAgVGhl
IGZvbGxvd2luZyBleGFtcGxlIHdvdWxkIG1ha2UgdGhlIGJ1dHRvbiBlbmFibGVkIG9uIENocm9t
ZS9GaXJlZm94CisgKiBidXQgbm90IG9uIG9sZGVyIElFczoKKyAqCisgKiBgYGBodG1sCisgKiA8
IS0tIFNlZSBiZWxvdyBmb3IgYW4gZXhhbXBsZSBvZiBuZy1kaXNhYmxlZCBiZWluZyB1c2VkIGNv
cnJlY3RseSAtLT4KKyAqIDxkaXYgbmctaW5pdD0iaXNEaXNhYmxlZCA9IGZhbHNlIj4KKyAqICA8
YnV0dG9uIGRpc2FibGVkPSJ7e2lzRGlzYWJsZWR9fSI+RGlzYWJsZWQ8L2J1dHRvbj4KKyAqIDwv
ZGl2PgorICogYGBgCisgKgorICogVGhpcyBpcyBiZWNhdXNlIHRoZSBIVE1MIHNwZWNpZmljYXRp
b24gZG9lcyBub3QgcmVxdWlyZSBicm93c2VycyB0byBwcmVzZXJ2ZSB0aGUgdmFsdWVzIG9mCisg
KiBib29sZWFuIGF0dHJpYnV0ZXMgc3VjaCBhcyBgZGlzYWJsZWRgIChUaGVpciBwcmVzZW5jZSBt
ZWFucyB0cnVlIGFuZCB0aGVpciBhYnNlbmNlIG1lYW5zIGZhbHNlLikKKyAqIElmIHdlIHB1dCBh
biBBbmd1bGFyIGludGVycG9sYXRpb24gZXhwcmVzc2lvbiBpbnRvIHN1Y2ggYW4gYXR0cmlidXRl
IHRoZW4gdGhlCisgKiBiaW5kaW5nIGluZm9ybWF0aW9uIHdvdWxkIGJlIGxvc3Qgd2hlbiB0aGUg
YnJvd3NlciByZW1vdmVzIHRoZSBhdHRyaWJ1dGUuCisgKgorICogQGV4YW1wbGUKKyAgICA8ZXhh
bXBsZT4KKyAgICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICAgICA8bGFiZWw+Q2xp
Y2sgbWUgdG8gdG9nZ2xlOiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5nLW1vZGVsPSJjaGVja2Vk
Ij48L2xhYmVsPjxici8+CisgICAgICAgIDxidXR0b24gbmctbW9kZWw9ImJ1dHRvbiIgbmctZGlz
YWJsZWQ9ImNoZWNrZWQiPkJ1dHRvbjwvYnV0dG9uPgorICAgICAgPC9maWxlPgorICAgICAgPGZp
bGUgbmFtZT0icHJvdHJhY3Rvci5qcyIgdHlwZT0icHJvdHJhY3RvciI+CisgICAgICAgIGl0KCdz
aG91bGQgdG9nZ2xlIGJ1dHRvbicsIGZ1bmN0aW9uKCkgeworICAgICAgICAgIGV4cGVjdChlbGVt
ZW50KGJ5LmNzcygnYnV0dG9uJykpLmdldEF0dHJpYnV0ZSgnZGlzYWJsZWQnKSkudG9CZUZhbHN5
KCk7CisgICAgICAgICAgZWxlbWVudChieS5tb2RlbCgnY2hlY2tlZCcpKS5jbGljaygpOworICAg
ICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmNzcygnYnV0dG9uJykpLmdldEF0dHJpYnV0ZSgnZGlz
YWJsZWQnKSkudG9CZVRydXRoeSgpOworICAgICAgICB9KTsKKyAgICAgIDwvZmlsZT4KKyAgICA8
L2V4YW1wbGU+CisgKgorICogQGVsZW1lbnQgSU5QVVQKKyAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0g
bmdEaXNhYmxlZCBJZiB0aGUge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0gaXMg
dHJ1dGh5LAorICogICAgIHRoZW4gdGhlIGBkaXNhYmxlZGAgYXR0cmlidXRlIHdpbGwgYmUgc2V0
IG9uIHRoZSBlbGVtZW50CisgKi8KKworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBu
YW1lIG5nQ2hlY2tlZAorICogQHJlc3RyaWN0IEEKKyAqIEBwcmlvcml0eSAxMDAKKyAqCisgKiBA
ZGVzY3JpcHRpb24KKyAqIFNldHMgdGhlIGBjaGVja2VkYCBhdHRyaWJ1dGUgb24gdGhlIGVsZW1l
bnQsIGlmIHRoZSBleHByZXNzaW9uIGluc2lkZSBgbmdDaGVja2VkYCBpcyB0cnV0aHkuCisgKgor
ICogTm90ZSB0aGF0IHRoaXMgZGlyZWN0aXZlIHNob3VsZCBub3QgYmUgdXNlZCB0b2dldGhlciB3
aXRoIHtAbGluayBuZ01vZGVsIGBuZ01vZGVsYH0sCisgKiBhcyB0aGlzIGNhbiBsZWFkIHRvIHVu
ZXhwZWN0ZWQgYmVoYXZpb3IuCisgKgorICogIyMjIFdoeSBkbyB3ZSBuZWVkIGBuZ0NoZWNrZWRg
PworICoKKyAqIFRoZSBIVE1MIHNwZWNpZmljYXRpb24gZG9lcyBub3QgcmVxdWlyZSBicm93c2Vy
cyB0byBwcmVzZXJ2ZSB0aGUgdmFsdWVzIG9mIGJvb2xlYW4gYXR0cmlidXRlcworICogc3VjaCBh
cyBjaGVja2VkLiAoVGhlaXIgcHJlc2VuY2UgbWVhbnMgdHJ1ZSBhbmQgdGhlaXIgYWJzZW5jZSBt
ZWFucyBmYWxzZS4pCisgKiBJZiB3ZSBwdXQgYW4gQW5ndWxhciBpbnRlcnBvbGF0aW9uIGV4cHJl
c3Npb24gaW50byBzdWNoIGFuIGF0dHJpYnV0ZSB0aGVuIHRoZQorICogYmluZGluZyBpbmZvcm1h
dGlvbiB3b3VsZCBiZSBsb3N0IHdoZW4gdGhlIGJyb3dzZXIgcmVtb3ZlcyB0aGUgYXR0cmlidXRl
LgorICogVGhlIGBuZ0NoZWNrZWRgIGRpcmVjdGl2ZSBzb2x2ZXMgdGhpcyBwcm9ibGVtIGZvciB0
aGUgYGNoZWNrZWRgIGF0dHJpYnV0ZS4KKyAqIFRoaXMgY29tcGxlbWVudGFyeSBkaXJlY3RpdmUg
aXMgbm90IHJlbW92ZWQgYnkgdGhlIGJyb3dzZXIgYW5kIHNvIHByb3ZpZGVzCisgKiBhIHBlcm1h
bmVudCByZWxpYWJsZSBwbGFjZSB0byBzdG9yZSB0aGUgYmluZGluZyBpbmZvcm1hdGlvbi4KKyAq
IEBleGFtcGxlCisgICAgPGV4YW1wbGU+CisgICAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4K
KyAgICAgICAgPGxhYmVsPkNoZWNrIG1lIHRvIGNoZWNrIGJvdGg6IDxpbnB1dCB0eXBlPSJjaGVj
a2JveCIgbmctbW9kZWw9Im1hc3RlciI+PC9sYWJlbD48YnIvPgorICAgICAgICA8aW5wdXQgaWQ9
ImNoZWNrU2xhdmUiIHR5cGU9ImNoZWNrYm94IiBuZy1jaGVja2VkPSJtYXN0ZXIiIGFyaWEtbGFi
ZWw9IlNsYXZlIGlucHV0Ij4KKyAgICAgIDwvZmlsZT4KKyAgICAgIDxmaWxlIG5hbWU9InByb3Ry
YWN0b3IuanMiIHR5cGU9InByb3RyYWN0b3IiPgorICAgICAgICBpdCgnc2hvdWxkIGNoZWNrIGJv
dGggY2hlY2tCb3hlcycsIGZ1bmN0aW9uKCkgeworICAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5
LmlkKCdjaGVja1NsYXZlJykpLmdldEF0dHJpYnV0ZSgnY2hlY2tlZCcpKS50b0JlRmFsc3koKTsK
KyAgICAgICAgICBlbGVtZW50KGJ5Lm1vZGVsKCdtYXN0ZXInKSkuY2xpY2soKTsKKyAgICAgICAg
ICBleHBlY3QoZWxlbWVudChieS5pZCgnY2hlY2tTbGF2ZScpKS5nZXRBdHRyaWJ1dGUoJ2NoZWNr
ZWQnKSkudG9CZVRydXRoeSgpOworICAgICAgICB9KTsKKyAgICAgIDwvZmlsZT4KKyAgICA8L2V4
YW1wbGU+CisgKgorICogQGVsZW1lbnQgSU5QVVQKKyAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdD
aGVja2VkIElmIHRoZSB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBleHByZXNzaW9ufSBpcyB0cnV0
aHksCisgKiAgICAgdGhlbiB0aGUgYGNoZWNrZWRgIGF0dHJpYnV0ZSB3aWxsIGJlIHNldCBvbiB0
aGUgZWxlbWVudAorICovCisKKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBu
Z1JlYWRvbmx5CisgKiBAcmVzdHJpY3QgQQorICogQHByaW9yaXR5IDEwMAorICoKKyAqIEBkZXNj
cmlwdGlvbgorICogVGhlIEhUTUwgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCByZXF1aXJlIGJyb3dz
ZXJzIHRvIHByZXNlcnZlIHRoZSB2YWx1ZXMgb2YgYm9vbGVhbiBhdHRyaWJ1dGVzCisgKiBzdWNo
IGFzIHJlYWRvbmx5LiAoVGhlaXIgcHJlc2VuY2UgbWVhbnMgdHJ1ZSBhbmQgdGhlaXIgYWJzZW5j
ZSBtZWFucyBmYWxzZS4pCisgKiBJZiB3ZSBwdXQgYW4gQW5ndWxhciBpbnRlcnBvbGF0aW9uIGV4
cHJlc3Npb24gaW50byBzdWNoIGFuIGF0dHJpYnV0ZSB0aGVuIHRoZQorICogYmluZGluZyBpbmZv
cm1hdGlvbiB3b3VsZCBiZSBsb3N0IHdoZW4gdGhlIGJyb3dzZXIgcmVtb3ZlcyB0aGUgYXR0cmli
dXRlLgorICogVGhlIGBuZ1JlYWRvbmx5YCBkaXJlY3RpdmUgc29sdmVzIHRoaXMgcHJvYmxlbSBm
b3IgdGhlIGByZWFkb25seWAgYXR0cmlidXRlLgorICogVGhpcyBjb21wbGVtZW50YXJ5IGRpcmVj
dGl2ZSBpcyBub3QgcmVtb3ZlZCBieSB0aGUgYnJvd3NlciBhbmQgc28gcHJvdmlkZXMKKyAqIGEg
cGVybWFuZW50IHJlbGlhYmxlIHBsYWNlIHRvIHN0b3JlIHRoZSBiaW5kaW5nIGluZm9ybWF0aW9u
LgorICogQGV4YW1wbGUKKyAgICA8ZXhhbXBsZT4KKyAgICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0
bWwiPgorICAgICAgICA8bGFiZWw+Q2hlY2sgbWUgdG8gbWFrZSB0ZXh0IHJlYWRvbmx5OiA8aW5w
dXQgdHlwZT0iY2hlY2tib3giIG5nLW1vZGVsPSJjaGVja2VkIj48L2xhYmVsPjxici8+CisgICAg
ICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuZy1yZWFkb25seT0iY2hlY2tlZCIgdmFsdWU9IkknbSBB
bmd1bGFyIiBhcmlhLWxhYmVsPSJSZWFkb25seSBmaWVsZCIgLz4KKyAgICAgIDwvZmlsZT4KKyAg
ICAgIDxmaWxlIG5hbWU9InByb3RyYWN0b3IuanMiIHR5cGU9InByb3RyYWN0b3IiPgorICAgICAg
ICBpdCgnc2hvdWxkIHRvZ2dsZSByZWFkb25seSBhdHRyJywgZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgZXhwZWN0KGVsZW1lbnQoYnkuY3NzKCdbdHlwZT0idGV4dCJdJykpLmdldEF0dHJpYnV0ZSgn
cmVhZG9ubHknKSkudG9CZUZhbHN5KCk7CisgICAgICAgICAgZWxlbWVudChieS5tb2RlbCgnY2hl
Y2tlZCcpKS5jbGljaygpOworICAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmNzcygnW3R5cGU9
InRleHQiXScpKS5nZXRBdHRyaWJ1dGUoJ3JlYWRvbmx5JykpLnRvQmVUcnV0aHkoKTsKKyAgICAg
ICAgfSk7CisgICAgICA8L2ZpbGU+CisgICAgPC9leGFtcGxlPgorICoKKyAqIEBlbGVtZW50IElO
UFVUCisgKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nUmVhZG9ubHkgSWYgdGhlIHtAbGluayBndWlk
ZS9leHByZXNzaW9uIGV4cHJlc3Npb259IGlzIHRydXRoeSwKKyAqICAgICB0aGVuIHNwZWNpYWwg
YXR0cmlidXRlICJyZWFkb25seSIgd2lsbCBiZSBzZXQgb24gdGhlIGVsZW1lbnQKKyAqLworCisK
Ky8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgbmdTZWxlY3RlZAorICogQHJlc3Ry
aWN0IEEKKyAqIEBwcmlvcml0eSAxMDAKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFRoZSBIVE1M
IHNwZWNpZmljYXRpb24gZG9lcyBub3QgcmVxdWlyZSBicm93c2VycyB0byBwcmVzZXJ2ZSB0aGUg
dmFsdWVzIG9mIGJvb2xlYW4gYXR0cmlidXRlcworICogc3VjaCBhcyBzZWxlY3RlZC4gKFRoZWly
IHByZXNlbmNlIG1lYW5zIHRydWUgYW5kIHRoZWlyIGFic2VuY2UgbWVhbnMgZmFsc2UuKQorICog
SWYgd2UgcHV0IGFuIEFuZ3VsYXIgaW50ZXJwb2xhdGlvbiBleHByZXNzaW9uIGludG8gc3VjaCBh
biBhdHRyaWJ1dGUgdGhlbiB0aGUKKyAqIGJpbmRpbmcgaW5mb3JtYXRpb24gd291bGQgYmUgbG9z
dCB3aGVuIHRoZSBicm93c2VyIHJlbW92ZXMgdGhlIGF0dHJpYnV0ZS4KKyAqIFRoZSBgbmdTZWxl
Y3RlZGAgZGlyZWN0aXZlIHNvbHZlcyB0aGlzIHByb2JsZW0gZm9yIHRoZSBgc2VsZWN0ZWRgIGF0
dHJpYnV0ZS4KKyAqIFRoaXMgY29tcGxlbWVudGFyeSBkaXJlY3RpdmUgaXMgbm90IHJlbW92ZWQg
YnkgdGhlIGJyb3dzZXIgYW5kIHNvIHByb3ZpZGVzCisgKiBhIHBlcm1hbmVudCByZWxpYWJsZSBw
bGFjZSB0byBzdG9yZSB0aGUgYmluZGluZyBpbmZvcm1hdGlvbi4KKyAqCisgKiBAZXhhbXBsZQor
ICAgIDxleGFtcGxlPgorICAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAgICAgIDxs
YWJlbD5DaGVjayBtZSB0byBzZWxlY3Q6IDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmctbW9kZWw9
InNlbGVjdGVkIj48L2xhYmVsPjxici8+CisgICAgICAgIDxzZWxlY3QgYXJpYS1sYWJlbD0ibmdT
ZWxlY3RlZCBkZW1vIj4KKyAgICAgICAgICA8b3B0aW9uPkhlbGxvITwvb3B0aW9uPgorICAgICAg
ICAgIDxvcHRpb24gaWQ9ImdyZWV0IiBuZy1zZWxlY3RlZD0ic2VsZWN0ZWQiPkdyZWV0aW5ncyE8
L29wdGlvbj4KKyAgICAgICAgPC9zZWxlY3Q+CisgICAgICA8L2ZpbGU+CisgICAgICA8ZmlsZSBu
YW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFjdG9yIj4KKyAgICAgICAgaXQoJ3Nob3Vs
ZCBzZWxlY3QgR3JlZXRpbmdzIScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgIGV4cGVjdChlbGVt
ZW50KGJ5LmlkKCdncmVldCcpKS5nZXRBdHRyaWJ1dGUoJ3NlbGVjdGVkJykpLnRvQmVGYWxzeSgp
OworICAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ3NlbGVjdGVkJykpLmNsaWNrKCk7CisgICAg
ICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ2dyZWV0JykpLmdldEF0dHJpYnV0ZSgnc2VsZWN0
ZWQnKSkudG9CZVRydXRoeSgpOworICAgICAgICB9KTsKKyAgICAgIDwvZmlsZT4KKyAgICA8L2V4
YW1wbGU+CisgKgorICogQGVsZW1lbnQgT1BUSU9OCisgKiBAcGFyYW0ge2V4cHJlc3Npb259IG5n
U2VsZWN0ZWQgSWYgdGhlIHtAbGluayBndWlkZS9leHByZXNzaW9uIGV4cHJlc3Npb259IGlzIHRy
dXRoeSwKKyAqICAgICB0aGVuIHNwZWNpYWwgYXR0cmlidXRlICJzZWxlY3RlZCIgd2lsbCBiZSBz
ZXQgb24gdGhlIGVsZW1lbnQKKyAqLworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBu
YW1lIG5nT3BlbgorICogQHJlc3RyaWN0IEEKKyAqIEBwcmlvcml0eSAxMDAKKyAqCisgKiBAZGVz
Y3JpcHRpb24KKyAqIFRoZSBIVE1MIHNwZWNpZmljYXRpb24gZG9lcyBub3QgcmVxdWlyZSBicm93
c2VycyB0byBwcmVzZXJ2ZSB0aGUgdmFsdWVzIG9mIGJvb2xlYW4gYXR0cmlidXRlcworICogc3Vj
aCBhcyBvcGVuLiAoVGhlaXIgcHJlc2VuY2UgbWVhbnMgdHJ1ZSBhbmQgdGhlaXIgYWJzZW5jZSBt
ZWFucyBmYWxzZS4pCisgKiBJZiB3ZSBwdXQgYW4gQW5ndWxhciBpbnRlcnBvbGF0aW9uIGV4cHJl
c3Npb24gaW50byBzdWNoIGFuIGF0dHJpYnV0ZSB0aGVuIHRoZQorICogYmluZGluZyBpbmZvcm1h
dGlvbiB3b3VsZCBiZSBsb3N0IHdoZW4gdGhlIGJyb3dzZXIgcmVtb3ZlcyB0aGUgYXR0cmlidXRl
LgorICogVGhlIGBuZ09wZW5gIGRpcmVjdGl2ZSBzb2x2ZXMgdGhpcyBwcm9ibGVtIGZvciB0aGUg
YG9wZW5gIGF0dHJpYnV0ZS4KKyAqIFRoaXMgY29tcGxlbWVudGFyeSBkaXJlY3RpdmUgaXMgbm90
IHJlbW92ZWQgYnkgdGhlIGJyb3dzZXIgYW5kIHNvIHByb3ZpZGVzCisgKiBhIHBlcm1hbmVudCBy
ZWxpYWJsZSBwbGFjZSB0byBzdG9yZSB0aGUgYmluZGluZyBpbmZvcm1hdGlvbi4KKyAqIEBleGFt
cGxlCisgICAgIDxleGFtcGxlPgorICAgICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAg
ICAgICAgPGxhYmVsPkNoZWNrIG1lIGNoZWNrIG11bHRpcGxlOiA8aW5wdXQgdHlwZT0iY2hlY2ti
b3giIG5nLW1vZGVsPSJvcGVuIj48L2xhYmVsPjxici8+CisgICAgICAgICA8ZGV0YWlscyBpZD0i
ZGV0YWlscyIgbmctb3Blbj0ib3BlbiI+CisgICAgICAgICAgICA8c3VtbWFyeT5TaG93L0hpZGUg
bWU8L3N1bW1hcnk+CisgICAgICAgICA8L2RldGFpbHM+CisgICAgICAgPC9maWxlPgorICAgICAg
IDxmaWxlIG5hbWU9InByb3RyYWN0b3IuanMiIHR5cGU9InByb3RyYWN0b3IiPgorICAgICAgICAg
aXQoJ3Nob3VsZCB0b2dnbGUgb3BlbicsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICBleHBlY3Qo
ZWxlbWVudChieS5pZCgnZGV0YWlscycpKS5nZXRBdHRyaWJ1dGUoJ29wZW4nKSkudG9CZUZhbHN5
KCk7CisgICAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ29wZW4nKSkuY2xpY2soKTsKKyAgICAg
ICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ2RldGFpbHMnKSkuZ2V0QXR0cmlidXRlKCdvcGVu
JykpLnRvQmVUcnV0aHkoKTsKKyAgICAgICAgIH0pOworICAgICAgIDwvZmlsZT4KKyAgICAgPC9l
eGFtcGxlPgorICoKKyAqIEBlbGVtZW50IERFVEFJTFMKKyAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0g
bmdPcGVuIElmIHRoZSB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBleHByZXNzaW9ufSBpcyB0cnV0
aHksCisgKiAgICAgdGhlbiBzcGVjaWFsIGF0dHJpYnV0ZSAib3BlbiIgd2lsbCBiZSBzZXQgb24g
dGhlIGVsZW1lbnQKKyAqLworCit2YXIgbmdBdHRyaWJ1dGVBbGlhc0RpcmVjdGl2ZXMgPSB7fTsK
KworLy8gYm9vbGVhbiBhdHRycyBhcmUgZXZhbHVhdGVkCitmb3JFYWNoKEJPT0xFQU5fQVRUUiwg
ZnVuY3Rpb24ocHJvcE5hbWUsIGF0dHJOYW1lKSB7CisgIC8vIGJpbmRpbmcgdG8gbXVsdGlwbGUg
aXMgbm90IHN1cHBvcnRlZAorICBpZiAocHJvcE5hbWUgPT0gIm11bHRpcGxlIikgcmV0dXJuOwor
CisgIGZ1bmN0aW9uIGRlZmF1bHRMaW5rRm4oc2NvcGUsIGVsZW1lbnQsIGF0dHIpIHsKKyAgICBz
Y29wZS4kd2F0Y2goYXR0cltub3JtYWxpemVkXSwgZnVuY3Rpb24gbmdCb29sZWFuQXR0cldhdGNo
QWN0aW9uKHZhbHVlKSB7CisgICAgICBhdHRyLiRzZXQoYXR0ck5hbWUsICEhdmFsdWUpOworICAg
IH0pOworICB9CisKKyAgdmFyIG5vcm1hbGl6ZWQgPSBkaXJlY3RpdmVOb3JtYWxpemUoJ25nLScg
KyBhdHRyTmFtZSk7CisgIHZhciBsaW5rRm4gPSBkZWZhdWx0TGlua0ZuOworCisgIGlmIChwcm9w
TmFtZSA9PT0gJ2NoZWNrZWQnKSB7CisgICAgbGlua0ZuID0gZnVuY3Rpb24oc2NvcGUsIGVsZW1l
bnQsIGF0dHIpIHsKKyAgICAgIC8vIGVuc3VyaW5nIG5nQ2hlY2tlZCBkb2Vzbid0IGludGVyZmVy
ZSB3aXRoIG5nTW9kZWwgd2hlbiBib3RoIGFyZSBzZXQgb24gdGhlIHNhbWUgaW5wdXQKKyAgICAg
IGlmIChhdHRyLm5nTW9kZWwgIT09IGF0dHJbbm9ybWFsaXplZF0pIHsKKyAgICAgICAgZGVmYXVs
dExpbmtGbihzY29wZSwgZWxlbWVudCwgYXR0cik7CisgICAgICB9CisgICAgfTsKKyAgfQorCisg
IG5nQXR0cmlidXRlQWxpYXNEaXJlY3RpdmVzW25vcm1hbGl6ZWRdID0gZnVuY3Rpb24oKSB7Cisg
ICAgcmV0dXJuIHsKKyAgICAgIHJlc3RyaWN0OiAnQScsCisgICAgICBwcmlvcml0eTogMTAwLAor
ICAgICAgbGluazogbGlua0ZuCisgICAgfTsKKyAgfTsKK30pOworCisvLyBhbGlhc2VkIGlucHV0
IGF0dHJzIGFyZSBldmFsdWF0ZWQKK2ZvckVhY2goQUxJQVNFRF9BVFRSLCBmdW5jdGlvbihodG1s
QXR0ciwgbmdBdHRyKSB7CisgIG5nQXR0cmlidXRlQWxpYXNEaXJlY3RpdmVzW25nQXR0cl0gPSBm
dW5jdGlvbigpIHsKKyAgICByZXR1cm4geworICAgICAgcHJpb3JpdHk6IDEwMCwKKyAgICAgIGxp
bms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyKSB7CisgICAgICAgIC8vc3BlY2lhbCBj
YXNlIG5nUGF0dGVybiB3aGVuIGEgbGl0ZXJhbCByZWd1bGFyIGV4cHJlc3Npb24gdmFsdWUKKyAg
ICAgICAgLy9pcyB1c2VkIGFzIHRoZSBleHByZXNzaW9uICh0aGlzIHdheSB3ZSBkb24ndCBoYXZl
IHRvIHdhdGNoIGFueXRoaW5nKS4KKyAgICAgICAgaWYgKG5nQXR0ciA9PT0gIm5nUGF0dGVybiIg
JiYgYXR0ci5uZ1BhdHRlcm4uY2hhckF0KDApID09ICIvIikgeworICAgICAgICAgIHZhciBtYXRj
aCA9IGF0dHIubmdQYXR0ZXJuLm1hdGNoKFJFR0VYX1NUUklOR19SRUdFWFApOworICAgICAgICAg
IGlmIChtYXRjaCkgeworICAgICAgICAgICAgYXR0ci4kc2V0KCJuZ1BhdHRlcm4iLCBuZXcgUmVn
RXhwKG1hdGNoWzFdLCBtYXRjaFsyXSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIHNjb3BlLiR3YXRjaChhdHRyW25nQXR0cl0sIGZ1bmN0
aW9uIG5nQXR0ckFsaWFzV2F0Y2hBY3Rpb24odmFsdWUpIHsKKyAgICAgICAgICBhdHRyLiRzZXQo
bmdBdHRyLCB2YWx1ZSk7CisgICAgICAgIH0pOworICAgICAgfQorICAgIH07CisgIH07Cit9KTsK
KworLy8gbmctc3JjLCBuZy1zcmNzZXQsIG5nLWhyZWYgYXJlIGludGVycG9sYXRlZAorZm9yRWFj
aChbJ3NyYycsICdzcmNzZXQnLCAnaHJlZiddLCBmdW5jdGlvbihhdHRyTmFtZSkgeworICB2YXIg
bm9ybWFsaXplZCA9IGRpcmVjdGl2ZU5vcm1hbGl6ZSgnbmctJyArIGF0dHJOYW1lKTsKKyAgbmdB
dHRyaWJ1dGVBbGlhc0RpcmVjdGl2ZXNbbm9ybWFsaXplZF0gPSBmdW5jdGlvbigpIHsKKyAgICBy
ZXR1cm4geworICAgICAgcHJpb3JpdHk6IDk5LCAvLyBpdCBuZWVkcyB0byBydW4gYWZ0ZXIgdGhl
IGF0dHJpYnV0ZXMgYXJlIGludGVycG9sYXRlZAorICAgICAgbGluazogZnVuY3Rpb24oc2NvcGUs
IGVsZW1lbnQsIGF0dHIpIHsKKyAgICAgICAgdmFyIHByb3BOYW1lID0gYXR0ck5hbWUsCisgICAg
ICAgICAgICBuYW1lID0gYXR0ck5hbWU7CisKKyAgICAgICAgaWYgKGF0dHJOYW1lID09PSAnaHJl
ZicgJiYKKyAgICAgICAgICAgIHRvU3RyaW5nLmNhbGwoZWxlbWVudC5wcm9wKCdocmVmJykpID09
PSAnW29iamVjdCBTVkdBbmltYXRlZFN0cmluZ10nKSB7CisgICAgICAgICAgbmFtZSA9ICd4bGlu
a0hyZWYnOworICAgICAgICAgIGF0dHIuJGF0dHJbbmFtZV0gPSAneGxpbms6aHJlZic7CisgICAg
ICAgICAgcHJvcE5hbWUgPSBudWxsOworICAgICAgICB9CisKKyAgICAgICAgYXR0ci4kb2JzZXJ2
ZShub3JtYWxpemVkLCBmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICAgIGlmICghdmFsdWUpIHsK
KyAgICAgICAgICAgIGlmIChhdHRyTmFtZSA9PT0gJ2hyZWYnKSB7CisgICAgICAgICAgICAgIGF0
dHIuJHNldChuYW1lLCBudWxsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICB9CisKKyAgICAgICAgICBhdHRyLiRzZXQobmFtZSwgdmFsdWUpOworCisgICAg
ICAgICAgLy8gb24gSUUsIGlmICJuZzpzcmMiIGRpcmVjdGl2ZSBkZWNsYXJhdGlvbiBpcyB1c2Vk
IGFuZCAic3JjIiBhdHRyaWJ1dGUgZG9lc24ndCBleGlzdAorICAgICAgICAgIC8vIHRoZW4gY2Fs
bGluZyBlbGVtZW50LnNldEF0dHJpYnV0ZSgnc3JjJywgJ2ZvbycpIGRvZXNuJ3QgZG8gYW55dGhp
bmcsIHNvIHdlIG5lZWQKKyAgICAgICAgICAvLyB0byBzZXQgdGhlIHByb3BlcnR5IGFzIHdlbGwg
dG8gYWNoaWV2ZSB0aGUgZGVzaXJlZCBlZmZlY3QuCisgICAgICAgICAgLy8gd2UgdXNlIGF0dHJb
YXR0ck5hbWVdIHZhbHVlIHNpbmNlICRzZXQgY2FuIHNhbml0aXplIHRoZSB1cmwuCisgICAgICAg
ICAgaWYgKG1zaWUgJiYgcHJvcE5hbWUpIGVsZW1lbnQucHJvcChwcm9wTmFtZSwgYXR0cltuYW1l
XSk7CisgICAgICAgIH0pOworICAgICAgfQorICAgIH07CisgIH07Cit9KTsKKworLyogZ2xvYmFs
IC1udWxsRm9ybUN0cmwsIC1TVUJNSVRURURfQ0xBU1MsIGFkZFNldFZhbGlkaXR5TWV0aG9kOiB0
cnVlCisgKi8KK3ZhciBudWxsRm9ybUN0cmwgPSB7CisgICRhZGRDb250cm9sOiBub29wLAorICAk
JHJlbmFtZUNvbnRyb2w6IG51bGxGb3JtUmVuYW1lQ29udHJvbCwKKyAgJHJlbW92ZUNvbnRyb2w6
IG5vb3AsCisgICRzZXRWYWxpZGl0eTogbm9vcCwKKyAgJHNldERpcnR5OiBub29wLAorICAkc2V0
UHJpc3RpbmU6IG5vb3AsCisgICRzZXRTdWJtaXR0ZWQ6IG5vb3AKK30sCitTVUJNSVRURURfQ0xB
U1MgPSAnbmctc3VibWl0dGVkJzsKKworZnVuY3Rpb24gbnVsbEZvcm1SZW5hbWVDb250cm9sKGNv
bnRyb2wsIG5hbWUpIHsKKyAgY29udHJvbC4kbmFtZSA9IG5hbWU7Cit9CisKKy8qKgorICogQG5n
ZG9jIHR5cGUKKyAqIEBuYW1lIGZvcm0uRm9ybUNvbnRyb2xsZXIKKyAqCisgKiBAcHJvcGVydHkg
e2Jvb2xlYW59ICRwcmlzdGluZSBUcnVlIGlmIHVzZXIgaGFzIG5vdCBpbnRlcmFjdGVkIHdpdGgg
dGhlIGZvcm0geWV0LgorICogQHByb3BlcnR5IHtib29sZWFufSAkZGlydHkgVHJ1ZSBpZiB1c2Vy
IGhhcyBhbHJlYWR5IGludGVyYWN0ZWQgd2l0aCB0aGUgZm9ybS4KKyAqIEBwcm9wZXJ0eSB7Ym9v
bGVhbn0gJHZhbGlkIFRydWUgaWYgYWxsIG9mIHRoZSBjb250YWluaW5nIGZvcm1zIGFuZCBjb250
cm9scyBhcmUgdmFsaWQuCisgKiBAcHJvcGVydHkge2Jvb2xlYW59ICRpbnZhbGlkIFRydWUgaWYg
YXQgbGVhc3Qgb25lIGNvbnRhaW5pbmcgY29udHJvbCBvciBmb3JtIGlzIGludmFsaWQuCisgKiBA
cHJvcGVydHkge2Jvb2xlYW59ICRzdWJtaXR0ZWQgVHJ1ZSBpZiB1c2VyIGhhcyBzdWJtaXR0ZWQg
dGhlIGZvcm0gZXZlbiBpZiBpdHMgaW52YWxpZC4KKyAqCisgKiBAcHJvcGVydHkge09iamVjdH0g
JGVycm9yIElzIGFuIG9iamVjdCBoYXNoLCBjb250YWluaW5nIHJlZmVyZW5jZXMgdG8gY29udHJv
bHMgb3IKKyAqICBmb3JtcyB3aXRoIGZhaWxpbmcgdmFsaWRhdG9ycywgd2hlcmU6CisgKgorICog
IC0ga2V5cyBhcmUgdmFsaWRhdGlvbiB0b2tlbnMgKGVycm9yIG5hbWVzKSwKKyAqICAtIHZhbHVl
cyBhcmUgYXJyYXlzIG9mIGNvbnRyb2xzIG9yIGZvcm1zIHRoYXQgaGF2ZSBhIGZhaWxpbmcgdmFs
aWRhdG9yIGZvciBnaXZlbiBlcnJvciBuYW1lLgorICoKKyAqICBCdWlsdC1pbiB2YWxpZGF0aW9u
IHRva2VuczoKKyAqCisgKiAgLSBgZW1haWxgCisgKiAgLSBgbWF4YAorICogIC0gYG1heGxlbmd0
aGAKKyAqICAtIGBtaW5gCisgKiAgLSBgbWlubGVuZ3RoYAorICogIC0gYG51bWJlcmAKKyAqICAt
IGBwYXR0ZXJuYAorICogIC0gYHJlcXVpcmVkYAorICogIC0gYHVybGAKKyAqICAtIGBkYXRlYAor
ICogIC0gYGRhdGV0aW1lbG9jYWxgCisgKiAgLSBgdGltZWAKKyAqICAtIGB3ZWVrYAorICogIC0g
YG1vbnRoYAorICoKKyAqIEBkZXNjcmlwdGlvbgorICogYEZvcm1Db250cm9sbGVyYCBrZWVwcyB0
cmFjayBvZiBhbGwgaXRzIGNvbnRyb2xzIGFuZCBuZXN0ZWQgZm9ybXMgYXMgd2VsbCBhcyB0aGUg
c3RhdGUgb2YgdGhlbSwKKyAqIHN1Y2ggYXMgYmVpbmcgdmFsaWQvaW52YWxpZCBvciBkaXJ0eS9w
cmlzdGluZS4KKyAqCisgKiBFYWNoIHtAbGluayBuZy5kaXJlY3RpdmU6Zm9ybSBmb3JtfSBkaXJl
Y3RpdmUgY3JlYXRlcyBhbiBpbnN0YW5jZQorICogb2YgYEZvcm1Db250cm9sbGVyYC4KKyAqCisg
Ki8KKy8vYXNrcyBmb3IgJHNjb3BlIHRvIGZvb2wgdGhlIEJDIGNvbnRyb2xsZXIgbW9kdWxlCitG
b3JtQ29udHJvbGxlci4kaW5qZWN0ID0gWyckZWxlbWVudCcsICckYXR0cnMnLCAnJHNjb3BlJywg
JyRhbmltYXRlJywgJyRpbnRlcnBvbGF0ZSddOworZnVuY3Rpb24gRm9ybUNvbnRyb2xsZXIoZWxl
bWVudCwgYXR0cnMsICRzY29wZSwgJGFuaW1hdGUsICRpbnRlcnBvbGF0ZSkgeworICB2YXIgZm9y
bSA9IHRoaXMsCisgICAgICBjb250cm9scyA9IFtdOworCisgIHZhciBwYXJlbnRGb3JtID0gZm9y
bS4kJHBhcmVudEZvcm0gPSBlbGVtZW50LnBhcmVudCgpLmNvbnRyb2xsZXIoJ2Zvcm0nKSB8fCBu
dWxsRm9ybUN0cmw7CisKKyAgLy8gaW5pdCBzdGF0ZQorICBmb3JtLiRlcnJvciA9IHt9OworICBm
b3JtLiQkc3VjY2VzcyA9IHt9OworICBmb3JtLiRwZW5kaW5nID0gdW5kZWZpbmVkOworICBmb3Jt
LiRuYW1lID0gJGludGVycG9sYXRlKGF0dHJzLm5hbWUgfHwgYXR0cnMubmdGb3JtIHx8ICcnKSgk
c2NvcGUpOworICBmb3JtLiRkaXJ0eSA9IGZhbHNlOworICBmb3JtLiRwcmlzdGluZSA9IHRydWU7
CisgIGZvcm0uJHZhbGlkID0gdHJ1ZTsKKyAgZm9ybS4kaW52YWxpZCA9IGZhbHNlOworICBmb3Jt
LiRzdWJtaXR0ZWQgPSBmYWxzZTsKKworICBwYXJlbnRGb3JtLiRhZGRDb250cm9sKGZvcm0pOwor
CisgIC8qKgorICAgKiBAbmdkb2MgbWV0aG9kCisgICAqIEBuYW1lIGZvcm0uRm9ybUNvbnRyb2xs
ZXIjJHJvbGxiYWNrVmlld1ZhbHVlCisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBSb2xs
YmFjayBhbGwgZm9ybSBjb250cm9scyBwZW5kaW5nIHVwZGF0ZXMgdG8gdGhlIGAkbW9kZWxWYWx1
ZWAuCisgICAqCisgICAqIFVwZGF0ZXMgbWF5IGJlIHBlbmRpbmcgYnkgYSBkZWJvdW5jZWQgZXZl
bnQgb3IgYmVjYXVzZSB0aGUgaW5wdXQgaXMgd2FpdGluZyBmb3IgYSBzb21lIGZ1dHVyZQorICAg
KiBldmVudCBkZWZpbmVkIGluIGBuZy1tb2RlbC1vcHRpb25zYC4gVGhpcyBtZXRob2QgaXMgdHlw
aWNhbGx5IG5lZWRlZCBieSB0aGUgcmVzZXQgYnV0dG9uIG9mCisgICAqIGEgZm9ybSB0aGF0IHVz
ZXMgYG5nLW1vZGVsLW9wdGlvbnNgIHRvIHBlbmQgdXBkYXRlcy4KKyAgICovCisgIGZvcm0uJHJv
bGxiYWNrVmlld1ZhbHVlID0gZnVuY3Rpb24oKSB7CisgICAgZm9yRWFjaChjb250cm9scywgZnVu
Y3Rpb24oY29udHJvbCkgeworICAgICAgY29udHJvbC4kcm9sbGJhY2tWaWV3VmFsdWUoKTsKKyAg
ICB9KTsKKyAgfTsKKworICAvKioKKyAgICogQG5nZG9jIG1ldGhvZAorICAgKiBAbmFtZSBmb3Jt
LkZvcm1Db250cm9sbGVyIyRjb21taXRWaWV3VmFsdWUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9u
CisgICAqIENvbW1pdCBhbGwgZm9ybSBjb250cm9scyBwZW5kaW5nIHVwZGF0ZXMgdG8gdGhlIGAk
bW9kZWxWYWx1ZWAuCisgICAqCisgICAqIFVwZGF0ZXMgbWF5IGJlIHBlbmRpbmcgYnkgYSBkZWJv
dW5jZWQgZXZlbnQgb3IgYmVjYXVzZSB0aGUgaW5wdXQgaXMgd2FpdGluZyBmb3IgYSBzb21lIGZ1
dHVyZQorICAgKiBldmVudCBkZWZpbmVkIGluIGBuZy1tb2RlbC1vcHRpb25zYC4gVGhpcyBtZXRo
b2QgaXMgcmFyZWx5IG5lZWRlZCBhcyBgTmdNb2RlbENvbnRyb2xsZXJgCisgICAqIHVzdWFsbHkg
aGFuZGxlcyBjYWxsaW5nIHRoaXMgaW4gcmVzcG9uc2UgdG8gaW5wdXQgZXZlbnRzLgorICAgKi8K
KyAgZm9ybS4kY29tbWl0Vmlld1ZhbHVlID0gZnVuY3Rpb24oKSB7CisgICAgZm9yRWFjaChjb250
cm9scywgZnVuY3Rpb24oY29udHJvbCkgeworICAgICAgY29udHJvbC4kY29tbWl0Vmlld1ZhbHVl
KCk7CisgICAgfSk7CisgIH07CisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5h
bWUgZm9ybS5Gb3JtQ29udHJvbGxlciMkYWRkQ29udHJvbAorICAgKgorICAgKiBAZGVzY3JpcHRp
b24KKyAgICogUmVnaXN0ZXIgYSBjb250cm9sIHdpdGggdGhlIGZvcm0uCisgICAqCisgICAqIElu
cHV0IGVsZW1lbnRzIHVzaW5nIG5nTW9kZWxDb250cm9sbGVyIGRvIHRoaXMgYXV0b21hdGljYWxs
eSB3aGVuIHRoZXkgYXJlIGxpbmtlZC4KKyAgICovCisgIGZvcm0uJGFkZENvbnRyb2wgPSBmdW5j
dGlvbihjb250cm9sKSB7CisgICAgLy8gQnJlYWtpbmcgY2hhbmdlIC0gYmVmb3JlLCBpbnB1dHMg
d2hvc2UgbmFtZSB3YXMgImhhc093blByb3BlcnR5IiB3ZXJlIHF1aWV0bHkgaWdub3JlZAorICAg
IC8vIGFuZCBub3QgYWRkZWQgdG8gdGhlIHNjb3BlLiAgTm93IHdlIHRocm93IGFuIGVycm9yLgor
ICAgIGFzc2VydE5vdEhhc093blByb3BlcnR5KGNvbnRyb2wuJG5hbWUsICdpbnB1dCcpOworICAg
IGNvbnRyb2xzLnB1c2goY29udHJvbCk7CisKKyAgICBpZiAoY29udHJvbC4kbmFtZSkgeworICAg
ICAgZm9ybVtjb250cm9sLiRuYW1lXSA9IGNvbnRyb2w7CisgICAgfQorICB9OworCisgIC8vIFBy
aXZhdGUgQVBJOiByZW5hbWUgYSBmb3JtIGNvbnRyb2wKKyAgZm9ybS4kJHJlbmFtZUNvbnRyb2wg
PSBmdW5jdGlvbihjb250cm9sLCBuZXdOYW1lKSB7CisgICAgdmFyIG9sZE5hbWUgPSBjb250cm9s
LiRuYW1lOworCisgICAgaWYgKGZvcm1bb2xkTmFtZV0gPT09IGNvbnRyb2wpIHsKKyAgICAgIGRl
bGV0ZSBmb3JtW29sZE5hbWVdOworICAgIH0KKyAgICBmb3JtW25ld05hbWVdID0gY29udHJvbDsK
KyAgICBjb250cm9sLiRuYW1lID0gbmV3TmFtZTsKKyAgfTsKKworICAvKioKKyAgICogQG5nZG9j
IG1ldGhvZAorICAgKiBAbmFtZSBmb3JtLkZvcm1Db250cm9sbGVyIyRyZW1vdmVDb250cm9sCisg
ICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBEZXJlZ2lzdGVyIGEgY29udHJvbCBmcm9tIHRo
ZSBmb3JtLgorICAgKgorICAgKiBJbnB1dCBlbGVtZW50cyB1c2luZyBuZ01vZGVsQ29udHJvbGxl
ciBkbyB0aGlzIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGV5IGFyZSBkZXN0cm95ZWQuCisgICAqLwor
ICBmb3JtLiRyZW1vdmVDb250cm9sID0gZnVuY3Rpb24oY29udHJvbCkgeworICAgIGlmIChjb250
cm9sLiRuYW1lICYmIGZvcm1bY29udHJvbC4kbmFtZV0gPT09IGNvbnRyb2wpIHsKKyAgICAgIGRl
bGV0ZSBmb3JtW2NvbnRyb2wuJG5hbWVdOworICAgIH0KKyAgICBmb3JFYWNoKGZvcm0uJHBlbmRp
bmcsIGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7CisgICAgICBmb3JtLiRzZXRWYWxpZGl0eShuYW1l
LCBudWxsLCBjb250cm9sKTsKKyAgICB9KTsKKyAgICBmb3JFYWNoKGZvcm0uJGVycm9yLCBmdW5j
dGlvbih2YWx1ZSwgbmFtZSkgeworICAgICAgZm9ybS4kc2V0VmFsaWRpdHkobmFtZSwgbnVsbCwg
Y29udHJvbCk7CisgICAgfSk7CisgICAgZm9yRWFjaChmb3JtLiQkc3VjY2VzcywgZnVuY3Rpb24o
dmFsdWUsIG5hbWUpIHsKKyAgICAgIGZvcm0uJHNldFZhbGlkaXR5KG5hbWUsIG51bGwsIGNvbnRy
b2wpOworICAgIH0pOworCisgICAgYXJyYXlSZW1vdmUoY29udHJvbHMsIGNvbnRyb2wpOworICB9
OworCisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgZm9ybS5Gb3JtQ29u
dHJvbGxlciMkc2V0VmFsaWRpdHkKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIFNldHMg
dGhlIHZhbGlkaXR5IG9mIGEgZm9ybSBjb250cm9sLgorICAgKgorICAgKiBUaGlzIG1ldGhvZCB3
aWxsIGFsc28gcHJvcGFnYXRlIHRvIHBhcmVudCBmb3Jtcy4KKyAgICovCisgIGFkZFNldFZhbGlk
aXR5TWV0aG9kKHsKKyAgICBjdHJsOiB0aGlzLAorICAgICRlbGVtZW50OiBlbGVtZW50LAorICAg
IHNldDogZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSwgY29udHJvbGxlcikgeworICAgICAgdmFy
IGxpc3QgPSBvYmplY3RbcHJvcGVydHldOworICAgICAgaWYgKCFsaXN0KSB7CisgICAgICAgIG9i
amVjdFtwcm9wZXJ0eV0gPSBbY29udHJvbGxlcl07CisgICAgICB9IGVsc2UgeworICAgICAgICB2
YXIgaW5kZXggPSBsaXN0LmluZGV4T2YoY29udHJvbGxlcik7CisgICAgICAgIGlmIChpbmRleCA9
PT0gLTEpIHsKKyAgICAgICAgICBsaXN0LnB1c2goY29udHJvbGxlcik7CisgICAgICAgIH0KKyAg
ICAgIH0KKyAgICB9LAorICAgIHVuc2V0OiBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5LCBjb250
cm9sbGVyKSB7CisgICAgICB2YXIgbGlzdCA9IG9iamVjdFtwcm9wZXJ0eV07CisgICAgICBpZiAo
IWxpc3QpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgYXJyYXlSZW1vdmUobGlz
dCwgY29udHJvbGxlcik7CisgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDApIHsKKyAgICAgICAg
ZGVsZXRlIG9iamVjdFtwcm9wZXJ0eV07CisgICAgICB9CisgICAgfSwKKyAgICBwYXJlbnRGb3Jt
OiBwYXJlbnRGb3JtLAorICAgICRhbmltYXRlOiAkYW5pbWF0ZQorICB9KTsKKworICAvKioKKyAg
ICogQG5nZG9jIG1ldGhvZAorICAgKiBAbmFtZSBmb3JtLkZvcm1Db250cm9sbGVyIyRzZXREaXJ0
eQorICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAgICogU2V0cyB0aGUgZm9ybSB0byBhIGRpcnR5
IHN0YXRlLgorICAgKgorICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIHRvIGFkZCB0aGUg
J25nLWRpcnR5JyBjbGFzcyBhbmQgc2V0IHRoZSBmb3JtIHRvIGEgZGlydHkKKyAgICogc3RhdGUg
KG5nLWRpcnR5IGNsYXNzKS4gVGhpcyBtZXRob2Qgd2lsbCBhbHNvIHByb3BhZ2F0ZSB0byBwYXJl
bnQgZm9ybXMuCisgICAqLworICBmb3JtLiRzZXREaXJ0eSA9IGZ1bmN0aW9uKCkgeworICAgICRh
bmltYXRlLnJlbW92ZUNsYXNzKGVsZW1lbnQsIFBSSVNUSU5FX0NMQVNTKTsKKyAgICAkYW5pbWF0
ZS5hZGRDbGFzcyhlbGVtZW50LCBESVJUWV9DTEFTUyk7CisgICAgZm9ybS4kZGlydHkgPSB0cnVl
OworICAgIGZvcm0uJHByaXN0aW5lID0gZmFsc2U7CisgICAgcGFyZW50Rm9ybS4kc2V0RGlydHko
KTsKKyAgfTsKKworICAvKioKKyAgICogQG5nZG9jIG1ldGhvZAorICAgKiBAbmFtZSBmb3JtLkZv
cm1Db250cm9sbGVyIyRzZXRQcmlzdGluZQorICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAgICog
U2V0cyB0aGUgZm9ybSB0byBpdHMgcHJpc3RpbmUgc3RhdGUuCisgICAqCisgICAqIFRoaXMgbWV0
aG9kIGNhbiBiZSBjYWxsZWQgdG8gcmVtb3ZlIHRoZSAnbmctZGlydHknIGNsYXNzIGFuZCBzZXQg
dGhlIGZvcm0gdG8gaXRzIHByaXN0aW5lCisgICAqIHN0YXRlIChuZy1wcmlzdGluZSBjbGFzcyku
IFRoaXMgbWV0aG9kIHdpbGwgYWxzbyBwcm9wYWdhdGUgdG8gYWxsIHRoZSBjb250cm9scyBjb250
YWluZWQKKyAgICogaW4gdGhpcyBmb3JtLgorICAgKgorICAgKiBTZXR0aW5nIGEgZm9ybSBiYWNr
IHRvIGEgcHJpc3RpbmUgc3RhdGUgaXMgb2Z0ZW4gdXNlZnVsIHdoZW4gd2Ugd2FudCB0byAncmV1
c2UnIGEgZm9ybSBhZnRlcgorICAgKiBzYXZpbmcgb3IgcmVzZXR0aW5nIGl0LgorICAgKi8KKyAg
Zm9ybS4kc2V0UHJpc3RpbmUgPSBmdW5jdGlvbigpIHsKKyAgICAkYW5pbWF0ZS5zZXRDbGFzcyhl
bGVtZW50LCBQUklTVElORV9DTEFTUywgRElSVFlfQ0xBU1MgKyAnICcgKyBTVUJNSVRURURfQ0xB
U1MpOworICAgIGZvcm0uJGRpcnR5ID0gZmFsc2U7CisgICAgZm9ybS4kcHJpc3RpbmUgPSB0cnVl
OworICAgIGZvcm0uJHN1Ym1pdHRlZCA9IGZhbHNlOworICAgIGZvckVhY2goY29udHJvbHMsIGZ1
bmN0aW9uKGNvbnRyb2wpIHsKKyAgICAgIGNvbnRyb2wuJHNldFByaXN0aW5lKCk7CisgICAgfSk7
CisgIH07CisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgZm9ybS5Gb3Jt
Q29udHJvbGxlciMkc2V0VW50b3VjaGVkCisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBT
ZXRzIHRoZSBmb3JtIHRvIGl0cyB1bnRvdWNoZWQgc3RhdGUuCisgICAqCisgICAqIFRoaXMgbWV0
aG9kIGNhbiBiZSBjYWxsZWQgdG8gcmVtb3ZlIHRoZSAnbmctdG91Y2hlZCcgY2xhc3MgYW5kIHNl
dCB0aGUgZm9ybSBjb250cm9scyB0byB0aGVpcgorICAgKiB1bnRvdWNoZWQgc3RhdGUgKG5nLXVu
dG91Y2hlZCBjbGFzcykuCisgICAqCisgICAqIFNldHRpbmcgYSBmb3JtIGNvbnRyb2xzIGJhY2sg
dG8gdGhlaXIgdW50b3VjaGVkIHN0YXRlIGlzIG9mdGVuIHVzZWZ1bCB3aGVuIHNldHRpbmcgdGhl
IGZvcm0KKyAgICogYmFjayB0byBpdHMgcHJpc3RpbmUgc3RhdGUuCisgICAqLworICBmb3JtLiRz
ZXRVbnRvdWNoZWQgPSBmdW5jdGlvbigpIHsKKyAgICBmb3JFYWNoKGNvbnRyb2xzLCBmdW5jdGlv
bihjb250cm9sKSB7CisgICAgICBjb250cm9sLiRzZXRVbnRvdWNoZWQoKTsKKyAgICB9KTsKKyAg
fTsKKworICAvKioKKyAgICogQG5nZG9jIG1ldGhvZAorICAgKiBAbmFtZSBmb3JtLkZvcm1Db250
cm9sbGVyIyRzZXRTdWJtaXR0ZWQKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIFNldHMg
dGhlIGZvcm0gdG8gaXRzIHN1Ym1pdHRlZCBzdGF0ZS4KKyAgICovCisgIGZvcm0uJHNldFN1Ym1p
dHRlZCA9IGZ1bmN0aW9uKCkgeworICAgICRhbmltYXRlLmFkZENsYXNzKGVsZW1lbnQsIFNVQk1J
VFRFRF9DTEFTUyk7CisgICAgZm9ybS4kc3VibWl0dGVkID0gdHJ1ZTsKKyAgICBwYXJlbnRGb3Jt
LiRzZXRTdWJtaXR0ZWQoKTsKKyAgfTsKK30KKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisg
KiBAbmFtZSBuZ0Zvcm0KKyAqIEByZXN0cmljdCBFQUMKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAq
IE5lc3RhYmxlIGFsaWFzIG9mIHtAbGluayBuZy5kaXJlY3RpdmU6Zm9ybSBgZm9ybWB9IGRpcmVj
dGl2ZS4gSFRNTAorICogZG9lcyBub3QgYWxsb3cgbmVzdGluZyBvZiBmb3JtIGVsZW1lbnRzLiBJ
dCBpcyB1c2VmdWwgdG8gbmVzdCBmb3JtcywgZm9yIGV4YW1wbGUgaWYgdGhlIHZhbGlkaXR5IG9m
IGEKKyAqIHN1Yi1ncm91cCBvZiBjb250cm9scyBuZWVkcyB0byBiZSBkZXRlcm1pbmVkLgorICoK
KyAqIE5vdGU6IHRoZSBwdXJwb3NlIG9mIGBuZ0Zvcm1gIGlzIHRvIGdyb3VwIGNvbnRyb2xzLAor
ICogYnV0IG5vdCB0byBiZSBhIHJlcGxhY2VtZW50IGZvciB0aGUgYDxmb3JtPmAgdGFnIHdpdGgg
YWxsIG9mIGl0cyBjYXBhYmlsaXRpZXMKKyAqIChlLmcuIHBvc3RpbmcgdG8gdGhlIHNlcnZlciwg
Li4uKS4KKyAqCisgKiBAcGFyYW0ge3N0cmluZz19IG5nRm9ybXxuYW1lIE5hbWUgb2YgdGhlIGZv
cm0uIElmIHNwZWNpZmllZCwgdGhlIGZvcm0gY29udHJvbGxlciB3aWxsIGJlIHB1Ymxpc2hlZCBp
bnRvCisgKiAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRlZCBzY29wZSwgdW5kZXIgdGhpcyBu
YW1lLgorICoKKyAqLworCisgLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBmb3Jt
CisgKiBAcmVzdHJpY3QgRQorICoKKyAqIEBkZXNjcmlwdGlvbgorICogRGlyZWN0aXZlIHRoYXQg
aW5zdGFudGlhdGVzCisgKiB7QGxpbmsgZm9ybS5Gb3JtQ29udHJvbGxlciBGb3JtQ29udHJvbGxl
cn0uCisgKgorICogSWYgdGhlIGBuYW1lYCBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLCB0aGUgZm9y
bSBjb250cm9sbGVyIGlzIHB1Ymxpc2hlZCBvbnRvIHRoZSBjdXJyZW50IHNjb3BlIHVuZGVyCisg
KiB0aGlzIG5hbWUuCisgKgorICogIyBBbGlhczoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0Zvcm0g
YG5nRm9ybWB9CisgKgorICogSW4gQW5ndWxhciwgZm9ybXMgY2FuIGJlIG5lc3RlZC4gVGhpcyBt
ZWFucyB0aGF0IHRoZSBvdXRlciBmb3JtIGlzIHZhbGlkIHdoZW4gYWxsIG9mIHRoZSBjaGlsZAor
ICogZm9ybXMgYXJlIHZhbGlkIGFzIHdlbGwuIEhvd2V2ZXIsIGJyb3dzZXJzIGRvIG5vdCBhbGxv
dyBuZXN0aW5nIG9mIGA8Zm9ybT5gIGVsZW1lbnRzLCBzbworICogQW5ndWxhciBwcm92aWRlcyB0
aGUge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0Zvcm0gYG5nRm9ybWB9IGRpcmVjdGl2ZSB3aGljaCBi
ZWhhdmVzIGlkZW50aWNhbGx5IHRvCisgKiBgPGZvcm0+YCBidXQgY2FuIGJlIG5lc3RlZC4gIFRo
aXMgYWxsb3dzIHlvdSB0byBoYXZlIG5lc3RlZCBmb3Jtcywgd2hpY2ggaXMgdmVyeSB1c2VmdWwg
d2hlbgorICogdXNpbmcgQW5ndWxhciB2YWxpZGF0aW9uIGRpcmVjdGl2ZXMgaW4gZm9ybXMgdGhh
dCBhcmUgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIHVzaW5nIHRoZQorICoge0BsaW5rIG5nLmRpcmVj
dGl2ZTpuZ1JlcGVhdCBgbmdSZXBlYXRgfSBkaXJlY3RpdmUuIFNpbmNlIHlvdSBjYW5ub3QgZHlu
YW1pY2FsbHkgZ2VuZXJhdGUgdGhlIGBuYW1lYAorICogYXR0cmlidXRlIG9mIGlucHV0IGVsZW1l
bnRzIHVzaW5nIGludGVycG9sYXRpb24sIHlvdSBoYXZlIHRvIHdyYXAgZWFjaCBzZXQgb2YgcmVw
ZWF0ZWQgaW5wdXRzIGluIGFuCisgKiBgbmdGb3JtYCBkaXJlY3RpdmUgYW5kIG5lc3QgdGhlc2Ug
aW4gYW4gb3V0ZXIgYGZvcm1gIGVsZW1lbnQuCisgKgorICoKKyAqICMgQ1NTIGNsYXNzZXMKKyAq
ICAtIGBuZy12YWxpZGAgaXMgc2V0IGlmIHRoZSBmb3JtIGlzIHZhbGlkLgorICogIC0gYG5nLWlu
dmFsaWRgIGlzIHNldCBpZiB0aGUgZm9ybSBpcyBpbnZhbGlkLgorICogIC0gYG5nLXByaXN0aW5l
YCBpcyBzZXQgaWYgdGhlIGZvcm0gaXMgcHJpc3RpbmUuCisgKiAgLSBgbmctZGlydHlgIGlzIHNl
dCBpZiB0aGUgZm9ybSBpcyBkaXJ0eS4KKyAqICAtIGBuZy1zdWJtaXR0ZWRgIGlzIHNldCBpZiB0
aGUgZm9ybSB3YXMgc3VibWl0dGVkLgorICoKKyAqIEtlZXAgaW4gbWluZCB0aGF0IG5nQW5pbWF0
ZSBjYW4gZGV0ZWN0IGVhY2ggb2YgdGhlc2UgY2xhc3NlcyB3aGVuIGFkZGVkIGFuZCByZW1vdmVk
LgorICoKKyAqCisgKiAjIFN1Ym1pdHRpbmcgYSBmb3JtIGFuZCBwcmV2ZW50aW5nIHRoZSBkZWZh
dWx0IGFjdGlvbgorICoKKyAqIFNpbmNlIHRoZSByb2xlIG9mIGZvcm1zIGluIGNsaWVudC1zaWRl
IEFuZ3VsYXIgYXBwbGljYXRpb25zIGlzIGRpZmZlcmVudCB0aGFuIGluIGNsYXNzaWNhbAorICog
cm91bmR0cmlwIGFwcHMsIGl0IGlzIGRlc2lyYWJsZSBmb3IgdGhlIGJyb3dzZXIgbm90IHRvIHRy
YW5zbGF0ZSB0aGUgZm9ybSBzdWJtaXNzaW9uIGludG8gYSBmdWxsCisgKiBwYWdlIHJlbG9hZCB0
aGF0IHNlbmRzIHRoZSBkYXRhIHRvIHRoZSBzZXJ2ZXIuIEluc3RlYWQgc29tZSBqYXZhc2NyaXB0
IGxvZ2ljIHNob3VsZCBiZSB0cmlnZ2VyZWQKKyAqIHRvIGhhbmRsZSB0aGUgZm9ybSBzdWJtaXNz
aW9uIGluIGFuIGFwcGxpY2F0aW9uLXNwZWNpZmljIHdheS4KKyAqCisgKiBGb3IgdGhpcyByZWFz
b24sIEFuZ3VsYXIgcHJldmVudHMgdGhlIGRlZmF1bHQgYWN0aW9uIChmb3JtIHN1Ym1pc3Npb24g
dG8gdGhlIHNlcnZlcikgdW5sZXNzIHRoZQorICogYDxmb3JtPmAgZWxlbWVudCBoYXMgYW4gYGFj
dGlvbmAgYXR0cmlidXRlIHNwZWNpZmllZC4KKyAqCisgKiBZb3UgY2FuIHVzZSBvbmUgb2YgdGhl
IGZvbGxvd2luZyB0d28gd2F5cyB0byBzcGVjaWZ5IHdoYXQgamF2YXNjcmlwdCBtZXRob2Qgc2hv
dWxkIGJlIGNhbGxlZCB3aGVuCisgKiBhIGZvcm0gaXMgc3VibWl0dGVkOgorICoKKyAqIC0ge0Bs
aW5rIG5nLmRpcmVjdGl2ZTpuZ1N1Ym1pdCBuZ1N1Ym1pdH0gZGlyZWN0aXZlIG9uIHRoZSBmb3Jt
IGVsZW1lbnQKKyAqIC0ge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0NsaWNrIG5nQ2xpY2t9IGRpcmVj
dGl2ZSBvbiB0aGUgZmlyc3QKKyAgKiAgYnV0dG9uIG9yIGlucHV0IGZpZWxkIG9mIHR5cGUgc3Vi
bWl0IChpbnB1dFt0eXBlPXN1Ym1pdF0pCisgKgorICogVG8gcHJldmVudCBkb3VibGUgZXhlY3V0
aW9uIG9mIHRoZSBoYW5kbGVyLCB1c2Ugb25seSBvbmUgb2YgdGhlIHtAbGluayBuZy5kaXJlY3Rp
dmU6bmdTdWJtaXQgbmdTdWJtaXR9CisgKiBvciB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nQ2xpY2sg
bmdDbGlja30gZGlyZWN0aXZlcy4KKyAqIFRoaXMgaXMgYmVjYXVzZSBvZiB0aGUgZm9sbG93aW5n
IGZvcm0gc3VibWlzc2lvbiBydWxlcyBpbiB0aGUgSFRNTCBzcGVjaWZpY2F0aW9uOgorICoKKyAq
IC0gSWYgYSBmb3JtIGhhcyBvbmx5IG9uZSBpbnB1dCBmaWVsZCB0aGVuIGhpdHRpbmcgZW50ZXIg
aW4gdGhpcyBmaWVsZCB0cmlnZ2VycyBmb3JtIHN1Ym1pdAorICogKGBuZ1N1Ym1pdGApCisgKiAt
IGlmIGEgZm9ybSBoYXMgMisgaW5wdXQgZmllbGRzIGFuZCBubyBidXR0b25zIG9yIGlucHV0W3R5
cGU9c3VibWl0XSB0aGVuIGhpdHRpbmcgZW50ZXIKKyAqIGRvZXNuJ3QgdHJpZ2dlciBzdWJtaXQK
KyAqIC0gaWYgYSBmb3JtIGhhcyBvbmUgb3IgbW9yZSBpbnB1dCBmaWVsZHMgYW5kIG9uZSBvciBt
b3JlIGJ1dHRvbnMgb3IgaW5wdXRbdHlwZT1zdWJtaXRdIHRoZW4KKyAqIGhpdHRpbmcgZW50ZXIg
aW4gYW55IG9mIHRoZSBpbnB1dCBmaWVsZHMgd2lsbCB0cmlnZ2VyIHRoZSBjbGljayBoYW5kbGVy
IG9uIHRoZSAqZmlyc3QqIGJ1dHRvbiBvcgorICogaW5wdXRbdHlwZT1zdWJtaXRdIChgbmdDbGlj
a2ApICphbmQqIGEgc3VibWl0IGhhbmRsZXIgb24gdGhlIGVuY2xvc2luZyBmb3JtIChgbmdTdWJt
aXRgKQorICoKKyAqIEFueSBwZW5kaW5nIGBuZ01vZGVsT3B0aW9uc2AgY2hhbmdlcyB3aWxsIHRh
a2UgcGxhY2UgaW1tZWRpYXRlbHkgd2hlbiBhbiBlbmNsb3NpbmcgZm9ybSBpcworICogc3VibWl0
dGVkLiBOb3RlIHRoYXQgYG5nQ2xpY2tgIGV2ZW50cyB3aWxsIG9jY3VyIGJlZm9yZSB0aGUgbW9k
ZWwgaXMgdXBkYXRlZC4gVXNlIGBuZ1N1Ym1pdGAKKyAqIHRvIGhhdmUgYWNjZXNzIHRvIHRoZSB1
cGRhdGVkIG1vZGVsLgorICoKKyAqICMjIEFuaW1hdGlvbiBIb29rcworICoKKyAqIEFuaW1hdGlv
bnMgaW4gbmdGb3JtIGFyZSB0cmlnZ2VyZWQgd2hlbiBhbnkgb2YgdGhlIGFzc29jaWF0ZWQgQ1NT
IGNsYXNzZXMgYXJlIGFkZGVkIGFuZCByZW1vdmVkLgorICogVGhlc2UgY2xhc3NlcyBhcmU6IGAu
bmctcHJpc3RpbmVgLCBgLm5nLWRpcnR5YCwgYC5uZy1pbnZhbGlkYCBhbmQgYC5uZy12YWxpZGAg
YXMgd2VsbCBhcyBhbnkKKyAqIG90aGVyIHZhbGlkYXRpb25zIHRoYXQgYXJlIHBlcmZvcm1lZCB3
aXRoaW4gdGhlIGZvcm0uIEFuaW1hdGlvbnMgaW4gbmdGb3JtIGFyZSBzaW1pbGFyIHRvIGhvdwor
ICogdGhleSB3b3JrIGluIG5nQ2xhc3MgYW5kIGFuaW1hdGlvbnMgY2FuIGJlIGhvb2tlZCBpbnRv
IHVzaW5nIENTUyB0cmFuc2l0aW9ucywga2V5ZnJhbWVzIGFzIHdlbGwKKyAqIGFzIEpTIGFuaW1h
dGlvbnMuCisgKgorICogVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGEgc2ltcGxlIHdheSB0
byB1dGlsaXplIENTUyB0cmFuc2l0aW9ucyB0byBzdHlsZSBhIGZvcm0gZWxlbWVudAorICogdGhh
dCBoYXMgYmVlbiByZW5kZXJlZCBhcyBpbnZhbGlkIGFmdGVyIGl0IGhhcyBiZWVuIHZhbGlkYXRl
ZDoKKyAqCisgKiA8cHJlPgorICogLy9iZSBzdXJlIHRvIGluY2x1ZGUgbmdBbmltYXRlIGFzIGEg
bW9kdWxlIHRvIGhvb2sgaW50byBtb3JlCisgKiAvL2FkdmFuY2VkIGFuaW1hdGlvbnMKKyAqIC5t
eS1mb3JtIHsKKyAqICAgdHJhbnNpdGlvbjowLjVzIGxpbmVhciBhbGw7CisgKiAgIGJhY2tncm91
bmQ6IHdoaXRlOworICogfQorICogLm15LWZvcm0ubmctaW52YWxpZCB7CisgKiAgIGJhY2tncm91
bmQ6IHJlZDsKKyAqICAgY29sb3I6d2hpdGU7CisgKiB9CisgKiA8L3ByZT4KKyAqCisgKiBAZXhh
bXBsZQorICAgIDxleGFtcGxlIGRlcHM9ImFuZ3VsYXItYW5pbWF0ZS5qcyIgYW5pbWF0aW9ucz0i
dHJ1ZSIgZml4QmFzZT0idHJ1ZSIgbW9kdWxlPSJmb3JtRXhhbXBsZSI+CisgICAgICA8ZmlsZSBu
YW1lPSJpbmRleC5odG1sIj4KKyAgICAgICA8c2NyaXB0PgorICAgICAgICAgYW5ndWxhci5tb2R1
bGUoJ2Zvcm1FeGFtcGxlJywgW10pCisgICAgICAgICAgIC5jb250cm9sbGVyKCdGb3JtQ29udHJv
bGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7CisgICAgICAgICAgICAgJHNjb3Bl
LnVzZXJUeXBlID0gJ2d1ZXN0JzsKKyAgICAgICAgICAgfV0pOworICAgICAgIDwvc2NyaXB0Pgor
ICAgICAgIDxzdHlsZT4KKyAgICAgICAgLm15LWZvcm0geworICAgICAgICAgIC13ZWJraXQtdHJh
bnNpdGlvbjphbGwgbGluZWFyIDAuNXM7CisgICAgICAgICAgdHJhbnNpdGlvbjphbGwgbGluZWFy
IDAuNXM7CisgICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CisgICAgICAgIH0KKyAg
ICAgICAgLm15LWZvcm0ubmctaW52YWxpZCB7CisgICAgICAgICAgYmFja2dyb3VuZDogcmVkOwor
ICAgICAgICB9CisgICAgICAgPC9zdHlsZT4KKyAgICAgICA8Zm9ybSBuYW1lPSJteUZvcm0iIG5n
LWNvbnRyb2xsZXI9IkZvcm1Db250cm9sbGVyIiBjbGFzcz0ibXktZm9ybSI+CisgICAgICAgICB1
c2VyVHlwZTogPGlucHV0IG5hbWU9ImlucHV0IiBuZy1tb2RlbD0idXNlclR5cGUiIHJlcXVpcmVk
PgorICAgICAgICAgPHNwYW4gY2xhc3M9ImVycm9yIiBuZy1zaG93PSJteUZvcm0uaW5wdXQuJGVy
cm9yLnJlcXVpcmVkIj5SZXF1aXJlZCE8L3NwYW4+PGJyPgorICAgICAgICAgPGNvZGU+dXNlclR5
cGUgPSB7e3VzZXJUeXBlfX08L2NvZGU+PGJyPgorICAgICAgICAgPGNvZGU+bXlGb3JtLmlucHV0
LiR2YWxpZCA9IHt7bXlGb3JtLmlucHV0LiR2YWxpZH19PC9jb2RlPjxicj4KKyAgICAgICAgIDxj
b2RlPm15Rm9ybS5pbnB1dC4kZXJyb3IgPSB7e215Rm9ybS5pbnB1dC4kZXJyb3J9fTwvY29kZT48
YnI+CisgICAgICAgICA8Y29kZT5teUZvcm0uJHZhbGlkID0ge3tteUZvcm0uJHZhbGlkfX08L2Nv
ZGU+PGJyPgorICAgICAgICAgPGNvZGU+bXlGb3JtLiRlcnJvci5yZXF1aXJlZCA9IHt7ISFteUZv
cm0uJGVycm9yLnJlcXVpcmVkfX08L2NvZGU+PGJyPgorICAgICAgICA8L2Zvcm0+CisgICAgICA8
L2ZpbGU+CisgICAgICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFjdG9y
Ij4KKyAgICAgICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIHRvIG1vZGVsJywgZnVuY3Rpb24oKSB7
CisgICAgICAgICAgdmFyIHVzZXJUeXBlID0gZWxlbWVudChieS5iaW5kaW5nKCd1c2VyVHlwZScp
KTsKKyAgICAgICAgICB2YXIgdmFsaWQgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ215Rm9ybS5pbnB1
dC4kdmFsaWQnKSk7CisKKyAgICAgICAgICBleHBlY3QodXNlclR5cGUuZ2V0VGV4dCgpKS50b0Nv
bnRhaW4oJ2d1ZXN0Jyk7CisgICAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSkudG9Db250
YWluKCd0cnVlJyk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxp
ZCBpZiBlbXB0eScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHZhciB1c2VyVHlwZSA9IGVsZW1l
bnQoYnkuYmluZGluZygndXNlclR5cGUnKSk7CisgICAgICAgICAgdmFyIHZhbGlkID0gZWxlbWVu
dChieS5iaW5kaW5nKCdteUZvcm0uaW5wdXQuJHZhbGlkJykpOworICAgICAgICAgIHZhciB1c2Vy
SW5wdXQgPSBlbGVtZW50KGJ5Lm1vZGVsKCd1c2VyVHlwZScpKTsKKworICAgICAgICAgIHVzZXJJ
bnB1dC5jbGVhcigpOworICAgICAgICAgIHVzZXJJbnB1dC5zZW5kS2V5cygnJyk7CisKKyAgICAg
ICAgICBleHBlY3QodXNlclR5cGUuZ2V0VGV4dCgpKS50b0VxdWFsKCd1c2VyVHlwZSA9Jyk7Cisg
ICAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCdmYWxzZScpOworICAg
ICAgICB9KTsKKyAgICAgIDwvZmlsZT4KKyAgICA8L2V4YW1wbGU+CisgKgorICogQHBhcmFtIHtz
dHJpbmc9fSBuYW1lIE5hbWUgb2YgdGhlIGZvcm0uIElmIHNwZWNpZmllZCwgdGhlIGZvcm0gY29u
dHJvbGxlciB3aWxsIGJlIHB1Ymxpc2hlZCBpbnRvCisgKiAgICAgICAgICAgICAgICAgICAgICAg
cmVsYXRlZCBzY29wZSwgdW5kZXIgdGhpcyBuYW1lLgorICovCit2YXIgZm9ybURpcmVjdGl2ZUZh
Y3RvcnkgPSBmdW5jdGlvbihpc05nRm9ybSkgeworICByZXR1cm4gWyckdGltZW91dCcsIGZ1bmN0
aW9uKCR0aW1lb3V0KSB7CisgICAgdmFyIGZvcm1EaXJlY3RpdmUgPSB7CisgICAgICBuYW1lOiAn
Zm9ybScsCisgICAgICByZXN0cmljdDogaXNOZ0Zvcm0gPyAnRUFDJyA6ICdFJywKKyAgICAgIGNv
bnRyb2xsZXI6IEZvcm1Db250cm9sbGVyLAorICAgICAgY29tcGlsZTogZnVuY3Rpb24gbmdGb3Jt
Q29tcGlsZShmb3JtRWxlbWVudCwgYXR0cikgeworICAgICAgICAvLyBTZXR1cCBpbml0aWFsIHN0
YXRlIG9mIHRoZSBjb250cm9sCisgICAgICAgIGZvcm1FbGVtZW50LmFkZENsYXNzKFBSSVNUSU5F
X0NMQVNTKS5hZGRDbGFzcyhWQUxJRF9DTEFTUyk7CisKKyAgICAgICAgdmFyIG5hbWVBdHRyID0g
YXR0ci5uYW1lID8gJ25hbWUnIDogKGlzTmdGb3JtICYmIGF0dHIubmdGb3JtID8gJ25nRm9ybScg
OiBmYWxzZSk7CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICBwcmU6IGZ1bmN0aW9uIG5n
Rm9ybVByZUxpbmsoc2NvcGUsIGZvcm1FbGVtZW50LCBhdHRyLCBjb250cm9sbGVyKSB7CisgICAg
ICAgICAgICAvLyBpZiBgYWN0aW9uYCBhdHRyIGlzIG5vdCBwcmVzZW50IG9uIHRoZSBmb3JtLCBw
cmV2ZW50IHRoZSBkZWZhdWx0IGFjdGlvbiAoc3VibWlzc2lvbikKKyAgICAgICAgICAgIGlmICgh
KCdhY3Rpb24nIGluIGF0dHIpKSB7CisgICAgICAgICAgICAgIC8vIHdlIGNhbid0IHVzZSBqcSBl
dmVudHMgYmVjYXVzZSBpZiBhIGZvcm0gaXMgZGVzdHJveWVkIGR1cmluZyBzdWJtaXNzaW9uIHRo
ZSBkZWZhdWx0CisgICAgICAgICAgICAgIC8vIGFjdGlvbiBpcyBub3QgcHJldmVudGVkLiBzZWUg
IzEyMzgKKyAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgLy8gSUUgOSBpcyBub3QgYWZm
ZWN0ZWQgYmVjYXVzZSBpdCBkb2Vzbid0IGZpcmUgYSBzdWJtaXQgZXZlbnQgYW5kIHRyeSB0byBk
byBhIGZ1bGwKKyAgICAgICAgICAgICAgLy8gcGFnZSByZWxvYWQgaWYgdGhlIGZvcm0gd2FzIGRl
c3Ryb3llZCBieSBzdWJtaXNzaW9uIG9mIHRoZSBmb3JtIHZpYSBhIGNsaWNrIGhhbmRsZXIKKyAg
ICAgICAgICAgICAgLy8gb24gYSBidXR0b24gaW4gdGhlIGZvcm0uIExvb2tzIGxpa2UgYW4gSUU5
IHNwZWNpZmljIGJ1Zy4KKyAgICAgICAgICAgICAgdmFyIGhhbmRsZUZvcm1TdWJtaXNzaW9uID0g
ZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAgICAgICBzY29wZS4kYXBwbHkoZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLiRjb21taXRWaWV3VmFsdWUoKTsKKyAg
ICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuJHNldFN1Ym1pdHRlZCgpOworICAgICAgICAgICAg
ICAgIH0pOworCisgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAg
ICAgICAgICAgfTsKKworICAgICAgICAgICAgICBhZGRFdmVudExpc3RlbmVyRm4oZm9ybUVsZW1l
bnRbMF0sICdzdWJtaXQnLCBoYW5kbGVGb3JtU3VibWlzc2lvbik7CisKKyAgICAgICAgICAgICAg
Ly8gdW5yZWdpc3RlciB0aGUgcHJldmVudERlZmF1bHQgbGlzdGVuZXIgc28gdGhhdCB3ZSBkb24n
dCBub3QgbGVhayBtZW1vcnkgYnV0IGluIGEKKyAgICAgICAgICAgICAgLy8gd2F5IHRoYXQgd2ls
bCBhY2hpZXZlIHRoZSBwcmV2ZW50aW9uIG9mIHRoZSBkZWZhdWx0IGFjdGlvbi4KKyAgICAgICAg
ICAgICAgZm9ybUVsZW1lbnQub24oJyRkZXN0cm95JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgJHRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICByZW1vdmVFdmVu
dExpc3RlbmVyRm4oZm9ybUVsZW1lbnRbMF0sICdzdWJtaXQnLCBoYW5kbGVGb3JtU3VibWlzc2lv
bik7CisgICAgICAgICAgICAgICAgfSwgMCwgZmFsc2UpOworICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIHBhcmVudEZvcm1DdHJsID0gY29udHJvbGxl
ci4kJHBhcmVudEZvcm07CisKKyAgICAgICAgICAgIGlmIChuYW1lQXR0cikgeworICAgICAgICAg
ICAgICBzZXR0ZXIoc2NvcGUsIGNvbnRyb2xsZXIuJG5hbWUsIGNvbnRyb2xsZXIsIGNvbnRyb2xs
ZXIuJG5hbWUpOworICAgICAgICAgICAgICBhdHRyLiRvYnNlcnZlKG5hbWVBdHRyLCBmdW5jdGlv
bihuZXdWYWx1ZSkgeworICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLiRuYW1lID09PSBu
ZXdWYWx1ZSkgcmV0dXJuOworICAgICAgICAgICAgICAgIHNldHRlcihzY29wZSwgY29udHJvbGxl
ci4kbmFtZSwgdW5kZWZpbmVkLCBjb250cm9sbGVyLiRuYW1lKTsKKyAgICAgICAgICAgICAgICBw
YXJlbnRGb3JtQ3RybC4kJHJlbmFtZUNvbnRyb2woY29udHJvbGxlciwgbmV3VmFsdWUpOworICAg
ICAgICAgICAgICAgIHNldHRlcihzY29wZSwgY29udHJvbGxlci4kbmFtZSwgY29udHJvbGxlciwg
Y29udHJvbGxlci4kbmFtZSk7CisgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZm9ybUVsZW1lbnQub24oJyRkZXN0cm95JywgZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICAgIHBhcmVudEZvcm1DdHJsLiRyZW1vdmVDb250cm9sKGNvbnRyb2xsZXIpOworICAgICAg
ICAgICAgICBpZiAobmFtZUF0dHIpIHsKKyAgICAgICAgICAgICAgICBzZXR0ZXIoc2NvcGUsIGF0
dHJbbmFtZUF0dHJdLCB1bmRlZmluZWQsIGNvbnRyb2xsZXIuJG5hbWUpOworICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgIGV4dGVuZChjb250cm9sbGVyLCBudWxsRm9ybUN0cmwpOyAvL3N0
b3AgcHJvcGFnYXRpbmcgY2hpbGQgZGVzdHJ1Y3Rpb24gaGFuZGxlcnMgdXB3YXJkcworICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgfQorICAgIH07CisKKyAg
ICByZXR1cm4gZm9ybURpcmVjdGl2ZTsKKyAgfV07Cit9OworCit2YXIgZm9ybURpcmVjdGl2ZSA9
IGZvcm1EaXJlY3RpdmVGYWN0b3J5KCk7Cit2YXIgbmdGb3JtRGlyZWN0aXZlID0gZm9ybURpcmVj
dGl2ZUZhY3RvcnkodHJ1ZSk7CisKKy8qIGdsb2JhbCBWQUxJRF9DTEFTUzogZmFsc2UsCisgIElO
VkFMSURfQ0xBU1M6IGZhbHNlLAorICBQUklTVElORV9DTEFTUzogZmFsc2UsCisgIERJUlRZX0NM
QVNTOiBmYWxzZSwKKyAgVU5UT1VDSEVEX0NMQVNTOiBmYWxzZSwKKyAgVE9VQ0hFRF9DTEFTUzog
ZmFsc2UsCisgICRuZ01vZGVsTWluRXJyOiBmYWxzZSwKKyovCisKKy8vIFJlZ2V4IGNvZGUgaXMg
b2J0YWluZWQgZnJvbSBTTzogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzE0
MzA3MC9qYXZhc2NyaXB0LXJlZ2V4LWlzby1kYXRldGltZSNhbnN3ZXItMzE0MzIzMQordmFyIElT
T19EQVRFX1JFR0VYUCA9IC9cZHs0fS1bMDFdXGQtWzAtM11cZFRbMC0yXVxkOlswLTVdXGQ6WzAt
NV1cZFwuXGQrKFsrLV1bMC0yXVxkOlswLTVdXGR8WikvOwordmFyIFVSTF9SRUdFWFAgPSAvXihm
dHB8aHR0cHxodHRwcyk6XC9cLyhcdys6ezAsMX1cdypAKT8oXFMrKSg6WzAtOV0rKT8oXC98XC8o
W1x3IyE6Lj8rPSYlQCFcLVwvXSkpPyQvOwordmFyIEVNQUlMX1JFR0VYUCA9IC9eW2EtejAtOSEj
JCUmJyorXC89P15fYHt8fX4uLV0rQFthLXowLTldKFthLXowLTktXSpbYS16MC05XSk/KFwuW2Et
ejAtOV0oW2EtejAtOS1dKlthLXowLTldKT8pKiQvaTsKK3ZhciBOVU1CRVJfUkVHRVhQID0gL15c
cyooXC18XCspPyhcZCt8KFxkKihcLlxkKikpKShbZUVdWystXT9cZCspP1xzKiQvOwordmFyIERB
VEVfUkVHRVhQID0gL14oXGR7NH0pLShcZHsyfSktKFxkezJ9KSQvOwordmFyIERBVEVUSU1FTE9D
QUxfUkVHRVhQID0gL14oXGR7NH0pLShcZFxkKS0oXGRcZClUKFxkXGQpOihcZFxkKSg/OjooXGRc
ZCkoXC5cZHsxLDN9KT8pPyQvOwordmFyIFdFRUtfUkVHRVhQID0gL14oXGR7NH0pLVcoXGRcZCkk
LzsKK3ZhciBNT05USF9SRUdFWFAgPSAvXihcZHs0fSktKFxkXGQpJC87Cit2YXIgVElNRV9SRUdF
WFAgPSAvXihcZFxkKTooXGRcZCkoPzo6KFxkXGQpKFwuXGR7MSwzfSk/KT8kLzsKKwordmFyIGlu
cHV0VHlwZSA9IHsKKworICAvKioKKyAgICogQG5nZG9jIGlucHV0CisgICAqIEBuYW1lIGlucHV0
W3RleHRdCisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBTdGFuZGFyZCBIVE1MIHRleHQg
aW5wdXQgd2l0aCBhbmd1bGFyIGRhdGEgYmluZGluZywgaW5oZXJpdGVkIGJ5IG1vc3Qgb2YgdGhl
IGBpbnB1dGAgZWxlbWVudHMuCisgICAqCisgICAqCisgICAqIEBwYXJhbSB7c3RyaW5nfSBuZ01v
ZGVsIEFzc2lnbmFibGUgYW5ndWxhciBleHByZXNzaW9uIHRvIGRhdGEtYmluZCB0by4KKyAgICog
QHBhcmFtIHtzdHJpbmc9fSBuYW1lIFByb3BlcnR5IG5hbWUgb2YgdGhlIGZvcm0gdW5kZXIgd2hp
Y2ggdGhlIGNvbnRyb2wgaXMgcHVibGlzaGVkLgorICAgKiBAcGFyYW0ge3N0cmluZz19IHJlcXVp
cmVkIEFkZHMgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMg
bm90IGVudGVyZWQuCisgICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdSZXF1aXJlZCBBZGRzIGByZXF1
aXJlZGAgYXR0cmlidXRlIGFuZCBgcmVxdWlyZWRgIHZhbGlkYXRpb24gY29uc3RyYWludCB0bwor
ICAgKiAgICB0aGUgZWxlbWVudCB3aGVuIHRoZSBuZ1JlcXVpcmVkIGV4cHJlc3Npb24gZXZhbHVh
dGVzIHRvIHRydWUuIFVzZSBgbmdSZXF1aXJlZGAgaW5zdGVhZCBvZgorICAgKiAgICBgcmVxdWly
ZWRgIHdoZW4geW91IHdhbnQgdG8gZGF0YS1iaW5kIHRvIHRoZSBgcmVxdWlyZWRgIGF0dHJpYnV0
ZS4KKyAgICogQHBhcmFtIHtudW1iZXI9fSBuZ01pbmxlbmd0aCBTZXRzIGBtaW5sZW5ndGhgIHZh
bGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBzaG9ydGVyIHRoYW4KKyAgICogICAg
bWlubGVuZ3RoLgorICAgKiBAcGFyYW0ge251bWJlcj19IG5nTWF4bGVuZ3RoIFNldHMgYG1heGxl
bmd0aGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIGxvbmdlciB0aGFuCisg
ICAqICAgIG1heGxlbmd0aC4gU2V0dGluZyB0aGUgYXR0cmlidXRlIHRvIGEgbmVnYXRpdmUgb3Ig
bm9uLW51bWVyaWMgdmFsdWUsIGFsbG93cyB2aWV3IHZhbHVlcyBvZgorICAgKiAgICBhbnkgbGVu
Z3RoLgorICAgKiBAcGFyYW0ge3N0cmluZz19IHBhdHRlcm4gU2ltaWxhciB0byBgbmdQYXR0ZXJu
YCBleGNlcHQgdGhhdCB0aGUgYXR0cmlidXRlIHZhbHVlIGlzIHRoZSBhY3R1YWwgc3RyaW5nCisg
ICAqICAgIHRoYXQgY29udGFpbnMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBib2R5IHRoYXQgd2ls
bCBiZSBjb252ZXJ0ZWQgdG8gYSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICogICAgYXMgaW4gdGhl
IG5nUGF0dGVybiBkaXJlY3RpdmUuCisgICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdQYXR0ZXJuIFNl
dHMgYHBhdHRlcm5gIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSBuZ01vZGVsIHZhbHVlIGRv
ZXMgbm90IG1hdGNoCisgICAqICAgIGEgUmVnRXhwIGZvdW5kIGJ5IGV2YWx1YXRpbmcgdGhlIEFu
Z3VsYXIgZXhwcmVzc2lvbiBnaXZlbiBpbiB0aGUgYXR0cmlidXRlIHZhbHVlLgorICAgKiAgICBJ
ZiB0aGUgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gYSBSZWdFeHAgb2JqZWN0LCB0aGVuIHRoaXMg
aXMgdXNlZCBkaXJlY3RseS4KKyAgICogICAgSWYgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRv
IGEgc3RyaW5nLCB0aGVuIGl0IHdpbGwgYmUgY29udmVydGVkIHRvIGEgUmVnRXhwCisgICAqICAg
IGFmdGVyIHdyYXBwaW5nIGl0IGluIGBeYCBhbmQgYCRgIGNoYXJhY3RlcnMuIEZvciBpbnN0YW5j
ZSwgYCJhYmMiYCB3aWxsIGJlIGNvbnZlcnRlZCB0bworICAgKiAgICBgbmV3IFJlZ0V4cCgnXmFi
YyQnKWAuPGJyIC8+CisgICAqICAgICoqTm90ZToqKiBBdm9pZCB1c2luZyB0aGUgYGdgIGZsYWcg
b24gdGhlIFJlZ0V4cCwgYXMgaXQgd2lsbCBjYXVzZSBlYWNoIHN1Y2Nlc3NpdmUgc2VhcmNoIHRv
CisgICAqICAgIHN0YXJ0IGF0IHRoZSBpbmRleCBvZiB0aGUgbGFzdCBzZWFyY2gncyBtYXRjaCwg
dGh1cyBub3QgdGFraW5nIHRoZSB3aG9sZSBpbnB1dCB2YWx1ZSBpbnRvCisgICAqICAgIGFjY291
bnQuCisgICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdDaGFuZ2UgQW5ndWxhciBleHByZXNzaW9uIHRv
IGJlIGV4ZWN1dGVkIHdoZW4gaW5wdXQgY2hhbmdlcyBkdWUgdG8gdXNlcgorICAgKiAgICBpbnRl
cmFjdGlvbiB3aXRoIHRoZSBpbnB1dCBlbGVtZW50LgorICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBb
bmdUcmltPXRydWVdIElmIHNldCB0byBmYWxzZSBBbmd1bGFyIHdpbGwgbm90IGF1dG9tYXRpY2Fs
bHkgdHJpbSB0aGUgaW5wdXQuCisgICAqICAgIFRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQgZm9y
IGlucHV0W3R5cGU9cGFzc3dvcmRdIGNvbnRyb2xzLCB3aGljaCB3aWxsIG5ldmVyIHRyaW0gdGhl
CisgICAqICAgIGlucHV0LgorICAgKgorICAgKiBAZXhhbXBsZQorICAgICAgPGV4YW1wbGUgbmFt
ZT0idGV4dC1pbnB1dC1kaXJlY3RpdmUiIG1vZHVsZT0idGV4dElucHV0RXhhbXBsZSI+CisgICAg
ICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICAgICAgPHNjcmlwdD4KKyAgICAgICAg
ICAgYW5ndWxhci5tb2R1bGUoJ3RleHRJbnB1dEV4YW1wbGUnLCBbXSkKKyAgICAgICAgICAgICAu
Y29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29w
ZSkgeworICAgICAgICAgICAgICAgJHNjb3BlLmV4YW1wbGUgPSB7CisgICAgICAgICAgICAgICAg
IHRleHQ6ICdndWVzdCcsCisgICAgICAgICAgICAgICAgIHdvcmQ6IC9eXHMqXHcqXHMqJC8KKyAg
ICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgfV0pOworICAgICAgICAgPC9zY3JpcHQ+Cisg
ICAgICAgICA8Zm9ybSBuYW1lPSJteUZvcm0iIG5nLWNvbnRyb2xsZXI9IkV4YW1wbGVDb250cm9s
bGVyIj4KKyAgICAgICAgICAgPGxhYmVsPlNpbmdsZSB3b3JkOgorICAgICAgICAgICAgIDxpbnB1
dCB0eXBlPSJ0ZXh0IiBuYW1lPSJpbnB1dCIgbmctbW9kZWw9ImV4YW1wbGUudGV4dCIKKyAgICAg
ICAgICAgICAgICAgICAgbmctcGF0dGVybj0iZXhhbXBsZS53b3JkIiByZXF1aXJlZCBuZy10cmlt
PSJmYWxzZSI+CisgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgIDxkaXYgcm9sZT0iYWxl
cnQiPgorICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlcnJvciIgbmctc2hvdz0ibXlGb3JtLmlu
cHV0LiRlcnJvci5yZXF1aXJlZCI+CisgICAgICAgICAgICAgICBSZXF1aXJlZCE8L3NwYW4+Cisg
ICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVycm9yIiBuZy1zaG93PSJteUZvcm0uaW5wdXQuJGVy
cm9yLnBhdHRlcm4iPgorICAgICAgICAgICAgICAgU2luZ2xlIHdvcmQgb25seSE8L3NwYW4+Cisg
ICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICA8dHQ+dGV4dCA9IHt7ZXhhbXBsZS50ZXh0fX08
L3R0Pjxici8+CisgICAgICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJHZhbGlkID0ge3tteUZvcm0u
aW5wdXQuJHZhbGlkfX08L3R0Pjxici8+CisgICAgICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJGVy
cm9yID0ge3tteUZvcm0uaW5wdXQuJGVycm9yfX08L3R0Pjxici8+CisgICAgICAgICAgIDx0dD5t
eUZvcm0uJHZhbGlkID0ge3tteUZvcm0uJHZhbGlkfX08L3R0Pjxici8+CisgICAgICAgICAgIDx0
dD5teUZvcm0uJGVycm9yLnJlcXVpcmVkID0ge3shIW15Rm9ybS4kZXJyb3IucmVxdWlyZWR9fTwv
dHQ+PGJyLz4KKyAgICAgICAgICA8L2Zvcm0+CisgICAgICAgIDwvZmlsZT4KKyAgICAgICAgPGZp
bGUgbmFtZT0icHJvdHJhY3Rvci5qcyIgdHlwZT0icHJvdHJhY3RvciI+CisgICAgICAgICAgdmFy
IHRleHQgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ2V4YW1wbGUudGV4dCcpKTsKKyAgICAgICAgICB2
YXIgdmFsaWQgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ215Rm9ybS5pbnB1dC4kdmFsaWQnKSk7Cisg
ICAgICAgICAgdmFyIGlucHV0ID0gZWxlbWVudChieS5tb2RlbCgnZXhhbXBsZS50ZXh0JykpOwor
CisgICAgICAgICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIHRvIG1vZGVsJywgZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICBleHBlY3QodGV4dC5nZXRUZXh0KCkpLnRvQ29udGFpbignZ3Vlc3QnKTsK
KyAgICAgICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbigndHJ1ZScpOwor
ICAgICAgICAgIH0pOworCisgICAgICAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIGVtcHR5
JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpbnB1dC5jbGVhcigpOworICAgICAgICAgICAg
aW5wdXQuc2VuZEtleXMoJycpOworCisgICAgICAgICAgICBleHBlY3QodGV4dC5nZXRUZXh0KCkp
LnRvRXF1YWwoJ3RleHQgPScpOworICAgICAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSku
dG9Db250YWluKCdmYWxzZScpOworICAgICAgICAgIH0pOworCisgICAgICAgICAgaXQoJ3Nob3Vs
ZCBiZSBpbnZhbGlkIGlmIG11bHRpIHdvcmQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlu
cHV0LmNsZWFyKCk7CisgICAgICAgICAgICBpbnB1dC5zZW5kS2V5cygnaGVsbG8gd29ybGQnKTsK
KworICAgICAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCdmYWxzZScp
OworICAgICAgICAgIH0pOworICAgICAgICA8L2ZpbGU+CisgICAgICA8L2V4YW1wbGU+CisgICAq
LworICAndGV4dCc6IHRleHRJbnB1dFR5cGUsCisKKyAgICAvKioKKyAgICAgKiBAbmdkb2MgaW5w
dXQKKyAgICAgKiBAbmFtZSBpbnB1dFtkYXRlXQorICAgICAqCisgICAgICogQGRlc2NyaXB0aW9u
CisgICAgICogSW5wdXQgd2l0aCBkYXRlIHZhbGlkYXRpb24gYW5kIHRyYW5zZm9ybWF0aW9uLiBJ
biBicm93c2VycyB0aGF0IGRvIG5vdCB5ZXQgc3VwcG9ydAorICAgICAqIHRoZSBIVE1MNSBkYXRl
IGlucHV0LCBhIHRleHQgZWxlbWVudCB3aWxsIGJlIHVzZWQuIEluIHRoYXQgY2FzZSwgdGV4dCBt
dXN0IGJlIGVudGVyZWQgaW4gYSB2YWxpZCBJU08tODYwMQorICAgICAqIGRhdGUgZm9ybWF0ICh5
eXl5LU1NLWRkKSwgZm9yIGV4YW1wbGU6IGAyMDA5LTAxLTA2YC4gU2luY2UgbWFueQorICAgICAq
IG1vZGVybiBicm93c2VycyBkbyBub3QgeWV0IHN1cHBvcnQgdGhpcyBpbnB1dCB0eXBlLCBpdCBp
cyBpbXBvcnRhbnQgdG8gcHJvdmlkZSBjdWVzIHRvIHVzZXJzIG9uIHRoZQorICAgICAqIGV4cGVj
dGVkIGlucHV0IGZvcm1hdCB2aWEgYSBwbGFjZWhvbGRlciBvciBsYWJlbC4KKyAgICAgKgorICAg
ICAqIFRoZSBtb2RlbCBtdXN0IGFsd2F5cyBiZSBhIERhdGUgb2JqZWN0LCBvdGhlcndpc2UgQW5n
dWxhciB3aWxsIHRocm93IGFuIGVycm9yLgorICAgICAqIEludmFsaWQgYERhdGVgIG9iamVjdHMg
KGRhdGVzIHdob3NlIGBnZXRUaW1lKClgIGlzIGBOYU5gKSB3aWxsIGJlIHJlbmRlcmVkIGFzIGFu
IGVtcHR5IHN0cmluZy4KKyAgICAgKgorICAgICAqIFRoZSB0aW1lem9uZSB0byBiZSB1c2VkIHRv
IHJlYWQvd3JpdGUgdGhlIGBEYXRlYCBpbnN0YW5jZSBpbiB0aGUgbW9kZWwgY2FuIGJlIGRlZmlu
ZWQgdXNpbmcKKyAgICAgKiB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nTW9kZWxPcHRpb25zIG5nTW9k
ZWxPcHRpb25zfS4gQnkgZGVmYXVsdCwgdGhpcyBpcyB0aGUgdGltZXpvbmUgb2YgdGhlIGJyb3dz
ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmdNb2RlbCBBc3NpZ25hYmxlIGFu
Z3VsYXIgZXhwcmVzc2lvbiB0byBkYXRhLWJpbmQgdG8uCisgICAgICogQHBhcmFtIHtzdHJpbmc9
fSBuYW1lIFByb3BlcnR5IG5hbWUgb2YgdGhlIGZvcm0gdW5kZXIgd2hpY2ggdGhlIGNvbnRyb2wg
aXMgcHVibGlzaGVkLgorICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gbWluIFNldHMgdGhlIGBtaW5g
IHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBlbnRlcmVkIGlzIGxlc3MgdGhhbiBg
bWluYC4gVGhpcyBtdXN0IGJlIGEKKyAgICAgKiB2YWxpZCBJU08gZGF0ZSBzdHJpbmcgKHl5eXkt
TU0tZGQpLgorICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gbWF4IFNldHMgdGhlIGBtYXhgIHZhbGlk
YXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBlbnRlcmVkIGlzIGdyZWF0ZXIgdGhhbiBgbWF4
YC4gVGhpcyBtdXN0IGJlCisgICAgICogYSB2YWxpZCBJU08gZGF0ZSBzdHJpbmcgKHl5eXktTU0t
ZGQpLgorICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gcmVxdWlyZWQgU2V0cyBgcmVxdWlyZWRgIHZh
bGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBub3QgZW50ZXJlZC4KKyAgICAgKiBA
cGFyYW0ge3N0cmluZz19IG5nUmVxdWlyZWQgQWRkcyBgcmVxdWlyZWRgIGF0dHJpYnV0ZSBhbmQg
YHJlcXVpcmVkYCB2YWxpZGF0aW9uIGNvbnN0cmFpbnQgdG8KKyAgICAgKiAgICB0aGUgZWxlbWVu
dCB3aGVuIHRoZSBuZ1JlcXVpcmVkIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRydWUuIFVzZSBg
bmdSZXF1aXJlZGAgaW5zdGVhZCBvZgorICAgICAqICAgIGByZXF1aXJlZGAgd2hlbiB5b3Ugd2Fu
dCB0byBkYXRhLWJpbmQgdG8gdGhlIGByZXF1aXJlZGAgYXR0cmlidXRlLgorICAgICAqIEBwYXJh
bSB7c3RyaW5nPX0gbmdDaGFuZ2UgQW5ndWxhciBleHByZXNzaW9uIHRvIGJlIGV4ZWN1dGVkIHdo
ZW4gaW5wdXQgY2hhbmdlcyBkdWUgdG8gdXNlcgorICAgICAqICAgIGludGVyYWN0aW9uIHdpdGgg
dGhlIGlucHV0IGVsZW1lbnQuCisgICAgICoKKyAgICAgKiBAZXhhbXBsZQorICAgICA8ZXhhbXBs
ZSBuYW1lPSJkYXRlLWlucHV0LWRpcmVjdGl2ZSIgbW9kdWxlPSJkYXRlSW5wdXRFeGFtcGxlIj4K
KyAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAgICAgPHNjcmlwdD4KKyAgICAgICAg
ICBhbmd1bGFyLm1vZHVsZSgnZGF0ZUlucHV0RXhhbXBsZScsIFtdKQorICAgICAgICAgICAgLmNv
bnRyb2xsZXIoJ0RhdGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHsK
KyAgICAgICAgICAgICAgJHNjb3BlLmV4YW1wbGUgPSB7CisgICAgICAgICAgICAgICAgdmFsdWU6
IG5ldyBEYXRlKDIwMTMsIDksIDIyKQorICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfV0p
OworICAgICAgIDwvc2NyaXB0PgorICAgICAgIDxmb3JtIG5hbWU9Im15Rm9ybSIgbmctY29udHJv
bGxlcj0iRGF0ZUNvbnRyb2xsZXIgYXMgZGF0ZUN0cmwiPgorICAgICAgICAgIDxsYWJlbCBmb3I9
ImV4YW1wbGVJbnB1dCI+UGljayBhIGRhdGUgaW4gMjAxMzo8L2xhYmVsPgorICAgICAgICAgIDxp
bnB1dCB0eXBlPSJkYXRlIiBpZD0iZXhhbXBsZUlucHV0IiBuYW1lPSJpbnB1dCIgbmctbW9kZWw9
ImV4YW1wbGUudmFsdWUiCisgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ5eXl5LU1NLWRkIiBt
aW49IjIwMTMtMDEtMDEiIG1heD0iMjAxMy0xMi0zMSIgcmVxdWlyZWQgLz4KKyAgICAgICAgICA8
ZGl2IHJvbGU9ImFsZXJ0Ij4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlcnJvciIgbmctc2hv
dz0ibXlGb3JtLmlucHV0LiRlcnJvci5yZXF1aXJlZCI+CisgICAgICAgICAgICAgICAgUmVxdWly
ZWQhPC9zcGFuPgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVycm9yIiBuZy1zaG93PSJteUZv
cm0uaW5wdXQuJGVycm9yLmRhdGUiPgorICAgICAgICAgICAgICAgIE5vdCBhIHZhbGlkIGRhdGUh
PC9zcGFuPgorICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgPHR0PnZhbHVlID0ge3tleGFt
cGxlLnZhbHVlIHwgZGF0ZTogInl5eXktTU0tZGQifX08L3R0Pjxici8+CisgICAgICAgICAgIDx0
dD5teUZvcm0uaW5wdXQuJHZhbGlkID0ge3tteUZvcm0uaW5wdXQuJHZhbGlkfX08L3R0Pjxici8+
CisgICAgICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJGVycm9yID0ge3tteUZvcm0uaW5wdXQuJGVy
cm9yfX08L3R0Pjxici8+CisgICAgICAgICAgIDx0dD5teUZvcm0uJHZhbGlkID0ge3tteUZvcm0u
JHZhbGlkfX08L3R0Pjxici8+CisgICAgICAgICAgIDx0dD5teUZvcm0uJGVycm9yLnJlcXVpcmVk
ID0ge3shIW15Rm9ybS4kZXJyb3IucmVxdWlyZWR9fTwvdHQ+PGJyLz4KKyAgICAgICA8L2Zvcm0+
CisgICAgIDwvZmlsZT4KKyAgICAgPGZpbGUgbmFtZT0icHJvdHJhY3Rvci5qcyIgdHlwZT0icHJv
dHJhY3RvciI+CisgICAgICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQoYnkuYmluZGluZygnZXhhbXBs
ZS52YWx1ZSB8IGRhdGU6ICJ5eXl5LU1NLWRkIicpKTsKKyAgICAgICAgdmFyIHZhbGlkID0gZWxl
bWVudChieS5iaW5kaW5nKCdteUZvcm0uaW5wdXQuJHZhbGlkJykpOworICAgICAgICB2YXIgaW5w
dXQgPSBlbGVtZW50KGJ5Lm1vZGVsKCdleGFtcGxlLnZhbHVlJykpOworCisgICAgICAgIC8vIGN1
cnJlbnRseSBwcm90cmFjdG9yL3dlYmRyaXZlciBkb2VzIG5vdCBzdXBwb3J0CisgICAgICAgIC8v
IHNlbmRpbmcga2V5cyB0byBhbGwga25vd24gSFRNTDUgaW5wdXQgY29udHJvbHMKKyAgICAgICAg
Ly8gZm9yIHZhcmlvdXMgYnJvd3NlcnMgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9w
cm90cmFjdG9yL2lzc3Vlcy81NjIpLgorICAgICAgICBmdW5jdGlvbiBzZXRJbnB1dCh2YWwpIHsK
KyAgICAgICAgICAvLyBzZXQgdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50IGFuZCBmb3JjZSB2YWxp
ZGF0aW9uLgorICAgICAgICAgIHZhciBzY3IgPSAidmFyIGlwdCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdleGFtcGxlSW5wdXQnKTsgIiArCisgICAgICAgICAgImlwdC52YWx1ZSA9ICciICsg
dmFsICsgIic7IiArCisgICAgICAgICAgImFuZ3VsYXIuZWxlbWVudChpcHQpLnNjb3BlKCkuJGFw
cGx5KGZ1bmN0aW9uKHMpIHsgcy5teUZvcm1baXB0Lm5hbWVdLiRzZXRWaWV3VmFsdWUoJyIgKyB2
YWwgKyAiJyk7IH0pOyI7CisgICAgICAgICAgYnJvd3Nlci5leGVjdXRlU2NyaXB0KHNjcik7Cisg
ICAgICAgIH0KKworICAgICAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgdG8gbW9kZWwnLCBmdW5j
dGlvbigpIHsKKyAgICAgICAgICBleHBlY3QodmFsdWUuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJzIw
MTMtMTAtMjInKTsKKyAgICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4o
J215Rm9ybS5pbnB1dC4kdmFsaWQgPSB0cnVlJyk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0
KCdzaG91bGQgYmUgaW52YWxpZCBpZiBlbXB0eScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHNl
dElucHV0KCcnKTsKKyAgICAgICAgICBleHBlY3QodmFsdWUuZ2V0VGV4dCgpKS50b0VxdWFsKCd2
YWx1ZSA9Jyk7CisgICAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCdt
eUZvcm0uaW5wdXQuJHZhbGlkID0gZmFsc2UnKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQo
J3Nob3VsZCBiZSBpbnZhbGlkIGlmIG92ZXIgbWF4JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAg
c2V0SW5wdXQoJzIwMTUtMDEtMDEnKTsKKyAgICAgICAgICBleHBlY3QodmFsdWUuZ2V0VGV4dCgp
KS50b0NvbnRhaW4oJycpOworICAgICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29u
dGFpbignbXlGb3JtLmlucHV0LiR2YWxpZCA9IGZhbHNlJyk7CisgICAgICAgIH0pOworICAgICA8
L2ZpbGU+CisgICAgIDwvZXhhbXBsZT4KKyAgICAgKi8KKyAgJ2RhdGUnOiBjcmVhdGVEYXRlSW5w
dXRUeXBlKCdkYXRlJywgREFURV9SRUdFWFAsCisgICAgICAgICBjcmVhdGVEYXRlUGFyc2VyKERB
VEVfUkVHRVhQLCBbJ3l5eXknLCAnTU0nLCAnZGQnXSksCisgICAgICAgICAneXl5eS1NTS1kZCcp
LAorCisgICAvKioKKyAgICAqIEBuZ2RvYyBpbnB1dAorICAgICogQG5hbWUgaW5wdXRbZGF0ZXRp
bWUtbG9jYWxdCisgICAgKgorICAgICogQGRlc2NyaXB0aW9uCisgICAgKiBJbnB1dCB3aXRoIGRh
dGV0aW1lIHZhbGlkYXRpb24gYW5kIHRyYW5zZm9ybWF0aW9uLiBJbiBicm93c2VycyB0aGF0IGRv
IG5vdCB5ZXQgc3VwcG9ydAorICAgICogdGhlIEhUTUw1IGRhdGUgaW5wdXQsIGEgdGV4dCBlbGVt
ZW50IHdpbGwgYmUgdXNlZC4gSW4gdGhhdCBjYXNlLCB0aGUgdGV4dCBtdXN0IGJlIGVudGVyZWQg
aW4gYSB2YWxpZCBJU08tODYwMQorICAgICogbG9jYWwgZGF0ZXRpbWUgZm9ybWF0ICh5eXl5LU1N
LWRkVEhIOm1tOnNzKSwgZm9yIGV4YW1wbGU6IGAyMDEwLTEyLTI4VDE0OjU3OjAwYC4KKyAgICAq
CisgICAgKiBUaGUgbW9kZWwgbXVzdCBhbHdheXMgYmUgYSBEYXRlIG9iamVjdCwgb3RoZXJ3aXNl
IEFuZ3VsYXIgd2lsbCB0aHJvdyBhbiBlcnJvci4KKyAgICAqIEludmFsaWQgYERhdGVgIG9iamVj
dHMgKGRhdGVzIHdob3NlIGBnZXRUaW1lKClgIGlzIGBOYU5gKSB3aWxsIGJlIHJlbmRlcmVkIGFz
IGFuIGVtcHR5IHN0cmluZy4KKyAgICAqCisgICAgKiBUaGUgdGltZXpvbmUgdG8gYmUgdXNlZCB0
byByZWFkL3dyaXRlIHRoZSBgRGF0ZWAgaW5zdGFuY2UgaW4gdGhlIG1vZGVsIGNhbiBiZSBkZWZp
bmVkIHVzaW5nCisgICAgKiB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nTW9kZWxPcHRpb25zIG5nTW9k
ZWxPcHRpb25zfS4gQnkgZGVmYXVsdCwgdGhpcyBpcyB0aGUgdGltZXpvbmUgb2YgdGhlIGJyb3dz
ZXIuCisgICAgKgorICAgICogQHBhcmFtIHtzdHJpbmd9IG5nTW9kZWwgQXNzaWduYWJsZSBhbmd1
bGFyIGV4cHJlc3Npb24gdG8gZGF0YS1iaW5kIHRvLgorICAgICogQHBhcmFtIHtzdHJpbmc9fSBu
YW1lIFByb3BlcnR5IG5hbWUgb2YgdGhlIGZvcm0gdW5kZXIgd2hpY2ggdGhlIGNvbnRyb2wgaXMg
cHVibGlzaGVkLgorICAgICogQHBhcmFtIHtzdHJpbmc9fSBtaW4gU2V0cyB0aGUgYG1pbmAgdmFs
aWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGVudGVyZWQgaXMgbGVzcyB0aGFuIGBtaW5g
LiBUaGlzIG11c3QgYmUgYQorICAgICogdmFsaWQgSVNPIGRhdGV0aW1lIGZvcm1hdCAoeXl5eS1N
TS1kZFRISDptbTpzcykuCisgICAgKiBAcGFyYW0ge3N0cmluZz19IG1heCBTZXRzIHRoZSBgbWF4
YCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpcyBncmVhdGVyIHRo
YW4gYG1heGAuIFRoaXMgbXVzdCBiZQorICAgICogYSB2YWxpZCBJU08gZGF0ZXRpbWUgZm9ybWF0
ICh5eXl5LU1NLWRkVEhIOm1tOnNzKS4KKyAgICAqIEBwYXJhbSB7c3RyaW5nPX0gcmVxdWlyZWQg
U2V0cyBgcmVxdWlyZWRgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBub3Qg
ZW50ZXJlZC4KKyAgICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdSZXF1aXJlZCBBZGRzIGByZXF1aXJl
ZGAgYXR0cmlidXRlIGFuZCBgcmVxdWlyZWRgIHZhbGlkYXRpb24gY29uc3RyYWludCB0bworICAg
ICogICAgdGhlIGVsZW1lbnQgd2hlbiB0aGUgbmdSZXF1aXJlZCBleHByZXNzaW9uIGV2YWx1YXRl
cyB0byB0cnVlLiBVc2UgYG5nUmVxdWlyZWRgIGluc3RlYWQgb2YKKyAgICAqICAgIGByZXF1aXJl
ZGAgd2hlbiB5b3Ugd2FudCB0byBkYXRhLWJpbmQgdG8gdGhlIGByZXF1aXJlZGAgYXR0cmlidXRl
LgorICAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ0NoYW5nZSBBbmd1bGFyIGV4cHJlc3Npb24gdG8g
YmUgZXhlY3V0ZWQgd2hlbiBpbnB1dCBjaGFuZ2VzIGR1ZSB0byB1c2VyCisgICAgKiAgICBpbnRl
cmFjdGlvbiB3aXRoIHRoZSBpbnB1dCBlbGVtZW50LgorICAgICoKKyAgICAqIEBleGFtcGxlCisg
ICAgPGV4YW1wbGUgbmFtZT0iZGF0ZXRpbWVsb2NhbC1pbnB1dC1kaXJlY3RpdmUiIG1vZHVsZT0i
ZGF0ZUV4YW1wbGUiPgorICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICAgPHNjcmlw
dD4KKyAgICAgICAgYW5ndWxhci5tb2R1bGUoJ2RhdGVFeGFtcGxlJywgW10pCisgICAgICAgICAg
LmNvbnRyb2xsZXIoJ0RhdGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUp
IHsKKyAgICAgICAgICAgICRzY29wZS5leGFtcGxlID0geworICAgICAgICAgICAgICB2YWx1ZTog
bmV3IERhdGUoMjAxMCwgMTEsIDI4LCAxNCwgNTcpCisgICAgICAgICAgICB9OworICAgICAgICAg
IH1dKTsKKyAgICAgIDwvc2NyaXB0PgorICAgICAgPGZvcm0gbmFtZT0ibXlGb3JtIiBuZy1jb250
cm9sbGVyPSJEYXRlQ29udHJvbGxlciBhcyBkYXRlQ3RybCI+CisgICAgICAgIDxsYWJlbCBmb3I9
ImV4YW1wbGVJbnB1dCI+UGljayBhIGRhdGUgYmV0d2VlbiBpbiAyMDEzOjwvbGFiZWw+CisgICAg
ICAgIDxpbnB1dCB0eXBlPSJkYXRldGltZS1sb2NhbCIgaWQ9ImV4YW1wbGVJbnB1dCIgbmFtZT0i
aW5wdXQiIG5nLW1vZGVsPSJleGFtcGxlLnZhbHVlIgorICAgICAgICAgICAgcGxhY2Vob2xkZXI9
Inl5eXktTU0tZGRUSEg6bW06c3MiIG1pbj0iMjAwMS0wMS0wMVQwMDowMDowMCIgbWF4PSIyMDEz
LTEyLTMxVDAwOjAwOjAwIiByZXF1aXJlZCAvPgorICAgICAgICA8ZGl2IHJvbGU9ImFsZXJ0Ij4K
KyAgICAgICAgICA8c3BhbiBjbGFzcz0iZXJyb3IiIG5nLXNob3c9Im15Rm9ybS5pbnB1dC4kZXJy
b3IucmVxdWlyZWQiPgorICAgICAgICAgICAgICBSZXF1aXJlZCE8L3NwYW4+CisgICAgICAgICAg
PHNwYW4gY2xhc3M9ImVycm9yIiBuZy1zaG93PSJteUZvcm0uaW5wdXQuJGVycm9yLmRhdGV0aW1l
bG9jYWwiPgorICAgICAgICAgICAgICBOb3QgYSB2YWxpZCBkYXRlITwvc3Bhbj4KKyAgICAgICAg
PC9kaXY+CisgICAgICAgIDx0dD52YWx1ZSA9IHt7ZXhhbXBsZS52YWx1ZSB8IGRhdGU6ICJ5eXl5
LU1NLWRkVEhIOm1tOnNzIn19PC90dD48YnIvPgorICAgICAgICA8dHQ+bXlGb3JtLmlucHV0LiR2
YWxpZCA9IHt7bXlGb3JtLmlucHV0LiR2YWxpZH19PC90dD48YnIvPgorICAgICAgICA8dHQ+bXlG
b3JtLmlucHV0LiRlcnJvciA9IHt7bXlGb3JtLmlucHV0LiRlcnJvcn19PC90dD48YnIvPgorICAg
ICAgICA8dHQ+bXlGb3JtLiR2YWxpZCA9IHt7bXlGb3JtLiR2YWxpZH19PC90dD48YnIvPgorICAg
ICAgICA8dHQ+bXlGb3JtLiRlcnJvci5yZXF1aXJlZCA9IHt7ISFteUZvcm0uJGVycm9yLnJlcXVp
cmVkfX08L3R0Pjxici8+CisgICAgICA8L2Zvcm0+CisgICAgPC9maWxlPgorICAgIDxmaWxlIG5h
bWU9InByb3RyYWN0b3IuanMiIHR5cGU9InByb3RyYWN0b3IiPgorICAgICAgdmFyIHZhbHVlID0g
ZWxlbWVudChieS5iaW5kaW5nKCdleGFtcGxlLnZhbHVlIHwgZGF0ZTogInl5eXktTU0tZGRUSEg6
bW06c3MiJykpOworICAgICAgdmFyIHZhbGlkID0gZWxlbWVudChieS5iaW5kaW5nKCdteUZvcm0u
aW5wdXQuJHZhbGlkJykpOworICAgICAgdmFyIGlucHV0ID0gZWxlbWVudChieS5tb2RlbCgnZXhh
bXBsZS52YWx1ZScpKTsKKworICAgICAgLy8gY3VycmVudGx5IHByb3RyYWN0b3Ivd2ViZHJpdmVy
IGRvZXMgbm90IHN1cHBvcnQKKyAgICAgIC8vIHNlbmRpbmcga2V5cyB0byBhbGwga25vd24gSFRN
TDUgaW5wdXQgY29udHJvbHMKKyAgICAgIC8vIGZvciB2YXJpb3VzIGJyb3dzZXJzIChodHRwczov
L2dpdGh1Yi5jb20vYW5ndWxhci9wcm90cmFjdG9yL2lzc3Vlcy81NjIpLgorICAgICAgZnVuY3Rp
b24gc2V0SW5wdXQodmFsKSB7CisgICAgICAgIC8vIHNldCB0aGUgdmFsdWUgb2YgdGhlIGVsZW1l
bnQgYW5kIGZvcmNlIHZhbGlkYXRpb24uCisgICAgICAgIHZhciBzY3IgPSAidmFyIGlwdCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdleGFtcGxlSW5wdXQnKTsgIiArCisgICAgICAgICJpcHQu
dmFsdWUgPSAnIiArIHZhbCArICInOyIgKworICAgICAgICAiYW5ndWxhci5lbGVtZW50KGlwdCku
c2NvcGUoKS4kYXBwbHkoZnVuY3Rpb24ocykgeyBzLm15Rm9ybVtpcHQubmFtZV0uJHNldFZpZXdW
YWx1ZSgnIiArIHZhbCArICInKTsgfSk7IjsKKyAgICAgICAgYnJvd3Nlci5leGVjdXRlU2NyaXB0
KHNjcik7CisgICAgICB9CisKKyAgICAgIGl0KCdzaG91bGQgaW5pdGlhbGl6ZSB0byBtb2RlbCcs
IGZ1bmN0aW9uKCkgeworICAgICAgICBleHBlY3QodmFsdWUuZ2V0VGV4dCgpKS50b0NvbnRhaW4o
JzIwMTAtMTItMjhUMTQ6NTc6MDAnKTsKKyAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSku
dG9Db250YWluKCdteUZvcm0uaW5wdXQuJHZhbGlkID0gdHJ1ZScpOworICAgICAgfSk7CisKKyAg
ICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBlbXB0eScsIGZ1bmN0aW9uKCkgeworICAgICAg
ICBzZXRJbnB1dCgnJyk7CisgICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkpLnRvRXF1YWwo
J3ZhbHVlID0nKTsKKyAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCdt
eUZvcm0uaW5wdXQuJHZhbGlkID0gZmFsc2UnKTsKKyAgICAgIH0pOworCisgICAgICBpdCgnc2hv
dWxkIGJlIGludmFsaWQgaWYgb3ZlciBtYXgnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgc2V0SW5w
dXQoJzIwMTUtMDEtMDFUMjM6NTk6MDAnKTsKKyAgICAgICAgZXhwZWN0KHZhbHVlLmdldFRleHQo
KSkudG9Db250YWluKCcnKTsKKyAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSkudG9Db250
YWluKCdteUZvcm0uaW5wdXQuJHZhbGlkID0gZmFsc2UnKTsKKyAgICAgIH0pOworICAgIDwvZmls
ZT4KKyAgICA8L2V4YW1wbGU+CisgICAgKi8KKyAgJ2RhdGV0aW1lLWxvY2FsJzogY3JlYXRlRGF0
ZUlucHV0VHlwZSgnZGF0ZXRpbWVsb2NhbCcsIERBVEVUSU1FTE9DQUxfUkVHRVhQLAorICAgICAg
Y3JlYXRlRGF0ZVBhcnNlcihEQVRFVElNRUxPQ0FMX1JFR0VYUCwgWyd5eXl5JywgJ01NJywgJ2Rk
JywgJ0hIJywgJ21tJywgJ3NzJywgJ3NzcyddKSwKKyAgICAgICd5eXl5LU1NLWRkVEhIOm1tOnNz
LnNzcycpLAorCisgIC8qKgorICAgKiBAbmdkb2MgaW5wdXQKKyAgICogQG5hbWUgaW5wdXRbdGlt
ZV0KKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIElucHV0IHdpdGggdGltZSB2YWxpZGF0
aW9uIGFuZCB0cmFuc2Zvcm1hdGlvbi4gSW4gYnJvd3NlcnMgdGhhdCBkbyBub3QgeWV0IHN1cHBv
cnQKKyAgICogdGhlIEhUTUw1IGRhdGUgaW5wdXQsIGEgdGV4dCBlbGVtZW50IHdpbGwgYmUgdXNl
ZC4gSW4gdGhhdCBjYXNlLCB0aGUgdGV4dCBtdXN0IGJlIGVudGVyZWQgaW4gYSB2YWxpZCBJU08t
ODYwMQorICAgKiBsb2NhbCB0aW1lIGZvcm1hdCAoSEg6bW06c3MpLCBmb3IgZXhhbXBsZTogYDE0
OjU3OjAwYC4gTW9kZWwgbXVzdCBiZSBhIERhdGUgb2JqZWN0LiBUaGlzIGJpbmRpbmcgd2lsbCBh
bHdheXMgb3V0cHV0IGEKKyAgICogRGF0ZSBvYmplY3QgdG8gdGhlIG1vZGVsIG9mIEphbnVhcnkg
MSwgMTk3MCwgb3IgbG9jYWwgZGF0ZSBgbmV3IERhdGUoMTk3MCwgMCwgMSwgSEgsIG1tLCBzcylg
LgorICAgKgorICAgKiBUaGUgbW9kZWwgbXVzdCBhbHdheXMgYmUgYSBEYXRlIG9iamVjdCwgb3Ro
ZXJ3aXNlIEFuZ3VsYXIgd2lsbCB0aHJvdyBhbiBlcnJvci4KKyAgICogSW52YWxpZCBgRGF0ZWAg
b2JqZWN0cyAoZGF0ZXMgd2hvc2UgYGdldFRpbWUoKWAgaXMgYE5hTmApIHdpbGwgYmUgcmVuZGVy
ZWQgYXMgYW4gZW1wdHkgc3RyaW5nLgorICAgKgorICAgKiBUaGUgdGltZXpvbmUgdG8gYmUgdXNl
ZCB0byByZWFkL3dyaXRlIHRoZSBgRGF0ZWAgaW5zdGFuY2UgaW4gdGhlIG1vZGVsIGNhbiBiZSBk
ZWZpbmVkIHVzaW5nCisgICAqIHtAbGluayBuZy5kaXJlY3RpdmU6bmdNb2RlbE9wdGlvbnMgbmdN
b2RlbE9wdGlvbnN9LiBCeSBkZWZhdWx0LCB0aGlzIGlzIHRoZSB0aW1lem9uZSBvZiB0aGUgYnJv
d3Nlci4KKyAgICoKKyAgICogQHBhcmFtIHtzdHJpbmd9IG5nTW9kZWwgQXNzaWduYWJsZSBhbmd1
bGFyIGV4cHJlc3Npb24gdG8gZGF0YS1iaW5kIHRvLgorICAgKiBAcGFyYW0ge3N0cmluZz19IG5h
bWUgUHJvcGVydHkgbmFtZSBvZiB0aGUgZm9ybSB1bmRlciB3aGljaCB0aGUgY29udHJvbCBpcyBw
dWJsaXNoZWQuCisgICAqIEBwYXJhbSB7c3RyaW5nPX0gbWluIFNldHMgdGhlIGBtaW5gIHZhbGlk
YXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBlbnRlcmVkIGlzIGxlc3MgdGhhbiBgbWluYC4g
VGhpcyBtdXN0IGJlIGEKKyAgICogdmFsaWQgSVNPIHRpbWUgZm9ybWF0IChISDptbTpzcykuCisg
ICAqIEBwYXJhbSB7c3RyaW5nPX0gbWF4IFNldHMgdGhlIGBtYXhgIHZhbGlkYXRpb24gZXJyb3Ig
a2V5IGlmIHRoZSB2YWx1ZSBlbnRlcmVkIGlzIGdyZWF0ZXIgdGhhbiBgbWF4YC4gVGhpcyBtdXN0
IGJlIGEKKyAgICogdmFsaWQgSVNPIHRpbWUgZm9ybWF0IChISDptbTpzcykuCisgICAqIEBwYXJh
bSB7c3RyaW5nPX0gcmVxdWlyZWQgU2V0cyBgcmVxdWlyZWRgIHZhbGlkYXRpb24gZXJyb3Iga2V5
IGlmIHRoZSB2YWx1ZSBpcyBub3QgZW50ZXJlZC4KKyAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ1Jl
cXVpcmVkIEFkZHMgYHJlcXVpcmVkYCBhdHRyaWJ1dGUgYW5kIGByZXF1aXJlZGAgdmFsaWRhdGlv
biBjb25zdHJhaW50IHRvCisgICAqICAgIHRoZSBlbGVtZW50IHdoZW4gdGhlIG5nUmVxdWlyZWQg
ZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gdHJ1ZS4gVXNlIGBuZ1JlcXVpcmVkYCBpbnN0ZWFkIG9m
CisgICAqICAgIGByZXF1aXJlZGAgd2hlbiB5b3Ugd2FudCB0byBkYXRhLWJpbmQgdG8gdGhlIGBy
ZXF1aXJlZGAgYXR0cmlidXRlLgorICAgKiBAcGFyYW0ge3N0cmluZz19IG5nQ2hhbmdlIEFuZ3Vs
YXIgZXhwcmVzc2lvbiB0byBiZSBleGVjdXRlZCB3aGVuIGlucHV0IGNoYW5nZXMgZHVlIHRvIHVz
ZXIKKyAgICogICAgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaW5wdXQgZWxlbWVudC4KKyAgICoKKyAg
ICogQGV4YW1wbGUKKyAgIDxleGFtcGxlIG5hbWU9InRpbWUtaW5wdXQtZGlyZWN0aXZlIiBtb2R1
bGU9InRpbWVFeGFtcGxlIj4KKyAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICA8c2Ny
aXB0PgorICAgICAgYW5ndWxhci5tb2R1bGUoJ3RpbWVFeGFtcGxlJywgW10pCisgICAgICAgIC5j
b250cm9sbGVyKCdEYXRlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7
CisgICAgICAgICAgJHNjb3BlLmV4YW1wbGUgPSB7CisgICAgICAgICAgICB2YWx1ZTogbmV3IERh
dGUoMTk3MCwgMCwgMSwgMTQsIDU3LCAwKQorICAgICAgICAgIH07CisgICAgICAgIH1dKTsKKyAg
ICAgPC9zY3JpcHQ+CisgICAgIDxmb3JtIG5hbWU9Im15Rm9ybSIgbmctY29udHJvbGxlcj0iRGF0
ZUNvbnRyb2xsZXIgYXMgZGF0ZUN0cmwiPgorICAgICAgICA8bGFiZWwgZm9yPSJleGFtcGxlSW5w
dXQiPlBpY2sgYSBiZXR3ZWVuIDhhbSBhbmQgNXBtOjwvbGFiZWw+CisgICAgICAgIDxpbnB1dCB0
eXBlPSJ0aW1lIiBpZD0iZXhhbXBsZUlucHV0IiBuYW1lPSJpbnB1dCIgbmctbW9kZWw9ImV4YW1w
bGUudmFsdWUiCisgICAgICAgICAgICBwbGFjZWhvbGRlcj0iSEg6bW06c3MiIG1pbj0iMDg6MDA6
MDAiIG1heD0iMTc6MDA6MDAiIHJlcXVpcmVkIC8+CisgICAgICAgIDxkaXYgcm9sZT0iYWxlcnQi
PgorICAgICAgICAgIDxzcGFuIGNsYXNzPSJlcnJvciIgbmctc2hvdz0ibXlGb3JtLmlucHV0LiRl
cnJvci5yZXF1aXJlZCI+CisgICAgICAgICAgICAgIFJlcXVpcmVkITwvc3Bhbj4KKyAgICAgICAg
ICA8c3BhbiBjbGFzcz0iZXJyb3IiIG5nLXNob3c9Im15Rm9ybS5pbnB1dC4kZXJyb3IudGltZSI+
CisgICAgICAgICAgICAgIE5vdCBhIHZhbGlkIGRhdGUhPC9zcGFuPgorICAgICAgICA8L2Rpdj4K
KyAgICAgICAgPHR0PnZhbHVlID0ge3tleGFtcGxlLnZhbHVlIHwgZGF0ZTogIkhIOm1tOnNzIn19
PC90dD48YnIvPgorICAgICAgICA8dHQ+bXlGb3JtLmlucHV0LiR2YWxpZCA9IHt7bXlGb3JtLmlu
cHV0LiR2YWxpZH19PC90dD48YnIvPgorICAgICAgICA8dHQ+bXlGb3JtLmlucHV0LiRlcnJvciA9
IHt7bXlGb3JtLmlucHV0LiRlcnJvcn19PC90dD48YnIvPgorICAgICAgICA8dHQ+bXlGb3JtLiR2
YWxpZCA9IHt7bXlGb3JtLiR2YWxpZH19PC90dD48YnIvPgorICAgICAgICA8dHQ+bXlGb3JtLiRl
cnJvci5yZXF1aXJlZCA9IHt7ISFteUZvcm0uJGVycm9yLnJlcXVpcmVkfX08L3R0Pjxici8+Cisg
ICAgIDwvZm9ybT4KKyAgIDwvZmlsZT4KKyAgIDxmaWxlIG5hbWU9InByb3RyYWN0b3IuanMiIHR5
cGU9InByb3RyYWN0b3IiPgorICAgICAgdmFyIHZhbHVlID0gZWxlbWVudChieS5iaW5kaW5nKCdl
eGFtcGxlLnZhbHVlIHwgZGF0ZTogIkhIOm1tOnNzIicpKTsKKyAgICAgIHZhciB2YWxpZCA9IGVs
ZW1lbnQoYnkuYmluZGluZygnbXlGb3JtLmlucHV0LiR2YWxpZCcpKTsKKyAgICAgIHZhciBpbnB1
dCA9IGVsZW1lbnQoYnkubW9kZWwoJ2V4YW1wbGUudmFsdWUnKSk7CisKKyAgICAgIC8vIGN1cnJl
bnRseSBwcm90cmFjdG9yL3dlYmRyaXZlciBkb2VzIG5vdCBzdXBwb3J0CisgICAgICAvLyBzZW5k
aW5nIGtleXMgdG8gYWxsIGtub3duIEhUTUw1IGlucHV0IGNvbnRyb2xzCisgICAgICAvLyBmb3Ig
dmFyaW91cyBicm93c2VycyAoaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvcHJvdHJhY3Rvci9p
c3N1ZXMvNTYyKS4KKyAgICAgIGZ1bmN0aW9uIHNldElucHV0KHZhbCkgeworICAgICAgICAvLyBz
ZXQgdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50IGFuZCBmb3JjZSB2YWxpZGF0aW9uLgorICAgICAg
ICB2YXIgc2NyID0gInZhciBpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhhbXBsZUlu
cHV0Jyk7ICIgKworICAgICAgICAiaXB0LnZhbHVlID0gJyIgKyB2YWwgKyAiJzsiICsKKyAgICAg
ICAgImFuZ3VsYXIuZWxlbWVudChpcHQpLnNjb3BlKCkuJGFwcGx5KGZ1bmN0aW9uKHMpIHsgcy5t
eUZvcm1baXB0Lm5hbWVdLiRzZXRWaWV3VmFsdWUoJyIgKyB2YWwgKyAiJyk7IH0pOyI7CisgICAg
ICAgIGJyb3dzZXIuZXhlY3V0ZVNjcmlwdChzY3IpOworICAgICAgfQorCisgICAgICBpdCgnc2hv
dWxkIGluaXRpYWxpemUgdG8gbW9kZWwnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgZXhwZWN0KHZh
bHVlLmdldFRleHQoKSkudG9Db250YWluKCcxNDo1NzowMCcpOworICAgICAgICBleHBlY3QodmFs
aWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ215Rm9ybS5pbnB1dC4kdmFsaWQgPSB0cnVlJyk7Cisg
ICAgICB9KTsKKworICAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIGVtcHR5JywgZnVuY3Rp
b24oKSB7CisgICAgICAgIHNldElucHV0KCcnKTsKKyAgICAgICAgZXhwZWN0KHZhbHVlLmdldFRl
eHQoKSkudG9FcXVhbCgndmFsdWUgPScpOworICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgp
KS50b0NvbnRhaW4oJ215Rm9ybS5pbnB1dC4kdmFsaWQgPSBmYWxzZScpOworICAgICAgfSk7CisK
KyAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBvdmVyIG1heCcsIGZ1bmN0aW9uKCkgewor
ICAgICAgICBzZXRJbnB1dCgnMjM6NTk6MDAnKTsKKyAgICAgICAgZXhwZWN0KHZhbHVlLmdldFRl
eHQoKSkudG9Db250YWluKCcnKTsKKyAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSkudG9D
b250YWluKCdteUZvcm0uaW5wdXQuJHZhbGlkID0gZmFsc2UnKTsKKyAgICAgIH0pOworICAgPC9m
aWxlPgorICAgPC9leGFtcGxlPgorICAgKi8KKyAgJ3RpbWUnOiBjcmVhdGVEYXRlSW5wdXRUeXBl
KCd0aW1lJywgVElNRV9SRUdFWFAsCisgICAgICBjcmVhdGVEYXRlUGFyc2VyKFRJTUVfUkVHRVhQ
LCBbJ0hIJywgJ21tJywgJ3NzJywgJ3NzcyddKSwKKyAgICAgJ0hIOm1tOnNzLnNzcycpLAorCisg
ICAvKioKKyAgICAqIEBuZ2RvYyBpbnB1dAorICAgICogQG5hbWUgaW5wdXRbd2Vla10KKyAgICAq
CisgICAgKiBAZGVzY3JpcHRpb24KKyAgICAqIElucHV0IHdpdGggd2Vlay1vZi10aGUteWVhciB2
YWxpZGF0aW9uIGFuZCB0cmFuc2Zvcm1hdGlvbiB0byBEYXRlLiBJbiBicm93c2VycyB0aGF0IGRv
IG5vdCB5ZXQgc3VwcG9ydAorICAgICogdGhlIEhUTUw1IHdlZWsgaW5wdXQsIGEgdGV4dCBlbGVt
ZW50IHdpbGwgYmUgdXNlZC4gSW4gdGhhdCBjYXNlLCB0aGUgdGV4dCBtdXN0IGJlIGVudGVyZWQg
aW4gYSB2YWxpZCBJU08tODYwMQorICAgICogd2VlayBmb3JtYXQgKHl5eXktVyMjKSwgZm9yIGV4
YW1wbGU6IGAyMDEzLVcwMmAuCisgICAgKgorICAgICogVGhlIG1vZGVsIG11c3QgYWx3YXlzIGJl
IGEgRGF0ZSBvYmplY3QsIG90aGVyd2lzZSBBbmd1bGFyIHdpbGwgdGhyb3cgYW4gZXJyb3IuCisg
ICAgKiBJbnZhbGlkIGBEYXRlYCBvYmplY3RzIChkYXRlcyB3aG9zZSBgZ2V0VGltZSgpYCBpcyBg
TmFOYCkgd2lsbCBiZSByZW5kZXJlZCBhcyBhbiBlbXB0eSBzdHJpbmcuCisgICAgKgorICAgICog
VGhlIHRpbWV6b25lIHRvIGJlIHVzZWQgdG8gcmVhZC93cml0ZSB0aGUgYERhdGVgIGluc3RhbmNl
IGluIHRoZSBtb2RlbCBjYW4gYmUgZGVmaW5lZCB1c2luZworICAgICoge0BsaW5rIG5nLmRpcmVj
dGl2ZTpuZ01vZGVsT3B0aW9ucyBuZ01vZGVsT3B0aW9uc30uIEJ5IGRlZmF1bHQsIHRoaXMgaXMg
dGhlIHRpbWV6b25lIG9mIHRoZSBicm93c2VyLgorICAgICoKKyAgICAqIEBwYXJhbSB7c3RyaW5n
fSBuZ01vZGVsIEFzc2lnbmFibGUgYW5ndWxhciBleHByZXNzaW9uIHRvIGRhdGEtYmluZCB0by4K
KyAgICAqIEBwYXJhbSB7c3RyaW5nPX0gbmFtZSBQcm9wZXJ0eSBuYW1lIG9mIHRoZSBmb3JtIHVu
ZGVyIHdoaWNoIHRoZSBjb250cm9sIGlzIHB1Ymxpc2hlZC4KKyAgICAqIEBwYXJhbSB7c3RyaW5n
PX0gbWluIFNldHMgdGhlIGBtaW5gIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBl
bnRlcmVkIGlzIGxlc3MgdGhhbiBgbWluYC4gVGhpcyBtdXN0IGJlIGEKKyAgICAqIHZhbGlkIElT
TyB3ZWVrIGZvcm1hdCAoeXl5eS1XIyMpLgorICAgICogQHBhcmFtIHtzdHJpbmc9fSBtYXggU2V0
cyB0aGUgYG1heGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGVudGVyZWQgaXMg
Z3JlYXRlciB0aGFuIGBtYXhgLiBUaGlzIG11c3QgYmUKKyAgICAqIGEgdmFsaWQgSVNPIHdlZWsg
Zm9ybWF0ICh5eXl5LVcjIykuCisgICAgKiBAcGFyYW0ge3N0cmluZz19IHJlcXVpcmVkIFNldHMg
YHJlcXVpcmVkYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgbm90IGVudGVy
ZWQuCisgICAgKiBAcGFyYW0ge3N0cmluZz19IG5nUmVxdWlyZWQgQWRkcyBgcmVxdWlyZWRgIGF0
dHJpYnV0ZSBhbmQgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGNvbnN0cmFpbnQgdG8KKyAgICAqICAg
IHRoZSBlbGVtZW50IHdoZW4gdGhlIG5nUmVxdWlyZWQgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8g
dHJ1ZS4gVXNlIGBuZ1JlcXVpcmVkYCBpbnN0ZWFkIG9mCisgICAgKiAgICBgcmVxdWlyZWRgIHdo
ZW4geW91IHdhbnQgdG8gZGF0YS1iaW5kIHRvIHRoZSBgcmVxdWlyZWRgIGF0dHJpYnV0ZS4KKyAg
ICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdDaGFuZ2UgQW5ndWxhciBleHByZXNzaW9uIHRvIGJlIGV4
ZWN1dGVkIHdoZW4gaW5wdXQgY2hhbmdlcyBkdWUgdG8gdXNlcgorICAgICogICAgaW50ZXJhY3Rp
b24gd2l0aCB0aGUgaW5wdXQgZWxlbWVudC4KKyAgICAqCisgICAgKiBAZXhhbXBsZQorICAgIDxl
eGFtcGxlIG5hbWU9IndlZWstaW5wdXQtZGlyZWN0aXZlIiBtb2R1bGU9IndlZWtFeGFtcGxlIj4K
KyAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgIDxzY3JpcHQ+CisgICAgICBhbmd1
bGFyLm1vZHVsZSgnd2Vla0V4YW1wbGUnLCBbXSkKKyAgICAgICAgLmNvbnRyb2xsZXIoJ0RhdGVD
b250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHsKKyAgICAgICAgICAkc2Nv
cGUuZXhhbXBsZSA9IHsKKyAgICAgICAgICAgIHZhbHVlOiBuZXcgRGF0ZSgyMDEzLCAwLCAzKQor
ICAgICAgICAgIH07CisgICAgICAgIH1dKTsKKyAgICAgIDwvc2NyaXB0PgorICAgICAgPGZvcm0g
bmFtZT0ibXlGb3JtIiBuZy1jb250cm9sbGVyPSJEYXRlQ29udHJvbGxlciBhcyBkYXRlQ3RybCI+
CisgICAgICAgIDxsYWJlbD5QaWNrIGEgZGF0ZSBiZXR3ZWVuIGluIDIwMTM6CisgICAgICAgICAg
PGlucHV0IGlkPSJleGFtcGxlSW5wdXQiIHR5cGU9IndlZWsiIG5hbWU9ImlucHV0IiBuZy1tb2Rl
bD0iZXhhbXBsZS52YWx1ZSIKKyAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IllZWVktVyMj
IiBtaW49IjIwMTItVzMyIgorICAgICAgICAgICAgICAgICBtYXg9IjIwMTMtVzUyIiByZXF1aXJl
ZCAvPgorICAgICAgICA8L2xhYmVsPgorICAgICAgICA8ZGl2IHJvbGU9ImFsZXJ0Ij4KKyAgICAg
ICAgICA8c3BhbiBjbGFzcz0iZXJyb3IiIG5nLXNob3c9Im15Rm9ybS5pbnB1dC4kZXJyb3IucmVx
dWlyZWQiPgorICAgICAgICAgICAgICBSZXF1aXJlZCE8L3NwYW4+CisgICAgICAgICAgPHNwYW4g
Y2xhc3M9ImVycm9yIiBuZy1zaG93PSJteUZvcm0uaW5wdXQuJGVycm9yLndlZWsiPgorICAgICAg
ICAgICAgICBOb3QgYSB2YWxpZCBkYXRlITwvc3Bhbj4KKyAgICAgICAgPC9kaXY+CisgICAgICAg
IDx0dD52YWx1ZSA9IHt7ZXhhbXBsZS52YWx1ZSB8IGRhdGU6ICJ5eXl5LVd3dyJ9fTwvdHQ+PGJy
Lz4KKyAgICAgICAgPHR0Pm15Rm9ybS5pbnB1dC4kdmFsaWQgPSB7e215Rm9ybS5pbnB1dC4kdmFs
aWR9fTwvdHQ+PGJyLz4KKyAgICAgICAgPHR0Pm15Rm9ybS5pbnB1dC4kZXJyb3IgPSB7e215Rm9y
bS5pbnB1dC4kZXJyb3J9fTwvdHQ+PGJyLz4KKyAgICAgICAgPHR0Pm15Rm9ybS4kdmFsaWQgPSB7
e215Rm9ybS4kdmFsaWR9fTwvdHQ+PGJyLz4KKyAgICAgICAgPHR0Pm15Rm9ybS4kZXJyb3IucmVx
dWlyZWQgPSB7eyEhbXlGb3JtLiRlcnJvci5yZXF1aXJlZH19PC90dD48YnIvPgorICAgICAgPC9m
b3JtPgorICAgIDwvZmlsZT4KKyAgICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJw
cm90cmFjdG9yIj4KKyAgICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQoYnkuYmluZGluZygnZXhhbXBs
ZS52YWx1ZSB8IGRhdGU6ICJ5eXl5LVd3dyInKSk7CisgICAgICB2YXIgdmFsaWQgPSBlbGVtZW50
KGJ5LmJpbmRpbmcoJ215Rm9ybS5pbnB1dC4kdmFsaWQnKSk7CisgICAgICB2YXIgaW5wdXQgPSBl
bGVtZW50KGJ5Lm1vZGVsKCdleGFtcGxlLnZhbHVlJykpOworCisgICAgICAvLyBjdXJyZW50bHkg
cHJvdHJhY3Rvci93ZWJkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydAorICAgICAgLy8gc2VuZGluZyBr
ZXlzIHRvIGFsbCBrbm93biBIVE1MNSBpbnB1dCBjb250cm9scworICAgICAgLy8gZm9yIHZhcmlv
dXMgYnJvd3NlcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL3Byb3RyYWN0b3IvaXNzdWVz
LzU2MikuCisgICAgICBmdW5jdGlvbiBzZXRJbnB1dCh2YWwpIHsKKyAgICAgICAgLy8gc2V0IHRo
ZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCBhbmQgZm9yY2UgdmFsaWRhdGlvbi4KKyAgICAgICAgdmFy
IHNjciA9ICJ2YXIgaXB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4YW1wbGVJbnB1dCcp
OyAiICsKKyAgICAgICAgImlwdC52YWx1ZSA9ICciICsgdmFsICsgIic7IiArCisgICAgICAgICJh
bmd1bGFyLmVsZW1lbnQoaXB0KS5zY29wZSgpLiRhcHBseShmdW5jdGlvbihzKSB7IHMubXlGb3Jt
W2lwdC5uYW1lXS4kc2V0Vmlld1ZhbHVlKCciICsgdmFsICsgIicpOyB9KTsiOworICAgICAgICBi
cm93c2VyLmV4ZWN1dGVTY3JpcHQoc2NyKTsKKyAgICAgIH0KKworICAgICAgaXQoJ3Nob3VsZCBp
bml0aWFsaXplIHRvIG1vZGVsJywgZnVuY3Rpb24oKSB7CisgICAgICAgIGV4cGVjdCh2YWx1ZS5n
ZXRUZXh0KCkpLnRvQ29udGFpbignMjAxMy1XMDEnKTsKKyAgICAgICAgZXhwZWN0KHZhbGlkLmdl
dFRleHQoKSkudG9Db250YWluKCdteUZvcm0uaW5wdXQuJHZhbGlkID0gdHJ1ZScpOworICAgICAg
fSk7CisKKyAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBlbXB0eScsIGZ1bmN0aW9uKCkg
eworICAgICAgICBzZXRJbnB1dCgnJyk7CisgICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkp
LnRvRXF1YWwoJ3ZhbHVlID0nKTsKKyAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSkudG9D
b250YWluKCdteUZvcm0uaW5wdXQuJHZhbGlkID0gZmFsc2UnKTsKKyAgICAgIH0pOworCisgICAg
ICBpdCgnc2hvdWxkIGJlIGludmFsaWQgaWYgb3ZlciBtYXgnLCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgc2V0SW5wdXQoJzIwMTUtVzAxJyk7CisgICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkp
LnRvQ29udGFpbignJyk7CisgICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFp
bignbXlGb3JtLmlucHV0LiR2YWxpZCA9IGZhbHNlJyk7CisgICAgICB9KTsKKyAgICA8L2ZpbGU+
CisgICAgPC9leGFtcGxlPgorICAgICovCisgICd3ZWVrJzogY3JlYXRlRGF0ZUlucHV0VHlwZSgn
d2VlaycsIFdFRUtfUkVHRVhQLCB3ZWVrUGFyc2VyLCAneXl5eS1Xd3cnKSwKKworICAvKioKKyAg
ICogQG5nZG9jIGlucHV0CisgICAqIEBuYW1lIGlucHV0W21vbnRoXQorICAgKgorICAgKiBAZGVz
Y3JpcHRpb24KKyAgICogSW5wdXQgd2l0aCBtb250aCB2YWxpZGF0aW9uIGFuZCB0cmFuc2Zvcm1h
dGlvbi4gSW4gYnJvd3NlcnMgdGhhdCBkbyBub3QgeWV0IHN1cHBvcnQKKyAgICogdGhlIEhUTUw1
IG1vbnRoIGlucHV0LCBhIHRleHQgZWxlbWVudCB3aWxsIGJlIHVzZWQuIEluIHRoYXQgY2FzZSwg
dGhlIHRleHQgbXVzdCBiZSBlbnRlcmVkIGluIGEgdmFsaWQgSVNPLTg2MDEKKyAgICogbW9udGgg
Zm9ybWF0ICh5eXl5LU1NKSwgZm9yIGV4YW1wbGU6IGAyMDA5LTAxYC4KKyAgICoKKyAgICogVGhl
IG1vZGVsIG11c3QgYWx3YXlzIGJlIGEgRGF0ZSBvYmplY3QsIG90aGVyd2lzZSBBbmd1bGFyIHdp
bGwgdGhyb3cgYW4gZXJyb3IuCisgICAqIEludmFsaWQgYERhdGVgIG9iamVjdHMgKGRhdGVzIHdo
b3NlIGBnZXRUaW1lKClgIGlzIGBOYU5gKSB3aWxsIGJlIHJlbmRlcmVkIGFzIGFuIGVtcHR5IHN0
cmluZy4KKyAgICogSWYgdGhlIG1vZGVsIGlzIG5vdCBzZXQgdG8gdGhlIGZpcnN0IG9mIHRoZSBt
b250aCwgdGhlIG5leHQgdmlldyB0byBtb2RlbCB1cGRhdGUgd2lsbCBzZXQgaXQKKyAgICogdG8g
dGhlIGZpcnN0IG9mIHRoZSBtb250aC4KKyAgICoKKyAgICogVGhlIHRpbWV6b25lIHRvIGJlIHVz
ZWQgdG8gcmVhZC93cml0ZSB0aGUgYERhdGVgIGluc3RhbmNlIGluIHRoZSBtb2RlbCBjYW4gYmUg
ZGVmaW5lZCB1c2luZworICAgKiB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nTW9kZWxPcHRpb25zIG5n
TW9kZWxPcHRpb25zfS4gQnkgZGVmYXVsdCwgdGhpcyBpcyB0aGUgdGltZXpvbmUgb2YgdGhlIGJy
b3dzZXIuCisgICAqCisgICAqIEBwYXJhbSB7c3RyaW5nfSBuZ01vZGVsIEFzc2lnbmFibGUgYW5n
dWxhciBleHByZXNzaW9uIHRvIGRhdGEtYmluZCB0by4KKyAgICogQHBhcmFtIHtzdHJpbmc9fSBu
YW1lIFByb3BlcnR5IG5hbWUgb2YgdGhlIGZvcm0gdW5kZXIgd2hpY2ggdGhlIGNvbnRyb2wgaXMg
cHVibGlzaGVkLgorICAgKiBAcGFyYW0ge3N0cmluZz19IG1pbiBTZXRzIHRoZSBgbWluYCB2YWxp
ZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpcyBsZXNzIHRoYW4gYG1pbmAu
IFRoaXMgbXVzdCBiZQorICAgKiBhIHZhbGlkIElTTyBtb250aCBmb3JtYXQgKHl5eXktTU0pLgor
ICAgKiBAcGFyYW0ge3N0cmluZz19IG1heCBTZXRzIHRoZSBgbWF4YCB2YWxpZGF0aW9uIGVycm9y
IGtleSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpcyBncmVhdGVyIHRoYW4gYG1heGAuIFRoaXMgbXVz
dAorICAgKiBiZSBhIHZhbGlkIElTTyBtb250aCBmb3JtYXQgKHl5eXktTU0pLgorICAgKiBAcGFy
YW0ge3N0cmluZz19IHJlcXVpcmVkIFNldHMgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGVycm9yIGtl
eSBpZiB0aGUgdmFsdWUgaXMgbm90IGVudGVyZWQuCisgICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdS
ZXF1aXJlZCBBZGRzIGByZXF1aXJlZGAgYXR0cmlidXRlIGFuZCBgcmVxdWlyZWRgIHZhbGlkYXRp
b24gY29uc3RyYWludCB0bworICAgKiAgICB0aGUgZWxlbWVudCB3aGVuIHRoZSBuZ1JlcXVpcmVk
IGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRydWUuIFVzZSBgbmdSZXF1aXJlZGAgaW5zdGVhZCBv
ZgorICAgKiAgICBgcmVxdWlyZWRgIHdoZW4geW91IHdhbnQgdG8gZGF0YS1iaW5kIHRvIHRoZSBg
cmVxdWlyZWRgIGF0dHJpYnV0ZS4KKyAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ0NoYW5nZSBBbmd1
bGFyIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWQgd2hlbiBpbnB1dCBjaGFuZ2VzIGR1ZSB0byB1
c2VyCisgICAqICAgIGludGVyYWN0aW9uIHdpdGggdGhlIGlucHV0IGVsZW1lbnQuCisgICAqCisg
ICAqIEBleGFtcGxlCisgICA8ZXhhbXBsZSBuYW1lPSJtb250aC1pbnB1dC1kaXJlY3RpdmUiIG1v
ZHVsZT0ibW9udGhFeGFtcGxlIj4KKyAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICA8
c2NyaXB0PgorICAgICAgYW5ndWxhci5tb2R1bGUoJ21vbnRoRXhhbXBsZScsIFtdKQorICAgICAg
ICAuY29udHJvbGxlcignRGF0ZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29w
ZSkgeworICAgICAgICAgICRzY29wZS5leGFtcGxlID0geworICAgICAgICAgICAgdmFsdWU6IG5l
dyBEYXRlKDIwMTMsIDksIDEpCisgICAgICAgICAgfTsKKyAgICAgICAgfV0pOworICAgICA8L3Nj
cmlwdD4KKyAgICAgPGZvcm0gbmFtZT0ibXlGb3JtIiBuZy1jb250cm9sbGVyPSJEYXRlQ29udHJv
bGxlciBhcyBkYXRlQ3RybCI+CisgICAgICAgPGxhYmVsIGZvcj0iZXhhbXBsZUlucHV0Ij5QaWNr
IGEgbW9udGggaW4gMjAxMzo8L2xhYmVsPgorICAgICAgIDxpbnB1dCBpZD0iZXhhbXBsZUlucHV0
IiB0eXBlPSJtb250aCIgbmFtZT0iaW5wdXQiIG5nLW1vZGVsPSJleGFtcGxlLnZhbHVlIgorICAg
ICAgICAgIHBsYWNlaG9sZGVyPSJ5eXl5LU1NIiBtaW49IjIwMTMtMDEiIG1heD0iMjAxMy0xMiIg
cmVxdWlyZWQgLz4KKyAgICAgICA8ZGl2IHJvbGU9ImFsZXJ0Ij4KKyAgICAgICAgIDxzcGFuIGNs
YXNzPSJlcnJvciIgbmctc2hvdz0ibXlGb3JtLmlucHV0LiRlcnJvci5yZXF1aXJlZCI+CisgICAg
ICAgICAgICBSZXF1aXJlZCE8L3NwYW4+CisgICAgICAgICA8c3BhbiBjbGFzcz0iZXJyb3IiIG5n
LXNob3c9Im15Rm9ybS5pbnB1dC4kZXJyb3IubW9udGgiPgorICAgICAgICAgICAgTm90IGEgdmFs
aWQgbW9udGghPC9zcGFuPgorICAgICAgIDwvZGl2PgorICAgICAgIDx0dD52YWx1ZSA9IHt7ZXhh
bXBsZS52YWx1ZSB8IGRhdGU6ICJ5eXl5LU1NIn19PC90dD48YnIvPgorICAgICAgIDx0dD5teUZv
cm0uaW5wdXQuJHZhbGlkID0ge3tteUZvcm0uaW5wdXQuJHZhbGlkfX08L3R0Pjxici8+CisgICAg
ICAgPHR0Pm15Rm9ybS5pbnB1dC4kZXJyb3IgPSB7e215Rm9ybS5pbnB1dC4kZXJyb3J9fTwvdHQ+
PGJyLz4KKyAgICAgICA8dHQ+bXlGb3JtLiR2YWxpZCA9IHt7bXlGb3JtLiR2YWxpZH19PC90dD48
YnIvPgorICAgICAgIDx0dD5teUZvcm0uJGVycm9yLnJlcXVpcmVkID0ge3shIW15Rm9ybS4kZXJy
b3IucmVxdWlyZWR9fTwvdHQ+PGJyLz4KKyAgICAgPC9mb3JtPgorICAgPC9maWxlPgorICAgPGZp
bGUgbmFtZT0icHJvdHJhY3Rvci5qcyIgdHlwZT0icHJvdHJhY3RvciI+CisgICAgICB2YXIgdmFs
dWUgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ2V4YW1wbGUudmFsdWUgfCBkYXRlOiAieXl5eS1NTSIn
KSk7CisgICAgICB2YXIgdmFsaWQgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ215Rm9ybS5pbnB1dC4k
dmFsaWQnKSk7CisgICAgICB2YXIgaW5wdXQgPSBlbGVtZW50KGJ5Lm1vZGVsKCdleGFtcGxlLnZh
bHVlJykpOworCisgICAgICAvLyBjdXJyZW50bHkgcHJvdHJhY3Rvci93ZWJkcml2ZXIgZG9lcyBu
b3Qgc3VwcG9ydAorICAgICAgLy8gc2VuZGluZyBrZXlzIHRvIGFsbCBrbm93biBIVE1MNSBpbnB1
dCBjb250cm9scworICAgICAgLy8gZm9yIHZhcmlvdXMgYnJvd3NlcnMgKGh0dHBzOi8vZ2l0aHVi
LmNvbS9hbmd1bGFyL3Byb3RyYWN0b3IvaXNzdWVzLzU2MikuCisgICAgICBmdW5jdGlvbiBzZXRJ
bnB1dCh2YWwpIHsKKyAgICAgICAgLy8gc2V0IHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCBhbmQg
Zm9yY2UgdmFsaWRhdGlvbi4KKyAgICAgICAgdmFyIHNjciA9ICJ2YXIgaXB0ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2V4YW1wbGVJbnB1dCcpOyAiICsKKyAgICAgICAgImlwdC52YWx1ZSA9
ICciICsgdmFsICsgIic7IiArCisgICAgICAgICJhbmd1bGFyLmVsZW1lbnQoaXB0KS5zY29wZSgp
LiRhcHBseShmdW5jdGlvbihzKSB7IHMubXlGb3JtW2lwdC5uYW1lXS4kc2V0Vmlld1ZhbHVlKCci
ICsgdmFsICsgIicpOyB9KTsiOworICAgICAgICBicm93c2VyLmV4ZWN1dGVTY3JpcHQoc2NyKTsK
KyAgICAgIH0KKworICAgICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIHRvIG1vZGVsJywgZnVuY3Rp
b24oKSB7CisgICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkpLnRvQ29udGFpbignMjAxMy0x
MCcpOworICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ215Rm9ybS5p
bnB1dC4kdmFsaWQgPSB0cnVlJyk7CisgICAgICB9KTsKKworICAgICAgaXQoJ3Nob3VsZCBiZSBp
bnZhbGlkIGlmIGVtcHR5JywgZnVuY3Rpb24oKSB7CisgICAgICAgIHNldElucHV0KCcnKTsKKyAg
ICAgICAgZXhwZWN0KHZhbHVlLmdldFRleHQoKSkudG9FcXVhbCgndmFsdWUgPScpOworICAgICAg
ICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ215Rm9ybS5pbnB1dC4kdmFsaWQg
PSBmYWxzZScpOworICAgICAgfSk7CisKKyAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBv
dmVyIG1heCcsIGZ1bmN0aW9uKCkgeworICAgICAgICBzZXRJbnB1dCgnMjAxNS0wMScpOworICAg
ICAgICBleHBlY3QodmFsdWUuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJycpOworICAgICAgICBleHBl
Y3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ215Rm9ybS5pbnB1dC4kdmFsaWQgPSBmYWxz
ZScpOworICAgICAgfSk7CisgICA8L2ZpbGU+CisgICA8L2V4YW1wbGU+CisgICAqLworICAnbW9u
dGgnOiBjcmVhdGVEYXRlSW5wdXRUeXBlKCdtb250aCcsIE1PTlRIX1JFR0VYUCwKKyAgICAgY3Jl
YXRlRGF0ZVBhcnNlcihNT05USF9SRUdFWFAsIFsneXl5eScsICdNTSddKSwKKyAgICAgJ3l5eXkt
TU0nKSwKKworICAvKioKKyAgICogQG5nZG9jIGlucHV0CisgICAqIEBuYW1lIGlucHV0W251bWJl
cl0KKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIFRleHQgaW5wdXQgd2l0aCBudW1iZXIg
dmFsaWRhdGlvbiBhbmQgdHJhbnNmb3JtYXRpb24uIFNldHMgdGhlIGBudW1iZXJgIHZhbGlkYXRp
b24KKyAgICogZXJyb3IgaWYgbm90IGEgdmFsaWQgbnVtYmVyLgorICAgKgorICAgKiA8ZGl2IGNs
YXNzPSJhbGVydCBhbGVydC13YXJuaW5nIj4KKyAgICogVGhlIG1vZGVsIG11c3QgYWx3YXlzIGJl
IG9mIHR5cGUgYG51bWJlcmAgb3RoZXJ3aXNlIEFuZ3VsYXIgd2lsbCB0aHJvdyBhbiBlcnJvci4K
KyAgICogQmUgYXdhcmUgdGhhdCBhIHN0cmluZyBjb250YWluaW5nIGEgbnVtYmVyIGlzIG5vdCBl
bm91Z2guIFNlZSB0aGUge0BsaW5rIG5nTW9kZWw6bnVtZm10fQorICAgKiBlcnJvciBkb2NzIGZv
ciBtb3JlIGluZm9ybWF0aW9uIGFuZCBhbiBleGFtcGxlIG9mIGhvdyB0byBjb252ZXJ0IHlvdXIg
bW9kZWwgaWYgbmVjZXNzYXJ5LgorICAgKiA8L2Rpdj4KKyAgICoKKyAgICogIyMgSXNzdWVzIHdp
dGggSFRNTDUgY29uc3RyYWludCB2YWxpZGF0aW9uCisgICAqCisgICAqIEluIGJyb3dzZXJzIHRo
YXQgZm9sbG93IHRoZQorICAgKiBbSFRNTDUgc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9odG1sLnNw
ZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNudW1iZXItc3RhdGUtJTI4dHlwZT1u
dW1iZXIlMjkpLAorICAgKiBgaW5wdXRbbnVtYmVyXWAgZG9lcyBub3Qgd29yayBhcyBleHBlY3Rl
ZCB3aXRoIHtAbGluayBuZ01vZGVsT3B0aW9ucyBgbmdNb2RlbE9wdGlvbnMuYWxsb3dJbnZhbGlk
YH0uCisgICAqIElmIGEgbm9uLW51bWJlciBpcyBlbnRlcmVkIGluIHRoZSBpbnB1dCwgdGhlIGJy
b3dzZXIgd2lsbCByZXBvcnQgdGhlIHZhbHVlIGFzIGFuIGVtcHR5IHN0cmluZywKKyAgICogd2hp
Y2ggbWVhbnMgdGhlIHZpZXcgLyBtb2RlbCB2YWx1ZXMgaW4gYG5nTW9kZWxgIGFuZCBzdWJzZXF1
ZW50bHkgdGhlIHNjb3BlIHZhbHVlCisgICAqIHdpbGwgYWxzbyBiZSBhbiBlbXB0eSBzdHJpbmcu
CisgICAqCisgICAqCisgICAqIEBwYXJhbSB7c3RyaW5nfSBuZ01vZGVsIEFzc2lnbmFibGUgYW5n
dWxhciBleHByZXNzaW9uIHRvIGRhdGEtYmluZCB0by4KKyAgICogQHBhcmFtIHtzdHJpbmc9fSBu
YW1lIFByb3BlcnR5IG5hbWUgb2YgdGhlIGZvcm0gdW5kZXIgd2hpY2ggdGhlIGNvbnRyb2wgaXMg
cHVibGlzaGVkLgorICAgKiBAcGFyYW0ge3N0cmluZz19IG1pbiBTZXRzIHRoZSBgbWluYCB2YWxp
ZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpcyBsZXNzIHRoYW4gYG1pbmAu
CisgICAqIEBwYXJhbSB7c3RyaW5nPX0gbWF4IFNldHMgdGhlIGBtYXhgIHZhbGlkYXRpb24gZXJy
b3Iga2V5IGlmIHRoZSB2YWx1ZSBlbnRlcmVkIGlzIGdyZWF0ZXIgdGhhbiBgbWF4YC4KKyAgICog
QHBhcmFtIHtzdHJpbmc9fSByZXF1aXJlZCBTZXRzIGByZXF1aXJlZGAgdmFsaWRhdGlvbiBlcnJv
ciBrZXkgaWYgdGhlIHZhbHVlIGlzIG5vdCBlbnRlcmVkLgorICAgKiBAcGFyYW0ge3N0cmluZz19
IG5nUmVxdWlyZWQgQWRkcyBgcmVxdWlyZWRgIGF0dHJpYnV0ZSBhbmQgYHJlcXVpcmVkYCB2YWxp
ZGF0aW9uIGNvbnN0cmFpbnQgdG8KKyAgICogICAgdGhlIGVsZW1lbnQgd2hlbiB0aGUgbmdSZXF1
aXJlZCBleHByZXNzaW9uIGV2YWx1YXRlcyB0byB0cnVlLiBVc2UgYG5nUmVxdWlyZWRgIGluc3Rl
YWQgb2YKKyAgICogICAgYHJlcXVpcmVkYCB3aGVuIHlvdSB3YW50IHRvIGRhdGEtYmluZCB0byB0
aGUgYHJlcXVpcmVkYCBhdHRyaWJ1dGUuCisgICAqIEBwYXJhbSB7bnVtYmVyPX0gbmdNaW5sZW5n
dGggU2V0cyBgbWlubGVuZ3RoYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMg
c2hvcnRlciB0aGFuCisgICAqICAgIG1pbmxlbmd0aC4KKyAgICogQHBhcmFtIHtudW1iZXI9fSBu
Z01heGxlbmd0aCBTZXRzIGBtYXhsZW5ndGhgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2
YWx1ZSBpcyBsb25nZXIgdGhhbgorICAgKiAgICBtYXhsZW5ndGguIFNldHRpbmcgdGhlIGF0dHJp
YnV0ZSB0byBhIG5lZ2F0aXZlIG9yIG5vbi1udW1lcmljIHZhbHVlLCBhbGxvd3MgdmlldyB2YWx1
ZXMgb2YKKyAgICogICAgYW55IGxlbmd0aC4KKyAgICogQHBhcmFtIHtzdHJpbmc9fSBwYXR0ZXJu
IFNpbWlsYXIgdG8gYG5nUGF0dGVybmAgZXhjZXB0IHRoYXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBp
cyB0aGUgYWN0dWFsIHN0cmluZworICAgKiAgICB0aGF0IGNvbnRhaW5zIHRoZSByZWd1bGFyIGV4
cHJlc3Npb24gYm9keSB0aGF0IHdpbGwgYmUgY29udmVydGVkIHRvIGEgcmVndWxhciBleHByZXNz
aW9uCisgICAqICAgIGFzIGluIHRoZSBuZ1BhdHRlcm4gZGlyZWN0aXZlLgorICAgKiBAcGFyYW0g
e3N0cmluZz19IG5nUGF0dGVybiBTZXRzIGBwYXR0ZXJuYCB2YWxpZGF0aW9uIGVycm9yIGtleSBp
ZiB0aGUgbmdNb2RlbCB2YWx1ZSBkb2VzIG5vdCBtYXRjaAorICAgKiAgICBhIFJlZ0V4cCBmb3Vu
ZCBieSBldmFsdWF0aW5nIHRoZSBBbmd1bGFyIGV4cHJlc3Npb24gZ2l2ZW4gaW4gdGhlIGF0dHJp
YnV0ZSB2YWx1ZS4KKyAgICogICAgSWYgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGEgUmVn
RXhwIG9iamVjdCwgdGhlbiB0aGlzIGlzIHVzZWQgZGlyZWN0bHkuCisgICAqICAgIElmIHRoZSBl
eHByZXNzaW9uIGV2YWx1YXRlcyB0byBhIHN0cmluZywgdGhlbiBpdCB3aWxsIGJlIGNvbnZlcnRl
ZCB0byBhIFJlZ0V4cAorICAgKiAgICBhZnRlciB3cmFwcGluZyBpdCBpbiBgXmAgYW5kIGAkYCBj
aGFyYWN0ZXJzLiBGb3IgaW5zdGFuY2UsIGAiYWJjImAgd2lsbCBiZSBjb252ZXJ0ZWQgdG8KKyAg
ICogICAgYG5ldyBSZWdFeHAoJ15hYmMkJylgLjxiciAvPgorICAgKiAgICAqKk5vdGU6KiogQXZv
aWQgdXNpbmcgdGhlIGBnYCBmbGFnIG9uIHRoZSBSZWdFeHAsIGFzIGl0IHdpbGwgY2F1c2UgZWFj
aCBzdWNjZXNzaXZlIHNlYXJjaCB0bworICAgKiAgICBzdGFydCBhdCB0aGUgaW5kZXggb2YgdGhl
IGxhc3Qgc2VhcmNoJ3MgbWF0Y2gsIHRodXMgbm90IHRha2luZyB0aGUgd2hvbGUgaW5wdXQgdmFs
dWUgaW50bworICAgKiAgICBhY2NvdW50LgorICAgKiBAcGFyYW0ge3N0cmluZz19IG5nQ2hhbmdl
IEFuZ3VsYXIgZXhwcmVzc2lvbiB0byBiZSBleGVjdXRlZCB3aGVuIGlucHV0IGNoYW5nZXMgZHVl
IHRvIHVzZXIKKyAgICogICAgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaW5wdXQgZWxlbWVudC4KKyAg
ICoKKyAgICogQGV4YW1wbGUKKyAgICAgIDxleGFtcGxlIG5hbWU9Im51bWJlci1pbnB1dC1kaXJl
Y3RpdmUiIG1vZHVsZT0ibnVtYmVyRXhhbXBsZSI+CisgICAgICAgIDxmaWxlIG5hbWU9ImluZGV4
Lmh0bWwiPgorICAgICAgICAgPHNjcmlwdD4KKyAgICAgICAgICAgYW5ndWxhci5tb2R1bGUoJ251
bWJlckV4YW1wbGUnLCBbXSkKKyAgICAgICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRy
b2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkgeworICAgICAgICAgICAgICAgJHNj
b3BlLmV4YW1wbGUgPSB7CisgICAgICAgICAgICAgICAgIHZhbHVlOiAxMgorICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgICB9XSk7CisgICAgICAgICA8L3NjcmlwdD4KKyAgICAgICAgIDxm
b3JtIG5hbWU9Im15Rm9ybSIgbmctY29udHJvbGxlcj0iRXhhbXBsZUNvbnRyb2xsZXIiPgorICAg
ICAgICAgICA8bGFiZWw+TnVtYmVyOgorICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIi
IG5hbWU9ImlucHV0IiBuZy1tb2RlbD0iZXhhbXBsZS52YWx1ZSIKKyAgICAgICAgICAgICAgICAg
ICAgbWluPSIwIiBtYXg9Ijk5IiByZXF1aXJlZD4KKyAgICAgICAgICA8L2xhYmVsPgorICAgICAg
ICAgICA8ZGl2IHJvbGU9ImFsZXJ0Ij4KKyAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZXJyb3Ii
IG5nLXNob3c9Im15Rm9ybS5pbnB1dC4kZXJyb3IucmVxdWlyZWQiPgorICAgICAgICAgICAgICAg
UmVxdWlyZWQhPC9zcGFuPgorICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlcnJvciIgbmctc2hv
dz0ibXlGb3JtLmlucHV0LiRlcnJvci5udW1iZXIiPgorICAgICAgICAgICAgICAgTm90IHZhbGlk
IG51bWJlciE8L3NwYW4+CisgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICA8dHQ+dmFsdWUg
PSB7e2V4YW1wbGUudmFsdWV9fTwvdHQ+PGJyLz4KKyAgICAgICAgICAgPHR0Pm15Rm9ybS5pbnB1
dC4kdmFsaWQgPSB7e215Rm9ybS5pbnB1dC4kdmFsaWR9fTwvdHQ+PGJyLz4KKyAgICAgICAgICAg
PHR0Pm15Rm9ybS5pbnB1dC4kZXJyb3IgPSB7e215Rm9ybS5pbnB1dC4kZXJyb3J9fTwvdHQ+PGJy
Lz4KKyAgICAgICAgICAgPHR0Pm15Rm9ybS4kdmFsaWQgPSB7e215Rm9ybS4kdmFsaWR9fTwvdHQ+
PGJyLz4KKyAgICAgICAgICAgPHR0Pm15Rm9ybS4kZXJyb3IucmVxdWlyZWQgPSB7eyEhbXlGb3Jt
LiRlcnJvci5yZXF1aXJlZH19PC90dD48YnIvPgorICAgICAgICAgIDwvZm9ybT4KKyAgICAgICAg
PC9maWxlPgorICAgICAgICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFj
dG9yIj4KKyAgICAgICAgICB2YXIgdmFsdWUgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ2V4YW1wbGUu
dmFsdWUnKSk7CisgICAgICAgICAgdmFyIHZhbGlkID0gZWxlbWVudChieS5iaW5kaW5nKCdteUZv
cm0uaW5wdXQuJHZhbGlkJykpOworICAgICAgICAgIHZhciBpbnB1dCA9IGVsZW1lbnQoYnkubW9k
ZWwoJ2V4YW1wbGUudmFsdWUnKSk7CisKKyAgICAgICAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUg
dG8gbW9kZWwnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0
KCkpLnRvQ29udGFpbignMTInKTsKKyAgICAgICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkp
LnRvQ29udGFpbigndHJ1ZScpOworICAgICAgICAgIH0pOworCisgICAgICAgICAgaXQoJ3Nob3Vs
ZCBiZSBpbnZhbGlkIGlmIGVtcHR5JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpbnB1dC5j
bGVhcigpOworICAgICAgICAgICAgaW5wdXQuc2VuZEtleXMoJycpOworICAgICAgICAgICAgZXhw
ZWN0KHZhbHVlLmdldFRleHQoKSkudG9FcXVhbCgndmFsdWUgPScpOworICAgICAgICAgICAgZXhw
ZWN0KHZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCdmYWxzZScpOworICAgICAgICAgIH0pOwor
CisgICAgICAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIG92ZXIgbWF4JywgZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICBpbnB1dC5jbGVhcigpOworICAgICAgICAgICAgaW5wdXQuc2VuZEtl
eXMoJzEyMycpOworICAgICAgICAgICAgZXhwZWN0KHZhbHVlLmdldFRleHQoKSkudG9FcXVhbCgn
dmFsdWUgPScpOworICAgICAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSkudG9Db250YWlu
KCdmYWxzZScpOworICAgICAgICAgIH0pOworICAgICAgICA8L2ZpbGU+CisgICAgICA8L2V4YW1w
bGU+CisgICAqLworICAnbnVtYmVyJzogbnVtYmVySW5wdXRUeXBlLAorCisKKyAgLyoqCisgICAq
IEBuZ2RvYyBpbnB1dAorICAgKiBAbmFtZSBpbnB1dFt1cmxdCisgICAqCisgICAqIEBkZXNjcmlw
dGlvbgorICAgKiBUZXh0IGlucHV0IHdpdGggVVJMIHZhbGlkYXRpb24uIFNldHMgdGhlIGB1cmxg
IHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSBjb250ZW50IGlzIG5vdCBhCisgICAqIHZhbGlk
IFVSTC4KKyAgICoKKyAgICogPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtd2FybmluZyI+CisgICAq
ICoqTm90ZToqKiBgaW5wdXRbdXJsXWAgdXNlcyBhIHJlZ2V4IHRvIHZhbGlkYXRlIHVybHMgdGhh
dCBpcyBkZXJpdmVkIGZyb20gdGhlIHJlZ2V4CisgICAqIHVzZWQgaW4gQ2hyb21pdW0uIElmIHlv
dSBuZWVkIHN0cmljdGVyIHZhbGlkYXRpb24sIHlvdSBjYW4gdXNlIGBuZy1wYXR0ZXJuYCBvciBt
b2RpZnkKKyAgICogdGhlIGJ1aWx0LWluIHZhbGlkYXRvcnMgKHNlZSB0aGUge0BsaW5rIGd1aWRl
L2Zvcm1zIEZvcm1zIGd1aWRlfSkKKyAgICogPC9kaXY+CisgICAqCisgICAqIEBwYXJhbSB7c3Ry
aW5nfSBuZ01vZGVsIEFzc2lnbmFibGUgYW5ndWxhciBleHByZXNzaW9uIHRvIGRhdGEtYmluZCB0
by4KKyAgICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lIFByb3BlcnR5IG5hbWUgb2YgdGhlIGZvcm0g
dW5kZXIgd2hpY2ggdGhlIGNvbnRyb2wgaXMgcHVibGlzaGVkLgorICAgKiBAcGFyYW0ge3N0cmlu
Zz19IHJlcXVpcmVkIFNldHMgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUg
dmFsdWUgaXMgbm90IGVudGVyZWQuCisgICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdSZXF1aXJlZCBB
ZGRzIGByZXF1aXJlZGAgYXR0cmlidXRlIGFuZCBgcmVxdWlyZWRgIHZhbGlkYXRpb24gY29uc3Ry
YWludCB0bworICAgKiAgICB0aGUgZWxlbWVudCB3aGVuIHRoZSBuZ1JlcXVpcmVkIGV4cHJlc3Np
b24gZXZhbHVhdGVzIHRvIHRydWUuIFVzZSBgbmdSZXF1aXJlZGAgaW5zdGVhZCBvZgorICAgKiAg
ICBgcmVxdWlyZWRgIHdoZW4geW91IHdhbnQgdG8gZGF0YS1iaW5kIHRvIHRoZSBgcmVxdWlyZWRg
IGF0dHJpYnV0ZS4KKyAgICogQHBhcmFtIHtudW1iZXI9fSBuZ01pbmxlbmd0aCBTZXRzIGBtaW5s
ZW5ndGhgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBzaG9ydGVyIHRoYW4K
KyAgICogICAgbWlubGVuZ3RoLgorICAgKiBAcGFyYW0ge251bWJlcj19IG5nTWF4bGVuZ3RoIFNl
dHMgYG1heGxlbmd0aGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIGxvbmdl
ciB0aGFuCisgICAqICAgIG1heGxlbmd0aC4gU2V0dGluZyB0aGUgYXR0cmlidXRlIHRvIGEgbmVn
YXRpdmUgb3Igbm9uLW51bWVyaWMgdmFsdWUsIGFsbG93cyB2aWV3IHZhbHVlcyBvZgorICAgKiAg
ICBhbnkgbGVuZ3RoLgorICAgKiBAcGFyYW0ge3N0cmluZz19IHBhdHRlcm4gU2ltaWxhciB0byBg
bmdQYXR0ZXJuYCBleGNlcHQgdGhhdCB0aGUgYXR0cmlidXRlIHZhbHVlIGlzIHRoZSBhY3R1YWwg
c3RyaW5nCisgICAqICAgIHRoYXQgY29udGFpbnMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBib2R5
IHRoYXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICogICAg
YXMgaW4gdGhlIG5nUGF0dGVybiBkaXJlY3RpdmUuCisgICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdQ
YXR0ZXJuIFNldHMgYHBhdHRlcm5gIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSBuZ01vZGVs
IHZhbHVlIGRvZXMgbm90IG1hdGNoCisgICAqICAgIGEgUmVnRXhwIGZvdW5kIGJ5IGV2YWx1YXRp
bmcgdGhlIEFuZ3VsYXIgZXhwcmVzc2lvbiBnaXZlbiBpbiB0aGUgYXR0cmlidXRlIHZhbHVlLgor
ICAgKiAgICBJZiB0aGUgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gYSBSZWdFeHAgb2JqZWN0LCB0
aGVuIHRoaXMgaXMgdXNlZCBkaXJlY3RseS4KKyAgICogICAgSWYgdGhlIGV4cHJlc3Npb24gZXZh
bHVhdGVzIHRvIGEgc3RyaW5nLCB0aGVuIGl0IHdpbGwgYmUgY29udmVydGVkIHRvIGEgUmVnRXhw
CisgICAqICAgIGFmdGVyIHdyYXBwaW5nIGl0IGluIGBeYCBhbmQgYCRgIGNoYXJhY3RlcnMuIEZv
ciBpbnN0YW5jZSwgYCJhYmMiYCB3aWxsIGJlIGNvbnZlcnRlZCB0bworICAgKiAgICBgbmV3IFJl
Z0V4cCgnXmFiYyQnKWAuPGJyIC8+CisgICAqICAgICoqTm90ZToqKiBBdm9pZCB1c2luZyB0aGUg
YGdgIGZsYWcgb24gdGhlIFJlZ0V4cCwgYXMgaXQgd2lsbCBjYXVzZSBlYWNoIHN1Y2Nlc3NpdmUg
c2VhcmNoIHRvCisgICAqICAgIHN0YXJ0IGF0IHRoZSBpbmRleCBvZiB0aGUgbGFzdCBzZWFyY2gn
cyBtYXRjaCwgdGh1cyBub3QgdGFraW5nIHRoZSB3aG9sZSBpbnB1dCB2YWx1ZSBpbnRvCisgICAq
ICAgIGFjY291bnQuCisgICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdDaGFuZ2UgQW5ndWxhciBleHBy
ZXNzaW9uIHRvIGJlIGV4ZWN1dGVkIHdoZW4gaW5wdXQgY2hhbmdlcyBkdWUgdG8gdXNlcgorICAg
KiAgICBpbnRlcmFjdGlvbiB3aXRoIHRoZSBpbnB1dCBlbGVtZW50LgorICAgKgorICAgKiBAZXhh
bXBsZQorICAgICAgPGV4YW1wbGUgbmFtZT0idXJsLWlucHV0LWRpcmVjdGl2ZSIgbW9kdWxlPSJ1
cmxFeGFtcGxlIj4KKyAgICAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAgICAgICA8
c2NyaXB0PgorICAgICAgICAgICBhbmd1bGFyLm1vZHVsZSgndXJsRXhhbXBsZScsIFtdKQorICAg
ICAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVu
Y3Rpb24oJHNjb3BlKSB7CisgICAgICAgICAgICAgICAkc2NvcGUudXJsID0geworICAgICAgICAg
ICAgICAgICB0ZXh0OiAnaHR0cDovL2dvb2dsZS5jb20nCisgICAgICAgICAgICAgICB9OworICAg
ICAgICAgICAgIH1dKTsKKyAgICAgICAgIDwvc2NyaXB0PgorICAgICAgICAgPGZvcm0gbmFtZT0i
bXlGb3JtIiBuZy1jb250cm9sbGVyPSJFeGFtcGxlQ29udHJvbGxlciI+CisgICAgICAgICAgIDxs
YWJlbD5VUkw6CisgICAgICAgICAgICAgPGlucHV0IHR5cGU9InVybCIgbmFtZT0iaW5wdXQiIG5n
LW1vZGVsPSJ1cmwudGV4dCIgcmVxdWlyZWQ+CisgICAgICAgICAgIDxsYWJlbD4KKyAgICAgICAg
ICAgPGRpdiByb2xlPSJhbGVydCI+CisgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVycm9yIiBu
Zy1zaG93PSJteUZvcm0uaW5wdXQuJGVycm9yLnJlcXVpcmVkIj4KKyAgICAgICAgICAgICAgIFJl
cXVpcmVkITwvc3Bhbj4KKyAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZXJyb3IiIG5nLXNob3c9
Im15Rm9ybS5pbnB1dC4kZXJyb3IudXJsIj4KKyAgICAgICAgICAgICAgIE5vdCB2YWxpZCB1cmwh
PC9zcGFuPgorICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgPHR0PnRleHQgPSB7e3VybC50
ZXh0fX08L3R0Pjxici8+CisgICAgICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJHZhbGlkID0ge3tt
eUZvcm0uaW5wdXQuJHZhbGlkfX08L3R0Pjxici8+CisgICAgICAgICAgIDx0dD5teUZvcm0uaW5w
dXQuJGVycm9yID0ge3tteUZvcm0uaW5wdXQuJGVycm9yfX08L3R0Pjxici8+CisgICAgICAgICAg
IDx0dD5teUZvcm0uJHZhbGlkID0ge3tteUZvcm0uJHZhbGlkfX08L3R0Pjxici8+CisgICAgICAg
ICAgIDx0dD5teUZvcm0uJGVycm9yLnJlcXVpcmVkID0ge3shIW15Rm9ybS4kZXJyb3IucmVxdWly
ZWR9fTwvdHQ+PGJyLz4KKyAgICAgICAgICAgPHR0Pm15Rm9ybS4kZXJyb3IudXJsID0ge3shIW15
Rm9ybS4kZXJyb3IudXJsfX08L3R0Pjxici8+CisgICAgICAgICAgPC9mb3JtPgorICAgICAgICA8
L2ZpbGU+CisgICAgICAgIDxmaWxlIG5hbWU9InByb3RyYWN0b3IuanMiIHR5cGU9InByb3RyYWN0
b3IiPgorICAgICAgICAgIHZhciB0ZXh0ID0gZWxlbWVudChieS5iaW5kaW5nKCd1cmwudGV4dCcp
KTsKKyAgICAgICAgICB2YXIgdmFsaWQgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ215Rm9ybS5pbnB1
dC4kdmFsaWQnKSk7CisgICAgICAgICAgdmFyIGlucHV0ID0gZWxlbWVudChieS5tb2RlbCgndXJs
LnRleHQnKSk7CisKKyAgICAgICAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgdG8gbW9kZWwnLCBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgIGV4cGVjdCh0ZXh0LmdldFRleHQoKSkudG9Db250YWlu
KCdodHRwOi8vZ29vZ2xlLmNvbScpOworICAgICAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQo
KSkudG9Db250YWluKCd0cnVlJyk7CisgICAgICAgICAgfSk7CisKKyAgICAgICAgICBpdCgnc2hv
dWxkIGJlIGludmFsaWQgaWYgZW1wdHknLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlucHV0
LmNsZWFyKCk7CisgICAgICAgICAgICBpbnB1dC5zZW5kS2V5cygnJyk7CisKKyAgICAgICAgICAg
IGV4cGVjdCh0ZXh0LmdldFRleHQoKSkudG9FcXVhbCgndGV4dCA9Jyk7CisgICAgICAgICAgICBl
eHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ2ZhbHNlJyk7CisgICAgICAgICAgfSk7
CisKKyAgICAgICAgICBpdCgnc2hvdWxkIGJlIGludmFsaWQgaWYgbm90IHVybCcsIGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgaW5wdXQuY2xlYXIoKTsKKyAgICAgICAgICAgIGlucHV0LnNlbmRL
ZXlzKCdib3gnKTsKKworICAgICAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSkudG9Db250
YWluKCdmYWxzZScpOworICAgICAgICAgIH0pOworICAgICAgICA8L2ZpbGU+CisgICAgICA8L2V4
YW1wbGU+CisgICAqLworICAndXJsJzogdXJsSW5wdXRUeXBlLAorCisKKyAgLyoqCisgICAqIEBu
Z2RvYyBpbnB1dAorICAgKiBAbmFtZSBpbnB1dFtlbWFpbF0KKyAgICoKKyAgICogQGRlc2NyaXB0
aW9uCisgICAqIFRleHQgaW5wdXQgd2l0aCBlbWFpbCB2YWxpZGF0aW9uLiBTZXRzIHRoZSBgZW1h
aWxgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIG5vdCBhIHZhbGlkIGVtYWlsCisgICAqIGFkZHJl
c3MuCisgICAqCisgICAqIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LXdhcm5pbmciPgorICAgKiAq
Kk5vdGU6KiogYGlucHV0W2VtYWlsXWAgdXNlcyBhIHJlZ2V4IHRvIHZhbGlkYXRlIGVtYWlsIGFk
ZHJlc3NlcyB0aGF0IGlzIGRlcml2ZWQgZnJvbSB0aGUgcmVnZXgKKyAgICogdXNlZCBpbiBDaHJv
bWl1bS4gSWYgeW91IG5lZWQgc3RyaWN0ZXIgdmFsaWRhdGlvbiAoZS5nLiByZXF1aXJpbmcgYSB0
b3AtbGV2ZWwgZG9tYWluKSwgeW91IGNhbgorICAgKiB1c2UgYG5nLXBhdHRlcm5gIG9yIG1vZGlm
eSB0aGUgYnVpbHQtaW4gdmFsaWRhdG9ycyAoc2VlIHRoZSB7QGxpbmsgZ3VpZGUvZm9ybXMgRm9y
bXMgZ3VpZGV9KQorICAgKiA8L2Rpdj4KKyAgICoKKyAgICogQHBhcmFtIHtzdHJpbmd9IG5nTW9k
ZWwgQXNzaWduYWJsZSBhbmd1bGFyIGV4cHJlc3Npb24gdG8gZGF0YS1iaW5kIHRvLgorICAgKiBA
cGFyYW0ge3N0cmluZz19IG5hbWUgUHJvcGVydHkgbmFtZSBvZiB0aGUgZm9ybSB1bmRlciB3aGlj
aCB0aGUgY29udHJvbCBpcyBwdWJsaXNoZWQuCisgICAqIEBwYXJhbSB7c3RyaW5nPX0gcmVxdWly
ZWQgU2V0cyBgcmVxdWlyZWRgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBu
b3QgZW50ZXJlZC4KKyAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ1JlcXVpcmVkIEFkZHMgYHJlcXVp
cmVkYCBhdHRyaWJ1dGUgYW5kIGByZXF1aXJlZGAgdmFsaWRhdGlvbiBjb25zdHJhaW50IHRvCisg
ICAqICAgIHRoZSBlbGVtZW50IHdoZW4gdGhlIG5nUmVxdWlyZWQgZXhwcmVzc2lvbiBldmFsdWF0
ZXMgdG8gdHJ1ZS4gVXNlIGBuZ1JlcXVpcmVkYCBpbnN0ZWFkIG9mCisgICAqICAgIGByZXF1aXJl
ZGAgd2hlbiB5b3Ugd2FudCB0byBkYXRhLWJpbmQgdG8gdGhlIGByZXF1aXJlZGAgYXR0cmlidXRl
LgorICAgKiBAcGFyYW0ge251bWJlcj19IG5nTWlubGVuZ3RoIFNldHMgYG1pbmxlbmd0aGAgdmFs
aWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIHNob3J0ZXIgdGhhbgorICAgKiAgICBt
aW5sZW5ndGguCisgICAqIEBwYXJhbSB7bnVtYmVyPX0gbmdNYXhsZW5ndGggU2V0cyBgbWF4bGVu
Z3RoYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgbG9uZ2VyIHRoYW4KKyAg
ICogICAgbWF4bGVuZ3RoLiBTZXR0aW5nIHRoZSBhdHRyaWJ1dGUgdG8gYSBuZWdhdGl2ZSBvciBu
b24tbnVtZXJpYyB2YWx1ZSwgYWxsb3dzIHZpZXcgdmFsdWVzIG9mCisgICAqICAgIGFueSBsZW5n
dGguCisgICAqIEBwYXJhbSB7c3RyaW5nPX0gcGF0dGVybiBTaW1pbGFyIHRvIGBuZ1BhdHRlcm5g
IGV4Y2VwdCB0aGF0IHRoZSBhdHRyaWJ1dGUgdmFsdWUgaXMgdGhlIGFjdHVhbCBzdHJpbmcKKyAg
ICogICAgdGhhdCBjb250YWlucyB0aGUgcmVndWxhciBleHByZXNzaW9uIGJvZHkgdGhhdCB3aWxs
IGJlIGNvbnZlcnRlZCB0byBhIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgKiAgICBhcyBpbiB0aGUg
bmdQYXR0ZXJuIGRpcmVjdGl2ZS4KKyAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ1BhdHRlcm4gU2V0
cyBgcGF0dGVybmAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIG5nTW9kZWwgdmFsdWUgZG9l
cyBub3QgbWF0Y2gKKyAgICogICAgYSBSZWdFeHAgZm91bmQgYnkgZXZhbHVhdGluZyB0aGUgQW5n
dWxhciBleHByZXNzaW9uIGdpdmVuIGluIHRoZSBhdHRyaWJ1dGUgdmFsdWUuCisgICAqICAgIElm
IHRoZSBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBhIFJlZ0V4cCBvYmplY3QsIHRoZW4gdGhpcyBp
cyB1c2VkIGRpcmVjdGx5LgorICAgKiAgICBJZiB0aGUgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8g
YSBzdHJpbmcsIHRoZW4gaXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBSZWdFeHAKKyAgICogICAg
YWZ0ZXIgd3JhcHBpbmcgaXQgaW4gYF5gIGFuZCBgJGAgY2hhcmFjdGVycy4gRm9yIGluc3RhbmNl
LCBgImFiYyJgIHdpbGwgYmUgY29udmVydGVkIHRvCisgICAqICAgIGBuZXcgUmVnRXhwKCdeYWJj
JCcpYC48YnIgLz4KKyAgICogICAgKipOb3RlOioqIEF2b2lkIHVzaW5nIHRoZSBgZ2AgZmxhZyBv
biB0aGUgUmVnRXhwLCBhcyBpdCB3aWxsIGNhdXNlIGVhY2ggc3VjY2Vzc2l2ZSBzZWFyY2ggdG8K
KyAgICogICAgc3RhcnQgYXQgdGhlIGluZGV4IG9mIHRoZSBsYXN0IHNlYXJjaCdzIG1hdGNoLCB0
aHVzIG5vdCB0YWtpbmcgdGhlIHdob2xlIGlucHV0IHZhbHVlIGludG8KKyAgICogICAgYWNjb3Vu
dC4KKyAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ0NoYW5nZSBBbmd1bGFyIGV4cHJlc3Npb24gdG8g
YmUgZXhlY3V0ZWQgd2hlbiBpbnB1dCBjaGFuZ2VzIGR1ZSB0byB1c2VyCisgICAqICAgIGludGVy
YWN0aW9uIHdpdGggdGhlIGlucHV0IGVsZW1lbnQuCisgICAqCisgICAqIEBleGFtcGxlCisgICAg
ICA8ZXhhbXBsZSBuYW1lPSJlbWFpbC1pbnB1dC1kaXJlY3RpdmUiIG1vZHVsZT0iZW1haWxFeGFt
cGxlIj4KKyAgICAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAgICAgICA8c2NyaXB0
PgorICAgICAgICAgICBhbmd1bGFyLm1vZHVsZSgnZW1haWxFeGFtcGxlJywgW10pCisgICAgICAg
ICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlv
bigkc2NvcGUpIHsKKyAgICAgICAgICAgICAgICRzY29wZS5lbWFpbCA9IHsKKyAgICAgICAgICAg
ICAgICAgdGV4dDogJ21lQGV4YW1wbGUuY29tJworICAgICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgICB9XSk7CisgICAgICAgICA8L3NjcmlwdD4KKyAgICAgICAgICAgPGZvcm0gbmFtZT0ibXlG
b3JtIiBuZy1jb250cm9sbGVyPSJFeGFtcGxlQ29udHJvbGxlciI+CisgICAgICAgICAgICAgPGxh
YmVsPkVtYWlsOgorICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImVtYWlsIiBuYW1lPSJpbnB1
dCIgbmctbW9kZWw9ImVtYWlsLnRleHQiIHJlcXVpcmVkPgorICAgICAgICAgICAgIDwvbGFiZWw+
CisgICAgICAgICAgICAgPGRpdiByb2xlPSJhbGVydCI+CisgICAgICAgICAgICAgICA8c3BhbiBj
bGFzcz0iZXJyb3IiIG5nLXNob3c9Im15Rm9ybS5pbnB1dC4kZXJyb3IucmVxdWlyZWQiPgorICAg
ICAgICAgICAgICAgICBSZXF1aXJlZCE8L3NwYW4+CisgICAgICAgICAgICAgICA8c3BhbiBjbGFz
cz0iZXJyb3IiIG5nLXNob3c9Im15Rm9ybS5pbnB1dC4kZXJyb3IuZW1haWwiPgorICAgICAgICAg
ICAgICAgICBOb3QgdmFsaWQgZW1haWwhPC9zcGFuPgorICAgICAgICAgICAgIDwvZGl2PgorICAg
ICAgICAgICAgIDx0dD50ZXh0ID0ge3tlbWFpbC50ZXh0fX08L3R0Pjxici8+CisgICAgICAgICAg
ICAgPHR0Pm15Rm9ybS5pbnB1dC4kdmFsaWQgPSB7e215Rm9ybS5pbnB1dC4kdmFsaWR9fTwvdHQ+
PGJyLz4KKyAgICAgICAgICAgICA8dHQ+bXlGb3JtLmlucHV0LiRlcnJvciA9IHt7bXlGb3JtLmlu
cHV0LiRlcnJvcn19PC90dD48YnIvPgorICAgICAgICAgICAgIDx0dD5teUZvcm0uJHZhbGlkID0g
e3tteUZvcm0uJHZhbGlkfX08L3R0Pjxici8+CisgICAgICAgICAgICAgPHR0Pm15Rm9ybS4kZXJy
b3IucmVxdWlyZWQgPSB7eyEhbXlGb3JtLiRlcnJvci5yZXF1aXJlZH19PC90dD48YnIvPgorICAg
ICAgICAgICAgIDx0dD5teUZvcm0uJGVycm9yLmVtYWlsID0ge3shIW15Rm9ybS4kZXJyb3IuZW1h
aWx9fTwvdHQ+PGJyLz4KKyAgICAgICAgICAgPC9mb3JtPgorICAgICAgICAgPC9maWxlPgorICAg
ICAgICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFjdG9yIj4KKyAgICAg
ICAgICB2YXIgdGV4dCA9IGVsZW1lbnQoYnkuYmluZGluZygnZW1haWwudGV4dCcpKTsKKyAgICAg
ICAgICB2YXIgdmFsaWQgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ215Rm9ybS5pbnB1dC4kdmFsaWQn
KSk7CisgICAgICAgICAgdmFyIGlucHV0ID0gZWxlbWVudChieS5tb2RlbCgnZW1haWwudGV4dCcp
KTsKKworICAgICAgICAgIGl0KCdzaG91bGQgaW5pdGlhbGl6ZSB0byBtb2RlbCcsIGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgZXhwZWN0KHRleHQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ21lQGV4
YW1wbGUuY29tJyk7CisgICAgICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRh
aW4oJ3RydWUnKTsKKyAgICAgICAgICB9KTsKKworICAgICAgICAgIGl0KCdzaG91bGQgYmUgaW52
YWxpZCBpZiBlbXB0eScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaW5wdXQuY2xlYXIoKTsK
KyAgICAgICAgICAgIGlucHV0LnNlbmRLZXlzKCcnKTsKKyAgICAgICAgICAgIGV4cGVjdCh0ZXh0
LmdldFRleHQoKSkudG9FcXVhbCgndGV4dCA9Jyk7CisgICAgICAgICAgICBleHBlY3QodmFsaWQu
Z2V0VGV4dCgpKS50b0NvbnRhaW4oJ2ZhbHNlJyk7CisgICAgICAgICAgfSk7CisKKyAgICAgICAg
ICBpdCgnc2hvdWxkIGJlIGludmFsaWQgaWYgbm90IGVtYWlsJywgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICBpbnB1dC5jbGVhcigpOworICAgICAgICAgICAgaW5wdXQuc2VuZEtleXMoJ3h4eCcp
OworCisgICAgICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ2ZhbHNl
Jyk7CisgICAgICAgICAgfSk7CisgICAgICAgIDwvZmlsZT4KKyAgICAgIDwvZXhhbXBsZT4KKyAg
ICovCisgICdlbWFpbCc6IGVtYWlsSW5wdXRUeXBlLAorCisKKyAgLyoqCisgICAqIEBuZ2RvYyBp
bnB1dAorICAgKiBAbmFtZSBpbnB1dFtyYWRpb10KKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisg
ICAqIEhUTUwgcmFkaW8gYnV0dG9uLgorICAgKgorICAgKiBAcGFyYW0ge3N0cmluZ30gbmdNb2Rl
bCBBc3NpZ25hYmxlIGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBkYXRhLWJpbmQgdG8uCisgICAqIEBw
YXJhbSB7c3RyaW5nfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd2hpY2ggdGhlIGBuZ01vZGVsYCBleHBy
ZXNzaW9uIHNob3VsZCBiZSBzZXQgd2hlbiBzZWxlY3RlZC4KKyAgICogICAgTm90ZSB0aGF0IGB2
YWx1ZWAgb25seSBzdXBwb3J0cyBgc3RyaW5nYCB2YWx1ZXMsIGkuZS4gdGhlIHNjb3BlIG1vZGVs
IG5lZWRzIHRvIGJlIGEgc3RyaW5nLAorICAgKiAgICB0b28uIFVzZSBgbmdWYWx1ZWAgaWYgeW91
IG5lZWQgY29tcGxleCBtb2RlbHMgKGBudW1iZXJgLCBgb2JqZWN0YCwgLi4uKS4KKyAgICogQHBh
cmFtIHtzdHJpbmc9fSBuYW1lIFByb3BlcnR5IG5hbWUgb2YgdGhlIGZvcm0gdW5kZXIgd2hpY2gg
dGhlIGNvbnRyb2wgaXMgcHVibGlzaGVkLgorICAgKiBAcGFyYW0ge3N0cmluZz19IG5nQ2hhbmdl
IEFuZ3VsYXIgZXhwcmVzc2lvbiB0byBiZSBleGVjdXRlZCB3aGVuIGlucHV0IGNoYW5nZXMgZHVl
IHRvIHVzZXIKKyAgICogICAgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaW5wdXQgZWxlbWVudC4KKyAg
ICogQHBhcmFtIHtzdHJpbmd9IG5nVmFsdWUgQW5ndWxhciBleHByZXNzaW9uIHRvIHdoaWNoIGBu
Z01vZGVsYCB3aWxsIGJlIGJlIHNldCB3aGVuIHRoZSByYWRpbworICAgKiAgICBpcyBzZWxlY3Rl
ZC4gU2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgYHZhbHVlYCBhdHRyaWJ1dGUgaWYgeW91
IG5lZWQKKyAgICogICAgYSBub24tc3RyaW5nIGBuZ01vZGVsYCAoYGJvb2xlYW5gLCBgYXJyYXlg
LCAuLi4pLgorICAgKgorICAgKiBAZXhhbXBsZQorICAgICAgPGV4YW1wbGUgbmFtZT0icmFkaW8t
aW5wdXQtZGlyZWN0aXZlIiBtb2R1bGU9InJhZGlvRXhhbXBsZSI+CisgICAgICAgIDxmaWxlIG5h
bWU9ImluZGV4Lmh0bWwiPgorICAgICAgICAgPHNjcmlwdD4KKyAgICAgICAgICAgYW5ndWxhci5t
b2R1bGUoJ3JhZGlvRXhhbXBsZScsIFtdKQorICAgICAgICAgICAgIC5jb250cm9sbGVyKCdFeGFt
cGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7CisgICAgICAgICAg
ICAgICAkc2NvcGUuY29sb3IgPSB7CisgICAgICAgICAgICAgICAgIG5hbWU6ICdibHVlJworICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICRzY29wZS5zcGVjaWFsVmFsdWUgPSB7Cisg
ICAgICAgICAgICAgICAgICJpZCI6ICIxMjM0NSIsCisgICAgICAgICAgICAgICAgICJ2YWx1ZSI6
ICJncmVlbiIKKyAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgfV0pOworICAgICAgICAg
PC9zY3JpcHQ+CisgICAgICAgICA8Zm9ybSBuYW1lPSJteUZvcm0iIG5nLWNvbnRyb2xsZXI9IkV4
YW1wbGVDb250cm9sbGVyIj4KKyAgICAgICAgICAgPGxhYmVsPgorICAgICAgICAgICAgIDxpbnB1
dCB0eXBlPSJyYWRpbyIgbmctbW9kZWw9ImNvbG9yLm5hbWUiIHZhbHVlPSJyZWQiPgorICAgICAg
ICAgICAgIFJlZAorICAgICAgICAgICA8L2xhYmVsPjxici8+CisgICAgICAgICAgIDxsYWJlbD4K
KyAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIG5nLW1vZGVsPSJjb2xvci5uYW1lIiBu
Zy12YWx1ZT0ic3BlY2lhbFZhbHVlIj4KKyAgICAgICAgICAgICBHcmVlbgorICAgICAgICAgICA8
L2xhYmVsPjxici8+CisgICAgICAgICAgIDxsYWJlbD4KKyAgICAgICAgICAgICA8aW5wdXQgdHlw
ZT0icmFkaW8iIG5nLW1vZGVsPSJjb2xvci5uYW1lIiB2YWx1ZT0iYmx1ZSI+CisgICAgICAgICAg
ICAgQmx1ZQorICAgICAgICAgICA8L2xhYmVsPjxici8+CisgICAgICAgICAgIDx0dD5jb2xvciA9
IHt7Y29sb3IubmFtZSB8IGpzb259fTwvdHQ+PGJyLz4KKyAgICAgICAgICA8L2Zvcm0+CisgICAg
ICAgICAgTm90ZSB0aGF0IGBuZy12YWx1ZT0ic3BlY2lhbFZhbHVlImAgc2V0cyByYWRpbyBpdGVt
J3MgdmFsdWUgdG8gYmUgdGhlIHZhbHVlIG9mIGAkc2NvcGUuc3BlY2lhbFZhbHVlYC4KKyAgICAg
ICAgPC9maWxlPgorICAgICAgICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90
cmFjdG9yIj4KKyAgICAgICAgICBpdCgnc2hvdWxkIGNoYW5nZSBzdGF0ZScsIGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgdmFyIGNvbG9yID0gZWxlbWVudChieS5iaW5kaW5nKCdjb2xvci5uYW1l
JykpOworCisgICAgICAgICAgICBleHBlY3QoY29sb3IuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ2Js
dWUnKTsKKworICAgICAgICAgICAgZWxlbWVudC5hbGwoYnkubW9kZWwoJ2NvbG9yLm5hbWUnKSku
Z2V0KDApLmNsaWNrKCk7CisKKyAgICAgICAgICAgIGV4cGVjdChjb2xvci5nZXRUZXh0KCkpLnRv
Q29udGFpbigncmVkJyk7CisgICAgICAgICAgfSk7CisgICAgICAgIDwvZmlsZT4KKyAgICAgIDwv
ZXhhbXBsZT4KKyAgICovCisgICdyYWRpbyc6IHJhZGlvSW5wdXRUeXBlLAorCisKKyAgLyoqCisg
ICAqIEBuZ2RvYyBpbnB1dAorICAgKiBAbmFtZSBpbnB1dFtjaGVja2JveF0KKyAgICoKKyAgICog
QGRlc2NyaXB0aW9uCisgICAqIEhUTUwgY2hlY2tib3guCisgICAqCisgICAqIEBwYXJhbSB7c3Ry
aW5nfSBuZ01vZGVsIEFzc2lnbmFibGUgYW5ndWxhciBleHByZXNzaW9uIHRvIGRhdGEtYmluZCB0
by4KKyAgICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lIFByb3BlcnR5IG5hbWUgb2YgdGhlIGZvcm0g
dW5kZXIgd2hpY2ggdGhlIGNvbnRyb2wgaXMgcHVibGlzaGVkLgorICAgKiBAcGFyYW0ge2V4cHJl
c3Npb249fSBuZ1RydWVWYWx1ZSBUaGUgdmFsdWUgdG8gd2hpY2ggdGhlIGV4cHJlc3Npb24gc2hv
dWxkIGJlIHNldCB3aGVuIHNlbGVjdGVkLgorICAgKiBAcGFyYW0ge2V4cHJlc3Npb249fSBuZ0Zh
bHNlVmFsdWUgVGhlIHZhbHVlIHRvIHdoaWNoIHRoZSBleHByZXNzaW9uIHNob3VsZCBiZSBzZXQg
d2hlbiBub3Qgc2VsZWN0ZWQuCisgICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdDaGFuZ2UgQW5ndWxh
ciBleHByZXNzaW9uIHRvIGJlIGV4ZWN1dGVkIHdoZW4gaW5wdXQgY2hhbmdlcyBkdWUgdG8gdXNl
cgorICAgKiAgICBpbnRlcmFjdGlvbiB3aXRoIHRoZSBpbnB1dCBlbGVtZW50LgorICAgKgorICAg
KiBAZXhhbXBsZQorICAgICAgPGV4YW1wbGUgbmFtZT0iY2hlY2tib3gtaW5wdXQtZGlyZWN0aXZl
IiBtb2R1bGU9ImNoZWNrYm94RXhhbXBsZSI+CisgICAgICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0
bWwiPgorICAgICAgICAgPHNjcmlwdD4KKyAgICAgICAgICAgYW5ndWxhci5tb2R1bGUoJ2NoZWNr
Ym94RXhhbXBsZScsIFtdKQorICAgICAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJv
bGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7CisgICAgICAgICAgICAgICAkc2Nv
cGUuY2hlY2tib3hNb2RlbCA9IHsKKyAgICAgICAgICAgICAgICB2YWx1ZTEgOiB0cnVlLAorICAg
ICAgICAgICAgICAgIHZhbHVlMiA6ICdZRVMnCisgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICAgfV0pOworICAgICAgICAgPC9zY3JpcHQ+CisgICAgICAgICA8Zm9ybSBuYW1lPSJteUZvcm0i
IG5nLWNvbnRyb2xsZXI9IkV4YW1wbGVDb250cm9sbGVyIj4KKyAgICAgICAgICAgPGxhYmVsPlZh
bHVlMToKKyAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5nLW1vZGVsPSJjaGVj
a2JveE1vZGVsLnZhbHVlMSI+CisgICAgICAgICAgIDwvbGFiZWw+PGJyLz4KKyAgICAgICAgICAg
PGxhYmVsPlZhbHVlMjoKKyAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5nLW1v
ZGVsPSJjaGVja2JveE1vZGVsLnZhbHVlMiIKKyAgICAgICAgICAgICAgICAgICAgbmctdHJ1ZS12
YWx1ZT0iJ1lFUyciIG5nLWZhbHNlLXZhbHVlPSInTk8nIj4KKyAgICAgICAgICAgIDwvbGFiZWw+
PGJyLz4KKyAgICAgICAgICAgPHR0PnZhbHVlMSA9IHt7Y2hlY2tib3hNb2RlbC52YWx1ZTF9fTwv
dHQ+PGJyLz4KKyAgICAgICAgICAgPHR0PnZhbHVlMiA9IHt7Y2hlY2tib3hNb2RlbC52YWx1ZTJ9
fTwvdHQ+PGJyLz4KKyAgICAgICAgICA8L2Zvcm0+CisgICAgICAgIDwvZmlsZT4KKyAgICAgICAg
PGZpbGUgbmFtZT0icHJvdHJhY3Rvci5qcyIgdHlwZT0icHJvdHJhY3RvciI+CisgICAgICAgICAg
aXQoJ3Nob3VsZCBjaGFuZ2Ugc3RhdGUnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciB2
YWx1ZTEgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ2NoZWNrYm94TW9kZWwudmFsdWUxJykpOworICAg
ICAgICAgICAgdmFyIHZhbHVlMiA9IGVsZW1lbnQoYnkuYmluZGluZygnY2hlY2tib3hNb2RlbC52
YWx1ZTInKSk7CisKKyAgICAgICAgICAgIGV4cGVjdCh2YWx1ZTEuZ2V0VGV4dCgpKS50b0NvbnRh
aW4oJ3RydWUnKTsKKyAgICAgICAgICAgIGV4cGVjdCh2YWx1ZTIuZ2V0VGV4dCgpKS50b0NvbnRh
aW4oJ1lFUycpOworCisgICAgICAgICAgICBlbGVtZW50KGJ5Lm1vZGVsKCdjaGVja2JveE1vZGVs
LnZhbHVlMScpKS5jbGljaygpOworICAgICAgICAgICAgZWxlbWVudChieS5tb2RlbCgnY2hlY2ti
b3hNb2RlbC52YWx1ZTInKSkuY2xpY2soKTsKKworICAgICAgICAgICAgZXhwZWN0KHZhbHVlMS5n
ZXRUZXh0KCkpLnRvQ29udGFpbignZmFsc2UnKTsKKyAgICAgICAgICAgIGV4cGVjdCh2YWx1ZTIu
Z2V0VGV4dCgpKS50b0NvbnRhaW4oJ05PJyk7CisgICAgICAgICAgfSk7CisgICAgICAgIDwvZmls
ZT4KKyAgICAgIDwvZXhhbXBsZT4KKyAgICovCisgICdjaGVja2JveCc6IGNoZWNrYm94SW5wdXRU
eXBlLAorCisgICdoaWRkZW4nOiBub29wLAorICAnYnV0dG9uJzogbm9vcCwKKyAgJ3N1Ym1pdCc6
IG5vb3AsCisgICdyZXNldCc6IG5vb3AsCisgICdmaWxlJzogbm9vcAorfTsKKworZnVuY3Rpb24g
c3RyaW5nQmFzZWRJbnB1dFR5cGUoY3RybCkgeworICBjdHJsLiRmb3JtYXR0ZXJzLnB1c2goZnVu
Y3Rpb24odmFsdWUpIHsKKyAgICByZXR1cm4gY3RybC4kaXNFbXB0eSh2YWx1ZSkgPyB2YWx1ZSA6
IHZhbHVlLnRvU3RyaW5nKCk7CisgIH0pOworfQorCitmdW5jdGlvbiB0ZXh0SW5wdXRUeXBlKHNj
b3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsLCAkc25pZmZlciwgJGJyb3dzZXIpIHsKKyAgYmFzZUlu
cHV0VHlwZShzY29wZSwgZWxlbWVudCwgYXR0ciwgY3RybCwgJHNuaWZmZXIsICRicm93c2VyKTsK
KyAgc3RyaW5nQmFzZWRJbnB1dFR5cGUoY3RybCk7Cit9CisKK2Z1bmN0aW9uIGJhc2VJbnB1dFR5
cGUoc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwsICRzbmlmZmVyLCAkYnJvd3NlcikgeworICB2
YXIgdHlwZSA9IGxvd2VyY2FzZShlbGVtZW50WzBdLnR5cGUpOworCisgIC8vIEluIGNvbXBvc2l0
aW9uIG1vZGUsIHVzZXJzIGFyZSBzdGlsbCBpbnB1dGluZyBpbnRlcm1lZGlhdGUgdGV4dCBidWZm
ZXIsCisgIC8vIGhvbGQgdGhlIGxpc3RlbmVyIHVudGlsIGNvbXBvc2l0aW9uIGlzIGRvbmUuCisg
IC8vIE1vcmUgYWJvdXQgY29tcG9zaXRpb24gZXZlbnRzOiBodHRwczovL2RldmVsb3Blci5tb3pp
bGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ29tcG9zaXRpb25FdmVudAorICBpZiAoISRzbmlm
ZmVyLmFuZHJvaWQpIHsKKyAgICB2YXIgY29tcG9zaW5nID0gZmFsc2U7CisKKyAgICBlbGVtZW50
Lm9uKCdjb21wb3NpdGlvbnN0YXJ0JywgZnVuY3Rpb24oZGF0YSkgeworICAgICAgY29tcG9zaW5n
ID0gdHJ1ZTsKKyAgICB9KTsKKworICAgIGVsZW1lbnQub24oJ2NvbXBvc2l0aW9uZW5kJywgZnVu
Y3Rpb24oKSB7CisgICAgICBjb21wb3NpbmcgPSBmYWxzZTsKKyAgICAgIGxpc3RlbmVyKCk7Cisg
ICAgfSk7CisgIH0KKworICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbihldikgeworICAgIGlmICh0
aW1lb3V0KSB7CisgICAgICAkYnJvd3Nlci5kZWZlci5jYW5jZWwodGltZW91dCk7CisgICAgICB0
aW1lb3V0ID0gbnVsbDsKKyAgICB9CisgICAgaWYgKGNvbXBvc2luZykgcmV0dXJuOworICAgIHZh
ciB2YWx1ZSA9IGVsZW1lbnQudmFsKCksCisgICAgICAgIGV2ZW50ID0gZXYgJiYgZXYudHlwZTsK
KworICAgIC8vIEJ5IGRlZmF1bHQgd2Ugd2lsbCB0cmltIHRoZSB2YWx1ZQorICAgIC8vIElmIHRo
ZSBhdHRyaWJ1dGUgbmctdHJpbSBleGlzdHMgd2Ugd2lsbCBhdm9pZCB0cmltbWluZworICAgIC8v
IElmIGlucHV0IHR5cGUgaXMgJ3Bhc3N3b3JkJywgdGhlIHZhbHVlIGlzIG5ldmVyIHRyaW1tZWQK
KyAgICBpZiAodHlwZSAhPT0gJ3Bhc3N3b3JkJyAmJiAoIWF0dHIubmdUcmltIHx8IGF0dHIubmdU
cmltICE9PSAnZmFsc2UnKSkgeworICAgICAgdmFsdWUgPSB0cmltKHZhbHVlKTsKKyAgICB9CisK
KyAgICAvLyBJZiBhIGNvbnRyb2wgaXMgc3VmZmVyaW5nIGZyb20gYmFkIGlucHV0IChkdWUgdG8g
bmF0aXZlIHZhbGlkYXRvcnMpLCBicm93c2VycyBkaXNjYXJkIGl0cworICAgIC8vIHZhbHVlLCBz
byBpdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIHJldmFsaWRhdGUgKGJ5IGNhbGxpbmcgJHNldFZpZXdW
YWx1ZSBhZ2FpbikgZXZlbiBpZiB0aGUKKyAgICAvLyBjb250cm9sJ3MgdmFsdWUgaXMgdGhlIHNh
bWUgZW1wdHkgdmFsdWUgdHdpY2UgaW4gYSByb3cuCisgICAgaWYgKGN0cmwuJHZpZXdWYWx1ZSAh
PT0gdmFsdWUgfHwgKHZhbHVlID09PSAnJyAmJiBjdHJsLiQkaGFzTmF0aXZlVmFsaWRhdG9ycykp
IHsKKyAgICAgIGN0cmwuJHNldFZpZXdWYWx1ZSh2YWx1ZSwgZXZlbnQpOworICAgIH0KKyAgfTsK
KworICAvLyBpZiB0aGUgYnJvd3NlciBkb2VzIHN1cHBvcnQgImlucHV0IiBldmVudCwgd2UgYXJl
IGZpbmUgLSBleGNlcHQgb24gSUU5IHdoaWNoIGRvZXNuJ3QgZmlyZSB0aGUKKyAgLy8gaW5wdXQg
ZXZlbnQgb24gYmFja3NwYWNlLCBkZWxldGUgb3IgY3V0CisgIGlmICgkc25pZmZlci5oYXNFdmVu
dCgnaW5wdXQnKSkgeworICAgIGVsZW1lbnQub24oJ2lucHV0JywgbGlzdGVuZXIpOworICB9IGVs
c2UgeworICAgIHZhciB0aW1lb3V0OworCisgICAgdmFyIGRlZmVyTGlzdGVuZXIgPSBmdW5jdGlv
bihldiwgaW5wdXQsIG9yaWdWYWx1ZSkgeworICAgICAgaWYgKCF0aW1lb3V0KSB7CisgICAgICAg
IHRpbWVvdXQgPSAkYnJvd3Nlci5kZWZlcihmdW5jdGlvbigpIHsKKyAgICAgICAgICB0aW1lb3V0
ID0gbnVsbDsKKyAgICAgICAgICBpZiAoIWlucHV0IHx8IGlucHV0LnZhbHVlICE9PSBvcmlnVmFs
dWUpIHsKKyAgICAgICAgICAgIGxpc3RlbmVyKGV2KTsKKyAgICAgICAgICB9CisgICAgICAgIH0p
OworICAgICAgfQorICAgIH07CisKKyAgICBlbGVtZW50Lm9uKCdrZXlkb3duJywgZnVuY3Rpb24o
ZXZlbnQpIHsKKyAgICAgIHZhciBrZXkgPSBldmVudC5rZXlDb2RlOworCisgICAgICAvLyBpZ25v
cmUKKyAgICAgIC8vICAgIGNvbW1hbmQgICAgICAgICAgICBtb2RpZmllcnMgICAgICAgICAgICAg
ICAgICAgYXJyb3dzCisgICAgICBpZiAoa2V5ID09PSA5MSB8fCAoMTUgPCBrZXkgJiYga2V5IDwg
MTkpIHx8ICgzNyA8PSBrZXkgJiYga2V5IDw9IDQwKSkgcmV0dXJuOworCisgICAgICBkZWZlckxp
c3RlbmVyKGV2ZW50LCB0aGlzLCB0aGlzLnZhbHVlKTsKKyAgICB9KTsKKworICAgIC8vIGlmIHVz
ZXIgbW9kaWZpZXMgaW5wdXQgdmFsdWUgdXNpbmcgY29udGV4dCBtZW51IGluIElFLCB3ZSBuZWVk
ICJwYXN0ZSIgYW5kICJjdXQiIGV2ZW50cyB0byBjYXRjaCBpdAorICAgIGlmICgkc25pZmZlci5o
YXNFdmVudCgncGFzdGUnKSkgeworICAgICAgZWxlbWVudC5vbigncGFzdGUgY3V0JywgZGVmZXJM
aXN0ZW5lcik7CisgICAgfQorICB9CisKKyAgLy8gaWYgdXNlciBwYXN0ZSBpbnRvIGlucHV0IHVz
aW5nIG1vdXNlIG9uIG9sZGVyIGJyb3dzZXIKKyAgLy8gb3IgZm9ybSBhdXRvY29tcGxldGUgb24g
bmV3ZXIgYnJvd3Nlciwgd2UgbmVlZCAiY2hhbmdlIiBldmVudCB0byBjYXRjaCBpdAorICBlbGVt
ZW50Lm9uKCdjaGFuZ2UnLCBsaXN0ZW5lcik7CisKKyAgY3RybC4kcmVuZGVyID0gZnVuY3Rpb24o
KSB7CisgICAgZWxlbWVudC52YWwoY3RybC4kaXNFbXB0eShjdHJsLiR2aWV3VmFsdWUpID8gJycg
OiBjdHJsLiR2aWV3VmFsdWUpOworICB9OworfQorCitmdW5jdGlvbiB3ZWVrUGFyc2VyKGlzb1dl
ZWssIGV4aXN0aW5nRGF0ZSkgeworICBpZiAoaXNEYXRlKGlzb1dlZWspKSB7CisgICAgcmV0dXJu
IGlzb1dlZWs7CisgIH0KKworICBpZiAoaXNTdHJpbmcoaXNvV2VlaykpIHsKKyAgICBXRUVLX1JF
R0VYUC5sYXN0SW5kZXggPSAwOworICAgIHZhciBwYXJ0cyA9IFdFRUtfUkVHRVhQLmV4ZWMoaXNv
V2Vlayk7CisgICAgaWYgKHBhcnRzKSB7CisgICAgICB2YXIgeWVhciA9ICtwYXJ0c1sxXSwKKyAg
ICAgICAgICB3ZWVrID0gK3BhcnRzWzJdLAorICAgICAgICAgIGhvdXJzID0gMCwKKyAgICAgICAg
ICBtaW51dGVzID0gMCwKKyAgICAgICAgICBzZWNvbmRzID0gMCwKKyAgICAgICAgICBtaWxsaXNl
Y29uZHMgPSAwLAorICAgICAgICAgIGZpcnN0VGh1cnMgPSBnZXRGaXJzdFRodXJzZGF5T2ZZZWFy
KHllYXIpLAorICAgICAgICAgIGFkZERheXMgPSAod2VlayAtIDEpICogNzsKKworICAgICAgaWYg
KGV4aXN0aW5nRGF0ZSkgeworICAgICAgICBob3VycyA9IGV4aXN0aW5nRGF0ZS5nZXRIb3Vycygp
OworICAgICAgICBtaW51dGVzID0gZXhpc3RpbmdEYXRlLmdldE1pbnV0ZXMoKTsKKyAgICAgICAg
c2Vjb25kcyA9IGV4aXN0aW5nRGF0ZS5nZXRTZWNvbmRzKCk7CisgICAgICAgIG1pbGxpc2Vjb25k
cyA9IGV4aXN0aW5nRGF0ZS5nZXRNaWxsaXNlY29uZHMoKTsKKyAgICAgIH0KKworICAgICAgcmV0
dXJuIG5ldyBEYXRlKHllYXIsIDAsIGZpcnN0VGh1cnMuZ2V0RGF0ZSgpICsgYWRkRGF5cywgaG91
cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vjb25kcyk7CisgICAgfQorICB9CisKKyAgcmV0
dXJuIE5hTjsKK30KKworZnVuY3Rpb24gY3JlYXRlRGF0ZVBhcnNlcihyZWdleHAsIG1hcHBpbmcp
IHsKKyAgcmV0dXJuIGZ1bmN0aW9uKGlzbywgZGF0ZSkgeworICAgIHZhciBwYXJ0cywgbWFwOwor
CisgICAgaWYgKGlzRGF0ZShpc28pKSB7CisgICAgICByZXR1cm4gaXNvOworICAgIH0KKworICAg
IGlmIChpc1N0cmluZyhpc28pKSB7CisgICAgICAvLyBXaGVuIGEgZGF0ZSBpcyBKU09OJ2lmaWVk
IHRvIHdyYXBzIGl0c2VsZiBpbnNpZGUgb2YgYW4gZXh0cmEKKyAgICAgIC8vIHNldCBvZiBkb3Vi
bGUgcXVvdGVzLiBUaGlzIG1ha2VzIHRoZSBkYXRlIHBhcnNpbmcgY29kZSB1bmFibGUKKyAgICAg
IC8vIHRvIG1hdGNoIHRoZSBkYXRlIHN0cmluZyBhbmQgcGFyc2UgaXQgYXMgYSBkYXRlLgorICAg
ICAgaWYgKGlzby5jaGFyQXQoMCkgPT0gJyInICYmIGlzby5jaGFyQXQoaXNvLmxlbmd0aCAtIDEp
ID09ICciJykgeworICAgICAgICBpc28gPSBpc28uc3Vic3RyaW5nKDEsIGlzby5sZW5ndGggLSAx
KTsKKyAgICAgIH0KKyAgICAgIGlmIChJU09fREFURV9SRUdFWFAudGVzdChpc28pKSB7CisgICAg
ICAgIHJldHVybiBuZXcgRGF0ZShpc28pOworICAgICAgfQorICAgICAgcmVnZXhwLmxhc3RJbmRl
eCA9IDA7CisgICAgICBwYXJ0cyA9IHJlZ2V4cC5leGVjKGlzbyk7CisKKyAgICAgIGlmIChwYXJ0
cykgeworICAgICAgICBwYXJ0cy5zaGlmdCgpOworICAgICAgICBpZiAoZGF0ZSkgeworICAgICAg
ICAgIG1hcCA9IHsKKyAgICAgICAgICAgIHl5eXk6IGRhdGUuZ2V0RnVsbFllYXIoKSwKKyAgICAg
ICAgICAgIE1NOiBkYXRlLmdldE1vbnRoKCkgKyAxLAorICAgICAgICAgICAgZGQ6IGRhdGUuZ2V0
RGF0ZSgpLAorICAgICAgICAgICAgSEg6IGRhdGUuZ2V0SG91cnMoKSwKKyAgICAgICAgICAgIG1t
OiBkYXRlLmdldE1pbnV0ZXMoKSwKKyAgICAgICAgICAgIHNzOiBkYXRlLmdldFNlY29uZHMoKSwK
KyAgICAgICAgICAgIHNzczogZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAvIDEwMDAKKyAgICAgICAg
ICB9OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIG1hcCA9IHsgeXl5eTogMTk3MCwgTU06
IDEsIGRkOiAxLCBISDogMCwgbW06IDAsIHNzOiAwLCBzc3M6IDAgfTsKKyAgICAgICAgfQorCisg
ICAgICAgIGZvckVhY2gocGFydHMsIGZ1bmN0aW9uKHBhcnQsIGluZGV4KSB7CisgICAgICAgICAg
aWYgKGluZGV4IDwgbWFwcGluZy5sZW5ndGgpIHsKKyAgICAgICAgICAgIG1hcFttYXBwaW5nW2lu
ZGV4XV0gPSArcGFydDsKKyAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4g
bmV3IERhdGUobWFwLnl5eXksIG1hcC5NTSAtIDEsIG1hcC5kZCwgbWFwLkhILCBtYXAubW0sIG1h
cC5zcyB8fCAwLCBtYXAuc3NzICogMTAwMCB8fCAwKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gTmFOOworICB9OworfQorCitmdW5jdGlvbiBjcmVhdGVEYXRlSW5wdXRUeXBlKHR5cGUs
IHJlZ2V4cCwgcGFyc2VEYXRlLCBmb3JtYXQpIHsKKyAgcmV0dXJuIGZ1bmN0aW9uIGR5bmFtaWNE
YXRlSW5wdXRUeXBlKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsLCAkc25pZmZlciwgJGJyb3dz
ZXIsICRmaWx0ZXIpIHsKKyAgICBiYWRJbnB1dENoZWNrZXIoc2NvcGUsIGVsZW1lbnQsIGF0dHIs
IGN0cmwpOworICAgIGJhc2VJbnB1dFR5cGUoc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwsICRz
bmlmZmVyLCAkYnJvd3Nlcik7CisgICAgdmFyIHRpbWV6b25lID0gY3RybCAmJiBjdHJsLiRvcHRp
b25zICYmIGN0cmwuJG9wdGlvbnMudGltZXpvbmU7CisgICAgdmFyIHByZXZpb3VzRGF0ZTsKKwor
ICAgIGN0cmwuJCRwYXJzZXJOYW1lID0gdHlwZTsKKyAgICBjdHJsLiRwYXJzZXJzLnB1c2goZnVu
Y3Rpb24odmFsdWUpIHsKKyAgICAgIGlmIChjdHJsLiRpc0VtcHR5KHZhbHVlKSkgcmV0dXJuIG51
bGw7CisgICAgICBpZiAocmVnZXhwLnRlc3QodmFsdWUpKSB7CisgICAgICAgIC8vIE5vdGU6IFdl
IGNhbm5vdCByZWFkIGN0cmwuJG1vZGVsVmFsdWUsIGFzIHRoZXJlIG1pZ2h0IGJlIGEgZGlmZmVy
ZW50CisgICAgICAgIC8vIHBhcnNlci9mb3JtYXR0ZXIgaW4gdGhlIHByb2Nlc3NpbmcgY2hhaW4g
c28gdGhhdCB0aGUgbW9kZWwKKyAgICAgICAgLy8gY29udGFpbnMgc29tZSBkaWZmZXJlbnQgZGF0
YSBmb3JtYXQhCisgICAgICAgIHZhciBwYXJzZWREYXRlID0gcGFyc2VEYXRlKHZhbHVlLCBwcmV2
aW91c0RhdGUpOworICAgICAgICBpZiAodGltZXpvbmUpIHsKKyAgICAgICAgICBwYXJzZWREYXRl
ID0gY29udmVydFRpbWV6b25lVG9Mb2NhbChwYXJzZWREYXRlLCB0aW1lem9uZSk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHBhcnNlZERhdGU7CisgICAgICB9CisgICAgICByZXR1cm4gdW5k
ZWZpbmVkOworICAgIH0pOworCisgICAgY3RybC4kZm9ybWF0dGVycy5wdXNoKGZ1bmN0aW9uKHZh
bHVlKSB7CisgICAgICBpZiAodmFsdWUgJiYgIWlzRGF0ZSh2YWx1ZSkpIHsKKyAgICAgICAgdGhy
b3cgJG5nTW9kZWxNaW5FcnIoJ2RhdGVmbXQnLCAnRXhwZWN0ZWQgYHswfWAgdG8gYmUgYSBkYXRl
JywgdmFsdWUpOworICAgICAgfQorICAgICAgaWYgKGlzVmFsaWREYXRlKHZhbHVlKSkgeworICAg
ICAgICBwcmV2aW91c0RhdGUgPSB2YWx1ZTsKKyAgICAgICAgaWYgKHByZXZpb3VzRGF0ZSAmJiB0
aW1lem9uZSkgeworICAgICAgICAgIHByZXZpb3VzRGF0ZSA9IGNvbnZlcnRUaW1lem9uZVRvTG9j
YWwocHJldmlvdXNEYXRlLCB0aW1lem9uZSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuICRmaWx0ZXIoJ2RhdGUnKSh2YWx1ZSwgZm9ybWF0LCB0aW1lem9uZSk7CisgICAgICB9IGVs
c2UgeworICAgICAgICBwcmV2aW91c0RhdGUgPSBudWxsOworICAgICAgICByZXR1cm4gJyc7Cisg
ICAgICB9CisgICAgfSk7CisKKyAgICBpZiAoaXNEZWZpbmVkKGF0dHIubWluKSB8fCBhdHRyLm5n
TWluKSB7CisgICAgICB2YXIgbWluVmFsOworICAgICAgY3RybC4kdmFsaWRhdG9ycy5taW4gPSBm
dW5jdGlvbih2YWx1ZSkgeworICAgICAgICByZXR1cm4gIWlzVmFsaWREYXRlKHZhbHVlKSB8fCBp
c1VuZGVmaW5lZChtaW5WYWwpIHx8IHBhcnNlRGF0ZSh2YWx1ZSkgPj0gbWluVmFsOworICAgICAg
fTsKKyAgICAgIGF0dHIuJG9ic2VydmUoJ21pbicsIGZ1bmN0aW9uKHZhbCkgeworICAgICAgICBt
aW5WYWwgPSBwYXJzZU9ic2VydmVkRGF0ZVZhbHVlKHZhbCk7CisgICAgICAgIGN0cmwuJHZhbGlk
YXRlKCk7CisgICAgICB9KTsKKyAgICB9CisKKyAgICBpZiAoaXNEZWZpbmVkKGF0dHIubWF4KSB8
fCBhdHRyLm5nTWF4KSB7CisgICAgICB2YXIgbWF4VmFsOworICAgICAgY3RybC4kdmFsaWRhdG9y
cy5tYXggPSBmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICByZXR1cm4gIWlzVmFsaWREYXRlKHZh
bHVlKSB8fCBpc1VuZGVmaW5lZChtYXhWYWwpIHx8IHBhcnNlRGF0ZSh2YWx1ZSkgPD0gbWF4VmFs
OworICAgICAgfTsKKyAgICAgIGF0dHIuJG9ic2VydmUoJ21heCcsIGZ1bmN0aW9uKHZhbCkgewor
ICAgICAgICBtYXhWYWwgPSBwYXJzZU9ic2VydmVkRGF0ZVZhbHVlKHZhbCk7CisgICAgICAgIGN0
cmwuJHZhbGlkYXRlKCk7CisgICAgICB9KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc1ZhbGlk
RGF0ZSh2YWx1ZSkgeworICAgICAgLy8gSW52YWxpZCBEYXRlOiBnZXRUaW1lKCkgcmV0dXJucyBO
YU4KKyAgICAgIHJldHVybiB2YWx1ZSAmJiAhKHZhbHVlLmdldFRpbWUgJiYgdmFsdWUuZ2V0VGlt
ZSgpICE9PSB2YWx1ZS5nZXRUaW1lKCkpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlT2Jz
ZXJ2ZWREYXRlVmFsdWUodmFsKSB7CisgICAgICByZXR1cm4gaXNEZWZpbmVkKHZhbCkgPyAoaXNE
YXRlKHZhbCkgPyB2YWwgOiBwYXJzZURhdGUodmFsKSkgOiB1bmRlZmluZWQ7CisgICAgfQorICB9
OworfQorCitmdW5jdGlvbiBiYWRJbnB1dENoZWNrZXIoc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0
cmwpIHsKKyAgdmFyIG5vZGUgPSBlbGVtZW50WzBdOworICB2YXIgbmF0aXZlVmFsaWRhdGlvbiA9
IGN0cmwuJCRoYXNOYXRpdmVWYWxpZGF0b3JzID0gaXNPYmplY3Qobm9kZS52YWxpZGl0eSk7Cisg
IGlmIChuYXRpdmVWYWxpZGF0aW9uKSB7CisgICAgY3RybC4kcGFyc2Vycy5wdXNoKGZ1bmN0aW9u
KHZhbHVlKSB7CisgICAgICB2YXIgdmFsaWRpdHkgPSBlbGVtZW50LnByb3AoVkFMSURJVFlfU1RB
VEVfUFJPUEVSVFkpIHx8IHt9OworICAgICAgLy8gRGV0ZWN0IGJ1ZyBpbiBGRjM1IGZvciBpbnB1
dFtlbWFpbF0gKGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTEw
NjQ0MzApOgorICAgICAgLy8gLSBhbHNvIHNldHMgdmFsaWRpdHkuYmFkSW5wdXQgKHNob3VsZCBv
bmx5IGJlIHZhbGlkaXR5LnR5cGVNaXNtYXRjaCkuCisgICAgICAvLyAtIHNlZSBodHRwOi8vd3d3
LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9mb3Jtcy5o
dG1sI2UtbWFpbC1zdGF0ZS0odHlwZT1lbWFpbCkKKyAgICAgIC8vIC0gY2FuIGlnbm9yZSB0aGlz
IGNhc2UgYXMgd2UgY2FuIHN0aWxsIHJlYWQgb3V0IHRoZSBlcnJvbmVvdXMgZW1haWwuLi4KKyAg
ICAgIHJldHVybiB2YWxpZGl0eS5iYWRJbnB1dCAmJiAhdmFsaWRpdHkudHlwZU1pc21hdGNoID8g
dW5kZWZpbmVkIDogdmFsdWU7CisgICAgfSk7CisgIH0KK30KKworZnVuY3Rpb24gbnVtYmVySW5w
dXRUeXBlKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsLCAkc25pZmZlciwgJGJyb3dzZXIpIHsK
KyAgYmFkSW5wdXRDaGVja2VyKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsKTsKKyAgYmFzZUlu
cHV0VHlwZShzY29wZSwgZWxlbWVudCwgYXR0ciwgY3RybCwgJHNuaWZmZXIsICRicm93c2VyKTsK
KworICBjdHJsLiQkcGFyc2VyTmFtZSA9ICdudW1iZXInOworICBjdHJsLiRwYXJzZXJzLnB1c2go
ZnVuY3Rpb24odmFsdWUpIHsKKyAgICBpZiAoY3RybC4kaXNFbXB0eSh2YWx1ZSkpICAgICAgcmV0
dXJuIG51bGw7CisgICAgaWYgKE5VTUJFUl9SRUdFWFAudGVzdCh2YWx1ZSkpIHJldHVybiBwYXJz
ZUZsb2F0KHZhbHVlKTsKKyAgICByZXR1cm4gdW5kZWZpbmVkOworICB9KTsKKworICBjdHJsLiRm
b3JtYXR0ZXJzLnB1c2goZnVuY3Rpb24odmFsdWUpIHsKKyAgICBpZiAoIWN0cmwuJGlzRW1wdHko
dmFsdWUpKSB7CisgICAgICBpZiAoIWlzTnVtYmVyKHZhbHVlKSkgeworICAgICAgICB0aHJvdyAk
bmdNb2RlbE1pbkVycignbnVtZm10JywgJ0V4cGVjdGVkIGB7MH1gIHRvIGJlIGEgbnVtYmVyJywg
dmFsdWUpOworICAgICAgfQorICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpOworICAgIH0K
KyAgICByZXR1cm4gdmFsdWU7CisgIH0pOworCisgIGlmIChpc0RlZmluZWQoYXR0ci5taW4pIHx8
IGF0dHIubmdNaW4pIHsKKyAgICB2YXIgbWluVmFsOworICAgIGN0cmwuJHZhbGlkYXRvcnMubWlu
ID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgIHJldHVybiBjdHJsLiRpc0VtcHR5KHZhbHVlKSB8
fCBpc1VuZGVmaW5lZChtaW5WYWwpIHx8IHZhbHVlID49IG1pblZhbDsKKyAgICB9OworCisgICAg
YXR0ci4kb2JzZXJ2ZSgnbWluJywgZnVuY3Rpb24odmFsKSB7CisgICAgICBpZiAoaXNEZWZpbmVk
KHZhbCkgJiYgIWlzTnVtYmVyKHZhbCkpIHsKKyAgICAgICAgdmFsID0gcGFyc2VGbG9hdCh2YWws
IDEwKTsKKyAgICAgIH0KKyAgICAgIG1pblZhbCA9IGlzTnVtYmVyKHZhbCkgJiYgIWlzTmFOKHZh
bCkgPyB2YWwgOiB1bmRlZmluZWQ7CisgICAgICAvLyBUT0RPKG1hdHNrbyk6IGltcGxlbWVudCB2
YWxpZGF0ZUxhdGVyIHRvIHJlZHVjZSBudW1iZXIgb2YgdmFsaWRhdGlvbnMKKyAgICAgIGN0cmwu
JHZhbGlkYXRlKCk7CisgICAgfSk7CisgIH0KKworICBpZiAoaXNEZWZpbmVkKGF0dHIubWF4KSB8
fCBhdHRyLm5nTWF4KSB7CisgICAgdmFyIG1heFZhbDsKKyAgICBjdHJsLiR2YWxpZGF0b3JzLm1h
eCA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICByZXR1cm4gY3RybC4kaXNFbXB0eSh2YWx1ZSkg
fHwgaXNVbmRlZmluZWQobWF4VmFsKSB8fCB2YWx1ZSA8PSBtYXhWYWw7CisgICAgfTsKKworICAg
IGF0dHIuJG9ic2VydmUoJ21heCcsIGZ1bmN0aW9uKHZhbCkgeworICAgICAgaWYgKGlzRGVmaW5l
ZCh2YWwpICYmICFpc051bWJlcih2YWwpKSB7CisgICAgICAgIHZhbCA9IHBhcnNlRmxvYXQodmFs
LCAxMCk7CisgICAgICB9CisgICAgICBtYXhWYWwgPSBpc051bWJlcih2YWwpICYmICFpc05hTih2
YWwpID8gdmFsIDogdW5kZWZpbmVkOworICAgICAgLy8gVE9ETyhtYXRza28pOiBpbXBsZW1lbnQg
dmFsaWRhdGVMYXRlciB0byByZWR1Y2UgbnVtYmVyIG9mIHZhbGlkYXRpb25zCisgICAgICBjdHJs
LiR2YWxpZGF0ZSgpOworICAgIH0pOworICB9Cit9CisKK2Z1bmN0aW9uIHVybElucHV0VHlwZShz
Y29wZSwgZWxlbWVudCwgYXR0ciwgY3RybCwgJHNuaWZmZXIsICRicm93c2VyKSB7CisgIC8vIE5v
dGU6IG5vIGJhZElucHV0Q2hlY2tlciBoZXJlIGJ5IHB1cnBvc2UgYXMgYHVybGAgaXMgb25seSBh
IHZhbGlkYXRpb24KKyAgLy8gaW4gYnJvd3NlcnMsIGkuZS4gd2UgY2FuIGFsd2F5cyByZWFkIG91
dCBpbnB1dC52YWx1ZSBldmVuIGlmIGl0IGlzIG5vdCB2YWxpZCEKKyAgYmFzZUlucHV0VHlwZShz
Y29wZSwgZWxlbWVudCwgYXR0ciwgY3RybCwgJHNuaWZmZXIsICRicm93c2VyKTsKKyAgc3RyaW5n
QmFzZWRJbnB1dFR5cGUoY3RybCk7CisKKyAgY3RybC4kJHBhcnNlck5hbWUgPSAndXJsJzsKKyAg
Y3RybC4kdmFsaWRhdG9ycy51cmwgPSBmdW5jdGlvbihtb2RlbFZhbHVlLCB2aWV3VmFsdWUpIHsK
KyAgICB2YXIgdmFsdWUgPSBtb2RlbFZhbHVlIHx8IHZpZXdWYWx1ZTsKKyAgICByZXR1cm4gY3Ry
bC4kaXNFbXB0eSh2YWx1ZSkgfHwgVVJMX1JFR0VYUC50ZXN0KHZhbHVlKTsKKyAgfTsKK30KKwor
ZnVuY3Rpb24gZW1haWxJbnB1dFR5cGUoc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwsICRzbmlm
ZmVyLCAkYnJvd3NlcikgeworICAvLyBOb3RlOiBubyBiYWRJbnB1dENoZWNrZXIgaGVyZSBieSBw
dXJwb3NlIGFzIGB1cmxgIGlzIG9ubHkgYSB2YWxpZGF0aW9uCisgIC8vIGluIGJyb3dzZXJzLCBp
LmUuIHdlIGNhbiBhbHdheXMgcmVhZCBvdXQgaW5wdXQudmFsdWUgZXZlbiBpZiBpdCBpcyBub3Qg
dmFsaWQhCisgIGJhc2VJbnB1dFR5cGUoc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwsICRzbmlm
ZmVyLCAkYnJvd3Nlcik7CisgIHN0cmluZ0Jhc2VkSW5wdXRUeXBlKGN0cmwpOworCisgIGN0cmwu
JCRwYXJzZXJOYW1lID0gJ2VtYWlsJzsKKyAgY3RybC4kdmFsaWRhdG9ycy5lbWFpbCA9IGZ1bmN0
aW9uKG1vZGVsVmFsdWUsIHZpZXdWYWx1ZSkgeworICAgIHZhciB2YWx1ZSA9IG1vZGVsVmFsdWUg
fHwgdmlld1ZhbHVlOworICAgIHJldHVybiBjdHJsLiRpc0VtcHR5KHZhbHVlKSB8fCBFTUFJTF9S
RUdFWFAudGVzdCh2YWx1ZSk7CisgIH07Cit9CisKK2Z1bmN0aW9uIHJhZGlvSW5wdXRUeXBlKHNj
b3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsKSB7CisgIC8vIG1ha2UgdGhlIG5hbWUgdW5pcXVlLCBp
ZiBub3QgZGVmaW5lZAorICBpZiAoaXNVbmRlZmluZWQoYXR0ci5uYW1lKSkgeworICAgIGVsZW1l
bnQuYXR0cignbmFtZScsIG5leHRVaWQoKSk7CisgIH0KKworICB2YXIgbGlzdGVuZXIgPSBmdW5j
dGlvbihldikgeworICAgIGlmIChlbGVtZW50WzBdLmNoZWNrZWQpIHsKKyAgICAgIGN0cmwuJHNl
dFZpZXdWYWx1ZShhdHRyLnZhbHVlLCBldiAmJiBldi50eXBlKTsKKyAgICB9CisgIH07CisKKyAg
ZWxlbWVudC5vbignY2xpY2snLCBsaXN0ZW5lcik7CisKKyAgY3RybC4kcmVuZGVyID0gZnVuY3Rp
b24oKSB7CisgICAgdmFyIHZhbHVlID0gYXR0ci52YWx1ZTsKKyAgICBlbGVtZW50WzBdLmNoZWNr
ZWQgPSAodmFsdWUgPT0gY3RybC4kdmlld1ZhbHVlKTsKKyAgfTsKKworICBhdHRyLiRvYnNlcnZl
KCd2YWx1ZScsIGN0cmwuJHJlbmRlcik7Cit9CisKK2Z1bmN0aW9uIHBhcnNlQ29uc3RhbnRFeHBy
KCRwYXJzZSwgY29udGV4dCwgbmFtZSwgZXhwcmVzc2lvbiwgZmFsbGJhY2spIHsKKyAgdmFyIHBh
cnNlRm47CisgIGlmIChpc0RlZmluZWQoZXhwcmVzc2lvbikpIHsKKyAgICBwYXJzZUZuID0gJHBh
cnNlKGV4cHJlc3Npb24pOworICAgIGlmICghcGFyc2VGbi5jb25zdGFudCkgeworICAgICAgdGhy
b3cgbWluRXJyKCduZ01vZGVsJykoJ2NvbnN0ZXhwcicsICdFeHBlY3RlZCBjb25zdGFudCBleHBy
ZXNzaW9uIGZvciBgezB9YCwgYnV0IHNhdyAnICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ2B7MX1gLicsIG5hbWUsIGV4cHJlc3Npb24pOworICAgIH0KKyAgICByZXR1cm4g
cGFyc2VGbihjb250ZXh0KTsKKyAgfQorICByZXR1cm4gZmFsbGJhY2s7Cit9CisKK2Z1bmN0aW9u
IGNoZWNrYm94SW5wdXRUeXBlKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsLCAkc25pZmZlciwg
JGJyb3dzZXIsICRmaWx0ZXIsICRwYXJzZSkgeworICB2YXIgdHJ1ZVZhbHVlID0gcGFyc2VDb25z
dGFudEV4cHIoJHBhcnNlLCBzY29wZSwgJ25nVHJ1ZVZhbHVlJywgYXR0ci5uZ1RydWVWYWx1ZSwg
dHJ1ZSk7CisgIHZhciBmYWxzZVZhbHVlID0gcGFyc2VDb25zdGFudEV4cHIoJHBhcnNlLCBzY29w
ZSwgJ25nRmFsc2VWYWx1ZScsIGF0dHIubmdGYWxzZVZhbHVlLCBmYWxzZSk7CisKKyAgdmFyIGxp
c3RlbmVyID0gZnVuY3Rpb24oZXYpIHsKKyAgICBjdHJsLiRzZXRWaWV3VmFsdWUoZWxlbWVudFsw
XS5jaGVja2VkLCBldiAmJiBldi50eXBlKTsKKyAgfTsKKworICBlbGVtZW50Lm9uKCdjbGljaycs
IGxpc3RlbmVyKTsKKworICBjdHJsLiRyZW5kZXIgPSBmdW5jdGlvbigpIHsKKyAgICBlbGVtZW50
WzBdLmNoZWNrZWQgPSBjdHJsLiR2aWV3VmFsdWU7CisgIH07CisKKyAgLy8gT3ZlcnJpZGUgdGhl
IHN0YW5kYXJkIGAkaXNFbXB0eWAgYmVjYXVzZSB0aGUgJHZpZXdWYWx1ZSBvZiBhbiBlbXB0eSBj
aGVja2JveCBpcyBhbHdheXMgc2V0IHRvIGBmYWxzZWAKKyAgLy8gVGhpcyBpcyBiZWNhdXNlIG9m
IHRoZSBwYXJzZXIgYmVsb3csIHdoaWNoIGNvbXBhcmVzIHRoZSBgJG1vZGVsVmFsdWVgIHdpdGgg
YHRydWVWYWx1ZWAgdG8gY29udmVydAorICAvLyBpdCB0byBhIGJvb2xlYW4uCisgIGN0cmwuJGlz
RW1wdHkgPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIHJldHVybiB2YWx1ZSA9PT0gZmFsc2U7Cisg
IH07CisKKyAgY3RybC4kZm9ybWF0dGVycy5wdXNoKGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgcmV0
dXJuIGVxdWFscyh2YWx1ZSwgdHJ1ZVZhbHVlKTsKKyAgfSk7CisKKyAgY3RybC4kcGFyc2Vycy5w
dXNoKGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgcmV0dXJuIHZhbHVlID8gdHJ1ZVZhbHVlIDogZmFs
c2VWYWx1ZTsKKyAgfSk7Cit9CisKKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFt
ZSB0ZXh0YXJlYQorICogQHJlc3RyaWN0IEUKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIEhUTUwg
dGV4dGFyZWEgZWxlbWVudCBjb250cm9sIHdpdGggYW5ndWxhciBkYXRhLWJpbmRpbmcuIFRoZSBk
YXRhLWJpbmRpbmcgYW5kIHZhbGlkYXRpb24KKyAqIHByb3BlcnRpZXMgb2YgdGhpcyBlbGVtZW50
IGFyZSBleGFjdGx5IHRoZSBzYW1lIGFzIHRob3NlIG9mIHRoZQorICoge0BsaW5rIG5nLmRpcmVj
dGl2ZTppbnB1dCBpbnB1dCBlbGVtZW50fS4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gbmdNb2Rl
bCBBc3NpZ25hYmxlIGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBkYXRhLWJpbmQgdG8uCisgKiBAcGFy
YW0ge3N0cmluZz19IG5hbWUgUHJvcGVydHkgbmFtZSBvZiB0aGUgZm9ybSB1bmRlciB3aGljaCB0
aGUgY29udHJvbCBpcyBwdWJsaXNoZWQuCisgKiBAcGFyYW0ge3N0cmluZz19IHJlcXVpcmVkIFNl
dHMgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgbm90IGVu
dGVyZWQuCisgKiBAcGFyYW0ge3N0cmluZz19IG5nUmVxdWlyZWQgQWRkcyBgcmVxdWlyZWRgIGF0
dHJpYnV0ZSBhbmQgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGNvbnN0cmFpbnQgdG8KKyAqICAgIHRo
ZSBlbGVtZW50IHdoZW4gdGhlIG5nUmVxdWlyZWQgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gdHJ1
ZS4gVXNlIGBuZ1JlcXVpcmVkYCBpbnN0ZWFkIG9mCisgKiAgICBgcmVxdWlyZWRgIHdoZW4geW91
IHdhbnQgdG8gZGF0YS1iaW5kIHRvIHRoZSBgcmVxdWlyZWRgIGF0dHJpYnV0ZS4KKyAqIEBwYXJh
bSB7bnVtYmVyPX0gbmdNaW5sZW5ndGggU2V0cyBgbWlubGVuZ3RoYCB2YWxpZGF0aW9uIGVycm9y
IGtleSBpZiB0aGUgdmFsdWUgaXMgc2hvcnRlciB0aGFuCisgKiAgICBtaW5sZW5ndGguCisgKiBA
cGFyYW0ge251bWJlcj19IG5nTWF4bGVuZ3RoIFNldHMgYG1heGxlbmd0aGAgdmFsaWRhdGlvbiBl
cnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIGxvbmdlciB0aGFuCisgKiAgICBtYXhsZW5ndGguIFNl
dHRpbmcgdGhlIGF0dHJpYnV0ZSB0byBhIG5lZ2F0aXZlIG9yIG5vbi1udW1lcmljIHZhbHVlLCBh
bGxvd3MgdmlldyB2YWx1ZXMgb2YgYW55CisgKiAgICBsZW5ndGguCisgKiBAcGFyYW0ge3N0cmlu
Zz19IG5nUGF0dGVybiBTZXRzIGBwYXR0ZXJuYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUg
bmdNb2RlbCB2YWx1ZSBkb2VzIG5vdCBtYXRjaAorICogICAgYSBSZWdFeHAgZm91bmQgYnkgZXZh
bHVhdGluZyB0aGUgQW5ndWxhciBleHByZXNzaW9uIGdpdmVuIGluIHRoZSBhdHRyaWJ1dGUgdmFs
dWUuCisgKiAgICBJZiB0aGUgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gYSBSZWdFeHAgb2JqZWN0
LCB0aGVuIHRoaXMgaXMgdXNlZCBkaXJlY3RseS4KKyAqICAgIElmIHRoZSBleHByZXNzaW9uIGV2
YWx1YXRlcyB0byBhIHN0cmluZywgdGhlbiBpdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIFJlZ0V4
cAorICogICAgYWZ0ZXIgd3JhcHBpbmcgaXQgaW4gYF5gIGFuZCBgJGAgY2hhcmFjdGVycy4gRm9y
IGluc3RhbmNlLCBgImFiYyJgIHdpbGwgYmUgY29udmVydGVkIHRvCisgKiAgICBgbmV3IFJlZ0V4
cCgnXmFiYyQnKWAuPGJyIC8+CisgKiAgICAqKk5vdGU6KiogQXZvaWQgdXNpbmcgdGhlIGBnYCBm
bGFnIG9uIHRoZSBSZWdFeHAsIGFzIGl0IHdpbGwgY2F1c2UgZWFjaCBzdWNjZXNzaXZlIHNlYXJj
aCB0bworICogICAgc3RhcnQgYXQgdGhlIGluZGV4IG9mIHRoZSBsYXN0IHNlYXJjaCdzIG1hdGNo
LCB0aHVzIG5vdCB0YWtpbmcgdGhlIHdob2xlIGlucHV0IHZhbHVlIGludG8KKyAqICAgIGFjY291
bnQuCisgKiBAcGFyYW0ge3N0cmluZz19IG5nQ2hhbmdlIEFuZ3VsYXIgZXhwcmVzc2lvbiB0byBi
ZSBleGVjdXRlZCB3aGVuIGlucHV0IGNoYW5nZXMgZHVlIHRvIHVzZXIKKyAqICAgIGludGVyYWN0
aW9uIHdpdGggdGhlIGlucHV0IGVsZW1lbnQuCisgKiBAcGFyYW0ge2Jvb2xlYW49fSBbbmdUcmlt
PXRydWVdIElmIHNldCB0byBmYWxzZSBBbmd1bGFyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgdHJp
bSB0aGUgaW5wdXQuCisgKi8KKworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1l
IGlucHV0CisgKiBAcmVzdHJpY3QgRQorICoKKyAqIEBkZXNjcmlwdGlvbgorICogSFRNTCBpbnB1
dCBlbGVtZW50IGNvbnRyb2wuIFdoZW4gdXNlZCB0b2dldGhlciB3aXRoIHtAbGluayBuZ01vZGVs
IGBuZ01vZGVsYH0sIGl0IHByb3ZpZGVzIGRhdGEtYmluZGluZywKKyAqIGlucHV0IHN0YXRlIGNv
bnRyb2wsIGFuZCB2YWxpZGF0aW9uLgorICogSW5wdXQgY29udHJvbCBmb2xsb3dzIEhUTUw1IGlu
cHV0IHR5cGVzIGFuZCBwb2x5ZmlsbHMgdGhlIEhUTUw1IHZhbGlkYXRpb24gYmVoYXZpb3IgZm9y
IG9sZGVyIGJyb3dzZXJzLgorICoKKyAqIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LXdhcm5pbmci
PgorICogKipOb3RlOioqIE5vdCBldmVyeSBmZWF0dXJlIG9mZmVyZWQgaXMgYXZhaWxhYmxlIGZv
ciBhbGwgaW5wdXQgdHlwZXMuCisgKiBTcGVjaWZpY2FsbHksIGRhdGEgYmluZGluZyBhbmQgZXZl
bnQgaGFuZGxpbmcgdmlhIGBuZy1tb2RlbGAgaXMgdW5zdXBwb3J0ZWQgZm9yIGBpbnB1dFtmaWxl
XWAuCisgKiA8L2Rpdj4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gbmdNb2RlbCBBc3NpZ25hYmxl
IGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBkYXRhLWJpbmQgdG8uCisgKiBAcGFyYW0ge3N0cmluZz19
IG5hbWUgUHJvcGVydHkgbmFtZSBvZiB0aGUgZm9ybSB1bmRlciB3aGljaCB0aGUgY29udHJvbCBp
cyBwdWJsaXNoZWQuCisgKiBAcGFyYW0ge3N0cmluZz19IHJlcXVpcmVkIFNldHMgYHJlcXVpcmVk
YCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgbm90IGVudGVyZWQuCisgKiBA
cGFyYW0ge2Jvb2xlYW49fSBuZ1JlcXVpcmVkIFNldHMgYHJlcXVpcmVkYCBhdHRyaWJ1dGUgaWYg
c2V0IHRvIHRydWUKKyAqIEBwYXJhbSB7bnVtYmVyPX0gbmdNaW5sZW5ndGggU2V0cyBgbWlubGVu
Z3RoYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgc2hvcnRlciB0aGFuCisg
KiAgICBtaW5sZW5ndGguCisgKiBAcGFyYW0ge251bWJlcj19IG5nTWF4bGVuZ3RoIFNldHMgYG1h
eGxlbmd0aGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIGxvbmdlciB0aGFu
CisgKiAgICBtYXhsZW5ndGguIFNldHRpbmcgdGhlIGF0dHJpYnV0ZSB0byBhIG5lZ2F0aXZlIG9y
IG5vbi1udW1lcmljIHZhbHVlLCBhbGxvd3MgdmlldyB2YWx1ZXMgb2YgYW55CisgKiAgICBsZW5n
dGguCisgKiBAcGFyYW0ge3N0cmluZz19IG5nUGF0dGVybiBTZXRzIGBwYXR0ZXJuYCB2YWxpZGF0
aW9uIGVycm9yIGtleSBpZiB0aGUgbmdNb2RlbCB2YWx1ZSBkb2VzIG5vdCBtYXRjaAorICogICAg
YSBSZWdFeHAgZm91bmQgYnkgZXZhbHVhdGluZyB0aGUgQW5ndWxhciBleHByZXNzaW9uIGdpdmVu
IGluIHRoZSBhdHRyaWJ1dGUgdmFsdWUuCisgKiAgICBJZiB0aGUgZXhwcmVzc2lvbiBldmFsdWF0
ZXMgdG8gYSBSZWdFeHAgb2JqZWN0LCB0aGVuIHRoaXMgaXMgdXNlZCBkaXJlY3RseS4KKyAqICAg
IElmIHRoZSBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBhIHN0cmluZywgdGhlbiBpdCB3aWxsIGJl
IGNvbnZlcnRlZCB0byBhIFJlZ0V4cAorICogICAgYWZ0ZXIgd3JhcHBpbmcgaXQgaW4gYF5gIGFu
ZCBgJGAgY2hhcmFjdGVycy4gRm9yIGluc3RhbmNlLCBgImFiYyJgIHdpbGwgYmUgY29udmVydGVk
IHRvCisgKiAgICBgbmV3IFJlZ0V4cCgnXmFiYyQnKWAuPGJyIC8+CisgKiAgICAqKk5vdGU6Kiog
QXZvaWQgdXNpbmcgdGhlIGBnYCBmbGFnIG9uIHRoZSBSZWdFeHAsIGFzIGl0IHdpbGwgY2F1c2Ug
ZWFjaCBzdWNjZXNzaXZlIHNlYXJjaCB0bworICogICAgc3RhcnQgYXQgdGhlIGluZGV4IG9mIHRo
ZSBsYXN0IHNlYXJjaCdzIG1hdGNoLCB0aHVzIG5vdCB0YWtpbmcgdGhlIHdob2xlIGlucHV0IHZh
bHVlIGludG8KKyAqICAgIGFjY291bnQuCisgKiBAcGFyYW0ge3N0cmluZz19IG5nQ2hhbmdlIEFu
Z3VsYXIgZXhwcmVzc2lvbiB0byBiZSBleGVjdXRlZCB3aGVuIGlucHV0IGNoYW5nZXMgZHVlIHRv
IHVzZXIKKyAqICAgIGludGVyYWN0aW9uIHdpdGggdGhlIGlucHV0IGVsZW1lbnQuCisgKiBAcGFy
YW0ge2Jvb2xlYW49fSBbbmdUcmltPXRydWVdIElmIHNldCB0byBmYWxzZSBBbmd1bGFyIHdpbGwg
bm90IGF1dG9tYXRpY2FsbHkgdHJpbSB0aGUgaW5wdXQuCisgKiAgICBUaGlzIHBhcmFtZXRlciBp
cyBpZ25vcmVkIGZvciBpbnB1dFt0eXBlPXBhc3N3b3JkXSBjb250cm9scywgd2hpY2ggd2lsbCBu
ZXZlciB0cmltIHRoZQorICogICAgaW5wdXQuCisgKgorICogQGV4YW1wbGUKKyAgICA8ZXhhbXBs
ZSBuYW1lPSJpbnB1dC1kaXJlY3RpdmUiIG1vZHVsZT0iaW5wdXRFeGFtcGxlIj4KKyAgICAgIDxm
aWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICAgIDxzY3JpcHQ+CisgICAgICAgICAgYW5ndWxh
ci5tb2R1bGUoJ2lucHV0RXhhbXBsZScsIFtdKQorICAgICAgICAgICAgLmNvbnRyb2xsZXIoJ0V4
YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHsKKyAgICAgICAg
ICAgICAgJHNjb3BlLnVzZXIgPSB7bmFtZTogJ2d1ZXN0JywgbGFzdDogJ3Zpc2l0b3InfTsKKyAg
ICAgICAgICAgIH1dKTsKKyAgICAgICA8L3NjcmlwdD4KKyAgICAgICA8ZGl2IG5nLWNvbnRyb2xs
ZXI9IkV4YW1wbGVDb250cm9sbGVyIj4KKyAgICAgICAgIDxmb3JtIG5hbWU9Im15Rm9ybSI+Cisg
ICAgICAgICAgIDxsYWJlbD4KKyAgICAgICAgICAgICAgVXNlciBuYW1lOgorICAgICAgICAgICAg
ICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idXNlck5hbWUiIG5nLW1vZGVsPSJ1c2VyLm5hbWUi
IHJlcXVpcmVkPgorICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgICA8ZGl2IHJvbGU9ImFs
ZXJ0Ij4KKyAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZXJyb3IiIG5nLXNob3c9Im15Rm9ybS51
c2VyTmFtZS4kZXJyb3IucmVxdWlyZWQiPgorICAgICAgICAgICAgICBSZXF1aXJlZCE8L3NwYW4+
CisgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICA8bGFiZWw+CisgICAgICAgICAgICAgIExh
c3QgbmFtZToKKyAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Imxhc3ROYW1l
IiBuZy1tb2RlbD0idXNlci5sYXN0IgorICAgICAgICAgICAgICBuZy1taW5sZW5ndGg9IjMiIG5n
LW1heGxlbmd0aD0iMTAiPgorICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgICA8ZGl2IHJv
bGU9ImFsZXJ0Ij4KKyAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZXJyb3IiIG5nLXNob3c9Im15
Rm9ybS5sYXN0TmFtZS4kZXJyb3IubWlubGVuZ3RoIj4KKyAgICAgICAgICAgICAgIFRvbyBzaG9y
dCE8L3NwYW4+CisgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVycm9yIiBuZy1zaG93PSJteUZv
cm0ubGFzdE5hbWUuJGVycm9yLm1heGxlbmd0aCI+CisgICAgICAgICAgICAgICBUb28gbG9uZyE8
L3NwYW4+CisgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgPC9mb3JtPgorICAgICAgICAgPGhy
PgorICAgICAgICAgPHR0PnVzZXIgPSB7e3VzZXJ9fTwvdHQ+PGJyLz4KKyAgICAgICAgIDx0dD5t
eUZvcm0udXNlck5hbWUuJHZhbGlkID0ge3tteUZvcm0udXNlck5hbWUuJHZhbGlkfX08L3R0Pjxi
ci8+CisgICAgICAgICA8dHQ+bXlGb3JtLnVzZXJOYW1lLiRlcnJvciA9IHt7bXlGb3JtLnVzZXJO
YW1lLiRlcnJvcn19PC90dD48YnIvPgorICAgICAgICAgPHR0Pm15Rm9ybS5sYXN0TmFtZS4kdmFs
aWQgPSB7e215Rm9ybS5sYXN0TmFtZS4kdmFsaWR9fTwvdHQ+PGJyLz4KKyAgICAgICAgIDx0dD5t
eUZvcm0ubGFzdE5hbWUuJGVycm9yID0ge3tteUZvcm0ubGFzdE5hbWUuJGVycm9yfX08L3R0Pjxi
ci8+CisgICAgICAgICA8dHQ+bXlGb3JtLiR2YWxpZCA9IHt7bXlGb3JtLiR2YWxpZH19PC90dD48
YnIvPgorICAgICAgICAgPHR0Pm15Rm9ybS4kZXJyb3IucmVxdWlyZWQgPSB7eyEhbXlGb3JtLiRl
cnJvci5yZXF1aXJlZH19PC90dD48YnIvPgorICAgICAgICAgPHR0Pm15Rm9ybS4kZXJyb3IubWlu
bGVuZ3RoID0ge3shIW15Rm9ybS4kZXJyb3IubWlubGVuZ3RofX08L3R0Pjxici8+CisgICAgICAg
ICA8dHQ+bXlGb3JtLiRlcnJvci5tYXhsZW5ndGggPSB7eyEhbXlGb3JtLiRlcnJvci5tYXhsZW5n
dGh9fTwvdHQ+PGJyLz4KKyAgICAgICA8L2Rpdj4KKyAgICAgIDwvZmlsZT4KKyAgICAgIDxmaWxl
IG5hbWU9InByb3RyYWN0b3IuanMiIHR5cGU9InByb3RyYWN0b3IiPgorICAgICAgICB2YXIgdXNl
ciA9IGVsZW1lbnQoYnkuZXhhY3RCaW5kaW5nKCd1c2VyJykpOworICAgICAgICB2YXIgdXNlck5h
bWVWYWxpZCA9IGVsZW1lbnQoYnkuYmluZGluZygnbXlGb3JtLnVzZXJOYW1lLiR2YWxpZCcpKTsK
KyAgICAgICAgdmFyIGxhc3ROYW1lVmFsaWQgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ215Rm9ybS5s
YXN0TmFtZS4kdmFsaWQnKSk7CisgICAgICAgIHZhciBsYXN0TmFtZUVycm9yID0gZWxlbWVudChi
eS5iaW5kaW5nKCdteUZvcm0ubGFzdE5hbWUuJGVycm9yJykpOworICAgICAgICB2YXIgZm9ybVZh
bGlkID0gZWxlbWVudChieS5iaW5kaW5nKCdteUZvcm0uJHZhbGlkJykpOworICAgICAgICB2YXIg
dXNlck5hbWVJbnB1dCA9IGVsZW1lbnQoYnkubW9kZWwoJ3VzZXIubmFtZScpKTsKKyAgICAgICAg
dmFyIHVzZXJMYXN0SW5wdXQgPSBlbGVtZW50KGJ5Lm1vZGVsKCd1c2VyLmxhc3QnKSk7CisKKyAg
ICAgICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIHRvIG1vZGVsJywgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgZXhwZWN0KHVzZXIuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ3sibmFtZSI6Imd1ZXN0Iiwi
bGFzdCI6InZpc2l0b3IifScpOworICAgICAgICAgIGV4cGVjdCh1c2VyTmFtZVZhbGlkLmdldFRl
eHQoKSkudG9Db250YWluKCd0cnVlJyk7CisgICAgICAgICAgZXhwZWN0KGZvcm1WYWxpZC5nZXRU
ZXh0KCkpLnRvQ29udGFpbigndHJ1ZScpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hv
dWxkIGJlIGludmFsaWQgaWYgZW1wdHkgd2hlbiByZXF1aXJlZCcsIGZ1bmN0aW9uKCkgeworICAg
ICAgICAgIHVzZXJOYW1lSW5wdXQuY2xlYXIoKTsKKyAgICAgICAgICB1c2VyTmFtZUlucHV0LnNl
bmRLZXlzKCcnKTsKKworICAgICAgICAgIGV4cGVjdCh1c2VyLmdldFRleHQoKSkudG9Db250YWlu
KCd7Imxhc3QiOiJ2aXNpdG9yIn0nKTsKKyAgICAgICAgICBleHBlY3QodXNlck5hbWVWYWxpZC5n
ZXRUZXh0KCkpLnRvQ29udGFpbignZmFsc2UnKTsKKyAgICAgICAgICBleHBlY3QoZm9ybVZhbGlk
LmdldFRleHQoKSkudG9Db250YWluKCdmYWxzZScpOworICAgICAgICB9KTsKKworICAgICAgICBp
dCgnc2hvdWxkIGJlIHZhbGlkIGlmIGVtcHR5IHdoZW4gbWluIGxlbmd0aCBpcyBzZXQnLCBmdW5j
dGlvbigpIHsKKyAgICAgICAgICB1c2VyTGFzdElucHV0LmNsZWFyKCk7CisgICAgICAgICAgdXNl
ckxhc3RJbnB1dC5zZW5kS2V5cygnJyk7CisKKyAgICAgICAgICBleHBlY3QodXNlci5nZXRUZXh0
KCkpLnRvQ29udGFpbigneyJuYW1lIjoiZ3Vlc3QiLCJsYXN0IjoiIn0nKTsKKyAgICAgICAgICBl
eHBlY3QobGFzdE5hbWVWYWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbigndHJ1ZScpOworICAgICAg
ICAgIGV4cGVjdChmb3JtVmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ3RydWUnKTsKKyAgICAg
ICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIGxlc3MgdGhhbiByZXF1
aXJlZCBtaW4gbGVuZ3RoJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgdXNlckxhc3RJbnB1dC5j
bGVhcigpOworICAgICAgICAgIHVzZXJMYXN0SW5wdXQuc2VuZEtleXMoJ3h4Jyk7CisKKyAgICAg
ICAgICBleHBlY3QodXNlci5nZXRUZXh0KCkpLnRvQ29udGFpbigneyJuYW1lIjoiZ3Vlc3QifScp
OworICAgICAgICAgIGV4cGVjdChsYXN0TmFtZVZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCdm
YWxzZScpOworICAgICAgICAgIGV4cGVjdChsYXN0TmFtZUVycm9yLmdldFRleHQoKSkudG9Db250
YWluKCdtaW5sZW5ndGgnKTsKKyAgICAgICAgICBleHBlY3QoZm9ybVZhbGlkLmdldFRleHQoKSku
dG9Db250YWluKCdmYWxzZScpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIGJl
IGludmFsaWQgaWYgbG9uZ2VyIHRoYW4gbWF4IGxlbmd0aCcsIGZ1bmN0aW9uKCkgeworICAgICAg
ICAgIHVzZXJMYXN0SW5wdXQuY2xlYXIoKTsKKyAgICAgICAgICB1c2VyTGFzdElucHV0LnNlbmRL
ZXlzKCdzb21lIHJpZGljdWxvdXNseSBsb25nIG5hbWUnKTsKKworICAgICAgICAgIGV4cGVjdCh1
c2VyLmdldFRleHQoKSkudG9Db250YWluKCd7Im5hbWUiOiJndWVzdCJ9Jyk7CisgICAgICAgICAg
ZXhwZWN0KGxhc3ROYW1lVmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ2ZhbHNlJyk7CisgICAg
ICAgICAgZXhwZWN0KGxhc3ROYW1lRXJyb3IuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ21heGxlbmd0
aCcpOworICAgICAgICAgIGV4cGVjdChmb3JtVmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ2Zh
bHNlJyk7CisgICAgICAgIH0pOworICAgICAgPC9maWxlPgorICAgIDwvZXhhbXBsZT4KKyAqLwor
dmFyIGlucHV0RGlyZWN0aXZlID0gWyckYnJvd3NlcicsICckc25pZmZlcicsICckZmlsdGVyJywg
JyRwYXJzZScsCisgICAgZnVuY3Rpb24oJGJyb3dzZXIsICRzbmlmZmVyLCAkZmlsdGVyLCAkcGFy
c2UpIHsKKyAgcmV0dXJuIHsKKyAgICByZXN0cmljdDogJ0UnLAorICAgIHJlcXVpcmU6IFsnP25n
TW9kZWwnXSwKKyAgICBsaW5rOiB7CisgICAgICBwcmU6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50
LCBhdHRyLCBjdHJscykgeworICAgICAgICBpZiAoY3RybHNbMF0pIHsKKyAgICAgICAgICAoaW5w
dXRUeXBlW2xvd2VyY2FzZShhdHRyLnR5cGUpXSB8fCBpbnB1dFR5cGUudGV4dCkoc2NvcGUsIGVs
ZW1lbnQsIGF0dHIsIGN0cmxzWzBdLCAkc25pZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGJyb3dzZXIsICRmaWx0ZXIs
ICRwYXJzZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH07Cit9XTsKKworCisKK3Zh
ciBDT05TVEFOVF9WQUxVRV9SRUdFWFAgPSAvXih0cnVlfGZhbHNlfFxkKykkLzsKKy8qKgorICog
QG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgbmdWYWx1ZQorICoKKyAqIEBkZXNjcmlwdGlvbgor
ICogQmluZHMgdGhlIGdpdmVuIGV4cHJlc3Npb24gdG8gdGhlIHZhbHVlIG9mIGA8b3B0aW9uPmAg
b3Ige0BsaW5rIGlucHV0W3JhZGlvXSBgaW5wdXRbcmFkaW9dYH0sCisgKiBzbyB0aGF0IHdoZW4g
dGhlIGVsZW1lbnQgaXMgc2VsZWN0ZWQsIHRoZSB7QGxpbmsgbmdNb2RlbCBgbmdNb2RlbGB9IG9m
IHRoYXQgZWxlbWVudCBpcyBzZXQgdG8KKyAqIHRoZSBib3VuZCB2YWx1ZS4KKyAqCisgKiBgbmdW
YWx1ZWAgaXMgdXNlZnVsIHdoZW4gZHluYW1pY2FsbHkgZ2VuZXJhdGluZyBsaXN0cyBvZiByYWRp
byBidXR0b25zIHVzaW5nCisgKiB7QGxpbmsgbmdSZXBlYXQgYG5nUmVwZWF0YH0sIGFzIHNob3du
IGJlbG93LgorICoKKyAqIExpa2V3aXNlLCBgbmdWYWx1ZWAgY2FuIGJlIHVzZWQgdG8gZ2VuZXJh
dGUgYDxvcHRpb24+YCBlbGVtZW50cyBmb3IKKyAqIHRoZSB7QGxpbmsgc2VsZWN0IGBzZWxlY3Rg
fSBlbGVtZW50LiBJbiB0aGF0IGNhc2UgaG93ZXZlciwgb25seSBzdHJpbmdzIGFyZSBzdXBwb3J0
ZWQKKyAqIGZvciB0aGUgYHZhbHVlIGBhdHRyaWJ1dGUsIHNvIHRoZSByZXN1bHRpbmcgYG5nTW9k
ZWxgIHdpbGwgYWx3YXlzIGJlIGEgc3RyaW5nLgorICogU3VwcG9ydCBmb3IgYHNlbGVjdGAgbW9k
ZWxzIHdpdGggbm9uLXN0cmluZyB2YWx1ZXMgaXMgYXZhaWxhYmxlIHZpYSBgbmdPcHRpb25zYC4K
KyAqCisgKiBAZWxlbWVudCBpbnB1dAorICogQHBhcmFtIHtzdHJpbmc9fSBuZ1ZhbHVlIGFuZ3Vs
YXIgZXhwcmVzc2lvbiwgd2hvc2UgdmFsdWUgd2lsbCBiZSBib3VuZCB0byB0aGUgYHZhbHVlYCBh
dHRyaWJ1dGUKKyAqICAgb2YgdGhlIGBpbnB1dGAgZWxlbWVudAorICoKKyAqIEBleGFtcGxlCisg
ICAgPGV4YW1wbGUgbmFtZT0ibmdWYWx1ZS1kaXJlY3RpdmUiIG1vZHVsZT0idmFsdWVFeGFtcGxl
Ij4KKyAgICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICAgIDxzY3JpcHQ+CisgICAg
ICAgICAgYW5ndWxhci5tb2R1bGUoJ3ZhbHVlRXhhbXBsZScsIFtdKQorICAgICAgICAgICAgLmNv
bnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUp
IHsKKyAgICAgICAgICAgICAgJHNjb3BlLm5hbWVzID0gWydwaXp6YScsICd1bmljb3JucycsICdy
b2JvdHMnXTsKKyAgICAgICAgICAgICAgJHNjb3BlLm15ID0geyBmYXZvcml0ZTogJ3VuaWNvcm5z
JyB9OworICAgICAgICAgICAgfV0pOworICAgICAgIDwvc2NyaXB0PgorICAgICAgICA8Zm9ybSBu
Zy1jb250cm9sbGVyPSJFeGFtcGxlQ29udHJvbGxlciI+CisgICAgICAgICAgPGgyPldoaWNoIGlz
IHlvdXIgZmF2b3JpdGU/PC9oMj4KKyAgICAgICAgICAgIDxsYWJlbCBuZy1yZXBlYXQ9Im5hbWUg
aW4gbmFtZXMiIGZvcj0ie3tuYW1lfX0iPgorICAgICAgICAgICAgICB7e25hbWV9fQorICAgICAg
ICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iCisgICAgICAgICAgICAgICAgICAgICBuZy1tb2Rl
bD0ibXkuZmF2b3JpdGUiCisgICAgICAgICAgICAgICAgICAgICBuZy12YWx1ZT0ibmFtZSIKKyAg
ICAgICAgICAgICAgICAgICAgIGlkPSJ7e25hbWV9fSIKKyAgICAgICAgICAgICAgICAgICAgIG5h
bWU9ImZhdm9yaXRlIj4KKyAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgPGRpdj5Zb3Ug
Y2hvc2Uge3tteS5mYXZvcml0ZX19PC9kaXY+CisgICAgICAgIDwvZm9ybT4KKyAgICAgIDwvZmls
ZT4KKyAgICAgIDxmaWxlIG5hbWU9InByb3RyYWN0b3IuanMiIHR5cGU9InByb3RyYWN0b3IiPgor
ICAgICAgICB2YXIgZmF2b3JpdGUgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ215LmZhdm9yaXRlJykp
OworCisgICAgICAgIGl0KCdzaG91bGQgaW5pdGlhbGl6ZSB0byBtb2RlbCcsIGZ1bmN0aW9uKCkg
eworICAgICAgICAgIGV4cGVjdChmYXZvcml0ZS5nZXRUZXh0KCkpLnRvQ29udGFpbigndW5pY29y
bnMnKTsKKyAgICAgICAgfSk7CisgICAgICAgIGl0KCdzaG91bGQgYmluZCB0aGUgdmFsdWVzIHRv
IHRoZSBpbnB1dHMnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICBlbGVtZW50LmFsbChieS5tb2Rl
bCgnbXkuZmF2b3JpdGUnKSkuZ2V0KDApLmNsaWNrKCk7CisgICAgICAgICAgZXhwZWN0KGZhdm9y
aXRlLmdldFRleHQoKSkudG9Db250YWluKCdwaXp6YScpOworICAgICAgICB9KTsKKyAgICAgIDwv
ZmlsZT4KKyAgICA8L2V4YW1wbGU+CisgKi8KK3ZhciBuZ1ZhbHVlRGlyZWN0aXZlID0gZnVuY3Rp
b24oKSB7CisgIHJldHVybiB7CisgICAgcmVzdHJpY3Q6ICdBJywKKyAgICBwcmlvcml0eTogMTAw
LAorICAgIGNvbXBpbGU6IGZ1bmN0aW9uKHRwbCwgdHBsQXR0cikgeworICAgICAgaWYgKENPTlNU
QU5UX1ZBTFVFX1JFR0VYUC50ZXN0KHRwbEF0dHIubmdWYWx1ZSkpIHsKKyAgICAgICAgcmV0dXJu
IGZ1bmN0aW9uIG5nVmFsdWVDb25zdGFudExpbmsoc2NvcGUsIGVsbSwgYXR0cikgeworICAgICAg
ICAgIGF0dHIuJHNldCgndmFsdWUnLCBzY29wZS4kZXZhbChhdHRyLm5nVmFsdWUpKTsKKyAgICAg
ICAgfTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZ1ZhbHVlTGlu
ayhzY29wZSwgZWxtLCBhdHRyKSB7CisgICAgICAgICAgc2NvcGUuJHdhdGNoKGF0dHIubmdWYWx1
ZSwgZnVuY3Rpb24gdmFsdWVXYXRjaEFjdGlvbih2YWx1ZSkgeworICAgICAgICAgICAgYXR0ci4k
c2V0KCd2YWx1ZScsIHZhbHVlKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfTsKKyAgICAgIH0K
KyAgICB9CisgIH07Cit9OworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1lIG5n
QmluZAorICogQHJlc3RyaWN0IEFDCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBUaGUgYG5nQmlu
ZGAgYXR0cmlidXRlIHRlbGxzIEFuZ3VsYXIgdG8gcmVwbGFjZSB0aGUgdGV4dCBjb250ZW50IG9m
IHRoZSBzcGVjaWZpZWQgSFRNTCBlbGVtZW50CisgKiB3aXRoIHRoZSB2YWx1ZSBvZiBhIGdpdmVu
IGV4cHJlc3Npb24sIGFuZCB0byB1cGRhdGUgdGhlIHRleHQgY29udGVudCB3aGVuIHRoZSB2YWx1
ZSBvZiB0aGF0CisgKiBleHByZXNzaW9uIGNoYW5nZXMuCisgKgorICogVHlwaWNhbGx5LCB5b3Ug
ZG9uJ3QgdXNlIGBuZ0JpbmRgIGRpcmVjdGx5LCBidXQgaW5zdGVhZCB5b3UgdXNlIHRoZSBkb3Vi
bGUgY3VybHkgbWFya3VwIGxpa2UKKyAqIGB7eyBleHByZXNzaW9uIH19YCB3aGljaCBpcyBzaW1p
bGFyIGJ1dCBsZXNzIHZlcmJvc2UuCisgKgorICogSXQgaXMgcHJlZmVyYWJsZSB0byB1c2UgYG5n
QmluZGAgaW5zdGVhZCBvZiBge3sgZXhwcmVzc2lvbiB9fWAgaWYgYSB0ZW1wbGF0ZSBpcyBtb21l
bnRhcmlseQorICogZGlzcGxheWVkIGJ5IHRoZSBicm93c2VyIGluIGl0cyByYXcgc3RhdGUgYmVm
b3JlIEFuZ3VsYXIgY29tcGlsZXMgaXQuIFNpbmNlIGBuZ0JpbmRgIGlzIGFuCisgKiBlbGVtZW50
IGF0dHJpYnV0ZSwgaXQgbWFrZXMgdGhlIGJpbmRpbmdzIGludmlzaWJsZSB0byB0aGUgdXNlciB3
aGlsZSB0aGUgcGFnZSBpcyBsb2FkaW5nLgorICoKKyAqIEFuIGFsdGVybmF0aXZlIHNvbHV0aW9u
IHRvIHRoaXMgcHJvYmxlbSB3b3VsZCBiZSB1c2luZyB0aGUKKyAqIHtAbGluayBuZy5kaXJlY3Rp
dmU6bmdDbG9hayBuZ0Nsb2FrfSBkaXJlY3RpdmUuCisgKgorICoKKyAqIEBlbGVtZW50IEFOWQor
ICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ0JpbmQge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhw
cmVzc2lvbn0gdG8gZXZhbHVhdGUuCisgKgorICogQGV4YW1wbGUKKyAqIEVudGVyIGEgbmFtZSBp
biB0aGUgTGl2ZSBQcmV2aWV3IHRleHQgYm94OyB0aGUgZ3JlZXRpbmcgYmVsb3cgdGhlIHRleHQg
Ym94IGNoYW5nZXMgaW5zdGFudGx5LgorICAgPGV4YW1wbGUgbW9kdWxlPSJiaW5kRXhhbXBsZSI+
CisgICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICAgIDxzY3JpcHQ+CisgICAgICAg
ICBhbmd1bGFyLm1vZHVsZSgnYmluZEV4YW1wbGUnLCBbXSkKKyAgICAgICAgICAgLmNvbnRyb2xs
ZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHsKKyAg
ICAgICAgICAgICAkc2NvcGUubmFtZSA9ICdXaGlybGVkJzsKKyAgICAgICAgICAgfV0pOworICAg
ICAgIDwvc2NyaXB0PgorICAgICAgIDxkaXYgbmctY29udHJvbGxlcj0iRXhhbXBsZUNvbnRyb2xs
ZXIiPgorICAgICAgICAgPGxhYmVsPkVudGVyIG5hbWU6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuZy1t
b2RlbD0ibmFtZSI+PC9sYWJlbD48YnI+CisgICAgICAgICBIZWxsbyA8c3BhbiBuZy1iaW5kPSJu
YW1lIj48L3NwYW4+IQorICAgICAgIDwvZGl2PgorICAgICA8L2ZpbGU+CisgICAgIDxmaWxlIG5h
bWU9InByb3RyYWN0b3IuanMiIHR5cGU9InByb3RyYWN0b3IiPgorICAgICAgIGl0KCdzaG91bGQg
Y2hlY2sgbmctYmluZCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgdmFyIG5hbWVJbnB1dCA9IGVs
ZW1lbnQoYnkubW9kZWwoJ25hbWUnKSk7CisKKyAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmJp
bmRpbmcoJ25hbWUnKSkuZ2V0VGV4dCgpKS50b0JlKCdXaGlybGVkJyk7CisgICAgICAgICBuYW1l
SW5wdXQuY2xlYXIoKTsKKyAgICAgICAgIG5hbWVJbnB1dC5zZW5kS2V5cygnd29ybGQnKTsKKyAg
ICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmJpbmRpbmcoJ25hbWUnKSkuZ2V0VGV4dCgpKS50b0Jl
KCd3b3JsZCcpOworICAgICAgIH0pOworICAgICA8L2ZpbGU+CisgICA8L2V4YW1wbGU+CisgKi8K
K3ZhciBuZ0JpbmREaXJlY3RpdmUgPSBbJyRjb21waWxlJywgZnVuY3Rpb24oJGNvbXBpbGUpIHsK
KyAgcmV0dXJuIHsKKyAgICByZXN0cmljdDogJ0FDJywKKyAgICBjb21waWxlOiBmdW5jdGlvbiBu
Z0JpbmRDb21waWxlKHRlbXBsYXRlRWxlbWVudCkgeworICAgICAgJGNvbXBpbGUuJCRhZGRCaW5k
aW5nQ2xhc3ModGVtcGxhdGVFbGVtZW50KTsKKyAgICAgIHJldHVybiBmdW5jdGlvbiBuZ0JpbmRM
aW5rKHNjb3BlLCBlbGVtZW50LCBhdHRyKSB7CisgICAgICAgICRjb21waWxlLiQkYWRkQmluZGlu
Z0luZm8oZWxlbWVudCwgYXR0ci5uZ0JpbmQpOworICAgICAgICBlbGVtZW50ID0gZWxlbWVudFsw
XTsKKyAgICAgICAgc2NvcGUuJHdhdGNoKGF0dHIubmdCaW5kLCBmdW5jdGlvbiBuZ0JpbmRXYXRj
aEFjdGlvbih2YWx1ZSkgeworICAgICAgICAgIGVsZW1lbnQudGV4dENvbnRlbnQgPSB2YWx1ZSA9
PT0gdW5kZWZpbmVkID8gJycgOiB2YWx1ZTsKKyAgICAgICAgfSk7CisgICAgICB9OworICAgIH0K
KyAgfTsKK31dOworCisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgbmdCaW5k
VGVtcGxhdGUKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFRoZSBgbmdCaW5kVGVtcGxhdGVgIGRp
cmVjdGl2ZSBzcGVjaWZpZXMgdGhhdCB0aGUgZWxlbWVudAorICogdGV4dCBjb250ZW50IHNob3Vs
ZCBiZSByZXBsYWNlZCB3aXRoIHRoZSBpbnRlcnBvbGF0aW9uIG9mIHRoZSB0ZW1wbGF0ZQorICog
aW4gdGhlIGBuZ0JpbmRUZW1wbGF0ZWAgYXR0cmlidXRlLgorICogVW5saWtlIGBuZ0JpbmRgLCB0
aGUgYG5nQmluZFRlbXBsYXRlYCBjYW4gY29udGFpbiBtdWx0aXBsZSBge3tgIGB9fWAKKyAqIGV4
cHJlc3Npb25zLiBUaGlzIGRpcmVjdGl2ZSBpcyBuZWVkZWQgc2luY2Ugc29tZSBIVE1MIGVsZW1l
bnRzCisgKiAoc3VjaCBhcyBUSVRMRSBhbmQgT1BUSU9OKSBjYW5ub3QgY29udGFpbiBTUEFOIGVs
ZW1lbnRzLgorICoKKyAqIEBlbGVtZW50IEFOWQorICogQHBhcmFtIHtzdHJpbmd9IG5nQmluZFRl
bXBsYXRlIHRlbXBsYXRlIG9mIGZvcm0KKyAqICAgPHR0Pnt7PC90dD4gPHR0PmV4cHJlc3Npb248
L3R0PiA8dHQ+fX08L3R0PiB0byBldmFsLgorICoKKyAqIEBleGFtcGxlCisgKiBUcnkgaXQgaGVy
ZTogZW50ZXIgdGV4dCBpbiB0ZXh0IGJveCBhbmQgd2F0Y2ggdGhlIGdyZWV0aW5nIGNoYW5nZS4K
KyAgIDxleGFtcGxlIG1vZHVsZT0iYmluZEV4YW1wbGUiPgorICAgICA8ZmlsZSBuYW1lPSJpbmRl
eC5odG1sIj4KKyAgICAgICA8c2NyaXB0PgorICAgICAgICAgYW5ndWxhci5tb2R1bGUoJ2JpbmRF
eGFtcGxlJywgW10pCisgICAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcics
IFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7CisgICAgICAgICAgICAgJHNjb3BlLnNhbHV0
YXRpb24gPSAnSGVsbG8nOworICAgICAgICAgICAgICRzY29wZS5uYW1lID0gJ1dvcmxkJzsKKyAg
ICAgICAgICAgfV0pOworICAgICAgIDwvc2NyaXB0PgorICAgICAgIDxkaXYgbmctY29udHJvbGxl
cj0iRXhhbXBsZUNvbnRyb2xsZXIiPgorICAgICAgICA8bGFiZWw+U2FsdXRhdGlvbjogPGlucHV0
IHR5cGU9InRleHQiIG5nLW1vZGVsPSJzYWx1dGF0aW9uIj48L2xhYmVsPjxicj4KKyAgICAgICAg
PGxhYmVsPk5hbWU6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuZy1tb2RlbD0ibmFtZSI+PC9sYWJlbD48
YnI+CisgICAgICAgIDxwcmUgbmctYmluZC10ZW1wbGF0ZT0ie3tzYWx1dGF0aW9ufX0ge3tuYW1l
fX0hIj48L3ByZT4KKyAgICAgICA8L2Rpdj4KKyAgICAgPC9maWxlPgorICAgICA8ZmlsZSBuYW1l
PSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFjdG9yIj4KKyAgICAgICBpdCgnc2hvdWxkIGNo
ZWNrIG5nLWJpbmQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgIHZhciBzYWx1dGF0aW9uRWxlbSA9
IGVsZW1lbnQoYnkuYmluZGluZygnc2FsdXRhdGlvbicpKTsKKyAgICAgICAgIHZhciBzYWx1dGF0
aW9uSW5wdXQgPSBlbGVtZW50KGJ5Lm1vZGVsKCdzYWx1dGF0aW9uJykpOworICAgICAgICAgdmFy
IG5hbWVJbnB1dCA9IGVsZW1lbnQoYnkubW9kZWwoJ25hbWUnKSk7CisKKyAgICAgICAgIGV4cGVj
dChzYWx1dGF0aW9uRWxlbS5nZXRUZXh0KCkpLnRvQmUoJ0hlbGxvIFdvcmxkIScpOworCisgICAg
ICAgICBzYWx1dGF0aW9uSW5wdXQuY2xlYXIoKTsKKyAgICAgICAgIHNhbHV0YXRpb25JbnB1dC5z
ZW5kS2V5cygnR3JlZXRpbmdzJyk7CisgICAgICAgICBuYW1lSW5wdXQuY2xlYXIoKTsKKyAgICAg
ICAgIG5hbWVJbnB1dC5zZW5kS2V5cygndXNlcicpOworCisgICAgICAgICBleHBlY3Qoc2FsdXRh
dGlvbkVsZW0uZ2V0VGV4dCgpKS50b0JlKCdHcmVldGluZ3MgdXNlciEnKTsKKyAgICAgICB9KTsK
KyAgICAgPC9maWxlPgorICAgPC9leGFtcGxlPgorICovCit2YXIgbmdCaW5kVGVtcGxhdGVEaXJl
Y3RpdmUgPSBbJyRpbnRlcnBvbGF0ZScsICckY29tcGlsZScsIGZ1bmN0aW9uKCRpbnRlcnBvbGF0
ZSwgJGNvbXBpbGUpIHsKKyAgcmV0dXJuIHsKKyAgICBjb21waWxlOiBmdW5jdGlvbiBuZ0JpbmRU
ZW1wbGF0ZUNvbXBpbGUodGVtcGxhdGVFbGVtZW50KSB7CisgICAgICAkY29tcGlsZS4kJGFkZEJp
bmRpbmdDbGFzcyh0ZW1wbGF0ZUVsZW1lbnQpOworICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5nQmlu
ZFRlbXBsYXRlTGluayhzY29wZSwgZWxlbWVudCwgYXR0cikgeworICAgICAgICB2YXIgaW50ZXJw
b2xhdGVGbiA9ICRpbnRlcnBvbGF0ZShlbGVtZW50LmF0dHIoYXR0ci4kYXR0ci5uZ0JpbmRUZW1w
bGF0ZSkpOworICAgICAgICAkY29tcGlsZS4kJGFkZEJpbmRpbmdJbmZvKGVsZW1lbnQsIGludGVy
cG9sYXRlRm4uZXhwcmVzc2lvbnMpOworICAgICAgICBlbGVtZW50ID0gZWxlbWVudFswXTsKKyAg
ICAgICAgYXR0ci4kb2JzZXJ2ZSgnbmdCaW5kVGVtcGxhdGUnLCBmdW5jdGlvbih2YWx1ZSkgewor
ICAgICAgICAgIGVsZW1lbnQudGV4dENvbnRlbnQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gJycg
OiB2YWx1ZTsKKyAgICAgICAgfSk7CisgICAgICB9OworICAgIH0KKyAgfTsKK31dOworCisKKy8q
KgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgbmdCaW5kSHRtbAorICoKKyAqIEBkZXNj
cmlwdGlvbgorICogRXZhbHVhdGVzIHRoZSBleHByZXNzaW9uIGFuZCBpbnNlcnRzIHRoZSByZXN1
bHRpbmcgSFRNTCBpbnRvIHRoZSBlbGVtZW50IGluIGEgc2VjdXJlIHdheS4gQnkgZGVmYXVsdCwK
KyAqIHRoZSByZXN1bHRpbmcgSFRNTCBjb250ZW50IHdpbGwgYmUgc2FuaXRpemVkIHVzaW5nIHRo
ZSB7QGxpbmsgbmdTYW5pdGl6ZS4kc2FuaXRpemUgJHNhbml0aXplfSBzZXJ2aWNlLgorICogVG8g
dXRpbGl6ZSB0aGlzIGZ1bmN0aW9uYWxpdHksIGVuc3VyZSB0aGF0IGAkc2FuaXRpemVgIGlzIGF2
YWlsYWJsZSwgZm9yIGV4YW1wbGUsIGJ5IGluY2x1ZGluZyB7QGxpbmsKKyAqIG5nU2FuaXRpemV9
IGluIHlvdXIgbW9kdWxlJ3MgZGVwZW5kZW5jaWVzIChub3QgaW4gY29yZSBBbmd1bGFyKS4gSW4g
b3JkZXIgdG8gdXNlIHtAbGluayBuZ1Nhbml0aXplfQorICogaW4geW91ciBtb2R1bGUncyBkZXBl
bmRlbmNpZXMsIHlvdSBuZWVkIHRvIGluY2x1ZGUgImFuZ3VsYXItc2FuaXRpemUuanMiIGluIHlv
dXIgYXBwbGljYXRpb24uCisgKgorICogWW91IG1heSBhbHNvIGJ5cGFzcyBzYW5pdGl6YXRpb24g
Zm9yIHZhbHVlcyB5b3Uga25vdyBhcmUgc2FmZS4gVG8gZG8gc28sIGJpbmQgdG8KKyAqIGFuIGV4
cGxpY2l0bHkgdHJ1c3RlZCB2YWx1ZSB2aWEge0BsaW5rIG5nLiRzY2UjdHJ1c3RBc0h0bWwgJHNj
ZS50cnVzdEFzSHRtbH0uICBTZWUgdGhlIGV4YW1wbGUKKyAqIHVuZGVyIHtAbGluayBuZy4kc2Nl
I3Nob3ctbWUtYW4tZXhhbXBsZS11c2luZy1zY2UtIFN0cmljdCBDb250ZXh0dWFsIEVzY2FwaW5n
IChTQ0UpfS4KKyAqCisgKiBOb3RlOiBJZiBhIGAkc2FuaXRpemVgIHNlcnZpY2UgaXMgdW5hdmFp
bGFibGUgYW5kIHRoZSBib3VuZCB2YWx1ZSBpc24ndCBleHBsaWNpdGx5IHRydXN0ZWQsIHlvdQor
ICogd2lsbCBoYXZlIGFuIGV4Y2VwdGlvbiAoaW5zdGVhZCBvZiBhbiBleHBsb2l0LikKKyAqCisg
KiBAZWxlbWVudCBBTlkKKyAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdCaW5kSHRtbCB7QGxpbmsg
Z3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsdWF0ZS4KKyAqCisgKiBAZXhhbXBs
ZQorCisgICA8ZXhhbXBsZSBtb2R1bGU9ImJpbmRIdG1sRXhhbXBsZSIgZGVwcz0iYW5ndWxhci1z
YW5pdGl6ZS5qcyI+CisgICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICAgIDxkaXYg
bmctY29udHJvbGxlcj0iRXhhbXBsZUNvbnRyb2xsZXIiPgorICAgICAgICA8cCBuZy1iaW5kLWh0
bWw9Im15SFRNTCI+PC9wPgorICAgICAgIDwvZGl2PgorICAgICA8L2ZpbGU+CisKKyAgICAgPGZp
bGUgbmFtZT0ic2NyaXB0LmpzIj4KKyAgICAgICBhbmd1bGFyLm1vZHVsZSgnYmluZEh0bWxFeGFt
cGxlJywgWyduZ1Nhbml0aXplJ10pCisgICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRy
b2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkgeworICAgICAgICAgICAkc2NvcGUu
bXlIVE1MID0KKyAgICAgICAgICAgICAgJ0kgYW0gYW4gPGNvZGU+SFRNTDwvY29kZT5zdHJpbmcg
d2l0aCAnICsKKyAgICAgICAgICAgICAgJzxhIGhyZWY9IiMiPmxpbmtzITwvYT4gYW5kIG90aGVy
IDxlbT5zdHVmZjwvZW0+JzsKKyAgICAgICAgIH1dKTsKKyAgICAgPC9maWxlPgorCisgICAgIDxm
aWxlIG5hbWU9InByb3RyYWN0b3IuanMiIHR5cGU9InByb3RyYWN0b3IiPgorICAgICAgIGl0KCdz
aG91bGQgY2hlY2sgbmctYmluZC1odG1sJywgZnVuY3Rpb24oKSB7CisgICAgICAgICBleHBlY3Qo
ZWxlbWVudChieS5iaW5kaW5nKCdteUhUTUwnKSkuZ2V0VGV4dCgpKS50b0JlKAorICAgICAgICAg
ICAgICdJIGFtIGFuIEhUTUxzdHJpbmcgd2l0aCBsaW5rcyEgYW5kIG90aGVyIHN0dWZmJyk7Cisg
ICAgICAgfSk7CisgICAgIDwvZmlsZT4KKyAgIDwvZXhhbXBsZT4KKyAqLwordmFyIG5nQmluZEh0
bWxEaXJlY3RpdmUgPSBbJyRzY2UnLCAnJHBhcnNlJywgJyRjb21waWxlJywgZnVuY3Rpb24oJHNj
ZSwgJHBhcnNlLCAkY29tcGlsZSkgeworICByZXR1cm4geworICAgIHJlc3RyaWN0OiAnQScsCisg
ICAgY29tcGlsZTogZnVuY3Rpb24gbmdCaW5kSHRtbENvbXBpbGUodEVsZW1lbnQsIHRBdHRycykg
eworICAgICAgdmFyIG5nQmluZEh0bWxHZXR0ZXIgPSAkcGFyc2UodEF0dHJzLm5nQmluZEh0bWwp
OworICAgICAgdmFyIG5nQmluZEh0bWxXYXRjaCA9ICRwYXJzZSh0QXR0cnMubmdCaW5kSHRtbCwg
ZnVuY3Rpb24gZ2V0U3RyaW5nVmFsdWUodmFsdWUpIHsKKyAgICAgICAgcmV0dXJuICh2YWx1ZSB8
fCAnJykudG9TdHJpbmcoKTsKKyAgICAgIH0pOworICAgICAgJGNvbXBpbGUuJCRhZGRCaW5kaW5n
Q2xhc3ModEVsZW1lbnQpOworCisgICAgICByZXR1cm4gZnVuY3Rpb24gbmdCaW5kSHRtbExpbmso
c2NvcGUsIGVsZW1lbnQsIGF0dHIpIHsKKyAgICAgICAgJGNvbXBpbGUuJCRhZGRCaW5kaW5nSW5m
byhlbGVtZW50LCBhdHRyLm5nQmluZEh0bWwpOworCisgICAgICAgIHNjb3BlLiR3YXRjaChuZ0Jp
bmRIdG1sV2F0Y2gsIGZ1bmN0aW9uIG5nQmluZEh0bWxXYXRjaEFjdGlvbigpIHsKKyAgICAgICAg
ICAvLyB3ZSByZS1ldmFsdWF0ZSB0aGUgZXhwciBiZWNhdXNlIHdlIHdhbnQgYSBUcnVzdGVkVmFs
dWVIb2xkZXJUeXBlCisgICAgICAgICAgLy8gZm9yICRzY2UsIG5vdCBhIHN0cmluZworICAgICAg
ICAgIGVsZW1lbnQuaHRtbCgkc2NlLmdldFRydXN0ZWRIdG1sKG5nQmluZEh0bWxHZXR0ZXIoc2Nv
cGUpKSB8fCAnJyk7CisgICAgICAgIH0pOworICAgICAgfTsKKyAgICB9CisgIH07Cit9XTsKKwor
LyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBuZ0NoYW5nZQorICoKKyAqIEBkZXNj
cmlwdGlvbgorICogRXZhbHVhdGUgdGhlIGdpdmVuIGV4cHJlc3Npb24gd2hlbiB0aGUgdXNlciBj
aGFuZ2VzIHRoZSBpbnB1dC4KKyAqIFRoZSBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBpbW1lZGlh
dGVseSwgdW5saWtlIHRoZSBKYXZhU2NyaXB0IG9uY2hhbmdlIGV2ZW50CisgKiB3aGljaCBvbmx5
IHRyaWdnZXJzIGF0IHRoZSBlbmQgb2YgYSBjaGFuZ2UgKHVzdWFsbHksIHdoZW4gdGhlIHVzZXIg
bGVhdmVzIHRoZQorICogZm9ybSBlbGVtZW50IG9yIHByZXNzZXMgdGhlIHJldHVybiBrZXkpLgor
ICoKKyAqIFRoZSBgbmdDaGFuZ2VgIGV4cHJlc3Npb24gaXMgb25seSBldmFsdWF0ZWQgd2hlbiBh
IGNoYW5nZSBpbiB0aGUgaW5wdXQgdmFsdWUgY2F1c2VzCisgKiBhIG5ldyB2YWx1ZSB0byBiZSBj
b21taXR0ZWQgdG8gdGhlIG1vZGVsLgorICoKKyAqIEl0IHdpbGwgbm90IGJlIGV2YWx1YXRlZDoK
KyAqICogaWYgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gdGhlIGAkcGFyc2Vyc2AgdHJhbnNmb3Jt
YXRpb24gcGlwZWxpbmUgaGFzIG5vdCBjaGFuZ2VkCisgKiAqIGlmIHRoZSBpbnB1dCBoYXMgY29u
dGludWVkIHRvIGJlIGludmFsaWQgc2luY2UgdGhlIG1vZGVsIHdpbGwgc3RheSBgbnVsbGAKKyAq
ICogaWYgdGhlIG1vZGVsIGlzIGNoYW5nZWQgcHJvZ3JhbW1hdGljYWxseSBhbmQgbm90IGJ5IGEg
Y2hhbmdlIHRvIHRoZSBpbnB1dCB2YWx1ZQorICoKKyAqCisgKiBOb3RlLCB0aGlzIGRpcmVjdGl2
ZSByZXF1aXJlcyBgbmdNb2RlbGAgdG8gYmUgcHJlc2VudC4KKyAqCisgKiBAZWxlbWVudCBpbnB1
dAorICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ0NoYW5nZSB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lv
biBFeHByZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9uIGNoYW5nZQorICogaW4gaW5wdXQgdmFsdWUu
CisgKgorICogQGV4YW1wbGUKKyAqIDxleGFtcGxlIG5hbWU9Im5nQ2hhbmdlLWRpcmVjdGl2ZSIg
bW9kdWxlPSJjaGFuZ2VFeGFtcGxlIj4KKyAqICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+Cisg
KiAgICAgPHNjcmlwdD4KKyAqICAgICAgIGFuZ3VsYXIubW9kdWxlKCdjaGFuZ2VFeGFtcGxlJywg
W10pCisgKiAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3Bl
JywgZnVuY3Rpb24oJHNjb3BlKSB7CisgKiAgICAgICAgICAgJHNjb3BlLmNvdW50ZXIgPSAwOwor
ICogICAgICAgICAgICRzY29wZS5jaGFuZ2UgPSBmdW5jdGlvbigpIHsKKyAqICAgICAgICAgICAg
ICRzY29wZS5jb3VudGVyKys7CisgKiAgICAgICAgICAgfTsKKyAqICAgICAgICAgfV0pOworICog
ICAgIDwvc2NyaXB0PgorICogICAgIDxkaXYgbmctY29udHJvbGxlcj0iRXhhbXBsZUNvbnRyb2xs
ZXIiPgorICogICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuZy1tb2RlbD0iY29uZmlybWVk
IiBuZy1jaGFuZ2U9ImNoYW5nZSgpIiBpZD0ibmctY2hhbmdlLWV4YW1wbGUxIiAvPgorICogICAg
ICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuZy1tb2RlbD0iY29uZmlybWVkIiBpZD0ibmctY2hh
bmdlLWV4YW1wbGUyIiAvPgorICogICAgICAgPGxhYmVsIGZvcj0ibmctY2hhbmdlLWV4YW1wbGUy
Ij5Db25maXJtZWQ8L2xhYmVsPjxiciAvPgorICogICAgICAgPHR0PmRlYnVnID0ge3tjb25maXJt
ZWR9fTwvdHQ+PGJyLz4KKyAqICAgICAgIDx0dD5jb3VudGVyID0ge3tjb3VudGVyfX08L3R0Pjxi
ci8+CisgKiAgICAgPC9kaXY+CisgKiAgIDwvZmlsZT4KKyAqICAgPGZpbGUgbmFtZT0icHJvdHJh
Y3Rvci5qcyIgdHlwZT0icHJvdHJhY3RvciI+CisgKiAgICAgdmFyIGNvdW50ZXIgPSBlbGVtZW50
KGJ5LmJpbmRpbmcoJ2NvdW50ZXInKSk7CisgKiAgICAgdmFyIGRlYnVnID0gZWxlbWVudChieS5i
aW5kaW5nKCdjb25maXJtZWQnKSk7CisgKgorICogICAgIGl0KCdzaG91bGQgZXZhbHVhdGUgdGhl
IGV4cHJlc3Npb24gaWYgY2hhbmdpbmcgZnJvbSB2aWV3JywgZnVuY3Rpb24oKSB7CisgKiAgICAg
ICBleHBlY3QoY291bnRlci5nZXRUZXh0KCkpLnRvQ29udGFpbignMCcpOworICoKKyAqICAgICAg
IGVsZW1lbnQoYnkuaWQoJ25nLWNoYW5nZS1leGFtcGxlMScpKS5jbGljaygpOworICoKKyAqICAg
ICAgIGV4cGVjdChjb3VudGVyLmdldFRleHQoKSkudG9Db250YWluKCcxJyk7CisgKiAgICAgICBl
eHBlY3QoZGVidWcuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ3RydWUnKTsKKyAqICAgICB9KTsKKyAq
CisgKiAgICAgaXQoJ3Nob3VsZCBub3QgZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gaWYgY2hhbmdp
bmcgZnJvbSBtb2RlbCcsIGZ1bmN0aW9uKCkgeworICogICAgICAgZWxlbWVudChieS5pZCgnbmct
Y2hhbmdlLWV4YW1wbGUyJykpLmNsaWNrKCk7CisKKyAqICAgICAgIGV4cGVjdChjb3VudGVyLmdl
dFRleHQoKSkudG9Db250YWluKCcwJyk7CisgKiAgICAgICBleHBlY3QoZGVidWcuZ2V0VGV4dCgp
KS50b0NvbnRhaW4oJ3RydWUnKTsKKyAqICAgICB9KTsKKyAqICAgPC9maWxlPgorICogPC9leGFt
cGxlPgorICovCit2YXIgbmdDaGFuZ2VEaXJlY3RpdmUgPSB2YWx1ZUZuKHsKKyAgcmVzdHJpY3Q6
ICdBJywKKyAgcmVxdWlyZTogJ25nTW9kZWwnLAorICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxl
bWVudCwgYXR0ciwgY3RybCkgeworICAgIGN0cmwuJHZpZXdDaGFuZ2VMaXN0ZW5lcnMucHVzaChm
dW5jdGlvbigpIHsKKyAgICAgIHNjb3BlLiRldmFsKGF0dHIubmdDaGFuZ2UpOworICAgIH0pOwor
ICB9Cit9KTsKKworZnVuY3Rpb24gY2xhc3NEaXJlY3RpdmUobmFtZSwgc2VsZWN0b3IpIHsKKyAg
bmFtZSA9ICduZ0NsYXNzJyArIG5hbWU7CisgIHJldHVybiBbJyRhbmltYXRlJywgZnVuY3Rpb24o
JGFuaW1hdGUpIHsKKyAgICByZXR1cm4geworICAgICAgcmVzdHJpY3Q6ICdBQycsCisgICAgICBs
aW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cikgeworICAgICAgICB2YXIgb2xkVmFs
OworCisgICAgICAgIHNjb3BlLiR3YXRjaChhdHRyW25hbWVdLCBuZ0NsYXNzV2F0Y2hBY3Rpb24s
IHRydWUpOworCisgICAgICAgIGF0dHIuJG9ic2VydmUoJ2NsYXNzJywgZnVuY3Rpb24odmFsdWUp
IHsKKyAgICAgICAgICBuZ0NsYXNzV2F0Y2hBY3Rpb24oc2NvcGUuJGV2YWwoYXR0cltuYW1lXSkp
OworICAgICAgICB9KTsKKworCisgICAgICAgIGlmIChuYW1lICE9PSAnbmdDbGFzcycpIHsKKyAg
ICAgICAgICBzY29wZS4kd2F0Y2goJyRpbmRleCcsIGZ1bmN0aW9uKCRpbmRleCwgb2xkJGluZGV4
KSB7CisgICAgICAgICAgICAvLyBqc2hpbnQgYml0d2lzZTogZmFsc2UKKyAgICAgICAgICAgIHZh
ciBtb2QgPSAkaW5kZXggJiAxOworICAgICAgICAgICAgaWYgKG1vZCAhPT0gKG9sZCRpbmRleCAm
IDEpKSB7CisgICAgICAgICAgICAgIHZhciBjbGFzc2VzID0gYXJyYXlDbGFzc2VzKHNjb3BlLiRl
dmFsKGF0dHJbbmFtZV0pKTsKKyAgICAgICAgICAgICAgbW9kID09PSBzZWxlY3RvciA/CisgICAg
ICAgICAgICAgICAgYWRkQ2xhc3NlcyhjbGFzc2VzKSA6CisgICAgICAgICAgICAgICAgcmVtb3Zl
Q2xhc3NlcyhjbGFzc2VzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9KTsKKyAgICAgICAg
fQorCisgICAgICAgIGZ1bmN0aW9uIGFkZENsYXNzZXMoY2xhc3NlcykgeworICAgICAgICAgIHZh
ciBuZXdDbGFzc2VzID0gZGlnZXN0Q2xhc3NDb3VudHMoY2xhc3NlcywgMSk7CisgICAgICAgICAg
YXR0ci4kYWRkQ2xhc3MobmV3Q2xhc3Nlcyk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlv
biByZW1vdmVDbGFzc2VzKGNsYXNzZXMpIHsKKyAgICAgICAgICB2YXIgbmV3Q2xhc3NlcyA9IGRp
Z2VzdENsYXNzQ291bnRzKGNsYXNzZXMsIC0xKTsKKyAgICAgICAgICBhdHRyLiRyZW1vdmVDbGFz
cyhuZXdDbGFzc2VzKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGRpZ2VzdENsYXNz
Q291bnRzKGNsYXNzZXMsIGNvdW50KSB7CisgICAgICAgICAgLy8gVXNlIGNyZWF0ZU1hcCgpIHRv
IHByZXZlbnQgY2xhc3MgYXNzdW1wdGlvbnMgaW52b2x2aW5nIHByb3BlcnR5CisgICAgICAgICAg
Ly8gbmFtZXMgaW4gT2JqZWN0LnByb3RvdHlwZQorICAgICAgICAgIHZhciBjbGFzc0NvdW50cyA9
IGVsZW1lbnQuZGF0YSgnJGNsYXNzQ291bnRzJykgfHwgY3JlYXRlTWFwKCk7CisgICAgICAgICAg
dmFyIGNsYXNzZXNUb1VwZGF0ZSA9IFtdOworICAgICAgICAgIGZvckVhY2goY2xhc3NlcywgZnVu
Y3Rpb24oY2xhc3NOYW1lKSB7CisgICAgICAgICAgICBpZiAoY291bnQgPiAwIHx8IGNsYXNzQ291
bnRzW2NsYXNzTmFtZV0pIHsKKyAgICAgICAgICAgICAgY2xhc3NDb3VudHNbY2xhc3NOYW1lXSA9
IChjbGFzc0NvdW50c1tjbGFzc05hbWVdIHx8IDApICsgY291bnQ7CisgICAgICAgICAgICAgIGlm
IChjbGFzc0NvdW50c1tjbGFzc05hbWVdID09PSArKGNvdW50ID4gMCkpIHsKKyAgICAgICAgICAg
ICAgICBjbGFzc2VzVG9VcGRhdGUucHVzaChjbGFzc05hbWUpOworICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgfSk7CisgICAgICAgICAgZWxlbWVudC5kYXRhKCckY2xh
c3NDb3VudHMnLCBjbGFzc0NvdW50cyk7CisgICAgICAgICAgcmV0dXJuIGNsYXNzZXNUb1VwZGF0
ZS5qb2luKCcgJyk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB1cGRhdGVDbGFzc2Vz
KG9sZENsYXNzZXMsIG5ld0NsYXNzZXMpIHsKKyAgICAgICAgICB2YXIgdG9BZGQgPSBhcnJheURp
ZmZlcmVuY2UobmV3Q2xhc3Nlcywgb2xkQ2xhc3Nlcyk7CisgICAgICAgICAgdmFyIHRvUmVtb3Zl
ID0gYXJyYXlEaWZmZXJlbmNlKG9sZENsYXNzZXMsIG5ld0NsYXNzZXMpOworICAgICAgICAgIHRv
QWRkID0gZGlnZXN0Q2xhc3NDb3VudHModG9BZGQsIDEpOworICAgICAgICAgIHRvUmVtb3ZlID0g
ZGlnZXN0Q2xhc3NDb3VudHModG9SZW1vdmUsIC0xKTsKKyAgICAgICAgICBpZiAodG9BZGQgJiYg
dG9BZGQubGVuZ3RoKSB7CisgICAgICAgICAgICAkYW5pbWF0ZS5hZGRDbGFzcyhlbGVtZW50LCB0
b0FkZCk7CisgICAgICAgICAgfQorICAgICAgICAgIGlmICh0b1JlbW92ZSAmJiB0b1JlbW92ZS5s
ZW5ndGgpIHsKKyAgICAgICAgICAgICRhbmltYXRlLnJlbW92ZUNsYXNzKGVsZW1lbnQsIHRvUmVt
b3ZlKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBuZ0NsYXNz
V2F0Y2hBY3Rpb24obmV3VmFsKSB7CisgICAgICAgICAgaWYgKHNlbGVjdG9yID09PSB0cnVlIHx8
IHNjb3BlLiRpbmRleCAlIDIgPT09IHNlbGVjdG9yKSB7CisgICAgICAgICAgICB2YXIgbmV3Q2xh
c3NlcyA9IGFycmF5Q2xhc3NlcyhuZXdWYWwgfHwgW10pOworICAgICAgICAgICAgaWYgKCFvbGRW
YWwpIHsKKyAgICAgICAgICAgICAgYWRkQ2xhc3NlcyhuZXdDbGFzc2VzKTsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoIWVxdWFscyhuZXdWYWwsb2xkVmFsKSkgeworICAgICAgICAgICAgICB2YXIg
b2xkQ2xhc3NlcyA9IGFycmF5Q2xhc3NlcyhvbGRWYWwpOworICAgICAgICAgICAgICB1cGRhdGVD
bGFzc2VzKG9sZENsYXNzZXMsIG5ld0NsYXNzZXMpOworICAgICAgICAgICAgfQorICAgICAgICAg
IH0KKyAgICAgICAgICBvbGRWYWwgPSBzaGFsbG93Q29weShuZXdWYWwpOworICAgICAgICB9Cisg
ICAgICB9CisgICAgfTsKKworICAgIGZ1bmN0aW9uIGFycmF5RGlmZmVyZW5jZSh0b2tlbnMxLCB0
b2tlbnMyKSB7CisgICAgICB2YXIgdmFsdWVzID0gW107CisKKyAgICAgIG91dGVyOgorICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMxLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZhciB0
b2tlbiA9IHRva2VuczFbaV07CisgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdG9rZW5zMi5s
ZW5ndGg7IGorKykgeworICAgICAgICAgIGlmICh0b2tlbiA9PSB0b2tlbnMyW2pdKSBjb250aW51
ZSBvdXRlcjsKKyAgICAgICAgfQorICAgICAgICB2YWx1ZXMucHVzaCh0b2tlbik7CisgICAgICB9
CisgICAgICByZXR1cm4gdmFsdWVzOworICAgIH0KKworICAgIGZ1bmN0aW9uIGFycmF5Q2xhc3Nl
cyhjbGFzc1ZhbCkgeworICAgICAgdmFyIGNsYXNzZXMgPSBbXTsKKyAgICAgIGlmIChpc0FycmF5
KGNsYXNzVmFsKSkgeworICAgICAgICBmb3JFYWNoKGNsYXNzVmFsLCBmdW5jdGlvbih2KSB7Cisg
ICAgICAgICAgY2xhc3NlcyA9IGNsYXNzZXMuY29uY2F0KGFycmF5Q2xhc3Nlcyh2KSk7CisgICAg
ICAgIH0pOworICAgICAgICByZXR1cm4gY2xhc3NlczsKKyAgICAgIH0gZWxzZSBpZiAoaXNTdHJp
bmcoY2xhc3NWYWwpKSB7CisgICAgICAgIHJldHVybiBjbGFzc1ZhbC5zcGxpdCgnICcpOworICAg
ICAgfSBlbHNlIGlmIChpc09iamVjdChjbGFzc1ZhbCkpIHsKKyAgICAgICAgZm9yRWFjaChjbGFz
c1ZhbCwgZnVuY3Rpb24odiwgaykgeworICAgICAgICAgIGlmICh2KSB7CisgICAgICAgICAgICBj
bGFzc2VzID0gY2xhc3Nlcy5jb25jYXQoay5zcGxpdCgnICcpKTsKKyAgICAgICAgICB9CisgICAg
ICAgIH0pOworICAgICAgICByZXR1cm4gY2xhc3NlczsKKyAgICAgIH0KKyAgICAgIHJldHVybiBj
bGFzc1ZhbDsKKyAgICB9CisgIH1dOworfQorCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAq
IEBuYW1lIG5nQ2xhc3MKKyAqIEByZXN0cmljdCBBQworICoKKyAqIEBkZXNjcmlwdGlvbgorICog
VGhlIGBuZ0NsYXNzYCBkaXJlY3RpdmUgYWxsb3dzIHlvdSB0byBkeW5hbWljYWxseSBzZXQgQ1NT
IGNsYXNzZXMgb24gYW4gSFRNTCBlbGVtZW50IGJ5IGRhdGFiaW5kaW5nCisgKiBhbiBleHByZXNz
aW9uIHRoYXQgcmVwcmVzZW50cyBhbGwgY2xhc3NlcyB0byBiZSBhZGRlZC4KKyAqCisgKiBUaGUg
ZGlyZWN0aXZlIG9wZXJhdGVzIGluIHRocmVlIGRpZmZlcmVudCB3YXlzLCBkZXBlbmRpbmcgb24g
d2hpY2ggb2YgdGhyZWUgdHlwZXMgdGhlIGV4cHJlc3Npb24KKyAqIGV2YWx1YXRlcyB0bzoKKyAq
CisgKiAxLiBJZiB0aGUgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gYSBzdHJpbmcsIHRoZSBzdHJp
bmcgc2hvdWxkIGJlIG9uZSBvciBtb3JlIHNwYWNlLWRlbGltaXRlZCBjbGFzcworICogbmFtZXMu
CisgKgorICogMi4gSWYgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGFuIG9iamVjdCwgdGhl
biBmb3IgZWFjaCBrZXktdmFsdWUgcGFpciBvZiB0aGUKKyAqIG9iamVjdCB3aXRoIGEgdHJ1dGh5
IHZhbHVlIHRoZSBjb3JyZXNwb25kaW5nIGtleSBpcyB1c2VkIGFzIGEgY2xhc3MgbmFtZS4KKyAq
CisgKiAzLiBJZiB0aGUgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gYW4gYXJyYXksIGVhY2ggZWxl
bWVudCBvZiB0aGUgYXJyYXkgc2hvdWxkIGVpdGhlciBiZSBhIHN0cmluZyBhcyBpbgorICogdHlw
ZSAxIG9yIGFuIG9iamVjdCBhcyBpbiB0eXBlIDIuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIG1p
eCBzdHJpbmdzIGFuZCBvYmplY3RzIHRvZ2V0aGVyIGluIGFuIGFycmF5CisgKiB0byBnaXZlIHlv
dSBtb3JlIGNvbnRyb2wgb3ZlciB3aGF0IENTUyBjbGFzc2VzIGFwcGVhci4gU2VlIHRoZSBjb2Rl
IGJlbG93IGZvciBhbiBleGFtcGxlIG9mIHRoaXMuCisgKgorICoKKyAqIFRoZSBkaXJlY3RpdmUg
d29uJ3QgYWRkIGR1cGxpY2F0ZSBjbGFzc2VzIGlmIGEgcGFydGljdWxhciBjbGFzcyB3YXMgYWxy
ZWFkeSBzZXQuCisgKgorICogV2hlbiB0aGUgZXhwcmVzc2lvbiBjaGFuZ2VzLCB0aGUgcHJldmlv
dXNseSBhZGRlZCBjbGFzc2VzIGFyZSByZW1vdmVkIGFuZCBvbmx5IHRoZW4gYXJlIHRoZQorICog
bmV3IGNsYXNzZXMgYWRkZWQuCisgKgorICogQGFuaW1hdGlvbnMKKyAqICoqYWRkKiogLSBoYXBw
ZW5zIGp1c3QgYmVmb3JlIHRoZSBjbGFzcyBpcyBhcHBsaWVkIHRvIHRoZSBlbGVtZW50cworICoK
KyAqICoqcmVtb3ZlKiogLSBoYXBwZW5zIGp1c3QgYmVmb3JlIHRoZSBjbGFzcyBpcyByZW1vdmVk
IGZyb20gdGhlIGVsZW1lbnQKKyAqCisgKiBAZWxlbWVudCBBTlkKKyAqIEBwYXJhbSB7ZXhwcmVz
c2lvbn0gbmdDbGFzcyB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFs
LiBUaGUgcmVzdWx0CisgKiAgIG9mIHRoZSBldmFsdWF0aW9uIGNhbiBiZSBhIHN0cmluZyByZXBy
ZXNlbnRpbmcgc3BhY2UgZGVsaW1pdGVkIGNsYXNzCisgKiAgIG5hbWVzLCBhbiBhcnJheSwgb3Ig
YSBtYXAgb2YgY2xhc3MgbmFtZXMgdG8gYm9vbGVhbiB2YWx1ZXMuIEluIHRoZSBjYXNlIG9mIGEg
bWFwLCB0aGUKKyAqICAgbmFtZXMgb2YgdGhlIHByb3BlcnRpZXMgd2hvc2UgdmFsdWVzIGFyZSB0
cnV0aHkgd2lsbCBiZSBhZGRlZCBhcyBjc3MgY2xhc3NlcyB0byB0aGUKKyAqICAgZWxlbWVudC4K
KyAqCisgKiBAZXhhbXBsZSBFeGFtcGxlIHRoYXQgZGVtb25zdHJhdGVzIGJhc2ljIGJpbmRpbmdz
IHZpYSBuZ0NsYXNzIGRpcmVjdGl2ZS4KKyAgIDxleGFtcGxlPgorICAgICA8ZmlsZSBuYW1lPSJp
bmRleC5odG1sIj4KKyAgICAgICA8cCBuZy1jbGFzcz0ie3N0cmlrZTogZGVsZXRlZCwgYm9sZDog
aW1wb3J0YW50LCAnaGFzLWVycm9yJzogZXJyb3J9Ij5NYXAgU3ludGF4IEV4YW1wbGU8L3A+Cisg
ICAgICAgPGxhYmVsPgorICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmctbW9kZWw9
ImRlbGV0ZWQiPgorICAgICAgICAgIGRlbGV0ZWQgKGFwcGx5ICJzdHJpa2UiIGNsYXNzKQorICAg
ICAgIDwvbGFiZWw+PGJyPgorICAgICAgIDxsYWJlbD4KKyAgICAgICAgICA8aW5wdXQgdHlwZT0i
Y2hlY2tib3giIG5nLW1vZGVsPSJpbXBvcnRhbnQiPgorICAgICAgICAgIGltcG9ydGFudCAoYXBw
bHkgImJvbGQiIGNsYXNzKQorICAgICAgIDwvbGFiZWw+PGJyPgorICAgICAgIDxsYWJlbD4KKyAg
ICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5nLW1vZGVsPSJlcnJvciI+CisgICAgICAg
ICAgZXJyb3IgKGFwcGx5ICJoYXMtZXJyb3IiIGNsYXNzKQorICAgICAgIDwvbGFiZWw+CisgICAg
ICAgPGhyPgorICAgICAgIDxwIG5nLWNsYXNzPSJzdHlsZSI+VXNpbmcgU3RyaW5nIFN5bnRheDwv
cD4KKyAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmctbW9kZWw9InN0eWxlIgorICAgICAgICAg
ICAgICBwbGFjZWhvbGRlcj0iVHlwZTogYm9sZCBzdHJpa2UgcmVkIiBhcmlhLWxhYmVsPSJUeXBl
OiBib2xkIHN0cmlrZSByZWQiPgorICAgICAgIDxocj4KKyAgICAgICA8cCBuZy1jbGFzcz0iW3N0
eWxlMSwgc3R5bGUyLCBzdHlsZTNdIj5Vc2luZyBBcnJheSBTeW50YXg8L3A+CisgICAgICAgPGlu
cHV0IG5nLW1vZGVsPSJzdHlsZTEiCisgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJUeXBlOiBi
b2xkLCBzdHJpa2Ugb3IgcmVkIiBhcmlhLWxhYmVsPSJUeXBlOiBib2xkLCBzdHJpa2Ugb3IgcmVk
Ij48YnI+CisgICAgICAgPGlucHV0IG5nLW1vZGVsPSJzdHlsZTIiCisgICAgICAgICAgICAgIHBs
YWNlaG9sZGVyPSJUeXBlOiBib2xkLCBzdHJpa2Ugb3IgcmVkIiBhcmlhLWxhYmVsPSJUeXBlOiBi
b2xkLCBzdHJpa2Ugb3IgcmVkIDIiPjxicj4KKyAgICAgICA8aW5wdXQgbmctbW9kZWw9InN0eWxl
MyIKKyAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IlR5cGU6IGJvbGQsIHN0cmlrZSBvciByZWQi
IGFyaWEtbGFiZWw9IlR5cGU6IGJvbGQsIHN0cmlrZSBvciByZWQgMyI+PGJyPgorICAgICAgIDxo
cj4KKyAgICAgICA8cCBuZy1jbGFzcz0iW3N0eWxlNCwge29yYW5nZTogd2FybmluZ31dIj5Vc2lu
ZyBBcnJheSBhbmQgTWFwIFN5bnRheDwvcD4KKyAgICAgICA8aW5wdXQgbmctbW9kZWw9InN0eWxl
NCIgcGxhY2Vob2xkZXI9IlR5cGU6IGJvbGQsIHN0cmlrZSIgYXJpYS1sYWJlbD0iVHlwZTogYm9s
ZCwgc3RyaWtlIj48YnI+CisgICAgICAgPGxhYmVsPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmct
bW9kZWw9Indhcm5pbmciPiB3YXJuaW5nIChhcHBseSAib3JhbmdlIiBjbGFzcyk8L2xhYmVsPgor
ICAgICA8L2ZpbGU+CisgICAgIDxmaWxlIG5hbWU9InN0eWxlLmNzcyI+CisgICAgICAgLnN0cmlr
ZSB7CisgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOworICAgICAgIH0K
KyAgICAgICAuYm9sZCB7CisgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgICAgIH0K
KyAgICAgICAucmVkIHsKKyAgICAgICAgICAgY29sb3I6IHJlZDsKKyAgICAgICB9CisgICAgICAg
Lmhhcy1lcnJvciB7CisgICAgICAgICAgIGNvbG9yOiByZWQ7CisgICAgICAgICAgIGJhY2tncm91
bmQtY29sb3I6IHllbGxvdzsKKyAgICAgICB9CisgICAgICAgLm9yYW5nZSB7CisgICAgICAgICAg
IGNvbG9yOiBvcmFuZ2U7CisgICAgICAgfQorICAgICA8L2ZpbGU+CisgICAgIDxmaWxlIG5hbWU9
InByb3RyYWN0b3IuanMiIHR5cGU9InByb3RyYWN0b3IiPgorICAgICAgIHZhciBwcyA9IGVsZW1l
bnQuYWxsKGJ5LmNzcygncCcpKTsKKworICAgICAgIGl0KCdzaG91bGQgbGV0IHlvdSB0b2dnbGUg
dGhlIGNsYXNzJywgZnVuY3Rpb24oKSB7CisKKyAgICAgICAgIGV4cGVjdChwcy5maXJzdCgpLmdl
dEF0dHJpYnV0ZSgnY2xhc3MnKSkubm90LnRvTWF0Y2goL2JvbGQvKTsKKyAgICAgICAgIGV4cGVj
dChwcy5maXJzdCgpLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSkubm90LnRvTWF0Y2goL2hhcy1lcnJv
ci8pOworCisgICAgICAgICBlbGVtZW50KGJ5Lm1vZGVsKCdpbXBvcnRhbnQnKSkuY2xpY2soKTsK
KyAgICAgICAgIGV4cGVjdChwcy5maXJzdCgpLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSkudG9NYXRj
aCgvYm9sZC8pOworCisgICAgICAgICBlbGVtZW50KGJ5Lm1vZGVsKCdlcnJvcicpKS5jbGljaygp
OworICAgICAgICAgZXhwZWN0KHBzLmZpcnN0KCkuZ2V0QXR0cmlidXRlKCdjbGFzcycpKS50b01h
dGNoKC9oYXMtZXJyb3IvKTsKKyAgICAgICB9KTsKKworICAgICAgIGl0KCdzaG91bGQgbGV0IHlv
dSB0b2dnbGUgc3RyaW5nIGV4YW1wbGUnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgIGV4cGVjdChw
cy5nZXQoMSkuZ2V0QXR0cmlidXRlKCdjbGFzcycpKS50b0JlKCcnKTsKKyAgICAgICAgIGVsZW1l
bnQoYnkubW9kZWwoJ3N0eWxlJykpLmNsZWFyKCk7CisgICAgICAgICBlbGVtZW50KGJ5Lm1vZGVs
KCdzdHlsZScpKS5zZW5kS2V5cygncmVkJyk7CisgICAgICAgICBleHBlY3QocHMuZ2V0KDEpLmdl
dEF0dHJpYnV0ZSgnY2xhc3MnKSkudG9CZSgncmVkJyk7CisgICAgICAgfSk7CisKKyAgICAgICBp
dCgnYXJyYXkgZXhhbXBsZSBzaG91bGQgaGF2ZSAzIGNsYXNzZXMnLCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgIGV4cGVjdChwcy5nZXQoMikuZ2V0QXR0cmlidXRlKCdjbGFzcycpKS50b0JlKCcnKTsK
KyAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ3N0eWxlMScpKS5zZW5kS2V5cygnYm9sZCcpOwor
ICAgICAgICAgZWxlbWVudChieS5tb2RlbCgnc3R5bGUyJykpLnNlbmRLZXlzKCdzdHJpa2UnKTsK
KyAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ3N0eWxlMycpKS5zZW5kS2V5cygncmVkJyk7Cisg
ICAgICAgICBleHBlY3QocHMuZ2V0KDIpLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSkudG9CZSgnYm9s
ZCBzdHJpa2UgcmVkJyk7CisgICAgICAgfSk7CisKKyAgICAgICBpdCgnYXJyYXkgd2l0aCBtYXAg
ZXhhbXBsZSBzaG91bGQgaGF2ZSAyIGNsYXNzZXMnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgIGV4
cGVjdChwcy5sYXN0KCkuZ2V0QXR0cmlidXRlKCdjbGFzcycpKS50b0JlKCcnKTsKKyAgICAgICAg
IGVsZW1lbnQoYnkubW9kZWwoJ3N0eWxlNCcpKS5zZW5kS2V5cygnYm9sZCcpOworICAgICAgICAg
ZWxlbWVudChieS5tb2RlbCgnd2FybmluZycpKS5jbGljaygpOworICAgICAgICAgZXhwZWN0KHBz
Lmxhc3QoKS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykpLnRvQmUoJ2JvbGQgb3JhbmdlJyk7CisgICAg
ICAgfSk7CisgICAgIDwvZmlsZT4KKyAgIDwvZXhhbXBsZT4KKworICAgIyMgQW5pbWF0aW9ucwor
CisgICBUaGUgZXhhbXBsZSBiZWxvdyBkZW1vbnN0cmF0ZXMgaG93IHRvIHBlcmZvcm0gYW5pbWF0
aW9ucyB1c2luZyBuZ0NsYXNzLgorCisgICA8ZXhhbXBsZSBtb2R1bGU9Im5nQW5pbWF0ZSIgZGVw
cz0iYW5ndWxhci1hbmltYXRlLmpzIiBhbmltYXRpb25zPSJ0cnVlIj4KKyAgICAgPGZpbGUgbmFt
ZT0iaW5kZXguaHRtbCI+CisgICAgICA8aW5wdXQgaWQ9InNldGJ0biIgdHlwZT0iYnV0dG9uIiB2
YWx1ZT0ic2V0IiBuZy1jbGljaz0ibXlWYXI9J215LWNsYXNzJyI+CisgICAgICA8aW5wdXQgaWQ9
ImNsZWFyYnRuIiB0eXBlPSJidXR0b24iIHZhbHVlPSJjbGVhciIgbmctY2xpY2s9Im15VmFyPScn
Ij4KKyAgICAgIDxicj4KKyAgICAgIDxzcGFuIGNsYXNzPSJiYXNlLWNsYXNzIiBuZy1jbGFzcz0i
bXlWYXIiPlNhbXBsZSBUZXh0PC9zcGFuPgorICAgICA8L2ZpbGU+CisgICAgIDxmaWxlIG5hbWU9
InN0eWxlLmNzcyI+CisgICAgICAgLmJhc2UtY2xhc3MgeworICAgICAgICAgLXdlYmtpdC10cmFu
c2l0aW9uOmFsbCBjdWJpYy1iZXppZXIoMC4yNTAsIDAuNDYwLCAwLjQ1MCwgMC45NDApIDAuNXM7
CisgICAgICAgICB0cmFuc2l0aW9uOmFsbCBjdWJpYy1iZXppZXIoMC4yNTAsIDAuNDYwLCAwLjQ1
MCwgMC45NDApIDAuNXM7CisgICAgICAgfQorCisgICAgICAgLmJhc2UtY2xhc3MubXktY2xhc3Mg
eworICAgICAgICAgY29sb3I6IHJlZDsKKyAgICAgICAgIGZvbnQtc2l6ZTozZW07CisgICAgICAg
fQorICAgICA8L2ZpbGU+CisgICAgIDxmaWxlIG5hbWU9InByb3RyYWN0b3IuanMiIHR5cGU9InBy
b3RyYWN0b3IiPgorICAgICAgIGl0KCdzaG91bGQgY2hlY2sgbmctY2xhc3MnLCBmdW5jdGlvbigp
IHsKKyAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmNzcygnLmJhc2UtY2xhc3MnKSkuZ2V0QXR0
cmlidXRlKCdjbGFzcycpKS5ub3QuCisgICAgICAgICAgIHRvTWF0Y2goL215LWNsYXNzLyk7CisK
KyAgICAgICAgIGVsZW1lbnQoYnkuaWQoJ3NldGJ0bicpKS5jbGljaygpOworCisgICAgICAgICBl
eHBlY3QoZWxlbWVudChieS5jc3MoJy5iYXNlLWNsYXNzJykpLmdldEF0dHJpYnV0ZSgnY2xhc3Mn
KSkuCisgICAgICAgICAgIHRvTWF0Y2goL215LWNsYXNzLyk7CisKKyAgICAgICAgIGVsZW1lbnQo
YnkuaWQoJ2NsZWFyYnRuJykpLmNsaWNrKCk7CisKKyAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5
LmNzcygnLmJhc2UtY2xhc3MnKSkuZ2V0QXR0cmlidXRlKCdjbGFzcycpKS5ub3QuCisgICAgICAg
ICAgIHRvTWF0Y2goL215LWNsYXNzLyk7CisgICAgICAgfSk7CisgICAgIDwvZmlsZT4KKyAgIDwv
ZXhhbXBsZT4KKworCisgICAjIyBuZ0NsYXNzIGFuZCBwcmUtZXhpc3RpbmcgQ1NTMyBUcmFuc2l0
aW9ucy9BbmltYXRpb25zCisgICBUaGUgbmdDbGFzcyBkaXJlY3RpdmUgc3RpbGwgc3VwcG9ydHMg
Q1NTMyBUcmFuc2l0aW9ucy9BbmltYXRpb25zIGV2ZW4gaWYgdGhleSBkbyBub3QgZm9sbG93IHRo
ZSBuZ0FuaW1hdGUgQ1NTIG5hbWluZyBzdHJ1Y3R1cmUuCisgICBVcG9uIGFuaW1hdGlvbiBuZ0Fu
aW1hdGUgd2lsbCBhcHBseSBzdXBwbGVtZW50YXJ5IENTUyBjbGFzc2VzIHRvIHRyYWNrIHRoZSBz
dGFydCBhbmQgZW5kIG9mIGFuIGFuaW1hdGlvbiwgYnV0IHRoaXMgd2lsbCBub3QgaGluZGVyCisg
ICBhbnkgcHJlLWV4aXN0aW5nIENTUyB0cmFuc2l0aW9ucyBhbHJlYWR5IG9uIHRoZSBlbGVtZW50
LiBUbyBnZXQgYW4gaWRlYSBvZiB3aGF0IGhhcHBlbnMgZHVyaW5nIGEgY2xhc3MtYmFzZWQgYW5p
bWF0aW9uLCBiZSBzdXJlCisgICB0byB2aWV3IHRoZSBzdGVwIGJ5IHN0ZXAgZGV0YWlscyBvZiB7
QGxpbmsgJGFuaW1hdGUjYWRkQ2xhc3MgJGFuaW1hdGUuYWRkQ2xhc3N9IGFuZAorICAge0BsaW5r
ICRhbmltYXRlI3JlbW92ZUNsYXNzICRhbmltYXRlLnJlbW92ZUNsYXNzfS4KKyAqLwordmFyIG5n
Q2xhc3NEaXJlY3RpdmUgPSBjbGFzc0RpcmVjdGl2ZSgnJywgdHJ1ZSk7CisKKy8qKgorICogQG5n
ZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgbmdDbGFzc09kZAorICogQHJlc3RyaWN0IEFDCisgKgor
ICogQGRlc2NyaXB0aW9uCisgKiBUaGUgYG5nQ2xhc3NPZGRgIGFuZCBgbmdDbGFzc0V2ZW5gIGRp
cmVjdGl2ZXMgd29yayBleGFjdGx5IGFzCisgKiB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nQ2xhc3Mg
bmdDbGFzc30sIGV4Y2VwdCB0aGV5IHdvcmsgaW4KKyAqIGNvbmp1bmN0aW9uIHdpdGggYG5nUmVw
ZWF0YCBhbmQgdGFrZSBlZmZlY3Qgb25seSBvbiBvZGQgKGV2ZW4pIHJvd3MuCisgKgorICogVGhp
cyBkaXJlY3RpdmUgY2FuIGJlIGFwcGxpZWQgb25seSB3aXRoaW4gdGhlIHNjb3BlIG9mIGFuCisg
KiB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nUmVwZWF0IG5nUmVwZWF0fS4KKyAqCisgKiBAZWxlbWVu
dCBBTlkKKyAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdDbGFzc09kZCB7QGxpbmsgZ3VpZGUvZXhw
cmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsLiBUaGUgcmVzdWx0CisgKiAgIG9mIHRoZSBldmFs
dWF0aW9uIGNhbiBiZSBhIHN0cmluZyByZXByZXNlbnRpbmcgc3BhY2UgZGVsaW1pdGVkIGNsYXNz
IG5hbWVzIG9yIGFuIGFycmF5LgorICoKKyAqIEBleGFtcGxlCisgICA8ZXhhbXBsZT4KKyAgICAg
PGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAgICAgIDxvbCBuZy1pbml0PSJuYW1lcz1bJ0pv
aG4nLCAnTWFyeScsICdDYXRlJywgJ1N1eiddIj4KKyAgICAgICAgICA8bGkgbmctcmVwZWF0PSJu
YW1lIGluIG5hbWVzIj4KKyAgICAgICAgICAgPHNwYW4gbmctY2xhc3Mtb2RkPSInb2RkJyIgbmct
Y2xhc3MtZXZlbj0iJ2V2ZW4nIj4KKyAgICAgICAgICAgICB7e25hbWV9fQorICAgICAgICAgICA8
L3NwYW4+CisgICAgICAgICAgPC9saT4KKyAgICAgICAgPC9vbD4KKyAgICAgPC9maWxlPgorICAg
ICA8ZmlsZSBuYW1lPSJzdHlsZS5jc3MiPgorICAgICAgIC5vZGQgeworICAgICAgICAgY29sb3I6
IHJlZDsKKyAgICAgICB9CisgICAgICAgLmV2ZW4geworICAgICAgICAgY29sb3I6IGJsdWU7Cisg
ICAgICAgfQorICAgICA8L2ZpbGU+CisgICAgIDxmaWxlIG5hbWU9InByb3RyYWN0b3IuanMiIHR5
cGU9InByb3RyYWN0b3IiPgorICAgICAgIGl0KCdzaG91bGQgY2hlY2sgbmctY2xhc3Mtb2RkIGFu
ZCBuZy1jbGFzcy1ldmVuJywgZnVuY3Rpb24oKSB7CisgICAgICAgICBleHBlY3QoZWxlbWVudChi
eS5yZXBlYXRlcignbmFtZSBpbiBuYW1lcycpLnJvdygwKS5jb2x1bW4oJ25hbWUnKSkuZ2V0QXR0
cmlidXRlKCdjbGFzcycpKS4KKyAgICAgICAgICAgdG9NYXRjaCgvb2RkLyk7CisgICAgICAgICBl
eHBlY3QoZWxlbWVudChieS5yZXBlYXRlcignbmFtZSBpbiBuYW1lcycpLnJvdygxKS5jb2x1bW4o
J25hbWUnKSkuZ2V0QXR0cmlidXRlKCdjbGFzcycpKS4KKyAgICAgICAgICAgdG9NYXRjaCgvZXZl
bi8pOworICAgICAgIH0pOworICAgICA8L2ZpbGU+CisgICA8L2V4YW1wbGU+CisgKi8KK3ZhciBu
Z0NsYXNzT2RkRGlyZWN0aXZlID0gY2xhc3NEaXJlY3RpdmUoJ09kZCcsIDApOworCisvKioKKyAq
IEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1lIG5nQ2xhc3NFdmVuCisgKiBAcmVzdHJpY3QgQUMK
KyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFRoZSBgbmdDbGFzc09kZGAgYW5kIGBuZ0NsYXNzRXZl
bmAgZGlyZWN0aXZlcyB3b3JrIGV4YWN0bHkgYXMKKyAqIHtAbGluayBuZy5kaXJlY3RpdmU6bmdD
bGFzcyBuZ0NsYXNzfSwgZXhjZXB0IHRoZXkgd29yayBpbgorICogY29uanVuY3Rpb24gd2l0aCBg
bmdSZXBlYXRgIGFuZCB0YWtlIGVmZmVjdCBvbmx5IG9uIG9kZCAoZXZlbikgcm93cy4KKyAqCisg
KiBUaGlzIGRpcmVjdGl2ZSBjYW4gYmUgYXBwbGllZCBvbmx5IHdpdGhpbiB0aGUgc2NvcGUgb2Yg
YW4KKyAqIHtAbGluayBuZy5kaXJlY3RpdmU6bmdSZXBlYXQgbmdSZXBlYXR9LgorICoKKyAqIEBl
bGVtZW50IEFOWQorICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ0NsYXNzRXZlbiB7QGxpbmsgZ3Vp
ZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsLiBUaGUKKyAqICAgcmVzdWx0IG9mIHRo
ZSBldmFsdWF0aW9uIGNhbiBiZSBhIHN0cmluZyByZXByZXNlbnRpbmcgc3BhY2UgZGVsaW1pdGVk
IGNsYXNzIG5hbWVzIG9yIGFuIGFycmF5LgorICoKKyAqIEBleGFtcGxlCisgICA8ZXhhbXBsZT4K
KyAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAgICAgIDxvbCBuZy1pbml0PSJuYW1l
cz1bJ0pvaG4nLCAnTWFyeScsICdDYXRlJywgJ1N1eiddIj4KKyAgICAgICAgICA8bGkgbmctcmVw
ZWF0PSJuYW1lIGluIG5hbWVzIj4KKyAgICAgICAgICAgPHNwYW4gbmctY2xhc3Mtb2RkPSInb2Rk
JyIgbmctY2xhc3MtZXZlbj0iJ2V2ZW4nIj4KKyAgICAgICAgICAgICB7e25hbWV9fSAmbmJzcDsg
Jm5ic3A7ICZuYnNwOworICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgPC9saT4KKyAgICAg
ICAgPC9vbD4KKyAgICAgPC9maWxlPgorICAgICA8ZmlsZSBuYW1lPSJzdHlsZS5jc3MiPgorICAg
ICAgIC5vZGQgeworICAgICAgICAgY29sb3I6IHJlZDsKKyAgICAgICB9CisgICAgICAgLmV2ZW4g
eworICAgICAgICAgY29sb3I6IGJsdWU7CisgICAgICAgfQorICAgICA8L2ZpbGU+CisgICAgIDxm
aWxlIG5hbWU9InByb3RyYWN0b3IuanMiIHR5cGU9InByb3RyYWN0b3IiPgorICAgICAgIGl0KCdz
aG91bGQgY2hlY2sgbmctY2xhc3Mtb2RkIGFuZCBuZy1jbGFzcy1ldmVuJywgZnVuY3Rpb24oKSB7
CisgICAgICAgICBleHBlY3QoZWxlbWVudChieS5yZXBlYXRlcignbmFtZSBpbiBuYW1lcycpLnJv
dygwKS5jb2x1bW4oJ25hbWUnKSkuZ2V0QXR0cmlidXRlKCdjbGFzcycpKS4KKyAgICAgICAgICAg
dG9NYXRjaCgvb2RkLyk7CisgICAgICAgICBleHBlY3QoZWxlbWVudChieS5yZXBlYXRlcignbmFt
ZSBpbiBuYW1lcycpLnJvdygxKS5jb2x1bW4oJ25hbWUnKSkuZ2V0QXR0cmlidXRlKCdjbGFzcycp
KS4KKyAgICAgICAgICAgdG9NYXRjaCgvZXZlbi8pOworICAgICAgIH0pOworICAgICA8L2ZpbGU+
CisgICA8L2V4YW1wbGU+CisgKi8KK3ZhciBuZ0NsYXNzRXZlbkRpcmVjdGl2ZSA9IGNsYXNzRGly
ZWN0aXZlKCdFdmVuJywgMSk7CisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUg
bmdDbG9haworICogQHJlc3RyaWN0IEFDCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBUaGUgYG5n
Q2xvYWtgIGRpcmVjdGl2ZSBpcyB1c2VkIHRvIHByZXZlbnQgdGhlIEFuZ3VsYXIgaHRtbCB0ZW1w
bGF0ZSBmcm9tIGJlaW5nIGJyaWVmbHkKKyAqIGRpc3BsYXllZCBieSB0aGUgYnJvd3NlciBpbiBp
dHMgcmF3ICh1bmNvbXBpbGVkKSBmb3JtIHdoaWxlIHlvdXIgYXBwbGljYXRpb24gaXMgbG9hZGlu
Zy4gVXNlIHRoaXMKKyAqIGRpcmVjdGl2ZSB0byBhdm9pZCB0aGUgdW5kZXNpcmFibGUgZmxpY2tl
ciBlZmZlY3QgY2F1c2VkIGJ5IHRoZSBodG1sIHRlbXBsYXRlIGRpc3BsYXkuCisgKgorICogVGhl
IGRpcmVjdGl2ZSBjYW4gYmUgYXBwbGllZCB0byB0aGUgYDxib2R5PmAgZWxlbWVudCwgYnV0IHRo
ZSBwcmVmZXJyZWQgdXNhZ2UgaXMgdG8gYXBwbHkKKyAqIG11bHRpcGxlIGBuZ0Nsb2FrYCBkaXJl
Y3RpdmVzIHRvIHNtYWxsIHBvcnRpb25zIG9mIHRoZSBwYWdlIHRvIHBlcm1pdCBwcm9ncmVzc2l2
ZSByZW5kZXJpbmcKKyAqIG9mIHRoZSBicm93c2VyIHZpZXcuCisgKgorICogYG5nQ2xvYWtgIHdv
cmtzIGluIGNvb3BlcmF0aW9uIHdpdGggdGhlIGZvbGxvd2luZyBjc3MgcnVsZSBlbWJlZGRlZCB3
aXRoaW4gYGFuZ3VsYXIuanNgIGFuZAorICogYGFuZ3VsYXIubWluLmpzYC4KKyAqIEZvciBDU1Ag
bW9kZSBwbGVhc2UgYWRkIGBhbmd1bGFyLWNzcC5jc3NgIHRvIHlvdXIgaHRtbCBmaWxlIChzZWUg
e0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0NzcCBuZ0NzcH0pLgorICoKKyAqIGBgYGNzcworICogW25n
XDpjbG9ha10sIFtuZy1jbG9ha10sIFtkYXRhLW5nLWNsb2FrXSwgW3gtbmctY2xvYWtdLCAubmct
Y2xvYWssIC54LW5nLWNsb2FrIHsKKyAqICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OworICog
fQorICogYGBgCisgKgorICogV2hlbiB0aGlzIGNzcyBydWxlIGlzIGxvYWRlZCBieSB0aGUgYnJv
d3NlciwgYWxsIGh0bWwgZWxlbWVudHMgKGluY2x1ZGluZyB0aGVpciBjaGlsZHJlbikgdGhhdAor
ICogYXJlIHRhZ2dlZCB3aXRoIHRoZSBgbmdDbG9ha2AgZGlyZWN0aXZlIGFyZSBoaWRkZW4uIFdo
ZW4gQW5ndWxhciBlbmNvdW50ZXJzIHRoaXMgZGlyZWN0aXZlCisgKiBkdXJpbmcgdGhlIGNvbXBp
bGF0aW9uIG9mIHRoZSB0ZW1wbGF0ZSBpdCBkZWxldGVzIHRoZSBgbmdDbG9ha2AgZWxlbWVudCBh
dHRyaWJ1dGUsIG1ha2luZworICogdGhlIGNvbXBpbGVkIGVsZW1lbnQgdmlzaWJsZS4KKyAqCisg
KiBGb3IgdGhlIGJlc3QgcmVzdWx0LCB0aGUgYGFuZ3VsYXIuanNgIHNjcmlwdCBtdXN0IGJlIGxv
YWRlZCBpbiB0aGUgaGVhZCBzZWN0aW9uIG9mIHRoZSBodG1sCisgKiBkb2N1bWVudDsgYWx0ZXJu
YXRpdmVseSwgdGhlIGNzcyBydWxlIGFib3ZlIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIGV4dGVy
bmFsIHN0eWxlc2hlZXQgb2YgdGhlCisgKiBhcHBsaWNhdGlvbi4KKyAqCisgKiBAZWxlbWVudCBB
TlkKKyAqCisgKiBAZXhhbXBsZQorICAgPGV4YW1wbGU+CisgICAgIDxmaWxlIG5hbWU9ImluZGV4
Lmh0bWwiPgorICAgICAgICA8ZGl2IGlkPSJ0ZW1wbGF0ZTEiIG5nLWNsb2FrPnt7ICdoZWxsbycg
fX08L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0idGVtcGxhdGUyIiBjbGFzcz0ibmctY2xvYWsiPnt7
ICd3b3JsZCcgfX08L2Rpdj4KKyAgICAgPC9maWxlPgorICAgICA8ZmlsZSBuYW1lPSJwcm90cmFj
dG9yLmpzIiB0eXBlPSJwcm90cmFjdG9yIj4KKyAgICAgICBpdCgnc2hvdWxkIHJlbW92ZSB0aGUg
dGVtcGxhdGUgZGlyZWN0aXZlIGFuZCBjc3MgY2xhc3MnLCBmdW5jdGlvbigpIHsKKyAgICAgICAg
IGV4cGVjdCgkKCcjdGVtcGxhdGUxJykuZ2V0QXR0cmlidXRlKCduZy1jbG9haycpKS4KKyAgICAg
ICAgICAgdG9CZU51bGwoKTsKKyAgICAgICAgIGV4cGVjdCgkKCcjdGVtcGxhdGUyJykuZ2V0QXR0
cmlidXRlKCduZy1jbG9haycpKS4KKyAgICAgICAgICAgdG9CZU51bGwoKTsKKyAgICAgICB9KTsK
KyAgICAgPC9maWxlPgorICAgPC9leGFtcGxlPgorICoKKyAqLwordmFyIG5nQ2xvYWtEaXJlY3Rp
dmUgPSBuZ0RpcmVjdGl2ZSh7CisgIGNvbXBpbGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHIpIHsK
KyAgICBhdHRyLiRzZXQoJ25nQ2xvYWsnLCB1bmRlZmluZWQpOworICAgIGVsZW1lbnQucmVtb3Zl
Q2xhc3MoJ25nLWNsb2FrJyk7CisgIH0KK30pOworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUK
KyAqIEBuYW1lIG5nQ29udHJvbGxlcgorICoKKyAqIEBkZXNjcmlwdGlvbgorICogVGhlIGBuZ0Nv
bnRyb2xsZXJgIGRpcmVjdGl2ZSBhdHRhY2hlcyBhIGNvbnRyb2xsZXIgY2xhc3MgdG8gdGhlIHZp
ZXcuIFRoaXMgaXMgYSBrZXkgYXNwZWN0IG9mIGhvdyBhbmd1bGFyCisgKiBzdXBwb3J0cyB0aGUg
cHJpbmNpcGxlcyBiZWhpbmQgdGhlIE1vZGVsLVZpZXctQ29udHJvbGxlciBkZXNpZ24gcGF0dGVy
bi4KKyAqCisgKiBNVkMgY29tcG9uZW50cyBpbiBhbmd1bGFyOgorICoKKyAqICogTW9kZWwg4oCU
IE1vZGVscyBhcmUgdGhlIHByb3BlcnRpZXMgb2YgYSBzY29wZTsgc2NvcGVzIGFyZSBhdHRhY2hl
ZCB0byB0aGUgRE9NIHdoZXJlIHNjb3BlIHByb3BlcnRpZXMKKyAqICAgYXJlIGFjY2Vzc2VkIHRo
cm91Z2ggYmluZGluZ3MuCisgKiAqIFZpZXcg4oCUIFRoZSB0ZW1wbGF0ZSAoSFRNTCB3aXRoIGRh
dGEgYmluZGluZ3MpIHRoYXQgaXMgcmVuZGVyZWQgaW50byB0aGUgVmlldy4KKyAqICogQ29udHJv
bGxlciDigJQgVGhlIGBuZ0NvbnRyb2xsZXJgIGRpcmVjdGl2ZSBzcGVjaWZpZXMgYSBDb250cm9s
bGVyIGNsYXNzOyB0aGUgY2xhc3MgY29udGFpbnMgYnVzaW5lc3MKKyAqICAgbG9naWMgYmVoaW5k
IHRoZSBhcHBsaWNhdGlvbiB0byBkZWNvcmF0ZSB0aGUgc2NvcGUgd2l0aCBmdW5jdGlvbnMgYW5k
IHZhbHVlcworICoKKyAqIE5vdGUgdGhhdCB5b3UgY2FuIGFsc28gYXR0YWNoIGNvbnRyb2xsZXJz
IHRvIHRoZSBET00gYnkgZGVjbGFyaW5nIGl0IGluIGEgcm91dGUgZGVmaW5pdGlvbgorICogdmlh
IHRoZSB7QGxpbmsgbmdSb3V0ZS4kcm91dGUgJHJvdXRlfSBzZXJ2aWNlLiBBIGNvbW1vbiBtaXN0
YWtlIGlzIHRvIGRlY2xhcmUgdGhlIGNvbnRyb2xsZXIKKyAqIGFnYWluIHVzaW5nIGBuZy1jb250
cm9sbGVyYCBpbiB0aGUgdGVtcGxhdGUgaXRzZWxmLiAgVGhpcyB3aWxsIGNhdXNlIHRoZSBjb250
cm9sbGVyIHRvIGJlIGF0dGFjaGVkCisgKiBhbmQgZXhlY3V0ZWQgdHdpY2UuCisgKgorICogQGVs
ZW1lbnQgQU5ZCisgKiBAc2NvcGUKKyAqIEBwcmlvcml0eSA1MDAKKyAqIEBwYXJhbSB7ZXhwcmVz
c2lvbn0gbmdDb250cm9sbGVyIE5hbWUgb2YgYSBjb25zdHJ1Y3RvciBmdW5jdGlvbiByZWdpc3Rl
cmVkIHdpdGggdGhlIGN1cnJlbnQKKyAqIHtAbGluayBuZy4kY29udHJvbGxlclByb3ZpZGVyICRj
b250cm9sbGVyUHJvdmlkZXJ9IG9yIGFuIHtAbGluayBndWlkZS9leHByZXNzaW9uIGV4cHJlc3Np
b259CisgKiB0aGF0IG9uIHRoZSBjdXJyZW50IHNjb3BlIGV2YWx1YXRlcyB0byBhIGNvbnN0cnVj
dG9yIGZ1bmN0aW9uLgorICoKKyAqIFRoZSBjb250cm9sbGVyIGluc3RhbmNlIGNhbiBiZSBwdWJs
aXNoZWQgaW50byBhIHNjb3BlIHByb3BlcnR5IGJ5IHNwZWNpZnlpbmcKKyAqIGBuZy1jb250cm9s
bGVyPSJhcyBwcm9wZXJ0eU5hbWUiYC4KKyAqCisgKiBJZiB0aGUgY3VycmVudCBgJGNvbnRyb2xs
ZXJQcm92aWRlcmAgaXMgY29uZmlndXJlZCB0byB1c2UgZ2xvYmFscyAodmlhCisgKiB7QGxpbmsg
bmcuJGNvbnRyb2xsZXJQcm92aWRlciNhbGxvd0dsb2JhbHMgYCRjb250cm9sbGVyUHJvdmlkZXIu
YWxsb3dHbG9iYWxzKClgIH0pLCB0aGlzIG1heQorICogYWxzbyBiZSB0aGUgbmFtZSBvZiBhIGds
b2JhbGx5IGFjY2Vzc2libGUgY29uc3RydWN0b3IgZnVuY3Rpb24gKG5vdCByZWNvbW1lbmRlZCku
CisgKgorICogQGV4YW1wbGUKKyAqIEhlcmUgaXMgYSBzaW1wbGUgZm9ybSBmb3IgZWRpdGluZyB1
c2VyIGNvbnRhY3QgaW5mb3JtYXRpb24uIEFkZGluZywgcmVtb3ZpbmcsIGNsZWFyaW5nLCBhbmQK
KyAqIGdyZWV0aW5nIGFyZSBtZXRob2RzIGRlY2xhcmVkIG9uIHRoZSBjb250cm9sbGVyIChzZWUg
c291cmNlIHRhYikuIFRoZXNlIG1ldGhvZHMgY2FuCisgKiBlYXNpbHkgYmUgY2FsbGVkIGZyb20g
dGhlIGFuZ3VsYXIgbWFya3VwLiBBbnkgY2hhbmdlcyB0byB0aGUgZGF0YSBhcmUgYXV0b21hdGlj
YWxseSByZWZsZWN0ZWQKKyAqIGluIHRoZSBWaWV3IHdpdGhvdXQgdGhlIG5lZWQgZm9yIGEgbWFu
dWFsIHVwZGF0ZS4KKyAqCisgKiBUd28gZGlmZmVyZW50IGRlY2xhcmF0aW9uIHN0eWxlcyBhcmUg
aW5jbHVkZWQgYmVsb3c6CisgKgorICogKiBvbmUgYmluZHMgbWV0aG9kcyBhbmQgcHJvcGVydGll
cyBkaXJlY3RseSBvbnRvIHRoZSBjb250cm9sbGVyIHVzaW5nIGB0aGlzYDoKKyAqIGBuZy1jb250
cm9sbGVyPSJTZXR0aW5nc0NvbnRyb2xsZXIxIGFzIHNldHRpbmdzImAKKyAqICogb25lIGluamVj
dHMgYCRzY29wZWAgaW50byB0aGUgY29udHJvbGxlcjoKKyAqIGBuZy1jb250cm9sbGVyPSJTZXR0
aW5nc0NvbnRyb2xsZXIyImAKKyAqCisgKiBUaGUgc2Vjb25kIG9wdGlvbiBpcyBtb3JlIGNvbW1v
biBpbiB0aGUgQW5ndWxhciBjb21tdW5pdHksIGFuZCBpcyBnZW5lcmFsbHkgdXNlZCBpbiBib2ls
ZXJwbGF0ZXMKKyAqIGFuZCBpbiB0aGlzIGd1aWRlLiBIb3dldmVyLCB0aGVyZSBhcmUgYWR2YW50
YWdlcyB0byBiaW5kaW5nIHByb3BlcnRpZXMgZGlyZWN0bHkgdG8gdGhlIGNvbnRyb2xsZXIKKyAq
IGFuZCBhdm9pZGluZyBzY29wZS4KKyAqCisgKiAqIFVzaW5nIGBjb250cm9sbGVyIGFzYCBtYWtl
cyBpdCBvYnZpb3VzIHdoaWNoIGNvbnRyb2xsZXIgeW91IGFyZSBhY2Nlc3NpbmcgaW4gdGhlIHRl
bXBsYXRlIHdoZW4KKyAqIG11bHRpcGxlIGNvbnRyb2xsZXJzIGFwcGx5IHRvIGFuIGVsZW1lbnQu
CisgKiAqIElmIHlvdSBhcmUgd3JpdGluZyB5b3VyIGNvbnRyb2xsZXJzIGFzIGNsYXNzZXMgeW91
IGhhdmUgZWFzaWVyIGFjY2VzcyB0byB0aGUgcHJvcGVydGllcyBhbmQKKyAqIG1ldGhvZHMsIHdo
aWNoIHdpbGwgYXBwZWFyIG9uIHRoZSBzY29wZSwgZnJvbSBpbnNpZGUgdGhlIGNvbnRyb2xsZXIg
Y29kZS4KKyAqICogU2luY2UgdGhlcmUgaXMgYWx3YXlzIGEgYC5gIGluIHRoZSBiaW5kaW5ncywg
eW91IGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgcHJvdG90eXBhbAorICogaW5oZXJpdGFuY2Ug
bWFza2luZyBwcmltaXRpdmVzLgorICoKKyAqIFRoaXMgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgdGhl
IGBjb250cm9sbGVyIGFzYCBzeW50YXguCisgKgorICogPGV4YW1wbGUgbmFtZT0ibmdDb250cm9s
bGVyQXMiIG1vZHVsZT0iY29udHJvbGxlckFzRXhhbXBsZSI+CisgKiAgIDxmaWxlIG5hbWU9Imlu
ZGV4Lmh0bWwiPgorICogICAgPGRpdiBpZD0iY3RybC1hcy1leG1wbCIgbmctY29udHJvbGxlcj0i
U2V0dGluZ3NDb250cm9sbGVyMSBhcyBzZXR0aW5ncyI+CisgKiAgICAgIDxsYWJlbD5OYW1lOiA8
aW5wdXQgdHlwZT0idGV4dCIgbmctbW9kZWw9InNldHRpbmdzLm5hbWUiLz48L2xhYmVsPgorICog
ICAgICA8YnV0dG9uIG5nLWNsaWNrPSJzZXR0aW5ncy5ncmVldCgpIj5ncmVldDwvYnV0dG9uPjxi
ci8+CisgKiAgICAgIENvbnRhY3Q6CisgKiAgICAgIDx1bD4KKyAqICAgICAgICA8bGkgbmctcmVw
ZWF0PSJjb250YWN0IGluIHNldHRpbmdzLmNvbnRhY3RzIj4KKyAqICAgICAgICAgIDxzZWxlY3Qg
bmctbW9kZWw9ImNvbnRhY3QudHlwZSIgYXJpYS1sYWJlbD0iQ29udGFjdCBtZXRob2QiIGlkPSJz
ZWxlY3Rfe3skaW5kZXh9fSI+CisgKiAgICAgICAgICAgICA8b3B0aW9uPnBob25lPC9vcHRpb24+
CisgKiAgICAgICAgICAgICA8b3B0aW9uPmVtYWlsPC9vcHRpb24+CisgKiAgICAgICAgICA8L3Nl
bGVjdD4KKyAqICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuZy1tb2RlbD0iY29udGFjdC52
YWx1ZSIgYXJpYS1sYWJlbGxlZGJ5PSJzZWxlY3Rfe3skaW5kZXh9fSIgLz4KKyAqICAgICAgICAg
IDxidXR0b24gbmctY2xpY2s9InNldHRpbmdzLmNsZWFyQ29udGFjdChjb250YWN0KSI+Y2xlYXI8
L2J1dHRvbj4KKyAqICAgICAgICAgIDxidXR0b24gbmctY2xpY2s9InNldHRpbmdzLnJlbW92ZUNv
bnRhY3QoY29udGFjdCkiIGFyaWEtbGFiZWw9IlJlbW92ZSI+WDwvYnV0dG9uPgorICogICAgICAg
IDwvbGk+CisgKiAgICAgICAgPGxpPjxidXR0b24gbmctY2xpY2s9InNldHRpbmdzLmFkZENvbnRh
Y3QoKSI+YWRkPC9idXR0b24+PC9saT4KKyAqICAgICA8L3VsPgorICogICAgPC9kaXY+CisgKiAg
IDwvZmlsZT4KKyAqICAgPGZpbGUgbmFtZT0iYXBwLmpzIj4KKyAqICAgIGFuZ3VsYXIubW9kdWxl
KCdjb250cm9sbGVyQXNFeGFtcGxlJywgW10pCisgKiAgICAgIC5jb250cm9sbGVyKCdTZXR0aW5n
c0NvbnRyb2xsZXIxJywgU2V0dGluZ3NDb250cm9sbGVyMSk7CisgKgorICogICAgZnVuY3Rpb24g
U2V0dGluZ3NDb250cm9sbGVyMSgpIHsKKyAqICAgICAgdGhpcy5uYW1lID0gIkpvaG4gU21pdGgi
OworICogICAgICB0aGlzLmNvbnRhY3RzID0gWworICogICAgICAgIHt0eXBlOiAncGhvbmUnLCB2
YWx1ZTogJzQwOCA1NTUgMTIxMid9LAorICogICAgICAgIHt0eXBlOiAnZW1haWwnLCB2YWx1ZTog
J2pvaG4uc21pdGhAZXhhbXBsZS5vcmcnfSBdOworICogICAgfQorICoKKyAqICAgIFNldHRpbmdz
Q29udHJvbGxlcjEucHJvdG90eXBlLmdyZWV0ID0gZnVuY3Rpb24oKSB7CisgKiAgICAgIGFsZXJ0
KHRoaXMubmFtZSk7CisgKiAgICB9OworICoKKyAqICAgIFNldHRpbmdzQ29udHJvbGxlcjEucHJv
dG90eXBlLmFkZENvbnRhY3QgPSBmdW5jdGlvbigpIHsKKyAqICAgICAgdGhpcy5jb250YWN0cy5w
dXNoKHt0eXBlOiAnZW1haWwnLCB2YWx1ZTogJ3lvdXJuYW1lQGV4YW1wbGUub3JnJ30pOworICog
ICAgfTsKKyAqCisgKiAgICBTZXR0aW5nc0NvbnRyb2xsZXIxLnByb3RvdHlwZS5yZW1vdmVDb250
YWN0ID0gZnVuY3Rpb24oY29udGFjdFRvUmVtb3ZlKSB7CisgKiAgICAgdmFyIGluZGV4ID0gdGhp
cy5jb250YWN0cy5pbmRleE9mKGNvbnRhY3RUb1JlbW92ZSk7CisgKiAgICAgIHRoaXMuY29udGFj
dHMuc3BsaWNlKGluZGV4LCAxKTsKKyAqICAgIH07CisgKgorICogICAgU2V0dGluZ3NDb250cm9s
bGVyMS5wcm90b3R5cGUuY2xlYXJDb250YWN0ID0gZnVuY3Rpb24oY29udGFjdCkgeworICogICAg
ICBjb250YWN0LnR5cGUgPSAncGhvbmUnOworICogICAgICBjb250YWN0LnZhbHVlID0gJyc7Cisg
KiAgICB9OworICogICA8L2ZpbGU+CisgKiAgIDxmaWxlIG5hbWU9InByb3RyYWN0b3IuanMiIHR5
cGU9InByb3RyYWN0b3IiPgorICogICAgIGl0KCdzaG91bGQgY2hlY2sgY29udHJvbGxlciBhcycs
IGZ1bmN0aW9uKCkgeworICogICAgICAgdmFyIGNvbnRhaW5lciA9IGVsZW1lbnQoYnkuaWQoJ2N0
cmwtYXMtZXhtcGwnKSk7CisgKiAgICAgICAgIGV4cGVjdChjb250YWluZXIuZWxlbWVudChieS5t
b2RlbCgnc2V0dGluZ3MubmFtZScpKQorICogICAgICAgICAgIC5nZXRBdHRyaWJ1dGUoJ3ZhbHVl
JykpLnRvQmUoJ0pvaG4gU21pdGgnKTsKKyAqCisgKiAgICAgICB2YXIgZmlyc3RSZXBlYXQgPQor
ICogICAgICAgICAgIGNvbnRhaW5lci5lbGVtZW50KGJ5LnJlcGVhdGVyKCdjb250YWN0IGluIHNl
dHRpbmdzLmNvbnRhY3RzJykucm93KDApKTsKKyAqICAgICAgIHZhciBzZWNvbmRSZXBlYXQgPQor
ICogICAgICAgICAgIGNvbnRhaW5lci5lbGVtZW50KGJ5LnJlcGVhdGVyKCdjb250YWN0IGluIHNl
dHRpbmdzLmNvbnRhY3RzJykucm93KDEpKTsKKyAqCisgKiAgICAgICBleHBlY3QoZmlyc3RSZXBl
YXQuZWxlbWVudChieS5tb2RlbCgnY29udGFjdC52YWx1ZScpKS5nZXRBdHRyaWJ1dGUoJ3ZhbHVl
JykpCisgKiAgICAgICAgICAgLnRvQmUoJzQwOCA1NTUgMTIxMicpOworICoKKyAqICAgICAgIGV4
cGVjdChzZWNvbmRSZXBlYXQuZWxlbWVudChieS5tb2RlbCgnY29udGFjdC52YWx1ZScpKS5nZXRB
dHRyaWJ1dGUoJ3ZhbHVlJykpCisgKiAgICAgICAgICAgLnRvQmUoJ2pvaG4uc21pdGhAZXhhbXBs
ZS5vcmcnKTsKKyAqCisgKiAgICAgICBmaXJzdFJlcGVhdC5lbGVtZW50KGJ5LmJ1dHRvblRleHQo
J2NsZWFyJykpLmNsaWNrKCk7CisgKgorICogICAgICAgZXhwZWN0KGZpcnN0UmVwZWF0LmVsZW1l
bnQoYnkubW9kZWwoJ2NvbnRhY3QudmFsdWUnKSkuZ2V0QXR0cmlidXRlKCd2YWx1ZScpKQorICog
ICAgICAgICAgIC50b0JlKCcnKTsKKyAqCisgKiAgICAgICBjb250YWluZXIuZWxlbWVudChieS5i
dXR0b25UZXh0KCdhZGQnKSkuY2xpY2soKTsKKyAqCisgKiAgICAgICBleHBlY3QoY29udGFpbmVy
LmVsZW1lbnQoYnkucmVwZWF0ZXIoJ2NvbnRhY3QgaW4gc2V0dGluZ3MuY29udGFjdHMnKS5yb3co
MikpCisgKiAgICAgICAgICAgLmVsZW1lbnQoYnkubW9kZWwoJ2NvbnRhY3QudmFsdWUnKSkKKyAq
ICAgICAgICAgICAuZ2V0QXR0cmlidXRlKCd2YWx1ZScpKQorICogICAgICAgICAgIC50b0JlKCd5
b3VybmFtZUBleGFtcGxlLm9yZycpOworICogICAgIH0pOworICogICA8L2ZpbGU+CisgKiA8L2V4
YW1wbGU+CisgKgorICogVGhpcyBleGFtcGxlIGRlbW9uc3RyYXRlcyB0aGUgImF0dGFjaCB0byBg
JHNjb3BlYCIgc3R5bGUgb2YgY29udHJvbGxlci4KKyAqCisgKiA8ZXhhbXBsZSBuYW1lPSJuZ0Nv
bnRyb2xsZXIiIG1vZHVsZT0iY29udHJvbGxlckV4YW1wbGUiPgorICogIDxmaWxlIG5hbWU9Imlu
ZGV4Lmh0bWwiPgorICogICA8ZGl2IGlkPSJjdHJsLWV4bXBsIiBuZy1jb250cm9sbGVyPSJTZXR0
aW5nc0NvbnRyb2xsZXIyIj4KKyAqICAgICA8bGFiZWw+TmFtZTogPGlucHV0IHR5cGU9InRleHQi
IG5nLW1vZGVsPSJuYW1lIi8+PC9sYWJlbD4KKyAqICAgICA8YnV0dG9uIG5nLWNsaWNrPSJncmVl
dCgpIj5ncmVldDwvYnV0dG9uPjxici8+CisgKiAgICAgQ29udGFjdDoKKyAqICAgICA8dWw+Cisg
KiAgICAgICA8bGkgbmctcmVwZWF0PSJjb250YWN0IGluIGNvbnRhY3RzIj4KKyAqICAgICAgICAg
PHNlbGVjdCBuZy1tb2RlbD0iY29udGFjdC50eXBlIiBpZD0ic2VsZWN0X3t7JGluZGV4fX0iPgor
ICogICAgICAgICAgICA8b3B0aW9uPnBob25lPC9vcHRpb24+CisgKiAgICAgICAgICAgIDxvcHRp
b24+ZW1haWw8L29wdGlvbj4KKyAqICAgICAgICAgPC9zZWxlY3Q+CisgKiAgICAgICAgIDxpbnB1
dCB0eXBlPSJ0ZXh0IiBuZy1tb2RlbD0iY29udGFjdC52YWx1ZSIgYXJpYS1sYWJlbGxlZGJ5PSJz
ZWxlY3Rfe3skaW5kZXh9fSIgLz4KKyAqICAgICAgICAgPGJ1dHRvbiBuZy1jbGljaz0iY2xlYXJD
b250YWN0KGNvbnRhY3QpIj5jbGVhcjwvYnV0dG9uPgorICogICAgICAgICA8YnV0dG9uIG5nLWNs
aWNrPSJyZW1vdmVDb250YWN0KGNvbnRhY3QpIj5YPC9idXR0b24+CisgKiAgICAgICA8L2xpPgor
ICogICAgICAgPGxpPlsgPGJ1dHRvbiBuZy1jbGljaz0iYWRkQ29udGFjdCgpIj5hZGQ8L2J1dHRv
bj4gXTwvbGk+CisgKiAgICA8L3VsPgorICogICA8L2Rpdj4KKyAqICA8L2ZpbGU+CisgKiAgPGZp
bGUgbmFtZT0iYXBwLmpzIj4KKyAqICAgYW5ndWxhci5tb2R1bGUoJ2NvbnRyb2xsZXJFeGFtcGxl
JywgW10pCisgKiAgICAgLmNvbnRyb2xsZXIoJ1NldHRpbmdzQ29udHJvbGxlcjInLCBbJyRzY29w
ZScsIFNldHRpbmdzQ29udHJvbGxlcjJdKTsKKyAqCisgKiAgIGZ1bmN0aW9uIFNldHRpbmdzQ29u
dHJvbGxlcjIoJHNjb3BlKSB7CisgKiAgICAgJHNjb3BlLm5hbWUgPSAiSm9obiBTbWl0aCI7Cisg
KiAgICAgJHNjb3BlLmNvbnRhY3RzID0gWworICogICAgICAge3R5cGU6J3Bob25lJywgdmFsdWU6
JzQwOCA1NTUgMTIxMid9LAorICogICAgICAge3R5cGU6J2VtYWlsJywgdmFsdWU6J2pvaG4uc21p
dGhAZXhhbXBsZS5vcmcnfSBdOworICoKKyAqICAgICAkc2NvcGUuZ3JlZXQgPSBmdW5jdGlvbigp
IHsKKyAqICAgICAgIGFsZXJ0KCRzY29wZS5uYW1lKTsKKyAqICAgICB9OworICoKKyAqICAgICAk
c2NvcGUuYWRkQ29udGFjdCA9IGZ1bmN0aW9uKCkgeworICogICAgICAgJHNjb3BlLmNvbnRhY3Rz
LnB1c2goe3R5cGU6J2VtYWlsJywgdmFsdWU6J3lvdXJuYW1lQGV4YW1wbGUub3JnJ30pOworICog
ICAgIH07CisgKgorICogICAgICRzY29wZS5yZW1vdmVDb250YWN0ID0gZnVuY3Rpb24oY29udGFj
dFRvUmVtb3ZlKSB7CisgKiAgICAgICB2YXIgaW5kZXggPSAkc2NvcGUuY29udGFjdHMuaW5kZXhP
Zihjb250YWN0VG9SZW1vdmUpOworICogICAgICAgJHNjb3BlLmNvbnRhY3RzLnNwbGljZShpbmRl
eCwgMSk7CisgKiAgICAgfTsKKyAqCisgKiAgICAgJHNjb3BlLmNsZWFyQ29udGFjdCA9IGZ1bmN0
aW9uKGNvbnRhY3QpIHsKKyAqICAgICAgIGNvbnRhY3QudHlwZSA9ICdwaG9uZSc7CisgKiAgICAg
ICBjb250YWN0LnZhbHVlID0gJyc7CisgKiAgICAgfTsKKyAqICAgfQorICogIDwvZmlsZT4KKyAq
ICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFjdG9yIj4KKyAqICAgIGl0
KCdzaG91bGQgY2hlY2sgY29udHJvbGxlcicsIGZ1bmN0aW9uKCkgeworICogICAgICB2YXIgY29u
dGFpbmVyID0gZWxlbWVudChieS5pZCgnY3RybC1leG1wbCcpKTsKKyAqCisgKiAgICAgIGV4cGVj
dChjb250YWluZXIuZWxlbWVudChieS5tb2RlbCgnbmFtZScpKQorICogICAgICAgICAgLmdldEF0
dHJpYnV0ZSgndmFsdWUnKSkudG9CZSgnSm9obiBTbWl0aCcpOworICoKKyAqICAgICAgdmFyIGZp
cnN0UmVwZWF0ID0KKyAqICAgICAgICAgIGNvbnRhaW5lci5lbGVtZW50KGJ5LnJlcGVhdGVyKCdj
b250YWN0IGluIGNvbnRhY3RzJykucm93KDApKTsKKyAqICAgICAgdmFyIHNlY29uZFJlcGVhdCA9
CisgKiAgICAgICAgICBjb250YWluZXIuZWxlbWVudChieS5yZXBlYXRlcignY29udGFjdCBpbiBj
b250YWN0cycpLnJvdygxKSk7CisgKgorICogICAgICBleHBlY3QoZmlyc3RSZXBlYXQuZWxlbWVu
dChieS5tb2RlbCgnY29udGFjdC52YWx1ZScpKS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpCisgKiAg
ICAgICAgICAudG9CZSgnNDA4IDU1NSAxMjEyJyk7CisgKiAgICAgIGV4cGVjdChzZWNvbmRSZXBl
YXQuZWxlbWVudChieS5tb2RlbCgnY29udGFjdC52YWx1ZScpKS5nZXRBdHRyaWJ1dGUoJ3ZhbHVl
JykpCisgKiAgICAgICAgICAudG9CZSgnam9obi5zbWl0aEBleGFtcGxlLm9yZycpOworICoKKyAq
ICAgICAgZmlyc3RSZXBlYXQuZWxlbWVudChieS5idXR0b25UZXh0KCdjbGVhcicpKS5jbGljaygp
OworICoKKyAqICAgICAgZXhwZWN0KGZpcnN0UmVwZWF0LmVsZW1lbnQoYnkubW9kZWwoJ2NvbnRh
Y3QudmFsdWUnKSkuZ2V0QXR0cmlidXRlKCd2YWx1ZScpKQorICogICAgICAgICAgLnRvQmUoJycp
OworICoKKyAqICAgICAgY29udGFpbmVyLmVsZW1lbnQoYnkuYnV0dG9uVGV4dCgnYWRkJykpLmNs
aWNrKCk7CisgKgorICogICAgICBleHBlY3QoY29udGFpbmVyLmVsZW1lbnQoYnkucmVwZWF0ZXIo
J2NvbnRhY3QgaW4gY29udGFjdHMnKS5yb3coMikpCisgKiAgICAgICAgICAuZWxlbWVudChieS5t
b2RlbCgnY29udGFjdC52YWx1ZScpKQorICogICAgICAgICAgLmdldEF0dHJpYnV0ZSgndmFsdWUn
KSkKKyAqICAgICAgICAgIC50b0JlKCd5b3VybmFtZUBleGFtcGxlLm9yZycpOworICogICAgfSk7
CisgKiAgPC9maWxlPgorICo8L2V4YW1wbGU+CisKKyAqLwordmFyIG5nQ29udHJvbGxlckRpcmVj
dGl2ZSA9IFtmdW5jdGlvbigpIHsKKyAgcmV0dXJuIHsKKyAgICByZXN0cmljdDogJ0EnLAorICAg
IHNjb3BlOiB0cnVlLAorICAgIGNvbnRyb2xsZXI6ICdAJywKKyAgICBwcmlvcml0eTogNTAwCisg
IH07Cit9XTsKKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBuZ0NzcAorICoK
KyAqIEBlbGVtZW50IGh0bWwKKyAqIEBkZXNjcmlwdGlvbgorICogRW5hYmxlcyBbQ1NQIChDb250
ZW50IFNlY3VyaXR5IFBvbGljeSldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL1Nl
Y3VyaXR5L0NTUCkgc3VwcG9ydC4KKyAqCisgKiBUaGlzIGlzIG5lY2Vzc2FyeSB3aGVuIGRldmVs
b3BpbmcgdGhpbmdzIGxpa2UgR29vZ2xlIENocm9tZSBFeHRlbnNpb25zIG9yIFVuaXZlcnNhbCBX
aW5kb3dzIEFwcHMuCisgKgorICogQ1NQIGZvcmJpZHMgYXBwcyB0byB1c2UgYGV2YWxgIG9yIGBG
dW5jdGlvbihzdHJpbmcpYCBnZW5lcmF0ZWQgZnVuY3Rpb25zIChhbW9uZyBvdGhlciB0aGluZ3Mp
LgorICogRm9yIEFuZ3VsYXIgdG8gYmUgQ1NQIGNvbXBhdGlibGUgdGhlcmUgYXJlIG9ubHkgdHdv
IHRoaW5ncyB0aGF0IHdlIG5lZWQgdG8gZG8gZGlmZmVyZW50bHk6CisgKgorICogLSBkb24ndCB1
c2UgYEZ1bmN0aW9uYCBjb25zdHJ1Y3RvciB0byBnZW5lcmF0ZSBvcHRpbWl6ZWQgdmFsdWUgZ2V0
dGVycworICogLSBkb24ndCBpbmplY3QgY3VzdG9tIHN0eWxlc2hlZXQgaW50byB0aGUgZG9jdW1l
bnQKKyAqCisgKiBBbmd1bGFySlMgdXNlcyBgRnVuY3Rpb24oc3RyaW5nKWAgZ2VuZXJhdGVkIGZ1
bmN0aW9ucyBhcyBhIHNwZWVkIG9wdGltaXphdGlvbi4gQXBwbHlpbmcgdGhlIGBuZ0NzcGAKKyAq
IGRpcmVjdGl2ZSB3aWxsIGNhdXNlIEFuZ3VsYXIgdG8gdXNlIENTUCBjb21wYXRpYmlsaXR5IG1v
ZGUuIFdoZW4gdGhpcyBtb2RlIGlzIG9uIEFuZ3VsYXJKUyB3aWxsCisgKiBldmFsdWF0ZSBhbGwg
ZXhwcmVzc2lvbnMgdXAgdG8gMzAlIHNsb3dlciB0aGFuIGluIG5vbi1DU1AgbW9kZSwgYnV0IG5v
IHNlY3VyaXR5IHZpb2xhdGlvbnMgd2lsbAorICogYmUgcmFpc2VkLgorICoKKyAqIENTUCBmb3Ji
aWRzIEphdmFTY3JpcHQgdG8gaW5saW5lIHN0eWxlc2hlZXQgcnVsZXMuIEluIG5vbiBDU1AgbW9k
ZSBBbmd1bGFyIGF1dG9tYXRpY2FsbHkKKyAqIGluY2x1ZGVzIHNvbWUgQ1NTIHJ1bGVzIChlLmcu
IHtAbGluayBuZy5kaXJlY3RpdmU6bmdDbG9hayBuZ0Nsb2FrfSkuCisgKiBUbyBtYWtlIHRob3Nl
IGRpcmVjdGl2ZXMgd29yayBpbiBDU1AgbW9kZSwgaW5jbHVkZSB0aGUgYGFuZ3VsYXItY3NwLmNz
c2AgbWFudWFsbHkuCisgKgorICogQW5ndWxhciB0cmllcyB0byBhdXRvZGV0ZWN0IGlmIENTUCBp
cyBhY3RpdmUgYW5kIGF1dG9tYXRpY2FsbHkgdHVybiBvbiB0aGUgQ1NQLXNhZmUgbW9kZS4gVGhp
cworICogYXV0b2RldGVjdGlvbiBob3dldmVyIHRyaWdnZXJzIGEgQ1NQIGVycm9yIHRvIGJlIGxv
Z2dlZCBpbiB0aGUgY29uc29sZToKKyAqCisgKiBgYGAKKyAqIFJlZnVzZWQgdG8gZXZhbHVhdGUg
YSBzdHJpbmcgYXMgSmF2YVNjcmlwdCBiZWNhdXNlICd1bnNhZmUtZXZhbCcgaXMgbm90IGFuIGFs
bG93ZWQgc291cmNlIG9mCisgKiBzY3JpcHQgaW4gdGhlIGZvbGxvd2luZyBDb250ZW50IFNlY3Vy
aXR5IFBvbGljeSBkaXJlY3RpdmU6ICJkZWZhdWx0LXNyYyAnc2VsZiciLiBOb3RlIHRoYXQKKyAq
ICdzY3JpcHQtc3JjJyB3YXMgbm90IGV4cGxpY2l0bHkgc2V0LCBzbyAnZGVmYXVsdC1zcmMnIGlz
IHVzZWQgYXMgYSBmYWxsYmFjay4KKyAqIGBgYAorICoKKyAqIFRoaXMgZXJyb3IgaXMgaGFybWxl
c3MgYnV0IGFubm95aW5nLiBUbyBwcmV2ZW50IHRoZSBlcnJvciBmcm9tIHNob3dpbmcgdXAsIHB1
dCB0aGUgYG5nQ3NwYAorICogZGlyZWN0aXZlIG9uIHRoZSByb290IGVsZW1lbnQgb2YgdGhlIGFw
cGxpY2F0aW9uIG9yIG9uIHRoZSBgYW5ndWxhci5qc2Agc2NyaXB0IHRhZywgd2hpY2hldmVyCisg
KiBhcHBlYXJzIGZpcnN0IGluIHRoZSBodG1sIGRvY3VtZW50LgorICoKKyAqICpOb3RlOiBUaGlz
IGRpcmVjdGl2ZSBpcyBvbmx5IGF2YWlsYWJsZSBpbiB0aGUgYG5nLWNzcGAgYW5kIGBkYXRhLW5n
LWNzcGAgYXR0cmlidXRlIGZvcm0uKgorICoKKyAqIEBleGFtcGxlCisgKiBUaGlzIGV4YW1wbGUg
c2hvd3MgaG93IHRvIGFwcGx5IHRoZSBgbmdDc3BgIGRpcmVjdGl2ZSB0byB0aGUgYGh0bWxgIHRh
Zy4KKyAgIGBgYGh0bWwKKyAgICAgPCFkb2N0eXBlIGh0bWw+CisgICAgIDxodG1sIG5nLWFwcCBu
Zy1jc3A+CisgICAgIC4uLgorICAgICAuLi4KKyAgICAgPC9odG1sPgorICAgYGBgCisgICogQGV4
YW1wbGUKKyAgICAgIC8vIE5vdGU6IHRoZSBzdWZmaXggYC5jc3BgIGluIHRoZSBleGFtcGxlIG5h
bWUgdHJpZ2dlcnMKKyAgICAgIC8vIGNzcCBtb2RlIGluIG91ciBodHRwIHNlcnZlciEKKyAgICAg
IDxleGFtcGxlIG5hbWU9ImV4YW1wbGUuY3NwIiBtb2R1bGU9ImNzcEV4YW1wbGUiIG5nLWNzcD0i
dHJ1ZSI+CisgICAgICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICAgICAgIDxkaXYg
bmctY29udHJvbGxlcj0iTWFpbkNvbnRyb2xsZXIgYXMgY3RybCI+CisgICAgICAgICAgICA8ZGl2
PgorICAgICAgICAgICAgICA8YnV0dG9uIG5nLWNsaWNrPSJjdHJsLmluYygpIiBpZD0iaW5jIj5J
bmNyZW1lbnQ8L2J1dHRvbj4KKyAgICAgICAgICAgICAgPHNwYW4gaWQ9ImNvdW50ZXIiPgorICAg
ICAgICAgICAgICAgIHt7Y3RybC5jb3VudGVyfX0KKyAgICAgICAgICAgICAgPC9zcGFuPgorICAg
ICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgIDxidXR0
b24gbmctY2xpY2s9ImN0cmwuZXZpbCgpIiBpZD0iZXZpbCI+RXZpbDwvYnV0dG9uPgorICAgICAg
ICAgICAgICA8c3BhbiBpZD0iZXZpbEVycm9yIj4KKyAgICAgICAgICAgICAgICB7e2N0cmwuZXZp
bEVycm9yfX0KKyAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgPC9kaXY+CisgICAg
ICAgICAgPC9kaXY+CisgICAgICAgIDwvZmlsZT4KKyAgICAgICAgPGZpbGUgbmFtZT0ic2NyaXB0
LmpzIj4KKyAgICAgICAgICAgYW5ndWxhci5tb2R1bGUoJ2NzcEV4YW1wbGUnLCBbXSkKKyAgICAg
ICAgICAgICAuY29udHJvbGxlcignTWFpbkNvbnRyb2xsZXInLCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLmNvdW50ZXIgPSAwOworICAgICAgICAgICAgICAgIHRoaXMuaW5jID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50ZXIrKzsKKyAgICAgICAg
ICAgICAgICB9OworICAgICAgICAgICAgICAgIHRoaXMuZXZpbCA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgICAgICAgLy8ganNoaW50IGV2aWw6dHJ1ZQorICAgICAgICAgICAgICAgICAgdHJ5
IHsKKyAgICAgICAgICAgICAgICAgICAgZXZhbCgnMSsyJyk7CisgICAgICAgICAgICAgICAgICB9
IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuZXZpbEVycm9yID0gZS5tZXNz
YWdlOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICAgIH0pOworICAgICAgICA8L2ZpbGU+CisgICAgICAgIDxmaWxlIG5hbWU9InByb3RyYWN0b3Iu
anMiIHR5cGU9InByb3RyYWN0b3IiPgorICAgICAgICAgIHZhciB1dGlsLCB3ZWJkcml2ZXI7CisK
KyAgICAgICAgICB2YXIgaW5jQnRuID0gZWxlbWVudChieS5pZCgnaW5jJykpOworICAgICAgICAg
IHZhciBjb3VudGVyID0gZWxlbWVudChieS5pZCgnY291bnRlcicpKTsKKyAgICAgICAgICB2YXIg
ZXZpbEJ0biA9IGVsZW1lbnQoYnkuaWQoJ2V2aWwnKSk7CisgICAgICAgICAgdmFyIGV2aWxFcnJv
ciA9IGVsZW1lbnQoYnkuaWQoJ2V2aWxFcnJvcicpKTsKKworICAgICAgICAgIGZ1bmN0aW9uIGdl
dEFuZENsZWFyU2V2ZXJlRXJyb3JzKCkgeworICAgICAgICAgICAgcmV0dXJuIGJyb3dzZXIubWFu
YWdlKCkubG9ncygpLmdldCgnYnJvd3NlcicpLnRoZW4oZnVuY3Rpb24oYnJvd3NlckxvZykgewor
ICAgICAgICAgICAgICByZXR1cm4gYnJvd3NlckxvZy5maWx0ZXIoZnVuY3Rpb24obG9nRW50cnkp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbG9nRW50cnkubGV2ZWwudmFsdWUgPiB3ZWJkcml2
ZXIubG9nZ2luZy5MZXZlbC5XQVJOSU5HLnZhbHVlOworICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgIH0KKworICAgICAgICAgIGZ1bmN0aW9uIGNsZWFyRXJyb3Jz
KCkgeworICAgICAgICAgICAgZ2V0QW5kQ2xlYXJTZXZlcmVFcnJvcnMoKTsKKyAgICAgICAgICB9
CisKKyAgICAgICAgICBmdW5jdGlvbiBleHBlY3ROb0Vycm9ycygpIHsKKyAgICAgICAgICAgIGdl
dEFuZENsZWFyU2V2ZXJlRXJyb3JzKCkudGhlbihmdW5jdGlvbihmaWx0ZXJlZExvZykgeworICAg
ICAgICAgICAgICBleHBlY3QoZmlsdGVyZWRMb2cubGVuZ3RoKS50b0VxdWFsKDApOworICAgICAg
ICAgICAgICBpZiAoZmlsdGVyZWRMb2cubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgY29uc29s
ZS5sb2coJ2Jyb3dzZXIgY29uc29sZSBlcnJvcnM6ICcgKyB1dGlsLmluc3BlY3QoZmlsdGVyZWRM
b2cpKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgfQorCisg
ICAgICAgICAgZnVuY3Rpb24gZXhwZWN0RXJyb3IocmVnZXgpIHsKKyAgICAgICAgICAgIGdldEFu
ZENsZWFyU2V2ZXJlRXJyb3JzKCkudGhlbihmdW5jdGlvbihmaWx0ZXJlZExvZykgeworICAgICAg
ICAgICAgICB2YXIgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgZmlsdGVyZWRMb2cuZm9y
RWFjaChmdW5jdGlvbihsb2cpIHsKKyAgICAgICAgICAgICAgICBpZiAobG9nLm1lc3NhZ2UubWF0
Y2gocmVnZXgpKSB7CisgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgaWYgKCFmb3VuZCkgewor
ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgYW4gZXJyb3IgdGhhdCBt
YXRjaGVzICcgKyByZWdleCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAg
ICAgICAgIH0KKworICAgICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICB1dGlsID0gcmVxdWlyZSgndXRpbCcpOworICAgICAgICAgICAgd2ViZHJpdmVyID0gcmVxdWly
ZSgncHJvdHJhY3Rvci9ub2RlX21vZHVsZXMvc2VsZW5pdW0td2ViZHJpdmVyJyk7CisgICAgICAg
ICAgfSk7CisKKyAgICAgICAgICAvLyBGb3Igbm93LCB3ZSBvbmx5IHRlc3Qgb24gQ2hyb21lLAor
ICAgICAgICAgIC8vIGFzIFNhZmFyaSBkb2VzIG5vdCBsb2FkIHRoZSBwYWdlIHdpdGggUHJvdHJh
Y3RvcidzIGluamVjdGVkIHNjcmlwdHMsCisgICAgICAgICAgLy8gYW5kIEZpcmVmb3ggd2ViZHJp
dmVyIGFsd2F5cyBkaXNhYmxlcyBjb250ZW50IHNlY3VyaXR5IHBvbGljeSAoIzYzNTgpCisgICAg
ICAgICAgaWYgKGJyb3dzZXIucGFyYW1zLmJyb3dzZXIgIT09ICdjaHJvbWUnKSB7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgfQorCisgICAgICAgICAgaXQoJ3Nob3VsZCBub3QgcmVw
b3J0IGVycm9ycyB3aGVuIHRoZSBwYWdlIGlzIGxvYWRlZCcsIGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgLy8gY2xlYXIgZXJyb3JzIHNvIHdlIGFyZSBub3QgZGVwZW5kZW50IG9uIHByZXZpb3Vz
IHRlc3RzCisgICAgICAgICAgICBjbGVhckVycm9ycygpOworICAgICAgICAgICAgLy8gTmVlZCB0
byByZWxvYWQgdGhlIHBhZ2UgYXMgdGhlIHBhZ2UgaXMgYWxyZWFkeSBsb2FkZWQgd2hlbgorICAg
ICAgICAgICAgLy8gd2UgY29tZSBoZXJlCisgICAgICAgICAgICBicm93c2VyLmRyaXZlci5nZXRD
dXJyZW50VXJsKCkudGhlbihmdW5jdGlvbih1cmwpIHsKKyAgICAgICAgICAgICAgYnJvd3Nlci5n
ZXQodXJsKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgZXhwZWN0Tm9FcnJvcnMoKTsK
KyAgICAgICAgICB9KTsKKworICAgICAgICAgIGl0KCdzaG91bGQgZXZhbHVhdGUgZXhwcmVzc2lv
bnMnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGV4cGVjdChjb3VudGVyLmdldFRleHQoKSku
dG9FcXVhbCgnMCcpOworICAgICAgICAgICAgaW5jQnRuLmNsaWNrKCk7CisgICAgICAgICAgICBl
eHBlY3QoY291bnRlci5nZXRUZXh0KCkpLnRvRXF1YWwoJzEnKTsKKyAgICAgICAgICAgIGV4cGVj
dE5vRXJyb3JzKCk7CisgICAgICAgICAgfSk7CisKKyAgICAgICAgICBpdCgnc2hvdWxkIHRocm93
IGFuZCByZXBvcnQgYW4gZXJyb3Igd2hlbiB1c2luZyAiZXZhbCInLCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgIGV2aWxCdG4uY2xpY2soKTsKKyAgICAgICAgICAgIGV4cGVjdChldmlsRXJyb3Iu
Z2V0VGV4dCgpKS50b01hdGNoKC9Db250ZW50IFNlY3VyaXR5IFBvbGljeS8pOworICAgICAgICAg
ICAgZXhwZWN0RXJyb3IoL0NvbnRlbnQgU2VjdXJpdHkgUG9saWN5Lyk7CisgICAgICAgICAgfSk7
CisgICAgICAgIDwvZmlsZT4KKyAgICAgIDwvZXhhbXBsZT4KKyAgKi8KKworLy8gbmdDc3AgaXMg
bm90IGltcGxlbWVudGVkIGFzIGEgcHJvcGVyIGRpcmVjdGl2ZSBhbnkgbW9yZSwgYmVjYXVzZSB3
ZSBuZWVkIGl0IGJlIHByb2Nlc3NlZCB3aGlsZSB3ZQorLy8gYm9vdHN0cmFwIHRoZSBzeXN0ZW0g
KGJlZm9yZSAkcGFyc2UgaXMgaW5zdGFudGlhdGVkKSwgZm9yIHRoaXMgcmVhc29uIHdlIGp1c3Qg
aGF2ZQorLy8gdGhlIGNzcC5pc0FjdGl2ZSgpIGZuIHRoYXQgbG9va3MgZm9yIG5nLWNzcCBhdHRy
aWJ1dGUgYW55d2hlcmUgaW4gdGhlIGN1cnJlbnQgZG9jCisKKy8qKgorICogQG5nZG9jIGRpcmVj
dGl2ZQorICogQG5hbWUgbmdDbGljaworICoKKyAqIEBkZXNjcmlwdGlvbgorICogVGhlIG5nQ2xp
Y2sgZGlyZWN0aXZlIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBjdXN0b20gYmVoYXZpb3Igd2hlbgor
ICogYW4gZWxlbWVudCBpcyBjbGlja2VkLgorICoKKyAqIEBlbGVtZW50IEFOWQorICogQHByaW9y
aXR5IDAKKyAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdDbGljayB7QGxpbmsgZ3VpZGUvZXhwcmVz
c2lvbiBFeHByZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9uCisgKiBjbGljay4gKHtAbGluayBndWlk
ZS9leHByZXNzaW9uIy1ldmVudC0gRXZlbnQgb2JqZWN0IGlzIGF2YWlsYWJsZSBhcyBgJGV2ZW50
YH0pCisgKgorICogQGV4YW1wbGUKKyAgIDxleGFtcGxlPgorICAgICA8ZmlsZSBuYW1lPSJpbmRl
eC5odG1sIj4KKyAgICAgIDxidXR0b24gbmctY2xpY2s9ImNvdW50ID0gY291bnQgKyAxIiBuZy1p
bml0PSJjb3VudD0wIj4KKyAgICAgICAgSW5jcmVtZW50CisgICAgICA8L2J1dHRvbj4KKyAgICAg
IDxzcGFuPgorICAgICAgICBjb3VudDoge3tjb3VudH19CisgICAgICA8L3NwYW4+CisgICAgIDwv
ZmlsZT4KKyAgICAgPGZpbGUgbmFtZT0icHJvdHJhY3Rvci5qcyIgdHlwZT0icHJvdHJhY3RvciI+
CisgICAgICAgaXQoJ3Nob3VsZCBjaGVjayBuZy1jbGljaycsIGZ1bmN0aW9uKCkgeworICAgICAg
ICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGluZygnY291bnQnKSkuZ2V0VGV4dCgpKS50b01hdGNo
KCcwJyk7CisgICAgICAgICBlbGVtZW50KGJ5LmNzcygnYnV0dG9uJykpLmNsaWNrKCk7CisgICAg
ICAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKCdjb3VudCcpKS5nZXRUZXh0KCkpLnRvTWF0
Y2goJzEnKTsKKyAgICAgICB9KTsKKyAgICAgPC9maWxlPgorICAgPC9leGFtcGxlPgorICovCisv
KgorICogQSBjb2xsZWN0aW9uIG9mIGRpcmVjdGl2ZXMgdGhhdCBhbGxvd3MgY3JlYXRpb24gb2Yg
Y3VzdG9tIGV2ZW50IGhhbmRsZXJzIHRoYXQgYXJlIGRlZmluZWQgYXMKKyAqIGFuZ3VsYXIgZXhw
cmVzc2lvbnMgYW5kIGFyZSBjb21waWxlZCBhbmQgZXhlY3V0ZWQgd2l0aGluIHRoZSBjdXJyZW50
IHNjb3BlLgorICovCit2YXIgbmdFdmVudERpcmVjdGl2ZXMgPSB7fTsKKworLy8gRm9yIGV2ZW50
cyB0aGF0IG1pZ2h0IGZpcmUgc3luY2hyb25vdXNseSBkdXJpbmcgRE9NIG1hbmlwdWxhdGlvbgor
Ly8gd2UgbmVlZCB0byBleGVjdXRlIHRoZWlyIGV2ZW50IGhhbmRsZXJzIGFzeW5jaHJvbm91c2x5
IHVzaW5nICRldmFsQXN5bmMsCisvLyBzbyB0aGF0IHRoZXkgYXJlIG5vdCBleGVjdXRlZCBpbiBh
biBpbmNvbnNpc3RlbnQgc3RhdGUuCit2YXIgZm9yY2VBc3luY0V2ZW50cyA9IHsKKyAgJ2JsdXIn
OiB0cnVlLAorICAnZm9jdXMnOiB0cnVlCit9OworZm9yRWFjaCgKKyAgJ2NsaWNrIGRibGNsaWNr
IG1vdXNlZG93biBtb3VzZXVwIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZW1vdmUgbW91c2VlbnRl
ciBtb3VzZWxlYXZlIGtleWRvd24ga2V5dXAga2V5cHJlc3Mgc3VibWl0IGZvY3VzIGJsdXIgY29w
eSBjdXQgcGFzdGUnLnNwbGl0KCcgJyksCisgIGZ1bmN0aW9uKGV2ZW50TmFtZSkgeworICAgIHZh
ciBkaXJlY3RpdmVOYW1lID0gZGlyZWN0aXZlTm9ybWFsaXplKCduZy0nICsgZXZlbnROYW1lKTsK
KyAgICBuZ0V2ZW50RGlyZWN0aXZlc1tkaXJlY3RpdmVOYW1lXSA9IFsnJHBhcnNlJywgJyRyb290
U2NvcGUnLCBmdW5jdGlvbigkcGFyc2UsICRyb290U2NvcGUpIHsKKyAgICAgIHJldHVybiB7Cisg
ICAgICAgIHJlc3RyaWN0OiAnQScsCisgICAgICAgIGNvbXBpbGU6IGZ1bmN0aW9uKCRlbGVtZW50
LCBhdHRyKSB7CisgICAgICAgICAgLy8gV2UgZXhwb3NlIHRoZSBwb3dlcmZ1bCAkZXZlbnQgb2Jq
ZWN0IG9uIHRoZSBzY29wZSB0aGF0IHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgV2luZG93LAorICAg
ICAgICAgIC8vIGV0Yy4gdGhhdCBpc24ndCBwcm90ZWN0ZWQgYnkgdGhlIGZhc3QgcGF0aHMgaW4g
JHBhcnNlLiAgV2UgZXhwbGljaXRseSByZXF1ZXN0IGJldHRlcgorICAgICAgICAgIC8vIGNoZWNr
cyBhdCB0aGUgY29zdCBvZiBzcGVlZCBzaW5jZSBldmVudCBoYW5kbGVyIGV4cHJlc3Npb25zIGFy
ZSBub3QgZXhlY3V0ZWQgYXMKKyAgICAgICAgICAvLyBmcmVxdWVudGx5IGFzIHJlZ3VsYXIgY2hh
bmdlIGRldGVjdGlvbi4KKyAgICAgICAgICB2YXIgZm4gPSAkcGFyc2UoYXR0cltkaXJlY3RpdmVO
YW1lXSwgLyogaW50ZXJjZXB0b3JGbiAqLyBudWxsLCAvKiBleHBlbnNpdmVDaGVja3MgKi8gdHJ1
ZSk7CisgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5nRXZlbnRIYW5kbGVyKHNjb3BlLCBlbGVt
ZW50KSB7CisgICAgICAgICAgICBlbGVtZW50Lm9uKGV2ZW50TmFtZSwgZnVuY3Rpb24oZXZlbnQp
IHsKKyAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgZm4oc2NvcGUsIHskZXZlbnQ6ZXZlbnR9KTsKKyAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgICAgaWYgKGZvcmNlQXN5bmNFdmVudHNbZXZlbnROYW1lXSAmJiAkcm9vdFNjb3BlLiQk
cGhhc2UpIHsKKyAgICAgICAgICAgICAgICBzY29wZS4kZXZhbEFzeW5jKGNhbGxiYWNrKTsKKyAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY29wZS4kYXBwbHkoY2FsbGJh
Y2spOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICB9OworICAg
ICAgICB9CisgICAgICB9OworICAgIH1dOworICB9CispOworCisvKioKKyAqIEBuZ2RvYyBkaXJl
Y3RpdmUKKyAqIEBuYW1lIG5nRGJsY2xpY2sKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFRoZSBg
bmdEYmxjbGlja2AgZGlyZWN0aXZlIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBjdXN0b20gYmVoYXZp
b3Igb24gYSBkYmxjbGljayBldmVudC4KKyAqCisgKiBAZWxlbWVudCBBTlkKKyAqIEBwcmlvcml0
eSAwCisgKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nRGJsY2xpY2sge0BsaW5rIGd1aWRlL2V4cHJl
c3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbHVhdGUgdXBvbgorICogYSBkYmxjbGljay4gKFRoZSBF
dmVudCBvYmplY3QgaXMgYXZhaWxhYmxlIGFzIGAkZXZlbnRgKQorICoKKyAqIEBleGFtcGxlCisg
ICA8ZXhhbXBsZT4KKyAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAgICA8YnV0dG9u
IG5nLWRibGNsaWNrPSJjb3VudCA9IGNvdW50ICsgMSIgbmctaW5pdD0iY291bnQ9MCI+CisgICAg
ICAgIEluY3JlbWVudCAob24gZG91YmxlIGNsaWNrKQorICAgICAgPC9idXR0b24+CisgICAgICBj
b3VudDoge3tjb3VudH19CisgICAgIDwvZmlsZT4KKyAgIDwvZXhhbXBsZT4KKyAqLworCisKKy8q
KgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgbmdNb3VzZWRvd24KKyAqCisgKiBAZGVz
Y3JpcHRpb24KKyAqIFRoZSBuZ01vdXNlZG93biBkaXJlY3RpdmUgYWxsb3dzIHlvdSB0byBzcGVj
aWZ5IGN1c3RvbSBiZWhhdmlvciBvbiBtb3VzZWRvd24gZXZlbnQuCisgKgorICogQGVsZW1lbnQg
QU5ZCisgKiBAcHJpb3JpdHkgMAorICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ01vdXNlZG93biB7
QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9uCisgKiBt
b3VzZWRvd24uICh7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiMtZXZlbnQtIEV2ZW50IG9iamVjdCBp
cyBhdmFpbGFibGUgYXMgYCRldmVudGB9KQorICoKKyAqIEBleGFtcGxlCisgICA8ZXhhbXBsZT4K
KyAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAgICA8YnV0dG9uIG5nLW1vdXNlZG93
bj0iY291bnQgPSBjb3VudCArIDEiIG5nLWluaXQ9ImNvdW50PTAiPgorICAgICAgICBJbmNyZW1l
bnQgKG9uIG1vdXNlIGRvd24pCisgICAgICA8L2J1dHRvbj4KKyAgICAgIGNvdW50OiB7e2NvdW50
fX0KKyAgICAgPC9maWxlPgorICAgPC9leGFtcGxlPgorICovCisKKworLyoqCisgKiBAbmdkb2Mg
ZGlyZWN0aXZlCisgKiBAbmFtZSBuZ01vdXNldXAKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFNw
ZWNpZnkgY3VzdG9tIGJlaGF2aW9yIG9uIG1vdXNldXAgZXZlbnQuCisgKgorICogQGVsZW1lbnQg
QU5ZCisgKiBAcHJpb3JpdHkgMAorICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ01vdXNldXAge0Bs
aW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbHVhdGUgdXBvbgorICogbW91
c2V1cC4gKHtAbGluayBndWlkZS9leHByZXNzaW9uIy1ldmVudC0gRXZlbnQgb2JqZWN0IGlzIGF2
YWlsYWJsZSBhcyBgJGV2ZW50YH0pCisgKgorICogQGV4YW1wbGUKKyAgIDxleGFtcGxlPgorICAg
ICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgIDxidXR0b24gbmctbW91c2V1cD0iY291
bnQgPSBjb3VudCArIDEiIG5nLWluaXQ9ImNvdW50PTAiPgorICAgICAgICBJbmNyZW1lbnQgKG9u
IG1vdXNlIHVwKQorICAgICAgPC9idXR0b24+CisgICAgICBjb3VudDoge3tjb3VudH19CisgICAg
IDwvZmlsZT4KKyAgIDwvZXhhbXBsZT4KKyAqLworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUK
KyAqIEBuYW1lIG5nTW91c2VvdmVyCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBTcGVjaWZ5IGN1
c3RvbSBiZWhhdmlvciBvbiBtb3VzZW92ZXIgZXZlbnQuCisgKgorICogQGVsZW1lbnQgQU5ZCisg
KiBAcHJpb3JpdHkgMAorICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ01vdXNlb3ZlciB7QGxpbmsg
Z3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9uCisgKiBtb3VzZW92
ZXIuICh7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiMtZXZlbnQtIEV2ZW50IG9iamVjdCBpcyBhdmFp
bGFibGUgYXMgYCRldmVudGB9KQorICoKKyAqIEBleGFtcGxlCisgICA8ZXhhbXBsZT4KKyAgICAg
PGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAgICA8YnV0dG9uIG5nLW1vdXNlb3Zlcj0iY291
bnQgPSBjb3VudCArIDEiIG5nLWluaXQ9ImNvdW50PTAiPgorICAgICAgICBJbmNyZW1lbnQgKHdo
ZW4gbW91c2UgaXMgb3ZlcikKKyAgICAgIDwvYnV0dG9uPgorICAgICAgY291bnQ6IHt7Y291bnR9
fQorICAgICA8L2ZpbGU+CisgICA8L2V4YW1wbGU+CisgKi8KKworCisvKioKKyAqIEBuZ2RvYyBk
aXJlY3RpdmUKKyAqIEBuYW1lIG5nTW91c2VlbnRlcgorICoKKyAqIEBkZXNjcmlwdGlvbgorICog
U3BlY2lmeSBjdXN0b20gYmVoYXZpb3Igb24gbW91c2VlbnRlciBldmVudC4KKyAqCisgKiBAZWxl
bWVudCBBTlkKKyAqIEBwcmlvcml0eSAwCisgKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nTW91c2Vl
bnRlciB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9u
CisgKiBtb3VzZWVudGVyLiAoe0BsaW5rIGd1aWRlL2V4cHJlc3Npb24jLWV2ZW50LSBFdmVudCBv
YmplY3QgaXMgYXZhaWxhYmxlIGFzIGAkZXZlbnRgfSkKKyAqCisgKiBAZXhhbXBsZQorICAgPGV4
YW1wbGU+CisgICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICAgPGJ1dHRvbiBuZy1t
b3VzZWVudGVyPSJjb3VudCA9IGNvdW50ICsgMSIgbmctaW5pdD0iY291bnQ9MCI+CisgICAgICAg
IEluY3JlbWVudCAod2hlbiBtb3VzZSBlbnRlcnMpCisgICAgICA8L2J1dHRvbj4KKyAgICAgIGNv
dW50OiB7e2NvdW50fX0KKyAgICAgPC9maWxlPgorICAgPC9leGFtcGxlPgorICovCisKKworLyoq
CisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBuZ01vdXNlbGVhdmUKKyAqCisgKiBAZGVz
Y3JpcHRpb24KKyAqIFNwZWNpZnkgY3VzdG9tIGJlaGF2aW9yIG9uIG1vdXNlbGVhdmUgZXZlbnQu
CisgKgorICogQGVsZW1lbnQgQU5ZCisgKiBAcHJpb3JpdHkgMAorICogQHBhcmFtIHtleHByZXNz
aW9ufSBuZ01vdXNlbGVhdmUge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8g
ZXZhbHVhdGUgdXBvbgorICogbW91c2VsZWF2ZS4gKHtAbGluayBndWlkZS9leHByZXNzaW9uIy1l
dmVudC0gRXZlbnQgb2JqZWN0IGlzIGF2YWlsYWJsZSBhcyBgJGV2ZW50YH0pCisgKgorICogQGV4
YW1wbGUKKyAgIDxleGFtcGxlPgorICAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAg
IDxidXR0b24gbmctbW91c2VsZWF2ZT0iY291bnQgPSBjb3VudCArIDEiIG5nLWluaXQ9ImNvdW50
PTAiPgorICAgICAgICBJbmNyZW1lbnQgKHdoZW4gbW91c2UgbGVhdmVzKQorICAgICAgPC9idXR0
b24+CisgICAgICBjb3VudDoge3tjb3VudH19CisgICAgIDwvZmlsZT4KKyAgIDwvZXhhbXBsZT4K
KyAqLworCisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgbmdNb3VzZW1vdmUK
KyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFNwZWNpZnkgY3VzdG9tIGJlaGF2aW9yIG9uIG1vdXNl
bW92ZSBldmVudC4KKyAqCisgKiBAZWxlbWVudCBBTlkKKyAqIEBwcmlvcml0eSAwCisgKiBAcGFy
YW0ge2V4cHJlc3Npb259IG5nTW91c2Vtb3ZlIHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJl
c3Npb259IHRvIGV2YWx1YXRlIHVwb24KKyAqIG1vdXNlbW92ZS4gKHtAbGluayBndWlkZS9leHBy
ZXNzaW9uIy1ldmVudC0gRXZlbnQgb2JqZWN0IGlzIGF2YWlsYWJsZSBhcyBgJGV2ZW50YH0pCisg
KgorICogQGV4YW1wbGUKKyAgIDxleGFtcGxlPgorICAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1s
Ij4KKyAgICAgIDxidXR0b24gbmctbW91c2Vtb3ZlPSJjb3VudCA9IGNvdW50ICsgMSIgbmctaW5p
dD0iY291bnQ9MCI+CisgICAgICAgIEluY3JlbWVudCAod2hlbiBtb3VzZSBtb3ZlcykKKyAgICAg
IDwvYnV0dG9uPgorICAgICAgY291bnQ6IHt7Y291bnR9fQorICAgICA8L2ZpbGU+CisgICA8L2V4
YW1wbGU+CisgKi8KKworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1lIG5nS2V5
ZG93bgorICoKKyAqIEBkZXNjcmlwdGlvbgorICogU3BlY2lmeSBjdXN0b20gYmVoYXZpb3Igb24g
a2V5ZG93biBldmVudC4KKyAqCisgKiBAZWxlbWVudCBBTlkKKyAqIEBwcmlvcml0eSAwCisgKiBA
cGFyYW0ge2V4cHJlc3Npb259IG5nS2V5ZG93biB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHBy
ZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9uCisgKiBrZXlkb3duLiAoRXZlbnQgb2JqZWN0IGlzIGF2
YWlsYWJsZSBhcyBgJGV2ZW50YCBhbmQgY2FuIGJlIGludGVycm9nYXRlZCBmb3Iga2V5Q29kZSwg
YWx0S2V5LCBldGMuKQorICoKKyAqIEBleGFtcGxlCisgICA8ZXhhbXBsZT4KKyAgICAgPGZpbGUg
bmFtZT0iaW5kZXguaHRtbCI+CisgICAgICA8aW5wdXQgbmcta2V5ZG93bj0iY291bnQgPSBjb3Vu
dCArIDEiIG5nLWluaXQ9ImNvdW50PTAiPgorICAgICAga2V5IGRvd24gY291bnQ6IHt7Y291bnR9
fQorICAgICA8L2ZpbGU+CisgICA8L2V4YW1wbGU+CisgKi8KKworCisvKioKKyAqIEBuZ2RvYyBk
aXJlY3RpdmUKKyAqIEBuYW1lIG5nS2V5dXAKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFNwZWNp
ZnkgY3VzdG9tIGJlaGF2aW9yIG9uIGtleXVwIGV2ZW50LgorICoKKyAqIEBlbGVtZW50IEFOWQor
ICogQHByaW9yaXR5IDAKKyAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdLZXl1cCB7QGxpbmsgZ3Vp
ZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9uCisgKiBrZXl1cC4gKEV2
ZW50IG9iamVjdCBpcyBhdmFpbGFibGUgYXMgYCRldmVudGAgYW5kIGNhbiBiZSBpbnRlcnJvZ2F0
ZWQgZm9yIGtleUNvZGUsIGFsdEtleSwgZXRjLikKKyAqCisgKiBAZXhhbXBsZQorICAgPGV4YW1w
bGU+CisgICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICAgIDxwPlR5cGluZyBpbiB0
aGUgaW5wdXQgYm94IGJlbG93IHVwZGF0ZXMgdGhlIGtleSBjb3VudDwvcD4KKyAgICAgICA8aW5w
dXQgbmcta2V5dXA9ImNvdW50ID0gY291bnQgKyAxIiBuZy1pbml0PSJjb3VudD0wIj4ga2V5IHVw
IGNvdW50OiB7e2NvdW50fX0KKworICAgICAgIDxwPlR5cGluZyBpbiB0aGUgaW5wdXQgYm94IGJl
bG93IHVwZGF0ZXMgdGhlIGtleWNvZGU8L3A+CisgICAgICAgPGlucHV0IG5nLWtleXVwPSJldmVu
dD0kZXZlbnQiPgorICAgICAgIDxwPmV2ZW50IGtleUNvZGU6IHt7IGV2ZW50LmtleUNvZGUgfX08
L3A+CisgICAgICAgPHA+ZXZlbnQgYWx0S2V5OiB7eyBldmVudC5hbHRLZXkgfX08L3A+CisgICAg
IDwvZmlsZT4KKyAgIDwvZXhhbXBsZT4KKyAqLworCisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2
ZQorICogQG5hbWUgbmdLZXlwcmVzcworICoKKyAqIEBkZXNjcmlwdGlvbgorICogU3BlY2lmeSBj
dXN0b20gYmVoYXZpb3Igb24ga2V5cHJlc3MgZXZlbnQuCisgKgorICogQGVsZW1lbnQgQU5ZCisg
KiBAcGFyYW0ge2V4cHJlc3Npb259IG5nS2V5cHJlc3Mge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24g
RXhwcmVzc2lvbn0gdG8gZXZhbHVhdGUgdXBvbgorICoga2V5cHJlc3MuICh7QGxpbmsgZ3VpZGUv
ZXhwcmVzc2lvbiMtZXZlbnQtIEV2ZW50IG9iamVjdCBpcyBhdmFpbGFibGUgYXMgYCRldmVudGB9
CisgKiBhbmQgY2FuIGJlIGludGVycm9nYXRlZCBmb3Iga2V5Q29kZSwgYWx0S2V5LCBldGMuKQor
ICoKKyAqIEBleGFtcGxlCisgICA8ZXhhbXBsZT4KKyAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRt
bCI+CisgICAgICA8aW5wdXQgbmcta2V5cHJlc3M9ImNvdW50ID0gY291bnQgKyAxIiBuZy1pbml0
PSJjb3VudD0wIj4KKyAgICAgIGtleSBwcmVzcyBjb3VudDoge3tjb3VudH19CisgICAgIDwvZmls
ZT4KKyAgIDwvZXhhbXBsZT4KKyAqLworCisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICog
QG5hbWUgbmdTdWJtaXQKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIEVuYWJsZXMgYmluZGluZyBh
bmd1bGFyIGV4cHJlc3Npb25zIHRvIG9uc3VibWl0IGV2ZW50cy4KKyAqCisgKiBBZGRpdGlvbmFs
bHkgaXQgcHJldmVudHMgdGhlIGRlZmF1bHQgYWN0aW9uICh3aGljaCBmb3IgZm9ybSBtZWFucyBz
ZW5kaW5nIHRoZSByZXF1ZXN0IHRvIHRoZQorICogc2VydmVyIGFuZCByZWxvYWRpbmcgdGhlIGN1
cnJlbnQgcGFnZSksIGJ1dCBvbmx5IGlmIHRoZSBmb3JtIGRvZXMgbm90IGNvbnRhaW4gYGFjdGlv
bmAsCisgKiBgZGF0YS1hY3Rpb25gLCBvciBgeC1hY3Rpb25gIGF0dHJpYnV0ZXMuCisgKgorICog
PGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtd2FybmluZyI+CisgKiAqKldhcm5pbmc6KiogQmUgY2Fy
ZWZ1bCBub3QgdG8gY2F1c2UgImRvdWJsZS1zdWJtaXNzaW9uIiBieSB1c2luZyBib3RoIHRoZSBg
bmdDbGlja2AgYW5kCisgKiBgbmdTdWJtaXRgIGhhbmRsZXJzIHRvZ2V0aGVyLiBTZWUgdGhlCisg
KiB7QGxpbmsgZm9ybSNzdWJtaXR0aW5nLWEtZm9ybS1hbmQtcHJldmVudGluZy10aGUtZGVmYXVs
dC1hY3Rpb24gYGZvcm1gIGRpcmVjdGl2ZSBkb2N1bWVudGF0aW9ufQorICogZm9yIGEgZGV0YWls
ZWQgZGlzY3Vzc2lvbiBvZiB3aGVuIGBuZ1N1Ym1pdGAgbWF5IGJlIHRyaWdnZXJlZC4KKyAqIDwv
ZGl2PgorICoKKyAqIEBlbGVtZW50IGZvcm0KKyAqIEBwcmlvcml0eSAwCisgKiBAcGFyYW0ge2V4
cHJlc3Npb259IG5nU3VibWl0IHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRv
IGV2YWwuCisgKiAoe0BsaW5rIGd1aWRlL2V4cHJlc3Npb24jLWV2ZW50LSBFdmVudCBvYmplY3Qg
aXMgYXZhaWxhYmxlIGFzIGAkZXZlbnRgfSkKKyAqCisgKiBAZXhhbXBsZQorICAgPGV4YW1wbGUg
bW9kdWxlPSJzdWJtaXRFeGFtcGxlIj4KKyAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+Cisg
ICAgICA8c2NyaXB0PgorICAgICAgICBhbmd1bGFyLm1vZHVsZSgnc3VibWl0RXhhbXBsZScsIFtd
KQorICAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywg
ZnVuY3Rpb24oJHNjb3BlKSB7CisgICAgICAgICAgICAkc2NvcGUubGlzdCA9IFtdOworICAgICAg
ICAgICAgJHNjb3BlLnRleHQgPSAnaGVsbG8nOworICAgICAgICAgICAgJHNjb3BlLnN1Ym1pdCA9
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICBpZiAoJHNjb3BlLnRleHQpIHsKKyAgICAgICAg
ICAgICAgICAkc2NvcGUubGlzdC5wdXNoKHRoaXMudGV4dCk7CisgICAgICAgICAgICAgICAgJHNj
b3BlLnRleHQgPSAnJzsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAg
ICB9XSk7CisgICAgICA8L3NjcmlwdD4KKyAgICAgIDxmb3JtIG5nLXN1Ym1pdD0ic3VibWl0KCki
IG5nLWNvbnRyb2xsZXI9IkV4YW1wbGVDb250cm9sbGVyIj4KKyAgICAgICAgRW50ZXIgdGV4dCBh
bmQgaGl0IGVudGVyOgorICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmctbW9kZWw9InRleHQi
IG5hbWU9InRleHQiIC8+CisgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIGlkPSJzdWJtaXQi
IHZhbHVlPSJTdWJtaXQiIC8+CisgICAgICAgIDxwcmU+bGlzdD17e2xpc3R9fTwvcHJlPgorICAg
ICAgPC9mb3JtPgorICAgICA8L2ZpbGU+CisgICAgIDxmaWxlIG5hbWU9InByb3RyYWN0b3IuanMi
IHR5cGU9InByb3RyYWN0b3IiPgorICAgICAgIGl0KCdzaG91bGQgY2hlY2sgbmctc3VibWl0Jywg
ZnVuY3Rpb24oKSB7CisgICAgICAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKCdsaXN0Jykp
LmdldFRleHQoKSkudG9CZSgnbGlzdD1bXScpOworICAgICAgICAgZWxlbWVudChieS5jc3MoJyNz
dWJtaXQnKSkuY2xpY2soKTsKKyAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmJpbmRpbmcoJ2xp
c3QnKSkuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ2hlbGxvJyk7CisgICAgICAgICBleHBlY3QoZWxl
bWVudChieS5tb2RlbCgndGV4dCcpKS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpLnRvQmUoJycpOwor
ICAgICAgIH0pOworICAgICAgIGl0KCdzaG91bGQgaWdub3JlIGVtcHR5IHN0cmluZ3MnLCBmdW5j
dGlvbigpIHsKKyAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmJpbmRpbmcoJ2xpc3QnKSkuZ2V0
VGV4dCgpKS50b0JlKCdsaXN0PVtdJyk7CisgICAgICAgICBlbGVtZW50KGJ5LmNzcygnI3N1Ym1p
dCcpKS5jbGljaygpOworICAgICAgICAgZWxlbWVudChieS5jc3MoJyNzdWJtaXQnKSkuY2xpY2so
KTsKKyAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmJpbmRpbmcoJ2xpc3QnKSkuZ2V0VGV4dCgp
KS50b0NvbnRhaW4oJ2hlbGxvJyk7CisgICAgICAgIH0pOworICAgICA8L2ZpbGU+CisgICA8L2V4
YW1wbGU+CisgKi8KKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBuZ0ZvY3Vz
CisgKgorICogQGRlc2NyaXB0aW9uCisgKiBTcGVjaWZ5IGN1c3RvbSBiZWhhdmlvciBvbiBmb2N1
cyBldmVudC4KKyAqCisgKiBOb3RlOiBBcyB0aGUgYGZvY3VzYCBldmVudCBpcyBleGVjdXRlZCBz
eW5jaHJvbm91c2x5IHdoZW4gY2FsbGluZyBgaW5wdXQuZm9jdXMoKWAKKyAqIEFuZ3VsYXJKUyBl
eGVjdXRlcyB0aGUgZXhwcmVzc2lvbiB1c2luZyBgc2NvcGUuJGV2YWxBc3luY2AgaWYgdGhlIGV2
ZW50IGlzIGZpcmVkCisgKiBkdXJpbmcgYW4gYCRhcHBseWAgdG8gZW5zdXJlIGEgY29uc2lzdGVu
dCBzdGF0ZS4KKyAqCisgKiBAZWxlbWVudCB3aW5kb3csIGlucHV0LCBzZWxlY3QsIHRleHRhcmVh
LCBhCisgKiBAcHJpb3JpdHkgMAorICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ0ZvY3VzIHtAbGlu
ayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWx1YXRlIHVwb24KKyAqIGZvY3Vz
LiAoe0BsaW5rIGd1aWRlL2V4cHJlc3Npb24jLWV2ZW50LSBFdmVudCBvYmplY3QgaXMgYXZhaWxh
YmxlIGFzIGAkZXZlbnRgfSkKKyAqCisgKiBAZXhhbXBsZQorICogU2VlIHtAbGluayBuZy5kaXJl
Y3RpdmU6bmdDbGljayBuZ0NsaWNrfQorICovCisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQor
ICogQG5hbWUgbmdCbHVyCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBTcGVjaWZ5IGN1c3RvbSBi
ZWhhdmlvciBvbiBibHVyIGV2ZW50LgorICoKKyAqIEEgW2JsdXIgZXZlbnRdKGh0dHBzOi8vZGV2
ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0V2ZW50cy9ibHVyKSBmaXJlcyB3aGVu
CisgKiBhbiBlbGVtZW50IGhhcyBsb3N0IGZvY3VzLgorICoKKyAqIE5vdGU6IEFzIHRoZSBgYmx1
cmAgZXZlbnQgaXMgZXhlY3V0ZWQgc3luY2hyb25vdXNseSBhbHNvIGR1cmluZyBET00gbWFuaXB1
bGF0aW9ucworICogKGUuZy4gcmVtb3ZpbmcgYSBmb2N1c3NlZCBpbnB1dCksCisgKiBBbmd1bGFy
SlMgZXhlY3V0ZXMgdGhlIGV4cHJlc3Npb24gdXNpbmcgYHNjb3BlLiRldmFsQXN5bmNgIGlmIHRo
ZSBldmVudCBpcyBmaXJlZAorICogZHVyaW5nIGFuIGAkYXBwbHlgIHRvIGVuc3VyZSBhIGNvbnNp
c3RlbnQgc3RhdGUuCisgKgorICogQGVsZW1lbnQgd2luZG93LCBpbnB1dCwgc2VsZWN0LCB0ZXh0
YXJlYSwgYQorICogQHByaW9yaXR5IDAKKyAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdCbHVyIHtA
bGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWx1YXRlIHVwb24KKyAqIGJs
dXIuICh7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiMtZXZlbnQtIEV2ZW50IG9iamVjdCBpcyBhdmFp
bGFibGUgYXMgYCRldmVudGB9KQorICoKKyAqIEBleGFtcGxlCisgKiBTZWUge0BsaW5rIG5nLmRp
cmVjdGl2ZTpuZ0NsaWNrIG5nQ2xpY2t9CisgKi8KKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZl
CisgKiBAbmFtZSBuZ0NvcHkKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFNwZWNpZnkgY3VzdG9t
IGJlaGF2aW9yIG9uIGNvcHkgZXZlbnQuCisgKgorICogQGVsZW1lbnQgd2luZG93LCBpbnB1dCwg
c2VsZWN0LCB0ZXh0YXJlYSwgYQorICogQHByaW9yaXR5IDAKKyAqIEBwYXJhbSB7ZXhwcmVzc2lv
bn0gbmdDb3B5IHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWx1YXRl
IHVwb24KKyAqIGNvcHkuICh7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiMtZXZlbnQtIEV2ZW50IG9i
amVjdCBpcyBhdmFpbGFibGUgYXMgYCRldmVudGB9KQorICoKKyAqIEBleGFtcGxlCisgICA8ZXhh
bXBsZT4KKyAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAgICA8aW5wdXQgbmctY29w
eT0iY29waWVkPXRydWUiIG5nLWluaXQ9ImNvcGllZD1mYWxzZTsgdmFsdWU9J2NvcHkgbWUnIiBu
Zy1tb2RlbD0idmFsdWUiPgorICAgICAgY29waWVkOiB7e2NvcGllZH19CisgICAgIDwvZmlsZT4K
KyAgIDwvZXhhbXBsZT4KKyAqLworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1l
IG5nQ3V0CisgKgorICogQGRlc2NyaXB0aW9uCisgKiBTcGVjaWZ5IGN1c3RvbSBiZWhhdmlvciBv
biBjdXQgZXZlbnQuCisgKgorICogQGVsZW1lbnQgd2luZG93LCBpbnB1dCwgc2VsZWN0LCB0ZXh0
YXJlYSwgYQorICogQHByaW9yaXR5IDAKKyAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdDdXQge0Bs
aW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbHVhdGUgdXBvbgorICogY3V0
LiAoe0BsaW5rIGd1aWRlL2V4cHJlc3Npb24jLWV2ZW50LSBFdmVudCBvYmplY3QgaXMgYXZhaWxh
YmxlIGFzIGAkZXZlbnRgfSkKKyAqCisgKiBAZXhhbXBsZQorICAgPGV4YW1wbGU+CisgICAgIDxm
aWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICAgPGlucHV0IG5nLWN1dD0iY3V0PXRydWUiIG5n
LWluaXQ9ImN1dD1mYWxzZTsgdmFsdWU9J2N1dCBtZSciIG5nLW1vZGVsPSJ2YWx1ZSI+CisgICAg
ICBjdXQ6IHt7Y3V0fX0KKyAgICAgPC9maWxlPgorICAgPC9leGFtcGxlPgorICovCisKKy8qKgor
ICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgbmdQYXN0ZQorICoKKyAqIEBkZXNjcmlwdGlv
bgorICogU3BlY2lmeSBjdXN0b20gYmVoYXZpb3Igb24gcGFzdGUgZXZlbnQuCisgKgorICogQGVs
ZW1lbnQgd2luZG93LCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYQorICogQHByaW9yaXR5IDAK
KyAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdQYXN0ZSB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBF
eHByZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9uCisgKiBwYXN0ZS4gKHtAbGluayBndWlkZS9leHBy
ZXNzaW9uIy1ldmVudC0gRXZlbnQgb2JqZWN0IGlzIGF2YWlsYWJsZSBhcyBgJGV2ZW50YH0pCisg
KgorICogQGV4YW1wbGUKKyAgIDxleGFtcGxlPgorICAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1s
Ij4KKyAgICAgIDxpbnB1dCBuZy1wYXN0ZT0icGFzdGU9dHJ1ZSIgbmctaW5pdD0icGFzdGU9ZmFs
c2UiIHBsYWNlaG9sZGVyPSdwYXN0ZSBoZXJlJz4KKyAgICAgIHBhc3RlZDoge3twYXN0ZX19Cisg
ICAgIDwvZmlsZT4KKyAgIDwvZXhhbXBsZT4KKyAqLworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3Rp
dmUKKyAqIEBuYW1lIG5nSWYKKyAqIEByZXN0cmljdCBBCisgKiBAbXVsdGlFbGVtZW50CisgKgor
ICogQGRlc2NyaXB0aW9uCisgKiBUaGUgYG5nSWZgIGRpcmVjdGl2ZSByZW1vdmVzIG9yIHJlY3Jl
YXRlcyBhIHBvcnRpb24gb2YgdGhlIERPTSB0cmVlIGJhc2VkIG9uIGFuCisgKiB7ZXhwcmVzc2lv
bn0uIElmIHRoZSBleHByZXNzaW9uIGFzc2lnbmVkIHRvIGBuZ0lmYCBldmFsdWF0ZXMgdG8gYSBm
YWxzZQorICogdmFsdWUgdGhlbiB0aGUgZWxlbWVudCBpcyByZW1vdmVkIGZyb20gdGhlIERPTSwg
b3RoZXJ3aXNlIGEgY2xvbmUgb2YgdGhlCisgKiBlbGVtZW50IGlzIHJlaW5zZXJ0ZWQgaW50byB0
aGUgRE9NLgorICoKKyAqIGBuZ0lmYCBkaWZmZXJzIGZyb20gYG5nU2hvd2AgYW5kIGBuZ0hpZGVg
IGluIHRoYXQgYG5nSWZgIGNvbXBsZXRlbHkgcmVtb3ZlcyBhbmQgcmVjcmVhdGVzIHRoZQorICog
ZWxlbWVudCBpbiB0aGUgRE9NIHJhdGhlciB0aGFuIGNoYW5naW5nIGl0cyB2aXNpYmlsaXR5IHZp
YSB0aGUgYGRpc3BsYXlgIGNzcyBwcm9wZXJ0eS4gIEEgY29tbW9uCisgKiBjYXNlIHdoZW4gdGhp
cyBkaWZmZXJlbmNlIGlzIHNpZ25pZmljYW50IGlzIHdoZW4gdXNpbmcgY3NzIHNlbGVjdG9ycyB0
aGF0IHJlbHkgb24gYW4gZWxlbWVudCdzCisgKiBwb3NpdGlvbiB3aXRoaW4gdGhlIERPTSwgc3Vj
aCBhcyB0aGUgYDpmaXJzdC1jaGlsZGAgb3IgYDpsYXN0LWNoaWxkYCBwc2V1ZG8tY2xhc3Nlcy4K
KyAqCisgKiBOb3RlIHRoYXQgd2hlbiBhbiBlbGVtZW50IGlzIHJlbW92ZWQgdXNpbmcgYG5nSWZg
IGl0cyBzY29wZSBpcyBkZXN0cm95ZWQgYW5kIGEgbmV3IHNjb3BlCisgKiBpcyBjcmVhdGVkIHdo
ZW4gdGhlIGVsZW1lbnQgaXMgcmVzdG9yZWQuICBUaGUgc2NvcGUgY3JlYXRlZCB3aXRoaW4gYG5n
SWZgIGluaGVyaXRzIGZyb20KKyAqIGl0cyBwYXJlbnQgc2NvcGUgdXNpbmcKKyAqIFtwcm90b3R5
cGFsIGluaGVyaXRhbmNlXShodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyLmpzL3dp
a2kvVW5kZXJzdGFuZGluZy1TY29wZXMjamF2YXNjcmlwdC1wcm90b3R5cGFsLWluaGVyaXRhbmNl
KS4KKyAqIEFuIGltcG9ydGFudCBpbXBsaWNhdGlvbiBvZiB0aGlzIGlzIGlmIGBuZ01vZGVsYCBp
cyB1c2VkIHdpdGhpbiBgbmdJZmAgdG8gYmluZCB0bworICogYSBqYXZhc2NyaXB0IHByaW1pdGl2
ZSBkZWZpbmVkIGluIHRoZSBwYXJlbnQgc2NvcGUuIEluIHRoaXMgY2FzZSBhbnkgbW9kaWZpY2F0
aW9ucyBtYWRlIHRvIHRoZQorICogdmFyaWFibGUgd2l0aGluIHRoZSBjaGlsZCBzY29wZSB3aWxs
IG92ZXJyaWRlIChoaWRlKSB0aGUgdmFsdWUgaW4gdGhlIHBhcmVudCBzY29wZS4KKyAqCisgKiBB
bHNvLCBgbmdJZmAgcmVjcmVhdGVzIGVsZW1lbnRzIHVzaW5nIHRoZWlyIGNvbXBpbGVkIHN0YXRl
LiBBbiBleGFtcGxlIG9mIHRoaXMgYmVoYXZpb3IKKyAqIGlzIGlmIGFuIGVsZW1lbnQncyBjbGFz
cyBhdHRyaWJ1dGUgaXMgZGlyZWN0bHkgbW9kaWZpZWQgYWZ0ZXIgaXQncyBjb21waWxlZCwgdXNp
bmcgc29tZXRoaW5nIGxpa2UKKyAqIGpRdWVyeSdzIGAuYWRkQ2xhc3MoKWAgbWV0aG9kLCBhbmQg
dGhlIGVsZW1lbnQgaXMgbGF0ZXIgcmVtb3ZlZC4gV2hlbiBgbmdJZmAgcmVjcmVhdGVzIHRoZSBl
bGVtZW50CisgKiB0aGUgYWRkZWQgY2xhc3Mgd2lsbCBiZSBsb3N0IGJlY2F1c2UgdGhlIG9yaWdp
bmFsIGNvbXBpbGVkIHN0YXRlIGlzIHVzZWQgdG8gcmVnZW5lcmF0ZSB0aGUgZWxlbWVudC4KKyAq
CisgKiBBZGRpdGlvbmFsbHksIHlvdSBjYW4gcHJvdmlkZSBhbmltYXRpb25zIHZpYSB0aGUgYG5n
QW5pbWF0ZWAgbW9kdWxlIHRvIGFuaW1hdGUgdGhlIGBlbnRlcmAKKyAqIGFuZCBgbGVhdmVgIGVm
ZmVjdHMuCisgKgorICogQGFuaW1hdGlvbnMKKyAqIGVudGVyIC0gaGFwcGVucyBqdXN0IGFmdGVy
IHRoZSBgbmdJZmAgY29udGVudHMgY2hhbmdlIGFuZCBhIG5ldyBET00gZWxlbWVudCBpcyBjcmVh
dGVkIGFuZCBpbmplY3RlZCBpbnRvIHRoZSBgbmdJZmAgY29udGFpbmVyCisgKiBsZWF2ZSAtIGhh
cHBlbnMganVzdCBiZWZvcmUgdGhlIGBuZ0lmYCBjb250ZW50cyBhcmUgcmVtb3ZlZCBmcm9tIHRo
ZSBET00KKyAqCisgKiBAZWxlbWVudCBBTlkKKyAqIEBzY29wZQorICogQHByaW9yaXR5IDYwMAor
ICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ0lmIElmIHRoZSB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lv
biBleHByZXNzaW9ufSBpcyBmYWxzeSB0aGVuCisgKiAgICAgdGhlIGVsZW1lbnQgaXMgcmVtb3Zl
ZCBmcm9tIHRoZSBET00gdHJlZS4gSWYgaXQgaXMgdHJ1dGh5IGEgY29weSBvZiB0aGUgY29tcGls
ZWQKKyAqICAgICBlbGVtZW50IGlzIGFkZGVkIHRvIHRoZSBET00gdHJlZS4KKyAqCisgKiBAZXhh
bXBsZQorICA8ZXhhbXBsZSBtb2R1bGU9Im5nQW5pbWF0ZSIgZGVwcz0iYW5ndWxhci1hbmltYXRl
LmpzIiBhbmltYXRpb25zPSJ0cnVlIj4KKyAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAg
ICAgIDxsYWJlbD5DbGljayBtZTogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuZy1tb2RlbD0iY2hl
Y2tlZCIgbmctaW5pdD0iY2hlY2tlZD10cnVlIiAvPjwvbGFiZWw+PGJyLz4KKyAgICAgIFNob3cg
d2hlbiBjaGVja2VkOgorICAgICAgPHNwYW4gbmctaWY9ImNoZWNrZWQiIGNsYXNzPSJhbmltYXRl
LWlmIj4KKyAgICAgICAgVGhpcyBpcyByZW1vdmVkIHdoZW4gdGhlIGNoZWNrYm94IGlzIHVuY2hl
Y2tlZC4KKyAgICAgIDwvc3Bhbj4KKyAgICA8L2ZpbGU+CisgICAgPGZpbGUgbmFtZT0iYW5pbWF0
aW9ucy5jc3MiPgorICAgICAgLmFuaW1hdGUtaWYgeworICAgICAgICBiYWNrZ3JvdW5kOndoaXRl
OworICAgICAgICBib3JkZXI6MXB4IHNvbGlkIGJsYWNrOworICAgICAgICBwYWRkaW5nOjEwcHg7
CisgICAgICB9CisKKyAgICAgIC5hbmltYXRlLWlmLm5nLWVudGVyLCAuYW5pbWF0ZS1pZi5uZy1s
ZWF2ZSB7CisgICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjphbGwgY3ViaWMtYmV6aWVyKDAuMjUw
LCAwLjQ2MCwgMC40NTAsIDAuOTQwKSAwLjVzOworICAgICAgICB0cmFuc2l0aW9uOmFsbCBjdWJp
Yy1iZXppZXIoMC4yNTAsIDAuNDYwLCAwLjQ1MCwgMC45NDApIDAuNXM7CisgICAgICB9CisKKyAg
ICAgIC5hbmltYXRlLWlmLm5nLWVudGVyLAorICAgICAgLmFuaW1hdGUtaWYubmctbGVhdmUubmct
bGVhdmUtYWN0aXZlIHsKKyAgICAgICAgb3BhY2l0eTowOworICAgICAgfQorCisgICAgICAuYW5p
bWF0ZS1pZi5uZy1sZWF2ZSwKKyAgICAgIC5hbmltYXRlLWlmLm5nLWVudGVyLm5nLWVudGVyLWFj
dGl2ZSB7CisgICAgICAgIG9wYWNpdHk6MTsKKyAgICAgIH0KKyAgICA8L2ZpbGU+CisgIDwvZXhh
bXBsZT4KKyAqLwordmFyIG5nSWZEaXJlY3RpdmUgPSBbJyRhbmltYXRlJywgZnVuY3Rpb24oJGFu
aW1hdGUpIHsKKyAgcmV0dXJuIHsKKyAgICBtdWx0aUVsZW1lbnQ6IHRydWUsCisgICAgdHJhbnNj
bHVkZTogJ2VsZW1lbnQnLAorICAgIHByaW9yaXR5OiA2MDAsCisgICAgdGVybWluYWw6IHRydWUs
CisgICAgcmVzdHJpY3Q6ICdBJywKKyAgICAkJHRsYjogdHJ1ZSwKKyAgICBsaW5rOiBmdW5jdGlv
bigkc2NvcGUsICRlbGVtZW50LCAkYXR0ciwgY3RybCwgJHRyYW5zY2x1ZGUpIHsKKyAgICAgICAg
dmFyIGJsb2NrLCBjaGlsZFNjb3BlLCBwcmV2aW91c0VsZW1lbnRzOworICAgICAgICAkc2NvcGUu
JHdhdGNoKCRhdHRyLm5nSWYsIGZ1bmN0aW9uIG5nSWZXYXRjaEFjdGlvbih2YWx1ZSkgeworCisg
ICAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICBpZiAoIWNoaWxkU2NvcGUpIHsKKyAg
ICAgICAgICAgICAgJHRyYW5zY2x1ZGUoZnVuY3Rpb24oY2xvbmUsIG5ld1Njb3BlKSB7CisgICAg
ICAgICAgICAgICAgY2hpbGRTY29wZSA9IG5ld1Njb3BlOworICAgICAgICAgICAgICAgIGNsb25l
W2Nsb25lLmxlbmd0aCsrXSA9IGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoJyBlbmQgbmdJZjogJyAr
ICRhdHRyLm5nSWYgKyAnICcpOworICAgICAgICAgICAgICAgIC8vIE5vdGU6IFdlIG9ubHkgbmVl
ZCB0aGUgZmlyc3QvbGFzdCBub2RlIG9mIHRoZSBjbG9uZWQgbm9kZXMuCisgICAgICAgICAgICAg
ICAgLy8gSG93ZXZlciwgd2UgbmVlZCB0byBrZWVwIHRoZSByZWZlcmVuY2UgdG8gdGhlIGpxbGl0
ZSB3cmFwcGVyIGFzIGl0IG1pZ2h0IGJlIGNoYW5nZWQgbGF0ZXIKKyAgICAgICAgICAgICAgICAv
LyBieSBhIGRpcmVjdGl2ZSB3aXRoIHRlbXBsYXRlVXJsIHdoZW4gaXRzIHRlbXBsYXRlIGFycml2
ZXMuCisgICAgICAgICAgICAgICAgYmxvY2sgPSB7CisgICAgICAgICAgICAgICAgICBjbG9uZTog
Y2xvbmUKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICRhbmltYXRlLmVudGVy
KGNsb25lLCAkZWxlbWVudC5wYXJlbnQoKSwgJGVsZW1lbnQpOworICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHByZXZp
b3VzRWxlbWVudHMpIHsKKyAgICAgICAgICAgICAgcHJldmlvdXNFbGVtZW50cy5yZW1vdmUoKTsK
KyAgICAgICAgICAgICAgcHJldmlvdXNFbGVtZW50cyA9IG51bGw7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoY2hpbGRTY29wZSkgeworICAgICAgICAgICAgICBjaGlsZFNjb3BlLiRk
ZXN0cm95KCk7CisgICAgICAgICAgICAgIGNoaWxkU2NvcGUgPSBudWxsOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKGJsb2NrKSB7CisgICAgICAgICAgICAgIHByZXZpb3VzRWxlbWVu
dHMgPSBnZXRCbG9ja05vZGVzKGJsb2NrLmNsb25lKTsKKyAgICAgICAgICAgICAgJGFuaW1hdGUu
bGVhdmUocHJldmlvdXNFbGVtZW50cykudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICBwcmV2aW91c0VsZW1lbnRzID0gbnVsbDsKKyAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICAgIGJsb2NrID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0p
OworICAgIH0KKyAgfTsKK31dOworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1l
IG5nSW5jbHVkZQorICogQHJlc3RyaWN0IEVDQQorICoKKyAqIEBkZXNjcmlwdGlvbgorICogRmV0
Y2hlcywgY29tcGlsZXMgYW5kIGluY2x1ZGVzIGFuIGV4dGVybmFsIEhUTUwgZnJhZ21lbnQuCisg
KgorICogQnkgZGVmYXVsdCwgdGhlIHRlbXBsYXRlIFVSTCBpcyByZXN0cmljdGVkIHRvIHRoZSBz
YW1lIGRvbWFpbiBhbmQgcHJvdG9jb2wgYXMgdGhlCisgKiBhcHBsaWNhdGlvbiBkb2N1bWVudC4g
VGhpcyBpcyBkb25lIGJ5IGNhbGxpbmcge0BsaW5rICRzY2UjZ2V0VHJ1c3RlZFJlc291cmNlVXJs
CisgKiAkc2NlLmdldFRydXN0ZWRSZXNvdXJjZVVybH0gb24gaXQuIFRvIGxvYWQgdGVtcGxhdGVz
IGZyb20gb3RoZXIgZG9tYWlucyBvciBwcm90b2NvbHMKKyAqIHlvdSBtYXkgZWl0aGVyIHtAbGlu
ayBuZy4kc2NlRGVsZWdhdGVQcm92aWRlciNyZXNvdXJjZVVybFdoaXRlbGlzdCB3aGl0ZWxpc3Qg
dGhlbX0gb3IKKyAqIHtAbGluayAkc2NlI3RydXN0QXNSZXNvdXJjZVVybCB3cmFwIHRoZW19IGFz
IHRydXN0ZWQgdmFsdWVzLiBSZWZlciB0byBBbmd1bGFyJ3Mge0BsaW5rCisgKiBuZy4kc2NlIFN0
cmljdCBDb250ZXh0dWFsIEVzY2FwaW5nfS4KKyAqCisgKiBJbiBhZGRpdGlvbiwgdGhlIGJyb3dz
ZXIncworICogW1NhbWUgT3JpZ2luIFBvbGljeV0oaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9i
cm93c2Vyc2VjL3dpa2kvUGFydDIjU2FtZS1vcmlnaW5fcG9saWN5X2Zvcl9YTUxIdHRwUmVxdWVz
dCkKKyAqIGFuZCBbQ3Jvc3MtT3JpZ2luIFJlc291cmNlIFNoYXJpbmcgKENPUlMpXShodHRwOi8v
d3d3LnczLm9yZy9UUi9jb3JzLykKKyAqIHBvbGljeSBtYXkgZnVydGhlciByZXN0cmljdCB3aGV0
aGVyIHRoZSB0ZW1wbGF0ZSBpcyBzdWNjZXNzZnVsbHkgbG9hZGVkLgorICogRm9yIGV4YW1wbGUs
IGBuZ0luY2x1ZGVgIHdvbid0IHdvcmsgZm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cyBvbiBhbGwg
YnJvd3NlcnMgYW5kIGZvciBgZmlsZTovL2AKKyAqIGFjY2VzcyBvbiBzb21lIGJyb3dzZXJzLgor
ICoKKyAqIEBhbmltYXRpb25zCisgKiBlbnRlciAtIGFuaW1hdGlvbiBpcyB1c2VkIHRvIGJyaW5n
IG5ldyBjb250ZW50IGludG8gdGhlIGJyb3dzZXIuCisgKiBsZWF2ZSAtIGFuaW1hdGlvbiBpcyB1
c2VkIHRvIGFuaW1hdGUgZXhpc3RpbmcgY29udGVudCBhd2F5LgorICoKKyAqIFRoZSBlbnRlciBh
bmQgbGVhdmUgYW5pbWF0aW9uIG9jY3VyIGNvbmN1cnJlbnRseS4KKyAqCisgKiBAc2NvcGUKKyAq
IEBwcmlvcml0eSA0MDAKKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gbmdJbmNsdWRlfHNyYyBhbmd1
bGFyIGV4cHJlc3Npb24gZXZhbHVhdGluZyB0byBVUkwuIElmIHRoZSBzb3VyY2UgaXMgYSBzdHJp
bmcgY29uc3RhbnQsCisgKiAgICAgICAgICAgICAgICAgbWFrZSBzdXJlIHlvdSB3cmFwIGl0IGlu
ICoqc2luZ2xlKiogcXVvdGVzLCBlLmcuIGBzcmM9IidteVBhcnRpYWxUZW1wbGF0ZS5odG1sJyJg
LgorICogQHBhcmFtIHtzdHJpbmc9fSBvbmxvYWQgRXhwcmVzc2lvbiB0byBldmFsdWF0ZSB3aGVu
IGEgbmV3IHBhcnRpYWwgaXMgbG9hZGVkLgorICoKKyAqIEBwYXJhbSB7c3RyaW5nPX0gYXV0b3Nj
cm9sbCBXaGV0aGVyIGBuZ0luY2x1ZGVgIHNob3VsZCBjYWxsIHtAbGluayBuZy4kYW5jaG9yU2Ny
b2xsCisgKiAgICAgICAgICAgICAgICAgICRhbmNob3JTY3JvbGx9IHRvIHNjcm9sbCB0aGUgdmll
d3BvcnQgYWZ0ZXIgdGhlIGNvbnRlbnQgaXMgbG9hZGVkLgorICoKKyAqICAgICAgICAgICAgICAg
ICAgLSBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzZXQsIGRpc2FibGUgc2Nyb2xsaW5nLgorICog
ICAgICAgICAgICAgICAgICAtIElmIHRoZSBhdHRyaWJ1dGUgaXMgc2V0IHdpdGhvdXQgdmFsdWUs
IGVuYWJsZSBzY3JvbGxpbmcuCisgKiAgICAgICAgICAgICAgICAgIC0gT3RoZXJ3aXNlIGVuYWJs
ZSBzY3JvbGxpbmcgb25seSBpZiB0aGUgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gdHJ1dGh5IHZh
bHVlLgorICoKKyAqIEBleGFtcGxlCisgIDxleGFtcGxlIG1vZHVsZT0iaW5jbHVkZUV4YW1wbGUi
IGRlcHM9ImFuZ3VsYXItYW5pbWF0ZS5qcyIgYW5pbWF0aW9ucz0idHJ1ZSI+CisgICAgPGZpbGUg
bmFtZT0iaW5kZXguaHRtbCI+CisgICAgIDxkaXYgbmctY29udHJvbGxlcj0iRXhhbXBsZUNvbnRy
b2xsZXIiPgorICAgICAgIDxzZWxlY3QgbmctbW9kZWw9InRlbXBsYXRlIiBuZy1vcHRpb25zPSJ0
Lm5hbWUgZm9yIHQgaW4gdGVtcGxhdGVzIj4KKyAgICAgICAgPG9wdGlvbiB2YWx1ZT0iIj4oYmxh
bmspPC9vcHRpb24+CisgICAgICAgPC9zZWxlY3Q+CisgICAgICAgdXJsIG9mIHRoZSB0ZW1wbGF0
ZTogPGNvZGU+e3t0ZW1wbGF0ZS51cmx9fTwvY29kZT4KKyAgICAgICA8aHIvPgorICAgICAgIDxk
aXYgY2xhc3M9InNsaWRlLWFuaW1hdGUtY29udGFpbmVyIj4KKyAgICAgICAgIDxkaXYgY2xhc3M9
InNsaWRlLWFuaW1hdGUiIG5nLWluY2x1ZGU9InRlbXBsYXRlLnVybCI+PC9kaXY+CisgICAgICAg
PC9kaXY+CisgICAgIDwvZGl2PgorICAgIDwvZmlsZT4KKyAgICA8ZmlsZSBuYW1lPSJzY3JpcHQu
anMiPgorICAgICAgYW5ndWxhci5tb2R1bGUoJ2luY2x1ZGVFeGFtcGxlJywgWyduZ0FuaW1hdGUn
XSkKKyAgICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBm
dW5jdGlvbigkc2NvcGUpIHsKKyAgICAgICAgICAkc2NvcGUudGVtcGxhdGVzID0KKyAgICAgICAg
ICAgIFsgeyBuYW1lOiAndGVtcGxhdGUxLmh0bWwnLCB1cmw6ICd0ZW1wbGF0ZTEuaHRtbCd9LAor
ICAgICAgICAgICAgICB7IG5hbWU6ICd0ZW1wbGF0ZTIuaHRtbCcsIHVybDogJ3RlbXBsYXRlMi5o
dG1sJ30gXTsKKyAgICAgICAgICAkc2NvcGUudGVtcGxhdGUgPSAkc2NvcGUudGVtcGxhdGVzWzBd
OworICAgICAgICB9XSk7CisgICAgIDwvZmlsZT4KKyAgICA8ZmlsZSBuYW1lPSJ0ZW1wbGF0ZTEu
aHRtbCI+CisgICAgICBDb250ZW50IG9mIHRlbXBsYXRlMS5odG1sCisgICAgPC9maWxlPgorICAg
IDxmaWxlIG5hbWU9InRlbXBsYXRlMi5odG1sIj4KKyAgICAgIENvbnRlbnQgb2YgdGVtcGxhdGUy
Lmh0bWwKKyAgICA8L2ZpbGU+CisgICAgPGZpbGUgbmFtZT0iYW5pbWF0aW9ucy5jc3MiPgorICAg
ICAgLnNsaWRlLWFuaW1hdGUtY29udGFpbmVyIHsKKyAgICAgICAgcG9zaXRpb246cmVsYXRpdmU7
CisgICAgICAgIGJhY2tncm91bmQ6d2hpdGU7CisgICAgICAgIGJvcmRlcjoxcHggc29saWQgYmxh
Y2s7CisgICAgICAgIGhlaWdodDo0MHB4OworICAgICAgICBvdmVyZmxvdzpoaWRkZW47CisgICAg
ICB9CisKKyAgICAgIC5zbGlkZS1hbmltYXRlIHsKKyAgICAgICAgcGFkZGluZzoxMHB4OworICAg
ICAgfQorCisgICAgICAuc2xpZGUtYW5pbWF0ZS5uZy1lbnRlciwgLnNsaWRlLWFuaW1hdGUubmct
bGVhdmUgeworICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246YWxsIGN1YmljLWJlemllcigwLjI1
MCwgMC40NjAsIDAuNDUwLCAwLjk0MCkgMC41czsKKyAgICAgICAgdHJhbnNpdGlvbjphbGwgY3Vi
aWMtYmV6aWVyKDAuMjUwLCAwLjQ2MCwgMC40NTAsIDAuOTQwKSAwLjVzOworCisgICAgICAgIHBv
c2l0aW9uOmFic29sdXRlOworICAgICAgICB0b3A6MDsKKyAgICAgICAgbGVmdDowOworICAgICAg
ICByaWdodDowOworICAgICAgICBib3R0b206MDsKKyAgICAgICAgZGlzcGxheTpibG9jazsKKyAg
ICAgICAgcGFkZGluZzoxMHB4OworICAgICAgfQorCisgICAgICAuc2xpZGUtYW5pbWF0ZS5uZy1l
bnRlciB7CisgICAgICAgIHRvcDotNTBweDsKKyAgICAgIH0KKyAgICAgIC5zbGlkZS1hbmltYXRl
Lm5nLWVudGVyLm5nLWVudGVyLWFjdGl2ZSB7CisgICAgICAgIHRvcDowOworICAgICAgfQorCisg
ICAgICAuc2xpZGUtYW5pbWF0ZS5uZy1sZWF2ZSB7CisgICAgICAgIHRvcDowOworICAgICAgfQor
ICAgICAgLnNsaWRlLWFuaW1hdGUubmctbGVhdmUubmctbGVhdmUtYWN0aXZlIHsKKyAgICAgICAg
dG9wOjUwcHg7CisgICAgICB9CisgICAgPC9maWxlPgorICAgIDxmaWxlIG5hbWU9InByb3RyYWN0
b3IuanMiIHR5cGU9InByb3RyYWN0b3IiPgorICAgICAgdmFyIHRlbXBsYXRlU2VsZWN0ID0gZWxl
bWVudChieS5tb2RlbCgndGVtcGxhdGUnKSk7CisgICAgICB2YXIgaW5jbHVkZUVsZW0gPSBlbGVt
ZW50KGJ5LmNzcygnW25nLWluY2x1ZGVdJykpOworCisgICAgICBpdCgnc2hvdWxkIGxvYWQgdGVt
cGxhdGUxLmh0bWwnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgZXhwZWN0KGluY2x1ZGVFbGVtLmdl
dFRleHQoKSkudG9NYXRjaCgvQ29udGVudCBvZiB0ZW1wbGF0ZTEuaHRtbC8pOworICAgICAgfSk7
CisKKyAgICAgIGl0KCdzaG91bGQgbG9hZCB0ZW1wbGF0ZTIuaHRtbCcsIGZ1bmN0aW9uKCkgewor
ICAgICAgICBpZiAoYnJvd3Nlci5wYXJhbXMuYnJvd3NlciA9PSAnZmlyZWZveCcpIHsKKyAgICAg
ICAgICAvLyBGaXJlZm94IGNhbid0IGhhbmRsZSB1c2luZyBzZWxlY3RzCisgICAgICAgICAgLy8g
U2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL3Byb3RyYWN0b3IvaXNzdWVzLzQ4MAorICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0ZW1wbGF0ZVNlbGVjdC5jbGljaygp
OworICAgICAgICB0ZW1wbGF0ZVNlbGVjdC5hbGwoYnkuY3NzKCdvcHRpb24nKSkuZ2V0KDIpLmNs
aWNrKCk7CisgICAgICAgIGV4cGVjdChpbmNsdWRlRWxlbS5nZXRUZXh0KCkpLnRvTWF0Y2goL0Nv
bnRlbnQgb2YgdGVtcGxhdGUyLmh0bWwvKTsKKyAgICAgIH0pOworCisgICAgICBpdCgnc2hvdWxk
IGNoYW5nZSB0byBibGFuaycsIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoYnJvd3Nlci5wYXJh
bXMuYnJvd3NlciA9PSAnZmlyZWZveCcpIHsKKyAgICAgICAgICAvLyBGaXJlZm94IGNhbid0IGhh
bmRsZSB1c2luZyBzZWxlY3RzCisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IHRlbXBsYXRlU2VsZWN0LmNsaWNrKCk7CisgICAgICAgIHRlbXBsYXRlU2VsZWN0LmFsbChieS5j
c3MoJ29wdGlvbicpKS5nZXQoMCkuY2xpY2soKTsKKyAgICAgICAgZXhwZWN0KGluY2x1ZGVFbGVt
LmlzUHJlc2VudCgpKS50b0JlKGZhbHNlKTsKKyAgICAgIH0pOworICAgIDwvZmlsZT4KKyAgPC9l
eGFtcGxlPgorICovCisKKworLyoqCisgKiBAbmdkb2MgZXZlbnQKKyAqIEBuYW1lIG5nSW5jbHVk
ZSMkaW5jbHVkZUNvbnRlbnRSZXF1ZXN0ZWQKKyAqIEBldmVudFR5cGUgZW1pdCBvbiB0aGUgc2Nv
cGUgbmdJbmNsdWRlIHdhcyBkZWNsYXJlZCBpbgorICogQGRlc2NyaXB0aW9uCisgKiBFbWl0dGVk
IGV2ZXJ5IHRpbWUgdGhlIG5nSW5jbHVkZSBjb250ZW50IGlzIHJlcXVlc3RlZC4KKyAqCisgKiBA
cGFyYW0ge09iamVjdH0gYW5ndWxhckV2ZW50IFN5bnRoZXRpYyBldmVudCBvYmplY3QuCisgKiBA
cGFyYW0ge1N0cmluZ30gc3JjIFVSTCBvZiBjb250ZW50IHRvIGxvYWQuCisgKi8KKworCisvKioK
KyAqIEBuZ2RvYyBldmVudAorICogQG5hbWUgbmdJbmNsdWRlIyRpbmNsdWRlQ29udGVudExvYWRl
ZAorICogQGV2ZW50VHlwZSBlbWl0IG9uIHRoZSBjdXJyZW50IG5nSW5jbHVkZSBzY29wZQorICog
QGRlc2NyaXB0aW9uCisgKiBFbWl0dGVkIGV2ZXJ5IHRpbWUgdGhlIG5nSW5jbHVkZSBjb250ZW50
IGlzIHJlbG9hZGVkLgorICoKKyAqIEBwYXJhbSB7T2JqZWN0fSBhbmd1bGFyRXZlbnQgU3ludGhl
dGljIGV2ZW50IG9iamVjdC4KKyAqIEBwYXJhbSB7U3RyaW5nfSBzcmMgVVJMIG9mIGNvbnRlbnQg
dG8gbG9hZC4KKyAqLworCisKKy8qKgorICogQG5nZG9jIGV2ZW50CisgKiBAbmFtZSBuZ0luY2x1
ZGUjJGluY2x1ZGVDb250ZW50RXJyb3IKKyAqIEBldmVudFR5cGUgZW1pdCBvbiB0aGUgc2NvcGUg
bmdJbmNsdWRlIHdhcyBkZWNsYXJlZCBpbgorICogQGRlc2NyaXB0aW9uCisgKiBFbWl0dGVkIHdo
ZW4gYSB0ZW1wbGF0ZSBIVFRQIHJlcXVlc3QgeWllbGRzIGFuIGVycm9uZW91cyByZXNwb25zZSAo
c3RhdHVzIDwgMjAwIHx8IHN0YXR1cyA+IDI5OSkKKyAqCisgKiBAcGFyYW0ge09iamVjdH0gYW5n
dWxhckV2ZW50IFN5bnRoZXRpYyBldmVudCBvYmplY3QuCisgKiBAcGFyYW0ge1N0cmluZ30gc3Jj
IFVSTCBvZiBjb250ZW50IHRvIGxvYWQuCisgKi8KK3ZhciBuZ0luY2x1ZGVEaXJlY3RpdmUgPSBb
JyR0ZW1wbGF0ZVJlcXVlc3QnLCAnJGFuY2hvclNjcm9sbCcsICckYW5pbWF0ZScsCisgICAgICAg
ICAgICAgICAgICBmdW5jdGlvbigkdGVtcGxhdGVSZXF1ZXN0LCAgICRhbmNob3JTY3JvbGwsICAg
JGFuaW1hdGUpIHsKKyAgcmV0dXJuIHsKKyAgICByZXN0cmljdDogJ0VDQScsCisgICAgcHJpb3Jp
dHk6IDQwMCwKKyAgICB0ZXJtaW5hbDogdHJ1ZSwKKyAgICB0cmFuc2NsdWRlOiAnZWxlbWVudCcs
CisgICAgY29udHJvbGxlcjogYW5ndWxhci5ub29wLAorICAgIGNvbXBpbGU6IGZ1bmN0aW9uKGVs
ZW1lbnQsIGF0dHIpIHsKKyAgICAgIHZhciBzcmNFeHAgPSBhdHRyLm5nSW5jbHVkZSB8fCBhdHRy
LnNyYywKKyAgICAgICAgICBvbmxvYWRFeHAgPSBhdHRyLm9ubG9hZCB8fCAnJywKKyAgICAgICAg
ICBhdXRvU2Nyb2xsRXhwID0gYXR0ci5hdXRvc2Nyb2xsOworCisgICAgICByZXR1cm4gZnVuY3Rp
b24oc2NvcGUsICRlbGVtZW50LCAkYXR0ciwgY3RybCwgJHRyYW5zY2x1ZGUpIHsKKyAgICAgICAg
dmFyIGNoYW5nZUNvdW50ZXIgPSAwLAorICAgICAgICAgICAgY3VycmVudFNjb3BlLAorICAgICAg
ICAgICAgcHJldmlvdXNFbGVtZW50LAorICAgICAgICAgICAgY3VycmVudEVsZW1lbnQ7CisKKyAg
ICAgICAgdmFyIGNsZWFudXBMYXN0SW5jbHVkZUNvbnRlbnQgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICBpZiAocHJldmlvdXNFbGVtZW50KSB7CisgICAgICAgICAgICBwcmV2aW91c0VsZW1lbnQu
cmVtb3ZlKCk7CisgICAgICAgICAgICBwcmV2aW91c0VsZW1lbnQgPSBudWxsOworICAgICAgICAg
IH0KKyAgICAgICAgICBpZiAoY3VycmVudFNjb3BlKSB7CisgICAgICAgICAgICBjdXJyZW50U2Nv
cGUuJGRlc3Ryb3koKTsKKyAgICAgICAgICAgIGN1cnJlbnRTY29wZSA9IG51bGw7CisgICAgICAg
ICAgfQorICAgICAgICAgIGlmIChjdXJyZW50RWxlbWVudCkgeworICAgICAgICAgICAgJGFuaW1h
dGUubGVhdmUoY3VycmVudEVsZW1lbnQpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
IHByZXZpb3VzRWxlbWVudCA9IG51bGw7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHBy
ZXZpb3VzRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50OworICAgICAgICAgICAgY3VycmVudEVsZW1l
bnQgPSBudWxsOworICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBzY29wZS4kd2F0
Y2goc3JjRXhwLCBmdW5jdGlvbiBuZ0luY2x1ZGVXYXRjaEFjdGlvbihzcmMpIHsKKyAgICAgICAg
ICB2YXIgYWZ0ZXJBbmltYXRpb24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmIChpc0Rl
ZmluZWQoYXV0b1Njcm9sbEV4cCkgJiYgKCFhdXRvU2Nyb2xsRXhwIHx8IHNjb3BlLiRldmFsKGF1
dG9TY3JvbGxFeHApKSkgeworICAgICAgICAgICAgICAkYW5jaG9yU2Nyb2xsKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgfTsKKyAgICAgICAgICB2YXIgdGhpc0NoYW5nZUlkID0gKytjaGFu
Z2VDb3VudGVyOworCisgICAgICAgICAgaWYgKHNyYykgeworICAgICAgICAgICAgLy9zZXQgdGhl
IDJuZCBwYXJhbSB0byB0cnVlIHRvIGlnbm9yZSB0aGUgdGVtcGxhdGUgcmVxdWVzdCBlcnJvciBz
byB0aGF0IHRoZSBpbm5lcgorICAgICAgICAgICAgLy9jb250ZW50cyBhbmQgc2NvcGUgY2FuIGJl
IGNsZWFuZWQgdXAuCisgICAgICAgICAgICAkdGVtcGxhdGVSZXF1ZXN0KHNyYywgdHJ1ZSkudGhl
bihmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICAgICAgICBpZiAodGhpc0NoYW5nZUlkICE9
PSBjaGFuZ2VDb3VudGVyKSByZXR1cm47CisgICAgICAgICAgICAgIHZhciBuZXdTY29wZSA9IHNj
b3BlLiRuZXcoKTsKKyAgICAgICAgICAgICAgY3RybC50ZW1wbGF0ZSA9IHJlc3BvbnNlOworCisg
ICAgICAgICAgICAgIC8vIE5vdGU6IFRoaXMgd2lsbCBhbHNvIGxpbmsgYWxsIGNoaWxkcmVuIG9m
IG5nLWluY2x1ZGUgdGhhdCB3ZXJlIGNvbnRhaW5lZCBpbiB0aGUgb3JpZ2luYWwKKyAgICAgICAg
ICAgICAgLy8gaHRtbC4gSWYgdGhhdCBjb250ZW50IGNvbnRhaW5zIGNvbnRyb2xsZXJzLCAuLi4g
dGhleSBjb3VsZCBwb2xsdXRlL2NoYW5nZSB0aGUgc2NvcGUuCisgICAgICAgICAgICAgIC8vIEhv
d2V2ZXIsIHVzaW5nIG5nLWluY2x1ZGUgb24gYW4gZWxlbWVudCB3aXRoIGFkZGl0aW9uYWwgY29u
dGVudCBkb2VzIG5vdCBtYWtlIHNlbnNlLi4uCisgICAgICAgICAgICAgIC8vIE5vdGU6IFdlIGNh
bid0IHJlbW92ZSB0aGVtIGluIHRoZSBjbG9uZUF0dGNoRm4gb2YgJHRyYW5zY2x1ZGUgYXMgdGhh
dAorICAgICAgICAgICAgICAvLyBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIGxpbmtpbmcgdGhl
IGNvbnRlbnQsIHdoaWNoIHdvdWxkIGFwcGx5IGNoaWxkCisgICAgICAgICAgICAgIC8vIGRpcmVj
dGl2ZXMgdG8gbm9uIGV4aXN0aW5nIGVsZW1lbnRzLgorICAgICAgICAgICAgICB2YXIgY2xvbmUg
PSAkdHJhbnNjbHVkZShuZXdTY29wZSwgZnVuY3Rpb24oY2xvbmUpIHsKKyAgICAgICAgICAgICAg
ICBjbGVhbnVwTGFzdEluY2x1ZGVDb250ZW50KCk7CisgICAgICAgICAgICAgICAgJGFuaW1hdGUu
ZW50ZXIoY2xvbmUsIG51bGwsICRlbGVtZW50KS50aGVuKGFmdGVyQW5pbWF0aW9uKTsKKyAgICAg
ICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgY3VycmVudFNjb3BlID0gbmV3U2NvcGU7Cisg
ICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50ID0gY2xvbmU7CisKKyAgICAgICAgICAgICAgY3Vy
cmVudFNjb3BlLiRlbWl0KCckaW5jbHVkZUNvbnRlbnRMb2FkZWQnLCBzcmMpOworICAgICAgICAg
ICAgICBzY29wZS4kZXZhbChvbmxvYWRFeHApOworICAgICAgICAgICAgfSwgZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICAgIGlmICh0aGlzQ2hhbmdlSWQgPT09IGNoYW5nZUNvdW50ZXIpIHsKKyAg
ICAgICAgICAgICAgICBjbGVhbnVwTGFzdEluY2x1ZGVDb250ZW50KCk7CisgICAgICAgICAgICAg
ICAgc2NvcGUuJGVtaXQoJyRpbmNsdWRlQ29udGVudEVycm9yJywgc3JjKTsKKyAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBzY29wZS4kZW1pdCgnJGluY2x1ZGVD
b250ZW50UmVxdWVzdGVkJywgc3JjKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Y2xlYW51cExhc3RJbmNsdWRlQ29udGVudCgpOworICAgICAgICAgICAgY3RybC50ZW1wbGF0ZSA9
IG51bGw7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH07CisgICAgfQorICB9Owor
fV07CisKKy8vIFRoaXMgZGlyZWN0aXZlIGlzIGNhbGxlZCBkdXJpbmcgdGhlICR0cmFuc2NsdWRl
IGNhbGwgb2YgdGhlIGZpcnN0IGBuZ0luY2x1ZGVgIGRpcmVjdGl2ZS4KKy8vIEl0IHdpbGwgcmVw
bGFjZSBhbmQgY29tcGlsZSB0aGUgY29udGVudCBvZiB0aGUgZWxlbWVudCB3aXRoIHRoZSBsb2Fk
ZWQgdGVtcGxhdGUuCisvLyBXZSBuZWVkIHRoaXMgZGlyZWN0aXZlIHNvIHRoYXQgdGhlIGVsZW1l
bnQgY29udGVudCBpcyBhbHJlYWR5IGZpbGxlZCB3aGVuCisvLyB0aGUgbGluayBmdW5jdGlvbiBv
ZiBhbm90aGVyIGRpcmVjdGl2ZSBvbiB0aGUgc2FtZSBlbGVtZW50IGFzIG5nSW5jbHVkZQorLy8g
aXMgY2FsbGVkLgordmFyIG5nSW5jbHVkZUZpbGxDb250ZW50RGlyZWN0aXZlID0gWyckY29tcGls
ZScsCisgIGZ1bmN0aW9uKCRjb21waWxlKSB7CisgICAgcmV0dXJuIHsKKyAgICAgIHJlc3RyaWN0
OiAnRUNBJywKKyAgICAgIHByaW9yaXR5OiAtNDAwLAorICAgICAgcmVxdWlyZTogJ25nSW5jbHVk
ZScsCisgICAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgJGVsZW1lbnQsICRhdHRyLCBjdHJsKSB7
CisgICAgICAgIGlmICgvU1ZHLy50ZXN0KCRlbGVtZW50WzBdLnRvU3RyaW5nKCkpKSB7CisgICAg
ICAgICAgLy8gV2ViS2l0OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM1Njk4IC0tLSBTVkcgZWxlbWVudHMgZG8gbm90CisgICAgICAgICAgLy8gc3VwcG9ydCBpbm5l
ckhUTUwsIHNvIGRldGVjdCB0aGlzIGhlcmUgYW5kIHRyeSB0byBnZW5lcmF0ZSB0aGUgY29udGVu
dHMKKyAgICAgICAgICAvLyBzcGVjaWFsbHkuCisgICAgICAgICAgJGVsZW1lbnQuZW1wdHkoKTsK
KyAgICAgICAgICAkY29tcGlsZShqcUxpdGVCdWlsZEZyYWdtZW50KGN0cmwudGVtcGxhdGUsIGRv
Y3VtZW50KS5jaGlsZE5vZGVzKShzY29wZSwKKyAgICAgICAgICAgICAgZnVuY3Rpb24gbmFtZXNw
YWNlQWRhcHRlZENsb25lKGNsb25lKSB7CisgICAgICAgICAgICAkZWxlbWVudC5hcHBlbmQoY2xv
bmUpOworICAgICAgICAgIH0sIHtmdXR1cmVQYXJlbnRFbGVtZW50OiAkZWxlbWVudH0pOworICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgICRlbGVtZW50Lmh0bWwoY3RybC50
ZW1wbGF0ZSk7CisgICAgICAgICRjb21waWxlKCRlbGVtZW50LmNvbnRlbnRzKCkpKHNjb3BlKTsK
KyAgICAgIH0KKyAgICB9OworICB9XTsKKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBA
bmFtZSBuZ0luaXQKKyAqIEByZXN0cmljdCBBQworICoKKyAqIEBkZXNjcmlwdGlvbgorICogVGhl
IGBuZ0luaXRgIGRpcmVjdGl2ZSBhbGxvd3MgeW91IHRvIGV2YWx1YXRlIGFuIGV4cHJlc3Npb24g
aW4gdGhlCisgKiBjdXJyZW50IHNjb3BlLgorICoKKyAqIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0
LWRhbmdlciI+CisgKiBUaGUgb25seSBhcHByb3ByaWF0ZSB1c2Ugb2YgYG5nSW5pdGAgaXMgZm9y
IGFsaWFzaW5nIHNwZWNpYWwgcHJvcGVydGllcyBvZgorICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpu
Z1JlcGVhdCBgbmdSZXBlYXRgfSwgYXMgc2VlbiBpbiB0aGUgZGVtbyBiZWxvdy4gQmVzaWRlcyB0
aGlzIGNhc2UsIHlvdQorICogc2hvdWxkIHVzZSB7QGxpbmsgZ3VpZGUvY29udHJvbGxlciBjb250
cm9sbGVyc30gcmF0aGVyIHRoYW4gYG5nSW5pdGAKKyAqIHRvIGluaXRpYWxpemUgdmFsdWVzIG9u
IGEgc2NvcGUuCisgKiA8L2Rpdj4KKyAqIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LXdhcm5pbmci
PgorICogKipOb3RlKio6IElmIHlvdSBoYXZlIGFzc2lnbm1lbnQgaW4gYG5nSW5pdGAgYWxvbmcg
d2l0aCB7QGxpbmsgbmcuJGZpbHRlciBgJGZpbHRlcmB9LCBtYWtlCisgKiBzdXJlIHlvdSBoYXZl
IHBhcmVudGhlc2lzIGZvciBjb3JyZWN0IHByZWNlZGVuY2U6CisgKiA8cHJlIGNsYXNzPSJwcmV0
dHlwcmludCI+CisgKiBgPGRpdiBuZy1pbml0PSJ0ZXN0MSA9IChkYXRhIHwgb3JkZXJCeTonbmFt
ZScpIj48L2Rpdj5gCisgKiA8L3ByZT4KKyAqIDwvZGl2PgorICoKKyAqIEBwcmlvcml0eSA0NTAK
KyAqCisgKiBAZWxlbWVudCBBTlkKKyAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdJbml0IHtAbGlu
ayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWwuCisgKgorICogQGV4YW1wbGUK
KyAgIDxleGFtcGxlIG1vZHVsZT0iaW5pdEV4YW1wbGUiPgorICAgICA8ZmlsZSBuYW1lPSJpbmRl
eC5odG1sIj4KKyAgIDxzY3JpcHQ+CisgICAgIGFuZ3VsYXIubW9kdWxlKCdpbml0RXhhbXBsZScs
IFtdKQorICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywg
ZnVuY3Rpb24oJHNjb3BlKSB7CisgICAgICAgICAkc2NvcGUubGlzdCA9IFtbJ2EnLCAnYiddLCBb
J2MnLCAnZCddXTsKKyAgICAgICB9XSk7CisgICA8L3NjcmlwdD4KKyAgIDxkaXYgbmctY29udHJv
bGxlcj0iRXhhbXBsZUNvbnRyb2xsZXIiPgorICAgICA8ZGl2IG5nLXJlcGVhdD0iaW5uZXJMaXN0
IGluIGxpc3QiIG5nLWluaXQ9Im91dGVySW5kZXggPSAkaW5kZXgiPgorICAgICAgIDxkaXYgbmct
cmVwZWF0PSJ2YWx1ZSBpbiBpbm5lckxpc3QiIG5nLWluaXQ9ImlubmVySW5kZXggPSAkaW5kZXgi
PgorICAgICAgICAgIDxzcGFuIGNsYXNzPSJleGFtcGxlLWluaXQiPmxpc3RbIHt7b3V0ZXJJbmRl
eH19IF1bIHt7aW5uZXJJbmRleH19IF0gPSB7e3ZhbHVlfX07PC9zcGFuPgorICAgICAgIDwvZGl2
PgorICAgICA8L2Rpdj4KKyAgIDwvZGl2PgorICAgICA8L2ZpbGU+CisgICAgIDxmaWxlIG5hbWU9
InByb3RyYWN0b3IuanMiIHR5cGU9InByb3RyYWN0b3IiPgorICAgICAgIGl0KCdzaG91bGQgYWxp
YXMgaW5kZXggcG9zaXRpb25zJywgZnVuY3Rpb24oKSB7CisgICAgICAgICB2YXIgZWxlbWVudHMg
PSBlbGVtZW50LmFsbChieS5jc3MoJy5leGFtcGxlLWluaXQnKSk7CisgICAgICAgICBleHBlY3Qo
ZWxlbWVudHMuZ2V0KDApLmdldFRleHQoKSkudG9CZSgnbGlzdFsgMCBdWyAwIF0gPSBhOycpOwor
ICAgICAgICAgZXhwZWN0KGVsZW1lbnRzLmdldCgxKS5nZXRUZXh0KCkpLnRvQmUoJ2xpc3RbIDAg
XVsgMSBdID0gYjsnKTsKKyAgICAgICAgIGV4cGVjdChlbGVtZW50cy5nZXQoMikuZ2V0VGV4dCgp
KS50b0JlKCdsaXN0WyAxIF1bIDAgXSA9IGM7Jyk7CisgICAgICAgICBleHBlY3QoZWxlbWVudHMu
Z2V0KDMpLmdldFRleHQoKSkudG9CZSgnbGlzdFsgMSBdWyAxIF0gPSBkOycpOworICAgICAgIH0p
OworICAgICA8L2ZpbGU+CisgICA8L2V4YW1wbGU+CisgKi8KK3ZhciBuZ0luaXREaXJlY3RpdmUg
PSBuZ0RpcmVjdGl2ZSh7CisgIHByaW9yaXR5OiA0NTAsCisgIGNvbXBpbGU6IGZ1bmN0aW9uKCkg
eworICAgIHJldHVybiB7CisgICAgICBwcmU6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRy
cykgeworICAgICAgICBzY29wZS4kZXZhbChhdHRycy5uZ0luaXQpOworICAgICAgfQorICAgIH07
CisgIH0KK30pOworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1lIG5nTGlzdAor
ICoKKyAqIEBkZXNjcmlwdGlvbgorICogVGV4dCBpbnB1dCB0aGF0IGNvbnZlcnRzIGJldHdlZW4g
YSBkZWxpbWl0ZWQgc3RyaW5nIGFuZCBhbiBhcnJheSBvZiBzdHJpbmdzLiBUaGUgZGVmYXVsdAor
ICogZGVsaW1pdGVyIGlzIGEgY29tbWEgZm9sbG93ZWQgYnkgYSBzcGFjZSAtIGVxdWl2YWxlbnQg
dG8gYG5nLWxpc3Q9IiwgImAuIFlvdSBjYW4gc3BlY2lmeSBhIGN1c3RvbQorICogZGVsaW1pdGVy
IGFzIHRoZSB2YWx1ZSBvZiB0aGUgYG5nTGlzdGAgYXR0cmlidXRlIC0gZm9yIGV4YW1wbGUsIGBu
Zy1saXN0PSIgfCAiYC4KKyAqCisgKiBUaGUgYmVoYXZpb3VyIG9mIHRoZSBkaXJlY3RpdmUgaXMg
YWZmZWN0ZWQgYnkgdGhlIHVzZSBvZiB0aGUgYG5nVHJpbWAgYXR0cmlidXRlLgorICogKiBJZiBg
bmdUcmltYCBpcyBzZXQgdG8gYCJmYWxzZSJgIHRoZW4gd2hpdGVzcGFjZSBhcm91bmQgYm90aCB0
aGUgc2VwYXJhdG9yIGFuZCBlYWNoCisgKiAgIGxpc3QgaXRlbSBpcyByZXNwZWN0ZWQuIFRoaXMg
aW1wbGllcyB0aGF0IHRoZSB1c2VyIG9mIHRoZSBkaXJlY3RpdmUgaXMgcmVzcG9uc2libGUgZm9y
CisgKiAgIGRlYWxpbmcgd2l0aCB3aGl0ZXNwYWNlIGJ1dCBhbHNvIGFsbG93cyB5b3UgdG8gdXNl
IHdoaXRlc3BhY2UgYXMgYSBkZWxpbWl0ZXIsIHN1Y2ggYXMgYQorICogICB0YWIgb3IgbmV3bGlu
ZSBjaGFyYWN0ZXIuCisgKiAqIE90aGVyd2lzZSB3aGl0ZXNwYWNlIGFyb3VuZCB0aGUgZGVsaW1p
dGVyIGlzIGlnbm9yZWQgd2hlbiBzcGxpdHRpbmcgKGFsdGhvdWdoIGl0IGlzIHJlc3BlY3RlZAor
ICogICB3aGVuIGpvaW5pbmcgdGhlIGxpc3QgaXRlbXMgYmFjayB0b2dldGhlcikgYW5kIHdoaXRl
c3BhY2UgYXJvdW5kIGVhY2ggbGlzdCBpdGVtIGlzIHN0cmlwcGVkCisgKiAgIGJlZm9yZSBpdCBp
cyBhZGRlZCB0byB0aGUgbW9kZWwuCisgKgorICogIyMjIEV4YW1wbGUgd2l0aCBWYWxpZGF0aW9u
CisgKgorICogPGV4YW1wbGUgbmFtZT0ibmdMaXN0LWRpcmVjdGl2ZSIgbW9kdWxlPSJsaXN0RXhh
bXBsZSI+CisgKiAgIDxmaWxlIG5hbWU9ImFwcC5qcyI+CisgKiAgICAgIGFuZ3VsYXIubW9kdWxl
KCdsaXN0RXhhbXBsZScsIFtdKQorICogICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJv
bGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7CisgKiAgICAgICAgICAkc2NvcGUu
bmFtZXMgPSBbJ21vcnBoZXVzJywgJ25lbycsICd0cmluaXR5J107CisgKiAgICAgICAgfV0pOwor
ICogICA8L2ZpbGU+CisgKiAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICogICAgPGZvcm0g
bmFtZT0ibXlGb3JtIiBuZy1jb250cm9sbGVyPSJFeGFtcGxlQ29udHJvbGxlciI+CisgKiAgICAg
IDxsYWJlbD5MaXN0OiA8aW5wdXQgbmFtZT0ibmFtZXNJbnB1dCIgbmctbW9kZWw9Im5hbWVzIiBu
Zy1saXN0IHJlcXVpcmVkPjwvbGFiZWw+CisgKiAgICAgIDxzcGFuIHJvbGU9ImFsZXJ0Ij4KKyAq
ICAgICAgICA8c3BhbiBjbGFzcz0iZXJyb3IiIG5nLXNob3c9Im15Rm9ybS5uYW1lc0lucHV0LiRl
cnJvci5yZXF1aXJlZCI+CisgKiAgICAgICAgUmVxdWlyZWQhPC9zcGFuPgorICogICAgICA8L3Nw
YW4+CisgKiAgICAgIDxicj4KKyAqICAgICAgPHR0Pm5hbWVzID0ge3tuYW1lc319PC90dD48YnIv
PgorICogICAgICA8dHQ+bXlGb3JtLm5hbWVzSW5wdXQuJHZhbGlkID0ge3tteUZvcm0ubmFtZXNJ
bnB1dC4kdmFsaWR9fTwvdHQ+PGJyLz4KKyAqICAgICAgPHR0Pm15Rm9ybS5uYW1lc0lucHV0LiRl
cnJvciA9IHt7bXlGb3JtLm5hbWVzSW5wdXQuJGVycm9yfX08L3R0Pjxici8+CisgKiAgICAgIDx0
dD5teUZvcm0uJHZhbGlkID0ge3tteUZvcm0uJHZhbGlkfX08L3R0Pjxici8+CisgKiAgICAgIDx0
dD5teUZvcm0uJGVycm9yLnJlcXVpcmVkID0ge3shIW15Rm9ybS4kZXJyb3IucmVxdWlyZWR9fTwv
dHQ+PGJyLz4KKyAqICAgICA8L2Zvcm0+CisgKiAgIDwvZmlsZT4KKyAqICAgPGZpbGUgbmFtZT0i
cHJvdHJhY3Rvci5qcyIgdHlwZT0icHJvdHJhY3RvciI+CisgKiAgICAgdmFyIGxpc3RJbnB1dCA9
IGVsZW1lbnQoYnkubW9kZWwoJ25hbWVzJykpOworICogICAgIHZhciBuYW1lcyA9IGVsZW1lbnQo
YnkuZXhhY3RCaW5kaW5nKCduYW1lcycpKTsKKyAqICAgICB2YXIgdmFsaWQgPSBlbGVtZW50KGJ5
LmJpbmRpbmcoJ215Rm9ybS5uYW1lc0lucHV0LiR2YWxpZCcpKTsKKyAqICAgICB2YXIgZXJyb3Ig
PSBlbGVtZW50KGJ5LmNzcygnc3Bhbi5lcnJvcicpKTsKKyAqCisgKiAgICAgaXQoJ3Nob3VsZCBp
bml0aWFsaXplIHRvIG1vZGVsJywgZnVuY3Rpb24oKSB7CisgKiAgICAgICBleHBlY3QobmFtZXMu
Z2V0VGV4dCgpKS50b0NvbnRhaW4oJ1sibW9ycGhldXMiLCJuZW8iLCJ0cmluaXR5Il0nKTsKKyAq
ICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbigndHJ1ZScpOworICogICAg
ICAgZXhwZWN0KGVycm9yLmdldENzc1ZhbHVlKCdkaXNwbGF5JykpLnRvQmUoJ25vbmUnKTsKKyAq
ICAgICB9KTsKKyAqCisgKiAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIGVtcHR5JywgZnVu
Y3Rpb24oKSB7CisgKiAgICAgICBsaXN0SW5wdXQuY2xlYXIoKTsKKyAqICAgICAgIGxpc3RJbnB1
dC5zZW5kS2V5cygnJyk7CisgKgorICogICAgICAgZXhwZWN0KG5hbWVzLmdldFRleHQoKSkudG9D
b250YWluKCcnKTsKKyAqICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbign
ZmFsc2UnKTsKKyAqICAgICAgIGV4cGVjdChlcnJvci5nZXRDc3NWYWx1ZSgnZGlzcGxheScpKS5u
b3QudG9CZSgnbm9uZScpOworICogICAgIH0pOworICogICA8L2ZpbGU+CisgKiA8L2V4YW1wbGU+
CisgKgorICogIyMjIEV4YW1wbGUgLSBzcGxpdHRpbmcgb24gd2hpdGVzcGFjZQorICogPGV4YW1w
bGUgbmFtZT0ibmdMaXN0LWRpcmVjdGl2ZS1uZXdsaW5lcyI+CisgKiAgIDxmaWxlIG5hbWU9Imlu
ZGV4Lmh0bWwiPgorICogICAgPHRleHRhcmVhIG5nLW1vZGVsPSJsaXN0IiBuZy1saXN0PSImIzEw
OyIgbmctdHJpbT0iZmFsc2UiPjwvdGV4dGFyZWE+CisgKiAgICA8cHJlPnt7IGxpc3QgfCBqc29u
IH19PC9wcmU+CisgKiAgIDwvZmlsZT4KKyAqICAgPGZpbGUgbmFtZT0icHJvdHJhY3Rvci5qcyIg
dHlwZT0icHJvdHJhY3RvciI+CisgKiAgICAgaXQoInNob3VsZCBzcGxpdCB0aGUgdGV4dCBieSBu
ZXdsaW5lcyIsIGZ1bmN0aW9uKCkgeworICogICAgICAgdmFyIGxpc3RJbnB1dCA9IGVsZW1lbnQo
YnkubW9kZWwoJ2xpc3QnKSk7CisgKiAgICAgICB2YXIgb3V0cHV0ID0gZWxlbWVudChieS5iaW5k
aW5nKCdsaXN0IHwganNvbicpKTsKKyAqICAgICAgIGxpc3RJbnB1dC5zZW5kS2V5cygnYWJjXG5k
ZWZcbmdoaScpOworICogICAgICAgZXhwZWN0KG91dHB1dC5nZXRUZXh0KCkpLnRvQ29udGFpbign
W1xuICAiYWJjIixcbiAgImRlZiIsXG4gICJnaGkiXG5dJyk7CisgKiAgICAgfSk7CisgKiAgIDwv
ZmlsZT4KKyAqIDwvZXhhbXBsZT4KKyAqCisgKiBAZWxlbWVudCBpbnB1dAorICogQHBhcmFtIHtz
dHJpbmc9fSBuZ0xpc3Qgb3B0aW9uYWwgZGVsaW1pdGVyIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8g
c3BsaXQgdGhlIHZhbHVlLgorICovCit2YXIgbmdMaXN0RGlyZWN0aXZlID0gZnVuY3Rpb24oKSB7
CisgIHJldHVybiB7CisgICAgcmVzdHJpY3Q6ICdBJywKKyAgICBwcmlvcml0eTogMTAwLAorICAg
IHJlcXVpcmU6ICduZ01vZGVsJywKKyAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwg
YXR0ciwgY3RybCkgeworICAgICAgLy8gV2Ugd2FudCB0byBjb250cm9sIHdoaXRlc3BhY2UgdHJp
bW1pbmcgc28gd2UgdXNlIHRoaXMgY29udm9sdXRlZCBhcHByb2FjaAorICAgICAgLy8gdG8gYWNj
ZXNzIHRoZSBuZ0xpc3QgYXR0cmlidXRlLCB3aGljaCBkb2Vzbid0IHByZS10cmltIHRoZSBhdHRy
aWJ1dGUKKyAgICAgIHZhciBuZ0xpc3QgPSBlbGVtZW50LmF0dHIoYXR0ci4kYXR0ci5uZ0xpc3Qp
IHx8ICcsICc7CisgICAgICB2YXIgdHJpbVZhbHVlcyA9IGF0dHIubmdUcmltICE9PSAnZmFsc2Un
OworICAgICAgdmFyIHNlcGFyYXRvciA9IHRyaW1WYWx1ZXMgPyB0cmltKG5nTGlzdCkgOiBuZ0xp
c3Q7CisKKyAgICAgIHZhciBwYXJzZSA9IGZ1bmN0aW9uKHZpZXdWYWx1ZSkgeworICAgICAgICAv
LyBJZiB0aGUgdmlld1ZhbHVlIGlzIGludmFsaWQgKHNheSByZXF1aXJlZCBidXQgZW1wdHkpIGl0
IHdpbGwgYmUgYHVuZGVmaW5lZGAKKyAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZpZXdWYWx1ZSkp
IHJldHVybjsKKworICAgICAgICB2YXIgbGlzdCA9IFtdOworCisgICAgICAgIGlmICh2aWV3VmFs
dWUpIHsKKyAgICAgICAgICBmb3JFYWNoKHZpZXdWYWx1ZS5zcGxpdChzZXBhcmF0b3IpLCBmdW5j
dGlvbih2YWx1ZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlKSBsaXN0LnB1c2godHJpbVZhbHVl
cyA/IHRyaW0odmFsdWUpIDogdmFsdWUpOworICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIGxpc3Q7CisgICAgICB9OworCisgICAgICBjdHJsLiRwYXJzZXJzLnB1c2go
cGFyc2UpOworICAgICAgY3RybC4kZm9ybWF0dGVycy5wdXNoKGZ1bmN0aW9uKHZhbHVlKSB7Cisg
ICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkgeworICAgICAgICAgIHJldHVybiB2YWx1ZS5qb2lu
KG5nTGlzdCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdW5kZWZpbmVkOworICAgICAg
fSk7CisKKyAgICAgIC8vIE92ZXJyaWRlIHRoZSBzdGFuZGFyZCAkaXNFbXB0eSBiZWNhdXNlIGFu
IGVtcHR5IGFycmF5IG1lYW5zIHRoZSBpbnB1dCBpcyBlbXB0eS4KKyAgICAgIGN0cmwuJGlzRW1w
dHkgPSBmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICByZXR1cm4gIXZhbHVlIHx8ICF2YWx1ZS5s
ZW5ndGg7CisgICAgICB9OworICAgIH0KKyAgfTsKK307CisKKy8qIGdsb2JhbCBWQUxJRF9DTEFT
UzogdHJ1ZSwKKyAgSU5WQUxJRF9DTEFTUzogdHJ1ZSwKKyAgUFJJU1RJTkVfQ0xBU1M6IHRydWUs
CisgIERJUlRZX0NMQVNTOiB0cnVlLAorICBVTlRPVUNIRURfQ0xBU1M6IHRydWUsCisgIFRPVUNI
RURfQ0xBU1M6IHRydWUsCisqLworCit2YXIgVkFMSURfQ0xBU1MgPSAnbmctdmFsaWQnLAorICAg
IElOVkFMSURfQ0xBU1MgPSAnbmctaW52YWxpZCcsCisgICAgUFJJU1RJTkVfQ0xBU1MgPSAnbmct
cHJpc3RpbmUnLAorICAgIERJUlRZX0NMQVNTID0gJ25nLWRpcnR5JywKKyAgICBVTlRPVUNIRURf
Q0xBU1MgPSAnbmctdW50b3VjaGVkJywKKyAgICBUT1VDSEVEX0NMQVNTID0gJ25nLXRvdWNoZWQn
LAorICAgIFBFTkRJTkdfQ0xBU1MgPSAnbmctcGVuZGluZyc7CisKKwordmFyICRuZ01vZGVsTWlu
RXJyID0gbmV3IG1pbkVycignbmdNb2RlbCcpOworCisvKioKKyAqIEBuZ2RvYyB0eXBlCisgKiBA
bmFtZSBuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVyCisgKgorICogQHByb3BlcnR5IHtzdHJpbmd9
ICR2aWV3VmFsdWUgQWN0dWFsIHN0cmluZyB2YWx1ZSBpbiB0aGUgdmlldy4KKyAqIEBwcm9wZXJ0
eSB7Kn0gJG1vZGVsVmFsdWUgVGhlIHZhbHVlIGluIHRoZSBtb2RlbCB0aGF0IHRoZSBjb250cm9s
IGlzIGJvdW5kIHRvLgorICogQHByb3BlcnR5IHtBcnJheS48RnVuY3Rpb24+fSAkcGFyc2VycyBB
cnJheSBvZiBmdW5jdGlvbnMgdG8gZXhlY3V0ZSwgYXMgYSBwaXBlbGluZSwgd2hlbmV2ZXIKKyAg
ICAgICB0aGUgY29udHJvbCByZWFkcyB2YWx1ZSBmcm9tIHRoZSBET00uIFRoZSBmdW5jdGlvbnMg
YXJlIGNhbGxlZCBpbiBhcnJheSBvcmRlciwgZWFjaCBwYXNzaW5nCisgICAgICAgaXRzIHJldHVy
biB2YWx1ZSB0aHJvdWdoIHRvIHRoZSBuZXh0LiBUaGUgbGFzdCByZXR1cm4gdmFsdWUgaXMgZm9y
d2FyZGVkIHRvIHRoZQorICAgICAgIHtAbGluayBuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVyIyR2
YWxpZGF0b3JzIGAkdmFsaWRhdG9yc2B9IGNvbGxlY3Rpb24uCisKK1BhcnNlcnMgYXJlIHVzZWQg
dG8gc2FuaXRpemUgLyBjb252ZXJ0IHRoZSB7QGxpbmsgbmdNb2RlbC5OZ01vZGVsQ29udHJvbGxl
ciMkdmlld1ZhbHVlCitgJHZpZXdWYWx1ZWB9LgorCitSZXR1cm5pbmcgYHVuZGVmaW5lZGAgZnJv
bSBhIHBhcnNlciBtZWFucyBhIHBhcnNlIGVycm9yIG9jY3VycmVkLiBJbiB0aGF0IGNhc2UsCitu
byB7QGxpbmsgbmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlciMkdmFsaWRhdG9ycyBgJHZhbGlkYXRv
cnNgfSB3aWxsIHJ1biBhbmQgdGhlIGBuZ01vZGVsYAord2lsbCBiZSBzZXQgdG8gYHVuZGVmaW5l
ZGAgdW5sZXNzIHtAbGluayBuZ01vZGVsT3B0aW9ucyBgbmdNb2RlbE9wdGlvbnMuYWxsb3dJbnZh
bGlkYH0KK2lzIHNldCB0byBgdHJ1ZWAuIFRoZSBwYXJzZSBlcnJvciBpcyBzdG9yZWQgaW4gYG5n
TW9kZWwuJGVycm9yLnBhcnNlYC4KKworICoKKyAqIEBwcm9wZXJ0eSB7QXJyYXkuPEZ1bmN0aW9u
Pn0gJGZvcm1hdHRlcnMgQXJyYXkgb2YgZnVuY3Rpb25zIHRvIGV4ZWN1dGUsIGFzIGEgcGlwZWxp
bmUsIHdoZW5ldmVyCisgICAgICAgdGhlIG1vZGVsIHZhbHVlIGNoYW5nZXMuIFRoZSBmdW5jdGlv
bnMgYXJlIGNhbGxlZCBpbiByZXZlcnNlIGFycmF5IG9yZGVyLCBlYWNoIHBhc3NpbmcgdGhlIHZh
bHVlIHRocm91Z2ggdG8gdGhlCisgICAgICAgbmV4dC4gVGhlIGxhc3QgcmV0dXJuIHZhbHVlIGlz
IHVzZWQgYXMgdGhlIGFjdHVhbCBET00gdmFsdWUuCisgICAgICAgVXNlZCB0byBmb3JtYXQgLyBj
b252ZXJ0IHZhbHVlcyBmb3IgZGlzcGxheSBpbiB0aGUgY29udHJvbC4KKyAqIGBgYGpzCisgKiBm
dW5jdGlvbiBmb3JtYXR0ZXIodmFsdWUpIHsKKyAqICAgaWYgKHZhbHVlKSB7CisgKiAgICAgcmV0
dXJuIHZhbHVlLnRvVXBwZXJDYXNlKCk7CisgKiAgIH0KKyAqIH0KKyAqIG5nTW9kZWwuJGZvcm1h
dHRlcnMucHVzaChmb3JtYXR0ZXIpOworICogYGBgCisgKgorICogQHByb3BlcnR5IHtPYmplY3Qu
PHN0cmluZywgZnVuY3Rpb24+fSAkdmFsaWRhdG9ycyBBIGNvbGxlY3Rpb24gb2YgdmFsaWRhdG9y
cyB0aGF0IGFyZSBhcHBsaWVkCisgKiAgICAgIHdoZW5ldmVyIHRoZSBtb2RlbCB2YWx1ZSBjaGFu
Z2VzLiBUaGUga2V5IHZhbHVlIHdpdGhpbiB0aGUgb2JqZWN0IHJlZmVycyB0byB0aGUgbmFtZSBv
ZiB0aGUKKyAqICAgICAgdmFsaWRhdG9yIHdoaWxlIHRoZSBmdW5jdGlvbiByZWZlcnMgdG8gdGhl
IHZhbGlkYXRpb24gb3BlcmF0aW9uLiBUaGUgdmFsaWRhdGlvbiBvcGVyYXRpb24gaXMKKyAqICAg
ICAgcHJvdmlkZWQgd2l0aCB0aGUgbW9kZWwgdmFsdWUgYXMgYW4gYXJndW1lbnQgYW5kIG11c3Qg
cmV0dXJuIGEgdHJ1ZSBvciBmYWxzZSB2YWx1ZSBkZXBlbmRpbmcKKyAqICAgICAgb24gdGhlIHJl
c3BvbnNlIG9mIHRoYXQgdmFsaWRhdGlvbi4KKyAqCisgKiBgYGBqcworICogbmdNb2RlbC4kdmFs
aWRhdG9ycy52YWxpZENoYXJhY3RlcnMgPSBmdW5jdGlvbihtb2RlbFZhbHVlLCB2aWV3VmFsdWUp
IHsKKyAqICAgdmFyIHZhbHVlID0gbW9kZWxWYWx1ZSB8fCB2aWV3VmFsdWU7CisgKiAgIHJldHVy
biAvWzAtOV0rLy50ZXN0KHZhbHVlKSAmJgorICogICAgICAgICAgL1thLXpdKy8udGVzdCh2YWx1
ZSkgJiYKKyAqICAgICAgICAgIC9bQS1aXSsvLnRlc3QodmFsdWUpICYmCisgKiAgICAgICAgICAv
XFcrLy50ZXN0KHZhbHVlKTsKKyAqIH07CisgKiBgYGAKKyAqCisgKiBAcHJvcGVydHkge09iamVj
dC48c3RyaW5nLCBmdW5jdGlvbj59ICRhc3luY1ZhbGlkYXRvcnMgQSBjb2xsZWN0aW9uIG9mIHZh
bGlkYXRpb25zIHRoYXQgYXJlIGV4cGVjdGVkIHRvCisgKiAgICAgIHBlcmZvcm0gYW4gYXN5bmNo
cm9ub3VzIHZhbGlkYXRpb24gKGUuZy4gYSBIVFRQIHJlcXVlc3QpLiBUaGUgdmFsaWRhdGlvbiBm
dW5jdGlvbiB0aGF0IGlzIHByb3ZpZGVkCisgKiAgICAgIGlzIGV4cGVjdGVkIHRvIHJldHVybiBh
IHByb21pc2Ugd2hlbiBpdCBpcyBydW4gZHVyaW5nIHRoZSBtb2RlbCB2YWxpZGF0aW9uIHByb2Nl
c3MuIE9uY2UgdGhlIHByb21pc2UKKyAqICAgICAgaXMgZGVsaXZlcmVkIHRoZW4gdGhlIHZhbGlk
YXRpb24gc3RhdHVzIHdpbGwgYmUgc2V0IHRvIHRydWUgd2hlbiBmdWxmaWxsZWQgYW5kIGZhbHNl
IHdoZW4gcmVqZWN0ZWQuCisgKiAgICAgIFdoZW4gdGhlIGFzeW5jaHJvbm91cyB2YWxpZGF0b3Jz
IGFyZSB0cmlnZ2VyZWQsIGVhY2ggb2YgdGhlIHZhbGlkYXRvcnMgd2lsbCBydW4gaW4gcGFyYWxs
ZWwgYW5kIHRoZSBtb2RlbAorICogICAgICB2YWx1ZSB3aWxsIG9ubHkgYmUgdXBkYXRlZCBvbmNl
IGFsbCB2YWxpZGF0b3JzIGhhdmUgYmVlbiBmdWxmaWxsZWQuIEFzIGxvbmcgYXMgYW4gYXN5bmNo
cm9ub3VzIHZhbGlkYXRvcgorICogICAgICBpcyB1bmZ1bGZpbGxlZCwgaXRzIGtleSB3aWxsIGJl
IGFkZGVkIHRvIHRoZSBjb250cm9sbGVycyBgJHBlbmRpbmdgIHByb3BlcnR5LiBBbHNvLCBhbGwg
YXN5bmNocm9ub3VzIHZhbGlkYXRvcnMKKyAqICAgICAgd2lsbCBvbmx5IHJ1biBvbmNlIGFsbCBz
eW5jaHJvbm91cyB2YWxpZGF0b3JzIGhhdmUgcGFzc2VkLgorICoKKyAqIFBsZWFzZSBub3RlIHRo
YXQgaWYgJGh0dHAgaXMgdXNlZCB0aGVuIGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSBzZXJ2ZXIg
cmV0dXJucyBhIHN1Y2Nlc3MgSFRUUCByZXNwb25zZSBjb2RlCisgKiBpbiBvcmRlciB0byBmdWxm
aWxsIHRoZSB2YWxpZGF0aW9uIGFuZCBhIHN0YXR1cyBsZXZlbCBvZiBgNHh4YCBpbiBvcmRlciB0
byByZWplY3QgdGhlIHZhbGlkYXRpb24uCisgKgorICogYGBganMKKyAqIG5nTW9kZWwuJGFzeW5j
VmFsaWRhdG9ycy51bmlxdWVVc2VybmFtZSA9IGZ1bmN0aW9uKG1vZGVsVmFsdWUsIHZpZXdWYWx1
ZSkgeworICogICB2YXIgdmFsdWUgPSBtb2RlbFZhbHVlIHx8IHZpZXdWYWx1ZTsKKyAqCisgKiAg
IC8vIExvb2t1cCB1c2VyIGJ5IHVzZXJuYW1lCisgKiAgIHJldHVybiAkaHR0cC5nZXQoJy9hcGkv
dXNlcnMvJyArIHZhbHVlKS4KKyAqICAgICAgdGhlbihmdW5jdGlvbiByZXNvbHZlZCgpIHsKKyAq
ICAgICAgICAvL3VzZXJuYW1lIGV4aXN0cywgdGhpcyBtZWFucyB2YWxpZGF0aW9uIGZhaWxzCisg
KiAgICAgICAgcmV0dXJuICRxLnJlamVjdCgnZXhpc3RzJyk7CisgKiAgICAgIH0sIGZ1bmN0aW9u
IHJlamVjdGVkKCkgeworICogICAgICAgIC8vdXNlcm5hbWUgZG9lcyBub3QgZXhpc3QsIHRoZXJl
Zm9yZSB0aGlzIHZhbGlkYXRpb24gcGFzc2VzCisgKiAgICAgICAgcmV0dXJuIHRydWU7CisgKiAg
ICAgIH0pOworICogfTsKKyAqIGBgYAorICoKKyAqIEBwcm9wZXJ0eSB7QXJyYXkuPEZ1bmN0aW9u
Pn0gJHZpZXdDaGFuZ2VMaXN0ZW5lcnMgQXJyYXkgb2YgZnVuY3Rpb25zIHRvIGV4ZWN1dGUgd2hl
bmV2ZXIgdGhlCisgKiAgICAgdmlldyB2YWx1ZSBoYXMgY2hhbmdlZC4gSXQgaXMgY2FsbGVkIHdp
dGggbm8gYXJndW1lbnRzLCBhbmQgaXRzIHJldHVybiB2YWx1ZSBpcyBpZ25vcmVkLgorICogICAg
IFRoaXMgY2FuIGJlIHVzZWQgaW4gcGxhY2Ugb2YgYWRkaXRpb25hbCAkd2F0Y2hlcyBhZ2FpbnN0
IHRoZSBtb2RlbCB2YWx1ZS4KKyAqCisgKiBAcHJvcGVydHkge09iamVjdH0gJGVycm9yIEFuIG9i
amVjdCBoYXNoIHdpdGggYWxsIGZhaWxpbmcgdmFsaWRhdG9yIGlkcyBhcyBrZXlzLgorICogQHBy
b3BlcnR5IHtPYmplY3R9ICRwZW5kaW5nIEFuIG9iamVjdCBoYXNoIHdpdGggYWxsIHBlbmRpbmcg
dmFsaWRhdG9yIGlkcyBhcyBrZXlzLgorICoKKyAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gJHVudG91
Y2hlZCBUcnVlIGlmIGNvbnRyb2wgaGFzIG5vdCBsb3N0IGZvY3VzIHlldC4KKyAqIEBwcm9wZXJ0
eSB7Ym9vbGVhbn0gJHRvdWNoZWQgVHJ1ZSBpZiBjb250cm9sIGhhcyBsb3N0IGZvY3VzLgorICog
QHByb3BlcnR5IHtib29sZWFufSAkcHJpc3RpbmUgVHJ1ZSBpZiB1c2VyIGhhcyBub3QgaW50ZXJh
Y3RlZCB3aXRoIHRoZSBjb250cm9sIHlldC4KKyAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gJGRpcnR5
IFRydWUgaWYgdXNlciBoYXMgYWxyZWFkeSBpbnRlcmFjdGVkIHdpdGggdGhlIGNvbnRyb2wuCisg
KiBAcHJvcGVydHkge2Jvb2xlYW59ICR2YWxpZCBUcnVlIGlmIHRoZXJlIGlzIG5vIGVycm9yLgor
ICogQHByb3BlcnR5IHtib29sZWFufSAkaW52YWxpZCBUcnVlIGlmIGF0IGxlYXN0IG9uZSBlcnJv
ciBvbiB0aGUgY29udHJvbC4KKyAqIEBwcm9wZXJ0eSB7c3RyaW5nfSAkbmFtZSBUaGUgbmFtZSBh
dHRyaWJ1dGUgb2YgdGhlIGNvbnRyb2wuCisgKgorICogQGRlc2NyaXB0aW9uCisgKgorICogYE5n
TW9kZWxDb250cm9sbGVyYCBwcm92aWRlcyBBUEkgZm9yIHRoZSB7QGxpbmsgbmdNb2RlbCBgbmdN
b2RlbGB9IGRpcmVjdGl2ZS4KKyAqIFRoZSBjb250cm9sbGVyIGNvbnRhaW5zIHNlcnZpY2VzIGZv
ciBkYXRhLWJpbmRpbmcsIHZhbGlkYXRpb24sIENTUyB1cGRhdGVzLCBhbmQgdmFsdWUgZm9ybWF0
dGluZworICogYW5kIHBhcnNpbmcuIEl0IHB1cnBvc2VmdWxseSBkb2VzIG5vdCBjb250YWluIGFu
eSBsb2dpYyB3aGljaCBkZWFscyB3aXRoIERPTSByZW5kZXJpbmcgb3IKKyAqIGxpc3RlbmluZyB0
byBET00gZXZlbnRzLgorICogU3VjaCBET00gcmVsYXRlZCBsb2dpYyBzaG91bGQgYmUgcHJvdmlk
ZWQgYnkgb3RoZXIgZGlyZWN0aXZlcyB3aGljaCBtYWtlIHVzZSBvZgorICogYE5nTW9kZWxDb250
cm9sbGVyYCBmb3IgZGF0YS1iaW5kaW5nIHRvIGNvbnRyb2wgZWxlbWVudHMuCisgKiBBbmd1bGFy
IHByb3ZpZGVzIHRoaXMgRE9NIGxvZ2ljIGZvciBtb3N0IHtAbGluayBpbnB1dCBgaW5wdXRgfSBl
bGVtZW50cy4KKyAqIEF0IHRoZSBlbmQgb2YgdGhpcyBwYWdlIHlvdSBjYW4gZmluZCBhIHtAbGlu
ayBuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVyI2N1c3RvbS1jb250cm9sLWV4YW1wbGUKKyAqIGN1
c3RvbSBjb250cm9sIGV4YW1wbGV9IHRoYXQgdXNlcyBgbmdNb2RlbENvbnRyb2xsZXJgIHRvIGJp
bmQgdG8gYGNvbnRlbnRlZGl0YWJsZWAgZWxlbWVudHMuCisgKgorICogQGV4YW1wbGUKKyAqICMj
IyBDdXN0b20gQ29udHJvbCBFeGFtcGxlCisgKiBUaGlzIGV4YW1wbGUgc2hvd3MgaG93IHRvIHVz
ZSBgTmdNb2RlbENvbnRyb2xsZXJgIHdpdGggYSBjdXN0b20gY29udHJvbCB0byBhY2hpZXZlCisg
KiBkYXRhLWJpbmRpbmcuIE5vdGljZSBob3cgZGlmZmVyZW50IGRpcmVjdGl2ZXMgKGBjb250ZW50
ZWRpdGFibGVgLCBgbmctbW9kZWxgLCBhbmQgYHJlcXVpcmVkYCkKKyAqIGNvbGxhYm9yYXRlIHRv
Z2V0aGVyIHRvIGFjaGlldmUgdGhlIGRlc2lyZWQgcmVzdWx0LgorICoKKyAqIGBjb250ZW50ZWRp
dGFibGVgIGlzIGFuIEhUTUw1IGF0dHJpYnV0ZSwgd2hpY2ggdGVsbHMgdGhlIGJyb3dzZXIgdG8g
bGV0IHRoZSBlbGVtZW50CisgKiBjb250ZW50cyBiZSBlZGl0ZWQgaW4gcGxhY2UgYnkgdGhlIHVz
ZXIuCisgKgorICogV2UgYXJlIHVzaW5nIHRoZSB7QGxpbmsgbmcuc2VydmljZTokc2NlICRzY2V9
IHNlcnZpY2UgaGVyZSBhbmQgaW5jbHVkZSB0aGUge0BsaW5rIG5nU2FuaXRpemUgJHNhbml0aXpl
fQorICogbW9kdWxlIHRvIGF1dG9tYXRpY2FsbHkgcmVtb3ZlICJiYWQiIGNvbnRlbnQgbGlrZSBp
bmxpbmUgZXZlbnQgbGlzdGVuZXIgKGUuZy4gYDxzcGFuIG9uY2xpY2s9Ii4uLiI+YCkuCisgKiBI
b3dldmVyLCBhcyB3ZSBhcmUgdXNpbmcgYCRzY2VgIHRoZSBtb2RlbCBjYW4gc3RpbGwgZGVjaWRl
IHRvIHByb3ZpZGUgdW5zYWZlIGNvbnRlbnQgaWYgaXQgbWFya3MKKyAqIHRoYXQgY29udGVudCB1
c2luZyB0aGUgYCRzY2VgIHNlcnZpY2UuCisgKgorICogPGV4YW1wbGUgbmFtZT0iTmdNb2RlbENv
bnRyb2xsZXIiIG1vZHVsZT0iY3VzdG9tQ29udHJvbCIgZGVwcz0iYW5ndWxhci1zYW5pdGl6ZS5q
cyI+CisgICAgPGZpbGUgbmFtZT0ic3R5bGUuY3NzIj4KKyAgICAgIFtjb250ZW50ZWRpdGFibGVd
IHsKKyAgICAgICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7CisgICAgICAgIGJhY2tncm91bmQt
Y29sb3I6IHdoaXRlOworICAgICAgICBtaW4taGVpZ2h0OiAyMHB4OworICAgICAgfQorCisgICAg
ICAubmctaW52YWxpZCB7CisgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJlZDsKKyAgICAgIH0K
KworICAgIDwvZmlsZT4KKyAgICA8ZmlsZSBuYW1lPSJzY3JpcHQuanMiPgorICAgICAgYW5ndWxh
ci5tb2R1bGUoJ2N1c3RvbUNvbnRyb2wnLCBbJ25nU2FuaXRpemUnXSkuCisgICAgICAgIGRpcmVj
dGl2ZSgnY29udGVudGVkaXRhYmxlJywgWyckc2NlJywgZnVuY3Rpb24oJHNjZSkgeworICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICByZXN0cmljdDogJ0EnLCAvLyBvbmx5IGFjdGl2YXRl
IG9uIGVsZW1lbnQgYXR0cmlidXRlCisgICAgICAgICAgICByZXF1aXJlOiAnP25nTW9kZWwnLCAv
LyBnZXQgYSBob2xkIG9mIE5nTW9kZWxDb250cm9sbGVyCisgICAgICAgICAgICBsaW5rOiBmdW5j
dGlvbihzY29wZSwgZWxlbWVudCwgYXR0cnMsIG5nTW9kZWwpIHsKKyAgICAgICAgICAgICAgaWYg
KCFuZ01vZGVsKSByZXR1cm47IC8vIGRvIG5vdGhpbmcgaWYgbm8gbmctbW9kZWwKKworICAgICAg
ICAgICAgICAvLyBTcGVjaWZ5IGhvdyBVSSBzaG91bGQgYmUgdXBkYXRlZAorICAgICAgICAgICAg
ICBuZ01vZGVsLiRyZW5kZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50
Lmh0bWwoJHNjZS5nZXRUcnVzdGVkSHRtbChuZ01vZGVsLiR2aWV3VmFsdWUgfHwgJycpKTsKKyAg
ICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAvLyBMaXN0ZW4gZm9yIGNoYW5nZSBldmVu
dHMgdG8gZW5hYmxlIGJpbmRpbmcKKyAgICAgICAgICAgICAgZWxlbWVudC5vbignYmx1ciBrZXl1
cCBjaGFuZ2UnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBzY29wZS4kZXZhbEFzeW5j
KHJlYWQpOworICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgcmVhZCgpOyAvLyBpbml0
aWFsaXplCisKKyAgICAgICAgICAgICAgLy8gV3JpdGUgZGF0YSB0byB0aGUgbW9kZWwKKyAgICAg
ICAgICAgICAgZnVuY3Rpb24gcmVhZCgpIHsKKyAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IGVs
ZW1lbnQuaHRtbCgpOworICAgICAgICAgICAgICAgIC8vIFdoZW4gd2UgY2xlYXIgdGhlIGNvbnRl
bnQgZWRpdGFibGUgdGhlIGJyb3dzZXIgbGVhdmVzIGEgPGJyPiBiZWhpbmQKKyAgICAgICAgICAg
ICAgICAvLyBJZiBzdHJpcC1iciBhdHRyaWJ1dGUgaXMgcHJvdmlkZWQgdGhlbiB3ZSBzdHJpcCB0
aGlzIG91dAorICAgICAgICAgICAgICAgIGlmICggYXR0cnMuc3RyaXBCciAmJiBodG1sID09ICc8
YnI+JyApIHsKKyAgICAgICAgICAgICAgICAgIGh0bWwgPSAnJzsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgbmdNb2RlbC4kc2V0Vmlld1ZhbHVlKGh0bWwpOworICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfTsKKyAgICAgICAgfV0pOworICAgIDwv
ZmlsZT4KKyAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgIDxmb3JtIG5hbWU9Im15
Rm9ybSI+CisgICAgICAgPGRpdiBjb250ZW50ZWRpdGFibGUKKyAgICAgICAgICAgIG5hbWU9Im15
V2lkZ2V0IiBuZy1tb2RlbD0idXNlckNvbnRlbnQiCisgICAgICAgICAgICBzdHJpcC1icj0idHJ1
ZSIKKyAgICAgICAgICAgIHJlcXVpcmVkPkNoYW5nZSBtZSE8L2Rpdj4KKyAgICAgICAgPHNwYW4g
bmctc2hvdz0ibXlGb3JtLm15V2lkZ2V0LiRlcnJvci5yZXF1aXJlZCI+UmVxdWlyZWQhPC9zcGFu
PgorICAgICAgIDxocj4KKyAgICAgICA8dGV4dGFyZWEgbmctbW9kZWw9InVzZXJDb250ZW50IiBh
cmlhLWxhYmVsPSJEeW5hbWljIHRleHRhcmVhIj48L3RleHRhcmVhPgorICAgICAgPC9mb3JtPgor
ICAgIDwvZmlsZT4KKyAgICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFj
dG9yIj4KKyAgICBpdCgnc2hvdWxkIGRhdGEtYmluZCBhbmQgYmVjb21lIGludmFsaWQnLCBmdW5j
dGlvbigpIHsKKyAgICAgIGlmIChicm93c2VyLnBhcmFtcy5icm93c2VyID09ICdzYWZhcmknIHx8
IGJyb3dzZXIucGFyYW1zLmJyb3dzZXIgPT0gJ2ZpcmVmb3gnKSB7CisgICAgICAgIC8vIFNhZmFy
aURyaXZlciBjYW4ndCBoYW5kbGUgY29udGVudGVkaXRhYmxlCisgICAgICAgIC8vIGFuZCBGaXJl
Zm94IGRyaXZlciBjYW4ndCBjbGVhciBjb250ZW50ZWRpdGFibGVzIHZlcnkgd2VsbAorICAgICAg
ICByZXR1cm47CisgICAgICB9CisgICAgICB2YXIgY29udGVudEVkaXRhYmxlID0gZWxlbWVudChi
eS5jc3MoJ1tjb250ZW50ZWRpdGFibGVdJykpOworICAgICAgdmFyIGNvbnRlbnQgPSAnQ2hhbmdl
IG1lISc7CisKKyAgICAgIGV4cGVjdChjb250ZW50RWRpdGFibGUuZ2V0VGV4dCgpKS50b0VxdWFs
KGNvbnRlbnQpOworCisgICAgICBjb250ZW50RWRpdGFibGUuY2xlYXIoKTsKKyAgICAgIGNvbnRl
bnRFZGl0YWJsZS5zZW5kS2V5cyhwcm90cmFjdG9yLktleS5CQUNLX1NQQUNFKTsKKyAgICAgIGV4
cGVjdChjb250ZW50RWRpdGFibGUuZ2V0VGV4dCgpKS50b0VxdWFsKCcnKTsKKyAgICAgIGV4cGVj
dChjb250ZW50RWRpdGFibGUuZ2V0QXR0cmlidXRlKCdjbGFzcycpKS50b01hdGNoKC9uZy1pbnZh
bGlkLXJlcXVpcmVkLyk7CisgICAgfSk7CisgICAgPC9maWxlPgorICogPC9leGFtcGxlPgorICoK
KyAqCisgKi8KK3ZhciBOZ01vZGVsQ29udHJvbGxlciA9IFsnJHNjb3BlJywgJyRleGNlcHRpb25I
YW5kbGVyJywgJyRhdHRycycsICckZWxlbWVudCcsICckcGFyc2UnLCAnJGFuaW1hdGUnLCAnJHRp
bWVvdXQnLCAnJHJvb3RTY29wZScsICckcScsICckaW50ZXJwb2xhdGUnLAorICAgIGZ1bmN0aW9u
KCRzY29wZSwgJGV4Y2VwdGlvbkhhbmRsZXIsICRhdHRyLCAkZWxlbWVudCwgJHBhcnNlLCAkYW5p
bWF0ZSwgJHRpbWVvdXQsICRyb290U2NvcGUsICRxLCAkaW50ZXJwb2xhdGUpIHsKKyAgdGhpcy4k
dmlld1ZhbHVlID0gTnVtYmVyLk5hTjsKKyAgdGhpcy4kbW9kZWxWYWx1ZSA9IE51bWJlci5OYU47
CisgIHRoaXMuJCRyYXdNb2RlbFZhbHVlID0gdW5kZWZpbmVkOyAvLyBzdG9yZXMgdGhlIHBhcnNl
ZCBtb2RlbFZhbHVlIC8gbW9kZWwgc2V0IGZyb20gc2NvcGUgcmVnYXJkbGVzcyBvZiB2YWxpZGl0
eS4KKyAgdGhpcy4kdmFsaWRhdG9ycyA9IHt9OworICB0aGlzLiRhc3luY1ZhbGlkYXRvcnMgPSB7
fTsKKyAgdGhpcy4kcGFyc2VycyA9IFtdOworICB0aGlzLiRmb3JtYXR0ZXJzID0gW107CisgIHRo
aXMuJHZpZXdDaGFuZ2VMaXN0ZW5lcnMgPSBbXTsKKyAgdGhpcy4kdW50b3VjaGVkID0gdHJ1ZTsK
KyAgdGhpcy4kdG91Y2hlZCA9IGZhbHNlOworICB0aGlzLiRwcmlzdGluZSA9IHRydWU7CisgIHRo
aXMuJGRpcnR5ID0gZmFsc2U7CisgIHRoaXMuJHZhbGlkID0gdHJ1ZTsKKyAgdGhpcy4kaW52YWxp
ZCA9IGZhbHNlOworICB0aGlzLiRlcnJvciA9IHt9OyAvLyBrZWVwIGludmFsaWQga2V5cyBoZXJl
CisgIHRoaXMuJCRzdWNjZXNzID0ge307IC8vIGtlZXAgdmFsaWQga2V5cyBoZXJlCisgIHRoaXMu
JHBlbmRpbmcgPSB1bmRlZmluZWQ7IC8vIGtlZXAgcGVuZGluZyBrZXlzIGhlcmUKKyAgdGhpcy4k
bmFtZSA9ICRpbnRlcnBvbGF0ZSgkYXR0ci5uYW1lIHx8ICcnLCBmYWxzZSkoJHNjb3BlKTsKKwor
CisgIHZhciBwYXJzZWROZ01vZGVsID0gJHBhcnNlKCRhdHRyLm5nTW9kZWwpLAorICAgICAgcGFy
c2VkTmdNb2RlbEFzc2lnbiA9IHBhcnNlZE5nTW9kZWwuYXNzaWduLAorICAgICAgbmdNb2RlbEdl
dCA9IHBhcnNlZE5nTW9kZWwsCisgICAgICBuZ01vZGVsU2V0ID0gcGFyc2VkTmdNb2RlbEFzc2ln
biwKKyAgICAgIHBlbmRpbmdEZWJvdW5jZSA9IG51bGwsCisgICAgICBwYXJzZXJWYWxpZCwKKyAg
ICAgIGN0cmwgPSB0aGlzOworCisgIHRoaXMuJCRzZXRPcHRpb25zID0gZnVuY3Rpb24ob3B0aW9u
cykgeworICAgIGN0cmwuJG9wdGlvbnMgPSBvcHRpb25zOworICAgIGlmIChvcHRpb25zICYmIG9w
dGlvbnMuZ2V0dGVyU2V0dGVyKSB7CisgICAgICB2YXIgaW52b2tlTW9kZWxHZXR0ZXIgPSAkcGFy
c2UoJGF0dHIubmdNb2RlbCArICcoKScpLAorICAgICAgICAgIGludm9rZU1vZGVsU2V0dGVyID0g
JHBhcnNlKCRhdHRyLm5nTW9kZWwgKyAnKCQkJHApJyk7CisKKyAgICAgIG5nTW9kZWxHZXQgPSBm
dW5jdGlvbigkc2NvcGUpIHsKKyAgICAgICAgdmFyIG1vZGVsVmFsdWUgPSBwYXJzZWROZ01vZGVs
KCRzY29wZSk7CisgICAgICAgIGlmIChpc0Z1bmN0aW9uKG1vZGVsVmFsdWUpKSB7CisgICAgICAg
ICAgbW9kZWxWYWx1ZSA9IGludm9rZU1vZGVsR2V0dGVyKCRzY29wZSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIG1vZGVsVmFsdWU7CisgICAgICB9OworICAgICAgbmdNb2RlbFNldCA9IGZ1
bmN0aW9uKCRzY29wZSwgbmV3VmFsdWUpIHsKKyAgICAgICAgaWYgKGlzRnVuY3Rpb24ocGFyc2Vk
TmdNb2RlbCgkc2NvcGUpKSkgeworICAgICAgICAgIGludm9rZU1vZGVsU2V0dGVyKCRzY29wZSwg
eyQkJHA6IGN0cmwuJG1vZGVsVmFsdWV9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBw
YXJzZWROZ01vZGVsQXNzaWduKCRzY29wZSwgY3RybC4kbW9kZWxWYWx1ZSk7CisgICAgICAgIH0K
KyAgICAgIH07CisgICAgfSBlbHNlIGlmICghcGFyc2VkTmdNb2RlbC5hc3NpZ24pIHsKKyAgICAg
IHRocm93ICRuZ01vZGVsTWluRXJyKCdub25hc3NpZ24nLCAiRXhwcmVzc2lvbiAnezB9JyBpcyBu
b24tYXNzaWduYWJsZS4gRWxlbWVudDogezF9IiwKKyAgICAgICAgICAkYXR0ci5uZ01vZGVsLCBz
dGFydGluZ1RhZygkZWxlbWVudCkpOworICAgIH0KKyAgfTsKKworICAvKioKKyAgICogQG5nZG9j
IG1ldGhvZAorICAgKiBAbmFtZSBuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVyIyRyZW5kZXIKKyAg
ICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIENhbGxlZCB3aGVuIHRoZSB2aWV3IG5lZWRzIHRv
IGJlIHVwZGF0ZWQuIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIHVzZXIgb2YgdGhlIG5nLW1vZGVs
CisgICAqIGRpcmVjdGl2ZSB3aWxsIGltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICoKKyAgICog
VGhlIGAkcmVuZGVyKClgIG1ldGhvZCBpcyBpbnZva2VkIGluIHRoZSBmb2xsb3dpbmcgc2l0dWF0
aW9uczoKKyAgICoKKyAgICogKiBgJHJvbGxiYWNrVmlld1ZhbHVlKClgIGlzIGNhbGxlZC4gIElm
IHdlIGFyZSByb2xsaW5nIGJhY2sgdGhlIHZpZXcgdmFsdWUgdG8gdGhlIGxhc3QKKyAgICogICBj
b21taXR0ZWQgdmFsdWUgdGhlbiBgJHJlbmRlcigpYCBpcyBjYWxsZWQgdG8gdXBkYXRlIHRoZSBp
bnB1dCBjb250cm9sLgorICAgKiAqIFRoZSB2YWx1ZSByZWZlcmVuY2VkIGJ5IGBuZy1tb2RlbGAg
aXMgY2hhbmdlZCBwcm9ncmFtbWF0aWNhbGx5IGFuZCBib3RoIHRoZSBgJG1vZGVsVmFsdWVgIGFu
ZAorICAgKiAgIHRoZSBgJHZpZXdWYWx1ZWAgYXJlIGRpZmZlcmVudCBmcm9tIGxhc3QgdGltZS4K
KyAgICoKKyAgICogU2luY2UgYG5nLW1vZGVsYCBkb2VzIG5vdCBkbyBhIGRlZXAgd2F0Y2gsIGAk
cmVuZGVyKClgIGlzIG9ubHkgaW52b2tlZCBpZiB0aGUgdmFsdWVzIG9mCisgICAqIGAkbW9kZWxW
YWx1ZWAgYW5kIGAkdmlld1ZhbHVlYCBhcmUgYWN0dWFsbHkgZGlmZmVyZW50IGZyb20gdGhlaXIg
cHJldmlvdXMgdmFsdWUuIElmIGAkbW9kZWxWYWx1ZWAKKyAgICogb3IgYCR2aWV3VmFsdWVgIGFy
ZSBvYmplY3RzIChyYXRoZXIgdGhhbiBhIHN0cmluZyBvciBudW1iZXIpIHRoZW4gYCRyZW5kZXIo
KWAgd2lsbCBub3QgYmUKKyAgICogaW52b2tlZCBpZiB5b3Ugb25seSBjaGFuZ2UgYSBwcm9wZXJ0
eSBvbiB0aGUgb2JqZWN0cy4KKyAgICovCisgIHRoaXMuJHJlbmRlciA9IG5vb3A7CisKKyAgLyoq
CisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgbmdNb2RlbC5OZ01vZGVsQ29udHJvbGxl
ciMkaXNFbXB0eQorICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAgICogVGhpcyBpcyBjYWxsZWQg
d2hlbiB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGUgdmFsdWUgb2YgYW4gaW5wdXQgaXMgZW1w
dHkuCisgICAqCisgICAqIEZvciBpbnN0YW5jZSwgdGhlIHJlcXVpcmVkIGRpcmVjdGl2ZSBkb2Vz
IHRoaXMgdG8gd29yayBvdXQgaWYgdGhlIGlucHV0IGhhcyBkYXRhIG9yIG5vdC4KKyAgICoKKyAg
ICogVGhlIGRlZmF1bHQgYCRpc0VtcHR5YCBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciB0aGUgdmFs
dWUgaXMgYHVuZGVmaW5lZGAsIGAnJ2AsIGBudWxsYCBvciBgTmFOYC4KKyAgICoKKyAgICogWW91
IGNhbiBvdmVycmlkZSB0aGlzIGZvciBpbnB1dCBkaXJlY3RpdmVzIHdob3NlIGNvbmNlcHQgb2Yg
YmVpbmcgZW1wdHkgaXMgZGlmZmVyZW50IGZyb20gdGhlCisgICAqIGRlZmF1bHQuIFRoZSBgY2hl
Y2tib3hJbnB1dFR5cGVgIGRpcmVjdGl2ZSBkb2VzIHRoaXMgYmVjYXVzZSBpbiBpdHMgY2FzZSBh
IHZhbHVlIG9mIGBmYWxzZWAKKyAgICogaW1wbGllcyBlbXB0eS4KKyAgICoKKyAgICogQHBhcmFt
IHsqfSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGlucHV0IHRvIGNoZWNrIGZvciBlbXB0aW5lc3Mu
CisgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGB2YWx1ZWAgaXMgImVtcHR5Ii4KKyAg
ICovCisgIHRoaXMuJGlzRW1wdHkgPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIHJldHVybiBpc1Vu
ZGVmaW5lZCh2YWx1ZSkgfHwgdmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVl
ICE9PSB2YWx1ZTsKKyAgfTsKKworICB2YXIgcGFyZW50Rm9ybSA9ICRlbGVtZW50LmluaGVyaXRl
ZERhdGEoJyRmb3JtQ29udHJvbGxlcicpIHx8IG51bGxGb3JtQ3RybCwKKyAgICAgIGN1cnJlbnRW
YWxpZGF0aW9uUnVuSWQgPSAwOworCisgIC8qKgorICAgKiBAbmdkb2MgbWV0aG9kCisgICAqIEBu
YW1lIG5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXIjJHNldFZhbGlkaXR5CisgICAqCisgICAqIEBk
ZXNjcmlwdGlvbgorICAgKiBDaGFuZ2UgdGhlIHZhbGlkaXR5IHN0YXRlLCBhbmQgbm90aWZ5IHRo
ZSBmb3JtLgorICAgKgorICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIHdpdGhpbiAkcGFy
c2Vycy8kZm9ybWF0dGVycyBvciBhIGN1c3RvbSB2YWxpZGF0aW9uIGltcGxlbWVudGF0aW9uLgor
ICAgKiBIb3dldmVyLCBpbiBtb3N0IGNhc2VzIGl0IHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIHVz
ZSB0aGUgYG5nTW9kZWwuJHZhbGlkYXRvcnNgIGFuZAorICAgKiBgbmdNb2RlbC4kYXN5bmNWYWxp
ZGF0b3JzYCBjb2xsZWN0aW9ucyB3aGljaCB3aWxsIGNhbGwgYCRzZXRWYWxpZGl0eWAgYXV0b21h
dGljYWxseS4KKyAgICoKKyAgICogQHBhcmFtIHtzdHJpbmd9IHZhbGlkYXRpb25FcnJvcktleSBO
YW1lIG9mIHRoZSB2YWxpZGF0b3IuIFRoZSBgdmFsaWRhdGlvbkVycm9yS2V5YCB3aWxsIGJlIGFz
c2lnbmVkCisgICAqICAgICAgICB0byBlaXRoZXIgYCRlcnJvclt2YWxpZGF0aW9uRXJyb3JLZXld
YCBvciBgJHBlbmRpbmdbdmFsaWRhdGlvbkVycm9yS2V5XWAKKyAgICogICAgICAgIChmb3IgdW5m
dWxmaWxsZWQgYCRhc3luY1ZhbGlkYXRvcnNgKSwgc28gdGhhdCBpdCBpcyBhdmFpbGFibGUgZm9y
IGRhdGEtYmluZGluZy4KKyAgICogICAgICAgIFRoZSBgdmFsaWRhdGlvbkVycm9yS2V5YCBzaG91
bGQgYmUgaW4gY2FtZWxDYXNlIGFuZCB3aWxsIGdldCBjb252ZXJ0ZWQgaW50byBkYXNoLWNhc2UK
KyAgICogICAgICAgIGZvciBjbGFzcyBuYW1lLiBFeGFtcGxlOiBgbXlFcnJvcmAgd2lsbCByZXN1
bHQgaW4gYG5nLXZhbGlkLW15LWVycm9yYCBhbmQgYG5nLWludmFsaWQtbXktZXJyb3JgCisgICAq
ICAgICAgICBjbGFzcyBhbmQgY2FuIGJlIGJvdW5kIHRvIGFzICBge3tzb21lRm9ybS5zb21lQ29u
dHJvbC4kZXJyb3IubXlFcnJvcn19YCAuCisgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNWYWxpZCBX
aGV0aGVyIHRoZSBjdXJyZW50IHN0YXRlIGlzIHZhbGlkICh0cnVlKSwgaW52YWxpZCAoZmFsc2Up
LCBwZW5kaW5nICh1bmRlZmluZWQpLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3Ig
c2tpcHBlZCAobnVsbCkuIFBlbmRpbmcgaXMgdXNlZCBmb3IgdW5mdWxmaWxsZWQgYCRhc3luY1Zh
bGlkYXRvcnNgLgorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgU2tpcHBlZCBpcyB1c2Vk
IGJ5IEFuZ3VsYXIgd2hlbiB2YWxpZGF0b3JzIGRvIG5vdCBydW4gYmVjYXVzZSBvZiBwYXJzZSBl
cnJvcnMgYW5kCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGAkYXN5bmNWYWxp
ZGF0b3JzYCBkbyBub3QgcnVuIGJlY2F1c2UgYW55IG9mIHRoZSBgJHZhbGlkYXRvcnNgIGZhaWxl
ZC4KKyAgICovCisgIGFkZFNldFZhbGlkaXR5TWV0aG9kKHsKKyAgICBjdHJsOiB0aGlzLAorICAg
ICRlbGVtZW50OiAkZWxlbWVudCwKKyAgICBzZXQ6IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkp
IHsKKyAgICAgIG9iamVjdFtwcm9wZXJ0eV0gPSB0cnVlOworICAgIH0sCisgICAgdW5zZXQ6IGZ1
bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsKKyAgICAgIGRlbGV0ZSBvYmplY3RbcHJvcGVydHld
OworICAgIH0sCisgICAgcGFyZW50Rm9ybTogcGFyZW50Rm9ybSwKKyAgICAkYW5pbWF0ZTogJGFu
aW1hdGUKKyAgfSk7CisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgbmdN
b2RlbC5OZ01vZGVsQ29udHJvbGxlciMkc2V0UHJpc3RpbmUKKyAgICoKKyAgICogQGRlc2NyaXB0
aW9uCisgICAqIFNldHMgdGhlIGNvbnRyb2wgdG8gaXRzIHByaXN0aW5lIHN0YXRlLgorICAgKgor
ICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIHRvIHJlbW92ZSB0aGUgYG5nLWRpcnR5YCBj
bGFzcyBhbmQgc2V0IHRoZSBjb250cm9sIHRvIGl0cyBwcmlzdGluZQorICAgKiBzdGF0ZSAoYG5n
LXByaXN0aW5lYCBjbGFzcykuIEEgbW9kZWwgaXMgY29uc2lkZXJlZCB0byBiZSBwcmlzdGluZSB3
aGVuIHRoZSBjb250cm9sCisgICAqIGhhcyBub3QgYmVlbiBjaGFuZ2VkIGZyb20gd2hlbiBmaXJz
dCBjb21waWxlZC4KKyAgICovCisgIHRoaXMuJHNldFByaXN0aW5lID0gZnVuY3Rpb24oKSB7Cisg
ICAgY3RybC4kZGlydHkgPSBmYWxzZTsKKyAgICBjdHJsLiRwcmlzdGluZSA9IHRydWU7CisgICAg
JGFuaW1hdGUucmVtb3ZlQ2xhc3MoJGVsZW1lbnQsIERJUlRZX0NMQVNTKTsKKyAgICAkYW5pbWF0
ZS5hZGRDbGFzcygkZWxlbWVudCwgUFJJU1RJTkVfQ0xBU1MpOworICB9OworCisgIC8qKgorICAg
KiBAbmdkb2MgbWV0aG9kCisgICAqIEBuYW1lIG5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXIjJHNl
dERpcnR5CisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBTZXRzIHRoZSBjb250cm9sIHRv
IGl0cyBkaXJ0eSBzdGF0ZS4KKyAgICoKKyAgICogVGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCB0
byByZW1vdmUgdGhlIGBuZy1wcmlzdGluZWAgY2xhc3MgYW5kIHNldCB0aGUgY29udHJvbCB0byBp
dHMgZGlydHkKKyAgICogc3RhdGUgKGBuZy1kaXJ0eWAgY2xhc3MpLiBBIG1vZGVsIGlzIGNvbnNp
ZGVyZWQgdG8gYmUgZGlydHkgd2hlbiB0aGUgY29udHJvbCBoYXMgYmVlbiBjaGFuZ2VkCisgICAq
IGZyb20gd2hlbiBmaXJzdCBjb21waWxlZC4KKyAgICovCisgIHRoaXMuJHNldERpcnR5ID0gZnVu
Y3Rpb24oKSB7CisgICAgY3RybC4kZGlydHkgPSB0cnVlOworICAgIGN0cmwuJHByaXN0aW5lID0g
ZmFsc2U7CisgICAgJGFuaW1hdGUucmVtb3ZlQ2xhc3MoJGVsZW1lbnQsIFBSSVNUSU5FX0NMQVNT
KTsKKyAgICAkYW5pbWF0ZS5hZGRDbGFzcygkZWxlbWVudCwgRElSVFlfQ0xBU1MpOworICAgIHBh
cmVudEZvcm0uJHNldERpcnR5KCk7CisgIH07CisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRob2QK
KyAgICogQG5hbWUgbmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlciMkc2V0VW50b3VjaGVkCisgICAq
CisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBTZXRzIHRoZSBjb250cm9sIHRvIGl0cyB1bnRvdWNo
ZWQgc3RhdGUuCisgICAqCisgICAqIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgdG8gcmVtb3Zl
IHRoZSBgbmctdG91Y2hlZGAgY2xhc3MgYW5kIHNldCB0aGUgY29udHJvbCB0byBpdHMKKyAgICog
dW50b3VjaGVkIHN0YXRlIChgbmctdW50b3VjaGVkYCBjbGFzcykuIFVwb24gY29tcGlsYXRpb24s
IGEgbW9kZWwgaXMgc2V0IGFzIHVudG91Y2hlZAorICAgKiBieSBkZWZhdWx0LCBob3dldmVyIHRo
aXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gcmVzdG9yZSB0aGF0IHN0YXRlIGlmIHRoZSBtb2Rl
bCBoYXMKKyAgICogYWxyZWFkeSBiZWVuIHRvdWNoZWQgYnkgdGhlIHVzZXIuCisgICAqLworICB0
aGlzLiRzZXRVbnRvdWNoZWQgPSBmdW5jdGlvbigpIHsKKyAgICBjdHJsLiR0b3VjaGVkID0gZmFs
c2U7CisgICAgY3RybC4kdW50b3VjaGVkID0gdHJ1ZTsKKyAgICAkYW5pbWF0ZS5zZXRDbGFzcygk
ZWxlbWVudCwgVU5UT1VDSEVEX0NMQVNTLCBUT1VDSEVEX0NMQVNTKTsKKyAgfTsKKworICAvKioK
KyAgICogQG5nZG9jIG1ldGhvZAorICAgKiBAbmFtZSBuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVy
IyRzZXRUb3VjaGVkCisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBTZXRzIHRoZSBjb250
cm9sIHRvIGl0cyB0b3VjaGVkIHN0YXRlLgorICAgKgorICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUg
Y2FsbGVkIHRvIHJlbW92ZSB0aGUgYG5nLXVudG91Y2hlZGAgY2xhc3MgYW5kIHNldCB0aGUgY29u
dHJvbCB0byBpdHMKKyAgICogdG91Y2hlZCBzdGF0ZSAoYG5nLXRvdWNoZWRgIGNsYXNzKS4gQSBt
b2RlbCBpcyBjb25zaWRlcmVkIHRvIGJlIHRvdWNoZWQgd2hlbiB0aGUgdXNlciBoYXMKKyAgICog
Zmlyc3QgZm9jdXNlZCB0aGUgY29udHJvbCBlbGVtZW50IGFuZCB0aGVuIHNoaWZ0ZWQgZm9jdXMg
YXdheSBmcm9tIHRoZSBjb250cm9sIChibHVyIGV2ZW50KS4KKyAgICovCisgIHRoaXMuJHNldFRv
dWNoZWQgPSBmdW5jdGlvbigpIHsKKyAgICBjdHJsLiR0b3VjaGVkID0gdHJ1ZTsKKyAgICBjdHJs
LiR1bnRvdWNoZWQgPSBmYWxzZTsKKyAgICAkYW5pbWF0ZS5zZXRDbGFzcygkZWxlbWVudCwgVE9V
Q0hFRF9DTEFTUywgVU5UT1VDSEVEX0NMQVNTKTsKKyAgfTsKKworICAvKioKKyAgICogQG5nZG9j
IG1ldGhvZAorICAgKiBAbmFtZSBuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVyIyRyb2xsYmFja1Zp
ZXdWYWx1ZQorICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAgICogQ2FuY2VsIGFuIHVwZGF0ZSBh
bmQgcmVzZXQgdGhlIGlucHV0IGVsZW1lbnQncyB2YWx1ZSB0byBwcmV2ZW50IGFuIHVwZGF0ZSB0
byB0aGUgYCRtb2RlbFZhbHVlYCwKKyAgICogd2hpY2ggbWF5IGJlIGNhdXNlZCBieSBhIHBlbmRp
bmcgZGVib3VuY2VkIGV2ZW50IG9yIGJlY2F1c2UgdGhlIGlucHV0IGlzIHdhaXRpbmcgZm9yIGEg
c29tZQorICAgKiBmdXR1cmUgZXZlbnQuCisgICAqCisgICAqIElmIHlvdSBoYXZlIGFuIGlucHV0
IHRoYXQgdXNlcyBgbmctbW9kZWwtb3B0aW9uc2AgdG8gc2V0IHVwIGRlYm91bmNlZCBldmVudHMg
b3IgZXZlbnRzIHN1Y2gKKyAgICogYXMgYmx1ciB5b3UgY2FuIGhhdmUgYSBzaXR1YXRpb24gd2hl
cmUgdGhlcmUgaXMgYSBwZXJpb2Qgd2hlbiB0aGUgYCR2aWV3VmFsdWVgCisgICAqIGlzIG91dCBv
ZiBzeW5jaCB3aXRoIHRoZSBuZ01vZGVsJ3MgYCRtb2RlbFZhbHVlYC4KKyAgICoKKyAgICogSW4g
dGhpcyBjYXNlLCB5b3UgY2FuIHJ1biBpbnRvIGRpZmZpY3VsdGllcyBpZiB5b3UgdHJ5IHRvIHVw
ZGF0ZSB0aGUgbmdNb2RlbCdzIGAkbW9kZWxWYWx1ZWAKKyAgICogcHJvZ3JhbW1hdGljYWxseSBi
ZWZvcmUgdGhlc2UgZGVib3VuY2VkL2Z1dHVyZSBldmVudHMgaGF2ZSByZXNvbHZlZC9vY2N1cnJl
ZCwgYmVjYXVzZSBBbmd1bGFyJ3MKKyAgICogZGlydHkgY2hlY2tpbmcgbWVjaGFuaXNtIGlzIG5v
dCBhYmxlIHRvIHRlbGwgd2hldGhlciB0aGUgbW9kZWwgaGFzIGFjdHVhbGx5IGNoYW5nZWQgb3Ig
bm90LgorICAgKgorICAgKiBUaGUgYCRyb2xsYmFja1ZpZXdWYWx1ZSgpYCBtZXRob2Qgc2hvdWxk
IGJlIGNhbGxlZCBiZWZvcmUgcHJvZ3JhbW1hdGljYWxseSBjaGFuZ2luZyB0aGUgbW9kZWwgb2Yg
YW4KKyAgICogaW5wdXQgd2hpY2ggbWF5IGhhdmUgc3VjaCBldmVudHMgcGVuZGluZy4gVGhpcyBp
cyBpbXBvcnRhbnQgaW4gb3JkZXIgdG8gbWFrZSBzdXJlIHRoYXQgdGhlCisgICAqIGlucHV0IGZp
ZWxkIHdpbGwgYmUgdXBkYXRlZCB3aXRoIHRoZSBuZXcgbW9kZWwgdmFsdWUgYW5kIGFueSBwZW5k
aW5nIG9wZXJhdGlvbnMgYXJlIGNhbmNlbGxlZC4KKyAgICoKKyAgICogPGV4YW1wbGUgbmFtZT0i
bmctbW9kZWwtY2FuY2VsLXVwZGF0ZSIgbW9kdWxlPSJjYW5jZWwtdXBkYXRlLWV4YW1wbGUiPgor
ICAgKiAgIDxmaWxlIG5hbWU9ImFwcC5qcyI+CisgICAqICAgICBhbmd1bGFyLm1vZHVsZSgnY2Fu
Y2VsLXVwZGF0ZS1leGFtcGxlJywgW10pCisgICAqCisgICAqICAgICAuY29udHJvbGxlcignQ2Fu
Y2VsVXBkYXRlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7CisgICAq
ICAgICAgICRzY29wZS5yZXNldFdpdGhDYW5jZWwgPSBmdW5jdGlvbihlKSB7CisgICAqICAgICAg
ICAgaWYgKGUua2V5Q29kZSA9PSAyNykgeworICAgKiAgICAgICAgICAgJHNjb3BlLm15Rm9ybS5t
eUlucHV0MS4kcm9sbGJhY2tWaWV3VmFsdWUoKTsKKyAgICogICAgICAgICAgICRzY29wZS5teVZh
bHVlID0gJyc7CisgICAqICAgICAgICAgfQorICAgKiAgICAgICB9OworICAgKiAgICAgICAkc2Nv
cGUucmVzZXRXaXRob3V0Q2FuY2VsID0gZnVuY3Rpb24oZSkgeworICAgKiAgICAgICAgIGlmIChl
LmtleUNvZGUgPT0gMjcpIHsKKyAgICogICAgICAgICAgICRzY29wZS5teVZhbHVlID0gJyc7Cisg
ICAqICAgICAgICAgfQorICAgKiAgICAgICB9OworICAgKiAgICAgfV0pOworICAgKiAgIDwvZmls
ZT4KKyAgICogICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICogICAgIDxkaXYgbmctY29u
dHJvbGxlcj0iQ2FuY2VsVXBkYXRlQ29udHJvbGxlciI+CisgICAqICAgICAgIDxwPlRyeSB0eXBp
bmcgc29tZXRoaW5nIGluIGVhY2ggaW5wdXQuICBTZWUgdGhhdCB0aGUgbW9kZWwgb25seSB1cGRh
dGVzIHdoZW4geW91CisgICAqICAgICAgICAgIGJsdXIgb2ZmIHRoZSBpbnB1dC4KKyAgICogICAg
ICAgIDwvcD4KKyAgICogICAgICAgIDxwPk5vdyBzZWUgd2hhdCBoYXBwZW5zIGlmIHlvdSBzdGFy
dCB0eXBpbmcgdGhlbiBwcmVzcyB0aGUgRXNjYXBlIGtleTwvcD4KKyAgICoKKyAgICogICAgICAg
PGZvcm0gbmFtZT0ibXlGb3JtIiBuZy1tb2RlbC1vcHRpb25zPSJ7IHVwZGF0ZU9uOiAnYmx1cicg
fSI+CisgICAqICAgICAgICAgPHAgaWQ9ImlucHV0RGVzY3JpcHRpb24xIj5XaXRoICRyb2xsYmFj
a1ZpZXdWYWx1ZSgpPC9wPgorICAgKiAgICAgICAgIDxpbnB1dCBuYW1lPSJteUlucHV0MSIgYXJp
YS1kZXNjcmliZWRieT0iaW5wdXREZXNjcmlwdGlvbjEiIG5nLW1vZGVsPSJteVZhbHVlIgorICAg
KiAgICAgICAgICAgICAgICBuZy1rZXlkb3duPSJyZXNldFdpdGhDYW5jZWwoJGV2ZW50KSI+PGJy
Lz4KKyAgICogICAgICAgICBteVZhbHVlOiAie3sgbXlWYWx1ZSB9fSIKKyAgICoKKyAgICogICAg
ICAgICA8cCBpZD0iaW5wdXREZXNjcmlwdGlvbjIiPldpdGhvdXQgJHJvbGxiYWNrVmlld1ZhbHVl
KCk8L3A+CisgICAqICAgICAgICAgPGlucHV0IG5hbWU9Im15SW5wdXQyIiBhcmlhLWRlc2NyaWJl
ZGJ5PSJpbnB1dERlc2NyaXB0aW9uMiIgbmctbW9kZWw9Im15VmFsdWUiCisgICAqICAgICAgICAg
ICAgICAgIG5nLWtleWRvd249InJlc2V0V2l0aG91dENhbmNlbCgkZXZlbnQpIj48YnIvPgorICAg
KiAgICAgICAgIG15VmFsdWU6ICJ7eyBteVZhbHVlIH19IgorICAgKiAgICAgICA8L2Zvcm0+Cisg
ICAqICAgICA8L2Rpdj4KKyAgICogICA8L2ZpbGU+CisgICAqIDwvZXhhbXBsZT4KKyAgICovCisg
IHRoaXMuJHJvbGxiYWNrVmlld1ZhbHVlID0gZnVuY3Rpb24oKSB7CisgICAgJHRpbWVvdXQuY2Fu
Y2VsKHBlbmRpbmdEZWJvdW5jZSk7CisgICAgY3RybC4kdmlld1ZhbHVlID0gY3RybC4kJGxhc3RD
b21taXR0ZWRWaWV3VmFsdWU7CisgICAgY3RybC4kcmVuZGVyKCk7CisgIH07CisKKyAgLyoqCisg
ICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgbmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlciMk
dmFsaWRhdGUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIFJ1bnMgZWFjaCBvZiB0aGUg
cmVnaXN0ZXJlZCB2YWxpZGF0b3JzIChmaXJzdCBzeW5jaHJvbm91cyB2YWxpZGF0b3JzIGFuZCB0
aGVuCisgICAqIGFzeW5jaHJvbm91cyB2YWxpZGF0b3JzKS4KKyAgICogSWYgdGhlIHZhbGlkaXR5
IGNoYW5nZXMgdG8gaW52YWxpZCwgdGhlIG1vZGVsIHdpbGwgYmUgc2V0IHRvIGB1bmRlZmluZWRg
LAorICAgKiB1bmxlc3Mge0BsaW5rIG5nTW9kZWxPcHRpb25zIGBuZ01vZGVsT3B0aW9ucy5hbGxv
d0ludmFsaWRgfSBpcyBgdHJ1ZWAuCisgICAqIElmIHRoZSB2YWxpZGl0eSBjaGFuZ2VzIHRvIHZh
bGlkLCBpdCB3aWxsIHNldCB0aGUgbW9kZWwgdG8gdGhlIGxhc3QgYXZhaWxhYmxlIHZhbGlkCisg
ICAqIGAkbW9kZWxWYWx1ZWAsIGkuZS4gZWl0aGVyIHRoZSBsYXN0IHBhcnNlZCB2YWx1ZSBvciB0
aGUgbGFzdCB2YWx1ZSBzZXQgZnJvbSB0aGUgc2NvcGUuCisgICAqLworICB0aGlzLiR2YWxpZGF0
ZSA9IGZ1bmN0aW9uKCkgeworICAgIC8vIGlnbm9yZSAkdmFsaWRhdGUgYmVmb3JlIG1vZGVsIGlz
IGluaXRpYWxpemVkCisgICAgaWYgKGlzTnVtYmVyKGN0cmwuJG1vZGVsVmFsdWUpICYmIGlzTmFO
KGN0cmwuJG1vZGVsVmFsdWUpKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgdmFyIHZp
ZXdWYWx1ZSA9IGN0cmwuJCRsYXN0Q29tbWl0dGVkVmlld1ZhbHVlOworICAgIC8vIE5vdGU6IHdl
IHVzZSB0aGUgJCRyYXdNb2RlbFZhbHVlIGFzICRtb2RlbFZhbHVlIG1pZ2h0IGhhdmUgYmVlbgor
ICAgIC8vIHNldCB0byB1bmRlZmluZWQgZHVyaW5nIGEgdmlldyAtPiBtb2RlbCB1cGRhdGUgdGhh
dCBmb3VuZCB2YWxpZGF0aW9uCisgICAgLy8gZXJyb3JzLiBXZSBjYW4ndCBwYXJzZSB0aGUgdmll
dyBoZXJlLCBzaW5jZSB0aGF0IGNvdWxkIGNoYW5nZQorICAgIC8vIHRoZSBtb2RlbCBhbHRob3Vn
aCBuZWl0aGVyIHZpZXdWYWx1ZSBub3IgdGhlIG1vZGVsIG9uIHRoZSBzY29wZSBjaGFuZ2VkCisg
ICAgdmFyIG1vZGVsVmFsdWUgPSBjdHJsLiQkcmF3TW9kZWxWYWx1ZTsKKworICAgIHZhciBwcmV2
VmFsaWQgPSBjdHJsLiR2YWxpZDsKKyAgICB2YXIgcHJldk1vZGVsVmFsdWUgPSBjdHJsLiRtb2Rl
bFZhbHVlOworCisgICAgdmFyIGFsbG93SW52YWxpZCA9IGN0cmwuJG9wdGlvbnMgJiYgY3RybC4k
b3B0aW9ucy5hbGxvd0ludmFsaWQ7CisKKyAgICBjdHJsLiQkcnVuVmFsaWRhdG9ycyhtb2RlbFZh
bHVlLCB2aWV3VmFsdWUsIGZ1bmN0aW9uKGFsbFZhbGlkKSB7CisgICAgICAvLyBJZiB0aGVyZSB3
YXMgbm8gY2hhbmdlIGluIHZhbGlkaXR5LCBkb24ndCB1cGRhdGUgdGhlIG1vZGVsCisgICAgICAv
LyBUaGlzIHByZXZlbnRzIGNoYW5naW5nIGFuIGludmFsaWQgbW9kZWxWYWx1ZSB0byB1bmRlZmlu
ZWQKKyAgICAgIGlmICghYWxsb3dJbnZhbGlkICYmIHByZXZWYWxpZCAhPT0gYWxsVmFsaWQpIHsK
KyAgICAgICAgLy8gTm90ZTogRG9uJ3QgY2hlY2sgY3RybC4kdmFsaWQgaGVyZSwgYXMgd2UgY291
bGQgaGF2ZQorICAgICAgICAvLyBleHRlcm5hbCB2YWxpZGF0b3JzIChlLmcuIGNhbGN1bGF0ZWQg
b24gdGhlIHNlcnZlciksCisgICAgICAgIC8vIHRoYXQganVzdCBjYWxsICRzZXRWYWxpZGl0eSBh
bmQgbmVlZCB0aGUgbW9kZWwgdmFsdWUKKyAgICAgICAgLy8gdG8gY2FsY3VsYXRlIHRoZWlyIHZh
bGlkaXR5LgorICAgICAgICBjdHJsLiRtb2RlbFZhbHVlID0gYWxsVmFsaWQgPyBtb2RlbFZhbHVl
IDogdW5kZWZpbmVkOworCisgICAgICAgIGlmIChjdHJsLiRtb2RlbFZhbHVlICE9PSBwcmV2TW9k
ZWxWYWx1ZSkgeworICAgICAgICAgIGN0cmwuJCR3cml0ZU1vZGVsVG9TY29wZSgpOworICAgICAg
ICB9CisgICAgICB9CisgICAgfSk7CisKKyAgfTsKKworICB0aGlzLiQkcnVuVmFsaWRhdG9ycyA9
IGZ1bmN0aW9uKG1vZGVsVmFsdWUsIHZpZXdWYWx1ZSwgZG9uZUNhbGxiYWNrKSB7CisgICAgY3Vy
cmVudFZhbGlkYXRpb25SdW5JZCsrOworICAgIHZhciBsb2NhbFZhbGlkYXRpb25SdW5JZCA9IGN1
cnJlbnRWYWxpZGF0aW9uUnVuSWQ7CisKKyAgICAvLyBjaGVjayBwYXJzZXIgZXJyb3IKKyAgICBp
ZiAoIXByb2Nlc3NQYXJzZUVycm9ycygpKSB7CisgICAgICB2YWxpZGF0aW9uRG9uZShmYWxzZSk7
CisgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghcHJvY2Vzc1N5bmNWYWxpZGF0b3JzKCkp
IHsKKyAgICAgIHZhbGlkYXRpb25Eb25lKGZhbHNlKTsKKyAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgcHJvY2Vzc0FzeW5jVmFsaWRhdG9ycygpOworCisgICAgZnVuY3Rpb24gcHJvY2Vzc1BhcnNl
RXJyb3JzKCkgeworICAgICAgdmFyIGVycm9yS2V5ID0gY3RybC4kJHBhcnNlck5hbWUgfHwgJ3Bh
cnNlJzsKKyAgICAgIGlmIChwYXJzZXJWYWxpZCA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgIHNl
dFZhbGlkaXR5KGVycm9yS2V5LCBudWxsKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmICgh
cGFyc2VyVmFsaWQpIHsKKyAgICAgICAgICBmb3JFYWNoKGN0cmwuJHZhbGlkYXRvcnMsIGZ1bmN0
aW9uKHYsIG5hbWUpIHsKKyAgICAgICAgICAgIHNldFZhbGlkaXR5KG5hbWUsIG51bGwpOworICAg
ICAgICAgIH0pOworICAgICAgICAgIGZvckVhY2goY3RybC4kYXN5bmNWYWxpZGF0b3JzLCBmdW5j
dGlvbih2LCBuYW1lKSB7CisgICAgICAgICAgICBzZXRWYWxpZGl0eShuYW1lLCBudWxsKTsKKyAg
ICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICAvLyBTZXQgdGhlIHBhcnNlIGVycm9yIGxh
c3QsIHRvIHByZXZlbnQgdW5zZXR0aW5nIGl0LCBzaG91bGQgYSAkdmFsaWRhdG9ycyBrZXkgPT0g
cGFyc2VyTmFtZQorICAgICAgICBzZXRWYWxpZGl0eShlcnJvcktleSwgcGFyc2VyVmFsaWQpOwor
ICAgICAgICByZXR1cm4gcGFyc2VyVmFsaWQ7CisgICAgICB9CisgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBwcm9jZXNzU3luY1ZhbGlkYXRvcnMoKSB7CisgICAgICB2
YXIgc3luY1ZhbGlkYXRvcnNWYWxpZCA9IHRydWU7CisgICAgICBmb3JFYWNoKGN0cmwuJHZhbGlk
YXRvcnMsIGZ1bmN0aW9uKHZhbGlkYXRvciwgbmFtZSkgeworICAgICAgICB2YXIgcmVzdWx0ID0g
dmFsaWRhdG9yKG1vZGVsVmFsdWUsIHZpZXdWYWx1ZSk7CisgICAgICAgIHN5bmNWYWxpZGF0b3Jz
VmFsaWQgPSBzeW5jVmFsaWRhdG9yc1ZhbGlkICYmIHJlc3VsdDsKKyAgICAgICAgc2V0VmFsaWRp
dHkobmFtZSwgcmVzdWx0KTsKKyAgICAgIH0pOworICAgICAgaWYgKCFzeW5jVmFsaWRhdG9yc1Zh
bGlkKSB7CisgICAgICAgIGZvckVhY2goY3RybC4kYXN5bmNWYWxpZGF0b3JzLCBmdW5jdGlvbih2
LCBuYW1lKSB7CisgICAgICAgICAgc2V0VmFsaWRpdHkobmFtZSwgbnVsbCk7CisgICAgICAgIH0p
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBwcm9jZXNzQXN5bmNWYWxpZGF0b3JzKCkgeworICAgICAgdmFy
IHZhbGlkYXRvclByb21pc2VzID0gW107CisgICAgICB2YXIgYWxsVmFsaWQgPSB0cnVlOworICAg
ICAgZm9yRWFjaChjdHJsLiRhc3luY1ZhbGlkYXRvcnMsIGZ1bmN0aW9uKHZhbGlkYXRvciwgbmFt
ZSkgeworICAgICAgICB2YXIgcHJvbWlzZSA9IHZhbGlkYXRvcihtb2RlbFZhbHVlLCB2aWV3VmFs
dWUpOworICAgICAgICBpZiAoIWlzUHJvbWlzZUxpa2UocHJvbWlzZSkpIHsKKyAgICAgICAgICB0
aHJvdyAkbmdNb2RlbE1pbkVycigiJGFzeW5jVmFsaWRhdG9ycyIsCisgICAgICAgICAgICAiRXhw
ZWN0ZWQgYXN5bmNocm9ub3VzIHZhbGlkYXRvciB0byByZXR1cm4gYSBwcm9taXNlIGJ1dCBnb3Qg
J3swfScgaW5zdGVhZC4iLCBwcm9taXNlKTsKKyAgICAgICAgfQorICAgICAgICBzZXRWYWxpZGl0
eShuYW1lLCB1bmRlZmluZWQpOworICAgICAgICB2YWxpZGF0b3JQcm9taXNlcy5wdXNoKHByb21p
c2UudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgICBzZXRWYWxpZGl0eShuYW1lLCB0cnVlKTsK
KyAgICAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHsKKyAgICAgICAgICBhbGxWYWxpZCA9IGZhbHNl
OworICAgICAgICAgIHNldFZhbGlkaXR5KG5hbWUsIGZhbHNlKTsKKyAgICAgICAgfSkpOworICAg
ICAgfSk7CisgICAgICBpZiAoIXZhbGlkYXRvclByb21pc2VzLmxlbmd0aCkgeworICAgICAgICB2
YWxpZGF0aW9uRG9uZSh0cnVlKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICRxLmFsbCh2YWxp
ZGF0b3JQcm9taXNlcykudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgICB2YWxpZGF0aW9uRG9u
ZShhbGxWYWxpZCk7CisgICAgICAgIH0sIG5vb3ApOworICAgICAgfQorICAgIH0KKworICAgIGZ1
bmN0aW9uIHNldFZhbGlkaXR5KG5hbWUsIGlzVmFsaWQpIHsKKyAgICAgIGlmIChsb2NhbFZhbGlk
YXRpb25SdW5JZCA9PT0gY3VycmVudFZhbGlkYXRpb25SdW5JZCkgeworICAgICAgICBjdHJsLiRz
ZXRWYWxpZGl0eShuYW1lLCBpc1ZhbGlkKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlv
biB2YWxpZGF0aW9uRG9uZShhbGxWYWxpZCkgeworICAgICAgaWYgKGxvY2FsVmFsaWRhdGlvblJ1
bklkID09PSBjdXJyZW50VmFsaWRhdGlvblJ1bklkKSB7CisKKyAgICAgICAgZG9uZUNhbGxiYWNr
KGFsbFZhbGlkKTsKKyAgICAgIH0KKyAgICB9CisgIH07CisKKyAgLyoqCisgICAqIEBuZ2RvYyBt
ZXRob2QKKyAgICogQG5hbWUgbmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlciMkY29tbWl0Vmlld1Zh
bHVlCisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBDb21taXQgYSBwZW5kaW5nIHVwZGF0
ZSB0byB0aGUgYCRtb2RlbFZhbHVlYC4KKyAgICoKKyAgICogVXBkYXRlcyBtYXkgYmUgcGVuZGlu
ZyBieSBhIGRlYm91bmNlZCBldmVudCBvciBiZWNhdXNlIHRoZSBpbnB1dCBpcyB3YWl0aW5nIGZv
ciBhIHNvbWUgZnV0dXJlCisgICAqIGV2ZW50IGRlZmluZWQgaW4gYG5nLW1vZGVsLW9wdGlvbnNg
LiB0aGlzIG1ldGhvZCBpcyByYXJlbHkgbmVlZGVkIGFzIGBOZ01vZGVsQ29udHJvbGxlcmAKKyAg
ICogdXN1YWxseSBoYW5kbGVzIGNhbGxpbmcgdGhpcyBpbiByZXNwb25zZSB0byBpbnB1dCBldmVu
dHMuCisgICAqLworICB0aGlzLiRjb21taXRWaWV3VmFsdWUgPSBmdW5jdGlvbigpIHsKKyAgICB2
YXIgdmlld1ZhbHVlID0gY3RybC4kdmlld1ZhbHVlOworCisgICAgJHRpbWVvdXQuY2FuY2VsKHBl
bmRpbmdEZWJvdW5jZSk7CisKKyAgICAvLyBJZiB0aGUgdmlldyB2YWx1ZSBoYXMgbm90IGNoYW5n
ZWQgdGhlbiB3ZSBzaG91bGQganVzdCBleGl0LCBleGNlcHQgaW4gdGhlIGNhc2Ugd2hlcmUgdGhl
cmUgaXMKKyAgICAvLyBhIG5hdGl2ZSB2YWxpZGF0b3Igb24gdGhlIGVsZW1lbnQuIEluIHRoaXMg
Y2FzZSB0aGUgdmFsaWRhdGlvbiBzdGF0ZSBtYXkgaGF2ZSBjaGFuZ2VkIGV2ZW4gdGhvdWdoCisg
ICAgLy8gdGhlIHZpZXdWYWx1ZSBoYXMgc3RheWVkIGVtcHR5LgorICAgIGlmIChjdHJsLiQkbGFz
dENvbW1pdHRlZFZpZXdWYWx1ZSA9PT0gdmlld1ZhbHVlICYmICh2aWV3VmFsdWUgIT09ICcnIHx8
ICFjdHJsLiQkaGFzTmF0aXZlVmFsaWRhdG9ycykpIHsKKyAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY3RybC4kJGxhc3RDb21taXR0ZWRWaWV3VmFsdWUgPSB2aWV3VmFsdWU7CisKKyAgICAvLyBj
aGFuZ2UgdG8gZGlydHkKKyAgICBpZiAoY3RybC4kcHJpc3RpbmUpIHsKKyAgICAgIHRoaXMuJHNl
dERpcnR5KCk7CisgICAgfQorICAgIHRoaXMuJCRwYXJzZUFuZFZhbGlkYXRlKCk7CisgIH07CisK
KyAgdGhpcy4kJHBhcnNlQW5kVmFsaWRhdGUgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgdmlld1Zh
bHVlID0gY3RybC4kJGxhc3RDb21taXR0ZWRWaWV3VmFsdWU7CisgICAgdmFyIG1vZGVsVmFsdWUg
PSB2aWV3VmFsdWU7CisgICAgcGFyc2VyVmFsaWQgPSBpc1VuZGVmaW5lZChtb2RlbFZhbHVlKSA/
IHVuZGVmaW5lZCA6IHRydWU7CisKKyAgICBpZiAocGFyc2VyVmFsaWQpIHsKKyAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgY3RybC4kcGFyc2Vycy5sZW5ndGg7IGkrKykgeworICAgICAgICBtb2Rl
bFZhbHVlID0gY3RybC4kcGFyc2Vyc1tpXShtb2RlbFZhbHVlKTsKKyAgICAgICAgaWYgKGlzVW5k
ZWZpbmVkKG1vZGVsVmFsdWUpKSB7CisgICAgICAgICAgcGFyc2VyVmFsaWQgPSBmYWxzZTsKKyAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBpZiAoaXNOdW1i
ZXIoY3RybC4kbW9kZWxWYWx1ZSkgJiYgaXNOYU4oY3RybC4kbW9kZWxWYWx1ZSkpIHsKKyAgICAg
IC8vIGN0cmwuJG1vZGVsVmFsdWUgaGFzIG5vdCBiZWVuIHRvdWNoZWQgeWV0Li4uCisgICAgICBj
dHJsLiRtb2RlbFZhbHVlID0gbmdNb2RlbEdldCgkc2NvcGUpOworICAgIH0KKyAgICB2YXIgcHJl
dk1vZGVsVmFsdWUgPSBjdHJsLiRtb2RlbFZhbHVlOworICAgIHZhciBhbGxvd0ludmFsaWQgPSBj
dHJsLiRvcHRpb25zICYmIGN0cmwuJG9wdGlvbnMuYWxsb3dJbnZhbGlkOworICAgIGN0cmwuJCRy
YXdNb2RlbFZhbHVlID0gbW9kZWxWYWx1ZTsKKworICAgIGlmIChhbGxvd0ludmFsaWQpIHsKKyAg
ICAgIGN0cmwuJG1vZGVsVmFsdWUgPSBtb2RlbFZhbHVlOworICAgICAgd3JpdGVUb01vZGVsSWZO
ZWVkZWQoKTsKKyAgICB9CisKKyAgICAvLyBQYXNzIHRoZSAkJGxhc3RDb21taXR0ZWRWaWV3VmFs
dWUgaGVyZSwgYmVjYXVzZSB0aGUgY2FjaGVkIHZpZXdWYWx1ZSBtaWdodCBiZSBvdXQgb2YgZGF0
ZS4KKyAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgZS5nLiAkc2V0Vmlld1ZhbHVlIGlzIGNhbGxl
ZCBmcm9tIGluc2lkZSBhIHBhcnNlcgorICAgIGN0cmwuJCRydW5WYWxpZGF0b3JzKG1vZGVsVmFs
dWUsIGN0cmwuJCRsYXN0Q29tbWl0dGVkVmlld1ZhbHVlLCBmdW5jdGlvbihhbGxWYWxpZCkgewor
ICAgICAgaWYgKCFhbGxvd0ludmFsaWQpIHsKKyAgICAgICAgLy8gTm90ZTogRG9uJ3QgY2hlY2sg
Y3RybC4kdmFsaWQgaGVyZSwgYXMgd2UgY291bGQgaGF2ZQorICAgICAgICAvLyBleHRlcm5hbCB2
YWxpZGF0b3JzIChlLmcuIGNhbGN1bGF0ZWQgb24gdGhlIHNlcnZlciksCisgICAgICAgIC8vIHRo
YXQganVzdCBjYWxsICRzZXRWYWxpZGl0eSBhbmQgbmVlZCB0aGUgbW9kZWwgdmFsdWUKKyAgICAg
ICAgLy8gdG8gY2FsY3VsYXRlIHRoZWlyIHZhbGlkaXR5LgorICAgICAgICBjdHJsLiRtb2RlbFZh
bHVlID0gYWxsVmFsaWQgPyBtb2RlbFZhbHVlIDogdW5kZWZpbmVkOworICAgICAgICB3cml0ZVRv
TW9kZWxJZk5lZWRlZCgpOworICAgICAgfQorICAgIH0pOworCisgICAgZnVuY3Rpb24gd3JpdGVU
b01vZGVsSWZOZWVkZWQoKSB7CisgICAgICBpZiAoY3RybC4kbW9kZWxWYWx1ZSAhPT0gcHJldk1v
ZGVsVmFsdWUpIHsKKyAgICAgICAgY3RybC4kJHdyaXRlTW9kZWxUb1Njb3BlKCk7CisgICAgICB9
CisgICAgfQorICB9OworCisgIHRoaXMuJCR3cml0ZU1vZGVsVG9TY29wZSA9IGZ1bmN0aW9uKCkg
eworICAgIG5nTW9kZWxTZXQoJHNjb3BlLCBjdHJsLiRtb2RlbFZhbHVlKTsKKyAgICBmb3JFYWNo
KGN0cmwuJHZpZXdDaGFuZ2VMaXN0ZW5lcnMsIGZ1bmN0aW9uKGxpc3RlbmVyKSB7CisgICAgICB0
cnkgeworICAgICAgICBsaXN0ZW5lcigpOworICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAk
ZXhjZXB0aW9uSGFuZGxlcihlKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfTsKKworICAvKioKKyAg
ICogQG5nZG9jIG1ldGhvZAorICAgKiBAbmFtZSBuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVyIyRz
ZXRWaWV3VmFsdWUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIFVwZGF0ZSB0aGUgdmll
dyB2YWx1ZS4KKyAgICoKKyAgICogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIGFu
IGlucHV0IGRpcmVjdGl2ZSB3YW50IHRvIGNoYW5nZSB0aGUgdmlldyB2YWx1ZTsgdHlwaWNhbGx5
LAorICAgKiB0aGlzIGlzIGRvbmUgZnJvbSB3aXRoaW4gYSBET00gZXZlbnQgaGFuZGxlci4KKyAg
ICoKKyAgICogRm9yIGV4YW1wbGUge0BsaW5rIG5nLmRpcmVjdGl2ZTppbnB1dCBpbnB1dH0gY2Fs
bHMgaXQgd2hlbiB0aGUgdmFsdWUgb2YgdGhlIGlucHV0IGNoYW5nZXMgYW5kCisgICAqIHtAbGlu
ayBuZy5kaXJlY3RpdmU6c2VsZWN0IHNlbGVjdH0gY2FsbHMgaXQgd2hlbiBhbiBvcHRpb24gaXMg
c2VsZWN0ZWQuCisgICAqCisgICAqIElmIHRoZSBuZXcgYHZhbHVlYCBpcyBhbiBvYmplY3QgKHJh
dGhlciB0aGFuIGEgc3RyaW5nIG9yIGEgbnVtYmVyKSwgd2Ugc2hvdWxkIG1ha2UgYSBjb3B5IG9m
IHRoZQorICAgKiBvYmplY3QgYmVmb3JlIHBhc3NpbmcgaXQgdG8gYCRzZXRWaWV3VmFsdWVgLiAg
VGhpcyBpcyBiZWNhdXNlIGBuZ01vZGVsYCBkb2VzIG5vdCBwZXJmb3JtIGEgZGVlcAorICAgKiB3
YXRjaCBvZiBvYmplY3RzLCBpdCBvbmx5IGxvb2tzIGZvciBhIGNoYW5nZSBvZiBpZGVudGl0eS4g
SWYgeW91IG9ubHkgY2hhbmdlIHRoZSBwcm9wZXJ0eSBvZgorICAgKiB0aGUgb2JqZWN0IHRoZW4g
bmdNb2RlbCB3aWxsIG5vdCByZWFsaXNlIHRoYXQgdGhlIG9iamVjdCBoYXMgY2hhbmdlZCBhbmQg
d2lsbCBub3QgaW52b2tlIHRoZQorICAgKiBgJHBhcnNlcnNgIGFuZCBgJHZhbGlkYXRvcnNgIHBp
cGVsaW5lcy4KKyAgICoKKyAgICogRm9yIHRoaXMgcmVhc29uLCB5b3Ugc2hvdWxkIG5vdCBjaGFu
Z2UgcHJvcGVydGllcyBvZiB0aGUgY29weSBvbmNlIGl0IGhhcyBiZWVuIHBhc3NlZCB0bworICAg
KiBgJHNldFZpZXdWYWx1ZWAuIE90aGVyd2lzZSB5b3UgbWF5IGNhdXNlIHRoZSBtb2RlbCB2YWx1
ZSBvbiB0aGUgc2NvcGUgdG8gY2hhbmdlIGluY29ycmVjdGx5LgorICAgKgorICAgKiBXaGVuIHRo
aXMgbWV0aG9kIGlzIGNhbGxlZCwgdGhlIG5ldyBgdmFsdWVgIHdpbGwgYmUgc3RhZ2VkIGZvciBj
b21taXR0aW5nIHRocm91Z2ggdGhlIGAkcGFyc2Vyc2AKKyAgICogYW5kIGAkdmFsaWRhdG9yc2Ag
cGlwZWxpbmVzLiBJZiB0aGVyZSBhcmUgbm8gc3BlY2lhbCB7QGxpbmsgbmdNb2RlbE9wdGlvbnN9
IHNwZWNpZmllZCB0aGVuIHRoZSBzdGFnZWQKKyAgICogdmFsdWUgc2VudCBkaXJlY3RseSBmb3Ig
cHJvY2Vzc2luZywgZmluYWxseSB0byBiZSBhcHBsaWVkIHRvIGAkbW9kZWxWYWx1ZWAgYW5kIHRo
ZW4gdGhlCisgICAqICoqZXhwcmVzc2lvbioqIHNwZWNpZmllZCBpbiB0aGUgYG5nLW1vZGVsYCBh
dHRyaWJ1dGUuCisgICAqCisgICAqIExhc3RseSwgYWxsIHRoZSByZWdpc3RlcmVkIGNoYW5nZSBs
aXN0ZW5lcnMsIGluIHRoZSBgJHZpZXdDaGFuZ2VMaXN0ZW5lcnNgIGxpc3QsIGFyZSBjYWxsZWQu
CisgICAqCisgICAqIEluIGNhc2UgdGhlIHtAbGluayBuZy5kaXJlY3RpdmU6bmdNb2RlbE9wdGlv
bnMgbmdNb2RlbE9wdGlvbnN9IGRpcmVjdGl2ZSBpcyB1c2VkIHdpdGggYHVwZGF0ZU9uYAorICAg
KiBhbmQgdGhlIGBkZWZhdWx0YCB0cmlnZ2VyIGlzIG5vdCBsaXN0ZWQsIGFsbCB0aG9zZSBhY3Rp
b25zIHdpbGwgcmVtYWluIHBlbmRpbmcgdW50aWwgb25lIG9mIHRoZQorICAgKiBgdXBkYXRlT25g
IGV2ZW50cyBpcyB0cmlnZ2VyZWQgb24gdGhlIERPTSBlbGVtZW50LgorICAgKiBBbGwgdGhlc2Ug
YWN0aW9ucyB3aWxsIGJlIGRlYm91bmNlZCBpZiB0aGUge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ01v
ZGVsT3B0aW9ucyBuZ01vZGVsT3B0aW9uc30KKyAgICogZGlyZWN0aXZlIGlzIHVzZWQgd2l0aCBh
IGN1c3RvbSBkZWJvdW5jZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIGV2ZW50LgorICAgKgorICAgKiBO
b3RlIHRoYXQgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHRyaWdnZXIgYSBgJGRpZ2Vz
dGAuCisgICAqCisgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBWYWx1ZSBmcm9tIHRoZSB2aWV3
LgorICAgKiBAcGFyYW0ge3N0cmluZ30gdHJpZ2dlciBFdmVudCB0aGF0IHRyaWdnZXJlZCB0aGUg
dXBkYXRlLgorICAgKi8KKyAgdGhpcy4kc2V0Vmlld1ZhbHVlID0gZnVuY3Rpb24odmFsdWUsIHRy
aWdnZXIpIHsKKyAgICBjdHJsLiR2aWV3VmFsdWUgPSB2YWx1ZTsKKyAgICBpZiAoIWN0cmwuJG9w
dGlvbnMgfHwgY3RybC4kb3B0aW9ucy51cGRhdGVPbkRlZmF1bHQpIHsKKyAgICAgIGN0cmwuJCRk
ZWJvdW5jZVZpZXdWYWx1ZUNvbW1pdCh0cmlnZ2VyKTsKKyAgICB9CisgIH07CisKKyAgdGhpcy4k
JGRlYm91bmNlVmlld1ZhbHVlQ29tbWl0ID0gZnVuY3Rpb24odHJpZ2dlcikgeworICAgIHZhciBk
ZWJvdW5jZURlbGF5ID0gMCwKKyAgICAgICAgb3B0aW9ucyA9IGN0cmwuJG9wdGlvbnMsCisgICAg
ICAgIGRlYm91bmNlOworCisgICAgaWYgKG9wdGlvbnMgJiYgaXNEZWZpbmVkKG9wdGlvbnMuZGVi
b3VuY2UpKSB7CisgICAgICBkZWJvdW5jZSA9IG9wdGlvbnMuZGVib3VuY2U7CisgICAgICBpZiAo
aXNOdW1iZXIoZGVib3VuY2UpKSB7CisgICAgICAgIGRlYm91bmNlRGVsYXkgPSBkZWJvdW5jZTsK
KyAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIoZGVib3VuY2VbdHJpZ2dlcl0pKSB7CisgICAgICAg
IGRlYm91bmNlRGVsYXkgPSBkZWJvdW5jZVt0cmlnZ2VyXTsKKyAgICAgIH0gZWxzZSBpZiAoaXNO
dW1iZXIoZGVib3VuY2VbJ2RlZmF1bHQnXSkpIHsKKyAgICAgICAgZGVib3VuY2VEZWxheSA9IGRl
Ym91bmNlWydkZWZhdWx0J107CisgICAgICB9CisgICAgfQorCisgICAgJHRpbWVvdXQuY2FuY2Vs
KHBlbmRpbmdEZWJvdW5jZSk7CisgICAgaWYgKGRlYm91bmNlRGVsYXkpIHsKKyAgICAgIHBlbmRp
bmdEZWJvdW5jZSA9ICR0aW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICBjdHJsLiRjb21taXRW
aWV3VmFsdWUoKTsKKyAgICAgIH0sIGRlYm91bmNlRGVsYXkpOworICAgIH0gZWxzZSBpZiAoJHJv
b3RTY29wZS4kJHBoYXNlKSB7CisgICAgICBjdHJsLiRjb21taXRWaWV3VmFsdWUoKTsKKyAgICB9
IGVsc2UgeworICAgICAgJHNjb3BlLiRhcHBseShmdW5jdGlvbigpIHsKKyAgICAgICAgY3RybC4k
Y29tbWl0Vmlld1ZhbHVlKCk7CisgICAgICB9KTsKKyAgICB9CisgIH07CisKKyAgLy8gbW9kZWwg
LT4gdmFsdWUKKyAgLy8gTm90ZTogd2UgY2Fubm90IHVzZSBhIG5vcm1hbCBzY29wZS4kd2F0Y2gg
YXMgd2Ugd2FudCB0byBkZXRlY3QgdGhlIGZvbGxvd2luZzoKKyAgLy8gMS4gc2NvcGUgdmFsdWUg
aXMgJ2EnCisgIC8vIDIuIHVzZXIgZW50ZXJzICdiJworICAvLyAzLiBuZy1jaGFuZ2Uga2lja3Mg
aW4gYW5kIHJldmVydHMgc2NvcGUgdmFsdWUgdG8gJ2EnCisgIC8vICAgIC0+IHNjb3BlIHZhbHVl
IGRpZCBub3QgY2hhbmdlIHNpbmNlIHRoZSBsYXN0IGRpZ2VzdCBhcworICAvLyAgICAgICBuZy1j
aGFuZ2UgZXhlY3V0ZXMgaW4gYXBwbHkgcGhhc2UKKyAgLy8gNC4gdmlldyBzaG91bGQgYmUgY2hh
bmdlZCBiYWNrIHRvICdhJworICAkc2NvcGUuJHdhdGNoKGZ1bmN0aW9uIG5nTW9kZWxXYXRjaCgp
IHsKKyAgICB2YXIgbW9kZWxWYWx1ZSA9IG5nTW9kZWxHZXQoJHNjb3BlKTsKKworICAgIC8vIGlm
IHNjb3BlIG1vZGVsIHZhbHVlIGFuZCBuZ01vZGVsIHZhbHVlIGFyZSBvdXQgb2Ygc3luYworICAg
IC8vIFRPRE8ocGVyZik6IHdoeSBub3QgbW92ZSB0aGlzIHRvIHRoZSBhY3Rpb24gZm4/CisgICAg
aWYgKG1vZGVsVmFsdWUgIT09IGN0cmwuJG1vZGVsVmFsdWUgJiYKKyAgICAgICAvLyBjaGVja3Mg
Zm9yIE5hTiBpcyBuZWVkZWQgdG8gYWxsb3cgc2V0dGluZyB0aGUgbW9kZWwgdG8gTmFOIHdoZW4g
dGhlcmUncyBhbiBhc3luY1ZhbGlkYXRvcgorICAgICAgIChjdHJsLiRtb2RlbFZhbHVlID09PSBj
dHJsLiRtb2RlbFZhbHVlIHx8IG1vZGVsVmFsdWUgPT09IG1vZGVsVmFsdWUpCisgICAgKSB7Cisg
ICAgICBjdHJsLiRtb2RlbFZhbHVlID0gY3RybC4kJHJhd01vZGVsVmFsdWUgPSBtb2RlbFZhbHVl
OworICAgICAgcGFyc2VyVmFsaWQgPSB1bmRlZmluZWQ7CisKKyAgICAgIHZhciBmb3JtYXR0ZXJz
ID0gY3RybC4kZm9ybWF0dGVycywKKyAgICAgICAgICBpZHggPSBmb3JtYXR0ZXJzLmxlbmd0aDsK
KworICAgICAgdmFyIHZpZXdWYWx1ZSA9IG1vZGVsVmFsdWU7CisgICAgICB3aGlsZSAoaWR4LS0p
IHsKKyAgICAgICAgdmlld1ZhbHVlID0gZm9ybWF0dGVyc1tpZHhdKHZpZXdWYWx1ZSk7CisgICAg
ICB9CisgICAgICBpZiAoY3RybC4kdmlld1ZhbHVlICE9PSB2aWV3VmFsdWUpIHsKKyAgICAgICAg
Y3RybC4kdmlld1ZhbHVlID0gY3RybC4kJGxhc3RDb21taXR0ZWRWaWV3VmFsdWUgPSB2aWV3VmFs
dWU7CisgICAgICAgIGN0cmwuJHJlbmRlcigpOworCisgICAgICAgIGN0cmwuJCRydW5WYWxpZGF0
b3JzKG1vZGVsVmFsdWUsIHZpZXdWYWx1ZSwgbm9vcCk7CisgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIG1vZGVsVmFsdWU7CisgIH0pOworfV07CisKKworLyoqCisgKiBAbmdkb2MgZGlyZWN0
aXZlCisgKiBAbmFtZSBuZ01vZGVsCisgKgorICogQGVsZW1lbnQgaW5wdXQKKyAqIEBwcmlvcml0
eSAxCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBUaGUgYG5nTW9kZWxgIGRpcmVjdGl2ZSBiaW5k
cyBhbiBgaW5wdXRgLGBzZWxlY3RgLCBgdGV4dGFyZWFgIChvciBjdXN0b20gZm9ybSBjb250cm9s
KSB0byBhCisgKiBwcm9wZXJ0eSBvbiB0aGUgc2NvcGUgdXNpbmcge0BsaW5rIG5nTW9kZWwuTmdN
b2RlbENvbnRyb2xsZXIgTmdNb2RlbENvbnRyb2xsZXJ9LAorICogd2hpY2ggaXMgY3JlYXRlZCBh
bmQgZXhwb3NlZCBieSB0aGlzIGRpcmVjdGl2ZS4KKyAqCisgKiBgbmdNb2RlbGAgaXMgcmVzcG9u
c2libGUgZm9yOgorICoKKyAqIC0gQmluZGluZyB0aGUgdmlldyBpbnRvIHRoZSBtb2RlbCwgd2hp
Y2ggb3RoZXIgZGlyZWN0aXZlcyBzdWNoIGFzIGBpbnB1dGAsIGB0ZXh0YXJlYWAgb3IgYHNlbGVj
dGAKKyAqICAgcmVxdWlyZS4KKyAqIC0gUHJvdmlkaW5nIHZhbGlkYXRpb24gYmVoYXZpb3IgKGku
ZS4gcmVxdWlyZWQsIG51bWJlciwgZW1haWwsIHVybCkuCisgKiAtIEtlZXBpbmcgdGhlIHN0YXRl
IG9mIHRoZSBjb250cm9sICh2YWxpZC9pbnZhbGlkLCBkaXJ0eS9wcmlzdGluZSwgdG91Y2hlZC91
bnRvdWNoZWQsIHZhbGlkYXRpb24gZXJyb3JzKS4KKyAqIC0gU2V0dGluZyByZWxhdGVkIGNzcyBj
bGFzc2VzIG9uIHRoZSBlbGVtZW50IChgbmctdmFsaWRgLCBgbmctaW52YWxpZGAsIGBuZy1kaXJ0
eWAsIGBuZy1wcmlzdGluZWAsIGBuZy10b3VjaGVkYCwgYG5nLXVudG91Y2hlZGApIGluY2x1ZGlu
ZyBhbmltYXRpb25zLgorICogLSBSZWdpc3RlcmluZyB0aGUgY29udHJvbCB3aXRoIGl0cyBwYXJl
bnQge0BsaW5rIG5nLmRpcmVjdGl2ZTpmb3JtIGZvcm19LgorICoKKyAqIE5vdGU6IGBuZ01vZGVs
YCB3aWxsIHRyeSB0byBiaW5kIHRvIHRoZSBwcm9wZXJ0eSBnaXZlbiBieSBldmFsdWF0aW5nIHRo
ZSBleHByZXNzaW9uIG9uIHRoZQorICogY3VycmVudCBzY29wZS4gSWYgdGhlIHByb3BlcnR5IGRv
ZXNuJ3QgYWxyZWFkeSBleGlzdCBvbiB0aGlzIHNjb3BlLCBpdCB3aWxsIGJlIGNyZWF0ZWQKKyAq
IGltcGxpY2l0bHkgYW5kIGFkZGVkIHRvIHRoZSBzY29wZS4KKyAqCisgKiBGb3IgYmVzdCBwcmFj
dGljZXMgb24gdXNpbmcgYG5nTW9kZWxgLCBzZWU6CisgKgorICogIC0gW1VuZGVyc3RhbmRpbmcg
U2NvcGVzXShodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyLmpzL3dpa2kvVW5kZXJz
dGFuZGluZy1TY29wZXMpCisgKgorICogRm9yIGJhc2ljIGV4YW1wbGVzLCBob3cgdG8gdXNlIGBu
Z01vZGVsYCwgc2VlOgorICoKKyAqICAtIHtAbGluayBuZy5kaXJlY3RpdmU6aW5wdXQgaW5wdXR9
CisgKiAgICAtIHtAbGluayBpbnB1dFt0ZXh0XSB0ZXh0fQorICogICAgLSB7QGxpbmsgaW5wdXRb
Y2hlY2tib3hdIGNoZWNrYm94fQorICogICAgLSB7QGxpbmsgaW5wdXRbcmFkaW9dIHJhZGlvfQor
ICogICAgLSB7QGxpbmsgaW5wdXRbbnVtYmVyXSBudW1iZXJ9CisgKiAgICAtIHtAbGluayBpbnB1
dFtlbWFpbF0gZW1haWx9CisgKiAgICAtIHtAbGluayBpbnB1dFt1cmxdIHVybH0KKyAqICAgIC0g
e0BsaW5rIGlucHV0W2RhdGVdIGRhdGV9CisgKiAgICAtIHtAbGluayBpbnB1dFtkYXRldGltZS1s
b2NhbF0gZGF0ZXRpbWUtbG9jYWx9CisgKiAgICAtIHtAbGluayBpbnB1dFt0aW1lXSB0aW1lfQor
ICogICAgLSB7QGxpbmsgaW5wdXRbbW9udGhdIG1vbnRofQorICogICAgLSB7QGxpbmsgaW5wdXRb
d2Vla10gd2Vla30KKyAqICAtIHtAbGluayBuZy5kaXJlY3RpdmU6c2VsZWN0IHNlbGVjdH0KKyAq
ICAtIHtAbGluayBuZy5kaXJlY3RpdmU6dGV4dGFyZWEgdGV4dGFyZWF9CisgKgorICogIyBDU1Mg
Y2xhc3NlcworICogVGhlIGZvbGxvd2luZyBDU1MgY2xhc3NlcyBhcmUgYWRkZWQgYW5kIHJlbW92
ZWQgb24gdGhlIGFzc29jaWF0ZWQgaW5wdXQvc2VsZWN0L3RleHRhcmVhIGVsZW1lbnQKKyAqIGRl
cGVuZGluZyBvbiB0aGUgdmFsaWRpdHkgb2YgdGhlIG1vZGVsLgorICoKKyAqICAtIGBuZy12YWxp
ZGA6IHRoZSBtb2RlbCBpcyB2YWxpZAorICogIC0gYG5nLWludmFsaWRgOiB0aGUgbW9kZWwgaXMg
aW52YWxpZAorICogIC0gYG5nLXZhbGlkLVtrZXldYDogZm9yIGVhY2ggdmFsaWQga2V5IGFkZGVk
IGJ5IGAkc2V0VmFsaWRpdHlgCisgKiAgLSBgbmctaW52YWxpZC1ba2V5XWA6IGZvciBlYWNoIGlu
dmFsaWQga2V5IGFkZGVkIGJ5IGAkc2V0VmFsaWRpdHlgCisgKiAgLSBgbmctcHJpc3RpbmVgOiB0
aGUgY29udHJvbCBoYXNuJ3QgYmVlbiBpbnRlcmFjdGVkIHdpdGggeWV0CisgKiAgLSBgbmctZGly
dHlgOiB0aGUgY29udHJvbCBoYXMgYmVlbiBpbnRlcmFjdGVkIHdpdGgKKyAqICAtIGBuZy10b3Vj
aGVkYDogdGhlIGNvbnRyb2wgaGFzIGJlZW4gYmx1cnJlZAorICogIC0gYG5nLXVudG91Y2hlZGA6
IHRoZSBjb250cm9sIGhhc24ndCBiZWVuIGJsdXJyZWQKKyAqICAtIGBuZy1wZW5kaW5nYDogYW55
IGAkYXN5bmNWYWxpZGF0b3JzYCBhcmUgdW5mdWxmaWxsZWQKKyAqCisgKiBLZWVwIGluIG1pbmQg
dGhhdCBuZ0FuaW1hdGUgY2FuIGRldGVjdCBlYWNoIG9mIHRoZXNlIGNsYXNzZXMgd2hlbiBhZGRl
ZCBhbmQgcmVtb3ZlZC4KKyAqCisgKiAjIyBBbmltYXRpb24gSG9va3MKKyAqCisgKiBBbmltYXRp
b25zIHdpdGhpbiBtb2RlbHMgYXJlIHRyaWdnZXJlZCB3aGVuIGFueSBvZiB0aGUgYXNzb2NpYXRl
ZCBDU1MgY2xhc3NlcyBhcmUgYWRkZWQgYW5kIHJlbW92ZWQKKyAqIG9uIHRoZSBpbnB1dCBlbGVt
ZW50IHdoaWNoIGlzIGF0dGFjaGVkIHRvIHRoZSBtb2RlbC4gVGhlc2UgY2xhc3NlcyBhcmU6IGAu
bmctcHJpc3RpbmVgLCBgLm5nLWRpcnR5YCwKKyAqIGAubmctaW52YWxpZGAgYW5kIGAubmctdmFs
aWRgIGFzIHdlbGwgYXMgYW55IG90aGVyIHZhbGlkYXRpb25zIHRoYXQgYXJlIHBlcmZvcm1lZCBv
biB0aGUgbW9kZWwgaXRzZWxmLgorICogVGhlIGFuaW1hdGlvbnMgdGhhdCBhcmUgdHJpZ2dlcmVk
IHdpdGhpbiBuZ01vZGVsIGFyZSBzaW1pbGFyIHRvIGhvdyB0aGV5IHdvcmsgaW4gbmdDbGFzcyBh
bmQKKyAqIGFuaW1hdGlvbnMgY2FuIGJlIGhvb2tlZCBpbnRvIHVzaW5nIENTUyB0cmFuc2l0aW9u
cywga2V5ZnJhbWVzIGFzIHdlbGwgYXMgSlMgYW5pbWF0aW9ucy4KKyAqCisgKiBUaGUgZm9sbG93
aW5nIGV4YW1wbGUgc2hvd3MgYSBzaW1wbGUgd2F5IHRvIHV0aWxpemUgQ1NTIHRyYW5zaXRpb25z
IHRvIHN0eWxlIGFuIGlucHV0IGVsZW1lbnQKKyAqIHRoYXQgaGFzIGJlZW4gcmVuZGVyZWQgYXMg
aW52YWxpZCBhZnRlciBpdCBoYXMgYmVlbiB2YWxpZGF0ZWQ6CisgKgorICogPHByZT4KKyAqIC8v
YmUgc3VyZSB0byBpbmNsdWRlIG5nQW5pbWF0ZSBhcyBhIG1vZHVsZSB0byBob29rIGludG8gbW9y
ZQorICogLy9hZHZhbmNlZCBhbmltYXRpb25zCisgKiAubXktaW5wdXQgeworICogICB0cmFuc2l0
aW9uOjAuNXMgbGluZWFyIGFsbDsKKyAqICAgYmFja2dyb3VuZDogd2hpdGU7CisgKiB9CisgKiAu
bXktaW5wdXQubmctaW52YWxpZCB7CisgKiAgIGJhY2tncm91bmQ6IHJlZDsKKyAqICAgY29sb3I6
d2hpdGU7CisgKiB9CisgKiA8L3ByZT4KKyAqCisgKiBAZXhhbXBsZQorICogPGV4YW1wbGUgZGVw
cz0iYW5ndWxhci1hbmltYXRlLmpzIiBhbmltYXRpb25zPSJ0cnVlIiBmaXhCYXNlPSJ0cnVlIiBt
b2R1bGU9ImlucHV0RXhhbXBsZSI+CisgICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAg
ICAgIDxzY3JpcHQ+CisgICAgICAgIGFuZ3VsYXIubW9kdWxlKCdpbnB1dEV4YW1wbGUnLCBbXSkK
KyAgICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1
bmN0aW9uKCRzY29wZSkgeworICAgICAgICAgICAgJHNjb3BlLnZhbCA9ICcxJzsKKyAgICAgICAg
ICB9XSk7CisgICAgICAgPC9zY3JpcHQ+CisgICAgICAgPHN0eWxlPgorICAgICAgICAgLm15LWlu
cHV0IHsKKyAgICAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOmFsbCBsaW5lYXIgMC41czsKKyAg
ICAgICAgICAgdHJhbnNpdGlvbjphbGwgbGluZWFyIDAuNXM7CisgICAgICAgICAgIGJhY2tncm91
bmQ6IHRyYW5zcGFyZW50OworICAgICAgICAgfQorICAgICAgICAgLm15LWlucHV0Lm5nLWludmFs
aWQgeworICAgICAgICAgICBjb2xvcjp3aGl0ZTsKKyAgICAgICAgICAgYmFja2dyb3VuZDogcmVk
OworICAgICAgICAgfQorICAgICAgIDwvc3R5bGU+CisgICAgICAgPHAgaWQ9ImlucHV0RGVzY3Jp
cHRpb24iPgorICAgICAgICBVcGRhdGUgaW5wdXQgdG8gc2VlIHRyYW5zaXRpb25zIHdoZW4gdmFs
aWQvaW52YWxpZC4KKyAgICAgICAgSW50ZWdlciBpcyBhIHZhbGlkIHZhbHVlLgorICAgICAgIDwv
cD4KKyAgICAgICA8Zm9ybSBuYW1lPSJ0ZXN0Rm9ybSIgbmctY29udHJvbGxlcj0iRXhhbXBsZUNv
bnRyb2xsZXIiPgorICAgICAgICAgPGlucHV0IG5nLW1vZGVsPSJ2YWwiIG5nLXBhdHRlcm49Ii9e
XGQrJC8iIG5hbWU9ImFuaW0iIGNsYXNzPSJteS1pbnB1dCIKKyAgICAgICAgICAgICAgICBhcmlh
LWRlc2NyaWJlZGJ5PSJpbnB1dERlc2NyaXB0aW9uIiAvPgorICAgICAgIDwvZm9ybT4KKyAgICAg
PC9maWxlPgorICogPC9leGFtcGxlPgorICoKKyAqICMjIEJpbmRpbmcgdG8gYSBnZXR0ZXIvc2V0
dGVyCisgKgorICogU29tZXRpbWVzIGl0J3MgaGVscGZ1bCB0byBiaW5kIGBuZ01vZGVsYCB0byBh
IGdldHRlci9zZXR0ZXIgZnVuY3Rpb24uICBBIGdldHRlci9zZXR0ZXIgaXMgYQorICogZnVuY3Rp
b24gdGhhdCByZXR1cm5zIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIHdoZW4gY2FsbGVk
IHdpdGggemVybyBhcmd1bWVudHMsIGFuZCBzZXRzCisgKiB0aGUgaW50ZXJuYWwgc3RhdGUgb2Yg
YSBtb2RlbCB3aGVuIGNhbGxlZCB3aXRoIGFuIGFyZ3VtZW50LiBJdCdzIHNvbWV0aW1lcyB1c2Vm
dWwgdG8gdXNlIHRoaXMKKyAqIGZvciBtb2RlbHMgdGhhdCBoYXZlIGFuIGludGVybmFsIHJlcHJl
c2VudGF0aW9uIHRoYXQncyBkaWZmZXJlbnQgZnJvbSB3aGF0IHRoZSBtb2RlbCBleHBvc2VzCisg
KiB0byB0aGUgdmlldy4KKyAqCisgKiA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1zdWNjZXNzIj4K
KyAqICoqQmVzdCBQcmFjdGljZToqKiBJdCdzIGJlc3QgdG8ga2VlcCBnZXR0ZXJzIGZhc3QgYmVj
YXVzZSBBbmd1bGFyIGlzIGxpa2VseSB0byBjYWxsIHRoZW0gbW9yZQorICogZnJlcXVlbnRseSB0
aGFuIG90aGVyIHBhcnRzIG9mIHlvdXIgY29kZS4KKyAqIDwvZGl2PgorICoKKyAqIFlvdSB1c2Ug
dGhpcyBiZWhhdmlvciBieSBhZGRpbmcgYG5nLW1vZGVsLW9wdGlvbnM9InsgZ2V0dGVyU2V0dGVy
OiB0cnVlIH0iYCB0byBhbiBlbGVtZW50IHRoYXQKKyAqIGhhcyBgbmctbW9kZWxgIGF0dGFjaGVk
IHRvIGl0LiBZb3UgY2FuIGFsc28gYWRkIGBuZy1tb2RlbC1vcHRpb25zPSJ7IGdldHRlclNldHRl
cjogdHJ1ZSB9ImAgdG8KKyAqIGEgYDxmb3JtPmAsIHdoaWNoIHdpbGwgZW5hYmxlIHRoaXMgYmVo
YXZpb3IgZm9yIGFsbCBgPGlucHV0PmBzIHdpdGhpbiBpdC4gU2VlCisgKiB7QGxpbmsgbmcuZGly
ZWN0aXZlOm5nTW9kZWxPcHRpb25zIGBuZ01vZGVsT3B0aW9uc2B9IGZvciBtb3JlLgorICoKKyAq
IFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gdXNlIGBuZ01vZGVsYCB3aXRoIGEg
Z2V0dGVyL3NldHRlcjoKKyAqCisgKiBAZXhhbXBsZQorICogPGV4YW1wbGUgbmFtZT0ibmdNb2Rl
bC1nZXR0ZXItc2V0dGVyIiBtb2R1bGU9ImdldHRlclNldHRlckV4YW1wbGUiPgorICAgICA8Zmls
ZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9IkV4YW1wbGVD
b250cm9sbGVyIj4KKyAgICAgICAgIDxmb3JtIG5hbWU9InVzZXJGb3JtIj4KKyAgICAgICAgICAg
PGxhYmVsPk5hbWU6CisgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InVzZXJO
YW1lIgorICAgICAgICAgICAgICAgICAgICBuZy1tb2RlbD0idXNlci5uYW1lIgorICAgICAgICAg
ICAgICAgICAgICBuZy1tb2RlbC1vcHRpb25zPSJ7IGdldHRlclNldHRlcjogdHJ1ZSB9IiAvPgor
ICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgPC9mb3JtPgorICAgICAgICAgPHByZT51c2Vy
Lm5hbWUgPSA8c3BhbiBuZy1iaW5kPSJ1c2VyLm5hbWUoKSI+PC9zcGFuPjwvcHJlPgorICAgICAg
IDwvZGl2PgorICAgICA8L2ZpbGU+CisgICAgIDxmaWxlIG5hbWU9ImFwcC5qcyI+CisgICAgICAg
YW5ndWxhci5tb2R1bGUoJ2dldHRlclNldHRlckV4YW1wbGUnLCBbXSkKKyAgICAgICAgIC5jb250
cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7
CisgICAgICAgICAgIHZhciBfbmFtZSA9ICdCcmlhbic7CisgICAgICAgICAgICRzY29wZS51c2Vy
ID0geworICAgICAgICAgICAgIG5hbWU6IGZ1bmN0aW9uKG5ld05hbWUpIHsKKyAgICAgICAgICAg
ICAgLy8gTm90ZSB0aGF0IG5ld05hbWUgY2FuIGJlIHVuZGVmaW5lZCBmb3IgdHdvIHJlYXNvbnM6
CisgICAgICAgICAgICAgIC8vIDEuIEJlY2F1c2UgaXQgaXMgY2FsbGVkIGFzIGEgZ2V0dGVyIGFu
ZCB0aHVzIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cworICAgICAgICAgICAgICAvLyAyLiBCZWNh
dXNlIHRoZSBwcm9wZXJ0eSBzaG91bGQgYWN0dWFsbHkgYmUgc2V0IHRvIHVuZGVmaW5lZC4gVGhp
cyBoYXBwZW5zIGUuZy4gaWYgdGhlCisgICAgICAgICAgICAgIC8vICAgIGlucHV0IGlzIGludmFs
aWQKKyAgICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoX25hbWUgPSBuZXdO
YW1lKSA6IF9uYW1lOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfTsKKyAgICAgICAgIH1d
KTsKKyAgICAgPC9maWxlPgorICogPC9leGFtcGxlPgorICovCit2YXIgbmdNb2RlbERpcmVjdGl2
ZSA9IFsnJHJvb3RTY29wZScsIGZ1bmN0aW9uKCRyb290U2NvcGUpIHsKKyAgcmV0dXJuIHsKKyAg
ICByZXN0cmljdDogJ0EnLAorICAgIHJlcXVpcmU6IFsnbmdNb2RlbCcsICdeP2Zvcm0nLCAnXj9u
Z01vZGVsT3B0aW9ucyddLAorICAgIGNvbnRyb2xsZXI6IE5nTW9kZWxDb250cm9sbGVyLAorICAg
IC8vIFByZWxpbmsgbmVlZHMgdG8gcnVuIGJlZm9yZSBhbnkgaW5wdXQgZGlyZWN0aXZlCisgICAg
Ly8gc28gdGhhdCB3ZSBjYW4gc2V0IHRoZSBOZ01vZGVsT3B0aW9ucyBpbiBOZ01vZGVsQ29udHJv
bGxlcgorICAgIC8vIGJlZm9yZSBhbnlvbmUgZWxzZSB1c2VzIGl0LgorICAgIHByaW9yaXR5OiAx
LAorICAgIGNvbXBpbGU6IGZ1bmN0aW9uIG5nTW9kZWxDb21waWxlKGVsZW1lbnQpIHsKKyAgICAg
IC8vIFNldHVwIGluaXRpYWwgc3RhdGUgb2YgdGhlIGNvbnRyb2wKKyAgICAgIGVsZW1lbnQuYWRk
Q2xhc3MoUFJJU1RJTkVfQ0xBU1MpLmFkZENsYXNzKFVOVE9VQ0hFRF9DTEFTUykuYWRkQ2xhc3Mo
VkFMSURfQ0xBU1MpOworCisgICAgICByZXR1cm4geworICAgICAgICBwcmU6IGZ1bmN0aW9uIG5n
TW9kZWxQcmVMaW5rKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJscykgeworICAgICAgICAgIHZh
ciBtb2RlbEN0cmwgPSBjdHJsc1swXSwKKyAgICAgICAgICAgICAgZm9ybUN0cmwgPSBjdHJsc1sx
XSB8fCBudWxsRm9ybUN0cmw7CisKKyAgICAgICAgICBtb2RlbEN0cmwuJCRzZXRPcHRpb25zKGN0
cmxzWzJdICYmIGN0cmxzWzJdLiRvcHRpb25zKTsKKworICAgICAgICAgIC8vIG5vdGlmeSBvdGhl
cnMsIGVzcGVjaWFsbHkgcGFyZW50IGZvcm1zCisgICAgICAgICAgZm9ybUN0cmwuJGFkZENvbnRy
b2wobW9kZWxDdHJsKTsKKworICAgICAgICAgIGF0dHIuJG9ic2VydmUoJ25hbWUnLCBmdW5jdGlv
bihuZXdWYWx1ZSkgeworICAgICAgICAgICAgaWYgKG1vZGVsQ3RybC4kbmFtZSAhPT0gbmV3VmFs
dWUpIHsKKyAgICAgICAgICAgICAgZm9ybUN0cmwuJCRyZW5hbWVDb250cm9sKG1vZGVsQ3RybCwg
bmV3VmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0pOworCisgICAgICAgICAgc2Nv
cGUuJG9uKCckZGVzdHJveScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZm9ybUN0cmwuJHJl
bW92ZUNvbnRyb2wobW9kZWxDdHJsKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfSwKKyAgICAg
ICAgcG9zdDogZnVuY3Rpb24gbmdNb2RlbFBvc3RMaW5rKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBj
dHJscykgeworICAgICAgICAgIHZhciBtb2RlbEN0cmwgPSBjdHJsc1swXTsKKyAgICAgICAgICBp
ZiAobW9kZWxDdHJsLiRvcHRpb25zICYmIG1vZGVsQ3RybC4kb3B0aW9ucy51cGRhdGVPbikgewor
ICAgICAgICAgICAgZWxlbWVudC5vbihtb2RlbEN0cmwuJG9wdGlvbnMudXBkYXRlT24sIGZ1bmN0
aW9uKGV2KSB7CisgICAgICAgICAgICAgIG1vZGVsQ3RybC4kJGRlYm91bmNlVmlld1ZhbHVlQ29t
bWl0KGV2ICYmIGV2LnR5cGUpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgfQorCisgICAg
ICAgICAgZWxlbWVudC5vbignYmx1cicsIGZ1bmN0aW9uKGV2KSB7CisgICAgICAgICAgICBpZiAo
bW9kZWxDdHJsLiR0b3VjaGVkKSByZXR1cm47CisKKyAgICAgICAgICAgIGlmICgkcm9vdFNjb3Bl
LiQkcGhhc2UpIHsKKyAgICAgICAgICAgICAgc2NvcGUuJGV2YWxBc3luYyhtb2RlbEN0cmwuJHNl
dFRvdWNoZWQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgc2NvcGUuJGFw
cGx5KG1vZGVsQ3RybC4kc2V0VG91Y2hlZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSk7
CisgICAgICAgIH0KKyAgICAgIH07CisgICAgfQorICB9OworfV07CisKK3ZhciBERUZBVUxUX1JF
R0VYUCA9IC8oXHMrfF4pZGVmYXVsdChccyt8JCkvOworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3Rp
dmUKKyAqIEBuYW1lIG5nTW9kZWxPcHRpb25zCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBBbGxv
d3MgdHVuaW5nIGhvdyBtb2RlbCB1cGRhdGVzIGFyZSBkb25lLiBVc2luZyBgbmdNb2RlbE9wdGlv
bnNgIHlvdSBjYW4gc3BlY2lmeSBhIGN1c3RvbSBsaXN0IG9mCisgKiBldmVudHMgdGhhdCB3aWxs
IHRyaWdnZXIgYSBtb2RlbCB1cGRhdGUgYW5kL29yIGEgZGVib3VuY2luZyBkZWxheSBzbyB0aGF0
IHRoZSBhY3R1YWwgdXBkYXRlIG9ubHkKKyAqIHRha2VzIHBsYWNlIHdoZW4gYSB0aW1lciBleHBp
cmVzOyB0aGlzIHRpbWVyIHdpbGwgYmUgcmVzZXQgYWZ0ZXIgYW5vdGhlciBjaGFuZ2UgdGFrZXMg
cGxhY2UuCisgKgorICogR2l2ZW4gdGhlIG5hdHVyZSBvZiBgbmdNb2RlbE9wdGlvbnNgLCB0aGUg
dmFsdWUgZGlzcGxheWVkIGluc2lkZSBpbnB1dCBmaWVsZHMgaW4gdGhlIHZpZXcgbWlnaHQKKyAq
IGJlIGRpZmZlcmVudCBmcm9tIHRoZSB2YWx1ZSBpbiB0aGUgYWN0dWFsIG1vZGVsLiBUaGlzIG1l
YW5zIHRoYXQgaWYgeW91IHVwZGF0ZSB0aGUgbW9kZWwgeW91CisgKiBzaG91bGQgYWxzbyBpbnZv
a2Uge0BsaW5rIG5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXIgYCRyb2xsYmFja1ZpZXdWYWx1ZWB9
IG9uIHRoZSByZWxldmFudCBpbnB1dCBmaWVsZCBpbgorICogb3JkZXIgdG8gbWFrZSBzdXJlIGl0
IGlzIHN5bmNocm9uaXplZCB3aXRoIHRoZSBtb2RlbCBhbmQgdGhhdCBhbnkgZGVib3VuY2VkIGFj
dGlvbiBpcyBjYW5jZWxlZC4KKyAqCisgKiBUaGUgZWFzaWVzdCB3YXkgdG8gcmVmZXJlbmNlIHRo
ZSBjb250cm9sJ3Mge0BsaW5rIG5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXIgYCRyb2xsYmFja1Zp
ZXdWYWx1ZWB9CisgKiBtZXRob2QgaXMgYnkgbWFraW5nIHN1cmUgdGhlIGlucHV0IGlzIHBsYWNl
ZCBpbnNpZGUgYSBmb3JtIHRoYXQgaGFzIGEgYG5hbWVgIGF0dHJpYnV0ZS4gVGhpcyBpcworICog
aW1wb3J0YW50IGJlY2F1c2UgYGZvcm1gIGNvbnRyb2xsZXJzIGFyZSBwdWJsaXNoZWQgdG8gdGhl
IHJlbGF0ZWQgc2NvcGUgdW5kZXIgdGhlIG5hbWUgaW4gdGhlaXIKKyAqIGBuYW1lYCBhdHRyaWJ1
dGUuCisgKgorICogQW55IHBlbmRpbmcgY2hhbmdlcyB3aWxsIHRha2UgcGxhY2UgaW1tZWRpYXRl
bHkgd2hlbiBhbiBlbmNsb3NpbmcgZm9ybSBpcyBzdWJtaXR0ZWQgdmlhIHRoZQorICogYHN1Ym1p
dGAgZXZlbnQuIE5vdGUgdGhhdCBgbmdDbGlja2AgZXZlbnRzIHdpbGwgb2NjdXIgYmVmb3JlIHRo
ZSBtb2RlbCBpcyB1cGRhdGVkLiBVc2UgYG5nU3VibWl0YAorICogdG8gaGF2ZSBhY2Nlc3MgdG8g
dGhlIHVwZGF0ZWQgbW9kZWwuCisgKgorICogYG5nTW9kZWxPcHRpb25zYCBoYXMgYW4gZWZmZWN0
IG9uIHRoZSBlbGVtZW50IGl0J3MgZGVjbGFyZWQgb24gYW5kIGl0cyBkZXNjZW5kYW50cy4KKyAq
CisgKiBAcGFyYW0ge09iamVjdH0gbmdNb2RlbE9wdGlvbnMgb3B0aW9ucyB0byBhcHBseSB0byB0
aGUgY3VycmVudCBtb2RlbC4gVmFsaWQga2V5cyBhcmU6CisgKiAgIC0gYHVwZGF0ZU9uYDogc3Ry
aW5nIHNwZWNpZnlpbmcgd2hpY2ggZXZlbnQgc2hvdWxkIHRoZSBpbnB1dCBiZSBib3VuZCB0by4g
WW91IGNhbiBzZXQgc2V2ZXJhbAorICogICAgIGV2ZW50cyB1c2luZyBhbiBzcGFjZSBkZWxpbWl0
ZWQgbGlzdC4gVGhlcmUgaXMgYSBzcGVjaWFsIGV2ZW50IGNhbGxlZCBgZGVmYXVsdGAgdGhhdAor
ICogICAgIG1hdGNoZXMgdGhlIGRlZmF1bHQgZXZlbnRzIGJlbG9uZ2luZyBvZiB0aGUgY29udHJv
bC4KKyAqICAgLSBgZGVib3VuY2VgOiBpbnRlZ2VyIHZhbHVlIHdoaWNoIGNvbnRhaW5zIHRoZSBk
ZWJvdW5jZSBtb2RlbCB1cGRhdGUgdmFsdWUgaW4gbWlsbGlzZWNvbmRzLiBBCisgKiAgICAgdmFs
dWUgb2YgMCB0cmlnZ2VycyBhbiBpbW1lZGlhdGUgdXBkYXRlLiBJZiBhbiBvYmplY3QgaXMgc3Vw
cGxpZWQgaW5zdGVhZCwgeW91IGNhbiBzcGVjaWZ5IGEKKyAqICAgICBjdXN0b20gdmFsdWUgZm9y
IGVhY2ggZXZlbnQuIEZvciBleGFtcGxlOgorICogICAgIGBuZy1tb2RlbC1vcHRpb25zPSJ7IHVw
ZGF0ZU9uOiAnZGVmYXVsdCBibHVyJywgZGVib3VuY2U6IHsgJ2RlZmF1bHQnOiA1MDAsICdibHVy
JzogMCB9IH0iYAorICogICAtIGBhbGxvd0ludmFsaWRgOiBib29sZWFuIHZhbHVlIHdoaWNoIGlu
ZGljYXRlcyB0aGF0IHRoZSBtb2RlbCBjYW4gYmUgc2V0IHdpdGggdmFsdWVzIHRoYXQgZGlkCisg
KiAgICAgbm90IHZhbGlkYXRlIGNvcnJlY3RseSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGJlaGF2
aW9yIG9mIHNldHRpbmcgdGhlIG1vZGVsIHRvIHVuZGVmaW5lZC4KKyAqICAgLSBgZ2V0dGVyU2V0
dGVyYDogYm9vbGVhbiB2YWx1ZSB3aGljaCBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRvIHRy
ZWF0IGZ1bmN0aW9ucyBib3VuZCB0bworICAgICAgIGBuZ01vZGVsYCBhcyBnZXR0ZXJzL3NldHRl
cnMuCisgKiAgIC0gYHRpbWV6b25lYDogRGVmaW5lcyB0aGUgdGltZXpvbmUgdG8gYmUgdXNlZCB0
byByZWFkL3dyaXRlIHRoZSBgRGF0ZWAgaW5zdGFuY2UgaW4gdGhlIG1vZGVsIGZvcgorICogICAg
IGA8aW5wdXQgdHlwZT0iZGF0ZSI+YCwgYDxpbnB1dCB0eXBlPSJ0aW1lIj5gLCAuLi4gLiBJdCB1
bmRlcnN0YW5kcyBVVEMvR01UIGFuZCB0aGUKKyAqICAgICBjb250aW5lbnRhbCBVUyB0aW1lIHpv
bmUgYWJicmV2aWF0aW9ucywgYnV0IGZvciBnZW5lcmFsIHVzZSwgdXNlIGEgdGltZSB6b25lIG9m
ZnNldCwgZm9yCisgKiAgICAgZXhhbXBsZSwgYCcrMDQzMCdgICg0IGhvdXJzLCAzMCBtaW51dGVz
IGVhc3Qgb2YgdGhlIEdyZWVud2ljaCBtZXJpZGlhbikKKyAqICAgICBJZiBub3Qgc3BlY2lmaWVk
LCB0aGUgdGltZXpvbmUgb2YgdGhlIGJyb3dzZXIgd2lsbCBiZSB1c2VkLgorICoKKyAqIEBleGFt
cGxlCisKKyAgVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byBvdmVycmlkZSBpbW1l
ZGlhdGUgdXBkYXRlcy4gQ2hhbmdlcyBvbiB0aGUgaW5wdXRzIHdpdGhpbiB0aGUKKyAgZm9ybSB3
aWxsIHVwZGF0ZSB0aGUgbW9kZWwgb25seSB3aGVuIHRoZSBjb250cm9sIGxvc2VzIGZvY3VzIChi
bHVyIGV2ZW50KS4gSWYgYGVzY2FwZWAga2V5IGlzCisgIHByZXNzZWQgd2hpbGUgdGhlIGlucHV0
IGZpZWxkIGlzIGZvY3VzZWQsIHRoZSB2YWx1ZSBpcyByZXNldCB0byB0aGUgdmFsdWUgaW4gdGhl
IGN1cnJlbnQgbW9kZWwuCisKKyAgPGV4YW1wbGUgbmFtZT0ibmdNb2RlbE9wdGlvbnMtZGlyZWN0
aXZlLWJsdXIiIG1vZHVsZT0ib3B0aW9uc0V4YW1wbGUiPgorICAgIDxmaWxlIG5hbWU9ImluZGV4
Lmh0bWwiPgorICAgICAgPGRpdiBuZy1jb250cm9sbGVyPSJFeGFtcGxlQ29udHJvbGxlciI+Cisg
ICAgICAgIDxmb3JtIG5hbWU9InVzZXJGb3JtIj4KKyAgICAgICAgICA8bGFiZWw+TmFtZToKKyAg
ICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyTmFtZSIKKyAgICAgICAgICAg
ICAgICAgICBuZy1tb2RlbD0idXNlci5uYW1lIgorICAgICAgICAgICAgICAgICAgIG5nLW1vZGVs
LW9wdGlvbnM9InsgdXBkYXRlT246ICdibHVyJyB9IgorICAgICAgICAgICAgICAgICAgIG5nLWtl
eXVwPSJjYW5jZWwoJGV2ZW50KSIgLz4KKyAgICAgICAgICA8L2xhYmVsPjxiciAvPgorICAgICAg
ICAgIDxsYWJlbD5PdGhlciBkYXRhOgorICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5n
LW1vZGVsPSJ1c2VyLmRhdGEiIC8+CisgICAgICAgICAgPC9sYWJlbD48YnIgLz4KKyAgICAgICAg
PC9mb3JtPgorICAgICAgICA8cHJlPnVzZXIubmFtZSA9IDxzcGFuIG5nLWJpbmQ9InVzZXIubmFt
ZSI+PC9zcGFuPjwvcHJlPgorICAgICAgPC9kaXY+CisgICAgPC9maWxlPgorICAgIDxmaWxlIG5h
bWU9ImFwcC5qcyI+CisgICAgICBhbmd1bGFyLm1vZHVsZSgnb3B0aW9uc0V4YW1wbGUnLCBbXSkK
KyAgICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5j
dGlvbigkc2NvcGUpIHsKKyAgICAgICAgICAkc2NvcGUudXNlciA9IHsgbmFtZTogJ3NheScsIGRh
dGE6ICcnIH07CisKKyAgICAgICAgICAkc2NvcGUuY2FuY2VsID0gZnVuY3Rpb24oZSkgeworICAg
ICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAyNykgeworICAgICAgICAgICAgICAkc2NvcGUudXNl
ckZvcm0udXNlck5hbWUuJHJvbGxiYWNrVmlld1ZhbHVlKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgfTsKKyAgICAgICAgfV0pOworICAgIDwvZmlsZT4KKyAgICA8ZmlsZSBuYW1lPSJwcm90
cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFjdG9yIj4KKyAgICAgIHZhciBtb2RlbCA9IGVsZW1lbnQo
YnkuYmluZGluZygndXNlci5uYW1lJykpOworICAgICAgdmFyIGlucHV0ID0gZWxlbWVudChieS5t
b2RlbCgndXNlci5uYW1lJykpOworICAgICAgdmFyIG90aGVyID0gZWxlbWVudChieS5tb2RlbCgn
dXNlci5kYXRhJykpOworCisgICAgICBpdCgnc2hvdWxkIGFsbG93IGN1c3RvbSBldmVudHMnLCBm
dW5jdGlvbigpIHsKKyAgICAgICAgaW5wdXQuc2VuZEtleXMoJyBoZWxsbycpOworICAgICAgICBp
bnB1dC5jbGljaygpOworICAgICAgICBleHBlY3QobW9kZWwuZ2V0VGV4dCgpKS50b0VxdWFsKCdz
YXknKTsKKyAgICAgICAgb3RoZXIuY2xpY2soKTsKKyAgICAgICAgZXhwZWN0KG1vZGVsLmdldFRl
eHQoKSkudG9FcXVhbCgnc2F5IGhlbGxvJyk7CisgICAgICB9KTsKKworICAgICAgaXQoJ3Nob3Vs
ZCAkcm9sbGJhY2tWaWV3VmFsdWUgd2hlbiBtb2RlbCBjaGFuZ2VzJywgZnVuY3Rpb24oKSB7Cisg
ICAgICAgIGlucHV0LnNlbmRLZXlzKCcgaGVsbG8nKTsKKyAgICAgICAgZXhwZWN0KGlucHV0Lmdl
dEF0dHJpYnV0ZSgndmFsdWUnKSkudG9FcXVhbCgnc2F5IGhlbGxvJyk7CisgICAgICAgIGlucHV0
LnNlbmRLZXlzKHByb3RyYWN0b3IuS2V5LkVTQ0FQRSk7CisgICAgICAgIGV4cGVjdChpbnB1dC5n
ZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpLnRvRXF1YWwoJ3NheScpOworICAgICAgICBvdGhlci5jbGlj
aygpOworICAgICAgICBleHBlY3QobW9kZWwuZ2V0VGV4dCgpKS50b0VxdWFsKCdzYXknKTsKKyAg
ICAgIH0pOworICAgIDwvZmlsZT4KKyAgPC9leGFtcGxlPgorCisgIFRoaXMgb25lIHNob3dzIGhv
dyB0byBkZWJvdW5jZSBtb2RlbCBjaGFuZ2VzLiBNb2RlbCB3aWxsIGJlIHVwZGF0ZWQgb25seSAx
IHNlYyBhZnRlciBsYXN0IGNoYW5nZS4KKyAgSWYgdGhlIGBDbGVhcmAgYnV0dG9uIGlzIHByZXNz
ZWQsIGFueSBkZWJvdW5jZWQgYWN0aW9uIGlzIGNhbmNlbGVkIGFuZCB0aGUgdmFsdWUgYmVjb21l
cyBlbXB0eS4KKworICA8ZXhhbXBsZSBuYW1lPSJuZ01vZGVsT3B0aW9ucy1kaXJlY3RpdmUtZGVi
b3VuY2UiIG1vZHVsZT0ib3B0aW9uc0V4YW1wbGUiPgorICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0
bWwiPgorICAgICAgPGRpdiBuZy1jb250cm9sbGVyPSJFeGFtcGxlQ29udHJvbGxlciI+CisgICAg
ICAgIDxmb3JtIG5hbWU9InVzZXJGb3JtIj4KKyAgICAgICAgICA8bGFiZWw+TmFtZToKKyAgICAg
ICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyTmFtZSIKKyAgICAgICAgICAgICAg
ICAgICBuZy1tb2RlbD0idXNlci5uYW1lIgorICAgICAgICAgICAgICAgICAgIG5nLW1vZGVsLW9w
dGlvbnM9InsgZGVib3VuY2U6IDEwMDAgfSIgLz4KKyAgICAgICAgICA8L2xhYmVsPgorICAgICAg
ICAgIDxidXR0b24gbmctY2xpY2s9InVzZXJGb3JtLnVzZXJOYW1lLiRyb2xsYmFja1ZpZXdWYWx1
ZSgpOyB1c2VyLm5hbWU9JyciPkNsZWFyPC9idXR0b24+CisgICAgICAgICAgPGJyIC8+CisgICAg
ICAgIDwvZm9ybT4KKyAgICAgICAgPHByZT51c2VyLm5hbWUgPSA8c3BhbiBuZy1iaW5kPSJ1c2Vy
Lm5hbWUiPjwvc3Bhbj48L3ByZT4KKyAgICAgIDwvZGl2PgorICAgIDwvZmlsZT4KKyAgICA8Zmls
ZSBuYW1lPSJhcHAuanMiPgorICAgICAgYW5ndWxhci5tb2R1bGUoJ29wdGlvbnNFeGFtcGxlJywg
W10pCisgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywg
ZnVuY3Rpb24oJHNjb3BlKSB7CisgICAgICAgICAgJHNjb3BlLnVzZXIgPSB7IG5hbWU6ICdzYXkn
IH07CisgICAgICAgIH1dKTsKKyAgICA8L2ZpbGU+CisgIDwvZXhhbXBsZT4KKworICBUaGlzIG9u
ZSBzaG93cyBob3cgdG8gYmluZCB0byBnZXR0ZXIvc2V0dGVyczoKKworICA8ZXhhbXBsZSBuYW1l
PSJuZ01vZGVsT3B0aW9ucy1kaXJlY3RpdmUtZ2V0dGVyLXNldHRlciIgbW9kdWxlPSJnZXR0ZXJT
ZXR0ZXJFeGFtcGxlIj4KKyAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgIDxkaXYg
bmctY29udHJvbGxlcj0iRXhhbXBsZUNvbnRyb2xsZXIiPgorICAgICAgICA8Zm9ybSBuYW1lPSJ1
c2VyRm9ybSI+CisgICAgICAgICAgPGxhYmVsPk5hbWU6CisgICAgICAgICAgICA8aW5wdXQgdHlw
ZT0idGV4dCIgbmFtZT0idXNlck5hbWUiCisgICAgICAgICAgICAgICAgICAgbmctbW9kZWw9InVz
ZXIubmFtZSIKKyAgICAgICAgICAgICAgICAgICBuZy1tb2RlbC1vcHRpb25zPSJ7IGdldHRlclNl
dHRlcjogdHJ1ZSB9IiAvPgorICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgIDwvZm9ybT4KKyAg
ICAgICAgPHByZT51c2VyLm5hbWUgPSA8c3BhbiBuZy1iaW5kPSJ1c2VyLm5hbWUoKSI+PC9zcGFu
PjwvcHJlPgorICAgICAgPC9kaXY+CisgICAgPC9maWxlPgorICAgIDxmaWxlIG5hbWU9ImFwcC5q
cyI+CisgICAgICBhbmd1bGFyLm1vZHVsZSgnZ2V0dGVyU2V0dGVyRXhhbXBsZScsIFtdKQorICAg
ICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9u
KCRzY29wZSkgeworICAgICAgICAgIHZhciBfbmFtZSA9ICdCcmlhbic7CisgICAgICAgICAgJHNj
b3BlLnVzZXIgPSB7CisgICAgICAgICAgICBuYW1lOiBmdW5jdGlvbihuZXdOYW1lKSB7CisgICAg
ICAgICAgICAgIC8vIE5vdGUgdGhhdCBuZXdOYW1lIGNhbiBiZSB1bmRlZmluZWQgZm9yIHR3byBy
ZWFzb25zOgorICAgICAgICAgICAgICAvLyAxLiBCZWNhdXNlIGl0IGlzIGNhbGxlZCBhcyBhIGdl
dHRlciBhbmQgdGh1cyBjYWxsZWQgd2l0aCBubyBhcmd1bWVudHMKKyAgICAgICAgICAgICAgLy8g
Mi4gQmVjYXVzZSB0aGUgcHJvcGVydHkgc2hvdWxkIGFjdHVhbGx5IGJlIHNldCB0byB1bmRlZmlu
ZWQuIFRoaXMgaGFwcGVucyBlLmcuIGlmIHRoZQorICAgICAgICAgICAgICAvLyAgICBpbnB1dCBp
cyBpbnZhbGlkCisgICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKF9uYW1l
ID0gbmV3TmFtZSkgOiBfbmFtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9OworICAgICAg
ICB9XSk7CisgICAgPC9maWxlPgorICA8L2V4YW1wbGU+CisgKi8KK3ZhciBuZ01vZGVsT3B0aW9u
c0RpcmVjdGl2ZSA9IGZ1bmN0aW9uKCkgeworICByZXR1cm4geworICAgIHJlc3RyaWN0OiAnQScs
CisgICAgY29udHJvbGxlcjogWyckc2NvcGUnLCAnJGF0dHJzJywgZnVuY3Rpb24oJHNjb3BlLCAk
YXR0cnMpIHsKKyAgICAgIHZhciB0aGF0ID0gdGhpczsKKyAgICAgIHRoaXMuJG9wdGlvbnMgPSBj
b3B5KCRzY29wZS4kZXZhbCgkYXR0cnMubmdNb2RlbE9wdGlvbnMpKTsKKyAgICAgIC8vIEFsbG93
IGFkZGluZy9vdmVycmlkaW5nIGJvdW5kIGV2ZW50cworICAgICAgaWYgKHRoaXMuJG9wdGlvbnMu
dXBkYXRlT24gIT09IHVuZGVmaW5lZCkgeworICAgICAgICB0aGlzLiRvcHRpb25zLnVwZGF0ZU9u
RGVmYXVsdCA9IGZhbHNlOworICAgICAgICAvLyBleHRyYWN0ICJkZWZhdWx0IiBwc2V1ZG8tZXZl
bnQgZnJvbSBsaXN0IG9mIGV2ZW50cyB0aGF0IGNhbiB0cmlnZ2VyIGEgbW9kZWwgdXBkYXRlCisg
ICAgICAgIHRoaXMuJG9wdGlvbnMudXBkYXRlT24gPSB0cmltKHRoaXMuJG9wdGlvbnMudXBkYXRl
T24ucmVwbGFjZShERUZBVUxUX1JFR0VYUCwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgdGhhdC4k
b3B0aW9ucy51cGRhdGVPbkRlZmF1bHQgPSB0cnVlOworICAgICAgICAgIHJldHVybiAnICc7Cisg
ICAgICAgIH0pKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMuJG9wdGlvbnMudXBkYXRl
T25EZWZhdWx0ID0gdHJ1ZTsKKyAgICAgIH0KKyAgICB9XQorICB9OworfTsKKworCisKKy8vIGhl
bHBlciBtZXRob2RzCitmdW5jdGlvbiBhZGRTZXRWYWxpZGl0eU1ldGhvZChjb250ZXh0KSB7Cisg
IHZhciBjdHJsID0gY29udGV4dC5jdHJsLAorICAgICAgJGVsZW1lbnQgPSBjb250ZXh0LiRlbGVt
ZW50LAorICAgICAgY2xhc3NDYWNoZSA9IHt9LAorICAgICAgc2V0ID0gY29udGV4dC5zZXQsCisg
ICAgICB1bnNldCA9IGNvbnRleHQudW5zZXQsCisgICAgICBwYXJlbnRGb3JtID0gY29udGV4dC5w
YXJlbnRGb3JtLAorICAgICAgJGFuaW1hdGUgPSBjb250ZXh0LiRhbmltYXRlOworCisgIGNsYXNz
Q2FjaGVbSU5WQUxJRF9DTEFTU10gPSAhKGNsYXNzQ2FjaGVbVkFMSURfQ0xBU1NdID0gJGVsZW1l
bnQuaGFzQ2xhc3MoVkFMSURfQ0xBU1MpKTsKKworICBjdHJsLiRzZXRWYWxpZGl0eSA9IHNldFZh
bGlkaXR5OworCisgIGZ1bmN0aW9uIHNldFZhbGlkaXR5KHZhbGlkYXRpb25FcnJvcktleSwgc3Rh
dGUsIGNvbnRyb2xsZXIpIHsKKyAgICBpZiAoc3RhdGUgPT09IHVuZGVmaW5lZCkgeworICAgICAg
Y3JlYXRlQW5kU2V0KCckcGVuZGluZycsIHZhbGlkYXRpb25FcnJvcktleSwgY29udHJvbGxlcik7
CisgICAgfSBlbHNlIHsKKyAgICAgIHVuc2V0QW5kQ2xlYW51cCgnJHBlbmRpbmcnLCB2YWxpZGF0
aW9uRXJyb3JLZXksIGNvbnRyb2xsZXIpOworICAgIH0KKyAgICBpZiAoIWlzQm9vbGVhbihzdGF0
ZSkpIHsKKyAgICAgIHVuc2V0KGN0cmwuJGVycm9yLCB2YWxpZGF0aW9uRXJyb3JLZXksIGNvbnRy
b2xsZXIpOworICAgICAgdW5zZXQoY3RybC4kJHN1Y2Nlc3MsIHZhbGlkYXRpb25FcnJvcktleSwg
Y29udHJvbGxlcik7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmIChzdGF0ZSkgeworICAgICAgICB1
bnNldChjdHJsLiRlcnJvciwgdmFsaWRhdGlvbkVycm9yS2V5LCBjb250cm9sbGVyKTsKKyAgICAg
ICAgc2V0KGN0cmwuJCRzdWNjZXNzLCB2YWxpZGF0aW9uRXJyb3JLZXksIGNvbnRyb2xsZXIpOwor
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0KGN0cmwuJGVycm9yLCB2YWxpZGF0aW9uRXJyb3JL
ZXksIGNvbnRyb2xsZXIpOworICAgICAgICB1bnNldChjdHJsLiQkc3VjY2VzcywgdmFsaWRhdGlv
bkVycm9yS2V5LCBjb250cm9sbGVyKTsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKGN0cmwuJHBl
bmRpbmcpIHsKKyAgICAgIGNhY2hlZFRvZ2dsZUNsYXNzKFBFTkRJTkdfQ0xBU1MsIHRydWUpOwor
ICAgICAgY3RybC4kdmFsaWQgPSBjdHJsLiRpbnZhbGlkID0gdW5kZWZpbmVkOworICAgICAgdG9n
Z2xlVmFsaWRhdGlvbkNzcygnJywgbnVsbCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGNhY2hlZFRv
Z2dsZUNsYXNzKFBFTkRJTkdfQ0xBU1MsIGZhbHNlKTsKKyAgICAgIGN0cmwuJHZhbGlkID0gaXNP
YmplY3RFbXB0eShjdHJsLiRlcnJvcik7CisgICAgICBjdHJsLiRpbnZhbGlkID0gIWN0cmwuJHZh
bGlkOworICAgICAgdG9nZ2xlVmFsaWRhdGlvbkNzcygnJywgY3RybC4kdmFsaWQpOworICAgIH0K
KworICAgIC8vIHJlLXJlYWQgdGhlIHN0YXRlIGFzIHRoZSBzZXQvdW5zZXQgbWV0aG9kcyBjb3Vs
ZCBoYXZlCisgICAgLy8gY29tYmluZWQgc3RhdGUgaW4gY3RybC4kZXJyb3JbdmFsaWRhdGlvbkVy
cm9yXSAodXNlZCBmb3IgZm9ybXMpLAorICAgIC8vIHdoZXJlIHNldHRpbmcvdW5zZXR0aW5nIG9u
bHkgaW5jcmVtZW50cy9kZWNyZW1lbnRzIHRoZSB2YWx1ZSwKKyAgICAvLyBhbmQgZG9lcyBub3Qg
cmVwbGFjZSBpdC4KKyAgICB2YXIgY29tYmluZWRTdGF0ZTsKKyAgICBpZiAoY3RybC4kcGVuZGlu
ZyAmJiBjdHJsLiRwZW5kaW5nW3ZhbGlkYXRpb25FcnJvcktleV0pIHsKKyAgICAgIGNvbWJpbmVk
U3RhdGUgPSB1bmRlZmluZWQ7CisgICAgfSBlbHNlIGlmIChjdHJsLiRlcnJvclt2YWxpZGF0aW9u
RXJyb3JLZXldKSB7CisgICAgICBjb21iaW5lZFN0YXRlID0gZmFsc2U7CisgICAgfSBlbHNlIGlm
IChjdHJsLiQkc3VjY2Vzc1t2YWxpZGF0aW9uRXJyb3JLZXldKSB7CisgICAgICBjb21iaW5lZFN0
YXRlID0gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgY29tYmluZWRTdGF0ZSA9IG51bGw7Cisg
ICAgfQorCisgICAgdG9nZ2xlVmFsaWRhdGlvbkNzcyh2YWxpZGF0aW9uRXJyb3JLZXksIGNvbWJp
bmVkU3RhdGUpOworICAgIHBhcmVudEZvcm0uJHNldFZhbGlkaXR5KHZhbGlkYXRpb25FcnJvcktl
eSwgY29tYmluZWRTdGF0ZSwgY3RybCk7CisgIH0KKworICBmdW5jdGlvbiBjcmVhdGVBbmRTZXQo
bmFtZSwgdmFsdWUsIGNvbnRyb2xsZXIpIHsKKyAgICBpZiAoIWN0cmxbbmFtZV0pIHsKKyAgICAg
IGN0cmxbbmFtZV0gPSB7fTsKKyAgICB9CisgICAgc2V0KGN0cmxbbmFtZV0sIHZhbHVlLCBjb250
cm9sbGVyKTsKKyAgfQorCisgIGZ1bmN0aW9uIHVuc2V0QW5kQ2xlYW51cChuYW1lLCB2YWx1ZSwg
Y29udHJvbGxlcikgeworICAgIGlmIChjdHJsW25hbWVdKSB7CisgICAgICB1bnNldChjdHJsW25h
bWVdLCB2YWx1ZSwgY29udHJvbGxlcik7CisgICAgfQorICAgIGlmIChpc09iamVjdEVtcHR5KGN0
cmxbbmFtZV0pKSB7CisgICAgICBjdHJsW25hbWVdID0gdW5kZWZpbmVkOworICAgIH0KKyAgfQor
CisgIGZ1bmN0aW9uIGNhY2hlZFRvZ2dsZUNsYXNzKGNsYXNzTmFtZSwgc3dpdGNoVmFsdWUpIHsK
KyAgICBpZiAoc3dpdGNoVmFsdWUgJiYgIWNsYXNzQ2FjaGVbY2xhc3NOYW1lXSkgeworICAgICAg
JGFuaW1hdGUuYWRkQ2xhc3MoJGVsZW1lbnQsIGNsYXNzTmFtZSk7CisgICAgICBjbGFzc0NhY2hl
W2NsYXNzTmFtZV0gPSB0cnVlOworICAgIH0gZWxzZSBpZiAoIXN3aXRjaFZhbHVlICYmIGNsYXNz
Q2FjaGVbY2xhc3NOYW1lXSkgeworICAgICAgJGFuaW1hdGUucmVtb3ZlQ2xhc3MoJGVsZW1lbnQs
IGNsYXNzTmFtZSk7CisgICAgICBjbGFzc0NhY2hlW2NsYXNzTmFtZV0gPSBmYWxzZTsKKyAgICB9
CisgIH0KKworICBmdW5jdGlvbiB0b2dnbGVWYWxpZGF0aW9uQ3NzKHZhbGlkYXRpb25FcnJvcktl
eSwgaXNWYWxpZCkgeworICAgIHZhbGlkYXRpb25FcnJvcktleSA9IHZhbGlkYXRpb25FcnJvcktl
eSA/ICctJyArIHNuYWtlX2Nhc2UodmFsaWRhdGlvbkVycm9yS2V5LCAnLScpIDogJyc7CisKKyAg
ICBjYWNoZWRUb2dnbGVDbGFzcyhWQUxJRF9DTEFTUyArIHZhbGlkYXRpb25FcnJvcktleSwgaXNW
YWxpZCA9PT0gdHJ1ZSk7CisgICAgY2FjaGVkVG9nZ2xlQ2xhc3MoSU5WQUxJRF9DTEFTUyArIHZh
bGlkYXRpb25FcnJvcktleSwgaXNWYWxpZCA9PT0gZmFsc2UpOworICB9Cit9CisKK2Z1bmN0aW9u
IGlzT2JqZWN0RW1wdHkob2JqKSB7CisgIGlmIChvYmopIHsKKyAgICBmb3IgKHZhciBwcm9wIGlu
IG9iaikgeworICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiB0cnVlOworfQorCisv
KioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1lIG5nTm9uQmluZGFibGUKKyAqIEByZXN0
cmljdCBBQworICogQHByaW9yaXR5IDEwMDAKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFRoZSBg
bmdOb25CaW5kYWJsZWAgZGlyZWN0aXZlIHRlbGxzIEFuZ3VsYXIgbm90IHRvIGNvbXBpbGUgb3Ig
YmluZCB0aGUgY29udGVudHMgb2YgdGhlIGN1cnJlbnQKKyAqIERPTSBlbGVtZW50LiBUaGlzIGlz
IHVzZWZ1bCBpZiB0aGUgZWxlbWVudCBjb250YWlucyB3aGF0IGFwcGVhcnMgdG8gYmUgQW5ndWxh
ciBkaXJlY3RpdmVzIGFuZAorICogYmluZGluZ3MgYnV0IHdoaWNoIHNob3VsZCBiZSBpZ25vcmVk
IGJ5IEFuZ3VsYXIuIFRoaXMgY291bGQgYmUgdGhlIGNhc2UgaWYgeW91IGhhdmUgYSBzaXRlIHRo
YXQKKyAqIGRpc3BsYXlzIHNuaXBwZXRzIG9mIGNvZGUsIGZvciBpbnN0YW5jZS4KKyAqCisgKiBA
ZWxlbWVudCBBTlkKKyAqCisgKiBAZXhhbXBsZQorICogSW4gdGhpcyBleGFtcGxlIHRoZXJlIGFy
ZSB0d28gbG9jYXRpb25zIHdoZXJlIGEgc2ltcGxlIGludGVycG9sYXRpb24gYmluZGluZyAoYHt7
fX1gKSBpcyBwcmVzZW50LAorICogYnV0IHRoZSBvbmUgd3JhcHBlZCBpbiBgbmdOb25CaW5kYWJs
ZWAgaXMgbGVmdCBhbG9uZS4KKyAqCisgKiBAZXhhbXBsZQorICAgIDxleGFtcGxlPgorICAgICAg
PGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAgICAgIDxkaXY+Tm9ybWFsOiB7ezEgKyAyfX08
L2Rpdj4KKyAgICAgICAgPGRpdiBuZy1ub24tYmluZGFibGU+SWdub3JlZDoge3sxICsgMn19PC9k
aXY+CisgICAgICA8L2ZpbGU+CisgICAgICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBl
PSJwcm90cmFjdG9yIj4KKyAgICAgICBpdCgnc2hvdWxkIGNoZWNrIG5nLW5vbi1iaW5kYWJsZScs
IGZ1bmN0aW9uKCkgeworICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGluZygnMSArIDIn
KSkuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJzMnKTsKKyAgICAgICAgIGV4cGVjdChlbGVtZW50LmFs
bChieS5jc3MoJ2RpdicpKS5sYXN0KCkuZ2V0VGV4dCgpKS50b01hdGNoKC8xIFwrIDIvKTsKKyAg
ICAgICB9KTsKKyAgICAgIDwvZmlsZT4KKyAgICA8L2V4YW1wbGU+CisgKi8KK3ZhciBuZ05vbkJp
bmRhYmxlRGlyZWN0aXZlID0gbmdEaXJlY3RpdmUoeyB0ZXJtaW5hbDogdHJ1ZSwgcHJpb3JpdHk6
IDEwMDAgfSk7CisKKy8qIGdsb2JhbCBqcUxpdGVSZW1vdmUgKi8KKwordmFyIG5nT3B0aW9uc01p
bkVyciA9IG1pbkVycignbmdPcHRpb25zJyk7CisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQor
ICogQG5hbWUgbmdPcHRpb25zCisgKiBAcmVzdHJpY3QgQQorICoKKyAqIEBkZXNjcmlwdGlvbgor
ICoKKyAqIFRoZSBgbmdPcHRpb25zYCBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gZHluYW1pY2Fs
bHkgZ2VuZXJhdGUgYSBsaXN0IG9mIGA8b3B0aW9uPmAKKyAqIGVsZW1lbnRzIGZvciB0aGUgYDxz
ZWxlY3Q+YCBlbGVtZW50IHVzaW5nIHRoZSBhcnJheSBvciBvYmplY3Qgb2J0YWluZWQgYnkgZXZh
bHVhdGluZyB0aGUKKyAqIGBuZ09wdGlvbnNgIGNvbXByZWhlbnNpb24gZXhwcmVzc2lvbi4KKyAq
CisgKiBJbiBtYW55IGNhc2VzLCBgbmdSZXBlYXRgIGNhbiBiZSB1c2VkIG9uIGA8b3B0aW9uPmAg
ZWxlbWVudHMgaW5zdGVhZCBvZiBgbmdPcHRpb25zYCB0byBhY2hpZXZlIGEKKyAqIHNpbWlsYXIg
cmVzdWx0LiBIb3dldmVyLCBgbmdPcHRpb25zYCBwcm92aWRlcyBzb21lIGJlbmVmaXRzIHN1Y2gg
YXMgcmVkdWNpbmcgbWVtb3J5IGFuZAorICogaW5jcmVhc2luZyBzcGVlZCBieSBub3QgY3JlYXRp
bmcgYSBuZXcgc2NvcGUgZm9yIGVhY2ggcmVwZWF0ZWQgaW5zdGFuY2UsIGFzIHdlbGwgYXMgcHJv
dmlkaW5nCisgKiBtb3JlIGZsZXhpYmlsaXR5IGluIGhvdyB0aGUgYDxzZWxlY3Q+YCdzIG1vZGVs
IGlzIGFzc2lnbmVkIHZpYSB0aGUgYHNlbGVjdGAgKipgYXNgKiogcGFydCBvZiB0aGUKKyAqIGNv
bXByZWhlbnNpb24gZXhwcmVzc2lvbi4gYG5nT3B0aW9uc2Agc2hvdWxkIGJlIHVzZWQgd2hlbiB0
aGUgYDxzZWxlY3Q+YCBtb2RlbCBuZWVkcyB0byBiZSBib3VuZAorICogIHRvIGEgbm9uLXN0cmlu
ZyB2YWx1ZS4gVGhpcyBpcyBiZWNhdXNlIGFuIG9wdGlvbiBlbGVtZW50IGNhbiBvbmx5IGJlIGJv
dW5kIHRvIHN0cmluZyB2YWx1ZXMgYXQKKyAqIHByZXNlbnQuCisgKgorICogV2hlbiBhbiBpdGVt
IGluIHRoZSBgPHNlbGVjdD5gIG1lbnUgaXMgc2VsZWN0ZWQsIHRoZSBhcnJheSBlbGVtZW50IG9y
IG9iamVjdCBwcm9wZXJ0eQorICogcmVwcmVzZW50ZWQgYnkgdGhlIHNlbGVjdGVkIG9wdGlvbiB3
aWxsIGJlIGJvdW5kIHRvIHRoZSBtb2RlbCBpZGVudGlmaWVkIGJ5IHRoZSBgbmdNb2RlbGAKKyAq
IGRpcmVjdGl2ZS4KKyAqCisgKiBPcHRpb25hbGx5LCBhIHNpbmdsZSBoYXJkLWNvZGVkIGA8b3B0
aW9uPmAgZWxlbWVudCwgd2l0aCB0aGUgdmFsdWUgc2V0IHRvIGFuIGVtcHR5IHN0cmluZywgY2Fu
CisgKiBiZSBuZXN0ZWQgaW50byB0aGUgYDxzZWxlY3Q+YCBlbGVtZW50LiBUaGlzIGVsZW1lbnQg
d2lsbCB0aGVuIHJlcHJlc2VudCB0aGUgYG51bGxgIG9yICJub3Qgc2VsZWN0ZWQiCisgKiBvcHRp
b24uIFNlZSBleGFtcGxlIGJlbG93IGZvciBkZW1vbnN0cmF0aW9uLgorICoKKyAqICMjIENvbXBs
ZXggTW9kZWxzIChvYmplY3RzIG9yIGNvbGxlY3Rpb25zKQorICoKKyAqICoqTm90ZToqKiBCeSBk
ZWZhdWx0LCBgbmdNb2RlbGAgd2F0Y2hlcyB0aGUgbW9kZWwgYnkgcmVmZXJlbmNlLCBub3QgdmFs
dWUuIFRoaXMgaXMgaW1wb3J0YW50IHdoZW4KKyAqIGJpbmRpbmcgYW55IGlucHV0IGRpcmVjdGl2
ZSB0byBhIG1vZGVsIHRoYXQgaXMgYW4gb2JqZWN0IG9yIGEgY29sbGVjdGlvbi4KKyAqCisgKiBT
aW5jZSB0aGlzIGlzIGEgY29tbW9uIHNpdHVhdGlvbiBmb3IgYG5nT3B0aW9uc2AgdGhlIGRpcmVj
dGl2ZSBhZGRpdGlvbmFsbHkgd2F0Y2hlcyB0aGUgbW9kZWwgdXNpbmcKKyAqIGAkd2F0Y2hDb2xs
ZWN0aW9uYCB3aGVuIHRoZSBzZWxlY3QgaGFzIHRoZSBgbXVsdGlwbGVgIGF0dHJpYnV0ZSBvciB3
aGVuIHRoZXJlIGlzIGEgYHRyYWNrIGJ5YCBjbGF1c2UgaW4KKyAqIHRoZSBvcHRpb25zIGV4cHJl
c3Npb24uIFRoaXMgYWxsb3dzIG5nT3B0aW9ucyB0byB0cmlnZ2VyIGEgcmUtcmVuZGVyaW5nIG9m
IHRoZSBvcHRpb25zIGV2ZW4gaWYgdGhlIGFjdHVhbAorICogb2JqZWN0L2NvbGxlY3Rpb24gaGFz
IG5vdCBjaGFuZ2VkIGlkZW50aXR5IGJ1dCBvbmx5IGEgcHJvcGVydHkgb24gdGhlIG9iamVjdCBv
ciBhbiBpdGVtIGluIHRoZSBjb2xsZWN0aW9uCisgKiBjaGFuZ2VzLgorICoKKyAqIE5vdGUgdGhh
dCBgJHdhdGNoQ29sbGVjdGlvbmAgZG9lcyBhIHNoYWxsb3cgY29tcGFyaXNvbiBvZiB0aGUgcHJv
cGVydGllcyBvZiB0aGUgb2JqZWN0IChvciB0aGUgaXRlbXMgaW4gdGhlIGNvbGxlY3Rpb24KKyAq
IGlmIHRoZSBtb2RlbCBpcyBhbiBhcnJheSkuIFRoaXMgbWVhbnMgdGhhdCBjaGFuZ2luZyBhIHBy
b3BlcnR5IGRlZXBlciBpbnNpZGUgdGhlIG9iamVjdC9jb2xsZWN0aW9uIHRoYXQgdGhlCisgKiBm
aXJzdCBsZXZlbCB3aWxsIG5vdCB0cmlnZ2VyIGEgcmUtcmVuZGVyaW5nLgorICoKKyAqCisgKiAj
IyBgc2VsZWN0YCAqKmBhc2AqKgorICoKKyAqIFVzaW5nIGBzZWxlY3RgICoqYGFzYCoqIHdpbGwg
YmluZCB0aGUgcmVzdWx0IG9mIHRoZSBgc2VsZWN0YCBleHByZXNzaW9uIHRvIHRoZSBtb2RlbCwg
YnV0CisgKiB0aGUgdmFsdWUgb2YgdGhlIGA8c2VsZWN0PmAgYW5kIGA8b3B0aW9uPmAgaHRtbCBl
bGVtZW50cyB3aWxsIGJlIGVpdGhlciB0aGUgaW5kZXggKGZvciBhcnJheSBkYXRhIHNvdXJjZXMp
CisgKiBvciBwcm9wZXJ0eSBuYW1lIChmb3Igb2JqZWN0IGRhdGEgc291cmNlcykgb2YgdGhlIHZh
bHVlIHdpdGhpbiB0aGUgY29sbGVjdGlvbi4gSWYgYSAqKmB0cmFjayBieWAqKiBleHByZXNzaW9u
CisgKiBpcyB1c2VkLCB0aGUgcmVzdWx0IG9mIHRoYXQgZXhwcmVzc2lvbiB3aWxsIGJlIHNldCBh
cyB0aGUgdmFsdWUgb2YgdGhlIGBvcHRpb25gIGFuZCBgc2VsZWN0YCBlbGVtZW50cy4KKyAqCisg
KgorICogIyMjIGBzZWxlY3RgICoqYGFzYCoqIGFuZCAqKmB0cmFjayBieWAqKgorICoKKyAqIDxk
aXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LXdhcm5pbmciPgorICogRG8gbm90IHVzZSBgc2VsZWN0YCAq
KmBhc2AqKiBhbmQgKipgdHJhY2sgYnlgKiogaW4gdGhlIHNhbWUgZXhwcmVzc2lvbi4gVGhleSBh
cmUgbm90IGRlc2lnbmVkIHRvIHdvcmsgdG9nZXRoZXIuCisgKiA8L2Rpdj4KKyAqCisgKiBDb25z
aWRlciB0aGUgZm9sbG93aW5nIGV4YW1wbGU6CisgKgorICogYGBgaHRtbAorICogPHNlbGVjdCBu
Zy1vcHRpb25zPSJpdGVtLnN1Ykl0ZW0gYXMgaXRlbS5sYWJlbCBmb3IgaXRlbSBpbiB2YWx1ZXMg
dHJhY2sgYnkgaXRlbS5pZCIgbmctbW9kZWw9InNlbGVjdGVkIj4KKyAqIGBgYAorICoKKyAqIGBg
YGpzCisgKiAkc2NvcGUudmFsdWVzID0gW3sKKyAqICAgaWQ6IDEsCisgKiAgIGxhYmVsOiAnYUxh
YmVsJywKKyAqICAgc3ViSXRlbTogeyBuYW1lOiAnYVN1Ykl0ZW0nIH0KKyAqIH0sIHsKKyAqICAg
aWQ6IDIsCisgKiAgIGxhYmVsOiAnYkxhYmVsJywKKyAqICAgc3ViSXRlbTogeyBuYW1lOiAnYlN1
Ykl0ZW0nIH0KKyAqIH1dOworICoKKyAqICRzY29wZS5zZWxlY3RlZCA9IHsgbmFtZTogJ2FTdWJJ
dGVtJyB9OworICogYGBgCisgKgorICogV2l0aCB0aGUgcHVycG9zZSBvZiBwcmVzZXJ2aW5nIHRo
ZSBzZWxlY3Rpb24sIHRoZSAqKmB0cmFjayBieWAqKiBleHByZXNzaW9uIGlzIGFsd2F5cyBhcHBs
aWVkIHRvIHRoZSBlbGVtZW50CisgKiBvZiB0aGUgZGF0YSBzb3VyY2UgKHRvIGBpdGVtYCBpbiB0
aGlzIGV4YW1wbGUpLiBUbyBjYWxjdWxhdGUgd2hldGhlciBhbiBlbGVtZW50IGlzIHNlbGVjdGVk
LCB3ZSBkbyB0aGUKKyAqIGZvbGxvd2luZzoKKyAqCisgKiAxLiBBcHBseSAqKmB0cmFjayBieWAq
KiB0byB0aGUgZWxlbWVudHMgaW4gdGhlIGFycmF5LiBJbiB0aGUgZXhhbXBsZTogYFsxLCAyXWAK
KyAqIDIuIEFwcGx5ICoqYHRyYWNrIGJ5YCoqIHRvIHRoZSBhbHJlYWR5IHNlbGVjdGVkIHZhbHVl
IGluIGBuZ01vZGVsYC4KKyAqICAgIEluIHRoZSBleGFtcGxlOiB0aGlzIGlzIG5vdCBwb3NzaWJs
ZSBhcyAqKmB0cmFjayBieWAqKiByZWZlcnMgdG8gYGl0ZW0uaWRgLCBidXQgdGhlIHNlbGVjdGVk
CisgKiAgICB2YWx1ZSBmcm9tIGBuZ01vZGVsYCBpcyBge25hbWU6ICdhU3ViSXRlbSd9YCwgc28g
dGhlICoqYHRyYWNrIGJ5YCoqIGV4cHJlc3Npb24gaXMgYXBwbGllZCB0bworICogICAgYSB3cm9u
ZyBvYmplY3QsIHRoZSBzZWxlY3RlZCBlbGVtZW50IGNhbid0IGJlIGZvdW5kLCBgPHNlbGVjdD5g
IGlzIGFsd2F5cyByZXNldCB0byB0aGUgIm5vdAorICogICAgc2VsZWN0ZWQiIG9wdGlvbi4KKyAq
CisgKgorICogQHBhcmFtIHtzdHJpbmd9IG5nTW9kZWwgQXNzaWduYWJsZSBhbmd1bGFyIGV4cHJl
c3Npb24gdG8gZGF0YS1iaW5kIHRvLgorICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lIFByb3BlcnR5
IG5hbWUgb2YgdGhlIGZvcm0gdW5kZXIgd2hpY2ggdGhlIGNvbnRyb2wgaXMgcHVibGlzaGVkLgor
ICogQHBhcmFtIHtzdHJpbmc9fSByZXF1aXJlZCBUaGUgY29udHJvbCBpcyBjb25zaWRlcmVkIHZh
bGlkIG9ubHkgaWYgdmFsdWUgaXMgZW50ZXJlZC4KKyAqIEBwYXJhbSB7c3RyaW5nPX0gbmdSZXF1
aXJlZCBBZGRzIGByZXF1aXJlZGAgYXR0cmlidXRlIGFuZCBgcmVxdWlyZWRgIHZhbGlkYXRpb24g
Y29uc3RyYWludCB0bworICogICAgdGhlIGVsZW1lbnQgd2hlbiB0aGUgbmdSZXF1aXJlZCBleHBy
ZXNzaW9uIGV2YWx1YXRlcyB0byB0cnVlLiBVc2UgYG5nUmVxdWlyZWRgIGluc3RlYWQgb2YKKyAq
ICAgIGByZXF1aXJlZGAgd2hlbiB5b3Ugd2FudCB0byBkYXRhLWJpbmQgdG8gdGhlIGByZXF1aXJl
ZGAgYXR0cmlidXRlLgorICogQHBhcmFtIHtjb21wcmVoZW5zaW9uX2V4cHJlc3Npb249fSBuZ09w
dGlvbnMgaW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9ybXM6CisgKgorICogICAqIGZvciBhcnJh
eSBkYXRhIHNvdXJjZXM6CisgKiAgICAgKiBgbGFiZWxgICoqYGZvcmAqKiBgdmFsdWVgICoqYGlu
YCoqIGBhcnJheWAKKyAqICAgICAqIGBzZWxlY3RgICoqYGFzYCoqIGBsYWJlbGAgKipgZm9yYCoq
IGB2YWx1ZWAgKipgaW5gKiogYGFycmF5YAorICogICAgICogYGxhYmVsYCAqKmBncm91cCBieWAq
KiBgZ3JvdXBgICoqYGZvcmAqKiBgdmFsdWVgICoqYGluYCoqIGBhcnJheWAKKyAqICAgICAqIGBs
YWJlbGAgKipgZGlzYWJsZSB3aGVuYCoqIGBkaXNhYmxlYCAqKmBmb3JgKiogYHZhbHVlYCAqKmBp
bmAqKiBgYXJyYXlgCisgKiAgICAgKiBgbGFiZWxgICoqYGdyb3VwIGJ5YCoqIGBncm91cGAgKipg
Zm9yYCoqIGB2YWx1ZWAgKipgaW5gKiogYGFycmF5YCAqKmB0cmFjayBieWAqKiBgdHJhY2tleHBy
YAorICogICAgICogYGxhYmVsYCAqKmBkaXNhYmxlIHdoZW5gKiogYGRpc2FibGVgICoqYGZvcmAq
KiBgdmFsdWVgICoqYGluYCoqIGBhcnJheWAgKipgdHJhY2sgYnlgKiogYHRyYWNrZXhwcmAKKyAq
ICAgICAqIGBsYWJlbGAgKipgZm9yYCoqIGB2YWx1ZWAgKipgaW5gKiogYGFycmF5YCB8IG9yZGVy
Qnk6YG9yZGVyZXhwcmAgKipgdHJhY2sgYnlgKiogYHRyYWNrZXhwcmAKKyAqICAgICAgICAoZm9y
IGluY2x1ZGluZyBhIGZpbHRlciB3aXRoIGB0cmFjayBieWApCisgKiAgICogZm9yIG9iamVjdCBk
YXRhIHNvdXJjZXM6CisgKiAgICAgKiBgbGFiZWxgICoqYGZvciAoYCoqYGtleWAgKipgLGAqKiBg
dmFsdWVgKipgKSBpbmAqKiBgb2JqZWN0YAorICogICAgICogYHNlbGVjdGAgKipgYXNgKiogYGxh
YmVsYCAqKmBmb3IgKGAqKmBrZXlgICoqYCxgKiogYHZhbHVlYCoqYCkgaW5gKiogYG9iamVjdGAK
KyAqICAgICAqIGBsYWJlbGAgKipgZ3JvdXAgYnlgKiogYGdyb3VwYCAqKmBmb3IgKGAqKmBrZXlg
KipgLGAqKiBgdmFsdWVgKipgKSBpbmAqKiBgb2JqZWN0YAorICogICAgICogYGxhYmVsYCAqKmBk
aXNhYmxlIHdoZW5gKiogYGRpc2FibGVgICoqYGZvciAoYCoqYGtleWAqKmAsYCoqIGB2YWx1ZWAq
KmApIGluYCoqIGBvYmplY3RgCisgKiAgICAgKiBgc2VsZWN0YCAqKmBhc2AqKiBgbGFiZWxgICoq
YGdyb3VwIGJ5YCoqIGBncm91cGAKKyAqICAgICAgICAgKipgZm9yYCBgKGAqKmBrZXlgKipgLGAq
KiBgdmFsdWVgKipgKSBpbmAqKiBgb2JqZWN0YAorICogICAgICogYHNlbGVjdGAgKipgYXNgKiog
YGxhYmVsYCAqKmBkaXNhYmxlIHdoZW5gKiogYGRpc2FibGVgCisgKiAgICAgICAgICoqYGZvcmAg
YChgKipga2V5YCoqYCxgKiogYHZhbHVlYCoqYCkgaW5gKiogYG9iamVjdGAKKyAqCisgKiBXaGVy
ZToKKyAqCisgKiAgICogYGFycmF5YCAvIGBvYmplY3RgOiBhbiBleHByZXNzaW9uIHdoaWNoIGV2
YWx1YXRlcyB0byBhbiBhcnJheSAvIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuCisgKiAgICogYHZh
bHVlYDogbG9jYWwgdmFyaWFibGUgd2hpY2ggd2lsbCByZWZlciB0byBlYWNoIGl0ZW0gaW4gdGhl
IGBhcnJheWAgb3IgZWFjaCBwcm9wZXJ0eSB2YWx1ZQorICogICAgICBvZiBgb2JqZWN0YCBkdXJp
bmcgaXRlcmF0aW9uLgorICogICAqIGBrZXlgOiBsb2NhbCB2YXJpYWJsZSB3aGljaCB3aWxsIHJl
ZmVyIHRvIGEgcHJvcGVydHkgbmFtZSBpbiBgb2JqZWN0YCBkdXJpbmcgaXRlcmF0aW9uLgorICog
ICAqIGBsYWJlbGA6IFRoZSByZXN1bHQgb2YgdGhpcyBleHByZXNzaW9uIHdpbGwgYmUgdGhlIGxh
YmVsIGZvciBgPG9wdGlvbj5gIGVsZW1lbnQuIFRoZQorICogICAgIGBleHByZXNzaW9uYCB3aWxs
IG1vc3QgbGlrZWx5IHJlZmVyIHRvIHRoZSBgdmFsdWVgIHZhcmlhYmxlIChlLmcuIGB2YWx1ZS5w
cm9wZXJ0eU5hbWVgKS4KKyAqICAgKiBgc2VsZWN0YDogVGhlIHJlc3VsdCBvZiB0aGlzIGV4cHJl
c3Npb24gd2lsbCBiZSBib3VuZCB0byB0aGUgbW9kZWwgb2YgdGhlIHBhcmVudCBgPHNlbGVjdD5g
CisgKiAgICAgIGVsZW1lbnQuIElmIG5vdCBzcGVjaWZpZWQsIGBzZWxlY3RgIGV4cHJlc3Npb24g
d2lsbCBkZWZhdWx0IHRvIGB2YWx1ZWAuCisgKiAgICogYGdyb3VwYDogVGhlIHJlc3VsdCBvZiB0
aGlzIGV4cHJlc3Npb24gd2lsbCBiZSB1c2VkIHRvIGdyb3VwIG9wdGlvbnMgdXNpbmcgdGhlIGA8
b3B0Z3JvdXA+YAorICogICAgICBET00gZWxlbWVudC4KKyAqICAgKiBgZGlzYWJsZWA6IFRoZSBy
ZXN1bHQgb2YgdGhpcyBleHByZXNzaW9uIHdpbGwgYmUgdXNlZCB0byBkaXNhYmxlIHRoZSByZW5k
ZXJlZCBgPG9wdGlvbj5gCisgKiAgICAgIGVsZW1lbnQuIFJldHVybiBgdHJ1ZWAgdG8gZGlzYWJs
ZS4KKyAqICAgKiBgdHJhY2tleHByYDogVXNlZCB3aGVuIHdvcmtpbmcgd2l0aCBhbiBhcnJheSBv
ZiBvYmplY3RzLiBUaGUgcmVzdWx0IG9mIHRoaXMgZXhwcmVzc2lvbiB3aWxsIGJlCisgKiAgICAg
IHVzZWQgdG8gaWRlbnRpZnkgdGhlIG9iamVjdHMgaW4gdGhlIGFycmF5LiBUaGUgYHRyYWNrZXhw
cmAgd2lsbCBtb3N0IGxpa2VseSByZWZlciB0byB0aGUKKyAqICAgICBgdmFsdWVgIHZhcmlhYmxl
IChlLmcuIGB2YWx1ZS5wcm9wZXJ0eU5hbWVgKS4gV2l0aCB0aGlzIHRoZSBzZWxlY3Rpb24gaXMg
cHJlc2VydmVkCisgKiAgICAgIGV2ZW4gd2hlbiB0aGUgb3B0aW9ucyBhcmUgcmVjcmVhdGVkIChl
LmcuIHJlbG9hZGVkIGZyb20gdGhlIHNlcnZlcikuCisgKgorICogQGV4YW1wbGUKKyAgICA8ZXhh
bXBsZSBtb2R1bGU9InNlbGVjdEV4YW1wbGUiPgorICAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRt
bCI+CisgICAgICAgIDxzY3JpcHQ+CisgICAgICAgIGFuZ3VsYXIubW9kdWxlKCdzZWxlY3RFeGFt
cGxlJywgW10pCisgICAgICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyck
c2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHsKKyAgICAgICAgICAgICRzY29wZS5jb2xvcnMgPSBb
CisgICAgICAgICAgICAgIHtuYW1lOidibGFjaycsIHNoYWRlOidkYXJrJ30sCisgICAgICAgICAg
ICAgIHtuYW1lOid3aGl0ZScsIHNoYWRlOidsaWdodCcsIG5vdEFuT3B0aW9uOiB0cnVlfSwKKyAg
ICAgICAgICAgICAge25hbWU6J3JlZCcsIHNoYWRlOidkYXJrJ30sCisgICAgICAgICAgICAgIHtu
YW1lOidibHVlJywgc2hhZGU6J2RhcmsnLCBub3RBbk9wdGlvbjogdHJ1ZX0sCisgICAgICAgICAg
ICAgIHtuYW1lOid5ZWxsb3cnLCBzaGFkZTonbGlnaHQnLCBub3RBbk9wdGlvbjogZmFsc2V9Cisg
ICAgICAgICAgICBdOworICAgICAgICAgICAgJHNjb3BlLm15Q29sb3IgPSAkc2NvcGUuY29sb3Jz
WzJdOyAvLyByZWQKKyAgICAgICAgICB9XSk7CisgICAgICAgIDwvc2NyaXB0PgorICAgICAgICA8
ZGl2IG5nLWNvbnRyb2xsZXI9IkV4YW1wbGVDb250cm9sbGVyIj4KKyAgICAgICAgICA8dWw+Cisg
ICAgICAgICAgICA8bGkgbmctcmVwZWF0PSJjb2xvciBpbiBjb2xvcnMiPgorICAgICAgICAgICAg
ICA8bGFiZWw+TmFtZTogPGlucHV0IG5nLW1vZGVsPSJjb2xvci5uYW1lIj48L2xhYmVsPgorICAg
ICAgICAgICAgICA8bGFiZWw+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuZy1tb2RlbD0iY29sb3Iu
bm90QW5PcHRpb24iPiBEaXNhYmxlZD88L2xhYmVsPgorICAgICAgICAgICAgICA8YnV0dG9uIG5n
LWNsaWNrPSJjb2xvcnMuc3BsaWNlKCRpbmRleCwgMSkiIGFyaWEtbGFiZWw9IlJlbW92ZSI+WDwv
YnV0dG9uPgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAg
ICAgPGJ1dHRvbiBuZy1jbGljaz0iY29sb3JzLnB1c2goe30pIj5hZGQ8L2J1dHRvbj4KKyAgICAg
ICAgICAgIDwvbGk+CisgICAgICAgICAgPC91bD4KKyAgICAgICAgICA8aHIvPgorICAgICAgICAg
IDxsYWJlbD5Db2xvciAobnVsbCBub3QgYWxsb3dlZCk6CisgICAgICAgICAgICA8c2VsZWN0IG5n
LW1vZGVsPSJteUNvbG9yIiBuZy1vcHRpb25zPSJjb2xvci5uYW1lIGZvciBjb2xvciBpbiBjb2xv
cnMiPjwvc2VsZWN0PgorICAgICAgICAgIDwvbGFiZWw+PGJyLz4KKyAgICAgICAgICA8bGFiZWw+
Q29sb3IgKG51bGwgYWxsb3dlZCk6CisgICAgICAgICAgPHNwYW4gIGNsYXNzPSJudWxsYWJsZSI+
CisgICAgICAgICAgICA8c2VsZWN0IG5nLW1vZGVsPSJteUNvbG9yIiBuZy1vcHRpb25zPSJjb2xv
ci5uYW1lIGZvciBjb2xvciBpbiBjb2xvcnMiPgorICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVl
PSIiPi0tIGNob29zZSBjb2xvciAtLTwvb3B0aW9uPgorICAgICAgICAgICAgPC9zZWxlY3Q+Cisg
ICAgICAgICAgPC9zcGFuPjwvbGFiZWw+PGJyLz4KKworICAgICAgICAgIDxsYWJlbD5Db2xvciBn
cm91cGVkIGJ5IHNoYWRlOgorICAgICAgICAgICAgPHNlbGVjdCBuZy1tb2RlbD0ibXlDb2xvciIg
bmctb3B0aW9ucz0iY29sb3IubmFtZSBncm91cCBieSBjb2xvci5zaGFkZSBmb3IgY29sb3IgaW4g
Y29sb3JzIj4KKyAgICAgICAgICAgIDwvc2VsZWN0PgorICAgICAgICAgIDwvbGFiZWw+PGJyLz4K
KworICAgICAgICAgIDxsYWJlbD5Db2xvciBncm91cGVkIGJ5IHNoYWRlLCB3aXRoIHNvbWUgZGlz
YWJsZWQ6CisgICAgICAgICAgICA8c2VsZWN0IG5nLW1vZGVsPSJteUNvbG9yIgorICAgICAgICAg
ICAgICAgICAgbmctb3B0aW9ucz0iY29sb3IubmFtZSBncm91cCBieSBjb2xvci5zaGFkZSBkaXNh
YmxlIHdoZW4gY29sb3Iubm90QW5PcHRpb24gZm9yIGNvbG9yIGluIGNvbG9ycyI+CisgICAgICAg
ICAgICA8L3NlbGVjdD4KKyAgICAgICAgICA8L2xhYmVsPjxici8+CisKKworCisgICAgICAgICAg
U2VsZWN0IDxidXR0b24gbmctY2xpY2s9Im15Q29sb3IgPSB7IG5hbWU6J25vdCBpbiBsaXN0Jywg
c2hhZGU6ICdvdGhlcicgfSI+Ym9ndXM8L2J1dHRvbj4uCisgICAgICAgICAgPGJyLz4KKyAgICAg
ICAgICA8aHIvPgorICAgICAgICAgIEN1cnJlbnRseSBzZWxlY3RlZDoge3sge3NlbGVjdGVkX2Nv
bG9yOm15Q29sb3J9IH19CisgICAgICAgICAgPGRpdiBzdHlsZT0iYm9yZGVyOnNvbGlkIDFweCBi
bGFjazsgaGVpZ2h0OjIwcHgiCisgICAgICAgICAgICAgICBuZy1zdHlsZT0ieydiYWNrZ3JvdW5k
LWNvbG9yJzpteUNvbG9yLm5hbWV9Ij4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+
CisgICAgICA8L2ZpbGU+CisgICAgICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJw
cm90cmFjdG9yIj4KKyAgICAgICAgIGl0KCdzaG91bGQgY2hlY2sgbmctb3B0aW9ucycsIGZ1bmN0
aW9uKCkgeworICAgICAgICAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKCd7c2VsZWN0ZWRf
Y29sb3I6bXlDb2xvcn0nKSkuZ2V0VGV4dCgpKS50b01hdGNoKCdyZWQnKTsKKyAgICAgICAgICAg
ZWxlbWVudC5hbGwoYnkubW9kZWwoJ215Q29sb3InKSkuZmlyc3QoKS5jbGljaygpOworICAgICAg
ICAgICBlbGVtZW50LmFsbChieS5jc3MoJ3NlbGVjdFtuZy1tb2RlbD0ibXlDb2xvciJdIG9wdGlv
bicpKS5maXJzdCgpLmNsaWNrKCk7CisgICAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmJpbmRp
bmcoJ3tzZWxlY3RlZF9jb2xvcjpteUNvbG9yfScpKS5nZXRUZXh0KCkpLnRvTWF0Y2goJ2JsYWNr
Jyk7CisgICAgICAgICAgIGVsZW1lbnQoYnkuY3NzKCcubnVsbGFibGUgc2VsZWN0W25nLW1vZGVs
PSJteUNvbG9yIl0nKSkuY2xpY2soKTsKKyAgICAgICAgICAgZWxlbWVudC5hbGwoYnkuY3NzKCcu
bnVsbGFibGUgc2VsZWN0W25nLW1vZGVsPSJteUNvbG9yIl0gb3B0aW9uJykpLmZpcnN0KCkuY2xp
Y2soKTsKKyAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGluZygne3NlbGVjdGVkX2Nv
bG9yOm15Q29sb3J9JykpLmdldFRleHQoKSkudG9NYXRjaCgnbnVsbCcpOworICAgICAgICAgfSk7
CisgICAgICA8L2ZpbGU+CisgICAgPC9leGFtcGxlPgorICovCisKKy8vIGpzaGludCBtYXhsZW46
IGZhbHNlCisvLyAgICAgICAgICAgICAgICAgICAgIC8vMDAwMDExMTExMTExMTEwMDAwMDAwMDAw
MDIyMjIyMjIyMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMzMzMzMzMzMzMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDQ0NDQ0NDQ0NDQ0MDAwMDAwMDAwMDAwMDU1NTU1NTU1NTU1NTU1NTAwMDAwMDAw
MDY2NjY2NjY2NjY2NjY2NjAwMDAwMDA3Nzc3Nzc3Nzc3Nzc3NzcwMDAwMDAwMDAwMDAwMDA4ODg4
ODg4ODg4MDAwMDAwMDAwMDAwMDAwMDAwMDk5OTk5OTk5OTkKK3ZhciBOR19PUFRJT05TX1JFR0VY
UCA9IC9eXHMqKFtcc1xTXSs/KSg/OlxzK2FzXHMrKFtcc1xTXSs/KSk/KD86XHMrZ3JvdXBccyti
eVxzKyhbXHNcU10rPykpPyg/OlxzK2Rpc2FibGVccyt3aGVuXHMrKFtcc1xTXSs/KSk/XHMrZm9y
XHMrKD86KFtcJFx3XVtcJFx3XSopfCg/OlwoXHMqKFtcJFx3XVtcJFx3XSopXHMqLFxzKihbXCRc
d11bXCRcd10qKVxzKlwpKSlccytpblxzKyhbXHNcU10rPykoPzpccyt0cmFja1xzK2J5XHMrKFtc
c1xTXSs/KSk/JC87CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAxOiB2YWx1ZSBleHByZXNz
aW9uICh2YWx1ZUZuKQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gMjogbGFiZWwgZXhwcmVz
c2lvbiAoZGlzcGxheUZuKQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gMzogZ3JvdXAgYnkg
ZXhwcmVzc2lvbiAoZ3JvdXBCeUZuKQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gNDogZGlz
YWJsZSB3aGVuIGV4cHJlc3Npb24gKGRpc2FibGVXaGVuRm4pCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyA1OiBhcnJheSBpdGVtIHZhcmlhYmxlIG5hbWUKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIDY6IG9iamVjdCBpdGVtIGtleSB2YXJpYWJsZSBuYW1lCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyA3OiBvYmplY3QgaXRlbSB2YWx1ZSB2YXJpYWJsZSBuYW1lCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyA4OiBjb2xsZWN0aW9uIGV4cHJlc3Npb24KKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIDk6IHRyYWNrIGJ5IGV4cHJlc3Npb24KKy8vIGpzaGludCBtYXhsZW46IDEw
MAorCisKK3ZhciBuZ09wdGlvbnNEaXJlY3RpdmUgPSBbJyRjb21waWxlJywgJyRwYXJzZScsIGZ1
bmN0aW9uKCRjb21waWxlLCAkcGFyc2UpIHsKKworICBmdW5jdGlvbiBwYXJzZU9wdGlvbnNFeHBy
ZXNzaW9uKG9wdGlvbnNFeHAsIHNlbGVjdEVsZW1lbnQsIHNjb3BlKSB7CisKKyAgICB2YXIgbWF0
Y2ggPSBvcHRpb25zRXhwLm1hdGNoKE5HX09QVElPTlNfUkVHRVhQKTsKKyAgICBpZiAoIShtYXRj
aCkpIHsKKyAgICAgIHRocm93IG5nT3B0aW9uc01pbkVycignaWV4cCcsCisgICAgICAgICJFeHBl
Y3RlZCBleHByZXNzaW9uIGluIGZvcm0gb2YgIiArCisgICAgICAgICInX3NlbGVjdF8gKGFzIF9s
YWJlbF8pPyBmb3IgKF9rZXlfLCk/X3ZhbHVlXyBpbiBfY29sbGVjdGlvbl8nIiArCisgICAgICAg
ICIgYnV0IGdvdCAnezB9Jy4gRWxlbWVudDogezF9IiwKKyAgICAgICAgb3B0aW9uc0V4cCwgc3Rh
cnRpbmdUYWcoc2VsZWN0RWxlbWVudCkpOworICAgIH0KKworICAgIC8vIEV4dHJhY3QgdGhlIHBh
cnRzIGZyb20gdGhlIG5nT3B0aW9ucyBleHByZXNzaW9uCisKKyAgICAvLyBUaGUgdmFyaWFibGUg
bmFtZSBmb3IgdGhlIHZhbHVlIG9mIHRoZSBpdGVtIGluIHRoZSBjb2xsZWN0aW9uCisgICAgdmFy
IHZhbHVlTmFtZSA9IG1hdGNoWzVdIHx8IG1hdGNoWzddOworICAgIC8vIFRoZSB2YXJpYWJsZSBu
YW1lIGZvciB0aGUga2V5IG9mIHRoZSBpdGVtIGluIHRoZSBjb2xsZWN0aW9uCisgICAgdmFyIGtl
eU5hbWUgPSBtYXRjaFs2XTsKKworICAgIC8vIEFuIGV4cHJlc3Npb24gdGhhdCBnZW5lcmF0ZXMg
dGhlIHZpZXdWYWx1ZSBmb3IgYW4gb3B0aW9uIGlmIHRoZXJlIGlzIGEgbGFiZWwgZXhwcmVzc2lv
bgorICAgIHZhciBzZWxlY3RBcyA9IC8gYXMgLy50ZXN0KG1hdGNoWzBdKSAmJiBtYXRjaFsxXTsK
KyAgICAvLyBBbiBleHByZXNzaW9uIHRoYXQgaXMgdXNlZCB0byB0cmFjayB0aGUgaWQgb2YgZWFj
aCBvYmplY3QgaW4gdGhlIG9wdGlvbnMgY29sbGVjdGlvbgorICAgIHZhciB0cmFja0J5ID0gbWF0
Y2hbOV07CisgICAgLy8gQW4gZXhwcmVzc2lvbiB0aGF0IGdlbmVyYXRlcyB0aGUgdmlld1ZhbHVl
IGZvciBhbiBvcHRpb24gaWYgdGhlcmUgaXMgbm8gbGFiZWwgZXhwcmVzc2lvbgorICAgIHZhciB2
YWx1ZUZuID0gJHBhcnNlKG1hdGNoWzJdID8gbWF0Y2hbMV0gOiB2YWx1ZU5hbWUpOworICAgIHZh
ciBzZWxlY3RBc0ZuID0gc2VsZWN0QXMgJiYgJHBhcnNlKHNlbGVjdEFzKTsKKyAgICB2YXIgdmll
d1ZhbHVlRm4gPSBzZWxlY3RBc0ZuIHx8IHZhbHVlRm47CisgICAgdmFyIHRyYWNrQnlGbiA9IHRy
YWNrQnkgJiYgJHBhcnNlKHRyYWNrQnkpOworCisgICAgLy8gR2V0IHRoZSB2YWx1ZSBieSB3aGlj
aCB3ZSBhcmUgZ29pbmcgdG8gdHJhY2sgdGhlIG9wdGlvbgorICAgIC8vIGlmIHdlIGhhdmUgYSB0
cmFja0ZuIHRoZW4gdXNlIHRoYXQgKHBhc3Npbmcgc2NvcGUgYW5kIGxvY2FscykKKyAgICAvLyBv
dGhlcndpc2UganVzdCBoYXNoIHRoZSBnaXZlbiB2aWV3VmFsdWUKKyAgICB2YXIgZ2V0VHJhY2tC
eVZhbHVlRm4gPSB0cmFja0J5ID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0
aW9uKHZhbHVlLCBsb2NhbHMpIHsgcmV0dXJuIHRyYWNrQnlGbihzY29wZSwgbG9jYWxzKTsgfSA6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRIYXNoT2ZWYWx1ZSh2
YWx1ZSkgeyByZXR1cm4gaGFzaEtleSh2YWx1ZSk7IH07CisgICAgdmFyIGdldFRyYWNrQnlWYWx1
ZSA9IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHsKKyAgICAgIHJldHVybiBnZXRUcmFja0J5VmFsdWVG
bih2YWx1ZSwgZ2V0TG9jYWxzKHZhbHVlLCBrZXkpKTsKKyAgICB9OworCisgICAgdmFyIGRpc3Bs
YXlGbiA9ICRwYXJzZShtYXRjaFsyXSB8fCBtYXRjaFsxXSk7CisgICAgdmFyIGdyb3VwQnlGbiA9
ICRwYXJzZShtYXRjaFszXSB8fCAnJyk7CisgICAgdmFyIGRpc2FibGVXaGVuRm4gPSAkcGFyc2Uo
bWF0Y2hbNF0gfHwgJycpOworICAgIHZhciB2YWx1ZXNGbiA9ICRwYXJzZShtYXRjaFs4XSk7CisK
KyAgICB2YXIgbG9jYWxzID0ge307CisgICAgdmFyIGdldExvY2FscyA9IGtleU5hbWUgPyBmdW5j
dGlvbih2YWx1ZSwga2V5KSB7CisgICAgICBsb2NhbHNba2V5TmFtZV0gPSBrZXk7CisgICAgICBs
b2NhbHNbdmFsdWVOYW1lXSA9IHZhbHVlOworICAgICAgcmV0dXJuIGxvY2FsczsKKyAgICB9IDog
ZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgIGxvY2Fsc1t2YWx1ZU5hbWVdID0gdmFsdWU7CisgICAg
ICByZXR1cm4gbG9jYWxzOworICAgIH07CisKKworICAgIGZ1bmN0aW9uIE9wdGlvbihzZWxlY3RW
YWx1ZSwgdmlld1ZhbHVlLCBsYWJlbCwgZ3JvdXAsIGRpc2FibGVkKSB7CisgICAgICB0aGlzLnNl
bGVjdFZhbHVlID0gc2VsZWN0VmFsdWU7CisgICAgICB0aGlzLnZpZXdWYWx1ZSA9IHZpZXdWYWx1
ZTsKKyAgICAgIHRoaXMubGFiZWwgPSBsYWJlbDsKKyAgICAgIHRoaXMuZ3JvdXAgPSBncm91cDsK
KyAgICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBn
ZXRPcHRpb25WYWx1ZXNLZXlzKG9wdGlvblZhbHVlcykgeworICAgICAgdmFyIG9wdGlvblZhbHVl
c0tleXM7CisKKyAgICAgIGlmICgha2V5TmFtZSAmJiBpc0FycmF5TGlrZShvcHRpb25WYWx1ZXMp
KSB7CisgICAgICAgIG9wdGlvblZhbHVlc0tleXMgPSBvcHRpb25WYWx1ZXM7CisgICAgICB9IGVs
c2UgeworICAgICAgICAvLyBpZiBvYmplY3QsIGV4dHJhY3Qga2V5cywgaW4gZW51bWVyYXRpb24g
b3JkZXIsIHVuc29ydGVkCisgICAgICAgIG9wdGlvblZhbHVlc0tleXMgPSBbXTsKKyAgICAgICAg
Zm9yICh2YXIgaXRlbUtleSBpbiBvcHRpb25WYWx1ZXMpIHsKKyAgICAgICAgICBpZiAob3B0aW9u
VmFsdWVzLmhhc093blByb3BlcnR5KGl0ZW1LZXkpICYmIGl0ZW1LZXkuY2hhckF0KDApICE9PSAn
JCcpIHsKKyAgICAgICAgICAgIG9wdGlvblZhbHVlc0tleXMucHVzaChpdGVtS2V5KTsKKyAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiBvcHRpb25WYWx1ZXNLZXlz
OworICAgIH0KKworICAgIHJldHVybiB7CisgICAgICB0cmFja0J5OiB0cmFja0J5LAorICAgICAg
Z2V0VHJhY2tCeVZhbHVlOiBnZXRUcmFja0J5VmFsdWUsCisgICAgICBnZXRXYXRjaGFibGVzOiAk
cGFyc2UodmFsdWVzRm4sIGZ1bmN0aW9uKG9wdGlvblZhbHVlcykgeworICAgICAgICAvLyBDcmVh
dGUgYSBjb2xsZWN0aW9uIG9mIHRoaW5ncyB0aGF0IHdlIHdvdWxkIGxpa2UgdG8gd2F0Y2ggKHdh
dGNoZWRBcnJheSkKKyAgICAgICAgLy8gc28gdGhhdCB0aGV5IGNhbiBhbGwgYmUgd2F0Y2hlZCB1
c2luZyBhIHNpbmdsZSAkd2F0Y2hDb2xsZWN0aW9uCisgICAgICAgIC8vIHRoYXQgb25seSBydW5z
IHRoZSBoYW5kbGVyIG9uY2UgaWYgYW55dGhpbmcgY2hhbmdlcworICAgICAgICB2YXIgd2F0Y2hl
ZEFycmF5ID0gW107CisgICAgICAgIG9wdGlvblZhbHVlcyA9IG9wdGlvblZhbHVlcyB8fCBbXTsK
KworICAgICAgICB2YXIgb3B0aW9uVmFsdWVzS2V5cyA9IGdldE9wdGlvblZhbHVlc0tleXMob3B0
aW9uVmFsdWVzKTsKKyAgICAgICAgdmFyIG9wdGlvblZhbHVlc0xlbmd0aCA9IG9wdGlvblZhbHVl
c0tleXMubGVuZ3RoOworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgb3B0aW9u
VmFsdWVzTGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgdmFyIGtleSA9IChvcHRpb25WYWx1
ZXMgPT09IG9wdGlvblZhbHVlc0tleXMpID8gaW5kZXggOiBvcHRpb25WYWx1ZXNLZXlzW2luZGV4
XTsKKyAgICAgICAgICB2YXIgdmFsdWUgPSBvcHRpb25WYWx1ZXNba2V5XTsKKworICAgICAgICAg
IHZhciBsb2NhbHMgPSBnZXRMb2NhbHMob3B0aW9uVmFsdWVzW2tleV0sIGtleSk7CisgICAgICAg
ICAgdmFyIHNlbGVjdFZhbHVlID0gZ2V0VHJhY2tCeVZhbHVlRm4ob3B0aW9uVmFsdWVzW2tleV0s
IGxvY2Fscyk7CisgICAgICAgICAgd2F0Y2hlZEFycmF5LnB1c2goc2VsZWN0VmFsdWUpOworCisg
ICAgICAgICAgLy8gT25seSBuZWVkIHRvIHdhdGNoIHRoZSBkaXNwbGF5Rm4gaWYgdGhlcmUgaXMg
YSBzcGVjaWZpYyBsYWJlbCBleHByZXNzaW9uCisgICAgICAgICAgaWYgKG1hdGNoWzJdIHx8IG1h
dGNoWzFdKSB7CisgICAgICAgICAgICB2YXIgbGFiZWwgPSBkaXNwbGF5Rm4oc2NvcGUsIGxvY2Fs
cyk7CisgICAgICAgICAgICB3YXRjaGVkQXJyYXkucHVzaChsYWJlbCk7CisgICAgICAgICAgfQor
CisgICAgICAgICAgLy8gT25seSBuZWVkIHRvIHdhdGNoIHRoZSBkaXNhYmxlV2hlbkZuIGlmIHRo
ZXJlIGlzIGEgc3BlY2lmaWMgZGlzYWJsZSBleHByZXNzaW9uCisgICAgICAgICAgaWYgKG1hdGNo
WzRdKSB7CisgICAgICAgICAgICB2YXIgZGlzYWJsZVdoZW4gPSBkaXNhYmxlV2hlbkZuKHNjb3Bl
LCBsb2NhbHMpOworICAgICAgICAgICAgd2F0Y2hlZEFycmF5LnB1c2goZGlzYWJsZVdoZW4pOwor
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gd2F0Y2hlZEFycmF5OworICAg
ICAgfSksCisKKyAgICAgIGdldE9wdGlvbnM6IGZ1bmN0aW9uKCkgeworCisgICAgICAgIHZhciBv
cHRpb25JdGVtcyA9IFtdOworICAgICAgICB2YXIgc2VsZWN0VmFsdWVNYXAgPSB7fTsKKworICAg
ICAgICAvLyBUaGUgb3B0aW9uIHZhbHVlcyB3ZXJlIGFscmVhZHkgY29tcHV0ZWQgaW4gdGhlIGBn
ZXRXYXRjaGFibGVzYCBmbiwKKyAgICAgICAgLy8gd2hpY2ggbXVzdCBoYXZlIGJlZW4gY2FsbGVk
IHRvIHRyaWdnZXIgYGdldE9wdGlvbnNgCisgICAgICAgIHZhciBvcHRpb25WYWx1ZXMgPSB2YWx1
ZXNGbihzY29wZSkgfHwgW107CisgICAgICAgIHZhciBvcHRpb25WYWx1ZXNLZXlzID0gZ2V0T3B0
aW9uVmFsdWVzS2V5cyhvcHRpb25WYWx1ZXMpOworICAgICAgICB2YXIgb3B0aW9uVmFsdWVzTGVu
Z3RoID0gb3B0aW9uVmFsdWVzS2V5cy5sZW5ndGg7CisKKyAgICAgICAgZm9yICh2YXIgaW5kZXgg
PSAwOyBpbmRleCA8IG9wdGlvblZhbHVlc0xlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgIHZh
ciBrZXkgPSAob3B0aW9uVmFsdWVzID09PSBvcHRpb25WYWx1ZXNLZXlzKSA/IGluZGV4IDogb3B0
aW9uVmFsdWVzS2V5c1tpbmRleF07CisgICAgICAgICAgdmFyIHZhbHVlID0gb3B0aW9uVmFsdWVz
W2tleV07CisgICAgICAgICAgdmFyIGxvY2FscyA9IGdldExvY2Fscyh2YWx1ZSwga2V5KTsKKyAg
ICAgICAgICB2YXIgdmlld1ZhbHVlID0gdmlld1ZhbHVlRm4oc2NvcGUsIGxvY2Fscyk7CisgICAg
ICAgICAgdmFyIHNlbGVjdFZhbHVlID0gZ2V0VHJhY2tCeVZhbHVlRm4odmlld1ZhbHVlLCBsb2Nh
bHMpOworICAgICAgICAgIHZhciBsYWJlbCA9IGRpc3BsYXlGbihzY29wZSwgbG9jYWxzKTsKKyAg
ICAgICAgICB2YXIgZ3JvdXAgPSBncm91cEJ5Rm4oc2NvcGUsIGxvY2Fscyk7CisgICAgICAgICAg
dmFyIGRpc2FibGVkID0gZGlzYWJsZVdoZW5GbihzY29wZSwgbG9jYWxzKTsKKyAgICAgICAgICB2
YXIgb3B0aW9uSXRlbSA9IG5ldyBPcHRpb24oc2VsZWN0VmFsdWUsIHZpZXdWYWx1ZSwgbGFiZWws
IGdyb3VwLCBkaXNhYmxlZCk7CisKKyAgICAgICAgICBvcHRpb25JdGVtcy5wdXNoKG9wdGlvbkl0
ZW0pOworICAgICAgICAgIHNlbGVjdFZhbHVlTWFwW3NlbGVjdFZhbHVlXSA9IG9wdGlvbkl0ZW07
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4geworICAgICAgICAgIGl0ZW1zOiBvcHRpb25J
dGVtcywKKyAgICAgICAgICBzZWxlY3RWYWx1ZU1hcDogc2VsZWN0VmFsdWVNYXAsCisgICAgICAg
ICAgZ2V0T3B0aW9uRnJvbVZpZXdWYWx1ZTogZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgICAg
IHJldHVybiBzZWxlY3RWYWx1ZU1hcFtnZXRUcmFja0J5VmFsdWUodmFsdWUpXTsKKyAgICAgICAg
ICB9LAorICAgICAgICAgIGdldFZpZXdWYWx1ZUZyb21PcHRpb246IGZ1bmN0aW9uKG9wdGlvbikg
eworICAgICAgICAgICAgLy8gSWYgdGhlIHZpZXdWYWx1ZSBjb3VsZCBiZSBhbiBvYmplY3QgdGhh
dCBtYXkgYmUgbXV0YXRlZCBieSB0aGUgYXBwbGljYXRpb24sCisgICAgICAgICAgICAvLyB3ZSBu
ZWVkIHRvIG1ha2UgYSBjb3B5IGFuZCBub3QgcmV0dXJuIHRoZSByZWZlcmVuY2UgdG8gdGhlIHZh
bHVlIG9uIHRoZSBvcHRpb24uCisgICAgICAgICAgICByZXR1cm4gdHJhY2tCeSA/IGFuZ3VsYXIu
Y29weShvcHRpb24udmlld1ZhbHVlKSA6IG9wdGlvbi52aWV3VmFsdWU7CisgICAgICAgICAgfQor
ICAgICAgICB9OworICAgICAgfQorICAgIH07CisgIH0KKworCisgIC8vIHdlIGNhbid0IGp1c3Qg
anFMaXRlKCc8b3B0aW9uPicpIHNpbmNlIGpxTGl0ZSBpcyBub3Qgc21hcnQgZW5vdWdoCisgIC8v
IHRvIGNyZWF0ZSBpdCBpbiA8c2VsZWN0PiBhbmQgSUUgYmFyZnMgb3RoZXJ3aXNlLgorICB2YXIg
b3B0aW9uVGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKSwKKyAgICAg
IG9wdEdyb3VwVGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRncm91cCcpOwor
CisgIHJldHVybiB7CisgICAgcmVzdHJpY3Q6ICdBJywKKyAgICB0ZXJtaW5hbDogdHJ1ZSwKKyAg
ICByZXF1aXJlOiBbJ3NlbGVjdCcsICc/bmdNb2RlbCddLAorICAgIGxpbms6IGZ1bmN0aW9uKHNj
b3BlLCBzZWxlY3RFbGVtZW50LCBhdHRyLCBjdHJscykgeworCisgICAgICAvLyBpZiBuZ01vZGVs
IGlzIG5vdCBkZWZpbmVkLCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nCisgICAgICB2YXIg
bmdNb2RlbEN0cmwgPSBjdHJsc1sxXTsKKyAgICAgIGlmICghbmdNb2RlbEN0cmwpIHJldHVybjsK
KworICAgICAgdmFyIHNlbGVjdEN0cmwgPSBjdHJsc1swXTsKKyAgICAgIHZhciBtdWx0aXBsZSA9
IGF0dHIubXVsdGlwbGU7CisKKyAgICAgIC8vIFRoZSBlbXB0eU9wdGlvbiBhbGxvd3MgdGhlIGFw
cGxpY2F0aW9uIGRldmVsb3BlciB0byBwcm92aWRlIHRoZWlyIG93biBjdXN0b20gImVtcHR5Igor
ICAgICAgLy8gb3B0aW9uIHdoZW4gdGhlIHZpZXdWYWx1ZSBkb2VzIG5vdCBtYXRjaCBhbnkgb2Yg
dGhlIG9wdGlvbiB2YWx1ZXMuCisgICAgICB2YXIgZW1wdHlPcHRpb247CisgICAgICBmb3IgKHZh
ciBpID0gMCwgY2hpbGRyZW4gPSBzZWxlY3RFbGVtZW50LmNoaWxkcmVuKCksIGlpID0gY2hpbGRy
ZW4ubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICBpZiAoY2hpbGRyZW5baV0udmFsdWUg
PT09ICcnKSB7CisgICAgICAgICAgZW1wdHlPcHRpb24gPSBjaGlsZHJlbi5lcShpKTsKKyAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICB2YXIgcHJvdmlkZWRFbXB0
eU9wdGlvbiA9ICEhZW1wdHlPcHRpb247CisKKyAgICAgIHZhciB1bmtub3duT3B0aW9uID0ganFM
aXRlKG9wdGlvblRlbXBsYXRlLmNsb25lTm9kZShmYWxzZSkpOworICAgICAgdW5rbm93bk9wdGlv
bi52YWwoJz8nKTsKKworICAgICAgdmFyIG9wdGlvbnM7CisgICAgICB2YXIgbmdPcHRpb25zID0g
cGFyc2VPcHRpb25zRXhwcmVzc2lvbihhdHRyLm5nT3B0aW9ucywgc2VsZWN0RWxlbWVudCwgc2Nv
cGUpOworCisKKyAgICAgIHZhciByZW5kZXJFbXB0eU9wdGlvbiA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICBpZiAoIXByb3ZpZGVkRW1wdHlPcHRpb24pIHsKKyAgICAgICAgICBzZWxlY3RFbGVtZW50
LnByZXBlbmQoZW1wdHlPcHRpb24pOworICAgICAgICB9CisgICAgICAgIHNlbGVjdEVsZW1lbnQu
dmFsKCcnKTsKKyAgICAgICAgZW1wdHlPcHRpb24ucHJvcCgnc2VsZWN0ZWQnLCB0cnVlKTsgLy8g
bmVlZGVkIGZvciBJRQorICAgICAgICBlbXB0eU9wdGlvbi5hdHRyKCdzZWxlY3RlZCcsIHRydWUp
OworICAgICAgfTsKKworICAgICAgdmFyIHJlbW92ZUVtcHR5T3B0aW9uID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIGlmICghcHJvdmlkZWRFbXB0eU9wdGlvbikgeworICAgICAgICAgIGVtcHR5T3B0
aW9uLnJlbW92ZSgpOworICAgICAgICB9CisgICAgICB9OworCisKKyAgICAgIHZhciByZW5kZXJV
bmtub3duT3B0aW9uID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHNlbGVjdEVsZW1lbnQucHJlcGVu
ZCh1bmtub3duT3B0aW9uKTsKKyAgICAgICAgc2VsZWN0RWxlbWVudC52YWwoJz8nKTsKKyAgICAg
ICAgdW5rbm93bk9wdGlvbi5wcm9wKCdzZWxlY3RlZCcsIHRydWUpOyAvLyBuZWVkZWQgZm9yIElF
CisgICAgICAgIHVua25vd25PcHRpb24uYXR0cignc2VsZWN0ZWQnLCB0cnVlKTsKKyAgICAgIH07
CisKKyAgICAgIHZhciByZW1vdmVVbmtub3duT3B0aW9uID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHVua25vd25PcHRpb24ucmVtb3ZlKCk7CisgICAgICB9OworCisKKyAgICAgIC8vIFVwZGF0ZSB0
aGUgY29udHJvbGxlciBtZXRob2RzIGZvciBtdWx0aXBsZSBzZWxlY3RhYmxlIG9wdGlvbnMKKyAg
ICAgIGlmICghbXVsdGlwbGUpIHsKKworICAgICAgICBzZWxlY3RDdHJsLndyaXRlVmFsdWUgPSBm
dW5jdGlvbiB3cml0ZU5nT3B0aW9uc1ZhbHVlKHZhbHVlKSB7CisgICAgICAgICAgdmFyIG9wdGlv
biA9IG9wdGlvbnMuZ2V0T3B0aW9uRnJvbVZpZXdWYWx1ZSh2YWx1ZSk7CisKKyAgICAgICAgICBp
ZiAob3B0aW9uICYmICFvcHRpb24uZGlzYWJsZWQpIHsKKyAgICAgICAgICAgIGlmIChzZWxlY3RF
bGVtZW50WzBdLnZhbHVlICE9PSBvcHRpb24uc2VsZWN0VmFsdWUpIHsKKyAgICAgICAgICAgICAg
cmVtb3ZlVW5rbm93bk9wdGlvbigpOworICAgICAgICAgICAgICByZW1vdmVFbXB0eU9wdGlvbigp
OworCisgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnRbMF0udmFsdWUgPSBvcHRpb24uc2VsZWN0
VmFsdWU7CisgICAgICAgICAgICAgIG9wdGlvbi5lbGVtZW50LnNlbGVjdGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgb3B0aW9uLmVsZW1lbnQuc2V0QXR0cmlidXRlKCdzZWxlY3RlZCcsICdzZWxl
Y3RlZCcpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBp
ZiAodmFsdWUgPT09IG51bGwgfHwgcHJvdmlkZWRFbXB0eU9wdGlvbikgeworICAgICAgICAgICAg
ICByZW1vdmVVbmtub3duT3B0aW9uKCk7CisgICAgICAgICAgICAgIHJlbmRlckVtcHR5T3B0aW9u
KCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICByZW1vdmVFbXB0eU9wdGlv
bigpOworICAgICAgICAgICAgICByZW5kZXJVbmtub3duT3B0aW9uKCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHNlbGVjdEN0cmwucmVhZFZhbHVl
ID0gZnVuY3Rpb24gcmVhZE5nT3B0aW9uc1ZhbHVlKCkgeworCisgICAgICAgICAgdmFyIHNlbGVj
dGVkT3B0aW9uID0gb3B0aW9ucy5zZWxlY3RWYWx1ZU1hcFtzZWxlY3RFbGVtZW50LnZhbCgpXTsK
KworICAgICAgICAgIGlmIChzZWxlY3RlZE9wdGlvbiAmJiAhc2VsZWN0ZWRPcHRpb24uZGlzYWJs
ZWQpIHsKKyAgICAgICAgICAgIHJlbW92ZUVtcHR5T3B0aW9uKCk7CisgICAgICAgICAgICByZW1v
dmVVbmtub3duT3B0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5nZXRWaWV3VmFs
dWVGcm9tT3B0aW9uKHNlbGVjdGVkT3B0aW9uKTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgICAgIH07CisKKyAgICAgICAgLy8gSWYgd2UgYXJlIHVzaW5nIGB0cmFj
ayBieWAgdGhlbiB3ZSBtdXN0IHdhdGNoIHRoZSB0cmFja2VkIHZhbHVlIG9uIHRoZSBtb2RlbAor
ICAgICAgICAvLyBzaW5jZSBuZ01vZGVsIG9ubHkgd2F0Y2hlcyBmb3Igb2JqZWN0IGlkZW50aXR5
IGNoYW5nZQorICAgICAgICBpZiAobmdPcHRpb25zLnRyYWNrQnkpIHsKKyAgICAgICAgICBzY29w
ZS4kd2F0Y2goCisgICAgICAgICAgICBmdW5jdGlvbigpIHsgcmV0dXJuIG5nT3B0aW9ucy5nZXRU
cmFja0J5VmFsdWUobmdNb2RlbEN0cmwuJHZpZXdWYWx1ZSk7IH0sCisgICAgICAgICAgICBmdW5j
dGlvbigpIHsgbmdNb2RlbEN0cmwuJHJlbmRlcigpOyB9CisgICAgICAgICAgKTsKKyAgICAgICAg
fQorCisgICAgICB9IGVsc2UgeworCisgICAgICAgIG5nTW9kZWxDdHJsLiRpc0VtcHR5ID0gZnVu
Y3Rpb24odmFsdWUpIHsKKyAgICAgICAgICByZXR1cm4gIXZhbHVlIHx8IHZhbHVlLmxlbmd0aCA9
PT0gMDsKKyAgICAgICAgfTsKKworCisgICAgICAgIHNlbGVjdEN0cmwud3JpdGVWYWx1ZSA9IGZ1
bmN0aW9uIHdyaXRlTmdPcHRpb25zTXVsdGlwbGUodmFsdWUpIHsKKyAgICAgICAgICBvcHRpb25z
Lml0ZW1zLmZvckVhY2goZnVuY3Rpb24ob3B0aW9uKSB7CisgICAgICAgICAgICBvcHRpb24uZWxl
bWVudC5zZWxlY3RlZCA9IGZhbHNlOworICAgICAgICAgIH0pOworCisgICAgICAgICAgaWYgKHZh
bHVlKSB7CisgICAgICAgICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHsKKyAgICAg
ICAgICAgICAgdmFyIG9wdGlvbiA9IG9wdGlvbnMuZ2V0T3B0aW9uRnJvbVZpZXdWYWx1ZShpdGVt
KTsKKyAgICAgICAgICAgICAgaWYgKG9wdGlvbiAmJiAhb3B0aW9uLmRpc2FibGVkKSBvcHRpb24u
ZWxlbWVudC5zZWxlY3RlZCA9IHRydWU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICB9Cisg
ICAgICAgIH07CisKKworICAgICAgICBzZWxlY3RDdHJsLnJlYWRWYWx1ZSA9IGZ1bmN0aW9uIHJl
YWROZ09wdGlvbnNNdWx0aXBsZSgpIHsKKyAgICAgICAgICB2YXIgc2VsZWN0ZWRWYWx1ZXMgPSBz
ZWxlY3RFbGVtZW50LnZhbCgpIHx8IFtdLAorICAgICAgICAgICAgICBzZWxlY3Rpb25zID0gW107
CisKKyAgICAgICAgICBmb3JFYWNoKHNlbGVjdGVkVmFsdWVzLCBmdW5jdGlvbih2YWx1ZSkgewor
ICAgICAgICAgICAgdmFyIG9wdGlvbiA9IG9wdGlvbnMuc2VsZWN0VmFsdWVNYXBbdmFsdWVdOwor
ICAgICAgICAgICAgaWYgKCFvcHRpb24uZGlzYWJsZWQpIHNlbGVjdGlvbnMucHVzaChvcHRpb25z
LmdldFZpZXdWYWx1ZUZyb21PcHRpb24ob3B0aW9uKSk7CisgICAgICAgICAgfSk7CisKKyAgICAg
ICAgICByZXR1cm4gc2VsZWN0aW9uczsKKyAgICAgICAgfTsKKworICAgICAgICAvLyBJZiB3ZSBh
cmUgdXNpbmcgYHRyYWNrIGJ5YCB0aGVuIHdlIG11c3Qgd2F0Y2ggdGhlc2UgdHJhY2tlZCB2YWx1
ZXMgb24gdGhlIG1vZGVsCisgICAgICAgIC8vIHNpbmNlIG5nTW9kZWwgb25seSB3YXRjaGVzIGZv
ciBvYmplY3QgaWRlbnRpdHkgY2hhbmdlCisgICAgICAgIGlmIChuZ09wdGlvbnMudHJhY2tCeSkg
eworCisgICAgICAgICAgc2NvcGUuJHdhdGNoQ29sbGVjdGlvbihmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgIGlmIChpc0FycmF5KG5nTW9kZWxDdHJsLiR2aWV3VmFsdWUpKSB7CisgICAgICAgICAg
ICAgIHJldHVybiBuZ01vZGVsQ3RybC4kdmlld1ZhbHVlLm1hcChmdW5jdGlvbih2YWx1ZSkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBuZ09wdGlvbnMuZ2V0VHJhY2tCeVZhbHVlKHZhbHVlKTsK
KyAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSwgZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICBuZ01vZGVsQ3RybC4kcmVuZGVyKCk7CisgICAgICAgICAgfSk7CisK
KyAgICAgICAgfQorICAgICAgfQorCisKKyAgICAgIGlmIChwcm92aWRlZEVtcHR5T3B0aW9uKSB7
CisKKyAgICAgICAgLy8gd2UgbmVlZCB0byByZW1vdmUgaXQgYmVmb3JlIGNhbGxpbmcgc2VsZWN0
RWxlbWVudC5lbXB0eSgpIGJlY2F1c2Ugb3RoZXJ3aXNlIElFIHdpbGwKKyAgICAgICAgLy8gcmVt
b3ZlIHRoZSBsYWJlbCBmcm9tIHRoZSBlbGVtZW50LiB3dGY/CisgICAgICAgIGVtcHR5T3B0aW9u
LnJlbW92ZSgpOworCisgICAgICAgIC8vIGNvbXBpbGUgdGhlIGVsZW1lbnQgc2luY2UgdGhlcmUg
bWlnaHQgYmUgYmluZGluZ3MgaW4gaXQKKyAgICAgICAgJGNvbXBpbGUoZW1wdHlPcHRpb24pKHNj
b3BlKTsKKworICAgICAgICAvLyByZW1vdmUgdGhlIGNsYXNzLCB3aGljaCBpcyBhZGRlZCBhdXRv
bWF0aWNhbGx5IGJlY2F1c2Ugd2UgcmVjb21waWxlIHRoZSBlbGVtZW50IGFuZCBpdAorICAgICAg
ICAvLyBiZWNvbWVzIHRoZSBjb21waWxhdGlvbiByb290CisgICAgICAgIGVtcHR5T3B0aW9uLnJl
bW92ZUNsYXNzKCduZy1zY29wZScpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZW1wdHlPcHRp
b24gPSBqcUxpdGUob3B0aW9uVGVtcGxhdGUuY2xvbmVOb2RlKGZhbHNlKSk7CisgICAgICB9CisK
KyAgICAgIC8vIFdlIG5lZWQgdG8gZG8gdGhpcyBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSBvcHRp
b25zIG9iamVjdCBpcyBkZWZpbmVkCisgICAgICAvLyB3aGVuIHdlIGZpcnN0IGhpdCBpdCBpbiB3
cml0ZU5nT3B0aW9uc1ZhbHVlCisgICAgICB1cGRhdGVPcHRpb25zKCk7CisKKyAgICAgIC8vIFdl
IHdpbGwgcmUtcmVuZGVyIHRoZSBvcHRpb24gZWxlbWVudHMgaWYgdGhlIG9wdGlvbiB2YWx1ZXMg
b3IgbGFiZWxzIGNoYW5nZQorICAgICAgc2NvcGUuJHdhdGNoQ29sbGVjdGlvbihuZ09wdGlvbnMu
Z2V0V2F0Y2hhYmxlcywgdXBkYXRlT3B0aW9ucyk7CisKKyAgICAgIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvLwor
CisKKyAgICAgIGZ1bmN0aW9uIHVwZGF0ZU9wdGlvbkVsZW1lbnQob3B0aW9uLCBlbGVtZW50KSB7
CisgICAgICAgIG9wdGlvbi5lbGVtZW50ID0gZWxlbWVudDsKKyAgICAgICAgZWxlbWVudC5kaXNh
YmxlZCA9IG9wdGlvbi5kaXNhYmxlZDsKKyAgICAgICAgaWYgKG9wdGlvbi52YWx1ZSAhPT0gZWxl
bWVudC52YWx1ZSkgZWxlbWVudC52YWx1ZSA9IG9wdGlvbi5zZWxlY3RWYWx1ZTsKKyAgICAgICAg
aWYgKG9wdGlvbi5sYWJlbCAhPT0gZWxlbWVudC5sYWJlbCkgeworICAgICAgICAgIGVsZW1lbnQu
bGFiZWwgPSBvcHRpb24ubGFiZWw7CisgICAgICAgICAgZWxlbWVudC50ZXh0Q29udGVudCA9IG9w
dGlvbi5sYWJlbDsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBmdW5jdGlvbiBhZGRPclJl
dXNlRWxlbWVudChwYXJlbnQsIGN1cnJlbnQsIHR5cGUsIHRlbXBsYXRlRWxlbWVudCkgeworICAg
ICAgICB2YXIgZWxlbWVudDsKKyAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB3ZSBjYW4gcmV1c2Ug
dGhlIG5leHQgZWxlbWVudAorICAgICAgICBpZiAoY3VycmVudCAmJiBsb3dlcmNhc2UoY3VycmVu
dC5ub2RlTmFtZSkgPT09IHR5cGUpIHsKKyAgICAgICAgICAvLyBUaGUgbmV4dCBlbGVtZW50IGlz
IHRoZSByaWdodCB0eXBlIHNvIHJldXNlIGl0CisgICAgICAgICAgZWxlbWVudCA9IGN1cnJlbnQ7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgLy8gVGhlIG5leHQgZWxlbWVudCBpcyBub3Qg
dGhlIHJpZ2h0IHR5cGUgc28gY3JlYXRlIGEgbmV3IG9uZQorICAgICAgICAgIGVsZW1lbnQgPSB0
ZW1wbGF0ZUVsZW1lbnQuY2xvbmVOb2RlKGZhbHNlKTsKKyAgICAgICAgICBpZiAoIWN1cnJlbnQp
IHsKKyAgICAgICAgICAgIC8vIFRoZXJlIGFyZSBubyBtb3JlIGVsZW1lbnRzIHNvIGp1c3QgYXBw
ZW5kIGl0IHRvIHRoZSBzZWxlY3QKKyAgICAgICAgICAgIHBhcmVudC5hcHBlbmRDaGlsZChlbGVt
ZW50KTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gVGhlIG5leHQgZWxlbWVu
dCBpcyBub3QgYSBncm91cCBzbyBpbnNlcnQgdGhlIG5ldyBvbmUKKyAgICAgICAgICAgIHBhcmVu
dC5pbnNlcnRCZWZvcmUoZWxlbWVudCwgY3VycmVudCk7CisgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIHJldHVybiBlbGVtZW50OworICAgICAgfQorCisKKyAgICAgIGZ1bmN0aW9uIHJl
bW92ZUV4Y2Vzc0VsZW1lbnRzKGN1cnJlbnQpIHsKKyAgICAgICAgdmFyIG5leHQ7CisgICAgICAg
IHdoaWxlIChjdXJyZW50KSB7CisgICAgICAgICAgbmV4dCA9IGN1cnJlbnQubmV4dFNpYmxpbmc7
CisgICAgICAgICAganFMaXRlUmVtb3ZlKGN1cnJlbnQpOworICAgICAgICAgIGN1cnJlbnQgPSBu
ZXh0OworICAgICAgICB9CisgICAgICB9CisKKworICAgICAgZnVuY3Rpb24gc2tpcEVtcHR5QW5k
VW5rbm93bk9wdGlvbnMoY3VycmVudCkgeworICAgICAgICB2YXIgZW1wdHlPcHRpb25fID0gZW1w
dHlPcHRpb24gJiYgZW1wdHlPcHRpb25bMF07CisgICAgICAgIHZhciB1bmtub3duT3B0aW9uXyA9
IHVua25vd25PcHRpb24gJiYgdW5rbm93bk9wdGlvblswXTsKKworICAgICAgICBpZiAoZW1wdHlP
cHRpb25fIHx8IHVua25vd25PcHRpb25fKSB7CisgICAgICAgICAgd2hpbGUgKGN1cnJlbnQgJiYK
KyAgICAgICAgICAgICAgICAoY3VycmVudCA9PT0gZW1wdHlPcHRpb25fIHx8CisgICAgICAgICAg
ICAgICAgY3VycmVudCA9PT0gdW5rbm93bk9wdGlvbl8pKSB7CisgICAgICAgICAgICBjdXJyZW50
ID0gY3VycmVudC5uZXh0U2libGluZzsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGN1cnJlbnQ7CisgICAgICB9CisKKworICAgICAgZnVuY3Rpb24gdXBkYXRlT3B0aW9u
cygpIHsKKworICAgICAgICB2YXIgcHJldmlvdXNWYWx1ZSA9IG9wdGlvbnMgJiYgc2VsZWN0Q3Ry
bC5yZWFkVmFsdWUoKTsKKworICAgICAgICBvcHRpb25zID0gbmdPcHRpb25zLmdldE9wdGlvbnMo
KTsKKworICAgICAgICB2YXIgZ3JvdXBNYXAgPSB7fTsKKyAgICAgICAgdmFyIGN1cnJlbnRFbGVt
ZW50ID0gc2VsZWN0RWxlbWVudFswXS5maXJzdENoaWxkOworCisgICAgICAgIC8vIEVuc3VyZSB0
aGF0IHRoZSBlbXB0eSBvcHRpb24gaXMgYWx3YXlzIHRoZXJlIGlmIGl0IHdhcyBleHBsaWNpdGx5
IHByb3ZpZGVkCisgICAgICAgIGlmIChwcm92aWRlZEVtcHR5T3B0aW9uKSB7CisgICAgICAgICAg
c2VsZWN0RWxlbWVudC5wcmVwZW5kKGVtcHR5T3B0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAg
IGN1cnJlbnRFbGVtZW50ID0gc2tpcEVtcHR5QW5kVW5rbm93bk9wdGlvbnMoY3VycmVudEVsZW1l
bnQpOworCisgICAgICAgIG9wdGlvbnMuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiB1cGRhdGVPcHRp
b24ob3B0aW9uKSB7CisgICAgICAgICAgdmFyIGdyb3VwOworICAgICAgICAgIHZhciBncm91cEVs
ZW1lbnQ7CisgICAgICAgICAgdmFyIG9wdGlvbkVsZW1lbnQ7CisKKyAgICAgICAgICBpZiAob3B0
aW9uLmdyb3VwKSB7CisKKyAgICAgICAgICAgIC8vIFRoaXMgb3B0aW9uIGlzIHRvIGxpdmUgaW4g
YSBncm91cAorICAgICAgICAgICAgLy8gU2VlIGlmIHdlIGhhdmUgYWxyZWFkeSBjcmVhdGVkIHRo
aXMgZ3JvdXAKKyAgICAgICAgICAgIGdyb3VwID0gZ3JvdXBNYXBbb3B0aW9uLmdyb3VwXTsKKwor
ICAgICAgICAgICAgaWYgKCFncm91cCkgeworCisgICAgICAgICAgICAgIC8vIFdlIGhhdmUgbm90
IGFscmVhZHkgY3JlYXRlZCB0aGlzIGdyb3VwCisgICAgICAgICAgICAgIGdyb3VwRWxlbWVudCA9
IGFkZE9yUmV1c2VFbGVtZW50KHNlbGVjdEVsZW1lbnRbMF0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3B0Z3JvdXAnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRHcm91cFRlbXBsYXRlKTsK
KyAgICAgICAgICAgICAgLy8gTW92ZSB0byB0aGUgbmV4dCBlbGVtZW50CisgICAgICAgICAgICAg
IGN1cnJlbnRFbGVtZW50ID0gZ3JvdXBFbGVtZW50Lm5leHRTaWJsaW5nOworCisgICAgICAgICAg
ICAgIC8vIFVwZGF0ZSB0aGUgbGFiZWwgb24gdGhlIGdyb3VwIGVsZW1lbnQKKyAgICAgICAgICAg
ICAgZ3JvdXBFbGVtZW50LmxhYmVsID0gb3B0aW9uLmdyb3VwOworCisgICAgICAgICAgICAgIC8v
IFN0b3JlIGl0IGZvciB1c2UgbGF0ZXIKKyAgICAgICAgICAgICAgZ3JvdXAgPSBncm91cE1hcFtv
cHRpb24uZ3JvdXBdID0geworICAgICAgICAgICAgICAgIGdyb3VwRWxlbWVudDogZ3JvdXBFbGVt
ZW50LAorICAgICAgICAgICAgICAgIGN1cnJlbnRPcHRpb25FbGVtZW50OiBncm91cEVsZW1lbnQu
Zmlyc3RDaGlsZAorICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIFNvIG5vdyB3ZSBoYXZlIGEgZ3JvdXAgZm9yIHRoaXMgb3B0aW9uIHdlIGFkZCB0aGUg
b3B0aW9uIHRvIHRoZSBncm91cAorICAgICAgICAgICAgb3B0aW9uRWxlbWVudCA9IGFkZE9yUmV1
c2VFbGVtZW50KGdyb3VwLmdyb3VwRWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBncm91cC5jdXJyZW50T3B0aW9uRWxlbWVudCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3B0aW9uJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25UZW1wbGF0ZSk7Cisg
ICAgICAgICAgICB1cGRhdGVPcHRpb25FbGVtZW50KG9wdGlvbiwgb3B0aW9uRWxlbWVudCk7Cisg
ICAgICAgICAgICAvLyBNb3ZlIHRvIHRoZSBuZXh0IGVsZW1lbnQKKyAgICAgICAgICAgIGdyb3Vw
LmN1cnJlbnRPcHRpb25FbGVtZW50ID0gb3B0aW9uRWxlbWVudC5uZXh0U2libGluZzsKKworICAg
ICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgIC8vIFRoaXMgb3B0aW9uIGlzIG5vdCBpbiBh
IGdyb3VwCisgICAgICAgICAgICBvcHRpb25FbGVtZW50ID0gYWRkT3JSZXVzZUVsZW1lbnQoc2Vs
ZWN0RWxlbWVudFswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50RWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnb3B0aW9uJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvcHRpb25UZW1wbGF0ZSk7CisgICAgICAgICAgICB1cGRhdGVPcHRpb25FbGVt
ZW50KG9wdGlvbiwgb3B0aW9uRWxlbWVudCk7CisgICAgICAgICAgICAvLyBNb3ZlIHRvIHRoZSBu
ZXh0IGVsZW1lbnQKKyAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50ID0gb3B0aW9uRWxlbWVudC5u
ZXh0U2libGluZzsKKyAgICAgICAgICB9CisgICAgICAgIH0pOworCisKKyAgICAgICAgLy8gTm93
IHJlbW92ZSBhbGwgZXhjZXNzIG9wdGlvbnMgYW5kIGdyb3VwCisgICAgICAgIE9iamVjdC5rZXlz
KGdyb3VwTWFwKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkgeworICAgICAgICAgIHJlbW92ZUV4Y2Vz
c0VsZW1lbnRzKGdyb3VwTWFwW2tleV0uY3VycmVudE9wdGlvbkVsZW1lbnQpOworICAgICAgICB9
KTsKKyAgICAgICAgcmVtb3ZlRXhjZXNzRWxlbWVudHMoY3VycmVudEVsZW1lbnQpOworCisgICAg
ICAgIG5nTW9kZWxDdHJsLiRyZW5kZXIoKTsKKworICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYg
dGhlIHZhbHVlIGhhcyBjaGFuZ2VkIGR1ZSB0byB0aGUgdXBkYXRlIHRvIHRoZSBvcHRpb25zCisg
ICAgICAgIGlmICghbmdNb2RlbEN0cmwuJGlzRW1wdHkocHJldmlvdXNWYWx1ZSkpIHsKKyAgICAg
ICAgICB2YXIgbmV4dFZhbHVlID0gc2VsZWN0Q3RybC5yZWFkVmFsdWUoKTsKKyAgICAgICAgICBp
ZiAobmdPcHRpb25zLnRyYWNrQnkgPyAhZXF1YWxzKHByZXZpb3VzVmFsdWUsIG5leHRWYWx1ZSkg
OiBwcmV2aW91c1ZhbHVlICE9PSBuZXh0VmFsdWUpIHsKKyAgICAgICAgICAgIG5nTW9kZWxDdHJs
LiRzZXRWaWV3VmFsdWUobmV4dFZhbHVlKTsKKyAgICAgICAgICAgIG5nTW9kZWxDdHJsLiRyZW5k
ZXIoKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgfQorCisgICAgfQorICB9Owor
fV07CisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgbmdQbHVyYWxpemUKKyAq
IEByZXN0cmljdCBFQQorICoKKyAqIEBkZXNjcmlwdGlvbgorICogYG5nUGx1cmFsaXplYCBpcyBh
IGRpcmVjdGl2ZSB0aGF0IGRpc3BsYXlzIG1lc3NhZ2VzIGFjY29yZGluZyB0byBlbi1VUyBsb2Nh
bGl6YXRpb24gcnVsZXMuCisgKiBUaGVzZSBydWxlcyBhcmUgYnVuZGxlZCB3aXRoIGFuZ3VsYXIu
anMsIGJ1dCBjYW4gYmUgb3ZlcnJpZGRlbgorICogKHNlZSB7QGxpbmsgZ3VpZGUvaTE4biBBbmd1
bGFyIGkxOG59IGRldiBndWlkZSkuIFlvdSBjb25maWd1cmUgbmdQbHVyYWxpemUgZGlyZWN0aXZl
CisgKiBieSBzcGVjaWZ5aW5nIHRoZSBtYXBwaW5ncyBiZXR3ZWVuCisgKiBbcGx1cmFsIGNhdGVn
b3JpZXNdKGh0dHA6Ly91bmljb2RlLm9yZy9yZXBvcy9jbGRyLXRtcC90cnVuay9kaWZmL3N1cHBs
ZW1lbnRhbC9sYW5ndWFnZV9wbHVyYWxfcnVsZXMuaHRtbCkKKyAqIGFuZCB0aGUgc3RyaW5ncyB0
byBiZSBkaXNwbGF5ZWQuCisgKgorICogIyBQbHVyYWwgY2F0ZWdvcmllcyBhbmQgZXhwbGljaXQg
bnVtYmVyIHJ1bGVzCisgKiBUaGVyZSBhcmUgdHdvCisgKiBbcGx1cmFsIGNhdGVnb3JpZXNdKGh0
dHA6Ly91bmljb2RlLm9yZy9yZXBvcy9jbGRyLXRtcC90cnVuay9kaWZmL3N1cHBsZW1lbnRhbC9s
YW5ndWFnZV9wbHVyYWxfcnVsZXMuaHRtbCkKKyAqIGluIEFuZ3VsYXIncyBkZWZhdWx0IGVuLVVT
IGxvY2FsZTogIm9uZSIgYW5kICJvdGhlciIuCisgKgorICogV2hpbGUgYSBwbHVyYWwgY2F0ZWdv
cnkgbWF5IG1hdGNoIG1hbnkgbnVtYmVycyAoZm9yIGV4YW1wbGUsIGluIGVuLVVTIGxvY2FsZSwg
Im90aGVyIiBjYW4gbWF0Y2gKKyAqIGFueSBudW1iZXIgdGhhdCBpcyBub3QgMSksIGFuIGV4cGxp
Y2l0IG51bWJlciBydWxlIGNhbiBvbmx5IG1hdGNoIG9uZSBudW1iZXIuIEZvciBleGFtcGxlLCB0
aGUKKyAqIGV4cGxpY2l0IG51bWJlciBydWxlIGZvciAiMyIgbWF0Y2hlcyB0aGUgbnVtYmVyIDMu
IFRoZXJlIGFyZSBleGFtcGxlcyBvZiBwbHVyYWwgY2F0ZWdvcmllcworICogYW5kIGV4cGxpY2l0
IG51bWJlciBydWxlcyB0aHJvdWdob3V0IHRoZSByZXN0IG9mIHRoaXMgZG9jdW1lbnRhdGlvbi4K
KyAqCisgKiAjIENvbmZpZ3VyaW5nIG5nUGx1cmFsaXplCisgKiBZb3UgY29uZmlndXJlIG5nUGx1
cmFsaXplIGJ5IHByb3ZpZGluZyAyIGF0dHJpYnV0ZXM6IGBjb3VudGAgYW5kIGB3aGVuYC4KKyAq
IFlvdSBjYW4gYWxzbyBwcm92aWRlIGFuIG9wdGlvbmFsIGF0dHJpYnV0ZSwgYG9mZnNldGAuCisg
KgorICogVGhlIHZhbHVlIG9mIHRoZSBgY291bnRgIGF0dHJpYnV0ZSBjYW4gYmUgZWl0aGVyIGEg
c3RyaW5nIG9yIGFuIHtAbGluayBndWlkZS9leHByZXNzaW9uCisgKiBBbmd1bGFyIGV4cHJlc3Np
b259OyB0aGVzZSBhcmUgZXZhbHVhdGVkIG9uIHRoZSBjdXJyZW50IHNjb3BlIGZvciBpdHMgYm91
bmQgdmFsdWUuCisgKgorICogVGhlIGB3aGVuYCBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSBtYXBw
aW5ncyBiZXR3ZWVuIHBsdXJhbCBjYXRlZ29yaWVzIGFuZCB0aGUgYWN0dWFsCisgKiBzdHJpbmcg
dG8gYmUgZGlzcGxheWVkLiBUaGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBzaG91bGQgYmUgYSBK
U09OIG9iamVjdC4KKyAqCisgKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRvIGNv
bmZpZ3VyZSBuZ1BsdXJhbGl6ZToKKyAqCisgKiBgYGBodG1sCisgKiA8bmctcGx1cmFsaXplIGNv
dW50PSJwZXJzb25Db3VudCIKKyAgICAgICAgICAgICAgICAgd2hlbj0ieycwJzogJ05vYm9keSBp
cyB2aWV3aW5nLicsCisgKiAgICAgICAgICAgICAgICAgICAgICAnb25lJzogJzEgcGVyc29uIGlz
IHZpZXdpbmcuJywKKyAqICAgICAgICAgICAgICAgICAgICAgICdvdGhlcic6ICd7fSBwZW9wbGUg
YXJlIHZpZXdpbmcuJ30iPgorICogPC9uZy1wbHVyYWxpemU+CisgKmBgYAorICoKKyAqIEluIHRo
ZSBleGFtcGxlLCBgIjA6IE5vYm9keSBpcyB2aWV3aW5nLiJgIGlzIGFuIGV4cGxpY2l0IG51bWJl
ciBydWxlLiBJZiB5b3UgZGlkIG5vdAorICogc3BlY2lmeSB0aGlzIHJ1bGUsIDAgd291bGQgYmUg
bWF0Y2hlZCB0byB0aGUgIm90aGVyIiBjYXRlZ29yeSBhbmQgIjAgcGVvcGxlIGFyZSB2aWV3aW5n
IgorICogd291bGQgYmUgc2hvd24gaW5zdGVhZCBvZiAiTm9ib2R5IGlzIHZpZXdpbmciLiBZb3Ug
Y2FuIHNwZWNpZnkgYW4gZXhwbGljaXQgbnVtYmVyIHJ1bGUgZm9yCisgKiBvdGhlciBudW1iZXJz
LCBmb3IgZXhhbXBsZSAxMiwgc28gdGhhdCBpbnN0ZWFkIG9mIHNob3dpbmcgIjEyIHBlb3BsZSBh
cmUgdmlld2luZyIsIHlvdSBjYW4KKyAqIHNob3cgImEgZG96ZW4gcGVvcGxlIGFyZSB2aWV3aW5n
Ii4KKyAqCisgKiBZb3UgY2FuIHVzZSBhIHNldCBvZiBjbG9zZWQgYnJhY2VzIChge31gKSBhcyBh
IHBsYWNlaG9sZGVyIGZvciB0aGUgbnVtYmVyIHRoYXQgeW91IHdhbnQgc3Vic3RpdHV0ZWQKKyAq
IGludG8gcGx1cmFsaXplZCBzdHJpbmdzLiBJbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgQW5ndWxh
ciB3aWxsIHJlcGxhY2UgYHt9YCB3aXRoCisgKiA8c3BhbiBuZy1ub24tYmluZGFibGU+YHt7cGVy
c29uQ291bnR9fWA8L3NwYW4+LiBUaGUgY2xvc2VkIGJyYWNlcyBge31gIGlzIGEgcGxhY2Vob2xk
ZXIKKyAqIGZvciA8c3BhbiBuZy1ub24tYmluZGFibGU+e3tudW1iZXJFeHByZXNzaW9ufX08L3Nw
YW4+LgorICoKKyAqIElmIG5vIHJ1bGUgaXMgZGVmaW5lZCBmb3IgYSBjYXRlZ29yeSwgdGhlbiBh
biBlbXB0eSBzdHJpbmcgaXMgZGlzcGxheWVkIGFuZCBhIHdhcm5pbmcgaXMgZ2VuZXJhdGVkLgor
ICogTm90ZSB0aGF0IHNvbWUgbG9jYWxlcyBkZWZpbmUgbW9yZSBjYXRlZ29yaWVzIHRoYW4gYG9u
ZWAgYW5kIGBvdGhlcmAuIEZvciBleGFtcGxlLCBmci1mciBkZWZpbmVzIGBmZXdgIGFuZCBgbWFu
eWAuCisgKgorICogIyBDb25maWd1cmluZyBuZ1BsdXJhbGl6ZSB3aXRoIG9mZnNldAorICogVGhl
IGBvZmZzZXRgIGF0dHJpYnV0ZSBhbGxvd3MgZnVydGhlciBjdXN0b21pemF0aW9uIG9mIHBsdXJh
bGl6ZWQgdGV4dCwgd2hpY2ggY2FuIHJlc3VsdCBpbgorICogYSBiZXR0ZXIgdXNlciBleHBlcmll
bmNlLiBGb3IgZXhhbXBsZSwgaW5zdGVhZCBvZiB0aGUgbWVzc2FnZSAiNCBwZW9wbGUgYXJlIHZp
ZXdpbmcgdGhpcyBkb2N1bWVudCIsCisgKiB5b3UgbWlnaHQgZGlzcGxheSAiSm9obiwgS2F0ZSBh
bmQgMiBvdGhlcnMgYXJlIHZpZXdpbmcgdGhpcyBkb2N1bWVudCIuCisgKiBUaGUgb2Zmc2V0IGF0
dHJpYnV0ZSBhbGxvd3MgeW91IHRvIG9mZnNldCBhIG51bWJlciBieSBhbnkgZGVzaXJlZCB2YWx1
ZS4KKyAqIExldCdzIHRha2UgYSBsb29rIGF0IGFuIGV4YW1wbGU6CisgKgorICogYGBgaHRtbAor
ICogPG5nLXBsdXJhbGl6ZSBjb3VudD0icGVyc29uQ291bnQiIG9mZnNldD0yCisgKiAgICAgICAg
ICAgICAgIHdoZW49InsnMCc6ICdOb2JvZHkgaXMgdmlld2luZy4nLAorICogICAgICAgICAgICAg
ICAgICAgICAgJzEnOiAne3twZXJzb24xfX0gaXMgdmlld2luZy4nLAorICogICAgICAgICAgICAg
ICAgICAgICAgJzInOiAne3twZXJzb24xfX0gYW5kIHt7cGVyc29uMn19IGFyZSB2aWV3aW5nLics
CisgKiAgICAgICAgICAgICAgICAgICAgICAnb25lJzogJ3t7cGVyc29uMX19LCB7e3BlcnNvbjJ9
fSBhbmQgb25lIG90aGVyIHBlcnNvbiBhcmUgdmlld2luZy4nLAorICogICAgICAgICAgICAgICAg
ICAgICAgJ290aGVyJzogJ3t7cGVyc29uMX19LCB7e3BlcnNvbjJ9fSBhbmQge30gb3RoZXIgcGVv
cGxlIGFyZSB2aWV3aW5nLid9Ij4KKyAqIDwvbmctcGx1cmFsaXplPgorICogYGBgCisgKgorICog
Tm90aWNlIHRoYXQgd2UgYXJlIHN0aWxsIHVzaW5nIHR3byBwbHVyYWwgY2F0ZWdvcmllcyhvbmUs
IG90aGVyKSwgYnV0IHdlIGFkZGVkCisgKiB0aHJlZSBleHBsaWNpdCBudW1iZXIgcnVsZXMgMCwg
MSBhbmQgMi4KKyAqIFdoZW4gb25lIHBlcnNvbiwgcGVyaGFwcyBKb2huLCB2aWV3cyB0aGUgZG9j
dW1lbnQsICJKb2huIGlzIHZpZXdpbmciIHdpbGwgYmUgc2hvd24uCisgKiBXaGVuIHRocmVlIHBl
b3BsZSB2aWV3IHRoZSBkb2N1bWVudCwgbm8gZXhwbGljaXQgbnVtYmVyIHJ1bGUgaXMgZm91bmQs
IHNvCisgKiBhbiBvZmZzZXQgb2YgMiBpcyB0YWtlbiBvZmYgMywgYW5kIEFuZ3VsYXIgdXNlcyAx
IHRvIGRlY2lkZSB0aGUgcGx1cmFsIGNhdGVnb3J5LgorICogSW4gdGhpcyBjYXNlLCBwbHVyYWwg
Y2F0ZWdvcnkgJ29uZScgaXMgbWF0Y2hlZCBhbmQgIkpvaG4sIE1hcnkgYW5kIG9uZSBvdGhlciBw
ZXJzb24gYXJlIHZpZXdpbmciCisgKiBpcyBzaG93bi4KKyAqCisgKiBOb3RlIHRoYXQgd2hlbiB5
b3Ugc3BlY2lmeSBvZmZzZXRzLCB5b3UgbXVzdCBwcm92aWRlIGV4cGxpY2l0IG51bWJlciBydWxl
cyBmb3IKKyAqIG51bWJlcnMgZnJvbSAwIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIG9mZnNldC4g
SWYgeW91IHVzZSBhbiBvZmZzZXQgb2YgMywgZm9yIGV4YW1wbGUsCisgKiB5b3UgbXVzdCBwcm92
aWRlIGV4cGxpY2l0IG51bWJlciBydWxlcyBmb3IgMCwgMSwgMiBhbmQgMy4gWW91IG11c3QgYWxz
byBwcm92aWRlIHBsdXJhbCBzdHJpbmdzIGZvcgorICogcGx1cmFsIGNhdGVnb3JpZXMgIm9uZSIg
YW5kICJvdGhlciIuCisgKgorICogQHBhcmFtIHtzdHJpbmd8ZXhwcmVzc2lvbn0gY291bnQgVGhl
IHZhcmlhYmxlIHRvIGJlIGJvdW5kIHRvLgorICogQHBhcmFtIHtzdHJpbmd9IHdoZW4gVGhlIG1h
cHBpbmcgYmV0d2VlbiBwbHVyYWwgY2F0ZWdvcnkgdG8gaXRzIGNvcnJlc3BvbmRpbmcgc3RyaW5n
cy4KKyAqIEBwYXJhbSB7bnVtYmVyPX0gb2Zmc2V0IE9mZnNldCB0byBkZWR1Y3QgZnJvbSB0aGUg
dG90YWwgbnVtYmVyLgorICoKKyAqIEBleGFtcGxlCisgICAgPGV4YW1wbGUgbW9kdWxlPSJwbHVy
YWxpemVFeGFtcGxlIj4KKyAgICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICAgICA8
c2NyaXB0PgorICAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCdwbHVyYWxpemVFeGFtcGxlJywgW10p
CisgICAgICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScs
IGZ1bmN0aW9uKCRzY29wZSkgeworICAgICAgICAgICAgICAkc2NvcGUucGVyc29uMSA9ICdJZ29y
JzsKKyAgICAgICAgICAgICAgJHNjb3BlLnBlcnNvbjIgPSAnTWlza28nOworICAgICAgICAgICAg
ICAkc2NvcGUucGVyc29uQ291bnQgPSAxOworICAgICAgICAgICAgfV0pOworICAgICAgICA8L3Nj
cmlwdD4KKyAgICAgICAgPGRpdiBuZy1jb250cm9sbGVyPSJFeGFtcGxlQ29udHJvbGxlciI+Cisg
ICAgICAgICAgPGxhYmVsPlBlcnNvbiAxOjxpbnB1dCB0eXBlPSJ0ZXh0IiBuZy1tb2RlbD0icGVy
c29uMSIgdmFsdWU9Iklnb3IiIC8+PC9sYWJlbD48YnIvPgorICAgICAgICAgIDxsYWJlbD5QZXJz
b24gMjo8aW5wdXQgdHlwZT0idGV4dCIgbmctbW9kZWw9InBlcnNvbjIiIHZhbHVlPSJNaXNrbyIg
Lz48L2xhYmVsPjxici8+CisgICAgICAgICAgPGxhYmVsPk51bWJlciBvZiBQZW9wbGU6PGlucHV0
IHR5cGU9InRleHQiIG5nLW1vZGVsPSJwZXJzb25Db3VudCIgdmFsdWU9IjEiIC8+PC9sYWJlbD48
YnIvPgorCisgICAgICAgICAgPCEtLS0gRXhhbXBsZSB3aXRoIHNpbXBsZSBwbHVyYWxpemF0aW9u
IHJ1bGVzIGZvciBlbiBsb2NhbGUgLS0tPgorICAgICAgICAgIFdpdGhvdXQgT2Zmc2V0OgorICAg
ICAgICAgIDxuZy1wbHVyYWxpemUgY291bnQ9InBlcnNvbkNvdW50IgorICAgICAgICAgICAgICAg
ICAgICAgICAgd2hlbj0ieycwJzogJ05vYm9keSBpcyB2aWV3aW5nLicsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ29uZSc6ICcxIHBlcnNvbiBpcyB2aWV3aW5nLicsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ290aGVyJzogJ3t9IHBlb3BsZSBhcmUgdmlld2luZy4n
fSI+CisgICAgICAgICAgPC9uZy1wbHVyYWxpemU+PGJyPgorCisgICAgICAgICAgPCEtLS0gRXhh
bXBsZSB3aXRoIG9mZnNldCAtLS0+CisgICAgICAgICAgV2l0aCBPZmZzZXQoMik6CisgICAgICAg
ICAgPG5nLXBsdXJhbGl6ZSBjb3VudD0icGVyc29uQ291bnQiIG9mZnNldD0yCisgICAgICAgICAg
ICAgICAgICAgICAgICB3aGVuPSJ7JzAnOiAnTm9ib2R5IGlzIHZpZXdpbmcuJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnMSc6ICd7e3BlcnNvbjF9fSBpcyB2aWV3aW5nLicsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzInOiAne3twZXJzb24xfX0gYW5kIHt7cGVy
c29uMn19IGFyZSB2aWV3aW5nLicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29u
ZSc6ICd7e3BlcnNvbjF9fSwge3twZXJzb24yfX0gYW5kIG9uZSBvdGhlciBwZXJzb24gYXJlIHZp
ZXdpbmcuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3RoZXInOiAne3twZXJz
b24xfX0sIHt7cGVyc29uMn19IGFuZCB7fSBvdGhlciBwZW9wbGUgYXJlIHZpZXdpbmcuJ30iPgor
ICAgICAgICAgIDwvbmctcGx1cmFsaXplPgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZmlsZT4K
KyAgICAgIDxmaWxlIG5hbWU9InByb3RyYWN0b3IuanMiIHR5cGU9InByb3RyYWN0b3IiPgorICAg
ICAgICBpdCgnc2hvdWxkIHNob3cgY29ycmVjdCBwbHVyYWxpemVkIHN0cmluZycsIGZ1bmN0aW9u
KCkgeworICAgICAgICAgIHZhciB3aXRob3V0T2Zmc2V0ID0gZWxlbWVudC5hbGwoYnkuY3NzKCdu
Zy1wbHVyYWxpemUnKSkuZ2V0KDApOworICAgICAgICAgIHZhciB3aXRoT2Zmc2V0ID0gZWxlbWVu
dC5hbGwoYnkuY3NzKCduZy1wbHVyYWxpemUnKSkuZ2V0KDEpOworICAgICAgICAgIHZhciBjb3Vu
dElucHV0ID0gZWxlbWVudChieS5tb2RlbCgncGVyc29uQ291bnQnKSk7CisKKyAgICAgICAgICBl
eHBlY3Qod2l0aG91dE9mZnNldC5nZXRUZXh0KCkpLnRvRXF1YWwoJzEgcGVyc29uIGlzIHZpZXdp
bmcuJyk7CisgICAgICAgICAgZXhwZWN0KHdpdGhPZmZzZXQuZ2V0VGV4dCgpKS50b0VxdWFsKCdJ
Z29yIGlzIHZpZXdpbmcuJyk7CisKKyAgICAgICAgICBjb3VudElucHV0LmNsZWFyKCk7CisgICAg
ICAgICAgY291bnRJbnB1dC5zZW5kS2V5cygnMCcpOworCisgICAgICAgICAgZXhwZWN0KHdpdGhv
dXRPZmZzZXQuZ2V0VGV4dCgpKS50b0VxdWFsKCdOb2JvZHkgaXMgdmlld2luZy4nKTsKKyAgICAg
ICAgICBleHBlY3Qod2l0aE9mZnNldC5nZXRUZXh0KCkpLnRvRXF1YWwoJ05vYm9keSBpcyB2aWV3
aW5nLicpOworCisgICAgICAgICAgY291bnRJbnB1dC5jbGVhcigpOworICAgICAgICAgIGNvdW50
SW5wdXQuc2VuZEtleXMoJzInKTsKKworICAgICAgICAgIGV4cGVjdCh3aXRob3V0T2Zmc2V0Lmdl
dFRleHQoKSkudG9FcXVhbCgnMiBwZW9wbGUgYXJlIHZpZXdpbmcuJyk7CisgICAgICAgICAgZXhw
ZWN0KHdpdGhPZmZzZXQuZ2V0VGV4dCgpKS50b0VxdWFsKCdJZ29yIGFuZCBNaXNrbyBhcmUgdmll
d2luZy4nKTsKKworICAgICAgICAgIGNvdW50SW5wdXQuY2xlYXIoKTsKKyAgICAgICAgICBjb3Vu
dElucHV0LnNlbmRLZXlzKCczJyk7CisKKyAgICAgICAgICBleHBlY3Qod2l0aG91dE9mZnNldC5n
ZXRUZXh0KCkpLnRvRXF1YWwoJzMgcGVvcGxlIGFyZSB2aWV3aW5nLicpOworICAgICAgICAgIGV4
cGVjdCh3aXRoT2Zmc2V0LmdldFRleHQoKSkudG9FcXVhbCgnSWdvciwgTWlza28gYW5kIG9uZSBv
dGhlciBwZXJzb24gYXJlIHZpZXdpbmcuJyk7CisKKyAgICAgICAgICBjb3VudElucHV0LmNsZWFy
KCk7CisgICAgICAgICAgY291bnRJbnB1dC5zZW5kS2V5cygnNCcpOworCisgICAgICAgICAgZXhw
ZWN0KHdpdGhvdXRPZmZzZXQuZ2V0VGV4dCgpKS50b0VxdWFsKCc0IHBlb3BsZSBhcmUgdmlld2lu
Zy4nKTsKKyAgICAgICAgICBleHBlY3Qod2l0aE9mZnNldC5nZXRUZXh0KCkpLnRvRXF1YWwoJ0ln
b3IsIE1pc2tvIGFuZCAyIG90aGVyIHBlb3BsZSBhcmUgdmlld2luZy4nKTsKKyAgICAgICAgfSk7
CisgICAgICAgIGl0KCdzaG91bGQgc2hvdyBkYXRhLWJvdW5kIG5hbWVzJywgZnVuY3Rpb24oKSB7
CisgICAgICAgICAgdmFyIHdpdGhPZmZzZXQgPSBlbGVtZW50LmFsbChieS5jc3MoJ25nLXBsdXJh
bGl6ZScpKS5nZXQoMSk7CisgICAgICAgICAgdmFyIHBlcnNvbkNvdW50ID0gZWxlbWVudChieS5t
b2RlbCgncGVyc29uQ291bnQnKSk7CisgICAgICAgICAgdmFyIHBlcnNvbjEgPSBlbGVtZW50KGJ5
Lm1vZGVsKCdwZXJzb24xJykpOworICAgICAgICAgIHZhciBwZXJzb24yID0gZWxlbWVudChieS5t
b2RlbCgncGVyc29uMicpKTsKKyAgICAgICAgICBwZXJzb25Db3VudC5jbGVhcigpOworICAgICAg
ICAgIHBlcnNvbkNvdW50LnNlbmRLZXlzKCc0Jyk7CisgICAgICAgICAgcGVyc29uMS5jbGVhcigp
OworICAgICAgICAgIHBlcnNvbjEuc2VuZEtleXMoJ0RpJyk7CisgICAgICAgICAgcGVyc29uMi5j
bGVhcigpOworICAgICAgICAgIHBlcnNvbjIuc2VuZEtleXMoJ1ZvanRhJyk7CisgICAgICAgICAg
ZXhwZWN0KHdpdGhPZmZzZXQuZ2V0VGV4dCgpKS50b0VxdWFsKCdEaSwgVm9qdGEgYW5kIDIgb3Ro
ZXIgcGVvcGxlIGFyZSB2aWV3aW5nLicpOworICAgICAgICB9KTsKKyAgICAgIDwvZmlsZT4KKyAg
ICA8L2V4YW1wbGU+CisgKi8KK3ZhciBuZ1BsdXJhbGl6ZURpcmVjdGl2ZSA9IFsnJGxvY2FsZScs
ICckaW50ZXJwb2xhdGUnLCAnJGxvZycsIGZ1bmN0aW9uKCRsb2NhbGUsICRpbnRlcnBvbGF0ZSwg
JGxvZykgeworICB2YXIgQlJBQ0UgPSAve30vZywKKyAgICAgIElTX1dIRU4gPSAvXndoZW4oTWlu
dXMpPyguKykkLzsKKworICByZXR1cm4geworICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVt
ZW50LCBhdHRyKSB7CisgICAgICB2YXIgbnVtYmVyRXhwID0gYXR0ci5jb3VudCwKKyAgICAgICAg
ICB3aGVuRXhwID0gYXR0ci4kYXR0ci53aGVuICYmIGVsZW1lbnQuYXR0cihhdHRyLiRhdHRyLndo
ZW4pLCAvLyB3ZSBoYXZlIHt7fX0gaW4gYXR0cnMKKyAgICAgICAgICBvZmZzZXQgPSBhdHRyLm9m
ZnNldCB8fCAwLAorICAgICAgICAgIHdoZW5zID0gc2NvcGUuJGV2YWwod2hlbkV4cCkgfHwge30s
CisgICAgICAgICAgd2hlbnNFeHBGbnMgPSB7fSwKKyAgICAgICAgICBzdGFydFN5bWJvbCA9ICRp
bnRlcnBvbGF0ZS5zdGFydFN5bWJvbCgpLAorICAgICAgICAgIGVuZFN5bWJvbCA9ICRpbnRlcnBv
bGF0ZS5lbmRTeW1ib2woKSwKKyAgICAgICAgICBicmFjZVJlcGxhY2VtZW50ID0gc3RhcnRTeW1i
b2wgKyBudW1iZXJFeHAgKyAnLScgKyBvZmZzZXQgKyBlbmRTeW1ib2wsCisgICAgICAgICAgd2F0
Y2hSZW1vdmVyID0gYW5ndWxhci5ub29wLAorICAgICAgICAgIGxhc3RDb3VudDsKKworICAgICAg
Zm9yRWFjaChhdHRyLCBmdW5jdGlvbihleHByZXNzaW9uLCBhdHRyaWJ1dGVOYW1lKSB7CisgICAg
ICAgIHZhciB0bXBNYXRjaCA9IElTX1dIRU4uZXhlYyhhdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAg
aWYgKHRtcE1hdGNoKSB7CisgICAgICAgICAgdmFyIHdoZW5LZXkgPSAodG1wTWF0Y2hbMV0gPyAn
LScgOiAnJykgKyBsb3dlcmNhc2UodG1wTWF0Y2hbMl0pOworICAgICAgICAgIHdoZW5zW3doZW5L
ZXldID0gZWxlbWVudC5hdHRyKGF0dHIuJGF0dHJbYXR0cmlidXRlTmFtZV0pOworICAgICAgICB9
CisgICAgICB9KTsKKyAgICAgIGZvckVhY2god2hlbnMsIGZ1bmN0aW9uKGV4cHJlc3Npb24sIGtl
eSkgeworICAgICAgICB3aGVuc0V4cEZuc1trZXldID0gJGludGVycG9sYXRlKGV4cHJlc3Npb24u
cmVwbGFjZShCUkFDRSwgYnJhY2VSZXBsYWNlbWVudCkpOworCisgICAgICB9KTsKKworICAgICAg
c2NvcGUuJHdhdGNoKG51bWJlckV4cCwgZnVuY3Rpb24gbmdQbHVyYWxpemVXYXRjaEFjdGlvbihu
ZXdWYWwpIHsKKyAgICAgICAgdmFyIGNvdW50ID0gcGFyc2VGbG9hdChuZXdWYWwpOworICAgICAg
ICB2YXIgY291bnRJc05hTiA9IGlzTmFOKGNvdW50KTsKKworICAgICAgICBpZiAoIWNvdW50SXNO
YU4gJiYgIShjb3VudCBpbiB3aGVucykpIHsKKyAgICAgICAgICAvLyBJZiBhbiBleHBsaWNpdCBu
dW1iZXIgcnVsZSBzdWNoIGFzIDEsIDIsIDMuLi4gaXMgZGVmaW5lZCwganVzdCB1c2UgaXQuCisg
ICAgICAgICAgLy8gT3RoZXJ3aXNlLCBjaGVjayBpdCBhZ2FpbnN0IHBsdXJhbGl6YXRpb24gcnVs
ZXMgaW4gJGxvY2FsZSBzZXJ2aWNlLgorICAgICAgICAgIGNvdW50ID0gJGxvY2FsZS5wbHVyYWxD
YXQoY291bnQgLSBvZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgYm90aCBgY291
bnRgIGFuZCBgbGFzdENvdW50YCBhcmUgTmFOLCB3ZSBkb24ndCBuZWVkIHRvIHJlLXJlZ2lzdGVy
IGEgd2F0Y2guCisgICAgICAgIC8vIEluIEpTIGBOYU4gIT09IE5hTmAsIHNvIHdlIGhhdmUgdG8g
ZXhsaWNpdGx5IGNoZWNrLgorICAgICAgICBpZiAoKGNvdW50ICE9PSBsYXN0Q291bnQpICYmICEo
Y291bnRJc05hTiAmJiBpc051bWJlcihsYXN0Q291bnQpICYmIGlzTmFOKGxhc3RDb3VudCkpKSB7
CisgICAgICAgICAgd2F0Y2hSZW1vdmVyKCk7CisgICAgICAgICAgdmFyIHdoZW5FeHBGbiA9IHdo
ZW5zRXhwRm5zW2NvdW50XTsKKyAgICAgICAgICBpZiAoaXNVbmRlZmluZWQod2hlbkV4cEZuKSkg
eworICAgICAgICAgICAgaWYgKG5ld1ZhbCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICRsb2cu
ZGVidWcoIm5nUGx1cmFsaXplOiBubyBydWxlIGRlZmluZWQgZm9yICciICsgY291bnQgKyAiJyBp
biAiICsgd2hlbkV4cCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3YXRjaFJlbW92ZXIg
PSBub29wOworICAgICAgICAgICAgdXBkYXRlRWxlbWVudFRleHQoKTsKKyAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgd2F0Y2hSZW1vdmVyID0gc2NvcGUuJHdhdGNoKHdoZW5FeHBGbiwg
dXBkYXRlRWxlbWVudFRleHQpOworICAgICAgICAgIH0KKyAgICAgICAgICBsYXN0Q291bnQgPSBj
b3VudDsKKyAgICAgICAgfQorICAgICAgfSk7CisKKyAgICAgIGZ1bmN0aW9uIHVwZGF0ZUVsZW1l
bnRUZXh0KG5ld1RleHQpIHsKKyAgICAgICAgZWxlbWVudC50ZXh0KG5ld1RleHQgfHwgJycpOwor
ICAgICAgfQorICAgIH0KKyAgfTsKK31dOworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAq
IEBuYW1lIG5nUmVwZWF0CisgKiBAbXVsdGlFbGVtZW50CisgKgorICogQGRlc2NyaXB0aW9uCisg
KiBUaGUgYG5nUmVwZWF0YCBkaXJlY3RpdmUgaW5zdGFudGlhdGVzIGEgdGVtcGxhdGUgb25jZSBw
ZXIgaXRlbSBmcm9tIGEgY29sbGVjdGlvbi4gRWFjaCB0ZW1wbGF0ZQorICogaW5zdGFuY2UgZ2V0
cyBpdHMgb3duIHNjb3BlLCB3aGVyZSB0aGUgZ2l2ZW4gbG9vcCB2YXJpYWJsZSBpcyBzZXQgdG8g
dGhlIGN1cnJlbnQgY29sbGVjdGlvbiBpdGVtLAorICogYW5kIGAkaW5kZXhgIGlzIHNldCB0byB0
aGUgaXRlbSBpbmRleCBvciBrZXkuCisgKgorICogU3BlY2lhbCBwcm9wZXJ0aWVzIGFyZSBleHBv
c2VkIG9uIHRoZSBsb2NhbCBzY29wZSBvZiBlYWNoIHRlbXBsYXRlIGluc3RhbmNlLCBpbmNsdWRp
bmc6CisgKgorICogfCBWYXJpYWJsZSAgfCBUeXBlICAgICAgICAgICAgfCBEZXRhaWxzICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfAorICogfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tfAorICogfCBgJGluZGV4YCAgfCB7QHR5cGUgbnVtYmVyfSAgfCBpdGVyYXRvciBvZmZz
ZXQgb2YgdGhlIHJlcGVhdGVkIGVsZW1lbnQgKDAuLmxlbmd0aC0xKSAgICAgICAgICAgICAgICAg
ICAgICAgfAorICogfCBgJGZpcnN0YCAgfCB7QHR5cGUgYm9vbGVhbn0gfCB0cnVlIGlmIHRoZSBy
ZXBlYXRlZCBlbGVtZW50IGlzIGZpcnN0IGluIHRoZSBpdGVyYXRvci4gICAgICAgICAgICAgICAg
ICAgICAgfAorICogfCBgJG1pZGRsZWAgfCB7QHR5cGUgYm9vbGVhbn0gfCB0cnVlIGlmIHRoZSBy
ZXBlYXRlZCBlbGVtZW50IGlzIGJldHdlZW4gdGhlIGZpcnN0IGFuZCBsYXN0IGluIHRoZSBpdGVy
YXRvci4gfAorICogfCBgJGxhc3RgICAgfCB7QHR5cGUgYm9vbGVhbn0gfCB0cnVlIGlmIHRoZSBy
ZXBlYXRlZCBlbGVtZW50IGlzIGxhc3QgaW4gdGhlIGl0ZXJhdG9yLiAgICAgICAgICAgICAgICAg
ICAgICAgfAorICogfCBgJGV2ZW5gICAgfCB7QHR5cGUgYm9vbGVhbn0gfCB0cnVlIGlmIHRoZSBp
dGVyYXRvciBwb3NpdGlvbiBgJGluZGV4YCBpcyBldmVuIChvdGhlcndpc2UgZmFsc2UpLiAgICAg
ICAgICAgfAorICogfCBgJG9kZGAgICAgfCB7QHR5cGUgYm9vbGVhbn0gfCB0cnVlIGlmIHRoZSBp
dGVyYXRvciBwb3NpdGlvbiBgJGluZGV4YCBpcyBvZGQgKG90aGVyd2lzZSBmYWxzZSkuICAgICAg
ICAgICAgfAorICoKKyAqIENyZWF0aW5nIGFsaWFzZXMgZm9yIHRoZXNlIHByb3BlcnRpZXMgaXMg
cG9zc2libGUgd2l0aCB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nSW5pdCBgbmdJbml0YH0uCisgKiBU
aGlzIG1heSBiZSB1c2VmdWwgd2hlbiwgZm9yIGluc3RhbmNlLCBuZXN0aW5nIG5nUmVwZWF0cy4K
KyAqCisgKgorICogIyBJdGVyYXRpbmcgb3ZlciBvYmplY3QgcHJvcGVydGllcworICoKKyAqIEl0
IGlzIHBvc3NpYmxlIHRvIGdldCBgbmdSZXBlYXRgIHRvIGl0ZXJhdGUgb3ZlciB0aGUgcHJvcGVy
dGllcyBvZiBhbiBvYmplY3QgdXNpbmcgdGhlIGZvbGxvd2luZworICogc3ludGF4OgorICoKKyAq
IGBgYGpzCisgKiA8ZGl2IG5nLXJlcGVhdD0iKGtleSwgdmFsdWUpIGluIG15T2JqIj4gLi4uIDwv
ZGl2PgorICogYGBgCisgKgorICogWW91IG5lZWQgdG8gYmUgYXdhcmUgdGhhdCB0aGUgSmF2YVNj
cmlwdCBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IGRlZmluZSB0aGUgb3JkZXIgb2Yga2V5cworICog
cmV0dXJuZWQgZm9yIGFuIG9iamVjdC4gKFRvIG1pdGlnYXRlIHRoaXMgaW4gQW5ndWxhciAxLjMg
dGhlIGBuZ1JlcGVhdGAgZGlyZWN0aXZlCisgKiB1c2VkIHRvIHNvcnQgdGhlIGtleXMgYWxwaGFi
ZXRpY2FsbHkuKQorICoKKyAqIFZlcnNpb24gMS40IHJlbW92ZWQgdGhlIGFscGhhYmV0aWMgc29y
dGluZy4gV2Ugbm93IHJlbHkgb24gdGhlIG9yZGVyIHJldHVybmVkIGJ5IHRoZSBicm93c2VyCisg
KiB3aGVuIHJ1bm5pbmcgYGZvciBrZXkgaW4gbXlPYmpgLiBJdCBzZWVtcyB0aGF0IGJyb3dzZXJz
IGdlbmVyYWxseSBmb2xsb3cgdGhlIHN0cmF0ZWd5IG9mIHByb3ZpZGluZworICoga2V5cyBpbiB0
aGUgb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlIGRlZmluZWQsIGFsdGhvdWdoIHRoZXJlIGFyZSBl
eGNlcHRpb25zIHdoZW4ga2V5cyBhcmUgZGVsZXRlZAorICogYW5kIHJlaW5zdGF0ZWQuIFNlZSBo
dHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1Jl
ZmVyZW5jZS9PcGVyYXRvcnMvZGVsZXRlI0Nyb3NzLWJyb3dzZXJfaXNzdWVzCisgKgorICogSWYg
dGhpcyBpcyBub3QgZGVzaXJlZCwgdGhlIHJlY29tbWVuZGVkIHdvcmthcm91bmQgaXMgdG8gY29u
dmVydCB5b3VyIG9iamVjdCBpbnRvIGFuIGFycmF5CisgKiB0aGF0IGlzIHNvcnRlZCBpbnRvIHRo
ZSBvcmRlciB0aGF0IHlvdSBwcmVmZXIgYmVmb3JlIHByb3ZpZGluZyBpdCB0byBgbmdSZXBlYXRg
LiAgWW91IGNvdWxkCisgKiBkbyB0aGlzIHdpdGggYSBmaWx0ZXIgc3VjaCBhcyBbdG9BcnJheUZp
bHRlcl0oaHR0cDovL25nbW9kdWxlcy5vcmcvbW9kdWxlcy9hbmd1bGFyLXRvQXJyYXlGaWx0ZXIp
CisgKiBvciBpbXBsZW1lbnQgYSBgJHdhdGNoYCBvbiB0aGUgb2JqZWN0IHlvdXJzZWxmLgorICoK
KyAqCisgKiAjIFRyYWNraW5nIGFuZCBEdXBsaWNhdGVzCisgKgorICogV2hlbiB0aGUgY29udGVu
dHMgb2YgdGhlIGNvbGxlY3Rpb24gY2hhbmdlLCBgbmdSZXBlYXRgIG1ha2VzIHRoZSBjb3JyZXNw
b25kaW5nIGNoYW5nZXMgdG8gdGhlIERPTToKKyAqCisgKiAqIFdoZW4gYW4gaXRlbSBpcyBhZGRl
ZCwgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIHRlbXBsYXRlIGlzIGFkZGVkIHRvIHRoZSBET00uCisg
KiAqIFdoZW4gYW4gaXRlbSBpcyByZW1vdmVkLCBpdHMgdGVtcGxhdGUgaW5zdGFuY2UgaXMgcmVt
b3ZlZCBmcm9tIHRoZSBET00uCisgKiAqIFdoZW4gaXRlbXMgYXJlIHJlb3JkZXJlZCwgdGhlaXIg
cmVzcGVjdGl2ZSB0ZW1wbGF0ZXMgYXJlIHJlb3JkZXJlZCBpbiB0aGUgRE9NLgorICoKKyAqIEJ5
IGRlZmF1bHQsIGBuZ1JlcGVhdGAgZG9lcyBub3QgYWxsb3cgZHVwbGljYXRlIGl0ZW1zIGluIGFy
cmF5cy4gVGhpcyBpcyBiZWNhdXNlIHdoZW4KKyAqIHRoZXJlIGFyZSBkdXBsaWNhdGVzLCBpdCBp
cyBub3QgcG9zc2libGUgdG8gbWFpbnRhaW4gYSBvbmUtdG8tb25lIG1hcHBpbmcgYmV0d2VlbiBj
b2xsZWN0aW9uCisgKiBpdGVtcyBhbmQgRE9NIGVsZW1lbnRzLgorICoKKyAqIElmIHlvdSBkbyBu
ZWVkIHRvIHJlcGVhdCBkdXBsaWNhdGUgaXRlbXMsIHlvdSBjYW4gc3Vic3RpdHV0ZSB0aGUgZGVm
YXVsdCB0cmFja2luZyBiZWhhdmlvcgorICogd2l0aCB5b3VyIG93biB1c2luZyB0aGUgYHRyYWNr
IGJ5YCBleHByZXNzaW9uLgorICoKKyAqIEZvciBleGFtcGxlLCB5b3UgbWF5IHRyYWNrIGl0ZW1z
IGJ5IHRoZSBpbmRleCBvZiBlYWNoIGl0ZW0gaW4gdGhlIGNvbGxlY3Rpb24sIHVzaW5nIHRoZQor
ICogc3BlY2lhbCBzY29wZSBwcm9wZXJ0eSBgJGluZGV4YDoKKyAqIGBgYGh0bWwKKyAqICAgIDxk
aXYgbmctcmVwZWF0PSJuIGluIFs0MiwgNDIsIDQzLCA0M10gdHJhY2sgYnkgJGluZGV4Ij4KKyAq
ICAgICAge3tufX0KKyAqICAgIDwvZGl2PgorICogYGBgCisgKgorICogWW91IG1heSB1c2UgYXJi
aXRyYXJ5IGV4cHJlc3Npb25zIGluIGB0cmFjayBieWAsIGluY2x1ZGluZyByZWZlcmVuY2VzIHRv
IGN1c3RvbSBmdW5jdGlvbnMKKyAqIG9uIHRoZSBzY29wZToKKyAqIGBgYGh0bWwKKyAqICAgIDxk
aXYgbmctcmVwZWF0PSJuIGluIFs0MiwgNDIsIDQzLCA0M10gdHJhY2sgYnkgbXlUcmFja2luZ0Z1
bmN0aW9uKG4pIj4KKyAqICAgICAge3tufX0KKyAqICAgIDwvZGl2PgorICogYGBgCisgKgorICog
SWYgeW91IGFyZSB3b3JraW5nIHdpdGggb2JqZWN0cyB0aGF0IGhhdmUgYW4gaWRlbnRpZmllciBw
cm9wZXJ0eSwgeW91IGNhbiB0cmFjaworICogYnkgdGhlIGlkZW50aWZpZXIgaW5zdGVhZCBvZiB0
aGUgd2hvbGUgb2JqZWN0LiBTaG91bGQgeW91IHJlbG9hZCB5b3VyIGRhdGEgbGF0ZXIsIGBuZ1Jl
cGVhdGAKKyAqIHdpbGwgbm90IGhhdmUgdG8gcmVidWlsZCB0aGUgRE9NIGVsZW1lbnRzIGZvciBp
dGVtcyBpdCBoYXMgYWxyZWFkeSByZW5kZXJlZCwgZXZlbiBpZiB0aGUKKyAqIEphdmFTY3JpcHQg
b2JqZWN0cyBpbiB0aGUgY29sbGVjdGlvbiBoYXZlIGJlZW4gc3Vic3RpdHV0ZWQgZm9yIG5ldyBv
bmVzOgorICogYGBgaHRtbAorICogICAgPGRpdiBuZy1yZXBlYXQ9Im1vZGVsIGluIGNvbGxlY3Rp
b24gdHJhY2sgYnkgbW9kZWwuaWQiPgorICogICAgICB7e21vZGVsLm5hbWV9fQorICogICAgPC9k
aXY+CisgKiBgYGAKKyAqCisgKiBXaGVuIG5vIGB0cmFjayBieWAgZXhwcmVzc2lvbiBpcyBwcm92
aWRlZCwgaXQgaXMgZXF1aXZhbGVudCB0byB0cmFja2luZyBieSB0aGUgYnVpbHQtaW4KKyAqIGAk
aWRgIGZ1bmN0aW9uLCB3aGljaCB0cmFja3MgaXRlbXMgYnkgdGhlaXIgaWRlbnRpdHk6CisgKiBg
YGBodG1sCisgKiAgICA8ZGl2IG5nLXJlcGVhdD0ib2JqIGluIGNvbGxlY3Rpb24gdHJhY2sgYnkg
JGlkKG9iaikiPgorICogICAgICB7e29iai5wcm9wfX0KKyAqICAgIDwvZGl2PgorICogYGBgCisg
KgorICogPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtd2FybmluZyI+CisgKiAqKk5vdGU6KiogYHRy
YWNrIGJ5YCBtdXN0IGFsd2F5cyBiZSB0aGUgbGFzdCBleHByZXNzaW9uOgorICogPC9kaXY+Cisg
KiBgYGAKKyAqIDxkaXYgbmctcmVwZWF0PSJtb2RlbCBpbiBjb2xsZWN0aW9uIHwgb3JkZXJCeTog
J2lkJyBhcyBmaWx0ZXJlZF9yZXN1bHQgdHJhY2sgYnkgbW9kZWwuaWQiPgorICogICAgIHt7bW9k
ZWwubmFtZX19CisgKiA8L2Rpdj4KKyAqIGBgYAorICoKKyAqICMgU3BlY2lhbCByZXBlYXQgc3Rh
cnQgYW5kIGVuZCBwb2ludHMKKyAqIFRvIHJlcGVhdCBhIHNlcmllcyBvZiBlbGVtZW50cyBpbnN0
ZWFkIG9mIGp1c3Qgb25lIHBhcmVudCBlbGVtZW50LCBuZ1JlcGVhdCAoYXMgd2VsbCBhcyBvdGhl
ciBuZyBkaXJlY3RpdmVzKSBzdXBwb3J0cyBleHRlbmRpbmcKKyAqIHRoZSByYW5nZSBvZiB0aGUg
cmVwZWF0ZXIgYnkgZGVmaW5pbmcgZXhwbGljaXQgc3RhcnQgYW5kIGVuZCBwb2ludHMgYnkgdXNp
bmcgKipuZy1yZXBlYXQtc3RhcnQqKiBhbmQgKipuZy1yZXBlYXQtZW5kKiogcmVzcGVjdGl2ZWx5
LgorICogVGhlICoqbmctcmVwZWF0LXN0YXJ0KiogZGlyZWN0aXZlIHdvcmtzIHRoZSBzYW1lIGFz
ICoqbmctcmVwZWF0KiosIGJ1dCB3aWxsIHJlcGVhdCBhbGwgdGhlIEhUTUwgY29kZSAoaW5jbHVk
aW5nIHRoZSB0YWcgaXQncyBkZWZpbmVkIG9uKQorICogdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUg
ZW5kaW5nIEhUTUwgdGFnIHdoZXJlICoqbmctcmVwZWF0LWVuZCoqIGlzIHBsYWNlZC4KKyAqCisg
KiBUaGUgZXhhbXBsZSBiZWxvdyBtYWtlcyB1c2Ugb2YgdGhpcyBmZWF0dXJlOgorICogYGBgaHRt
bAorICogICA8aGVhZGVyIG5nLXJlcGVhdC1zdGFydD0iaXRlbSBpbiBpdGVtcyI+CisgKiAgICAg
SGVhZGVyIHt7IGl0ZW0gfX0KKyAqICAgPC9oZWFkZXI+CisgKiAgIDxkaXYgY2xhc3M9ImJvZHki
PgorICogICAgIEJvZHkge3sgaXRlbSB9fQorICogICA8L2Rpdj4KKyAqICAgPGZvb3RlciBuZy1y
ZXBlYXQtZW5kPgorICogICAgIEZvb3RlciB7eyBpdGVtIH19CisgKiAgIDwvZm9vdGVyPgorICog
YGBgCisgKgorICogQW5kIHdpdGggYW4gaW5wdXQgb2Yge0B0eXBlIFsnQScsJ0InXX0gZm9yIHRo
ZSBpdGVtcyB2YXJpYWJsZSBpbiB0aGUgZXhhbXBsZSBhYm92ZSwgdGhlIG91dHB1dCB3aWxsIGV2
YWx1YXRlIHRvOgorICogYGBgaHRtbAorICogICA8aGVhZGVyPgorICogICAgIEhlYWRlciBBCisg
KiAgIDwvaGVhZGVyPgorICogICA8ZGl2IGNsYXNzPSJib2R5Ij4KKyAqICAgICBCb2R5IEEKKyAq
ICAgPC9kaXY+CisgKiAgIDxmb290ZXI+CisgKiAgICAgRm9vdGVyIEEKKyAqICAgPC9mb290ZXI+
CisgKiAgIDxoZWFkZXI+CisgKiAgICAgSGVhZGVyIEIKKyAqICAgPC9oZWFkZXI+CisgKiAgIDxk
aXYgY2xhc3M9ImJvZHkiPgorICogICAgIEJvZHkgQgorICogICA8L2Rpdj4KKyAqICAgPGZvb3Rl
cj4KKyAqICAgICBGb290ZXIgQgorICogICA8L2Zvb3Rlcj4KKyAqIGBgYAorICoKKyAqIFRoZSBj
dXN0b20gc3RhcnQgYW5kIGVuZCBwb2ludHMgZm9yIG5nUmVwZWF0IGFsc28gc3VwcG9ydCBhbGwg
b3RoZXIgSFRNTCBkaXJlY3RpdmUgc3ludGF4IGZsYXZvcnMgcHJvdmlkZWQgaW4gQW5ndWxhckpT
IChzdWNoCisgKiBhcyAqKmRhdGEtbmctcmVwZWF0LXN0YXJ0KiosICoqeC1uZy1yZXBlYXQtc3Rh
cnQqKiBhbmQgKipuZzpyZXBlYXQtc3RhcnQqKikuCisgKgorICogQGFuaW1hdGlvbnMKKyAqICoq
LmVudGVyKiogLSB3aGVuIGEgbmV3IGl0ZW0gaXMgYWRkZWQgdG8gdGhlIGxpc3Qgb3Igd2hlbiBh
biBpdGVtIGlzIHJldmVhbGVkIGFmdGVyIGEgZmlsdGVyCisgKgorICogKioubGVhdmUqKiAtIHdo
ZW4gYW4gaXRlbSBpcyByZW1vdmVkIGZyb20gdGhlIGxpc3Qgb3Igd2hlbiBhbiBpdGVtIGlzIGZp
bHRlcmVkIG91dAorICoKKyAqICoqLm1vdmUqKiAtIHdoZW4gYW4gYWRqYWNlbnQgaXRlbSBpcyBm
aWx0ZXJlZCBvdXQgY2F1c2luZyBhIHJlb3JkZXIgb3Igd2hlbiB0aGUgaXRlbSBjb250ZW50cyBh
cmUgcmVvcmRlcmVkCisgKgorICogQGVsZW1lbnQgQU5ZCisgKiBAc2NvcGUKKyAqIEBwcmlvcml0
eSAxMDAwCisgKiBAcGFyYW0ge3JlcGVhdF9leHByZXNzaW9ufSBuZ1JlcGVhdCBUaGUgZXhwcmVz
c2lvbiBpbmRpY2F0aW5nIGhvdyB0byBlbnVtZXJhdGUgYSBjb2xsZWN0aW9uLiBUaGVzZQorICog
ICBmb3JtYXRzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkOgorICoKKyAqICAgKiBgdmFyaWFibGUg
aW4gZXhwcmVzc2lvbmAg4oCTIHdoZXJlIHZhcmlhYmxlIGlzIHRoZSB1c2VyIGRlZmluZWQgbG9v
cCB2YXJpYWJsZSBhbmQgYGV4cHJlc3Npb25gCisgKiAgICAgaXMgYSBzY29wZSBleHByZXNzaW9u
IGdpdmluZyB0aGUgY29sbGVjdGlvbiB0byBlbnVtZXJhdGUuCisgKgorICogICAgIEZvciBleGFt
cGxlOiBgYWxidW0gaW4gYXJ0aXN0LmFsYnVtc2AuCisgKgorICogICAqIGAoa2V5LCB2YWx1ZSkg
aW4gZXhwcmVzc2lvbmAg4oCTIHdoZXJlIGBrZXlgIGFuZCBgdmFsdWVgIGNhbiBiZSBhbnkgdXNl
ciBkZWZpbmVkIGlkZW50aWZpZXJzLAorICogICAgIGFuZCBgZXhwcmVzc2lvbmAgaXMgdGhlIHNj
b3BlIGV4cHJlc3Npb24gZ2l2aW5nIHRoZSBjb2xsZWN0aW9uIHRvIGVudW1lcmF0ZS4KKyAqCisg
KiAgICAgRm9yIGV4YW1wbGU6IGAobmFtZSwgYWdlKSBpbiB7J2FkYW0nOjEwLCAnYW1hbGllJzox
Mn1gLgorICoKKyAqICAgKiBgdmFyaWFibGUgaW4gZXhwcmVzc2lvbiB0cmFjayBieSB0cmFja2lu
Z19leHByZXNzaW9uYCDigJMgWW91IGNhbiBhbHNvIHByb3ZpZGUgYW4gb3B0aW9uYWwgdHJhY2tp
bmcgZXhwcmVzc2lvbgorICogICAgIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGFzc29jaWF0ZSB0aGUg
b2JqZWN0cyBpbiB0aGUgY29sbGVjdGlvbiB3aXRoIHRoZSBET00gZWxlbWVudHMuIElmIG5vIHRy
YWNraW5nIGV4cHJlc3Npb24KKyAqICAgICBpcyBzcGVjaWZpZWQsIG5nLXJlcGVhdCBhc3NvY2lh
dGVzIGVsZW1lbnRzIGJ5IGlkZW50aXR5LiBJdCBpcyBhbiBlcnJvciB0byBoYXZlCisgKiAgICAg
bW9yZSB0aGFuIG9uZSB0cmFja2luZyBleHByZXNzaW9uIHZhbHVlIHJlc29sdmUgdG8gdGhlIHNh
bWUga2V5LiAoVGhpcyB3b3VsZCBtZWFuIHRoYXQgdHdvIGRpc3RpbmN0IG9iamVjdHMgYXJlCisg
KiAgICAgbWFwcGVkIHRvIHRoZSBzYW1lIERPTSBlbGVtZW50LCB3aGljaCBpcyBub3QgcG9zc2li
bGUuKQorICoKKyAqICAgICBOb3RlIHRoYXQgdGhlIHRyYWNraW5nIGV4cHJlc3Npb24gbXVzdCBj
b21lIGxhc3QsIGFmdGVyIGFueSBmaWx0ZXJzLCBhbmQgdGhlIGFsaWFzIGV4cHJlc3Npb24uCisg
KgorICogICAgIEZvciBleGFtcGxlOiBgaXRlbSBpbiBpdGVtc2AgaXMgZXF1aXZhbGVudCB0byBg
aXRlbSBpbiBpdGVtcyB0cmFjayBieSAkaWQoaXRlbSlgLiBUaGlzIGltcGxpZXMgdGhhdCB0aGUg
RE9NIGVsZW1lbnRzCisgKiAgICAgd2lsbCBiZSBhc3NvY2lhdGVkIGJ5IGl0ZW0gaWRlbnRpdHkg
aW4gdGhlIGFycmF5LgorICoKKyAqICAgICBGb3IgZXhhbXBsZTogYGl0ZW0gaW4gaXRlbXMgdHJh
Y2sgYnkgJGlkKGl0ZW0pYC4gQSBidWlsdCBpbiBgJGlkKClgIGZ1bmN0aW9uIGNhbiBiZSB1c2Vk
IHRvIGFzc2lnbiBhIHVuaXF1ZQorICogICAgIGAkJGhhc2hLZXlgIHByb3BlcnR5IHRvIGVhY2gg
aXRlbSBpbiB0aGUgYXJyYXkuIFRoaXMgcHJvcGVydHkgaXMgdGhlbiB1c2VkIGFzIGEga2V5IHRv
IGFzc29jaWF0ZWQgRE9NIGVsZW1lbnRzCisgKiAgICAgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBp
dGVtIGluIHRoZSBhcnJheSBieSBpZGVudGl0eS4gTW92aW5nIHRoZSBzYW1lIG9iamVjdCBpbiBh
cnJheSB3b3VsZCBtb3ZlIHRoZSBET00KKyAqICAgICBlbGVtZW50IGluIHRoZSBzYW1lIHdheSBp
biB0aGUgRE9NLgorICoKKyAqICAgICBGb3IgZXhhbXBsZTogYGl0ZW0gaW4gaXRlbXMgdHJhY2sg
YnkgaXRlbS5pZGAgaXMgYSB0eXBpY2FsIHBhdHRlcm4gd2hlbiB0aGUgaXRlbXMgY29tZSBmcm9t
IHRoZSBkYXRhYmFzZS4gSW4gdGhpcworICogICAgIGNhc2UgdGhlIG9iamVjdCBpZGVudGl0eSBk
b2VzIG5vdCBtYXR0ZXIuIFR3byBvYmplY3RzIGFyZSBjb25zaWRlcmVkIGVxdWl2YWxlbnQgYXMg
bG9uZyBhcyB0aGVpciBgaWRgCisgKiAgICAgcHJvcGVydHkgaXMgc2FtZS4KKyAqCisgKiAgICAg
Rm9yIGV4YW1wbGU6IGBpdGVtIGluIGl0ZW1zIHwgZmlsdGVyOnNlYXJjaFRleHQgdHJhY2sgYnkg
aXRlbS5pZGAgaXMgYSBwYXR0ZXJuIHRoYXQgbWlnaHQgYmUgdXNlZCB0byBhcHBseSBhIGZpbHRl
cgorICogICAgIHRvIGl0ZW1zIGluIGNvbmp1bmN0aW9uIHdpdGggYSB0cmFja2luZyBleHByZXNz
aW9uLgorICoKKyAqICAgKiBgdmFyaWFibGUgaW4gZXhwcmVzc2lvbiBhcyBhbGlhc19leHByZXNz
aW9uYCDigJMgWW91IGNhbiBhbHNvIHByb3ZpZGUgYW4gb3B0aW9uYWwgYWxpYXMgZXhwcmVzc2lv
biB3aGljaCB3aWxsIHRoZW4gc3RvcmUgdGhlCisgKiAgICAgaW50ZXJtZWRpYXRlIHJlc3VsdHMg
b2YgdGhlIHJlcGVhdGVyIGFmdGVyIHRoZSBmaWx0ZXJzIGhhdmUgYmVlbiBhcHBsaWVkLiBUeXBp
Y2FsbHkgdGhpcyBpcyB1c2VkIHRvIHJlbmRlciBhIHNwZWNpYWwgbWVzc2FnZQorICogICAgIHdo
ZW4gYSBmaWx0ZXIgaXMgYWN0aXZlIG9uIHRoZSByZXBlYXRlciwgYnV0IHRoZSBmaWx0ZXJlZCBy
ZXN1bHQgc2V0IGlzIGVtcHR5LgorICoKKyAqICAgICBGb3IgZXhhbXBsZTogYGl0ZW0gaW4gaXRl
bXMgfCBmaWx0ZXI6eCBhcyByZXN1bHRzYCB3aWxsIHN0b3JlIHRoZSBmcmFnbWVudCBvZiB0aGUg
cmVwZWF0ZWQgaXRlbXMgYXMgYHJlc3VsdHNgLCBidXQgb25seSBhZnRlcgorICogICAgIHRoZSBp
dGVtcyBoYXZlIGJlZW4gcHJvY2Vzc2VkIHRocm91Z2ggdGhlIGZpbHRlci4KKyAqCisgKiAgICAg
UGxlYXNlIG5vdGUgdGhhdCBgYXMgW3ZhcmlhYmxlIG5hbWVdIGlzIG5vdCBhbiBvcGVyYXRvciBi
dXQgcmF0aGVyIGEgcGFydCBvZiBuZ1JlcGVhdCBtaWNyby1zeW50YXggc28gaXQgY2FuIGJlIHVz
ZWQgb25seSBhdCB0aGUgZW5kCisgKiAgICAgKGFuZCBub3QgYXMgb3BlcmF0b3IsIGluc2lkZSBh
biBleHByZXNzaW9uKS4KKyAqCisgKiAgICAgRm9yIGV4YW1wbGU6IGBpdGVtIGluIGl0ZW1zIHwg
ZmlsdGVyIDogeCB8IG9yZGVyQnkgOiBvcmRlciB8IGxpbWl0VG8gOiBsaW1pdCBhcyByZXN1bHRz
YCAuCisgKgorICogQGV4YW1wbGUKKyAqIFRoaXMgZXhhbXBsZSBpbml0aWFsaXplcyB0aGUgc2Nv
cGUgdG8gYSBsaXN0IG9mIG5hbWVzIGFuZAorICogdGhlbiB1c2VzIGBuZ1JlcGVhdGAgdG8gZGlz
cGxheSBldmVyeSBwZXJzb246CisgIDxleGFtcGxlIG1vZHVsZT0ibmdBbmltYXRlIiBkZXBzPSJh
bmd1bGFyLWFuaW1hdGUuanMiIGFuaW1hdGlvbnM9InRydWUiPgorICAgIDxmaWxlIG5hbWU9Imlu
ZGV4Lmh0bWwiPgorICAgICAgPGRpdiBuZy1pbml0PSJmcmllbmRzID0gWworICAgICAgICB7bmFt
ZTonSm9obicsIGFnZToyNSwgZ2VuZGVyOidib3knfSwKKyAgICAgICAge25hbWU6J0plc3NpZScs
IGFnZTozMCwgZ2VuZGVyOidnaXJsJ30sCisgICAgICAgIHtuYW1lOidKb2hhbm5hJywgYWdlOjI4
LCBnZW5kZXI6J2dpcmwnfSwKKyAgICAgICAge25hbWU6J0pveScsIGFnZToxNSwgZ2VuZGVyOidn
aXJsJ30sCisgICAgICAgIHtuYW1lOidNYXJ5JywgYWdlOjI4LCBnZW5kZXI6J2dpcmwnfSwKKyAg
ICAgICAge25hbWU6J1BldGVyJywgYWdlOjk1LCBnZW5kZXI6J2JveSd9LAorICAgICAgICB7bmFt
ZTonU2ViYXN0aWFuJywgYWdlOjUwLCBnZW5kZXI6J2JveSd9LAorICAgICAgICB7bmFtZTonRXJp
a2EnLCBhZ2U6MjcsIGdlbmRlcjonZ2lybCd9LAorICAgICAgICB7bmFtZTonUGF0cmljaycsIGFn
ZTo0MCwgZ2VuZGVyOidib3knfSwKKyAgICAgICAge25hbWU6J1NhbWFudGhhJywgYWdlOjYwLCBn
ZW5kZXI6J2dpcmwnfQorICAgICAgXSI+CisgICAgICAgIEkgaGF2ZSB7e2ZyaWVuZHMubGVuZ3Ro
fX0gZnJpZW5kcy4gVGhleSBhcmU6CisgICAgICAgIDxpbnB1dCB0eXBlPSJzZWFyY2giIG5nLW1v
ZGVsPSJxIiBwbGFjZWhvbGRlcj0iZmlsdGVyIGZyaWVuZHMuLi4iIGFyaWEtbGFiZWw9ImZpbHRl
ciBmcmllbmRzIiAvPgorICAgICAgICA8dWwgY2xhc3M9ImV4YW1wbGUtYW5pbWF0ZS1jb250YWlu
ZXIiPgorICAgICAgICAgIDxsaSBjbGFzcz0iYW5pbWF0ZS1yZXBlYXQiIG5nLXJlcGVhdD0iZnJp
ZW5kIGluIGZyaWVuZHMgfCBmaWx0ZXI6cSBhcyByZXN1bHRzIj4KKyAgICAgICAgICAgIFt7eyRp
bmRleCArIDF9fV0ge3tmcmllbmQubmFtZX19IHdobyBpcyB7e2ZyaWVuZC5hZ2V9fSB5ZWFycyBv
bGQuCisgICAgICAgICAgPC9saT4KKyAgICAgICAgICA8bGkgY2xhc3M9ImFuaW1hdGUtcmVwZWF0
IiBuZy1pZj0icmVzdWx0cy5sZW5ndGggPT0gMCI+CisgICAgICAgICAgICA8c3Ryb25nPk5vIHJl
c3VsdHMgZm91bmQuLi48L3N0cm9uZz4KKyAgICAgICAgICA8L2xpPgorICAgICAgICA8L3VsPgor
ICAgICAgPC9kaXY+CisgICAgPC9maWxlPgorICAgIDxmaWxlIG5hbWU9ImFuaW1hdGlvbnMuY3Nz
Ij4KKyAgICAgIC5leGFtcGxlLWFuaW1hdGUtY29udGFpbmVyIHsKKyAgICAgICAgYmFja2dyb3Vu
ZDp3aGl0ZTsKKyAgICAgICAgYm9yZGVyOjFweCBzb2xpZCBibGFjazsKKyAgICAgICAgbGlzdC1z
dHlsZTpub25lOworICAgICAgICBtYXJnaW46MDsKKyAgICAgICAgcGFkZGluZzowIDEwcHg7Cisg
ICAgICB9CisKKyAgICAgIC5hbmltYXRlLXJlcGVhdCB7CisgICAgICAgIGxpbmUtaGVpZ2h0OjQw
cHg7CisgICAgICAgIGxpc3Qtc3R5bGU6bm9uZTsKKyAgICAgICAgYm94LXNpemluZzpib3JkZXIt
Ym94OworICAgICAgfQorCisgICAgICAuYW5pbWF0ZS1yZXBlYXQubmctbW92ZSwKKyAgICAgIC5h
bmltYXRlLXJlcGVhdC5uZy1lbnRlciwKKyAgICAgIC5hbmltYXRlLXJlcGVhdC5uZy1sZWF2ZSB7
CisgICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjphbGwgbGluZWFyIDAuNXM7CisgICAgICAgIHRy
YW5zaXRpb246YWxsIGxpbmVhciAwLjVzOworICAgICAgfQorCisgICAgICAuYW5pbWF0ZS1yZXBl
YXQubmctbGVhdmUubmctbGVhdmUtYWN0aXZlLAorICAgICAgLmFuaW1hdGUtcmVwZWF0Lm5nLW1v
dmUsCisgICAgICAuYW5pbWF0ZS1yZXBlYXQubmctZW50ZXIgeworICAgICAgICBvcGFjaXR5OjA7
CisgICAgICAgIG1heC1oZWlnaHQ6MDsKKyAgICAgIH0KKworICAgICAgLmFuaW1hdGUtcmVwZWF0
Lm5nLWxlYXZlLAorICAgICAgLmFuaW1hdGUtcmVwZWF0Lm5nLW1vdmUubmctbW92ZS1hY3RpdmUs
CisgICAgICAuYW5pbWF0ZS1yZXBlYXQubmctZW50ZXIubmctZW50ZXItYWN0aXZlIHsKKyAgICAg
ICAgb3BhY2l0eToxOworICAgICAgICBtYXgtaGVpZ2h0OjQwcHg7CisgICAgICB9CisgICAgPC9m
aWxlPgorICAgIDxmaWxlIG5hbWU9InByb3RyYWN0b3IuanMiIHR5cGU9InByb3RyYWN0b3IiPgor
ICAgICAgdmFyIGZyaWVuZHMgPSBlbGVtZW50LmFsbChieS5yZXBlYXRlcignZnJpZW5kIGluIGZy
aWVuZHMnKSk7CisKKyAgICAgIGl0KCdzaG91bGQgcmVuZGVyIGluaXRpYWwgZGF0YSBzZXQnLCBm
dW5jdGlvbigpIHsKKyAgICAgICAgZXhwZWN0KGZyaWVuZHMuY291bnQoKSkudG9CZSgxMCk7Cisg
ICAgICAgIGV4cGVjdChmcmllbmRzLmdldCgwKS5nZXRUZXh0KCkpLnRvRXF1YWwoJ1sxXSBKb2hu
IHdobyBpcyAyNSB5ZWFycyBvbGQuJyk7CisgICAgICAgIGV4cGVjdChmcmllbmRzLmdldCgxKS5n
ZXRUZXh0KCkpLnRvRXF1YWwoJ1syXSBKZXNzaWUgd2hvIGlzIDMwIHllYXJzIG9sZC4nKTsKKyAg
ICAgICAgZXhwZWN0KGZyaWVuZHMubGFzdCgpLmdldFRleHQoKSkudG9FcXVhbCgnWzEwXSBTYW1h
bnRoYSB3aG8gaXMgNjAgeWVhcnMgb2xkLicpOworICAgICAgICBleHBlY3QoZWxlbWVudChieS5i
aW5kaW5nKCdmcmllbmRzLmxlbmd0aCcpKS5nZXRUZXh0KCkpCisgICAgICAgICAgICAudG9NYXRj
aCgiSSBoYXZlIDEwIGZyaWVuZHMuIFRoZXkgYXJlOiIpOworICAgICAgfSk7CisKKyAgICAgICBp
dCgnc2hvdWxkIHVwZGF0ZSByZXBlYXRlciB3aGVuIGZpbHRlciBwcmVkaWNhdGUgY2hhbmdlcycs
IGZ1bmN0aW9uKCkgeworICAgICAgICAgZXhwZWN0KGZyaWVuZHMuY291bnQoKSkudG9CZSgxMCk7
CisKKyAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ3EnKSkuc2VuZEtleXMoJ21hJyk7CisKKyAg
ICAgICAgIGV4cGVjdChmcmllbmRzLmNvdW50KCkpLnRvQmUoMik7CisgICAgICAgICBleHBlY3Qo
ZnJpZW5kcy5nZXQoMCkuZ2V0VGV4dCgpKS50b0VxdWFsKCdbMV0gTWFyeSB3aG8gaXMgMjggeWVh
cnMgb2xkLicpOworICAgICAgICAgZXhwZWN0KGZyaWVuZHMubGFzdCgpLmdldFRleHQoKSkudG9F
cXVhbCgnWzJdIFNhbWFudGhhIHdobyBpcyA2MCB5ZWFycyBvbGQuJyk7CisgICAgICAgfSk7Cisg
ICAgICA8L2ZpbGU+CisgICAgPC9leGFtcGxlPgorICovCit2YXIgbmdSZXBlYXREaXJlY3RpdmUg
PSBbJyRwYXJzZScsICckYW5pbWF0ZScsIGZ1bmN0aW9uKCRwYXJzZSwgJGFuaW1hdGUpIHsKKyAg
dmFyIE5HX1JFTU9WRUQgPSAnJCROR19SRU1PVkVEJzsKKyAgdmFyIG5nUmVwZWF0TWluRXJyID0g
bWluRXJyKCduZ1JlcGVhdCcpOworCisgIHZhciB1cGRhdGVTY29wZSA9IGZ1bmN0aW9uKHNjb3Bl
LCBpbmRleCwgdmFsdWVJZGVudGlmaWVyLCB2YWx1ZSwga2V5SWRlbnRpZmllciwga2V5LCBhcnJh
eUxlbmd0aCkgeworICAgIC8vIFRPRE8ocGVyZik6IGdlbmVyYXRlIHNldHRlcnMgdG8gc2hhdmUg
b2ZmIH40MG1zIG9yIDEtMS41JQorICAgIHNjb3BlW3ZhbHVlSWRlbnRpZmllcl0gPSB2YWx1ZTsK
KyAgICBpZiAoa2V5SWRlbnRpZmllcikgc2NvcGVba2V5SWRlbnRpZmllcl0gPSBrZXk7CisgICAg
c2NvcGUuJGluZGV4ID0gaW5kZXg7CisgICAgc2NvcGUuJGZpcnN0ID0gKGluZGV4ID09PSAwKTsK
KyAgICBzY29wZS4kbGFzdCA9IChpbmRleCA9PT0gKGFycmF5TGVuZ3RoIC0gMSkpOworICAgIHNj
b3BlLiRtaWRkbGUgPSAhKHNjb3BlLiRmaXJzdCB8fCBzY29wZS4kbGFzdCk7CisgICAgLy8ganNo
aW50IGJpdHdpc2U6IGZhbHNlCisgICAgc2NvcGUuJG9kZCA9ICEoc2NvcGUuJGV2ZW4gPSAoaW5k
ZXgmMSkgPT09IDApOworICAgIC8vIGpzaGludCBiaXR3aXNlOiB0cnVlCisgIH07CisKKyAgdmFy
IGdldEJsb2NrU3RhcnQgPSBmdW5jdGlvbihibG9jaykgeworICAgIHJldHVybiBibG9jay5jbG9u
ZVswXTsKKyAgfTsKKworICB2YXIgZ2V0QmxvY2tFbmQgPSBmdW5jdGlvbihibG9jaykgeworICAg
IHJldHVybiBibG9jay5jbG9uZVtibG9jay5jbG9uZS5sZW5ndGggLSAxXTsKKyAgfTsKKworCisg
IHJldHVybiB7CisgICAgcmVzdHJpY3Q6ICdBJywKKyAgICBtdWx0aUVsZW1lbnQ6IHRydWUsCisg
ICAgdHJhbnNjbHVkZTogJ2VsZW1lbnQnLAorICAgIHByaW9yaXR5OiAxMDAwLAorICAgIHRlcm1p
bmFsOiB0cnVlLAorICAgICQkdGxiOiB0cnVlLAorICAgIGNvbXBpbGU6IGZ1bmN0aW9uIG5nUmVw
ZWF0Q29tcGlsZSgkZWxlbWVudCwgJGF0dHIpIHsKKyAgICAgIHZhciBleHByZXNzaW9uID0gJGF0
dHIubmdSZXBlYXQ7CisgICAgICB2YXIgbmdSZXBlYXRFbmRDb21tZW50ID0gZG9jdW1lbnQuY3Jl
YXRlQ29tbWVudCgnIGVuZCBuZ1JlcGVhdDogJyArIGV4cHJlc3Npb24gKyAnICcpOworCisgICAg
ICB2YXIgbWF0Y2ggPSBleHByZXNzaW9uLm1hdGNoKC9eXHMqKFtcc1xTXSs/KVxzK2luXHMrKFtc
c1xTXSs/KSg/OlxzK2FzXHMrKFtcc1xTXSs/KSk/KD86XHMrdHJhY2tccytieVxzKyhbXHNcU10r
PykpP1xzKiQvKTsKKworICAgICAgaWYgKCFtYXRjaCkgeworICAgICAgICB0aHJvdyBuZ1JlcGVh
dE1pbkVycignaWV4cCcsICJFeHBlY3RlZCBleHByZXNzaW9uIGluIGZvcm0gb2YgJ19pdGVtXyBp
biBfY29sbGVjdGlvbl9bIHRyYWNrIGJ5IF9pZF9dJyBidXQgZ290ICd7MH0nLiIsCisgICAgICAg
ICAgICBleHByZXNzaW9uKTsKKyAgICAgIH0KKworICAgICAgdmFyIGxocyA9IG1hdGNoWzFdOwor
ICAgICAgdmFyIHJocyA9IG1hdGNoWzJdOworICAgICAgdmFyIGFsaWFzQXMgPSBtYXRjaFszXTsK
KyAgICAgIHZhciB0cmFja0J5RXhwID0gbWF0Y2hbNF07CisKKyAgICAgIG1hdGNoID0gbGhzLm1h
dGNoKC9eKD86KFxzKltcJFx3XSspfFwoXHMqKFtcJFx3XSspXHMqLFxzKihbXCRcd10rKVxzKlwp
KSQvKTsKKworICAgICAgaWYgKCFtYXRjaCkgeworICAgICAgICB0aHJvdyBuZ1JlcGVhdE1pbkVy
cignaWlkZXhwJywgIidfaXRlbV8nIGluICdfaXRlbV8gaW4gX2NvbGxlY3Rpb25fJyBzaG91bGQg
YmUgYW4gaWRlbnRpZmllciBvciAnKF9rZXlfLCBfdmFsdWVfKScgZXhwcmVzc2lvbiwgYnV0IGdv
dCAnezB9Jy4iLAorICAgICAgICAgICAgbGhzKTsKKyAgICAgIH0KKyAgICAgIHZhciB2YWx1ZUlk
ZW50aWZpZXIgPSBtYXRjaFszXSB8fCBtYXRjaFsxXTsKKyAgICAgIHZhciBrZXlJZGVudGlmaWVy
ID0gbWF0Y2hbMl07CisKKyAgICAgIGlmIChhbGlhc0FzICYmICghL15bJGEtekEtWl9dWyRhLXpB
LVowLTlfXSokLy50ZXN0KGFsaWFzQXMpIHx8CisgICAgICAgICAgL14obnVsbHx1bmRlZmluZWR8
dGhpc3xcJGluZGV4fFwkZmlyc3R8XCRtaWRkbGV8XCRsYXN0fFwkZXZlbnxcJG9kZHxcJHBhcmVu
dHxcJHJvb3R8XCRpZCkkLy50ZXN0KGFsaWFzQXMpKSkgeworICAgICAgICB0aHJvdyBuZ1JlcGVh
dE1pbkVycignYmFkaWRlbnQnLCAiYWxpYXMgJ3swfScgaXMgaW52YWxpZCAtLS0gbXVzdCBiZSBh
IHZhbGlkIEpTIGlkZW50aWZpZXIgd2hpY2ggaXMgbm90IGEgcmVzZXJ2ZWQgbmFtZS4iLAorICAg
ICAgICAgIGFsaWFzQXMpOworICAgICAgfQorCisgICAgICB2YXIgdHJhY2tCeUV4cEdldHRlciwg
dHJhY2tCeUlkRXhwRm4sIHRyYWNrQnlJZEFycmF5Rm4sIHRyYWNrQnlJZE9iakZuOworICAgICAg
dmFyIGhhc2hGbkxvY2FscyA9IHskaWQ6IGhhc2hLZXl9OworCisgICAgICBpZiAodHJhY2tCeUV4
cCkgeworICAgICAgICB0cmFja0J5RXhwR2V0dGVyID0gJHBhcnNlKHRyYWNrQnlFeHApOworICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgdHJhY2tCeUlkQXJyYXlGbiA9IGZ1bmN0aW9uKGtleSwgdmFs
dWUpIHsKKyAgICAgICAgICByZXR1cm4gaGFzaEtleSh2YWx1ZSk7CisgICAgICAgIH07CisgICAg
ICAgIHRyYWNrQnlJZE9iakZuID0gZnVuY3Rpb24oa2V5KSB7CisgICAgICAgICAgcmV0dXJuIGtl
eTsKKyAgICAgICAgfTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5nUmVwZWF0
TGluaygkc2NvcGUsICRlbGVtZW50LCAkYXR0ciwgY3RybCwgJHRyYW5zY2x1ZGUpIHsKKworICAg
ICAgICBpZiAodHJhY2tCeUV4cEdldHRlcikgeworICAgICAgICAgIHRyYWNrQnlJZEV4cEZuID0g
ZnVuY3Rpb24oa2V5LCB2YWx1ZSwgaW5kZXgpIHsKKyAgICAgICAgICAgIC8vIGFzc2lnbiBrZXks
IHZhbHVlLCBhbmQgJGluZGV4IHRvIHRoZSBsb2NhbHMgc28gdGhhdCB0aGV5IGNhbiBiZSB1c2Vk
IGluIGhhc2ggZnVuY3Rpb25zCisgICAgICAgICAgICBpZiAoa2V5SWRlbnRpZmllcikgaGFzaEZu
TG9jYWxzW2tleUlkZW50aWZpZXJdID0ga2V5OworICAgICAgICAgICAgaGFzaEZuTG9jYWxzW3Zh
bHVlSWRlbnRpZmllcl0gPSB2YWx1ZTsKKyAgICAgICAgICAgIGhhc2hGbkxvY2Fscy4kaW5kZXgg
PSBpbmRleDsKKyAgICAgICAgICAgIHJldHVybiB0cmFja0J5RXhwR2V0dGVyKCRzY29wZSwgaGFz
aEZuTG9jYWxzKTsKKyAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgLy8gU3RvcmUg
YSBsaXN0IG9mIGVsZW1lbnRzIGZyb20gcHJldmlvdXMgcnVuLiBUaGlzIGlzIGEgaGFzaCB3aGVy
ZSBrZXkgaXMgdGhlIGl0ZW0gZnJvbSB0aGUKKyAgICAgICAgLy8gaXRlcmF0b3IsIGFuZCB0aGUg
dmFsdWUgaXMgb2JqZWN0cyB3aXRoIGZvbGxvd2luZyBwcm9wZXJ0aWVzLgorICAgICAgICAvLyAg
IC0gc2NvcGU6IGJvdW5kIHNjb3BlCisgICAgICAgIC8vICAgLSBlbGVtZW50OiBwcmV2aW91cyBl
bGVtZW50LgorICAgICAgICAvLyAgIC0gaW5kZXg6IHBvc2l0aW9uCisgICAgICAgIC8vCisgICAg
ICAgIC8vIFdlIGFyZSB1c2luZyBuby1wcm90byBvYmplY3Qgc28gdGhhdCB3ZSBkb24ndCBuZWVk
IHRvIGd1YXJkIGFnYWluc3QgaW5oZXJpdGVkIHByb3BzIHZpYQorICAgICAgICAvLyBoYXNPd25Q
cm9wZXJ0eS4KKyAgICAgICAgdmFyIGxhc3RCbG9ja01hcCA9IGNyZWF0ZU1hcCgpOworCisgICAg
ICAgIC8vd2F0Y2ggcHJvcHMKKyAgICAgICAgJHNjb3BlLiR3YXRjaENvbGxlY3Rpb24ocmhzLCBm
dW5jdGlvbiBuZ1JlcGVhdEFjdGlvbihjb2xsZWN0aW9uKSB7CisgICAgICAgICAgdmFyIGluZGV4
LCBsZW5ndGgsCisgICAgICAgICAgICAgIHByZXZpb3VzTm9kZSA9ICRlbGVtZW50WzBdLCAgICAg
Ly8gbm9kZSB0aGF0IGNsb25lZCBub2RlcyBzaG91bGQgYmUgaW5zZXJ0ZWQgYWZ0ZXIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplZCB0
byB0aGUgY29tbWVudCBub2RlIGFuY2hvcgorICAgICAgICAgICAgICBuZXh0Tm9kZSwKKyAgICAg
ICAgICAgICAgLy8gU2FtZSBhcyBsYXN0QmxvY2tNYXAgYnV0IGl0IGhhcyB0aGUgY3VycmVudCBz
dGF0ZS4gSXQgd2lsbCBiZWNvbWUgdGhlCisgICAgICAgICAgICAgIC8vIGxhc3RCbG9ja01hcCBv
biB0aGUgbmV4dCBpdGVyYXRpb24uCisgICAgICAgICAgICAgIG5leHRCbG9ja01hcCA9IGNyZWF0
ZU1hcCgpLAorICAgICAgICAgICAgICBjb2xsZWN0aW9uTGVuZ3RoLAorICAgICAgICAgICAgICBr
ZXksIHZhbHVlLCAvLyBrZXkvdmFsdWUgb2YgaXRlcmF0aW9uCisgICAgICAgICAgICAgIHRyYWNr
QnlJZCwKKyAgICAgICAgICAgICAgdHJhY2tCeUlkRm4sCisgICAgICAgICAgICAgIGNvbGxlY3Rp
b25LZXlzLAorICAgICAgICAgICAgICBibG9jaywgICAgICAgLy8gbGFzdCBvYmplY3QgaW5mb3Jt
YXRpb24ge3Njb3BlLCBlbGVtZW50LCBpZH0KKyAgICAgICAgICAgICAgbmV4dEJsb2NrT3JkZXIs
CisgICAgICAgICAgICAgIGVsZW1lbnRzVG9SZW1vdmU7CisKKyAgICAgICAgICBpZiAoYWxpYXNB
cykgeworICAgICAgICAgICAgJHNjb3BlW2FsaWFzQXNdID0gY29sbGVjdGlvbjsKKyAgICAgICAg
ICB9CisKKyAgICAgICAgICBpZiAoaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHsKKyAgICAgICAg
ICAgIGNvbGxlY3Rpb25LZXlzID0gY29sbGVjdGlvbjsKKyAgICAgICAgICAgIHRyYWNrQnlJZEZu
ID0gdHJhY2tCeUlkRXhwRm4gfHwgdHJhY2tCeUlkQXJyYXlGbjsKKyAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgdHJhY2tCeUlkRm4gPSB0cmFja0J5SWRFeHBGbiB8fCB0cmFja0J5SWRP
YmpGbjsKKyAgICAgICAgICAgIC8vIGlmIG9iamVjdCwgZXh0cmFjdCBrZXlzLCBpbiBlbnVtZXJh
dGlvbiBvcmRlciwgdW5zb3J0ZWQKKyAgICAgICAgICAgIGNvbGxlY3Rpb25LZXlzID0gW107Cisg
ICAgICAgICAgICBmb3IgKHZhciBpdGVtS2V5IGluIGNvbGxlY3Rpb24pIHsKKyAgICAgICAgICAg
ICAgaWYgKGNvbGxlY3Rpb24uaGFzT3duUHJvcGVydHkoaXRlbUtleSkgJiYgaXRlbUtleS5jaGFy
QXQoMCkgIT09ICckJykgeworICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25LZXlzLnB1c2goaXRl
bUtleSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAg
ICAgICAgICBjb2xsZWN0aW9uTGVuZ3RoID0gY29sbGVjdGlvbktleXMubGVuZ3RoOworICAgICAg
ICAgIG5leHRCbG9ja09yZGVyID0gbmV3IEFycmF5KGNvbGxlY3Rpb25MZW5ndGgpOworCisgICAg
ICAgICAgLy8gbG9jYXRlIGV4aXN0aW5nIGl0ZW1zCisgICAgICAgICAgZm9yIChpbmRleCA9IDA7
IGluZGV4IDwgY29sbGVjdGlvbkxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAga2V5ID0g
KGNvbGxlY3Rpb24gPT09IGNvbGxlY3Rpb25LZXlzKSA/IGluZGV4IDogY29sbGVjdGlvbktleXNb
aW5kZXhdOworICAgICAgICAgICAgdmFsdWUgPSBjb2xsZWN0aW9uW2tleV07CisgICAgICAgICAg
ICB0cmFja0J5SWQgPSB0cmFja0J5SWRGbihrZXksIHZhbHVlLCBpbmRleCk7CisgICAgICAgICAg
ICBpZiAobGFzdEJsb2NrTWFwW3RyYWNrQnlJZF0pIHsKKyAgICAgICAgICAgICAgLy8gZm91bmQg
cHJldmlvdXNseSBzZWVuIGJsb2NrCisgICAgICAgICAgICAgIGJsb2NrID0gbGFzdEJsb2NrTWFw
W3RyYWNrQnlJZF07CisgICAgICAgICAgICAgIGRlbGV0ZSBsYXN0QmxvY2tNYXBbdHJhY2tCeUlk
XTsKKyAgICAgICAgICAgICAgbmV4dEJsb2NrTWFwW3RyYWNrQnlJZF0gPSBibG9jazsKKyAgICAg
ICAgICAgICAgbmV4dEJsb2NrT3JkZXJbaW5kZXhdID0gYmxvY2s7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKG5leHRCbG9ja01hcFt0cmFja0J5SWRdKSB7CisgICAgICAgICAgICAgIC8vIGlmIGNv
bGxpc2lvbiBkZXRlY3RlZC4gcmVzdG9yZSBsYXN0QmxvY2tNYXAgYW5kIHRocm93IGFuIGVycm9y
CisgICAgICAgICAgICAgIGZvckVhY2gobmV4dEJsb2NrT3JkZXIsIGZ1bmN0aW9uKGJsb2NrKSB7
CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrICYmIGJsb2NrLnNjb3BlKSBsYXN0QmxvY2tNYXBb
YmxvY2suaWRdID0gYmxvY2s7CisgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICB0aHJv
dyBuZ1JlcGVhdE1pbkVycignZHVwZXMnLAorICAgICAgICAgICAgICAgICAgIkR1cGxpY2F0ZXMg
aW4gYSByZXBlYXRlciBhcmUgbm90IGFsbG93ZWQuIFVzZSAndHJhY2sgYnknIGV4cHJlc3Npb24g
dG8gc3BlY2lmeSB1bmlxdWUga2V5cy4gUmVwZWF0ZXI6IHswfSwgRHVwbGljYXRlIGtleTogezF9
LCBEdXBsaWNhdGUgdmFsdWU6IHsyfSIsCisgICAgICAgICAgICAgICAgICBleHByZXNzaW9uLCB0
cmFja0J5SWQsIHZhbHVlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIC8v
IG5ldyBuZXZlciBiZWZvcmUgc2VlbiBibG9jaworICAgICAgICAgICAgICBuZXh0QmxvY2tPcmRl
cltpbmRleF0gPSB7aWQ6IHRyYWNrQnlJZCwgc2NvcGU6IHVuZGVmaW5lZCwgY2xvbmU6IHVuZGVm
aW5lZH07CisgICAgICAgICAgICAgIG5leHRCbG9ja01hcFt0cmFja0J5SWRdID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICAvLyByZW1vdmUgbGVmdG92ZXIg
aXRlbXMKKyAgICAgICAgICBmb3IgKHZhciBibG9ja0tleSBpbiBsYXN0QmxvY2tNYXApIHsKKyAg
ICAgICAgICAgIGJsb2NrID0gbGFzdEJsb2NrTWFwW2Jsb2NrS2V5XTsKKyAgICAgICAgICAgIGVs
ZW1lbnRzVG9SZW1vdmUgPSBnZXRCbG9ja05vZGVzKGJsb2NrLmNsb25lKTsKKyAgICAgICAgICAg
ICRhbmltYXRlLmxlYXZlKGVsZW1lbnRzVG9SZW1vdmUpOworICAgICAgICAgICAgaWYgKGVsZW1l
bnRzVG9SZW1vdmVbMF0ucGFyZW50Tm9kZSkgeworICAgICAgICAgICAgICAvLyBpZiB0aGUgZWxl
bWVudCB3YXMgbm90IHJlbW92ZWQgeWV0IGJlY2F1c2Ugb2YgcGVuZGluZyBhbmltYXRpb24sIG1h
cmsgaXQgYXMgZGVsZXRlZAorICAgICAgICAgICAgICAvLyBzbyB0aGF0IHdlIGNhbiBpZ25vcmUg
aXQgbGF0ZXIKKyAgICAgICAgICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGVsZW1lbnRz
VG9SZW1vdmUubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICAgICAg
ICAgIGVsZW1lbnRzVG9SZW1vdmVbaW5kZXhdW05HX1JFTU9WRURdID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYmxvY2suc2NvcGUuJGRlc3Ryb3ko
KTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICAvLyB3ZSBhcmUgbm90IHVzaW5nIGZvckVhY2gg
Zm9yIHBlcmYgcmVhc29ucyAodHJ5aW5nIHRvIGF2b2lkICNjYWxsKQorICAgICAgICAgIGZvciAo
aW5kZXggPSAwOyBpbmRleCA8IGNvbGxlY3Rpb25MZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAg
ICAgIGtleSA9IChjb2xsZWN0aW9uID09PSBjb2xsZWN0aW9uS2V5cykgPyBpbmRleCA6IGNvbGxl
Y3Rpb25LZXlzW2luZGV4XTsKKyAgICAgICAgICAgIHZhbHVlID0gY29sbGVjdGlvbltrZXldOwor
ICAgICAgICAgICAgYmxvY2sgPSBuZXh0QmxvY2tPcmRlcltpbmRleF07CisKKyAgICAgICAgICAg
IGlmIChibG9jay5zY29wZSkgeworICAgICAgICAgICAgICAvLyBpZiB3ZSBoYXZlIGFscmVhZHkg
c2VlbiB0aGlzIG9iamVjdCwgdGhlbiB3ZSBuZWVkIHRvIHJldXNlIHRoZQorICAgICAgICAgICAg
ICAvLyBhc3NvY2lhdGVkIHNjb3BlL2VsZW1lbnQKKworICAgICAgICAgICAgICBuZXh0Tm9kZSA9
IHByZXZpb3VzTm9kZTsKKworICAgICAgICAgICAgICAvLyBza2lwIG5vZGVzIHRoYXQgYXJlIGFs
cmVhZHkgcGVuZGluZyByZW1vdmFsIHZpYSBsZWF2ZSBhbmltYXRpb24KKyAgICAgICAgICAgICAg
ZG8geworICAgICAgICAgICAgICAgIG5leHROb2RlID0gbmV4dE5vZGUubmV4dFNpYmxpbmc7Cisg
ICAgICAgICAgICAgIH0gd2hpbGUgKG5leHROb2RlICYmIG5leHROb2RlW05HX1JFTU9WRURdKTsK
KworICAgICAgICAgICAgICBpZiAoZ2V0QmxvY2tTdGFydChibG9jaykgIT0gbmV4dE5vZGUpIHsK
KyAgICAgICAgICAgICAgICAvLyBleGlzdGluZyBpdGVtIHdoaWNoIGdvdCBtb3ZlZAorICAgICAg
ICAgICAgICAgICRhbmltYXRlLm1vdmUoZ2V0QmxvY2tOb2RlcyhibG9jay5jbG9uZSksIG51bGws
IGpxTGl0ZShwcmV2aW91c05vZGUpKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBw
cmV2aW91c05vZGUgPSBnZXRCbG9ja0VuZChibG9jayk7CisgICAgICAgICAgICAgIHVwZGF0ZVNj
b3BlKGJsb2NrLnNjb3BlLCBpbmRleCwgdmFsdWVJZGVudGlmaWVyLCB2YWx1ZSwga2V5SWRlbnRp
Zmllciwga2V5LCBjb2xsZWN0aW9uTGVuZ3RoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgIC8vIG5ldyBpdGVtIHdoaWNoIHdlIGRvbid0IGtub3cgYWJvdXQKKyAgICAgICAg
ICAgICAgJHRyYW5zY2x1ZGUoZnVuY3Rpb24gbmdSZXBlYXRUcmFuc2NsdWRlKGNsb25lLCBzY29w
ZSkgeworICAgICAgICAgICAgICAgIGJsb2NrLnNjb3BlID0gc2NvcGU7CisgICAgICAgICAgICAg
ICAgLy8gaHR0cDovL2pzcGVyZi5jb20vY2xvbmUtdnMtY3JlYXRlY29tbWVudAorICAgICAgICAg
ICAgICAgIHZhciBlbmROb2RlID0gbmdSZXBlYXRFbmRDb21tZW50LmNsb25lTm9kZShmYWxzZSk7
CisgICAgICAgICAgICAgICAgY2xvbmVbY2xvbmUubGVuZ3RoKytdID0gZW5kTm9kZTsKKworICAg
ICAgICAgICAgICAgIC8vIFRPRE8ocGVyZik6IHN1cHBvcnQgbmFrZWQgcHJldmlvdXNOb2RlIGlu
IGBlbnRlcmAgdG8gYXZvaWQgY3JlYXRpb24gb2YganFMaXRlIHdyYXBwZXI/CisgICAgICAgICAg
ICAgICAgJGFuaW1hdGUuZW50ZXIoY2xvbmUsIG51bGwsIGpxTGl0ZShwcmV2aW91c05vZGUpKTsK
KyAgICAgICAgICAgICAgICBwcmV2aW91c05vZGUgPSBlbmROb2RlOworICAgICAgICAgICAgICAg
IC8vIE5vdGU6IFdlIG9ubHkgbmVlZCB0aGUgZmlyc3QvbGFzdCBub2RlIG9mIHRoZSBjbG9uZWQg
bm9kZXMuCisgICAgICAgICAgICAgICAgLy8gSG93ZXZlciwgd2UgbmVlZCB0byBrZWVwIHRoZSBy
ZWZlcmVuY2UgdG8gdGhlIGpxbGl0ZSB3cmFwcGVyIGFzIGl0IG1pZ2h0IGJlIGNoYW5nZWQgbGF0
ZXIKKyAgICAgICAgICAgICAgICAvLyBieSBhIGRpcmVjdGl2ZSB3aXRoIHRlbXBsYXRlVXJsIHdo
ZW4gaXRzIHRlbXBsYXRlIGFycml2ZXMuCisgICAgICAgICAgICAgICAgYmxvY2suY2xvbmUgPSBj
bG9uZTsKKyAgICAgICAgICAgICAgICBuZXh0QmxvY2tNYXBbYmxvY2suaWRdID0gYmxvY2s7Cisg
ICAgICAgICAgICAgICAgdXBkYXRlU2NvcGUoYmxvY2suc2NvcGUsIGluZGV4LCB2YWx1ZUlkZW50
aWZpZXIsIHZhbHVlLCBrZXlJZGVudGlmaWVyLCBrZXksIGNvbGxlY3Rpb25MZW5ndGgpOworICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgbGFz
dEJsb2NrTWFwID0gbmV4dEJsb2NrTWFwOworICAgICAgICB9KTsKKyAgICAgIH07CisgICAgfQor
ICB9OworfV07CisKK3ZhciBOR19ISURFX0NMQVNTID0gJ25nLWhpZGUnOwordmFyIE5HX0hJREVf
SU5fUFJPR1JFU1NfQ0xBU1MgPSAnbmctaGlkZS1hbmltYXRlJzsKKy8qKgorICogQG5nZG9jIGRp
cmVjdGl2ZQorICogQG5hbWUgbmdTaG93CisgKiBAbXVsdGlFbGVtZW50CisgKgorICogQGRlc2Ny
aXB0aW9uCisgKiBUaGUgYG5nU2hvd2AgZGlyZWN0aXZlIHNob3dzIG9yIGhpZGVzIHRoZSBnaXZl
biBIVE1MIGVsZW1lbnQgYmFzZWQgb24gdGhlIGV4cHJlc3Npb24KKyAqIHByb3ZpZGVkIHRvIHRo
ZSBgbmdTaG93YCBhdHRyaWJ1dGUuIFRoZSBlbGVtZW50IGlzIHNob3duIG9yIGhpZGRlbiBieSBy
ZW1vdmluZyBvciBhZGRpbmcKKyAqIHRoZSBgLm5nLWhpZGVgIENTUyBjbGFzcyBvbnRvIHRoZSBl
bGVtZW50LiBUaGUgYC5uZy1oaWRlYCBDU1MgY2xhc3MgaXMgcHJlZGVmaW5lZAorICogaW4gQW5n
dWxhckpTIGFuZCBzZXRzIHRoZSBkaXNwbGF5IHN0eWxlIHRvIG5vbmUgKHVzaW5nIGFuICFpbXBv
cnRhbnQgZmxhZykuCisgKiBGb3IgQ1NQIG1vZGUgcGxlYXNlIGFkZCBgYW5ndWxhci1jc3AuY3Nz
YCB0byB5b3VyIGh0bWwgZmlsZSAoc2VlIHtAbGluayBuZy5kaXJlY3RpdmU6bmdDc3AgbmdDc3B9
KS4KKyAqCisgKiBgYGBodG1sCisgKiA8IS0tIHdoZW4gJHNjb3BlLm15VmFsdWUgaXMgdHJ1dGh5
IChlbGVtZW50IGlzIHZpc2libGUpIC0tPgorICogPGRpdiBuZy1zaG93PSJteVZhbHVlIj48L2Rp
dj4KKyAqCisgKiA8IS0tIHdoZW4gJHNjb3BlLm15VmFsdWUgaXMgZmFsc3kgKGVsZW1lbnQgaXMg
aGlkZGVuKSAtLT4KKyAqIDxkaXYgbmctc2hvdz0ibXlWYWx1ZSIgY2xhc3M9Im5nLWhpZGUiPjwv
ZGl2PgorICogYGBgCisgKgorICogV2hlbiB0aGUgYG5nU2hvd2AgZXhwcmVzc2lvbiBldmFsdWF0
ZXMgdG8gYSBmYWxzeSB2YWx1ZSB0aGVuIHRoZSBgLm5nLWhpZGVgIENTUyBjbGFzcyBpcyBhZGRl
ZCB0byB0aGUgY2xhc3MKKyAqIGF0dHJpYnV0ZSBvbiB0aGUgZWxlbWVudCBjYXVzaW5nIGl0IHRv
IGJlY29tZSBoaWRkZW4uIFdoZW4gdHJ1dGh5LCB0aGUgYC5uZy1oaWRlYCBDU1MgY2xhc3MgaXMg
cmVtb3ZlZAorICogZnJvbSB0aGUgZWxlbWVudCBjYXVzaW5nIHRoZSBlbGVtZW50IG5vdCB0byBh
cHBlYXIgaGlkZGVuLgorICoKKyAqICMjIFdoeSBpcyAhaW1wb3J0YW50IHVzZWQ/CisgKgorICog
WW91IG1heSBiZSB3b25kZXJpbmcgd2h5ICFpbXBvcnRhbnQgaXMgdXNlZCBmb3IgdGhlIGAubmct
aGlkZWAgQ1NTIGNsYXNzLiBUaGlzIGlzIGJlY2F1c2UgdGhlIGAubmctaGlkZWAgc2VsZWN0b3IK
KyAqIGNhbiBiZSBlYXNpbHkgb3ZlcnJpZGRlbiBieSBoZWF2aWVyIHNlbGVjdG9ycy4gRm9yIGV4
YW1wbGUsIHNvbWV0aGluZyBhcyBzaW1wbGUKKyAqIGFzIGNoYW5naW5nIHRoZSBkaXNwbGF5IHN0
eWxlIG9uIGEgSFRNTCBsaXN0IGl0ZW0gd291bGQgbWFrZSBoaWRkZW4gZWxlbWVudHMgYXBwZWFy
IHZpc2libGUuCisgKiBUaGlzIGFsc28gYmVjb21lcyBhIGJpZ2dlciBpc3N1ZSB3aGVuIGRlYWxp
bmcgd2l0aCBDU1MgZnJhbWV3b3Jrcy4KKyAqCisgKiBCeSB1c2luZyAhaW1wb3J0YW50LCB0aGUg
c2hvdyBhbmQgaGlkZSBiZWhhdmlvciB3aWxsIHdvcmsgYXMgZXhwZWN0ZWQgZGVzcGl0ZSBhbnkg
Y2xhc2ggYmV0d2VlbiBDU1Mgc2VsZWN0b3IKKyAqIHNwZWNpZmljaXR5ICh3aGVuICFpbXBvcnRh
bnQgaXNuJ3QgdXNlZCB3aXRoIGFueSBjb25mbGljdGluZyBzdHlsZXMpLiBJZiBhIGRldmVsb3Bl
ciBjaG9vc2VzIHRvIG92ZXJyaWRlIHRoZQorICogc3R5bGluZyB0byBjaGFuZ2UgaG93IHRvIGhp
ZGUgYW4gZWxlbWVudCB0aGVuIGl0IGlzIGp1c3QgYSBtYXR0ZXIgb2YgdXNpbmcgIWltcG9ydGFu
dCBpbiB0aGVpciBvd24gQ1NTIGNvZGUuCisgKgorICogIyMjIE92ZXJyaWRpbmcgYC5uZy1oaWRl
YAorICoKKyAqIEJ5IGRlZmF1bHQsIHRoZSBgLm5nLWhpZGVgIGNsYXNzIHdpbGwgc3R5bGUgdGhl
IGVsZW1lbnQgd2l0aCBgZGlzcGxheTogbm9uZSFpbXBvcnRhbnRgLiBJZiB5b3Ugd2lzaCB0byBj
aGFuZ2UKKyAqIHRoZSBoaWRlIGJlaGF2aW9yIHdpdGggbmdTaG93L25nSGlkZSB0aGVuIHRoaXMg
Y2FuIGJlIGFjaGlldmVkIGJ5IHJlc3RhdGluZyB0aGUgc3R5bGVzIGZvciB0aGUgYC5uZy1oaWRl
YAorICogY2xhc3MgQ1NTLiBOb3RlIHRoYXQgdGhlIHNlbGVjdG9yIHRoYXQgbmVlZHMgdG8gYmUg
dXNlZCBpcyBhY3R1YWxseSBgLm5nLWhpZGU6bm90KC5uZy1oaWRlLWFuaW1hdGUpYCB0byBjb3Bl
CisgKiB3aXRoIGV4dHJhIGFuaW1hdGlvbiBjbGFzc2VzIHRoYXQgY2FuIGJlIGFkZGVkLgorICoK
KyAqIGBgYGNzcworICogLm5nLWhpZGU6bm90KC5uZy1oaWRlLWFuaW1hdGUpIHsKKyAqICAgLyYj
NDI7IHRoaXMgaXMganVzdCBhbm90aGVyIGZvcm0gb2YgaGlkaW5nIGFuIGVsZW1lbnQgJiM0Mjsv
CisgKiAgIGRpc3BsYXk6IGJsb2NrIWltcG9ydGFudDsKKyAqICAgcG9zaXRpb246IGFic29sdXRl
OworICogICB0b3A6IC05OTk5cHg7CisgKiAgIGxlZnQ6IC05OTk5cHg7CisgKiB9CisgKiBgYGAK
KyAqCisgKiBCeSBkZWZhdWx0IHlvdSBkb24ndCBuZWVkIHRvIG92ZXJyaWRlIGluIENTUyBhbnl0
aGluZyBhbmQgdGhlIGFuaW1hdGlvbnMgd2lsbCB3b3JrIGFyb3VuZCB0aGUgZGlzcGxheSBzdHls
ZS4KKyAqCisgKiAjIyBBIG5vdGUgYWJvdXQgYW5pbWF0aW9ucyB3aXRoIGBuZ1Nob3dgCisgKgor
ICogQW5pbWF0aW9ucyBpbiBuZ1Nob3cvbmdIaWRlIHdvcmsgd2l0aCB0aGUgc2hvdyBhbmQgaGlk
ZSBldmVudHMgdGhhdCBhcmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGRpcmVjdGl2ZSBleHByZXNzaW9u
CisgKiBpcyB0cnVlIGFuZCBmYWxzZS4gVGhpcyBzeXN0ZW0gd29ya3MgbGlrZSB0aGUgYW5pbWF0
aW9uIHN5c3RlbSBwcmVzZW50IHdpdGggbmdDbGFzcyBleGNlcHQgdGhhdAorICogeW91IG11c3Qg
YWxzbyBpbmNsdWRlIHRoZSAhaW1wb3J0YW50IGZsYWcgdG8gb3ZlcnJpZGUgdGhlIGRpc3BsYXkg
cHJvcGVydHkKKyAqIHNvIHRoYXQgeW91IGNhbiBwZXJmb3JtIGFuIGFuaW1hdGlvbiB3aGVuIHRo
ZSBlbGVtZW50IGlzIGhpZGRlbiBkdXJpbmcgdGhlIHRpbWUgb2YgdGhlIGFuaW1hdGlvbi4KKyAq
CisgKiBgYGBjc3MKKyAqIC8vCisgKiAvL2Egd29ya2luZyBleGFtcGxlIGNhbiBiZSBmb3VuZCBh
dCB0aGUgYm90dG9tIG9mIHRoaXMgcGFnZQorICogLy8KKyAqIC5teS1lbGVtZW50Lm5nLWhpZGUt
YWRkLCAubXktZWxlbWVudC5uZy1oaWRlLXJlbW92ZSB7CisgKiAgIC8mIzQyOyB0aGlzIGlzIHJl
cXVpcmVkIGFzIG9mIDEuM3ggdG8gcHJvcGVybHkKKyAqICAgICAgYXBwbHkgYWxsIHN0eWxpbmcg
aW4gYSBzaG93L2hpZGUgYW5pbWF0aW9uICYjNDI7LworICogICB0cmFuc2l0aW9uOiAwcyBsaW5l
YXIgYWxsOworICogfQorICoKKyAqIC5teS1lbGVtZW50Lm5nLWhpZGUtYWRkLWFjdGl2ZSwKKyAq
IC5teS1lbGVtZW50Lm5nLWhpZGUtcmVtb3ZlLWFjdGl2ZSB7CisgKiAgIC8mIzQyOyB0aGUgdHJh
bnNpdGlvbiBpcyBkZWZpbmVkIGluIHRoZSBhY3RpdmUgY2xhc3MgJiM0MjsvCisgKiAgIHRyYW5z
aXRpb246IDFzIGxpbmVhciBhbGw7CisgKiB9CisgKgorICogLm15LWVsZW1lbnQubmctaGlkZS1h
ZGQgeyAuLi4gfQorICogLm15LWVsZW1lbnQubmctaGlkZS1hZGQubmctaGlkZS1hZGQtYWN0aXZl
IHsgLi4uIH0KKyAqIC5teS1lbGVtZW50Lm5nLWhpZGUtcmVtb3ZlIHsgLi4uIH0KKyAqIC5teS1l
bGVtZW50Lm5nLWhpZGUtcmVtb3ZlLm5nLWhpZGUtcmVtb3ZlLWFjdGl2ZSB7IC4uLiB9CisgKiBg
YGAKKyAqCisgKiBLZWVwIGluIG1pbmQgdGhhdCwgYXMgb2YgQW5ndWxhckpTIHZlcnNpb24gMS4z
LjAtYmV0YS4xMSwgdGhlcmUgaXMgbm8gbmVlZCB0byBjaGFuZ2UgdGhlIGRpc3BsYXkKKyAqIHBy
b3BlcnR5IHRvIGJsb2NrIGR1cmluZyBhbmltYXRpb24gc3RhdGVzLS1uZ0FuaW1hdGUgd2lsbCBo
YW5kbGUgdGhlIHN0eWxlIHRvZ2dsaW5nIGF1dG9tYXRpY2FsbHkgZm9yIHlvdS4KKyAqCisgKiBA
YW5pbWF0aW9ucworICogYWRkQ2xhc3M6IGAubmctaGlkZWAgLSBoYXBwZW5zIGFmdGVyIHRoZSBg
bmdTaG93YCBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBhIHRydXRoeSB2YWx1ZSBhbmQgdGhlIGp1
c3QgYmVmb3JlIGNvbnRlbnRzIGFyZSBzZXQgdG8gdmlzaWJsZQorICogcmVtb3ZlQ2xhc3M6IGAu
bmctaGlkZWAgLSBoYXBwZW5zIGFmdGVyIHRoZSBgbmdTaG93YCBleHByZXNzaW9uIGV2YWx1YXRl
cyB0byBhIG5vbiB0cnV0aHkgdmFsdWUgYW5kIGp1c3QgYmVmb3JlIHRoZSBjb250ZW50cyBhcmUg
c2V0IHRvIGhpZGRlbgorICoKKyAqIEBlbGVtZW50IEFOWQorICogQHBhcmFtIHtleHByZXNzaW9u
fSBuZ1Nob3cgSWYgdGhlIHtAbGluayBndWlkZS9leHByZXNzaW9uIGV4cHJlc3Npb259IGlzIHRy
dXRoeQorICogICAgIHRoZW4gdGhlIGVsZW1lbnQgaXMgc2hvd24gb3IgaGlkZGVuIHJlc3BlY3Rp
dmVseS4KKyAqCisgKiBAZXhhbXBsZQorICA8ZXhhbXBsZSBtb2R1bGU9Im5nQW5pbWF0ZSIgZGVw
cz0iYW5ndWxhci1hbmltYXRlLmpzIiBhbmltYXRpb25zPSJ0cnVlIj4KKyAgICA8ZmlsZSBuYW1l
PSJpbmRleC5odG1sIj4KKyAgICAgIENsaWNrIG1lOiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5n
LW1vZGVsPSJjaGVja2VkIiBhcmlhLWxhYmVsPSJUb2dnbGUgbmdIaWRlIj48YnIvPgorICAgICAg
PGRpdj4KKyAgICAgICAgU2hvdzoKKyAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2stZWxlbWVudCBh
bmltYXRlLXNob3ciIG5nLXNob3c9ImNoZWNrZWQiPgorICAgICAgICAgIDxzcGFuIGNsYXNzPSJn
bHlwaGljb24gZ2x5cGhpY29uLXRodW1icy11cCI+PC9zcGFuPiBJIHNob3cgdXAgd2hlbiB5b3Vy
IGNoZWNrYm94IGlzIGNoZWNrZWQuCisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAg
ICA8ZGl2PgorICAgICAgICBIaWRlOgorICAgICAgICA8ZGl2IGNsYXNzPSJjaGVjay1lbGVtZW50
IGFuaW1hdGUtc2hvdyIgbmctaGlkZT0iY2hlY2tlZCI+CisgICAgICAgICAgPHNwYW4gY2xhc3M9
ImdseXBoaWNvbiBnbHlwaGljb24tdGh1bWJzLWRvd24iPjwvc3Bhbj4gSSBoaWRlIHdoZW4geW91
ciBjaGVja2JveCBpcyBjaGVja2VkLgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAg
IDwvZmlsZT4KKyAgICA8ZmlsZSBuYW1lPSJnbHlwaGljb25zLmNzcyI+CisgICAgICBAaW1wb3J0
IHVybCguLi8uLi9jb21wb25lbnRzL2Jvb3RzdHJhcC0zLjEuMS9jc3MvYm9vdHN0cmFwLmNzcyk7
CisgICAgPC9maWxlPgorICAgIDxmaWxlIG5hbWU9ImFuaW1hdGlvbnMuY3NzIj4KKyAgICAgIC5h
bmltYXRlLXNob3cgeworICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKKyAgICAgICAgb3BhY2l0
eTogMTsKKyAgICAgICAgcGFkZGluZzogMTBweDsKKyAgICAgICAgYm9yZGVyOiAxcHggc29saWQg
YmxhY2s7CisgICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOworICAgICAgfQorCisgICAgICAuYW5p
bWF0ZS1zaG93Lm5nLWhpZGUtYWRkLm5nLWhpZGUtYWRkLWFjdGl2ZSwKKyAgICAgIC5hbmltYXRl
LXNob3cubmctaGlkZS1yZW1vdmUubmctaGlkZS1yZW1vdmUtYWN0aXZlIHsKKyAgICAgICAgLXdl
YmtpdC10cmFuc2l0aW9uOiBhbGwgbGluZWFyIDAuNXM7CisgICAgICAgIHRyYW5zaXRpb246IGFs
bCBsaW5lYXIgMC41czsKKyAgICAgIH0KKworICAgICAgLmFuaW1hdGUtc2hvdy5uZy1oaWRlIHsK
KyAgICAgICAgbGluZS1oZWlnaHQ6IDA7CisgICAgICAgIG9wYWNpdHk6IDA7CisgICAgICAgIHBh
ZGRpbmc6IDAgMTBweDsKKyAgICAgIH0KKworICAgICAgLmNoZWNrLWVsZW1lbnQgeworICAgICAg
ICBwYWRkaW5nOiAxMHB4OworICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjazsKKyAgICAg
ICAgYmFja2dyb3VuZDogd2hpdGU7CisgICAgICB9CisgICAgPC9maWxlPgorICAgIDxmaWxlIG5h
bWU9InByb3RyYWN0b3IuanMiIHR5cGU9InByb3RyYWN0b3IiPgorICAgICAgdmFyIHRodW1ic1Vw
ID0gZWxlbWVudChieS5jc3MoJ3NwYW4uZ2x5cGhpY29uLXRodW1icy11cCcpKTsKKyAgICAgIHZh
ciB0aHVtYnNEb3duID0gZWxlbWVudChieS5jc3MoJ3NwYW4uZ2x5cGhpY29uLXRodW1icy1kb3du
JykpOworCisgICAgICBpdCgnc2hvdWxkIGNoZWNrIG5nLXNob3cgLyBuZy1oaWRlJywgZnVuY3Rp
b24oKSB7CisgICAgICAgIGV4cGVjdCh0aHVtYnNVcC5pc0Rpc3BsYXllZCgpKS50b0JlRmFsc3ko
KTsKKyAgICAgICAgZXhwZWN0KHRodW1ic0Rvd24uaXNEaXNwbGF5ZWQoKSkudG9CZVRydXRoeSgp
OworCisgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ2NoZWNrZWQnKSkuY2xpY2soKTsKKworICAg
ICAgICBleHBlY3QodGh1bWJzVXAuaXNEaXNwbGF5ZWQoKSkudG9CZVRydXRoeSgpOworICAgICAg
ICBleHBlY3QodGh1bWJzRG93bi5pc0Rpc3BsYXllZCgpKS50b0JlRmFsc3koKTsKKyAgICAgIH0p
OworICAgIDwvZmlsZT4KKyAgPC9leGFtcGxlPgorICovCit2YXIgbmdTaG93RGlyZWN0aXZlID0g
WyckYW5pbWF0ZScsIGZ1bmN0aW9uKCRhbmltYXRlKSB7CisgIHJldHVybiB7CisgICAgcmVzdHJp
Y3Q6ICdBJywKKyAgICBtdWx0aUVsZW1lbnQ6IHRydWUsCisgICAgbGluazogZnVuY3Rpb24oc2Nv
cGUsIGVsZW1lbnQsIGF0dHIpIHsKKyAgICAgIHNjb3BlLiR3YXRjaChhdHRyLm5nU2hvdywgZnVu
Y3Rpb24gbmdTaG93V2F0Y2hBY3Rpb24odmFsdWUpIHsKKyAgICAgICAgLy8gd2UncmUgYWRkaW5n
IGEgdGVtcG9yYXJ5LCBhbmltYXRpb24tc3BlY2lmaWMgY2xhc3MgZm9yIG5nLWhpZGUgc2luY2Ug
dGhpcyB3YXkKKyAgICAgICAgLy8gd2UgY2FuIGNvbnRyb2wgd2hlbiB0aGUgZWxlbWVudCBpcyBh
Y3R1YWxseSBkaXNwbGF5ZWQgb24gc2NyZWVuIHdpdGhvdXQgaGF2aW5nCisgICAgICAgIC8vIHRv
IGhhdmUgYSBnbG9iYWwvZ3JlZWR5IENTUyBzZWxlY3RvciB0aGF0IGJyZWFrcyB3aGVuIG90aGVy
IGFuaW1hdGlvbnMgYXJlIHJ1bi4KKyAgICAgICAgLy8gUmVhZDogaHR0cHM6Ly9naXRodWIuY29t
L2FuZ3VsYXIvYW5ndWxhci5qcy9pc3N1ZXMvOTEwMyNpc3N1ZWNvbW1lbnQtNTgzMzU4NDUKKyAg
ICAgICAgJGFuaW1hdGVbdmFsdWUgPyAncmVtb3ZlQ2xhc3MnIDogJ2FkZENsYXNzJ10oZWxlbWVu
dCwgTkdfSElERV9DTEFTUywgeworICAgICAgICAgIHRlbXBDbGFzc2VzOiBOR19ISURFX0lOX1BS
T0dSRVNTX0NMQVNTCisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgfQorICB9OworfV07CisK
KworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBuZ0hpZGUKKyAqIEBtdWx0aUVs
ZW1lbnQKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFRoZSBgbmdIaWRlYCBkaXJlY3RpdmUgc2hv
d3Mgb3IgaGlkZXMgdGhlIGdpdmVuIEhUTUwgZWxlbWVudCBiYXNlZCBvbiB0aGUgZXhwcmVzc2lv
bgorICogcHJvdmlkZWQgdG8gdGhlIGBuZ0hpZGVgIGF0dHJpYnV0ZS4gVGhlIGVsZW1lbnQgaXMg
c2hvd24gb3IgaGlkZGVuIGJ5IHJlbW92aW5nIG9yIGFkZGluZworICogdGhlIGBuZy1oaWRlYCBD
U1MgY2xhc3Mgb250byB0aGUgZWxlbWVudC4gVGhlIGAubmctaGlkZWAgQ1NTIGNsYXNzIGlzIHBy
ZWRlZmluZWQKKyAqIGluIEFuZ3VsYXJKUyBhbmQgc2V0cyB0aGUgZGlzcGxheSBzdHlsZSB0byBu
b25lICh1c2luZyBhbiAhaW1wb3J0YW50IGZsYWcpLgorICogRm9yIENTUCBtb2RlIHBsZWFzZSBh
ZGQgYGFuZ3VsYXItY3NwLmNzc2AgdG8geW91ciBodG1sIGZpbGUgKHNlZSB7QGxpbmsgbmcuZGly
ZWN0aXZlOm5nQ3NwIG5nQ3NwfSkuCisgKgorICogYGBgaHRtbAorICogPCEtLSB3aGVuICRzY29w
ZS5teVZhbHVlIGlzIHRydXRoeSAoZWxlbWVudCBpcyBoaWRkZW4pIC0tPgorICogPGRpdiBuZy1o
aWRlPSJteVZhbHVlIiBjbGFzcz0ibmctaGlkZSI+PC9kaXY+CisgKgorICogPCEtLSB3aGVuICRz
Y29wZS5teVZhbHVlIGlzIGZhbHN5IChlbGVtZW50IGlzIHZpc2libGUpIC0tPgorICogPGRpdiBu
Zy1oaWRlPSJteVZhbHVlIj48L2Rpdj4KKyAqIGBgYAorICoKKyAqIFdoZW4gdGhlIGBuZ0hpZGVg
IGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGEgdHJ1dGh5IHZhbHVlIHRoZW4gdGhlIGAubmctaGlk
ZWAgQ1NTIGNsYXNzIGlzIGFkZGVkIHRvIHRoZSBjbGFzcworICogYXR0cmlidXRlIG9uIHRoZSBl
bGVtZW50IGNhdXNpbmcgaXQgdG8gYmVjb21lIGhpZGRlbi4gV2hlbiBmYWxzeSwgdGhlIGAubmct
aGlkZWAgQ1NTIGNsYXNzIGlzIHJlbW92ZWQKKyAqIGZyb20gdGhlIGVsZW1lbnQgY2F1c2luZyB0
aGUgZWxlbWVudCBub3QgdG8gYXBwZWFyIGhpZGRlbi4KKyAqCisgKiAjIyBXaHkgaXMgIWltcG9y
dGFudCB1c2VkPworICoKKyAqIFlvdSBtYXkgYmUgd29uZGVyaW5nIHdoeSAhaW1wb3J0YW50IGlz
IHVzZWQgZm9yIHRoZSBgLm5nLWhpZGVgIENTUyBjbGFzcy4gVGhpcyBpcyBiZWNhdXNlIHRoZSBg
Lm5nLWhpZGVgIHNlbGVjdG9yCisgKiBjYW4gYmUgZWFzaWx5IG92ZXJyaWRkZW4gYnkgaGVhdmll
ciBzZWxlY3RvcnMuIEZvciBleGFtcGxlLCBzb21ldGhpbmcgYXMgc2ltcGxlCisgKiBhcyBjaGFu
Z2luZyB0aGUgZGlzcGxheSBzdHlsZSBvbiBhIEhUTUwgbGlzdCBpdGVtIHdvdWxkIG1ha2UgaGlk
ZGVuIGVsZW1lbnRzIGFwcGVhciB2aXNpYmxlLgorICogVGhpcyBhbHNvIGJlY29tZXMgYSBiaWdn
ZXIgaXNzdWUgd2hlbiBkZWFsaW5nIHdpdGggQ1NTIGZyYW1ld29ya3MuCisgKgorICogQnkgdXNp
bmcgIWltcG9ydGFudCwgdGhlIHNob3cgYW5kIGhpZGUgYmVoYXZpb3Igd2lsbCB3b3JrIGFzIGV4
cGVjdGVkIGRlc3BpdGUgYW55IGNsYXNoIGJldHdlZW4gQ1NTIHNlbGVjdG9yCisgKiBzcGVjaWZp
Y2l0eSAod2hlbiAhaW1wb3J0YW50IGlzbid0IHVzZWQgd2l0aCBhbnkgY29uZmxpY3Rpbmcgc3R5
bGVzKS4gSWYgYSBkZXZlbG9wZXIgY2hvb3NlcyB0byBvdmVycmlkZSB0aGUKKyAqIHN0eWxpbmcg
dG8gY2hhbmdlIGhvdyB0byBoaWRlIGFuIGVsZW1lbnQgdGhlbiBpdCBpcyBqdXN0IGEgbWF0dGVy
IG9mIHVzaW5nICFpbXBvcnRhbnQgaW4gdGhlaXIgb3duIENTUyBjb2RlLgorICoKKyAqICMjIyBP
dmVycmlkaW5nIGAubmctaGlkZWAKKyAqCisgKiBCeSBkZWZhdWx0LCB0aGUgYC5uZy1oaWRlYCBj
bGFzcyB3aWxsIHN0eWxlIHRoZSBlbGVtZW50IHdpdGggYGRpc3BsYXk6IG5vbmUhaW1wb3J0YW50
YC4gSWYgeW91IHdpc2ggdG8gY2hhbmdlCisgKiB0aGUgaGlkZSBiZWhhdmlvciB3aXRoIG5nU2hv
dy9uZ0hpZGUgdGhlbiB0aGlzIGNhbiBiZSBhY2hpZXZlZCBieSByZXN0YXRpbmcgdGhlIHN0eWxl
cyBmb3IgdGhlIGAubmctaGlkZWAKKyAqIGNsYXNzIGluIENTUzoKKyAqCisgKiBgYGBjc3MKKyAq
IC5uZy1oaWRlIHsKKyAqICAgLyYjNDI7IHRoaXMgaXMganVzdCBhbm90aGVyIGZvcm0gb2YgaGlk
aW5nIGFuIGVsZW1lbnQgJiM0MjsvCisgKiAgIGRpc3BsYXk6IGJsb2NrIWltcG9ydGFudDsKKyAq
ICAgcG9zaXRpb246IGFic29sdXRlOworICogICB0b3A6IC05OTk5cHg7CisgKiAgIGxlZnQ6IC05
OTk5cHg7CisgKiB9CisgKiBgYGAKKyAqCisgKiBCeSBkZWZhdWx0IHlvdSBkb24ndCBuZWVkIHRv
IG92ZXJyaWRlIGluIENTUyBhbnl0aGluZyBhbmQgdGhlIGFuaW1hdGlvbnMgd2lsbCB3b3JrIGFy
b3VuZCB0aGUgZGlzcGxheSBzdHlsZS4KKyAqCisgKiAjIyBBIG5vdGUgYWJvdXQgYW5pbWF0aW9u
cyB3aXRoIGBuZ0hpZGVgCisgKgorICogQW5pbWF0aW9ucyBpbiBuZ1Nob3cvbmdIaWRlIHdvcmsg
d2l0aCB0aGUgc2hvdyBhbmQgaGlkZSBldmVudHMgdGhhdCBhcmUgdHJpZ2dlcmVkIHdoZW4gdGhl
IGRpcmVjdGl2ZSBleHByZXNzaW9uCisgKiBpcyB0cnVlIGFuZCBmYWxzZS4gVGhpcyBzeXN0ZW0g
d29ya3MgbGlrZSB0aGUgYW5pbWF0aW9uIHN5c3RlbSBwcmVzZW50IHdpdGggbmdDbGFzcywgZXhj
ZXB0IHRoYXQgdGhlIGAubmctaGlkZWAKKyAqIENTUyBjbGFzcyBpcyBhZGRlZCBhbmQgcmVtb3Zl
ZCBmb3IgeW91IGluc3RlYWQgb2YgeW91ciBvd24gQ1NTIGNsYXNzLgorICoKKyAqIGBgYGNzcwor
ICogLy8KKyAqIC8vYSB3b3JraW5nIGV4YW1wbGUgY2FuIGJlIGZvdW5kIGF0IHRoZSBib3R0b20g
b2YgdGhpcyBwYWdlCisgKiAvLworICogLm15LWVsZW1lbnQubmctaGlkZS1hZGQsIC5teS1lbGVt
ZW50Lm5nLWhpZGUtcmVtb3ZlIHsKKyAqICAgdHJhbnNpdGlvbjogMC41cyBsaW5lYXIgYWxsOwor
ICogfQorICoKKyAqIC5teS1lbGVtZW50Lm5nLWhpZGUtYWRkIHsgLi4uIH0KKyAqIC5teS1lbGVt
ZW50Lm5nLWhpZGUtYWRkLm5nLWhpZGUtYWRkLWFjdGl2ZSB7IC4uLiB9CisgKiAubXktZWxlbWVu
dC5uZy1oaWRlLXJlbW92ZSB7IC4uLiB9CisgKiAubXktZWxlbWVudC5uZy1oaWRlLXJlbW92ZS5u
Zy1oaWRlLXJlbW92ZS1hY3RpdmUgeyAuLi4gfQorICogYGBgCisgKgorICogS2VlcCBpbiBtaW5k
IHRoYXQsIGFzIG9mIEFuZ3VsYXJKUyB2ZXJzaW9uIDEuMy4wLWJldGEuMTEsIHRoZXJlIGlzIG5v
IG5lZWQgdG8gY2hhbmdlIHRoZSBkaXNwbGF5CisgKiBwcm9wZXJ0eSB0byBibG9jayBkdXJpbmcg
YW5pbWF0aW9uIHN0YXRlcy0tbmdBbmltYXRlIHdpbGwgaGFuZGxlIHRoZSBzdHlsZSB0b2dnbGlu
ZyBhdXRvbWF0aWNhbGx5IGZvciB5b3UuCisgKgorICogQGFuaW1hdGlvbnMKKyAqIHJlbW92ZUNs
YXNzOiBgLm5nLWhpZGVgIC0gaGFwcGVucyBhZnRlciB0aGUgYG5nSGlkZWAgZXhwcmVzc2lvbiBl
dmFsdWF0ZXMgdG8gYSB0cnV0aHkgdmFsdWUgYW5kIGp1c3QgYmVmb3JlIHRoZSBjb250ZW50cyBh
cmUgc2V0IHRvIGhpZGRlbgorICogYWRkQ2xhc3M6IGAubmctaGlkZWAgLSBoYXBwZW5zIGFmdGVy
IHRoZSBgbmdIaWRlYCBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBhIG5vbiB0cnV0aHkgdmFsdWUg
YW5kIGp1c3QgYmVmb3JlIHRoZSBjb250ZW50cyBhcmUgc2V0IHRvIHZpc2libGUKKyAqCisgKiBA
ZWxlbWVudCBBTlkKKyAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdIaWRlIElmIHRoZSB7QGxpbmsg
Z3VpZGUvZXhwcmVzc2lvbiBleHByZXNzaW9ufSBpcyB0cnV0aHkgdGhlbgorICogICAgIHRoZSBl
bGVtZW50IGlzIHNob3duIG9yIGhpZGRlbiByZXNwZWN0aXZlbHkuCisgKgorICogQGV4YW1wbGUK
KyAgPGV4YW1wbGUgbW9kdWxlPSJuZ0FuaW1hdGUiIGRlcHM9ImFuZ3VsYXItYW5pbWF0ZS5qcyIg
YW5pbWF0aW9ucz0idHJ1ZSI+CisgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAgICBD
bGljayBtZTogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuZy1tb2RlbD0iY2hlY2tlZCIgYXJpYS1s
YWJlbD0iVG9nZ2xlIG5nU2hvdyI+PGJyLz4KKyAgICAgIDxkaXY+CisgICAgICAgIFNob3c6Cisg
ICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrLWVsZW1lbnQgYW5pbWF0ZS1oaWRlIiBuZy1zaG93PSJj
aGVja2VkIj4KKyAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi10aHVt
YnMtdXAiPjwvc3Bhbj4gSSBzaG93IHVwIHdoZW4geW91ciBjaGVja2JveCBpcyBjaGVja2VkLgor
ICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgICAgPGRpdj4KKyAgICAgICAgSGlkZToK
KyAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2stZWxlbWVudCBhbmltYXRlLWhpZGUiIG5nLWhpZGU9
ImNoZWNrZWQiPgorICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXRo
dW1icy1kb3duIj48L3NwYW4+IEkgaGlkZSB3aGVuIHlvdXIgY2hlY2tib3ggaXMgY2hlY2tlZC4K
KyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8L2ZpbGU+CisgICAgPGZpbGUgbmFt
ZT0iZ2x5cGhpY29ucy5jc3MiPgorICAgICAgQGltcG9ydCB1cmwoLi4vLi4vY29tcG9uZW50cy9i
b290c3RyYXAtMy4xLjEvY3NzL2Jvb3RzdHJhcC5jc3MpOworICAgIDwvZmlsZT4KKyAgICA8Zmls
ZSBuYW1lPSJhbmltYXRpb25zLmNzcyI+CisgICAgICAuYW5pbWF0ZS1oaWRlIHsKKyAgICAgICAg
LXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgbGluZWFyIDAuNXM7CisgICAgICAgIHRyYW5zaXRpb246
IGFsbCBsaW5lYXIgMC41czsKKyAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CisgICAgICAgIG9w
YWNpdHk6IDE7CisgICAgICAgIHBhZGRpbmc6IDEwcHg7CisgICAgICAgIGJvcmRlcjogMXB4IHNv
bGlkIGJsYWNrOworICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKKyAgICAgIH0KKworICAgICAg
LmFuaW1hdGUtaGlkZS5uZy1oaWRlIHsKKyAgICAgICAgbGluZS1oZWlnaHQ6IDA7CisgICAgICAg
IG9wYWNpdHk6IDA7CisgICAgICAgIHBhZGRpbmc6IDAgMTBweDsKKyAgICAgIH0KKworICAgICAg
LmNoZWNrLWVsZW1lbnQgeworICAgICAgICBwYWRkaW5nOiAxMHB4OworICAgICAgICBib3JkZXI6
IDFweCBzb2xpZCBibGFjazsKKyAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CisgICAgICB9Cisg
ICAgPC9maWxlPgorICAgIDxmaWxlIG5hbWU9InByb3RyYWN0b3IuanMiIHR5cGU9InByb3RyYWN0
b3IiPgorICAgICAgdmFyIHRodW1ic1VwID0gZWxlbWVudChieS5jc3MoJ3NwYW4uZ2x5cGhpY29u
LXRodW1icy11cCcpKTsKKyAgICAgIHZhciB0aHVtYnNEb3duID0gZWxlbWVudChieS5jc3MoJ3Nw
YW4uZ2x5cGhpY29uLXRodW1icy1kb3duJykpOworCisgICAgICBpdCgnc2hvdWxkIGNoZWNrIG5n
LXNob3cgLyBuZy1oaWRlJywgZnVuY3Rpb24oKSB7CisgICAgICAgIGV4cGVjdCh0aHVtYnNVcC5p
c0Rpc3BsYXllZCgpKS50b0JlRmFsc3koKTsKKyAgICAgICAgZXhwZWN0KHRodW1ic0Rvd24uaXNE
aXNwbGF5ZWQoKSkudG9CZVRydXRoeSgpOworCisgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ2No
ZWNrZWQnKSkuY2xpY2soKTsKKworICAgICAgICBleHBlY3QodGh1bWJzVXAuaXNEaXNwbGF5ZWQo
KSkudG9CZVRydXRoeSgpOworICAgICAgICBleHBlY3QodGh1bWJzRG93bi5pc0Rpc3BsYXllZCgp
KS50b0JlRmFsc3koKTsKKyAgICAgIH0pOworICAgIDwvZmlsZT4KKyAgPC9leGFtcGxlPgorICov
Cit2YXIgbmdIaWRlRGlyZWN0aXZlID0gWyckYW5pbWF0ZScsIGZ1bmN0aW9uKCRhbmltYXRlKSB7
CisgIHJldHVybiB7CisgICAgcmVzdHJpY3Q6ICdBJywKKyAgICBtdWx0aUVsZW1lbnQ6IHRydWUs
CisgICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHIpIHsKKyAgICAgIHNjb3Bl
LiR3YXRjaChhdHRyLm5nSGlkZSwgZnVuY3Rpb24gbmdIaWRlV2F0Y2hBY3Rpb24odmFsdWUpIHsK
KyAgICAgICAgLy8gVGhlIGNvbW1lbnQgaW5zaWRlIG9mIHRoZSBuZ1Nob3dEaXJlY3RpdmUgZXhw
bGFpbnMgd2h5IHdlIGFkZCBhbmQKKyAgICAgICAgLy8gcmVtb3ZlIGEgdGVtcG9yYXJ5IGNsYXNz
IGZvciB0aGUgc2hvdy9oaWRlIGFuaW1hdGlvbgorICAgICAgICAkYW5pbWF0ZVt2YWx1ZSA/ICdh
ZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnXShlbGVtZW50LE5HX0hJREVfQ0xBU1MsIHsKKyAgICAg
ICAgICB0ZW1wQ2xhc3NlczogTkdfSElERV9JTl9QUk9HUkVTU19DTEFTUworICAgICAgICB9KTsK
KyAgICAgIH0pOworICAgIH0KKyAgfTsKK31dOworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUK
KyAqIEBuYW1lIG5nU3R5bGUKKyAqIEByZXN0cmljdCBBQworICoKKyAqIEBkZXNjcmlwdGlvbgor
ICogVGhlIGBuZ1N0eWxlYCBkaXJlY3RpdmUgYWxsb3dzIHlvdSB0byBzZXQgQ1NTIHN0eWxlIG9u
IGFuIEhUTUwgZWxlbWVudCBjb25kaXRpb25hbGx5LgorICoKKyAqIEBlbGVtZW50IEFOWQorICog
QHBhcmFtIHtleHByZXNzaW9ufSBuZ1N0eWxlCisgKgorICoge0BsaW5rIGd1aWRlL2V4cHJlc3Np
b24gRXhwcmVzc2lvbn0gd2hpY2ggZXZhbHMgdG8gYW4KKyAqIG9iamVjdCB3aG9zZSBrZXlzIGFy
ZSBDU1Mgc3R5bGUgbmFtZXMgYW5kIHZhbHVlcyBhcmUgY29ycmVzcG9uZGluZyB2YWx1ZXMgZm9y
IHRob3NlIENTUworICoga2V5cy4KKyAqCisgKiBTaW5jZSBzb21lIENTUyBzdHlsZSBuYW1lcyBh
cmUgbm90IHZhbGlkIGtleXMgZm9yIGFuIG9iamVjdCwgdGhleSBtdXN0IGJlIHF1b3RlZC4KKyAq
IFNlZSB0aGUgJ2JhY2tncm91bmQtY29sb3InIHN0eWxlIGluIHRoZSBleGFtcGxlIGJlbG93Lgor
ICoKKyAqIEBleGFtcGxlCisgICA8ZXhhbXBsZT4KKyAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRt
bCI+CisgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSJzZXQgY29sb3IiIG5nLWNs
aWNrPSJteVN0eWxlPXtjb2xvcjoncmVkJ30iPgorICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9u
IiB2YWx1ZT0ic2V0IGJhY2tncm91bmQiIG5nLWNsaWNrPSJteVN0eWxlPXsnYmFja2dyb3VuZC1j
b2xvcic6J2JsdWUnfSI+CisgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSJjbGVh
ciIgbmctY2xpY2s9Im15U3R5bGU9e30iPgorICAgICAgICA8YnIvPgorICAgICAgICA8c3BhbiBu
Zy1zdHlsZT0ibXlTdHlsZSI+U2FtcGxlIFRleHQ8L3NwYW4+CisgICAgICAgIDxwcmU+bXlTdHls
ZT17e215U3R5bGV9fTwvcHJlPgorICAgICA8L2ZpbGU+CisgICAgIDxmaWxlIG5hbWU9InN0eWxl
LmNzcyI+CisgICAgICAgc3BhbiB7CisgICAgICAgICBjb2xvcjogYmxhY2s7CisgICAgICAgfQor
ICAgICA8L2ZpbGU+CisgICAgIDxmaWxlIG5hbWU9InByb3RyYWN0b3IuanMiIHR5cGU9InByb3Ry
YWN0b3IiPgorICAgICAgIHZhciBjb2xvclNwYW4gPSBlbGVtZW50KGJ5LmNzcygnc3BhbicpKTsK
KworICAgICAgIGl0KCdzaG91bGQgY2hlY2sgbmctc3R5bGUnLCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgIGV4cGVjdChjb2xvclNwYW4uZ2V0Q3NzVmFsdWUoJ2NvbG9yJykpLnRvQmUoJ3JnYmEoMCwg
MCwgMCwgMSknKTsKKyAgICAgICAgIGVsZW1lbnQoYnkuY3NzKCdpbnB1dFt2YWx1ZT1cJ3NldCBj
b2xvclwnXScpKS5jbGljaygpOworICAgICAgICAgZXhwZWN0KGNvbG9yU3Bhbi5nZXRDc3NWYWx1
ZSgnY29sb3InKSkudG9CZSgncmdiYSgyNTUsIDAsIDAsIDEpJyk7CisgICAgICAgICBlbGVtZW50
KGJ5LmNzcygnaW5wdXRbdmFsdWU9Y2xlYXJdJykpLmNsaWNrKCk7CisgICAgICAgICBleHBlY3Qo
Y29sb3JTcGFuLmdldENzc1ZhbHVlKCdjb2xvcicpKS50b0JlKCdyZ2JhKDAsIDAsIDAsIDEpJyk7
CisgICAgICAgfSk7CisgICAgIDwvZmlsZT4KKyAgIDwvZXhhbXBsZT4KKyAqLwordmFyIG5nU3R5
bGVEaXJlY3RpdmUgPSBuZ0RpcmVjdGl2ZShmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cikg
eworICBzY29wZS4kd2F0Y2goYXR0ci5uZ1N0eWxlLCBmdW5jdGlvbiBuZ1N0eWxlV2F0Y2hBY3Rp
b24obmV3U3R5bGVzLCBvbGRTdHlsZXMpIHsKKyAgICBpZiAob2xkU3R5bGVzICYmIChuZXdTdHls
ZXMgIT09IG9sZFN0eWxlcykpIHsKKyAgICAgIGZvckVhY2gob2xkU3R5bGVzLCBmdW5jdGlvbih2
YWwsIHN0eWxlKSB7IGVsZW1lbnQuY3NzKHN0eWxlLCAnJyk7fSk7CisgICAgfQorICAgIGlmIChu
ZXdTdHlsZXMpIGVsZW1lbnQuY3NzKG5ld1N0eWxlcyk7CisgIH0sIHRydWUpOworfSk7CisKKy8q
KgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgbmdTd2l0Y2gKKyAqIEByZXN0cmljdCBF
QQorICoKKyAqIEBkZXNjcmlwdGlvbgorICogVGhlIGBuZ1N3aXRjaGAgZGlyZWN0aXZlIGlzIHVz
ZWQgdG8gY29uZGl0aW9uYWxseSBzd2FwIERPTSBzdHJ1Y3R1cmUgb24geW91ciB0ZW1wbGF0ZSBi
YXNlZCBvbiBhIHNjb3BlIGV4cHJlc3Npb24uCisgKiBFbGVtZW50cyB3aXRoaW4gYG5nU3dpdGNo
YCBidXQgd2l0aG91dCBgbmdTd2l0Y2hXaGVuYCBvciBgbmdTd2l0Y2hEZWZhdWx0YCBkaXJlY3Rp
dmVzIHdpbGwgYmUgcHJlc2VydmVkIGF0IHRoZSBsb2NhdGlvbgorICogYXMgc3BlY2lmaWVkIGlu
IHRoZSB0ZW1wbGF0ZS4KKyAqCisgKiBUaGUgZGlyZWN0aXZlIGl0c2VsZiB3b3JrcyBzaW1pbGFy
IHRvIG5nSW5jbHVkZSwgaG93ZXZlciwgaW5zdGVhZCBvZiBkb3dubG9hZGluZyB0ZW1wbGF0ZSBj
b2RlIChvciBsb2FkaW5nIGl0CisgKiBmcm9tIHRoZSB0ZW1wbGF0ZSBjYWNoZSksIGBuZ1N3aXRj
aGAgc2ltcGx5IGNob29zZXMgb25lIG9mIHRoZSBuZXN0ZWQgZWxlbWVudHMgYW5kIG1ha2VzIGl0
IHZpc2libGUgYmFzZWQgb24gd2hpY2ggZWxlbWVudAorICogbWF0Y2hlcyB0aGUgdmFsdWUgb2J0
YWluZWQgZnJvbSB0aGUgZXZhbHVhdGVkIGV4cHJlc3Npb24uIEluIG90aGVyIHdvcmRzLCB5b3Ug
ZGVmaW5lIGEgY29udGFpbmVyIGVsZW1lbnQKKyAqICh3aGVyZSB5b3UgcGxhY2UgdGhlIGRpcmVj
dGl2ZSksIHBsYWNlIGFuIGV4cHJlc3Npb24gb24gdGhlICoqYG9uPSIuLi4iYCBhdHRyaWJ1dGUq
KgorICogKG9yIHRoZSAqKmBuZy1zd2l0Y2g9Ii4uLiJgIGF0dHJpYnV0ZSoqKSwgZGVmaW5lIGFu
eSBpbm5lciBlbGVtZW50cyBpbnNpZGUgb2YgdGhlIGRpcmVjdGl2ZSBhbmQgcGxhY2UKKyAqIGEg
d2hlbiBhdHRyaWJ1dGUgcGVyIGVsZW1lbnQuIFRoZSB3aGVuIGF0dHJpYnV0ZSBpcyB1c2VkIHRv
IGluZm9ybSBuZ1N3aXRjaCB3aGljaCBlbGVtZW50IHRvIGRpc3BsYXkgd2hlbiB0aGUgb24KKyAq
IGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkLiBJZiBhIG1hdGNoaW5nIGV4cHJlc3Npb24gaXMgbm90
IGZvdW5kIHZpYSBhIHdoZW4gYXR0cmlidXRlIHRoZW4gYW4gZWxlbWVudCB3aXRoIHRoZSBkZWZh
dWx0CisgKiBhdHRyaWJ1dGUgaXMgZGlzcGxheWVkLgorICoKKyAqIDxkaXYgY2xhc3M9ImFsZXJ0
IGFsZXJ0LWluZm8iPgorICogQmUgYXdhcmUgdGhhdCB0aGUgYXR0cmlidXRlIHZhbHVlcyB0byBt
YXRjaCBhZ2FpbnN0IGNhbm5vdCBiZSBleHByZXNzaW9ucy4gVGhleSBhcmUgaW50ZXJwcmV0ZWQK
KyAqIGFzIGxpdGVyYWwgc3RyaW5nIHZhbHVlcyB0byBtYXRjaCBhZ2FpbnN0LgorICogRm9yIGV4
YW1wbGUsICoqYG5nLXN3aXRjaC13aGVuPSJzb21lVmFsImAqKiB3aWxsIG1hdGNoIGFnYWluc3Qg
dGhlIHN0cmluZyBgInNvbWVWYWwiYCBub3QgYWdhaW5zdCB0aGUKKyAqIHZhbHVlIG9mIHRoZSBl
eHByZXNzaW9uIGAkc2NvcGUuc29tZVZhbGAuCisgKiA8L2Rpdj4KKworICogQGFuaW1hdGlvbnMK
KyAqIGVudGVyIC0gaGFwcGVucyBhZnRlciB0aGUgbmdTd2l0Y2ggY29udGVudHMgY2hhbmdlIGFu
ZCB0aGUgbWF0Y2hlZCBjaGlsZCBlbGVtZW50IGlzIHBsYWNlZCBpbnNpZGUgdGhlIGNvbnRhaW5l
cgorICogbGVhdmUgLSBoYXBwZW5zIGp1c3QgYWZ0ZXIgdGhlIG5nU3dpdGNoIGNvbnRlbnRzIGNo
YW5nZSBhbmQganVzdCBiZWZvcmUgdGhlIGZvcm1lciBjb250ZW50cyBhcmUgcmVtb3ZlZCBmcm9t
IHRoZSBET00KKyAqCisgKiBAdXNhZ2UKKyAqCisgKiBgYGAKKyAqIDxBTlkgbmctc3dpdGNoPSJl
eHByZXNzaW9uIj4KKyAqICAgPEFOWSBuZy1zd2l0Y2gtd2hlbj0ibWF0Y2hWYWx1ZTEiPi4uLjwv
QU5ZPgorICogICA8QU5ZIG5nLXN3aXRjaC13aGVuPSJtYXRjaFZhbHVlMiI+Li4uPC9BTlk+Cisg
KiAgIDxBTlkgbmctc3dpdGNoLWRlZmF1bHQ+Li4uPC9BTlk+CisgKiA8L0FOWT4KKyAqIGBgYAor
ICoKKyAqCisgKiBAc2NvcGUKKyAqIEBwcmlvcml0eSAxMjAwCisgKiBAcGFyYW0geyp9IG5nU3dp
dGNofG9uIGV4cHJlc3Npb24gdG8gbWF0Y2ggYWdhaW5zdCA8Y29kZT5uZy1zd2l0Y2gtd2hlbjwv
Y29kZT4uCisgKiBPbiBjaGlsZCBlbGVtZW50cyBhZGQ6CisgKgorICogKiBgbmdTd2l0Y2hXaGVu
YDogdGhlIGNhc2Ugc3RhdGVtZW50IHRvIG1hdGNoIGFnYWluc3QuIElmIG1hdGNoIHRoZW4gdGhp
cworICogICBjYXNlIHdpbGwgYmUgZGlzcGxheWVkLiBJZiB0aGUgc2FtZSBtYXRjaCBhcHBlYXJz
IG11bHRpcGxlIHRpbWVzLCBhbGwgdGhlCisgKiAgIGVsZW1lbnRzIHdpbGwgYmUgZGlzcGxheWVk
LgorICogKiBgbmdTd2l0Y2hEZWZhdWx0YDogdGhlIGRlZmF1bHQgY2FzZSB3aGVuIG5vIG90aGVy
IGNhc2UgbWF0Y2guIElmIHRoZXJlCisgKiAgIGFyZSBtdWx0aXBsZSBkZWZhdWx0IGNhc2VzLCBh
bGwgb2YgdGhlbSB3aWxsIGJlIGRpc3BsYXllZCB3aGVuIG5vIG90aGVyCisgKiAgIGNhc2UgbWF0
Y2guCisgKgorICoKKyAqIEBleGFtcGxlCisgIDxleGFtcGxlIG1vZHVsZT0ic3dpdGNoRXhhbXBs
ZSIgZGVwcz0iYW5ndWxhci1hbmltYXRlLmpzIiBhbmltYXRpb25zPSJ0cnVlIj4KKyAgICA8Zmls
ZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgIDxkaXYgbmctY29udHJvbGxlcj0iRXhhbXBsZUNv
bnRyb2xsZXIiPgorICAgICAgICA8c2VsZWN0IG5nLW1vZGVsPSJzZWxlY3Rpb24iIG5nLW9wdGlv
bnM9Iml0ZW0gZm9yIGl0ZW0gaW4gaXRlbXMiPgorICAgICAgICA8L3NlbGVjdD4KKyAgICAgICAg
PGNvZGU+c2VsZWN0aW9uPXt7c2VsZWN0aW9ufX08L2NvZGU+CisgICAgICAgIDxoci8+CisgICAg
ICAgIDxkaXYgY2xhc3M9ImFuaW1hdGUtc3dpdGNoLWNvbnRhaW5lciIKKyAgICAgICAgICBuZy1z
d2l0Y2ggb249InNlbGVjdGlvbiI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbmltYXRlLXN3
aXRjaCIgbmctc3dpdGNoLXdoZW49InNldHRpbmdzIj5TZXR0aW5ncyBEaXY8L2Rpdj4KKyAgICAg
ICAgICAgIDxkaXYgY2xhc3M9ImFuaW1hdGUtc3dpdGNoIiBuZy1zd2l0Y2gtd2hlbj0iaG9tZSI+
SG9tZSBTcGFuPC9kaXY+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbmltYXRlLXN3aXRjaCIg
bmctc3dpdGNoLWRlZmF1bHQ+ZGVmYXVsdDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwv
ZGl2PgorICAgIDwvZmlsZT4KKyAgICA8ZmlsZSBuYW1lPSJzY3JpcHQuanMiPgorICAgICAgYW5n
dWxhci5tb2R1bGUoJ3N3aXRjaEV4YW1wbGUnLCBbJ25nQW5pbWF0ZSddKQorICAgICAgICAuY29u
dHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkg
eworICAgICAgICAgICRzY29wZS5pdGVtcyA9IFsnc2V0dGluZ3MnLCAnaG9tZScsICdvdGhlcidd
OworICAgICAgICAgICRzY29wZS5zZWxlY3Rpb24gPSAkc2NvcGUuaXRlbXNbMF07CisgICAgICAg
IH1dKTsKKyAgICA8L2ZpbGU+CisgICAgPGZpbGUgbmFtZT0iYW5pbWF0aW9ucy5jc3MiPgorICAg
ICAgLmFuaW1hdGUtc3dpdGNoLWNvbnRhaW5lciB7CisgICAgICAgIHBvc2l0aW9uOnJlbGF0aXZl
OworICAgICAgICBiYWNrZ3JvdW5kOndoaXRlOworICAgICAgICBib3JkZXI6MXB4IHNvbGlkIGJs
YWNrOworICAgICAgICBoZWlnaHQ6NDBweDsKKyAgICAgICAgb3ZlcmZsb3c6aGlkZGVuOworICAg
ICAgfQorCisgICAgICAuYW5pbWF0ZS1zd2l0Y2ggeworICAgICAgICBwYWRkaW5nOjEwcHg7Cisg
ICAgICB9CisKKyAgICAgIC5hbmltYXRlLXN3aXRjaC5uZy1hbmltYXRlIHsKKyAgICAgICAgLXdl
YmtpdC10cmFuc2l0aW9uOmFsbCBjdWJpYy1iZXppZXIoMC4yNTAsIDAuNDYwLCAwLjQ1MCwgMC45
NDApIDAuNXM7CisgICAgICAgIHRyYW5zaXRpb246YWxsIGN1YmljLWJlemllcigwLjI1MCwgMC40
NjAsIDAuNDUwLCAwLjk0MCkgMC41czsKKworICAgICAgICBwb3NpdGlvbjphYnNvbHV0ZTsKKyAg
ICAgICAgdG9wOjA7CisgICAgICAgIGxlZnQ6MDsKKyAgICAgICAgcmlnaHQ6MDsKKyAgICAgICAg
Ym90dG9tOjA7CisgICAgICB9CisKKyAgICAgIC5hbmltYXRlLXN3aXRjaC5uZy1sZWF2ZS5uZy1s
ZWF2ZS1hY3RpdmUsCisgICAgICAuYW5pbWF0ZS1zd2l0Y2gubmctZW50ZXIgeworICAgICAgICB0
b3A6LTUwcHg7CisgICAgICB9CisgICAgICAuYW5pbWF0ZS1zd2l0Y2gubmctbGVhdmUsCisgICAg
ICAuYW5pbWF0ZS1zd2l0Y2gubmctZW50ZXIubmctZW50ZXItYWN0aXZlIHsKKyAgICAgICAgdG9w
OjA7CisgICAgICB9CisgICAgPC9maWxlPgorICAgIDxmaWxlIG5hbWU9InByb3RyYWN0b3IuanMi
IHR5cGU9InByb3RyYWN0b3IiPgorICAgICAgdmFyIHN3aXRjaEVsZW0gPSBlbGVtZW50KGJ5LmNz
cygnW25nLXN3aXRjaF0nKSk7CisgICAgICB2YXIgc2VsZWN0ID0gZWxlbWVudChieS5tb2RlbCgn
c2VsZWN0aW9uJykpOworCisgICAgICBpdCgnc2hvdWxkIHN0YXJ0IGluIHNldHRpbmdzJywgZnVu
Y3Rpb24oKSB7CisgICAgICAgIGV4cGVjdChzd2l0Y2hFbGVtLmdldFRleHQoKSkudG9NYXRjaCgv
U2V0dGluZ3MgRGl2Lyk7CisgICAgICB9KTsKKyAgICAgIGl0KCdzaG91bGQgY2hhbmdlIHRvIGhv
bWUnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgc2VsZWN0LmFsbChieS5jc3MoJ29wdGlvbicpKS5n
ZXQoMSkuY2xpY2soKTsKKyAgICAgICAgZXhwZWN0KHN3aXRjaEVsZW0uZ2V0VGV4dCgpKS50b01h
dGNoKC9Ib21lIFNwYW4vKTsKKyAgICAgIH0pOworICAgICAgaXQoJ3Nob3VsZCBzZWxlY3QgZGVm
YXVsdCcsIGZ1bmN0aW9uKCkgeworICAgICAgICBzZWxlY3QuYWxsKGJ5LmNzcygnb3B0aW9uJykp
LmdldCgyKS5jbGljaygpOworICAgICAgICBleHBlY3Qoc3dpdGNoRWxlbS5nZXRUZXh0KCkpLnRv
TWF0Y2goL2RlZmF1bHQvKTsKKyAgICAgIH0pOworICAgIDwvZmlsZT4KKyAgPC9leGFtcGxlPgor
ICovCit2YXIgbmdTd2l0Y2hEaXJlY3RpdmUgPSBbJyRhbmltYXRlJywgZnVuY3Rpb24oJGFuaW1h
dGUpIHsKKyAgcmV0dXJuIHsKKyAgICByZXF1aXJlOiAnbmdTd2l0Y2gnLAorCisgICAgLy8gYXNr
cyBmb3IgJHNjb3BlIHRvIGZvb2wgdGhlIEJDIGNvbnRyb2xsZXIgbW9kdWxlCisgICAgY29udHJv
bGxlcjogWyckc2NvcGUnLCBmdW5jdGlvbiBuZ1N3aXRjaENvbnRyb2xsZXIoKSB7CisgICAgIHRo
aXMuY2FzZXMgPSB7fTsKKyAgICB9XSwKKyAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVu
dCwgYXR0ciwgbmdTd2l0Y2hDb250cm9sbGVyKSB7CisgICAgICB2YXIgd2F0Y2hFeHByID0gYXR0
ci5uZ1N3aXRjaCB8fCBhdHRyLm9uLAorICAgICAgICAgIHNlbGVjdGVkVHJhbnNjbHVkZXMgPSBb
XSwKKyAgICAgICAgICBzZWxlY3RlZEVsZW1lbnRzID0gW10sCisgICAgICAgICAgcHJldmlvdXNM
ZWF2ZUFuaW1hdGlvbnMgPSBbXSwKKyAgICAgICAgICBzZWxlY3RlZFNjb3BlcyA9IFtdOworCisg
ICAgICB2YXIgc3BsaWNlRmFjdG9yeSA9IGZ1bmN0aW9uKGFycmF5LCBpbmRleCkgeworICAgICAg
ICAgIHJldHVybiBmdW5jdGlvbigpIHsgYXJyYXkuc3BsaWNlKGluZGV4LCAxKTsgfTsKKyAgICAg
IH07CisKKyAgICAgIHNjb3BlLiR3YXRjaCh3YXRjaEV4cHIsIGZ1bmN0aW9uIG5nU3dpdGNoV2F0
Y2hBY3Rpb24odmFsdWUpIHsKKyAgICAgICAgdmFyIGksIGlpOworICAgICAgICBmb3IgKGkgPSAw
LCBpaSA9IHByZXZpb3VzTGVhdmVBbmltYXRpb25zLmxlbmd0aDsgaSA8IGlpOyArK2kpIHsKKyAg
ICAgICAgICAkYW5pbWF0ZS5jYW5jZWwocHJldmlvdXNMZWF2ZUFuaW1hdGlvbnNbaV0pOworICAg
ICAgICB9CisgICAgICAgIHByZXZpb3VzTGVhdmVBbmltYXRpb25zLmxlbmd0aCA9IDA7CisKKyAg
ICAgICAgZm9yIChpID0gMCwgaWkgPSBzZWxlY3RlZFNjb3Blcy5sZW5ndGg7IGkgPCBpaTsgKytp
KSB7CisgICAgICAgICAgdmFyIHNlbGVjdGVkID0gZ2V0QmxvY2tOb2RlcyhzZWxlY3RlZEVsZW1l
bnRzW2ldLmNsb25lKTsKKyAgICAgICAgICBzZWxlY3RlZFNjb3Blc1tpXS4kZGVzdHJveSgpOwor
ICAgICAgICAgIHZhciBwcm9taXNlID0gcHJldmlvdXNMZWF2ZUFuaW1hdGlvbnNbaV0gPSAkYW5p
bWF0ZS5sZWF2ZShzZWxlY3RlZCk7CisgICAgICAgICAgcHJvbWlzZS50aGVuKHNwbGljZUZhY3Rv
cnkocHJldmlvdXNMZWF2ZUFuaW1hdGlvbnMsIGkpKTsKKyAgICAgICAgfQorCisgICAgICAgIHNl
bGVjdGVkRWxlbWVudHMubGVuZ3RoID0gMDsKKyAgICAgICAgc2VsZWN0ZWRTY29wZXMubGVuZ3Ro
ID0gMDsKKworICAgICAgICBpZiAoKHNlbGVjdGVkVHJhbnNjbHVkZXMgPSBuZ1N3aXRjaENvbnRy
b2xsZXIuY2FzZXNbJyEnICsgdmFsdWVdIHx8IG5nU3dpdGNoQ29udHJvbGxlci5jYXNlc1snPydd
KSkgeworICAgICAgICAgIGZvckVhY2goc2VsZWN0ZWRUcmFuc2NsdWRlcywgZnVuY3Rpb24oc2Vs
ZWN0ZWRUcmFuc2NsdWRlKSB7CisgICAgICAgICAgICBzZWxlY3RlZFRyYW5zY2x1ZGUudHJhbnNj
bHVkZShmdW5jdGlvbihjYXNlRWxlbWVudCwgc2VsZWN0ZWRTY29wZSkgeworICAgICAgICAgICAg
ICBzZWxlY3RlZFNjb3Blcy5wdXNoKHNlbGVjdGVkU2NvcGUpOworICAgICAgICAgICAgICB2YXIg
YW5jaG9yID0gc2VsZWN0ZWRUcmFuc2NsdWRlLmVsZW1lbnQ7CisgICAgICAgICAgICAgIGNhc2VF
bGVtZW50W2Nhc2VFbGVtZW50Lmxlbmd0aCsrXSA9IGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoJyBl
bmQgbmdTd2l0Y2hXaGVuOiAnKTsKKyAgICAgICAgICAgICAgdmFyIGJsb2NrID0geyBjbG9uZTog
Y2FzZUVsZW1lbnQgfTsKKworICAgICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnRzLnB1c2goYmxv
Y2spOworICAgICAgICAgICAgICAkYW5pbWF0ZS5lbnRlcihjYXNlRWxlbWVudCwgYW5jaG9yLnBh
cmVudCgpLCBhbmNob3IpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgfSk7CisgICAgICAg
IH0KKyAgICAgIH0pOworICAgIH0KKyAgfTsKK31dOworCit2YXIgbmdTd2l0Y2hXaGVuRGlyZWN0
aXZlID0gbmdEaXJlY3RpdmUoeworICB0cmFuc2NsdWRlOiAnZWxlbWVudCcsCisgIHByaW9yaXR5
OiAxMjAwLAorICByZXF1aXJlOiAnXm5nU3dpdGNoJywKKyAgbXVsdGlFbGVtZW50OiB0cnVlLAor
ICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cnMsIGN0cmwsICR0cmFuc2NsdWRl
KSB7CisgICAgY3RybC5jYXNlc1snIScgKyBhdHRycy5uZ1N3aXRjaFdoZW5dID0gKGN0cmwuY2Fz
ZXNbJyEnICsgYXR0cnMubmdTd2l0Y2hXaGVuXSB8fCBbXSk7CisgICAgY3RybC5jYXNlc1snIScg
KyBhdHRycy5uZ1N3aXRjaFdoZW5dLnB1c2goeyB0cmFuc2NsdWRlOiAkdHJhbnNjbHVkZSwgZWxl
bWVudDogZWxlbWVudCB9KTsKKyAgfQorfSk7CisKK3ZhciBuZ1N3aXRjaERlZmF1bHREaXJlY3Rp
dmUgPSBuZ0RpcmVjdGl2ZSh7CisgIHRyYW5zY2x1ZGU6ICdlbGVtZW50JywKKyAgcHJpb3JpdHk6
IDEyMDAsCisgIHJlcXVpcmU6ICdebmdTd2l0Y2gnLAorICBtdWx0aUVsZW1lbnQ6IHRydWUsCisg
IGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsLCAkdHJhbnNjbHVkZSkg
eworICAgIGN0cmwuY2FzZXNbJz8nXSA9IChjdHJsLmNhc2VzWyc/J10gfHwgW10pOworICAgIGN0
cmwuY2FzZXNbJz8nXS5wdXNoKHsgdHJhbnNjbHVkZTogJHRyYW5zY2x1ZGUsIGVsZW1lbnQ6IGVs
ZW1lbnQgfSk7CisgICB9Cit9KTsKKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFt
ZSBuZ1RyYW5zY2x1ZGUKKyAqIEByZXN0cmljdCBFQUMKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAq
IERpcmVjdGl2ZSB0aGF0IG1hcmtzIHRoZSBpbnNlcnRpb24gcG9pbnQgZm9yIHRoZSB0cmFuc2Ns
dWRlZCBET00gb2YgdGhlIG5lYXJlc3QgcGFyZW50IGRpcmVjdGl2ZSB0aGF0IHVzZXMgdHJhbnNj
bHVzaW9uLgorICoKKyAqIEFueSBleGlzdGluZyBjb250ZW50IG9mIHRoZSBlbGVtZW50IHRoYXQg
dGhpcyBkaXJlY3RpdmUgaXMgcGxhY2VkIG9uIHdpbGwgYmUgcmVtb3ZlZCBiZWZvcmUgdGhlIHRy
YW5zY2x1ZGVkIGNvbnRlbnQgaXMgaW5zZXJ0ZWQuCisgKgorICogQGVsZW1lbnQgQU5ZCisgKgor
ICogQGV4YW1wbGUKKyAgIDxleGFtcGxlIG1vZHVsZT0idHJhbnNjbHVkZUV4YW1wbGUiPgorICAg
ICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgICA8c2NyaXB0PgorICAgICAgICAgYW5n
dWxhci5tb2R1bGUoJ3RyYW5zY2x1ZGVFeGFtcGxlJywgW10pCisgICAgICAgICAgLmRpcmVjdGl2
ZSgncGFuZScsIGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
ICAgIHJlc3RyaWN0OiAnRScsCisgICAgICAgICAgICAgICB0cmFuc2NsdWRlOiB0cnVlLAorICAg
ICAgICAgICAgICAgc2NvcGU6IHsgdGl0bGU6J0AnIH0sCisgICAgICAgICAgICAgICB0ZW1wbGF0
ZTogJzxkaXYgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyI+JyArCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnPGRpdiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogZ3JheSI+e3t0
aXRsZX19PC9kaXY+JyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnPG5nLXRyYW5zY2x1
ZGU+PC9uZy10cmFuc2NsdWRlPicgKworICAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4n
CisgICAgICAgICAgICAgfTsKKyAgICAgICAgIH0pCisgICAgICAgICAuY29udHJvbGxlcignRXhh
bXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkgeworICAgICAgICAg
ICAkc2NvcGUudGl0bGUgPSAnTG9yZW0gSXBzdW0nOworICAgICAgICAgICAkc2NvcGUudGV4dCA9
ICdOZXF1ZSBwb3JybyBxdWlzcXVhbSBlc3QgcXVpIGRvbG9yZW0gaXBzdW0gcXVpYSBkb2xvci4u
Lic7CisgICAgICAgICB9XSk7CisgICAgICAgPC9zY3JpcHQ+CisgICAgICAgPGRpdiBuZy1jb250
cm9sbGVyPSJFeGFtcGxlQ29udHJvbGxlciI+CisgICAgICAgICA8aW5wdXQgbmctbW9kZWw9InRp
dGxlIiBhcmlhLWxhYmVsPSJ0aXRsZSI+IDxici8+CisgICAgICAgICA8dGV4dGFyZWEgbmctbW9k
ZWw9InRleHQiIGFyaWEtbGFiZWw9InRleHQiPjwvdGV4dGFyZWE+IDxici8+CisgICAgICAgICA8
cGFuZSB0aXRsZT0ie3t0aXRsZX19Ij57e3RleHR9fTwvcGFuZT4KKyAgICAgICA8L2Rpdj4KKyAg
ICAgPC9maWxlPgorICAgICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFj
dG9yIj4KKyAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIHRyYW5zY2x1ZGVkJywgZnVuY3Rpb24oKSB7
CisgICAgICAgICAgdmFyIHRpdGxlRWxlbWVudCA9IGVsZW1lbnQoYnkubW9kZWwoJ3RpdGxlJykp
OworICAgICAgICAgIHRpdGxlRWxlbWVudC5jbGVhcigpOworICAgICAgICAgIHRpdGxlRWxlbWVu
dC5zZW5kS2V5cygnVElUTEUnKTsKKyAgICAgICAgICB2YXIgdGV4dEVsZW1lbnQgPSBlbGVtZW50
KGJ5Lm1vZGVsKCd0ZXh0JykpOworICAgICAgICAgIHRleHRFbGVtZW50LmNsZWFyKCk7CisgICAg
ICAgICAgdGV4dEVsZW1lbnQuc2VuZEtleXMoJ1RFWFQnKTsKKyAgICAgICAgICBleHBlY3QoZWxl
bWVudChieS5iaW5kaW5nKCd0aXRsZScpKS5nZXRUZXh0KCkpLnRvRXF1YWwoJ1RJVExFJyk7Cisg
ICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGluZygndGV4dCcpKS5nZXRUZXh0KCkpLnRv
RXF1YWwoJ1RFWFQnKTsKKyAgICAgICAgfSk7CisgICAgIDwvZmlsZT4KKyAgIDwvZXhhbXBsZT4K
KyAqCisgKi8KK3ZhciBuZ1RyYW5zY2x1ZGVEaXJlY3RpdmUgPSBuZ0RpcmVjdGl2ZSh7CisgIHJl
c3RyaWN0OiAnRUFDJywKKyAgbGluazogZnVuY3Rpb24oJHNjb3BlLCAkZWxlbWVudCwgJGF0dHJz
LCBjb250cm9sbGVyLCAkdHJhbnNjbHVkZSkgeworICAgIGlmICghJHRyYW5zY2x1ZGUpIHsKKyAg
ICAgIHRocm93IG1pbkVycignbmdUcmFuc2NsdWRlJykoJ29ycGhhbicsCisgICAgICAgJ0lsbGVn
YWwgdXNlIG9mIG5nVHJhbnNjbHVkZSBkaXJlY3RpdmUgaW4gdGhlIHRlbXBsYXRlISAnICsKKyAg
ICAgICAnTm8gcGFyZW50IGRpcmVjdGl2ZSB0aGF0IHJlcXVpcmVzIGEgdHJhbnNjbHVzaW9uIGZv
dW5kLiAnICsKKyAgICAgICAnRWxlbWVudDogezB9JywKKyAgICAgICBzdGFydGluZ1RhZygkZWxl
bWVudCkpOworICAgIH0KKworICAgICR0cmFuc2NsdWRlKGZ1bmN0aW9uKGNsb25lKSB7CisgICAg
ICAkZWxlbWVudC5lbXB0eSgpOworICAgICAgJGVsZW1lbnQuYXBwZW5kKGNsb25lKTsKKyAgICB9
KTsKKyAgfQorfSk7CisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgc2NyaXB0
CisgKiBAcmVzdHJpY3QgRQorICoKKyAqIEBkZXNjcmlwdGlvbgorICogTG9hZCB0aGUgY29udGVu
dCBvZiBhIGA8c2NyaXB0PmAgZWxlbWVudCBpbnRvIHtAbGluayBuZy4kdGVtcGxhdGVDYWNoZSBg
JHRlbXBsYXRlQ2FjaGVgfSwgc28gdGhhdCB0aGUKKyAqIHRlbXBsYXRlIGNhbiBiZSB1c2VkIGJ5
IHtAbGluayBuZy5kaXJlY3RpdmU6bmdJbmNsdWRlIGBuZ0luY2x1ZGVgfSwKKyAqIHtAbGluayBu
Z1JvdXRlLmRpcmVjdGl2ZTpuZ1ZpZXcgYG5nVmlld2B9LCBvciB7QGxpbmsgZ3VpZGUvZGlyZWN0
aXZlIGRpcmVjdGl2ZXN9LiBUaGUgdHlwZSBvZiB0aGUKKyAqIGA8c2NyaXB0PmAgZWxlbWVudCBt
dXN0IGJlIHNwZWNpZmllZCBhcyBgdGV4dC9uZy10ZW1wbGF0ZWAsIGFuZCBhIGNhY2hlIG5hbWUg
Zm9yIHRoZSB0ZW1wbGF0ZSBtdXN0IGJlCisgKiBhc3NpZ25lZCB0aHJvdWdoIHRoZSBlbGVtZW50
J3MgYGlkYCwgd2hpY2ggY2FuIHRoZW4gYmUgdXNlZCBhcyBhIGRpcmVjdGl2ZSdzIGB0ZW1wbGF0
ZVVybGAuCisgKgorICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgTXVzdCBiZSBzZXQgdG8gYCd0ZXh0
L25nLXRlbXBsYXRlJ2AuCisgKiBAcGFyYW0ge3N0cmluZ30gaWQgQ2FjaGUgbmFtZSBvZiB0aGUg
dGVtcGxhdGUuCisgKgorICogQGV4YW1wbGUKKyAgPGV4YW1wbGU+CisgICAgPGZpbGUgbmFtZT0i
aW5kZXguaHRtbCI+CisgICAgICA8c2NyaXB0IHR5cGU9InRleHQvbmctdGVtcGxhdGUiIGlkPSIv
dHBsLmh0bWwiPgorICAgICAgICBDb250ZW50IG9mIHRoZSB0ZW1wbGF0ZS4KKyAgICAgIDwvc2Ny
aXB0PgorCisgICAgICA8YSBuZy1jbGljaz0iY3VycmVudFRwbD0nL3RwbC5odG1sJyIgaWQ9InRw
bC1saW5rIj5Mb2FkIGlubGluZWQgdGVtcGxhdGU8L2E+CisgICAgICA8ZGl2IGlkPSJ0cGwtY29u
dGVudCIgbmctaW5jbHVkZSBzcmM9ImN1cnJlbnRUcGwiPjwvZGl2PgorICAgIDwvZmlsZT4KKyAg
ICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFjdG9yIj4KKyAgICAgIGl0
KCdzaG91bGQgbG9hZCB0ZW1wbGF0ZSBkZWZpbmVkIGluc2lkZSBzY3JpcHQgdGFnJywgZnVuY3Rp
b24oKSB7CisgICAgICAgIGVsZW1lbnQoYnkuY3NzKCcjdHBsLWxpbmsnKSkuY2xpY2soKTsKKyAg
ICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuY3NzKCcjdHBsLWNvbnRlbnQnKSkuZ2V0VGV4dCgpKS50
b01hdGNoKC9Db250ZW50IG9mIHRoZSB0ZW1wbGF0ZS8pOworICAgICAgfSk7CisgICAgPC9maWxl
PgorICA8L2V4YW1wbGU+CisgKi8KK3ZhciBzY3JpcHREaXJlY3RpdmUgPSBbJyR0ZW1wbGF0ZUNh
Y2hlJywgZnVuY3Rpb24oJHRlbXBsYXRlQ2FjaGUpIHsKKyAgcmV0dXJuIHsKKyAgICByZXN0cmlj
dDogJ0UnLAorICAgIHRlcm1pbmFsOiB0cnVlLAorICAgIGNvbXBpbGU6IGZ1bmN0aW9uKGVsZW1l
bnQsIGF0dHIpIHsKKyAgICAgIGlmIChhdHRyLnR5cGUgPT0gJ3RleHQvbmctdGVtcGxhdGUnKSB7
CisgICAgICAgIHZhciB0ZW1wbGF0ZVVybCA9IGF0dHIuaWQsCisgICAgICAgICAgICB0ZXh0ID0g
ZWxlbWVudFswXS50ZXh0OworCisgICAgICAgICR0ZW1wbGF0ZUNhY2hlLnB1dCh0ZW1wbGF0ZVVy
bCwgdGV4dCk7CisgICAgICB9CisgICAgfQorICB9OworfV07CisKK3ZhciBub29wTmdNb2RlbENv
bnRyb2xsZXIgPSB7ICRzZXRWaWV3VmFsdWU6IG5vb3AsICRyZW5kZXI6IG5vb3AgfTsKKworLyoq
CisgKiBAbmdkb2MgdHlwZQorICogQG5hbWUgIHNlbGVjdC5TZWxlY3RDb250cm9sbGVyCisgKiBA
ZGVzY3JpcHRpb24KKyAqIFRoZSBjb250cm9sbGVyIGZvciB0aGUgYDxzZWxlY3Q+YCBkaXJlY3Rp
dmUuIFRoaXMgcHJvdmlkZXMgc3VwcG9ydCBmb3IgcmVhZGluZworICogYW5kIHdyaXRpbmcgdGhl
IHNlbGVjdGVkIHZhbHVlKHMpIG9mIHRoZSBjb250cm9sIGFuZCBhbHNvIGNvb3JkaW5hdGVzIGR5
bmFtaWNhbGx5CisgKiBhZGRlZCBgPG9wdGlvbj5gIGVsZW1lbnRzLCBwZXJoYXBzIGJ5IGFuIGBu
Z1JlcGVhdGAgZGlyZWN0aXZlLgorICovCit2YXIgU2VsZWN0Q29udHJvbGxlciA9CisgICAgICAg
IFsnJGVsZW1lbnQnLCAnJHNjb3BlJywgJyRhdHRycycsIGZ1bmN0aW9uKCRlbGVtZW50LCAkc2Nv
cGUsICRhdHRycykgeworCisgIHZhciBzZWxmID0gdGhpcywKKyAgICAgIG9wdGlvbnNNYXAgPSBu
ZXcgSGFzaE1hcCgpOworCisgIC8vIElmIHRoZSBuZ01vZGVsIGRvZXNuJ3QgZ2V0IHByb3ZpZGVk
IHRoZW4gcHJvdmlkZSBhIGR1bW15IG5vb3AgdmVyc2lvbiB0byBwcmV2ZW50IGVycm9ycworICBz
ZWxmLm5nTW9kZWxDdHJsID0gbm9vcE5nTW9kZWxDb250cm9sbGVyOworCisgIC8vIFRoZSAidW5r
bm93biIgb3B0aW9uIGlzIG9uZSB0aGF0IGlzIHByZXBlbmRlZCB0byB0aGUgbGlzdCBpZiB0aGUg
dmlld1ZhbHVlCisgIC8vIGRvZXMgbm90IG1hdGNoIGFueSBvZiB0aGUgb3B0aW9ucy4gV2hlbiBp
dCBpcyByZW5kZXJlZCB0aGUgdmFsdWUgb2YgdGhlIHVua25vd24KKyAgLy8gb3B0aW9uIGlzICc/
IFhYWCA/JyB3aGVyZSBYWFggaXMgdGhlIGhhc2hLZXkgb2YgdGhlIHZhbHVlIHRoYXQgaXMgbm90
IGtub3duLgorICAvLworICAvLyBXZSBjYW4ndCBqdXN0IGpxTGl0ZSgnPG9wdGlvbj4nKSBzaW5j
ZSBqcUxpdGUgaXMgbm90IHNtYXJ0IGVub3VnaAorICAvLyB0byBjcmVhdGUgaXQgaW4gPHNlbGVj
dD4gYW5kIElFIGJhcmZzIG90aGVyd2lzZS4KKyAgc2VsZi51bmtub3duT3B0aW9uID0ganFMaXRl
KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpKTsKKyAgc2VsZi5yZW5kZXJVbmtub3du
T3B0aW9uID0gZnVuY3Rpb24odmFsKSB7CisgICAgdmFyIHVua25vd25WYWwgPSAnPyAnICsgaGFz
aEtleSh2YWwpICsgJyA/JzsKKyAgICBzZWxmLnVua25vd25PcHRpb24udmFsKHVua25vd25WYWwp
OworICAgICRlbGVtZW50LnByZXBlbmQoc2VsZi51bmtub3duT3B0aW9uKTsKKyAgICAkZWxlbWVu
dC52YWwodW5rbm93blZhbCk7CisgIH07CisKKyAgJHNjb3BlLiRvbignJGRlc3Ryb3knLCBmdW5j
dGlvbigpIHsKKyAgICAvLyBkaXNhYmxlIHVua25vd24gb3B0aW9uIHNvIHRoYXQgd2UgZG9uJ3Qg
ZG8gd29yayB3aGVuIHRoZSB3aG9sZSBzZWxlY3QgaXMgYmVpbmcgZGVzdHJveWVkCisgICAgc2Vs
Zi5yZW5kZXJVbmtub3duT3B0aW9uID0gbm9vcDsKKyAgfSk7CisKKyAgc2VsZi5yZW1vdmVVbmtu
b3duT3B0aW9uID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKHNlbGYudW5rbm93bk9wdGlvbi5wYXJl
bnQoKSkgc2VsZi51bmtub3duT3B0aW9uLnJlbW92ZSgpOworICB9OworCisKKyAgLy8gUmVhZCB0
aGUgdmFsdWUgb2YgdGhlIHNlbGVjdCBjb250cm9sLCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhp
cyBjaGFuZ2VzIGRlcGVuZGluZworICAvLyB1cG9uIHdoZXRoZXIgdGhlIHNlbGVjdCBjYW4gaGF2
ZSBtdWx0aXBsZSB2YWx1ZXMgYW5kIHdoZXRoZXIgbmdPcHRpb25zIGlzIGF0IHdvcmsuCisgIHNl
bGYucmVhZFZhbHVlID0gZnVuY3Rpb24gcmVhZFNpbmdsZVZhbHVlKCkgeworICAgIHNlbGYucmVt
b3ZlVW5rbm93bk9wdGlvbigpOworICAgIHJldHVybiAkZWxlbWVudC52YWwoKTsKKyAgfTsKKwor
CisgIC8vIFdyaXRlIHRoZSB2YWx1ZSB0byB0aGUgc2VsZWN0IGNvbnRyb2wsIHRoZSBpbXBsZW1l
bnRhdGlvbiBvZiB0aGlzIGNoYW5nZXMgZGVwZW5kaW5nCisgIC8vIHVwb24gd2hldGhlciB0aGUg
c2VsZWN0IGNhbiBoYXZlIG11bHRpcGxlIHZhbHVlcyBhbmQgd2hldGhlciBuZ09wdGlvbnMgaXMg
YXQgd29yay4KKyAgc2VsZi53cml0ZVZhbHVlID0gZnVuY3Rpb24gd3JpdGVTaW5nbGVWYWx1ZSh2
YWx1ZSkgeworICAgIGlmIChzZWxmLmhhc09wdGlvbih2YWx1ZSkpIHsKKyAgICAgIHNlbGYucmVt
b3ZlVW5rbm93bk9wdGlvbigpOworICAgICAgJGVsZW1lbnQudmFsKHZhbHVlKTsKKyAgICAgIGlm
ICh2YWx1ZSA9PT0gJycpIHNlbGYuZW1wdHlPcHRpb24ucHJvcCgnc2VsZWN0ZWQnLCB0cnVlKTsg
Ly8gdG8gbWFrZSBJRTkgaGFwcHkKKyAgICB9IGVsc2UgeworICAgICAgaWYgKHZhbHVlID09IG51
bGwgJiYgc2VsZi5lbXB0eU9wdGlvbikgeworICAgICAgICBzZWxmLnJlbW92ZVVua25vd25PcHRp
b24oKTsKKyAgICAgICAgJGVsZW1lbnQudmFsKCcnKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAg
IHNlbGYucmVuZGVyVW5rbm93bk9wdGlvbih2YWx1ZSk7CisgICAgICB9CisgICAgfQorICB9Owor
CisKKyAgLy8gVGVsbCB0aGUgc2VsZWN0IGNvbnRyb2wgdGhhdCBhbiBvcHRpb24sIHdpdGggdGhl
IGdpdmVuIHZhbHVlLCBoYXMgYmVlbiBhZGRlZAorICBzZWxmLmFkZE9wdGlvbiA9IGZ1bmN0aW9u
KHZhbHVlLCBlbGVtZW50KSB7CisgICAgYXNzZXJ0Tm90SGFzT3duUHJvcGVydHkodmFsdWUsICci
b3B0aW9uIHZhbHVlIicpOworICAgIGlmICh2YWx1ZSA9PT0gJycpIHsKKyAgICAgIHNlbGYuZW1w
dHlPcHRpb24gPSBlbGVtZW50OworICAgIH0KKyAgICB2YXIgY291bnQgPSBvcHRpb25zTWFwLmdl
dCh2YWx1ZSkgfHwgMDsKKyAgICBvcHRpb25zTWFwLnB1dCh2YWx1ZSwgY291bnQgKyAxKTsKKyAg
fTsKKworICAvLyBUZWxsIHRoZSBzZWxlY3QgY29udHJvbCB0aGF0IGFuIG9wdGlvbiwgd2l0aCB0
aGUgZ2l2ZW4gdmFsdWUsIGhhcyBiZWVuIHJlbW92ZWQKKyAgc2VsZi5yZW1vdmVPcHRpb24gPSBm
dW5jdGlvbih2YWx1ZSkgeworICAgIHZhciBjb3VudCA9IG9wdGlvbnNNYXAuZ2V0KHZhbHVlKTsK
KyAgICBpZiAoY291bnQpIHsKKyAgICAgIGlmIChjb3VudCA9PT0gMSkgeworICAgICAgICBvcHRp
b25zTWFwLnJlbW92ZSh2YWx1ZSk7CisgICAgICAgIGlmICh2YWx1ZSA9PT0gJycpIHsKKyAgICAg
ICAgICBzZWxmLmVtcHR5T3B0aW9uID0gdW5kZWZpbmVkOworICAgICAgICB9CisgICAgICB9IGVs
c2UgeworICAgICAgICBvcHRpb25zTWFwLnB1dCh2YWx1ZSwgY291bnQgLSAxKTsKKyAgICAgIH0K
KyAgICB9CisgIH07CisKKyAgLy8gQ2hlY2sgd2hldGhlciB0aGUgc2VsZWN0IGNvbnRyb2wgaGFz
IGFuIG9wdGlvbiBtYXRjaGluZyB0aGUgZ2l2ZW4gdmFsdWUKKyAgc2VsZi5oYXNPcHRpb24gPSBm
dW5jdGlvbih2YWx1ZSkgeworICAgIHJldHVybiAhIW9wdGlvbnNNYXAuZ2V0KHZhbHVlKTsKKyAg
fTsKK31dOworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1lIHNlbGVjdAorICog
QHJlc3RyaWN0IEUKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIEhUTUwgYFNFTEVDVGAgZWxlbWVu
dCB3aXRoIGFuZ3VsYXIgZGF0YS1iaW5kaW5nLgorICoKKyAqIEluIG1hbnkgY2FzZXMsIGBuZ1Jl
cGVhdGAgY2FuIGJlIHVzZWQgb24gYDxvcHRpb24+YCBlbGVtZW50cyBpbnN0ZWFkIG9mIHtAbGlu
ayBuZy5kaXJlY3RpdmU6bmdPcHRpb25zCisgKiBuZ09wdGlvbnN9IHRvIGFjaGlldmUgYSBzaW1p
bGFyIHJlc3VsdC4gSG93ZXZlciwgYG5nT3B0aW9uc2AgcHJvdmlkZXMgc29tZSBiZW5lZml0cyBz
dWNoIGFzIHJlZHVjaW5nCisgKiBtZW1vcnkgYW5kIGluY3JlYXNpbmcgc3BlZWQgYnkgbm90IGNy
ZWF0aW5nIGEgbmV3IHNjb3BlIGZvciBlYWNoIHJlcGVhdGVkIGluc3RhbmNlLCBhcyB3ZWxsIGFz
IHByb3ZpZGluZworICogbW9yZSBmbGV4aWJpbGl0eSBpbiBob3cgdGhlIGA8c2VsZWN0PmAncyBt
b2RlbCBpcyBhc3NpZ25lZCB2aWEgdGhlIGBzZWxlY3RgICoqYGFzYCoqIHBhcnQgb2YgdGhlCisg
KiBjb21wcmVoZW5zaW9uIGV4cHJlc3Npb24uCisgKgorICogV2hlbiBhbiBpdGVtIGluIHRoZSBg
PHNlbGVjdD5gIG1lbnUgaXMgc2VsZWN0ZWQsIHRoZSBhcnJheSBlbGVtZW50IG9yIG9iamVjdCBw
cm9wZXJ0eQorICogcmVwcmVzZW50ZWQgYnkgdGhlIHNlbGVjdGVkIG9wdGlvbiB3aWxsIGJlIGJv
dW5kIHRvIHRoZSBtb2RlbCBpZGVudGlmaWVkIGJ5IHRoZSBgbmdNb2RlbGAKKyAqIGRpcmVjdGl2
ZS4KKyAqCisgKiBJZiB0aGUgdmlld1ZhbHVlIGNvbnRhaW5zIGEgdmFsdWUgdGhhdCBkb2Vzbid0
IG1hdGNoIGFueSBvZiB0aGUgb3B0aW9ucyB0aGVuIHRoZSBjb250cm9sCisgKiB3aWxsIGF1dG9t
YXRpY2FsbHkgYWRkIGFuICJ1bmtub3duIiBvcHRpb24sIHdoaWNoIGl0IHRoZW4gcmVtb3ZlcyB3
aGVuIHRoaXMgaXMgcmVzb2x2ZWQuCisgKgorICogT3B0aW9uYWxseSwgYSBzaW5nbGUgaGFyZC1j
b2RlZCBgPG9wdGlvbj5gIGVsZW1lbnQsIHdpdGggdGhlIHZhbHVlIHNldCB0byBhbiBlbXB0eSBz
dHJpbmcsIGNhbgorICogYmUgbmVzdGVkIGludG8gdGhlIGA8c2VsZWN0PmAgZWxlbWVudC4gVGhp
cyBlbGVtZW50IHdpbGwgdGhlbiByZXByZXNlbnQgdGhlIGBudWxsYCBvciAibm90IHNlbGVjdGVk
IgorICogb3B0aW9uLiBTZWUgZXhhbXBsZSBiZWxvdyBmb3IgZGVtb25zdHJhdGlvbi4KKyAqCisg
KiA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAqIFRoZSB2YWx1ZSBvZiBhIGBzZWxl
Y3RgIGRpcmVjdGl2ZSB1c2VkIHdpdGhvdXQgYG5nT3B0aW9uc2AgaXMgYWx3YXlzIGEgc3RyaW5n
LgorICogV2hlbiB0aGUgbW9kZWwgbmVlZHMgdG8gYmUgYm91bmQgdG8gYSBub24tc3RyaW5nIHZh
bHVlLCB5b3UgbXVzdCBlaXRoZXIgZXhwbGljdGx5IGNvbnZlcnQgaXQKKyAqIHVzaW5nIGEgZGly
ZWN0aXZlIChzZWUgZXhhbXBsZSBiZWxvdykgb3IgdXNlIGBuZ09wdGlvbnNgIHRvIHNwZWNpZnkg
dGhlIHNldCBvZiBvcHRpb25zLgorICogVGhpcyBpcyBiZWNhdXNlIGFuIG9wdGlvbiBlbGVtZW50
IGNhbiBvbmx5IGJlIGJvdW5kIHRvIHN0cmluZyB2YWx1ZXMgYXQgcHJlc2VudC4KKyAqIDwvZGl2
PgorICoKKyAqICMjIyBFeGFtcGxlIChiaW5kaW5nIGBzZWxlY3RgIHRvIGEgbm9uLXN0cmluZyB2
YWx1ZSkKKyAqCisgKiA8ZXhhbXBsZSBuYW1lPSJzZWxlY3Qtd2l0aC1ub24tc3RyaW5nLW9wdGlv
bnMiIG1vZHVsZT0ibm9uU3RyaW5nU2VsZWN0Ij4KKyAqICAgPGZpbGUgbmFtZT0iaW5kZXguaHRt
bCI+CisgKiAgICAgPHNlbGVjdCBuZy1tb2RlbD0ibW9kZWwuaWQiIGNvbnZlcnQtdG8tbnVtYmVy
PgorICogICAgICAgPG9wdGlvbiB2YWx1ZT0iMCI+WmVybzwvb3B0aW9uPgorICogICAgICAgPG9w
dGlvbiB2YWx1ZT0iMSI+T25lPC9vcHRpb24+CisgKiAgICAgICA8b3B0aW9uIHZhbHVlPSIyIj5U
d288L29wdGlvbj4KKyAqICAgICA8L3NlbGVjdD4KKyAqICAgICB7eyBtb2RlbCB9fQorICogICA8
L2ZpbGU+CisgKiAgIDxmaWxlIG5hbWU9ImFwcC5qcyI+CisgKiAgICAgYW5ndWxhci5tb2R1bGUo
J25vblN0cmluZ1NlbGVjdCcsIFtdKQorICogICAgICAgLnJ1bihmdW5jdGlvbigkcm9vdFNjb3Bl
KSB7CisgKiAgICAgICAgICRyb290U2NvcGUubW9kZWwgPSB7IGlkOiAyIH07CisgKiAgICAgICB9
KQorICogICAgICAgLmRpcmVjdGl2ZSgnY29udmVydFRvTnVtYmVyJywgZnVuY3Rpb24oKSB7Cisg
KiAgICAgICAgIHJldHVybiB7CisgKiAgICAgICAgICAgcmVxdWlyZTogJ25nTW9kZWwnLAorICog
ICAgICAgICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRycywgbmdNb2RlbCkg
eworICogICAgICAgICAgICAgbmdNb2RlbC4kcGFyc2Vycy5wdXNoKGZ1bmN0aW9uKHZhbCkgewor
ICogICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsLCAxMCk7CisgKiAgICAgICAgICAg
ICB9KTsKKyAqICAgICAgICAgICAgIG5nTW9kZWwuJGZvcm1hdHRlcnMucHVzaChmdW5jdGlvbih2
YWwpIHsKKyAqICAgICAgICAgICAgICAgcmV0dXJuICcnICsgdmFsOworICogICAgICAgICAgICAg
fSk7CisgKiAgICAgICAgICAgfQorICogICAgICAgICB9OworICogICAgICAgfSk7CisgKiAgIDwv
ZmlsZT4KKyAqICAgPGZpbGUgbmFtZT0icHJvdHJhY3Rvci5qcyIgdHlwZT0icHJvdHJhY3RvciI+
CisgKiAgICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIHRvIG1vZGVsJywgZnVuY3Rpb24oKSB7Cisg
KiAgICAgICB2YXIgc2VsZWN0ID0gZWxlbWVudChieS5jc3MoJ3NlbGVjdCcpKTsKKyAqICAgICAg
IGV4cGVjdChlbGVtZW50KGJ5Lm1vZGVsKCdtb2RlbC5pZCcpKS4kKCdvcHRpb246Y2hlY2tlZCcp
LmdldFRleHQoKSkudG9FcXVhbCgnVHdvJyk7CisgKiAgICAgfSk7CisgKiAgIDwvZmlsZT4KKyAq
IDwvZXhhbXBsZT4KKyAqCisgKi8KK3ZhciBzZWxlY3REaXJlY3RpdmUgPSBmdW5jdGlvbigpIHsK
KworICByZXR1cm4geworICAgIHJlc3RyaWN0OiAnRScsCisgICAgcmVxdWlyZTogWydzZWxlY3Qn
LCAnP25nTW9kZWwnXSwKKyAgICBjb250cm9sbGVyOiBTZWxlY3RDb250cm9sbGVyLAorICAgIGxp
bms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJscykgeworCisgICAgICAvLyBp
ZiBuZ01vZGVsIGlzIG5vdCBkZWZpbmVkLCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nCisg
ICAgICB2YXIgbmdNb2RlbEN0cmwgPSBjdHJsc1sxXTsKKyAgICAgIGlmICghbmdNb2RlbEN0cmwp
IHJldHVybjsKKworICAgICAgdmFyIHNlbGVjdEN0cmwgPSBjdHJsc1swXTsKKworICAgICAgc2Vs
ZWN0Q3RybC5uZ01vZGVsQ3RybCA9IG5nTW9kZWxDdHJsOworCisgICAgICAvLyBXZSBkZWxlZ2F0
ZSByZW5kZXJpbmcgdG8gdGhlIGB3cml0ZVZhbHVlYCBtZXRob2QsIHdoaWNoIGNhbiBiZSBjaGFu
Z2VkCisgICAgICAvLyBpZiB0aGUgc2VsZWN0IGNhbiBoYXZlIG11bHRpcGxlIHNlbGVjdGVkIHZh
bHVlcyBvciBpZiB0aGUgb3B0aW9ucyBhcmUgYmVpbmcKKyAgICAgIC8vIGdlbmVyYXRlZCBieSBg
bmdPcHRpb25zYAorICAgICAgbmdNb2RlbEN0cmwuJHJlbmRlciA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICBzZWxlY3RDdHJsLndyaXRlVmFsdWUobmdNb2RlbEN0cmwuJHZpZXdWYWx1ZSk7CisgICAg
ICB9OworCisgICAgICAvLyBXaGVuIHRoZSBzZWxlY3RlZCBpdGVtKHMpIGNoYW5nZXMgd2UgZGVs
ZWdhdGUgZ2V0dGluZyB0aGUgdmFsdWUgb2YgdGhlIHNlbGVjdCBjb250cm9sCisgICAgICAvLyB0
byB0aGUgYHJlYWRWYWx1ZWAgbWV0aG9kLCB3aGljaCBjYW4gYmUgY2hhbmdlZCBpZiB0aGUgc2Vs
ZWN0IGNhbiBoYXZlIG11bHRpcGxlCisgICAgICAvLyBzZWxlY3RlZCB2YWx1ZXMgb3IgaWYgdGhl
IG9wdGlvbnMgYXJlIGJlaW5nIGdlbmVyYXRlZCBieSBgbmdPcHRpb25zYAorICAgICAgZWxlbWVu
dC5vbignY2hhbmdlJywgZnVuY3Rpb24oKSB7CisgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlv
bigpIHsKKyAgICAgICAgICBuZ01vZGVsQ3RybC4kc2V0Vmlld1ZhbHVlKHNlbGVjdEN0cmwucmVh
ZFZhbHVlKCkpOworICAgICAgICB9KTsKKyAgICAgIH0pOworCisgICAgICAvLyBJZiB0aGUgc2Vs
ZWN0IGFsbG93cyBtdWx0aXBsZSB2YWx1ZXMgdGhlbiB3ZSBuZWVkIHRvIG1vZGlmeSBob3cgd2Ug
cmVhZCBhbmQgd3JpdGUKKyAgICAgIC8vIHZhbHVlcyBmcm9tIGFuZCB0byB0aGUgY29udHJvbDsg
YWxzbyB3aGF0IGl0IG1lYW5zIGZvciB0aGUgdmFsdWUgdG8gYmUgZW1wdHkgYW5kCisgICAgICAv
LyB3ZSBoYXZlIHRvIGFkZCBhbiBleHRyYSB3YXRjaCBzaW5jZSBuZ01vZGVsIGRvZXNuJ3Qgd29y
ayB3ZWxsIHdpdGggYXJyYXlzIC0gaXQKKyAgICAgIC8vIGRvZXNuJ3QgdHJpZ2dlciByZW5kZXJp
bmcgaWYgb25seSBhbiBpdGVtIGluIHRoZSBhcnJheSBjaGFuZ2VzLgorICAgICAgaWYgKGF0dHIu
bXVsdGlwbGUpIHsKKworICAgICAgICAvLyBSZWFkIHZhbHVlIG5vdyBuZWVkcyB0byBjaGVjayBl
YWNoIG9wdGlvbiB0byBzZWUgaWYgaXQgaXMgc2VsZWN0ZWQKKyAgICAgICAgc2VsZWN0Q3RybC5y
ZWFkVmFsdWUgPSBmdW5jdGlvbiByZWFkTXVsdGlwbGVWYWx1ZSgpIHsKKyAgICAgICAgICB2YXIg
YXJyYXkgPSBbXTsKKyAgICAgICAgICBmb3JFYWNoKGVsZW1lbnQuZmluZCgnb3B0aW9uJyksIGZ1
bmN0aW9uKG9wdGlvbikgeworICAgICAgICAgICAgaWYgKG9wdGlvbi5zZWxlY3RlZCkgeworICAg
ICAgICAgICAgICBhcnJheS5wdXNoKG9wdGlvbi52YWx1ZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgfSk7CisgICAgICAgICAgcmV0dXJuIGFycmF5OworICAgICAgICB9OworCisgICAgICAg
IC8vIFdyaXRlIHZhbHVlIG5vdyBuZWVkcyB0byBzZXQgdGhlIHNlbGVjdGVkIHByb3BlcnR5IG9m
IGVhY2ggbWF0Y2hpbmcgb3B0aW9uCisgICAgICAgIHNlbGVjdEN0cmwud3JpdGVWYWx1ZSA9IGZ1
bmN0aW9uIHdyaXRlTXVsdGlwbGVWYWx1ZSh2YWx1ZSkgeworICAgICAgICAgIHZhciBpdGVtcyA9
IG5ldyBIYXNoTWFwKHZhbHVlKTsKKyAgICAgICAgICBmb3JFYWNoKGVsZW1lbnQuZmluZCgnb3B0
aW9uJyksIGZ1bmN0aW9uKG9wdGlvbikgeworICAgICAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0g
aXNEZWZpbmVkKGl0ZW1zLmdldChvcHRpb24udmFsdWUpKTsKKyAgICAgICAgICB9KTsKKyAgICAg
ICAgfTsKKworICAgICAgICAvLyB3ZSBoYXZlIHRvIGRvIGl0IG9uIGVhY2ggd2F0Y2ggc2luY2Ug
bmdNb2RlbCB3YXRjaGVzIHJlZmVyZW5jZSwgYnV0CisgICAgICAgIC8vIHdlIG5lZWQgdG8gd29y
ayBvZiBhbiBhcnJheSwgc28gd2UgbmVlZCB0byBzZWUgaWYgYW55dGhpbmcgd2FzIGluc2VydGVk
L3JlbW92ZWQKKyAgICAgICAgdmFyIGxhc3RWaWV3LCBsYXN0Vmlld1JlZiA9IE5hTjsKKyAgICAg
ICAgc2NvcGUuJHdhdGNoKGZ1bmN0aW9uIHNlbGVjdE11bHRpcGxlV2F0Y2goKSB7CisgICAgICAg
ICAgaWYgKGxhc3RWaWV3UmVmID09PSBuZ01vZGVsQ3RybC4kdmlld1ZhbHVlICYmICFlcXVhbHMo
bGFzdFZpZXcsIG5nTW9kZWxDdHJsLiR2aWV3VmFsdWUpKSB7CisgICAgICAgICAgICBsYXN0Vmll
dyA9IHNoYWxsb3dDb3B5KG5nTW9kZWxDdHJsLiR2aWV3VmFsdWUpOworICAgICAgICAgICAgbmdN
b2RlbEN0cmwuJHJlbmRlcigpOworICAgICAgICAgIH0KKyAgICAgICAgICBsYXN0Vmlld1JlZiA9
IG5nTW9kZWxDdHJsLiR2aWV3VmFsdWU7CisgICAgICAgIH0pOworCisgICAgICAgIC8vIElmIHdl
IGFyZSBhIG11bHRpcGxlIHNlbGVjdCB0aGVuIHZhbHVlIGlzIG5vdyBhIGNvbGxlY3Rpb24KKyAg
ICAgICAgLy8gc28gdGhlIG1lYW5pbmcgb2YgJGlzRW1wdHkgY2hhbmdlcworICAgICAgICBuZ01v
ZGVsQ3RybC4kaXNFbXB0eSA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAgICAgcmV0dXJuICF2
YWx1ZSB8fCB2YWx1ZS5sZW5ndGggPT09IDA7CisgICAgICAgIH07CisKKyAgICAgIH0KKyAgICB9
CisgIH07Cit9OworCisKKy8vIFRoZSBvcHRpb24gZGlyZWN0aXZlIGlzIHB1cmVseSBkZXNpZ25l
ZCB0byBjb21tdW5pY2F0ZSB0aGUgZXhpc3RlbmNlIChvciBsYWNrIG9mKQorLy8gb2YgZHluYW1p
Y2FsbHkgY3JlYXRlZCAoYW5kIGRlc3Ryb3llZCkgb3B0aW9uIGVsZW1lbnRzIHRvIHRoZWlyIGNv
bnRhaW5pbmcgc2VsZWN0CisvLyBkaXJlY3RpdmUgdmlhIGl0cyBjb250cm9sbGVyLgordmFyIG9w
dGlvbkRpcmVjdGl2ZSA9IFsnJGludGVycG9sYXRlJywgZnVuY3Rpb24oJGludGVycG9sYXRlKSB7
CisKKyAgZnVuY3Rpb24gY2hyb21lSGFjayhvcHRpb25FbGVtZW50KSB7CisgICAgLy8gV29ya2Fy
b3VuZCBmb3IgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWls
P2lkPTM4MTQ1OQorICAgIC8vIEFkZGluZyBhbiA8b3B0aW9uIHNlbGVjdGVkPSJzZWxlY3RlZCI+
IGVsZW1lbnQgdG8gYSA8c2VsZWN0IHJlcXVpcmVkPSJyZXF1aXJlZCI+IHNob3VsZAorICAgIC8v
IGF1dG9tYXRpY2FsbHkgc2VsZWN0IHRoZSBuZXcgZWxlbWVudAorICAgIGlmIChvcHRpb25FbGVt
ZW50WzBdLmhhc0F0dHJpYnV0ZSgnc2VsZWN0ZWQnKSkgeworICAgICAgb3B0aW9uRWxlbWVudFsw
XS5zZWxlY3RlZCA9IHRydWU7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHsKKyAgICByZXN0cmlj
dDogJ0UnLAorICAgIHByaW9yaXR5OiAxMDAsCisgICAgY29tcGlsZTogZnVuY3Rpb24oZWxlbWVu
dCwgYXR0cikgeworCisgICAgICAvLyBJZiB0aGUgdmFsdWUgYXR0cmlidXRlIGlzIG5vdCBkZWZp
bmVkIHRoZW4gd2UgZmFsbCBiYWNrIHRvIHRoZQorICAgICAgLy8gdGV4dCBjb250ZW50IG9mIHRo
ZSBvcHRpb24gZWxlbWVudCwgd2hpY2ggbWF5IGJlIGludGVycG9sYXRlZAorICAgICAgaWYgKGlz
VW5kZWZpbmVkKGF0dHIudmFsdWUpKSB7CisgICAgICAgIHZhciBpbnRlcnBvbGF0ZUZuID0gJGlu
dGVycG9sYXRlKGVsZW1lbnQudGV4dCgpLCB0cnVlKTsKKyAgICAgICAgaWYgKCFpbnRlcnBvbGF0
ZUZuKSB7CisgICAgICAgICAgYXR0ci4kc2V0KCd2YWx1ZScsIGVsZW1lbnQudGV4dCgpKTsKKyAg
ICAgICAgfQorICAgICAgfQorCisgICAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQs
IGF0dHIpIHsKKworICAgICAgICAvLyBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiBvdmVyIHVzaW5n
IF5eIHNpbmNlIHdlIGRvbid0IHdhbnQgdG8gaGF2ZSB0byBzZWFyY2gKKyAgICAgICAgLy8gYWxs
IHRoZSB3YXkgdG8gdGhlIHJvb3Qgb2YgdGhlIERPTSBmb3IgZXZlcnkgc2luZ2xlIG9wdGlvbiBl
bGVtZW50CisgICAgICAgIHZhciBzZWxlY3RDdHJsTmFtZSA9ICckc2VsZWN0Q29udHJvbGxlcics
CisgICAgICAgICAgICBwYXJlbnQgPSBlbGVtZW50LnBhcmVudCgpLAorICAgICAgICAgICAgc2Vs
ZWN0Q3RybCA9IHBhcmVudC5kYXRhKHNlbGVjdEN0cmxOYW1lKSB8fAorICAgICAgICAgICAgICBw
YXJlbnQucGFyZW50KCkuZGF0YShzZWxlY3RDdHJsTmFtZSk7IC8vIGluIGNhc2Ugd2UgYXJlIGlu
IG9wdGdyb3VwCisKKyAgICAgICAgLy8gT25seSB1cGRhdGUgdHJpZ2dlciBvcHRpb24gdXBkYXRl
cyBpZiB0aGlzIGlzIGFuIG9wdGlvbiB3aXRoaW4gYSBgc2VsZWN0YAorICAgICAgICAvLyB0aGF0
IGFsc28gaGFzIGBuZ01vZGVsYCBhdHRhY2hlZAorICAgICAgICBpZiAoc2VsZWN0Q3RybCAmJiBz
ZWxlY3RDdHJsLm5nTW9kZWxDdHJsKSB7CisKKyAgICAgICAgICBpZiAoaW50ZXJwb2xhdGVGbikg
eworICAgICAgICAgICAgc2NvcGUuJHdhdGNoKGludGVycG9sYXRlRm4sIGZ1bmN0aW9uIGludGVy
cG9sYXRlV2F0Y2hBY3Rpb24obmV3VmFsLCBvbGRWYWwpIHsKKyAgICAgICAgICAgICAgYXR0ci4k
c2V0KCd2YWx1ZScsIG5ld1ZhbCk7CisgICAgICAgICAgICAgIGlmIChvbGRWYWwgIT09IG5ld1Zh
bCkgeworICAgICAgICAgICAgICAgIHNlbGVjdEN0cmwucmVtb3ZlT3B0aW9uKG9sZFZhbCk7Cisg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgc2VsZWN0Q3RybC5hZGRPcHRpb24obmV3VmFs
LCBlbGVtZW50KTsKKyAgICAgICAgICAgICAgc2VsZWN0Q3RybC5uZ01vZGVsQ3RybC4kcmVuZGVy
KCk7CisgICAgICAgICAgICAgIGNocm9tZUhhY2soZWxlbWVudCk7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2VsZWN0Q3RybC5hZGRPcHRpb24oYXR0
ci52YWx1ZSwgZWxlbWVudCk7CisgICAgICAgICAgICBzZWxlY3RDdHJsLm5nTW9kZWxDdHJsLiRy
ZW5kZXIoKTsKKyAgICAgICAgICAgIGNocm9tZUhhY2soZWxlbWVudCk7CisgICAgICAgICAgfQor
CisgICAgICAgICAgZWxlbWVudC5vbignJGRlc3Ryb3knLCBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIHNlbGVjdEN0cmwucmVtb3ZlT3B0aW9uKGF0dHIudmFsdWUpOworICAgICAgICAgICAgc2Vs
ZWN0Q3RybC5uZ01vZGVsQ3RybC4kcmVuZGVyKCk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0K
KyAgICAgIH07CisgICAgfQorICB9OworfV07CisKK3ZhciBzdHlsZURpcmVjdGl2ZSA9IHZhbHVl
Rm4oeworICByZXN0cmljdDogJ0UnLAorICB0ZXJtaW5hbDogZmFsc2UKK30pOworCit2YXIgcmVx
dWlyZWREaXJlY3RpdmUgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIHsKKyAgICByZXN0cmljdDog
J0EnLAorICAgIHJlcXVpcmU6ICc/bmdNb2RlbCcsCisgICAgbGluazogZnVuY3Rpb24oc2NvcGUs
IGVsbSwgYXR0ciwgY3RybCkgeworICAgICAgaWYgKCFjdHJsKSByZXR1cm47CisgICAgICBhdHRy
LnJlcXVpcmVkID0gdHJ1ZTsgLy8gZm9yY2UgdHJ1dGh5IGluIGNhc2Ugd2UgYXJlIG9uIG5vbiBp
bnB1dCBlbGVtZW50CisKKyAgICAgIGN0cmwuJHZhbGlkYXRvcnMucmVxdWlyZWQgPSBmdW5jdGlv
bihtb2RlbFZhbHVlLCB2aWV3VmFsdWUpIHsKKyAgICAgICAgcmV0dXJuICFhdHRyLnJlcXVpcmVk
IHx8ICFjdHJsLiRpc0VtcHR5KHZpZXdWYWx1ZSk7CisgICAgICB9OworCisgICAgICBhdHRyLiRv
YnNlcnZlKCdyZXF1aXJlZCcsIGZ1bmN0aW9uKCkgeworICAgICAgICBjdHJsLiR2YWxpZGF0ZSgp
OworICAgICAgfSk7CisgICAgfQorICB9OworfTsKKworCit2YXIgcGF0dGVybkRpcmVjdGl2ZSA9
IGZ1bmN0aW9uKCkgeworICByZXR1cm4geworICAgIHJlc3RyaWN0OiAnQScsCisgICAgcmVxdWly
ZTogJz9uZ01vZGVsJywKKyAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxtLCBhdHRyLCBjdHJs
KSB7CisgICAgICBpZiAoIWN0cmwpIHJldHVybjsKKworICAgICAgdmFyIHJlZ2V4cCwgcGF0dGVy
bkV4cCA9IGF0dHIubmdQYXR0ZXJuIHx8IGF0dHIucGF0dGVybjsKKyAgICAgIGF0dHIuJG9ic2Vy
dmUoJ3BhdHRlcm4nLCBmdW5jdGlvbihyZWdleCkgeworICAgICAgICBpZiAoaXNTdHJpbmcocmVn
ZXgpICYmIHJlZ2V4Lmxlbmd0aCA+IDApIHsKKyAgICAgICAgICByZWdleCA9IG5ldyBSZWdFeHAo
J14nICsgcmVnZXggKyAnJCcpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlZ2V4ICYmICFy
ZWdleC50ZXN0KSB7CisgICAgICAgICAgdGhyb3cgbWluRXJyKCduZ1BhdHRlcm4nKSgnbm9yZWdl
eHAnLAorICAgICAgICAgICAgJ0V4cGVjdGVkIHswfSB0byBiZSBhIFJlZ0V4cCBidXQgd2FzIHsx
fS4gRWxlbWVudDogezJ9JywgcGF0dGVybkV4cCwKKyAgICAgICAgICAgIHJlZ2V4LCBzdGFydGlu
Z1RhZyhlbG0pKTsKKyAgICAgICAgfQorCisgICAgICAgIHJlZ2V4cCA9IHJlZ2V4IHx8IHVuZGVm
aW5lZDsKKyAgICAgICAgY3RybC4kdmFsaWRhdGUoKTsKKyAgICAgIH0pOworCisgICAgICBjdHJs
LiR2YWxpZGF0b3JzLnBhdHRlcm4gPSBmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICByZXR1cm4g
Y3RybC4kaXNFbXB0eSh2YWx1ZSkgfHwgaXNVbmRlZmluZWQocmVnZXhwKSB8fCByZWdleHAudGVz
dCh2YWx1ZSk7CisgICAgICB9OworICAgIH0KKyAgfTsKK307CisKKwordmFyIG1heGxlbmd0aERp
cmVjdGl2ZSA9IGZ1bmN0aW9uKCkgeworICByZXR1cm4geworICAgIHJlc3RyaWN0OiAnQScsCisg
ICAgcmVxdWlyZTogJz9uZ01vZGVsJywKKyAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxtLCBh
dHRyLCBjdHJsKSB7CisgICAgICBpZiAoIWN0cmwpIHJldHVybjsKKworICAgICAgdmFyIG1heGxl
bmd0aCA9IC0xOworICAgICAgYXR0ci4kb2JzZXJ2ZSgnbWF4bGVuZ3RoJywgZnVuY3Rpb24odmFs
dWUpIHsKKyAgICAgICAgdmFyIGludFZhbCA9IHRvSW50KHZhbHVlKTsKKyAgICAgICAgbWF4bGVu
Z3RoID0gaXNOYU4oaW50VmFsKSA/IC0xIDogaW50VmFsOworICAgICAgICBjdHJsLiR2YWxpZGF0
ZSgpOworICAgICAgfSk7CisgICAgICBjdHJsLiR2YWxpZGF0b3JzLm1heGxlbmd0aCA9IGZ1bmN0
aW9uKG1vZGVsVmFsdWUsIHZpZXdWYWx1ZSkgeworICAgICAgICByZXR1cm4gKG1heGxlbmd0aCA8
IDApIHx8IGN0cmwuJGlzRW1wdHkodmlld1ZhbHVlKSB8fCAodmlld1ZhbHVlLmxlbmd0aCA8PSBt
YXhsZW5ndGgpOworICAgICAgfTsKKyAgICB9CisgIH07Cit9OworCit2YXIgbWlubGVuZ3RoRGly
ZWN0aXZlID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiB7CisgICAgcmVzdHJpY3Q6ICdBJywKKyAg
ICByZXF1aXJlOiAnP25nTW9kZWwnLAorICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbG0sIGF0
dHIsIGN0cmwpIHsKKyAgICAgIGlmICghY3RybCkgcmV0dXJuOworCisgICAgICB2YXIgbWlubGVu
Z3RoID0gMDsKKyAgICAgIGF0dHIuJG9ic2VydmUoJ21pbmxlbmd0aCcsIGZ1bmN0aW9uKHZhbHVl
KSB7CisgICAgICAgIG1pbmxlbmd0aCA9IHRvSW50KHZhbHVlKSB8fCAwOworICAgICAgICBjdHJs
LiR2YWxpZGF0ZSgpOworICAgICAgfSk7CisgICAgICBjdHJsLiR2YWxpZGF0b3JzLm1pbmxlbmd0
aCA9IGZ1bmN0aW9uKG1vZGVsVmFsdWUsIHZpZXdWYWx1ZSkgeworICAgICAgICByZXR1cm4gY3Ry
bC4kaXNFbXB0eSh2aWV3VmFsdWUpIHx8IHZpZXdWYWx1ZS5sZW5ndGggPj0gbWlubGVuZ3RoOwor
ICAgICAgfTsKKyAgICB9CisgIH07Cit9OworCisgIGlmICh3aW5kb3cuYW5ndWxhci5ib290c3Ry
YXApIHsKKyAgICAvL0FuZ3VsYXJKUyBpcyBhbHJlYWR5IGxvYWRlZCwgc28gd2UgY2FuIHJldHVy
biBoZXJlLi4uCisgICAgY29uc29sZS5sb2coJ1dBUk5JTkc6IFRyaWVkIHRvIGxvYWQgYW5ndWxh
ciBtb3JlIHRoYW4gb25jZS4nKTsKKyAgICByZXR1cm47CisgIH0KKworICAvL3RyeSB0byBiaW5k
IHRvIGpxdWVyeSBub3cgc28gdGhhdCBvbmUgY2FuIHdyaXRlIGpxTGl0ZShkb2N1bWVudCkucmVh
ZHkoKQorICAvL2J1dCB3ZSB3aWxsIHJlYmluZCBvbiBib290c3RyYXAgYWdhaW4uCisgIGJpbmRK
UXVlcnkoKTsKKworICBwdWJsaXNoRXh0ZXJuYWxBUEkoYW5ndWxhcik7CisKKyAganFMaXRlKGRv
Y3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKKyAgICBhbmd1bGFySW5pdChkb2N1bWVudCwgYm9v
dHN0cmFwKTsKKyAgfSk7CisKK30pKHdpbmRvdywgZG9jdW1lbnQpOworCishd2luZG93LmFuZ3Vs
YXIuJCRjc3AoKSAmJiB3aW5kb3cuYW5ndWxhci5lbGVtZW50KGRvY3VtZW50LmhlYWQpLnByZXBl
bmQoJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+QGNoYXJzZXQgIlVURi04IjtbbmdcXDpjbG9ha10s
W25nLWNsb2FrXSxbZGF0YS1uZy1jbG9ha10sW3gtbmctY2xvYWtdLC5uZy1jbG9haywueC1uZy1j
bG9haywubmctaGlkZTpub3QoLm5nLWhpZGUtYW5pbWF0ZSl7ZGlzcGxheTpub25lICFpbXBvcnRh
bnQ7fW5nXFw6Zm9ybXtkaXNwbGF5OmJsb2NrO30ubmctYW5pbWF0ZS1zaGlte3Zpc2liaWxpdHk6
aGlkZGVuO30ubmctYW5jaG9ye3Bvc2l0aW9uOmFic29sdXRlO308L3N0eWxlPicpOwpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9u
b2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL2luZGV4LmNzcyBiL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3Vs
YXJqcy9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL2luZGV4LmNzcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
N2VhMTgwMTYxMjEyNmYxZGI2NWNlMDU2OGYyYTAyMzczYjkzYjU1Ci0tLSAvZGV2L251bGwKKysr
IGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvaW5k
ZXguY3NzCkBAIC0wLDAgKzEsMzc4IEBACitodG1sLAorYm9keSB7CisgICAgbWFyZ2luOiAwOwor
ICAgIHBhZGRpbmc6IDA7Cit9CisKK2J1dHRvbiB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRp
bmc6IDA7CisgICAgYm9yZGVyOiAwOworICAgIGJhY2tncm91bmQ6IG5vbmU7CisgICAgZm9udC1z
aXplOiAxMDAlOworICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICBmb250LWZhbWls
eTogaW5oZXJpdDsKKyAgICBmb250LXdlaWdodDogaW5oZXJpdDsKKyAgICBjb2xvcjogaW5oZXJp
dDsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CisgICAgYXBwZWFyYW5jZTogbm9uZTsK
KyAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICAtbW96LWZvbnQt
c21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICBmb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7
Cit9CisKK2JvZHkgeworICAgIGZvbnQ6IDE0cHggJ0hlbHZldGljYSBOZXVlJywgSGVsdmV0aWNh
LCBBcmlhbCwgc2Fucy1zZXJpZjsKKyAgICBsaW5lLWhlaWdodDogMS40ZW07CisgICAgYmFja2dy
b3VuZDogI2Y1ZjVmNTsKKyAgICBjb2xvcjogIzRkNGQ0ZDsKKyAgICBtaW4td2lkdGg6IDIzMHB4
OworICAgIG1heC13aWR0aDogNTUwcHg7CisgICAgbWFyZ2luOiAwIGF1dG87CisgICAgLXdlYmtp
dC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgLW1vei1mb250LXNtb290aGluZzog
YW50aWFsaWFzZWQ7CisgICAgZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAgIGZvbnQt
d2VpZ2h0OiAzMDA7Cit9CisKK2J1dHRvbiwKK2lucHV0W3R5cGU9ImNoZWNrYm94Il0geworICAg
IG91dGxpbmU6IG5vbmU7Cit9CisKKy5oaWRkZW4geworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisK
KyN0b2RvYXBwIHsKKyAgICBiYWNrZ3JvdW5kOiAjZmZmOworICAgIG1hcmdpbjogMTMwcHggMCA0
MHB4IDA7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIGJveC1zaGFkb3c6IDAgMnB4IDRw
eCAwIHJnYmEoMCwgMCwgMCwgMC4yKSwKKyAgICAgICAgICAgICAgICAwIDI1cHggNTBweCAwIHJn
YmEoMCwgMCwgMCwgMC4xKTsKK30KKworI3RvZG9hcHAgaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxh
Y2Vob2xkZXIgeworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKKyAgICBmb250LXdlaWdodDogMzAw
OworICAgIGNvbG9yOiAjZTZlNmU2OworfQorCisjdG9kb2FwcCBpbnB1dDo6LW1vei1wbGFjZWhv
bGRlciB7CisgICAgZm9udC1zdHlsZTogaXRhbGljOworICAgIGZvbnQtd2VpZ2h0OiAzMDA7Cisg
ICAgY29sb3I6ICNlNmU2ZTY7Cit9CisKKyN0b2RvYXBwIGlucHV0OjppbnB1dC1wbGFjZWhvbGRl
ciB7CisgICAgZm9udC1zdHlsZTogaXRhbGljOworICAgIGZvbnQtd2VpZ2h0OiAzMDA7CisgICAg
Y29sb3I6ICNlNmU2ZTY7Cit9CisKKyN0b2RvYXBwIGgxIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1
dGU7CisgICAgdG9wOiAtMTU1cHg7CisgICAgd2lkdGg6IDEwMCU7CisgICAgZm9udC1zaXplOiAx
MDBweDsKKyAgICBmb250LXdlaWdodDogMTAwOworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAg
ICBjb2xvcjogcmdiYSgxNzUsIDQ3LCA0NywgMC4xNSk7CisgICAgLXdlYmtpdC10ZXh0LXJlbmRl
cmluZzogb3B0aW1pemVMZWdpYmlsaXR5OworICAgIC1tb3otdGV4dC1yZW5kZXJpbmc6IG9wdGlt
aXplTGVnaWJpbGl0eTsKKyAgICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5Owor
fQorCisjbmV3LXRvZG8sCisuZWRpdCB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIG1h
cmdpbjogMDsKKyAgICB3aWR0aDogMTAwJTsKKyAgICBmb250LXNpemU6IDI0cHg7CisgICAgZm9u
dC1mYW1pbHk6IGluaGVyaXQ7CisgICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7CisgICAgbGluZS1o
ZWlnaHQ6IDEuNGVtOworICAgIGJvcmRlcjogMDsKKyAgICBvdXRsaW5lOiBub25lOworICAgIGNv
bG9yOiBpbmhlcml0OworICAgIHBhZGRpbmc6IDZweDsKKyAgICBib3JkZXI6IDFweCBzb2xpZCAj
OTk5OworICAgIGJveC1zaGFkb3c6IGluc2V0IDAgLTFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAu
Mik7CisgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICAtd2Via2l0LWZvbnQtc21vb3Ro
aW5nOiBhbnRpYWxpYXNlZDsKKyAgICAtbW96LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsK
KyAgICBmb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Cit9CisKKyNuZXctdG9kbyB7CisgICAg
cGFkZGluZzogMTZweCAxNnB4IDE2cHggNjBweDsKKyAgICBib3JkZXI6IG5vbmU7CisgICAgYmFj
a2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjAwMyk7CisgICAgYm94LXNoYWRvdzogaW5zZXQgMCAt
MnB4IDFweCByZ2JhKDAsMCwwLDAuMDMpOworfQorCisjbWFpbiB7CisgICAgcG9zaXRpb246IHJl
bGF0aXZlOworICAgIHotaW5kZXg6IDI7CisgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNmU2
ZTY7Cit9CisKK2xhYmVsW2Zvcj0ndG9nZ2xlLWFsbCddIHsKKyAgICBkaXNwbGF5OiBub25lOwor
fQorCisjdG9nZ2xlLWFsbCB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogLTU1
cHg7CisgICAgbGVmdDogLTEycHg7CisgICAgd2lkdGg6IDYwcHg7CisgICAgaGVpZ2h0OiAzNHB4
OworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBib3JkZXI6IG5vbmU7IC8qIE1vYmlsZSBT
YWZhcmkgKi8KK30KKworI3RvZ2dsZS1hbGw6YmVmb3JlIHsKKyAgICBjb250ZW50OiAn4p2vJzsK
KyAgICBmb250LXNpemU6IDIycHg7CisgICAgY29sb3I6ICNlNmU2ZTY7CisgICAgcGFkZGluZzog
MTBweCAyN3B4IDEwcHggMjdweDsKK30KKworI3RvZ2dsZS1hbGw6Y2hlY2tlZDpiZWZvcmUgewor
ICAgIGNvbG9yOiAjNzM3MzczOworfQorCisjdG9kby1saXN0IHsKKyAgICBtYXJnaW46IDA7Cisg
ICAgcGFkZGluZzogMDsKKyAgICBsaXN0LXN0eWxlOiBub25lOworfQorCisjdG9kby1saXN0IGxp
IHsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgZm9udC1zaXplOiAyNHB4OworICAgIGJv
cmRlci1ib3R0b206IDFweCBzb2xpZCAjZWRlZGVkOworfQorCisjdG9kby1saXN0IGxpOmxhc3Qt
Y2hpbGQgeworICAgIGJvcmRlci1ib3R0b206IG5vbmU7Cit9CisKKyN0b2RvLWxpc3QgbGkuZWRp
dGluZyB7CisgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKKyAgICBwYWRkaW5nOiAwOworfQorCisj
dG9kby1saXN0IGxpLmVkaXRpbmcgLmVkaXQgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIHdp
ZHRoOiA1MDZweDsKKyAgICBwYWRkaW5nOiAxM3B4IDE3cHggMTJweCAxN3B4OworICAgIG1hcmdp
bjogMCAwIDAgNDNweDsKK30KKworI3RvZG8tbGlzdCBsaS5lZGl0aW5nIC52aWV3IHsKKyAgICBk
aXNwbGF5OiBub25lOworfQorCisjdG9kby1saXN0IGxpIC50b2dnbGUgeworICAgIHRleHQtYWxp
Z246IGNlbnRlcjsKKyAgICB3aWR0aDogNDBweDsKKyAgICAvKiBhdXRvLCBzaW5jZSBub24tV2Vi
S2l0IGJyb3dzZXJzIGRvZXNuJ3Qgc3VwcG9ydCBpbnB1dCBzdHlsaW5nICovCisgICAgaGVpZ2h0
OiBhdXRvOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAgYm90dG9t
OiAwOworICAgIG1hcmdpbjogYXV0byAwOworICAgIGJvcmRlcjogbm9uZTsgLyogTW9iaWxlIFNh
ZmFyaSAqLworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKKyAgICBhcHBlYXJhbmNlOiBu
b25lOworfQorCisjdG9kby1saXN0IGxpIC50b2dnbGU6YWZ0ZXIgeworICAgIGNvbnRlbnQ6IHVy
bCgnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgdmlld0JveD0iLTEwIC0xOCAxMDAgMTM1
Ij48Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZWRl
ZGVkIiBzdHJva2Utd2lkdGg9IjMiLz48L3N2Zz4nKTsKK30KKworI3RvZG8tbGlzdCBsaSAudG9n
Z2xlOmNoZWNrZWQ6YWZ0ZXIgeworICAgIGNvbnRlbnQ6IHVybCgnZGF0YTppbWFnZS9zdmcreG1s
O3V0ZjgsPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIg
aGVpZ2h0PSI0MCIgdmlld0JveD0iLTEwIC0xOCAxMDAgMTM1Ij48Y2lyY2xlIGN4PSI1MCIgY3k9
IjUwIiByPSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYmRkYWQ1IiBzdHJva2Utd2lkdGg9IjMi
Lz48cGF0aCBmaWxsPSIjNWRjMmFmIiBkPSJNNzIgMjVMNDIgNzEgMjcgNTZsLTQgNCAyMCAyMCAz
NC01MnoiLz48L3N2Zz4nKTsKK30KKworI3RvZG8tbGlzdCBsaSBsYWJlbCB7CisgICAgd2hpdGUt
c3BhY2U6IHByZTsKKyAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOworICAgIHBhZGRpbmc6IDE1
cHggNjBweCAxNXB4IDE1cHg7CisgICAgbWFyZ2luLWxlZnQ6IDQ1cHg7CisgICAgZGlzcGxheTog
YmxvY2s7CisgICAgbGluZS1oZWlnaHQ6IDEuMjsKKyAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjRz
OworfQorCisjdG9kby1saXN0IGxpLmNvbXBsZXRlZCBsYWJlbCB7CisgICAgY29sb3I6ICNkOWQ5
ZDk7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Cit9CisKKyN0b2RvLWxpc3Qg
bGkgLmRlc3Ryb3kgeworICAgIGRpc3BsYXk6IG5vbmU7CisgICAgcG9zaXRpb246IGFic29sdXRl
OworICAgIHRvcDogMDsKKyAgICByaWdodDogMTBweDsKKyAgICBib3R0b206IDA7CisgICAgd2lk
dGg6IDQwcHg7CisgICAgaGVpZ2h0OiA0MHB4OworICAgIG1hcmdpbjogYXV0byAwOworICAgIGZv
bnQtc2l6ZTogMzBweDsKKyAgICBjb2xvcjogI2NjOWE5YTsKKyAgICBtYXJnaW4tYm90dG9tOiAx
MXB4OworICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnMgZWFzZS1vdXQ7Cit9CisKKyN0b2RvLWxp
c3QgbGkgLmRlc3Ryb3k6aG92ZXIgeworICAgIGNvbG9yOiAjYWY1YjVlOworfQorCisjdG9kby1s
aXN0IGxpIC5kZXN0cm95OmFmdGVyIHsKKyAgICBjb250ZW50OiAnw5cnOworfQorCisjdG9kby1s
aXN0IGxpOmhvdmVyIC5kZXN0cm95IHsKKyAgICBkaXNwbGF5OiBibG9jazsKK30KKworI3RvZG8t
bGlzdCBsaSAuZWRpdCB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworI3RvZG8tbGlzdCBsaS5l
ZGl0aW5nOmxhc3QtY2hpbGQgeworICAgIG1hcmdpbi1ib3R0b206IC0xcHg7Cit9CisKKyNmb290
ZXIgeworICAgIGNvbG9yOiAjNzc3OworICAgIHBhZGRpbmc6IDEwcHggMTVweDsKKyAgICBoZWln
aHQ6IDIwcHg7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIGJvcmRlci10b3A6IDFweCBz
b2xpZCAjZTZlNmU2OworfQorCisjZm9vdGVyOmJlZm9yZSB7CisgICAgY29udGVudDogJyc7Cisg
ICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHJpZ2h0OiAwOworICAgIGJvdHRvbTogMDsKKyAg
ICBsZWZ0OiAwOworICAgIGhlaWdodDogNTBweDsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworICAg
IGJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMiksCisgICAgICAgICAgICAg
ICAgMCA4cHggMCAtM3B4ICNmNmY2ZjYsCisgICAgICAgICAgICAgICAgMCA5cHggMXB4IC0zcHgg
cmdiYSgwLCAwLCAwLCAwLjIpLAorICAgICAgICAgICAgICAgIDAgMTZweCAwIC02cHggI2Y2ZjZm
NiwKKyAgICAgICAgICAgICAgICAwIDE3cHggMnB4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpOwor
fQorCisjdG9kby1jb3VudCB7CisgICAgZmxvYXQ6IGxlZnQ7CisgICAgdGV4dC1hbGlnbjogbGVm
dDsKK30KKworI3RvZG8tY291bnQgc3Ryb25nIHsKKyAgICBmb250LXdlaWdodDogMzAwOworfQor
CisjZmlsdGVycyB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7CisgICAgbGlzdC1z
dHlsZTogbm9uZTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgcmlnaHQ6IDA7CisgICAg
bGVmdDogMDsKK30KKworI2ZpbHRlcnMgbGkgeworICAgIGRpc3BsYXk6IGlubGluZTsKK30KKwor
I2ZpbHRlcnMgbGkgYSB7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAgbWFyZ2luOiAzcHg7Cisg
ICAgcGFkZGluZzogM3B4IDdweDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgYm9y
ZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CisgICAgYm9yZGVyLXJhZGl1czogM3B4OworfQor
CisjZmlsdGVycyBsaSBhLnNlbGVjdGVkLAorI2ZpbHRlcnMgbGkgYTpob3ZlciB7CisgICAgYm9y
ZGVyLWNvbG9yOiByZ2JhKDE3NSwgNDcsIDQ3LCAwLjEpOworfQorCisjZmlsdGVycyBsaSBhLnNl
bGVjdGVkIHsKKyAgICBib3JkZXItY29sb3I6IHJnYmEoMTc1LCA0NywgNDcsIDAuMik7Cit9CisK
KyNjbGVhci1jb21wbGV0ZWQsCitodG1sICNjbGVhci1jb21wbGV0ZWQ6YWN0aXZlIHsKKyAgICBm
bG9hdDogcmlnaHQ7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIGxpbmUtaGVpZ2h0OiAy
MHB4OworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBjdXJzb3I6IHBvaW50ZXI7Cisg
ICAgcG9zaXRpb246IHJlbGF0aXZlOworfQorCisjY2xlYXItY29tcGxldGVkOmhvdmVyIHsKKyAg
ICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworI2luZm8geworICAgIG1hcmdpbjog
NjVweCBhdXRvIDA7CisgICAgY29sb3I6ICNiZmJmYmY7CisgICAgZm9udC1zaXplOiAxMHB4Owor
ICAgIHRleHQtc2hhZG93OiAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKKyAgICB0
ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKKyNpbmZvIHAgeworICAgIGxpbmUtaGVpZ2h0OiAxOwor
fQorCisjaW5mbyBhIHsKKyAgICBjb2xvcjogaW5oZXJpdDsKKyAgICB0ZXh0LWRlY29yYXRpb246
IG5vbmU7CisgICAgZm9udC13ZWlnaHQ6IDQwMDsKK30KKworI2luZm8gYTpob3ZlciB7CisgICAg
dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy8qCisgICAgSGFjayB0byByZW1vdmUg
YmFja2dyb3VuZCBmcm9tIE1vYmlsZSBTYWZhcmkuCisgICAgQ2FuJ3QgdXNlIGl0IGdsb2JhbGx5
IHNpbmNlIGl0IGRlc3Ryb3lzIGNoZWNrYm94ZXMgaW4gRmlyZWZveAorKi8KK0BtZWRpYSBzY3Jl
ZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCkgeworICAgICN0b2dnbGUt
YWxsLAorICAgICN0b2RvLWxpc3QgbGkgLnRvZ2dsZSB7CisgICAgICAgIGJhY2tncm91bmQ6IG5v
bmU7CisgICAgfQorCisgICAgI3RvZG8tbGlzdCBsaSAudG9nZ2xlIHsKKyAgICAgICAgaGVpZ2h0
OiA0MHB4OworICAgIH0KKworICAgICN0b2dnbGUtYWxsIHsKKyAgICAgICAgLXdlYmtpdC10cmFu
c2Zvcm06IHJvdGF0ZSg5MGRlZyk7CisgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsK
KyAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworICAgICAgICBhcHBlYXJhbmNlOiBu
b25lOworICAgIH0KK30KKworQG1lZGlhIChtYXgtd2lkdGg6IDQzMHB4KSB7CisgICAgI2Zvb3Rl
ciB7CisgICAgICAgIGhlaWdodDogNTBweDsKKyAgICB9CisKKyAgICAjZmlsdGVycyB7CisgICAg
ICAgIGJvdHRvbTogMTBweDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1
bGFyanMvbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9wYWNrYWdlLmpzb24gYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9hbmd1bGFyanMvbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9wYWNrYWdlLmpzb24K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOGRjMzVkNmUwNGJmODhmODA5ZDYxNWQwMzljNmYyZmMwMmI5YWNlZAotLS0g
L2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9ub2RlX21vZHVsZXMvdG9kb212
Yy1hcHAtY3NzL3BhY2thZ2UuanNvbgpAQCAtMCwwICsxLDEwMyBAQAoreworICAiX2FyZ3MiOiBb
CisgICAgWworICAgICAgeworICAgICAgICAicmF3IjogInRvZG9tdmMtYXBwLWNzc0BeMS4wLjEi
LAorICAgICAgICAic2NvcGUiOiBudWxsLAorICAgICAgICAiZXNjYXBlZE5hbWUiOiAidG9kb212
Yy1hcHAtY3NzIiwKKyAgICAgICAgIm5hbWUiOiAidG9kb212Yy1hcHAtY3NzIiwKKyAgICAgICAg
InJhd1NwZWMiOiAiXjEuMC4xIiwKKyAgICAgICAgInNwZWMiOiAiPj0xLjAuMSA8Mi4wLjAiLAor
ICAgICAgICAidHlwZSI6ICJyYW5nZSIKKyAgICAgIH0sCisgICAgICAiL1VzZXJzL2FkZHlvL3By
b2plY3RzL3NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9hbmd1bGFyanMiCisgICAgXQorICBdLAorICAiX2Zyb20iOiAidG9kb212Yy1hcHAtY3NzQD49
MS4wLjEgPDIuMC4wIiwKKyAgIl9pZCI6ICJ0b2RvbXZjLWFwcC1jc3NAMS4wLjQiLAorICAiX2lu
Q2FjaGUiOiB0cnVlLAorICAiX2xvY2F0aW9uIjogIi90b2RvbXZjLWFwcC1jc3MiLAorICAiX25v
ZGVWZXJzaW9uIjogIjAuMTIuMCIsCisgICJfbnBtVXNlciI6IHsKKyAgICAibmFtZSI6ICJzaW5k
cmVzb3JodXMiLAorICAgICJlbWFpbCI6ICJzaW5kcmVzb3JodXNAZ21haWwuY29tIgorICB9LAor
ICAiX25wbVZlcnNpb24iOiAiMi41LjEiLAorICAiX3BoYW50b21DaGlsZHJlbiI6IHt9LAorICAi
X3JlcXVlc3RlZCI6IHsKKyAgICAicmF3IjogInRvZG9tdmMtYXBwLWNzc0BeMS4wLjEiLAorICAg
ICJzY29wZSI6IG51bGwsCisgICAgImVzY2FwZWROYW1lIjogInRvZG9tdmMtYXBwLWNzcyIsCisg
ICAgIm5hbWUiOiAidG9kb212Yy1hcHAtY3NzIiwKKyAgICAicmF3U3BlYyI6ICJeMS4wLjEiLAor
ICAgICJzcGVjIjogIj49MS4wLjEgPDIuMC4wIiwKKyAgICAidHlwZSI6ICJyYW5nZSIKKyAgfSwK
KyAgIl9yZXF1aXJlZEJ5IjogWworICAgICIvIgorICBdLAorICAiX3Jlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL3RvZG9tdmMtYXBwLWNzcy8tL3RvZG9tdmMtYXBwLWNzcy0x
LjAuNC50Z3oiLAorICAiX3NoYXN1bSI6ICJkMjUyOTI3OWE2ZGE1YmVmYjA2YjU1YzBjMzI0YzVm
Y2ZkOTRkNjU2IiwKKyAgIl9zaHJpbmt3cmFwIjogbnVsbCwKKyAgIl9zcGVjIjogInRvZG9tdmMt
YXBwLWNzc0BeMS4wLjEiLAorICAiX3doZXJlIjogIi9Vc2Vycy9hZGR5by9wcm9qZWN0cy9zcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpz
IiwKKyAgImF1dGhvciI6IHsKKyAgICAibmFtZSI6ICJTaW5kcmUgU29yaHVzIiwKKyAgICAiZW1h
aWwiOiAic2luZHJlc29yaHVzQGdtYWlsLmNvbSIsCisgICAgInVybCI6ICJzaW5kcmVzb3JodXMu
Y29tIgorICB9LAorICAiYnVncyI6IHsKKyAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS90
YXN0ZWpzL3RvZG9tdmMtYXBwLWNzcy9pc3N1ZXMiCisgIH0sCisgICJkZXBlbmRlbmNpZXMiOiB7
fSwKKyAgImRlc2NyaXB0aW9uIjogIkNTUyBmb3IgVG9kb01WQyBhcHBzIiwKKyAgImRldkRlcGVu
ZGVuY2llcyI6IHt9LAorICAiZGlyZWN0b3JpZXMiOiB7fSwKKyAgImRpc3QiOiB7CisgICAgInNo
YXN1bSI6ICJkMjUyOTI3OWE2ZGE1YmVmYjA2YjU1YzBjMzI0YzVmY2ZkOTRkNjU2IiwKKyAgICAi
dGFyYmFsbCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90b2RvbXZjLWFwcC1jc3MvLS90
b2RvbXZjLWFwcC1jc3MtMS4wLjQudGd6IgorICB9LAorICAiZmlsZXMiOiBbCisgICAgImluZGV4
LmNzcyIKKyAgXSwKKyAgImdpdEhlYWQiOiAiMWU0ZTM4ODg0YTM1MTkzZWFmMTgwOGE1YmE0NDQy
MTgzMjg2NzE4NCIsCisgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vdGFzdGVqcy90
b2RvbXZjLWFwcC1jc3MiLAorICAia2V5d29yZHMiOiBbCisgICAgInRvZG9tdmMiLAorICAgICJ0
YXN0ZWpzIiwKKyAgICAiYXBwIiwKKyAgICAidG9kbyIsCisgICAgInRlbXBsYXRlIiwKKyAgICAi
Y3NzIiwKKyAgICAic3R5bGUiLAorICAgICJzdHlsZXNoZWV0IgorICBdLAorICAibGljZW5zZSI6
ICJDQy1CWS00LjAiLAorICAibWFpbnRhaW5lcnMiOiBbCisgICAgeworICAgICAgIm5hbWUiOiAi
c2luZHJlc29yaHVzIiwKKyAgICAgICJlbWFpbCI6ICJzaW5kcmVzb3JodXNAZ21haWwuY29tIgor
ICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiYWRkeW9zbWFuaSIsCisgICAgICAiZW1haWwi
OiAiYWRkeW9zbWFuaUBnbWFpbC5jb20iCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJw
YXNzeSIsCisgICAgICAiZW1haWwiOiAicGhhcnRpZ0ByZHJlaS5uZXQiCisgICAgfSwKKyAgICB7
CisgICAgICAibmFtZSI6ICJzdGVwaGVucGx1c3BsdXMiLAorICAgICAgImVtYWlsIjogInNhd2No
dWtAZ21haWwuY29tIgorICAgIH0KKyAgXSwKKyAgIm5hbWUiOiAidG9kb212Yy1hcHAtY3NzIiwK
KyAgIm9wdGlvbmFsRGVwZW5kZW5jaWVzIjoge30sCisgICJyZWFkbWUiOiAiRVJST1I6IE5vIFJF
QURNRSBkYXRhIGZvdW5kISIsCisgICJyZXBvc2l0b3J5IjogeworICAgICJ0eXBlIjogImdpdCIs
CisgICAgInVybCI6ICJnaXQraHR0cHM6Ly9naXRodWIuY29tL3Rhc3RlanMvdG9kb212Yy1hcHAt
Y3NzLmdpdCIKKyAgfSwKKyAgInNjcmlwdHMiOiB7fSwKKyAgInZlcnNpb24iOiAiMS4wLjQiCit9
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvbm9kZV9tb2R1bGVzL3RvZG9tdmMt
YXBwLWNzcy9yZWFkbWUubWQgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvbm9kZV9tb2R1bGVzL3Rv
ZG9tdmMtYXBwLWNzcy9yZWFkbWUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmRkYmViZjAyNGMwNGFlYjYwMjBj
YWYxMzFhMmVkMDMxODkwODBhNQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3Vs
YXJqcy9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL3JlYWRtZS5tZApAQCAtMCwwICsxLDI4
IEBACisjIHRvZG9tdmMtYXBwLWNzcworCis+IENTUyBmb3IgVG9kb01WQyBhcHBzCisKKyFbXShz
Y3JlZW5zaG90LnBuZykKKworCisjIyBJbnN0YWxsCisKKworYGBgCiskIG5wbSBpbnN0YWxsIC0t
c2F2ZSB0b2RvbXZjLWFwcC1jc3MKK2BgYAorCisKKyMjIEdldHRpbmcgc3RhcnRlZAorCitgYGBo
dG1sCis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Im5vZGVfbW9kdWxlcy90b2RvbXZjLWFw
cC1jc3MvaW5kZXguY3NzIj4KK2BgYAorCitTZWUgdGhlIFtUb2RvTVZDIGFwcCB0ZW1wbGF0ZV0o
aHR0cHM6Ly9naXRodWIuY29tL3Rhc3RlanMvdG9kb212Yy1hcHAtdGVtcGxhdGUpLgorCisKKwor
IyMgTGljZW5zZQorCis8YSByZWw9ImxpY2Vuc2UiIGhyZWY9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1v
bnMub3JnL2xpY2Vuc2VzL2J5LzQuMC9kZWVkLmVuX1VTIj48aW1nIGFsdD0iQ3JlYXRpdmUgQ29t
bW9ucyBMaWNlbnNlIiBzdHlsZT0iYm9yZGVyLXdpZHRoOjAiIHNyYz0iaHR0cDovL2kuY3JlYXRp
dmVjb21tb25zLm9yZy9sL2J5LzQuMC84MHgxNS5wbmciIC8+PC9hPjxiciAvPlRoaXMgPHNwYW4g
eG1sbnM6ZGN0PSJodHRwOi8vcHVybC5vcmcvZGMvdGVybXMvIiBocmVmPSJodHRwOi8vcHVybC5v
cmcvZGMvZGNtaXR5cGUvSW50ZXJhY3RpdmVSZXNvdXJjZSIgcmVsPSJkY3Q6dHlwZSI+d29yazwv
c3Bhbj4gYnkgPGEgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgaHJl
Zj0iaHR0cDovL3NpbmRyZXNvcmh1cy5jb20iIHByb3BlcnR5PSJjYzphdHRyaWJ1dGlvbk5hbWUi
IHJlbD0iY2M6YXR0cmlidXRpb25VUkwiPlNpbmRyZSBTb3JodXM8L2E+IGlzIGxpY2Vuc2VkIHVu
ZGVyIGEgPGEgcmVsPSJsaWNlbnNlIiBocmVmPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9s
aWNlbnNlcy9ieS80LjAvZGVlZC5lbl9VUyI+Q3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbiA0
LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlPC9hPi4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2Fu
Z3VsYXJqcy9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MgYi9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9hbmd1bGFyanMvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjRkMjVkM2M4NGFjNmM2YWVmMjZiOTY4M2EyYmMxMGM2MWY5NjBjOGYKLS0tIC9kZXYvbnVs
bAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9u
L2Jhc2UuY3NzCkBAIC0wLDAgKzEsMTQxIEBACitociB7CisgICAgbWFyZ2luOiAyMHB4IDA7Cisg
ICAgYm9yZGVyOiAwOworICAgIGJvcmRlci10b3A6IDFweCBkYXNoZWQgI2M1YzVjNTsKKyAgICBi
b3JkZXItYm90dG9tOiAxcHggZGFzaGVkICNmN2Y3Zjc7Cit9CisKKy5sZWFybiBhIHsKKyAgICBm
b250LXdlaWdodDogbm9ybWFsOworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBjb2xv
cjogI2I4M2Y0NTsKK30KKworLmxlYXJuIGE6aG92ZXIgeworICAgIHRleHQtZGVjb3JhdGlvbjog
dW5kZXJsaW5lOworICAgIGNvbG9yOiAjNzg3ZTdlOworfQorCisubGVhcm4gaDMsCisubGVhcm4g
aDQsCisubGVhcm4gaDUgeworICAgIG1hcmdpbjogMTBweCAwOworICAgIGZvbnQtd2VpZ2h0OiA1
MDA7CisgICAgbGluZS1oZWlnaHQ6IDEuMjsKKyAgICBjb2xvcjogIzAwMDsKK30KKworLmxlYXJu
IGgzIHsKKyAgICBmb250LXNpemU6IDI0cHg7Cit9CisKKy5sZWFybiBoNCB7CisgICAgZm9udC1z
aXplOiAxOHB4OworfQorCisubGVhcm4gaDUgeworICAgIG1hcmdpbi1ib3R0b206IDA7CisgICAg
Zm9udC1zaXplOiAxNHB4OworfQorCisubGVhcm4gdWwgeworICAgIHBhZGRpbmc6IDA7CisgICAg
bWFyZ2luOiAwIDAgMzBweCAyNXB4OworfQorCisubGVhcm4gbGkgeworICAgIGxpbmUtaGVpZ2h0
OiAyMHB4OworfQorCisubGVhcm4gcCB7CisgICAgZm9udC1zaXplOiAxNXB4OworICAgIGZvbnQt
d2VpZ2h0OiAzMDA7CisgICAgbGluZS1oZWlnaHQ6IDEuMzsKKyAgICBtYXJnaW4tdG9wOiAwOwor
ICAgIG1hcmdpbi1ib3R0b206IDA7Cit9CisKKyNpc3N1ZS1jb3VudCB7CisgICAgZGlzcGxheTog
bm9uZTsKK30KKworLnF1b3RlIHsKKyAgICBib3JkZXI6IG5vbmU7CisgICAgbWFyZ2luOiAyMHB4
IDAgNjBweCAwOworfQorCisucXVvdGUgcCB7CisgICAgZm9udC1zdHlsZTogaXRhbGljOworfQor
CisucXVvdGUgcDpiZWZvcmUgeworICAgIGNvbnRlbnQ6ICfigJwnOworICAgIGZvbnQtc2l6ZTog
NTBweDsKKyAgICBvcGFjaXR5OiAuMTU7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRv
cDogLTIwcHg7CisgICAgbGVmdDogM3B4OworfQorCisucXVvdGUgcDphZnRlciB7CisgICAgY29u
dGVudDogJ+KAnSc7CisgICAgZm9udC1zaXplOiA1MHB4OworICAgIG9wYWNpdHk6IC4xNTsKKyAg
ICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgYm90dG9tOiAtNDJweDsKKyAgICByaWdodDogM3B4
OworfQorCisucXVvdGUgZm9vdGVyIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgYm90
dG9tOiAtNDBweDsKKyAgICByaWdodDogMDsKK30KKworLnF1b3RlIGZvb3RlciBpbWcgeworICAg
IGJvcmRlci1yYWRpdXM6IDNweDsKK30KKworLnF1b3RlIGZvb3RlciBhIHsKKyAgICBtYXJnaW4t
bGVmdDogNXB4OworICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cit9CisKKy5zcGVlY2gtYnVi
YmxlIHsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgcGFkZGluZzogMTBweDsKKyAgICBi
YWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIC4wNCk7CisgICAgYm9yZGVyLXJhZGl1czogNXB4Owor
fQorCisuc3BlZWNoLWJ1YmJsZTphZnRlciB7CisgICAgY29udGVudDogJyc7CisgICAgcG9zaXRp
b246IGFic29sdXRlOworICAgIHRvcDogMTAwJTsKKyAgICByaWdodDogMzBweDsKKyAgICBib3Jk
ZXI6IDEzcHggc29saWQgdHJhbnNwYXJlbnQ7CisgICAgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgw
LCAwLCAwLCAuMDQpOworfQorCisubGVhcm4tYmFyID4gLmxlYXJuIHsKKyAgICBwb3NpdGlvbjog
YWJzb2x1dGU7CisgICAgd2lkdGg6IDI3MnB4OworICAgIHRvcDogOHB4OworICAgIGxlZnQ6IC0z
MDBweDsKKyAgICBwYWRkaW5nOiAxMHB4OworICAgIGJvcmRlci1yYWRpdXM6IDVweDsKKyAgICBi
YWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIC42KTsKKyAgICB0cmFuc2l0aW9u
LXByb3BlcnR5OiBsZWZ0OworICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDUwMG1zOworfQorCitA
bWVkaWEgKG1pbi13aWR0aDogODk5cHgpIHsKKyAgICAubGVhcm4tYmFyIHsKKyAgICAgICAgd2lk
dGg6IGF1dG87CisgICAgICAgIHBhZGRpbmctbGVmdDogMzAwcHg7CisgICAgfQorCisgICAgLmxl
YXJuLWJhciA+IC5sZWFybiB7CisgICAgICAgIGxlZnQ6IDhweDsKKyAgICB9Cit9CmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jh
c2UuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9u
L2Jhc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uODFlMDA2YmM1MDJkZGM0Yzc0ZjQ3YmQxM2E4MzkyMjc3Zjgz
MGRiOAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9ub2RlX21vZHVs
ZXMvdG9kb212Yy1jb21tb24vYmFzZS5qcwpAQCAtMCwwICsxLDI0OSBAQAorLyogZ2xvYmFsIF8g
Ki8KKyhmdW5jdGlvbiAoKSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgLyoganNoaW50IGln
bm9yZTpzdGFydCAqLworICAgIC8vIFVuZGVyc2NvcmUncyBUZW1wbGF0ZSBNb2R1bGUKKyAgICAv
LyBDb3VydGVzeSBvZiB1bmRlcnNjb3JlanMub3JnCisgICAgdmFyIF8gPSAoZnVuY3Rpb24gKF8p
IHsKKyAgICAgICAgXy5kZWZhdWx0cyA9IGZ1bmN0aW9uIChvYmplY3QpIHsKKyAgICAgICAgICAg
IGlmICghb2JqZWN0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGZvciAodmFyIGFyZ3NJbmRleCA9IDEsIGFyZ3NMZW5ndGggPSBh
cmd1bWVudHMubGVuZ3RoOyBhcmdzSW5kZXggPCBhcmdzTGVuZ3RoOyBhcmdzSW5kZXgrKykgewor
ICAgICAgICAgICAgICAgIHZhciBpdGVyYWJsZSA9IGFyZ3VtZW50c1thcmdzSW5kZXhdOworICAg
ICAgICAgICAgICAgIGlmIChpdGVyYWJsZSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHZh
ciBrZXkgaW4gaXRlcmFibGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Rb
a2V5XSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0W2tleV0g
PSBpdGVyYWJsZVtrZXldOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIG9iamVjdDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEJ5IGRlZmF1bHQsIFVuZGVy
c2NvcmUgdXNlcyBFUkItc3R5bGUgdGVtcGxhdGUgZGVsaW1pdGVycywgY2hhbmdlIHRoZQorICAg
ICAgICAvLyBmb2xsb3dpbmcgdGVtcGxhdGUgc2V0dGluZ3MgdG8gdXNlIGFsdGVybmF0aXZlIGRl
bGltaXRlcnMuCisgICAgICAgIF8udGVtcGxhdGVTZXR0aW5ncyA9IHsKKyAgICAgICAgICAgIGV2
YWx1YXRlICAgIDogLzwlKFtcc1xTXSs/KSU+L2csCisgICAgICAgICAgICBpbnRlcnBvbGF0ZSA6
IC88JT0oW1xzXFNdKz8pJT4vZywKKyAgICAgICAgICAgIGVzY2FwZSAgICAgIDogLzwlLShbXHNc
U10rPyklPi9nCisgICAgICAgIH07CisKKyAgICAgICAgLy8gV2hlbiBjdXN0b21pemluZyBgdGVt
cGxhdGVTZXR0aW5nc2AsIGlmIHlvdSBkb24ndCB3YW50IHRvIGRlZmluZSBhbgorICAgICAgICAv
LyBpbnRlcnBvbGF0aW9uLCBldmFsdWF0aW9uIG9yIGVzY2FwaW5nIHJlZ2V4LCB3ZSBuZWVkIG9u
ZSB0aGF0IGlzCisgICAgICAgIC8vIGd1YXJhbnRlZWQgbm90IHRvIG1hdGNoLgorICAgICAgICB2
YXIgbm9NYXRjaCA9IC8oLileLzsKKworICAgICAgICAvLyBDZXJ0YWluIGNoYXJhY3RlcnMgbmVl
ZCB0byBiZSBlc2NhcGVkIHNvIHRoYXQgdGhleSBjYW4gYmUgcHV0IGludG8gYQorICAgICAgICAv
LyBzdHJpbmcgbGl0ZXJhbC4KKyAgICAgICAgdmFyIGVzY2FwZXMgPSB7CisgICAgICAgICAgICAi
JyI6ICAgICAgIiciLAorICAgICAgICAgICAgJ1xcJzogICAgICdcXCcsCisgICAgICAgICAgICAn
XHInOiAgICAgJ3InLAorICAgICAgICAgICAgJ1xuJzogICAgICduJywKKyAgICAgICAgICAgICdc
dCc6ICAgICAndCcsCisgICAgICAgICAgICAnXHUyMDI4JzogJ3UyMDI4JywKKyAgICAgICAgICAg
ICdcdTIwMjknOiAndTIwMjknCisgICAgICAgIH07CisKKyAgICAgICAgdmFyIGVzY2FwZXIgPSAv
XFx8J3xccnxcbnxcdHxcdTIwMjh8XHUyMDI5L2c7CisKKyAgICAgICAgLy8gSmF2YVNjcmlwdCBt
aWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlvbi4K
KyAgICAgICAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGlt
aXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLAorICAgICAgICAvLyBhbmQgY29ycmVjdGx5IGVz
Y2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS4KKyAgICAgICAgXy50ZW1wbGF0
ZSA9IGZ1bmN0aW9uKHRleHQsIGRhdGEsIHNldHRpbmdzKSB7CisgICAgICAgICAgICB2YXIgcmVu
ZGVyOworICAgICAgICAgICAgc2V0dGluZ3MgPSBfLmRlZmF1bHRzKHt9LCBzZXR0aW5ncywgXy50
ZW1wbGF0ZVNldHRpbmdzKTsKKworICAgICAgICAgICAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGlu
dG8gb25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uCisgICAgICAgICAgICB2
YXIgbWF0Y2hlciA9IG5ldyBSZWdFeHAoWworICAgICAgICAgICAgICAgIChzZXR0aW5ncy5lc2Nh
cGUgfHwgbm9NYXRjaCkuc291cmNlLAorICAgICAgICAgICAgICAgIChzZXR0aW5ncy5pbnRlcnBv
bGF0ZSB8fCBub01hdGNoKS5zb3VyY2UsCisgICAgICAgICAgICAgICAgKHNldHRpbmdzLmV2YWx1
YXRlIHx8IG5vTWF0Y2gpLnNvdXJjZQorICAgICAgICAgICAgXS5qb2luKCd8JykgKyAnfCQnLCAn
ZycpOworCisgICAgICAgICAgICAvLyBDb21waWxlIHRoZSB0ZW1wbGF0ZSBzb3VyY2UsIGVzY2Fw
aW5nIHN0cmluZyBsaXRlcmFscyBhcHByb3ByaWF0ZWx5LgorICAgICAgICAgICAgdmFyIGluZGV4
ID0gMDsKKyAgICAgICAgICAgIHZhciBzb3VyY2UgPSAiX19wKz0nIjsKKyAgICAgICAgICAgIHRl
eHQucmVwbGFjZShtYXRjaGVyLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlLCBpbnRlcnBvbGF0ZSwg
ZXZhbHVhdGUsIG9mZnNldCkgeworICAgICAgICAgICAgICAgIHNvdXJjZSArPSB0ZXh0LnNsaWNl
KGluZGV4LCBvZmZzZXQpCisgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGVzY2FwZXIsIGZ1
bmN0aW9uKG1hdGNoKSB7IHJldHVybiAnXFwnICsgZXNjYXBlc1ttYXRjaF07IH0pOworCisgICAg
ICAgICAgICAgICAgaWYgKGVzY2FwZSkgeworICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0g
IicrXG4oKF9fdD0oIiArIGVzY2FwZSArICIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcbici
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaW50ZXJwb2xhdGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9ICInK1xuKChfX3Q9KCIgKyBpbnRlcnBvbGF0
ZSArICIpKT09bnVsbD8nJzpfX3QpK1xuJyI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmIChldmFsdWF0ZSkgeworICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gIic7
XG4iICsgZXZhbHVhdGUgKyAiXG5fX3ArPSciOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBpbmRleCA9IG9mZnNldCArIG1hdGNoLmxlbmd0aDsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbWF0Y2g7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHNvdXJjZSArPSAiJztc
biI7CisKKyAgICAgICAgICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxh
Y2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuCisgICAgICAgICAgICBpZiAoIXNldHRpbmdz
LnZhcmlhYmxlKSBzb3VyY2UgPSAnd2l0aChvYmp8fHt9KXtcbicgKyBzb3VyY2UgKyAnfVxuJzsK
KworICAgICAgICAgICAgc291cmNlID0gInZhciBfX3QsX19wPScnLF9faj1BcnJheS5wcm90b3R5
cGUuam9pbiwiICsKKyAgICAgICAgICAgICAgICAicHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5j
YWxsKGFyZ3VtZW50cywnJyk7fTtcbiIgKworICAgICAgICAgICAgICAgIHNvdXJjZSArICJyZXR1
cm4gX19wO1xuIjsKKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICByZW5kZXIg
PSBuZXcgRnVuY3Rpb24oc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaicsICdfJywgc291cmNlKTsK
KyAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICBlLnNvdXJjZSA9IHNv
dXJjZTsKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoZGF0YSkgcmV0dXJuIHJlbmRlcihkYXRhLCBfKTsKKyAgICAgICAgICAgIHZhciB0
ZW1wbGF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVy
LmNhbGwodGhpcywgZGF0YSwgXyk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICAvLyBQ
cm92aWRlIHRoZSBjb21waWxlZCBmdW5jdGlvbiBzb3VyY2UgYXMgYSBjb252ZW5pZW5jZSBmb3Ig
cHJlY29tcGlsYXRpb24uCisgICAgICAgICAgICB0ZW1wbGF0ZS5zb3VyY2UgPSAnZnVuY3Rpb24o
JyArIChzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJykgKyAnKXtcbicgKyBzb3VyY2UgKyAnfSc7
CisKKyAgICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZTsKKyAgICAgICAgfTsKKworICAgICAgICBy
ZXR1cm4gXzsKKyAgICB9KSh7fSk7CisKKyAgICBpZiAobG9jYXRpb24uaG9zdG5hbWUgPT09ICd0
b2RvbXZjLmNvbScpIHsKKyAgICAgICAgKGZ1bmN0aW9uKGkscyxvLGcscixhLG0pe2lbJ0dvb2ds
ZUFuYWx5dGljc09iamVjdCddPXI7aVtyXT1pW3JdfHxmdW5jdGlvbigpeworICAgICAgICAoaVty
XS5xPWlbcl0ucXx8W10pLnB1c2goYXJndW1lbnRzKX0saVtyXS5sPTEqbmV3IERhdGUoKTthPXMu
Y3JlYXRlRWxlbWVudChvKSwKKyAgICAgICAgbT1zLmdldEVsZW1lbnRzQnlUYWdOYW1lKG8pWzBd
O2EuYXN5bmM9MTthLnNyYz1nO20ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxtKQorICAgICAg
ICB9KSh3aW5kb3csZG9jdW1lbnQsJ3NjcmlwdCcsJ2h0dHBzOi8vd3d3Lmdvb2dsZS1hbmFseXRp
Y3MuY29tL2FuYWx5dGljcy5qcycsJ2dhJyk7CisgICAgICAgIGdhKCdjcmVhdGUnLCAnVUEtMzEw
ODEwNjItMScsICdhdXRvJyk7CisgICAgICAgIGdhKCdzZW5kJywgJ3BhZ2V2aWV3Jyk7CisgICAg
fQorICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovCisKKyAgICBmdW5jdGlvbiByZWRpcmVjdCgp
IHsKKyAgICAgICAgaWYgKGxvY2F0aW9uLmhvc3RuYW1lID09PSAndGFzdGVqcy5naXRodWIuaW8n
KSB7CisgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gbG9jYXRpb24uaHJlZi5yZXBsYWNlKCd0
YXN0ZWpzLmdpdGh1Yi5pby90b2RvbXZjJywgJ3RvZG9tdmMuY29tJyk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBmaW5kUm9vdCgpIHsKKyAgICAgICAgdmFyIGJhc2UgPSBsb2Nh
dGlvbi5ocmVmLmluZGV4T2YoJ2V4YW1wbGVzLycpOworICAgICAgICByZXR1cm4gbG9jYXRpb24u
aHJlZi5zdWJzdHIoMCwgYmFzZSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZ2V0RmlsZShmaWxl
LCBjYWxsYmFjaykgeworICAgICAgICBpZiAoIWxvY2F0aW9uLmhvc3QpIHsKKyAgICAgICAgICAg
IHJldHVybiBjb25zb2xlLmluZm8oJ01pc3MgdGhlIGluZm8gYmFyPyBSdW4gVG9kb01WQyBmcm9t
IGEgc2VydmVyIHRvIGF2b2lkIGEgY3Jvc3Mtb3JpZ2luIGVycm9yLicpOworICAgICAgICB9CisK
KyAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworCisgICAgICAgIHhoci5v
cGVuKCdHRVQnLCBmaW5kUm9vdCgpICsgZmlsZSwgdHJ1ZSk7CisgICAgICAgIHhoci5zZW5kKCk7
CisKKyAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICh4
aHIuc3RhdHVzID09PSAyMDAgJiYgY2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFj
ayh4aHIucmVzcG9uc2VUZXh0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBMZWFybihsZWFybkpTT04sIGNvbmZpZykgeworICAgICAgICBpZiAoISh0
aGlzIGluc3RhbmNlb2YgTGVhcm4pKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IExlYXJuKGxl
YXJuSlNPTiwgY29uZmlnKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciB0ZW1wbGF0ZSwgZnJh
bWV3b3JrOworCisgICAgICAgIGlmICh0eXBlb2YgbGVhcm5KU09OICE9PSAnb2JqZWN0Jykgewor
ICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBsZWFybkpTT04gPSBKU09OLnBhcnNl
KGxlYXJuSlNPTik7CisgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbmZpZykg
eworICAgICAgICAgICAgdGVtcGxhdGUgPSBjb25maWcudGVtcGxhdGU7CisgICAgICAgICAgICBm
cmFtZXdvcmsgPSBjb25maWcuZnJhbWV3b3JrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF0
ZW1wbGF0ZSAmJiBsZWFybkpTT04udGVtcGxhdGVzKSB7CisgICAgICAgICAgICB0ZW1wbGF0ZSA9
IGxlYXJuSlNPTi50ZW1wbGF0ZXMudG9kb212YzsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgh
ZnJhbWV3b3JrICYmIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWZyYW1ld29ya10nKSkg
eworICAgICAgICAgICAgZnJhbWV3b3JrID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEt
ZnJhbWV3b3JrXScpLmRhdGFzZXQuZnJhbWV3b3JrOworICAgICAgICB9CisKKyAgICAgICAgdGhp
cy50ZW1wbGF0ZSA9IHRlbXBsYXRlOworCisgICAgICAgIGlmIChsZWFybkpTT04uYmFja2VuZCkg
eworICAgICAgICAgICAgdGhpcy5mcmFtZXdvcmtKU09OID0gbGVhcm5KU09OLmJhY2tlbmQ7Cisg
ICAgICAgICAgICB0aGlzLmZyYW1ld29ya0pTT04uaXNzdWVMYWJlbCA9IGZyYW1ld29yazsKKyAg
ICAgICAgICAgIHRoaXMuYXBwZW5kKHsKKyAgICAgICAgICAgICAgICBiYWNrZW5kOiB0cnVlCisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChsZWFybkpTT05bZnJhbWV3b3JrXSkg
eworICAgICAgICAgICAgdGhpcy5mcmFtZXdvcmtKU09OID0gbGVhcm5KU09OW2ZyYW1ld29ya107
CisgICAgICAgICAgICB0aGlzLmZyYW1ld29ya0pTT04uaXNzdWVMYWJlbCA9IGZyYW1ld29yazsK
KyAgICAgICAgICAgIHRoaXMuYXBwZW5kKCk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLmZl
dGNoSXNzdWVDb3VudCgpOworICAgIH0KKworICAgIExlYXJuLnByb3RvdHlwZS5hcHBlbmQgPSBm
dW5jdGlvbiAob3B0cykgeworICAgICAgICB2YXIgYXNpZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdhc2lkZScpOworICAgICAgICBhc2lkZS5pbm5lckhUTUwgPSBfLnRlbXBsYXRlKHRoaXMu
dGVtcGxhdGUsIHRoaXMuZnJhbWV3b3JrSlNPTik7CisgICAgICAgIGFzaWRlLmNsYXNzTmFtZSA9
ICdsZWFybic7CisKKyAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5iYWNrZW5kKSB7CisgICAgICAg
ICAgICAvLyBSZW1vdmUgZGVtbyBsaW5rCisgICAgICAgICAgICB2YXIgc291cmNlTGlua3MgPSBh
c2lkZS5xdWVyeVNlbGVjdG9yKCcuc291cmNlLWxpbmtzJyk7CisgICAgICAgICAgICB2YXIgaGVh
ZGluZyA9IHNvdXJjZUxpbmtzLmZpcnN0RWxlbWVudENoaWxkOworICAgICAgICAgICAgdmFyIHNv
dXJjZUxpbmsgPSBzb3VyY2VMaW5rcy5sYXN0RWxlbWVudENoaWxkOworICAgICAgICAgICAgLy8g
Q29ycmVjdCBsaW5rIHBhdGgKKyAgICAgICAgICAgIHZhciBocmVmID0gc291cmNlTGluay5nZXRB
dHRyaWJ1dGUoJ2hyZWYnKTsKKyAgICAgICAgICAgIHNvdXJjZUxpbmsuc2V0QXR0cmlidXRlKCdo
cmVmJywgaHJlZi5zdWJzdHIoaHJlZi5sYXN0SW5kZXhPZignaHR0cCcpKSk7CisgICAgICAgICAg
ICBzb3VyY2VMaW5rcy5pbm5lckhUTUwgPSBoZWFkaW5nLm91dGVySFRNTCArIHNvdXJjZUxpbmsu
b3V0ZXJIVE1MOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTG9jYWxpemUgZGVt
byBsaW5rcworICAgICAgICAgICAgdmFyIGRlbW9MaW5rcyA9IGFzaWRlLnF1ZXJ5U2VsZWN0b3JB
bGwoJy5kZW1vLWxpbmsnKTsKKyAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNh
bGwoZGVtb0xpbmtzLCBmdW5jdGlvbiAoZGVtb0xpbmspIHsKKyAgICAgICAgICAgICAgICBpZiAo
ZGVtb0xpbmsuZ2V0QXR0cmlidXRlKCdocmVmJykuc3Vic3RyKDAsIDQpICE9PSAnaHR0cCcpIHsK
KyAgICAgICAgICAgICAgICAgICAgZGVtb0xpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgZmluZFJv
b3QoKSArIGRlbW9MaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIGRvY3VtZW50LmJvZHkuY2xh
c3NOYW1lID0gKGRvY3VtZW50LmJvZHkuY2xhc3NOYW1lICsgJyBsZWFybi1iYXInKS50cmltKCk7
CisgICAgICAgIGRvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRIVE1MKCdhZnRlckJlZ2luJywg
YXNpZGUub3V0ZXJIVE1MKTsKKyAgICB9OworCisgICAgTGVhcm4ucHJvdG90eXBlLmZldGNoSXNz
dWVDb3VudCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGlzc3VlTGluayA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdpc3N1ZS1jb3VudC1saW5rJyk7CisgICAgICAgIGlmIChpc3N1ZUxp
bmspIHsKKyAgICAgICAgICAgIHZhciB1cmwgPSBpc3N1ZUxpbmsuaHJlZi5yZXBsYWNlKCdodHRw
czovL2dpdGh1Yi5jb20nLCAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcycpOworICAgICAg
ICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgICAgICAgICAgeGhyLm9w
ZW4oJ0dFVCcsIHVybCwgdHJ1ZSk7CisgICAgICAgICAgICB4aHIub25sb2FkID0gZnVuY3Rpb24g
KGUpIHsKKyAgICAgICAgICAgICAgICB2YXIgcGFyc2VkUmVzcG9uc2UgPSBKU09OLnBhcnNlKGUu
dGFyZ2V0LnJlc3BvbnNlVGV4dCk7CisgICAgICAgICAgICAgICAgaWYgKHBhcnNlZFJlc3BvbnNl
IGluc3RhbmNlb2YgQXJyYXkpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNvdW50ID0gcGFy
c2VkUmVzcG9uc2UubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgIT09IDAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzc3VlTGluay5pbm5lckhUTUwgPSAnVGhpcyBh
cHAgaGFzICcgKyBjb3VudCArICcgb3BlbiBpc3N1ZXMnOworICAgICAgICAgICAgICAgICAgICAg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lzc3VlLWNvdW50Jykuc3R5bGUuZGlzcGxheSA9
ICdpbmxpbmUnOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgIHhoci5zZW5kKCk7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgcmVkaXJlY3QoKTsKKyAgICBnZXRGaWxlKCdsZWFybi5qc29uJywgTGVhcm4pOworfSko
KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9ub2RlX21vZHVsZXMvdG9kb212
Yy1jb21tb24vcGFja2FnZS5qc29uIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL25vZGVfbW9kdWxl
cy90b2RvbXZjLWNvbW1vbi9wYWNrYWdlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGU2YWNjZTU0Njg0ZGIy
NTZkNzA3YjQ3ZWQ4ODQ1YjhmZjRhZDM4YgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2FuZ3VsYXJqcy9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vcGFja2FnZS5qc29uCkBAIC0w
LDAgKzEsMTA0IEBACit7CisgICJfYXJncyI6IFsKKyAgICBbCisgICAgICB7CisgICAgICAgICJy
YXciOiAidG9kb212Yy1jb21tb25AXjEuMC4wIiwKKyAgICAgICAgInNjb3BlIjogbnVsbCwKKyAg
ICAgICAgImVzY2FwZWROYW1lIjogInRvZG9tdmMtY29tbW9uIiwKKyAgICAgICAgIm5hbWUiOiAi
dG9kb212Yy1jb21tb24iLAorICAgICAgICAicmF3U3BlYyI6ICJeMS4wLjAiLAorICAgICAgICAi
c3BlYyI6ICI+PTEuMC4wIDwyLjAuMCIsCisgICAgICAgICJ0eXBlIjogInJhbmdlIgorICAgICAg
fSwKKyAgICAgICIvVXNlcnMvYWRkeW8vcHJvamVjdHMvc3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcyIKKyAgICBdCisgIF0sCisgICJf
ZnJvbSI6ICJ0b2RvbXZjLWNvbW1vbkA+PTEuMC4wIDwyLjAuMCIsCisgICJfaWQiOiAidG9kb212
Yy1jb21tb25AMS4wLjMiLAorICAiX2luQ2FjaGUiOiB0cnVlLAorICAiX2xvY2F0aW9uIjogIi90
b2RvbXZjLWNvbW1vbiIsCisgICJfbm9kZVZlcnNpb24iOiAiNy4xLjAiLAorICAiX25wbU9wZXJh
dGlvbmFsSW50ZXJuYWwiOiB7CisgICAgImhvc3QiOiAicGFja2FnZXMtMTgtZWFzdC5pbnRlcm5h
bC5ucG1qcy5jb20iLAorICAgICJ0bXAiOiAidG1wL3RvZG9tdmMtY29tbW9uLTEuMC4zLnRnel8x
NDc5Mjc2MzYxMjI3XzAuNTExMjQ4ODAxMzY5MjIiCisgIH0sCisgICJfbnBtVXNlciI6IHsKKyAg
ICAibmFtZSI6ICJzaW5kcmVzb3JodXMiLAorICAgICJlbWFpbCI6ICJzaW5kcmVzb3JodXNAZ21h
aWwuY29tIgorICB9LAorICAiX25wbVZlcnNpb24iOiAiMy4xMC45IiwKKyAgIl9waGFudG9tQ2hp
bGRyZW4iOiB7fSwKKyAgIl9yZXF1ZXN0ZWQiOiB7CisgICAgInJhdyI6ICJ0b2RvbXZjLWNvbW1v
bkBeMS4wLjAiLAorICAgICJzY29wZSI6IG51bGwsCisgICAgImVzY2FwZWROYW1lIjogInRvZG9t
dmMtY29tbW9uIiwKKyAgICAibmFtZSI6ICJ0b2RvbXZjLWNvbW1vbiIsCisgICAgInJhd1NwZWMi
OiAiXjEuMC4wIiwKKyAgICAic3BlYyI6ICI+PTEuMC4wIDwyLjAuMCIsCisgICAgInR5cGUiOiAi
cmFuZ2UiCisgIH0sCisgICJfcmVxdWlyZWRCeSI6IFsKKyAgICAiLyIKKyAgXSwKKyAgIl9yZXNv
bHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90b2RvbXZjLWNvbW1vbi8tL3RvZG9t
dmMtY29tbW9uLTEuMC4zLnRneiIsCisgICJfc2hhc3VtIjogImNiYTE4NjgxMDljYWE0MDFiOTA4
ZWJmNzc3OTRjYzEwMTRiNzQ4NzMiLAorICAiX3Nocmlua3dyYXAiOiBudWxsLAorICAiX3NwZWMi
OiAidG9kb212Yy1jb21tb25AXjEuMC4wIiwKKyAgIl93aGVyZSI6ICIvVXNlcnMvYWRkeW8vcHJv
amVjdHMvc3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2FuZ3VsYXJqcyIsCisgICJhdXRob3IiOiB7CisgICAgIm5hbWUiOiAiVGFzdGVKUyIKKyAgfSwK
KyAgImJ1Z3MiOiB7CisgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vdGFzdGVqcy90b2Rv
bXZjLWNvbW1vbi9pc3N1ZXMiCisgIH0sCisgICJkZXBlbmRlbmNpZXMiOiB7fSwKKyAgImRlc2Ny
aXB0aW9uIjogIkNvbW1vbiBUb2RvTVZDIHV0aWxpdGllcyB1c2VkIGJ5IG91ciBhcHBzIiwKKyAg
ImRldkRlcGVuZGVuY2llcyI6IHt9LAorICAiZGlyZWN0b3JpZXMiOiB7fSwKKyAgImRpc3QiOiB7
CisgICAgInNoYXN1bSI6ICJjYmExODY4MTA5Y2FhNDAxYjkwOGViZjc3Nzk0Y2MxMDE0Yjc0ODcz
IiwKKyAgICAidGFyYmFsbCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90b2RvbXZjLWNv
bW1vbi8tL3RvZG9tdmMtY29tbW9uLTEuMC4zLnRneiIKKyAgfSwKKyAgImZpbGVzIjogWworICAg
ICJiYXNlLmpzIiwKKyAgICAiYmFzZS5jc3MiCisgIF0sCisgICJnaXRIZWFkIjogImU3NDI1YmFm
Yjk1NjFkNzY2Yjc2OTg0NDgxMGUwNDk2NzM0ZmZlOGMiLAorICAiaG9tZXBhZ2UiOiAiaHR0cHM6
Ly9naXRodWIuY29tL3Rhc3RlanMvdG9kb212Yy1jb21tb24jcmVhZG1lIiwKKyAgImtleXdvcmRz
IjogWworICAgICJ0b2RvbXZjIiwKKyAgICAidGFzdGVqcyIsCisgICAgInV0aWwiLAorICAgICJ1
dGlsaXRpZXMiCisgIF0sCisgICJsaWNlbnNlIjogIk1JVCIsCisgICJtYWluIjogImJhc2UuanMi
LAorICAibWFpbnRhaW5lcnMiOiBbCisgICAgeworICAgICAgIm5hbWUiOiAic2luZHJlc29yaHVz
IiwKKyAgICAgICJlbWFpbCI6ICJzaW5kcmVzb3JodXNAZ21haWwuY29tIgorICAgIH0sCisgICAg
eworICAgICAgIm5hbWUiOiAiYWRkeW9zbWFuaSIsCisgICAgICAiZW1haWwiOiAiYWRkeW9zbWFu
aUBnbWFpbC5jb20iCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJwYXNzeSIsCisgICAg
ICAiZW1haWwiOiAicGhhcnRpZ0ByZHJlaS5uZXQiCisgICAgfSwKKyAgICB7CisgICAgICAibmFt
ZSI6ICJzdGVwaGVucGx1c3BsdXMiLAorICAgICAgImVtYWlsIjogInNhd2NodWtAZ21haWwuY29t
IgorICAgIH0KKyAgXSwKKyAgIm5hbWUiOiAidG9kb212Yy1jb21tb24iLAorICAib3B0aW9uYWxE
ZXBlbmRlbmNpZXMiOiB7fSwKKyAgInJlYWRtZSI6ICJFUlJPUjogTm8gUkVBRE1FIGRhdGEgZm91
bmQhIiwKKyAgInJlcG9zaXRvcnkiOiB7CisgICAgInR5cGUiOiAiZ2l0IiwKKyAgICAidXJsIjog
ImdpdCtodHRwczovL2dpdGh1Yi5jb20vdGFzdGVqcy90b2RvbXZjLWNvbW1vbi5naXQiCisgIH0s
CisgICJzY3JpcHRzIjoge30sCisgICJzdHlsZSI6ICJiYXNlLmNzcyIsCisgICJ2ZXJzaW9uIjog
IjEuMC4zIgorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL25vZGVfbW9kdWxl
cy90b2RvbXZjLWNvbW1vbi9yZWFkbWUubWQgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvbm9kZV9t
b2R1bGVzL3RvZG9tdmMtY29tbW9uL3JlYWRtZS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YTVkZTUxMThmM2Zj
Nzc1OGU4ZGRjMGE2ODY4NzQ5Y2VlOWNhZjk1Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvYW5ndWxhcmpzL25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9yZWFkbWUubWQKQEAgLTAs
MCArMSwxNSBAQAorIyB0b2RvbXZjLWNvbW1vbgorCis+IENvbW1vbiBUb2RvTVZDIHV0aWxpdGll
cyB1c2VkIGJ5IG91ciBhcHBzCisKKworIyMgSW5zdGFsbAorCitgYGAKKyQgbnBtIGluc3RhbGwg
LS1zYXZlIHRvZG9tdmMtY29tbW9uCitgYGAKKworCisjIyBMaWNlbnNlCisKK01JVCDCqSBbVGFz
dGVKU10oaHR0cDovL3Rhc3RlanMuY29tKQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxh
cmpzL3BhY2thZ2UuanNvbiBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9wYWNrYWdlLmpzb24KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOTkyOGQ4OGI0NmMxOWIzZDMwYTk4YjFmYjI4NTA5NzMzNDc3N2UyZQotLS0gL2Rl
di9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9wYWNrYWdlLmpzb24KQEAgLTAsMCAr
MSwxNyBAQAoreworICAicHJpdmF0ZSI6IHRydWUsCisgICJzY3JpcHRzIjogeworICAgICJ0ZXN0
IjogImthcm1hIHN0YXJ0IHRlc3QvY29uZmlnL2thcm1hLmNvbmYuanMiCisgIH0sCisgICJkZXBl
bmRlbmNpZXMiOiB7CisgICAgImFuZ3VsYXIiOiAiXjEuNC4zIiwKKyAgICAiYW5ndWxhci1yZXNv
dXJjZSI6ICJeMS41LjkiLAorICAgICJhbmd1bGFyLXJvdXRlIjogIl4xLjUuOSIsCisgICAgInRv
ZG9tdmMtYXBwLWNzcyI6ICJeMS4wLjEiLAorICAgICJ0b2RvbXZjLWNvbW1vbiI6ICJeMS4wLjAi
CisgIH0sCisgICJkZXZEZXBlbmRlbmNpZXMiOiB7CisgICAgImFuZ3VsYXItbW9ja3MiOiAiXjEu
My4xMiIsCisgICAgImthcm1hIjogIl4xLjMuMCIKKyAgfQorfQpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvYW5ndWxhcmpzL3JlYWRtZS5tZCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9yZWFkbWUu
bWQKaW5kZXggZDczMDcxMzExNWMyYThhODg2MGI4ZThkYzI3ZTgyNWZmODI5ZGZlZC4uOTZhOGNh
MWI2OTAyNzJhOTU5YzhiNzdhZTAyNjE2YWU5MjE5NWY2YSAxMDA2NDQKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvYW5ndWxhcmpzL3JlYWRtZS5tZAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvcmVhZG1l
Lm1kCkBAIC0xMywxNCArMTMsMTQgQEAgSGVyZSBhcmUgc29tZSBsaW5rcyB5b3UgbWF5IGZpbmQg
aGVscGZ1bDoKICogW1R1dG9yaWFsXShodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL3R1dG9yaWFs
KQogKiBbQVBJIFJlZmVyZW5jZV0oaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkpCiAqIFtE
ZXZlbG9wZXIgR3VpZGVdKGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvZ3VpZGUpCi0qIFtBcHBs
aWNhdGlvbnMgYnVpbHQgd2l0aCBBbmd1bGFySlNdKGh0dHA6Ly9idWlsdHdpdGguYW5ndWxhcmpz
Lm9yZykKKyogW0FwcGxpY2F0aW9ucyBidWlsdCB3aXRoIEFuZ3VsYXJKU10oaHR0cHM6Ly93d3cu
bWFkZXdpdGhhbmd1bGFyLmNvbS8pCiAqIFtCbG9nXShodHRwOi8vYmxvZy5hbmd1bGFyanMub3Jn
KQogKiBbRkFRXShodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL21pc2MvZmFxKQogKiBbQW5ndWxh
ckpTIE1lZXR1cHNdKGh0dHA6Ly93d3cueW91dHViZS5jb20vYW5ndWxhcmpzKQogCiBBcnRpY2xl
cyBhbmQgZ3VpZGVzIGZyb20gdGhlIGNvbW11bml0eToKIAotKiBbQ29kZSBTY2hvb2wgQW5ndWxh
ckpTIGNvdXJzZV0oaHR0cDovL3d3dy5jb2Rlc2Nob29sLmNvbS9jb2RlX3R2L2FuZ3VsYXJqcy1w
YXJ0LTEpCisqIFtDb2RlIFNjaG9vbCBBbmd1bGFySlMgY291cnNlXShodHRwczovL3d3dy5jb2Rl
c2Nob29sLmNvbS9jb3Vyc2VzL3NoYXBpbmctdXAtd2l0aC1hbmd1bGFyLWpzKQogKiBbNSBBd2Vz
b21lIEFuZ3VsYXJKUyBGZWF0dXJlc10oaHR0cDovL25ldC50dXRzcGx1cy5jb20vdHV0b3JpYWxz
L2phdmFzY3JpcHQtYWpheC81LWF3ZXNvbWUtYW5ndWxhcmpzLWZlYXR1cmVzKQogKiBbVXNpbmcg
WWVvbWFuIHdpdGggQW5ndWxhckpTXShodHRwOi8vYnJpYW50Zm9yZC5jb20vYmxvZy9hbmd1bGFy
LXllb21hbi5odG1sKQogKiBbbWUmbmd1bGFyIC0gYW4gaW50cm9kdWN0aW9uIHRvIE1WV10oaHR0
cDovL3N0ZXBoZW5wbHVzcGx1cy5naXRodWIuaW8vbWVhbmd1bGFyKQpAQCAtMzQsMyArMzQsMTIg
QEAgR2V0IGhlbHAgZnJvbSBvdGhlciBBbmd1bGFySlMgdXNlcnM6CiAqIFtBbmd1bGFyalMgb24g
R29vZ2xlICtdKGh0dHBzOi8vcGx1cy5nb29nbGUuY29tLytBbmd1bGFySlMvcG9zdHMpCiAKIF9J
ZiB5b3UgaGF2ZSBvdGhlciBoZWxwZnVsIGxpbmtzIHRvIHNoYXJlLCBvciBmaW5kIGFueSBvZiB0
aGUgbGlua3MgYWJvdmUgbm8gbG9uZ2VyIHdvcmssIHBsZWFzZSBbbGV0IHVzIGtub3ddKGh0dHBz
Oi8vZ2l0aHViLmNvbS90YXN0ZWpzL3RvZG9tdmMvaXNzdWVzKS5fCisKKyMjIFRlc3RzdWl0ZQor
CitUaGUgYXBwIHVzZXMgW0thcm1hXShodHRwOi8va2FybWEtcnVubmVyLmdpdGh1Yi5pby8wLjEy
L2luZGV4Lmh0bWwpIHRvIHJ1biB0aGUgdGVzdHMgbG9jYXRlZCBpbiB0aGUgYHRlc3QvYCBmb2xk
ZXIuIFRvIHJ1biB0aGUgdGVzdHM6CisKK2BgYAorJCBucG0gaW5zdGFsbAorJCBucG0gdGVzdAor
YGBgCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvdGVzdC9jb25maWcvdGVzdGFj
dWxhci5jb25mLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL3Rlc3QvY29uZmlnL3Rlc3RhY3Vs
YXIuY29uZi5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI0MGE3MTk3ZDhjYTkx
Y2FiY2U5YzIwYjExMWJhNGIwZTI2NTA4Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvdGVzdC9jb25maWcvdGVzdGFj
dWxhci5jb25mLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotYmFzZVBhdGggPSAn
Li4vLi4vJzsKLQotZmlsZXMgPSBbCi0gIEpBU01JTkUsCi0gIEpBU01JTkVfQURBUFRFUiwKLSAg
J2Jvd2VyX2NvbXBvbmVudHMvYW5ndWxhci9hbmd1bGFyLmpzJywKLSAgJ2Jvd2VyX2NvbXBvbmVu
dHMvYW5ndWxhci1tb2Nrcy9hbmd1bGFyLW1vY2tzLmpzJywKLSAgJ2pzLyoqLyouanMnLAotICAn
dGVzdC91bml0LyoqLyouanMnCi1dOwotCi1hdXRvV2F0Y2ggPSB0cnVlOwotCi1icm93c2VycyA9
IFsnQ2hyb21lJ107CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvdGVzdC9wYWNr
YWdlLmpzb24gYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvdGVzdC9wYWNrYWdlLmpzb24KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjNWIyZTliOGY2MzYyYjczODBmMzUwYTJlNzA3YTAy
NWFlMTUxZTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvYW5ndWxhcmpzL3Rlc3QvcGFja2FnZS5qc29uCisrKyAvZGV2L251bGwKQEAg
LTEsMTMgKzAsMCBAQAotewotICAibmFtZSI6ICJ0b2RvbXZjLWFuZ3VsYXItdGVzdHMiLAotICAi
ZGVzY3JpcHRpb24iOiAiVW5pdCB0ZXN0cyBmb3IgdGhlIEFuZ3VsYXJKUyBleGFtcGxlIG9mIFRv
ZG9NVkMiLAotICAiYXV0aG9yIjogIlBhc2NhbCBIYXJ0aWcgPHBoYXJ0aWdAcmRyZWkubmV0PiIs
Ci0gICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgImRldkRlcGVuZGVuY2llcyI6IHsKLSAgICAia2Fy
bWEiOiAifjAuOC41IgotICB9LAotICAic2NyaXB0cyI6IHsKLSAgICAidGVzdCI6ICJrYXJtYSBz
dGFydCBjb25maWcvdGVzdGFjdWxhci5jb25mLmpzIgotICB9LAotICAiZGVwZW5kZW5jaWVzIjog
e30KLX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy90ZXN0L3JlYWRtZS5tZCBi
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy90ZXN0L3JlYWRtZS5tZApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNDA5ZDQ3Y2I4ZTJlZTY3ZDRlYjU3N2NhYWU1YzY1YWRkN2MxMzUzOS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9h
bmd1bGFyanMvdGVzdC9yZWFkbWUubWQKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLUFu
Z3VsYXIgVW5pdCBUZXN0cwotPT09PT09PT09PT09PT09PT09Ci0KLVRvIHJ1biB0aGUgdGVzdCBz
dWl0ZSwgcnVuIHRoZXNlIGNvbW1hbmRzOgotCi0gICAgbnBtIGluc3RhbGwKLSAgICBucG0gdGVz
dApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL3Rlc3QvdW5pdC9kaXJlY3RpdmVz
U3BlYy5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy90ZXN0L3VuaXQvZGlyZWN0aXZlc1NwZWMu
anMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiYjM4ZTZjNzhjMTg3OGRlMjRjOGNh
YWZjYjdlZmNkMjVkNDIxOTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL3Rlc3QvdW5pdC9kaXJlY3RpdmVzU3BlYy5q
cworKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qZ2xvYmFsIGRlc2NyaWJlLCBpdCwg
YmVmb3JlRWFjaCwgaW5qZWN0LCBleHBlY3QsIGFuZ3VsYXIqLwotKGZ1bmN0aW9uICgpIHsKLSAg
ICAndXNlIHN0cmljdCc7Ci0KLSAgICBiZWZvcmVFYWNoKG1vZHVsZSgndG9kb212YycpKTsKLQot
ICAgIGRlc2NyaWJlKCd0b2RvQmx1ciBkaXJlY3RpdmUnLCBmdW5jdGlvbiAoKSB7Ci0gICAgdmFy
IHNjb3BlLCBjb21waWxlOwotCi0gICAgYmVmb3JlRWFjaChpbmplY3QoZnVuY3Rpb24gKCRyb290
U2NvcGUsICRjb21waWxlKSB7Ci0gICAgc2NvcGUgPSAkcm9vdFNjb3BlLiRuZXcoKTsKLSAgICBj
b21waWxlID0gJGNvbXBpbGU7Ci0gICAgfSkpOwotCi0gICAgaXQoJ3Nob3VsZCAkYXBwbHkgb24g
Ymx1cicsIGZ1bmN0aW9uICgpIHsKLSAgICB2YXIgZWwsCi0gICAgbW9jayA9IHsKLSAgICBjYWxs
ZWQ6IGZhbHNlLAotICAgIGNhbGw6IGZ1bmN0aW9uICgpIHsgdGhpcy5jYWxsZWQgPSB0cnVlOyB9
Ci0gICAgfTsKLQotICAgIHNjb3BlLm1vY2sgPSBtb2NrOwotICAgIGVsID0gYW5ndWxhci5lbGVt
ZW50KCc8aW5wdXQgdG9kby1ibHVyPSJtb2NrLmNhbGwoKSI+Jyk7Ci0gICAgY29tcGlsZShlbCko
c2NvcGUpOwotCi0gICAgZWwudHJpZ2dlckhhbmRsZXIoJ2JsdXInKTsKLSAgICBzY29wZS4kZGln
ZXN0KCk7Ci0KLSAgICBleHBlY3QobW9jay5jYWxsZWQpLnRvQmVUcnV0aHkoKTsKLSAgICB9KTsK
LSAgICB9KTsKLQotICAgIGRlc2NyaWJlKCd0b2RvRm9jdXMgZGlyZWN0aXZlJywgZnVuY3Rpb24g
KCkgewotICAgIHZhciBzY29wZSwgY29tcGlsZSwgYnJvd3NlcjsKLQotICAgIGJlZm9yZUVhY2go
aW5qZWN0KGZ1bmN0aW9uICgkcm9vdFNjb3BlLCAkY29tcGlsZSwgJGJyb3dzZXIpIHsKLSAgICBz
Y29wZSA9ICRyb290U2NvcGUuJG5ldygpOwotICAgIGNvbXBpbGUgPSAkY29tcGlsZTsKLSAgICBi
cm93c2VyID0gJGJyb3dzZXI7Ci0gICAgfSkpOwotCi0gICAgaXQoJ3Nob3VsZCBmb2N1cyBvbiB0
cnV0aHkgZXhwcmVzc2lvbicsIGZ1bmN0aW9uICgpIHsKLSAgICB2YXIgZWwgPSBhbmd1bGFyLmVs
ZW1lbnQoJzxpbnB1dCB0b2RvLWZvY3VzPSJmb2N1cyI+Jyk7Ci0gICAgc2NvcGUuZm9jdXMgPSBm
YWxzZTsKLQotICAgIGNvbXBpbGUoZWwpKHNjb3BlKTsKLSAgICBleHBlY3QoYnJvd3Nlci5kZWZl
cnJlZEZucy5sZW5ndGgpLnRvQmUoMCk7Ci0KLSAgICBzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkg
ewotICAgIHNjb3BlLmZvY3VzID0gdHJ1ZTsKLSAgICB9KTsKLQotICAgIGV4cGVjdChicm93c2Vy
LmRlZmVycmVkRm5zLmxlbmd0aCkudG9CZSgxKTsKLSAgICB9KTsKLSAgICB9KTsKLX0oKSk7CmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvdGVzdC91bml0L3RvZG9DdHJsU3BlYy5q
cyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy90ZXN0L3VuaXQvdG9kb0N0cmxTcGVjLmpzCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTE5MDhiYTQ1YjliYjg3MTQ5NzZiNDAzYjBkNDQ3
NDQyMTg5YTAxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy90ZXN0L3VuaXQvdG9kb0N0cmxTcGVjLmpzCisrKyAvZGV2
L251bGwKQEAgLTEsMTg2ICswLDAgQEAKLS8qZ2xvYmFsIGRlc2NyaWJlLCBpdCwgYmVmb3JlRWFj
aCwgaW5qZWN0LCBleHBlY3QqLwotKGZ1bmN0aW9uICgpIHsKLSAgICAndXNlIHN0cmljdCc7Ci0K
LSAgICBkZXNjcmliZSgnVG9kbyBDb250cm9sbGVyJywgZnVuY3Rpb24gKCkgewotICAgIHZhciBj
dHJsLCBzY29wZTsKLSAgICB2YXIgdG9kb0xpc3Q7Ci0gICAgdmFyIHRvZG9TdG9yYWdlID0gewot
ICAgIHN0b3JhZ2U6IHt9LAotICAgIGdldDogZnVuY3Rpb24gKCkgewotICAgIHJldHVybiB0aGlz
LnN0b3JhZ2U7Ci0gICAgfSwKLSAgICBwdXQ6IGZ1bmN0aW9uICh2YWx1ZSkgewotICAgIHRoaXMu
c3RvcmFnZSA9IHZhbHVlOwotICAgIH0KLSAgICB9OwotCi0gICAgLy8gTG9hZCB0aGUgbW9kdWxl
IGNvbnRhaW5pbmcgdGhlIGFwcCwgb25seSAnbmcnIGlzIGxvYWRlZCBieSBkZWZhdWx0LgotICAg
IGJlZm9yZUVhY2gobW9kdWxlKCd0b2RvbXZjJykpOwotCi0gICAgYmVmb3JlRWFjaChpbmplY3Qo
ZnVuY3Rpb24gKCRjb250cm9sbGVyLCAkcm9vdFNjb3BlKSB7Ci0gICAgc2NvcGUgPSAkcm9vdFNj
b3BlLiRuZXcoKTsKLSAgICBjdHJsID0gJGNvbnRyb2xsZXIoJ1RvZG9DdHJsJywgeyAkc2NvcGU6
IHNjb3BlIH0pOwotICAgIH0pKTsKLQotICAgIGl0KCdzaG91bGQgbm90IGhhdmUgYW4gZWRpdGVk
IFRvZG8gb24gc3RhcnQnLCBmdW5jdGlvbiAoKSB7Ci0gICAgZXhwZWN0KHNjb3BlLmVkaXRlZFRv
ZG8pLnRvQmVOdWxsKCk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnc2hvdWxkIG5vdCBoYXZlIGFueSBU
b2RvcyBvbiBzdGFydCcsIGZ1bmN0aW9uICgpIHsKLSAgICBleHBlY3Qoc2NvcGUudG9kb3MubGVu
Z3RoKS50b0JlKDApOwotICAgIH0pOwotCi0gICAgaXQoJ3Nob3VsZCBoYXZlIGFsbCBUb2RvcyBj
b21wbGV0ZWQnLCBmdW5jdGlvbiAoKSB7Ci0gICAgc2NvcGUuJGRpZ2VzdCgpOwotICAgIGV4cGVj
dChzY29wZS5hbGxDaGVja2VkKS50b0JlVHJ1dGh5KCk7Ci0gICAgfSk7Ci0KLSAgICBkZXNjcmli
ZSgndGhlIHBhdGgnLCBmdW5jdGlvbiAoKSB7Ci0gICAgaXQoJ3Nob3VsZCBkZWZhdWx0IHRvICIv
IicsIGZ1bmN0aW9uICgpIHsKLSAgICBleHBlY3Qoc2NvcGUubG9jYXRpb24ucGF0aCgpKS50b0Jl
KCcvJyk7Ci0gICAgfSk7Ci0KLSAgICBkZXNjcmliZSgnYmVpbmcgYXQgL2FjdGl2ZScsIGZ1bmN0
aW9uICgpIHsKLSAgICBpdCgnc2hvdWxkIGZpbHRlciBub24tY29tcGxldGVkJywgaW5qZWN0KGZ1
bmN0aW9uICgkY29udHJvbGxlcikgewotICAgIGN0cmwgPSAkY29udHJvbGxlcignVG9kb0N0cmwn
LCB7Ci0gICAgJHNjb3BlOiBzY29wZSwKLSAgICAkbG9jYXRpb246IHsKLSAgICBwYXRoOiBmdW5j
dGlvbiAoKSB7IHJldHVybiAnL2FjdGl2ZSc7IH0KLSAgICB9Ci0gICAgfSk7Ci0KLSAgICBzY29w
ZS4kZGlnZXN0KCk7Ci0gICAgZXhwZWN0KHNjb3BlLnN0YXR1c0ZpbHRlci5jb21wbGV0ZWQpLnRv
QmVGYWxzeSgpOwotICAgIH0pKTsKLSAgICB9KTsKLQotICAgIGRlc2NyaWJlKCdiZWluZyBhdCAv
Y29tcGxldGVkJywgZnVuY3Rpb24gKCkgewotICAgIGl0KCdzaG91bGQgZmlsdGVyIGNvbXBsZXRl
ZCcsIGluamVjdChmdW5jdGlvbiAoJGNvbnRyb2xsZXIpIHsKLSAgICBjdHJsID0gJGNvbnRyb2xs
ZXIoJ1RvZG9DdHJsJywgewotICAgICRzY29wZTogc2NvcGUsCi0gICAgJGxvY2F0aW9uOiB7Ci0g
ICAgcGF0aDogZnVuY3Rpb24gKCkgeyByZXR1cm4gJy9jb21wbGV0ZWQnOyB9Ci0gICAgfQotICAg
IH0pOwotCi0gICAgc2NvcGUuJGRpZ2VzdCgpOwotICAgIGV4cGVjdChzY29wZS5zdGF0dXNGaWx0
ZXIuY29tcGxldGVkKS50b0JlVHJ1dGh5KCk7Ci0gICAgfSkpOwotICAgIH0pOwotICAgIH0pOwot
Ci0gICAgZGVzY3JpYmUoJ2hhdmluZyBubyBUb2RvcycsIGZ1bmN0aW9uICgpIHsKLSAgICB2YXIg
Y3RybDsKLQotICAgIGJlZm9yZUVhY2goaW5qZWN0KGZ1bmN0aW9uICgkY29udHJvbGxlcikgewot
ICAgIHRvZG9TdG9yYWdlLnN0b3JhZ2UgPSBbXTsKLSAgICBjdHJsID0gJGNvbnRyb2xsZXIoJ1Rv
ZG9DdHJsJywgewotICAgICRzY29wZTogc2NvcGUsCi0gICAgdG9kb1N0b3JhZ2U6IHRvZG9TdG9y
YWdlCi0gICAgfSk7Ci0gICAgc2NvcGUuJGRpZ2VzdCgpOwotICAgIH0pKTsKLQotICAgIGl0KCdz
aG91bGQgbm90IGFkZCBlbXB0eSBUb2RvcycsIGZ1bmN0aW9uICgpIHsKLSAgICBzY29wZS5uZXdU
b2RvID0gJyc7Ci0gICAgc2NvcGUuYWRkVG9kbygpOwotICAgIHNjb3BlLiRkaWdlc3QoKTsKLSAg
ICBleHBlY3Qoc2NvcGUudG9kb3MubGVuZ3RoKS50b0JlKDApOwotICAgIH0pOwotCi0gICAgaXQo
J3Nob3VsZCBub3QgYWRkIGl0ZW1zIGNvbnNpc3Rpbmcgb25seSBvZiB3aGl0ZXNwYWNlcycsIGZ1
bmN0aW9uICgpIHsKLSAgICBzY29wZS5uZXdUb2RvID0gJyAgICc7Ci0gICAgc2NvcGUuYWRkVG9k
bygpOwotICAgIHNjb3BlLiRkaWdlc3QoKTsKLSAgICBleHBlY3Qoc2NvcGUudG9kb3MubGVuZ3Ro
KS50b0JlKDApOwotICAgIH0pOwotCi0KLSAgICBpdCgnc2hvdWxkIHRyaW0gd2hpdGVzcGFjZSBm
cm9tIG5ldyBUb2RvcycsIGZ1bmN0aW9uICgpIHsKLSAgICBzY29wZS5uZXdUb2RvID0gJyAgYnV5
IHNvbWUgdW5pY29ybnMgICc7Ci0gICAgc2NvcGUuYWRkVG9kbygpOwotICAgIHNjb3BlLiRkaWdl
c3QoKTsKLSAgICBleHBlY3Qoc2NvcGUudG9kb3MubGVuZ3RoKS50b0JlKDEpOwotICAgIGV4cGVj
dChzY29wZS50b2Rvc1swXS50aXRsZSkudG9CZSgnYnV5IHNvbWUgdW5pY29ybnMnKTsKLSAgICB9
KTsKLSAgICB9KTsKLQotICAgIGRlc2NyaWJlKCdoYXZpbmcgc29tZSBzYXZlZCBUb2RvcycsIGZ1
bmN0aW9uICgpIHsKLSAgICB2YXIgY3RybDsKLQotICAgIGJlZm9yZUVhY2goaW5qZWN0KGZ1bmN0
aW9uICgkY29udHJvbGxlcikgewotICAgIHRvZG9MaXN0ID0gW3sKLSAgICAndGl0bGUnOiAnVW5j
b21wbGV0ZWQgSXRlbSAwJywKLSAgICAnY29tcGxldGVkJzogZmFsc2UKLSAgICB9LCB7Ci0gICAg
J3RpdGxlJzogJ1VuY29tcGxldGVkIEl0ZW0gMScsCi0gICAgJ2NvbXBsZXRlZCc6IGZhbHNlCi0g
ICAgfSwgewotICAgICd0aXRsZSc6ICdVbmNvbXBsZXRlZCBJdGVtIDInLAotICAgICdjb21wbGV0
ZWQnOiBmYWxzZQotICAgIH0sIHsKLSAgICAndGl0bGUnOiAnQ29tcGxldGVkIEl0ZW0gMCcsCi0g
ICAgJ2NvbXBsZXRlZCc6IHRydWUKLSAgICB9LCB7Ci0gICAgJ3RpdGxlJzogJ0NvbXBsZXRlZCBJ
dGVtIDEnLAotICAgICdjb21wbGV0ZWQnOiB0cnVlCi0gICAgfV07Ci0KLSAgICB0b2RvU3RvcmFn
ZS5zdG9yYWdlID0gdG9kb0xpc3Q7Ci0gICAgY3RybCA9ICRjb250cm9sbGVyKCdUb2RvQ3RybCcs
IHsKLSAgICAkc2NvcGU6IHNjb3BlLAotICAgIHRvZG9TdG9yYWdlOiB0b2RvU3RvcmFnZQotICAg
IH0pOwotICAgIHNjb3BlLiRkaWdlc3QoKTsKLSAgICB9KSk7Ci0KLSAgICBpdCgnc2hvdWxkIGNv
dW50IFRvZG9zIGNvcnJlY3RseScsIGZ1bmN0aW9uICgpIHsKLSAgICBleHBlY3Qoc2NvcGUudG9k
b3MubGVuZ3RoKS50b0JlKDUpOwotICAgIGV4cGVjdChzY29wZS5yZW1haW5pbmdDb3VudCkudG9C
ZSgzKTsKLSAgICBleHBlY3Qoc2NvcGUuY29tcGxldGVkQ291bnQpLnRvQmUoMik7Ci0gICAgZXhw
ZWN0KHNjb3BlLmFsbENoZWNrZWQpLnRvQmVGYWxzeSgpOwotICAgIH0pOwotCi0gICAgaXQoJ3No
b3VsZCBzYXZlIFRvZG9zIHRvIGxvY2FsIHN0b3JhZ2UnLCBmdW5jdGlvbiAoKSB7Ci0gICAgZXhw
ZWN0KHRvZG9TdG9yYWdlLnN0b3JhZ2UubGVuZ3RoKS50b0JlKDUpOwotICAgIH0pOwotCi0gICAg
aXQoJ3Nob3VsZCByZW1vdmUgVG9kb3Mgdy9vIHRpdGxlIG9uIHNhdmluZycsIGZ1bmN0aW9uICgp
IHsKLSAgICB2YXIgdG9kbyA9IHRvZG9MaXN0WzJdOwotICAgIHRvZG8udGl0bGUgPSAnJzsKLQot
ICAgIHNjb3BlLmRvbmVFZGl0aW5nKHRvZG8pOwotICAgIGV4cGVjdChzY29wZS50b2Rvcy5sZW5n
dGgpLnRvQmUoNCk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnc2hvdWxkIHRyaW0gVG9kb3Mgb24gc2F2
aW5nJywgZnVuY3Rpb24gKCkgewotICAgIHZhciB0b2RvID0gdG9kb0xpc3RbMF07Ci0gICAgdG9k
by50aXRsZSA9ICcgYnV5IG1vYXIgdW5pY29ybnMgICc7Ci0KLSAgICBzY29wZS5kb25lRWRpdGlu
Zyh0b2RvKTsKLSAgICBleHBlY3Qoc2NvcGUudG9kb3NbMF0udGl0bGUpLnRvQmUoJ2J1eSBtb2Fy
IHVuaWNvcm5zJyk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnY2xlYXJDb21wbGV0ZWRUb2RvcygpIHNo
b3VsZCBjbGVhciBjb21wbGV0ZWQgVG9kb3MnLCBmdW5jdGlvbiAoKSB7Ci0gICAgc2NvcGUuY2xl
YXJDb21wbGV0ZWRUb2RvcygpOwotICAgIGV4cGVjdChzY29wZS50b2Rvcy5sZW5ndGgpLnRvQmUo
Myk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnbWFya0FsbCgpIHNob3VsZCBtYXJrIGFsbCBUb2RvcyBj
b21wbGV0ZWQnLCBmdW5jdGlvbiAoKSB7Ci0gICAgc2NvcGUubWFya0FsbCgpOwotICAgIHNjb3Bl
LiRkaWdlc3QoKTsKLSAgICBleHBlY3Qoc2NvcGUuY29tcGxldGVkQ291bnQpLnRvQmUoNSk7Ci0g
ICAgfSk7Ci0KLSAgICBpdCgncmV2ZXJ0VG9kbygpIGdldCBhIFRvZG8gdG8gaXRzIHByZXZpb3Vz
IHN0YXRlJywgZnVuY3Rpb24gKCkgewotICAgIHZhciB0b2RvID0gdG9kb0xpc3RbMF07Ci0gICAg
c2NvcGUuZWRpdFRvZG8odG9kbyk7Ci0gICAgdG9kby50aXRsZSA9ICdVbmljb3JuIHNwYXJrbHkg
c2t5cHVmZmxlcy4nOwotICAgIHNjb3BlLnJldmVydEVkaXRpbmcodG9kbyk7Ci0gICAgc2NvcGUu
JGRpZ2VzdCgpOwotICAgIGV4cGVjdChzY29wZS50b2Rvc1swXS50aXRsZSkudG9CZSgnVW5jb21w
bGV0ZWQgSXRlbSAwJyk7Ci0gICAgfSk7Ci0gICAgfSk7Ci0gICAgfSk7Ci19KCkpOwpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL3RvZG9tdmMtaW5kZXguaHRtbCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL2FuZ3VsYXJqcy90b2RvbXZjLWluZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDZlM2IxYzJlYjNm
Y2QwZjExM2QwN2U4Zjc4ZmNhODI3MWU4YzcyZQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL2FuZ3VsYXJqcy90b2RvbXZjLWluZGV4Lmh0bWwKQEAgLTAsMCArMSw1MiBAQAorPHNlY3Rp
b24gaWQ9InRvZG9hcHAiPgorICAgIDxoZWFkZXIgaWQ9ImhlYWRlciI+CisgICAgICAgIDxoMT50
b2RvczwvaDE+CisgICAgICAgIDxmb3JtIGlkPSJ0b2RvLWZvcm0iIG5nLXN1Ym1pdD0iYWRkVG9k
bygpIj4KKyAgICAgICAgICAgIDxpbnB1dCBpZD0ibmV3LXRvZG8iIHBsYWNlaG9sZGVyPSJXaGF0
IG5lZWRzIHRvIGJlIGRvbmU/IiBuZy1tb2RlbD0ibmV3VG9kbyIgbmctZGlzYWJsZWQ9InNhdmlu
ZyIgYXV0b2ZvY3VzPgorICAgICAgICA8L2Zvcm0+CisgICAgPC9oZWFkZXI+CisgICAgPHNlY3Rp
b24gaWQ9Im1haW4iIG5nLXNob3c9InRvZG9zLmxlbmd0aCIgbmctY2xvYWs+CisgICAgICAgIDxp
bnB1dCBpZD0idG9nZ2xlLWFsbCIgdHlwZT0iY2hlY2tib3giIG5nLW1vZGVsPSJhbGxDaGVja2Vk
IiBuZy1jbGljaz0ibWFya0FsbChhbGxDaGVja2VkKSI+CisgICAgICAgIDxsYWJlbCBmb3I9InRv
Z2dsZS1hbGwiPk1hcmsgYWxsIGFzIGNvbXBsZXRlPC9sYWJlbD4KKyAgICAgICAgPHVsIGlkPSJ0
b2RvLWxpc3QiPgorICAgICAgICAgICAgPGxpIG5nLXJlcGVhdD0idG9kbyBpbiB0b2RvcyB8IGZp
bHRlcjpzdGF0dXNGaWx0ZXIgdHJhY2sgYnkgJGluZGV4IiBuZy1jbGFzcz0ie2NvbXBsZXRlZDog
dG9kby5jb21wbGV0ZWQsIGVkaXRpbmc6IHRvZG8gPT0gZWRpdGVkVG9kb30iPgorICAgICAgICAg
ICAgICAgIDxkaXYgY2xhc3M9InZpZXciPgorICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xh
c3M9InRvZ2dsZSIgdHlwZT0iY2hlY2tib3giIG5nLW1vZGVsPSJ0b2RvLmNvbXBsZXRlZCIgbmct
Y2hhbmdlPSJ0b2dnbGVDb21wbGV0ZWQodG9kbykiPgorICAgICAgICAgICAgICAgICAgICA8bGFi
ZWwgbmctZGJsY2xpY2s9ImVkaXRUb2RvKHRvZG8pIj57e3RvZG8udGl0bGV9fTwvbGFiZWw+Cisg
ICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRlc3Ryb3kiIG5nLWNsaWNrPSJyZW1v
dmVUb2RvKHRvZG8pIj48L2J1dHRvbj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAg
ICAgICAgICA8Zm9ybSBuZy1zdWJtaXQ9InNhdmVFZGl0cyh0b2RvLCAnc3VibWl0JykiPgorICAg
ICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImVkaXQiIG5nLXRyaW09ImZhbHNlIiBuZy1t
b2RlbD0idG9kby50aXRsZSIgdG9kby1lc2NhcGU9InJldmVydEVkaXRzKHRvZG8pIiBuZy1ibHVy
PSJzYXZlRWRpdHModG9kbywgJ2JsdXInKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvZG8t
Zm9jdXM9InRvZG8gPT0gZWRpdGVkVG9kbyI+CisgICAgICAgICAgICAgICAgPC9mb3JtPgorICAg
ICAgICAgICAgPC9saT4KKyAgICAgICAgPC91bD4KKyAgICA8L3NlY3Rpb24+CisgICAgPGZvb3Rl
ciBpZD0iZm9vdGVyIiBuZy1zaG93PSJ0b2Rvcy5sZW5ndGgiIG5nLWNsb2FrPgorICAgICAgICA8
c3BhbiBpZD0idG9kby1jb3VudCI+PHN0cm9uZz57e3JlbWFpbmluZ0NvdW50fX08L3N0cm9uZz4K
KyAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1wbHVyYWxpemUgY291bnQ9InJlbWFpbmluZ0Nv
dW50IiB3aGVuPSJ7IG9uZTogJ2l0ZW0gbGVmdCcsIG90aGVyOiAnaXRlbXMgbGVmdCcgfSI+PC9u
Zy1wbHVyYWxpemU+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgPHVsIGlk
PSJmaWx0ZXJzIj4KKyAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICA8YSBuZy1jbGFz
cz0ie3NlbGVjdGVkOiBzdGF0dXMgPT0gJyd9ICIgaHJlZj0iIy8iPkFsbDwvYT4KKyAgICAgICAg
ICAgIDwvbGk+CisgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgICAgPGEgbmctY2xhc3M9
IntzZWxlY3RlZDogc3RhdHVzID09ICdhY3RpdmUnfSIgaHJlZj0iIy9hY3RpdmUiPkFjdGl2ZTwv
YT4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgICAg
PGEgbmctY2xhc3M9IntzZWxlY3RlZDogc3RhdHVzID09ICdjb21wbGV0ZWQnfSIgaHJlZj0iIy9j
b21wbGV0ZWQiPkNvbXBsZXRlZDwvYT4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgIDwvdWw+
CisgICAgICAgIDxidXR0b24gaWQ9ImNsZWFyLWNvbXBsZXRlZCIgbmctY2xpY2s9ImNsZWFyQ29t
cGxldGVkVG9kb3MoKSIgbmctc2hvdz0iY29tcGxldGVkQ291bnQiPkNsZWFyIGNvbXBsZXRlZDwv
YnV0dG9uPgorICAgIDwvZm9vdGVyPgorPC9zZWN0aW9uPgorPGZvb3RlciBpZD0iaW5mbyI+Cisg
ICAgPHA+RG91YmxlLWNsaWNrIHRvIGVkaXQgYSB0b2RvPC9wPgorICAgIDxwPkNyZWRpdHM6Cisg
ICAgICAgIDxhIGhyZWY9Imh0dHA6Ly90d2l0dGVyLmNvbS9jYnVyZ2RvcmYiPkNocmlzdG9waCBC
dXJnZG9yZjwvYT4sCisgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9lcmljYmlkZWxtYW4uY29tIj5F
cmljIEJpZGVsbWFuPC9hPiwKKyAgICAgICAgPGEgaHJlZj0iaHR0cDovL2phY29ibXVtbS5jb20i
PkphY29iIE11bW08L2E+IGFuZAorICAgICAgICA8YSBocmVmPSJodHRwOi8vYmxvZy5pZ29ybWlu
YXIuY29tIj5JZ29yIE1pbmFyPC9hPgorICAgIDwvcD4KKyAgICA8cD5QYXJ0IG9mIDxhIGhyZWY9
Imh0dHA6Ly90b2RvbXZjLmNvbSI+VG9kb01WQzwvYT48L3A+Cis8L2Zvb3Rlcj4KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309813</attachid>
            <date>2017-05-11 16:19:14 -0700</date>
            <delta_ts>2017-05-11 17:12:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171307-20170511161913.patch</filename>
            <type>text/plain</type>
            <size>1805651</size>
            <attacher name="Addy Osmani">addyo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1NjgzCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGVjNDZiZjNlOGFh
MmIyMTYyMjE3ZWMxNDJiMGMzOWQwYTk5ZGFlZmMuLmQ1Y2JmMzk1MDY5YTc2MzNhNGI2ZWUxNmQx
MjcyOGY4M2RjMmRmZDggMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTctMDUt
MTEgIEFkZHkgT3NtYW5pICA8YWRkeW9zbWFuaUBnbWFpbC5jb20+CisKKyAgICAgICAgU3BlZWRv
bWV0ZXI6IFVwZGF0ZSB0aGUgQW5ndWxhckpTIGltcGxlbWVudGF0aW9uIHRvIGEgbW9yZSByZWNl
bnQgbGlicmFyeSB2ZXJzaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzEzMDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBVcGRhdGVzIHRoZSBBbmd1bGFySlMgaW1wbGVtZW50YXRpb24gb2YgVG9kb01W
QyB0byAxLjQueAorCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9ib3dlci5qc29uOiBSZW1vdmVkLgorICAgICAg
ICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9h
bmd1bGFyanMvYm93ZXJfY29tcG9uZW50cy9hbmd1bGFyLW1vY2tzL2FuZ3VsYXItbW9ja3MuanM6
IFJlbW92ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9ib3dlcl9jb21wb25lbnRzL2FuZ3VsYXIvYW5ndWxh
ci5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1j
b21tb24vYmFzZS5jc3M6IFJlbW92ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9ib3dlcl9jb21wb25lbnRz
L3RvZG9tdmMtY29tbW9uL2Jhc2UuanM6IFJlbW92ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9ib3dlcl9j
b21wb25lbnRzL3RvZG9tdmMtY29tbW9uL2JnLnBuZzogUmVtb3ZlZC4KKyAgICAgICAgKiBTcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpz
L2luZGV4Lmh0bWw6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9qcy9hcHAuanM6CisgICAgICAgICogU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9q
cy9jb250cm9sbGVycy90b2RvQ3RybC5qczoKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2pzL2RpcmVjdGl2ZXMv
dG9kb0JsdXIuanM6IFJlbW92ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9qcy9kaXJlY3RpdmVzL3RvZG9F
c2NhcGUuanM6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9qcy9kaXJlY3RpdmVzL3RvZG9Gb2N1cy5qczoKKyAg
ICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvYW5ndWxhcmpzL2pzL3NlcnZpY2VzL3RvZG9TdG9yYWdlLmpzOgorICAgICAgICAqIFNwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMv
bm9kZV9tb2R1bGVzL2FuZ3VsYXItcmVzb3VyY2UvYW5ndWxhci1yZXNvdXJjZS5qczogQWRkZWQu
CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL2FuZ3VsYXJqcy9ub2RlX21vZHVsZXMvYW5ndWxhci1yb3V0ZS9hbmd1bGFyLXJvdXRl
LmpzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL25vZGVfbW9kdWxlcy9hbmd1bGFyL2FuZ3VsYXIu
anM6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9p
bmRleC5jc3M6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBw
LWNzcy9wYWNrYWdlLmpzb246IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvbm9kZV9tb2R1bGVzL3Rv
ZG9tdmMtYXBwLWNzcy9yZWFkbWUubWQ6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvbm9kZV9tb2R1
bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL25vZGVf
bW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL25v
ZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9wYWNrYWdlLmpzb246IEFkZGVkLgorICAgICAgICAq
IFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1
bGFyanMvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL3JlYWRtZS5tZDogQWRkZWQuCisgICAg
ICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2FuZ3VsYXJqcy9wYWNrYWdlLmpzb246IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvcmVhZG1lLm1k
OgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9hbmd1bGFyanMvdGVzdC9jb25maWcvdGVzdGFjdWxhci5jb25mLmpzOiBSZW1vdmVk
LgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9hbmd1bGFyanMvdGVzdC9wYWNrYWdlLmpzb246IFJlbW92ZWQuCisgICAgICAgICog
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3Vs
YXJqcy90ZXN0L3JlYWRtZS5tZDogUmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL3Rlc3QvdW5pdC9k
aXJlY3RpdmVzU3BlYy5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL3Rlc3QvdW5pdC90b2Rv
Q3RybFNwZWMuanM6IFJlbW92ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy90b2RvbXZjLWluZGV4Lmh0bWw6
IEFkZGVkLgorCiAyMDE3LTA0LTIxICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgU2ltcGxlIGxpbmUgbGF5b3V0OiBBZGQgcGVyZm9ybWFuY2UgdGVzdCB0byBtZWFz
dXJlIG1pZC13b3JkIGxpbmUgYnJlYWtpbmcgd2l0aCBsb25nIHRleHQuCmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9hbmd1bGFyanMvYm93ZXIuanNvbiBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9i
b3dlci5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTBjNTI1Y2M4YTZjMGI1
OTAyODdkNzA4YmJkNDc3Zjk0OGExMGE4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9ib3dlci5qc29uCisrKyAvZGV2
L251bGwKQEAgLTEsMTEgKzAsMCBAQAotewotICAibmFtZSI6ICJ0b2RvbXZjLWFuZ3VsYXIiLAot
ICAidmVyc2lvbiI6ICIwLjAuMCIsCi0gICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgImFuZ3VsYXIi
OiAifjEuMC43IiwKLSAgICAidG9kb212Yy1jb21tb24iOiAifjAuMS40IgotICB9LAotICAiZGV2
RGVwZW5kZW5jaWVzIjogewotICAgICJhbmd1bGFyLW1vY2tzIjogIn4xLjAuNSIKLSAgfQotfQpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2Jvd2VyX2NvbXBvbmVudHMvYW5ndWxh
ci1tb2Nrcy9hbmd1bGFyLW1vY2tzLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2Jvd2VyX2Nv
bXBvbmVudHMvYW5ndWxhci1tb2Nrcy9hbmd1bGFyLW1vY2tzLmpzCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA2ZTA0YTI3YTViYTQ3ZGRlZmEwYjc2OGUzOWY3ZmVhM2FmNTJhZDJiLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2FuZ3VsYXJqcy9ib3dlcl9jb21wb25lbnRzL2FuZ3VsYXItbW9ja3MvYW5ndWxhci1tb2Nrcy5q
cworKysgL2Rldi9udWxsCkBAIC0xLDE3NjQgKzAsMCBAQAotLyoqCi0gKiBAbGljZW5zZSBBbmd1
bGFySlMgdjEuMC40Ci0gKiAoYykgMjAxMC0yMDEyIEdvb2dsZSwgSW5jLiBodHRwOi8vYW5ndWxh
cmpzLm9yZwotICogTGljZW5zZTogTUlUCi0gKgotICogVE9ETyh2b2p0YSk6IHdyYXAgd2hvbGUg
ZmlsZSBpbnRvIGNsb3N1cmUgZHVyaW5nIGJ1aWxkCi0gKi8KLQotLyoqCi0gKiBAbmdkb2Mgb3Zl
cnZpZXcKLSAqIEBuYW1lIGFuZ3VsYXIubW9jawotICogQGRlc2NyaXB0aW9uCi0gKgotICogTmFt
ZXNwYWNlIGZyb20gJ2FuZ3VsYXItbW9ja3MuanMnIHdoaWNoIGNvbnRhaW5zIHRlc3RpbmcgcmVs
YXRlZCBjb2RlLgotICovCi1hbmd1bGFyLm1vY2sgPSB7fTsKLQotLyoqCi0gKiAhIFRoaXMgaXMg
YSBwcml2YXRlIHVuZG9jdW1lbnRlZCBzZXJ2aWNlICEKLSAqCi0gKiBAbmFtZSBuZ01vY2suJGJy
b3dzZXIKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIFRoaXMgc2VydmljZSBpcyBhIG1vY2sgaW1w
bGVtZW50YXRpb24gb2Yge0BsaW5rIG5nLiRicm93c2VyfS4gSXQgcHJvdmlkZXMgZmFrZQotICog
aW1wbGVtZW50YXRpb24gZm9yIGNvbW1vbmx5IHVzZWQgYnJvd3NlciBhcGlzIHRoYXQgYXJlIGhh
cmQgdG8gdGVzdCwgZS5nLiBzZXRUaW1lb3V0LCB4aHIsCi0gKiBjb29raWVzLCBldGMuLi4KLSAq
Ci0gKiBUaGUgYXBpIG9mIHRoaXMgc2VydmljZSBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZSBy
ZWFsIHtAbGluayBuZy4kYnJvd3NlciAkYnJvd3Nlcn0sIGV4Y2VwdAotICogdGhhdCB0aGVyZSBh
cmUgc2V2ZXJhbCBoZWxwZXIgbWV0aG9kcyBhdmFpbGFibGUgd2hpY2ggY2FuIGJlIHVzZWQgaW4g
dGVzdHMuCi0gKi8KLWFuZ3VsYXIubW9jay4kQnJvd3NlclByb3ZpZGVyID0gZnVuY3Rpb24oKSB7
Ci0gIHRoaXMuJGdldCA9IGZ1bmN0aW9uKCl7Ci0gICAgcmV0dXJuIG5ldyBhbmd1bGFyLm1vY2su
JEJyb3dzZXIoKTsKLSAgfTsKLX07Ci0KLWFuZ3VsYXIubW9jay4kQnJvd3NlciA9IGZ1bmN0aW9u
KCkgewotICB2YXIgc2VsZiA9IHRoaXM7Ci0KLSAgdGhpcy5pc01vY2sgPSB0cnVlOwotICBzZWxm
LiQkdXJsID0gImh0dHA6Ly9zZXJ2ZXIvIjsKLSAgc2VsZi4kJGxhc3RVcmwgPSBzZWxmLiQkdXJs
OyAvLyB1c2VkIGJ5IHVybCBwb2xsaW5nIGZuCi0gIHNlbGYucG9sbEZucyA9IFtdOwotCi0gIC8v
IFRPRE8odm9qdGEpOiByZW1vdmUgdGhpcyB0ZW1wb3JhcnkgYXBpCi0gIHNlbGYuJCRjb21wbGV0
ZU91dHN0YW5kaW5nUmVxdWVzdCA9IGFuZ3VsYXIubm9vcDsKLSAgc2VsZi4kJGluY091dHN0YW5k
aW5nUmVxdWVzdENvdW50ID0gYW5ndWxhci5ub29wOwotCi0KLSAgLy8gcmVnaXN0ZXIgdXJsIHBv
bGxpbmcgZm4KLQotICBzZWxmLm9uVXJsQ2hhbmdlID0gZnVuY3Rpb24obGlzdGVuZXIpIHsKLSAg
ICBzZWxmLnBvbGxGbnMucHVzaCgKLSAgICAgIGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAoc2Vs
Zi4kJGxhc3RVcmwgIT0gc2VsZi4kJHVybCkgewotICAgICAgICAgIHNlbGYuJCRsYXN0VXJsID0g
c2VsZi4kJHVybDsKLSAgICAgICAgICBsaXN0ZW5lcihzZWxmLiQkdXJsKTsKLSAgICAgICAgfQot
ICAgICAgfQotICAgICk7Ci0KLSAgICByZXR1cm4gbGlzdGVuZXI7Ci0gIH07Ci0KLSAgc2VsZi5j
b29raWVIYXNoID0ge307Ci0gIHNlbGYubGFzdENvb2tpZUhhc2ggPSB7fTsKLSAgc2VsZi5kZWZl
cnJlZEZucyA9IFtdOwotICBzZWxmLmRlZmVycmVkTmV4dElkID0gMDsKLQotICBzZWxmLmRlZmVy
ID0gZnVuY3Rpb24oZm4sIGRlbGF5KSB7Ci0gICAgZGVsYXkgPSBkZWxheSB8fCAwOwotICAgIHNl
bGYuZGVmZXJyZWRGbnMucHVzaCh7dGltZTooc2VsZi5kZWZlci5ub3cgKyBkZWxheSksIGZuOmZu
LCBpZDogc2VsZi5kZWZlcnJlZE5leHRJZH0pOwotICAgIHNlbGYuZGVmZXJyZWRGbnMuc29ydChm
dW5jdGlvbihhLGIpeyByZXR1cm4gYS50aW1lIC0gYi50aW1lO30pOwotICAgIHJldHVybiBzZWxm
LmRlZmVycmVkTmV4dElkKys7Ci0gIH07Ci0KLQotICBzZWxmLmRlZmVyLm5vdyA9IDA7Ci0KLQot
ICBzZWxmLmRlZmVyLmNhbmNlbCA9IGZ1bmN0aW9uKGRlZmVySWQpIHsKLSAgICB2YXIgZm5JbmRl
eDsKLQotICAgIGFuZ3VsYXIuZm9yRWFjaChzZWxmLmRlZmVycmVkRm5zLCBmdW5jdGlvbihmbiwg
aW5kZXgpIHsKLSAgICAgIGlmIChmbi5pZCA9PT0gZGVmZXJJZCkgZm5JbmRleCA9IGluZGV4Owot
ICAgIH0pOwotCi0gICAgaWYgKGZuSW5kZXggIT09IHVuZGVmaW5lZCkgewotICAgICAgc2VsZi5k
ZWZlcnJlZEZucy5zcGxpY2UoZm5JbmRleCwgMSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH07Ci0KLQotICAvKioKLSAgICogQG5hbWUgbmdNb2Nr
LiRicm93c2VyI2RlZmVyLmZsdXNoCi0gICAqIEBtZXRob2RPZiBuZ01vY2suJGJyb3dzZXIKLSAg
ICoKLSAgICogQGRlc2NyaXB0aW9uCi0gICAqIEZsdXNoZXMgYWxsIHBlbmRpbmcgcmVxdWVzdHMg
YW5kIGV4ZWN1dGVzIHRoZSBkZWZlciBjYWxsYmFja3MuCi0gICAqCi0gICAqIEBwYXJhbSB7bnVt
YmVyPX0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBmbHVzaC4gU2VlIHtAbGluayAjZGVmZXIu
bm93fQotICAgKi8KLSAgc2VsZi5kZWZlci5mbHVzaCA9IGZ1bmN0aW9uKGRlbGF5KSB7Ci0gICAg
aWYgKGFuZ3VsYXIuaXNEZWZpbmVkKGRlbGF5KSkgewotICAgICAgc2VsZi5kZWZlci5ub3cgKz0g
ZGVsYXk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChzZWxmLmRlZmVycmVkRm5zLmxlbmd0aCkg
ewotICAgICAgICBzZWxmLmRlZmVyLm5vdyA9IHNlbGYuZGVmZXJyZWRGbnNbc2VsZi5kZWZlcnJl
ZEZucy5sZW5ndGgtMV0udGltZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRocm93IEVycm9y
KCdObyBkZWZlcnJlZCB0YXNrcyB0byBiZSBmbHVzaGVkJyk7Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgd2hpbGUgKHNlbGYuZGVmZXJyZWRGbnMubGVuZ3RoICYmIHNlbGYuZGVmZXJyZWRGbnNbMF0u
dGltZSA8PSBzZWxmLmRlZmVyLm5vdykgewotICAgICAgc2VsZi5kZWZlcnJlZEZucy5zaGlmdCgp
LmZuKCk7Ci0gICAgfQotICB9OwotICAvKioKLSAgICogQG5hbWUgbmdNb2NrLiRicm93c2VyI2Rl
ZmVyLm5vdwotICAgKiBAcHJvcGVydHlPZiBuZ01vY2suJGJyb3dzZXIKLSAgICoKLSAgICogQGRl
c2NyaXB0aW9uCi0gICAqIEN1cnJlbnQgbWlsbGlzZWNvbmRzIG1vY2sgdGltZS4KLSAgICovCi0K
LSAgc2VsZi4kJGJhc2VIcmVmID0gJyc7Ci0gIHNlbGYuYmFzZUhyZWYgPSBmdW5jdGlvbigpIHsK
LSAgICByZXR1cm4gdGhpcy4kJGJhc2VIcmVmOwotICB9OwotfTsKLWFuZ3VsYXIubW9jay4kQnJv
d3Nlci5wcm90b3R5cGUgPSB7Ci0KLS8qKgotICAqIEBuYW1lIG5nTW9jay4kYnJvd3NlciNwb2xs
Ci0gICogQG1ldGhvZE9mIG5nTW9jay4kYnJvd3NlcgotICAqCi0gICogQGRlc2NyaXB0aW9uCi0g
ICogcnVuIGFsbCBmbnMgaW4gcG9sbEZucwotICAqLwotICBwb2xsOiBmdW5jdGlvbiBwb2xsKCkg
ewotICAgIGFuZ3VsYXIuZm9yRWFjaCh0aGlzLnBvbGxGbnMsIGZ1bmN0aW9uKHBvbGxGbil7Ci0g
ICAgICBwb2xsRm4oKTsKLSAgICB9KTsKLSAgfSwKLQotICBhZGRQb2xsRm46IGZ1bmN0aW9uKHBv
bGxGbikgewotICAgIHRoaXMucG9sbEZucy5wdXNoKHBvbGxGbik7Ci0gICAgcmV0dXJuIHBvbGxG
bjsKLSAgfSwKLQotICB1cmw6IGZ1bmN0aW9uKHVybCwgcmVwbGFjZSkgewotICAgIGlmICh1cmwp
IHsKLSAgICAgIHRoaXMuJCR1cmwgPSB1cmw7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdGhpcy4kJHVybDsKLSAgfSwKLQotICBjb29raWVzOiAgZnVuY3Rpb24obmFt
ZSwgdmFsdWUpIHsKLSAgICBpZiAobmFtZSkgewotICAgICAgaWYgKHZhbHVlID09IHVuZGVmaW5l
ZCkgewotICAgICAgICBkZWxldGUgdGhpcy5jb29raWVIYXNoW25hbWVdOwotICAgICAgfSBlbHNl
IHsKLSAgICAgICAgaWYgKGFuZ3VsYXIuaXNTdHJpbmcodmFsdWUpICYmICAgICAgIC8vc3RyaW5n
cyBvbmx5Ci0gICAgICAgICAgICB2YWx1ZS5sZW5ndGggPD0gNDA5NikgeyAgICAgICAgICAvL3N0
cmljdCBjb29raWUgc3RvcmFnZSBsaW1pdHMKLSAgICAgICAgICB0aGlzLmNvb2tpZUhhc2hbbmFt
ZV0gPSB2YWx1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAo
IWFuZ3VsYXIuZXF1YWxzKHRoaXMuY29va2llSGFzaCwgdGhpcy5sYXN0Q29va2llSGFzaCkpIHsK
LSAgICAgICAgdGhpcy5sYXN0Q29va2llSGFzaCA9IGFuZ3VsYXIuY29weSh0aGlzLmNvb2tpZUhh
c2gpOwotICAgICAgICB0aGlzLmNvb2tpZUhhc2ggPSBhbmd1bGFyLmNvcHkodGhpcy5jb29raWVI
YXNoKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB0aGlzLmNvb2tpZUhhc2g7Ci0gICAgfQotICB9
LAotCi0gIG5vdGlmeVdoZW5Ob091dHN0YW5kaW5nUmVxdWVzdHM6IGZ1bmN0aW9uKGZuKSB7Ci0g
ICAgZm4oKTsKLSAgfQotfTsKLQotCi0vKioKLSAqIEBuZ2RvYyBvYmplY3QKLSAqIEBuYW1lIG5n
TW9jay4kZXhjZXB0aW9uSGFuZGxlclByb3ZpZGVyCi0gKgotICogQGRlc2NyaXB0aW9uCi0gKiBD
b25maWd1cmVzIHRoZSBtb2NrIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBuZy4kZXhjZXB0aW9u
SGFuZGxlcn0gdG8gcmV0aHJvdyBvciB0byBsb2cgZXJyb3JzIHBhc3NlZAotICogaW50byB0aGUg
YCRleGNlcHRpb25IYW5kbGVyYC4KLSAqLwotCi0vKioKLSAqIEBuZ2RvYyBvYmplY3QKLSAqIEBu
YW1lIG5nTW9jay4kZXhjZXB0aW9uSGFuZGxlcgotICoKLSAqIEBkZXNjcmlwdGlvbgotICogTW9j
ayBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgbmcuJGV4Y2VwdGlvbkhhbmRsZXJ9IHRoYXQgcmV0
aHJvd3Mgb3IgbG9ncyBlcnJvcnMgcGFzc2VkCi0gKiBpbnRvIGl0LiBTZWUge0BsaW5rIG5nTW9j
ay4kZXhjZXB0aW9uSGFuZGxlclByb3ZpZGVyICRleGNlcHRpb25IYW5kbGVyUHJvdmlkZXJ9IGZv
ciBjb25maWd1cmF0aW9uCi0gKiBpbmZvcm1hdGlvbi4KLSAqCi0gKgotICogPHByZT4KLSAqICAg
ZGVzY3JpYmUoJyRleGNlcHRpb25IYW5kbGVyUHJvdmlkZXInLCBmdW5jdGlvbigpIHsKLSAqCi0g
KiAgICAgaXQoJ3Nob3VsZCBjYXB0dXJlIGxvZyBtZXNzYWdlcyBhbmQgZXhjZXB0aW9ucycsIGZ1
bmN0aW9uKCkgewotICoKLSAqICAgICAgIG1vZHVsZShmdW5jdGlvbigkZXhjZXB0aW9uSGFuZGxl
clByb3ZpZGVyKSB7Ci0gKiAgICAgICAgICRleGNlcHRpb25IYW5kbGVyUHJvdmlkZXIubW9kZSgn
bG9nJyk7Ci0gKiAgICAgICB9KTsKLSAqCi0gKiAgICAgICBpbmplY3QoZnVuY3Rpb24oJGxvZywg
JGV4Y2VwdGlvbkhhbmRsZXIsICR0aW1lb3V0KSB7Ci0gKiAgICAgICAgICR0aW1lb3V0KGZ1bmN0
aW9uKCkgeyAkbG9nLmxvZygxKTsgfSk7Ci0gKiAgICAgICAgICR0aW1lb3V0KGZ1bmN0aW9uKCkg
eyAkbG9nLmxvZygyKTsgdGhyb3cgJ2JhbmFuYSBwZWVsJzsgfSk7Ci0gKiAgICAgICAgICR0aW1l
b3V0KGZ1bmN0aW9uKCkgeyAkbG9nLmxvZygzKTsgfSk7Ci0gKiAgICAgICAgIGV4cGVjdCgkZXhj
ZXB0aW9uSGFuZGxlci5lcnJvcnMpLnRvRXF1YWwoW10pOwotICogICAgICAgICBleHBlY3QoJGxv
Zy5hc3NlcnRFbXB0eSgpKTsKLSAqICAgICAgICAgJHRpbWVvdXQuZmx1c2goKTsKLSAqICAgICAg
ICAgZXhwZWN0KCRleGNlcHRpb25IYW5kbGVyLmVycm9ycykudG9FcXVhbChbJ2JhbmFuYSBwZWVs
J10pOwotICogICAgICAgICBleHBlY3QoJGxvZy5sb2cubG9ncykudG9FcXVhbChbWzFdLCBbMl0s
IFszXV0pOwotICogICAgICAgfSk7Ci0gKiAgICAgfSk7Ci0gKiAgIH0pOwotICogPC9wcmU+Ci0g
Ki8KLQotYW5ndWxhci5tb2NrLiRFeGNlcHRpb25IYW5kbGVyUHJvdmlkZXIgPSBmdW5jdGlvbigp
IHsKLSAgdmFyIGhhbmRsZXI7Ci0KLSAgLyoqCi0gICAqIEBuZ2RvYyBtZXRob2QKLSAgICogQG5h
bWUgbmdNb2NrLiRleGNlcHRpb25IYW5kbGVyUHJvdmlkZXIjbW9kZQotICAgKiBAbWV0aG9kT2Yg
bmdNb2NrLiRleGNlcHRpb25IYW5kbGVyUHJvdmlkZXIKLSAgICoKLSAgICogQGRlc2NyaXB0aW9u
Ci0gICAqIFNldHMgdGhlIGxvZ2dpbmcgbW9kZS4KLSAgICoKLSAgICogQHBhcmFtIHtzdHJpbmd9
IG1vZGUgTW9kZSBvZiBvcGVyYXRpb24sIGRlZmF1bHRzIHRvIGByZXRocm93YC4KLSAgICoKLSAg
ICogICAtIGByZXRocm93YDogSWYgYW55IGVycm9ycyBhcmUgYXJlIHBhc3NlZCBpbnRvIHRoZSBo
YW5kbGVyIGluIHRlc3RzLCBpdCB0eXBpY2FsbHkKLSAgICogICAgICAgICAgICAgICAgbWVhbnMg
dGhhdCB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGUgYXBwbGljYXRpb24gb3IgdGVzdCwgc28gdGhpcyBt
b2NrIHdpbGwKLSAgICogICAgICAgICAgICAgICAgbWFrZSB0aGVzZSB0ZXN0cyBmYWlsLgotICAg
KiAgIC0gYGxvZ2A6IFNvbWV0aW1lcyBpdCBpcyBkZXNpcmFibGUgdG8gdGVzdCB0aGF0IGFuIGVy
cm9yIGlzIHRocm93LCBmb3IgdGhpcyBjYXNlIHRoZSBgbG9nYCBtb2RlIHN0b3JlcyBhbgotICAg
KiAgICAgICAgICAgIGFycmF5IG9mIGVycm9ycyBpbiBgJGV4Y2VwdGlvbkhhbmRsZXIuZXJyb3Jz
YCwgdG8gYWxsb3cgbGF0ZXIgYXNzZXJ0aW9uIG9mIHRoZW0uCi0gICAqICAgICAgICAgICAgU2Vl
IHtAbGluayBuZ01vY2suJGxvZyNhc3NlcnRFbXB0eSBhc3NlcnRFbXB0eSgpfSBhbmQKLSAgICog
ICAgICAgICAgICAge0BsaW5rIG5nTW9jay4kbG9nI3Jlc2V0IHJlc2V0KCl9Ci0gICAqLwotICB0
aGlzLm1vZGUgPSBmdW5jdGlvbihtb2RlKSB7Ci0gICAgc3dpdGNoKG1vZGUpIHsKLSAgICAgIGNh
c2UgJ3JldGhyb3cnOgotICAgICAgICBoYW5kbGVyID0gZnVuY3Rpb24oZSkgewotICAgICAgICAg
IHRocm93IGU7Ci0gICAgICAgIH07Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAnbG9nJzoK
LSAgICAgICAgdmFyIGVycm9ycyA9IFtdOwotCi0gICAgICAgIGhhbmRsZXIgPSBmdW5jdGlvbihl
KSB7Ci0gICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgewotICAgICAgICAgICAg
ZXJyb3JzLnB1c2goZSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGVycm9ycy5w
dXNoKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9
OwotCi0gICAgICAgIGhhbmRsZXIuZXJyb3JzID0gZXJyb3JzOwotICAgICAgICBicmVhazsKLSAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHRocm93IEVycm9yKCJVbmtub3duIG1vZGUgJyIgKyBtb2Rl
ICsgIicsIG9ubHkgJ2xvZycvJ3JldGhyb3cnIG1vZGVzIGFyZSBhbGxvd2VkISIpOwotICAgIH0K
LSAgfTsKLQotICB0aGlzLiRnZXQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gaGFuZGxlcjsK
LSAgfTsKLQotICB0aGlzLm1vZGUoJ3JldGhyb3cnKTsKLX07Ci0KLQotLyoqCi0gKiBAbmdkb2Mg
c2VydmljZQotICogQG5hbWUgbmdNb2NrLiRsb2cKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIE1v
Y2sgaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIG5nLiRsb2d9IHRoYXQgZ2F0aGVycyBhbGwgbG9n
Z2VkIG1lc3NhZ2VzIGluIGFycmF5cwotICogKG9uZSBhcnJheSBwZXIgbG9nZ2luZyBsZXZlbCku
IFRoZXNlIGFycmF5cyBhcmUgZXhwb3NlZCBhcyBgbG9nc2AgcHJvcGVydHkgb2YgZWFjaCBvZiB0
aGUKLSAqIGxldmVsLXNwZWNpZmljIGxvZyBmdW5jdGlvbiwgZS5nLiBmb3IgbGV2ZWwgYGVycm9y
YCB0aGUgYXJyYXkgaXMgZXhwb3NlZCBhcyBgJGxvZy5lcnJvci5sb2dzYC4KLSAqCi0gKi8KLWFu
Z3VsYXIubW9jay4kTG9nUHJvdmlkZXIgPSBmdW5jdGlvbigpIHsKLQotICBmdW5jdGlvbiBjb25j
YXQoYXJyYXkxLCBhcnJheTIsIGluZGV4KSB7Ci0gICAgcmV0dXJuIGFycmF5MS5jb25jYXQoQXJy
YXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJyYXkyLCBpbmRleCkpOwotICB9Ci0KLQotICB0aGlz
LiRnZXQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgdmFyICRsb2cgPSB7Ci0gICAgICBsb2c6IGZ1bmN0
aW9uKCkgeyAkbG9nLmxvZy5sb2dzLnB1c2goY29uY2F0KFtdLCBhcmd1bWVudHMsIDApKTsgfSwK
LSAgICAgIHdhcm46IGZ1bmN0aW9uKCkgeyAkbG9nLndhcm4ubG9ncy5wdXNoKGNvbmNhdChbXSwg
YXJndW1lbnRzLCAwKSk7IH0sCi0gICAgICBpbmZvOiBmdW5jdGlvbigpIHsgJGxvZy5pbmZvLmxv
Z3MucHVzaChjb25jYXQoW10sIGFyZ3VtZW50cywgMCkpOyB9LAotICAgICAgZXJyb3I6IGZ1bmN0
aW9uKCkgeyAkbG9nLmVycm9yLmxvZ3MucHVzaChjb25jYXQoW10sIGFyZ3VtZW50cywgMCkpOyB9
Ci0gICAgfTsKLQotICAgIC8qKgotICAgICAqIEBuZ2RvYyBtZXRob2QKLSAgICAgKiBAbmFtZSBu
Z01vY2suJGxvZyNyZXNldAotICAgICAqIEBtZXRob2RPZiBuZ01vY2suJGxvZwotICAgICAqCi0g
ICAgICogQGRlc2NyaXB0aW9uCi0gICAgICogUmVzZXQgYWxsIG9mIHRoZSBsb2dnaW5nIGFycmF5
cyB0byBlbXB0eS4KLSAgICAgKi8KLSAgICAkbG9nLnJlc2V0ID0gZnVuY3Rpb24gKCkgewotICAg
ICAgLyoqCi0gICAgICAgKiBAbmdkb2MgcHJvcGVydHkKLSAgICAgICAqIEBuYW1lIG5nTW9jay4k
bG9nI2xvZy5sb2dzCi0gICAgICAgKiBAcHJvcGVydHlPZiBuZ01vY2suJGxvZwotICAgICAgICoK
LSAgICAgICAqIEBkZXNjcmlwdGlvbgotICAgICAgICogQXJyYXkgb2YgbG9nZ2VkIG1lc3NhZ2Vz
LgotICAgICAgICovCi0gICAgICAkbG9nLmxvZy5sb2dzID0gW107Ci0gICAgICAvKioKLSAgICAg
ICAqIEBuZ2RvYyBwcm9wZXJ0eQotICAgICAgICogQG5hbWUgbmdNb2NrLiRsb2cjd2Fybi5sb2dz
Ci0gICAgICAgKiBAcHJvcGVydHlPZiBuZ01vY2suJGxvZwotICAgICAgICoKLSAgICAgICAqIEBk
ZXNjcmlwdGlvbgotICAgICAgICogQXJyYXkgb2YgbG9nZ2VkIG1lc3NhZ2VzLgotICAgICAgICov
Ci0gICAgICAkbG9nLndhcm4ubG9ncyA9IFtdOwotICAgICAgLyoqCi0gICAgICAgKiBAbmdkb2Mg
cHJvcGVydHkKLSAgICAgICAqIEBuYW1lIG5nTW9jay4kbG9nI2luZm8ubG9ncwotICAgICAgICog
QHByb3BlcnR5T2YgbmdNb2NrLiRsb2cKLSAgICAgICAqCi0gICAgICAgKiBAZGVzY3JpcHRpb24K
LSAgICAgICAqIEFycmF5IG9mIGxvZ2dlZCBtZXNzYWdlcy4KLSAgICAgICAqLwotICAgICAgJGxv
Zy5pbmZvLmxvZ3MgPSBbXTsKLSAgICAgIC8qKgotICAgICAgICogQG5nZG9jIHByb3BlcnR5Ci0g
ICAgICAgKiBAbmFtZSBuZ01vY2suJGxvZyNlcnJvci5sb2dzCi0gICAgICAgKiBAcHJvcGVydHlP
ZiBuZ01vY2suJGxvZwotICAgICAgICoKLSAgICAgICAqIEBkZXNjcmlwdGlvbgotICAgICAgICog
QXJyYXkgb2YgbG9nZ2VkIG1lc3NhZ2VzLgotICAgICAgICovCi0gICAgICAkbG9nLmVycm9yLmxv
Z3MgPSBbXTsKLSAgICB9OwotCi0gICAgLyoqCi0gICAgICogQG5nZG9jIG1ldGhvZAotICAgICAq
IEBuYW1lIG5nTW9jay4kbG9nI2Fzc2VydEVtcHR5Ci0gICAgICogQG1ldGhvZE9mIG5nTW9jay4k
bG9nCi0gICAgICoKLSAgICAgKiBAZGVzY3JpcHRpb24KLSAgICAgKiBBc3NlcnQgdGhhdCB0aGUg
YWxsIG9mIHRoZSBsb2dnaW5nIG1ldGhvZHMgaGF2ZSBubyBsb2dnZWQgbWVzc2FnZXMuIElmIG1l
c3NhZ2VzIHByZXNlbnQsIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCi0gICAgICovCi0gICAgJGxv
Zy5hc3NlcnRFbXB0eSA9IGZ1bmN0aW9uKCkgewotICAgICAgdmFyIGVycm9ycyA9IFtdOwotICAg
ICAgYW5ndWxhci5mb3JFYWNoKFsnZXJyb3InLCAnd2FybicsICdpbmZvJywgJ2xvZyddLCBmdW5j
dGlvbihsb2dMZXZlbCkgewotICAgICAgICBhbmd1bGFyLmZvckVhY2goJGxvZ1tsb2dMZXZlbF0u
bG9ncywgZnVuY3Rpb24obG9nKSB7Ci0gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKGxvZywgZnVu
Y3Rpb24gKGxvZ0l0ZW0pIHsKLSAgICAgICAgICAgIGVycm9ycy5wdXNoKCdNT0NLICRsb2cgKCcg
KyBsb2dMZXZlbCArICcpOiAnICsgU3RyaW5nKGxvZ0l0ZW0pICsgJ1xuJyArIChsb2dJdGVtLnN0
YWNrIHx8ICcnKSk7Ci0gICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgICAgfSk7Ci0gICAg
ICBpZiAoZXJyb3JzLmxlbmd0aCkgewotICAgICAgICBlcnJvcnMudW5zaGlmdCgiRXhwZWN0ZWQg
JGxvZyB0byBiZSBlbXB0eSEgRWl0aGVyIGEgbWVzc2FnZSB3YXMgbG9nZ2VkIHVuZXhwZWN0ZWRs
eSwgb3IgYW4gZXhwZWN0ZWQgIiArCi0gICAgICAgICAgImxvZyBtZXNzYWdlIHdhcyBub3QgY2hl
Y2tlZCBhbmQgcmVtb3ZlZDoiKTsKLSAgICAgICAgZXJyb3JzLnB1c2goJycpOwotICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoZXJyb3JzLmpvaW4oJ1xuLS0tLS0tLS0tXG4nKSk7Ci0gICAgICB9Ci0g
ICAgfTsKLQotICAgICRsb2cucmVzZXQoKTsKLSAgICByZXR1cm4gJGxvZzsKLSAgfTsKLX07Ci0K
LQotKGZ1bmN0aW9uKCkgewotICB2YXIgUl9JU084MDYxX1NUUiA9IC9eKFxkezR9KS0/KFxkXGQp
LT8oXGRcZCkoPzpUKFxkXGQpKD86XDo/KFxkXGQpKD86XDo/KFxkXGQpKD86XC4oXGR7M30pKT8p
Pyk/KFp8KFsrLV0pKFxkXGQpOj8oXGRcZCkpKT8kLzsKLQotICBmdW5jdGlvbiBqc29uU3RyaW5n
VG9EYXRlKHN0cmluZyl7Ci0gICAgdmFyIG1hdGNoOwotICAgIGlmIChtYXRjaCA9IHN0cmluZy5t
YXRjaChSX0lTTzgwNjFfU1RSKSkgewotICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgwKSwKLSAg
ICAgICAgICB0ekhvdXIgPSAwLAotICAgICAgICAgIHR6TWluICA9IDA7Ci0gICAgICBpZiAobWF0
Y2hbOV0pIHsKLSAgICAgICAgdHpIb3VyID0gaW50KG1hdGNoWzldICsgbWF0Y2hbMTBdKTsKLSAg
ICAgICAgdHpNaW4gPSBpbnQobWF0Y2hbOV0gKyBtYXRjaFsxMV0pOwotICAgICAgfQotICAgICAg
ZGF0ZS5zZXRVVENGdWxsWWVhcihpbnQobWF0Y2hbMV0pLCBpbnQobWF0Y2hbMl0pIC0gMSwgaW50
KG1hdGNoWzNdKSk7Ci0gICAgICBkYXRlLnNldFVUQ0hvdXJzKGludChtYXRjaFs0XXx8MCkgLSB0
ekhvdXIsIGludChtYXRjaFs1XXx8MCkgLSB0ek1pbiwgaW50KG1hdGNoWzZdfHwwKSwgaW50KG1h
dGNoWzddfHwwKSk7Ci0gICAgICByZXR1cm4gZGF0ZTsKLSAgICB9Ci0gICAgcmV0dXJuIHN0cmlu
ZzsKLSAgfQotCi0gIGZ1bmN0aW9uIGludChzdHIpIHsKLSAgICByZXR1cm4gcGFyc2VJbnQoc3Ry
LCAxMCk7Ci0gIH0KLQotICBmdW5jdGlvbiBwYWROdW1iZXIobnVtLCBkaWdpdHMsIHRyaW0pIHsK
LSAgICB2YXIgbmVnID0gJyc7Ci0gICAgaWYgKG51bSA8IDApIHsKLSAgICAgIG5lZyA9ICAnLSc7
Ci0gICAgICBudW0gPSAtbnVtOwotICAgIH0KLSAgICBudW0gPSAnJyArIG51bTsKLSAgICB3aGls
ZShudW0ubGVuZ3RoIDwgZGlnaXRzKSBudW0gPSAnMCcgKyBudW07Ci0gICAgaWYgKHRyaW0pCi0g
ICAgICBudW0gPSBudW0uc3Vic3RyKG51bS5sZW5ndGggLSBkaWdpdHMpOwotICAgIHJldHVybiBu
ZWcgKyBudW07Ci0gIH0KLQotCi0gIC8qKgotICAgKiBAbmdkb2Mgb2JqZWN0Ci0gICAqIEBuYW1l
IGFuZ3VsYXIubW9jay5UekRhdGUKLSAgICogQGRlc2NyaXB0aW9uCi0gICAqCi0gICAqICpOT1RF
KjogdGhpcyBpcyBub3QgYW4gaW5qZWN0YWJsZSBpbnN0YW5jZSwganVzdCBhIGdsb2JhbGx5IGF2
YWlsYWJsZSBtb2NrIGNsYXNzIG9mIGBEYXRlYC4KLSAgICoKLSAgICogTW9jayBvZiB0aGUgRGF0
ZSB0eXBlIHdoaWNoIGhhcyBpdHMgdGltZXpvbmUgc3BlY2lmaWVkIHZpYSBjb25zdHJvY3RvciBh
cmcuCi0gICAqCi0gICAqIFRoZSBtYWluIHB1cnBvc2UgaXMgdG8gY3JlYXRlIERhdGUtbGlrZSBp
bnN0YW5jZXMgd2l0aCB0aW1lem9uZSBmaXhlZCB0byB0aGUgc3BlY2lmaWVkIHRpbWV6b25lCi0g
ICAqIG9mZnNldCwgc28gdGhhdCB3ZSBjYW4gdGVzdCBjb2RlIHRoYXQgZGVwZW5kcyBvbiBsb2Nh
bCB0aW1lem9uZSBzZXR0aW5ncyB3aXRob3V0IGRlcGVuZGVuY3kgb24KLSAgICogdGhlIHRpbWUg
em9uZSBzZXR0aW5ncyBvZiB0aGUgbWFjaGluZSB3aGVyZSB0aGUgY29kZSBpcyBydW5uaW5nLgot
ICAgKgotICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IE9mZnNldCBvZiB0aGUgKmRlc2lyZWQq
IHRpbWV6b25lIGluIGhvdXJzIChmcmFjdGlvbnMgd2lsbCBiZSBob25vcmVkKQotICAgKiBAcGFy
YW0geyhudW1iZXJ8c3RyaW5nKX0gdGltZXN0YW1wIFRpbWVzdGFtcCByZXByZXNlbnRpbmcgdGhl
IGRlc2lyZWQgdGltZSBpbiAqVVRDKgotICAgKgotICAgKiBAZXhhbXBsZQotICAgKiAhISEhIFdB
Uk5JTkcgISEhISEKLSAgICogVGhpcyBpcyBub3QgYSBjb21wbGV0ZSBEYXRlIG9iamVjdCBzbyBv
bmx5IG1ldGhvZHMgdGhhdCB3ZXJlIGltcGxlbWVudGVkIGNhbiBiZSBjYWxsZWQgc2FmZWx5Lgot
ICAgKiBUbyBtYWtlIG1hdHRlcnMgd29yc2UsIFR6RGF0ZSBpbnN0YW5jZXMgaW5oZXJpdCBzdHVm
ZiBmcm9tIERhdGUgdmlhIGEgcHJvdG90eXBlLgotICAgKgotICAgKiBXZSBkbyBvdXIgYmVzdCB0
byBpbnRlcmNlcHQgY2FsbHMgdG8gInVuaW1wbGVtZW50ZWQiIG1ldGhvZHMsIGJ1dCBzaW5jZSB0
aGUgbGlzdCBvZiBtZXRob2RzIGlzCi0gICAqIGluY29tcGxldGUgd2UgbWlnaHQgYmUgbWlzc2lu
ZyBzb21lIG5vbi1zdGFuZGFyZCBtZXRob2RzLiBUaGlzIGNhbiByZXN1bHQgaW4gZXJyb3JzIGxp
a2U6Ci0gICAqICJEYXRlLnByb3RvdHlwZS5mb28gY2FsbGVkIG9uIGluY29tcGF0aWJsZSBPYmpl
Y3QiLgotICAgKgotICAgKiA8cHJlPgotICAgKiB2YXIgbmV3WWVhckluQnJhdGlzbGF2YSA9IG5l
dyBUekRhdGUoLTEsICcyMDA5LTEyLTMxVDIzOjAwOjAwWicpOwotICAgKiBuZXdZZWFySW5CcmF0
aXNsYXZhLmdldFRpbWV6b25lT2Zmc2V0KCkgPT4gLTYwOwotICAgKiBuZXdZZWFySW5CcmF0aXNs
YXZhLmdldEZ1bGxZZWFyKCkgPT4gMjAxMDsKLSAgICogbmV3WWVhckluQnJhdGlzbGF2YS5nZXRN
b250aCgpID0+IDA7Ci0gICAqIG5ld1llYXJJbkJyYXRpc2xhdmEuZ2V0RGF0ZSgpID0+IDE7Ci0g
ICAqIG5ld1llYXJJbkJyYXRpc2xhdmEuZ2V0SG91cnMoKSA9PiAwOwotICAgKiBuZXdZZWFySW5C
cmF0aXNsYXZhLmdldE1pbnV0ZXMoKSA9PiAwOwotICAgKiA8L3ByZT4KLSAgICoKLSAgICovCi0g
IGFuZ3VsYXIubW9jay5UekRhdGUgPSBmdW5jdGlvbiAob2Zmc2V0LCB0aW1lc3RhbXApIHsKLSAg
ICB2YXIgc2VsZiA9IG5ldyBEYXRlKDApOwotICAgIGlmIChhbmd1bGFyLmlzU3RyaW5nKHRpbWVz
dGFtcCkpIHsKLSAgICAgIHZhciB0c1N0ciA9IHRpbWVzdGFtcDsKLQotICAgICAgc2VsZi5vcmln
RGF0ZSA9IGpzb25TdHJpbmdUb0RhdGUodGltZXN0YW1wKTsKLQotICAgICAgdGltZXN0YW1wID0g
c2VsZi5vcmlnRGF0ZS5nZXRUaW1lKCk7Ci0gICAgICBpZiAoaXNOYU4odGltZXN0YW1wKSkKLSAg
ICAgICAgdGhyb3cgewotICAgICAgICAgIG5hbWU6ICJJbGxlZ2FsIEFyZ3VtZW50IiwKLSAgICAg
ICAgICBtZXNzYWdlOiAiQXJnICciICsgdHNTdHIgKyAiJyBwYXNzZWQgaW50byBUekRhdGUgY29u
c3RydWN0b3IgaXMgbm90IGEgdmFsaWQgZGF0ZSBzdHJpbmciCi0gICAgICAgIH07Ci0gICAgfSBl
bHNlIHsKLSAgICAgIHNlbGYub3JpZ0RhdGUgPSBuZXcgRGF0ZSh0aW1lc3RhbXApOwotICAgIH0K
LQotICAgIHZhciBsb2NhbE9mZnNldCA9IG5ldyBEYXRlKHRpbWVzdGFtcCkuZ2V0VGltZXpvbmVP
ZmZzZXQoKTsKLSAgICBzZWxmLm9mZnNldERpZmYgPSBsb2NhbE9mZnNldCo2MCoxMDAwIC0gb2Zm
c2V0KjEwMDAqNjAqNjA7Ci0gICAgc2VsZi5kYXRlID0gbmV3IERhdGUodGltZXN0YW1wICsgc2Vs
Zi5vZmZzZXREaWZmKTsKLQotICAgIHNlbGYuZ2V0VGltZSA9IGZ1bmN0aW9uKCkgewotICAgICAg
cmV0dXJuIHNlbGYuZGF0ZS5nZXRUaW1lKCkgLSBzZWxmLm9mZnNldERpZmY7Ci0gICAgfTsKLQot
ICAgIHNlbGYudG9Mb2NhbGVEYXRlU3RyaW5nID0gZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4g
c2VsZi5kYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpOwotICAgIH07Ci0KLSAgICBzZWxmLmdldEZ1
bGxZZWFyID0gZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gc2VsZi5kYXRlLmdldEZ1bGxZZWFy
KCk7Ci0gICAgfTsKLQotICAgIHNlbGYuZ2V0TW9udGggPSBmdW5jdGlvbigpIHsKLSAgICAgIHJl
dHVybiBzZWxmLmRhdGUuZ2V0TW9udGgoKTsKLSAgICB9OwotCi0gICAgc2VsZi5nZXREYXRlID0g
ZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gc2VsZi5kYXRlLmdldERhdGUoKTsKLSAgICB9Owot
Ci0gICAgc2VsZi5nZXRIb3VycyA9IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIHNlbGYuZGF0
ZS5nZXRIb3VycygpOwotICAgIH07Ci0KLSAgICBzZWxmLmdldE1pbnV0ZXMgPSBmdW5jdGlvbigp
IHsKLSAgICAgIHJldHVybiBzZWxmLmRhdGUuZ2V0TWludXRlcygpOwotICAgIH07Ci0KLSAgICBz
ZWxmLmdldFNlY29uZHMgPSBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiBzZWxmLmRhdGUuZ2V0
U2Vjb25kcygpOwotICAgIH07Ci0KLSAgICBzZWxmLmdldFRpbWV6b25lT2Zmc2V0ID0gZnVuY3Rp
b24oKSB7Ci0gICAgICByZXR1cm4gb2Zmc2V0ICogNjA7Ci0gICAgfTsKLQotICAgIHNlbGYuZ2V0
VVRDRnVsbFllYXIgPSBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiBzZWxmLm9yaWdEYXRlLmdl
dFVUQ0Z1bGxZZWFyKCk7Ci0gICAgfTsKLQotICAgIHNlbGYuZ2V0VVRDTW9udGggPSBmdW5jdGlv
bigpIHsKLSAgICAgIHJldHVybiBzZWxmLm9yaWdEYXRlLmdldFVUQ01vbnRoKCk7Ci0gICAgfTsK
LQotICAgIHNlbGYuZ2V0VVRDRGF0ZSA9IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIHNlbGYu
b3JpZ0RhdGUuZ2V0VVRDRGF0ZSgpOwotICAgIH07Ci0KLSAgICBzZWxmLmdldFVUQ0hvdXJzID0g
ZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gc2VsZi5vcmlnRGF0ZS5nZXRVVENIb3VycygpOwot
ICAgIH07Ci0KLSAgICBzZWxmLmdldFVUQ01pbnV0ZXMgPSBmdW5jdGlvbigpIHsKLSAgICAgIHJl
dHVybiBzZWxmLm9yaWdEYXRlLmdldFVUQ01pbnV0ZXMoKTsKLSAgICB9OwotCi0gICAgc2VsZi5n
ZXRVVENTZWNvbmRzID0gZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gc2VsZi5vcmlnRGF0ZS5n
ZXRVVENTZWNvbmRzKCk7Ci0gICAgfTsKLQotICAgIHNlbGYuZ2V0VVRDTWlsbGlzZWNvbmRzID0g
ZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gc2VsZi5vcmlnRGF0ZS5nZXRVVENNaWxsaXNlY29u
ZHMoKTsKLSAgICB9OwotCi0gICAgc2VsZi5nZXREYXkgPSBmdW5jdGlvbigpIHsKLSAgICAgIHJl
dHVybiBzZWxmLmRhdGUuZ2V0RGF5KCk7Ci0gICAgfTsKLQotICAgIC8vIHByb3ZpZGUgdGhpcyBt
ZXRob2Qgb25seSBvbiBicm93c2VycyB0aGF0IGFscmVhZHkgaGF2ZSBpdAotICAgIGlmIChzZWxm
LnRvSVNPU3RyaW5nKSB7Ci0gICAgICBzZWxmLnRvSVNPU3RyaW5nID0gZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIHJldHVybiBwYWROdW1iZXIoc2VsZi5vcmlnRGF0ZS5nZXRVVENGdWxsWWVhcigpLCA0
KSArICctJyArCi0gICAgICAgICAgICAgIHBhZE51bWJlcihzZWxmLm9yaWdEYXRlLmdldFVUQ01v
bnRoKCkgKyAxLCAyKSArICctJyArCi0gICAgICAgICAgICAgIHBhZE51bWJlcihzZWxmLm9yaWdE
YXRlLmdldFVUQ0RhdGUoKSwgMikgKyAnVCcgKwotICAgICAgICAgICAgICBwYWROdW1iZXIoc2Vs
Zi5vcmlnRGF0ZS5nZXRVVENIb3VycygpLCAyKSArICc6JyArCi0gICAgICAgICAgICAgIHBhZE51
bWJlcihzZWxmLm9yaWdEYXRlLmdldFVUQ01pbnV0ZXMoKSwgMikgKyAnOicgKwotICAgICAgICAg
ICAgICBwYWROdW1iZXIoc2VsZi5vcmlnRGF0ZS5nZXRVVENTZWNvbmRzKCksIDIpICsgJy4nICsK
LSAgICAgICAgICAgICAgcGFkTnVtYmVyKHNlbGYub3JpZ0RhdGUuZ2V0VVRDTWlsbGlzZWNvbmRz
KCksIDMpICsgJ1onCi0gICAgICB9Ci0gICAgfQotCi0gICAgLy9oaWRlIGFsbCBtZXRob2RzIG5v
dCBpbXBsZW1lbnRlZCBpbiB0aGlzIG1vY2sgdGhhdCB0aGUgRGF0ZSBwcm90b3R5cGUgZXhwb3Nl
cwotICAgIHZhciB1bmltcGxlbWVudGVkTWV0aG9kcyA9IFsnZ2V0TWlsbGlzZWNvbmRzJywgJ2dl
dFVUQ0RheScsCi0gICAgICAgICdnZXRZZWFyJywgJ3NldERhdGUnLCAnc2V0RnVsbFllYXInLCAn
c2V0SG91cnMnLCAnc2V0TWlsbGlzZWNvbmRzJywKLSAgICAgICAgJ3NldE1pbnV0ZXMnLCAnc2V0
TW9udGgnLCAnc2V0U2Vjb25kcycsICdzZXRUaW1lJywgJ3NldFVUQ0RhdGUnLCAnc2V0VVRDRnVs
bFllYXInLAotICAgICAgICAnc2V0VVRDSG91cnMnLCAnc2V0VVRDTWlsbGlzZWNvbmRzJywgJ3Nl
dFVUQ01pbnV0ZXMnLCAnc2V0VVRDTW9udGgnLCAnc2V0VVRDU2Vjb25kcycsCi0gICAgICAgICdz
ZXRZZWFyJywgJ3RvRGF0ZVN0cmluZycsICd0b0dNVFN0cmluZycsICd0b0pTT04nLCAndG9Mb2Nh
bGVGb3JtYXQnLCAndG9Mb2NhbGVTdHJpbmcnLAotICAgICAgICAndG9Mb2NhbGVUaW1lU3RyaW5n
JywgJ3RvU291cmNlJywgJ3RvU3RyaW5nJywgJ3RvVGltZVN0cmluZycsICd0b1VUQ1N0cmluZycs
ICd2YWx1ZU9mJ107Ci0KLSAgICBhbmd1bGFyLmZvckVhY2godW5pbXBsZW1lbnRlZE1ldGhvZHMs
IGZ1bmN0aW9uKG1ldGhvZE5hbWUpIHsKLSAgICAgIHNlbGZbbWV0aG9kTmFtZV0gPSBmdW5jdGlv
bigpIHsKLSAgICAgICAgdGhyb3cgRXJyb3IoIk1ldGhvZCAnIiArIG1ldGhvZE5hbWUgKyAiJyBp
cyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIFR6RGF0ZSBtb2NrIik7Ci0gICAgICB9OwotICAgIH0p
OwotCi0gICAgcmV0dXJuIHNlbGY7Ci0gIH07Ci0KLSAgLy9tYWtlICJ0ekRhdGVJbnN0YW5jZSBp
bnN0YW5jZW9mIERhdGUiIHJldHVybiB0cnVlCi0gIGFuZ3VsYXIubW9jay5UekRhdGUucHJvdG90
eXBlID0gRGF0ZS5wcm90b3R5cGU7Ci19KSgpOwotCi0KLS8qKgotICogQG5nZG9jIGZ1bmN0aW9u
Ci0gKiBAbmFtZSBhbmd1bGFyLm1vY2suZHVtcAotICogQGRlc2NyaXB0aW9uCi0gKgotICogKk5P
VEUqOiB0aGlzIGlzIG5vdCBhbiBpbmplY3RhYmxlIGluc3RhbmNlLCBqdXN0IGEgZ2xvYmFsbHkg
YXZhaWxhYmxlIGZ1bmN0aW9uLgotICoKLSAqIE1ldGhvZCBmb3Igc2VyaWFsaXppbmcgY29tbW9u
IGFuZ3VsYXIgb2JqZWN0cyAoc2NvcGUsIGVsZW1lbnRzLCBldGMuLikgaW50byBzdHJpbmdzLCB1
c2VmdWwgZm9yIGRlYnVnZ2luZy4KLSAqCi0gKiBUaGlzIG1ldGhvZCBpcyBhbHNvIGF2YWlsYWJs
ZSBvbiB3aW5kb3csIHdoZXJlIGl0IGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkgb2JqZWN0cyBvbiBk
ZWJ1ZyBjb25zb2xlLgotICoKLSAqIEBwYXJhbSB7Kn0gb2JqZWN0IC0gYW55IG9iamVjdCB0byB0
dXJuIGludG8gc3RyaW5nLgotICogQHJldHVybiB7c3RyaW5nfSBhIHNlcmlhbGl6ZWQgc3RyaW5n
IG9mIHRoZSBhcmd1bWVudAotICovCi1hbmd1bGFyLm1vY2suZHVtcCA9IGZ1bmN0aW9uKG9iamVj
dCkgewotICByZXR1cm4gc2VyaWFsaXplKG9iamVjdCk7Ci0KLSAgZnVuY3Rpb24gc2VyaWFsaXpl
KG9iamVjdCkgewotICAgIHZhciBvdXQ7Ci0KLSAgICBpZiAoYW5ndWxhci5pc0VsZW1lbnQob2Jq
ZWN0KSkgewotICAgICAgb2JqZWN0ID0gYW5ndWxhci5lbGVtZW50KG9iamVjdCk7Ci0gICAgICBv
dXQgPSBhbmd1bGFyLmVsZW1lbnQoJzxkaXY+PC9kaXY+Jyk7Ci0gICAgICBhbmd1bGFyLmZvckVh
Y2gob2JqZWN0LCBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgICAgIG91dC5hcHBlbmQoYW5ndWxh
ci5lbGVtZW50KGVsZW1lbnQpLmNsb25lKCkpOwotICAgICAgfSk7Ci0gICAgICBvdXQgPSBvdXQu
aHRtbCgpOwotICAgIH0gZWxzZSBpZiAoYW5ndWxhci5pc0FycmF5KG9iamVjdCkpIHsKLSAgICAg
IG91dCA9IFtdOwotICAgICAgYW5ndWxhci5mb3JFYWNoKG9iamVjdCwgZnVuY3Rpb24obykgewot
ICAgICAgICBvdXQucHVzaChzZXJpYWxpemUobykpOwotICAgICAgfSk7Ci0gICAgICBvdXQgPSAn
WyAnICsgb3V0LmpvaW4oJywgJykgKyAnIF0nOwotICAgIH0gZWxzZSBpZiAoYW5ndWxhci5pc09i
amVjdChvYmplY3QpKSB7Ci0gICAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKG9iamVjdC4kZXZh
bCkgJiYgYW5ndWxhci5pc0Z1bmN0aW9uKG9iamVjdC4kYXBwbHkpKSB7Ci0gICAgICAgIG91dCA9
IHNlcmlhbGl6ZVNjb3BlKG9iamVjdCk7Ci0gICAgICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5j
ZW9mIEVycm9yKSB7Ci0gICAgICAgIG91dCA9IG9iamVjdC5zdGFjayB8fCAoJycgKyBvYmplY3Qu
bmFtZSArICc6ICcgKyBvYmplY3QubWVzc2FnZSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBv
dXQgPSBhbmd1bGFyLnRvSnNvbihvYmplY3QsIHRydWUpOwotICAgICAgfQotICAgIH0gZWxzZSB7
Ci0gICAgICBvdXQgPSBTdHJpbmcob2JqZWN0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gb3V0Owot
ICB9Ci0KLSAgZnVuY3Rpb24gc2VyaWFsaXplU2NvcGUoc2NvcGUsIG9mZnNldCkgewotICAgIG9m
ZnNldCA9IG9mZnNldCB8fCAgJyAgJzsKLSAgICB2YXIgbG9nID0gW29mZnNldCArICdTY29wZSgn
ICsgc2NvcGUuJGlkICsgJyk6IHsnXTsKLSAgICBmb3IgKCB2YXIga2V5IGluIHNjb3BlICkgewot
ICAgICAgaWYgKHNjb3BlLmhhc093blByb3BlcnR5KGtleSkgJiYgIWtleS5tYXRjaCgvXihcJHx0
aGlzKS8pKSB7Ci0gICAgICAgIGxvZy5wdXNoKCcgICcgKyBrZXkgKyAnOiAnICsgYW5ndWxhci50
b0pzb24oc2NvcGVba2V5XSkpOwotICAgICAgfQotICAgIH0KLSAgICB2YXIgY2hpbGQgPSBzY29w
ZS4kJGNoaWxkSGVhZDsKLSAgICB3aGlsZShjaGlsZCkgewotICAgICAgbG9nLnB1c2goc2VyaWFs
aXplU2NvcGUoY2hpbGQsIG9mZnNldCArICcgICcpKTsKLSAgICAgIGNoaWxkID0gY2hpbGQuJCRu
ZXh0U2libGluZzsKLSAgICB9Ci0gICAgbG9nLnB1c2goJ30nKTsKLSAgICByZXR1cm4gbG9nLmpv
aW4oJ1xuJyArIG9mZnNldCk7Ci0gIH0KLX07Ci0KLS8qKgotICogQG5nZG9jIG9iamVjdAotICog
QG5hbWUgbmdNb2NrLiRodHRwQmFja2VuZAotICogQGRlc2NyaXB0aW9uCi0gKiBGYWtlIEhUVFAg
YmFja2VuZCBpbXBsZW1lbnRhdGlvbiBzdWl0YWJsZSBmb3IgdW5pdCB0ZXN0aW5nIGFwcGxpY2F0
aW9uIHRoYXQgdXNlIHRoZQotICoge0BsaW5rIG5nLiRodHRwICRodHRwIHNlcnZpY2V9LgotICoK
LSAqICpOb3RlKjogRm9yIGZha2UgaHR0cCBiYWNrZW5kIGltcGxlbWVudGF0aW9uIHN1aXRhYmxl
IGZvciBlbmQtdG8tZW5kIHRlc3Rpbmcgb3IgYmFja2VuZC1sZXNzCi0gKiBkZXZlbG9wbWVudCBw
bGVhc2Ugc2VlIHtAbGluayBuZ01vY2tFMkUuJGh0dHBCYWNrZW5kIGUyZSAkaHR0cEJhY2tlbmQg
bW9ja30uCi0gKgotICogRHVyaW5nIHVuaXQgdGVzdGluZywgd2Ugd2FudCBvdXIgdW5pdCB0ZXN0
cyB0byBydW4gcXVpY2tseSBhbmQgaGF2ZSBubyBleHRlcm5hbCBkZXBlbmRlbmNpZXMgc28KLSAq
IHdlIGRvbuKAmXQgd2FudCB0byBzZW5kIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxh
Lm9yZy9lbi94bWxodHRwcmVxdWVzdCBYSFJ9IG9yCi0gKiB7QGxpbmsgaHR0cDovL2VuLndpa2lw
ZWRpYS5vcmcvd2lraS9KU09OUCBKU09OUH0gcmVxdWVzdHMgdG8gYSByZWFsIHNlcnZlci4gQWxs
IHdlIHJlYWxseSBuZWVkIGlzCi0gKiB0byB2ZXJpZnkgd2hldGhlciBhIGNlcnRhaW4gcmVxdWVz
dCBoYXMgYmVlbiBzZW50IG9yIG5vdCwgb3IgYWx0ZXJuYXRpdmVseSBqdXN0IGxldCB0aGUKLSAq
IGFwcGxpY2F0aW9uIG1ha2UgcmVxdWVzdHMsIHJlc3BvbmQgd2l0aCBwcmUtdHJhaW5lZCByZXNw
b25zZXMgYW5kIGFzc2VydCB0aGF0IHRoZSBlbmQgcmVzdWx0IGlzCi0gKiB3aGF0IHdlIGV4cGVj
dCBpdCB0byBiZS4KLSAqCi0gKiBUaGlzIG1vY2sgaW1wbGVtZW50YXRpb24gY2FuIGJlIHVzZWQg
dG8gcmVzcG9uZCB3aXRoIHN0YXRpYyBvciBkeW5hbWljIHJlc3BvbnNlcyB2aWEgdGhlCi0gKiBg
ZXhwZWN0YCBhbmQgYHdoZW5gIGFwaXMgYW5kIHRoZWlyIHNob3J0Y3V0cyAoYGV4cGVjdEdFVGAs
IGB3aGVuUE9TVGAsIGV0YykuCi0gKgotICogV2hlbiBhbiBBbmd1bGFyIGFwcGxpY2F0aW9uIG5l
ZWRzIHNvbWUgZGF0YSBmcm9tIGEgc2VydmVyLCBpdCBjYWxscyB0aGUgJGh0dHAgc2VydmljZSwg
d2hpY2gKLSAqIHNlbmRzIHRoZSByZXF1ZXN0IHRvIGEgcmVhbCBzZXJ2ZXIgdXNpbmcgJGh0dHBC
YWNrZW5kIHNlcnZpY2UuIFdpdGggZGVwZW5kZW5jeSBpbmplY3Rpb24sIGl0IGlzCi0gKiBlYXN5
IHRvIGluamVjdCAkaHR0cEJhY2tlbmQgbW9jayAod2hpY2ggaGFzIHRoZSBzYW1lIEFQSSBhcyAk
aHR0cEJhY2tlbmQpIGFuZCB1c2UgaXQgdG8gdmVyaWZ5Ci0gKiB0aGUgcmVxdWVzdHMgYW5kIHJl
c3BvbmQgd2l0aCBzb21lIHRlc3RpbmcgZGF0YSB3aXRob3V0IHNlbmRpbmcgYSByZXF1ZXN0IHRv
IHJlYWwgc2VydmVyLgotICoKLSAqIFRoZXJlIGFyZSB0d28gd2F5cyB0byBzcGVjaWZ5IHdoYXQg
dGVzdCBkYXRhIHNob3VsZCBiZSByZXR1cm5lZCBhcyBodHRwIHJlc3BvbnNlcyBieSB0aGUgbW9j
awotICogYmFja2VuZCB3aGVuIHRoZSBjb2RlIHVuZGVyIHRlc3QgbWFrZXMgaHR0cCByZXF1ZXN0
czoKLSAqCi0gKiAtIGAkaHR0cEJhY2tlbmQuZXhwZWN0YCAtIHNwZWNpZmllcyBhIHJlcXVlc3Qg
ZXhwZWN0YXRpb24KLSAqIC0gYCRodHRwQmFja2VuZC53aGVuYCAtIHNwZWNpZmllcyBhIGJhY2tl
bmQgZGVmaW5pdGlvbgotICoKLSAqCi0gKiAjIFJlcXVlc3QgRXhwZWN0YXRpb25zIHZzIEJhY2tl
bmQgRGVmaW5pdGlvbnMKLSAqCi0gKiBSZXF1ZXN0IGV4cGVjdGF0aW9ucyBwcm92aWRlIGEgd2F5
IHRvIG1ha2UgYXNzZXJ0aW9ucyBhYm91dCByZXF1ZXN0cyBtYWRlIGJ5IHRoZSBhcHBsaWNhdGlv
biBhbmQKLSAqIHRvIGRlZmluZSByZXNwb25zZXMgZm9yIHRob3NlIHJlcXVlc3RzLiBUaGUgdGVz
dCB3aWxsIGZhaWwgaWYgdGhlIGV4cGVjdGVkIHJlcXVlc3RzIGFyZSBub3QgbWFkZQotICogb3Ig
dGhleSBhcmUgbWFkZSBpbiB0aGUgd3Jvbmcgb3JkZXIuCi0gKgotICogQmFja2VuZCBkZWZpbml0
aW9ucyBhbGxvdyB5b3UgdG8gZGVmaW5lIGEgZmFrZSBiYWNrZW5kIGZvciB5b3VyIGFwcGxpY2F0
aW9uIHdoaWNoIGRvZXNuJ3QgYXNzZXJ0Ci0gKiBpZiBhIHBhcnRpY3VsYXIgcmVxdWVzdCB3YXMg
bWFkZSBvciBub3QsIGl0IGp1c3QgcmV0dXJucyBhIHRyYWluZWQgcmVzcG9uc2UgaWYgYSByZXF1
ZXN0IGlzIG1hZGUuCi0gKiBUaGUgdGVzdCB3aWxsIHBhc3Mgd2hldGhlciBvciBub3QgdGhlIHJl
cXVlc3QgZ2V0cyBtYWRlIGR1cmluZyB0ZXN0aW5nLgotICoKLSAqCi0gKiA8dGFibGUgY2xhc3M9
InRhYmxlIj4KLSAqICAgPHRyPjx0aCB3aWR0aD0iMjIwcHgiPjwvdGg+PHRoPlJlcXVlc3QgZXhw
ZWN0YXRpb25zPC90aD48dGg+QmFja2VuZCBkZWZpbml0aW9uczwvdGg+PC90cj4KLSAqICAgPHRy
PgotICogICAgIDx0aD5TeW50YXg8L3RoPgotICogICAgIDx0ZD4uZXhwZWN0KC4uLikucmVzcG9u
ZCguLi4pPC90ZD4KLSAqICAgICA8dGQ+LndoZW4oLi4uKS5yZXNwb25kKC4uLik8L3RkPgotICog
ICA8L3RyPgotICogICA8dHI+Ci0gKiAgICAgPHRoPlR5cGljYWwgdXNhZ2U8L3RoPgotICogICAg
IDx0ZD5zdHJpY3QgdW5pdCB0ZXN0czwvdGQ+Ci0gKiAgICAgPHRkPmxvb3NlIChibGFjay1ib3gp
IHVuaXQgdGVzdGluZzwvdGQ+Ci0gKiAgIDwvdHI+Ci0gKiAgIDx0cj4KLSAqICAgICA8dGg+RnVs
ZmlsbHMgbXVsdGlwbGUgcmVxdWVzdHM8L3RoPgotICogICAgIDx0ZD5OTzwvdGQ+Ci0gKiAgICAg
PHRkPllFUzwvdGQ+Ci0gKiAgIDwvdHI+Ci0gKiAgIDx0cj4KLSAqICAgICA8dGg+T3JkZXIgb2Yg
cmVxdWVzdHMgbWF0dGVyczwvdGg+Ci0gKiAgICAgPHRkPllFUzwvdGQ+Ci0gKiAgICAgPHRkPk5P
PC90ZD4KLSAqICAgPC90cj4KLSAqICAgPHRyPgotICogICAgIDx0aD5SZXF1ZXN0IHJlcXVpcmVk
PC90aD4KLSAqICAgICA8dGQ+WUVTPC90ZD4KLSAqICAgICA8dGQ+Tk88L3RkPgotICogICA8L3Ry
PgotICogICA8dHI+Ci0gKiAgICAgPHRoPlJlc3BvbnNlIHJlcXVpcmVkPC90aD4KLSAqICAgICA8
dGQ+b3B0aW9uYWwgKHNlZSBiZWxvdyk8L3RkPgotICogICAgIDx0ZD5ZRVM8L3RkPgotICogICA8
L3RyPgotICogPC90YWJsZT4KLSAqCi0gKiBJbiBjYXNlcyB3aGVyZSBib3RoIGJhY2tlbmQgZGVm
aW5pdGlvbnMgYW5kIHJlcXVlc3QgZXhwZWN0YXRpb25zIGFyZSBzcGVjaWZpZWQgZHVyaW5nIHVu
aXQKLSAqIHRlc3RpbmcsIHRoZSByZXF1ZXN0IGV4cGVjdGF0aW9ucyBhcmUgZXZhbHVhdGVkIGZp
cnN0LgotICoKLSAqIElmIGEgcmVxdWVzdCBleHBlY3RhdGlvbiBoYXMgbm8gcmVzcG9uc2Ugc3Bl
Y2lmaWVkLCB0aGUgYWxnb3JpdGhtIHdpbGwgc2VhcmNoIHlvdXIgYmFja2VuZAotICogZGVmaW5p
dGlvbnMgZm9yIGFuIGFwcHJvcHJpYXRlIHJlc3BvbnNlLgotICoKLSAqIElmIGEgcmVxdWVzdCBk
aWRuJ3QgbWF0Y2ggYW55IGV4cGVjdGF0aW9uIG9yIGlmIHRoZSBleHBlY3RhdGlvbiBkb2Vzbid0
IGhhdmUgdGhlIHJlc3BvbnNlCi0gKiBkZWZpbmVkLCB0aGUgYmFja2VuZCBkZWZpbml0aW9ucyBh
cmUgZXZhbHVhdGVkIGluIHNlcXVlbnRpYWwgb3JkZXIgdG8gc2VlIGlmIGFueSBvZiB0aGVtIG1h
dGNoCi0gKiB0aGUgcmVxdWVzdC4gVGhlIHJlc3BvbnNlIGZyb20gdGhlIGZpcnN0IG1hdGNoZWQg
ZGVmaW5pdGlvbiBpcyByZXR1cm5lZC4KLSAqCi0gKgotICogIyBGbHVzaGluZyBIVFRQIHJlcXVl
c3RzCi0gKgotICogVGhlICRodHRwQmFja2VuZCB1c2VkIGluIHByb2R1Y3Rpb24sIGFsd2F5cyBy
ZXNwb25kcyB0byByZXF1ZXN0cyB3aXRoIHJlc3BvbnNlcyBhc3luY2hyb25vdXNseS4KLSAqIElm
IHdlIHByZXNlcnZlZCB0aGlzIGJlaGF2aW9yIGluIHVuaXQgdGVzdGluZywgd2UnZCBoYXZlIHRv
IGNyZWF0ZSBhc3luYyB1bml0IHRlc3RzLCB3aGljaCBhcmUKLSAqIGhhcmQgdG8gd3JpdGUsIGZv
bGxvdyBhbmQgbWFpbnRhaW4uIEF0IHRoZSBzYW1lIHRpbWUgdGhlIHRlc3RpbmcgbW9jaywgY2Fu
J3QgcmVzcG9uZAotICogc3luY2hyb25vdXNseSBiZWNhdXNlIHRoYXQgd291bGQgY2hhbmdlIHRo
ZSBleGVjdXRpb24gb2YgdGhlIGNvZGUgdW5kZXIgdGVzdC4gRm9yIHRoaXMgcmVhc29uIHRoZQot
ICogbW9jayAkaHR0cEJhY2tlbmQgaGFzIGEgYGZsdXNoKClgIG1ldGhvZCwgd2hpY2ggYWxsb3dz
IHRoZSB0ZXN0IHRvIGV4cGxpY2l0bHkgZmx1c2ggcGVuZGluZwotICogcmVxdWVzdHMgYW5kIHRo
dXMgcHJlc2VydmluZyB0aGUgYXN5bmMgYXBpIG9mIHRoZSBiYWNrZW5kLCB3aGlsZSBhbGxvd2lu
ZyB0aGUgdGVzdCB0byBleGVjdXRlCi0gKiBzeW5jaHJvbm91c2x5LgotICoKLSAqCi0gKiAjIFVu
aXQgdGVzdGluZyB3aXRoIG1vY2sgJGh0dHBCYWNrZW5kCi0gKgotICogPHByZT4KLSAgIC8vIGNv
bnRyb2xsZXIKLSAgIGZ1bmN0aW9uIE15Q29udHJvbGxlcigkc2NvcGUsICRodHRwKSB7Ci0gICAg
ICRodHRwLmdldCgnL2F1dGgucHknKS5zdWNjZXNzKGZ1bmN0aW9uKGRhdGEpIHsKLSAgICAgICAk
c2NvcGUudXNlciA9IGRhdGE7Ci0gICAgIH0pOwotCi0gICAgIHRoaXMuc2F2ZU1lc3NhZ2UgPSBm
dW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgICAgJHNjb3BlLnN0YXR1cyA9ICdTYXZpbmcuLi4nOwot
ICAgICAgICRodHRwLnBvc3QoJy9hZGQtbXNnLnB5JywgbWVzc2FnZSkuc3VjY2VzcyhmdW5jdGlv
bihyZXNwb25zZSkgewotICAgICAgICAgJHNjb3BlLnN0YXR1cyA9ICcnOwotICAgICAgIH0pLmVy
cm9yKGZ1bmN0aW9uKCkgewotICAgICAgICAgJHNjb3BlLnN0YXR1cyA9ICdFUlJPUiEnOwotICAg
ICAgIH0pOwotICAgICB9OwotICAgfQotCi0gICAvLyB0ZXN0aW5nIGNvbnRyb2xsZXIKLSAgIHZh
ciAkaHR0cEJhY2tlbmQ7Ci0KLSAgIGJlZm9yZUVhY2goaW5qZWN0KGZ1bmN0aW9uKCRpbmplY3Rv
cikgewotICAgICAkaHR0cEJhY2tlbmQgPSAkaW5qZWN0b3IuZ2V0KCckaHR0cEJhY2tlbmQnKTsK
LQotICAgICAvLyBiYWNrZW5kIGRlZmluaXRpb24gY29tbW9uIGZvciBhbGwgdGVzdHMKLSAgICAg
JGh0dHBCYWNrZW5kLndoZW4oJ0dFVCcsICcvYXV0aC5weScpLnJlc3BvbmQoe3VzZXJJZDogJ3Vz
ZXJYJ30sIHsnQS1Ub2tlbic6ICd4eHgnfSk7Ci0gICB9KSk7Ci0KLQotICAgYWZ0ZXJFYWNoKGZ1
bmN0aW9uKCkgewotICAgICAkaHR0cEJhY2tlbmQudmVyaWZ5Tm9PdXRzdGFuZGluZ0V4cGVjdGF0
aW9uKCk7Ci0gICAgICRodHRwQmFja2VuZC52ZXJpZnlOb091dHN0YW5kaW5nUmVxdWVzdCgpOwot
ICAgfSk7Ci0KLQotICAgaXQoJ3Nob3VsZCBmZXRjaCBhdXRoZW50aWNhdGlvbiB0b2tlbicsIGZ1
bmN0aW9uKCkgewotICAgICAkaHR0cEJhY2tlbmQuZXhwZWN0R0VUKCcvYXV0aC5weScpOwotICAg
ICB2YXIgY29udHJvbGxlciA9IHNjb3BlLiRuZXcoTXlDb250cm9sbGVyKTsKLSAgICAgJGh0dHBC
YWNrZW5kLmZsdXNoKCk7Ci0gICB9KTsKLQotCi0gICBpdCgnc2hvdWxkIHNlbmQgbXNnIHRvIHNl
cnZlcicsIGZ1bmN0aW9uKCkgewotICAgICAvLyBub3cgeW91IGRvbuKAmXQgY2FyZSBhYm91dCB0
aGUgYXV0aGVudGljYXRpb24sIGJ1dAotICAgICAvLyB0aGUgY29udHJvbGxlciB3aWxsIHN0aWxs
IHNlbmQgdGhlIHJlcXVlc3QgYW5kCi0gICAgIC8vICRodHRwQmFja2VuZCB3aWxsIHJlc3BvbmQg
d2l0aG91dCB5b3UgaGF2aW5nIHRvCi0gICAgIC8vIHNwZWNpZnkgdGhlIGV4cGVjdGF0aW9uIGFu
ZCByZXNwb25zZSBmb3IgdGhpcyByZXF1ZXN0Ci0gICAgICRodHRwQmFja2VuZC5leHBlY3RQT1NU
KCcvYWRkLW1zZy5weScsICdtZXNzYWdlIGNvbnRlbnQnKS5yZXNwb25kKDIwMSwgJycpOwotCi0g
ICAgIHZhciBjb250cm9sbGVyID0gc2NvcGUuJG5ldyhNeUNvbnRyb2xsZXIpOwotICAgICAkaHR0
cEJhY2tlbmQuZmx1c2goKTsKLSAgICAgY29udHJvbGxlci5zYXZlTWVzc2FnZSgnbWVzc2FnZSBj
b250ZW50Jyk7Ci0gICAgIGV4cGVjdChjb250cm9sbGVyLnN0YXR1cykudG9CZSgnU2F2aW5nLi4u
Jyk7Ci0gICAgICRodHRwQmFja2VuZC5mbHVzaCgpOwotICAgICBleHBlY3QoY29udHJvbGxlci5z
dGF0dXMpLnRvQmUoJycpOwotICAgfSk7Ci0KLQotICAgaXQoJ3Nob3VsZCBzZW5kIGF1dGggaGVh
ZGVyJywgZnVuY3Rpb24oKSB7Ci0gICAgICRodHRwQmFja2VuZC5leHBlY3RQT1NUKCcvYWRkLW1z
Zy5weScsIHVuZGVmaW5lZCwgZnVuY3Rpb24oaGVhZGVycykgewotICAgICAgIC8vIGNoZWNrIGlm
IHRoZSBoZWFkZXIgd2FzIHNlbmQsIGlmIGl0IHdhc24ndCB0aGUgZXhwZWN0YXRpb24gd29uJ3QK
LSAgICAgICAvLyBtYXRjaCB0aGUgcmVxdWVzdCBhbmQgdGhlIHRlc3Qgd2lsbCBmYWlsCi0gICAg
ICAgcmV0dXJuIGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9PSAneHh4JzsKLSAgICAgfSkucmVz
cG9uZCgyMDEsICcnKTsKLQotICAgICB2YXIgY29udHJvbGxlciA9IHNjb3BlLiRuZXcoTXlDb250
cm9sbGVyKTsKLSAgICAgY29udHJvbGxlci5zYXZlTWVzc2FnZSgnd2hhdGV2ZXInKTsKLSAgICAg
JGh0dHBCYWNrZW5kLmZsdXNoKCk7Ci0gICB9KTsKLSAgIDwvcHJlPgotICovCi1hbmd1bGFyLm1v
Y2suJEh0dHBCYWNrZW5kUHJvdmlkZXIgPSBmdW5jdGlvbigpIHsKLSAgdGhpcy4kZ2V0ID0gW2Ny
ZWF0ZUh0dHBCYWNrZW5kTW9ja107Ci19OwotCi0vKioKLSAqIEdlbmVyYWwgZmFjdG9yeSBmdW5j
dGlvbiBmb3IgJGh0dHBCYWNrZW5kIG1vY2suCi0gKiBSZXR1cm5zIGluc3RhbmNlIGZvciB1bml0
IHRlc3RpbmcgKHdoZW4gbm8gYXJndW1lbnRzIHNwZWNpZmllZCk6Ci0gKiAgIC0gcGFzc2luZyB0
aHJvdWdoIGlzIGRpc2FibGVkCi0gKiAgIC0gYXV0byBmbHVzaGluZyBpcyBkaXNhYmxlZAotICoK
LSAqIFJldHVybnMgaW5zdGFuY2UgZm9yIGUyZSB0ZXN0aW5nICh3aGVuIGAkZGVsZWdhdGVgIGFu
ZCBgJGJyb3dzZXJgIHNwZWNpZmllZCk6Ci0gKiAgIC0gcGFzc2luZyB0aHJvdWdoIChkZWxlZ2F0
aW5nIHJlcXVlc3QgdG8gcmVhbCBiYWNrZW5kKSBpcyBlbmFibGVkCi0gKiAgIC0gYXV0byBmbHVz
aGluZyBpcyBlbmFibGVkCi0gKgotICogQHBhcmFtIHtPYmplY3Q9fSAkZGVsZWdhdGUgUmVhbCAk
aHR0cEJhY2tlbmQgaW5zdGFuY2UgKGFsbG93IHBhc3NpbmcgdGhyb3VnaCBpZiBzcGVjaWZpZWQp
Ci0gKiBAcGFyYW0ge09iamVjdD19ICRicm93c2VyIEF1dG8tZmx1c2hpbmcgZW5hYmxlZCBpZiBz
cGVjaWZpZWQKLSAqIEByZXR1cm4ge09iamVjdH0gSW5zdGFuY2Ugb2YgJGh0dHBCYWNrZW5kIG1v
Y2sKLSAqLwotZnVuY3Rpb24gY3JlYXRlSHR0cEJhY2tlbmRNb2NrKCRkZWxlZ2F0ZSwgJGJyb3dz
ZXIpIHsKLSAgdmFyIGRlZmluaXRpb25zID0gW10sCi0gICAgICBleHBlY3RhdGlvbnMgPSBbXSwK
LSAgICAgIHJlc3BvbnNlcyA9IFtdLAotICAgICAgcmVzcG9uc2VzUHVzaCA9IGFuZ3VsYXIuYmlu
ZChyZXNwb25zZXMsIHJlc3BvbnNlcy5wdXNoKTsKLQotICBmdW5jdGlvbiBjcmVhdGVSZXNwb25z
ZShzdGF0dXMsIGRhdGEsIGhlYWRlcnMpIHsKLSAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKHN0
YXR1cykpIHJldHVybiBzdGF0dXM7Ci0KLSAgICByZXR1cm4gZnVuY3Rpb24oKSB7Ci0gICAgICBy
ZXR1cm4gYW5ndWxhci5pc051bWJlcihzdGF0dXMpCi0gICAgICAgICAgPyBbc3RhdHVzLCBkYXRh
LCBoZWFkZXJzXQotICAgICAgICAgIDogWzIwMCwgc3RhdHVzLCBkYXRhXTsKLSAgICB9OwotICB9
Ci0KLSAgLy8gVE9ETyh2b2p0YSk6IGNoYW5nZSBwYXJhbXMgdG86IG1ldGhvZCwgdXJsLCBkYXRh
LCBoZWFkZXJzLCBjYWxsYmFjawotICBmdW5jdGlvbiAkaHR0cEJhY2tlbmQobWV0aG9kLCB1cmws
IGRhdGEsIGNhbGxiYWNrLCBoZWFkZXJzKSB7Ci0gICAgdmFyIHhociA9IG5ldyBNb2NrWGhyKCks
Ci0gICAgICAgIGV4cGVjdGF0aW9uID0gZXhwZWN0YXRpb25zWzBdLAotICAgICAgICB3YXNFeHBl
Y3RlZCA9IGZhbHNlOwotCi0gICAgZnVuY3Rpb24gcHJldHR5UHJpbnQoZGF0YSkgewotICAgICAg
cmV0dXJuIChhbmd1bGFyLmlzU3RyaW5nKGRhdGEpIHx8IGFuZ3VsYXIuaXNGdW5jdGlvbihkYXRh
KSB8fCBkYXRhIGluc3RhbmNlb2YgUmVnRXhwKQotICAgICAgICAgID8gZGF0YQotICAgICAgICAg
IDogYW5ndWxhci50b0pzb24oZGF0YSk7Ci0gICAgfQotCi0gICAgaWYgKGV4cGVjdGF0aW9uICYm
IGV4cGVjdGF0aW9uLm1hdGNoKG1ldGhvZCwgdXJsKSkgewotICAgICAgaWYgKCFleHBlY3RhdGlv
bi5tYXRjaERhdGEoZGF0YSkpCi0gICAgICAgIHRocm93IEVycm9yKCdFeHBlY3RlZCAnICsgZXhw
ZWN0YXRpb24gKyAnIHdpdGggZGlmZmVyZW50IGRhdGFcbicgKwotICAgICAgICAgICAgJ0VYUEVD
VEVEOiAnICsgcHJldHR5UHJpbnQoZXhwZWN0YXRpb24uZGF0YSkgKyAnXG5HT1Q6ICAgICAgJyAr
IGRhdGEpOwotCi0gICAgICBpZiAoIWV4cGVjdGF0aW9uLm1hdGNoSGVhZGVycyhoZWFkZXJzKSkK
LSAgICAgICAgdGhyb3cgRXJyb3IoJ0V4cGVjdGVkICcgKyBleHBlY3RhdGlvbiArICcgd2l0aCBk
aWZmZXJlbnQgaGVhZGVyc1xuJyArCi0gICAgICAgICAgICAnRVhQRUNURUQ6ICcgKyBwcmV0dHlQ
cmludChleHBlY3RhdGlvbi5oZWFkZXJzKSArICdcbkdPVDogICAgICAnICsKLSAgICAgICAgICAg
IHByZXR0eVByaW50KGhlYWRlcnMpKTsKLQotICAgICAgZXhwZWN0YXRpb25zLnNoaWZ0KCk7Ci0K
LSAgICAgIGlmIChleHBlY3RhdGlvbi5yZXNwb25zZSkgewotICAgICAgICByZXNwb25zZXMucHVz
aChmdW5jdGlvbigpIHsKLSAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBleHBlY3RhdGlvbi5yZXNw
b25zZShtZXRob2QsIHVybCwgZGF0YSwgaGVhZGVycyk7Ci0gICAgICAgICAgeGhyLiQkcmVzcEhl
YWRlcnMgPSByZXNwb25zZVsyXTsKLSAgICAgICAgICBjYWxsYmFjayhyZXNwb25zZVswXSwgcmVz
cG9uc2VbMV0sIHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk7Ci0gICAgICAgIH0pOwotICAg
ICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICB3YXNFeHBlY3RlZCA9IHRydWU7Ci0gICAgfQot
Ci0gICAgdmFyIGkgPSAtMSwgZGVmaW5pdGlvbjsKLSAgICB3aGlsZSAoKGRlZmluaXRpb24gPSBk
ZWZpbml0aW9uc1srK2ldKSkgewotICAgICAgaWYgKGRlZmluaXRpb24ubWF0Y2gobWV0aG9kLCB1
cmwsIGRhdGEsIGhlYWRlcnMgfHwge30pKSB7Ci0gICAgICAgIGlmIChkZWZpbml0aW9uLnJlc3Bv
bnNlKSB7Ci0gICAgICAgICAgLy8gaWYgJGJyb3dzZXIgc3BlY2lmaWVkLCB3ZSBkbyBhdXRvIGZs
dXNoIGFsbCByZXF1ZXN0cwotICAgICAgICAgICgkYnJvd3NlciA/ICRicm93c2VyLmRlZmVyIDog
cmVzcG9uc2VzUHVzaCkoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBk
ZWZpbml0aW9uLnJlc3BvbnNlKG1ldGhvZCwgdXJsLCBkYXRhLCBoZWFkZXJzKTsKLSAgICAgICAg
ICAgIHhoci4kJHJlc3BIZWFkZXJzID0gcmVzcG9uc2VbMl07Ci0gICAgICAgICAgICBjYWxsYmFj
ayhyZXNwb25zZVswXSwgcmVzcG9uc2VbMV0sIHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk7
Ci0gICAgICAgICAgfSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZGVmaW5pdGlvbi5wYXNzVGhyb3Vn
aCkgewotICAgICAgICAgICRkZWxlZ2F0ZShtZXRob2QsIHVybCwgZGF0YSwgY2FsbGJhY2ssIGhl
YWRlcnMpOwotICAgICAgICB9IGVsc2UgdGhyb3cgRXJyb3IoJ05vIHJlc3BvbnNlIGRlZmluZWQg
IScpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICAgIHRocm93IHdhc0V4cGVj
dGVkID8KLSAgICAgICAgRXJyb3IoJ05vIHJlc3BvbnNlIGRlZmluZWQgIScpIDoKLSAgICAgICAg
RXJyb3IoJ1VuZXhwZWN0ZWQgcmVxdWVzdDogJyArIG1ldGhvZCArICcgJyArIHVybCArICdcbicg
KwotICAgICAgICAgICAgICAoZXhwZWN0YXRpb24gPyAnRXhwZWN0ZWQgJyArIGV4cGVjdGF0aW9u
IDogJ05vIG1vcmUgcmVxdWVzdCBleHBlY3RlZCcpKTsKLSAgfQotCi0gIC8qKgotICAgKiBAbmdk
b2MgbWV0aG9kCi0gICAqIEBuYW1lIG5nTW9jay4kaHR0cEJhY2tlbmQjd2hlbgotICAgKiBAbWV0
aG9kT2YgbmdNb2NrLiRodHRwQmFja2VuZAotICAgKiBAZGVzY3JpcHRpb24KLSAgICogQ3JlYXRl
cyBhIG5ldyBiYWNrZW5kIGRlZmluaXRpb24uCi0gICAqCi0gICAqIEBwYXJhbSB7c3RyaW5nfSBt
ZXRob2QgSFRUUCBtZXRob2QuCi0gICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gdXJsIEhUVFAg
dXJsLgotICAgKiBAcGFyYW0geyhzdHJpbmd8UmVnRXhwKT19IGRhdGEgSFRUUCByZXF1ZXN0IGJv
ZHkuCi0gICAqIEBwYXJhbSB7KE9iamVjdHxmdW5jdGlvbihPYmplY3QpKT19IGhlYWRlcnMgSFRU
UCBoZWFkZXJzIG9yIGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgaHR0cCBoZWFkZXIKLSAgICogICBv
YmplY3QgYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgaGVhZGVycyBtYXRjaCB0aGUgY3VycmVudCBk
ZWZpbml0aW9uLgotICAgKiBAcmV0dXJucyB7cmVxdWVzdEhhbmRsZXJ9IFJldHVybnMgYW4gb2Jq
ZWN0IHdpdGggYHJlc3BvbmRgIG1ldGhvZCB0aGF0IGNvbnRyb2wgaG93IGEgbWF0Y2hlZAotICAg
KiAgIHJlcXVlc3QgaXMgaGFuZGxlZC4KLSAgICoKLSAgICogIC0gcmVzcG9uZCDigJMgYHtmdW5j
dGlvbihbc3RhdHVzLF0gZGF0YVssIGhlYWRlcnNdKXxmdW5jdGlvbihmdW5jdGlvbihtZXRob2Qs
IHVybCwgZGF0YSwgaGVhZGVycyl9YAotICAgKiAgICDigJMgVGhlIHJlc3BvbmQgbWV0aG9kIHRh
a2VzIGEgc2V0IG9mIHN0YXRpYyBkYXRhIHRvIGJlIHJldHVybmVkIG9yIGEgZnVuY3Rpb24gdGhh
dCBjYW4gcmV0dXJuCi0gICAqICAgIGFuIGFycmF5IGNvbnRhaW5pbmcgcmVzcG9uc2Ugc3RhdHVz
IChudW1iZXIpLCByZXNwb25zZSBkYXRhIChzdHJpbmcpIGFuZCByZXNwb25zZSBoZWFkZXJzCi0g
ICAqICAgIChPYmplY3QpLgotICAgKi8KLSAgJGh0dHBCYWNrZW5kLndoZW4gPSBmdW5jdGlvbiht
ZXRob2QsIHVybCwgZGF0YSwgaGVhZGVycykgewotICAgIHZhciBkZWZpbml0aW9uID0gbmV3IE1v
Y2tIdHRwRXhwZWN0YXRpb24obWV0aG9kLCB1cmwsIGRhdGEsIGhlYWRlcnMpLAotICAgICAgICBj
aGFpbiA9IHsKLSAgICAgICAgICByZXNwb25kOiBmdW5jdGlvbihzdGF0dXMsIGRhdGEsIGhlYWRl
cnMpIHsKLSAgICAgICAgICAgIGRlZmluaXRpb24ucmVzcG9uc2UgPSBjcmVhdGVSZXNwb25zZShz
dGF0dXMsIGRhdGEsIGhlYWRlcnMpOwotICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgIGlm
ICgkYnJvd3NlcikgewotICAgICAgY2hhaW4ucGFzc1Rocm91Z2ggPSBmdW5jdGlvbigpIHsKLSAg
ICAgICAgZGVmaW5pdGlvbi5wYXNzVGhyb3VnaCA9IHRydWU7Ci0gICAgICB9OwotICAgIH0KLQot
ICAgIGRlZmluaXRpb25zLnB1c2goZGVmaW5pdGlvbik7Ci0gICAgcmV0dXJuIGNoYWluOwotICB9
OwotCi0gIC8qKgotICAgKiBAbmdkb2MgbWV0aG9kCi0gICAqIEBuYW1lIG5nTW9jay4kaHR0cEJh
Y2tlbmQjd2hlbkdFVAotICAgKiBAbWV0aG9kT2YgbmdNb2NrLiRodHRwQmFja2VuZAotICAgKiBA
ZGVzY3JpcHRpb24KLSAgICogQ3JlYXRlcyBhIG5ldyBiYWNrZW5kIGRlZmluaXRpb24gZm9yIEdF
VCByZXF1ZXN0cy4gRm9yIG1vcmUgaW5mbyBzZWUgYHdoZW4oKWAuCi0gICAqCi0gICAqIEBwYXJh
bSB7c3RyaW5nfFJlZ0V4cH0gdXJsIEhUVFAgdXJsLgotICAgKiBAcGFyYW0geyhPYmplY3R8ZnVu
Y3Rpb24oT2JqZWN0KSk9fSBoZWFkZXJzIEhUVFAgaGVhZGVycy4KLSAgICogQHJldHVybnMge3Jl
cXVlc3RIYW5kbGVyfSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIGByZXNwb25kYCBtZXRob2QgdGhh
dCBjb250cm9sIGhvdyBhIG1hdGNoZWQKLSAgICogcmVxdWVzdCBpcyBoYW5kbGVkLgotICAgKi8K
LQotICAvKioKLSAgICogQG5nZG9jIG1ldGhvZAotICAgKiBAbmFtZSBuZ01vY2suJGh0dHBCYWNr
ZW5kI3doZW5IRUFECi0gICAqIEBtZXRob2RPZiBuZ01vY2suJGh0dHBCYWNrZW5kCi0gICAqIEBk
ZXNjcmlwdGlvbgotICAgKiBDcmVhdGVzIGEgbmV3IGJhY2tlbmQgZGVmaW5pdGlvbiBmb3IgSEVB
RCByZXF1ZXN0cy4gRm9yIG1vcmUgaW5mbyBzZWUgYHdoZW4oKWAuCi0gICAqCi0gICAqIEBwYXJh
bSB7c3RyaW5nfFJlZ0V4cH0gdXJsIEhUVFAgdXJsLgotICAgKiBAcGFyYW0geyhPYmplY3R8ZnVu
Y3Rpb24oT2JqZWN0KSk9fSBoZWFkZXJzIEhUVFAgaGVhZGVycy4KLSAgICogQHJldHVybnMge3Jl
cXVlc3RIYW5kbGVyfSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIGByZXNwb25kYCBtZXRob2QgdGhh
dCBjb250cm9sIGhvdyBhIG1hdGNoZWQKLSAgICogcmVxdWVzdCBpcyBoYW5kbGVkLgotICAgKi8K
LQotICAvKioKLSAgICogQG5nZG9jIG1ldGhvZAotICAgKiBAbmFtZSBuZ01vY2suJGh0dHBCYWNr
ZW5kI3doZW5ERUxFVEUKLSAgICogQG1ldGhvZE9mIG5nTW9jay4kaHR0cEJhY2tlbmQKLSAgICog
QGRlc2NyaXB0aW9uCi0gICAqIENyZWF0ZXMgYSBuZXcgYmFja2VuZCBkZWZpbml0aW9uIGZvciBE
RUxFVEUgcmVxdWVzdHMuIEZvciBtb3JlIGluZm8gc2VlIGB3aGVuKClgLgotICAgKgotICAgKiBA
cGFyYW0ge3N0cmluZ3xSZWdFeHB9IHVybCBIVFRQIHVybC4KLSAgICogQHBhcmFtIHsoT2JqZWN0
fGZ1bmN0aW9uKE9iamVjdCkpPX0gaGVhZGVycyBIVFRQIGhlYWRlcnMuCi0gICAqIEByZXR1cm5z
IHtyZXF1ZXN0SGFuZGxlcn0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBgcmVzcG9uZGAgbWV0aG9k
IHRoYXQgY29udHJvbCBob3cgYSBtYXRjaGVkCi0gICAqIHJlcXVlc3QgaXMgaGFuZGxlZC4KLSAg
ICovCi0KLSAgLyoqCi0gICAqIEBuZ2RvYyBtZXRob2QKLSAgICogQG5hbWUgbmdNb2NrLiRodHRw
QmFja2VuZCN3aGVuUE9TVAotICAgKiBAbWV0aG9kT2YgbmdNb2NrLiRodHRwQmFja2VuZAotICAg
KiBAZGVzY3JpcHRpb24KLSAgICogQ3JlYXRlcyBhIG5ldyBiYWNrZW5kIGRlZmluaXRpb24gZm9y
IFBPU1QgcmVxdWVzdHMuIEZvciBtb3JlIGluZm8gc2VlIGB3aGVuKClgLgotICAgKgotICAgKiBA
cGFyYW0ge3N0cmluZ3xSZWdFeHB9IHVybCBIVFRQIHVybC4KLSAgICogQHBhcmFtIHsoc3RyaW5n
fFJlZ0V4cCk9fSBkYXRhIEhUVFAgcmVxdWVzdCBib2R5LgotICAgKiBAcGFyYW0geyhPYmplY3R8
ZnVuY3Rpb24oT2JqZWN0KSk9fSBoZWFkZXJzIEhUVFAgaGVhZGVycy4KLSAgICogQHJldHVybnMg
e3JlcXVlc3RIYW5kbGVyfSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIGByZXNwb25kYCBtZXRob2Qg
dGhhdCBjb250cm9sIGhvdyBhIG1hdGNoZWQKLSAgICogcmVxdWVzdCBpcyBoYW5kbGVkLgotICAg
Ki8KLQotICAvKioKLSAgICogQG5nZG9jIG1ldGhvZAotICAgKiBAbmFtZSBuZ01vY2suJGh0dHBC
YWNrZW5kI3doZW5QVVQKLSAgICogQG1ldGhvZE9mIG5nTW9jay4kaHR0cEJhY2tlbmQKLSAgICog
QGRlc2NyaXB0aW9uCi0gICAqIENyZWF0ZXMgYSBuZXcgYmFja2VuZCBkZWZpbml0aW9uIGZvciBQ
VVQgcmVxdWVzdHMuICBGb3IgbW9yZSBpbmZvIHNlZSBgd2hlbigpYC4KLSAgICoKLSAgICogQHBh
cmFtIHtzdHJpbmd8UmVnRXhwfSB1cmwgSFRUUCB1cmwuCi0gICAqIEBwYXJhbSB7KHN0cmluZ3xS
ZWdFeHApPX0gZGF0YSBIVFRQIHJlcXVlc3QgYm9keS4KLSAgICogQHBhcmFtIHsoT2JqZWN0fGZ1
bmN0aW9uKE9iamVjdCkpPX0gaGVhZGVycyBIVFRQIGhlYWRlcnMuCi0gICAqIEByZXR1cm5zIHty
ZXF1ZXN0SGFuZGxlcn0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBgcmVzcG9uZGAgbWV0aG9kIHRo
YXQgY29udHJvbCBob3cgYSBtYXRjaGVkCi0gICAqIHJlcXVlc3QgaXMgaGFuZGxlZC4KLSAgICov
Ci0KLSAgLyoqCi0gICAqIEBuZ2RvYyBtZXRob2QKLSAgICogQG5hbWUgbmdNb2NrLiRodHRwQmFj
a2VuZCN3aGVuSlNPTlAKLSAgICogQG1ldGhvZE9mIG5nTW9jay4kaHR0cEJhY2tlbmQKLSAgICog
QGRlc2NyaXB0aW9uCi0gICAqIENyZWF0ZXMgYSBuZXcgYmFja2VuZCBkZWZpbml0aW9uIGZvciBK
U09OUCByZXF1ZXN0cy4gRm9yIG1vcmUgaW5mbyBzZWUgYHdoZW4oKWAuCi0gICAqCi0gICAqIEBw
YXJhbSB7c3RyaW5nfFJlZ0V4cH0gdXJsIEhUVFAgdXJsLgotICAgKiBAcmV0dXJucyB7cmVxdWVz
dEhhbmRsZXJ9IFJldHVybnMgYW4gb2JqZWN0IHdpdGggYHJlc3BvbmRgIG1ldGhvZCB0aGF0IGNv
bnRyb2wgaG93IGEgbWF0Y2hlZAotICAgKiByZXF1ZXN0IGlzIGhhbmRsZWQuCi0gICAqLwotICBj
cmVhdGVTaG9ydE1ldGhvZHMoJ3doZW4nKTsKLQotCi0gIC8qKgotICAgKiBAbmdkb2MgbWV0aG9k
Ci0gICAqIEBuYW1lIG5nTW9jay4kaHR0cEJhY2tlbmQjZXhwZWN0Ci0gICAqIEBtZXRob2RPZiBu
Z01vY2suJGh0dHBCYWNrZW5kCi0gICAqIEBkZXNjcmlwdGlvbgotICAgKiBDcmVhdGVzIGEgbmV3
IHJlcXVlc3QgZXhwZWN0YXRpb24uCi0gICAqCi0gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2Qg
SFRUUCBtZXRob2QuCi0gICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gdXJsIEhUVFAgdXJsLgot
ICAgKiBAcGFyYW0geyhzdHJpbmd8UmVnRXhwKT19IGRhdGEgSFRUUCByZXF1ZXN0IGJvZHkuCi0g
ICAqIEBwYXJhbSB7KE9iamVjdHxmdW5jdGlvbihPYmplY3QpKT19IGhlYWRlcnMgSFRUUCBoZWFk
ZXJzIG9yIGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgaHR0cCBoZWFkZXIKLSAgICogICBvYmplY3Qg
YW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgaGVhZGVycyBtYXRjaCB0aGUgY3VycmVudCBleHBlY3Rh
dGlvbi4KLSAgICogQHJldHVybnMge3JlcXVlc3RIYW5kbGVyfSBSZXR1cm5zIGFuIG9iamVjdCB3
aXRoIGByZXNwb25kYCBtZXRob2QgdGhhdCBjb250cm9sIGhvdyBhIG1hdGNoZWQKLSAgICogIHJl
cXVlc3QgaXMgaGFuZGxlZC4KLSAgICoKLSAgICogIC0gcmVzcG9uZCDigJMgYHtmdW5jdGlvbihb
c3RhdHVzLF0gZGF0YVssIGhlYWRlcnNdKXxmdW5jdGlvbihmdW5jdGlvbihtZXRob2QsIHVybCwg
ZGF0YSwgaGVhZGVycyl9YAotICAgKiAgICDigJMgVGhlIHJlc3BvbmQgbWV0aG9kIHRha2VzIGEg
c2V0IG9mIHN0YXRpYyBkYXRhIHRvIGJlIHJldHVybmVkIG9yIGEgZnVuY3Rpb24gdGhhdCBjYW4g
cmV0dXJuCi0gICAqICAgIGFuIGFycmF5IGNvbnRhaW5pbmcgcmVzcG9uc2Ugc3RhdHVzIChudW1i
ZXIpLCByZXNwb25zZSBkYXRhIChzdHJpbmcpIGFuZCByZXNwb25zZSBoZWFkZXJzCi0gICAqICAg
IChPYmplY3QpLgotICAgKi8KLSAgJGh0dHBCYWNrZW5kLmV4cGVjdCA9IGZ1bmN0aW9uKG1ldGhv
ZCwgdXJsLCBkYXRhLCBoZWFkZXJzKSB7Ci0gICAgdmFyIGV4cGVjdGF0aW9uID0gbmV3IE1vY2tI
dHRwRXhwZWN0YXRpb24obWV0aG9kLCB1cmwsIGRhdGEsIGhlYWRlcnMpOwotICAgIGV4cGVjdGF0
aW9ucy5wdXNoKGV4cGVjdGF0aW9uKTsKLSAgICByZXR1cm4gewotICAgICAgcmVzcG9uZDogZnVu
Y3Rpb24oc3RhdHVzLCBkYXRhLCBoZWFkZXJzKSB7Ci0gICAgICAgIGV4cGVjdGF0aW9uLnJlc3Bv
bnNlID0gY3JlYXRlUmVzcG9uc2Uoc3RhdHVzLCBkYXRhLCBoZWFkZXJzKTsKLSAgICAgIH0KLSAg
ICB9OwotICB9OwotCi0KLSAgLyoqCi0gICAqIEBuZ2RvYyBtZXRob2QKLSAgICogQG5hbWUgbmdN
b2NrLiRodHRwQmFja2VuZCNleHBlY3RHRVQKLSAgICogQG1ldGhvZE9mIG5nTW9jay4kaHR0cEJh
Y2tlbmQKLSAgICogQGRlc2NyaXB0aW9uCi0gICAqIENyZWF0ZXMgYSBuZXcgcmVxdWVzdCBleHBl
Y3RhdGlvbiBmb3IgR0VUIHJlcXVlc3RzLiBGb3IgbW9yZSBpbmZvIHNlZSBgZXhwZWN0KClgLgot
ICAgKgotICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IHVybCBIVFRQIHVybC4KLSAgICogQHBh
cmFtIHtPYmplY3Q9fSBoZWFkZXJzIEhUVFAgaGVhZGVycy4KLSAgICogQHJldHVybnMge3JlcXVl
c3RIYW5kbGVyfSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIGByZXNwb25kYCBtZXRob2QgdGhhdCBj
b250cm9sIGhvdyBhIG1hdGNoZWQKLSAgICogcmVxdWVzdCBpcyBoYW5kbGVkLiBTZWUgI2V4cGVj
dCBmb3IgbW9yZSBpbmZvLgotICAgKi8KLQotICAvKioKLSAgICogQG5nZG9jIG1ldGhvZAotICAg
KiBAbmFtZSBuZ01vY2suJGh0dHBCYWNrZW5kI2V4cGVjdEhFQUQKLSAgICogQG1ldGhvZE9mIG5n
TW9jay4kaHR0cEJhY2tlbmQKLSAgICogQGRlc2NyaXB0aW9uCi0gICAqIENyZWF0ZXMgYSBuZXcg
cmVxdWVzdCBleHBlY3RhdGlvbiBmb3IgSEVBRCByZXF1ZXN0cy4gRm9yIG1vcmUgaW5mbyBzZWUg
YGV4cGVjdCgpYC4KLSAgICoKLSAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSB1cmwgSFRUUCB1
cmwuCi0gICAqIEBwYXJhbSB7T2JqZWN0PX0gaGVhZGVycyBIVFRQIGhlYWRlcnMuCi0gICAqIEBy
ZXR1cm5zIHtyZXF1ZXN0SGFuZGxlcn0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBgcmVzcG9uZGAg
bWV0aG9kIHRoYXQgY29udHJvbCBob3cgYSBtYXRjaGVkCi0gICAqICAgcmVxdWVzdCBpcyBoYW5k
bGVkLgotICAgKi8KLQotICAvKioKLSAgICogQG5nZG9jIG1ldGhvZAotICAgKiBAbmFtZSBuZ01v
Y2suJGh0dHBCYWNrZW5kI2V4cGVjdERFTEVURQotICAgKiBAbWV0aG9kT2YgbmdNb2NrLiRodHRw
QmFja2VuZAotICAgKiBAZGVzY3JpcHRpb24KLSAgICogQ3JlYXRlcyBhIG5ldyByZXF1ZXN0IGV4
cGVjdGF0aW9uIGZvciBERUxFVEUgcmVxdWVzdHMuIEZvciBtb3JlIGluZm8gc2VlIGBleHBlY3Qo
KWAuCi0gICAqCi0gICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gdXJsIEhUVFAgdXJsLgotICAg
KiBAcGFyYW0ge09iamVjdD19IGhlYWRlcnMgSFRUUCBoZWFkZXJzLgotICAgKiBAcmV0dXJucyB7
cmVxdWVzdEhhbmRsZXJ9IFJldHVybnMgYW4gb2JqZWN0IHdpdGggYHJlc3BvbmRgIG1ldGhvZCB0
aGF0IGNvbnRyb2wgaG93IGEgbWF0Y2hlZAotICAgKiAgIHJlcXVlc3QgaXMgaGFuZGxlZC4KLSAg
ICovCi0KLSAgLyoqCi0gICAqIEBuZ2RvYyBtZXRob2QKLSAgICogQG5hbWUgbmdNb2NrLiRodHRw
QmFja2VuZCNleHBlY3RQT1NUCi0gICAqIEBtZXRob2RPZiBuZ01vY2suJGh0dHBCYWNrZW5kCi0g
ICAqIEBkZXNjcmlwdGlvbgotICAgKiBDcmVhdGVzIGEgbmV3IHJlcXVlc3QgZXhwZWN0YXRpb24g
Zm9yIFBPU1QgcmVxdWVzdHMuIEZvciBtb3JlIGluZm8gc2VlIGBleHBlY3QoKWAuCi0gICAqCi0g
ICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gdXJsIEhUVFAgdXJsLgotICAgKiBAcGFyYW0geyhz
dHJpbmd8UmVnRXhwKT19IGRhdGEgSFRUUCByZXF1ZXN0IGJvZHkuCi0gICAqIEBwYXJhbSB7T2Jq
ZWN0PX0gaGVhZGVycyBIVFRQIGhlYWRlcnMuCi0gICAqIEByZXR1cm5zIHtyZXF1ZXN0SGFuZGxl
cn0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBgcmVzcG9uZGAgbWV0aG9kIHRoYXQgY29udHJvbCBo
b3cgYSBtYXRjaGVkCi0gICAqICAgcmVxdWVzdCBpcyBoYW5kbGVkLgotICAgKi8KLQotICAvKioK
LSAgICogQG5nZG9jIG1ldGhvZAotICAgKiBAbmFtZSBuZ01vY2suJGh0dHBCYWNrZW5kI2V4cGVj
dFBVVAotICAgKiBAbWV0aG9kT2YgbmdNb2NrLiRodHRwQmFja2VuZAotICAgKiBAZGVzY3JpcHRp
b24KLSAgICogQ3JlYXRlcyBhIG5ldyByZXF1ZXN0IGV4cGVjdGF0aW9uIGZvciBQVVQgcmVxdWVz
dHMuIEZvciBtb3JlIGluZm8gc2VlIGBleHBlY3QoKWAuCi0gICAqCi0gICAqIEBwYXJhbSB7c3Ry
aW5nfFJlZ0V4cH0gdXJsIEhUVFAgdXJsLgotICAgKiBAcGFyYW0geyhzdHJpbmd8UmVnRXhwKT19
IGRhdGEgSFRUUCByZXF1ZXN0IGJvZHkuCi0gICAqIEBwYXJhbSB7T2JqZWN0PX0gaGVhZGVycyBI
VFRQIGhlYWRlcnMuCi0gICAqIEByZXR1cm5zIHtyZXF1ZXN0SGFuZGxlcn0gUmV0dXJucyBhbiBv
YmplY3Qgd2l0aCBgcmVzcG9uZGAgbWV0aG9kIHRoYXQgY29udHJvbCBob3cgYSBtYXRjaGVkCi0g
ICAqICAgcmVxdWVzdCBpcyBoYW5kbGVkLgotICAgKi8KLQotICAvKioKLSAgICogQG5nZG9jIG1l
dGhvZAotICAgKiBAbmFtZSBuZ01vY2suJGh0dHBCYWNrZW5kI2V4cGVjdFBBVENICi0gICAqIEBt
ZXRob2RPZiBuZ01vY2suJGh0dHBCYWNrZW5kCi0gICAqIEBkZXNjcmlwdGlvbgotICAgKiBDcmVh
dGVzIGEgbmV3IHJlcXVlc3QgZXhwZWN0YXRpb24gZm9yIFBBVENIIHJlcXVlc3RzLiBGb3IgbW9y
ZSBpbmZvIHNlZSBgZXhwZWN0KClgLgotICAgKgotICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9
IHVybCBIVFRQIHVybC4KLSAgICogQHBhcmFtIHsoc3RyaW5nfFJlZ0V4cCk9fSBkYXRhIEhUVFAg
cmVxdWVzdCBib2R5LgotICAgKiBAcGFyYW0ge09iamVjdD19IGhlYWRlcnMgSFRUUCBoZWFkZXJz
LgotICAgKiBAcmV0dXJucyB7cmVxdWVzdEhhbmRsZXJ9IFJldHVybnMgYW4gb2JqZWN0IHdpdGgg
YHJlc3BvbmRgIG1ldGhvZCB0aGF0IGNvbnRyb2wgaG93IGEgbWF0Y2hlZAotICAgKiAgIHJlcXVl
c3QgaXMgaGFuZGxlZC4KLSAgICovCi0KLSAgLyoqCi0gICAqIEBuZ2RvYyBtZXRob2QKLSAgICog
QG5hbWUgbmdNb2NrLiRodHRwQmFja2VuZCNleHBlY3RKU09OUAotICAgKiBAbWV0aG9kT2YgbmdN
b2NrLiRodHRwQmFja2VuZAotICAgKiBAZGVzY3JpcHRpb24KLSAgICogQ3JlYXRlcyBhIG5ldyBy
ZXF1ZXN0IGV4cGVjdGF0aW9uIGZvciBKU09OUCByZXF1ZXN0cy4gRm9yIG1vcmUgaW5mbyBzZWUg
YGV4cGVjdCgpYC4KLSAgICoKLSAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSB1cmwgSFRUUCB1
cmwuCi0gICAqIEByZXR1cm5zIHtyZXF1ZXN0SGFuZGxlcn0gUmV0dXJucyBhbiBvYmplY3Qgd2l0
aCBgcmVzcG9uZGAgbWV0aG9kIHRoYXQgY29udHJvbCBob3cgYSBtYXRjaGVkCi0gICAqICAgcmVx
dWVzdCBpcyBoYW5kbGVkLgotICAgKi8KLSAgY3JlYXRlU2hvcnRNZXRob2RzKCdleHBlY3QnKTsK
LQotCi0gIC8qKgotICAgKiBAbmdkb2MgbWV0aG9kCi0gICAqIEBuYW1lIG5nTW9jay4kaHR0cEJh
Y2tlbmQjZmx1c2gKLSAgICogQG1ldGhvZE9mIG5nTW9jay4kaHR0cEJhY2tlbmQKLSAgICogQGRl
c2NyaXB0aW9uCi0gICAqIEZsdXNoZXMgYWxsIHBlbmRpbmcgcmVxdWVzdHMgdXNpbmcgdGhlIHRy
YWluZWQgcmVzcG9uc2VzLgotICAgKgotICAgKiBAcGFyYW0ge251bWJlcj19IGNvdW50IE51bWJl
ciBvZiByZXNwb25zZXMgdG8gZmx1c2ggKGluIHRoZSBvcmRlciB0aGV5IGFycml2ZWQpLiBJZiB1
bmRlZmluZWQsCi0gICAqICAgYWxsIHBlbmRpbmcgcmVxdWVzdHMgd2lsbCBiZSBmbHVzaGVkLiBJ
ZiB0aGVyZSBhcmUgbm8gcGVuZGluZyByZXF1ZXN0cyB3aGVuIHRoZSBmbHVzaCBtZXRob2QKLSAg
ICogICBpcyBjYWxsZWQgYW4gZXhjZXB0aW9uIGlzIHRocm93biAoYXMgdGhpcyB0eXBpY2FsbHkg
YSBzaWduIG9mIHByb2dyYW1taW5nIGVycm9yKS4KLSAgICovCi0gICRodHRwQmFja2VuZC5mbHVz
aCA9IGZ1bmN0aW9uKGNvdW50KSB7Ci0gICAgaWYgKCFyZXNwb25zZXMubGVuZ3RoKSB0aHJvdyBF
cnJvcignTm8gcGVuZGluZyByZXF1ZXN0IHRvIGZsdXNoICEnKTsKLQotICAgIGlmIChhbmd1bGFy
LmlzRGVmaW5lZChjb3VudCkpIHsKLSAgICAgIHdoaWxlIChjb3VudC0tKSB7Ci0gICAgICAgIGlm
ICghcmVzcG9uc2VzLmxlbmd0aCkgdGhyb3cgRXJyb3IoJ05vIG1vcmUgcGVuZGluZyByZXF1ZXN0
IHRvIGZsdXNoICEnKTsKLSAgICAgICAgcmVzcG9uc2VzLnNoaWZ0KCkoKTsKLSAgICAgIH0KLSAg
ICB9IGVsc2UgewotICAgICAgd2hpbGUgKHJlc3BvbnNlcy5sZW5ndGgpIHsKLSAgICAgICAgcmVz
cG9uc2VzLnNoaWZ0KCkoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgJGh0dHBCYWNrZW5kLnZlcmlm
eU5vT3V0c3RhbmRpbmdFeHBlY3RhdGlvbigpOwotICB9OwotCi0KLSAgLyoqCi0gICAqIEBuZ2Rv
YyBtZXRob2QKLSAgICogQG5hbWUgbmdNb2NrLiRodHRwQmFja2VuZCN2ZXJpZnlOb091dHN0YW5k
aW5nRXhwZWN0YXRpb24KLSAgICogQG1ldGhvZE9mIG5nTW9jay4kaHR0cEJhY2tlbmQKLSAgICog
QGRlc2NyaXB0aW9uCi0gICAqIFZlcmlmaWVzIHRoYXQgYWxsIG9mIHRoZSByZXF1ZXN0cyBkZWZp
bmVkIHZpYSB0aGUgYGV4cGVjdGAgYXBpIHdlcmUgbWFkZS4gSWYgYW55IG9mIHRoZQotICAgKiBy
ZXF1ZXN0cyB3ZXJlIG5vdCBtYWRlLCB2ZXJpZnlOb091dHN0YW5kaW5nRXhwZWN0YXRpb24gdGhy
b3dzIGFuIGV4Y2VwdGlvbi4KLSAgICoKLSAgICogVHlwaWNhbGx5LCB5b3Ugd291bGQgY2FsbCB0
aGlzIG1ldGhvZCBmb2xsb3dpbmcgZWFjaCB0ZXN0IGNhc2UgdGhhdCBhc3NlcnRzIHJlcXVlc3Rz
IHVzaW5nIGFuCi0gICAqICJhZnRlckVhY2giIGNsYXVzZS4KLSAgICoKLSAgICogPHByZT4KLSAg
ICogICBhZnRlckVhY2goJGh0dHBCYWNrZW5kLnZlcmlmeUV4cGVjdGF0aW9ucyk7Ci0gICAqIDwv
cHJlPgotICAgKi8KLSAgJGh0dHBCYWNrZW5kLnZlcmlmeU5vT3V0c3RhbmRpbmdFeHBlY3RhdGlv
biA9IGZ1bmN0aW9uKCkgewotICAgIGlmIChleHBlY3RhdGlvbnMubGVuZ3RoKSB7Ci0gICAgICB0
aHJvdyBFcnJvcignVW5zYXRpc2ZpZWQgcmVxdWVzdHM6ICcgKyBleHBlY3RhdGlvbnMuam9pbign
LCAnKSk7Ci0gICAgfQotICB9OwotCi0KLSAgLyoqCi0gICAqIEBuZ2RvYyBtZXRob2QKLSAgICog
QG5hbWUgbmdNb2NrLiRodHRwQmFja2VuZCN2ZXJpZnlOb091dHN0YW5kaW5nUmVxdWVzdAotICAg
KiBAbWV0aG9kT2YgbmdNb2NrLiRodHRwQmFja2VuZAotICAgKiBAZGVzY3JpcHRpb24KLSAgICog
VmVyaWZpZXMgdGhhdCB0aGVyZSBhcmUgbm8gb3V0c3RhbmRpbmcgcmVxdWVzdHMgdGhhdCBuZWVk
IHRvIGJlIGZsdXNoZWQuCi0gICAqCi0gICAqIFR5cGljYWxseSwgeW91IHdvdWxkIGNhbGwgdGhp
cyBtZXRob2QgZm9sbG93aW5nIGVhY2ggdGVzdCBjYXNlIHRoYXQgYXNzZXJ0cyByZXF1ZXN0cyB1
c2luZyBhbgotICAgKiAiYWZ0ZXJFYWNoIiBjbGF1c2UuCi0gICAqCi0gICAqIDxwcmU+Ci0gICAq
ICAgYWZ0ZXJFYWNoKCRodHRwQmFja2VuZC52ZXJpZnlOb091dHN0YW5kaW5nUmVxdWVzdCk7Ci0g
ICAqIDwvcHJlPgotICAgKi8KLSAgJGh0dHBCYWNrZW5kLnZlcmlmeU5vT3V0c3RhbmRpbmdSZXF1
ZXN0ID0gZnVuY3Rpb24oKSB7Ci0gICAgaWYgKHJlc3BvbnNlcy5sZW5ndGgpIHsKLSAgICAgIHRo
cm93IEVycm9yKCdVbmZsdXNoZWQgcmVxdWVzdHM6ICcgKyByZXNwb25zZXMubGVuZ3RoKTsKLSAg
ICB9Ci0gIH07Ci0KLQotICAvKioKLSAgICogQG5nZG9jIG1ldGhvZAotICAgKiBAbmFtZSBuZ01v
Y2suJGh0dHBCYWNrZW5kI3Jlc2V0RXhwZWN0YXRpb25zCi0gICAqIEBtZXRob2RPZiBuZ01vY2su
JGh0dHBCYWNrZW5kCi0gICAqIEBkZXNjcmlwdGlvbgotICAgKiBSZXNldHMgYWxsIHJlcXVlc3Qg
ZXhwZWN0YXRpb25zLCBidXQgcHJlc2VydmVzIGFsbCBiYWNrZW5kIGRlZmluaXRpb25zLiBUeXBp
Y2FsbHksIHlvdSB3b3VsZAotICAgKiBjYWxsIHJlc2V0RXhwZWN0YXRpb25zIGR1cmluZyBhIG11
bHRpcGxlLXBoYXNlIHRlc3Qgd2hlbiB5b3Ugd2FudCB0byByZXVzZSB0aGUgc2FtZSBpbnN0YW5j
ZSBvZgotICAgKiAkaHR0cEJhY2tlbmQgbW9jay4KLSAgICovCi0gICRodHRwQmFja2VuZC5yZXNl
dEV4cGVjdGF0aW9ucyA9IGZ1bmN0aW9uKCkgewotICAgIGV4cGVjdGF0aW9ucy5sZW5ndGggPSAw
OwotICAgIHJlc3BvbnNlcy5sZW5ndGggPSAwOwotICB9OwotCi0gIHJldHVybiAkaHR0cEJhY2tl
bmQ7Ci0KLQotICBmdW5jdGlvbiBjcmVhdGVTaG9ydE1ldGhvZHMocHJlZml4KSB7Ci0gICAgYW5n
dWxhci5mb3JFYWNoKFsnR0VUJywgJ0RFTEVURScsICdKU09OUCddLCBmdW5jdGlvbihtZXRob2Qp
IHsKLSAgICAgJGh0dHBCYWNrZW5kW3ByZWZpeCArIG1ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGhl
YWRlcnMpIHsKLSAgICAgICByZXR1cm4gJGh0dHBCYWNrZW5kW3ByZWZpeF0obWV0aG9kLCB1cmws
IHVuZGVmaW5lZCwgaGVhZGVycykKLSAgICAgfQotICAgIH0pOwotCi0gICAgYW5ndWxhci5mb3JF
YWNoKFsnUFVUJywgJ1BPU1QnLCAnUEFUQ0gnXSwgZnVuY3Rpb24obWV0aG9kKSB7Ci0gICAgICAk
aHR0cEJhY2tlbmRbcHJlZml4ICsgbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgZGF0YSwgaGVhZGVy
cykgewotICAgICAgICByZXR1cm4gJGh0dHBCYWNrZW5kW3ByZWZpeF0obWV0aG9kLCB1cmwsIGRh
dGEsIGhlYWRlcnMpCi0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLX0KLQotZnVuY3Rpb24gTW9ja0h0
dHBFeHBlY3RhdGlvbihtZXRob2QsIHVybCwgZGF0YSwgaGVhZGVycykgewotCi0gIHRoaXMuZGF0
YSA9IGRhdGE7Ci0gIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7Ci0KLSAgdGhpcy5tYXRjaCA9IGZ1
bmN0aW9uKG0sIHUsIGQsIGgpIHsKLSAgICBpZiAobWV0aG9kICE9IG0pIHJldHVybiBmYWxzZTsK
LSAgICBpZiAoIXRoaXMubWF0Y2hVcmwodSkpIHJldHVybiBmYWxzZTsKLSAgICBpZiAoYW5ndWxh
ci5pc0RlZmluZWQoZCkgJiYgIXRoaXMubWF0Y2hEYXRhKGQpKSByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKGFuZ3VsYXIuaXNEZWZpbmVkKGgpICYmICF0aGlzLm1hdGNoSGVhZGVycyhoKSkgcmV0dXJu
IGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotICB9OwotCi0gIHRoaXMubWF0Y2hVcmwgPSBmdW5j
dGlvbih1KSB7Ci0gICAgaWYgKCF1cmwpIHJldHVybiB0cnVlOwotICAgIGlmIChhbmd1bGFyLmlz
RnVuY3Rpb24odXJsLnRlc3QpKSByZXR1cm4gdXJsLnRlc3QodSk7Ci0gICAgcmV0dXJuIHVybCA9
PSB1OwotICB9OwotCi0gIHRoaXMubWF0Y2hIZWFkZXJzID0gZnVuY3Rpb24oaCkgewotICAgIGlm
IChhbmd1bGFyLmlzVW5kZWZpbmVkKGhlYWRlcnMpKSByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoYW5n
dWxhci5pc0Z1bmN0aW9uKGhlYWRlcnMpKSByZXR1cm4gaGVhZGVycyhoKTsKLSAgICByZXR1cm4g
YW5ndWxhci5lcXVhbHMoaGVhZGVycywgaCk7Ci0gIH07Ci0KLSAgdGhpcy5tYXRjaERhdGEgPSBm
dW5jdGlvbihkKSB7Ci0gICAgaWYgKGFuZ3VsYXIuaXNVbmRlZmluZWQoZGF0YSkpIHJldHVybiB0
cnVlOwotICAgIGlmIChkYXRhICYmIGFuZ3VsYXIuaXNGdW5jdGlvbihkYXRhLnRlc3QpKSByZXR1
cm4gZGF0YS50ZXN0KGQpOwotICAgIGlmIChkYXRhICYmICFhbmd1bGFyLmlzU3RyaW5nKGRhdGEp
KSByZXR1cm4gYW5ndWxhci50b0pzb24oZGF0YSkgPT0gZDsKLSAgICByZXR1cm4gZGF0YSA9PSBk
OwotICB9OwotCi0gIHRoaXMudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gbWV0
aG9kICsgJyAnICsgdXJsOwotICB9OwotfQotCi1mdW5jdGlvbiBNb2NrWGhyKCkgewotCi0gIC8v
IGhhY2sgZm9yIHRlc3RpbmcgJGh0dHAsICRodHRwQmFja2VuZAotICBNb2NrWGhyLiQkbGFzdElu
c3RhbmNlID0gdGhpczsKLQotICB0aGlzLm9wZW4gPSBmdW5jdGlvbihtZXRob2QsIHVybCwgYXN5
bmMpIHsKLSAgICB0aGlzLiQkbWV0aG9kID0gbWV0aG9kOwotICAgIHRoaXMuJCR1cmwgPSB1cmw7
Ci0gICAgdGhpcy4kJGFzeW5jID0gYXN5bmM7Ci0gICAgdGhpcy4kJHJlcUhlYWRlcnMgPSB7fTsK
LSAgICB0aGlzLiQkcmVzcEhlYWRlcnMgPSB7fTsKLSAgfTsKLQotICB0aGlzLnNlbmQgPSBmdW5j
dGlvbihkYXRhKSB7Ci0gICAgdGhpcy4kJGRhdGEgPSBkYXRhOwotICB9OwotCi0gIHRoaXMuc2V0
UmVxdWVzdEhlYWRlciA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKLSAgICB0aGlzLiQkcmVxSGVh
ZGVyc1trZXldID0gdmFsdWU7Ci0gIH07Ci0KLSAgdGhpcy5nZXRSZXNwb25zZUhlYWRlciA9IGZ1
bmN0aW9uKG5hbWUpIHsKLSAgICAvLyB0aGUgbG9va3VwIG11c3QgYmUgY2FzZSBpbnNlbnNpdGl2
ZSwgdGhhdCdzIHdoeSB3ZSB0cnkgdHdvIHF1aWNrIGxvb2t1cHMgYW5kIGZ1bGwgc2NhbiBhdCBs
YXN0Ci0gICAgdmFyIGhlYWRlciA9IHRoaXMuJCRyZXNwSGVhZGVyc1tuYW1lXTsKLSAgICBpZiAo
aGVhZGVyKSByZXR1cm4gaGVhZGVyOwotCi0gICAgbmFtZSA9IGFuZ3VsYXIubG93ZXJjYXNlKG5h
bWUpOwotICAgIGhlYWRlciA9IHRoaXMuJCRyZXNwSGVhZGVyc1tuYW1lXTsKLSAgICBpZiAoaGVh
ZGVyKSByZXR1cm4gaGVhZGVyOwotCi0gICAgaGVhZGVyID0gdW5kZWZpbmVkOwotICAgIGFuZ3Vs
YXIuZm9yRWFjaCh0aGlzLiQkcmVzcEhlYWRlcnMsIGZ1bmN0aW9uKGhlYWRlclZhbCwgaGVhZGVy
TmFtZSkgewotICAgICAgaWYgKCFoZWFkZXIgJiYgYW5ndWxhci5sb3dlcmNhc2UoaGVhZGVyTmFt
ZSkgPT0gbmFtZSkgaGVhZGVyID0gaGVhZGVyVmFsOwotICAgIH0pOwotICAgIHJldHVybiBoZWFk
ZXI7Ci0gIH07Ci0KLSAgdGhpcy5nZXRBbGxSZXNwb25zZUhlYWRlcnMgPSBmdW5jdGlvbigpIHsK
LSAgICB2YXIgbGluZXMgPSBbXTsKLQotICAgIGFuZ3VsYXIuZm9yRWFjaCh0aGlzLiQkcmVzcEhl
YWRlcnMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHsKLSAgICAgIGxpbmVzLnB1c2goa2V5ICsgJzog
JyArIHZhbHVlKTsKLSAgICB9KTsKLSAgICByZXR1cm4gbGluZXMuam9pbignXG4nKTsKLSAgfTsK
LQotICB0aGlzLmFib3J0ID0gYW5ndWxhci5ub29wOwotfQotCi0KLS8qKgotICogQG5nZG9jIGZ1
bmN0aW9uCi0gKiBAbmFtZSBuZ01vY2suJHRpbWVvdXQKLSAqIEBkZXNjcmlwdGlvbgotICoKLSAq
IFRoaXMgc2VydmljZSBpcyBqdXN0IGEgc2ltcGxlIGRlY29yYXRvciBmb3Ige0BsaW5rIG5nLiR0
aW1lb3V0ICR0aW1lb3V0fSBzZXJ2aWNlCi0gKiB0aGF0IGFkZHMgYSAiZmx1c2giIG1ldGhvZC4K
LSAqLwotCi0vKioKLSAqIEBuZ2RvYyBtZXRob2QKLSAqIEBuYW1lIG5nTW9jay4kdGltZW91dCNm
bHVzaAotICogQG1ldGhvZE9mIG5nTW9jay4kdGltZW91dAotICogQGRlc2NyaXB0aW9uCi0gKgot
ICogRmx1c2hlcyB0aGUgcXVldWUgb2YgcGVuZGluZyB0YXNrcy4KLSAqLwotCi0vKioKLSAqCi0g
Ki8KLWFuZ3VsYXIubW9jay4kUm9vdEVsZW1lbnRQcm92aWRlciA9IGZ1bmN0aW9uKCkgewotICB0
aGlzLiRnZXQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gYW5ndWxhci5lbGVtZW50KCc8ZGl2
IG5nLWFwcD48L2Rpdj4nKTsKLSAgfQotfTsKLQotLyoqCi0gKiBAbmdkb2Mgb3ZlcnZpZXcKLSAq
IEBuYW1lIG5nTW9jawotICogQGRlc2NyaXB0aW9uCi0gKgotICogVGhlIGBuZ01vY2tgIGlzIGFu
IGFuZ3VsYXIgbW9kdWxlIHdoaWNoIGlzIHVzZWQgd2l0aCBgbmdgIG1vZHVsZSBhbmQgYWRkcyB1
bml0LXRlc3QgY29uZmlndXJhdGlvbiBhcyB3ZWxsIGFzIHVzZWZ1bAotICogbW9ja3MgdG8gdGhl
IHtAbGluayBBVVRPLiRpbmplY3RvciAkaW5qZWN0b3J9LgotICovCi1hbmd1bGFyLm1vZHVsZSgn
bmdNb2NrJywgWyduZyddKS5wcm92aWRlcih7Ci0gICRicm93c2VyOiBhbmd1bGFyLm1vY2suJEJy
b3dzZXJQcm92aWRlciwKLSAgJGV4Y2VwdGlvbkhhbmRsZXI6IGFuZ3VsYXIubW9jay4kRXhjZXB0
aW9uSGFuZGxlclByb3ZpZGVyLAotICAkbG9nOiBhbmd1bGFyLm1vY2suJExvZ1Byb3ZpZGVyLAot
ICAkaHR0cEJhY2tlbmQ6IGFuZ3VsYXIubW9jay4kSHR0cEJhY2tlbmRQcm92aWRlciwKLSAgJHJv
b3RFbGVtZW50OiBhbmd1bGFyLm1vY2suJFJvb3RFbGVtZW50UHJvdmlkZXIKLX0pLmNvbmZpZyhm
dW5jdGlvbigkcHJvdmlkZSkgewotICAkcHJvdmlkZS5kZWNvcmF0b3IoJyR0aW1lb3V0JywgZnVu
Y3Rpb24oJGRlbGVnYXRlLCAkYnJvd3NlcikgewotICAgICRkZWxlZ2F0ZS5mbHVzaCA9IGZ1bmN0
aW9uKCkgewotICAgICAgJGJyb3dzZXIuZGVmZXIuZmx1c2goKTsKLSAgICB9OwotICAgIHJldHVy
biAkZGVsZWdhdGU7Ci0gIH0pOwotfSk7Ci0KLQotLyoqCi0gKiBAbmdkb2Mgb3ZlcnZpZXcKLSAq
IEBuYW1lIG5nTW9ja0UyRQotICogQGRlc2NyaXB0aW9uCi0gKgotICogVGhlIGBuZ01vY2tFMkVg
IGlzIGFuIGFuZ3VsYXIgbW9kdWxlIHdoaWNoIGNvbnRhaW5zIG1vY2tzIHN1aXRhYmxlIGZvciBl
bmQtdG8tZW5kIHRlc3RpbmcuCi0gKiBDdXJyZW50bHkgdGhlcmUgaXMgb25seSBvbmUgbW9jayBw
cmVzZW50IGluIHRoaXMgbW9kdWxlIC0KLSAqIHRoZSB7QGxpbmsgbmdNb2NrRTJFLiRodHRwQmFj
a2VuZCBlMmUgJGh0dHBCYWNrZW5kfSBtb2NrLgotICovCi1hbmd1bGFyLm1vZHVsZSgnbmdNb2Nr
RTJFJywgWyduZyddKS5jb25maWcoZnVuY3Rpb24oJHByb3ZpZGUpIHsKLSAgJHByb3ZpZGUuZGVj
b3JhdG9yKCckaHR0cEJhY2tlbmQnLCBhbmd1bGFyLm1vY2suZTJlLiRodHRwQmFja2VuZERlY29y
YXRvcik7Ci19KTsKLQotLyoqCi0gKiBAbmdkb2Mgb2JqZWN0Ci0gKiBAbmFtZSBuZ01vY2tFMkUu
JGh0dHBCYWNrZW5kCi0gKiBAZGVzY3JpcHRpb24KLSAqIEZha2UgSFRUUCBiYWNrZW5kIGltcGxl
bWVudGF0aW9uIHN1aXRhYmxlIGZvciBlbmQtdG8tZW5kIHRlc3Rpbmcgb3IgYmFja2VuZC1sZXNz
IGRldmVsb3BtZW50IG9mCi0gKiBhcHBsaWNhdGlvbnMgdGhhdCB1c2UgdGhlIHtAbGluayBuZy4k
aHR0cCAkaHR0cCBzZXJ2aWNlfS4KLSAqCi0gKiAqTm90ZSo6IEZvciBmYWtlIGh0dHAgYmFja2Vu
ZCBpbXBsZW1lbnRhdGlvbiBzdWl0YWJsZSBmb3IgdW5pdCB0ZXN0aW5nIHBsZWFzZSBzZWUKLSAq
IHtAbGluayBuZ01vY2suJGh0dHBCYWNrZW5kIHVuaXQtdGVzdGluZyAkaHR0cEJhY2tlbmQgbW9j
a30uCi0gKgotICogVGhpcyBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgdXNlZCB0byByZXNwb25kIHdp
dGggc3RhdGljIG9yIGR5bmFtaWMgcmVzcG9uc2VzIHZpYSB0aGUgYHdoZW5gIGFwaQotICogYW5k
IGl0cyBzaG9ydGN1dHMgKGB3aGVuR0VUYCwgYHdoZW5QT1NUYCwgZXRjKSBhbmQgb3B0aW9uYWxs
eSBwYXNzIHRocm91Z2ggcmVxdWVzdHMgdG8gdGhlCi0gKiByZWFsICRodHRwQmFja2VuZCBmb3Ig
c3BlY2lmaWMgcmVxdWVzdHMgKGUuZy4gdG8gaW50ZXJhY3Qgd2l0aCBjZXJ0YWluIHJlbW90ZSBh
cGlzIG9yIHRvIGZldGNoCi0gKiB0ZW1wbGF0ZXMgZnJvbSBhIHdlYnNlcnZlcikuCi0gKgotICog
QXMgb3Bwb3NlZCB0byB1bml0LXRlc3RpbmcsIGluIGFuIGVuZC10by1lbmQgdGVzdGluZyBzY2Vu
YXJpbyBvciBpbiBzY2VuYXJpbyB3aGVuIGFuIGFwcGxpY2F0aW9uCi0gKiBpcyBiZWluZyBkZXZl
bG9wZWQgd2l0aCB0aGUgcmVhbCBiYWNrZW5kIGFwaSByZXBsYWNlZCB3aXRoIGEgbW9jaywgaXQg
aXMgb2Z0ZW4gZGVzaXJhYmxlIGZvcgotICogY2VydGFpbiBjYXRlZ29yeSBvZiByZXF1ZXN0cyB0
byBieXBhc3MgdGhlIG1vY2sgYW5kIGlzc3VlIGEgcmVhbCBodHRwIHJlcXVlc3QgKGUuZy4gdG8g
ZmV0Y2gKLSAqIHRlbXBsYXRlcyBvciBzdGF0aWMgZmlsZXMgZnJvbSB0aGUgd2Vic2VydmVyKS4g
VG8gY29uZmlndXJlIHRoZSBiYWNrZW5kIHdpdGggdGhpcyBiZWhhdmlvcgotICogdXNlIHRoZSBg
cGFzc1Rocm91Z2hgIHJlcXVlc3QgaGFuZGxlciBvZiBgd2hlbmAgaW5zdGVhZCBvZiBgcmVzcG9u
ZGAuCi0gKgotICogQWRkaXRpb25hbGx5LCB3ZSBkb24ndCB3YW50IHRvIG1hbnVhbGx5IGhhdmUg
dG8gZmx1c2ggbW9ja2VkIG91dCByZXF1ZXN0cyBsaWtlIHdlIGRvIGR1cmluZyB1bml0Ci0gKiB0
ZXN0aW5nLiBGb3IgdGhpcyByZWFzb24gdGhlIGUyZSAkaHR0cEJhY2tlbmQgYXV0b21hdGljYWxs
eSBmbHVzaGVzIG1vY2tlZCBvdXQgcmVxdWVzdHMKLSAqIGF1dG9tYXRpY2FsbHksIGNsb3NlbHkg
c2ltdWxhdGluZyB0aGUgYmVoYXZpb3Igb2YgdGhlIFhNTEh0dHBSZXF1ZXN0IG9iamVjdC4KLSAq
Ci0gKiBUbyBzZXR1cCB0aGUgYXBwbGljYXRpb24gdG8gcnVuIHdpdGggdGhpcyBodHRwIGJhY2tl
bmQsIHlvdSBoYXZlIHRvIGNyZWF0ZSBhIG1vZHVsZSB0aGF0IGRlcGVuZHMKLSAqIG9uIHRoZSBg
bmdNb2NrRTJFYCBhbmQgeW91ciBhcHBsaWNhdGlvbiBtb2R1bGVzIGFuZCBkZWZpbmVzIHRoZSBm
YWtlIGJhY2tlbmQ6Ci0gKgotICogPHByZT4KLSAqICAgbXlBcHBEZXYgPSBhbmd1bGFyLm1vZHVs
ZSgnbXlBcHBEZXYnLCBbJ215QXBwJywgJ25nTW9ja0UyRSddKTsKLSAqICAgbXlBcHBEZXYucnVu
KGZ1bmN0aW9uKCRodHRwQmFja2VuZCkgewotICogICAgIHBob25lcyA9IFt7bmFtZTogJ3Bob25l
MSd9LCB7bmFtZTogJ3Bob25lMid9XTsKLSAqCi0gKiAgICAgLy8gcmV0dXJucyB0aGUgY3VycmVu
dCBsaXN0IG9mIHBob25lcwotICogICAgICRodHRwQmFja2VuZC53aGVuR0VUKCcvcGhvbmVzJyku
cmVzcG9uZChwaG9uZXMpOwotICoKLSAqICAgICAvLyBhZGRzIGEgbmV3IHBob25lIHRvIHRoZSBw
aG9uZXMgYXJyYXkKLSAqICAgICAkaHR0cEJhY2tlbmQud2hlblBPU1QoJy9waG9uZXMnKS5yZXNw
b25kKGZ1bmN0aW9uKG1ldGhvZCwgdXJsLCBkYXRhKSB7Ci0gKiAgICAgICBwaG9uZXMucHVzaChh
bmd1bGFyLmZyb21KU09OKGRhdGEpKTsKLSAqICAgICB9KTsKLSAqICAgICAkaHR0cEJhY2tlbmQu
d2hlbkdFVCgvXlwvdGVtcGxhdGVzXC8vKS5wYXNzVGhyb3VnaCgpOwotICogICAgIC8vLi4uCi0g
KiAgIH0pOwotICogPC9wcmU+Ci0gKgotICogQWZ0ZXJ3YXJkcywgYm9vdHN0cmFwIHlvdXIgYXBw
IHdpdGggdGhpcyBuZXcgbW9kdWxlLgotICovCi0KLS8qKgotICogQG5nZG9jIG1ldGhvZAotICog
QG5hbWUgbmdNb2NrRTJFLiRodHRwQmFja2VuZCN3aGVuCi0gKiBAbWV0aG9kT2YgbmdNb2NrRTJF
LiRodHRwQmFja2VuZAotICogQGRlc2NyaXB0aW9uCi0gKiBDcmVhdGVzIGEgbmV3IGJhY2tlbmQg
ZGVmaW5pdGlvbi4KLSAqCi0gKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIEhUVFAgbWV0aG9kLgot
ICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSB1cmwgSFRUUCB1cmwuCi0gKiBAcGFyYW0geyhzdHJp
bmd8UmVnRXhwKT19IGRhdGEgSFRUUCByZXF1ZXN0IGJvZHkuCi0gKiBAcGFyYW0geyhPYmplY3R8
ZnVuY3Rpb24oT2JqZWN0KSk9fSBoZWFkZXJzIEhUVFAgaGVhZGVycyBvciBmdW5jdGlvbiB0aGF0
IHJlY2VpdmVzIGh0dHAgaGVhZGVyCi0gKiAgIG9iamVjdCBhbmQgcmV0dXJucyB0cnVlIGlmIHRo
ZSBoZWFkZXJzIG1hdGNoIHRoZSBjdXJyZW50IGRlZmluaXRpb24uCi0gKiBAcmV0dXJucyB7cmVx
dWVzdEhhbmRsZXJ9IFJldHVybnMgYW4gb2JqZWN0IHdpdGggYHJlc3BvbmRgIGFuZCBgcGFzc1Ro
cm91Z2hgIG1ldGhvZHMgdGhhdAotICogICBjb250cm9sIGhvdyBhIG1hdGNoZWQgcmVxdWVzdCBp
cyBoYW5kbGVkLgotICoKLSAqICAtIHJlc3BvbmQg4oCTIGB7ZnVuY3Rpb24oW3N0YXR1cyxdIGRh
dGFbLCBoZWFkZXJzXSl8ZnVuY3Rpb24oZnVuY3Rpb24obWV0aG9kLCB1cmwsIGRhdGEsIGhlYWRl
cnMpfWAKLSAqICAgIOKAkyBUaGUgcmVzcG9uZCBtZXRob2QgdGFrZXMgYSBzZXQgb2Ygc3RhdGlj
IGRhdGEgdG8gYmUgcmV0dXJuZWQgb3IgYSBmdW5jdGlvbiB0aGF0IGNhbiByZXR1cm4KLSAqICAg
IGFuIGFycmF5IGNvbnRhaW5pbmcgcmVzcG9uc2Ugc3RhdHVzIChudW1iZXIpLCByZXNwb25zZSBk
YXRhIChzdHJpbmcpIGFuZCByZXNwb25zZSBoZWFkZXJzCi0gKiAgICAoT2JqZWN0KS4KLSAqICAt
IHBhc3NUaHJvdWdoIOKAkyBge2Z1bmN0aW9uKCl9YCDigJMgQW55IHJlcXVlc3QgbWF0Y2hpbmcg
YSBiYWNrZW5kIGRlZmluaXRpb24gd2l0aCBgcGFzc1Rocm91Z2hgCi0gKiAgICBoYW5kbGVyLCB3
aWxsIGJlIHBhc3MgdGhyb3VnaCB0byB0aGUgcmVhbCBiYWNrZW5kIChhbiBYSFIgcmVxdWVzdCB3
aWxsIGJlIG1hZGUgdG8gdGhlCi0gKiAgICBzZXJ2ZXIuCi0gKi8KLQotLyoqCi0gKiBAbmdkb2Mg
bWV0aG9kCi0gKiBAbmFtZSBuZ01vY2tFMkUuJGh0dHBCYWNrZW5kI3doZW5HRVQKLSAqIEBtZXRo
b2RPZiBuZ01vY2tFMkUuJGh0dHBCYWNrZW5kCi0gKiBAZGVzY3JpcHRpb24KLSAqIENyZWF0ZXMg
YSBuZXcgYmFja2VuZCBkZWZpbml0aW9uIGZvciBHRVQgcmVxdWVzdHMuIEZvciBtb3JlIGluZm8g
c2VlIGB3aGVuKClgLgotICoKLSAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gdXJsIEhUVFAgdXJs
LgotICogQHBhcmFtIHsoT2JqZWN0fGZ1bmN0aW9uKE9iamVjdCkpPX0gaGVhZGVycyBIVFRQIGhl
YWRlcnMuCi0gKiBAcmV0dXJucyB7cmVxdWVzdEhhbmRsZXJ9IFJldHVybnMgYW4gb2JqZWN0IHdp
dGggYHJlc3BvbmRgIGFuZCBgcGFzc1Rocm91Z2hgIG1ldGhvZHMgdGhhdAotICogICBjb250cm9s
IGhvdyBhIG1hdGNoZWQgcmVxdWVzdCBpcyBoYW5kbGVkLgotICovCi0KLS8qKgotICogQG5nZG9j
IG1ldGhvZAotICogQG5hbWUgbmdNb2NrRTJFLiRodHRwQmFja2VuZCN3aGVuSEVBRAotICogQG1l
dGhvZE9mIG5nTW9ja0UyRS4kaHR0cEJhY2tlbmQKLSAqIEBkZXNjcmlwdGlvbgotICogQ3JlYXRl
cyBhIG5ldyBiYWNrZW5kIGRlZmluaXRpb24gZm9yIEhFQUQgcmVxdWVzdHMuIEZvciBtb3JlIGlu
Zm8gc2VlIGB3aGVuKClgLgotICoKLSAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gdXJsIEhUVFAg
dXJsLgotICogQHBhcmFtIHsoT2JqZWN0fGZ1bmN0aW9uKE9iamVjdCkpPX0gaGVhZGVycyBIVFRQ
IGhlYWRlcnMuCi0gKiBAcmV0dXJucyB7cmVxdWVzdEhhbmRsZXJ9IFJldHVybnMgYW4gb2JqZWN0
IHdpdGggYHJlc3BvbmRgIGFuZCBgcGFzc1Rocm91Z2hgIG1ldGhvZHMgdGhhdAotICogICBjb250
cm9sIGhvdyBhIG1hdGNoZWQgcmVxdWVzdCBpcyBoYW5kbGVkLgotICovCi0KLS8qKgotICogQG5n
ZG9jIG1ldGhvZAotICogQG5hbWUgbmdNb2NrRTJFLiRodHRwQmFja2VuZCN3aGVuREVMRVRFCi0g
KiBAbWV0aG9kT2YgbmdNb2NrRTJFLiRodHRwQmFja2VuZAotICogQGRlc2NyaXB0aW9uCi0gKiBD
cmVhdGVzIGEgbmV3IGJhY2tlbmQgZGVmaW5pdGlvbiBmb3IgREVMRVRFIHJlcXVlc3RzLiBGb3Ig
bW9yZSBpbmZvIHNlZSBgd2hlbigpYC4KLSAqCi0gKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IHVy
bCBIVFRQIHVybC4KLSAqIEBwYXJhbSB7KE9iamVjdHxmdW5jdGlvbihPYmplY3QpKT19IGhlYWRl
cnMgSFRUUCBoZWFkZXJzLgotICogQHJldHVybnMge3JlcXVlc3RIYW5kbGVyfSBSZXR1cm5zIGFu
IG9iamVjdCB3aXRoIGByZXNwb25kYCBhbmQgYHBhc3NUaHJvdWdoYCBtZXRob2RzIHRoYXQKLSAq
ICAgY29udHJvbCBob3cgYSBtYXRjaGVkIHJlcXVlc3QgaXMgaGFuZGxlZC4KLSAqLwotCi0vKioK
LSAqIEBuZ2RvYyBtZXRob2QKLSAqIEBuYW1lIG5nTW9ja0UyRS4kaHR0cEJhY2tlbmQjd2hlblBP
U1QKLSAqIEBtZXRob2RPZiBuZ01vY2tFMkUuJGh0dHBCYWNrZW5kCi0gKiBAZGVzY3JpcHRpb24K
LSAqIENyZWF0ZXMgYSBuZXcgYmFja2VuZCBkZWZpbml0aW9uIGZvciBQT1NUIHJlcXVlc3RzLiBG
b3IgbW9yZSBpbmZvIHNlZSBgd2hlbigpYC4KLSAqCi0gKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9
IHVybCBIVFRQIHVybC4KLSAqIEBwYXJhbSB7KHN0cmluZ3xSZWdFeHApPX0gZGF0YSBIVFRQIHJl
cXVlc3QgYm9keS4KLSAqIEBwYXJhbSB7KE9iamVjdHxmdW5jdGlvbihPYmplY3QpKT19IGhlYWRl
cnMgSFRUUCBoZWFkZXJzLgotICogQHJldHVybnMge3JlcXVlc3RIYW5kbGVyfSBSZXR1cm5zIGFu
IG9iamVjdCB3aXRoIGByZXNwb25kYCBhbmQgYHBhc3NUaHJvdWdoYCBtZXRob2RzIHRoYXQKLSAq
ICAgY29udHJvbCBob3cgYSBtYXRjaGVkIHJlcXVlc3QgaXMgaGFuZGxlZC4KLSAqLwotCi0vKioK
LSAqIEBuZ2RvYyBtZXRob2QKLSAqIEBuYW1lIG5nTW9ja0UyRS4kaHR0cEJhY2tlbmQjd2hlblBV
VAotICogQG1ldGhvZE9mIG5nTW9ja0UyRS4kaHR0cEJhY2tlbmQKLSAqIEBkZXNjcmlwdGlvbgot
ICogQ3JlYXRlcyBhIG5ldyBiYWNrZW5kIGRlZmluaXRpb24gZm9yIFBVVCByZXF1ZXN0cy4gIEZv
ciBtb3JlIGluZm8gc2VlIGB3aGVuKClgLgotICoKLSAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0g
dXJsIEhUVFAgdXJsLgotICogQHBhcmFtIHsoc3RyaW5nfFJlZ0V4cCk9fSBkYXRhIEhUVFAgcmVx
dWVzdCBib2R5LgotICogQHBhcmFtIHsoT2JqZWN0fGZ1bmN0aW9uKE9iamVjdCkpPX0gaGVhZGVy
cyBIVFRQIGhlYWRlcnMuCi0gKiBAcmV0dXJucyB7cmVxdWVzdEhhbmRsZXJ9IFJldHVybnMgYW4g
b2JqZWN0IHdpdGggYHJlc3BvbmRgIGFuZCBgcGFzc1Rocm91Z2hgIG1ldGhvZHMgdGhhdAotICog
ICBjb250cm9sIGhvdyBhIG1hdGNoZWQgcmVxdWVzdCBpcyBoYW5kbGVkLgotICovCi0KLS8qKgot
ICogQG5nZG9jIG1ldGhvZAotICogQG5hbWUgbmdNb2NrRTJFLiRodHRwQmFja2VuZCN3aGVuUEFU
Q0gKLSAqIEBtZXRob2RPZiBuZ01vY2tFMkUuJGh0dHBCYWNrZW5kCi0gKiBAZGVzY3JpcHRpb24K
LSAqIENyZWF0ZXMgYSBuZXcgYmFja2VuZCBkZWZpbml0aW9uIGZvciBQQVRDSCByZXF1ZXN0cy4g
IEZvciBtb3JlIGluZm8gc2VlIGB3aGVuKClgLgotICoKLSAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4
cH0gdXJsIEhUVFAgdXJsLgotICogQHBhcmFtIHsoc3RyaW5nfFJlZ0V4cCk9fSBkYXRhIEhUVFAg
cmVxdWVzdCBib2R5LgotICogQHBhcmFtIHsoT2JqZWN0fGZ1bmN0aW9uKE9iamVjdCkpPX0gaGVh
ZGVycyBIVFRQIGhlYWRlcnMuCi0gKiBAcmV0dXJucyB7cmVxdWVzdEhhbmRsZXJ9IFJldHVybnMg
YW4gb2JqZWN0IHdpdGggYHJlc3BvbmRgIGFuZCBgcGFzc1Rocm91Z2hgIG1ldGhvZHMgdGhhdAot
ICogICBjb250cm9sIGhvdyBhIG1hdGNoZWQgcmVxdWVzdCBpcyBoYW5kbGVkLgotICovCi0KLS8q
KgotICogQG5nZG9jIG1ldGhvZAotICogQG5hbWUgbmdNb2NrRTJFLiRodHRwQmFja2VuZCN3aGVu
SlNPTlAKLSAqIEBtZXRob2RPZiBuZ01vY2tFMkUuJGh0dHBCYWNrZW5kCi0gKiBAZGVzY3JpcHRp
b24KLSAqIENyZWF0ZXMgYSBuZXcgYmFja2VuZCBkZWZpbml0aW9uIGZvciBKU09OUCByZXF1ZXN0
cy4gRm9yIG1vcmUgaW5mbyBzZWUgYHdoZW4oKWAuCi0gKgotICogQHBhcmFtIHtzdHJpbmd8UmVn
RXhwfSB1cmwgSFRUUCB1cmwuCi0gKiBAcmV0dXJucyB7cmVxdWVzdEhhbmRsZXJ9IFJldHVybnMg
YW4gb2JqZWN0IHdpdGggYHJlc3BvbmRgIGFuZCBgcGFzc1Rocm91Z2hgIG1ldGhvZHMgdGhhdAot
ICogICBjb250cm9sIGhvdyBhIG1hdGNoZWQgcmVxdWVzdCBpcyBoYW5kbGVkLgotICovCi1hbmd1
bGFyLm1vY2suZTJlID0ge307Ci1hbmd1bGFyLm1vY2suZTJlLiRodHRwQmFja2VuZERlY29yYXRv
ciA9IFsnJGRlbGVnYXRlJywgJyRicm93c2VyJywgY3JlYXRlSHR0cEJhY2tlbmRNb2NrXTsKLQot
Ci1hbmd1bGFyLm1vY2suY2xlYXJEYXRhQ2FjaGUgPSBmdW5jdGlvbigpIHsKLSAgdmFyIGtleSwK
LSAgICAgIGNhY2hlID0gYW5ndWxhci5lbGVtZW50LmNhY2hlOwotCi0gIGZvcihrZXkgaW4gY2Fj
aGUpIHsKLSAgICBpZiAoY2FjaGUuaGFzT3duUHJvcGVydHkoa2V5KSkgewotICAgICAgdmFyIGhh
bmRsZSA9IGNhY2hlW2tleV0uaGFuZGxlOwotCi0gICAgICBoYW5kbGUgJiYgYW5ndWxhci5lbGVt
ZW50KGhhbmRsZS5lbGVtKS51bmJpbmQoKTsKLSAgICAgIGRlbGV0ZSBjYWNoZVtrZXldOwotICAg
IH0KLSAgfQotfTsKLQotCi13aW5kb3cuanN0ZXN0ZHJpdmVyICYmIChmdW5jdGlvbih3aW5kb3cp
IHsKLSAgLyoqCi0gICAqIEdsb2JhbCBtZXRob2QgdG8gb3V0cHV0IGFueSBudW1iZXIgb2Ygb2Jq
ZWN0cyBpbnRvIEpTVEQgY29uc29sZS4gVXNlZnVsIGZvciBkZWJ1Z2dpbmcuCi0gICAqLwotICB3
aW5kb3cuZHVtcCA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBhcmdzID0gW107Ci0gICAgYW5ndWxh
ci5mb3JFYWNoKGFyZ3VtZW50cywgZnVuY3Rpb24oYXJnKSB7Ci0gICAgICBhcmdzLnB1c2goYW5n
dWxhci5tb2NrLmR1bXAoYXJnKSk7Ci0gICAgfSk7Ci0gICAganN0ZXN0ZHJpdmVyLmNvbnNvbGUu
bG9nLmFwcGx5KGpzdGVzdGRyaXZlci5jb25zb2xlLCBhcmdzKTsKLSAgICBpZiAod2luZG93LmNv
bnNvbGUpIHsKLSAgICAgIHdpbmRvdy5jb25zb2xlLmxvZy5hcHBseSh3aW5kb3cuY29uc29sZSwg
YXJncyk7Ci0gICAgfQotICB9OwotfSkod2luZG93KTsKLQotCi13aW5kb3cuamFzbWluZSAmJiAo
ZnVuY3Rpb24od2luZG93KSB7Ci0KLSAgYWZ0ZXJFYWNoKGZ1bmN0aW9uKCkgewotICAgIHZhciBz
cGVjID0gZ2V0Q3VycmVudFNwZWMoKTsKLSAgICB2YXIgaW5qZWN0b3IgPSBzcGVjLiRpbmplY3Rv
cjsKLQotICAgIHNwZWMuJGluamVjdG9yID0gbnVsbDsKLSAgICBzcGVjLiRtb2R1bGVzID0gbnVs
bDsKLQotICAgIGlmIChpbmplY3RvcikgewotICAgICAgaW5qZWN0b3IuZ2V0KCckcm9vdEVsZW1l
bnQnKS51bmJpbmQoKTsKLSAgICAgIGluamVjdG9yLmdldCgnJGJyb3dzZXInKS5wb2xsRm5zLmxl
bmd0aCA9IDA7Ci0gICAgfQotCi0gICAgYW5ndWxhci5tb2NrLmNsZWFyRGF0YUNhY2hlKCk7Ci0K
LSAgICAvLyBjbGVhbiB1cCBqcXVlcnkncyBmcmFnbWVudCBjYWNoZQotICAgIGFuZ3VsYXIuZm9y
RWFjaChhbmd1bGFyLmVsZW1lbnQuZnJhZ21lbnRzLCBmdW5jdGlvbih2YWwsIGtleSkgewotICAg
ICAgZGVsZXRlIGFuZ3VsYXIuZWxlbWVudC5mcmFnbWVudHNba2V5XTsKLSAgICB9KTsKLQotICAg
IE1vY2tYaHIuJCRsYXN0SW5zdGFuY2UgPSBudWxsOwotCi0gICAgYW5ndWxhci5mb3JFYWNoKGFu
Z3VsYXIuY2FsbGJhY2tzLCBmdW5jdGlvbih2YWwsIGtleSkgewotICAgICAgZGVsZXRlIGFuZ3Vs
YXIuY2FsbGJhY2tzW2tleV07Ci0gICAgfSk7Ci0gICAgYW5ndWxhci5jYWxsYmFja3MuY291bnRl
ciA9IDA7Ci0gIH0pOwotCi0gIGZ1bmN0aW9uIGdldEN1cnJlbnRTcGVjKCkgewotICAgIHJldHVy
biBqYXNtaW5lLmdldEVudigpLmN1cnJlbnRTcGVjOwotICB9Ci0KLSAgZnVuY3Rpb24gaXNTcGVj
UnVubmluZygpIHsKLSAgICB2YXIgc3BlYyA9IGdldEN1cnJlbnRTcGVjKCk7Ci0gICAgcmV0dXJu
IHNwZWMgJiYgc3BlYy5xdWV1ZS5ydW5uaW5nOwotICB9Ci0KLSAgLyoqCi0gICAqIEBuZ2RvYyBm
dW5jdGlvbgotICAgKiBAbmFtZSBhbmd1bGFyLm1vY2subW9kdWxlCi0gICAqIEBkZXNjcmlwdGlv
bgotICAgKgotICAgKiAqTk9URSo6IFRoaXMgaXMgZnVuY3Rpb24gaXMgYWxzbyBwdWJsaXNoZWQg
b24gd2luZG93IGZvciBlYXN5IGFjY2Vzcy48YnI+Ci0gICAqICpOT1RFKjogT25seSBhdmFpbGFi
bGUgd2l0aCB7QGxpbmsgaHR0cDovL3Bpdm90YWwuZ2l0aHViLmNvbS9qYXNtaW5lLyBqYXNtaW5l
fS4KLSAgICoKLSAgICogVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYSBtb2R1bGUgY29uZmlndXJh
dGlvbiBjb2RlLiBJdCBjb2xsZWN0cyB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbgotICAg
KiB3aGljaCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgaW5qZWN0b3IgaXMgY3JlYXRlZCBieSB7QGxp
bmsgYW5ndWxhci5tb2NrLmluamVjdCBpbmplY3R9LgotICAgKgotICAgKiBTZWUge0BsaW5rIGFu
Z3VsYXIubW9jay5pbmplY3QgaW5qZWN0fSBmb3IgdXNhZ2UgZXhhbXBsZQotICAgKgotICAgKiBA
cGFyYW0gey4uLihzdHJpbmd8RnVuY3Rpb24pfSBmbnMgYW55IG51bWJlciBvZiBtb2R1bGVzIHdo
aWNoIGFyZSByZXByZXNlbnRlZCBhcyBzdHJpbmcKLSAgICogICAgICAgIGFsaWFzZXMgb3IgYXMg
YW5vbnltb3VzIG1vZHVsZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMuIFRoZSBtb2R1bGVzIGFy
ZSB1c2VkIHRvCi0gICAqICAgICAgICBjb25maWd1cmUgdGhlIGluamVjdG9yLiBUaGUgJ25nJyBh
bmQgJ25nTW9jaycgbW9kdWxlcyBhcmUgYXV0b21hdGljYWxseSBsb2FkZWQuCi0gICAqLwotICB3
aW5kb3cubW9kdWxlID0gYW5ndWxhci5tb2NrLm1vZHVsZSA9IGZ1bmN0aW9uKCkgewotICAgIHZh
ciBtb2R1bGVGbnMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApOwot
ICAgIHJldHVybiBpc1NwZWNSdW5uaW5nKCkgPyB3b3JrRm4oKSA6IHdvcmtGbjsKLSAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KLSAgICBmdW5jdGlvbiB3b3JrRm4oKSB7Ci0gICAgICB2YXIgc3Bl
YyA9IGdldEN1cnJlbnRTcGVjKCk7Ci0gICAgICBpZiAoc3BlYy4kaW5qZWN0b3IpIHsKLSAgICAg
ICAgdGhyb3cgRXJyb3IoJ0luamVjdG9yIGFscmVhZHkgY3JlYXRlZCwgY2FuIG5vdCByZWdpc3Rl
ciBhIG1vZHVsZSEnKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHZhciBtb2R1bGVzID0gc3Bl
Yy4kbW9kdWxlcyB8fCAoc3BlYy4kbW9kdWxlcyA9IFtdKTsKLSAgICAgICAgYW5ndWxhci5mb3JF
YWNoKG1vZHVsZUZucywgZnVuY3Rpb24obW9kdWxlKSB7Ci0gICAgICAgICAgbW9kdWxlcy5wdXNo
KG1vZHVsZSk7Ci0gICAgICAgIH0pOwotICAgICAgfQotICAgIH0KLSAgfTsKLQotICAvKioKLSAg
ICogQG5nZG9jIGZ1bmN0aW9uCi0gICAqIEBuYW1lIGFuZ3VsYXIubW9jay5pbmplY3QKLSAgICog
QGRlc2NyaXB0aW9uCi0gICAqCi0gICAqICpOT1RFKjogVGhpcyBpcyBmdW5jdGlvbiBpcyBhbHNv
IHB1Ymxpc2hlZCBvbiB3aW5kb3cgZm9yIGVhc3kgYWNjZXNzLjxicj4KLSAgICogKk5PVEUqOiBP
bmx5IGF2YWlsYWJsZSB3aXRoIHtAbGluayBodHRwOi8vcGl2b3RhbC5naXRodWIuY29tL2phc21p
bmUvIGphc21pbmV9LgotICAgKgotICAgKiBUaGUgaW5qZWN0IGZ1bmN0aW9uIHdyYXBzIGEgZnVu
Y3Rpb24gaW50byBhbiBpbmplY3RhYmxlIGZ1bmN0aW9uLiBUaGUgaW5qZWN0KCkgY3JlYXRlcyBu
ZXcKLSAgICogaW5zdGFuY2Ugb2Yge0BsaW5rIEFVVE8uJGluamVjdG9yICRpbmplY3Rvcn0gcGVy
IHRlc3QsIHdoaWNoIGlzIHRoZW4gdXNlZCBmb3IKLSAgICogcmVzb2x2aW5nIHJlZmVyZW5jZXMu
Ci0gICAqCi0gICAqIFNlZSBhbHNvIHtAbGluayBhbmd1bGFyLm1vY2subW9kdWxlIG1vZHVsZX0K
LSAgICoKLSAgICogRXhhbXBsZSBvZiB3aGF0IGEgdHlwaWNhbCBqYXNtaW5lIHRlc3RzIGxvb2tz
IGxpa2Ugd2l0aCB0aGUgaW5qZWN0IG1ldGhvZC4KLSAgICogPHByZT4KLSAgICoKLSAgICogICBh
bmd1bGFyLm1vZHVsZSgnbXlBcHBsaWNhdGlvbk1vZHVsZScsIFtdKQotICAgKiAgICAgICAudmFs
dWUoJ21vZGUnLCAnYXBwJykKLSAgICogICAgICAgLnZhbHVlKCd2ZXJzaW9uJywgJ3YxLjAuMScp
OwotICAgKgotICAgKgotICAgKiAgIGRlc2NyaWJlKCdNeUFwcCcsIGZ1bmN0aW9uKCkgewotICAg
KgotICAgKiAgICAgLy8gWW91IG5lZWQgdG8gbG9hZCBtb2R1bGVzIHRoYXQgeW91IHdhbnQgdG8g
dGVzdCwKLSAgICogICAgIC8vIGl0IGxvYWRzIG9ubHkgdGhlICJuZyIgbW9kdWxlIGJ5IGRlZmF1
bHQuCi0gICAqICAgICBiZWZvcmVFYWNoKG1vZHVsZSgnbXlBcHBsaWNhdGlvbk1vZHVsZScpKTsK
LSAgICoKLSAgICoKLSAgICogICAgIC8vIGluamVjdCgpIGlzIHVzZWQgdG8gaW5qZWN0IGFyZ3Vt
ZW50cyBvZiBhbGwgZ2l2ZW4gZnVuY3Rpb25zCi0gICAqICAgICBpdCgnc2hvdWxkIHByb3ZpZGUg
YSB2ZXJzaW9uJywgaW5qZWN0KGZ1bmN0aW9uKG1vZGUsIHZlcnNpb24pIHsKLSAgICogICAgICAg
ZXhwZWN0KHZlcnNpb24pLnRvRXF1YWwoJ3YxLjAuMScpOwotICAgKiAgICAgICBleHBlY3QobW9k
ZSkudG9FcXVhbCgnYXBwJyk7Ci0gICAqICAgICB9KSk7Ci0gICAqCi0gICAqCi0gICAqICAgICAv
LyBUaGUgaW5qZWN0IGFuZCBtb2R1bGUgbWV0aG9kIGNhbiBhbHNvIGJlIHVzZWQgaW5zaWRlIG9m
IHRoZSBpdCBvciBiZWZvcmVFYWNoCi0gICAqICAgICBpdCgnc2hvdWxkIG92ZXJyaWRlIGEgdmVy
c2lvbiBhbmQgdGVzdCB0aGUgbmV3IHZlcnNpb24gaXMgaW5qZWN0ZWQnLCBmdW5jdGlvbigpIHsK
LSAgICogICAgICAgLy8gbW9kdWxlKCkgdGFrZXMgZnVuY3Rpb25zIG9yIHN0cmluZ3MgKG1vZHVs
ZSBhbGlhc2VzKQotICAgKiAgICAgICBtb2R1bGUoZnVuY3Rpb24oJHByb3ZpZGUpIHsKLSAgICog
ICAgICAgICAkcHJvdmlkZS52YWx1ZSgndmVyc2lvbicsICdvdmVycmlkZGVuJyk7IC8vIG92ZXJy
aWRlIHZlcnNpb24gaGVyZQotICAgKiAgICAgICB9KTsKLSAgICoKLSAgICogICAgICAgaW5qZWN0
KGZ1bmN0aW9uKHZlcnNpb24pIHsKLSAgICogICAgICAgICBleHBlY3QodmVyc2lvbikudG9FcXVh
bCgnb3ZlcnJpZGRlbicpOwotICAgKiAgICAgICB9KTsKLSAgICogICAgICkpOwotICAgKiAgIH0p
OwotICAgKgotICAgKiA8L3ByZT4KLSAgICoKLSAgICogQHBhcmFtIHsuLi5GdW5jdGlvbn0gZm5z
IGFueSBudW1iZXIgb2YgZnVuY3Rpb25zIHdoaWNoIHdpbGwgYmUgaW5qZWN0ZWQgdXNpbmcgdGhl
IGluamVjdG9yLgotICAgKi8KLSAgd2luZG93LmluamVjdCA9IGFuZ3VsYXIubW9jay5pbmplY3Qg
PSBmdW5jdGlvbigpIHsKLSAgICB2YXIgYmxvY2tGbnMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2Uu
Y2FsbChhcmd1bWVudHMsIDApOwotICAgIHZhciBlcnJvckZvclN0YWNrID0gbmV3IEVycm9yKCdE
ZWNsYXJhdGlvbiBMb2NhdGlvbicpOwotICAgIHJldHVybiBpc1NwZWNSdW5uaW5nKCkgPyB3b3Jr
Rm4oKSA6IHdvcmtGbjsKLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICBmdW5jdGlvbiB3
b3JrRm4oKSB7Ci0gICAgICB2YXIgc3BlYyA9IGdldEN1cnJlbnRTcGVjKCk7Ci0gICAgICB2YXIg
bW9kdWxlcyA9IHNwZWMuJG1vZHVsZXMgfHwgW107Ci0gICAgICBtb2R1bGVzLnVuc2hpZnQoJ25n
TW9jaycpOwotICAgICAgbW9kdWxlcy51bnNoaWZ0KCduZycpOwotICAgICAgdmFyIGluamVjdG9y
ID0gc3BlYy4kaW5qZWN0b3I7Ci0gICAgICBpZiAoIWluamVjdG9yKSB7Ci0gICAgICAgIGluamVj
dG9yID0gc3BlYy4kaW5qZWN0b3IgPSBhbmd1bGFyLmluamVjdG9yKG1vZHVsZXMpOwotICAgICAg
fQotICAgICAgZm9yKHZhciBpID0gMCwgaWkgPSBibG9ja0Zucy5sZW5ndGg7IGkgPCBpaTsgaSsr
KSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgaW5qZWN0b3IuaW52b2tlKGJsb2NrRm5zW2ld
IHx8IGFuZ3VsYXIubm9vcCwgdGhpcyk7Ci0gICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAg
ICBpZihlLnN0YWNrKSBlLnN0YWNrICs9ICAnXG4nICsgZXJyb3JGb3JTdGFjay5zdGFjazsKLSAg
ICAgICAgICB0aHJvdyBlOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgIGVycm9yRm9y
U3RhY2sgPSBudWxsOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9OwotfSkod2luZG93
KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9ib3dlcl9jb21wb25lbnRzL2Fu
Z3VsYXIvYW5ndWxhci5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9ib3dlcl9jb21wb25lbnRz
L2FuZ3VsYXIvYW5ndWxhci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc5MmIy
NmM3NDRlNGE1ZmM4MTU0NjFmMGVhYzQwYTliZGVhYTE1OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvYm93ZXJfY29t
cG9uZW50cy9hbmd1bGFyL2FuZ3VsYXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDg0NyArMCww
IEBACi0vKioKLSAqIEBsaWNlbnNlIEFuZ3VsYXJKUyB2MS4wLjcKLSAqIChjKSAyMDEwLTIwMTIg
R29vZ2xlLCBJbmMuIGh0dHA6Ly9hbmd1bGFyanMub3JnCi0gKiBMaWNlbnNlOiBNSVQKLSAqLwot
KGZ1bmN0aW9uKHdpbmRvdywgZG9jdW1lbnQsIHVuZGVmaW5lZCkgewotJ3VzZSBzdHJpY3QnOwot
Ci0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotLyoqCi0gKiBAbmdkb2Mg
ZnVuY3Rpb24KLSAqIEBuYW1lIGFuZ3VsYXIubG93ZXJjYXNlCi0gKiBAZnVuY3Rpb24KLSAqCi0g
KiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIHNwZWNpZmllZCBzdHJpbmcgdG8gbG93ZXJjYXNl
LgotICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBTdHJpbmcgdG8gYmUgY29udmVydGVkIHRvIGxv
d2VyY2FzZS4KLSAqIEByZXR1cm5zIHtzdHJpbmd9IExvd2VyY2FzZWQgc3RyaW5nLgotICovCi12
YXIgbG93ZXJjYXNlID0gZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gaXNTdHJpbmcoc3RyaW5nKSA/
IHN0cmluZy50b0xvd2VyQ2FzZSgpIDogc3RyaW5nO307Ci0KLQotLyoqCi0gKiBAbmdkb2MgZnVu
Y3Rpb24KLSAqIEBuYW1lIGFuZ3VsYXIudXBwZXJjYXNlCi0gKiBAZnVuY3Rpb24KLSAqCi0gKiBA
ZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIHNwZWNpZmllZCBzdHJpbmcgdG8gdXBwZXJjYXNlLgot
ICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBTdHJpbmcgdG8gYmUgY29udmVydGVkIHRvIHVwcGVy
Y2FzZS4KLSAqIEByZXR1cm5zIHtzdHJpbmd9IFVwcGVyY2FzZWQgc3RyaW5nLgotICovCi12YXIg
dXBwZXJjYXNlID0gZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gaXNTdHJpbmcoc3RyaW5nKSA/IHN0
cmluZy50b1VwcGVyQ2FzZSgpIDogc3RyaW5nO307Ci0KLQotdmFyIG1hbnVhbExvd2VyY2FzZSA9
IGZ1bmN0aW9uKHMpIHsKLSAgcmV0dXJuIGlzU3RyaW5nKHMpCi0gICAgICA/IHMucmVwbGFjZSgv
W0EtWl0vZywgZnVuY3Rpb24oY2gpIHtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjaC5jaGFy
Q29kZUF0KDApIHwgMzIpO30pCi0gICAgICA6IHM7Ci19OwotdmFyIG1hbnVhbFVwcGVyY2FzZSA9
IGZ1bmN0aW9uKHMpIHsKLSAgcmV0dXJuIGlzU3RyaW5nKHMpCi0gICAgICA/IHMucmVwbGFjZSgv
W2Etel0vZywgZnVuY3Rpb24oY2gpIHtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjaC5jaGFy
Q29kZUF0KDApICYgfjMyKTt9KQotICAgICAgOiBzOwotfTsKLQotCi0vLyBTdHJpbmcjdG9Mb3dl
ckNhc2UgYW5kIFN0cmluZyN0b1VwcGVyQ2FzZSBkb24ndCBwcm9kdWNlIGNvcnJlY3QgcmVzdWx0
cyBpbiBicm93c2VycyB3aXRoIFR1cmtpc2gKLS8vIGxvY2FsZSwgZm9yIHRoaXMgcmVhc29uIHdl
IG5lZWQgdG8gZGV0ZWN0IHRoaXMgY2FzZSBhbmQgcmVkZWZpbmUgbG93ZXJjYXNlL3VwcGVyY2Fz
ZSBtZXRob2RzCi0vLyB3aXRoIGNvcnJlY3QgYnV0IHNsb3dlciBhbHRlcm5hdGl2ZXMuCi1pZiAo
J2knICE9PSAnSScudG9Mb3dlckNhc2UoKSkgewotICBsb3dlcmNhc2UgPSBtYW51YWxMb3dlcmNh
c2U7Ci0gIHVwcGVyY2FzZSA9IG1hbnVhbFVwcGVyY2FzZTsKLX0KLQotCi12YXIgLyoqIGhvbGRz
IG1ham9yIHZlcnNpb24gbnVtYmVyIGZvciBJRSBvciBOYU4gZm9yIHJlYWwgYnJvd3NlcnMgKi8K
LSAgICBtc2llICAgICAgICAgICAgICA9IGludCgoL21zaWUgKFxkKykvLmV4ZWMobG93ZXJjYXNl
KG5hdmlnYXRvci51c2VyQWdlbnQpKSB8fCBbXSlbMV0pLAotICAgIGpxTGl0ZSwgICAgICAgICAg
IC8vIGRlbGF5IGJpbmRpbmcgc2luY2UgalF1ZXJ5IGNvdWxkIGJlIGxvYWRlZCBhZnRlciB1cy4K
LSAgICBqUXVlcnksICAgICAgICAgICAvLyBkZWxheSBiaW5kaW5nCi0gICAgc2xpY2UgICAgICAg
ICAgICAgPSBbXS5zbGljZSwKLSAgICBwdXNoICAgICAgICAgICAgICA9IFtdLnB1c2gsCi0gICAg
dG9TdHJpbmcgICAgICAgICAgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLAotCi0gICAgLyoq
IEBuYW1lIGFuZ3VsYXIgKi8KLSAgICBhbmd1bGFyICAgICAgICAgICA9IHdpbmRvdy5hbmd1bGFy
IHx8ICh3aW5kb3cuYW5ndWxhciA9IHt9KSwKLSAgICBhbmd1bGFyTW9kdWxlLAotICAgIG5vZGVO
YW1lXywKLSAgICB1aWQgICAgICAgICAgICAgICA9IFsnMCcsICcwJywgJzAnXTsKLQotCi0vKioK
LSAqIEBwcml2YXRlCi0gKiBAcGFyYW0geyp9IG9iagotICogQHJldHVybiB7Ym9vbGVhbn0gUmV0
dXJucyB0cnVlIGlmIGBvYmpgIGlzIGFuIGFycmF5IG9yIGFycmF5LWxpa2Ugb2JqZWN0IChOb2Rl
TGlzdCwgQXJndW1lbnRzLCAuLi4pCi0gKi8KLWZ1bmN0aW9uIGlzQXJyYXlMaWtlKG9iaikgewot
ICBpZiAoIW9iaiB8fCAodHlwZW9mIG9iai5sZW5ndGggIT09ICdudW1iZXInKSkgcmV0dXJuIGZh
bHNlOwotCi0gIC8vIFdlIGhhdmUgb24gb2JqZWN0IHdoaWNoIGhhcyBsZW5ndGggcHJvcGVydHku
IFNob3VsZCB3ZSB0cmVhdCBpdCBhcyBhcnJheT8KLSAgaWYgKHR5cGVvZiBvYmouaGFzT3duUHJv
cGVydHkgIT0gJ2Z1bmN0aW9uJyAmJgotICAgICAgdHlwZW9mIG9iai5jb25zdHJ1Y3RvciAhPSAn
ZnVuY3Rpb24nKSB7Ci0gICAgLy8gVGhpcyBpcyBoZXJlIGZvciBJRTg6IGl0IGlzIGEgYm9ndXMg
b2JqZWN0IHRyZWF0IGl0IGFzIGFycmF5OwotICAgIHJldHVybiB0cnVlOwotICB9IGVsc2UgIHsK
LSAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgSlFMaXRlIHx8ICAgICAgICAgICAgICAgICAgICAg
IC8vIEpRTGl0ZQotICAgICAgICAgICAoalF1ZXJ5ICYmIG9iaiBpbnN0YW5jZW9mIGpRdWVyeSkg
fHwgICAgICAgICAgLy8galF1ZXJ5Ci0gICAgICAgICAgIHRvU3RyaW5nLmNhbGwob2JqKSAhPT0g
J1tvYmplY3QgT2JqZWN0XScgfHwgICAvLyBzb21lIGJyb3dzZXIgbmF0aXZlIG9iamVjdAotICAg
ICAgICAgICB0eXBlb2Ygb2JqLmNhbGxlZSA9PT0gJ2Z1bmN0aW9uJzsgICAgICAgICAgICAgIC8v
IGFyZ3VtZW50cyAob24gSUU4IGxvb2tzIGxpa2UgcmVndWxhciBvYmopCi0gIH0KLX0KLQotCi0v
KioKLSAqIEBuZ2RvYyBmdW5jdGlvbgotICogQG5hbWUgYW5ndWxhci5mb3JFYWNoCi0gKiBAZnVu
Y3Rpb24KLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIEludm9rZXMgdGhlIGBpdGVyYXRvcmAgZnVu
Y3Rpb24gb25jZSBmb3IgZWFjaCBpdGVtIGluIGBvYmpgIGNvbGxlY3Rpb24sIHdoaWNoIGNhbiBi
ZSBlaXRoZXIgYW4KLSAqIG9iamVjdCBvciBhbiBhcnJheS4gVGhlIGBpdGVyYXRvcmAgZnVuY3Rp
b24gaXMgaW52b2tlZCB3aXRoIGBpdGVyYXRvcih2YWx1ZSwga2V5KWAsIHdoZXJlIGB2YWx1ZWAK
LSAqIGlzIHRoZSB2YWx1ZSBvZiBhbiBvYmplY3QgcHJvcGVydHkgb3IgYW4gYXJyYXkgZWxlbWVu
dCBhbmQgYGtleWAgaXMgdGhlIG9iamVjdCBwcm9wZXJ0eSBrZXkgb3IKLSAqIGFycmF5IGVsZW1l
bnQgaW5kZXguIFNwZWNpZnlpbmcgYSBgY29udGV4dGAgZm9yIHRoZSBmdW5jdGlvbiBpcyBvcHRp
b25hbC4KLSAqCi0gKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIHdhcyBwcmV2aW91c2x5IGtub3duIGFz
IGBhbmd1bGFyLmZvcmVhY2hgLgotICoKLSAgIDxwcmU+Ci0gICAgIHZhciB2YWx1ZXMgPSB7bmFt
ZTogJ21pc2tvJywgZ2VuZGVyOiAnbWFsZSd9OwotICAgICB2YXIgbG9nID0gW107Ci0gICAgIGFu
Z3VsYXIuZm9yRWFjaCh2YWx1ZXMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpewotICAgICAgIHRoaXMu
cHVzaChrZXkgKyAnOiAnICsgdmFsdWUpOwotICAgICB9LCBsb2cpOwotICAgICBleHBlY3QobG9n
KS50b0VxdWFsKFsnbmFtZTogbWlza28nLCAnZ2VuZGVyOm1hbGUnXSk7Ci0gICA8L3ByZT4KLSAq
Ci0gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqIE9iamVjdCB0byBpdGVyYXRlIG92ZXIuCi0g
KiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRvciBJdGVyYXRvciBmdW5jdGlvbi4KLSAqIEBwYXJh
bSB7T2JqZWN0PX0gY29udGV4dCBPYmplY3QgdG8gYmVjb21lIGNvbnRleHQgKGB0aGlzYCkgZm9y
IHRoZSBpdGVyYXRvciBmdW5jdGlvbi4KLSAqIEByZXR1cm5zIHtPYmplY3R8QXJyYXl9IFJlZmVy
ZW5jZSB0byBgb2JqYC4KLSAqLwotZnVuY3Rpb24gZm9yRWFjaChvYmosIGl0ZXJhdG9yLCBjb250
ZXh0KSB7Ci0gIHZhciBrZXk7Ci0gIGlmIChvYmopIHsKLSAgICBpZiAoaXNGdW5jdGlvbihvYmop
KXsKLSAgICAgIGZvciAoa2V5IGluIG9iaikgewotICAgICAgICBpZiAoa2V5ICE9ICdwcm90b3R5
cGUnICYmIGtleSAhPSAnbGVuZ3RoJyAmJiBrZXkgIT0gJ25hbWUnICYmIG9iai5oYXNPd25Qcm9w
ZXJ0eShrZXkpKSB7Ci0gICAgICAgICAgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpba2V5XSwg
a2V5KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0gZWxzZSBpZiAob2JqLmZvckVhY2ggJiYg
b2JqLmZvckVhY2ggIT09IGZvckVhY2gpIHsKLSAgICAgIG9iai5mb3JFYWNoKGl0ZXJhdG9yLCBj
b250ZXh0KTsKLSAgICB9IGVsc2UgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHsKLSAgICAgIGZvciAo
a2V5ID0gMDsga2V5IDwgb2JqLmxlbmd0aDsga2V5KyspCi0gICAgICAgIGl0ZXJhdG9yLmNhbGwo
Y29udGV4dCwgb2JqW2tleV0sIGtleSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZvciAoa2V5IGlu
IG9iaikgewotICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHsKLSAgICAgICAg
ICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtrZXldLCBrZXkpOwotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBvYmo7Ci19Ci0KLWZ1bmN0aW9uIHNvcnRlZEtleXMo
b2JqKSB7Ci0gIHZhciBrZXlzID0gW107Ci0gIGZvciAodmFyIGtleSBpbiBvYmopIHsKLSAgICBp
ZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHsKLSAgICAgIGtleXMucHVzaChrZXkpOwotICAg
IH0KLSAgfQotICByZXR1cm4ga2V5cy5zb3J0KCk7Ci19Ci0KLWZ1bmN0aW9uIGZvckVhY2hTb3J0
ZWQob2JqLCBpdGVyYXRvciwgY29udGV4dCkgewotICB2YXIga2V5cyA9IHNvcnRlZEtleXMob2Jq
KTsKLSAgZm9yICggdmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykgewotICAgIGl0ZXJh
dG9yLmNhbGwoY29udGV4dCwgb2JqW2tleXNbaV1dLCBrZXlzW2ldKTsKLSAgfQotICByZXR1cm4g
a2V5czsKLX0KLQotCi0vKioKLSAqIHdoZW4gdXNpbmcgZm9yRWFjaCB0aGUgcGFyYW1zIGFyZSB2
YWx1ZSwga2V5LCBidXQgaXQgaXMgb2Z0ZW4gdXNlZnVsIHRvIGhhdmUga2V5LCB2YWx1ZS4KLSAq
IEBwYXJhbSB7ZnVuY3Rpb24oc3RyaW5nLCAqKX0gaXRlcmF0b3JGbgotICogQHJldHVybnMge2Z1
bmN0aW9uKCosIHN0cmluZyl9Ci0gKi8KLWZ1bmN0aW9uIHJldmVyc2VQYXJhbXMoaXRlcmF0b3JG
bikgewotICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIGtleSkgeyBpdGVyYXRvckZuKGtleSwgdmFs
dWUpIH07Ci19Ci0KLS8qKgotICogQSBjb25zaXN0ZW50IHdheSBvZiBjcmVhdGluZyB1bmlxdWUg
SURzIGluIGFuZ3VsYXIuIFRoZSBJRCBpcyBhIHNlcXVlbmNlIG9mIGFscGhhIG51bWVyaWMKLSAq
IGNoYXJhY3RlcnMgc3VjaCBhcyAnMDEyQUJDJy4gVGhlIHJlYXNvbiB3aHkgd2UgYXJlIG5vdCB1
c2luZyBzaW1wbHkgYSBudW1iZXIgY291bnRlciBpcyB0aGF0Ci0gKiB0aGUgbnVtYmVyIHN0cmlu
ZyBnZXRzIGxvbmdlciBvdmVyIHRpbWUsIGFuZCBpdCBjYW4gYWxzbyBvdmVyZmxvdywgd2hlcmUg
YXMgdGhlIG5leHRJZAotICogd2lsbCBncm93IG11Y2ggc2xvd2VyLCBpdCBpcyBhIHN0cmluZywg
YW5kIGl0IHdpbGwgbmV2ZXIgb3ZlcmZsb3cuCi0gKgotICogQHJldHVybnMgYW4gdW5pcXVlIGFs
cGhhLW51bWVyaWMgc3RyaW5nCi0gKi8KLWZ1bmN0aW9uIG5leHRVaWQoKSB7Ci0gIHZhciBpbmRl
eCA9IHVpZC5sZW5ndGg7Ci0gIHZhciBkaWdpdDsKLQotICB3aGlsZShpbmRleCkgewotICAgIGlu
ZGV4LS07Ci0gICAgZGlnaXQgPSB1aWRbaW5kZXhdLmNoYXJDb2RlQXQoMCk7Ci0gICAgaWYgKGRp
Z2l0ID09IDU3IC8qJzknKi8pIHsKLSAgICAgIHVpZFtpbmRleF0gPSAnQSc7Ci0gICAgICByZXR1
cm4gdWlkLmpvaW4oJycpOwotICAgIH0KLSAgICBpZiAoZGlnaXQgPT0gOTAgIC8qJ1onKi8pIHsK
LSAgICAgIHVpZFtpbmRleF0gPSAnMCc7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHVpZFtpbmRleF0g
PSBTdHJpbmcuZnJvbUNoYXJDb2RlKGRpZ2l0ICsgMSk7Ci0gICAgICByZXR1cm4gdWlkLmpvaW4o
JycpOwotICAgIH0KLSAgfQotICB1aWQudW5zaGlmdCgnMCcpOwotICByZXR1cm4gdWlkLmpvaW4o
JycpOwotfQotCi0KLS8qKgotICogU2V0IG9yIGNsZWFyIHRoZSBoYXNoa2V5IGZvciBhbiBvYmpl
Y3QuCi0gKiBAcGFyYW0gb2JqIG9iamVjdCAKLSAqIEBwYXJhbSBoIHRoZSBoYXNoa2V5ICghdHJ1
dGh5IHRvIGRlbGV0ZSB0aGUgaGFzaGtleSkKLSAqLwotZnVuY3Rpb24gc2V0SGFzaEtleShvYmos
IGgpIHsKLSAgaWYgKGgpIHsKLSAgICBvYmouJCRoYXNoS2V5ID0gaDsKLSAgfQotICBlbHNlIHsK
LSAgICBkZWxldGUgb2JqLiQkaGFzaEtleTsKLSAgfQotfQotCi0vKioKLSAqIEBuZ2RvYyBmdW5j
dGlvbgotICogQG5hbWUgYW5ndWxhci5leHRlbmQKLSAqIEBmdW5jdGlvbgotICoKLSAqIEBkZXNj
cmlwdGlvbgotICogRXh0ZW5kcyB0aGUgZGVzdGluYXRpb24gb2JqZWN0IGBkc3RgIGJ5IGNvcHlp
bmcgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzIGZyb20gdGhlIGBzcmNgIG9iamVjdChzKQotICogdG8g
YGRzdGAuIFlvdSBjYW4gc3BlY2lmeSBtdWx0aXBsZSBgc3JjYCBvYmplY3RzLgotICoKLSAqIEBw
YXJhbSB7T2JqZWN0fSBkc3QgRGVzdGluYXRpb24gb2JqZWN0LgotICogQHBhcmFtIHsuLi5PYmpl
Y3R9IHNyYyBTb3VyY2Ugb2JqZWN0KHMpLgotICogQHJldHVybnMge09iamVjdH0gUmVmZXJlbmNl
IHRvIGBkc3RgLgotICovCi1mdW5jdGlvbiBleHRlbmQoZHN0KSB7Ci0gIHZhciBoID0gZHN0LiQk
aGFzaEtleTsKLSAgZm9yRWFjaChhcmd1bWVudHMsIGZ1bmN0aW9uKG9iail7Ci0gICAgaWYgKG9i
aiAhPT0gZHN0KSB7Ci0gICAgICBmb3JFYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGtleSl7Ci0g
ICAgICAgIGRzdFtrZXldID0gdmFsdWU7Ci0gICAgICB9KTsKLSAgICB9Ci0gIH0pOwotCi0gIHNl
dEhhc2hLZXkoZHN0LGgpOwotICByZXR1cm4gZHN0OwotfQotCi1mdW5jdGlvbiBpbnQoc3RyKSB7
Ci0gIHJldHVybiBwYXJzZUludChzdHIsIDEwKTsKLX0KLQotCi1mdW5jdGlvbiBpbmhlcml0KHBh
cmVudCwgZXh0cmEpIHsKLSAgcmV0dXJuIGV4dGVuZChuZXcgKGV4dGVuZChmdW5jdGlvbigpIHt9
LCB7cHJvdG90eXBlOnBhcmVudH0pKSgpLCBleHRyYSk7Ci19Ci0KLQotLyoqCi0gKiBAbmdkb2Mg
ZnVuY3Rpb24KLSAqIEBuYW1lIGFuZ3VsYXIubm9vcAotICogQGZ1bmN0aW9uCi0gKgotICogQGRl
c2NyaXB0aW9uCi0gKiBBIGZ1bmN0aW9uIHRoYXQgcGVyZm9ybXMgbm8gb3BlcmF0aW9ucy4gVGhp
cyBmdW5jdGlvbiBjYW4gYmUgdXNlZnVsIHdoZW4gd3JpdGluZyBjb2RlIGluIHRoZQotICogZnVu
Y3Rpb25hbCBzdHlsZS4KLSAgIDxwcmU+Ci0gICAgIGZ1bmN0aW9uIGZvbyhjYWxsYmFjaykgewot
ICAgICAgIHZhciByZXN1bHQgPSBjYWxjdWxhdGVSZXN1bHQoKTsKLSAgICAgICAoY2FsbGJhY2sg
fHwgYW5ndWxhci5ub29wKShyZXN1bHQpOwotICAgICB9Ci0gICA8L3ByZT4KLSAqLwotZnVuY3Rp
b24gbm9vcCgpIHt9Ci1ub29wLiRpbmplY3QgPSBbXTsKLQotCi0vKioKLSAqIEBuZ2RvYyBmdW5j
dGlvbgotICogQG5hbWUgYW5ndWxhci5pZGVudGl0eQotICogQGZ1bmN0aW9uCi0gKgotICogQGRl
c2NyaXB0aW9uCi0gKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBpdHMgZmlyc3QgYXJndW1lbnQu
IFRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIHdoZW4gd3JpdGluZyBjb2RlIGluIHRoZQotICogZnVu
Y3Rpb25hbCBzdHlsZS4KLSAqCi0gICA8cHJlPgotICAgICBmdW5jdGlvbiB0cmFuc2Zvcm1lcih0
cmFuc2Zvcm1hdGlvbkZuLCB2YWx1ZSkgewotICAgICAgIHJldHVybiAodHJhbnNmb3JtYXRpb25G
biB8fCBpZGVudGl0eSkodmFsdWUpOwotICAgICB9OwotICAgPC9wcmU+Ci0gKi8KLWZ1bmN0aW9u
IGlkZW50aXR5KCQpIHtyZXR1cm4gJDt9Ci1pZGVudGl0eS4kaW5qZWN0ID0gW107Ci0KLQotZnVu
Y3Rpb24gdmFsdWVGbih2YWx1ZSkge3JldHVybiBmdW5jdGlvbigpIHtyZXR1cm4gdmFsdWU7fTt9
Ci0KLS8qKgotICogQG5nZG9jIGZ1bmN0aW9uCi0gKiBAbmFtZSBhbmd1bGFyLmlzVW5kZWZpbmVk
Ci0gKiBAZnVuY3Rpb24KLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIERldGVybWluZXMgaWYgYSBy
ZWZlcmVuY2UgaXMgdW5kZWZpbmVkLgotICoKLSAqIEBwYXJhbSB7Kn0gdmFsdWUgUmVmZXJlbmNl
IHRvIGNoZWNrLgotICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYHZhbHVlYCBpcyB1bmRl
ZmluZWQuCi0gKi8KLWZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlKXtyZXR1cm4gdHlwZW9mIHZh
bHVlID09ICd1bmRlZmluZWQnO30KLQotCi0vKioKLSAqIEBuZ2RvYyBmdW5jdGlvbgotICogQG5h
bWUgYW5ndWxhci5pc0RlZmluZWQKLSAqIEBmdW5jdGlvbgotICoKLSAqIEBkZXNjcmlwdGlvbgot
ICogRGV0ZXJtaW5lcyBpZiBhIHJlZmVyZW5jZSBpcyBkZWZpbmVkLgotICoKLSAqIEBwYXJhbSB7
Kn0gdmFsdWUgUmVmZXJlbmNlIHRvIGNoZWNrLgotICogQHJldHVybnMge2Jvb2xlYW59IFRydWUg
aWYgYHZhbHVlYCBpcyBkZWZpbmVkLgotICovCi1mdW5jdGlvbiBpc0RlZmluZWQodmFsdWUpe3Jl
dHVybiB0eXBlb2YgdmFsdWUgIT0gJ3VuZGVmaW5lZCc7fQotCi0KLS8qKgotICogQG5nZG9jIGZ1
bmN0aW9uCi0gKiBAbmFtZSBhbmd1bGFyLmlzT2JqZWN0Ci0gKiBAZnVuY3Rpb24KLSAqCi0gKiBA
ZGVzY3JpcHRpb24KLSAqIERldGVybWluZXMgaWYgYSByZWZlcmVuY2UgaXMgYW4gYE9iamVjdGAu
IFVubGlrZSBgdHlwZW9mYCBpbiBKYXZhU2NyaXB0LCBgbnVsbGBzIGFyZSBub3QKLSAqIGNvbnNp
ZGVyZWQgdG8gYmUgb2JqZWN0cy4KLSAqCi0gKiBAcGFyYW0geyp9IHZhbHVlIFJlZmVyZW5jZSB0
byBjaGVjay4KLSAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGB2YWx1ZWAgaXMgYW4gYE9i
amVjdGAgYnV0IG5vdCBgbnVsbGAuCi0gKi8KLWZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKXtyZXR1
cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7fQotCi0KLS8qKgot
ICogQG5nZG9jIGZ1bmN0aW9uCi0gKiBAbmFtZSBhbmd1bGFyLmlzU3RyaW5nCi0gKiBAZnVuY3Rp
b24KLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIERldGVybWluZXMgaWYgYSByZWZlcmVuY2UgaXMg
YSBgU3RyaW5nYC4KLSAqCi0gKiBAcGFyYW0geyp9IHZhbHVlIFJlZmVyZW5jZSB0byBjaGVjay4K
LSAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGB2YWx1ZWAgaXMgYSBgU3RyaW5nYC4KLSAq
LwotZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpe3JldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N0cmlu
Zyc7fQotCi0KLS8qKgotICogQG5nZG9jIGZ1bmN0aW9uCi0gKiBAbmFtZSBhbmd1bGFyLmlzTnVt
YmVyCi0gKiBAZnVuY3Rpb24KLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIERldGVybWluZXMgaWYg
YSByZWZlcmVuY2UgaXMgYSBgTnVtYmVyYC4KLSAqCi0gKiBAcGFyYW0geyp9IHZhbHVlIFJlZmVy
ZW5jZSB0byBjaGVjay4KLSAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGB2YWx1ZWAgaXMg
YSBgTnVtYmVyYC4KLSAqLwotZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpe3JldHVybiB0eXBlb2Yg
dmFsdWUgPT0gJ251bWJlcic7fQotCi0KLS8qKgotICogQG5nZG9jIGZ1bmN0aW9uCi0gKiBAbmFt
ZSBhbmd1bGFyLmlzRGF0ZQotICogQGZ1bmN0aW9uCi0gKgotICogQGRlc2NyaXB0aW9uCi0gKiBE
ZXRlcm1pbmVzIGlmIGEgdmFsdWUgaXMgYSBkYXRlLgotICoKLSAqIEBwYXJhbSB7Kn0gdmFsdWUg
UmVmZXJlbmNlIHRvIGNoZWNrLgotICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYHZhbHVl
YCBpcyBhIGBEYXRlYC4KLSAqLwotZnVuY3Rpb24gaXNEYXRlKHZhbHVlKXsKLSAgcmV0dXJuIHRv
U3RyaW5nLmFwcGx5KHZhbHVlKSA9PSAnW29iamVjdCBEYXRlXSc7Ci19Ci0KLQotLyoqCi0gKiBA
bmdkb2MgZnVuY3Rpb24KLSAqIEBuYW1lIGFuZ3VsYXIuaXNBcnJheQotICogQGZ1bmN0aW9uCi0g
KgotICogQGRlc2NyaXB0aW9uCi0gKiBEZXRlcm1pbmVzIGlmIGEgcmVmZXJlbmNlIGlzIGFuIGBB
cnJheWAuCi0gKgotICogQHBhcmFtIHsqfSB2YWx1ZSBSZWZlcmVuY2UgdG8gY2hlY2suCi0gKiBA
cmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBgdmFsdWVgIGlzIGFuIGBBcnJheWAuCi0gKi8KLWZ1
bmN0aW9uIGlzQXJyYXkodmFsdWUpIHsKLSAgcmV0dXJuIHRvU3RyaW5nLmFwcGx5KHZhbHVlKSA9
PSAnW29iamVjdCBBcnJheV0nOwotfQotCi0KLS8qKgotICogQG5nZG9jIGZ1bmN0aW9uCi0gKiBA
bmFtZSBhbmd1bGFyLmlzRnVuY3Rpb24KLSAqIEBmdW5jdGlvbgotICoKLSAqIEBkZXNjcmlwdGlv
bgotICogRGV0ZXJtaW5lcyBpZiBhIHJlZmVyZW5jZSBpcyBhIGBGdW5jdGlvbmAuCi0gKgotICog
QHBhcmFtIHsqfSB2YWx1ZSBSZWZlcmVuY2UgdG8gY2hlY2suCi0gKiBAcmV0dXJucyB7Ym9vbGVh
bn0gVHJ1ZSBpZiBgdmFsdWVgIGlzIGEgYEZ1bmN0aW9uYC4KLSAqLwotZnVuY3Rpb24gaXNGdW5j
dGlvbih2YWx1ZSl7cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nO30KLQotCi0vKioK
LSAqIENoZWNrcyBpZiBgb2JqYCBpcyBhIHdpbmRvdyBvYmplY3QuCi0gKgotICogQHByaXZhdGUK
LSAqIEBwYXJhbSB7Kn0gb2JqIE9iamVjdCB0byBjaGVjawotICogQHJldHVybnMge2Jvb2xlYW59
IFRydWUgaWYgYG9iamAgaXMgYSB3aW5kb3cgb2JqLgotICovCi1mdW5jdGlvbiBpc1dpbmRvdyhv
YmopIHsKLSAgcmV0dXJuIG9iaiAmJiBvYmouZG9jdW1lbnQgJiYgb2JqLmxvY2F0aW9uICYmIG9i
ai5hbGVydCAmJiBvYmouc2V0SW50ZXJ2YWw7Ci19Ci0KLQotZnVuY3Rpb24gaXNTY29wZShvYmop
IHsKLSAgcmV0dXJuIG9iaiAmJiBvYmouJGV2YWxBc3luYyAmJiBvYmouJHdhdGNoOwotfQotCi0K
LWZ1bmN0aW9uIGlzRmlsZShvYmopIHsKLSAgcmV0dXJuIHRvU3RyaW5nLmFwcGx5KG9iaikgPT09
ICdbb2JqZWN0IEZpbGVdJzsKLX0KLQotCi1mdW5jdGlvbiBpc0Jvb2xlYW4odmFsdWUpIHsKLSAg
cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnYm9vbGVhbic7Ci19Ci0KLQotZnVuY3Rpb24gdHJpbSh2
YWx1ZSkgewotICByZXR1cm4gaXNTdHJpbmcodmFsdWUpID8gdmFsdWUucmVwbGFjZSgvXlxzKi8s
ICcnKS5yZXBsYWNlKC9ccyokLywgJycpIDogdmFsdWU7Ci19Ci0KLS8qKgotICogQG5nZG9jIGZ1
bmN0aW9uCi0gKiBAbmFtZSBhbmd1bGFyLmlzRWxlbWVudAotICogQGZ1bmN0aW9uCi0gKgotICog
QGRlc2NyaXB0aW9uCi0gKiBEZXRlcm1pbmVzIGlmIGEgcmVmZXJlbmNlIGlzIGEgRE9NIGVsZW1l
bnQgKG9yIHdyYXBwZWQgalF1ZXJ5IGVsZW1lbnQpLgotICoKLSAqIEBwYXJhbSB7Kn0gdmFsdWUg
UmVmZXJlbmNlIHRvIGNoZWNrLgotICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYHZhbHVl
YCBpcyBhIERPTSBlbGVtZW50IChvciB3cmFwcGVkIGpRdWVyeSBlbGVtZW50KS4KLSAqLwotZnVu
Y3Rpb24gaXNFbGVtZW50KG5vZGUpIHsKLSAgcmV0dXJuIG5vZGUgJiYKLSAgICAobm9kZS5ub2Rl
TmFtZSAgLy8gd2UgYXJlIGEgZGlyZWN0IGVsZW1lbnQKLSAgICB8fCAobm9kZS5iaW5kICYmIG5v
ZGUuZmluZCkpOyAgLy8gd2UgaGF2ZSBhIGJpbmQgYW5kIGZpbmQgbWV0aG9kIHBhcnQgb2YgalF1
ZXJ5IEFQSQotfQotCi0vKioKLSAqIEBwYXJhbSBzdHIgJ2tleTEsa2V5MiwuLi4nCi0gKiBAcmV0
dXJucyB7b2JqZWN0fSBpbiB0aGUgZm9ybSBvZiB7a2V5MTp0cnVlLCBrZXkyOnRydWUsIC4uLn0K
LSAqLwotZnVuY3Rpb24gbWFrZU1hcChzdHIpewotICB2YXIgb2JqID0ge30sIGl0ZW1zID0gc3Ry
LnNwbGl0KCIsIiksIGk7Ci0gIGZvciAoIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKysgKQot
ICAgIG9ialsgaXRlbXNbaV0gXSA9IHRydWU7Ci0gIHJldHVybiBvYmo7Ci19Ci0KLQotaWYgKG1z
aWUgPCA5KSB7Ci0gIG5vZGVOYW1lXyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICBlbGVtZW50
ID0gZWxlbWVudC5ub2RlTmFtZSA/IGVsZW1lbnQgOiBlbGVtZW50WzBdOwotICAgIHJldHVybiAo
ZWxlbWVudC5zY29wZU5hbWUgJiYgZWxlbWVudC5zY29wZU5hbWUgIT0gJ0hUTUwnKQotICAgICAg
PyB1cHBlcmNhc2UoZWxlbWVudC5zY29wZU5hbWUgKyAnOicgKyBlbGVtZW50Lm5vZGVOYW1lKSA6
IGVsZW1lbnQubm9kZU5hbWU7Ci0gIH07Ci19IGVsc2UgewotICBub2RlTmFtZV8gPSBmdW5jdGlv
bihlbGVtZW50KSB7Ci0gICAgcmV0dXJuIGVsZW1lbnQubm9kZU5hbWUgPyBlbGVtZW50Lm5vZGVO
YW1lIDogZWxlbWVudFswXS5ub2RlTmFtZTsKLSAgfTsKLX0KLQotCi1mdW5jdGlvbiBtYXAob2Jq
LCBpdGVyYXRvciwgY29udGV4dCkgewotICB2YXIgcmVzdWx0cyA9IFtdOwotICBmb3JFYWNoKG9i
aiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7Ci0gICAgcmVzdWx0cy5wdXNoKGl0ZXJh
dG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBsaXN0KSk7Ci0gIH0pOwotICByZXR1cm4g
cmVzdWx0czsKLX0KLQotCi0vKioKLSAqIEBkZXNjcmlwdGlvbgotICogRGV0ZXJtaW5lcyB0aGUg
bnVtYmVyIG9mIGVsZW1lbnRzIGluIGFuIGFycmF5LCB0aGUgbnVtYmVyIG9mIHByb3BlcnRpZXMg
YW4gb2JqZWN0IGhhcywgb3IKLSAqIHRoZSBsZW5ndGggb2YgYSBzdHJpbmcuCi0gKgotICogTm90
ZTogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGF1Z21lbnQgdGhlIE9iamVjdCB0eXBlIGluIEFu
Z3VsYXIgZXhwcmVzc2lvbnMuIFNlZQotICoge0BsaW5rIGFuZ3VsYXIuT2JqZWN0fSBmb3IgbW9y
ZSBpbmZvcm1hdGlvbiBhYm91dCBBbmd1bGFyIGFycmF5cy4KLSAqCi0gKiBAcGFyYW0ge09iamVj
dHxBcnJheXxzdHJpbmd9IG9iaiBPYmplY3QsIGFycmF5LCBvciBzdHJpbmcgdG8gaW5zcGVjdC4K
LSAqIEBwYXJhbSB7Ym9vbGVhbn0gW293blByb3BzT25seT1mYWxzZV0gQ291bnQgb25seSAib3du
IiBwcm9wZXJ0aWVzIGluIGFuIG9iamVjdAotICogQHJldHVybnMge251bWJlcn0gVGhlIHNpemUg
b2YgYG9iamAgb3IgYDBgIGlmIGBvYmpgIGlzIG5laXRoZXIgYW4gb2JqZWN0IG5vciBhbiBhcnJh
eS4KLSAqLwotZnVuY3Rpb24gc2l6ZShvYmosIG93blByb3BzT25seSkgewotICB2YXIgc2l6ZSA9
IDAsIGtleTsKLQotICBpZiAoaXNBcnJheShvYmopIHx8IGlzU3RyaW5nKG9iaikpIHsKLSAgICBy
ZXR1cm4gb2JqLmxlbmd0aDsKLSAgfSBlbHNlIGlmIChpc09iamVjdChvYmopKXsKLSAgICBmb3Ig
KGtleSBpbiBvYmopCi0gICAgICBpZiAoIW93blByb3BzT25seSB8fCBvYmouaGFzT3duUHJvcGVy
dHkoa2V5KSkKLSAgICAgICAgc2l6ZSsrOwotICB9Ci0KLSAgcmV0dXJuIHNpemU7Ci19Ci0KLQot
ZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIG9iaikgewotICByZXR1cm4gaW5kZXhPZihhcnJheSwg
b2JqKSAhPSAtMTsKLX0KLQotZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgb2JqKSB7Ci0gIGlmIChh
cnJheS5pbmRleE9mKSByZXR1cm4gYXJyYXkuaW5kZXhPZihvYmopOwotCi0gIGZvciAoIHZhciBp
ID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7Ci0gICAgaWYgKG9iaiA9PT0gYXJyYXlbaV0p
IHJldHVybiBpOwotICB9Ci0gIHJldHVybiAtMTsKLX0KLQotZnVuY3Rpb24gYXJyYXlSZW1vdmUo
YXJyYXksIHZhbHVlKSB7Ci0gIHZhciBpbmRleCA9IGluZGV4T2YoYXJyYXksIHZhbHVlKTsKLSAg
aWYgKGluZGV4ID49MCkKLSAgICBhcnJheS5zcGxpY2UoaW5kZXgsIDEpOwotICByZXR1cm4gdmFs
dWU7Ci19Ci0KLWZ1bmN0aW9uIGlzTGVhZk5vZGUgKG5vZGUpIHsKLSAgaWYgKG5vZGUpIHsKLSAg
ICBzd2l0Y2ggKG5vZGUubm9kZU5hbWUpIHsKLSAgICBjYXNlICJPUFRJT04iOgotICAgIGNhc2Ug
IlBSRSI6Ci0gICAgY2FzZSAiVElUTEUiOgotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9
Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotLyoqCi0gKiBAbmdkb2MgZnVuY3Rpb24KLSAqIEBuYW1l
IGFuZ3VsYXIuY29weQotICogQGZ1bmN0aW9uCi0gKgotICogQGRlc2NyaXB0aW9uCi0gKiBDcmVh
dGVzIGEgZGVlcCBjb3B5IG9mIGBzb3VyY2VgLCB3aGljaCBzaG91bGQgYmUgYW4gb2JqZWN0IG9y
IGFuIGFycmF5LgotICoKLSAqICogSWYgbm8gZGVzdGluYXRpb24gaXMgc3VwcGxpZWQsIGEgY29w
eSBvZiB0aGUgb2JqZWN0IG9yIGFycmF5IGlzIGNyZWF0ZWQuCi0gKiAqIElmIGEgZGVzdGluYXRp
b24gaXMgcHJvdmlkZWQsIGFsbCBvZiBpdHMgZWxlbWVudHMgKGZvciBhcnJheSkgb3IgcHJvcGVy
dGllcyAoZm9yIG9iamVjdHMpCi0gKiAgIGFyZSBkZWxldGVkIGFuZCB0aGVuIGFsbCBlbGVtZW50
cy9wcm9wZXJ0aWVzIGZyb20gdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGl0LgotICogKiBJZiAg
YHNvdXJjZWAgaXMgbm90IGFuIG9iamVjdCBvciBhcnJheSwgYHNvdXJjZWAgaXMgcmV0dXJuZWQu
Ci0gKgotICogTm90ZTogdGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGF1Z21lbnQgdGhlIE9iamVj
dCB0eXBlIGluIEFuZ3VsYXIgZXhwcmVzc2lvbnMuIFNlZQotICoge0BsaW5rIG5nLiRmaWx0ZXJ9
IGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEFuZ3VsYXIgYXJyYXlzLgotICoKLSAqIEBwYXJh
bSB7Kn0gc291cmNlIFRoZSBzb3VyY2UgdGhhdCB3aWxsIGJlIHVzZWQgdG8gbWFrZSBhIGNvcHku
Ci0gKiAgICAgICAgICAgICAgICAgICBDYW4gYmUgYW55IHR5cGUsIGluY2x1ZGluZyBwcmltaXRp
dmVzLCBgbnVsbGAsIGFuZCBgdW5kZWZpbmVkYC4KLSAqIEBwYXJhbSB7KE9iamVjdHxBcnJheSk9
fSBkZXN0aW5hdGlvbiBEZXN0aW5hdGlvbiBpbnRvIHdoaWNoIHRoZSBzb3VyY2UgaXMgY29waWVk
LiBJZgotICogICAgIHByb3ZpZGVkLCBtdXN0IGJlIG9mIHRoZSBzYW1lIHR5cGUgYXMgYHNvdXJj
ZWAuCi0gKiBAcmV0dXJucyB7Kn0gVGhlIGNvcHkgb3IgdXBkYXRlZCBgZGVzdGluYXRpb25gLCBp
ZiBgZGVzdGluYXRpb25gIHdhcyBzcGVjaWZpZWQuCi0gKi8KLWZ1bmN0aW9uIGNvcHkoc291cmNl
LCBkZXN0aW5hdGlvbil7Ci0gIGlmIChpc1dpbmRvdyhzb3VyY2UpIHx8IGlzU2NvcGUoc291cmNl
KSkgdGhyb3cgRXJyb3IoIkNhbid0IGNvcHkgV2luZG93IG9yIFNjb3BlIik7Ci0gIGlmICghZGVz
dGluYXRpb24pIHsKLSAgICBkZXN0aW5hdGlvbiA9IHNvdXJjZTsKLSAgICBpZiAoc291cmNlKSB7
Ci0gICAgICBpZiAoaXNBcnJheShzb3VyY2UpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uID0gY29w
eShzb3VyY2UsIFtdKTsKLSAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKHNvdXJjZSkpIHsKLSAgICAg
ICAgZGVzdGluYXRpb24gPSBuZXcgRGF0ZShzb3VyY2UuZ2V0VGltZSgpKTsKLSAgICAgIH0gZWxz
ZSBpZiAoaXNPYmplY3Qoc291cmNlKSkgewotICAgICAgICBkZXN0aW5hdGlvbiA9IGNvcHkoc291
cmNlLCB7fSk7Ci0gICAgICB9Ci0gICAgfQotICB9IGVsc2UgewotICAgIGlmIChzb3VyY2UgPT09
IGRlc3RpbmF0aW9uKSB0aHJvdyBFcnJvcigiQ2FuJ3QgY29weSBlcXVpdmFsZW50IG9iamVjdHMg
b3IgYXJyYXlzIik7Ci0gICAgaWYgKGlzQXJyYXkoc291cmNlKSkgewotICAgICAgZGVzdGluYXRp
b24ubGVuZ3RoID0gMDsKLSAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7
IGkrKykgewotICAgICAgICBkZXN0aW5hdGlvbi5wdXNoKGNvcHkoc291cmNlW2ldKSk7Ci0gICAg
ICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIHZhciBoID0gZGVzdGluYXRpb24uJCRoYXNoS2V5Owot
ICAgICAgZm9yRWFjaChkZXN0aW5hdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSl7Ci0gICAgICAg
IGRlbGV0ZSBkZXN0aW5hdGlvbltrZXldOwotICAgICAgfSk7Ci0gICAgICBmb3IgKCB2YXIga2V5
IGluIHNvdXJjZSkgewotICAgICAgICBkZXN0aW5hdGlvbltrZXldID0gY29weShzb3VyY2Vba2V5
XSk7Ci0gICAgICB9Ci0gICAgICBzZXRIYXNoS2V5KGRlc3RpbmF0aW9uLGgpOwotICAgIH0KLSAg
fQotICByZXR1cm4gZGVzdGluYXRpb247Ci19Ci0KLS8qKgotICogQ3JlYXRlIGEgc2hhbGxvdyBj
b3B5IG9mIGFuIG9iamVjdAotICovCi1mdW5jdGlvbiBzaGFsbG93Q29weShzcmMsIGRzdCkgewot
ICBkc3QgPSBkc3QgfHwge307Ci0KLSAgZm9yKHZhciBrZXkgaW4gc3JjKSB7Ci0gICAgaWYgKHNy
Yy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIGtleS5zdWJzdHIoMCwgMikgIT09ICckJCcpIHsKLSAg
ICAgIGRzdFtrZXldID0gc3JjW2tleV07Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIGRzdDsKLX0K
LQotCi0vKioKLSAqIEBuZ2RvYyBmdW5jdGlvbgotICogQG5hbWUgYW5ndWxhci5lcXVhbHMKLSAq
IEBmdW5jdGlvbgotICoKLSAqIEBkZXNjcmlwdGlvbgotICogRGV0ZXJtaW5lcyBpZiB0d28gb2Jq
ZWN0cyBvciB0d28gdmFsdWVzIGFyZSBlcXVpdmFsZW50LiBTdXBwb3J0cyB2YWx1ZSB0eXBlcywg
YXJyYXlzIGFuZAotICogb2JqZWN0cy4KLSAqCi0gKiBUd28gb2JqZWN0cyBvciB2YWx1ZXMgYXJl
IGNvbnNpZGVyZWQgZXF1aXZhbGVudCBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZyBp
cyB0cnVlOgotICoKLSAqICogQm90aCBvYmplY3RzIG9yIHZhbHVlcyBwYXNzIGA9PT1gIGNvbXBh
cmlzb24uCi0gKiAqIEJvdGggb2JqZWN0cyBvciB2YWx1ZXMgYXJlIG9mIHRoZSBzYW1lIHR5cGUg
YW5kIGFsbCBvZiB0aGVpciBwcm9wZXJ0aWVzIHBhc3MgYD09PWAgY29tcGFyaXNvbi4KLSAqICog
Qm90aCB2YWx1ZXMgYXJlIE5hTi4gKEluIEphdmFzU2NyaXB0LCBOYU4gPT0gTmFOID0+IGZhbHNl
LiBCdXQgd2UgY29uc2lkZXIgdHdvIE5hTiBhcyBlcXVhbCkKLSAqCi0gKiBEdXJpbmcgYSBwcm9w
ZXJ0eSBjb21wYXJpc2lvbiwgcHJvcGVydGllcyBvZiBgZnVuY3Rpb25gIHR5cGUgYW5kIHByb3Bl
cnRpZXMgd2l0aCBuYW1lcwotICogdGhhdCBiZWdpbiB3aXRoIGAkYCBhcmUgaWdub3JlZC4KLSAq
Ci0gKiBTY29wZSBhbmQgRE9NV2luZG93IG9iamVjdHMgYXJlIGJlaW5nIGNvbXBhcmVkIG9ubHkg
YnkgaWRlbnRpZnkgKGA9PT1gKS4KLSAqCi0gKiBAcGFyYW0geyp9IG8xIE9iamVjdCBvciB2YWx1
ZSB0byBjb21wYXJlLgotICogQHBhcmFtIHsqfSBvMiBPYmplY3Qgb3IgdmFsdWUgdG8gY29tcGFy
ZS4KLSAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGFyZ3VtZW50cyBhcmUgZXF1YWwuCi0g
Ki8KLWZ1bmN0aW9uIGVxdWFscyhvMSwgbzIpIHsKLSAgaWYgKG8xID09PSBvMikgcmV0dXJuIHRy
dWU7Ci0gIGlmIChvMSA9PT0gbnVsbCB8fCBvMiA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlOwotICBp
ZiAobzEgIT09IG8xICYmIG8yICE9PSBvMikgcmV0dXJuIHRydWU7IC8vIE5hTiA9PT0gTmFOCi0g
IHZhciB0MSA9IHR5cGVvZiBvMSwgdDIgPSB0eXBlb2YgbzIsIGxlbmd0aCwga2V5LCBrZXlTZXQ7
Ci0gIGlmICh0MSA9PSB0MikgewotICAgIGlmICh0MSA9PSAnb2JqZWN0JykgewotICAgICAgaWYg
KGlzQXJyYXkobzEpKSB7Ci0gICAgICAgIGlmICgobGVuZ3RoID0gbzEubGVuZ3RoKSA9PSBvMi5s
ZW5ndGgpIHsKLSAgICAgICAgICBmb3Ioa2V5PTA7IGtleTxsZW5ndGg7IGtleSsrKSB7Ci0gICAg
ICAgICAgICBpZiAoIWVxdWFscyhvMVtrZXldLCBvMltrZXldKSkgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfSBlbHNl
IGlmIChpc0RhdGUobzEpKSB7Ci0gICAgICAgIHJldHVybiBpc0RhdGUobzIpICYmIG8xLmdldFRp
bWUoKSA9PSBvMi5nZXRUaW1lKCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpZiAoaXNTY29w
ZShvMSkgfHwgaXNTY29wZShvMikgfHwgaXNXaW5kb3cobzEpIHx8IGlzV2luZG93KG8yKSkgcmV0
dXJuIGZhbHNlOwotICAgICAgICBrZXlTZXQgPSB7fTsKLSAgICAgICAgZm9yKGtleSBpbiBvMSkg
ewotICAgICAgICAgIGlmIChrZXkuY2hhckF0KDApID09PSAnJCcgfHwgaXNGdW5jdGlvbihvMVtr
ZXldKSkgY29udGludWU7Ci0gICAgICAgICAgaWYgKCFlcXVhbHMobzFba2V5XSwgbzJba2V5XSkp
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBrZXlTZXRba2V5XSA9IHRydWU7Ci0gICAgICAgIH0K
LSAgICAgICAgZm9yKGtleSBpbiBvMikgewotICAgICAgICAgIGlmICgha2V5U2V0W2tleV0gJiYK
LSAgICAgICAgICAgICAga2V5LmNoYXJBdCgwKSAhPT0gJyQnICYmCi0gICAgICAgICAgICAgIG8y
W2tleV0gIT09IHVuZGVmaW5lZCAmJgotICAgICAgICAgICAgICAhaXNGdW5jdGlvbihvMltrZXld
KSkgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
fQotICAgIH0KLSAgfQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLQotZnVuY3Rpb24gY29uY2F0KGFy
cmF5MSwgYXJyYXkyLCBpbmRleCkgewotICByZXR1cm4gYXJyYXkxLmNvbmNhdChzbGljZS5jYWxs
KGFycmF5MiwgaW5kZXgpKTsKLX0KLQotZnVuY3Rpb24gc2xpY2VBcmdzKGFyZ3MsIHN0YXJ0SW5k
ZXgpIHsKLSAgcmV0dXJuIHNsaWNlLmNhbGwoYXJncywgc3RhcnRJbmRleCB8fCAwKTsKLX0KLQot
Ci0vKioKLSAqIEBuZ2RvYyBmdW5jdGlvbgotICogQG5hbWUgYW5ndWxhci5iaW5kCi0gKiBAZnVu
Y3Rpb24KLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBj
YWxscyBmdW5jdGlvbiBgZm5gIGJvdW5kIHRvIGBzZWxmYCAoYHNlbGZgIGJlY29tZXMgdGhlIGB0
aGlzYCBmb3IKLSAqIGBmbmApLiBZb3UgY2FuIHN1cHBseSBvcHRpb25hbCBgYXJnc2AgdGhhdCBh
cmUgcHJlYm91bmQgdG8gdGhlIGZ1bmN0aW9uLiBUaGlzIGZlYXR1cmUgaXMgYWxzbwotICoga25v
d24gYXMgW2Z1bmN0aW9uIGN1cnJ5aW5nXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0N1
cnJ5aW5nKS4KLSAqCi0gKiBAcGFyYW0ge09iamVjdH0gc2VsZiBDb250ZXh0IHdoaWNoIGBmbmAg
c2hvdWxkIGJlIGV2YWx1YXRlZCBpbi4KLSAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gZm4gRnVuY3Rp
b24gdG8gYmUgYm91bmQuCi0gKiBAcGFyYW0gey4uLip9IGFyZ3MgT3B0aW9uYWwgYXJndW1lbnRz
IHRvIGJlIHByZWJvdW5kIHRvIHRoZSBgZm5gIGZ1bmN0aW9uIGNhbGwuCi0gKiBAcmV0dXJucyB7
ZnVuY3Rpb24oKX0gRnVuY3Rpb24gdGhhdCB3cmFwcyB0aGUgYGZuYCB3aXRoIGFsbCB0aGUgc3Bl
Y2lmaWVkIGJpbmRpbmdzLgotICovCi1mdW5jdGlvbiBiaW5kKHNlbGYsIGZuKSB7Ci0gIHZhciBj
dXJyeUFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IHNsaWNlQXJncyhhcmd1bWVudHMsIDIp
IDogW107Ci0gIGlmIChpc0Z1bmN0aW9uKGZuKSAmJiAhKGZuIGluc3RhbmNlb2YgUmVnRXhwKSkg
ewotICAgIHJldHVybiBjdXJyeUFyZ3MubGVuZ3RoCi0gICAgICA/IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoCi0gICAgICAgICAgICA/IGZuLmFwcGx5KHNl
bGYsIGN1cnJ5QXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMsIDApKSkKLSAgICAgICAg
ICAgIDogZm4uYXBwbHkoc2VsZiwgY3VycnlBcmdzKTsKLSAgICAgICAgfQotICAgICAgOiBmdW5j
dGlvbigpIHsKLSAgICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aAotICAgICAgICAgICAg
PyBmbi5hcHBseShzZWxmLCBhcmd1bWVudHMpCi0gICAgICAgICAgICA6IGZuLmNhbGwoc2VsZik7
Ci0gICAgICAgIH07Ci0gIH0gZWxzZSB7Ci0gICAgLy8gaW4gSUUsIG5hdGl2ZSBtZXRob2RzIGFy
ZSBub3QgZnVuY3Rpb25zIHNvIHRoZXkgY2Fubm90IGJlIGJvdW5kIChub3RlOiB0aGV5IGRvbid0
IG5lZWQgdG8gYmUpCi0gICAgcmV0dXJuIGZuOwotICB9Ci19Ci0KLQotZnVuY3Rpb24gdG9Kc29u
UmVwbGFjZXIoa2V5LCB2YWx1ZSkgewotICB2YXIgdmFsID0gdmFsdWU7Ci0KLSAgaWYgKC9eXCQr
Ly50ZXN0KGtleSkpIHsKLSAgICB2YWwgPSB1bmRlZmluZWQ7Ci0gIH0gZWxzZSBpZiAoaXNXaW5k
b3codmFsdWUpKSB7Ci0gICAgdmFsID0gJyRXSU5ET1cnOwotICB9IGVsc2UgaWYgKHZhbHVlICYm
ICBkb2N1bWVudCA9PT0gdmFsdWUpIHsKLSAgICB2YWwgPSAnJERPQ1VNRU5UJzsKLSAgfSBlbHNl
IGlmIChpc1Njb3BlKHZhbHVlKSkgewotICAgIHZhbCA9ICckU0NPUEUnOwotICB9Ci0KLSAgcmV0
dXJuIHZhbDsKLX0KLQotCi0vKioKLSAqIEBuZ2RvYyBmdW5jdGlvbgotICogQG5hbWUgYW5ndWxh
ci50b0pzb24KLSAqIEBmdW5jdGlvbgotICoKLSAqIEBkZXNjcmlwdGlvbgotICogU2VyaWFsaXpl
cyBpbnB1dCBpbnRvIGEgSlNPTi1mb3JtYXR0ZWQgc3RyaW5nLgotICoKLSAqIEBwYXJhbSB7T2Jq
ZWN0fEFycmF5fERhdGV8c3RyaW5nfG51bWJlcn0gb2JqIElucHV0IHRvIGJlIHNlcmlhbGl6ZWQg
aW50byBKU09OLgotICogQHBhcmFtIHtib29sZWFuPX0gcHJldHR5IElmIHNldCB0byB0cnVlLCB0
aGUgSlNPTiBvdXRwdXQgd2lsbCBjb250YWluIG5ld2xpbmVzIGFuZCB3aGl0ZXNwYWNlLgotICog
QHJldHVybnMge3N0cmluZ30gSnNvbmlmaWVkIHN0cmluZyByZXByZXNlbnRpbmcgYG9iamAuCi0g
Ki8KLWZ1bmN0aW9uIHRvSnNvbihvYmosIHByZXR0eSkgewotICByZXR1cm4gSlNPTi5zdHJpbmdp
Znkob2JqLCB0b0pzb25SZXBsYWNlciwgcHJldHR5ID8gJyAgJyA6IG51bGwpOwotfQotCi0KLS8q
KgotICogQG5nZG9jIGZ1bmN0aW9uCi0gKiBAbmFtZSBhbmd1bGFyLmZyb21Kc29uCi0gKiBAZnVu
Y3Rpb24KLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIERlc2VyaWFsaXplcyBhIEpTT04gc3RyaW5n
LgotICoKLSAqIEBwYXJhbSB7c3RyaW5nfSBqc29uIEpTT04gc3RyaW5nIHRvIGRlc2VyaWFsaXpl
LgotICogQHJldHVybnMge09iamVjdHxBcnJheXxEYXRlfHN0cmluZ3xudW1iZXJ9IERlc2VyaWFs
aXplZCB0aGluZ3kuCi0gKi8KLWZ1bmN0aW9uIGZyb21Kc29uKGpzb24pIHsKLSAgcmV0dXJuIGlz
U3RyaW5nKGpzb24pCi0gICAgICA/IEpTT04ucGFyc2UoanNvbikKLSAgICAgIDoganNvbjsKLX0K
LQotCi1mdW5jdGlvbiB0b0Jvb2xlYW4odmFsdWUpIHsKLSAgaWYgKHZhbHVlICYmIHZhbHVlLmxl
bmd0aCAhPT0gMCkgewotICAgIHZhciB2ID0gbG93ZXJjYXNlKCIiICsgdmFsdWUpOwotICAgIHZh
bHVlID0gISh2ID09ICdmJyB8fCB2ID09ICcwJyB8fCB2ID09ICdmYWxzZScgfHwgdiA9PSAnbm8n
IHx8IHYgPT0gJ24nIHx8IHYgPT0gJ1tdJyk7Ci0gIH0gZWxzZSB7Ci0gICAgdmFsdWUgPSBmYWxz
ZTsKLSAgfQotICByZXR1cm4gdmFsdWU7Ci19Ci0KLS8qKgotICogQHJldHVybnMge3N0cmluZ30g
UmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlbGVtZW50LgotICovCi1m
dW5jdGlvbiBzdGFydGluZ1RhZyhlbGVtZW50KSB7Ci0gIGVsZW1lbnQgPSBqcUxpdGUoZWxlbWVu
dCkuY2xvbmUoKTsKLSAgdHJ5IHsKLSAgICAvLyB0dXJucyBvdXQgSUUgZG9lcyBub3QgbGV0IHlv
dSBzZXQgLmh0bWwoKSBvbiBlbGVtZW50cyB3aGljaAotICAgIC8vIGFyZSBub3QgYWxsb3dlZCB0
byBoYXZlIGNoaWxkcmVuLiBTbyB3ZSBqdXN0IGlnbm9yZSBpdC4KLSAgICBlbGVtZW50Lmh0bWwo
JycpOwotICB9IGNhdGNoKGUpIHt9Ci0gIC8vIEFzIFBlciBET00gU3RhbmRhcmRzCi0gIHZhciBU
RVhUX05PREUgPSAzOwotICB2YXIgZWxlbUh0bWwgPSBqcUxpdGUoJzxkaXY+JykuYXBwZW5kKGVs
ZW1lbnQpLmh0bWwoKTsKLSAgdHJ5IHsKLSAgICByZXR1cm4gZWxlbWVudFswXS5ub2RlVHlwZSA9
PT0gVEVYVF9OT0RFID8gbG93ZXJjYXNlKGVsZW1IdG1sKSA6Ci0gICAgICAgIGVsZW1IdG1sLgot
ICAgICAgICAgIG1hdGNoKC9eKDxbXj5dKz4pLylbMV0uCi0gICAgICAgICAgcmVwbGFjZSgvXjwo
W1x3XC1dKykvLCBmdW5jdGlvbihtYXRjaCwgbm9kZU5hbWUpIHsgcmV0dXJuICc8JyArIGxvd2Vy
Y2FzZShub2RlTmFtZSk7IH0pOwotICB9IGNhdGNoKGUpIHsKLSAgICByZXR1cm4gbG93ZXJjYXNl
KGVsZW1IdG1sKTsKLSAgfQotCi19Ci0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLwotCi0vKioKLSAqIFBhcnNlcyBhbiBlc2NhcGVkIHVybCBxdWVy
eSBzdHJpbmcgaW50byBrZXktdmFsdWUgcGFpcnMuCi0gKiBAcmV0dXJucyBPYmplY3QuPChzdHJp
bmd8Ym9vbGVhbik+Ci0gKi8KLWZ1bmN0aW9uIHBhcnNlS2V5VmFsdWUoLyoqc3RyaW5nKi9rZXlW
YWx1ZSkgewotICB2YXIgb2JqID0ge30sIGtleV92YWx1ZSwga2V5OwotICBmb3JFYWNoKChrZXlW
YWx1ZSB8fCAiIikuc3BsaXQoJyYnKSwgZnVuY3Rpb24oa2V5VmFsdWUpewotICAgIGlmIChrZXlW
YWx1ZSkgewotICAgICAga2V5X3ZhbHVlID0ga2V5VmFsdWUuc3BsaXQoJz0nKTsKLSAgICAgIGtl
eSA9IGRlY29kZVVSSUNvbXBvbmVudChrZXlfdmFsdWVbMF0pOwotICAgICAgb2JqW2tleV0gPSBp
c0RlZmluZWQoa2V5X3ZhbHVlWzFdKSA/IGRlY29kZVVSSUNvbXBvbmVudChrZXlfdmFsdWVbMV0p
IDogdHJ1ZTsKLSAgICB9Ci0gIH0pOwotICByZXR1cm4gb2JqOwotfQotCi1mdW5jdGlvbiB0b0tl
eVZhbHVlKG9iaikgewotICB2YXIgcGFydHMgPSBbXTsKLSAgZm9yRWFjaChvYmosIGZ1bmN0aW9u
KHZhbHVlLCBrZXkpIHsKLSAgICBwYXJ0cy5wdXNoKGVuY29kZVVyaVF1ZXJ5KGtleSwgdHJ1ZSkg
KyAodmFsdWUgPT09IHRydWUgPyAnJyA6ICc9JyArIGVuY29kZVVyaVF1ZXJ5KHZhbHVlLCB0cnVl
KSkpOwotICB9KTsKLSAgcmV0dXJuIHBhcnRzLmxlbmd0aCA/IHBhcnRzLmpvaW4oJyYnKSA6ICcn
OwotfQotCi0KLS8qKgotICogV2UgbmVlZCBvdXIgY3VzdG9tIG1ldGhvZCBiZWNhdXNlIGVuY29k
ZVVSSUNvbXBvbmVudCBpcyB0b28gYWdyZXNzaXZlIGFuZCBkb2Vzbid0IGZvbGxvdwotICogaHR0
cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzk4Ni50eHQgd2l0aCByZWdhcmRzIHRvIHRoZSBjaGFy
YWN0ZXIgc2V0IChwY2hhcikgYWxsb3dlZCBpbiBwYXRoCi0gKiBzZWdtZW50czoKLSAqICAgIHNl
Z21lbnQgICAgICAgPSAqcGNoYXIKLSAqICAgIHBjaGFyICAgICAgICAgPSB1bnJlc2VydmVkIC8g
cGN0LWVuY29kZWQgLyBzdWItZGVsaW1zIC8gIjoiIC8gIkAiCi0gKiAgICBwY3QtZW5jb2RlZCAg
ID0gIiUiIEhFWERJRyBIRVhESUcKLSAqICAgIHVucmVzZXJ2ZWQgICAgPSBBTFBIQSAvIERJR0lU
IC8gIi0iIC8gIi4iIC8gIl8iIC8gIn4iCi0gKiAgICBzdWItZGVsaW1zICAgID0gIiEiIC8gIiQi
IC8gIiYiIC8gIiciIC8gIigiIC8gIikiCi0gKiAgICAgICAgICAgICAgICAgICAgIC8gIioiIC8g
IisiIC8gIiwiIC8gIjsiIC8gIj0iCi0gKi8KLWZ1bmN0aW9uIGVuY29kZVVyaVNlZ21lbnQodmFs
KSB7Ci0gIHJldHVybiBlbmNvZGVVcmlRdWVyeSh2YWwsIHRydWUpLgotICAgICAgICAgICAgIHJl
cGxhY2UoLyUyNi9naSwgJyYnKS4KLSAgICAgICAgICAgICByZXBsYWNlKC8lM0QvZ2ksICc9Jyku
Ci0gICAgICAgICAgICAgcmVwbGFjZSgvJTJCL2dpLCAnKycpOwotfQotCi0KLS8qKgotICogVGhp
cyBtZXRob2QgaXMgaW50ZW5kZWQgZm9yIGVuY29kaW5nICprZXkqIG9yICp2YWx1ZSogcGFydHMg
b2YgcXVlcnkgY29tcG9uZW50LiBXZSBuZWVkIGEgY3VzdG9tCi0gKiBtZXRob2QgYmVjdWFzZSBl
bmNvZGVVUklDb21wb25lbnQgaXMgdG9vIGFncmVzc2l2ZSBhbmQgZW5jb2RlcyBzdHVmZiB0aGF0
IGRvZXNuJ3QgaGF2ZSB0byBiZQotICogZW5jb2RlZCBwZXIgaHR0cDovL3Rvb2xzLmlldGYub3Jn
L2h0bWwvcmZjMzk4NjoKLSAqICAgIHF1ZXJ5ICAgICAgID0gKiggcGNoYXIgLyAiLyIgLyAiPyIg
KQotICogICAgcGNoYXIgICAgICAgICA9IHVucmVzZXJ2ZWQgLyBwY3QtZW5jb2RlZCAvIHN1Yi1k
ZWxpbXMgLyAiOiIgLyAiQCIKLSAqICAgIHVucmVzZXJ2ZWQgICAgPSBBTFBIQSAvIERJR0lUIC8g
Ii0iIC8gIi4iIC8gIl8iIC8gIn4iCi0gKiAgICBwY3QtZW5jb2RlZCAgID0gIiUiIEhFWERJRyBI
RVhESUcKLSAqICAgIHN1Yi1kZWxpbXMgICAgPSAiISIgLyAiJCIgLyAiJiIgLyAiJyIgLyAiKCIg
LyAiKSIKLSAqICAgICAgICAgICAgICAgICAgICAgLyAiKiIgLyAiKyIgLyAiLCIgLyAiOyIgLyAi
PSIKLSAqLwotZnVuY3Rpb24gZW5jb2RlVXJpUXVlcnkodmFsLCBwY3RFbmNvZGVTcGFjZXMpIHsK
LSAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLgotICAgICAgICAgICAgIHJlcGxhY2Uo
LyU0MC9naSwgJ0AnKS4KLSAgICAgICAgICAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuCi0gICAg
ICAgICAgICAgcmVwbGFjZSgvJTI0L2csICckJykuCi0gICAgICAgICAgICAgcmVwbGFjZSgvJTJD
L2dpLCAnLCcpLgotICAgICAgICAgICAgIHJlcGxhY2UoLyUyMC9nLCAocGN0RW5jb2RlU3BhY2Vz
ID8gJyUyMCcgOiAnKycpKTsKLX0KLQotCi0vKioKLSAqIEBuZ2RvYyBkaXJlY3RpdmUKLSAqIEBu
YW1lIG5nLmRpcmVjdGl2ZTpuZ0FwcAotICoKLSAqIEBlbGVtZW50IEFOWQotICogQHBhcmFtIHth
bmd1bGFyLk1vZHVsZX0gbmdBcHAgYW4gb3B0aW9uYWwgYXBwbGljYXRpb24KLSAqICAge0BsaW5r
IGFuZ3VsYXIubW9kdWxlIG1vZHVsZX0gbmFtZSB0byBsb2FkLgotICoKLSAqIEBkZXNjcmlwdGlv
bgotICoKLSAqIFVzZSB0aGlzIGRpcmVjdGl2ZSB0byBhdXRvLWJvb3RzdHJhcCBhbiBhcHBsaWNh
dGlvbi4gT25seQotICogb25lIGRpcmVjdGl2ZSBjYW4gYmUgdXNlZCBwZXIgSFRNTCBkb2N1bWVu
dC4gVGhlIGRpcmVjdGl2ZQotICogZGVzaWduYXRlcyB0aGUgcm9vdCBvZiB0aGUgYXBwbGljYXRp
b24gYW5kIGlzIHR5cGljYWxseSBwbGFjZWQKLSAqIGF0IHRoZSByb290IG9mIHRoZSBwYWdlLgot
ICoKLSAqIEluIHRoZSBleGFtcGxlIGJlbG93IGlmIHRoZSBgbmdBcHBgIGRpcmVjdGl2ZSB3b3Vs
ZCBub3QgYmUgcGxhY2VkCi0gKiBvbiB0aGUgYGh0bWxgIGVsZW1lbnQgdGhlbiB0aGUgZG9jdW1l
bnQgd291bGQgbm90IGJlIGNvbXBpbGVkCi0gKiBhbmQgdGhlIGB7eyAxKzIgfX1gIHdvdWxkIG5v
dCBiZSByZXNvbHZlZCB0byBgM2AuCi0gKgotICogYG5nQXBwYCBpcyB0aGUgZWFzaWVzdCB3YXkg
dG8gYm9vdHN0cmFwIGFuIGFwcGxpY2F0aW9uLgotICoKLSA8ZG9jOmV4YW1wbGU+Ci0gICA8ZG9j
OnNvdXJjZT4KLSAgICBJIGNhbiBhZGQ6IDEgKyAyID0gIHt7IDErMiB9fQotICAgPC9kb2M6c291
cmNlPgotIDwvZG9jOmV4YW1wbGU+Ci0gKgotICovCi1mdW5jdGlvbiBhbmd1bGFySW5pdChlbGVt
ZW50LCBib290c3RyYXApIHsKLSAgdmFyIGVsZW1lbnRzID0gW2VsZW1lbnRdLAotICAgICAgYXBw
RWxlbWVudCwKLSAgICAgIG1vZHVsZSwKLSAgICAgIG5hbWVzID0gWyduZzphcHAnLCAnbmctYXBw
JywgJ3gtbmctYXBwJywgJ2RhdGEtbmctYXBwJ10sCi0gICAgICBOR19BUFBfQ0xBU1NfUkVHRVhQ
ID0gL1xzbmdbOlwtXWFwcCg6XHMqKFtcd1xkX10rKTs/KT9ccy87Ci0KLSAgZnVuY3Rpb24gYXBw
ZW5kKGVsZW1lbnQpIHsKLSAgICBlbGVtZW50ICYmIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7Ci0g
IH0KLQotICBmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbihuYW1lKSB7Ci0gICAgbmFtZXNbbmFtZV0g
PSB0cnVlOwotICAgIGFwcGVuZChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChuYW1lKSk7Ci0gICAg
bmFtZSA9IG5hbWUucmVwbGFjZSgnOicsICdcXDonKTsKLSAgICBpZiAoZWxlbWVudC5xdWVyeVNl
bGVjdG9yQWxsKSB7Ci0gICAgICBmb3JFYWNoKGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLicg
KyBuYW1lKSwgYXBwZW5kKTsKLSAgICAgIGZvckVhY2goZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxs
KCcuJyArIG5hbWUgKyAnXFw6JyksIGFwcGVuZCk7Ci0gICAgICBmb3JFYWNoKGVsZW1lbnQucXVl
cnlTZWxlY3RvckFsbCgnWycgKyBuYW1lICsgJ10nKSwgYXBwZW5kKTsKLSAgICB9Ci0gIH0pOwot
Ci0gIGZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICBpZiAoIWFwcEVs
ZW1lbnQpIHsKLSAgICAgIHZhciBjbGFzc05hbWUgPSAnICcgKyBlbGVtZW50LmNsYXNzTmFtZSAr
ICcgJzsKLSAgICAgIHZhciBtYXRjaCA9IE5HX0FQUF9DTEFTU19SRUdFWFAuZXhlYyhjbGFzc05h
bWUpOwotICAgICAgaWYgKG1hdGNoKSB7Ci0gICAgICAgIGFwcEVsZW1lbnQgPSBlbGVtZW50Owot
ICAgICAgICBtb2R1bGUgPSAobWF0Y2hbMl0gfHwgJycpLnJlcGxhY2UoL1xzKy9nLCAnLCcpOwot
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgZm9yRWFjaChlbGVtZW50LmF0dHJpYnV0ZXMsIGZ1bmN0
aW9uKGF0dHIpIHsKLSAgICAgICAgICBpZiAoIWFwcEVsZW1lbnQgJiYgbmFtZXNbYXR0ci5uYW1l
XSkgewotICAgICAgICAgICAgYXBwRWxlbWVudCA9IGVsZW1lbnQ7Ci0gICAgICAgICAgICBtb2R1
bGUgPSBhdHRyLnZhbHVlOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICB9Ci0gICAg
fQotICB9KTsKLSAgaWYgKGFwcEVsZW1lbnQpIHsKLSAgICBib290c3RyYXAoYXBwRWxlbWVudCwg
bW9kdWxlID8gW21vZHVsZV0gOiBbXSk7Ci0gIH0KLX0KLQotLyoqCi0gKiBAbmdkb2MgZnVuY3Rp
b24KLSAqIEBuYW1lIGFuZ3VsYXIuYm9vdHN0cmFwCi0gKiBAZGVzY3JpcHRpb24KLSAqIFVzZSB0
aGlzIGZ1bmN0aW9uIHRvIG1hbnVhbGx5IHN0YXJ0IHVwIGFuZ3VsYXIgYXBwbGljYXRpb24uCi0g
KgotICogU2VlOiB7QGxpbmsgZ3VpZGUvYm9vdHN0cmFwIEJvb3RzdHJhcH0KLSAqCi0gKiBAcGFy
YW0ge0VsZW1lbnR9IGVsZW1lbnQgRE9NIGVsZW1lbnQgd2hpY2ggaXMgdGhlIHJvb3Qgb2YgYW5n
dWxhciBhcHBsaWNhdGlvbi4KLSAqIEBwYXJhbSB7QXJyYXk8U3RyaW5nfEZ1bmN0aW9uPj19IG1v
ZHVsZXMgYW4gYXJyYXkgb2YgbW9kdWxlIGRlY2xhcmF0aW9ucy4gU2VlOiB7QGxpbmsgYW5ndWxh
ci5tb2R1bGUgbW9kdWxlc30KLSAqIEByZXR1cm5zIHtBVVRPLiRpbmplY3Rvcn0gUmV0dXJucyB0
aGUgbmV3bHkgY3JlYXRlZCBpbmplY3RvciBmb3IgdGhpcyBhcHAuCi0gKi8KLWZ1bmN0aW9uIGJv
b3RzdHJhcChlbGVtZW50LCBtb2R1bGVzKSB7Ci0gIHZhciByZXN1bWVCb290c3RyYXBJbnRlcm5h
bCA9IGZ1bmN0aW9uKCkgewotICAgIGVsZW1lbnQgPSBqcUxpdGUoZWxlbWVudCk7Ci0gICAgbW9k
dWxlcyA9IG1vZHVsZXMgfHwgW107Ci0gICAgbW9kdWxlcy51bnNoaWZ0KFsnJHByb3ZpZGUnLCBm
dW5jdGlvbigkcHJvdmlkZSkgewotICAgICAgJHByb3ZpZGUudmFsdWUoJyRyb290RWxlbWVudCcs
IGVsZW1lbnQpOwotICAgIH1dKTsKLSAgICBtb2R1bGVzLnVuc2hpZnQoJ25nJyk7Ci0gICAgdmFy
IGluamVjdG9yID0gY3JlYXRlSW5qZWN0b3IobW9kdWxlcyk7Ci0gICAgaW5qZWN0b3IuaW52b2tl
KFsnJHJvb3RTY29wZScsICckcm9vdEVsZW1lbnQnLCAnJGNvbXBpbGUnLCAnJGluamVjdG9yJywK
LSAgICAgICBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgY29tcGlsZSwgaW5qZWN0b3IpIHsKLSAg
ICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uKCkgewotICAgICAgICAgIGVsZW1lbnQuZGF0YSgn
JGluamVjdG9yJywgaW5qZWN0b3IpOwotICAgICAgICAgIGNvbXBpbGUoZWxlbWVudCkoc2NvcGUp
OwotICAgICAgICB9KTsKLSAgICAgIH1dCi0gICAgKTsKLSAgICByZXR1cm4gaW5qZWN0b3I7Ci0g
IH07Ci0KLSAgdmFyIE5HX0RFRkVSX0JPT1RTVFJBUCA9IC9eTkdfREVGRVJfQk9PVFNUUkFQIS87
Ci0KLSAgaWYgKHdpbmRvdyAmJiAhTkdfREVGRVJfQk9PVFNUUkFQLnRlc3Qod2luZG93Lm5hbWUp
KSB7Ci0gICAgcmV0dXJuIHJlc3VtZUJvb3RzdHJhcEludGVybmFsKCk7Ci0gIH0KLQotICB3aW5k
b3cubmFtZSA9IHdpbmRvdy5uYW1lLnJlcGxhY2UoTkdfREVGRVJfQk9PVFNUUkFQLCAnJyk7Ci0g
IGFuZ3VsYXIucmVzdW1lQm9vdHN0cmFwID0gZnVuY3Rpb24oZXh0cmFNb2R1bGVzKSB7Ci0gICAg
Zm9yRWFjaChleHRyYU1vZHVsZXMsIGZ1bmN0aW9uKG1vZHVsZSkgewotICAgICAgbW9kdWxlcy5w
dXNoKG1vZHVsZSk7Ci0gICAgfSk7Ci0gICAgcmVzdW1lQm9vdHN0cmFwSW50ZXJuYWwoKTsKLSAg
fTsKLX0KLQotdmFyIFNOQUtFX0NBU0VfUkVHRVhQID0gL1tBLVpdL2c7Ci1mdW5jdGlvbiBzbmFr
ZV9jYXNlKG5hbWUsIHNlcGFyYXRvcil7Ci0gIHNlcGFyYXRvciA9IHNlcGFyYXRvciB8fCAnXyc7
Ci0gIHJldHVybiBuYW1lLnJlcGxhY2UoU05BS0VfQ0FTRV9SRUdFWFAsIGZ1bmN0aW9uKGxldHRl
ciwgcG9zKSB7Ci0gICAgcmV0dXJuIChwb3MgPyBzZXBhcmF0b3IgOiAnJykgKyBsZXR0ZXIudG9M
b3dlckNhc2UoKTsKLSAgfSk7Ci19Ci0KLWZ1bmN0aW9uIGJpbmRKUXVlcnkoKSB7Ci0gIC8vIGJp
bmQgdG8galF1ZXJ5IGlmIHByZXNlbnQ7Ci0gIGpRdWVyeSA9IHdpbmRvdy5qUXVlcnk7Ci0gIC8v
IHJlc2V0IHRvIGpRdWVyeSBvciBkZWZhdWx0IHRvIHVzLgotICBpZiAoalF1ZXJ5KSB7Ci0gICAg
anFMaXRlID0galF1ZXJ5OwotICAgIGV4dGVuZChqUXVlcnkuZm4sIHsKLSAgICAgIHNjb3BlOiBK
UUxpdGVQcm90b3R5cGUuc2NvcGUsCi0gICAgICBjb250cm9sbGVyOiBKUUxpdGVQcm90b3R5cGUu
Y29udHJvbGxlciwKLSAgICAgIGluamVjdG9yOiBKUUxpdGVQcm90b3R5cGUuaW5qZWN0b3IsCi0g
ICAgICBpbmhlcml0ZWREYXRhOiBKUUxpdGVQcm90b3R5cGUuaW5oZXJpdGVkRGF0YQotICAgIH0p
OwotICAgIEpRTGl0ZVBhdGNoSlF1ZXJ5UmVtb3ZlKCdyZW1vdmUnLCB0cnVlKTsKLSAgICBKUUxp
dGVQYXRjaEpRdWVyeVJlbW92ZSgnZW1wdHknKTsKLSAgICBKUUxpdGVQYXRjaEpRdWVyeVJlbW92
ZSgnaHRtbCcpOwotICB9IGVsc2UgewotICAgIGpxTGl0ZSA9IEpRTGl0ZTsKLSAgfQotICBhbmd1
bGFyLmVsZW1lbnQgPSBqcUxpdGU7Ci19Ci0KLS8qKgotICogdGhyb3cgZXJyb3IgaWYgdGhlIGFy
Z3VtZW50IGlzIGZhbHN5LgotICovCi1mdW5jdGlvbiBhc3NlcnRBcmcoYXJnLCBuYW1lLCByZWFz
b24pIHsKLSAgaWYgKCFhcmcpIHsKLSAgICB0aHJvdyBuZXcgRXJyb3IoIkFyZ3VtZW50ICciICsg
KG5hbWUgfHwgJz8nKSArICInIGlzICIgKyAocmVhc29uIHx8ICJyZXF1aXJlZCIpKTsKLSAgfQot
ICByZXR1cm4gYXJnOwotfQotCi1mdW5jdGlvbiBhc3NlcnRBcmdGbihhcmcsIG5hbWUsIGFjY2Vw
dEFycmF5QW5ub3RhdGlvbikgewotICBpZiAoYWNjZXB0QXJyYXlBbm5vdGF0aW9uICYmIGlzQXJy
YXkoYXJnKSkgewotICAgICAgYXJnID0gYXJnW2FyZy5sZW5ndGggLSAxXTsKLSAgfQotCi0gIGFz
c2VydEFyZyhpc0Z1bmN0aW9uKGFyZyksIG5hbWUsICdub3QgYSBmdW5jdGlvbiwgZ290ICcgKwot
ICAgICAgKGFyZyAmJiB0eXBlb2YgYXJnID09ICdvYmplY3QnID8gYXJnLmNvbnN0cnVjdG9yLm5h
bWUgfHwgJ09iamVjdCcgOiB0eXBlb2YgYXJnKSk7Ci0gIHJldHVybiBhcmc7Ci19Ci0KLS8qKgot
ICogQG5nZG9jIGludGVyZmFjZQotICogQG5hbWUgYW5ndWxhci5Nb2R1bGUKLSAqIEBkZXNjcmlw
dGlvbgotICoKLSAqIEludGVyZmFjZSBmb3IgY29uZmlndXJpbmcgYW5ndWxhciB7QGxpbmsgYW5n
dWxhci5tb2R1bGUgbW9kdWxlc30uCi0gKi8KLQotZnVuY3Rpb24gc2V0dXBNb2R1bGVMb2FkZXIo
d2luZG93KSB7Ci0KLSAgZnVuY3Rpb24gZW5zdXJlKG9iaiwgbmFtZSwgZmFjdG9yeSkgewotICAg
IHJldHVybiBvYmpbbmFtZV0gfHwgKG9ialtuYW1lXSA9IGZhY3RvcnkoKSk7Ci0gIH0KLQotICBy
ZXR1cm4gZW5zdXJlKGVuc3VyZSh3aW5kb3csICdhbmd1bGFyJywgT2JqZWN0KSwgJ21vZHVsZScs
IGZ1bmN0aW9uKCkgewotICAgIC8qKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsIGFuZ3VsYXIuTW9k
dWxlPn0gKi8KLSAgICB2YXIgbW9kdWxlcyA9IHt9OwotCi0gICAgLyoqCi0gICAgICogQG5nZG9j
IGZ1bmN0aW9uCi0gICAgICogQG5hbWUgYW5ndWxhci5tb2R1bGUKLSAgICAgKiBAZGVzY3JpcHRp
b24KLSAgICAgKgotICAgICAqIFRoZSBgYW5ndWxhci5tb2R1bGVgIGlzIGEgZ2xvYmFsIHBsYWNl
IGZvciBjcmVhdGluZyBhbmQgcmVnaXN0ZXJpbmcgQW5ndWxhciBtb2R1bGVzLiBBbGwKLSAgICAg
KiBtb2R1bGVzIChhbmd1bGFyIGNvcmUgb3IgM3JkIHBhcnR5KSB0aGF0IHNob3VsZCBiZSBhdmFp
bGFibGUgdG8gYW4gYXBwbGljYXRpb24gbXVzdCBiZQotICAgICAqIHJlZ2lzdGVyZWQgdXNpbmcg
dGhpcyBtZWNoYW5pc20uCi0gICAgICoKLSAgICAgKgotICAgICAqICMgTW9kdWxlCi0gICAgICoK
LSAgICAgKiBBIG1vZHVsZSBpcyBhIGNvbGxvY2F0aW9uIG9mIHNlcnZpY2VzLCBkaXJlY3RpdmVz
LCBmaWx0ZXJzLCBhbmQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4gTW9kdWxlCi0gICAgICog
aXMgdXNlZCB0byBjb25maWd1cmUgdGhlIHtAbGluayBBVVRPLiRpbmplY3RvciAkaW5qZWN0b3J9
LgotICAgICAqCi0gICAgICogPHByZT4KLSAgICAgKiAvLyBDcmVhdGUgYSBuZXcgbW9kdWxlCi0g
ICAgICogdmFyIG15TW9kdWxlID0gYW5ndWxhci5tb2R1bGUoJ215TW9kdWxlJywgW10pOwotICAg
ICAqCi0gICAgICogLy8gcmVnaXN0ZXIgYSBuZXcgc2VydmljZQotICAgICAqIG15TW9kdWxlLnZh
bHVlKCdhcHBOYW1lJywgJ015Q29vbEFwcCcpOwotICAgICAqCi0gICAgICogLy8gY29uZmlndXJl
IGV4aXN0aW5nIHNlcnZpY2VzIGluc2lkZSBpbml0aWFsaXphdGlvbiBibG9ja3MuCi0gICAgICog
bXlNb2R1bGUuY29uZmlnKGZ1bmN0aW9uKCRsb2NhdGlvblByb3ZpZGVyKSB7Ci0gICAgICogICAv
LyBDb25maWd1cmUgZXhpc3RpbmcgcHJvdmlkZXJzCi0gICAgICogICAkbG9jYXRpb25Qcm92aWRl
ci5oYXNoUHJlZml4KCchJyk7Ci0gICAgICogfSk7Ci0gICAgICogPC9wcmU+Ci0gICAgICoKLSAg
ICAgKiBUaGVuIHlvdSBjYW4gY3JlYXRlIGFuIGluamVjdG9yIGFuZCBsb2FkIHlvdXIgbW9kdWxl
cyBsaWtlIHRoaXM6Ci0gICAgICoKLSAgICAgKiA8cHJlPgotICAgICAqIHZhciBpbmplY3RvciA9
IGFuZ3VsYXIuaW5qZWN0b3IoWyduZycsICdNeU1vZHVsZSddKQotICAgICAqIDwvcHJlPgotICAg
ICAqCi0gICAgICogSG93ZXZlciBpdCdzIG1vcmUgbGlrZWx5IHRoYXQgeW91J2xsIGp1c3QgdXNl
Ci0gICAgICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0FwcCBuZ0FwcH0gb3IKLSAgICAgKiB7QGxp
bmsgYW5ndWxhci5ib290c3RyYXB9IHRvIHNpbXBsaWZ5IHRoaXMgcHJvY2VzcyBmb3IgeW91Lgot
ICAgICAqCi0gICAgICogQHBhcmFtIHshc3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBtb2R1
bGUgdG8gY3JlYXRlIG9yIHJldHJpZXZlLgotICAgICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz49
fSByZXF1aXJlcyBJZiBzcGVjaWZpZWQgdGhlbiBuZXcgbW9kdWxlIGlzIGJlaW5nIGNyZWF0ZWQu
IElmIHVuc3BlY2lmaWVkIHRoZW4gdGhlCi0gICAgICogICAgICAgIHRoZSBtb2R1bGUgaXMgYmVp
bmcgcmV0cmlldmVkIGZvciBmdXJ0aGVyIGNvbmZpZ3VyYXRpb24uCi0gICAgICogQHBhcmFtIHtG
dW5jdGlvbn0gY29uZmlnRm4gT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmdW5jdGlvbiBmb3IgdGhl
IG1vZHVsZS4gU2FtZSBhcwotICAgICAqICAgICAgICB7QGxpbmsgYW5ndWxhci5Nb2R1bGUjY29u
ZmlnIE1vZHVsZSNjb25maWcoKX0uCi0gICAgICogQHJldHVybnMge21vZHVsZX0gbmV3IG1vZHVs
ZSB3aXRoIHRoZSB7QGxpbmsgYW5ndWxhci5Nb2R1bGV9IGFwaS4KLSAgICAgKi8KLSAgICByZXR1
cm4gZnVuY3Rpb24gbW9kdWxlKG5hbWUsIHJlcXVpcmVzLCBjb25maWdGbikgewotICAgICAgaWYg
KHJlcXVpcmVzICYmIG1vZHVsZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHsKLSAgICAgICAgbW9k
dWxlc1tuYW1lXSA9IG51bGw7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZW5zdXJlKG1vZHVsZXMs
IG5hbWUsIGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAoIXJlcXVpcmVzKSB7Ci0gICAgICAgICAg
dGhyb3cgRXJyb3IoJ05vIG1vZHVsZTogJyArIG5hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
LyoqIEB0eXBlIHshQXJyYXkuPEFycmF5LjwqPj59ICovCi0gICAgICAgIHZhciBpbnZva2VRdWV1
ZSA9IFtdOwotCi0gICAgICAgIC8qKiBAdHlwZSB7IUFycmF5LjxGdW5jdGlvbj59ICovCi0gICAg
ICAgIHZhciBydW5CbG9ja3MgPSBbXTsKLQotICAgICAgICB2YXIgY29uZmlnID0gaW52b2tlTGF0
ZXIoJyRpbmplY3RvcicsICdpbnZva2UnKTsKLQotICAgICAgICAvKiogQHR5cGUge2FuZ3VsYXIu
TW9kdWxlfSAqLwotICAgICAgICB2YXIgbW9kdWxlSW5zdGFuY2UgPSB7Ci0gICAgICAgICAgLy8g
UHJpdmF0ZSBzdGF0ZQotICAgICAgICAgIF9pbnZva2VRdWV1ZTogaW52b2tlUXVldWUsCi0gICAg
ICAgICAgX3J1bkJsb2NrczogcnVuQmxvY2tzLAotCi0gICAgICAgICAgLyoqCi0gICAgICAgICAg
ICogQG5nZG9jIHByb3BlcnR5Ci0gICAgICAgICAgICogQG5hbWUgYW5ndWxhci5Nb2R1bGUjcmVx
dWlyZXMKLSAgICAgICAgICAgKiBAcHJvcGVydHlPZiBhbmd1bGFyLk1vZHVsZQotICAgICAgICAg
ICAqIEByZXR1cm5zIHtBcnJheS48c3RyaW5nPn0gTGlzdCBvZiBtb2R1bGUgbmFtZXMgd2hpY2gg
bXVzdCBiZSBsb2FkZWQgYmVmb3JlIHRoaXMgbW9kdWxlLgotICAgICAgICAgICAqIEBkZXNjcmlw
dGlvbgotICAgICAgICAgICAqIEhvbGRzIHRoZSBsaXN0IG9mIG1vZHVsZXMgd2hpY2ggdGhlIGlu
amVjdG9yIHdpbGwgbG9hZCBiZWZvcmUgdGhlIGN1cnJlbnQgbW9kdWxlIGlzIGxvYWRlZC4KLSAg
ICAgICAgICAgKi8KLSAgICAgICAgICByZXF1aXJlczogcmVxdWlyZXMsCi0KLSAgICAgICAgICAv
KioKLSAgICAgICAgICAgKiBAbmdkb2MgcHJvcGVydHkKLSAgICAgICAgICAgKiBAbmFtZSBhbmd1
bGFyLk1vZHVsZSNuYW1lCi0gICAgICAgICAgICogQHByb3BlcnR5T2YgYW5ndWxhci5Nb2R1bGUK
LSAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBOYW1lIG9mIHRoZSBtb2R1bGUuCi0gICAg
ICAgICAgICogQGRlc2NyaXB0aW9uCi0gICAgICAgICAgICovCi0gICAgICAgICAgbmFtZTogbmFt
ZSwKLQotCi0gICAgICAgICAgLyoqCi0gICAgICAgICAgICogQG5nZG9jIG1ldGhvZAotICAgICAg
ICAgICAqIEBuYW1lIGFuZ3VsYXIuTW9kdWxlI3Byb3ZpZGVyCi0gICAgICAgICAgICogQG1ldGhv
ZE9mIGFuZ3VsYXIuTW9kdWxlCi0gICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgc2Vy
dmljZSBuYW1lCi0gICAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvdmlkZXJUeXBlIENv
bnN0cnVjdGlvbiBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlIG9mIHRoZSBzZXJ2
aWNlLgotICAgICAgICAgICAqIEBkZXNjcmlwdGlvbgotICAgICAgICAgICAqIFNlZSB7QGxpbmsg
QVVUTy4kcHJvdmlkZSNwcm92aWRlciAkcHJvdmlkZS5wcm92aWRlcigpfS4KLSAgICAgICAgICAg
Ki8KLSAgICAgICAgICBwcm92aWRlcjogaW52b2tlTGF0ZXIoJyRwcm92aWRlJywgJ3Byb3ZpZGVy
JyksCi0KLSAgICAgICAgICAvKioKLSAgICAgICAgICAgKiBAbmdkb2MgbWV0aG9kCi0gICAgICAg
ICAgICogQG5hbWUgYW5ndWxhci5Nb2R1bGUjZmFjdG9yeQotICAgICAgICAgICAqIEBtZXRob2RP
ZiBhbmd1bGFyLk1vZHVsZQotICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIHNlcnZp
Y2UgbmFtZQotICAgICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3ZpZGVyRnVuY3Rpb24g
RnVuY3Rpb24gZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZSBvZiB0aGUgc2VydmljZS4KLSAgICAg
ICAgICAgKiBAZGVzY3JpcHRpb24KLSAgICAgICAgICAgKiBTZWUge0BsaW5rIEFVVE8uJHByb3Zp
ZGUjZmFjdG9yeSAkcHJvdmlkZS5mYWN0b3J5KCl9LgotICAgICAgICAgICAqLwotICAgICAgICAg
IGZhY3Rvcnk6IGludm9rZUxhdGVyKCckcHJvdmlkZScsICdmYWN0b3J5JyksCi0KLSAgICAgICAg
ICAvKioKLSAgICAgICAgICAgKiBAbmdkb2MgbWV0aG9kCi0gICAgICAgICAgICogQG5hbWUgYW5n
dWxhci5Nb2R1bGUjc2VydmljZQotICAgICAgICAgICAqIEBtZXRob2RPZiBhbmd1bGFyLk1vZHVs
ZQotICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIHNlcnZpY2UgbmFtZQotICAgICAg
ICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbnN0cnVjdG9yIEEgY29uc3RydWN0b3IgZnVuY3Rp
b24gdGhhdCB3aWxsIGJlIGluc3RhbnRpYXRlZC4KLSAgICAgICAgICAgKiBAZGVzY3JpcHRpb24K
LSAgICAgICAgICAgKiBTZWUge0BsaW5rIEFVVE8uJHByb3ZpZGUjc2VydmljZSAkcHJvdmlkZS5z
ZXJ2aWNlKCl9LgotICAgICAgICAgICAqLwotICAgICAgICAgIHNlcnZpY2U6IGludm9rZUxhdGVy
KCckcHJvdmlkZScsICdzZXJ2aWNlJyksCi0KLSAgICAgICAgICAvKioKLSAgICAgICAgICAgKiBA
bmdkb2MgbWV0aG9kCi0gICAgICAgICAgICogQG5hbWUgYW5ndWxhci5Nb2R1bGUjdmFsdWUKLSAg
ICAgICAgICAgKiBAbWV0aG9kT2YgYW5ndWxhci5Nb2R1bGUKLSAgICAgICAgICAgKiBAcGFyYW0g
e3N0cmluZ30gbmFtZSBzZXJ2aWNlIG5hbWUKLSAgICAgICAgICAgKiBAcGFyYW0geyp9IG9iamVj
dCBTZXJ2aWNlIGluc3RhbmNlIG9iamVjdC4KLSAgICAgICAgICAgKiBAZGVzY3JpcHRpb24KLSAg
ICAgICAgICAgKiBTZWUge0BsaW5rIEFVVE8uJHByb3ZpZGUjdmFsdWUgJHByb3ZpZGUudmFsdWUo
KX0uCi0gICAgICAgICAgICovCi0gICAgICAgICAgdmFsdWU6IGludm9rZUxhdGVyKCckcHJvdmlk
ZScsICd2YWx1ZScpLAotCi0gICAgICAgICAgLyoqCi0gICAgICAgICAgICogQG5nZG9jIG1ldGhv
ZAotICAgICAgICAgICAqIEBuYW1lIGFuZ3VsYXIuTW9kdWxlI2NvbnN0YW50Ci0gICAgICAgICAg
ICogQG1ldGhvZE9mIGFuZ3VsYXIuTW9kdWxlCi0gICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9
IG5hbWUgY29uc3RhbnQgbmFtZQotICAgICAgICAgICAqIEBwYXJhbSB7Kn0gb2JqZWN0IENvbnN0
YW50IHZhbHVlLgotICAgICAgICAgICAqIEBkZXNjcmlwdGlvbgotICAgICAgICAgICAqIEJlY2F1
c2UgdGhlIGNvbnN0YW50IGFyZSBmaXhlZCwgdGhleSBnZXQgYXBwbGllZCBiZWZvcmUgb3RoZXIg
cHJvdmlkZSBtZXRob2RzLgotICAgICAgICAgICAqIFNlZSB7QGxpbmsgQVVUTy4kcHJvdmlkZSNj
b25zdGFudCAkcHJvdmlkZS5jb25zdGFudCgpfS4KLSAgICAgICAgICAgKi8KLSAgICAgICAgICBj
b25zdGFudDogaW52b2tlTGF0ZXIoJyRwcm92aWRlJywgJ2NvbnN0YW50JywgJ3Vuc2hpZnQnKSwK
LQotICAgICAgICAgIC8qKgotICAgICAgICAgICAqIEBuZ2RvYyBtZXRob2QKLSAgICAgICAgICAg
KiBAbmFtZSBhbmd1bGFyLk1vZHVsZSNmaWx0ZXIKLSAgICAgICAgICAgKiBAbWV0aG9kT2YgYW5n
dWxhci5Nb2R1bGUKLSAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBGaWx0ZXIgbmFt
ZS4KLSAgICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmaWx0ZXJGYWN0b3J5IEZhY3Rvcnkg
ZnVuY3Rpb24gZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZSBvZiBmaWx0ZXIuCi0gICAgICAgICAg
ICogQGRlc2NyaXB0aW9uCi0gICAgICAgICAgICogU2VlIHtAbGluayBuZy4kZmlsdGVyUHJvdmlk
ZXIjcmVnaXN0ZXIgJGZpbHRlclByb3ZpZGVyLnJlZ2lzdGVyKCl9LgotICAgICAgICAgICAqLwot
ICAgICAgICAgIGZpbHRlcjogaW52b2tlTGF0ZXIoJyRmaWx0ZXJQcm92aWRlcicsICdyZWdpc3Rl
cicpLAotCi0gICAgICAgICAgLyoqCi0gICAgICAgICAgICogQG5nZG9jIG1ldGhvZAotICAgICAg
ICAgICAqIEBuYW1lIGFuZ3VsYXIuTW9kdWxlI2NvbnRyb2xsZXIKLSAgICAgICAgICAgKiBAbWV0
aG9kT2YgYW5ndWxhci5Nb2R1bGUKLSAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBD
b250cm9sbGVyIG5hbWUuCi0gICAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29uc3RydWN0
b3IgQ29udHJvbGxlciBjb25zdHJ1Y3RvciBmdW5jdGlvbi4KLSAgICAgICAgICAgKiBAZGVzY3Jp
cHRpb24KLSAgICAgICAgICAgKiBTZWUge0BsaW5rIG5nLiRjb250cm9sbGVyUHJvdmlkZXIjcmVn
aXN0ZXIgJGNvbnRyb2xsZXJQcm92aWRlci5yZWdpc3RlcigpfS4KLSAgICAgICAgICAgKi8KLSAg
ICAgICAgICBjb250cm9sbGVyOiBpbnZva2VMYXRlcignJGNvbnRyb2xsZXJQcm92aWRlcicsICdy
ZWdpc3RlcicpLAotCi0gICAgICAgICAgLyoqCi0gICAgICAgICAgICogQG5nZG9jIG1ldGhvZAot
ICAgICAgICAgICAqIEBuYW1lIGFuZ3VsYXIuTW9kdWxlI2RpcmVjdGl2ZQotICAgICAgICAgICAq
IEBtZXRob2RPZiBhbmd1bGFyLk1vZHVsZQotICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBu
YW1lIGRpcmVjdGl2ZSBuYW1lCi0gICAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZGlyZWN0
aXZlRmFjdG9yeSBGYWN0b3J5IGZ1bmN0aW9uIGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2Ugb2YK
LSAgICAgICAgICAgKiBkaXJlY3RpdmVzLgotICAgICAgICAgICAqIEBkZXNjcmlwdGlvbgotICAg
ICAgICAgICAqIFNlZSB7QGxpbmsgbmcuJGNvbXBpbGVQcm92aWRlciNkaXJlY3RpdmUgJGNvbXBp
bGVQcm92aWRlci5kaXJlY3RpdmUoKX0uCi0gICAgICAgICAgICovCi0gICAgICAgICAgZGlyZWN0
aXZlOiBpbnZva2VMYXRlcignJGNvbXBpbGVQcm92aWRlcicsICdkaXJlY3RpdmUnKSwKLQotICAg
ICAgICAgIC8qKgotICAgICAgICAgICAqIEBuZ2RvYyBtZXRob2QKLSAgICAgICAgICAgKiBAbmFt
ZSBhbmd1bGFyLk1vZHVsZSNjb25maWcKLSAgICAgICAgICAgKiBAbWV0aG9kT2YgYW5ndWxhci5N
b2R1bGUKLSAgICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb25maWdGbiBFeGVjdXRlIHRo
aXMgZnVuY3Rpb24gb24gbW9kdWxlIGxvYWQuIFVzZWZ1bCBmb3Igc2VydmljZQotICAgICAgICAg
ICAqICAgIGNvbmZpZ3VyYXRpb24uCi0gICAgICAgICAgICogQGRlc2NyaXB0aW9uCi0gICAgICAg
ICAgICogVXNlIHRoaXMgbWV0aG9kIHRvIHJlZ2lzdGVyIHdvcmsgd2hpY2ggbmVlZHMgdG8gYmUg
cGVyZm9ybWVkIG9uIG1vZHVsZSBsb2FkaW5nLgotICAgICAgICAgICAqLwotICAgICAgICAgIGNv
bmZpZzogY29uZmlnLAotCi0gICAgICAgICAgLyoqCi0gICAgICAgICAgICogQG5nZG9jIG1ldGhv
ZAotICAgICAgICAgICAqIEBuYW1lIGFuZ3VsYXIuTW9kdWxlI3J1bgotICAgICAgICAgICAqIEBt
ZXRob2RPZiBhbmd1bGFyLk1vZHVsZQotICAgICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGlu
aXRpYWxpemF0aW9uRm4gRXhlY3V0ZSB0aGlzIGZ1bmN0aW9uIGFmdGVyIGluamVjdG9yIGNyZWF0
aW9uLgotICAgICAgICAgICAqICAgIFVzZWZ1bCBmb3IgYXBwbGljYXRpb24gaW5pdGlhbGl6YXRp
b24uCi0gICAgICAgICAgICogQGRlc2NyaXB0aW9uCi0gICAgICAgICAgICogVXNlIHRoaXMgbWV0
aG9kIHRvIHJlZ2lzdGVyIHdvcmsgd2hpY2ggc2hvdWxkIGJlIHBlcmZvcm1lZCB3aGVuIHRoZSBp
bmplY3RvciBpcyBkb25lCi0gICAgICAgICAgICogbG9hZGluZyBhbGwgbW9kdWxlcy4KLSAgICAg
ICAgICAgKi8KLSAgICAgICAgICBydW46IGZ1bmN0aW9uKGJsb2NrKSB7Ci0gICAgICAgICAgICBy
dW5CbG9ja3MucHVzaChibG9jayk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAg
ICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaWYgKGNvbmZpZ0ZuKSB7Ci0gICAgICAgICAgY29u
ZmlnKGNvbmZpZ0ZuKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAgbW9kdWxlSW5zdGFu
Y2U7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm92aWRlcgot
ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kCi0gICAgICAgICAqIEBwYXJhbSB7U3Ry
aW5nPX0gaW5zZXJ0TWV0aG9kCi0gICAgICAgICAqIEByZXR1cm5zIHthbmd1bGFyLk1vZHVsZX0K
LSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGludm9rZUxhdGVyKHByb3ZpZGVyLCBtZXRo
b2QsIGluc2VydE1ldGhvZCkgewotICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgIGludm9rZVF1ZXVlW2luc2VydE1ldGhvZCB8fCAncHVzaCddKFtwcm92aWRlciwgbWV0
aG9kLCBhcmd1bWVudHNdKTsKLSAgICAgICAgICAgIHJldHVybiBtb2R1bGVJbnN0YW5jZTsKLSAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIH07Ci0gIH0pOwotCi19Ci0KLS8q
KgotICogQG5nZG9jIHByb3BlcnR5Ci0gKiBAbmFtZSBhbmd1bGFyLnZlcnNpb24KLSAqIEBkZXNj
cmlwdGlvbgotICogQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhl
IGN1cnJlbnQgQW5ndWxhckpTIHZlcnNpb24uIFRoaXMgb2JqZWN0IGhhcyB0aGUKLSAqIGZvbGxv
d2luZyBwcm9wZXJ0aWVzOgotICoKLSAqIC0gYGZ1bGxgIOKAkyBge3N0cmluZ31gIOKAkyBGdWxs
IHZlcnNpb24gc3RyaW5nLCBzdWNoIGFzICIwLjkuMTgiLgotICogLSBgbWFqb3JgIOKAkyBge251
bWJlcn1gIOKAkyBNYWpvciB2ZXJzaW9uIG51bWJlciwgc3VjaCBhcyAiMCIuCi0gKiAtIGBtaW5v
cmAg4oCTIGB7bnVtYmVyfWAg4oCTIE1pbm9yIHZlcnNpb24gbnVtYmVyLCBzdWNoIGFzICI5Ii4K
LSAqIC0gYGRvdGAg4oCTIGB7bnVtYmVyfWAg4oCTIERvdCB2ZXJzaW9uIG51bWJlciwgc3VjaCBh
cyAiMTgiLgotICogLSBgY29kZU5hbWVgIOKAkyBge3N0cmluZ31gIOKAkyBDb2RlIG5hbWUgb2Yg
dGhlIHJlbGVhc2UsIHN1Y2ggYXMgImppZ2dsaW5nLWFybWZhdCIuCi0gKi8KLXZhciB2ZXJzaW9u
ID0gewotICBmdWxsOiAnMS4wLjcnLCAgICAvLyBhbGwgb2YgdGhlc2UgcGxhY2Vob2xkZXIgc3Ry
aW5ncyB3aWxsIGJlIHJlcGxhY2VkIGJ5IGdydW50J3MKLSAgbWFqb3I6IDEsICAgIC8vIHBhY2th
Z2UgdGFzawotICBtaW5vcjogMCwKLSAgZG90OiA3LAotICBjb2RlTmFtZTogJ21vbm9jaHJvbWF0
aWMtcmFpbmJvdycKLX07Ci0KLQotZnVuY3Rpb24gcHVibGlzaEV4dGVybmFsQVBJKGFuZ3VsYXIp
ewotICBleHRlbmQoYW5ndWxhciwgewotICAgICdib290c3RyYXAnOiBib290c3RyYXAsCi0gICAg
J2NvcHknOiBjb3B5LAotICAgICdleHRlbmQnOiBleHRlbmQsCi0gICAgJ2VxdWFscyc6IGVxdWFs
cywKLSAgICAnZWxlbWVudCc6IGpxTGl0ZSwKLSAgICAnZm9yRWFjaCc6IGZvckVhY2gsCi0gICAg
J2luamVjdG9yJzogY3JlYXRlSW5qZWN0b3IsCi0gICAgJ25vb3AnOm5vb3AsCi0gICAgJ2JpbmQn
OmJpbmQsCi0gICAgJ3RvSnNvbic6IHRvSnNvbiwKLSAgICAnZnJvbUpzb24nOiBmcm9tSnNvbiwK
LSAgICAnaWRlbnRpdHknOmlkZW50aXR5LAotICAgICdpc1VuZGVmaW5lZCc6IGlzVW5kZWZpbmVk
LAotICAgICdpc0RlZmluZWQnOiBpc0RlZmluZWQsCi0gICAgJ2lzU3RyaW5nJzogaXNTdHJpbmcs
Ci0gICAgJ2lzRnVuY3Rpb24nOiBpc0Z1bmN0aW9uLAotICAgICdpc09iamVjdCc6IGlzT2JqZWN0
LAotICAgICdpc051bWJlcic6IGlzTnVtYmVyLAotICAgICdpc0VsZW1lbnQnOiBpc0VsZW1lbnQs
Ci0gICAgJ2lzQXJyYXknOiBpc0FycmF5LAotICAgICd2ZXJzaW9uJzogdmVyc2lvbiwKLSAgICAn
aXNEYXRlJzogaXNEYXRlLAotICAgICdsb3dlcmNhc2UnOiBsb3dlcmNhc2UsCi0gICAgJ3VwcGVy
Y2FzZSc6IHVwcGVyY2FzZSwKLSAgICAnY2FsbGJhY2tzJzoge2NvdW50ZXI6IDB9Ci0gIH0pOwot
Ci0gIGFuZ3VsYXJNb2R1bGUgPSBzZXR1cE1vZHVsZUxvYWRlcih3aW5kb3cpOwotICB0cnkgewot
ICAgIGFuZ3VsYXJNb2R1bGUoJ25nTG9jYWxlJyk7Ci0gIH0gY2F0Y2ggKGUpIHsKLSAgICBhbmd1
bGFyTW9kdWxlKCduZ0xvY2FsZScsIFtdKS5wcm92aWRlcignJGxvY2FsZScsICRMb2NhbGVQcm92
aWRlcik7Ci0gIH0KLQotICBhbmd1bGFyTW9kdWxlKCduZycsIFsnbmdMb2NhbGUnXSwgWyckcHJv
dmlkZScsCi0gICAgZnVuY3Rpb24gbmdNb2R1bGUoJHByb3ZpZGUpIHsKLSAgICAgICRwcm92aWRl
LnByb3ZpZGVyKCckY29tcGlsZScsICRDb21waWxlUHJvdmlkZXIpLgotICAgICAgICBkaXJlY3Rp
dmUoewotICAgICAgICAgICAgYTogaHRtbEFuY2hvckRpcmVjdGl2ZSwKLSAgICAgICAgICAgIGlu
cHV0OiBpbnB1dERpcmVjdGl2ZSwKLSAgICAgICAgICAgIHRleHRhcmVhOiBpbnB1dERpcmVjdGl2
ZSwKLSAgICAgICAgICAgIGZvcm06IGZvcm1EaXJlY3RpdmUsCi0gICAgICAgICAgICBzY3JpcHQ6
IHNjcmlwdERpcmVjdGl2ZSwKLSAgICAgICAgICAgIHNlbGVjdDogc2VsZWN0RGlyZWN0aXZlLAot
ICAgICAgICAgICAgc3R5bGU6IHN0eWxlRGlyZWN0aXZlLAotICAgICAgICAgICAgb3B0aW9uOiBv
cHRpb25EaXJlY3RpdmUsCi0gICAgICAgICAgICBuZ0JpbmQ6IG5nQmluZERpcmVjdGl2ZSwKLSAg
ICAgICAgICAgIG5nQmluZEh0bWxVbnNhZmU6IG5nQmluZEh0bWxVbnNhZmVEaXJlY3RpdmUsCi0g
ICAgICAgICAgICBuZ0JpbmRUZW1wbGF0ZTogbmdCaW5kVGVtcGxhdGVEaXJlY3RpdmUsCi0gICAg
ICAgICAgICBuZ0NsYXNzOiBuZ0NsYXNzRGlyZWN0aXZlLAotICAgICAgICAgICAgbmdDbGFzc0V2
ZW46IG5nQ2xhc3NFdmVuRGlyZWN0aXZlLAotICAgICAgICAgICAgbmdDbGFzc09kZDogbmdDbGFz
c09kZERpcmVjdGl2ZSwKLSAgICAgICAgICAgIG5nQ3NwOiBuZ0NzcERpcmVjdGl2ZSwKLSAgICAg
ICAgICAgIG5nQ2xvYWs6IG5nQ2xvYWtEaXJlY3RpdmUsCi0gICAgICAgICAgICBuZ0NvbnRyb2xs
ZXI6IG5nQ29udHJvbGxlckRpcmVjdGl2ZSwKLSAgICAgICAgICAgIG5nRm9ybTogbmdGb3JtRGly
ZWN0aXZlLAotICAgICAgICAgICAgbmdIaWRlOiBuZ0hpZGVEaXJlY3RpdmUsCi0gICAgICAgICAg
ICBuZ0luY2x1ZGU6IG5nSW5jbHVkZURpcmVjdGl2ZSwKLSAgICAgICAgICAgIG5nSW5pdDogbmdJ
bml0RGlyZWN0aXZlLAotICAgICAgICAgICAgbmdOb25CaW5kYWJsZTogbmdOb25CaW5kYWJsZURp
cmVjdGl2ZSwKLSAgICAgICAgICAgIG5nUGx1cmFsaXplOiBuZ1BsdXJhbGl6ZURpcmVjdGl2ZSwK
LSAgICAgICAgICAgIG5nUmVwZWF0OiBuZ1JlcGVhdERpcmVjdGl2ZSwKLSAgICAgICAgICAgIG5n
U2hvdzogbmdTaG93RGlyZWN0aXZlLAotICAgICAgICAgICAgbmdTdWJtaXQ6IG5nU3VibWl0RGly
ZWN0aXZlLAotICAgICAgICAgICAgbmdTdHlsZTogbmdTdHlsZURpcmVjdGl2ZSwKLSAgICAgICAg
ICAgIG5nU3dpdGNoOiBuZ1N3aXRjaERpcmVjdGl2ZSwKLSAgICAgICAgICAgIG5nU3dpdGNoV2hl
bjogbmdTd2l0Y2hXaGVuRGlyZWN0aXZlLAotICAgICAgICAgICAgbmdTd2l0Y2hEZWZhdWx0OiBu
Z1N3aXRjaERlZmF1bHREaXJlY3RpdmUsCi0gICAgICAgICAgICBuZ09wdGlvbnM6IG5nT3B0aW9u
c0RpcmVjdGl2ZSwKLSAgICAgICAgICAgIG5nVmlldzogbmdWaWV3RGlyZWN0aXZlLAotICAgICAg
ICAgICAgbmdUcmFuc2NsdWRlOiBuZ1RyYW5zY2x1ZGVEaXJlY3RpdmUsCi0gICAgICAgICAgICBu
Z01vZGVsOiBuZ01vZGVsRGlyZWN0aXZlLAotICAgICAgICAgICAgbmdMaXN0OiBuZ0xpc3REaXJl
Y3RpdmUsCi0gICAgICAgICAgICBuZ0NoYW5nZTogbmdDaGFuZ2VEaXJlY3RpdmUsCi0gICAgICAg
ICAgICByZXF1aXJlZDogcmVxdWlyZWREaXJlY3RpdmUsCi0gICAgICAgICAgICBuZ1JlcXVpcmVk
OiByZXF1aXJlZERpcmVjdGl2ZSwKLSAgICAgICAgICAgIG5nVmFsdWU6IG5nVmFsdWVEaXJlY3Rp
dmUKLSAgICAgICAgfSkuCi0gICAgICAgIGRpcmVjdGl2ZShuZ0F0dHJpYnV0ZUFsaWFzRGlyZWN0
aXZlcykuCi0gICAgICAgIGRpcmVjdGl2ZShuZ0V2ZW50RGlyZWN0aXZlcyk7Ci0gICAgICAkcHJv
dmlkZS5wcm92aWRlcih7Ci0gICAgICAgICRhbmNob3JTY3JvbGw6ICRBbmNob3JTY3JvbGxQcm92
aWRlciwKLSAgICAgICAgJGJyb3dzZXI6ICRCcm93c2VyUHJvdmlkZXIsCi0gICAgICAgICRjYWNo
ZUZhY3Rvcnk6ICRDYWNoZUZhY3RvcnlQcm92aWRlciwKLSAgICAgICAgJGNvbnRyb2xsZXI6ICRD
b250cm9sbGVyUHJvdmlkZXIsCi0gICAgICAgICRkb2N1bWVudDogJERvY3VtZW50UHJvdmlkZXIs
Ci0gICAgICAgICRleGNlcHRpb25IYW5kbGVyOiAkRXhjZXB0aW9uSGFuZGxlclByb3ZpZGVyLAot
ICAgICAgICAkZmlsdGVyOiAkRmlsdGVyUHJvdmlkZXIsCi0gICAgICAgICRpbnRlcnBvbGF0ZTog
JEludGVycG9sYXRlUHJvdmlkZXIsCi0gICAgICAgICRodHRwOiAkSHR0cFByb3ZpZGVyLAotICAg
ICAgICAkaHR0cEJhY2tlbmQ6ICRIdHRwQmFja2VuZFByb3ZpZGVyLAotICAgICAgICAkbG9jYXRp
b246ICRMb2NhdGlvblByb3ZpZGVyLAotICAgICAgICAkbG9nOiAkTG9nUHJvdmlkZXIsCi0gICAg
ICAgICRwYXJzZTogJFBhcnNlUHJvdmlkZXIsCi0gICAgICAgICRyb3V0ZTogJFJvdXRlUHJvdmlk
ZXIsCi0gICAgICAgICRyb3V0ZVBhcmFtczogJFJvdXRlUGFyYW1zUHJvdmlkZXIsCi0gICAgICAg
ICRyb290U2NvcGU6ICRSb290U2NvcGVQcm92aWRlciwKLSAgICAgICAgJHE6ICRRUHJvdmlkZXIs
Ci0gICAgICAgICRzbmlmZmVyOiAkU25pZmZlclByb3ZpZGVyLAotICAgICAgICAkdGVtcGxhdGVD
YWNoZTogJFRlbXBsYXRlQ2FjaGVQcm92aWRlciwKLSAgICAgICAgJHRpbWVvdXQ6ICRUaW1lb3V0
UHJvdmlkZXIsCi0gICAgICAgICR3aW5kb3c6ICRXaW5kb3dQcm92aWRlcgotICAgICAgfSk7Ci0g
ICAgfQotICBdKTsKLX0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy9K
UUxpdGUKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotLyoqCi0gKiBAbmdk
b2MgZnVuY3Rpb24KLSAqIEBuYW1lIGFuZ3VsYXIuZWxlbWVudAotICogQGZ1bmN0aW9uCi0gKgot
ICogQGRlc2NyaXB0aW9uCi0gKiBXcmFwcyBhIHJhdyBET00gZWxlbWVudCBvciBIVE1MIHN0cmlu
ZyBhcyBhIFtqUXVlcnldKGh0dHA6Ly9qcXVlcnkuY29tKSBlbGVtZW50LgotICogYGFuZ3VsYXIu
ZWxlbWVudGAgY2FuIGJlIGVpdGhlciBhbiBhbGlhcyBmb3IgW2pRdWVyeV0oaHR0cDovL2FwaS5q
cXVlcnkuY29tL2pRdWVyeS8pIGZ1bmN0aW9uLCBpZgotICogalF1ZXJ5IGlzIGF2YWlsYWJsZSwg
b3IgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIHRoZSBlbGVtZW50IG9yIHN0cmluZyBpbiBBbmd1bGFy
J3MgalF1ZXJ5IGxpdGUKLSAqIGltcGxlbWVudGF0aW9uIChjb21tb25seSByZWZlcnJlZCB0byBh
cyBqcUxpdGUpLgotICoKLSAqIFJlYWwgalF1ZXJ5IGFsd2F5cyB0YWtlcyBwcmVjZWRlbmNlIG92
ZXIganFMaXRlLCBwcm92aWRlZCBpdCB3YXMgbG9hZGVkIGJlZm9yZSBgRE9NQ29udGVudExvYWRl
ZGAKLSAqIGV2ZW50IGZpcmVkLgotICoKLSAqIGpxTGl0ZSBpcyBhIHRpbnksIEFQSS1jb21wYXRp
YmxlIHN1YnNldCBvZiBqUXVlcnkgdGhhdCBhbGxvd3MKLSAqIEFuZ3VsYXIgdG8gbWFuaXB1bGF0
ZSB0aGUgRE9NLiBqcUxpdGUgaW1wbGVtZW50cyBvbmx5IHRoZSBtb3N0IGNvbW1vbmx5IG5lZWRl
ZCBmdW5jdGlvbmFsaXR5Ci0gKiB3aXRoaW4gYSB2ZXJ5IHNtYWxsIGZvb3RwcmludCwgc28gb25s
eSBhIHN1YnNldCBvZiB0aGUgalF1ZXJ5IEFQSSAtIG1ldGhvZHMsIGFyZ3VtZW50cyBhbmQKLSAq
IGludm9jYXRpb24gc3R5bGVzIC0gYXJlIHN1cHBvcnRlZC4KLSAqCi0gKiBOb3RlOiBBbGwgZWxl
bWVudCByZWZlcmVuY2VzIGluIEFuZ3VsYXIgYXJlIGFsd2F5cyB3cmFwcGVkIHdpdGggalF1ZXJ5
IG9yIGpxTGl0ZTsgdGhleSBhcmUgbmV2ZXIKLSAqIHJhdyBET00gcmVmZXJlbmNlcy4KLSAqCi0g
KiAjIyBBbmd1bGFyJ3MgalF1ZXJ5IGxpdGUgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBtZXRob2Rz
OgotICoKLSAqIC0gW2FkZENsYXNzKCldKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9hZGRDbGFzcy8p
Ci0gKiAtIFthZnRlcigpXShodHRwOi8vYXBpLmpxdWVyeS5jb20vYWZ0ZXIvKQotICogLSBbYXBw
ZW5kKCldKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9hcHBlbmQvKQotICogLSBbYXR0cigpXShodHRw
Oi8vYXBpLmpxdWVyeS5jb20vYXR0ci8pCi0gKiAtIFtiaW5kKCldKGh0dHA6Ly9hcGkuanF1ZXJ5
LmNvbS9iaW5kLykgLSBEb2VzIG5vdCBzdXBwb3J0IG5hbWVzcGFjZXMKLSAqIC0gW2NoaWxkcmVu
KCldKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9jaGlsZHJlbi8pIC0gRG9lcyBub3Qgc3VwcG9ydCBz
ZWxlY3RvcnMKLSAqIC0gW2Nsb25lKCldKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9jbG9uZS8pCi0g
KiAtIFtjb250ZW50cygpXShodHRwOi8vYXBpLmpxdWVyeS5jb20vY29udGVudHMvKQotICogLSBb
Y3NzKCldKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9jc3MvKQotICogLSBbZGF0YSgpXShodHRwOi8v
YXBpLmpxdWVyeS5jb20vZGF0YS8pCi0gKiAtIFtlcSgpXShodHRwOi8vYXBpLmpxdWVyeS5jb20v
ZXEvKQotICogLSBbZmluZCgpXShodHRwOi8vYXBpLmpxdWVyeS5jb20vZmluZC8pIC0gTGltaXRl
ZCB0byBsb29rdXBzIGJ5IHRhZyBuYW1lCi0gKiAtIFtoYXNDbGFzcygpXShodHRwOi8vYXBpLmpx
dWVyeS5jb20vaGFzQ2xhc3MvKQotICogLSBbaHRtbCgpXShodHRwOi8vYXBpLmpxdWVyeS5jb20v
aHRtbC8pCi0gKiAtIFtuZXh0KCldKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9uZXh0LykgLSBEb2Vz
IG5vdCBzdXBwb3J0IHNlbGVjdG9ycwotICogLSBbcGFyZW50KCldKGh0dHA6Ly9hcGkuanF1ZXJ5
LmNvbS9wYXJlbnQvKSAtIERvZXMgbm90IHN1cHBvcnQgc2VsZWN0b3JzCi0gKiAtIFtwcmVwZW5k
KCldKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9wcmVwZW5kLykKLSAqIC0gW3Byb3AoKV0oaHR0cDov
L2FwaS5qcXVlcnkuY29tL3Byb3AvKQotICogLSBbcmVhZHkoKV0oaHR0cDovL2FwaS5qcXVlcnku
Y29tL3JlYWR5LykKLSAqIC0gW3JlbW92ZSgpXShodHRwOi8vYXBpLmpxdWVyeS5jb20vcmVtb3Zl
LykKLSAqIC0gW3JlbW92ZUF0dHIoKV0oaHR0cDovL2FwaS5qcXVlcnkuY29tL3JlbW92ZUF0dHIv
KQotICogLSBbcmVtb3ZlQ2xhc3MoKV0oaHR0cDovL2FwaS5qcXVlcnkuY29tL3JlbW92ZUNsYXNz
LykKLSAqIC0gW3JlbW92ZURhdGEoKV0oaHR0cDovL2FwaS5qcXVlcnkuY29tL3JlbW92ZURhdGEv
KQotICogLSBbcmVwbGFjZVdpdGgoKV0oaHR0cDovL2FwaS5qcXVlcnkuY29tL3JlcGxhY2VXaXRo
LykKLSAqIC0gW3RleHQoKV0oaHR0cDovL2FwaS5qcXVlcnkuY29tL3RleHQvKQotICogLSBbdG9n
Z2xlQ2xhc3MoKV0oaHR0cDovL2FwaS5qcXVlcnkuY29tL3RvZ2dsZUNsYXNzLykKLSAqIC0gW3Ry
aWdnZXJIYW5kbGVyKCldKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS90cmlnZ2VySGFuZGxlci8pIC0g
RG9lc24ndCBwYXNzIG5hdGl2ZSBldmVudCBvYmplY3RzIHRvIGhhbmRsZXJzLgotICogLSBbdW5i
aW5kKCldKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS91bmJpbmQvKSAtIERvZXMgbm90IHN1cHBvcnQg
bmFtZXNwYWNlcwotICogLSBbdmFsKCldKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS92YWwvKQotICog
LSBbd3JhcCgpXShodHRwOi8vYXBpLmpxdWVyeS5jb20vd3JhcC8pCi0gKgotICogIyMgSW4gYWRk
dGlvbiB0byB0aGUgYWJvdmUsIEFuZ3VsYXIgcHJvdmlkZXMgYWRkaXRpb25hbCBtZXRob2RzIHRv
IGJvdGggalF1ZXJ5IGFuZCBqUXVlcnkgbGl0ZToKLSAqCi0gKiAtIGBjb250cm9sbGVyKG5hbWUp
YCAtIHJldHJpZXZlcyB0aGUgY29udHJvbGxlciBvZiB0aGUgY3VycmVudCBlbGVtZW50IG9yIGl0
cyBwYXJlbnQuIEJ5IGRlZmF1bHQKLSAqICAgcmV0cmlldmVzIGNvbnRyb2xsZXIgYXNzb2NpYXRl
ZCB3aXRoIHRoZSBgbmdDb250cm9sbGVyYCBkaXJlY3RpdmUuIElmIGBuYW1lYCBpcyBwcm92aWRl
ZCBhcwotICogICBjYW1lbENhc2UgZGlyZWN0aXZlIG5hbWUsIHRoZW4gdGhlIGNvbnRyb2xsZXIg
Zm9yIHRoaXMgZGlyZWN0aXZlIHdpbGwgYmUgcmV0cmlldmVkIChlLmcuCi0gKiAgIGAnbmdNb2Rl
bCdgKS4KLSAqIC0gYGluamVjdG9yKClgIC0gcmV0cmlldmVzIHRoZSBpbmplY3RvciBvZiB0aGUg
Y3VycmVudCBlbGVtZW50IG9yIGl0cyBwYXJlbnQuCi0gKiAtIGBzY29wZSgpYCAtIHJldHJpZXZl
cyB0aGUge0BsaW5rIGFwaS9uZy4kcm9vdFNjb3BlLlNjb3BlIHNjb3BlfSBvZiB0aGUgY3VycmVu
dAotICogICBlbGVtZW50IG9yIGl0cyBwYXJlbnQuCi0gKiAtIGBpbmhlcml0ZWREYXRhKClgIC0g
c2FtZSBhcyBgZGF0YSgpYCwgYnV0IHdhbGtzIHVwIHRoZSBET00gdW50aWwgYSB2YWx1ZSBpcyBm
b3VuZCBvciB0aGUgdG9wCi0gKiAgIHBhcmVudCBlbGVtZW50IGlzIHJlYWNoZWQuCi0gKgotICog
QHBhcmFtIHtzdHJpbmd8RE9NRWxlbWVudH0gZWxlbWVudCBIVE1MIHN0cmluZyBvciBET01FbGVt
ZW50IHRvIGJlIHdyYXBwZWQgaW50byBqUXVlcnkuCi0gKiBAcmV0dXJucyB7T2JqZWN0fSBqUXVl
cnkgb2JqZWN0LgotICovCi0KLXZhciBqcUNhY2hlID0gSlFMaXRlLmNhY2hlID0ge30sCi0gICAg
anFOYW1lID0gSlFMaXRlLmV4cGFuZG8gPSAnbmctJyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpLAot
ICAgIGpxSWQgPSAxLAotICAgIGFkZEV2ZW50TGlzdGVuZXJGbiA9ICh3aW5kb3cuZG9jdW1lbnQu
YWRkRXZlbnRMaXN0ZW5lcgotICAgICAgPyBmdW5jdGlvbihlbGVtZW50LCB0eXBlLCBmbikge2Vs
ZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmbiwgZmFsc2UpO30KLSAgICAgIDogZnVuY3Rp
b24oZWxlbWVudCwgdHlwZSwgZm4pIHtlbGVtZW50LmF0dGFjaEV2ZW50KCdvbicgKyB0eXBlLCBm
bik7fSksCi0gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lckZuID0gKHdpbmRvdy5kb2N1bWVudC5yZW1v
dmVFdmVudExpc3RlbmVyCi0gICAgICA/IGZ1bmN0aW9uKGVsZW1lbnQsIHR5cGUsIGZuKSB7ZWxl
bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGZuLCBmYWxzZSk7IH0KLSAgICAgIDogZnVu
Y3Rpb24oZWxlbWVudCwgdHlwZSwgZm4pIHtlbGVtZW50LmRldGFjaEV2ZW50KCdvbicgKyB0eXBl
LCBmbik7IH0pOwotCi1mdW5jdGlvbiBqcU5leHRJZCgpIHsgcmV0dXJuICsranFJZDsgfQotCi0K
LXZhciBTUEVDSUFMX0NIQVJTX1JFR0VYUCA9IC8oW1w6XC1cX10rKC4pKS9nOwotdmFyIE1PWl9I
QUNLX1JFR0VYUCA9IC9ebW96KFtBLVpdKS87Ci0KLS8qKgotICogQ29udmVydHMgc25ha2VfY2Fz
ZSB0byBjYW1lbENhc2UuCi0gKiBBbHNvIHRoZXJlIGlzIHNwZWNpYWwgY2FzZSBmb3IgTW96IHBy
ZWZpeCBzdGFydGluZyB3aXRoIHVwcGVyIGNhc2UgbGV0dGVyLgotICogQHBhcmFtIG5hbWUgTmFt
ZSB0byBub3JtYWxpemUKLSAqLwotZnVuY3Rpb24gY2FtZWxDYXNlKG5hbWUpIHsKLSAgcmV0dXJu
IG5hbWUuCi0gICAgcmVwbGFjZShTUEVDSUFMX0NIQVJTX1JFR0VYUCwgZnVuY3Rpb24oXywgc2Vw
YXJhdG9yLCBsZXR0ZXIsIG9mZnNldCkgewotICAgICAgcmV0dXJuIG9mZnNldCA/IGxldHRlci50
b1VwcGVyQ2FzZSgpIDogbGV0dGVyOwotICAgIH0pLgotICAgIHJlcGxhY2UoTU9aX0hBQ0tfUkVH
RVhQLCAnTW96JDEnKTsKLX0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCi0vLyBqUXVlcnkgbXV0YXRpb24gcGF0Y2gKLS8vCi0vLyAgSW4gY29uanVuY3Rp
b24gd2l0aCBiaW5kSlF1ZXJ5IGludGVyY2VwdHMgYWxsIGpRdWVyeSdzIERPTSBkZXN0cnVjdGlv
biBhcGlzIGFuZCBmaXJlcyBhCi0vLyAkZGVzdHJveSBldmVudCBvbiBhbGwgRE9NIG5vZGVzIGJl
aW5nIHJlbW92ZWQuCi0vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCi0KLWZ1bmN0aW9uIEpRTGl0ZVBhdGNoSlF1ZXJ5UmVtb3ZlKG5hbWUsIGRpc3BhdGNo
VGhpcykgewotICB2YXIgb3JpZ2luYWxKcUZuID0galF1ZXJ5LmZuW25hbWVdOwotICBvcmlnaW5h
bEpxRm4gPSBvcmlnaW5hbEpxRm4uJG9yaWdpbmFsIHx8IG9yaWdpbmFsSnFGbjsKLSAgcmVtb3Zl
UGF0Y2guJG9yaWdpbmFsID0gb3JpZ2luYWxKcUZuOwotICBqUXVlcnkuZm5bbmFtZV0gPSByZW1v
dmVQYXRjaDsKLQotICBmdW5jdGlvbiByZW1vdmVQYXRjaCgpIHsKLSAgICB2YXIgbGlzdCA9IFt0
aGlzXSwKLSAgICAgICAgZmlyZUV2ZW50ID0gZGlzcGF0Y2hUaGlzLAotICAgICAgICBzZXQsIHNl
dEluZGV4LCBzZXRMZW5ndGgsCi0gICAgICAgIGVsZW1lbnQsIGNoaWxkSW5kZXgsIGNoaWxkTGVu
Z3RoLCBjaGlsZHJlbiwKLSAgICAgICAgZm5zLCBldmVudHM7Ci0KLSAgICB3aGlsZShsaXN0Lmxl
bmd0aCkgewotICAgICAgc2V0ID0gbGlzdC5zaGlmdCgpOwotICAgICAgZm9yKHNldEluZGV4ID0g
MCwgc2V0TGVuZ3RoID0gc2V0Lmxlbmd0aDsgc2V0SW5kZXggPCBzZXRMZW5ndGg7IHNldEluZGV4
KyspIHsKLSAgICAgICAgZWxlbWVudCA9IGpxTGl0ZShzZXRbc2V0SW5kZXhdKTsKLSAgICAgICAg
aWYgKGZpcmVFdmVudCkgewotICAgICAgICAgIGVsZW1lbnQudHJpZ2dlckhhbmRsZXIoJyRkZXN0
cm95Jyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZmlyZUV2ZW50ID0gIWZpcmVFdmVu
dDsKLSAgICAgICAgfQotICAgICAgICBmb3IoY2hpbGRJbmRleCA9IDAsIGNoaWxkTGVuZ3RoID0g
KGNoaWxkcmVuID0gZWxlbWVudC5jaGlsZHJlbigpKS5sZW5ndGg7Ci0gICAgICAgICAgICBjaGls
ZEluZGV4IDwgY2hpbGRMZW5ndGg7Ci0gICAgICAgICAgICBjaGlsZEluZGV4KyspIHsKLSAgICAg
ICAgICBsaXN0LnB1c2goalF1ZXJ5KGNoaWxkcmVuW2NoaWxkSW5kZXhdKSk7Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG9yaWdpbmFsSnFGbi5hcHBseSh0aGlzLCBhcmd1
bWVudHMpOwotICB9Ci19Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwotZnVuY3Rpb24gSlFMaXRlKGVsZW1lbnQpIHsKLSAgaWYgKGVsZW1lbnQgaW5zdGFu
Y2VvZiBKUUxpdGUpIHsKLSAgICByZXR1cm4gZWxlbWVudDsKLSAgfQotICBpZiAoISh0aGlzIGlu
c3RhbmNlb2YgSlFMaXRlKSkgewotICAgIGlmIChpc1N0cmluZyhlbGVtZW50KSAmJiBlbGVtZW50
LmNoYXJBdCgwKSAhPSAnPCcpIHsKLSAgICAgIHRocm93IEVycm9yKCdzZWxlY3RvcnMgbm90IGlt
cGxlbWVudGVkJyk7Ci0gICAgfQotICAgIHJldHVybiBuZXcgSlFMaXRlKGVsZW1lbnQpOwotICB9
Ci0KLSAgaWYgKGlzU3RyaW5nKGVsZW1lbnQpKSB7Ci0gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgIC8vIFJlYWQgYWJvdXQgdGhlIE5vU2NvcGUgZWxlbWVu
dHMgaGVyZToKLSAgICAvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkv
bXM1MzM4OTcoVlMuODUpLmFzcHgKLSAgICBkaXYuaW5uZXJIVE1MID0gJzxkaXY+JiMxNjA7PC9k
aXY+JyArIGVsZW1lbnQ7IC8vIElFIGluc2FuaXR5IHRvIG1ha2UgTm9TY29wZSBlbGVtZW50cyB3
b3JrIQotICAgIGRpdi5yZW1vdmVDaGlsZChkaXYuZmlyc3RDaGlsZCk7IC8vIHJlbW92ZSB0aGUg
c3VwZXJmbHVvdXMgZGl2Ci0gICAgSlFMaXRlQWRkTm9kZXModGhpcywgZGl2LmNoaWxkTm9kZXMp
OwotICAgIHRoaXMucmVtb3ZlKCk7IC8vIGRldGFjaCB0aGUgZWxlbWVudHMgZnJvbSB0aGUgdGVt
cG9yYXJ5IERPTSBkaXYuCi0gIH0gZWxzZSB7Ci0gICAgSlFMaXRlQWRkTm9kZXModGhpcywgZWxl
bWVudCk7Ci0gIH0KLX0KLQotZnVuY3Rpb24gSlFMaXRlQ2xvbmUoZWxlbWVudCkgewotICByZXR1
cm4gZWxlbWVudC5jbG9uZU5vZGUodHJ1ZSk7Ci19Ci0KLWZ1bmN0aW9uIEpRTGl0ZURlYWxvYyhl
bGVtZW50KXsKLSAgSlFMaXRlUmVtb3ZlRGF0YShlbGVtZW50KTsKLSAgZm9yICggdmFyIGkgPSAw
LCBjaGlsZHJlbiA9IGVsZW1lbnQuY2hpbGROb2RlcyB8fCBbXTsgaSA8IGNoaWxkcmVuLmxlbmd0
aDsgaSsrKSB7Ci0gICAgSlFMaXRlRGVhbG9jKGNoaWxkcmVuW2ldKTsKLSAgfQotfQotCi1mdW5j
dGlvbiBKUUxpdGVVbmJpbmQoZWxlbWVudCwgdHlwZSwgZm4pIHsKLSAgdmFyIGV2ZW50cyA9IEpR
TGl0ZUV4cGFuZG9TdG9yZShlbGVtZW50LCAnZXZlbnRzJyksCi0gICAgICBoYW5kbGUgPSBKUUxp
dGVFeHBhbmRvU3RvcmUoZWxlbWVudCwgJ2hhbmRsZScpOwotCi0gIGlmICghaGFuZGxlKSByZXR1
cm47IC8vbm8gbGlzdGVuZXJzIHJlZ2lzdGVyZWQKLQotICBpZiAoaXNVbmRlZmluZWQodHlwZSkp
IHsKLSAgICBmb3JFYWNoKGV2ZW50cywgZnVuY3Rpb24oZXZlbnRIYW5kbGVyLCB0eXBlKSB7Ci0g
ICAgICByZW1vdmVFdmVudExpc3RlbmVyRm4oZWxlbWVudCwgdHlwZSwgZXZlbnRIYW5kbGVyKTsK
LSAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07Ci0gICAgfSk7Ci0gIH0gZWxzZSB7Ci0gICAgaWYg
KGlzVW5kZWZpbmVkKGZuKSkgewotICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lckZuKGVsZW1lbnQs
IHR5cGUsIGV2ZW50c1t0eXBlXSk7Ci0gICAgICBkZWxldGUgZXZlbnRzW3R5cGVdOwotICAgIH0g
ZWxzZSB7Ci0gICAgICBhcnJheVJlbW92ZShldmVudHNbdHlwZV0sIGZuKTsKLSAgICB9Ci0gIH0K
LX0KLQotZnVuY3Rpb24gSlFMaXRlUmVtb3ZlRGF0YShlbGVtZW50KSB7Ci0gIHZhciBleHBhbmRv
SWQgPSBlbGVtZW50W2pxTmFtZV0sCi0gICAgICBleHBhbmRvU3RvcmUgPSBqcUNhY2hlW2V4cGFu
ZG9JZF07Ci0KLSAgaWYgKGV4cGFuZG9TdG9yZSkgewotICAgIGlmIChleHBhbmRvU3RvcmUuaGFu
ZGxlKSB7Ci0gICAgICBleHBhbmRvU3RvcmUuZXZlbnRzLiRkZXN0cm95ICYmIGV4cGFuZG9TdG9y
ZS5oYW5kbGUoe30sICckZGVzdHJveScpOwotICAgICAgSlFMaXRlVW5iaW5kKGVsZW1lbnQpOwot
ICAgIH0KLSAgICBkZWxldGUganFDYWNoZVtleHBhbmRvSWRdOwotICAgIGVsZW1lbnRbanFOYW1l
XSA9IHVuZGVmaW5lZDsgLy8gaWUgZG9lcyBub3QgYWxsb3cgZGVsZXRpb24gb2YgYXR0cmlidXRl
cyBvbiBlbGVtZW50cy4KLSAgfQotfQotCi1mdW5jdGlvbiBKUUxpdGVFeHBhbmRvU3RvcmUoZWxl
bWVudCwga2V5LCB2YWx1ZSkgewotICB2YXIgZXhwYW5kb0lkID0gZWxlbWVudFtqcU5hbWVdLAot
ICAgICAgZXhwYW5kb1N0b3JlID0ganFDYWNoZVtleHBhbmRvSWQgfHwgLTFdOwotCi0gIGlmIChp
c0RlZmluZWQodmFsdWUpKSB7Ci0gICAgaWYgKCFleHBhbmRvU3RvcmUpIHsKLSAgICAgIGVsZW1l
bnRbanFOYW1lXSA9IGV4cGFuZG9JZCA9IGpxTmV4dElkKCk7Ci0gICAgICBleHBhbmRvU3RvcmUg
PSBqcUNhY2hlW2V4cGFuZG9JZF0gPSB7fTsKLSAgICB9Ci0gICAgZXhwYW5kb1N0b3JlW2tleV0g
PSB2YWx1ZTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gZXhwYW5kb1N0b3JlICYmIGV4cGFuZG9T
dG9yZVtrZXldOwotICB9Ci19Ci0KLWZ1bmN0aW9uIEpRTGl0ZURhdGEoZWxlbWVudCwga2V5LCB2
YWx1ZSkgewotICB2YXIgZGF0YSA9IEpRTGl0ZUV4cGFuZG9TdG9yZShlbGVtZW50LCAnZGF0YScp
LAotICAgICAgaXNTZXR0ZXIgPSBpc0RlZmluZWQodmFsdWUpLAotICAgICAga2V5RGVmaW5lZCA9
ICFpc1NldHRlciAmJiBpc0RlZmluZWQoa2V5KSwKLSAgICAgIGlzU2ltcGxlR2V0dGVyID0ga2V5
RGVmaW5lZCAmJiAhaXNPYmplY3Qoa2V5KTsKLQotICBpZiAoIWRhdGEgJiYgIWlzU2ltcGxlR2V0
dGVyKSB7Ci0gICAgSlFMaXRlRXhwYW5kb1N0b3JlKGVsZW1lbnQsICdkYXRhJywgZGF0YSA9IHt9
KTsKLSAgfQotCi0gIGlmIChpc1NldHRlcikgewotICAgIGRhdGFba2V5XSA9IHZhbHVlOwotICB9
IGVsc2UgewotICAgIGlmIChrZXlEZWZpbmVkKSB7Ci0gICAgICBpZiAoaXNTaW1wbGVHZXR0ZXIp
IHsKLSAgICAgICAgLy8gZG9uJ3QgY3JlYXRlIGRhdGEgaW4gdGhpcyBjYXNlLgotICAgICAgICBy
ZXR1cm4gZGF0YSAmJiBkYXRhW2tleV07Ci0gICAgICB9IGVsc2UgewotICAgICAgICBleHRlbmQo
ZGF0YSwga2V5KTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIGRhdGE7Ci0g
ICAgfQotICB9Ci19Ci0KLWZ1bmN0aW9uIEpRTGl0ZUhhc0NsYXNzKGVsZW1lbnQsIHNlbGVjdG9y
KSB7Ci0gIHJldHVybiAoKCIgIiArIGVsZW1lbnQuY2xhc3NOYW1lICsgIiAiKS5yZXBsYWNlKC9b
XG5cdF0vZywgIiAiKS4KLSAgICAgIGluZGV4T2YoICIgIiArIHNlbGVjdG9yICsgIiAiICkgPiAt
MSk7Ci19Ci0KLWZ1bmN0aW9uIEpRTGl0ZVJlbW92ZUNsYXNzKGVsZW1lbnQsIGNzc0NsYXNzZXMp
IHsKLSAgaWYgKGNzc0NsYXNzZXMpIHsKLSAgICBmb3JFYWNoKGNzc0NsYXNzZXMuc3BsaXQoJyAn
KSwgZnVuY3Rpb24oY3NzQ2xhc3MpIHsKLSAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gdHJpbSgK
LSAgICAgICAgICAoIiAiICsgZWxlbWVudC5jbGFzc05hbWUgKyAiICIpCi0gICAgICAgICAgLnJl
cGxhY2UoL1tcblx0XS9nLCAiICIpCi0gICAgICAgICAgLnJlcGxhY2UoIiAiICsgdHJpbShjc3ND
bGFzcykgKyAiICIsICIgIikKLSAgICAgICk7Ci0gICAgfSk7Ci0gIH0KLX0KLQotZnVuY3Rpb24g
SlFMaXRlQWRkQ2xhc3MoZWxlbWVudCwgY3NzQ2xhc3NlcykgewotICBpZiAoY3NzQ2xhc3Nlcykg
ewotICAgIGZvckVhY2goY3NzQ2xhc3Nlcy5zcGxpdCgnICcpLCBmdW5jdGlvbihjc3NDbGFzcykg
ewotICAgICAgaWYgKCFKUUxpdGVIYXNDbGFzcyhlbGVtZW50LCBjc3NDbGFzcykpIHsKLSAgICAg
ICAgZWxlbWVudC5jbGFzc05hbWUgPSB0cmltKGVsZW1lbnQuY2xhc3NOYW1lICsgJyAnICsgdHJp
bShjc3NDbGFzcykpOwotICAgICAgfQotICAgIH0pOwotICB9Ci19Ci0KLWZ1bmN0aW9uIEpRTGl0
ZUFkZE5vZGVzKHJvb3QsIGVsZW1lbnRzKSB7Ci0gIGlmIChlbGVtZW50cykgewotICAgIGVsZW1l
bnRzID0gKCFlbGVtZW50cy5ub2RlTmFtZSAmJiBpc0RlZmluZWQoZWxlbWVudHMubGVuZ3RoKSAm
JiAhaXNXaW5kb3coZWxlbWVudHMpKQotICAgICAgPyBlbGVtZW50cwotICAgICAgOiBbIGVsZW1l
bnRzIF07Ci0gICAgZm9yKHZhciBpPTA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewotICAg
ICAgcm9vdC5wdXNoKGVsZW1lbnRzW2ldKTsKLSAgICB9Ci0gIH0KLX0KLQotZnVuY3Rpb24gSlFM
aXRlQ29udHJvbGxlcihlbGVtZW50LCBuYW1lKSB7Ci0gIHJldHVybiBKUUxpdGVJbmhlcml0ZWRE
YXRhKGVsZW1lbnQsICckJyArIChuYW1lIHx8ICduZ0NvbnRyb2xsZXInICkgKyAnQ29udHJvbGxl
cicpOwotfQotCi1mdW5jdGlvbiBKUUxpdGVJbmhlcml0ZWREYXRhKGVsZW1lbnQsIG5hbWUsIHZh
bHVlKSB7Ci0gIGVsZW1lbnQgPSBqcUxpdGUoZWxlbWVudCk7Ci0KLSAgLy8gaWYgZWxlbWVudCBp
cyB0aGUgZG9jdW1lbnQgb2JqZWN0IHdvcmsgd2l0aCB0aGUgaHRtbCBlbGVtZW50IGluc3RlYWQK
LSAgLy8gdGhpcyBtYWtlcyAkKGRvY3VtZW50KS5zY29wZSgpIHBvc3NpYmxlCi0gIGlmKGVsZW1l
bnRbMF0ubm9kZVR5cGUgPT0gOSkgewotICAgIGVsZW1lbnQgPSBlbGVtZW50LmZpbmQoJ2h0bWwn
KTsKLSAgfQotCi0gIHdoaWxlIChlbGVtZW50Lmxlbmd0aCkgewotICAgIGlmICh2YWx1ZSA9IGVs
ZW1lbnQuZGF0YShuYW1lKSkgcmV0dXJuIHZhbHVlOwotICAgIGVsZW1lbnQgPSBlbGVtZW50LnBh
cmVudCgpOwotICB9Ci19Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLwotLy8gRnVuY3Rpb25zIHdoaWNoIGFyZSBkZWNsYXJlZCBkaXJlY3RseS4KLS8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotdmFyIEpRTGl0ZVByb3RvdHlwZSA9
IEpRTGl0ZS5wcm90b3R5cGUgPSB7Ci0gIHJlYWR5OiBmdW5jdGlvbihmbikgewotICAgIHZhciBm
aXJlZCA9IGZhbHNlOwotCi0gICAgZnVuY3Rpb24gdHJpZ2dlcigpIHsKLSAgICAgIGlmIChmaXJl
ZCkgcmV0dXJuOwotICAgICAgZmlyZWQgPSB0cnVlOwotICAgICAgZm4oKTsKLSAgICB9Ci0KLSAg
ICB0aGlzLmJpbmQoJ0RPTUNvbnRlbnRMb2FkZWQnLCB0cmlnZ2VyKTsgLy8gd29ya3MgZm9yIG1v
ZGVybiBicm93c2VycyBhbmQgSUU5Ci0gICAgLy8gd2UgY2FuIG5vdCB1c2UganFMaXRlIHNpbmNl
IHdlIGFyZSBub3QgZG9uZSBsb2FkaW5nIGFuZCBqUXVlcnkgY291bGQgYmUgbG9hZGVkIGxhdGVy
LgotICAgIEpRTGl0ZSh3aW5kb3cpLmJpbmQoJ2xvYWQnLCB0cmlnZ2VyKTsgLy8gZmFsbGJhY2sg
dG8gd2luZG93Lm9ubG9hZCBmb3Igb3RoZXJzCi0gIH0sCi0gIHRvU3RyaW5nOiBmdW5jdGlvbigp
IHsKLSAgICB2YXIgdmFsdWUgPSBbXTsKLSAgICBmb3JFYWNoKHRoaXMsIGZ1bmN0aW9uKGUpeyB2
YWx1ZS5wdXNoKCcnICsgZSk7fSk7Ci0gICAgcmV0dXJuICdbJyArIHZhbHVlLmpvaW4oJywgJykg
KyAnXSc7Ci0gIH0sCi0KLSAgZXE6IGZ1bmN0aW9uKGluZGV4KSB7Ci0gICAgICByZXR1cm4gKGlu
ZGV4ID49IDApID8ganFMaXRlKHRoaXNbaW5kZXhdKSA6IGpxTGl0ZSh0aGlzW3RoaXMubGVuZ3Ro
ICsgaW5kZXhdKTsKLSAgfSwKLQotICBsZW5ndGg6IDAsCi0gIHB1c2g6IHB1c2gsCi0gIHNvcnQ6
IFtdLnNvcnQsCi0gIHNwbGljZTogW10uc3BsaWNlCi19OwotCi0vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIEZ1bmN0aW9ucyBpdGVyYXRpbmcgZ2V0dGVyL3Nl
dHRlcnMuCi0vLyB0aGVzZSBmdW5jdGlvbnMgcmV0dXJuIHNlbGYgb24gc2V0dGVyIGFuZAotLy8g
dmFsdWUgb24gZ2V0LgotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ci12YXIgQk9PTEVBTl9BVFRSID0ge307Ci1mb3JFYWNoKCdtdWx0aXBsZSxzZWxlY3RlZCxjaGVj
a2VkLGRpc2FibGVkLHJlYWRPbmx5LHJlcXVpcmVkJy5zcGxpdCgnLCcpLCBmdW5jdGlvbih2YWx1
ZSkgewotICBCT09MRUFOX0FUVFJbbG93ZXJjYXNlKHZhbHVlKV0gPSB2YWx1ZTsKLX0pOwotdmFy
IEJPT0xFQU5fRUxFTUVOVFMgPSB7fTsKLWZvckVhY2goJ2lucHV0LHNlbGVjdCxvcHRpb24sdGV4
dGFyZWEsYnV0dG9uLGZvcm0nLnNwbGl0KCcsJyksIGZ1bmN0aW9uKHZhbHVlKSB7Ci0gIEJPT0xF
QU5fRUxFTUVOVFNbdXBwZXJjYXNlKHZhbHVlKV0gPSB0cnVlOwotfSk7Ci0KLWZ1bmN0aW9uIGdl
dEJvb2xlYW5BdHRyTmFtZShlbGVtZW50LCBuYW1lKSB7Ci0gIC8vIGNoZWNrIGRvbSBsYXN0IHNp
bmNlIHdlIHdpbGwgbW9zdCBsaWtlbHkgZmFpbCBvbiBuYW1lCi0gIHZhciBib29sZWFuQXR0ciA9
IEJPT0xFQU5fQVRUUltuYW1lLnRvTG93ZXJDYXNlKCldOwotCi0gIC8vIGJvb2xlYW5BdHRyIGlz
IGhlcmUgdHdpY2UgdG8gbWluaW1pemUgRE9NIGFjY2VzcwotICByZXR1cm4gYm9vbGVhbkF0dHIg
JiYgQk9PTEVBTl9FTEVNRU5UU1tlbGVtZW50Lm5vZGVOYW1lXSAmJiBib29sZWFuQXR0cjsKLX0K
LQotZm9yRWFjaCh7Ci0gIGRhdGE6IEpRTGl0ZURhdGEsCi0gIGluaGVyaXRlZERhdGE6IEpRTGl0
ZUluaGVyaXRlZERhdGEsCi0KLSAgc2NvcGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICByZXR1
cm4gSlFMaXRlSW5oZXJpdGVkRGF0YShlbGVtZW50LCAnJHNjb3BlJyk7Ci0gIH0sCi0KLSAgY29u
dHJvbGxlcjogSlFMaXRlQ29udHJvbGxlciAsCi0KLSAgaW5qZWN0b3I6IGZ1bmN0aW9uKGVsZW1l
bnQpIHsKLSAgICByZXR1cm4gSlFMaXRlSW5oZXJpdGVkRGF0YShlbGVtZW50LCAnJGluamVjdG9y
Jyk7Ci0gIH0sCi0KLSAgcmVtb3ZlQXR0cjogZnVuY3Rpb24oZWxlbWVudCxuYW1lKSB7Ci0gICAg
ZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7Ci0gIH0sCi0KLSAgaGFzQ2xhc3M6IEpRTGl0
ZUhhc0NsYXNzLAotCi0gIGNzczogZnVuY3Rpb24oZWxlbWVudCwgbmFtZSwgdmFsdWUpIHsKLSAg
ICBuYW1lID0gY2FtZWxDYXNlKG5hbWUpOwotCi0gICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkpIHsK
LSAgICAgIGVsZW1lbnQuc3R5bGVbbmFtZV0gPSB2YWx1ZTsKLSAgICB9IGVsc2UgewotICAgICAg
dmFyIHZhbDsKLQotICAgICAgaWYgKG1zaWUgPD0gOCkgewotICAgICAgICAvLyB0aGlzIGlzIHNv
bWUgSUUgc3BlY2lmaWMgd2VpcmRuZXNzIHRoYXQgalF1ZXJ5IDEuNi40IGRvZXMgbm90IHN1cmUg
d2h5Ci0gICAgICAgIHZhbCA9IGVsZW1lbnQuY3VycmVudFN0eWxlICYmIGVsZW1lbnQuY3VycmVu
dFN0eWxlW25hbWVdOwotICAgICAgICBpZiAodmFsID09PSAnJykgdmFsID0gJ2F1dG8nOwotICAg
ICAgfQotCi0gICAgICB2YWwgPSB2YWwgfHwgZWxlbWVudC5zdHlsZVtuYW1lXTsKLQotICAgICAg
aWYgKG1zaWUgPD0gOCkgewotICAgICAgICAvLyBqcXVlcnkgd2VpcmRuZXNzIDotLwotICAgICAg
ICB2YWwgPSAodmFsID09PSAnJykgPyB1bmRlZmluZWQgOiB2YWw7Ci0gICAgICB9Ci0KLSAgICAg
IHJldHVybiAgdmFsOwotICAgIH0KLSAgfSwKLQotICBhdHRyOiBmdW5jdGlvbihlbGVtZW50LCBu
YW1lLCB2YWx1ZSl7Ci0gICAgdmFyIGxvd2VyY2FzZWROYW1lID0gbG93ZXJjYXNlKG5hbWUpOwot
ICAgIGlmIChCT09MRUFOX0FUVFJbbG93ZXJjYXNlZE5hbWVdKSB7Ci0gICAgICBpZiAoaXNEZWZp
bmVkKHZhbHVlKSkgewotICAgICAgICBpZiAoISF2YWx1ZSkgewotICAgICAgICAgIGVsZW1lbnRb
bmFtZV0gPSB0cnVlOwotICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIGxvd2Vy
Y2FzZWROYW1lKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBlbGVtZW50W25hbWVdID0g
ZmFsc2U7Ci0gICAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobG93ZXJjYXNlZE5hbWUp
OwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gKGVsZW1lbnRbbmFt
ZV0gfHwKLSAgICAgICAgICAgICAgICAgKGVsZW1lbnQuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0o
bmFtZSl8fCBub29wKS5zcGVjaWZpZWQpCi0gICAgICAgICAgICAgICA/IGxvd2VyY2FzZWROYW1l
Ci0gICAgICAgICAgICAgICA6IHVuZGVmaW5lZDsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGlz
RGVmaW5lZCh2YWx1ZSkpIHsKLSAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVl
KTsKLSAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKSB7Ci0gICAgICAvLyB0aGUg
ZXh0cmEgYXJndW1lbnQgIjIiIGlzIHRvIGdldCB0aGUgcmlnaHQgdGhpbmcgZm9yIGEuaHJlZiBp
biBJRSwgc2VlIGpRdWVyeSBjb2RlCi0gICAgICAvLyBzb21lIGVsZW1lbnRzIChlLmcuIERvY3Vt
ZW50KSBkb24ndCBoYXZlIGdldCBhdHRyaWJ1dGUsIHNvIHJldHVybiB1bmRlZmluZWQKLSAgICAg
IHZhciByZXQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShuYW1lLCAyKTsKLSAgICAgIC8vIG5vcm1h
bGl6ZSBub24tZXhpc3RpbmcgYXR0cmlidXRlcyB0byB1bmRlZmluZWQgKGFzIGpRdWVyeSkKLSAg
ICAgIHJldHVybiByZXQgPT09IG51bGwgPyB1bmRlZmluZWQgOiByZXQ7Ci0gICAgfQotICB9LAot
Ci0gIHByb3A6IGZ1bmN0aW9uKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7Ci0gICAgaWYgKGlzRGVm
aW5lZCh2YWx1ZSkpIHsKLSAgICAgIGVsZW1lbnRbbmFtZV0gPSB2YWx1ZTsKLSAgICB9IGVsc2Ug
ewotICAgICAgcmV0dXJuIGVsZW1lbnRbbmFtZV07Ci0gICAgfQotICB9LAotCi0gIHRleHQ6IGV4
dGVuZCgobXNpZSA8IDkpCi0gICAgICA/IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlKSB7Ci0gICAg
ICAgIGlmIChlbGVtZW50Lm5vZGVUeXBlID09IDEgLyoqIEVsZW1lbnQgKi8pIHsKLSAgICAgICAg
ICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuaW5u
ZXJUZXh0OwotICAgICAgICAgIGVsZW1lbnQuaW5uZXJUZXh0ID0gdmFsdWU7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSkKLSAgICAgICAgICAgIHJl
dHVybiBlbGVtZW50Lm5vZGVWYWx1ZTsKLSAgICAgICAgICBlbGVtZW50Lm5vZGVWYWx1ZSA9IHZh
bHVlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICA6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVl
KSB7Ci0gICAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpIHsKLSAgICAgICAgICByZXR1cm4g
ZWxlbWVudC50ZXh0Q29udGVudDsKLSAgICAgICAgfQotICAgICAgICBlbGVtZW50LnRleHRDb250
ZW50ID0gdmFsdWU7Ci0gICAgICB9LCB7JGR2OicnfSksCi0KLSAgdmFsOiBmdW5jdGlvbihlbGVt
ZW50LCB2YWx1ZSkgewotICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpIHsKLSAgICAgIHJldHVy
biBlbGVtZW50LnZhbHVlOwotICAgIH0KLSAgICBlbGVtZW50LnZhbHVlID0gdmFsdWU7Ci0gIH0s
Ci0KLSAgaHRtbDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsKLSAgICBpZiAoaXNVbmRlZmlu
ZWQodmFsdWUpKSB7Ci0gICAgICByZXR1cm4gZWxlbWVudC5pbm5lckhUTUw7Ci0gICAgfQotICAg
IGZvciAodmFyIGkgPSAwLCBjaGlsZE5vZGVzID0gZWxlbWVudC5jaGlsZE5vZGVzOyBpIDwgY2hp
bGROb2Rlcy5sZW5ndGg7IGkrKykgewotICAgICAgSlFMaXRlRGVhbG9jKGNoaWxkTm9kZXNbaV0p
OwotICAgIH0KLSAgICBlbGVtZW50LmlubmVySFRNTCA9IHZhbHVlOwotICB9Ci19LCBmdW5jdGlv
bihmbiwgbmFtZSl7Ci0gIC8qKgotICAgKiBQcm9wZXJ0aWVzOiB3cml0ZXMgcmV0dXJuIHNlbGVj
dGlvbiwgcmVhZHMgcmV0dXJuIGZpcnN0IHZhbHVlCi0gICAqLwotICBKUUxpdGUucHJvdG90eXBl
W25hbWVdID0gZnVuY3Rpb24oYXJnMSwgYXJnMikgewotICAgIHZhciBpLCBrZXk7Ci0KLSAgICAv
LyBKUUxpdGVIYXNDbGFzcyBoYXMgb25seSB0d28gYXJndW1lbnRzLCBidXQgaXMgYSBnZXR0ZXIt
b25seSBmbiwgc28gd2UgbmVlZCB0byBzcGVjaWFsLWNhc2UgaXQKLSAgICAvLyBpbiBhIHdheSB0
aGF0IHN1cnZpdmVzIG1pbmlmaWNhdGlvbi4KLSAgICBpZiAoKChmbi5sZW5ndGggPT0gMiAmJiAo
Zm4gIT09IEpRTGl0ZUhhc0NsYXNzICYmIGZuICE9PSBKUUxpdGVDb250cm9sbGVyKSkgPyBhcmcx
IDogYXJnMikgPT09IHVuZGVmaW5lZCkgewotICAgICAgaWYgKGlzT2JqZWN0KGFyZzEpKSB7Ci0K
LSAgICAgICAgLy8gd2UgYXJlIGEgd3JpdGUsIGJ1dCB0aGUgb2JqZWN0IHByb3BlcnRpZXMgYXJl
IHRoZSBrZXkvdmFsdWVzCi0gICAgICAgIGZvcihpPTA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7
Ci0gICAgICAgICAgaWYgKGZuID09PSBKUUxpdGVEYXRhKSB7Ci0gICAgICAgICAgICAvLyBkYXRh
KCkgdGFrZXMgdGhlIHdob2xlIG9iamVjdCBpbiBqUXVlcnkKLSAgICAgICAgICAgIGZuKHRoaXNb
aV0sIGFyZzEpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGtleSBpbiBh
cmcxKSB7Ci0gICAgICAgICAgICAgIGZuKHRoaXNbaV0sIGtleSwgYXJnMVtrZXldKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gcmV0dXJuIHNlbGYg
Zm9yIGNoYWluaW5nCi0gICAgICAgIHJldHVybiB0aGlzOwotICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgLy8gd2UgYXJlIGEgcmVhZCwgc28gcmVhZCB0aGUgZmlyc3QgY2hpbGQuCi0gICAgICAgIGlm
ICh0aGlzLmxlbmd0aCkKLSAgICAgICAgICByZXR1cm4gZm4odGhpc1swXSwgYXJnMSwgYXJnMik7
Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIHdlIGFyZSBhIHdyaXRlLCBzbyBhcHBs
eSB0byBhbGwgY2hpbGRyZW4KLSAgICAgIGZvcihpPTA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7
Ci0gICAgICAgIGZuKHRoaXNbaV0sIGFyZzEsIGFyZzIpOwotICAgICAgfQotICAgICAgLy8gcmV0
dXJuIHNlbGYgZm9yIGNoYWluaW5nCi0gICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0gICAgcmV0
dXJuIGZuLiRkdjsKLSAgfTsKLX0pOwotCi1mdW5jdGlvbiBjcmVhdGVFdmVudEhhbmRsZXIoZWxl
bWVudCwgZXZlbnRzKSB7Ci0gIHZhciBldmVudEhhbmRsZXIgPSBmdW5jdGlvbiAoZXZlbnQsIHR5
cGUpIHsKLSAgICBpZiAoIWV2ZW50LnByZXZlbnREZWZhdWx0KSB7Ci0gICAgICBldmVudC5wcmV2
ZW50RGVmYXVsdCA9IGZ1bmN0aW9uKCkgewotICAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZh
bHNlOyAvL2llCi0gICAgICB9OwotICAgIH0KLQotICAgIGlmICghZXZlbnQuc3RvcFByb3BhZ2F0
aW9uKSB7Ci0gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbigpIHsKLSAgICAg
ICAgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTsgLy9pZQotICAgICAgfTsKLSAgICB9Ci0KLSAg
ICBpZiAoIWV2ZW50LnRhcmdldCkgewotICAgICAgZXZlbnQudGFyZ2V0ID0gZXZlbnQuc3JjRWxl
bWVudCB8fCBkb2N1bWVudDsKLSAgICB9Ci0KLSAgICBpZiAoaXNVbmRlZmluZWQoZXZlbnQuZGVm
YXVsdFByZXZlbnRlZCkpIHsKLSAgICAgIHZhciBwcmV2ZW50ID0gZXZlbnQucHJldmVudERlZmF1
bHQ7Ci0gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uKCkgewotICAgICAgICBl
dmVudC5kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTsKLSAgICAgICAgcHJldmVudC5jYWxsKGV2ZW50
KTsKLSAgICAgIH07Ci0gICAgICBldmVudC5kZWZhdWx0UHJldmVudGVkID0gZmFsc2U7Ci0gICAg
fQotCi0gICAgZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkID0gZnVuY3Rpb24oKSB7Ci0gICAgICBy
ZXR1cm4gZXZlbnQuZGVmYXVsdFByZXZlbnRlZDsKLSAgICB9OwotCi0gICAgZm9yRWFjaChldmVu
dHNbdHlwZSB8fCBldmVudC50eXBlXSwgZnVuY3Rpb24oZm4pIHsKLSAgICAgIGZuLmNhbGwoZWxl
bWVudCwgZXZlbnQpOwotICAgIH0pOwotCi0gICAgLy8gUmVtb3ZlIG1vbmtleS1wYXRjaGVkIG1l
dGhvZHMgKElFKSwKLSAgICAvLyBhcyB0aGV5IHdvdWxkIGNhdXNlIG1lbW9yeSBsZWFrcyBpbiBJ
RTguCi0gICAgaWYgKG1zaWUgPD0gOCkgewotICAgICAgLy8gSUU3LzggZG9lcyBub3QgYWxsb3cg
dG8gZGVsZXRlIHByb3BlcnR5IG9uIG5hdGl2ZSBvYmplY3QKLSAgICAgIGV2ZW50LnByZXZlbnRE
ZWZhdWx0ID0gbnVsbDsKLSAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbiA9IG51bGw7Ci0gICAg
ICBldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBudWxsOwotICAgIH0gZWxzZSB7Ci0gICAgICAv
LyBJdCBzaG91bGRuJ3QgYWZmZWN0IG5vcm1hbCBicm93c2VycyAobmF0aXZlIG1ldGhvZHMgYXJl
IGRlZmluZWQgb24gcHJvdG90eXBlKS4KLSAgICAgIGRlbGV0ZSBldmVudC5wcmV2ZW50RGVmYXVs
dDsKLSAgICAgIGRlbGV0ZSBldmVudC5zdG9wUHJvcGFnYXRpb247Ci0gICAgICBkZWxldGUgZXZl
bnQuaXNEZWZhdWx0UHJldmVudGVkOwotICAgIH0KLSAgfTsKLSAgZXZlbnRIYW5kbGVyLmVsZW0g
PSBlbGVtZW50OwotICByZXR1cm4gZXZlbnRIYW5kbGVyOwotfQotCi0vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIEZ1bmN0aW9ucyBpdGVyYXRpbmcgdHJhdmVy
c2FsLgotLy8gVGhlc2UgZnVuY3Rpb25zIGNoYWluIHJlc3VsdHMgaW50byBhIHNpbmdsZQotLy8g
c2VsZWN0b3IuCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLWZv
ckVhY2goewotICByZW1vdmVEYXRhOiBKUUxpdGVSZW1vdmVEYXRhLAotCi0gIGRlYWxvYzogSlFM
aXRlRGVhbG9jLAotCi0gIGJpbmQ6IGZ1bmN0aW9uIGJpbmRGbihlbGVtZW50LCB0eXBlLCBmbil7
Ci0gICAgdmFyIGV2ZW50cyA9IEpRTGl0ZUV4cGFuZG9TdG9yZShlbGVtZW50LCAnZXZlbnRzJyks
Ci0gICAgICAgIGhhbmRsZSA9IEpRTGl0ZUV4cGFuZG9TdG9yZShlbGVtZW50LCAnaGFuZGxlJyk7
Ci0KLSAgICBpZiAoIWV2ZW50cykgSlFMaXRlRXhwYW5kb1N0b3JlKGVsZW1lbnQsICdldmVudHMn
LCBldmVudHMgPSB7fSk7Ci0gICAgaWYgKCFoYW5kbGUpIEpRTGl0ZUV4cGFuZG9TdG9yZShlbGVt
ZW50LCAnaGFuZGxlJywgaGFuZGxlID0gY3JlYXRlRXZlbnRIYW5kbGVyKGVsZW1lbnQsIGV2ZW50
cykpOwotCi0gICAgZm9yRWFjaCh0eXBlLnNwbGl0KCcgJyksIGZ1bmN0aW9uKHR5cGUpewotICAg
ICAgdmFyIGV2ZW50Rm5zID0gZXZlbnRzW3R5cGVdOwotCi0gICAgICBpZiAoIWV2ZW50Rm5zKSB7
Ci0gICAgICAgIGlmICh0eXBlID09ICdtb3VzZWVudGVyJyB8fCB0eXBlID09ICdtb3VzZWxlYXZl
JykgewotICAgICAgICAgIHZhciBjb250YWlucyA9IGRvY3VtZW50LmJvZHkuY29udGFpbnMgfHwg
ZG9jdW1lbnQuYm9keS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiA/Ci0gICAgICAgICAgZnVuY3Rp
b24oIGEsIGIgKSB7Ci0gICAgICAgICAgICB2YXIgYWRvd24gPSBhLm5vZGVUeXBlID09PSA5ID8g
YS5kb2N1bWVudEVsZW1lbnQgOiBhLAotICAgICAgICAgICAgYnVwID0gYiAmJiBiLnBhcmVudE5v
ZGU7Ci0gICAgICAgICAgICByZXR1cm4gYSA9PT0gYnVwIHx8ICEhKCBidXAgJiYgYnVwLm5vZGVU
eXBlID09PSAxICYmICgKLSAgICAgICAgICAgICAgYWRvd24uY29udGFpbnMgPwotICAgICAgICAg
ICAgICBhZG93bi5jb250YWlucyggYnVwICkgOgotICAgICAgICAgICAgICBhLmNvbXBhcmVEb2N1
bWVudFBvc2l0aW9uICYmIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGJ1cCApICYgMTYKLSAg
ICAgICAgICAgICAgKSk7Ci0gICAgICAgICAgICB9IDoKLSAgICAgICAgICAgIGZ1bmN0aW9uKCBh
LCBiICkgewotICAgICAgICAgICAgICBpZiAoIGIgKSB7Ci0gICAgICAgICAgICAgICAgd2hpbGUg
KCAoYiA9IGIucGFyZW50Tm9kZSkgKSB7Ci0gICAgICAgICAgICAgICAgICBpZiAoIGIgPT09IGEg
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgZXZlbnRzW3R5cGVdID0gW107
Ci0KLSAgICAgICAgICAvLyBSZWZlciB0byBqUXVlcnkncyBpbXBsZW1lbnRhdGlvbiBvZiBtb3Vz
ZWVudGVyICYgbW91c2VsZWF2ZQotICAgICAgICAgIC8vIFJlYWQgYWJvdXQgbW91c2VlbnRlciBh
bmQgbW91c2VsZWF2ZToKLSAgICAgICAgICAvLyBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2pz
L2V2ZW50c19tb3VzZS5odG1sI2xpbms4Ci0gICAgICAgICAgdmFyIGV2ZW50bWFwID0geyBtb3Vz
ZWxlYXZlIDogIm1vdXNlb3V0IiwgbW91c2VlbnRlciA6ICJtb3VzZW92ZXIifSAgICAgICAgICAK
LSAgICAgICAgICBiaW5kRm4oZWxlbWVudCwgZXZlbnRtYXBbdHlwZV0sIGZ1bmN0aW9uKGV2ZW50
KSB7Ci0gICAgICAgICAgICB2YXIgcmV0LCB0YXJnZXQgPSB0aGlzLCByZWxhdGVkID0gZXZlbnQu
cmVsYXRlZFRhcmdldDsKLSAgICAgICAgICAgIC8vIEZvciBtb3VzZW50ZXIvbGVhdmUgY2FsbCB0
aGUgaGFuZGxlciBpZiByZWxhdGVkIGlzIG91dHNpZGUgdGhlIHRhcmdldC4KLSAgICAgICAgICAg
IC8vIE5COiBObyByZWxhdGVkVGFyZ2V0IGlmIHRoZSBtb3VzZSBsZWZ0L2VudGVyZWQgdGhlIGJy
b3dzZXIgd2luZG93Ci0gICAgICAgICAgICBpZiAoICFyZWxhdGVkIHx8IChyZWxhdGVkICE9PSB0
YXJnZXQgJiYgIWNvbnRhaW5zKHRhcmdldCwgcmVsYXRlZCkpICl7Ci0gICAgICAgICAgICAgIGhh
bmRsZShldmVudCwgdHlwZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICB9KTsKLQotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXJGbihlbGVtZW50LCB0eXBl
LCBoYW5kbGUpOwotICAgICAgICAgIGV2ZW50c1t0eXBlXSA9IFtdOwotICAgICAgICB9Ci0gICAg
ICAgIGV2ZW50Rm5zID0gZXZlbnRzW3R5cGVdCi0gICAgICB9Ci0gICAgICBldmVudEZucy5wdXNo
KGZuKTsKLSAgICB9KTsKLSAgfSwKLQotICB1bmJpbmQ6IEpRTGl0ZVVuYmluZCwKLQotICByZXBs
YWNlV2l0aDogZnVuY3Rpb24oZWxlbWVudCwgcmVwbGFjZU5vZGUpIHsKLSAgICB2YXIgaW5kZXgs
IHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTsKLSAgICBKUUxpdGVEZWFsb2MoZWxlbWVudCk7
Ci0gICAgZm9yRWFjaChuZXcgSlFMaXRlKHJlcGxhY2VOb2RlKSwgZnVuY3Rpb24obm9kZSl7Ci0g
ICAgICBpZiAoaW5kZXgpIHsKLSAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShub2RlLCBpbmRl
eC5uZXh0U2libGluZyk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBwYXJlbnQucmVwbGFjZUNo
aWxkKG5vZGUsIGVsZW1lbnQpOwotICAgICAgfQotICAgICAgaW5kZXggPSBub2RlOwotICAgIH0p
OwotICB9LAotCi0gIGNoaWxkcmVuOiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgdmFyIGNoaWxk
cmVuID0gW107Ci0gICAgZm9yRWFjaChlbGVtZW50LmNoaWxkTm9kZXMsIGZ1bmN0aW9uKGVsZW1l
bnQpewotICAgICAgaWYgKGVsZW1lbnQubm9kZVR5cGUgPT09IDEpCi0gICAgICAgIGNoaWxkcmVu
LnB1c2goZWxlbWVudCk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIGNoaWxkcmVuOwotICB9LAotCi0g
IGNvbnRlbnRzOiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgcmV0dXJuIGVsZW1lbnQuY2hpbGRO
b2RlcyB8fCBbXTsKLSAgfSwKLQotICBhcHBlbmQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHsK
LSAgICBmb3JFYWNoKG5ldyBKUUxpdGUobm9kZSksIGZ1bmN0aW9uKGNoaWxkKXsKLSAgICAgIGlm
IChlbGVtZW50Lm5vZGVUeXBlID09PSAxKQotICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGNo
aWxkKTsKLSAgICB9KTsKLSAgfSwKLQotICBwcmVwZW5kOiBmdW5jdGlvbihlbGVtZW50LCBub2Rl
KSB7Ci0gICAgaWYgKGVsZW1lbnQubm9kZVR5cGUgPT09IDEpIHsKLSAgICAgIHZhciBpbmRleCA9
IGVsZW1lbnQuZmlyc3RDaGlsZDsKLSAgICAgIGZvckVhY2gobmV3IEpRTGl0ZShub2RlKSwgZnVu
Y3Rpb24oY2hpbGQpewotICAgICAgICBpZiAoaW5kZXgpIHsKLSAgICAgICAgICBlbGVtZW50Lmlu
c2VydEJlZm9yZShjaGlsZCwgaW5kZXgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGVs
ZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpOwotICAgICAgICAgIGluZGV4ID0gY2hpbGQ7Ci0gICAg
ICAgIH0KLSAgICAgIH0pOwotICAgIH0KLSAgfSwKLQotICB3cmFwOiBmdW5jdGlvbihlbGVtZW50
LCB3cmFwTm9kZSkgewotICAgIHdyYXBOb2RlID0ganFMaXRlKHdyYXBOb2RlKVswXTsKLSAgICB2
YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlOwotICAgIGlmIChwYXJlbnQpIHsKLSAgICAg
IHBhcmVudC5yZXBsYWNlQ2hpbGQod3JhcE5vZGUsIGVsZW1lbnQpOwotICAgIH0KLSAgICB3cmFw
Tm9kZS5hcHBlbmRDaGlsZChlbGVtZW50KTsKLSAgfSwKLQotICByZW1vdmU6IGZ1bmN0aW9uKGVs
ZW1lbnQpIHsKLSAgICBKUUxpdGVEZWFsb2MoZWxlbWVudCk7Ci0gICAgdmFyIHBhcmVudCA9IGVs
ZW1lbnQucGFyZW50Tm9kZTsKLSAgICBpZiAocGFyZW50KSBwYXJlbnQucmVtb3ZlQ2hpbGQoZWxl
bWVudCk7Ci0gIH0sCi0KLSAgYWZ0ZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIG5ld0VsZW1lbnQpIHsK
LSAgICB2YXIgaW5kZXggPSBlbGVtZW50LCBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7Ci0g
ICAgZm9yRWFjaChuZXcgSlFMaXRlKG5ld0VsZW1lbnQpLCBmdW5jdGlvbihub2RlKXsKLSAgICAg
IHBhcmVudC5pbnNlcnRCZWZvcmUobm9kZSwgaW5kZXgubmV4dFNpYmxpbmcpOwotICAgICAgaW5k
ZXggPSBub2RlOwotICAgIH0pOwotICB9LAotCi0gIGFkZENsYXNzOiBKUUxpdGVBZGRDbGFzcywK
LSAgcmVtb3ZlQ2xhc3M6IEpRTGl0ZVJlbW92ZUNsYXNzLAotCi0gIHRvZ2dsZUNsYXNzOiBmdW5j
dGlvbihlbGVtZW50LCBzZWxlY3RvciwgY29uZGl0aW9uKSB7Ci0gICAgaWYgKGlzVW5kZWZpbmVk
KGNvbmRpdGlvbikpIHsKLSAgICAgIGNvbmRpdGlvbiA9ICFKUUxpdGVIYXNDbGFzcyhlbGVtZW50
LCBzZWxlY3Rvcik7Ci0gICAgfQotICAgIChjb25kaXRpb24gPyBKUUxpdGVBZGRDbGFzcyA6IEpR
TGl0ZVJlbW92ZUNsYXNzKShlbGVtZW50LCBzZWxlY3Rvcik7Ci0gIH0sCi0KLSAgcGFyZW50OiBm
dW5jdGlvbihlbGVtZW50KSB7Ci0gICAgdmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTsK
LSAgICByZXR1cm4gcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSAhPT0gMTEgPyBwYXJlbnQgOiBu
dWxsOwotICB9LAotCi0gIG5leHQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICBpZiAoZWxlbWVu
dC5uZXh0RWxlbWVudFNpYmxpbmcpIHsKLSAgICAgIHJldHVybiBlbGVtZW50Lm5leHRFbGVtZW50
U2libGluZzsKLSAgICB9Ci0KLSAgICAvLyBJRTggZG9lc24ndCBoYXZlIG5leHRFbGVtZW50U2li
bGluZwotICAgIHZhciBlbG0gPSBlbGVtZW50Lm5leHRTaWJsaW5nOwotICAgIHdoaWxlIChlbG0g
IT0gbnVsbCAmJiBlbG0ubm9kZVR5cGUgIT09IDEpIHsKLSAgICAgIGVsbSA9IGVsbS5uZXh0U2li
bGluZzsKLSAgICB9Ci0gICAgcmV0dXJuIGVsbTsKLSAgfSwKLQotICBmaW5kOiBmdW5jdGlvbihl
bGVtZW50LCBzZWxlY3RvcikgewotICAgIHJldHVybiBlbGVtZW50LmdldEVsZW1lbnRzQnlUYWdO
YW1lKHNlbGVjdG9yKTsKLSAgfSwKLQotICBjbG9uZTogSlFMaXRlQ2xvbmUsCi0KLSAgdHJpZ2dl
ckhhbmRsZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIGV2ZW50TmFtZSkgewotICAgIHZhciBldmVudEZu
cyA9IChKUUxpdGVFeHBhbmRvU3RvcmUoZWxlbWVudCwgJ2V2ZW50cycpIHx8IHt9KVtldmVudE5h
bWVdOwotCi0gICAgZm9yRWFjaChldmVudEZucywgZnVuY3Rpb24oZm4pIHsKLSAgICAgIGZuLmNh
bGwoZWxlbWVudCwgbnVsbCk7Ci0gICAgfSk7Ci0gIH0KLX0sIGZ1bmN0aW9uKGZuLCBuYW1lKXsK
LSAgLyoqCi0gICAqIGNoYWluaW5nIGZ1bmN0aW9ucwotICAgKi8KLSAgSlFMaXRlLnByb3RvdHlw
ZVtuYW1lXSA9IGZ1bmN0aW9uKGFyZzEsIGFyZzIpIHsKLSAgICB2YXIgdmFsdWU7Ci0gICAgZm9y
KHZhciBpPTA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpZiAodmFsdWUgPT0gdW5k
ZWZpbmVkKSB7Ci0gICAgICAgIHZhbHVlID0gZm4odGhpc1tpXSwgYXJnMSwgYXJnMik7Ci0gICAg
ICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgLy8gYW55IGZ1bmN0aW9u
IHdoaWNoIHJldHVybnMgYSB2YWx1ZSBuZWVkcyB0byBiZSB3cmFwcGVkCi0gICAgICAgICAgdmFs
dWUgPSBqcUxpdGUodmFsdWUpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBK
UUxpdGVBZGROb2Rlcyh2YWx1ZSwgZm4odGhpc1tpXSwgYXJnMSwgYXJnMikpOwotICAgICAgfQot
ICAgIH0KLSAgICByZXR1cm4gdmFsdWUgPT0gdW5kZWZpbmVkID8gdGhpcyA6IHZhbHVlOwotICB9
OwotfSk7Ci0KLS8qKgotICogQ29tcHV0ZXMgYSBoYXNoIG9mIGFuICdvYmonLgotICogSGFzaCBv
ZiBhOgotICogIHN0cmluZyBpcyBzdHJpbmcKLSAqICBudW1iZXIgaXMgbnVtYmVyIGFzIHN0cmlu
ZwotICogIG9iamVjdCBpcyBlaXRoZXIgcmVzdWx0IG9mIGNhbGxpbmcgJCRoYXNoS2V5IGZ1bmN0
aW9uIG9uIHRoZSBvYmplY3Qgb3IgdW5pcXVlbHkgZ2VuZXJhdGVkIGlkLAotICogICAgICAgICB0
aGF0IGlzIGFsc28gYXNzaWduZWQgdG8gdGhlICQkaGFzaEtleSBwcm9wZXJ0eSBvZiB0aGUgb2Jq
ZWN0LgotICoKLSAqIEBwYXJhbSBvYmoKLSAqIEByZXR1cm5zIHtzdHJpbmd9IGhhc2ggc3RyaW5n
IHN1Y2ggdGhhdCB0aGUgc2FtZSBpbnB1dCB3aWxsIGhhdmUgdGhlIHNhbWUgaGFzaCBzdHJpbmcu
Ci0gKiAgICAgICAgIFRoZSByZXN1bHRpbmcgc3RyaW5nIGtleSBpcyBpbiAndHlwZTpoYXNoS2V5
JyBmb3JtYXQuCi0gKi8KLWZ1bmN0aW9uIGhhc2hLZXkob2JqKSB7Ci0gIHZhciBvYmpUeXBlID0g
dHlwZW9mIG9iaiwKLSAgICAgIGtleTsKLQotICBpZiAob2JqVHlwZSA9PSAnb2JqZWN0JyAmJiBv
YmogIT09IG51bGwpIHsKLSAgICBpZiAodHlwZW9mIChrZXkgPSBvYmouJCRoYXNoS2V5KSA9PSAn
ZnVuY3Rpb24nKSB7Ci0gICAgICAvLyBtdXN0IGludm9rZSBvbiBvYmplY3QgdG8ga2VlcCB0aGUg
cmlnaHQgdGhpcwotICAgICAga2V5ID0gb2JqLiQkaGFzaEtleSgpOwotICAgIH0gZWxzZSBpZiAo
a2V5ID09PSB1bmRlZmluZWQpIHsKLSAgICAgIGtleSA9IG9iai4kJGhhc2hLZXkgPSBuZXh0VWlk
KCk7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGtleSA9IG9iajsKLSAgfQotCi0gIHJldHVybiBv
YmpUeXBlICsgJzonICsga2V5OwotfQotCi0vKioKLSAqIEhhc2hNYXAgd2hpY2ggY2FuIHVzZSBv
YmplY3RzIGFzIGtleXMKLSAqLwotZnVuY3Rpb24gSGFzaE1hcChhcnJheSl7Ci0gIGZvckVhY2go
YXJyYXksIHRoaXMucHV0LCB0aGlzKTsKLX0KLUhhc2hNYXAucHJvdG90eXBlID0gewotICAvKioK
LSAgICogU3RvcmUga2V5IHZhbHVlIHBhaXIKLSAgICogQHBhcmFtIGtleSBrZXkgdG8gc3RvcmUg
Y2FuIGJlIGFueSB0eXBlCi0gICAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSB0byBzdG9yZSBjYW4gYmUg
YW55IHR5cGUKLSAgICovCi0gIHB1dDogZnVuY3Rpb24oa2V5LCB2YWx1ZSkgewotICAgIHRoaXNb
aGFzaEtleShrZXkpXSA9IHZhbHVlOwotICB9LAotCi0gIC8qKgotICAgKiBAcGFyYW0ga2V5Ci0g
ICAqIEByZXR1cm5zIHRoZSB2YWx1ZSBmb3IgdGhlIGtleQotICAgKi8KLSAgZ2V0OiBmdW5jdGlv
bihrZXkpIHsKLSAgICByZXR1cm4gdGhpc1toYXNoS2V5KGtleSldOwotICB9LAotCi0gIC8qKgot
ICAgKiBSZW1vdmUgdGhlIGtleS92YWx1ZSBwYWlyCi0gICAqIEBwYXJhbSBrZXkKLSAgICovCi0g
IHJlbW92ZTogZnVuY3Rpb24oa2V5KSB7Ci0gICAgdmFyIHZhbHVlID0gdGhpc1trZXkgPSBoYXNo
S2V5KGtleSldOwotICAgIGRlbGV0ZSB0aGlzW2tleV07Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9
Ci19OwotCi0vKioKLSAqIEEgbWFwIHdoZXJlIG11bHRpcGxlIHZhbHVlcyBjYW4gYmUgYWRkZWQg
dG8gdGhlIHNhbWUga2V5IHN1Y2ggdGhhdCB0aGV5IGZvcm0gYSBxdWV1ZS4KLSAqIEByZXR1cm5z
IHtIYXNoUXVldWVNYXB9Ci0gKi8KLWZ1bmN0aW9uIEhhc2hRdWV1ZU1hcCgpIHt9Ci1IYXNoUXVl
dWVNYXAucHJvdG90eXBlID0gewotICAvKioKLSAgICogU2FtZSBhcyBhcnJheSBwdXNoLCBidXQg
dXNpbmcgYW4gYXJyYXkgYXMgdGhlIHZhbHVlIGZvciB0aGUgaGFzaAotICAgKi8KLSAgcHVzaDog
ZnVuY3Rpb24oa2V5LCB2YWx1ZSkgewotICAgIHZhciBhcnJheSA9IHRoaXNba2V5ID0gaGFzaEtl
eShrZXkpXTsKLSAgICBpZiAoIWFycmF5KSB7Ci0gICAgICB0aGlzW2tleV0gPSBbdmFsdWVdOwot
ICAgIH0gZWxzZSB7Ci0gICAgICBhcnJheS5wdXNoKHZhbHVlKTsKLSAgICB9Ci0gIH0sCi0KLSAg
LyoqCi0gICAqIFNhbWUgYXMgYXJyYXkgc2hpZnQsIGJ1dCB1c2luZyBhbiBhcnJheSBhcyB0aGUg
dmFsdWUgZm9yIHRoZSBoYXNoCi0gICAqLwotICBzaGlmdDogZnVuY3Rpb24oa2V5KSB7Ci0gICAg
dmFyIGFycmF5ID0gdGhpc1trZXkgPSBoYXNoS2V5KGtleSldOwotICAgIGlmIChhcnJheSkgewot
ICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PSAxKSB7Ci0gICAgICAgIGRlbGV0ZSB0aGlzW2tleV07
Ci0gICAgICAgIHJldHVybiBhcnJheVswXTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVy
biBhcnJheS5zaGlmdCgpOwotICAgICAgfQotICAgIH0KLSAgfSwKLQotICAvKioKLSAgICogcmV0
dXJuIHRoZSBmaXJzdCBpdGVtIHdpdGhvdXQgZGVsZXRpbmcgaXQKLSAgICovCi0gIHBlZWs6IGZ1
bmN0aW9uKGtleSkgewotICAgIHZhciBhcnJheSA9IHRoaXNbaGFzaEtleShrZXkpXTsKLSAgICBp
ZiAoYXJyYXkpIHsKLSAgICByZXR1cm4gYXJyYXlbMF07Ci0gICAgfQotICB9Ci19OwotCi0vKioK
LSAqIEBuZ2RvYyBmdW5jdGlvbgotICogQG5hbWUgYW5ndWxhci5pbmplY3RvcgotICogQGZ1bmN0
aW9uCi0gKgotICogQGRlc2NyaXB0aW9uCi0gKiBDcmVhdGVzIGFuIGluamVjdG9yIGZ1bmN0aW9u
IHRoYXQgY2FuIGJlIHVzZWQgZm9yIHJldHJpZXZpbmcgc2VydmljZXMgYXMgd2VsbCBhcyBmb3IK
LSAqIGRlcGVuZGVuY3kgaW5qZWN0aW9uIChzZWUge0BsaW5rIGd1aWRlL2RpIGRlcGVuZGVuY3kg
aW5qZWN0aW9ufSkuCi0gKgotCi0gKiBAcGFyYW0ge0FycmF5LjxzdHJpbmd8RnVuY3Rpb24+fSBt
b2R1bGVzIEEgbGlzdCBvZiBtb2R1bGUgZnVuY3Rpb25zIG9yIHRoZWlyIGFsaWFzZXMuIFNlZQot
ICogICAgICAgIHtAbGluayBhbmd1bGFyLm1vZHVsZX0uIFRoZSBgbmdgIG1vZHVsZSBtdXN0IGJl
IGV4cGxpY2l0bHkgYWRkZWQuCi0gKiBAcmV0dXJucyB7ZnVuY3Rpb24oKX0gSW5qZWN0b3IgZnVu
Y3Rpb24uIFNlZSB7QGxpbmsgQVVUTy4kaW5qZWN0b3IgJGluamVjdG9yfS4KLSAqCi0gKiBAZXhh
bXBsZQotICogVHlwaWNhbCB1c2FnZQotICogPHByZT4KLSAqICAgLy8gY3JlYXRlIGFuIGluamVj
dG9yCi0gKiAgIHZhciAkaW5qZWN0b3IgPSBhbmd1bGFyLmluamVjdG9yKFsnbmcnXSk7Ci0gKgot
ICogICAvLyB1c2UgdGhlIGluamVjdG9yIHRvIGtpY2sgb2ZmIHlvdXIgYXBwbGljYXRpb24KLSAq
ICAgLy8gdXNlIHRoZSB0eXBlIGluZmVyZW5jZSB0byBhdXRvIGluamVjdCBhcmd1bWVudHMsIG9y
IHVzZSBpbXBsaWNpdCBpbmplY3Rpb24KLSAqICAgJGluamVjdG9yLmludm9rZShmdW5jdGlvbigk
cm9vdFNjb3BlLCAkY29tcGlsZSwgJGRvY3VtZW50KXsKLSAqICAgICAkY29tcGlsZSgkZG9jdW1l
bnQpKCRyb290U2NvcGUpOwotICogICAgICRyb290U2NvcGUuJGRpZ2VzdCgpOwotICogICB9KTsK
LSAqIDwvcHJlPgotICovCi0KLQotLyoqCi0gKiBAbmdkb2Mgb3ZlcnZpZXcKLSAqIEBuYW1lIEFV
VE8KLSAqIEBkZXNjcmlwdGlvbgotICoKLSAqIEltcGxpY2l0IG1vZHVsZSB3aGljaCBnZXRzIGF1
dG9tYXRpY2FsbHkgYWRkZWQgdG8gZWFjaCB7QGxpbmsgQVVUTy4kaW5qZWN0b3IgJGluamVjdG9y
fS4KLSAqLwotCi12YXIgRk5fQVJHUyA9IC9eZnVuY3Rpb25ccypbXlwoXSpcKFxzKihbXlwpXSop
XCkvbTsKLXZhciBGTl9BUkdfU1BMSVQgPSAvLC87Ci12YXIgRk5fQVJHID0gL15ccyooXz8pKFxT
Kz8pXDFccyokLzsKLXZhciBTVFJJUF9DT01NRU5UUyA9IC8oKFwvXC8uKiQpfChcL1wqW1xzXFNd
Kj9cKlwvKSkvbWc7Ci1mdW5jdGlvbiBhbm5vdGF0ZShmbikgewotICB2YXIgJGluamVjdCwKLSAg
ICAgIGZuVGV4dCwKLSAgICAgIGFyZ0RlY2wsCi0gICAgICBsYXN0OwotCi0gIGlmICh0eXBlb2Yg
Zm4gPT0gJ2Z1bmN0aW9uJykgewotICAgIGlmICghKCRpbmplY3QgPSBmbi4kaW5qZWN0KSkgewot
ICAgICAgJGluamVjdCA9IFtdOwotICAgICAgZm5UZXh0ID0gZm4udG9TdHJpbmcoKS5yZXBsYWNl
KFNUUklQX0NPTU1FTlRTLCAnJyk7Ci0gICAgICBhcmdEZWNsID0gZm5UZXh0Lm1hdGNoKEZOX0FS
R1MpOwotICAgICAgZm9yRWFjaChhcmdEZWNsWzFdLnNwbGl0KEZOX0FSR19TUExJVCksIGZ1bmN0
aW9uKGFyZyl7Ci0gICAgICAgIGFyZy5yZXBsYWNlKEZOX0FSRywgZnVuY3Rpb24oYWxsLCB1bmRl
cnNjb3JlLCBuYW1lKXsKLSAgICAgICAgICAkaW5qZWN0LnB1c2gobmFtZSk7Ci0gICAgICAgIH0p
OwotICAgICAgfSk7Ci0gICAgICBmbi4kaW5qZWN0ID0gJGluamVjdDsKLSAgICB9Ci0gIH0gZWxz
ZSBpZiAoaXNBcnJheShmbikpIHsKLSAgICBsYXN0ID0gZm4ubGVuZ3RoIC0gMTsKLSAgICBhc3Nl
cnRBcmdGbihmbltsYXN0XSwgJ2ZuJyk7Ci0gICAgJGluamVjdCA9IGZuLnNsaWNlKDAsIGxhc3Qp
OwotICB9IGVsc2UgewotICAgIGFzc2VydEFyZ0ZuKGZuLCAnZm4nLCB0cnVlKTsKLSAgfQotICBy
ZXR1cm4gJGluamVjdDsKLX0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCi0KLS8qKgotICogQG5nZG9jIG9iamVjdAotICogQG5hbWUgQVVUTy4kaW5qZWN0b3IKLSAq
IEBmdW5jdGlvbgotICoKLSAqIEBkZXNjcmlwdGlvbgotICoKLSAqIGAkaW5qZWN0b3JgIGlzIHVz
ZWQgdG8gcmV0cmlldmUgb2JqZWN0IGluc3RhbmNlcyBhcyBkZWZpbmVkIGJ5Ci0gKiB7QGxpbmsg
QVVUTy4kcHJvdmlkZSBwcm92aWRlcn0sIGluc3RhbnRpYXRlIHR5cGVzLCBpbnZva2UgbWV0aG9k
cywKLSAqIGFuZCBsb2FkIG1vZHVsZXMuCi0gKgotICogVGhlIGZvbGxvd2luZyBhbHdheXMgaG9s
ZHMgdHJ1ZToKLSAqCi0gKiA8cHJlPgotICogICB2YXIgJGluamVjdG9yID0gYW5ndWxhci5pbmpl
Y3RvcigpOwotICogICBleHBlY3QoJGluamVjdG9yLmdldCgnJGluamVjdG9yJykpLnRvQmUoJGlu
amVjdG9yKTsKLSAqICAgZXhwZWN0KCRpbmplY3Rvci5pbnZva2UoZnVuY3Rpb24oJGluamVjdG9y
KXsKLSAqICAgICByZXR1cm4gJGluamVjdG9yOwotICogICB9KS50b0JlKCRpbmplY3Rvcik7Ci0g
KiA8L3ByZT4KLSAqCi0gKiAjIEluamVjdGlvbiBGdW5jdGlvbiBBbm5vdGF0aW9uCi0gKgotICog
SmF2YVNjcmlwdCBkb2VzIG5vdCBoYXZlIGFubm90YXRpb25zLCBhbmQgYW5ub3RhdGlvbnMgYXJl
IG5lZWRlZCBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb24uIFRoZQotICogZm9sbG93aW5nIGFyZSBh
bGwgdmFsaWQgd2F5cyBvZiBhbm5vdGF0aW5nIGZ1bmN0aW9uIHdpdGggaW5qZWN0aW9uIGFyZ3Vt
ZW50cyBhbmQgYXJlIGVxdWl2YWxlbnQuCi0gKgotICogPHByZT4KLSAqICAgLy8gaW5mZXJyZWQg
KG9ubHkgd29ya3MgaWYgY29kZSBub3QgbWluaWZpZWQvb2JmdXNjYXRlZCkKLSAqICAgJGluamVj
dG9yLmludm9rZShmdW5jdGlvbihzZXJ2aWNlQSl7fSk7Ci0gKgotICogICAvLyBhbm5vdGF0ZWQK
LSAqICAgZnVuY3Rpb24gZXhwbGljaXQoc2VydmljZUEpIHt9OwotICogICBleHBsaWNpdC4kaW5q
ZWN0ID0gWydzZXJ2aWNlQSddOwotICogICAkaW5qZWN0b3IuaW52b2tlKGV4cGxpY2l0KTsKLSAq
Ci0gKiAgIC8vIGlubGluZQotICogICAkaW5qZWN0b3IuaW52b2tlKFsnc2VydmljZUEnLCBmdW5j
dGlvbihzZXJ2aWNlQSl7fV0pOwotICogPC9wcmU+Ci0gKgotICogIyMgSW5mZXJlbmNlCi0gKgot
ICogSW4gSmF2YVNjcmlwdCBjYWxsaW5nIGB0b1N0cmluZygpYCBvbiBhIGZ1bmN0aW9uIHJldHVy
bnMgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uIFRoZSBkZWZpbml0aW9uIGNhbiB0aGVuIGJlCi0g
KiBwYXJzZWQgYW5kIHRoZSBmdW5jdGlvbiBhcmd1bWVudHMgY2FuIGJlIGV4dHJhY3RlZC4gKk5P
VEU6KiBUaGlzIGRvZXMgbm90IHdvcmsgd2l0aCBtaW5pZmljYXRpb24sIGFuZCBvYmZ1c2NhdGlv
bgotICogdG9vbHMgc2luY2UgdGhlc2UgdG9vbHMgY2hhbmdlIHRoZSBhcmd1bWVudCBuYW1lcy4K
LSAqCi0gKiAjIyBgJGluamVjdGAgQW5ub3RhdGlvbgotICogQnkgYWRkaW5nIGEgYCRpbmplY3Rg
IHByb3BlcnR5IG9udG8gYSBmdW5jdGlvbiB0aGUgaW5qZWN0aW9uIHBhcmFtZXRlcnMgY2FuIGJl
IHNwZWNpZmllZC4KLSAqCi0gKiAjIyBJbmxpbmUKLSAqIEFzIGFuIGFycmF5IG9mIGluamVjdGlv
biBuYW1lcywgd2hlcmUgdGhlIGxhc3QgaXRlbSBpbiB0aGUgYXJyYXkgaXMgdGhlIGZ1bmN0aW9u
IHRvIGNhbGwuCi0gKi8KLQotLyoqCi0gKiBAbmdkb2MgbWV0aG9kCi0gKiBAbmFtZSBBVVRPLiRp
bmplY3RvciNnZXQKLSAqIEBtZXRob2RPZiBBVVRPLiRpbmplY3RvcgotICoKLSAqIEBkZXNjcmlw
dGlvbgotICogUmV0dXJuIGFuIGluc3RhbmNlIG9mIHRoZSBzZXJ2aWNlLgotICoKLSAqIEBwYXJh
bSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBpbnN0YW5jZSB0byByZXRyaWV2ZS4KLSAq
IEByZXR1cm4geyp9IFRoZSBpbnN0YW5jZS4KLSAqLwotCi0vKioKLSAqIEBuZ2RvYyBtZXRob2QK
LSAqIEBuYW1lIEFVVE8uJGluamVjdG9yI2ludm9rZQotICogQG1ldGhvZE9mIEFVVE8uJGluamVj
dG9yCi0gKgotICogQGRlc2NyaXB0aW9uCi0gKiBJbnZva2UgdGhlIG1ldGhvZCBhbmQgc3VwcGx5
IHRoZSBtZXRob2QgYXJndW1lbnRzIGZyb20gdGhlIGAkaW5qZWN0b3JgLgotICoKLSAqIEBwYXJh
bSB7IWZ1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLiBUaGUgZnVuY3Rpb24gYXJn
dW1lbnRzIGNvbWUgZm9ybSB0aGUgZnVuY3Rpb24gYW5ub3RhdGlvbi4KLSAqIEBwYXJhbSB7T2Jq
ZWN0PX0gc2VsZiBUaGUgYHRoaXNgIGZvciB0aGUgaW52b2tlZCBtZXRob2QuCi0gKiBAcGFyYW0g
e09iamVjdD19IGxvY2FscyBPcHRpb25hbCBvYmplY3QuIElmIHByZXNldCB0aGVuIGFueSBhcmd1
bWVudCBuYW1lcyBhcmUgcmVhZCBmcm9tIHRoaXMgb2JqZWN0IGZpcnN0LCBiZWZvcmUKLSAqICAg
dGhlIGAkaW5qZWN0b3JgIGlzIGNvbnN1bHRlZC4KLSAqIEByZXR1cm5zIHsqfSB0aGUgdmFsdWUg
cmV0dXJuZWQgYnkgdGhlIGludm9rZWQgYGZuYCBmdW5jdGlvbi4KLSAqLwotCi0vKioKLSAqIEBu
Z2RvYyBtZXRob2QKLSAqIEBuYW1lIEFVVE8uJGluamVjdG9yI2luc3RhbnRpYXRlCi0gKiBAbWV0
aG9kT2YgQVVUTy4kaW5qZWN0b3IKLSAqIEBkZXNjcmlwdGlvbgotICogQ3JlYXRlIGEgbmV3IGlu
c3RhbmNlIG9mIEpTIHR5cGUuIFRoZSBtZXRob2QgdGFrZXMgYSBjb25zdHJ1Y3RvciBmdW5jdGlv
biBpbnZva2VzIHRoZSBuZXcgb3BlcmF0b3IgYW5kIHN1cHBsaWVzCi0gKiBhbGwgb2YgdGhlIGFy
Z3VtZW50cyB0byB0aGUgY29uc3RydWN0b3IgZnVuY3Rpb24gYXMgc3BlY2lmaWVkIGJ5IHRoZSBj
b25zdHJ1Y3RvciBhbm5vdGF0aW9uLgotICoKLSAqIEBwYXJhbSB7ZnVuY3Rpb259IFR5cGUgQW5u
b3RhdGVkIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLgotICogQHBhcmFtIHtPYmplY3Q9fSBsb2NhbHMg
T3B0aW9uYWwgb2JqZWN0LiBJZiBwcmVzZXQgdGhlbiBhbnkgYXJndW1lbnQgbmFtZXMgYXJlIHJl
YWQgZnJvbSB0aGlzIG9iamVjdCBmaXJzdCwgYmVmb3JlCi0gKiAgIHRoZSBgJGluamVjdG9yYCBp
cyBjb25zdWx0ZWQuCi0gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXcgaW5zdGFuY2Ugb2YgYFR5cGVg
LgotICovCi0KLS8qKgotICogQG5nZG9jIG1ldGhvZAotICogQG5hbWUgQVVUTy4kaW5qZWN0b3Ij
YW5ub3RhdGUKLSAqIEBtZXRob2RPZiBBVVRPLiRpbmplY3RvcgotICoKLSAqIEBkZXNjcmlwdGlv
bgotICogUmV0dXJucyBhbiBhcnJheSBvZiBzZXJ2aWNlIG5hbWVzIHdoaWNoIHRoZSBmdW5jdGlv
biBpcyByZXF1ZXN0aW5nIGZvciBpbmplY3Rpb24uIFRoaXMgQVBJIGlzIHVzZWQgYnkgdGhlIGlu
amVjdG9yCi0gKiB0byBkZXRlcm1pbmUgd2hpY2ggc2VydmljZXMgbmVlZCB0byBiZSBpbmplY3Rl
ZCBpbnRvIHRoZSBmdW5jdGlvbiB3aGVuIHRoZSBmdW5jdGlvbiBpcyBpbnZva2VkLiBUaGVyZSBh
cmUgdGhyZWUKLSAqIHdheXMgaW4gd2hpY2ggdGhlIGZ1bmN0aW9uIGNhbiBiZSBhbm5vdGF0ZWQg
d2l0aCB0aGUgbmVlZGVkIGRlcGVuZGVuY2llcy4KLSAqCi0gKiAjIEFyZ3VtZW50IG5hbWVzCi0g
KgotICogVGhlIHNpbXBsZXN0IGZvcm0gaXMgdG8gZXh0cmFjdCB0aGUgZGVwZW5kZW5jaWVzIGZy
b20gdGhlIGFyZ3VtZW50cyBvZiB0aGUgZnVuY3Rpb24uIFRoaXMgaXMgZG9uZSBieSBjb252ZXJ0
aW5nCi0gKiB0aGUgZnVuY3Rpb24gaW50byBhIHN0cmluZyB1c2luZyBgdG9TdHJpbmcoKWAgbWV0
aG9kIGFuZCBleHRyYWN0aW5nIHRoZSBhcmd1bWVudCBuYW1lcy4KLSAqIDxwcmU+Ci0gKiAgIC8v
IEdpdmVuCi0gKiAgIGZ1bmN0aW9uIE15Q29udHJvbGxlcigkc2NvcGUsICRyb3V0ZSkgewotICog
ICAgIC8vIC4uLgotICogICB9Ci0gKgotICogICAvLyBUaGVuCi0gKiAgIGV4cGVjdChpbmplY3Rv
ci5hbm5vdGF0ZShNeUNvbnRyb2xsZXIpKS50b0VxdWFsKFsnJHNjb3BlJywgJyRyb3V0ZSddKTsK
LSAqIDwvcHJlPgotICoKLSAqIFRoaXMgbWV0aG9kIGRvZXMgbm90IHdvcmsgd2l0aCBjb2RlIG1p
bmZpY2F0aW9uIC8gb2JmdXNjYXRpb24uIEZvciB0aGlzIHJlYXNvbiB0aGUgZm9sbG93aW5nIGFu
bm90YXRpb24gc3RyYXRlZ2llcwotICogYXJlIHN1cHBvcnRlZC4KLSAqCi0gKiAjIFRoZSBgJGlu
amVjdGAgcHJvcGVydHkKLSAqCi0gKiBJZiBhIGZ1bmN0aW9uIGhhcyBhbiBgJGluamVjdGAgcHJv
cGVydHkgYW5kIGl0cyB2YWx1ZSBpcyBhbiBhcnJheSBvZiBzdHJpbmdzLCB0aGVuIHRoZSBzdHJp
bmdzIHJlcHJlc2VudCBuYW1lcyBvZgotICogc2VydmljZXMgdG8gYmUgaW5qZWN0ZWQgaW50byB0
aGUgZnVuY3Rpb24uCi0gKiA8cHJlPgotICogICAvLyBHaXZlbgotICogICB2YXIgTXlDb250cm9s
bGVyID0gZnVuY3Rpb24ob2JmdXNjYXRlZFNjb3BlLCBvYmZ1c2NhdGVkUm91dGUpIHsKLSAqICAg
ICAvLyAuLi4KLSAqICAgfQotICogICAvLyBEZWZpbmUgZnVuY3Rpb24gZGVwZW5kZW5jaWVzCi0g
KiAgIE15Q29udHJvbGxlci4kaW5qZWN0ID0gWyckc2NvcGUnLCAnJHJvdXRlJ107Ci0gKgotICog
ICAvLyBUaGVuCi0gKiAgIGV4cGVjdChpbmplY3Rvci5hbm5vdGF0ZShNeUNvbnRyb2xsZXIpKS50
b0VxdWFsKFsnJHNjb3BlJywgJyRyb3V0ZSddKTsKLSAqIDwvcHJlPgotICoKLSAqICMgVGhlIGFy
cmF5IG5vdGF0aW9uCi0gKgotICogSXQgaXMgb2Z0ZW4gZGVzaXJhYmxlIHRvIGlubGluZSBJbmpl
Y3RlZCBmdW5jdGlvbnMgYW5kIHRoYXQncyB3aGVuIHNldHRpbmcgdGhlIGAkaW5qZWN0YCBwcm9w
ZXJ0eSBpcyB2ZXJ5Ci0gKiBpbmNvbnZlbmllbnQuIEluIHRoZXNlIHNpdHVhdGlvbnMgdXNpbmcg
dGhlIGFycmF5IG5vdGF0aW9uIHRvIHNwZWNpZnkgdGhlIGRlcGVuZGVuY2llcyBpbiBhIHdheSB0
aGF0IHN1cnZpdmVzCi0gKiBtaW5pZmljYXRpb24gaXMgYSBiZXR0ZXIgY2hvaWNlOgotICoKLSAq
IDxwcmU+Ci0gKiAgIC8vIFdlIHdpc2ggdG8gd3JpdGUgdGhpcyAobm90IG1pbmlmaWNhdGlvbiAv
IG9iZnVzY2F0aW9uIHNhZmUpCi0gKiAgIGluamVjdG9yLmludm9rZShmdW5jdGlvbigkY29tcGls
ZSwgJHJvb3RTY29wZSkgewotICogICAgIC8vIC4uLgotICogICB9KTsKLSAqCi0gKiAgIC8vIFdl
IGFyZSBmb3JjZWQgdG8gd3JpdGUgYnJlYWsgaW5saW5pbmcKLSAqICAgdmFyIHRtcEZuID0gZnVu
Y3Rpb24ob2JmdXNjYXRlZENvbXBpbGUsIG9iZnVzY2F0ZWRSb290U2NvcGUpIHsKLSAqICAgICAv
LyAuLi4KLSAqICAgfTsKLSAqICAgdG1wRm4uJGluamVjdCA9IFsnJGNvbXBpbGUnLCAnJHJvb3RT
Y29wZSddOwotICogICBpbmplY3Rvci5pbnZva2UodG1wRm4pOwotICoKLSAqICAgLy8gVG8gYmV0
dGVyIHN1cHBvcnQgaW5saW5lIGZ1bmN0aW9uIHRoZSBpbmxpbmUgYW5ub3RhdGlvbiBpcyBzdXBw
b3J0ZWQKLSAqICAgaW5qZWN0b3IuaW52b2tlKFsnJGNvbXBpbGUnLCAnJHJvb3RTY29wZScsIGZ1
bmN0aW9uKG9iZkNvbXBpbGUsIG9iZlJvb3RTY29wZSkgewotICogICAgIC8vIC4uLgotICogICB9
XSk7Ci0gKgotICogICAvLyBUaGVyZWZvcmUKLSAqICAgZXhwZWN0KGluamVjdG9yLmFubm90YXRl
KAotICogICAgICBbJyRjb21waWxlJywgJyRyb290U2NvcGUnLCBmdW5jdGlvbihvYmZ1c18kY29t
cGlsZSwgb2JmdXNfJHJvb3RTY29wZSkge31dKQotICogICAgKS50b0VxdWFsKFsnJGNvbXBpbGUn
LCAnJHJvb3RTY29wZSddKTsKLSAqIDwvcHJlPgotICoKLSAqIEBwYXJhbSB7ZnVuY3Rpb258QXJy
YXkuPHN0cmluZ3xGdW5jdGlvbj59IGZuIEZ1bmN0aW9uIGZvciB3aGljaCBkZXBlbmRlbnQgc2Vy
dmljZSBuYW1lcyBuZWVkIHRvIGJlIHJldHJpZXZlZCBhcyBkZXNjcmliZWQKLSAqICAgYWJvdmUu
Ci0gKgotICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fSBUaGUgbmFtZXMgb2YgdGhlIHNlcnZp
Y2VzIHdoaWNoIHRoZSBmdW5jdGlvbiByZXF1aXJlcy4KLSAqLwotCi0KLQotCi0vKioKLSAqIEBu
Z2RvYyBvYmplY3QKLSAqIEBuYW1lIEFVVE8uJHByb3ZpZGUKLSAqCi0gKiBAZGVzY3JpcHRpb24K
LSAqCi0gKiBVc2UgYCRwcm92aWRlYCB0byByZWdpc3RlciBuZXcgcHJvdmlkZXJzIHdpdGggdGhl
IGAkaW5qZWN0b3JgLiBUaGUgcHJvdmlkZXJzIGFyZSB0aGUgZmFjdG9yaWVzIGZvciB0aGUgaW5z
dGFuY2UuCi0gKiBUaGUgcHJvdmlkZXJzIHNoYXJlIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGluc3Rh
bmNlIHRoZXkgY3JlYXRlIHdpdGggYFByb3ZpZGVyYCBzdWZmaXhlZCB0byB0aGVtLgotICoKLSAq
IEEgcHJvdmlkZXIgaXMgYW4gb2JqZWN0IHdpdGggYSBgJGdldCgpYCBtZXRob2QuIFRoZSBpbmpl
Y3RvciBjYWxscyB0aGUgYCRnZXRgIG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YK
LSAqIGEgc2VydmljZS4gVGhlIFByb3ZpZGVyIGNhbiBoYXZlIGFkZGl0aW9uYWwgbWV0aG9kcyB3
aGljaCB3b3VsZCBhbGxvdyBmb3IgY29uZmlndXJhdGlvbiBvZiB0aGUgcHJvdmlkZXIuCi0gKgot
ICogPHByZT4KLSAqICAgZnVuY3Rpb24gR3JlZXRQcm92aWRlcigpIHsKLSAqICAgICB2YXIgc2Fs
dXRhdGlvbiA9ICdIZWxsbyc7Ci0gKgotICogICAgIHRoaXMuc2FsdXRhdGlvbiA9IGZ1bmN0aW9u
KHRleHQpIHsKLSAqICAgICAgIHNhbHV0YXRpb24gPSB0ZXh0OwotICogICAgIH07Ci0gKgotICog
ICAgIHRoaXMuJGdldCA9IGZ1bmN0aW9uKCkgewotICogICAgICAgcmV0dXJuIGZ1bmN0aW9uIChu
YW1lKSB7Ci0gKiAgICAgICAgIHJldHVybiBzYWx1dGF0aW9uICsgJyAnICsgbmFtZSArICchJzsK
LSAqICAgICAgIH07Ci0gKiAgICAgfTsKLSAqICAgfQotICoKLSAqICAgZGVzY3JpYmUoJ0dyZWV0
ZXInLCBmdW5jdGlvbigpewotICoKLSAqICAgICBiZWZvcmVFYWNoKG1vZHVsZShmdW5jdGlvbigk
cHJvdmlkZSkgewotICogICAgICAgJHByb3ZpZGUucHJvdmlkZXIoJ2dyZWV0JywgR3JlZXRQcm92
aWRlcik7Ci0gKiAgICAgfSkpOwotICoKLSAqICAgICBpdCgnc2hvdWxkIGdyZWV0JywgaW5qZWN0
KGZ1bmN0aW9uKGdyZWV0KSB7Ci0gKiAgICAgICBleHBlY3QoZ3JlZXQoJ2FuZ3VsYXInKSkudG9F
cXVhbCgnSGVsbG8gYW5ndWxhciEnKTsKLSAqICAgICB9KSk7Ci0gKgotICogICAgIGl0KCdzaG91
bGQgYWxsb3cgY29uZmlndXJhdGlvbiBvZiBzYWx1dGF0aW9uJywgZnVuY3Rpb24oKSB7Ci0gKiAg
ICAgICBtb2R1bGUoZnVuY3Rpb24oZ3JlZXRQcm92aWRlcikgewotICogICAgICAgICBncmVldFBy
b3ZpZGVyLnNhbHV0YXRpb24oJ0Fob2onKTsKLSAqICAgICAgIH0pOwotICogICAgICAgaW5qZWN0
KGZ1bmN0aW9uKGdyZWV0KSB7Ci0gKiAgICAgICAgIGV4cGVjdChncmVldCgnYW5ndWxhcicpKS50
b0VxdWFsKCdBaG9qIGFuZ3VsYXIhJyk7Ci0gKiAgICAgICB9KTsKLSAqICAgICB9KTsKLSAqIDwv
cHJlPgotICovCi0KLS8qKgotICogQG5nZG9jIG1ldGhvZAotICogQG5hbWUgQVVUTy4kcHJvdmlk
ZSNwcm92aWRlcgotICogQG1ldGhvZE9mIEFVVE8uJHByb3ZpZGUKLSAqIEBkZXNjcmlwdGlvbgot
ICoKLSAqIFJlZ2lzdGVyIGEgcHJvdmlkZXIgZm9yIGEgc2VydmljZS4gVGhlIHByb3ZpZGVycyBj
YW4gYmUgcmV0cmlldmVkIGFuZCBjYW4gaGF2ZSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gbWV0
aG9kcy4KLSAqCi0gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgaW5zdGFu
Y2UuIE5PVEU6IHRoZSBwcm92aWRlciB3aWxsIGJlIGF2YWlsYWJsZSB1bmRlciBgbmFtZSArICdQ
cm92aWRlcidgIGtleS4KLSAqIEBwYXJhbSB7KE9iamVjdHxmdW5jdGlvbigpKX0gcHJvdmlkZXIg
SWYgdGhlIHByb3ZpZGVyIGlzOgotICoKLSAqICAgLSBgT2JqZWN0YDogdGhlbiBpdCBzaG91bGQg
aGF2ZSBhIGAkZ2V0YCBtZXRob2QuIFRoZSBgJGdldGAgbWV0aG9kIHdpbGwgYmUgaW52b2tlZCB1
c2luZwotICogICAgICAgICAgICAgICB7QGxpbmsgQVVUTy4kaW5qZWN0b3IjaW52b2tlICRpbmpl
Y3Rvci5pbnZva2UoKX0gd2hlbiBhbiBpbnN0YW5jZSBuZWVkcyB0byBiZSBjcmVhdGVkLgotICog
ICAtIGBDb25zdHJ1Y3RvcmA6IGEgbmV3IGluc3RhbmNlIG9mIHRoZSBwcm92aWRlciB3aWxsIGJl
IGNyZWF0ZWQgdXNpbmcKLSAqICAgICAgICAgICAgICAge0BsaW5rIEFVVE8uJGluamVjdG9yI2lu
c3RhbnRpYXRlICRpbmplY3Rvci5pbnN0YW50aWF0ZSgpfSwgdGhlbiB0cmVhdGVkIGFzIGBvYmpl
Y3RgLgotICoKLSAqIEByZXR1cm5zIHtPYmplY3R9IHJlZ2lzdGVyZWQgcHJvdmlkZXIgaW5zdGFu
Y2UKLSAqLwotCi0vKioKLSAqIEBuZ2RvYyBtZXRob2QKLSAqIEBuYW1lIEFVVE8uJHByb3ZpZGUj
ZmFjdG9yeQotICogQG1ldGhvZE9mIEFVVE8uJHByb3ZpZGUKLSAqIEBkZXNjcmlwdGlvbgotICoK
LSAqIEEgc2hvcnQgaGFuZCBmb3IgY29uZmlndXJpbmcgc2VydmljZXMgaWYgb25seSBgJGdldGAg
bWV0aG9kIGlzIHJlcXVpcmVkLgotICoKLSAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1l
IG9mIHRoZSBpbnN0YW5jZS4KLSAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gJGdldEZuIFRoZSAkZ2V0
Rm4gZm9yIHRoZSBpbnN0YW5jZSBjcmVhdGlvbi4gSW50ZXJuYWxseSB0aGlzIGlzIGEgc2hvcnQg
aGFuZCBmb3IKLSAqIGAkcHJvdmlkZS5wcm92aWRlcihuYW1lLCB7JGdldDogJGdldEZufSlgLgot
ICogQHJldHVybnMge09iamVjdH0gcmVnaXN0ZXJlZCBwcm92aWRlciBpbnN0YW5jZQotICovCi0K
LQotLyoqCi0gKiBAbmdkb2MgbWV0aG9kCi0gKiBAbmFtZSBBVVRPLiRwcm92aWRlI3NlcnZpY2UK
LSAqIEBtZXRob2RPZiBBVVRPLiRwcm92aWRlCi0gKiBAZGVzY3JpcHRpb24KLSAqCi0gKiBBIHNo
b3J0IGhhbmQgZm9yIHJlZ2lzdGVyaW5nIHNlcnZpY2Ugb2YgZ2l2ZW4gY2xhc3MuCi0gKgotICog
QHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGluc3RhbmNlLgotICogQHBhcmFt
IHtGdW5jdGlvbn0gY29uc3RydWN0b3IgQSBjbGFzcyAoY29uc3RydWN0b3IgZnVuY3Rpb24pIHRo
YXQgd2lsbCBiZSBpbnN0YW50aWF0ZWQuCi0gKiBAcmV0dXJucyB7T2JqZWN0fSByZWdpc3RlcmVk
IHByb3ZpZGVyIGluc3RhbmNlCi0gKi8KLQotCi0vKioKLSAqIEBuZ2RvYyBtZXRob2QKLSAqIEBu
YW1lIEFVVE8uJHByb3ZpZGUjdmFsdWUKLSAqIEBtZXRob2RPZiBBVVRPLiRwcm92aWRlCi0gKiBA
ZGVzY3JpcHRpb24KLSAqCi0gKiBBIHNob3J0IGhhbmQgZm9yIGNvbmZpZ3VyaW5nIHNlcnZpY2Vz
IGlmIHRoZSBgJGdldGAgbWV0aG9kIGlzIGEgY29uc3RhbnQuCi0gKgotICogQHBhcmFtIHtzdHJp
bmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGluc3RhbmNlLgotICogQHBhcmFtIHsqfSB2YWx1ZSBU
aGUgdmFsdWUuCi0gKiBAcmV0dXJucyB7T2JqZWN0fSByZWdpc3RlcmVkIHByb3ZpZGVyIGluc3Rh
bmNlCi0gKi8KLQotCi0vKioKLSAqIEBuZ2RvYyBtZXRob2QKLSAqIEBuYW1lIEFVVE8uJHByb3Zp
ZGUjY29uc3RhbnQKLSAqIEBtZXRob2RPZiBBVVRPLiRwcm92aWRlCi0gKiBAZGVzY3JpcHRpb24K
LSAqCi0gKiBBIGNvbnN0YW50IHZhbHVlLCBidXQgdW5saWtlIHtAbGluayBBVVRPLiRwcm92aWRl
I3ZhbHVlIHZhbHVlfSBpdCBjYW4gYmUgaW5qZWN0ZWQKLSAqIGludG8gY29uZmlndXJhdGlvbiBm
dW5jdGlvbiAob3RoZXIgbW9kdWxlcykgYW5kIGl0IGlzIG5vdCBpbnRlcmNlcHRhYmxlIGJ5Ci0g
KiB7QGxpbmsgQVVUTy4kcHJvdmlkZSNkZWNvcmF0b3IgZGVjb3JhdG9yfS4KLSAqCi0gKiBAcGFy
YW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgY29uc3RhbnQuCi0gKiBAcGFyYW0geyp9
IHZhbHVlIFRoZSBjb25zdGFudCB2YWx1ZS4KLSAqIEByZXR1cm5zIHtPYmplY3R9IHJlZ2lzdGVy
ZWQgaW5zdGFuY2UKLSAqLwotCi0KLS8qKgotICogQG5nZG9jIG1ldGhvZAotICogQG5hbWUgQVVU
Ty4kcHJvdmlkZSNkZWNvcmF0b3IKLSAqIEBtZXRob2RPZiBBVVRPLiRwcm92aWRlCi0gKiBAZGVz
Y3JpcHRpb24KLSAqCi0gKiBEZWNvcmF0aW9uIG9mIHNlcnZpY2UsIGFsbG93cyB0aGUgZGVjb3Jh
dG9yIHRvIGludGVyY2VwdCB0aGUgc2VydmljZSBpbnN0YW5jZSBjcmVhdGlvbi4gVGhlCi0gKiBy
ZXR1cm5lZCBpbnN0YW5jZSBtYXkgYmUgdGhlIG9yaWdpbmFsIGluc3RhbmNlLCBvciBhIG5ldyBp
bnN0YW5jZSB3aGljaCBkZWxlZ2F0ZXMgdG8gdGhlCi0gKiBvcmlnaW5hbCBpbnN0YW5jZS4KLSAq
Ci0gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgc2VydmljZSB0byBkZWNv
cmF0ZS4KLSAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gZGVjb3JhdG9yIFRoaXMgZnVuY3Rpb24gd2ls
bCBiZSBpbnZva2VkIHdoZW4gdGhlIHNlcnZpY2UgbmVlZHMgdG8gYmUKLSAqICAgIGluc3RhbnRp
YXRlZC4gVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB1c2luZyB0aGUge0BsaW5rIEFVVE8uJGluamVj
dG9yI2ludm9rZQotICogICAgaW5qZWN0b3IuaW52b2tlfSBtZXRob2QgYW5kIGlzIHRoZXJlZm9y
ZSBmdWxseSBpbmplY3RhYmxlLiBMb2NhbCBpbmplY3Rpb24gYXJndW1lbnRzOgotICoKLSAqICAg
ICogYCRkZWxlZ2F0ZWAgLSBUaGUgb3JpZ2luYWwgc2VydmljZSBpbnN0YW5jZSwgd2hpY2ggY2Fu
IGJlIG1vbmtleSBwYXRjaGVkLCBjb25maWd1cmVkLAotICogICAgICBkZWNvcmF0ZWQgb3IgZGVs
ZWdhdGVkIHRvLgotICovCi0KLQotZnVuY3Rpb24gY3JlYXRlSW5qZWN0b3IobW9kdWxlc1RvTG9h
ZCkgewotICB2YXIgSU5TVEFOVElBVElORyA9IHt9LAotICAgICAgcHJvdmlkZXJTdWZmaXggPSAn
UHJvdmlkZXInLAotICAgICAgcGF0aCA9IFtdLAotICAgICAgbG9hZGVkTW9kdWxlcyA9IG5ldyBI
YXNoTWFwKCksCi0gICAgICBwcm92aWRlckNhY2hlID0gewotICAgICAgICAkcHJvdmlkZTogewot
ICAgICAgICAgICAgcHJvdmlkZXI6IHN1cHBvcnRPYmplY3QocHJvdmlkZXIpLAotICAgICAgICAg
ICAgZmFjdG9yeTogc3VwcG9ydE9iamVjdChmYWN0b3J5KSwKLSAgICAgICAgICAgIHNlcnZpY2U6
IHN1cHBvcnRPYmplY3Qoc2VydmljZSksCi0gICAgICAgICAgICB2YWx1ZTogc3VwcG9ydE9iamVj
dCh2YWx1ZSksCi0gICAgICAgICAgICBjb25zdGFudDogc3VwcG9ydE9iamVjdChjb25zdGFudCks
Ci0gICAgICAgICAgICBkZWNvcmF0b3I6IGRlY29yYXRvcgotICAgICAgICAgIH0KLSAgICAgIH0s
Ci0gICAgICBwcm92aWRlckluamVjdG9yID0gY3JlYXRlSW50ZXJuYWxJbmplY3Rvcihwcm92aWRl
ckNhY2hlLCBmdW5jdGlvbigpIHsKLSAgICAgICAgdGhyb3cgRXJyb3IoIlVua25vd24gcHJvdmlk
ZXI6ICIgKyBwYXRoLmpvaW4oJyA8LSAnKSk7Ci0gICAgICB9KSwKLSAgICAgIGluc3RhbmNlQ2Fj
aGUgPSB7fSwKLSAgICAgIGluc3RhbmNlSW5qZWN0b3IgPSAoaW5zdGFuY2VDYWNoZS4kaW5qZWN0
b3IgPQotICAgICAgICAgIGNyZWF0ZUludGVybmFsSW5qZWN0b3IoaW5zdGFuY2VDYWNoZSwgZnVu
Y3Rpb24oc2VydmljZW5hbWUpIHsKLSAgICAgICAgICAgIHZhciBwcm92aWRlciA9IHByb3ZpZGVy
SW5qZWN0b3IuZ2V0KHNlcnZpY2VuYW1lICsgcHJvdmlkZXJTdWZmaXgpOwotICAgICAgICAgICAg
cmV0dXJuIGluc3RhbmNlSW5qZWN0b3IuaW52b2tlKHByb3ZpZGVyLiRnZXQsIHByb3ZpZGVyKTsK
LSAgICAgICAgICB9KSk7Ci0KLQotICBmb3JFYWNoKGxvYWRNb2R1bGVzKG1vZHVsZXNUb0xvYWQp
LCBmdW5jdGlvbihmbikgeyBpbnN0YW5jZUluamVjdG9yLmludm9rZShmbiB8fCBub29wKTsgfSk7
Ci0KLSAgcmV0dXJuIGluc3RhbmNlSW5qZWN0b3I7Ci0KLSAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0gIC8vICRwcm92aWRlcgotICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KLQotICBmdW5jdGlvbiBzdXBwb3J0T2JqZWN0KGRlbGVnYXRlKSB7Ci0g
ICAgcmV0dXJuIGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKLSAgICAgIGlmIChpc09iamVjdChrZXkp
KSB7Ci0gICAgICAgIGZvckVhY2goa2V5LCByZXZlcnNlUGFyYW1zKGRlbGVnYXRlKSk7Ci0gICAg
ICB9IGVsc2UgewotICAgICAgICByZXR1cm4gZGVsZWdhdGUoa2V5LCB2YWx1ZSk7Ci0gICAgICB9
Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gcHJvdmlkZXIobmFtZSwgcHJvdmlkZXJfKSB7Ci0g
ICAgaWYgKGlzRnVuY3Rpb24ocHJvdmlkZXJfKSB8fCBpc0FycmF5KHByb3ZpZGVyXykpIHsKLSAg
ICAgIHByb3ZpZGVyXyA9IHByb3ZpZGVySW5qZWN0b3IuaW5zdGFudGlhdGUocHJvdmlkZXJfKTsK
LSAgICB9Ci0gICAgaWYgKCFwcm92aWRlcl8uJGdldCkgewotICAgICAgdGhyb3cgRXJyb3IoJ1By
b3ZpZGVyICcgKyBuYW1lICsgJyBtdXN0IGRlZmluZSAkZ2V0IGZhY3RvcnkgbWV0aG9kLicpOwot
ICAgIH0KLSAgICByZXR1cm4gcHJvdmlkZXJDYWNoZVtuYW1lICsgcHJvdmlkZXJTdWZmaXhdID0g
cHJvdmlkZXJfOwotICB9Ci0KLSAgZnVuY3Rpb24gZmFjdG9yeShuYW1lLCBmYWN0b3J5Rm4pIHsg
cmV0dXJuIHByb3ZpZGVyKG5hbWUsIHsgJGdldDogZmFjdG9yeUZuIH0pOyB9Ci0KLSAgZnVuY3Rp
b24gc2VydmljZShuYW1lLCBjb25zdHJ1Y3RvcikgewotICAgIHJldHVybiBmYWN0b3J5KG5hbWUs
IFsnJGluamVjdG9yJywgZnVuY3Rpb24oJGluamVjdG9yKSB7Ci0gICAgICByZXR1cm4gJGluamVj
dG9yLmluc3RhbnRpYXRlKGNvbnN0cnVjdG9yKTsKLSAgICB9XSk7Ci0gIH0KLQotICBmdW5jdGlv
biB2YWx1ZShuYW1lLCB2YWx1ZSkgeyByZXR1cm4gZmFjdG9yeShuYW1lLCB2YWx1ZUZuKHZhbHVl
KSk7IH0KLQotICBmdW5jdGlvbiBjb25zdGFudChuYW1lLCB2YWx1ZSkgewotICAgIHByb3ZpZGVy
Q2FjaGVbbmFtZV0gPSB2YWx1ZTsKLSAgICBpbnN0YW5jZUNhY2hlW25hbWVdID0gdmFsdWU7Ci0g
IH0KLQotICBmdW5jdGlvbiBkZWNvcmF0b3Ioc2VydmljZU5hbWUsIGRlY29yRm4pIHsKLSAgICB2
YXIgb3JpZ1Byb3ZpZGVyID0gcHJvdmlkZXJJbmplY3Rvci5nZXQoc2VydmljZU5hbWUgKyBwcm92
aWRlclN1ZmZpeCksCi0gICAgICAgIG9yaWckZ2V0ID0gb3JpZ1Byb3ZpZGVyLiRnZXQ7Ci0KLSAg
ICBvcmlnUHJvdmlkZXIuJGdldCA9IGZ1bmN0aW9uKCkgewotICAgICAgdmFyIG9yaWdJbnN0YW5j
ZSA9IGluc3RhbmNlSW5qZWN0b3IuaW52b2tlKG9yaWckZ2V0LCBvcmlnUHJvdmlkZXIpOwotICAg
ICAgcmV0dXJuIGluc3RhbmNlSW5qZWN0b3IuaW52b2tlKGRlY29yRm4sIG51bGwsIHskZGVsZWdh
dGU6IG9yaWdJbnN0YW5jZX0pOwotICAgIH07Ci0gIH0KLQotICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KLSAgLy8gTW9kdWxlIExvYWRpbmcKLSAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gIGZ1bmN0aW9uIGxvYWRNb2R1bGVzKG1vZHVsZXNUb0xv
YWQpewotICAgIHZhciBydW5CbG9ja3MgPSBbXTsKLSAgICBmb3JFYWNoKG1vZHVsZXNUb0xvYWQs
IGZ1bmN0aW9uKG1vZHVsZSkgewotICAgICAgaWYgKGxvYWRlZE1vZHVsZXMuZ2V0KG1vZHVsZSkp
IHJldHVybjsKLSAgICAgIGxvYWRlZE1vZHVsZXMucHV0KG1vZHVsZSwgdHJ1ZSk7Ci0gICAgICBp
ZiAoaXNTdHJpbmcobW9kdWxlKSkgewotICAgICAgICB2YXIgbW9kdWxlRm4gPSBhbmd1bGFyTW9k
dWxlKG1vZHVsZSk7Ci0gICAgICAgIHJ1bkJsb2NrcyA9IHJ1bkJsb2Nrcy5jb25jYXQobG9hZE1v
ZHVsZXMobW9kdWxlRm4ucmVxdWlyZXMpKS5jb25jYXQobW9kdWxlRm4uX3J1bkJsb2Nrcyk7Ci0K
LSAgICAgICAgdHJ5IHsKLSAgICAgICAgICBmb3IodmFyIGludm9rZVF1ZXVlID0gbW9kdWxlRm4u
X2ludm9rZVF1ZXVlLCBpID0gMCwgaWkgPSBpbnZva2VRdWV1ZS5sZW5ndGg7IGkgPCBpaTsgaSsr
KSB7Ci0gICAgICAgICAgICB2YXIgaW52b2tlQXJncyA9IGludm9rZVF1ZXVlW2ldLAotICAgICAg
ICAgICAgICAgIHByb3ZpZGVyID0gaW52b2tlQXJnc1swXSA9PSAnJGluamVjdG9yJwotICAgICAg
ICAgICAgICAgICAgICA/IHByb3ZpZGVySW5qZWN0b3IKLSAgICAgICAgICAgICAgICAgICAgOiBw
cm92aWRlckluamVjdG9yLmdldChpbnZva2VBcmdzWzBdKTsKLQotICAgICAgICAgICAgcHJvdmlk
ZXJbaW52b2tlQXJnc1sxXV0uYXBwbHkocHJvdmlkZXIsIGludm9rZUFyZ3NbMl0pOwotICAgICAg
ICAgIH0KLSAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgIGlmIChlLm1lc3NhZ2UpIGUu
bWVzc2FnZSArPSAnIGZyb20gJyArIG1vZHVsZTsKLSAgICAgICAgICB0aHJvdyBlOwotICAgICAg
ICB9Ci0gICAgICB9IGVsc2UgaWYgKGlzRnVuY3Rpb24obW9kdWxlKSkgewotICAgICAgICB0cnkg
ewotICAgICAgICAgIHJ1bkJsb2Nrcy5wdXNoKHByb3ZpZGVySW5qZWN0b3IuaW52b2tlKG1vZHVs
ZSkpOwotICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgaWYgKGUubWVzc2FnZSkgZS5t
ZXNzYWdlICs9ICcgZnJvbSAnICsgbW9kdWxlOwotICAgICAgICAgIHRocm93IGU7Ci0gICAgICAg
IH0KLSAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShtb2R1bGUpKSB7Ci0gICAgICAgIHRyeSB7Ci0g
ICAgICAgICAgcnVuQmxvY2tzLnB1c2gocHJvdmlkZXJJbmplY3Rvci5pbnZva2UobW9kdWxlKSk7
Ci0gICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICBpZiAoZS5tZXNzYWdlKSBlLm1lc3Nh
Z2UgKz0gJyBmcm9tICcgKyBTdHJpbmcobW9kdWxlW21vZHVsZS5sZW5ndGggLSAxXSk7Ci0gICAg
ICAgICAgdGhyb3cgZTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgYXNzZXJ0
QXJnRm4obW9kdWxlLCAnbW9kdWxlJyk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHJ1
bkJsb2NrczsKLSAgfQotCi0gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwot
ICAvLyBpbnRlcm5hbCBJbmplY3RvcgotICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KLQotICBmdW5jdGlvbiBjcmVhdGVJbnRlcm5hbEluamVjdG9yKGNhY2hlLCBmYWN0b3J5
KSB7Ci0KLSAgICBmdW5jdGlvbiBnZXRTZXJ2aWNlKHNlcnZpY2VOYW1lKSB7Ci0gICAgICBpZiAo
dHlwZW9mIHNlcnZpY2VOYW1lICE9PSAnc3RyaW5nJykgewotICAgICAgICB0aHJvdyBFcnJvcign
U2VydmljZSBuYW1lIGV4cGVjdGVkJyk7Ci0gICAgICB9Ci0gICAgICBpZiAoY2FjaGUuaGFzT3du
UHJvcGVydHkoc2VydmljZU5hbWUpKSB7Ci0gICAgICAgIGlmIChjYWNoZVtzZXJ2aWNlTmFtZV0g
PT09IElOU1RBTlRJQVRJTkcpIHsKLSAgICAgICAgICB0aHJvdyBFcnJvcignQ2lyY3VsYXIgZGVw
ZW5kZW5jeTogJyArIHBhdGguam9pbignIDwtICcpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gY2FjaGVbc2VydmljZU5hbWVdOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdHJ5IHsKLSAg
ICAgICAgICBwYXRoLnVuc2hpZnQoc2VydmljZU5hbWUpOwotICAgICAgICAgIGNhY2hlW3NlcnZp
Y2VOYW1lXSA9IElOU1RBTlRJQVRJTkc7Ci0gICAgICAgICAgcmV0dXJuIGNhY2hlW3NlcnZpY2VO
YW1lXSA9IGZhY3Rvcnkoc2VydmljZU5hbWUpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAg
ICAgIHBhdGguc2hpZnQoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0
aW9uIGludm9rZShmbiwgc2VsZiwgbG9jYWxzKXsKLSAgICAgIHZhciBhcmdzID0gW10sCi0gICAg
ICAgICAgJGluamVjdCA9IGFubm90YXRlKGZuKSwKLSAgICAgICAgICBsZW5ndGgsIGksCi0gICAg
ICAgICAga2V5OwotCi0gICAgICBmb3IoaSA9IDAsIGxlbmd0aCA9ICRpbmplY3QubGVuZ3RoOyBp
IDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAga2V5ID0gJGluamVjdFtpXTsKLSAgICAgICAgYXJn
cy5wdXNoKAotICAgICAgICAgIGxvY2FscyAmJiBsb2NhbHMuaGFzT3duUHJvcGVydHkoa2V5KQot
ICAgICAgICAgID8gbG9jYWxzW2tleV0KLSAgICAgICAgICA6IGdldFNlcnZpY2Uoa2V5KQotICAg
ICAgICApOwotICAgICAgfQotICAgICAgaWYgKCFmbi4kaW5qZWN0KSB7Ci0gICAgICAgIC8vIHRo
aXMgbWVhbnMgdGhhdCB3ZSBtdXN0IGJlIGFuIGFycmF5LgotICAgICAgICBmbiA9IGZuW2xlbmd0
aF07Ci0gICAgICB9Ci0KLQotICAgICAgLy8gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOiBodHRw
Oi8vanNwZXJmLmNvbS9hcHBseS12cy1jYWxsLXZzLWludm9rZQotICAgICAgc3dpdGNoIChzZWxm
ID8gLTEgOiBhcmdzLmxlbmd0aCkgewotICAgICAgICBjYXNlICAwOiByZXR1cm4gZm4oKTsKLSAg
ICAgICAgY2FzZSAgMTogcmV0dXJuIGZuKGFyZ3NbMF0pOwotICAgICAgICBjYXNlICAyOiByZXR1
cm4gZm4oYXJnc1swXSwgYXJnc1sxXSk7Ci0gICAgICAgIGNhc2UgIDM6IHJldHVybiBmbihhcmdz
WzBdLCBhcmdzWzFdLCBhcmdzWzJdKTsKLSAgICAgICAgY2FzZSAgNDogcmV0dXJuIGZuKGFyZ3Nb
MF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pOwotICAgICAgICBjYXNlICA1OiByZXR1cm4g
Zm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSk7Ci0gICAgICAg
IGNhc2UgIDY6IHJldHVybiBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBh
cmdzWzRdLCBhcmdzWzVdKTsKLSAgICAgICAgY2FzZSAgNzogcmV0dXJuIGZuKGFyZ3NbMF0sIGFy
Z3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0sIGFyZ3NbNl0pOwotICAg
ICAgICBjYXNlICA4OiByZXR1cm4gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1sz
XSwgYXJnc1s0XSwgYXJnc1s1XSwgYXJnc1s2XSwgYXJnc1s3XSk7Ci0gICAgICAgIGNhc2UgIDk6
IHJldHVybiBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBh
cmdzWzVdLCBhcmdzWzZdLCBhcmdzWzddLCBhcmdzWzhdKTsKLSAgICAgICAgY2FzZSAxMDogcmV0
dXJuIGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3Nb
NV0sIGFyZ3NbNl0sIGFyZ3NbN10sIGFyZ3NbOF0sIGFyZ3NbOV0pOwotICAgICAgICBkZWZhdWx0
OiByZXR1cm4gZm4uYXBwbHkoc2VsZiwgYXJncyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZnVu
Y3Rpb24gaW5zdGFudGlhdGUoVHlwZSwgbG9jYWxzKSB7Ci0gICAgICB2YXIgQ29uc3RydWN0b3Ig
PSBmdW5jdGlvbigpIHt9LAotICAgICAgICAgIGluc3RhbmNlLCByZXR1cm5lZFZhbHVlOwotCi0g
ICAgICAvLyBDaGVjayBpZiBUeXBlIGlzIGFubm90YXRlZCBhbmQgdXNlIGp1c3QgdGhlIGdpdmVu
IGZ1bmN0aW9uIGF0IG4tMSBhcyBwYXJhbWV0ZXIKLSAgICAgIC8vIGUuZy4gc29tZU1vZHVsZS5m
YWN0b3J5KCdncmVldGVyJywgWyckd2luZG93JywgZnVuY3Rpb24ocmVuYW1lZCR3aW5kb3cpIHt9
XSk7Ci0gICAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSAoaXNBcnJheShUeXBlKSA/IFR5cGVb
VHlwZS5sZW5ndGggLSAxXSA6IFR5cGUpLnByb3RvdHlwZTsKLSAgICAgIGluc3RhbmNlID0gbmV3
IENvbnN0cnVjdG9yKCk7Ci0gICAgICByZXR1cm5lZFZhbHVlID0gaW52b2tlKFR5cGUsIGluc3Rh
bmNlLCBsb2NhbHMpOwotCi0gICAgICByZXR1cm4gaXNPYmplY3QocmV0dXJuZWRWYWx1ZSkgPyBy
ZXR1cm5lZFZhbHVlIDogaW5zdGFuY2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsKLSAgICAgIGlu
dm9rZTogaW52b2tlLAotICAgICAgaW5zdGFudGlhdGU6IGluc3RhbnRpYXRlLAotICAgICAgZ2V0
OiBnZXRTZXJ2aWNlLAotICAgICAgYW5ub3RhdGU6IGFubm90YXRlCi0gICAgfTsKLSAgfQotfQot
Ci0vKioKLSAqIEBuZ2RvYyBmdW5jdGlvbgotICogQG5hbWUgbmcuJGFuY2hvclNjcm9sbAotICog
QHJlcXVpcmVzICR3aW5kb3cKLSAqIEByZXF1aXJlcyAkbG9jYXRpb24KLSAqIEByZXF1aXJlcyAk
cm9vdFNjb3BlCi0gKgotICogQGRlc2NyaXB0aW9uCi0gKiBXaGVuIGNhbGxlZCwgaXQgY2hlY2tz
IGN1cnJlbnQgdmFsdWUgb2YgYCRsb2NhdGlvbi5oYXNoKClgIGFuZCBzY3JvbGwgdG8gcmVsYXRl
ZCBlbGVtZW50LAotICogYWNjb3JkaW5nIHRvIHJ1bGVzIHNwZWNpZmllZCBpbgotICoge0BsaW5r
IGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvT3ZlcnZpZXcuaHRtbCN0aGUtaW5kaWNhdGVk
LXBhcnQtb2YtdGhlLWRvY3VtZW50IEh0bWw1IHNwZWN9LgotICoKLSAqIEl0IGFsc28gd2F0Y2hl
cyB0aGUgYCRsb2NhdGlvbi5oYXNoKClgIGFuZCBzY3JvbGwgd2hlbmV2ZXIgaXQgY2hhbmdlcyB0
byBtYXRjaCBhbnkgYW5jaG9yLgotICogVGhpcyBjYW4gYmUgZGlzYWJsZWQgYnkgY2FsbGluZyBg
JGFuY2hvclNjcm9sbFByb3ZpZGVyLmRpc2FibGVBdXRvU2Nyb2xsaW5nKClgLgotICovCi1mdW5j
dGlvbiAkQW5jaG9yU2Nyb2xsUHJvdmlkZXIoKSB7Ci0KLSAgdmFyIGF1dG9TY3JvbGxpbmdFbmFi
bGVkID0gdHJ1ZTsKLQotICB0aGlzLmRpc2FibGVBdXRvU2Nyb2xsaW5nID0gZnVuY3Rpb24oKSB7
Ci0gICAgYXV0b1Njcm9sbGluZ0VuYWJsZWQgPSBmYWxzZTsKLSAgfTsKLQotICB0aGlzLiRnZXQg
PSBbJyR3aW5kb3cnLCAnJGxvY2F0aW9uJywgJyRyb290U2NvcGUnLCBmdW5jdGlvbigkd2luZG93
LCAkbG9jYXRpb24sICRyb290U2NvcGUpIHsKLSAgICB2YXIgZG9jdW1lbnQgPSAkd2luZG93LmRv
Y3VtZW50OwotCi0gICAgLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGdldCBmaXJzdCBhbmNob3IgZnJv
bSBhIE5vZGVMaXN0Ci0gICAgLy8gY2FuJ3QgdXNlIGZpbHRlci5maWx0ZXIsIGFzIGl0IGFjY2Vw
dHMgb25seSBpbnN0YW5jZXMgb2YgQXJyYXkKLSAgICAvLyBhbmQgSUUgY2FuJ3QgY29udmVydCBO
b2RlTGlzdCB0byBhbiBhcnJheSB1c2luZyBbXS5zbGljZQotICAgIC8vIFRPRE8odm9qdGEpOiB1
c2UgZmlsdGVyIGlmIHdlIGNoYW5nZSBpdCB0byBhY2NlcHQgbGlzdHMgYXMgd2VsbAotICAgIGZ1
bmN0aW9uIGdldEZpcnN0QW5jaG9yKGxpc3QpIHsKLSAgICAgIHZhciByZXN1bHQgPSBudWxsOwot
ICAgICAgZm9yRWFjaChsaXN0LCBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgICAgIGlmICghcmVz
dWx0ICYmIGxvd2VyY2FzZShlbGVtZW50Lm5vZGVOYW1lKSA9PT0gJ2EnKSByZXN1bHQgPSBlbGVt
ZW50OwotICAgICAgfSk7Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIGZ1bmN0
aW9uIHNjcm9sbCgpIHsKLSAgICAgIHZhciBoYXNoID0gJGxvY2F0aW9uLmhhc2goKSwgZWxtOwot
Ci0gICAgICAvLyBlbXB0eSBoYXNoLCBzY3JvbGwgdG8gdGhlIHRvcCBvZiB0aGUgcGFnZQotICAg
ICAgaWYgKCFoYXNoKSAkd2luZG93LnNjcm9sbFRvKDAsIDApOwotCi0gICAgICAvLyBlbGVtZW50
IHdpdGggZ2l2ZW4gaWQKLSAgICAgIGVsc2UgaWYgKChlbG0gPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZChoYXNoKSkpIGVsbS5zY3JvbGxJbnRvVmlldygpOwotCi0gICAgICAvLyBmaXJzdCBhbmNo
b3Igd2l0aCBnaXZlbiBuYW1lIDotRAotICAgICAgZWxzZSBpZiAoKGVsbSA9IGdldEZpcnN0QW5j
aG9yKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKGhhc2gpKSkpIGVsbS5zY3JvbGxJbnRvVmll
dygpOwotCi0gICAgICAvLyBubyBlbGVtZW50IGFuZCBoYXNoID09ICd0b3AnLCBzY3JvbGwgdG8g
dGhlIHRvcCBvZiB0aGUgcGFnZQotICAgICAgZWxzZSBpZiAoaGFzaCA9PT0gJ3RvcCcpICR3aW5k
b3cuc2Nyb2xsVG8oMCwgMCk7Ci0gICAgfQotCi0gICAgLy8gZG9lcyBub3Qgc2Nyb2xsIHdoZW4g
dXNlciBjbGlja3Mgb24gYW5jaG9yIGxpbmsgdGhhdCBpcyBjdXJyZW50bHkgb24KLSAgICAvLyAo
bm8gdXJsIGNoYW5nZSwgbm8gJGxvY2F0aW9uLmhhc2goKSBjaGFuZ2UpLCBicm93c2VyIG5hdGl2
ZSBkb2VzIHNjcm9sbAotICAgIGlmIChhdXRvU2Nyb2xsaW5nRW5hYmxlZCkgewotICAgICAgJHJv
b3RTY29wZS4kd2F0Y2goZnVuY3Rpb24gYXV0b1Njcm9sbFdhdGNoKCkge3JldHVybiAkbG9jYXRp
b24uaGFzaCgpO30sCi0gICAgICAgIGZ1bmN0aW9uIGF1dG9TY3JvbGxXYXRjaEFjdGlvbigpIHsK
LSAgICAgICAgICAkcm9vdFNjb3BlLiRldmFsQXN5bmMoc2Nyb2xsKTsKLSAgICAgICAgfSk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHNjcm9sbDsKLSAgfV07Ci19Ci0KLS8qKgotICogISBUaGlzIGlz
IGEgcHJpdmF0ZSB1bmRvY3VtZW50ZWQgc2VydmljZSAhCi0gKgotICogQG5hbWUgbmcuJGJyb3dz
ZXIKLSAqIEByZXF1aXJlcyAkbG9nCi0gKiBAZGVzY3JpcHRpb24KLSAqIFRoaXMgb2JqZWN0IGhh
cyB0d28gZ29hbHM6Ci0gKgotICogLSBoaWRlIGFsbCB0aGUgZ2xvYmFsIHN0YXRlIGluIHRoZSBi
cm93c2VyIGNhdXNlZCBieSB0aGUgd2luZG93IG9iamVjdAotICogLSBhYnN0cmFjdCBhd2F5IGFs
bCB0aGUgYnJvd3NlciBzcGVjaWZpYyBmZWF0dXJlcyBhbmQgaW5jb25zaXN0ZW5jaWVzCi0gKgot
ICogRm9yIHRlc3RzIHdlIHByb3ZpZGUge0BsaW5rIG5nTW9jay4kYnJvd3NlciBtb2NrIGltcGxl
bWVudGF0aW9ufSBvZiB0aGUgYCRicm93c2VyYAotICogc2VydmljZSwgd2hpY2ggY2FuIGJlIHVz
ZWQgZm9yIGNvbnZlbmllbnQgdGVzdGluZyBvZiB0aGUgYXBwbGljYXRpb24gd2l0aG91dCB0aGUg
aW50ZXJhY3Rpb24gd2l0aAotICogdGhlIHJlYWwgYnJvd3NlciBhcGlzLgotICovCi0vKioKLSAq
IEBwYXJhbSB7b2JqZWN0fSB3aW5kb3cgVGhlIGdsb2JhbCB3aW5kb3cgb2JqZWN0LgotICogQHBh
cmFtIHtvYmplY3R9IGRvY3VtZW50IGpRdWVyeSB3cmFwcGVkIGRvY3VtZW50LgotICogQHBhcmFt
IHtmdW5jdGlvbigpfSBYSFIgWE1MSHR0cFJlcXVlc3QgY29uc3RydWN0b3IuCi0gKiBAcGFyYW0g
e29iamVjdH0gJGxvZyBjb25zb2xlLmxvZyBvciBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBpbnRl
cmZhY2UuCi0gKiBAcGFyYW0ge29iamVjdH0gJHNuaWZmZXIgJHNuaWZmZXIgc2VydmljZQotICov
Ci1mdW5jdGlvbiBCcm93c2VyKHdpbmRvdywgZG9jdW1lbnQsICRsb2csICRzbmlmZmVyKSB7Ci0g
IHZhciBzZWxmID0gdGhpcywKLSAgICAgIHJhd0RvY3VtZW50ID0gZG9jdW1lbnRbMF0sCi0gICAg
ICBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbiwKLSAgICAgIGhpc3RvcnkgPSB3aW5kb3cuaGlz
dG9yeSwKLSAgICAgIHNldFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCwKLSAgICAgIGNsZWFy
VGltZW91dCA9IHdpbmRvdy5jbGVhclRpbWVvdXQsCi0gICAgICBwZW5kaW5nRGVmZXJJZHMgPSB7
fTsKLQotICBzZWxmLmlzTW9jayA9IGZhbHNlOwotCi0gIHZhciBvdXRzdGFuZGluZ1JlcXVlc3RD
b3VudCA9IDA7Ci0gIHZhciBvdXRzdGFuZGluZ1JlcXVlc3RDYWxsYmFja3MgPSBbXTsKLQotICAv
LyBUT0RPKHZvanRhKTogcmVtb3ZlIHRoaXMgdGVtcG9yYXJ5IGFwaQotICBzZWxmLiQkY29tcGxl
dGVPdXRzdGFuZGluZ1JlcXVlc3QgPSBjb21wbGV0ZU91dHN0YW5kaW5nUmVxdWVzdDsKLSAgc2Vs
Zi4kJGluY091dHN0YW5kaW5nUmVxdWVzdENvdW50ID0gZnVuY3Rpb24oKSB7IG91dHN0YW5kaW5n
UmVxdWVzdENvdW50Kys7IH07Ci0KLSAgLyoqCi0gICAqIEV4ZWN1dGVzIHRoZSBgZm5gIGZ1bmN0
aW9uKHN1cHBvcnRzIGN1cnJ5aW5nKSBhbmQgZGVjcmVtZW50cyB0aGUgYG91dHN0YW5kaW5nUmVx
dWVzdENhbGxiYWNrc2AKLSAgICogY291bnRlci4gSWYgdGhlIGNvdW50ZXIgcmVhY2hlcyAwLCBh
bGwgdGhlIGBvdXRzdGFuZGluZ1JlcXVlc3RDYWxsYmFja3NgIGFyZSBleGVjdXRlZC4KLSAgICov
Ci0gIGZ1bmN0aW9uIGNvbXBsZXRlT3V0c3RhbmRpbmdSZXF1ZXN0KGZuKSB7Ci0gICAgdHJ5IHsK
LSAgICAgIGZuLmFwcGx5KG51bGwsIHNsaWNlQXJncyhhcmd1bWVudHMsIDEpKTsKLSAgICB9IGZp
bmFsbHkgewotICAgICAgb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQtLTsKLSAgICAgIGlmIChvdXRz
dGFuZGluZ1JlcXVlc3RDb3VudCA9PT0gMCkgewotICAgICAgICB3aGlsZShvdXRzdGFuZGluZ1Jl
cXVlc3RDYWxsYmFja3MubGVuZ3RoKSB7Ci0gICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG91
dHN0YW5kaW5nUmVxdWVzdENhbGxiYWNrcy5wb3AoKSgpOwotICAgICAgICAgIH0gY2F0Y2ggKGUp
IHsKLSAgICAgICAgICAgICRsb2cuZXJyb3IoZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEBwcml2YXRlCi0gICAqIE5vdGU6IHRo
aXMgbWV0aG9kIGlzIHVzZWQgb25seSBieSBzY2VuYXJpbyBydW5uZXIKLSAgICogVE9ETyh2b2p0
YSk6IHByZWZpeCB0aGlzIG1ldGhvZCB3aXRoICQkID8KLSAgICogQHBhcmFtIHtmdW5jdGlvbigp
fSBjYWxsYmFjayBGdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gbm8gb3V0c3RhbmRp
bmcgcmVxdWVzdAotICAgKi8KLSAgc2VsZi5ub3RpZnlXaGVuTm9PdXRzdGFuZGluZ1JlcXVlc3Rz
ID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKLSAgICAvLyBmb3JjZSBicm93c2VyIHRvIGV4ZWN1dGUg
YWxsIHBvbGxGbnMgLSB0aGlzIGlzIG5lZWRlZCBzbyB0aGF0IGNvb2tpZXMgYW5kIG90aGVyIHBv
bGxlcnMgZmlyZQotICAgIC8vIGF0IHNvbWUgZGV0ZXJtaW5pc3RpYyB0aW1lIGluIHJlc3BlY3Qg
dG8gdGhlIHRlc3QgcnVubmVyJ3MgYWN0aW9ucy4gTGVhdmluZyB0aGluZ3MgdXAgdG8gdGhlCi0g
ICAgLy8gcmVndWxhciBwb2xsZXIgd291bGQgcmVzdWx0IGluIGZsYWt5IHRlc3RzLgotICAgIGZv
ckVhY2gocG9sbEZucywgZnVuY3Rpb24ocG9sbEZuKXsgcG9sbEZuKCk7IH0pOwotCi0gICAgaWYg
KG91dHN0YW5kaW5nUmVxdWVzdENvdW50ID09PSAwKSB7Ci0gICAgICBjYWxsYmFjaygpOwotICAg
IH0gZWxzZSB7Ci0gICAgICBvdXRzdGFuZGluZ1JlcXVlc3RDYWxsYmFja3MucHVzaChjYWxsYmFj
ayk7Ci0gICAgfQotICB9OwotCi0gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gIC8vIFBvbGwgV2F0Y2hlciBBUEkKLSAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KLSAgdmFyIHBvbGxGbnMgPSBbXSwKLSAgICAgIHBvbGxUaW1lb3V0OwotCi0gIC8qKgotICAg
KiBAbmFtZSBuZy4kYnJvd3NlciNhZGRQb2xsRm4KLSAgICogQG1ldGhvZE9mIG5nLiRicm93c2Vy
Ci0gICAqCi0gICAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gZm4gUG9sbCBmdW5jdGlvbiB0byBhZGQK
LSAgICoKLSAgICogQGRlc2NyaXB0aW9uCi0gICAqIEFkZHMgYSBmdW5jdGlvbiB0byB0aGUgbGlz
dCBvZiBmdW5jdGlvbnMgdGhhdCBwb2xsZXIgcGVyaW9kaWNhbGx5IGV4ZWN1dGVzLAotICAgKiBh
bmQgc3RhcnRzIHBvbGxpbmcgaWYgbm90IHN0YXJ0ZWQgeWV0LgotICAgKgotICAgKiBAcmV0dXJu
cyB7ZnVuY3Rpb24oKX0gdGhlIGFkZGVkIGZ1bmN0aW9uCi0gICAqLwotICBzZWxmLmFkZFBvbGxG
biA9IGZ1bmN0aW9uKGZuKSB7Ci0gICAgaWYgKGlzVW5kZWZpbmVkKHBvbGxUaW1lb3V0KSkgc3Rh
cnRQb2xsZXIoMTAwLCBzZXRUaW1lb3V0KTsKLSAgICBwb2xsRm5zLnB1c2goZm4pOwotICAgIHJl
dHVybiBmbjsKLSAgfTsKLQotICAvKioKLSAgICogQHBhcmFtIHtudW1iZXJ9IGludGVydmFsIEhv
dyBvZnRlbiBzaG91bGQgYnJvd3NlciBjYWxsIHBvbGwgZnVuY3Rpb25zIChtcykKLSAgICogQHBh
cmFtIHtmdW5jdGlvbigpfSBzZXRUaW1lb3V0IFJlZmVyZW5jZSB0byBhIHJlYWwgb3IgZmFrZSBg
c2V0VGltZW91dGAgZnVuY3Rpb24uCi0gICAqCi0gICAqIEBkZXNjcmlwdGlvbgotICAgKiBDb25m
aWd1cmVzIHRoZSBwb2xsZXIgdG8gcnVuIGluIHRoZSBzcGVjaWZpZWQgaW50ZXJ2YWxzLCB1c2lu
ZyB0aGUgc3BlY2lmaWVkCi0gICAqIHNldFRpbWVvdXQgZm4gYW5kIGtpY2tzIGl0IG9mZi4KLSAg
ICovCi0gIGZ1bmN0aW9uIHN0YXJ0UG9sbGVyKGludGVydmFsLCBzZXRUaW1lb3V0KSB7Ci0gICAg
KGZ1bmN0aW9uIGNoZWNrKCkgewotICAgICAgZm9yRWFjaChwb2xsRm5zLCBmdW5jdGlvbihwb2xs
Rm4peyBwb2xsRm4oKTsgfSk7Ci0gICAgICBwb2xsVGltZW91dCA9IHNldFRpbWVvdXQoY2hlY2ss
IGludGVydmFsKTsKLSAgICB9KSgpOwotICB9Ci0KLSAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgLy8gVVJMIEFQSQotICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLwotCi0gIHZhciBsYXN0QnJvd3NlclVybCA9IGxvY2F0aW9uLmhyZWYsCi0gICAgICBiYXNl
RWxlbWVudCA9IGRvY3VtZW50LmZpbmQoJ2Jhc2UnKTsKLQotICAvKioKLSAgICogQG5hbWUgbmcu
JGJyb3dzZXIjdXJsCi0gICAqIEBtZXRob2RPZiBuZy4kYnJvd3NlcgotICAgKgotICAgKiBAZGVz
Y3JpcHRpb24KLSAgICogR0VUVEVSOgotICAgKiBXaXRob3V0IGFueSBhcmd1bWVudCwgdGhpcyBt
ZXRob2QganVzdCByZXR1cm5zIGN1cnJlbnQgdmFsdWUgb2YgbG9jYXRpb24uaHJlZi4KLSAgICoK
LSAgICogU0VUVEVSOgotICAgKiBXaXRoIGF0IGxlYXN0IG9uZSBhcmd1bWVudCwgdGhpcyBtZXRo
b2Qgc2V0cyB1cmwgdG8gbmV3IHZhbHVlLgotICAgKiBJZiBodG1sNSBoaXN0b3J5IGFwaSBzdXBw
b3J0ZWQsIHB1c2hTdGF0ZS9yZXBsYWNlU3RhdGUgaXMgdXNlZCwgb3RoZXJ3aXNlCi0gICAqIGxv
Y2F0aW9uLmhyZWYvbG9jYXRpb24ucmVwbGFjZSBpcyB1c2VkLgotICAgKiBSZXR1cm5zIGl0cyBv
d24gaW5zdGFuY2UgdG8gYWxsb3cgY2hhaW5pbmcKLSAgICoKLSAgICogTk9URTogdGhpcyBhcGkg
aXMgaW50ZW5kZWQgZm9yIHVzZSBvbmx5IGJ5IHRoZSAkbG9jYXRpb24gc2VydmljZS4gUGxlYXNl
IHVzZSB0aGUKLSAgICoge0BsaW5rIG5nLiRsb2NhdGlvbiAkbG9jYXRpb24gc2VydmljZX0gdG8g
Y2hhbmdlIHVybC4KLSAgICoKLSAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBOZXcgdXJsICh3aGVu
IHVzZWQgYXMgc2V0dGVyKQotICAgKiBAcGFyYW0ge2Jvb2xlYW49fSByZXBsYWNlIFNob3VsZCBu
ZXcgdXJsIHJlcGxhY2UgY3VycmVudCBoaXN0b3J5IHJlY29yZCA/Ci0gICAqLwotICBzZWxmLnVy
bCA9IGZ1bmN0aW9uKHVybCwgcmVwbGFjZSkgewotICAgIC8vIHNldHRlcgotICAgIGlmICh1cmwp
IHsKLSAgICAgIGlmIChsYXN0QnJvd3NlclVybCA9PSB1cmwpIHJldHVybjsKLSAgICAgIGxhc3RC
cm93c2VyVXJsID0gdXJsOwotICAgICAgaWYgKCRzbmlmZmVyLmhpc3RvcnkpIHsKLSAgICAgICAg
aWYgKHJlcGxhY2UpIGhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsICcnLCB1cmwpOwotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICBoaXN0b3J5LnB1c2hTdGF0ZShudWxsLCAnJywgdXJsKTsKLSAg
ICAgICAgICAvLyBDcmF6eSBPcGVyYSBCdWc6IGh0dHA6Ly9teS5vcGVyYS5jb20vY29tbXVuaXR5
L2ZvcnVtcy90b3BpYy5kbWw/aWQ9MTE4NTQ2MgotICAgICAgICAgIGJhc2VFbGVtZW50LmF0dHIo
J2hyZWYnLCBiYXNlRWxlbWVudC5hdHRyKCdocmVmJykpOwotICAgICAgICB9Ci0gICAgICB9IGVs
c2UgewotICAgICAgICBpZiAocmVwbGFjZSkgbG9jYXRpb24ucmVwbGFjZSh1cmwpOwotICAgICAg
ICBlbHNlIGxvY2F0aW9uLmhyZWYgPSB1cmw7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc2VsZjsK
LSAgICAvLyBnZXR0ZXIKLSAgICB9IGVsc2UgewotICAgICAgLy8gdGhlIHJlcGxhY2VtZW50IGlz
IGEgd29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDA3MTcyCi0gICAgICByZXR1cm4gbG9jYXRpb24uaHJlZi5yZXBsYWNlKC8lMjcvZywi
JyIpOwotICAgIH0KLSAgfTsKLQotICB2YXIgdXJsQ2hhbmdlTGlzdGVuZXJzID0gW10sCi0gICAg
ICB1cmxDaGFuZ2VJbml0ID0gZmFsc2U7Ci0KLSAgZnVuY3Rpb24gZmlyZVVybENoYW5nZSgpIHsK
LSAgICBpZiAobGFzdEJyb3dzZXJVcmwgPT0gc2VsZi51cmwoKSkgcmV0dXJuOwotCi0gICAgbGFz
dEJyb3dzZXJVcmwgPSBzZWxmLnVybCgpOwotICAgIGZvckVhY2godXJsQ2hhbmdlTGlzdGVuZXJz
LCBmdW5jdGlvbihsaXN0ZW5lcikgewotICAgICAgbGlzdGVuZXIoc2VsZi51cmwoKSk7Ci0gICAg
fSk7Ci0gIH0KLQotICAvKioKLSAgICogQG5hbWUgbmcuJGJyb3dzZXIjb25VcmxDaGFuZ2UKLSAg
ICogQG1ldGhvZE9mIG5nLiRicm93c2VyCi0gICAqIEBUT0RPKHZvanRhKTogcmVmYWN0b3IgdG8g
dXNlIG5vZGUncyBzeW50YXggZm9yIGV2ZW50cwotICAgKgotICAgKiBAZGVzY3JpcHRpb24KLSAg
ICogUmVnaXN0ZXIgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCwgd2hlbiB1
cmwgY2hhbmdlcy4KLSAgICoKLSAgICogSXQncyBvbmx5IGNhbGxlZCB3aGVuIHRoZSB1cmwgaXMg
Y2hhbmdlZCBieSBvdXRzaWRlIG9mIGFuZ3VsYXI6Ci0gICAqIC0gdXNlciB0eXBlcyBkaWZmZXJl
bnQgdXJsIGludG8gYWRkcmVzcyBiYXIKLSAgICogLSB1c2VyIGNsaWNrcyBvbiBoaXN0b3J5IChm
b3J3YXJkL2JhY2spIGJ1dHRvbgotICAgKiAtIHVzZXIgY2xpY2tzIG9uIGEgbGluawotICAgKgot
ICAgKiBJdCdzIG5vdCBjYWxsZWQgd2hlbiB1cmwgaXMgY2hhbmdlZCBieSAkYnJvd3Nlci51cmwo
KSBtZXRob2QKLSAgICoKLSAgICogVGhlIGxpc3RlbmVyIGdldHMgY2FsbGVkIHdpdGggbmV3IHVy
bCBhcyBwYXJhbWV0ZXIuCi0gICAqCi0gICAqIE5PVEU6IHRoaXMgYXBpIGlzIGludGVuZGVkIGZv
ciB1c2Ugb25seSBieSB0aGUgJGxvY2F0aW9uIHNlcnZpY2UuIFBsZWFzZSB1c2UgdGhlCi0gICAq
IHtAbGluayBuZy4kbG9jYXRpb24gJGxvY2F0aW9uIHNlcnZpY2V9IHRvIG1vbml0b3IgdXJsIGNo
YW5nZXMgaW4gYW5ndWxhciBhcHBzLgotICAgKgotICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmlu
Zyl9IGxpc3RlbmVyIExpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHVybCBjaGFu
Z2VzLgotICAgKiBAcmV0dXJuIHtmdW5jdGlvbihzdHJpbmcpfSBSZXR1cm5zIHRoZSByZWdpc3Rl
cmVkIGxpc3RlbmVyIGZuIC0gaGFuZHkgaWYgdGhlIGZuIGlzIGFub255bW91cy4KLSAgICovCi0g
IHNlbGYub25VcmxDaGFuZ2UgPSBmdW5jdGlvbihjYWxsYmFjaykgewotICAgIGlmICghdXJsQ2hh
bmdlSW5pdCkgewotICAgICAgLy8gV2UgbGlzdGVuIG9uIGJvdGggKGhhc2hjaGFuZ2UvcG9wc3Rh
dGUpIHdoZW4gYXZhaWxhYmxlLCBhcyBzb21lIGJyb3dzZXJzIChlLmcuIE9wZXJhKQotICAgICAg
Ly8gZG9uJ3QgZmlyZSBwb3BzdGF0ZSB3aGVuIHVzZXIgY2hhbmdlIHRoZSBhZGRyZXNzIGJhciBh
bmQgZG9uJ3QgZmlyZSBoYXNoY2hhbmdlIHdoZW4gdXJsCi0gICAgICAvLyBjaGFuZ2VkIGJ5IHB1
c2gvcmVwbGFjZVN0YXRlCi0KLSAgICAgIC8vIGh0bWw1IGhpc3RvcnkgYXBpIC0gcG9wc3RhdGUg
ZXZlbnQKLSAgICAgIGlmICgkc25pZmZlci5oaXN0b3J5KSBqcUxpdGUod2luZG93KS5iaW5kKCdw
b3BzdGF0ZScsIGZpcmVVcmxDaGFuZ2UpOwotICAgICAgLy8gaGFzaGNoYW5nZSBldmVudAotICAg
ICAgaWYgKCRzbmlmZmVyLmhhc2hjaGFuZ2UpIGpxTGl0ZSh3aW5kb3cpLmJpbmQoJ2hhc2hjaGFu
Z2UnLCBmaXJlVXJsQ2hhbmdlKTsKLSAgICAgIC8vIHBvbGxpbmcKLSAgICAgIGVsc2Ugc2VsZi5h
ZGRQb2xsRm4oZmlyZVVybENoYW5nZSk7Ci0KLSAgICAgIHVybENoYW5nZUluaXQgPSB0cnVlOwot
ICAgIH0KLQotICAgIHVybENoYW5nZUxpc3RlbmVycy5wdXNoKGNhbGxiYWNrKTsKLSAgICByZXR1
cm4gY2FsbGJhY2s7Ci0gIH07Ci0KLSAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgLy8gTWlzYyBBUEkKLSAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQot
ICAvKioKLSAgICogUmV0dXJucyBjdXJyZW50IDxiYXNlIGhyZWY+Ci0gICAqIChhbHdheXMgcmVs
YXRpdmUgLSB3aXRob3V0IGRvbWFpbikKLSAgICoKLSAgICogQHJldHVybnMge3N0cmluZz19Ci0g
ICAqLwotICBzZWxmLmJhc2VIcmVmID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGhyZWYgPSBiYXNl
RWxlbWVudC5hdHRyKCdocmVmJyk7Ci0gICAgcmV0dXJuIGhyZWYgPyBocmVmLnJlcGxhY2UoL15o
dHRwcz9cOlwvXC9bXlwvXSovLCAnJykgOiAnJzsKLSAgfTsKLQotICAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAvLyBDb29r
aWVzIEFQSQotICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLwotICB2YXIgbGFzdENvb2tpZXMgPSB7fTsKLSAgdmFyIGxhc3RDb29r
aWVTdHJpbmcgPSAnJzsKLSAgdmFyIGNvb2tpZVBhdGggPSBzZWxmLmJhc2VIcmVmKCk7Ci0KLSAg
LyoqCi0gICAqIEBuYW1lIG5nLiRicm93c2VyI2Nvb2tpZXMKLSAgICogQG1ldGhvZE9mIG5nLiRi
cm93c2VyCi0gICAqCi0gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmFtZSBDb29raWUgbmFtZQotICAg
KiBAcGFyYW0ge3N0cmluZz19IHZhbHVlIENva2tpZSB2YWx1ZQotICAgKgotICAgKiBAZGVzY3Jp
cHRpb24KLSAgICogVGhlIGNvb2tpZXMgbWV0aG9kIHByb3ZpZGVzIGEgJ3ByaXZhdGUnIGxvdyBs
ZXZlbCBhY2Nlc3MgdG8gYnJvd3NlciBjb29raWVzLgotICAgKiBJdCBpcyBub3QgbWVhbnQgdG8g
YmUgdXNlZCBkaXJlY3RseSwgdXNlIHRoZSAkY29va2llIHNlcnZpY2UgaW5zdGVhZC4KLSAgICoK
LSAgICogVGhlIHJldHVybiB2YWx1ZXMgdmFyeSBkZXBlbmRpbmcgb24gdGhlIGFyZ3VtZW50cyB0
aGF0IHRoZSBtZXRob2Qgd2FzIGNhbGxlZCB3aXRoIGFzIGZvbGxvd3M6Ci0gICAqIDx1bD4KLSAg
ICogICA8bGk+Y29va2llcygpIC0+IGhhc2ggb2YgYWxsIGNvb2tpZXMsIHRoaXMgaXMgTk9UIGEg
Y29weSBvZiB0aGUgaW50ZXJuYWwgc3RhdGUsIHNvIGRvIG5vdCBtb2RpZnkgaXQ8L2xpPgotICAg
KiAgIDxsaT5jb29raWVzKG5hbWUsIHZhbHVlKSAtPiBzZXQgbmFtZSB0byB2YWx1ZSwgaWYgdmFs
dWUgaXMgdW5kZWZpbmVkIGRlbGV0ZSB0aGUgY29va2llPC9saT4KLSAgICogICA8bGk+Y29va2ll
cyhuYW1lKSAtPiB0aGUgc2FtZSBhcyAobmFtZSwgdW5kZWZpbmVkKSA9PSBERUxFVEVTIChubyBv
bmUgY2FsbHMgaXQgcmlnaHQgbm93IHRoYXQgd2F5KTwvbGk+Ci0gICAqIDwvdWw+Ci0gICAqCi0g
ICAqIEByZXR1cm5zIHtPYmplY3R9IEhhc2ggb2YgYWxsIGNvb2tpZXMgKGlmIGNhbGxlZCB3aXRo
b3V0IGFueSBwYXJhbWV0ZXIpCi0gICAqLwotICBzZWxmLmNvb2tpZXMgPSBmdW5jdGlvbihuYW1l
LCB2YWx1ZSkgewotICAgIHZhciBjb29raWVMZW5ndGgsIGNvb2tpZUFycmF5LCBjb29raWUsIGks
IGluZGV4OwotCi0gICAgaWYgKG5hbWUpIHsKLSAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVk
KSB7Ci0gICAgICAgIHJhd0RvY3VtZW50LmNvb2tpZSA9IGVzY2FwZShuYW1lKSArICI9O3BhdGg9
IiArIGNvb2tpZVBhdGggKyAiO2V4cGlyZXM9VGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMCBHTVQi
OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkgewotICAgICAg
ICAgIGNvb2tpZUxlbmd0aCA9IChyYXdEb2N1bWVudC5jb29raWUgPSBlc2NhcGUobmFtZSkgKyAn
PScgKyBlc2NhcGUodmFsdWUpICsgJztwYXRoPScgKyBjb29raWVQYXRoKS5sZW5ndGggKyAxOwot
Ci0gICAgICAgICAgLy8gcGVyIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzIxMDkudHh0IGJy
b3dzZXIgbXVzdCBhbGxvdyBhdCBtaW5pbXVtOgotICAgICAgICAgIC8vIC0gMzAwIGNvb2tpZXMK
LSAgICAgICAgICAvLyAtIDIwIGNvb2tpZXMgcGVyIHVuaXF1ZSBkb21haW4KLSAgICAgICAgICAv
LyAtIDQwOTYgYnl0ZXMgcGVyIGNvb2tpZQotICAgICAgICAgIGlmIChjb29raWVMZW5ndGggPiA0
MDk2KSB7Ci0gICAgICAgICAgICAkbG9nLndhcm4oIkNvb2tpZSAnIisgbmFtZSArIicgcG9zc2li
bHkgbm90IHNldCBvciBvdmVyZmxvd2VkIGJlY2F1c2UgaXQgd2FzIHRvbyBsYXJnZSAoIisKLSAg
ICAgICAgICAgICAgY29va2llTGVuZ3RoICsgIiA+IDQwOTYgYnl0ZXMpISIpOwotICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAocmF3RG9jdW1l
bnQuY29va2llICE9PSBsYXN0Q29va2llU3RyaW5nKSB7Ci0gICAgICAgIGxhc3RDb29raWVTdHJp
bmcgPSByYXdEb2N1bWVudC5jb29raWU7Ci0gICAgICAgIGNvb2tpZUFycmF5ID0gbGFzdENvb2tp
ZVN0cmluZy5zcGxpdCgiOyAiKTsKLSAgICAgICAgbGFzdENvb2tpZXMgPSB7fTsKLQotICAgICAg
ICBmb3IgKGkgPSAwOyBpIDwgY29va2llQXJyYXkubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICBj
b29raWUgPSBjb29raWVBcnJheVtpXTsKLSAgICAgICAgICBpbmRleCA9IGNvb2tpZS5pbmRleE9m
KCc9Jyk7Ci0gICAgICAgICAgaWYgKGluZGV4ID4gMCkgeyAvL2lnbm9yZSBuYW1lbGVzcyBjb29r
aWVzCi0gICAgICAgICAgICB2YXIgbmFtZSA9IHVuZXNjYXBlKGNvb2tpZS5zdWJzdHJpbmcoMCwg
aW5kZXgpKTsKLSAgICAgICAgICAgIC8vIHRoZSBmaXJzdCB2YWx1ZSB0aGF0IGlzIHNlZW4gZm9y
IGEgY29va2llIGlzIHRoZSBtb3N0Ci0gICAgICAgICAgICAvLyBzcGVjaWZpYyBvbmUuICB2YWx1
ZXMgZm9yIHRoZSBzYW1lIGNvb2tpZSBuYW1lIHRoYXQKLSAgICAgICAgICAgIC8vIGZvbGxvdyBh
cmUgZm9yIGxlc3Mgc3BlY2lmaWMgcGF0aHMuCi0gICAgICAgICAgICBpZiAobGFzdENvb2tpZXNb
bmFtZV0gPT09IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgICBsYXN0Q29va2llc1tuYW1lXSA9
IHVuZXNjYXBlKGNvb2tpZS5zdWJzdHJpbmcoaW5kZXggKyAxKSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbGFzdENvb2tpZXM7
Ci0gICAgfQotICB9OwotCi0KLSAgLyoqCi0gICAqIEBuYW1lIG5nLiRicm93c2VyI2RlZmVyCi0g
ICAqIEBtZXRob2RPZiBuZy4kYnJvd3NlcgotICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCl9IGZuIEEg
ZnVuY3Rpb24sIHdobydzIGV4ZWN1dGlvbiBzaG91bGQgYmUgZGVmZXJlZC4KLSAgICogQHBhcmFt
IHtudW1iZXI9fSBbZGVsYXk9MF0gb2YgbWlsbGlzZWNvbmRzIHRvIGRlZmVyIHRoZSBmdW5jdGlv
biBleGVjdXRpb24uCi0gICAqIEByZXR1cm5zIHsqfSBEZWZlcklkIHRoYXQgY2FuIGJlIHVzZWQg
dG8gY2FuY2VsIHRoZSB0YXNrIHZpYSBgJGJyb3dzZXIuZGVmZXIuY2FuY2VsKClgLgotICAgKgot
ICAgKiBAZGVzY3JpcHRpb24KLSAgICogRXhlY3V0ZXMgYSBmbiBhc3luY2hyb25pb3VzbHkgdmlh
IGBzZXRUaW1lb3V0KGZuLCBkZWxheSlgLgotICAgKgotICAgKiBVbmxpa2Ugd2hlbiBjYWxsaW5n
IGBzZXRUaW1lb3V0YCBkaXJlY3RseSwgaW4gdGVzdCB0aGlzIGZ1bmN0aW9uIGlzIG1vY2tlZCBh
bmQgaW5zdGVhZCBvZiB1c2luZwotICAgKiBgc2V0VGltZW91dGAgaW4gdGVzdHMsIHRoZSBmbnMg
YXJlIHF1ZXVlZCBpbiBhbiBhcnJheSwgd2hpY2ggY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgZmx1
c2hlZAotICAgKiB2aWEgYCRicm93c2VyLmRlZmVyLmZsdXNoKClgLgotICAgKgotICAgKi8KLSAg
c2VsZi5kZWZlciA9IGZ1bmN0aW9uKGZuLCBkZWxheSkgewotICAgIHZhciB0aW1lb3V0SWQ7Ci0g
ICAgb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQrKzsKLSAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0
KGZ1bmN0aW9uKCkgewotICAgICAgZGVsZXRlIHBlbmRpbmdEZWZlcklkc1t0aW1lb3V0SWRdOwot
ICAgICAgY29tcGxldGVPdXRzdGFuZGluZ1JlcXVlc3QoZm4pOwotICAgIH0sIGRlbGF5IHx8IDAp
OwotICAgIHBlbmRpbmdEZWZlcklkc1t0aW1lb3V0SWRdID0gdHJ1ZTsKLSAgICByZXR1cm4gdGlt
ZW91dElkOwotICB9OwotCi0KLSAgLyoqCi0gICAqIEBuYW1lIG5nLiRicm93c2VyI2RlZmVyLmNh
bmNlbAotICAgKiBAbWV0aG9kT2YgbmcuJGJyb3dzZXIuZGVmZXIKLSAgICoKLSAgICogQGRlc2Ny
aXB0aW9uCi0gICAqIENhbmNlbHMgYSBkZWZlcmVkIHRhc2sgaWRlbnRpZmllZCB3aXRoIGBkZWZl
cklkYC4KLSAgICoKLSAgICogQHBhcmFtIHsqfSBkZWZlcklkIFRva2VuIHJldHVybmVkIGJ5IHRo
ZSBgJGJyb3dzZXIuZGVmZXJgIGZ1bmN0aW9uLgotICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0
dXJucyBgdHJ1ZWAgaWYgdGhlIHRhc2sgaGFzbid0IGV4ZWN1dGVkIHlldCBhbmQgd2FzIHN1Y2Nl
c3NmdWx5IGNhbmNlbGVkLgotICAgKi8KLSAgc2VsZi5kZWZlci5jYW5jZWwgPSBmdW5jdGlvbihk
ZWZlcklkKSB7Ci0gICAgaWYgKHBlbmRpbmdEZWZlcklkc1tkZWZlcklkXSkgewotICAgICAgZGVs
ZXRlIHBlbmRpbmdEZWZlcklkc1tkZWZlcklkXTsKLSAgICAgIGNsZWFyVGltZW91dChkZWZlcklk
KTsKLSAgICAgIGNvbXBsZXRlT3V0c3RhbmRpbmdSZXF1ZXN0KG5vb3ApOwotICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfTsKLQotfQotCi1mdW5jdGlvbiAk
QnJvd3NlclByb3ZpZGVyKCl7Ci0gIHRoaXMuJGdldCA9IFsnJHdpbmRvdycsICckbG9nJywgJyRz
bmlmZmVyJywgJyRkb2N1bWVudCcsCi0gICAgICBmdW5jdGlvbiggJHdpbmRvdywgICAkbG9nLCAg
ICRzbmlmZmVyLCAgICRkb2N1bWVudCl7Ci0gICAgICAgIHJldHVybiBuZXcgQnJvd3Nlcigkd2lu
ZG93LCAkZG9jdW1lbnQsICRsb2csICRzbmlmZmVyKTsKLSAgICAgIH1dOwotfQotCi0vKioKLSAq
IEBuZ2RvYyBvYmplY3QKLSAqIEBuYW1lIG5nLiRjYWNoZUZhY3RvcnkKLSAqCi0gKiBAZGVzY3Jp
cHRpb24KLSAqIEZhY3RvcnkgdGhhdCBjb25zdHJ1Y3RzIGNhY2hlIG9iamVjdHMuCi0gKgotICoK
LSAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZUlkIE5hbWUgb3IgaWQgb2YgdGhlIG5ld2x5IGNyZWF0
ZWQgY2FjaGUuCi0gKiBAcGFyYW0ge29iamVjdD19IG9wdGlvbnMgT3B0aW9ucyBvYmplY3QgdGhh
dCBzcGVjaWZpZXMgdGhlIGNhY2hlIGJlaGF2aW9yLiBQcm9wZXJ0aWVzOgotICoKLSAqICAgLSBg
e251bWJlcj19YCBgY2FwYWNpdHlgIOKAlCB0dXJucyB0aGUgY2FjaGUgaW50byBMUlUgY2FjaGUu
Ci0gKgotICogQHJldHVybnMge29iamVjdH0gTmV3bHkgY3JlYXRlZCBjYWNoZSBvYmplY3Qgd2l0
aCB0aGUgZm9sbG93aW5nIHNldCBvZiBtZXRob2RzOgotICoKLSAqIC0gYHtvYmplY3R9YCBgaW5m
bygpYCDigJQgUmV0dXJucyBpZCwgc2l6ZSwgYW5kIG9wdGlvbnMgb2YgY2FjaGUuCi0gKiAtIGB7
dm9pZH1gIGBwdXQoe3N0cmluZ30ga2V5LCB7Kn0gdmFsdWUpYCDigJQgUHV0cyBhIG5ldyBrZXkt
dmFsdWUgcGFpciBpbnRvIHRoZSBjYWNoZS4KLSAqIC0gYHt7Kn19YCBgZ2V0KHtzdHJpbmd9IGtl
eSlgIOKAlCBSZXR1cm5zIGNhY2hlZCB2YWx1ZSBmb3IgYGtleWAgb3IgdW5kZWZpbmVkIGZvciBj
YWNoZSBtaXNzLgotICogLSBge3ZvaWR9YCBgcmVtb3ZlKHtzdHJpbmd9IGtleSlgIOKAlCBSZW1v
dmVzIGEga2V5LXZhbHVlIHBhaXIgZnJvbSB0aGUgY2FjaGUuCi0gKiAtIGB7dm9pZH1gIGByZW1v
dmVBbGwoKWAg4oCUIFJlbW92ZXMgYWxsIGNhY2hlZCB2YWx1ZXMuCi0gKiAtIGB7dm9pZH1gIGBk
ZXN0cm95KClgIOKAlCBSZW1vdmVzIHJlZmVyZW5jZXMgdG8gdGhpcyBjYWNoZSBmcm9tICRjYWNo
ZUZhY3RvcnkuCi0gKgotICovCi1mdW5jdGlvbiAkQ2FjaGVGYWN0b3J5UHJvdmlkZXIoKSB7Ci0K
LSAgdGhpcy4kZ2V0ID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGNhY2hlcyA9IHt9OwotCi0gICAg
ZnVuY3Rpb24gY2FjaGVGYWN0b3J5KGNhY2hlSWQsIG9wdGlvbnMpIHsKLSAgICAgIGlmIChjYWNo
ZUlkIGluIGNhY2hlcykgewotICAgICAgICB0aHJvdyBFcnJvcignY2FjaGVJZCAnICsgY2FjaGVJ
ZCArICcgdGFrZW4nKTsKLSAgICAgIH0KLQotICAgICAgdmFyIHNpemUgPSAwLAotICAgICAgICAg
IHN0YXRzID0gZXh0ZW5kKHt9LCBvcHRpb25zLCB7aWQ6IGNhY2hlSWR9KSwKLSAgICAgICAgICBk
YXRhID0ge30sCi0gICAgICAgICAgY2FwYWNpdHkgPSAob3B0aW9ucyAmJiBvcHRpb25zLmNhcGFj
aXR5KSB8fCBOdW1iZXIuTUFYX1ZBTFVFLAotICAgICAgICAgIGxydUhhc2ggPSB7fSwKLSAgICAg
ICAgICBmcmVzaEVuZCA9IG51bGwsCi0gICAgICAgICAgc3RhbGVFbmQgPSBudWxsOwotCi0gICAg
ICByZXR1cm4gY2FjaGVzW2NhY2hlSWRdID0gewotCi0gICAgICAgIHB1dDogZnVuY3Rpb24oa2V5
LCB2YWx1ZSkgewotICAgICAgICAgIHZhciBscnVFbnRyeSA9IGxydUhhc2hba2V5XSB8fCAobHJ1
SGFzaFtrZXldID0ge2tleToga2V5fSk7Ci0KLSAgICAgICAgICByZWZyZXNoKGxydUVudHJ5KTsK
LQotICAgICAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybjsKLSAgICAgICAgICBp
ZiAoIShrZXkgaW4gZGF0YSkpIHNpemUrKzsKLSAgICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTsK
LQotICAgICAgICAgIGlmIChzaXplID4gY2FwYWNpdHkpIHsKLSAgICAgICAgICAgIHRoaXMucmVt
b3ZlKHN0YWxlRW5kLmtleSk7Ci0gICAgICAgICAgfQotICAgICAgICB9LAotCi0KLSAgICAgICAg
Z2V0OiBmdW5jdGlvbihrZXkpIHsKLSAgICAgICAgICB2YXIgbHJ1RW50cnkgPSBscnVIYXNoW2tl
eV07Ci0KLSAgICAgICAgICBpZiAoIWxydUVudHJ5KSByZXR1cm47Ci0KLSAgICAgICAgICByZWZy
ZXNoKGxydUVudHJ5KTsKLQotICAgICAgICAgIHJldHVybiBkYXRhW2tleV07Ci0gICAgICAgIH0s
Ci0KLQotICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKGtleSkgewotICAgICAgICAgIHZhciBscnVF
bnRyeSA9IGxydUhhc2hba2V5XTsKLQotICAgICAgICAgIGlmICghbHJ1RW50cnkpIHJldHVybjsK
LQotICAgICAgICAgIGlmIChscnVFbnRyeSA9PSBmcmVzaEVuZCkgZnJlc2hFbmQgPSBscnVFbnRy
eS5wOwotICAgICAgICAgIGlmIChscnVFbnRyeSA9PSBzdGFsZUVuZCkgc3RhbGVFbmQgPSBscnVF
bnRyeS5uOwotICAgICAgICAgIGxpbmsobHJ1RW50cnkubixscnVFbnRyeS5wKTsKLQotICAgICAg
ICAgIGRlbGV0ZSBscnVIYXNoW2tleV07Ci0gICAgICAgICAgZGVsZXRlIGRhdGFba2V5XTsKLSAg
ICAgICAgICBzaXplLS07Ci0gICAgICAgIH0sCi0KLQotICAgICAgICByZW1vdmVBbGw6IGZ1bmN0
aW9uKCkgewotICAgICAgICAgIGRhdGEgPSB7fTsKLSAgICAgICAgICBzaXplID0gMDsKLSAgICAg
ICAgICBscnVIYXNoID0ge307Ci0gICAgICAgICAgZnJlc2hFbmQgPSBzdGFsZUVuZCA9IG51bGw7
Ci0gICAgICAgIH0sCi0KLQotICAgICAgICBkZXN0cm95OiBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICBkYXRhID0gbnVsbDsKLSAgICAgICAgICBzdGF0cyA9IG51bGw7Ci0gICAgICAgICAgbHJ1SGFz
aCA9IG51bGw7Ci0gICAgICAgICAgZGVsZXRlIGNhY2hlc1tjYWNoZUlkXTsKLSAgICAgICAgfSwK
LQotCi0gICAgICAgIGluZm86IGZ1bmN0aW9uKCkgewotICAgICAgICAgIHJldHVybiBleHRlbmQo
e30sIHN0YXRzLCB7c2l6ZTogc2l6ZX0pOwotICAgICAgICB9Ci0gICAgICB9OwotCi0KLSAgICAg
IC8qKgotICAgICAgICogbWFrZXMgdGhlIGBlbnRyeWAgdGhlIGZyZXNoRW5kIG9mIHRoZSBMUlUg
bGlua2VkIGxpc3QKLSAgICAgICAqLwotICAgICAgZnVuY3Rpb24gcmVmcmVzaChlbnRyeSkgewot
ICAgICAgICBpZiAoZW50cnkgIT0gZnJlc2hFbmQpIHsKLSAgICAgICAgICBpZiAoIXN0YWxlRW5k
KSB7Ci0gICAgICAgICAgICBzdGFsZUVuZCA9IGVudHJ5OwotICAgICAgICAgIH0gZWxzZSBpZiAo
c3RhbGVFbmQgPT0gZW50cnkpIHsKLSAgICAgICAgICAgIHN0YWxlRW5kID0gZW50cnkubjsKLSAg
ICAgICAgICB9Ci0KLSAgICAgICAgICBsaW5rKGVudHJ5Lm4sIGVudHJ5LnApOwotICAgICAgICAg
IGxpbmsoZW50cnksIGZyZXNoRW5kKTsKLSAgICAgICAgICBmcmVzaEVuZCA9IGVudHJ5OwotICAg
ICAgICAgIGZyZXNoRW5kLm4gPSBudWxsOwotICAgICAgICB9Ci0gICAgICB9Ci0KLQotICAgICAg
LyoqCi0gICAgICAgKiBiaWRpcmVjdGlvbmFsbHkgbGlua3MgdHdvIGVudHJpZXMgb2YgdGhlIExS
VSBsaW5rZWQgbGlzdAotICAgICAgICovCi0gICAgICBmdW5jdGlvbiBsaW5rKG5leHRFbnRyeSwg
cHJldkVudHJ5KSB7Ci0gICAgICAgIGlmIChuZXh0RW50cnkgIT0gcHJldkVudHJ5KSB7Ci0gICAg
ICAgICAgaWYgKG5leHRFbnRyeSkgbmV4dEVudHJ5LnAgPSBwcmV2RW50cnk7IC8vcCBzdGFuZHMg
Zm9yIHByZXZpb3VzLCAncHJldicgZGlkbid0IG1pbmlmeQotICAgICAgICAgIGlmIChwcmV2RW50
cnkpIHByZXZFbnRyeS5uID0gbmV4dEVudHJ5OyAvL24gc3RhbmRzIGZvciBuZXh0LCAnbmV4dCcg
ZGlkbid0IG1pbmlmeQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0KLSAgICBjYWNoZUZh
Y3RvcnkuaW5mbyA9IGZ1bmN0aW9uKCkgewotICAgICAgdmFyIGluZm8gPSB7fTsKLSAgICAgIGZv
ckVhY2goY2FjaGVzLCBmdW5jdGlvbihjYWNoZSwgY2FjaGVJZCkgewotICAgICAgICBpbmZvW2Nh
Y2hlSWRdID0gY2FjaGUuaW5mbygpOwotICAgICAgfSk7Ci0gICAgICByZXR1cm4gaW5mbzsKLSAg
ICB9OwotCi0KLSAgICBjYWNoZUZhY3RvcnkuZ2V0ID0gZnVuY3Rpb24oY2FjaGVJZCkgewotICAg
ICAgcmV0dXJuIGNhY2hlc1tjYWNoZUlkXTsKLSAgICB9OwotCi0KLSAgICByZXR1cm4gY2FjaGVG
YWN0b3J5OwotICB9OwotfQotCi0vKioKLSAqIEBuZ2RvYyBvYmplY3QKLSAqIEBuYW1lIG5nLiR0
ZW1wbGF0ZUNhY2hlCi0gKgotICogQGRlc2NyaXB0aW9uCi0gKiBDYWNoZSB1c2VkIGZvciBzdG9y
aW5nIGh0bWwgdGVtcGxhdGVzLgotICoKLSAqIFNlZSB7QGxpbmsgbmcuJGNhY2hlRmFjdG9yeSAk
Y2FjaGVGYWN0b3J5fS4KLSAqCi0gKi8KLWZ1bmN0aW9uICRUZW1wbGF0ZUNhY2hlUHJvdmlkZXIo
KSB7Ci0gIHRoaXMuJGdldCA9IFsnJGNhY2hlRmFjdG9yeScsIGZ1bmN0aW9uKCRjYWNoZUZhY3Rv
cnkpIHsKLSAgICByZXR1cm4gJGNhY2hlRmFjdG9yeSgndGVtcGxhdGVzJyk7Ci0gIH1dOwotfQot
Ci0vKiAhIFZBUklBQkxFL0ZVTkNUSU9OIE5BTUlORyBDT05WRU5USU9OUyBUSEFUIEFQUExZIFRP
IFRISVMgRklMRSEKLSAqCi0gKiBET00tcmVsYXRlZCB2YXJpYWJsZXM6Ci0gKgotICogLSAibm9k
ZSIgLSBET00gTm9kZQotICogLSAiZWxlbWVudCIgLSBET00gRWxlbWVudCBvciBOb2RlCi0gKiAt
ICIkbm9kZSIgb3IgIiRlbGVtZW50IiAtIGpxTGl0ZS13cmFwcGVkIG5vZGUgb3IgZWxlbWVudAot
ICoKLSAqCi0gKiBDb21waWxlciByZWxhdGVkIHN0dWZmOgotICoKLSAqIC0gImxpbmtGbiIgLSBs
aW5raW5nIGZuIG9mIGEgc2luZ2xlIGRpcmVjdGl2ZQotICogLSAibm9kZUxpbmtGbiIgLSBmdW5j
dGlvbiB0aGF0IGFnZ3JlZ2F0ZXMgYWxsIGxpbmtpbmcgZm5zIGZvciBhIHBhcnRpY3VsYXIgbm9k
ZQotICogLSAiY2hpbGRMaW5rRm4iIC0gIGZ1bmN0aW9uIHRoYXQgYWdncmVnYXRlcyBhbGwgbGlu
a2luZyBmbnMgZm9yIGNoaWxkIG5vZGVzIG9mIGEgcGFydGljdWxhciBub2RlCi0gKiAtICJjb21w
b3NpdGVMaW5rRm4iIC0gZnVuY3Rpb24gdGhhdCBhZ2dyZWdhdGVzIGFsbCBsaW5raW5nIGZucyBm
b3IgYSBjb21waWxhdGlvbiByb290IChub2RlTGlzdCkKLSAqLwotCi0KLXZhciBOT05fQVNTSUdO
QUJMRV9NT0RFTF9FWFBSRVNTSU9OID0gJ05vbi1hc3NpZ25hYmxlIG1vZGVsIGV4cHJlc3Npb246
ICc7Ci0KLQotLyoqCi0gKiBAbmdkb2MgZnVuY3Rpb24KLSAqIEBuYW1lIG5nLiRjb21waWxlCi0g
KiBAZnVuY3Rpb24KLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIENvbXBpbGVzIGEgcGllY2Ugb2Yg
SFRNTCBzdHJpbmcgb3IgRE9NIGludG8gYSB0ZW1wbGF0ZSBhbmQgcHJvZHVjZXMgYSB0ZW1wbGF0
ZSBmdW5jdGlvbiwgd2hpY2gKLSAqIGNhbiB0aGVuIGJlIHVzZWQgdG8gbGluayB7QGxpbmsgbmcu
JHJvb3RTY29wZS5TY29wZSBzY29wZX0gYW5kIHRoZSB0ZW1wbGF0ZSB0b2dldGhlci4KLSAqCi0g
KiBUaGUgY29tcGlsYXRpb24gaXMgYSBwcm9jZXNzIG9mIHdhbGtpbmcgdGhlIERPTSB0cmVlIGFu
ZCB0cnlpbmcgdG8gbWF0Y2ggRE9NIGVsZW1lbnRzIHRvCi0gKiB7QGxpbmsgbmcuJGNvbXBpbGVQ
cm92aWRlciNkaXJlY3RpdmUgZGlyZWN0aXZlc30uIEZvciBlYWNoIG1hdGNoIGl0Ci0gKiBleGVj
dXRlcyBjb3JyZXNwb25kaW5nIHRlbXBsYXRlIGZ1bmN0aW9uIGFuZCBjb2xsZWN0cyB0aGUKLSAq
IGluc3RhbmNlIGZ1bmN0aW9ucyBpbnRvIGEgc2luZ2xlIHRlbXBsYXRlIGZ1bmN0aW9uIHdoaWNo
IGlzIHRoZW4gcmV0dXJuZWQuCi0gKgotICogVGhlIHRlbXBsYXRlIGZ1bmN0aW9uIGNhbiB0aGVu
IGJlIHVzZWQgb25jZSB0byBwcm9kdWNlIHRoZSB2aWV3IG9yIGFzIGl0IGlzIHRoZSBjYXNlIHdp
dGgKLSAqIHtAbGluayBuZy5kaXJlY3RpdmU6bmdSZXBlYXQgcmVwZWF0ZXJ9IG1hbnktdGltZXMs
IGluIHdoaWNoCi0gKiBjYXNlIGVhY2ggY2FsbCByZXN1bHRzIGluIGEgdmlldyB0aGF0IGlzIGEg
RE9NIGNsb25lIG9mIHRoZSBvcmlnaW5hbCB0ZW1wbGF0ZS4KLSAqCi0gPGRvYzpleGFtcGxlIG1v
ZHVsZT0iY29tcGlsZSI+Ci0gICA8ZG9jOnNvdXJjZT4KLSAgICA8c2NyaXB0PgotICAgICAgLy8g
ZGVjbGFyZSBhIG5ldyBtb2R1bGUsIGFuZCBpbmplY3QgdGhlICRjb21waWxlUHJvdmlkZXIKLSAg
ICAgIGFuZ3VsYXIubW9kdWxlKCdjb21waWxlJywgW10sIGZ1bmN0aW9uKCRjb21waWxlUHJvdmlk
ZXIpIHsKLSAgICAgICAgLy8gY29uZmlndXJlIG5ldyAnY29tcGlsZScgZGlyZWN0aXZlIGJ5IHBh
c3NpbmcgYSBkaXJlY3RpdmUKLSAgICAgICAgLy8gZmFjdG9yeSBmdW5jdGlvbi4gVGhlIGZhY3Rv
cnkgZnVuY3Rpb24gaW5qZWN0cyB0aGUgJyRjb21waWxlJwotICAgICAgICAkY29tcGlsZVByb3Zp
ZGVyLmRpcmVjdGl2ZSgnY29tcGlsZScsIGZ1bmN0aW9uKCRjb21waWxlKSB7Ci0gICAgICAgICAg
Ly8gZGlyZWN0aXZlIGZhY3RvcnkgY3JlYXRlcyBhIGxpbmsgZnVuY3Rpb24KLSAgICAgICAgICBy
ZXR1cm4gZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHJzKSB7Ci0gICAgICAgICAgICBzY29w
ZS4kd2F0Y2goCi0gICAgICAgICAgICAgIGZ1bmN0aW9uKHNjb3BlKSB7Ci0gICAgICAgICAgICAg
ICAgIC8vIHdhdGNoIHRoZSAnY29tcGlsZScgZXhwcmVzc2lvbiBmb3IgY2hhbmdlcwotICAgICAg
ICAgICAgICAgIHJldHVybiBzY29wZS4kZXZhbChhdHRycy5jb21waWxlKTsKLSAgICAgICAgICAg
ICAgfSwKLSAgICAgICAgICAgICAgZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgICAgICAgICAgICAv
LyB3aGVuIHRoZSAnY29tcGlsZScgZXhwcmVzc2lvbiBjaGFuZ2VzCi0gICAgICAgICAgICAgICAg
Ly8gYXNzaWduIGl0IGludG8gdGhlIGN1cnJlbnQgRE9NCi0gICAgICAgICAgICAgICAgZWxlbWVu
dC5odG1sKHZhbHVlKTsKLQotICAgICAgICAgICAgICAgIC8vIGNvbXBpbGUgdGhlIG5ldyBET00g
YW5kIGxpbmsgaXQgdG8gdGhlIGN1cnJlbnQKLSAgICAgICAgICAgICAgICAvLyBzY29wZS4KLSAg
ICAgICAgICAgICAgICAvLyBOT1RFOiB3ZSBvbmx5IGNvbXBpbGUgLmNoaWxkTm9kZXMgc28gdGhh
dAotICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IGdldCBpbnRvIGluZmluaXRlIGxvb3AgY29t
cGlsaW5nIG91cnNlbHZlcwotICAgICAgICAgICAgICAgICRjb21waWxlKGVsZW1lbnQuY29udGVu
dHMoKSkoc2NvcGUpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICApOwotICAgICAgICAg
IH07Ci0gICAgICAgIH0pCi0gICAgICB9KTsKLQotICAgICAgZnVuY3Rpb24gQ3RybCgkc2NvcGUp
IHsKLSAgICAgICAgJHNjb3BlLm5hbWUgPSAnQW5ndWxhcic7Ci0gICAgICAgICRzY29wZS5odG1s
ID0gJ0hlbGxvIHt7bmFtZX19JzsKLSAgICAgIH0KLSAgICA8L3NjcmlwdD4KLSAgICA8ZGl2IG5n
LWNvbnRyb2xsZXI9IkN0cmwiPgotICAgICAgPGlucHV0IG5nLW1vZGVsPSJuYW1lIj4gPGJyPgot
ICAgICAgPHRleHRhcmVhIG5nLW1vZGVsPSJodG1sIj48L3RleHRhcmVhPiA8YnI+Ci0gICAgICA8
ZGl2IGNvbXBpbGU9Imh0bWwiPjwvZGl2PgotICAgIDwvZGl2PgotICAgPC9kb2M6c291cmNlPgot
ICAgPGRvYzpzY2VuYXJpbz4KLSAgICAgaXQoJ3Nob3VsZCBhdXRvIGNvbXBpbGUnLCBmdW5jdGlv
bigpIHsKLSAgICAgICBleHBlY3QoZWxlbWVudCgnZGl2W2NvbXBpbGVdJykudGV4dCgpKS50b0Jl
KCdIZWxsbyBBbmd1bGFyJyk7Ci0gICAgICAgaW5wdXQoJ2h0bWwnKS5lbnRlcigne3tuYW1lfX0h
Jyk7Ci0gICAgICAgZXhwZWN0KGVsZW1lbnQoJ2Rpdltjb21waWxlXScpLnRleHQoKSkudG9CZSgn
QW5ndWxhciEnKTsKLSAgICAgfSk7Ci0gICA8L2RvYzpzY2VuYXJpbz4KLSA8L2RvYzpleGFtcGxl
PgotCi0gKgotICoKLSAqIEBwYXJhbSB7c3RyaW5nfERPTUVsZW1lbnR9IGVsZW1lbnQgRWxlbWVu
dCBvciBIVE1MIHN0cmluZyB0byBjb21waWxlIGludG8gYSB0ZW1wbGF0ZSBmdW5jdGlvbi4KLSAq
IEBwYXJhbSB7ZnVuY3Rpb24oYW5ndWxhci5TY29wZVssIGNsb25lQXR0YWNoRm5dfSB0cmFuc2Ns
dWRlIGZ1bmN0aW9uIGF2YWlsYWJsZSB0byBkaXJlY3RpdmVzLgotICogQHBhcmFtIHtudW1iZXJ9
IG1heFByaW9yaXR5IG9ubHkgYXBwbHkgZGlyZWN0aXZlcyBsb3dlciB0aGVuIGdpdmVuIHByaW9y
aXR5IChPbmx5IGVmZmVjdHMgdGhlCi0gKiAgICAgICAgICAgICAgICAgcm9vdCBlbGVtZW50KHMp
LCBub3QgdGhlaXIgY2hpbGRyZW4pCi0gKiBAcmV0dXJucyB7ZnVuY3Rpb24oc2NvcGVbLCBjbG9u
ZUF0dGFjaEZuXSl9IGEgbGluayBmdW5jdGlvbiB3aGljaCBpcyB1c2VkIHRvIGJpbmQgdGVtcGxh
dGUKLSAqIChhIERPTSBlbGVtZW50L3RyZWUpIHRvIGEgc2NvcGUuIFdoZXJlOgotICoKLSAqICAq
IGBzY29wZWAgLSBBIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIFNjb3BlfSB0byBiaW5kIHRv
LgotICogICogYGNsb25lQXR0YWNoRm5gIC0gSWYgYGNsb25lQXR0YWNoRm5gIGlzIHByb3ZpZGVk
LCB0aGVuIHRoZSBsaW5rIGZ1bmN0aW9uIHdpbGwgY2xvbmUgdGhlCi0gKiAgICAgICAgICAgICAg
IGB0ZW1wbGF0ZWAgYW5kIGNhbGwgdGhlIGBjbG9uZUF0dGFjaEZuYCBmdW5jdGlvbiBhbGxvd2lu
ZyB0aGUgY2FsbGVyIHRvIGF0dGFjaCB0aGUKLSAqICAgICAgICAgICAgICAgY2xvbmVkIGVsZW1l
bnRzIHRvIHRoZSBET00gZG9jdW1lbnQgYXQgdGhlIGFwcHJvcHJpYXRlIHBsYWNlLiBUaGUgYGNs
b25lQXR0YWNoRm5gIGlzCi0gKiAgICAgICAgICAgICAgIGNhbGxlZCBhczogPGJyPiBgY2xvbmVB
dHRhY2hGbihjbG9uZWRFbGVtZW50LCBzY29wZSlgIHdoZXJlOgotICoKLSAqICAgICAgKiBgY2xv
bmVkRWxlbWVudGAgLSBpcyBhIGNsb25lIG9mIHRoZSBvcmlnaW5hbCBgZWxlbWVudGAgcGFzc2Vk
IGludG8gdGhlIGNvbXBpbGVyLgotICogICAgICAqIGBzY29wZWAgLSBpcyB0aGUgY3VycmVudCBz
Y29wZSB3aXRoIHdoaWNoIHRoZSBsaW5raW5nIGZ1bmN0aW9uIGlzIHdvcmtpbmcgd2l0aC4KLSAq
Ci0gKiBDYWxsaW5nIHRoZSBsaW5raW5nIGZ1bmN0aW9uIHJldHVybnMgdGhlIGVsZW1lbnQgb2Yg
dGhlIHRlbXBsYXRlLiBJdCBpcyBlaXRoZXIgdGhlIG9yaWdpbmFsIGVsZW1lbnQKLSAqIHBhc3Nl
ZCBpbiwgb3IgdGhlIGNsb25lIG9mIHRoZSBlbGVtZW50IGlmIHRoZSBgY2xvbmVBdHRhY2hGbmAg
aXMgcHJvdmlkZWQuCi0gKgotICogQWZ0ZXIgbGlua2luZyB0aGUgdmlldyBpcyBub3QgdXBkYXRl
ZCB1bnRpbCBhZnRlciBhIGNhbGwgdG8gJGRpZ2VzdCB3aGljaCB0eXBpY2FsbHkgaXMgZG9uZSBi
eQotICogQW5ndWxhciBhdXRvbWF0aWNhbGx5LgotICoKLSAqIElmIHlvdSBuZWVkIGFjY2VzcyB0
byB0aGUgYm91bmQgdmlldywgdGhlcmUgYXJlIHR3byB3YXlzIHRvIGRvIGl0OgotICoKLSAqIC0g
SWYgeW91IGFyZSBub3QgYXNraW5nIHRoZSBsaW5raW5nIGZ1bmN0aW9uIHRvIGNsb25lIHRoZSB0
ZW1wbGF0ZSwgY3JlYXRlIHRoZSBET00gZWxlbWVudChzKQotICogICBiZWZvcmUgeW91IHNlbmQg
dGhlbSB0byB0aGUgY29tcGlsZXIgYW5kIGtlZXAgdGhpcyByZWZlcmVuY2UgYXJvdW5kLgotICog
ICA8cHJlPgotICogICAgIHZhciBlbGVtZW50ID0gJGNvbXBpbGUoJzxwPnt7dG90YWx9fTwvcD4n
KShzY29wZSk7Ci0gKiAgIDwvcHJlPgotICoKLSAqIC0gaWYgb24gdGhlIG90aGVyIGhhbmQsIHlv
dSBuZWVkIHRoZSBlbGVtZW50IHRvIGJlIGNsb25lZCwgdGhlIHZpZXcgcmVmZXJlbmNlIGZyb20g
dGhlIG9yaWdpbmFsCi0gKiAgIGV4YW1wbGUgd291bGQgbm90IHBvaW50IHRvIHRoZSBjbG9uZSwg
YnV0IHJhdGhlciB0byB0aGUgb3JpZ2luYWwgdGVtcGxhdGUgdGhhdCB3YXMgY2xvbmVkLiBJbgot
ICogICB0aGlzIGNhc2UsIHlvdSBjYW4gYWNjZXNzIHRoZSBjbG9uZSB2aWEgdGhlIGNsb25lQXR0
YWNoRm46Ci0gKiAgIDxwcmU+Ci0gKiAgICAgdmFyIHRlbXBsYXRlSFRNTCA9IGFuZ3VsYXIuZWxl
bWVudCgnPHA+e3t0b3RhbH19PC9wPicpLAotICogICAgICAgICBzY29wZSA9IC4uLi47Ci0gKgot
ICogICAgIHZhciBjbG9uZWRFbGVtZW50ID0gJGNvbXBpbGUodGVtcGxhdGVIVE1MKShzY29wZSwg
ZnVuY3Rpb24oY2xvbmVkRWxlbWVudCwgc2NvcGUpIHsKLSAqICAgICAgIC8vYXR0YWNoIHRoZSBj
bG9uZSB0byBET00gZG9jdW1lbnQgYXQgdGhlIHJpZ2h0IHBsYWNlCi0gKiAgICAgfSk7Ci0gKgot
ICogICAgIC8vbm93IHdlIGhhdmUgcmVmZXJlbmNlIHRvIHRoZSBjbG9uZWQgRE9NIHZpYSBgY2xv
bmVgCi0gKiAgIDwvcHJlPgotICoKLSAqCi0gKiBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRoZSBj
b21waWxlciB3b3Jrcywgc2VlIHRoZQotICoge0BsaW5rIGd1aWRlL2NvbXBpbGVyIEFuZ3VsYXIg
SFRNTCBDb21waWxlcn0gc2VjdGlvbiBvZiB0aGUgRGV2ZWxvcGVyIEd1aWRlLgotICovCi0KLQot
LyoqCi0gKiBAbmdkb2Mgc2VydmljZQotICogQG5hbWUgbmcuJGNvbXBpbGVQcm92aWRlcgotICog
QGZ1bmN0aW9uCi0gKgotICogQGRlc2NyaXB0aW9uCi0gKi8KLSRDb21waWxlUHJvdmlkZXIuJGlu
amVjdCA9IFsnJHByb3ZpZGUnXTsKLWZ1bmN0aW9uICRDb21waWxlUHJvdmlkZXIoJHByb3ZpZGUp
IHsKLSAgdmFyIGhhc0RpcmVjdGl2ZXMgPSB7fSwKLSAgICAgIFN1ZmZpeCA9ICdEaXJlY3RpdmUn
LAotICAgICAgQ09NTUVOVF9ESVJFQ1RJVkVfUkVHRVhQID0gL15ccypkaXJlY3RpdmVcOlxzKihb
XGRcd1wtX10rKVxzKyguKikkLywKLSAgICAgIENMQVNTX0RJUkVDVElWRV9SRUdFWFAgPSAvKChb
XGRcd1wtX10rKSg/Olw6KFteO10rKSk/Oz8pLywKLSAgICAgIE1VTFRJX1JPT1RfVEVNUExBVEVf
RVJST1IgPSAnVGVtcGxhdGUgbXVzdCBoYXZlIGV4YWN0bHkgb25lIHJvb3QgZWxlbWVudC4gd2Fz
OiAnLAotICAgICAgdXJsU2FuaXRpemF0aW9uV2hpdGVsaXN0ID0gL15ccyooaHR0cHM/fGZ0cHxt
YWlsdG98ZmlsZSk6LzsKLQotCi0gIC8qKgotICAgKiBAbmdkb2MgZnVuY3Rpb24KLSAgICogQG5h
bWUgbmcuJGNvbXBpbGVQcm92aWRlciNkaXJlY3RpdmUKLSAgICogQG1ldGhvZE9mIG5nLiRjb21w
aWxlUHJvdmlkZXIKLSAgICogQGZ1bmN0aW9uCi0gICAqCi0gICAqIEBkZXNjcmlwdGlvbgotICAg
KiBSZWdpc3RlciBhIG5ldyBkaXJlY3RpdmVzIHdpdGggdGhlIGNvbXBpbGVyLgotICAgKgotICAg
KiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lIG9mIHRoZSBkaXJlY3RpdmUgaW4gY2FtZWwtY2Fz
ZS4gKGllIDxjb2RlPm5nQmluZDwvY29kZT4gd2hpY2ggd2lsbCBtYXRjaCBhcwotICAgKiAgICAg
ICAgICAgICAgICA8Y29kZT5uZy1iaW5kPC9jb2RlPikuCi0gICAqIEBwYXJhbSB7ZnVuY3Rpb259
IGRpcmVjdGl2ZUZhY3RvcnkgQW4gaW5qZWN0YWJsZSBkaXJlY3RpdmUgZmFjdHJveSBmdW5jdGlv
bi4gU2VlIHtAbGluayBndWlkZS9kaXJlY3RpdmV9IGZvciBtb3JlCi0gICAqICAgICAgICAgICAg
ICAgIGluZm8uCi0gICAqIEByZXR1cm5zIHtuZy4kY29tcGlsZVByb3ZpZGVyfSBTZWxmIGZvciBj
aGFpbmluZy4KLSAgICovCi0gICB0aGlzLmRpcmVjdGl2ZSA9IGZ1bmN0aW9uIHJlZ2lzdGVyRGly
ZWN0aXZlKG5hbWUsIGRpcmVjdGl2ZUZhY3RvcnkpIHsKLSAgICBpZiAoaXNTdHJpbmcobmFtZSkp
IHsKLSAgICAgIGFzc2VydEFyZyhkaXJlY3RpdmVGYWN0b3J5LCAnZGlyZWN0aXZlJyk7Ci0gICAg
ICBpZiAoIWhhc0RpcmVjdGl2ZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHsKLSAgICAgICAgaGFz
RGlyZWN0aXZlc1tuYW1lXSA9IFtdOwotICAgICAgICAkcHJvdmlkZS5mYWN0b3J5KG5hbWUgKyBT
dWZmaXgsIFsnJGluamVjdG9yJywgJyRleGNlcHRpb25IYW5kbGVyJywKLSAgICAgICAgICBmdW5j
dGlvbigkaW5qZWN0b3IsICRleGNlcHRpb25IYW5kbGVyKSB7Ci0gICAgICAgICAgICB2YXIgZGly
ZWN0aXZlcyA9IFtdOwotICAgICAgICAgICAgZm9yRWFjaChoYXNEaXJlY3RpdmVzW25hbWVdLCBm
dW5jdGlvbihkaXJlY3RpdmVGYWN0b3J5KSB7Ci0gICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIGRpcmVjdGl2ZSA9ICRpbmplY3Rvci5pbnZva2UoZGlyZWN0aXZlRmFjdG9y
eSk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGlyZWN0aXZlKSkgewotICAgICAg
ICAgICAgICAgICAgZGlyZWN0aXZlID0geyBjb21waWxlOiB2YWx1ZUZuKGRpcmVjdGl2ZSkgfTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFkaXJlY3RpdmUuY29tcGlsZSAmJiBkaXJlY3Rp
dmUubGluaykgewotICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlLmNvbXBpbGUgPSB2YWx1ZUZu
KGRpcmVjdGl2ZS5saW5rKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGly
ZWN0aXZlLnByaW9yaXR5ID0gZGlyZWN0aXZlLnByaW9yaXR5IHx8IDA7Ci0gICAgICAgICAgICAg
ICAgZGlyZWN0aXZlLm5hbWUgPSBkaXJlY3RpdmUubmFtZSB8fCBuYW1lOwotICAgICAgICAgICAg
ICAgIGRpcmVjdGl2ZS5yZXF1aXJlID0gZGlyZWN0aXZlLnJlcXVpcmUgfHwgKGRpcmVjdGl2ZS5j
b250cm9sbGVyICYmIGRpcmVjdGl2ZS5uYW1lKTsKLSAgICAgICAgICAgICAgICBkaXJlY3RpdmUu
cmVzdHJpY3QgPSBkaXJlY3RpdmUucmVzdHJpY3QgfHwgJ0EnOwotICAgICAgICAgICAgICAgIGRp
cmVjdGl2ZXMucHVzaChkaXJlY3RpdmUpOwotICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0g
ICAgICAgICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoZSk7Ci0gICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuIGRpcmVjdGl2ZXM7Ci0gICAgICAgICAg
fV0pOwotICAgICAgfQotICAgICAgaGFzRGlyZWN0aXZlc1tuYW1lXS5wdXNoKGRpcmVjdGl2ZUZh
Y3RvcnkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBmb3JFYWNoKG5hbWUsIHJldmVyc2VQYXJhbXMo
cmVnaXN0ZXJEaXJlY3RpdmUpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH07Ci0KLQot
ICAvKioKLSAgICogQG5nZG9jIGZ1bmN0aW9uCi0gICAqIEBuYW1lIG5nLiRjb21waWxlUHJvdmlk
ZXIjdXJsU2FuaXRpemF0aW9uV2hpdGVsaXN0Ci0gICAqIEBtZXRob2RPZiBuZy4kY29tcGlsZVBy
b3ZpZGVyCi0gICAqIEBmdW5jdGlvbgotICAgKgotICAgKiBAZGVzY3JpcHRpb24KLSAgICogUmV0
cmlldmVzIG9yIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBp
cyB1c2VkIGZvciB3aGl0ZWxpc3Rpbmcgb2Ygc2FmZQotICAgKiB1cmxzIGR1cmluZyBhW2hyZWZd
IHNhbml0aXphdGlvbi4KLSAgICoKLSAgICogVGhlIHNhbml0aXphdGlvbiBpcyBhIHNlY3VyaXR5
IG1lYXN1cmUgYWltZWQgYXQgcHJldmVudCBYU1MgYXR0YWNrcyB2aWEgaHRtbCBsaW5rcy4KLSAg
ICoKLSAgICogQW55IHVybCBhYm91dCB0byBiZSBhc3NpZ25lZCB0byBhW2hyZWZdIHZpYSBkYXRh
LWJpbmRpbmcgaXMgZmlyc3Qgbm9ybWFsaXplZCBhbmQgdHVybmVkIGludG8gYW4KLSAgICogYWJz
b2x1dGUgdXJsLiBBZnRlcndhcmRzIHRoZSB1cmwgaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBgdXJs
U2FuaXRpemF0aW9uV2hpdGVsaXN0YCByZWd1bGFyCi0gICAqIGV4cHJlc3Npb24uIElmIGEgbWF0
Y2ggaXMgZm91bmQgdGhlIG9yaWdpbmFsIHVybCBpcyB3cml0dGVuIGludG8gdGhlIGRvbS4gT3Ro
ZXJ3aXNlIHRoZQotICAgKiBhYnNvbHV0ZSB1cmwgaXMgcHJlZml4ZWQgd2l0aCBgJ3Vuc2FmZTon
YCBzdHJpbmcgYW5kIG9ubHkgdGhlbiBpdCBpcyB3cml0dGVuIGludG8gdGhlIERPTS4KLSAgICoK
LSAgICogQHBhcmFtIHtSZWdFeHA9fSByZWdleHAgTmV3IHJlZ2V4cCB0byB3aGl0ZWxpc3QgdXJs
cyB3aXRoLgotICAgKiBAcmV0dXJucyB7UmVnRXhwfG5nLiRjb21waWxlUHJvdmlkZXJ9IEN1cnJl
bnQgUmVnRXhwIGlmIGNhbGxlZCB3aXRob3V0IHZhbHVlIG9yIHNlbGYgZm9yCi0gICAqICAgIGNo
YWluaW5nIG90aGVyd2lzZS4KLSAgICovCi0gIHRoaXMudXJsU2FuaXRpemF0aW9uV2hpdGVsaXN0
ID0gZnVuY3Rpb24ocmVnZXhwKSB7Ci0gICAgaWYgKGlzRGVmaW5lZChyZWdleHApKSB7Ci0gICAg
ICB1cmxTYW5pdGl6YXRpb25XaGl0ZWxpc3QgPSByZWdleHA7Ci0gICAgICByZXR1cm4gdGhpczsK
LSAgICB9Ci0gICAgcmV0dXJuIHVybFNhbml0aXphdGlvbldoaXRlbGlzdDsKLSAgfTsKLQotCi0g
IHRoaXMuJGdldCA9IFsKLSAgICAgICAgICAgICckaW5qZWN0b3InLCAnJGludGVycG9sYXRlJywg
JyRleGNlcHRpb25IYW5kbGVyJywgJyRodHRwJywgJyR0ZW1wbGF0ZUNhY2hlJywgJyRwYXJzZScs
Ci0gICAgICAgICAgICAnJGNvbnRyb2xsZXInLCAnJHJvb3RTY29wZScsICckZG9jdW1lbnQnLAot
ICAgIGZ1bmN0aW9uKCRpbmplY3RvciwgICAkaW50ZXJwb2xhdGUsICAgJGV4Y2VwdGlvbkhhbmRs
ZXIsICAgJGh0dHAsICAgJHRlbXBsYXRlQ2FjaGUsICAgJHBhcnNlLAotICAgICAgICAgICAgICRj
b250cm9sbGVyLCAgICRyb290U2NvcGUsICAgJGRvY3VtZW50KSB7Ci0KLSAgICB2YXIgQXR0cmli
dXRlcyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHIpIHsKLSAgICAgIHRoaXMuJCRlbGVtZW50ID0g
ZWxlbWVudDsKLSAgICAgIHRoaXMuJGF0dHIgPSBhdHRyIHx8IHt9OwotICAgIH07Ci0KLSAgICBB
dHRyaWJ1dGVzLnByb3RvdHlwZSA9IHsKLSAgICAgICRub3JtYWxpemU6IGRpcmVjdGl2ZU5vcm1h
bGl6ZSwKLQotCi0gICAgICAvKioKLSAgICAgICAqIFNldCBhIG5vcm1hbGl6ZWQgYXR0cmlidXRl
IG9uIHRoZSBlbGVtZW50IGluIGEgd2F5IHN1Y2ggdGhhdCBhbGwgZGlyZWN0aXZlcwotICAgICAg
ICogY2FuIHNoYXJlIHRoZSBhdHRyaWJ1dGUuIFRoaXMgZnVuY3Rpb24gcHJvcGVybHkgaGFuZGxl
cyBib29sZWFuIGF0dHJpYnV0ZXMuCi0gICAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IE5vcm1h
bGl6ZWQga2V5LiAoaWUgbmdBdHRyaWJ1dGUpCi0gICAgICAgKiBAcGFyYW0ge3N0cmluZ3xib29s
ZWFufSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LiBJZiBgbnVsbGAgYXR0cmlidXRlIHdpbGwgYmUg
ZGVsZXRlZC4KLSAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHdyaXRlQXR0ciBJZiBmYWxzZSwg
ZG9lcyBub3Qgd3JpdGUgdGhlIHZhbHVlIHRvIERPTSBlbGVtZW50IGF0dHJpYnV0ZS4KLSAgICAg
ICAqICAgICBEZWZhdWx0cyB0byB0cnVlLgotICAgICAgICogQHBhcmFtIHtzdHJpbmc9fSBhdHRy
TmFtZSBPcHRpb25hbCBub25lIG5vcm1hbGl6ZWQgbmFtZS4gRGVmYXVsdHMgdG8ga2V5LgotICAg
ICAgICovCi0gICAgICAkc2V0OiBmdW5jdGlvbihrZXksIHZhbHVlLCB3cml0ZUF0dHIsIGF0dHJO
YW1lKSB7Ci0gICAgICAgIHZhciBib29sZWFuS2V5ID0gZ2V0Qm9vbGVhbkF0dHJOYW1lKHRoaXMu
JCRlbGVtZW50WzBdLCBrZXkpLAotICAgICAgICAgICAgJCRvYnNlcnZlcnMgPSB0aGlzLiQkb2Jz
ZXJ2ZXJzLAotICAgICAgICAgICAgbm9ybWFsaXplZFZhbDsKLQotICAgICAgICBpZiAoYm9vbGVh
bktleSkgewotICAgICAgICAgIHRoaXMuJCRlbGVtZW50LnByb3Aoa2V5LCB2YWx1ZSk7Ci0gICAg
ICAgICAgYXR0ck5hbWUgPSBib29sZWFuS2V5OwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpc1tr
ZXldID0gdmFsdWU7Ci0KLSAgICAgICAgLy8gdHJhbnNsYXRlIG5vcm1hbGl6ZWQga2V5IHRvIGFj
dHVhbCBrZXkKLSAgICAgICAgaWYgKGF0dHJOYW1lKSB7Ci0gICAgICAgICAgdGhpcy4kYXR0cltr
ZXldID0gYXR0ck5hbWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgYXR0ck5hbWUgPSB0
aGlzLiRhdHRyW2tleV07Ci0gICAgICAgICAgaWYgKCFhdHRyTmFtZSkgewotICAgICAgICAgICAg
dGhpcy4kYXR0cltrZXldID0gYXR0ck5hbWUgPSBzbmFrZV9jYXNlKGtleSwgJy0nKTsKLSAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotCi0gICAgICAgIC8vIHNhbml0aXplIGFbaHJlZl0gdmFsdWVz
Ci0gICAgICAgIGlmIChub2RlTmFtZV8odGhpcy4kJGVsZW1lbnRbMF0pID09PSAnQScgJiYga2V5
ID09PSAnaHJlZicpIHsKLSAgICAgICAgICB1cmxTYW5pdGl6YXRpb25Ob2RlLnNldEF0dHJpYnV0
ZSgnaHJlZicsIHZhbHVlKTsKLQotICAgICAgICAgIC8vIGhyZWYgcHJvcGVydHkgYWx3YXlzIHJl
dHVybnMgbm9ybWFsaXplZCBhYnNvbHV0ZSB1cmwsIHNvIHdlIGNhbiBtYXRjaCBhZ2FpbnN0IHRo
YXQKLSAgICAgICAgICBub3JtYWxpemVkVmFsID0gdXJsU2FuaXRpemF0aW9uTm9kZS5ocmVmOwot
ICAgICAgICAgIGlmICghbm9ybWFsaXplZFZhbC5tYXRjaCh1cmxTYW5pdGl6YXRpb25XaGl0ZWxp
c3QpKSB7Ci0gICAgICAgICAgICB0aGlzW2tleV0gPSB2YWx1ZSA9ICd1bnNhZmU6JyArIG5vcm1h
bGl6ZWRWYWw7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLQotICAgICAgICBpZiAod3JpdGVB
dHRyICE9PSBmYWxzZSkgewotICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9
PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICB0aGlzLiQkZWxlbWVudC5yZW1vdmVBdHRyKGF0
dHJOYW1lKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhpcy4kJGVsZW1lbnQu
YXR0cihhdHRyTmFtZSwgdmFsdWUpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IC8vIGZpcmUgb2JzZXJ2ZXJzCi0gICAgICAgICQkb2JzZXJ2ZXJzICYmIGZvckVhY2goJCRvYnNl
cnZlcnNba2V5XSwgZnVuY3Rpb24oZm4pIHsKLSAgICAgICAgICB0cnkgewotICAgICAgICAgICAg
Zm4odmFsdWUpOwotICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgICRleGNlcHRp
b25IYW5kbGVyKGUpOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICB9LAotCi0KLSAg
ICAgIC8qKgotICAgICAgICogT2JzZXJ2ZSBhbiBpbnRlcnBvbGF0ZWQgYXR0cmlidXRlLgotICAg
ICAgICogVGhlIG9ic2VydmVyIHdpbGwgbmV2ZXIgYmUgY2FsbGVkLCBpZiBnaXZlbiBhdHRyaWJ1
dGUgaXMgbm90IGludGVycG9sYXRlZC4KLSAgICAgICAqCi0gICAgICAgKiBAcGFyYW0ge3N0cmlu
Z30ga2V5IE5vcm1hbGl6ZWQga2V5LiAoaWUgbmdBdHRyaWJ1dGUpIC4KLSAgICAgICAqIEBwYXJh
bSB7ZnVuY3Rpb24oKil9IGZuIEZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIg
dGhlIGF0dHJpYnV0ZSB2YWx1ZSBjaGFuZ2VzLgotICAgICAgICogQHJldHVybnMge2Z1bmN0aW9u
KCopfSB0aGUgYGZuYCBGdW5jdGlvbiBwYXNzZWQgaW4uCi0gICAgICAgKi8KLSAgICAgICRvYnNl
cnZlOiBmdW5jdGlvbihrZXksIGZuKSB7Ci0gICAgICAgIHZhciBhdHRycyA9IHRoaXMsCi0gICAg
ICAgICAgICAkJG9ic2VydmVycyA9IChhdHRycy4kJG9ic2VydmVycyB8fCAoYXR0cnMuJCRvYnNl
cnZlcnMgPSB7fSkpLAotICAgICAgICAgICAgbGlzdGVuZXJzID0gKCQkb2JzZXJ2ZXJzW2tleV0g
fHwgKCQkb2JzZXJ2ZXJzW2tleV0gPSBbXSkpOwotCi0gICAgICAgIGxpc3RlbmVycy5wdXNoKGZu
KTsKLSAgICAgICAgJHJvb3RTY29wZS4kZXZhbEFzeW5jKGZ1bmN0aW9uKCkgewotICAgICAgICAg
IGlmICghbGlzdGVuZXJzLiQkaW50ZXIpIHsKLSAgICAgICAgICAgIC8vIG5vIG9uZSByZWdpc3Rl
cmVkIGF0dHJpYnV0ZSBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uLCBzbyBsZXRzIGNhbGwgaXQgbWFu
dWFsbHkKLSAgICAgICAgICAgIGZuKGF0dHJzW2tleV0pOwotICAgICAgICAgIH0KLSAgICAgICAg
fSk7Ci0gICAgICAgIHJldHVybiBmbjsKLSAgICAgIH0KLSAgICB9OwotCi0gICAgdmFyIHVybFNh
bml0aXphdGlvbk5vZGUgPSAkZG9jdW1lbnRbMF0uY3JlYXRlRWxlbWVudCgnYScpLAotICAgICAg
ICBzdGFydFN5bWJvbCA9ICRpbnRlcnBvbGF0ZS5zdGFydFN5bWJvbCgpLAotICAgICAgICBlbmRT
eW1ib2wgPSAkaW50ZXJwb2xhdGUuZW5kU3ltYm9sKCksCi0gICAgICAgIGRlbm9ybWFsaXplVGVt
cGxhdGUgPSAoc3RhcnRTeW1ib2wgPT0gJ3t7JyB8fCBlbmRTeW1ib2wgID09ICd9fScpCi0gICAg
ICAgICAgICA/IGlkZW50aXR5Ci0gICAgICAgICAgICA6IGZ1bmN0aW9uIGRlbm9ybWFsaXplVGVt
cGxhdGUodGVtcGxhdGUpIHsKLSAgICAgICAgICAgICAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2Uo
L1x7XHsvZywgc3RhcnRTeW1ib2wpLnJlcGxhY2UoL319L2csIGVuZFN5bWJvbCk7Ci0gICAgICAg
ICAgICB9OwotCi0KLSAgICByZXR1cm4gY29tcGlsZTsKLQotICAgIC8vPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLQotICAgIGZ1bmN0aW9uIGNvbXBpbGUoJGNvbXBpbGVOb2Rlcywg
dHJhbnNjbHVkZUZuLCBtYXhQcmlvcml0eSkgewotICAgICAgaWYgKCEoJGNvbXBpbGVOb2RlcyBp
bnN0YW5jZW9mIGpxTGl0ZSkpIHsKLSAgICAgICAgLy8ganF1ZXJ5IGFsd2F5cyByZXdyYXBzLCB3
aGVyZWFzIHdlIG5lZWQgdG8gcHJlc2VydmUgdGhlIG9yaWdpbmFsIHNlbGVjdG9yIHNvIHRoYXQg
d2UgY2FuIG1vZGlmeSBpdC4KLSAgICAgICAgJGNvbXBpbGVOb2RlcyA9IGpxTGl0ZSgkY29tcGls
ZU5vZGVzKTsKLSAgICAgIH0KLSAgICAgIC8vIFdlIGNhbiBub3QgY29tcGlsZSB0b3AgbGV2ZWwg
dGV4dCBlbGVtZW50cyBzaW5jZSB0ZXh0IG5vZGVzIGNhbiBiZSBtZXJnZWQgYW5kIHdlIHdpbGwK
LSAgICAgIC8vIG5vdCBiZSBhYmxlIHRvIGF0dGFjaCBzY29wZSBkYXRhIHRvIHRoZW0sIHNvIHdl
IHdpbGwgd3JhcCB0aGVtIGluIDxzcGFuPgotICAgICAgZm9yRWFjaCgkY29tcGlsZU5vZGVzLCBm
dW5jdGlvbihub2RlLCBpbmRleCl7Ci0gICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IDMgLyog
dGV4dCBub2RlICovICYmIG5vZGUubm9kZVZhbHVlLm1hdGNoKC9cUysvKSAvKiBub24tZW1wdHkg
Ki8gKSB7Ci0gICAgICAgICAgJGNvbXBpbGVOb2Rlc1tpbmRleF0gPSBqcUxpdGUobm9kZSkud3Jh
cCgnPHNwYW4+PC9zcGFuPicpLnBhcmVudCgpWzBdOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAg
ICAgIHZhciBjb21wb3NpdGVMaW5rRm4gPSBjb21waWxlTm9kZXMoJGNvbXBpbGVOb2RlcywgdHJh
bnNjbHVkZUZuLCAkY29tcGlsZU5vZGVzLCBtYXhQcmlvcml0eSk7Ci0gICAgICByZXR1cm4gZnVu
Y3Rpb24gcHVibGljTGlua0ZuKHNjb3BlLCBjbG9uZUNvbm5lY3RGbil7Ci0gICAgICAgIGFzc2Vy
dEFyZyhzY29wZSwgJ3Njb3BlJyk7Ci0gICAgICAgIC8vIGltcG9ydGFudCEhOiB3ZSBtdXN0IGNh
bGwgb3VyIGpxTGl0ZS5jbG9uZSgpIHNpbmNlIHRoZSBqUXVlcnkgb25lIGlzIHRyeWluZyB0byBi
ZSBzbWFydAotICAgICAgICAvLyBhbmQgc29tZXRpbWVzIGNoYW5nZXMgdGhlIHN0cnVjdHVyZSBv
ZiB0aGUgRE9NLgotICAgICAgICB2YXIgJGxpbmtOb2RlID0gY2xvbmVDb25uZWN0Rm4KLSAgICAg
ICAgICA/IEpRTGl0ZVByb3RvdHlwZS5jbG9uZS5jYWxsKCRjb21waWxlTm9kZXMpIC8vIElNUE9S
VEFOVCEhIQotICAgICAgICAgIDogJGNvbXBpbGVOb2RlczsKLQotICAgICAgICAvLyBBdHRhY2gg
c2NvcGUgb25seSB0byBub24tdGV4dCBub2Rlcy4KLSAgICAgICAgZm9yKHZhciBpID0gMCwgaWkg
PSAkbGlua05vZGUubGVuZ3RoOyBpPGlpOyBpKyspIHsKLSAgICAgICAgICB2YXIgbm9kZSA9ICRs
aW5rTm9kZVtpXTsKLSAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSAxIC8qIGVsZW1lbnQg
Ki8gfHwgbm9kZS5ub2RlVHlwZSA9PSA5IC8qIGRvY3VtZW50ICovKSB7Ci0gICAgICAgICAgICAk
bGlua05vZGUuZXEoaSkuZGF0YSgnJHNjb3BlJywgc2NvcGUpOwotICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBzYWZlQWRkQ2xhc3MoJGxpbmtOb2RlLCAnbmctc2NvcGUnKTsKLSAgICAg
ICAgaWYgKGNsb25lQ29ubmVjdEZuKSBjbG9uZUNvbm5lY3RGbigkbGlua05vZGUsIHNjb3BlKTsK
LSAgICAgICAgaWYgKGNvbXBvc2l0ZUxpbmtGbikgY29tcG9zaXRlTGlua0ZuKHNjb3BlLCAkbGlu
a05vZGUsICRsaW5rTm9kZSk7Ci0gICAgICAgIHJldHVybiAkbGlua05vZGU7Ci0gICAgICB9Owot
ICAgIH0KLQotICAgIGZ1bmN0aW9uIHdyb25nTW9kZShsb2NhbE5hbWUsIG1vZGUpIHsKLSAgICAg
IHRocm93IEVycm9yKCJVbnN1cHBvcnRlZCAnIiArIG1vZGUgKyAiJyBmb3IgJyIgKyBsb2NhbE5h
bWUgKyAiJy4iKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBzYWZlQWRkQ2xhc3MoJGVsZW1lbnQs
IGNsYXNzTmFtZSkgewotICAgICAgdHJ5IHsKLSAgICAgICAgJGVsZW1lbnQuYWRkQ2xhc3MoY2xh
c3NOYW1lKTsKLSAgICAgIH0gY2F0Y2goZSkgewotICAgICAgICAvLyBpZ25vcmUsIHNpbmNlIGl0
IG1lYW5zIHRoYXQgd2UgYXJlIHRyeWluZyB0byBzZXQgY2xhc3Mgb24KLSAgICAgICAgLy8gU1ZH
IGVsZW1lbnQsIHdoZXJlIGNsYXNzIG5hbWUgaXMgcmVhZC1vbmx5LgotICAgICAgfQotICAgIH0K
LQotICAgIC8qKgotICAgICAqIENvbXBpbGUgZnVuY3Rpb24gbWF0Y2hlcyBlYWNoIG5vZGUgaW4g
bm9kZUxpc3QgYWdhaW5zdCB0aGUgZGlyZWN0aXZlcy4gT25jZSBhbGwgZGlyZWN0aXZlcwotICAg
ICAqIGZvciBhIHBhcnRpY3VsYXIgbm9kZSBhcmUgY29sbGVjdGVkIHRoZWlyIGNvbXBpbGUgZnVu
Y3Rpb25zIGFyZSBleGVjdXRlZC4gVGhlIGNvbXBpbGUKLSAgICAgKiBmdW5jdGlvbnMgcmV0dXJu
IHZhbHVlcyAtIHRoZSBsaW5raW5nIGZ1bmN0aW9ucyAtIGFyZSBjb21iaW5lZCBpbnRvIGEgY29t
cG9zaXRlIGxpbmtpbmcKLSAgICAgKiBmdW5jdGlvbiwgd2hpY2ggaXMgdGhlIGEgbGlua2luZyBm
dW5jdGlvbiBmb3IgdGhlIG5vZGUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0ge05vZGVMaXN0fSBu
b2RlTGlzdCBhbiBhcnJheSBvZiBub2RlcyBvciBOb2RlTGlzdCB0byBjb21waWxlCi0gICAgICog
QHBhcmFtIHtmdW5jdGlvbihhbmd1bGFyLlNjb3BlWywgY2xvbmVBdHRhY2hGbl19IHRyYW5zY2x1
ZGVGbiBBIGxpbmtpbmcgZnVuY3Rpb24sIHdoZXJlIHRoZQotICAgICAqICAgICAgICBzY29wZSBh
cmd1bWVudCBpcyBhdXRvLWdlbmVyYXRlZCB0byB0aGUgbmV3IGNoaWxkIG9mIHRoZSB0cmFuc2Ns
dWRlZCBwYXJlbnQgc2NvcGUuCi0gICAgICogQHBhcmFtIHtET01FbGVtZW50PX0gJHJvb3RFbGVt
ZW50IElmIHRoZSBub2RlTGlzdCBpcyB0aGUgcm9vdCBvZiB0aGUgY29tcGlsYXRpb24gdHJlZSB0
aGVuIHRoZQotICAgICAqICAgICAgICByb290RWxlbWVudCBtdXN0IGJlIHNldCB0aGUganFMaXRl
IGNvbGxlY3Rpb24gb2YgdGhlIGNvbXBpbGUgcm9vdC4gVGhpcyBpcwotICAgICAqICAgICAgICBu
ZWVkZWQgc28gdGhhdCB0aGUganFMaXRlIGNvbGxlY3Rpb24gaXRlbXMgY2FuIGJlIHJlcGxhY2Vk
IHdpdGggd2lkZ2V0cy4KLSAgICAgKiBAcGFyYW0ge251bWJlcj19IG1heCBkaXJlY3RpdmUgcHJp
b3JpdHkKLSAgICAgKiBAcmV0dXJucyB7P2Z1bmN0aW9ufSBBIGNvbXBvc2l0ZSBsaW5raW5nIGZ1
bmN0aW9uIG9mIGFsbCBvZiB0aGUgbWF0Y2hlZCBkaXJlY3RpdmVzIG9yIG51bGwuCi0gICAgICov
Ci0gICAgZnVuY3Rpb24gY29tcGlsZU5vZGVzKG5vZGVMaXN0LCB0cmFuc2NsdWRlRm4sICRyb290
RWxlbWVudCwgbWF4UHJpb3JpdHkpIHsKLSAgICAgIHZhciBsaW5rRm5zID0gW10sCi0gICAgICAg
ICAgbm9kZUxpbmtGbiwgY2hpbGRMaW5rRm4sIGRpcmVjdGl2ZXMsIGF0dHJzLCBsaW5rRm5Gb3Vu
ZDsKLQotICAgICAgZm9yKHZhciBpID0gMDsgaSA8IG5vZGVMaXN0Lmxlbmd0aDsgaSsrKSB7Ci0g
ICAgICAgIGF0dHJzID0gbmV3IEF0dHJpYnV0ZXMoKTsKLQotICAgICAgICAvLyB3ZSBtdXN0IGFs
d2F5cyByZWZlciB0byBub2RlTGlzdFtpXSBzaW5jZSB0aGUgbm9kZXMgY2FuIGJlIHJlcGxhY2Vk
IHVuZGVybmVhdGggdXMuCi0gICAgICAgIGRpcmVjdGl2ZXMgPSBjb2xsZWN0RGlyZWN0aXZlcyhu
b2RlTGlzdFtpXSwgW10sIGF0dHJzLCBtYXhQcmlvcml0eSk7Ci0KLSAgICAgICAgbm9kZUxpbmtG
biA9IChkaXJlY3RpdmVzLmxlbmd0aCkKLSAgICAgICAgICAgID8gYXBwbHlEaXJlY3RpdmVzVG9O
b2RlKGRpcmVjdGl2ZXMsIG5vZGVMaXN0W2ldLCBhdHRycywgdHJhbnNjbHVkZUZuLCAkcm9vdEVs
ZW1lbnQpCi0gICAgICAgICAgICA6IG51bGw7Ci0KLSAgICAgICAgY2hpbGRMaW5rRm4gPSAobm9k
ZUxpbmtGbiAmJiBub2RlTGlua0ZuLnRlcm1pbmFsIHx8ICFub2RlTGlzdFtpXS5jaGlsZE5vZGVz
IHx8ICFub2RlTGlzdFtpXS5jaGlsZE5vZGVzLmxlbmd0aCkKLSAgICAgICAgICAgID8gbnVsbAot
ICAgICAgICAgICAgOiBjb21waWxlTm9kZXMobm9kZUxpc3RbaV0uY2hpbGROb2RlcywKLSAgICAg
ICAgICAgICAgICAgbm9kZUxpbmtGbiA/IG5vZGVMaW5rRm4udHJhbnNjbHVkZSA6IHRyYW5zY2x1
ZGVGbik7Ci0KLSAgICAgICAgbGlua0Zucy5wdXNoKG5vZGVMaW5rRm4pOwotICAgICAgICBsaW5r
Rm5zLnB1c2goY2hpbGRMaW5rRm4pOwotICAgICAgICBsaW5rRm5Gb3VuZCA9IChsaW5rRm5Gb3Vu
ZCB8fCBub2RlTGlua0ZuIHx8IGNoaWxkTGlua0ZuKTsKLSAgICAgIH0KLQotICAgICAgLy8gcmV0
dXJuIGEgbGlua2luZyBmdW5jdGlvbiBpZiB3ZSBoYXZlIGZvdW5kIGFueXRoaW5nLCBudWxsIG90
aGVyd2lzZQotICAgICAgcmV0dXJuIGxpbmtGbkZvdW5kID8gY29tcG9zaXRlTGlua0ZuIDogbnVs
bDsKLQotICAgICAgZnVuY3Rpb24gY29tcG9zaXRlTGlua0ZuKHNjb3BlLCBub2RlTGlzdCwgJHJv
b3RFbGVtZW50LCBib3VuZFRyYW5zY2x1ZGVGbikgewotICAgICAgICB2YXIgbm9kZUxpbmtGbiwg
Y2hpbGRMaW5rRm4sIG5vZGUsIGNoaWxkU2NvcGUsIGNoaWxkVHJhbnNjbHVkZUZuLCBpLCBpaSwg
bjsKLQotICAgICAgICAvLyBjb3B5IG5vZGVMaXN0IHNvIHRoYXQgbGlua2luZyBkb2Vzbid0IGJy
ZWFrIGR1ZSB0byBsaXZlIGxpc3QgdXBkYXRlcy4KLSAgICAgICAgdmFyIHN0YWJsZU5vZGVMaXN0
ID0gW107Ci0gICAgICAgIGZvciAoaSA9IDAsIGlpID0gbm9kZUxpc3QubGVuZ3RoOyBpIDwgaWk7
IGkrKykgewotICAgICAgICAgIHN0YWJsZU5vZGVMaXN0LnB1c2gobm9kZUxpc3RbaV0pOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZm9yKGkgPSAwLCBuID0gMCwgaWkgPSBsaW5rRm5zLmxlbmd0aDsg
aSA8IGlpOyBuKyspIHsKLSAgICAgICAgICBub2RlID0gc3RhYmxlTm9kZUxpc3Rbbl07Ci0gICAg
ICAgICAgbm9kZUxpbmtGbiA9IGxpbmtGbnNbaSsrXTsKLSAgICAgICAgICBjaGlsZExpbmtGbiA9
IGxpbmtGbnNbaSsrXTsKLQotICAgICAgICAgIGlmIChub2RlTGlua0ZuKSB7Ci0gICAgICAgICAg
ICBpZiAobm9kZUxpbmtGbi5zY29wZSkgewotICAgICAgICAgICAgICBjaGlsZFNjb3BlID0gc2Nv
cGUuJG5ldyhpc09iamVjdChub2RlTGlua0ZuLnNjb3BlKSk7Ci0gICAgICAgICAgICAgIGpxTGl0
ZShub2RlKS5kYXRhKCckc2NvcGUnLCBjaGlsZFNjb3BlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgIGNoaWxkU2NvcGUgPSBzY29wZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGNoaWxkVHJhbnNjbHVkZUZuID0gbm9kZUxpbmtGbi50cmFuc2NsdWRlOwotICAgICAg
ICAgICAgaWYgKGNoaWxkVHJhbnNjbHVkZUZuIHx8ICghYm91bmRUcmFuc2NsdWRlRm4gJiYgdHJh
bnNjbHVkZUZuKSkgewotICAgICAgICAgICAgICBub2RlTGlua0ZuKGNoaWxkTGlua0ZuLCBjaGls
ZFNjb3BlLCBub2RlLCAkcm9vdEVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAoZnVuY3Rpb24o
dHJhbnNjbHVkZUZuKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihjbG9u
ZUZuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zY2x1ZGVTY29wZSA9IHNjb3Bl
LiRuZXcoKTsKLSAgICAgICAgICAgICAgICAgICAgICB0cmFuc2NsdWRlU2NvcGUuJCR0cmFuc2Ns
dWRlZCA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNjbHVkZUZu
KHRyYW5zY2x1ZGVTY29wZSwgY2xvbmVGbikuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJp
bmQoJyRkZXN0cm95JywgYmluZCh0cmFuc2NsdWRlU2NvcGUsIHRyYW5zY2x1ZGVTY29wZS4kZGVz
dHJveSkpOwotICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgfSkoY2hp
bGRUcmFuc2NsdWRlRm4gfHwgdHJhbnNjbHVkZUZuKQotICAgICAgICAgICAgICApOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgbm9kZUxpbmtGbihjaGlsZExpbmtGbiwgY2hp
bGRTY29wZSwgbm9kZSwgdW5kZWZpbmVkLCBib3VuZFRyYW5zY2x1ZGVGbik7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgfSBlbHNlIGlmIChjaGlsZExpbmtGbikgewotICAgICAgICAgICAgY2hp
bGRMaW5rRm4oc2NvcGUsIG5vZGUuY2hpbGROb2RlcywgdW5kZWZpbmVkLCBib3VuZFRyYW5zY2x1
ZGVGbik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0KLSAgICAv
KioKLSAgICAgKiBMb29rcyBmb3IgZGlyZWN0aXZlcyBvbiB0aGUgZ2l2ZW4gbm9kZSBhbmQgYWRk
cyB0aGVtIHRvIHRoZSBkaXJlY3RpdmUgY29sbGVjdGlvbiB3aGljaCBpcwotICAgICAqIHNvcnRl
ZC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBub2RlIE5vZGUgdG8gc2VhcmNoLgotICAgICAqIEBw
YXJhbSBkaXJlY3RpdmVzIEFuIGFycmF5IHRvIHdoaWNoIHRoZSBkaXJlY3RpdmVzIGFyZSBhZGRl
ZCB0by4gVGhpcyBhcnJheSBpcyBzb3J0ZWQgYmVmb3JlCi0gICAgICogICAgICAgIHRoZSBmdW5j
dGlvbiByZXR1cm5zLgotICAgICAqIEBwYXJhbSBhdHRycyBUaGUgc2hhcmVkIGF0dHJzIG9iamVj
dCB3aGljaCBpcyB1c2VkIHRvIHBvcHVsYXRlIHRoZSBub3JtYWxpemVkIGF0dHJpYnV0ZXMuCi0g
ICAgICogQHBhcmFtIHtudW1iZXI9fSBtYXhQcmlvcml0eSBNYXggZGlyZWN0aXZlIHByaW9yaXR5
LgotICAgICAqLwotICAgIGZ1bmN0aW9uIGNvbGxlY3REaXJlY3RpdmVzKG5vZGUsIGRpcmVjdGl2
ZXMsIGF0dHJzLCBtYXhQcmlvcml0eSkgewotICAgICAgdmFyIG5vZGVUeXBlID0gbm9kZS5ub2Rl
VHlwZSwKLSAgICAgICAgICBhdHRyc01hcCA9IGF0dHJzLiRhdHRyLAotICAgICAgICAgIG1hdGNo
LAotICAgICAgICAgIGNsYXNzTmFtZTsKLQotICAgICAgc3dpdGNoKG5vZGVUeXBlKSB7Ci0gICAg
ICAgIGNhc2UgMTogLyogRWxlbWVudCAqLwotICAgICAgICAgIC8vIHVzZSB0aGUgbm9kZSBuYW1l
OiA8ZGlyZWN0aXZlPgotICAgICAgICAgIGFkZERpcmVjdGl2ZShkaXJlY3RpdmVzLAotICAgICAg
ICAgICAgICBkaXJlY3RpdmVOb3JtYWxpemUobm9kZU5hbWVfKG5vZGUpLnRvTG93ZXJDYXNlKCkp
LCAnRScsIG1heFByaW9yaXR5KTsKLQotICAgICAgICAgIC8vIGl0ZXJhdGUgb3ZlciB0aGUgYXR0
cmlidXRlcwotICAgICAgICAgIGZvciAodmFyIGF0dHIsIG5hbWUsIG5OYW1lLCB2YWx1ZSwgbkF0
dHJzID0gbm9kZS5hdHRyaWJ1dGVzLAotICAgICAgICAgICAgICAgICAgIGogPSAwLCBqaiA9IG5B
dHRycyAmJiBuQXR0cnMubGVuZ3RoOyBqIDwgamo7IGorKykgewotICAgICAgICAgICAgYXR0ciA9
IG5BdHRyc1tqXTsKLSAgICAgICAgICAgIGlmIChhdHRyLnNwZWNpZmllZCkgewotICAgICAgICAg
ICAgICBuYW1lID0gYXR0ci5uYW1lOwotICAgICAgICAgICAgICBuTmFtZSA9IGRpcmVjdGl2ZU5v
cm1hbGl6ZShuYW1lLnRvTG93ZXJDYXNlKCkpOwotICAgICAgICAgICAgICBhdHRyc01hcFtuTmFt
ZV0gPSBuYW1lOwotICAgICAgICAgICAgICBhdHRyc1tuTmFtZV0gPSB2YWx1ZSA9IHRyaW0oKG1z
aWUgJiYgbmFtZSA9PSAnaHJlZicpCi0gICAgICAgICAgICAgICAgPyBkZWNvZGVVUklDb21wb25l
bnQobm9kZS5nZXRBdHRyaWJ1dGUobmFtZSwgMikpCi0gICAgICAgICAgICAgICAgOiBhdHRyLnZh
bHVlKTsKLSAgICAgICAgICAgICAgaWYgKGdldEJvb2xlYW5BdHRyTmFtZShub2RlLCBuTmFtZSkp
IHsKLSAgICAgICAgICAgICAgICBhdHRyc1tuTmFtZV0gPSB0cnVlOyAvLyBwcmVzZW5jZSBtZWFu
cyB0cnVlCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgYWRkQXR0ckludGVycG9sYXRl
RGlyZWN0aXZlKG5vZGUsIGRpcmVjdGl2ZXMsIHZhbHVlLCBuTmFtZSk7Ci0gICAgICAgICAgICAg
IGFkZERpcmVjdGl2ZShkaXJlY3RpdmVzLCBuTmFtZSwgJ0EnLCBtYXhQcmlvcml0eSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLy8gdXNlIGNsYXNzIGFzIGRpcmVj
dGl2ZQotICAgICAgICAgIGNsYXNzTmFtZSA9IG5vZGUuY2xhc3NOYW1lOwotICAgICAgICAgIGlm
IChpc1N0cmluZyhjbGFzc05hbWUpICYmIGNsYXNzTmFtZSAhPT0gJycpIHsKLSAgICAgICAgICAg
IHdoaWxlIChtYXRjaCA9IENMQVNTX0RJUkVDVElWRV9SRUdFWFAuZXhlYyhjbGFzc05hbWUpKSB7
Ci0gICAgICAgICAgICAgIG5OYW1lID0gZGlyZWN0aXZlTm9ybWFsaXplKG1hdGNoWzJdKTsKLSAg
ICAgICAgICAgICAgaWYgKGFkZERpcmVjdGl2ZShkaXJlY3RpdmVzLCBuTmFtZSwgJ0MnLCBtYXhQ
cmlvcml0eSkpIHsKLSAgICAgICAgICAgICAgICBhdHRyc1tuTmFtZV0gPSB0cmltKG1hdGNoWzNd
KTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUu
c3Vic3RyKG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMzogLyogVGV4dCBOb2Rl
ICovCi0gICAgICAgICAgYWRkVGV4dEludGVycG9sYXRlRGlyZWN0aXZlKGRpcmVjdGl2ZXMsIG5v
ZGUubm9kZVZhbHVlKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA4OiAvKiBDb21t
ZW50ICovCi0gICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG1hdGNoID0gQ09NTUVOVF9ESVJF
Q1RJVkVfUkVHRVhQLmV4ZWMobm9kZS5ub2RlVmFsdWUpOwotICAgICAgICAgICAgaWYgKG1hdGNo
KSB7Ci0gICAgICAgICAgICAgIG5OYW1lID0gZGlyZWN0aXZlTm9ybWFsaXplKG1hdGNoWzFdKTsK
LSAgICAgICAgICAgICAgaWYgKGFkZERpcmVjdGl2ZShkaXJlY3RpdmVzLCBuTmFtZSwgJ00nLCBt
YXhQcmlvcml0eSkpIHsKLSAgICAgICAgICAgICAgICBhdHRyc1tuTmFtZV0gPSB0cmltKG1hdGNo
WzJdKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0gY2F0Y2gg
KGUpIHsKLSAgICAgICAgICAgIC8vIHR1cm5zIG91dCB0aGF0IHVuZGVyIHNvbWUgY2lyY3Vtc3Rh
bmNlcyBJRTkgdGhyb3dzIGVycm9ycyB3aGVuIG9uZSBhdHRlbXB0cyB0byByZWFkIGNvbW1lbnQn
cyBub2RlIHZhbHVlLgotICAgICAgICAgICAgLy8gSnVzdCBpZ25vcmUgaXQgYW5kIGNvbnRpbnVl
LiAoQ2FuJ3Qgc2VlbSB0byByZXByb2R1Y2UgaW4gdGVzdCBjYXNlLikKLSAgICAgICAgICB9Ci0g
ICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGRpcmVjdGl2ZXMuc29ydChieVByaW9y
aXR5KTsKLSAgICAgIHJldHVybiBkaXJlY3RpdmVzOwotICAgIH0KLQotCi0gICAgLyoqCi0gICAg
ICogT25jZSB0aGUgZGlyZWN0aXZlcyBoYXZlIGJlZW4gY29sbGVjdGVkLCB0aGVpciBjb21waWxl
IGZ1bmN0aW9ucyBhcmUgZXhlY3V0ZWQuIFRoaXMgbWV0aG9kCi0gICAgICogaXMgcmVzcG9uc2li
bGUgZm9yIGlubGluaW5nIGRpcmVjdGl2ZSB0ZW1wbGF0ZXMgYXMgd2VsbCBhcyB0ZXJtaW5hdGlu
ZyB0aGUgYXBwbGljYXRpb24KLSAgICAgKiBvZiB0aGUgZGlyZWN0aXZlcyBpZiB0aGUgdGVybWlu
YWwgZGlyZWN0aXZlIGhhcyBiZWVuIHJlYWNoZWQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0ge0Fy
cmF5fSBkaXJlY3RpdmVzIEFycmF5IG9mIGNvbGxlY3RlZCBkaXJlY3RpdmVzIHRvIGV4ZWN1dGUg
dGhlaXIgY29tcGlsZSBmdW5jdGlvbi4KLSAgICAgKiAgICAgICAgdGhpcyBuZWVkcyB0byBiZSBw
cmUtc29ydGVkIGJ5IHByaW9yaXR5IG9yZGVyLgotICAgICAqIEBwYXJhbSB7Tm9kZX0gY29tcGls
ZU5vZGUgVGhlIHJhdyBET00gbm9kZSB0byBhcHBseSB0aGUgY29tcGlsZSBmdW5jdGlvbnMgdG8K
LSAgICAgKiBAcGFyYW0ge09iamVjdH0gdGVtcGxhdGVBdHRycyBUaGUgc2hhcmVkIGF0dHJpYnV0
ZSBmdW5jdGlvbgotICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oYW5ndWxhci5TY29wZVssIGNsb25l
QXR0YWNoRm5dfSB0cmFuc2NsdWRlRm4gQSBsaW5raW5nIGZ1bmN0aW9uLCB3aGVyZSB0aGUKLSAg
ICAgKiAgICAgICAgc2NvcGUgYXJndW1lbnQgaXMgYXV0by1nZW5lcmF0ZWQgdG8gdGhlIG5ldyBj
aGlsZCBvZiB0aGUgdHJhbnNjbHVkZWQgcGFyZW50IHNjb3BlLgotICAgICAqIEBwYXJhbSB7SlFM
aXRlfSBqcUNvbGxlY3Rpb24gSWYgd2UgYXJlIHdvcmtpbmcgb24gdGhlIHJvb3Qgb2YgdGhlIGNv
bXBpbGUgdHJlZSB0aGVuIHRoaXMKLSAgICAgKiAgICAgICAgYXJndW1lbnQgaGFzIHRoZSByb290
IGpxTGl0ZSBhcnJheSBzbyB0aGF0IHdlIGNhbiByZXBsYWNlIG5vZGVzIG9uIGl0LgotICAgICAq
IEByZXR1cm5zIGxpbmtGbgotICAgICAqLwotICAgIGZ1bmN0aW9uIGFwcGx5RGlyZWN0aXZlc1Rv
Tm9kZShkaXJlY3RpdmVzLCBjb21waWxlTm9kZSwgdGVtcGxhdGVBdHRycywgdHJhbnNjbHVkZUZu
LCBqcUNvbGxlY3Rpb24pIHsKLSAgICAgIHZhciB0ZXJtaW5hbFByaW9yaXR5ID0gLU51bWJlci5N
QVhfVkFMVUUsCi0gICAgICAgICAgcHJlTGlua0ZucyA9IFtdLAotICAgICAgICAgIHBvc3RMaW5r
Rm5zID0gW10sCi0gICAgICAgICAgbmV3U2NvcGVEaXJlY3RpdmUgPSBudWxsLAotICAgICAgICAg
IG5ld0lzb2xhdGVTY29wZURpcmVjdGl2ZSA9IG51bGwsCi0gICAgICAgICAgdGVtcGxhdGVEaXJl
Y3RpdmUgPSBudWxsLAotICAgICAgICAgICRjb21waWxlTm9kZSA9IHRlbXBsYXRlQXR0cnMuJCRl
bGVtZW50ID0ganFMaXRlKGNvbXBpbGVOb2RlKSwKLSAgICAgICAgICBkaXJlY3RpdmUsCi0gICAg
ICAgICAgZGlyZWN0aXZlTmFtZSwKLSAgICAgICAgICAkdGVtcGxhdGUsCi0gICAgICAgICAgdHJh
bnNjbHVkZURpcmVjdGl2ZSwKLSAgICAgICAgICBjaGlsZFRyYW5zY2x1ZGVGbiA9IHRyYW5zY2x1
ZGVGbiwKLSAgICAgICAgICBjb250cm9sbGVyRGlyZWN0aXZlcywKLSAgICAgICAgICBsaW5rRm4s
Ci0gICAgICAgICAgZGlyZWN0aXZlVmFsdWU7Ci0KLSAgICAgIC8vIGV4ZWN1dGVzIGFsbCBkaXJl
Y3RpdmVzIG9uIHRoZSBjdXJyZW50IGVsZW1lbnQKLSAgICAgIGZvcih2YXIgaSA9IDAsIGlpID0g
ZGlyZWN0aXZlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7Ci0gICAgICAgIGRpcmVjdGl2ZSA9IGRp
cmVjdGl2ZXNbaV07Ci0gICAgICAgICR0ZW1wbGF0ZSA9IHVuZGVmaW5lZDsKLQotICAgICAgICBp
ZiAodGVybWluYWxQcmlvcml0eSA+IGRpcmVjdGl2ZS5wcmlvcml0eSkgewotICAgICAgICAgIGJy
ZWFrOyAvLyBwcmV2ZW50IGZ1cnRoZXIgcHJvY2Vzc2luZyBvZiBkaXJlY3RpdmVzCi0gICAgICAg
IH0KLQotICAgICAgICBpZiAoZGlyZWN0aXZlVmFsdWUgPSBkaXJlY3RpdmUuc2NvcGUpIHsKLSAg
ICAgICAgICBhc3NlcnROb0R1cGxpY2F0ZSgnaXNvbGF0ZWQgc2NvcGUnLCBuZXdJc29sYXRlU2Nv
cGVEaXJlY3RpdmUsIGRpcmVjdGl2ZSwgJGNvbXBpbGVOb2RlKTsKLSAgICAgICAgICBpZiAoaXNP
YmplY3QoZGlyZWN0aXZlVmFsdWUpKSB7Ci0gICAgICAgICAgICBzYWZlQWRkQ2xhc3MoJGNvbXBp
bGVOb2RlLCAnbmctaXNvbGF0ZS1zY29wZScpOwotICAgICAgICAgICAgbmV3SXNvbGF0ZVNjb3Bl
RGlyZWN0aXZlID0gZGlyZWN0aXZlOwotICAgICAgICAgIH0KLSAgICAgICAgICBzYWZlQWRkQ2xh
c3MoJGNvbXBpbGVOb2RlLCAnbmctc2NvcGUnKTsKLSAgICAgICAgICBuZXdTY29wZURpcmVjdGl2
ZSA9IG5ld1Njb3BlRGlyZWN0aXZlIHx8IGRpcmVjdGl2ZTsKLSAgICAgICAgfQotCi0gICAgICAg
IGRpcmVjdGl2ZU5hbWUgPSBkaXJlY3RpdmUubmFtZTsKLQotICAgICAgICBpZiAoZGlyZWN0aXZl
VmFsdWUgPSBkaXJlY3RpdmUuY29udHJvbGxlcikgewotICAgICAgICAgIGNvbnRyb2xsZXJEaXJl
Y3RpdmVzID0gY29udHJvbGxlckRpcmVjdGl2ZXMgfHwge307Ci0gICAgICAgICAgYXNzZXJ0Tm9E
dXBsaWNhdGUoIiciICsgZGlyZWN0aXZlTmFtZSArICInIGNvbnRyb2xsZXIiLAotICAgICAgICAg
ICAgICBjb250cm9sbGVyRGlyZWN0aXZlc1tkaXJlY3RpdmVOYW1lXSwgZGlyZWN0aXZlLCAkY29t
cGlsZU5vZGUpOwotICAgICAgICAgIGNvbnRyb2xsZXJEaXJlY3RpdmVzW2RpcmVjdGl2ZU5hbWVd
ID0gZGlyZWN0aXZlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRpcmVjdGl2ZVZhbHVlID0g
ZGlyZWN0aXZlLnRyYW5zY2x1ZGUpIHsKLSAgICAgICAgICBhc3NlcnROb0R1cGxpY2F0ZSgndHJh
bnNjbHVzaW9uJywgdHJhbnNjbHVkZURpcmVjdGl2ZSwgZGlyZWN0aXZlLCAkY29tcGlsZU5vZGUp
OwotICAgICAgICAgIHRyYW5zY2x1ZGVEaXJlY3RpdmUgPSBkaXJlY3RpdmU7Ci0gICAgICAgICAg
dGVybWluYWxQcmlvcml0eSA9IGRpcmVjdGl2ZS5wcmlvcml0eTsKLSAgICAgICAgICBpZiAoZGly
ZWN0aXZlVmFsdWUgPT0gJ2VsZW1lbnQnKSB7Ci0gICAgICAgICAgICAkdGVtcGxhdGUgPSBqcUxp
dGUoY29tcGlsZU5vZGUpOwotICAgICAgICAgICAgJGNvbXBpbGVOb2RlID0gdGVtcGxhdGVBdHRy
cy4kJGVsZW1lbnQgPQotICAgICAgICAgICAgICAgIGpxTGl0ZShkb2N1bWVudC5jcmVhdGVDb21t
ZW50KCcgJyArIGRpcmVjdGl2ZU5hbWUgKyAnOiAnICsgdGVtcGxhdGVBdHRyc1tkaXJlY3RpdmVO
YW1lXSArICcgJykpOwotICAgICAgICAgICAgY29tcGlsZU5vZGUgPSAkY29tcGlsZU5vZGVbMF07
Ci0gICAgICAgICAgICByZXBsYWNlV2l0aChqcUNvbGxlY3Rpb24sIGpxTGl0ZSgkdGVtcGxhdGVb
MF0pLCBjb21waWxlTm9kZSk7Ci0gICAgICAgICAgICBjaGlsZFRyYW5zY2x1ZGVGbiA9IGNvbXBp
bGUoJHRlbXBsYXRlLCB0cmFuc2NsdWRlRm4sIHRlcm1pbmFsUHJpb3JpdHkpOwotICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAkdGVtcGxhdGUgPSBqcUxpdGUoSlFMaXRlQ2xvbmUoY29t
cGlsZU5vZGUpKS5jb250ZW50cygpOwotICAgICAgICAgICAgJGNvbXBpbGVOb2RlLmh0bWwoJycp
OyAvLyBjbGVhciBjb250ZW50cwotICAgICAgICAgICAgY2hpbGRUcmFuc2NsdWRlRm4gPSBjb21w
aWxlKCR0ZW1wbGF0ZSwgdHJhbnNjbHVkZUZuKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoKGRpcmVjdGl2ZVZhbHVlID0gZGlyZWN0aXZlLnRlbXBsYXRlKSkgewotICAg
ICAgICAgIGFzc2VydE5vRHVwbGljYXRlKCd0ZW1wbGF0ZScsIHRlbXBsYXRlRGlyZWN0aXZlLCBk
aXJlY3RpdmUsICRjb21waWxlTm9kZSk7Ci0gICAgICAgICAgdGVtcGxhdGVEaXJlY3RpdmUgPSBk
aXJlY3RpdmU7Ci0gICAgICAgICAgZGlyZWN0aXZlVmFsdWUgPSBkZW5vcm1hbGl6ZVRlbXBsYXRl
KGRpcmVjdGl2ZVZhbHVlKTsKLQotICAgICAgICAgIGlmIChkaXJlY3RpdmUucmVwbGFjZSkgewot
ICAgICAgICAgICAgJHRlbXBsYXRlID0ganFMaXRlKCc8ZGl2PicgKwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHJpbShkaXJlY3RpdmVWYWx1ZSkgKwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICc8L2Rpdj4nKS5jb250ZW50cygpOwotICAgICAgICAgICAgY29tcGls
ZU5vZGUgPSAkdGVtcGxhdGVbMF07Ci0KLSAgICAgICAgICAgIGlmICgkdGVtcGxhdGUubGVuZ3Ro
ICE9IDEgfHwgY29tcGlsZU5vZGUubm9kZVR5cGUgIT09IDEpIHsKLSAgICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKE1VTFRJX1JPT1RfVEVNUExBVEVfRVJST1IgKyBkaXJlY3RpdmVWYWx1ZSk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJlcGxhY2VXaXRoKGpxQ29sbGVjdGlvbiwg
JGNvbXBpbGVOb2RlLCBjb21waWxlTm9kZSk7Ci0KLSAgICAgICAgICAgIHZhciBuZXdUZW1wbGF0
ZUF0dHJzID0geyRhdHRyOiB7fX07Ci0KLSAgICAgICAgICAgIC8vIGNvbWJpbmUgZGlyZWN0aXZl
cyBmcm9tIHRoZSBvcmlnaW5hbCBub2RlIGFuZCBmcm9tIHRoZSB0ZW1wbGF0ZToKLSAgICAgICAg
ICAgIC8vIC0gdGFrZSB0aGUgYXJyYXkgb2YgZGlyZWN0aXZlcyBmb3IgdGhpcyBlbGVtZW50Ci0g
ICAgICAgICAgICAvLyAtIHNwbGl0IGl0IGludG8gdHdvIHBhcnRzLCB0aG9zZSB0aGF0IHdlcmUg
YWxyZWFkeSBhcHBsaWVkIGFuZCB0aG9zZSB0aGF0IHdlcmVuJ3QKLSAgICAgICAgICAgIC8vIC0g
Y29sbGVjdCBkaXJlY3RpdmVzIGZyb20gdGhlIHRlbXBsYXRlLCBhZGQgdGhlbSB0byB0aGUgc2Vj
b25kIGdyb3VwIGFuZCBzb3J0IHRoZW0KLSAgICAgICAgICAgIC8vIC0gYXBwZW5kIHRoZSBzZWNv
bmQgZ3JvdXAgd2l0aCBuZXcgZGlyZWN0aXZlcyB0byB0aGUgZmlyc3QgZ3JvdXAKLSAgICAgICAg
ICAgIGRpcmVjdGl2ZXMgPSBkaXJlY3RpdmVzLmNvbmNhdCgKLSAgICAgICAgICAgICAgICBjb2xs
ZWN0RGlyZWN0aXZlcygKLSAgICAgICAgICAgICAgICAgICAgY29tcGlsZU5vZGUsCi0gICAgICAg
ICAgICAgICAgICAgIGRpcmVjdGl2ZXMuc3BsaWNlKGkgKyAxLCBkaXJlY3RpdmVzLmxlbmd0aCAt
IChpICsgMSkpLAotICAgICAgICAgICAgICAgICAgICBuZXdUZW1wbGF0ZUF0dHJzCi0gICAgICAg
ICAgICAgICAgKQotICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIG1lcmdlVGVtcGxhdGVBdHRy
aWJ1dGVzKHRlbXBsYXRlQXR0cnMsIG5ld1RlbXBsYXRlQXR0cnMpOwotCi0gICAgICAgICAgICBp
aSA9IGRpcmVjdGl2ZXMubGVuZ3RoOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAk
Y29tcGlsZU5vZGUuaHRtbChkaXJlY3RpdmVWYWx1ZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKGRpcmVjdGl2ZS50ZW1wbGF0ZVVybCkgewotICAgICAgICAgIGFzc2Vy
dE5vRHVwbGljYXRlKCd0ZW1wbGF0ZScsIHRlbXBsYXRlRGlyZWN0aXZlLCBkaXJlY3RpdmUsICRj
b21waWxlTm9kZSk7Ci0gICAgICAgICAgdGVtcGxhdGVEaXJlY3RpdmUgPSBkaXJlY3RpdmU7Ci0g
ICAgICAgICAgbm9kZUxpbmtGbiA9IGNvbXBpbGVUZW1wbGF0ZVVybChkaXJlY3RpdmVzLnNwbGlj
ZShpLCBkaXJlY3RpdmVzLmxlbmd0aCAtIGkpLAotICAgICAgICAgICAgICBub2RlTGlua0ZuLCAk
Y29tcGlsZU5vZGUsIHRlbXBsYXRlQXR0cnMsIGpxQ29sbGVjdGlvbiwgZGlyZWN0aXZlLnJlcGxh
Y2UsCi0gICAgICAgICAgICAgIGNoaWxkVHJhbnNjbHVkZUZuKTsKLSAgICAgICAgICBpaSA9IGRp
cmVjdGl2ZXMubGVuZ3RoOwotICAgICAgICB9IGVsc2UgaWYgKGRpcmVjdGl2ZS5jb21waWxlKSB7
Ci0gICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGxpbmtGbiA9IGRpcmVjdGl2ZS5jb21waWxl
KCRjb21waWxlTm9kZSwgdGVtcGxhdGVBdHRycywgY2hpbGRUcmFuc2NsdWRlRm4pOwotICAgICAg
ICAgICAgaWYgKGlzRnVuY3Rpb24obGlua0ZuKSkgewotICAgICAgICAgICAgICBhZGRMaW5rRm5z
KG51bGwsIGxpbmtGbik7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxpbmtGbikgewotICAgICAg
ICAgICAgICBhZGRMaW5rRm5zKGxpbmtGbi5wcmUsIGxpbmtGbi5wb3N0KTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAkZXhjZXB0aW9uSGFuZGxl
cihlLCBzdGFydGluZ1RhZygkY29tcGlsZU5vZGUpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoZGlyZWN0aXZlLnRlcm1pbmFsKSB7Ci0gICAgICAgICAgbm9kZUxpbmtG
bi50ZXJtaW5hbCA9IHRydWU7Ci0gICAgICAgICAgdGVybWluYWxQcmlvcml0eSA9IE1hdGgubWF4
KHRlcm1pbmFsUHJpb3JpdHksIGRpcmVjdGl2ZS5wcmlvcml0eSk7Ci0gICAgICAgIH0KLQotICAg
ICAgfQotCi0gICAgICBub2RlTGlua0ZuLnNjb3BlID0gbmV3U2NvcGVEaXJlY3RpdmUgJiYgbmV3
U2NvcGVEaXJlY3RpdmUuc2NvcGU7Ci0gICAgICBub2RlTGlua0ZuLnRyYW5zY2x1ZGUgPSB0cmFu
c2NsdWRlRGlyZWN0aXZlICYmIGNoaWxkVHJhbnNjbHVkZUZuOwotCi0gICAgICAvLyBtaWdodCBi
ZSBub3JtYWwgb3IgZGVsYXllZCBub2RlTGlua0ZuIGRlcGVuZGluZyBvbiBpZiB0ZW1wbGF0ZVVy
bCBpcyBwcmVzZW50Ci0gICAgICByZXR1cm4gbm9kZUxpbmtGbjsKLQotICAgICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KLQotICAgICAgZnVuY3Rpb24gYWRkTGlua0ZucyhwcmUsIHBvc3QpIHsKLSAg
ICAgICAgaWYgKHByZSkgewotICAgICAgICAgIHByZS5yZXF1aXJlID0gZGlyZWN0aXZlLnJlcXVp
cmU7Ci0gICAgICAgICAgcHJlTGlua0Zucy5wdXNoKHByZSk7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKHBvc3QpIHsKLSAgICAgICAgICBwb3N0LnJlcXVpcmUgPSBkaXJlY3RpdmUucmVxdWlyZTsK
LSAgICAgICAgICBwb3N0TGlua0Zucy5wdXNoKHBvc3QpOwotICAgICAgICB9Ci0gICAgICB9Ci0K
LQotICAgICAgZnVuY3Rpb24gZ2V0Q29udHJvbGxlcnMocmVxdWlyZSwgJGVsZW1lbnQpIHsKLSAg
ICAgICAgdmFyIHZhbHVlLCByZXRyaWV2YWxNZXRob2QgPSAnZGF0YScsIG9wdGlvbmFsID0gZmFs
c2U7Ci0gICAgICAgIGlmIChpc1N0cmluZyhyZXF1aXJlKSkgewotICAgICAgICAgIHdoaWxlKCh2
YWx1ZSA9IHJlcXVpcmUuY2hhckF0KDApKSA9PSAnXicgfHwgdmFsdWUgPT0gJz8nKSB7Ci0gICAg
ICAgICAgICByZXF1aXJlID0gcmVxdWlyZS5zdWJzdHIoMSk7Ci0gICAgICAgICAgICBpZiAodmFs
dWUgPT0gJ14nKSB7Ci0gICAgICAgICAgICAgIHJldHJpZXZhbE1ldGhvZCA9ICdpbmhlcml0ZWRE
YXRhJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG9wdGlvbmFsID0gb3B0aW9uYWwgfHwg
dmFsdWUgPT0gJz8nOwotICAgICAgICAgIH0KLSAgICAgICAgICB2YWx1ZSA9ICRlbGVtZW50W3Jl
dHJpZXZhbE1ldGhvZF0oJyQnICsgcmVxdWlyZSArICdDb250cm9sbGVyJyk7Ci0gICAgICAgICAg
aWYgKCF2YWx1ZSAmJiAhb3B0aW9uYWwpIHsKLSAgICAgICAgICAgIHRocm93IEVycm9yKCJObyBj
b250cm9sbGVyOiAiICsgcmVxdWlyZSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybiB2
YWx1ZTsKLSAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KHJlcXVpcmUpKSB7Ci0gICAgICAgICAg
dmFsdWUgPSBbXTsKLSAgICAgICAgICBmb3JFYWNoKHJlcXVpcmUsIGZ1bmN0aW9uKHJlcXVpcmUp
IHsKLSAgICAgICAgICAgIHZhbHVlLnB1c2goZ2V0Q29udHJvbGxlcnMocmVxdWlyZSwgJGVsZW1l
bnQpKTsKLSAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0g
ICAgICB9Ci0KLQotICAgICAgZnVuY3Rpb24gbm9kZUxpbmtGbihjaGlsZExpbmtGbiwgc2NvcGUs
IGxpbmtOb2RlLCAkcm9vdEVsZW1lbnQsIGJvdW5kVHJhbnNjbHVkZUZuKSB7Ci0gICAgICAgIHZh
ciBhdHRycywgJGVsZW1lbnQsIGksIGlpLCBsaW5rRm4sIGNvbnRyb2xsZXI7Ci0KLSAgICAgICAg
aWYgKGNvbXBpbGVOb2RlID09PSBsaW5rTm9kZSkgewotICAgICAgICAgIGF0dHJzID0gdGVtcGxh
dGVBdHRyczsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBhdHRycyA9IHNoYWxsb3dDb3B5
KHRlbXBsYXRlQXR0cnMsIG5ldyBBdHRyaWJ1dGVzKGpxTGl0ZShsaW5rTm9kZSksIHRlbXBsYXRl
QXR0cnMuJGF0dHIpKTsKLSAgICAgICAgfQotICAgICAgICAkZWxlbWVudCA9IGF0dHJzLiQkZWxl
bWVudDsKLQotICAgICAgICBpZiAobmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlKSB7Ci0gICAgICAg
ICAgdmFyIExPQ0FMX1JFR0VYUCA9IC9eXHMqKFtAPSZdKVxzKihcdyopXHMqJC87Ci0KLSAgICAg
ICAgICB2YXIgcGFyZW50U2NvcGUgPSBzY29wZS4kcGFyZW50IHx8IHNjb3BlOwotCi0gICAgICAg
ICAgZm9yRWFjaChuZXdJc29sYXRlU2NvcGVEaXJlY3RpdmUuc2NvcGUsIGZ1bmN0aW9uKGRlZmlu
aXRvbiwgc2NvcGVOYW1lKSB7Ci0gICAgICAgICAgICB2YXIgbWF0Y2ggPSBkZWZpbml0b24ubWF0
Y2goTE9DQUxfUkVHRVhQKSB8fCBbXSwKLSAgICAgICAgICAgICAgICBhdHRyTmFtZSA9IG1hdGNo
WzJdfHwgc2NvcGVOYW1lLAotICAgICAgICAgICAgICAgIG1vZGUgPSBtYXRjaFsxXSwgLy8gQCwg
PSwgb3IgJgotICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSwKLSAgICAgICAgICAgICAgICBwYXJl
bnRHZXQsIHBhcmVudFNldDsKLQotICAgICAgICAgICAgc2NvcGUuJCRpc29sYXRlQmluZGluZ3Nb
c2NvcGVOYW1lXSA9IG1vZGUgKyBhdHRyTmFtZTsKLQotICAgICAgICAgICAgc3dpdGNoIChtb2Rl
KSB7Ci0KLSAgICAgICAgICAgICAgY2FzZSAnQCc6IHsKLSAgICAgICAgICAgICAgICBhdHRycy4k
b2JzZXJ2ZShhdHRyTmFtZSwgZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgIHNj
b3BlW3Njb3BlTmFtZV0gPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
ICAgICBhdHRycy4kJG9ic2VydmVyc1thdHRyTmFtZV0uJCRzY29wZSA9IHBhcmVudFNjb3BlOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
Y2FzZSAnPSc6IHsKLSAgICAgICAgICAgICAgICBwYXJlbnRHZXQgPSAkcGFyc2UoYXR0cnNbYXR0
ck5hbWVdKTsKLSAgICAgICAgICAgICAgICBwYXJlbnRTZXQgPSBwYXJlbnRHZXQuYXNzaWduIHx8
IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgLy8gcmVzZXQgdGhlIGNoYW5nZSwgb3Ig
d2Ugd2lsbCB0aHJvdyB0aGlzIGV4Y2VwdGlvbiBvbiBldmVyeSAkZGlnZXN0Ci0gICAgICAgICAg
ICAgICAgICBsYXN0VmFsdWUgPSBzY29wZVtzY29wZU5hbWVdID0gcGFyZW50R2V0KHBhcmVudFNj
b3BlKTsKLSAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKE5PTl9BU1NJR05BQkxFX01PREVM
X0VYUFJFU1NJT04gKyBhdHRyc1thdHRyTmFtZV0gKwotICAgICAgICAgICAgICAgICAgICAgICcg
KGRpcmVjdGl2ZTogJyArIG5ld0lzb2xhdGVTY29wZURpcmVjdGl2ZS5uYW1lICsgJyknKTsKLSAg
ICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSA9IHNjb3BlW3Njb3Bl
TmFtZV0gPSBwYXJlbnRHZXQocGFyZW50U2NvcGUpOwotICAgICAgICAgICAgICAgIHNjb3BlLiR3
YXRjaChmdW5jdGlvbiBwYXJlbnRWYWx1ZVdhdGNoKCkgewotICAgICAgICAgICAgICAgICAgdmFy
IHBhcmVudFZhbHVlID0gcGFyZW50R2V0KHBhcmVudFNjb3BlKTsKLQotICAgICAgICAgICAgICAg
ICAgaWYgKHBhcmVudFZhbHVlICE9PSBzY29wZVtzY29wZU5hbWVdKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIHdlIGFyZSBvdXQgb2Ygc3luYyBhbmQgbmVlZCB0byBjb3B5Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChwYXJlbnRWYWx1ZSAhPT0gbGFzdFZhbHVlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgLy8gcGFyZW50IGNoYW5nZWQgYW5kIGl0IGhhcyBwcmVjZWRlbmNlCi0gICAgICAg
ICAgICAgICAgICAgICAgbGFzdFZhbHVlID0gc2NvcGVbc2NvcGVOYW1lXSA9IHBhcmVudFZhbHVl
OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgIC8v
IGlmIHRoZSBwYXJlbnQgY2FuIGJlIGFzc2lnbmVkIHRoZW4gZG8gc28KLSAgICAgICAgICAgICAg
ICAgICAgICBwYXJlbnRTZXQocGFyZW50U2NvcGUsIHBhcmVudFZhbHVlID0gbGFzdFZhbHVlID0g
c2NvcGVbc2NvcGVOYW1lXSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnRWYWx1ZTsKLSAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgIGNhc2UgJyYnOiB7Ci0gICAgICAgICAgICAgICAgcGFyZW50R2V0ID0gJHBhcnNl
KGF0dHJzW2F0dHJOYW1lXSk7Ci0gICAgICAgICAgICAgICAgc2NvcGVbc2NvcGVOYW1lXSA9IGZ1
bmN0aW9uKGxvY2FscykgewotICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudEdldChwYXJl
bnRTY29wZSwgbG9jYWxzKTsKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgZGVmYXVsdDogewotICAgICAg
ICAgICAgICAgIHRocm93IEVycm9yKCdJbnZhbGlkIGlzb2xhdGUgc2NvcGUgZGVmaW5pdGlvbiBm
b3IgZGlyZWN0aXZlICcgKwotICAgICAgICAgICAgICAgICAgICBuZXdJc29sYXRlU2NvcGVEaXJl
Y3RpdmUubmFtZSArICc6ICcgKyBkZWZpbml0b24pOwotICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY29udHJvbGxl
ckRpcmVjdGl2ZXMpIHsKLSAgICAgICAgICBmb3JFYWNoKGNvbnRyb2xsZXJEaXJlY3RpdmVzLCBm
dW5jdGlvbihkaXJlY3RpdmUpIHsKLSAgICAgICAgICAgIHZhciBsb2NhbHMgPSB7Ci0gICAgICAg
ICAgICAgICRzY29wZTogc2NvcGUsCi0gICAgICAgICAgICAgICRlbGVtZW50OiAkZWxlbWVudCwK
LSAgICAgICAgICAgICAgJGF0dHJzOiBhdHRycywKLSAgICAgICAgICAgICAgJHRyYW5zY2x1ZGU6
IGJvdW5kVHJhbnNjbHVkZUZuCi0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBjb250cm9s
bGVyID0gZGlyZWN0aXZlLmNvbnRyb2xsZXI7Ci0gICAgICAgICAgICBpZiAoY29udHJvbGxlciA9
PSAnQCcpIHsKLSAgICAgICAgICAgICAgY29udHJvbGxlciA9IGF0dHJzW2RpcmVjdGl2ZS5uYW1l
XTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgJGVsZW1lbnQuZGF0YSgKLSAgICAgICAg
ICAgICAgICAnJCcgKyBkaXJlY3RpdmUubmFtZSArICdDb250cm9sbGVyJywKLSAgICAgICAgICAg
ICAgICAkY29udHJvbGxlcihjb250cm9sbGVyLCBsb2NhbHMpKTsKLSAgICAgICAgICB9KTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIFBSRUxJTktJTkcKLSAgICAgICAgZm9yKGkgPSAwLCBpaSA9
IHByZUxpbmtGbnMubGVuZ3RoOyBpIDwgaWk7IGkrKykgewotICAgICAgICAgIHRyeSB7Ci0gICAg
ICAgICAgICBsaW5rRm4gPSBwcmVMaW5rRm5zW2ldOwotICAgICAgICAgICAgbGlua0ZuKHNjb3Bl
LCAkZWxlbWVudCwgYXR0cnMsCi0gICAgICAgICAgICAgICAgbGlua0ZuLnJlcXVpcmUgJiYgZ2V0
Q29udHJvbGxlcnMobGlua0ZuLnJlcXVpcmUsICRlbGVtZW50KSk7Ci0gICAgICAgICAgfSBjYXRj
aCAoZSkgewotICAgICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoZSwgc3RhcnRpbmdUYWcoJGVs
ZW1lbnQpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSRUNVUlNJT04K
LSAgICAgICAgY2hpbGRMaW5rRm4gJiYgY2hpbGRMaW5rRm4oc2NvcGUsIGxpbmtOb2RlLmNoaWxk
Tm9kZXMsIHVuZGVmaW5lZCwgYm91bmRUcmFuc2NsdWRlRm4pOwotCi0gICAgICAgIC8vIFBPU1RM
SU5LSU5HCi0gICAgICAgIGZvcihpID0gMCwgaWkgPSBwb3N0TGlua0Zucy5sZW5ndGg7IGkgPCBp
aTsgaSsrKSB7Ci0gICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGxpbmtGbiA9IHBvc3RMaW5r
Rm5zW2ldOwotICAgICAgICAgICAgbGlua0ZuKHNjb3BlLCAkZWxlbWVudCwgYXR0cnMsCi0gICAg
ICAgICAgICAgICAgbGlua0ZuLnJlcXVpcmUgJiYgZ2V0Q29udHJvbGxlcnMobGlua0ZuLnJlcXVp
cmUsICRlbGVtZW50KSk7Ci0gICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgJGV4
Y2VwdGlvbkhhbmRsZXIoZSwgc3RhcnRpbmdUYWcoJGVsZW1lbnQpKTsKLSAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIGxvb2tzIHVwIHRo
ZSBkaXJlY3RpdmUgYW5kIGRlY29yYXRlcyBpdCB3aXRoIGV4Y2VwdGlvbiBoYW5kbGluZyBhbmQg
cHJvcGVyIHBhcmFtZXRlcnMuIFdlCi0gICAgICogY2FsbCB0aGlzIHRoZSBib3VuZERpcmVjdGl2
ZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIGRpcmVj
dGl2ZSB0byBsb29rIHVwLgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlvbiBUaGUgZGly
ZWN0aXZlIG11c3QgYmUgZm91bmQgaW4gc3BlY2lmaWMgZm9ybWF0LgotICAgICAqICAgU3RyaW5n
IGNvbnRhaW5pbmcgYW55IG9mIHRoZXNlcyBjaGFyYWN0ZXJzOgotICAgICAqCi0gICAgICogICAq
IGBFYDogZWxlbWVudCBuYW1lCi0gICAgICogICAqIGBBJzogYXR0cmlidXRlCi0gICAgICogICAq
IGBDYDogY2xhc3MKLSAgICAgKiAgICogYE1gOiBjb21tZW50Ci0gICAgICogQHJldHVybnMgdHJ1
ZSBpZiBkaXJlY3RpdmUgd2FzIGFkZGVkLgotICAgICAqLwotICAgIGZ1bmN0aW9uIGFkZERpcmVj
dGl2ZSh0RGlyZWN0aXZlcywgbmFtZSwgbG9jYXRpb24sIG1heFByaW9yaXR5KSB7Ci0gICAgICB2
YXIgbWF0Y2ggPSBmYWxzZTsKLSAgICAgIGlmIChoYXNEaXJlY3RpdmVzLmhhc093blByb3BlcnR5
KG5hbWUpKSB7Ci0gICAgICAgIGZvcih2YXIgZGlyZWN0aXZlLCBkaXJlY3RpdmVzID0gJGluamVj
dG9yLmdldChuYW1lICsgU3VmZml4KSwKLSAgICAgICAgICAgIGkgPSAwLCBpaSA9IGRpcmVjdGl2
ZXMubGVuZ3RoOyBpPGlpOyBpKyspIHsKLSAgICAgICAgICB0cnkgewotICAgICAgICAgICAgZGly
ZWN0aXZlID0gZGlyZWN0aXZlc1tpXTsKLSAgICAgICAgICAgIGlmICggKG1heFByaW9yaXR5ID09
PSB1bmRlZmluZWQgfHwgbWF4UHJpb3JpdHkgPiBkaXJlY3RpdmUucHJpb3JpdHkpICYmCi0gICAg
ICAgICAgICAgICAgIGRpcmVjdGl2ZS5yZXN0cmljdC5pbmRleE9mKGxvY2F0aW9uKSAhPSAtMSkg
ewotICAgICAgICAgICAgICB0RGlyZWN0aXZlcy5wdXNoKGRpcmVjdGl2ZSk7Ci0gICAgICAgICAg
ICAgIG1hdGNoID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IGNhdGNoKGUpIHsg
JGV4Y2VwdGlvbkhhbmRsZXIoZSk7IH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJu
IG1hdGNoOwotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogV2hlbiB0aGUgZWxlbWVudCBpcyBy
ZXBsYWNlZCB3aXRoIEhUTUwgdGVtcGxhdGUgdGhlbiB0aGUgbmV3IGF0dHJpYnV0ZXMKLSAgICAg
KiBvbiB0aGUgdGVtcGxhdGUgbmVlZCB0byBiZSBtZXJnZWQgd2l0aCB0aGUgZXhpc3RpbmcgYXR0
cmlidXRlcyBpbiB0aGUgRE9NLgotICAgICAqIFRoZSBkZXNpcmVkIGVmZmVjdCBpcyB0byBoYXZl
IGJvdGggb2YgdGhlIGF0dHJpYnV0ZXMgcHJlc2VudC4KLSAgICAgKgotICAgICAqIEBwYXJhbSB7
b2JqZWN0fSBkc3QgZGVzdGluYXRpb24gYXR0cmlidXRlcyAob3JpZ2luYWwgRE9NKQotICAgICAq
IEBwYXJhbSB7b2JqZWN0fSBzcmMgc291cmNlIGF0dHJpYnV0ZXMgKGZyb20gdGhlIGRpcmVjdGl2
ZSB0ZW1wbGF0ZSkKLSAgICAgKi8KLSAgICBmdW5jdGlvbiBtZXJnZVRlbXBsYXRlQXR0cmlidXRl
cyhkc3QsIHNyYykgewotICAgICAgdmFyIHNyY0F0dHIgPSBzcmMuJGF0dHIsCi0gICAgICAgICAg
ZHN0QXR0ciA9IGRzdC4kYXR0ciwKLSAgICAgICAgICAkZWxlbWVudCA9IGRzdC4kJGVsZW1lbnQ7
Ci0KLSAgICAgIC8vIHJlYXBwbHkgdGhlIG9sZCBhdHRyaWJ1dGVzIHRvIHRoZSBuZXcgZWxlbWVu
dAotICAgICAgZm9yRWFjaChkc3QsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHsKLSAgICAgICAgaWYg
KGtleS5jaGFyQXQoMCkgIT0gJyQnKSB7Ci0gICAgICAgICAgaWYgKHNyY1trZXldKSB7Ci0gICAg
ICAgICAgICB2YWx1ZSArPSAoa2V5ID09PSAnc3R5bGUnID8gJzsnIDogJyAnKSArIHNyY1trZXld
OwotICAgICAgICAgIH0KLSAgICAgICAgICBkc3QuJHNldChrZXksIHZhbHVlLCB0cnVlLCBzcmNB
dHRyW2tleV0pOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgICAgLy8gY29weSB0aGUgbmV3
IGF0dHJpYnV0ZXMgb24gdGhlIG9sZCBhdHRycyBvYmplY3QKLSAgICAgIGZvckVhY2goc3JjLCBm
dW5jdGlvbih2YWx1ZSwga2V5KSB7Ci0gICAgICAgIGlmIChrZXkgPT0gJ2NsYXNzJykgewotICAg
ICAgICAgIHNhZmVBZGRDbGFzcygkZWxlbWVudCwgdmFsdWUpOwotICAgICAgICAgIGRzdFsnY2xh
c3MnXSA9IChkc3RbJ2NsYXNzJ10gPyBkc3RbJ2NsYXNzJ10gKyAnICcgOiAnJykgKyB2YWx1ZTsK
LSAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gJ3N0eWxlJykgewotICAgICAgICAgICRlbGVtZW50
LmF0dHIoJ3N0eWxlJywgJGVsZW1lbnQuYXR0cignc3R5bGUnKSArICc7JyArIHZhbHVlKTsKLSAg
ICAgICAgfSBlbHNlIGlmIChrZXkuY2hhckF0KDApICE9ICckJyAmJiAhZHN0Lmhhc093blByb3Bl
cnR5KGtleSkpIHsKLSAgICAgICAgICBkc3Rba2V5XSA9IHZhbHVlOwotICAgICAgICAgIGRzdEF0
dHJba2V5XSA9IHNyY0F0dHJba2V5XTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgfQotCi0K
LSAgICBmdW5jdGlvbiBjb21waWxlVGVtcGxhdGVVcmwoZGlyZWN0aXZlcywgYmVmb3JlVGVtcGxh
dGVOb2RlTGlua0ZuLCAkY29tcGlsZU5vZGUsIHRBdHRycywKLSAgICAgICAgJHJvb3RFbGVtZW50
LCByZXBsYWNlLCBjaGlsZFRyYW5zY2x1ZGVGbikgewotICAgICAgdmFyIGxpbmtRdWV1ZSA9IFtd
LAotICAgICAgICAgIGFmdGVyVGVtcGxhdGVOb2RlTGlua0ZuLAotICAgICAgICAgIGFmdGVyVGVt
cGxhdGVDaGlsZExpbmtGbiwKLSAgICAgICAgICBiZWZvcmVUZW1wbGF0ZUNvbXBpbGVOb2RlID0g
JGNvbXBpbGVOb2RlWzBdLAotICAgICAgICAgIG9yaWdBc3luY0RpcmVjdGl2ZSA9IGRpcmVjdGl2
ZXMuc2hpZnQoKSwKLSAgICAgICAgICAvLyBUaGUgZmFjdCB0aGF0IHdlIGhhdmUgdG8gY29weSBh
bmQgcGF0Y2ggdGhlIGRpcmVjdGl2ZSBzZWVtcyB3cm9uZyEKLSAgICAgICAgICBkZXJpdmVkU3lu
Y0RpcmVjdGl2ZSA9IGV4dGVuZCh7fSwgb3JpZ0FzeW5jRGlyZWN0aXZlLCB7Ci0gICAgICAgICAg
ICBjb250cm9sbGVyOiBudWxsLCB0ZW1wbGF0ZVVybDogbnVsbCwgdHJhbnNjbHVkZTogbnVsbCwg
c2NvcGU6IG51bGwKLSAgICAgICAgICB9KTsKLQotICAgICAgJGNvbXBpbGVOb2RlLmh0bWwoJycp
OwotCi0gICAgICAkaHR0cC5nZXQob3JpZ0FzeW5jRGlyZWN0aXZlLnRlbXBsYXRlVXJsLCB7Y2Fj
aGU6ICR0ZW1wbGF0ZUNhY2hlfSkuCi0gICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24oY29udGVudCkg
ewotICAgICAgICAgIHZhciBjb21waWxlTm9kZSwgdGVtcFRlbXBsYXRlQXR0cnMsICR0ZW1wbGF0
ZTsKLQotICAgICAgICAgIGNvbnRlbnQgPSBkZW5vcm1hbGl6ZVRlbXBsYXRlKGNvbnRlbnQpOwot
Ci0gICAgICAgICAgaWYgKHJlcGxhY2UpIHsKLSAgICAgICAgICAgICR0ZW1wbGF0ZSA9IGpxTGl0
ZSgnPGRpdj4nICsgdHJpbShjb250ZW50KSArICc8L2Rpdj4nKS5jb250ZW50cygpOwotICAgICAg
ICAgICAgY29tcGlsZU5vZGUgPSAkdGVtcGxhdGVbMF07Ci0KLSAgICAgICAgICAgIGlmICgkdGVt
cGxhdGUubGVuZ3RoICE9IDEgfHwgY29tcGlsZU5vZGUubm9kZVR5cGUgIT09IDEpIHsKLSAgICAg
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKE1VTFRJX1JPT1RfVEVNUExBVEVfRVJST1IgKyBjb250
ZW50KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGVtcFRlbXBsYXRlQXR0cnMgPSB7
JGF0dHI6IHt9fTsKLSAgICAgICAgICAgIHJlcGxhY2VXaXRoKCRyb290RWxlbWVudCwgJGNvbXBp
bGVOb2RlLCBjb21waWxlTm9kZSk7Ci0gICAgICAgICAgICBjb2xsZWN0RGlyZWN0aXZlcyhjb21w
aWxlTm9kZSwgZGlyZWN0aXZlcywgdGVtcFRlbXBsYXRlQXR0cnMpOwotICAgICAgICAgICAgbWVy
Z2VUZW1wbGF0ZUF0dHJpYnV0ZXModEF0dHJzLCB0ZW1wVGVtcGxhdGVBdHRycyk7Ci0gICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbXBpbGVOb2RlID0gYmVmb3JlVGVtcGxhdGVDb21w
aWxlTm9kZTsKLSAgICAgICAgICAgICRjb21waWxlTm9kZS5odG1sKGNvbnRlbnQpOwotICAgICAg
ICAgIH0KLQotICAgICAgICAgIGRpcmVjdGl2ZXMudW5zaGlmdChkZXJpdmVkU3luY0RpcmVjdGl2
ZSk7Ci0gICAgICAgICAgYWZ0ZXJUZW1wbGF0ZU5vZGVMaW5rRm4gPSBhcHBseURpcmVjdGl2ZXNU
b05vZGUoZGlyZWN0aXZlcywgY29tcGlsZU5vZGUsIHRBdHRycywgY2hpbGRUcmFuc2NsdWRlRm4p
OwotICAgICAgICAgIGFmdGVyVGVtcGxhdGVDaGlsZExpbmtGbiA9IGNvbXBpbGVOb2RlcygkY29t
cGlsZU5vZGVbMF0uY2hpbGROb2RlcywgY2hpbGRUcmFuc2NsdWRlRm4pOwotCi0KLSAgICAgICAg
ICB3aGlsZShsaW5rUXVldWUubGVuZ3RoKSB7Ci0gICAgICAgICAgICB2YXIgY29udHJvbGxlciA9
IGxpbmtRdWV1ZS5wb3AoKSwKLSAgICAgICAgICAgICAgICBsaW5rUm9vdEVsZW1lbnQgPSBsaW5r
UXVldWUucG9wKCksCi0gICAgICAgICAgICAgICAgYmVmb3JlVGVtcGxhdGVMaW5rTm9kZSA9IGxp
bmtRdWV1ZS5wb3AoKSwKLSAgICAgICAgICAgICAgICBzY29wZSA9IGxpbmtRdWV1ZS5wb3AoKSwK
LSAgICAgICAgICAgICAgICBsaW5rTm9kZSA9IGNvbXBpbGVOb2RlOwotCi0gICAgICAgICAgICBp
ZiAoYmVmb3JlVGVtcGxhdGVMaW5rTm9kZSAhPT0gYmVmb3JlVGVtcGxhdGVDb21waWxlTm9kZSkg
ewotICAgICAgICAgICAgICAvLyBpdCB3YXMgY2xvbmVkIHRoZXJlZm9yZSB3ZSBoYXZlIHRvIGNs
b25lIGFzIHdlbGwuCi0gICAgICAgICAgICAgIGxpbmtOb2RlID0gSlFMaXRlQ2xvbmUoY29tcGls
ZU5vZGUpOwotICAgICAgICAgICAgICByZXBsYWNlV2l0aChsaW5rUm9vdEVsZW1lbnQsIGpxTGl0
ZShiZWZvcmVUZW1wbGF0ZUxpbmtOb2RlKSwgbGlua05vZGUpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBhZnRlclRlbXBsYXRlTm9kZUxpbmtGbihmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgYmVmb3JlVGVtcGxhdGVOb2RlTGlua0ZuKGFmdGVyVGVtcGxhdGVDaGlsZExpbmtGbiwg
c2NvcGUsIGxpbmtOb2RlLCAkcm9vdEVsZW1lbnQsIGNvbnRyb2xsZXIpOwotICAgICAgICAgICAg
fSwgc2NvcGUsIGxpbmtOb2RlLCAkcm9vdEVsZW1lbnQsIGNvbnRyb2xsZXIpOwotICAgICAgICAg
IH0KLSAgICAgICAgICBsaW5rUXVldWUgPSBudWxsOwotICAgICAgICB9KS4KLSAgICAgICAgZXJy
b3IoZnVuY3Rpb24ocmVzcG9uc2UsIGNvZGUsIGhlYWRlcnMsIGNvbmZpZykgewotICAgICAgICAg
IHRocm93IEVycm9yKCdGYWlsZWQgdG8gbG9hZCB0ZW1wbGF0ZTogJyArIGNvbmZpZy51cmwpOwot
ICAgICAgICB9KTsKLQotICAgICAgcmV0dXJuIGZ1bmN0aW9uIGRlbGF5ZWROb2RlTGlua0ZuKGln
bm9yZUNoaWxkTGlua0ZuLCBzY29wZSwgbm9kZSwgcm9vdEVsZW1lbnQsIGNvbnRyb2xsZXIpIHsK
LSAgICAgICAgaWYgKGxpbmtRdWV1ZSkgewotICAgICAgICAgIGxpbmtRdWV1ZS5wdXNoKHNjb3Bl
KTsKLSAgICAgICAgICBsaW5rUXVldWUucHVzaChub2RlKTsKLSAgICAgICAgICBsaW5rUXVldWUu
cHVzaChyb290RWxlbWVudCk7Ci0gICAgICAgICAgbGlua1F1ZXVlLnB1c2goY29udHJvbGxlcik7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgYWZ0ZXJUZW1wbGF0ZU5vZGVMaW5rRm4oZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICBiZWZvcmVUZW1wbGF0ZU5vZGVMaW5rRm4oYWZ0ZXJUZW1w
bGF0ZUNoaWxkTGlua0ZuLCBzY29wZSwgbm9kZSwgcm9vdEVsZW1lbnQsIGNvbnRyb2xsZXIpOwot
ICAgICAgICAgIH0sIHNjb3BlLCBub2RlLCByb290RWxlbWVudCwgY29udHJvbGxlcik7Ci0gICAg
ICAgIH0KLSAgICAgIH07Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBTb3J0aW5nIGZ1bmN0
aW9uIGZvciBib3VuZCBkaXJlY3RpdmVzLgotICAgICAqLwotICAgIGZ1bmN0aW9uIGJ5UHJpb3Jp
dHkoYSwgYikgewotICAgICAgcmV0dXJuIGIucHJpb3JpdHkgLSBhLnByaW9yaXR5OwotICAgIH0K
LQotCi0gICAgZnVuY3Rpb24gYXNzZXJ0Tm9EdXBsaWNhdGUod2hhdCwgcHJldmlvdXNEaXJlY3Rp
dmUsIGRpcmVjdGl2ZSwgZWxlbWVudCkgewotICAgICAgaWYgKHByZXZpb3VzRGlyZWN0aXZlKSB7
Ci0gICAgICAgIHRocm93IEVycm9yKCdNdWx0aXBsZSBkaXJlY3RpdmVzIFsnICsgcHJldmlvdXNE
aXJlY3RpdmUubmFtZSArICcsICcgKwotICAgICAgICAgIGRpcmVjdGl2ZS5uYW1lICsgJ10gYXNr
aW5nIGZvciAnICsgd2hhdCArICcgb246ICcgKyAgc3RhcnRpbmdUYWcoZWxlbWVudCkpOwotICAg
ICAgfQotICAgIH0KLQotCi0gICAgZnVuY3Rpb24gYWRkVGV4dEludGVycG9sYXRlRGlyZWN0aXZl
KGRpcmVjdGl2ZXMsIHRleHQpIHsKLSAgICAgIHZhciBpbnRlcnBvbGF0ZUZuID0gJGludGVycG9s
YXRlKHRleHQsIHRydWUpOwotICAgICAgaWYgKGludGVycG9sYXRlRm4pIHsKLSAgICAgICAgZGly
ZWN0aXZlcy5wdXNoKHsKLSAgICAgICAgICBwcmlvcml0eTogMCwKLSAgICAgICAgICBjb21waWxl
OiB2YWx1ZUZuKGZ1bmN0aW9uIHRleHRJbnRlcnBvbGF0ZUxpbmtGbihzY29wZSwgbm9kZSkgewot
ICAgICAgICAgICAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50KCksCi0gICAgICAgICAgICAgICAg
YmluZGluZ3MgPSBwYXJlbnQuZGF0YSgnJGJpbmRpbmcnKSB8fCBbXTsKLSAgICAgICAgICAgIGJp
bmRpbmdzLnB1c2goaW50ZXJwb2xhdGVGbik7Ci0gICAgICAgICAgICBzYWZlQWRkQ2xhc3MocGFy
ZW50LmRhdGEoJyRiaW5kaW5nJywgYmluZGluZ3MpLCAnbmctYmluZGluZycpOwotICAgICAgICAg
ICAgc2NvcGUuJHdhdGNoKGludGVycG9sYXRlRm4sIGZ1bmN0aW9uIGludGVycG9sYXRlRm5XYXRj
aEFjdGlvbih2YWx1ZSkgewotICAgICAgICAgICAgICBub2RlWzBdLm5vZGVWYWx1ZSA9IHZhbHVl
OwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgfSkKLSAgICAgICAgfSk7Ci0gICAgICB9Ci0g
ICAgfQotCi0KLSAgICBmdW5jdGlvbiBhZGRBdHRySW50ZXJwb2xhdGVEaXJlY3RpdmUobm9kZSwg
ZGlyZWN0aXZlcywgdmFsdWUsIG5hbWUpIHsKLSAgICAgIHZhciBpbnRlcnBvbGF0ZUZuID0gJGlu
dGVycG9sYXRlKHZhbHVlLCB0cnVlKTsKLQotICAgICAgLy8gbm8gaW50ZXJwb2xhdGlvbiBmb3Vu
ZCAtPiBpZ25vcmUKLSAgICAgIGlmICghaW50ZXJwb2xhdGVGbikgcmV0dXJuOwotCi0KLSAgICAg
IGRpcmVjdGl2ZXMucHVzaCh7Ci0gICAgICAgIHByaW9yaXR5OiAxMDAsCi0gICAgICAgIGNvbXBp
bGU6IHZhbHVlRm4oZnVuY3Rpb24gYXR0ckludGVycG9sYXRlTGlua0ZuKHNjb3BlLCBlbGVtZW50
LCBhdHRyKSB7Ci0gICAgICAgICAgdmFyICQkb2JzZXJ2ZXJzID0gKGF0dHIuJCRvYnNlcnZlcnMg
fHwgKGF0dHIuJCRvYnNlcnZlcnMgPSB7fSkpOwotCi0gICAgICAgICAgaWYgKG5hbWUgPT09ICdj
bGFzcycpIHsKLSAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gaW50ZXJwb2xhdGUgY2xhc3NlcyBh
Z2FpbiwgaW4gdGhlIGNhc2UgdGhlIGVsZW1lbnQgd2FzIHJlcGxhY2VkCi0gICAgICAgICAgICAv
LyBhbmQgdGhlcmVmb3JlIHRoZSB0d28gY2xhc3MgYXR0cnMgZ290IG1lcmdlZCAtIHdlIHdhbnQg
dG8gaW50ZXJwb2xhdGUgdGhlIHJlc3VsdAotICAgICAgICAgICAgaW50ZXJwb2xhdGVGbiA9ICRp
bnRlcnBvbGF0ZShhdHRyW25hbWVdLCB0cnVlKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBh
dHRyW25hbWVdID0gdW5kZWZpbmVkOwotICAgICAgICAgICgkJG9ic2VydmVyc1tuYW1lXSB8fCAo
JCRvYnNlcnZlcnNbbmFtZV0gPSBbXSkpLiQkaW50ZXIgPSB0cnVlOwotICAgICAgICAgIChhdHRy
LiQkb2JzZXJ2ZXJzICYmIGF0dHIuJCRvYnNlcnZlcnNbbmFtZV0uJCRzY29wZSB8fCBzY29wZSku
Ci0gICAgICAgICAgICAkd2F0Y2goaW50ZXJwb2xhdGVGbiwgZnVuY3Rpb24gaW50ZXJwb2xhdGVG
bldhdGNoQWN0aW9uKHZhbHVlKSB7Ci0gICAgICAgICAgICAgIGF0dHIuJHNldChuYW1lLCB2YWx1
ZSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSkKLSAgICAgIH0pOwotICAgIH0KLQotCi0g
ICAgLyoqCi0gICAgICogVGhpcyBpcyBhIHNwZWNpYWwganFMaXRlLnJlcGxhY2VXaXRoLCB3aGlj
aCBjYW4gcmVwbGFjZSBpdGVtcyB3aGljaAotICAgICAqIGhhdmUgbm8gcGFyZW50cywgcHJvdmlk
ZWQgdGhhdCB0aGUgY29udGFpbmluZyBqcUxpdGUgY29sbGVjdGlvbiBpcyBwcm92aWRlZC4KLSAg
ICAgKgotICAgICAqIEBwYXJhbSB7SnFMaXRlPX0gJHJvb3RFbGVtZW50IFRoZSByb290IG9mIHRo
ZSBjb21waWxlIHRyZWUuIFVzZWQgc28gdGhhdCB3ZSBjYW4gcmVwbGFjZSBub2RlcwotICAgICAq
ICAgIGluIHRoZSByb290IG9mIHRoZSB0cmVlLgotICAgICAqIEBwYXJhbSB7SnFMaXRlfSAkZWxl
bWVudCBUaGUganFMaXRlIGVsZW1lbnQgd2hpY2ggd2UgYXJlIGdvaW5nIHRvIHJlcGxhY2UuIFdl
IGtlZXAgdGhlIHNoZWxsLAotICAgICAqICAgIGJ1dCByZXBsYWNlIGl0cyBET00gbm9kZSByZWZl
cmVuY2UuCi0gICAgICogQHBhcmFtIHtOb2RlfSBuZXdOb2RlIFRoZSBuZXcgRE9NIG5vZGUuCi0g
ICAgICovCi0gICAgZnVuY3Rpb24gcmVwbGFjZVdpdGgoJHJvb3RFbGVtZW50LCAkZWxlbWVudCwg
bmV3Tm9kZSkgewotICAgICAgdmFyIG9sZE5vZGUgPSAkZWxlbWVudFswXSwKLSAgICAgICAgICBw
YXJlbnQgPSBvbGROb2RlLnBhcmVudE5vZGUsCi0gICAgICAgICAgaSwgaWk7Ci0KLSAgICAgIGlm
ICgkcm9vdEVsZW1lbnQpIHsKLSAgICAgICAgZm9yKGkgPSAwLCBpaSA9ICRyb290RWxlbWVudC5s
ZW5ndGg7IGkgPCBpaTsgaSsrKSB7Ci0gICAgICAgICAgaWYgKCRyb290RWxlbWVudFtpXSA9PSBv
bGROb2RlKSB7Ci0gICAgICAgICAgICAkcm9vdEVsZW1lbnRbaV0gPSBuZXdOb2RlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlm
IChwYXJlbnQpIHsKLSAgICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZChuZXdOb2RlLCBvbGROb2Rl
KTsKLSAgICAgIH0KLQotICAgICAgbmV3Tm9kZVtqcUxpdGUuZXhwYW5kb10gPSBvbGROb2RlW2px
TGl0ZS5leHBhbmRvXTsKLSAgICAgICRlbGVtZW50WzBdID0gbmV3Tm9kZTsKLSAgICB9Ci0gIH1d
OwotfQotCi12YXIgUFJFRklYX1JFR0VYUCA9IC9eKHhbXDpcLV9dfGRhdGFbXDpcLV9dKS9pOwot
LyoqCi0gKiBDb252ZXJ0cyBhbGwgYWNjZXB0ZWQgZGlyZWN0aXZlcyBmb3JtYXQgaW50byBwcm9w
ZXIgZGlyZWN0aXZlIG5hbWUuCi0gKiBBbGwgb2YgdGhlc2Ugd2lsbCBiZWNvbWUgJ215RGlyZWN0
aXZlJzoKLSAqICAgbXk6RGlSZWN0aXZlCi0gKiAgIG15LWRpcmVjdGl2ZQotICogICB4LW15LWRp
cmVjdGl2ZQotICogICBkYXRhLW15OmRpcmVjdGl2ZQotICoKLSAqIEFsc28gdGhlcmUgaXMgc3Bl
Y2lhbCBjYXNlIGZvciBNb3ogcHJlZml4IHN0YXJ0aW5nIHdpdGggdXBwZXIgY2FzZSBsZXR0ZXIu
Ci0gKiBAcGFyYW0gbmFtZSBOYW1lIHRvIG5vcm1hbGl6ZQotICovCi1mdW5jdGlvbiBkaXJlY3Rp
dmVOb3JtYWxpemUobmFtZSkgewotICByZXR1cm4gY2FtZWxDYXNlKG5hbWUucmVwbGFjZShQUkVG
SVhfUkVHRVhQLCAnJykpOwotfQotCi0vKioKLSAqIEBuZ2RvYyBvYmplY3QKLSAqIEBuYW1lIG5n
LiRjb21waWxlLmRpcmVjdGl2ZS5BdHRyaWJ1dGVzCi0gKiBAZGVzY3JpcHRpb24KLSAqCi0gKiBB
IHNoYXJlZCBvYmplY3QgYmV0d2VlbiBkaXJlY3RpdmUgY29tcGlsZSAvIGxpbmtpbmcgZnVuY3Rp
b25zIHdoaWNoIGNvbnRhaW5zIG5vcm1hbGl6ZWQgRE9NIGVsZW1lbnQKLSAqIGF0dHJpYnV0ZXMu
IFRoZSB0aGUgdmFsdWVzIHJlZmxlY3QgY3VycmVudCBiaW5kaW5nIHN0YXRlIGB7eyB9fWAuIFRo
ZSBub3JtYWxpemF0aW9uIGlzIG5lZWRlZAotICogc2luY2UgYWxsIG9mIHRoZXNlIGFyZSB0cmVh
dGVkIGFzIGVxdWl2YWxlbnQgaW4gQW5ndWxhcjoKLSAqCi0gKiAgICAgICAgICA8c3BhbiBuZzpi
aW5kPSJhIiBuZy1iaW5kPSJhIiBkYXRhLW5nLWJpbmQ9ImEiIHgtbmctYmluZD0iYSI+Ci0gKi8K
LQotLyoqCi0gKiBAbmdkb2MgcHJvcGVydHkKLSAqIEBuYW1lIG5nLiRjb21waWxlLmRpcmVjdGl2
ZS5BdHRyaWJ1dGVzIyRhdHRyCi0gKiBAcHJvcGVydHlPZiBuZy4kY29tcGlsZS5kaXJlY3RpdmUu
QXR0cmlidXRlcwotICogQHJldHVybnMge29iamVjdH0gQSBtYXAgb2YgRE9NIGVsZW1lbnQgYXR0
cmlidXRlIG5hbWVzIHRvIHRoZSBub3JtYWxpemVkIG5hbWUuIFRoaXMgaXMKLSAqICAgICAgICAg
IG5lZWRlZCB0byBkbyByZXZlcnNlIGxvb2t1cCBmcm9tIG5vcm1hbGl6ZWQgbmFtZSBiYWNrIHRv
IGFjdHVhbCBuYW1lLgotICovCi0KLQotLyoqCi0gKiBAbmdkb2MgZnVuY3Rpb24KLSAqIEBuYW1l
IG5nLiRjb21waWxlLmRpcmVjdGl2ZS5BdHRyaWJ1dGVzIyRzZXQKLSAqIEBtZXRob2RPZiBuZy4k
Y29tcGlsZS5kaXJlY3RpdmUuQXR0cmlidXRlcwotICogQGZ1bmN0aW9uCi0gKgotICogQGRlc2Ny
aXB0aW9uCi0gKiBTZXQgRE9NIGVsZW1lbnQgYXR0cmlidXRlIHZhbHVlLgotICoKLSAqCi0gKiBA
cGFyYW0ge3N0cmluZ30gbmFtZSBOb3JtYWxpemVkIGVsZW1lbnQgYXR0cmlidXRlIG5hbWUgb2Yg
dGhlIHByb3BlcnR5IHRvIG1vZGlmeS4gVGhlIG5hbWUgaXMKLSAqICAgICAgICAgIHJldmVycyB0
cmFuc2xhdGVkIHVzaW5nIHRoZSB7QGxpbmsgbmcuJGNvbXBpbGUuZGlyZWN0aXZlLkF0dHJpYnV0
ZXMjJGF0dHIgJGF0dHJ9Ci0gKiAgICAgICAgICBwcm9wZXJ0eSB0byB0aGUgb3JpZ2luYWwgbmFt
ZS4KLSAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBWYWx1ZSB0byBzZXQgdGhlIGF0dHJpYnV0ZSB0
by4KLSAqLwotCi0KLQotLyoqCi0gKiBDbG9zdXJlIGNvbXBpbGVyIHR5cGUgaW5mb3JtYXRpb24K
LSAqLwotCi1mdW5jdGlvbiBub2Rlc2V0TGlua2luZ0ZuKAotICAvKiBhbmd1bGFyLlNjb3BlICov
IHNjb3BlLAotICAvKiBOb2RlTGlzdCAqLyBub2RlTGlzdCwKLSAgLyogRWxlbWVudCAqLyByb290
RWxlbWVudCwKLSAgLyogZnVuY3Rpb24oRnVuY3Rpb24pICovIGJvdW5kVHJhbnNjbHVkZUZuCi0p
e30KLQotZnVuY3Rpb24gZGlyZWN0aXZlTGlua2luZ0ZuKAotICAvKiBub2Rlc2V0TGlua2luZ0Zu
ICovIG5vZGVzZXRMaW5raW5nRm4sCi0gIC8qIGFuZ3VsYXIuU2NvcGUgKi8gc2NvcGUsCi0gIC8q
IE5vZGUgKi8gbm9kZSwKLSAgLyogRWxlbWVudCAqLyByb290RWxlbWVudCwKLSAgLyogZnVuY3Rp
b24oRnVuY3Rpb24pICovIGJvdW5kVHJhbnNjbHVkZUZuCi0pe30KLQotLyoqCi0gKiBAbmdkb2Mg
b2JqZWN0Ci0gKiBAbmFtZSBuZy4kY29udHJvbGxlclByb3ZpZGVyCi0gKiBAZGVzY3JpcHRpb24K
LSAqIFRoZSB7QGxpbmsgbmcuJGNvbnRyb2xsZXIgJGNvbnRyb2xsZXIgc2VydmljZX0gaXMgdXNl
ZCBieSBBbmd1bGFyIHRvIGNyZWF0ZSBuZXcKLSAqIGNvbnRyb2xsZXJzLgotICoKLSAqIFRoaXMg
cHJvdmlkZXIgYWxsb3dzIGNvbnRyb2xsZXIgcmVnaXN0cmF0aW9uIHZpYSB0aGUKLSAqIHtAbGlu
ayBuZy4kY29udHJvbGxlclByb3ZpZGVyI3JlZ2lzdGVyIHJlZ2lzdGVyfSBtZXRob2QuCi0gKi8K
LWZ1bmN0aW9uICRDb250cm9sbGVyUHJvdmlkZXIoKSB7Ci0gIHZhciBjb250cm9sbGVycyA9IHt9
OwotCi0KLSAgLyoqCi0gICAqIEBuZ2RvYyBmdW5jdGlvbgotICAgKiBAbmFtZSBuZy4kY29udHJv
bGxlclByb3ZpZGVyI3JlZ2lzdGVyCi0gICAqIEBtZXRob2RPZiBuZy4kY29udHJvbGxlclByb3Zp
ZGVyCi0gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIENvbnRyb2xsZXIgbmFtZQotICAgKiBAcGFy
YW0ge0Z1bmN0aW9ufEFycmF5fSBjb25zdHJ1Y3RvciBDb250cm9sbGVyIGNvbnN0cnVjdG9yIGZu
IChvcHRpb25hbGx5IGRlY29yYXRlZCB3aXRoIERJCi0gICAqICAgIGFubm90YXRpb25zIGluIHRo
ZSBhcnJheSBub3RhdGlvbikuCi0gICAqLwotICB0aGlzLnJlZ2lzdGVyID0gZnVuY3Rpb24obmFt
ZSwgY29uc3RydWN0b3IpIHsKLSAgICBpZiAoaXNPYmplY3QobmFtZSkpIHsKLSAgICAgIGV4dGVu
ZChjb250cm9sbGVycywgbmFtZSkKLSAgICB9IGVsc2UgewotICAgICAgY29udHJvbGxlcnNbbmFt
ZV0gPSBjb25zdHJ1Y3RvcjsKLSAgICB9Ci0gIH07Ci0KLQotICB0aGlzLiRnZXQgPSBbJyRpbmpl
Y3RvcicsICckd2luZG93JywgZnVuY3Rpb24oJGluamVjdG9yLCAkd2luZG93KSB7Ci0KLSAgICAv
KioKLSAgICAgKiBAbmdkb2MgZnVuY3Rpb24KLSAgICAgKiBAbmFtZSBuZy4kY29udHJvbGxlcgot
ICAgICAqIEByZXF1aXJlcyAkaW5qZWN0b3IKLSAgICAgKgotICAgICAqIEBwYXJhbSB7RnVuY3Rp
b258c3RyaW5nfSBjb25zdHJ1Y3RvciBJZiBjYWxsZWQgd2l0aCBhIGZ1bmN0aW9uIHRoZW4gaXQn
cyBjb25zaWRlcmVkIHRvIGJlIHRoZQotICAgICAqICAgIGNvbnRyb2xsZXIgY29uc3RydWN0b3Ig
ZnVuY3Rpb24uIE90aGVyd2lzZSBpdCdzIGNvbnNpZGVyZWQgdG8gYmUgYSBzdHJpbmcgd2hpY2gg
aXMgdXNlZAotICAgICAqICAgIHRvIHJldHJpZXZlIHRoZSBjb250cm9sbGVyIGNvbnN0cnVjdG9y
IHVzaW5nIHRoZSBmb2xsb3dpbmcgc3RlcHM6Ci0gICAgICoKLSAgICAgKiAgICAqIGNoZWNrIGlm
IGEgY29udHJvbGxlciB3aXRoIGdpdmVuIG5hbWUgaXMgcmVnaXN0ZXJlZCB2aWEgYCRjb250cm9s
bGVyUHJvdmlkZXJgCi0gICAgICogICAgKiBjaGVjayBpZiBldmFsdWF0aW5nIHRoZSBzdHJpbmcg
b24gdGhlIGN1cnJlbnQgc2NvcGUgcmV0dXJucyBhIGNvbnN0cnVjdG9yCi0gICAgICogICAgKiBj
aGVjayBgd2luZG93W2NvbnN0cnVjdG9yXWAgb24gdGhlIGdsb2JhbCBgd2luZG93YCBvYmplY3QK
LSAgICAgKgotICAgICAqIEBwYXJhbSB7T2JqZWN0fSBsb2NhbHMgSW5qZWN0aW9uIGxvY2FscyBm
b3IgQ29udHJvbGxlci4KLSAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEluc3RhbmNlIG9mIGdpdmVu
IGNvbnRyb2xsZXIuCi0gICAgICoKLSAgICAgKiBAZGVzY3JpcHRpb24KLSAgICAgKiBgJGNvbnRy
b2xsZXJgIHNlcnZpY2UgaXMgcmVzcG9uc2libGUgZm9yIGluc3RhbnRpYXRpbmcgY29udHJvbGxl
cnMuCi0gICAgICoKLSAgICAgKiBJdCdzIGp1c3QgYSBzaW1wbGUgY2FsbCB0byB7QGxpbmsgQVVU
Ty4kaW5qZWN0b3IgJGluamVjdG9yfSwgYnV0IGV4dHJhY3RlZCBpbnRvCi0gICAgICogYSBzZXJ2
aWNlLCBzbyB0aGF0IG9uZSBjYW4gb3ZlcnJpZGUgdGhpcyBzZXJ2aWNlIHdpdGgge0BsaW5rIGh0
dHBzOi8vZ2lzdC5naXRodWIuY29tLzE2NDk3ODgKLSAgICAgKiBCQyB2ZXJzaW9ufS4KLSAgICAg
Ki8KLSAgICByZXR1cm4gZnVuY3Rpb24oY29uc3RydWN0b3IsIGxvY2FscykgewotICAgICAgaWYo
aXNTdHJpbmcoY29uc3RydWN0b3IpKSB7Ci0gICAgICAgIHZhciBuYW1lID0gY29uc3RydWN0b3I7
Ci0gICAgICAgIGNvbnN0cnVjdG9yID0gY29udHJvbGxlcnMuaGFzT3duUHJvcGVydHkobmFtZSkK
LSAgICAgICAgICAgID8gY29udHJvbGxlcnNbbmFtZV0KLSAgICAgICAgICAgIDogZ2V0dGVyKGxv
Y2Fscy4kc2NvcGUsIG5hbWUsIHRydWUpIHx8IGdldHRlcigkd2luZG93LCBuYW1lLCB0cnVlKTsK
LQotICAgICAgICBhc3NlcnRBcmdGbihjb25zdHJ1Y3RvciwgbmFtZSwgdHJ1ZSk7Ci0gICAgICB9
Ci0KLSAgICAgIHJldHVybiAkaW5qZWN0b3IuaW5zdGFudGlhdGUoY29uc3RydWN0b3IsIGxvY2Fs
cyk7Ci0gICAgfTsKLSAgfV07Ci19Ci0KLS8qKgotICogQG5nZG9jIG9iamVjdAotICogQG5hbWUg
bmcuJGRvY3VtZW50Ci0gKiBAcmVxdWlyZXMgJHdpbmRvdwotICoKLSAqIEBkZXNjcmlwdGlvbgot
ICogQSB7QGxpbmsgYW5ndWxhci5lbGVtZW50IGpRdWVyeSAobGl0ZSl9LXdyYXBwZWQgcmVmZXJl
bmNlIHRvIHRoZSBicm93c2VyJ3MgYHdpbmRvdy5kb2N1bWVudGAKLSAqIGVsZW1lbnQuCi0gKi8K
LWZ1bmN0aW9uICREb2N1bWVudFByb3ZpZGVyKCl7Ci0gIHRoaXMuJGdldCA9IFsnJHdpbmRvdycs
IGZ1bmN0aW9uKHdpbmRvdyl7Ci0gICAgcmV0dXJuIGpxTGl0ZSh3aW5kb3cuZG9jdW1lbnQpOwot
ICB9XTsKLX0KLQotLyoqCi0gKiBAbmdkb2MgZnVuY3Rpb24KLSAqIEBuYW1lIG5nLiRleGNlcHRp
b25IYW5kbGVyCi0gKiBAcmVxdWlyZXMgJGxvZwotICoKLSAqIEBkZXNjcmlwdGlvbgotICogQW55
IHVuY2F1Z2h0IGV4Y2VwdGlvbiBpbiBhbmd1bGFyIGV4cHJlc3Npb25zIGlzIGRlbGVnYXRlZCB0
byB0aGlzIHNlcnZpY2UuCi0gKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzaW1wbHkgZGVs
ZWdhdGVzIHRvIGAkbG9nLmVycm9yYCB3aGljaCBsb2dzIGl0IGludG8KLSAqIHRoZSBicm93c2Vy
IGNvbnNvbGUuCi0gKgotICogSW4gdW5pdCB0ZXN0cywgaWYgYGFuZ3VsYXItbW9ja3MuanNgIGlz
IGxvYWRlZCwgdGhpcyBzZXJ2aWNlIGlzIG92ZXJyaWRkZW4gYnkKLSAqIHtAbGluayBuZ01vY2su
JGV4Y2VwdGlvbkhhbmRsZXIgbW9jayAkZXhjZXB0aW9uSGFuZGxlcn0gd2hpY2ggYWlkcyBpbiB0
ZXN0aW5nLgotICoKLSAqIEBwYXJhbSB7RXJyb3J9IGV4Y2VwdGlvbiBFeGNlcHRpb24gYXNzb2Np
YXRlZCB3aXRoIHRoZSBlcnJvci4KLSAqIEBwYXJhbSB7c3RyaW5nPX0gY2F1c2Ugb3B0aW9uYWwg
aW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbnRleHQgaW4gd2hpY2gKLSAqICAgICAgIHRoZSBlcnJv
ciB3YXMgdGhyb3duLgotICoKLSAqLwotZnVuY3Rpb24gJEV4Y2VwdGlvbkhhbmRsZXJQcm92aWRl
cigpIHsKLSAgdGhpcy4kZ2V0ID0gWyckbG9nJywgZnVuY3Rpb24oJGxvZykgewotICAgIHJldHVy
biBmdW5jdGlvbihleGNlcHRpb24sIGNhdXNlKSB7Ci0gICAgICAkbG9nLmVycm9yLmFwcGx5KCRs
b2csIGFyZ3VtZW50cyk7Ci0gICAgfTsKLSAgfV07Ci19Ci0KLS8qKgotICogQG5nZG9jIG9iamVj
dAotICogQG5hbWUgbmcuJGludGVycG9sYXRlUHJvdmlkZXIKLSAqIEBmdW5jdGlvbgotICoKLSAq
IEBkZXNjcmlwdGlvbgotICoKLSAqIFVzZWQgZm9yIGNvbmZpZ3VyaW5nIHRoZSBpbnRlcnBvbGF0
aW9uIG1hcmt1cC4gRGVmYXVsdHMgdG8gYHt7YCBhbmQgYH19YC4KLSAqLwotZnVuY3Rpb24gJElu
dGVycG9sYXRlUHJvdmlkZXIoKSB7Ci0gIHZhciBzdGFydFN5bWJvbCA9ICd7eyc7Ci0gIHZhciBl
bmRTeW1ib2wgPSAnfX0nOwotCi0gIC8qKgotICAgKiBAbmdkb2MgbWV0aG9kCi0gICAqIEBuYW1l
IG5nLiRpbnRlcnBvbGF0ZVByb3ZpZGVyI3N0YXJ0U3ltYm9sCi0gICAqIEBtZXRob2RPZiBuZy4k
aW50ZXJwb2xhdGVQcm92aWRlcgotICAgKiBAZGVzY3JpcHRpb24KLSAgICogU3ltYm9sIHRvIGRl
bm90ZSBzdGFydCBvZiBleHByZXNzaW9uIGluIHRoZSBpbnRlcnBvbGF0ZWQgc3RyaW5nLiBEZWZh
dWx0cyB0byBge3tgLgotICAgKgotICAgKiBAcGFyYW0ge3N0cmluZz19IHZhbHVlIG5ldyB2YWx1
ZSB0byBzZXQgdGhlIHN0YXJ0aW5nIHN5bWJvbCB0by4KLSAgICogQHJldHVybnMge3N0cmluZ3xz
ZWxmfSBSZXR1cm5zIHRoZSBzeW1ib2wgd2hlbiB1c2VkIGFzIGdldHRlciBhbmQgc2VsZiBpZiB1
c2VkIGFzIHNldHRlci4KLSAgICovCi0gIHRoaXMuc3RhcnRTeW1ib2wgPSBmdW5jdGlvbih2YWx1
ZSl7Ci0gICAgaWYgKHZhbHVlKSB7Ci0gICAgICBzdGFydFN5bWJvbCA9IHZhbHVlOwotICAgICAg
cmV0dXJuIHRoaXM7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBzdGFydFN5bWJvbDsKLSAg
ICB9Ci0gIH07Ci0KLSAgLyoqCi0gICAqIEBuZ2RvYyBtZXRob2QKLSAgICogQG5hbWUgbmcuJGlu
dGVycG9sYXRlUHJvdmlkZXIjZW5kU3ltYm9sCi0gICAqIEBtZXRob2RPZiBuZy4kaW50ZXJwb2xh
dGVQcm92aWRlcgotICAgKiBAZGVzY3JpcHRpb24KLSAgICogU3ltYm9sIHRvIGRlbm90ZSB0aGUg
ZW5kIG9mIGV4cHJlc3Npb24gaW4gdGhlIGludGVycG9sYXRlZCBzdHJpbmcuIERlZmF1bHRzIHRv
IGB9fWAuCi0gICAqCi0gICAqIEBwYXJhbSB7c3RyaW5nPX0gdmFsdWUgbmV3IHZhbHVlIHRvIHNl
dCB0aGUgZW5kaW5nIHN5bWJvbCB0by4KLSAgICogQHJldHVybnMge3N0cmluZ3xzZWxmfSBSZXR1
cm5zIHRoZSBzeW1ib2wgd2hlbiB1c2VkIGFzIGdldHRlciBhbmQgc2VsZiBpZiB1c2VkIGFzIHNl
dHRlci4KLSAgICovCi0gIHRoaXMuZW5kU3ltYm9sID0gZnVuY3Rpb24odmFsdWUpewotICAgIGlm
ICh2YWx1ZSkgewotICAgICAgZW5kU3ltYm9sID0gdmFsdWU7Ci0gICAgICByZXR1cm4gdGhpczsK
LSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIGVuZFN5bWJvbDsKLSAgICB9Ci0gIH07Ci0KLQot
ICB0aGlzLiRnZXQgPSBbJyRwYXJzZScsIGZ1bmN0aW9uKCRwYXJzZSkgewotICAgIHZhciBzdGFy
dFN5bWJvbExlbmd0aCA9IHN0YXJ0U3ltYm9sLmxlbmd0aCwKLSAgICAgICAgZW5kU3ltYm9sTGVu
Z3RoID0gZW5kU3ltYm9sLmxlbmd0aDsKLQotICAgIC8qKgotICAgICAqIEBuZ2RvYyBmdW5jdGlv
bgotICAgICAqIEBuYW1lIG5nLiRpbnRlcnBvbGF0ZQotICAgICAqIEBmdW5jdGlvbgotICAgICAq
Ci0gICAgICogQHJlcXVpcmVzICRwYXJzZQotICAgICAqCi0gICAgICogQGRlc2NyaXB0aW9uCi0g
ICAgICoKLSAgICAgKiBDb21waWxlcyBhIHN0cmluZyB3aXRoIG1hcmt1cCBpbnRvIGFuIGludGVy
cG9sYXRpb24gZnVuY3Rpb24uIFRoaXMgc2VydmljZSBpcyB1c2VkIGJ5IHRoZQotICAgICAqIEhU
TUwge0BsaW5rIG5nLiRjb21waWxlICRjb21waWxlfSBzZXJ2aWNlIGZvciBkYXRhIGJpbmRpbmcu
IFNlZQotICAgICAqIHtAbGluayBuZy4kaW50ZXJwb2xhdGVQcm92aWRlciAkaW50ZXJwb2xhdGVQ
cm92aWRlcn0gZm9yIGNvbmZpZ3VyaW5nIHRoZQotICAgICAqIGludGVycG9sYXRpb24gbWFya3Vw
LgotICAgICAqCi0gICAgICoKLSAgICAgICA8cHJlPgotICAgICAgICAgdmFyICRpbnRlcnBvbGF0
ZSA9IC4uLjsgLy8gaW5qZWN0ZWQKLSAgICAgICAgIHZhciBleHAgPSAkaW50ZXJwb2xhdGUoJ0hl
bGxvIHt7bmFtZX19IScpOwotICAgICAgICAgZXhwZWN0KGV4cCh7bmFtZTonQW5ndWxhcid9KS50
b0VxdWFsKCdIZWxsbyBBbmd1bGFyIScpOwotICAgICAgIDwvcHJlPgotICAgICAqCi0gICAgICoK
LSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBUaGUgdGV4dCB3aXRoIG1hcmt1cCB0byBpbnRl
cnBvbGF0ZS4KLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBtdXN0SGF2ZUV4cHJlc3Npb24gaWYg
c2V0IHRvIHRydWUgdGhlbiB0aGUgaW50ZXJwb2xhdGlvbiBzdHJpbmcgbXVzdCBoYXZlCi0gICAg
ICogICAgZW1iZWRkZWQgZXhwcmVzc2lvbiBpbiBvcmRlciB0byByZXR1cm4gYW4gaW50ZXJwb2xh
dGlvbiBmdW5jdGlvbi4gU3RyaW5ncyB3aXRoIG5vCi0gICAgICogICAgZW1iZWRkZWQgZXhwcmVz
c2lvbiB3aWxsIHJldHVybiBudWxsIGZvciB0aGUgaW50ZXJwb2xhdGlvbiBmdW5jdGlvbi4KLSAg
ICAgKiBAcmV0dXJucyB7ZnVuY3Rpb24oY29udGV4dCl9IGFuIGludGVycG9sYXRpb24gZnVuY3Rp
b24gd2hpY2ggaXMgdXNlZCB0byBjb21wdXRlIHRoZSBpbnRlcnBvbGF0ZWQKLSAgICAgKiAgICBz
dHJpbmcuIFRoZSBmdW5jdGlvbiBoYXMgdGhlc2UgcGFyYW1ldGVyczoKLSAgICAgKgotICAgICAq
ICAgICogYGNvbnRleHRgOiBhbiBvYmplY3QgYWdhaW5zdCB3aGljaCBhbnkgZXhwcmVzc2lvbnMg
ZW1iZWRkZWQgaW4gdGhlIHN0cmluZ3MgYXJlIGV2YWx1YXRlZAotICAgICAqICAgICAgYWdhaW5z
dC4KLSAgICAgKgotICAgICAqLwotICAgIGZ1bmN0aW9uICRpbnRlcnBvbGF0ZSh0ZXh0LCBtdXN0
SGF2ZUV4cHJlc3Npb24pIHsKLSAgICAgIHZhciBzdGFydEluZGV4LAotICAgICAgICAgIGVuZElu
ZGV4LAotICAgICAgICAgIGluZGV4ID0gMCwKLSAgICAgICAgICBwYXJ0cyA9IFtdLAotICAgICAg
ICAgIGxlbmd0aCA9IHRleHQubGVuZ3RoLAotICAgICAgICAgIGhhc0ludGVycG9sYXRpb24gPSBm
YWxzZSwKLSAgICAgICAgICBmbiwKLSAgICAgICAgICBleHAsCi0gICAgICAgICAgY29uY2F0ID0g
W107Ci0KLSAgICAgIHdoaWxlKGluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgIGlmICggKChzdGFy
dEluZGV4ID0gdGV4dC5pbmRleE9mKHN0YXJ0U3ltYm9sLCBpbmRleCkpICE9IC0xKSAmJgotICAg
ICAgICAgICAgICgoZW5kSW5kZXggPSB0ZXh0LmluZGV4T2YoZW5kU3ltYm9sLCBzdGFydEluZGV4
ICsgc3RhcnRTeW1ib2xMZW5ndGgpKSAhPSAtMSkgKSB7Ci0gICAgICAgICAgKGluZGV4ICE9IHN0
YXJ0SW5kZXgpICYmIHBhcnRzLnB1c2godGV4dC5zdWJzdHJpbmcoaW5kZXgsIHN0YXJ0SW5kZXgp
KTsKLSAgICAgICAgICBwYXJ0cy5wdXNoKGZuID0gJHBhcnNlKGV4cCA9IHRleHQuc3Vic3RyaW5n
KHN0YXJ0SW5kZXggKyBzdGFydFN5bWJvbExlbmd0aCwgZW5kSW5kZXgpKSk7Ci0gICAgICAgICAg
Zm4uZXhwID0gZXhwOwotICAgICAgICAgIGluZGV4ID0gZW5kSW5kZXggKyBlbmRTeW1ib2xMZW5n
dGg7Ci0gICAgICAgICAgaGFzSW50ZXJwb2xhdGlvbiA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgLy8gd2UgZGlkIG5vdCBmaW5kIGFueXRoaW5nLCBzbyB3ZSBoYXZlIHRvIGFk
ZCB0aGUgcmVtYWluZGVyIHRvIHRoZSBwYXJ0cyBhcnJheQotICAgICAgICAgIChpbmRleCAhPSBs
ZW5ndGgpICYmIHBhcnRzLnB1c2godGV4dC5zdWJzdHJpbmcoaW5kZXgpKTsKLSAgICAgICAgICBp
bmRleCA9IGxlbmd0aDsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoIShsZW5ndGgg
PSBwYXJ0cy5sZW5ndGgpKSB7Ci0gICAgICAgIC8vIHdlIGFkZGVkLCBub3RoaW5nLCBtdXN0IGhh
dmUgYmVlbiBhbiBlbXB0eSBzdHJpbmcuCi0gICAgICAgIHBhcnRzLnB1c2goJycpOwotICAgICAg
ICBsZW5ndGggPSAxOwotICAgICAgfQotCi0gICAgICBpZiAoIW11c3RIYXZlRXhwcmVzc2lvbiAg
fHwgaGFzSW50ZXJwb2xhdGlvbikgewotICAgICAgICBjb25jYXQubGVuZ3RoID0gbGVuZ3RoOwot
ICAgICAgICBmbiA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLSAgICAgICAgICBmb3IodmFyIGkgPSAw
LCBpaSA9IGxlbmd0aCwgcGFydDsgaTxpaTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAodHlwZW9m
IChwYXJ0ID0gcGFydHNbaV0pID09ICdmdW5jdGlvbicpIHsKLSAgICAgICAgICAgICAgcGFydCA9
IHBhcnQoY29udGV4dCk7Ci0gICAgICAgICAgICAgIGlmIChwYXJ0ID09IG51bGwgfHwgcGFydCA9
PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICBwYXJ0ID0gJyc7Ci0gICAgICAgICAgICAg
IH0gZWxzZSBpZiAodHlwZW9mIHBhcnQgIT0gJ3N0cmluZycpIHsKLSAgICAgICAgICAgICAgICBw
YXJ0ID0gdG9Kc29uKHBhcnQpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBjb25jYXRbaV0gPSBwYXJ0OwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4g
Y29uY2F0LmpvaW4oJycpOwotICAgICAgICB9OwotICAgICAgICBmbi5leHAgPSB0ZXh0OwotICAg
ICAgICBmbi5wYXJ0cyA9IHBhcnRzOwotICAgICAgICByZXR1cm4gZm47Ci0gICAgICB9Ci0gICAg
fQotCi0KLSAgICAvKioKLSAgICAgKiBAbmdkb2MgbWV0aG9kCi0gICAgICogQG5hbWUgbmcuJGlu
dGVycG9sYXRlI3N0YXJ0U3ltYm9sCi0gICAgICogQG1ldGhvZE9mIG5nLiRpbnRlcnBvbGF0ZQot
ICAgICAqIEBkZXNjcmlwdGlvbgotICAgICAqIFN5bWJvbCB0byBkZW5vdGUgdGhlIHN0YXJ0IG9m
IGV4cHJlc3Npb24gaW4gdGhlIGludGVycG9sYXRlZCBzdHJpbmcuIERlZmF1bHRzIHRvIGB7e2Au
Ci0gICAgICoKLSAgICAgKiBVc2Uge0BsaW5rIG5nLiRpbnRlcnBvbGF0ZVByb3ZpZGVyI3N0YXJ0
U3ltYm9sICRpbnRlcnBvbGF0ZVByb3ZpZGVyI3N0YXJ0U3ltYm9sfSB0byBjaGFuZ2UKLSAgICAg
KiB0aGUgc3ltYm9sLgotICAgICAqCi0gICAgICogQHJldHVybnMge3N0cmluZ30gc3RhcnQgc3lt
Ym9sLgotICAgICAqLwotICAgICRpbnRlcnBvbGF0ZS5zdGFydFN5bWJvbCA9IGZ1bmN0aW9uKCkg
ewotICAgICAgcmV0dXJuIHN0YXJ0U3ltYm9sOwotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICog
QG5nZG9jIG1ldGhvZAotICAgICAqIEBuYW1lIG5nLiRpbnRlcnBvbGF0ZSNlbmRTeW1ib2wKLSAg
ICAgKiBAbWV0aG9kT2YgbmcuJGludGVycG9sYXRlCi0gICAgICogQGRlc2NyaXB0aW9uCi0gICAg
ICogU3ltYm9sIHRvIGRlbm90ZSB0aGUgZW5kIG9mIGV4cHJlc3Npb24gaW4gdGhlIGludGVycG9s
YXRlZCBzdHJpbmcuIERlZmF1bHRzIHRvIGB9fWAuCi0gICAgICoKLSAgICAgKiBVc2Uge0BsaW5r
IG5nLiRpbnRlcnBvbGF0ZVByb3ZpZGVyI2VuZFN5bWJvbCAkaW50ZXJwb2xhdGVQcm92aWRlciNl
bmRTeW1ib2x9IHRvIGNoYW5nZQotICAgICAqIHRoZSBzeW1ib2wuCi0gICAgICoKLSAgICAgKiBA
cmV0dXJucyB7c3RyaW5nfSBzdGFydCBzeW1ib2wuCi0gICAgICovCi0gICAgJGludGVycG9sYXRl
LmVuZFN5bWJvbCA9IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIGVuZFN5bWJvbDsKLSAgICB9
Ci0KLSAgICByZXR1cm4gJGludGVycG9sYXRlOwotICB9XTsKLX0KLQotdmFyIFVSTF9NQVRDSCA9
IC9eKFteOl0rKTpcL1wvKFx3Kzp7MCwxfVx3KkApPyhcez9bXHdcLi1dKlx9PykoOihbMC05XSsp
KT8oXC9bXlw/I10qKT8oXD8oW14jXSopKT8oIyguKikpPyQvLAotICAgIFBBVEhfTUFUQ0ggPSAv
XihbXlw/I10qKT8oXD8oW14jXSopKT8oIyguKikpPyQvLAotICAgIEhBU0hfTUFUQ0ggPSBQQVRI
X01BVENILAotICAgIERFRkFVTFRfUE9SVFMgPSB7J2h0dHAnOiA4MCwgJ2h0dHBzJzogNDQzLCAn
ZnRwJzogMjF9OwotCi0KLS8qKgotICogRW5jb2RlIHBhdGggdXNpbmcgZW5jb2RlVXJpU2VnbWVu
dCwgaWdub3JpbmcgZm9yd2FyZCBzbGFzaGVzCi0gKgotICogQHBhcmFtIHtzdHJpbmd9IHBhdGgg
UGF0aCB0byBlbmNvZGUKLSAqIEByZXR1cm5zIHtzdHJpbmd9Ci0gKi8KLWZ1bmN0aW9uIGVuY29k
ZVBhdGgocGF0aCkgewotICB2YXIgc2VnbWVudHMgPSBwYXRoLnNwbGl0KCcvJyksCi0gICAgICBp
ID0gc2VnbWVudHMubGVuZ3RoOwotCi0gIHdoaWxlIChpLS0pIHsKLSAgICBzZWdtZW50c1tpXSA9
IGVuY29kZVVyaVNlZ21lbnQoc2VnbWVudHNbaV0pOwotICB9Ci0KLSAgcmV0dXJuIHNlZ21lbnRz
LmpvaW4oJy8nKTsKLX0KLQotZnVuY3Rpb24gc3RyaXBIYXNoKHVybCkgewotICByZXR1cm4gdXJs
LnNwbGl0KCcjJylbMF07Ci19Ci0KLQotZnVuY3Rpb24gbWF0Y2hVcmwodXJsLCBvYmopIHsKLSAg
dmFyIG1hdGNoID0gVVJMX01BVENILmV4ZWModXJsKTsKLQotICBtYXRjaCA9IHsKLSAgICAgIHBy
b3RvY29sOiBtYXRjaFsxXSwKLSAgICAgIGhvc3Q6IG1hdGNoWzNdLAotICAgICAgcG9ydDogaW50
KG1hdGNoWzVdKSB8fCBERUZBVUxUX1BPUlRTW21hdGNoWzFdXSB8fCBudWxsLAotICAgICAgcGF0
aDogbWF0Y2hbNl0gfHwgJy8nLAotICAgICAgc2VhcmNoOiBtYXRjaFs4XSwKLSAgICAgIGhhc2g6
IG1hdGNoWzEwXQotICAgIH07Ci0KLSAgaWYgKG9iaikgewotICAgIG9iai4kJHByb3RvY29sID0g
bWF0Y2gucHJvdG9jb2w7Ci0gICAgb2JqLiQkaG9zdCA9IG1hdGNoLmhvc3Q7Ci0gICAgb2JqLiQk
cG9ydCA9IG1hdGNoLnBvcnQ7Ci0gIH0KLQotICByZXR1cm4gbWF0Y2g7Ci19Ci0KLQotZnVuY3Rp
b24gY29tcG9zZVByb3RvY29sSG9zdFBvcnQocHJvdG9jb2wsIGhvc3QsIHBvcnQpIHsKLSAgcmV0
dXJuIHByb3RvY29sICsgJzovLycgKyBob3N0ICsgKHBvcnQgPT0gREVGQVVMVF9QT1JUU1twcm90
b2NvbF0gPyAnJyA6ICc6JyArIHBvcnQpOwotfQotCi0KLWZ1bmN0aW9uIHBhdGhQcmVmaXhGcm9t
QmFzZShiYXNlUGF0aCkgewotICByZXR1cm4gYmFzZVBhdGguc3Vic3RyKDAsIGJhc2VQYXRoLmxh
c3RJbmRleE9mKCcvJykpOwotfQotCi0KLWZ1bmN0aW9uIGNvbnZlcnRUb0h0bWw1VXJsKHVybCwg
YmFzZVBhdGgsIGhhc2hQcmVmaXgpIHsKLSAgdmFyIG1hdGNoID0gbWF0Y2hVcmwodXJsKTsKLQot
ICAvLyBhbHJlYWR5IGh0bWw1IHVybAotICBpZiAoZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoLnBh
dGgpICE9IGJhc2VQYXRoIHx8IGlzVW5kZWZpbmVkKG1hdGNoLmhhc2gpIHx8Ci0gICAgICBtYXRj
aC5oYXNoLmluZGV4T2YoaGFzaFByZWZpeCkgIT09IDApIHsKLSAgICByZXR1cm4gdXJsOwotICAv
LyBjb252ZXJ0IGhhc2hiYW5nIHVybCAtPiBodG1sNSB1cmwKLSAgfSBlbHNlIHsKLSAgICByZXR1
cm4gY29tcG9zZVByb3RvY29sSG9zdFBvcnQobWF0Y2gucHJvdG9jb2wsIG1hdGNoLmhvc3QsIG1h
dGNoLnBvcnQpICsKLSAgICAgICAgICAgcGF0aFByZWZpeEZyb21CYXNlKGJhc2VQYXRoKSArIG1h
dGNoLmhhc2guc3Vic3RyKGhhc2hQcmVmaXgubGVuZ3RoKTsKLSAgfQotfQotCi0KLWZ1bmN0aW9u
IGNvbnZlcnRUb0hhc2hiYW5nVXJsKHVybCwgYmFzZVBhdGgsIGhhc2hQcmVmaXgpIHsKLSAgdmFy
IG1hdGNoID0gbWF0Y2hVcmwodXJsKTsKLQotICAvLyBhbHJlYWR5IGhhc2hiYW5nIHVybAotICBp
ZiAoZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoLnBhdGgpID09IGJhc2VQYXRoICYmICFpc1VuZGVm
aW5lZChtYXRjaC5oYXNoKSAmJgotICAgICAgbWF0Y2guaGFzaC5pbmRleE9mKGhhc2hQcmVmaXgp
ID09PSAwKSB7Ci0gICAgcmV0dXJuIHVybDsKLSAgLy8gY29udmVydCBodG1sNSB1cmwgLT4gaGFz
aGJhbmcgdXJsCi0gIH0gZWxzZSB7Ci0gICAgdmFyIHNlYXJjaCA9IG1hdGNoLnNlYXJjaCAmJiAn
PycgKyBtYXRjaC5zZWFyY2ggfHwgJycsCi0gICAgICAgIGhhc2ggPSBtYXRjaC5oYXNoICYmICcj
JyArIG1hdGNoLmhhc2ggfHwgJycsCi0gICAgICAgIHBhdGhQcmVmaXggPSBwYXRoUHJlZml4RnJv
bUJhc2UoYmFzZVBhdGgpLAotICAgICAgICBwYXRoID0gbWF0Y2gucGF0aC5zdWJzdHIocGF0aFBy
ZWZpeC5sZW5ndGgpOwotCi0gICAgaWYgKG1hdGNoLnBhdGguaW5kZXhPZihwYXRoUHJlZml4KSAh
PT0gMCkgewotICAgICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgdXJsICInICsgdXJsICsgJyIsIG1p
c3NpbmcgcGF0aCBwcmVmaXggIicgKyBwYXRoUHJlZml4ICsgJyIgIScpOwotICAgIH0KLQotICAg
IHJldHVybiBjb21wb3NlUHJvdG9jb2xIb3N0UG9ydChtYXRjaC5wcm90b2NvbCwgbWF0Y2guaG9z
dCwgbWF0Y2gucG9ydCkgKyBiYXNlUGF0aCArCi0gICAgICAgICAgICcjJyArIGhhc2hQcmVmaXgg
KyBwYXRoICsgc2VhcmNoICsgaGFzaDsKLSAgfQotfQotCi0KLS8qKgotICogTG9jYXRpb25Vcmwg
cmVwcmVzZW50cyBhbiB1cmwKLSAqIFRoaXMgb2JqZWN0IGlzIGV4cG9zZWQgYXMgJGxvY2F0aW9u
IHNlcnZpY2Ugd2hlbiBIVE1MNSBtb2RlIGlzIGVuYWJsZWQgYW5kIHN1cHBvcnRlZAotICoKLSAq
IEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtzdHJpbmd9IHVybCBIVE1MNSB1cmwKLSAqIEBwYXJh
bSB7c3RyaW5nfSBwYXRoUHJlZml4Ci0gKi8KLWZ1bmN0aW9uIExvY2F0aW9uVXJsKHVybCwgcGF0
aFByZWZpeCwgYXBwQmFzZVVybCkgewotICBwYXRoUHJlZml4ID0gcGF0aFByZWZpeCB8fCAnJzsK
LQotICAvKioKLSAgICogUGFyc2UgZ2l2ZW4gaHRtbDUgKHJlZ3VsYXIpIHVybCBzdHJpbmcgaW50
byBwcm9wZXJ0aWVzCi0gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdBYnNvbHV0ZVVybCBIVE1MNSB1
cmwKLSAgICogQHByaXZhdGUKLSAgICovCi0gIHRoaXMuJCRwYXJzZSA9IGZ1bmN0aW9uKG5ld0Fi
c29sdXRlVXJsKSB7Ci0gICAgdmFyIG1hdGNoID0gbWF0Y2hVcmwobmV3QWJzb2x1dGVVcmwsIHRo
aXMpOwotCi0gICAgaWYgKG1hdGNoLnBhdGguaW5kZXhPZihwYXRoUHJlZml4KSAhPT0gMCkgewot
ICAgICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgdXJsICInICsgbmV3QWJzb2x1dGVVcmwgKyAnIiwg
bWlzc2luZyBwYXRoIHByZWZpeCAiJyArIHBhdGhQcmVmaXggKyAnIiAhJyk7Ci0gICAgfQotCi0g
ICAgdGhpcy4kJHBhdGggPSBkZWNvZGVVUklDb21wb25lbnQobWF0Y2gucGF0aC5zdWJzdHIocGF0
aFByZWZpeC5sZW5ndGgpKTsKLSAgICB0aGlzLiQkc2VhcmNoID0gcGFyc2VLZXlWYWx1ZShtYXRj
aC5zZWFyY2gpOwotICAgIHRoaXMuJCRoYXNoID0gbWF0Y2guaGFzaCAmJiBkZWNvZGVVUklDb21w
b25lbnQobWF0Y2guaGFzaCkgfHwgJyc7Ci0KLSAgICB0aGlzLiQkY29tcG9zZSgpOwotICB9Owot
Ci0gIC8qKgotICAgKiBDb21wb3NlIHVybCBhbmQgdXBkYXRlIGBhYnNVcmxgIHByb3BlcnR5Ci0g
ICAqIEBwcml2YXRlCi0gICAqLwotICB0aGlzLiQkY29tcG9zZSA9IGZ1bmN0aW9uKCkgewotICAg
IHZhciBzZWFyY2ggPSB0b0tleVZhbHVlKHRoaXMuJCRzZWFyY2gpLAotICAgICAgICBoYXNoID0g
dGhpcy4kJGhhc2ggPyAnIycgKyBlbmNvZGVVcmlTZWdtZW50KHRoaXMuJCRoYXNoKSA6ICcnOwot
Ci0gICAgdGhpcy4kJHVybCA9IGVuY29kZVBhdGgodGhpcy4kJHBhdGgpICsgKHNlYXJjaCA/ICc/
JyArIHNlYXJjaCA6ICcnKSArIGhhc2g7Ci0gICAgdGhpcy4kJGFic1VybCA9IGNvbXBvc2VQcm90
b2NvbEhvc3RQb3J0KHRoaXMuJCRwcm90b2NvbCwgdGhpcy4kJGhvc3QsIHRoaXMuJCRwb3J0KSAr
Ci0gICAgICAgICAgICAgICAgICAgIHBhdGhQcmVmaXggKyB0aGlzLiQkdXJsOwotICB9OwotCi0K
LSAgdGhpcy4kJHJld3JpdGVBcHBVcmwgPSBmdW5jdGlvbihhYnNvbHV0ZUxpbmtVcmwpIHsKLSAg
ICBpZihhYnNvbHV0ZUxpbmtVcmwuaW5kZXhPZihhcHBCYXNlVXJsKSA9PSAwKSB7Ci0gICAgICBy
ZXR1cm4gYWJzb2x1dGVMaW5rVXJsOwotICAgIH0KLSAgfQotCi0KLSAgdGhpcy4kJHBhcnNlKHVy
bCk7Ci19Ci0KLQotLyoqCi0gKiBMb2NhdGlvbkhhc2hiYW5nVXJsIHJlcHJlc2VudHMgdXJsCi0g
KiBUaGlzIG9iamVjdCBpcyBleHBvc2VkIGFzICRsb2NhdGlvbiBzZXJ2aWNlIHdoZW4gaHRtbDUg
aGlzdG9yeSBhcGkgaXMgZGlzYWJsZWQgb3Igbm90IHN1cHBvcnRlZAotICoKLSAqIEBjb25zdHJ1
Y3RvcgotICogQHBhcmFtIHtzdHJpbmd9IHVybCBMZWdhY3kgdXJsCi0gKiBAcGFyYW0ge3N0cmlu
Z30gaGFzaFByZWZpeCBQcmVmaXggZm9yIGhhc2ggcGFydCAoY29udGFpbmluZyBwYXRoIGFuZCBz
ZWFyY2gpCi0gKi8KLWZ1bmN0aW9uIExvY2F0aW9uSGFzaGJhbmdVcmwodXJsLCBoYXNoUHJlZml4
LCBhcHBCYXNlVXJsKSB7Ci0gIHZhciBiYXNlUGF0aDsKLQotICAvKioKLSAgICogUGFyc2UgZ2l2
ZW4gaGFzaGJhbmcgdXJsIGludG8gcHJvcGVydGllcwotICAgKiBAcGFyYW0ge3N0cmluZ30gdXJs
IEhhc2hiYW5nIHVybAotICAgKiBAcHJpdmF0ZQotICAgKi8KLSAgdGhpcy4kJHBhcnNlID0gZnVu
Y3Rpb24odXJsKSB7Ci0gICAgdmFyIG1hdGNoID0gbWF0Y2hVcmwodXJsLCB0aGlzKTsKLQotCi0g
ICAgaWYgKG1hdGNoLmhhc2ggJiYgbWF0Y2guaGFzaC5pbmRleE9mKGhhc2hQcmVmaXgpICE9PSAw
KSB7Ci0gICAgICB0aHJvdyBFcnJvcignSW52YWxpZCB1cmwgIicgKyB1cmwgKyAnIiwgbWlzc2lu
ZyBoYXNoIHByZWZpeCAiJyArIGhhc2hQcmVmaXggKyAnIiAhJyk7Ci0gICAgfQotCi0gICAgYmFz
ZVBhdGggPSBtYXRjaC5wYXRoICsgKG1hdGNoLnNlYXJjaCA/ICc/JyArIG1hdGNoLnNlYXJjaCA6
ICcnKTsKLSAgICBtYXRjaCA9IEhBU0hfTUFUQ0guZXhlYygobWF0Y2guaGFzaCB8fCAnJykuc3Vi
c3RyKGhhc2hQcmVmaXgubGVuZ3RoKSk7Ci0gICAgaWYgKG1hdGNoWzFdKSB7Ci0gICAgICB0aGlz
LiQkcGF0aCA9IChtYXRjaFsxXS5jaGFyQXQoMCkgPT0gJy8nID8gJycgOiAnLycpICsgZGVjb2Rl
VVJJQ29tcG9uZW50KG1hdGNoWzFdKTsKLSAgICB9IGVsc2UgewotICAgICAgdGhpcy4kJHBhdGgg
PSAnJzsKLSAgICB9Ci0KLSAgICB0aGlzLiQkc2VhcmNoID0gcGFyc2VLZXlWYWx1ZShtYXRjaFsz
XSk7Ci0gICAgdGhpcy4kJGhhc2ggPSBtYXRjaFs1XSAmJiBkZWNvZGVVUklDb21wb25lbnQobWF0
Y2hbNV0pIHx8ICcnOwotCi0gICAgdGhpcy4kJGNvbXBvc2UoKTsKLSAgfTsKLQotICAvKioKLSAg
ICogQ29tcG9zZSBoYXNoYmFuZyB1cmwgYW5kIHVwZGF0ZSBgYWJzVXJsYCBwcm9wZXJ0eQotICAg
KiBAcHJpdmF0ZQotICAgKi8KLSAgdGhpcy4kJGNvbXBvc2UgPSBmdW5jdGlvbigpIHsKLSAgICB2
YXIgc2VhcmNoID0gdG9LZXlWYWx1ZSh0aGlzLiQkc2VhcmNoKSwKLSAgICAgICAgaGFzaCA9IHRo
aXMuJCRoYXNoID8gJyMnICsgZW5jb2RlVXJpU2VnbWVudCh0aGlzLiQkaGFzaCkgOiAnJzsKLQot
ICAgIHRoaXMuJCR1cmwgPSBlbmNvZGVQYXRoKHRoaXMuJCRwYXRoKSArIChzZWFyY2ggPyAnPycg
KyBzZWFyY2ggOiAnJykgKyBoYXNoOwotICAgIHRoaXMuJCRhYnNVcmwgPSBjb21wb3NlUHJvdG9j
b2xIb3N0UG9ydCh0aGlzLiQkcHJvdG9jb2wsIHRoaXMuJCRob3N0LCB0aGlzLiQkcG9ydCkgKwot
ICAgICAgICAgICAgICAgICAgICBiYXNlUGF0aCArICh0aGlzLiQkdXJsID8gJyMnICsgaGFzaFBy
ZWZpeCArIHRoaXMuJCR1cmwgOiAnJyk7Ci0gIH07Ci0KLSAgdGhpcy4kJHJld3JpdGVBcHBVcmwg
PSBmdW5jdGlvbihhYnNvbHV0ZUxpbmtVcmwpIHsKLSAgICBpZihhYnNvbHV0ZUxpbmtVcmwuaW5k
ZXhPZihhcHBCYXNlVXJsKSA9PSAwKSB7Ci0gICAgICByZXR1cm4gYWJzb2x1dGVMaW5rVXJsOwot
ICAgIH0KLSAgfQotCi0KLSAgdGhpcy4kJHBhcnNlKHVybCk7Ci19Ci0KLQotTG9jYXRpb25Vcmwu
cHJvdG90eXBlID0gewotCi0gIC8qKgotICAgKiBIYXMgYW55IGNoYW5nZSBiZWVuIHJlcGxhY2lu
ZyA/Ci0gICAqIEBwcml2YXRlCi0gICAqLwotICAkJHJlcGxhY2U6IGZhbHNlLAotCi0gIC8qKgot
ICAgKiBAbmdkb2MgbWV0aG9kCi0gICAqIEBuYW1lIG5nLiRsb2NhdGlvbiNhYnNVcmwKLSAgICog
QG1ldGhvZE9mIG5nLiRsb2NhdGlvbgotICAgKgotICAgKiBAZGVzY3JpcHRpb24KLSAgICogVGhp
cyBtZXRob2QgaXMgZ2V0dGVyIG9ubHkuCi0gICAqCi0gICAqIFJldHVybiBmdWxsIHVybCByZXBy
ZXNlbnRhdGlvbiB3aXRoIGFsbCBzZWdtZW50cyBlbmNvZGVkIGFjY29yZGluZyB0byBydWxlcyBz
cGVjaWZpZWQgaW4KLSAgICoge0BsaW5rIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzM5ODYu
dHh0IFJGQyAzOTg2fS4KLSAgICoKLSAgICogQHJldHVybiB7c3RyaW5nfSBmdWxsIHVybAotICAg
Ki8KLSAgYWJzVXJsOiBsb2NhdGlvbkdldHRlcignJCRhYnNVcmwnKSwKLQotICAvKioKLSAgICog
QG5nZG9jIG1ldGhvZAotICAgKiBAbmFtZSBuZy4kbG9jYXRpb24jdXJsCi0gICAqIEBtZXRob2RP
ZiBuZy4kbG9jYXRpb24KLSAgICoKLSAgICogQGRlc2NyaXB0aW9uCi0gICAqIFRoaXMgbWV0aG9k
IGlzIGdldHRlciAvIHNldHRlci4KLSAgICoKLSAgICogUmV0dXJuIHVybCAoZS5nLiBgL3BhdGg/
YT1iI2hhc2hgKSB3aGVuIGNhbGxlZCB3aXRob3V0IGFueSBwYXJhbWV0ZXIuCi0gICAqCi0gICAq
IENoYW5nZSBwYXRoLCBzZWFyY2ggYW5kIGhhc2gsIHdoZW4gY2FsbGVkIHdpdGggcGFyYW1ldGVy
IGFuZCByZXR1cm4gYCRsb2NhdGlvbmAuCi0gICAqCi0gICAqIEBwYXJhbSB7c3RyaW5nPX0gdXJs
IE5ldyB1cmwgd2l0aG91dCBiYXNlIHByZWZpeCAoZS5nLiBgL3BhdGg/YT1iI2hhc2hgKQotICAg
KiBAcmV0dXJuIHtzdHJpbmd9IHVybAotICAgKi8KLSAgdXJsOiBmdW5jdGlvbih1cmwsIHJlcGxh
Y2UpIHsKLSAgICBpZiAoaXNVbmRlZmluZWQodXJsKSkKLSAgICAgIHJldHVybiB0aGlzLiQkdXJs
OwotCi0gICAgdmFyIG1hdGNoID0gUEFUSF9NQVRDSC5leGVjKHVybCk7Ci0gICAgaWYgKG1hdGNo
WzFdKSB0aGlzLnBhdGgoZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzFdKSk7Ci0gICAgaWYgKG1h
dGNoWzJdIHx8IG1hdGNoWzFdKSB0aGlzLnNlYXJjaChtYXRjaFszXSB8fCAnJyk7Ci0gICAgdGhp
cy5oYXNoKG1hdGNoWzVdIHx8ICcnLCByZXBsYWNlKTsKLQotICAgIHJldHVybiB0aGlzOwotICB9
LAotCi0gIC8qKgotICAgKiBAbmdkb2MgbWV0aG9kCi0gICAqIEBuYW1lIG5nLiRsb2NhdGlvbiNw
cm90b2NvbAotICAgKiBAbWV0aG9kT2YgbmcuJGxvY2F0aW9uCi0gICAqCi0gICAqIEBkZXNjcmlw
dGlvbgotICAgKiBUaGlzIG1ldGhvZCBpcyBnZXR0ZXIgb25seS4KLSAgICoKLSAgICogUmV0dXJu
IHByb3RvY29sIG9mIGN1cnJlbnQgdXJsLgotICAgKgotICAgKiBAcmV0dXJuIHtzdHJpbmd9IHBy
b3RvY29sIG9mIGN1cnJlbnQgdXJsCi0gICAqLwotICBwcm90b2NvbDogbG9jYXRpb25HZXR0ZXIo
JyQkcHJvdG9jb2wnKSwKLQotICAvKioKLSAgICogQG5nZG9jIG1ldGhvZAotICAgKiBAbmFtZSBu
Zy4kbG9jYXRpb24jaG9zdAotICAgKiBAbWV0aG9kT2YgbmcuJGxvY2F0aW9uCi0gICAqCi0gICAq
IEBkZXNjcmlwdGlvbgotICAgKiBUaGlzIG1ldGhvZCBpcyBnZXR0ZXIgb25seS4KLSAgICoKLSAg
ICogUmV0dXJuIGhvc3Qgb2YgY3VycmVudCB1cmwuCi0gICAqCi0gICAqIEByZXR1cm4ge3N0cmlu
Z30gaG9zdCBvZiBjdXJyZW50IHVybC4KLSAgICovCi0gIGhvc3Q6IGxvY2F0aW9uR2V0dGVyKCck
JGhvc3QnKSwKLQotICAvKioKLSAgICogQG5nZG9jIG1ldGhvZAotICAgKiBAbmFtZSBuZy4kbG9j
YXRpb24jcG9ydAotICAgKiBAbWV0aG9kT2YgbmcuJGxvY2F0aW9uCi0gICAqCi0gICAqIEBkZXNj
cmlwdGlvbgotICAgKiBUaGlzIG1ldGhvZCBpcyBnZXR0ZXIgb25seS4KLSAgICoKLSAgICogUmV0
dXJuIHBvcnQgb2YgY3VycmVudCB1cmwuCi0gICAqCi0gICAqIEByZXR1cm4ge051bWJlcn0gcG9y
dAotICAgKi8KLSAgcG9ydDogbG9jYXRpb25HZXR0ZXIoJyQkcG9ydCcpLAotCi0gIC8qKgotICAg
KiBAbmdkb2MgbWV0aG9kCi0gICAqIEBuYW1lIG5nLiRsb2NhdGlvbiNwYXRoCi0gICAqIEBtZXRo
b2RPZiBuZy4kbG9jYXRpb24KLSAgICoKLSAgICogQGRlc2NyaXB0aW9uCi0gICAqIFRoaXMgbWV0
aG9kIGlzIGdldHRlciAvIHNldHRlci4KLSAgICoKLSAgICogUmV0dXJuIHBhdGggb2YgY3VycmVu
dCB1cmwgd2hlbiBjYWxsZWQgd2l0aG91dCBhbnkgcGFyYW1ldGVyLgotICAgKgotICAgKiBDaGFu
Z2UgcGF0aCB3aGVuIGNhbGxlZCB3aXRoIHBhcmFtZXRlciBhbmQgcmV0dXJuIGAkbG9jYXRpb25g
LgotICAgKgotICAgKiBOb3RlOiBQYXRoIHNob3VsZCBhbHdheXMgYmVnaW4gd2l0aCBmb3J3YXJk
IHNsYXNoICgvKSwgdGhpcyBtZXRob2Qgd2lsbCBhZGQgdGhlIGZvcndhcmQgc2xhc2gKLSAgICog
aWYgaXQgaXMgbWlzc2luZy4KLSAgICoKLSAgICogQHBhcmFtIHtzdHJpbmc9fSBwYXRoIE5ldyBw
YXRoCi0gICAqIEByZXR1cm4ge3N0cmluZ30gcGF0aAotICAgKi8KLSAgcGF0aDogbG9jYXRpb25H
ZXR0ZXJTZXR0ZXIoJyQkcGF0aCcsIGZ1bmN0aW9uKHBhdGgpIHsKLSAgICByZXR1cm4gcGF0aC5j
aGFyQXQoMCkgPT0gJy8nID8gcGF0aCA6ICcvJyArIHBhdGg7Ci0gIH0pLAotCi0gIC8qKgotICAg
KiBAbmdkb2MgbWV0aG9kCi0gICAqIEBuYW1lIG5nLiRsb2NhdGlvbiNzZWFyY2gKLSAgICogQG1l
dGhvZE9mIG5nLiRsb2NhdGlvbgotICAgKgotICAgKiBAZGVzY3JpcHRpb24KLSAgICogVGhpcyBt
ZXRob2QgaXMgZ2V0dGVyIC8gc2V0dGVyLgotICAgKgotICAgKiBSZXR1cm4gc2VhcmNoIHBhcnQg
KGFzIG9iamVjdCkgb2YgY3VycmVudCB1cmwgd2hlbiBjYWxsZWQgd2l0aG91dCBhbnkgcGFyYW1l
dGVyLgotICAgKgotICAgKiBDaGFuZ2Ugc2VhcmNoIHBhcnQgd2hlbiBjYWxsZWQgd2l0aCBwYXJh
bWV0ZXIgYW5kIHJldHVybiBgJGxvY2F0aW9uYC4KLSAgICoKLSAgICogQHBhcmFtIHtzdHJpbmd8
b2JqZWN0PHN0cmluZyxzdHJpbmc+PX0gc2VhcmNoIE5ldyBzZWFyY2ggcGFyYW1zIC0gc3RyaW5n
IG9yIGhhc2ggb2JqZWN0Ci0gICAqIEBwYXJhbSB7c3RyaW5nPX0gcGFyYW1WYWx1ZSBJZiBgc2Vh
cmNoYCBpcyBhIHN0cmluZywgdGhlbiBgcGFyYW1WYWx1ZWAgd2lsbCBvdmVycmlkZSBvbmx5IGEK
LSAgICogICAgc2luZ2xlIHNlYXJjaCBwYXJhbWV0ZXIuIElmIHRoZSB2YWx1ZSBpcyBgbnVsbGAs
IHRoZSBwYXJhbWV0ZXIgd2lsbCBiZSBkZWxldGVkLgotICAgKgotICAgKiBAcmV0dXJuIHtzdHJp
bmd9IHNlYXJjaAotICAgKi8KLSAgc2VhcmNoOiBmdW5jdGlvbihzZWFyY2gsIHBhcmFtVmFsdWUp
IHsKLSAgICBpZiAoaXNVbmRlZmluZWQoc2VhcmNoKSkKLSAgICAgIHJldHVybiB0aGlzLiQkc2Vh
cmNoOwotCi0gICAgaWYgKGlzRGVmaW5lZChwYXJhbVZhbHVlKSkgewotICAgICAgaWYgKHBhcmFt
VmFsdWUgPT09IG51bGwpIHsKLSAgICAgICAgZGVsZXRlIHRoaXMuJCRzZWFyY2hbc2VhcmNoXTsK
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRoaXMuJCRzZWFyY2hbc2VhcmNoXSA9IHBhcmFtVmFs
dWU7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIHRoaXMuJCRzZWFyY2ggPSBpc1N0cmlu
ZyhzZWFyY2gpID8gcGFyc2VLZXlWYWx1ZShzZWFyY2gpIDogc2VhcmNoOwotICAgIH0KLQotICAg
IHRoaXMuJCRjb21wb3NlKCk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0sCi0KLSAgLyoqCi0gICAq
IEBuZ2RvYyBtZXRob2QKLSAgICogQG5hbWUgbmcuJGxvY2F0aW9uI2hhc2gKLSAgICogQG1ldGhv
ZE9mIG5nLiRsb2NhdGlvbgotICAgKgotICAgKiBAZGVzY3JpcHRpb24KLSAgICogVGhpcyBtZXRo
b2QgaXMgZ2V0dGVyIC8gc2V0dGVyLgotICAgKgotICAgKiBSZXR1cm4gaGFzaCBmcmFnbWVudCB3
aGVuIGNhbGxlZCB3aXRob3V0IGFueSBwYXJhbWV0ZXIuCi0gICAqCi0gICAqIENoYW5nZSBoYXNo
IGZyYWdtZW50IHdoZW4gY2FsbGVkIHdpdGggcGFyYW1ldGVyIGFuZCByZXR1cm4gYCRsb2NhdGlv
bmAuCi0gICAqCi0gICAqIEBwYXJhbSB7c3RyaW5nPX0gaGFzaCBOZXcgaGFzaCBmcmFnbWVudAot
ICAgKiBAcmV0dXJuIHtzdHJpbmd9IGhhc2gKLSAgICovCi0gIGhhc2g6IGxvY2F0aW9uR2V0dGVy
U2V0dGVyKCckJGhhc2gnLCBpZGVudGl0eSksCi0KLSAgLyoqCi0gICAqIEBuZ2RvYyBtZXRob2QK
LSAgICogQG5hbWUgbmcuJGxvY2F0aW9uI3JlcGxhY2UKLSAgICogQG1ldGhvZE9mIG5nLiRsb2Nh
dGlvbgotICAgKgotICAgKiBAZGVzY3JpcHRpb24KLSAgICogSWYgY2FsbGVkLCBhbGwgY2hhbmdl
cyB0byAkbG9jYXRpb24gZHVyaW5nIGN1cnJlbnQgYCRkaWdlc3RgIHdpbGwgYmUgcmVwbGFjaW5n
IGN1cnJlbnQgaGlzdG9yeQotICAgKiByZWNvcmQsIGluc3RlYWQgb2YgYWRkaW5nIG5ldyBvbmUu
Ci0gICAqLwotICByZXBsYWNlOiBmdW5jdGlvbigpIHsKLSAgICB0aGlzLiQkcmVwbGFjZSA9IHRy
dWU7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLX07Ci0KLUxvY2F0aW9uSGFzaGJhbmdVcmwucHJv
dG90eXBlID0gaW5oZXJpdChMb2NhdGlvblVybC5wcm90b3R5cGUpOwotCi1mdW5jdGlvbiBMb2Nh
dGlvbkhhc2hiYW5nSW5IdG1sNVVybCh1cmwsIGhhc2hQcmVmaXgsIGFwcEJhc2VVcmwsIGJhc2VF
eHRyYSkgewotICBMb2NhdGlvbkhhc2hiYW5nVXJsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0K
LQotICB0aGlzLiQkcmV3cml0ZUFwcFVybCA9IGZ1bmN0aW9uKGFic29sdXRlTGlua1VybCkgewot
ICAgIGlmIChhYnNvbHV0ZUxpbmtVcmwuaW5kZXhPZihhcHBCYXNlVXJsKSA9PSAwKSB7Ci0gICAg
ICByZXR1cm4gYXBwQmFzZVVybCArIGJhc2VFeHRyYSArICcjJyArIGhhc2hQcmVmaXggICsgYWJz
b2x1dGVMaW5rVXJsLnN1YnN0cihhcHBCYXNlVXJsLmxlbmd0aCk7Ci0gICAgfQotICB9Ci19Ci0K
LUxvY2F0aW9uSGFzaGJhbmdJbkh0bWw1VXJsLnByb3RvdHlwZSA9IGluaGVyaXQoTG9jYXRpb25I
YXNoYmFuZ1VybC5wcm90b3R5cGUpOwotCi1mdW5jdGlvbiBsb2NhdGlvbkdldHRlcihwcm9wZXJ0
eSkgewotICByZXR1cm4gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXNbcHJvcGVydHldOwot
ICB9OwotfQotCi0KLWZ1bmN0aW9uIGxvY2F0aW9uR2V0dGVyU2V0dGVyKHByb3BlcnR5LCBwcmVw
cm9jZXNzKSB7Ci0gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkgewotICAgIGlmIChpc1VuZGVmaW5l
ZCh2YWx1ZSkpCi0gICAgICByZXR1cm4gdGhpc1twcm9wZXJ0eV07Ci0KLSAgICB0aGlzW3Byb3Bl
cnR5XSA9IHByZXByb2Nlc3ModmFsdWUpOwotICAgIHRoaXMuJCRjb21wb3NlKCk7Ci0KLSAgICBy
ZXR1cm4gdGhpczsKLSAgfTsKLX0KLQotCi0vKioKLSAqIEBuZ2RvYyBvYmplY3QKLSAqIEBuYW1l
IG5nLiRsb2NhdGlvbgotICoKLSAqIEByZXF1aXJlcyAkYnJvd3NlcgotICogQHJlcXVpcmVzICRz
bmlmZmVyCi0gKiBAcmVxdWlyZXMgJHJvb3RFbGVtZW50Ci0gKgotICogQGRlc2NyaXB0aW9uCi0g
KiBUaGUgJGxvY2F0aW9uIHNlcnZpY2UgcGFyc2VzIHRoZSBVUkwgaW4gdGhlIGJyb3dzZXIgYWRk
cmVzcyBiYXIgKGJhc2VkIG9uIHRoZQotICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemls
bGEub3JnL2VuL3dpbmRvdy5sb2NhdGlvbiB3aW5kb3cubG9jYXRpb259KSBhbmQgbWFrZXMgdGhl
IFVSTAotICogYXZhaWxhYmxlIHRvIHlvdXIgYXBwbGljYXRpb24uIENoYW5nZXMgdG8gdGhlIFVS
TCBpbiB0aGUgYWRkcmVzcyBiYXIgYXJlIHJlZmxlY3RlZCBpbnRvCi0gKiAkbG9jYXRpb24gc2Vy
dmljZSBhbmQgY2hhbmdlcyB0byAkbG9jYXRpb24gYXJlIHJlZmxlY3RlZCBpbnRvIHRoZSBicm93
c2VyIGFkZHJlc3MgYmFyLgotICoKLSAqICoqVGhlICRsb2NhdGlvbiBzZXJ2aWNlOioqCi0gKgot
ICogLSBFeHBvc2VzIHRoZSBjdXJyZW50IFVSTCBpbiB0aGUgYnJvd3NlciBhZGRyZXNzIGJhciwg
c28geW91IGNhbgotICogICAtIFdhdGNoIGFuZCBvYnNlcnZlIHRoZSBVUkwuCi0gKiAgIC0gQ2hh
bmdlIHRoZSBVUkwuCi0gKiAtIFN5bmNocm9uaXplcyB0aGUgVVJMIHdpdGggdGhlIGJyb3dzZXIg
d2hlbiB0aGUgdXNlcgotICogICAtIENoYW5nZXMgdGhlIGFkZHJlc3MgYmFyLgotICogICAtIENs
aWNrcyB0aGUgYmFjayBvciBmb3J3YXJkIGJ1dHRvbiAob3IgY2xpY2tzIGEgSGlzdG9yeSBsaW5r
KS4KLSAqICAgLSBDbGlja3Mgb24gYSBsaW5rLgotICogLSBSZXByZXNlbnRzIHRoZSBVUkwgb2Jq
ZWN0IGFzIGEgc2V0IG9mIG1ldGhvZHMgKHByb3RvY29sLCBob3N0LCBwb3J0LCBwYXRoLCBzZWFy
Y2gsIGhhc2gpLgotICoKLSAqIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB7QGxpbmsgZ3VpZGUv
ZGV2X2d1aWRlLnNlcnZpY2VzLiRsb2NhdGlvbiBEZXZlbG9wZXIgR3VpZGU6IEFuZ3VsYXIKLSAq
IFNlcnZpY2VzOiBVc2luZyAkbG9jYXRpb259Ci0gKi8KLQotLyoqCi0gKiBAbmdkb2Mgb2JqZWN0
Ci0gKiBAbmFtZSBuZy4kbG9jYXRpb25Qcm92aWRlcgotICogQGRlc2NyaXB0aW9uCi0gKiBVc2Ug
dGhlIGAkbG9jYXRpb25Qcm92aWRlcmAgdG8gY29uZmlndXJlIGhvdyB0aGUgYXBwbGljYXRpb24g
ZGVlcCBsaW5raW5nIHBhdGhzIGFyZSBzdG9yZWQuCi0gKi8KLWZ1bmN0aW9uICRMb2NhdGlvblBy
b3ZpZGVyKCl7Ci0gIHZhciBoYXNoUHJlZml4ID0gJycsCi0gICAgICBodG1sNU1vZGUgPSBmYWxz
ZTsKLQotICAvKioKLSAgICogQG5nZG9jIHByb3BlcnR5Ci0gICAqIEBuYW1lIG5nLiRsb2NhdGlv
blByb3ZpZGVyI2hhc2hQcmVmaXgKLSAgICogQG1ldGhvZE9mIG5nLiRsb2NhdGlvblByb3ZpZGVy
Ci0gICAqIEBkZXNjcmlwdGlvbgotICAgKiBAcGFyYW0ge3N0cmluZz19IHByZWZpeCBQcmVmaXgg
Zm9yIGhhc2ggcGFydCAoY29udGFpbmluZyBwYXRoIGFuZCBzZWFyY2gpCi0gICAqIEByZXR1cm5z
IHsqfSBjdXJyZW50IHZhbHVlIGlmIHVzZWQgYXMgZ2V0dGVyIG9yIGl0c2VsZiAoY2hhaW5pbmcp
IGlmIHVzZWQgYXMgc2V0dGVyCi0gICAqLwotICB0aGlzLmhhc2hQcmVmaXggPSBmdW5jdGlvbihw
cmVmaXgpIHsKLSAgICBpZiAoaXNEZWZpbmVkKHByZWZpeCkpIHsKLSAgICAgIGhhc2hQcmVmaXgg
PSBwcmVmaXg7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJu
IGhhc2hQcmVmaXg7Ci0gICAgfQotICB9OwotCi0gIC8qKgotICAgKiBAbmdkb2MgcHJvcGVydHkK
LSAgICogQG5hbWUgbmcuJGxvY2F0aW9uUHJvdmlkZXIjaHRtbDVNb2RlCi0gICAqIEBtZXRob2RP
ZiBuZy4kbG9jYXRpb25Qcm92aWRlcgotICAgKiBAZGVzY3JpcHRpb24KLSAgICogQHBhcmFtIHtz
dHJpbmc9fSBtb2RlIFVzZSBIVE1MNSBzdHJhdGVneSBpZiBhdmFpbGFibGUuCi0gICAqIEByZXR1
cm5zIHsqfSBjdXJyZW50IHZhbHVlIGlmIHVzZWQgYXMgZ2V0dGVyIG9yIGl0c2VsZiAoY2hhaW5p
bmcpIGlmIHVzZWQgYXMgc2V0dGVyCi0gICAqLwotICB0aGlzLmh0bWw1TW9kZSA9IGZ1bmN0aW9u
KG1vZGUpIHsKLSAgICBpZiAoaXNEZWZpbmVkKG1vZGUpKSB7Ci0gICAgICBodG1sNU1vZGUgPSBt
b2RlOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBodG1s
NU1vZGU7Ci0gICAgfQotICB9OwotCi0gIHRoaXMuJGdldCA9IFsnJHJvb3RTY29wZScsICckYnJv
d3NlcicsICckc25pZmZlcicsICckcm9vdEVsZW1lbnQnLAotICAgICAgZnVuY3Rpb24oICRyb290
U2NvcGUsICAgJGJyb3dzZXIsICAgJHNuaWZmZXIsICAgJHJvb3RFbGVtZW50KSB7Ci0gICAgdmFy
ICRsb2NhdGlvbiwKLSAgICAgICAgYmFzZVBhdGgsCi0gICAgICAgIHBhdGhQcmVmaXgsCi0gICAg
ICAgIGluaXRVcmwgPSAkYnJvd3Nlci51cmwoKSwKLSAgICAgICAgaW5pdFVybFBhcnRzID0gbWF0
Y2hVcmwoaW5pdFVybCksCi0gICAgICAgIGFwcEJhc2VVcmw7Ci0KLSAgICBpZiAoaHRtbDVNb2Rl
KSB7Ci0gICAgICBiYXNlUGF0aCA9ICRicm93c2VyLmJhc2VIcmVmKCkgfHwgJy8nOwotICAgICAg
cGF0aFByZWZpeCA9IHBhdGhQcmVmaXhGcm9tQmFzZShiYXNlUGF0aCk7Ci0gICAgICBhcHBCYXNl
VXJsID0KLSAgICAgICAgICBjb21wb3NlUHJvdG9jb2xIb3N0UG9ydChpbml0VXJsUGFydHMucHJv
dG9jb2wsIGluaXRVcmxQYXJ0cy5ob3N0LCBpbml0VXJsUGFydHMucG9ydCkgKwotICAgICAgICAg
IHBhdGhQcmVmaXggKyAnLyc7Ci0KLSAgICAgIGlmICgkc25pZmZlci5oaXN0b3J5KSB7Ci0gICAg
ICAgICRsb2NhdGlvbiA9IG5ldyBMb2NhdGlvblVybCgKLSAgICAgICAgICBjb252ZXJ0VG9IdG1s
NVVybChpbml0VXJsLCBiYXNlUGF0aCwgaGFzaFByZWZpeCksCi0gICAgICAgICAgcGF0aFByZWZp
eCwgYXBwQmFzZVVybCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAkbG9jYXRpb24gPSBuZXcg
TG9jYXRpb25IYXNoYmFuZ0luSHRtbDVVcmwoCi0gICAgICAgICAgY29udmVydFRvSGFzaGJhbmdV
cmwoaW5pdFVybCwgYmFzZVBhdGgsIGhhc2hQcmVmaXgpLAotICAgICAgICAgIGhhc2hQcmVmaXgs
IGFwcEJhc2VVcmwsIGJhc2VQYXRoLnN1YnN0cihwYXRoUHJlZml4Lmxlbmd0aCArIDEpKTsKLSAg
ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgYXBwQmFzZVVybCA9Ci0gICAgICAgICAgY29tcG9z
ZVByb3RvY29sSG9zdFBvcnQoaW5pdFVybFBhcnRzLnByb3RvY29sLCBpbml0VXJsUGFydHMuaG9z
dCwgaW5pdFVybFBhcnRzLnBvcnQpICsKLSAgICAgICAgICAoaW5pdFVybFBhcnRzLnBhdGggfHwg
JycpICsKLSAgICAgICAgICAoaW5pdFVybFBhcnRzLnNlYXJjaCA/ICgnPycgKyBpbml0VXJsUGFy
dHMuc2VhcmNoKSA6ICcnKSArCi0gICAgICAgICAgJyMnICsgaGFzaFByZWZpeCArICcvJzsKLQot
ICAgICAgJGxvY2F0aW9uID0gbmV3IExvY2F0aW9uSGFzaGJhbmdVcmwoaW5pdFVybCwgaGFzaFBy
ZWZpeCwgYXBwQmFzZVVybCk7Ci0gICAgfQotCi0gICAgJHJvb3RFbGVtZW50LmJpbmQoJ2NsaWNr
JywgZnVuY3Rpb24oZXZlbnQpIHsKLSAgICAgIC8vIFRPRE8odm9qdGEpOiByZXdyaXRlIGxpbmsg
d2hlbiBvcGVuaW5nIGluIG5ldyB0YWIvd2luZG93IChpbiBsZWdhY3kgYnJvd3NlcikKLSAgICAg
IC8vIGN1cnJlbnRseSB3ZSBvcGVuIG5pY2UgdXJsIGxpbmsgYW5kIHJlZGlyZWN0IHRoZW4KLQot
ICAgICAgaWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC53aGljaCA9
PSAyKSByZXR1cm47Ci0KLSAgICAgIHZhciBlbG0gPSBqcUxpdGUoZXZlbnQudGFyZ2V0KTsKLQot
ICAgICAgLy8gdHJhdmVyc2UgdGhlIERPTSB1cCB0byBmaW5kIGZpcnN0IEEgdGFnCi0gICAgICB3
aGlsZSAobG93ZXJjYXNlKGVsbVswXS5ub2RlTmFtZSkgIT09ICdhJykgewotICAgICAgICAvLyBp
Z25vcmUgcmV3cml0aW5nIGlmIG5vIEEgdGFnIChyZWFjaGVkIHJvb3QgZWxlbWVudCwgb3Igbm8g
cGFyZW50IC0gcmVtb3ZlZCBmcm9tIGRvY3VtZW50KQotICAgICAgICBpZiAoZWxtWzBdID09PSAk
cm9vdEVsZW1lbnRbMF0gfHwgIShlbG0gPSBlbG0ucGFyZW50KCkpWzBdKSByZXR1cm47Ci0gICAg
ICB9Ci0KLSAgICAgIHZhciBhYnNIcmVmID0gZWxtLnByb3AoJ2hyZWYnKSwKLSAgICAgICAgICBy
ZXdyaXR0ZW5VcmwgPSAkbG9jYXRpb24uJCRyZXdyaXRlQXBwVXJsKGFic0hyZWYpOwotCi0gICAg
ICBpZiAoYWJzSHJlZiAmJiAhZWxtLmF0dHIoJ3RhcmdldCcpICYmIHJld3JpdHRlblVybCkgewot
ICAgICAgICAvLyB1cGRhdGUgbG9jYXRpb24gbWFudWFsbHkKLSAgICAgICAgJGxvY2F0aW9uLiQk
cGFyc2UocmV3cml0dGVuVXJsKTsKLSAgICAgICAgJHJvb3RTY29wZS4kYXBwbHkoKTsKLSAgICAg
ICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICAgICAgLy8gaGFjayB0byB3b3JrIGFyb3Vu
ZCBGRjYgYnVnIDY4NDIwOCB3aGVuIHNjZW5hcmlvIHJ1bm5lciBjbGlja3Mgb24gbGlua3MKLSAg
ICAgICAgd2luZG93LmFuZ3VsYXJbJ2ZmLTY4NDIwOC1wcmV2ZW50RGVmYXVsdCddID0gdHJ1ZTsK
LSAgICAgIH0KLSAgICB9KTsKLQotCi0gICAgLy8gcmV3cml0ZSBoYXNoYmFuZyB1cmwgPD4gaHRt
bDUgdXJsCi0gICAgaWYgKCRsb2NhdGlvbi5hYnNVcmwoKSAhPSBpbml0VXJsKSB7Ci0gICAgICAk
YnJvd3Nlci51cmwoJGxvY2F0aW9uLmFic1VybCgpLCB0cnVlKTsKLSAgICB9Ci0KLSAgICAvLyB1
cGRhdGUgJGxvY2F0aW9uIHdoZW4gJGJyb3dzZXIgdXJsIGNoYW5nZXMKLSAgICAkYnJvd3Nlci5v
blVybENoYW5nZShmdW5jdGlvbihuZXdVcmwpIHsKLSAgICAgIGlmICgkbG9jYXRpb24uYWJzVXJs
KCkgIT0gbmV3VXJsKSB7Ci0gICAgICAgIGlmICgkcm9vdFNjb3BlLiRicm9hZGNhc3QoJyRsb2Nh
dGlvbkNoYW5nZVN0YXJ0JywgbmV3VXJsLCAkbG9jYXRpb24uYWJzVXJsKCkpLmRlZmF1bHRQcmV2
ZW50ZWQpIHsKLSAgICAgICAgICAkYnJvd3Nlci51cmwoJGxvY2F0aW9uLmFic1VybCgpKTsKLSAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgJHJvb3RTY29wZS4kZXZhbEFzeW5j
KGZ1bmN0aW9uKCkgewotICAgICAgICAgIHZhciBvbGRVcmwgPSAkbG9jYXRpb24uYWJzVXJsKCk7
Ci0KLSAgICAgICAgICAkbG9jYXRpb24uJCRwYXJzZShuZXdVcmwpOwotICAgICAgICAgIGFmdGVy
TG9jYXRpb25DaGFuZ2Uob2xkVXJsKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIGlmICghJHJvb3RT
Y29wZS4kJHBoYXNlKSAkcm9vdFNjb3BlLiRkaWdlc3QoKTsKLSAgICAgIH0KLSAgICB9KTsKLQot
ICAgIC8vIHVwZGF0ZSBicm93c2VyCi0gICAgdmFyIGNoYW5nZUNvdW50ZXIgPSAwOwotICAgICRy
b290U2NvcGUuJHdhdGNoKGZ1bmN0aW9uICRsb2NhdGlvbldhdGNoKCkgewotICAgICAgdmFyIG9s
ZFVybCA9ICRicm93c2VyLnVybCgpOwotICAgICAgdmFyIGN1cnJlbnRSZXBsYWNlID0gJGxvY2F0
aW9uLiQkcmVwbGFjZTsKLQotICAgICAgaWYgKCFjaGFuZ2VDb3VudGVyIHx8IG9sZFVybCAhPSAk
bG9jYXRpb24uYWJzVXJsKCkpIHsKLSAgICAgICAgY2hhbmdlQ291bnRlcisrOwotICAgICAgICAk
cm9vdFNjb3BlLiRldmFsQXN5bmMoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgaWYgKCRyb290U2Nv
cGUuJGJyb2FkY2FzdCgnJGxvY2F0aW9uQ2hhbmdlU3RhcnQnLCAkbG9jYXRpb24uYWJzVXJsKCks
IG9sZFVybCkuCi0gICAgICAgICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQpIHsKLSAgICAgICAgICAg
ICRsb2NhdGlvbi4kJHBhcnNlKG9sZFVybCk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICRicm93c2VyLnVybCgkbG9jYXRpb24uYWJzVXJsKCksIGN1cnJlbnRSZXBsYWNlKTsKLSAg
ICAgICAgICAgIGFmdGVyTG9jYXRpb25DaGFuZ2Uob2xkVXJsKTsKLSAgICAgICAgICB9Ci0gICAg
ICAgIH0pOwotICAgICAgfQotICAgICAgJGxvY2F0aW9uLiQkcmVwbGFjZSA9IGZhbHNlOwotCi0g
ICAgICByZXR1cm4gY2hhbmdlQ291bnRlcjsKLSAgICB9KTsKLQotICAgIHJldHVybiAkbG9jYXRp
b247Ci0KLSAgICBmdW5jdGlvbiBhZnRlckxvY2F0aW9uQ2hhbmdlKG9sZFVybCkgewotICAgICAg
JHJvb3RTY29wZS4kYnJvYWRjYXN0KCckbG9jYXRpb25DaGFuZ2VTdWNjZXNzJywgJGxvY2F0aW9u
LmFic1VybCgpLCBvbGRVcmwpOwotICAgIH0KLX1dOwotfQotCi0vKioKLSAqIEBuZ2RvYyBvYmpl
Y3QKLSAqIEBuYW1lIG5nLiRsb2cKLSAqIEByZXF1aXJlcyAkd2luZG93Ci0gKgotICogQGRlc2Ny
aXB0aW9uCi0gKiBTaW1wbGUgc2VydmljZSBmb3IgbG9nZ2luZy4gRGVmYXVsdCBpbXBsZW1lbnRh
dGlvbiB3cml0ZXMgdGhlIG1lc3NhZ2UKLSAqIGludG8gdGhlIGJyb3dzZXIncyBjb25zb2xlIChp
ZiBwcmVzZW50KS4KLSAqCi0gKiBUaGUgbWFpbiBwdXJwb3NlIG9mIHRoaXMgc2VydmljZSBpcyB0
byBzaW1wbGlmeSBkZWJ1Z2dpbmcgYW5kIHRyb3VibGVzaG9vdGluZy4KLSAqCi0gKiBAZXhhbXBs
ZQotICAgPGV4YW1wbGU+Ci0gICAgIDxmaWxlIG5hbWU9InNjcmlwdC5qcyI+Ci0gICAgICAgZnVu
Y3Rpb24gTG9nQ3RybCgkc2NvcGUsICRsb2cpIHsKLSAgICAgICAgICRzY29wZS4kbG9nID0gJGxv
ZzsKLSAgICAgICAgICRzY29wZS5tZXNzYWdlID0gJ0hlbGxvIFdvcmxkISc7Ci0gICAgICAgfQot
ICAgICA8L2ZpbGU+Ci0gICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgotICAgICAgIDxkaXYg
bmctY29udHJvbGxlcj0iTG9nQ3RybCI+Ci0gICAgICAgICA8cD5SZWxvYWQgdGhpcyBwYWdlIHdp
dGggb3BlbiBjb25zb2xlLCBlbnRlciB0ZXh0IGFuZCBoaXQgdGhlIGxvZyBidXR0b24uLi48L3A+
Ci0gICAgICAgICBNZXNzYWdlOgotICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5nLW1vZGVs
PSJtZXNzYWdlIi8+Ci0gICAgICAgICA8YnV0dG9uIG5nLWNsaWNrPSIkbG9nLmxvZyhtZXNzYWdl
KSI+bG9nPC9idXR0b24+Ci0gICAgICAgICA8YnV0dG9uIG5nLWNsaWNrPSIkbG9nLndhcm4obWVz
c2FnZSkiPndhcm48L2J1dHRvbj4KLSAgICAgICAgIDxidXR0b24gbmctY2xpY2s9IiRsb2cuaW5m
byhtZXNzYWdlKSI+aW5mbzwvYnV0dG9uPgotICAgICAgICAgPGJ1dHRvbiBuZy1jbGljaz0iJGxv
Zy5lcnJvcihtZXNzYWdlKSI+ZXJyb3I8L2J1dHRvbj4KLSAgICAgICA8L2Rpdj4KLSAgICAgPC9m
aWxlPgotICAgPC9leGFtcGxlPgotICovCi0KLWZ1bmN0aW9uICRMb2dQcm92aWRlcigpewotICB0
aGlzLiRnZXQgPSBbJyR3aW5kb3cnLCBmdW5jdGlvbigkd2luZG93KXsKLSAgICByZXR1cm4gewot
ICAgICAgLyoqCi0gICAgICAgKiBAbmdkb2MgbWV0aG9kCi0gICAgICAgKiBAbmFtZSBuZy4kbG9n
I2xvZwotICAgICAgICogQG1ldGhvZE9mIG5nLiRsb2cKLSAgICAgICAqCi0gICAgICAgKiBAZGVz
Y3JpcHRpb24KLSAgICAgICAqIFdyaXRlIGEgbG9nIG1lc3NhZ2UKLSAgICAgICAqLwotICAgICAg
bG9nOiBjb25zb2xlTG9nKCdsb2cnKSwKLQotICAgICAgLyoqCi0gICAgICAgKiBAbmdkb2MgbWV0
aG9kCi0gICAgICAgKiBAbmFtZSBuZy4kbG9nI3dhcm4KLSAgICAgICAqIEBtZXRob2RPZiBuZy4k
bG9nCi0gICAgICAgKgotICAgICAgICogQGRlc2NyaXB0aW9uCi0gICAgICAgKiBXcml0ZSBhIHdh
cm5pbmcgbWVzc2FnZQotICAgICAgICovCi0gICAgICB3YXJuOiBjb25zb2xlTG9nKCd3YXJuJyks
Ci0KLSAgICAgIC8qKgotICAgICAgICogQG5nZG9jIG1ldGhvZAotICAgICAgICogQG5hbWUgbmcu
JGxvZyNpbmZvCi0gICAgICAgKiBAbWV0aG9kT2YgbmcuJGxvZwotICAgICAgICoKLSAgICAgICAq
IEBkZXNjcmlwdGlvbgotICAgICAgICogV3JpdGUgYW4gaW5mb3JtYXRpb24gbWVzc2FnZQotICAg
ICAgICovCi0gICAgICBpbmZvOiBjb25zb2xlTG9nKCdpbmZvJyksCi0KLSAgICAgIC8qKgotICAg
ICAgICogQG5nZG9jIG1ldGhvZAotICAgICAgICogQG5hbWUgbmcuJGxvZyNlcnJvcgotICAgICAg
ICogQG1ldGhvZE9mIG5nLiRsb2cKLSAgICAgICAqCi0gICAgICAgKiBAZGVzY3JpcHRpb24KLSAg
ICAgICAqIFdyaXRlIGFuIGVycm9yIG1lc3NhZ2UKLSAgICAgICAqLwotICAgICAgZXJyb3I6IGNv
bnNvbGVMb2coJ2Vycm9yJykKLSAgICB9OwotCi0gICAgZnVuY3Rpb24gZm9ybWF0RXJyb3IoYXJn
KSB7Ci0gICAgICBpZiAoYXJnIGluc3RhbmNlb2YgRXJyb3IpIHsKLSAgICAgICAgaWYgKGFyZy5z
dGFjaykgewotICAgICAgICAgIGFyZyA9IChhcmcubWVzc2FnZSAmJiBhcmcuc3RhY2suaW5kZXhP
ZihhcmcubWVzc2FnZSkgPT09IC0xKQotICAgICAgICAgICAgICA/ICdFcnJvcjogJyArIGFyZy5t
ZXNzYWdlICsgJ1xuJyArIGFyZy5zdGFjawotICAgICAgICAgICAgICA6IGFyZy5zdGFjazsKLSAg
ICAgICAgfSBlbHNlIGlmIChhcmcuc291cmNlVVJMKSB7Ci0gICAgICAgICAgYXJnID0gYXJnLm1l
c3NhZ2UgKyAnXG4nICsgYXJnLnNvdXJjZVVSTCArICc6JyArIGFyZy5saW5lOwotICAgICAgICB9
Ci0gICAgICB9Ci0gICAgICByZXR1cm4gYXJnOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGNvbnNv
bGVMb2codHlwZSkgewotICAgICAgdmFyIGNvbnNvbGUgPSAkd2luZG93LmNvbnNvbGUgfHwge30s
Ci0gICAgICAgICAgbG9nRm4gPSBjb25zb2xlW3R5cGVdIHx8IGNvbnNvbGUubG9nIHx8IG5vb3A7
Ci0KLSAgICAgIGlmIChsb2dGbi5hcHBseSkgewotICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgdmFyIGFyZ3MgPSBbXTsKLSAgICAgICAgICBmb3JFYWNoKGFyZ3VtZW50cywg
ZnVuY3Rpb24oYXJnKSB7Ci0gICAgICAgICAgICBhcmdzLnB1c2goZm9ybWF0RXJyb3IoYXJnKSk7
Ci0gICAgICAgICAgfSk7Ci0gICAgICAgICAgcmV0dXJuIGxvZ0ZuLmFwcGx5KGNvbnNvbGUsIGFy
Z3MpOwotICAgICAgICB9OwotICAgICAgfQotCi0gICAgICAvLyB3ZSBhcmUgSUUgd2hpY2ggZWl0
aGVyIGRvZXNuJ3QgaGF2ZSB3aW5kb3cuY29uc29sZSA9PiB0aGlzIGlzIG5vb3AgYW5kIHdlIGRv
IG5vdGhpbmcsCi0gICAgICAvLyBvciB3ZSBhcmUgSUUgd2hlcmUgY29uc29sZS5sb2cgZG9lc24n
dCBoYXZlIGFwcGx5IHNvIHdlIGxvZyBhdCBsZWFzdCBmaXJzdCAyIGFyZ3MKLSAgICAgIHJldHVy
biBmdW5jdGlvbihhcmcxLCBhcmcyKSB7Ci0gICAgICAgIGxvZ0ZuKGFyZzEsIGFyZzIpOwotICAg
ICAgfQotICAgIH0KLSAgfV07Ci19Ci0KLXZhciBPUEVSQVRPUlMgPSB7Ci0gICAgJ251bGwnOmZ1
bmN0aW9uKCl7cmV0dXJuIG51bGw7fSwKLSAgICAndHJ1ZSc6ZnVuY3Rpb24oKXtyZXR1cm4gdHJ1
ZTt9LAotICAgICdmYWxzZSc6ZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2U7fSwKLSAgICB1bmRlZmlu
ZWQ6bm9vcCwKLSAgICAnKyc6ZnVuY3Rpb24oc2VsZiwgbG9jYWxzLCBhLGIpewotICAgICAgYT1h
KHNlbGYsIGxvY2Fscyk7IGI9YihzZWxmLCBsb2NhbHMpOwotICAgICAgaWYgKGlzRGVmaW5lZChh
KSkgewotICAgICAgICBpZiAoaXNEZWZpbmVkKGIpKSB7Ci0gICAgICAgICAgcmV0dXJuIGEgKyBi
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBhOwotICAgICAgfQotICAgICAgcmV0dXJuIGlz
RGVmaW5lZChiKT9iOnVuZGVmaW5lZDt9LAotICAgICctJzpmdW5jdGlvbihzZWxmLCBsb2NhbHMs
IGEsYil7YT1hKHNlbGYsIGxvY2Fscyk7IGI9YihzZWxmLCBsb2NhbHMpOyByZXR1cm4gKGlzRGVm
aW5lZChhKT9hOjApLShpc0RlZmluZWQoYik/YjowKTt9LAotICAgICcqJzpmdW5jdGlvbihzZWxm
LCBsb2NhbHMsIGEsYil7cmV0dXJuIGEoc2VsZiwgbG9jYWxzKSpiKHNlbGYsIGxvY2Fscyk7fSwK
LSAgICAnLyc6ZnVuY3Rpb24oc2VsZiwgbG9jYWxzLCBhLGIpe3JldHVybiBhKHNlbGYsIGxvY2Fs
cykvYihzZWxmLCBsb2NhbHMpO30sCi0gICAgJyUnOmZ1bmN0aW9uKHNlbGYsIGxvY2FscywgYSxi
KXtyZXR1cm4gYShzZWxmLCBsb2NhbHMpJWIoc2VsZiwgbG9jYWxzKTt9LAotICAgICdeJzpmdW5j
dGlvbihzZWxmLCBsb2NhbHMsIGEsYil7cmV0dXJuIGEoc2VsZiwgbG9jYWxzKV5iKHNlbGYsIGxv
Y2Fscyk7fSwKLSAgICAnPSc6bm9vcCwKLSAgICAnPT0nOmZ1bmN0aW9uKHNlbGYsIGxvY2Fscywg
YSxiKXtyZXR1cm4gYShzZWxmLCBsb2NhbHMpPT1iKHNlbGYsIGxvY2Fscyk7fSwKLSAgICAnIT0n
OmZ1bmN0aW9uKHNlbGYsIGxvY2FscywgYSxiKXtyZXR1cm4gYShzZWxmLCBsb2NhbHMpIT1iKHNl
bGYsIGxvY2Fscyk7fSwKLSAgICAnPCc6ZnVuY3Rpb24oc2VsZiwgbG9jYWxzLCBhLGIpe3JldHVy
biBhKHNlbGYsIGxvY2Fscyk8YihzZWxmLCBsb2NhbHMpO30sCi0gICAgJz4nOmZ1bmN0aW9uKHNl
bGYsIGxvY2FscywgYSxiKXtyZXR1cm4gYShzZWxmLCBsb2NhbHMpPmIoc2VsZiwgbG9jYWxzKTt9
LAotICAgICc8PSc6ZnVuY3Rpb24oc2VsZiwgbG9jYWxzLCBhLGIpe3JldHVybiBhKHNlbGYsIGxv
Y2Fscyk8PWIoc2VsZiwgbG9jYWxzKTt9LAotICAgICc+PSc6ZnVuY3Rpb24oc2VsZiwgbG9jYWxz
LCBhLGIpe3JldHVybiBhKHNlbGYsIGxvY2Fscyk+PWIoc2VsZiwgbG9jYWxzKTt9LAotICAgICcm
Jic6ZnVuY3Rpb24oc2VsZiwgbG9jYWxzLCBhLGIpe3JldHVybiBhKHNlbGYsIGxvY2FscykmJmIo
c2VsZiwgbG9jYWxzKTt9LAotICAgICd8fCc6ZnVuY3Rpb24oc2VsZiwgbG9jYWxzLCBhLGIpe3Jl
dHVybiBhKHNlbGYsIGxvY2Fscyl8fGIoc2VsZiwgbG9jYWxzKTt9LAotICAgICcmJzpmdW5jdGlv
bihzZWxmLCBsb2NhbHMsIGEsYil7cmV0dXJuIGEoc2VsZiwgbG9jYWxzKSZiKHNlbGYsIGxvY2Fs
cyk7fSwKLS8vICAgICd8JzpmdW5jdGlvbihzZWxmLCBsb2NhbHMsIGEsYil7cmV0dXJuIGF8Yjt9
LAotICAgICd8JzpmdW5jdGlvbihzZWxmLCBsb2NhbHMsIGEsYil7cmV0dXJuIGIoc2VsZiwgbG9j
YWxzKShzZWxmLCBsb2NhbHMsIGEoc2VsZiwgbG9jYWxzKSk7fSwKLSAgICAnISc6ZnVuY3Rpb24o
c2VsZiwgbG9jYWxzLCBhKXtyZXR1cm4gIWEoc2VsZiwgbG9jYWxzKTt9Ci19OwotdmFyIEVTQ0FQ
RSA9IHsibiI6IlxuIiwgImYiOiJcZiIsICJyIjoiXHIiLCAidCI6Ilx0IiwgInYiOiJcdiIsICIn
IjoiJyIsICciJzonIid9OwotCi1mdW5jdGlvbiBsZXgodGV4dCwgY3NwKXsKLSAgdmFyIHRva2Vu
cyA9IFtdLAotICAgICAgdG9rZW4sCi0gICAgICBpbmRleCA9IDAsCi0gICAgICBqc29uID0gW10s
Ci0gICAgICBjaCwKLSAgICAgIGxhc3RDaCA9ICc6JzsgLy8gY2FuIHN0YXJ0IHJlZ2V4cAotCi0g
IHdoaWxlIChpbmRleCA8IHRleHQubGVuZ3RoKSB7Ci0gICAgY2ggPSB0ZXh0LmNoYXJBdChpbmRl
eCk7Ci0gICAgaWYgKGlzKCciXCcnKSkgewotICAgICAgcmVhZFN0cmluZyhjaCk7Ci0gICAgfSBl
bHNlIGlmIChpc051bWJlcihjaCkgfHwgaXMoJy4nKSAmJiBpc051bWJlcihwZWVrKCkpKSB7Ci0g
ICAgICByZWFkTnVtYmVyKCk7Ci0gICAgfSBlbHNlIGlmIChpc0lkZW50KGNoKSkgewotICAgICAg
cmVhZElkZW50KCk7Ci0gICAgICAvLyBpZGVudGlmaWVycyBjYW4gb25seSBiZSBpZiB0aGUgcHJl
Y2VkaW5nIGNoYXIgd2FzIGEgeyBvciAsCi0gICAgICBpZiAod2FzKCd7LCcpICYmIGpzb25bMF09
PSd7JyAmJgotICAgICAgICAgKHRva2VuPXRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdKSkgewotICAg
ICAgICB0b2tlbi5qc29uID0gdG9rZW4udGV4dC5pbmRleE9mKCcuJykgPT0gLTE7Ci0gICAgICB9
Ci0gICAgfSBlbHNlIGlmIChpcygnKCl7fVtdLiw7OicpKSB7Ci0gICAgICB0b2tlbnMucHVzaCh7
Ci0gICAgICAgIGluZGV4OmluZGV4LAotICAgICAgICB0ZXh0OmNoLAotICAgICAgICBqc29uOih3
YXMoJzpbLCcpICYmIGlzKCd7WycpKSB8fCBpcygnfV06LCcpCi0gICAgICB9KTsKLSAgICAgIGlm
IChpcygne1snKSkganNvbi51bnNoaWZ0KGNoKTsKLSAgICAgIGlmIChpcygnfV0nKSkganNvbi5z
aGlmdCgpOwotICAgICAgaW5kZXgrKzsKLSAgICB9IGVsc2UgaWYgKGlzV2hpdGVzcGFjZShjaCkp
IHsKLSAgICAgIGluZGV4Kys7Ci0gICAgICBjb250aW51ZTsKLSAgICB9IGVsc2UgewotICAgICAg
dmFyIGNoMiA9IGNoICsgcGVlaygpLAotICAgICAgICAgIGZuID0gT1BFUkFUT1JTW2NoXSwKLSAg
ICAgICAgICBmbjIgPSBPUEVSQVRPUlNbY2gyXTsKLSAgICAgIGlmIChmbjIpIHsKLSAgICAgICAg
dG9rZW5zLnB1c2goe2luZGV4OmluZGV4LCB0ZXh0OmNoMiwgZm46Zm4yfSk7Ci0gICAgICAgIGlu
ZGV4ICs9IDI7Ci0gICAgICB9IGVsc2UgaWYgKGZuKSB7Ci0gICAgICAgIHRva2Vucy5wdXNoKHtp
bmRleDppbmRleCwgdGV4dDpjaCwgZm46Zm4sIGpzb246IHdhcygnWyw6JykgJiYgaXMoJystJyl9
KTsKLSAgICAgICAgaW5kZXggKz0gMTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRocm93RXJy
b3IoIlVuZXhwZWN0ZWQgbmV4dCBjaGFyYWN0ZXIgIiwgaW5kZXgsIGluZGV4KzEpOwotICAgICAg
fQotICAgIH0KLSAgICBsYXN0Q2ggPSBjaDsKLSAgfQotICByZXR1cm4gdG9rZW5zOwotCi0gIGZ1
bmN0aW9uIGlzKGNoYXJzKSB7Ci0gICAgcmV0dXJuIGNoYXJzLmluZGV4T2YoY2gpICE9IC0xOwot
ICB9Ci0KLSAgZnVuY3Rpb24gd2FzKGNoYXJzKSB7Ci0gICAgcmV0dXJuIGNoYXJzLmluZGV4T2Yo
bGFzdENoKSAhPSAtMTsKLSAgfQotCi0gIGZ1bmN0aW9uIHBlZWsoKSB7Ci0gICAgcmV0dXJuIGlu
ZGV4ICsgMSA8IHRleHQubGVuZ3RoID8gdGV4dC5jaGFyQXQoaW5kZXggKyAxKSA6IGZhbHNlOwot
ICB9Ci0gIGZ1bmN0aW9uIGlzTnVtYmVyKGNoKSB7Ci0gICAgcmV0dXJuICcwJyA8PSBjaCAmJiBj
aCA8PSAnOSc7Ci0gIH0KLSAgZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKGNoKSB7Ci0gICAgcmV0dXJu
IGNoID09ICcgJyB8fCBjaCA9PSAnXHInIHx8IGNoID09ICdcdCcgfHwKLSAgICAgICAgICAgY2gg
PT0gJ1xuJyB8fCBjaCA9PSAnXHYnIHx8IGNoID09ICdcdTAwQTAnOyAvLyBJRSB0cmVhdHMgbm9u
LWJyZWFraW5nIHNwYWNlIGFzIFx1MDBBMAotICB9Ci0gIGZ1bmN0aW9uIGlzSWRlbnQoY2gpIHsK
LSAgICByZXR1cm4gJ2EnIDw9IGNoICYmIGNoIDw9ICd6JyB8fAotICAgICAgICAgICAnQScgPD0g
Y2ggJiYgY2ggPD0gJ1onIHx8Ci0gICAgICAgICAgICdfJyA9PSBjaCB8fCBjaCA9PSAnJCc7Ci0g
IH0KLSAgZnVuY3Rpb24gaXNFeHBPcGVyYXRvcihjaCkgewotICAgIHJldHVybiBjaCA9PSAnLScg
fHwgY2ggPT0gJysnIHx8IGlzTnVtYmVyKGNoKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHRocm93RXJy
b3IoZXJyb3IsIHN0YXJ0LCBlbmQpIHsKLSAgICBlbmQgPSBlbmQgfHwgaW5kZXg7Ci0gICAgdGhy
b3cgRXJyb3IoIkxleGVyIEVycm9yOiAiICsgZXJyb3IgKyAiIGF0IGNvbHVtbiIgKwotICAgICAg
ICAoaXNEZWZpbmVkKHN0YXJ0KQotICAgICAgICAgICAgPyAicyAiICsgc3RhcnQgKyAgIi0iICsg
aW5kZXggKyAiIFsiICsgdGV4dC5zdWJzdHJpbmcoc3RhcnQsIGVuZCkgKyAiXSIKLSAgICAgICAg
ICAgIDogIiAiICsgZW5kKSArCi0gICAgICAgICIgaW4gZXhwcmVzc2lvbiBbIiArIHRleHQgKyAi
XS4iKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHJlYWROdW1iZXIoKSB7Ci0gICAgdmFyIG51bWJlciA9
ICIiOwotICAgIHZhciBzdGFydCA9IGluZGV4OwotICAgIHdoaWxlIChpbmRleCA8IHRleHQubGVu
Z3RoKSB7Ci0gICAgICB2YXIgY2ggPSBsb3dlcmNhc2UodGV4dC5jaGFyQXQoaW5kZXgpKTsKLSAg
ICAgIGlmIChjaCA9PSAnLicgfHwgaXNOdW1iZXIoY2gpKSB7Ci0gICAgICAgIG51bWJlciArPSBj
aDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHZhciBwZWVrQ2ggPSBwZWVrKCk7Ci0gICAgICAg
IGlmIChjaCA9PSAnZScgJiYgaXNFeHBPcGVyYXRvcihwZWVrQ2gpKSB7Ci0gICAgICAgICAgbnVt
YmVyICs9IGNoOwotICAgICAgICB9IGVsc2UgaWYgKGlzRXhwT3BlcmF0b3IoY2gpICYmCi0gICAg
ICAgICAgICBwZWVrQ2ggJiYgaXNOdW1iZXIocGVla0NoKSAmJgotICAgICAgICAgICAgbnVtYmVy
LmNoYXJBdChudW1iZXIubGVuZ3RoIC0gMSkgPT0gJ2UnKSB7Ci0gICAgICAgICAgbnVtYmVyICs9
IGNoOwotICAgICAgICB9IGVsc2UgaWYgKGlzRXhwT3BlcmF0b3IoY2gpICYmCi0gICAgICAgICAg
ICAoIXBlZWtDaCB8fCAhaXNOdW1iZXIocGVla0NoKSkgJiYKLSAgICAgICAgICAgIG51bWJlci5j
aGFyQXQobnVtYmVyLmxlbmd0aCAtIDEpID09ICdlJykgewotICAgICAgICAgIHRocm93RXJyb3Io
J0ludmFsaWQgZXhwb25lbnQnKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgfQotICAgICAgaW5kZXgrKzsKLSAgICB9Ci0gICAgbnVtYmVyID0g
MSAqIG51bWJlcjsKLSAgICB0b2tlbnMucHVzaCh7aW5kZXg6c3RhcnQsIHRleHQ6bnVtYmVyLCBq
c29uOnRydWUsCi0gICAgICBmbjpmdW5jdGlvbigpIHtyZXR1cm4gbnVtYmVyO319KTsKLSAgfQot
ICBmdW5jdGlvbiByZWFkSWRlbnQoKSB7Ci0gICAgdmFyIGlkZW50ID0gIiIsCi0gICAgICAgIHN0
YXJ0ID0gaW5kZXgsCi0gICAgICAgIGxhc3REb3QsIHBlZWtJbmRleCwgbWV0aG9kTmFtZSwgY2g7
Ci0KLSAgICB3aGlsZSAoaW5kZXggPCB0ZXh0Lmxlbmd0aCkgewotICAgICAgY2ggPSB0ZXh0LmNo
YXJBdChpbmRleCk7Ci0gICAgICBpZiAoY2ggPT0gJy4nIHx8IGlzSWRlbnQoY2gpIHx8IGlzTnVt
YmVyKGNoKSkgewotICAgICAgICBpZiAoY2ggPT0gJy4nKSBsYXN0RG90ID0gaW5kZXg7Ci0gICAg
ICAgIGlkZW50ICs9IGNoOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9
Ci0gICAgICBpbmRleCsrOwotICAgIH0KLQotICAgIC8vY2hlY2sgaWYgdGhpcyBpcyBub3QgYSBt
ZXRob2QgaW52b2NhdGlvbiBhbmQgaWYgaXQgaXMgYmFjayBvdXQgdG8gbGFzdCBkb3QKLSAgICBp
ZiAobGFzdERvdCkgewotICAgICAgcGVla0luZGV4ID0gaW5kZXg7Ci0gICAgICB3aGlsZShwZWVr
SW5kZXggPCB0ZXh0Lmxlbmd0aCkgewotICAgICAgICBjaCA9IHRleHQuY2hhckF0KHBlZWtJbmRl
eCk7Ci0gICAgICAgIGlmIChjaCA9PSAnKCcpIHsKLSAgICAgICAgICBtZXRob2ROYW1lID0gaWRl
bnQuc3Vic3RyKGxhc3REb3QgLSBzdGFydCArIDEpOwotICAgICAgICAgIGlkZW50ID0gaWRlbnQu
c3Vic3RyKDAsIGxhc3REb3QgLSBzdGFydCk7Ci0gICAgICAgICAgaW5kZXggPSBwZWVrSW5kZXg7
Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYoaXNXaGl0ZXNwYWNlKGNo
KSkgewotICAgICAgICAgIHBlZWtJbmRleCsrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0KLSAgICB2YXIgdG9rZW4gPSB7
Ci0gICAgICBpbmRleDpzdGFydCwKLSAgICAgIHRleHQ6aWRlbnQKLSAgICB9OwotCi0gICAgaWYg
KE9QRVJBVE9SUy5oYXNPd25Qcm9wZXJ0eShpZGVudCkpIHsKLSAgICAgIHRva2VuLmZuID0gdG9r
ZW4uanNvbiA9IE9QRVJBVE9SU1tpZGVudF07Ci0gICAgfSBlbHNlIHsKLSAgICAgIHZhciBnZXR0
ZXIgPSBnZXR0ZXJGbihpZGVudCwgY3NwKTsKLSAgICAgIHRva2VuLmZuID0gZXh0ZW5kKGZ1bmN0
aW9uKHNlbGYsIGxvY2FscykgewotICAgICAgICByZXR1cm4gKGdldHRlcihzZWxmLCBsb2NhbHMp
KTsKLSAgICAgIH0sIHsKLSAgICAgICAgYXNzaWduOiBmdW5jdGlvbihzZWxmLCB2YWx1ZSkgewot
ICAgICAgICAgIHJldHVybiBzZXR0ZXIoc2VsZiwgaWRlbnQsIHZhbHVlKTsKLSAgICAgICAgfQot
ICAgICAgfSk7Ci0gICAgfQotCi0gICAgdG9rZW5zLnB1c2godG9rZW4pOwotCi0gICAgaWYgKG1l
dGhvZE5hbWUpIHsKLSAgICAgIHRva2Vucy5wdXNoKHsKLSAgICAgICAgaW5kZXg6bGFzdERvdCwK
LSAgICAgICAgdGV4dDogJy4nLAotICAgICAgICBqc29uOiBmYWxzZQotICAgICAgfSk7Ci0gICAg
ICB0b2tlbnMucHVzaCh7Ci0gICAgICAgIGluZGV4OiBsYXN0RG90ICsgMSwKLSAgICAgICAgdGV4
dDogbWV0aG9kTmFtZSwKLSAgICAgICAganNvbjogZmFsc2UKLSAgICAgIH0pOwotICAgIH0KLSAg
fQotCi0gIGZ1bmN0aW9uIHJlYWRTdHJpbmcocXVvdGUpIHsKLSAgICB2YXIgc3RhcnQgPSBpbmRl
eDsKLSAgICBpbmRleCsrOwotICAgIHZhciBzdHJpbmcgPSAiIjsKLSAgICB2YXIgcmF3U3RyaW5n
ID0gcXVvdGU7Ci0gICAgdmFyIGVzY2FwZSA9IGZhbHNlOwotICAgIHdoaWxlIChpbmRleCA8IHRl
eHQubGVuZ3RoKSB7Ci0gICAgICB2YXIgY2ggPSB0ZXh0LmNoYXJBdChpbmRleCk7Ci0gICAgICBy
YXdTdHJpbmcgKz0gY2g7Ci0gICAgICBpZiAoZXNjYXBlKSB7Ci0gICAgICAgIGlmIChjaCA9PSAn
dScpIHsKLSAgICAgICAgICB2YXIgaGV4ID0gdGV4dC5zdWJzdHJpbmcoaW5kZXggKyAxLCBpbmRl
eCArIDUpOwotICAgICAgICAgIGlmICghaGV4Lm1hdGNoKC9bXGRhLWZdezR9L2kpKQotICAgICAg
ICAgICAgdGhyb3dFcnJvciggIkludmFsaWQgdW5pY29kZSBlc2NhcGUgW1xcdSIgKyBoZXggKyAi
XSIpOwotICAgICAgICAgIGluZGV4ICs9IDQ7Ci0gICAgICAgICAgc3RyaW5nICs9IFN0cmluZy5m
cm9tQ2hhckNvZGUocGFyc2VJbnQoaGV4LCAxNikpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgIHZhciByZXAgPSBFU0NBUEVbY2hdOwotICAgICAgICAgIGlmIChyZXApIHsKLSAgICAgICAg
ICAgIHN0cmluZyArPSByZXA7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0cmlu
ZyArPSBjaDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZXNjYXBlID0gZmFsc2U7
Ci0gICAgICB9IGVsc2UgaWYgKGNoID09ICdcXCcpIHsKLSAgICAgICAgZXNjYXBlID0gdHJ1ZTsK
LSAgICAgIH0gZWxzZSBpZiAoY2ggPT0gcXVvdGUpIHsKLSAgICAgICAgaW5kZXgrKzsKLSAgICAg
ICAgdG9rZW5zLnB1c2goewotICAgICAgICAgIGluZGV4OnN0YXJ0LAotICAgICAgICAgIHRleHQ6
cmF3U3RyaW5nLAotICAgICAgICAgIHN0cmluZzpzdHJpbmcsCi0gICAgICAgICAganNvbjp0cnVl
LAotICAgICAgICAgIGZuOmZ1bmN0aW9uKCkgeyByZXR1cm4gc3RyaW5nOyB9Ci0gICAgICAgIH0p
OwotICAgICAgICByZXR1cm47Ci0gICAgICB9IGVsc2UgewotICAgICAgICBzdHJpbmcgKz0gY2g7
Ci0gICAgICB9Ci0gICAgICBpbmRleCsrOwotICAgIH0KLSAgICB0aHJvd0Vycm9yKCJVbnRlcm1p
bmF0ZWQgcXVvdGUiLCBzdGFydCk7Ci0gIH0KLX0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KLQotZnVuY3Rpb24gcGFyc2VyKHRleHQsIGpzb24sICRmaWx0ZXIs
IGNzcCl7Ci0gIHZhciBaRVJPID0gdmFsdWVGbigwKSwKLSAgICAgIHZhbHVlLAotICAgICAgdG9r
ZW5zID0gbGV4KHRleHQsIGNzcCksCi0gICAgICBhc3NpZ25tZW50ID0gX2Fzc2lnbm1lbnQsCi0g
ICAgICBmdW5jdGlvbkNhbGwgPSBfZnVuY3Rpb25DYWxsLAotICAgICAgZmllbGRBY2Nlc3MgPSBf
ZmllbGRBY2Nlc3MsCi0gICAgICBvYmplY3RJbmRleCA9IF9vYmplY3RJbmRleCwKLSAgICAgIGZp
bHRlckNoYWluID0gX2ZpbHRlckNoYWluOwotCi0gIGlmKGpzb24pewotICAgIC8vIFRoZSBleHRy
YSBsZXZlbCBvZiBhbGlhc2luZyBpcyBoZXJlLCBqdXN0IGluIGNhc2UgdGhlIGxleGVyIG1pc3Nl
cyBzb21ldGhpbmcsIHNvIHRoYXQKLSAgICAvLyB3ZSBwcmV2ZW50IGFueSBhY2NpZGVudGFsIGV4
ZWN1dGlvbiBpbiBKU09OLgotICAgIGFzc2lnbm1lbnQgPSBsb2dpY2FsT1I7Ci0gICAgZnVuY3Rp
b25DYWxsID0KLSAgICAgIGZpZWxkQWNjZXNzID0KLSAgICAgIG9iamVjdEluZGV4ID0KLSAgICAg
IGZpbHRlckNoYWluID0KLSAgICAgICAgZnVuY3Rpb24oKSB7IHRocm93RXJyb3IoImlzIG5vdCB2
YWxpZCBqc29uIiwge3RleHQ6dGV4dCwgaW5kZXg6MH0pOyB9OwotICAgIHZhbHVlID0gcHJpbWFy
eSgpOwotICB9IGVsc2UgewotICAgIHZhbHVlID0gc3RhdGVtZW50cygpOwotICB9Ci0gIGlmICh0
b2tlbnMubGVuZ3RoICE9PSAwKSB7Ci0gICAgdGhyb3dFcnJvcigiaXMgYW4gdW5leHBlY3RlZCB0
b2tlbiIsIHRva2Vuc1swXSk7Ci0gIH0KLSAgcmV0dXJuIHZhbHVlOwotCi0gIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gIGZ1bmN0aW9uIHRocm93RXJyb3IobXNnLCB0b2tl
bikgewotICAgIHRocm93IEVycm9yKCJTeW50YXggRXJyb3I6IFRva2VuICciICsgdG9rZW4udGV4
dCArCi0gICAgICAiJyAiICsgbXNnICsgIiBhdCBjb2x1bW4gIiArCi0gICAgICAodG9rZW4uaW5k
ZXggKyAxKSArICIgb2YgdGhlIGV4cHJlc3Npb24gWyIgKwotICAgICAgdGV4dCArICJdIHN0YXJ0
aW5nIGF0IFsiICsgdGV4dC5zdWJzdHJpbmcodG9rZW4uaW5kZXgpICsgIl0uIik7Ci0gIH0KLQot
ICBmdW5jdGlvbiBwZWVrVG9rZW4oKSB7Ci0gICAgaWYgKHRva2Vucy5sZW5ndGggPT09IDApCi0g
ICAgICB0aHJvdyBFcnJvcigiVW5leHBlY3RlZCBlbmQgb2YgZXhwcmVzc2lvbjogIiArIHRleHQp
OwotICAgIHJldHVybiB0b2tlbnNbMF07Ci0gIH0KLQotICBmdW5jdGlvbiBwZWVrKGUxLCBlMiwg
ZTMsIGU0KSB7Ci0gICAgaWYgKHRva2Vucy5sZW5ndGggPiAwKSB7Ci0gICAgICB2YXIgdG9rZW4g
PSB0b2tlbnNbMF07Ci0gICAgICB2YXIgdCA9IHRva2VuLnRleHQ7Ci0gICAgICBpZiAodD09ZTEg
fHwgdD09ZTIgfHwgdD09ZTMgfHwgdD09ZTQgfHwKLSAgICAgICAgICAoIWUxICYmICFlMiAmJiAh
ZTMgJiYgIWU0KSkgewotICAgICAgICByZXR1cm4gdG9rZW47Ci0gICAgICB9Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGZ1bmN0aW9uIGV4cGVjdChlMSwgZTIsIGUzLCBlNCl7
Ci0gICAgdmFyIHRva2VuID0gcGVlayhlMSwgZTIsIGUzLCBlNCk7Ci0gICAgaWYgKHRva2VuKSB7
Ci0gICAgICBpZiAoanNvbiAmJiAhdG9rZW4uanNvbikgewotICAgICAgICB0aHJvd0Vycm9yKCJp
cyBub3QgdmFsaWQganNvbiIsIHRva2VuKTsKLSAgICAgIH0KLSAgICAgIHRva2Vucy5zaGlmdCgp
OwotICAgICAgcmV0dXJuIHRva2VuOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQot
ICBmdW5jdGlvbiBjb25zdW1lKGUxKXsKLSAgICBpZiAoIWV4cGVjdChlMSkpIHsKLSAgICAgIHRo
cm93RXJyb3IoImlzIHVuZXhwZWN0ZWQsIGV4cGVjdGluZyBbIiArIGUxICsgIl0iLCBwZWVrKCkp
OwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHVuYXJ5Rm4oZm4sIHJpZ2h0KSB7Ci0gICAgcmV0
dXJuIGZ1bmN0aW9uKHNlbGYsIGxvY2FscykgewotICAgICAgcmV0dXJuIGZuKHNlbGYsIGxvY2Fs
cywgcmlnaHQpOwotICAgIH07Ci0gIH0KLQotICBmdW5jdGlvbiBiaW5hcnlGbihsZWZ0LCBmbiwg
cmlnaHQpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24oc2VsZiwgbG9jYWxzKSB7Ci0gICAgICByZXR1
cm4gZm4oc2VsZiwgbG9jYWxzLCBsZWZ0LCByaWdodCk7Ci0gICAgfTsKLSAgfQotCi0gIGZ1bmN0
aW9uIHN0YXRlbWVudHMoKSB7Ci0gICAgdmFyIHN0YXRlbWVudHMgPSBbXTsKLSAgICB3aGlsZSh0
cnVlKSB7Ci0gICAgICBpZiAodG9rZW5zLmxlbmd0aCA+IDAgJiYgIXBlZWsoJ30nLCAnKScsICc7
JywgJ10nKSkKLSAgICAgICAgc3RhdGVtZW50cy5wdXNoKGZpbHRlckNoYWluKCkpOwotICAgICAg
aWYgKCFleHBlY3QoJzsnKSkgewotICAgICAgICAvLyBvcHRpbWl6ZSBmb3IgdGhlIGNvbW1vbiBj
YXNlIHdoZXJlIHRoZXJlIGlzIG9ubHkgb25lIHN0YXRlbWVudC4KLSAgICAgICAgLy8gVE9ETyhz
aXplKTogbWF5YmUgd2Ugc2hvdWxkIG5vdCBzdXBwb3J0IG11bHRpcGxlIHN0YXRlbWVudHM/Ci0g
ICAgICAgIHJldHVybiBzdGF0ZW1lbnRzLmxlbmd0aCA9PSAxCi0gICAgICAgICAgPyBzdGF0ZW1l
bnRzWzBdCi0gICAgICAgICAgOiBmdW5jdGlvbihzZWxmLCBsb2NhbHMpewotICAgICAgICAgICAg
dmFyIHZhbHVlOwotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgc3RhdGVtZW50cy5s
ZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICB2YXIgc3RhdGVtZW50ID0gc3RhdGVtZW50c1tp
XTsKLSAgICAgICAgICAgICAgaWYgKHN0YXRlbWVudCkKLSAgICAgICAgICAgICAgICB2YWx1ZSA9
IHN0YXRlbWVudChzZWxmLCBsb2NhbHMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuIHZhbHVlOwotICAgICAgICAgIH07Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rp
b24gX2ZpbHRlckNoYWluKCkgewotICAgIHZhciBsZWZ0ID0gZXhwcmVzc2lvbigpOwotICAgIHZh
ciB0b2tlbjsKLSAgICB3aGlsZSh0cnVlKSB7Ci0gICAgICBpZiAoKHRva2VuID0gZXhwZWN0KCd8
JykpKSB7Ci0gICAgICAgIGxlZnQgPSBiaW5hcnlGbihsZWZ0LCB0b2tlbi5mbiwgZmlsdGVyKCkp
OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIGxlZnQ7Ci0gICAgICB9Ci0gICAgfQot
ICB9Ci0KLSAgZnVuY3Rpb24gZmlsdGVyKCkgewotICAgIHZhciB0b2tlbiA9IGV4cGVjdCgpOwot
ICAgIHZhciBmbiA9ICRmaWx0ZXIodG9rZW4udGV4dCk7Ci0gICAgdmFyIGFyZ3NGbiA9IFtdOwot
ICAgIHdoaWxlKHRydWUpIHsKLSAgICAgIGlmICgodG9rZW4gPSBleHBlY3QoJzonKSkpIHsKLSAg
ICAgICAgYXJnc0ZuLnB1c2goZXhwcmVzc2lvbigpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IHZhciBmbkludm9rZSA9IGZ1bmN0aW9uKHNlbGYsIGxvY2FscywgaW5wdXQpewotICAgICAgICAg
IHZhciBhcmdzID0gW2lucHV0XTsKLSAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBhcmdz
Rm4ubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGFyZ3MucHVzaChhcmdzRm5baV0oc2VsZiwg
bG9jYWxzKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBmbi5hcHBseShzZWxmLCBh
cmdzKTsKLSAgICAgICAgfTsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgICAg
IHJldHVybiBmbkludm9rZTsKLSAgICAgICAgfTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBm
dW5jdGlvbiBleHByZXNzaW9uKCkgewotICAgIHJldHVybiBhc3NpZ25tZW50KCk7Ci0gIH0KLQot
ICBmdW5jdGlvbiBfYXNzaWdubWVudCgpIHsKLSAgICB2YXIgbGVmdCA9IGxvZ2ljYWxPUigpOwot
ICAgIHZhciByaWdodDsKLSAgICB2YXIgdG9rZW47Ci0gICAgaWYgKCh0b2tlbiA9IGV4cGVjdCgn
PScpKSkgewotICAgICAgaWYgKCFsZWZ0LmFzc2lnbikgewotICAgICAgICB0aHJvd0Vycm9yKCJp
bXBsaWVzIGFzc2lnbm1lbnQgYnV0IFsiICsKLSAgICAgICAgICB0ZXh0LnN1YnN0cmluZygwLCB0
b2tlbi5pbmRleCkgKyAiXSBjYW4gbm90IGJlIGFzc2lnbmVkIHRvIiwgdG9rZW4pOwotICAgICAg
fQotICAgICAgcmlnaHQgPSBsb2dpY2FsT1IoKTsKLSAgICAgIHJldHVybiBmdW5jdGlvbihzY29w
ZSwgbG9jYWxzKXsKLSAgICAgICAgcmV0dXJuIGxlZnQuYXNzaWduKHNjb3BlLCByaWdodChzY29w
ZSwgbG9jYWxzKSwgbG9jYWxzKTsKLSAgICAgIH07Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVy
biBsZWZ0OwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGxvZ2ljYWxPUigpIHsKLSAgICB2YXIg
bGVmdCA9IGxvZ2ljYWxBTkQoKTsKLSAgICB2YXIgdG9rZW47Ci0gICAgd2hpbGUodHJ1ZSkgewot
ICAgICAgaWYgKCh0b2tlbiA9IGV4cGVjdCgnfHwnKSkpIHsKLSAgICAgICAgbGVmdCA9IGJpbmFy
eUZuKGxlZnQsIHRva2VuLmZuLCBsb2dpY2FsQU5EKCkpOwotICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgcmV0dXJuIGxlZnQ7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gbG9naWNh
bEFORCgpIHsKLSAgICB2YXIgbGVmdCA9IGVxdWFsaXR5KCk7Ci0gICAgdmFyIHRva2VuOwotICAg
IGlmICgodG9rZW4gPSBleHBlY3QoJyYmJykpKSB7Ci0gICAgICBsZWZ0ID0gYmluYXJ5Rm4obGVm
dCwgdG9rZW4uZm4sIGxvZ2ljYWxBTkQoKSk7Ci0gICAgfQotICAgIHJldHVybiBsZWZ0OwotICB9
Ci0KLSAgZnVuY3Rpb24gZXF1YWxpdHkoKSB7Ci0gICAgdmFyIGxlZnQgPSByZWxhdGlvbmFsKCk7
Ci0gICAgdmFyIHRva2VuOwotICAgIGlmICgodG9rZW4gPSBleHBlY3QoJz09JywnIT0nKSkpIHsK
LSAgICAgIGxlZnQgPSBiaW5hcnlGbihsZWZ0LCB0b2tlbi5mbiwgZXF1YWxpdHkoKSk7Ci0gICAg
fQotICAgIHJldHVybiBsZWZ0OwotICB9Ci0KLSAgZnVuY3Rpb24gcmVsYXRpb25hbCgpIHsKLSAg
ICB2YXIgbGVmdCA9IGFkZGl0aXZlKCk7Ci0gICAgdmFyIHRva2VuOwotICAgIGlmICgodG9rZW4g
PSBleHBlY3QoJzwnLCAnPicsICc8PScsICc+PScpKSkgewotICAgICAgbGVmdCA9IGJpbmFyeUZu
KGxlZnQsIHRva2VuLmZuLCByZWxhdGlvbmFsKCkpOwotICAgIH0KLSAgICByZXR1cm4gbGVmdDsK
LSAgfQotCi0gIGZ1bmN0aW9uIGFkZGl0aXZlKCkgewotICAgIHZhciBsZWZ0ID0gbXVsdGlwbGlj
YXRpdmUoKTsKLSAgICB2YXIgdG9rZW47Ci0gICAgd2hpbGUgKCh0b2tlbiA9IGV4cGVjdCgnKycs
Jy0nKSkpIHsKLSAgICAgIGxlZnQgPSBiaW5hcnlGbihsZWZ0LCB0b2tlbi5mbiwgbXVsdGlwbGlj
YXRpdmUoKSk7Ci0gICAgfQotICAgIHJldHVybiBsZWZ0OwotICB9Ci0KLSAgZnVuY3Rpb24gbXVs
dGlwbGljYXRpdmUoKSB7Ci0gICAgdmFyIGxlZnQgPSB1bmFyeSgpOwotICAgIHZhciB0b2tlbjsK
LSAgICB3aGlsZSAoKHRva2VuID0gZXhwZWN0KCcqJywnLycsJyUnKSkpIHsKLSAgICAgIGxlZnQg
PSBiaW5hcnlGbihsZWZ0LCB0b2tlbi5mbiwgdW5hcnkoKSk7Ci0gICAgfQotICAgIHJldHVybiBs
ZWZ0OwotICB9Ci0KLSAgZnVuY3Rpb24gdW5hcnkoKSB7Ci0gICAgdmFyIHRva2VuOwotICAgIGlm
IChleHBlY3QoJysnKSkgewotICAgICAgcmV0dXJuIHByaW1hcnkoKTsKLSAgICB9IGVsc2UgaWYg
KCh0b2tlbiA9IGV4cGVjdCgnLScpKSkgewotICAgICAgcmV0dXJuIGJpbmFyeUZuKFpFUk8sIHRv
a2VuLmZuLCB1bmFyeSgpKTsKLSAgICB9IGVsc2UgaWYgKCh0b2tlbiA9IGV4cGVjdCgnIScpKSkg
ewotICAgICAgcmV0dXJuIHVuYXJ5Rm4odG9rZW4uZm4sIHVuYXJ5KCkpOwotICAgIH0gZWxzZSB7
Ci0gICAgICByZXR1cm4gcHJpbWFyeSgpOwotICAgIH0KLSAgfQotCi0KLSAgZnVuY3Rpb24gcHJp
bWFyeSgpIHsKLSAgICB2YXIgcHJpbWFyeTsKLSAgICBpZiAoZXhwZWN0KCcoJykpIHsKLSAgICAg
IHByaW1hcnkgPSBmaWx0ZXJDaGFpbigpOwotICAgICAgY29uc3VtZSgnKScpOwotICAgIH0gZWxz
ZSBpZiAoZXhwZWN0KCdbJykpIHsKLSAgICAgIHByaW1hcnkgPSBhcnJheURlY2xhcmF0aW9uKCk7
Ci0gICAgfSBlbHNlIGlmIChleHBlY3QoJ3snKSkgewotICAgICAgcHJpbWFyeSA9IG9iamVjdCgp
OwotICAgIH0gZWxzZSB7Ci0gICAgICB2YXIgdG9rZW4gPSBleHBlY3QoKTsKLSAgICAgIHByaW1h
cnkgPSB0b2tlbi5mbjsKLSAgICAgIGlmICghcHJpbWFyeSkgewotICAgICAgICB0aHJvd0Vycm9y
KCJub3QgYSBwcmltYXJ5IGV4cHJlc3Npb24iLCB0b2tlbik7Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgdmFyIG5leHQsIGNvbnRleHQ7Ci0gICAgd2hpbGUgKChuZXh0ID0gZXhwZWN0KCcoJywgJ1sn
LCAnLicpKSkgewotICAgICAgaWYgKG5leHQudGV4dCA9PT0gJygnKSB7Ci0gICAgICAgIHByaW1h
cnkgPSBmdW5jdGlvbkNhbGwocHJpbWFyeSwgY29udGV4dCk7Ci0gICAgICAgIGNvbnRleHQgPSBu
dWxsOwotICAgICAgfSBlbHNlIGlmIChuZXh0LnRleHQgPT09ICdbJykgewotICAgICAgICBjb250
ZXh0ID0gcHJpbWFyeTsKLSAgICAgICAgcHJpbWFyeSA9IG9iamVjdEluZGV4KHByaW1hcnkpOwot
ICAgICAgfSBlbHNlIGlmIChuZXh0LnRleHQgPT09ICcuJykgewotICAgICAgICBjb250ZXh0ID0g
cHJpbWFyeTsKLSAgICAgICAgcHJpbWFyeSA9IGZpZWxkQWNjZXNzKHByaW1hcnkpOwotICAgICAg
fSBlbHNlIHsKLSAgICAgICAgdGhyb3dFcnJvcigiSU1QT1NTSUJMRSIpOwotICAgICAgfQotICAg
IH0KLSAgICByZXR1cm4gcHJpbWFyeTsKLSAgfQotCi0gIGZ1bmN0aW9uIF9maWVsZEFjY2Vzcyhv
YmplY3QpIHsKLSAgICB2YXIgZmllbGQgPSBleHBlY3QoKS50ZXh0OwotICAgIHZhciBnZXR0ZXIg
PSBnZXR0ZXJGbihmaWVsZCwgY3NwKTsKLSAgICByZXR1cm4gZXh0ZW5kKAotICAgICAgICBmdW5j
dGlvbihzY29wZSwgbG9jYWxzLCBzZWxmKSB7Ci0gICAgICAgICAgcmV0dXJuIGdldHRlcihzZWxm
IHx8IG9iamVjdChzY29wZSwgbG9jYWxzKSwgbG9jYWxzKTsKLSAgICAgICAgfSwKLSAgICAgICAg
ewotICAgICAgICAgIGFzc2lnbjpmdW5jdGlvbihzY29wZSwgdmFsdWUsIGxvY2FscykgewotICAg
ICAgICAgICAgcmV0dXJuIHNldHRlcihvYmplY3Qoc2NvcGUsIGxvY2FscyksIGZpZWxkLCB2YWx1
ZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgKTsKLSAgfQotCi0gIGZ1bmN0aW9uIF9v
YmplY3RJbmRleChvYmopIHsKLSAgICB2YXIgaW5kZXhGbiA9IGV4cHJlc3Npb24oKTsKLSAgICBj
b25zdW1lKCddJyk7Ci0gICAgcmV0dXJuIGV4dGVuZCgKLSAgICAgIGZ1bmN0aW9uKHNlbGYsIGxv
Y2Fscyl7Ci0gICAgICAgIHZhciBvID0gb2JqKHNlbGYsIGxvY2FscyksCi0gICAgICAgICAgICBp
ID0gaW5kZXhGbihzZWxmLCBsb2NhbHMpLAotICAgICAgICAgICAgdiwgcDsKLQotICAgICAgICBp
ZiAoIW8pIHJldHVybiB1bmRlZmluZWQ7Ci0gICAgICAgIHYgPSBvW2ldOwotICAgICAgICBpZiAo
diAmJiB2LnRoZW4pIHsKLSAgICAgICAgICBwID0gdjsKLSAgICAgICAgICBpZiAoISgnJCR2JyBp
biB2KSkgewotICAgICAgICAgICAgcC4kJHYgPSB1bmRlZmluZWQ7Ci0gICAgICAgICAgICBwLnRo
ZW4oZnVuY3Rpb24odmFsKSB7IHAuJCR2ID0gdmFsOyB9KTsKLSAgICAgICAgICB9Ci0gICAgICAg
ICAgdiA9IHYuJCR2OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2OwotICAgICAgfSwgewot
ICAgICAgICBhc3NpZ246ZnVuY3Rpb24oc2VsZiwgdmFsdWUsIGxvY2Fscyl7Ci0gICAgICAgICAg
cmV0dXJuIG9iaihzZWxmLCBsb2NhbHMpW2luZGV4Rm4oc2VsZiwgbG9jYWxzKV0gPSB2YWx1ZTsK
LSAgICAgICAgfQotICAgICAgfSk7Ci0gIH0KLQotICBmdW5jdGlvbiBfZnVuY3Rpb25DYWxsKGZu
LCBjb250ZXh0R2V0dGVyKSB7Ci0gICAgdmFyIGFyZ3NGbiA9IFtdOwotICAgIGlmIChwZWVrVG9r
ZW4oKS50ZXh0ICE9ICcpJykgewotICAgICAgZG8gewotICAgICAgICBhcmdzRm4ucHVzaChleHBy
ZXNzaW9uKCkpOwotICAgICAgfSB3aGlsZSAoZXhwZWN0KCcsJykpOwotICAgIH0KLSAgICBjb25z
dW1lKCcpJyk7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBsb2NhbHMpewotICAgICAgdmFy
IGFyZ3MgPSBbXSwKLSAgICAgICAgICBjb250ZXh0ID0gY29udGV4dEdldHRlciA/IGNvbnRleHRH
ZXR0ZXIoc2NvcGUsIGxvY2FscykgOiBzY29wZTsKLQotICAgICAgZm9yICggdmFyIGkgPSAwOyBp
IDwgYXJnc0ZuLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGFyZ3MucHVzaChhcmdzRm5baV0oc2Nv
cGUsIGxvY2FscykpOwotICAgICAgfQotICAgICAgdmFyIGZuUHRyID0gZm4oc2NvcGUsIGxvY2Fs
cywgY29udGV4dCkgfHwgbm9vcDsKLSAgICAgIC8vIElFIHN0dXBpZGl0eSEKLSAgICAgIHJldHVy
biBmblB0ci5hcHBseQotICAgICAgICAgID8gZm5QdHIuYXBwbHkoY29udGV4dCwgYXJncykKLSAg
ICAgICAgICA6IGZuUHRyKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3Nb
NF0pOwotICAgIH07Ci0gIH0KLQotICAvLyBUaGlzIGlzIHVzZWQgd2l0aCBqc29uIGFycmF5IGRl
Y2xhcmF0aW9uCi0gIGZ1bmN0aW9uIGFycmF5RGVjbGFyYXRpb24gKCkgewotICAgIHZhciBlbGVt
ZW50Rm5zID0gW107Ci0gICAgaWYgKHBlZWtUb2tlbigpLnRleHQgIT0gJ10nKSB7Ci0gICAgICBk
byB7Ci0gICAgICAgIGVsZW1lbnRGbnMucHVzaChleHByZXNzaW9uKCkpOwotICAgICAgfSB3aGls
ZSAoZXhwZWN0KCcsJykpOwotICAgIH0KLSAgICBjb25zdW1lKCddJyk7Ci0gICAgcmV0dXJuIGZ1
bmN0aW9uKHNlbGYsIGxvY2Fscyl7Ci0gICAgICB2YXIgYXJyYXkgPSBbXTsKLSAgICAgIGZvciAo
IHZhciBpID0gMDsgaSA8IGVsZW1lbnRGbnMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgYXJyYXku
cHVzaChlbGVtZW50Rm5zW2ldKHNlbGYsIGxvY2FscykpOwotICAgICAgfQotICAgICAgcmV0dXJu
IGFycmF5OwotICAgIH07Ci0gIH0KLQotICBmdW5jdGlvbiBvYmplY3QgKCkgewotICAgIHZhciBr
ZXlWYWx1ZXMgPSBbXTsKLSAgICBpZiAocGVla1Rva2VuKCkudGV4dCAhPSAnfScpIHsKLSAgICAg
IGRvIHsKLSAgICAgICAgdmFyIHRva2VuID0gZXhwZWN0KCksCi0gICAgICAgIGtleSA9IHRva2Vu
LnN0cmluZyB8fCB0b2tlbi50ZXh0OwotICAgICAgICBjb25zdW1lKCI6Iik7Ci0gICAgICAgIHZh
ciB2YWx1ZSA9IGV4cHJlc3Npb24oKTsKLSAgICAgICAga2V5VmFsdWVzLnB1c2goe2tleTprZXks
IHZhbHVlOnZhbHVlfSk7Ci0gICAgICB9IHdoaWxlIChleHBlY3QoJywnKSk7Ci0gICAgfQotICAg
IGNvbnN1bWUoJ30nKTsKLSAgICByZXR1cm4gZnVuY3Rpb24oc2VsZiwgbG9jYWxzKXsKLSAgICAg
IHZhciBvYmplY3QgPSB7fTsKLSAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGtleVZhbHVlcy5s
ZW5ndGg7IGkrKykgewotICAgICAgICB2YXIga2V5VmFsdWUgPSBrZXlWYWx1ZXNbaV07Ci0gICAg
ICAgIG9iamVjdFtrZXlWYWx1ZS5rZXldID0ga2V5VmFsdWUudmFsdWUoc2VsZiwgbG9jYWxzKTsK
LSAgICAgIH0KLSAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfTsKLSAgfQotfQotCi0vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gUGFyc2VyIGhl
bHBlciBmdW5jdGlvbnMKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCi0KLWZ1bmN0aW9uIHNldHRlcihvYmosIHBhdGgsIHNldFZhbHVlKSB7Ci0gIHZh
ciBlbGVtZW50ID0gcGF0aC5zcGxpdCgnLicpOwotICBmb3IgKHZhciBpID0gMDsgZWxlbWVudC5s
ZW5ndGggPiAxOyBpKyspIHsKLSAgICB2YXIga2V5ID0gZWxlbWVudC5zaGlmdCgpOwotICAgIHZh
ciBwcm9wZXJ0eU9iaiA9IG9ialtrZXldOwotICAgIGlmICghcHJvcGVydHlPYmopIHsKLSAgICAg
IHByb3BlcnR5T2JqID0ge307Ci0gICAgICBvYmpba2V5XSA9IHByb3BlcnR5T2JqOwotICAgIH0K
LSAgICBvYmogPSBwcm9wZXJ0eU9iajsKLSAgfQotICBvYmpbZWxlbWVudC5zaGlmdCgpXSA9IHNl
dFZhbHVlOwotICByZXR1cm4gc2V0VmFsdWU7Ci19Ci0KLS8qKgotICogUmV0dXJuIHRoZSB2YWx1
ZSBhY2Nlc2libGUgZnJvbSB0aGUgb2JqZWN0IGJ5IHBhdGguIEFueSB1bmRlZmluZWQgdHJhdmVy
c2FscyBhcmUgaWdub3JlZAotICogQHBhcmFtIHtPYmplY3R9IG9iaiBzdGFydGluZyBvYmplY3QK
LSAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIHBhdGggdG8gdHJhdmVyc2UKLSAqIEBwYXJhbSB7Ym9v
bGVhbj10cnVlfSBiaW5kRm5Ub1Njb3BlCi0gKiBAcmV0dXJucyB2YWx1ZSBhcyBhY2Nlc2JpbGUg
YnkgcGF0aAotICovCi0vL1RPRE8obWlza28pOiB0aGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHJl
bW92ZWQKLWZ1bmN0aW9uIGdldHRlcihvYmosIHBhdGgsIGJpbmRGblRvU2NvcGUpIHsKLSAgaWYg
KCFwYXRoKSByZXR1cm4gb2JqOwotICB2YXIga2V5cyA9IHBhdGguc3BsaXQoJy4nKTsKLSAgdmFy
IGtleTsKLSAgdmFyIGxhc3RJbnN0YW5jZSA9IG9iajsKLSAgdmFyIGxlbiA9IGtleXMubGVuZ3Ro
OwotCi0gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICBrZXkgPSBrZXlzW2ld
OwotICAgIGlmIChvYmopIHsKLSAgICAgIG9iaiA9IChsYXN0SW5zdGFuY2UgPSBvYmopW2tleV07
Ci0gICAgfQotICB9Ci0gIGlmICghYmluZEZuVG9TY29wZSAmJiBpc0Z1bmN0aW9uKG9iaikpIHsK
LSAgICByZXR1cm4gYmluZChsYXN0SW5zdGFuY2UsIG9iaik7Ci0gIH0KLSAgcmV0dXJuIG9iajsK
LX0KLQotdmFyIGdldHRlckZuQ2FjaGUgPSB7fTsKLQotLyoqCi0gKiBJbXBsZW1lbnRhdGlvbiBv
ZiB0aGUgIkJsYWNrIEhvbGUiIHZhcmlhbnQgZnJvbToKLSAqIC0gaHR0cDovL2pzcGVyZi5jb20v
YW5ndWxhcmpzLXBhcnNlLWdldHRlci80Ci0gKiAtIGh0dHA6Ly9qc3BlcmYuY29tL3BhdGgtZXZh
bHVhdGlvbi1zaW1wbGlmaWVkLzcKLSAqLwotZnVuY3Rpb24gY3NwU2FmZUdldHRlckZuKGtleTAs
IGtleTEsIGtleTIsIGtleTMsIGtleTQpIHsKLSAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBsb2Nh
bHMpIHsKLSAgICB2YXIgcGF0aFZhbCA9IChsb2NhbHMgJiYgbG9jYWxzLmhhc093blByb3BlcnR5
KGtleTApKSA/IGxvY2FscyA6IHNjb3BlLAotICAgICAgICBwcm9taXNlOwotCi0gICAgaWYgKHBh
dGhWYWwgPT09IG51bGwgfHwgcGF0aFZhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gcGF0aFZhbDsK
LQotICAgIHBhdGhWYWwgPSBwYXRoVmFsW2tleTBdOwotICAgIGlmIChwYXRoVmFsICYmIHBhdGhW
YWwudGhlbikgewotICAgICAgaWYgKCEoIiQkdiIgaW4gcGF0aFZhbCkpIHsKLSAgICAgICAgcHJv
bWlzZSA9IHBhdGhWYWw7Ci0gICAgICAgIHByb21pc2UuJCR2ID0gdW5kZWZpbmVkOwotICAgICAg
ICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsKSB7IHByb21pc2UuJCR2ID0gdmFsOyB9KTsKLSAg
ICAgIH0KLSAgICAgIHBhdGhWYWwgPSBwYXRoVmFsLiQkdjsKLSAgICB9Ci0gICAgaWYgKCFrZXkx
IHx8IHBhdGhWYWwgPT09IG51bGwgfHwgcGF0aFZhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gcGF0
aFZhbDsKLQotICAgIHBhdGhWYWwgPSBwYXRoVmFsW2tleTFdOwotICAgIGlmIChwYXRoVmFsICYm
IHBhdGhWYWwudGhlbikgewotICAgICAgaWYgKCEoIiQkdiIgaW4gcGF0aFZhbCkpIHsKLSAgICAg
ICAgcHJvbWlzZSA9IHBhdGhWYWw7Ci0gICAgICAgIHByb21pc2UuJCR2ID0gdW5kZWZpbmVkOwot
ICAgICAgICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsKSB7IHByb21pc2UuJCR2ID0gdmFsOyB9
KTsKLSAgICAgIH0KLSAgICAgIHBhdGhWYWwgPSBwYXRoVmFsLiQkdjsKLSAgICB9Ci0gICAgaWYg
KCFrZXkyIHx8IHBhdGhWYWwgPT09IG51bGwgfHwgcGF0aFZhbCA9PT0gdW5kZWZpbmVkKSByZXR1
cm4gcGF0aFZhbDsKLQotICAgIHBhdGhWYWwgPSBwYXRoVmFsW2tleTJdOwotICAgIGlmIChwYXRo
VmFsICYmIHBhdGhWYWwudGhlbikgewotICAgICAgaWYgKCEoIiQkdiIgaW4gcGF0aFZhbCkpIHsK
LSAgICAgICAgcHJvbWlzZSA9IHBhdGhWYWw7Ci0gICAgICAgIHByb21pc2UuJCR2ID0gdW5kZWZp
bmVkOwotICAgICAgICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsKSB7IHByb21pc2UuJCR2ID0g
dmFsOyB9KTsKLSAgICAgIH0KLSAgICAgIHBhdGhWYWwgPSBwYXRoVmFsLiQkdjsKLSAgICB9Ci0g
ICAgaWYgKCFrZXkzIHx8IHBhdGhWYWwgPT09IG51bGwgfHwgcGF0aFZhbCA9PT0gdW5kZWZpbmVk
KSByZXR1cm4gcGF0aFZhbDsKLQotICAgIHBhdGhWYWwgPSBwYXRoVmFsW2tleTNdOwotICAgIGlm
IChwYXRoVmFsICYmIHBhdGhWYWwudGhlbikgewotICAgICAgaWYgKCEoIiQkdiIgaW4gcGF0aFZh
bCkpIHsKLSAgICAgICAgcHJvbWlzZSA9IHBhdGhWYWw7Ci0gICAgICAgIHByb21pc2UuJCR2ID0g
dW5kZWZpbmVkOwotICAgICAgICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsKSB7IHByb21pc2Uu
JCR2ID0gdmFsOyB9KTsKLSAgICAgIH0KLSAgICAgIHBhdGhWYWwgPSBwYXRoVmFsLiQkdjsKLSAg
ICB9Ci0gICAgaWYgKCFrZXk0IHx8IHBhdGhWYWwgPT09IG51bGwgfHwgcGF0aFZhbCA9PT0gdW5k
ZWZpbmVkKSByZXR1cm4gcGF0aFZhbDsKLQotICAgIHBhdGhWYWwgPSBwYXRoVmFsW2tleTRdOwot
ICAgIGlmIChwYXRoVmFsICYmIHBhdGhWYWwudGhlbikgewotICAgICAgaWYgKCEoIiQkdiIgaW4g
cGF0aFZhbCkpIHsKLSAgICAgICAgcHJvbWlzZSA9IHBhdGhWYWw7Ci0gICAgICAgIHByb21pc2Uu
JCR2ID0gdW5kZWZpbmVkOwotICAgICAgICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsKSB7IHBy
b21pc2UuJCR2ID0gdmFsOyB9KTsKLSAgICAgIH0KLSAgICAgIHBhdGhWYWwgPSBwYXRoVmFsLiQk
djsKLSAgICB9Ci0gICAgcmV0dXJuIHBhdGhWYWw7Ci0gIH07Ci19Ci0KLWZ1bmN0aW9uIGdldHRl
ckZuKHBhdGgsIGNzcCkgewotICBpZiAoZ2V0dGVyRm5DYWNoZS5oYXNPd25Qcm9wZXJ0eShwYXRo
KSkgewotICAgIHJldHVybiBnZXR0ZXJGbkNhY2hlW3BhdGhdOwotICB9Ci0KLSAgdmFyIHBhdGhL
ZXlzID0gcGF0aC5zcGxpdCgnLicpLAotICAgICAgcGF0aEtleXNMZW5ndGggPSBwYXRoS2V5cy5s
ZW5ndGgsCi0gICAgICBmbjsKLQotICBpZiAoY3NwKSB7Ci0gICAgZm4gPSAocGF0aEtleXNMZW5n
dGggPCA2KQotICAgICAgICA/IGNzcFNhZmVHZXR0ZXJGbihwYXRoS2V5c1swXSwgcGF0aEtleXNb
MV0sIHBhdGhLZXlzWzJdLCBwYXRoS2V5c1szXSwgcGF0aEtleXNbNF0pCi0gICAgICAgIDogZnVu
Y3Rpb24oc2NvcGUsIGxvY2FscykgewotICAgICAgICAgIHZhciBpID0gMCwgdmFsOwotICAgICAg
ICAgIGRvIHsKLSAgICAgICAgICAgIHZhbCA9IGNzcFNhZmVHZXR0ZXJGbigKLSAgICAgICAgICAg
ICAgICAgICAgcGF0aEtleXNbaSsrXSwgcGF0aEtleXNbaSsrXSwgcGF0aEtleXNbaSsrXSwgcGF0
aEtleXNbaSsrXSwgcGF0aEtleXNbaSsrXQotICAgICAgICAgICAgICAgICAgKShzY29wZSwgbG9j
YWxzKTsKLQotICAgICAgICAgICAgbG9jYWxzID0gdW5kZWZpbmVkOyAvLyBjbGVhciBhZnRlciBm
aXJzdCBpdGVyYXRpb24KLSAgICAgICAgICAgIHNjb3BlID0gdmFsOwotICAgICAgICAgIH0gd2hp
bGUgKGkgPCBwYXRoS2V5c0xlbmd0aCk7Ci0gICAgICAgICAgcmV0dXJuIHZhbDsKLSAgICAgICAg
fQotICB9IGVsc2UgewotICAgIHZhciBjb2RlID0gJ3ZhciBsLCBmbiwgcDtcbic7Ci0gICAgZm9y
RWFjaChwYXRoS2V5cywgZnVuY3Rpb24oa2V5LCBpbmRleCkgewotICAgICAgY29kZSArPSAnaWYo
cyA9PT0gbnVsbCB8fCBzID09PSB1bmRlZmluZWQpIHJldHVybiBzO1xuJyArCi0gICAgICAgICAg
ICAgICdsPXM7XG4nICsKLSAgICAgICAgICAgICAgJ3M9JysgKGluZGV4Ci0gICAgICAgICAgICAg
ICAgICAgICAgLy8gd2Ugc2ltcGx5IGRlcmVmZXJlbmNlICdzJyBvbiBhbnkgLmRvdCBub3RhdGlv
bgotICAgICAgICAgICAgICAgICAgICAgID8gJ3MnCi0gICAgICAgICAgICAgICAgICAgICAgLy8g
YnV0IGlmIHdlIGFyZSBmaXJzdCB0aGVuIHdlIGNoZWNrIGxvY2FscyBmaXJzdCwgYW5kIGlmIHNv
IHJlYWQgaXQgZmlyc3QKLSAgICAgICAgICAgICAgICAgICAgICA6ICcoKGsmJmsuaGFzT3duUHJv
cGVydHkoIicgKyBrZXkgKyAnIikpP2s6cyknKSArICdbIicgKyBrZXkgKyAnIl0nICsgJztcbicg
KwotICAgICAgICAgICAgICAnaWYgKHMgJiYgcy50aGVuKSB7XG4nICsKLSAgICAgICAgICAgICAg
ICAnIGlmICghKCIkJHYiIGluIHMpKSB7XG4nICsKLSAgICAgICAgICAgICAgICAgICcgcD1zO1xu
JyArCi0gICAgICAgICAgICAgICAgICAnIHAuJCR2ID0gdW5kZWZpbmVkO1xuJyArCi0gICAgICAg
ICAgICAgICAgICAnIHAudGhlbihmdW5jdGlvbih2KSB7cC4kJHY9djt9KTtcbicgKwotICAgICAg
ICAgICAgICAgICAgJ31cbicgKwotICAgICAgICAgICAgICAgICcgcz1zLiQkdlxuJyArCi0gICAg
ICAgICAgICAgICd9XG4nOwotICAgIH0pOwotICAgIGNvZGUgKz0gJ3JldHVybiBzOyc7Ci0gICAg
Zm4gPSBGdW5jdGlvbigncycsICdrJywgY29kZSk7IC8vIHM9c2NvcGUsIGs9bG9jYWxzCi0gICAg
Zm4udG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGNvZGU7IH07Ci0gIH0KLQotICByZXR1
cm4gZ2V0dGVyRm5DYWNoZVtwYXRoXSA9IGZuOwotfQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwotCi0vKioKLSAqIEBuZ2RvYyBmdW5jdGlvbgotICogQG5hbWUgbmcuJHBh
cnNlCi0gKiBAZnVuY3Rpb24KLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqCi0gKiBDb252ZXJ0cyBB
bmd1bGFyIHtAbGluayBndWlkZS9leHByZXNzaW9uIGV4cHJlc3Npb259IGludG8gYSBmdW5jdGlv
bi4KLSAqCi0gKiA8cHJlPgotICogICB2YXIgZ2V0dGVyID0gJHBhcnNlKCd1c2VyLm5hbWUnKTsK
LSAqICAgdmFyIHNldHRlciA9IGdldHRlci5hc3NpZ247Ci0gKiAgIHZhciBjb250ZXh0ID0ge3Vz
ZXI6e25hbWU6J2FuZ3VsYXInfX07Ci0gKiAgIHZhciBsb2NhbHMgPSB7dXNlcjp7bmFtZTonbG9j
YWwnfX07Ci0gKgotICogICBleHBlY3QoZ2V0dGVyKGNvbnRleHQpKS50b0VxdWFsKCdhbmd1bGFy
Jyk7Ci0gKiAgIHNldHRlcihjb250ZXh0LCAnbmV3VmFsdWUnKTsKLSAqICAgZXhwZWN0KGNvbnRl
eHQudXNlci5uYW1lKS50b0VxdWFsKCduZXdWYWx1ZScpOwotICogICBleHBlY3QoZ2V0dGVyKGNv
bnRleHQsIGxvY2FscykpLnRvRXF1YWwoJ2xvY2FsJyk7Ci0gKiA8L3ByZT4KLSAqCi0gKgotICog
QHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gU3RyaW5nIGV4cHJlc3Npb24gdG8gY29tcGlsZS4K
LSAqIEByZXR1cm5zIHtmdW5jdGlvbihjb250ZXh0LCBsb2NhbHMpfSBhIGZ1bmN0aW9uIHdoaWNo
IHJlcHJlc2VudHMgdGhlIGNvbXBpbGVkIGV4cHJlc3Npb246Ci0gKgotICogICAgKiBgY29udGV4
dGAg4oCTIGB7b2JqZWN0fWAg4oCTIGFuIG9iamVjdCBhZ2FpbnN0IHdoaWNoIGFueSBleHByZXNz
aW9ucyBlbWJlZGRlZCBpbiB0aGUgc3RyaW5ncwotICogICAgICBhcmUgZXZhbHVhdGVkIGFnYWlu
c3QgKHRpcGljYWxseSBhIHNjb3BlIG9iamVjdCkuCi0gKiAgICAqIGBsb2NhbHNgIOKAkyBge29i
amVjdD19YCDigJMgbG9jYWwgdmFyaWFibGVzIGNvbnRleHQgb2JqZWN0LCB1c2VmdWwgZm9yIG92
ZXJyaWRpbmcgdmFsdWVzIGluCi0gKiAgICAgIGBjb250ZXh0YC4KLSAqCi0gKiAgICBUaGUgcmV0
dXJuIGZ1bmN0aW9uIGFsc28gaGFzIGFuIGBhc3NpZ25gIHByb3BlcnR5LCBpZiB0aGUgZXhwcmVz
c2lvbiBpcyBhc3NpZ25hYmxlLCB3aGljaAotICogICAgYWxsb3dzIG9uZSB0byBzZXQgdmFsdWVz
IHRvIGV4cHJlc3Npb25zLgotICoKLSAqLwotZnVuY3Rpb24gJFBhcnNlUHJvdmlkZXIoKSB7Ci0g
IHZhciBjYWNoZSA9IHt9OwotICB0aGlzLiRnZXQgPSBbJyRmaWx0ZXInLCAnJHNuaWZmZXInLCBm
dW5jdGlvbigkZmlsdGVyLCAkc25pZmZlcikgewotICAgIHJldHVybiBmdW5jdGlvbihleHApIHsK
LSAgICAgIHN3aXRjaCh0eXBlb2YgZXhwKSB7Ci0gICAgICAgIGNhc2UgJ3N0cmluZyc6Ci0gICAg
ICAgICAgcmV0dXJuIGNhY2hlLmhhc093blByb3BlcnR5KGV4cCkKLSAgICAgICAgICAgID8gY2Fj
aGVbZXhwXQotICAgICAgICAgICAgOiBjYWNoZVtleHBdID0gIHBhcnNlcihleHAsIGZhbHNlLCAk
ZmlsdGVyLCAkc25pZmZlci5jc3ApOwotICAgICAgICBjYXNlICdmdW5jdGlvbic6Ci0gICAgICAg
ICAgcmV0dXJuIGV4cDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICByZXR1cm4gbm9vcDsK
LSAgICAgIH0KLSAgICB9OwotICB9XTsKLX0KLQotLyoqCi0gKiBAbmdkb2Mgc2VydmljZQotICog
QG5hbWUgbmcuJHEKLSAqIEByZXF1aXJlcyAkcm9vdFNjb3BlCi0gKgotICogQGRlc2NyaXB0aW9u
Ci0gKiBBIHByb21pc2UvZGVmZXJyZWQgaW1wbGVtZW50YXRpb24gaW5zcGlyZWQgYnkgW0tyaXMg
S293YWwncyBRXShodHRwczovL2dpdGh1Yi5jb20va3Jpc2tvd2FsL3EpLgotICoKLSAqIFtUaGUg
Q29tbW9uSlMgUHJvbWlzZSBwcm9wb3NhbF0oaHR0cDovL3dpa2kuY29tbW9uanMub3JnL3dpa2kv
UHJvbWlzZXMpIGRlc2NyaWJlcyBhIHByb21pc2UgYXMgYW4KLSAqIGludGVyZmFjZSBmb3IgaW50
ZXJhY3Rpbmcgd2l0aCBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSByZXN1bHQgb2YgYW4g
YWN0aW9uIHRoYXQgaXMKLSAqIHBlcmZvcm1lZCBhc3luY2hyb25vdXNseSwgYW5kIG1heSBvciBt
YXkgbm90IGJlIGZpbmlzaGVkIGF0IGFueSBnaXZlbiBwb2ludCBpbiB0aW1lLgotICoKLSAqIEZy
b20gdGhlIHBlcnNwZWN0aXZlIG9mIGRlYWxpbmcgd2l0aCBlcnJvciBoYW5kbGluZywgZGVmZXJy
ZWQgYW5kIHByb21pc2UgQVBJcyBhcmUgdG8KLSAqIGFzeW5jaHJvbm91cyBwcm9ncmFtbWluZyB3
aGF0IGB0cnlgLCBgY2F0Y2hgIGFuZCBgdGhyb3dgIGtleXdvcmRzIGFyZSB0byBzeW5jaHJvbm91
cyBwcm9ncmFtbWluZy4KLSAqCi0gKiA8cHJlPgotICogICAvLyBmb3IgdGhlIHB1cnBvc2Ugb2Yg
dGhpcyBleGFtcGxlIGxldCdzIGFzc3VtZSB0aGF0IHZhcmlhYmxlcyBgJHFgIGFuZCBgc2NvcGVg
IGFyZQotICogICAvLyBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgbGV4aWNhbCBzY29wZSAodGhl
eSBjb3VsZCBoYXZlIGJlZW4gaW5qZWN0ZWQgb3IgcGFzc2VkIGluKS4KLSAqCi0gKiAgIGZ1bmN0
aW9uIGFzeW5jR3JlZXQobmFtZSkgewotICogICAgIHZhciBkZWZlcnJlZCA9ICRxLmRlZmVyKCk7
Ci0gKgotICogICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gKiAgICAgICAvLyBzaW5jZSB0
aGlzIGZuIGV4ZWN1dGVzIGFzeW5jIGluIGEgZnV0dXJlIHR1cm4gb2YgdGhlIGV2ZW50IGxvb3As
IHdlIG5lZWQgdG8gd3JhcAotICogICAgICAgLy8gb3VyIGNvZGUgaW50byBhbiAkYXBwbHkgY2Fs
bCBzbyB0aGF0IHRoZSBtb2RlbCBjaGFuZ2VzIGFyZSBwcm9wZXJseSBvYnNlcnZlZC4KLSAqICAg
ICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbigpIHsKLSAqICAgICAgICAgaWYgKG9rVG9HcmVldChu
YW1lKSkgewotICogICAgICAgICAgIGRlZmVycmVkLnJlc29sdmUoJ0hlbGxvLCAnICsgbmFtZSAr
ICchJyk7Ci0gKiAgICAgICAgIH0gZWxzZSB7Ci0gKiAgICAgICAgICAgZGVmZXJyZWQucmVqZWN0
KCdHcmVldGluZyAnICsgbmFtZSArICcgaXMgbm90IGFsbG93ZWQuJyk7Ci0gKiAgICAgICAgIH0K
LSAqICAgICAgIH0pOwotICogICAgIH0sIDEwMDApOwotICoKLSAqICAgICByZXR1cm4gZGVmZXJy
ZWQucHJvbWlzZTsKLSAqICAgfQotICoKLSAqICAgdmFyIHByb21pc2UgPSBhc3luY0dyZWV0KCdS
b2JpbiBIb29kJyk7Ci0gKiAgIHByb21pc2UudGhlbihmdW5jdGlvbihncmVldGluZykgewotICog
ICAgIGFsZXJ0KCdTdWNjZXNzOiAnICsgZ3JlZXRpbmcpOwotICogICB9LCBmdW5jdGlvbihyZWFz
b24pIHsKLSAqICAgICBhbGVydCgnRmFpbGVkOiAnICsgcmVhc29uKTsKLSAqICAgfSk7Ci0gKiA8
L3ByZT4KLSAqCi0gKiBBdCBmaXJzdCBpdCBtaWdodCBub3QgYmUgb2J2aW91cyB3aHkgdGhpcyBl
eHRyYSBjb21wbGV4aXR5IGlzIHdvcnRoIHRoZSB0cm91YmxlLiBUaGUgcGF5b2ZmCi0gKiBjb21l
cyBpbiB0aGUgd2F5IG9mCi0gKiBbZ3VhcmFudGVlcyB0aGF0IHByb21pc2UgYW5kIGRlZmVycmVk
IEFQSXMgbWFrZV0oaHR0cHM6Ly9naXRodWIuY29tL2tyaXNrb3dhbC91bmNvbW1vbmpzL2Jsb2Iv
bWFzdGVyL3Byb21pc2VzL3NwZWNpZmljYXRpb24ubWQpLgotICoKLSAqIEFkZGl0aW9uYWxseSB0
aGUgcHJvbWlzZSBhcGkgYWxsb3dzIGZvciBjb21wb3NpdGlvbiB0aGF0IGlzIHZlcnkgaGFyZCB0
byBkbyB3aXRoIHRoZQotICogdHJhZGl0aW9uYWwgY2FsbGJhY2sgKFtDUFNdKGh0dHA6Ly9lbi53
aWtpcGVkaWEub3JnL3dpa2kvQ29udGludWF0aW9uLXBhc3Npbmdfc3R5bGUpKSBhcHByb2FjaC4K
LSAqIEZvciBtb3JlIG9uIHRoaXMgcGxlYXNlIHNlZSB0aGUgW1EgZG9jdW1lbnRhdGlvbl0oaHR0
cHM6Ly9naXRodWIuY29tL2tyaXNrb3dhbC9xKSBlc3BlY2lhbGx5IHRoZQotICogc2VjdGlvbiBv
biBzZXJpYWwgb3IgcGFyYWxsZWwgam9pbmluZyBvZiBwcm9taXNlcy4KLSAqCi0gKgotICogIyBU
aGUgRGVmZXJyZWQgQVBJCi0gKgotICogQSBuZXcgaW5zdGFuY2Ugb2YgZGVmZXJyZWQgaXMgY29u
c3RydWN0ZWQgYnkgY2FsbGluZyBgJHEuZGVmZXIoKWAuCi0gKgotICogVGhlIHB1cnBvc2Ugb2Yg
dGhlIGRlZmVycmVkIG9iamVjdCBpcyB0byBleHBvc2UgdGhlIGFzc29jaWF0ZWQgUHJvbWlzZSBp
bnN0YW5jZSBhcyB3ZWxsIGFzIEFQSXMKLSAqIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHNpZ25hbGlu
ZyB0aGUgc3VjY2Vzc2Z1bCBvciB1bnN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvZiB0aGUgdGFzay4K
LSAqCi0gKiAqKk1ldGhvZHMqKgotICoKLSAqIC0gYHJlc29sdmUodmFsdWUpYCDigJMgcmVzb2x2
ZXMgdGhlIGRlcml2ZWQgcHJvbWlzZSB3aXRoIHRoZSBgdmFsdWVgLiBJZiB0aGUgdmFsdWUgaXMg
YSByZWplY3Rpb24KLSAqICAgY29uc3RydWN0ZWQgdmlhIGAkcS5yZWplY3RgLCB0aGUgcHJvbWlz
ZSB3aWxsIGJlIHJlamVjdGVkIGluc3RlYWQuCi0gKiAtIGByZWplY3QocmVhc29uKWAg4oCTIHJl
amVjdHMgdGhlIGRlcml2ZWQgcHJvbWlzZSB3aXRoIHRoZSBgcmVhc29uYC4gVGhpcyBpcyBlcXVp
dmFsZW50IHRvCi0gKiAgIHJlc29sdmluZyBpdCB3aXRoIGEgcmVqZWN0aW9uIGNvbnN0cnVjdGVk
IHZpYSBgJHEucmVqZWN0YC4KLSAqCi0gKiAqKlByb3BlcnRpZXMqKgotICoKLSAqIC0gcHJvbWlz
ZSDigJMgYHtQcm9taXNlfWAg4oCTIHByb21pc2Ugb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlz
IGRlZmVycmVkLgotICoKLSAqCi0gKiAjIFRoZSBQcm9taXNlIEFQSQotICoKLSAqIEEgbmV3IHBy
b21pc2UgaW5zdGFuY2UgaXMgY3JlYXRlZCB3aGVuIGEgZGVmZXJyZWQgaW5zdGFuY2UgaXMgY3Jl
YXRlZCBhbmQgY2FuIGJlIHJldHJpZXZlZCBieQotICogY2FsbGluZyBgZGVmZXJyZWQucHJvbWlz
ZWAuCi0gKgotICogVGhlIHB1cnBvc2Ugb2YgdGhlIHByb21pc2Ugb2JqZWN0IGlzIHRvIGFsbG93
IGZvciBpbnRlcmVzdGVkIHBhcnRpZXMgdG8gZ2V0IGFjY2VzcyB0byB0aGUgcmVzdWx0Ci0gKiBv
ZiB0aGUgZGVmZXJyZWQgdGFzayB3aGVuIGl0IGNvbXBsZXRlcy4KLSAqCi0gKiAqKk1ldGhvZHMq
KgotICoKLSAqIC0gYHRoZW4oc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKWAg4oCTIHJl
Z2FyZGxlc3Mgb2Ygd2hlbiB0aGUgcHJvbWlzZSB3YXMgb3Igd2lsbCBiZSByZXNvbHZlZAotICog
ICBvciByZWplY3RlZCBjYWxscyBvbmUgb2YgdGhlIHN1Y2Nlc3Mgb3IgZXJyb3IgY2FsbGJhY2tz
IGFzeW5jaHJvbm91c2x5IGFzIHNvb24gYXMgdGhlIHJlc3VsdAotICogICBpcyBhdmFpbGFibGUu
IFRoZSBjYWxsYmFja3MgYXJlIGNhbGxlZCB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50IHRoZSByZXN1
bHQgb3IgcmVqZWN0aW9uIHJlYXNvbi4KLSAqCi0gKiAgIFRoaXMgbWV0aG9kICpyZXR1cm5zIGEg
bmV3IHByb21pc2UqIHdoaWNoIGlzIHJlc29sdmVkIG9yIHJlamVjdGVkIHZpYSB0aGUgcmV0dXJu
IHZhbHVlIG9mIHRoZQotICogICBgc3VjY2Vzc0NhbGxiYWNrYCBvciBgZXJyb3JDYWxsYmFja2Au
Ci0gKgotICoKLSAqICMgQ2hhaW5pbmcgcHJvbWlzZXMKLSAqCi0gKiBCZWNhdXNlIGNhbGxpbmcg
YHRoZW5gIGFwaSBvZiBhIHByb21pc2UgcmV0dXJucyBhIG5ldyBkZXJpdmVkIHByb21pc2UsIGl0
IGlzIGVhc2lseSBwb3NzaWJsZQotICogdG8gY3JlYXRlIGEgY2hhaW4gb2YgcHJvbWlzZXM6Ci0g
KgotICogPHByZT4KLSAqICAgcHJvbWlzZUIgPSBwcm9taXNlQS50aGVuKGZ1bmN0aW9uKHJlc3Vs
dCkgewotICogICAgIHJldHVybiByZXN1bHQgKyAxOwotICogICB9KTsKLSAqCi0gKiAgIC8vIHBy
b21pc2VCIHdpbGwgYmUgcmVzb2x2ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgcHJvbWlzZUEgaXMgcmVz
b2x2ZWQgYW5kIGl0cyB2YWx1ZSB3aWxsIGJlCi0gKiAgIC8vIHRoZSByZXN1bHQgb2YgcHJvbWlz
ZUEgaW5jcmVtZW50ZWQgYnkgMQotICogPC9wcmU+Ci0gKgotICogSXQgaXMgcG9zc2libGUgdG8g
Y3JlYXRlIGNoYWlucyBvZiBhbnkgbGVuZ3RoIGFuZCBzaW5jZSBhIHByb21pc2UgY2FuIGJlIHJl
c29sdmVkIHdpdGggYW5vdGhlcgotICogcHJvbWlzZSAod2hpY2ggd2lsbCBkZWZlciBpdHMgcmVz
b2x1dGlvbiBmdXJ0aGVyKSwgaXQgaXMgcG9zc2libGUgdG8gcGF1c2UvZGVmZXIgcmVzb2x1dGlv
biBvZgotICogdGhlIHByb21pc2VzIGF0IGFueSBwb2ludCBpbiB0aGUgY2hhaW4uIFRoaXMgbWFr
ZXMgaXQgcG9zc2libGUgdG8gaW1wbGVtZW50IHBvd2VyZnVsIGFwaXMgbGlrZQotICogJGh0dHAn
cyByZXNwb25zZSBpbnRlcmNlcHRvcnMuCi0gKgotICoKLSAqICMgRGlmZmVyZW5jZXMgYmV0d2Vl
biBLcmlzIEtvd2FsJ3MgUSBhbmQgJHEKLSAqCi0gKiAgVGhlcmUgYXJlIHRocmVlIG1haW4gZGlm
ZmVyZW5jZXM6Ci0gKgotICogLSAkcSBpcyBpbnRlZ3JhdGVkIHdpdGggdGhlIHtAbGluayBuZy4k
cm9vdFNjb3BlLlNjb3BlfSBTY29wZSBtb2RlbCBvYnNlcnZhdGlvbgotICogICBtZWNoYW5pc20g
aW4gYW5ndWxhciwgd2hpY2ggbWVhbnMgZmFzdGVyIHByb3BhZ2F0aW9uIG9mIHJlc29sdXRpb24g
b3IgcmVqZWN0aW9uIGludG8geW91cgotICogICBtb2RlbHMgYW5kIGF2b2lkaW5nIHVubmVjZXNz
YXJ5IGJyb3dzZXIgcmVwYWludHMsIHdoaWNoIHdvdWxkIHJlc3VsdCBpbiBmbGlja2VyaW5nIFVJ
LgotICogLSAkcSBwcm9taXNlcyBhcmUgcmVjb2duaXplZCBieSB0aGUgdGVtcGxhdGluZyBlbmdp
bmUgaW4gYW5ndWxhciwgd2hpY2ggbWVhbnMgdGhhdCBpbiB0ZW1wbGF0ZXMKLSAqICAgeW91IGNh
biB0cmVhdCBwcm9taXNlcyBhdHRhY2hlZCB0byBhIHNjb3BlIGFzIGlmIHRoZXkgd2VyZSB0aGUg
cmVzdWx0aW5nIHZhbHVlcy4KLSAqIC0gUSBoYXMgbWFueSBtb3JlIGZlYXR1cmVzIHRoYW4gJHEs
IGJ1dCB0aGF0IGNvbWVzIGF0IGEgY29zdCBvZiBieXRlcy4gJHEgaXMgdGlueSwgYnV0IGNvbnRh
aW5zCi0gKiAgIGFsbCB0aGUgaW1wb3J0YW50IGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBjb21t
b24gYXN5bmMgdGFza3MuCi0gKiAKLSAqICAjIFRlc3RpbmcKLSAqIAotICogIDxwcmU+Ci0gKiAg
ICBpdCgnc2hvdWxkIHNpbXVsYXRlIHByb21pc2UnLCBpbmplY3QoZnVuY3Rpb24oJHEsICRyb290
U2NvcGUpIHsKLSAqICAgICAgdmFyIGRlZmVycmVkID0gJHEuZGVmZXIoKTsKLSAqICAgICAgdmFy
IHByb21pc2UgPSBkZWZlcnJlZC5wcm9taXNlOwotICogICAgICB2YXIgcmVzb2x2ZWRWYWx1ZTsK
LSAqIAotICogICAgICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpIHsgcmVzb2x2ZWRWYWx1
ZSA9IHZhbHVlOyB9KTsKLSAqICAgICAgZXhwZWN0KHJlc29sdmVkVmFsdWUpLnRvQmVVbmRlZmlu
ZWQoKTsKLSAqIAotICogICAgICAvLyBTaW11bGF0ZSByZXNvbHZpbmcgb2YgcHJvbWlzZQotICog
ICAgICBkZWZlcnJlZC5yZXNvbHZlKDEyMyk7Ci0gKiAgICAgIC8vIE5vdGUgdGhhdCB0aGUgJ3Ro
ZW4nIGZ1bmN0aW9uIGRvZXMgbm90IGdldCBjYWxsZWQgc3luY2hyb25vdXNseS4KLSAqICAgICAg
Ly8gVGhpcyBpcyBiZWNhdXNlIHdlIHdhbnQgdGhlIHByb21pc2UgQVBJIHRvIGFsd2F5cyBiZSBh
c3luYywgd2hldGhlciBvciBub3QKLSAqICAgICAgLy8gaXQgZ290IGNhbGxlZCBzeW5jaHJvbm91
c2x5IG9yIGFzeW5jaHJvbm91c2x5LgotICogICAgICBleHBlY3QocmVzb2x2ZWRWYWx1ZSkudG9C
ZVVuZGVmaW5lZCgpOwotICogCi0gKiAgICAgIC8vIFByb3BhZ2F0ZSBwcm9taXNlIHJlc29sdXRp
b24gdG8gJ3RoZW4nIGZ1bmN0aW9ucyB1c2luZyAkYXBwbHkoKS4KLSAqICAgICAgJHJvb3RTY29w
ZS4kYXBwbHkoKTsKLSAqICAgICAgZXhwZWN0KHJlc29sdmVkVmFsdWUpLnRvRXF1YWwoMTIzKTsK
LSAqICAgIH0pOwotICogIDwvcHJlPgotICovCi1mdW5jdGlvbiAkUVByb3ZpZGVyKCkgewotCi0g
IHRoaXMuJGdldCA9IFsnJHJvb3RTY29wZScsICckZXhjZXB0aW9uSGFuZGxlcicsIGZ1bmN0aW9u
KCRyb290U2NvcGUsICRleGNlcHRpb25IYW5kbGVyKSB7Ci0gICAgcmV0dXJuIHFGYWN0b3J5KGZ1
bmN0aW9uKGNhbGxiYWNrKSB7Ci0gICAgICAkcm9vdFNjb3BlLiRldmFsQXN5bmMoY2FsbGJhY2sp
OwotICAgIH0sICRleGNlcHRpb25IYW5kbGVyKTsKLSAgfV07Ci19Ci0KLQotLyoqCi0gKiBDb25z
dHJ1Y3RzIGEgcHJvbWlzZSBtYW5hZ2VyLgotICoKLSAqIEBwYXJhbSB7ZnVuY3Rpb24oZnVuY3Rp
b24pfSBuZXh0VGljayBGdW5jdGlvbiBmb3IgZXhlY3V0aW5nIGZ1bmN0aW9ucyBpbiB0aGUgbmV4
dCB0dXJuLgotICogQHBhcmFtIHtmdW5jdGlvbiguLi4qKX0gZXhjZXB0aW9uSGFuZGxlciBGdW5j
dGlvbiBpbnRvIHdoaWNoIHVuZXhwZWN0ZWQgZXhjZXB0aW9ucyBhcmUgcGFzc2VkIGZvcgotICog
ICAgIGRlYnVnZ2luZyBwdXJwb3Nlcy4KLSAqIEByZXR1cm5zIHtvYmplY3R9IFByb21pc2UgbWFu
YWdlci4KLSAqLwotZnVuY3Rpb24gcUZhY3RvcnkobmV4dFRpY2ssIGV4Y2VwdGlvbkhhbmRsZXIp
IHsKLQotICAvKioKLSAgICogQG5nZG9jCi0gICAqIEBuYW1lIG5nLiRxI2RlZmVyCi0gICAqIEBt
ZXRob2RPZiBuZy4kcQotICAgKiBAZGVzY3JpcHRpb24KLSAgICogQ3JlYXRlcyBhIGBEZWZlcnJl
ZGAgb2JqZWN0IHdoaWNoIHJlcHJlc2VudHMgYSB0YXNrIHdoaWNoIHdpbGwgZmluaXNoIGluIHRo
ZSBmdXR1cmUuCi0gICAqCi0gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gUmV0dXJucyBhIG5ldyBp
bnN0YW5jZSBvZiBkZWZlcnJlZC4KLSAgICovCi0gIHZhciBkZWZlciA9IGZ1bmN0aW9uKCkgewot
ICAgIHZhciBwZW5kaW5nID0gW10sCi0gICAgICAgIHZhbHVlLCBkZWZlcnJlZDsKLQotICAgIGRl
ZmVycmVkID0gewotCi0gICAgICByZXNvbHZlOiBmdW5jdGlvbih2YWwpIHsKLSAgICAgICAgaWYg
KHBlbmRpbmcpIHsKLSAgICAgICAgICB2YXIgY2FsbGJhY2tzID0gcGVuZGluZzsKLSAgICAgICAg
ICBwZW5kaW5nID0gdW5kZWZpbmVkOwotICAgICAgICAgIHZhbHVlID0gcmVmKHZhbCk7Ci0KLSAg
ICAgICAgICBpZiAoY2FsbGJhY2tzLmxlbmd0aCkgewotICAgICAgICAgICAgbmV4dFRpY2soZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgIHZhciBjYWxsYmFjazsKLSAgICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDAsIGlpID0gY2FsbGJhY2tzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKLSAgICAg
ICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrc1tpXTsKLSAgICAgICAgICAgICAgICB2YWx1
ZS50aGVuKGNhbGxiYWNrWzBdLCBjYWxsYmFja1sxXSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0pOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSwKLQotCi0gICAgICBy
ZWplY3Q6IGZ1bmN0aW9uKHJlYXNvbikgewotICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKHJlamVj
dChyZWFzb24pKTsKLSAgICAgIH0sCi0KLQotICAgICAgcHJvbWlzZTogewotICAgICAgICB0aGVu
OiBmdW5jdGlvbihjYWxsYmFjaywgZXJyYmFjaykgewotICAgICAgICAgIHZhciByZXN1bHQgPSBk
ZWZlcigpOwotCi0gICAgICAgICAgdmFyIHdyYXBwZWRDYWxsYmFjayA9IGZ1bmN0aW9uKHZhbHVl
KSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICByZXN1bHQucmVzb2x2ZSgoY2Fs
bGJhY2sgfHwgZGVmYXVsdENhbGxiYWNrKSh2YWx1ZSkpOwotICAgICAgICAgICAgfSBjYXRjaChl
KSB7Ci0gICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZXIoZSk7Ci0gICAgICAgICAgICAgIHJl
c3VsdC5yZWplY3QoZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfTsKLQotICAgICAgICAg
IHZhciB3cmFwcGVkRXJyYmFjayA9IGZ1bmN0aW9uKHJlYXNvbikgewotICAgICAgICAgICAgdHJ5
IHsKLSAgICAgICAgICAgICAgcmVzdWx0LnJlc29sdmUoKGVycmJhY2sgfHwgZGVmYXVsdEVycmJh
Y2spKHJlYXNvbikpOwotICAgICAgICAgICAgfSBjYXRjaChlKSB7Ci0gICAgICAgICAgICAgIGV4
Y2VwdGlvbkhhbmRsZXIoZSk7Ci0gICAgICAgICAgICAgIHJlc3VsdC5yZWplY3QoZSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgfTsKLQotICAgICAgICAgIGlmIChwZW5kaW5nKSB7Ci0gICAg
ICAgICAgICBwZW5kaW5nLnB1c2goW3dyYXBwZWRDYWxsYmFjaywgd3JhcHBlZEVycmJhY2tdKTsK
LSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdmFsdWUudGhlbih3cmFwcGVkQ2FsbGJh
Y2ssIHdyYXBwZWRFcnJiYWNrKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICByZXR1cm4gcmVz
dWx0LnByb21pc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9OwotCi0gICAgcmV0dXJuIGRl
ZmVycmVkOwotICB9OwotCi0KLSAgdmFyIHJlZiA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgaWYg
KHZhbHVlICYmIHZhbHVlLnRoZW4pIHJldHVybiB2YWx1ZTsKLSAgICByZXR1cm4gewotICAgICAg
dGhlbjogZnVuY3Rpb24oY2FsbGJhY2spIHsKLSAgICAgICAgdmFyIHJlc3VsdCA9IGRlZmVyKCk7
Ci0gICAgICAgIG5leHRUaWNrKGZ1bmN0aW9uKCkgewotICAgICAgICAgIHJlc3VsdC5yZXNvbHZl
KGNhbGxiYWNrKHZhbHVlKSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4gcmVzdWx0LnBy
b21pc2U7Ci0gICAgICB9Ci0gICAgfTsKLSAgfTsKLQotCi0gIC8qKgotICAgKiBAbmdkb2MKLSAg
ICogQG5hbWUgbmcuJHEjcmVqZWN0Ci0gICAqIEBtZXRob2RPZiBuZy4kcQotICAgKiBAZGVzY3Jp
cHRpb24KLSAgICogQ3JlYXRlcyBhIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCBhcyByZWplY3Rl
ZCB3aXRoIHRoZSBzcGVjaWZpZWQgYHJlYXNvbmAuIFRoaXMgYXBpIHNob3VsZCBiZQotICAgKiB1
c2VkIHRvIGZvcndhcmQgcmVqZWN0aW9uIGluIGEgY2hhaW4gb2YgcHJvbWlzZXMuIElmIHlvdSBh
cmUgZGVhbGluZyB3aXRoIHRoZSBsYXN0IHByb21pc2UgaW4KLSAgICogYSBwcm9taXNlIGNoYWlu
LCB5b3UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBpdC4KLSAgICoKLSAgICogV2hlbiBjb21w
YXJpbmcgZGVmZXJyZWRzL3Byb21pc2VzIHRvIHRoZSBmYW1pbGlhciBiZWhhdmlvciBvZiB0cnkv
Y2F0Y2gvdGhyb3csIHRoaW5rIG9mCi0gICAqIGByZWplY3RgIGFzIHRoZSBgdGhyb3dgIGtleXdv
cmQgaW4gSmF2YVNjcmlwdC4gVGhpcyBhbHNvIG1lYW5zIHRoYXQgaWYgeW91ICJjYXRjaCIgYW4g
ZXJyb3IgdmlhCi0gICAqIGEgcHJvbWlzZSBlcnJvciBjYWxsYmFjayBhbmQgeW91IHdhbnQgdG8g
Zm9yd2FyZCB0aGUgZXJyb3IgdG8gdGhlIHByb21pc2UgZGVyaXZlZCBmcm9tIHRoZQotICAgKiBj
dXJyZW50IHByb21pc2UsIHlvdSBoYXZlIHRvICJyZXRocm93IiB0aGUgZXJyb3IgYnkgcmV0dXJu
aW5nIGEgcmVqZWN0aW9uIGNvbnN0cnVjdGVkIHZpYQotICAgKiBgcmVqZWN0YC4KLSAgICoKLSAg
ICogPHByZT4KLSAgICogICBwcm9taXNlQiA9IHByb21pc2VBLnRoZW4oZnVuY3Rpb24ocmVzdWx0
KSB7Ci0gICAqICAgICAvLyBzdWNjZXNzOiBkbyBzb21ldGhpbmcgYW5kIHJlc29sdmUgcHJvbWlz
ZUIKLSAgICogICAgIC8vICAgICAgICAgIHdpdGggdGhlIG9sZCBvciBhIG5ldyByZXN1bHQKLSAg
ICogICAgIHJldHVybiByZXN1bHQ7Ci0gICAqICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7Ci0gICAq
ICAgICAvLyBlcnJvcjogaGFuZGxlIHRoZSBlcnJvciBpZiBwb3NzaWJsZSBhbmQKLSAgICogICAg
IC8vICAgICAgICByZXNvbHZlIHByb21pc2VCIHdpdGggbmV3UHJvbWlzZU9yVmFsdWUsCi0gICAq
ICAgICAvLyAgICAgICAgb3RoZXJ3aXNlIGZvcndhcmQgdGhlIHJlamVjdGlvbiB0byBwcm9taXNl
QgotICAgKiAgICAgaWYgKGNhbkhhbmRsZShyZWFzb24pKSB7Ci0gICAqICAgICAgLy8gaGFuZGxl
IHRoZSBlcnJvciBhbmQgcmVjb3ZlcgotICAgKiAgICAgIHJldHVybiBuZXdQcm9taXNlT3JWYWx1
ZTsKLSAgICogICAgIH0KLSAgICogICAgIHJldHVybiAkcS5yZWplY3QocmVhc29uKTsKLSAgICog
ICB9KTsKLSAgICogPC9wcmU+Ci0gICAqCi0gICAqIEBwYXJhbSB7Kn0gcmVhc29uIENvbnN0YW50
LCBtZXNzYWdlLCBleGNlcHRpb24gb3IgYW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVqZWN0
aW9uIHJlYXNvbi4KLSAgICogQHJldHVybnMge1Byb21pc2V9IFJldHVybnMgYSBwcm9taXNlIHRo
YXQgd2FzIGFscmVhZHkgcmVzb2x2ZWQgYXMgcmVqZWN0ZWQgd2l0aCB0aGUgYHJlYXNvbmAuCi0g
ICAqLwotICB2YXIgcmVqZWN0ID0gZnVuY3Rpb24ocmVhc29uKSB7Ci0gICAgcmV0dXJuIHsKLSAg
ICAgIHRoZW46IGZ1bmN0aW9uKGNhbGxiYWNrLCBlcnJiYWNrKSB7Ci0gICAgICAgIHZhciByZXN1
bHQgPSBkZWZlcigpOwotICAgICAgICBuZXh0VGljayhmdW5jdGlvbigpIHsKLSAgICAgICAgICBy
ZXN1bHQucmVzb2x2ZSgoZXJyYmFjayB8fCBkZWZhdWx0RXJyYmFjaykocmVhc29uKSk7Ci0gICAg
ICAgIH0pOwotICAgICAgICByZXR1cm4gcmVzdWx0LnByb21pc2U7Ci0gICAgICB9Ci0gICAgfTsK
LSAgfTsKLQotCi0gIC8qKgotICAgKiBAbmdkb2MKLSAgICogQG5hbWUgbmcuJHEjd2hlbgotICAg
KiBAbWV0aG9kT2YgbmcuJHEKLSAgICogQGRlc2NyaXB0aW9uCi0gICAqIFdyYXBzIGFuIG9iamVj
dCB0aGF0IG1pZ2h0IGJlIGEgdmFsdWUgb3IgYSAoM3JkIHBhcnR5KSB0aGVuLWFibGUgcHJvbWlz
ZSBpbnRvIGEgJHEgcHJvbWlzZS4KLSAgICogVGhpcyBpcyB1c2VmdWwgd2hlbiB5b3UgYXJlIGRl
YWxpbmcgd2l0aCBhbiBvYmplY3QgdGhhdCBtaWdodCBvciBtaWdodCBub3QgYmUgYSBwcm9taXNl
LCBvciBpZgotICAgKiB0aGUgcHJvbWlzZSBjb21lcyBmcm9tIGEgc291cmNlIHRoYXQgY2FuJ3Qg
YmUgdHJ1c3RlZC4KLSAgICoKLSAgICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSBvciBhIHByb21p
c2UKLSAgICogQHJldHVybnMge1Byb21pc2V9IFJldHVybnMgYSBwcm9taXNlIG9mIHRoZSBwYXNz
ZWQgdmFsdWUgb3IgcHJvbWlzZQotICAgKi8KLSAgdmFyIHdoZW4gPSBmdW5jdGlvbih2YWx1ZSwg
Y2FsbGJhY2ssIGVycmJhY2spIHsKLSAgICB2YXIgcmVzdWx0ID0gZGVmZXIoKSwKLSAgICAgICAg
ZG9uZTsKLQotICAgIHZhciB3cmFwcGVkQ2FsbGJhY2sgPSBmdW5jdGlvbih2YWx1ZSkgewotICAg
ICAgdHJ5IHsKLSAgICAgICAgcmV0dXJuIChjYWxsYmFjayB8fCBkZWZhdWx0Q2FsbGJhY2spKHZh
bHVlKTsKLSAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgZXhjZXB0aW9uSGFuZGxlcihlKTsK
LSAgICAgICAgcmV0dXJuIHJlamVjdChlKTsKLSAgICAgIH0KLSAgICB9OwotCi0gICAgdmFyIHdy
YXBwZWRFcnJiYWNrID0gZnVuY3Rpb24ocmVhc29uKSB7Ci0gICAgICB0cnkgewotICAgICAgICBy
ZXR1cm4gKGVycmJhY2sgfHwgZGVmYXVsdEVycmJhY2spKHJlYXNvbik7Ci0gICAgICB9IGNhdGNo
IChlKSB7Ci0gICAgICAgIGV4Y2VwdGlvbkhhbmRsZXIoZSk7Ci0gICAgICAgIHJldHVybiByZWpl
Y3QoZSk7Ci0gICAgICB9Ci0gICAgfTsKLQotICAgIG5leHRUaWNrKGZ1bmN0aW9uKCkgewotICAg
ICAgcmVmKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICAgIGlmIChkb25lKSBy
ZXR1cm47Ci0gICAgICAgIGRvbmUgPSB0cnVlOwotICAgICAgICByZXN1bHQucmVzb2x2ZShyZWYo
dmFsdWUpLnRoZW4od3JhcHBlZENhbGxiYWNrLCB3cmFwcGVkRXJyYmFjaykpOwotICAgICAgfSwg
ZnVuY3Rpb24ocmVhc29uKSB7Ci0gICAgICAgIGlmIChkb25lKSByZXR1cm47Ci0gICAgICAgIGRv
bmUgPSB0cnVlOwotICAgICAgICByZXN1bHQucmVzb2x2ZSh3cmFwcGVkRXJyYmFjayhyZWFzb24p
KTsKLSAgICAgIH0pOwotICAgIH0pOwotCi0gICAgcmV0dXJuIHJlc3VsdC5wcm9taXNlOwotICB9
OwotCi0KLSAgZnVuY3Rpb24gZGVmYXVsdENhbGxiYWNrKHZhbHVlKSB7Ci0gICAgcmV0dXJuIHZh
bHVlOwotICB9Ci0KLQotICBmdW5jdGlvbiBkZWZhdWx0RXJyYmFjayhyZWFzb24pIHsKLSAgICBy
ZXR1cm4gcmVqZWN0KHJlYXNvbik7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBAbmdkb2MKLSAgICog
QG5hbWUgbmcuJHEjYWxsCi0gICAqIEBtZXRob2RPZiBuZy4kcQotICAgKiBAZGVzY3JpcHRpb24K
LSAgICogQ29tYmluZXMgbXVsdGlwbGUgcHJvbWlzZXMgaW50byBhIHNpbmdsZSBwcm9taXNlIHRo
YXQgaXMgcmVzb2x2ZWQgd2hlbiBhbGwgb2YgdGhlIGlucHV0Ci0gICAqIHByb21pc2VzIGFyZSBy
ZXNvbHZlZC4KLSAgICoKLSAgICogQHBhcmFtIHtBcnJheS48UHJvbWlzZT59IHByb21pc2VzIEFu
IGFycmF5IG9mIHByb21pc2VzLgotICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gUmV0dXJucyBhIHNp
bmdsZSBwcm9taXNlIHRoYXQgd2lsbCBiZSByZXNvbHZlZCB3aXRoIGFuIGFycmF5IG9mIHZhbHVl
cywKLSAgICogICBlYWNoIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb21pc2UgYXQgdGhl
IHNhbWUgaW5kZXggaW4gdGhlIGBwcm9taXNlc2AgYXJyYXkuIElmIGFueSBvZgotICAgKiAgIHRo
ZSBwcm9taXNlcyBpcyByZXNvbHZlZCB3aXRoIGEgcmVqZWN0aW9uLCB0aGlzIHJlc3VsdGluZyBw
cm9taXNlIHdpbGwgYmUgcmVzb2x2ZWQgd2l0aCB0aGUKLSAgICogICBzYW1lIHJlamVjdGlvbi4K
LSAgICovCi0gIGZ1bmN0aW9uIGFsbChwcm9taXNlcykgewotICAgIHZhciBkZWZlcnJlZCA9IGRl
ZmVyKCksCi0gICAgICAgIGNvdW50ZXIgPSBwcm9taXNlcy5sZW5ndGgsCi0gICAgICAgIHJlc3Vs
dHMgPSBbXTsKLQotICAgIGlmIChjb3VudGVyKSB7Ci0gICAgICBmb3JFYWNoKHByb21pc2VzLCBm
dW5jdGlvbihwcm9taXNlLCBpbmRleCkgewotICAgICAgICByZWYocHJvbWlzZSkudGhlbihmdW5j
dGlvbih2YWx1ZSkgewotICAgICAgICAgIGlmIChpbmRleCBpbiByZXN1bHRzKSByZXR1cm47Ci0g
ICAgICAgICAgcmVzdWx0c1tpbmRleF0gPSB2YWx1ZTsKLSAgICAgICAgICBpZiAoISgtLWNvdW50
ZXIpKSBkZWZlcnJlZC5yZXNvbHZlKHJlc3VsdHMpOwotICAgICAgICB9LCBmdW5jdGlvbihyZWFz
b24pIHsKLSAgICAgICAgICBpZiAoaW5kZXggaW4gcmVzdWx0cykgcmV0dXJuOwotICAgICAgICAg
IGRlZmVycmVkLnJlamVjdChyZWFzb24pOwotICAgICAgICB9KTsKLSAgICAgIH0pOwotICAgIH0g
ZWxzZSB7Ci0gICAgICBkZWZlcnJlZC5yZXNvbHZlKHJlc3VsdHMpOwotICAgIH0KLQotICAgIHJl
dHVybiBkZWZlcnJlZC5wcm9taXNlOwotICB9Ci0KLSAgcmV0dXJuIHsKLSAgICBkZWZlcjogZGVm
ZXIsCi0gICAgcmVqZWN0OiByZWplY3QsCi0gICAgd2hlbjogd2hlbiwKLSAgICBhbGw6IGFsbAot
ICB9OwotfQotCi0vKioKLSAqIEBuZ2RvYyBvYmplY3QKLSAqIEBuYW1lIG5nLiRyb3V0ZVByb3Zp
ZGVyCi0gKiBAZnVuY3Rpb24KLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqCi0gKiBVc2VkIGZvciBj
b25maWd1cmluZyByb3V0ZXMuIFNlZSB7QGxpbmsgbmcuJHJvdXRlICRyb3V0ZX0gZm9yIGFuIGV4
YW1wbGUuCi0gKi8KLWZ1bmN0aW9uICRSb3V0ZVByb3ZpZGVyKCl7Ci0gIHZhciByb3V0ZXMgPSB7
fTsKLQotICAvKioKLSAgICogQG5nZG9jIG1ldGhvZAotICAgKiBAbmFtZSBuZy4kcm91dGVQcm92
aWRlciN3aGVuCi0gICAqIEBtZXRob2RPZiBuZy4kcm91dGVQcm92aWRlcgotICAgKgotICAgKiBA
cGFyYW0ge3N0cmluZ30gcGF0aCBSb3V0ZSBwYXRoIChtYXRjaGVkIGFnYWluc3QgYCRsb2NhdGlv
bi5wYXRoYCkuIElmIGAkbG9jYXRpb24ucGF0aGAKLSAgICogICAgY29udGFpbnMgcmVkdW5kYW50
IHRyYWlsaW5nIHNsYXNoIG9yIGlzIG1pc3Npbmcgb25lLCB0aGUgcm91dGUgd2lsbCBzdGlsbCBt
YXRjaCBhbmQgdGhlCi0gICAqICAgIGAkbG9jYXRpb24ucGF0aGAgd2lsbCBiZSB1cGRhdGVkIHRv
IGFkZCBvciBkcm9wIHRoZSB0cmFpbGluZyBzbGFzaCB0byBleGFjdGx5IG1hdGNoIHRoZQotICAg
KiAgICByb3V0ZSBkZWZpbml0aW9uLgotICAgKgotICAgKiAgICBgcGF0aGAgY2FuIGNvbnRhaW4g
bmFtZWQgZ3JvdXBzIHN0YXJ0aW5nIHdpdGggYSBjb2xvbiAoYDpuYW1lYCkuIEFsbCBjaGFyYWN0
ZXJzIHVwIHRvIHRoZQotICAgKiAgICBuZXh0IHNsYXNoIGFyZSBtYXRjaGVkIGFuZCBzdG9yZWQg
aW4gYCRyb3V0ZVBhcmFtc2AgdW5kZXIgdGhlIGdpdmVuIGBuYW1lYCB3aGVuIHRoZSByb3V0ZQot
ICAgKiAgICBtYXRjaGVzLgotICAgKgotICAgKiBAcGFyYW0ge09iamVjdH0gcm91dGUgTWFwcGlu
ZyBpbmZvcm1hdGlvbiB0byBiZSBhc3NpZ25lZCB0byBgJHJvdXRlLmN1cnJlbnRgIG9uIHJvdXRl
Ci0gICAqICAgIG1hdGNoLgotICAgKgotICAgKiAgICBPYmplY3QgcHJvcGVydGllczoKLSAgICoK
LSAgICogICAgLSBgY29udHJvbGxlcmAg4oCTIGB7KHN0cmluZ3xmdW5jdGlvbigpPX1gIOKAkyBD
b250cm9sbGVyIGZuIHRoYXQgc2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aCBuZXdseQotICAgKiAg
ICAgIGNyZWF0ZWQgc2NvcGUgb3IgdGhlIG5hbWUgb2YgYSB7QGxpbmsgYW5ndWxhci5Nb2R1bGUj
Y29udHJvbGxlciByZWdpc3RlcmVkIGNvbnRyb2xsZXJ9Ci0gICAqICAgICAgaWYgcGFzc2VkIGFz
IGEgc3RyaW5nLgotICAgKiAgICAtIGB0ZW1wbGF0ZWAg4oCTIGB7c3RyaW5nPX1gIOKAkyAgaHRt
bCB0ZW1wbGF0ZSBhcyBhIHN0cmluZyB0aGF0IHNob3VsZCBiZSB1c2VkIGJ5Ci0gICAqICAgICAg
e0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ1ZpZXcgbmdWaWV3fSBvcgotICAgKiAgICAgIHtAbGluayBu
Zy5kaXJlY3RpdmU6bmdJbmNsdWRlIG5nSW5jbHVkZX0gZGlyZWN0aXZlcy4KLSAgICogICAgICB0
aGlzIHByb3BlcnR5IHRha2VzIHByZWNlZGVuY2Ugb3ZlciBgdGVtcGxhdGVVcmxgLgotICAgKiAg
ICAtIGB0ZW1wbGF0ZVVybGAg4oCTIGB7c3RyaW5nPX1gIOKAkyBwYXRoIHRvIGFuIGh0bWwgdGVt
cGxhdGUgdGhhdCBzaG91bGQgYmUgdXNlZCBieQotICAgKiAgICAgIHtAbGluayBuZy5kaXJlY3Rp
dmU6bmdWaWV3IG5nVmlld30uCi0gICAqICAgIC0gYHJlc29sdmVgIC0gYHtPYmplY3QuPHN0cmlu
ZywgZnVuY3Rpb24+PX1gIC0gQW4gb3B0aW9uYWwgbWFwIG9mIGRlcGVuZGVuY2llcyB3aGljaCBz
aG91bGQKLSAgICogICAgICBiZSBpbmplY3RlZCBpbnRvIHRoZSBjb250cm9sbGVyLiBJZiBhbnkg
b2YgdGhlc2UgZGVwZW5kZW5jaWVzIGFyZSBwcm9taXNlcywgdGhleSB3aWxsIGJlCi0gICAqICAg
ICAgcmVzb2x2ZWQgYW5kIGNvbnZlcnRlZCB0byBhIHZhbHVlIGJlZm9yZSB0aGUgY29udHJvbGxl
ciBpcyBpbnN0YW50aWF0ZWQgYW5kIHRoZQotICAgKiAgICAgIGAkcm91dGVDaGFuZ2VTdWNjZXNz
YCBldmVudCBpcyBmaXJlZC4gVGhlIG1hcCBvYmplY3QgaXM6Ci0gICAqCi0gICAqICAgICAgLSBg
a2V5YCDigJMgYHtzdHJpbmd9YDogYSBuYW1lIG9mIGEgZGVwZW5kZW5jeSB0byBiZSBpbmplY3Rl
ZCBpbnRvIHRoZSBjb250cm9sbGVyLgotICAgKiAgICAgIC0gYGZhY3RvcnlgIC0gYHtzdHJpbmd8
ZnVuY3Rpb259YDogSWYgYHN0cmluZ2AgdGhlbiBpdCBpcyBhbiBhbGlhcyBmb3IgYSBzZXJ2aWNl
LgotICAgKiAgICAgICAgT3RoZXJ3aXNlIGlmIGZ1bmN0aW9uLCB0aGVuIGl0IGlzIHtAbGluayBh
cGkvQVVUTy4kaW5qZWN0b3IjaW52b2tlIGluamVjdGVkfQotICAgKiAgICAgICAgYW5kIHRoZSBy
ZXR1cm4gdmFsdWUgaXMgdHJlYXRlZCBhcyB0aGUgZGVwZW5kZW5jeS4gSWYgdGhlIHJlc3VsdCBp
cyBhIHByb21pc2UsIGl0IGlzIHJlc29sdmVkCi0gICAqICAgICAgICBiZWZvcmUgaXRzIHZhbHVl
IGlzIGluamVjdGVkIGludG8gdGhlIGNvbnRyb2xsZXIuCi0gICAqCi0gICAqICAgIC0gYHJlZGly
ZWN0VG9gIOKAkyB7KHN0cmluZ3xmdW5jdGlvbigpKT19IOKAkyB2YWx1ZSB0byB1cGRhdGUKLSAg
ICogICAgICB7QGxpbmsgbmcuJGxvY2F0aW9uICRsb2NhdGlvbn0gcGF0aCB3aXRoIGFuZCB0cmln
Z2VyIHJvdXRlIHJlZGlyZWN0aW9uLgotICAgKgotICAgKiAgICAgIElmIGByZWRpcmVjdFRvYCBp
cyBhIGZ1bmN0aW9uLCBpdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1l
dGVyczoKLSAgICoKLSAgICogICAgICAtIGB7T2JqZWN0LjxzdHJpbmc+fWAgLSByb3V0ZSBwYXJh
bWV0ZXJzIGV4dHJhY3RlZCBmcm9tIHRoZSBjdXJyZW50Ci0gICAqICAgICAgICBgJGxvY2F0aW9u
LnBhdGgoKWAgYnkgYXBwbHlpbmcgdGhlIGN1cnJlbnQgcm91dGUgdGVtcGxhdGVVcmwuCi0gICAq
ICAgICAgLSBge3N0cmluZ31gIC0gY3VycmVudCBgJGxvY2F0aW9uLnBhdGgoKWAKLSAgICogICAg
ICAtIGB7T2JqZWN0fWAgLSBjdXJyZW50IGAkbG9jYXRpb24uc2VhcmNoKClgCi0gICAqCi0gICAq
ICAgICAgVGhlIGN1c3RvbSBgcmVkaXJlY3RUb2AgZnVuY3Rpb24gaXMgZXhwZWN0ZWQgdG8gcmV0
dXJuIGEgc3RyaW5nIHdoaWNoIHdpbGwgYmUgdXNlZAotICAgKiAgICAgIHRvIHVwZGF0ZSBgJGxv
Y2F0aW9uLnBhdGgoKWAgYW5kIGAkbG9jYXRpb24uc2VhcmNoKClgLgotICAgKgotICAgKiAgICAt
IGBbcmVsb2FkT25TZWFyY2g9dHJ1ZV1gIC0ge2Jvb2xlYW49fSAtIHJlbG9hZCByb3V0ZSB3aGVu
IG9ubHkgJGxvY2F0aW9uLnNlYXJjaCgpCi0gICAqICAgIGNoYW5nZXMuCi0gICAqCi0gICAqICAg
ICAgSWYgdGhlIG9wdGlvbiBpcyBzZXQgdG8gYGZhbHNlYCBhbmQgdXJsIGluIHRoZSBicm93c2Vy
IGNoYW5nZXMsIHRoZW4KLSAgICogICAgICBgJHJvdXRlVXBkYXRlYCBldmVudCBpcyBicm9hZGNh
c3RlZCBvbiB0aGUgcm9vdCBzY29wZS4KLSAgICoKLSAgICogQHJldHVybnMge09iamVjdH0gc2Vs
ZgotICAgKgotICAgKiBAZGVzY3JpcHRpb24KLSAgICogQWRkcyBhIG5ldyByb3V0ZSBkZWZpbml0
aW9uIHRvIHRoZSBgJHJvdXRlYCBzZXJ2aWNlLgotICAgKi8KLSAgdGhpcy53aGVuID0gZnVuY3Rp
b24ocGF0aCwgcm91dGUpIHsKLSAgICByb3V0ZXNbcGF0aF0gPSBleHRlbmQoe3JlbG9hZE9uU2Vh
cmNoOiB0cnVlfSwgcm91dGUpOwotCi0gICAgLy8gY3JlYXRlIHJlZGlyZWN0aW9uIGZvciB0cmFp
bGluZyBzbGFzaGVzCi0gICAgaWYgKHBhdGgpIHsKLSAgICAgIHZhciByZWRpcmVjdFBhdGggPSAo
cGF0aFtwYXRoLmxlbmd0aC0xXSA9PSAnLycpCi0gICAgICAgICAgPyBwYXRoLnN1YnN0cigwLCBw
YXRoLmxlbmd0aC0xKQotICAgICAgICAgIDogcGF0aCArJy8nOwotCi0gICAgICByb3V0ZXNbcmVk
aXJlY3RQYXRoXSA9IHtyZWRpcmVjdFRvOiBwYXRofTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdGhp
czsKLSAgfTsKLQotICAvKioKLSAgICogQG5nZG9jIG1ldGhvZAotICAgKiBAbmFtZSBuZy4kcm91
dGVQcm92aWRlciNvdGhlcndpc2UKLSAgICogQG1ldGhvZE9mIG5nLiRyb3V0ZVByb3ZpZGVyCi0g
ICAqCi0gICAqIEBkZXNjcmlwdGlvbgotICAgKiBTZXRzIHJvdXRlIGRlZmluaXRpb24gdGhhdCB3
aWxsIGJlIHVzZWQgb24gcm91dGUgY2hhbmdlIHdoZW4gbm8gb3RoZXIgcm91dGUgZGVmaW5pdGlv
bgotICAgKiBpcyBtYXRjaGVkLgotICAgKgotICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIE1h
cHBpbmcgaW5mb3JtYXRpb24gdG8gYmUgYXNzaWduZWQgdG8gYCRyb3V0ZS5jdXJyZW50YC4KLSAg
ICogQHJldHVybnMge09iamVjdH0gc2VsZgotICAgKi8KLSAgdGhpcy5vdGhlcndpc2UgPSBmdW5j
dGlvbihwYXJhbXMpIHsKLSAgICB0aGlzLndoZW4obnVsbCwgcGFyYW1zKTsKLSAgICByZXR1cm4g
dGhpczsKLSAgfTsKLQotCi0gIHRoaXMuJGdldCA9IFsnJHJvb3RTY29wZScsICckbG9jYXRpb24n
LCAnJHJvdXRlUGFyYW1zJywgJyRxJywgJyRpbmplY3RvcicsICckaHR0cCcsICckdGVtcGxhdGVD
YWNoZScsCi0gICAgICBmdW5jdGlvbiggJHJvb3RTY29wZSwgICAkbG9jYXRpb24sICAgJHJvdXRl
UGFyYW1zLCAgICRxLCAgICRpbmplY3RvciwgICAkaHR0cCwgICAkdGVtcGxhdGVDYWNoZSkgewot
Ci0gICAgLyoqCi0gICAgICogQG5nZG9jIG9iamVjdAotICAgICAqIEBuYW1lIG5nLiRyb3V0ZQot
ICAgICAqIEByZXF1aXJlcyAkbG9jYXRpb24KLSAgICAgKiBAcmVxdWlyZXMgJHJvdXRlUGFyYW1z
Ci0gICAgICoKLSAgICAgKiBAcHJvcGVydHkge09iamVjdH0gY3VycmVudCBSZWZlcmVuY2UgdG8g
dGhlIGN1cnJlbnQgcm91dGUgZGVmaW5pdGlvbi4KLSAgICAgKiBUaGUgcm91dGUgZGVmaW5pdGlv
biBjb250YWluczoKLSAgICAgKgotICAgICAqICAgLSBgY29udHJvbGxlcmA6IFRoZSBjb250cm9s
bGVyIGNvbnN0cnVjdG9yIGFzIGRlZmluZSBpbiByb3V0ZSBkZWZpbml0aW9uLgotICAgICAqICAg
LSBgbG9jYWxzYDogQSBtYXAgb2YgbG9jYWxzIHdoaWNoIGlzIHVzZWQgYnkge0BsaW5rIG5nLiRj
b250cm9sbGVyICRjb250cm9sbGVyfSBzZXJ2aWNlIGZvcgotICAgICAqICAgICBjb250cm9sbGVy
IGluc3RhbnRpYXRpb24uIFRoZSBgbG9jYWxzYCBjb250YWluCi0gICAgICogICAgIHRoZSByZXNv
bHZlZCB2YWx1ZXMgb2YgdGhlIGByZXNvbHZlYCBtYXAuIEFkZGl0aW9uYWxseSB0aGUgYGxvY2Fs
c2AgYWxzbyBjb250YWluOgotICAgICAqCi0gICAgICogICAgIC0gYCRzY29wZWAgLSBUaGUgY3Vy
cmVudCByb3V0ZSBzY29wZS4KLSAgICAgKiAgICAgLSBgJHRlbXBsYXRlYCAtIFRoZSBjdXJyZW50
IHJvdXRlIHRlbXBsYXRlIEhUTUwuCi0gICAgICoKLSAgICAgKiBAcHJvcGVydHkge0FycmF5LjxP
YmplY3Q+fSByb3V0ZXMgQXJyYXkgb2YgYWxsIGNvbmZpZ3VyZWQgcm91dGVzLgotICAgICAqCi0g
ICAgICogQGRlc2NyaXB0aW9uCi0gICAgICogSXMgdXNlZCBmb3IgZGVlcC1saW5raW5nIFVSTHMg
dG8gY29udHJvbGxlcnMgYW5kIHZpZXdzIChIVE1MIHBhcnRpYWxzKS4KLSAgICAgKiBJdCB3YXRj
aGVzIGAkbG9jYXRpb24udXJsKClgIGFuZCB0cmllcyB0byBtYXAgdGhlIHBhdGggdG8gYW4gZXhp
c3Rpbmcgcm91dGUgZGVmaW5pdGlvbi4KLSAgICAgKgotICAgICAqIFlvdSBjYW4gZGVmaW5lIHJv
dXRlcyB0aHJvdWdoIHtAbGluayBuZy4kcm91dGVQcm92aWRlciAkcm91dGVQcm92aWRlcn0ncyBB
UEkuCi0gICAgICoKLSAgICAgKiBUaGUgYCRyb3V0ZWAgc2VydmljZSBpcyB0eXBpY2FsbHkgdXNl
ZCBpbiBjb25qdW5jdGlvbiB3aXRoIHtAbGluayBuZy5kaXJlY3RpdmU6bmdWaWV3IG5nVmlld30K
LSAgICAgKiBkaXJlY3RpdmUgYW5kIHRoZSB7QGxpbmsgbmcuJHJvdXRlUGFyYW1zICRyb3V0ZVBh
cmFtc30gc2VydmljZS4KLSAgICAgKgotICAgICAqIEBleGFtcGxlCi0gICAgICAgVGhpcyBleGFt
cGxlIHNob3dzIGhvdyBjaGFuZ2luZyB0aGUgVVJMIGhhc2ggY2F1c2VzIHRoZSBgJHJvdXRlYCB0
byBtYXRjaCBhIHJvdXRlIGFnYWluc3QgdGhlCi0gICAgICAgVVJMLCBhbmQgdGhlIGBuZ1ZpZXdg
IHB1bGxzIGluIHRoZSBwYXJ0aWFsLgotCi0gICAgICAgTm90ZSB0aGF0IHRoaXMgZXhhbXBsZSBp
cyB1c2luZyB7QGxpbmsgbmcuZGlyZWN0aXZlOnNjcmlwdCBpbmxpbmVkIHRlbXBsYXRlc30KLSAg
ICAgICB0byBnZXQgaXQgd29ya2luZyBvbiBqc2ZpZGRsZSBhcyB3ZWxsLgotCi0gICAgIDxleGFt
cGxlIG1vZHVsZT0ibmdWaWV3Ij4KLSAgICAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KLSAg
ICAgICAgIDxkaXYgbmctY29udHJvbGxlcj0iTWFpbkNudGwiPgotICAgICAgICAgICBDaG9vc2U6
Ci0gICAgICAgICAgIDxhIGhyZWY9IkJvb2svTW9ieSI+TW9ieTwvYT4gfAotICAgICAgICAgICA8
YSBocmVmPSJCb29rL01vYnkvY2gvMSI+TW9ieTogQ2gxPC9hPiB8Ci0gICAgICAgICAgIDxhIGhy
ZWY9IkJvb2svR2F0c2J5Ij5HYXRzYnk8L2E+IHwKLSAgICAgICAgICAgPGEgaHJlZj0iQm9vay9H
YXRzYnkvY2gvND9rZXk9dmFsdWUiPkdhdHNieTogQ2g0PC9hPiB8Ci0gICAgICAgICAgIDxhIGhy
ZWY9IkJvb2svU2NhcmxldCI+U2NhcmxldCBMZXR0ZXI8L2E+PGJyLz4KLQotICAgICAgICAgICA8
ZGl2IG5nLXZpZXc+PC9kaXY+Ci0gICAgICAgICAgIDxociAvPgotCi0gICAgICAgICAgIDxwcmU+
JGxvY2F0aW9uLnBhdGgoKSA9IHt7JGxvY2F0aW9uLnBhdGgoKX19PC9wcmU+Ci0gICAgICAgICAg
IDxwcmU+JHJvdXRlLmN1cnJlbnQudGVtcGxhdGVVcmwgPSB7eyRyb3V0ZS5jdXJyZW50LnRlbXBs
YXRlVXJsfX08L3ByZT4KLSAgICAgICAgICAgPHByZT4kcm91dGUuY3VycmVudC5wYXJhbXMgPSB7
eyRyb3V0ZS5jdXJyZW50LnBhcmFtc319PC9wcmU+Ci0gICAgICAgICAgIDxwcmU+JHJvdXRlLmN1
cnJlbnQuc2NvcGUubmFtZSA9IHt7JHJvdXRlLmN1cnJlbnQuc2NvcGUubmFtZX19PC9wcmU+Ci0g
ICAgICAgICAgIDxwcmU+JHJvdXRlUGFyYW1zID0ge3skcm91dGVQYXJhbXN9fTwvcHJlPgotICAg
ICAgICAgPC9kaXY+Ci0gICAgICAgPC9maWxlPgotCi0gICAgICAgPGZpbGUgbmFtZT0iYm9vay5o
dG1sIj4KLSAgICAgICAgIGNvbnRyb2xsZXI6IHt7bmFtZX19PGJyIC8+Ci0gICAgICAgICBCb29r
IElkOiB7e3BhcmFtcy5ib29rSWR9fTxiciAvPgotICAgICAgIDwvZmlsZT4KLQotICAgICAgIDxm
aWxlIG5hbWU9ImNoYXB0ZXIuaHRtbCI+Ci0gICAgICAgICBjb250cm9sbGVyOiB7e25hbWV9fTxi
ciAvPgotICAgICAgICAgQm9vayBJZDoge3twYXJhbXMuYm9va0lkfX08YnIgLz4KLSAgICAgICAg
IENoYXB0ZXIgSWQ6IHt7cGFyYW1zLmNoYXB0ZXJJZH19Ci0gICAgICAgPC9maWxlPgotCi0gICAg
ICAgPGZpbGUgbmFtZT0ic2NyaXB0LmpzIj4KLSAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCduZ1Zp
ZXcnLCBbXSwgZnVuY3Rpb24oJHJvdXRlUHJvdmlkZXIsICRsb2NhdGlvblByb3ZpZGVyKSB7Ci0g
ICAgICAgICAgICRyb3V0ZVByb3ZpZGVyLndoZW4oJy9Cb29rLzpib29rSWQnLCB7Ci0gICAgICAg
ICAgICAgdGVtcGxhdGVVcmw6ICdib29rLmh0bWwnLAotICAgICAgICAgICAgIGNvbnRyb2xsZXI6
IEJvb2tDbnRsLAotICAgICAgICAgICAgIHJlc29sdmU6IHsKLSAgICAgICAgICAgICAgIC8vIEkg
d2lsbCBjYXVzZSBhIDEgc2Vjb25kIGRlbGF5Ci0gICAgICAgICAgICAgICBkZWxheTogZnVuY3Rp
b24oJHEsICR0aW1lb3V0KSB7Ci0gICAgICAgICAgICAgICAgIHZhciBkZWxheSA9ICRxLmRlZmVy
KCk7Ci0gICAgICAgICAgICAgICAgICR0aW1lb3V0KGRlbGF5LnJlc29sdmUsIDEwMDApOwotICAg
ICAgICAgICAgICAgICByZXR1cm4gZGVsYXkucHJvbWlzZTsKLSAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgIH0pOwotICAgICAgICAgICAkcm91dGVQcm92aWRlci53
aGVuKCcvQm9vay86Ym9va0lkL2NoLzpjaGFwdGVySWQnLCB7Ci0gICAgICAgICAgICAgdGVtcGxh
dGVVcmw6ICdjaGFwdGVyLmh0bWwnLAotICAgICAgICAgICAgIGNvbnRyb2xsZXI6IENoYXB0ZXJD
bnRsCi0gICAgICAgICAgIH0pOwotCi0gICAgICAgICAgIC8vIGNvbmZpZ3VyZSBodG1sNSB0byBn
ZXQgbGlua3Mgd29ya2luZyBvbiBqc2ZpZGRsZQotICAgICAgICAgICAkbG9jYXRpb25Qcm92aWRl
ci5odG1sNU1vZGUodHJ1ZSk7Ci0gICAgICAgICB9KTsKLQotICAgICAgICAgZnVuY3Rpb24gTWFp
bkNudGwoJHNjb3BlLCAkcm91dGUsICRyb3V0ZVBhcmFtcywgJGxvY2F0aW9uKSB7Ci0gICAgICAg
ICAgICRzY29wZS4kcm91dGUgPSAkcm91dGU7Ci0gICAgICAgICAgICRzY29wZS4kbG9jYXRpb24g
PSAkbG9jYXRpb247Ci0gICAgICAgICAgICRzY29wZS4kcm91dGVQYXJhbXMgPSAkcm91dGVQYXJh
bXM7Ci0gICAgICAgICB9Ci0KLSAgICAgICAgIGZ1bmN0aW9uIEJvb2tDbnRsKCRzY29wZSwgJHJv
dXRlUGFyYW1zKSB7Ci0gICAgICAgICAgICRzY29wZS5uYW1lID0gIkJvb2tDbnRsIjsKLSAgICAg
ICAgICAgJHNjb3BlLnBhcmFtcyA9ICRyb3V0ZVBhcmFtczsKLSAgICAgICAgIH0KLQotICAgICAg
ICAgZnVuY3Rpb24gQ2hhcHRlckNudGwoJHNjb3BlLCAkcm91dGVQYXJhbXMpIHsKLSAgICAgICAg
ICAgJHNjb3BlLm5hbWUgPSAiQ2hhcHRlckNudGwiOwotICAgICAgICAgICAkc2NvcGUucGFyYW1z
ID0gJHJvdXRlUGFyYW1zOwotICAgICAgICAgfQotICAgICAgIDwvZmlsZT4KLQotICAgICAgIDxm
aWxlIG5hbWU9InNjZW5hcmlvLmpzIj4KLSAgICAgICAgIGl0KCdzaG91bGQgbG9hZCBhbmQgY29t
cGlsZSBjb3JyZWN0IHRlbXBsYXRlJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgIGVsZW1lbnQo
J2E6Y29udGFpbnMoIk1vYnk6IENoMSIpJykuY2xpY2soKTsKLSAgICAgICAgICAgdmFyIGNvbnRl
bnQgPSBlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBbbmctdmlld10nKS50ZXh0KCk7Ci0gICAg
ICAgICAgIGV4cGVjdChjb250ZW50KS50b01hdGNoKC9jb250cm9sbGVyXDogQ2hhcHRlckNudGwv
KTsKLSAgICAgICAgICAgZXhwZWN0KGNvbnRlbnQpLnRvTWF0Y2goL0Jvb2sgSWRcOiBNb2J5Lyk7
Ci0gICAgICAgICAgIGV4cGVjdChjb250ZW50KS50b01hdGNoKC9DaGFwdGVyIElkXDogMS8pOwot
Ci0gICAgICAgICAgIGVsZW1lbnQoJ2E6Y29udGFpbnMoIlNjYXJsZXQiKScpLmNsaWNrKCk7Ci0g
ICAgICAgICAgIHNsZWVwKDIpOyAvLyBwcm9taXNlcyBhcmUgbm90IHBhcnQgb2Ygc2NlbmFyaW8g
d2FpdGluZwotICAgICAgICAgICBjb250ZW50ID0gZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUg
W25nLXZpZXddJykudGV4dCgpOwotICAgICAgICAgICBleHBlY3QoY29udGVudCkudG9NYXRjaCgv
Y29udHJvbGxlclw6IEJvb2tDbnRsLyk7Ci0gICAgICAgICAgIGV4cGVjdChjb250ZW50KS50b01h
dGNoKC9Cb29rIElkXDogU2NhcmxldC8pOwotICAgICAgICAgfSk7Ci0gICAgICAgPC9maWxlPgot
ICAgICA8L2V4YW1wbGU+Ci0gICAgICovCi0KLSAgICAvKioKLSAgICAgKiBAbmdkb2MgZXZlbnQK
LSAgICAgKiBAbmFtZSBuZy4kcm91dGUjJHJvdXRlQ2hhbmdlU3RhcnQKLSAgICAgKiBAZXZlbnRP
ZiBuZy4kcm91dGUKLSAgICAgKiBAZXZlbnRUeXBlIGJyb2FkY2FzdCBvbiByb290IHNjb3BlCi0g
ICAgICogQGRlc2NyaXB0aW9uCi0gICAgICogQnJvYWRjYXN0ZWQgYmVmb3JlIGEgcm91dGUgY2hh
bmdlLiBBdCB0aGlzICBwb2ludCB0aGUgcm91dGUgc2VydmljZXMgc3RhcnRzCi0gICAgICogcmVz
b2x2aW5nIGFsbCBvZiB0aGUgZGVwZW5kZW5jaWVzIG5lZWRlZCBmb3IgdGhlIHJvdXRlIGNoYW5n
ZSB0byBvY2N1cnMuCi0gICAgICogVHlwaWNhbGx5IHRoaXMgaW52b2x2ZXMgZmV0Y2hpbmcgdGhl
IHZpZXcgdGVtcGxhdGUgYXMgd2VsbCBhcyBhbnkgZGVwZW5kZW5jaWVzCi0gICAgICogZGVmaW5l
ZCBpbiBgcmVzb2x2ZWAgcm91dGUgcHJvcGVydHkuIE9uY2UgIGFsbCBvZiB0aGUgZGVwZW5kZW5j
aWVzIGFyZSByZXNvbHZlZAotICAgICAqIGAkcm91dGVDaGFuZ2VTdWNjZXNzYCBpcyBmaXJlZC4K
LSAgICAgKgotICAgICAqIEBwYXJhbSB7Um91dGV9IG5leHQgRnV0dXJlIHJvdXRlIGluZm9ybWF0
aW9uLgotICAgICAqIEBwYXJhbSB7Um91dGV9IGN1cnJlbnQgQ3VycmVudCByb3V0ZSBpbmZvcm1h
dGlvbi4KLSAgICAgKi8KLQotICAgIC8qKgotICAgICAqIEBuZ2RvYyBldmVudAotICAgICAqIEBu
YW1lIG5nLiRyb3V0ZSMkcm91dGVDaGFuZ2VTdWNjZXNzCi0gICAgICogQGV2ZW50T2YgbmcuJHJv
dXRlCi0gICAgICogQGV2ZW50VHlwZSBicm9hZGNhc3Qgb24gcm9vdCBzY29wZQotICAgICAqIEBk
ZXNjcmlwdGlvbgotICAgICAqIEJyb2FkY2FzdGVkIGFmdGVyIGEgcm91dGUgZGVwZW5kZW5jaWVz
IGFyZSByZXNvbHZlZC4KLSAgICAgKiB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nVmlldyBuZ1ZpZXd9
IGxpc3RlbnMgZm9yIHRoZSBkaXJlY3RpdmUKLSAgICAgKiB0byBpbnN0YW50aWF0ZSB0aGUgY29u
dHJvbGxlciBhbmQgcmVuZGVyIHRoZSB2aWV3LgotICAgICAqCi0gICAgICogQHBhcmFtIHtPYmpl
Y3R9IGFuZ3VsYXJFdmVudCBTeW50aGV0aWMgZXZlbnQgb2JqZWN0LgotICAgICAqIEBwYXJhbSB7
Um91dGV9IGN1cnJlbnQgQ3VycmVudCByb3V0ZSBpbmZvcm1hdGlvbi4KLSAgICAgKiBAcGFyYW0g
e1JvdXRlfFVuZGVmaW5lZH0gcHJldmlvdXMgUHJldmlvdXMgcm91dGUgaW5mb3JtYXRpb24sIG9y
IHVuZGVmaW5lZCBpZiBjdXJyZW50IGlzIGZpcnN0IHJvdXRlIGVudGVyZWQuCi0gICAgICovCi0K
LSAgICAvKioKLSAgICAgKiBAbmdkb2MgZXZlbnQKLSAgICAgKiBAbmFtZSBuZy4kcm91dGUjJHJv
dXRlQ2hhbmdlRXJyb3IKLSAgICAgKiBAZXZlbnRPZiBuZy4kcm91dGUKLSAgICAgKiBAZXZlbnRU
eXBlIGJyb2FkY2FzdCBvbiByb290IHNjb3BlCi0gICAgICogQGRlc2NyaXB0aW9uCi0gICAgICog
QnJvYWRjYXN0ZWQgaWYgYW55IG9mIHRoZSByZXNvbHZlIHByb21pc2VzIGFyZSByZWplY3RlZC4K
LSAgICAgKgotICAgICAqIEBwYXJhbSB7Um91dGV9IGN1cnJlbnQgQ3VycmVudCByb3V0ZSBpbmZv
cm1hdGlvbi4KLSAgICAgKiBAcGFyYW0ge1JvdXRlfSBwcmV2aW91cyBQcmV2aW91cyByb3V0ZSBp
bmZvcm1hdGlvbi4KLSAgICAgKiBAcGFyYW0ge1JvdXRlfSByZWplY3Rpb24gUmVqZWN0aW9uIG9m
IHRoZSBwcm9taXNlLiBVc3VhbGx5IHRoZSBlcnJvciBvZiB0aGUgZmFpbGVkIHByb21pc2UuCi0g
ICAgICovCi0KLSAgICAvKioKLSAgICAgKiBAbmdkb2MgZXZlbnQKLSAgICAgKiBAbmFtZSBuZy4k
cm91dGUjJHJvdXRlVXBkYXRlCi0gICAgICogQGV2ZW50T2YgbmcuJHJvdXRlCi0gICAgICogQGV2
ZW50VHlwZSBicm9hZGNhc3Qgb24gcm9vdCBzY29wZQotICAgICAqIEBkZXNjcmlwdGlvbgotICAg
ICAqCi0gICAgICogVGhlIGByZWxvYWRPblNlYXJjaGAgcHJvcGVydHkgaGFzIGJlZW4gc2V0IHRv
IGZhbHNlLCBhbmQgd2UgYXJlIHJldXNpbmcgdGhlIHNhbWUKLSAgICAgKiBpbnN0YW5jZSBvZiB0
aGUgQ29udHJvbGxlci4KLSAgICAgKi8KLQotICAgIHZhciBmb3JjZVJlbG9hZCA9IGZhbHNlLAot
ICAgICAgICAkcm91dGUgPSB7Ci0gICAgICAgICAgcm91dGVzOiByb3V0ZXMsCi0KLSAgICAgICAg
ICAvKioKLSAgICAgICAgICAgKiBAbmdkb2MgbWV0aG9kCi0gICAgICAgICAgICogQG5hbWUgbmcu
JHJvdXRlI3JlbG9hZAotICAgICAgICAgICAqIEBtZXRob2RPZiBuZy4kcm91dGUKLSAgICAgICAg
ICAgKgotICAgICAgICAgICAqIEBkZXNjcmlwdGlvbgotICAgICAgICAgICAqIENhdXNlcyBgJHJv
dXRlYCBzZXJ2aWNlIHRvIHJlbG9hZCB0aGUgY3VycmVudCByb3V0ZSBldmVuIGlmCi0gICAgICAg
ICAgICoge0BsaW5rIG5nLiRsb2NhdGlvbiAkbG9jYXRpb259IGhhc24ndCBjaGFuZ2VkLgotICAg
ICAgICAgICAqCi0gICAgICAgICAgICogQXMgYSByZXN1bHQgb2YgdGhhdCwge0BsaW5rIG5nLmRp
cmVjdGl2ZTpuZ1ZpZXcgbmdWaWV3fQotICAgICAgICAgICAqIGNyZWF0ZXMgbmV3IHNjb3BlLCBy
ZWluc3RhbnRpYXRlcyB0aGUgY29udHJvbGxlci4KLSAgICAgICAgICAgKi8KLSAgICAgICAgICBy
ZWxvYWQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgZm9yY2VSZWxvYWQgPSB0cnVlOwotICAg
ICAgICAgICAgJHJvb3RTY29wZS4kZXZhbEFzeW5jKHVwZGF0ZVJvdXRlKTsKLSAgICAgICAgICB9
Ci0gICAgICAgIH07Ci0KLSAgICAkcm9vdFNjb3BlLiRvbignJGxvY2F0aW9uQ2hhbmdlU3VjY2Vz
cycsIHVwZGF0ZVJvdXRlKTsKLQotICAgIHJldHVybiAkcm91dGU7Ci0KLSAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIG9uIHtzdHJpbmd9IGN1cnJlbnQgdXJsCi0gICAgICogQHBhcmFtIHdoZW4g
e3N0cmluZ30gcm91dGUgd2hlbiB0ZW1wbGF0ZSB0byBtYXRjaCB0aGUgdXJsIGFnYWluc3QKLSAg
ICAgKiBAcmV0dXJuIHs/T2JqZWN0fQotICAgICAqLwotICAgIGZ1bmN0aW9uIHN3aXRjaFJvdXRl
TWF0Y2hlcihvbiwgd2hlbikgewotICAgICAgLy8gVE9ETyhpKTogdGhpcyBjb2RlIGlzIGNvbnZv
bHV0ZWQgYW5kIGluZWZmaWNpZW50LCB3ZSBzaG91bGQgY29uc3RydWN0IHRoZSByb3V0ZSBtYXRj
aGluZwotICAgICAgLy8gICByZWdleCBvbmx5IG9uY2UgYW5kIHRoZW4gcmV1c2UgaXQKLQotICAg
ICAgLy8gRXNjYXBlIHJlZ2V4cCBzcGVjaWFsIGNoYXJhY3RlcnMuCi0gICAgICB3aGVuID0gJ14n
ICsgd2hlbi5yZXBsYWNlKC9bLVwvXFxeJCorPy4oKXxbXF17fV0vZywgIlxcJCYiKSArICckJzsK
LSAgICAgIHZhciByZWdleCA9ICcnLAotICAgICAgICAgIHBhcmFtcyA9IFtdLAotICAgICAgICAg
IGRzdCA9IHt9OwotCi0gICAgICB2YXIgcmUgPSAvOihcdyspL2csCi0gICAgICAgICAgcGFyYW1N
YXRjaCwKLSAgICAgICAgICBsYXN0TWF0Y2hlZEluZGV4ID0gMDsKLQotICAgICAgd2hpbGUgKChw
YXJhbU1hdGNoID0gcmUuZXhlYyh3aGVuKSkgIT09IG51bGwpIHsKLSAgICAgICAgLy8gRmluZCBl
YWNoIDpwYXJhbSBpbiBgd2hlbmAgYW5kIHJlcGxhY2UgaXQgd2l0aCBhIGNhcHR1cmluZyBncm91
cC4KLSAgICAgICAgLy8gQXBwZW5kIGFsbCBvdGhlciBzZWN0aW9ucyBvZiB3aGVuIHVuY2hhbmdl
ZC4KLSAgICAgICAgcmVnZXggKz0gd2hlbi5zbGljZShsYXN0TWF0Y2hlZEluZGV4LCBwYXJhbU1h
dGNoLmluZGV4KTsKLSAgICAgICAgcmVnZXggKz0gJyhbXlxcL10qKSc7Ci0gICAgICAgIHBhcmFt
cy5wdXNoKHBhcmFtTWF0Y2hbMV0pOwotICAgICAgICBsYXN0TWF0Y2hlZEluZGV4ID0gcmUubGFz
dEluZGV4OwotICAgICAgfQotICAgICAgLy8gQXBwZW5kIHRyYWlsaW5nIHBhdGggcGFydC4KLSAg
ICAgIHJlZ2V4ICs9IHdoZW4uc3Vic3RyKGxhc3RNYXRjaGVkSW5kZXgpOwotCi0gICAgICB2YXIg
bWF0Y2ggPSBvbi5tYXRjaChuZXcgUmVnRXhwKHJlZ2V4KSk7Ci0gICAgICBpZiAobWF0Y2gpIHsK
LSAgICAgICAgZm9yRWFjaChwYXJhbXMsIGZ1bmN0aW9uKG5hbWUsIGluZGV4KSB7Ci0gICAgICAg
ICAgZHN0W25hbWVdID0gbWF0Y2hbaW5kZXggKyAxXTsKLSAgICAgICAgfSk7Ci0gICAgICB9Ci0g
ICAgICByZXR1cm4gbWF0Y2ggPyBkc3QgOiBudWxsOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHVw
ZGF0ZVJvdXRlKCkgewotICAgICAgdmFyIG5leHQgPSBwYXJzZVJvdXRlKCksCi0gICAgICAgICAg
bGFzdCA9ICRyb3V0ZS5jdXJyZW50OwotCi0gICAgICBpZiAobmV4dCAmJiBsYXN0ICYmIG5leHQu
JCRyb3V0ZSA9PT0gbGFzdC4kJHJvdXRlCi0gICAgICAgICAgJiYgZXF1YWxzKG5leHQucGF0aFBh
cmFtcywgbGFzdC5wYXRoUGFyYW1zKSAmJiAhbmV4dC5yZWxvYWRPblNlYXJjaCAmJiAhZm9yY2VS
ZWxvYWQpIHsKLSAgICAgICAgbGFzdC5wYXJhbXMgPSBuZXh0LnBhcmFtczsKLSAgICAgICAgY29w
eShsYXN0LnBhcmFtcywgJHJvdXRlUGFyYW1zKTsKLSAgICAgICAgJHJvb3RTY29wZS4kYnJvYWRj
YXN0KCckcm91dGVVcGRhdGUnLCBsYXN0KTsKLSAgICAgIH0gZWxzZSBpZiAobmV4dCB8fCBsYXN0
KSB7Ci0gICAgICAgIGZvcmNlUmVsb2FkID0gZmFsc2U7Ci0gICAgICAgICRyb290U2NvcGUuJGJy
b2FkY2FzdCgnJHJvdXRlQ2hhbmdlU3RhcnQnLCBuZXh0LCBsYXN0KTsKLSAgICAgICAgJHJvdXRl
LmN1cnJlbnQgPSBuZXh0OwotICAgICAgICBpZiAobmV4dCkgewotICAgICAgICAgIGlmIChuZXh0
LnJlZGlyZWN0VG8pIHsKLSAgICAgICAgICAgIGlmIChpc1N0cmluZyhuZXh0LnJlZGlyZWN0VG8p
KSB7Ci0gICAgICAgICAgICAgICRsb2NhdGlvbi5wYXRoKGludGVycG9sYXRlKG5leHQucmVkaXJl
Y3RUbywgbmV4dC5wYXJhbXMpKS5zZWFyY2gobmV4dC5wYXJhbXMpCi0gICAgICAgICAgICAgICAg
ICAgICAgIC5yZXBsYWNlKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAk
bG9jYXRpb24udXJsKG5leHQucmVkaXJlY3RUbyhuZXh0LnBhdGhQYXJhbXMsICRsb2NhdGlvbi5w
YXRoKCksICRsb2NhdGlvbi5zZWFyY2goKSkpCi0gICAgICAgICAgICAgICAgICAgICAgIC5yZXBs
YWNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
JHEud2hlbihuZXh0KS4KLSAgICAgICAgICB0aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
aWYgKG5leHQpIHsKLSAgICAgICAgICAgICAgdmFyIGtleXMgPSBbXSwKLSAgICAgICAgICAgICAg
ICAgIHZhbHVlcyA9IFtdLAotICAgICAgICAgICAgICAgICAgdGVtcGxhdGU7Ci0KLSAgICAgICAg
ICAgICAgZm9yRWFjaChuZXh0LnJlc29sdmUgfHwge30sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHsK
LSAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5KTsKLSAgICAgICAgICAgICAgICB2YWx1ZXMu
cHVzaChpc1N0cmluZyh2YWx1ZSkgPyAkaW5qZWN0b3IuZ2V0KHZhbHVlKSA6ICRpbmplY3Rvci5p
bnZva2UodmFsdWUpKTsKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGlmIChpc0Rl
ZmluZWQodGVtcGxhdGUgPSBuZXh0LnRlbXBsYXRlKSkgewotICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGlzRGVmaW5lZCh0ZW1wbGF0ZSA9IG5leHQudGVtcGxhdGVVcmwpKSB7Ci0gICAgICAgICAg
ICAgICAgdGVtcGxhdGUgPSAkaHR0cC5nZXQodGVtcGxhdGUsIHtjYWNoZTogJHRlbXBsYXRlQ2Fj
aGV9KS4KLSAgICAgICAgICAgICAgICAgICAgdGhlbihmdW5jdGlvbihyZXNwb25zZSkgeyByZXR1
cm4gcmVzcG9uc2UuZGF0YTsgfSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgaWYg
KGlzRGVmaW5lZCh0ZW1wbGF0ZSkpIHsKLSAgICAgICAgICAgICAgICBrZXlzLnB1c2goJyR0ZW1w
bGF0ZScpOwotICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHRlbXBsYXRlKTsKLSAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICByZXR1cm4gJHEuYWxsKHZhbHVlcykudGhlbihmdW5jdGlv
bih2YWx1ZXMpIHsKLSAgICAgICAgICAgICAgICB2YXIgbG9jYWxzID0ge307Ci0gICAgICAgICAg
ICAgICAgZm9yRWFjaCh2YWx1ZXMsIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewotICAgICAgICAg
ICAgICAgICAgbG9jYWxzW2tleXNbaW5kZXhdXSA9IHZhbHVlOwotICAgICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbHM7Ci0gICAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgfQotICAgICAgICAgIH0pLgotICAgICAgICAgIC8vIGFmdGVyIHJvdXRlIGNoYW5n
ZQotICAgICAgICAgIHRoZW4oZnVuY3Rpb24obG9jYWxzKSB7Ci0gICAgICAgICAgICBpZiAobmV4
dCA9PSAkcm91dGUuY3VycmVudCkgewotICAgICAgICAgICAgICBpZiAobmV4dCkgewotICAgICAg
ICAgICAgICAgIG5leHQubG9jYWxzID0gbG9jYWxzOwotICAgICAgICAgICAgICAgIGNvcHkobmV4
dC5wYXJhbXMsICRyb3V0ZVBhcmFtcyk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
JHJvb3RTY29wZS4kYnJvYWRjYXN0KCckcm91dGVDaGFuZ2VTdWNjZXNzJywgbmV4dCwgbGFzdCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHsKLSAgICAgICAg
ICAgIGlmIChuZXh0ID09ICRyb3V0ZS5jdXJyZW50KSB7Ci0gICAgICAgICAgICAgICRyb290U2Nv
cGUuJGJyb2FkY2FzdCgnJHJvdXRlQ2hhbmdlRXJyb3InLCBuZXh0LCBsYXN0LCBlcnJvcik7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgfSk7Ci0gICAgICB9Ci0gICAgfQotCi0KLSAgICAvKioK
LSAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBhY3RpdmUgcm91dGUsIGJ5IG1hdGNoaW5nIGl0
IGFnYWluc3QgdGhlIFVSTAotICAgICAqLwotICAgIGZ1bmN0aW9uIHBhcnNlUm91dGUoKSB7Ci0g
ICAgICAvLyBNYXRjaCBhIHJvdXRlCi0gICAgICB2YXIgcGFyYW1zLCBtYXRjaDsKLSAgICAgIGZv
ckVhY2gocm91dGVzLCBmdW5jdGlvbihyb3V0ZSwgcGF0aCkgewotICAgICAgICBpZiAoIW1hdGNo
ICYmIChwYXJhbXMgPSBzd2l0Y2hSb3V0ZU1hdGNoZXIoJGxvY2F0aW9uLnBhdGgoKSwgcGF0aCkp
KSB7Ci0gICAgICAgICAgbWF0Y2ggPSBpbmhlcml0KHJvdXRlLCB7Ci0gICAgICAgICAgICBwYXJh
bXM6IGV4dGVuZCh7fSwgJGxvY2F0aW9uLnNlYXJjaCgpLCBwYXJhbXMpLAotICAgICAgICAgICAg
cGF0aFBhcmFtczogcGFyYW1zfSk7Ci0gICAgICAgICAgbWF0Y2guJCRyb3V0ZSA9IHJvdXRlOwot
ICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAgIC8vIE5vIHJvdXRlIG1hdGNoZWQ7IGZhbGxiYWNr
IHRvICJvdGhlcndpc2UiIHJvdXRlCi0gICAgICByZXR1cm4gbWF0Y2ggfHwgcm91dGVzW251bGxd
ICYmIGluaGVyaXQocm91dGVzW251bGxdLCB7cGFyYW1zOiB7fSwgcGF0aFBhcmFtczp7fX0pOwot
ICAgIH0KLQotICAgIC8qKgotICAgICAqIEByZXR1cm5zIGludGVycG9sYXRpb24gb2YgdGhlIHJl
ZGlyZWN0IHBhdGggd2l0aCB0aGUgcGFyYW1ldHJzCi0gICAgICovCi0gICAgZnVuY3Rpb24gaW50
ZXJwb2xhdGUoc3RyaW5nLCBwYXJhbXMpIHsKLSAgICAgIHZhciByZXN1bHQgPSBbXTsKLSAgICAg
IGZvckVhY2goKHN0cmluZ3x8JycpLnNwbGl0KCc6JyksIGZ1bmN0aW9uKHNlZ21lbnQsIGkpIHsK
LSAgICAgICAgaWYgKGkgPT0gMCkgewotICAgICAgICAgIHJlc3VsdC5wdXNoKHNlZ21lbnQpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHZhciBzZWdtZW50TWF0Y2ggPSBzZWdtZW50Lm1h
dGNoKC8oXHcrKSguKikvKTsKLSAgICAgICAgICB2YXIga2V5ID0gc2VnbWVudE1hdGNoWzFdOwot
ICAgICAgICAgIHJlc3VsdC5wdXNoKHBhcmFtc1trZXldKTsKLSAgICAgICAgICByZXN1bHQucHVz
aChzZWdtZW50TWF0Y2hbMl0gfHwgJycpOwotICAgICAgICAgIGRlbGV0ZSBwYXJhbXNba2V5XTsK
LSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICByZXR1cm4gcmVzdWx0LmpvaW4oJycpOwotICAg
IH0KLSAgfV07Ci19Ci0KLS8qKgotICogQG5nZG9jIG9iamVjdAotICogQG5hbWUgbmcuJHJvdXRl
UGFyYW1zCi0gKiBAcmVxdWlyZXMgJHJvdXRlCi0gKgotICogQGRlc2NyaXB0aW9uCi0gKiBDdXJy
ZW50IHNldCBvZiByb3V0ZSBwYXJhbWV0ZXJzLiBUaGUgcm91dGUgcGFyYW1ldGVycyBhcmUgYSBj
b21iaW5hdGlvbiBvZiB0aGUKLSAqIHtAbGluayBuZy4kbG9jYXRpb24gJGxvY2F0aW9ufSBgc2Vh
cmNoKClgLCBhbmQgYHBhdGgoKWAuIFRoZSBgcGF0aGAgcGFyYW1ldGVycwotICogYXJlIGV4dHJh
Y3RlZCB3aGVuIHRoZSB7QGxpbmsgbmcuJHJvdXRlICRyb3V0ZX0gcGF0aCBpcyBtYXRjaGVkLgot
ICoKLSAqIEluIGNhc2Ugb2YgcGFyYW1ldGVyIG5hbWUgY29sbGlzaW9uLCBgcGF0aGAgcGFyYW1z
IHRha2UgcHJlY2VkZW5jZSBvdmVyIGBzZWFyY2hgIHBhcmFtcy4KLSAqCi0gKiBUaGUgc2Vydmlj
ZSBndWFyYW50ZWVzIHRoYXQgdGhlIGlkZW50aXR5IG9mIHRoZSBgJHJvdXRlUGFyYW1zYCBvYmpl
Y3Qgd2lsbCByZW1haW4gdW5jaGFuZ2VkCi0gKiAoYnV0IGl0cyBwcm9wZXJ0aWVzIHdpbGwgbGlr
ZWx5IGNoYW5nZSkgZXZlbiB3aGVuIGEgcm91dGUgY2hhbmdlIG9jY3Vycy4KLSAqCi0gKiBAZXhh
bXBsZQotICogPHByZT4KLSAqICAvLyBHaXZlbjoKLSAqICAvLyBVUkw6IGh0dHA6Ly9zZXJ2ZXIu
Y29tL2luZGV4Lmh0bWwjL0NoYXB0ZXIvMS9TZWN0aW9uLzI/c2VhcmNoPW1vYnkKLSAqICAvLyBS
b3V0ZTogL0NoYXB0ZXIvOmNoYXB0ZXJJZC9TZWN0aW9uLzpzZWN0aW9uSWQKLSAqICAvLwotICog
IC8vIFRoZW4KLSAqICAkcm91dGVQYXJhbXMgPT0+IHtjaGFwdGVySWQ6MSwgc2VjdGlvbklkOjIs
IHNlYXJjaDonbW9ieSd9Ci0gKiA8L3ByZT4KLSAqLwotZnVuY3Rpb24gJFJvdXRlUGFyYW1zUHJv
dmlkZXIoKSB7Ci0gIHRoaXMuJGdldCA9IHZhbHVlRm4oe30pOwotfQotCi0vKioKLSAqIERFU0lH
TiBOT1RFUwotICoKLSAqIFRoZSBkZXNpZ24gZGVjaXNpb25zIGJlaGluZCB0aGUgc2NvcGUgYXJl
IGhlYXZpbHkgZmF2b3JlZCBmb3Igc3BlZWQgYW5kIG1lbW9yeSBjb25zdW1wdGlvbi4KLSAqCi0g
KiBUaGUgdHlwaWNhbCB1c2Ugb2Ygc2NvcGUgaXMgdG8gd2F0Y2ggdGhlIGV4cHJlc3Npb25zLCB3
aGljaCBtb3N0IG9mIHRoZSB0aW1lIHJldHVybiB0aGUgc2FtZQotICogdmFsdWUgYXMgbGFzdCB0
aW1lIHNvIHdlIG9wdGltaXplIHRoZSBvcGVyYXRpb24uCi0gKgotICogQ2xvc3VyZXMgY29uc3Ry
dWN0aW9uIGlzIGV4cGVuc2l2ZSBpbiB0ZXJtcyBvZiBzcGVlZCBhcyB3ZWxsIGFzIG1lbW9yeToK
LSAqICAgLSBObyBjbG9zdXJlcywgaW5zdGVhZCB1c2UgcHJvdG90eXBpY2FsIGluaGVyaXRhbmNl
IGZvciBBUEkKLSAqICAgLSBJbnRlcm5hbCBzdGF0ZSBuZWVkcyB0byBiZSBzdG9yZWQgb24gc2Nv
cGUgZGlyZWN0bHksIHdoaWNoIG1lYW5zIHRoYXQgcHJpdmF0ZSBzdGF0ZSBpcwotICogICAgIGV4
cG9zZWQgYXMgJCRfX19fIHByb3BlcnRpZXMKLSAqCi0gKiBMb29wIG9wZXJhdGlvbnMgYXJlIG9w
dGltaXplZCBieSB1c2luZyB3aGlsZShjb3VudC0tKSB7IC4uLiB9Ci0gKiAgIC0gdGhpcyBtZWFu
cyB0aGF0IGluIG9yZGVyIHRvIGtlZXAgdGhlIHNhbWUgb3JkZXIgb2YgZXhlY3V0aW9uIGFzIGFk
ZGl0aW9uIHdlIGhhdmUgdG8gYWRkCi0gKiAgICAgaXRlbXMgdG8gdGhlIGFycmF5IGF0IHRoZSBi
ZWdpbm5pbmcgKHNoaWZ0KSBpbnN0ZWFkIG9mIGF0IHRoZSBlbmQgKHB1c2gpCi0gKgotICogQ2hp
bGQgc2NvcGVzIGFyZSBjcmVhdGVkIGFuZCByZW1vdmVkIG9mdGVuCi0gKiAgIC0gVXNpbmcgYW4g
YXJyYXkgd291bGQgYmUgc2xvdyBzaW5jZSBpbnNlcnRzIGluIG1pZGRsZSBhcmUgZXhwZW5zaXZl
IHNvIHdlIHVzZSBsaW5rZWQgbGlzdAotICoKLSAqIFRoZXJlIGFyZSBmZXcgd2F0Y2hlcyB0aGVu
IGEgbG90IG9mIG9ic2VydmVycy4gVGhpcyBpcyB3aHkgeW91IGRvbid0IHdhbnQgdGhlIG9ic2Vy
dmVyIHRvIGJlCi0gKiBpbXBsZW1lbnRlZCBpbiB0aGUgc2FtZSB3YXkgYXMgd2F0Y2guIFdhdGNo
IHJlcXVpcmVzIHJldHVybiBvZiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiB3aGljaAotICogYXJl
IGV4cGVuc2l2ZSB0byBjb25zdHJ1Y3QuCi0gKi8KLQotCi0vKioKLSAqIEBuZ2RvYyBvYmplY3QK
LSAqIEBuYW1lIG5nLiRyb290U2NvcGVQcm92aWRlcgotICogQGRlc2NyaXB0aW9uCi0gKgotICog
UHJvdmlkZXIgZm9yIHRoZSAkcm9vdFNjb3BlIHNlcnZpY2UuCi0gKi8KLQotLyoqCi0gKiBAbmdk
b2MgZnVuY3Rpb24KLSAqIEBuYW1lIG5nLiRyb290U2NvcGVQcm92aWRlciNkaWdlc3RUdGwKLSAq
IEBtZXRob2RPZiBuZy4kcm9vdFNjb3BlUHJvdmlkZXIKLSAqIEBkZXNjcmlwdGlvbgotICoKLSAq
IFNldHMgdGhlIG51bWJlciBvZiBkaWdlc3QgaXRlcmF0aW9ucyB0aGUgc2NvcGUgc2hvdWxkIGF0
dGVtcHQgdG8gZXhlY3V0ZSBiZWZvcmUgZ2l2aW5nIHVwIGFuZAotICogYXNzdW1pbmcgdGhhdCB0
aGUgbW9kZWwgaXMgdW5zdGFibGUuCi0gKgotICogVGhlIGN1cnJlbnQgZGVmYXVsdCBpcyAxMCBp
dGVyYXRpb25zLgotICoKLSAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCBUaGUgbnVtYmVyIG9mIGRp
Z2VzdCBpdGVyYXRpb25zLgotICovCi0KLQotLyoqCi0gKiBAbmdkb2Mgb2JqZWN0Ci0gKiBAbmFt
ZSBuZy4kcm9vdFNjb3BlCi0gKiBAZGVzY3JpcHRpb24KLSAqCi0gKiBFdmVyeSBhcHBsaWNhdGlv
biBoYXMgYSBzaW5nbGUgcm9vdCB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSBzY29wZX0uCi0g
KiBBbGwgb3RoZXIgc2NvcGVzIGFyZSBjaGlsZCBzY29wZXMgb2YgdGhlIHJvb3Qgc2NvcGUuIFNj
b3BlcyBwcm92aWRlIG1lY2hhbmlzbSBmb3Igd2F0Y2hpbmcgdGhlIG1vZGVsIGFuZCBwcm92aWRl
Ci0gKiBldmVudCBwcm9jZXNzaW5nIGxpZmUtY3ljbGUuIFNlZSB7QGxpbmsgZ3VpZGUvc2NvcGUg
ZGV2ZWxvcGVyIGd1aWRlIG9uIHNjb3Blc30uCi0gKi8KLWZ1bmN0aW9uICRSb290U2NvcGVQcm92
aWRlcigpewotICB2YXIgVFRMID0gMTA7Ci0KLSAgdGhpcy5kaWdlc3RUdGwgPSBmdW5jdGlvbih2
YWx1ZSkgewotICAgIGlmIChhcmd1bWVudHMubGVuZ3RoKSB7Ci0gICAgICBUVEwgPSB2YWx1ZTsK
LSAgICB9Ci0gICAgcmV0dXJuIFRUTDsKLSAgfTsKLQotICB0aGlzLiRnZXQgPSBbJyRpbmplY3Rv
cicsICckZXhjZXB0aW9uSGFuZGxlcicsICckcGFyc2UnLAotICAgICAgZnVuY3Rpb24oICRpbmpl
Y3RvciwgICAkZXhjZXB0aW9uSGFuZGxlciwgICAkcGFyc2UpIHsKLQotICAgIC8qKgotICAgICAq
IEBuZ2RvYyBmdW5jdGlvbgotICAgICAqIEBuYW1lIG5nLiRyb290U2NvcGUuU2NvcGUKLSAgICAg
KgotICAgICAqIEBkZXNjcmlwdGlvbgotICAgICAqIEEgcm9vdCBzY29wZSBjYW4gYmUgcmV0cmll
dmVkIHVzaW5nIHRoZSB7QGxpbmsgbmcuJHJvb3RTY29wZSAkcm9vdFNjb3BlfSBrZXkgZnJvbSB0
aGUKLSAgICAgKiB7QGxpbmsgQVVUTy4kaW5qZWN0b3IgJGluamVjdG9yfS4gQ2hpbGQgc2NvcGVz
IGFyZSBjcmVhdGVkIHVzaW5nIHRoZQotICAgICAqIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3Bl
IyRuZXcgJG5ldygpfSBtZXRob2QuIChNb3N0IHNjb3BlcyBhcmUgY3JlYXRlZCBhdXRvbWF0aWNh
bGx5IHdoZW4KLSAgICAgKiBjb21waWxlZCBIVE1MIHRlbXBsYXRlIGlzIGV4ZWN1dGVkLikKLSAg
ICAgKgotICAgICAqIEhlcmUgaXMgYSBzaW1wbGUgc2NvcGUgc25pcHBldCB0byBzaG93IGhvdyB5
b3UgY2FuIGludGVyYWN0IHdpdGggdGhlIHNjb3BlLgotICAgICAqIDxwcmU+Ci0gICAgICAgIGFu
Z3VsYXIuaW5qZWN0b3IoWyduZyddKS5pbnZva2UoZnVuY3Rpb24oJHJvb3RTY29wZSkgewotICAg
ICAgICAgICB2YXIgc2NvcGUgPSAkcm9vdFNjb3BlLiRuZXcoKTsKLSAgICAgICAgICAgc2NvcGUu
c2FsdXRhdGlvbiA9ICdIZWxsbyc7Ci0gICAgICAgICAgIHNjb3BlLm5hbWUgPSAnV29ybGQnOwot
Ci0gICAgICAgICAgIGV4cGVjdChzY29wZS5ncmVldGluZykudG9FcXVhbCh1bmRlZmluZWQpOwot
Ci0gICAgICAgICAgIHNjb3BlLiR3YXRjaCgnbmFtZScsIGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgIHNjb3BlLmdyZWV0aW5nID0gc2NvcGUuc2FsdXRhdGlvbiArICcgJyArIHNjb3BlLm5hbWUg
KyAnISc7Ci0gICAgICAgICAgIH0pOyAvLyBpbml0aWFsaXplIHRoZSB3YXRjaAotCi0gICAgICAg
ICAgIGV4cGVjdChzY29wZS5ncmVldGluZykudG9FcXVhbCh1bmRlZmluZWQpOwotICAgICAgICAg
ICBzY29wZS5uYW1lID0gJ01pc2tvJzsKLSAgICAgICAgICAgLy8gc3RpbGwgb2xkIHZhbHVlLCBz
aW5jZSB3YXRjaGVzIGhhdmUgbm90IGJlZW4gY2FsbGVkIHlldAotICAgICAgICAgICBleHBlY3Qo
c2NvcGUuZ3JlZXRpbmcpLnRvRXF1YWwodW5kZWZpbmVkKTsKLQotICAgICAgICAgICBzY29wZS4k
ZGlnZXN0KCk7IC8vIGZpcmUgYWxsICB0aGUgd2F0Y2hlcwotICAgICAgICAgICBleHBlY3Qoc2Nv
cGUuZ3JlZXRpbmcpLnRvRXF1YWwoJ0hlbGxvIE1pc2tvIScpOwotICAgICAgICB9KTsKLSAgICAg
KiA8L3ByZT4KLSAgICAgKgotICAgICAqICMgSW5oZXJpdGFuY2UKLSAgICAgKiBBIHNjb3BlIGNh
biBpbmhlcml0IGZyb20gYSBwYXJlbnQgc2NvcGUsIGFzIGluIHRoaXMgZXhhbXBsZToKLSAgICAg
KiA8cHJlPgotICAgICAgICAgdmFyIHBhcmVudCA9ICRyb290U2NvcGU7Ci0gICAgICAgICB2YXIg
Y2hpbGQgPSBwYXJlbnQuJG5ldygpOwotCi0gICAgICAgICBwYXJlbnQuc2FsdXRhdGlvbiA9ICJI
ZWxsbyI7Ci0gICAgICAgICBjaGlsZC5uYW1lID0gIldvcmxkIjsKLSAgICAgICAgIGV4cGVjdChj
aGlsZC5zYWx1dGF0aW9uKS50b0VxdWFsKCdIZWxsbycpOwotCi0gICAgICAgICBjaGlsZC5zYWx1
dGF0aW9uID0gIldlbGNvbWUiOwotICAgICAgICAgZXhwZWN0KGNoaWxkLnNhbHV0YXRpb24pLnRv
RXF1YWwoJ1dlbGNvbWUnKTsKLSAgICAgICAgIGV4cGVjdChwYXJlbnQuc2FsdXRhdGlvbikudG9F
cXVhbCgnSGVsbG8nKTsKLSAgICAgKiA8L3ByZT4KLSAgICAgKgotICAgICAqCi0gICAgICogQHBh
cmFtIHtPYmplY3QuPHN0cmluZywgZnVuY3Rpb24oKT49fSBwcm92aWRlcnMgTWFwIG9mIHNlcnZp
Y2UgZmFjdG9yeSB3aGljaCBuZWVkIHRvIGJlIHByb3ZpZGVkCi0gICAgICogICAgIGZvciB0aGUg
Y3VycmVudCBzY29wZS4gRGVmYXVsdHMgdG8ge0BsaW5rIG5nfS4KLSAgICAgKiBAcGFyYW0ge09i
amVjdC48c3RyaW5nLCAqPj19IGluc3RhbmNlQ2FjaGUgUHJvdmlkZXMgcHJlLWluc3RhbnRpYXRl
ZCBzZXJ2aWNlcyB3aGljaCBzaG91bGQKLSAgICAgKiAgICAgYXBwZW5kL292ZXJyaWRlIHNlcnZp
Y2VzIHByb3ZpZGVkIGJ5IGBwcm92aWRlcnNgLiBUaGlzIGlzIGhhbmR5IHdoZW4gdW5pdC10ZXN0
aW5nIGFuZCBoYXZpbmcKLSAgICAgKiAgICAgdGhlIG5lZWQgdG8gb3ZlcnJpZGUgYSBkZWZhdWx0
IHNlcnZpY2UuCi0gICAgICogQHJldHVybnMge09iamVjdH0gTmV3bHkgY3JlYXRlZCBzY29wZS4K
LSAgICAgKgotICAgICAqLwotICAgIGZ1bmN0aW9uIFNjb3BlKCkgewotICAgICAgdGhpcy4kaWQg
PSBuZXh0VWlkKCk7Ci0gICAgICB0aGlzLiQkcGhhc2UgPSB0aGlzLiRwYXJlbnQgPSB0aGlzLiQk
d2F0Y2hlcnMgPQotICAgICAgICAgICAgICAgICAgICAgdGhpcy4kJG5leHRTaWJsaW5nID0gdGhp
cy4kJHByZXZTaWJsaW5nID0KLSAgICAgICAgICAgICAgICAgICAgIHRoaXMuJCRjaGlsZEhlYWQg
PSB0aGlzLiQkY2hpbGRUYWlsID0gbnVsbDsKLSAgICAgIHRoaXNbJ3RoaXMnXSA9IHRoaXMuJHJv
b3QgPSAgdGhpczsKLSAgICAgIHRoaXMuJCRkZXN0cm95ZWQgPSBmYWxzZTsKLSAgICAgIHRoaXMu
JCRhc3luY1F1ZXVlID0gW107Ci0gICAgICB0aGlzLiQkbGlzdGVuZXJzID0ge307Ci0gICAgICB0
aGlzLiQkaXNvbGF0ZUJpbmRpbmdzID0ge307Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQG5n
ZG9jIHByb3BlcnR5Ci0gICAgICogQG5hbWUgbmcuJHJvb3RTY29wZS5TY29wZSMkaWQKLSAgICAg
KiBAcHJvcGVydHlPZiBuZy4kcm9vdFNjb3BlLlNjb3BlCi0gICAgICogQHJldHVybnMge251bWJl
cn0gVW5pcXVlIHNjb3BlIElEIChtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgYWxwaGFudW1lcmlj
IHNlcXVlbmNlKSB1c2VmdWwgZm9yCi0gICAgICogICBkZWJ1Z2dpbmcuCi0gICAgICovCi0KLQot
ICAgIFNjb3BlLnByb3RvdHlwZSA9IHsKLSAgICAgIC8qKgotICAgICAgICogQG5nZG9jIGZ1bmN0
aW9uCi0gICAgICAgKiBAbmFtZSBuZy4kcm9vdFNjb3BlLlNjb3BlIyRuZXcKLSAgICAgICAqIEBt
ZXRob2RPZiBuZy4kcm9vdFNjb3BlLlNjb3BlCi0gICAgICAgKiBAZnVuY3Rpb24KLSAgICAgICAq
Ci0gICAgICAgKiBAZGVzY3JpcHRpb24KLSAgICAgICAqIENyZWF0ZXMgYSBuZXcgY2hpbGQge0Bs
aW5rIG5nLiRyb290U2NvcGUuU2NvcGUgc2NvcGV9LgotICAgICAgICoKLSAgICAgICAqIFRoZSBw
YXJlbnQgc2NvcGUgd2lsbCBwcm9wYWdhdGUgdGhlIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3Bl
IyRkaWdlc3QgJGRpZ2VzdCgpfSBhbmQKLSAgICAgICAqIHtAbGluayBuZy4kcm9vdFNjb3BlLlNj
b3BlIyRkaWdlc3QgJGRpZ2VzdCgpfSBldmVudHMuIFRoZSBzY29wZSBjYW4gYmUgcmVtb3ZlZCBm
cm9tIHRoZSBzY29wZQotICAgICAgICogaGllcmFyY2h5IHVzaW5nIHtAbGluayBuZy4kcm9vdFNj
b3BlLlNjb3BlIyRkZXN0cm95ICRkZXN0cm95KCl9LgotICAgICAgICoKLSAgICAgICAqIHtAbGlu
ayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRkZXN0cm95ICRkZXN0cm95KCl9IG11c3QgYmUgY2FsbGVk
IG9uIGEgc2NvcGUgd2hlbiBpdCBpcyBkZXNpcmVkIGZvcgotICAgICAgICogdGhlIHNjb3BlIGFu
ZCBpdHMgY2hpbGQgc2NvcGVzIHRvIGJlIHBlcm1hbmVudGx5IGRldGFjaGVkIGZyb20gdGhlIHBh
cmVudCBhbmQgdGh1cyBzdG9wCi0gICAgICAgKiBwYXJ0aWNpcGF0aW5nIGluIG1vZGVsIGNoYW5n
ZSBkZXRlY3Rpb24gYW5kIGxpc3RlbmVyIG5vdGlmaWNhdGlvbiBieSBpbnZva2luZy4KLSAgICAg
ICAqCi0gICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzb2xhdGUgaWYgdHJ1ZSB0aGVuIHRoZSBz
Y29wZSBkb2VzIG5vdCBwcm90b3R5cGljYWxseSBpbmhlcml0IGZyb20gdGhlCi0gICAgICAgKiAg
ICAgICAgIHBhcmVudCBzY29wZS4gVGhlIHNjb3BlIGlzIGlzb2xhdGVkLCBhcyBpdCBjYW4gbm90
IHNlZSBwYXJlbnQgc2NvcGUgcHJvcGVydGllcy4KLSAgICAgICAqICAgICAgICAgV2hlbiBjcmVh
dGluZyB3aWRnZXRzIGl0IGlzIHVzZWZ1bCBmb3IgdGhlIHdpZGdldCB0byBub3QgYWNjaWRlbnRh
bGx5IHJlYWQgcGFyZW50Ci0gICAgICAgKiAgICAgICAgIHN0YXRlLgotICAgICAgICoKLSAgICAg
ICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBuZXdseSBjcmVhdGVkIGNoaWxkIHNjb3BlLgotICAg
ICAgICoKLSAgICAgICAqLwotICAgICAgJG5ldzogZnVuY3Rpb24oaXNvbGF0ZSkgewotICAgICAg
ICB2YXIgQ2hpbGQsCi0gICAgICAgICAgICBjaGlsZDsKLQotICAgICAgICBpZiAoaXNGdW5jdGlv
bihpc29sYXRlKSkgewotICAgICAgICAgIC8vIFRPRE86IHJlbW92ZSBhdCBzb21lIHBvaW50Ci0g
ICAgICAgICAgdGhyb3cgRXJyb3IoJ0FQSS1DSEFOR0U6IFVzZSAkY29udHJvbGxlciB0byBpbnN0
YW50aWF0ZSBjb250cm9sbGVycy4nKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaXNvbGF0ZSkg
ewotICAgICAgICAgIGNoaWxkID0gbmV3IFNjb3BlKCk7Ci0gICAgICAgICAgY2hpbGQuJHJvb3Qg
PSB0aGlzLiRyb290OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIENoaWxkID0gZnVuY3Rp
b24oKSB7fTsgLy8gc2hvdWxkIGJlIGFub255bW91czsgVGhpcyBpcyBzbyB0aGF0IHdoZW4gdGhl
IG1pbmlmaWVyIG11bmdlcwotICAgICAgICAgICAgLy8gdGhlIG5hbWUgaXQgZG9lcyBub3QgYmVj
b21lIHJhbmRvbSBzZXQgb2YgY2hhcnMuIFRoZXNlIHdpbGwgdGhlbiBzaG93IHVwIGFzIGNsYXNz
Ci0gICAgICAgICAgICAvLyBuYW1lIGluIHRoZSBkZWJ1Z2dlci4KLSAgICAgICAgICBDaGlsZC5w
cm90b3R5cGUgPSB0aGlzOwotICAgICAgICAgIGNoaWxkID0gbmV3IENoaWxkKCk7Ci0gICAgICAg
ICAgY2hpbGQuJGlkID0gbmV4dFVpZCgpOwotICAgICAgICB9Ci0gICAgICAgIGNoaWxkWyd0aGlz
J10gPSBjaGlsZDsKLSAgICAgICAgY2hpbGQuJCRsaXN0ZW5lcnMgPSB7fTsKLSAgICAgICAgY2hp
bGQuJHBhcmVudCA9IHRoaXM7Ci0gICAgICAgIGNoaWxkLiQkYXN5bmNRdWV1ZSA9IFtdOwotICAg
ICAgICBjaGlsZC4kJHdhdGNoZXJzID0gY2hpbGQuJCRuZXh0U2libGluZyA9IGNoaWxkLiQkY2hp
bGRIZWFkID0gY2hpbGQuJCRjaGlsZFRhaWwgPSBudWxsOwotICAgICAgICBjaGlsZC4kJHByZXZT
aWJsaW5nID0gdGhpcy4kJGNoaWxkVGFpbDsKLSAgICAgICAgaWYgKHRoaXMuJCRjaGlsZEhlYWQp
IHsKLSAgICAgICAgICB0aGlzLiQkY2hpbGRUYWlsLiQkbmV4dFNpYmxpbmcgPSBjaGlsZDsKLSAg
ICAgICAgICB0aGlzLiQkY2hpbGRUYWlsID0gY2hpbGQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgdGhpcy4kJGNoaWxkSGVhZCA9IHRoaXMuJCRjaGlsZFRhaWwgPSBjaGlsZDsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gY2hpbGQ7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAg
ICAqIEBuZ2RvYyBmdW5jdGlvbgotICAgICAgICogQG5hbWUgbmcuJHJvb3RTY29wZS5TY29wZSMk
d2F0Y2gKLSAgICAgICAqIEBtZXRob2RPZiBuZy4kcm9vdFNjb3BlLlNjb3BlCi0gICAgICAgKiBA
ZnVuY3Rpb24KLSAgICAgICAqCi0gICAgICAgKiBAZGVzY3JpcHRpb24KLSAgICAgICAqIFJlZ2lz
dGVycyBhIGBsaXN0ZW5lcmAgY2FsbGJhY2sgdG8gYmUgZXhlY3V0ZWQgd2hlbmV2ZXIgdGhlIGB3
YXRjaEV4cHJlc3Npb25gIGNoYW5nZXMuCi0gICAgICAgKgotICAgICAgICogLSBUaGUgYHdhdGNo
RXhwcmVzc2lvbmAgaXMgY2FsbGVkIG9uIGV2ZXJ5IGNhbGwgdG8ge0BsaW5rIG5nLiRyb290U2Nv
cGUuU2NvcGUjJGRpZ2VzdCAkZGlnZXN0KCl9IGFuZAotICAgICAgICogICBzaG91bGQgcmV0dXJu
IHRoZSB2YWx1ZSB3aGljaCB3aWxsIGJlIHdhdGNoZWQuIChTaW5jZSB7QGxpbmsgbmcuJHJvb3RT
Y29wZS5TY29wZSMkZGlnZXN0ICRkaWdlc3QoKX0KLSAgICAgICAqICAgcmVydW5zIHdoZW4gaXQg
ZGV0ZWN0cyBjaGFuZ2VzIHRoZSBgd2F0Y2hFeHByZXNzaW9uYCBjYW4gZXhlY3V0ZSBtdWx0aXBs
ZSB0aW1lcyBwZXIKLSAgICAgICAqICAge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGRpZ2Vz
dCAkZGlnZXN0KCl9IGFuZCBzaG91bGQgYmUgaWRlbXBvdGVudC4pCi0gICAgICAgKiAtIFRoZSBg
bGlzdGVuZXJgIGlzIGNhbGxlZCBvbmx5IHdoZW4gdGhlIHZhbHVlIGZyb20gdGhlIGN1cnJlbnQg
YHdhdGNoRXhwcmVzc2lvbmAgYW5kIHRoZQotICAgICAgICogICBwcmV2aW91cyBjYWxsIHRvIGB3
YXRjaEV4cHJlc3Npb25gIGFyZSBub3QgZXF1YWwgKHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUg
aW5pdGlhbCBydW4sCi0gICAgICAgKiAgIHNlZSBiZWxvdykuIFRoZSBpbmVxdWFsaXR5IGlzIGRl
dGVybWluZWQgYWNjb3JkaW5nIHRvCi0gICAgICAgKiAgIHtAbGluayBhbmd1bGFyLmVxdWFsc30g
ZnVuY3Rpb24uIFRvIHNhdmUgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgZm9yIGxhdGVyIGNvbXBh
cmlzb24sIHRoZQotICAgICAgICogICB7QGxpbmsgYW5ndWxhci5jb3B5fSBmdW5jdGlvbiBpcyB1
c2VkLiBJdCBhbHNvIG1lYW5zIHRoYXQgd2F0Y2hpbmcgY29tcGxleCBvcHRpb25zIHdpbGwKLSAg
ICAgICAqICAgaGF2ZSBhZHZlcnNlIG1lbW9yeSBhbmQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25z
LgotICAgICAgICogLSBUaGUgd2F0Y2ggYGxpc3RlbmVyYCBtYXkgY2hhbmdlIHRoZSBtb2RlbCwg
d2hpY2ggbWF5IHRyaWdnZXIgb3RoZXIgYGxpc3RlbmVyYHMgdG8gZmlyZS4gVGhpcwotICAgICAg
ICogICBpcyBhY2hpZXZlZCBieSByZXJ1bm5pbmcgdGhlIHdhdGNoZXJzIHVudGlsIG5vIGNoYW5n
ZXMgYXJlIGRldGVjdGVkLiBUaGUgcmVydW4gaXRlcmF0aW9uCi0gICAgICAgKiAgIGxpbWl0IGlz
IDEwIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCBkZWFkbG9jay4KLSAgICAgICAqCi0gICAg
ICAgKgotICAgICAgICogSWYgeW91IHdhbnQgdG8gYmUgbm90aWZpZWQgd2hlbmV2ZXIge0BsaW5r
IG5nLiRyb290U2NvcGUuU2NvcGUjJGRpZ2VzdCAkZGlnZXN0fSBpcyBjYWxsZWQsCi0gICAgICAg
KiB5b3UgY2FuIHJlZ2lzdGVyIGEgYHdhdGNoRXhwcmVzc2lvbmAgZnVuY3Rpb24gd2l0aCBubyBg
bGlzdGVuZXJgLiAoU2luY2UgYHdhdGNoRXhwcmVzc2lvbmAKLSAgICAgICAqIGNhbiBleGVjdXRl
IG11bHRpcGxlIHRpbWVzIHBlciB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkZGlnZXN0ICRk
aWdlc3R9IGN5Y2xlIHdoZW4gYSBjaGFuZ2UgaXMKLSAgICAgICAqIGRldGVjdGVkLCBiZSBwcmVw
YXJlZCBmb3IgbXVsdGlwbGUgY2FsbHMgdG8geW91ciBsaXN0ZW5lci4pCi0gICAgICAgKgotICAg
ICAgICogQWZ0ZXIgYSB3YXRjaGVyIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgc2NvcGUsIHRoZSBg
bGlzdGVuZXJgIGZuIGlzIGNhbGxlZCBhc3luY2hyb25vdXNseQotICAgICAgICogKHZpYSB7QGxp
bmsgbmcuJHJvb3RTY29wZS5TY29wZSMkZXZhbEFzeW5jICRldmFsQXN5bmN9KSB0byBpbml0aWFs
aXplIHRoZQotICAgICAgICogd2F0Y2hlci4gSW4gcmFyZSBjYXNlcywgdGhpcyBpcyB1bmRlc2ly
YWJsZSBiZWNhdXNlIHRoZSBsaXN0ZW5lciBpcyBjYWxsZWQgd2hlbiB0aGUgcmVzdWx0Ci0gICAg
ICAgKiBvZiBgd2F0Y2hFeHByZXNzaW9uYCBkaWRuJ3QgY2hhbmdlLiBUbyBkZXRlY3QgdGhpcyBz
Y2VuYXJpbyB3aXRoaW4gdGhlIGBsaXN0ZW5lcmAgZm4sIHlvdQotICAgICAgICogY2FuIGNvbXBh
cmUgdGhlIGBuZXdWYWxgIGFuZCBgb2xkVmFsYC4gSWYgdGhlc2UgdHdvIHZhbHVlcyBhcmUgaWRl
bnRpY2FsIChgPT09YCkgdGhlbiB0aGUKLSAgICAgICAqIGxpc3RlbmVyIHdhcyBjYWxsZWQgZHVl
IHRvIGluaXRpYWxpemF0aW9uLgotICAgICAgICoKLSAgICAgICAqCi0gICAgICAgKiAjIEV4YW1w
bGUKLSAgICAgICAqIDxwcmU+Ci0gICAgICAgICAgIC8vIGxldCdzIGFzc3VtZSB0aGF0IHNjb3Bl
IHdhcyBkZXBlbmRlbmN5IGluamVjdGVkIGFzIHRoZSAkcm9vdFNjb3BlCi0gICAgICAgICAgIHZh
ciBzY29wZSA9ICRyb290U2NvcGU7Ci0gICAgICAgICAgIHNjb3BlLm5hbWUgPSAnbWlza28nOwot
ICAgICAgICAgICBzY29wZS5jb3VudGVyID0gMDsKLQotICAgICAgICAgICBleHBlY3Qoc2NvcGUu
Y291bnRlcikudG9FcXVhbCgwKTsKLSAgICAgICAgICAgc2NvcGUuJHdhdGNoKCduYW1lJywgZnVu
Y3Rpb24obmV3VmFsdWUsIG9sZFZhbHVlKSB7IHNjb3BlLmNvdW50ZXIgPSBzY29wZS5jb3VudGVy
ICsgMTsgfSk7Ci0gICAgICAgICAgIGV4cGVjdChzY29wZS5jb3VudGVyKS50b0VxdWFsKDApOwot
Ci0gICAgICAgICAgIHNjb3BlLiRkaWdlc3QoKTsKLSAgICAgICAgICAgLy8gbm8gdmFyaWFibGUg
Y2hhbmdlCi0gICAgICAgICAgIGV4cGVjdChzY29wZS5jb3VudGVyKS50b0VxdWFsKDApOwotCi0g
ICAgICAgICAgIHNjb3BlLm5hbWUgPSAnYWRhbSc7Ci0gICAgICAgICAgIHNjb3BlLiRkaWdlc3Qo
KTsKLSAgICAgICAgICAgZXhwZWN0KHNjb3BlLmNvdW50ZXIpLnRvRXF1YWwoMSk7Ci0gICAgICAg
KiA8L3ByZT4KLSAgICAgICAqCi0gICAgICAgKgotICAgICAgICoKLSAgICAgICAqIEBwYXJhbSB7
KGZ1bmN0aW9uKCl8c3RyaW5nKX0gd2F0Y2hFeHByZXNzaW9uIEV4cHJlc3Npb24gdGhhdCBpcyBl
dmFsdWF0ZWQgb24gZWFjaAotICAgICAgICogICAge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUj
JGRpZ2VzdCAkZGlnZXN0fSBjeWNsZS4gQSBjaGFuZ2UgaW4gdGhlIHJldHVybiB2YWx1ZSB0cmln
Z2VycyBhCi0gICAgICAgKiAgICBjYWxsIHRvIHRoZSBgbGlzdGVuZXJgLgotICAgICAgICoKLSAg
ICAgICAqICAgIC0gYHN0cmluZ2A6IEV2YWx1YXRlZCBhcyB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lv
biBleHByZXNzaW9ufQotICAgICAgICogICAgLSBgZnVuY3Rpb24oc2NvcGUpYDogY2FsbGVkIHdp
dGggY3VycmVudCBgc2NvcGVgIGFzIGEgcGFyYW1ldGVyLgotICAgICAgICogQHBhcmFtIHsoZnVu
Y3Rpb24oKXxzdHJpbmcpPX0gbGlzdGVuZXIgQ2FsbGJhY2sgY2FsbGVkIHdoZW5ldmVyIHRoZSBy
ZXR1cm4gdmFsdWUgb2YKLSAgICAgICAqICAgdGhlIGB3YXRjaEV4cHJlc3Npb25gIGNoYW5nZXMu
Ci0gICAgICAgKgotICAgICAgICogICAgLSBgc3RyaW5nYDogRXZhbHVhdGVkIGFzIHtAbGluayBn
dWlkZS9leHByZXNzaW9uIGV4cHJlc3Npb259Ci0gICAgICAgKiAgICAtIGBmdW5jdGlvbihuZXdW
YWx1ZSwgb2xkVmFsdWUsIHNjb3BlKWA6IGNhbGxlZCB3aXRoIGN1cnJlbnQgYW5kIHByZXZpb3Vz
IHZhbHVlcyBhcyBwYXJhbWV0ZXJzLgotICAgICAgICoKLSAgICAgICAqIEBwYXJhbSB7Ym9vbGVh
bj19IG9iamVjdEVxdWFsaXR5IENvbXBhcmUgb2JqZWN0IGZvciBlcXVhbGl0eSByYXRoZXIgdGhh
biBmb3IgcmVmZXJlbmNlLgotICAgICAgICogQHJldHVybnMge2Z1bmN0aW9uKCl9IFJldHVybnMg
YSBkZXJlZ2lzdHJhdGlvbiBmdW5jdGlvbiBmb3IgdGhpcyBsaXN0ZW5lci4KLSAgICAgICAqLwot
ICAgICAgJHdhdGNoOiBmdW5jdGlvbih3YXRjaEV4cCwgbGlzdGVuZXIsIG9iamVjdEVxdWFsaXR5
KSB7Ci0gICAgICAgIHZhciBzY29wZSA9IHRoaXMsCi0gICAgICAgICAgICBnZXQgPSBjb21waWxl
VG9Gbih3YXRjaEV4cCwgJ3dhdGNoJyksCi0gICAgICAgICAgICBhcnJheSA9IHNjb3BlLiQkd2F0
Y2hlcnMsCi0gICAgICAgICAgICB3YXRjaGVyID0gewotICAgICAgICAgICAgICBmbjogbGlzdGVu
ZXIsCi0gICAgICAgICAgICAgIGxhc3Q6IGluaXRXYXRjaFZhbCwKLSAgICAgICAgICAgICAgZ2V0
OiBnZXQsCi0gICAgICAgICAgICAgIGV4cDogd2F0Y2hFeHAsCi0gICAgICAgICAgICAgIGVxOiAh
IW9iamVjdEVxdWFsaXR5Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgIC8vIGluIHRoZSBjYXNl
IHVzZXIgcGFzcyBzdHJpbmcsIHdlIG5lZWQgdG8gY29tcGlsZSBpdCwgZG8gd2UgcmVhbGx5IG5l
ZWQgdGhpcyA/Ci0gICAgICAgIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpIHsKLSAgICAgICAg
ICB2YXIgbGlzdGVuRm4gPSBjb21waWxlVG9GbihsaXN0ZW5lciB8fCBub29wLCAnbGlzdGVuZXIn
KTsKLSAgICAgICAgICB3YXRjaGVyLmZuID0gZnVuY3Rpb24obmV3VmFsLCBvbGRWYWwsIHNjb3Bl
KSB7bGlzdGVuRm4oc2NvcGUpO307Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWFycmF5KSB7
Ci0gICAgICAgICAgYXJyYXkgPSBzY29wZS4kJHdhdGNoZXJzID0gW107Ci0gICAgICAgIH0KLSAg
ICAgICAgLy8gd2UgdXNlIHVuc2hpZnQgc2luY2Ugd2UgdXNlIGEgd2hpbGUgbG9vcCBpbiAkZGln
ZXN0IGZvciBzcGVlZC4KLSAgICAgICAgLy8gdGhlIHdoaWxlIGxvb3AgcmVhZHMgaW4gcmV2ZXJz
ZSBvcmRlci4KLSAgICAgICAgYXJyYXkudW5zaGlmdCh3YXRjaGVyKTsKLQotICAgICAgICByZXR1
cm4gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgYXJyYXlSZW1vdmUoYXJyYXksIHdhdGNoZXIpOwot
ICAgICAgICB9OwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgKiBAbmdkb2MgZnVuY3Rp
b24KLSAgICAgICAqIEBuYW1lIG5nLiRyb290U2NvcGUuU2NvcGUjJGRpZ2VzdAotICAgICAgICog
QG1ldGhvZE9mIG5nLiRyb290U2NvcGUuU2NvcGUKLSAgICAgICAqIEBmdW5jdGlvbgotICAgICAg
ICoKLSAgICAgICAqIEBkZXNjcmlwdGlvbgotICAgICAgICogUHJvY2Vzc2VzIGFsbCBvZiB0aGUg
e0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJHdhdGNoIHdhdGNoZXJzfSBvZiB0aGUgY3VycmVu
dCBzY29wZSBhbmQgaXRzIGNoaWxkcmVuLgotICAgICAgICogQmVjYXVzZSBhIHtAbGluayBuZy4k
cm9vdFNjb3BlLlNjb3BlIyR3YXRjaCB3YXRjaGVyfSdzIGxpc3RlbmVyIGNhbiBjaGFuZ2UgdGhl
IG1vZGVsLCB0aGUKLSAgICAgICAqIGAkZGlnZXN0KClgIGtlZXBzIGNhbGxpbmcgdGhlIHtAbGlu
ayBuZy4kcm9vdFNjb3BlLlNjb3BlIyR3YXRjaCB3YXRjaGVyc30gdW50aWwgbm8gbW9yZSBsaXN0
ZW5lcnMgYXJlCi0gICAgICAgKiBmaXJpbmcuIFRoaXMgbWVhbnMgdGhhdCBpdCBpcyBwb3NzaWJs
ZSB0byBnZXQgaW50byBhbiBpbmZpbml0ZSBsb29wLiBUaGlzIGZ1bmN0aW9uIHdpbGwgdGhyb3cK
LSAgICAgICAqIGAnTWF4aW11bSBpdGVyYXRpb24gbGltaXQgZXhjZWVkZWQuJ2AgaWYgdGhlIG51
bWJlciBvZiBpdGVyYXRpb25zIGV4Y2VlZHMgMTAuCi0gICAgICAgKgotICAgICAgICogVXN1YWxs
eSB5b3UgZG9uJ3QgY2FsbCBgJGRpZ2VzdCgpYCBkaXJlY3RseSBpbgotICAgICAgICoge0BsaW5r
IG5nLmRpcmVjdGl2ZTpuZ0NvbnRyb2xsZXIgY29udHJvbGxlcnN9IG9yIGluCi0gICAgICAgKiB7
QGxpbmsgbmcuJGNvbXBpbGVQcm92aWRlciNkaXJlY3RpdmUgZGlyZWN0aXZlc30uCi0gICAgICAg
KiBJbnN0ZWFkIGEgY2FsbCB0byB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkYXBwbHkgJGFw
cGx5KCl9ICh0eXBpY2FsbHkgZnJvbSB3aXRoaW4gYQotICAgICAgICoge0BsaW5rIG5nLiRjb21w
aWxlUHJvdmlkZXIjZGlyZWN0aXZlIGRpcmVjdGl2ZXN9KSB3aWxsIGZvcmNlIGEgYCRkaWdlc3Qo
KWAuCi0gICAgICAgKgotICAgICAgICogSWYgeW91IHdhbnQgdG8gYmUgbm90aWZpZWQgd2hlbmV2
ZXIgYCRkaWdlc3QoKWAgaXMgY2FsbGVkLAotICAgICAgICogeW91IGNhbiByZWdpc3RlciBhIGB3
YXRjaEV4cHJlc3Npb25gIGZ1bmN0aW9uICB3aXRoIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3Bl
IyR3YXRjaCAkd2F0Y2goKX0KLSAgICAgICAqIHdpdGggbm8gYGxpc3RlbmVyYC4KLSAgICAgICAq
Ci0gICAgICAgKiBZb3UgbWF5IGhhdmUgYSBuZWVkIHRvIGNhbGwgYCRkaWdlc3QoKWAgZnJvbSB3
aXRoaW4gdW5pdC10ZXN0cywgdG8gc2ltdWxhdGUgdGhlIHNjb3BlCi0gICAgICAgKiBsaWZlLWN5
Y2xlLgotICAgICAgICoKLSAgICAgICAqICMgRXhhbXBsZQotICAgICAgICogPHByZT4KLSAgICAg
ICAgICAgdmFyIHNjb3BlID0gLi4uOwotICAgICAgICAgICBzY29wZS5uYW1lID0gJ21pc2tvJzsK
LSAgICAgICAgICAgc2NvcGUuY291bnRlciA9IDA7Ci0KLSAgICAgICAgICAgZXhwZWN0KHNjb3Bl
LmNvdW50ZXIpLnRvRXF1YWwoMCk7Ci0gICAgICAgICAgIHNjb3BlLiR3YXRjaCgnbmFtZScsIGZ1
bmN0aW9uKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgewotICAgICAgICAgICAgIHNjb3BlLmNvdW50ZXIg
PSBzY29wZS5jb3VudGVyICsgMTsKLSAgICAgICAgICAgfSk7Ci0gICAgICAgICAgIGV4cGVjdChz
Y29wZS5jb3VudGVyKS50b0VxdWFsKDApOwotCi0gICAgICAgICAgIHNjb3BlLiRkaWdlc3QoKTsK
LSAgICAgICAgICAgLy8gbm8gdmFyaWFibGUgY2hhbmdlCi0gICAgICAgICAgIGV4cGVjdChzY29w
ZS5jb3VudGVyKS50b0VxdWFsKDApOwotCi0gICAgICAgICAgIHNjb3BlLm5hbWUgPSAnYWRhbSc7
Ci0gICAgICAgICAgIHNjb3BlLiRkaWdlc3QoKTsKLSAgICAgICAgICAgZXhwZWN0KHNjb3BlLmNv
dW50ZXIpLnRvRXF1YWwoMSk7Ci0gICAgICAgKiA8L3ByZT4KLSAgICAgICAqCi0gICAgICAgKi8K
LSAgICAgICRkaWdlc3Q6IGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgd2F0Y2gsIHZhbHVlLCBs
YXN0LAotICAgICAgICAgICAgd2F0Y2hlcnMsCi0gICAgICAgICAgICBhc3luY1F1ZXVlLAotICAg
ICAgICAgICAgbGVuZ3RoLAotICAgICAgICAgICAgZGlydHksIHR0bCA9IFRUTCwKLSAgICAgICAg
ICAgIG5leHQsIGN1cnJlbnQsIHRhcmdldCA9IHRoaXMsCi0gICAgICAgICAgICB3YXRjaExvZyA9
IFtdLAotICAgICAgICAgICAgbG9nSWR4LCBsb2dNc2c7Ci0KLSAgICAgICAgYmVnaW5QaGFzZSgn
JGRpZ2VzdCcpOwotCi0gICAgICAgIGRvIHsKLSAgICAgICAgICBkaXJ0eSA9IGZhbHNlOwotICAg
ICAgICAgIGN1cnJlbnQgPSB0YXJnZXQ7Ci0gICAgICAgICAgZG8gewotICAgICAgICAgICAgYXN5
bmNRdWV1ZSA9IGN1cnJlbnQuJCRhc3luY1F1ZXVlOwotICAgICAgICAgICAgd2hpbGUoYXN5bmNR
dWV1ZS5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBjdXJy
ZW50LiRldmFsKGFzeW5jUXVldWUuc2hpZnQoKSk7Ci0gICAgICAgICAgICAgIH0gY2F0Y2ggKGUp
IHsKLSAgICAgICAgICAgICAgICAkZXhjZXB0aW9uSGFuZGxlcihlKTsKLSAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCh3YXRjaGVycyA9IGN1cnJlbnQuJCR3
YXRjaGVycykpIHsKLSAgICAgICAgICAgICAgLy8gcHJvY2VzcyBvdXIgd2F0Y2hlcwotICAgICAg
ICAgICAgICBsZW5ndGggPSB3YXRjaGVycy5sZW5ndGg7Ci0gICAgICAgICAgICAgIHdoaWxlIChs
ZW5ndGgtLSkgewotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICB3YXRj
aCA9IHdhdGNoZXJzW2xlbmd0aF07Ci0gICAgICAgICAgICAgICAgICAvLyBNb3N0IGNvbW1vbiB3
YXRjaGVzIGFyZSBvbiBwcmltaXRpdmVzLCBpbiB3aGljaCBjYXNlIHdlIGNhbiBzaG9ydAotICAg
ICAgICAgICAgICAgICAgLy8gY2lyY3VpdCBpdCB3aXRoID09PSBvcGVyYXRvciwgb25seSB3aGVu
ID09PSBmYWlscyBkbyB3ZSB1c2UgLmVxdWFscwotICAgICAgICAgICAgICAgICAgaWYgKCh2YWx1
ZSA9IHdhdGNoLmdldChjdXJyZW50KSkgIT09IChsYXN0ID0gd2F0Y2gubGFzdCkgJiYKLSAgICAg
ICAgICAgICAgICAgICAgICAhKHdhdGNoLmVxCi0gICAgICAgICAgICAgICAgICAgICAgICAgID8g
ZXF1YWxzKHZhbHVlLCBsYXN0KQotICAgICAgICAgICAgICAgICAgICAgICAgICA6ICh0eXBlb2Yg
dmFsdWUgPT0gJ251bWJlcicgJiYgdHlwZW9mIGxhc3QgPT0gJ251bWJlcicKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJiYgaXNOYU4odmFsdWUpICYmIGlzTmFOKGxhc3QpKSkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgZGlydHkgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB3YXRj
aC5sYXN0ID0gd2F0Y2guZXEgPyBjb3B5KHZhbHVlKSA6IHZhbHVlOwotICAgICAgICAgICAgICAg
ICAgICB3YXRjaC5mbih2YWx1ZSwgKChsYXN0ID09PSBpbml0V2F0Y2hWYWwpID8gdmFsdWUgOiBs
YXN0KSwgY3VycmVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0dGwgPCA1KSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgbG9nSWR4ID0gNCAtIHR0bDsKLSAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIXdhdGNoTG9nW2xvZ0lkeF0pIHdhdGNoTG9nW2xvZ0lkeF0gPSBbXTsKLSAgICAgICAg
ICAgICAgICAgICAgICBsb2dNc2cgPSAoaXNGdW5jdGlvbih3YXRjaC5leHApKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICA/ICdmbjogJyArICh3YXRjaC5leHAubmFtZSB8fCB3YXRjaC5leHAu
dG9TdHJpbmcoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgOiB3YXRjaC5leHA7Ci0gICAg
ICAgICAgICAgICAgICAgICAgbG9nTXNnICs9ICc7IG5ld1ZhbDogJyArIHRvSnNvbih2YWx1ZSkg
KyAnOyBvbGRWYWw6ICcgKyB0b0pzb24obGFzdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgd2F0
Y2hMb2dbbG9nSWR4XS5wdXNoKGxvZ01zZyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAg
ICAgICAgICAkZXhjZXB0aW9uSGFuZGxlcihlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSW5zYW5pdHkgV2Fybmlu
Zzogc2NvcGUgZGVwdGgtZmlyc3QgdHJhdmVyc2FsCi0gICAgICAgICAgICAvLyB5ZXMsIHRoaXMg
Y29kZSBpcyBhIGJpdCBjcmF6eSwgYnV0IGl0IHdvcmtzIGFuZCB3ZSBoYXZlIHRlc3RzIHRvIHBy
b3ZlIGl0IQotICAgICAgICAgICAgLy8gdGhpcyBwaWVjZSBzaG91bGQgYmUga2VwdCBpbiBzeW5j
IHdpdGggdGhlIHRyYXZlcnNhbCBpbiAkYnJvYWRjYXN0Ci0gICAgICAgICAgICBpZiAoIShuZXh0
ID0gKGN1cnJlbnQuJCRjaGlsZEhlYWQgfHwgKGN1cnJlbnQgIT09IHRhcmdldCAmJiBjdXJyZW50
LiQkbmV4dFNpYmxpbmcpKSkpIHsKLSAgICAgICAgICAgICAgd2hpbGUoY3VycmVudCAhPT0gdGFy
Z2V0ICYmICEobmV4dCA9IGN1cnJlbnQuJCRuZXh0U2libGluZykpIHsKLSAgICAgICAgICAgICAg
ICBjdXJyZW50ID0gY3VycmVudC4kcGFyZW50OwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgfSB3aGlsZSAoKGN1cnJlbnQgPSBuZXh0KSk7Ci0KLSAgICAgICAgICBp
ZihkaXJ0eSAmJiAhKHR0bC0tKSkgewotICAgICAgICAgICAgY2xlYXJQaGFzZSgpOwotICAgICAg
ICAgICAgdGhyb3cgRXJyb3IoVFRMICsgJyAkZGlnZXN0KCkgaXRlcmF0aW9ucyByZWFjaGVkLiBB
Ym9ydGluZyFcbicgKwotICAgICAgICAgICAgICAgICdXYXRjaGVycyBmaXJlZCBpbiB0aGUgbGFz
dCA1IGl0ZXJhdGlvbnM6ICcgKyB0b0pzb24od2F0Y2hMb2cpKTsKLSAgICAgICAgICB9Ci0gICAg
ICAgIH0gd2hpbGUgKGRpcnR5IHx8IGFzeW5jUXVldWUubGVuZ3RoKTsKLQotICAgICAgICBjbGVh
clBoYXNlKCk7Ci0gICAgICB9LAotCi0KLSAgICAgIC8qKgotICAgICAgICogQG5nZG9jIGV2ZW50
Ci0gICAgICAgKiBAbmFtZSBuZy4kcm9vdFNjb3BlLlNjb3BlIyRkZXN0cm95Ci0gICAgICAgKiBA
ZXZlbnRPZiBuZy4kcm9vdFNjb3BlLlNjb3BlCi0gICAgICAgKiBAZXZlbnRUeXBlIGJyb2FkY2Fz
dCBvbiBzY29wZSBiZWluZyBkZXN0cm95ZWQKLSAgICAgICAqCi0gICAgICAgKiBAZGVzY3JpcHRp
b24KLSAgICAgICAqIEJyb2FkY2FzdGVkIHdoZW4gYSBzY29wZSBhbmQgaXRzIGNoaWxkcmVuIGFy
ZSBiZWluZyBkZXN0cm95ZWQuCi0gICAgICAgKi8KLQotICAgICAgLyoqCi0gICAgICAgKiBAbmdk
b2MgZnVuY3Rpb24KLSAgICAgICAqIEBuYW1lIG5nLiRyb290U2NvcGUuU2NvcGUjJGRlc3Ryb3kK
LSAgICAgICAqIEBtZXRob2RPZiBuZy4kcm9vdFNjb3BlLlNjb3BlCi0gICAgICAgKiBAZnVuY3Rp
b24KLSAgICAgICAqCi0gICAgICAgKiBAZGVzY3JpcHRpb24KLSAgICAgICAqIFJlbW92ZXMgdGhl
IGN1cnJlbnQgc2NvcGUgKGFuZCBhbGwgb2YgaXRzIGNoaWxkcmVuKSBmcm9tIHRoZSBwYXJlbnQg
c2NvcGUuIFJlbW92YWwgaW1wbGllcwotICAgICAgICogdGhhdCBjYWxscyB0byB7QGxpbmsgbmcu
JHJvb3RTY29wZS5TY29wZSMkZGlnZXN0ICRkaWdlc3QoKX0gd2lsbCBubyBsb25nZXIKLSAgICAg
ICAqIHByb3BhZ2F0ZSB0byB0aGUgY3VycmVudCBzY29wZSBhbmQgaXRzIGNoaWxkcmVuLiBSZW1v
dmFsIGFsc28gaW1wbGllcyB0aGF0IHRoZSBjdXJyZW50Ci0gICAgICAgKiBzY29wZSBpcyBlbGln
aWJsZSBmb3IgZ2FyYmFnZSBjb2xsZWN0aW9uLgotICAgICAgICoKLSAgICAgICAqIFRoZSBgJGRl
c3Ryb3koKWAgaXMgdXN1YWxseSB1c2VkIGJ5IGRpcmVjdGl2ZXMgc3VjaCBhcwotICAgICAgICog
e0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ1JlcGVhdCBuZ1JlcGVhdH0gZm9yIG1hbmFnaW5nIHRoZQot
ICAgICAgICogdW5yb2xsaW5nIG9mIHRoZSBsb29wLgotICAgICAgICoKLSAgICAgICAqIEp1c3Qg
YmVmb3JlIGEgc2NvcGUgaXMgZGVzdHJveWVkIGEgYCRkZXN0cm95YCBldmVudCBpcyBicm9hZGNh
c3RlZCBvbiB0aGlzIHNjb3BlLgotICAgICAgICogQXBwbGljYXRpb24gY29kZSBjYW4gcmVnaXN0
ZXIgYSBgJGRlc3Ryb3lgIGV2ZW50IGhhbmRsZXIgdGhhdCB3aWxsIGdpdmUgaXQgY2hhbmNlIHRv
Ci0gICAgICAgKiBwZXJmb3JtIGFueSBuZWNlc3NhcnkgY2xlYW51cC4KLSAgICAgICAqLwotICAg
ICAgJGRlc3Ryb3k6IGZ1bmN0aW9uKCkgewotICAgICAgICAvLyB3ZSBjYW4ndCBkZXN0cm95IHRo
ZSByb290IHNjb3BlIG9yIGEgc2NvcGUgdGhhdCBoYXMgYmVlbiBhbHJlYWR5IGRlc3Ryb3llZAot
ICAgICAgICBpZiAoJHJvb3RTY29wZSA9PSB0aGlzIHx8IHRoaXMuJCRkZXN0cm95ZWQpIHJldHVy
bjsKLSAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMuJHBhcmVudDsKLQotICAgICAgICB0aGlzLiRi
cm9hZGNhc3QoJyRkZXN0cm95Jyk7Ci0gICAgICAgIHRoaXMuJCRkZXN0cm95ZWQgPSB0cnVlOwot
Ci0gICAgICAgIGlmIChwYXJlbnQuJCRjaGlsZEhlYWQgPT0gdGhpcykgcGFyZW50LiQkY2hpbGRI
ZWFkID0gdGhpcy4kJG5leHRTaWJsaW5nOwotICAgICAgICBpZiAocGFyZW50LiQkY2hpbGRUYWls
ID09IHRoaXMpIHBhcmVudC4kJGNoaWxkVGFpbCA9IHRoaXMuJCRwcmV2U2libGluZzsKLSAgICAg
ICAgaWYgKHRoaXMuJCRwcmV2U2libGluZykgdGhpcy4kJHByZXZTaWJsaW5nLiQkbmV4dFNpYmxp
bmcgPSB0aGlzLiQkbmV4dFNpYmxpbmc7Ci0gICAgICAgIGlmICh0aGlzLiQkbmV4dFNpYmxpbmcp
IHRoaXMuJCRuZXh0U2libGluZy4kJHByZXZTaWJsaW5nID0gdGhpcy4kJHByZXZTaWJsaW5nOwot
Ci0gICAgICAgIC8vIFRoaXMgaXMgYm9ndXMgY29kZSB0aGF0IHdvcmtzIGFyb3VuZCBDaHJvbWUn
cyBHQyBsZWFrCi0gICAgICAgIC8vIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5n
dWxhci5qcy9pc3N1ZXMvMTMxMyNpc3N1ZWNvbW1lbnQtMTAzNzg0NTEKLSAgICAgICAgdGhpcy4k
cGFyZW50ID0gdGhpcy4kJG5leHRTaWJsaW5nID0gdGhpcy4kJHByZXZTaWJsaW5nID0gdGhpcy4k
JGNoaWxkSGVhZCA9Ci0gICAgICAgICAgICB0aGlzLiQkY2hpbGRUYWlsID0gbnVsbDsKLSAgICAg
IH0sCi0KLSAgICAgIC8qKgotICAgICAgICogQG5nZG9jIGZ1bmN0aW9uCi0gICAgICAgKiBAbmFt
ZSBuZy4kcm9vdFNjb3BlLlNjb3BlIyRldmFsCi0gICAgICAgKiBAbWV0aG9kT2YgbmcuJHJvb3RT
Y29wZS5TY29wZQotICAgICAgICogQGZ1bmN0aW9uCi0gICAgICAgKgotICAgICAgICogQGRlc2Ny
aXB0aW9uCi0gICAgICAgKiBFeGVjdXRlcyB0aGUgYGV4cHJlc3Npb25gIG9uIHRoZSBjdXJyZW50
IHNjb3BlIHJldHVybmluZyB0aGUgcmVzdWx0LiBBbnkgZXhjZXB0aW9ucyBpbiB0aGUKLSAgICAg
ICAqIGV4cHJlc3Npb24gYXJlIHByb3BhZ2F0ZWQgKHVuY2F1Z2h0KS4gVGhpcyBpcyB1c2VmdWwg
d2hlbiBldmFsdWF0aW5nIEFuZ3VsYXIgZXhwcmVzc2lvbnMuCi0gICAgICAgKgotICAgICAgICog
IyBFeGFtcGxlCi0gICAgICAgKiA8cHJlPgotICAgICAgICAgICB2YXIgc2NvcGUgPSBuZy4kcm9v
dFNjb3BlLlNjb3BlKCk7Ci0gICAgICAgICAgIHNjb3BlLmEgPSAxOwotICAgICAgICAgICBzY29w
ZS5iID0gMjsKLQotICAgICAgICAgICBleHBlY3Qoc2NvcGUuJGV2YWwoJ2ErYicpKS50b0VxdWFs
KDMpOwotICAgICAgICAgICBleHBlY3Qoc2NvcGUuJGV2YWwoZnVuY3Rpb24oc2NvcGUpeyByZXR1
cm4gc2NvcGUuYSArIHNjb3BlLmI7IH0pKS50b0VxdWFsKDMpOwotICAgICAgICogPC9wcmU+Ci0g
ICAgICAgKgotICAgICAgICogQHBhcmFtIHsoc3RyaW5nfGZ1bmN0aW9uKCkpPX0gZXhwcmVzc2lv
biBBbiBhbmd1bGFyIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWQuCi0gICAgICAgKgotICAgICAg
ICogICAgLSBgc3RyaW5nYDogZXhlY3V0ZSB1c2luZyB0aGUgcnVsZXMgYXMgZGVmaW5lZCBpbiAg
e0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0uCi0gICAgICAgKiAgICAtIGBmdW5j
dGlvbihzY29wZSlgOiBleGVjdXRlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBjdXJyZW50IGBzY29w
ZWAgcGFyYW1ldGVyLgotICAgICAgICoKLSAgICAgICAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0
IG9mIGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb24uCi0gICAgICAgKi8KLSAgICAgICRldmFsOiBm
dW5jdGlvbihleHByLCBsb2NhbHMpIHsKLSAgICAgICAgcmV0dXJuICRwYXJzZShleHByKSh0aGlz
LCBsb2NhbHMpOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgKiBAbmdkb2MgZnVuY3Rp
b24KLSAgICAgICAqIEBuYW1lIG5nLiRyb290U2NvcGUuU2NvcGUjJGV2YWxBc3luYwotICAgICAg
ICogQG1ldGhvZE9mIG5nLiRyb290U2NvcGUuU2NvcGUKLSAgICAgICAqIEBmdW5jdGlvbgotICAg
ICAgICoKLSAgICAgICAqIEBkZXNjcmlwdGlvbgotICAgICAgICogRXhlY3V0ZXMgdGhlIGV4cHJl
c3Npb24gb24gdGhlIGN1cnJlbnQgc2NvcGUgYXQgYSBsYXRlciBwb2ludCBpbiB0aW1lLgotICAg
ICAgICoKLSAgICAgICAqIFRoZSBgJGV2YWxBc3luY2AgbWFrZXMgbm8gZ3VhcmFudGVlcyBhcyB0
byB3aGVuIHRoZSBgZXhwcmVzc2lvbmAgd2lsbCBiZSBleGVjdXRlZCwgb25seSB0aGF0OgotICAg
ICAgICoKLSAgICAgICAqICAgLSBpdCB3aWxsIGV4ZWN1dGUgaW4gdGhlIGN1cnJlbnQgc2NyaXB0
IGV4ZWN1dGlvbiBjb250ZXh0IChiZWZvcmUgYW55IERPTSByZW5kZXJpbmcpLgotICAgICAgICog
ICAtIGF0IGxlYXN0IG9uZSB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkZGlnZXN0ICRkaWdl
c3QgY3ljbGV9IHdpbGwgYmUgcGVyZm9ybWVkIGFmdGVyCi0gICAgICAgKiAgICAgYGV4cHJlc3Np
b25gIGV4ZWN1dGlvbi4KLSAgICAgICAqCi0gICAgICAgKiBBbnkgZXhjZXB0aW9ucyBmcm9tIHRo
ZSBleGVjdXRpb24gb2YgdGhlIGV4cHJlc3Npb24gYXJlIGZvcndhcmRlZCB0byB0aGUKLSAgICAg
ICAqIHtAbGluayBuZy4kZXhjZXB0aW9uSGFuZGxlciAkZXhjZXB0aW9uSGFuZGxlcn0gc2Vydmlj
ZS4KLSAgICAgICAqCi0gICAgICAgKiBAcGFyYW0geyhzdHJpbmd8ZnVuY3Rpb24oKSk9fSBleHBy
ZXNzaW9uIEFuIGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBiZSBleGVjdXRlZC4KLSAgICAgICAqCi0g
ICAgICAgKiAgICAtIGBzdHJpbmdgOiBleGVjdXRlIHVzaW5nIHRoZSBydWxlcyBhcyBkZWZpbmVk
IGluICB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBleHByZXNzaW9ufS4KLSAgICAgICAqICAgIC0g
YGZ1bmN0aW9uKHNjb3BlKWA6IGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGN1cnJlbnQg
YHNjb3BlYCBwYXJhbWV0ZXIuCi0gICAgICAgKgotICAgICAgICovCi0gICAgICAkZXZhbEFzeW5j
OiBmdW5jdGlvbihleHByKSB7Ci0gICAgICAgIHRoaXMuJCRhc3luY1F1ZXVlLnB1c2goZXhwcik7
Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAqIEBuZ2RvYyBmdW5jdGlvbgotICAgICAg
ICogQG5hbWUgbmcuJHJvb3RTY29wZS5TY29wZSMkYXBwbHkKLSAgICAgICAqIEBtZXRob2RPZiBu
Zy4kcm9vdFNjb3BlLlNjb3BlCi0gICAgICAgKiBAZnVuY3Rpb24KLSAgICAgICAqCi0gICAgICAg
KiBAZGVzY3JpcHRpb24KLSAgICAgICAqIGAkYXBwbHkoKWAgaXMgdXNlZCB0byBleGVjdXRlIGFu
IGV4cHJlc3Npb24gaW4gYW5ndWxhciBmcm9tIG91dHNpZGUgb2YgdGhlIGFuZ3VsYXIgZnJhbWV3
b3JrLgotICAgICAgICogKEZvciBleGFtcGxlIGZyb20gYnJvd3NlciBET00gZXZlbnRzLCBzZXRU
aW1lb3V0LCBYSFIgb3IgdGhpcmQgcGFydHkgbGlicmFyaWVzKS4KLSAgICAgICAqIEJlY2F1c2Ug
d2UgYXJlIGNhbGxpbmcgaW50byB0aGUgYW5ndWxhciBmcmFtZXdvcmsgd2UgbmVlZCB0byBwZXJm
b3JtIHByb3BlciBzY29wZSBsaWZlLWN5Y2xlCi0gICAgICAgKiBvZiB7QGxpbmsgbmcuJGV4Y2Vw
dGlvbkhhbmRsZXIgZXhjZXB0aW9uIGhhbmRsaW5nfSwKLSAgICAgICAqIHtAbGluayBuZy4kcm9v
dFNjb3BlLlNjb3BlIyRkaWdlc3QgZXhlY3V0aW5nIHdhdGNoZXN9LgotICAgICAgICoKLSAgICAg
ICAqICMjIExpZmUgY3ljbGUKLSAgICAgICAqCi0gICAgICAgKiAjIFBzZXVkby1Db2RlIG9mIGAk
YXBwbHkoKWAKLSAgICAgICAqIDxwcmU+Ci0gICAgICAgICAgIGZ1bmN0aW9uICRhcHBseShleHBy
KSB7Ci0gICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgIHJldHVybiAkZXZhbChleHBy
KTsKLSAgICAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAkZXhjZXB0aW9u
SGFuZGxlcihlKTsKLSAgICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgJHJv
b3QuJGRpZ2VzdCgpOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgfQotICAgICAgICogPC9w
cmU+Ci0gICAgICAgKgotICAgICAgICoKLSAgICAgICAqIFNjb3BlJ3MgYCRhcHBseSgpYCBtZXRo
b2QgdHJhbnNpdGlvbnMgdGhyb3VnaCB0aGUgZm9sbG93aW5nIHN0YWdlczoKLSAgICAgICAqCi0g
ICAgICAgKiAxLiBUaGUge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0gaXMgZXhl
Y3V0ZWQgdXNpbmcgdGhlCi0gICAgICAgKiAgICB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMk
ZXZhbCAkZXZhbCgpfSBtZXRob2QuCi0gICAgICAgKiAyLiBBbnkgZXhjZXB0aW9ucyBmcm9tIHRo
ZSBleGVjdXRpb24gb2YgdGhlIGV4cHJlc3Npb24gYXJlIGZvcndhcmRlZCB0byB0aGUKLSAgICAg
ICAqICAgIHtAbGluayBuZy4kZXhjZXB0aW9uSGFuZGxlciAkZXhjZXB0aW9uSGFuZGxlcn0gc2Vy
dmljZS4KLSAgICAgICAqIDMuIFRoZSB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkd2F0Y2gg
d2F0Y2h9IGxpc3RlbmVycyBhcmUgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGV4cHJlc3Np
b24KLSAgICAgICAqICAgIHdhcyBleGVjdXRlZCB1c2luZyB0aGUge0BsaW5rIG5nLiRyb290U2Nv
cGUuU2NvcGUjJGRpZ2VzdCAkZGlnZXN0KCl9IG1ldGhvZC4KLSAgICAgICAqCi0gICAgICAgKgot
ICAgICAgICogQHBhcmFtIHsoc3RyaW5nfGZ1bmN0aW9uKCkpPX0gZXhwIEFuIGFuZ3VsYXIgZXhw
cmVzc2lvbiB0byBiZSBleGVjdXRlZC4KLSAgICAgICAqCi0gICAgICAgKiAgICAtIGBzdHJpbmdg
OiBleGVjdXRlIHVzaW5nIHRoZSBydWxlcyBhcyBkZWZpbmVkIGluIHtAbGluayBndWlkZS9leHBy
ZXNzaW9uIGV4cHJlc3Npb259LgotICAgICAgICogICAgLSBgZnVuY3Rpb24oc2NvcGUpYDogZXhl
Y3V0ZSB0aGUgZnVuY3Rpb24gd2l0aCBjdXJyZW50IGBzY29wZWAgcGFyYW1ldGVyLgotICAgICAg
ICoKLSAgICAgICAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0IG9mIGV2YWx1YXRpbmcgdGhlIGV4
cHJlc3Npb24uCi0gICAgICAgKi8KLSAgICAgICRhcHBseTogZnVuY3Rpb24oZXhwcikgewotICAg
ICAgICB0cnkgewotICAgICAgICAgIGJlZ2luUGhhc2UoJyRhcHBseScpOwotICAgICAgICAgIHJl
dHVybiB0aGlzLiRldmFsKGV4cHIpOwotICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAg
JGV4Y2VwdGlvbkhhbmRsZXIoZSk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgY2xl
YXJQaGFzZSgpOwotICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAkcm9vdFNjb3BlLiRkaWdl
c3QoKTsKLSAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAkZXhjZXB0aW9uSGFu
ZGxlcihlKTsKLSAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAqIEBuZ2RvYyBmdW5jdGlvbgotICAgICAgICog
QG5hbWUgbmcuJHJvb3RTY29wZS5TY29wZSMkb24KLSAgICAgICAqIEBtZXRob2RPZiBuZy4kcm9v
dFNjb3BlLlNjb3BlCi0gICAgICAgKiBAZnVuY3Rpb24KLSAgICAgICAqCi0gICAgICAgKiBAZGVz
Y3JpcHRpb24KLSAgICAgICAqIExpc3RlbnMgb24gZXZlbnRzIG9mIGEgZ2l2ZW4gdHlwZS4gU2Vl
IHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRlbWl0ICRlbWl0fSBmb3IgZGlzY3Vzc2lvbiBv
ZgotICAgICAgICogZXZlbnQgbGlmZSBjeWNsZS4KLSAgICAgICAqCi0gICAgICAgKiBUaGUgZXZl
bnQgbGlzdGVuZXIgZnVuY3Rpb24gZm9ybWF0IGlzOiBgZnVuY3Rpb24oZXZlbnQsIGFyZ3MuLi4p
YC4gVGhlIGBldmVudGAgb2JqZWN0Ci0gICAgICAgKiBwYXNzZWQgaW50byB0aGUgbGlzdGVuZXIg
aGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKLSAgICAgICAqCi0gICAgICAgKiAgIC0gYHRh
cmdldFNjb3BlYCAtIGB7U2NvcGV9YDogdGhlIHNjb3BlIG9uIHdoaWNoIHRoZSBldmVudCB3YXMg
YCRlbWl0YC1lZCBvciBgJGJyb2FkY2FzdGAtZWQuCi0gICAgICAgKiAgIC0gYGN1cnJlbnRTY29w
ZWAgLSBge1Njb3BlfWA6IHRoZSBjdXJyZW50IHNjb3BlIHdoaWNoIGlzIGhhbmRsaW5nIHRoZSBl
dmVudC4KLSAgICAgICAqICAgLSBgbmFtZWAgLSBge3N0cmluZ31gOiBOYW1lIG9mIHRoZSBldmVu
dC4KLSAgICAgICAqICAgLSBgc3RvcFByb3BhZ2F0aW9uYCAtIGB7ZnVuY3Rpb249fWA6IGNhbGxp
bmcgYHN0b3BQcm9wYWdhdGlvbmAgZnVuY3Rpb24gd2lsbCBjYW5jZWwgZnVydGhlciBldmVudAot
ICAgICAgICogICAgIHByb3BhZ2F0aW9uIChhdmFpbGFibGUgb25seSBmb3IgZXZlbnRzIHRoYXQg
d2VyZSBgJGVtaXRgLWVkKS4KLSAgICAgICAqICAgLSBgcHJldmVudERlZmF1bHRgIC0gYHtmdW5j
dGlvbn1gOiBjYWxsaW5nIGBwcmV2ZW50RGVmYXVsdGAgc2V0cyBgZGVmYXVsdFByZXZlbnRlZGAg
ZmxhZyB0byB0cnVlLgotICAgICAgICogICAtIGBkZWZhdWx0UHJldmVudGVkYCAtIGB7Ym9vbGVh
bn1gOiB0cnVlIGlmIGBwcmV2ZW50RGVmYXVsdGAgd2FzIGNhbGxlZC4KLSAgICAgICAqCi0gICAg
ICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBFdmVudCBuYW1lIHRvIGxpc3RlbiBvbi4KLSAgICAg
ICAqIEBwYXJhbSB7ZnVuY3Rpb24oZXZlbnQsIGFyZ3MuLi4pfSBsaXN0ZW5lciBGdW5jdGlvbiB0
byBjYWxsIHdoZW4gdGhlIGV2ZW50IGlzIGVtaXR0ZWQuCi0gICAgICAgKiBAcmV0dXJucyB7ZnVu
Y3Rpb24oKX0gUmV0dXJucyBhIGRlcmVnaXN0cmF0aW9uIGZ1bmN0aW9uIGZvciB0aGlzIGxpc3Rl
bmVyLgotICAgICAgICovCi0gICAgICAkb246IGZ1bmN0aW9uKG5hbWUsIGxpc3RlbmVyKSB7Ci0g
ICAgICAgIHZhciBuYW1lZExpc3RlbmVycyA9IHRoaXMuJCRsaXN0ZW5lcnNbbmFtZV07Ci0gICAg
ICAgIGlmICghbmFtZWRMaXN0ZW5lcnMpIHsKLSAgICAgICAgICB0aGlzLiQkbGlzdGVuZXJzW25h
bWVdID0gbmFtZWRMaXN0ZW5lcnMgPSBbXTsKLSAgICAgICAgfQotICAgICAgICBuYW1lZExpc3Rl
bmVycy5wdXNoKGxpc3RlbmVyKTsKLQotICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgbmFtZWRMaXN0ZW5lcnNbaW5kZXhPZihuYW1lZExpc3RlbmVycywgbGlzdGVuZXIpXSA9
IG51bGw7Ci0gICAgICAgIH07Ci0gICAgICB9LAotCi0KLSAgICAgIC8qKgotICAgICAgICogQG5n
ZG9jIGZ1bmN0aW9uCi0gICAgICAgKiBAbmFtZSBuZy4kcm9vdFNjb3BlLlNjb3BlIyRlbWl0Ci0g
ICAgICAgKiBAbWV0aG9kT2YgbmcuJHJvb3RTY29wZS5TY29wZQotICAgICAgICogQGZ1bmN0aW9u
Ci0gICAgICAgKgotICAgICAgICogQGRlc2NyaXB0aW9uCi0gICAgICAgKiBEaXNwYXRjaGVzIGFu
IGV2ZW50IGBuYW1lYCB1cHdhcmRzIHRocm91Z2ggdGhlIHNjb3BlIGhpZXJhcmNoeSBub3RpZnlp
bmcgdGhlCi0gICAgICAgKiByZWdpc3RlcmVkIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRv
bn0gbGlzdGVuZXJzLgotICAgICAgICoKLSAgICAgICAqIFRoZSBldmVudCBsaWZlIGN5Y2xlIHN0
YXJ0cyBhdCB0aGUgc2NvcGUgb24gd2hpY2ggYCRlbWl0YCB3YXMgY2FsbGVkLiBBbGwKLSAgICAg
ICAqIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRvbiBsaXN0ZW5lcnN9IGxpc3RlbmluZyBm
b3IgYG5hbWVgIGV2ZW50IG9uIHRoaXMgc2NvcGUgZ2V0IG5vdGlmaWVkLgotICAgICAgICogQWZ0
ZXJ3YXJkcywgdGhlIGV2ZW50IHRyYXZlcnNlcyB1cHdhcmRzIHRvd2FyZCB0aGUgcm9vdCBzY29w
ZSBhbmQgY2FsbHMgYWxsIHJlZ2lzdGVyZWQKLSAgICAgICAqIGxpc3RlbmVycyBhbG9uZyB0aGUg
d2F5LiBUaGUgZXZlbnQgd2lsbCBzdG9wIHByb3BhZ2F0aW5nIGlmIG9uZSBvZiB0aGUgbGlzdGVu
ZXJzIGNhbmNlbHMgaXQuCi0gICAgICAgKgotICAgICAgICogQW55IGV4Y2VwdGlvbiBlbWl0dGVk
IGZyb20gdGhlIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRvbiBsaXN0ZW5lcnN9IHdpbGwg
YmUgcGFzc2VkCi0gICAgICAgKiBvbnRvIHRoZSB7QGxpbmsgbmcuJGV4Y2VwdGlvbkhhbmRsZXIg
JGV4Y2VwdGlvbkhhbmRsZXJ9IHNlcnZpY2UuCi0gICAgICAgKgotICAgICAgICogQHBhcmFtIHtz
dHJpbmd9IG5hbWUgRXZlbnQgbmFtZSB0byBlbWl0LgotICAgICAgICogQHBhcmFtIHsuLi4qfSBh
cmdzIE9wdGlvbmFsIHNldCBvZiBhcmd1bWVudHMgd2hpY2ggd2lsbCBiZSBwYXNzZWQgb250byB0
aGUgZXZlbnQgbGlzdGVuZXJzLgotICAgICAgICogQHJldHVybiB7T2JqZWN0fSBFdmVudCBvYmpl
Y3QsIHNlZSB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkb259Ci0gICAgICAgKi8KLSAgICAg
ICRlbWl0OiBmdW5jdGlvbihuYW1lLCBhcmdzKSB7Ci0gICAgICAgIHZhciBlbXB0eSA9IFtdLAot
ICAgICAgICAgICAgbmFtZWRMaXN0ZW5lcnMsCi0gICAgICAgICAgICBzY29wZSA9IHRoaXMsCi0g
ICAgICAgICAgICBzdG9wUHJvcGFnYXRpb24gPSBmYWxzZSwKLSAgICAgICAgICAgIGV2ZW50ID0g
ewotICAgICAgICAgICAgICBuYW1lOiBuYW1lLAotICAgICAgICAgICAgICB0YXJnZXRTY29wZTog
c2NvcGUsCi0gICAgICAgICAgICAgIHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7c3RvcFBy
b3BhZ2F0aW9uID0gdHJ1ZTt9LAotICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7Ci0g
ICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQ6IGZhbHNlCi0g
ICAgICAgICAgICB9LAotICAgICAgICAgICAgbGlzdGVuZXJBcmdzID0gY29uY2F0KFtldmVudF0s
IGFyZ3VtZW50cywgMSksCi0gICAgICAgICAgICBpLCBsZW5ndGg7Ci0KLSAgICAgICAgZG8gewot
ICAgICAgICAgIG5hbWVkTGlzdGVuZXJzID0gc2NvcGUuJCRsaXN0ZW5lcnNbbmFtZV0gfHwgZW1w
dHk7Ci0gICAgICAgICAgZXZlbnQuY3VycmVudFNjb3BlID0gc2NvcGU7Ci0gICAgICAgICAgZm9y
IChpPTAsIGxlbmd0aD1uYW1lZExpc3RlbmVycy5sZW5ndGg7IGk8bGVuZ3RoOyBpKyspIHsKLQot
ICAgICAgICAgICAgLy8gaWYgbGlzdGVuZXJzIHdlcmUgZGVyZWdpc3RlcmVkLCBkZWZyYWdtZW50
IHRoZSBhcnJheQotICAgICAgICAgICAgaWYgKCFuYW1lZExpc3RlbmVyc1tpXSkgewotICAgICAg
ICAgICAgICBuYW1lZExpc3RlbmVycy5zcGxpY2UoaSwgMSk7Ci0gICAgICAgICAgICAgIGktLTsK
LSAgICAgICAgICAgICAgbGVuZ3RoLS07Ci0gICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgbmFtZWRMaXN0ZW5lcnNb
aV0uYXBwbHkobnVsbCwgbGlzdGVuZXJBcmdzKTsKLSAgICAgICAgICAgICAgaWYgKHN0b3BQcm9w
YWdhdGlvbikgcmV0dXJuIGV2ZW50OwotICAgICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAg
ICAgICAgICAkZXhjZXB0aW9uSGFuZGxlcihlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9
Ci0gICAgICAgICAgLy90cmF2ZXJzZSB1cHdhcmRzCi0gICAgICAgICAgc2NvcGUgPSBzY29wZS4k
cGFyZW50OwotICAgICAgICB9IHdoaWxlIChzY29wZSk7Ci0KLSAgICAgICAgcmV0dXJuIGV2ZW50
OwotICAgICAgfSwKLQotCi0gICAgICAvKioKLSAgICAgICAqIEBuZ2RvYyBmdW5jdGlvbgotICAg
ICAgICogQG5hbWUgbmcuJHJvb3RTY29wZS5TY29wZSMkYnJvYWRjYXN0Ci0gICAgICAgKiBAbWV0
aG9kT2YgbmcuJHJvb3RTY29wZS5TY29wZQotICAgICAgICogQGZ1bmN0aW9uCi0gICAgICAgKgot
ICAgICAgICogQGRlc2NyaXB0aW9uCi0gICAgICAgKiBEaXNwYXRjaGVzIGFuIGV2ZW50IGBuYW1l
YCBkb3dud2FyZHMgdG8gYWxsIGNoaWxkIHNjb3BlcyAoYW5kIHRoZWlyIGNoaWxkcmVuKSBub3Rp
ZnlpbmcgdGhlCi0gICAgICAgKiByZWdpc3RlcmVkIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3Bl
IyRvbn0gbGlzdGVuZXJzLgotICAgICAgICoKLSAgICAgICAqIFRoZSBldmVudCBsaWZlIGN5Y2xl
IHN0YXJ0cyBhdCB0aGUgc2NvcGUgb24gd2hpY2ggYCRicm9hZGNhc3RgIHdhcyBjYWxsZWQuIEFs
bAotICAgICAgICoge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJG9uIGxpc3RlbmVyc30gbGlz
dGVuaW5nIGZvciBgbmFtZWAgZXZlbnQgb24gdGhpcyBzY29wZSBnZXQgbm90aWZpZWQuCi0gICAg
ICAgKiBBZnRlcndhcmRzLCB0aGUgZXZlbnQgcHJvcGFnYXRlcyB0byBhbGwgZGlyZWN0IGFuZCBp
bmRpcmVjdCBzY29wZXMgb2YgdGhlIGN1cnJlbnQgc2NvcGUgYW5kCi0gICAgICAgKiBjYWxscyBh
bGwgcmVnaXN0ZXJlZCBsaXN0ZW5lcnMgYWxvbmcgdGhlIHdheS4gVGhlIGV2ZW50IGNhbm5vdCBi
ZSBjYW5jZWxlZC4KLSAgICAgICAqCi0gICAgICAgKiBBbnkgZXhjZXB0aW9uIGVtbWl0ZWQgZnJv
bSB0aGUge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJG9uIGxpc3RlbmVyc30gd2lsbCBiZSBw
YXNzZWQKLSAgICAgICAqIG9udG8gdGhlIHtAbGluayBuZy4kZXhjZXB0aW9uSGFuZGxlciAkZXhj
ZXB0aW9uSGFuZGxlcn0gc2VydmljZS4KLSAgICAgICAqCi0gICAgICAgKiBAcGFyYW0ge3N0cmlu
Z30gbmFtZSBFdmVudCBuYW1lIHRvIGJyb2FkY2FzdC4KLSAgICAgICAqIEBwYXJhbSB7Li4uKn0g
YXJncyBPcHRpb25hbCBzZXQgb2YgYXJndW1lbnRzIHdoaWNoIHdpbGwgYmUgcGFzc2VkIG9udG8g
dGhlIGV2ZW50IGxpc3RlbmVycy4KLSAgICAgICAqIEByZXR1cm4ge09iamVjdH0gRXZlbnQgb2Jq
ZWN0LCBzZWUge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJG9ufQotICAgICAgICovCi0gICAg
ICAkYnJvYWRjYXN0OiBmdW5jdGlvbihuYW1lLCBhcmdzKSB7Ci0gICAgICAgIHZhciB0YXJnZXQg
PSB0aGlzLAotICAgICAgICAgICAgY3VycmVudCA9IHRhcmdldCwKLSAgICAgICAgICAgIG5leHQg
PSB0YXJnZXQsCi0gICAgICAgICAgICBldmVudCA9IHsKLSAgICAgICAgICAgICAgbmFtZTogbmFt
ZSwKLSAgICAgICAgICAgICAgdGFyZ2V0U2NvcGU6IHRhcmdldCwKLSAgICAgICAgICAgICAgcHJl
dmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGV2ZW50LmRlZmF1bHRQ
cmV2ZW50ZWQgPSB0cnVlOwotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICBkZWZhdWx0
UHJldmVudGVkOiBmYWxzZQotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIGxpc3RlbmVyQXJn
cyA9IGNvbmNhdChbZXZlbnRdLCBhcmd1bWVudHMsIDEpLAotICAgICAgICAgICAgbGlzdGVuZXJz
LCBpLCBsZW5ndGg7Ci0KLSAgICAgICAgLy9kb3duIHdoaWxlIHlvdSBjYW4sIHRoZW4gdXAgYW5k
IG5leHQgc2libGluZyBvciB1cCBhbmQgbmV4dCBzaWJsaW5nIHVudGlsIGJhY2sgYXQgcm9vdAot
ICAgICAgICBkbyB7Ci0gICAgICAgICAgY3VycmVudCA9IG5leHQ7Ci0gICAgICAgICAgZXZlbnQu
Y3VycmVudFNjb3BlID0gY3VycmVudDsKLSAgICAgICAgICBsaXN0ZW5lcnMgPSBjdXJyZW50LiQk
bGlzdGVuZXJzW25hbWVdIHx8IFtdOwotICAgICAgICAgIGZvciAoaT0wLCBsZW5ndGggPSBsaXN0
ZW5lcnMubGVuZ3RoOyBpPGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAvLyBpZiBsaXN0ZW5l
cnMgd2VyZSBkZXJlZ2lzdGVyZWQsIGRlZnJhZ21lbnQgdGhlIGFycmF5Ci0gICAgICAgICAgICBp
ZiAoIWxpc3RlbmVyc1tpXSkgewotICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEp
OwotICAgICAgICAgICAgICBpLS07Ci0gICAgICAgICAgICAgIGxlbmd0aC0tOwotICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdHJ5IHsKLSAgICAg
ICAgICAgICAgbGlzdGVuZXJzW2ldLmFwcGx5KG51bGwsIGxpc3RlbmVyQXJncyk7Ci0gICAgICAg
ICAgICB9IGNhdGNoKGUpIHsKLSAgICAgICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoZSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLy8gSW5zYW5pdHkgV2Fybmlu
Zzogc2NvcGUgZGVwdGgtZmlyc3QgdHJhdmVyc2FsCi0gICAgICAgICAgLy8geWVzLCB0aGlzIGNv
ZGUgaXMgYSBiaXQgY3JhenksIGJ1dCBpdCB3b3JrcyBhbmQgd2UgaGF2ZSB0ZXN0cyB0byBwcm92
ZSBpdCEKLSAgICAgICAgICAvLyB0aGlzIHBpZWNlIHNob3VsZCBiZSBrZXB0IGluIHN5bmMgd2l0
aCB0aGUgdHJhdmVyc2FsIGluICRkaWdlc3QKLSAgICAgICAgICBpZiAoIShuZXh0ID0gKGN1cnJl
bnQuJCRjaGlsZEhlYWQgfHwgKGN1cnJlbnQgIT09IHRhcmdldCAmJiBjdXJyZW50LiQkbmV4dFNp
YmxpbmcpKSkpIHsKLSAgICAgICAgICAgIHdoaWxlKGN1cnJlbnQgIT09IHRhcmdldCAmJiAhKG5l
eHQgPSBjdXJyZW50LiQkbmV4dFNpYmxpbmcpKSB7Ci0gICAgICAgICAgICAgIGN1cnJlbnQgPSBj
dXJyZW50LiRwYXJlbnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9IHdo
aWxlICgoY3VycmVudCA9IG5leHQpKTsKLQotICAgICAgICByZXR1cm4gZXZlbnQ7Ci0gICAgICB9
Ci0gICAgfTsKLQotICAgIHZhciAkcm9vdFNjb3BlID0gbmV3IFNjb3BlKCk7Ci0KLSAgICByZXR1
cm4gJHJvb3RTY29wZTsKLQotCi0gICAgZnVuY3Rpb24gYmVnaW5QaGFzZShwaGFzZSkgewotICAg
ICAgaWYgKCRyb290U2NvcGUuJCRwaGFzZSkgewotICAgICAgICB0aHJvdyBFcnJvcigkcm9vdFNj
b3BlLiQkcGhhc2UgKyAnIGFscmVhZHkgaW4gcHJvZ3Jlc3MnKTsKLSAgICAgIH0KLQotICAgICAg
JHJvb3RTY29wZS4kJHBoYXNlID0gcGhhc2U7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gY2xlYXJQ
aGFzZSgpIHsKLSAgICAgICRyb290U2NvcGUuJCRwaGFzZSA9IG51bGw7Ci0gICAgfQotCi0gICAg
ZnVuY3Rpb24gY29tcGlsZVRvRm4oZXhwLCBuYW1lKSB7Ci0gICAgICB2YXIgZm4gPSAkcGFyc2Uo
ZXhwKTsKLSAgICAgIGFzc2VydEFyZ0ZuKGZuLCBuYW1lKTsKLSAgICAgIHJldHVybiBmbjsKLSAg
ICB9Ci0KLSAgICAvKioKLSAgICAgKiBmdW5jdGlvbiB1c2VkIGFzIGFuIGluaXRpYWwgdmFsdWUg
Zm9yIHdhdGNoZXJzLgotICAgICAqIGJlY2F1c2UgaXQncyB1bmlxdWUgd2UgY2FuIGVhc2lseSB0
ZWxsIGl0IGFwYXJ0IGZyb20gb3RoZXIgdmFsdWVzCi0gICAgICovCi0gICAgZnVuY3Rpb24gaW5p
dFdhdGNoVmFsKCkge30KLSAgfV07Ci19Ci0KLS8qKgotICogISEhIFRoaXMgaXMgYW4gdW5kb2N1
bWVudGVkICJwcml2YXRlIiBzZXJ2aWNlICEhIQotICoKLSAqIEBuYW1lIG5nLiRzbmlmZmVyCi0g
KiBAcmVxdWlyZXMgJHdpbmRvdwotICoKLSAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaGlzdG9yeSBE
b2VzIHRoZSBicm93c2VyIHN1cHBvcnQgaHRtbDUgaGlzdG9yeSBhcGkgPwotICogQHByb3BlcnR5
IHtib29sZWFufSBoYXNoY2hhbmdlIERvZXMgdGhlIGJyb3dzZXIgc3VwcG9ydCBoYXNoY2hhbmdl
IGV2ZW50ID8KLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIFRoaXMgaXMgdmVyeSBzaW1wbGUgaW1w
bGVtZW50YXRpb24gb2YgdGVzdGluZyBicm93c2VyJ3MgZmVhdHVyZXMuCi0gKi8KLWZ1bmN0aW9u
ICRTbmlmZmVyUHJvdmlkZXIoKSB7Ci0gIHRoaXMuJGdldCA9IFsnJHdpbmRvdycsIGZ1bmN0aW9u
KCR3aW5kb3cpIHsKLSAgICB2YXIgZXZlbnRTdXBwb3J0ID0ge30sCi0gICAgICAgIGFuZHJvaWQg
PSBpbnQoKC9hbmRyb2lkIChcZCspLy5leGVjKGxvd2VyY2FzZSgkd2luZG93Lm5hdmlnYXRvci51
c2VyQWdlbnQpKSB8fCBbXSlbMV0pOwotCi0gICAgcmV0dXJuIHsKLSAgICAgIC8vIEFuZHJvaWQg
aGFzIGhpc3RvcnkucHVzaFN0YXRlLCBidXQgaXQgZG9lcyBub3QgdXBkYXRlIGxvY2F0aW9uIGNv
cnJlY3RseQotICAgICAgLy8gc28gbGV0J3Mgbm90IHVzZSB0aGUgaGlzdG9yeSBBUEkgYXQgYWxs
LgotICAgICAgLy8gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZHJvaWQvaXNzdWVzL2RldGFp
bD9pZD0xNzQ3MQotICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci5q
cy9pc3N1ZXMvOTA0Ci0gICAgICBoaXN0b3J5OiAhISgkd2luZG93Lmhpc3RvcnkgJiYgJHdpbmRv
dy5oaXN0b3J5LnB1c2hTdGF0ZSAmJiAhKGFuZHJvaWQgPCA0KSksCi0gICAgICBoYXNoY2hhbmdl
OiAnb25oYXNoY2hhbmdlJyBpbiAkd2luZG93ICYmCi0gICAgICAgICAgICAgICAgICAvLyBJRTgg
Y29tcGF0aWJsZSBtb2RlIGxpZXMKLSAgICAgICAgICAgICAgICAgICghJHdpbmRvdy5kb2N1bWVu
dC5kb2N1bWVudE1vZGUgfHwgJHdpbmRvdy5kb2N1bWVudC5kb2N1bWVudE1vZGUgPiA3KSwKLSAg
ICAgIGhhc0V2ZW50OiBmdW5jdGlvbihldmVudCkgewotICAgICAgICAvLyBJRTkgaW1wbGVtZW50
cyAnaW5wdXQnIGV2ZW50IGl0J3Mgc28gZnViYXJlZCB0aGF0IHdlIHJhdGhlciBwcmV0ZW5kIHRo
YXQgaXQgZG9lc24ndCBoYXZlCi0gICAgICAgIC8vIGl0LiBJbiBwYXJ0aWN1bGFyIHRoZSBldmVu
dCBpcyBub3QgZmlyZWQgd2hlbiBiYWNrc3BhY2Ugb3IgZGVsZXRlIGtleSBhcmUgcHJlc3NlZCBv
cgotICAgICAgICAvLyB3aGVuIGN1dCBvcGVyYXRpb24gaXMgcGVyZm9ybWVkLgotICAgICAgICBp
ZiAoZXZlbnQgPT0gJ2lucHV0JyAmJiBtc2llID09IDkpIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICBpZiAoaXNVbmRlZmluZWQoZXZlbnRTdXBwb3J0W2V2ZW50XSkpIHsKLSAgICAgICAgICB2YXIg
ZGl2RWxtID0gJHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLSAgICAgICAg
ICBldmVudFN1cHBvcnRbZXZlbnRdID0gJ29uJyArIGV2ZW50IGluIGRpdkVsbTsKLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiBldmVudFN1cHBvcnRbZXZlbnRdOwotICAgICAgfSwKLSAgICAg
IC8vIFRPRE8oaSk6IGN1cnJlbnRseSB0aGVyZSBpcyBubyB3YXkgdG8gZmVhdHVyZSBkZXRlY3Qg
Q1NQIHdpdGhvdXQgdHJpZ2dlcmluZyBhbGVydHMKLSAgICAgIGNzcDogZmFsc2UKLSAgICB9Owot
ICB9XTsKLX0KLQotLyoqCi0gKiBAbmdkb2Mgb2JqZWN0Ci0gKiBAbmFtZSBuZy4kd2luZG93Ci0g
KgotICogQGRlc2NyaXB0aW9uCi0gKiBBIHJlZmVyZW5jZSB0byB0aGUgYnJvd3NlcidzIGB3aW5k
b3dgIG9iamVjdC4gV2hpbGUgYHdpbmRvd2AKLSAqIGlzIGdsb2JhbGx5IGF2YWlsYWJsZSBpbiBK
YXZhU2NyaXB0LCBpdCBjYXVzZXMgdGVzdGFiaWxpdHkgcHJvYmxlbXMsIGJlY2F1c2UKLSAqIGl0
IGlzIGEgZ2xvYmFsIHZhcmlhYmxlLiBJbiBhbmd1bGFyIHdlIGFsd2F5cyByZWZlciB0byBpdCB0
aHJvdWdoIHRoZQotICogYCR3aW5kb3dgIHNlcnZpY2UsIHNvIGl0IG1heSBiZSBvdmVycmlkZW4s
IHJlbW92ZWQgb3IgbW9ja2VkIGZvciB0ZXN0aW5nLgotICoKLSAqIEFsbCBleHByZXNzaW9ucyBh
cmUgZXZhbHVhdGVkIHdpdGggcmVzcGVjdCB0byBjdXJyZW50IHNjb3BlIHNvIHRoZXkgZG9uJ3QK
LSAqIHN1ZmZlciBmcm9tIHdpbmRvdyBnbG9iYWxpdHkuCi0gKgotICogQGV4YW1wbGUKLSAgIDxk
b2M6ZXhhbXBsZT4KLSAgICAgPGRvYzpzb3VyY2U+Ci0gICAgICAgPHNjcmlwdD4KLSAgICAgICAg
IGZ1bmN0aW9uIEN0cmwoJHNjb3BlLCAkd2luZG93KSB7Ci0gICAgICAgICAgICRzY29wZS4kd2lu
ZG93ID0gJHdpbmRvdzsKLSAgICAgICAgICAgJHNjb3BlLmdyZWV0aW5nID0gJ0hlbGxvLCBXb3Js
ZCEnOwotICAgICAgICAgfQotICAgICAgIDwvc2NyaXB0PgotICAgICAgIDxkaXYgbmctY29udHJv
bGxlcj0iQ3RybCI+Ci0gICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmctbW9kZWw9ImdyZWV0
aW5nIiAvPgotICAgICAgICAgPGJ1dHRvbiBuZy1jbGljaz0iJHdpbmRvdy5hbGVydChncmVldGlu
ZykiPkFMRVJUPC9idXR0b24+Ci0gICAgICAgPC9kaXY+Ci0gICAgIDwvZG9jOnNvdXJjZT4KLSAg
ICAgPGRvYzpzY2VuYXJpbz4KLSAgICAgIGl0KCdzaG91bGQgZGlzcGxheSB0aGUgZ3JlZXRpbmcg
aW4gdGhlIGlucHV0IGJveCcsIGZ1bmN0aW9uKCkgewotICAgICAgIGlucHV0KCdncmVldGluZycp
LmVudGVyKCdIZWxsbywgRTJFIFRlc3RzJyk7Ci0gICAgICAgLy8gSWYgd2UgY2xpY2sgdGhlIGJ1
dHRvbiBpdCB3aWxsIGJsb2NrIHRoZSB0ZXN0IHJ1bm5lcgotICAgICAgIC8vIGVsZW1lbnQoJzpi
dXR0b24nKS5jbGljaygpOwotICAgICAgfSk7Ci0gICAgIDwvZG9jOnNjZW5hcmlvPgotICAgPC9k
b2M6ZXhhbXBsZT4KLSAqLwotZnVuY3Rpb24gJFdpbmRvd1Byb3ZpZGVyKCl7Ci0gIHRoaXMuJGdl
dCA9IHZhbHVlRm4od2luZG93KTsKLX0KLQotLyoqCi0gKiBQYXJzZSBoZWFkZXJzIGludG8ga2V5
IHZhbHVlIG9iamVjdAotICoKLSAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXJzIFJhdyBoZWFkZXJz
IGFzIGEgc3RyaW5nCi0gKiBAcmV0dXJucyB7T2JqZWN0fSBQYXJzZWQgaGVhZGVycyBhcyBrZXkg
dmFsdWUgb2JqZWN0Ci0gKi8KLWZ1bmN0aW9uIHBhcnNlSGVhZGVycyhoZWFkZXJzKSB7Ci0gIHZh
ciBwYXJzZWQgPSB7fSwga2V5LCB2YWwsIGk7Ci0KLSAgaWYgKCFoZWFkZXJzKSByZXR1cm4gcGFy
c2VkOwotCi0gIGZvckVhY2goaGVhZGVycy5zcGxpdCgnXG4nKSwgZnVuY3Rpb24obGluZSkgewot
ICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTsKLSAgICBrZXkgPSBsb3dlcmNhc2UodHJpbShsaW5l
LnN1YnN0cigwLCBpKSkpOwotICAgIHZhbCA9IHRyaW0obGluZS5zdWJzdHIoaSArIDEpKTsKLQot
ICAgIGlmIChrZXkpIHsKLSAgICAgIGlmIChwYXJzZWRba2V5XSkgewotICAgICAgICBwYXJzZWRb
a2V5XSArPSAnLCAnICsgdmFsOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcGFyc2VkW2tleV0g
PSB2YWw7Ci0gICAgICB9Ci0gICAgfQotICB9KTsKLQotICByZXR1cm4gcGFyc2VkOwotfQotCi0K
LS8qKgotICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgcHJvdmlkZXMgYWNjZXNzIHRvIHBhcnNl
ZCBoZWFkZXJzLgotICoKLSAqIEhlYWRlcnMgYXJlIGxhenkgcGFyc2VkIHdoZW4gZmlyc3QgcmVx
dWVzdGVkLgotICogQHNlZSBwYXJzZUhlYWRlcnMKLSAqCi0gKiBAcGFyYW0geyhzdHJpbmd8T2Jq
ZWN0KX0gaGVhZGVycyBIZWFkZXJzIHRvIHByb3ZpZGUgYWNjZXNzIHRvLgotICogQHJldHVybnMg
e2Z1bmN0aW9uKHN0cmluZz0pfSBSZXR1cm5zIGEgZ2V0dGVyIGZ1bmN0aW9uIHdoaWNoIGlmIGNh
bGxlZCB3aXRoOgotICoKLSAqICAgLSBpZiBjYWxsZWQgd2l0aCBzaW5nbGUgYW4gYXJndW1lbnQg
cmV0dXJucyBhIHNpbmdsZSBoZWFkZXIgdmFsdWUgb3IgbnVsbAotICogICAtIGlmIGNhbGxlZCB3
aXRoIG5vIGFyZ3VtZW50cyByZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIGFsbCBoZWFkZXJz
LgotICovCi1mdW5jdGlvbiBoZWFkZXJzR2V0dGVyKGhlYWRlcnMpIHsKLSAgdmFyIGhlYWRlcnNP
YmogPSBpc09iamVjdChoZWFkZXJzKSA/IGhlYWRlcnMgOiB1bmRlZmluZWQ7Ci0KLSAgcmV0dXJu
IGZ1bmN0aW9uKG5hbWUpIHsKLSAgICBpZiAoIWhlYWRlcnNPYmopIGhlYWRlcnNPYmogPSAgcGFy
c2VIZWFkZXJzKGhlYWRlcnMpOwotCi0gICAgaWYgKG5hbWUpIHsKLSAgICAgIHJldHVybiBoZWFk
ZXJzT2JqW2xvd2VyY2FzZShuYW1lKV0gfHwgbnVsbDsKLSAgICB9Ci0KLSAgICByZXR1cm4gaGVh
ZGVyc09iajsKLSAgfTsKLX0KLQotCi0vKioKLSAqIENoYWluIGFsbCBnaXZlbiBmdW5jdGlvbnMK
LSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIGJvdGggcmVxdWVzdCBhbmQgcmVzcG9u
c2UgdHJhbnNmb3JtaW5nCi0gKgotICogQHBhcmFtIHsqfSBkYXRhIERhdGEgdG8gdHJhbnNmb3Jt
LgotICogQHBhcmFtIHtmdW5jdGlvbihzdHJpbmc9KX0gaGVhZGVycyBIdHRwIGhlYWRlcnMgZ2V0
dGVyIGZuLgotICogQHBhcmFtIHsoZnVuY3Rpb258QXJyYXkuPGZ1bmN0aW9uPil9IGZucyBGdW5j
dGlvbiBvciBhbiBhcnJheSBvZiBmdW5jdGlvbnMuCi0gKiBAcmV0dXJucyB7Kn0gVHJhbnNmb3Jt
ZWQgZGF0YS4KLSAqLwotZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShkYXRhLCBoZWFkZXJzLCBmbnMp
IHsKLSAgaWYgKGlzRnVuY3Rpb24oZm5zKSkKLSAgICByZXR1cm4gZm5zKGRhdGEsIGhlYWRlcnMp
OwotCi0gIGZvckVhY2goZm5zLCBmdW5jdGlvbihmbikgewotICAgIGRhdGEgPSBmbihkYXRhLCBo
ZWFkZXJzKTsKLSAgfSk7Ci0KLSAgcmV0dXJuIGRhdGE7Ci19Ci0KLQotZnVuY3Rpb24gaXNTdWNj
ZXNzKHN0YXR1cykgewotICByZXR1cm4gMjAwIDw9IHN0YXR1cyAmJiBzdGF0dXMgPCAzMDA7Ci19
Ci0KLQotZnVuY3Rpb24gJEh0dHBQcm92aWRlcigpIHsKLSAgdmFyIEpTT05fU1RBUlQgPSAvXlxz
KihcW3xce1teXHtdKS8sCi0gICAgICBKU09OX0VORCA9IC9bXH1cXV1ccyokLywKLSAgICAgIFBS
T1RFQ1RJT05fUFJFRklYID0gL15cKVxdXH0nLD9cbi87Ci0KLSAgdmFyICRjb25maWcgPSB0aGlz
LmRlZmF1bHRzID0gewotICAgIC8vIHRyYW5zZm9ybSBpbmNvbWluZyByZXNwb25zZSBkYXRhCi0g
ICAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbihkYXRhKSB7Ci0gICAgICBpZiAoaXNTdHJp
bmcoZGF0YSkpIHsKLSAgICAgICAgLy8gc3RyaXAganNvbiB2dWxuZXJhYmlsaXR5IHByb3RlY3Rp
b24gcHJlZml4Ci0gICAgICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoUFJPVEVDVElPTl9QUkVGSVgs
ICcnKTsKLSAgICAgICAgaWYgKEpTT05fU1RBUlQudGVzdChkYXRhKSAmJiBKU09OX0VORC50ZXN0
KGRhdGEpKQotICAgICAgICAgIGRhdGEgPSBmcm9tSnNvbihkYXRhLCB0cnVlKTsKLSAgICAgIH0K
LSAgICAgIHJldHVybiBkYXRhOwotICAgIH1dLAotCi0gICAgLy8gdHJhbnNmb3JtIG91dGdvaW5n
IHJlcXVlc3QgZGF0YQotICAgIHRyYW5zZm9ybVJlcXVlc3Q6IFtmdW5jdGlvbihkKSB7Ci0gICAg
ICByZXR1cm4gaXNPYmplY3QoZCkgJiYgIWlzRmlsZShkKSA/IHRvSnNvbihkKSA6IGQ7Ci0gICAg
fV0sCi0KLSAgICAvLyBkZWZhdWx0IGhlYWRlcnMKLSAgICBoZWFkZXJzOiB7Ci0gICAgICBjb21t
b246IHsKLSAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAq
LyonLAotICAgICAgICAnWC1SZXF1ZXN0ZWQtV2l0aCc6ICdYTUxIdHRwUmVxdWVzdCcKLSAgICAg
IH0sCi0gICAgICBwb3N0OiB7J0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uO2NoYXJz
ZXQ9dXRmLTgnfSwKLSAgICAgIHB1dDogIHsnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pz
b247Y2hhcnNldD11dGYtOCd9Ci0gICAgfQotICB9OwotCi0gIHZhciBwcm92aWRlclJlc3BvbnNl
SW50ZXJjZXB0b3JzID0gdGhpcy5yZXNwb25zZUludGVyY2VwdG9ycyA9IFtdOwotCi0gIHRoaXMu
JGdldCA9IFsnJGh0dHBCYWNrZW5kJywgJyRicm93c2VyJywgJyRjYWNoZUZhY3RvcnknLCAnJHJv
b3RTY29wZScsICckcScsICckaW5qZWN0b3InLAotICAgICAgZnVuY3Rpb24oJGh0dHBCYWNrZW5k
LCAkYnJvd3NlciwgJGNhY2hlRmFjdG9yeSwgJHJvb3RTY29wZSwgJHEsICRpbmplY3Rvcikgewot
Ci0gICAgdmFyIGRlZmF1bHRDYWNoZSA9ICRjYWNoZUZhY3RvcnkoJyRodHRwJyksCi0gICAgICAg
IHJlc3BvbnNlSW50ZXJjZXB0b3JzID0gW107Ci0KLSAgICBmb3JFYWNoKHByb3ZpZGVyUmVzcG9u
c2VJbnRlcmNlcHRvcnMsIGZ1bmN0aW9uKGludGVyY2VwdG9yKSB7Ci0gICAgICByZXNwb25zZUlu
dGVyY2VwdG9ycy5wdXNoKAotICAgICAgICAgIGlzU3RyaW5nKGludGVyY2VwdG9yKQotICAgICAg
ICAgICAgICA/ICRpbmplY3Rvci5nZXQoaW50ZXJjZXB0b3IpCi0gICAgICAgICAgICAgIDogJGlu
amVjdG9yLmludm9rZShpbnRlcmNlcHRvcikKLSAgICAgICk7Ci0gICAgfSk7Ci0KLQotICAgIC8q
KgotICAgICAqIEBuZ2RvYyBmdW5jdGlvbgotICAgICAqIEBuYW1lIG5nLiRodHRwCi0gICAgICog
QHJlcXVpcmVzICRodHRwQmFja2VuZAotICAgICAqIEByZXF1aXJlcyAkYnJvd3NlcgotICAgICAq
IEByZXF1aXJlcyAkY2FjaGVGYWN0b3J5Ci0gICAgICogQHJlcXVpcmVzICRyb290U2NvcGUKLSAg
ICAgKiBAcmVxdWlyZXMgJHEKLSAgICAgKiBAcmVxdWlyZXMgJGluamVjdG9yCi0gICAgICoKLSAg
ICAgKiBAZGVzY3JpcHRpb24KLSAgICAgKiBUaGUgYCRodHRwYCBzZXJ2aWNlIGlzIGEgY29yZSBB
bmd1bGFyIHNlcnZpY2UgdGhhdCBmYWNpbGl0YXRlcyBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHJl
bW90ZQotICAgICAqIEhUVFAgc2VydmVycyB2aWEgdGhlIGJyb3dzZXIncyB7QGxpbmsgaHR0cHM6
Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4veG1saHR0cHJlcXVlc3QKLSAgICAgKiBYTUxIdHRw
UmVxdWVzdH0gb2JqZWN0IG9yIHZpYSB7QGxpbmsgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lr
aS9KU09OUCBKU09OUH0uCi0gICAgICoKLSAgICAgKiBGb3IgdW5pdCB0ZXN0aW5nIGFwcGxpY2F0
aW9ucyB0aGF0IHVzZSBgJGh0dHBgIHNlcnZpY2UsIHNlZQotICAgICAqIHtAbGluayBuZ01vY2su
JGh0dHBCYWNrZW5kICRodHRwQmFja2VuZCBtb2NrfS4KLSAgICAgKgotICAgICAqIEZvciBhIGhp
Z2hlciBsZXZlbCBvZiBhYnN0cmFjdGlvbiwgcGxlYXNlIGNoZWNrIG91dCB0aGUge0BsaW5rIG5n
UmVzb3VyY2UuJHJlc291cmNlCi0gICAgICogJHJlc291cmNlfSBzZXJ2aWNlLgotICAgICAqCi0g
ICAgICogVGhlICRodHRwIEFQSSBpcyBiYXNlZCBvbiB0aGUge0BsaW5rIG5nLiRxIGRlZmVycmVk
L3Byb21pc2UgQVBJc30gZXhwb3NlZCBieQotICAgICAqIHRoZSAkcSBzZXJ2aWNlLiBXaGlsZSBm
b3Igc2ltcGxlIHVzYWdlIHBhdHRlcm5zIHRoaXMgZG9lc24ndCBtYXR0ZXIgbXVjaCwgZm9yIGFk
dmFuY2VkIHVzYWdlCi0gICAgICogaXQgaXMgaW1wb3J0YW50IHRvIGZhbWlsaWFyaXplIHlvdXJz
ZWxmIHdpdGggdGhlc2UgQVBJcyBhbmQgdGhlIGd1YXJhbnRlZXMgdGhleSBwcm92aWRlLgotICAg
ICAqCi0gICAgICoKLSAgICAgKiAjIEdlbmVyYWwgdXNhZ2UKLSAgICAgKiBUaGUgYCRodHRwYCBz
ZXJ2aWNlIGlzIGEgZnVuY3Rpb24gd2hpY2ggdGFrZXMgYSBzaW5nbGUgYXJndW1lbnQg4oCUIGEg
Y29uZmlndXJhdGlvbiBvYmplY3Qg4oCUCi0gICAgICogdGhhdCBpcyB1c2VkIHRvIGdlbmVyYXRl
IGFuIEhUVFAgcmVxdWVzdCBhbmQgcmV0dXJucyAgYSB7QGxpbmsgbmcuJHEgcHJvbWlzZX0KLSAg
ICAgKiB3aXRoIHR3byAkaHR0cCBzcGVjaWZpYyBtZXRob2RzOiBgc3VjY2Vzc2AgYW5kIGBlcnJv
cmAuCi0gICAgICoKLSAgICAgKiA8cHJlPgotICAgICAqICAgJGh0dHAoe21ldGhvZDogJ0dFVCcs
IHVybDogJy9zb21lVXJsJ30pLgotICAgICAqICAgICBzdWNjZXNzKGZ1bmN0aW9uKGRhdGEsIHN0
YXR1cywgaGVhZGVycywgY29uZmlnKSB7Ci0gICAgICogICAgICAgLy8gdGhpcyBjYWxsYmFjayB3
aWxsIGJlIGNhbGxlZCBhc3luY2hyb25vdXNseQotICAgICAqICAgICAgIC8vIHdoZW4gdGhlIHJl
c3BvbnNlIGlzIGF2YWlsYWJsZQotICAgICAqICAgICB9KS4KLSAgICAgKiAgICAgZXJyb3IoZnVu
Y3Rpb24oZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHsKLSAgICAgKiAgICAgICAvLyBj
YWxsZWQgYXN5bmNocm9ub3VzbHkgaWYgYW4gZXJyb3Igb2NjdXJzCi0gICAgICogICAgICAgLy8g
b3Igc2VydmVyIHJldHVybnMgcmVzcG9uc2Ugd2l0aCBhbiBlcnJvciBzdGF0dXMuCi0gICAgICog
ICAgIH0pOwotICAgICAqIDwvcHJlPgotICAgICAqCi0gICAgICogU2luY2UgdGhlIHJldHVybmVk
IHZhbHVlIG9mIGNhbGxpbmcgdGhlICRodHRwIGZ1bmN0aW9uIGlzIGEgYHByb21pc2VgLCB5b3Ug
Y2FuIGFsc28gdXNlCi0gICAgICogdGhlIGB0aGVuYCBtZXRob2QgdG8gcmVnaXN0ZXIgY2FsbGJh
Y2tzLCBhbmQgdGhlc2UgY2FsbGJhY2tzIHdpbGwgcmVjZWl2ZSBhIHNpbmdsZSBhcmd1bWVudCDi
gJMKLSAgICAgKiBhbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXNwb25zZS4gU2VlIHRoZSBB
UEkgc2lnbmF0dXJlIGFuZCB0eXBlIGluZm8gYmVsb3cgZm9yIG1vcmUKLSAgICAgKiBkZXRhaWxz
LgotICAgICAqCi0gICAgICogQSByZXNwb25zZSBzdGF0dXMgY29kZSBiZXR3ZWVuIDIwMCBhbmQg
Mjk5IGlzIGNvbnNpZGVyZWQgYSBzdWNjZXNzIHN0YXR1cyBhbmQKLSAgICAgKiB3aWxsIHJlc3Vs
dCBpbiB0aGUgc3VjY2VzcyBjYWxsYmFjayBiZWluZyBjYWxsZWQuIE5vdGUgdGhhdCBpZiB0aGUg
cmVzcG9uc2UgaXMgYSByZWRpcmVjdCwKLSAgICAgKiBYTUxIdHRwUmVxdWVzdCB3aWxsIHRyYW5z
cGFyZW50bHkgZm9sbG93IGl0LCBtZWFuaW5nIHRoYXQgdGhlIGVycm9yIGNhbGxiYWNrIHdpbGwg
bm90IGJlCi0gICAgICogY2FsbGVkIGZvciBzdWNoIHJlc3BvbnNlcy4KLSAgICAgKgotICAgICAq
ICMgU2hvcnRjdXQgbWV0aG9kcwotICAgICAqCi0gICAgICogU2luY2UgYWxsIGludm9jYXRpb25z
IG9mIHRoZSAkaHR0cCBzZXJ2aWNlIHJlcXVpcmUgcGFzc2luZyBpbiBhbiBIVFRQIG1ldGhvZCBh
bmQgVVJMLCBhbmQKLSAgICAgKiBQT1NUL1BVVCByZXF1ZXN0cyByZXF1aXJlIHJlcXVlc3QgZGF0
YSB0byBiZSBwcm92aWRlZCBhcyB3ZWxsLCBzaG9ydGN1dCBtZXRob2RzCi0gICAgICogd2VyZSBj
cmVhdGVkOgotICAgICAqCi0gICAgICogPHByZT4KLSAgICAgKiAgICRodHRwLmdldCgnL3NvbWVV
cmwnKS5zdWNjZXNzKHN1Y2Nlc3NDYWxsYmFjayk7Ci0gICAgICogICAkaHR0cC5wb3N0KCcvc29t
ZVVybCcsIGRhdGEpLnN1Y2Nlc3Moc3VjY2Vzc0NhbGxiYWNrKTsKLSAgICAgKiA8L3ByZT4KLSAg
ICAgKgotICAgICAqIENvbXBsZXRlIGxpc3Qgb2Ygc2hvcnRjdXQgbWV0aG9kczoKLSAgICAgKgot
ICAgICAqIC0ge0BsaW5rIG5nLiRodHRwI2dldCAkaHR0cC5nZXR9Ci0gICAgICogLSB7QGxpbmsg
bmcuJGh0dHAjaGVhZCAkaHR0cC5oZWFkfQotICAgICAqIC0ge0BsaW5rIG5nLiRodHRwI3Bvc3Qg
JGh0dHAucG9zdH0KLSAgICAgKiAtIHtAbGluayBuZy4kaHR0cCNwdXQgJGh0dHAucHV0fQotICAg
ICAqIC0ge0BsaW5rIG5nLiRodHRwI2RlbGV0ZSAkaHR0cC5kZWxldGV9Ci0gICAgICogLSB7QGxp
bmsgbmcuJGh0dHAjanNvbnAgJGh0dHAuanNvbnB9Ci0gICAgICoKLSAgICAgKgotICAgICAqICMg
U2V0dGluZyBIVFRQIEhlYWRlcnMKLSAgICAgKgotICAgICAqIFRoZSAkaHR0cCBzZXJ2aWNlIHdp
bGwgYXV0b21hdGljYWxseSBhZGQgY2VydGFpbiBIVFRQIGhlYWRlcnMgdG8gYWxsIHJlcXVlc3Rz
LiBUaGVzZSBkZWZhdWx0cwotICAgICAqIGNhbiBiZSBmdWxseSBjb25maWd1cmVkIGJ5IGFjY2Vz
c2luZyB0aGUgYCRodHRwUHJvdmlkZXIuZGVmYXVsdHMuaGVhZGVyc2AgY29uZmlndXJhdGlvbgot
ICAgICAqIG9iamVjdCwgd2hpY2ggY3VycmVudGx5IGNvbnRhaW5zIHRoaXMgZGVmYXVsdCBjb25m
aWd1cmF0aW9uOgotICAgICAqCi0gICAgICogLSBgJGh0dHBQcm92aWRlci5kZWZhdWx0cy5oZWFk
ZXJzLmNvbW1vbmAgKGhlYWRlcnMgdGhhdCBhcmUgY29tbW9uIGZvciBhbGwgcmVxdWVzdHMpOgot
ICAgICAqICAgLSBgQWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqIC8gKmAK
LSAgICAgKiAgIC0gYFgtUmVxdWVzdGVkLVdpdGg6IFhNTEh0dHBSZXF1ZXN0YAotICAgICAqIC0g
YCRodHRwUHJvdmlkZXIuZGVmYXVsdHMuaGVhZGVycy5wb3N0YDogKGhlYWRlciBkZWZhdWx0cyBm
b3IgUE9TVCByZXF1ZXN0cykKLSAgICAgKiAgIC0gYENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24v
anNvbmAKLSAgICAgKiAtIGAkaHR0cFByb3ZpZGVyLmRlZmF1bHRzLmhlYWRlcnMucHV0YCAoaGVh
ZGVyIGRlZmF1bHRzIGZvciBQVVQgcmVxdWVzdHMpCi0gICAgICogICAtIGBDb250ZW50LVR5cGU6
IGFwcGxpY2F0aW9uL2pzb25gCi0gICAgICoKLSAgICAgKiBUbyBhZGQgb3Igb3ZlcndyaXRlIHRo
ZXNlIGRlZmF1bHRzLCBzaW1wbHkgYWRkIG9yIHJlbW92ZSBhIHByb3BlcnR5IGZyb20gdGhlc2Ug
Y29uZmlndXJhdGlvbgotICAgICAqIG9iamVjdHMuIFRvIGFkZCBoZWFkZXJzIGZvciBhbiBIVFRQ
IG1ldGhvZCBvdGhlciB0aGFuIFBPU1Qgb3IgUFVULCBzaW1wbHkgYWRkIGEgbmV3IG9iamVjdAot
ICAgICAqIHdpdGggdGhlIGxvd2VyY2FzZWQgSFRUUCBtZXRob2QgbmFtZSBhcyB0aGUga2V5LCBl
LmcuCi0gICAgICogYCRodHRwUHJvdmlkZXIuZGVmYXVsdHMuaGVhZGVycy5nZXRbJ015LUhlYWRl
ciddPSd2YWx1ZSdgLgotICAgICAqCi0gICAgICogQWRkaXRpb25hbGx5LCB0aGUgZGVmYXVsdHMg
Y2FuIGJlIHNldCBhdCBydW50aW1lIHZpYSB0aGUgYCRodHRwLmRlZmF1bHRzYCBvYmplY3QgaW4g
dGhlIHNhbWUKLSAgICAgKiBmYXNoaW9uLgotICAgICAqCi0gICAgICoKLSAgICAgKiAjIFRyYW5z
Zm9ybWluZyBSZXF1ZXN0cyBhbmQgUmVzcG9uc2VzCi0gICAgICoKLSAgICAgKiBCb3RoIHJlcXVl
c3RzIGFuZCByZXNwb25zZXMgY2FuIGJlIHRyYW5zZm9ybWVkIHVzaW5nIHRyYW5zZm9ybSBmdW5j
dGlvbnMuIEJ5IGRlZmF1bHQsIEFuZ3VsYXIKLSAgICAgKiBhcHBsaWVzIHRoZXNlIHRyYW5zZm9y
bWF0aW9uczoKLSAgICAgKgotICAgICAqIFJlcXVlc3QgdHJhbnNmb3JtYXRpb25zOgotICAgICAq
Ci0gICAgICogLSBJZiB0aGUgYGRhdGFgIHByb3BlcnR5IG9mIHRoZSByZXF1ZXN0IGNvbmZpZ3Vy
YXRpb24gb2JqZWN0IGNvbnRhaW5zIGFuIG9iamVjdCwgc2VyaWFsaXplIGl0IGludG8KLSAgICAg
KiAgIEpTT04gZm9ybWF0LgotICAgICAqCi0gICAgICogUmVzcG9uc2UgdHJhbnNmb3JtYXRpb25z
OgotICAgICAqCi0gICAgICogIC0gSWYgWFNSRiBwcmVmaXggaXMgZGV0ZWN0ZWQsIHN0cmlwIGl0
IChzZWUgU2VjdXJpdHkgQ29uc2lkZXJhdGlvbnMgc2VjdGlvbiBiZWxvdykuCi0gICAgICogIC0g
SWYgSlNPTiByZXNwb25zZSBpcyBkZXRlY3RlZCwgZGVzZXJpYWxpemUgaXQgdXNpbmcgYSBKU09O
IHBhcnNlci4KLSAgICAgKgotICAgICAqIFRvIGdsb2JhbGx5IGF1Z21lbnQgb3Igb3ZlcnJpZGUg
dGhlIGRlZmF1bHQgdHJhbnNmb3JtcywgbW9kaWZ5IHRoZSBgJGh0dHBQcm92aWRlci5kZWZhdWx0
cy50cmFuc2Zvcm1SZXF1ZXN0YCBhbmQKLSAgICAgKiBgJGh0dHBQcm92aWRlci5kZWZhdWx0cy50
cmFuc2Zvcm1SZXNwb25zZWAgcHJvcGVydGllcy4gVGhlc2UgcHJvcGVydGllcyBhcmUgYnkgZGVm
YXVsdCBhbgotICAgICAqIGFycmF5IG9mIHRyYW5zZm9ybSBmdW5jdGlvbnMsIHdoaWNoIGFsbG93
cyB5b3UgdG8gYHB1c2hgIG9yIGB1bnNoaWZ0YCBhIG5ldyB0cmFuc2Zvcm1hdGlvbiBmdW5jdGlv
biBpbnRvIHRoZQotICAgICAqIHRyYW5zZm9ybWF0aW9uIGNoYWluLiBZb3UgY2FuIGFsc28gZGVj
aWRlIHRvIGNvbXBsZXRlbHkgb3ZlcnJpZGUgYW55IGRlZmF1bHQgdHJhbnNmb3JtYXRpb25zIGJ5
IGFzc2lnbmluZyB5b3VyCi0gICAgICogdHJhbnNmb3JtYXRpb24gZnVuY3Rpb25zIHRvIHRoZXNl
IHByb3BlcnRpZXMgZGlyZWN0bHkgd2l0aG91dCB0aGUgYXJyYXkgd3JhcHBlci4KLSAgICAgKgot
ICAgICAqIFNpbWlsYXJseSwgdG8gbG9jYWxseSBvdmVycmlkZSB0aGUgcmVxdWVzdC9yZXNwb25z
ZSB0cmFuc2Zvcm1zLCBhdWdtZW50IHRoZSBgdHJhbnNmb3JtUmVxdWVzdGAgYW5kL29yCi0gICAg
ICogYHRyYW5zZm9ybVJlc3BvbnNlYCBwcm9wZXJ0aWVzIG9mIHRoZSBjb25maWd1cmF0aW9uIG9i
amVjdCBwYXNzZWQgaW50byBgJGh0dHBgLgotICAgICAqCi0gICAgICoKLSAgICAgKiAjIENhY2hp
bmcKLSAgICAgKgotICAgICAqIFRvIGVuYWJsZSBjYWNoaW5nLCBzZXQgdGhlIGNvbmZpZ3VyYXRp
b24gcHJvcGVydHkgYGNhY2hlYCB0byBgdHJ1ZWAuIFdoZW4gdGhlIGNhY2hlIGlzCi0gICAgICog
ZW5hYmxlZCwgYCRodHRwYCBzdG9yZXMgdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlciBpbiBs
b2NhbCBjYWNoZS4gTmV4dCB0aW1lIHRoZQotICAgICAqIHJlc3BvbnNlIGlzIHNlcnZlZCBmcm9t
IHRoZSBjYWNoZSB3aXRob3V0IHNlbmRpbmcgYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIuCi0gICAg
ICoKLSAgICAgKiBOb3RlIHRoYXQgZXZlbiBpZiB0aGUgcmVzcG9uc2UgaXMgc2VydmVkIGZyb20g
Y2FjaGUsIGRlbGl2ZXJ5IG9mIHRoZSBkYXRhIGlzIGFzeW5jaHJvbm91cyBpbgotICAgICAqIHRo
ZSBzYW1lIHdheSB0aGF0IHJlYWwgcmVxdWVzdHMgYXJlLgotICAgICAqCi0gICAgICogSWYgdGhl
cmUgYXJlIG11bHRpcGxlIEdFVCByZXF1ZXN0cyBmb3IgdGhlIHNhbWUgVVJMIHRoYXQgc2hvdWxk
IGJlIGNhY2hlZCB1c2luZyB0aGUgc2FtZQotICAgICAqIGNhY2hlLCBidXQgdGhlIGNhY2hlIGlz
IG5vdCBwb3B1bGF0ZWQgeWV0LCBvbmx5IG9uZSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgd2lsbCBi
ZSBtYWRlIGFuZAotICAgICAqIHRoZSByZW1haW5pbmcgcmVxdWVzdHMgd2lsbCBiZSBmdWxmaWxs
ZWQgdXNpbmcgdGhlIHJlc3BvbnNlIGZyb20gdGhlIGZpcnN0IHJlcXVlc3QuCi0gICAgICoKLSAg
ICAgKgotICAgICAqICMgUmVzcG9uc2UgaW50ZXJjZXB0b3JzCi0gICAgICoKLSAgICAgKiBCZWZv
cmUgeW91IHN0YXJ0IGNyZWF0aW5nIGludGVyY2VwdG9ycywgYmUgc3VyZSB0byB1bmRlcnN0YW5k
IHRoZQotICAgICAqIHtAbGluayBuZy4kcSAkcSBhbmQgZGVmZXJyZWQvcHJvbWlzZSBBUElzfS4K
LSAgICAgKgotICAgICAqIEZvciBwdXJwb3NlcyBvZiBnbG9iYWwgZXJyb3IgaGFuZGxpbmcsIGF1
dGhlbnRpY2F0aW9uIG9yIGFueSBraW5kIG9mIHN5bmNocm9ub3VzIG9yCi0gICAgICogYXN5bmNo
cm9ub3VzIHByZXByb2Nlc3Npbmcgb2YgcmVjZWl2ZWQgcmVzcG9uc2VzLCBpdCBpcyBkZXNpcmFi
bGUgdG8gYmUgYWJsZSB0byBpbnRlcmNlcHQKLSAgICAgKiByZXNwb25zZXMgZm9yIGh0dHAgcmVx
dWVzdHMgYmVmb3JlIHRoZXkgYXJlIGhhbmRlZCBvdmVyIHRvIHRoZSBhcHBsaWNhdGlvbiBjb2Rl
IHRoYXQKLSAgICAgKiBpbml0aWF0ZWQgdGhlc2UgcmVxdWVzdHMuIFRoZSByZXNwb25zZSBpbnRl
cmNlcHRvcnMgbGV2ZXJhZ2UgdGhlIHtAbGluayBuZy4kcQotICAgICAqIHByb21pc2UgYXBpc30g
dG8gZnVsZmlsIHRoaXMgbmVlZCBmb3IgYm90aCBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3Vz
IHByZXByb2Nlc3NpbmcuCi0gICAgICoKLSAgICAgKiBUaGUgaW50ZXJjZXB0b3JzIGFyZSBzZXJ2
aWNlIGZhY3RvcmllcyB0aGF0IGFyZSByZWdpc3RlcmVkIHdpdGggdGhlICRodHRwUHJvdmlkZXIg
YnkKLSAgICAgKiBhZGRpbmcgdGhlbSB0byB0aGUgYCRodHRwUHJvdmlkZXIucmVzcG9uc2VJbnRl
cmNlcHRvcnNgIGFycmF5LiBUaGUgZmFjdG9yeSBpcyBjYWxsZWQgYW5kCi0gICAgICogaW5qZWN0
ZWQgd2l0aCBkZXBlbmRlbmNpZXMgKGlmIHNwZWNpZmllZCkgYW5kIHJldHVybnMgdGhlIGludGVy
Y2VwdG9yICDigJQgYSBmdW5jdGlvbiB0aGF0Ci0gICAgICogdGFrZXMgYSB7QGxpbmsgbmcuJHEg
cHJvbWlzZX0gYW5kIHJldHVybnMgdGhlIG9yaWdpbmFsIG9yIGEgbmV3IHByb21pc2UuCi0gICAg
ICoKLSAgICAgKiA8cHJlPgotICAgICAqICAgLy8gcmVnaXN0ZXIgdGhlIGludGVyY2VwdG9yIGFz
IGEgc2VydmljZQotICAgICAqICAgJHByb3ZpZGUuZmFjdG9yeSgnbXlIdHRwSW50ZXJjZXB0b3In
LCBmdW5jdGlvbigkcSwgZGVwZW5kZW5jeTEsIGRlcGVuZGVuY3kyKSB7Ci0gICAgICogICAgIHJl
dHVybiBmdW5jdGlvbihwcm9taXNlKSB7Ci0gICAgICogICAgICAgcmV0dXJuIHByb21pc2UudGhl
bihmdW5jdGlvbihyZXNwb25zZSkgewotICAgICAqICAgICAgICAgLy8gZG8gc29tZXRoaW5nIG9u
IHN1Y2Nlc3MKLSAgICAgKiAgICAgICB9LCBmdW5jdGlvbihyZXNwb25zZSkgewotICAgICAqICAg
ICAgICAgLy8gZG8gc29tZXRoaW5nIG9uIGVycm9yCi0gICAgICogICAgICAgICBpZiAoY2FuUmVj
b3ZlcihyZXNwb25zZSkpIHsKLSAgICAgKiAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlT3JOZXdQ
cm9taXNlCi0gICAgICogICAgICAgICB9Ci0gICAgICogICAgICAgICByZXR1cm4gJHEucmVqZWN0
KHJlc3BvbnNlKTsKLSAgICAgKiAgICAgICB9KTsKLSAgICAgKiAgICAgfQotICAgICAqICAgfSk7
Ci0gICAgICoKLSAgICAgKiAgICRodHRwUHJvdmlkZXIucmVzcG9uc2VJbnRlcmNlcHRvcnMucHVz
aCgnbXlIdHRwSW50ZXJjZXB0b3InKTsKLSAgICAgKgotICAgICAqCi0gICAgICogICAvLyByZWdp
c3RlciB0aGUgaW50ZXJjZXB0b3IgdmlhIGFuIGFub255bW91cyBmYWN0b3J5Ci0gICAgICogICAk
aHR0cFByb3ZpZGVyLnJlc3BvbnNlSW50ZXJjZXB0b3JzLnB1c2goZnVuY3Rpb24oJHEsIGRlcGVu
ZGVuY3kxLCBkZXBlbmRlbmN5MikgewotICAgICAqICAgICByZXR1cm4gZnVuY3Rpb24ocHJvbWlz
ZSkgewotICAgICAqICAgICAgIC8vIHNhbWUgYXMgYWJvdmUKLSAgICAgKiAgICAgfQotICAgICAq
ICAgfSk7Ci0gICAgICogPC9wcmU+Ci0gICAgICoKLSAgICAgKgotICAgICAqICMgU2VjdXJpdHkg
Q29uc2lkZXJhdGlvbnMKLSAgICAgKgotICAgICAqIFdoZW4gZGVzaWduaW5nIHdlYiBhcHBsaWNh
dGlvbnMsIGNvbnNpZGVyIHNlY3VyaXR5IHRocmVhdHMgZnJvbToKLSAgICAgKgotICAgICAqIC0g
e0BsaW5rIGh0dHA6Ly9oYWFja2VkLmNvbS9hcmNoaXZlLzIwMDgvMTEvMjAvYW5hdG9teS1vZi1h
LXN1YnRsZS1qc29uLXZ1bG5lcmFiaWxpdHkuYXNweAotICAgICAqICAgSlNPTiB2dWxuZXJhYmls
aXR5fQotICAgICAqIC0ge0BsaW5rIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ3Jvc3Mt
c2l0ZV9yZXF1ZXN0X2ZvcmdlcnkgWFNSRn0KLSAgICAgKgotICAgICAqIEJvdGggc2VydmVyIGFu
ZCB0aGUgY2xpZW50IG11c3QgY29vcGVyYXRlIGluIG9yZGVyIHRvIGVsaW1pbmF0ZSB0aGVzZSB0
aHJlYXRzLiBBbmd1bGFyIGNvbWVzCi0gICAgICogcHJlLWNvbmZpZ3VyZWQgd2l0aCBzdHJhdGVn
aWVzIHRoYXQgYWRkcmVzcyB0aGVzZSBpc3N1ZXMsIGJ1dCBmb3IgdGhpcyB0byB3b3JrIGJhY2tl
bmQgc2VydmVyCi0gICAgICogY29vcGVyYXRpb24gaXMgcmVxdWlyZWQuCi0gICAgICoKLSAgICAg
KiAjIyBKU09OIFZ1bG5lcmFiaWxpdHkgUHJvdGVjdGlvbgotICAgICAqCi0gICAgICogQSB7QGxp
bmsgaHR0cDovL2hhYWNrZWQuY29tL2FyY2hpdmUvMjAwOC8xMS8yMC9hbmF0b215LW9mLWEtc3Vi
dGxlLWpzb24tdnVsbmVyYWJpbGl0eS5hc3B4Ci0gICAgICogSlNPTiB2dWxuZXJhYmlsaXR5fSBh
bGxvd3MgdGhpcmQgcGFydHkgd2Vic2l0ZSB0byB0dXJuIHlvdXIgSlNPTiByZXNvdXJjZSBVUkwg
aW50bwotICAgICAqIHtAbGluayBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0pTT05QIEpT
T05QfSByZXF1ZXN0IHVuZGVyIHNvbWUgY29uZGl0aW9ucy4gVG8KLSAgICAgKiBjb3VudGVyIHRo
aXMgeW91ciBzZXJ2ZXIgY2FuIHByZWZpeCBhbGwgSlNPTiByZXF1ZXN0cyB3aXRoIGZvbGxvd2lu
ZyBzdHJpbmcgYCIpXX0nLFxuImAuCi0gICAgICogQW5ndWxhciB3aWxsIGF1dG9tYXRpY2FsbHkg
c3RyaXAgdGhlIHByZWZpeCBiZWZvcmUgcHJvY2Vzc2luZyBpdCBhcyBKU09OLgotICAgICAqCi0g
ICAgICogRm9yIGV4YW1wbGUgaWYgeW91ciBzZXJ2ZXIgbmVlZHMgdG8gcmV0dXJuOgotICAgICAq
IDxwcmU+Ci0gICAgICogWydvbmUnLCd0d28nXQotICAgICAqIDwvcHJlPgotICAgICAqCi0gICAg
ICogd2hpY2ggaXMgdnVsbmVyYWJsZSB0byBhdHRhY2ssIHlvdXIgc2VydmVyIGNhbiByZXR1cm46
Ci0gICAgICogPHByZT4KLSAgICAgKiApXX0nLAotICAgICAqIFsnb25lJywndHdvJ10KLSAgICAg
KiA8L3ByZT4KLSAgICAgKgotICAgICAqIEFuZ3VsYXIgd2lsbCBzdHJpcCB0aGUgcHJlZml4LCBi
ZWZvcmUgcHJvY2Vzc2luZyB0aGUgSlNPTi4KLSAgICAgKgotICAgICAqCi0gICAgICogIyMgQ3Jv
c3MgU2l0ZSBSZXF1ZXN0IEZvcmdlcnkgKFhTUkYpIFByb3RlY3Rpb24KLSAgICAgKgotICAgICAq
IHtAbGluayBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Nyb3NzLXNpdGVfcmVxdWVzdF9m
b3JnZXJ5IFhTUkZ9IGlzIGEgdGVjaG5pcXVlIGJ5IHdoaWNoCi0gICAgICogYW4gdW5hdXRob3Jp
emVkIHNpdGUgY2FuIGdhaW4geW91ciB1c2VyJ3MgcHJpdmF0ZSBkYXRhLiBBbmd1bGFyIHByb3Zp
ZGVzIGEgbWVjaGFuaXNtCi0gICAgICogdG8gY291bnRlciBYU1JGLiBXaGVuIHBlcmZvcm1pbmcg
WEhSIHJlcXVlc3RzLCB0aGUgJGh0dHAgc2VydmljZSByZWFkcyBhIHRva2VuIGZyb20gYSBjb29r
aWUKLSAgICAgKiBjYWxsZWQgYFhTUkYtVE9LRU5gIGFuZCBzZXRzIGl0IGFzIHRoZSBIVFRQIGhl
YWRlciBgWC1YU1JGLVRPS0VOYC4gU2luY2Ugb25seSBKYXZhU2NyaXB0IHRoYXQKLSAgICAgKiBy
dW5zIG9uIHlvdXIgZG9tYWluIGNvdWxkIHJlYWQgdGhlIGNvb2tpZSwgeW91ciBzZXJ2ZXIgY2Fu
IGJlIGFzc3VyZWQgdGhhdCB0aGUgWEhSIGNhbWUgZnJvbQotICAgICAqIEphdmFTY3JpcHQgcnVu
bmluZyBvbiB5b3VyIGRvbWFpbi4KLSAgICAgKgotICAgICAqIFRvIHRha2UgYWR2YW50YWdlIG9m
IHRoaXMsIHlvdXIgc2VydmVyIG5lZWRzIHRvIHNldCBhIHRva2VuIGluIGEgSmF2YVNjcmlwdCBy
ZWFkYWJsZSBzZXNzaW9uCi0gICAgICogY29va2llIGNhbGxlZCBgWFNSRi1UT0tFTmAgb24gdGhl
IGZpcnN0IEhUVFAgR0VUIHJlcXVlc3QuIE9uIHN1YnNlcXVlbnQgWEhSIHJlcXVlc3RzIHRoZQot
ICAgICAqIHNlcnZlciBjYW4gdmVyaWZ5IHRoYXQgdGhlIGNvb2tpZSBtYXRjaGVzIGBYLVhTUkYt
VE9LRU5gIEhUVFAgaGVhZGVyLCBhbmQgdGhlcmVmb3JlIGJlIHN1cmUKLSAgICAgKiB0aGF0IG9u
bHkgSmF2YVNjcmlwdCBydW5uaW5nIG9uIHlvdXIgZG9tYWluIGNvdWxkIGhhdmUgc2VudCB0aGUg
cmVxdWVzdC4gVGhlIHRva2VuIG11c3QgYmUKLSAgICAgKiB1bmlxdWUgZm9yIGVhY2ggdXNlciBh
bmQgbXVzdCBiZSB2ZXJpZmlhYmxlIGJ5IHRoZSBzZXJ2ZXIgKHRvIHByZXZlbnQgdGhlIEphdmFT
Y3JpcHQgZnJvbSBtYWtpbmcKLSAgICAgKiB1cCBpdHMgb3duIHRva2VucykuIFdlIHJlY29tbWVu
ZCB0aGF0IHRoZSB0b2tlbiBpcyBhIGRpZ2VzdCBvZiB5b3VyIHNpdGUncyBhdXRoZW50aWNhdGlv
bgotICAgICAqIGNvb2tpZSB3aXRoIGEge0BsaW5rIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93
aWtpL1NhbHRfKGNyeXB0b2dyYXBoeSkgc2FsdH0gZm9yIGFkZGVkIHNlY3VyaXR5LgotICAgICAq
Ci0gICAgICoKLSAgICAgKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIE9iamVjdCBkZXNjcmliaW5n
IHRoZSByZXF1ZXN0IHRvIGJlIG1hZGUgYW5kIGhvdyBpdCBzaG91bGQgYmUKLSAgICAgKiAgICBw
cm9jZXNzZWQuIFRoZSBvYmplY3QgaGFzIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgotICAgICAqCi0g
ICAgICogICAgLSAqKm1ldGhvZCoqIOKAkyBge3N0cmluZ31gIOKAkyBIVFRQIG1ldGhvZCAoZS5n
LiAnR0VUJywgJ1BPU1QnLCBldGMpCi0gICAgICogICAgLSAqKnVybCoqIOKAkyBge3N0cmluZ31g
IOKAkyBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgb2YgdGhlIHJlc291cmNlIHRoYXQgaXMgYmVp
bmcgcmVxdWVzdGVkLgotICAgICAqICAgIC0gKipwYXJhbXMqKiDigJMgYHtPYmplY3QuPHN0cmlu
Z3xPYmplY3Q+fWAg4oCTIE1hcCBvZiBzdHJpbmdzIG9yIG9iamVjdHMgd2hpY2ggd2lsbCBiZSB0
dXJuZWQgdG8KLSAgICAgKiAgICAgIGA/a2V5MT12YWx1ZTEma2V5Mj12YWx1ZTJgIGFmdGVyIHRo
ZSB1cmwuIElmIHRoZSB2YWx1ZSBpcyBub3QgYSBzdHJpbmcsIGl0IHdpbGwgYmUgSlNPTmlmaWVk
LgotICAgICAqICAgIC0gKipkYXRhKiog4oCTIGB7c3RyaW5nfE9iamVjdH1gIOKAkyBEYXRhIHRv
IGJlIHNlbnQgYXMgdGhlIHJlcXVlc3QgbWVzc2FnZSBkYXRhLgotICAgICAqICAgIC0gKipoZWFk
ZXJzKiog4oCTIGB7T2JqZWN0fWAg4oCTIE1hcCBvZiBzdHJpbmdzIHJlcHJlc2VudGluZyBIVFRQ
IGhlYWRlcnMgdG8gc2VuZCB0byB0aGUgc2VydmVyLgotICAgICAqICAgIC0gKip0cmFuc2Zvcm1S
ZXF1ZXN0Kiog4oCTIGB7ZnVuY3Rpb24oZGF0YSwgaGVhZGVyc0dldHRlcil8QXJyYXkuPGZ1bmN0
aW9uKGRhdGEsIGhlYWRlcnNHZXR0ZXIpPn1gIOKAkwotICAgICAqICAgICAgdHJhbnNmb3JtIGZ1
bmN0aW9uIG9yIGFuIGFycmF5IG9mIHN1Y2ggZnVuY3Rpb25zLiBUaGUgdHJhbnNmb3JtIGZ1bmN0
aW9uIHRha2VzIHRoZSBodHRwCi0gICAgICogICAgICByZXF1ZXN0IGJvZHkgYW5kIGhlYWRlcnMg
YW5kIHJldHVybnMgaXRzIHRyYW5zZm9ybWVkICh0eXBpY2FsbHkgc2VyaWFsaXplZCkgdmVyc2lv
bi4KLSAgICAgKiAgICAtICoqdHJhbnNmb3JtUmVzcG9uc2UqKiDigJMgYHtmdW5jdGlvbihkYXRh
LCBoZWFkZXJzR2V0dGVyKXxBcnJheS48ZnVuY3Rpb24oZGF0YSwgaGVhZGVyc0dldHRlcik+fWAg
4oCTCi0gICAgICogICAgICB0cmFuc2Zvcm0gZnVuY3Rpb24gb3IgYW4gYXJyYXkgb2Ygc3VjaCBm
dW5jdGlvbnMuIFRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24gdGFrZXMgdGhlIGh0dHAKLSAgICAgKiAg
ICAgIHJlc3BvbnNlIGJvZHkgYW5kIGhlYWRlcnMgYW5kIHJldHVybnMgaXRzIHRyYW5zZm9ybWVk
ICh0eXBpY2FsbHkgZGVzZXJpYWxpemVkKSB2ZXJzaW9uLgotICAgICAqICAgIC0gKipjYWNoZSoq
IOKAkyBge2Jvb2xlYW58Q2FjaGV9YCDigJMgSWYgdHJ1ZSwgYSBkZWZhdWx0ICRodHRwIGNhY2hl
IHdpbGwgYmUgdXNlZCB0byBjYWNoZSB0aGUKLSAgICAgKiAgICAgIEdFVCByZXF1ZXN0LCBvdGhl
cndpc2UgaWYgYSBjYWNoZSBpbnN0YW5jZSBidWlsdCB3aXRoCi0gICAgICogICAgICB7QGxpbmsg
bmcuJGNhY2hlRmFjdG9yeSAkY2FjaGVGYWN0b3J5fSwgdGhpcyBjYWNoZSB3aWxsIGJlIHVzZWQg
Zm9yCi0gICAgICogICAgICBjYWNoaW5nLgotICAgICAqICAgIC0gKip0aW1lb3V0Kiog4oCTIGB7
bnVtYmVyfWAg4oCTIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLgotICAgICAqICAgIC0gKip3aXRo
Q3JlZGVudGlhbHMqKiAtIGB7Ym9vbGVhbn1gIC0gd2hldGhlciB0byB0byBzZXQgdGhlIGB3aXRo
Q3JlZGVudGlhbHNgIGZsYWcgb24gdGhlCi0gICAgICogICAgICBYSFIgb2JqZWN0LiBTZWUge0Bs
aW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2h0dHBfYWNjZXNzX2NvbnRyb2wj
c2VjdGlvbl81Ci0gICAgICogICAgICByZXF1ZXN0cyB3aXRoIGNyZWRlbnRpYWxzfSBmb3IgbW9y
ZSBpbmZvcm1hdGlvbi4KLSAgICAgKgotICAgICAqIEByZXR1cm5zIHtIdHRwUHJvbWlzZX0gUmV0
dXJucyBhIHtAbGluayBuZy4kcSBwcm9taXNlfSBvYmplY3Qgd2l0aCB0aGUKLSAgICAgKiAgIHN0
YW5kYXJkIGB0aGVuYCBtZXRob2QgYW5kIHR3byBodHRwIHNwZWNpZmljIG1ldGhvZHM6IGBzdWNj
ZXNzYCBhbmQgYGVycm9yYC4gVGhlIGB0aGVuYAotICAgICAqICAgbWV0aG9kIHRha2VzIHR3byBh
cmd1bWVudHMgYSBzdWNjZXNzIGFuZCBhbiBlcnJvciBjYWxsYmFjayB3aGljaCB3aWxsIGJlIGNh
bGxlZCB3aXRoIGEKLSAgICAgKiAgIHJlc3BvbnNlIG9iamVjdC4gVGhlIGBzdWNjZXNzYCBhbmQg
YGVycm9yYCBtZXRob2RzIHRha2UgYSBzaW5nbGUgYXJndW1lbnQgLSBhIGZ1bmN0aW9uIHRoYXQK
LSAgICAgKiAgIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3Qgc3VjY2VlZHMgb3IgZmFp
bHMgcmVzcGVjdGl2ZWx5LiBUaGUgYXJndW1lbnRzIHBhc3NlZCBpbnRvCi0gICAgICogICB0aGVz
ZSBmdW5jdGlvbnMgYXJlIGRlc3RydWN0dXJlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgcmVzcG9u
c2Ugb2JqZWN0IHBhc3NlZCBpbnRvIHRoZQotICAgICAqICAgYHRoZW5gIG1ldGhvZC4gVGhlIHJl
c3BvbnNlIG9iamVjdCBoYXMgdGhlc2UgcHJvcGVydGllczoKLSAgICAgKgotICAgICAqICAgLSAq
KmRhdGEqKiDigJMgYHtzdHJpbmd8T2JqZWN0fWAg4oCTIFRoZSByZXNwb25zZSBib2R5IHRyYW5z
Zm9ybWVkIHdpdGggdGhlIHRyYW5zZm9ybSBmdW5jdGlvbnMuCi0gICAgICogICAtICoqc3RhdHVz
Kiog4oCTIGB7bnVtYmVyfWAg4oCTIEhUVFAgc3RhdHVzIGNvZGUgb2YgdGhlIHJlc3BvbnNlLgot
ICAgICAqICAgLSAqKmhlYWRlcnMqKiDigJMgYHtmdW5jdGlvbihbaGVhZGVyTmFtZV0pfWAg4oCT
IEhlYWRlciBnZXR0ZXIgZnVuY3Rpb24uCi0gICAgICogICAtICoqY29uZmlnKiog4oCTIGB7T2Jq
ZWN0fWAg4oCTIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCB0aGF0IHdhcyB1c2VkIHRvIGdlbmVy
YXRlIHRoZSByZXF1ZXN0LgotICAgICAqCi0gICAgICogQHByb3BlcnR5IHtBcnJheS48T2JqZWN0
Pn0gcGVuZGluZ1JlcXVlc3RzIEFycmF5IG9mIGNvbmZpZyBvYmplY3RzIGZvciBjdXJyZW50bHkg
cGVuZGluZwotICAgICAqICAgcmVxdWVzdHMuIFRoaXMgaXMgcHJpbWFyaWx5IG1lYW50IHRvIGJl
IHVzZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KLSAgICAgKgotICAgICAqCi0gICAgICogQGV4
YW1wbGUKLSAgICAgIDxleGFtcGxlPgotICAgICAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4K
LSAgICAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9IkZldGNoQ3RybCI+Ci0gICAgICAgICAgICA8
c2VsZWN0IG5nLW1vZGVsPSJtZXRob2QiPgotICAgICAgICAgICAgICA8b3B0aW9uPkdFVDwvb3B0
aW9uPgotICAgICAgICAgICAgICA8b3B0aW9uPkpTT05QPC9vcHRpb24+Ci0gICAgICAgICAgICA8
L3NlbGVjdD4KLSAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuZy1tb2RlbD0idXJsIiBz
aXplPSI4MCIvPgotICAgICAgICAgICAgPGJ1dHRvbiBuZy1jbGljaz0iZmV0Y2goKSI+ZmV0Y2g8
L2J1dHRvbj48YnI+Ci0gICAgICAgICAgICA8YnV0dG9uIG5nLWNsaWNrPSJ1cGRhdGVNb2RlbCgn
R0VUJywgJ2h0dHAtaGVsbG8uaHRtbCcpIj5TYW1wbGUgR0VUPC9idXR0b24+Ci0gICAgICAgICAg
ICA8YnV0dG9uIG5nLWNsaWNrPSJ1cGRhdGVNb2RlbCgnSlNPTlAnLCAnaHR0cDovL2FuZ3VsYXJq
cy5vcmcvZ3JlZXQucGhwP2NhbGxiYWNrPUpTT05fQ0FMTEJBQ0smbmFtZT1TdXBlciUyMEhlcm8n
KSI+U2FtcGxlIEpTT05QPC9idXR0b24+Ci0gICAgICAgICAgICA8YnV0dG9uIG5nLWNsaWNrPSJ1
cGRhdGVNb2RlbCgnSlNPTlAnLCAnaHR0cDovL2FuZ3VsYXJqcy5vcmcvZG9lc250ZXhpc3QmY2Fs
bGJhY2s9SlNPTl9DQUxMQkFDSycpIj5JbnZhbGlkIEpTT05QPC9idXR0b24+Ci0gICAgICAgICAg
ICA8cHJlPmh0dHAgc3RhdHVzIGNvZGU6IHt7c3RhdHVzfX08L3ByZT4KLSAgICAgICAgICAgIDxw
cmU+aHR0cCByZXNwb25zZSBkYXRhOiB7e2RhdGF9fTwvcHJlPgotICAgICAgICAgIDwvZGl2Pgot
ICAgICAgICA8L2ZpbGU+Ci0gICAgICAgIDxmaWxlIG5hbWU9InNjcmlwdC5qcyI+Ci0gICAgICAg
ICAgZnVuY3Rpb24gRmV0Y2hDdHJsKCRzY29wZSwgJGh0dHAsICR0ZW1wbGF0ZUNhY2hlKSB7Ci0g
ICAgICAgICAgICAkc2NvcGUubWV0aG9kID0gJ0dFVCc7Ci0gICAgICAgICAgICAkc2NvcGUudXJs
ID0gJ2h0dHAtaGVsbG8uaHRtbCc7Ci0KLSAgICAgICAgICAgICRzY29wZS5mZXRjaCA9IGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgICAkc2NvcGUuY29kZSA9IG51bGw7Ci0gICAgICAgICAgICAg
ICRzY29wZS5yZXNwb25zZSA9IG51bGw7Ci0KLSAgICAgICAgICAgICAgJGh0dHAoe21ldGhvZDog
JHNjb3BlLm1ldGhvZCwgdXJsOiAkc2NvcGUudXJsLCBjYWNoZTogJHRlbXBsYXRlQ2FjaGV9KS4K
LSAgICAgICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uKGRhdGEsIHN0YXR1cykgewotICAgICAg
ICAgICAgICAgICAgJHNjb3BlLnN0YXR1cyA9IHN0YXR1czsKLSAgICAgICAgICAgICAgICAgICRz
Y29wZS5kYXRhID0gZGF0YTsKLSAgICAgICAgICAgICAgICB9KS4KLSAgICAgICAgICAgICAgICBl
cnJvcihmdW5jdGlvbihkYXRhLCBzdGF0dXMpIHsKLSAgICAgICAgICAgICAgICAgICRzY29wZS5k
YXRhID0gZGF0YSB8fCAiUmVxdWVzdCBmYWlsZWQiOwotICAgICAgICAgICAgICAgICAgJHNjb3Bl
LnN0YXR1cyA9IHN0YXR1czsKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9OwotCi0g
ICAgICAgICAgICAkc2NvcGUudXBkYXRlTW9kZWwgPSBmdW5jdGlvbihtZXRob2QsIHVybCkgewot
ICAgICAgICAgICAgICAkc2NvcGUubWV0aG9kID0gbWV0aG9kOwotICAgICAgICAgICAgICAkc2Nv
cGUudXJsID0gdXJsOwotICAgICAgICAgICAgfTsKLSAgICAgICAgICB9Ci0gICAgICAgIDwvZmls
ZT4KLSAgICAgICAgPGZpbGUgbmFtZT0iaHR0cC1oZWxsby5odG1sIj4KLSAgICAgICAgICBIZWxs
bywgJGh0dHAhCi0gICAgICAgIDwvZmlsZT4KLSAgICAgICAgPGZpbGUgbmFtZT0ic2NlbmFyaW8u
anMiPgotICAgICAgICAgIGl0KCdzaG91bGQgbWFrZSBhbiB4aHIgR0VUIHJlcXVlc3QnLCBmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgIGVsZW1lbnQoJzpidXR0b246Y29udGFpbnMoIlNhbXBsZSBH
RVQiKScpLmNsaWNrKCk7Ci0gICAgICAgICAgICBlbGVtZW50KCc6YnV0dG9uOmNvbnRhaW5zKCJm
ZXRjaCIpJykuY2xpY2soKTsKLSAgICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdzdGF0dXMnKSku
dG9CZSgnMjAwJyk7Ci0gICAgICAgICAgICBleHBlY3QoYmluZGluZygnZGF0YScpKS50b01hdGNo
KC9IZWxsbywgXCRodHRwIS8pOwotICAgICAgICAgIH0pOwotCi0gICAgICAgICAgaXQoJ3Nob3Vs
ZCBtYWtlIGEgSlNPTlAgcmVxdWVzdCB0byBhbmd1bGFyanMub3JnJywgZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICBlbGVtZW50KCc6YnV0dG9uOmNvbnRhaW5zKCJTYW1wbGUgSlNPTlAiKScpLmNs
aWNrKCk7Ci0gICAgICAgICAgICBlbGVtZW50KCc6YnV0dG9uOmNvbnRhaW5zKCJmZXRjaCIpJyku
Y2xpY2soKTsKLSAgICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdzdGF0dXMnKSkudG9CZSgnMjAw
Jyk7Ci0gICAgICAgICAgICBleHBlY3QoYmluZGluZygnZGF0YScpKS50b01hdGNoKC9TdXBlciBI
ZXJvIS8pOwotICAgICAgICAgIH0pOwotCi0gICAgICAgICAgaXQoJ3Nob3VsZCBtYWtlIEpTT05Q
IHJlcXVlc3QgdG8gaW52YWxpZCBVUkwgYW5kIGludm9rZSB0aGUgZXJyb3IgaGFuZGxlcicsCi0g
ICAgICAgICAgICAgIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgZWxlbWVudCgnOmJ1dHRvbjpj
b250YWlucygiSW52YWxpZCBKU09OUCIpJykuY2xpY2soKTsKLSAgICAgICAgICAgIGVsZW1lbnQo
JzpidXR0b246Y29udGFpbnMoImZldGNoIiknKS5jbGljaygpOwotICAgICAgICAgICAgZXhwZWN0
KGJpbmRpbmcoJ3N0YXR1cycpKS50b0JlKCcwJyk7Ci0gICAgICAgICAgICBleHBlY3QoYmluZGlu
ZygnZGF0YScpKS50b0JlKCdSZXF1ZXN0IGZhaWxlZCcpOwotICAgICAgICAgIH0pOwotICAgICAg
ICA8L2ZpbGU+Ci0gICAgICA8L2V4YW1wbGU+Ci0gICAgICovCi0gICAgZnVuY3Rpb24gJGh0dHAo
Y29uZmlnKSB7Ci0gICAgICBjb25maWcubWV0aG9kID0gdXBwZXJjYXNlKGNvbmZpZy5tZXRob2Qp
OwotCi0gICAgICB2YXIgcmVxVHJhbnNmb3JtRm4gPSBjb25maWcudHJhbnNmb3JtUmVxdWVzdCB8
fCAkY29uZmlnLnRyYW5zZm9ybVJlcXVlc3QsCi0gICAgICAgICAgcmVzcFRyYW5zZm9ybUZuID0g
Y29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlIHx8ICRjb25maWcudHJhbnNmb3JtUmVzcG9uc2UsCi0g
ICAgICAgICAgZGVmSGVhZGVycyA9ICRjb25maWcuaGVhZGVycywKLSAgICAgICAgICByZXFIZWFk
ZXJzID0gZXh0ZW5kKHsnWC1YU1JGLVRPS0VOJzogJGJyb3dzZXIuY29va2llcygpWydYU1JGLVRP
S0VOJ119LAotICAgICAgICAgICAgICBkZWZIZWFkZXJzLmNvbW1vbiwgZGVmSGVhZGVyc1tsb3dl
cmNhc2UoY29uZmlnLm1ldGhvZCldLCBjb25maWcuaGVhZGVycyksCi0gICAgICAgICAgcmVxRGF0
YSA9IHRyYW5zZm9ybURhdGEoY29uZmlnLmRhdGEsIGhlYWRlcnNHZXR0ZXIocmVxSGVhZGVycyks
IHJlcVRyYW5zZm9ybUZuKSwKLSAgICAgICAgICBwcm9taXNlOwotCi0gICAgICAvLyBzdHJpcCBj
b250ZW50LXR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWQKLSAgICAgIGlmIChpc1VuZGVmaW5lZChj
b25maWcuZGF0YSkpIHsKLSAgICAgICAgZGVsZXRlIHJlcUhlYWRlcnNbJ0NvbnRlbnQtVHlwZSdd
OwotICAgICAgfQotCi0gICAgICAvLyBzZW5kIHJlcXVlc3QKLSAgICAgIHByb21pc2UgPSBzZW5k
UmVxKGNvbmZpZywgcmVxRGF0YSwgcmVxSGVhZGVycyk7Ci0KLQotICAgICAgLy8gdHJhbnNmb3Jt
IGZ1dHVyZSByZXNwb25zZQotICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbih0cmFuc2Zvcm1S
ZXNwb25zZSwgdHJhbnNmb3JtUmVzcG9uc2UpOwotCi0gICAgICAvLyBhcHBseSBpbnRlcmNlcHRv
cnMKLSAgICAgIGZvckVhY2gocmVzcG9uc2VJbnRlcmNlcHRvcnMsIGZ1bmN0aW9uKGludGVyY2Vw
dG9yKSB7Ci0gICAgICAgIHByb21pc2UgPSBpbnRlcmNlcHRvcihwcm9taXNlKTsKLSAgICAgIH0p
OwotCi0gICAgICBwcm9taXNlLnN1Y2Nlc3MgPSBmdW5jdGlvbihmbikgewotICAgICAgICBwcm9t
aXNlLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKLSAgICAgICAgICBmbihyZXNwb25zZS5kYXRh
LCByZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLmhlYWRlcnMsIGNvbmZpZyk7Ci0gICAgICAgIH0p
OwotICAgICAgICByZXR1cm4gcHJvbWlzZTsKLSAgICAgIH07Ci0KLSAgICAgIHByb21pc2UuZXJy
b3IgPSBmdW5jdGlvbihmbikgewotICAgICAgICBwcm9taXNlLnRoZW4obnVsbCwgZnVuY3Rpb24o
cmVzcG9uc2UpIHsKLSAgICAgICAgICBmbihyZXNwb25zZS5kYXRhLCByZXNwb25zZS5zdGF0dXMs
IHJlc3BvbnNlLmhlYWRlcnMsIGNvbmZpZyk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4g
cHJvbWlzZTsKLSAgICAgIH07Ci0KLSAgICAgIHJldHVybiBwcm9taXNlOwotCi0gICAgICBmdW5j
dGlvbiB0cmFuc2Zvcm1SZXNwb25zZShyZXNwb25zZSkgewotICAgICAgICAvLyBtYWtlIGEgY29w
eSBzaW5jZSB0aGUgcmVzcG9uc2UgbXVzdCBiZSBjYWNoZWFibGUKLSAgICAgICAgdmFyIHJlc3Ag
PSBleHRlbmQoe30sIHJlc3BvbnNlLCB7Ci0gICAgICAgICAgZGF0YTogdHJhbnNmb3JtRGF0YShy
ZXNwb25zZS5kYXRhLCByZXNwb25zZS5oZWFkZXJzLCByZXNwVHJhbnNmb3JtRm4pCi0gICAgICAg
IH0pOwotICAgICAgICByZXR1cm4gKGlzU3VjY2VzcyhyZXNwb25zZS5zdGF0dXMpKQotICAgICAg
ICAgID8gcmVzcAotICAgICAgICAgIDogJHEucmVqZWN0KHJlc3ApOwotICAgICAgfQotICAgIH0K
LQotICAgICRodHRwLnBlbmRpbmdSZXF1ZXN0cyA9IFtdOwotCi0gICAgLyoqCi0gICAgICogQG5n
ZG9jIG1ldGhvZAotICAgICAqIEBuYW1lIG5nLiRodHRwI2dldAotICAgICAqIEBtZXRob2RPZiBu
Zy4kaHR0cAotICAgICAqCi0gICAgICogQGRlc2NyaXB0aW9uCi0gICAgICogU2hvcnRjdXQgbWV0
aG9kIHRvIHBlcmZvcm0gYEdFVGAgcmVxdWVzdC4KLSAgICAgKgotICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSB1cmwgUmVsYXRpdmUgb3IgYWJzb2x1dGUgVVJMIHNwZWNpZnlpbmcgdGhlIGRlc3RpbmF0
aW9uIG9mIHRoZSByZXF1ZXN0Ci0gICAgICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgT3B0aW9u
YWwgY29uZmlndXJhdGlvbiBvYmplY3QKLSAgICAgKiBAcmV0dXJucyB7SHR0cFByb21pc2V9IEZ1
dHVyZSBvYmplY3QKLSAgICAgKi8KLQotICAgIC8qKgotICAgICAqIEBuZ2RvYyBtZXRob2QKLSAg
ICAgKiBAbmFtZSBuZy4kaHR0cCNkZWxldGUKLSAgICAgKiBAbWV0aG9kT2YgbmcuJGh0dHAKLSAg
ICAgKgotICAgICAqIEBkZXNjcmlwdGlvbgotICAgICAqIFNob3J0Y3V0IG1ldGhvZCB0byBwZXJm
b3JtIGBERUxFVEVgIHJlcXVlc3QuCi0gICAgICoKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJs
IFJlbGF0aXZlIG9yIGFic29sdXRlIFVSTCBzcGVjaWZ5aW5nIHRoZSBkZXN0aW5hdGlvbiBvZiB0
aGUgcmVxdWVzdAotICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIE9wdGlvbmFsIGNvbmZp
Z3VyYXRpb24gb2JqZWN0Ci0gICAgICogQHJldHVybnMge0h0dHBQcm9taXNlfSBGdXR1cmUgb2Jq
ZWN0Ci0gICAgICovCi0KLSAgICAvKioKLSAgICAgKiBAbmdkb2MgbWV0aG9kCi0gICAgICogQG5h
bWUgbmcuJGh0dHAjaGVhZAotICAgICAqIEBtZXRob2RPZiBuZy4kaHR0cAotICAgICAqCi0gICAg
ICogQGRlc2NyaXB0aW9uCi0gICAgICogU2hvcnRjdXQgbWV0aG9kIHRvIHBlcmZvcm0gYEhFQURg
IHJlcXVlc3QuCi0gICAgICoKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFJlbGF0aXZlIG9y
IGFic29sdXRlIFVSTCBzcGVjaWZ5aW5nIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgcmVxdWVzdAot
ICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb2Jq
ZWN0Ci0gICAgICogQHJldHVybnMge0h0dHBQcm9taXNlfSBGdXR1cmUgb2JqZWN0Ci0gICAgICov
Ci0KLSAgICAvKioKLSAgICAgKiBAbmdkb2MgbWV0aG9kCi0gICAgICogQG5hbWUgbmcuJGh0dHAj
anNvbnAKLSAgICAgKiBAbWV0aG9kT2YgbmcuJGh0dHAKLSAgICAgKgotICAgICAqIEBkZXNjcmlw
dGlvbgotICAgICAqIFNob3J0Y3V0IG1ldGhvZCB0byBwZXJmb3JtIGBKU09OUGAgcmVxdWVzdC4K
LSAgICAgKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgUmVsYXRpdmUgb3IgYWJzb2x1dGUg
VVJMIHNwZWNpZnlpbmcgdGhlIGRlc3RpbmF0aW9uIG9mIHRoZSByZXF1ZXN0LgotICAgICAqICAg
ICAgICAgICAgICAgICAgICAgU2hvdWxkIGNvbnRhaW4gYEpTT05fQ0FMTEJBQ0tgIHN0cmluZy4K
LSAgICAgKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9i
amVjdAotICAgICAqIEByZXR1cm5zIHtIdHRwUHJvbWlzZX0gRnV0dXJlIG9iamVjdAotICAgICAq
LwotICAgIGNyZWF0ZVNob3J0TWV0aG9kcygnZ2V0JywgJ2RlbGV0ZScsICdoZWFkJywgJ2pzb25w
Jyk7Ci0KLSAgICAvKioKLSAgICAgKiBAbmdkb2MgbWV0aG9kCi0gICAgICogQG5hbWUgbmcuJGh0
dHAjcG9zdAotICAgICAqIEBtZXRob2RPZiBuZy4kaHR0cAotICAgICAqCi0gICAgICogQGRlc2Ny
aXB0aW9uCi0gICAgICogU2hvcnRjdXQgbWV0aG9kIHRvIHBlcmZvcm0gYFBPU1RgIHJlcXVlc3Qu
Ci0gICAgICoKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFJlbGF0aXZlIG9yIGFic29sdXRl
IFVSTCBzcGVjaWZ5aW5nIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgcmVxdWVzdAotICAgICAqIEBw
YXJhbSB7Kn0gZGF0YSBSZXF1ZXN0IGNvbnRlbnQKLSAgICAgKiBAcGFyYW0ge09iamVjdD19IGNv
bmZpZyBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9iamVjdAotICAgICAqIEByZXR1cm5zIHtIdHRw
UHJvbWlzZX0gRnV0dXJlIG9iamVjdAotICAgICAqLwotCi0gICAgLyoqCi0gICAgICogQG5nZG9j
IG1ldGhvZAotICAgICAqIEBuYW1lIG5nLiRodHRwI3B1dAotICAgICAqIEBtZXRob2RPZiBuZy4k
aHR0cAotICAgICAqCi0gICAgICogQGRlc2NyaXB0aW9uCi0gICAgICogU2hvcnRjdXQgbWV0aG9k
IHRvIHBlcmZvcm0gYFBVVGAgcmVxdWVzdC4KLSAgICAgKgotICAgICAqIEBwYXJhbSB7c3RyaW5n
fSB1cmwgUmVsYXRpdmUgb3IgYWJzb2x1dGUgVVJMIHNwZWNpZnlpbmcgdGhlIGRlc3RpbmF0aW9u
IG9mIHRoZSByZXF1ZXN0Ci0gICAgICogQHBhcmFtIHsqfSBkYXRhIFJlcXVlc3QgY29udGVudAot
ICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb2Jq
ZWN0Ci0gICAgICogQHJldHVybnMge0h0dHBQcm9taXNlfSBGdXR1cmUgb2JqZWN0Ci0gICAgICov
Ci0gICAgY3JlYXRlU2hvcnRNZXRob2RzV2l0aERhdGEoJ3Bvc3QnLCAncHV0Jyk7Ci0KLSAgICAg
ICAgLyoqCi0gICAgICAgICAqIEBuZ2RvYyBwcm9wZXJ0eQotICAgICAgICAgKiBAbmFtZSBuZy4k
aHR0cCNkZWZhdWx0cwotICAgICAgICAgKiBAcHJvcGVydHlPZiBuZy4kaHR0cAotICAgICAgICAg
KgotICAgICAgICAgKiBAZGVzY3JpcHRpb24KLSAgICAgICAgICogUnVudGltZSBlcXVpdmFsZW50
IG9mIHRoZSBgJGh0dHBQcm92aWRlci5kZWZhdWx0c2AgcHJvcGVydHkuIEFsbG93cyBjb25maWd1
cmF0aW9uIG9mCi0gICAgICAgICAqIGRlZmF1bHQgaGVhZGVycyBhcyB3ZWxsIGFzIHJlcXVlc3Qg
YW5kIHJlc3BvbnNlIHRyYW5zZm9ybWF0aW9ucy4KLSAgICAgICAgICoKLSAgICAgICAgICogU2Vl
ICJTZXR0aW5nIEhUVFAgSGVhZGVycyIgYW5kICJUcmFuc2Zvcm1pbmcgUmVxdWVzdHMgYW5kIFJl
c3BvbnNlcyIgc2VjdGlvbnMgYWJvdmUuCi0gICAgICAgICAqLwotICAgICRodHRwLmRlZmF1bHRz
ID0gJGNvbmZpZzsKLQotCi0gICAgcmV0dXJuICRodHRwOwotCi0KLSAgICBmdW5jdGlvbiBjcmVh
dGVTaG9ydE1ldGhvZHMobmFtZXMpIHsKLSAgICAgIGZvckVhY2goYXJndW1lbnRzLCBmdW5jdGlv
bihuYW1lKSB7Ci0gICAgICAgICRodHRwW25hbWVdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHsK
LSAgICAgICAgICByZXR1cm4gJGh0dHAoZXh0ZW5kKGNvbmZpZyB8fCB7fSwgewotICAgICAgICAg
ICAgbWV0aG9kOiBuYW1lLAotICAgICAgICAgICAgdXJsOiB1cmwKLSAgICAgICAgICB9KSk7Ci0g
ICAgICAgIH07Ci0gICAgICB9KTsKLSAgICB9Ci0KLQotICAgIGZ1bmN0aW9uIGNyZWF0ZVNob3J0
TWV0aG9kc1dpdGhEYXRhKG5hbWUpIHsKLSAgICAgIGZvckVhY2goYXJndW1lbnRzLCBmdW5jdGlv
bihuYW1lKSB7Ci0gICAgICAgICRodHRwW25hbWVdID0gZnVuY3Rpb24odXJsLCBkYXRhLCBjb25m
aWcpIHsKLSAgICAgICAgICByZXR1cm4gJGh0dHAoZXh0ZW5kKGNvbmZpZyB8fCB7fSwgewotICAg
ICAgICAgICAgbWV0aG9kOiBuYW1lLAotICAgICAgICAgICAgdXJsOiB1cmwsCi0gICAgICAgICAg
ICBkYXRhOiBkYXRhCi0gICAgICAgICAgfSkpOwotICAgICAgICB9OwotICAgICAgfSk7Ci0gICAg
fQotCi0KLSAgICAvKioKLSAgICAgKiBNYWtlcyB0aGUgcmVxdWVzdC4KLSAgICAgKgotICAgICAq
ICEhISBBQ0NFU1NFUyBDTE9TVVJFIFZBUlM6Ci0gICAgICogJGh0dHBCYWNrZW5kLCAkY29uZmln
LCAkbG9nLCAkcm9vdFNjb3BlLCBkZWZhdWx0Q2FjaGUsICRodHRwLnBlbmRpbmdSZXF1ZXN0cwot
ICAgICAqLwotICAgIGZ1bmN0aW9uIHNlbmRSZXEoY29uZmlnLCByZXFEYXRhLCByZXFIZWFkZXJz
KSB7Ci0gICAgICB2YXIgZGVmZXJyZWQgPSAkcS5kZWZlcigpLAotICAgICAgICAgIHByb21pc2Ug
PSBkZWZlcnJlZC5wcm9taXNlLAotICAgICAgICAgIGNhY2hlLAotICAgICAgICAgIGNhY2hlZFJl
c3AsCi0gICAgICAgICAgdXJsID0gYnVpbGRVcmwoY29uZmlnLnVybCwgY29uZmlnLnBhcmFtcyk7
Ci0KLSAgICAgICRodHRwLnBlbmRpbmdSZXF1ZXN0cy5wdXNoKGNvbmZpZyk7Ci0gICAgICBwcm9t
aXNlLnRoZW4ocmVtb3ZlUGVuZGluZ1JlcSwgcmVtb3ZlUGVuZGluZ1JlcSk7Ci0KLQotICAgICAg
aWYgKGNvbmZpZy5jYWNoZSAmJiBjb25maWcubWV0aG9kID09ICdHRVQnKSB7Ci0gICAgICAgIGNh
Y2hlID0gaXNPYmplY3QoY29uZmlnLmNhY2hlKSA/IGNvbmZpZy5jYWNoZSA6IGRlZmF1bHRDYWNo
ZTsKLSAgICAgIH0KLQotICAgICAgaWYgKGNhY2hlKSB7Ci0gICAgICAgIGNhY2hlZFJlc3AgPSBj
YWNoZS5nZXQodXJsKTsKLSAgICAgICAgaWYgKGNhY2hlZFJlc3ApIHsKLSAgICAgICAgICBpZiAo
Y2FjaGVkUmVzcC50aGVuKSB7Ci0gICAgICAgICAgICAvLyBjYWNoZWQgcmVxdWVzdCBoYXMgYWxy
ZWFkeSBiZWVuIHNlbnQsIGJ1dCB0aGVyZSBpcyBubyByZXNwb25zZSB5ZXQKLSAgICAgICAgICAg
IGNhY2hlZFJlc3AudGhlbihyZW1vdmVQZW5kaW5nUmVxLCByZW1vdmVQZW5kaW5nUmVxKTsKLSAg
ICAgICAgICAgIHJldHVybiBjYWNoZWRSZXNwOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAvLyBzZXJ2aW5nIGZyb20gY2FjaGUKLSAgICAgICAgICAgIGlmIChpc0FycmF5KGNhY2hl
ZFJlc3ApKSB7Ci0gICAgICAgICAgICAgIHJlc29sdmVQcm9taXNlKGNhY2hlZFJlc3BbMV0sIGNh
Y2hlZFJlc3BbMF0sIGNvcHkoY2FjaGVkUmVzcFsyXSkpOwotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgcmVzb2x2ZVByb21pc2UoY2FjaGVkUmVzcCwgMjAwLCB7fSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8vIHB1
dCB0aGUgcHJvbWlzZSBmb3IgdGhlIG5vbi10cmFuc2Zvcm1lZCByZXNwb25zZSBpbnRvIGNhY2hl
IGFzIGEgcGxhY2Vob2xkZXIKLSAgICAgICAgICBjYWNoZS5wdXQodXJsLCBwcm9taXNlKTsKLSAg
ICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBpZiB3ZSB3b24ndCBoYXZlIHRoZSByZXNwb25z
ZSBpbiBjYWNoZSwgc2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgYmFja2VuZAotICAgICAgaWYgKCFj
YWNoZWRSZXNwKSB7Ci0gICAgICAgICRodHRwQmFja2VuZChjb25maWcubWV0aG9kLCB1cmwsIHJl
cURhdGEsIGRvbmUsIHJlcUhlYWRlcnMsIGNvbmZpZy50aW1lb3V0LAotICAgICAgICAgICAgY29u
ZmlnLndpdGhDcmVkZW50aWFscyk7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBwcm9taXNlOwot
Ci0KLSAgICAgIC8qKgotICAgICAgICogQ2FsbGJhY2sgcmVnaXN0ZXJlZCB0byAkaHR0cEJhY2tl
bmQoKToKLSAgICAgICAqICAtIGNhY2hlcyB0aGUgcmVzcG9uc2UgaWYgZGVzaXJlZAotICAgICAg
ICogIC0gcmVzb2x2ZXMgdGhlIHJhdyAkaHR0cCBwcm9taXNlCi0gICAgICAgKiAgLSBjYWxscyAk
YXBwbHkKLSAgICAgICAqLwotICAgICAgZnVuY3Rpb24gZG9uZShzdGF0dXMsIHJlc3BvbnNlLCBo
ZWFkZXJzU3RyaW5nKSB7Ci0gICAgICAgIGlmIChjYWNoZSkgewotICAgICAgICAgIGlmIChpc1N1
Y2Nlc3Moc3RhdHVzKSkgewotICAgICAgICAgICAgY2FjaGUucHV0KHVybCwgW3N0YXR1cywgcmVz
cG9uc2UsIHBhcnNlSGVhZGVycyhoZWFkZXJzU3RyaW5nKV0pOwotICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAvLyByZW1vdmUgcHJvbWlzZSBmcm9tIHRoZSBjYWNoZQotICAgICAgICAg
ICAgY2FjaGUucmVtb3ZlKHVybCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
cmVzb2x2ZVByb21pc2UocmVzcG9uc2UsIHN0YXR1cywgaGVhZGVyc1N0cmluZyk7Ci0gICAgICAg
ICRyb290U2NvcGUuJGFwcGx5KCk7Ci0gICAgICB9Ci0KLQotICAgICAgLyoqCi0gICAgICAgKiBS
ZXNvbHZlcyB0aGUgcmF3ICRodHRwIHByb21pc2UuCi0gICAgICAgKi8KLSAgICAgIGZ1bmN0aW9u
IHJlc29sdmVQcm9taXNlKHJlc3BvbnNlLCBzdGF0dXMsIGhlYWRlcnMpIHsKLSAgICAgICAgLy8g
bm9ybWFsaXplIGludGVybmFsIHN0YXR1c2VzIHRvIDAKLSAgICAgICAgc3RhdHVzID0gTWF0aC5t
YXgoc3RhdHVzLCAwKTsKLQotICAgICAgICAoaXNTdWNjZXNzKHN0YXR1cykgPyBkZWZlcnJlZC5y
ZXNvbHZlIDogZGVmZXJyZWQucmVqZWN0KSh7Ci0gICAgICAgICAgZGF0YTogcmVzcG9uc2UsCi0g
ICAgICAgICAgc3RhdHVzOiBzdGF0dXMsCi0gICAgICAgICAgaGVhZGVyczogaGVhZGVyc0dldHRl
cihoZWFkZXJzKSwKLSAgICAgICAgICBjb25maWc6IGNvbmZpZwotICAgICAgICB9KTsKLSAgICAg
IH0KLQotCi0gICAgICBmdW5jdGlvbiByZW1vdmVQZW5kaW5nUmVxKCkgewotICAgICAgICB2YXIg
aWR4ID0gaW5kZXhPZigkaHR0cC5wZW5kaW5nUmVxdWVzdHMsIGNvbmZpZyk7Ci0gICAgICAgIGlm
IChpZHggIT09IC0xKSAkaHR0cC5wZW5kaW5nUmVxdWVzdHMuc3BsaWNlKGlkeCwgMSk7Ci0gICAg
ICB9Ci0gICAgfQotCi0KLSAgICBmdW5jdGlvbiBidWlsZFVybCh1cmwsIHBhcmFtcykgewotICAg
ICAgICAgIGlmICghcGFyYW1zKSByZXR1cm4gdXJsOwotICAgICAgICAgIHZhciBwYXJ0cyA9IFtd
OwotICAgICAgICAgIGZvckVhY2hTb3J0ZWQocGFyYW1zLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7
Ci0gICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PSB1bmRlZmluZWQpIHJl
dHVybjsKLSAgICAgICAgICAgIGlmIChpc09iamVjdCh2YWx1ZSkpIHsKLSAgICAgICAgICAgICAg
dmFsdWUgPSB0b0pzb24odmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcGFydHMu
cHVzaChlbmNvZGVVUklDb21wb25lbnQoa2V5KSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2
YWx1ZSkpOwotICAgICAgICAgIH0pOwotICAgICAgICAgIHJldHVybiB1cmwgKyAoKHVybC5pbmRl
eE9mKCc/JykgPT0gLTEpID8gJz8nIDogJyYnKSArIHBhcnRzLmpvaW4oJyYnKTsKLSAgICAgICAg
fQotCi0KLSAgfV07Ci19Ci0KLXZhciBYSFIgPSB3aW5kb3cuWE1MSHR0cFJlcXVlc3QgfHwgZnVu
Y3Rpb24oKSB7Ci0gIHRyeSB7IHJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgiTXN4bWwyLlhNTEhU
VFAuNi4wIik7IH0gY2F0Y2ggKGUxKSB7fQotICB0cnkgeyByZXR1cm4gbmV3IEFjdGl2ZVhPYmpl
Y3QoIk1zeG1sMi5YTUxIVFRQLjMuMCIpOyB9IGNhdGNoIChlMikge30KLSAgdHJ5IHsgcmV0dXJu
IG5ldyBBY3RpdmVYT2JqZWN0KCJNc3htbDIuWE1MSFRUUCIpOyB9IGNhdGNoIChlMykge30KLSAg
dGhyb3cgbmV3IEVycm9yKCJUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBYTUxIdHRwUmVx
dWVzdC4iKTsKLX07Ci0KLQotLyoqCi0gKiBAbmdkb2Mgb2JqZWN0Ci0gKiBAbmFtZSBuZy4kaHR0
cEJhY2tlbmQKLSAqIEByZXF1aXJlcyAkYnJvd3NlcgotICogQHJlcXVpcmVzICR3aW5kb3cKLSAq
IEByZXF1aXJlcyAkZG9jdW1lbnQKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIEhUVFAgYmFja2Vu
ZCB1c2VkIGJ5IHRoZSB7QGxpbmsgbmcuJGh0dHAgc2VydmljZX0gdGhhdCBkZWxlZ2F0ZXMgdG8K
LSAqIFhNTEh0dHBSZXF1ZXN0IG9iamVjdCBvciBKU09OUCBhbmQgZGVhbHMgd2l0aCBicm93c2Vy
IGluY29tcGF0aWJpbGl0aWVzLgotICoKLSAqIFlvdSBzaG91bGQgbmV2ZXIgbmVlZCB0byB1c2Ug
dGhpcyBzZXJ2aWNlIGRpcmVjdGx5LCBpbnN0ZWFkIHVzZSB0aGUgaGlnaGVyLWxldmVsIGFic3Ry
YWN0aW9uczoKLSAqIHtAbGluayBuZy4kaHR0cCAkaHR0cH0gb3Ige0BsaW5rIG5nUmVzb3VyY2Uu
JHJlc291cmNlICRyZXNvdXJjZX0uCi0gKgotICogRHVyaW5nIHRlc3RpbmcgdGhpcyBpbXBsZW1l
bnRhdGlvbiBpcyBzd2FwcGVkIHdpdGgge0BsaW5rIG5nTW9jay4kaHR0cEJhY2tlbmQgbW9jawot
ICogJGh0dHBCYWNrZW5kfSB3aGljaCBjYW4gYmUgdHJhaW5lZCB3aXRoIHJlc3BvbnNlcy4KLSAq
LwotZnVuY3Rpb24gJEh0dHBCYWNrZW5kUHJvdmlkZXIoKSB7Ci0gIHRoaXMuJGdldCA9IFsnJGJy
b3dzZXInLCAnJHdpbmRvdycsICckZG9jdW1lbnQnLCBmdW5jdGlvbigkYnJvd3NlciwgJHdpbmRv
dywgJGRvY3VtZW50KSB7Ci0gICAgcmV0dXJuIGNyZWF0ZUh0dHBCYWNrZW5kKCRicm93c2VyLCBY
SFIsICRicm93c2VyLmRlZmVyLCAkd2luZG93LmFuZ3VsYXIuY2FsbGJhY2tzLAotICAgICAgICAk
ZG9jdW1lbnRbMF0sICR3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wucmVwbGFjZSgnOicsICcnKSk7
Ci0gIH1dOwotfQotCi1mdW5jdGlvbiBjcmVhdGVIdHRwQmFja2VuZCgkYnJvd3NlciwgWEhSLCAk
YnJvd3NlckRlZmVyLCBjYWxsYmFja3MsIHJhd0RvY3VtZW50LCBsb2NhdGlvblByb3RvY29sKSB7
Ci0gIC8vIFRPRE8odm9qdGEpOiBmaXggdGhlIHNpZ25hdHVyZQotICByZXR1cm4gZnVuY3Rpb24o
bWV0aG9kLCB1cmwsIHBvc3QsIGNhbGxiYWNrLCBoZWFkZXJzLCB0aW1lb3V0LCB3aXRoQ3JlZGVu
dGlhbHMpIHsKLSAgICAkYnJvd3Nlci4kJGluY091dHN0YW5kaW5nUmVxdWVzdENvdW50KCk7Ci0g
ICAgdXJsID0gdXJsIHx8ICRicm93c2VyLnVybCgpOwotCi0gICAgaWYgKGxvd2VyY2FzZShtZXRo
b2QpID09ICdqc29ucCcpIHsKLSAgICAgIHZhciBjYWxsYmFja0lkID0gJ18nICsgKGNhbGxiYWNr
cy5jb3VudGVyKyspLnRvU3RyaW5nKDM2KTsKLSAgICAgIGNhbGxiYWNrc1tjYWxsYmFja0lkXSA9
IGZ1bmN0aW9uKGRhdGEpIHsKLSAgICAgICAgY2FsbGJhY2tzW2NhbGxiYWNrSWRdLmRhdGEgPSBk
YXRhOwotICAgICAgfTsKLQotICAgICAganNvbnBSZXEodXJsLnJlcGxhY2UoJ0pTT05fQ0FMTEJB
Q0snLCAnYW5ndWxhci5jYWxsYmFja3MuJyArIGNhbGxiYWNrSWQpLAotICAgICAgICAgIGZ1bmN0
aW9uKCkgewotICAgICAgICBpZiAoY2FsbGJhY2tzW2NhbGxiYWNrSWRdLmRhdGEpIHsKLSAgICAg
ICAgICBjb21wbGV0ZVJlcXVlc3QoY2FsbGJhY2ssIDIwMCwgY2FsbGJhY2tzW2NhbGxiYWNrSWRd
LmRhdGEpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGNvbXBsZXRlUmVxdWVzdChjYWxs
YmFjaywgLTIpOwotICAgICAgICB9Ci0gICAgICAgIGRlbGV0ZSBjYWxsYmFja3NbY2FsbGJhY2tJ
ZF07Ci0gICAgICB9KTsKLSAgICB9IGVsc2UgewotICAgICAgdmFyIHhociA9IG5ldyBYSFIoKTsK
LSAgICAgIHhoci5vcGVuKG1ldGhvZCwgdXJsLCB0cnVlKTsKLSAgICAgIGZvckVhY2goaGVhZGVy
cywgZnVuY3Rpb24odmFsdWUsIGtleSkgewotICAgICAgICBpZiAodmFsdWUpIHhoci5zZXRSZXF1
ZXN0SGVhZGVyKGtleSwgdmFsdWUpOwotICAgICAgfSk7Ci0KLSAgICAgIHZhciBzdGF0dXM7Ci0K
LSAgICAgIC8vIEluIElFNiBhbmQgNywgdGhpcyBtaWdodCBiZSBjYWxsZWQgc3luY2hyb25vdXNs
eSB3aGVuIHhoci5zZW5kIGJlbG93IGlzIGNhbGxlZCBhbmQgdGhlCi0gICAgICAvLyByZXNwb25z
ZSBpcyBpbiB0aGUgY2FjaGUuIHRoZSBwcm9taXNlIGFwaSB3aWxsIGVuc3VyZSB0aGF0IHRvIHRo
ZSBhcHAgY29kZSB0aGUgYXBpIGlzCi0gICAgICAvLyBhbHdheXMgYXN5bmMKLSAgICAgIHhoci5v
bnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHhoci5yZWFkeVN0
YXRlID09IDQpIHsKLSAgICAgICAgICB2YXIgcmVzcG9uc2VIZWFkZXJzID0geGhyLmdldEFsbFJl
c3BvbnNlSGVhZGVycygpOwotCi0gICAgICAgICAgLy8gVE9ETyh2b2p0YSk6IHJlbW92ZSBvbmNl
IEZpcmVmb3ggMjEgZ2V0cyByZWxlYXNlZC4KLSAgICAgICAgICAvLyBiZWdpbjogd29ya2Fyb3Vu
ZCB0byBvdmVyY29tZSBGaXJlZm94IENPUlMgaHR0cCByZXNwb25zZSBoZWFkZXJzIGJ1ZwotICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTYw
ODczNQotICAgICAgICAgIC8vIEZpcmVmb3ggYWxyZWFkeSBwYXRjaGVkIGluIG5pZ2h0bHkuIFNo
b3VsZCBsYW5kIGluIEZpcmVmb3ggMjEuCi0KLSAgICAgICAgICAvLyBDT1JTICJzaW1wbGUgcmVz
cG9uc2UgaGVhZGVycyIgaHR0cDovL3d3dy53My5vcmcvVFIvY29ycy8KLSAgICAgICAgICB2YXIg
dmFsdWUsCi0gICAgICAgICAgICAgIHNpbXBsZUhlYWRlcnMgPSBbIkNhY2hlLUNvbnRyb2wiLCAi
Q29udGVudC1MYW5ndWFnZSIsICJDb250ZW50LVR5cGUiLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJFeHBpcmVzIiwgIkxhc3QtTW9kaWZpZWQiLCAiUHJhZ21hIl07Ci0gICAg
ICAgICAgaWYgKCFyZXNwb25zZUhlYWRlcnMpIHsKLSAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVy
cyA9ICIiOwotICAgICAgICAgICAgZm9yRWFjaChzaW1wbGVIZWFkZXJzLCBmdW5jdGlvbiAoaGVh
ZGVyKSB7Ci0gICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHhoci5nZXRSZXNwb25zZUhlYWRlciho
ZWFkZXIpOwotICAgICAgICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgIHJl
c3BvbnNlSGVhZGVycyArPSBoZWFkZXIgKyAiOiAiICsgdmFsdWUgKyAiXG4iOwotICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLy8gZW5kIG9m
IHRoZSB3b3JrYXJvdW5kLgotCi0gICAgICAgICAgY29tcGxldGVSZXF1ZXN0KGNhbGxiYWNrLCBz
dGF0dXMgfHwgeGhyLnN0YXR1cywgeGhyLnJlc3BvbnNlVGV4dCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzcG9uc2VIZWFkZXJzKTsKLSAgICAgICAgfQotICAgICAgfTsKLQotICAgICAg
aWYgKHdpdGhDcmVkZW50aWFscykgewotICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1
ZTsKLSAgICAgIH0KLQotICAgICAgeGhyLnNlbmQocG9zdCB8fCAnJyk7Ci0KLSAgICAgIGlmICh0
aW1lb3V0ID4gMCkgewotICAgICAgICAkYnJvd3NlckRlZmVyKGZ1bmN0aW9uKCkgewotICAgICAg
ICAgIHN0YXR1cyA9IC0xOwotICAgICAgICAgIHhoci5hYm9ydCgpOwotICAgICAgICB9LCB0aW1l
b3V0KTsKLSAgICAgIH0KLSAgICB9Ci0KLQotICAgIGZ1bmN0aW9uIGNvbXBsZXRlUmVxdWVzdChj
YWxsYmFjaywgc3RhdHVzLCByZXNwb25zZSwgaGVhZGVyc1N0cmluZykgewotICAgICAgLy8gVVJM
X01BVENIIGlzIGRlZmluZWQgaW4gc3JjL3NlcnZpY2UvbG9jYXRpb24uanMKLSAgICAgIHZhciBw
cm90b2NvbCA9ICh1cmwubWF0Y2goVVJMX01BVENIKSB8fCBbJycsIGxvY2F0aW9uUHJvdG9jb2xd
KVsxXTsKLQotICAgICAgLy8gZml4IHN0YXR1cyBjb2RlIGZvciBmaWxlIHByb3RvY29sIChpdCdz
IGFsd2F5cyAwKQotICAgICAgc3RhdHVzID0gKHByb3RvY29sID09ICdmaWxlJykgPyAocmVzcG9u
c2UgPyAyMDAgOiA0MDQpIDogc3RhdHVzOwotCi0gICAgICAvLyBub3JtYWxpemUgSUUgYnVnICho
dHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xNDUwKQotICAgICAgc3RhdHVzID0gc3RhdHVz
ID09IDEyMjMgPyAyMDQgOiBzdGF0dXM7Ci0KLSAgICAgIGNhbGxiYWNrKHN0YXR1cywgcmVzcG9u
c2UsIGhlYWRlcnNTdHJpbmcpOwotICAgICAgJGJyb3dzZXIuJCRjb21wbGV0ZU91dHN0YW5kaW5n
UmVxdWVzdChub29wKTsKLSAgICB9Ci0gIH07Ci0KLSAgZnVuY3Rpb24ganNvbnBSZXEodXJsLCBk
b25lKSB7Ci0gICAgLy8gd2UgY2FuJ3QgdXNlIGpRdWVyeS9qcUxpdGUgaGVyZSBiZWNhdXNlIGpR
dWVyeSBkb2VzIGNyYXp5IHNoaXQgd2l0aCBzY3JpcHQgZWxlbWVudHMsIGUuZy46Ci0gICAgLy8g
LSBmZXRjaGVzIGxvY2FsIHNjcmlwdHMgdmlhIFhIUiBhbmQgZXZhbHMgdGhlbQotICAgIC8vIC0g
YWRkcyBhbmQgaW1tZWRpYXRlbHkgcmVtb3ZlcyBzY3JpcHQgZWxlbWVudHMgZnJvbSB0aGUgZG9j
dW1lbnQKLSAgICB2YXIgc2NyaXB0ID0gcmF3RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0
JyksCi0gICAgICAgIGRvbmVXcmFwcGVyID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgcmF3RG9j
dW1lbnQuYm9keS5yZW1vdmVDaGlsZChzY3JpcHQpOwotICAgICAgICAgIGlmIChkb25lKSBkb25l
KCk7Ci0gICAgICAgIH07Ci0KLSAgICBzY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnOwot
ICAgIHNjcmlwdC5zcmMgPSB1cmw7Ci0KLSAgICBpZiAobXNpZSkgewotICAgICAgc2NyaXB0Lm9u
cmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAoL2xvYWRlZHxjb21w
bGV0ZS8udGVzdChzY3JpcHQucmVhZHlTdGF0ZSkpIGRvbmVXcmFwcGVyKCk7Ci0gICAgICB9Owot
ICAgIH0gZWxzZSB7Ci0gICAgICBzY3JpcHQub25sb2FkID0gc2NyaXB0Lm9uZXJyb3IgPSBkb25l
V3JhcHBlcjsKLSAgICB9Ci0KLSAgICByYXdEb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlw
dCk7Ci0gIH0KLX0KLQotLyoqCi0gKiBAbmdkb2Mgb2JqZWN0Ci0gKiBAbmFtZSBuZy4kbG9jYWxl
Ci0gKgotICogQGRlc2NyaXB0aW9uCi0gKiAkbG9jYWxlIHNlcnZpY2UgcHJvdmlkZXMgbG9jYWxp
emF0aW9uIHJ1bGVzIGZvciB2YXJpb3VzIEFuZ3VsYXIgY29tcG9uZW50cy4gQXMgb2YgcmlnaHQg
bm93IHRoZQotICogb25seSBwdWJsaWMgYXBpIGlzOgotICoKLSAqICogYGlkYCDigJMgYHtzdHJp
bmd9YCDigJMgbG9jYWxlIGlkIGZvcm1hdHRlZCBhcyBgbGFuZ3VhZ2VJZC1jb3VudHJ5SWRgIChl
LmcuIGBlbi11c2ApCi0gKi8KLWZ1bmN0aW9uICRMb2NhbGVQcm92aWRlcigpewotICB0aGlzLiRn
ZXQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gewotICAgICAgaWQ6ICdlbi11cycsCi0KLSAg
ICAgIE5VTUJFUl9GT1JNQVRTOiB7Ci0gICAgICAgIERFQ0lNQUxfU0VQOiAnLicsCi0gICAgICAg
IEdST1VQX1NFUDogJywnLAotICAgICAgICBQQVRURVJOUzogWwotICAgICAgICAgIHsgLy8gRGVj
aW1hbCBQYXR0ZXJuCi0gICAgICAgICAgICBtaW5JbnQ6IDEsCi0gICAgICAgICAgICBtaW5GcmFj
OiAwLAotICAgICAgICAgICAgbWF4RnJhYzogMywKLSAgICAgICAgICAgIHBvc1ByZTogJycsCi0g
ICAgICAgICAgICBwb3NTdWY6ICcnLAotICAgICAgICAgICAgbmVnUHJlOiAnLScsCi0gICAgICAg
ICAgICBuZWdTdWY6ICcnLAotICAgICAgICAgICAgZ1NpemU6IDMsCi0gICAgICAgICAgICBsZ1Np
emU6IDMKLSAgICAgICAgICB9LHsgLy9DdXJyZW5jeSBQYXR0ZXJuCi0gICAgICAgICAgICBtaW5J
bnQ6IDEsCi0gICAgICAgICAgICBtaW5GcmFjOiAyLAotICAgICAgICAgICAgbWF4RnJhYzogMiwK
LSAgICAgICAgICAgIHBvc1ByZTogJ1x1MDBBNCcsCi0gICAgICAgICAgICBwb3NTdWY6ICcnLAot
ICAgICAgICAgICAgbmVnUHJlOiAnKFx1MDBBNCcsCi0gICAgICAgICAgICBuZWdTdWY6ICcpJywK
LSAgICAgICAgICAgIGdTaXplOiAzLAotICAgICAgICAgICAgbGdTaXplOiAzCi0gICAgICAgICAg
fQotICAgICAgICBdLAotICAgICAgICBDVVJSRU5DWV9TWU06ICckJwotICAgICAgfSwKLQotICAg
ICAgREFURVRJTUVfRk9STUFUUzogewotICAgICAgICBNT05USDogJ0phbnVhcnksRmVicnVhcnks
TWFyY2gsQXByaWwsTWF5LEp1bmUsSnVseSxBdWd1c3QsU2VwdGVtYmVyLE9jdG9iZXIsTm92ZW1i
ZXIsRGVjZW1iZXInCi0gICAgICAgICAgICAgICAgLnNwbGl0KCcsJyksCi0gICAgICAgIFNIT1JU
TU9OVEg6ICAnSmFuLEZlYixNYXIsQXByLE1heSxKdW4sSnVsLEF1ZyxTZXAsT2N0LE5vdixEZWMn
LnNwbGl0KCcsJyksCi0gICAgICAgIERBWTogJ1N1bmRheSxNb25kYXksVHVlc2RheSxXZWRuZXNk
YXksVGh1cnNkYXksRnJpZGF5LFNhdHVyZGF5Jy5zcGxpdCgnLCcpLAotICAgICAgICBTSE9SVERB
WTogJ1N1bixNb24sVHVlLFdlZCxUaHUsRnJpLFNhdCcuc3BsaXQoJywnKSwKLSAgICAgICAgQU1Q
TVM6IFsnQU0nLCdQTSddLAotICAgICAgICBtZWRpdW06ICdNTU0gZCwgeSBoOm1tOnNzIGEnLAot
ICAgICAgICBzaG9ydDogJ00vZC95eSBoOm1tIGEnLAotICAgICAgICBmdWxsRGF0ZTogJ0VFRUUs
IE1NTU0gZCwgeScsCi0gICAgICAgIGxvbmdEYXRlOiAnTU1NTSBkLCB5JywKLSAgICAgICAgbWVk
aXVtRGF0ZTogJ01NTSBkLCB5JywKLSAgICAgICAgc2hvcnREYXRlOiAnTS9kL3l5JywKLSAgICAg
ICAgbWVkaXVtVGltZTogJ2g6bW06c3MgYScsCi0gICAgICAgIHNob3J0VGltZTogJ2g6bW0gYScK
LSAgICAgIH0sCi0KLSAgICAgIHBsdXJhbENhdDogZnVuY3Rpb24obnVtKSB7Ci0gICAgICAgIGlm
IChudW0gPT09IDEpIHsKLSAgICAgICAgICByZXR1cm4gJ29uZSc7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuICdvdGhlcic7Ci0gICAgICB9Ci0gICAgfTsKLSAgfTsKLX0KLQotZnVuY3Rpb24g
JFRpbWVvdXRQcm92aWRlcigpIHsKLSAgdGhpcy4kZ2V0ID0gWyckcm9vdFNjb3BlJywgJyRicm93
c2VyJywgJyRxJywgJyRleGNlcHRpb25IYW5kbGVyJywKLSAgICAgICBmdW5jdGlvbigkcm9vdFNj
b3BlLCAgICRicm93c2VyLCAgICRxLCAgICRleGNlcHRpb25IYW5kbGVyKSB7Ci0gICAgdmFyIGRl
ZmVycmVkcyA9IHt9OwotCi0KLSAgICAgLyoqCi0gICAgICAqIEBuZ2RvYyBmdW5jdGlvbgotICAg
ICAgKiBAbmFtZSBuZy4kdGltZW91dAotICAgICAgKiBAcmVxdWlyZXMgJGJyb3dzZXIKLSAgICAg
ICoKLSAgICAgICogQGRlc2NyaXB0aW9uCi0gICAgICAqIEFuZ3VsYXIncyB3cmFwcGVyIGZvciBg
d2luZG93LnNldFRpbWVvdXRgLiBUaGUgYGZuYCBmdW5jdGlvbiBpcyB3cmFwcGVkIGludG8gYSB0
cnkvY2F0Y2gKLSAgICAgICogYmxvY2sgYW5kIGRlbGVnYXRlcyBhbnkgZXhjZXB0aW9ucyB0bwot
ICAgICAgKiB7QGxpbmsgbmcuJGV4Y2VwdGlvbkhhbmRsZXIgJGV4Y2VwdGlvbkhhbmRsZXJ9IHNl
cnZpY2UuCi0gICAgICAqCi0gICAgICAqIFRoZSByZXR1cm4gdmFsdWUgb2YgcmVnaXN0ZXJpbmcg
YSB0aW1lb3V0IGZ1bmN0aW9uIGlzIGEgcHJvbWlzZSwgd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB3
aGVuCi0gICAgICAqIHRoZSB0aW1lb3V0IGlzIHJlYWNoZWQgYW5kIHRoZSB0aW1lb3V0IGZ1bmN0
aW9uIGlzIGV4ZWN1dGVkLgotICAgICAgKgotICAgICAgKiBUbyBjYW5jZWwgYSB0aW1lb3V0IHJl
cXVlc3QsIGNhbGwgYCR0aW1lb3V0LmNhbmNlbChwcm9taXNlKWAuCi0gICAgICAqCi0gICAgICAq
IEluIHRlc3RzIHlvdSBjYW4gdXNlIHtAbGluayBuZ01vY2suJHRpbWVvdXQgYCR0aW1lb3V0LmZs
dXNoKClgfSB0bwotICAgICAgKiBzeW5jaHJvbm91c2x5IGZsdXNoIHRoZSBxdWV1ZSBvZiBkZWZl
cnJlZCBmdW5jdGlvbnMuCi0gICAgICAqCi0gICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gZm4g
QSBmdW5jdGlvbiwgd2hvc2UgZXhlY3V0aW9uIHNob3VsZCBiZSBkZWxheWVkLgotICAgICAgKiBA
cGFyYW0ge251bWJlcj19IFtkZWxheT0wXSBEZWxheSBpbiBtaWxsaXNlY29uZHMuCi0gICAgICAq
IEBwYXJhbSB7Ym9vbGVhbj19IFtpbnZva2VBcHBseT10cnVlXSBJZiBzZXQgdG8gYGZhbHNlYCBz
a2lwcyBtb2RlbCBkaXJ0eSBjaGVja2luZywgb3RoZXJ3aXNlCi0gICAgICAqICAgd2lsbCBpbnZv
a2UgYGZuYCB3aXRoaW4gdGhlIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRhcHBseSAkYXBw
bHl9IGJsb2NrLgotICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB0aGF0IHdpbGwg
YmUgcmVzb2x2ZWQgd2hlbiB0aGUgdGltZW91dCBpcyByZWFjaGVkLiBUaGUgdmFsdWUgdGhpcwot
ICAgICAgKiAgIHByb21pc2Ugd2lsbCBiZSByZXNvbHZlZCB3aXRoIGlzIHRoZSByZXR1cm4gdmFs
dWUgb2YgdGhlIGBmbmAgZnVuY3Rpb24uCi0gICAgICAqLwotICAgIGZ1bmN0aW9uIHRpbWVvdXQo
Zm4sIGRlbGF5LCBpbnZva2VBcHBseSkgewotICAgICAgdmFyIGRlZmVycmVkID0gJHEuZGVmZXIo
KSwKLSAgICAgICAgICBwcm9taXNlID0gZGVmZXJyZWQucHJvbWlzZSwKLSAgICAgICAgICBza2lw
QXBwbHkgPSAoaXNEZWZpbmVkKGludm9rZUFwcGx5KSAmJiAhaW52b2tlQXBwbHkpLAotICAgICAg
ICAgIHRpbWVvdXRJZCwgY2xlYW51cDsKLQotICAgICAgdGltZW91dElkID0gJGJyb3dzZXIuZGVm
ZXIoZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgZGVmZXJyZWQucmVzb2x2
ZShmbigpKTsKLSAgICAgICAgfSBjYXRjaChlKSB7Ci0gICAgICAgICAgZGVmZXJyZWQucmVqZWN0
KGUpOwotICAgICAgICAgICRleGNlcHRpb25IYW5kbGVyKGUpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKCFza2lwQXBwbHkpICRyb290U2NvcGUuJGFwcGx5KCk7Ci0gICAgICB9LCBkZWxheSk7
Ci0KLSAgICAgIGNsZWFudXAgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgZGVsZXRlIGRlZmVycmVk
c1twcm9taXNlLiQkdGltZW91dElkXTsKLSAgICAgIH07Ci0KLSAgICAgIHByb21pc2UuJCR0aW1l
b3V0SWQgPSB0aW1lb3V0SWQ7Ci0gICAgICBkZWZlcnJlZHNbdGltZW91dElkXSA9IGRlZmVycmVk
OwotICAgICAgcHJvbWlzZS50aGVuKGNsZWFudXAsIGNsZWFudXApOwotCi0gICAgICByZXR1cm4g
cHJvbWlzZTsKLSAgICB9Ci0KLQotICAgICAvKioKLSAgICAgICogQG5nZG9jIGZ1bmN0aW9uCi0g
ICAgICAqIEBuYW1lIG5nLiR0aW1lb3V0I2NhbmNlbAotICAgICAgKiBAbWV0aG9kT2YgbmcuJHRp
bWVvdXQKLSAgICAgICoKLSAgICAgICogQGRlc2NyaXB0aW9uCi0gICAgICAqIENhbmNlbHMgYSB0
YXNrIGFzc29jaWF0ZWQgd2l0aCB0aGUgYHByb21pc2VgLiBBcyBhIHJlc3VsdCBvZiB0aGlzLCB0
aGUgcHJvbWlzZSB3aWxsIGJlCi0gICAgICAqIHJlc29sdmVkIHdpdGggYSByZWplY3Rpb24uCi0g
ICAgICAqCi0gICAgICAqIEBwYXJhbSB7UHJvbWlzZT19IHByb21pc2UgUHJvbWlzZSByZXR1cm5l
ZCBieSB0aGUgYCR0aW1lb3V0YCBmdW5jdGlvbi4KLSAgICAgICogQHJldHVybnMge2Jvb2xlYW59
IFJldHVybnMgYHRydWVgIGlmIHRoZSB0YXNrIGhhc24ndCBleGVjdXRlZCB5ZXQgYW5kIHdhcyBz
dWNjZXNzZnVsbHkKLSAgICAgICogICBjYW5jZWxlZC4KLSAgICAgICovCi0gICAgdGltZW91dC5j
YW5jZWwgPSBmdW5jdGlvbihwcm9taXNlKSB7Ci0gICAgICBpZiAocHJvbWlzZSAmJiBwcm9taXNl
LiQkdGltZW91dElkIGluIGRlZmVycmVkcykgewotICAgICAgICBkZWZlcnJlZHNbcHJvbWlzZS4k
JHRpbWVvdXRJZF0ucmVqZWN0KCdjYW5jZWxlZCcpOwotICAgICAgICByZXR1cm4gJGJyb3dzZXIu
ZGVmZXIuY2FuY2VsKHByb21pc2UuJCR0aW1lb3V0SWQpOwotICAgICAgfQotICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH07Ci0KLSAgICByZXR1cm4gdGltZW91dDsKLSAgfV07Ci19Ci0KLS8qKgot
ICogQG5nZG9jIG9iamVjdAotICogQG5hbWUgbmcuJGZpbHRlclByb3ZpZGVyCi0gKiBAZGVzY3Jp
cHRpb24KLSAqCi0gKiBGaWx0ZXJzIGFyZSBqdXN0IGZ1bmN0aW9ucyB3aGljaCB0cmFuc2Zvcm0g
aW5wdXQgdG8gYW4gb3V0cHV0LiBIb3dldmVyIGZpbHRlcnMgbmVlZCB0byBiZSBEZXBlbmRlbmN5
IEluamVjdGVkLiBUbwotICogYWNoaWV2ZSB0aGlzIGEgZmlsdGVyIGRlZmluaXRpb24gY29uc2lz
dHMgb2YgYSBmYWN0b3J5IGZ1bmN0aW9uIHdoaWNoIGlzIGFubm90YXRlZCB3aXRoIGRlcGVuZGVu
Y2llcyBhbmQgaXMKLSAqIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBhIGZpbHRlciBmdW5jdGlv
bi4KLSAqCi0gKiA8cHJlPgotICogICAvLyBGaWx0ZXIgcmVnaXN0cmF0aW9uCi0gKiAgIGZ1bmN0
aW9uIE15TW9kdWxlKCRwcm92aWRlLCAkZmlsdGVyUHJvdmlkZXIpIHsKLSAqICAgICAvLyBjcmVh
dGUgYSBzZXJ2aWNlIHRvIGRlbW9uc3RyYXRlIGluamVjdGlvbiAobm90IGFsd2F5cyBuZWVkZWQp
Ci0gKiAgICAgJHByb3ZpZGUudmFsdWUoJ2dyZWV0JywgZnVuY3Rpb24obmFtZSl7Ci0gKiAgICAg
ICByZXR1cm4gJ0hlbGxvICcgKyBuYW1lICsgJyEnOwotICogICAgIH0pOwotICoKLSAqICAgICAv
LyByZWdpc3RlciBhIGZpbHRlciBmYWN0b3J5IHdoaWNoIHVzZXMgdGhlCi0gKiAgICAgLy8gZ3Jl
ZXQgc2VydmljZSB0byBkZW1vbnN0cmF0ZSBESS4KLSAqICAgICAkZmlsdGVyUHJvdmlkZXIucmVn
aXN0ZXIoJ2dyZWV0JywgZnVuY3Rpb24oZ3JlZXQpewotICogICAgICAgLy8gcmV0dXJuIHRoZSBm
aWx0ZXIgZnVuY3Rpb24gd2hpY2ggdXNlcyB0aGUgZ3JlZXQgc2VydmljZQotICogICAgICAgLy8g
dG8gZ2VuZXJhdGUgc2FsdXRhdGlvbgotICogICAgICAgcmV0dXJuIGZ1bmN0aW9uKHRleHQpIHsK
LSAqICAgICAgICAgLy8gZmlsdGVycyBuZWVkIHRvIGJlIGZvcmdpdmluZyBzbyBjaGVjayBpbnB1
dCB2YWxpZGl0eQotICogICAgICAgICByZXR1cm4gdGV4dCAmJiBncmVldCh0ZXh0KSB8fCB0ZXh0
OwotICogICAgICAgfTsKLSAqICAgICB9KTsKLSAqICAgfQotICogPC9wcmU+Ci0gKgotICogVGhl
IGZpbHRlciBmdW5jdGlvbiBpcyByZWdpc3RlcmVkIHdpdGggdGhlIGAkaW5qZWN0b3JgIHVuZGVy
IHRoZSBmaWx0ZXIgbmFtZSBzdWZmaXhlIHdpdGggYEZpbHRlcmAuCi0gKiA8cHJlPgotICogICBp
dCgnc2hvdWxkIGJlIHRoZSBzYW1lIGluc3RhbmNlJywgaW5qZWN0KAotICogICAgIGZ1bmN0aW9u
KCRmaWx0ZXJQcm92aWRlcikgewotICogICAgICAgJGZpbHRlclByb3ZpZGVyLnJlZ2lzdGVyKCdy
ZXZlcnNlJywgZnVuY3Rpb24oKXsKLSAqICAgICAgICAgcmV0dXJuIC4uLjsKLSAqICAgICAgIH0p
OwotICogICAgIH0sCi0gKiAgICAgZnVuY3Rpb24oJGZpbHRlciwgcmV2ZXJzZUZpbHRlcikgewot
ICogICAgICAgZXhwZWN0KCRmaWx0ZXIoJ3JldmVyc2UnKSkudG9CZShyZXZlcnNlRmlsdGVyKTsK
LSAqICAgICB9KTsKLSAqIDwvcHJlPgotICoKLSAqCi0gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBh
Ym91dCBob3cgYW5ndWxhciBmaWx0ZXJzIHdvcmssIGFuZCBob3cgdG8gY3JlYXRlIHlvdXIgb3du
IGZpbHRlcnMsIHNlZQotICoge0BsaW5rIGd1aWRlL2Rldl9ndWlkZS50ZW1wbGF0ZXMuZmlsdGVy
cyBVbmRlcnN0YW5kaW5nIEFuZ3VsYXIgRmlsdGVyc30gaW4gdGhlIGFuZ3VsYXIgRGV2ZWxvcGVy
Ci0gKiBHdWlkZS4KLSAqLwotLyoqCi0gKiBAbmdkb2MgbWV0aG9kCi0gKiBAbmFtZSBuZy4kZmls
dGVyUHJvdmlkZXIjcmVnaXN0ZXIKLSAqIEBtZXRob2RPZiBuZy4kZmlsdGVyUHJvdmlkZXIKLSAq
IEBkZXNjcmlwdGlvbgotICogUmVnaXN0ZXIgZmlsdGVyIGZhY3RvcnkgZnVuY3Rpb24uCi0gKgot
ICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgTmFtZSBvZiB0aGUgZmlsdGVyLgotICogQHBhcmFtIHtm
dW5jdGlvbn0gZm4gVGhlIGZpbHRlciBmYWN0b3J5IGZ1bmN0aW9uIHdoaWNoIGlzIGluamVjdGFi
bGUuCi0gKi8KLQotCi0vKioKLSAqIEBuZ2RvYyBmdW5jdGlvbgotICogQG5hbWUgbmcuJGZpbHRl
cgotICogQGZ1bmN0aW9uCi0gKiBAZGVzY3JpcHRpb24KLSAqIEZpbHRlcnMgYXJlIHVzZWQgZm9y
IGZvcm1hdHRpbmcgZGF0YSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuCi0gKgotICogVGhlIGdlbmVy
YWwgc3ludGF4IGluIHRlbXBsYXRlcyBpcyBhcyBmb2xsb3dzOgotICoKLSAqICAgICAgICAge3sg
ZXhwcmVzc2lvbiBbfCBmaWx0ZXJfbmFtZVs6cGFyYW1ldGVyX3ZhbHVlXSAuLi4gXSB9fQotICoK
LSAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIE5hbWUgb2YgdGhlIGZpbHRlciBmdW5jdGlvbiB0byBy
ZXRyaWV2ZQotICogQHJldHVybiB7RnVuY3Rpb259IHRoZSBmaWx0ZXIgZnVuY3Rpb24KLSAqLwot
JEZpbHRlclByb3ZpZGVyLiRpbmplY3QgPSBbJyRwcm92aWRlJ107Ci1mdW5jdGlvbiAkRmlsdGVy
UHJvdmlkZXIoJHByb3ZpZGUpIHsKLSAgdmFyIHN1ZmZpeCA9ICdGaWx0ZXInOwotCi0gIGZ1bmN0
aW9uIHJlZ2lzdGVyKG5hbWUsIGZhY3RvcnkpIHsKLSAgICByZXR1cm4gJHByb3ZpZGUuZmFjdG9y
eShuYW1lICsgc3VmZml4LCBmYWN0b3J5KTsKLSAgfQotICB0aGlzLnJlZ2lzdGVyID0gcmVnaXN0
ZXI7Ci0KLSAgdGhpcy4kZ2V0ID0gWyckaW5qZWN0b3InLCBmdW5jdGlvbigkaW5qZWN0b3IpIHsK
LSAgICByZXR1cm4gZnVuY3Rpb24obmFtZSkgewotICAgICAgcmV0dXJuICRpbmplY3Rvci5nZXQo
bmFtZSArIHN1ZmZpeCk7Ci0gICAgfQotICB9XTsKLQotICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCi0KLSAgcmVnaXN0ZXIoJ2N1cnJlbmN5JywgY3VycmVuY3lGaWx0
ZXIpOwotICByZWdpc3RlcignZGF0ZScsIGRhdGVGaWx0ZXIpOwotICByZWdpc3RlcignZmlsdGVy
JywgZmlsdGVyRmlsdGVyKTsKLSAgcmVnaXN0ZXIoJ2pzb24nLCBqc29uRmlsdGVyKTsKLSAgcmVn
aXN0ZXIoJ2xpbWl0VG8nLCBsaW1pdFRvRmlsdGVyKTsKLSAgcmVnaXN0ZXIoJ2xvd2VyY2FzZScs
IGxvd2VyY2FzZUZpbHRlcik7Ci0gIHJlZ2lzdGVyKCdudW1iZXInLCBudW1iZXJGaWx0ZXIpOwot
ICByZWdpc3Rlcignb3JkZXJCeScsIG9yZGVyQnlGaWx0ZXIpOwotICByZWdpc3RlcigndXBwZXJj
YXNlJywgdXBwZXJjYXNlRmlsdGVyKTsKLX0KLQotLyoqCi0gKiBAbmdkb2MgZmlsdGVyCi0gKiBA
bmFtZSBuZy5maWx0ZXI6ZmlsdGVyCi0gKiBAZnVuY3Rpb24KLSAqCi0gKiBAZGVzY3JpcHRpb24K
LSAqIFNlbGVjdHMgYSBzdWJzZXQgb2YgaXRlbXMgZnJvbSBgYXJyYXlgIGFuZCByZXR1cm5zIGl0
IGFzIGEgbmV3IGFycmF5LgotICoKLSAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBh
dWdtZW50IHRoZSBgQXJyYXlgIHR5cGUgaW4gQW5ndWxhciBleHByZXNzaW9ucy4gU2VlCi0gKiB7
QGxpbmsgbmcuJGZpbHRlcn0gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgQW5ndWxhciBhcnJh
eXMuCi0gKgotICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvdXJjZSBhcnJheS4KLSAqIEBw
YXJhbSB7c3RyaW5nfE9iamVjdHxmdW5jdGlvbigpfSBleHByZXNzaW9uIFRoZSBwcmVkaWNhdGUg
dG8gYmUgdXNlZCBmb3Igc2VsZWN0aW5nIGl0ZW1zIGZyb20KLSAqICAgYGFycmF5YC4KLSAqCi0g
KiAgIENhbiBiZSBvbmUgb2Y6Ci0gKgotICogICAtIGBzdHJpbmdgOiBQcmVkaWNhdGUgdGhhdCBy
ZXN1bHRzIGluIGEgc3Vic3RyaW5nIG1hdGNoIHVzaW5nIHRoZSB2YWx1ZSBvZiBgZXhwcmVzc2lv
bmAKLSAqICAgICBzdHJpbmcuIEFsbCBzdHJpbmdzIG9yIG9iamVjdHMgd2l0aCBzdHJpbmcgcHJv
cGVydGllcyBpbiBgYXJyYXlgIHRoYXQgY29udGFpbiB0aGlzIHN0cmluZwotICogICAgIHdpbGwg
YmUgcmV0dXJuZWQuIFRoZSBwcmVkaWNhdGUgY2FuIGJlIG5lZ2F0ZWQgYnkgcHJlZml4aW5nIHRo
ZSBzdHJpbmcgd2l0aCBgIWAuCi0gKgotICogICAtIGBPYmplY3RgOiBBIHBhdHRlcm4gb2JqZWN0
IGNhbiBiZSB1c2VkIHRvIGZpbHRlciBzcGVjaWZpYyBwcm9wZXJ0aWVzIG9uIG9iamVjdHMgY29u
dGFpbmVkCi0gKiAgICAgYnkgYGFycmF5YC4gRm9yIGV4YW1wbGUgYHtuYW1lOiJNIiwgcGhvbmU6
IjEifWAgcHJlZGljYXRlIHdpbGwgcmV0dXJuIGFuIGFycmF5IG9mIGl0ZW1zCi0gKiAgICAgd2hp
Y2ggaGF2ZSBwcm9wZXJ0eSBgbmFtZWAgY29udGFpbmluZyAiTSIgYW5kIHByb3BlcnR5IGBwaG9u
ZWAgY29udGFpbmluZyAiMSIuIEEgc3BlY2lhbAotICogICAgIHByb3BlcnR5IG5hbWUgYCRgIGNh
biBiZSB1c2VkIChhcyBpbiBgeyQ6InRleHQifWApIHRvIGFjY2VwdCBhIG1hdGNoIGFnYWluc3Qg
YW55Ci0gKiAgICAgcHJvcGVydHkgb2YgdGhlIG9iamVjdC4gVGhhdCdzIGVxdWl2YWxlbnQgdG8g
dGhlIHNpbXBsZSBzdWJzdHJpbmcgbWF0Y2ggd2l0aCBhIGBzdHJpbmdgCi0gKiAgICAgYXMgZGVz
Y3JpYmVkIGFib3ZlLgotICoKLSAqICAgLSBgZnVuY3Rpb25gOiBBIHByZWRpY2F0ZSBmdW5jdGlv
biBjYW4gYmUgdXNlZCB0byB3cml0ZSBhcmJpdHJhcnkgZmlsdGVycy4gVGhlIGZ1bmN0aW9uIGlz
Ci0gKiAgICAgY2FsbGVkIGZvciBlYWNoIGVsZW1lbnQgb2YgYGFycmF5YC4gVGhlIGZpbmFsIHJl
c3VsdCBpcyBhbiBhcnJheSBvZiB0aG9zZSBlbGVtZW50cyB0aGF0Ci0gKiAgICAgdGhlIHByZWRp
Y2F0ZSByZXR1cm5lZCB0cnVlIGZvci4KLSAqCi0gKiBAZXhhbXBsZQotICAgPGRvYzpleGFtcGxl
PgotICAgICA8ZG9jOnNvdXJjZT4KLSAgICAgICA8ZGl2IG5nLWluaXQ9ImZyaWVuZHMgPSBbe25h
bWU6J0pvaG4nLCBwaG9uZTonNTU1LTEyNzYnfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAge25hbWU6J01hcnknLCBwaG9uZTonODAwLUJJRy1NQVJZJ30sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHtuYW1lOidNaWtlJywgcGhvbmU6JzU1NS00MzIxJ30sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtuYW1lOidBZGFtJywgcGhvbmU6JzU1NS01Njc4
J30sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtuYW1lOidKdWxpZScsIHBob25l
Oic1NTUtODc2NSd9XSI+PC9kaXY+Ci0KLSAgICAgICBTZWFyY2g6IDxpbnB1dCBuZy1tb2RlbD0i
c2VhcmNoVGV4dCI+Ci0gICAgICAgPHRhYmxlIGlkPSJzZWFyY2hUZXh0UmVzdWx0cyI+Ci0gICAg
ICAgICA8dHI+PHRoPk5hbWU8L3RoPjx0aD5QaG9uZTwvdGg+PC90cj4KLSAgICAgICAgIDx0ciBu
Zy1yZXBlYXQ9ImZyaWVuZCBpbiBmcmllbmRzIHwgZmlsdGVyOnNlYXJjaFRleHQiPgotICAgICAg
ICAgICA8dGQ+e3tmcmllbmQubmFtZX19PC90ZD4KLSAgICAgICAgICAgPHRkPnt7ZnJpZW5kLnBo
b25lfX08L3RkPgotICAgICAgICAgPC90cj4KLSAgICAgICA8L3RhYmxlPgotICAgICAgIDxocj4K
LSAgICAgICBBbnk6IDxpbnB1dCBuZy1tb2RlbD0ic2VhcmNoLiQiPiA8YnI+Ci0gICAgICAgTmFt
ZSBvbmx5IDxpbnB1dCBuZy1tb2RlbD0ic2VhcmNoLm5hbWUiPjxicj4KLSAgICAgICBQaG9uZSBv
bmx5IDxpbnB1dCBuZy1tb2RlbD0ic2VhcmNoLnBob25lIj48YnI+Ci0gICAgICAgPHRhYmxlIGlk
PSJzZWFyY2hPYmpSZXN1bHRzIj4KLSAgICAgICAgIDx0cj48dGg+TmFtZTwvdGg+PHRoPlBob25l
PC90aD48L3RyPgotICAgICAgICAgPHRyIG5nLXJlcGVhdD0iZnJpZW5kIGluIGZyaWVuZHMgfCBm
aWx0ZXI6c2VhcmNoIj4KLSAgICAgICAgICAgPHRkPnt7ZnJpZW5kLm5hbWV9fTwvdGQ+Ci0gICAg
ICAgICAgIDx0ZD57e2ZyaWVuZC5waG9uZX19PC90ZD4KLSAgICAgICAgIDwvdHI+Ci0gICAgICAg
PC90YWJsZT4KLSAgICAgPC9kb2M6c291cmNlPgotICAgICA8ZG9jOnNjZW5hcmlvPgotICAgICAg
IGl0KCdzaG91bGQgc2VhcmNoIGFjcm9zcyBhbGwgZmllbGRzIHdoZW4gZmlsdGVyaW5nIHdpdGgg
YSBzdHJpbmcnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgIGlucHV0KCdzZWFyY2hUZXh0JykuZW50
ZXIoJ20nKTsKLSAgICAgICAgIGV4cGVjdChyZXBlYXRlcignI3NlYXJjaFRleHRSZXN1bHRzIHRy
JywgJ2ZyaWVuZCBpbiBmcmllbmRzJykuY29sdW1uKCdmcmllbmQubmFtZScpKS4KLSAgICAgICAg
ICAgdG9FcXVhbChbJ01hcnknLCAnTWlrZScsICdBZGFtJ10pOwotCi0gICAgICAgICBpbnB1dCgn
c2VhcmNoVGV4dCcpLmVudGVyKCc3NicpOwotICAgICAgICAgZXhwZWN0KHJlcGVhdGVyKCcjc2Vh
cmNoVGV4dFJlc3VsdHMgdHInLCAnZnJpZW5kIGluIGZyaWVuZHMnKS5jb2x1bW4oJ2ZyaWVuZC5u
YW1lJykpLgotICAgICAgICAgICB0b0VxdWFsKFsnSm9obicsICdKdWxpZSddKTsKLSAgICAgICB9
KTsKLQotICAgICAgIGl0KCdzaG91bGQgc2VhcmNoIGluIHNwZWNpZmljIGZpZWxkcyB3aGVuIGZp
bHRlcmluZyB3aXRoIGEgcHJlZGljYXRlIG9iamVjdCcsIGZ1bmN0aW9uKCkgewotICAgICAgICAg
aW5wdXQoJ3NlYXJjaC4kJykuZW50ZXIoJ2knKTsKLSAgICAgICAgIGV4cGVjdChyZXBlYXRlcign
I3NlYXJjaE9ialJlc3VsdHMgdHInLCAnZnJpZW5kIGluIGZyaWVuZHMnKS5jb2x1bW4oJ2ZyaWVu
ZC5uYW1lJykpLgotICAgICAgICAgICB0b0VxdWFsKFsnTWFyeScsICdNaWtlJywgJ0p1bGllJ10p
OwotICAgICAgIH0pOwotICAgICA8L2RvYzpzY2VuYXJpbz4KLSAgIDwvZG9jOmV4YW1wbGU+Ci0g
Ki8KLWZ1bmN0aW9uIGZpbHRlckZpbHRlcigpIHsKLSAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBl
eHByZXNzaW9uKSB7Ci0gICAgaWYgKCFpc0FycmF5KGFycmF5KSkgcmV0dXJuIGFycmF5OwotICAg
IHZhciBwcmVkaWNhdGVzID0gW107Ci0gICAgcHJlZGljYXRlcy5jaGVjayA9IGZ1bmN0aW9uKHZh
bHVlKSB7Ci0gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHByZWRpY2F0ZXMubGVuZ3RoOyBqKysp
IHsKLSAgICAgICAgaWYoIXByZWRpY2F0ZXNbal0odmFsdWUpKSB7Ci0gICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Owot
ICAgIHZhciBzZWFyY2ggPSBmdW5jdGlvbihvYmosIHRleHQpewotICAgICAgaWYgKHRleHQuY2hh
ckF0KDApID09PSAnIScpIHsKLSAgICAgICAgcmV0dXJuICFzZWFyY2gob2JqLCB0ZXh0LnN1YnN0
cigxKSk7Ci0gICAgICB9Ci0gICAgICBzd2l0Y2ggKHR5cGVvZiBvYmopIHsKLSAgICAgICAgY2Fz
ZSAiYm9vbGVhbiI6Ci0gICAgICAgIGNhc2UgIm51bWJlciI6Ci0gICAgICAgIGNhc2UgInN0cmlu
ZyI6Ci0gICAgICAgICAgcmV0dXJuICgnJyArIG9iaikudG9Mb3dlckNhc2UoKS5pbmRleE9mKHRl
eHQpID4gLTE7Ci0gICAgICAgIGNhc2UgIm9iamVjdCI6Ci0gICAgICAgICAgZm9yICggdmFyIG9i
aktleSBpbiBvYmopIHsKLSAgICAgICAgICAgIGlmIChvYmpLZXkuY2hhckF0KDApICE9PSAnJCcg
JiYgc2VhcmNoKG9ialtvYmpLZXldLCB0ZXh0KSkgewotICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBjYXNlICJhcnJheSI6Ci0gICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgb2Jq
Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoc2VhcmNoKG9ialtpXSwgdGV4dCkpIHsK
LSAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQot
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfTsKLSAgICBzd2l0Y2ggKHR5cGVvZiBleHByZXNzaW9u
KSB7Ci0gICAgICBjYXNlICJib29sZWFuIjoKLSAgICAgIGNhc2UgIm51bWJlciI6Ci0gICAgICBj
YXNlICJzdHJpbmciOgotICAgICAgICBleHByZXNzaW9uID0geyQ6ZXhwcmVzc2lvbn07Ci0gICAg
ICBjYXNlICJvYmplY3QiOgotICAgICAgICBmb3IgKHZhciBrZXkgaW4gZXhwcmVzc2lvbikgewot
ICAgICAgICAgIGlmIChrZXkgPT0gJyQnKSB7Ci0gICAgICAgICAgICAoZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICAgIHZhciB0ZXh0ID0gKCcnK2V4cHJlc3Npb25ba2V5XSkudG9Mb3dlckNhc2Uo
KTsKLSAgICAgICAgICAgICAgaWYgKCF0ZXh0KSByZXR1cm47Ci0gICAgICAgICAgICAgIHByZWRp
Y2F0ZXMucHVzaChmdW5jdGlvbih2YWx1ZSkgewotICAgICAgICAgICAgICAgIHJldHVybiBzZWFy
Y2godmFsdWUsIHRleHQpOwotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pKCk7Ci0g
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIChmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgdmFyIHBhdGggPSBrZXk7Ci0gICAgICAgICAgICAgIHZhciB0ZXh0ID0gKCcnK2V4cHJlc3Np
b25ba2V5XSkudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgICAgICAgaWYgKCF0ZXh0KSByZXR1cm47
Ci0gICAgICAgICAgICAgIHByZWRpY2F0ZXMucHVzaChmdW5jdGlvbih2YWx1ZSkgewotICAgICAg
ICAgICAgICAgIHJldHVybiBzZWFyY2goZ2V0dGVyKHZhbHVlLCBwYXRoKSwgdGV4dCk7Ci0gICAg
ICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSkoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlICdmdW5jdGlvbic6Ci0gICAgICAgIHByZWRpY2F0
ZXMucHVzaChleHByZXNzaW9uKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gYXJyYXk7Ci0gICAgfQotICAgIHZhciBmaWx0ZXJlZCA9IFtdOwotICAgIGZv
ciAoIHZhciBqID0gMDsgaiA8IGFycmF5Lmxlbmd0aDsgaisrKSB7Ci0gICAgICB2YXIgdmFsdWUg
PSBhcnJheVtqXTsKLSAgICAgIGlmIChwcmVkaWNhdGVzLmNoZWNrKHZhbHVlKSkgewotICAgICAg
ICBmaWx0ZXJlZC5wdXNoKHZhbHVlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZpbHRl
cmVkOwotICB9Ci19Ci0KLS8qKgotICogQG5nZG9jIGZpbHRlcgotICogQG5hbWUgbmcuZmlsdGVy
OmN1cnJlbmN5Ci0gKiBAZnVuY3Rpb24KLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIEZvcm1hdHMg
YSBudW1iZXIgYXMgYSBjdXJyZW5jeSAoaWUgJDEsMjM0LjU2KS4gV2hlbiBubyBjdXJyZW5jeSBz
eW1ib2wgaXMgcHJvdmlkZWQsIGRlZmF1bHQKLSAqIHN5bWJvbCBmb3IgY3VycmVudCBsb2NhbGUg
aXMgdXNlZC4KLSAqCi0gKiBAcGFyYW0ge251bWJlcn0gYW1vdW50IElucHV0IHRvIGZpbHRlci4K
LSAqIEBwYXJhbSB7c3RyaW5nPX0gc3ltYm9sIEN1cnJlbmN5IHN5bWJvbCBvciBpZGVudGlmaWVy
IHRvIGJlIGRpc3BsYXllZC4KLSAqIEByZXR1cm5zIHtzdHJpbmd9IEZvcm1hdHRlZCBudW1iZXIu
Ci0gKgotICoKLSAqIEBleGFtcGxlCi0gICA8ZG9jOmV4YW1wbGU+Ci0gICAgIDxkb2M6c291cmNl
PgotICAgICAgIDxzY3JpcHQ+Ci0gICAgICAgICBmdW5jdGlvbiBDdHJsKCRzY29wZSkgewotICAg
ICAgICAgICAkc2NvcGUuYW1vdW50ID0gMTIzNC41NjsKLSAgICAgICAgIH0KLSAgICAgICA8L3Nj
cmlwdD4KLSAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9IkN0cmwiPgotICAgICAgICAgPGlucHV0
IHR5cGU9Im51bWJlciIgbmctbW9kZWw9ImFtb3VudCI+IDxicj4KLSAgICAgICAgIGRlZmF1bHQg
Y3VycmVuY3kgc3ltYm9sICgkKToge3thbW91bnQgfCBjdXJyZW5jeX19PGJyPgotICAgICAgICAg
Y3VzdG9tIGN1cnJlbmN5IGlkZW50aWZpZXIgKFVTRCQpOiB7e2Ftb3VudCB8IGN1cnJlbmN5OiJV
U0QkIn19Ci0gICAgICAgPC9kaXY+Ci0gICAgIDwvZG9jOnNvdXJjZT4KLSAgICAgPGRvYzpzY2Vu
YXJpbz4KLSAgICAgICBpdCgnc2hvdWxkIGluaXQgd2l0aCAxMjM0LjU2JywgZnVuY3Rpb24oKSB7
Ci0gICAgICAgICBleHBlY3QoYmluZGluZygnYW1vdW50IHwgY3VycmVuY3knKSkudG9CZSgnJDEs
MjM0LjU2Jyk7Ci0gICAgICAgICBleHBlY3QoYmluZGluZygnYW1vdW50IHwgY3VycmVuY3k6IlVT
RCQiJykpLnRvQmUoJ1VTRCQxLDIzNC41NicpOwotICAgICAgIH0pOwotICAgICAgIGl0KCdzaG91
bGQgdXBkYXRlJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICBpbnB1dCgnYW1vdW50JykuZW50ZXIo
Jy0xMjM0Jyk7Ci0gICAgICAgICBleHBlY3QoYmluZGluZygnYW1vdW50IHwgY3VycmVuY3knKSku
dG9CZSgnKCQxLDIzNC4wMCknKTsKLSAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdhbW91bnQgfCBj
dXJyZW5jeToiVVNEJCInKSkudG9CZSgnKFVTRCQxLDIzNC4wMCknKTsKLSAgICAgICB9KTsKLSAg
ICAgPC9kb2M6c2NlbmFyaW8+Ci0gICA8L2RvYzpleGFtcGxlPgotICovCi1jdXJyZW5jeUZpbHRl
ci4kaW5qZWN0ID0gWyckbG9jYWxlJ107Ci1mdW5jdGlvbiBjdXJyZW5jeUZpbHRlcigkbG9jYWxl
KSB7Ci0gIHZhciBmb3JtYXRzID0gJGxvY2FsZS5OVU1CRVJfRk9STUFUUzsKLSAgcmV0dXJuIGZ1
bmN0aW9uKGFtb3VudCwgY3VycmVuY3lTeW1ib2wpewotICAgIGlmIChpc1VuZGVmaW5lZChjdXJy
ZW5jeVN5bWJvbCkpIGN1cnJlbmN5U3ltYm9sID0gZm9ybWF0cy5DVVJSRU5DWV9TWU07Ci0gICAg
cmV0dXJuIGZvcm1hdE51bWJlcihhbW91bnQsIGZvcm1hdHMuUEFUVEVSTlNbMV0sIGZvcm1hdHMu
R1JPVVBfU0VQLCBmb3JtYXRzLkRFQ0lNQUxfU0VQLCAyKS4KLSAgICAgICAgICAgICAgICByZXBs
YWNlKC9cdTAwQTQvZywgY3VycmVuY3lTeW1ib2wpOwotICB9OwotfQotCi0vKioKLSAqIEBuZ2Rv
YyBmaWx0ZXIKLSAqIEBuYW1lIG5nLmZpbHRlcjpudW1iZXIKLSAqIEBmdW5jdGlvbgotICoKLSAq
IEBkZXNjcmlwdGlvbgotICogRm9ybWF0cyBhIG51bWJlciBhcyB0ZXh0LgotICoKLSAqIElmIHRo
ZSBpbnB1dCBpcyBub3QgYSBudW1iZXIgYW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLgotICoK
LSAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gbnVtYmVyIE51bWJlciB0byBmb3JtYXQuCi0gKiBA
cGFyYW0geyhudW1iZXJ8c3RyaW5nKT19IFtmcmFjdGlvblNpemU9Ml0gTnVtYmVyIG9mIGRlY2lt
YWwgcGxhY2VzIHRvIHJvdW5kIHRoZSBudW1iZXIgdG8uCi0gKiBAcmV0dXJucyB7c3RyaW5nfSBO
dW1iZXIgcm91bmRlZCB0byBkZWNpbWFsUGxhY2VzIGFuZCBwbGFjZXMgYSDigJws4oCdIGFmdGVy
IGVhY2ggdGhpcmQgZGlnaXQuCi0gKgotICogQGV4YW1wbGUKLSAgIDxkb2M6ZXhhbXBsZT4KLSAg
ICAgPGRvYzpzb3VyY2U+Ci0gICAgICAgPHNjcmlwdD4KLSAgICAgICAgIGZ1bmN0aW9uIEN0cmwo
JHNjb3BlKSB7Ci0gICAgICAgICAgICRzY29wZS52YWwgPSAxMjM0LjU2Nzg5OwotICAgICAgICAg
fQotICAgICAgIDwvc2NyaXB0PgotICAgICAgIDxkaXYgbmctY29udHJvbGxlcj0iQ3RybCI+Ci0g
ICAgICAgICBFbnRlciBudW1iZXI6IDxpbnB1dCBuZy1tb2RlbD0ndmFsJz48YnI+Ci0gICAgICAg
ICBEZWZhdWx0IGZvcm1hdHRpbmc6IHt7dmFsIHwgbnVtYmVyfX08YnI+Ci0gICAgICAgICBObyBm
cmFjdGlvbnM6IHt7dmFsIHwgbnVtYmVyOjB9fTxicj4KLSAgICAgICAgIE5lZ2F0aXZlIG51bWJl
cjoge3stdmFsIHwgbnVtYmVyOjR9fQotICAgICAgIDwvZGl2PgotICAgICA8L2RvYzpzb3VyY2U+
Ci0gICAgIDxkb2M6c2NlbmFyaW8+Ci0gICAgICAgaXQoJ3Nob3VsZCBmb3JtYXQgbnVtYmVycycs
IGZ1bmN0aW9uKCkgewotICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ3ZhbCB8IG51bWJlcicpKS50
b0JlKCcxLDIzNC41NjgnKTsKLSAgICAgICAgIGV4cGVjdChiaW5kaW5nKCd2YWwgfCBudW1iZXI6
MCcpKS50b0JlKCcxLDIzNScpOwotICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJy12YWwgfCBudW1i
ZXI6NCcpKS50b0JlKCctMSwyMzQuNTY3OScpOwotICAgICAgIH0pOwotCi0gICAgICAgaXQoJ3No
b3VsZCB1cGRhdGUnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgIGlucHV0KCd2YWwnKS5lbnRlcign
MzM3NC4zMzMnKTsKLSAgICAgICAgIGV4cGVjdChiaW5kaW5nKCd2YWwgfCBudW1iZXInKSkudG9C
ZSgnMywzNzQuMzMzJyk7Ci0gICAgICAgICBleHBlY3QoYmluZGluZygndmFsIHwgbnVtYmVyOjAn
KSkudG9CZSgnMywzNzQnKTsKLSAgICAgICAgIGV4cGVjdChiaW5kaW5nKCctdmFsIHwgbnVtYmVy
OjQnKSkudG9CZSgnLTMsMzc0LjMzMzAnKTsKLSAgICAgICB9KTsKLSAgICAgPC9kb2M6c2NlbmFy
aW8+Ci0gICA8L2RvYzpleGFtcGxlPgotICovCi0KLQotbnVtYmVyRmlsdGVyLiRpbmplY3QgPSBb
JyRsb2NhbGUnXTsKLWZ1bmN0aW9uIG51bWJlckZpbHRlcigkbG9jYWxlKSB7Ci0gIHZhciBmb3Jt
YXRzID0gJGxvY2FsZS5OVU1CRVJfRk9STUFUUzsKLSAgcmV0dXJuIGZ1bmN0aW9uKG51bWJlciwg
ZnJhY3Rpb25TaXplKSB7Ci0gICAgcmV0dXJuIGZvcm1hdE51bWJlcihudW1iZXIsIGZvcm1hdHMu
UEFUVEVSTlNbMF0sIGZvcm1hdHMuR1JPVVBfU0VQLCBmb3JtYXRzLkRFQ0lNQUxfU0VQLAotICAg
ICAgZnJhY3Rpb25TaXplKTsKLSAgfTsKLX0KLQotdmFyIERFQ0lNQUxfU0VQID0gJy4nOwotZnVu
Y3Rpb24gZm9ybWF0TnVtYmVyKG51bWJlciwgcGF0dGVybiwgZ3JvdXBTZXAsIGRlY2ltYWxTZXAs
IGZyYWN0aW9uU2l6ZSkgewotICBpZiAoaXNOYU4obnVtYmVyKSB8fCAhaXNGaW5pdGUobnVtYmVy
KSkgcmV0dXJuICcnOwotCi0gIHZhciBpc05lZ2F0aXZlID0gbnVtYmVyIDwgMDsKLSAgbnVtYmVy
ID0gTWF0aC5hYnMobnVtYmVyKTsKLSAgdmFyIG51bVN0ciA9IG51bWJlciArICcnLAotICAgICAg
Zm9ybWF0ZWRUZXh0ID0gJycsCi0gICAgICBwYXJ0cyA9IFtdOwotCi0gIHZhciBoYXNFeHBvbmVu
dCA9IGZhbHNlOwotICBpZiAobnVtU3RyLmluZGV4T2YoJ2UnKSAhPT0gLTEpIHsKLSAgICB2YXIg
bWF0Y2ggPSBudW1TdHIubWF0Y2goLyhbXGRcLl0rKWUoLT8pKFxkKykvKTsKLSAgICBpZiAobWF0
Y2ggJiYgbWF0Y2hbMl0gPT0gJy0nICYmIG1hdGNoWzNdID4gZnJhY3Rpb25TaXplICsgMSkgewot
ICAgICAgbnVtU3RyID0gJzAnOwotICAgIH0gZWxzZSB7Ci0gICAgICBmb3JtYXRlZFRleHQgPSBu
dW1TdHI7Ci0gICAgICBoYXNFeHBvbmVudCA9IHRydWU7Ci0gICAgfQotICB9Ci0KLSAgaWYgKCFo
YXNFeHBvbmVudCkgewotICAgIHZhciBmcmFjdGlvbkxlbiA9IChudW1TdHIuc3BsaXQoREVDSU1B
TF9TRVApWzFdIHx8ICcnKS5sZW5ndGg7Ci0KLSAgICAvLyBkZXRlcm1pbmUgZnJhY3Rpb25TaXpl
IGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQKLSAgICBpZiAoaXNVbmRlZmluZWQoZnJhY3Rpb25TaXpl
KSkgewotICAgICAgZnJhY3Rpb25TaXplID0gTWF0aC5taW4oTWF0aC5tYXgocGF0dGVybi5taW5G
cmFjLCBmcmFjdGlvbkxlbiksIHBhdHRlcm4ubWF4RnJhYyk7Ci0gICAgfQotCi0gICAgdmFyIHBv
dyA9IE1hdGgucG93KDEwLCBmcmFjdGlvblNpemUpOwotICAgIG51bWJlciA9IE1hdGgucm91bmQo
bnVtYmVyICogcG93KSAvIHBvdzsKLSAgICB2YXIgZnJhY3Rpb24gPSAoJycgKyBudW1iZXIpLnNw
bGl0KERFQ0lNQUxfU0VQKTsKLSAgICB2YXIgd2hvbGUgPSBmcmFjdGlvblswXTsKLSAgICBmcmFj
dGlvbiA9IGZyYWN0aW9uWzFdIHx8ICcnOwotCi0gICAgdmFyIHBvcyA9IDAsCi0gICAgICAgIGxn
cm91cCA9IHBhdHRlcm4ubGdTaXplLAotICAgICAgICBncm91cCA9IHBhdHRlcm4uZ1NpemU7Ci0K
LSAgICBpZiAod2hvbGUubGVuZ3RoID49IChsZ3JvdXAgKyBncm91cCkpIHsKLSAgICAgIHBvcyA9
IHdob2xlLmxlbmd0aCAtIGxncm91cDsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9zOyBp
KyspIHsKLSAgICAgICAgaWYgKChwb3MgLSBpKSVncm91cCA9PT0gMCAmJiBpICE9PSAwKSB7Ci0g
ICAgICAgICAgZm9ybWF0ZWRUZXh0ICs9IGdyb3VwU2VwOwotICAgICAgICB9Ci0gICAgICAgIGZv
cm1hdGVkVGV4dCArPSB3aG9sZS5jaGFyQXQoaSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZm9y
IChpID0gcG9zOyBpIDwgd2hvbGUubGVuZ3RoOyBpKyspIHsKLSAgICAgIGlmICgod2hvbGUubGVu
Z3RoIC0gaSklbGdyb3VwID09PSAwICYmIGkgIT09IDApIHsKLSAgICAgICAgZm9ybWF0ZWRUZXh0
ICs9IGdyb3VwU2VwOwotICAgICAgfQotICAgICAgZm9ybWF0ZWRUZXh0ICs9IHdob2xlLmNoYXJB
dChpKTsKLSAgICB9Ci0KLSAgICAvLyBmb3JtYXQgZnJhY3Rpb24gcGFydC4KLSAgICB3aGlsZShm
cmFjdGlvbi5sZW5ndGggPCBmcmFjdGlvblNpemUpIHsKLSAgICAgIGZyYWN0aW9uICs9ICcwJzsK
LSAgICB9Ci0KLSAgICBpZiAoZnJhY3Rpb25TaXplICYmIGZyYWN0aW9uU2l6ZSAhPT0gIjAiKSBm
b3JtYXRlZFRleHQgKz0gZGVjaW1hbFNlcCArIGZyYWN0aW9uLnN1YnN0cigwLCBmcmFjdGlvblNp
emUpOwotICB9Ci0KLSAgcGFydHMucHVzaChpc05lZ2F0aXZlID8gcGF0dGVybi5uZWdQcmUgOiBw
YXR0ZXJuLnBvc1ByZSk7Ci0gIHBhcnRzLnB1c2goZm9ybWF0ZWRUZXh0KTsKLSAgcGFydHMucHVz
aChpc05lZ2F0aXZlID8gcGF0dGVybi5uZWdTdWYgOiBwYXR0ZXJuLnBvc1N1Zik7Ci0gIHJldHVy
biBwYXJ0cy5qb2luKCcnKTsKLX0KLQotZnVuY3Rpb24gcGFkTnVtYmVyKG51bSwgZGlnaXRzLCB0
cmltKSB7Ci0gIHZhciBuZWcgPSAnJzsKLSAgaWYgKG51bSA8IDApIHsKLSAgICBuZWcgPSAgJy0n
OwotICAgIG51bSA9IC1udW07Ci0gIH0KLSAgbnVtID0gJycgKyBudW07Ci0gIHdoaWxlKG51bS5s
ZW5ndGggPCBkaWdpdHMpIG51bSA9ICcwJyArIG51bTsKLSAgaWYgKHRyaW0pCi0gICAgbnVtID0g
bnVtLnN1YnN0cihudW0ubGVuZ3RoIC0gZGlnaXRzKTsKLSAgcmV0dXJuIG5lZyArIG51bTsKLX0K
LQotCi1mdW5jdGlvbiBkYXRlR2V0dGVyKG5hbWUsIHNpemUsIG9mZnNldCwgdHJpbSkgewotICBv
ZmZzZXQgPSBvZmZzZXQgfHwgMDsKLSAgcmV0dXJuIGZ1bmN0aW9uKGRhdGUpIHsKLSAgICB2YXIg
dmFsdWUgPSBkYXRlWydnZXQnICsgbmFtZV0oKTsKLSAgICBpZiAob2Zmc2V0ID4gMCB8fCB2YWx1
ZSA+IC1vZmZzZXQpCi0gICAgICB2YWx1ZSArPSBvZmZzZXQ7Ci0gICAgaWYgKHZhbHVlID09PSAw
ICYmIG9mZnNldCA9PSAtMTIgKSB2YWx1ZSA9IDEyOwotICAgIHJldHVybiBwYWROdW1iZXIodmFs
dWUsIHNpemUsIHRyaW0pOwotICB9OwotfQotCi1mdW5jdGlvbiBkYXRlU3RyR2V0dGVyKG5hbWUs
IHNob3J0Rm9ybSkgewotICByZXR1cm4gZnVuY3Rpb24oZGF0ZSwgZm9ybWF0cykgewotICAgIHZh
ciB2YWx1ZSA9IGRhdGVbJ2dldCcgKyBuYW1lXSgpOwotICAgIHZhciBnZXQgPSB1cHBlcmNhc2Uo
c2hvcnRGb3JtID8gKCdTSE9SVCcgKyBuYW1lKSA6IG5hbWUpOwotCi0gICAgcmV0dXJuIGZvcm1h
dHNbZ2V0XVt2YWx1ZV07Ci0gIH07Ci19Ci0KLWZ1bmN0aW9uIHRpbWVab25lR2V0dGVyKGRhdGUp
IHsKLSAgdmFyIHpvbmUgPSAtMSAqIGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTsKLSAgdmFyIHBh
ZGRlZFpvbmUgPSAoem9uZSA+PSAwKSA/ICIrIiA6ICIiOwotCi0gIHBhZGRlZFpvbmUgKz0gcGFk
TnVtYmVyKE1hdGhbem9uZSA+IDAgPyAnZmxvb3InIDogJ2NlaWwnXSh6b25lIC8gNjApLCAyKSAr
Ci0gICAgICAgICAgICAgICAgcGFkTnVtYmVyKE1hdGguYWJzKHpvbmUgJSA2MCksIDIpOwotCi0g
IHJldHVybiBwYWRkZWRab25lOwotfQotCi1mdW5jdGlvbiBhbXBtR2V0dGVyKGRhdGUsIGZvcm1h
dHMpIHsKLSAgcmV0dXJuIGRhdGUuZ2V0SG91cnMoKSA8IDEyID8gZm9ybWF0cy5BTVBNU1swXSA6
IGZvcm1hdHMuQU1QTVNbMV07Ci19Ci0KLXZhciBEQVRFX0ZPUk1BVFMgPSB7Ci0gIHl5eXk6IGRh
dGVHZXR0ZXIoJ0Z1bGxZZWFyJywgNCksCi0gICAgeXk6IGRhdGVHZXR0ZXIoJ0Z1bGxZZWFyJywg
MiwgMCwgdHJ1ZSksCi0gICAgIHk6IGRhdGVHZXR0ZXIoJ0Z1bGxZZWFyJywgMSksCi0gIE1NTU06
IGRhdGVTdHJHZXR0ZXIoJ01vbnRoJyksCi0gICBNTU06IGRhdGVTdHJHZXR0ZXIoJ01vbnRoJywg
dHJ1ZSksCi0gICAgTU06IGRhdGVHZXR0ZXIoJ01vbnRoJywgMiwgMSksCi0gICAgIE06IGRhdGVH
ZXR0ZXIoJ01vbnRoJywgMSwgMSksCi0gICAgZGQ6IGRhdGVHZXR0ZXIoJ0RhdGUnLCAyKSwKLSAg
ICAgZDogZGF0ZUdldHRlcignRGF0ZScsIDEpLAotICAgIEhIOiBkYXRlR2V0dGVyKCdIb3Vycycs
IDIpLAotICAgICBIOiBkYXRlR2V0dGVyKCdIb3VycycsIDEpLAotICAgIGhoOiBkYXRlR2V0dGVy
KCdIb3VycycsIDIsIC0xMiksCi0gICAgIGg6IGRhdGVHZXR0ZXIoJ0hvdXJzJywgMSwgLTEyKSwK
LSAgICBtbTogZGF0ZUdldHRlcignTWludXRlcycsIDIpLAotICAgICBtOiBkYXRlR2V0dGVyKCdN
aW51dGVzJywgMSksCi0gICAgc3M6IGRhdGVHZXR0ZXIoJ1NlY29uZHMnLCAyKSwKLSAgICAgczog
ZGF0ZUdldHRlcignU2Vjb25kcycsIDEpLAotICBFRUVFOiBkYXRlU3RyR2V0dGVyKCdEYXknKSwK
LSAgIEVFRTogZGF0ZVN0ckdldHRlcignRGF5JywgdHJ1ZSksCi0gICAgIGE6IGFtcG1HZXR0ZXIs
Ci0gICAgIFo6IHRpbWVab25lR2V0dGVyCi19OwotCi12YXIgREFURV9GT1JNQVRTX1NQTElUID0g
LygoPzpbXnlNZEhobXNhWkUnXSspfCg/OicoPzpbXiddfCcnKSonKXwoPzpFK3x5K3xNK3xkK3xI
K3xoK3xtK3xzK3xhfFopKSguKikvLAotICAgIE5VTUJFUl9TVFJJTkcgPSAvXlxkKyQvOwotCi0v
KioKLSAqIEBuZ2RvYyBmaWx0ZXIKLSAqIEBuYW1lIG5nLmZpbHRlcjpkYXRlCi0gKiBAZnVuY3Rp
b24KLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqICAgRm9ybWF0cyBgZGF0ZWAgdG8gYSBzdHJpbmcg
YmFzZWQgb24gdGhlIHJlcXVlc3RlZCBgZm9ybWF0YC4KLSAqCi0gKiAgIGBmb3JtYXRgIHN0cmlu
ZyBjYW4gYmUgY29tcG9zZWQgb2YgdGhlIGZvbGxvd2luZyBlbGVtZW50czoKLSAqCi0gKiAgICog
YCd5eXl5J2A6IDQgZGlnaXQgcmVwcmVzZW50YXRpb24gb2YgeWVhciAoZS5nLiBBRCAxID0+IDAw
MDEsIEFEIDIwMTAgPT4gMjAxMCkKLSAqICAgKiBgJ3l5J2A6IDIgZGlnaXQgcmVwcmVzZW50YXRp
b24gb2YgeWVhciwgcGFkZGVkICgwMC05OSkuIChlLmcuIEFEIDIwMDEgPT4gMDEsIEFEIDIwMTAg
PT4gMTApCi0gKiAgICogYCd5J2A6IDEgZGlnaXQgcmVwcmVzZW50YXRpb24gb2YgeWVhciwgZS5n
LiAoQUQgMSA9PiAxLCBBRCAxOTkgPT4gMTk5KQotICogICAqIGAnTU1NTSdgOiBNb250aCBpbiB5
ZWFyIChKYW51YXJ5LURlY2VtYmVyKQotICogICAqIGAnTU1NJ2A6IE1vbnRoIGluIHllYXIgKEph
bi1EZWMpCi0gKiAgICogYCdNTSdgOiBNb250aCBpbiB5ZWFyLCBwYWRkZWQgKDAxLTEyKQotICog
ICAqIGAnTSdgOiBNb250aCBpbiB5ZWFyICgxLTEyKQotICogICAqIGAnZGQnYDogRGF5IGluIG1v
bnRoLCBwYWRkZWQgKDAxLTMxKQotICogICAqIGAnZCdgOiBEYXkgaW4gbW9udGggKDEtMzEpCi0g
KiAgICogYCdFRUVFJ2A6IERheSBpbiBXZWVrLChTdW5kYXktU2F0dXJkYXkpCi0gKiAgICogYCdF
RUUnYDogRGF5IGluIFdlZWssIChTdW4tU2F0KQotICogICAqIGAnSEgnYDogSG91ciBpbiBkYXks
IHBhZGRlZCAoMDAtMjMpCi0gKiAgICogYCdIJ2A6IEhvdXIgaW4gZGF5ICgwLTIzKQotICogICAq
IGAnaGgnYDogSG91ciBpbiBhbS9wbSwgcGFkZGVkICgwMS0xMikKLSAqICAgKiBgJ2gnYDogSG91
ciBpbiBhbS9wbSwgKDEtMTIpCi0gKiAgICogYCdtbSdgOiBNaW51dGUgaW4gaG91ciwgcGFkZGVk
ICgwMC01OSkKLSAqICAgKiBgJ20nYDogTWludXRlIGluIGhvdXIgKDAtNTkpCi0gKiAgICogYCdz
cydgOiBTZWNvbmQgaW4gbWludXRlLCBwYWRkZWQgKDAwLTU5KQotICogICAqIGAncydgOiBTZWNv
bmQgaW4gbWludXRlICgwLTU5KQotICogICAqIGAnYSdgOiBhbS9wbSBtYXJrZXIKLSAqICAgKiBg
J1onYDogNCBkaWdpdCAoK3NpZ24pIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0aW1lem9uZSBvZmZz
ZXQgKC0xMjAwLSsxMjAwKQotICoKLSAqICAgYGZvcm1hdGAgc3RyaW5nIGNhbiBhbHNvIGJlIG9u
ZSBvZiB0aGUgZm9sbG93aW5nIHByZWRlZmluZWQKLSAqICAge0BsaW5rIGd1aWRlL2kxOG4gbG9j
YWxpemFibGUgZm9ybWF0c306Ci0gKgotICogICAqIGAnbWVkaXVtJ2A6IGVxdWl2YWxlbnQgdG8g
YCdNTU0gZCwgeSBoOm1tOnNzIGEnYCBmb3IgZW5fVVMgbG9jYWxlCi0gKiAgICAgKGUuZy4gU2Vw
IDMsIDIwMTAgMTI6MDU6MDggcG0pCi0gKiAgICogYCdzaG9ydCdgOiBlcXVpdmFsZW50IHRvIGAn
TS9kL3l5IGg6bW0gYSdgIGZvciBlbl9VUyAgbG9jYWxlIChlLmcuIDkvMy8xMCAxMjowNSBwbSkK
LSAqICAgKiBgJ2Z1bGxEYXRlJ2A6IGVxdWl2YWxlbnQgdG8gYCdFRUVFLCBNTU1NIGQseSdgIGZv
ciBlbl9VUyAgbG9jYWxlCi0gKiAgICAgKGUuZy4gRnJpZGF5LCBTZXB0ZW1iZXIgMywgMjAxMCkK
LSAqICAgKiBgJ2xvbmdEYXRlJ2A6IGVxdWl2YWxlbnQgdG8gYCdNTU1NIGQsIHknYCBmb3IgZW5f
VVMgIGxvY2FsZSAoZS5nLiBTZXB0ZW1iZXIgMywgMjAxMAotICogICAqIGAnbWVkaXVtRGF0ZSdg
OiBlcXVpdmFsZW50IHRvIGAnTU1NIGQsIHknYCBmb3IgZW5fVVMgIGxvY2FsZSAoZS5nLiBTZXAg
MywgMjAxMCkKLSAqICAgKiBgJ3Nob3J0RGF0ZSdgOiBlcXVpdmFsZW50IHRvIGAnTS9kL3l5J2Ag
Zm9yIGVuX1VTIGxvY2FsZSAoZS5nLiA5LzMvMTApCi0gKiAgICogYCdtZWRpdW1UaW1lJ2A6IGVx
dWl2YWxlbnQgdG8gYCdoOm1tOnNzIGEnYCBmb3IgZW5fVVMgbG9jYWxlIChlLmcuIDEyOjA1OjA4
IHBtKQotICogICAqIGAnc2hvcnRUaW1lJ2A6IGVxdWl2YWxlbnQgdG8gYCdoOm1tIGEnYCBmb3Ig
ZW5fVVMgbG9jYWxlIChlLmcuIDEyOjA1IHBtKQotICoKLSAqICAgYGZvcm1hdGAgc3RyaW5nIGNh
biBjb250YWluIGxpdGVyYWwgdmFsdWVzLiBUaGVzZSBuZWVkIHRvIGJlIHF1b3RlZCB3aXRoIHNp
bmdsZSBxdW90ZXMgKGUuZy4KLSAqICAgYCJoICdpbiB0aGUgbW9ybmluZyciYCkuIEluIG9yZGVy
IHRvIG91dHB1dCBzaW5nbGUgcXVvdGUsIHVzZSB0d28gc2luZ2xlIHF1b3RlcyBpbiBhIHNlcXVl
bmNlCi0gKiAgIChlLmcuIGAiaCBvJydjbG9jayJgKS4KLSAqCi0gKiBAcGFyYW0geyhEYXRlfG51
bWJlcnxzdHJpbmcpfSBkYXRlIERhdGUgdG8gZm9ybWF0IGVpdGhlciBhcyBEYXRlIG9iamVjdCwg
bWlsbGlzZWNvbmRzIChzdHJpbmcgb3IKLSAqICAgIG51bWJlcikgb3IgdmFyaW91cyBJU08gODYw
MSBkYXRldGltZSBzdHJpbmcgZm9ybWF0cyAoZS5nLiB5eXl5LU1NLWRkVEhIOm1tOnNzLlNTU1og
YW5kIGl0cwotICogICAgc2hvcnRlciB2ZXJzaW9ucyBsaWtlIHl5eXktTU0tZGRUSEg6bW1aLCB5
eXl5LU1NLWRkIG9yIHl5eXlNTWRkVEhIbW1zc1opLiBJZiBubyB0aW1lem9uZSBpcwotICogICAg
c3BlY2lmaWVkIGluIHRoZSBzdHJpbmcgaW5wdXQsIHRoZSB0aW1lIGlzIGNvbnNpZGVyZWQgdG8g
YmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLgotICogQHBhcmFtIHtzdHJpbmc9fSBmb3JtYXQgRm9y
bWF0dGluZyBydWxlcyAoc2VlIERlc2NyaXB0aW9uKS4gSWYgbm90IHNwZWNpZmllZCwKLSAqICAg
IGBtZWRpdW1EYXRlYCBpcyB1c2VkLgotICogQHJldHVybnMge3N0cmluZ30gRm9ybWF0dGVkIHN0
cmluZyBvciB0aGUgaW5wdXQgaWYgaW5wdXQgaXMgbm90IHJlY29nbml6ZWQgYXMgZGF0ZS9taWxs
aXMuCi0gKgotICogQGV4YW1wbGUKLSAgIDxkb2M6ZXhhbXBsZT4KLSAgICAgPGRvYzpzb3VyY2U+
Ci0gICAgICAgPHNwYW4gbmctbm9uLWJpbmRhYmxlPnt7MTI4ODMyMzYyMzAwNiB8IGRhdGU6J21l
ZGl1bSd9fTwvc3Bhbj46Ci0gICAgICAgICAgIHt7MTI4ODMyMzYyMzAwNiB8IGRhdGU6J21lZGl1
bSd9fTxicj4KLSAgICAgICA8c3BhbiBuZy1ub24tYmluZGFibGU+e3sxMjg4MzIzNjIzMDA2IHwg
ZGF0ZToneXl5eS1NTS1kZCBISDptbTpzcyBaJ319PC9zcGFuPjoKLSAgICAgICAgICB7ezEyODgz
MjM2MjMwMDYgfCBkYXRlOid5eXl5LU1NLWRkIEhIOm1tOnNzIFonfX08YnI+Ci0gICAgICAgPHNw
YW4gbmctbm9uLWJpbmRhYmxlPnt7MTI4ODMyMzYyMzAwNiB8IGRhdGU6J01NL2RkL3l5eXkgQCBo
Om1tYSd9fTwvc3Bhbj46Ci0gICAgICAgICAge3snMTI4ODMyMzYyMzAwNicgfCBkYXRlOidNTS9k
ZC95eXl5IEAgaDptbWEnfX08YnI+Ci0gICAgIDwvZG9jOnNvdXJjZT4KLSAgICAgPGRvYzpzY2Vu
YXJpbz4KLSAgICAgICBpdCgnc2hvdWxkIGZvcm1hdCBkYXRlJywgZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICBleHBlY3QoYmluZGluZygiMTI4ODMyMzYyMzAwNiB8IGRhdGU6J21lZGl1bSciKSkuCi0g
ICAgICAgICAgICB0b01hdGNoKC9PY3QgMlxkLCAyMDEwIFxkezEsMn06XGR7Mn06XGR7Mn0gKEFN
fFBNKS8pOwotICAgICAgICAgZXhwZWN0KGJpbmRpbmcoIjEyODgzMjM2MjMwMDYgfCBkYXRlOid5
eXl5LU1NLWRkIEhIOm1tOnNzIFonIikpLgotICAgICAgICAgICAgdG9NYXRjaCgvMjAxMFwtMTBc
LTJcZCBcZHsyfTpcZHsyfTpcZHsyfSAoXC18XCspP1xkezR9Lyk7Ci0gICAgICAgICBleHBlY3Qo
YmluZGluZygiJzEyODgzMjM2MjMwMDYnIHwgZGF0ZTonTU0vZGQveXl5eSBAIGg6bW1hJyIpKS4K
LSAgICAgICAgICAgIHRvTWF0Y2goLzEwXC8yXGRcLzIwMTAgQCBcZHsxLDJ9OlxkezJ9KEFNfFBN
KS8pOwotICAgICAgIH0pOwotICAgICA8L2RvYzpzY2VuYXJpbz4KLSAgIDwvZG9jOmV4YW1wbGU+
Ci0gKi8KLWRhdGVGaWx0ZXIuJGluamVjdCA9IFsnJGxvY2FsZSddOwotZnVuY3Rpb24gZGF0ZUZp
bHRlcigkbG9jYWxlKSB7Ci0KLQotICB2YXIgUl9JU084NjAxX1NUUiA9IC9eKFxkezR9KS0/KFxk
XGQpLT8oXGRcZCkoPzpUKFxkXGQpKD86Oj8oXGRcZCkoPzo6PyhcZFxkKSg/OlwuKFxkKykpPyk/
KT8oWnwoWystXSkoXGRcZCk6PyhcZFxkKSk/KT8kLzsKLSAgZnVuY3Rpb24ganNvblN0cmluZ1Rv
RGF0ZShzdHJpbmcpewotICAgIHZhciBtYXRjaDsKLSAgICBpZiAobWF0Y2ggPSBzdHJpbmcubWF0
Y2goUl9JU084NjAxX1NUUikpIHsKLSAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoMCksCi0gICAg
ICAgICAgdHpIb3VyID0gMCwKLSAgICAgICAgICB0ek1pbiAgPSAwOwotICAgICAgaWYgKG1hdGNo
WzldKSB7Ci0gICAgICAgIHR6SG91ciA9IGludChtYXRjaFs5XSArIG1hdGNoWzEwXSk7Ci0gICAg
ICAgIHR6TWluID0gaW50KG1hdGNoWzldICsgbWF0Y2hbMTFdKTsKLSAgICAgIH0KLSAgICAgIGRh
dGUuc2V0VVRDRnVsbFllYXIoaW50KG1hdGNoWzFdKSwgaW50KG1hdGNoWzJdKSAtIDEsIGludCht
YXRjaFszXSkpOwotICAgICAgZGF0ZS5zZXRVVENIb3VycyhpbnQobWF0Y2hbNF18fDApIC0gdHpI
b3VyLCBpbnQobWF0Y2hbNV18fDApIC0gdHpNaW4sIGludChtYXRjaFs2XXx8MCksIGludChtYXRj
aFs3XXx8MCkpOwotICAgICAgcmV0dXJuIGRhdGU7Ci0gICAgfQotICAgIHJldHVybiBzdHJpbmc7
Ci0gIH0KLQotCi0gIHJldHVybiBmdW5jdGlvbihkYXRlLCBmb3JtYXQpIHsKLSAgICB2YXIgdGV4
dCA9ICcnLAotICAgICAgICBwYXJ0cyA9IFtdLAotICAgICAgICBmbiwgbWF0Y2g7Ci0KLSAgICBm
b3JtYXQgPSBmb3JtYXQgfHwgJ21lZGl1bURhdGUnOwotICAgIGZvcm1hdCA9ICRsb2NhbGUuREFU
RVRJTUVfRk9STUFUU1tmb3JtYXRdIHx8IGZvcm1hdDsKLSAgICBpZiAoaXNTdHJpbmcoZGF0ZSkp
IHsKLSAgICAgIGlmIChOVU1CRVJfU1RSSU5HLnRlc3QoZGF0ZSkpIHsKLSAgICAgICAgZGF0ZSA9
IGludChkYXRlKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGRhdGUgPSBqc29uU3RyaW5nVG9E
YXRlKGRhdGUpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChpc051bWJlcihkYXRlKSkgewot
ICAgICAgZGF0ZSA9IG5ldyBEYXRlKGRhdGUpOwotICAgIH0KLQotICAgIGlmICghaXNEYXRlKGRh
dGUpKSB7Ci0gICAgICByZXR1cm4gZGF0ZTsKLSAgICB9Ci0KLSAgICB3aGlsZShmb3JtYXQpIHsK
LSAgICAgIG1hdGNoID0gREFURV9GT1JNQVRTX1NQTElULmV4ZWMoZm9ybWF0KTsKLSAgICAgIGlm
IChtYXRjaCkgewotICAgICAgICBwYXJ0cyA9IGNvbmNhdChwYXJ0cywgbWF0Y2gsIDEpOwotICAg
ICAgICBmb3JtYXQgPSBwYXJ0cy5wb3AoKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHBhcnRz
LnB1c2goZm9ybWF0KTsKLSAgICAgICAgZm9ybWF0ID0gbnVsbDsKLSAgICAgIH0KLSAgICB9Ci0K
LSAgICBmb3JFYWNoKHBhcnRzLCBmdW5jdGlvbih2YWx1ZSl7Ci0gICAgICBmbiA9IERBVEVfRk9S
TUFUU1t2YWx1ZV07Ci0gICAgICB0ZXh0ICs9IGZuID8gZm4oZGF0ZSwgJGxvY2FsZS5EQVRFVElN
RV9GT1JNQVRTKQotICAgICAgICAgICAgICAgICA6IHZhbHVlLnJlcGxhY2UoLyheJ3wnJCkvZywg
JycpLnJlcGxhY2UoLycnL2csICInIik7Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gdGV4dDsKLSAg
fTsKLX0KLQotCi0vKioKLSAqIEBuZ2RvYyBmaWx0ZXIKLSAqIEBuYW1lIG5nLmZpbHRlcjpqc29u
Ci0gKiBAZnVuY3Rpb24KLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqICAgQWxsb3dzIHlvdSB0byBj
b252ZXJ0IGEgSmF2YVNjcmlwdCBvYmplY3QgaW50byBKU09OIHN0cmluZy4KLSAqCi0gKiAgIFRo
aXMgZmlsdGVyIGlzIG1vc3RseSB1c2VmdWwgZm9yIGRlYnVnZ2luZy4gV2hlbiB1c2luZyB0aGUg
ZG91YmxlIGN1cmx5IHt7dmFsdWV9fSBub3RhdGlvbgotICogICB0aGUgYmluZGluZyBpcyBhdXRv
bWF0aWNhbGx5IGNvbnZlcnRlZCB0byBKU09OLgotICoKLSAqIEBwYXJhbSB7Kn0gb2JqZWN0IEFu
eSBKYXZhU2NyaXB0IG9iamVjdCAoaW5jbHVkaW5nIGFycmF5cyBhbmQgcHJpbWl0aXZlIHR5cGVz
KSB0byBmaWx0ZXIuCi0gKiBAcmV0dXJucyB7c3RyaW5nfSBKU09OIHN0cmluZy4KLSAqCi0gKgot
ICogQGV4YW1wbGU6Ci0gICA8ZG9jOmV4YW1wbGU+Ci0gICAgIDxkb2M6c291cmNlPgotICAgICAg
IDxwcmU+e3sgeyduYW1lJzondmFsdWUnfSB8IGpzb24gfX08L3ByZT4KLSAgICAgPC9kb2M6c291
cmNlPgotICAgICA8ZG9jOnNjZW5hcmlvPgotICAgICAgIGl0KCdzaG91bGQganNvbmlmeSBmaWx0
ZXJlZCBvYmplY3RzJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICBleHBlY3QoYmluZGluZygieydu
YW1lJzondmFsdWUnfSIpKS50b01hdGNoKC9ce1xuICAibmFtZSI6ID8idmFsdWUiXG59Lyk7Ci0g
ICAgICAgfSk7Ci0gICAgIDwvZG9jOnNjZW5hcmlvPgotICAgPC9kb2M6ZXhhbXBsZT4KLSAqCi0g
Ki8KLWZ1bmN0aW9uIGpzb25GaWx0ZXIoKSB7Ci0gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHsK
LSAgICByZXR1cm4gdG9Kc29uKG9iamVjdCwgdHJ1ZSk7Ci0gIH07Ci19Ci0KLQotLyoqCi0gKiBA
bmdkb2MgZmlsdGVyCi0gKiBAbmFtZSBuZy5maWx0ZXI6bG93ZXJjYXNlCi0gKiBAZnVuY3Rpb24K
LSAqIEBkZXNjcmlwdGlvbgotICogQ29udmVydHMgc3RyaW5nIHRvIGxvd2VyY2FzZS4KLSAqIEBz
ZWUgYW5ndWxhci5sb3dlcmNhc2UKLSAqLwotdmFyIGxvd2VyY2FzZUZpbHRlciA9IHZhbHVlRm4o
bG93ZXJjYXNlKTsKLQotCi0vKioKLSAqIEBuZ2RvYyBmaWx0ZXIKLSAqIEBuYW1lIG5nLmZpbHRl
cjp1cHBlcmNhc2UKLSAqIEBmdW5jdGlvbgotICogQGRlc2NyaXB0aW9uCi0gKiBDb252ZXJ0cyBz
dHJpbmcgdG8gdXBwZXJjYXNlLgotICogQHNlZSBhbmd1bGFyLnVwcGVyY2FzZQotICovCi12YXIg
dXBwZXJjYXNlRmlsdGVyID0gdmFsdWVGbih1cHBlcmNhc2UpOwotCi0vKioKLSAqIEBuZ2RvYyBm
dW5jdGlvbgotICogQG5hbWUgbmcuZmlsdGVyOmxpbWl0VG8KLSAqIEBmdW5jdGlvbgotICoKLSAq
IEBkZXNjcmlwdGlvbgotICogQ3JlYXRlcyBhIG5ldyBhcnJheSBjb250YWluaW5nIG9ubHkgYSBz
cGVjaWZpZWQgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGFuIGFycmF5LiBUaGUgZWxlbWVudHMKLSAq
IGFyZSB0YWtlbiBmcm9tIGVpdGhlciB0aGUgYmVnaW5uaW5nIG9yIHRoZSBlbmQgb2YgdGhlIHNv
dXJjZSBhcnJheSwgYXMgc3BlY2lmaWVkIGJ5IHRoZQotICogdmFsdWUgYW5kIHNpZ24gKHBvc2l0
aXZlIG9yIG5lZ2F0aXZlKSBvZiBgbGltaXRgLgotICoKLSAqIE5vdGU6IFRoaXMgZnVuY3Rpb24g
aXMgdXNlZCB0byBhdWdtZW50IHRoZSBgQXJyYXlgIHR5cGUgaW4gQW5ndWxhciBleHByZXNzaW9u
cy4gU2VlCi0gKiB7QGxpbmsgbmcuJGZpbHRlcn0gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQg
QW5ndWxhciBhcnJheXMuCi0gKgotICogQHBhcmFtIHtBcnJheX0gYXJyYXkgU291cmNlIGFycmF5
IHRvIGJlIGxpbWl0ZWQuCi0gKiBAcGFyYW0ge3N0cmluZ3xOdW1iZXJ9IGxpbWl0IFRoZSBsZW5n
dGggb2YgdGhlIHJldHVybmVkIGFycmF5LiBJZiB0aGUgYGxpbWl0YCBudW1iZXIgaXMKLSAqICAg
ICBwb3NpdGl2ZSwgYGxpbWl0YCBudW1iZXIgb2YgaXRlbXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9m
IHRoZSBzb3VyY2UgYXJyYXkgYXJlIGNvcGllZC4KLSAqICAgICBJZiB0aGUgbnVtYmVyIGlzIG5l
Z2F0aXZlLCBgbGltaXRgIG51bWJlciAgb2YgaXRlbXMgZnJvbSB0aGUgZW5kIG9mIHRoZSBzb3Vy
Y2UgYXJyYXkgYXJlCi0gKiAgICAgY29waWVkLiBUaGUgYGxpbWl0YCB3aWxsIGJlIHRyaW1tZWQg
aWYgaXQgZXhjZWVkcyBgYXJyYXkubGVuZ3RoYAotICogQHJldHVybnMge0FycmF5fSBBIG5ldyBz
dWItYXJyYXkgb2YgbGVuZ3RoIGBsaW1pdGAgb3IgbGVzcyBpZiBpbnB1dCBhcnJheSBoYWQgbGVz
cyB0aGFuIGBsaW1pdGAKLSAqICAgICBlbGVtZW50cy4KLSAqCi0gKiBAZXhhbXBsZQotICAgPGRv
YzpleGFtcGxlPgotICAgICA8ZG9jOnNvdXJjZT4KLSAgICAgICA8c2NyaXB0PgotICAgICAgICAg
ZnVuY3Rpb24gQ3RybCgkc2NvcGUpIHsKLSAgICAgICAgICAgJHNjb3BlLm51bWJlcnMgPSBbMSwy
LDMsNCw1LDYsNyw4LDldOwotICAgICAgICAgICAkc2NvcGUubGltaXQgPSAzOwotICAgICAgICAg
fQotICAgICAgIDwvc2NyaXB0PgotICAgICAgIDxkaXYgbmctY29udHJvbGxlcj0iQ3RybCI+Ci0g
ICAgICAgICBMaW1pdCB7e251bWJlcnN9fSB0bzogPGlucHV0IHR5cGU9ImludGVnZXIiIG5nLW1v
ZGVsPSJsaW1pdCI+Ci0gICAgICAgICA8cD5PdXRwdXQ6IHt7IG51bWJlcnMgfCBsaW1pdFRvOmxp
bWl0IH19PC9wPgotICAgICAgIDwvZGl2PgotICAgICA8L2RvYzpzb3VyY2U+Ci0gICAgIDxkb2M6
c2NlbmFyaW8+Ci0gICAgICAgaXQoJ3Nob3VsZCBsaW1pdCB0aGUgbnVtZXIgYXJyYXkgdG8gZmly
c3QgdGhyZWUgaXRlbXMnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgIGV4cGVjdChlbGVtZW50KCcu
ZG9jLWV4YW1wbGUtbGl2ZSBpbnB1dFtuZy1tb2RlbD1saW1pdF0nKS52YWwoKSkudG9CZSgnMycp
OwotICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ251bWJlcnMgfCBsaW1pdFRvOmxpbWl0JykpLnRv
RXF1YWwoJ1sxLDIsM10nKTsKLSAgICAgICB9KTsKLQotICAgICAgIGl0KCdzaG91bGQgdXBkYXRl
IHRoZSBvdXRwdXQgd2hlbiAtMyBpcyBlbnRlcmVkJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICBp
bnB1dCgnbGltaXQnKS5lbnRlcigtMyk7Ci0gICAgICAgICBleHBlY3QoYmluZGluZygnbnVtYmVy
cyB8IGxpbWl0VG86bGltaXQnKSkudG9FcXVhbCgnWzcsOCw5XScpOwotICAgICAgIH0pOwotCi0g
ICAgICAgaXQoJ3Nob3VsZCBub3QgZXhjZWVkIHRoZSBtYXhpbXVtIHNpemUgb2YgaW5wdXQgYXJy
YXknLCBmdW5jdGlvbigpIHsKLSAgICAgICAgIGlucHV0KCdsaW1pdCcpLmVudGVyKDEwMCk7Ci0g
ICAgICAgICBleHBlY3QoYmluZGluZygnbnVtYmVycyB8IGxpbWl0VG86bGltaXQnKSkudG9FcXVh
bCgnWzEsMiwzLDQsNSw2LDcsOCw5XScpOwotICAgICAgIH0pOwotICAgICA8L2RvYzpzY2VuYXJp
bz4KLSAgIDwvZG9jOmV4YW1wbGU+Ci0gKi8KLWZ1bmN0aW9uIGxpbWl0VG9GaWx0ZXIoKXsKLSAg
cmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBsaW1pdCkgewotICAgIGlmICghKGFycmF5IGluc3RhbmNl
b2YgQXJyYXkpKSByZXR1cm4gYXJyYXk7Ci0gICAgbGltaXQgPSBpbnQobGltaXQpOwotICAgIHZh
ciBvdXQgPSBbXSwKLSAgICAgIGksIG47Ci0KLSAgICAvLyBjaGVjayB0aGF0IGFycmF5IGlzIGl0
ZXJhYmxlCi0gICAgaWYgKCFhcnJheSB8fCAhKGFycmF5IGluc3RhbmNlb2YgQXJyYXkpKQotICAg
ICAgcmV0dXJuIG91dDsKLQotICAgIC8vIGlmIGFicyhsaW1pdCkgZXhjZWVkcyBtYXhpbXVtIGxl
bmd0aCwgdHJpbSBpdAotICAgIGlmIChsaW1pdCA+IGFycmF5Lmxlbmd0aCkKLSAgICAgIGxpbWl0
ID0gYXJyYXkubGVuZ3RoOwotICAgIGVsc2UgaWYgKGxpbWl0IDwgLWFycmF5Lmxlbmd0aCkKLSAg
ICAgIGxpbWl0ID0gLWFycmF5Lmxlbmd0aDsKLQotICAgIGlmIChsaW1pdCA+IDApIHsKLSAgICAg
IGkgPSAwOwotICAgICAgbiA9IGxpbWl0OwotICAgIH0gZWxzZSB7Ci0gICAgICBpID0gYXJyYXku
bGVuZ3RoICsgbGltaXQ7Ci0gICAgICBuID0gYXJyYXkubGVuZ3RoOwotICAgIH0KLQotICAgIGZv
ciAoOyBpPG47IGkrKykgewotICAgICAgb3V0LnB1c2goYXJyYXlbaV0pOwotICAgIH0KLQotICAg
IHJldHVybiBvdXQ7Ci0gIH0KLX0KLQotLyoqCi0gKiBAbmdkb2MgZnVuY3Rpb24KLSAqIEBuYW1l
IG5nLmZpbHRlcjpvcmRlckJ5Ci0gKiBAZnVuY3Rpb24KLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAq
IE9yZGVycyBhIHNwZWNpZmllZCBgYXJyYXlgIGJ5IHRoZSBgZXhwcmVzc2lvbmAgcHJlZGljYXRl
LgotICoKLSAqIE5vdGU6IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBhdWdtZW50IHRoZSBgQXJy
YXlgIHR5cGUgaW4gQW5ndWxhciBleHByZXNzaW9ucy4gU2VlCi0gKiB7QGxpbmsgbmcuJGZpbHRl
cn0gZm9yIG1vcmUgaW5mb3JtYXRvbiBhYm91dCBBbmd1bGFyIGFycmF5cy4KLSAqCi0gKiBAcGFy
YW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc29ydC4KLSAqIEBwYXJhbSB7ZnVuY3Rpb24o
Kil8c3RyaW5nfEFycmF5LjwoZnVuY3Rpb24oKil8c3RyaW5nKT59IGV4cHJlc3Npb24gQSBwcmVk
aWNhdGUgdG8gYmUKLSAqICAgIHVzZWQgYnkgdGhlIGNvbXBhcmF0b3IgdG8gZGV0ZXJtaW5lIHRo
ZSBvcmRlciBvZiBlbGVtZW50cy4KLSAqCi0gKiAgICBDYW4gYmUgb25lIG9mOgotICoKLSAqICAg
IC0gYGZ1bmN0aW9uYDogR2V0dGVyIGZ1bmN0aW9uLiBUaGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rp
b24gd2lsbCBiZSBzb3J0ZWQgdXNpbmcgdGhlCi0gKiAgICAgIGA8YCwgYD1gLCBgPmAgb3BlcmF0
b3IuCi0gKiAgICAtIGBzdHJpbmdgOiBBbiBBbmd1bGFyIGV4cHJlc3Npb24gd2hpY2ggZXZhbHVh
dGVzIHRvIGFuIG9iamVjdCB0byBvcmRlciBieSwgc3VjaCBhcyAnbmFtZScKLSAqICAgICAgdG8g
c29ydCBieSBhIHByb3BlcnR5IGNhbGxlZCAnbmFtZScuIE9wdGlvbmFsbHkgcHJlZml4ZWQgd2l0
aCBgK2Agb3IgYC1gIHRvIGNvbnRyb2wKLSAqICAgICAgYXNjZW5kaW5nIG9yIGRlc2NlbmRpbmcg
c29ydCBvcmRlciAoZm9yIGV4YW1wbGUsICtuYW1lIG9yIC1uYW1lKS4KLSAqICAgIC0gYEFycmF5
YDogQW4gYXJyYXkgb2YgZnVuY3Rpb24gb3Igc3RyaW5nIHByZWRpY2F0ZXMuIFRoZSBmaXJzdCBw
cmVkaWNhdGUgaW4gdGhlIGFycmF5Ci0gKiAgICAgIGlzIHVzZWQgZm9yIHNvcnRpbmcsIGJ1dCB3
aGVuIHR3byBpdGVtcyBhcmUgZXF1aXZhbGVudCwgdGhlIG5leHQgcHJlZGljYXRlIGlzIHVzZWQu
Ci0gKgotICogQHBhcmFtIHtib29sZWFuPX0gcmV2ZXJzZSBSZXZlcnNlIHRoZSBvcmRlciB0aGUg
YXJyYXkuCi0gKiBAcmV0dXJucyB7QXJyYXl9IFNvcnRlZCBjb3B5IG9mIHRoZSBzb3VyY2UgYXJy
YXkuCi0gKgotICogQGV4YW1wbGUKLSAgIDxkb2M6ZXhhbXBsZT4KLSAgICAgPGRvYzpzb3VyY2U+
Ci0gICAgICAgPHNjcmlwdD4KLSAgICAgICAgIGZ1bmN0aW9uIEN0cmwoJHNjb3BlKSB7Ci0gICAg
ICAgICAgICRzY29wZS5mcmllbmRzID0KLSAgICAgICAgICAgICAgIFt7bmFtZTonSm9obicsIHBo
b25lOic1NTUtMTIxMicsIGFnZToxMH0sCi0gICAgICAgICAgICAgICAge25hbWU6J01hcnknLCBw
aG9uZTonNTU1LTk4NzYnLCBhZ2U6MTl9LAotICAgICAgICAgICAgICAgIHtuYW1lOidNaWtlJywg
cGhvbmU6JzU1NS00MzIxJywgYWdlOjIxfSwKLSAgICAgICAgICAgICAgICB7bmFtZTonQWRhbScs
IHBob25lOic1NTUtNTY3OCcsIGFnZTozNX0sCi0gICAgICAgICAgICAgICAge25hbWU6J0p1bGll
JywgcGhvbmU6JzU1NS04NzY1JywgYWdlOjI5fV0KLSAgICAgICAgICAgJHNjb3BlLnByZWRpY2F0
ZSA9ICctYWdlJzsKLSAgICAgICAgIH0KLSAgICAgICA8L3NjcmlwdD4KLSAgICAgICA8ZGl2IG5n
LWNvbnRyb2xsZXI9IkN0cmwiPgotICAgICAgICAgPHByZT5Tb3J0aW5nIHByZWRpY2F0ZSA9IHt7
cHJlZGljYXRlfX07IHJldmVyc2UgPSB7e3JldmVyc2V9fTwvcHJlPgotICAgICAgICAgPGhyLz4K
LSAgICAgICAgIFsgPGEgaHJlZj0iIiBuZy1jbGljaz0icHJlZGljYXRlPScnIj51bnNvcnRlZDwv
YT4gXQotICAgICAgICAgPHRhYmxlIGNsYXNzPSJmcmllbmQiPgotICAgICAgICAgICA8dHI+Ci0g
ICAgICAgICAgICAgPHRoPjxhIGhyZWY9IiIgbmctY2xpY2s9InByZWRpY2F0ZSA9ICduYW1lJzsg
cmV2ZXJzZT1mYWxzZSI+TmFtZTwvYT4KLSAgICAgICAgICAgICAgICAgKDxhIGhyZWYgbmctY2xp
Y2s9InByZWRpY2F0ZSA9ICctbmFtZSc7IHJldmVyc2U9ZmFsc2UiPl48L2E+KTwvdGg+Ci0gICAg
ICAgICAgICAgPHRoPjxhIGhyZWY9IiIgbmctY2xpY2s9InByZWRpY2F0ZSA9ICdwaG9uZSc7IHJl
dmVyc2U9IXJldmVyc2UiPlBob25lIE51bWJlcjwvYT48L3RoPgotICAgICAgICAgICAgIDx0aD48
YSBocmVmPSIiIG5nLWNsaWNrPSJwcmVkaWNhdGUgPSAnYWdlJzsgcmV2ZXJzZT0hcmV2ZXJzZSI+
QWdlPC9hPjwvdGg+Ci0gICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgIDx0ciBuZy1yZXBlYXQ9
ImZyaWVuZCBpbiBmcmllbmRzIHwgb3JkZXJCeTpwcmVkaWNhdGU6cmV2ZXJzZSI+Ci0gICAgICAg
ICAgICAgPHRkPnt7ZnJpZW5kLm5hbWV9fTwvdGQ+Ci0gICAgICAgICAgICAgPHRkPnt7ZnJpZW5k
LnBob25lfX08L3RkPgotICAgICAgICAgICAgIDx0ZD57e2ZyaWVuZC5hZ2V9fTwvdGQ+Ci0gICAg
ICAgICAgIDwvdHI+Ci0gICAgICAgICA8L3RhYmxlPgotICAgICAgIDwvZGl2PgotICAgICA8L2Rv
Yzpzb3VyY2U+Ci0gICAgIDxkb2M6c2NlbmFyaW8+Ci0gICAgICAgaXQoJ3Nob3VsZCBiZSByZXZl
cnNlIG9yZGVyZWQgYnkgYWdlZCcsIGZ1bmN0aW9uKCkgewotICAgICAgICAgZXhwZWN0KGJpbmRp
bmcoJ3ByZWRpY2F0ZScpKS50b0JlKCctYWdlJyk7Ci0gICAgICAgICBleHBlY3QocmVwZWF0ZXIo
J3RhYmxlLmZyaWVuZCcsICdmcmllbmQgaW4gZnJpZW5kcycpLmNvbHVtbignZnJpZW5kLmFnZScp
KS4KLSAgICAgICAgICAgdG9FcXVhbChbJzM1JywgJzI5JywgJzIxJywgJzE5JywgJzEwJ10pOwot
ICAgICAgICAgZXhwZWN0KHJlcGVhdGVyKCd0YWJsZS5mcmllbmQnLCAnZnJpZW5kIGluIGZyaWVu
ZHMnKS5jb2x1bW4oJ2ZyaWVuZC5uYW1lJykpLgotICAgICAgICAgICB0b0VxdWFsKFsnQWRhbScs
ICdKdWxpZScsICdNaWtlJywgJ01hcnknLCAnSm9obiddKTsKLSAgICAgICB9KTsKLQotICAgICAg
IGl0KCdzaG91bGQgcmVvcmRlciB0aGUgdGFibGUgd2hlbiB1c2VyIHNlbGVjdHMgZGlmZmVyZW50
IHByZWRpY2F0ZScsIGZ1bmN0aW9uKCkgewotICAgICAgICAgZWxlbWVudCgnLmRvYy1leGFtcGxl
LWxpdmUgYTpjb250YWlucygiTmFtZSIpJykuY2xpY2soKTsKLSAgICAgICAgIGV4cGVjdChyZXBl
YXRlcigndGFibGUuZnJpZW5kJywgJ2ZyaWVuZCBpbiBmcmllbmRzJykuY29sdW1uKCdmcmllbmQu
bmFtZScpKS4KLSAgICAgICAgICAgdG9FcXVhbChbJ0FkYW0nLCAnSm9obicsICdKdWxpZScsICdN
YXJ5JywgJ01pa2UnXSk7Ci0gICAgICAgICBleHBlY3QocmVwZWF0ZXIoJ3RhYmxlLmZyaWVuZCcs
ICdmcmllbmQgaW4gZnJpZW5kcycpLmNvbHVtbignZnJpZW5kLmFnZScpKS4KLSAgICAgICAgICAg
dG9FcXVhbChbJzM1JywgJzEwJywgJzI5JywgJzE5JywgJzIxJ10pOwotCi0gICAgICAgICBlbGVt
ZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBhOmNvbnRhaW5zKCJQaG9uZSIpJykuY2xpY2soKTsKLSAg
ICAgICAgIGV4cGVjdChyZXBlYXRlcigndGFibGUuZnJpZW5kJywgJ2ZyaWVuZCBpbiBmcmllbmRz
JykuY29sdW1uKCdmcmllbmQucGhvbmUnKSkuCi0gICAgICAgICAgIHRvRXF1YWwoWyc1NTUtOTg3
NicsICc1NTUtODc2NScsICc1NTUtNTY3OCcsICc1NTUtNDMyMScsICc1NTUtMTIxMiddKTsKLSAg
ICAgICAgIGV4cGVjdChyZXBlYXRlcigndGFibGUuZnJpZW5kJywgJ2ZyaWVuZCBpbiBmcmllbmRz
JykuY29sdW1uKCdmcmllbmQubmFtZScpKS4KLSAgICAgICAgICAgdG9FcXVhbChbJ01hcnknLCAn
SnVsaWUnLCAnQWRhbScsICdNaWtlJywgJ0pvaG4nXSk7Ci0gICAgICAgfSk7Ci0gICAgIDwvZG9j
OnNjZW5hcmlvPgotICAgPC9kb2M6ZXhhbXBsZT4KLSAqLwotb3JkZXJCeUZpbHRlci4kaW5qZWN0
ID0gWyckcGFyc2UnXTsKLWZ1bmN0aW9uIG9yZGVyQnlGaWx0ZXIoJHBhcnNlKXsKLSAgcmV0dXJu
IGZ1bmN0aW9uKGFycmF5LCBzb3J0UHJlZGljYXRlLCByZXZlcnNlT3JkZXIpIHsKLSAgICBpZiAo
IWlzQXJyYXkoYXJyYXkpKSByZXR1cm4gYXJyYXk7Ci0gICAgaWYgKCFzb3J0UHJlZGljYXRlKSBy
ZXR1cm4gYXJyYXk7Ci0gICAgc29ydFByZWRpY2F0ZSA9IGlzQXJyYXkoc29ydFByZWRpY2F0ZSkg
PyBzb3J0UHJlZGljYXRlOiBbc29ydFByZWRpY2F0ZV07Ci0gICAgc29ydFByZWRpY2F0ZSA9IG1h
cChzb3J0UHJlZGljYXRlLCBmdW5jdGlvbihwcmVkaWNhdGUpewotICAgICAgdmFyIGRlc2NlbmRp
bmcgPSBmYWxzZSwgZ2V0ID0gcHJlZGljYXRlIHx8IGlkZW50aXR5OwotICAgICAgaWYgKGlzU3Ry
aW5nKHByZWRpY2F0ZSkpIHsKLSAgICAgICAgaWYgKChwcmVkaWNhdGUuY2hhckF0KDApID09ICcr
JyB8fCBwcmVkaWNhdGUuY2hhckF0KDApID09ICctJykpIHsKLSAgICAgICAgICBkZXNjZW5kaW5n
ID0gcHJlZGljYXRlLmNoYXJBdCgwKSA9PSAnLSc7Ci0gICAgICAgICAgcHJlZGljYXRlID0gcHJl
ZGljYXRlLnN1YnN0cmluZygxKTsKLSAgICAgICAgfQotICAgICAgICBnZXQgPSAkcGFyc2UocHJl
ZGljYXRlKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiByZXZlcnNlQ29tcGFyYXRvcihmdW5jdGlv
bihhLGIpewotICAgICAgICByZXR1cm4gY29tcGFyZShnZXQoYSksZ2V0KGIpKTsKLSAgICAgIH0s
IGRlc2NlbmRpbmcpOwotICAgIH0pOwotICAgIHZhciBhcnJheUNvcHkgPSBbXTsKLSAgICBmb3Ig
KCB2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgeyBhcnJheUNvcHkucHVzaChhcnJh
eVtpXSk7IH0KLSAgICByZXR1cm4gYXJyYXlDb3B5LnNvcnQocmV2ZXJzZUNvbXBhcmF0b3IoY29t
cGFyYXRvciwgcmV2ZXJzZU9yZGVyKSk7Ci0KLSAgICBmdW5jdGlvbiBjb21wYXJhdG9yKG8xLCBv
Mil7Ci0gICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBzb3J0UHJlZGljYXRlLmxlbmd0aDsgaSsr
KSB7Ci0gICAgICAgIHZhciBjb21wID0gc29ydFByZWRpY2F0ZVtpXShvMSwgbzIpOwotICAgICAg
ICBpZiAoY29tcCAhPT0gMCkgcmV0dXJuIGNvbXA7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gMDsK
LSAgICB9Ci0gICAgZnVuY3Rpb24gcmV2ZXJzZUNvbXBhcmF0b3IoY29tcCwgZGVzY2VuZGluZykg
ewotICAgICAgcmV0dXJuIHRvQm9vbGVhbihkZXNjZW5kaW5nKQotICAgICAgICAgID8gZnVuY3Rp
b24oYSxiKXtyZXR1cm4gY29tcChiLGEpO30KLSAgICAgICAgICA6IGNvbXA7Ci0gICAgfQotICAg
IGZ1bmN0aW9uIGNvbXBhcmUodjEsIHYyKXsKLSAgICAgIHZhciB0MSA9IHR5cGVvZiB2MTsKLSAg
ICAgIHZhciB0MiA9IHR5cGVvZiB2MjsKLSAgICAgIGlmICh0MSA9PSB0MikgewotICAgICAgICBp
ZiAodDEgPT0gInN0cmluZyIpIHYxID0gdjEudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgaWYgKHQx
ID09ICJzdHJpbmciKSB2MiA9IHYyLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgIGlmICh2MSA9PT0g
djIpIHJldHVybiAwOwotICAgICAgICByZXR1cm4gdjEgPCB2MiA/IC0xIDogMTsKLSAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHJldHVybiB0MSA8IHQyID8gLTEgOiAxOwotICAgICAgfQotICAgIH0K
LSAgfQotfQotCi1mdW5jdGlvbiBuZ0RpcmVjdGl2ZShkaXJlY3RpdmUpIHsKLSAgaWYgKGlzRnVu
Y3Rpb24oZGlyZWN0aXZlKSkgewotICAgIGRpcmVjdGl2ZSA9IHsKLSAgICAgIGxpbms6IGRpcmVj
dGl2ZQotICAgIH0KLSAgfQotICBkaXJlY3RpdmUucmVzdHJpY3QgPSBkaXJlY3RpdmUucmVzdHJp
Y3QgfHwgJ0FDJzsKLSAgcmV0dXJuIHZhbHVlRm4oZGlyZWN0aXZlKTsKLX0KLQotLyoqCi0gKiBA
bmdkb2MgZGlyZWN0aXZlCi0gKiBAbmFtZSBuZy5kaXJlY3RpdmU6YQotICogQHJlc3RyaWN0IEUK
LSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIE1vZGlmaWVzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9m
IGh0bWwgQSB0YWcsIHNvIHRoYXQgdGhlIGRlZmF1bHQgYWN0aW9uIGlzIHByZXZlbnRlZCB3aGVu
IGhyZWYKLSAqIGF0dHJpYnV0ZSBpcyBlbXB0eS4KLSAqCi0gKiBUaGUgcmVhc29uaW5nIGZvciB0
aGlzIGNoYW5nZSBpcyB0byBhbGxvdyBlYXN5IGNyZWF0aW9uIG9mIGFjdGlvbiBsaW5rcyB3aXRo
IGBuZ0NsaWNrYCBkaXJlY3RpdmUKLSAqIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGxvY2F0aW9uIG9y
IGNhdXNpbmcgcGFnZSByZWxvYWRzLCBlLmcuOgotICogYDxhIGhyZWY9IiIgbmctY2xpY2s9Im1v
ZGVsLiRzYXZlKCkiPlNhdmU8L2E+YAotICovCi12YXIgaHRtbEFuY2hvckRpcmVjdGl2ZSA9IHZh
bHVlRm4oewotICByZXN0cmljdDogJ0UnLAotICBjb21waWxlOiBmdW5jdGlvbihlbGVtZW50LCBh
dHRyKSB7Ci0KLSAgICBpZiAobXNpZSA8PSA4KSB7Ci0KLSAgICAgIC8vIHR1cm4gPGEgaHJlZiBu
Zy1jbGljaz0iLi4iPmxpbms8L2E+IGludG8gYSBzdHlsYWJsZSBsaW5rIGluIElFCi0gICAgICAv
LyBidXQgb25seSBpZiBpdCBkb2Vzbid0IGhhdmUgbmFtZSBhdHRyaWJ1dGUsIGluIHdoaWNoIGNh
c2UgaXQncyBhbiBhbmNob3IKLSAgICAgIGlmICghYXR0ci5ocmVmICYmICFhdHRyLm5hbWUpIHsK
LSAgICAgICAgYXR0ci4kc2V0KCdocmVmJywgJycpOwotICAgICAgfQotCi0gICAgICAvLyBhZGQg
YSBjb21tZW50IG5vZGUgdG8gYW5jaG9ycyB0byB3b3JrYXJvdW5kIElFIGJ1ZyB0aGF0IGNhdXNl
cyBlbGVtZW50IGNvbnRlbnQgdG8gYmUgcmVzZXQKLSAgICAgIC8vIHRvIG5ldyBhdHRyaWJ1dGUg
Y29udGVudCBpZiBhdHRyaWJ1dGUgaXMgdXBkYXRlZCB3aXRoIHZhbHVlIGNvbnRhaW5pbmcgQCBh
bmQgZWxlbWVudCBhbHNvCi0gICAgICAvLyBjb250YWlucyB2YWx1ZSB3aXRoIEAKLSAgICAgIC8v
IHNlZSBpc3N1ZSAjMTk0OQotICAgICAgZWxlbWVudC5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlQ29t
bWVudCgnSUUgZml4JykpOwotICAgIH0KLQotICAgIHJldHVybiBmdW5jdGlvbihzY29wZSwgZWxl
bWVudCkgewotICAgICAgZWxlbWVudC5iaW5kKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KXsKLSAg
ICAgICAgLy8gaWYgd2UgaGF2ZSBubyBocmVmIHVybCwgdGhlbiBkb24ndCBuYXZpZ2F0ZSBhbnl3
aGVyZS4KLSAgICAgICAgaWYgKCFlbGVtZW50LmF0dHIoJ2hyZWYnKSkgewotICAgICAgICAgIGV2
ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIH0KLSAgfQot
fSk7Ci0KLS8qKgotICogQG5nZG9jIGRpcmVjdGl2ZQotICogQG5hbWUgbmcuZGlyZWN0aXZlOm5n
SHJlZgotICogQHJlc3RyaWN0IEEKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIFVzaW5nIEFuZ3Vs
YXIgbWFya3VwIGxpa2Uge3toYXNofX0gaW4gYW4gaHJlZiBhdHRyaWJ1dGUgbWFrZXMKLSAqIHRo
ZSBwYWdlIG9wZW4gdG8gYSB3cm9uZyBVUkwsIGlmIHRoZSB1c2VyIGNsaWNrcyB0aGF0IGxpbmsg
YmVmb3JlCi0gKiBhbmd1bGFyIGhhcyBhIGNoYW5jZSB0byByZXBsYWNlIHRoZSB7e2hhc2h9fSB3
aXRoIGFjdHVhbCBVUkwsIHRoZQotICogbGluayB3aWxsIGJlIGJyb2tlbiBhbmQgd2lsbCBtb3N0
IGxpa2VseSByZXR1cm4gYSA0MDQgZXJyb3IuCi0gKiBUaGUgYG5nSHJlZmAgZGlyZWN0aXZlIHNv
bHZlcyB0aGlzIHByb2JsZW0uCi0gKgotICogVGhlIGJ1Z2d5IHdheSB0byB3cml0ZSBpdDoKLSAq
IDxwcmU+Ci0gKiA8YSBocmVmPSJodHRwOi8vd3d3LmdyYXZhdGFyLmNvbS9hdmF0YXIve3toYXNo
fX0iLz4KLSAqIDwvcHJlPgotICoKLSAqIFRoZSBjb3JyZWN0IHdheSB0byB3cml0ZSBpdDoKLSAq
IDxwcmU+Ci0gKiA8YSBuZy1ocmVmPSJodHRwOi8vd3d3LmdyYXZhdGFyLmNvbS9hdmF0YXIve3to
YXNofX0iLz4KLSAqIDwvcHJlPgotICoKLSAqIEBlbGVtZW50IEEKLSAqIEBwYXJhbSB7dGVtcGxh
dGV9IG5nSHJlZiBhbnkgc3RyaW5nIHdoaWNoIGNhbiBjb250YWluIGB7e319YCBtYXJrdXAuCi0g
KgotICogQGV4YW1wbGUKLSAqIFRoaXMgZXhhbXBsZSB1c2VzIGBsaW5rYCB2YXJpYWJsZSBpbnNp
ZGUgYGhyZWZgIGF0dHJpYnV0ZToKLSAgICA8ZG9jOmV4YW1wbGU+Ci0gICAgICA8ZG9jOnNvdXJj
ZT4KLSAgICAgICAgPGlucHV0IG5nLW1vZGVsPSJ2YWx1ZSIgLz48YnIgLz4KLSAgICAgICAgPGEg
aWQ9ImxpbmstMSIgaHJlZiBuZy1jbGljaz0idmFsdWUgPSAxIj5saW5rIDE8L2E+IChsaW5rLCBk
b24ndCByZWxvYWQpPGJyIC8+Ci0gICAgICAgIDxhIGlkPSJsaW5rLTIiIGhyZWY9IiIgbmctY2xp
Y2s9InZhbHVlID0gMiI+bGluayAyPC9hPiAobGluaywgZG9uJ3QgcmVsb2FkKTxiciAvPgotICAg
ICAgICA8YSBpZD0ibGluay0zIiBuZy1ocmVmPSIve3snMTIzJ319Ij5saW5rIDM8L2E+IChsaW5r
LCByZWxvYWQhKTxiciAvPgotICAgICAgICA8YSBpZD0ibGluay00IiBocmVmPSIiIG5hbWU9Inh4
IiBuZy1jbGljaz0idmFsdWUgPSA0Ij5hbmNob3I8L2E+IChsaW5rLCBkb24ndCByZWxvYWQpPGJy
IC8+Ci0gICAgICAgIDxhIGlkPSJsaW5rLTUiIG5hbWU9Inh4eCIgbmctY2xpY2s9InZhbHVlID0g
NSI+YW5jaG9yPC9hPiAobm8gbGluayk8YnIgLz4KLSAgICAgICAgPGEgaWQ9ImxpbmstNiIgbmct
aHJlZj0ie3t2YWx1ZX19Ij5saW5rPC9hPiAobGluaywgY2hhbmdlIGxvY2F0aW9uKQotICAgICAg
PC9kb2M6c291cmNlPgotICAgICAgPGRvYzpzY2VuYXJpbz4KLSAgICAgICAgaXQoJ3Nob3VsZCBl
eGVjdXRlIG5nLWNsaWNrIGJ1dCBub3QgcmVsb2FkIHdoZW4gaHJlZiB3aXRob3V0IHZhbHVlJywg
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgZWxlbWVudCgnI2xpbmstMScpLmNsaWNrKCk7Ci0gICAg
ICAgICAgZXhwZWN0KGlucHV0KCd2YWx1ZScpLnZhbCgpKS50b0VxdWFsKCcxJyk7Ci0gICAgICAg
ICAgZXhwZWN0KGVsZW1lbnQoJyNsaW5rLTEnKS5hdHRyKCdocmVmJykpLnRvQmUoIiIpOwotICAg
ICAgICB9KTsKLQotICAgICAgICBpdCgnc2hvdWxkIGV4ZWN1dGUgbmctY2xpY2sgYnV0IG5vdCBy
ZWxvYWQgd2hlbiBocmVmIGVtcHR5IHN0cmluZycsIGZ1bmN0aW9uKCkgewotICAgICAgICAgIGVs
ZW1lbnQoJyNsaW5rLTInKS5jbGljaygpOwotICAgICAgICAgIGV4cGVjdChpbnB1dCgndmFsdWUn
KS52YWwoKSkudG9FcXVhbCgnMicpOwotICAgICAgICAgIGV4cGVjdChlbGVtZW50KCcjbGluay0y
JykuYXR0cignaHJlZicpKS50b0JlKCIiKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgaXQoJ3No
b3VsZCBleGVjdXRlIG5nLWNsaWNrIGFuZCBjaGFuZ2UgdXJsIHdoZW4gbmctaHJlZiBzcGVjaWZp
ZWQnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICBleHBlY3QoZWxlbWVudCgnI2xpbmstMycpLmF0
dHIoJ2hyZWYnKSkudG9CZSgiLzEyMyIpOwotCi0gICAgICAgICAgZWxlbWVudCgnI2xpbmstMycp
LmNsaWNrKCk7Ci0gICAgICAgICAgZXhwZWN0KGJyb3dzZXIoKS53aW5kb3coKS5wYXRoKCkpLnRv
RXF1YWwoJy8xMjMnKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgaXQoJ3Nob3VsZCBleGVjdXRl
IG5nLWNsaWNrIGJ1dCBub3QgcmVsb2FkIHdoZW4gaHJlZiBlbXB0eSBzdHJpbmcgYW5kIG5hbWUg
c3BlY2lmaWVkJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgZWxlbWVudCgnI2xpbmstNCcpLmNs
aWNrKCk7Ci0gICAgICAgICAgZXhwZWN0KGlucHV0KCd2YWx1ZScpLnZhbCgpKS50b0VxdWFsKCc0
Jyk7Ci0gICAgICAgICAgZXhwZWN0KGVsZW1lbnQoJyNsaW5rLTQnKS5hdHRyKCdocmVmJykpLnRv
QmUoJycpOwotICAgICAgICB9KTsKLQotICAgICAgICBpdCgnc2hvdWxkIGV4ZWN1dGUgbmctY2xp
Y2sgYnV0IG5vdCByZWxvYWQgd2hlbiBubyBocmVmIGJ1dCBuYW1lIHNwZWNpZmllZCcsIGZ1bmN0
aW9uKCkgewotICAgICAgICAgIGVsZW1lbnQoJyNsaW5rLTUnKS5jbGljaygpOwotICAgICAgICAg
IGV4cGVjdChpbnB1dCgndmFsdWUnKS52YWwoKSkudG9FcXVhbCgnNScpOwotICAgICAgICAgIGV4
cGVjdChlbGVtZW50KCcjbGluay01JykuYXR0cignaHJlZicpKS50b0JlKHVuZGVmaW5lZCk7Ci0g
ICAgICAgIH0pOwotCi0gICAgICAgIGl0KCdzaG91bGQgb25seSBjaGFuZ2UgdXJsIHdoZW4gb25s
eSBuZy1ocmVmJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgaW5wdXQoJ3ZhbHVlJykuZW50ZXIo
JzYnKTsKLSAgICAgICAgICBleHBlY3QoZWxlbWVudCgnI2xpbmstNicpLmF0dHIoJ2hyZWYnKSku
dG9CZSgnNicpOwotCi0gICAgICAgICAgZWxlbWVudCgnI2xpbmstNicpLmNsaWNrKCk7Ci0gICAg
ICAgICAgZXhwZWN0KGJyb3dzZXIoKS5sb2NhdGlvbigpLnVybCgpKS50b0VxdWFsKCcvNicpOwot
ICAgICAgICB9KTsKLSAgICAgIDwvZG9jOnNjZW5hcmlvPgotICAgIDwvZG9jOmV4YW1wbGU+Ci0g
Ki8KLQotLyoqCi0gKiBAbmdkb2MgZGlyZWN0aXZlCi0gKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdT
cmMKLSAqIEByZXN0cmljdCBBCi0gKgotICogQGRlc2NyaXB0aW9uCi0gKiBVc2luZyBBbmd1bGFy
IG1hcmt1cCBsaWtlIGB7e2hhc2h9fWAgaW4gYSBgc3JjYCBhdHRyaWJ1dGUgZG9lc24ndAotICog
d29yayByaWdodDogVGhlIGJyb3dzZXIgd2lsbCBmZXRjaCBmcm9tIHRoZSBVUkwgd2l0aCB0aGUg
bGl0ZXJhbAotICogdGV4dCBge3toYXNofX1gIHVudGlsIEFuZ3VsYXIgcmVwbGFjZXMgdGhlIGV4
cHJlc3Npb24gaW5zaWRlCi0gKiBge3toYXNofX1gLiBUaGUgYG5nU3JjYCBkaXJlY3RpdmUgc29s
dmVzIHRoaXMgcHJvYmxlbS4KLSAqCi0gKiBUaGUgYnVnZ3kgd2F5IHRvIHdyaXRlIGl0OgotICog
PHByZT4KLSAqIDxpbWcgc3JjPSJodHRwOi8vd3d3LmdyYXZhdGFyLmNvbS9hdmF0YXIve3toYXNo
fX0iLz4KLSAqIDwvcHJlPgotICoKLSAqIFRoZSBjb3JyZWN0IHdheSB0byB3cml0ZSBpdDoKLSAq
IDxwcmU+Ci0gKiA8aW1nIG5nLXNyYz0iaHR0cDovL3d3dy5ncmF2YXRhci5jb20vYXZhdGFyL3t7
aGFzaH19Ii8+Ci0gKiA8L3ByZT4KLSAqCi0gKiBAZWxlbWVudCBJTUcKLSAqIEBwYXJhbSB7dGVt
cGxhdGV9IG5nU3JjIGFueSBzdHJpbmcgd2hpY2ggY2FuIGNvbnRhaW4gYHt7fX1gIG1hcmt1cC4K
LSAqLwotCi0vKioKLSAqIEBuZ2RvYyBkaXJlY3RpdmUKLSAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpu
Z0Rpc2FibGVkCi0gKiBAcmVzdHJpY3QgQQotICoKLSAqIEBkZXNjcmlwdGlvbgotICoKLSAqIFRo
ZSBmb2xsb3dpbmcgbWFya3VwIHdpbGwgbWFrZSB0aGUgYnV0dG9uIGVuYWJsZWQgb24gQ2hyb21l
L0ZpcmVmb3ggYnV0IG5vdCBvbiBJRTggYW5kIG9sZGVyIElFczoKLSAqIDxwcmU+Ci0gKiA8ZGl2
IG5nLWluaXQ9InNjb3BlID0geyBpc0Rpc2FibGVkOiBmYWxzZSB9Ij4KLSAqICA8YnV0dG9uIGRp
c2FibGVkPSJ7e3Njb3BlLmlzRGlzYWJsZWR9fSI+RGlzYWJsZWQ8L2J1dHRvbj4KLSAqIDwvZGl2
PgotICogPC9wcmU+Ci0gKgotICogVGhlIEhUTUwgc3BlY3MgZG8gbm90IHJlcXVpcmUgYnJvd3Nl
cnMgdG8gcHJlc2VydmUgdGhlIHNwZWNpYWwgYXR0cmlidXRlcyBzdWNoIGFzIGRpc2FibGVkLgot
ICogKFRoZSBwcmVzZW5jZSBvZiB0aGVtIG1lYW5zIHRydWUgYW5kIGFic2VuY2UgbWVhbnMgZmFs
c2UpCi0gKiBUaGlzIHByZXZlbnRzIHRoZSBhbmd1bGFyIGNvbXBpbGVyIGZyb20gY29ycmVjdGx5
IHJldHJpZXZpbmcgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbi4KLSAqIFRvIHNvbHZlIHRoaXMgcHJv
YmxlbSwgd2UgaW50cm9kdWNlIHRoZSBgbmdEaXNhYmxlZGAgZGlyZWN0aXZlLgotICoKLSAqIEBl
eGFtcGxlCi0gICAgPGRvYzpleGFtcGxlPgotICAgICAgPGRvYzpzb3VyY2U+Ci0gICAgICAgIENs
aWNrIG1lIHRvIHRvZ2dsZTogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuZy1tb2RlbD0iY2hlY2tl
ZCI+PGJyLz4KLSAgICAgICAgPGJ1dHRvbiBuZy1tb2RlbD0iYnV0dG9uIiBuZy1kaXNhYmxlZD0i
Y2hlY2tlZCI+QnV0dG9uPC9idXR0b24+Ci0gICAgICA8L2RvYzpzb3VyY2U+Ci0gICAgICA8ZG9j
OnNjZW5hcmlvPgotICAgICAgICBpdCgnc2hvdWxkIHRvZ2dsZSBidXR0b24nLCBmdW5jdGlvbigp
IHsKLSAgICAgICAgICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgOmJ1dHRvbicp
LnByb3AoJ2Rpc2FibGVkJykpLnRvQmVGYWxzeSgpOwotICAgICAgICAgIGlucHV0KCdjaGVja2Vk
JykuY2hlY2soKTsKLSAgICAgICAgICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUg
OmJ1dHRvbicpLnByb3AoJ2Rpc2FibGVkJykpLnRvQmVUcnV0aHkoKTsKLSAgICAgICAgfSk7Ci0g
ICAgICA8L2RvYzpzY2VuYXJpbz4KLSAgICA8L2RvYzpleGFtcGxlPgotICoKLSAqIEBlbGVtZW50
IElOUFVUCi0gKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nRGlzYWJsZWQgQW5ndWxhciBleHByZXNz
aW9uIHRoYXQgd2lsbCBiZSBldmFsdWF0ZWQuCi0gKi8KLQotCi0vKioKLSAqIEBuZ2RvYyBkaXJl
Y3RpdmUKLSAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpuZ0NoZWNrZWQKLSAqIEByZXN0cmljdCBBCi0g
KgotICogQGRlc2NyaXB0aW9uCi0gKiBUaGUgSFRNTCBzcGVjcyBkbyBub3QgcmVxdWlyZSBicm93
c2VycyB0byBwcmVzZXJ2ZSB0aGUgc3BlY2lhbCBhdHRyaWJ1dGVzIHN1Y2ggYXMgY2hlY2tlZC4K
LSAqIChUaGUgcHJlc2VuY2Ugb2YgdGhlbSBtZWFucyB0cnVlIGFuZCBhYnNlbmNlIG1lYW5zIGZh
bHNlKQotICogVGhpcyBwcmV2ZW50cyB0aGUgYW5ndWxhciBjb21waWxlciBmcm9tIGNvcnJlY3Rs
eSByZXRyaWV2aW5nIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24uCi0gKiBUbyBzb2x2ZSB0aGlzIHBy
b2JsZW0sIHdlIGludHJvZHVjZSB0aGUgYG5nQ2hlY2tlZGAgZGlyZWN0aXZlLgotICogQGV4YW1w
bGUKLSAgICA8ZG9jOmV4YW1wbGU+Ci0gICAgICA8ZG9jOnNvdXJjZT4KLSAgICAgICAgQ2hlY2sg
bWUgdG8gY2hlY2sgYm90aDogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuZy1tb2RlbD0ibWFzdGVy
Ij48YnIvPgotICAgICAgICA8aW5wdXQgaWQ9ImNoZWNrU2xhdmUiIHR5cGU9ImNoZWNrYm94IiBu
Zy1jaGVja2VkPSJtYXN0ZXIiPgotICAgICAgPC9kb2M6c291cmNlPgotICAgICAgPGRvYzpzY2Vu
YXJpbz4KLSAgICAgICAgaXQoJ3Nob3VsZCBjaGVjayBib3RoIGNoZWNrQm94ZXMnLCBmdW5jdGlv
bigpIHsKLSAgICAgICAgICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgI2NoZWNr
U2xhdmUnKS5wcm9wKCdjaGVja2VkJykpLnRvQmVGYWxzeSgpOwotICAgICAgICAgIGlucHV0KCdt
YXN0ZXInKS5jaGVjaygpOwotICAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUt
bGl2ZSAjY2hlY2tTbGF2ZScpLnByb3AoJ2NoZWNrZWQnKSkudG9CZVRydXRoeSgpOwotICAgICAg
ICB9KTsKLSAgICAgIDwvZG9jOnNjZW5hcmlvPgotICAgIDwvZG9jOmV4YW1wbGU+Ci0gKgotICog
QGVsZW1lbnQgSU5QVVQKLSAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdDaGVja2VkIEFuZ3VsYXIg
ZXhwcmVzc2lvbiB0aGF0IHdpbGwgYmUgZXZhbHVhdGVkLgotICovCi0KLQotLyoqCi0gKiBAbmdk
b2MgZGlyZWN0aXZlCi0gKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdNdWx0aXBsZQotICogQHJlc3Ry
aWN0IEEKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIFRoZSBIVE1MIHNwZWNzIGRvIG5vdCByZXF1
aXJlIGJyb3dzZXJzIHRvIHByZXNlcnZlIHRoZSBzcGVjaWFsIGF0dHJpYnV0ZXMgc3VjaCBhcyBt
dWx0aXBsZS4KLSAqIChUaGUgcHJlc2VuY2Ugb2YgdGhlbSBtZWFucyB0cnVlIGFuZCBhYnNlbmNl
IG1lYW5zIGZhbHNlKQotICogVGhpcyBwcmV2ZW50cyB0aGUgYW5ndWxhciBjb21waWxlciBmcm9t
IGNvcnJlY3RseSByZXRyaWV2aW5nIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24uCi0gKiBUbyBzb2x2
ZSB0aGlzIHByb2JsZW0sIHdlIGludHJvZHVjZSB0aGUgYG5nTXVsdGlwbGVgIGRpcmVjdGl2ZS4K
LSAqCi0gKiBAZXhhbXBsZQotICAgICA8ZG9jOmV4YW1wbGU+Ci0gICAgICAgPGRvYzpzb3VyY2U+
Ci0gICAgICAgICBDaGVjayBtZSBjaGVjayBtdWx0aXBsZTogPGlucHV0IHR5cGU9ImNoZWNrYm94
IiBuZy1tb2RlbD0iY2hlY2tlZCI+PGJyLz4KLSAgICAgICAgIDxzZWxlY3QgaWQ9InNlbGVjdCIg
bmctbXVsdGlwbGU9ImNoZWNrZWQiPgotICAgICAgICAgICA8b3B0aW9uPk1pc2tvPC9vcHRpb24+
Ci0gICAgICAgICAgIDxvcHRpb24+SWdvcjwvb3B0aW9uPgotICAgICAgICAgICA8b3B0aW9uPlZv
anRhPC9vcHRpb24+Ci0gICAgICAgICAgIDxvcHRpb24+RGk8L29wdGlvbj4KLSAgICAgICAgIDwv
c2VsZWN0PgotICAgICAgIDwvZG9jOnNvdXJjZT4KLSAgICAgICA8ZG9jOnNjZW5hcmlvPgotICAg
ICAgICAgaXQoJ3Nob3VsZCB0b2dnbGUgbXVsdGlwbGUnLCBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgZXhwZWN0KGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlICNzZWxlY3QnKS5wcm9wKCdtdWx0
aXBsZScpKS50b0JlRmFsc3koKTsKLSAgICAgICAgICAgaW5wdXQoJ2NoZWNrZWQnKS5jaGVjaygp
OwotICAgICAgICAgICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgI3NlbGVjdCcp
LnByb3AoJ211bHRpcGxlJykpLnRvQmVUcnV0aHkoKTsKLSAgICAgICAgIH0pOwotICAgICAgIDwv
ZG9jOnNjZW5hcmlvPgotICAgICA8L2RvYzpleGFtcGxlPgotICoKLSAqIEBlbGVtZW50IFNFTEVD
VAotICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ011bHRpcGxlIEFuZ3VsYXIgZXhwcmVzc2lvbiB0
aGF0IHdpbGwgYmUgZXZhbHVhdGVkLgotICovCi0KLQotLyoqCi0gKiBAbmdkb2MgZGlyZWN0aXZl
Ci0gKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdSZWFkb25seQotICogQHJlc3RyaWN0IEEKLSAqCi0g
KiBAZGVzY3JpcHRpb24KLSAqIFRoZSBIVE1MIHNwZWNzIGRvIG5vdCByZXF1aXJlIGJyb3dzZXJz
IHRvIHByZXNlcnZlIHRoZSBzcGVjaWFsIGF0dHJpYnV0ZXMgc3VjaCBhcyByZWFkb25seS4KLSAq
IChUaGUgcHJlc2VuY2Ugb2YgdGhlbSBtZWFucyB0cnVlIGFuZCBhYnNlbmNlIG1lYW5zIGZhbHNl
KQotICogVGhpcyBwcmV2ZW50cyB0aGUgYW5ndWxhciBjb21waWxlciBmcm9tIGNvcnJlY3RseSBy
ZXRyaWV2aW5nIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24uCi0gKiBUbyBzb2x2ZSB0aGlzIHByb2Js
ZW0sIHdlIGludHJvZHVjZSB0aGUgYG5nUmVhZG9ubHlgIGRpcmVjdGl2ZS4KLSAqIEBleGFtcGxl
Ci0gICAgPGRvYzpleGFtcGxlPgotICAgICAgPGRvYzpzb3VyY2U+Ci0gICAgICAgIENoZWNrIG1l
IHRvIG1ha2UgdGV4dCByZWFkb25seTogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuZy1tb2RlbD0i
Y2hlY2tlZCI+PGJyLz4KLSAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5nLXJlYWRvbmx5PSJj
aGVja2VkIiB2YWx1ZT0iSSdtIEFuZ3VsYXIiLz4KLSAgICAgIDwvZG9jOnNvdXJjZT4KLSAgICAg
IDxkb2M6c2NlbmFyaW8+Ci0gICAgICAgIGl0KCdzaG91bGQgdG9nZ2xlIHJlYWRvbmx5IGF0dHIn
LCBmdW5jdGlvbigpIHsKLSAgICAgICAgICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxp
dmUgOnRleHQnKS5wcm9wKCdyZWFkb25seScpKS50b0JlRmFsc3koKTsKLSAgICAgICAgICBpbnB1
dCgnY2hlY2tlZCcpLmNoZWNrKCk7Ci0gICAgICAgICAgZXhwZWN0KGVsZW1lbnQoJy5kb2MtZXhh
bXBsZS1saXZlIDp0ZXh0JykucHJvcCgncmVhZG9ubHknKSkudG9CZVRydXRoeSgpOwotICAgICAg
ICB9KTsKLSAgICAgIDwvZG9jOnNjZW5hcmlvPgotICAgIDwvZG9jOmV4YW1wbGU+Ci0gKgotICog
QGVsZW1lbnQgSU5QVVQKLSAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIEFuZ3VsYXIgZXhw
cmVzc2lvbiB0aGF0IHdpbGwgYmUgZXZhbHVhdGVkLgotICovCi0KLQotLyoqCi0gKiBAbmdkb2Mg
ZGlyZWN0aXZlCi0gKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdTZWxlY3RlZAotICogQHJlc3RyaWN0
IEEKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIFRoZSBIVE1MIHNwZWNzIGRvIG5vdCByZXF1aXJl
IGJyb3dzZXJzIHRvIHByZXNlcnZlIHRoZSBzcGVjaWFsIGF0dHJpYnV0ZXMgc3VjaCBhcyBzZWxl
Y3RlZC4KLSAqIChUaGUgcHJlc2VuY2Ugb2YgdGhlbSBtZWFucyB0cnVlIGFuZCBhYnNlbmNlIG1l
YW5zIGZhbHNlKQotICogVGhpcyBwcmV2ZW50cyB0aGUgYW5ndWxhciBjb21waWxlciBmcm9tIGNv
cnJlY3RseSByZXRyaWV2aW5nIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24uCi0gKiBUbyBzb2x2ZSB0
aGlzIHByb2JsZW0sIHdlIGludHJvZHVjZWQgdGhlIGBuZ1NlbGVjdGVkYCBkaXJlY3RpdmUuCi0g
KiBAZXhhbXBsZQotICAgIDxkb2M6ZXhhbXBsZT4KLSAgICAgIDxkb2M6c291cmNlPgotICAgICAg
ICBDaGVjayBtZSB0byBzZWxlY3Q6IDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmctbW9kZWw9InNl
bGVjdGVkIj48YnIvPgotICAgICAgICA8c2VsZWN0PgotICAgICAgICAgIDxvcHRpb24+SGVsbG8h
PC9vcHRpb24+Ci0gICAgICAgICAgPG9wdGlvbiBpZD0iZ3JlZXQiIG5nLXNlbGVjdGVkPSJzZWxl
Y3RlZCI+R3JlZXRpbmdzITwvb3B0aW9uPgotICAgICAgICA8L3NlbGVjdD4KLSAgICAgIDwvZG9j
OnNvdXJjZT4KLSAgICAgIDxkb2M6c2NlbmFyaW8+Ci0gICAgICAgIGl0KCdzaG91bGQgc2VsZWN0
IEdyZWV0aW5ncyEnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICBleHBlY3QoZWxlbWVudCgnLmRv
Yy1leGFtcGxlLWxpdmUgI2dyZWV0JykucHJvcCgnc2VsZWN0ZWQnKSkudG9CZUZhbHN5KCk7Ci0g
ICAgICAgICAgaW5wdXQoJ3NlbGVjdGVkJykuY2hlY2soKTsKLSAgICAgICAgICBleHBlY3QoZWxl
bWVudCgnLmRvYy1leGFtcGxlLWxpdmUgI2dyZWV0JykucHJvcCgnc2VsZWN0ZWQnKSkudG9CZVRy
dXRoeSgpOwotICAgICAgICB9KTsKLSAgICAgIDwvZG9jOnNjZW5hcmlvPgotICAgIDwvZG9jOmV4
YW1wbGU+Ci0gKgotICogQGVsZW1lbnQgT1BUSU9OCi0gKiBAcGFyYW0ge3N0cmluZ30gZXhwcmVz
c2lvbiBBbmd1bGFyIGV4cHJlc3Npb24gdGhhdCB3aWxsIGJlIGV2YWx1YXRlZC4KLSAqLwotCi0K
LXZhciBuZ0F0dHJpYnV0ZUFsaWFzRGlyZWN0aXZlcyA9IHt9OwotCi0KLS8vIGJvb2xlYW4gYXR0
cnMgYXJlIGV2YWx1YXRlZAotZm9yRWFjaChCT09MRUFOX0FUVFIsIGZ1bmN0aW9uKHByb3BOYW1l
LCBhdHRyTmFtZSkgewotICB2YXIgbm9ybWFsaXplZCA9IGRpcmVjdGl2ZU5vcm1hbGl6ZSgnbmct
JyArIGF0dHJOYW1lKTsKLSAgbmdBdHRyaWJ1dGVBbGlhc0RpcmVjdGl2ZXNbbm9ybWFsaXplZF0g
PSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gewotICAgICAgcHJpb3JpdHk6IDEwMCwKLSAgICAg
IGNvbXBpbGU6IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUsIGVs
ZW1lbnQsIGF0dHIpIHsKLSAgICAgICAgICBzY29wZS4kd2F0Y2goYXR0cltub3JtYWxpemVkXSwg
ZnVuY3Rpb24gbmdCb29sZWFuQXR0cldhdGNoQWN0aW9uKHZhbHVlKSB7Ci0gICAgICAgICAgICBh
dHRyLiRzZXQoYXR0ck5hbWUsICEhdmFsdWUpOwotICAgICAgICAgIH0pOwotICAgICAgICB9Owot
ICAgICAgfQotICAgIH07Ci0gIH07Ci19KTsKLQotCi0vLyBuZy1zcmMsIG5nLWhyZWYgYXJlIGlu
dGVycG9sYXRlZAotZm9yRWFjaChbJ3NyYycsICdocmVmJ10sIGZ1bmN0aW9uKGF0dHJOYW1lKSB7
Ci0gIHZhciBub3JtYWxpemVkID0gZGlyZWN0aXZlTm9ybWFsaXplKCduZy0nICsgYXR0ck5hbWUp
OwotICBuZ0F0dHJpYnV0ZUFsaWFzRGlyZWN0aXZlc1tub3JtYWxpemVkXSA9IGZ1bmN0aW9uKCkg
ewotICAgIHJldHVybiB7Ci0gICAgICBwcmlvcml0eTogOTksIC8vIGl0IG5lZWRzIHRvIHJ1biBh
ZnRlciB0aGUgYXR0cmlidXRlcyBhcmUgaW50ZXJwb2xhdGVkCi0gICAgICBsaW5rOiBmdW5jdGlv
bihzY29wZSwgZWxlbWVudCwgYXR0cikgewotICAgICAgICBhdHRyLiRvYnNlcnZlKG5vcm1hbGl6
ZWQsIGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgICBhdHRyLiRzZXQoYXR0ck5hbWUsIHZhbHVlKTsKLQotICAg
ICAgICAgIC8vIG9uIElFLCBpZiAibmc6c3JjIiBkaXJlY3RpdmUgZGVjbGFyYXRpb24gaXMgdXNl
ZCBhbmQgInNyYyIgYXR0cmlidXRlIGRvZXNuJ3QgZXhpc3QKLSAgICAgICAgICAvLyB0aGVuIGNh
bGxpbmcgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3NyYycsICdmb28nKSBkb2Vzbid0IGRvIGFueXRo
aW5nLCBzbyB3ZSBuZWVkCi0gICAgICAgICAgLy8gdG8gc2V0IHRoZSBwcm9wZXJ0eSBhcyB3ZWxs
IHRvIGFjaGlldmUgdGhlIGRlc2lyZWQgZWZmZWN0LgotICAgICAgICAgIC8vIHdlIHVzZSBhdHRy
W2F0dHJOYW1lXSB2YWx1ZSBzaW5jZSAkc2V0IGNhbiBzYW5pdGl6ZSB0aGUgdXJsLgotICAgICAg
ICAgIGlmIChtc2llKSBlbGVtZW50LnByb3AoYXR0ck5hbWUsIGF0dHJbYXR0ck5hbWVdKTsKLSAg
ICAgICAgfSk7Ci0gICAgICB9Ci0gICAgfTsKLSAgfTsKLX0pOwotCi12YXIgbnVsbEZvcm1DdHJs
ID0gewotICAkYWRkQ29udHJvbDogbm9vcCwKLSAgJHJlbW92ZUNvbnRyb2w6IG5vb3AsCi0gICRz
ZXRWYWxpZGl0eTogbm9vcCwKLSAgJHNldERpcnR5OiBub29wCi19OwotCi0vKioKLSAqIEBuZ2Rv
YyBvYmplY3QKLSAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpmb3JtLkZvcm1Db250cm9sbGVyCi0gKgot
ICogQHByb3BlcnR5IHtib29sZWFufSAkcHJpc3RpbmUgVHJ1ZSBpZiB1c2VyIGhhcyBub3QgaW50
ZXJhY3RlZCB3aXRoIHRoZSBmb3JtIHlldC4KLSAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gJGRpcnR5
IFRydWUgaWYgdXNlciBoYXMgYWxyZWFkeSBpbnRlcmFjdGVkIHdpdGggdGhlIGZvcm0uCi0gKiBA
cHJvcGVydHkge2Jvb2xlYW59ICR2YWxpZCBUcnVlIGlmIGFsbCBvZiB0aGUgY29udGFpbmluZyBm
b3JtcyBhbmQgY29udHJvbHMgYXJlIHZhbGlkLgotICogQHByb3BlcnR5IHtib29sZWFufSAkaW52
YWxpZCBUcnVlIGlmIGF0IGxlYXN0IG9uZSBjb250YWluaW5nIGNvbnRyb2wgb3IgZm9ybSBpcyBp
bnZhbGlkLgotICoKLSAqIEBwcm9wZXJ0eSB7T2JqZWN0fSAkZXJyb3IgSXMgYW4gb2JqZWN0IGhh
c2gsIGNvbnRhaW5pbmcgcmVmZXJlbmNlcyB0byBhbGwgaW52YWxpZCBjb250cm9scyBvcgotICog
IGZvcm1zLCB3aGVyZToKLSAqCi0gKiAgLSBrZXlzIGFyZSB2YWxpZGF0aW9uIHRva2VucyAoZXJy
b3IgbmFtZXMpIOKAlCBzdWNoIGFzIGByZXF1aXJlZGAsIGB1cmxgIG9yIGBlbWFpbGApLAotICog
IC0gdmFsdWVzIGFyZSBhcnJheXMgb2YgY29udHJvbHMgb3IgZm9ybXMgdGhhdCBhcmUgaW52YWxp
ZCB3aXRoIGdpdmVuIGVycm9yLgotICoKLSAqIEBkZXNjcmlwdGlvbgotICogYEZvcm1Db250cm9s
bGVyYCBrZWVwcyB0cmFjayBvZiBhbGwgaXRzIGNvbnRyb2xzIGFuZCBuZXN0ZWQgZm9ybXMgYXMg
d2VsbCBhcyBzdGF0ZSBvZiB0aGVtLAotICogc3VjaCBhcyBiZWluZyB2YWxpZC9pbnZhbGlkIG9y
IGRpcnR5L3ByaXN0aW5lLgotICoKLSAqIEVhY2gge0BsaW5rIG5nLmRpcmVjdGl2ZTpmb3JtIGZv
cm19IGRpcmVjdGl2ZSBjcmVhdGVzIGFuIGluc3RhbmNlCi0gKiBvZiBgRm9ybUNvbnRyb2xsZXJg
LgotICoKLSAqLwotLy9hc2tzIGZvciAkc2NvcGUgdG8gZm9vbCB0aGUgQkMgY29udHJvbGxlciBt
b2R1bGUKLUZvcm1Db250cm9sbGVyLiRpbmplY3QgPSBbJyRlbGVtZW50JywgJyRhdHRycycsICck
c2NvcGUnXTsKLWZ1bmN0aW9uIEZvcm1Db250cm9sbGVyKGVsZW1lbnQsIGF0dHJzKSB7Ci0gIHZh
ciBmb3JtID0gdGhpcywKLSAgICAgIHBhcmVudEZvcm0gPSBlbGVtZW50LnBhcmVudCgpLmNvbnRy
b2xsZXIoJ2Zvcm0nKSB8fCBudWxsRm9ybUN0cmwsCi0gICAgICBpbnZhbGlkQ291bnQgPSAwLCAv
LyB1c2VkIHRvIGVhc2lseSBkZXRlcm1pbmUgaWYgd2UgYXJlIHZhbGlkCi0gICAgICBlcnJvcnMg
PSBmb3JtLiRlcnJvciA9IHt9OwotCi0gIC8vIGluaXQgc3RhdGUKLSAgZm9ybS4kbmFtZSA9IGF0
dHJzLm5hbWU7Ci0gIGZvcm0uJGRpcnR5ID0gZmFsc2U7Ci0gIGZvcm0uJHByaXN0aW5lID0gdHJ1
ZTsKLSAgZm9ybS4kdmFsaWQgPSB0cnVlOwotICBmb3JtLiRpbnZhbGlkID0gZmFsc2U7Ci0KLSAg
cGFyZW50Rm9ybS4kYWRkQ29udHJvbChmb3JtKTsKLQotICAvLyBTZXR1cCBpbml0aWFsIHN0YXRl
IG9mIHRoZSBjb250cm9sCi0gIGVsZW1lbnQuYWRkQ2xhc3MoUFJJU1RJTkVfQ0xBU1MpOwotICB0
b2dnbGVWYWxpZENzcyh0cnVlKTsKLQotICAvLyBjb252ZW5pZW5jZSBtZXRob2QgZm9yIGVhc3kg
dG9nZ2xpbmcgb2YgY2xhc3NlcwotICBmdW5jdGlvbiB0b2dnbGVWYWxpZENzcyhpc1ZhbGlkLCB2
YWxpZGF0aW9uRXJyb3JLZXkpIHsKLSAgICB2YWxpZGF0aW9uRXJyb3JLZXkgPSB2YWxpZGF0aW9u
RXJyb3JLZXkgPyAnLScgKyBzbmFrZV9jYXNlKHZhbGlkYXRpb25FcnJvcktleSwgJy0nKSA6ICcn
OwotICAgIGVsZW1lbnQuCi0gICAgICByZW1vdmVDbGFzcygoaXNWYWxpZCA/IElOVkFMSURfQ0xB
U1MgOiBWQUxJRF9DTEFTUykgKyB2YWxpZGF0aW9uRXJyb3JLZXkpLgotICAgICAgYWRkQ2xhc3Mo
KGlzVmFsaWQgPyBWQUxJRF9DTEFTUyA6IElOVkFMSURfQ0xBU1MpICsgdmFsaWRhdGlvbkVycm9y
S2V5KTsKLSAgfQotCi0gIGZvcm0uJGFkZENvbnRyb2wgPSBmdW5jdGlvbihjb250cm9sKSB7Ci0g
ICAgaWYgKGNvbnRyb2wuJG5hbWUgJiYgIWZvcm0uaGFzT3duUHJvcGVydHkoY29udHJvbC4kbmFt
ZSkpIHsKLSAgICAgIGZvcm1bY29udHJvbC4kbmFtZV0gPSBjb250cm9sOwotICAgIH0KLSAgfTsK
LQotICBmb3JtLiRyZW1vdmVDb250cm9sID0gZnVuY3Rpb24oY29udHJvbCkgewotICAgIGlmIChj
b250cm9sLiRuYW1lICYmIGZvcm1bY29udHJvbC4kbmFtZV0gPT09IGNvbnRyb2wpIHsKLSAgICAg
IGRlbGV0ZSBmb3JtW2NvbnRyb2wuJG5hbWVdOwotICAgIH0KLSAgICBmb3JFYWNoKGVycm9ycywg
ZnVuY3Rpb24ocXVldWUsIHZhbGlkYXRpb25Ub2tlbikgewotICAgICAgZm9ybS4kc2V0VmFsaWRp
dHkodmFsaWRhdGlvblRva2VuLCB0cnVlLCBjb250cm9sKTsKLSAgICB9KTsKLSAgfTsKLQotICBm
b3JtLiRzZXRWYWxpZGl0eSA9IGZ1bmN0aW9uKHZhbGlkYXRpb25Ub2tlbiwgaXNWYWxpZCwgY29u
dHJvbCkgewotICAgIHZhciBxdWV1ZSA9IGVycm9yc1t2YWxpZGF0aW9uVG9rZW5dOwotCi0gICAg
aWYgKGlzVmFsaWQpIHsKLSAgICAgIGlmIChxdWV1ZSkgewotICAgICAgICBhcnJheVJlbW92ZShx
dWV1ZSwgY29udHJvbCk7Ci0gICAgICAgIGlmICghcXVldWUubGVuZ3RoKSB7Ci0gICAgICAgICAg
aW52YWxpZENvdW50LS07Ci0gICAgICAgICAgaWYgKCFpbnZhbGlkQ291bnQpIHsKLSAgICAgICAg
ICAgIHRvZ2dsZVZhbGlkQ3NzKGlzVmFsaWQpOwotICAgICAgICAgICAgZm9ybS4kdmFsaWQgPSB0
cnVlOwotICAgICAgICAgICAgZm9ybS4kaW52YWxpZCA9IGZhbHNlOwotICAgICAgICAgIH0KLSAg
ICAgICAgICBlcnJvcnNbdmFsaWRhdGlvblRva2VuXSA9IGZhbHNlOwotICAgICAgICAgIHRvZ2ds
ZVZhbGlkQ3NzKHRydWUsIHZhbGlkYXRpb25Ub2tlbik7Ci0gICAgICAgICAgcGFyZW50Rm9ybS4k
c2V0VmFsaWRpdHkodmFsaWRhdGlvblRva2VuLCB0cnVlLCBmb3JtKTsKLSAgICAgICAgfQotICAg
ICAgfQotCi0gICAgfSBlbHNlIHsKLSAgICAgIGlmICghaW52YWxpZENvdW50KSB7Ci0gICAgICAg
IHRvZ2dsZVZhbGlkQ3NzKGlzVmFsaWQpOwotICAgICAgfQotICAgICAgaWYgKHF1ZXVlKSB7Ci0g
ICAgICAgIGlmIChpbmNsdWRlcyhxdWV1ZSwgY29udHJvbCkpIHJldHVybjsKLSAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGVycm9yc1t2YWxpZGF0aW9uVG9rZW5dID0gcXVldWUgPSBbXTsKLSAgICAg
ICAgaW52YWxpZENvdW50Kys7Ci0gICAgICAgIHRvZ2dsZVZhbGlkQ3NzKGZhbHNlLCB2YWxpZGF0
aW9uVG9rZW4pOwotICAgICAgICBwYXJlbnRGb3JtLiRzZXRWYWxpZGl0eSh2YWxpZGF0aW9uVG9r
ZW4sIGZhbHNlLCBmb3JtKTsKLSAgICAgIH0KLSAgICAgIHF1ZXVlLnB1c2goY29udHJvbCk7Ci0K
LSAgICAgIGZvcm0uJHZhbGlkID0gZmFsc2U7Ci0gICAgICBmb3JtLiRpbnZhbGlkID0gdHJ1ZTsK
LSAgICB9Ci0gIH07Ci0KLSAgZm9ybS4kc2V0RGlydHkgPSBmdW5jdGlvbigpIHsKLSAgICBlbGVt
ZW50LnJlbW92ZUNsYXNzKFBSSVNUSU5FX0NMQVNTKS5hZGRDbGFzcyhESVJUWV9DTEFTUyk7Ci0g
ICAgZm9ybS4kZGlydHkgPSB0cnVlOwotICAgIGZvcm0uJHByaXN0aW5lID0gZmFsc2U7Ci0gICAg
cGFyZW50Rm9ybS4kc2V0RGlydHkoKTsKLSAgfTsKLQotfQotCi0KLS8qKgotICogQG5nZG9jIGRp
cmVjdGl2ZQotICogQG5hbWUgbmcuZGlyZWN0aXZlOm5nRm9ybQotICogQHJlc3RyaWN0IEVBQwot
ICoKLSAqIEBkZXNjcmlwdGlvbgotICogTmVzdGFibGUgYWxpYXMgb2Yge0BsaW5rIG5nLmRpcmVj
dGl2ZTpmb3JtIGBmb3JtYH0gZGlyZWN0aXZlLiBIVE1MCi0gKiBkb2VzIG5vdCBhbGxvdyBuZXN0
aW5nIG9mIGZvcm0gZWxlbWVudHMuIEl0IGlzIHVzZWZ1bCB0byBuZXN0IGZvcm1zLCBmb3IgZXhh
bXBsZSBpZiB0aGUgdmFsaWRpdHkgb2YgYQotICogc3ViLWdyb3VwIG9mIGNvbnRyb2xzIG5lZWRz
IHRvIGJlIGRldGVybWluZWQuCi0gKgotICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lfG5nRm9ybSBO
YW1lIG9mIHRoZSBmb3JtLiBJZiBzcGVjaWZpZWQsIHRoZSBmb3JtIGNvbnRyb2xsZXIgd2lsbCBi
ZSBwdWJsaXNoZWQgaW50bwotICogICAgICAgICAgICAgICAgICAgICAgIHJlbGF0ZWQgc2NvcGUs
IHVuZGVyIHRoaXMgbmFtZS4KLSAqCi0gKi8KLQotIC8qKgotICogQG5nZG9jIGRpcmVjdGl2ZQot
ICogQG5hbWUgbmcuZGlyZWN0aXZlOmZvcm0KLSAqIEByZXN0cmljdCBFCi0gKgotICogQGRlc2Ny
aXB0aW9uCi0gKiBEaXJlY3RpdmUgdGhhdCBpbnN0YW50aWF0ZXMKLSAqIHtAbGluayBuZy5kaXJl
Y3RpdmU6Zm9ybS5Gb3JtQ29udHJvbGxlciBGb3JtQ29udHJvbGxlcn0uCi0gKgotICogSWYgYG5h
bWVgIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQsIHRoZSBmb3JtIGNvbnRyb2xsZXIgaXMgcHVibGlz
aGVkIG9udG8gdGhlIGN1cnJlbnQgc2NvcGUgdW5kZXIKLSAqIHRoaXMgbmFtZS4KLSAqCi0gKiAj
IEFsaWFzOiB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nRm9ybSBgbmdGb3JtYH0KLSAqCi0gKiBJbiBh
bmd1bGFyIGZvcm1zIGNhbiBiZSBuZXN0ZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgb3V0ZXIgZm9y
bSBpcyB2YWxpZCB3aGVuIGFsbCBvZiB0aGUgY2hpbGQKLSAqIGZvcm1zIGFyZSB2YWxpZCBhcyB3
ZWxsLiBIb3dldmVyIGJyb3dzZXJzIGRvIG5vdCBhbGxvdyBuZXN0aW5nIG9mIGA8Zm9ybT5gIGVs
ZW1lbnRzLCBmb3IgdGhpcwotICogcmVhc29uIGFuZ3VsYXIgcHJvdmlkZXMge0BsaW5rIG5nLmRp
cmVjdGl2ZTpuZ0Zvcm0gYG5nRm9ybWB9IGFsaWFzCi0gKiB3aGljaCBiZWhhdmVzIGlkZW50aWNh
bCB0byBgPGZvcm0+YCBidXQgYWxsb3dzIGZvcm0gbmVzdGluZy4KLSAqCi0gKgotICogIyBDU1Mg
Y2xhc3NlcwotICogIC0gYG5nLXZhbGlkYCBJcyBzZXQgaWYgdGhlIGZvcm0gaXMgdmFsaWQuCi0g
KiAgLSBgbmctaW52YWxpZGAgSXMgc2V0IGlmIHRoZSBmb3JtIGlzIGludmFsaWQuCi0gKiAgLSBg
bmctcHJpc3RpbmVgIElzIHNldCBpZiB0aGUgZm9ybSBpcyBwcmlzdGluZS4KLSAqICAtIGBuZy1k
aXJ0eWAgSXMgc2V0IGlmIHRoZSBmb3JtIGlzIGRpcnR5LgotICoKLSAqCi0gKiAjIFN1Ym1pdHRp
bmcgYSBmb3JtIGFuZCBwcmV2ZW50aW5nIGRlZmF1bHQgYWN0aW9uCi0gKgotICogU2luY2UgdGhl
IHJvbGUgb2YgZm9ybXMgaW4gY2xpZW50LXNpZGUgQW5ndWxhciBhcHBsaWNhdGlvbnMgaXMgZGlm
ZmVyZW50IHRoYW4gaW4gY2xhc3NpY2FsCi0gKiByb3VuZHRyaXAgYXBwcywgaXQgaXMgZGVzaXJh
YmxlIGZvciB0aGUgYnJvd3NlciBub3QgdG8gdHJhbnNsYXRlIHRoZSBmb3JtIHN1Ym1pc3Npb24g
aW50byBhIGZ1bGwKLSAqIHBhZ2UgcmVsb2FkIHRoYXQgc2VuZHMgdGhlIGRhdGEgdG8gdGhlIHNl
cnZlci4gSW5zdGVhZCBzb21lIGphdmFzY3JpcHQgbG9naWMgc2hvdWxkIGJlIHRyaWdnZXJlZAot
ICogdG8gaGFuZGxlIHRoZSBmb3JtIHN1Ym1pc3Npb24gaW4gYXBwbGljYXRpb24gc3BlY2lmaWMg
d2F5LgotICoKLSAqIEZvciB0aGlzIHJlYXNvbiwgQW5ndWxhciBwcmV2ZW50cyB0aGUgZGVmYXVs
dCBhY3Rpb24gKGZvcm0gc3VibWlzc2lvbiB0byB0aGUgc2VydmVyKSB1bmxlc3MgdGhlCi0gKiBg
PGZvcm0+YCBlbGVtZW50IGhhcyBhbiBgYWN0aW9uYCBhdHRyaWJ1dGUgc3BlY2lmaWVkLgotICoK
LSAqIFlvdSBjYW4gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHR3byB3YXlzIHRvIHNwZWNpZnkg
d2hhdCBqYXZhc2NyaXB0IG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIHdoZW4KLSAqIGEgZm9ybSBp
cyBzdWJtaXR0ZWQ6Ci0gKgotICogLSB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nU3VibWl0IG5nU3Vi
bWl0fSBkaXJlY3RpdmUgb24gdGhlIGZvcm0gZWxlbWVudAotICogLSB7QGxpbmsgbmcuZGlyZWN0
aXZlOm5nQ2xpY2sgbmdDbGlja30gZGlyZWN0aXZlIG9uIHRoZSBmaXJzdAotICAqICBidXR0b24g
b3IgaW5wdXQgZmllbGQgb2YgdHlwZSBzdWJtaXQgKGlucHV0W3R5cGU9c3VibWl0XSkKLSAqCi0g
KiBUbyBwcmV2ZW50IGRvdWJsZSBleGVjdXRpb24gb2YgdGhlIGhhbmRsZXIsIHVzZSBvbmx5IG9u
ZSBvZiBuZ1N1Ym1pdCBvciBuZ0NsaWNrIGRpcmVjdGl2ZXMuIFRoaXMKLSAqIGlzIGJlY2F1c2Ug
b2YgdGhlIGZvbGxvd2luZyBmb3JtIHN1Ym1pc3Npb24gcnVsZXMgY29taW5nIGZyb20gdGhlIGh0
bWwgc3BlYzoKLSAqCi0gKiAtIElmIGEgZm9ybSBoYXMgb25seSBvbmUgaW5wdXQgZmllbGQgdGhl
biBoaXR0aW5nIGVudGVyIGluIHRoaXMgZmllbGQgdHJpZ2dlcnMgZm9ybSBzdWJtaXQKLSAqIChg
bmdTdWJtaXRgKQotICogLSBpZiBhIGZvcm0gaGFzIGhhcyAyKyBpbnB1dCBmaWVsZHMgYW5kIG5v
IGJ1dHRvbnMgb3IgaW5wdXRbdHlwZT1zdWJtaXRdIHRoZW4gaGl0dGluZyBlbnRlcgotICogZG9l
c24ndCB0cmlnZ2VyIHN1Ym1pdAotICogLSBpZiBhIGZvcm0gaGFzIG9uZSBvciBtb3JlIGlucHV0
IGZpZWxkcyBhbmQgb25lIG9yIG1vcmUgYnV0dG9ucyBvciBpbnB1dFt0eXBlPXN1Ym1pdF0gdGhl
bgotICogaGl0dGluZyBlbnRlciBpbiBhbnkgb2YgdGhlIGlucHV0IGZpZWxkcyB3aWxsIHRyaWdn
ZXIgdGhlIGNsaWNrIGhhbmRsZXIgb24gdGhlICpmaXJzdCogYnV0dG9uIG9yCi0gKiBpbnB1dFt0
eXBlPXN1Ym1pdF0gKGBuZ0NsaWNrYCkgKmFuZCogYSBzdWJtaXQgaGFuZGxlciBvbiB0aGUgZW5j
bG9zaW5nIGZvcm0gKGBuZ1N1Ym1pdGApCi0gKgotICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lIE5h
bWUgb2YgdGhlIGZvcm0uIElmIHNwZWNpZmllZCwgdGhlIGZvcm0gY29udHJvbGxlciB3aWxsIGJl
IHB1Ymxpc2hlZCBpbnRvCi0gKiAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRlZCBzY29wZSwg
dW5kZXIgdGhpcyBuYW1lLgotICoKLSAqIEBleGFtcGxlCi0gICAgPGRvYzpleGFtcGxlPgotICAg
ICAgPGRvYzpzb3VyY2U+Ci0gICAgICAgPHNjcmlwdD4KLSAgICAgICAgIGZ1bmN0aW9uIEN0cmwo
JHNjb3BlKSB7Ci0gICAgICAgICAgICRzY29wZS51c2VyVHlwZSA9ICdndWVzdCc7Ci0gICAgICAg
ICB9Ci0gICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgPGZvcm0gbmFtZT0ibXlGb3JtIiBuZy1jb250
cm9sbGVyPSJDdHJsIj4KLSAgICAgICAgIHVzZXJUeXBlOiA8aW5wdXQgbmFtZT0iaW5wdXQiIG5n
LW1vZGVsPSJ1c2VyVHlwZSIgcmVxdWlyZWQ+Ci0gICAgICAgICA8c3BhbiBjbGFzcz0iZXJyb3Ii
IG5nLXNob3c9Im15Rm9ybS5pbnB1dC4kZXJyb3IucmVxdWlyZWQiPlJlcXVpcmVkITwvc3Bhbj48
YnI+Ci0gICAgICAgICA8dHQ+dXNlclR5cGUgPSB7e3VzZXJUeXBlfX08L3R0Pjxicj4KLSAgICAg
ICAgIDx0dD5teUZvcm0uaW5wdXQuJHZhbGlkID0ge3tteUZvcm0uaW5wdXQuJHZhbGlkfX08L3R0
Pjxicj4KLSAgICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJGVycm9yID0ge3tteUZvcm0uaW5wdXQu
JGVycm9yfX08L3R0Pjxicj4KLSAgICAgICAgIDx0dD5teUZvcm0uJHZhbGlkID0ge3tteUZvcm0u
JHZhbGlkfX08L3R0Pjxicj4KLSAgICAgICAgIDx0dD5teUZvcm0uJGVycm9yLnJlcXVpcmVkID0g
e3shIW15Rm9ybS4kZXJyb3IucmVxdWlyZWR9fTwvdHQ+PGJyPgotICAgICAgICA8L2Zvcm0+Ci0g
ICAgICA8L2RvYzpzb3VyY2U+Ci0gICAgICA8ZG9jOnNjZW5hcmlvPgotICAgICAgICBpdCgnc2hv
dWxkIGluaXRpYWxpemUgdG8gbW9kZWwnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgIGV4cGVjdChi
aW5kaW5nKCd1c2VyVHlwZScpKS50b0VxdWFsKCdndWVzdCcpOwotICAgICAgICAgZXhwZWN0KGJp
bmRpbmcoJ215Rm9ybS5pbnB1dC4kdmFsaWQnKSkudG9FcXVhbCgndHJ1ZScpOwotICAgICAgICB9
KTsKLQotICAgICAgICBpdCgnc2hvdWxkIGJlIGludmFsaWQgaWYgZW1wdHknLCBmdW5jdGlvbigp
IHsKLSAgICAgICAgIGlucHV0KCd1c2VyVHlwZScpLmVudGVyKCcnKTsKLSAgICAgICAgIGV4cGVj
dChiaW5kaW5nKCd1c2VyVHlwZScpKS50b0VxdWFsKCcnKTsKLSAgICAgICAgIGV4cGVjdChiaW5k
aW5nKCdteUZvcm0uaW5wdXQuJHZhbGlkJykpLnRvRXF1YWwoJ2ZhbHNlJyk7Ci0gICAgICAgIH0p
OwotICAgICAgPC9kb2M6c2NlbmFyaW8+Ci0gICAgPC9kb2M6ZXhhbXBsZT4KLSAqLwotdmFyIGZv
cm1EaXJlY3RpdmVGYWN0b3J5ID0gZnVuY3Rpb24oaXNOZ0Zvcm0pIHsKLSAgcmV0dXJuIFsnJHRp
bWVvdXQnLCBmdW5jdGlvbigkdGltZW91dCkgewotICAgIHZhciBmb3JtRGlyZWN0aXZlID0gewot
ICAgICAgbmFtZTogJ2Zvcm0nLAotICAgICAgcmVzdHJpY3Q6ICdFJywKLSAgICAgIGNvbnRyb2xs
ZXI6IEZvcm1Db250cm9sbGVyLAotICAgICAgY29tcGlsZTogZnVuY3Rpb24oKSB7Ci0gICAgICAg
IHJldHVybiB7Ci0gICAgICAgICAgcHJlOiBmdW5jdGlvbihzY29wZSwgZm9ybUVsZW1lbnQsIGF0
dHIsIGNvbnRyb2xsZXIpIHsKLSAgICAgICAgICAgIGlmICghYXR0ci5hY3Rpb24pIHsKLSAgICAg
ICAgICAgICAgLy8gd2UgY2FuJ3QgdXNlIGpxIGV2ZW50cyBiZWNhdXNlIGlmIGEgZm9ybSBpcyBk
ZXN0cm95ZWQgZHVyaW5nIHN1Ym1pc3Npb24gdGhlIGRlZmF1bHQKLSAgICAgICAgICAgICAgLy8g
YWN0aW9uIGlzIG5vdCBwcmV2ZW50ZWQuIHNlZSAjMTIzOAotICAgICAgICAgICAgICAvLwotICAg
ICAgICAgICAgICAvLyBJRSA5IGlzIG5vdCBhZmZlY3RlZCBiZWNhdXNlIGl0IGRvZXNuJ3QgZmly
ZSBhIHN1Ym1pdCBldmVudCBhbmQgdHJ5IHRvIGRvIGEgZnVsbAotICAgICAgICAgICAgICAvLyBw
YWdlIHJlbG9hZCBpZiB0aGUgZm9ybSB3YXMgZGVzdHJveWVkIGJ5IHN1Ym1pc3Npb24gb2YgdGhl
IGZvcm0gdmlhIGEgY2xpY2sgaGFuZGxlcgotICAgICAgICAgICAgICAvLyBvbiBhIGJ1dHRvbiBp
biB0aGUgZm9ybS4gTG9va3MgbGlrZSBhbiBJRTkgc3BlY2lmaWMgYnVnLgotICAgICAgICAgICAg
ICB2YXIgcHJldmVudERlZmF1bHRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgICAg
ICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQKLSAgICAgICAgICAgICAgICAgID8gZXZlbnQu
cHJldmVudERlZmF1bHQoKQotICAgICAgICAgICAgICAgICAgOiBldmVudC5yZXR1cm5WYWx1ZSA9
IGZhbHNlOyAvLyBJRQotICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgIGFkZEV2ZW50
TGlzdGVuZXJGbihmb3JtRWxlbWVudFswXSwgJ3N1Ym1pdCcsIHByZXZlbnREZWZhdWx0TGlzdGVu
ZXIpOwotCi0gICAgICAgICAgICAgIC8vIHVucmVnaXN0ZXIgdGhlIHByZXZlbnREZWZhdWx0IGxp
c3RlbmVyIHNvIHRoYXQgd2UgZG9uJ3Qgbm90IGxlYWsgbWVtb3J5IGJ1dCBpbiBhCi0gICAgICAg
ICAgICAgIC8vIHdheSB0aGF0IHdpbGwgYWNoaWV2ZSB0aGUgcHJldmVudGlvbiBvZiB0aGUgZGVm
YXVsdCBhY3Rpb24uCi0gICAgICAgICAgICAgIGZvcm1FbGVtZW50LmJpbmQoJyRkZXN0cm95Jywg
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgJHRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyRm4oZm9ybUVsZW1lbnRbMF0sICdzdWJt
aXQnLCBwcmV2ZW50RGVmYXVsdExpc3RlbmVyKTsKLSAgICAgICAgICAgICAgICB9LCAwLCBmYWxz
ZSk7Ci0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIg
cGFyZW50Rm9ybUN0cmwgPSBmb3JtRWxlbWVudC5wYXJlbnQoKS5jb250cm9sbGVyKCdmb3JtJyks
Ci0gICAgICAgICAgICAgICAgYWxpYXMgPSBhdHRyLm5hbWUgfHwgYXR0ci5uZ0Zvcm07Ci0KLSAg
ICAgICAgICAgIGlmIChhbGlhcykgewotICAgICAgICAgICAgICBzY29wZVthbGlhc10gPSBjb250
cm9sbGVyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHBhcmVudEZvcm1DdHJsKSB7
Ci0gICAgICAgICAgICAgIGZvcm1FbGVtZW50LmJpbmQoJyRkZXN0cm95JywgZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICAgICAgcGFyZW50Rm9ybUN0cmwuJHJlbW92ZUNvbnRyb2woY29udHJvbGxl
cik7Ci0gICAgICAgICAgICAgICAgaWYgKGFsaWFzKSB7Ci0gICAgICAgICAgICAgICAgICBzY29w
ZVthbGlhc10gPSB1bmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGV4dGVuZChjb250cm9sbGVyLCBudWxsRm9ybUN0cmwpOyAvL3N0b3AgcHJvcGFnYXRpbmcgY2hp
bGQgZGVzdHJ1Y3Rpb24gaGFuZGxlcnMgdXB3YXJkcwotICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICB9Ci0gICAgfTsKLQotICAg
IHJldHVybiBpc05nRm9ybSA/IGV4dGVuZChjb3B5KGZvcm1EaXJlY3RpdmUpLCB7cmVzdHJpY3Q6
ICdFQUMnfSkgOiBmb3JtRGlyZWN0aXZlOwotICB9XTsKLX07Ci0KLXZhciBmb3JtRGlyZWN0aXZl
ID0gZm9ybURpcmVjdGl2ZUZhY3RvcnkoKTsKLXZhciBuZ0Zvcm1EaXJlY3RpdmUgPSBmb3JtRGly
ZWN0aXZlRmFjdG9yeSh0cnVlKTsKLQotdmFyIFVSTF9SRUdFWFAgPSAvXihmdHB8aHR0cHxodHRw
cyk6XC9cLyhcdys6ezAsMX1cdypAKT8oXFMrKSg6WzAtOV0rKT8oXC98XC8oW1x3IyE6Lj8rPSYl
QCFcLVwvXSkpPyQvOwotdmFyIEVNQUlMX1JFR0VYUCA9IC9eW0EtWmEtejAtOS5fJSstXStAW0Et
WmEtejAtOS4tXStcLltBLVphLXpdezIsNH0kLzsKLXZhciBOVU1CRVJfUkVHRVhQID0gL15ccyoo
XC18XCspPyhcZCt8KFxkKihcLlxkKikpKVxzKiQvOwotCi12YXIgaW5wdXRUeXBlID0gewotCi0g
IC8qKgotICAgKiBAbmdkb2MgaW5wdXRUeXBlCi0gICAqIEBuYW1lIG5nLmRpcmVjdGl2ZTppbnB1
dC50ZXh0Ci0gICAqCi0gICAqIEBkZXNjcmlwdGlvbgotICAgKiBTdGFuZGFyZCBIVE1MIHRleHQg
aW5wdXQgd2l0aCBhbmd1bGFyIGRhdGEgYmluZGluZy4KLSAgICoKLSAgICogQHBhcmFtIHtzdHJp
bmd9IG5nTW9kZWwgQXNzaWduYWJsZSBhbmd1bGFyIGV4cHJlc3Npb24gdG8gZGF0YS1iaW5kIHRv
LgotICAgKiBAcGFyYW0ge3N0cmluZz19IG5hbWUgUHJvcGVydHkgbmFtZSBvZiB0aGUgZm9ybSB1
bmRlciB3aGljaCB0aGUgY29udHJvbCBpcyBwdWJsaXNoZWQuCi0gICAqIEBwYXJhbSB7c3RyaW5n
PX0gcmVxdWlyZWQgQWRkcyBgcmVxdWlyZWRgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2
YWx1ZSBpcyBub3QgZW50ZXJlZC4KLSAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ1JlcXVpcmVkIEFk
ZHMgYHJlcXVpcmVkYCBhdHRyaWJ1dGUgYW5kIGByZXF1aXJlZGAgdmFsaWRhdGlvbiBjb25zdHJh
aW50IHRvCi0gICAqICAgIHRoZSBlbGVtZW50IHdoZW4gdGhlIG5nUmVxdWlyZWQgZXhwcmVzc2lv
biBldmFsdWF0ZXMgdG8gdHJ1ZS4gVXNlIGBuZ1JlcXVpcmVkYCBpbnN0ZWFkIG9mCi0gICAqICAg
IGByZXF1aXJlZGAgd2hlbiB5b3Ugd2FudCB0byBkYXRhLWJpbmQgdG8gdGhlIGByZXF1aXJlZGAg
YXR0cmlidXRlLgotICAgKiBAcGFyYW0ge251bWJlcj19IG5nTWlubGVuZ3RoIFNldHMgYG1pbmxl
bmd0aGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIHNob3J0ZXIgdGhhbgot
ICAgKiAgICBtaW5sZW5ndGguCi0gICAqIEBwYXJhbSB7bnVtYmVyPX0gbmdNYXhsZW5ndGggU2V0
cyBgbWF4bGVuZ3RoYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgbG9uZ2Vy
IHRoYW4KLSAgICogICAgbWF4bGVuZ3RoLgotICAgKiBAcGFyYW0ge3N0cmluZz19IG5nUGF0dGVy
biBTZXRzIGBwYXR0ZXJuYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgZG9lcyBu
b3QgbWF0Y2ggdGhlCi0gICAqICAgIFJlZ0V4cCBwYXR0ZXJuIGV4cHJlc3Npb24uIEV4cGVjdGVk
IHZhbHVlIGlzIGAvcmVnZXhwL2AgZm9yIGlubGluZSBwYXR0ZXJucyBvciBgcmVnZXhwYCBmb3IK
LSAgICogICAgcGF0dGVybnMgZGVmaW5lZCBhcyBzY29wZSBleHByZXNzaW9ucy4KLSAgICogQHBh
cmFtIHtzdHJpbmc9fSBuZ0NoYW5nZSBBbmd1bGFyIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWQg
d2hlbiBpbnB1dCBjaGFuZ2VzIGR1ZSB0byB1c2VyCi0gICAqICAgIGludGVyYWN0aW9uIHdpdGgg
dGhlIGlucHV0IGVsZW1lbnQuCi0gICAqCi0gICAqIEBleGFtcGxlCi0gICAgICA8ZG9jOmV4YW1w
bGU+Ci0gICAgICAgIDxkb2M6c291cmNlPgotICAgICAgICAgPHNjcmlwdD4KLSAgICAgICAgICAg
ZnVuY3Rpb24gQ3RybCgkc2NvcGUpIHsKLSAgICAgICAgICAgICAkc2NvcGUudGV4dCA9ICdndWVz
dCc7Ci0gICAgICAgICAgICAgJHNjb3BlLndvcmQgPSAvXlx3KiQvOwotICAgICAgICAgICB9Ci0g
ICAgICAgICA8L3NjcmlwdD4KLSAgICAgICAgIDxmb3JtIG5hbWU9Im15Rm9ybSIgbmctY29udHJv
bGxlcj0iQ3RybCI+Ci0gICAgICAgICAgIFNpbmdsZSB3b3JkOiA8aW5wdXQgdHlwZT0idGV4dCIg
bmFtZT0iaW5wdXQiIG5nLW1vZGVsPSJ0ZXh0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5nLXBhdHRlcm49IndvcmQiIHJlcXVpcmVkPgotICAgICAgICAgICA8c3BhbiBjbGFzcz0i
ZXJyb3IiIG5nLXNob3c9Im15Rm9ybS5pbnB1dC4kZXJyb3IucmVxdWlyZWQiPgotICAgICAgICAg
ICAgIFJlcXVpcmVkITwvc3Bhbj4KLSAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVycm9yIiBuZy1z
aG93PSJteUZvcm0uaW5wdXQuJGVycm9yLnBhdHRlcm4iPgotICAgICAgICAgICAgIFNpbmdsZSB3
b3JkIG9ubHkhPC9zcGFuPgotCi0gICAgICAgICAgIDx0dD50ZXh0ID0ge3t0ZXh0fX08L3R0Pjxi
ci8+Ci0gICAgICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJHZhbGlkID0ge3tteUZvcm0uaW5wdXQu
JHZhbGlkfX08L3R0Pjxici8+Ci0gICAgICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJGVycm9yID0g
e3tteUZvcm0uaW5wdXQuJGVycm9yfX08L3R0Pjxici8+Ci0gICAgICAgICAgIDx0dD5teUZvcm0u
JHZhbGlkID0ge3tteUZvcm0uJHZhbGlkfX08L3R0Pjxici8+Ci0gICAgICAgICAgIDx0dD5teUZv
cm0uJGVycm9yLnJlcXVpcmVkID0ge3shIW15Rm9ybS4kZXJyb3IucmVxdWlyZWR9fTwvdHQ+PGJy
Lz4KLSAgICAgICAgICA8L2Zvcm0+Ci0gICAgICAgIDwvZG9jOnNvdXJjZT4KLSAgICAgICAgPGRv
YzpzY2VuYXJpbz4KLSAgICAgICAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgdG8gbW9kZWwnLCBm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCd0ZXh0JykpLnRvRXF1YWwo
J2d1ZXN0Jyk7Ci0gICAgICAgICAgICBleHBlY3QoYmluZGluZygnbXlGb3JtLmlucHV0LiR2YWxp
ZCcpKS50b0VxdWFsKCd0cnVlJyk7Ci0gICAgICAgICAgfSk7Ci0KLSAgICAgICAgICBpdCgnc2hv
dWxkIGJlIGludmFsaWQgaWYgZW1wdHknLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIGlucHV0
KCd0ZXh0JykuZW50ZXIoJycpOwotICAgICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ3RleHQnKSku
dG9FcXVhbCgnJyk7Ci0gICAgICAgICAgICBleHBlY3QoYmluZGluZygnbXlGb3JtLmlucHV0LiR2
YWxpZCcpKS50b0VxdWFsKCdmYWxzZScpOwotICAgICAgICAgIH0pOwotCi0gICAgICAgICAgaXQo
J3Nob3VsZCBiZSBpbnZhbGlkIGlmIG11bHRpIHdvcmQnLCBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgIGlucHV0KCd0ZXh0JykuZW50ZXIoJ2hlbGxvIHdvcmxkJyk7Ci0gICAgICAgICAgICBleHBl
Y3QoYmluZGluZygnbXlGb3JtLmlucHV0LiR2YWxpZCcpKS50b0VxdWFsKCdmYWxzZScpOwotICAg
ICAgICAgIH0pOwotICAgICAgICA8L2RvYzpzY2VuYXJpbz4KLSAgICAgIDwvZG9jOmV4YW1wbGU+
Ci0gICAqLwotICAndGV4dCc6IHRleHRJbnB1dFR5cGUsCi0KLQotICAvKioKLSAgICogQG5nZG9j
IGlucHV0VHlwZQotICAgKiBAbmFtZSBuZy5kaXJlY3RpdmU6aW5wdXQubnVtYmVyCi0gICAqCi0g
ICAqIEBkZXNjcmlwdGlvbgotICAgKiBUZXh0IGlucHV0IHdpdGggbnVtYmVyIHZhbGlkYXRpb24g
YW5kIHRyYW5zZm9ybWF0aW9uLiBTZXRzIHRoZSBgbnVtYmVyYCB2YWxpZGF0aW9uCi0gICAqIGVy
cm9yIGlmIG5vdCBhIHZhbGlkIG51bWJlci4KLSAgICoKLSAgICogQHBhcmFtIHtzdHJpbmd9IG5n
TW9kZWwgQXNzaWduYWJsZSBhbmd1bGFyIGV4cHJlc3Npb24gdG8gZGF0YS1iaW5kIHRvLgotICAg
KiBAcGFyYW0ge3N0cmluZz19IG5hbWUgUHJvcGVydHkgbmFtZSBvZiB0aGUgZm9ybSB1bmRlciB3
aGljaCB0aGUgY29udHJvbCBpcyBwdWJsaXNoZWQuCi0gICAqIEBwYXJhbSB7c3RyaW5nPX0gbWlu
IFNldHMgdGhlIGBtaW5gIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBlbnRlcmVk
IGlzIGxlc3MgdGhhbiBgbWluYC4KLSAgICogQHBhcmFtIHtzdHJpbmc9fSBtYXggU2V0cyB0aGUg
YG1heGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGVudGVyZWQgaXMgZ3JlYXRl
ciB0aGFuIGBtYXhgLgotICAgKiBAcGFyYW0ge3N0cmluZz19IHJlcXVpcmVkIFNldHMgYHJlcXVp
cmVkYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgbm90IGVudGVyZWQuCi0g
ICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdSZXF1aXJlZCBBZGRzIGByZXF1aXJlZGAgYXR0cmlidXRl
IGFuZCBgcmVxdWlyZWRgIHZhbGlkYXRpb24gY29uc3RyYWludCB0bwotICAgKiAgICB0aGUgZWxl
bWVudCB3aGVuIHRoZSBuZ1JlcXVpcmVkIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRydWUuIFVz
ZSBgbmdSZXF1aXJlZGAgaW5zdGVhZCBvZgotICAgKiAgICBgcmVxdWlyZWRgIHdoZW4geW91IHdh
bnQgdG8gZGF0YS1iaW5kIHRvIHRoZSBgcmVxdWlyZWRgIGF0dHJpYnV0ZS4KLSAgICogQHBhcmFt
IHtudW1iZXI9fSBuZ01pbmxlbmd0aCBTZXRzIGBtaW5sZW5ndGhgIHZhbGlkYXRpb24gZXJyb3Ig
a2V5IGlmIHRoZSB2YWx1ZSBpcyBzaG9ydGVyIHRoYW4KLSAgICogICAgbWlubGVuZ3RoLgotICAg
KiBAcGFyYW0ge251bWJlcj19IG5nTWF4bGVuZ3RoIFNldHMgYG1heGxlbmd0aGAgdmFsaWRhdGlv
biBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIGxvbmdlciB0aGFuCi0gICAqICAgIG1heGxlbmd0
aC4KLSAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ1BhdHRlcm4gU2V0cyBgcGF0dGVybmAgdmFsaWRh
dGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGRvZXMgbm90IG1hdGNoIHRoZQotICAgKiAgICBS
ZWdFeHAgcGF0dGVybiBleHByZXNzaW9uLiBFeHBlY3RlZCB2YWx1ZSBpcyBgL3JlZ2V4cC9gIGZv
ciBpbmxpbmUgcGF0dGVybnMgb3IgYHJlZ2V4cGAgZm9yCi0gICAqICAgIHBhdHRlcm5zIGRlZmlu
ZWQgYXMgc2NvcGUgZXhwcmVzc2lvbnMuCi0gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdDaGFuZ2Ug
QW5ndWxhciBleHByZXNzaW9uIHRvIGJlIGV4ZWN1dGVkIHdoZW4gaW5wdXQgY2hhbmdlcyBkdWUg
dG8gdXNlcgotICAgKiAgICBpbnRlcmFjdGlvbiB3aXRoIHRoZSBpbnB1dCBlbGVtZW50LgotICAg
KgotICAgKiBAZXhhbXBsZQotICAgICAgPGRvYzpleGFtcGxlPgotICAgICAgICA8ZG9jOnNvdXJj
ZT4KLSAgICAgICAgIDxzY3JpcHQ+Ci0gICAgICAgICAgIGZ1bmN0aW9uIEN0cmwoJHNjb3BlKSB7
Ci0gICAgICAgICAgICAgJHNjb3BlLnZhbHVlID0gMTI7Ci0gICAgICAgICAgIH0KLSAgICAgICAg
IDwvc2NyaXB0PgotICAgICAgICAgPGZvcm0gbmFtZT0ibXlGb3JtIiBuZy1jb250cm9sbGVyPSJD
dHJsIj4KLSAgICAgICAgICAgTnVtYmVyOiA8aW5wdXQgdHlwZT0ibnVtYmVyIiBuYW1lPSJpbnB1
dCIgbmctbW9kZWw9InZhbHVlIgotICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49IjAiIG1h
eD0iOTkiIHJlcXVpcmVkPgotICAgICAgICAgICA8c3BhbiBjbGFzcz0iZXJyb3IiIG5nLXNob3c9
Im15Rm9ybS5saXN0LiRlcnJvci5yZXF1aXJlZCI+Ci0gICAgICAgICAgICAgUmVxdWlyZWQhPC9z
cGFuPgotICAgICAgICAgICA8c3BhbiBjbGFzcz0iZXJyb3IiIG5nLXNob3c9Im15Rm9ybS5saXN0
LiRlcnJvci5udW1iZXIiPgotICAgICAgICAgICAgIE5vdCB2YWxpZCBudW1iZXIhPC9zcGFuPgot
ICAgICAgICAgICA8dHQ+dmFsdWUgPSB7e3ZhbHVlfX08L3R0Pjxici8+Ci0gICAgICAgICAgIDx0
dD5teUZvcm0uaW5wdXQuJHZhbGlkID0ge3tteUZvcm0uaW5wdXQuJHZhbGlkfX08L3R0Pjxici8+
Ci0gICAgICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJGVycm9yID0ge3tteUZvcm0uaW5wdXQuJGVy
cm9yfX08L3R0Pjxici8+Ci0gICAgICAgICAgIDx0dD5teUZvcm0uJHZhbGlkID0ge3tteUZvcm0u
JHZhbGlkfX08L3R0Pjxici8+Ci0gICAgICAgICAgIDx0dD5teUZvcm0uJGVycm9yLnJlcXVpcmVk
ID0ge3shIW15Rm9ybS4kZXJyb3IucmVxdWlyZWR9fTwvdHQ+PGJyLz4KLSAgICAgICAgICA8L2Zv
cm0+Ci0gICAgICAgIDwvZG9jOnNvdXJjZT4KLSAgICAgICAgPGRvYzpzY2VuYXJpbz4KLSAgICAg
ICAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgdG8gbW9kZWwnLCBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgZXhwZWN0KGJpbmRpbmcoJ3ZhbHVlJykpLnRvRXF1YWwoJzEyJyk7Ci0gICAgICAgICAg
IGV4cGVjdChiaW5kaW5nKCdteUZvcm0uaW5wdXQuJHZhbGlkJykpLnRvRXF1YWwoJ3RydWUnKTsK
LSAgICAgICAgICB9KTsKLQotICAgICAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBlbXB0
eScsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICBpbnB1dCgndmFsdWUnKS5lbnRlcignJyk7Ci0g
ICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCd2YWx1ZScpKS50b0VxdWFsKCcnKTsKLSAgICAgICAg
ICAgZXhwZWN0KGJpbmRpbmcoJ215Rm9ybS5pbnB1dC4kdmFsaWQnKSkudG9FcXVhbCgnZmFsc2Un
KTsKLSAgICAgICAgICB9KTsKLQotICAgICAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBv
dmVyIG1heCcsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICBpbnB1dCgndmFsdWUnKS5lbnRlcign
MTIzJyk7Ci0gICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCd2YWx1ZScpKS50b0VxdWFsKCcnKTsK
LSAgICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ215Rm9ybS5pbnB1dC4kdmFsaWQnKSkudG9FcXVh
bCgnZmFsc2UnKTsKLSAgICAgICAgICB9KTsKLSAgICAgICAgPC9kb2M6c2NlbmFyaW8+Ci0gICAg
ICA8L2RvYzpleGFtcGxlPgotICAgKi8KLSAgJ251bWJlcic6IG51bWJlcklucHV0VHlwZSwKLQot
Ci0gIC8qKgotICAgKiBAbmdkb2MgaW5wdXRUeXBlCi0gICAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpp
bnB1dC51cmwKLSAgICoKLSAgICogQGRlc2NyaXB0aW9uCi0gICAqIFRleHQgaW5wdXQgd2l0aCBV
UkwgdmFsaWRhdGlvbi4gU2V0cyB0aGUgYHVybGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhl
IGNvbnRlbnQgaXMgbm90IGEKLSAgICogdmFsaWQgVVJMLgotICAgKgotICAgKiBAcGFyYW0ge3N0
cmluZ30gbmdNb2RlbCBBc3NpZ25hYmxlIGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBkYXRhLWJpbmQg
dG8uCi0gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmFtZSBQcm9wZXJ0eSBuYW1lIG9mIHRoZSBmb3Jt
IHVuZGVyIHdoaWNoIHRoZSBjb250cm9sIGlzIHB1Ymxpc2hlZC4KLSAgICogQHBhcmFtIHtzdHJp
bmc9fSByZXF1aXJlZCBTZXRzIGByZXF1aXJlZGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhl
IHZhbHVlIGlzIG5vdCBlbnRlcmVkLgotICAgKiBAcGFyYW0ge3N0cmluZz19IG5nUmVxdWlyZWQg
QWRkcyBgcmVxdWlyZWRgIGF0dHJpYnV0ZSBhbmQgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGNvbnN0
cmFpbnQgdG8KLSAgICogICAgdGhlIGVsZW1lbnQgd2hlbiB0aGUgbmdSZXF1aXJlZCBleHByZXNz
aW9uIGV2YWx1YXRlcyB0byB0cnVlLiBVc2UgYG5nUmVxdWlyZWRgIGluc3RlYWQgb2YKLSAgICog
ICAgYHJlcXVpcmVkYCB3aGVuIHlvdSB3YW50IHRvIGRhdGEtYmluZCB0byB0aGUgYHJlcXVpcmVk
YCBhdHRyaWJ1dGUuCi0gICAqIEBwYXJhbSB7bnVtYmVyPX0gbmdNaW5sZW5ndGggU2V0cyBgbWlu
bGVuZ3RoYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgc2hvcnRlciB0aGFu
Ci0gICAqICAgIG1pbmxlbmd0aC4KLSAgICogQHBhcmFtIHtudW1iZXI9fSBuZ01heGxlbmd0aCBT
ZXRzIGBtYXhsZW5ndGhgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBsb25n
ZXIgdGhhbgotICAgKiAgICBtYXhsZW5ndGguCi0gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdQYXR0
ZXJuIFNldHMgYHBhdHRlcm5gIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBkb2Vz
IG5vdCBtYXRjaCB0aGUKLSAgICogICAgUmVnRXhwIHBhdHRlcm4gZXhwcmVzc2lvbi4gRXhwZWN0
ZWQgdmFsdWUgaXMgYC9yZWdleHAvYCBmb3IgaW5saW5lIHBhdHRlcm5zIG9yIGByZWdleHBgIGZv
cgotICAgKiAgICBwYXR0ZXJucyBkZWZpbmVkIGFzIHNjb3BlIGV4cHJlc3Npb25zLgotICAgKiBA
cGFyYW0ge3N0cmluZz19IG5nQ2hhbmdlIEFuZ3VsYXIgZXhwcmVzc2lvbiB0byBiZSBleGVjdXRl
ZCB3aGVuIGlucHV0IGNoYW5nZXMgZHVlIHRvIHVzZXIKLSAgICogICAgaW50ZXJhY3Rpb24gd2l0
aCB0aGUgaW5wdXQgZWxlbWVudC4KLSAgICoKLSAgICogQGV4YW1wbGUKLSAgICAgIDxkb2M6ZXhh
bXBsZT4KLSAgICAgICAgPGRvYzpzb3VyY2U+Ci0gICAgICAgICA8c2NyaXB0PgotICAgICAgICAg
ICBmdW5jdGlvbiBDdHJsKCRzY29wZSkgewotICAgICAgICAgICAgICRzY29wZS50ZXh0ID0gJ2h0
dHA6Ly9nb29nbGUuY29tJzsKLSAgICAgICAgICAgfQotICAgICAgICAgPC9zY3JpcHQ+Ci0gICAg
ICAgICA8Zm9ybSBuYW1lPSJteUZvcm0iIG5nLWNvbnRyb2xsZXI9IkN0cmwiPgotICAgICAgICAg
ICBVUkw6IDxpbnB1dCB0eXBlPSJ1cmwiIG5hbWU9ImlucHV0IiBuZy1tb2RlbD0idGV4dCIgcmVx
dWlyZWQ+Ci0gICAgICAgICAgIDxzcGFuIGNsYXNzPSJlcnJvciIgbmctc2hvdz0ibXlGb3JtLmlu
cHV0LiRlcnJvci5yZXF1aXJlZCI+Ci0gICAgICAgICAgICAgUmVxdWlyZWQhPC9zcGFuPgotICAg
ICAgICAgICA8c3BhbiBjbGFzcz0iZXJyb3IiIG5nLXNob3c9Im15Rm9ybS5pbnB1dC4kZXJyb3Iu
dXJsIj4KLSAgICAgICAgICAgICBOb3QgdmFsaWQgdXJsITwvc3Bhbj4KLSAgICAgICAgICAgPHR0
PnRleHQgPSB7e3RleHR9fTwvdHQ+PGJyLz4KLSAgICAgICAgICAgPHR0Pm15Rm9ybS5pbnB1dC4k
dmFsaWQgPSB7e215Rm9ybS5pbnB1dC4kdmFsaWR9fTwvdHQ+PGJyLz4KLSAgICAgICAgICAgPHR0
Pm15Rm9ybS5pbnB1dC4kZXJyb3IgPSB7e215Rm9ybS5pbnB1dC4kZXJyb3J9fTwvdHQ+PGJyLz4K
LSAgICAgICAgICAgPHR0Pm15Rm9ybS4kdmFsaWQgPSB7e215Rm9ybS4kdmFsaWR9fTwvdHQ+PGJy
Lz4KLSAgICAgICAgICAgPHR0Pm15Rm9ybS4kZXJyb3IucmVxdWlyZWQgPSB7eyEhbXlGb3JtLiRl
cnJvci5yZXF1aXJlZH19PC90dD48YnIvPgotICAgICAgICAgICA8dHQ+bXlGb3JtLiRlcnJvci51
cmwgPSB7eyEhbXlGb3JtLiRlcnJvci51cmx9fTwvdHQ+PGJyLz4KLSAgICAgICAgICA8L2Zvcm0+
Ci0gICAgICAgIDwvZG9jOnNvdXJjZT4KLSAgICAgICAgPGRvYzpzY2VuYXJpbz4KLSAgICAgICAg
ICBpdCgnc2hvdWxkIGluaXRpYWxpemUgdG8gbW9kZWwnLCBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgIGV4cGVjdChiaW5kaW5nKCd0ZXh0JykpLnRvRXF1YWwoJ2h0dHA6Ly9nb29nbGUuY29tJyk7
Ci0gICAgICAgICAgICBleHBlY3QoYmluZGluZygnbXlGb3JtLmlucHV0LiR2YWxpZCcpKS50b0Vx
dWFsKCd0cnVlJyk7Ci0gICAgICAgICAgfSk7Ci0KLSAgICAgICAgICBpdCgnc2hvdWxkIGJlIGlu
dmFsaWQgaWYgZW1wdHknLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIGlucHV0KCd0ZXh0Jyku
ZW50ZXIoJycpOwotICAgICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ3RleHQnKSkudG9FcXVhbCgn
Jyk7Ci0gICAgICAgICAgICBleHBlY3QoYmluZGluZygnbXlGb3JtLmlucHV0LiR2YWxpZCcpKS50
b0VxdWFsKCdmYWxzZScpOwotICAgICAgICAgIH0pOwotCi0gICAgICAgICAgaXQoJ3Nob3VsZCBi
ZSBpbnZhbGlkIGlmIG5vdCB1cmwnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIGlucHV0KCd0
ZXh0JykuZW50ZXIoJ3h4eCcpOwotICAgICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ215Rm9ybS5p
bnB1dC4kdmFsaWQnKSkudG9FcXVhbCgnZmFsc2UnKTsKLSAgICAgICAgICB9KTsKLSAgICAgICAg
PC9kb2M6c2NlbmFyaW8+Ci0gICAgICA8L2RvYzpleGFtcGxlPgotICAgKi8KLSAgJ3VybCc6IHVy
bElucHV0VHlwZSwKLQotCi0gIC8qKgotICAgKiBAbmdkb2MgaW5wdXRUeXBlCi0gICAqIEBuYW1l
IG5nLmRpcmVjdGl2ZTppbnB1dC5lbWFpbAotICAgKgotICAgKiBAZGVzY3JpcHRpb24KLSAgICog
VGV4dCBpbnB1dCB3aXRoIGVtYWlsIHZhbGlkYXRpb24uIFNldHMgdGhlIGBlbWFpbGAgdmFsaWRh
dGlvbiBlcnJvciBrZXkgaWYgbm90IGEgdmFsaWQgZW1haWwKLSAgICogYWRkcmVzcy4KLSAgICoK
LSAgICogQHBhcmFtIHtzdHJpbmd9IG5nTW9kZWwgQXNzaWduYWJsZSBhbmd1bGFyIGV4cHJlc3Np
b24gdG8gZGF0YS1iaW5kIHRvLgotICAgKiBAcGFyYW0ge3N0cmluZz19IG5hbWUgUHJvcGVydHkg
bmFtZSBvZiB0aGUgZm9ybSB1bmRlciB3aGljaCB0aGUgY29udHJvbCBpcyBwdWJsaXNoZWQuCi0g
ICAqIEBwYXJhbSB7c3RyaW5nPX0gcmVxdWlyZWQgU2V0cyBgcmVxdWlyZWRgIHZhbGlkYXRpb24g
ZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBub3QgZW50ZXJlZC4KLSAgICogQHBhcmFtIHtzdHJp
bmc9fSBuZ1JlcXVpcmVkIEFkZHMgYHJlcXVpcmVkYCBhdHRyaWJ1dGUgYW5kIGByZXF1aXJlZGAg
dmFsaWRhdGlvbiBjb25zdHJhaW50IHRvCi0gICAqICAgIHRoZSBlbGVtZW50IHdoZW4gdGhlIG5n
UmVxdWlyZWQgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gdHJ1ZS4gVXNlIGBuZ1JlcXVpcmVkYCBp
bnN0ZWFkIG9mCi0gICAqICAgIGByZXF1aXJlZGAgd2hlbiB5b3Ugd2FudCB0byBkYXRhLWJpbmQg
dG8gdGhlIGByZXF1aXJlZGAgYXR0cmlidXRlLgotICAgKiBAcGFyYW0ge251bWJlcj19IG5nTWlu
bGVuZ3RoIFNldHMgYG1pbmxlbmd0aGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVl
IGlzIHNob3J0ZXIgdGhhbgotICAgKiAgICBtaW5sZW5ndGguCi0gICAqIEBwYXJhbSB7bnVtYmVy
PX0gbmdNYXhsZW5ndGggU2V0cyBgbWF4bGVuZ3RoYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0
aGUgdmFsdWUgaXMgbG9uZ2VyIHRoYW4KLSAgICogICAgbWF4bGVuZ3RoLgotICAgKiBAcGFyYW0g
e3N0cmluZz19IG5nUGF0dGVybiBTZXRzIGBwYXR0ZXJuYCB2YWxpZGF0aW9uIGVycm9yIGtleSBp
ZiB0aGUgdmFsdWUgZG9lcyBub3QgbWF0Y2ggdGhlCi0gICAqICAgIFJlZ0V4cCBwYXR0ZXJuIGV4
cHJlc3Npb24uIEV4cGVjdGVkIHZhbHVlIGlzIGAvcmVnZXhwL2AgZm9yIGlubGluZSBwYXR0ZXJu
cyBvciBgcmVnZXhwYCBmb3IKLSAgICogICAgcGF0dGVybnMgZGVmaW5lZCBhcyBzY29wZSBleHBy
ZXNzaW9ucy4KLSAgICoKLSAgICogQGV4YW1wbGUKLSAgICAgIDxkb2M6ZXhhbXBsZT4KLSAgICAg
ICAgPGRvYzpzb3VyY2U+Ci0gICAgICAgICA8c2NyaXB0PgotICAgICAgICAgICBmdW5jdGlvbiBD
dHJsKCRzY29wZSkgewotICAgICAgICAgICAgICRzY29wZS50ZXh0ID0gJ21lQGV4YW1wbGUuY29t
JzsKLSAgICAgICAgICAgfQotICAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgICAgIDxmb3JtIG5h
bWU9Im15Rm9ybSIgbmctY29udHJvbGxlcj0iQ3RybCI+Ci0gICAgICAgICAgICAgRW1haWw6IDxp
bnB1dCB0eXBlPSJlbWFpbCIgbmFtZT0iaW5wdXQiIG5nLW1vZGVsPSJ0ZXh0IiByZXF1aXJlZD4K
LSAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZXJyb3IiIG5nLXNob3c9Im15Rm9ybS5pbnB1dC4k
ZXJyb3IucmVxdWlyZWQiPgotICAgICAgICAgICAgICAgUmVxdWlyZWQhPC9zcGFuPgotICAgICAg
ICAgICAgIDxzcGFuIGNsYXNzPSJlcnJvciIgbmctc2hvdz0ibXlGb3JtLmlucHV0LiRlcnJvci5l
bWFpbCI+Ci0gICAgICAgICAgICAgICBOb3QgdmFsaWQgZW1haWwhPC9zcGFuPgotICAgICAgICAg
ICAgIDx0dD50ZXh0ID0ge3t0ZXh0fX08L3R0Pjxici8+Ci0gICAgICAgICAgICAgPHR0Pm15Rm9y
bS5pbnB1dC4kdmFsaWQgPSB7e215Rm9ybS5pbnB1dC4kdmFsaWR9fTwvdHQ+PGJyLz4KLSAgICAg
ICAgICAgICA8dHQ+bXlGb3JtLmlucHV0LiRlcnJvciA9IHt7bXlGb3JtLmlucHV0LiRlcnJvcn19
PC90dD48YnIvPgotICAgICAgICAgICAgIDx0dD5teUZvcm0uJHZhbGlkID0ge3tteUZvcm0uJHZh
bGlkfX08L3R0Pjxici8+Ci0gICAgICAgICAgICAgPHR0Pm15Rm9ybS4kZXJyb3IucmVxdWlyZWQg
PSB7eyEhbXlGb3JtLiRlcnJvci5yZXF1aXJlZH19PC90dD48YnIvPgotICAgICAgICAgICAgIDx0
dD5teUZvcm0uJGVycm9yLmVtYWlsID0ge3shIW15Rm9ybS4kZXJyb3IuZW1haWx9fTwvdHQ+PGJy
Lz4KLSAgICAgICAgICAgPC9mb3JtPgotICAgICAgICA8L2RvYzpzb3VyY2U+Ci0gICAgICAgIDxk
b2M6c2NlbmFyaW8+Ci0gICAgICAgICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIHRvIG1vZGVsJywg
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBleHBlY3QoYmluZGluZygndGV4dCcpKS50b0VxdWFs
KCdtZUBleGFtcGxlLmNvbScpOwotICAgICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ215Rm9ybS5p
bnB1dC4kdmFsaWQnKSkudG9FcXVhbCgndHJ1ZScpOwotICAgICAgICAgIH0pOwotCi0gICAgICAg
ICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIGVtcHR5JywgZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICBpbnB1dCgndGV4dCcpLmVudGVyKCcnKTsKLSAgICAgICAgICAgIGV4cGVjdChiaW5kaW5n
KCd0ZXh0JykpLnRvRXF1YWwoJycpOwotICAgICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ215Rm9y
bS5pbnB1dC4kdmFsaWQnKSkudG9FcXVhbCgnZmFsc2UnKTsKLSAgICAgICAgICB9KTsKLQotICAg
ICAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBub3QgZW1haWwnLCBmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgIGlucHV0KCd0ZXh0JykuZW50ZXIoJ3h4eCcpOwotICAgICAgICAgICAgZXhw
ZWN0KGJpbmRpbmcoJ215Rm9ybS5pbnB1dC4kdmFsaWQnKSkudG9FcXVhbCgnZmFsc2UnKTsKLSAg
ICAgICAgICB9KTsKLSAgICAgICAgPC9kb2M6c2NlbmFyaW8+Ci0gICAgICA8L2RvYzpleGFtcGxl
PgotICAgKi8KLSAgJ2VtYWlsJzogZW1haWxJbnB1dFR5cGUsCi0KLQotICAvKioKLSAgICogQG5n
ZG9jIGlucHV0VHlwZQotICAgKiBAbmFtZSBuZy5kaXJlY3RpdmU6aW5wdXQucmFkaW8KLSAgICoK
LSAgICogQGRlc2NyaXB0aW9uCi0gICAqIEhUTUwgcmFkaW8gYnV0dG9uLgotICAgKgotICAgKiBA
cGFyYW0ge3N0cmluZ30gbmdNb2RlbCBBc3NpZ25hYmxlIGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBk
YXRhLWJpbmQgdG8uCi0gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd2hp
Y2ggdGhlIGV4cHJlc3Npb24gc2hvdWxkIGJlIHNldCB3aGVuIHNlbGVjdGVkLgotICAgKiBAcGFy
YW0ge3N0cmluZz19IG5hbWUgUHJvcGVydHkgbmFtZSBvZiB0aGUgZm9ybSB1bmRlciB3aGljaCB0
aGUgY29udHJvbCBpcyBwdWJsaXNoZWQuCi0gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdDaGFuZ2Ug
QW5ndWxhciBleHByZXNzaW9uIHRvIGJlIGV4ZWN1dGVkIHdoZW4gaW5wdXQgY2hhbmdlcyBkdWUg
dG8gdXNlcgotICAgKiAgICBpbnRlcmFjdGlvbiB3aXRoIHRoZSBpbnB1dCBlbGVtZW50LgotICAg
KgotICAgKiBAZXhhbXBsZQotICAgICAgPGRvYzpleGFtcGxlPgotICAgICAgICA8ZG9jOnNvdXJj
ZT4KLSAgICAgICAgIDxzY3JpcHQ+Ci0gICAgICAgICAgIGZ1bmN0aW9uIEN0cmwoJHNjb3BlKSB7
Ci0gICAgICAgICAgICAgJHNjb3BlLmNvbG9yID0gJ2JsdWUnOwotICAgICAgICAgICB9Ci0gICAg
ICAgICA8L3NjcmlwdD4KLSAgICAgICAgIDxmb3JtIG5hbWU9Im15Rm9ybSIgbmctY29udHJvbGxl
cj0iQ3RybCI+Ci0gICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmctbW9kZWw9ImNvbG9y
IiB2YWx1ZT0icmVkIj4gIFJlZCA8YnIvPgotICAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8i
IG5nLW1vZGVsPSJjb2xvciIgdmFsdWU9ImdyZWVuIj4gR3JlZW4gPGJyLz4KLSAgICAgICAgICAg
PGlucHV0IHR5cGU9InJhZGlvIiBuZy1tb2RlbD0iY29sb3IiIHZhbHVlPSJibHVlIj4gQmx1ZSA8
YnIvPgotICAgICAgICAgICA8dHQ+Y29sb3IgPSB7e2NvbG9yfX08L3R0Pjxici8+Ci0gICAgICAg
ICAgPC9mb3JtPgotICAgICAgICA8L2RvYzpzb3VyY2U+Ci0gICAgICAgIDxkb2M6c2NlbmFyaW8+
Ci0gICAgICAgICAgaXQoJ3Nob3VsZCBjaGFuZ2Ugc3RhdGUnLCBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgIGV4cGVjdChiaW5kaW5nKCdjb2xvcicpKS50b0VxdWFsKCdibHVlJyk7Ci0KLSAgICAg
ICAgICAgIGlucHV0KCdjb2xvcicpLnNlbGVjdCgncmVkJyk7Ci0gICAgICAgICAgICBleHBlY3Qo
YmluZGluZygnY29sb3InKSkudG9FcXVhbCgncmVkJyk7Ci0gICAgICAgICAgfSk7Ci0gICAgICAg
IDwvZG9jOnNjZW5hcmlvPgotICAgICAgPC9kb2M6ZXhhbXBsZT4KLSAgICovCi0gICdyYWRpbyc6
IHJhZGlvSW5wdXRUeXBlLAotCi0KLSAgLyoqCi0gICAqIEBuZ2RvYyBpbnB1dFR5cGUKLSAgICog
QG5hbWUgbmcuZGlyZWN0aXZlOmlucHV0LmNoZWNrYm94Ci0gICAqCi0gICAqIEBkZXNjcmlwdGlv
bgotICAgKiBIVE1MIGNoZWNrYm94LgotICAgKgotICAgKiBAcGFyYW0ge3N0cmluZ30gbmdNb2Rl
bCBBc3NpZ25hYmxlIGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBkYXRhLWJpbmQgdG8uCi0gICAqIEBw
YXJhbSB7c3RyaW5nPX0gbmFtZSBQcm9wZXJ0eSBuYW1lIG9mIHRoZSBmb3JtIHVuZGVyIHdoaWNo
IHRoZSBjb250cm9sIGlzIHB1Ymxpc2hlZC4KLSAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ1RydWVW
YWx1ZSBUaGUgdmFsdWUgdG8gd2hpY2ggdGhlIGV4cHJlc3Npb24gc2hvdWxkIGJlIHNldCB3aGVu
IHNlbGVjdGVkLgotICAgKiBAcGFyYW0ge3N0cmluZz19IG5nRmFsc2VWYWx1ZSBUaGUgdmFsdWUg
dG8gd2hpY2ggdGhlIGV4cHJlc3Npb24gc2hvdWxkIGJlIHNldCB3aGVuIG5vdCBzZWxlY3RlZC4K
LSAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ0NoYW5nZSBBbmd1bGFyIGV4cHJlc3Npb24gdG8gYmUg
ZXhlY3V0ZWQgd2hlbiBpbnB1dCBjaGFuZ2VzIGR1ZSB0byB1c2VyCi0gICAqICAgIGludGVyYWN0
aW9uIHdpdGggdGhlIGlucHV0IGVsZW1lbnQuCi0gICAqCi0gICAqIEBleGFtcGxlCi0gICAgICA8
ZG9jOmV4YW1wbGU+Ci0gICAgICAgIDxkb2M6c291cmNlPgotICAgICAgICAgPHNjcmlwdD4KLSAg
ICAgICAgICAgZnVuY3Rpb24gQ3RybCgkc2NvcGUpIHsKLSAgICAgICAgICAgICAkc2NvcGUudmFs
dWUxID0gdHJ1ZTsKLSAgICAgICAgICAgICAkc2NvcGUudmFsdWUyID0gJ1lFUycKLSAgICAgICAg
ICAgfQotICAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgICA8Zm9ybSBuYW1lPSJteUZvcm0iIG5n
LWNvbnRyb2xsZXI9IkN0cmwiPgotICAgICAgICAgICBWYWx1ZTE6IDxpbnB1dCB0eXBlPSJjaGVj
a2JveCIgbmctbW9kZWw9InZhbHVlMSI+IDxici8+Ci0gICAgICAgICAgIFZhbHVlMjogPGlucHV0
IHR5cGU9ImNoZWNrYm94IiBuZy1tb2RlbD0idmFsdWUyIgotICAgICAgICAgICAgICAgICAgICAg
ICAgICBuZy10cnVlLXZhbHVlPSJZRVMiIG5nLWZhbHNlLXZhbHVlPSJOTyI+IDxici8+Ci0gICAg
ICAgICAgIDx0dD52YWx1ZTEgPSB7e3ZhbHVlMX19PC90dD48YnIvPgotICAgICAgICAgICA8dHQ+
dmFsdWUyID0ge3t2YWx1ZTJ9fTwvdHQ+PGJyLz4KLSAgICAgICAgICA8L2Zvcm0+Ci0gICAgICAg
IDwvZG9jOnNvdXJjZT4KLSAgICAgICAgPGRvYzpzY2VuYXJpbz4KLSAgICAgICAgICBpdCgnc2hv
dWxkIGNoYW5nZSBzdGF0ZScsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgZXhwZWN0KGJpbmRp
bmcoJ3ZhbHVlMScpKS50b0VxdWFsKCd0cnVlJyk7Ci0gICAgICAgICAgICBleHBlY3QoYmluZGlu
ZygndmFsdWUyJykpLnRvRXF1YWwoJ1lFUycpOwotCi0gICAgICAgICAgICBpbnB1dCgndmFsdWUx
JykuY2hlY2soKTsKLSAgICAgICAgICAgIGlucHV0KCd2YWx1ZTInKS5jaGVjaygpOwotICAgICAg
ICAgICAgZXhwZWN0KGJpbmRpbmcoJ3ZhbHVlMScpKS50b0VxdWFsKCdmYWxzZScpOwotICAgICAg
ICAgICAgZXhwZWN0KGJpbmRpbmcoJ3ZhbHVlMicpKS50b0VxdWFsKCdOTycpOwotICAgICAgICAg
IH0pOwotICAgICAgICA8L2RvYzpzY2VuYXJpbz4KLSAgICAgIDwvZG9jOmV4YW1wbGU+Ci0gICAq
LwotICAnY2hlY2tib3gnOiBjaGVja2JveElucHV0VHlwZSwKLQotICAnaGlkZGVuJzogbm9vcCwK
LSAgJ2J1dHRvbic6IG5vb3AsCi0gICdzdWJtaXQnOiBub29wLAotICAncmVzZXQnOiBub29wCi19
OwotCi0KLWZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHsKLSAgcmV0dXJuIGlzVW5kZWZpbmVkKHZh
bHVlKSB8fCB2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgIT09IHZhbHVl
OwotfQotCi0KLWZ1bmN0aW9uIHRleHRJbnB1dFR5cGUoc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0
cmwsICRzbmlmZmVyLCAkYnJvd3NlcikgewotCi0gIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uKCkg
ewotICAgIHZhciB2YWx1ZSA9IHRyaW0oZWxlbWVudC52YWwoKSk7Ci0KLSAgICBpZiAoY3RybC4k
dmlld1ZhbHVlICE9PSB2YWx1ZSkgewotICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uKCkgewot
ICAgICAgICBjdHJsLiRzZXRWaWV3VmFsdWUodmFsdWUpOwotICAgICAgfSk7Ci0gICAgfQotICB9
OwotCi0gIC8vIGlmIHRoZSBicm93c2VyIGRvZXMgc3VwcG9ydCAiaW5wdXQiIGV2ZW50LCB3ZSBh
cmUgZmluZSAtIGV4Y2VwdCBvbiBJRTkgd2hpY2ggZG9lc24ndCBmaXJlIHRoZQotICAvLyBpbnB1
dCBldmVudCBvbiBiYWNrc3BhY2UsIGRlbGV0ZSBvciBjdXQKLSAgaWYgKCRzbmlmZmVyLmhhc0V2
ZW50KCdpbnB1dCcpKSB7Ci0gICAgZWxlbWVudC5iaW5kKCdpbnB1dCcsIGxpc3RlbmVyKTsKLSAg
fSBlbHNlIHsKLSAgICB2YXIgdGltZW91dDsKLQotICAgIHZhciBkZWZlckxpc3RlbmVyID0gZnVu
Y3Rpb24oKSB7Ci0gICAgICBpZiAoIXRpbWVvdXQpIHsKLSAgICAgICAgdGltZW91dCA9ICRicm93
c2VyLmRlZmVyKGZ1bmN0aW9uKCkgewotICAgICAgICAgIGxpc3RlbmVyKCk7Ci0gICAgICAgICAg
dGltZW91dCA9IG51bGw7Ci0gICAgICAgIH0pOwotICAgICAgfQotICAgIH07Ci0KLSAgICBlbGVt
ZW50LmJpbmQoJ2tleWRvd24nLCBmdW5jdGlvbihldmVudCkgewotICAgICAgdmFyIGtleSA9IGV2
ZW50LmtleUNvZGU7Ci0KLSAgICAgIC8vIGlnbm9yZQotICAgICAgLy8gICAgY29tbWFuZCAgICAg
ICAgICAgIG1vZGlmaWVycyAgICAgICAgICAgICAgICAgICBhcnJvd3MKLSAgICAgIGlmIChrZXkg
PT09IDkxIHx8ICgxNSA8IGtleSAmJiBrZXkgPCAxOSkgfHwgKDM3IDw9IGtleSAmJiBrZXkgPD0g
NDApKSByZXR1cm47Ci0KLSAgICAgIGRlZmVyTGlzdGVuZXIoKTsKLSAgICB9KTsKLQotICAgIC8v
IGlmIHVzZXIgcGFzdGUgaW50byBpbnB1dCB1c2luZyBtb3VzZSwgd2UgbmVlZCAiY2hhbmdlIiBl
dmVudCB0byBjYXRjaCBpdAotICAgIGVsZW1lbnQuYmluZCgnY2hhbmdlJywgbGlzdGVuZXIpOwot
Ci0gICAgLy8gaWYgdXNlciBtb2RpZmllcyBpbnB1dCB2YWx1ZSB1c2luZyBjb250ZXh0IG1lbnUg
aW4gSUUsIHdlIG5lZWQgInBhc3RlIiBhbmQgImN1dCIgZXZlbnRzIHRvIGNhdGNoIGl0Ci0gICAg
aWYgKCRzbmlmZmVyLmhhc0V2ZW50KCdwYXN0ZScpKSB7Ci0gICAgICBlbGVtZW50LmJpbmQoJ3Bh
c3RlIGN1dCcsIGRlZmVyTGlzdGVuZXIpOwotICAgIH0KLSAgfQotCi0KLSAgY3RybC4kcmVuZGVy
ID0gZnVuY3Rpb24oKSB7Ci0gICAgZWxlbWVudC52YWwoaXNFbXB0eShjdHJsLiR2aWV3VmFsdWUp
ID8gJycgOiBjdHJsLiR2aWV3VmFsdWUpOwotICB9OwotCi0gIC8vIHBhdHRlcm4gdmFsaWRhdG9y
Ci0gIHZhciBwYXR0ZXJuID0gYXR0ci5uZ1BhdHRlcm4sCi0gICAgICBwYXR0ZXJuVmFsaWRhdG9y
OwotCi0gIHZhciB2YWxpZGF0ZSA9IGZ1bmN0aW9uKHJlZ2V4cCwgdmFsdWUpIHsKLSAgICBpZiAo
aXNFbXB0eSh2YWx1ZSkgfHwgcmVnZXhwLnRlc3QodmFsdWUpKSB7Ci0gICAgICBjdHJsLiRzZXRW
YWxpZGl0eSgncGF0dGVybicsIHRydWUpOwotICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0gZWxz
ZSB7Ci0gICAgICBjdHJsLiRzZXRWYWxpZGl0eSgncGF0dGVybicsIGZhbHNlKTsKLSAgICAgIHJl
dHVybiB1bmRlZmluZWQ7Ci0gICAgfQotICB9OwotCi0gIGlmIChwYXR0ZXJuKSB7Ci0gICAgaWYg
KHBhdHRlcm4ubWF0Y2goL15cLyguKilcLyQvKSkgewotICAgICAgcGF0dGVybiA9IG5ldyBSZWdF
eHAocGF0dGVybi5zdWJzdHIoMSwgcGF0dGVybi5sZW5ndGggLSAyKSk7Ci0gICAgICBwYXR0ZXJu
VmFsaWRhdG9yID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHBh
dHRlcm4sIHZhbHVlKQotICAgICAgfTsKLSAgICB9IGVsc2UgewotICAgICAgcGF0dGVyblZhbGlk
YXRvciA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICAgIHZhciBwYXR0ZXJuT2JqID0gc2NvcGUu
JGV2YWwocGF0dGVybik7Ci0KLSAgICAgICAgaWYgKCFwYXR0ZXJuT2JqIHx8ICFwYXR0ZXJuT2Jq
LnRlc3QpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkICcgKyBwYXR0ZXJu
ICsgJyB0byBiZSBhIFJlZ0V4cCBidXQgd2FzICcgKyBwYXR0ZXJuT2JqKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gdmFsaWRhdGUocGF0dGVybk9iaiwgdmFsdWUpOwotICAgICAgfTsKLSAg
ICB9Ci0KLSAgICBjdHJsLiRmb3JtYXR0ZXJzLnB1c2gocGF0dGVyblZhbGlkYXRvcik7Ci0gICAg
Y3RybC4kcGFyc2Vycy5wdXNoKHBhdHRlcm5WYWxpZGF0b3IpOwotICB9Ci0KLSAgLy8gbWluIGxl
bmd0aCB2YWxpZGF0b3IKLSAgaWYgKGF0dHIubmdNaW5sZW5ndGgpIHsKLSAgICB2YXIgbWlubGVu
Z3RoID0gaW50KGF0dHIubmdNaW5sZW5ndGgpOwotICAgIHZhciBtaW5MZW5ndGhWYWxpZGF0b3Ig
PSBmdW5jdGlvbih2YWx1ZSkgewotICAgICAgaWYgKCFpc0VtcHR5KHZhbHVlKSAmJiB2YWx1ZS5s
ZW5ndGggPCBtaW5sZW5ndGgpIHsKLSAgICAgICAgY3RybC4kc2V0VmFsaWRpdHkoJ21pbmxlbmd0
aCcsIGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKLSAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGN0cmwuJHNldFZhbGlkaXR5KCdtaW5sZW5ndGgnLCB0cnVlKTsKLSAgICAgICAgcmV0
dXJuIHZhbHVlOwotICAgICAgfQotICAgIH07Ci0KLSAgICBjdHJsLiRwYXJzZXJzLnB1c2gobWlu
TGVuZ3RoVmFsaWRhdG9yKTsKLSAgICBjdHJsLiRmb3JtYXR0ZXJzLnB1c2gobWluTGVuZ3RoVmFs
aWRhdG9yKTsKLSAgfQotCi0gIC8vIG1heCBsZW5ndGggdmFsaWRhdG9yCi0gIGlmIChhdHRyLm5n
TWF4bGVuZ3RoKSB7Ci0gICAgdmFyIG1heGxlbmd0aCA9IGludChhdHRyLm5nTWF4bGVuZ3RoKTsK
LSAgICB2YXIgbWF4TGVuZ3RoVmFsaWRhdG9yID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgIGlm
ICghaXNFbXB0eSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID4gbWF4bGVuZ3RoKSB7Ci0gICAgICAg
IGN0cmwuJHNldFZhbGlkaXR5KCdtYXhsZW5ndGgnLCBmYWxzZSk7Ci0gICAgICAgIHJldHVybiB1
bmRlZmluZWQ7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBjdHJsLiRzZXRWYWxpZGl0eSgnbWF4
bGVuZ3RoJywgdHJ1ZSk7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgIH0KLSAgICB9Owot
Ci0gICAgY3RybC4kcGFyc2Vycy5wdXNoKG1heExlbmd0aFZhbGlkYXRvcik7Ci0gICAgY3RybC4k
Zm9ybWF0dGVycy5wdXNoKG1heExlbmd0aFZhbGlkYXRvcik7Ci0gIH0KLX0KLQotZnVuY3Rpb24g
bnVtYmVySW5wdXRUeXBlKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsLCAkc25pZmZlciwgJGJy
b3dzZXIpIHsKLSAgdGV4dElucHV0VHlwZShzY29wZSwgZWxlbWVudCwgYXR0ciwgY3RybCwgJHNu
aWZmZXIsICRicm93c2VyKTsKLQotICBjdHJsLiRwYXJzZXJzLnB1c2goZnVuY3Rpb24odmFsdWUp
IHsKLSAgICB2YXIgZW1wdHkgPSBpc0VtcHR5KHZhbHVlKTsKLSAgICBpZiAoZW1wdHkgfHwgTlVN
QkVSX1JFR0VYUC50ZXN0KHZhbHVlKSkgewotICAgICAgY3RybC4kc2V0VmFsaWRpdHkoJ251bWJl
cicsIHRydWUpOwotICAgICAgcmV0dXJuIHZhbHVlID09PSAnJyA/IG51bGwgOiAoZW1wdHkgPyB2
YWx1ZSA6IHBhcnNlRmxvYXQodmFsdWUpKTsKLSAgICB9IGVsc2UgewotICAgICAgY3RybC4kc2V0
VmFsaWRpdHkoJ251bWJlcicsIGZhbHNlKTsKLSAgICAgIHJldHVybiB1bmRlZmluZWQ7Ci0gICAg
fQotICB9KTsKLQotICBjdHJsLiRmb3JtYXR0ZXJzLnB1c2goZnVuY3Rpb24odmFsdWUpIHsKLSAg
ICByZXR1cm4gaXNFbXB0eSh2YWx1ZSkgPyAnJyA6ICcnICsgdmFsdWU7Ci0gIH0pOwotCi0gIGlm
IChhdHRyLm1pbikgewotICAgIHZhciBtaW4gPSBwYXJzZUZsb2F0KGF0dHIubWluKTsKLSAgICB2
YXIgbWluVmFsaWRhdG9yID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgIGlmICghaXNFbXB0eSh2
YWx1ZSkgJiYgdmFsdWUgPCBtaW4pIHsKLSAgICAgICAgY3RybC4kc2V0VmFsaWRpdHkoJ21pbics
IGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKLSAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGN0cmwuJHNldFZhbGlkaXR5KCdtaW4nLCB0cnVlKTsKLSAgICAgICAgcmV0dXJuIHZhbHVl
OwotICAgICAgfQotICAgIH07Ci0KLSAgICBjdHJsLiRwYXJzZXJzLnB1c2gobWluVmFsaWRhdG9y
KTsKLSAgICBjdHJsLiRmb3JtYXR0ZXJzLnB1c2gobWluVmFsaWRhdG9yKTsKLSAgfQotCi0gIGlm
IChhdHRyLm1heCkgewotICAgIHZhciBtYXggPSBwYXJzZUZsb2F0KGF0dHIubWF4KTsKLSAgICB2
YXIgbWF4VmFsaWRhdG9yID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgIGlmICghaXNFbXB0eSh2
YWx1ZSkgJiYgdmFsdWUgPiBtYXgpIHsKLSAgICAgICAgY3RybC4kc2V0VmFsaWRpdHkoJ21heCcs
IGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKLSAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGN0cmwuJHNldFZhbGlkaXR5KCdtYXgnLCB0cnVlKTsKLSAgICAgICAgcmV0dXJuIHZhbHVl
OwotICAgICAgfQotICAgIH07Ci0KLSAgICBjdHJsLiRwYXJzZXJzLnB1c2gobWF4VmFsaWRhdG9y
KTsKLSAgICBjdHJsLiRmb3JtYXR0ZXJzLnB1c2gobWF4VmFsaWRhdG9yKTsKLSAgfQotCi0gIGN0
cmwuJGZvcm1hdHRlcnMucHVzaChmdW5jdGlvbih2YWx1ZSkgewotCi0gICAgaWYgKGlzRW1wdHko
dmFsdWUpIHx8IGlzTnVtYmVyKHZhbHVlKSkgewotICAgICAgY3RybC4kc2V0VmFsaWRpdHkoJ251
bWJlcicsIHRydWUpOwotICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0gZWxzZSB7Ci0gICAgICBj
dHJsLiRzZXRWYWxpZGl0eSgnbnVtYmVyJywgZmFsc2UpOwotICAgICAgcmV0dXJuIHVuZGVmaW5l
ZDsKLSAgICB9Ci0gIH0pOwotfQotCi1mdW5jdGlvbiB1cmxJbnB1dFR5cGUoc2NvcGUsIGVsZW1l
bnQsIGF0dHIsIGN0cmwsICRzbmlmZmVyLCAkYnJvd3NlcikgewotICB0ZXh0SW5wdXRUeXBlKHNj
b3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsLCAkc25pZmZlciwgJGJyb3dzZXIpOwotCi0gIHZhciB1
cmxWYWxpZGF0b3IgPSBmdW5jdGlvbih2YWx1ZSkgewotICAgIGlmIChpc0VtcHR5KHZhbHVlKSB8
fCBVUkxfUkVHRVhQLnRlc3QodmFsdWUpKSB7Ci0gICAgICBjdHJsLiRzZXRWYWxpZGl0eSgndXJs
JywgdHJ1ZSk7Ci0gICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGN0cmwu
JHNldFZhbGlkaXR5KCd1cmwnLCBmYWxzZSk7Ci0gICAgICByZXR1cm4gdW5kZWZpbmVkOwotICAg
IH0KLSAgfTsKLQotICBjdHJsLiRmb3JtYXR0ZXJzLnB1c2godXJsVmFsaWRhdG9yKTsKLSAgY3Ry
bC4kcGFyc2Vycy5wdXNoKHVybFZhbGlkYXRvcik7Ci19Ci0KLWZ1bmN0aW9uIGVtYWlsSW5wdXRU
eXBlKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsLCAkc25pZmZlciwgJGJyb3dzZXIpIHsKLSAg
dGV4dElucHV0VHlwZShzY29wZSwgZWxlbWVudCwgYXR0ciwgY3RybCwgJHNuaWZmZXIsICRicm93
c2VyKTsKLQotICB2YXIgZW1haWxWYWxpZGF0b3IgPSBmdW5jdGlvbih2YWx1ZSkgewotICAgIGlm
IChpc0VtcHR5KHZhbHVlKSB8fCBFTUFJTF9SRUdFWFAudGVzdCh2YWx1ZSkpIHsKLSAgICAgIGN0
cmwuJHNldFZhbGlkaXR5KCdlbWFpbCcsIHRydWUpOwotICAgICAgcmV0dXJuIHZhbHVlOwotICAg
IH0gZWxzZSB7Ci0gICAgICBjdHJsLiRzZXRWYWxpZGl0eSgnZW1haWwnLCBmYWxzZSk7Ci0gICAg
ICByZXR1cm4gdW5kZWZpbmVkOwotICAgIH0KLSAgfTsKLQotICBjdHJsLiRmb3JtYXR0ZXJzLnB1
c2goZW1haWxWYWxpZGF0b3IpOwotICBjdHJsLiRwYXJzZXJzLnB1c2goZW1haWxWYWxpZGF0b3Ip
OwotfQotCi1mdW5jdGlvbiByYWRpb0lucHV0VHlwZShzY29wZSwgZWxlbWVudCwgYXR0ciwgY3Ry
bCkgewotICAvLyBtYWtlIHRoZSBuYW1lIHVuaXF1ZSwgaWYgbm90IGRlZmluZWQKLSAgaWYgKGlz
VW5kZWZpbmVkKGF0dHIubmFtZSkpIHsKLSAgICBlbGVtZW50LmF0dHIoJ25hbWUnLCBuZXh0VWlk
KCkpOwotICB9Ci0KLSAgZWxlbWVudC5iaW5kKCdjbGljaycsIGZ1bmN0aW9uKCkgewotICAgIGlm
IChlbGVtZW50WzBdLmNoZWNrZWQpIHsKLSAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbigpIHsK
LSAgICAgICAgY3RybC4kc2V0Vmlld1ZhbHVlKGF0dHIudmFsdWUpOwotICAgICAgfSk7Ci0gICAg
fQotICB9KTsKLQotICBjdHJsLiRyZW5kZXIgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgdmFsdWUg
PSBhdHRyLnZhbHVlOwotICAgIGVsZW1lbnRbMF0uY2hlY2tlZCA9ICh2YWx1ZSA9PSBjdHJsLiR2
aWV3VmFsdWUpOwotICB9OwotCi0gIGF0dHIuJG9ic2VydmUoJ3ZhbHVlJywgY3RybC4kcmVuZGVy
KTsKLX0KLQotZnVuY3Rpb24gY2hlY2tib3hJbnB1dFR5cGUoc2NvcGUsIGVsZW1lbnQsIGF0dHIs
IGN0cmwpIHsKLSAgdmFyIHRydWVWYWx1ZSA9IGF0dHIubmdUcnVlVmFsdWUsCi0gICAgICBmYWxz
ZVZhbHVlID0gYXR0ci5uZ0ZhbHNlVmFsdWU7Ci0KLSAgaWYgKCFpc1N0cmluZyh0cnVlVmFsdWUp
KSB0cnVlVmFsdWUgPSB0cnVlOwotICBpZiAoIWlzU3RyaW5nKGZhbHNlVmFsdWUpKSBmYWxzZVZh
bHVlID0gZmFsc2U7Ci0KLSAgZWxlbWVudC5iaW5kKCdjbGljaycsIGZ1bmN0aW9uKCkgewotICAg
IHNjb3BlLiRhcHBseShmdW5jdGlvbigpIHsKLSAgICAgIGN0cmwuJHNldFZpZXdWYWx1ZShlbGVt
ZW50WzBdLmNoZWNrZWQpOwotICAgIH0pOwotICB9KTsKLQotICBjdHJsLiRyZW5kZXIgPSBmdW5j
dGlvbigpIHsKLSAgICBlbGVtZW50WzBdLmNoZWNrZWQgPSBjdHJsLiR2aWV3VmFsdWU7Ci0gIH07
Ci0KLSAgY3RybC4kZm9ybWF0dGVycy5wdXNoKGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgcmV0dXJu
IHZhbHVlID09PSB0cnVlVmFsdWU7Ci0gIH0pOwotCi0gIGN0cmwuJHBhcnNlcnMucHVzaChmdW5j
dGlvbih2YWx1ZSkgewotICAgIHJldHVybiB2YWx1ZSA/IHRydWVWYWx1ZSA6IGZhbHNlVmFsdWU7
Ci0gIH0pOwotfQotCi0KLS8qKgotICogQG5nZG9jIGRpcmVjdGl2ZQotICogQG5hbWUgbmcuZGly
ZWN0aXZlOnRleHRhcmVhCi0gKiBAcmVzdHJpY3QgRQotICoKLSAqIEBkZXNjcmlwdGlvbgotICog
SFRNTCB0ZXh0YXJlYSBlbGVtZW50IGNvbnRyb2wgd2l0aCBhbmd1bGFyIGRhdGEtYmluZGluZy4g
VGhlIGRhdGEtYmluZGluZyBhbmQgdmFsaWRhdGlvbgotICogcHJvcGVydGllcyBvZiB0aGlzIGVs
ZW1lbnQgYXJlIGV4YWN0bHkgdGhlIHNhbWUgYXMgdGhvc2Ugb2YgdGhlCi0gKiB7QGxpbmsgbmcu
ZGlyZWN0aXZlOmlucHV0IGlucHV0IGVsZW1lbnR9LgotICoKLSAqIEBwYXJhbSB7c3RyaW5nfSBu
Z01vZGVsIEFzc2lnbmFibGUgYW5ndWxhciBleHByZXNzaW9uIHRvIGRhdGEtYmluZCB0by4KLSAq
IEBwYXJhbSB7c3RyaW5nPX0gbmFtZSBQcm9wZXJ0eSBuYW1lIG9mIHRoZSBmb3JtIHVuZGVyIHdo
aWNoIHRoZSBjb250cm9sIGlzIHB1Ymxpc2hlZC4KLSAqIEBwYXJhbSB7c3RyaW5nPX0gcmVxdWly
ZWQgU2V0cyBgcmVxdWlyZWRgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBu
b3QgZW50ZXJlZC4KLSAqIEBwYXJhbSB7c3RyaW5nPX0gbmdSZXF1aXJlZCBBZGRzIGByZXF1aXJl
ZGAgYXR0cmlidXRlIGFuZCBgcmVxdWlyZWRgIHZhbGlkYXRpb24gY29uc3RyYWludCB0bwotICog
ICAgdGhlIGVsZW1lbnQgd2hlbiB0aGUgbmdSZXF1aXJlZCBleHByZXNzaW9uIGV2YWx1YXRlcyB0
byB0cnVlLiBVc2UgYG5nUmVxdWlyZWRgIGluc3RlYWQgb2YKLSAqICAgIGByZXF1aXJlZGAgd2hl
biB5b3Ugd2FudCB0byBkYXRhLWJpbmQgdG8gdGhlIGByZXF1aXJlZGAgYXR0cmlidXRlLgotICog
QHBhcmFtIHtudW1iZXI9fSBuZ01pbmxlbmd0aCBTZXRzIGBtaW5sZW5ndGhgIHZhbGlkYXRpb24g
ZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBzaG9ydGVyIHRoYW4KLSAqICAgIG1pbmxlbmd0aC4K
LSAqIEBwYXJhbSB7bnVtYmVyPX0gbmdNYXhsZW5ndGggU2V0cyBgbWF4bGVuZ3RoYCB2YWxpZGF0
aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgbG9uZ2VyIHRoYW4KLSAqICAgIG1heGxlbmd0
aC4KLSAqIEBwYXJhbSB7c3RyaW5nPX0gbmdQYXR0ZXJuIFNldHMgYHBhdHRlcm5gIHZhbGlkYXRp
b24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBkb2VzIG5vdCBtYXRjaCB0aGUKLSAqICAgIFJlZ0V4
cCBwYXR0ZXJuIGV4cHJlc3Npb24uIEV4cGVjdGVkIHZhbHVlIGlzIGAvcmVnZXhwL2AgZm9yIGlu
bGluZSBwYXR0ZXJucyBvciBgcmVnZXhwYCBmb3IKLSAqICAgIHBhdHRlcm5zIGRlZmluZWQgYXMg
c2NvcGUgZXhwcmVzc2lvbnMuCi0gKiBAcGFyYW0ge3N0cmluZz19IG5nQ2hhbmdlIEFuZ3VsYXIg
ZXhwcmVzc2lvbiB0byBiZSBleGVjdXRlZCB3aGVuIGlucHV0IGNoYW5nZXMgZHVlIHRvIHVzZXIK
LSAqICAgIGludGVyYWN0aW9uIHdpdGggdGhlIGlucHV0IGVsZW1lbnQuCi0gKi8KLQotCi0vKioK
LSAqIEBuZ2RvYyBkaXJlY3RpdmUKLSAqIEBuYW1lIG5nLmRpcmVjdGl2ZTppbnB1dAotICogQHJl
c3RyaWN0IEUKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIEhUTUwgaW5wdXQgZWxlbWVudCBjb250
cm9sIHdpdGggYW5ndWxhciBkYXRhLWJpbmRpbmcuIElucHV0IGNvbnRyb2wgZm9sbG93cyBIVE1M
NSBpbnB1dCB0eXBlcwotICogYW5kIHBvbHlmaWxscyB0aGUgSFRNTDUgdmFsaWRhdGlvbiBiZWhh
dmlvciBmb3Igb2xkZXIgYnJvd3NlcnMuCi0gKgotICogQHBhcmFtIHtzdHJpbmd9IG5nTW9kZWwg
QXNzaWduYWJsZSBhbmd1bGFyIGV4cHJlc3Npb24gdG8gZGF0YS1iaW5kIHRvLgotICogQHBhcmFt
IHtzdHJpbmc9fSBuYW1lIFByb3BlcnR5IG5hbWUgb2YgdGhlIGZvcm0gdW5kZXIgd2hpY2ggdGhl
IGNvbnRyb2wgaXMgcHVibGlzaGVkLgotICogQHBhcmFtIHtzdHJpbmc9fSByZXF1aXJlZCBTZXRz
IGByZXF1aXJlZGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIG5vdCBlbnRl
cmVkLgotICogQHBhcmFtIHtib29sZWFuPX0gbmdSZXF1aXJlZCBTZXRzIGByZXF1aXJlZGAgYXR0
cmlidXRlIGlmIHNldCB0byB0cnVlCi0gKiBAcGFyYW0ge251bWJlcj19IG5nTWlubGVuZ3RoIFNl
dHMgYG1pbmxlbmd0aGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIHNob3J0
ZXIgdGhhbgotICogICAgbWlubGVuZ3RoLgotICogQHBhcmFtIHtudW1iZXI9fSBuZ01heGxlbmd0
aCBTZXRzIGBtYXhsZW5ndGhgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBs
b25nZXIgdGhhbgotICogICAgbWF4bGVuZ3RoLgotICogQHBhcmFtIHtzdHJpbmc9fSBuZ1BhdHRl
cm4gU2V0cyBgcGF0dGVybmAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGRvZXMg
bm90IG1hdGNoIHRoZQotICogICAgUmVnRXhwIHBhdHRlcm4gZXhwcmVzc2lvbi4gRXhwZWN0ZWQg
dmFsdWUgaXMgYC9yZWdleHAvYCBmb3IgaW5saW5lIHBhdHRlcm5zIG9yIGByZWdleHBgIGZvcgot
ICogICAgcGF0dGVybnMgZGVmaW5lZCBhcyBzY29wZSBleHByZXNzaW9ucy4KLSAqIEBwYXJhbSB7
c3RyaW5nPX0gbmdDaGFuZ2UgQW5ndWxhciBleHByZXNzaW9uIHRvIGJlIGV4ZWN1dGVkIHdoZW4g
aW5wdXQgY2hhbmdlcyBkdWUgdG8gdXNlcgotICogICAgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaW5w
dXQgZWxlbWVudC4KLSAqCi0gKiBAZXhhbXBsZQotICAgIDxkb2M6ZXhhbXBsZT4KLSAgICAgIDxk
b2M6c291cmNlPgotICAgICAgIDxzY3JpcHQ+Ci0gICAgICAgICBmdW5jdGlvbiBDdHJsKCRzY29w
ZSkgewotICAgICAgICAgICAkc2NvcGUudXNlciA9IHtuYW1lOiAnZ3Vlc3QnLCBsYXN0OiAndmlz
aXRvcid9OwotICAgICAgICAgfQotICAgICAgIDwvc2NyaXB0PgotICAgICAgIDxkaXYgbmctY29u
dHJvbGxlcj0iQ3RybCI+Ci0gICAgICAgICA8Zm9ybSBuYW1lPSJteUZvcm0iPgotICAgICAgICAg
ICBVc2VyIG5hbWU6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyTmFtZSIgbmctbW9kZWw9
InVzZXIubmFtZSIgcmVxdWlyZWQ+Ci0gICAgICAgICAgIDxzcGFuIGNsYXNzPSJlcnJvciIgbmct
c2hvdz0ibXlGb3JtLnVzZXJOYW1lLiRlcnJvci5yZXF1aXJlZCI+Ci0gICAgICAgICAgICAgUmVx
dWlyZWQhPC9zcGFuPjxicj4KLSAgICAgICAgICAgTGFzdCBuYW1lOiA8aW5wdXQgdHlwZT0idGV4
dCIgbmFtZT0ibGFzdE5hbWUiIG5nLW1vZGVsPSJ1c2VyLmxhc3QiCi0gICAgICAgICAgICAgbmct
bWlubGVuZ3RoPSIzIiBuZy1tYXhsZW5ndGg9IjEwIj4KLSAgICAgICAgICAgPHNwYW4gY2xhc3M9
ImVycm9yIiBuZy1zaG93PSJteUZvcm0ubGFzdE5hbWUuJGVycm9yLm1pbmxlbmd0aCI+Ci0gICAg
ICAgICAgICAgVG9vIHNob3J0ITwvc3Bhbj4KLSAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVycm9y
IiBuZy1zaG93PSJteUZvcm0ubGFzdE5hbWUuJGVycm9yLm1heGxlbmd0aCI+Ci0gICAgICAgICAg
ICAgVG9vIGxvbmchPC9zcGFuPjxicj4KLSAgICAgICAgIDwvZm9ybT4KLSAgICAgICAgIDxocj4K
LSAgICAgICAgIDx0dD51c2VyID0ge3t1c2VyfX08L3R0Pjxici8+Ci0gICAgICAgICA8dHQ+bXlG
b3JtLnVzZXJOYW1lLiR2YWxpZCA9IHt7bXlGb3JtLnVzZXJOYW1lLiR2YWxpZH19PC90dD48YnI+
Ci0gICAgICAgICA8dHQ+bXlGb3JtLnVzZXJOYW1lLiRlcnJvciA9IHt7bXlGb3JtLnVzZXJOYW1l
LiRlcnJvcn19PC90dD48YnI+Ci0gICAgICAgICA8dHQ+bXlGb3JtLmxhc3ROYW1lLiR2YWxpZCA9
IHt7bXlGb3JtLmxhc3ROYW1lLiR2YWxpZH19PC90dD48YnI+Ci0gICAgICAgICA8dHQ+bXlGb3Jt
Lmxhc3ROYW1lLiRlcnJvciA9IHt7bXlGb3JtLmxhc3ROYW1lLiRlcnJvcn19PC90dD48YnI+Ci0g
ICAgICAgICA8dHQ+bXlGb3JtLiR2YWxpZCA9IHt7bXlGb3JtLiR2YWxpZH19PC90dD48YnI+Ci0g
ICAgICAgICA8dHQ+bXlGb3JtLiRlcnJvci5yZXF1aXJlZCA9IHt7ISFteUZvcm0uJGVycm9yLnJl
cXVpcmVkfX08L3R0Pjxicj4KLSAgICAgICAgIDx0dD5teUZvcm0uJGVycm9yLm1pbmxlbmd0aCA9
IHt7ISFteUZvcm0uJGVycm9yLm1pbmxlbmd0aH19PC90dD48YnI+Ci0gICAgICAgICA8dHQ+bXlG
b3JtLiRlcnJvci5tYXhsZW5ndGggPSB7eyEhbXlGb3JtLiRlcnJvci5tYXhsZW5ndGh9fTwvdHQ+
PGJyPgotICAgICAgIDwvZGl2PgotICAgICAgPC9kb2M6c291cmNlPgotICAgICAgPGRvYzpzY2Vu
YXJpbz4KLSAgICAgICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIHRvIG1vZGVsJywgZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ3VzZXInKSkudG9FcXVhbCgneyJuYW1lIjoi
Z3Vlc3QiLCJsYXN0IjoidmlzaXRvciJ9Jyk7Ci0gICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ215
Rm9ybS51c2VyTmFtZS4kdmFsaWQnKSkudG9FcXVhbCgndHJ1ZScpOwotICAgICAgICAgIGV4cGVj
dChiaW5kaW5nKCdteUZvcm0uJHZhbGlkJykpLnRvRXF1YWwoJ3RydWUnKTsKLSAgICAgICAgfSk7
Ci0KLSAgICAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIGVtcHR5IHdoZW4gcmVxdWlyZWQn
LCBmdW5jdGlvbigpIHsKLSAgICAgICAgICBpbnB1dCgndXNlci5uYW1lJykuZW50ZXIoJycpOwot
ICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCd1c2VyJykpLnRvRXF1YWwoJ3sibGFzdCI6InZpc2l0
b3IifScpOwotICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdteUZvcm0udXNlck5hbWUuJHZhbGlk
JykpLnRvRXF1YWwoJ2ZhbHNlJyk7Ci0gICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ215Rm9ybS4k
dmFsaWQnKSkudG9FcXVhbCgnZmFsc2UnKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgaXQoJ3No
b3VsZCBiZSB2YWxpZCBpZiBlbXB0eSB3aGVuIG1pbiBsZW5ndGggaXMgc2V0JywgZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgaW5wdXQoJ3VzZXIubGFzdCcpLmVudGVyKCcnKTsKLSAgICAgICAgICBl
eHBlY3QoYmluZGluZygndXNlcicpKS50b0VxdWFsKCd7Im5hbWUiOiJndWVzdCIsImxhc3QiOiIi
fScpOwotICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCdteUZvcm0ubGFzdE5hbWUuJHZhbGlkJykp
LnRvRXF1YWwoJ3RydWUnKTsKLSAgICAgICAgICBleHBlY3QoYmluZGluZygnbXlGb3JtLiR2YWxp
ZCcpKS50b0VxdWFsKCd0cnVlJyk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGl0KCdzaG91bGQg
YmUgaW52YWxpZCBpZiBsZXNzIHRoYW4gcmVxdWlyZWQgbWluIGxlbmd0aCcsIGZ1bmN0aW9uKCkg
ewotICAgICAgICAgIGlucHV0KCd1c2VyLmxhc3QnKS5lbnRlcigneHgnKTsKLSAgICAgICAgICBl
eHBlY3QoYmluZGluZygndXNlcicpKS50b0VxdWFsKCd7Im5hbWUiOiJndWVzdCJ9Jyk7Ci0gICAg
ICAgICAgZXhwZWN0KGJpbmRpbmcoJ215Rm9ybS5sYXN0TmFtZS4kdmFsaWQnKSkudG9FcXVhbCgn
ZmFsc2UnKTsKLSAgICAgICAgICBleHBlY3QoYmluZGluZygnbXlGb3JtLmxhc3ROYW1lLiRlcnJv
cicpKS50b01hdGNoKC9taW5sZW5ndGgvKTsKLSAgICAgICAgICBleHBlY3QoYmluZGluZygnbXlG
b3JtLiR2YWxpZCcpKS50b0VxdWFsKCdmYWxzZScpOwotICAgICAgICB9KTsKLQotICAgICAgICBp
dCgnc2hvdWxkIGJlIGludmFsaWQgaWYgbG9uZ2VyIHRoYW4gbWF4IGxlbmd0aCcsIGZ1bmN0aW9u
KCkgewotICAgICAgICAgIGlucHV0KCd1c2VyLmxhc3QnKS5lbnRlcignc29tZSByaWRpY3Vsb3Vz
bHkgbG9uZyBuYW1lJyk7Ci0gICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ3VzZXInKSkKLSAgICAg
ICAgICAgIC50b0VxdWFsKCd7Im5hbWUiOiJndWVzdCJ9Jyk7Ci0gICAgICAgICAgZXhwZWN0KGJp
bmRpbmcoJ215Rm9ybS5sYXN0TmFtZS4kdmFsaWQnKSkudG9FcXVhbCgnZmFsc2UnKTsKLSAgICAg
ICAgICBleHBlY3QoYmluZGluZygnbXlGb3JtLmxhc3ROYW1lLiRlcnJvcicpKS50b01hdGNoKC9t
YXhsZW5ndGgvKTsKLSAgICAgICAgICBleHBlY3QoYmluZGluZygnbXlGb3JtLiR2YWxpZCcpKS50
b0VxdWFsKCdmYWxzZScpOwotICAgICAgICB9KTsKLSAgICAgIDwvZG9jOnNjZW5hcmlvPgotICAg
IDwvZG9jOmV4YW1wbGU+Ci0gKi8KLXZhciBpbnB1dERpcmVjdGl2ZSA9IFsnJGJyb3dzZXInLCAn
JHNuaWZmZXInLCBmdW5jdGlvbigkYnJvd3NlciwgJHNuaWZmZXIpIHsKLSAgcmV0dXJuIHsKLSAg
ICByZXN0cmljdDogJ0UnLAotICAgIHJlcXVpcmU6ICc/bmdNb2RlbCcsCi0gICAgbGluazogZnVu
Y3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwpIHsKLSAgICAgIGlmIChjdHJsKSB7Ci0g
ICAgICAgIChpbnB1dFR5cGVbbG93ZXJjYXNlKGF0dHIudHlwZSldIHx8IGlucHV0VHlwZS50ZXh0
KShzY29wZSwgZWxlbWVudCwgYXR0ciwgY3RybCwgJHNuaWZmZXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYnJvd3Nlcik7Ci0g
ICAgICB9Ci0gICAgfQotICB9OwotfV07Ci0KLXZhciBWQUxJRF9DTEFTUyA9ICduZy12YWxpZCcs
Ci0gICAgSU5WQUxJRF9DTEFTUyA9ICduZy1pbnZhbGlkJywKLSAgICBQUklTVElORV9DTEFTUyA9
ICduZy1wcmlzdGluZScsCi0gICAgRElSVFlfQ0xBU1MgPSAnbmctZGlydHknOwotCi0vKioKLSAq
IEBuZ2RvYyBvYmplY3QKLSAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpuZ01vZGVsLk5nTW9kZWxDb250
cm9sbGVyCi0gKgotICogQHByb3BlcnR5IHtzdHJpbmd9ICR2aWV3VmFsdWUgQWN0dWFsIHN0cmlu
ZyB2YWx1ZSBpbiB0aGUgdmlldy4KLSAqIEBwcm9wZXJ0eSB7Kn0gJG1vZGVsVmFsdWUgVGhlIHZh
bHVlIGluIHRoZSBtb2RlbCwgdGhhdCB0aGUgY29udHJvbCBpcyBib3VuZCB0by4KLSAqIEBwcm9w
ZXJ0eSB7QXJyYXkuPEZ1bmN0aW9uPn0gJHBhcnNlcnMgV2hlbmV2ZXIgdGhlIGNvbnRyb2wgcmVh
ZHMgdmFsdWUgZnJvbSB0aGUgRE9NLCBpdCBleGVjdXRlcwotICogICAgIGFsbCBvZiB0aGVzZSBm
dW5jdGlvbnMgdG8gc2FuaXRpemUgLyBjb252ZXJ0IHRoZSB2YWx1ZSBhcyB3ZWxsIGFzIHZhbGlk
YXRlLgotICoKLSAqIEBwcm9wZXJ0eSB7QXJyYXkuPEZ1bmN0aW9uPn0gJGZvcm1hdHRlcnMgV2hl
bmV2ZXIgdGhlIG1vZGVsIHZhbHVlIGNoYW5nZXMsIGl0IGV4ZWN1dGVzIGFsbCBvZgotICogICAg
IHRoZXNlIGZ1bmN0aW9ucyB0byBjb252ZXJ0IHRoZSB2YWx1ZSBhcyB3ZWxsIGFzIHZhbGlkYXRl
LgotICoKLSAqIEBwcm9wZXJ0eSB7T2JqZWN0fSAkZXJyb3IgQW4gYmplY3QgaGFzaCB3aXRoIGFs
bCBlcnJvcnMgYXMga2V5cy4KLSAqCi0gKiBAcHJvcGVydHkge2Jvb2xlYW59ICRwcmlzdGluZSBU
cnVlIGlmIHVzZXIgaGFzIG5vdCBpbnRlcmFjdGVkIHdpdGggdGhlIGNvbnRyb2wgeWV0LgotICog
QHByb3BlcnR5IHtib29sZWFufSAkZGlydHkgVHJ1ZSBpZiB1c2VyIGhhcyBhbHJlYWR5IGludGVy
YWN0ZWQgd2l0aCB0aGUgY29udHJvbC4KLSAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gJHZhbGlkIFRy
dWUgaWYgdGhlcmUgaXMgbm8gZXJyb3IuCi0gKiBAcHJvcGVydHkge2Jvb2xlYW59ICRpbnZhbGlk
IFRydWUgaWYgYXQgbGVhc3Qgb25lIGVycm9yIG9uIHRoZSBjb250cm9sLgotICoKLSAqIEBkZXNj
cmlwdGlvbgotICoKLSAqIGBOZ01vZGVsQ29udHJvbGxlcmAgcHJvdmlkZXMgQVBJIGZvciB0aGUg
YG5nLW1vZGVsYCBkaXJlY3RpdmUuIFRoZSBjb250cm9sbGVyIGNvbnRhaW5zCi0gKiBzZXJ2aWNl
cyBmb3IgZGF0YS1iaW5kaW5nLCB2YWxpZGF0aW9uLCBDU1MgdXBkYXRlLCB2YWx1ZSBmb3JtYXR0
aW5nIGFuZCBwYXJzaW5nLiBJdAotICogc3BlY2lmaWNhbGx5IGRvZXMgbm90IGNvbnRhaW4gYW55
IGxvZ2ljIHdoaWNoIGRlYWxzIHdpdGggRE9NIHJlbmRlcmluZyBvciBsaXN0ZW5pbmcgdG8KLSAq
IERPTSBldmVudHMuIFRoZSBgTmdNb2RlbENvbnRyb2xsZXJgIGlzIG1lYW50IHRvIGJlIGV4dGVu
ZGVkIGJ5IG90aGVyIGRpcmVjdGl2ZXMgd2hlcmUsIHRoZQotICogZGlyZWN0aXZlIHByb3ZpZGVz
IERPTSBtYW5pcHVsYXRpb24gYW5kIHRoZSBgTmdNb2RlbENvbnRyb2xsZXJgIHByb3ZpZGVzIHRo
ZSBkYXRhLWJpbmRpbmcuCi0gKgotICogVGhpcyBleGFtcGxlIHNob3dzIGhvdyB0byB1c2UgYE5n
TW9kZWxDb250cm9sbGVyYCB3aXRoIGEgY3VzdG9tIGNvbnRyb2wgdG8gYWNoaWV2ZQotICogZGF0
YS1iaW5kaW5nLiBOb3RpY2UgaG93IGRpZmZlcmVudCBkaXJlY3RpdmVzIChgY29udGVudGVkaXRh
YmxlYCwgYG5nLW1vZGVsYCwgYW5kIGByZXF1aXJlZGApCi0gKiBjb2xsYWJvcmF0ZSB0b2dldGhl
ciB0byBhY2hpZXZlIHRoZSBkZXNpcmVkIHJlc3VsdC4KLSAqCi0gKiA8ZXhhbXBsZSBtb2R1bGU9
ImN1c3RvbUNvbnRyb2wiPgotICAgIDxmaWxlIG5hbWU9InN0eWxlLmNzcyI+Ci0gICAgICBbY29u
dGVudGVkaXRhYmxlXSB7Ci0gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwotICAgICAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKLSAgICAgICAgbWluLWhlaWdodDogMjBweDsKLSAg
ICAgIH0KLQotICAgICAgLm5nLWludmFsaWQgewotICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBy
ZWQ7Ci0gICAgICB9Ci0KLSAgICA8L2ZpbGU+Ci0gICAgPGZpbGUgbmFtZT0ic2NyaXB0LmpzIj4K
LSAgICAgIGFuZ3VsYXIubW9kdWxlKCdjdXN0b21Db250cm9sJywgW10pLgotICAgICAgICBkaXJl
Y3RpdmUoJ2NvbnRlbnRlZGl0YWJsZScsIGZ1bmN0aW9uKCkgewotICAgICAgICAgIHJldHVybiB7
Ci0gICAgICAgICAgICByZXN0cmljdDogJ0EnLCAvLyBvbmx5IGFjdGl2YXRlIG9uIGVsZW1lbnQg
YXR0cmlidXRlCi0gICAgICAgICAgICByZXF1aXJlOiAnP25nTW9kZWwnLCAvLyBnZXQgYSBob2xk
IG9mIE5nTW9kZWxDb250cm9sbGVyCi0gICAgICAgICAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwg
ZWxlbWVudCwgYXR0cnMsIG5nTW9kZWwpIHsKLSAgICAgICAgICAgICAgaWYoIW5nTW9kZWwpIHJl
dHVybjsgLy8gZG8gbm90aGluZyBpZiBubyBuZy1tb2RlbAotCi0gICAgICAgICAgICAgIC8vIFNw
ZWNpZnkgaG93IFVJIHNob3VsZCBiZSB1cGRhdGVkCi0gICAgICAgICAgICAgIG5nTW9kZWwuJHJl
bmRlciA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGVsZW1lbnQuaHRtbChuZ01vZGVs
LiR2aWV3VmFsdWUgfHwgJycpOwotICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgIC8v
IExpc3RlbiBmb3IgY2hhbmdlIGV2ZW50cyB0byBlbmFibGUgYmluZGluZwotICAgICAgICAgICAg
ICBlbGVtZW50LmJpbmQoJ2JsdXIga2V5dXAgY2hhbmdlJywgZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgc2NvcGUuJGFwcGx5KHJlYWQpOwotICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgICAgcmVhZCgpOyAvLyBpbml0aWFsaXplCi0KLSAgICAgICAgICAgICAgLy8gV3JpdGUgZGF0
YSB0byB0aGUgbW9kZWwKLSAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZCgpIHsKLSAgICAgICAg
ICAgICAgICBuZ01vZGVsLiRzZXRWaWV3VmFsdWUoZWxlbWVudC5odG1sKCkpOwotICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfTsKLSAgICAgICAgfSk7Ci0gICAgPC9m
aWxlPgotICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgotICAgICAgPGZvcm0gbmFtZT0ibXlG
b3JtIj4KLSAgICAgICA8ZGl2IGNvbnRlbnRlZGl0YWJsZQotICAgICAgICAgICAgbmFtZT0ibXlX
aWRnZXQiIG5nLW1vZGVsPSJ1c2VyQ29udGVudCIKLSAgICAgICAgICAgIHJlcXVpcmVkPkNoYW5n
ZSBtZSE8L2Rpdj4KLSAgICAgICAgPHNwYW4gbmctc2hvdz0ibXlGb3JtLm15V2lkZ2V0LiRlcnJv
ci5yZXF1aXJlZCI+UmVxdWlyZWQhPC9zcGFuPgotICAgICAgIDxocj4KLSAgICAgICA8dGV4dGFy
ZWEgbmctbW9kZWw9InVzZXJDb250ZW50Ij48L3RleHRhcmVhPgotICAgICAgPC9mb3JtPgotICAg
IDwvZmlsZT4KLSAgICA8ZmlsZSBuYW1lPSJzY2VuYXJpby5qcyI+Ci0gICAgICBpdCgnc2hvdWxk
IGRhdGEtYmluZCBhbmQgYmVjb21lIGludmFsaWQnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFy
IGNvbnRlbnRFZGl0YWJsZSA9IGVsZW1lbnQoJ1tjb250ZW50ZWRpdGFibGVdJyk7Ci0KLSAgICAg
ICAgZXhwZWN0KGNvbnRlbnRFZGl0YWJsZS50ZXh0KCkpLnRvRXF1YWwoJ0NoYW5nZSBtZSEnKTsK
LSAgICAgICAgaW5wdXQoJ3VzZXJDb250ZW50JykuZW50ZXIoJycpOwotICAgICAgICBleHBlY3Qo
Y29udGVudEVkaXRhYmxlLnRleHQoKSkudG9FcXVhbCgnJyk7Ci0gICAgICAgIGV4cGVjdChjb250
ZW50RWRpdGFibGUucHJvcCgnY2xhc3NOYW1lJykpLnRvTWF0Y2goL25nLWludmFsaWQtcmVxdWly
ZWQvKTsKLSAgICAgIH0pOwotICAgIDwvZmlsZT4KLSAqIDwvZXhhbXBsZT4KLSAqCi0gKi8KLXZh
ciBOZ01vZGVsQ29udHJvbGxlciA9IFsnJHNjb3BlJywgJyRleGNlcHRpb25IYW5kbGVyJywgJyRh
dHRycycsICckZWxlbWVudCcsICckcGFyc2UnLAotICAgIGZ1bmN0aW9uKCRzY29wZSwgJGV4Y2Vw
dGlvbkhhbmRsZXIsICRhdHRyLCAkZWxlbWVudCwgJHBhcnNlKSB7Ci0gIHRoaXMuJHZpZXdWYWx1
ZSA9IE51bWJlci5OYU47Ci0gIHRoaXMuJG1vZGVsVmFsdWUgPSBOdW1iZXIuTmFOOwotICB0aGlz
LiRwYXJzZXJzID0gW107Ci0gIHRoaXMuJGZvcm1hdHRlcnMgPSBbXTsKLSAgdGhpcy4kdmlld0No
YW5nZUxpc3RlbmVycyA9IFtdOwotICB0aGlzLiRwcmlzdGluZSA9IHRydWU7Ci0gIHRoaXMuJGRp
cnR5ID0gZmFsc2U7Ci0gIHRoaXMuJHZhbGlkID0gdHJ1ZTsKLSAgdGhpcy4kaW52YWxpZCA9IGZh
bHNlOwotICB0aGlzLiRuYW1lID0gJGF0dHIubmFtZTsKLQotICB2YXIgbmdNb2RlbEdldCA9ICRw
YXJzZSgkYXR0ci5uZ01vZGVsKSwKLSAgICAgIG5nTW9kZWxTZXQgPSBuZ01vZGVsR2V0LmFzc2ln
bjsKLQotICBpZiAoIW5nTW9kZWxTZXQpIHsKLSAgICB0aHJvdyBFcnJvcihOT05fQVNTSUdOQUJM
RV9NT0RFTF9FWFBSRVNTSU9OICsgJGF0dHIubmdNb2RlbCArCi0gICAgICAgICcgKCcgKyBzdGFy
dGluZ1RhZygkZWxlbWVudCkgKyAnKScpOwotICB9Ci0KLSAgLyoqCi0gICAqIEBuZ2RvYyBmdW5j
dGlvbgotICAgKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlciMk
cmVuZGVyCi0gICAqIEBtZXRob2RPZiBuZy5kaXJlY3RpdmU6bmdNb2RlbC5OZ01vZGVsQ29udHJv
bGxlcgotICAgKgotICAgKiBAZGVzY3JpcHRpb24KLSAgICogQ2FsbGVkIHdoZW4gdGhlIHZpZXcg
bmVlZHMgdG8gYmUgdXBkYXRlZC4gSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgdXNlciBvZiB0aGUg
bmctbW9kZWwKLSAgICogZGlyZWN0aXZlIHdpbGwgaW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAg
Ki8KLSAgdGhpcy4kcmVuZGVyID0gbm9vcDsKLQotICB2YXIgcGFyZW50Rm9ybSA9ICRlbGVtZW50
LmluaGVyaXRlZERhdGEoJyRmb3JtQ29udHJvbGxlcicpIHx8IG51bGxGb3JtQ3RybCwKLSAgICAg
IGludmFsaWRDb3VudCA9IDAsIC8vIHVzZWQgdG8gZWFzaWx5IGRldGVybWluZSBpZiB3ZSBhcmUg
dmFsaWQKLSAgICAgICRlcnJvciA9IHRoaXMuJGVycm9yID0ge307IC8vIGtlZXAgaW52YWxpZCBr
ZXlzIGhlcmUKLQotCi0gIC8vIFNldHVwIGluaXRpYWwgc3RhdGUgb2YgdGhlIGNvbnRyb2wKLSAg
JGVsZW1lbnQuYWRkQ2xhc3MoUFJJU1RJTkVfQ0xBU1MpOwotICB0b2dnbGVWYWxpZENzcyh0cnVl
KTsKLQotICAvLyBjb252ZW5pZW5jZSBtZXRob2QgZm9yIGVhc3kgdG9nZ2xpbmcgb2YgY2xhc3Nl
cwotICBmdW5jdGlvbiB0b2dnbGVWYWxpZENzcyhpc1ZhbGlkLCB2YWxpZGF0aW9uRXJyb3JLZXkp
IHsKLSAgICB2YWxpZGF0aW9uRXJyb3JLZXkgPSB2YWxpZGF0aW9uRXJyb3JLZXkgPyAnLScgKyBz
bmFrZV9jYXNlKHZhbGlkYXRpb25FcnJvcktleSwgJy0nKSA6ICcnOwotICAgICRlbGVtZW50Lgot
ICAgICAgcmVtb3ZlQ2xhc3MoKGlzVmFsaWQgPyBJTlZBTElEX0NMQVNTIDogVkFMSURfQ0xBU1Mp
ICsgdmFsaWRhdGlvbkVycm9yS2V5KS4KLSAgICAgIGFkZENsYXNzKChpc1ZhbGlkID8gVkFMSURf
Q0xBU1MgOiBJTlZBTElEX0NMQVNTKSArIHZhbGlkYXRpb25FcnJvcktleSk7Ci0gIH0KLQotICAv
KioKLSAgICogQG5nZG9jIGZ1bmN0aW9uCi0gICAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpuZ01vZGVs
Lk5nTW9kZWxDb250cm9sbGVyIyRzZXRWYWxpZGl0eQotICAgKiBAbWV0aG9kT2YgbmcuZGlyZWN0
aXZlOm5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXIKLSAgICoKLSAgICogQGRlc2NyaXB0aW9uCi0g
ICAqIENoYW5nZSB0aGUgdmFsaWRpdHkgc3RhdGUsIGFuZCBub3RpZmllcyB0aGUgZm9ybSB3aGVu
IHRoZSBjb250cm9sIGNoYW5nZXMgdmFsaWRpdHkuIChpLmUuIGl0Ci0gICAqIGRvZXMgbm90IG5v
dGlmeSBmb3JtIGlmIGdpdmVuIHZhbGlkYXRvciBpcyBhbHJlYWR5IG1hcmtlZCBhcyBpbnZhbGlk
KS4KLSAgICoKLSAgICogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCBieSB2YWxpZGF0b3Jz
IC0gaS5lLiB0aGUgcGFyc2VyIG9yIGZvcm1hdHRlciBmdW5jdGlvbnMuCi0gICAqCi0gICAqIEBw
YXJhbSB7c3RyaW5nfSB2YWxpZGF0aW9uRXJyb3JLZXkgTmFtZSBvZiB0aGUgdmFsaWRhdG9yLiB0
aGUgYHZhbGlkYXRpb25FcnJvcktleWAgd2lsbCBhc3NpZ24KLSAgICogICAgICAgIHRvIGAkZXJy
b3JbdmFsaWRhdGlvbkVycm9yS2V5XT1pc1ZhbGlkYCBzbyB0aGF0IGl0IGlzIGF2YWlsYWJsZSBm
b3IgZGF0YS1iaW5kaW5nLgotICAgKiAgICAgICAgVGhlIGB2YWxpZGF0aW9uRXJyb3JLZXlgIHNo
b3VsZCBiZSBpbiBjYW1lbENhc2UgYW5kIHdpbGwgZ2V0IGNvbnZlcnRlZCBpbnRvIGRhc2gtY2Fz
ZQotICAgKiAgICAgICAgZm9yIGNsYXNzIG5hbWUuIEV4YW1wbGU6IGBteUVycm9yYCB3aWxsIHJl
c3VsdCBpbiBgbmctdmFsaWQtbXktZXJyb3JgIGFuZCBgbmctaW52YWxpZC1teS1lcnJvcmAKLSAg
ICogICAgICAgIGNsYXNzIGFuZCBjYW4gYmUgYm91bmQgdG8gYXMgIGB7e3NvbWVGb3JtLnNvbWVD
b250cm9sLiRlcnJvci5teUVycm9yfX1gIC4KLSAgICogQHBhcmFtIHtib29sZWFufSBpc1ZhbGlk
IFdoZXRoZXIgdGhlIGN1cnJlbnQgc3RhdGUgaXMgdmFsaWQgKHRydWUpIG9yIGludmFsaWQgKGZh
bHNlKS4KLSAgICovCi0gIHRoaXMuJHNldFZhbGlkaXR5ID0gZnVuY3Rpb24odmFsaWRhdGlvbkVy
cm9yS2V5LCBpc1ZhbGlkKSB7Ci0gICAgaWYgKCRlcnJvclt2YWxpZGF0aW9uRXJyb3JLZXldID09
PSAhaXNWYWxpZCkgcmV0dXJuOwotCi0gICAgaWYgKGlzVmFsaWQpIHsKLSAgICAgIGlmICgkZXJy
b3JbdmFsaWRhdGlvbkVycm9yS2V5XSkgaW52YWxpZENvdW50LS07Ci0gICAgICBpZiAoIWludmFs
aWRDb3VudCkgewotICAgICAgICB0b2dnbGVWYWxpZENzcyh0cnVlKTsKLSAgICAgICAgdGhpcy4k
dmFsaWQgPSB0cnVlOwotICAgICAgICB0aGlzLiRpbnZhbGlkID0gZmFsc2U7Ci0gICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSAgICAgIHRvZ2dsZVZhbGlkQ3NzKGZhbHNlKTsKLSAgICAgIHRoaXMuJGlu
dmFsaWQgPSB0cnVlOwotICAgICAgdGhpcy4kdmFsaWQgPSBmYWxzZTsKLSAgICAgIGludmFsaWRD
b3VudCsrOwotICAgIH0KLQotICAgICRlcnJvclt2YWxpZGF0aW9uRXJyb3JLZXldID0gIWlzVmFs
aWQ7Ci0gICAgdG9nZ2xlVmFsaWRDc3MoaXNWYWxpZCwgdmFsaWRhdGlvbkVycm9yS2V5KTsKLQot
ICAgIHBhcmVudEZvcm0uJHNldFZhbGlkaXR5KHZhbGlkYXRpb25FcnJvcktleSwgaXNWYWxpZCwg
dGhpcyk7Ci0gIH07Ci0KLQotICAvKioKLSAgICogQG5nZG9jIGZ1bmN0aW9uCi0gICAqIEBuYW1l
IG5nLmRpcmVjdGl2ZTpuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVyIyRzZXRWaWV3VmFsdWUKLSAg
ICogQG1ldGhvZE9mIG5nLmRpcmVjdGl2ZTpuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVyCi0gICAq
Ci0gICAqIEBkZXNjcmlwdGlvbgotICAgKiBSZWFkIGEgdmFsdWUgZnJvbSB2aWV3LgotICAgKgot
ICAgKiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIGZyb20gd2l0aGluIGEgRE9NIGV2ZW50
IGhhbmRsZXIuCi0gICAqIEZvciBleGFtcGxlIHtAbGluayBuZy5kaXJlY3RpdmU6aW5wdXQgaW5w
dXR9IG9yCi0gICAqIHtAbGluayBuZy5kaXJlY3RpdmU6c2VsZWN0IHNlbGVjdH0gZGlyZWN0aXZl
cyBjYWxsIGl0LgotICAgKgotICAgKiBJdCBpbnRlcm5hbGx5IGNhbGxzIGFsbCBgcGFyc2Vyc2Ag
YW5kIGlmIHJlc3VsdGVkIHZhbHVlIGlzIHZhbGlkLCB1cGRhdGVzIHRoZSBtb2RlbCBhbmQKLSAg
ICogY2FsbHMgYWxsIHJlZ2lzdGVyZWQgY2hhbmdlIGxpc3RlbmVycy4KLSAgICoKLSAgICogQHBh
cmFtIHtzdHJpbmd9IHZhbHVlIFZhbHVlIGZyb20gdGhlIHZpZXcuCi0gICAqLwotICB0aGlzLiRz
ZXRWaWV3VmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgewotICAgIHRoaXMuJHZpZXdWYWx1ZSA9IHZh
bHVlOwotCi0gICAgLy8gY2hhbmdlIHRvIGRpcnR5Ci0gICAgaWYgKHRoaXMuJHByaXN0aW5lKSB7
Ci0gICAgICB0aGlzLiRkaXJ0eSA9IHRydWU7Ci0gICAgICB0aGlzLiRwcmlzdGluZSA9IGZhbHNl
OwotICAgICAgJGVsZW1lbnQucmVtb3ZlQ2xhc3MoUFJJU1RJTkVfQ0xBU1MpLmFkZENsYXNzKERJ
UlRZX0NMQVNTKTsKLSAgICAgIHBhcmVudEZvcm0uJHNldERpcnR5KCk7Ci0gICAgfQotCi0gICAg
Zm9yRWFjaCh0aGlzLiRwYXJzZXJzLCBmdW5jdGlvbihmbikgewotICAgICAgdmFsdWUgPSBmbih2
YWx1ZSk7Ci0gICAgfSk7Ci0KLSAgICBpZiAodGhpcy4kbW9kZWxWYWx1ZSAhPT0gdmFsdWUpIHsK
LSAgICAgIHRoaXMuJG1vZGVsVmFsdWUgPSB2YWx1ZTsKLSAgICAgIG5nTW9kZWxTZXQoJHNjb3Bl
LCB2YWx1ZSk7Ci0gICAgICBmb3JFYWNoKHRoaXMuJHZpZXdDaGFuZ2VMaXN0ZW5lcnMsIGZ1bmN0
aW9uKGxpc3RlbmVyKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgbGlzdGVuZXIoKTsKLSAg
ICAgICAgfSBjYXRjaChlKSB7Ci0gICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoZSk7Ci0gICAg
ICAgIH0KLSAgICAgIH0pCi0gICAgfQotICB9OwotCi0gIC8vIG1vZGVsIC0+IHZhbHVlCi0gIHZh
ciBjdHJsID0gdGhpczsKLQotICAkc2NvcGUuJHdhdGNoKGZ1bmN0aW9uIG5nTW9kZWxXYXRjaCgp
IHsKLSAgICB2YXIgdmFsdWUgPSBuZ01vZGVsR2V0KCRzY29wZSk7Ci0KLSAgICAvLyBpZiBzY29w
ZSBtb2RlbCB2YWx1ZSBhbmQgbmdNb2RlbCB2YWx1ZSBhcmUgb3V0IG9mIHN5bmMKLSAgICBpZiAo
Y3RybC4kbW9kZWxWYWx1ZSAhPT0gdmFsdWUpIHsKLQotICAgICAgdmFyIGZvcm1hdHRlcnMgPSBj
dHJsLiRmb3JtYXR0ZXJzLAotICAgICAgICAgIGlkeCA9IGZvcm1hdHRlcnMubGVuZ3RoOwotCi0g
ICAgICBjdHJsLiRtb2RlbFZhbHVlID0gdmFsdWU7Ci0gICAgICB3aGlsZShpZHgtLSkgewotICAg
ICAgICB2YWx1ZSA9IGZvcm1hdHRlcnNbaWR4XSh2YWx1ZSk7Ci0gICAgICB9Ci0KLSAgICAgIGlm
IChjdHJsLiR2aWV3VmFsdWUgIT09IHZhbHVlKSB7Ci0gICAgICAgIGN0cmwuJHZpZXdWYWx1ZSA9
IHZhbHVlOwotICAgICAgICBjdHJsLiRyZW5kZXIoKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0pOwot
fV07Ci0KLQotLyoqCi0gKiBAbmdkb2MgZGlyZWN0aXZlCi0gKiBAbmFtZSBuZy5kaXJlY3RpdmU6
bmdNb2RlbAotICoKLSAqIEBlbGVtZW50IGlucHV0Ci0gKgotICogQGRlc2NyaXB0aW9uCi0gKiBJ
cyBkaXJlY3RpdmUgdGhhdCB0ZWxscyBBbmd1bGFyIHRvIGRvIHR3by13YXkgZGF0YSBiaW5kaW5n
LiBJdCB3b3JrcyB0b2dldGhlciB3aXRoIGBpbnB1dGAsCi0gKiBgc2VsZWN0YCwgYHRleHRhcmVh
YC4gWW91IGNhbiBlYXNpbHkgd3JpdGUgeW91ciBvd24gZGlyZWN0aXZlcyB0byB1c2UgYG5nTW9k
ZWxgIGFzIHdlbGwuCi0gKgotICogYG5nTW9kZWxgIGlzIHJlc3BvbnNpYmxlIGZvcjoKLSAqCi0g
KiAtIGJpbmRpbmcgdGhlIHZpZXcgaW50byB0aGUgbW9kZWwsIHdoaWNoIG90aGVyIGRpcmVjdGl2
ZXMgc3VjaCBhcyBgaW5wdXRgLCBgdGV4dGFyZWFgIG9yIGBzZWxlY3RgCi0gKiAgIHJlcXVpcmUs
Ci0gKiAtIHByb3ZpZGluZyB2YWxpZGF0aW9uIGJlaGF2aW9yIChpLmUuIHJlcXVpcmVkLCBudW1i
ZXIsIGVtYWlsLCB1cmwpLAotICogLSBrZWVwaW5nIHN0YXRlIG9mIHRoZSBjb250cm9sICh2YWxp
ZC9pbnZhbGlkLCBkaXJ0eS9wcmlzdGluZSwgdmFsaWRhdGlvbiBlcnJvcnMpLAotICogLSBzZXR0
aW5nIHJlbGF0ZWQgY3NzIGNsYXNzIG9udG8gdGhlIGVsZW1lbnQgKGBuZy12YWxpZGAsIGBuZy1p
bnZhbGlkYCwgYG5nLWRpcnR5YCwgYG5nLXByaXN0aW5lYCksCi0gKiAtIHJlZ2lzdGVyIHRoZSBj
b250cm9sIHdpdGggcGFyZW50IHtAbGluayBuZy5kaXJlY3RpdmU6Zm9ybSBmb3JtfS4KLSAqCi0g
KiBGb3IgYmFzaWMgZXhhbXBsZXMsIGhvdyB0byB1c2UgYG5nTW9kZWxgLCBzZWU6Ci0gKgotICog
IC0ge0BsaW5rIG5nLmRpcmVjdGl2ZTppbnB1dCBpbnB1dH0KLSAqICAgIC0ge0BsaW5rIG5nLmRp
cmVjdGl2ZTppbnB1dC50ZXh0IHRleHR9Ci0gKiAgICAtIHtAbGluayBuZy5kaXJlY3RpdmU6aW5w
dXQuY2hlY2tib3ggY2hlY2tib3h9Ci0gKiAgICAtIHtAbGluayBuZy5kaXJlY3RpdmU6aW5wdXQu
cmFkaW8gcmFkaW99Ci0gKiAgICAtIHtAbGluayBuZy5kaXJlY3RpdmU6aW5wdXQubnVtYmVyIG51
bWJlcn0KLSAqICAgIC0ge0BsaW5rIG5nLmRpcmVjdGl2ZTppbnB1dC5lbWFpbCBlbWFpbH0KLSAq
ICAgIC0ge0BsaW5rIG5nLmRpcmVjdGl2ZTppbnB1dC51cmwgdXJsfQotICogIC0ge0BsaW5rIG5n
LmRpcmVjdGl2ZTpzZWxlY3Qgc2VsZWN0fQotICogIC0ge0BsaW5rIG5nLmRpcmVjdGl2ZTp0ZXh0
YXJlYSB0ZXh0YXJlYX0KLSAqCi0gKi8KLXZhciBuZ01vZGVsRGlyZWN0aXZlID0gZnVuY3Rpb24o
KSB7Ci0gIHJldHVybiB7Ci0gICAgcmVxdWlyZTogWyduZ01vZGVsJywgJ14/Zm9ybSddLAotICAg
IGNvbnRyb2xsZXI6IE5nTW9kZWxDb250cm9sbGVyLAotICAgIGxpbms6IGZ1bmN0aW9uKHNjb3Bl
LCBlbGVtZW50LCBhdHRyLCBjdHJscykgewotICAgICAgLy8gbm90aWZ5IG90aGVycywgZXNwZWNp
YWxseSBwYXJlbnQgZm9ybXMKLQotICAgICAgdmFyIG1vZGVsQ3RybCA9IGN0cmxzWzBdLAotICAg
ICAgICAgIGZvcm1DdHJsID0gY3RybHNbMV0gfHwgbnVsbEZvcm1DdHJsOwotCi0gICAgICBmb3Jt
Q3RybC4kYWRkQ29udHJvbChtb2RlbEN0cmwpOwotCi0gICAgICBlbGVtZW50LmJpbmQoJyRkZXN0
cm95JywgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGZvcm1DdHJsLiRyZW1vdmVDb250cm9sKG1vZGVs
Q3RybCk7Ci0gICAgICB9KTsKLSAgICB9Ci0gIH07Ci19OwotCi0KLS8qKgotICogQG5nZG9jIGRp
cmVjdGl2ZQotICogQG5hbWUgbmcuZGlyZWN0aXZlOm5nQ2hhbmdlCi0gKiBAcmVzdHJpY3QgRQot
ICoKLSAqIEBkZXNjcmlwdGlvbgotICogRXZhbHVhdGUgZ2l2ZW4gZXhwcmVzc2lvbiB3aGVuIHVz
ZXIgY2hhbmdlcyB0aGUgaW5wdXQuCi0gKiBUaGUgZXhwcmVzc2lvbiBpcyBub3QgZXZhbHVhdGVk
IHdoZW4gdGhlIHZhbHVlIGNoYW5nZSBpcyBjb21pbmcgZnJvbSB0aGUgbW9kZWwuCi0gKgotICog
Tm90ZSwgdGhpcyBkaXJlY3RpdmUgcmVxdWlyZXMgYG5nTW9kZWxgIHRvIGJlIHByZXNlbnQuCi0g
KgotICogQGVsZW1lbnQgaW5wdXQKLSAqCi0gKiBAZXhhbXBsZQotICogPGRvYzpleGFtcGxlPgot
ICogICA8ZG9jOnNvdXJjZT4KLSAqICAgICA8c2NyaXB0PgotICogICAgICAgZnVuY3Rpb24gQ29u
dHJvbGxlcigkc2NvcGUpIHsKLSAqICAgICAgICAgJHNjb3BlLmNvdW50ZXIgPSAwOwotICogICAg
ICAgICAkc2NvcGUuY2hhbmdlID0gZnVuY3Rpb24oKSB7Ci0gKiAgICAgICAgICAgJHNjb3BlLmNv
dW50ZXIrKzsKLSAqICAgICAgICAgfTsKLSAqICAgICAgIH0KLSAqICAgICA8L3NjcmlwdD4KLSAq
ICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9IkNvbnRyb2xsZXIiPgotICogICAgICAgPGlucHV0IHR5
cGU9ImNoZWNrYm94IiBuZy1tb2RlbD0iY29uZmlybWVkIiBuZy1jaGFuZ2U9ImNoYW5nZSgpIiBp
ZD0ibmctY2hhbmdlLWV4YW1wbGUxIiAvPgotICogICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94
IiBuZy1tb2RlbD0iY29uZmlybWVkIiBpZD0ibmctY2hhbmdlLWV4YW1wbGUyIiAvPgotICogICAg
ICAgPGxhYmVsIGZvcj0ibmctY2hhbmdlLWV4YW1wbGUyIj5Db25maXJtZWQ8L2xhYmVsPjxiciAv
PgotICogICAgICAgZGVidWcgPSB7e2NvbmZpcm1lZH19PGJyIC8+Ci0gKiAgICAgICBjb3VudGVy
ID0ge3tjb3VudGVyfX0KLSAqICAgICA8L2Rpdj4KLSAqICAgPC9kb2M6c291cmNlPgotICogICA8
ZG9jOnNjZW5hcmlvPgotICogICAgIGl0KCdzaG91bGQgZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24g
aWYgY2hhbmdpbmcgZnJvbSB2aWV3JywgZnVuY3Rpb24oKSB7Ci0gKiAgICAgICBleHBlY3QoYmlu
ZGluZygnY291bnRlcicpKS50b0VxdWFsKCcwJyk7Ci0gKiAgICAgICBlbGVtZW50KCcjbmctY2hh
bmdlLWV4YW1wbGUxJykuY2xpY2soKTsKLSAqICAgICAgIGV4cGVjdChiaW5kaW5nKCdjb3VudGVy
JykpLnRvRXF1YWwoJzEnKTsKLSAqICAgICAgIGV4cGVjdChiaW5kaW5nKCdjb25maXJtZWQnKSku
dG9FcXVhbCgndHJ1ZScpOwotICogICAgIH0pOwotICoKLSAqICAgICBpdCgnc2hvdWxkIG5vdCBl
dmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiBpZiBjaGFuZ2luZyBmcm9tIG1vZGVsJywgZnVuY3Rpb24o
KSB7Ci0gKiAgICAgICBlbGVtZW50KCcjbmctY2hhbmdlLWV4YW1wbGUyJykuY2xpY2soKTsKLSAq
ICAgICAgIGV4cGVjdChiaW5kaW5nKCdjb3VudGVyJykpLnRvRXF1YWwoJzAnKTsKLSAqICAgICAg
IGV4cGVjdChiaW5kaW5nKCdjb25maXJtZWQnKSkudG9FcXVhbCgndHJ1ZScpOwotICogICAgIH0p
OwotICogICA8L2RvYzpzY2VuYXJpbz4KLSAqIDwvZG9jOmV4YW1wbGU+Ci0gKi8KLXZhciBuZ0No
YW5nZURpcmVjdGl2ZSA9IHZhbHVlRm4oewotICByZXF1aXJlOiAnbmdNb2RlbCcsCi0gIGxpbms6
IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsKSB7Ci0gICAgY3RybC4kdmlld0No
YW5nZUxpc3RlbmVycy5wdXNoKGZ1bmN0aW9uKCkgewotICAgICAgc2NvcGUuJGV2YWwoYXR0ci5u
Z0NoYW5nZSk7Ci0gICAgfSk7Ci0gIH0KLX0pOwotCi0KLXZhciByZXF1aXJlZERpcmVjdGl2ZSA9
IGZ1bmN0aW9uKCkgewotICByZXR1cm4gewotICAgIHJlcXVpcmU6ICc/bmdNb2RlbCcsCi0gICAg
bGluazogZnVuY3Rpb24oc2NvcGUsIGVsbSwgYXR0ciwgY3RybCkgewotICAgICAgaWYgKCFjdHJs
KSByZXR1cm47Ci0gICAgICBhdHRyLnJlcXVpcmVkID0gdHJ1ZTsgLy8gZm9yY2UgdHJ1dGh5IGlu
IGNhc2Ugd2UgYXJlIG9uIG5vbiBpbnB1dCBlbGVtZW50Ci0KLSAgICAgIHZhciB2YWxpZGF0b3Ig
PSBmdW5jdGlvbih2YWx1ZSkgewotICAgICAgICBpZiAoYXR0ci5yZXF1aXJlZCAmJiAoaXNFbXB0
eSh2YWx1ZSkgfHwgdmFsdWUgPT09IGZhbHNlKSkgewotICAgICAgICAgIGN0cmwuJHNldFZhbGlk
aXR5KCdyZXF1aXJlZCcsIGZhbHNlKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgY3RybC4kc2V0VmFsaWRpdHkoJ3JlcXVpcmVkJywgdHJ1ZSk7Ci0gICAg
ICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICB9Ci0gICAgICB9OwotCi0gICAgICBjdHJsLiRm
b3JtYXR0ZXJzLnB1c2godmFsaWRhdG9yKTsKLSAgICAgIGN0cmwuJHBhcnNlcnMudW5zaGlmdCh2
YWxpZGF0b3IpOwotCi0gICAgICBhdHRyLiRvYnNlcnZlKCdyZXF1aXJlZCcsIGZ1bmN0aW9uKCkg
ewotICAgICAgICB2YWxpZGF0b3IoY3RybC4kdmlld1ZhbHVlKTsKLSAgICAgIH0pOwotICAgIH0K
LSAgfTsKLX07Ci0KLQotLyoqCi0gKiBAbmdkb2MgZGlyZWN0aXZlCi0gKiBAbmFtZSBuZy5kaXJl
Y3RpdmU6bmdMaXN0Ci0gKgotICogQGRlc2NyaXB0aW9uCi0gKiBUZXh0IGlucHV0IHRoYXQgY29u
dmVydHMgYmV0d2VlbiBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nIGludG8gYW4gYXJyYXkgb2Ygc3Ry
aW5ncy4KLSAqCi0gKiBAZWxlbWVudCBpbnB1dAotICogQHBhcmFtIHtzdHJpbmc9fSBuZ0xpc3Qg
b3B0aW9uYWwgZGVsaW1pdGVyIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gc3BsaXQgdGhlIHZhbHVl
LiBJZgotICogICBzcGVjaWZpZWQgaW4gZm9ybSBgL3NvbWV0aGluZy9gIHRoZW4gdGhlIHZhbHVl
IHdpbGwgYmUgY29udmVydGVkIGludG8gYSByZWd1bGFyIGV4cHJlc3Npb24uCi0gKgotICogQGV4
YW1wbGUKLSAgICA8ZG9jOmV4YW1wbGU+Ci0gICAgICA8ZG9jOnNvdXJjZT4KLSAgICAgICA8c2Ny
aXB0PgotICAgICAgICAgZnVuY3Rpb24gQ3RybCgkc2NvcGUpIHsKLSAgICAgICAgICAgJHNjb3Bl
Lm5hbWVzID0gWydpZ29yJywgJ21pc2tvJywgJ3ZvanRhJ107Ci0gICAgICAgICB9Ci0gICAgICAg
PC9zY3JpcHQ+Ci0gICAgICAgPGZvcm0gbmFtZT0ibXlGb3JtIiBuZy1jb250cm9sbGVyPSJDdHJs
Ij4KLSAgICAgICAgIExpc3Q6IDxpbnB1dCBuYW1lPSJuYW1lc0lucHV0IiBuZy1tb2RlbD0ibmFt
ZXMiIG5nLWxpc3QgcmVxdWlyZWQ+Ci0gICAgICAgICA8c3BhbiBjbGFzcz0iZXJyb3IiIG5nLXNo
b3c9Im15Rm9ybS5saXN0LiRlcnJvci5yZXF1aXJlZCI+Ci0gICAgICAgICAgIFJlcXVpcmVkITwv
c3Bhbj4KLSAgICAgICAgIDx0dD5uYW1lcyA9IHt7bmFtZXN9fTwvdHQ+PGJyLz4KLSAgICAgICAg
IDx0dD5teUZvcm0ubmFtZXNJbnB1dC4kdmFsaWQgPSB7e215Rm9ybS5uYW1lc0lucHV0LiR2YWxp
ZH19PC90dD48YnIvPgotICAgICAgICAgPHR0Pm15Rm9ybS5uYW1lc0lucHV0LiRlcnJvciA9IHt7
bXlGb3JtLm5hbWVzSW5wdXQuJGVycm9yfX08L3R0Pjxici8+Ci0gICAgICAgICA8dHQ+bXlGb3Jt
LiR2YWxpZCA9IHt7bXlGb3JtLiR2YWxpZH19PC90dD48YnIvPgotICAgICAgICAgPHR0Pm15Rm9y
bS4kZXJyb3IucmVxdWlyZWQgPSB7eyEhbXlGb3JtLiRlcnJvci5yZXF1aXJlZH19PC90dD48YnIv
PgotICAgICAgICA8L2Zvcm0+Ci0gICAgICA8L2RvYzpzb3VyY2U+Ci0gICAgICA8ZG9jOnNjZW5h
cmlvPgotICAgICAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgdG8gbW9kZWwnLCBmdW5jdGlvbigp
IHsKLSAgICAgICAgICBleHBlY3QoYmluZGluZygnbmFtZXMnKSkudG9FcXVhbCgnWyJpZ29yIiwi
bWlza28iLCJ2b2p0YSJdJyk7Ci0gICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ215Rm9ybS5uYW1l
c0lucHV0LiR2YWxpZCcpKS50b0VxdWFsKCd0cnVlJyk7Ci0gICAgICAgIH0pOwotCi0gICAgICAg
IGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBlbXB0eScsIGZ1bmN0aW9uKCkgewotICAgICAgICAg
IGlucHV0KCduYW1lcycpLmVudGVyKCcnKTsKLSAgICAgICAgICBleHBlY3QoYmluZGluZygnbmFt
ZXMnKSkudG9FcXVhbCgnW10nKTsKLSAgICAgICAgICBleHBlY3QoYmluZGluZygnbXlGb3JtLm5h
bWVzSW5wdXQuJHZhbGlkJykpLnRvRXF1YWwoJ2ZhbHNlJyk7Ci0gICAgICAgIH0pOwotICAgICAg
PC9kb2M6c2NlbmFyaW8+Ci0gICAgPC9kb2M6ZXhhbXBsZT4KLSAqLwotdmFyIG5nTGlzdERpcmVj
dGl2ZSA9IGZ1bmN0aW9uKCkgewotICByZXR1cm4gewotICAgIHJlcXVpcmU6ICduZ01vZGVsJywK
LSAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0ciwgY3RybCkgewotICAgICAg
dmFyIG1hdGNoID0gL1wvKC4qKVwvLy5leGVjKGF0dHIubmdMaXN0KSwKLSAgICAgICAgICBzZXBh
cmF0b3IgPSBtYXRjaCAmJiBuZXcgUmVnRXhwKG1hdGNoWzFdKSB8fCBhdHRyLm5nTGlzdCB8fCAn
LCc7Ci0KLSAgICAgIHZhciBwYXJzZSA9IGZ1bmN0aW9uKHZpZXdWYWx1ZSkgewotICAgICAgICB2
YXIgbGlzdCA9IFtdOwotCi0gICAgICAgIGlmICh2aWV3VmFsdWUpIHsKLSAgICAgICAgICBmb3JF
YWNoKHZpZXdWYWx1ZS5zcGxpdChzZXBhcmF0b3IpLCBmdW5jdGlvbih2YWx1ZSkgewotICAgICAg
ICAgICAgaWYgKHZhbHVlKSBsaXN0LnB1c2godHJpbSh2YWx1ZSkpOwotICAgICAgICAgIH0pOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGxpc3Q7Ci0gICAgICB9OwotCi0gICAgICBjdHJs
LiRwYXJzZXJzLnB1c2gocGFyc2UpOwotICAgICAgY3RybC4kZm9ybWF0dGVycy5wdXNoKGZ1bmN0
aW9uKHZhbHVlKSB7Ci0gICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkgewotICAgICAgICAgIHJl
dHVybiB2YWx1ZS5qb2luKCcsICcpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHVuZGVm
aW5lZDsKLSAgICAgIH0pOwotICAgIH0KLSAgfTsKLX07Ci0KLQotdmFyIENPTlNUQU5UX1ZBTFVF
X1JFR0VYUCA9IC9eKHRydWV8ZmFsc2V8XGQrKSQvOwotCi12YXIgbmdWYWx1ZURpcmVjdGl2ZSA9
IGZ1bmN0aW9uKCkgewotICByZXR1cm4gewotICAgIHByaW9yaXR5OiAxMDAsCi0gICAgY29tcGls
ZTogZnVuY3Rpb24odHBsLCB0cGxBdHRyKSB7Ci0gICAgICBpZiAoQ09OU1RBTlRfVkFMVUVfUkVH
RVhQLnRlc3QodHBsQXR0ci5uZ1ZhbHVlKSkgewotICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2Nv
cGUsIGVsbSwgYXR0cikgewotICAgICAgICAgIGF0dHIuJHNldCgndmFsdWUnLCBzY29wZS4kZXZh
bChhdHRyLm5nVmFsdWUpKTsKLSAgICAgICAgfTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJl
dHVybiBmdW5jdGlvbihzY29wZSwgZWxtLCBhdHRyKSB7Ci0gICAgICAgICAgc2NvcGUuJHdhdGNo
KGF0dHIubmdWYWx1ZSwgZnVuY3Rpb24gdmFsdWVXYXRjaEFjdGlvbih2YWx1ZSkgewotICAgICAg
ICAgICAgYXR0ci4kc2V0KCd2YWx1ZScsIHZhbHVlLCBmYWxzZSk7Ci0gICAgICAgICAgfSk7Ci0g
ICAgICAgIH07Ci0gICAgICB9Ci0gICAgfQotICB9OwotfTsKLQotLyoqCi0gKiBAbmdkb2MgZGly
ZWN0aXZlCi0gKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdCaW5kCi0gKgotICogQGRlc2NyaXB0aW9u
Ci0gKiBUaGUgYG5nQmluZGAgYXR0cmlidXRlIHRlbGxzIEFuZ3VsYXIgdG8gcmVwbGFjZSB0aGUg
dGV4dCBjb250ZW50IG9mIHRoZSBzcGVjaWZpZWQgSFRNTCBlbGVtZW50Ci0gKiB3aXRoIHRoZSB2
YWx1ZSBvZiBhIGdpdmVuIGV4cHJlc3Npb24sIGFuZCB0byB1cGRhdGUgdGhlIHRleHQgY29udGVu
dCB3aGVuIHRoZSB2YWx1ZSBvZiB0aGF0Ci0gKiBleHByZXNzaW9uIGNoYW5nZXMuCi0gKgotICog
VHlwaWNhbGx5LCB5b3UgZG9uJ3QgdXNlIGBuZ0JpbmRgIGRpcmVjdGx5LCBidXQgaW5zdGVhZCB5
b3UgdXNlIHRoZSBkb3VibGUgY3VybHkgbWFya3VwIGxpa2UKLSAqIGB7eyBleHByZXNzaW9uIH19
YCB3aGljaCBpcyBzaW1pbGFyIGJ1dCBsZXNzIHZlcmJvc2UuCi0gKgotICogT25lIHNjZW5hcmlv
IGluIHdoaWNoIHRoZSB1c2Ugb2YgYG5nQmluZGAgaXMgcHJlZmVycmVkIG92ZXIgYHt7IGV4cHJl
c3Npb24gfX1gIGJpbmRpbmcgaXMgd2hlbgotICogaXQncyBkZXNpcmFibGUgdG8gcHV0IGJpbmRp
bmdzIGludG8gdGVtcGxhdGUgdGhhdCBpcyBtb21lbnRhcmlseSBkaXNwbGF5ZWQgYnkgdGhlIGJy
b3dzZXIgaW4gaXRzCi0gKiByYXcgc3RhdGUgYmVmb3JlIEFuZ3VsYXIgY29tcGlsZXMgaXQuIFNp
bmNlIGBuZ0JpbmRgIGlzIGFuIGVsZW1lbnQgYXR0cmlidXRlLCBpdCBtYWtlcyB0aGUKLSAqIGJp
bmRpbmdzIGludmlzaWJsZSB0byB0aGUgdXNlciB3aGlsZSB0aGUgcGFnZSBpcyBsb2FkaW5nLgot
ICoKLSAqIEFuIGFsdGVybmF0aXZlIHNvbHV0aW9uIHRvIHRoaXMgcHJvYmxlbSB3b3VsZCBiZSB1
c2luZyB0aGUKLSAqIHtAbGluayBuZy5kaXJlY3RpdmU6bmdDbG9hayBuZ0Nsb2FrfSBkaXJlY3Rp
dmUuCi0gKgotICoKLSAqIEBlbGVtZW50IEFOWQotICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ0Jp
bmQge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbHVhdGUuCi0gKgot
ICogQGV4YW1wbGUKLSAqIEVudGVyIGEgbmFtZSBpbiB0aGUgTGl2ZSBQcmV2aWV3IHRleHQgYm94
OyB0aGUgZ3JlZXRpbmcgYmVsb3cgdGhlIHRleHQgYm94IGNoYW5nZXMgaW5zdGFudGx5LgotICAg
PGRvYzpleGFtcGxlPgotICAgICA8ZG9jOnNvdXJjZT4KLSAgICAgICA8c2NyaXB0PgotICAgICAg
ICAgZnVuY3Rpb24gQ3RybCgkc2NvcGUpIHsKLSAgICAgICAgICAgJHNjb3BlLm5hbWUgPSAnV2hp
cmxlZCc7Ci0gICAgICAgICB9Ci0gICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgPGRpdiBuZy1jb250
cm9sbGVyPSJDdHJsIj4KLSAgICAgICAgIEVudGVyIG5hbWU6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBu
Zy1tb2RlbD0ibmFtZSI+PGJyPgotICAgICAgICAgSGVsbG8gPHNwYW4gbmctYmluZD0ibmFtZSI+
PC9zcGFuPiEKLSAgICAgICA8L2Rpdj4KLSAgICAgPC9kb2M6c291cmNlPgotICAgICA8ZG9jOnNj
ZW5hcmlvPgotICAgICAgIGl0KCdzaG91bGQgY2hlY2sgbmctYmluZCcsIGZ1bmN0aW9uKCkgewot
ICAgICAgICAgZXhwZWN0KHVzaW5nKCcuZG9jLWV4YW1wbGUtbGl2ZScpLmJpbmRpbmcoJ25hbWUn
KSkudG9CZSgnV2hpcmxlZCcpOwotICAgICAgICAgdXNpbmcoJy5kb2MtZXhhbXBsZS1saXZlJyku
aW5wdXQoJ25hbWUnKS5lbnRlcignd29ybGQnKTsKLSAgICAgICAgIGV4cGVjdCh1c2luZygnLmRv
Yy1leGFtcGxlLWxpdmUnKS5iaW5kaW5nKCduYW1lJykpLnRvQmUoJ3dvcmxkJyk7Ci0gICAgICAg
fSk7Ci0gICAgIDwvZG9jOnNjZW5hcmlvPgotICAgPC9kb2M6ZXhhbXBsZT4KLSAqLwotdmFyIG5n
QmluZERpcmVjdGl2ZSA9IG5nRGlyZWN0aXZlKGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRy
KSB7Ci0gIGVsZW1lbnQuYWRkQ2xhc3MoJ25nLWJpbmRpbmcnKS5kYXRhKCckYmluZGluZycsIGF0
dHIubmdCaW5kKTsKLSAgc2NvcGUuJHdhdGNoKGF0dHIubmdCaW5kLCBmdW5jdGlvbiBuZ0JpbmRX
YXRjaEFjdGlvbih2YWx1ZSkgewotICAgIGVsZW1lbnQudGV4dCh2YWx1ZSA9PSB1bmRlZmluZWQg
PyAnJyA6IHZhbHVlKTsKLSAgfSk7Ci19KTsKLQotCi0vKioKLSAqIEBuZ2RvYyBkaXJlY3RpdmUK
LSAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpuZ0JpbmRUZW1wbGF0ZQotICoKLSAqIEBkZXNjcmlwdGlv
bgotICogVGhlIGBuZ0JpbmRUZW1wbGF0ZWAgZGlyZWN0aXZlIHNwZWNpZmllcyB0aGF0IHRoZSBl
bGVtZW50Ci0gKiB0ZXh0IHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIHRoZSB0ZW1wbGF0ZSBpbiBu
Z0JpbmRUZW1wbGF0ZS4KLSAqIFVubGlrZSBuZ0JpbmQgdGhlIG5nQmluZFRlbXBsYXRlIGNhbiBj
b250YWluIG11bHRpcGxlIGB7e2AgYH19YAotICogZXhwcmVzc2lvbnMuIChUaGlzIGlzIHJlcXVp
cmVkIHNpbmNlIHNvbWUgSFRNTCBlbGVtZW50cwotICogY2FuIG5vdCBoYXZlIFNQQU4gZWxlbWVu
dHMgc3VjaCBhcyBUSVRMRSwgb3IgT1BUSU9OIHRvIG5hbWUgYSBmZXcuKQotICoKLSAqIEBlbGVt
ZW50IEFOWQotICogQHBhcmFtIHtzdHJpbmd9IG5nQmluZFRlbXBsYXRlIHRlbXBsYXRlIG9mIGZv
cm0KLSAqICAgPHR0Pnt7PC90dD4gPHR0PmV4cHJlc3Npb248L3R0PiA8dHQ+fX08L3R0PiB0byBl
dmFsLgotICoKLSAqIEBleGFtcGxlCi0gKiBUcnkgaXQgaGVyZTogZW50ZXIgdGV4dCBpbiB0ZXh0
IGJveCBhbmQgd2F0Y2ggdGhlIGdyZWV0aW5nIGNoYW5nZS4KLSAgIDxkb2M6ZXhhbXBsZT4KLSAg
ICAgPGRvYzpzb3VyY2U+Ci0gICAgICAgPHNjcmlwdD4KLSAgICAgICAgIGZ1bmN0aW9uIEN0cmwo
JHNjb3BlKSB7Ci0gICAgICAgICAgICRzY29wZS5zYWx1dGF0aW9uID0gJ0hlbGxvJzsKLSAgICAg
ICAgICAgJHNjb3BlLm5hbWUgPSAnV29ybGQnOwotICAgICAgICAgfQotICAgICAgIDwvc2NyaXB0
PgotICAgICAgIDxkaXYgbmctY29udHJvbGxlcj0iQ3RybCI+Ci0gICAgICAgIFNhbHV0YXRpb246
IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuZy1tb2RlbD0ic2FsdXRhdGlvbiI+PGJyPgotICAgICAgICBO
YW1lOiA8aW5wdXQgdHlwZT0idGV4dCIgbmctbW9kZWw9Im5hbWUiPjxicj4KLSAgICAgICAgPHBy
ZSBuZy1iaW5kLXRlbXBsYXRlPSJ7e3NhbHV0YXRpb259fSB7e25hbWV9fSEiPjwvcHJlPgotICAg
ICAgIDwvZGl2PgotICAgICA8L2RvYzpzb3VyY2U+Ci0gICAgIDxkb2M6c2NlbmFyaW8+Ci0gICAg
ICAgaXQoJ3Nob3VsZCBjaGVjayBuZy1iaW5kJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICBleHBl
Y3QodXNpbmcoJy5kb2MtZXhhbXBsZS1saXZlJykuYmluZGluZygnc2FsdXRhdGlvbicpKS4KLSAg
ICAgICAgICAgdG9CZSgnSGVsbG8nKTsKLSAgICAgICAgIGV4cGVjdCh1c2luZygnLmRvYy1leGFt
cGxlLWxpdmUnKS5iaW5kaW5nKCduYW1lJykpLgotICAgICAgICAgICB0b0JlKCdXb3JsZCcpOwot
ICAgICAgICAgdXNpbmcoJy5kb2MtZXhhbXBsZS1saXZlJykuaW5wdXQoJ3NhbHV0YXRpb24nKS5l
bnRlcignR3JlZXRpbmdzJyk7Ci0gICAgICAgICB1c2luZygnLmRvYy1leGFtcGxlLWxpdmUnKS5p
bnB1dCgnbmFtZScpLmVudGVyKCd1c2VyJyk7Ci0gICAgICAgICBleHBlY3QodXNpbmcoJy5kb2Mt
ZXhhbXBsZS1saXZlJykuYmluZGluZygnc2FsdXRhdGlvbicpKS4KLSAgICAgICAgICAgdG9CZSgn
R3JlZXRpbmdzJyk7Ci0gICAgICAgICBleHBlY3QodXNpbmcoJy5kb2MtZXhhbXBsZS1saXZlJyku
YmluZGluZygnbmFtZScpKS4KLSAgICAgICAgICAgdG9CZSgndXNlcicpOwotICAgICAgIH0pOwot
ICAgICA8L2RvYzpzY2VuYXJpbz4KLSAgIDwvZG9jOmV4YW1wbGU+Ci0gKi8KLXZhciBuZ0JpbmRU
ZW1wbGF0ZURpcmVjdGl2ZSA9IFsnJGludGVycG9sYXRlJywgZnVuY3Rpb24oJGludGVycG9sYXRl
KSB7Ci0gIHJldHVybiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cikgewotICAgIC8vIFRP
RE86IG1vdmUgdGhpcyB0byBzY2VuYXJpbyBydW5uZXIKLSAgICB2YXIgaW50ZXJwb2xhdGVGbiA9
ICRpbnRlcnBvbGF0ZShlbGVtZW50LmF0dHIoYXR0ci4kYXR0ci5uZ0JpbmRUZW1wbGF0ZSkpOwot
ICAgIGVsZW1lbnQuYWRkQ2xhc3MoJ25nLWJpbmRpbmcnKS5kYXRhKCckYmluZGluZycsIGludGVy
cG9sYXRlRm4pOwotICAgIGF0dHIuJG9ic2VydmUoJ25nQmluZFRlbXBsYXRlJywgZnVuY3Rpb24o
dmFsdWUpIHsKLSAgICAgIGVsZW1lbnQudGV4dCh2YWx1ZSk7Ci0gICAgfSk7Ci0gIH0KLX1dOwot
Ci0KLS8qKgotICogQG5nZG9jIGRpcmVjdGl2ZQotICogQG5hbWUgbmcuZGlyZWN0aXZlOm5nQmlu
ZEh0bWxVbnNhZmUKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIENyZWF0ZXMgYSBiaW5kaW5nIHRo
YXQgd2lsbCBpbm5lckhUTUwgdGhlIHJlc3VsdCBvZiBldmFsdWF0aW5nIHRoZSBgZXhwcmVzc2lv
bmAgaW50byB0aGUgY3VycmVudAotICogZWxlbWVudC4gKlRoZSBpbm5lckhUTUwtZWQgY29udGVu
dCB3aWxsIG5vdCBiZSBzYW5pdGl6ZWQhKiBZb3Ugc2hvdWxkIHVzZSB0aGlzIGRpcmVjdGl2ZSBv
bmx5IGlmCi0gKiB7QGxpbmsgbmdTYW5pdGl6ZS5kaXJlY3RpdmU6bmdCaW5kSHRtbCBuZ0JpbmRI
dG1sfSBkaXJlY3RpdmUgaXMgdG9vCi0gKiByZXN0cmljdGl2ZSBhbmQgd2hlbiB5b3UgYWJzb2x1
dGVseSB0cnVzdCB0aGUgc291cmNlIG9mIHRoZSBjb250ZW50IHlvdSBhcmUgYmluZGluZyB0by4K
LSAqCi0gKiBTZWUge0BsaW5rIG5nU2FuaXRpemUuJHNhbml0aXplICRzYW5pdGl6ZX0gZG9jcyBm
b3IgZXhhbXBsZXMuCi0gKgotICogQGVsZW1lbnQgQU5ZCi0gKiBAcGFyYW0ge2V4cHJlc3Npb259
IG5nQmluZEh0bWxVbnNhZmUge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8g
ZXZhbHVhdGUuCi0gKi8KLXZhciBuZ0JpbmRIdG1sVW5zYWZlRGlyZWN0aXZlID0gW2Z1bmN0aW9u
KCkgewotICByZXR1cm4gZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHIpIHsKLSAgICBlbGVt
ZW50LmFkZENsYXNzKCduZy1iaW5kaW5nJykuZGF0YSgnJGJpbmRpbmcnLCBhdHRyLm5nQmluZEh0
bWxVbnNhZmUpOwotICAgIHNjb3BlLiR3YXRjaChhdHRyLm5nQmluZEh0bWxVbnNhZmUsIGZ1bmN0
aW9uIG5nQmluZEh0bWxVbnNhZmVXYXRjaEFjdGlvbih2YWx1ZSkgewotICAgICAgZWxlbWVudC5o
dG1sKHZhbHVlIHx8ICcnKTsKLSAgICB9KTsKLSAgfTsKLX1dOwotCi1mdW5jdGlvbiBjbGFzc0Rp
cmVjdGl2ZShuYW1lLCBzZWxlY3RvcikgewotICBuYW1lID0gJ25nQ2xhc3MnICsgbmFtZTsKLSAg
cmV0dXJuIG5nRGlyZWN0aXZlKGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyKSB7Ci0gICAg
dmFyIG9sZFZhbCA9IHVuZGVmaW5lZDsKLQotICAgIHNjb3BlLiR3YXRjaChhdHRyW25hbWVdLCBu
Z0NsYXNzV2F0Y2hBY3Rpb24sIHRydWUpOwotCi0gICAgYXR0ci4kb2JzZXJ2ZSgnY2xhc3MnLCBm
dW5jdGlvbih2YWx1ZSkgewotICAgICAgdmFyIG5nQ2xhc3MgPSBzY29wZS4kZXZhbChhdHRyW25h
bWVdKTsKLSAgICAgIG5nQ2xhc3NXYXRjaEFjdGlvbihuZ0NsYXNzLCBuZ0NsYXNzKTsKLSAgICB9
KTsKLQotCi0gICAgaWYgKG5hbWUgIT09ICduZ0NsYXNzJykgewotICAgICAgc2NvcGUuJHdhdGNo
KCckaW5kZXgnLCBmdW5jdGlvbigkaW5kZXgsIG9sZCRpbmRleCkgewotICAgICAgICB2YXIgbW9k
ID0gJGluZGV4ICYgMTsKLSAgICAgICAgaWYgKG1vZCAhPT0gb2xkJGluZGV4ICYgMSkgewotICAg
ICAgICAgIGlmIChtb2QgPT09IHNlbGVjdG9yKSB7Ci0gICAgICAgICAgICBhZGRDbGFzcyhzY29w
ZS4kZXZhbChhdHRyW25hbWVdKSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJl
bW92ZUNsYXNzKHNjb3BlLiRldmFsKGF0dHJbbmFtZV0pKTsKLSAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgIH0pOwotICAgIH0KLQotCi0gICAgZnVuY3Rpb24gbmdDbGFzc1dhdGNoQWN0aW9u
KG5ld1ZhbCkgewotICAgICAgaWYgKHNlbGVjdG9yID09PSB0cnVlIHx8IHNjb3BlLiRpbmRleCAl
IDIgPT09IHNlbGVjdG9yKSB7Ci0gICAgICAgIGlmIChvbGRWYWwgJiYgIWVxdWFscyhuZXdWYWws
b2xkVmFsKSkgewotICAgICAgICAgIHJlbW92ZUNsYXNzKG9sZFZhbCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgYWRkQ2xhc3MobmV3VmFsKTsKLSAgICAgIH0KLSAgICAgIG9sZFZhbCA9IGNvcHkobmV3
VmFsKTsKLSAgICB9Ci0KLQotICAgIGZ1bmN0aW9uIHJlbW92ZUNsYXNzKGNsYXNzVmFsKSB7Ci0g
ICAgICBpZiAoaXNPYmplY3QoY2xhc3NWYWwpICYmICFpc0FycmF5KGNsYXNzVmFsKSkgewotICAg
ICAgICBjbGFzc1ZhbCA9IG1hcChjbGFzc1ZhbCwgZnVuY3Rpb24odiwgaykgeyBpZiAodikgcmV0
dXJuIGsgfSk7Ci0gICAgICB9Ci0gICAgICBlbGVtZW50LnJlbW92ZUNsYXNzKGlzQXJyYXkoY2xh
c3NWYWwpID8gY2xhc3NWYWwuam9pbignICcpIDogY2xhc3NWYWwpOwotICAgIH0KLQotCi0gICAg
ZnVuY3Rpb24gYWRkQ2xhc3MoY2xhc3NWYWwpIHsKLSAgICAgIGlmIChpc09iamVjdChjbGFzc1Zh
bCkgJiYgIWlzQXJyYXkoY2xhc3NWYWwpKSB7Ci0gICAgICAgIGNsYXNzVmFsID0gbWFwKGNsYXNz
VmFsLCBmdW5jdGlvbih2LCBrKSB7IGlmICh2KSByZXR1cm4gayB9KTsKLSAgICAgIH0KLSAgICAg
IGlmIChjbGFzc1ZhbCkgewotICAgICAgICBlbGVtZW50LmFkZENsYXNzKGlzQXJyYXkoY2xhc3NW
YWwpID8gY2xhc3NWYWwuam9pbignICcpIDogY2xhc3NWYWwpOwotICAgICAgfQotICAgIH0KLSAg
fSk7Ci19Ci0KLS8qKgotICogQG5nZG9jIGRpcmVjdGl2ZQotICogQG5hbWUgbmcuZGlyZWN0aXZl
Om5nQ2xhc3MKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIFRoZSBgbmdDbGFzc2AgYWxsb3dzIHlv
dSB0byBzZXQgQ1NTIGNsYXNzIG9uIEhUTUwgZWxlbWVudCBkeW5hbWljYWxseSBieSBkYXRhYmlu
ZGluZyBhbgotICogZXhwcmVzc2lvbiB0aGF0IHJlcHJlc2VudHMgYWxsIGNsYXNzZXMgdG8gYmUg
YWRkZWQuCi0gKgotICogVGhlIGRpcmVjdGl2ZSB3b24ndCBhZGQgZHVwbGljYXRlIGNsYXNzZXMg
aWYgYSBwYXJ0aWN1bGFyIGNsYXNzIHdhcyBhbHJlYWR5IHNldC4KLSAqCi0gKiBXaGVuIHRoZSBl
eHByZXNzaW9uIGNoYW5nZXMsIHRoZSBwcmV2aW91c2x5IGFkZGVkIGNsYXNzZXMgYXJlIHJlbW92
ZWQgYW5kIG9ubHkgdGhlbiB0aGUKLSAqIG5ldyBjbGFzc2VzIGFyZSBhZGRlZC4KLSAqCi0gKiBA
ZWxlbWVudCBBTlkKLSAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdDbGFzcyB7QGxpbmsgZ3VpZGUv
ZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsLiBUaGUgcmVzdWx0Ci0gKiAgIG9mIHRoZSBl
dmFsdWF0aW9uIGNhbiBiZSBhIHN0cmluZyByZXByZXNlbnRpbmcgc3BhY2UgZGVsaW1pdGVkIGNs
YXNzCi0gKiAgIG5hbWVzLCBhbiBhcnJheSwgb3IgYSBtYXAgb2YgY2xhc3MgbmFtZXMgdG8gYm9v
bGVhbiB2YWx1ZXMuCi0gKgotICogQGV4YW1wbGUKLSAgIDxleGFtcGxlPgotICAgICA8ZmlsZSBu
YW1lPSJpbmRleC5odG1sIj4KLSAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSJzZXQi
IG5nLWNsaWNrPSJteVZhcj0nbXktY2xhc3MnIj4KLSAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24i
IHZhbHVlPSJjbGVhciIgbmctY2xpY2s9Im15VmFyPScnIj4KLSAgICAgIDxicj4KLSAgICAgIDxz
cGFuIG5nLWNsYXNzPSJteVZhciI+U2FtcGxlIFRleHQ8L3NwYW4+Ci0gICAgIDwvZmlsZT4KLSAg
ICAgPGZpbGUgbmFtZT0ic3R5bGUuY3NzIj4KLSAgICAgICAubXktY2xhc3MgewotICAgICAgICAg
Y29sb3I6IHJlZDsKLSAgICAgICB9Ci0gICAgIDwvZmlsZT4KLSAgICAgPGZpbGUgbmFtZT0ic2Nl
bmFyaW8uanMiPgotICAgICAgIGl0KCdzaG91bGQgY2hlY2sgbmctY2xhc3MnLCBmdW5jdGlvbigp
IHsKLSAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBzcGFuJykucHJv
cCgnY2xhc3NOYW1lJykpLm5vdCgpLgotICAgICAgICAgICB0b01hdGNoKC9teS1jbGFzcy8pOwot
Ci0gICAgICAgICB1c2luZygnLmRvYy1leGFtcGxlLWxpdmUnKS5lbGVtZW50KCc6YnV0dG9uOmZp
cnN0JykuY2xpY2soKTsKLQotICAgICAgICAgZXhwZWN0KGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1s
aXZlIHNwYW4nKS5wcm9wKCdjbGFzc05hbWUnKSkuCi0gICAgICAgICAgIHRvTWF0Y2goL215LWNs
YXNzLyk7Ci0KLSAgICAgICAgIHVzaW5nKCcuZG9jLWV4YW1wbGUtbGl2ZScpLmVsZW1lbnQoJzpi
dXR0b246bGFzdCcpLmNsaWNrKCk7Ci0KLSAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4
YW1wbGUtbGl2ZSBzcGFuJykucHJvcCgnY2xhc3NOYW1lJykpLm5vdCgpLgotICAgICAgICAgICB0
b01hdGNoKC9teS1jbGFzcy8pOwotICAgICAgIH0pOwotICAgICA8L2ZpbGU+Ci0gICA8L2V4YW1w
bGU+Ci0gKi8KLXZhciBuZ0NsYXNzRGlyZWN0aXZlID0gY2xhc3NEaXJlY3RpdmUoJycsIHRydWUp
OwotCi0vKioKLSAqIEBuZ2RvYyBkaXJlY3RpdmUKLSAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpuZ0Ns
YXNzT2RkCi0gKgotICogQGRlc2NyaXB0aW9uCi0gKiBUaGUgYG5nQ2xhc3NPZGRgIGFuZCBgbmdD
bGFzc0V2ZW5gIGRpcmVjdGl2ZXMgd29yayBleGFjdGx5IGFzCi0gKiB7QGxpbmsgbmcuZGlyZWN0
aXZlOm5nQ2xhc3MgbmdDbGFzc30sIGV4Y2VwdCBpdCB3b3JrcyBpbgotICogY29uanVuY3Rpb24g
d2l0aCBgbmdSZXBlYXRgIGFuZCB0YWtlcyBhZmZlY3Qgb25seSBvbiBvZGQgKGV2ZW4pIHJvd3Mu
Ci0gKgotICogVGhpcyBkaXJlY3RpdmUgY2FuIGJlIGFwcGxpZWQgb25seSB3aXRoaW4gYSBzY29w
ZSBvZiBhbgotICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ1JlcGVhdCBuZ1JlcGVhdH0uCi0gKgot
ICogQGVsZW1lbnQgQU5ZCi0gKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nQ2xhc3NPZGQge0BsaW5r
IGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbC4gVGhlIHJlc3VsdAotICogICBv
ZiB0aGUgZXZhbHVhdGlvbiBjYW4gYmUgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHNwYWNlIGRlbGlt
aXRlZCBjbGFzcyBuYW1lcyBvciBhbiBhcnJheS4KLSAqCi0gKiBAZXhhbXBsZQotICAgPGV4YW1w
bGU+Ci0gICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgotICAgICAgICA8b2wgbmctaW5pdD0i
bmFtZXM9WydKb2huJywgJ01hcnknLCAnQ2F0ZScsICdTdXonXSI+Ci0gICAgICAgICAgPGxpIG5n
LXJlcGVhdD0ibmFtZSBpbiBuYW1lcyI+Ci0gICAgICAgICAgIDxzcGFuIG5nLWNsYXNzLW9kZD0i
J29kZCciIG5nLWNsYXNzLWV2ZW49IidldmVuJyI+Ci0gICAgICAgICAgICAge3tuYW1lfX0KLSAg
ICAgICAgICAgPC9zcGFuPgotICAgICAgICAgIDwvbGk+Ci0gICAgICAgIDwvb2w+Ci0gICAgIDwv
ZmlsZT4KLSAgICAgPGZpbGUgbmFtZT0ic3R5bGUuY3NzIj4KLSAgICAgICAub2RkIHsKLSAgICAg
ICAgIGNvbG9yOiByZWQ7Ci0gICAgICAgfQotICAgICAgIC5ldmVuIHsKLSAgICAgICAgIGNvbG9y
OiBibHVlOwotICAgICAgIH0KLSAgICAgPC9maWxlPgotICAgICA8ZmlsZSBuYW1lPSJzY2VuYXJp
by5qcyI+Ci0gICAgICAgaXQoJ3Nob3VsZCBjaGVjayBuZy1jbGFzcy1vZGQgYW5kIG5nLWNsYXNz
LWV2ZW4nLCBmdW5jdGlvbigpIHsKLSAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1w
bGUtbGl2ZSBsaTpmaXJzdCBzcGFuJykucHJvcCgnY2xhc3NOYW1lJykpLgotICAgICAgICAgICB0
b01hdGNoKC9vZGQvKTsKLSAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2
ZSBsaTpsYXN0IHNwYW4nKS5wcm9wKCdjbGFzc05hbWUnKSkuCi0gICAgICAgICAgIHRvTWF0Y2go
L2V2ZW4vKTsKLSAgICAgICB9KTsKLSAgICAgPC9maWxlPgotICAgPC9leGFtcGxlPgotICovCi12
YXIgbmdDbGFzc09kZERpcmVjdGl2ZSA9IGNsYXNzRGlyZWN0aXZlKCdPZGQnLCAwKTsKLQotLyoq
Ci0gKiBAbmdkb2MgZGlyZWN0aXZlCi0gKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdDbGFzc0V2ZW4K
LSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIFRoZSBgbmdDbGFzc09kZGAgYW5kIGBuZ0NsYXNzRXZl
bmAgZGlyZWN0aXZlcyB3b3JrIGV4YWN0bHkgYXMKLSAqIHtAbGluayBuZy5kaXJlY3RpdmU6bmdD
bGFzcyBuZ0NsYXNzfSwgZXhjZXB0IGl0IHdvcmtzIGluCi0gKiBjb25qdW5jdGlvbiB3aXRoIGBu
Z1JlcGVhdGAgYW5kIHRha2VzIGFmZmVjdCBvbmx5IG9uIG9kZCAoZXZlbikgcm93cy4KLSAqCi0g
KiBUaGlzIGRpcmVjdGl2ZSBjYW4gYmUgYXBwbGllZCBvbmx5IHdpdGhpbiBhIHNjb3BlIG9mIGFu
Ci0gKiB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nUmVwZWF0IG5nUmVwZWF0fS4KLSAqCi0gKiBAZWxl
bWVudCBBTlkKLSAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdDbGFzc0V2ZW4ge0BsaW5rIGd1aWRl
L2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbC4gVGhlCi0gKiAgIHJlc3VsdCBvZiB0aGUg
ZXZhbHVhdGlvbiBjYW4gYmUgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHNwYWNlIGRlbGltaXRlZCBj
bGFzcyBuYW1lcyBvciBhbiBhcnJheS4KLSAqCi0gKiBAZXhhbXBsZQotICAgPGV4YW1wbGU+Ci0g
ICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgotICAgICAgICA8b2wgbmctaW5pdD0ibmFtZXM9
WydKb2huJywgJ01hcnknLCAnQ2F0ZScsICdTdXonXSI+Ci0gICAgICAgICAgPGxpIG5nLXJlcGVh
dD0ibmFtZSBpbiBuYW1lcyI+Ci0gICAgICAgICAgIDxzcGFuIG5nLWNsYXNzLW9kZD0iJ29kZCci
IG5nLWNsYXNzLWV2ZW49IidldmVuJyI+Ci0gICAgICAgICAgICAge3tuYW1lfX0gJm5ic3A7ICZu
YnNwOyAmbmJzcDsKLSAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgIDwvbGk+Ci0gICAgICAg
IDwvb2w+Ci0gICAgIDwvZmlsZT4KLSAgICAgPGZpbGUgbmFtZT0ic3R5bGUuY3NzIj4KLSAgICAg
ICAub2RkIHsKLSAgICAgICAgIGNvbG9yOiByZWQ7Ci0gICAgICAgfQotICAgICAgIC5ldmVuIHsK
LSAgICAgICAgIGNvbG9yOiBibHVlOwotICAgICAgIH0KLSAgICAgPC9maWxlPgotICAgICA8Zmls
ZSBuYW1lPSJzY2VuYXJpby5qcyI+Ci0gICAgICAgaXQoJ3Nob3VsZCBjaGVjayBuZy1jbGFzcy1v
ZGQgYW5kIG5nLWNsYXNzLWV2ZW4nLCBmdW5jdGlvbigpIHsKLSAgICAgICAgIGV4cGVjdChlbGVt
ZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBsaTpmaXJzdCBzcGFuJykucHJvcCgnY2xhc3NOYW1lJykp
LgotICAgICAgICAgICB0b01hdGNoKC9vZGQvKTsKLSAgICAgICAgIGV4cGVjdChlbGVtZW50KCcu
ZG9jLWV4YW1wbGUtbGl2ZSBsaTpsYXN0IHNwYW4nKS5wcm9wKCdjbGFzc05hbWUnKSkuCi0gICAg
ICAgICAgIHRvTWF0Y2goL2V2ZW4vKTsKLSAgICAgICB9KTsKLSAgICAgPC9maWxlPgotICAgPC9l
eGFtcGxlPgotICovCi12YXIgbmdDbGFzc0V2ZW5EaXJlY3RpdmUgPSBjbGFzc0RpcmVjdGl2ZSgn
RXZlbicsIDEpOwotCi0vKioKLSAqIEBuZ2RvYyBkaXJlY3RpdmUKLSAqIEBuYW1lIG5nLmRpcmVj
dGl2ZTpuZ0Nsb2FrCi0gKgotICogQGRlc2NyaXB0aW9uCi0gKiBUaGUgYG5nQ2xvYWtgIGRpcmVj
dGl2ZSBpcyB1c2VkIHRvIHByZXZlbnQgdGhlIEFuZ3VsYXIgaHRtbCB0ZW1wbGF0ZSBmcm9tIGJl
aW5nIGJyaWVmbHkKLSAqIGRpc3BsYXllZCBieSB0aGUgYnJvd3NlciBpbiBpdHMgcmF3ICh1bmNv
bXBpbGVkKSBmb3JtIHdoaWxlIHlvdXIgYXBwbGljYXRpb24gaXMgbG9hZGluZy4gVXNlIHRoaXMK
LSAqIGRpcmVjdGl2ZSB0byBhdm9pZCB0aGUgdW5kZXNpcmFibGUgZmxpY2tlciBlZmZlY3QgY2F1
c2VkIGJ5IHRoZSBodG1sIHRlbXBsYXRlIGRpc3BsYXkuCi0gKgotICogVGhlIGRpcmVjdGl2ZSBj
YW4gYmUgYXBwbGllZCB0byB0aGUgYDxib2R5PmAgZWxlbWVudCwgYnV0IHR5cGljYWxseSBhIGZp
bmUtZ3JhaW5lZCBhcHBsaWNhdGlvbiBpcwotICogcHJlZmVyZWQgaW4gb3JkZXIgdG8gYmVuZWZp
dCBmcm9tIHByb2dyZXNzaXZlIHJlbmRlcmluZyBvZiB0aGUgYnJvd3NlciB2aWV3LgotICoKLSAq
IGBuZ0Nsb2FrYCB3b3JrcyBpbiBjb29wZXJhdGlvbiB3aXRoIGEgY3NzIHJ1bGUgdGhhdCBpcyBl
bWJlZGRlZCB3aXRoaW4gYGFuZ3VsYXIuanNgIGFuZAotICogIGBhbmd1bGFyLm1pbi5qc2AgZmls
ZXMuIEZvbGxvd2luZyBpcyB0aGUgY3NzIHJ1bGU6Ci0gKgotICogPHByZT4KLSAqIFtuZ1w6Y2xv
YWtdLCBbbmctY2xvYWtdLCBbZGF0YS1uZy1jbG9ha10sIFt4LW5nLWNsb2FrXSwgLm5nLWNsb2Fr
LCAueC1uZy1jbG9hayB7Ci0gKiAgIGRpc3BsYXk6IG5vbmU7Ci0gKiB9Ci0gKiA8L3ByZT4KLSAq
Ci0gKiBXaGVuIHRoaXMgY3NzIHJ1bGUgaXMgbG9hZGVkIGJ5IHRoZSBicm93c2VyLCBhbGwgaHRt
bCBlbGVtZW50cyAoaW5jbHVkaW5nIHRoZWlyIGNoaWxkcmVuKSB0aGF0Ci0gKiBhcmUgdGFnZ2Vk
IHdpdGggdGhlIGBuZy1jbG9ha2AgZGlyZWN0aXZlIGFyZSBoaWRkZW4uIFdoZW4gQW5ndWxhciBj
b21lcyBhY3Jvc3MgdGhpcyBkaXJlY3RpdmUKLSAqIGR1cmluZyB0aGUgY29tcGlsYXRpb24gb2Yg
dGhlIHRlbXBsYXRlIGl0IGRlbGV0ZXMgdGhlIGBuZ0Nsb2FrYCBlbGVtZW50IGF0dHJpYnV0ZSwg
d2hpY2gKLSAqIG1ha2VzIHRoZSBjb21waWxlZCBlbGVtZW50IHZpc2libGUuCi0gKgotICogRm9y
IHRoZSBiZXN0IHJlc3VsdCwgYGFuZ3VsYXIuanNgIHNjcmlwdCBtdXN0IGJlIGxvYWRlZCBpbiB0
aGUgaGVhZCBzZWN0aW9uIG9mIHRoZSBodG1sIGZpbGU7Ci0gKiBhbHRlcm5hdGl2ZWx5LCB0aGUg
Y3NzIHJ1bGUgKGFib3ZlKSBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBleHRlcm5hbCBzdHlsZXNo
ZWV0IG9mIHRoZQotICogYXBwbGljYXRpb24uCi0gKgotICogTGVnYWN5IGJyb3dzZXJzLCBsaWtl
IElFNywgZG8gbm90IHByb3ZpZGUgYXR0cmlidXRlIHNlbGVjdG9yIHN1cHBvcnQgKGFkZGVkIGlu
IENTUyAyLjEpIHNvIHRoZXkKLSAqIGNhbm5vdCBtYXRjaCB0aGUgYFtuZ1w6Y2xvYWtdYCBzZWxl
Y3Rvci4gVG8gd29yayBhcm91bmQgdGhpcyBsaW1pdGF0aW9uLCB5b3UgbXVzdCBhZGQgdGhlIGNz
cwotICogY2xhc3MgYG5nQ2xvYWtgIGluIGFkZGl0aW9uIHRvIGBuZ0Nsb2FrYCBkaXJlY3RpdmUg
YXMgc2hvd24gaW4gdGhlIGV4YW1wbGUgYmVsb3cuCi0gKgotICogQGVsZW1lbnQgQU5ZCi0gKgot
ICogQGV4YW1wbGUKLSAgIDxkb2M6ZXhhbXBsZT4KLSAgICAgPGRvYzpzb3VyY2U+Ci0gICAgICAg
IDxkaXYgaWQ9InRlbXBsYXRlMSIgbmctY2xvYWs+e3sgJ2hlbGxvJyB9fTwvZGl2PgotICAgICAg
ICA8ZGl2IGlkPSJ0ZW1wbGF0ZTIiIG5nLWNsb2FrIGNsYXNzPSJuZy1jbG9hayI+e3sgJ2hlbGxv
IElFNycgfX08L2Rpdj4KLSAgICAgPC9kb2M6c291cmNlPgotICAgICA8ZG9jOnNjZW5hcmlvPgot
ICAgICAgIGl0KCdzaG91bGQgcmVtb3ZlIHRoZSB0ZW1wbGF0ZSBkaXJlY3RpdmUgYW5kIGNzcyBj
bGFzcycsIGZ1bmN0aW9uKCkgewotICAgICAgICAgZXhwZWN0KGVsZW1lbnQoJy5kb2MtZXhhbXBs
ZS1saXZlICN0ZW1wbGF0ZTEnKS5hdHRyKCduZy1jbG9haycpKS4KLSAgICAgICAgICAgbm90KCku
dG9CZURlZmluZWQoKTsKLSAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2
ZSAjdGVtcGxhdGUyJykuYXR0cignbmctY2xvYWsnKSkuCi0gICAgICAgICAgIG5vdCgpLnRvQmVE
ZWZpbmVkKCk7Ci0gICAgICAgfSk7Ci0gICAgIDwvZG9jOnNjZW5hcmlvPgotICAgPC9kb2M6ZXhh
bXBsZT4KLSAqCi0gKi8KLXZhciBuZ0Nsb2FrRGlyZWN0aXZlID0gbmdEaXJlY3RpdmUoewotICBj
b21waWxlOiBmdW5jdGlvbihlbGVtZW50LCBhdHRyKSB7Ci0gICAgYXR0ci4kc2V0KCduZ0Nsb2Fr
JywgdW5kZWZpbmVkKTsKLSAgICBlbGVtZW50LnJlbW92ZUNsYXNzKCduZy1jbG9haycpOwotICB9
Ci19KTsKLQotLyoqCi0gKiBAbmdkb2MgZGlyZWN0aXZlCi0gKiBAbmFtZSBuZy5kaXJlY3RpdmU6
bmdDb250cm9sbGVyCi0gKgotICogQGRlc2NyaXB0aW9uCi0gKiBUaGUgYG5nQ29udHJvbGxlcmAg
ZGlyZWN0aXZlIGFzc2lnbnMgYmVoYXZpb3IgdG8gYSBzY29wZS4gVGhpcyBpcyBhIGtleSBhc3Bl
Y3Qgb2YgaG93IGFuZ3VsYXIKLSAqIHN1cHBvcnRzIHRoZSBwcmluY2lwbGVzIGJlaGluZCB0aGUg
TW9kZWwtVmlldy1Db250cm9sbGVyIGRlc2lnbiBwYXR0ZXJuLgotICoKLSAqIE1WQyBjb21wb25l
bnRzIGluIGFuZ3VsYXI6Ci0gKgotICogKiBNb2RlbCDigJQgVGhlIE1vZGVsIGlzIGRhdGEgaW4g
c2NvcGUgcHJvcGVydGllczsgc2NvcGVzIGFyZSBhdHRhY2hlZCB0byB0aGUgRE9NLgotICogKiBW
aWV3IOKAlCBUaGUgdGVtcGxhdGUgKEhUTUwgd2l0aCBkYXRhIGJpbmRpbmdzKSBpcyByZW5kZXJl
ZCBpbnRvIHRoZSBWaWV3LgotICogKiBDb250cm9sbGVyIOKAlCBUaGUgYG5nQ29udHJvbGxlcmAg
ZGlyZWN0aXZlIHNwZWNpZmllcyBhIENvbnRyb2xsZXIgY2xhc3M7IHRoZSBjbGFzcyBoYXMKLSAq
ICAgbWV0aG9kcyB0aGF0IHR5cGljYWxseSBleHByZXNzIHRoZSBidXNpbmVzcyBsb2dpYyBiZWhp
bmQgdGhlIGFwcGxpY2F0aW9uLgotICoKLSAqIE5vdGUgdGhhdCBhbiBhbHRlcm5hdGl2ZSB3YXkg
dG8gZGVmaW5lIGNvbnRyb2xsZXJzIGlzIHZpYSB0aGUge0BsaW5rIG5nLiRyb3V0ZSAkcm91dGV9
IHNlcnZpY2UuCi0gKgotICogQGVsZW1lbnQgQU5ZCi0gKiBAc2NvcGUKLSAqIEBwYXJhbSB7ZXhw
cmVzc2lvbn0gbmdDb250cm9sbGVyIE5hbWUgb2YgYSBnbG9iYWxseSBhY2Nlc3NpYmxlIGNvbnN0
cnVjdG9yIGZ1bmN0aW9uIG9yIGFuCi0gKiAgICAge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhw
cmVzc2lvbn0gdGhhdCBvbiB0aGUgY3VycmVudCBzY29wZSBldmFsdWF0ZXMgdG8gYQotICogICAg
IGNvbnN0cnVjdG9yIGZ1bmN0aW9uLgotICoKLSAqIEBleGFtcGxlCi0gKiBIZXJlIGlzIGEgc2lt
cGxlIGZvcm0gZm9yIGVkaXRpbmcgdXNlciBjb250YWN0IGluZm9ybWF0aW9uLiBBZGRpbmcsIHJl
bW92aW5nLCBjbGVhcmluZywgYW5kCi0gKiBncmVldGluZyBhcmUgbWV0aG9kcyBkZWNsYXJlZCBv
biB0aGUgY29udHJvbGxlciAoc2VlIHNvdXJjZSB0YWIpLiBUaGVzZSBtZXRob2RzIGNhbgotICog
ZWFzaWx5IGJlIGNhbGxlZCBmcm9tIHRoZSBhbmd1bGFyIG1hcmt1cC4gTm90aWNlIHRoYXQgdGhl
IHNjb3BlIGJlY29tZXMgdGhlIGB0aGlzYCBmb3IgdGhlCi0gKiBjb250cm9sbGVyJ3MgaW5zdGFu
Y2UuIFRoaXMgYWxsb3dzIGZvciBlYXN5IGFjY2VzcyB0byB0aGUgdmlldyBkYXRhIGZyb20gdGhl
IGNvbnRyb2xsZXIuIEFsc28KLSAqIG5vdGljZSB0aGF0IGFueSBjaGFuZ2VzIHRvIHRoZSBkYXRh
IGFyZSBhdXRvbWF0aWNhbGx5IHJlZmxlY3RlZCBpbiB0aGUgVmlldyB3aXRob3V0IHRoZSBuZWVk
Ci0gKiBmb3IgYSBtYW51YWwgdXBkYXRlLgotICAgPGRvYzpleGFtcGxlPgotICAgICA8ZG9jOnNv
dXJjZT4KLSAgICAgIDxzY3JpcHQ+Ci0gICAgICAgIGZ1bmN0aW9uIFNldHRpbmdzQ29udHJvbGxl
cigkc2NvcGUpIHsKLSAgICAgICAgICAkc2NvcGUubmFtZSA9ICJKb2huIFNtaXRoIjsKLSAgICAg
ICAgICAkc2NvcGUuY29udGFjdHMgPSBbCi0gICAgICAgICAgICB7dHlwZToncGhvbmUnLCB2YWx1
ZTonNDA4IDU1NSAxMjEyJ30sCi0gICAgICAgICAgICB7dHlwZTonZW1haWwnLCB2YWx1ZTonam9o
bi5zbWl0aEBleGFtcGxlLm9yZyd9IF07Ci0KLSAgICAgICAgICAkc2NvcGUuZ3JlZXQgPSBmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgYWxlcnQodGhpcy5uYW1lKTsKLSAgICAgICAgICB9OwotCi0g
ICAgICAgICAgJHNjb3BlLmFkZENvbnRhY3QgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgdGhp
cy5jb250YWN0cy5wdXNoKHt0eXBlOidlbWFpbCcsIHZhbHVlOid5b3VybmFtZUBleGFtcGxlLm9y
Zyd9KTsKLSAgICAgICAgICB9OwotCi0gICAgICAgICAgJHNjb3BlLnJlbW92ZUNvbnRhY3QgPSBm
dW5jdGlvbihjb250YWN0VG9SZW1vdmUpIHsKLSAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5j
b250YWN0cy5pbmRleE9mKGNvbnRhY3RUb1JlbW92ZSk7Ci0gICAgICAgICAgIHRoaXMuY29udGFj
dHMuc3BsaWNlKGluZGV4LCAxKTsKLSAgICAgICAgICB9OwotCi0gICAgICAgICAgJHNjb3BlLmNs
ZWFyQ29udGFjdCA9IGZ1bmN0aW9uKGNvbnRhY3QpIHsKLSAgICAgICAgICAgY29udGFjdC50eXBl
ID0gJ3Bob25lJzsKLSAgICAgICAgICAgY29udGFjdC52YWx1ZSA9ICcnOwotICAgICAgICAgIH07
Ci0gICAgICAgIH0KLSAgICAgIDwvc2NyaXB0PgotICAgICAgPGRpdiBuZy1jb250cm9sbGVyPSJT
ZXR0aW5nc0NvbnRyb2xsZXIiPgotICAgICAgICBOYW1lOiA8aW5wdXQgdHlwZT0idGV4dCIgbmct
bW9kZWw9Im5hbWUiLz4KLSAgICAgICAgWyA8YSBocmVmPSIiIG5nLWNsaWNrPSJncmVldCgpIj5n
cmVldDwvYT4gXTxici8+Ci0gICAgICAgIENvbnRhY3Q6Ci0gICAgICAgIDx1bD4KLSAgICAgICAg
ICA8bGkgbmctcmVwZWF0PSJjb250YWN0IGluIGNvbnRhY3RzIj4KLSAgICAgICAgICAgIDxzZWxl
Y3QgbmctbW9kZWw9ImNvbnRhY3QudHlwZSI+Ci0gICAgICAgICAgICAgICA8b3B0aW9uPnBob25l
PC9vcHRpb24+Ci0gICAgICAgICAgICAgICA8b3B0aW9uPmVtYWlsPC9vcHRpb24+Ci0gICAgICAg
ICAgICA8L3NlbGVjdD4KLSAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuZy1tb2RlbD0i
Y29udGFjdC52YWx1ZSIvPgotICAgICAgICAgICAgWyA8YSBocmVmPSIiIG5nLWNsaWNrPSJjbGVh
ckNvbnRhY3QoY29udGFjdCkiPmNsZWFyPC9hPgotICAgICAgICAgICAgfCA8YSBocmVmPSIiIG5n
LWNsaWNrPSJyZW1vdmVDb250YWN0KGNvbnRhY3QpIj5YPC9hPiBdCi0gICAgICAgICAgPC9saT4K
LSAgICAgICAgICA8bGk+WyA8YSBocmVmPSIiIG5nLWNsaWNrPSJhZGRDb250YWN0KCkiPmFkZDwv
YT4gXTwvbGk+Ci0gICAgICAgPC91bD4KLSAgICAgIDwvZGl2PgotICAgICA8L2RvYzpzb3VyY2U+
Ci0gICAgIDxkb2M6c2NlbmFyaW8+Ci0gICAgICAgaXQoJ3Nob3VsZCBjaGVjayBjb250cm9sbGVy
JywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxp
dmUgZGl2PjppbnB1dCcpLnZhbCgpKS50b0JlKCdKb2huIFNtaXRoJyk7Ci0gICAgICAgICBleHBl
Y3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgbGk6bnRoLWNoaWxkKDEpIGlucHV0JykudmFs
KCkpCi0gICAgICAgICAgIC50b0JlKCc0MDggNTU1IDEyMTInKTsKLSAgICAgICAgIGV4cGVjdChl
bGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBsaTpudGgtY2hpbGQoMikgaW5wdXQnKS52YWwoKSkK
LSAgICAgICAgICAgLnRvQmUoJ2pvaG4uc21pdGhAZXhhbXBsZS5vcmcnKTsKLQotICAgICAgICAg
ZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgbGk6Zmlyc3QgYTpjb250YWlucygiY2xlYXIiKScp
LmNsaWNrKCk7Ci0gICAgICAgICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgbGk6
Zmlyc3QgaW5wdXQnKS52YWwoKSkudG9CZSgnJyk7Ci0KLSAgICAgICAgIGVsZW1lbnQoJy5kb2Mt
ZXhhbXBsZS1saXZlIGxpOmxhc3QgYTpjb250YWlucygiYWRkIiknKS5jbGljaygpOwotICAgICAg
ICAgZXhwZWN0KGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlIGxpOm50aC1jaGlsZCgzKSBpbnB1
dCcpLnZhbCgpKQotICAgICAgICAgICAudG9CZSgneW91cm5hbWVAZXhhbXBsZS5vcmcnKTsKLSAg
ICAgICB9KTsKLSAgICAgPC9kb2M6c2NlbmFyaW8+Ci0gICA8L2RvYzpleGFtcGxlPgotICovCi12
YXIgbmdDb250cm9sbGVyRGlyZWN0aXZlID0gW2Z1bmN0aW9uKCkgewotICByZXR1cm4gewotICAg
IHNjb3BlOiB0cnVlLAotICAgIGNvbnRyb2xsZXI6ICdAJwotICB9OwotfV07Ci0KLS8qKgotICog
QG5nZG9jIGRpcmVjdGl2ZQotICogQG5hbWUgbmcuZGlyZWN0aXZlOm5nQ3NwCi0gKiBAcHJpb3Jp
dHkgMTAwMAotICoKLSAqIEBlbGVtZW50IGh0bWwKLSAqIEBkZXNjcmlwdGlvbgotICogRW5hYmxl
cyBbQ1NQIChDb250ZW50IFNlY3VyaXR5IFBvbGljeSldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemls
bGEub3JnL2VuL1NlY3VyaXR5L0NTUCkgc3VwcG9ydC4KLSAqIAotICogVGhpcyBpcyBuZWNlc3Nh
cnkgd2hlbiBkZXZlbG9waW5nIHRoaW5ncyBsaWtlIEdvb2dsZSBDaHJvbWUgRXh0ZW5zaW9ucy4K
LSAqIAotICogQ1NQIGZvcmJpZHMgYXBwcyB0byB1c2UgYGV2YWxgIG9yIGBGdW5jdGlvbihzdHJp
bmcpYCBnZW5lcmF0ZWQgZnVuY3Rpb25zIChhbW9uZyBvdGhlciB0aGluZ3MpLgotICogRm9yIHVz
IHRvIGJlIGNvbXBhdGlibGUsIHdlIGp1c3QgbmVlZCB0byBpbXBsZW1lbnQgdGhlICJnZXR0ZXJG
biIgaW4gJHBhcnNlIHdpdGhvdXQgdmlvbGF0aW5nCi0gKiBhbnkgb2YgdGhlc2UgcmVzdHJpY3Rp
b25zLgotICogCi0gKiBBbmd1bGFySlMgdXNlcyBgRnVuY3Rpb24oc3RyaW5nKWAgZ2VuZXJhdGVk
IGZ1bmN0aW9ucyBhcyBhIHNwZWVkIG9wdGltaXphdGlvbi4gQnkgYXBwbHlpbmcgYG5nQ3NwYAot
ICogaXQgaXMgYmUgcG9zc2libGUgdG8gb3B0IGludG8gdGhlIENTUCBjb21wYXRpYmxlIG1vZGUu
IFdoZW4gdGhpcyBtb2RlIGlzIG9uIEFuZ3VsYXJKUyB3aWxsCi0gKiBldmFsdWF0ZSBhbGwgZXhw
cmVzc2lvbnMgdXAgdG8gMzAlIHNsb3dlciB0aGFuIGluIG5vbi1DU1AgbW9kZSwgYnV0IG5vIHNl
Y3VyaXR5IHZpb2xhdGlvbnMgd2lsbAotICogYmUgcmFpc2VkLgotICogCi0gKiBJbiBvcmRlciB0
byB1c2UgdGhpcyBmZWF0dXJlIHB1dCBgbmdDc3BgIGRpcmVjdGl2ZSBvbiB0aGUgcm9vdCBlbGVt
ZW50IG9mIHRoZSBhcHBsaWNhdGlvbi4KLSAqIAotICogQGV4YW1wbGUKLSAqIFRoaXMgZXhhbXBs
ZSBzaG93cyBob3cgdG8gYXBwbHkgdGhlIGBuZ0NzcGAgZGlyZWN0aXZlIHRvIHRoZSBgaHRtbGAg
dGFnLgotICAgPHByZT4KLSAgICAgPCFkb2N0eXBlIGh0bWw+Ci0gICAgIDxodG1sIG5nLWFwcCBu
Zy1jc3A+Ci0gICAgIC4uLgotICAgICAuLi4KLSAgICAgPC9odG1sPgotICAgPC9wcmU+Ci0gKi8K
LQotdmFyIG5nQ3NwRGlyZWN0aXZlID0gWyckc25pZmZlcicsIGZ1bmN0aW9uKCRzbmlmZmVyKSB7
Ci0gIHJldHVybiB7Ci0gICAgcHJpb3JpdHk6IDEwMDAsCi0gICAgY29tcGlsZTogZnVuY3Rpb24o
KSB7Ci0gICAgICAkc25pZmZlci5jc3AgPSB0cnVlOwotICAgIH0KLSAgfTsKLX1dOwotCi0vKioK
LSAqIEBuZ2RvYyBkaXJlY3RpdmUKLSAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpuZ0NsaWNrCi0gKgot
ICogQGRlc2NyaXB0aW9uCi0gKiBUaGUgbmdDbGljayBhbGxvd3MgeW91IHRvIHNwZWNpZnkgY3Vz
dG9tIGJlaGF2aW9yIHdoZW4KLSAqIGVsZW1lbnQgaXMgY2xpY2tlZC4KLSAqCi0gKiBAZWxlbWVu
dCBBTlkKLSAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdDbGljayB7QGxpbmsgZ3VpZGUvZXhwcmVz
c2lvbiBFeHByZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9uCi0gKiBjbGljay4gKEV2ZW50IG9iamVj
dCBpcyBhdmFpbGFibGUgYXMgYCRldmVudGApCi0gKgotICogQGV4YW1wbGUKLSAgIDxkb2M6ZXhh
bXBsZT4KLSAgICAgPGRvYzpzb3VyY2U+Ci0gICAgICA8YnV0dG9uIG5nLWNsaWNrPSJjb3VudCA9
IGNvdW50ICsgMSIgbmctaW5pdD0iY291bnQ9MCI+Ci0gICAgICAgIEluY3JlbWVudAotICAgICAg
PC9idXR0b24+Ci0gICAgICBjb3VudDoge3tjb3VudH19Ci0gICAgIDwvZG9jOnNvdXJjZT4KLSAg
ICAgPGRvYzpzY2VuYXJpbz4KLSAgICAgICBpdCgnc2hvdWxkIGNoZWNrIG5nLWNsaWNrJywgZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICBleHBlY3QoYmluZGluZygnY291bnQnKSkudG9CZSgnMCcpOwot
ICAgICAgICAgZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgOmJ1dHRvbicpLmNsaWNrKCk7Ci0g
ICAgICAgICBleHBlY3QoYmluZGluZygnY291bnQnKSkudG9CZSgnMScpOwotICAgICAgIH0pOwot
ICAgICA8L2RvYzpzY2VuYXJpbz4KLSAgIDwvZG9jOmV4YW1wbGU+Ci0gKi8KLS8qCi0gKiBBIGRp
cmVjdGl2ZSB0aGF0IGFsbG93cyBjcmVhdGlvbiBvZiBjdXN0b20gb25jbGljayBoYW5kbGVycyB0
aGF0IGFyZSBkZWZpbmVkIGFzIGFuZ3VsYXIKLSAqIGV4cHJlc3Npb25zIGFuZCBhcmUgY29tcGls
ZWQgYW5kIGV4ZWN1dGVkIHdpdGhpbiB0aGUgY3VycmVudCBzY29wZS4KLSAqCi0gKiBFdmVudHMg
dGhhdCBhcmUgaGFuZGxlZCB2aWEgdGhlc2UgaGFuZGxlciBhcmUgYWx3YXlzIGNvbmZpZ3VyZWQg
bm90IHRvIHByb3BhZ2F0ZSBmdXJ0aGVyLgotICovCi12YXIgbmdFdmVudERpcmVjdGl2ZXMgPSB7
fTsKLWZvckVhY2goCi0gICdjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW92
ZXIgbW91c2VvdXQgbW91c2Vtb3ZlIG1vdXNlZW50ZXIgbW91c2VsZWF2ZScuc3BsaXQoJyAnKSwK
LSAgZnVuY3Rpb24obmFtZSkgewotICAgIHZhciBkaXJlY3RpdmVOYW1lID0gZGlyZWN0aXZlTm9y
bWFsaXplKCduZy0nICsgbmFtZSk7Ci0gICAgbmdFdmVudERpcmVjdGl2ZXNbZGlyZWN0aXZlTmFt
ZV0gPSBbJyRwYXJzZScsIGZ1bmN0aW9uKCRwYXJzZSkgewotICAgICAgcmV0dXJuIGZ1bmN0aW9u
KHNjb3BlLCBlbGVtZW50LCBhdHRyKSB7Ci0gICAgICAgIHZhciBmbiA9ICRwYXJzZShhdHRyW2Rp
cmVjdGl2ZU5hbWVdKTsKLSAgICAgICAgZWxlbWVudC5iaW5kKGxvd2VyY2FzZShuYW1lKSwgZnVu
Y3Rpb24oZXZlbnQpIHsKLSAgICAgICAgICBzY29wZS4kYXBwbHkoZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICBmbihzY29wZSwgeyRldmVudDpldmVudH0pOwotICAgICAgICAgIH0pOwotICAgICAg
ICB9KTsKLSAgICAgIH07Ci0gICAgfV07Ci0gIH0KLSk7Ci0KLS8qKgotICogQG5nZG9jIGRpcmVj
dGl2ZQotICogQG5hbWUgbmcuZGlyZWN0aXZlOm5nRGJsY2xpY2sKLSAqCi0gKiBAZGVzY3JpcHRp
b24KLSAqIFRoZSBgbmdEYmxjbGlja2AgZGlyZWN0aXZlIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBj
dXN0b20gYmVoYXZpb3Igb24gZGJsY2xpY2sgZXZlbnQuCi0gKgotICogQGVsZW1lbnQgQU5ZCi0g
KiBAcGFyYW0ge2V4cHJlc3Npb259IG5nRGJsY2xpY2sge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24g
RXhwcmVzc2lvbn0gdG8gZXZhbHVhdGUgdXBvbgotICogZGJsY2xpY2suIChFdmVudCBvYmplY3Qg
aXMgYXZhaWxhYmxlIGFzIGAkZXZlbnRgKQotICoKLSAqIEBleGFtcGxlCi0gKiBTZWUge0BsaW5r
IG5nLmRpcmVjdGl2ZTpuZ0NsaWNrIG5nQ2xpY2t9Ci0gKi8KLQotCi0vKioKLSAqIEBuZ2RvYyBk
aXJlY3RpdmUKLSAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpuZ01vdXNlZG93bgotICoKLSAqIEBkZXNj
cmlwdGlvbgotICogVGhlIG5nTW91c2Vkb3duIGRpcmVjdGl2ZSBhbGxvd3MgeW91IHRvIHNwZWNp
ZnkgY3VzdG9tIGJlaGF2aW9yIG9uIG1vdXNlZG93biBldmVudC4KLSAqCi0gKiBAZWxlbWVudCBB
TlkKLSAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdNb3VzZWRvd24ge0BsaW5rIGd1aWRlL2V4cHJl
c3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbHVhdGUgdXBvbgotICogbW91c2Vkb3duLiAoRXZlbnQg
b2JqZWN0IGlzIGF2YWlsYWJsZSBhcyBgJGV2ZW50YCkKLSAqCi0gKiBAZXhhbXBsZQotICogU2Vl
IHtAbGluayBuZy5kaXJlY3RpdmU6bmdDbGljayBuZ0NsaWNrfQotICovCi0KLQotLyoqCi0gKiBA
bmdkb2MgZGlyZWN0aXZlCi0gKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdNb3VzZXVwCi0gKgotICog
QGRlc2NyaXB0aW9uCi0gKiBTcGVjaWZ5IGN1c3RvbSBiZWhhdmlvciBvbiBtb3VzZXVwIGV2ZW50
LgotICoKLSAqIEBlbGVtZW50IEFOWQotICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ01vdXNldXAg
e0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbHVhdGUgdXBvbgotICog
bW91c2V1cC4gKEV2ZW50IG9iamVjdCBpcyBhdmFpbGFibGUgYXMgYCRldmVudGApCi0gKgotICog
QGV4YW1wbGUKLSAqIFNlZSB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nQ2xpY2sgbmdDbGlja30KLSAq
LwotCi0vKioKLSAqIEBuZ2RvYyBkaXJlY3RpdmUKLSAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpuZ01v
dXNlb3ZlcgotICoKLSAqIEBkZXNjcmlwdGlvbgotICogU3BlY2lmeSBjdXN0b20gYmVoYXZpb3Ig
b24gbW91c2VvdmVyIGV2ZW50LgotICoKLSAqIEBlbGVtZW50IEFOWQotICogQHBhcmFtIHtleHBy
ZXNzaW9ufSBuZ01vdXNlb3ZlciB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0
byBldmFsdWF0ZSB1cG9uCi0gKiBtb3VzZW92ZXIuIChFdmVudCBvYmplY3QgaXMgYXZhaWxhYmxl
IGFzIGAkZXZlbnRgKQotICoKLSAqIEBleGFtcGxlCi0gKiBTZWUge0BsaW5rIG5nLmRpcmVjdGl2
ZTpuZ0NsaWNrIG5nQ2xpY2t9Ci0gKi8KLQotCi0vKioKLSAqIEBuZ2RvYyBkaXJlY3RpdmUKLSAq
IEBuYW1lIG5nLmRpcmVjdGl2ZTpuZ01vdXNlZW50ZXIKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAq
IFNwZWNpZnkgY3VzdG9tIGJlaGF2aW9yIG9uIG1vdXNlZW50ZXIgZXZlbnQuCi0gKgotICogQGVs
ZW1lbnQgQU5ZCi0gKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nTW91c2VlbnRlciB7QGxpbmsgZ3Vp
ZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9uCi0gKiBtb3VzZWVudGVy
LiAoRXZlbnQgb2JqZWN0IGlzIGF2YWlsYWJsZSBhcyBgJGV2ZW50YCkKLSAqCi0gKiBAZXhhbXBs
ZQotICogU2VlIHtAbGluayBuZy5kaXJlY3RpdmU6bmdDbGljayBuZ0NsaWNrfQotICovCi0KLQot
LyoqCi0gKiBAbmdkb2MgZGlyZWN0aXZlCi0gKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdNb3VzZWxl
YXZlCi0gKgotICogQGRlc2NyaXB0aW9uCi0gKiBTcGVjaWZ5IGN1c3RvbSBiZWhhdmlvciBvbiBt
b3VzZWxlYXZlIGV2ZW50LgotICoKLSAqIEBlbGVtZW50IEFOWQotICogQHBhcmFtIHtleHByZXNz
aW9ufSBuZ01vdXNlbGVhdmUge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8g
ZXZhbHVhdGUgdXBvbgotICogbW91c2VsZWF2ZS4gKEV2ZW50IG9iamVjdCBpcyBhdmFpbGFibGUg
YXMgYCRldmVudGApCi0gKgotICogQGV4YW1wbGUKLSAqIFNlZSB7QGxpbmsgbmcuZGlyZWN0aXZl
Om5nQ2xpY2sgbmdDbGlja30KLSAqLwotCi0KLS8qKgotICogQG5nZG9jIGRpcmVjdGl2ZQotICog
QG5hbWUgbmcuZGlyZWN0aXZlOm5nTW91c2Vtb3ZlCi0gKgotICogQGRlc2NyaXB0aW9uCi0gKiBT
cGVjaWZ5IGN1c3RvbSBiZWhhdmlvciBvbiBtb3VzZW1vdmUgZXZlbnQuCi0gKgotICogQGVsZW1l
bnQgQU5ZCi0gKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nTW91c2Vtb3ZlIHtAbGluayBndWlkZS9l
eHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWx1YXRlIHVwb24KLSAqIG1vdXNlbW92ZS4gKEV2
ZW50IG9iamVjdCBpcyBhdmFpbGFibGUgYXMgYCRldmVudGApCi0gKgotICogQGV4YW1wbGUKLSAq
IFNlZSB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nQ2xpY2sgbmdDbGlja30KLSAqLwotCi0KLS8qKgot
ICogQG5nZG9jIGRpcmVjdGl2ZQotICogQG5hbWUgbmcuZGlyZWN0aXZlOm5nU3VibWl0Ci0gKgot
ICogQGRlc2NyaXB0aW9uCi0gKiBFbmFibGVzIGJpbmRpbmcgYW5ndWxhciBleHByZXNzaW9ucyB0
byBvbnN1Ym1pdCBldmVudHMuCi0gKgotICogQWRkaXRpb25hbGx5IGl0IHByZXZlbnRzIHRoZSBk
ZWZhdWx0IGFjdGlvbiAod2hpY2ggZm9yIGZvcm0gbWVhbnMgc2VuZGluZyB0aGUgcmVxdWVzdCB0
byB0aGUKLSAqIHNlcnZlciBhbmQgcmVsb2FkaW5nIHRoZSBjdXJyZW50IHBhZ2UpLgotICoKLSAq
IEBlbGVtZW50IGZvcm0KLSAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdTdWJtaXQge0BsaW5rIGd1
aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbC4KLSAqCi0gKiBAZXhhbXBsZQotICAg
PGRvYzpleGFtcGxlPgotICAgICA8ZG9jOnNvdXJjZT4KLSAgICAgIDxzY3JpcHQ+Ci0gICAgICAg
IGZ1bmN0aW9uIEN0cmwoJHNjb3BlKSB7Ci0gICAgICAgICAgJHNjb3BlLmxpc3QgPSBbXTsKLSAg
ICAgICAgICAkc2NvcGUudGV4dCA9ICdoZWxsbyc7Ci0gICAgICAgICAgJHNjb3BlLnN1Ym1pdCA9
IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgaWYgKHRoaXMudGV4dCkgewotICAgICAgICAgICAg
ICB0aGlzLmxpc3QucHVzaCh0aGlzLnRleHQpOwotICAgICAgICAgICAgICB0aGlzLnRleHQgPSAn
JzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9OwotICAgICAgICB9Ci0gICAgICA8L3Njcmlw
dD4KLSAgICAgIDxmb3JtIG5nLXN1Ym1pdD0ic3VibWl0KCkiIG5nLWNvbnRyb2xsZXI9IkN0cmwi
PgotICAgICAgICBFbnRlciB0ZXh0IGFuZCBoaXQgZW50ZXI6Ci0gICAgICAgIDxpbnB1dCB0eXBl
PSJ0ZXh0IiBuZy1tb2RlbD0idGV4dCIgbmFtZT0idGV4dCIgLz4KLSAgICAgICAgPGlucHV0IHR5
cGU9InN1Ym1pdCIgaWQ9InN1Ym1pdCIgdmFsdWU9IlN1Ym1pdCIgLz4KLSAgICAgICAgPHByZT5s
aXN0PXt7bGlzdH19PC9wcmU+Ci0gICAgICA8L2Zvcm0+Ci0gICAgIDwvZG9jOnNvdXJjZT4KLSAg
ICAgPGRvYzpzY2VuYXJpbz4KLSAgICAgICBpdCgnc2hvdWxkIGNoZWNrIG5nLXN1Ym1pdCcsIGZ1
bmN0aW9uKCkgewotICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ2xpc3QnKSkudG9CZSgnW10nKTsK
LSAgICAgICAgIGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlICNzdWJtaXQnKS5jbGljaygpOwot
ICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ2xpc3QnKSkudG9CZSgnWyJoZWxsbyJdJyk7Ci0gICAg
ICAgICBleHBlY3QoaW5wdXQoJ3RleHQnKS52YWwoKSkudG9CZSgnJyk7Ci0gICAgICAgfSk7Ci0g
ICAgICAgaXQoJ3Nob3VsZCBpZ25vcmUgZW1wdHkgc3RyaW5ncycsIGZ1bmN0aW9uKCkgewotICAg
ICAgICAgZXhwZWN0KGJpbmRpbmcoJ2xpc3QnKSkudG9CZSgnW10nKTsKLSAgICAgICAgIGVsZW1l
bnQoJy5kb2MtZXhhbXBsZS1saXZlICNzdWJtaXQnKS5jbGljaygpOwotICAgICAgICAgZWxlbWVu
dCgnLmRvYy1leGFtcGxlLWxpdmUgI3N1Ym1pdCcpLmNsaWNrKCk7Ci0gICAgICAgICBleHBlY3Qo
YmluZGluZygnbGlzdCcpKS50b0JlKCdbImhlbGxvIl0nKTsKLSAgICAgICB9KTsKLSAgICAgPC9k
b2M6c2NlbmFyaW8+Ci0gICA8L2RvYzpleGFtcGxlPgotICovCi12YXIgbmdTdWJtaXREaXJlY3Rp
dmUgPSBuZ0RpcmVjdGl2ZShmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cnMpIHsKLSAgZWxl
bWVudC5iaW5kKCdzdWJtaXQnLCBmdW5jdGlvbigpIHsKLSAgICBzY29wZS4kYXBwbHkoYXR0cnMu
bmdTdWJtaXQpOwotICB9KTsKLX0pOwotCi0vKioKLSAqIEBuZ2RvYyBkaXJlY3RpdmUKLSAqIEBu
YW1lIG5nLmRpcmVjdGl2ZTpuZ0luY2x1ZGUKLSAqIEByZXN0cmljdCBFQ0EKLSAqCi0gKiBAZGVz
Y3JpcHRpb24KLSAqIEZldGNoZXMsIGNvbXBpbGVzIGFuZCBpbmNsdWRlcyBhbiBleHRlcm5hbCBI
VE1MIGZyYWdtZW50LgotICoKLSAqIEtlZXAgaW4gbWluZCB0aGF0IFNhbWUgT3JpZ2luIFBvbGlj
eSBhcHBsaWVzIHRvIGluY2x1ZGVkIHJlc291cmNlcwotICogKGUuZy4gbmdJbmNsdWRlIHdvbid0
IHdvcmsgZm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cyBvbiBhbGwgYnJvd3NlcnMgYW5kIGZvcgot
ICogIGZpbGU6Ly8gYWNjZXNzIG9uIHNvbWUgYnJvd3NlcnMpLgotICoKLSAqIEBzY29wZQotICoK
LSAqIEBwYXJhbSB7c3RyaW5nfSBuZ0luY2x1ZGV8c3JjIGFuZ3VsYXIgZXhwcmVzc2lvbiBldmFs
dWF0aW5nIHRvIFVSTC4gSWYgdGhlIHNvdXJjZSBpcyBhIHN0cmluZyBjb25zdGFudCwKLSAqICAg
ICAgICAgICAgICAgICBtYWtlIHN1cmUgeW91IHdyYXAgaXQgaW4gcXVvdGVzLCBlLmcuIGBzcmM9
IidteVBhcnRpYWxUZW1wbGF0ZS5odG1sJyJgLgotICogQHBhcmFtIHtzdHJpbmc9fSBvbmxvYWQg
RXhwcmVzc2lvbiB0byBldmFsdWF0ZSB3aGVuIGEgbmV3IHBhcnRpYWwgaXMgbG9hZGVkLgotICoK
LSAqIEBwYXJhbSB7c3RyaW5nPX0gYXV0b3Njcm9sbCBXaGV0aGVyIGBuZ0luY2x1ZGVgIHNob3Vs
ZCBjYWxsIHtAbGluayBuZy4kYW5jaG9yU2Nyb2xsCi0gKiAgICAgICAgICAgICAgICAgICRhbmNo
b3JTY3JvbGx9IHRvIHNjcm9sbCB0aGUgdmlld3BvcnQgYWZ0ZXIgdGhlIGNvbnRlbnQgaXMgbG9h
ZGVkLgotICoKLSAqICAgICAgICAgICAgICAgICAgLSBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBz
ZXQsIGRpc2FibGUgc2Nyb2xsaW5nLgotICogICAgICAgICAgICAgICAgICAtIElmIHRoZSBhdHRy
aWJ1dGUgaXMgc2V0IHdpdGhvdXQgdmFsdWUsIGVuYWJsZSBzY3JvbGxpbmcuCi0gKiAgICAgICAg
ICAgICAgICAgIC0gT3RoZXJ3aXNlIGVuYWJsZSBzY3JvbGxpbmcgb25seSBpZiB0aGUgZXhwcmVz
c2lvbiBldmFsdWF0ZXMgdG8gdHJ1dGh5IHZhbHVlLgotICoKLSAqIEBleGFtcGxlCi0gIDxleGFt
cGxlPgotICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgotICAgICA8ZGl2IG5nLWNvbnRyb2xs
ZXI9IkN0cmwiPgotICAgICAgIDxzZWxlY3QgbmctbW9kZWw9InRlbXBsYXRlIiBuZy1vcHRpb25z
PSJ0Lm5hbWUgZm9yIHQgaW4gdGVtcGxhdGVzIj4KLSAgICAgICAgPG9wdGlvbiB2YWx1ZT0iIj4o
YmxhbmspPC9vcHRpb24+Ci0gICAgICAgPC9zZWxlY3Q+Ci0gICAgICAgdXJsIG9mIHRoZSB0ZW1w
bGF0ZTogPHR0Pnt7dGVtcGxhdGUudXJsfX08L3R0PgotICAgICAgIDxoci8+Ci0gICAgICAgPGRp
diBuZy1pbmNsdWRlIHNyYz0idGVtcGxhdGUudXJsIj48L2Rpdj4KLSAgICAgPC9kaXY+Ci0gICAg
PC9maWxlPgotICAgIDxmaWxlIG5hbWU9InNjcmlwdC5qcyI+Ci0gICAgICBmdW5jdGlvbiBDdHJs
KCRzY29wZSkgewotICAgICAgICAkc2NvcGUudGVtcGxhdGVzID0KLSAgICAgICAgICBbIHsgbmFt
ZTogJ3RlbXBsYXRlMS5odG1sJywgdXJsOiAndGVtcGxhdGUxLmh0bWwnfQotICAgICAgICAgICwg
eyBuYW1lOiAndGVtcGxhdGUyLmh0bWwnLCB1cmw6ICd0ZW1wbGF0ZTIuaHRtbCd9IF07Ci0gICAg
ICAgICRzY29wZS50ZW1wbGF0ZSA9ICRzY29wZS50ZW1wbGF0ZXNbMF07Ci0gICAgICB9Ci0gICAg
IDwvZmlsZT4KLSAgICA8ZmlsZSBuYW1lPSJ0ZW1wbGF0ZTEuaHRtbCI+Ci0gICAgICBDb250ZW50
IG9mIHRlbXBsYXRlMS5odG1sCi0gICAgPC9maWxlPgotICAgIDxmaWxlIG5hbWU9InRlbXBsYXRl
Mi5odG1sIj4KLSAgICAgIENvbnRlbnQgb2YgdGVtcGxhdGUyLmh0bWwKLSAgICA8L2ZpbGU+Ci0g
ICAgPGZpbGUgbmFtZT0ic2NlbmFyaW8uanMiPgotICAgICAgaXQoJ3Nob3VsZCBsb2FkIHRlbXBs
YXRlMS5odG1sJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgZXhwZWN0KGVsZW1lbnQoJy5kb2MtZXhh
bXBsZS1saXZlIFtuZy1pbmNsdWRlXScpLnRleHQoKSkuCi0gICAgICAgICB0b01hdGNoKC9Db250
ZW50IG9mIHRlbXBsYXRlMS5odG1sLyk7Ci0gICAgICB9KTsKLSAgICAgIGl0KCdzaG91bGQgbG9h
ZCB0ZW1wbGF0ZTIuaHRtbCcsIGZ1bmN0aW9uKCkgewotICAgICAgIHNlbGVjdCgndGVtcGxhdGUn
KS5vcHRpb24oJzEnKTsKLSAgICAgICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUg
W25nLWluY2x1ZGVdJykudGV4dCgpKS4KLSAgICAgICAgIHRvTWF0Y2goL0NvbnRlbnQgb2YgdGVt
cGxhdGUyLmh0bWwvKTsKLSAgICAgIH0pOwotICAgICAgaXQoJ3Nob3VsZCBjaGFuZ2UgdG8gYmxh
bmsnLCBmdW5jdGlvbigpIHsKLSAgICAgICBzZWxlY3QoJ3RlbXBsYXRlJykub3B0aW9uKCcnKTsK
LSAgICAgICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgW25nLWluY2x1ZGVdJyku
dGV4dCgpKS50b0VxdWFsKCcnKTsKLSAgICAgIH0pOwotICAgIDwvZmlsZT4KLSAgPC9leGFtcGxl
PgotICovCi0KLQotLyoqCi0gKiBAbmdkb2MgZXZlbnQKLSAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpu
Z0luY2x1ZGUjJGluY2x1ZGVDb250ZW50TG9hZGVkCi0gKiBAZXZlbnRPZiBuZy5kaXJlY3RpdmU6
bmdJbmNsdWRlCi0gKiBAZXZlbnRUeXBlIGVtaXQgb24gdGhlIGN1cnJlbnQgbmdJbmNsdWRlIHNj
b3BlCi0gKiBAZGVzY3JpcHRpb24KLSAqIEVtaXR0ZWQgZXZlcnkgdGltZSB0aGUgbmdJbmNsdWRl
IGNvbnRlbnQgaXMgcmVsb2FkZWQuCi0gKi8KLXZhciBuZ0luY2x1ZGVEaXJlY3RpdmUgPSBbJyRo
dHRwJywgJyR0ZW1wbGF0ZUNhY2hlJywgJyRhbmNob3JTY3JvbGwnLCAnJGNvbXBpbGUnLAotICAg
ICAgICAgICAgICAgICAgZnVuY3Rpb24oJGh0dHAsICAgJHRlbXBsYXRlQ2FjaGUsICAgJGFuY2hv
clNjcm9sbCwgICAkY29tcGlsZSkgewotICByZXR1cm4gewotICAgIHJlc3RyaWN0OiAnRUNBJywK
LSAgICB0ZXJtaW5hbDogdHJ1ZSwKLSAgICBjb21waWxlOiBmdW5jdGlvbihlbGVtZW50LCBhdHRy
KSB7Ci0gICAgICB2YXIgc3JjRXhwID0gYXR0ci5uZ0luY2x1ZGUgfHwgYXR0ci5zcmMsCi0gICAg
ICAgICAgb25sb2FkRXhwID0gYXR0ci5vbmxvYWQgfHwgJycsCi0gICAgICAgICAgYXV0b1Njcm9s
bEV4cCA9IGF0dHIuYXV0b3Njcm9sbDsKLQotICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBl
bGVtZW50KSB7Ci0gICAgICAgIHZhciBjaGFuZ2VDb3VudGVyID0gMCwKLSAgICAgICAgICAgIGNo
aWxkU2NvcGU7Ci0KLSAgICAgICAgdmFyIGNsZWFyQ29udGVudCA9IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgIGlmIChjaGlsZFNjb3BlKSB7Ci0gICAgICAgICAgICBjaGlsZFNjb3BlLiRkZXN0cm95
KCk7Ci0gICAgICAgICAgICBjaGlsZFNjb3BlID0gbnVsbDsKLSAgICAgICAgICB9Ci0KLSAgICAg
ICAgICBlbGVtZW50Lmh0bWwoJycpOwotICAgICAgICB9OwotCi0gICAgICAgIHNjb3BlLiR3YXRj
aChzcmNFeHAsIGZ1bmN0aW9uIG5nSW5jbHVkZVdhdGNoQWN0aW9uKHNyYykgewotICAgICAgICAg
IHZhciB0aGlzQ2hhbmdlSWQgPSArK2NoYW5nZUNvdW50ZXI7Ci0KLSAgICAgICAgICBpZiAoc3Jj
KSB7Ci0gICAgICAgICAgICAkaHR0cC5nZXQoc3JjLCB7Y2FjaGU6ICR0ZW1wbGF0ZUNhY2hlfSku
c3VjY2VzcyhmdW5jdGlvbihyZXNwb25zZSkgewotICAgICAgICAgICAgICBpZiAodGhpc0NoYW5n
ZUlkICE9PSBjaGFuZ2VDb3VudGVyKSByZXR1cm47Ci0KLSAgICAgICAgICAgICAgaWYgKGNoaWxk
U2NvcGUpIGNoaWxkU2NvcGUuJGRlc3Ryb3koKTsKLSAgICAgICAgICAgICAgY2hpbGRTY29wZSA9
IHNjb3BlLiRuZXcoKTsKLQotICAgICAgICAgICAgICBlbGVtZW50Lmh0bWwocmVzcG9uc2UpOwot
ICAgICAgICAgICAgICAkY29tcGlsZShlbGVtZW50LmNvbnRlbnRzKCkpKGNoaWxkU2NvcGUpOwot
Ci0gICAgICAgICAgICAgIGlmIChpc0RlZmluZWQoYXV0b1Njcm9sbEV4cCkgJiYgKCFhdXRvU2Ny
b2xsRXhwIHx8IHNjb3BlLiRldmFsKGF1dG9TY3JvbGxFeHApKSkgewotICAgICAgICAgICAgICAg
ICRhbmNob3JTY3JvbGwoKTsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIGNoaWxk
U2NvcGUuJGVtaXQoJyRpbmNsdWRlQ29udGVudExvYWRlZCcpOwotICAgICAgICAgICAgICBzY29w
ZS4kZXZhbChvbmxvYWRFeHApOwotICAgICAgICAgICAgfSkuZXJyb3IoZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICAgIGlmICh0aGlzQ2hhbmdlSWQgPT09IGNoYW5nZUNvdW50ZXIpIGNsZWFyQ29u
dGVudCgpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgfSBlbHNlIGNsZWFyQ29udGVudCgp
OwotICAgICAgICB9KTsKLSAgICAgIH07Ci0gICAgfQotICB9OwotfV07Ci0KLS8qKgotICogQG5n
ZG9jIGRpcmVjdGl2ZQotICogQG5hbWUgbmcuZGlyZWN0aXZlOm5nSW5pdAotICoKLSAqIEBkZXNj
cmlwdGlvbgotICogVGhlIGBuZ0luaXRgIGRpcmVjdGl2ZSBzcGVjaWZpZXMgaW5pdGlhbGl6YXRp
b24gdGFza3MgdG8gYmUgZXhlY3V0ZWQKLSAqICBiZWZvcmUgdGhlIHRlbXBsYXRlIGVudGVycyBl
eGVjdXRpb24gbW9kZSBkdXJpbmcgYm9vdHN0cmFwLgotICoKLSAqIEBlbGVtZW50IEFOWQotICog
QHBhcmFtIHtleHByZXNzaW9ufSBuZ0luaXQge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVz
c2lvbn0gdG8gZXZhbC4KLSAqCi0gKiBAZXhhbXBsZQotICAgPGRvYzpleGFtcGxlPgotICAgICA8
ZG9jOnNvdXJjZT4KLSAgICA8ZGl2IG5nLWluaXQ9ImdyZWV0aW5nPSdIZWxsbyc7IHBlcnNvbj0n
V29ybGQnIj4KLSAgICAgIHt7Z3JlZXRpbmd9fSB7e3BlcnNvbn19IQotICAgIDwvZGl2PgotICAg
ICA8L2RvYzpzb3VyY2U+Ci0gICAgIDxkb2M6c2NlbmFyaW8+Ci0gICAgICAgaXQoJ3Nob3VsZCBj
aGVjayBncmVldGluZycsIGZ1bmN0aW9uKCkgewotICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ2dy
ZWV0aW5nJykpLnRvQmUoJ0hlbGxvJyk7Ci0gICAgICAgICBleHBlY3QoYmluZGluZygncGVyc29u
JykpLnRvQmUoJ1dvcmxkJyk7Ci0gICAgICAgfSk7Ci0gICAgIDwvZG9jOnNjZW5hcmlvPgotICAg
PC9kb2M6ZXhhbXBsZT4KLSAqLwotdmFyIG5nSW5pdERpcmVjdGl2ZSA9IG5nRGlyZWN0aXZlKHsK
LSAgY29tcGlsZTogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHsKLSAgICAgIHByZTogZnVuY3Rp
b24oc2NvcGUsIGVsZW1lbnQsIGF0dHJzKSB7Ci0gICAgICAgIHNjb3BlLiRldmFsKGF0dHJzLm5n
SW5pdCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19KTsKLQotLyoqCi0gKiBAbmdkb2MgZGlyZWN0
aXZlCi0gKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdOb25CaW5kYWJsZQotICogQHByaW9yaXR5IDEw
MDAKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIFNvbWV0aW1lcyBpdCBpcyBuZWNlc3NhcnkgdG8g
d3JpdGUgY29kZSB3aGljaCBsb29rcyBsaWtlIGJpbmRpbmdzIGJ1dCB3aGljaCBzaG91bGQgYmUg
bGVmdCBhbG9uZQotICogYnkgYW5ndWxhci4gVXNlIGBuZ05vbkJpbmRhYmxlYCB0byBtYWtlIGFu
Z3VsYXIgaWdub3JlIGEgY2h1bmsgb2YgSFRNTC4KLSAqCi0gKiBAZWxlbWVudCBBTlkKLSAqCi0g
KiBAZXhhbXBsZQotICogSW4gdGhpcyBleGFtcGxlIHRoZXJlIGFyZSB0d28gbG9jYXRpb24gd2hl
cmUgYSBzaW1wbGUgYmluZGluZyAoYHt7fX1gKSBpcyBwcmVzZW50LCBidXQgdGhlIG9uZQotICog
d3JhcHBlZCBpbiBgbmdOb25CaW5kYWJsZWAgaXMgbGVmdCBhbG9uZS4KLSAqCi0gKiBAZXhhbXBs
ZQotICAgIDxkb2M6ZXhhbXBsZT4KLSAgICAgIDxkb2M6c291cmNlPgotICAgICAgICA8ZGl2Pk5v
cm1hbDoge3sxICsgMn19PC9kaXY+Ci0gICAgICAgIDxkaXYgbmctbm9uLWJpbmRhYmxlPklnbm9y
ZWQ6IHt7MSArIDJ9fTwvZGl2PgotICAgICAgPC9kb2M6c291cmNlPgotICAgICAgPGRvYzpzY2Vu
YXJpbz4KLSAgICAgICBpdCgnc2hvdWxkIGNoZWNrIG5nLW5vbi1iaW5kYWJsZScsIGZ1bmN0aW9u
KCkgewotICAgICAgICAgZXhwZWN0KHVzaW5nKCcuZG9jLWV4YW1wbGUtbGl2ZScpLmJpbmRpbmco
JzEgKyAyJykpLnRvQmUoJzMnKTsKLSAgICAgICAgIGV4cGVjdCh1c2luZygnLmRvYy1leGFtcGxl
LWxpdmUnKS5lbGVtZW50KCdkaXY6bGFzdCcpLnRleHQoKSkuCi0gICAgICAgICAgIHRvTWF0Y2go
LzEgXCsgMi8pOwotICAgICAgIH0pOwotICAgICAgPC9kb2M6c2NlbmFyaW8+Ci0gICAgPC9kb2M6
ZXhhbXBsZT4KLSAqLwotdmFyIG5nTm9uQmluZGFibGVEaXJlY3RpdmUgPSBuZ0RpcmVjdGl2ZSh7
IHRlcm1pbmFsOiB0cnVlLCBwcmlvcml0eTogMTAwMCB9KTsKLQotLyoqCi0gKiBAbmdkb2MgZGly
ZWN0aXZlCi0gKiBAbmFtZSBuZy5kaXJlY3RpdmU6bmdQbHVyYWxpemUKLSAqIEByZXN0cmljdCBF
QQotICoKLSAqIEBkZXNjcmlwdGlvbgotICogIyBPdmVydmlldwotICogYG5nUGx1cmFsaXplYCBp
cyBhIGRpcmVjdGl2ZSB0aGF0IGRpc3BsYXlzIG1lc3NhZ2VzIGFjY29yZGluZyB0byBlbi1VUyBs
b2NhbGl6YXRpb24gcnVsZXMuCi0gKiBUaGVzZSBydWxlcyBhcmUgYnVuZGxlZCB3aXRoIGFuZ3Vs
YXIuanMgYW5kIHRoZSBydWxlcyBjYW4gYmUgb3ZlcnJpZGRlbgotICogKHNlZSB7QGxpbmsgZ3Vp
ZGUvaTE4biBBbmd1bGFyIGkxOG59IGRldiBndWlkZSkuIFlvdSBjb25maWd1cmUgbmdQbHVyYWxp
emUgZGlyZWN0aXZlCi0gKiBieSBzcGVjaWZ5aW5nIHRoZSBtYXBwaW5ncyBiZXR3ZWVuCi0gKiB7
QGxpbmsgaHR0cDovL3VuaWNvZGUub3JnL3JlcG9zL2NsZHItdG1wL3RydW5rL2RpZmYvc3VwcGxl
bWVudGFsL2xhbmd1YWdlX3BsdXJhbF9ydWxlcy5odG1sCi0gKiBwbHVyYWwgY2F0ZWdvcmllc30g
YW5kIHRoZSBzdHJpbmdzIHRvIGJlIGRpc3BsYXllZC4KLSAqCi0gKiAjIFBsdXJhbCBjYXRlZ29y
aWVzIGFuZCBleHBsaWNpdCBudW1iZXIgcnVsZXMKLSAqIFRoZXJlIGFyZSB0d28KLSAqIHtAbGlu
ayBodHRwOi8vdW5pY29kZS5vcmcvcmVwb3MvY2xkci10bXAvdHJ1bmsvZGlmZi9zdXBwbGVtZW50
YWwvbGFuZ3VhZ2VfcGx1cmFsX3J1bGVzLmh0bWwKLSAqIHBsdXJhbCBjYXRlZ29yaWVzfSBpbiBB
bmd1bGFyJ3MgZGVmYXVsdCBlbi1VUyBsb2NhbGU6ICJvbmUiIGFuZCAib3RoZXIiLgotICoKLSAq
IFdoaWxlIGEgcHVyYWwgY2F0ZWdvcnkgbWF5IG1hdGNoIG1hbnkgbnVtYmVycyAoZm9yIGV4YW1w
bGUsIGluIGVuLVVTIGxvY2FsZSwgIm90aGVyIiBjYW4gbWF0Y2gKLSAqIGFueSBudW1iZXIgdGhh
dCBpcyBub3QgMSksIGFuIGV4cGxpY2l0IG51bWJlciBydWxlIGNhbiBvbmx5IG1hdGNoIG9uZSBu
dW1iZXIuIEZvciBleGFtcGxlLCB0aGUKLSAqIGV4cGxpY2l0IG51bWJlciBydWxlIGZvciAiMyIg
bWF0Y2hlcyB0aGUgbnVtYmVyIDMuIFlvdSB3aWxsIHNlZSB0aGUgdXNlIG9mIHBsdXJhbCBjYXRl
Z29yaWVzCi0gKiBhbmQgZXhwbGljaXQgbnVtYmVyIHJ1bGVzIHRocm91Z2hvdXQgbGF0ZXIgcGFy
dHMgb2YgdGhpcyBkb2N1bWVudGF0aW9uLgotICoKLSAqICMgQ29uZmlndXJpbmcgbmdQbHVyYWxp
emUKLSAqIFlvdSBjb25maWd1cmUgbmdQbHVyYWxpemUgYnkgcHJvdmlkaW5nIDIgYXR0cmlidXRl
czogYGNvdW50YCBhbmQgYHdoZW5gLgotICogWW91IGNhbiBhbHNvIHByb3ZpZGUgYW4gb3B0aW9u
YWwgYXR0cmlidXRlLCBgb2Zmc2V0YC4KLSAqCi0gKiBUaGUgdmFsdWUgb2YgdGhlIGBjb3VudGAg
YXR0cmlidXRlIGNhbiBiZSBlaXRoZXIgYSBzdHJpbmcgb3IgYW4ge0BsaW5rIGd1aWRlL2V4cHJl
c3Npb24KLSAqIEFuZ3VsYXIgZXhwcmVzc2lvbn07IHRoZXNlIGFyZSBldmFsdWF0ZWQgb24gdGhl
IGN1cnJlbnQgc2NvcGUgZm9yIGl0cyBib3VuZCB2YWx1ZS4KLSAqCi0gKiBUaGUgYHdoZW5gIGF0
dHJpYnV0ZSBzcGVjaWZpZXMgdGhlIG1hcHBpbmdzIGJldHdlZW4gcGx1cmFsIGNhdGVnb3JpZXMg
YW5kIHRoZSBhY3R1YWwKLSAqIHN0cmluZyB0byBiZSBkaXNwbGF5ZWQuIFRoZSB2YWx1ZSBvZiB0
aGUgYXR0cmlidXRlIHNob3VsZCBiZSBhIEpTT04gb2JqZWN0IHNvIHRoYXQgQW5ndWxhcgotICog
Y2FuIGludGVycHJldCBpdCBjb3JyZWN0bHkuCi0gKgotICogVGhlIGZvbGxvd2luZyBleGFtcGxl
IHNob3dzIGhvdyB0byBjb25maWd1cmUgbmdQbHVyYWxpemU6Ci0gKgotICogPHByZT4KLSAqIDxu
Zy1wbHVyYWxpemUgY291bnQ9InBlcnNvbkNvdW50IgotICAgICAgICAgICAgICAgICB3aGVuPSJ7
JzAnOiAnTm9ib2R5IGlzIHZpZXdpbmcuJywKLSAqICAgICAgICAgICAgICAgICAgICAgICdvbmUn
OiAnMSBwZXJzb24gaXMgdmlld2luZy4nLAotICogICAgICAgICAgICAgICAgICAgICAgJ290aGVy
JzogJ3t9IHBlb3BsZSBhcmUgdmlld2luZy4nfSI+Ci0gKiA8L25nLXBsdXJhbGl6ZT4KLSAqPC9w
cmU+Ci0gKgotICogSW4gdGhlIGV4YW1wbGUsIGAiMDogTm9ib2R5IGlzIHZpZXdpbmcuImAgaXMg
YW4gZXhwbGljaXQgbnVtYmVyIHJ1bGUuIElmIHlvdSBkaWQgbm90Ci0gKiBzcGVjaWZ5IHRoaXMg
cnVsZSwgMCB3b3VsZCBiZSBtYXRjaGVkIHRvIHRoZSAib3RoZXIiIGNhdGVnb3J5IGFuZCAiMCBw
ZW9wbGUgYXJlIHZpZXdpbmciCi0gKiB3b3VsZCBiZSBzaG93biBpbnN0ZWFkIG9mICJOb2JvZHkg
aXMgdmlld2luZyIuIFlvdSBjYW4gc3BlY2lmeSBhbiBleHBsaWNpdCBudW1iZXIgcnVsZSBmb3IK
LSAqIG90aGVyIG51bWJlcnMsIGZvciBleGFtcGxlIDEyLCBzbyB0aGF0IGluc3RlYWQgb2Ygc2hv
d2luZyAiMTIgcGVvcGxlIGFyZSB2aWV3aW5nIiwgeW91IGNhbgotICogc2hvdyAiYSBkb3plbiBw
ZW9wbGUgYXJlIHZpZXdpbmciLgotICoKLSAqIFlvdSBjYW4gdXNlIGEgc2V0IG9mIGNsb3NlZCBi
cmFjZXMoYHt9YCkgYXMgYSBwbGFjZWhvbGRlciBmb3IgdGhlIG51bWJlciB0aGF0IHlvdSB3YW50
IHN1YnN0aXR1dGVkCi0gKiBpbnRvIHBsdXJhbGl6ZWQgc3RyaW5ncy4gSW4gdGhlIHByZXZpb3Vz
IGV4YW1wbGUsIEFuZ3VsYXIgd2lsbCByZXBsYWNlIGB7fWAgd2l0aAotICogPHNwYW4gbmctbm9u
LWJpbmRhYmxlPmB7e3BlcnNvbkNvdW50fX1gPC9zcGFuPi4gVGhlIGNsb3NlZCBicmFjZXMgYHt9
YCBpcyBhIHBsYWNlaG9sZGVyCi0gKiBmb3IgPHNwYW4gbmctbm9uLWJpbmRhYmxlPnt7bnVtYmVy
RXhwcmVzc2lvbn19PC9zcGFuPi4KLSAqCi0gKiAjIENvbmZpZ3VyaW5nIG5nUGx1cmFsaXplIHdp
dGggb2Zmc2V0Ci0gKiBUaGUgYG9mZnNldGAgYXR0cmlidXRlIGFsbG93cyBmdXJ0aGVyIGN1c3Rv
bWl6YXRpb24gb2YgcGx1cmFsaXplZCB0ZXh0LCB3aGljaCBjYW4gcmVzdWx0IGluCi0gKiBhIGJl
dHRlciB1c2VyIGV4cGVyaWVuY2UuIEZvciBleGFtcGxlLCBpbnN0ZWFkIG9mIHRoZSBtZXNzYWdl
ICI0IHBlb3BsZSBhcmUgdmlld2luZyB0aGlzIGRvY3VtZW50IiwKLSAqIHlvdSBtaWdodCBkaXNw
bGF5ICJKb2huLCBLYXRlIGFuZCAyIG90aGVycyBhcmUgdmlld2luZyB0aGlzIGRvY3VtZW50Ii4K
LSAqIFRoZSBvZmZzZXQgYXR0cmlidXRlIGFsbG93cyB5b3UgdG8gb2Zmc2V0IGEgbnVtYmVyIGJ5
IGFueSBkZXNpcmVkIHZhbHVlLgotICogTGV0J3MgdGFrZSBhIGxvb2sgYXQgYW4gZXhhbXBsZToK
LSAqCi0gKiA8cHJlPgotICogPG5nLXBsdXJhbGl6ZSBjb3VudD0icGVyc29uQ291bnQiIG9mZnNl
dD0yCi0gKiAgICAgICAgICAgICAgIHdoZW49InsnMCc6ICdOb2JvZHkgaXMgdmlld2luZy4nLAot
ICogICAgICAgICAgICAgICAgICAgICAgJzEnOiAne3twZXJzb24xfX0gaXMgdmlld2luZy4nLAot
ICogICAgICAgICAgICAgICAgICAgICAgJzInOiAne3twZXJzb24xfX0gYW5kIHt7cGVyc29uMn19
IGFyZSB2aWV3aW5nLicsCi0gKiAgICAgICAgICAgICAgICAgICAgICAnb25lJzogJ3t7cGVyc29u
MX19LCB7e3BlcnNvbjJ9fSBhbmQgb25lIG90aGVyIHBlcnNvbiBhcmUgdmlld2luZy4nLAotICog
ICAgICAgICAgICAgICAgICAgICAgJ290aGVyJzogJ3t7cGVyc29uMX19LCB7e3BlcnNvbjJ9fSBh
bmQge30gb3RoZXIgcGVvcGxlIGFyZSB2aWV3aW5nLid9Ij4KLSAqIDwvbmctcGx1cmFsaXplPgot
ICogPC9wcmU+Ci0gKgotICogTm90aWNlIHRoYXQgd2UgYXJlIHN0aWxsIHVzaW5nIHR3byBwbHVy
YWwgY2F0ZWdvcmllcyhvbmUsIG90aGVyKSwgYnV0IHdlIGFkZGVkCi0gKiB0aHJlZSBleHBsaWNp
dCBudW1iZXIgcnVsZXMgMCwgMSBhbmQgMi4KLSAqIFdoZW4gb25lIHBlcnNvbiwgcGVyaGFwcyBK
b2huLCB2aWV3cyB0aGUgZG9jdW1lbnQsICJKb2huIGlzIHZpZXdpbmciIHdpbGwgYmUgc2hvd24u
Ci0gKiBXaGVuIHRocmVlIHBlb3BsZSB2aWV3IHRoZSBkb2N1bWVudCwgbm8gZXhwbGljaXQgbnVt
YmVyIHJ1bGUgaXMgZm91bmQsIHNvCi0gKiBhbiBvZmZzZXQgb2YgMiBpcyB0YWtlbiBvZmYgMywg
YW5kIEFuZ3VsYXIgdXNlcyAxIHRvIGRlY2lkZSB0aGUgcGx1cmFsIGNhdGVnb3J5LgotICogSW4g
dGhpcyBjYXNlLCBwbHVyYWwgY2F0ZWdvcnkgJ29uZScgaXMgbWF0Y2hlZCBhbmQgIkpvaG4sIE1h
cnJ5IGFuZCBvbmUgb3RoZXIgcGVyc29uIGFyZSB2aWV3aW5nIgotICogaXMgc2hvd24uCi0gKgot
ICogTm90ZSB0aGF0IHdoZW4geW91IHNwZWNpZnkgb2Zmc2V0cywgeW91IG11c3QgcHJvdmlkZSBl
eHBsaWNpdCBudW1iZXIgcnVsZXMgZm9yCi0gKiBudW1iZXJzIGZyb20gMCB1cCB0byBhbmQgaW5j
bHVkaW5nIHRoZSBvZmZzZXQuIElmIHlvdSB1c2UgYW4gb2Zmc2V0IG9mIDMsIGZvciBleGFtcGxl
LAotICogeW91IG11c3QgcHJvdmlkZSBleHBsaWNpdCBudW1iZXIgcnVsZXMgZm9yIDAsIDEsIDIg
YW5kIDMuIFlvdSBtdXN0IGFsc28gcHJvdmlkZSBwbHVyYWwgc3RyaW5ncyBmb3IKLSAqIHBsdXJh
bCBjYXRlZ29yaWVzICJvbmUiIGFuZCAib3RoZXIiLgotICoKLSAqIEBwYXJhbSB7c3RyaW5nfGV4
cHJlc3Npb259IGNvdW50IFRoZSB2YXJpYWJsZSB0byBiZSBib3VuZGVkIHRvLgotICogQHBhcmFt
IHtzdHJpbmd9IHdoZW4gVGhlIG1hcHBpbmcgYmV0d2VlbiBwbHVyYWwgY2F0ZWdvcnkgdG8gaXRz
IGNvcnJlc3BvZGluZyBzdHJpbmdzLgotICogQHBhcmFtIHtudW1iZXI9fSBvZmZzZXQgT2Zmc2V0
IHRvIGRlZHVjdCBmcm9tIHRoZSB0b3RhbCBudW1iZXIuCi0gKgotICogQGV4YW1wbGUKLSAgICA8
ZG9jOmV4YW1wbGU+Ci0gICAgICA8ZG9jOnNvdXJjZT4KLSAgICAgICAgPHNjcmlwdD4KLSAgICAg
ICAgICBmdW5jdGlvbiBDdHJsKCRzY29wZSkgewotICAgICAgICAgICAgJHNjb3BlLnBlcnNvbjEg
PSAnSWdvcic7Ci0gICAgICAgICAgICAkc2NvcGUucGVyc29uMiA9ICdNaXNrbyc7Ci0gICAgICAg
ICAgICAkc2NvcGUucGVyc29uQ291bnQgPSAxOwotICAgICAgICAgIH0KLSAgICAgICAgPC9zY3Jp
cHQ+Ci0gICAgICAgIDxkaXYgbmctY29udHJvbGxlcj0iQ3RybCI+Ci0gICAgICAgICAgUGVyc29u
IDE6PGlucHV0IHR5cGU9InRleHQiIG5nLW1vZGVsPSJwZXJzb24xIiB2YWx1ZT0iSWdvciIgLz48
YnIvPgotICAgICAgICAgIFBlcnNvbiAyOjxpbnB1dCB0eXBlPSJ0ZXh0IiBuZy1tb2RlbD0icGVy
c29uMiIgdmFsdWU9Ik1pc2tvIiAvPjxici8+Ci0gICAgICAgICAgTnVtYmVyIG9mIFBlb3BsZTo8
aW5wdXQgdHlwZT0idGV4dCIgbmctbW9kZWw9InBlcnNvbkNvdW50IiB2YWx1ZT0iMSIgLz48YnIv
PgotCi0gICAgICAgICAgPCEtLS0gRXhhbXBsZSB3aXRoIHNpbXBsZSBwbHVyYWxpemF0aW9uIHJ1
bGVzIGZvciBlbiBsb2NhbGUgLS0tPgotICAgICAgICAgIFdpdGhvdXQgT2Zmc2V0OgotICAgICAg
ICAgIDxuZy1wbHVyYWxpemUgY291bnQ9InBlcnNvbkNvdW50IgotICAgICAgICAgICAgICAgICAg
ICAgICAgd2hlbj0ieycwJzogJ05vYm9keSBpcyB2aWV3aW5nLicsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ29uZSc6ICcxIHBlcnNvbiBpcyB2aWV3aW5nLicsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ290aGVyJzogJ3t9IHBlb3BsZSBhcmUgdmlld2luZy4nfSI+
Ci0gICAgICAgICAgPC9uZy1wbHVyYWxpemU+PGJyPgotCi0gICAgICAgICAgPCEtLS0gRXhhbXBs
ZSB3aXRoIG9mZnNldCAtLS0+Ci0gICAgICAgICAgV2l0aCBPZmZzZXQoMik6Ci0gICAgICAgICAg
PG5nLXBsdXJhbGl6ZSBjb3VudD0icGVyc29uQ291bnQiIG9mZnNldD0yCi0gICAgICAgICAgICAg
ICAgICAgICAgICB3aGVuPSJ7JzAnOiAnTm9ib2R5IGlzIHZpZXdpbmcuJywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnMSc6ICd7e3BlcnNvbjF9fSBpcyB2aWV3aW5nLicsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJzInOiAne3twZXJzb24xfX0gYW5kIHt7cGVyc29u
Mn19IGFyZSB2aWV3aW5nLicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29uZSc6
ICd7e3BlcnNvbjF9fSwge3twZXJzb24yfX0gYW5kIG9uZSBvdGhlciBwZXJzb24gYXJlIHZpZXdp
bmcuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3RoZXInOiAne3twZXJzb24x
fX0sIHt7cGVyc29uMn19IGFuZCB7fSBvdGhlciBwZW9wbGUgYXJlIHZpZXdpbmcuJ30iPgotICAg
ICAgICAgIDwvbmctcGx1cmFsaXplPgotICAgICAgICA8L2Rpdj4KLSAgICAgIDwvZG9jOnNvdXJj
ZT4KLSAgICAgIDxkb2M6c2NlbmFyaW8+Ci0gICAgICAgIGl0KCdzaG91bGQgc2hvdyBjb3JyZWN0
IHBsdXJhbGl6ZWQgc3RyaW5nJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgZXhwZWN0KGVsZW1l
bnQoJy5kb2MtZXhhbXBsZS1saXZlIG5nLXBsdXJhbGl6ZTpmaXJzdCcpLnRleHQoKSkuCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b0JlKCcxIHBlcnNvbiBp
cyB2aWV3aW5nLicpOwotICAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2
ZSBuZy1wbHVyYWxpemU6bGFzdCcpLnRleHQoKSkuCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0b0JlKCdJZ29yIGlzIHZpZXdpbmcuJyk7Ci0KLSAgICAg
ICAgICB1c2luZygnLmRvYy1leGFtcGxlLWxpdmUnKS5pbnB1dCgncGVyc29uQ291bnQnKS5lbnRl
cignMCcpOwotICAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBuZy1w
bHVyYWxpemU6Zmlyc3QnKS50ZXh0KCkpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b0JlKCdOb2JvZHkgaXMgdmlld2luZy4nKTsKLSAgICAgICAgICBl
eHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgbmctcGx1cmFsaXplOmxhc3QnKS50ZXh0
KCkpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvQmUo
J05vYm9keSBpcyB2aWV3aW5nLicpOwotCi0gICAgICAgICAgdXNpbmcoJy5kb2MtZXhhbXBsZS1s
aXZlJykuaW5wdXQoJ3BlcnNvbkNvdW50JykuZW50ZXIoJzInKTsKLSAgICAgICAgICBleHBlY3Qo
ZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgbmctcGx1cmFsaXplOmZpcnN0JykudGV4dCgpKS4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9CZSgnMiBwZW9w
bGUgYXJlIHZpZXdpbmcuJyk7Ci0gICAgICAgICAgZXhwZWN0KGVsZW1lbnQoJy5kb2MtZXhhbXBs
ZS1saXZlIG5nLXBsdXJhbGl6ZTpsYXN0JykudGV4dCgpKS4KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRvQmUoJ0lnb3IgYW5kIE1pc2tvIGFyZSB2aWV3aW5nLicpOwotCi0gICAgICAg
ICAgdXNpbmcoJy5kb2MtZXhhbXBsZS1saXZlJykuaW5wdXQoJ3BlcnNvbkNvdW50JykuZW50ZXIo
JzMnKTsKLSAgICAgICAgICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgbmctcGx1
cmFsaXplOmZpcnN0JykudGV4dCgpKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG9CZSgnMyBwZW9wbGUgYXJlIHZpZXdpbmcuJyk7Ci0gICAgICAgICAgZXhw
ZWN0KGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlIG5nLXBsdXJhbGl6ZTpsYXN0JykudGV4dCgp
KS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvQmUoJ0lnb3IsIE1pc2tvIGFuZCBv
bmUgb3RoZXIgcGVyc29uIGFyZSB2aWV3aW5nLicpOwotCi0gICAgICAgICAgdXNpbmcoJy5kb2Mt
ZXhhbXBsZS1saXZlJykuaW5wdXQoJ3BlcnNvbkNvdW50JykuZW50ZXIoJzQnKTsKLSAgICAgICAg
ICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgbmctcGx1cmFsaXplOmZpcnN0Jyku
dGV4dCgpKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9C
ZSgnNCBwZW9wbGUgYXJlIHZpZXdpbmcuJyk7Ci0gICAgICAgICAgZXhwZWN0KGVsZW1lbnQoJy5k
b2MtZXhhbXBsZS1saXZlIG5nLXBsdXJhbGl6ZTpsYXN0JykudGV4dCgpKS4KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRvQmUoJ0lnb3IsIE1pc2tvIGFuZCAyIG90aGVyIHBlb3BsZSBh
cmUgdmlld2luZy4nKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgaXQoJ3Nob3VsZCBzaG93IGRh
dGEtYmluZGVkIG5hbWVzJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgdXNpbmcoJy5kb2MtZXhh
bXBsZS1saXZlJykuaW5wdXQoJ3BlcnNvbkNvdW50JykuZW50ZXIoJzQnKTsKLSAgICAgICAgICBl
eHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgbmctcGx1cmFsaXplOmxhc3QnKS50ZXh0
KCkpLgotICAgICAgICAgICAgICB0b0JlKCdJZ29yLCBNaXNrbyBhbmQgMiBvdGhlciBwZW9wbGUg
YXJlIHZpZXdpbmcuJyk7Ci0KLSAgICAgICAgICB1c2luZygnLmRvYy1leGFtcGxlLWxpdmUnKS5p
bnB1dCgncGVyc29uMScpLmVudGVyKCdEaScpOwotICAgICAgICAgIHVzaW5nKCcuZG9jLWV4YW1w
bGUtbGl2ZScpLmlucHV0KCdwZXJzb24yJykuZW50ZXIoJ1ZvanRhJyk7Ci0gICAgICAgICAgZXhw
ZWN0KGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlIG5nLXBsdXJhbGl6ZTpsYXN0JykudGV4dCgp
KS4KLSAgICAgICAgICAgICAgdG9CZSgnRGksIFZvanRhIGFuZCAyIG90aGVyIHBlb3BsZSBhcmUg
dmlld2luZy4nKTsKLSAgICAgICAgfSk7Ci0gICAgICA8L2RvYzpzY2VuYXJpbz4KLSAgICA8L2Rv
YzpleGFtcGxlPgotICovCi12YXIgbmdQbHVyYWxpemVEaXJlY3RpdmUgPSBbJyRsb2NhbGUnLCAn
JGludGVycG9sYXRlJywgZnVuY3Rpb24oJGxvY2FsZSwgJGludGVycG9sYXRlKSB7Ci0gIHZhciBC
UkFDRSA9IC97fS9nOwotICByZXR1cm4gewotICAgIHJlc3RyaWN0OiAnRUEnLAotICAgIGxpbms6
IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyKSB7Ci0gICAgICB2YXIgbnVtYmVyRXhwID0g
YXR0ci5jb3VudCwKLSAgICAgICAgICB3aGVuRXhwID0gZWxlbWVudC5hdHRyKGF0dHIuJGF0dHIu
d2hlbiksIC8vIHRoaXMgaXMgYmVjYXVzZSB3ZSBoYXZlIHt7fX0gaW4gYXR0cnMKLSAgICAgICAg
ICBvZmZzZXQgPSBhdHRyLm9mZnNldCB8fCAwLAotICAgICAgICAgIHdoZW5zID0gc2NvcGUuJGV2
YWwod2hlbkV4cCksCi0gICAgICAgICAgd2hlbnNFeHBGbnMgPSB7fSwKLSAgICAgICAgICBzdGFy
dFN5bWJvbCA9ICRpbnRlcnBvbGF0ZS5zdGFydFN5bWJvbCgpLAotICAgICAgICAgIGVuZFN5bWJv
bCA9ICRpbnRlcnBvbGF0ZS5lbmRTeW1ib2woKTsKLQotICAgICAgZm9yRWFjaCh3aGVucywgZnVu
Y3Rpb24oZXhwcmVzc2lvbiwga2V5KSB7Ci0gICAgICAgIHdoZW5zRXhwRm5zW2tleV0gPQotICAg
ICAgICAgICRpbnRlcnBvbGF0ZShleHByZXNzaW9uLnJlcGxhY2UoQlJBQ0UsIHN0YXJ0U3ltYm9s
ICsgbnVtYmVyRXhwICsgJy0nICsKLSAgICAgICAgICAgIG9mZnNldCArIGVuZFN5bWJvbCkpOwot
ICAgICAgfSk7Ci0KLSAgICAgIHNjb3BlLiR3YXRjaChmdW5jdGlvbiBuZ1BsdXJhbGl6ZVdhdGNo
KCkgewotICAgICAgICB2YXIgdmFsdWUgPSBwYXJzZUZsb2F0KHNjb3BlLiRldmFsKG51bWJlckV4
cCkpOwotCi0gICAgICAgIGlmICghaXNOYU4odmFsdWUpKSB7Ci0gICAgICAgICAgLy9pZiBleHBs
aWNpdCBudW1iZXIgcnVsZSBzdWNoIGFzIDEsIDIsIDMuLi4gaXMgZGVmaW5lZCwganVzdCB1c2Ug
aXQuIE90aGVyd2lzZSwKLSAgICAgICAgICAvL2NoZWNrIGl0IGFnYWluc3QgcGx1cmFsaXphdGlv
biBydWxlcyBpbiAkbG9jYWxlIHNlcnZpY2UKLSAgICAgICAgICBpZiAoISh2YWx1ZSBpbiB3aGVu
cykpIHZhbHVlID0gJGxvY2FsZS5wbHVyYWxDYXQodmFsdWUgLSBvZmZzZXQpOwotICAgICAgICAg
ICByZXR1cm4gd2hlbnNFeHBGbnNbdmFsdWVdKHNjb3BlLCBlbGVtZW50LCB0cnVlKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICByZXR1cm4gJyc7Ci0gICAgICAgIH0KLSAgICAgIH0sIGZ1
bmN0aW9uIG5nUGx1cmFsaXplV2F0Y2hBY3Rpb24obmV3VmFsKSB7Ci0gICAgICAgIGVsZW1lbnQu
dGV4dChuZXdWYWwpOwotICAgICAgfSk7Ci0gICAgfQotICB9OwotfV07Ci0KLS8qKgotICogQG5n
ZG9jIGRpcmVjdGl2ZQotICogQG5hbWUgbmcuZGlyZWN0aXZlOm5nUmVwZWF0Ci0gKgotICogQGRl
c2NyaXB0aW9uCi0gKiBUaGUgYG5nUmVwZWF0YCBkaXJlY3RpdmUgaW5zdGFudGlhdGVzIGEgdGVt
cGxhdGUgb25jZSBwZXIgaXRlbSBmcm9tIGEgY29sbGVjdGlvbi4gRWFjaCB0ZW1wbGF0ZQotICog
aW5zdGFuY2UgZ2V0cyBpdHMgb3duIHNjb3BlLCB3aGVyZSB0aGUgZ2l2ZW4gbG9vcCB2YXJpYWJs
ZSBpcyBzZXQgdG8gdGhlIGN1cnJlbnQgY29sbGVjdGlvbiBpdGVtLAotICogYW5kIGAkaW5kZXhg
IGlzIHNldCB0byB0aGUgaXRlbSBpbmRleCBvciBrZXkuCi0gKgotICogU3BlY2lhbCBwcm9wZXJ0
aWVzIGFyZSBleHBvc2VkIG9uIHRoZSBsb2NhbCBzY29wZSBvZiBlYWNoIHRlbXBsYXRlIGluc3Rh
bmNlLCBpbmNsdWRpbmc6Ci0gKgotICogICAqIGAkaW5kZXhgIOKAkyBge251bWJlcn1gIOKAkyBp
dGVyYXRvciBvZmZzZXQgb2YgdGhlIHJlcGVhdGVkIGVsZW1lbnQgKDAuLmxlbmd0aC0xKQotICog
ICAqIGAkZmlyc3RgIOKAkyBge2Jvb2xlYW59YCDigJMgdHJ1ZSBpZiB0aGUgcmVwZWF0ZWQgZWxl
bWVudCBpcyBmaXJzdCBpbiB0aGUgaXRlcmF0b3IuCi0gKiAgICogYCRtaWRkbGVgIOKAkyBge2Jv
b2xlYW59YCDigJMgdHJ1ZSBpZiB0aGUgcmVwZWF0ZWQgZWxlbWVudCBpcyBiZXR3ZWVuIHRoZSBm
aXJzdCBhbmQgbGFzdCBpbiB0aGUgaXRlcmF0b3IuCi0gKiAgICogYCRsYXN0YCDigJMgYHtib29s
ZWFufWAg4oCTIHRydWUgaWYgdGhlIHJlcGVhdGVkIGVsZW1lbnQgaXMgbGFzdCBpbiB0aGUgaXRl
cmF0b3IuCi0gKgotICoKLSAqIEBlbGVtZW50IEFOWQotICogQHNjb3BlCi0gKiBAcHJpb3JpdHkg
MTAwMAotICogQHBhcmFtIHtyZXBlYXRfZXhwcmVzc2lvbn0gbmdSZXBlYXQgVGhlIGV4cHJlc3Np
b24gaW5kaWNhdGluZyBob3cgdG8gZW51bWVyYXRlIGEgY29sbGVjdGlvbi4gVHdvCi0gKiAgIGZv
cm1hdHMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQ6Ci0gKgotICogICAqIGB2YXJpYWJsZSBpbiBl
eHByZXNzaW9uYCDigJMgd2hlcmUgdmFyaWFibGUgaXMgdGhlIHVzZXIgZGVmaW5lZCBsb29wIHZh
cmlhYmxlIGFuZCBgZXhwcmVzc2lvbmAKLSAqICAgICBpcyBhIHNjb3BlIGV4cHJlc3Npb24gZ2l2
aW5nIHRoZSBjb2xsZWN0aW9uIHRvIGVudW1lcmF0ZS4KLSAqCi0gKiAgICAgRm9yIGV4YW1wbGU6
IGB0cmFjayBpbiBjZC50cmFja3NgLgotICoKLSAqICAgKiBgKGtleSwgdmFsdWUpIGluIGV4cHJl
c3Npb25gIOKAkyB3aGVyZSBga2V5YCBhbmQgYHZhbHVlYCBjYW4gYmUgYW55IHVzZXIgZGVmaW5l
ZCBpZGVudGlmaWVycywKLSAqICAgICBhbmQgYGV4cHJlc3Npb25gIGlzIHRoZSBzY29wZSBleHBy
ZXNzaW9uIGdpdmluZyB0aGUgY29sbGVjdGlvbiB0byBlbnVtZXJhdGUuCi0gKgotICogICAgIEZv
ciBleGFtcGxlOiBgKG5hbWUsIGFnZSkgaW4geydhZGFtJzoxMCwgJ2FtYWxpZSc6MTJ9YC4KLSAq
Ci0gKiBAZXhhbXBsZQotICogVGhpcyBleGFtcGxlIGluaXRpYWxpemVzIHRoZSBzY29wZSB0byBh
IGxpc3Qgb2YgbmFtZXMgYW5kCi0gKiB0aGVuIHVzZXMgYG5nUmVwZWF0YCB0byBkaXNwbGF5IGV2
ZXJ5IHBlcnNvbjoKLSAgICA8ZG9jOmV4YW1wbGU+Ci0gICAgICA8ZG9jOnNvdXJjZT4KLSAgICAg
ICAgPGRpdiBuZy1pbml0PSJmcmllbmRzID0gW3tuYW1lOidKb2huJywgYWdlOjI1fSwge25hbWU6
J01hcnknLCBhZ2U6Mjh9XSI+Ci0gICAgICAgICAgSSBoYXZlIHt7ZnJpZW5kcy5sZW5ndGh9fSBm
cmllbmRzLiBUaGV5IGFyZToKLSAgICAgICAgICA8dWw+Ci0gICAgICAgICAgICA8bGkgbmctcmVw
ZWF0PSJmcmllbmQgaW4gZnJpZW5kcyI+Ci0gICAgICAgICAgICAgIFt7eyRpbmRleCArIDF9fV0g
e3tmcmllbmQubmFtZX19IHdobyBpcyB7e2ZyaWVuZC5hZ2V9fSB5ZWFycyBvbGQuCi0gICAgICAg
ICAgICA8L2xpPgotICAgICAgICAgIDwvdWw+Ci0gICAgICAgIDwvZGl2PgotICAgICAgPC9kb2M6
c291cmNlPgotICAgICAgPGRvYzpzY2VuYXJpbz4KLSAgICAgICAgIGl0KCdzaG91bGQgY2hlY2sg
bmctcmVwZWF0JywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgIHZhciByID0gdXNpbmcoJy5kb2Mt
ZXhhbXBsZS1saXZlJykucmVwZWF0ZXIoJ3VsIGxpJyk7Ci0gICAgICAgICAgIGV4cGVjdChyLmNv
dW50KCkpLnRvQmUoMik7Ci0gICAgICAgICAgIGV4cGVjdChyLnJvdygwKSkudG9FcXVhbChbIjEi
LCJKb2huIiwiMjUiXSk7Ci0gICAgICAgICAgIGV4cGVjdChyLnJvdygxKSkudG9FcXVhbChbIjIi
LCJNYXJ5IiwiMjgiXSk7Ci0gICAgICAgICB9KTsKLSAgICAgIDwvZG9jOnNjZW5hcmlvPgotICAg
IDwvZG9jOmV4YW1wbGU+Ci0gKi8KLXZhciBuZ1JlcGVhdERpcmVjdGl2ZSA9IG5nRGlyZWN0aXZl
KHsKLSAgdHJhbnNjbHVkZTogJ2VsZW1lbnQnLAotICBwcmlvcml0eTogMTAwMCwKLSAgdGVybWlu
YWw6IHRydWUsCi0gIGNvbXBpbGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHIsIGxpbmtlcikgewot
ICAgIHJldHVybiBmdW5jdGlvbihzY29wZSwgaXRlclN0YXJ0RWxlbWVudCwgYXR0cil7Ci0gICAg
ICB2YXIgZXhwcmVzc2lvbiA9IGF0dHIubmdSZXBlYXQ7Ci0gICAgICB2YXIgbWF0Y2ggPSBleHBy
ZXNzaW9uLm1hdGNoKC9eXHMqKC4rKVxzK2luXHMrKC4qKVxzKiQvKSwKLSAgICAgICAgbGhzLCBy
aHMsIHZhbHVlSWRlbnQsIGtleUlkZW50OwotICAgICAgaWYgKCEgbWF0Y2gpIHsKLSAgICAgICAg
dGhyb3cgRXJyb3IoIkV4cGVjdGVkIG5nUmVwZWF0IGluIGZvcm0gb2YgJ19pdGVtXyBpbiBfY29s
bGVjdGlvbl8nIGJ1dCBnb3QgJyIgKwotICAgICAgICAgIGV4cHJlc3Npb24gKyAiJy4iKTsKLSAg
ICAgIH0KLSAgICAgIGxocyA9IG1hdGNoWzFdOwotICAgICAgcmhzID0gbWF0Y2hbMl07Ci0gICAg
ICBtYXRjaCA9IGxocy5tYXRjaCgvXig/OihbXCRcd10rKXxcKChbXCRcd10rKVxzKixccyooW1wk
XHddKylcKSkkLyk7Ci0gICAgICBpZiAoIW1hdGNoKSB7Ci0gICAgICAgIHRocm93IEVycm9yKCIn
aXRlbScgaW4gJ2l0ZW0gaW4gY29sbGVjdGlvbicgc2hvdWxkIGJlIGlkZW50aWZpZXIgb3IgKGtl
eSwgdmFsdWUpIGJ1dCBnb3QgJyIgKwotICAgICAgICAgICAgbGhzICsgIicuIik7Ci0gICAgICB9
Ci0gICAgICB2YWx1ZUlkZW50ID0gbWF0Y2hbM10gfHwgbWF0Y2hbMV07Ci0gICAgICBrZXlJZGVu
dCA9IG1hdGNoWzJdOwotCi0gICAgICAvLyBTdG9yZSBhIGxpc3Qgb2YgZWxlbWVudHMgZnJvbSBw
cmV2aW91cyBydW4uIFRoaXMgaXMgYSBoYXNoIHdoZXJlIGtleSBpcyB0aGUgaXRlbSBmcm9tIHRo
ZQotICAgICAgLy8gaXRlcmF0b3IsIGFuZCB0aGUgdmFsdWUgaXMgYW4gYXJyYXkgb2Ygb2JqZWN0
cyB3aXRoIGZvbGxvd2luZyBwcm9wZXJ0aWVzLgotICAgICAgLy8gICAtIHNjb3BlOiBib3VuZCBz
Y29wZQotICAgICAgLy8gICAtIGVsZW1lbnQ6IHByZXZpb3VzIGVsZW1lbnQuCi0gICAgICAvLyAg
IC0gaW5kZXg6IHBvc2l0aW9uCi0gICAgICAvLyBXZSBuZWVkIGFuIGFycmF5IG9mIHRoZXNlIG9i
amVjdHMgc2luY2UgdGhlIHNhbWUgb2JqZWN0IGNhbiBiZSByZXR1cm5lZCBmcm9tIHRoZSBpdGVy
YXRvci4KLSAgICAgIC8vIFdlIGV4cGVjdCB0aGlzIHRvIGJlIGEgcmFyZSBjYXNlLgotICAgICAg
dmFyIGxhc3RPcmRlciA9IG5ldyBIYXNoUXVldWVNYXAoKTsKLQotICAgICAgc2NvcGUuJHdhdGNo
KGZ1bmN0aW9uIG5nUmVwZWF0V2F0Y2goc2NvcGUpewotICAgICAgICB2YXIgaW5kZXgsIGxlbmd0
aCwKLSAgICAgICAgICAgIGNvbGxlY3Rpb24gPSBzY29wZS4kZXZhbChyaHMpLAotICAgICAgICAg
ICAgY3Vyc29yID0gaXRlclN0YXJ0RWxlbWVudCwgICAgIC8vIGN1cnJlbnQgcG9zaXRpb24gb2Yg
dGhlIG5vZGUKLSAgICAgICAgICAgIC8vIFNhbWUgYXMgbGFzdE9yZGVyIGJ1dCBpdCBoYXMgdGhl
IGN1cnJlbnQgc3RhdGUuIEl0IHdpbGwgYmVjb21lIHRoZQotICAgICAgICAgICAgLy8gbGFzdE9y
ZGVyIG9uIHRoZSBuZXh0IGl0ZXJhdGlvbi4KLSAgICAgICAgICAgIG5leHRPcmRlciA9IG5ldyBI
YXNoUXVldWVNYXAoKSwKLSAgICAgICAgICAgIGFycmF5Qm91bmQsCi0gICAgICAgICAgICBjaGls
ZFNjb3BlLAotICAgICAgICAgICAga2V5LCB2YWx1ZSwgLy8ga2V5L3ZhbHVlIG9mIGl0ZXJhdGlv
bgotICAgICAgICAgICAgYXJyYXksCi0gICAgICAgICAgICBsYXN0OyAgICAgICAvLyBsYXN0IG9i
amVjdCBpbmZvcm1hdGlvbiB7c2NvcGUsIGVsZW1lbnQsIGluZGV4fQotCi0KLQotICAgICAgICBp
ZiAoIWlzQXJyYXkoY29sbGVjdGlvbikpIHsKLSAgICAgICAgICAvLyBpZiBvYmplY3QsIGV4dHJh
Y3Qga2V5cywgc29ydCB0aGVtIGFuZCB1c2UgdG8gZGV0ZXJtaW5lIG9yZGVyIG9mIGl0ZXJhdGlv
biBvdmVyIG9iaiBwcm9wcwotICAgICAgICAgIGFycmF5ID0gW107Ci0gICAgICAgICAgZm9yKGtl
eSBpbiBjb2xsZWN0aW9uKSB7Ci0gICAgICAgICAgICBpZiAoY29sbGVjdGlvbi5oYXNPd25Qcm9w
ZXJ0eShrZXkpICYmIGtleS5jaGFyQXQoMCkgIT0gJyQnKSB7Ci0gICAgICAgICAgICAgIGFycmF5
LnB1c2goa2V5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgYXJyYXku
c29ydCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGFycmF5ID0gY29sbGVjdGlvbiB8
fCBbXTsKLSAgICAgICAgfQotCi0gICAgICAgIGFycmF5Qm91bmQgPSBhcnJheS5sZW5ndGgtMTsK
LQotICAgICAgICAvLyB3ZSBhcmUgbm90IHVzaW5nIGZvckVhY2ggZm9yIHBlcmYgcmVhc29ucyAo
dHJ5aW5nIHRvIGF2b2lkICNjYWxsKQotICAgICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0g
YXJyYXkubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykgewotICAgICAgICAgIGtleSA9
IChjb2xsZWN0aW9uID09PSBhcnJheSkgPyBpbmRleCA6IGFycmF5W2luZGV4XTsKLSAgICAgICAg
ICB2YWx1ZSA9IGNvbGxlY3Rpb25ba2V5XTsKLQotICAgICAgICAgIGxhc3QgPSBsYXN0T3JkZXIu
c2hpZnQodmFsdWUpOwotCi0gICAgICAgICAgaWYgKGxhc3QpIHsKLSAgICAgICAgICAgIC8vIGlm
IHdlIGhhdmUgYWxyZWFkeSBzZWVuIHRoaXMgb2JqZWN0LCB0aGVuIHdlIG5lZWQgdG8gcmV1c2Ug
dGhlCi0gICAgICAgICAgICAvLyBhc3NvY2lhdGVkIHNjb3BlL2VsZW1lbnQKLSAgICAgICAgICAg
IGNoaWxkU2NvcGUgPSBsYXN0LnNjb3BlOwotICAgICAgICAgICAgbmV4dE9yZGVyLnB1c2godmFs
dWUsIGxhc3QpOwotCi0gICAgICAgICAgICBpZiAoaW5kZXggPT09IGxhc3QuaW5kZXgpIHsKLSAg
ICAgICAgICAgICAgLy8gZG8gbm90aGluZwotICAgICAgICAgICAgICBjdXJzb3IgPSBsYXN0LmVs
ZW1lbnQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAvLyBleGlzdGluZyBp
dGVtIHdoaWNoIGdvdCBtb3ZlZAotICAgICAgICAgICAgICBsYXN0LmluZGV4ID0gaW5kZXg7Ci0g
ICAgICAgICAgICAgIC8vIFRoaXMgbWF5IGJlIGEgbm9vcCwgaWYgdGhlIGVsZW1lbnQgaXMgbmV4
dCwgYnV0IEkgZG9uJ3Qga25vdyBvZiBhIGdvb2Qgd2F5IHRvCi0gICAgICAgICAgICAgIC8vIGZp
Z3VyZSB0aGlzIG91dCwgIHNpbmNlIGl0IHdvdWxkIHJlcXVpcmUgZXh0cmEgRE9NIGFjY2Vzcywg
c28gbGV0J3MganVzdCBob3BlIHRoYXQKLSAgICAgICAgICAgICAgLy8gdGhlIGJyb3dzZXJzIHJl
YWxpemVzIHRoYXQgaXQgaXMgbm9vcCwgYW5kIHRyZWF0cyBpdCBhcyBzdWNoLgotICAgICAgICAg
ICAgICBjdXJzb3IuYWZ0ZXIobGFzdC5lbGVtZW50KTsKLSAgICAgICAgICAgICAgY3Vyc29yID0g
bGFzdC5lbGVtZW50OwotICAgICAgICAgICAgfQotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAvLyBuZXcgaXRlbSB3aGljaCB3ZSBkb24ndCBrbm93IGFib3V0Ci0gICAgICAgICAgICBj
aGlsZFNjb3BlID0gc2NvcGUuJG5ldygpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGNoaWxk
U2NvcGVbdmFsdWVJZGVudF0gPSB2YWx1ZTsKLSAgICAgICAgICBpZiAoa2V5SWRlbnQpIGNoaWxk
U2NvcGVba2V5SWRlbnRdID0ga2V5OwotICAgICAgICAgIGNoaWxkU2NvcGUuJGluZGV4ID0gaW5k
ZXg7Ci0KLSAgICAgICAgICBjaGlsZFNjb3BlLiRmaXJzdCA9IChpbmRleCA9PT0gMCk7Ci0gICAg
ICAgICAgY2hpbGRTY29wZS4kbGFzdCA9IChpbmRleCA9PT0gYXJyYXlCb3VuZCk7Ci0gICAgICAg
ICAgY2hpbGRTY29wZS4kbWlkZGxlID0gIShjaGlsZFNjb3BlLiRmaXJzdCB8fCBjaGlsZFNjb3Bl
LiRsYXN0KTsKLQotICAgICAgICAgIGlmICghbGFzdCkgewotICAgICAgICAgICAgbGlua2VyKGNo
aWxkU2NvcGUsIGZ1bmN0aW9uKGNsb25lKXsKLSAgICAgICAgICAgICAgY3Vyc29yLmFmdGVyKGNs
b25lKTsKLSAgICAgICAgICAgICAgbGFzdCA9IHsKLSAgICAgICAgICAgICAgICAgIHNjb3BlOiBj
aGlsZFNjb3BlLAotICAgICAgICAgICAgICAgICAgZWxlbWVudDogKGN1cnNvciA9IGNsb25lKSwK
LSAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleAotICAgICAgICAgICAgICAgIH07Ci0gICAg
ICAgICAgICAgIG5leHRPcmRlci5wdXNoKHZhbHVlLCBsYXN0KTsKLSAgICAgICAgICAgIH0pOwot
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vc2hyaW5rIGNoaWxkcmVuCi0gICAg
ICAgIGZvciAoa2V5IGluIGxhc3RPcmRlcikgewotICAgICAgICAgIGlmIChsYXN0T3JkZXIuaGFz
T3duUHJvcGVydHkoa2V5KSkgewotICAgICAgICAgICAgYXJyYXkgPSBsYXN0T3JkZXJba2V5XTsK
LSAgICAgICAgICAgIHdoaWxlKGFycmF5Lmxlbmd0aCkgewotICAgICAgICAgICAgICB2YWx1ZSA9
IGFycmF5LnBvcCgpOwotICAgICAgICAgICAgICB2YWx1ZS5lbGVtZW50LnJlbW92ZSgpOwotICAg
ICAgICAgICAgICB2YWx1ZS5zY29wZS4kZGVzdHJveSgpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGxhc3RPcmRlciA9IG5leHRPcmRlcjsKLSAgICAg
IH0pOwotICAgIH07Ci0gIH0KLX0pOwotCi0vKioKLSAqIEBuZ2RvYyBkaXJlY3RpdmUKLSAqIEBu
YW1lIG5nLmRpcmVjdGl2ZTpuZ1Nob3cKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqIFRoZSBgbmdT
aG93YCBhbmQgYG5nSGlkZWAgZGlyZWN0aXZlcyBzaG93IG9yIGhpZGUgYSBwb3J0aW9uIG9mIHRo
ZSBET00gdHJlZSAoSFRNTCkKLSAqIGNvbmRpdGlvbmFsbHkuCi0gKgotICogQGVsZW1lbnQgQU5Z
Ci0gKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nU2hvdyBJZiB0aGUge0BsaW5rIGd1aWRlL2V4cHJl
c3Npb24gZXhwcmVzc2lvbn0gaXMgdHJ1dGh5Ci0gKiAgICAgdGhlbiB0aGUgZWxlbWVudCBpcyBz
aG93biBvciBoaWRkZW4gcmVzcGVjdGl2ZWx5LgotICoKLSAqIEBleGFtcGxlCi0gICA8ZG9jOmV4
YW1wbGU+Ci0gICAgIDxkb2M6c291cmNlPgotICAgICAgICBDbGljayBtZTogPGlucHV0IHR5cGU9
ImNoZWNrYm94IiBuZy1tb2RlbD0iY2hlY2tlZCI+PGJyLz4KLSAgICAgICAgU2hvdzogPHNwYW4g
bmctc2hvdz0iY2hlY2tlZCI+SSBzaG93IHVwIHdoZW4geW91ciBjaGVja2JveCBpcyBjaGVja2Vk
Ljwvc3Bhbj4gPGJyLz4KLSAgICAgICAgSGlkZTogPHNwYW4gbmctaGlkZT0iY2hlY2tlZCI+SSBo
aWRlIHdoZW4geW91ciBjaGVja2JveCBpcyBjaGVja2VkLjwvc3Bhbj4KLSAgICAgPC9kb2M6c291
cmNlPgotICAgICA8ZG9jOnNjZW5hcmlvPgotICAgICAgIGl0KCdzaG91bGQgY2hlY2sgbmctc2hv
dyAvIG5nLWhpZGUnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9j
LWV4YW1wbGUtbGl2ZSBzcGFuOmZpcnN0OmhpZGRlbicpLmNvdW50KCkpLnRvRXF1YWwoMSk7Ci0g
ICAgICAgICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgc3BhbjpsYXN0OnZpc2li
bGUnKS5jb3VudCgpKS50b0VxdWFsKDEpOwotCi0gICAgICAgICBpbnB1dCgnY2hlY2tlZCcpLmNo
ZWNrKCk7Ci0KLSAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBzcGFu
OmZpcnN0OnZpc2libGUnKS5jb3VudCgpKS50b0VxdWFsKDEpOwotICAgICAgICAgZXhwZWN0KGVs
ZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlIHNwYW46bGFzdDpoaWRkZW4nKS5jb3VudCgpKS50b0Vx
dWFsKDEpOwotICAgICAgIH0pOwotICAgICA8L2RvYzpzY2VuYXJpbz4KLSAgIDwvZG9jOmV4YW1w
bGU+Ci0gKi8KLS8vVE9ETyhtaXNrbyk6IHJlZmFjdG9yIHRvIHJlbW92ZSBlbGVtZW50IGZyb20g
dGhlIERPTQotdmFyIG5nU2hvd0RpcmVjdGl2ZSA9IG5nRGlyZWN0aXZlKGZ1bmN0aW9uKHNjb3Bl
LCBlbGVtZW50LCBhdHRyKXsKLSAgc2NvcGUuJHdhdGNoKGF0dHIubmdTaG93LCBmdW5jdGlvbiBu
Z1Nob3dXYXRjaEFjdGlvbih2YWx1ZSl7Ci0gICAgZWxlbWVudC5jc3MoJ2Rpc3BsYXknLCB0b0Jv
b2xlYW4odmFsdWUpID8gJycgOiAnbm9uZScpOwotICB9KTsKLX0pOwotCi0KLS8qKgotICogQG5n
ZG9jIGRpcmVjdGl2ZQotICogQG5hbWUgbmcuZGlyZWN0aXZlOm5nSGlkZQotICoKLSAqIEBkZXNj
cmlwdGlvbgotICogVGhlIGBuZ0hpZGVgIGFuZCBgbmdTaG93YCBkaXJlY3RpdmVzIGhpZGUgb3Ig
c2hvdyBhIHBvcnRpb24gb2YgdGhlIERPTSB0cmVlIChIVE1MKQotICogY29uZGl0aW9uYWxseS4K
LSAqCi0gKiBAZWxlbWVudCBBTlkKLSAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdIaWRlIElmIHRo
ZSB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBleHByZXNzaW9ufSBpcyB0cnV0aHkgdGhlbgotICog
ICAgIHRoZSBlbGVtZW50IGlzIHNob3duIG9yIGhpZGRlbiByZXNwZWN0aXZlbHkuCi0gKgotICog
QGV4YW1wbGUKLSAgIDxkb2M6ZXhhbXBsZT4KLSAgICAgPGRvYzpzb3VyY2U+Ci0gICAgICAgIENs
aWNrIG1lOiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5nLW1vZGVsPSJjaGVja2VkIj48YnIvPgot
ICAgICAgICBTaG93OiA8c3BhbiBuZy1zaG93PSJjaGVja2VkIj5JIHNob3cgdXAgd2hlbiB5b3Ug
Y2hlY2tib3ggaXMgY2hlY2tlZD88L3NwYW4+IDxici8+Ci0gICAgICAgIEhpZGU6IDxzcGFuIG5n
LWhpZGU9ImNoZWNrZWQiPkkgaGlkZSB3aGVuIHlvdSBjaGVja2JveCBpcyBjaGVja2VkPzwvc3Bh
bj4KLSAgICAgPC9kb2M6c291cmNlPgotICAgICA8ZG9jOnNjZW5hcmlvPgotICAgICAgIGl0KCdz
aG91bGQgY2hlY2sgbmctc2hvdyAvIG5nLWhpZGUnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgIGV4
cGVjdChlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSBzcGFuOmZpcnN0OmhpZGRlbicpLmNvdW50
KCkpLnRvRXF1YWwoMSk7Ci0gICAgICAgICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxp
dmUgc3BhbjpsYXN0OnZpc2libGUnKS5jb3VudCgpKS50b0VxdWFsKDEpOwotCi0gICAgICAgICBp
bnB1dCgnY2hlY2tlZCcpLmNoZWNrKCk7Ci0KLSAgICAgICAgIGV4cGVjdChlbGVtZW50KCcuZG9j
LWV4YW1wbGUtbGl2ZSBzcGFuOmZpcnN0OnZpc2libGUnKS5jb3VudCgpKS50b0VxdWFsKDEpOwot
ICAgICAgICAgZXhwZWN0KGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlIHNwYW46bGFzdDpoaWRk
ZW4nKS5jb3VudCgpKS50b0VxdWFsKDEpOwotICAgICAgIH0pOwotICAgICA8L2RvYzpzY2VuYXJp
bz4KLSAgIDwvZG9jOmV4YW1wbGU+Ci0gKi8KLS8vVE9ETyhtaXNrbyk6IHJlZmFjdG9yIHRvIHJl
bW92ZSBlbGVtZW50IGZyb20gdGhlIERPTQotdmFyIG5nSGlkZURpcmVjdGl2ZSA9IG5nRGlyZWN0
aXZlKGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyKXsKLSAgc2NvcGUuJHdhdGNoKGF0dHIu
bmdIaWRlLCBmdW5jdGlvbiBuZ0hpZGVXYXRjaEFjdGlvbih2YWx1ZSl7Ci0gICAgZWxlbWVudC5j
c3MoJ2Rpc3BsYXknLCB0b0Jvb2xlYW4odmFsdWUpID8gJ25vbmUnIDogJycpOwotICB9KTsKLX0p
OwotCi0vKioKLSAqIEBuZ2RvYyBkaXJlY3RpdmUKLSAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpuZ1N0
eWxlCi0gKgotICogQGRlc2NyaXB0aW9uCi0gKiBUaGUgYG5nU3R5bGVgIGRpcmVjdGl2ZSBhbGxv
d3MgeW91IHRvIHNldCBDU1Mgc3R5bGUgb24gYW4gSFRNTCBlbGVtZW50IGNvbmRpdGlvbmFsbHku
Ci0gKgotICogQGVsZW1lbnQgQU5ZCi0gKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nU3R5bGUge0Bs
aW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gd2hpY2ggZXZhbHMgdG8gYW4KLSAqICAg
ICAgb2JqZWN0IHdob3NlIGtleXMgYXJlIENTUyBzdHlsZSBuYW1lcyBhbmQgdmFsdWVzIGFyZSBj
b3JyZXNwb25kaW5nIHZhbHVlcyBmb3IgdGhvc2UgQ1NTCi0gKiAgICAgIGtleXMuCi0gKgotICog
QGV4YW1wbGUKLSAgIDxleGFtcGxlPgotICAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KLSAg
ICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9InNldCIgbmctY2xpY2s9Im15U3R5bGU9
e2NvbG9yOidyZWQnfSI+Ci0gICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSJjbGVh
ciIgbmctY2xpY2s9Im15U3R5bGU9e30iPgotICAgICAgICA8YnIvPgotICAgICAgICA8c3BhbiBu
Zy1zdHlsZT0ibXlTdHlsZSI+U2FtcGxlIFRleHQ8L3NwYW4+Ci0gICAgICAgIDxwcmU+bXlTdHls
ZT17e215U3R5bGV9fTwvcHJlPgotICAgICA8L2ZpbGU+Ci0gICAgIDxmaWxlIG5hbWU9InN0eWxl
LmNzcyI+Ci0gICAgICAgc3BhbiB7Ci0gICAgICAgICBjb2xvcjogYmxhY2s7Ci0gICAgICAgfQot
ICAgICA8L2ZpbGU+Ci0gICAgIDxmaWxlIG5hbWU9InNjZW5hcmlvLmpzIj4KLSAgICAgICBpdCgn
c2hvdWxkIGNoZWNrIG5nLXN0eWxlJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICBleHBlY3QoZWxl
bWVudCgnLmRvYy1leGFtcGxlLWxpdmUgc3BhbicpLmNzcygnY29sb3InKSkudG9CZSgncmdiKDAs
IDAsIDApJyk7Ci0gICAgICAgICBlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSA6YnV0dG9uW3Zh
bHVlPXNldF0nKS5jbGljaygpOwotICAgICAgICAgZXhwZWN0KGVsZW1lbnQoJy5kb2MtZXhhbXBs
ZS1saXZlIHNwYW4nKS5jc3MoJ2NvbG9yJykpLnRvQmUoJ3JnYigyNTUsIDAsIDApJyk7Ci0gICAg
ICAgICBlbGVtZW50KCcuZG9jLWV4YW1wbGUtbGl2ZSA6YnV0dG9uW3ZhbHVlPWNsZWFyXScpLmNs
aWNrKCk7Ci0gICAgICAgICBleHBlY3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgc3Bhbicp
LmNzcygnY29sb3InKSkudG9CZSgncmdiKDAsIDAsIDApJyk7Ci0gICAgICAgfSk7Ci0gICAgIDwv
ZmlsZT4KLSAgIDwvZXhhbXBsZT4KLSAqLwotdmFyIG5nU3R5bGVEaXJlY3RpdmUgPSBuZ0RpcmVj
dGl2ZShmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cikgewotICBzY29wZS4kd2F0Y2goYXR0
ci5uZ1N0eWxlLCBmdW5jdGlvbiBuZ1N0eWxlV2F0Y2hBY3Rpb24obmV3U3R5bGVzLCBvbGRTdHls
ZXMpIHsKLSAgICBpZiAob2xkU3R5bGVzICYmIChuZXdTdHlsZXMgIT09IG9sZFN0eWxlcykpIHsK
LSAgICAgIGZvckVhY2gob2xkU3R5bGVzLCBmdW5jdGlvbih2YWwsIHN0eWxlKSB7IGVsZW1lbnQu
Y3NzKHN0eWxlLCAnJyk7fSk7Ci0gICAgfQotICAgIGlmIChuZXdTdHlsZXMpIGVsZW1lbnQuY3Nz
KG5ld1N0eWxlcyk7Ci0gIH0sIHRydWUpOwotfSk7Ci0KLS8qKgotICogQG5nZG9jIGRpcmVjdGl2
ZQotICogQG5hbWUgbmcuZGlyZWN0aXZlOm5nU3dpdGNoCi0gKiBAcmVzdHJpY3QgRUEKLSAqCi0g
KiBAZGVzY3JpcHRpb24KLSAqIENvbmRpdGlvbmFsbHkgY2hhbmdlIHRoZSBET00gc3RydWN0dXJl
LgotICoKLSAqIEB1c2FnZQotICogPEFOWSBuZy1zd2l0Y2g9ImV4cHJlc3Npb24iPgotICogICA8
QU5ZIG5nLXN3aXRjaC13aGVuPSJtYXRjaFZhbHVlMSI+Li4uPC9BTlk+Ci0gKiAgIDxBTlkgbmct
c3dpdGNoLXdoZW49Im1hdGNoVmFsdWUyIj4uLi48L0FOWT4KLSAqICAgLi4uCi0gKiAgIDxBTlkg
bmctc3dpdGNoLWRlZmF1bHQ+Li4uPC9BTlk+Ci0gKiA8L0FOWT4KLSAqCi0gKiBAc2NvcGUKLSAq
IEBwYXJhbSB7Kn0gbmdTd2l0Y2h8b24gZXhwcmVzc2lvbiB0byBtYXRjaCBhZ2FpbnN0IDx0dD5u
Zy1zd2l0Y2gtd2hlbjwvdHQ+LgotICogQHBhcmFtRGVzY3JpcHRpb24KLSAqIE9uIGNoaWxkIGVs
bWVudHMgYWRkOgotICoKLSAqICogYG5nU3dpdGNoV2hlbmA6IHRoZSBjYXNlIHN0YXRlbWVudCB0
byBtYXRjaCBhZ2FpbnN0LiBJZiBtYXRjaCB0aGVuIHRoaXMKLSAqICAgY2FzZSB3aWxsIGJlIGRp
c3BsYXllZC4KLSAqICogYG5nU3dpdGNoRGVmYXVsdGA6IHRoZSBkZWZhdWx0IGNhc2Ugd2hlbiBu
byBvdGhlciBjYXNzZXMgbWF0Y2guCi0gKgotICogQGV4YW1wbGUKLSAgICA8ZG9jOmV4YW1wbGU+
Ci0gICAgICA8ZG9jOnNvdXJjZT4KLSAgICAgICAgPHNjcmlwdD4KLSAgICAgICAgICBmdW5jdGlv
biBDdHJsKCRzY29wZSkgewotICAgICAgICAgICAgJHNjb3BlLml0ZW1zID0gWydzZXR0aW5ncycs
ICdob21lJywgJ290aGVyJ107Ci0gICAgICAgICAgICAkc2NvcGUuc2VsZWN0aW9uID0gJHNjb3Bl
Lml0ZW1zWzBdOwotICAgICAgICAgIH0KLSAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgIDxkaXYg
bmctY29udHJvbGxlcj0iQ3RybCI+Ci0gICAgICAgICAgPHNlbGVjdCBuZy1tb2RlbD0ic2VsZWN0
aW9uIiBuZy1vcHRpb25zPSJpdGVtIGZvciBpdGVtIGluIGl0ZW1zIj4KLSAgICAgICAgICA8L3Nl
bGVjdD4KLSAgICAgICAgICA8dHQ+c2VsZWN0aW9uPXt7c2VsZWN0aW9ufX08L3R0PgotICAgICAg
ICAgIDxoci8+Ci0gICAgICAgICAgPGRpdiBuZy1zd2l0Y2ggb249InNlbGVjdGlvbiIgPgotICAg
ICAgICAgICAgPGRpdiBuZy1zd2l0Y2gtd2hlbj0ic2V0dGluZ3MiPlNldHRpbmdzIERpdjwvZGl2
PgotICAgICAgICAgICAgPHNwYW4gbmctc3dpdGNoLXdoZW49ImhvbWUiPkhvbWUgU3Bhbjwvc3Bh
bj4KLSAgICAgICAgICAgIDxzcGFuIG5nLXN3aXRjaC1kZWZhdWx0PmRlZmF1bHQ8L3NwYW4+Ci0g
ICAgICAgICAgPC9kaXY+Ci0gICAgICAgIDwvZGl2PgotICAgICAgPC9kb2M6c291cmNlPgotICAg
ICAgPGRvYzpzY2VuYXJpbz4KLSAgICAgICAgaXQoJ3Nob3VsZCBzdGFydCBpbiBzZXR0aW5ncycs
IGZ1bmN0aW9uKCkgewotICAgICAgICAgZXhwZWN0KGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZl
IFtuZy1zd2l0Y2hdJykudGV4dCgpKS50b01hdGNoKC9TZXR0aW5ncyBEaXYvKTsKLSAgICAgICAg
fSk7Ci0gICAgICAgIGl0KCdzaG91bGQgY2hhbmdlIHRvIGhvbWUnLCBmdW5jdGlvbigpIHsKLSAg
ICAgICAgIHNlbGVjdCgnc2VsZWN0aW9uJykub3B0aW9uKCdob21lJyk7Ci0gICAgICAgICBleHBl
Y3QoZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgW25nLXN3aXRjaF0nKS50ZXh0KCkpLnRvTWF0
Y2goL0hvbWUgU3Bhbi8pOwotICAgICAgICB9KTsKLSAgICAgICAgaXQoJ3Nob3VsZCBzZWxlY3Qg
ZGVhZmF1bHQnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgIHNlbGVjdCgnc2VsZWN0aW9uJykub3B0
aW9uKCdvdGhlcicpOwotICAgICAgICAgZXhwZWN0KGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZl
IFtuZy1zd2l0Y2hdJykudGV4dCgpKS50b01hdGNoKC9kZWZhdWx0Lyk7Ci0gICAgICAgIH0pOwot
ICAgICAgPC9kb2M6c2NlbmFyaW8+Ci0gICAgPC9kb2M6ZXhhbXBsZT4KLSAqLwotdmFyIE5HX1NX
SVRDSCA9ICduZy1zd2l0Y2gnOwotdmFyIG5nU3dpdGNoRGlyZWN0aXZlID0gdmFsdWVGbih7Ci0g
IHJlc3RyaWN0OiAnRUEnLAotICByZXF1aXJlOiAnbmdTd2l0Y2gnLAotICAvLyBhc2tzIGZvciAk
c2NvcGUgdG8gZm9vbCB0aGUgQkMgY29udHJvbGxlciBtb2R1bGUKLSAgY29udHJvbGxlcjogWyck
c2NvcGUnLCBmdW5jdGlvbiBuZ1N3aXRjaENvbnRyb2xsZXIoKSB7Ci0gICAgdGhpcy5jYXNlcyA9
IHt9OwotICB9XSwKLSAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwp
IHsKLSAgICB2YXIgd2F0Y2hFeHByID0gYXR0ci5uZ1N3aXRjaCB8fCBhdHRyLm9uLAotICAgICAg
ICBzZWxlY3RlZFRyYW5zY2x1ZGUsCi0gICAgICAgIHNlbGVjdGVkRWxlbWVudCwKLSAgICAgICAg
c2VsZWN0ZWRTY29wZTsKLQotICAgIHNjb3BlLiR3YXRjaCh3YXRjaEV4cHIsIGZ1bmN0aW9uIG5n
U3dpdGNoV2F0Y2hBY3Rpb24odmFsdWUpIHsKLSAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnQpIHsK
LSAgICAgICAgc2VsZWN0ZWRTY29wZS4kZGVzdHJveSgpOwotICAgICAgICBzZWxlY3RlZEVsZW1l
bnQucmVtb3ZlKCk7Ci0gICAgICAgIHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkU2NvcGUgPSBu
dWxsOwotICAgICAgfQotICAgICAgaWYgKChzZWxlY3RlZFRyYW5zY2x1ZGUgPSBjdHJsLmNhc2Vz
WychJyArIHZhbHVlXSB8fCBjdHJsLmNhc2VzWyc/J10pKSB7Ci0gICAgICAgIHNjb3BlLiRldmFs
KGF0dHIuY2hhbmdlKTsKLSAgICAgICAgc2VsZWN0ZWRTY29wZSA9IHNjb3BlLiRuZXcoKTsKLSAg
ICAgICAgc2VsZWN0ZWRUcmFuc2NsdWRlKHNlbGVjdGVkU2NvcGUsIGZ1bmN0aW9uKGNhc2VFbGVt
ZW50KSB7Ci0gICAgICAgICAgc2VsZWN0ZWRFbGVtZW50ID0gY2FzZUVsZW1lbnQ7Ci0gICAgICAg
ICAgZWxlbWVudC5hcHBlbmQoY2FzZUVsZW1lbnQpOwotICAgICAgICB9KTsKLSAgICAgIH0KLSAg
ICB9KTsKLSAgfQotfSk7Ci0KLXZhciBuZ1N3aXRjaFdoZW5EaXJlY3RpdmUgPSBuZ0RpcmVjdGl2
ZSh7Ci0gIHRyYW5zY2x1ZGU6ICdlbGVtZW50JywKLSAgcHJpb3JpdHk6IDUwMCwKLSAgcmVxdWly
ZTogJ15uZ1N3aXRjaCcsCi0gIGNvbXBpbGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJzLCB0cmFu
c2NsdWRlKSB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJs
KSB7Ci0gICAgICBjdHJsLmNhc2VzWychJyArIGF0dHJzLm5nU3dpdGNoV2hlbl0gPSB0cmFuc2Ns
dWRlOwotICAgIH07Ci0gIH0KLX0pOwotCi12YXIgbmdTd2l0Y2hEZWZhdWx0RGlyZWN0aXZlID0g
bmdEaXJlY3RpdmUoewotICB0cmFuc2NsdWRlOiAnZWxlbWVudCcsCi0gIHByaW9yaXR5OiA1MDAs
Ci0gIHJlcXVpcmU6ICdebmdTd2l0Y2gnLAotICBjb21waWxlOiBmdW5jdGlvbihlbGVtZW50LCBh
dHRycywgdHJhbnNjbHVkZSkgewotICAgIHJldHVybiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwg
YXR0ciwgY3RybCkgewotICAgICAgY3RybC5jYXNlc1snPyddID0gdHJhbnNjbHVkZTsKLSAgICB9
OwotICB9Ci19KTsKLQotLyoqCi0gKiBAbmdkb2MgZGlyZWN0aXZlCi0gKiBAbmFtZSBuZy5kaXJl
Y3RpdmU6bmdUcmFuc2NsdWRlCi0gKgotICogQGRlc2NyaXB0aW9uCi0gKiBJbnNlcnQgdGhlIHRy
YW5zY2x1ZGVkIERPTSBoZXJlLgotICoKLSAqIEBlbGVtZW50IEFOWQotICoKLSAqIEBleGFtcGxl
Ci0gICA8ZG9jOmV4YW1wbGUgbW9kdWxlPSJ0cmFuc2NsdWRlIj4KLSAgICAgPGRvYzpzb3VyY2U+
Ci0gICAgICAgPHNjcmlwdD4KLSAgICAgICAgIGZ1bmN0aW9uIEN0cmwoJHNjb3BlKSB7Ci0gICAg
ICAgICAgICRzY29wZS50aXRsZSA9ICdMb3JlbSBJcHN1bSc7Ci0gICAgICAgICAgICRzY29wZS50
ZXh0ID0gJ05lcXVlIHBvcnJvIHF1aXNxdWFtIGVzdCBxdWkgZG9sb3JlbSBpcHN1bSBxdWlhIGRv
bG9yLi4uJzsKLSAgICAgICAgIH0KLQotICAgICAgICAgYW5ndWxhci5tb2R1bGUoJ3RyYW5zY2x1
ZGUnLCBbXSkKLSAgICAgICAgICAuZGlyZWN0aXZlKCdwYW5lJywgZnVuY3Rpb24oKXsKLSAgICAg
ICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgcmVzdHJpY3Q6ICdFJywKLSAgICAgICAg
ICAgICAgIHRyYW5zY2x1ZGU6IHRydWUsCi0gICAgICAgICAgICAgICBzY29wZTogJ2lzb2xhdGUn
LAotICAgICAgICAgICAgICAgbG9jYWxzOiB7IHRpdGxlOidiaW5kJyB9LAotICAgICAgICAgICAg
ICAgdGVtcGxhdGU6ICc8ZGl2IHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCBibGFjazsiPicgKwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6
IGdyYXkiPnt7dGl0bGV9fTwvZGl2PicgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxk
aXYgbmctdHJhbnNjbHVkZT48L2Rpdj4nICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAnPC9k
aXY+JwotICAgICAgICAgICAgIH07Ci0gICAgICAgICB9KTsKLSAgICAgICA8L3NjcmlwdD4KLSAg
ICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9IkN0cmwiPgotICAgICAgICAgPGlucHV0IG5nLW1vZGVs
PSJ0aXRsZSI+PGJyPgotICAgICAgICAgPHRleHRhcmVhIG5nLW1vZGVsPSJ0ZXh0Ij48L3RleHRh
cmVhPiA8YnIvPgotICAgICAgICAgPHBhbmUgdGl0bGU9Int7dGl0bGV9fSI+e3t0ZXh0fX08L3Bh
bmU+Ci0gICAgICAgPC9kaXY+Ci0gICAgIDwvZG9jOnNvdXJjZT4KLSAgICAgPGRvYzpzY2VuYXJp
bz4KLSAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIHRyYW5zY2x1ZGVkJywgZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgaW5wdXQoJ3RpdGxlJykuZW50ZXIoJ1RJVExFJyk7Ci0gICAgICAgICAgaW5wdXQo
J3RleHQnKS5lbnRlcignVEVYVCcpOwotICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCd0aXRsZScp
KS50b0VxdWFsKCdUSVRMRScpOwotICAgICAgICAgIGV4cGVjdChiaW5kaW5nKCd0ZXh0JykpLnRv
RXF1YWwoJ1RFWFQnKTsKLSAgICAgICAgfSk7Ci0gICAgIDwvZG9jOnNjZW5hcmlvPgotICAgPC9k
b2M6ZXhhbXBsZT4KLSAqCi0gKi8KLXZhciBuZ1RyYW5zY2x1ZGVEaXJlY3RpdmUgPSBuZ0RpcmVj
dGl2ZSh7Ci0gIGNvbnRyb2xsZXI6IFsnJHRyYW5zY2x1ZGUnLCAnJGVsZW1lbnQnLCBmdW5jdGlv
bigkdHJhbnNjbHVkZSwgJGVsZW1lbnQpIHsKLSAgICAkdHJhbnNjbHVkZShmdW5jdGlvbihjbG9u
ZSkgewotICAgICAgJGVsZW1lbnQuYXBwZW5kKGNsb25lKTsKLSAgICB9KTsKLSAgfV0KLX0pOwot
Ci0vKioKLSAqIEBuZ2RvYyBkaXJlY3RpdmUKLSAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpuZ1ZpZXcK
LSAqIEByZXN0cmljdCBFQ0EKLSAqCi0gKiBAZGVzY3JpcHRpb24KLSAqICMgT3ZlcnZpZXcKLSAq
IGBuZ1ZpZXdgIGlzIGEgZGlyZWN0aXZlIHRoYXQgY29tcGxlbWVudHMgdGhlIHtAbGluayBuZy4k
cm91dGUgJHJvdXRlfSBzZXJ2aWNlIGJ5Ci0gKiBpbmNsdWRpbmcgdGhlIHJlbmRlcmVkIHRlbXBs
YXRlIG9mIHRoZSBjdXJyZW50IHJvdXRlIGludG8gdGhlIG1haW4gbGF5b3V0IChgaW5kZXguaHRt
bGApIGZpbGUuCi0gKiBFdmVyeSB0aW1lIHRoZSBjdXJyZW50IHJvdXRlIGNoYW5nZXMsIHRoZSBp
bmNsdWRlZCB2aWV3IGNoYW5nZXMgd2l0aCBpdCBhY2NvcmRpbmcgdG8gdGhlCi0gKiBjb25maWd1
cmF0aW9uIG9mIHRoZSBgJHJvdXRlYCBzZXJ2aWNlLgotICoKLSAqIEBzY29wZQotICogQGV4YW1w
bGUKLSAgICA8ZXhhbXBsZSBtb2R1bGU9Im5nVmlldyI+Ci0gICAgICA8ZmlsZSBuYW1lPSJpbmRl
eC5odG1sIj4KLSAgICAgICAgPGRpdiBuZy1jb250cm9sbGVyPSJNYWluQ250bCI+Ci0gICAgICAg
ICAgQ2hvb3NlOgotICAgICAgICAgIDxhIGhyZWY9IkJvb2svTW9ieSI+TW9ieTwvYT4gfAotICAg
ICAgICAgIDxhIGhyZWY9IkJvb2svTW9ieS9jaC8xIj5Nb2J5OiBDaDE8L2E+IHwKLSAgICAgICAg
ICA8YSBocmVmPSJCb29rL0dhdHNieSI+R2F0c2J5PC9hPiB8Ci0gICAgICAgICAgPGEgaHJlZj0i
Qm9vay9HYXRzYnkvY2gvND9rZXk9dmFsdWUiPkdhdHNieTogQ2g0PC9hPiB8Ci0gICAgICAgICAg
PGEgaHJlZj0iQm9vay9TY2FybGV0Ij5TY2FybGV0IExldHRlcjwvYT48YnIvPgotCi0gICAgICAg
ICAgPGRpdiBuZy12aWV3PjwvZGl2PgotICAgICAgICAgIDxociAvPgotCi0gICAgICAgICAgPHBy
ZT4kbG9jYXRpb24ucGF0aCgpID0ge3skbG9jYXRpb24ucGF0aCgpfX08L3ByZT4KLSAgICAgICAg
ICA8cHJlPiRyb3V0ZS5jdXJyZW50LnRlbXBsYXRlVXJsID0ge3skcm91dGUuY3VycmVudC50ZW1w
bGF0ZVVybH19PC9wcmU+Ci0gICAgICAgICAgPHByZT4kcm91dGUuY3VycmVudC5wYXJhbXMgPSB7
eyRyb3V0ZS5jdXJyZW50LnBhcmFtc319PC9wcmU+Ci0gICAgICAgICAgPHByZT4kcm91dGUuY3Vy
cmVudC5zY29wZS5uYW1lID0ge3skcm91dGUuY3VycmVudC5zY29wZS5uYW1lfX08L3ByZT4KLSAg
ICAgICAgICA8cHJlPiRyb3V0ZVBhcmFtcyA9IHt7JHJvdXRlUGFyYW1zfX08L3ByZT4KLSAgICAg
ICAgPC9kaXY+Ci0gICAgICA8L2ZpbGU+Ci0KLSAgICAgIDxmaWxlIG5hbWU9ImJvb2suaHRtbCI+
Ci0gICAgICAgIGNvbnRyb2xsZXI6IHt7bmFtZX19PGJyIC8+Ci0gICAgICAgIEJvb2sgSWQ6IHt7
cGFyYW1zLmJvb2tJZH19PGJyIC8+Ci0gICAgICA8L2ZpbGU+Ci0KLSAgICAgIDxmaWxlIG5hbWU9
ImNoYXB0ZXIuaHRtbCI+Ci0gICAgICAgIGNvbnRyb2xsZXI6IHt7bmFtZX19PGJyIC8+Ci0gICAg
ICAgIEJvb2sgSWQ6IHt7cGFyYW1zLmJvb2tJZH19PGJyIC8+Ci0gICAgICAgIENoYXB0ZXIgSWQ6
IHt7cGFyYW1zLmNoYXB0ZXJJZH19Ci0gICAgICA8L2ZpbGU+Ci0KLSAgICAgIDxmaWxlIG5hbWU9
InNjcmlwdC5qcyI+Ci0gICAgICAgIGFuZ3VsYXIubW9kdWxlKCduZ1ZpZXcnLCBbXSwgZnVuY3Rp
b24oJHJvdXRlUHJvdmlkZXIsICRsb2NhdGlvblByb3ZpZGVyKSB7Ci0gICAgICAgICAgJHJvdXRl
UHJvdmlkZXIud2hlbignL0Jvb2svOmJvb2tJZCcsIHsKLSAgICAgICAgICAgIHRlbXBsYXRlVXJs
OiAnYm9vay5odG1sJywKLSAgICAgICAgICAgIGNvbnRyb2xsZXI6IEJvb2tDbnRsCi0gICAgICAg
ICAgfSk7Ci0gICAgICAgICAgJHJvdXRlUHJvdmlkZXIud2hlbignL0Jvb2svOmJvb2tJZC9jaC86
Y2hhcHRlcklkJywgewotICAgICAgICAgICAgdGVtcGxhdGVVcmw6ICdjaGFwdGVyLmh0bWwnLAot
ICAgICAgICAgICAgY29udHJvbGxlcjogQ2hhcHRlckNudGwKLSAgICAgICAgICB9KTsKLQotICAg
ICAgICAgIC8vIGNvbmZpZ3VyZSBodG1sNSB0byBnZXQgbGlua3Mgd29ya2luZyBvbiBqc2ZpZGRs
ZQotICAgICAgICAgICRsb2NhdGlvblByb3ZpZGVyLmh0bWw1TW9kZSh0cnVlKTsKLSAgICAgICAg
fSk7Ci0KLSAgICAgICAgZnVuY3Rpb24gTWFpbkNudGwoJHNjb3BlLCAkcm91dGUsICRyb3V0ZVBh
cmFtcywgJGxvY2F0aW9uKSB7Ci0gICAgICAgICAgJHNjb3BlLiRyb3V0ZSA9ICRyb3V0ZTsKLSAg
ICAgICAgICAkc2NvcGUuJGxvY2F0aW9uID0gJGxvY2F0aW9uOwotICAgICAgICAgICRzY29wZS4k
cm91dGVQYXJhbXMgPSAkcm91dGVQYXJhbXM7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlv
biBCb29rQ250bCgkc2NvcGUsICRyb3V0ZVBhcmFtcykgewotICAgICAgICAgICRzY29wZS5uYW1l
ID0gIkJvb2tDbnRsIjsKLSAgICAgICAgICAkc2NvcGUucGFyYW1zID0gJHJvdXRlUGFyYW1zOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gQ2hhcHRlckNudGwoJHNjb3BlLCAkcm91dGVQ
YXJhbXMpIHsKLSAgICAgICAgICAkc2NvcGUubmFtZSA9ICJDaGFwdGVyQ250bCI7Ci0gICAgICAg
ICAgJHNjb3BlLnBhcmFtcyA9ICRyb3V0ZVBhcmFtczsKLSAgICAgICAgfQotICAgICAgPC9maWxl
PgotCi0gICAgICA8ZmlsZSBuYW1lPSJzY2VuYXJpby5qcyI+Ci0gICAgICAgIGl0KCdzaG91bGQg
bG9hZCBhbmQgY29tcGlsZSBjb3JyZWN0IHRlbXBsYXRlJywgZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgZWxlbWVudCgnYTpjb250YWlucygiTW9ieTogQ2gxIiknKS5jbGljaygpOwotICAgICAgICAg
IHZhciBjb250ZW50ID0gZWxlbWVudCgnLmRvYy1leGFtcGxlLWxpdmUgW25nLXZpZXddJykudGV4
dCgpOwotICAgICAgICAgIGV4cGVjdChjb250ZW50KS50b01hdGNoKC9jb250cm9sbGVyXDogQ2hh
cHRlckNudGwvKTsKLSAgICAgICAgICBleHBlY3QoY29udGVudCkudG9NYXRjaCgvQm9vayBJZFw6
IE1vYnkvKTsKLSAgICAgICAgICBleHBlY3QoY29udGVudCkudG9NYXRjaCgvQ2hhcHRlciBJZFw6
IDEvKTsKLQotICAgICAgICAgIGVsZW1lbnQoJ2E6Y29udGFpbnMoIlNjYXJsZXQiKScpLmNsaWNr
KCk7Ci0gICAgICAgICAgY29udGVudCA9IGVsZW1lbnQoJy5kb2MtZXhhbXBsZS1saXZlIFtuZy12
aWV3XScpLnRleHQoKTsKLSAgICAgICAgICBleHBlY3QoY29udGVudCkudG9NYXRjaCgvY29udHJv
bGxlclw6IEJvb2tDbnRsLyk7Ci0gICAgICAgICAgZXhwZWN0KGNvbnRlbnQpLnRvTWF0Y2goL0Jv
b2sgSWRcOiBTY2FybGV0Lyk7Ci0gICAgICAgIH0pOwotICAgICAgPC9maWxlPgotICAgIDwvZXhh
bXBsZT4KLSAqLwotCi0KLS8qKgotICogQG5nZG9jIGV2ZW50Ci0gKiBAbmFtZSBuZy5kaXJlY3Rp
dmU6bmdWaWV3IyR2aWV3Q29udGVudExvYWRlZAotICogQGV2ZW50T2YgbmcuZGlyZWN0aXZlOm5n
VmlldwotICogQGV2ZW50VHlwZSBlbWl0IG9uIHRoZSBjdXJyZW50IG5nVmlldyBzY29wZQotICog
QGRlc2NyaXB0aW9uCi0gKiBFbWl0dGVkIGV2ZXJ5IHRpbWUgdGhlIG5nVmlldyBjb250ZW50IGlz
IHJlbG9hZGVkLgotICovCi12YXIgbmdWaWV3RGlyZWN0aXZlID0gWyckaHR0cCcsICckdGVtcGxh
dGVDYWNoZScsICckcm91dGUnLCAnJGFuY2hvclNjcm9sbCcsICckY29tcGlsZScsCi0gICAgICAg
ICAgICAgICAgICAgICAgICckY29udHJvbGxlcicsCi0gICAgICAgICAgICAgICBmdW5jdGlvbigk
aHR0cCwgICAkdGVtcGxhdGVDYWNoZSwgICAkcm91dGUsICAgJGFuY2hvclNjcm9sbCwgICAkY29t
cGlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICRjb250cm9sbGVyKSB7Ci0gIHJldHVybiB7
Ci0gICAgcmVzdHJpY3Q6ICdFQ0EnLAotICAgIHRlcm1pbmFsOiB0cnVlLAotICAgIGxpbms6IGZ1
bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyKSB7Ci0gICAgICB2YXIgbGFzdFNjb3BlLAotICAg
ICAgICAgIG9ubG9hZEV4cCA9IGF0dHIub25sb2FkIHx8ICcnOwotCi0gICAgICBzY29wZS4kb24o
JyRyb3V0ZUNoYW5nZVN1Y2Nlc3MnLCB1cGRhdGUpOwotICAgICAgdXBkYXRlKCk7Ci0KLQotICAg
ICAgZnVuY3Rpb24gZGVzdHJveUxhc3RTY29wZSgpIHsKLSAgICAgICAgaWYgKGxhc3RTY29wZSkg
ewotICAgICAgICAgIGxhc3RTY29wZS4kZGVzdHJveSgpOwotICAgICAgICAgIGxhc3RTY29wZSA9
IG51bGw7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgZnVuY3Rpb24gY2xlYXJDb250ZW50
KCkgewotICAgICAgICBlbGVtZW50Lmh0bWwoJycpOwotICAgICAgICBkZXN0cm95TGFzdFNjb3Bl
KCk7Ci0gICAgICB9Ci0KLSAgICAgIGZ1bmN0aW9uIHVwZGF0ZSgpIHsKLSAgICAgICAgdmFyIGxv
Y2FscyA9ICRyb3V0ZS5jdXJyZW50ICYmICRyb3V0ZS5jdXJyZW50LmxvY2FscywKLSAgICAgICAg
ICAgIHRlbXBsYXRlID0gbG9jYWxzICYmIGxvY2Fscy4kdGVtcGxhdGU7Ci0KLSAgICAgICAgaWYg
KHRlbXBsYXRlKSB7Ci0gICAgICAgICAgZWxlbWVudC5odG1sKHRlbXBsYXRlKTsKLSAgICAgICAg
ICBkZXN0cm95TGFzdFNjb3BlKCk7Ci0KLSAgICAgICAgICB2YXIgbGluayA9ICRjb21waWxlKGVs
ZW1lbnQuY29udGVudHMoKSksCi0gICAgICAgICAgICAgIGN1cnJlbnQgPSAkcm91dGUuY3VycmVu
dCwKLSAgICAgICAgICAgICAgY29udHJvbGxlcjsKLQotICAgICAgICAgIGxhc3RTY29wZSA9IGN1
cnJlbnQuc2NvcGUgPSBzY29wZS4kbmV3KCk7Ci0gICAgICAgICAgaWYgKGN1cnJlbnQuY29udHJv
bGxlcikgewotICAgICAgICAgICAgbG9jYWxzLiRzY29wZSA9IGxhc3RTY29wZTsKLSAgICAgICAg
ICAgIGNvbnRyb2xsZXIgPSAkY29udHJvbGxlcihjdXJyZW50LmNvbnRyb2xsZXIsIGxvY2Fscyk7
Ci0gICAgICAgICAgICBlbGVtZW50LmNoaWxkcmVuKCkuZGF0YSgnJG5nQ29udHJvbGxlckNvbnRy
b2xsZXInLCBjb250cm9sbGVyKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBsaW5rKGxhc3RT
Y29wZSk7Ci0gICAgICAgICAgbGFzdFNjb3BlLiRlbWl0KCckdmlld0NvbnRlbnRMb2FkZWQnKTsK
LSAgICAgICAgICBsYXN0U2NvcGUuJGV2YWwob25sb2FkRXhwKTsKLQotICAgICAgICAgIC8vICRh
bmNob3JTY3JvbGwgbWlnaHQgbGlzdGVuIG9uIGV2ZW50Li4uCi0gICAgICAgICAgJGFuY2hvclNj
cm9sbCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGNsZWFyQ29udGVudCgpOwotICAg
ICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9OwotfV07Ci0KLS8qKgotICogQG5nZG9jIGRpcmVj
dGl2ZQotICogQG5hbWUgbmcuZGlyZWN0aXZlOnNjcmlwdAotICoKLSAqIEBkZXNjcmlwdGlvbgot
ICogTG9hZCBjb250ZW50IG9mIGEgc2NyaXB0IHRhZywgd2l0aCB0eXBlIGB0ZXh0L25nLXRlbXBs
YXRlYCwgaW50byBgJHRlbXBsYXRlQ2FjaGVgLCBzbyB0aGF0IHRoZQotICogdGVtcGxhdGUgY2Fu
IGJlIHVzZWQgYnkgYG5nSW5jbHVkZWAsIGBuZ1ZpZXdgIG9yIGRpcmVjdGl2ZSB0ZW1wbGF0ZXMu
Ci0gKgotICogQHJlc3RyaWN0IEUKLSAqIEBwYXJhbSB7J3RleHQvbmctdGVtcGxhdGUnfSB0eXBl
IG11c3QgYmUgc2V0IHRvIGAndGV4dC9uZy10ZW1wbGF0ZSdgCi0gKgotICogQGV4YW1wbGUKLSAg
PGRvYzpleGFtcGxlPgotICAgIDxkb2M6c291cmNlPgotICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0
L25nLXRlbXBsYXRlIiBpZD0iL3RwbC5odG1sIj4KLSAgICAgICAgQ29udGVudCBvZiB0aGUgdGVt
cGxhdGUuCi0gICAgICA8L3NjcmlwdD4KLQotICAgICAgPGEgbmctY2xpY2s9ImN1cnJlbnRUcGw9
Jy90cGwuaHRtbCciIGlkPSJ0cGwtbGluayI+TG9hZCBpbmxpbmVkIHRlbXBsYXRlPC9hPgotICAg
ICAgPGRpdiBpZD0idHBsLWNvbnRlbnQiIG5nLWluY2x1ZGUgc3JjPSJjdXJyZW50VHBsIj48L2Rp
dj4KLSAgICA8L2RvYzpzb3VyY2U+Ci0gICAgPGRvYzpzY2VuYXJpbz4KLSAgICAgIGl0KCdzaG91
bGQgbG9hZCB0ZW1wbGF0ZSBkZWZpbmVkIGluc2lkZSBzY3JpcHQgdGFnJywgZnVuY3Rpb24oKSB7
Ci0gICAgICAgIGVsZW1lbnQoJyN0cGwtbGluaycpLmNsaWNrKCk7Ci0gICAgICAgIGV4cGVjdChl
bGVtZW50KCcjdHBsLWNvbnRlbnQnKS50ZXh0KCkpLnRvTWF0Y2goL0NvbnRlbnQgb2YgdGhlIHRl
bXBsYXRlLyk7Ci0gICAgICB9KTsKLSAgICA8L2RvYzpzY2VuYXJpbz4KLSAgPC9kb2M6ZXhhbXBs
ZT4KLSAqLwotdmFyIHNjcmlwdERpcmVjdGl2ZSA9IFsnJHRlbXBsYXRlQ2FjaGUnLCBmdW5jdGlv
bigkdGVtcGxhdGVDYWNoZSkgewotICByZXR1cm4gewotICAgIHJlc3RyaWN0OiAnRScsCi0gICAg
dGVybWluYWw6IHRydWUsCi0gICAgY29tcGlsZTogZnVuY3Rpb24oZWxlbWVudCwgYXR0cikgewot
ICAgICAgaWYgKGF0dHIudHlwZSA9PSAndGV4dC9uZy10ZW1wbGF0ZScpIHsKLSAgICAgICAgdmFy
IHRlbXBsYXRlVXJsID0gYXR0ci5pZCwKLSAgICAgICAgICAgIC8vIElFIGlzIG5vdCBjb25zaXN0
ZW50LCBpbiBzY3JpcHRzIHdlIGhhdmUgdG8gcmVhZCAudGV4dCBidXQgaW4gb3RoZXIgbm9kZXMg
d2UgaGF2ZSB0byByZWFkIC50ZXh0Q29udGVudAotICAgICAgICAgICAgdGV4dCA9IGVsZW1lbnRb
MF0udGV4dDsKLQotICAgICAgICAkdGVtcGxhdGVDYWNoZS5wdXQodGVtcGxhdGVVcmwsIHRleHQp
OwotICAgICAgfQotICAgIH0KLSAgfTsKLX1dOwotCi0vKioKLSAqIEBuZ2RvYyBkaXJlY3RpdmUK
LSAqIEBuYW1lIG5nLmRpcmVjdGl2ZTpzZWxlY3QKLSAqIEByZXN0cmljdCBFCi0gKgotICogQGRl
c2NyaXB0aW9uCi0gKiBIVE1MIGBTRUxFQ1RgIGVsZW1lbnQgd2l0aCBhbmd1bGFyIGRhdGEtYmlu
ZGluZy4KLSAqCi0gKiAjIGBuZ09wdGlvbnNgCi0gKgotICogT3B0aW9uYWxseSBgbmdPcHRpb25z
YCBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gZHluYW1pY2FsbHkgZ2VuZXJhdGUgYSBsaXN0IG9m
IGA8b3B0aW9uPmAKLSAqIGVsZW1lbnRzIGZvciBhIGA8c2VsZWN0PmAgZWxlbWVudCB1c2luZyBh
biBhcnJheSBvciBhbiBvYmplY3Qgb2J0YWluZWQgYnkgZXZhbHVhdGluZyB0aGUKLSAqIGBuZ09w
dGlvbnNgIGV4cHJlc3Npb24uCi0gKsudy50KLSAqIFdoZW4gYW4gaXRlbSBpbiB0aGUgc2VsZWN0
IG1lbnUgaXMgc2VsZWN0LCB0aGUgdmFsdWUgb2YgYXJyYXkgZWxlbWVudCBvciBvYmplY3QgcHJv
cGVydHkKLSAqIHJlcHJlc2VudGVkIGJ5IHRoZSBzZWxlY3RlZCBvcHRpb24gd2lsbCBiZSBib3Vu
ZCB0byB0aGUgbW9kZWwgaWRlbnRpZmllZCBieSB0aGUgYG5nTW9kZWxgCi0gKiBkaXJlY3RpdmUg
b2YgdGhlIHBhcmVudCBzZWxlY3QgZWxlbWVudC4KLSAqCi0gKiBPcHRpb25hbGx5LCBhIHNpbmds
ZSBoYXJkLWNvZGVkIGA8b3B0aW9uPmAgZWxlbWVudCwgd2l0aCB0aGUgdmFsdWUgc2V0IHRvIGFu
IGVtcHR5IHN0cmluZywgY2FuCi0gKiBiZSBuZXN0ZWQgaW50byB0aGUgYDxzZWxlY3Q+YCBlbGVt
ZW50LiBUaGlzIGVsZW1lbnQgd2lsbCB0aGVuIHJlcHJlc2VudCBgbnVsbGAgb3IgIm5vdCBzZWxl
Y3RlZCIKLSAqIG9wdGlvbi4gU2VlIGV4YW1wbGUgYmVsb3cgZm9yIGRlbW9uc3RyYXRpb24uCi0g
KgotICogTm90ZTogYG5nT3B0aW9uc2AgcHJvdmlkZXMgaXRlcmF0b3IgZmFjaWxpdHkgZm9yIGA8
b3B0aW9uPmAgZWxlbWVudCB3aGljaCBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkCi0gKiBvZiB7QGxp
bmsgbmcuZGlyZWN0aXZlOm5nUmVwZWF0IG5nUmVwZWF0fSB3aGVuIHlvdSB3YW50IHRoZQotICog
YHNlbGVjdGAgbW9kZWwgdG8gYmUgYm91bmQgdG8gYSBub24tc3RyaW5nIHZhbHVlLiBUaGlzIGlz
IGJlY2F1c2UgYW4gb3B0aW9uIGVsZW1lbnQgY2FuIGN1cnJlbnRseQotICogYmUgYm91bmQgdG8g
c3RyaW5nIHZhbHVlcyBvbmx5LgotICoKLSAqIEBwYXJhbSB7c3RyaW5nfSBuZ01vZGVsIEFzc2ln
bmFibGUgYW5ndWxhciBleHByZXNzaW9uIHRvIGRhdGEtYmluZCB0by4KLSAqIEBwYXJhbSB7c3Ry
aW5nPX0gbmFtZSBQcm9wZXJ0eSBuYW1lIG9mIHRoZSBmb3JtIHVuZGVyIHdoaWNoIHRoZSBjb250
cm9sIGlzIHB1Ymxpc2hlZC4KLSAqIEBwYXJhbSB7c3RyaW5nPX0gcmVxdWlyZWQgVGhlIGNvbnRy
b2wgaXMgY29uc2lkZXJlZCB2YWxpZCBvbmx5IGlmIHZhbHVlIGlzIGVudGVyZWQuCi0gKiBAcGFy
YW0ge3N0cmluZz19IG5nUmVxdWlyZWQgQWRkcyBgcmVxdWlyZWRgIGF0dHJpYnV0ZSBhbmQgYHJl
cXVpcmVkYCB2YWxpZGF0aW9uIGNvbnN0cmFpbnQgdG8KLSAqICAgIHRoZSBlbGVtZW50IHdoZW4g
dGhlIG5nUmVxdWlyZWQgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gdHJ1ZS4gVXNlIGBuZ1JlcXVp
cmVkYCBpbnN0ZWFkIG9mCi0gKiAgICBgcmVxdWlyZWRgIHdoZW4geW91IHdhbnQgdG8gZGF0YS1i
aW5kIHRvIHRoZSBgcmVxdWlyZWRgIGF0dHJpYnV0ZS4KLSAqIEBwYXJhbSB7Y29tcHJlaGVuc2lv
bl9leHByZXNzaW9uPX0gbmdPcHRpb25zIGluIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1zOgot
ICoKLSAqICAgKiBmb3IgYXJyYXkgZGF0YSBzb3VyY2VzOgotICogICAgICogYGxhYmVsYCAqKmBm
b3JgKiogYHZhbHVlYCAqKmBpbmAqKiBgYXJyYXlgCi0gKiAgICAgKiBgc2VsZWN0YCAqKmBhc2Aq
KiBgbGFiZWxgICoqYGZvcmAqKiBgdmFsdWVgICoqYGluYCoqIGBhcnJheWAKLSAqICAgICAqIGBs
YWJlbGAgICoqYGdyb3VwIGJ5YCoqIGBncm91cGAgKipgZm9yYCoqIGB2YWx1ZWAgKipgaW5gKiog
YGFycmF5YAotICogICAgICogYHNlbGVjdGAgKipgYXNgKiogYGxhYmVsYCAqKmBncm91cCBieWAq
KiBgZ3JvdXBgICoqYGZvcmAqKiBgdmFsdWVgICoqYGluYCoqIGBhcnJheWAKLSAqICAgKiBmb3Ig
b2JqZWN0IGRhdGEgc291cmNlczoKLSAqICAgICAqIGBsYWJlbGAgKipgZm9yIChgKipga2V5YCAq
KmAsYCoqIGB2YWx1ZWAqKmApIGluYCoqIGBvYmplY3RgCi0gKiAgICAgKiBgc2VsZWN0YCAqKmBh
c2AqKiBgbGFiZWxgICoqYGZvciAoYCoqYGtleWAgKipgLGAqKiBgdmFsdWVgKipgKSBpbmAqKiBg
b2JqZWN0YAotICogICAgICogYGxhYmVsYCAqKmBncm91cCBieWAqKiBgZ3JvdXBgICoqYGZvciAo
YCoqYGtleWAqKmAsYCoqIGB2YWx1ZWAqKmApIGluYCoqIGBvYmplY3RgCi0gKiAgICAgKiBgc2Vs
ZWN0YCAqKmBhc2AqKiBgbGFiZWxgICoqYGdyb3VwIGJ5YCoqIGBncm91cGAKLSAqICAgICAgICAg
KipgZm9yYCBgKGAqKmBrZXlgKipgLGAqKiBgdmFsdWVgKipgKSBpbmAqKiBgb2JqZWN0YAotICoK
LSAqIFdoZXJlOgotICoKLSAqICAgKiBgYXJyYXlgIC8gYG9iamVjdGA6IGFuIGV4cHJlc3Npb24g
d2hpY2ggZXZhbHVhdGVzIHRvIGFuIGFycmF5IC8gb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci4KLSAq
ICAgKiBgdmFsdWVgOiBsb2NhbCB2YXJpYWJsZSB3aGljaCB3aWxsIHJlZmVyIHRvIGVhY2ggaXRl
bSBpbiB0aGUgYGFycmF5YCBvciBlYWNoIHByb3BlcnR5IHZhbHVlCi0gKiAgICAgIG9mIGBvYmpl
Y3RgIGR1cmluZyBpdGVyYXRpb24uCi0gKiAgICogYGtleWA6IGxvY2FsIHZhcmlhYmxlIHdoaWNo
IHdpbGwgcmVmZXIgdG8gYSBwcm9wZXJ0eSBuYW1lIGluIGBvYmplY3RgIGR1cmluZyBpdGVyYXRp
b24uCi0gKiAgICogYGxhYmVsYDogVGhlIHJlc3VsdCBvZiB0aGlzIGV4cHJlc3Npb24gd2lsbCBi
ZSB0aGUgbGFiZWwgZm9yIGA8b3B0aW9uPmAgZWxlbWVudC4gVGhlCi0gKiAgICAgYGV4cHJlc3Np
b25gIHdpbGwgbW9zdCBsaWtlbHkgcmVmZXIgdG8gdGhlIGB2YWx1ZWAgdmFyaWFibGUgKGUuZy4g
YHZhbHVlLnByb3BlcnR5TmFtZWApLgotICogICAqIGBzZWxlY3RgOiBUaGUgcmVzdWx0IG9mIHRo
aXMgZXhwcmVzc2lvbiB3aWxsIGJlIGJvdW5kIHRvIHRoZSBtb2RlbCBvZiB0aGUgcGFyZW50IGA8
c2VsZWN0PmAKLSAqICAgICAgZWxlbWVudC4gSWYgbm90IHNwZWNpZmllZCwgYHNlbGVjdGAgZXhw
cmVzc2lvbiB3aWxsIGRlZmF1bHQgdG8gYHZhbHVlYC4KLSAqICAgKiBgZ3JvdXBgOiBUaGUgcmVz
dWx0IG9mIHRoaXMgZXhwcmVzc2lvbiB3aWxsIGJlIHVzZWQgdG8gZ3JvdXAgb3B0aW9ucyB1c2lu
ZyB0aGUgYDxvcHRncm91cD5gCi0gKiAgICAgIERPTSBlbGVtZW50LgotICoKLSAqIEBleGFtcGxl
Ci0gICAgPGRvYzpleGFtcGxlPgotICAgICAgPGRvYzpzb3VyY2U+Ci0gICAgICAgIDxzY3JpcHQ+
Ci0gICAgICAgIGZ1bmN0aW9uIE15Q250cmwoJHNjb3BlKSB7Ci0gICAgICAgICAgJHNjb3BlLmNv
bG9ycyA9IFsKLSAgICAgICAgICAgIHtuYW1lOidibGFjaycsIHNoYWRlOidkYXJrJ30sCi0gICAg
ICAgICAgICB7bmFtZTond2hpdGUnLCBzaGFkZTonbGlnaHQnfSwKLSAgICAgICAgICAgIHtuYW1l
OidyZWQnLCBzaGFkZTonZGFyayd9LAotICAgICAgICAgICAge25hbWU6J2JsdWUnLCBzaGFkZTon
ZGFyayd9LAotICAgICAgICAgICAge25hbWU6J3llbGxvdycsIHNoYWRlOidsaWdodCd9Ci0gICAg
ICAgICAgXTsKLSAgICAgICAgICAkc2NvcGUuY29sb3IgPSAkc2NvcGUuY29sb3JzWzJdOyAvLyBy
ZWQKLSAgICAgICAgfQotICAgICAgICA8L3NjcmlwdD4KLSAgICAgICAgPGRpdiBuZy1jb250cm9s
bGVyPSJNeUNudHJsIj4KLSAgICAgICAgICA8dWw+Ci0gICAgICAgICAgICA8bGkgbmctcmVwZWF0
PSJjb2xvciBpbiBjb2xvcnMiPgotICAgICAgICAgICAgICBOYW1lOiA8aW5wdXQgbmctbW9kZWw9
ImNvbG9yLm5hbWUiPgotICAgICAgICAgICAgICBbPGEgaHJlZiBuZy1jbGljaz0iY29sb3JzLnNw
bGljZSgkaW5kZXgsIDEpIj5YPC9hPl0KLSAgICAgICAgICAgIDwvbGk+Ci0gICAgICAgICAgICA8
bGk+Ci0gICAgICAgICAgICAgIFs8YSBocmVmIG5nLWNsaWNrPSJjb2xvcnMucHVzaCh7fSkiPmFk
ZDwvYT5dCi0gICAgICAgICAgICA8L2xpPgotICAgICAgICAgIDwvdWw+Ci0gICAgICAgICAgPGhy
Lz4KLSAgICAgICAgICBDb2xvciAobnVsbCBub3QgYWxsb3dlZCk6Ci0gICAgICAgICAgPHNlbGVj
dCBuZy1tb2RlbD0iY29sb3IiIG5nLW9wdGlvbnM9ImMubmFtZSBmb3IgYyBpbiBjb2xvcnMiPjwv
c2VsZWN0Pjxicj4KLQotICAgICAgICAgIENvbG9yIChudWxsIGFsbG93ZWQpOgotICAgICAgICAg
IDxzcGFuICBjbGFzcz0ibnVsbGFibGUiPgotICAgICAgICAgICAgPHNlbGVjdCBuZy1tb2RlbD0i
Y29sb3IiIG5nLW9wdGlvbnM9ImMubmFtZSBmb3IgYyBpbiBjb2xvcnMiPgotICAgICAgICAgICAg
ICA8b3B0aW9uIHZhbHVlPSIiPi0tIGNob3NlIGNvbG9yIC0tPC9vcHRpb24+Ci0gICAgICAgICAg
ICA8L3NlbGVjdD4KLSAgICAgICAgICA8L3NwYW4+PGJyLz4KLQotICAgICAgICAgIENvbG9yIGdy
b3VwZWQgYnkgc2hhZGU6Ci0gICAgICAgICAgPHNlbGVjdCBuZy1tb2RlbD0iY29sb3IiIG5nLW9w
dGlvbnM9ImMubmFtZSBncm91cCBieSBjLnNoYWRlIGZvciBjIGluIGNvbG9ycyI+Ci0gICAgICAg
ICAgPC9zZWxlY3Q+PGJyLz4KLQotCi0gICAgICAgICAgU2VsZWN0IDxhIGhyZWYgbmctY2xpY2s9
ImNvbG9yPXtuYW1lOidub3QgaW4gbGlzdCd9Ij5ib2d1czwvYT4uPGJyPgotICAgICAgICAgIDxo
ci8+Ci0gICAgICAgICAgQ3VycmVudGx5IHNlbGVjdGVkOiB7eyB7c2VsZWN0ZWRfY29sb3I6Y29s
b3J9ICB9fQotICAgICAgICAgIDxkaXYgc3R5bGU9ImJvcmRlcjpzb2xpZCAxcHggYmxhY2s7IGhl
aWdodDoyMHB4IgotICAgICAgICAgICAgICAgbmctc3R5bGU9InsnYmFja2dyb3VuZC1jb2xvcic6
Y29sb3IubmFtZX0iPgotICAgICAgICAgIDwvZGl2PgotICAgICAgICA8L2Rpdj4KLSAgICAgIDwv
ZG9jOnNvdXJjZT4KLSAgICAgIDxkb2M6c2NlbmFyaW8+Ci0gICAgICAgICBpdCgnc2hvdWxkIGNo
ZWNrIG5nLW9wdGlvbnMnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgZXhwZWN0KGJpbmRpbmco
J3tzZWxlY3RlZF9jb2xvcjpjb2xvcn0nKSkudG9NYXRjaCgncmVkJyk7Ci0gICAgICAgICAgIHNl
bGVjdCgnY29sb3InKS5vcHRpb24oJzAnKTsKLSAgICAgICAgICAgZXhwZWN0KGJpbmRpbmcoJ3tz
ZWxlY3RlZF9jb2xvcjpjb2xvcn0nKSkudG9NYXRjaCgnYmxhY2snKTsKLSAgICAgICAgICAgdXNp
bmcoJy5udWxsYWJsZScpLnNlbGVjdCgnY29sb3InKS5vcHRpb24oJycpOwotICAgICAgICAgICBl
eHBlY3QoYmluZGluZygne3NlbGVjdGVkX2NvbG9yOmNvbG9yfScpKS50b01hdGNoKCdudWxsJyk7
Ci0gICAgICAgICB9KTsKLSAgICAgIDwvZG9jOnNjZW5hcmlvPgotICAgIDwvZG9jOmV4YW1wbGU+
Ci0gKi8KLQotdmFyIG5nT3B0aW9uc0RpcmVjdGl2ZSA9IHZhbHVlRm4oeyB0ZXJtaW5hbDogdHJ1
ZSB9KTsKLXZhciBzZWxlY3REaXJlY3RpdmUgPSBbJyRjb21waWxlJywgJyRwYXJzZScsIGZ1bmN0
aW9uKCRjb21waWxlLCAgICRwYXJzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgIC8vMDAw
MDExMTExMDAwMDAwMDAwMDAyMjIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzMzMwMDAwMDAwMDAw
MDAwMDQ0NDQ0NDQ0NDQ0NDQ0NDQ0MDAwMDAwMDAwNTU1NTU1NTU1NTU1NTU1NTUwMDAwMDAwNjY2
NjY2NjY2NjY2NjY2NjYwMDAwMDAwMDAwMDAwMDA3Nzc3MAotICB2YXIgTkdfT1BUSU9OU19SRUdF
WFAgPSAvXlxzKiguKj8pKD86XHMrYXNccysoLio/KSk/KD86XHMrZ3JvdXBccytieVxzKyguKikp
P1xzK2ZvclxzKyg/OihbXCRcd11bXCRcd1xkXSopfCg/OlwoXHMqKFtcJFx3XVtcJFx3XGRdKilc
cyosXHMqKFtcJFx3XVtcJFx3XGRdKilccypcKSkpXHMraW5ccysoLiopJC8sCi0gICAgICBudWxs
TW9kZWxDdHJsID0geyRzZXRWaWV3VmFsdWU6IG5vb3B9OwotCi0gIHJldHVybiB7Ci0gICAgcmVz
dHJpY3Q6ICdFJywKLSAgICByZXF1aXJlOiBbJ3NlbGVjdCcsICc/bmdNb2RlbCddLAotICAgIGNv
bnRyb2xsZXI6IFsnJGVsZW1lbnQnLCAnJHNjb3BlJywgJyRhdHRycycsIGZ1bmN0aW9uKCRlbGVt
ZW50LCAkc2NvcGUsICRhdHRycykgewotICAgICAgdmFyIHNlbGYgPSB0aGlzLAotICAgICAgICAg
IG9wdGlvbnNNYXAgPSB7fSwKLSAgICAgICAgICBuZ01vZGVsQ3RybCA9IG51bGxNb2RlbEN0cmws
Ci0gICAgICAgICAgbnVsbE9wdGlvbiwKLSAgICAgICAgICB1bmtub3duT3B0aW9uOwotCi0KLSAg
ICAgIHNlbGYuZGF0YWJvdW5kID0gJGF0dHJzLm5nTW9kZWw7Ci0KLQotICAgICAgc2VsZi5pbml0
ID0gZnVuY3Rpb24obmdNb2RlbEN0cmxfLCBudWxsT3B0aW9uXywgdW5rbm93bk9wdGlvbl8pIHsK
LSAgICAgICAgbmdNb2RlbEN0cmwgPSBuZ01vZGVsQ3RybF87Ci0gICAgICAgIG51bGxPcHRpb24g
PSBudWxsT3B0aW9uXzsKLSAgICAgICAgdW5rbm93bk9wdGlvbiA9IHVua25vd25PcHRpb25fOwot
ICAgICAgfQotCi0KLSAgICAgIHNlbGYuYWRkT3B0aW9uID0gZnVuY3Rpb24odmFsdWUpIHsKLSAg
ICAgICAgb3B0aW9uc01hcFt2YWx1ZV0gPSB0cnVlOwotCi0gICAgICAgIGlmIChuZ01vZGVsQ3Ry
bC4kdmlld1ZhbHVlID09IHZhbHVlKSB7Ci0gICAgICAgICAgJGVsZW1lbnQudmFsKHZhbHVlKTsK
LSAgICAgICAgICBpZiAodW5rbm93bk9wdGlvbi5wYXJlbnQoKSkgdW5rbm93bk9wdGlvbi5yZW1v
dmUoKTsKLSAgICAgICAgfQotICAgICAgfTsKLQotCi0gICAgICBzZWxmLnJlbW92ZU9wdGlvbiA9
IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc09wdGlvbih2YWx1ZSkpIHsK
LSAgICAgICAgICBkZWxldGUgb3B0aW9uc01hcFt2YWx1ZV07Ci0gICAgICAgICAgaWYgKG5nTW9k
ZWxDdHJsLiR2aWV3VmFsdWUgPT0gdmFsdWUpIHsKLSAgICAgICAgICAgIHRoaXMucmVuZGVyVW5r
bm93bk9wdGlvbih2YWx1ZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9OwotCi0K
LSAgICAgIHNlbGYucmVuZGVyVW5rbm93bk9wdGlvbiA9IGZ1bmN0aW9uKHZhbCkgewotICAgICAg
ICB2YXIgdW5rbm93blZhbCA9ICc/ICcgKyBoYXNoS2V5KHZhbCkgKyAnID8nOwotICAgICAgICB1
bmtub3duT3B0aW9uLnZhbCh1bmtub3duVmFsKTsKLSAgICAgICAgJGVsZW1lbnQucHJlcGVuZCh1
bmtub3duT3B0aW9uKTsKLSAgICAgICAgJGVsZW1lbnQudmFsKHVua25vd25WYWwpOwotICAgICAg
ICB1bmtub3duT3B0aW9uLnByb3AoJ3NlbGVjdGVkJywgdHJ1ZSk7IC8vIG5lZWRlZCBmb3IgSUUK
LSAgICAgIH0KLQotCi0gICAgICBzZWxmLmhhc09wdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0g
ICAgICAgIHJldHVybiBvcHRpb25zTWFwLmhhc093blByb3BlcnR5KHZhbHVlKTsKLSAgICAgIH0K
LQotICAgICAgJHNjb3BlLiRvbignJGRlc3Ryb3knLCBmdW5jdGlvbigpIHsKLSAgICAgICAgLy8g
ZGlzYWJsZSB1bmtub3duIG9wdGlvbiBzbyB0aGF0IHdlIGRvbid0IGRvIHdvcmsgd2hlbiB0aGUg
d2hvbGUgc2VsZWN0IGlzIGJlaW5nIGRlc3Ryb3llZAotICAgICAgICBzZWxmLnJlbmRlclVua25v
d25PcHRpb24gPSBub29wOwotICAgICAgfSk7Ci0gICAgfV0sCi0KLSAgICBsaW5rOiBmdW5jdGlv
bihzY29wZSwgZWxlbWVudCwgYXR0ciwgY3RybHMpIHsKLSAgICAgIC8vIGlmIG5nTW9kZWwgaXMg
bm90IGRlZmluZWQsIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcKLSAgICAgIGlmICghY3Ry
bHNbMV0pIHJldHVybjsKLQotICAgICAgdmFyIHNlbGVjdEN0cmwgPSBjdHJsc1swXSwKLSAgICAg
ICAgICBuZ01vZGVsQ3RybCA9IGN0cmxzWzFdLAotICAgICAgICAgIG11bHRpcGxlID0gYXR0ci5t
dWx0aXBsZSwKLSAgICAgICAgICBvcHRpb25zRXhwID0gYXR0ci5uZ09wdGlvbnMsCi0gICAgICAg
ICAgbnVsbE9wdGlvbiA9IGZhbHNlLCAvLyBpZiBmYWxzZSwgdXNlciB3aWxsIG5vdCBiZSBhYmxl
IHRvIHNlbGVjdCBpdCAodXNlZCBieSBuZ09wdGlvbnMpCi0gICAgICAgICAgZW1wdHlPcHRpb24s
Ci0gICAgICAgICAgLy8gd2UgY2FuJ3QganVzdCBqcUxpdGUoJzxvcHRpb24+Jykgc2luY2UganFM
aXRlIGlzIG5vdCBzbWFydCBlbm91Z2gKLSAgICAgICAgICAvLyB0byBjcmVhdGUgaXQgaW4gPHNl
bGVjdD4gYW5kIElFIGJhcmZzIG90aGVyd2lzZS4KLSAgICAgICAgICBvcHRpb25UZW1wbGF0ZSA9
IGpxTGl0ZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKSksCi0gICAgICAgICAgb3B0
R3JvdXBUZW1wbGF0ZSA9anFMaXRlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGdyb3VwJykp
LAotICAgICAgICAgIHVua25vd25PcHRpb24gPSBvcHRpb25UZW1wbGF0ZS5jbG9uZSgpOwotCi0g
ICAgICAvLyBmaW5kICJudWxsIiBvcHRpb24KLSAgICAgIGZvcih2YXIgaSA9IDAsIGNoaWxkcmVu
ID0gZWxlbWVudC5jaGlsZHJlbigpLCBpaSA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGlpOyBpKysp
IHsKLSAgICAgICAgaWYgKGNoaWxkcmVuW2ldLnZhbHVlID09ICcnKSB7Ci0gICAgICAgICAgZW1w
dHlPcHRpb24gPSBudWxsT3B0aW9uID0gY2hpbGRyZW4uZXEoaSk7Ci0gICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgc2VsZWN0Q3RybC5pbml0KG5nTW9kZWxDdHJs
LCBudWxsT3B0aW9uLCB1bmtub3duT3B0aW9uKTsKLQotICAgICAgLy8gcmVxdWlyZWQgdmFsaWRh
dG9yCi0gICAgICBpZiAobXVsdGlwbGUgJiYgKGF0dHIucmVxdWlyZWQgfHwgYXR0ci5uZ1JlcXVp
cmVkKSkgewotICAgICAgICB2YXIgcmVxdWlyZWRWYWxpZGF0b3IgPSBmdW5jdGlvbih2YWx1ZSkg
ewotICAgICAgICAgIG5nTW9kZWxDdHJsLiRzZXRWYWxpZGl0eSgncmVxdWlyZWQnLCAhYXR0ci5y
ZXF1aXJlZCB8fCAodmFsdWUgJiYgdmFsdWUubGVuZ3RoKSk7Ci0gICAgICAgICAgcmV0dXJuIHZh
bHVlOwotICAgICAgICB9OwotCi0gICAgICAgIG5nTW9kZWxDdHJsLiRwYXJzZXJzLnB1c2gocmVx
dWlyZWRWYWxpZGF0b3IpOwotICAgICAgICBuZ01vZGVsQ3RybC4kZm9ybWF0dGVycy51bnNoaWZ0
KHJlcXVpcmVkVmFsaWRhdG9yKTsKLQotICAgICAgICBhdHRyLiRvYnNlcnZlKCdyZXF1aXJlZCcs
IGZ1bmN0aW9uKCkgewotICAgICAgICAgIHJlcXVpcmVkVmFsaWRhdG9yKG5nTW9kZWxDdHJsLiR2
aWV3VmFsdWUpOwotICAgICAgICB9KTsKLSAgICAgIH0KLQotICAgICAgaWYgKG9wdGlvbnNFeHAp
IE9wdGlvbnMoc2NvcGUsIGVsZW1lbnQsIG5nTW9kZWxDdHJsKTsKLSAgICAgIGVsc2UgaWYgKG11
bHRpcGxlKSBNdWx0aXBsZShzY29wZSwgZWxlbWVudCwgbmdNb2RlbEN0cmwpOwotICAgICAgZWxz
ZSBTaW5nbGUoc2NvcGUsIGVsZW1lbnQsIG5nTW9kZWxDdHJsLCBzZWxlY3RDdHJsKTsKLQotCi0g
ICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLQotCi0gICAgICBmdW5jdGlvbiBT
aW5nbGUoc2NvcGUsIHNlbGVjdEVsZW1lbnQsIG5nTW9kZWxDdHJsLCBzZWxlY3RDdHJsKSB7Ci0g
ICAgICAgIG5nTW9kZWxDdHJsLiRyZW5kZXIgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICB2YXIg
dmlld1ZhbHVlID0gbmdNb2RlbEN0cmwuJHZpZXdWYWx1ZTsKLQotICAgICAgICAgIGlmIChzZWxl
Y3RDdHJsLmhhc09wdGlvbih2aWV3VmFsdWUpKSB7Ci0gICAgICAgICAgICBpZiAodW5rbm93bk9w
dGlvbi5wYXJlbnQoKSkgdW5rbm93bk9wdGlvbi5yZW1vdmUoKTsKLSAgICAgICAgICAgIHNlbGVj
dEVsZW1lbnQudmFsKHZpZXdWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAodmlld1ZhbHVlID09PSAn
JykgZW1wdHlPcHRpb24ucHJvcCgnc2VsZWN0ZWQnLCB0cnVlKTsgLy8gdG8gbWFrZSBJRTkgaGFw
cHkKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZpZXdW
YWx1ZSkgJiYgZW1wdHlPcHRpb24pIHsKLSAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC52YWwo
JycpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgc2VsZWN0Q3RybC5yZW5k
ZXJVbmtub3duT3B0aW9uKHZpZXdWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQot
ICAgICAgICB9OwotCi0gICAgICAgIHNlbGVjdEVsZW1lbnQuYmluZCgnY2hhbmdlJywgZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
aWYgKHVua25vd25PcHRpb24ucGFyZW50KCkpIHVua25vd25PcHRpb24ucmVtb3ZlKCk7Ci0gICAg
ICAgICAgICBuZ01vZGVsQ3RybC4kc2V0Vmlld1ZhbHVlKHNlbGVjdEVsZW1lbnQudmFsKCkpOwot
ICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICAgIH0KLQotICAgICAgZnVuY3Rpb24gTXVs
dGlwbGUoc2NvcGUsIHNlbGVjdEVsZW1lbnQsIGN0cmwpIHsKLSAgICAgICAgdmFyIGxhc3RWaWV3
OwotICAgICAgICBjdHJsLiRyZW5kZXIgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICB2YXIgaXRl
bXMgPSBuZXcgSGFzaE1hcChjdHJsLiR2aWV3VmFsdWUpOwotICAgICAgICAgIGZvckVhY2goc2Vs
ZWN0RWxlbWVudC5maW5kKCdvcHRpb24nKSwgZnVuY3Rpb24ob3B0aW9uKSB7Ci0gICAgICAgICAg
ICBvcHRpb24uc2VsZWN0ZWQgPSBpc0RlZmluZWQoaXRlbXMuZ2V0KG9wdGlvbi52YWx1ZSkpOwot
ICAgICAgICAgIH0pOwotICAgICAgICB9OwotCi0gICAgICAgIC8vIHdlIGhhdmUgdG8gZG8gaXQg
b24gZWFjaCB3YXRjaCBzaW5jZSBuZ01vZGVsIHdhdGNoZXMgcmVmZXJlbmNlLCBidXQKLSAgICAg
ICAgLy8gd2UgbmVlZCB0byB3b3JrIG9mIGFuIGFycmF5LCBzbyB3ZSBuZWVkIHRvIHNlZSBpZiBh
bnl0aGluZyB3YXMgaW5zZXJ0ZWQvcmVtb3ZlZAotICAgICAgICBzY29wZS4kd2F0Y2goZnVuY3Rp
b24gc2VsZWN0TXVsdGlwbGVXYXRjaCgpIHsKLSAgICAgICAgICBpZiAoIWVxdWFscyhsYXN0Vmll
dywgY3RybC4kdmlld1ZhbHVlKSkgewotICAgICAgICAgICAgbGFzdFZpZXcgPSBjb3B5KGN0cmwu
JHZpZXdWYWx1ZSk7Ci0gICAgICAgICAgICBjdHJsLiRyZW5kZXIoKTsKLSAgICAgICAgICB9Ci0g
ICAgICAgIH0pOwotCi0gICAgICAgIHNlbGVjdEVsZW1lbnQuYmluZCgnY2hhbmdlJywgZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
dmFyIGFycmF5ID0gW107Ci0gICAgICAgICAgICBmb3JFYWNoKHNlbGVjdEVsZW1lbnQuZmluZCgn
b3B0aW9uJyksIGZ1bmN0aW9uKG9wdGlvbikgewotICAgICAgICAgICAgICBpZiAob3B0aW9uLnNl
bGVjdGVkKSB7Ci0gICAgICAgICAgICAgICAgYXJyYXkucHVzaChvcHRpb24udmFsdWUpOwotICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGN0cmwuJHNldFZpZXdW
YWx1ZShhcnJheSk7Ci0gICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgICAgfQotCi0gICAg
ICBmdW5jdGlvbiBPcHRpb25zKHNjb3BlLCBzZWxlY3RFbGVtZW50LCBjdHJsKSB7Ci0gICAgICAg
IHZhciBtYXRjaDsKLQotICAgICAgICBpZiAoISAobWF0Y2ggPSBvcHRpb25zRXhwLm1hdGNoKE5H
X09QVElPTlNfUkVHRVhQKSkpIHsKLSAgICAgICAgICB0aHJvdyBFcnJvcigKLSAgICAgICAgICAg
ICJFeHBlY3RlZCBuZ09wdGlvbnMgaW4gZm9ybSBvZiAnX3NlbGVjdF8gKGFzIF9sYWJlbF8pPyBm
b3IgKF9rZXlfLCk/X3ZhbHVlXyBpbiBfY29sbGVjdGlvbl8nIiArCi0gICAgICAgICAgICAiIGJ1
dCBnb3QgJyIgKyBvcHRpb25zRXhwICsgIicuIik7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIg
ZGlzcGxheUZuID0gJHBhcnNlKG1hdGNoWzJdIHx8IG1hdGNoWzFdKSwKLSAgICAgICAgICAgIHZh
bHVlTmFtZSA9IG1hdGNoWzRdIHx8IG1hdGNoWzZdLAotICAgICAgICAgICAga2V5TmFtZSA9IG1h
dGNoWzVdLAotICAgICAgICAgICAgZ3JvdXBCeUZuID0gJHBhcnNlKG1hdGNoWzNdIHx8ICcnKSwK
LSAgICAgICAgICAgIHZhbHVlRm4gPSAkcGFyc2UobWF0Y2hbMl0gPyBtYXRjaFsxXSA6IHZhbHVl
TmFtZSksCi0gICAgICAgICAgICB2YWx1ZXNGbiA9ICRwYXJzZShtYXRjaFs3XSksCi0gICAgICAg
ICAgICAvLyBUaGlzIGlzIGFuIGFycmF5IG9mIGFycmF5IG9mIGV4aXN0aW5nIG9wdGlvbiBncm91
cHMgaW4gRE9NLiBXZSB0cnkgdG8gcmV1c2UgdGhlc2UgaWYgcG9zc2libGUKLSAgICAgICAgICAg
IC8vIG9wdGlvbkdyb3Vwc0NhY2hlWzBdIGlzIHRoZSBvcHRpb25zIHdpdGggbm8gb3B0aW9uIGdy
b3VwCi0gICAgICAgICAgICAvLyBvcHRpb25Hcm91cHNDYWNoZVs/XVswXSBpcyB0aGUgcGFyZW50
OiBlaXRoZXIgdGhlIFNFTEVDVCBvciBPUFRHUk9VUCBlbGVtZW50Ci0gICAgICAgICAgICBvcHRp
b25Hcm91cHNDYWNoZSA9IFtbe2VsZW1lbnQ6IHNlbGVjdEVsZW1lbnQsIGxhYmVsOicnfV1dOwot
Ci0gICAgICAgIGlmIChudWxsT3B0aW9uKSB7Ci0gICAgICAgICAgLy8gY29tcGlsZSB0aGUgZWxl
bWVudCBzaW5jZSB0aGVyZSBtaWdodCBiZSBiaW5kaW5ncyBpbiBpdAotICAgICAgICAgICRjb21w
aWxlKG51bGxPcHRpb24pKHNjb3BlKTsKLQotICAgICAgICAgIC8vIHJlbW92ZSB0aGUgY2xhc3Ms
IHdoaWNoIGlzIGFkZGVkIGF1dG9tYXRpY2FsbHkgYmVjYXVzZSB3ZSByZWNvbXBpbGUgdGhlIGVs
ZW1lbnQgYW5kIGl0Ci0gICAgICAgICAgLy8gYmVjb21lcyB0aGUgY29tcGlsYXRpb24gcm9vdAot
ICAgICAgICAgIG51bGxPcHRpb24ucmVtb3ZlQ2xhc3MoJ25nLXNjb3BlJyk7Ci0KLSAgICAgICAg
ICAvLyB3ZSBuZWVkIHRvIHJlbW92ZSBpdCBiZWZvcmUgY2FsbGluZyBzZWxlY3RFbGVtZW50Lmh0
bWwoJycpIGJlY2F1c2Ugb3RoZXJ3aXNlIElFIHdpbGwKLSAgICAgICAgICAvLyByZW1vdmUgdGhl
IGxhYmVsIGZyb20gdGhlIGVsZW1lbnQuIHd0Zj8KLSAgICAgICAgICBudWxsT3B0aW9uLnJlbW92
ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gY2xlYXIgY29udGVudHMsIHdlJ2xsIGFkZCB3
aGF0J3MgbmVlZGVkIGJhc2VkIG9uIHRoZSBtb2RlbAotICAgICAgICBzZWxlY3RFbGVtZW50Lmh0
bWwoJycpOwotCi0gICAgICAgIHNlbGVjdEVsZW1lbnQuYmluZCgnY2hhbmdlJywgZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgdmFy
IG9wdGlvbkdyb3VwLAotICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24gPSB2YWx1ZXNGbihzY29w
ZSkgfHwgW10sCi0gICAgICAgICAgICAgICAgbG9jYWxzID0ge30sCi0gICAgICAgICAgICAgICAg
a2V5LCB2YWx1ZSwgb3B0aW9uRWxlbWVudCwgaW5kZXgsIGdyb3VwSW5kZXgsIGxlbmd0aCwgZ3Jv
dXBMZW5ndGg7Ci0KLSAgICAgICAgICAgIGlmIChtdWx0aXBsZSkgewotICAgICAgICAgICAgICB2
YWx1ZSA9IFtdOwotICAgICAgICAgICAgICBmb3IgKGdyb3VwSW5kZXggPSAwLCBncm91cExlbmd0
aCA9IG9wdGlvbkdyb3Vwc0NhY2hlLmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICBncm91cElu
ZGV4IDwgZ3JvdXBMZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgZ3JvdXBJbmRleCsrKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gbGlzdCBvZiBvcHRpb25zIGZvciB0aGF0IGdyb3VwLiAoZmlyc3Qg
aXRlbSBoYXMgdGhlIHBhcmVudCkKLSAgICAgICAgICAgICAgICBvcHRpb25Hcm91cCA9IG9wdGlv
bkdyb3Vwc0NhY2hlW2dyb3VwSW5kZXhdOwotCi0gICAgICAgICAgICAgICAgZm9yKGluZGV4ID0g
MSwgbGVuZ3RoID0gb3B0aW9uR3JvdXAubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykg
ewotICAgICAgICAgICAgICAgICAgaWYgKChvcHRpb25FbGVtZW50ID0gb3B0aW9uR3JvdXBbaW5k
ZXhdLmVsZW1lbnQpWzBdLnNlbGVjdGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtleSA9IG9w
dGlvbkVsZW1lbnQudmFsKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChrZXlOYW1lKSBsb2Nh
bHNba2V5TmFtZV0gPSBrZXk7Ci0gICAgICAgICAgICAgICAgICAgIGxvY2Fsc1t2YWx1ZU5hbWVd
ID0gY29sbGVjdGlvbltrZXldOwotICAgICAgICAgICAgICAgICAgICB2YWx1ZS5wdXNoKHZhbHVl
Rm4oc2NvcGUsIGxvY2FscykpOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
a2V5ID0gc2VsZWN0RWxlbWVudC52YWwoKTsKLSAgICAgICAgICAgICAgaWYgKGtleSA9PSAnPycp
IHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgfSBl
bHNlIGlmIChrZXkgPT0gJycpewotICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDsKLSAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBsb2NhbHNbdmFsdWVOYW1lXSA9IGNv
bGxlY3Rpb25ba2V5XTsKLSAgICAgICAgICAgICAgICBpZiAoa2V5TmFtZSkgbG9jYWxzW2tleU5h
bWVdID0ga2V5OwotICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVGbihzY29wZSwgbG9jYWxz
KTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3RybC4kc2V0
Vmlld1ZhbHVlKHZhbHVlKTsKLSAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAg
Y3RybC4kcmVuZGVyID0gcmVuZGVyOwotCi0gICAgICAgIC8vIFRPRE8odm9qdGEpOiBjYW4ndCB3
ZSBvcHRpbWl6ZSB0aGlzID8KLSAgICAgICAgc2NvcGUuJHdhdGNoKHJlbmRlcik7Ci0KLSAgICAg
ICAgZnVuY3Rpb24gcmVuZGVyKCkgewotICAgICAgICAgIHZhciBvcHRpb25Hcm91cHMgPSB7Jyc6
W119LCAvLyBUZW1wb3JhcnkgbG9jYXRpb24gZm9yIHRoZSBvcHRpb24gZ3JvdXBzIGJlZm9yZSB3
ZSByZW5kZXIgdGhlbQotICAgICAgICAgICAgICBvcHRpb25Hcm91cE5hbWVzID0gWycnXSwKLSAg
ICAgICAgICAgICAgb3B0aW9uR3JvdXBOYW1lLAotICAgICAgICAgICAgICBvcHRpb25Hcm91cCwK
LSAgICAgICAgICAgICAgb3B0aW9uLAotICAgICAgICAgICAgICBleGlzdGluZ1BhcmVudCwgZXhp
c3RpbmdPcHRpb25zLCBleGlzdGluZ09wdGlvbiwKLSAgICAgICAgICAgICAgbW9kZWxWYWx1ZSA9
IGN0cmwuJG1vZGVsVmFsdWUsCi0gICAgICAgICAgICAgIHZhbHVlcyA9IHZhbHVlc0ZuKHNjb3Bl
KSB8fCBbXSwKLSAgICAgICAgICAgICAga2V5cyA9IGtleU5hbWUgPyBzb3J0ZWRLZXlzKHZhbHVl
cykgOiB2YWx1ZXMsCi0gICAgICAgICAgICAgIGdyb3VwTGVuZ3RoLCBsZW5ndGgsCi0gICAgICAg
ICAgICAgIGdyb3VwSW5kZXgsIGluZGV4LAotICAgICAgICAgICAgICBsb2NhbHMgPSB7fSwKLSAg
ICAgICAgICAgICAgc2VsZWN0ZWQsCi0gICAgICAgICAgICAgIHNlbGVjdGVkU2V0ID0gZmFsc2Us
IC8vIG5vdGhpbmcgaXMgc2VsZWN0ZWQgeWV0Ci0gICAgICAgICAgICAgIGxhc3RFbGVtZW50LAot
ICAgICAgICAgICAgICBlbGVtZW50LAotICAgICAgICAgICAgICBsYWJlbDsKLQotICAgICAgICAg
IGlmIChtdWx0aXBsZSkgewotICAgICAgICAgICAgc2VsZWN0ZWRTZXQgPSBuZXcgSGFzaE1hcCht
b2RlbFZhbHVlKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAvLyBXZSBub3cgYnVpbGQgdXAg
dGhlIGxpc3Qgb2Ygb3B0aW9ucyB3ZSBuZWVkICh3ZSBtZXJnZSBsYXRlcikKLSAgICAgICAgICBm
b3IgKGluZGV4ID0gMDsgbGVuZ3RoID0ga2V5cy5sZW5ndGgsIGluZGV4IDwgbGVuZ3RoOyBpbmRl
eCsrKSB7Ci0gICAgICAgICAgICAgICBsb2NhbHNbdmFsdWVOYW1lXSA9IHZhbHVlc1trZXlOYW1l
ID8gbG9jYWxzW2tleU5hbWVdPWtleXNbaW5kZXhdOmluZGV4XTsKLSAgICAgICAgICAgICAgIG9w
dGlvbkdyb3VwTmFtZSA9IGdyb3VwQnlGbihzY29wZSwgbG9jYWxzKSB8fCAnJzsKLSAgICAgICAg
ICAgIGlmICghKG9wdGlvbkdyb3VwID0gb3B0aW9uR3JvdXBzW29wdGlvbkdyb3VwTmFtZV0pKSB7
Ci0gICAgICAgICAgICAgIG9wdGlvbkdyb3VwID0gb3B0aW9uR3JvdXBzW29wdGlvbkdyb3VwTmFt
ZV0gPSBbXTsKLSAgICAgICAgICAgICAgb3B0aW9uR3JvdXBOYW1lcy5wdXNoKG9wdGlvbkdyb3Vw
TmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobXVsdGlwbGUpIHsKLSAgICAg
ICAgICAgICAgc2VsZWN0ZWQgPSBzZWxlY3RlZFNldC5yZW1vdmUodmFsdWVGbihzY29wZSwgbG9j
YWxzKSkgIT0gdW5kZWZpbmVkOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
c2VsZWN0ZWQgPSBtb2RlbFZhbHVlID09PSB2YWx1ZUZuKHNjb3BlLCBsb2NhbHMpOwotICAgICAg
ICAgICAgICBzZWxlY3RlZFNldCA9IHNlbGVjdGVkU2V0IHx8IHNlbGVjdGVkOyAvLyBzZWUgaWYg
YXQgbGVhc3Qgb25lIGl0ZW0gaXMgc2VsZWN0ZWQKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGxhYmVsID0gZGlzcGxheUZuKHNjb3BlLCBsb2NhbHMpOyAvLyB3aGF0IHdpbGwgYmUgc2VlbiBi
eSB0aGUgdXNlcgotICAgICAgICAgICAgbGFiZWwgPSBsYWJlbCA9PT0gdW5kZWZpbmVkID8gJycg
OiBsYWJlbDsgLy8gZG9pbmcgZGlzcGxheUZuKHNjb3BlLCBsb2NhbHMpIHx8ICcnIG92ZXJ3cml0
ZXMgemVybyB2YWx1ZXMKLSAgICAgICAgICAgIG9wdGlvbkdyb3VwLnB1c2goewotICAgICAgICAg
ICAgICBpZDoga2V5TmFtZSA/IGtleXNbaW5kZXhdIDogaW5kZXgsICAgLy8gZWl0aGVyIHRoZSBp
bmRleCBpbnRvIGFycmF5IG9yIGtleSBmcm9tIG9iamVjdAotICAgICAgICAgICAgICBsYWJlbDog
bGFiZWwsCi0gICAgICAgICAgICAgIHNlbGVjdGVkOiBzZWxlY3RlZCAgICAgICAgICAgICAgICAg
ICAvLyBkZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIGJlIHNlbGVjdGVkCi0gICAgICAgICAgICB9KTsK
LSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKCFtdWx0aXBsZSkgewotICAgICAgICAgICAgaWYg
KG51bGxPcHRpb24gfHwgbW9kZWxWYWx1ZSA9PT0gbnVsbCkgewotICAgICAgICAgICAgICAvLyBp
bnNlcnQgbnVsbCBvcHRpb24gaWYgd2UgaGF2ZSBhIHBsYWNlaG9sZGVyLCBvciB0aGUgbW9kZWwg
aXMgbnVsbAotICAgICAgICAgICAgICBvcHRpb25Hcm91cHNbJyddLnVuc2hpZnQoe2lkOicnLCBs
YWJlbDonJywgc2VsZWN0ZWQ6IXNlbGVjdGVkU2V0fSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KCFzZWxlY3RlZFNldCkgewotICAgICAgICAgICAgICAvLyBvcHRpb24gY291bGQgbm90IGJlIGZv
dW5kLCB3ZSBoYXZlIHRvIGluc2VydCB0aGUgdW5kZWZpbmVkIGl0ZW0KLSAgICAgICAgICAgICAg
b3B0aW9uR3JvdXBzWycnXS51bnNoaWZ0KHtpZDonPycsIGxhYmVsOicnLCBzZWxlY3RlZDp0cnVl
fSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLy8gTm93IHdlIG5l
ZWQgdG8gdXBkYXRlIHRoZSBsaXN0IG9mIERPTSBub2RlcyB0byBtYXRjaCB0aGUgb3B0aW9uR3Jv
dXBzIHdlIGNvbXB1dGVkIGFib3ZlCi0gICAgICAgICAgZm9yIChncm91cEluZGV4ID0gMCwgZ3Jv
dXBMZW5ndGggPSBvcHRpb25Hcm91cE5hbWVzLmxlbmd0aDsKLSAgICAgICAgICAgICAgIGdyb3Vw
SW5kZXggPCBncm91cExlbmd0aDsKLSAgICAgICAgICAgICAgIGdyb3VwSW5kZXgrKykgewotICAg
ICAgICAgICAgLy8gY3VycmVudCBvcHRpb24gZ3JvdXAgbmFtZSBvciAnJyBpZiBubyBncm91cAot
ICAgICAgICAgICAgb3B0aW9uR3JvdXBOYW1lID0gb3B0aW9uR3JvdXBOYW1lc1tncm91cEluZGV4
XTsKLQotICAgICAgICAgICAgLy8gbGlzdCBvZiBvcHRpb25zIGZvciB0aGF0IGdyb3VwLiAoZmly
c3QgaXRlbSBoYXMgdGhlIHBhcmVudCkKLSAgICAgICAgICAgIG9wdGlvbkdyb3VwID0gb3B0aW9u
R3JvdXBzW29wdGlvbkdyb3VwTmFtZV07Ci0KLSAgICAgICAgICAgIGlmIChvcHRpb25Hcm91cHND
YWNoZS5sZW5ndGggPD0gZ3JvdXBJbmRleCkgewotICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRv
IGdyb3cgdGhlIG9wdGlvbkdyb3VwcwotICAgICAgICAgICAgICBleGlzdGluZ1BhcmVudCA9IHsK
LSAgICAgICAgICAgICAgICBlbGVtZW50OiBvcHRHcm91cFRlbXBsYXRlLmNsb25lKCkuYXR0cign
bGFiZWwnLCBvcHRpb25Hcm91cE5hbWUpLAotICAgICAgICAgICAgICAgIGxhYmVsOiBvcHRpb25H
cm91cC5sYWJlbAotICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICBleGlzdGluZ09wdGlv
bnMgPSBbZXhpc3RpbmdQYXJlbnRdOwotICAgICAgICAgICAgICBvcHRpb25Hcm91cHNDYWNoZS5w
dXNoKGV4aXN0aW5nT3B0aW9ucyk7Ci0gICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQuYXBwZW5k
KGV4aXN0aW5nUGFyZW50LmVsZW1lbnQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgZXhpc3RpbmdPcHRpb25zID0gb3B0aW9uR3JvdXBzQ2FjaGVbZ3JvdXBJbmRleF07Ci0g
ICAgICAgICAgICAgIGV4aXN0aW5nUGFyZW50ID0gZXhpc3RpbmdPcHRpb25zWzBdOyAgLy8gZWl0
aGVyIFNFTEVDVCAobm8gZ3JvdXApIG9yIE9QVEdST1VQIGVsZW1lbnQKLQotICAgICAgICAgICAg
ICAvLyB1cGRhdGUgdGhlIE9QVEdST1VQIGxhYmVsIGlmIG5vdCB0aGUgc2FtZS4KLSAgICAgICAg
ICAgICAgaWYgKGV4aXN0aW5nUGFyZW50LmxhYmVsICE9IG9wdGlvbkdyb3VwTmFtZSkgewotICAg
ICAgICAgICAgICAgIGV4aXN0aW5nUGFyZW50LmVsZW1lbnQuYXR0cignbGFiZWwnLCBleGlzdGlu
Z1BhcmVudC5sYWJlbCA9IG9wdGlvbkdyb3VwTmFtZSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgbGFzdEVsZW1lbnQgPSBudWxsOyAgLy8gc3RhcnQgYXQg
dGhlIGJlZ2lubmluZwotICAgICAgICAgICAgZm9yKGluZGV4ID0gMCwgbGVuZ3RoID0gb3B0aW9u
R3JvdXAubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykgewotICAgICAgICAgICAgICBv
cHRpb24gPSBvcHRpb25Hcm91cFtpbmRleF07Ci0gICAgICAgICAgICAgIGlmICgoZXhpc3RpbmdP
cHRpb24gPSBleGlzdGluZ09wdGlvbnNbaW5kZXgrMV0pKSB7Ci0gICAgICAgICAgICAgICAgLy8g
cmV1c2UgZWxlbWVudHMKLSAgICAgICAgICAgICAgICBsYXN0RWxlbWVudCA9IGV4aXN0aW5nT3B0
aW9uLmVsZW1lbnQ7Ci0gICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nT3B0aW9uLmxhYmVsICE9
PSBvcHRpb24ubGFiZWwpIHsKLSAgICAgICAgICAgICAgICAgIGxhc3RFbGVtZW50LnRleHQoZXhp
c3RpbmdPcHRpb24ubGFiZWwgPSBvcHRpb24ubGFiZWwpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdPcHRpb24uaWQgIT09IG9wdGlvbi5pZCkgewotICAg
ICAgICAgICAgICAgICAgbGFzdEVsZW1lbnQudmFsKGV4aXN0aW5nT3B0aW9uLmlkID0gb3B0aW9u
LmlkKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gbGFzdEVsZW1lbnQu
cHJvcCgnc2VsZWN0ZWQnKSBwcm92aWRlZCBieSBqUXVlcnkgaGFzIHNpZGUtZWZmZWN0cwotICAg
ICAgICAgICAgICAgIGlmIChsYXN0RWxlbWVudFswXS5zZWxlY3RlZCAhPT0gb3B0aW9uLnNlbGVj
dGVkKSB7Ci0gICAgICAgICAgICAgICAgICBsYXN0RWxlbWVudC5wcm9wKCdzZWxlY3RlZCcsIChl
eGlzdGluZ09wdGlvbi5zZWxlY3RlZCA9IG9wdGlvbi5zZWxlY3RlZCkpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBncm93IGVs
ZW1lbnRzCi0KLSAgICAgICAgICAgICAgICAvLyBpZiBpdCdzIGEgbnVsbCBvcHRpb24KLSAgICAg
ICAgICAgICAgICBpZiAob3B0aW9uLmlkID09PSAnJyAmJiBudWxsT3B0aW9uKSB7Ci0gICAgICAg
ICAgICAgICAgICAvLyBwdXQgYmFjayB0aGUgcHJlLWNvbXBpbGVkIGVsZW1lbnQKLSAgICAgICAg
ICAgICAgICAgIGVsZW1lbnQgPSBudWxsT3B0aW9uOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAvLyBqUXVlcnkodjEuNC4yKSBCdWc6IFdlIHNob3VsZCBiZSBh
YmxlIHRvIGNoYWluIHRoZSBtZXRob2QgY2FsbHMsIGJ1dAotICAgICAgICAgICAgICAgICAgLy8g
aW4gdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeSBvbiBzb21lIGJyb3dzZXIgdGhlIC50ZXh0KCkgcmV0
dXJucyBhIHN0cmluZwotICAgICAgICAgICAgICAgICAgLy8gcmF0aGVyIHRoZW4gdGhlIGVsZW1l
bnQuCi0gICAgICAgICAgICAgICAgICAoZWxlbWVudCA9IG9wdGlvblRlbXBsYXRlLmNsb25lKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgLnZhbChvcHRpb24uaWQpCi0gICAgICAgICAgICAgICAg
ICAgICAgLmF0dHIoJ3NlbGVjdGVkJywgb3B0aW9uLnNlbGVjdGVkKQotICAgICAgICAgICAgICAg
ICAgICAgIC50ZXh0KG9wdGlvbi5sYWJlbCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgZXhpc3RpbmdPcHRpb25zLnB1c2goZXhpc3RpbmdPcHRpb24gPSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgIGxhYmVs
OiBvcHRpb24ubGFiZWwsCi0gICAgICAgICAgICAgICAgICAgIGlkOiBvcHRpb24uaWQsCi0gICAg
ICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBvcHRpb24uc2VsZWN0ZWQKLSAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgICAgICBpZiAobGFzdEVsZW1lbnQpIHsKLSAgICAgICAgICAgICAg
ICAgIGxhc3RFbGVtZW50LmFmdGVyKGVsZW1lbnQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICBleGlzdGluZ1BhcmVudC5lbGVtZW50LmFwcGVuZChlbGVtZW50
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbGFzdEVsZW1lbnQgPSBlbGVt
ZW50OwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyByZW1v
dmUgYW55IGV4Y2Vzc2l2ZSBPUFRJT05zIGluIGEgZ3JvdXAKLSAgICAgICAgICAgIGluZGV4Kys7
IC8vIGluY3JlbWVudCBzaW5jZSB0aGUgZXhpc3RpbmdPcHRpb25zWzBdIGlzIHBhcmVudCBlbGVt
ZW50IG5vdCBPUFRJT04KLSAgICAgICAgICAgIHdoaWxlKGV4aXN0aW5nT3B0aW9ucy5sZW5ndGgg
PiBpbmRleCkgewotICAgICAgICAgICAgICBleGlzdGluZ09wdGlvbnMucG9wKCkuZWxlbWVudC5y
ZW1vdmUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgLy8gcmVtb3Zl
IGFueSBleGNlc3NpdmUgT1BUR1JPVVBzIGZyb20gc2VsZWN0Ci0gICAgICAgICAgd2hpbGUob3B0
aW9uR3JvdXBzQ2FjaGUubGVuZ3RoID4gZ3JvdXBJbmRleCkgewotICAgICAgICAgICAgb3B0aW9u
R3JvdXBzQ2FjaGUucG9wKClbMF0uZWxlbWVudC5yZW1vdmUoKTsKLSAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLX1dOwotCi12YXIgb3B0aW9uRGlyZWN0aXZlID0g
WyckaW50ZXJwb2xhdGUnLCBmdW5jdGlvbigkaW50ZXJwb2xhdGUpIHsKLSAgdmFyIG51bGxTZWxl
Y3RDdHJsID0gewotICAgIGFkZE9wdGlvbjogbm9vcCwKLSAgICByZW1vdmVPcHRpb246IG5vb3AK
LSAgfTsKLQotICByZXR1cm4gewotICAgIHJlc3RyaWN0OiAnRScsCi0gICAgcHJpb3JpdHk6IDEw
MCwKLSAgICBjb21waWxlOiBmdW5jdGlvbihlbGVtZW50LCBhdHRyKSB7Ci0gICAgICBpZiAoaXNV
bmRlZmluZWQoYXR0ci52YWx1ZSkpIHsKLSAgICAgICAgdmFyIGludGVycG9sYXRlRm4gPSAkaW50
ZXJwb2xhdGUoZWxlbWVudC50ZXh0KCksIHRydWUpOwotICAgICAgICBpZiAoIWludGVycG9sYXRl
Rm4pIHsKLSAgICAgICAgICBhdHRyLiRzZXQoJ3ZhbHVlJywgZWxlbWVudC50ZXh0KCkpOwotICAg
ICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBmdW5jdGlvbiAoc2NvcGUsIGVsZW1lbnQs
IGF0dHIpIHsKLSAgICAgICAgdmFyIHNlbGVjdEN0cmxOYW1lID0gJyRzZWxlY3RDb250cm9sbGVy
JywKLSAgICAgICAgICAgIHBhcmVudCA9IGVsZW1lbnQucGFyZW50KCksCi0gICAgICAgICAgICBz
ZWxlY3RDdHJsID0gcGFyZW50LmRhdGEoc2VsZWN0Q3RybE5hbWUpIHx8Ci0gICAgICAgICAgICAg
IHBhcmVudC5wYXJlbnQoKS5kYXRhKHNlbGVjdEN0cmxOYW1lKTsgLy8gaW4gY2FzZSB3ZSBhcmUg
aW4gb3B0Z3JvdXAKLQotICAgICAgICBpZiAoc2VsZWN0Q3RybCAmJiBzZWxlY3RDdHJsLmRhdGFi
b3VuZCkgewotICAgICAgICAgIC8vIEZvciBzb21lIHJlYXNvbiBPcGVyYSBkZWZhdWx0cyB0byB0
cnVlIGFuZCBpZiBub3Qgb3ZlcnJpZGRlbiB0aGlzIG1lc3NlcyB1cCB0aGUgcmVwZWF0ZXIuCi0g
ICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUgdmlldyB0byBkcml2ZSB0aGUgaW5pdGlhbGl6
YXRpb24gb2YgdGhlIG1vZGVsIGFueXdheS4KLSAgICAgICAgICBlbGVtZW50LnByb3AoJ3NlbGVj
dGVkJywgZmFsc2UpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHNlbGVjdEN0cmwgPSBu
dWxsU2VsZWN0Q3RybDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpbnRlcnBvbGF0ZUZuKSB7
Ci0gICAgICAgICAgc2NvcGUuJHdhdGNoKGludGVycG9sYXRlRm4sIGZ1bmN0aW9uIGludGVycG9s
YXRlV2F0Y2hBY3Rpb24obmV3VmFsLCBvbGRWYWwpIHsKLSAgICAgICAgICAgIGF0dHIuJHNldCgn
dmFsdWUnLCBuZXdWYWwpOwotICAgICAgICAgICAgaWYgKG5ld1ZhbCAhPT0gb2xkVmFsKSBzZWxl
Y3RDdHJsLnJlbW92ZU9wdGlvbihvbGRWYWwpOwotICAgICAgICAgICAgc2VsZWN0Q3RybC5hZGRP
cHRpb24obmV3VmFsKTsKLSAgICAgICAgICB9KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICBzZWxlY3RDdHJsLmFkZE9wdGlvbihhdHRyLnZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGVsZW1lbnQuYmluZCgnJGRlc3Ryb3knLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICBzZWxlY3RD
dHJsLnJlbW92ZU9wdGlvbihhdHRyLnZhbHVlKTsKLSAgICAgICAgfSk7Ci0gICAgICB9OwotICAg
IH0KLSAgfQotfV07Ci0KLXZhciBzdHlsZURpcmVjdGl2ZSA9IHZhbHVlRm4oewotICByZXN0cmlj
dDogJ0UnLAotICB0ZXJtaW5hbDogdHJ1ZQotfSk7Ci0KLSAgLy90cnkgdG8gYmluZCB0byBqcXVl
cnkgbm93IHNvIHRoYXQgb25lIGNhbiB3cml0ZSBhbmd1bGFyLmVsZW1lbnQoKS5yZWFkKCkKLSAg
Ly9idXQgd2Ugd2lsbCByZWJpbmQgb24gYm9vdHN0cmFwIGFnYWluLgotICBiaW5kSlF1ZXJ5KCk7
Ci0KLSAgcHVibGlzaEV4dGVybmFsQVBJKGFuZ3VsYXIpOwotCi0gIGpxTGl0ZShkb2N1bWVudCku
cmVhZHkoZnVuY3Rpb24oKSB7Ci0gICAgYW5ndWxhckluaXQoZG9jdW1lbnQsIGJvb3RzdHJhcCk7
Ci0gIH0pOwotCi19KSh3aW5kb3csIGRvY3VtZW50KTsKLWFuZ3VsYXIuZWxlbWVudChkb2N1bWVu
dCkuZmluZCgnaGVhZCcpLmFwcGVuZCgnPHN0eWxlIHR5cGU9InRleHQvY3NzIj5AY2hhcnNldCAi
VVRGLTgiO1tuZ1xcOmNsb2FrXSxbbmctY2xvYWtdLFtkYXRhLW5nLWNsb2FrXSxbeC1uZy1jbG9h
a10sLm5nLWNsb2FrLC54LW5nLWNsb2Fre2Rpc3BsYXk6bm9uZTt9bmdcXDpmb3Jte2Rpc3BsYXk6
YmxvY2s7fTwvc3R5bGU+Jyk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24v
YmFzZS5jc3MgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvYm93ZXJfY29tcG9uZW50cy90b2RvbXZj
LWNvbW1vbi9iYXNlLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM3Y2Q5Y2M4
YzdlMDdlNDY5MWQ0ZWUxYmFhNzAyZTQ5OTNjYTIxYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvYm93ZXJfY29tcG9u
ZW50cy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDU1NCArMCww
IEBACi1odG1sLAotYm9keSB7Ci0gICAgbWFyZ2luOiAwOwotICAgIHBhZGRpbmc6IDA7Ci19Ci0K
LWJ1dHRvbiB7Ci0gICAgbWFyZ2luOiAwOwotICAgIHBhZGRpbmc6IDA7Ci0gICAgYm9yZGVyOiAw
OwotICAgIGJhY2tncm91bmQ6IG5vbmU7Ci0gICAgZm9udC1zaXplOiAxMDAlOwotICAgIHZlcnRp
Y2FsLWFsaWduOiBiYXNlbGluZTsKLSAgICBmb250LWZhbWlseTogaW5oZXJpdDsKLSAgICBjb2xv
cjogaW5oZXJpdDsKLSAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7Ci0gICAgLyotbW96LWFw
cGVhcmFuY2U6IG5vbmU7Ki8KLSAgICAtbXMtYXBwZWFyYW5jZTogbm9uZTsKLSAgICAtby1hcHBl
YXJhbmNlOiBub25lOwotICAgIGFwcGVhcmFuY2U6IG5vbmU7Ci19Ci0KLWJvZHkgewotICAgIGZv
bnQ6IDE0cHggJ0hlbHZldGljYSBOZXVlJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsK
LSAgICBsaW5lLWhlaWdodDogMS40ZW07Ci0gICAgYmFja2dyb3VuZDogI2VhZWFlYSB1cmwoJ2Jn
LnBuZycpOwotICAgIGNvbG9yOiAjNGQ0ZDRkOwotICAgIHdpZHRoOiA1NTBweDsKLSAgICBtYXJn
aW46IDAgYXV0bzsKLSAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAg
ICAtbW96LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAgICAtbXMtZm9udC1zbW9vdGhp
bmc6IGFudGlhbGlhc2VkOwotICAgIC1vLWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAg
ICBmb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ci19Ci0KLSN0b2RvYXBwIHsKLSAgICBiYWNr
Z3JvdW5kOiAjZmZmOwotICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsK
LSAgICBtYXJnaW46IDEzMHB4IDAgNDBweCAwOwotICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7
Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDJw
eDsKLSAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMnB4OwotICAgIGJveC1zaGFkb3c6IDAg
MnB4IDZweCAwIHJnYmEoMCwgMCwgMCwgMC4yKSwKLSAgICAwIDI1cHggNTBweCAwIHJnYmEoMCwg
MCwgMCwgMC4xNSk7Ci19Ci0KLSN0b2RvYXBwOmJlZm9yZSB7Ci0gICAgY29udGVudDogJyc7Ci0g
ICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjZjVkNmQ2OwotICAgIGJvcmRlci1yaWdodDogMXB4
IHNvbGlkICNmNWQ2ZDY7Ci0gICAgd2lkdGg6IDJweDsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7
Ci0gICAgdG9wOiAwOwotICAgIGxlZnQ6IDQwcHg7Ci0gICAgaGVpZ2h0OiAxMDAlOwotfQotCi0j
dG9kb2FwcCBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7Ci0gICAgZm9udC1zdHls
ZTogaXRhbGljOwotfQotCi0jdG9kb2FwcCBpbnB1dDo6LW1vei1wbGFjZWhvbGRlciB7Ci0gICAg
Zm9udC1zdHlsZTogaXRhbGljOwotICAgIGNvbG9yOiAjYTlhOWE5OwotfQotCi0jdG9kb2FwcCBo
MSB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogLTEyMHB4OwotICAgIHdpZHRo
OiAxMDAlOwotICAgIGZvbnQtc2l6ZTogNzBweDsKLSAgICBmb250LXdlaWdodDogYm9sZDsKLSAg
ICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci0gICAgY29sb3I6ICNiM2IzYjM7Ci0gICAgY29sb3I6IHJn
YmEoMjU1LCAyNTUsIDI1NSwgMC4zKTsKLSAgICB0ZXh0LXNoYWRvdzogLTFweCAtMXB4IHJnYmEo
MCwgMCwgMCwgMC4yKTsKLSAgICAtd2Via2l0LXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2li
aWxpdHk7Ci0gICAgLW1vei10ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OwotICAg
IC1tcy10ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OwotICAgIC1vLXRleHQtcmVu
ZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7Ci0gICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXpl
TGVnaWJpbGl0eTsKLX0KLQotI2hlYWRlciB7Ci0gICAgcGFkZGluZy10b3A6IDE1cHg7Ci0gICAg
Ym9yZGVyLXJhZGl1czogaW5oZXJpdDsKLX0KLQotI2hlYWRlcjpiZWZvcmUgewotICAgIGNvbnRl
bnQ6ICcnOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDA7Ci0gICAgcmlnaHQ6
IDA7Ci0gICAgbGVmdDogMDsKLSAgICBoZWlnaHQ6IDE1cHg7Ci0gICAgei1pbmRleDogMjsKLSAg
ICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzZjNjE1YzsKLSAgICBiYWNrZ3JvdW5kOiAjOGQ3
ZDc3OwotICAgIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwg
bGVmdCBib3R0b20sIGZyb20ocmdiYSgxMzIsIDExMCwgMTAwLCAwLjgpKSx0byhyZ2JhKDEwMSwg
ODQsIDc2LCAwLjgpKSk7Ci0gICAgYmFja2dyb3VuZDogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQo
dG9wLCByZ2JhKDEzMiwgMTEwLCAxMDAsIDAuOCksIHJnYmEoMTAxLCA4NCwgNzYsIDAuOCkpOwot
ICAgIGJhY2tncm91bmQ6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgcmdiYSgxMzIsIDExMCwg
MTAwLCAwLjgpLCByZ2JhKDEwMSwgODQsIDc2LCAwLjgpKTsKLSAgICBiYWNrZ3JvdW5kOiAtby1s
aW5lYXItZ3JhZGllbnQodG9wLCByZ2JhKDEzMiwgMTEwLCAxMDAsIDAuOCksIHJnYmEoMTAxLCA4
NCwgNzYsIDAuOCkpOwotICAgIGJhY2tncm91bmQ6IC1tcy1saW5lYXItZ3JhZGllbnQodG9wLCBy
Z2JhKDEzMiwgMTEwLCAxMDAsIDAuOCksIHJnYmEoMTAxLCA4NCwgNzYsIDAuOCkpOwotICAgIGJh
Y2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0b3AsIHJnYmEoMTMyLCAxMTAsIDEwMCwgMC44KSwg
cmdiYSgxMDEsIDg0LCA3NiwgMC44KSk7Ci0gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMXB4
OwotICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxcHg7Ci19Ci0KLSNuZXctdG9kbywKLS5l
ZGl0IHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgbWFyZ2luOiAwOwotICAgIHdpZHRo
OiAxMDAlOwotICAgIGZvbnQtc2l6ZTogMjRweDsKLSAgICBmb250LWZhbWlseTogaW5oZXJpdDsK
LSAgICBsaW5lLWhlaWdodDogMS40ZW07Ci0gICAgYm9yZGVyOiAwOwotICAgIG91dGxpbmU6IG5v
bmU7Ci0gICAgY29sb3I6IGluaGVyaXQ7Ci0gICAgcGFkZGluZzogNnB4OwotICAgIGJvcmRlcjog
MXB4IHNvbGlkICM5OTk7Ci0gICAgYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4IDVweCAwIHJnYmEo
MCwgMCwgMCwgMC4yKTsKLSAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7Ci0gICAg
LW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94OwotICAgIC1tcy1ib3gtc2l6aW5nOiBib3JkZXIt
Ym94OwotICAgIC1vLWJveC1zaXppbmc6IGJvcmRlci1ib3g7Ci0gICAgYm94LXNpemluZzogYm9y
ZGVyLWJveDsKLSAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAgICAt
bW96LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAgICAtbXMtZm9udC1zbW9vdGhpbmc6
IGFudGlhbGlhc2VkOwotICAgIC1vLWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAgICBm
b250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ci19Ci0KLSNuZXctdG9kbyB7Ci0gICAgcGFkZGlu
ZzogMTZweCAxNnB4IDE2cHggNjBweDsKLSAgICBib3JkZXI6IG5vbmU7Ci0gICAgYmFja2dyb3Vu
ZDogcmdiYSgwLCAwLCAwLCAwLjAyKTsKLSAgICB6LWluZGV4OiAyOwotICAgIGJveC1zaGFkb3c6
IG5vbmU7Ci19Ci0KLSNtYWluIHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgei1pbmRl
eDogMjsKLSAgICBib3JkZXItdG9wOiAxcHggZG90dGVkICNhZGFkYWQ7Ci19Ci0KLWxhYmVsW2Zv
cj0ndG9nZ2xlLWFsbCddIHsKLSAgICBkaXNwbGF5OiBub25lOwotfQotCi0jdG9nZ2xlLWFsbCB7
Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogLTQycHg7Ci0gICAgbGVmdDogLTRw
eDsKLSAgICB3aWR0aDogNDBweDsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci0gICAgYm9yZGVy
OiBub25lOyAvKiBNb2JpbGUgU2FmYXJpICovCi19Ci0KLSN0b2dnbGUtYWxsOmJlZm9yZSB7Ci0g
ICAgY29udGVudDogJ8K7JzsKLSAgICBmb250LXNpemU6IDI4cHg7Ci0gICAgY29sb3I6ICNkOWQ5
ZDk7Ci0gICAgcGFkZGluZzogMCAyNXB4IDdweDsKLX0KLQotI3RvZ2dsZS1hbGw6Y2hlY2tlZDpi
ZWZvcmUgewotICAgIGNvbG9yOiAjNzM3MzczOwotfQotCi0jdG9kby1saXN0IHsKLSAgICBtYXJn
aW46IDA7Ci0gICAgcGFkZGluZzogMDsKLSAgICBsaXN0LXN0eWxlOiBub25lOwotfQotCi0jdG9k
by1saXN0IGxpIHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgZm9udC1zaXplOiAyNHB4
OwotICAgIGJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQgI2NjYzsKLX0KLQotI3RvZG8tbGlzdCBs
aTpsYXN0LWNoaWxkIHsKLSAgICBib3JkZXItYm90dG9tOiBub25lOwotfQotCi0jdG9kby1saXN0
IGxpLmVkaXRpbmcgewotICAgIGJvcmRlci1ib3R0b206IG5vbmU7Ci0gICAgcGFkZGluZzogMDsK
LX0KLQotI3RvZG8tbGlzdCBsaS5lZGl0aW5nIC5lZGl0IHsKLSAgICBkaXNwbGF5OiBibG9jazsK
LSAgICB3aWR0aDogNTA2cHg7Ci0gICAgcGFkZGluZzogMTNweCAxN3B4IDEycHggMTdweDsKLSAg
ICBtYXJnaW46IDAgMCAwIDQzcHg7Ci19Ci0KLSN0b2RvLWxpc3QgbGkuZWRpdGluZyAudmlldyB7
Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KLQotI3RvZG8tbGlzdCBsaSAudG9nZ2xlIHsKLSAgICB0
ZXh0LWFsaWduOiBjZW50ZXI7Ci0gICAgd2lkdGg6IDQwcHg7Ci0gICAgLyogYXV0bywgc2luY2Ug
bm9uLVdlYktpdCBicm93c2VycyBkb2Vzbid0IHN1cHBvcnQgaW5wdXQgc3R5bGluZyAqLwotICAg
IGhlaWdodDogYXV0bzsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwOwotICAg
IGJvdHRvbTogMDsKLSAgICBtYXJnaW46IGF1dG8gMDsKLSAgICBib3JkZXI6IG5vbmU7IC8qIE1v
YmlsZSBTYWZhcmkgKi8KLSAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7Ci0gICAgLyotbW96
LWFwcGVhcmFuY2U6IG5vbmU7Ki8KLSAgICAtbXMtYXBwZWFyYW5jZTogbm9uZTsKLSAgICAtby1h
cHBlYXJhbmNlOiBub25lOwotICAgIGFwcGVhcmFuY2U6IG5vbmU7Ci19Ci0KLSN0b2RvLWxpc3Qg
bGkgLnRvZ2dsZTphZnRlciB7Ci0gICAgY29udGVudDogJ+KclCc7Ci0gICAgbGluZS1oZWlnaHQ6
IDQzcHg7IC8qIDQwICsgYSBjb3VwbGUgb2YgcGl4ZWxzIHZpc3VhbCBhZGp1c3RtZW50ICovCi0g
ICAgZm9udC1zaXplOiAyMHB4OwotICAgIGNvbG9yOiAjZDlkOWQ5OwotICAgIHRleHQtc2hhZG93
OiAwIC0xcHggMCAjYmZiZmJmOwotfQotCi0jdG9kby1saXN0IGxpIC50b2dnbGU6Y2hlY2tlZDph
ZnRlciB7Ci0gICAgY29sb3I6ICM4NWFkYTc7Ci0gICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgIzY2
OTk5MTsKLSAgICBib3R0b206IDFweDsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci19Ci0KLSN0
b2RvLWxpc3QgbGkgbGFiZWwgewotICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7Ci0gICAgcGFk
ZGluZzogMTVweDsKLSAgICBtYXJnaW4tbGVmdDogNDVweDsKLSAgICBkaXNwbGF5OiBibG9jazsK
LSAgICBsaW5lLWhlaWdodDogMS4yOwotICAgIC13ZWJraXQtdHJhbnNpdGlvbjogY29sb3IgMC40
czsKLSAgICAtbW96LXRyYW5zaXRpb246IGNvbG9yIDAuNHM7Ci0gICAgLW1zLXRyYW5zaXRpb246
IGNvbG9yIDAuNHM7Ci0gICAgLW8tdHJhbnNpdGlvbjogY29sb3IgMC40czsKLSAgICB0cmFuc2l0
aW9uOiBjb2xvciAwLjRzOwotfQotCi0jdG9kby1saXN0IGxpLmNvbXBsZXRlZCBsYWJlbCB7Ci0g
ICAgY29sb3I6ICNhOWE5YTk7Ci0gICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ci19
Ci0KLSN0b2RvLWxpc3QgbGkgLmRlc3Ryb3kgewotICAgIGRpc3BsYXk6IG5vbmU7Ci0gICAgcG9z
aXRpb246IGFic29sdXRlOwotICAgIHRvcDogMDsKLSAgICByaWdodDogMTBweDsKLSAgICBib3R0
b206IDA7Ci0gICAgd2lkdGg6IDQwcHg7Ci0gICAgaGVpZ2h0OiA0MHB4OwotICAgIG1hcmdpbjog
YXV0byAwOwotICAgIGZvbnQtc2l6ZTogMjJweDsKLSAgICBjb2xvcjogI2E4OGE4YTsKLSAgICAt
d2Via2l0LXRyYW5zaXRpb246IGFsbCAwLjJzOwotICAgIC1tb3otdHJhbnNpdGlvbjogYWxsIDAu
MnM7Ci0gICAgLW1zLXRyYW5zaXRpb246IGFsbCAwLjJzOwotICAgIC1vLXRyYW5zaXRpb246IGFs
bCAwLjJzOwotICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOwotfQotCi0jdG9kby1saXN0IGxpIC5k
ZXN0cm95OmhvdmVyIHsKLSAgICB0ZXh0LXNoYWRvdzogMCAwIDFweCAjMDAwLAotICAgICAwIDAg
MTBweCByZ2JhKDE5OSwgMTA3LCAxMDcsIDAuOCk7Ci0gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNj
YWxlKDEuMyk7Ci0gICAgLW1vei10cmFuc2Zvcm06IHNjYWxlKDEuMyk7Ci0gICAgLW1zLXRyYW5z
Zm9ybTogc2NhbGUoMS4zKTsKLSAgICAtby10cmFuc2Zvcm06IHNjYWxlKDEuMyk7Ci0gICAgdHJh
bnNmb3JtOiBzY2FsZSgxLjMpOwotfQotCi0jdG9kby1saXN0IGxpIC5kZXN0cm95OmFmdGVyIHsK
LSAgICBjb250ZW50OiAn4pyWJzsKLX0KLQotI3RvZG8tbGlzdCBsaTpob3ZlciAuZGVzdHJveSB7
Ci0gICAgZGlzcGxheTogYmxvY2s7Ci19Ci0KLSN0b2RvLWxpc3QgbGkgLmVkaXQgewotICAgIGRp
c3BsYXk6IG5vbmU7Ci19Ci0KLSN0b2RvLWxpc3QgbGkuZWRpdGluZzpsYXN0LWNoaWxkIHsKLSAg
ICBtYXJnaW4tYm90dG9tOiAtMXB4OwotfQotCi0jZm9vdGVyIHsKLSAgICBjb2xvcjogIzc3NzsK
LSAgICBwYWRkaW5nOiAwIDE1cHg7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHJpZ2h0
OiAwOwotICAgIGJvdHRvbTogLTMxcHg7Ci0gICAgbGVmdDogMDsKLSAgICBoZWlnaHQ6IDIwcHg7
Ci0gICAgei1pbmRleDogMTsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci19Ci0KLSNmb290ZXI6
YmVmb3JlIHsKLSAgICBjb250ZW50OiAnJzsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAg
cmlnaHQ6IDA7Ci0gICAgYm90dG9tOiAzMXB4OwotICAgIGxlZnQ6IDA7Ci0gICAgaGVpZ2h0OiA1
MHB4OwotICAgIHotaW5kZXg6IC0xOwotICAgIGJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAs
IDAsIDAsIDAuMyksCi0gICAgMCA2cHggMCAtM3B4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KSwK
LSAgICAwIDdweCAxcHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMyksCi0gICAgMCA0M3B4IDAgLTZw
eCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCksCi0gICAgMCA0NHB4IDJweCAtNnB4IHJnYmEoMCwg
MCwgMCwgMC4yKTsKLX0KLQotI3RvZG8tY291bnQgewotICAgIGZsb2F0OiBsZWZ0OwotICAgIHRl
eHQtYWxpZ246IGxlZnQ7Ci19Ci0KLSNmaWx0ZXJzIHsKLSAgICBtYXJnaW46IDA7Ci0gICAgcGFk
ZGluZzogMDsKLSAgICBsaXN0LXN0eWxlOiBub25lOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
LSAgICByaWdodDogMDsKLSAgICBsZWZ0OiAwOwotfQotCi0jZmlsdGVycyBsaSB7Ci0gICAgZGlz
cGxheTogaW5saW5lOwotfQotCi0jZmlsdGVycyBsaSBhIHsKLSAgICBjb2xvcjogIzgzNzU2ZjsK
LSAgICBtYXJnaW46IDJweDsKLSAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Ci19Ci0KLSNmaWx0
ZXJzIGxpIGEuc2VsZWN0ZWQgewotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotfQotCi0jY2xlYXIt
Y29tcGxldGVkIHsKLSAgICBmbG9hdDogcmlnaHQ7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwot
ICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwotICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKLSAgICBi
YWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMSk7Ci0gICAgZm9udC1zaXplOiAxMXB4OwotICAg
IHBhZGRpbmc6IDAgMTBweDsKLSAgICBib3JkZXItcmFkaXVzOiAzcHg7Ci0gICAgYm94LXNoYWRv
dzogMCAtMXB4IDAgMCByZ2JhKDAsIDAsIDAsIDAuMik7Ci19Ci0KLSNjbGVhci1jb21wbGV0ZWQ6
aG92ZXIgewotICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4xNSk7Ci0gICAgYm94LXNo
YWRvdzogMCAtMXB4IDAgMCByZ2JhKDAsIDAsIDAsIDAuMyk7Ci19Ci0KLSNpbmZvIHsKLSAgICBt
YXJnaW46IDY1cHggYXV0byAwOwotICAgIGNvbG9yOiAjYTZhNmE2OwotICAgIGZvbnQtc2l6ZTog
MTJweDsKLSAgICB0ZXh0LXNoYWRvdzogMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7
Ci0gICAgdGV4dC1hbGlnbjogY2VudGVyOwotfQotCi0jaW5mbyBhIHsKLSAgICBjb2xvcjogaW5o
ZXJpdDsKLX0KLQotLyoKLSAgICBIYWNrIHRvIHJlbW92ZSBiYWNrZ3JvdW5kIGZyb20gTW9iaWxl
IFNhZmFyaS4KLSAgICBDYW4ndCB1c2UgaXQgZ2xvYmFsbHkgc2luY2UgaXQgZGVzdHJveXMgY2hl
Y2tib3hlcyBpbiBGaXJlZm94IGFuZCBPcGVyYQotKi8KLUBtZWRpYSBzY3JlZW4gYW5kICgtd2Vi
a2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCkgewotICAgICN0b2dnbGUtYWxsLAotICAgICN0
b2RvLWxpc3QgbGkgLnRvZ2dsZSB7Ci0gICAgYmFja2dyb3VuZDogbm9uZTsKLSAgICB9Ci0KLSAg
ICAjdG9kby1saXN0IGxpIC50b2dnbGUgewotICAgIGhlaWdodDogNDBweDsKLSAgICB9Ci0KLSAg
ICAjdG9nZ2xlLWFsbCB7Ci0gICAgdG9wOiAtNTZweDsKLSAgICBsZWZ0OiAtMTVweDsKLSAgICB3
aWR0aDogNjVweDsKLSAgICBoZWlnaHQ6IDQxcHg7Ci0gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJv
dGF0ZSg5MGRlZyk7Ci0gICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOwotICAgIC13ZWJraXQt
YXBwZWFyYW5jZTogbm9uZTsKLSAgICBhcHBlYXJhbmNlOiBub25lOwotICAgIH0KLX0KLQotLmhp
ZGRlbnsKLSAgICBkaXNwbGF5Om5vbmU7Ci19Ci0KLWhyIHsKLSAgICBtYXJnaW46IDIwcHggMDsK
LSAgICBib3JkZXI6IDA7Ci0gICAgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCAjQzVDNUM1OwotICAg
IGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQgI0Y3RjdGNzsKLX0KLQotLmxlYXJuIGEgewotICAg
IGZvbnQtd2VpZ2h0OiBub3JtYWw7Ci0gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwotICAgIGNv
bG9yOiAjYjgzZjQ1OwotfQotCi0ubGVhcm4gYTpob3ZlciB7Ci0gICAgdGV4dC1kZWNvcmF0aW9u
OiB1bmRlcmxpbmU7Ci0gICAgY29sb3I6ICM3ODdlN2U7Ci19Ci0KLS5sZWFybiBoMywKLS5sZWFy
biBoNCwKLS5sZWFybiBoNSB7Ci0gICAgbWFyZ2luOiAxMHB4IDA7Ci0gICAgZm9udC13ZWlnaHQ6
IDUwMDsKLSAgICBsaW5lLWhlaWdodDogMS4yOwotICAgIGNvbG9yOiAjMDAwOwotfQotCi0ubGVh
cm4gaDMgewotICAgIGZvbnQtc2l6ZTogMjRweDsKLX0KLQotLmxlYXJuIGg0IHsKLSAgICBmb250
LXNpemU6IDE4cHg7Ci19Ci0KLS5sZWFybiBoNSB7Ci0gICAgbWFyZ2luLWJvdHRvbTogMDsKLSAg
ICBmb250LXNpemU6IDE0cHg7Ci19Ci0KLS5sZWFybiB1bCB7Ci0gICAgcGFkZGluZzogMDsKLSAg
ICBtYXJnaW46IDAgMCAzMHB4IDI1cHg7Ci19Ci0KLS5sZWFybiBsaSB7Ci0gICAgbGluZS1oZWln
aHQ6IDIwcHg7Ci19Ci0KLS5sZWFybiBwIHsKLSAgICBmb250LXNpemU6IDE1cHg7Ci0gICAgZm9u
dC13ZWlnaHQ6IDMwMDsKLSAgICBsaW5lLWhlaWdodDogMS4zOwotICAgIG1hcmdpbi10b3A6IDA7
Ci0gICAgbWFyZ2luLWJvdHRvbTogMDsKLX0KLQotLnF1b3RlIHsKLSAgICBib3JkZXI6IG5vbmU7
Ci0gICAgbWFyZ2luOiAyMHB4IDAgNjBweCAwOwotfQotCi0ucXVvdGUgcCB7Ci0gICAgZm9udC1z
dHlsZTogaXRhbGljOwotfQotCi0ucXVvdGUgcDpiZWZvcmUgewotICAgIGNvbnRlbnQ6ICfigJwn
OwotICAgIGZvbnQtc2l6ZTogNTBweDsKLSAgICBvcGFjaXR5OiAuMTU7Ci0gICAgcG9zaXRpb246
IGFic29sdXRlOwotICAgIHRvcDogLTIwcHg7Ci0gICAgbGVmdDogM3B4OwotfQotCi0ucXVvdGUg
cDphZnRlciB7Ci0gICAgY29udGVudDogJ+KAnSc7Ci0gICAgZm9udC1zaXplOiA1MHB4OwotICAg
IG9wYWNpdHk6IC4xNTsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgYm90dG9tOiAtNDJw
eDsKLSAgICByaWdodDogM3B4OwotfQotCi0ucXVvdGUgZm9vdGVyIHsKLSAgICBwb3NpdGlvbjog
YWJzb2x1dGU7Ci0gICAgYm90dG9tOiAtNDBweDsKLSAgICByaWdodDogMDsKLX0KLQotLnF1b3Rl
IGZvb3RlciBpbWcgewotICAgIGJvcmRlci1yYWRpdXM6IDNweDsKLX0KLQotLnF1b3RlIGZvb3Rl
ciBhIHsKLSAgICBtYXJnaW4tbGVmdDogNXB4OwotICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7
Ci19Ci0KLS5zcGVlY2gtYnViYmxlIHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgcGFk
ZGluZzogMTBweDsKLSAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIC4wNCk7Ci0gICAgYm9y
ZGVyLXJhZGl1czogNXB4OwotfQotCi0uc3BlZWNoLWJ1YmJsZTphZnRlciB7Ci0gICAgY29udGVu
dDogJyc7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMTAwJTsKLSAgICByaWdo
dDogMzBweDsKLSAgICBib3JkZXI6IDEzcHggc29saWQgdHJhbnNwYXJlbnQ7Ci0gICAgYm9yZGVy
LXRvcC1jb2xvcjogcmdiYSgwLCAwLCAwLCAuMDQpOwotfQotCi0vKipib2R5Ki8ubGVhcm4tYmFy
ID4gLmxlYXJuIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgd2lkdGg6IDI3MnB4Owot
ICAgIHRvcDogOHB4OwotICAgIGxlZnQ6IC0zMDBweDsKLSAgICBwYWRkaW5nOiAxMHB4OwotICAg
IGJvcmRlci1yYWRpdXM6IDVweDsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1
LCAyNTUsIC42KTsKLSAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiBsZWZ0OwotICAgIHRyYW5zaXRp
b24tZHVyYXRpb246IDUwMG1zOwotfQotCi1AbWVkaWEgKG1pbi13aWR0aDogODk5cHgpIHsKLSAg
ICAvKipib2R5Ki8ubGVhcm4tYmFyIHsKLSAgICB3aWR0aDogYXV0bzsKLSAgICBtYXJnaW46IDAg
MCAwIDMwMHB4OwotICAgIH0KLSAgICAvKipib2R5Ki8ubGVhcm4tYmFyID4gLmxlYXJuIHsKLSAg
ICBsZWZ0OiA4cHg7Ci0gICAgfQotICAgIC8qKmJvZHkqLy5sZWFybi1iYXIgI3RvZG9hcHAgewot
ICAgIHdpZHRoOiA1NTBweDsKLSAgICBtYXJnaW46IDEzMHB4IGF1dG8gNDBweCBhdXRvOwotICAg
IH0KLX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9ib3dlcl9jb21wb25lbnRz
L3RvZG9tdmMtY29tbW9uL2Jhc2UuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvYm93ZXJfY29t
cG9uZW50cy90b2RvbXZjLWNvbW1vbi9iYXNlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBmOWJmNDI0MGZhZDlhOWMxMTk0YzgxNTg2ZGMyOTE2YmVjMWNjYTc4Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJq
cy9ib3dlcl9jb21wb25lbnRzL3RvZG9tdmMtY29tbW9uL2Jhc2UuanMKKysrIC9kZXYvbnVsbApA
QCAtMSwyMDkgKzAsMCBAQAotKGZ1bmN0aW9uICgpIHsKLSAgICAndXNlIHN0cmljdCc7Ci0KLSAg
ICAvLyBVbmRlcnNjb3JlJ3MgVGVtcGxhdGUgTW9kdWxlCi0gICAgLy8gQ291cnRlc3kgb2YgdW5k
ZXJzY29yZWpzLm9yZwotICAgIHZhciBfID0gKGZ1bmN0aW9uIChfKSB7Ci0gICAgXy5kZWZhdWx0
cyA9IGZ1bmN0aW9uIChvYmplY3QpIHsKLSAgICBpZiAoIW9iamVjdCkgewotICAgIHJldHVybiBv
YmplY3Q7Ci0gICAgfQotICAgIGZvciAodmFyIGFyZ3NJbmRleCA9IDEsIGFyZ3NMZW5ndGggPSBh
cmd1bWVudHMubGVuZ3RoOyBhcmdzSW5kZXggPCBhcmdzTGVuZ3RoOyBhcmdzSW5kZXgrKykgewot
ICAgIHZhciBpdGVyYWJsZSA9IGFyZ3VtZW50c1thcmdzSW5kZXhdOwotICAgIGlmIChpdGVyYWJs
ZSkgewotICAgIGZvciAodmFyIGtleSBpbiBpdGVyYWJsZSkgewotICAgIGlmIChvYmplY3Rba2V5
XSA9PSBudWxsKSB7Ci0gICAgb2JqZWN0W2tleV0gPSBpdGVyYWJsZVtrZXldOwotICAgIH0KLSAg
ICB9Ci0gICAgfQotICAgIH0KLSAgICByZXR1cm4gb2JqZWN0OwotICAgIH0KLQotICAgIC8vIEJ5
IGRlZmF1bHQsIFVuZGVyc2NvcmUgdXNlcyBFUkItc3R5bGUgdGVtcGxhdGUgZGVsaW1pdGVycywg
Y2hhbmdlIHRoZQotICAgIC8vIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0
ZXJuYXRpdmUgZGVsaW1pdGVycy4KLSAgICBfLnRlbXBsYXRlU2V0dGluZ3MgPSB7Ci0gICAgZXZh
bHVhdGUgICAgOiAvPCUoW1xzXFNdKz8pJT4vZywKLSAgICBpbnRlcnBvbGF0ZSA6IC88JT0oW1xz
XFNdKz8pJT4vZywKLSAgICBlc2NhcGUgICAgICA6IC88JS0oW1xzXFNdKz8pJT4vZwotICAgIH07
Ci0KLSAgICAvLyBXaGVuIGN1c3RvbWl6aW5nIGB0ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91IGRv
bid0IHdhbnQgdG8gZGVmaW5lIGFuCi0gICAgLy8gaW50ZXJwb2xhdGlvbiwgZXZhbHVhdGlvbiBv
ciBlc2NhcGluZyByZWdleCwgd2UgbmVlZCBvbmUgdGhhdCBpcwotICAgIC8vIGd1YXJhbnRlZWQg
bm90IHRvIG1hdGNoLgotICAgIHZhciBub01hdGNoID0gLyguKV4vOwotCi0gICAgLy8gQ2VydGFp
biBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgZXNjYXBlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1dCBp
bnRvIGEKLSAgICAvLyBzdHJpbmcgbGl0ZXJhbC4KLSAgICB2YXIgZXNjYXBlcyA9IHsKLSAgICAi
JyI6ICAgICAgIiciLAotICAgICdcXCc6ICAgICAnXFwnLAotICAgICdccic6ICAgICAncicsCi0g
ICAgJ1xuJzogICAgICduJywKLSAgICAnXHQnOiAgICAgJ3QnLAotICAgICdcdTIwMjgnOiAndTIw
MjgnLAotICAgICdcdTIwMjknOiAndTIwMjknCi0gICAgfTsKLQotICAgIHZhciBlc2NhcGVyID0g
L1xcfCd8XHJ8XG58XHR8XHUyMDI4fFx1MjAyOS9nOwotCi0gICAgLy8gSmF2YVNjcmlwdCBtaWNy
by10ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlvbi4KLSAg
ICAvLyBVbmRlcnNjb3JlIHRlbXBsYXRpbmcgaGFuZGxlcyBhcmJpdHJhcnkgZGVsaW1pdGVycywg
cHJlc2VydmVzIHdoaXRlc3BhY2UsCi0gICAgLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3Rl
cyB3aXRoaW4gaW50ZXJwb2xhdGVkIGNvZGUuCi0gICAgXy50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHRl
eHQsIGRhdGEsIHNldHRpbmdzKSB7Ci0gICAgdmFyIHJlbmRlcjsKLSAgICBzZXR0aW5ncyA9IF8u
ZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfLnRlbXBsYXRlU2V0dGluZ3MpOwotCi0gICAgLy8gQ29t
YmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRp
b24uCi0gICAgdmFyIG1hdGNoZXIgPSBuZXcgUmVnRXhwKFsKLSAgICAoc2V0dGluZ3MuZXNjYXBl
IHx8IG5vTWF0Y2gpLnNvdXJjZSwKLSAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRj
aCkuc291cmNlLAotICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNoKS5zb3VyY2UKLSAg
ICBdLmpvaW4oJ3wnKSArICd8JCcsICdnJyk7Ci0KLSAgICAvLyBDb21waWxlIHRoZSB0ZW1wbGF0
ZSBzb3VyY2UsIGVzY2FwaW5nIHN0cmluZyBsaXRlcmFscyBhcHByb3ByaWF0ZWx5LgotICAgIHZh
ciBpbmRleCA9IDA7Ci0gICAgdmFyIHNvdXJjZSA9ICJfX3ArPSciOwotICAgIHRleHQucmVwbGFj
ZShtYXRjaGVyLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlLCBpbnRlcnBvbGF0ZSwgZXZhbHVhdGUs
IG9mZnNldCkgewotICAgIHNvdXJjZSArPSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQpCi0gICAg
LnJlcGxhY2UoZXNjYXBlciwgZnVuY3Rpb24obWF0Y2gpIHsgcmV0dXJuICdcXCcgKyBlc2NhcGVz
W21hdGNoXTsgfSk7Ci0KLSAgICBpZiAoZXNjYXBlKSB7Ci0gICAgc291cmNlICs9ICInK1xuKChf
X3Q9KCIgKyBlc2NhcGUgKyAiKSk9PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXG4nIjsKLSAgICB9
Ci0gICAgaWYgKGludGVycG9sYXRlKSB7Ci0gICAgc291cmNlICs9ICInK1xuKChfX3Q9KCIgKyBp
bnRlcnBvbGF0ZSArICIpKT09bnVsbD8nJzpfX3QpK1xuJyI7Ci0gICAgfQotICAgIGlmIChldmFs
dWF0ZSkgewotICAgIHNvdXJjZSArPSAiJztcbiIgKyBldmFsdWF0ZSArICJcbl9fcCs9JyI7Ci0g
ICAgfQotICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoOwotICAgIHJldHVybiBtYXRj
aDsKLSAgICB9KTsKLSAgICBzb3VyY2UgKz0gIic7XG4iOwotCi0gICAgLy8gSWYgYSB2YXJpYWJs
ZSBpcyBub3Qgc3BlY2lmaWVkLCBwbGFjZSBkYXRhIHZhbHVlcyBpbiBsb2NhbCBzY29wZS4KLSAg
ICBpZiAoIXNldHRpbmdzLnZhcmlhYmxlKSBzb3VyY2UgPSAnd2l0aChvYmp8fHt9KXtcbicgKyBz
b3VyY2UgKyAnfVxuJzsKLQotICAgIHNvdXJjZSA9ICJ2YXIgX190LF9fcD0nJyxfX2o9QXJyYXku
cHJvdG90eXBlLmpvaW4sIiArCi0gICAgInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChh
cmd1bWVudHMsJycpO307XG4iICsKLSAgICBzb3VyY2UgKyAicmV0dXJuIF9fcDtcbiI7Ci0KLSAg
ICB0cnkgewotICAgIHJlbmRlciA9IG5ldyBGdW5jdGlvbihzZXR0aW5ncy52YXJpYWJsZSB8fCAn
b2JqJywgJ18nLCBzb3VyY2UpOwotICAgIH0gY2F0Y2ggKGUpIHsKLSAgICBlLnNvdXJjZSA9IHNv
dXJjZTsKLSAgICB0aHJvdyBlOwotICAgIH0KLQotICAgIGlmIChkYXRhKSByZXR1cm4gcmVuZGVy
KGRhdGEsIF8pOwotICAgIHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHsKLSAgICByZXR1
cm4gcmVuZGVyLmNhbGwodGhpcywgZGF0YSwgXyk7Ci0gICAgfTsKLQotICAgIC8vIFByb3ZpZGUg
dGhlIGNvbXBpbGVkIGZ1bmN0aW9uIHNvdXJjZSBhcyBhIGNvbnZlbmllbmNlIGZvciBwcmVjb21w
aWxhdGlvbi4KLSAgICB0ZW1wbGF0ZS5zb3VyY2UgPSAnZnVuY3Rpb24oJyArIChzZXR0aW5ncy52
YXJpYWJsZSB8fCAnb2JqJykgKyAnKXtcbicgKyBzb3VyY2UgKyAnfSc7Ci0KLSAgICByZXR1cm4g
dGVtcGxhdGU7Ci0gICAgfTsKLQotICAgIHJldHVybiBfOwotICAgIH0pKHt9KTsKLQotICAgIGlm
IChsb2NhdGlvbi5ob3N0bmFtZSA9PT0gJ3RvZG9tdmMuY29tJykgewotICAgIHdpbmRvdy5fZ2Fx
ID0gW1snX3NldEFjY291bnQnLCdVQS0zMTA4MTA2Mi0xJ10sWydfdHJhY2tQYWdldmlldyddXTso
ZnVuY3Rpb24oZCx0KXt2YXIgZz1kLmNyZWF0ZUVsZW1lbnQodCkscz1kLmdldEVsZW1lbnRzQnlU
YWdOYW1lKHQpWzBdO2cuc3JjPScvL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9nYS5qcyc7cy5w
YXJlbnROb2RlLmluc2VydEJlZm9yZShnLHMpfShkb2N1bWVudCwnc2NyaXB0JykpOwotICAgIH0K
LQotICAgIGZ1bmN0aW9uIHJlZGlyZWN0KCkgewotICAgIGlmIChsb2NhdGlvbi5ob3N0bmFtZSA9
PT0gJ3Rhc3RlanMuZ2l0aHViLmlvJykgewotICAgIGxvY2F0aW9uLmhyZWYgPSBsb2NhdGlvbi5o
cmVmLnJlcGxhY2UoJ3Rhc3RlanMuZ2l0aHViLmlvL3RvZG9tdmMnLCAndG9kb212Yy5jb20nKTsK
LSAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZmluZFJvb3QoKSB7Ci0gICAgdmFyIGJhc2U7
Ci0KLSAgICBbL2xhYnMvLCAvXHcqLWV4YW1wbGVzL10uZm9yRWFjaChmdW5jdGlvbiAoaHJlZikg
ewotICAgIHZhciBtYXRjaCA9IGxvY2F0aW9uLmhyZWYubWF0Y2goaHJlZik7Ci0KLSAgICBpZiAo
IWJhc2UgJiYgbWF0Y2gpIHsKLSAgICBiYXNlID0gbG9jYXRpb24uaHJlZi5pbmRleE9mKG1hdGNo
KTsKLSAgICB9Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gbG9jYXRpb24uaHJlZi5zdWJzdHIoMCwg
YmFzZSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZ2V0RmlsZShmaWxlLCBjYWxsYmFjaykgewot
ICAgIGlmICghbG9jYXRpb24uaG9zdCkgewotICAgIHJldHVybiBjb25zb2xlLmluZm8oJ01pc3Mg
dGhlIGluZm8gYmFyPyBSdW4gVG9kb01WQyBmcm9tIGEgc2VydmVyIHRvIGF2b2lkIGEgY3Jvc3Mt
b3JpZ2luIGVycm9yLicpOwotICAgIH0KLQotICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVl
c3QoKTsKLQotICAgIHhoci5vcGVuKCdHRVQnLCBmaW5kUm9vdCgpICsgZmlsZSwgdHJ1ZSk7Ci0g
ICAgeGhyLnNlbmQoKTsKLQotICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgaWYg
KHhoci5zdGF0dXMgPT09IDIwMCAmJiBjYWxsYmFjaykgewotICAgIGNhbGxiYWNrKHhoci5yZXNw
b25zZVRleHQpOwotICAgIH0KLSAgICB9OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIExlYXJuKGxl
YXJuSlNPTiwgY29uZmlnKSB7Ci0gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIExlYXJuKSkgewot
ICAgIHJldHVybiBuZXcgTGVhcm4obGVhcm5KU09OLCBjb25maWcpOwotICAgIH0KLQotICAgIHZh
ciB0ZW1wbGF0ZSwgZnJhbWV3b3JrOwotCi0gICAgaWYgKHR5cGVvZiBsZWFybkpTT04gIT09ICdv
YmplY3QnKSB7Ci0gICAgdHJ5IHsKLSAgICBsZWFybkpTT04gPSBKU09OLnBhcnNlKGxlYXJuSlNP
Tik7Ci0gICAgfSBjYXRjaCAoZSkgewotICAgIHJldHVybjsKLSAgICB9Ci0gICAgfQotCi0gICAg
aWYgKGNvbmZpZykgewotICAgIHRlbXBsYXRlID0gY29uZmlnLnRlbXBsYXRlOwotICAgIGZyYW1l
d29yayA9IGNvbmZpZy5mcmFtZXdvcms7Ci0gICAgfQotCi0gICAgaWYgKCF0ZW1wbGF0ZSAmJiBs
ZWFybkpTT04udGVtcGxhdGVzKSB7Ci0gICAgdGVtcGxhdGUgPSBsZWFybkpTT04udGVtcGxhdGVz
LnRvZG9tdmM7Ci0gICAgfQotCi0gICAgaWYgKCFmcmFtZXdvcmsgJiYgZG9jdW1lbnQucXVlcnlT
ZWxlY3RvcignW2RhdGEtZnJhbWV3b3JrXScpKSB7Ci0gICAgZnJhbWV3b3JrID0gZG9jdW1lbnQu
cXVlcnlTZWxlY3RvcignW2RhdGEtZnJhbWV3b3JrXScpLmdldEF0dHJpYnV0ZSgnZGF0YS1mcmFt
ZXdvcmsnKTsKLSAgICB9Ci0KLQotICAgIGlmICh0ZW1wbGF0ZSAmJiBsZWFybkpTT05bZnJhbWV3
b3JrXSkgewotICAgIHRoaXMuZnJhbWV3b3JrSlNPTiA9IGxlYXJuSlNPTltmcmFtZXdvcmtdOwot
ICAgIHRoaXMudGVtcGxhdGUgPSB0ZW1wbGF0ZTsKLQotICAgIHRoaXMuYXBwZW5kKCk7Ci0gICAg
fQotICAgIH0KLQotICAgIExlYXJuLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAoKSB7Ci0g
ICAgdmFyIGFzaWRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYXNpZGUnKTsKLSAgICBhc2lk
ZS5pbm5lckhUTUwgPSBfLnRlbXBsYXRlKHRoaXMudGVtcGxhdGUsIHRoaXMuZnJhbWV3b3JrSlNP
Tik7Ci0gICAgYXNpZGUuY2xhc3NOYW1lID0gJ2xlYXJuJzsKLQotICAgIC8vIExvY2FsaXplIGRl
bW8gbGlua3MKLSAgICB2YXIgZGVtb0xpbmtzID0gYXNpZGUucXVlcnlTZWxlY3RvckFsbCgnLmRl
bW8tbGluaycpOwotICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZGVtb0xpbmtzLCBm
dW5jdGlvbiAoZGVtb0xpbmspIHsKLSAgICBkZW1vTGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBm
aW5kUm9vdCgpICsgZGVtb0xpbmsuZ2V0QXR0cmlidXRlKCdocmVmJykpOwotICAgIH0pOwotCi0g
ICAgZG9jdW1lbnQuYm9keS5jbGFzc05hbWUgPSAoZG9jdW1lbnQuYm9keS5jbGFzc05hbWUgKyAn
IGxlYXJuLWJhcicpLnRyaW0oKTsKLSAgICBkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50SFRN
TCgnYWZ0ZXJCZWdpbicsIGFzaWRlLm91dGVySFRNTCk7Ci0gICAgfTsKLQotICAgIHJlZGlyZWN0
KCk7Ci0gICAgZ2V0RmlsZSgnbGVhcm4uanNvbicsIExlYXJuKTsKLX0pKCk7CmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9hbmd1bGFyanMvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9i
Zy5wbmcgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNv
bW1vbi9iZy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyYTc2MDA4MjVlZTEx
ZjIxODQ5ZWQ0NzU0OTljN2QxZWNiY2M4NzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVy
YWwgMjEyNgp6Y21WLVUyKGtCeFApPGg7M0t8TGswMDBlMU5KTFRxMDAza0YwMDNrSDB7e1IzNFVC
IXEwMDAwQ1ApdC1zPyhYakUKej4rOXlgPUhLN250PX4zdDAwME81TmtsPFpjd1RqdShRNHZ+N0tX
RVcjWW0/bEtfdjtUbXwhRmMpQE53RW5tdHNoCnp4IU9+ejgxSlQzcEZzbT5tPTA0aFZhX2xYbF9i
bT0rTTs9ZUk8JSRyTzJ0YWBzdWgqU3IjUE93Kj9hZHEhTyFDVgp6KjAmYilya0NDRVYpMW5JdWlM
Qm50VUgtTUpJOyZxWWd6fGRATmhubl9hYmkyZ2BwdTROQU1WaWQzaFMlP3F1en4KempsSmYoeDhj
ajxQR2NqbipKK2F7Jkg1cCpuNSQ1ZTM/PEtDYz9vMDZtQXNOU2JnUFdPP1B6I0N6bjwhPXs+e1ZT
CnpVVkVQMW1zZzlgXk9GVWhTTzVydFhIaFJseVUyaT42JEJUPWdsR2B7SmxjdEdIcndSSW0pNkJ1
dTY1akxRbl5IOAp6dmw5bFpxVUJBKyVxdk01WEMreVlAbWZBKFlCflhQPWV8Njx7JSReZVU4bnJL
P3YyY2NiQEpvbTVDRz5yS0FMN0oKenBsSEVJYXZWcHwwcDEmbSFHYFRpPzw3aVo7fUBHNyNaKX1L
bSUyIUZIblEwKiY/UExSKUchSEFhSGdVI2N8JGR6CnpwaiMwSG1lYWRJZT5gIyk9SmprYntCPUZL
blUzcGMtJllAal9qNihoNFl+K1VxPFBVMzZDOzViPU1eRmA9cDFkSQp6azxDUU9QTmE3PiFeSj1M
SHVueDF4aTRRWEstWXsmTW9UOGt5NlZiOWN8V2huT3dGfmM9M3pPeThhZ2t0bGlTNiMKemAjOEZg
OUgpRD1ibWs5QjVNblcmX3IjKWYkYys7JExTci1AXkFuOGRoY35JcXV1dj5qT0s3cHc3TEo7Jlgw
aTFDCnpHTXNIZFAxT3NAbnkkJGohPlhBaWklN2JwNWs+YHB5TkEhfmVwYikoKXA5elI0WWw2ej1V
fXtDSWRoMXooRnBBbwp6UUlXITswenBDeUM0KjdZTGtaQ09AY3VsMFJfJnpnaHNBOEVrKXolPCFw
LWJ2c3NwbFlZMn1QOyF2NENZajlrbUYKemIwYk5fbTRWKmZeWVpNb2IyKGozcEtqfjd2I1p0a3M9
SW8re3N1JVdpdWtkSkgkYj9mWmtpQT1QWV8zT2hEQmtvCnooTFRRSFkmRl5eMmhHLVlgKlo5M3Zi
fmM/KihKY2hEalRmQ3M/elJtKmAqTipWLSQ9P1FxdGhuU3IqP09TM3NqSwp6bzxfVV5me35hZzYw
dWw+ak5wS2E5MntATkgrU3N0WCVAfXhCKkprIWx9UFoxY0NsSW5zfn01XiFSbmNVaypybUEKeiVT
SVZndDU4RVF4TEorT2lGcTx5dTRlT0R8OUx0M2ROc2VmeE91cSlEJiRfJWowRGdxQ3kxZ3pjfHRU
RDMqbWVlCnp7PSV8PGBgfV9IeXBoT3V7Oyl4a1JnK1FuSENDM1RmK2tzcHFWNip8UUstUmNxRH00
PktrQnV3cXV5WkxVcHxncgp6UFViVWJGYkJyUGQxeE9gXkMqci1pM3A5KkYjKE9CaCE0V3lAYUMm
KiF8T3xHWGNqREEmWWhGeztjRDcqbyhHU14KekBwUVNFNyl4XzgxPVF5amU2KkxRI1RYdS03KG87
Uzh1M3RwREE8U2djS2NLT3BtQTs9SEJaU0BPRlRAX1hPdnhxCnoqTnwzS0x5dGd6SDZHVSYmVW9j
NFp6azRsdW0zUHs5P2ZwSTQrUUdQSit2NmAxbGZScTNMY1MqKE0qV0srfGIlTwp6ZSR6PjBfZGRq
JWhtQ3NwZVhkaFlSfS1pOUE9Q2BFb0NoVVl1SH5eeCE5K3wmKFBnYio+Q2s8PTlqfCkqQHh5ZlQK
enBQIytLdDx9MzlifDNXbDRmeFQoK0c/YUg+Z0deZEBNRWFVT0pSZnk1NVR0Rkk3XlkpVnVNVT03
UHAweTU1alN+CnorVEopaWdNeXJxa1g7d1U4ajY4aUlEdHFKWWhTX0QzX09lbS1AZzZtZV9SZmlR
fXVUX0stQS05cUclfWdrM0U5Ywp6IThgS2dzTU5YbSliZWxvUGZNcWwqfCYkTT4xcWBpIWNZKVJG
WW5qTll1KmdTdkA4WGViVjclfXhZTD42KUdKUEoKekpwQTdLMzFsY0p1SUZLU3cte3g0RlgwSzJB
eil+WGc8YHNPdSQ0fF48TUM3QCt4Ynd4c0dnVHZKSUFMalB7NjhMCno4QVl1U0dTMEdVZ2s2V2B2
NFc7UnkqdW9FVG51bFBpfDU3MyVsdipaeHcjdjZ5VVFeTU9mY3BUI1Y4UklEViMjTgp6RDFgK0Fl
bXNPaCl3YldERXhWY2ZwS3opanlWPTx+JlpYUGc2Y3xaREU3VTRiazxEXj4tKF5YSlg0WXpvaU5S
dkwKenl1WTd+MjZ3LVBeWnclNkZ9c2hCd1YyJDAyYzhSc1NVeTZkTTkyZGlDQXhpWDNJVXFzcTVp
ZzY+VV8hVnkqcTUkCnpqbX0xNnRKcitRWiZUP0hra3BlSXdWWC1yMUVJPUAlWmx0OzY8dHdIODZJ
RD5nKm1qJkUhQSkpJWdYSj14NnUjbAp6Y0tFUD5ieDRycVYqa2BCQnJaJE1xanR7VHNIY3hVSD47
KWlBS31CKEtpbGEmVkQlYj82bSZeMFdLNF4mRVpOQUkKejhBTVlzXyUkRCV8TStAK2NRcUwtaGk0
eUc+aCpqd2RpaSFXMXt9cD5aaHdGWXRfNFN1MWtqWTk8YkFaanp+OWVrCnpfRGlhcitBZkpGUF85
QHltVW8kS1c+PC01YCEkVk5PSTF5KEVEU0g0V3BDaWpFXz5hbCFOdD1eZVZFUiN1SjE9Ygp6O0JX
RjJJZ3lGNUxleFYreWVjJEtpbjtBaUBteW87Rz56SiZqcmRXI2VjWGhJWnBoNU9ZcXdfUEVmY0Y1
NjxPMTkKekwpOHIhS00oKWlmMGBAP1c0KEpkYyk3V29QR14mPSQ8elVzTStIQ1dha0NeM3RaeGsr
UGpRR31CPlo1PFo2Vnh3CnpCQEhyViQmbH5AVGFqNzBwY2V7aVN1UkxzVWN6RFlfNVRuRHE4UHlf
UTN3aGBEOCE0aks7dkZkUlArUTA9ekp5Kgp6enVXZCUhYWlARHt8Kko8STtPRCZpJWx7SnAtOCpQ
dTNWR0xXaXlrNnYjWG1RcXdgLSslZSR8Q0p3KkBgNXpiMzwKekV9eiM7a1JoTCZxNVBERzZAbW0q
JD5adV9aWkUjcTNNYytOJjFPXjdob2g5UVI3YCtMJGNCUDVwcUc9ZnFBMHVoCnpVQnVrYXhURm1I
KTx8WGJ2cDJjPUhTYk5rcFh3NzNhNWx2N1YkamI5MiN5WjE0MUAkWD9GfUp0OGdJVTdXbTZtOQp6
P2VfOzt6c25tNmBMWmVQPlQ9JClLcj5aP2tyKlVtRnFSN3p4MEM2XmJtY3NjQDFBR3R3X3JOSD4t
WG0kZCp8UTwKem4mMUxuMHU3PWwmSUxzPiVDa0pwYERpRzlGMTh4NE5lK2xnPCNpP2U3akwleDs0
Wm5Sa05eTXgwNypxb002TjwkCkVmKD4wTiEya2ROCgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
YW5ndWxhcmpzL2luZGV4Lmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvaW5kZXguaHRtbApp
bmRleCA3ZjM3OGJkYjJjODhjZjE0ZTg2ZDdkMDYzYjllN2RkY2VhOWM0YTdkLi5mZjE3Yzk4OGY2
YWFlZWRhYzdjNzQ3NGUwYzU2ZmU1ZTc1MmU5ODM0IDEwMDY0NAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9h
bmd1bGFyanMvaW5kZXguaHRtbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvaW5kZXguaHRt
bApAQCAtMSw3MSArMSwyMSBAQAogPCFkb2N0eXBlIGh0bWw+Ci08aHRtbCBsYW5nPSJlbiIgbmct
YXBwPSJ0b2RvbXZjIiBkYXRhLWZyYW1ld29yaz0iYW5ndWxhcmpzIj4KKzxodG1sIGxhbmc9ImVu
IiBkYXRhLWZyYW1ld29yaz0iYW5ndWxhcmpzIj4KICAgICA8aGVhZD4KLSAgICA8bWV0YSBjaGFy
c2V0PSJ1dGYtOCI+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250
ZW50PSJJRT1lZGdlIj4KLSAgICA8dGl0bGU+QW5ndWxhckpTIOKAoiBUb2RvTVZDPC90aXRsZT4K
LSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImJvd2VyX2NvbXBvbmVudHMvdG9kb212
Yy1jb21tb24vYmFzZS5jc3MiPgotICAgIDxzdHlsZT5bbmctY2xvYWtdIHsgZGlzcGxheTogbm9u
ZTsgfTwvc3R5bGU+CisgICAgICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICAgICAgPHRp
dGxlPkFuZ3VsYXJKUyDigKIgVG9kb01WQzwvdGl0bGU+CisgICAgICAgIDxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgaHJlZj0ibm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzIj4KKyAg
ICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJub2RlX21vZHVsZXMvdG9kb212Yy1h
cHAtY3NzL2luZGV4LmNzcyI+CisgICAgICAgIDxzdHlsZT5bbmctY2xvYWtdIHsgZGlzcGxheTog
bm9uZTsgfTwvc3R5bGU+CiAgICAgPC9oZWFkPgotICAgIDxib2R5PgotICAgIDxzZWN0aW9uIGlk
PSJ0b2RvYXBwIiBuZy1jb250cm9sbGVyPSJUb2RvQ3RybCI+Ci0gICAgPGhlYWRlciBpZD0iaGVh
ZGVyIj4KLSAgICA8aDE+dG9kb3M8L2gxPgotICAgIDxmb3JtIGlkPSJ0b2RvLWZvcm0iIG5nLXN1
Ym1pdD0iYWRkVG9kbygpIj4KLSAgICA8aW5wdXQgaWQ9Im5ldy10b2RvIiBwbGFjZWhvbGRlcj0i
V2hhdCBuZWVkcyB0byBiZSBkb25lPyIgbmctbW9kZWw9Im5ld1RvZG8iIGF1dG9mb2N1cz4KLSAg
ICA8L2Zvcm0+Ci0gICAgPC9oZWFkZXI+Ci0gICAgPHNlY3Rpb24gaWQ9Im1haW4iIG5nLXNob3c9
InRvZG9zLmxlbmd0aCIgbmctY2xvYWs+Ci0gICAgPGlucHV0IGlkPSJ0b2dnbGUtYWxsIiB0eXBl
PSJjaGVja2JveCIgbmctbW9kZWw9ImFsbENoZWNrZWQiIG5nLWNsaWNrPSJtYXJrQWxsKGFsbENo
ZWNrZWQpIj4KLSAgICA8bGFiZWwgZm9yPSJ0b2dnbGUtYWxsIj5NYXJrIGFsbCBhcyBjb21wbGV0
ZTwvbGFiZWw+Ci0gICAgPHVsIGlkPSJ0b2RvLWxpc3QiPgotICAgIDxsaSBuZy1yZXBlYXQ9InRv
ZG8gaW4gdG9kb3MgfCBmaWx0ZXI6c3RhdHVzRmlsdGVyIiBuZy1jbGFzcz0ie2NvbXBsZXRlZDog
dG9kby5jb21wbGV0ZWQsIGVkaXRpbmc6IHRvZG8gPT0gZWRpdGVkVG9kb30iPgotICAgIDxkaXYg
Y2xhc3M9InZpZXciPgotICAgIDxpbnB1dCBjbGFzcz0idG9nZ2xlIiB0eXBlPSJjaGVja2JveCIg
bmctbW9kZWw9InRvZG8uY29tcGxldGVkIj4KLSAgICA8bGFiZWwgbmctZGJsY2xpY2s9ImVkaXRU
b2RvKHRvZG8pIj57e3RvZG8udGl0bGV9fTwvbGFiZWw+Ci0gICAgPGJ1dHRvbiBjbGFzcz0iZGVz
dHJveSIgbmctY2xpY2s9InJlbW92ZVRvZG8odG9kbykiPjwvYnV0dG9uPgotICAgIDwvZGl2Pgot
ICAgIDxmb3JtIG5nLXN1Ym1pdD0iZG9uZUVkaXRpbmcodG9kbykiPgotICAgIDxpbnB1dCBjbGFz
cz0iZWRpdCIgbmctbW9kZWw9InRvZG8udGl0bGUiIHRvZG8tZXNjYXBlPSJyZXZlcnRFZGl0aW5n
KHRvZG8pIiB0b2RvLWJsdXI9ImRvbmVFZGl0aW5nKHRvZG8pIiB0b2RvLWZvY3VzPSJ0b2RvID09
IGVkaXRlZFRvZG8iPgotICAgIDwvZm9ybT4KLSAgICA8L2xpPgotICAgIDwvdWw+Ci0gICAgPC9z
ZWN0aW9uPgotICAgIDxmb290ZXIgaWQ9ImZvb3RlciIgbmctc2hvdz0idG9kb3MubGVuZ3RoIiBu
Zy1jbG9haz4KLSAgICA8c3BhbiBpZD0idG9kby1jb3VudCI+PHN0cm9uZz57e3JlbWFpbmluZ0Nv
dW50fX08L3N0cm9uZz4KLSAgICA8bmctcGx1cmFsaXplIGNvdW50PSJyZW1haW5pbmdDb3VudCIg
d2hlbj0ieyBvbmU6ICdpdGVtIGxlZnQnLCBvdGhlcjogJ2l0ZW1zIGxlZnQnIH0iPjwvbmctcGx1
cmFsaXplPgotICAgIDwvc3Bhbj4KLSAgICA8dWwgaWQ9ImZpbHRlcnMiPgotICAgIDxsaT4KLSAg
ICA8YSBuZy1jbGFzcz0ie3NlbGVjdGVkOiBsb2NhdGlvbi5wYXRoKCkgPT0gJy8nfSAiIGhyZWY9
IiMvIj5BbGw8L2E+Ci0gICAgPC9saT4KLSAgICA8bGk+Ci0gICAgPGEgbmctY2xhc3M9IntzZWxl
Y3RlZDogbG9jYXRpb24ucGF0aCgpID09ICcvYWN0aXZlJ30iIGhyZWY9IiMvYWN0aXZlIj5BY3Rp
dmU8L2E+Ci0gICAgPC9saT4KLSAgICA8bGk+Ci0gICAgPGEgbmctY2xhc3M9IntzZWxlY3RlZDog
bG9jYXRpb24ucGF0aCgpID09ICcvY29tcGxldGVkJ30iIGhyZWY9IiMvY29tcGxldGVkIj5Db21w
bGV0ZWQ8L2E+Ci0gICAgPC9saT4KLSAgICA8L3VsPgotICAgIDxidXR0b24gaWQ9ImNsZWFyLWNv
bXBsZXRlZCIgbmctY2xpY2s9ImNsZWFyQ29tcGxldGVkVG9kb3MoKSIgbmctc2hvdz0iY29tcGxl
dGVkQ291bnQiPkNsZWFyIGNvbXBsZXRlZCAoe3tjb21wbGV0ZWRDb3VudH19KTwvYnV0dG9uPgot
ICAgIDwvZm9vdGVyPgotICAgIDwvc2VjdGlvbj4KLSAgICA8Zm9vdGVyIGlkPSJpbmZvIj4KLSAg
ICA8cD5Eb3VibGUtY2xpY2sgdG8gZWRpdCBhIHRvZG88L3A+Ci0gICAgPHA+Q3JlZGl0czoKLSAg
ICA8YSBocmVmPSJodHRwOi8vdHdpdHRlci5jb20vY2J1cmdkb3JmIj5DaHJpc3RvcGggQnVyZ2Rv
cmY8L2E+LAotICAgIDxhIGhyZWY9Imh0dHA6Ly9lcmljYmlkZWxtYW4uY29tIj5FcmljIEJpZGVs
bWFuPC9hPiwKLSAgICA8YSBocmVmPSJodHRwOi8vamFjb2JtdW1tLmNvbSI+SmFjb2IgTXVtbTwv
YT4gYW5kCi0gICAgPGEgaHJlZj0iaHR0cDovL2lnb3JtaW5hci5jb20iPklnb3IgTWluYXI8L2E+
Ci0gICAgPC9wPgotICAgIDxwPlBhcnQgb2YgPGEgaHJlZj0iaHR0cDovL3RvZG9tdmMuY29tIj5U
b2RvTVZDPC9hPjwvcD4KLSAgICA8L2Zvb3Rlcj4KLSAgICA8c2NyaXB0IHNyYz0iYm93ZXJfY29t
cG9uZW50cy90b2RvbXZjLWNvbW1vbi9iYXNlLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNy
Yz0iYm93ZXJfY29tcG9uZW50cy9hbmd1bGFyL2FuZ3VsYXIuanMiPjwvc2NyaXB0PgotICAgIDxz
Y3JpcHQgc3JjPSJqcy9hcHAuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJqcy9jb250
cm9sbGVycy90b2RvQ3RybC5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9ImpzL3NlcnZp
Y2VzL3RvZG9TdG9yYWdlLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNyYz0ianMvZGlyZWN0
aXZlcy90b2RvRm9jdXMuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJqcy9kaXJlY3Rp
dmVzL3RvZG9CbHVyLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNyYz0ianMvZGlyZWN0aXZl
cy90b2RvRXNjYXBlLmpzIj48L3NjcmlwdD4KKyAgICA8Ym9keSBuZy1hcHA9InRvZG9tdmMiPgor
ICAgICAgICA8bmctdmlldyAvPgorICAgICAgICA8c2NyaXB0IHNyYz0ibm9kZV9tb2R1bGVzL2Fu
Z3VsYXIvYW5ndWxhci5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJub2RlX21v
ZHVsZXMvYW5ndWxhci1yb3V0ZS9hbmd1bGFyLXJvdXRlLmpzIj48L3NjcmlwdD4KKyAgICAgICAg
PHNjcmlwdCBzcmM9Im5vZGVfbW9kdWxlcy9hbmd1bGFyLXJlc291cmNlL2FuZ3VsYXItcmVzb3Vy
Y2UuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0ianMvYXBwLmpzIj48L3Njcmlw
dD4KKyAgICAgICAgPHNjcmlwdCBzcmM9ImpzL2NvbnRyb2xsZXJzL3RvZG9DdHJsLmpzIj48L3Nj
cmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9ImpzL3NlcnZpY2VzL3RvZG9TdG9yYWdlLmpzIj48
L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9ImpzL2RpcmVjdGl2ZXMvdG9kb0ZvY3VzLmpz
Ij48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9ImpzL2RpcmVjdGl2ZXMvdG9kb0VzY2Fw
ZS5qcyI+PC9zY3JpcHQ+CiAgICAgPC9ib2R5PgogPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvYW5ndWxhcmpzL2pzL2FwcC5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9qcy9hcHAu
anMKaW5kZXggODIzZmU3OTgzMTQ5MWNkNWYwMTY1MGU3MTk3Yzg0NTE3NmYxMGI0OS4uNWYzMGVh
M2ExMTk5NTEwOTg0NTBhNTZkYWQ5NzFlYTQxMTI5Y2RhMiAxMDA2NDQKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvYW5ndWxhcmpzL2pzL2FwcC5qcworKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvanMvYXBw
LmpzCkBAIC0xLDEwICsxLDMyIEBACiAvKmdsb2JhbCBhbmd1bGFyICovCi0vKmpzaGludCB1bnVz
ZWQ6ZmFsc2UgKi8KLSd1c2Ugc3RyaWN0JzsKIAogLyoqCiAgKiBUaGUgbWFpbiBUb2RvTVZDIGFw
cCBtb2R1bGUKICAqCiAgKiBAdHlwZSB7YW5ndWxhci5Nb2R1bGV9CiAgKi8KLXZhciB0b2RvbXZj
ID0gYW5ndWxhci5tb2R1bGUoJ3RvZG9tdmMnLCBbXSk7Cithbmd1bGFyLm1vZHVsZSgndG9kb212
YycsIFsnbmdSb3V0ZScsICduZ1Jlc291cmNlJ10pCisgICAgLmNvbmZpZyhmdW5jdGlvbiAoJHJv
dXRlUHJvdmlkZXIpIHsKKyAgICAgICAgJ3VzZSBzdHJpY3QnOworCisgICAgICAgIHZhciByb3V0
ZUNvbmZpZyA9IHsKKyAgICAgICAgICAgIGNvbnRyb2xsZXI6ICdUb2RvQ3RybCcsCisgICAgICAg
ICAgICB0ZW1wbGF0ZVVybDogJ3RvZG9tdmMtaW5kZXguaHRtbCcsCisgICAgICAgICAgICByZXNv
bHZlOiB7CisgICAgICAgICAgICAgICAgc3RvcmU6IGZ1bmN0aW9uICh0b2RvU3RvcmFnZSkgewor
ICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGNvcnJlY3QgbW9kdWxlIChBUEkgb3IgbG9j
YWxTdG9yYWdlKS4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvZG9TdG9yYWdlLnRoZW4o
ZnVuY3Rpb24gKG1vZHVsZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmdldCgp
OyAvLyBGZXRjaCB0aGUgdG9kbyByZWNvcmRzIGluIHRoZSBiYWNrZ3JvdW5kLgorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZTsKKyAgICAgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgICRy
b3V0ZVByb3ZpZGVyCisgICAgICAgICAgICAud2hlbignLycsIHJvdXRlQ29uZmlnKQorICAgICAg
ICAgICAgLndoZW4oJy86c3RhdHVzJywgcm91dGVDb25maWcpCisgICAgICAgICAgICAub3RoZXJ3
aXNlKHsKKyAgICAgICAgICAgICAgICByZWRpcmVjdFRvOiAnLycKKyAgICAgICAgICAgIH0pOwor
ICAgIH0pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2pzL2NvbnRyb2xsZXJz
L3RvZG9DdHJsLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2pzL2NvbnRyb2xsZXJzL3RvZG9D
dHJsLmpzCmluZGV4IDQ5MGEyZjVjOTUzZTg3NDBiODJlMmFmM2FhN2ZkNjc4NmU3ZTgyZDAuLmEz
OWQ1YWVjOGMyNDM0MWRiMDM2Y2UwYTUwYzQxNmUxMjI3MmY1ZmEgMTAwNjQ0Ci0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL2FuZ3VsYXJqcy9qcy9jb250cm9sbGVycy90b2RvQ3RybC5qcworKysgYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9hbmd1bGFyanMvanMvY29udHJvbGxlcnMvdG9kb0N0cmwuanMKQEAgLTEsODUgKzEsMTI2
IEBACi0vKmdsb2JhbCB0b2RvbXZjLCBhbmd1bGFyICovCi0ndXNlIHN0cmljdCc7CisvKmdsb2Jh
bCBhbmd1bGFyICovCiAKIC8qKgogICogVGhlIG1haW4gY29udHJvbGxlciBmb3IgdGhlIGFwcC4g
VGhlIGNvbnRyb2xsZXI6CiAgKiAtIHJldHJpZXZlcyBhbmQgcGVyc2lzdHMgdGhlIG1vZGVsIHZp
YSB0aGUgdG9kb1N0b3JhZ2Ugc2VydmljZQogICogLSBleHBvc2VzIHRoZSBtb2RlbCB0byB0aGUg
dGVtcGxhdGUgYW5kIHByb3ZpZGVzIGV2ZW50IGhhbmRsZXJzCiAgKi8KLXRvZG9tdmMuY29udHJv
bGxlcignVG9kb0N0cmwnLCBmdW5jdGlvbiBUb2RvQ3RybCgkc2NvcGUsICRsb2NhdGlvbiwgdG9k
b1N0b3JhZ2UsIGZpbHRlckZpbHRlcikgewotICAgIHZhciB0b2RvcyA9ICRzY29wZS50b2RvcyA9
IHRvZG9TdG9yYWdlLmdldCgpOwotCi0gICAgJHNjb3BlLm5ld1RvZG8gPSAnJzsKLSAgICAkc2Nv
cGUuZWRpdGVkVG9kbyA9IG51bGw7Ci0KLSAgICAkc2NvcGUuJHdhdGNoKCd0b2RvcycsIGZ1bmN0
aW9uIChuZXdWYWx1ZSwgb2xkVmFsdWUpIHsKLSAgICAkc2NvcGUucmVtYWluaW5nQ291bnQgPSBm
aWx0ZXJGaWx0ZXIodG9kb3MsIHsgY29tcGxldGVkOiBmYWxzZSB9KS5sZW5ndGg7Ci0gICAgJHNj
b3BlLmNvbXBsZXRlZENvdW50ID0gdG9kb3MubGVuZ3RoIC0gJHNjb3BlLnJlbWFpbmluZ0NvdW50
OwotICAgICRzY29wZS5hbGxDaGVja2VkID0gISRzY29wZS5yZW1haW5pbmdDb3VudDsKLSAgICBp
ZiAobmV3VmFsdWUgIT09IG9sZFZhbHVlKSB7IC8vIFRoaXMgcHJldmVudHMgdW5uZWVkZWQgY2Fs
bHMgdG8gdGhlIGxvY2FsIHN0b3JhZ2UKLSAgICB0b2RvU3RvcmFnZS5wdXQodG9kb3MpOwotICAg
IH0KLSAgICB9LCB0cnVlKTsKLQotICAgIGlmICgkbG9jYXRpb24ucGF0aCgpID09PSAnJykgewot
ICAgICRsb2NhdGlvbi5wYXRoKCcvJyk7Ci0gICAgfQotCi0gICAgJHNjb3BlLmxvY2F0aW9uID0g
JGxvY2F0aW9uOwotCi0gICAgJHNjb3BlLiR3YXRjaCgnbG9jYXRpb24ucGF0aCgpJywgZnVuY3Rp
b24gKHBhdGgpIHsKLSAgICAkc2NvcGUuc3RhdHVzRmlsdGVyID0gKHBhdGggPT09ICcvYWN0aXZl
JykgPwotICAgIHsgY29tcGxldGVkOiBmYWxzZSB9IDogKHBhdGggPT09ICcvY29tcGxldGVkJykg
PwotICAgIHsgY29tcGxldGVkOiB0cnVlIH0gOiBudWxsOworYW5ndWxhci5tb2R1bGUoJ3RvZG9t
dmMnKQorICAgIC5jb250cm9sbGVyKCdUb2RvQ3RybCcsIGZ1bmN0aW9uIFRvZG9DdHJsKCRzY29w
ZSwgJHJvdXRlUGFyYW1zLCAkZmlsdGVyLCBzdG9yZSkgeworICAgICAgICAndXNlIHN0cmljdCc7
CisKKyAgICAgICAgdmFyIHRvZG9zID0gJHNjb3BlLnRvZG9zID0gc3RvcmUudG9kb3M7CisKKyAg
ICAgICAgJHNjb3BlLm5ld1RvZG8gPSAnJzsKKyAgICAgICAgJHNjb3BlLmVkaXRlZFRvZG8gPSBu
dWxsOworICAgICAgICAkc2NvcGUuc3RhdHVzID0gJyc7CisKKyAgICAgICAgJHNjb3BlLiR3YXRj
aCgndG9kb3MnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAkc2NvcGUucmVtYWluaW5nQ291
bnQgPSAkZmlsdGVyKCdmaWx0ZXInKSh0b2RvcywgeyBjb21wbGV0ZWQ6IGZhbHNlIH0pLmxlbmd0
aDsKKyAgICAgICAgICAgICRzY29wZS5jb21wbGV0ZWRDb3VudCA9IHRvZG9zLmxlbmd0aCAtICRz
Y29wZS5yZW1haW5pbmdDb3VudDsKKyAgICAgICAgICAgICRzY29wZS5hbGxDaGVja2VkID0gISRz
Y29wZS5yZW1haW5pbmdDb3VudDsKKyAgICAgICAgfSwgdHJ1ZSk7CisKKyAgICAgICAgLy8gTW9u
aXRvciB0aGUgY3VycmVudCByb3V0ZSBmb3IgY2hhbmdlcyBhbmQgYWRqdXN0IHRoZSBmaWx0ZXIg
YWNjb3JkaW5nbHkuCisgICAgICAgICRzY29wZS4kb24oJyRyb3V0ZUNoYW5nZVN1Y2Nlc3MnLCBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgc3RhdHVzID0gJHNjb3BlLnN0YXR1cyA9ICRy
b3V0ZVBhcmFtcy5zdGF0dXMgfHwgJyc7CisgICAgICAgICAgICAkc2NvcGUuc3RhdHVzRmlsdGVy
ID0gKHN0YXR1cyA9PT0gJ2FjdGl2ZScpID8KKyAgICAgICAgICAgICAgICB7IGNvbXBsZXRlZDog
ZmFsc2UgfSA6IChzdGF0dXMgPT09ICdjb21wbGV0ZWQnKSA/CisgICAgICAgICAgICAgICAgeyBj
b21wbGV0ZWQ6IHRydWUgfSA6IHt9OworICAgICAgICB9KTsKKworICAgICAgICAkc2NvcGUuYWRk
VG9kbyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBuZXdUb2RvID0geworICAgICAg
ICAgICAgICAgIHRpdGxlOiAkc2NvcGUubmV3VG9kby50cmltKCksCisgICAgICAgICAgICAgICAg
Y29tcGxldGVkOiBmYWxzZQorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKCFuZXdU
b2RvLnRpdGxlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAkc2NvcGUuc2F2aW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIHN0b3JlLmluc2Vy
dChuZXdUb2RvKQorICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIHN1Y2Nlc3MoKSB7Cisg
ICAgICAgICAgICAgICAgICAgICRzY29wZS5uZXdUb2RvID0gJyc7CisgICAgICAgICAgICAgICAg
fSkKKyAgICAgICAgICAgICAgICAuZmluYWxseShmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAg
ICAgICAgICRzY29wZS5zYXZpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfTsKKworICAgICAgICAkc2NvcGUuZWRpdFRvZG8gPSBmdW5jdGlvbiAodG9kbykgeworICAg
ICAgICAgICAgJHNjb3BlLmVkaXRlZFRvZG8gPSB0b2RvOworICAgICAgICAgICAgLy8gQ2xvbmUg
dGhlIG9yaWdpbmFsIHRvZG8gdG8gcmVzdG9yZSBpdCBvbiBkZW1hbmQuCisgICAgICAgICAgICAk
c2NvcGUub3JpZ2luYWxUb2RvID0gYW5ndWxhci5leHRlbmQoe30sIHRvZG8pOworICAgICAgICB9
OworCisgICAgICAgICRzY29wZS5zYXZlRWRpdHMgPSBmdW5jdGlvbiAodG9kbywgZXZlbnQpIHsK
KyAgICAgICAgICAgIC8vIEJsdXIgZXZlbnRzIGFyZSBhdXRvbWF0aWNhbGx5IHRyaWdnZXJlZCBh
ZnRlciB0aGUgZm9ybSBzdWJtaXQgZXZlbnQuCisgICAgICAgICAgICAvLyBUaGlzIGRvZXMgc29t
ZSB1bmZvcnR1bmF0ZSBsb2dpYyBoYW5kbGluZyB0byBwcmV2ZW50IHNhdmluZyB0d2ljZS4KKyAg
ICAgICAgICAgIGlmIChldmVudCA9PT0gJ2JsdXInICYmICRzY29wZS5zYXZlRXZlbnQgPT09ICdz
dWJtaXQnKSB7CisgICAgICAgICAgICAgICAgJHNjb3BlLnNhdmVFdmVudCA9IG51bGw7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAkc2NvcGUu
c2F2ZUV2ZW50ID0gZXZlbnQ7CisKKyAgICAgICAgICAgIGlmICgkc2NvcGUucmV2ZXJ0ZWQpIHsK
KyAgICAgICAgICAgICAgICAvLyBUb2RvIGVkaXRzIHdlcmUgcmV2ZXJ0ZWQtLSBkb24ndCBzYXZl
LgorICAgICAgICAgICAgICAgICRzY29wZS5yZXZlcnRlZCA9IG51bGw7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0b2RvLnRpdGxlID0gdG9k
by50aXRsZS50cmltKCk7CisKKyAgICAgICAgICAgIGlmICh0b2RvLnRpdGxlID09PSAkc2NvcGUu
b3JpZ2luYWxUb2RvLnRpdGxlKSB7CisgICAgICAgICAgICAgICAgJHNjb3BlLmVkaXRlZFRvZG8g
PSBudWxsOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgc3RvcmVbdG9kby50aXRsZSA/ICdwdXQnIDogJ2RlbGV0ZSddKHRvZG8pCisgICAgICAg
ICAgICAgICAgLnRoZW4oZnVuY3Rpb24gc3VjY2VzcygpIHt9LCBmdW5jdGlvbiBlcnJvcigpIHsK
KyAgICAgICAgICAgICAgICAgICAgdG9kby50aXRsZSA9ICRzY29wZS5vcmlnaW5hbFRvZG8udGl0
bGU7CisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAuZmluYWxseShmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICAgICAgICAgICRzY29wZS5lZGl0ZWRUb2RvID0gbnVsbDsKKyAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfTsKKworICAgICAgICAkc2NvcGUucmV2ZXJ0RWRp
dHMgPSBmdW5jdGlvbiAodG9kbykgeworICAgICAgICAgICAgdG9kb3NbdG9kb3MuaW5kZXhPZih0
b2RvKV0gPSAkc2NvcGUub3JpZ2luYWxUb2RvOworICAgICAgICAgICAgJHNjb3BlLmVkaXRlZFRv
ZG8gPSBudWxsOworICAgICAgICAgICAgJHNjb3BlLm9yaWdpbmFsVG9kbyA9IG51bGw7CisgICAg
ICAgICAgICAkc2NvcGUucmV2ZXJ0ZWQgPSB0cnVlOworICAgICAgICB9OworCisgICAgICAgICRz
Y29wZS5yZW1vdmVUb2RvID0gZnVuY3Rpb24gKHRvZG8pIHsKKyAgICAgICAgICAgIHN0b3JlLmRl
bGV0ZSh0b2RvKTsKKyAgICAgICAgfTsKKworICAgICAgICAkc2NvcGUuc2F2ZVRvZG8gPSBmdW5j
dGlvbiAodG9kbykgeworICAgICAgICAgICAgc3RvcmUucHV0KHRvZG8pOworICAgICAgICB9Owor
CisgICAgICAgICRzY29wZS50b2dnbGVDb21wbGV0ZWQgPSBmdW5jdGlvbiAodG9kbywgY29tcGxl
dGVkKSB7CisgICAgICAgICAgICBpZiAoYW5ndWxhci5pc0RlZmluZWQoY29tcGxldGVkKSkgewor
ICAgICAgICAgICAgICAgIHRvZG8uY29tcGxldGVkID0gY29tcGxldGVkOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgc3RvcmUucHV0KHRvZG8sIHRvZG9zLmluZGV4T2YodG9kbykpCisgICAg
ICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gc3VjY2VzcygpIHt9LCBmdW5jdGlvbiBlcnJvcigp
IHsKKyAgICAgICAgICAgICAgICAgICAgdG9kby5jb21wbGV0ZWQgPSAhdG9kby5jb21wbGV0ZWQ7
CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH07CisKKyAgICAgICAgJHNjb3BlLmNsZWFy
Q29tcGxldGVkVG9kb3MgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBzdG9yZS5jbGVhckNv
bXBsZXRlZCgpOworICAgICAgICB9OworCisgICAgICAgICRzY29wZS5tYXJrQWxsID0gZnVuY3Rp
b24gKGNvbXBsZXRlZCkgeworICAgICAgICAgICAgdG9kb3MuZm9yRWFjaChmdW5jdGlvbiAodG9k
bykgeworICAgICAgICAgICAgICAgIGlmICh0b2RvLmNvbXBsZXRlZCAhPT0gY29tcGxldGVkKSB7
CisgICAgICAgICAgICAgICAgICAgICRzY29wZS50b2dnbGVDb21wbGV0ZWQodG9kbywgY29tcGxl
dGVkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfTsKICAg
ICB9KTsKLQotICAgICRzY29wZS5hZGRUb2RvID0gZnVuY3Rpb24gKCkgewotICAgIHZhciBuZXdU
b2RvID0gJHNjb3BlLm5ld1RvZG8udHJpbSgpOwotICAgIGlmICghbmV3VG9kby5sZW5ndGgpIHsK
LSAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdG9kb3MucHVzaCh7Ci0gICAgdGl0bGU6IG5ld1Rv
ZG8sCi0gICAgY29tcGxldGVkOiBmYWxzZQotICAgIH0pOwotCi0gICAgJHNjb3BlLm5ld1RvZG8g
PSAnJzsKLSAgICB9OwotCi0gICAgJHNjb3BlLmVkaXRUb2RvID0gZnVuY3Rpb24gKHRvZG8pIHsK
LSAgICAkc2NvcGUuZWRpdGVkVG9kbyA9IHRvZG87Ci0gICAgLy8gQ2xvbmUgdGhlIG9yaWdpbmFs
IHRvZG8gdG8gcmVzdG9yZSBpdCBvbiBkZW1hbmQuCi0gICAgJHNjb3BlLm9yaWdpbmFsVG9kbyA9
IGFuZ3VsYXIuZXh0ZW5kKHt9LCB0b2RvKTsKLSAgICB9OwotCi0gICAgJHNjb3BlLmRvbmVFZGl0
aW5nID0gZnVuY3Rpb24gKHRvZG8pIHsKLSAgICAkc2NvcGUuZWRpdGVkVG9kbyA9IG51bGw7Ci0g
ICAgdG9kby50aXRsZSA9IHRvZG8udGl0bGUudHJpbSgpOwotCi0gICAgaWYgKCF0b2RvLnRpdGxl
KSB7Ci0gICAgJHNjb3BlLnJlbW92ZVRvZG8odG9kbyk7Ci0gICAgfQotICAgIH07Ci0KLSAgICAk
c2NvcGUucmV2ZXJ0RWRpdGluZyA9IGZ1bmN0aW9uICh0b2RvKSB7Ci0gICAgdG9kb3NbdG9kb3Mu
aW5kZXhPZih0b2RvKV0gPSAkc2NvcGUub3JpZ2luYWxUb2RvOwotICAgICRzY29wZS5kb25lRWRp
dGluZygkc2NvcGUub3JpZ2luYWxUb2RvKTsKLSAgICB9OwotCi0gICAgJHNjb3BlLnJlbW92ZVRv
ZG8gPSBmdW5jdGlvbiAodG9kbykgewotICAgIHRvZG9zLnNwbGljZSh0b2Rvcy5pbmRleE9mKHRv
ZG8pLCAxKTsKLSAgICB9OwotCi0gICAgJHNjb3BlLmNsZWFyQ29tcGxldGVkVG9kb3MgPSBmdW5j
dGlvbiAoKSB7Ci0gICAgJHNjb3BlLnRvZG9zID0gdG9kb3MgPSB0b2Rvcy5maWx0ZXIoZnVuY3Rp
b24gKHZhbCkgewotICAgIHJldHVybiAhdmFsLmNvbXBsZXRlZDsKLSAgICB9KTsKLSAgICB9Owot
Ci0gICAgJHNjb3BlLm1hcmtBbGwgPSBmdW5jdGlvbiAoY29tcGxldGVkKSB7Ci0gICAgdG9kb3Mu
Zm9yRWFjaChmdW5jdGlvbiAodG9kbykgewotICAgIHRvZG8uY29tcGxldGVkID0gY29tcGxldGVk
OwotICAgIH0pOwotICAgIH07Ci19KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJq
cy9qcy9kaXJlY3RpdmVzL3RvZG9CbHVyLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2pzL2Rp
cmVjdGl2ZXMvdG9kb0JsdXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4ZTAz
MGFmYmU0NWIwNzQ2MTQ1ZDU3YzkyMThmZGI4YTU2ODE4ZGUuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2pzL2RpcmVj
dGl2ZXMvdG9kb0JsdXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0vKmdsb2Jh
bCB0b2RvbXZjICovCi0ndXNlIHN0cmljdCc7Ci0KLS8qKgotICogRGlyZWN0aXZlIHRoYXQgZXhl
Y3V0ZXMgYW4gZXhwcmVzc2lvbiB3aGVuIHRoZSBlbGVtZW50IGl0IGlzIGFwcGxpZWQgdG8gbG9z
ZXMgZm9jdXMKLSAqLwotdG9kb212Yy5kaXJlY3RpdmUoJ3RvZG9CbHVyJywgZnVuY3Rpb24gKCkg
ewotICAgIHJldHVybiBmdW5jdGlvbiAoc2NvcGUsIGVsZW0sIGF0dHJzKSB7Ci0gICAgZWxlbS5i
aW5kKCdibHVyJywgZnVuY3Rpb24gKCkgewotICAgIHNjb3BlLiRhcHBseShhdHRycy50b2RvQmx1
cik7Ci0gICAgfSk7Ci0gICAgfTsKLX0pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxh
cmpzL2pzL2RpcmVjdGl2ZXMvdG9kb0VzY2FwZS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9q
cy9kaXJlY3RpdmVzL3RvZG9Fc2NhcGUuanMKaW5kZXggZWQxNWZlYzBjZmY2MTlhMTkyOGFhMzZi
YzI4Y2UxMzY4YTFiNWU2Zi4uOTQ0YjUyYzVmMzViNzcyNjliOTdjZDY2ZDBhOGMxZDU5YTk5MjI5
YyAxMDA2NDQKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2pzL2RpcmVjdGl2ZXMvdG9kb0Vz
Y2FwZS5qcworKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvanMvZGlyZWN0aXZlcy90b2RvRXNj
YXBlLmpzCkBAIC0xLDE4ICsxLDI0IEBACi0vKmdsb2JhbCB0b2RvbXZjICovCi0ndXNlIHN0cmlj
dCc7CisvKmdsb2JhbCBhbmd1bGFyICovCiAKIC8qKgogICogRGlyZWN0aXZlIHRoYXQgZXhlY3V0
ZXMgYW4gZXhwcmVzc2lvbiB3aGVuIHRoZSBlbGVtZW50IGl0IGlzIGFwcGxpZWQgdG8gZ2V0cwog
ICogYW4gYGVzY2FwZWAga2V5ZG93biBldmVudC4KICAqLwotdG9kb212Yy5kaXJlY3RpdmUoJ3Rv
ZG9Fc2NhcGUnLCBmdW5jdGlvbiAoKSB7Ci0gICAgdmFyIEVTQ0FQRV9LRVkgPSAyNzsKLSAgICBy
ZXR1cm4gZnVuY3Rpb24gKHNjb3BlLCBlbGVtLCBhdHRycykgewotICAgIGVsZW0uYmluZCgna2V5
ZG93bicsIGZ1bmN0aW9uIChldmVudCkgewotICAgIGlmIChldmVudC5rZXlDb2RlID09PSBFU0NB
UEVfS0VZKSB7Ci0gICAgc2NvcGUuJGFwcGx5KGF0dHJzLnRvZG9Fc2NhcGUpOwotICAgIH0KLSAg
ICB9KTsKLSAgICB9OwotfSk7Cithbmd1bGFyLm1vZHVsZSgndG9kb212YycpCisgICAgLmRpcmVj
dGl2ZSgndG9kb0VzY2FwZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgJ3VzZSBzdHJpY3QnOwor
CisgICAgICAgIHZhciBFU0NBUEVfS0VZID0gMjc7CiAKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
IChzY29wZSwgZWxlbSwgYXR0cnMpIHsKKyAgICAgICAgICAgIGVsZW0uYmluZCgna2V5ZG93bics
IGZ1bmN0aW9uIChldmVudCkgeworICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09
PSBFU0NBUEVfS0VZKSB7CisgICAgICAgICAgICAgICAgICAgIHNjb3BlLiRhcHBseShhdHRycy50
b2RvRXNjYXBlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKworICAgICAg
ICAgICAgc2NvcGUuJG9uKCckZGVzdHJveScsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAg
ICBlbGVtLnVuYmluZCgna2V5ZG93bicpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH07Cisg
ICAgfSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvanMvZGlyZWN0aXZlcy90
b2RvRm9jdXMuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvanMvZGlyZWN0aXZlcy90b2RvRm9j
dXMuanMKaW5kZXggN2M5ZGMwOTU4ZTc2MjA1NWQwNGNhNGFjNDU4ZjYzNGM0ZmU2Mzg1Ny4uZTFl
NmMyMWM5MDBlNjJhMTRiY2ZiNTZmNWEyNWI4N2M0Yzk2YjlmMiAxMDA2NDQKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvYW5ndWxhcmpzL2pzL2RpcmVjdGl2ZXMvdG9kb0ZvY3VzLmpzCisrKyBiL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL2FuZ3VsYXJqcy9qcy9kaXJlY3RpdmVzL3RvZG9Gb2N1cy5qcwpAQCAtMSwxNyArMSwyMCBA
QAotLypnbG9iYWwgdG9kb212YyAqLwotJ3VzZSBzdHJpY3QnOworLypnbG9iYWwgYW5ndWxhciAq
LwogCiAvKioKLSAqIERpcmVjdGl2ZSB0aGF0IHBsYWNlcyBmb2N1cyBvbiB0aGUgZWxlbWVudCBp
dCBpcyBhcHBsaWVkIHRvIHdoZW4gdGhlIGV4cHJlc3Npb24gaXQgYmluZHMgdG8gZXZhbHVhdGVz
IHRvIHRydWUKKyAqIERpcmVjdGl2ZSB0aGF0IHBsYWNlcyBmb2N1cyBvbiB0aGUgZWxlbWVudCBp
dCBpcyBhcHBsaWVkIHRvIHdoZW4gdGhlCisgKiBleHByZXNzaW9uIGl0IGJpbmRzIHRvIGV2YWx1
YXRlcyB0byB0cnVlCiAgKi8KLXRvZG9tdmMuZGlyZWN0aXZlKCd0b2RvRm9jdXMnLCBmdW5jdGlv
biB0b2RvRm9jdXMoJHRpbWVvdXQpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24gKHNjb3BlLCBlbGVt
LCBhdHRycykgewotICAgIHNjb3BlLiR3YXRjaChhdHRycy50b2RvRm9jdXMsIGZ1bmN0aW9uIChu
ZXdWYWwpIHsKLSAgICBpZiAobmV3VmFsKSB7Ci0gICAgJHRpbWVvdXQoZnVuY3Rpb24gKCkgewot
ICAgIGVsZW1bMF0uZm9jdXMoKTsKLSAgICB9LCAwLCBmYWxzZSk7Ci0gICAgfQorYW5ndWxhci5t
b2R1bGUoJ3RvZG9tdmMnKQorICAgIC5kaXJlY3RpdmUoJ3RvZG9Gb2N1cycsIGZ1bmN0aW9uIHRv
ZG9Gb2N1cygkdGltZW91dCkgeworICAgICAgICAndXNlIHN0cmljdCc7CisKKyAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uIChzY29wZSwgZWxlbSwgYXR0cnMpIHsKKyAgICAgICAgICAgIHNjb3BlLiR3
YXRjaChhdHRycy50b2RvRm9jdXMsIGZ1bmN0aW9uIChuZXdWYWwpIHsKKyAgICAgICAgICAgICAg
ICBpZiAobmV3VmFsKSB7CisgICAgICAgICAgICAgICAgICAgICR0aW1lb3V0KGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1bMF0uZm9jdXMoKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSwgMCwgZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0p
OworICAgICAgICB9OwogICAgIH0pOwotICAgIH07Ci19KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL2FuZ3VsYXJqcy9qcy9zZXJ2aWNlcy90b2RvU3RvcmFnZS5qcyBiL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2Fu
Z3VsYXJqcy9qcy9zZXJ2aWNlcy90b2RvU3RvcmFnZS5qcwppbmRleCA3NjdiN2IyMmVkM2MxNGUx
ODcyNTYzYzQ4OTA4NWU4NTZlNTgxZmZmLi5iNjhlNTk2MjhkMWQxNmZmMGFjZjVhMTcyZGUxYTkz
NDA4NjBhYzFjIDEwMDY0NAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvanMvc2VydmljZXMv
dG9kb1N0b3JhZ2UuanMKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL2pzL3NlcnZpY2VzL3Rv
ZG9TdG9yYWdlLmpzCkBAIC0xLDI0ICsxLDk2IEBACi0vKmdsb2JhbCB0b2RvbXZjICovCi0ndXNl
IHN0cmljdCc7CisvKmdsb2JhbCBhbmd1bGFyICovCiAKIC8qKgotICogU2VydmljZXMgdGhhdCBw
ZXJzaXN0cyBhbmQgcmV0cmlldmVzIFRPRE9zIGZyb20gbG9jYWxTdG9yYWdlCisgKiBTZXJ2aWNl
cyB0aGF0IHBlcnNpc3RzIGFuZCByZXRyaWV2ZXMgdG9kb3MgZnJvbSBtZW1vcnkgb3IgYSBiYWNr
ZW5kIEFQSQorICogaWYgYXZhaWxhYmxlLgorICoKKyAqIFRoZXkgYm90aCBmb2xsb3cgdGhlIHNh
bWUgQVBJLCByZXR1cm5pbmcgcHJvbWlzZXMgZm9yIGFsbCBjaGFuZ2VzIHRvIHRoZQorICogbW9k
ZWwuCiAgKi8KLXRvZG9tdmMuZmFjdG9yeSgndG9kb1N0b3JhZ2UnLCBmdW5jdGlvbiAoKSB7Ci0g
ICAgdmFyIFNUT1JBR0VfSUQgPSAndG9kb3MtYW5ndWxhcmpzJzsKLQotICAgIHZhciBsb2NhbFN0
b3JhZ2UgPSB7Ci0gICAgICAgIGdldEl0ZW06IGZ1bmN0aW9uIChpZCkgeyB0aGlzW2lkXTsgfSwK
LSAgICAgICAgc2V0SXRlbTogZnVuY3Rpb24gKGlkLCB2YWx1ZSkgeyB0aGlzW2lkXSA9IHZhbHVl
OyB9Ci0gICAgfTsKLQotICAgIHJldHVybiB7Ci0gICAgZ2V0OiBmdW5jdGlvbiAoKSB7Ci0gICAg
cmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oU1RPUkFHRV9JRCkgfHwgJ1td
Jyk7Ci0gICAgfSwKLQotICAgIHB1dDogZnVuY3Rpb24gKHRvZG9zKSB7Ci0gICAgbG9jYWxTdG9y
YWdlLnNldEl0ZW0oU1RPUkFHRV9JRCwgSlNPTi5zdHJpbmdpZnkodG9kb3MpKTsKLSAgICB9Ci0g
ICAgfTsKLX0pOworYW5ndWxhci5tb2R1bGUoJ3RvZG9tdmMnKQorICAgIC5mYWN0b3J5KCd0b2Rv
U3RvcmFnZScsIGZ1bmN0aW9uICgkaHR0cCwgJGluamVjdG9yKSB7CisgICAgICAgICd1c2Ugc3Ry
aWN0JzsKKyAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICByZXR1cm4gJGluamVjdG9yLmdldCgnbG9jYWxDYWNoZScpOworICAgICAg
ICB9KTsKKyAgICB9KQorCisgICAgLmZhY3RvcnkoJ2xvY2FsQ2FjaGUnLCBmdW5jdGlvbiAoJHEp
IHsKKyAgICAgICAgJ3VzZSBzdHJpY3QnOworCisgICAgICAgIHZhciBTVE9SQUdFX0lEID0gJ3Rv
ZG9zLWFuZ3VsYXJqcyc7CisKKyAgICAgICAgdmFyIHN0b3JlID0geworICAgICAgICAgICAgdG9k
b3M6IFtdLAorICAgICAgICAgICAgY2FjaGU6IFtdLAorCisgICAgICAgICAgICBfZ2V0RnJvbUxv
Y2FsQ2FjaGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAvLyByZXR1cm4gSlNPTi5w
YXJzZSh0aGlzLmNhY2hlW1NUT1JBR0VfSURdIHx8ICdbXScpOworICAgICAgICAgICAgICAgIHJl
dHVybiBbXTsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIF9zYXZlVG9Mb2NhbENhY2hl
OiBmdW5jdGlvbiAodG9kb3MpIHsKKyAgICAgICAgICAgICAgICAvLyB0aGlzLmNhY2hlW1NUT1JB
R0VfSURdID0gSlNPTi5zdHJpbmdpZnkodG9kb3MpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIGNsZWFyQ29tcGxldGVkOiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICAgICAgdmFyIGRlZmVycmVkID0gJHEuZGVmZXIoKTsKKworICAgICAg
ICAgICAgICAgIHZhciBpbmNvbXBsZXRlVG9kb3MgPSBzdG9yZS50b2Rvcy5maWx0ZXIoZnVuY3Rp
b24gKHRvZG8pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICF0b2RvLmNvbXBsZXRlZDsK
KyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGFuZ3VsYXIuY29weShpbmNv
bXBsZXRlVG9kb3MsIHN0b3JlLnRvZG9zKTsKKworICAgICAgICAgICAgICAgIHN0b3JlLl9zYXZl
VG9Mb2NhbENhY2hlKHN0b3JlLnRvZG9zKTsKKyAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNv
bHZlKHN0b3JlLnRvZG9zKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZC5wcm9t
aXNlOworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgZGVsZXRlOiBmdW5jdGlvbiAodG9k
bykgeworICAgICAgICAgICAgICAgIHZhciBkZWZlcnJlZCA9ICRxLmRlZmVyKCk7CisKKyAgICAg
ICAgICAgICAgICBzdG9yZS50b2Rvcy5zcGxpY2Uoc3RvcmUudG9kb3MuaW5kZXhPZih0b2RvKSwg
MSk7CisKKyAgICAgICAgICAgICAgICBzdG9yZS5fc2F2ZVRvTG9jYWxDYWNoZShzdG9yZS50b2Rv
cyk7CisgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZShzdG9yZS50b2Rvcyk7CisKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQucHJvbWlzZTsKKyAgICAgICAgICAgIH0sCisK
KyAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHZhciBkZWZl
cnJlZCA9ICRxLmRlZmVyKCk7CisKKyAgICAgICAgICAgICAgICBhbmd1bGFyLmNvcHkoc3RvcmUu
X2dldEZyb21Mb2NhbENhY2hlKCksIHN0b3JlLnRvZG9zKTsKKyAgICAgICAgICAgICAgICBkZWZl
cnJlZC5yZXNvbHZlKHN0b3JlLnRvZG9zKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBkZWZl
cnJlZC5wcm9taXNlOworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgaW5zZXJ0OiBmdW5j
dGlvbiAodG9kbykgeworICAgICAgICAgICAgICAgIHZhciBkZWZlcnJlZCA9ICRxLmRlZmVyKCk7
CisKKyAgICAgICAgICAgICAgICBzdG9yZS50b2Rvcy5wdXNoKHRvZG8pOworCisgICAgICAgICAg
ICAgICAgc3RvcmUuX3NhdmVUb0xvY2FsQ2FjaGUoc3RvcmUudG9kb3MpOworICAgICAgICAgICAg
ICAgIGRlZmVycmVkLnJlc29sdmUoc3RvcmUudG9kb3MpOworCisgICAgICAgICAgICAgICAgcmV0
dXJuIGRlZmVycmVkLnByb21pc2U7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICBwdXQ6
IGZ1bmN0aW9uICh0b2RvLCBpbmRleCkgeworICAgICAgICAgICAgICAgIHZhciBkZWZlcnJlZCA9
ICRxLmRlZmVyKCk7CisKKyAgICAgICAgICAgICAgICBzdG9yZS50b2Rvc1tpbmRleF0gPSB0b2Rv
OworCisgICAgICAgICAgICAgICAgc3RvcmUuX3NhdmVUb0xvY2FsQ2FjaGUoc3RvcmUudG9kb3Mp
OworICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmUoc3RvcmUudG9kb3MpOworCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkLnByb21pc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgIH07CisKKyAgICAgICAgcmV0dXJuIHN0b3JlOworICAgIH0pOwpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvYW5ndWxhcmpzL25vZGVfbW9kdWxlcy9hbmd1bGFyLXJlc291cmNlL2FuZ3VsYXIt
cmVzb3VyY2UuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvbm9kZV9tb2R1bGVzL2FuZ3VsYXIt
cmVzb3VyY2UvYW5ndWxhci1yZXNvdXJjZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YzQxYzM5YTU3YjBmNGJh
YjYzNmVmMjVhMTVlOGJiMzVlYzlkMDdlCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
YW5ndWxhcmpzL25vZGVfbW9kdWxlcy9hbmd1bGFyLXJlc291cmNlL2FuZ3VsYXItcmVzb3VyY2Uu
anMKQEAgLTAsMCArMSw4NjEgQEAKKy8qKgorICogQGxpY2Vuc2UgQW5ndWxhckpTIHYxLjUuOQor
ICogKGMpIDIwMTAtMjAxNiBHb29nbGUsIEluYy4gaHR0cDovL2FuZ3VsYXJqcy5vcmcKKyAqIExp
Y2Vuc2U6IE1JVAorICovCisoZnVuY3Rpb24od2luZG93LCBhbmd1bGFyKSB7J3VzZSBzdHJpY3Qn
OworCit2YXIgJHJlc291cmNlTWluRXJyID0gYW5ndWxhci4kJG1pbkVycignJHJlc291cmNlJyk7
CisKKy8vIEhlbHBlciBmdW5jdGlvbnMgYW5kIHJlZ2V4IHRvIGxvb2t1cCBhIGRvdHRlZCBwYXRo
IG9uIGFuIG9iamVjdAorLy8gc3RvcHBpbmcgYXQgdW5kZWZpbmVkL251bGwuICBUaGUgcGF0aCBt
dXN0IGJlIGNvbXBvc2VkIG9mIEFTQ0lJCisvLyBpZGVudGlmaWVycyAoanVzdCBsaWtlICRwYXJz
ZSkKK3ZhciBNRU1CRVJfTkFNRV9SRUdFWCA9IC9eKFwuW2EtekEtWl8kQF1bMC05YS16QS1aXyRA
XSopKyQvOworCitmdW5jdGlvbiBpc1ZhbGlkRG90dGVkUGF0aChwYXRoKSB7CisgIHJldHVybiAo
cGF0aCAhPSBudWxsICYmIHBhdGggIT09ICcnICYmIHBhdGggIT09ICdoYXNPd25Qcm9wZXJ0eScg
JiYKKyAgICAgIE1FTUJFUl9OQU1FX1JFR0VYLnRlc3QoJy4nICsgcGF0aCkpOworfQorCitmdW5j
dGlvbiBsb29rdXBEb3R0ZWRQYXRoKG9iaiwgcGF0aCkgeworICBpZiAoIWlzVmFsaWREb3R0ZWRQ
YXRoKHBhdGgpKSB7CisgICAgdGhyb3cgJHJlc291cmNlTWluRXJyKCdiYWRtZW1iZXInLCAnRG90
dGVkIG1lbWJlciBwYXRoICJAezB9IiBpcyBpbnZhbGlkLicsIHBhdGgpOworICB9CisgIHZhciBr
ZXlzID0gcGF0aC5zcGxpdCgnLicpOworICBmb3IgKHZhciBpID0gMCwgaWkgPSBrZXlzLmxlbmd0
aDsgaSA8IGlpICYmIGFuZ3VsYXIuaXNEZWZpbmVkKG9iaik7IGkrKykgeworICAgIHZhciBrZXkg
PSBrZXlzW2ldOworICAgIG9iaiA9IChvYmogIT09IG51bGwpID8gb2JqW2tleV0gOiB1bmRlZmlu
ZWQ7CisgIH0KKyAgcmV0dXJuIG9iajsKK30KKworLyoqCisgKiBDcmVhdGUgYSBzaGFsbG93IGNv
cHkgb2YgYW4gb2JqZWN0IGFuZCBjbGVhciBvdGhlciBmaWVsZHMgZnJvbSB0aGUgZGVzdGluYXRp
b24KKyAqLworZnVuY3Rpb24gc2hhbGxvd0NsZWFyQW5kQ29weShzcmMsIGRzdCkgeworICBkc3Qg
PSBkc3QgfHwge307CisKKyAgYW5ndWxhci5mb3JFYWNoKGRzdCwgZnVuY3Rpb24odmFsdWUsIGtl
eSkgeworICAgIGRlbGV0ZSBkc3Rba2V5XTsKKyAgfSk7CisKKyAgZm9yICh2YXIga2V5IGluIHNy
YykgeworICAgIGlmIChzcmMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAhKGtleS5jaGFyQXQoMCkg
PT09ICckJyAmJiBrZXkuY2hhckF0KDEpID09PSAnJCcpKSB7CisgICAgICBkc3Rba2V5XSA9IHNy
Y1trZXldOworICAgIH0KKyAgfQorCisgIHJldHVybiBkc3Q7Cit9CisKKy8qKgorICogQG5nZG9j
IG1vZHVsZQorICogQG5hbWUgbmdSZXNvdXJjZQorICogQGRlc2NyaXB0aW9uCisgKgorICogIyBu
Z1Jlc291cmNlCisgKgorICogVGhlIGBuZ1Jlc291cmNlYCBtb2R1bGUgcHJvdmlkZXMgaW50ZXJh
Y3Rpb24gc3VwcG9ydCB3aXRoIFJFU1RmdWwgc2VydmljZXMKKyAqIHZpYSB0aGUgJHJlc291cmNl
IHNlcnZpY2UuCisgKgorICoKKyAqIDxkaXYgZG9jLW1vZHVsZS1jb21wb25lbnRzPSJuZ1Jlc291
cmNlIj48L2Rpdj4KKyAqCisgKiBTZWUge0BsaW5rIG5nUmVzb3VyY2UuJHJlc291cmNlUHJvdmlk
ZXJ9IGFuZCB7QGxpbmsgbmdSZXNvdXJjZS4kcmVzb3VyY2V9IGZvciB1c2FnZS4KKyAqLworCisv
KioKKyAqIEBuZ2RvYyBwcm92aWRlcgorICogQG5hbWUgJHJlc291cmNlUHJvdmlkZXIKKyAqCisg
KiBAZGVzY3JpcHRpb24KKyAqCisgKiBVc2UgYCRyZXNvdXJjZVByb3ZpZGVyYCB0byBjaGFuZ2Ug
dGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlIHtAbGluayBuZ1Jlc291cmNlLiRyZXNvdXJjZX0K
KyAqIHNlcnZpY2UuCisgKgorICogIyMgRGVwZW5kZW5jaWVzCisgKiBSZXF1aXJlcyB0aGUge0Bs
aW5rIG5nUmVzb3VyY2UgfSBtb2R1bGUgdG8gYmUgaW5zdGFsbGVkLgorICoKKyAqLworCisvKioK
KyAqIEBuZ2RvYyBzZXJ2aWNlCisgKiBAbmFtZSAkcmVzb3VyY2UKKyAqIEByZXF1aXJlcyAkaHR0
cAorICogQHJlcXVpcmVzIG5nLiRsb2cKKyAqIEByZXF1aXJlcyAkcQorICogQHJlcXVpcmVzIG5n
LiR0aW1lb3V0CisgKgorICogQGRlc2NyaXB0aW9uCisgKiBBIGZhY3Rvcnkgd2hpY2ggY3JlYXRl
cyBhIHJlc291cmNlIG9iamVjdCB0aGF0IGxldHMgeW91IGludGVyYWN0IHdpdGgKKyAqIFtSRVNU
ZnVsXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1JlcHJlc2VudGF0aW9uYWxfU3RhdGVf
VHJhbnNmZXIpIHNlcnZlci1zaWRlIGRhdGEgc291cmNlcy4KKyAqCisgKiBUaGUgcmV0dXJuZWQg
cmVzb3VyY2Ugb2JqZWN0IGhhcyBhY3Rpb24gbWV0aG9kcyB3aGljaCBwcm92aWRlIGhpZ2gtbGV2
ZWwgYmVoYXZpb3JzIHdpdGhvdXQKKyAqIHRoZSBuZWVkIHRvIGludGVyYWN0IHdpdGggdGhlIGxv
dyBsZXZlbCB7QGxpbmsgbmcuJGh0dHAgJGh0dHB9IHNlcnZpY2UuCisgKgorICogUmVxdWlyZXMg
dGhlIHtAbGluayBuZ1Jlc291cmNlIGBuZ1Jlc291cmNlYH0gbW9kdWxlIHRvIGJlIGluc3RhbGxl
ZC4KKyAqCisgKiBCeSBkZWZhdWx0LCB0cmFpbGluZyBzbGFzaGVzIHdpbGwgYmUgc3RyaXBwZWQg
ZnJvbSB0aGUgY2FsY3VsYXRlZCBVUkxzLAorICogd2hpY2ggY2FuIHBvc2UgcHJvYmxlbXMgd2l0
aCBzZXJ2ZXIgYmFja2VuZHMgdGhhdCBkbyBub3QgZXhwZWN0IHRoYXQKKyAqIGJlaGF2aW9yLiAg
VGhpcyBjYW4gYmUgZGlzYWJsZWQgYnkgY29uZmlndXJpbmcgdGhlIGAkcmVzb3VyY2VQcm92aWRl
cmAgbGlrZQorICogdGhpczoKKyAqCisgKiBgYGBqcworICAgICBhcHAuY29uZmlnKFsnJHJlc291
cmNlUHJvdmlkZXInLCBmdW5jdGlvbigkcmVzb3VyY2VQcm92aWRlcikgeworICAgICAgIC8vIERv
bid0IHN0cmlwIHRyYWlsaW5nIHNsYXNoZXMgZnJvbSBjYWxjdWxhdGVkIFVSTHMKKyAgICAgICAk
cmVzb3VyY2VQcm92aWRlci5kZWZhdWx0cy5zdHJpcFRyYWlsaW5nU2xhc2hlcyA9IGZhbHNlOwor
ICAgICB9XSk7CisgKiBgYGAKKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gdXJsIEEgcGFyYW1ldGVy
aXplZCBVUkwgdGVtcGxhdGUgd2l0aCBwYXJhbWV0ZXJzIHByZWZpeGVkIGJ5IGA6YCBhcyBpbgor
ICogICBgL3VzZXIvOnVzZXJuYW1lYC4gSWYgeW91IGFyZSB1c2luZyBhIFVSTCB3aXRoIGEgcG9y
dCBudW1iZXIgKGUuZy4KKyAqICAgYGh0dHA6Ly9leGFtcGxlLmNvbTo4MDgwL2FwaWApLCBpdCB3
aWxsIGJlIHJlc3BlY3RlZC4KKyAqCisgKiAgIElmIHlvdSBhcmUgdXNpbmcgYSB1cmwgd2l0aCBh
IHN1ZmZpeCwganVzdCBhZGQgdGhlIHN1ZmZpeCwgbGlrZSB0aGlzOgorICogICBgJHJlc291cmNl
KCdodHRwOi8vZXhhbXBsZS5jb20vcmVzb3VyY2UuanNvbicpYCBvciBgJHJlc291cmNlKCdodHRw
Oi8vZXhhbXBsZS5jb20vOmlkLmpzb24nKWAKKyAqICAgb3IgZXZlbiBgJHJlc291cmNlKCdodHRw
Oi8vZXhhbXBsZS5jb20vcmVzb3VyY2UvOnJlc291cmNlX2lkLjpmb3JtYXQnKWAKKyAqICAgSWYg
dGhlIHBhcmFtZXRlciBiZWZvcmUgdGhlIHN1ZmZpeCBpcyBlbXB0eSwgOnJlc291cmNlX2lkIGlu
IHRoaXMgY2FzZSwgdGhlbiB0aGUgYC8uYCB3aWxsIGJlCisgKiAgIGNvbGxhcHNlZCBkb3duIHRv
IGEgc2luZ2xlIGAuYC4gIElmIHlvdSBuZWVkIHRoaXMgc2VxdWVuY2UgdG8gYXBwZWFyIGFuZCBu
b3QgY29sbGFwc2UgdGhlbiB5b3UKKyAqICAgY2FuIGVzY2FwZSBpdCB3aXRoIGAvXC5gLgorICoK
KyAqIEBwYXJhbSB7T2JqZWN0PX0gcGFyYW1EZWZhdWx0cyBEZWZhdWx0IHZhbHVlcyBmb3IgYHVy
bGAgcGFyYW1ldGVycy4gVGhlc2UgY2FuIGJlIG92ZXJyaWRkZW4gaW4KKyAqICAgYGFjdGlvbnNg
IG1ldGhvZHMuIElmIGEgcGFyYW1ldGVyIHZhbHVlIGlzIGEgZnVuY3Rpb24sIGl0IHdpbGwgYmUg
Y2FsbGVkIGV2ZXJ5IHRpbWUKKyAqICAgYSBwYXJhbSB2YWx1ZSBuZWVkcyB0byBiZSBvYnRhaW5l
ZCBmb3IgYSByZXF1ZXN0ICh1bmxlc3MgdGhlIHBhcmFtIHdhcyBvdmVycmlkZGVuKS4gVGhlIGZ1
bmN0aW9uCisgKiAgIHdpbGwgYmUgcGFzc2VkIHRoZSBjdXJyZW50IGRhdGEgdmFsdWUgYXMgYW4g
YXJndW1lbnQuCisgKgorICogICBFYWNoIGtleSB2YWx1ZSBpbiB0aGUgcGFyYW1ldGVyIG9iamVj
dCBpcyBmaXJzdCBib3VuZCB0byB1cmwgdGVtcGxhdGUgaWYgcHJlc2VudCBhbmQgdGhlbiBhbnkK
KyAqICAgZXhjZXNzIGtleXMgYXJlIGFwcGVuZGVkIHRvIHRoZSB1cmwgc2VhcmNoIHF1ZXJ5IGFm
dGVyIHRoZSBgP2AuCisgKgorICogICBHaXZlbiBhIHRlbXBsYXRlIGAvcGF0aC86dmVyYmAgYW5k
IHBhcmFtZXRlciBge3ZlcmI6J2dyZWV0Jywgc2FsdXRhdGlvbjonSGVsbG8nfWAgcmVzdWx0cyBp
bgorICogICBVUkwgYC9wYXRoL2dyZWV0P3NhbHV0YXRpb249SGVsbG9gLgorICoKKyAqICAgSWYg
dGhlIHBhcmFtZXRlciB2YWx1ZSBpcyBwcmVmaXhlZCB3aXRoIGBAYCwgdGhlbiB0aGUgdmFsdWUg
Zm9yIHRoYXQgcGFyYW1ldGVyIHdpbGwgYmUKKyAqICAgZXh0cmFjdGVkIGZyb20gdGhlIGNvcnJl
c3BvbmRpbmcgcHJvcGVydHkgb24gdGhlIGBkYXRhYCBvYmplY3QgKHByb3ZpZGVkIHdoZW4gY2Fs
bGluZyBhCisgKiAgICJub24tR0VUIiBhY3Rpb24gbWV0aG9kKS4KKyAqICAgRm9yIGV4YW1wbGUs
IGlmIHRoZSBgZGVmYXVsdFBhcmFtYCBvYmplY3QgaXMgYHtzb21lUGFyYW06ICdAc29tZVByb3An
fWAgdGhlbiB0aGUgdmFsdWUgb2YKKyAqICAgYHNvbWVQYXJhbWAgd2lsbCBiZSBgZGF0YS5zb21l
UHJvcGAuCisgKiAgIE5vdGUgdGhhdCB0aGUgcGFyYW1ldGVyIHdpbGwgYmUgaWdub3JlZCwgd2hl
biBjYWxsaW5nIGEgIkdFVCIgYWN0aW9uIG1ldGhvZCAoaS5lLiBhbiBhY3Rpb24KKyAqICAgbWV0
aG9kIHRoYXQgZG9lcyBub3QgYWNjZXB0IGEgcmVxdWVzdCBib2R5KQorICoKKyAqIEBwYXJhbSB7
T2JqZWN0LjxPYmplY3Q+PX0gYWN0aW9ucyBIYXNoIHdpdGggZGVjbGFyYXRpb24gb2YgY3VzdG9t
IGFjdGlvbnMgdGhhdCBzaG91bGQgZXh0ZW5kCisgKiAgIHRoZSBkZWZhdWx0IHNldCBvZiByZXNv
dXJjZSBhY3Rpb25zLiBUaGUgZGVjbGFyYXRpb24gc2hvdWxkIGJlIGNyZWF0ZWQgaW4gdGhlIGZv
cm1hdCBvZiB7QGxpbmsKKyAqICAgbmcuJGh0dHAjdXNhZ2UgJGh0dHAuY29uZmlnfToKKyAqCisg
KiAgICAgICB7YWN0aW9uMToge21ldGhvZDo/LCBwYXJhbXM6PywgaXNBcnJheTo/LCBoZWFkZXJz
Oj8sIC4uLn0sCisgKiAgICAgICAgYWN0aW9uMjoge21ldGhvZDo/LCBwYXJhbXM6PywgaXNBcnJh
eTo/LCBoZWFkZXJzOj8sIC4uLn0sCisgKiAgICAgICAgLi4ufQorICoKKyAqICAgV2hlcmU6Cisg
KgorICogICAtICoqYGFjdGlvbmAqKiDigJMge3N0cmluZ30g4oCTIFRoZSBuYW1lIG9mIGFjdGlv
bi4gVGhpcyBuYW1lIGJlY29tZXMgdGhlIG5hbWUgb2YgdGhlIG1ldGhvZCBvbgorICogICAgIHlv
dXIgcmVzb3VyY2Ugb2JqZWN0LgorICogICAtICoqYG1ldGhvZGAqKiDigJMge3N0cmluZ30g4oCT
IENhc2UgaW5zZW5zaXRpdmUgSFRUUCBtZXRob2QgKGUuZy4gYEdFVGAsIGBQT1NUYCwgYFBVVGAs
CisgKiAgICAgYERFTEVURWAsIGBKU09OUGAsIGV0YykuCisgKiAgIC0gKipgcGFyYW1zYCoqIOKA
kyB7T2JqZWN0PX0g4oCTIE9wdGlvbmFsIHNldCBvZiBwcmUtYm91bmQgcGFyYW1ldGVycyBmb3Ig
dGhpcyBhY3Rpb24uIElmIGFueSBvZgorICogICAgIHRoZSBwYXJhbWV0ZXIgdmFsdWUgaXMgYSBm
dW5jdGlvbiwgaXQgd2lsbCBiZSBjYWxsZWQgZXZlcnkgdGltZSB3aGVuIGEgcGFyYW0gdmFsdWUg
bmVlZHMgdG8KKyAqICAgICBiZSBvYnRhaW5lZCBmb3IgYSByZXF1ZXN0ICh1bmxlc3MgdGhlIHBh
cmFtIHdhcyBvdmVycmlkZGVuKS4gVGhlIGZ1bmN0aW9uIHdpbGwgYmUgcGFzc2VkIHRoZQorICog
ICAgIGN1cnJlbnQgZGF0YSB2YWx1ZSBhcyBhbiBhcmd1bWVudC4KKyAqICAgLSAqKmB1cmxgKiog
4oCTIHtzdHJpbmd9IOKAkyBhY3Rpb24gc3BlY2lmaWMgYHVybGAgb3ZlcnJpZGUuIFRoZSB1cmwg
dGVtcGxhdGluZyBpcyBzdXBwb3J0ZWQganVzdAorICogICAgIGxpa2UgZm9yIHRoZSByZXNvdXJj
ZS1sZXZlbCB1cmxzLgorICogICAtICoqYGlzQXJyYXlgKiog4oCTIHtib29sZWFuPX0g4oCTIElm
IHRydWUgdGhlbiB0aGUgcmV0dXJuZWQgb2JqZWN0IGZvciB0aGlzIGFjdGlvbiBpcyBhbiBhcnJh
eSwKKyAqICAgICBzZWUgYHJldHVybnNgIHNlY3Rpb24uCisgKiAgIC0gKipgdHJhbnNmb3JtUmVx
dWVzdGAqKiDigJMKKyAqICAgICBge2Z1bmN0aW9uKGRhdGEsIGhlYWRlcnNHZXR0ZXIpfEFycmF5
LjxmdW5jdGlvbihkYXRhLCBoZWFkZXJzR2V0dGVyKT59YCDigJMKKyAqICAgICB0cmFuc2Zvcm0g
ZnVuY3Rpb24gb3IgYW4gYXJyYXkgb2Ygc3VjaCBmdW5jdGlvbnMuIFRoZSB0cmFuc2Zvcm0gZnVu
Y3Rpb24gdGFrZXMgdGhlIGh0dHAKKyAqICAgICByZXF1ZXN0IGJvZHkgYW5kIGhlYWRlcnMgYW5k
IHJldHVybnMgaXRzIHRyYW5zZm9ybWVkICh0eXBpY2FsbHkgc2VyaWFsaXplZCkgdmVyc2lvbi4K
KyAqICAgICBCeSBkZWZhdWx0LCB0cmFuc2Zvcm1SZXF1ZXN0IHdpbGwgY29udGFpbiBvbmUgZnVu
Y3Rpb24gdGhhdCBjaGVja3MgaWYgdGhlIHJlcXVlc3QgZGF0YSBpcworICogICAgIGFuIG9iamVj
dCBhbmQgc2VyaWFsaXplcyB0byB1c2luZyBgYW5ndWxhci50b0pzb25gLiBUbyBwcmV2ZW50IHRo
aXMgYmVoYXZpb3IsIHNldAorICogICAgIGB0cmFuc2Zvcm1SZXF1ZXN0YCB0byBhbiBlbXB0eSBh
cnJheTogYHRyYW5zZm9ybVJlcXVlc3Q6IFtdYAorICogICAtICoqYHRyYW5zZm9ybVJlc3BvbnNl
YCoqIOKAkworICogICAgIGB7ZnVuY3Rpb24oZGF0YSwgaGVhZGVyc0dldHRlcil8QXJyYXkuPGZ1
bmN0aW9uKGRhdGEsIGhlYWRlcnNHZXR0ZXIpPn1gIOKAkworICogICAgIHRyYW5zZm9ybSBmdW5j
dGlvbiBvciBhbiBhcnJheSBvZiBzdWNoIGZ1bmN0aW9ucy4gVGhlIHRyYW5zZm9ybSBmdW5jdGlv
biB0YWtlcyB0aGUgaHR0cAorICogICAgIHJlc3BvbnNlIGJvZHkgYW5kIGhlYWRlcnMgYW5kIHJl
dHVybnMgaXRzIHRyYW5zZm9ybWVkICh0eXBpY2FsbHkgZGVzZXJpYWxpemVkKSB2ZXJzaW9uLgor
ICogICAgIEJ5IGRlZmF1bHQsIHRyYW5zZm9ybVJlc3BvbnNlIHdpbGwgY29udGFpbiBvbmUgZnVu
Y3Rpb24gdGhhdCBjaGVja3MgaWYgdGhlIHJlc3BvbnNlIGxvb2tzCisgKiAgICAgbGlrZSBhIEpT
T04gc3RyaW5nIGFuZCBkZXNlcmlhbGl6ZXMgaXQgdXNpbmcgYGFuZ3VsYXIuZnJvbUpzb25gLiBU
byBwcmV2ZW50IHRoaXMgYmVoYXZpb3IsCisgKiAgICAgc2V0IGB0cmFuc2Zvcm1SZXNwb25zZWAg
dG8gYW4gZW1wdHkgYXJyYXk6IGB0cmFuc2Zvcm1SZXNwb25zZTogW11gCisgKiAgIC0gKipgY2Fj
aGVgKiog4oCTIGB7Ym9vbGVhbnxDYWNoZX1gIOKAkyBJZiB0cnVlLCBhIGRlZmF1bHQgJGh0dHAg
Y2FjaGUgd2lsbCBiZSB1c2VkIHRvIGNhY2hlIHRoZQorICogICAgIEdFVCByZXF1ZXN0LCBvdGhl
cndpc2UgaWYgYSBjYWNoZSBpbnN0YW5jZSBidWlsdCB3aXRoCisgKiAgICAge0BsaW5rIG5nLiRj
YWNoZUZhY3RvcnkgJGNhY2hlRmFjdG9yeX0sIHRoaXMgY2FjaGUgd2lsbCBiZSB1c2VkIGZvcgor
ICogICAgIGNhY2hpbmcuCisgKiAgIC0gKipgdGltZW91dGAqKiDigJMgYHtudW1iZXJ9YCDigJMg
dGltZW91dCBpbiBtaWxsaXNlY29uZHMuPGJyIC8+CisgKiAgICAgKipOb3RlOioqIEluIGNvbnRy
YXN0IHRvIHtAbGluayBuZy4kaHR0cCN1c2FnZSAkaHR0cC5jb25maWd9LCB7QGxpbmsgbmcuJHEg
cHJvbWlzZXN9IGFyZQorICogICAgICoqbm90Kiogc3VwcG9ydGVkIGluICRyZXNvdXJjZSwgYmVj
YXVzZSB0aGUgc2FtZSB2YWx1ZSB3b3VsZCBiZSB1c2VkIGZvciBtdWx0aXBsZSByZXF1ZXN0cy4K
KyAqICAgICBJZiB5b3UgYXJlIGxvb2tpbmcgZm9yIGEgd2F5IHRvIGNhbmNlbCByZXF1ZXN0cywg
eW91IHNob3VsZCB1c2UgdGhlIGBjYW5jZWxsYWJsZWAgb3B0aW9uLgorICogICAtICoqYGNhbmNl
bGxhYmxlYCoqIOKAkyBge2Jvb2xlYW59YCDigJMgaWYgc2V0IHRvIHRydWUsIHRoZSByZXF1ZXN0
IG1hZGUgYnkgYSAibm9uLWluc3RhbmNlIiBjYWxsCisgKiAgICAgd2lsbCBiZSBjYW5jZWxsZWQg
KGlmIG5vdCBhbHJlYWR5IGNvbXBsZXRlZCkgYnkgY2FsbGluZyBgJGNhbmNlbFJlcXVlc3QoKWAg
b24gdGhlIGNhbGwncworICogICAgIHJldHVybiB2YWx1ZS4gQ2FsbGluZyBgJGNhbmNlbFJlcXVl
c3QoKWAgZm9yIGEgbm9uLWNhbmNlbGxhYmxlIG9yIGFuIGFscmVhZHkKKyAqICAgICBjb21wbGV0
ZWQvY2FuY2VsbGVkIHJlcXVlc3Qgd2lsbCBoYXZlIG5vIGVmZmVjdC48YnIgLz4KKyAqICAgLSAq
KmB3aXRoQ3JlZGVudGlhbHNgKiogLSBge2Jvb2xlYW59YCAtIHdoZXRoZXIgdG8gc2V0IHRoZSBg
d2l0aENyZWRlbnRpYWxzYCBmbGFnIG9uIHRoZQorICogICAgIFhIUiBvYmplY3QuIFNlZQorICog
ICAgIFtyZXF1ZXN0cyB3aXRoIGNyZWRlbnRpYWxzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxh
Lm9yZy9lbi9odHRwX2FjY2Vzc19jb250cm9sI3NlY3Rpb25fNSkKKyAqICAgICBmb3IgbW9yZSBp
bmZvcm1hdGlvbi4KKyAqICAgLSAqKmByZXNwb25zZVR5cGVgKiogLSBge3N0cmluZ31gIC0gc2Vl
CisgKiAgICAgW3JlcXVlc3RUeXBlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1V
Uy9kb2NzL0RPTS9YTUxIdHRwUmVxdWVzdCNyZXNwb25zZVR5cGUpLgorICogICAtICoqYGludGVy
Y2VwdG9yYCoqIC0gYHtPYmplY3Q9fWAgLSBUaGUgaW50ZXJjZXB0b3Igb2JqZWN0IGhhcyB0d28g
b3B0aW9uYWwgbWV0aG9kcyAtCisgKiAgICAgYHJlc3BvbnNlYCBhbmQgYHJlc3BvbnNlRXJyb3Jg
LiBCb3RoIGByZXNwb25zZWAgYW5kIGByZXNwb25zZUVycm9yYCBpbnRlcmNlcHRvcnMgZ2V0IGNh
bGxlZAorICogICAgIHdpdGggYGh0dHAgcmVzcG9uc2VgIG9iamVjdC4gU2VlIHtAbGluayBuZy4k
aHR0cCAkaHR0cCBpbnRlcmNlcHRvcnN9LgorICoKKyAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25z
IEhhc2ggd2l0aCBjdXN0b20gc2V0dGluZ3MgdGhhdCBzaG91bGQgZXh0ZW5kIHRoZQorICogICBk
ZWZhdWx0IGAkcmVzb3VyY2VQcm92aWRlcmAgYmVoYXZpb3IuICBUaGUgc3VwcG9ydGVkIG9wdGlv
bnMgYXJlOgorICoKKyAqICAgLSAqKmBzdHJpcFRyYWlsaW5nU2xhc2hlc2AqKiDigJMge2Jvb2xl
YW59IOKAkyBJZiB0cnVlIHRoZW4gdGhlIHRyYWlsaW5nCisgKiAgIHNsYXNoZXMgZnJvbSBhbnkg
Y2FsY3VsYXRlZCBVUkwgd2lsbCBiZSBzdHJpcHBlZC4gKERlZmF1bHRzIHRvIHRydWUuKQorICog
ICAtICoqYGNhbmNlbGxhYmxlYCoqIOKAkyB7Ym9vbGVhbn0g4oCTIElmIHRydWUsIHRoZSByZXF1
ZXN0IG1hZGUgYnkgYSAibm9uLWluc3RhbmNlIiBjYWxsIHdpbGwgYmUKKyAqICAgY2FuY2VsbGVk
IChpZiBub3QgYWxyZWFkeSBjb21wbGV0ZWQpIGJ5IGNhbGxpbmcgYCRjYW5jZWxSZXF1ZXN0KClg
IG9uIHRoZSBjYWxsJ3MgcmV0dXJuIHZhbHVlLgorICogICBUaGlzIGNhbiBiZSBvdmVyd3JpdHRl
biBwZXIgYWN0aW9uLiAoRGVmYXVsdHMgdG8gZmFsc2UuKQorICoKKyAqIEByZXR1cm5zIHtPYmpl
Y3R9IEEgcmVzb3VyY2UgImNsYXNzIiBvYmplY3Qgd2l0aCBtZXRob2RzIGZvciB0aGUgZGVmYXVs
dCBzZXQgb2YgcmVzb3VyY2UgYWN0aW9ucworICogICBvcHRpb25hbGx5IGV4dGVuZGVkIHdpdGgg
Y3VzdG9tIGBhY3Rpb25zYC4gVGhlIGRlZmF1bHQgc2V0IGNvbnRhaW5zIHRoZXNlIGFjdGlvbnM6
CisgKiAgIGBgYGpzCisgKiAgIHsgJ2dldCc6ICAgIHttZXRob2Q6J0dFVCd9LAorICogICAgICdz
YXZlJzogICB7bWV0aG9kOidQT1NUJ30sCisgKiAgICAgJ3F1ZXJ5JzogIHttZXRob2Q6J0dFVCcs
IGlzQXJyYXk6dHJ1ZX0sCisgKiAgICAgJ3JlbW92ZSc6IHttZXRob2Q6J0RFTEVURSd9LAorICog
ICAgICdkZWxldGUnOiB7bWV0aG9kOidERUxFVEUnfSB9OworICogICBgYGAKKyAqCisgKiAgIENh
bGxpbmcgdGhlc2UgbWV0aG9kcyBpbnZva2UgYW4ge0BsaW5rIG5nLiRodHRwfSB3aXRoIHRoZSBz
cGVjaWZpZWQgaHR0cCBtZXRob2QsCisgKiAgIGRlc3RpbmF0aW9uIGFuZCBwYXJhbWV0ZXJzLiBX
aGVuIHRoZSBkYXRhIGlzIHJldHVybmVkIGZyb20gdGhlIHNlcnZlciB0aGVuIHRoZSBvYmplY3Qg
aXMgYW4KKyAqICAgaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlIGNsYXNzLiBUaGUgYWN0aW9ucyBg
c2F2ZWAsIGByZW1vdmVgIGFuZCBgZGVsZXRlYCBhcmUgYXZhaWxhYmxlIG9uIGl0CisgKiAgIGFz
ICBtZXRob2RzIHdpdGggdGhlIGAkYCBwcmVmaXguIFRoaXMgYWxsb3dzIHlvdSB0byBlYXNpbHkg
cGVyZm9ybSBDUlVEIG9wZXJhdGlvbnMgKGNyZWF0ZSwKKyAqICAgcmVhZCwgdXBkYXRlLCBkZWxl
dGUpIG9uIHNlcnZlci1zaWRlIGRhdGEgbGlrZSB0aGlzOgorICogICBgYGBqcworICogICB2YXIg
VXNlciA9ICRyZXNvdXJjZSgnL3VzZXIvOnVzZXJJZCcsIHt1c2VySWQ6J0BpZCd9KTsKKyAqICAg
dmFyIHVzZXIgPSBVc2VyLmdldCh7dXNlcklkOjEyM30sIGZ1bmN0aW9uKCkgeworICogICAgIHVz
ZXIuYWJjID0gdHJ1ZTsKKyAqICAgICB1c2VyLiRzYXZlKCk7CisgKiAgIH0pOworICogICBgYGAK
KyAqCisgKiAgIEl0IGlzIGltcG9ydGFudCB0byByZWFsaXplIHRoYXQgaW52b2tpbmcgYSAkcmVz
b3VyY2Ugb2JqZWN0IG1ldGhvZCBpbW1lZGlhdGVseSByZXR1cm5zIGFuCisgKiAgIGVtcHR5IHJl
ZmVyZW5jZSAob2JqZWN0IG9yIGFycmF5IGRlcGVuZGluZyBvbiBgaXNBcnJheWApLiBPbmNlIHRo
ZSBkYXRhIGlzIHJldHVybmVkIGZyb20gdGhlCisgKiAgIHNlcnZlciB0aGUgZXhpc3RpbmcgcmVm
ZXJlbmNlIGlzIHBvcHVsYXRlZCB3aXRoIHRoZSBhY3R1YWwgZGF0YS4gVGhpcyBpcyBhIHVzZWZ1
bCB0cmljayBzaW5jZQorICogICB1c3VhbGx5IHRoZSByZXNvdXJjZSBpcyBhc3NpZ25lZCB0byBh
IG1vZGVsIHdoaWNoIGlzIHRoZW4gcmVuZGVyZWQgYnkgdGhlIHZpZXcuIEhhdmluZyBhbiBlbXB0
eQorICogICBvYmplY3QgcmVzdWx0cyBpbiBubyByZW5kZXJpbmcsIG9uY2UgdGhlIGRhdGEgYXJy
aXZlcyBmcm9tIHRoZSBzZXJ2ZXIgdGhlbiB0aGUgb2JqZWN0IGlzCisgKiAgIHBvcHVsYXRlZCB3
aXRoIHRoZSBkYXRhIGFuZCB0aGUgdmlldyBhdXRvbWF0aWNhbGx5IHJlLXJlbmRlcnMgaXRzZWxm
IHNob3dpbmcgdGhlIG5ldyBkYXRhLiBUaGlzCisgKiAgIG1lYW5zIHRoYXQgaW4gbW9zdCBjYXNl
cyBvbmUgbmV2ZXIgaGFzIHRvIHdyaXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSBhY3Rp
b24gbWV0aG9kcy4KKyAqCisgKiAgIFRoZSBhY3Rpb24gbWV0aG9kcyBvbiB0aGUgY2xhc3Mgb2Jq
ZWN0IG9yIGluc3RhbmNlIG9iamVjdCBjYW4gYmUgaW52b2tlZCB3aXRoIHRoZSBmb2xsb3dpbmcK
KyAqICAgcGFyYW1ldGVyczoKKyAqCisgKiAgIC0gSFRUUCBHRVQgImNsYXNzIiBhY3Rpb25zOiBg
UmVzb3VyY2UuYWN0aW9uKFtwYXJhbWV0ZXJzXSwgW3N1Y2Nlc3NdLCBbZXJyb3JdKWAKKyAqICAg
LSBub24tR0VUICJjbGFzcyIgYWN0aW9uczogYFJlc291cmNlLmFjdGlvbihbcGFyYW1ldGVyc10s
IHBvc3REYXRhLCBbc3VjY2Vzc10sIFtlcnJvcl0pYAorICogICAtIG5vbi1HRVQgaW5zdGFuY2Ug
YWN0aW9uczogIGBpbnN0YW5jZS4kYWN0aW9uKFtwYXJhbWV0ZXJzXSwgW3N1Y2Nlc3NdLCBbZXJy
b3JdKWAKKyAqCisgKgorICogICBTdWNjZXNzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aXRoICh2YWx1
ZSwgcmVzcG9uc2VIZWFkZXJzKSBhcmd1bWVudHMsIHdoZXJlIHRoZSB2YWx1ZSBpcworICogICB0
aGUgcG9wdWxhdGVkIHJlc291cmNlIGluc3RhbmNlIG9yIGNvbGxlY3Rpb24gb2JqZWN0LiBUaGUg
ZXJyb3IgY2FsbGJhY2sgaXMgY2FsbGVkCisgKiAgIHdpdGggKGh0dHBSZXNwb25zZSkgYXJndW1l
bnQuCisgKgorICogICBDbGFzcyBhY3Rpb25zIHJldHVybiBlbXB0eSBpbnN0YW5jZSAod2l0aCBh
ZGRpdGlvbmFsIHByb3BlcnRpZXMgYmVsb3cpLgorICogICBJbnN0YW5jZSBhY3Rpb25zIHJldHVy
biBwcm9taXNlIG9mIHRoZSBhY3Rpb24uCisgKgorICogICBUaGUgUmVzb3VyY2UgaW5zdGFuY2Vz
IGFuZCBjb2xsZWN0aW9ucyBoYXZlIHRoZXNlIGFkZGl0aW9uYWwgcHJvcGVydGllczoKKyAqCisg
KiAgIC0gYCRwcm9taXNlYDogdGhlIHtAbGluayBuZy4kcSBwcm9taXNlfSBvZiB0aGUgb3JpZ2lu
YWwgc2VydmVyIGludGVyYWN0aW9uIHRoYXQgY3JlYXRlZCB0aGlzCisgKiAgICAgaW5zdGFuY2Ug
b3IgY29sbGVjdGlvbi4KKyAqCisgKiAgICAgT24gc3VjY2VzcywgdGhlIHByb21pc2UgaXMgcmVz
b2x2ZWQgd2l0aCB0aGUgc2FtZSByZXNvdXJjZSBpbnN0YW5jZSBvciBjb2xsZWN0aW9uIG9iamVj
dCwKKyAqICAgICB1cGRhdGVkIHdpdGggZGF0YSBmcm9tIHNlcnZlci4gVGhpcyBtYWtlcyBpdCBl
YXN5IHRvIHVzZSBpbgorICogICAgIHtAbGluayBuZ1JvdXRlLiRyb3V0ZVByb3ZpZGVyIHJlc29s
dmUgc2VjdGlvbiBvZiAkcm91dGVQcm92aWRlci53aGVuKCl9IHRvIGRlZmVyIHZpZXcKKyAqICAg
ICByZW5kZXJpbmcgdW50aWwgdGhlIHJlc291cmNlKHMpIGFyZSBsb2FkZWQuCisgKgorICogICAg
IE9uIGZhaWx1cmUsIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkIHdpdGggdGhlIHtAbGluayBuZy4k
aHR0cCBodHRwIHJlc3BvbnNlfSBvYmplY3QsIHdpdGhvdXQKKyAqICAgICB0aGUgYHJlc291cmNl
YCBwcm9wZXJ0eS4KKyAqCisgKiAgICAgSWYgYW4gaW50ZXJjZXB0b3Igb2JqZWN0IHdhcyBwcm92
aWRlZCwgdGhlIHByb21pc2Ugd2lsbCBpbnN0ZWFkIGJlIHJlc29sdmVkIHdpdGggdGhlIHZhbHVl
CisgKiAgICAgcmV0dXJuZWQgYnkgdGhlIGludGVyY2VwdG9yLgorICoKKyAqICAgLSBgJHJlc29s
dmVkYDogYHRydWVgIGFmdGVyIGZpcnN0IHNlcnZlciBpbnRlcmFjdGlvbiBpcyBjb21wbGV0ZWQg
KGVpdGhlciB3aXRoIHN1Y2Nlc3Mgb3IKKyAqICAgICAgcmVqZWN0aW9uKSwgYGZhbHNlYCBiZWZv
cmUgdGhhdC4gS25vd2luZyBpZiB0aGUgUmVzb3VyY2UgaGFzIGJlZW4gcmVzb2x2ZWQgaXMgdXNl
ZnVsIGluCisgKiAgICAgIGRhdGEtYmluZGluZy4KKyAqCisgKiAgIFRoZSBSZXNvdXJjZSBpbnN0
YW5jZXMgYW5kIGNvbGxlY3Rpb25zIGhhdmUgdGhlc2UgYWRkaXRpb25hbCBtZXRob2RzOgorICoK
KyAqICAgLSBgJGNhbmNlbFJlcXVlc3RgOiBJZiB0aGVyZSBpcyBhIGNhbmNlbGxhYmxlLCBwZW5k
aW5nIHJlcXVlc3QgcmVsYXRlZCB0byB0aGUgaW5zdGFuY2Ugb3IKKyAqICAgICAgY29sbGVjdGlv
biwgY2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIGFib3J0IHRoZSByZXF1ZXN0LgorICoKKyAqICAg
VGhlIFJlc291cmNlIGluc3RhbmNlcyBoYXZlIHRoZXNlIGFkZGl0aW9uYWwgbWV0aG9kczoKKyAq
CisgKiAgIC0gYHRvSlNPTmA6IEl0IHJldHVybnMgYSBzaW1wbGUgb2JqZWN0IHdpdGhvdXQgYW55
IG9mIHRoZSBleHRyYSBwcm9wZXJ0aWVzIGFkZGVkIGFzIHBhcnQgb2YKKyAqICAgICB0aGUgUmVz
b3VyY2UgQVBJLiBUaGlzIG9iamVjdCBjYW4gYmUgc2VyaWFsaXplZCB0aHJvdWdoIHtAbGluayBh
bmd1bGFyLnRvSnNvbn0gc2FmZWx5CisgKiAgICAgd2l0aG91dCBhdHRhY2hpbmcgQW5ndWxhci1z
cGVjaWZpYyBmaWVsZHMuIE5vdGljZSB0aGF0IGBKU09OLnN0cmluZ2lmeWAgKGFuZAorICogICAg
IGBhbmd1bGFyLnRvSnNvbmApIGF1dG9tYXRpY2FsbHkgdXNlIHRoaXMgbWV0aG9kIHdoZW4gc2Vy
aWFsaXppbmcgYSBSZXNvdXJjZSBpbnN0YW5jZQorICogICAgIChzZWUgW01ETl0oaHR0cHM6Ly9k
ZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2Uv
R2xvYmFsX09iamVjdHMvSlNPTi9zdHJpbmdpZnkjdG9KU09OKClfYmVoYXZpb3IpKS4KKyAqCisg
KiBAZXhhbXBsZQorICoKKyAqICMgQ3JlZGl0IGNhcmQgcmVzb3VyY2UKKyAqCisgKiBgYGBqcwor
ICAgICAvLyBEZWZpbmUgQ3JlZGl0Q2FyZCBjbGFzcworICAgICB2YXIgQ3JlZGl0Q2FyZCA9ICRy
ZXNvdXJjZSgnL3VzZXIvOnVzZXJJZC9jYXJkLzpjYXJkSWQnLAorICAgICAge3VzZXJJZDoxMjMs
IGNhcmRJZDonQGlkJ30sIHsKKyAgICAgICBjaGFyZ2U6IHttZXRob2Q6J1BPU1QnLCBwYXJhbXM6
e2NoYXJnZTp0cnVlfX0KKyAgICAgIH0pOworCisgICAgIC8vIFdlIGNhbiByZXRyaWV2ZSBhIGNv
bGxlY3Rpb24gZnJvbSB0aGUgc2VydmVyCisgICAgIHZhciBjYXJkcyA9IENyZWRpdENhcmQucXVl
cnkoZnVuY3Rpb24oKSB7CisgICAgICAgLy8gR0VUOiAvdXNlci8xMjMvY2FyZAorICAgICAgIC8v
IHNlcnZlciByZXR1cm5zOiBbIHtpZDo0NTYsIG51bWJlcjonMTIzNCcsIG5hbWU6J1NtaXRoJ30g
XTsKKworICAgICAgIHZhciBjYXJkID0gY2FyZHNbMF07CisgICAgICAgLy8gZWFjaCBpdGVtIGlz
IGFuIGluc3RhbmNlIG9mIENyZWRpdENhcmQKKyAgICAgICBleHBlY3QoY2FyZCBpbnN0YW5jZW9m
IENyZWRpdENhcmQpLnRvRXF1YWwodHJ1ZSk7CisgICAgICAgY2FyZC5uYW1lID0gIkouIFNtaXRo
IjsKKyAgICAgICAvLyBub24gR0VUIG1ldGhvZHMgYXJlIG1hcHBlZCBvbnRvIHRoZSBpbnN0YW5j
ZXMKKyAgICAgICBjYXJkLiRzYXZlKCk7CisgICAgICAgLy8gUE9TVDogL3VzZXIvMTIzL2NhcmQv
NDU2IHtpZDo0NTYsIG51bWJlcjonMTIzNCcsIG5hbWU6J0ouIFNtaXRoJ30KKyAgICAgICAvLyBz
ZXJ2ZXIgcmV0dXJuczoge2lkOjQ1NiwgbnVtYmVyOicxMjM0JywgbmFtZTogJ0ouIFNtaXRoJ307
CisKKyAgICAgICAvLyBvdXIgY3VzdG9tIG1ldGhvZCBpcyBtYXBwZWQgYXMgd2VsbC4KKyAgICAg
ICBjYXJkLiRjaGFyZ2Uoe2Ftb3VudDo5Ljk5fSk7CisgICAgICAgLy8gUE9TVDogL3VzZXIvMTIz
L2NhcmQvNDU2P2Ftb3VudD05Ljk5JmNoYXJnZT10cnVlIHtpZDo0NTYsIG51bWJlcjonMTIzNCcs
IG5hbWU6J0ouIFNtaXRoJ30KKyAgICAgfSk7CisKKyAgICAgLy8gd2UgY2FuIGNyZWF0ZSBhbiBp
bnN0YW5jZSBhcyB3ZWxsCisgICAgIHZhciBuZXdDYXJkID0gbmV3IENyZWRpdENhcmQoe251bWJl
cjonMDEyMyd9KTsKKyAgICAgbmV3Q2FyZC5uYW1lID0gIk1pa2UgU21pdGgiOworICAgICBuZXdD
YXJkLiRzYXZlKCk7CisgICAgIC8vIFBPU1Q6IC91c2VyLzEyMy9jYXJkIHtudW1iZXI6JzAxMjMn
LCBuYW1lOidNaWtlIFNtaXRoJ30KKyAgICAgLy8gc2VydmVyIHJldHVybnM6IHtpZDo3ODksIG51
bWJlcjonMDEyMycsIG5hbWU6ICdNaWtlIFNtaXRoJ307CisgICAgIGV4cGVjdChuZXdDYXJkLmlk
KS50b0VxdWFsKDc4OSk7CisgKiBgYGAKKyAqCisgKiBUaGUgb2JqZWN0IHJldHVybmVkIGZyb20g
dGhpcyBmdW5jdGlvbiBleGVjdXRpb24gaXMgYSByZXNvdXJjZSAiY2xhc3MiIHdoaWNoIGhhcyAi
c3RhdGljIiBtZXRob2QKKyAqIGZvciBlYWNoIGFjdGlvbiBpbiB0aGUgZGVmaW5pdGlvbi4KKyAq
CisgKiBDYWxsaW5nIHRoZXNlIG1ldGhvZHMgaW52b2tlIGAkaHR0cGAgb24gdGhlIGB1cmxgIHRl
bXBsYXRlIHdpdGggdGhlIGdpdmVuIGBtZXRob2RgLCBgcGFyYW1zYCBhbmQKKyAqIGBoZWFkZXJz
YC4KKyAqCisgKiBAZXhhbXBsZQorICoKKyAqICMgVXNlciByZXNvdXJjZQorICoKKyAqIFdoZW4g
dGhlIGRhdGEgaXMgcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyIHRoZW4gdGhlIG9iamVjdCBpcyBh
biBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UgdHlwZSBhbmQKKyAqIGFsbCBvZiB0aGUgbm9uLUdF
VCBtZXRob2RzIGFyZSBhdmFpbGFibGUgd2l0aCBgJGAgcHJlZml4LiBUaGlzIGFsbG93cyB5b3Ug
dG8gZWFzaWx5IHN1cHBvcnQgQ1JVRAorICogb3BlcmF0aW9ucyAoY3JlYXRlLCByZWFkLCB1cGRh
dGUsIGRlbGV0ZSkgb24gc2VydmVyLXNpZGUgZGF0YS4KKworICAgYGBganMKKyAgICAgdmFyIFVz
ZXIgPSAkcmVzb3VyY2UoJy91c2VyLzp1c2VySWQnLCB7dXNlcklkOidAaWQnfSk7CisgICAgIFVz
ZXIuZ2V0KHt1c2VySWQ6MTIzfSwgZnVuY3Rpb24odXNlcikgeworICAgICAgIHVzZXIuYWJjID0g
dHJ1ZTsKKyAgICAgICB1c2VyLiRzYXZlKCk7CisgICAgIH0pOworICAgYGBgCisgKgorICogSXQn
cyB3b3J0aCBub3RpbmcgdGhhdCB0aGUgc3VjY2VzcyBjYWxsYmFjayBmb3IgYGdldGAsIGBxdWVy
eWAgYW5kIG90aGVyIG1ldGhvZHMgZ2V0cyBwYXNzZWQKKyAqIGluIHRoZSByZXNwb25zZSB0aGF0
IGNhbWUgZnJvbSB0aGUgc2VydmVyIGFzIHdlbGwgYXMgJGh0dHAgaGVhZGVyIGdldHRlciBmdW5j
dGlvbiwgc28gb25lCisgKiBjb3VsZCByZXdyaXRlIHRoZSBhYm92ZSBleGFtcGxlIGFuZCBnZXQg
YWNjZXNzIHRvIGh0dHAgaGVhZGVycyBhczoKKyAqCisgICBgYGBqcworICAgICB2YXIgVXNlciA9
ICRyZXNvdXJjZSgnL3VzZXIvOnVzZXJJZCcsIHt1c2VySWQ6J0BpZCd9KTsKKyAgICAgVXNlci5n
ZXQoe3VzZXJJZDoxMjN9LCBmdW5jdGlvbih1c2VyLCBnZXRSZXNwb25zZUhlYWRlcnMpeworICAg
ICAgIHVzZXIuYWJjID0gdHJ1ZTsKKyAgICAgICB1c2VyLiRzYXZlKGZ1bmN0aW9uKHVzZXIsIHB1
dFJlc3BvbnNlSGVhZGVycykgeworICAgICAgICAgLy91c2VyID0+IHNhdmVkIHVzZXIgb2JqZWN0
CisgICAgICAgICAvL3B1dFJlc3BvbnNlSGVhZGVycyA9PiAkaHR0cCBoZWFkZXIgZ2V0dGVyCisg
ICAgICAgfSk7CisgICAgIH0pOworICAgYGBgCisgKgorICogWW91IGNhbiBhbHNvIGFjY2VzcyB0
aGUgcmF3IGAkaHR0cGAgcHJvbWlzZSB2aWEgdGhlIGAkcHJvbWlzZWAgcHJvcGVydHkgb24gdGhl
IG9iamVjdCByZXR1cm5lZAorICoKKyAgIGBgYAorICAgICB2YXIgVXNlciA9ICRyZXNvdXJjZSgn
L3VzZXIvOnVzZXJJZCcsIHt1c2VySWQ6J0BpZCd9KTsKKyAgICAgVXNlci5nZXQoe3VzZXJJZDox
MjN9KQorICAgICAgICAgLiRwcm9taXNlLnRoZW4oZnVuY3Rpb24odXNlcikgeworICAgICAgICAg
ICAkc2NvcGUudXNlciA9IHVzZXI7CisgICAgICAgICB9KTsKKyAgIGBgYAorICoKKyAqIEBleGFt
cGxlCisgKgorICogIyBDcmVhdGluZyBhIGN1c3RvbSAnUFVUJyByZXF1ZXN0CisgKgorICogSW4g
dGhpcyBleGFtcGxlIHdlIGNyZWF0ZSBhIGN1c3RvbSBtZXRob2Qgb24gb3VyIHJlc291cmNlIHRv
IG1ha2UgYSBQVVQgcmVxdWVzdAorICogYGBganMKKyAqICAgIHZhciBhcHAgPSBhbmd1bGFyLm1v
ZHVsZSgnYXBwJywgWyduZ1Jlc291cmNlJywgJ25nUm91dGUnXSk7CisgKgorICogICAgLy8gU29t
ZSBBUElzIGV4cGVjdCBhIFBVVCByZXF1ZXN0IGluIHRoZSBmb3JtYXQgVVJML29iamVjdC9JRAor
ICogICAgLy8gSGVyZSB3ZSBhcmUgY3JlYXRpbmcgYW4gJ3VwZGF0ZScgbWV0aG9kCisgKiAgICBh
cHAuZmFjdG9yeSgnTm90ZXMnLCBbJyRyZXNvdXJjZScsIGZ1bmN0aW9uKCRyZXNvdXJjZSkgewor
ICogICAgcmV0dXJuICRyZXNvdXJjZSgnL25vdGVzLzppZCcsIG51bGwsCisgKiAgICAgICAgewor
ICogICAgICAgICAgICAndXBkYXRlJzogeyBtZXRob2Q6J1BVVCcgfQorICogICAgICAgIH0pOwor
ICogICAgfV0pOworICoKKyAqICAgIC8vIEluIG91ciBjb250cm9sbGVyIHdlIGdldCB0aGUgSUQg
ZnJvbSB0aGUgVVJMIHVzaW5nIG5nUm91dGUgYW5kICRyb3V0ZVBhcmFtcworICogICAgLy8gV2Ug
cGFzcyBpbiAkcm91dGVQYXJhbXMgYW5kIG91ciBOb3RlcyBmYWN0b3J5IGFsb25nIHdpdGggJHNj
b3BlCisgKiAgICBhcHAuY29udHJvbGxlcignTm90ZXNDdHJsJywgWyckc2NvcGUnLCAnJHJvdXRl
UGFyYW1zJywgJ05vdGVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZnVuY3Rpb24oJHNjb3BlLCAkcm91dGVQYXJhbXMsIE5vdGVzKSB7CisgKiAgICAvLyBGaXJzdCBn
ZXQgYSBub3RlIG9iamVjdCBmcm9tIHRoZSBmYWN0b3J5CisgKiAgICB2YXIgbm90ZSA9IE5vdGVz
LmdldCh7IGlkOiRyb3V0ZVBhcmFtcy5pZCB9KTsKKyAqICAgICRpZCA9IG5vdGUuaWQ7CisgKgor
ICogICAgLy8gTm93IGNhbGwgdXBkYXRlIHBhc3NpbmcgaW4gdGhlIElEIGZpcnN0IHRoZW4gdGhl
IG9iamVjdCB5b3UgYXJlIHVwZGF0aW5nCisgKiAgICBOb3Rlcy51cGRhdGUoeyBpZDokaWQgfSwg
bm90ZSk7CisgKgorICogICAgLy8gVGhpcyB3aWxsIFBVVCAvbm90ZXMvSUQgd2l0aCB0aGUgbm90
ZSBvYmplY3QgaW4gdGhlIHJlcXVlc3QgcGF5bG9hZAorICogICAgfV0pOworICogYGBgCisgKgor
ICogQGV4YW1wbGUKKyAqCisgKiAjIENhbmNlbGxpbmcgcmVxdWVzdHMKKyAqCisgKiBJZiBhbiBh
Y3Rpb24ncyBjb25maWd1cmF0aW9uIHNwZWNpZmllcyB0aGF0IGl0IGlzIGNhbmNlbGxhYmxlLCB5
b3UgY2FuIGNhbmNlbCB0aGUgcmVxdWVzdCByZWxhdGVkCisgKiB0byBhbiBpbnN0YW5jZSBvciBj
b2xsZWN0aW9uIChhcyBsb25nIGFzIGl0IGlzIGEgcmVzdWx0IG9mIGEgIm5vbi1pbnN0YW5jZSIg
Y2FsbCk6CisgKgorICAgYGBganMKKyAgICAgLy8gLi4uZGVmaW5pbmcgdGhlIGBIb3RlbGAgcmVz
b3VyY2UuLi4KKyAgICAgdmFyIEhvdGVsID0gJHJlc291cmNlKCcvYXBpL2hvdGVsLzppZCcsIHtp
ZDogJ0BpZCd9LCB7CisgICAgICAgLy8gTGV0J3MgbWFrZSB0aGUgYHF1ZXJ5KClgIG1ldGhvZCBj
YW5jZWxsYWJsZQorICAgICAgIHF1ZXJ5OiB7bWV0aG9kOiAnZ2V0JywgaXNBcnJheTogdHJ1ZSwg
Y2FuY2VsbGFibGU6IHRydWV9CisgICAgIH0pOworCisgICAgIC8vIC4uLnNvbWV3aGVyZSBpbiB0
aGUgUGxhblZhY2F0aW9uQ29udHJvbGxlci4uLgorICAgICAuLi4KKyAgICAgdGhpcy5vbkRlc3Rp
bmF0aW9uQ2hhbmdlZCA9IGZ1bmN0aW9uIG9uRGVzdGluYXRpb25DaGFuZ2VkKGRlc3RpbmF0aW9u
KSB7CisgICAgICAgLy8gV2UgZG9uJ3QgY2FyZSBhYm91dCBhbnkgcGVuZGluZyByZXF1ZXN0IGZv
ciBob3RlbHMKKyAgICAgICAvLyBpbiBhIGRpZmZlcmVudCBkZXN0aW5hdGlvbiBhbnkgbW9yZQor
ICAgICAgIHRoaXMuYXZhaWxhYmxlSG90ZWxzLiRjYW5jZWxSZXF1ZXN0KCk7CisKKyAgICAgICAv
LyBMZXQncyBxdWVyeSBmb3IgaG90ZWxzIGluICc8ZGVzdGluYXRpb24+JworICAgICAgIC8vIChj
YWxsczogL2FwaS9ob3RlbD9sb2NhdGlvbj08ZGVzdGluYXRpb24+KQorICAgICAgIHRoaXMuYXZh
aWxhYmxlSG90ZWxzID0gSG90ZWwucXVlcnkoe2xvY2F0aW9uOiBkZXN0aW5hdGlvbn0pOworICAg
ICB9OworICAgYGBgCisgKgorICovCithbmd1bGFyLm1vZHVsZSgnbmdSZXNvdXJjZScsIFsnbmcn
XSkuCisgIHByb3ZpZGVyKCckcmVzb3VyY2UnLCBmdW5jdGlvbiBSZXNvdXJjZVByb3ZpZGVyKCkg
eworICAgIHZhciBQUk9UT0NPTF9BTkRfRE9NQUlOX1JFR0VYID0gL15odHRwcz86XC9cL1teXC9d
Ki87CisKKyAgICB2YXIgcHJvdmlkZXIgPSB0aGlzOworCisgICAgLyoqCisgICAgICogQG5nZG9j
IHByb3BlcnR5CisgICAgICogQG5hbWUgJHJlc291cmNlUHJvdmlkZXIjZGVmYXVsdHMKKyAgICAg
KiBAZGVzY3JpcHRpb24KKyAgICAgKiBPYmplY3QgY29udGFpbmluZyBkZWZhdWx0IG9wdGlvbnMg
dXNlZCB3aGVuIGNyZWF0aW5nIGAkcmVzb3VyY2VgIGluc3RhbmNlcy4KKyAgICAgKgorICAgICAq
IFRoZSBkZWZhdWx0IHZhbHVlcyBzYXRpc2Z5IGEgd2lkZSByYW5nZSBvZiB1c2VjYXNlcywgYnV0
IHlvdSBtYXkgY2hvb3NlIHRvIG92ZXJ3cml0ZSBhbnkgb2YKKyAgICAgKiB0aGVtIHRvIGZ1cnRo
ZXIgY3VzdG9taXplIHlvdXIgaW5zdGFuY2VzLiBUaGUgYXZhaWxhYmxlIHByb3BlcnRpZXMgYXJl
OgorICAgICAqCisgICAgICogLSAqKnN0cmlwVHJhaWxpbmdTbGFzaGVzKiog4oCTIGB7Ym9vbGVh
bn1gIOKAkyBJZiB0cnVlLCB0aGVuIHRoZSB0cmFpbGluZyBzbGFzaGVzIGZyb20gYW55CisgICAg
ICogICBjYWxjdWxhdGVkIFVSTCB3aWxsIGJlIHN0cmlwcGVkLjxiciAvPgorICAgICAqICAgKERl
ZmF1bHRzIHRvIHRydWUuKQorICAgICAqIC0gKipjYW5jZWxsYWJsZSoqIOKAkyBge2Jvb2xlYW59
YCDigJMgSWYgdHJ1ZSwgdGhlIHJlcXVlc3QgbWFkZSBieSBhICJub24taW5zdGFuY2UiIGNhbGwg
d2lsbCBiZQorICAgICAqICAgY2FuY2VsbGVkIChpZiBub3QgYWxyZWFkeSBjb21wbGV0ZWQpIGJ5
IGNhbGxpbmcgYCRjYW5jZWxSZXF1ZXN0KClgIG9uIHRoZSBjYWxsJ3MgcmV0dXJuCisgICAgICog
ICB2YWx1ZS4gRm9yIG1vcmUgZGV0YWlscywgc2VlIHtAbGluayBuZ1Jlc291cmNlLiRyZXNvdXJj
ZX0uIFRoaXMgY2FuIGJlIG92ZXJ3cml0dGVuIHBlcgorICAgICAqICAgcmVzb3VyY2UgY2xhc3Mg
b3IgYWN0aW9uLjxiciAvPgorICAgICAqICAgKERlZmF1bHRzIHRvIGZhbHNlLikKKyAgICAgKiAt
ICoqYWN0aW9ucyoqIC0gYHtPYmplY3QuPE9iamVjdD59YCAtIEEgaGFzaCB3aXRoIGRlZmF1bHQg
YWN0aW9ucyBkZWNsYXJhdGlvbnMuIEFjdGlvbnMgYXJlCisgICAgICogICBoaWdoLWxldmVsIG1l
dGhvZHMgY29ycmVzcG9uZGluZyB0byBSRVNUZnVsIGFjdGlvbnMvbWV0aG9kcyBvbiByZXNvdXJj
ZXMuIEFuIGFjdGlvbiBtYXkKKyAgICAgKiAgIHNwZWNpZnkgd2hhdCBIVFRQIG1ldGhvZCB0byB1
c2UsIHdoYXQgVVJMIHRvIGhpdCwgaWYgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGEgc2luZ2xl
CisgICAgICogICBvYmplY3Qgb3IgYSBjb2xsZWN0aW9uIChhcnJheSkgb2Ygb2JqZWN0cyBldGMu
IEZvciBtb3JlIGRldGFpbHMsIHNlZQorICAgICAqICAge0BsaW5rIG5nUmVzb3VyY2UuJHJlc291
cmNlfS4gVGhlIGFjdGlvbnMgY2FuIGFsc28gYmUgZW5oYW5jZWQgb3Igb3ZlcndyaXR0ZW4gcGVy
IHJlc291cmNlCisgICAgICogICBjbGFzcy48YnIgLz4KKyAgICAgKiAgIFRoZSBkZWZhdWx0IGFj
dGlvbnMgYXJlOgorICAgICAqICAgYGBganMKKyAgICAgKiAgIHsKKyAgICAgKiAgICAgZ2V0OiB7
bWV0aG9kOiAnR0VUJ30sCisgICAgICogICAgIHNhdmU6IHttZXRob2Q6ICdQT1NUJ30sCisgICAg
ICogICAgIHF1ZXJ5OiB7bWV0aG9kOiAnR0VUJywgaXNBcnJheTogdHJ1ZX0sCisgICAgICogICAg
IHJlbW92ZToge21ldGhvZDogJ0RFTEVURSd9LAorICAgICAqICAgICBkZWxldGU6IHttZXRob2Q6
ICdERUxFVEUnfQorICAgICAqICAgfQorICAgICAqICAgYGBgCisgICAgICoKKyAgICAgKiAjIyMj
IEV4YW1wbGUKKyAgICAgKgorICAgICAqIEZvciBleGFtcGxlLCB5b3UgY2FuIHNwZWNpZnkgYSBu
ZXcgYHVwZGF0ZWAgYWN0aW9uIHRoYXQgdXNlcyB0aGUgYFBVVGAgSFRUUCB2ZXJiOgorICAgICAq
CisgICAgICogYGBganMKKyAgICAgKiAgIGFuZ3VsYXIuCisgICAgICogICAgIG1vZHVsZSgnbXlB
cHAnKS4KKyAgICAgKiAgICAgY29uZmlnKFsncmVzb3VyY2VQcm92aWRlcicsIGZ1bmN0aW9uICgk
cmVzb3VyY2VQcm92aWRlcikgeworICAgICAqICAgICAgICRyZXNvdXJjZVByb3ZpZGVyLmRlZmF1
bHRzLmFjdGlvbnMudXBkYXRlID0geworICAgICAqICAgICAgICAgbWV0aG9kOiAnUFVUJworICAg
ICAqICAgICAgIH07CisgICAgICogICAgIH0pOworICAgICAqIGBgYAorICAgICAqCisgICAgICog
T3IgeW91IGNhbiBldmVuIG92ZXJ3cml0ZSB0aGUgd2hvbGUgYGFjdGlvbnNgIGxpc3QgYW5kIHNw
ZWNpZnkgeW91ciBvd246CisgICAgICoKKyAgICAgKiBgYGBqcworICAgICAqICAgYW5ndWxhci4K
KyAgICAgKiAgICAgbW9kdWxlKCdteUFwcCcpLgorICAgICAqICAgICBjb25maWcoWydyZXNvdXJj
ZVByb3ZpZGVyJywgZnVuY3Rpb24gKCRyZXNvdXJjZVByb3ZpZGVyKSB7CisgICAgICogICAgICAg
JHJlc291cmNlUHJvdmlkZXIuZGVmYXVsdHMuYWN0aW9ucyA9IHsKKyAgICAgKiAgICAgICAgIGNy
ZWF0ZToge21ldGhvZDogJ1BPU1QnfQorICAgICAqICAgICAgICAgZ2V0OiAgICB7bWV0aG9kOiAn
R0VUJ30sCisgICAgICogICAgICAgICBnZXRBbGw6IHttZXRob2Q6ICdHRVQnLCBpc0FycmF5OnRy
dWV9LAorICAgICAqICAgICAgICAgdXBkYXRlOiB7bWV0aG9kOiAnUFVUJ30sCisgICAgICogICAg
ICAgICBkZWxldGU6IHttZXRob2Q6ICdERUxFVEUnfQorICAgICAqICAgICAgIH07CisgICAgICog
ICAgIH0pOworICAgICAqIGBgYAorICAgICAqCisgICAgICovCisgICAgdGhpcy5kZWZhdWx0cyA9
IHsKKyAgICAgIC8vIFN0cmlwIHNsYXNoZXMgYnkgZGVmYXVsdAorICAgICAgc3RyaXBUcmFpbGlu
Z1NsYXNoZXM6IHRydWUsCisKKyAgICAgIC8vIE1ha2Ugbm9uLWluc3RhbmNlIHJlcXVlc3RzIGNh
bmNlbGxhYmxlICh2aWEgYCRjYW5jZWxSZXF1ZXN0KClgKQorICAgICAgY2FuY2VsbGFibGU6IGZh
bHNlLAorCisgICAgICAvLyBEZWZhdWx0IGFjdGlvbnMgY29uZmlndXJhdGlvbgorICAgICAgYWN0
aW9uczogeworICAgICAgICAnZ2V0Jzoge21ldGhvZDogJ0dFVCd9LAorICAgICAgICAnc2F2ZSc6
IHttZXRob2Q6ICdQT1NUJ30sCisgICAgICAgICdxdWVyeSc6IHttZXRob2Q6ICdHRVQnLCBpc0Fy
cmF5OiB0cnVlfSwKKyAgICAgICAgJ3JlbW92ZSc6IHttZXRob2Q6ICdERUxFVEUnfSwKKyAgICAg
ICAgJ2RlbGV0ZSc6IHttZXRob2Q6ICdERUxFVEUnfQorICAgICAgfQorICAgIH07CisKKyAgICB0
aGlzLiRnZXQgPSBbJyRodHRwJywgJyRsb2cnLCAnJHEnLCAnJHRpbWVvdXQnLCBmdW5jdGlvbigk
aHR0cCwgJGxvZywgJHEsICR0aW1lb3V0KSB7CisKKyAgICAgIHZhciBub29wID0gYW5ndWxhci5u
b29wLAorICAgICAgICBmb3JFYWNoID0gYW5ndWxhci5mb3JFYWNoLAorICAgICAgICBleHRlbmQg
PSBhbmd1bGFyLmV4dGVuZCwKKyAgICAgICAgY29weSA9IGFuZ3VsYXIuY29weSwKKyAgICAgICAg
aXNGdW5jdGlvbiA9IGFuZ3VsYXIuaXNGdW5jdGlvbjsKKworICAgICAgLyoqCisgICAgICAgKiBX
ZSBuZWVkIG91ciBjdXN0b20gbWV0aG9kIGJlY2F1c2UgZW5jb2RlVVJJQ29tcG9uZW50IGlzIHRv
byBhZ2dyZXNzaXZlIGFuZCBkb2Vzbid0IGZvbGxvdworICAgICAgICogaHR0cDovL3d3dy5pZXRm
Lm9yZy9yZmMvcmZjMzk4Ni50eHQgd2l0aCByZWdhcmRzIHRvIHRoZSBjaGFyYWN0ZXIgc2V0Cisg
ICAgICAgKiAocGNoYXIpIGFsbG93ZWQgaW4gcGF0aCBzZWdtZW50czoKKyAgICAgICAqICAgIHNl
Z21lbnQgICAgICAgPSAqcGNoYXIKKyAgICAgICAqICAgIHBjaGFyICAgICAgICAgPSB1bnJlc2Vy
dmVkIC8gcGN0LWVuY29kZWQgLyBzdWItZGVsaW1zIC8gIjoiIC8gIkAiCisgICAgICAgKiAgICBw
Y3QtZW5jb2RlZCAgID0gIiUiIEhFWERJRyBIRVhESUcKKyAgICAgICAqICAgIHVucmVzZXJ2ZWQg
ICAgPSBBTFBIQSAvIERJR0lUIC8gIi0iIC8gIi4iIC8gIl8iIC8gIn4iCisgICAgICAgKiAgICBz
dWItZGVsaW1zICAgID0gIiEiIC8gIiQiIC8gIiYiIC8gIiciIC8gIigiIC8gIikiCisgICAgICAg
KiAgICAgICAgICAgICAgICAgICAgIC8gIioiIC8gIisiIC8gIiwiIC8gIjsiIC8gIj0iCisgICAg
ICAgKi8KKyAgICAgIGZ1bmN0aW9uIGVuY29kZVVyaVNlZ21lbnQodmFsKSB7CisgICAgICAgIHJl
dHVybiBlbmNvZGVVcmlRdWVyeSh2YWwsIHRydWUpLgorICAgICAgICAgIHJlcGxhY2UoLyUyNi9n
aSwgJyYnKS4KKyAgICAgICAgICByZXBsYWNlKC8lM0QvZ2ksICc9JykuCisgICAgICAgICAgcmVw
bGFjZSgvJTJCL2dpLCAnKycpOworICAgICAgfQorCisKKyAgICAgIC8qKgorICAgICAgICogVGhp
cyBtZXRob2QgaXMgaW50ZW5kZWQgZm9yIGVuY29kaW5nICprZXkqIG9yICp2YWx1ZSogcGFydHMg
b2YgcXVlcnkgY29tcG9uZW50LiBXZSBuZWVkIGEKKyAgICAgICAqIGN1c3RvbSBtZXRob2QgYmVj
YXVzZSBlbmNvZGVVUklDb21wb25lbnQgaXMgdG9vIGFnZ3Jlc3NpdmUgYW5kIGVuY29kZXMgc3R1
ZmYgdGhhdCBkb2Vzbid0CisgICAgICAgKiBoYXZlIHRvIGJlIGVuY29kZWQgcGVyIGh0dHA6Ly90
b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODY6CisgICAgICAgKiAgICBxdWVyeSAgICAgICA9ICoo
IHBjaGFyIC8gIi8iIC8gIj8iICkKKyAgICAgICAqICAgIHBjaGFyICAgICAgICAgPSB1bnJlc2Vy
dmVkIC8gcGN0LWVuY29kZWQgLyBzdWItZGVsaW1zIC8gIjoiIC8gIkAiCisgICAgICAgKiAgICB1
bnJlc2VydmVkICAgID0gQUxQSEEgLyBESUdJVCAvICItIiAvICIuIiAvICJfIiAvICJ+IgorICAg
ICAgICogICAgcGN0LWVuY29kZWQgICA9ICIlIiBIRVhESUcgSEVYRElHCisgICAgICAgKiAgICBz
dWItZGVsaW1zICAgID0gIiEiIC8gIiQiIC8gIiYiIC8gIiciIC8gIigiIC8gIikiCisgICAgICAg
KiAgICAgICAgICAgICAgICAgICAgIC8gIioiIC8gIisiIC8gIiwiIC8gIjsiIC8gIj0iCisgICAg
ICAgKi8KKyAgICAgIGZ1bmN0aW9uIGVuY29kZVVyaVF1ZXJ5KHZhbCwgcGN0RW5jb2RlU3BhY2Vz
KSB7CisgICAgICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS4KKyAgICAgICAgICBy
ZXBsYWNlKC8lNDAvZ2ksICdAJykuCisgICAgICAgICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLgor
ICAgICAgICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLgorICAgICAgICAgIHJlcGxhY2UoLyUyQy9n
aSwgJywnKS4KKyAgICAgICAgICByZXBsYWNlKC8lMjAvZywgKHBjdEVuY29kZVNwYWNlcyA/ICcl
MjAnIDogJysnKSk7CisgICAgICB9CisKKyAgICAgIGZ1bmN0aW9uIFJvdXRlKHRlbXBsYXRlLCBk
ZWZhdWx0cykgeworICAgICAgICB0aGlzLnRlbXBsYXRlID0gdGVtcGxhdGU7CisgICAgICAgIHRo
aXMuZGVmYXVsdHMgPSBleHRlbmQoe30sIHByb3ZpZGVyLmRlZmF1bHRzLCBkZWZhdWx0cyk7Cisg
ICAgICAgIHRoaXMudXJsUGFyYW1zID0ge307CisgICAgICB9CisKKyAgICAgIFJvdXRlLnByb3Rv
dHlwZSA9IHsKKyAgICAgICAgc2V0VXJsUGFyYW1zOiBmdW5jdGlvbihjb25maWcsIHBhcmFtcywg
YWN0aW9uVXJsKSB7CisgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzLAorICAgICAgICAgICAgdXJs
ID0gYWN0aW9uVXJsIHx8IHNlbGYudGVtcGxhdGUsCisgICAgICAgICAgICB2YWwsCisgICAgICAg
ICAgICBlbmNvZGVkVmFsLAorICAgICAgICAgICAgcHJvdG9jb2xBbmREb21haW4gPSAnJzsKKwor
ICAgICAgICAgIHZhciB1cmxQYXJhbXMgPSBzZWxmLnVybFBhcmFtcyA9IHt9OworICAgICAgICAg
IGZvckVhY2godXJsLnNwbGl0KC9cVy8pLCBmdW5jdGlvbihwYXJhbSkgeworICAgICAgICAgICAg
aWYgKHBhcmFtID09PSAnaGFzT3duUHJvcGVydHknKSB7CisgICAgICAgICAgICAgIHRocm93ICRy
ZXNvdXJjZU1pbkVycignYmFkbmFtZScsICdoYXNPd25Qcm9wZXJ0eSBpcyBub3QgYSB2YWxpZCBw
YXJhbWV0ZXIgbmFtZS4nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghKG5ldyBS
ZWdFeHAoJ15cXGQrJCcpLnRlc3QocGFyYW0pKSAmJiBwYXJhbSAmJgorICAgICAgICAgICAgICAo
bmV3IFJlZ0V4cCgnKF58W15cXFxcXSk6JyArIHBhcmFtICsgJyhcXFd8JCknKS50ZXN0KHVybCkp
KSB7CisgICAgICAgICAgICAgIHVybFBhcmFtc1twYXJhbV0gPSB7CisgICAgICAgICAgICAgICAg
aXNRdWVyeVBhcmFtVmFsdWU6IChuZXcgUmVnRXhwKCdcXD8uKj06JyArIHBhcmFtICsgJyg/Olxc
V3wkKScpKS50ZXN0KHVybCkKKyAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICB9KTsKKyAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZSgvXFw6L2csICc6Jyk7CisgICAg
ICAgICAgdXJsID0gdXJsLnJlcGxhY2UoUFJPVE9DT0xfQU5EX0RPTUFJTl9SRUdFWCwgZnVuY3Rp
b24obWF0Y2gpIHsKKyAgICAgICAgICAgIHByb3RvY29sQW5kRG9tYWluID0gbWF0Y2g7CisgICAg
ICAgICAgICByZXR1cm4gJyc7CisgICAgICAgICAgfSk7CisKKyAgICAgICAgICBwYXJhbXMgPSBw
YXJhbXMgfHwge307CisgICAgICAgICAgZm9yRWFjaChzZWxmLnVybFBhcmFtcywgZnVuY3Rpb24o
cGFyYW1JbmZvLCB1cmxQYXJhbSkgeworICAgICAgICAgICAgdmFsID0gcGFyYW1zLmhhc093blBy
b3BlcnR5KHVybFBhcmFtKSA/IHBhcmFtc1t1cmxQYXJhbV0gOiBzZWxmLmRlZmF1bHRzW3VybFBh
cmFtXTsKKyAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZCh2YWwpICYmIHZhbCAhPT0g
bnVsbCkgeworICAgICAgICAgICAgICBpZiAocGFyYW1JbmZvLmlzUXVlcnlQYXJhbVZhbHVlKSB7
CisgICAgICAgICAgICAgICAgZW5jb2RlZFZhbCA9IGVuY29kZVVyaVF1ZXJ5KHZhbCwgdHJ1ZSk7
CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW5jb2RlZFZhbCA9IGVu
Y29kZVVyaVNlZ21lbnQodmFsKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB1cmwg
PSB1cmwucmVwbGFjZShuZXcgUmVnRXhwKCc6JyArIHVybFBhcmFtICsgJyhcXFd8JCknLCAnZycp
LCBmdW5jdGlvbihtYXRjaCwgcDEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlZFZh
bCArIHAxOworICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgIHVybCA9IHVybC5yZXBsYWNlKG5ldyBSZWdFeHAoJygvPyk6JyArIHVybFBhcmFtICsg
JyhcXFd8JCknLCAnZycpLCBmdW5jdGlvbihtYXRjaCwKKyAgICAgICAgICAgICAgICAgIGxlYWRp
bmdTbGFzaGVzLCB0YWlsKSB7CisgICAgICAgICAgICAgICAgaWYgKHRhaWwuY2hhckF0KDApID09
PSAnLycpIHsKKyAgICAgICAgICAgICAgICAgIHJldHVybiB0YWlsOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICByZXR1cm4gbGVhZGluZ1NsYXNoZXMgKyB0YWls
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgfSk7CisKKyAgICAgICAgICAvLyBzdHJpcCB0cmFpbGluZyBzbGFzaGVzIGFuZCBz
ZXQgdGhlIHVybCAodW5sZXNzIHRoaXMgYmVoYXZpb3IgaXMgc3BlY2lmaWNhbGx5IGRpc2FibGVk
KQorICAgICAgICAgIGlmIChzZWxmLmRlZmF1bHRzLnN0cmlwVHJhaWxpbmdTbGFzaGVzKSB7Cisg
ICAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZSgvXC8rJC8sICcnKSB8fCAnLyc7CisgICAgICAg
ICAgfQorCisgICAgICAgICAgLy8gdGhlbiByZXBsYWNlIGNvbGxhcHNlIGAvLmAgaWYgZm91bmQg
aW4gdGhlIGxhc3QgVVJMIHBhdGggc2VnbWVudCBiZWZvcmUgdGhlIHF1ZXJ5CisgICAgICAgICAg
Ly8gRS5nLiBgaHR0cDovL3VybC5jb20vaWQuL2Zvcm1hdD9xPXhgIGJlY29tZXMgYGh0dHA6Ly91
cmwuY29tL2lkLmZvcm1hdD9xPXhgCisgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoL1wvXC4o
Pz1cdysoJHxcPykpLywgJy4nKTsKKyAgICAgICAgICAvLyByZXBsYWNlIGVzY2FwZWQgYC9cLmAg
d2l0aCBgLy5gCisgICAgICAgICAgY29uZmlnLnVybCA9IHByb3RvY29sQW5kRG9tYWluICsgdXJs
LnJlcGxhY2UoL1wvXFxcLi8sICcvLicpOworCisKKyAgICAgICAgICAvLyBzZXQgcGFyYW1zIC0g
ZGVsZWdhdGUgcGFyYW0gZW5jb2RpbmcgdG8gJGh0dHAKKyAgICAgICAgICBmb3JFYWNoKHBhcmFt
cywgZnVuY3Rpb24odmFsdWUsIGtleSkgeworICAgICAgICAgICAgaWYgKCFzZWxmLnVybFBhcmFt
c1trZXldKSB7CisgICAgICAgICAgICAgIGNvbmZpZy5wYXJhbXMgPSBjb25maWcucGFyYW1zIHx8
IHt9OworICAgICAgICAgICAgICBjb25maWcucGFyYW1zW2tleV0gPSB2YWx1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgfTsKKworCisgICAgICBmdW5j
dGlvbiByZXNvdXJjZUZhY3RvcnkodXJsLCBwYXJhbURlZmF1bHRzLCBhY3Rpb25zLCBvcHRpb25z
KSB7CisgICAgICAgIHZhciByb3V0ZSA9IG5ldyBSb3V0ZSh1cmwsIG9wdGlvbnMpOworCisgICAg
ICAgIGFjdGlvbnMgPSBleHRlbmQoe30sIHByb3ZpZGVyLmRlZmF1bHRzLmFjdGlvbnMsIGFjdGlv
bnMpOworCisgICAgICAgIGZ1bmN0aW9uIGV4dHJhY3RQYXJhbXMoZGF0YSwgYWN0aW9uUGFyYW1z
KSB7CisgICAgICAgICAgdmFyIGlkcyA9IHt9OworICAgICAgICAgIGFjdGlvblBhcmFtcyA9IGV4
dGVuZCh7fSwgcGFyYW1EZWZhdWx0cywgYWN0aW9uUGFyYW1zKTsKKyAgICAgICAgICBmb3JFYWNo
KGFjdGlvblBhcmFtcywgZnVuY3Rpb24odmFsdWUsIGtleSkgeworICAgICAgICAgICAgaWYgKGlz
RnVuY3Rpb24odmFsdWUpKSB7IHZhbHVlID0gdmFsdWUoZGF0YSk7IH0KKyAgICAgICAgICAgIGlk
c1trZXldID0gdmFsdWUgJiYgdmFsdWUuY2hhckF0ICYmIHZhbHVlLmNoYXJBdCgwKSA9PT0gJ0An
ID8KKyAgICAgICAgICAgICAgbG9va3VwRG90dGVkUGF0aChkYXRhLCB2YWx1ZS5zdWJzdHIoMSkp
IDogdmFsdWU7CisgICAgICAgICAgfSk7CisgICAgICAgICAgcmV0dXJuIGlkczsKKyAgICAgICAg
fQorCisgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRSZXNwb25zZUludGVyY2VwdG9yKHJlc3BvbnNl
KSB7CisgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc291cmNlOworICAgICAgICB9CisKKyAg
ICAgICAgZnVuY3Rpb24gUmVzb3VyY2UodmFsdWUpIHsKKyAgICAgICAgICBzaGFsbG93Q2xlYXJB
bmRDb3B5KHZhbHVlIHx8IHt9LCB0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlc291cmNl
LnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICB2YXIgZGF0YSA9IGV4
dGVuZCh7fSwgdGhpcyk7CisgICAgICAgICAgZGVsZXRlIGRhdGEuJHByb21pc2U7CisgICAgICAg
ICAgZGVsZXRlIGRhdGEuJHJlc29sdmVkOworICAgICAgICAgIHJldHVybiBkYXRhOworICAgICAg
ICB9OworCisgICAgICAgIGZvckVhY2goYWN0aW9ucywgZnVuY3Rpb24oYWN0aW9uLCBuYW1lKSB7
CisgICAgICAgICAgdmFyIGhhc0JvZHkgPSAvXihQT1NUfFBVVHxQQVRDSCkkL2kudGVzdChhY3Rp
b24ubWV0aG9kKTsKKyAgICAgICAgICB2YXIgbnVtZXJpY1RpbWVvdXQgPSBhY3Rpb24udGltZW91
dDsKKyAgICAgICAgICB2YXIgY2FuY2VsbGFibGUgPSBhbmd1bGFyLmlzRGVmaW5lZChhY3Rpb24u
Y2FuY2VsbGFibGUpID8gYWN0aW9uLmNhbmNlbGxhYmxlIDoKKyAgICAgICAgICAgICAgKG9wdGlv
bnMgJiYgYW5ndWxhci5pc0RlZmluZWQob3B0aW9ucy5jYW5jZWxsYWJsZSkpID8gb3B0aW9ucy5j
YW5jZWxsYWJsZSA6CisgICAgICAgICAgICAgIHByb3ZpZGVyLmRlZmF1bHRzLmNhbmNlbGxhYmxl
OworCisgICAgICAgICAgaWYgKG51bWVyaWNUaW1lb3V0ICYmICFhbmd1bGFyLmlzTnVtYmVyKG51
bWVyaWNUaW1lb3V0KSkgeworICAgICAgICAgICAgJGxvZy5kZWJ1ZygnbmdSZXNvdXJjZTpcbicg
KworICAgICAgICAgICAgICAgICAgICAgICAnICBPbmx5IG51bWVyaWMgdmFsdWVzIGFyZSBhbGxv
d2VkIGFzIGB0aW1lb3V0YC5cbicgKworICAgICAgICAgICAgICAgICAgICAgICAnICBQcm9taXNl
cyBhcmUgbm90IHN1cHBvcnRlZCBpbiAkcmVzb3VyY2UsIGJlY2F1c2UgdGhlIHNhbWUgdmFsdWUg
d291bGQgJyArCisgICAgICAgICAgICAgICAgICAgICAgICdiZSB1c2VkIGZvciBtdWx0aXBsZSBy
ZXF1ZXN0cy4gSWYgeW91IGFyZSBsb29raW5nIGZvciBhIHdheSB0byBjYW5jZWwgJyArCisgICAg
ICAgICAgICAgICAgICAgICAgICdyZXF1ZXN0cywgeW91IHNob3VsZCB1c2UgdGhlIGBjYW5jZWxs
YWJsZWAgb3B0aW9uLicpOworICAgICAgICAgICAgZGVsZXRlIGFjdGlvbi50aW1lb3V0OworICAg
ICAgICAgICAgbnVtZXJpY1RpbWVvdXQgPSBudWxsOworICAgICAgICAgIH0KKworICAgICAgICAg
IFJlc291cmNlW25hbWVdID0gZnVuY3Rpb24oYTEsIGEyLCBhMywgYTQpIHsKKyAgICAgICAgICAg
IHZhciBwYXJhbXMgPSB7fSwgZGF0YSwgc3VjY2VzcywgZXJyb3I7CisKKyAgICAgICAgICAgIHN3
aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkgeworICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAg
ICAgICAgICAgZXJyb3IgPSBhNDsKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gYTM7CisgICAg
ICAgICAgICAgICAgLy8gZmFsbHMgdGhyb3VnaAorICAgICAgICAgICAgICBjYXNlIDM6CisgICAg
ICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihhMikpIHsK
KyAgICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGExKSkgeworICAgICAgICAgICAgICAg
ICAgICBzdWNjZXNzID0gYTE7CisgICAgICAgICAgICAgICAgICAgIGVycm9yID0gYTI7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICBzdWNjZXNzID0gYTI7CisgICAgICAgICAgICAgICAgICBlcnJvciA9IGEzOworICAg
ICAgICAgICAgICAgICAgLy8gZmFsbHMgdGhyb3VnaAorICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICBwYXJhbXMgPSBhMTsKKyAgICAgICAgICAgICAgICAgIGRhdGEg
PSBhMjsKKyAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBhMzsKKyAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBmYWxscyB0aHJv
dWdoCisgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlv
bihhMSkpIHN1Y2Nlc3MgPSBhMTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChoYXNCb2R5KSBk
YXRhID0gYTE7CisgICAgICAgICAgICAgICAgZWxzZSBwYXJhbXMgPSBhMTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAwOiBicmVhazsKKyAgICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB0aHJvdyAkcmVzb3VyY2VNaW5FcnIoJ2JhZGFyZ3Mn
LAorICAgICAgICAgICAgICAgICAgJ0V4cGVjdGVkIHVwIHRvIDQgYXJndW1lbnRzIFtwYXJhbXMs
IGRhdGEsIHN1Y2Nlc3MsIGVycm9yXSwgZ290IHswfSBhcmd1bWVudHMnLAorICAgICAgICAgICAg
ICAgICAgYXJndW1lbnRzLmxlbmd0aCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZh
ciBpc0luc3RhbmNlQ2FsbCA9IHRoaXMgaW5zdGFuY2VvZiBSZXNvdXJjZTsKKyAgICAgICAgICAg
IHZhciB2YWx1ZSA9IGlzSW5zdGFuY2VDYWxsID8gZGF0YSA6IChhY3Rpb24uaXNBcnJheSA/IFtd
IDogbmV3IFJlc291cmNlKGRhdGEpKTsKKyAgICAgICAgICAgIHZhciBodHRwQ29uZmlnID0ge307
CisgICAgICAgICAgICB2YXIgcmVzcG9uc2VJbnRlcmNlcHRvciA9IGFjdGlvbi5pbnRlcmNlcHRv
ciAmJiBhY3Rpb24uaW50ZXJjZXB0b3IucmVzcG9uc2UgfHwKKyAgICAgICAgICAgICAgZGVmYXVs
dFJlc3BvbnNlSW50ZXJjZXB0b3I7CisgICAgICAgICAgICB2YXIgcmVzcG9uc2VFcnJvckludGVy
Y2VwdG9yID0gYWN0aW9uLmludGVyY2VwdG9yICYmIGFjdGlvbi5pbnRlcmNlcHRvci5yZXNwb25z
ZUVycm9yIHx8CisgICAgICAgICAgICAgIHVuZGVmaW5lZDsKKyAgICAgICAgICAgIHZhciB0aW1l
b3V0RGVmZXJyZWQ7CisgICAgICAgICAgICB2YXIgbnVtZXJpY1RpbWVvdXRQcm9taXNlOworCisg
ICAgICAgICAgICBmb3JFYWNoKGFjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSkgeworICAgICAg
ICAgICAgICBzd2l0Y2ggKGtleSkgeworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgICBodHRwQ29uZmlnW2tleV0gPSBjb3B5KHZhbHVlKTsKKyAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ3BhcmFtcyc6CisgICAgICAgICAgICAg
ICAgY2FzZSAnaXNBcnJheSc6CisgICAgICAgICAgICAgICAgY2FzZSAnaW50ZXJjZXB0b3InOgor
ICAgICAgICAgICAgICAgIGNhc2UgJ2NhbmNlbGxhYmxlJzoKKyAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgaWYg
KCFpc0luc3RhbmNlQ2FsbCAmJiBjYW5jZWxsYWJsZSkgeworICAgICAgICAgICAgICB0aW1lb3V0
RGVmZXJyZWQgPSAkcS5kZWZlcigpOworICAgICAgICAgICAgICBodHRwQ29uZmlnLnRpbWVvdXQg
PSB0aW1lb3V0RGVmZXJyZWQucHJvbWlzZTsKKworICAgICAgICAgICAgICBpZiAobnVtZXJpY1Rp
bWVvdXQpIHsKKyAgICAgICAgICAgICAgICBudW1lcmljVGltZW91dFByb21pc2UgPSAkdGltZW91
dCh0aW1lb3V0RGVmZXJyZWQucmVzb2x2ZSwgbnVtZXJpY1RpbWVvdXQpOworICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChoYXNCb2R5KSBodHRwQ29uZmln
LmRhdGEgPSBkYXRhOworICAgICAgICAgICAgcm91dGUuc2V0VXJsUGFyYW1zKGh0dHBDb25maWcs
CisgICAgICAgICAgICAgIGV4dGVuZCh7fSwgZXh0cmFjdFBhcmFtcyhkYXRhLCBhY3Rpb24ucGFy
YW1zIHx8IHt9KSwgcGFyYW1zKSwKKyAgICAgICAgICAgICAgYWN0aW9uLnVybCk7CisKKyAgICAg
ICAgICAgIHZhciBwcm9taXNlID0gJGh0dHAoaHR0cENvbmZpZykudGhlbihmdW5jdGlvbihyZXNw
b25zZSkgeworICAgICAgICAgICAgICB2YXIgZGF0YSA9IHJlc3BvbnNlLmRhdGE7CisKKyAgICAg
ICAgICAgICAgaWYgKGRhdGEpIHsKKyAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNvbnZlcnQg
YWN0aW9uLmlzQXJyYXkgdG8gYm9vbGVhbiBpbiBjYXNlIGl0IGlzIHVuZGVmaW5lZAorICAgICAg
ICAgICAgICAgIGlmIChhbmd1bGFyLmlzQXJyYXkoZGF0YSkgIT09ICghIWFjdGlvbi5pc0FycmF5
KSkgeworICAgICAgICAgICAgICAgICAgdGhyb3cgJHJlc291cmNlTWluRXJyKCdiYWRjZmcnLAor
ICAgICAgICAgICAgICAgICAgICAgICdFcnJvciBpbiByZXNvdXJjZSBjb25maWd1cmF0aW9uIGZv
ciBhY3Rpb24gYHswfWAuIEV4cGVjdGVkIHJlc3BvbnNlIHRvICcgKworICAgICAgICAgICAgICAg
ICAgICAgICdjb250YWluIGFuIHsxfSBidXQgZ290IGFuIHsyfSAoUmVxdWVzdDogezN9IHs0fSkn
LCBuYW1lLCBhY3Rpb24uaXNBcnJheSA/ICdhcnJheScgOiAnb2JqZWN0JywKKyAgICAgICAgICAg
ICAgICAgICAgYW5ndWxhci5pc0FycmF5KGRhdGEpID8gJ2FycmF5JyA6ICdvYmplY3QnLCBodHRw
Q29uZmlnLm1ldGhvZCwgaHR0cENvbmZpZy51cmwpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAoYWN0aW9uLmlzQXJyYXkpIHsKKyAgICAgICAgICAgICAgICAgIHZhbHVl
Lmxlbmd0aCA9IDA7CisgICAgICAgICAgICAgICAgICBmb3JFYWNoKGRhdGEsIGZ1bmN0aW9uKGl0
ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0Jykg
eworICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnB1c2gobmV3IFJlc291cmNlKGl0ZW0pKTsK
KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAvLyBW
YWxpZCBKU09OIHZhbHVlcyBtYXkgYmUgc3RyaW5nIGxpdGVyYWxzLCBhbmQgdGhlc2Ugc2hvdWxk
IG5vdCBiZSBjb252ZXJ0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAvLyBpbnRvIG9iamVjdHMu
IFRoZXNlIGl0ZW1zIHdpbGwgbm90IGhhdmUgYWNjZXNzIHRvIHRoZSBSZXNvdXJjZSBwcm90b3R5
cGUKKyAgICAgICAgICAgICAgICAgICAgICAvLyBtZXRob2RzLCBidXQgdW5mb3J0dW5hdGVseSB0
aGVyZQorICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnB1c2goaXRlbSk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IHZhbHVlLiRwcm9taXNlOyAgICAg
Ly8gU2F2ZSB0aGUgcHJvbWlzZQorICAgICAgICAgICAgICAgICAgc2hhbGxvd0NsZWFyQW5kQ29w
eShkYXRhLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICB2YWx1ZS4kcHJvbWlzZSA9IHByb21p
c2U7ICAgICAgICAgLy8gUmVzdG9yZSB0aGUgcHJvbWlzZQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICByZXNwb25zZS5yZXNvdXJjZSA9IHZhbHVlOwor
CisgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTsKKyAgICAgICAgICAgIH0sIGZ1bmN0aW9u
KHJlc3BvbnNlKSB7CisgICAgICAgICAgICAgIChlcnJvciB8fCBub29wKShyZXNwb25zZSk7Cisg
ICAgICAgICAgICAgIHJldHVybiAkcS5yZWplY3QocmVzcG9uc2UpOworICAgICAgICAgICAgfSk7
CisKKyAgICAgICAgICAgIHByb21pc2VbJ2ZpbmFsbHknXShmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgdmFsdWUuJHJlc29sdmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgaWYgKCFpc0luc3Rh
bmNlQ2FsbCAmJiBjYW5jZWxsYWJsZSkgeworICAgICAgICAgICAgICAgIHZhbHVlLiRjYW5jZWxS
ZXF1ZXN0ID0gYW5ndWxhci5ub29wOworICAgICAgICAgICAgICAgICR0aW1lb3V0LmNhbmNlbChu
dW1lcmljVGltZW91dFByb21pc2UpOworICAgICAgICAgICAgICAgIHRpbWVvdXREZWZlcnJlZCA9
IG51bWVyaWNUaW1lb3V0UHJvbWlzZSA9IGh0dHBDb25maWcudGltZW91dCA9IG51bGw7CisgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBwcm9taXNlID0gcHJv
bWlzZS50aGVuKAorICAgICAgICAgICAgICBmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICAg
ICAgICAgIHZhciB2YWx1ZSA9IHJlc3BvbnNlSW50ZXJjZXB0b3IocmVzcG9uc2UpOworICAgICAg
ICAgICAgICAgIChzdWNjZXNzIHx8IG5vb3ApKHZhbHVlLCByZXNwb25zZS5oZWFkZXJzKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICAgIHJlc3BvbnNlRXJyb3JJbnRlcmNlcHRvcik7CisKKyAgICAgICAgICAgIGlmICghaXNJbnN0
YW5jZUNhbGwpIHsKKyAgICAgICAgICAgICAgLy8gd2UgYXJlIGNyZWF0aW5nIGluc3RhbmNlIC8g
Y29sbGVjdGlvbgorICAgICAgICAgICAgICAvLyAtIHNldCB0aGUgaW5pdGlhbCBwcm9taXNlCisg
ICAgICAgICAgICAgIC8vIC0gcmV0dXJuIHRoZSBpbnN0YW5jZSAvIGNvbGxlY3Rpb24KKyAgICAg
ICAgICAgICAgdmFsdWUuJHByb21pc2UgPSBwcm9taXNlOworICAgICAgICAgICAgICB2YWx1ZS4k
cmVzb2x2ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgaWYgKGNhbmNlbGxhYmxlKSB2YWx1ZS4k
Y2FuY2VsUmVxdWVzdCA9IHRpbWVvdXREZWZlcnJlZC5yZXNvbHZlOworCisgICAgICAgICAgICAg
IHJldHVybiB2YWx1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gaW5zdGFuY2Ug
Y2FsbAorICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7CisgICAgICAgICAgfTsKKworCisgICAg
ICAgICAgUmVzb3VyY2UucHJvdG90eXBlWyckJyArIG5hbWVdID0gZnVuY3Rpb24ocGFyYW1zLCBz
dWNjZXNzLCBlcnJvcikgeworICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocGFyYW1zKSkgewor
ICAgICAgICAgICAgICBlcnJvciA9IHN1Y2Nlc3M7IHN1Y2Nlc3MgPSBwYXJhbXM7IHBhcmFtcyA9
IHt9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFJlc291cmNlW25h
bWVdLmNhbGwodGhpcywgcGFyYW1zLCB0aGlzLCBzdWNjZXNzLCBlcnJvcik7CisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0LiRwcm9taXNlIHx8IHJlc3VsdDsKKyAgICAgICAgICB9OworICAgICAg
ICB9KTsKKworICAgICAgICBSZXNvdXJjZS5iaW5kID0gZnVuY3Rpb24oYWRkaXRpb25hbFBhcmFt
RGVmYXVsdHMpIHsKKyAgICAgICAgICByZXR1cm4gcmVzb3VyY2VGYWN0b3J5KHVybCwgZXh0ZW5k
KHt9LCBwYXJhbURlZmF1bHRzLCBhZGRpdGlvbmFsUGFyYW1EZWZhdWx0cyksIGFjdGlvbnMpOwor
ICAgICAgICB9OworCisgICAgICAgIHJldHVybiBSZXNvdXJjZTsKKyAgICAgIH0KKworICAgICAg
cmV0dXJuIHJlc291cmNlRmFjdG9yeTsKKyAgICB9XTsKKyAgfSk7CisKKworfSkod2luZG93LCB3
aW5kb3cuYW5ndWxhcik7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvbm9kZV9t
b2R1bGVzL2FuZ3VsYXItcm91dGUvYW5ndWxhci1yb3V0ZS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3Vs
YXJqcy9ub2RlX21vZHVsZXMvYW5ndWxhci1yb3V0ZS9hbmd1bGFyLXJvdXRlLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjhmYWMzY2QwOGEwMWJlNTEzNGUyZDJkYWNkMDJiZDIyNDhhNzFmODkKLS0tIC9kZXYvbnVs
bAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvbm9kZV9tb2R1bGVzL2FuZ3VsYXItcm91dGUv
YW5ndWxhci1yb3V0ZS5qcwpAQCAtMCwwICsxLDEwNzEgQEAKKy8qKgorICogQGxpY2Vuc2UgQW5n
dWxhckpTIHYxLjUuOQorICogKGMpIDIwMTAtMjAxNiBHb29nbGUsIEluYy4gaHR0cDovL2FuZ3Vs
YXJqcy5vcmcKKyAqIExpY2Vuc2U6IE1JVAorICovCisoZnVuY3Rpb24od2luZG93LCBhbmd1bGFy
KSB7J3VzZSBzdHJpY3QnOworCisvKiBnbG9iYWwgc2hhbGxvd0NvcHk6IHRydWUgKi8KKworLyoq
CisgKiBDcmVhdGVzIGEgc2hhbGxvdyBjb3B5IG9mIGFuIG9iamVjdCwgYW4gYXJyYXkgb3IgYSBw
cmltaXRpdmUuCisgKgorICogQXNzdW1lcyB0aGF0IHRoZXJlIGFyZSBubyBwcm90byBwcm9wZXJ0
aWVzIGZvciBvYmplY3RzLgorICovCitmdW5jdGlvbiBzaGFsbG93Q29weShzcmMsIGRzdCkgewor
ICBpZiAoaXNBcnJheShzcmMpKSB7CisgICAgZHN0ID0gZHN0IHx8IFtdOworCisgICAgZm9yICh2
YXIgaSA9IDAsIGlpID0gc3JjLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgIGRzdFtpXSA9
IHNyY1tpXTsKKyAgICB9CisgIH0gZWxzZSBpZiAoaXNPYmplY3Qoc3JjKSkgeworICAgIGRzdCA9
IGRzdCB8fCB7fTsKKworICAgIGZvciAodmFyIGtleSBpbiBzcmMpIHsKKyAgICAgIGlmICghKGtl
eS5jaGFyQXQoMCkgPT09ICckJyAmJiBrZXkuY2hhckF0KDEpID09PSAnJCcpKSB7CisgICAgICAg
IGRzdFtrZXldID0gc3JjW2tleV07CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIGRz
dCB8fCBzcmM7Cit9CisKKy8qIGdsb2JhbCBzaGFsbG93Q29weTogZmFsc2UgKi8KKworLy8gVGhl
cmUgYXJlIG5lY2Vzc2FyeSBmb3IgYHNoYWxsb3dDb3B5KClgIChpbmNsdWRlZCB2aWEgYHNyYy9z
aGFsbG93Q29weS5qc2ApLgorLy8gVGhleSBhcmUgaW5pdGlhbGl6ZWQgaW5zaWRlIHRoZSBgJFJv
dXRlUHJvdmlkZXJgLCB0byBlbnN1cmUgYHdpbmRvdy5hbmd1bGFyYCBpcyBhdmFpbGFibGUuCit2
YXIgaXNBcnJheTsKK3ZhciBpc09iamVjdDsKKworLyoqCisgKiBAbmdkb2MgbW9kdWxlCisgKiBA
bmFtZSBuZ1JvdXRlCisgKiBAZGVzY3JpcHRpb24KKyAqCisgKiAjIG5nUm91dGUKKyAqCisgKiBU
aGUgYG5nUm91dGVgIG1vZHVsZSBwcm92aWRlcyByb3V0aW5nIGFuZCBkZWVwbGlua2luZyBzZXJ2
aWNlcyBhbmQgZGlyZWN0aXZlcyBmb3IgYW5ndWxhciBhcHBzLgorICoKKyAqICMjIEV4YW1wbGUK
KyAqIFNlZSB7QGxpbmsgbmdSb3V0ZS4kcm91dGUjZXhhbXBsZSAkcm91dGV9IGZvciBhbiBleGFt
cGxlIG9mIGNvbmZpZ3VyaW5nIGFuZCB1c2luZyBgbmdSb3V0ZWAuCisgKgorICoKKyAqIDxkaXYg
ZG9jLW1vZHVsZS1jb21wb25lbnRzPSJuZ1JvdXRlIj48L2Rpdj4KKyAqLworIC8qIGdsb2JhbCAt
bmdSb3V0ZU1vZHVsZSAqLwordmFyIG5nUm91dGVNb2R1bGUgPSBhbmd1bGFyLm1vZHVsZSgnbmdS
b3V0ZScsIFsnbmcnXSkuCisgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlcignJHJvdXRl
JywgJFJvdXRlUHJvdmlkZXIpLAorICAgICRyb3V0ZU1pbkVyciA9IGFuZ3VsYXIuJCRtaW5FcnIo
J25nUm91dGUnKTsKKworLyoqCisgKiBAbmdkb2MgcHJvdmlkZXIKKyAqIEBuYW1lICRyb3V0ZVBy
b3ZpZGVyCisgKiBAdGhpcworICoKKyAqIEBkZXNjcmlwdGlvbgorICoKKyAqIFVzZWQgZm9yIGNv
bmZpZ3VyaW5nIHJvdXRlcy4KKyAqCisgKiAjIyBFeGFtcGxlCisgKiBTZWUge0BsaW5rIG5nUm91
dGUuJHJvdXRlI2V4YW1wbGUgJHJvdXRlfSBmb3IgYW4gZXhhbXBsZSBvZiBjb25maWd1cmluZyBh
bmQgdXNpbmcgYG5nUm91dGVgLgorICoKKyAqICMjIERlcGVuZGVuY2llcworICogUmVxdWlyZXMg
dGhlIHtAbGluayBuZ1JvdXRlIGBuZ1JvdXRlYH0gbW9kdWxlIHRvIGJlIGluc3RhbGxlZC4KKyAq
LworZnVuY3Rpb24gJFJvdXRlUHJvdmlkZXIoKSB7CisgIGlzQXJyYXkgPSBhbmd1bGFyLmlzQXJy
YXk7CisgIGlzT2JqZWN0ID0gYW5ndWxhci5pc09iamVjdDsKKworICBmdW5jdGlvbiBpbmhlcml0
KHBhcmVudCwgZXh0cmEpIHsKKyAgICByZXR1cm4gYW5ndWxhci5leHRlbmQoT2JqZWN0LmNyZWF0
ZShwYXJlbnQpLCBleHRyYSk7CisgIH0KKworICB2YXIgcm91dGVzID0ge307CisKKyAgLyoqCisg
ICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgJHJvdXRlUHJvdmlkZXIjd2hlbgorICAgKgor
ICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBSb3V0ZSBwYXRoIChtYXRjaGVkIGFnYWluc3QgYCRs
b2NhdGlvbi5wYXRoYCkuIElmIGAkbG9jYXRpb24ucGF0aGAKKyAgICogICAgY29udGFpbnMgcmVk
dW5kYW50IHRyYWlsaW5nIHNsYXNoIG9yIGlzIG1pc3Npbmcgb25lLCB0aGUgcm91dGUgd2lsbCBz
dGlsbCBtYXRjaCBhbmQgdGhlCisgICAqICAgIGAkbG9jYXRpb24ucGF0aGAgd2lsbCBiZSB1cGRh
dGVkIHRvIGFkZCBvciBkcm9wIHRoZSB0cmFpbGluZyBzbGFzaCB0byBleGFjdGx5IG1hdGNoIHRo
ZQorICAgKiAgICByb3V0ZSBkZWZpbml0aW9uLgorICAgKgorICAgKiAgICAqIGBwYXRoYCBjYW4g
Y29udGFpbiBuYW1lZCBncm91cHMgc3RhcnRpbmcgd2l0aCBhIGNvbG9uOiBlLmcuIGA6bmFtZWAu
IEFsbCBjaGFyYWN0ZXJzIHVwCisgICAqICAgICAgICB0byB0aGUgbmV4dCBzbGFzaCBhcmUgbWF0
Y2hlZCBhbmQgc3RvcmVkIGluIGAkcm91dGVQYXJhbXNgIHVuZGVyIHRoZSBnaXZlbiBgbmFtZWAK
KyAgICogICAgICAgIHdoZW4gdGhlIHJvdXRlIG1hdGNoZXMuCisgICAqICAgICogYHBhdGhgIGNh
biBjb250YWluIG5hbWVkIGdyb3VwcyBzdGFydGluZyB3aXRoIGEgY29sb24gYW5kIGVuZGluZyB3
aXRoIGEgc3RhcjoKKyAgICogICAgICAgIGUuZy5gOm5hbWUqYC4gQWxsIGNoYXJhY3RlcnMgYXJl
IGVhZ2VybHkgc3RvcmVkIGluIGAkcm91dGVQYXJhbXNgIHVuZGVyIHRoZSBnaXZlbiBgbmFtZWAK
KyAgICogICAgICAgIHdoZW4gdGhlIHJvdXRlIG1hdGNoZXMuCisgICAqICAgICogYHBhdGhgIGNh
biBjb250YWluIG9wdGlvbmFsIG5hbWVkIGdyb3VwcyB3aXRoIGEgcXVlc3Rpb24gbWFyazogZS5n
LmA6bmFtZT9gLgorICAgKgorICAgKiAgICBGb3IgZXhhbXBsZSwgcm91dGVzIGxpa2UgYC9jb2xv
ci86Y29sb3IvbGFyZ2Vjb2RlLzpsYXJnZWNvZGUqXC9lZGl0YCB3aWxsIG1hdGNoCisgICAqICAg
IGAvY29sb3IvYnJvd24vbGFyZ2Vjb2RlL2NvZGUvd2l0aC9zbGFzaGVzL2VkaXRgIGFuZCBleHRy
YWN0OgorICAgKgorICAgKiAgICAqIGBjb2xvcjogYnJvd25gCisgICAqICAgICogYGxhcmdlY29k
ZTogY29kZS93aXRoL3NsYXNoZXNgLgorICAgKgorICAgKgorICAgKiBAcGFyYW0ge09iamVjdH0g
cm91dGUgTWFwcGluZyBpbmZvcm1hdGlvbiB0byBiZSBhc3NpZ25lZCB0byBgJHJvdXRlLmN1cnJl
bnRgIG9uIHJvdXRlCisgICAqICAgIG1hdGNoLgorICAgKgorICAgKiAgICBPYmplY3QgcHJvcGVy
dGllczoKKyAgICoKKyAgICogICAgLSBgY29udHJvbGxlcmAg4oCTIGB7KHN0cmluZ3xmdW5jdGlv
bigpPX1gIOKAkyBDb250cm9sbGVyIGZuIHRoYXQgc2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aAor
ICAgKiAgICAgIG5ld2x5IGNyZWF0ZWQgc2NvcGUgb3IgdGhlIG5hbWUgb2YgYSB7QGxpbmsgYW5n
dWxhci5Nb2R1bGUjY29udHJvbGxlciByZWdpc3RlcmVkCisgICAqICAgICAgY29udHJvbGxlcn0g
aWYgcGFzc2VkIGFzIGEgc3RyaW5nLgorICAgKiAgICAtIGBjb250cm9sbGVyQXNgIOKAkyBge3N0
cmluZz19YCDigJMgQW4gaWRlbnRpZmllciBuYW1lIGZvciBhIHJlZmVyZW5jZSB0byB0aGUgY29u
dHJvbGxlci4KKyAgICogICAgICBJZiBwcmVzZW50LCB0aGUgY29udHJvbGxlciB3aWxsIGJlIHB1
Ymxpc2hlZCB0byBzY29wZSB1bmRlciB0aGUgYGNvbnRyb2xsZXJBc2AgbmFtZS4KKyAgICogICAg
LSBgdGVtcGxhdGVgIOKAkyBge3N0cmluZz18ZnVuY3Rpb24oKT19YCDigJMgaHRtbCB0ZW1wbGF0
ZSBhcyBhIHN0cmluZyBvciBhIGZ1bmN0aW9uIHRoYXQKKyAgICogICAgICByZXR1cm5zIGFuIGh0
bWwgdGVtcGxhdGUgYXMgYSBzdHJpbmcgd2hpY2ggc2hvdWxkIGJlIHVzZWQgYnkge0BsaW5rCisg
ICAqICAgICAgbmdSb3V0ZS5kaXJlY3RpdmU6bmdWaWV3IG5nVmlld30gb3Ige0BsaW5rIG5nLmRp
cmVjdGl2ZTpuZ0luY2x1ZGUgbmdJbmNsdWRlfSBkaXJlY3RpdmVzLgorICAgKiAgICAgIFRoaXMg
cHJvcGVydHkgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGB0ZW1wbGF0ZVVybGAuCisgICAqCisgICAq
ICAgICAgSWYgYHRlbXBsYXRlYCBpcyBhIGZ1bmN0aW9uLCBpdCB3aWxsIGJlIGNhbGxlZCB3aXRo
IHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKKyAgICoKKyAgICogICAgICAtIGB7QXJyYXkuPE9i
amVjdD59YCAtIHJvdXRlIHBhcmFtZXRlcnMgZXh0cmFjdGVkIGZyb20gdGhlIGN1cnJlbnQKKyAg
ICogICAgICAgIGAkbG9jYXRpb24ucGF0aCgpYCBieSBhcHBseWluZyB0aGUgY3VycmVudCByb3V0
ZQorICAgKgorICAgKiAgICAtIGB0ZW1wbGF0ZVVybGAg4oCTIGB7c3RyaW5nPXxmdW5jdGlvbigp
PX1gIOKAkyBwYXRoIG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHBhdGggdG8gYW4gaHRtbAor
ICAgKiAgICAgIHRlbXBsYXRlIHRoYXQgc2hvdWxkIGJlIHVzZWQgYnkge0BsaW5rIG5nUm91dGUu
ZGlyZWN0aXZlOm5nVmlldyBuZ1ZpZXd9LgorICAgKgorICAgKiAgICAgIElmIGB0ZW1wbGF0ZVVy
bGAgaXMgYSBmdW5jdGlvbiwgaXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nIHBh
cmFtZXRlcnM6CisgICAqCisgICAqICAgICAgLSBge0FycmF5LjxPYmplY3Q+fWAgLSByb3V0ZSBw
YXJhbWV0ZXJzIGV4dHJhY3RlZCBmcm9tIHRoZSBjdXJyZW50CisgICAqICAgICAgICBgJGxvY2F0
aW9uLnBhdGgoKWAgYnkgYXBwbHlpbmcgdGhlIGN1cnJlbnQgcm91dGUKKyAgICoKKyAgICogICAg
LSBgcmVzb2x2ZWAgLSBge09iamVjdC48c3RyaW5nLCBmdW5jdGlvbj49fWAgLSBBbiBvcHRpb25h
bCBtYXAgb2YgZGVwZW5kZW5jaWVzIHdoaWNoIHNob3VsZAorICAgKiAgICAgIGJlIGluamVjdGVk
IGludG8gdGhlIGNvbnRyb2xsZXIuIElmIGFueSBvZiB0aGVzZSBkZXBlbmRlbmNpZXMgYXJlIHBy
b21pc2VzLCB0aGUgcm91dGVyCisgICAqICAgICAgd2lsbCB3YWl0IGZvciB0aGVtIGFsbCB0byBi
ZSByZXNvbHZlZCBvciBvbmUgdG8gYmUgcmVqZWN0ZWQgYmVmb3JlIHRoZSBjb250cm9sbGVyIGlz
CisgICAqICAgICAgaW5zdGFudGlhdGVkLgorICAgKiAgICAgIElmIGFsbCB0aGUgcHJvbWlzZXMg
YXJlIHJlc29sdmVkIHN1Y2Nlc3NmdWxseSwgdGhlIHZhbHVlcyBvZiB0aGUgcmVzb2x2ZWQgcHJv
bWlzZXMgYXJlCisgICAqICAgICAgaW5qZWN0ZWQgYW5kIHtAbGluayBuZ1JvdXRlLiRyb3V0ZSMk
cm91dGVDaGFuZ2VTdWNjZXNzICRyb3V0ZUNoYW5nZVN1Y2Nlc3N9IGV2ZW50IGlzCisgICAqICAg
ICAgZmlyZWQuIElmIGFueSBvZiB0aGUgcHJvbWlzZXMgYXJlIHJlamVjdGVkIHRoZQorICAgKiAg
ICAgIHtAbGluayBuZ1JvdXRlLiRyb3V0ZSMkcm91dGVDaGFuZ2VFcnJvciAkcm91dGVDaGFuZ2VF
cnJvcn0gZXZlbnQgaXMgZmlyZWQuCisgICAqICAgICAgRm9yIGVhc2llciBhY2Nlc3MgdG8gdGhl
IHJlc29sdmVkIGRlcGVuZGVuY2llcyBmcm9tIHRoZSB0ZW1wbGF0ZSwgdGhlIGByZXNvbHZlYCBt
YXAgd2lsbAorICAgKiAgICAgIGJlIGF2YWlsYWJsZSBvbiB0aGUgc2NvcGUgb2YgdGhlIHJvdXRl
LCB1bmRlciBgJHJlc29sdmVgIChieSBkZWZhdWx0KSBvciBhIGN1c3RvbSBuYW1lCisgICAqICAg
ICAgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb2x2ZUFzYCBwcm9wZXJ0eSAoc2VlIGJlbG93KS4gVGhp
cyBjYW4gYmUgcGFydGljdWxhcmx5IHVzZWZ1bCwgd2hlbgorICAgKiAgICAgIHdvcmtpbmcgd2l0
aCB7QGxpbmsgYW5ndWxhci5Nb2R1bGUjY29tcG9uZW50IGNvbXBvbmVudHN9IGFzIHJvdXRlIHRl
bXBsYXRlcy48YnIgLz4KKyAgICogICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC13YXJuaW5n
Ij4KKyAgICogICAgICAgICoqTm90ZToqKiBJZiB5b3VyIHNjb3BlIGFscmVhZHkgY29udGFpbnMg
YSBwcm9wZXJ0eSB3aXRoIHRoaXMgbmFtZSwgaXQgd2lsbCBiZSBoaWRkZW4KKyAgICogICAgICAg
IG9yIG92ZXJ3cml0dGVuLiBNYWtlIHN1cmUsIHlvdSBzcGVjaWZ5IGFuIGFwcHJvcHJpYXRlIG5h
bWUgZm9yIHRoaXMgcHJvcGVydHksIHRoYXQKKyAgICogICAgICAgIGRvZXMgbm90IGNvbGxpZGUg
d2l0aCBvdGhlciBwcm9wZXJ0aWVzIG9uIHRoZSBzY29wZS4KKyAgICogICAgICA8L2Rpdj4KKyAg
ICogICAgICBUaGUgbWFwIG9iamVjdCBpczoKKyAgICoKKyAgICogICAgICAtIGBrZXlgIOKAkyBg
e3N0cmluZ31gOiBhIG5hbWUgb2YgYSBkZXBlbmRlbmN5IHRvIGJlIGluamVjdGVkIGludG8gdGhl
IGNvbnRyb2xsZXIuCisgICAqICAgICAgLSBgZmFjdG9yeWAgLSBge3N0cmluZ3xmdW5jdGlvbn1g
OiBJZiBgc3RyaW5nYCB0aGVuIGl0IGlzIGFuIGFsaWFzIGZvciBhIHNlcnZpY2UuCisgICAqICAg
ICAgICBPdGhlcndpc2UgaWYgZnVuY3Rpb24sIHRoZW4gaXQgaXMge0BsaW5rIGF1dG8uJGluamVj
dG9yI2ludm9rZSBpbmplY3RlZH0KKyAgICogICAgICAgIGFuZCB0aGUgcmV0dXJuIHZhbHVlIGlz
IHRyZWF0ZWQgYXMgdGhlIGRlcGVuZGVuY3kuIElmIHRoZSByZXN1bHQgaXMgYSBwcm9taXNlLCBp
dCBpcworICAgKiAgICAgICAgcmVzb2x2ZWQgYmVmb3JlIGl0cyB2YWx1ZSBpcyBpbmplY3RlZCBp
bnRvIHRoZSBjb250cm9sbGVyLiBCZSBhd2FyZSB0aGF0CisgICAqICAgICAgICBgbmdSb3V0ZS4k
cm91dGVQYXJhbXNgIHdpbGwgc3RpbGwgcmVmZXIgdG8gdGhlIHByZXZpb3VzIHJvdXRlIHdpdGhp
biB0aGVzZSByZXNvbHZlCisgICAqICAgICAgICBmdW5jdGlvbnMuICBVc2UgYCRyb3V0ZS5jdXJy
ZW50LnBhcmFtc2AgdG8gYWNjZXNzIHRoZSBuZXcgcm91dGUgcGFyYW1ldGVycywgaW5zdGVhZC4K
KyAgICoKKyAgICogICAgLSBgcmVzb2x2ZUFzYCAtIGB7c3RyaW5nPX1gIC0gVGhlIG5hbWUgdW5k
ZXIgd2hpY2ggdGhlIGByZXNvbHZlYCBtYXAgd2lsbCBiZSBhdmFpbGFibGUgb24KKyAgICogICAg
ICB0aGUgc2NvcGUgb2YgdGhlIHJvdXRlLiBJZiBvbWl0dGVkLCBkZWZhdWx0cyB0byBgJHJlc29s
dmVgLgorICAgKgorICAgKiAgICAtIGByZWRpcmVjdFRvYCDigJMgYHsoc3RyaW5nfGZ1bmN0aW9u
KCkpPX1gIOKAkyB2YWx1ZSB0byB1cGRhdGUKKyAgICogICAgICB7QGxpbmsgbmcuJGxvY2F0aW9u
ICRsb2NhdGlvbn0gcGF0aCB3aXRoIGFuZCB0cmlnZ2VyIHJvdXRlIHJlZGlyZWN0aW9uLgorICAg
KgorICAgKiAgICAgIElmIGByZWRpcmVjdFRvYCBpcyBhIGZ1bmN0aW9uLCBpdCB3aWxsIGJlIGNh
bGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKKyAgICoKKyAgICogICAgICAtIGB7
T2JqZWN0LjxzdHJpbmc+fWAgLSByb3V0ZSBwYXJhbWV0ZXJzIGV4dHJhY3RlZCBmcm9tIHRoZSBj
dXJyZW50CisgICAqICAgICAgICBgJGxvY2F0aW9uLnBhdGgoKWAgYnkgYXBwbHlpbmcgdGhlIGN1
cnJlbnQgcm91dGUgdGVtcGxhdGVVcmwuCisgICAqICAgICAgLSBge3N0cmluZ31gIC0gY3VycmVu
dCBgJGxvY2F0aW9uLnBhdGgoKWAKKyAgICogICAgICAtIGB7T2JqZWN0fWAgLSBjdXJyZW50IGAk
bG9jYXRpb24uc2VhcmNoKClgCisgICAqCisgICAqICAgICAgVGhlIGN1c3RvbSBgcmVkaXJlY3RU
b2AgZnVuY3Rpb24gaXMgZXhwZWN0ZWQgdG8gcmV0dXJuIGEgc3RyaW5nIHdoaWNoIHdpbGwgYmUg
dXNlZAorICAgKiAgICAgIHRvIHVwZGF0ZSBgJGxvY2F0aW9uLnBhdGgoKWAgYW5kIGAkbG9jYXRp
b24uc2VhcmNoKClgLgorICAgKgorICAgKiAgICAtIGBbcmVsb2FkT25TZWFyY2g9dHJ1ZV1gIC0g
YHtib29sZWFuPX1gIC0gcmVsb2FkIHJvdXRlIHdoZW4gb25seSBgJGxvY2F0aW9uLnNlYXJjaCgp
YAorICAgKiAgICAgIG9yIGAkbG9jYXRpb24uaGFzaCgpYCBjaGFuZ2VzLgorICAgKgorICAgKiAg
ICAgIElmIHRoZSBvcHRpb24gaXMgc2V0IHRvIGBmYWxzZWAgYW5kIHVybCBpbiB0aGUgYnJvd3Nl
ciBjaGFuZ2VzLCB0aGVuCisgICAqICAgICAgYCRyb3V0ZVVwZGF0ZWAgZXZlbnQgaXMgYnJvYWRj
YXN0ZWQgb24gdGhlIHJvb3Qgc2NvcGUuCisgICAqCisgICAqICAgIC0gYFtjYXNlSW5zZW5zaXRp
dmVNYXRjaD1mYWxzZV1gIC0gYHtib29sZWFuPX1gIC0gbWF0Y2ggcm91dGVzIHdpdGhvdXQgYmVp
bmcgY2FzZSBzZW5zaXRpdmUKKyAgICoKKyAgICogICAgICBJZiB0aGUgb3B0aW9uIGlzIHNldCB0
byBgdHJ1ZWAsIHRoZW4gdGhlIHBhcnRpY3VsYXIgcm91dGUgY2FuIGJlIG1hdGNoZWQgd2l0aG91
dCBiZWluZworICAgKiAgICAgIGNhc2Ugc2Vuc2l0aXZlCisgICAqCisgICAqIEByZXR1cm5zIHtP
YmplY3R9IHNlbGYKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIEFkZHMgYSBuZXcgcm91
dGUgZGVmaW5pdGlvbiB0byB0aGUgYCRyb3V0ZWAgc2VydmljZS4KKyAgICovCisgIHRoaXMud2hl
biA9IGZ1bmN0aW9uKHBhdGgsIHJvdXRlKSB7CisgICAgLy9jb3B5IG9yaWdpbmFsIHJvdXRlIG9i
amVjdCB0byBwcmVzZXJ2ZSBwYXJhbXMgaW5oZXJpdGVkIGZyb20gcHJvdG8gY2hhaW4KKyAgICB2
YXIgcm91dGVDb3B5ID0gc2hhbGxvd0NvcHkocm91dGUpOworICAgIGlmIChhbmd1bGFyLmlzVW5k
ZWZpbmVkKHJvdXRlQ29weS5yZWxvYWRPblNlYXJjaCkpIHsKKyAgICAgIHJvdXRlQ29weS5yZWxv
YWRPblNlYXJjaCA9IHRydWU7CisgICAgfQorICAgIGlmIChhbmd1bGFyLmlzVW5kZWZpbmVkKHJv
dXRlQ29weS5jYXNlSW5zZW5zaXRpdmVNYXRjaCkpIHsKKyAgICAgIHJvdXRlQ29weS5jYXNlSW5z
ZW5zaXRpdmVNYXRjaCA9IHRoaXMuY2FzZUluc2Vuc2l0aXZlTWF0Y2g7CisgICAgfQorICAgIHJv
dXRlc1twYXRoXSA9IGFuZ3VsYXIuZXh0ZW5kKAorICAgICAgcm91dGVDb3B5LAorICAgICAgcGF0
aCAmJiBwYXRoUmVnRXhwKHBhdGgsIHJvdXRlQ29weSkKKyAgICApOworCisgICAgLy8gY3JlYXRl
IHJlZGlyZWN0aW9uIGZvciB0cmFpbGluZyBzbGFzaGVzCisgICAgaWYgKHBhdGgpIHsKKyAgICAg
IHZhciByZWRpcmVjdFBhdGggPSAocGF0aFtwYXRoLmxlbmd0aCAtIDFdID09PSAnLycpCisgICAg
ICAgICAgICA/IHBhdGguc3Vic3RyKDAsIHBhdGgubGVuZ3RoIC0gMSkKKyAgICAgICAgICAgIDog
cGF0aCArICcvJzsKKworICAgICAgcm91dGVzW3JlZGlyZWN0UGF0aF0gPSBhbmd1bGFyLmV4dGVu
ZCgKKyAgICAgICAge3JlZGlyZWN0VG86IHBhdGh9LAorICAgICAgICBwYXRoUmVnRXhwKHJlZGly
ZWN0UGF0aCwgcm91dGVDb3B5KQorICAgICAgKTsKKyAgICB9CisKKyAgICByZXR1cm4gdGhpczsK
KyAgfTsKKworICAvKioKKyAgICogQG5nZG9jIHByb3BlcnR5CisgICAqIEBuYW1lICRyb3V0ZVBy
b3ZpZGVyI2Nhc2VJbnNlbnNpdGl2ZU1hdGNoCisgICAqIEBkZXNjcmlwdGlvbgorICAgKgorICAg
KiBBIGJvb2xlYW4gcHJvcGVydHkgaW5kaWNhdGluZyBpZiByb3V0ZXMgZGVmaW5lZAorICAgKiB1
c2luZyB0aGlzIHByb3ZpZGVyIHNob3VsZCBiZSBtYXRjaGVkIHVzaW5nIGEgY2FzZSBpbnNlbnNp
dGl2ZQorICAgKiBhbGdvcml0aG0uIERlZmF1bHRzIHRvIGBmYWxzZWAuCisgICAqLworICB0aGlz
LmNhc2VJbnNlbnNpdGl2ZU1hdGNoID0gZmFsc2U7CisKKyAgIC8qKgorICAgICogQHBhcmFtIHBh
dGgge3N0cmluZ30gcGF0aAorICAgICogQHBhcmFtIG9wdHMge09iamVjdH0gb3B0aW9ucworICAg
ICogQHJldHVybiB7P09iamVjdH0KKyAgICAqCisgICAgKiBAZGVzY3JpcHRpb24KKyAgICAqIE5v
cm1hbGl6ZXMgdGhlIGdpdmVuIHBhdGgsIHJldHVybmluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbgor
ICAgICogYW5kIHRoZSBvcmlnaW5hbCBwYXRoLgorICAgICoKKyAgICAqIEluc3BpcmVkIGJ5IHBh
dGhSZXhwIGluIHZpc2lvbm1lZGlhL2V4cHJlc3MvbGliL3V0aWxzLmpzLgorICAgICovCisgIGZ1
bmN0aW9uIHBhdGhSZWdFeHAocGF0aCwgb3B0cykgeworICAgIHZhciBpbnNlbnNpdGl2ZSA9IG9w
dHMuY2FzZUluc2Vuc2l0aXZlTWF0Y2gsCisgICAgICAgIHJldCA9IHsKKyAgICAgICAgICBvcmln
aW5hbFBhdGg6IHBhdGgsCisgICAgICAgICAgcmVnZXhwOiBwYXRoCisgICAgICAgIH0sCisgICAg
ICAgIGtleXMgPSByZXQua2V5cyA9IFtdOworCisgICAgcGF0aCA9IHBhdGgKKyAgICAgIC5yZXBs
YWNlKC8oWygpLl0pL2csICdcXCQxJykKKyAgICAgIC5yZXBsYWNlKC8oXC8pPzooXHcrKShcKlw/
fFtcP1wqXSk/L2csIGZ1bmN0aW9uKF8sIHNsYXNoLCBrZXksIG9wdGlvbikgeworICAgICAgICB2
YXIgb3B0aW9uYWwgPSAob3B0aW9uID09PSAnPycgfHwgb3B0aW9uID09PSAnKj8nKSA/ICc/JyA6
IG51bGw7CisgICAgICAgIHZhciBzdGFyID0gKG9wdGlvbiA9PT0gJyonIHx8IG9wdGlvbiA9PT0g
Jyo/JykgPyAnKicgOiBudWxsOworICAgICAgICBrZXlzLnB1c2goeyBuYW1lOiBrZXksIG9wdGlv
bmFsOiAhIW9wdGlvbmFsIH0pOworICAgICAgICBzbGFzaCA9IHNsYXNoIHx8ICcnOworICAgICAg
ICByZXR1cm4gJycKKyAgICAgICAgICArIChvcHRpb25hbCA/ICcnIDogc2xhc2gpCisgICAgICAg
ICAgKyAnKD86JworICAgICAgICAgICsgKG9wdGlvbmFsID8gc2xhc2ggOiAnJykKKyAgICAgICAg
ICArIChzdGFyICYmICcoLis/KScgfHwgJyhbXi9dKyknKQorICAgICAgICAgICsgKG9wdGlvbmFs
IHx8ICcnKQorICAgICAgICAgICsgJyknCisgICAgICAgICAgKyAob3B0aW9uYWwgfHwgJycpOwor
ICAgICAgfSkKKyAgICAgIC5yZXBsYWNlKC8oW1wvJFwqXSkvZywgJ1xcJDEnKTsKKworICAgIHJl
dC5yZWdleHAgPSBuZXcgUmVnRXhwKCdeJyArIHBhdGggKyAnJCcsIGluc2Vuc2l0aXZlID8gJ2kn
IDogJycpOworICAgIHJldHVybiByZXQ7CisgIH0KKworICAvKioKKyAgICogQG5nZG9jIG1ldGhv
ZAorICAgKiBAbmFtZSAkcm91dGVQcm92aWRlciNvdGhlcndpc2UKKyAgICoKKyAgICogQGRlc2Ny
aXB0aW9uCisgICAqIFNldHMgcm91dGUgZGVmaW5pdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCBvbiBy
b3V0ZSBjaGFuZ2Ugd2hlbiBubyBvdGhlciByb3V0ZSBkZWZpbml0aW9uCisgICAqIGlzIG1hdGNo
ZWQuCisgICAqCisgICAqIEBwYXJhbSB7T2JqZWN0fHN0cmluZ30gcGFyYW1zIE1hcHBpbmcgaW5m
b3JtYXRpb24gdG8gYmUgYXNzaWduZWQgdG8gYCRyb3V0ZS5jdXJyZW50YC4KKyAgICogSWYgY2Fs
bGVkIHdpdGggYSBzdHJpbmcsIHRoZSB2YWx1ZSBtYXBzIHRvIGByZWRpcmVjdFRvYC4KKyAgICog
QHJldHVybnMge09iamVjdH0gc2VsZgorICAgKi8KKyAgdGhpcy5vdGhlcndpc2UgPSBmdW5jdGlv
bihwYXJhbXMpIHsKKyAgICBpZiAodHlwZW9mIHBhcmFtcyA9PT0gJ3N0cmluZycpIHsKKyAgICAg
IHBhcmFtcyA9IHtyZWRpcmVjdFRvOiBwYXJhbXN9OworICAgIH0KKyAgICB0aGlzLndoZW4obnVs
bCwgcGFyYW1zKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfTsKKworCisgIHRoaXMuJGdldCA9IFsn
JHJvb3RTY29wZScsCisgICAgICAgICAgICAgICAnJGxvY2F0aW9uJywKKyAgICAgICAgICAgICAg
ICckcm91dGVQYXJhbXMnLAorICAgICAgICAgICAgICAgJyRxJywKKyAgICAgICAgICAgICAgICck
aW5qZWN0b3InLAorICAgICAgICAgICAgICAgJyR0ZW1wbGF0ZVJlcXVlc3QnLAorICAgICAgICAg
ICAgICAgJyRzY2UnLAorICAgICAgZnVuY3Rpb24oJHJvb3RTY29wZSwgJGxvY2F0aW9uLCAkcm91
dGVQYXJhbXMsICRxLCAkaW5qZWN0b3IsICR0ZW1wbGF0ZVJlcXVlc3QsICRzY2UpIHsKKworICAg
IC8qKgorICAgICAqIEBuZ2RvYyBzZXJ2aWNlCisgICAgICogQG5hbWUgJHJvdXRlCisgICAgICog
QHJlcXVpcmVzICRsb2NhdGlvbgorICAgICAqIEByZXF1aXJlcyAkcm91dGVQYXJhbXMKKyAgICAg
KgorICAgICAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjdXJyZW50IFJlZmVyZW5jZSB0byB0aGUgY3Vy
cmVudCByb3V0ZSBkZWZpbml0aW9uLgorICAgICAqIFRoZSByb3V0ZSBkZWZpbml0aW9uIGNvbnRh
aW5zOgorICAgICAqCisgICAgICogICAtIGBjb250cm9sbGVyYDogVGhlIGNvbnRyb2xsZXIgY29u
c3RydWN0b3IgYXMgZGVmaW5lZCBpbiB0aGUgcm91dGUgZGVmaW5pdGlvbi4KKyAgICAgKiAgIC0g
YGxvY2Fsc2A6IEEgbWFwIG9mIGxvY2FscyB3aGljaCBpcyB1c2VkIGJ5IHtAbGluayBuZy4kY29u
dHJvbGxlciAkY29udHJvbGxlcn0gc2VydmljZSBmb3IKKyAgICAgKiAgICAgY29udHJvbGxlciBp
bnN0YW50aWF0aW9uLiBUaGUgYGxvY2Fsc2AgY29udGFpbgorICAgICAqICAgICB0aGUgcmVzb2x2
ZWQgdmFsdWVzIG9mIHRoZSBgcmVzb2x2ZWAgbWFwLiBBZGRpdGlvbmFsbHkgdGhlIGBsb2NhbHNg
IGFsc28gY29udGFpbjoKKyAgICAgKgorICAgICAqICAgICAtIGAkc2NvcGVgIC0gVGhlIGN1cnJl
bnQgcm91dGUgc2NvcGUuCisgICAgICogICAgIC0gYCR0ZW1wbGF0ZWAgLSBUaGUgY3VycmVudCBy
b3V0ZSB0ZW1wbGF0ZSBIVE1MLgorICAgICAqCisgICAgICogICAgIFRoZSBgbG9jYWxzYCB3aWxs
IGJlIGFzc2lnbmVkIHRvIHRoZSByb3V0ZSBzY29wZSdzIGAkcmVzb2x2ZWAgcHJvcGVydHkuIFlv
dSBjYW4gb3ZlcnJpZGUKKyAgICAgKiAgICAgdGhlIHByb3BlcnR5IG5hbWUsIHVzaW5nIGByZXNv
bHZlQXNgIGluIHRoZSByb3V0ZSBkZWZpbml0aW9uLiBTZWUKKyAgICAgKiAgICAge0BsaW5rIG5n
Um91dGUuJHJvdXRlUHJvdmlkZXIgJHJvdXRlUHJvdmlkZXJ9IGZvciBtb3JlIGluZm8uCisgICAg
ICoKKyAgICAgKiBAcHJvcGVydHkge09iamVjdH0gcm91dGVzIE9iamVjdCB3aXRoIGFsbCByb3V0
ZSBjb25maWd1cmF0aW9uIE9iamVjdHMgYXMgaXRzIHByb3BlcnRpZXMuCisgICAgICoKKyAgICAg
KiBAZGVzY3JpcHRpb24KKyAgICAgKiBgJHJvdXRlYCBpcyB1c2VkIGZvciBkZWVwLWxpbmtpbmcg
VVJMcyB0byBjb250cm9sbGVycyBhbmQgdmlld3MgKEhUTUwgcGFydGlhbHMpLgorICAgICAqIEl0
IHdhdGNoZXMgYCRsb2NhdGlvbi51cmwoKWAgYW5kIHRyaWVzIHRvIG1hcCB0aGUgcGF0aCB0byBh
biBleGlzdGluZyByb3V0ZSBkZWZpbml0aW9uLgorICAgICAqCisgICAgICogUmVxdWlyZXMgdGhl
IHtAbGluayBuZ1JvdXRlIGBuZ1JvdXRlYH0gbW9kdWxlIHRvIGJlIGluc3RhbGxlZC4KKyAgICAg
KgorICAgICAqIFlvdSBjYW4gZGVmaW5lIHJvdXRlcyB0aHJvdWdoIHtAbGluayBuZ1JvdXRlLiRy
b3V0ZVByb3ZpZGVyICRyb3V0ZVByb3ZpZGVyfSdzIEFQSS4KKyAgICAgKgorICAgICAqIFRoZSBg
JHJvdXRlYCBzZXJ2aWNlIGlzIHR5cGljYWxseSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhl
CisgICAgICoge0BsaW5rIG5nUm91dGUuZGlyZWN0aXZlOm5nVmlldyBgbmdWaWV3YH0gZGlyZWN0
aXZlIGFuZCB0aGUKKyAgICAgKiB7QGxpbmsgbmdSb3V0ZS4kcm91dGVQYXJhbXMgYCRyb3V0ZVBh
cmFtc2B9IHNlcnZpY2UuCisgICAgICoKKyAgICAgKiBAZXhhbXBsZQorICAgICAqIFRoaXMgZXhh
bXBsZSBzaG93cyBob3cgY2hhbmdpbmcgdGhlIFVSTCBoYXNoIGNhdXNlcyB0aGUgYCRyb3V0ZWAg
dG8gbWF0Y2ggYSByb3V0ZSBhZ2FpbnN0IHRoZQorICAgICAqIFVSTCwgYW5kIHRoZSBgbmdWaWV3
YCBwdWxscyBpbiB0aGUgcGFydGlhbC4KKyAgICAgKgorICAgICAqIDxleGFtcGxlIG5hbWU9IiRy
b3V0ZS1zZXJ2aWNlIiBtb2R1bGU9Im5nUm91dGVFeGFtcGxlIgorICAgICAqICAgICAgICAgIGRl
cHM9ImFuZ3VsYXItcm91dGUuanMiIGZpeEJhc2U9InRydWUiPgorICAgICAqICAgPGZpbGUgbmFt
ZT0iaW5kZXguaHRtbCI+CisgICAgICogICAgIDxkaXYgbmctY29udHJvbGxlcj0iTWFpbkNvbnRy
b2xsZXIiPgorICAgICAqICAgICAgIENob29zZToKKyAgICAgKiAgICAgICA8YSBocmVmPSJCb29r
L01vYnkiPk1vYnk8L2E+IHwKKyAgICAgKiAgICAgICA8YSBocmVmPSJCb29rL01vYnkvY2gvMSI+
TW9ieTogQ2gxPC9hPiB8CisgICAgICogICAgICAgPGEgaHJlZj0iQm9vay9HYXRzYnkiPkdhdHNi
eTwvYT4gfAorICAgICAqICAgICAgIDxhIGhyZWY9IkJvb2svR2F0c2J5L2NoLzQ/a2V5PXZhbHVl
Ij5HYXRzYnk6IENoNDwvYT4gfAorICAgICAqICAgICAgIDxhIGhyZWY9IkJvb2svU2NhcmxldCI+
U2NhcmxldCBMZXR0ZXI8L2E+PGJyLz4KKyAgICAgKgorICAgICAqICAgICAgIDxkaXYgbmctdmll
dz48L2Rpdj4KKyAgICAgKgorICAgICAqICAgICAgIDxociAvPgorICAgICAqCisgICAgICogICAg
ICAgPHByZT4kbG9jYXRpb24ucGF0aCgpID0ge3skbG9jYXRpb24ucGF0aCgpfX08L3ByZT4KKyAg
ICAgKiAgICAgICA8cHJlPiRyb3V0ZS5jdXJyZW50LnRlbXBsYXRlVXJsID0ge3skcm91dGUuY3Vy
cmVudC50ZW1wbGF0ZVVybH19PC9wcmU+CisgICAgICogICAgICAgPHByZT4kcm91dGUuY3VycmVu
dC5wYXJhbXMgPSB7eyRyb3V0ZS5jdXJyZW50LnBhcmFtc319PC9wcmU+CisgICAgICogICAgICAg
PHByZT4kcm91dGUuY3VycmVudC5zY29wZS5uYW1lID0ge3skcm91dGUuY3VycmVudC5zY29wZS5u
YW1lfX08L3ByZT4KKyAgICAgKiAgICAgICA8cHJlPiRyb3V0ZVBhcmFtcyA9IHt7JHJvdXRlUGFy
YW1zfX08L3ByZT4KKyAgICAgKiAgICAgPC9kaXY+CisgICAgICogICA8L2ZpbGU+CisgICAgICoK
KyAgICAgKiAgIDxmaWxlIG5hbWU9ImJvb2suaHRtbCI+CisgICAgICogICAgIGNvbnRyb2xsZXI6
IHt7bmFtZX19PGJyIC8+CisgICAgICogICAgIEJvb2sgSWQ6IHt7cGFyYW1zLmJvb2tJZH19PGJy
IC8+CisgICAgICogICA8L2ZpbGU+CisgICAgICoKKyAgICAgKiAgIDxmaWxlIG5hbWU9ImNoYXB0
ZXIuaHRtbCI+CisgICAgICogICAgIGNvbnRyb2xsZXI6IHt7bmFtZX19PGJyIC8+CisgICAgICog
ICAgIEJvb2sgSWQ6IHt7cGFyYW1zLmJvb2tJZH19PGJyIC8+CisgICAgICogICAgIENoYXB0ZXIg
SWQ6IHt7cGFyYW1zLmNoYXB0ZXJJZH19CisgICAgICogICA8L2ZpbGU+CisgICAgICoKKyAgICAg
KiAgIDxmaWxlIG5hbWU9InNjcmlwdC5qcyI+CisgICAgICogICAgIGFuZ3VsYXIubW9kdWxlKCdu
Z1JvdXRlRXhhbXBsZScsIFsnbmdSb3V0ZSddKQorICAgICAqCisgICAgICogICAgICAuY29udHJv
bGxlcignTWFpbkNvbnRyb2xsZXInLCBmdW5jdGlvbigkc2NvcGUsICRyb3V0ZSwgJHJvdXRlUGFy
YW1zLCAkbG9jYXRpb24pIHsKKyAgICAgKiAgICAgICAgICAkc2NvcGUuJHJvdXRlID0gJHJvdXRl
OworICAgICAqICAgICAgICAgICRzY29wZS4kbG9jYXRpb24gPSAkbG9jYXRpb247CisgICAgICog
ICAgICAgICAgJHNjb3BlLiRyb3V0ZVBhcmFtcyA9ICRyb3V0ZVBhcmFtczsKKyAgICAgKiAgICAg
IH0pCisgICAgICoKKyAgICAgKiAgICAgIC5jb250cm9sbGVyKCdCb29rQ29udHJvbGxlcicsIGZ1
bmN0aW9uKCRzY29wZSwgJHJvdXRlUGFyYW1zKSB7CisgICAgICogICAgICAgICAgJHNjb3BlLm5h
bWUgPSAnQm9va0NvbnRyb2xsZXInOworICAgICAqICAgICAgICAgICRzY29wZS5wYXJhbXMgPSAk
cm91dGVQYXJhbXM7CisgICAgICogICAgICB9KQorICAgICAqCisgICAgICogICAgICAuY29udHJv
bGxlcignQ2hhcHRlckNvbnRyb2xsZXInLCBmdW5jdGlvbigkc2NvcGUsICRyb3V0ZVBhcmFtcykg
eworICAgICAqICAgICAgICAgICRzY29wZS5uYW1lID0gJ0NoYXB0ZXJDb250cm9sbGVyJzsKKyAg
ICAgKiAgICAgICAgICAkc2NvcGUucGFyYW1zID0gJHJvdXRlUGFyYW1zOworICAgICAqICAgICAg
fSkKKyAgICAgKgorICAgICAqICAgICAuY29uZmlnKGZ1bmN0aW9uKCRyb3V0ZVByb3ZpZGVyLCAk
bG9jYXRpb25Qcm92aWRlcikgeworICAgICAqICAgICAgICRyb3V0ZVByb3ZpZGVyCisgICAgICog
ICAgICAgIC53aGVuKCcvQm9vay86Ym9va0lkJywgeworICAgICAqICAgICAgICAgdGVtcGxhdGVV
cmw6ICdib29rLmh0bWwnLAorICAgICAqICAgICAgICAgY29udHJvbGxlcjogJ0Jvb2tDb250cm9s
bGVyJywKKyAgICAgKiAgICAgICAgIHJlc29sdmU6IHsKKyAgICAgKiAgICAgICAgICAgLy8gSSB3
aWxsIGNhdXNlIGEgMSBzZWNvbmQgZGVsYXkKKyAgICAgKiAgICAgICAgICAgZGVsYXk6IGZ1bmN0
aW9uKCRxLCAkdGltZW91dCkgeworICAgICAqICAgICAgICAgICAgIHZhciBkZWxheSA9ICRxLmRl
ZmVyKCk7CisgICAgICogICAgICAgICAgICAgJHRpbWVvdXQoZGVsYXkucmVzb2x2ZSwgMTAwMCk7
CisgICAgICogICAgICAgICAgICAgcmV0dXJuIGRlbGF5LnByb21pc2U7CisgICAgICogICAgICAg
ICAgIH0KKyAgICAgKiAgICAgICAgIH0KKyAgICAgKiAgICAgICB9KQorICAgICAqICAgICAgIC53
aGVuKCcvQm9vay86Ym9va0lkL2NoLzpjaGFwdGVySWQnLCB7CisgICAgICogICAgICAgICB0ZW1w
bGF0ZVVybDogJ2NoYXB0ZXIuaHRtbCcsCisgICAgICogICAgICAgICBjb250cm9sbGVyOiAnQ2hh
cHRlckNvbnRyb2xsZXInCisgICAgICogICAgICAgfSk7CisgICAgICoKKyAgICAgKiAgICAgICAv
LyBjb25maWd1cmUgaHRtbDUgdG8gZ2V0IGxpbmtzIHdvcmtpbmcgb24ganNmaWRkbGUKKyAgICAg
KiAgICAgICAkbG9jYXRpb25Qcm92aWRlci5odG1sNU1vZGUodHJ1ZSk7CisgICAgICogICAgIH0p
OworICAgICAqCisgICAgICogICA8L2ZpbGU+CisgICAgICoKKyAgICAgKiAgIDxmaWxlIG5hbWU9
InByb3RyYWN0b3IuanMiIHR5cGU9InByb3RyYWN0b3IiPgorICAgICAqICAgICBpdCgnc2hvdWxk
IGxvYWQgYW5kIGNvbXBpbGUgY29ycmVjdCB0ZW1wbGF0ZScsIGZ1bmN0aW9uKCkgeworICAgICAq
ICAgICAgIGVsZW1lbnQoYnkubGlua1RleHQoJ01vYnk6IENoMScpKS5jbGljaygpOworICAgICAq
ICAgICAgIHZhciBjb250ZW50ID0gZWxlbWVudChieS5jc3MoJ1tuZy12aWV3XScpKS5nZXRUZXh0
KCk7CisgICAgICogICAgICAgZXhwZWN0KGNvbnRlbnQpLnRvTWF0Y2goL2NvbnRyb2xsZXI6IENo
YXB0ZXJDb250cm9sbGVyLyk7CisgICAgICogICAgICAgZXhwZWN0KGNvbnRlbnQpLnRvTWF0Y2go
L0Jvb2sgSWQ6IE1vYnkvKTsKKyAgICAgKiAgICAgICBleHBlY3QoY29udGVudCkudG9NYXRjaCgv
Q2hhcHRlciBJZDogMS8pOworICAgICAqCisgICAgICogICAgICAgZWxlbWVudChieS5wYXJ0aWFs
TGlua1RleHQoJ1NjYXJsZXQnKSkuY2xpY2soKTsKKyAgICAgKgorICAgICAqICAgICAgIGNvbnRl
bnQgPSBlbGVtZW50KGJ5LmNzcygnW25nLXZpZXddJykpLmdldFRleHQoKTsKKyAgICAgKiAgICAg
ICBleHBlY3QoY29udGVudCkudG9NYXRjaCgvY29udHJvbGxlcjogQm9va0NvbnRyb2xsZXIvKTsK
KyAgICAgKiAgICAgICBleHBlY3QoY29udGVudCkudG9NYXRjaCgvQm9vayBJZDogU2NhcmxldC8p
OworICAgICAqICAgICB9KTsKKyAgICAgKiAgIDwvZmlsZT4KKyAgICAgKiA8L2V4YW1wbGU+Cisg
ICAgICovCisKKyAgICAvKioKKyAgICAgKiBAbmdkb2MgZXZlbnQKKyAgICAgKiBAbmFtZSAkcm91
dGUjJHJvdXRlQ2hhbmdlU3RhcnQKKyAgICAgKiBAZXZlbnRUeXBlIGJyb2FkY2FzdCBvbiByb290
IHNjb3BlCisgICAgICogQGRlc2NyaXB0aW9uCisgICAgICogQnJvYWRjYXN0ZWQgYmVmb3JlIGEg
cm91dGUgY2hhbmdlLiBBdCB0aGlzICBwb2ludCB0aGUgcm91dGUgc2VydmljZXMgc3RhcnRzCisg
ICAgICogcmVzb2x2aW5nIGFsbCBvZiB0aGUgZGVwZW5kZW5jaWVzIG5lZWRlZCBmb3IgdGhlIHJv
dXRlIGNoYW5nZSB0byBvY2N1ci4KKyAgICAgKiBUeXBpY2FsbHkgdGhpcyBpbnZvbHZlcyBmZXRj
aGluZyB0aGUgdmlldyB0ZW1wbGF0ZSBhcyB3ZWxsIGFzIGFueSBkZXBlbmRlbmNpZXMKKyAgICAg
KiBkZWZpbmVkIGluIGByZXNvbHZlYCByb3V0ZSBwcm9wZXJ0eS4gT25jZSAgYWxsIG9mIHRoZSBk
ZXBlbmRlbmNpZXMgYXJlIHJlc29sdmVkCisgICAgICogYCRyb3V0ZUNoYW5nZVN1Y2Nlc3NgIGlz
IGZpcmVkLgorICAgICAqCisgICAgICogVGhlIHJvdXRlIGNoYW5nZSAoYW5kIHRoZSBgJGxvY2F0
aW9uYCBjaGFuZ2UgdGhhdCB0cmlnZ2VyZWQgaXQpIGNhbiBiZSBwcmV2ZW50ZWQKKyAgICAgKiBi
eSBjYWxsaW5nIGBwcmV2ZW50RGVmYXVsdGAgbWV0aG9kIG9mIHRoZSBldmVudC4gU2VlIHtAbGlu
ayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRvbn0KKyAgICAgKiBmb3IgbW9yZSBkZXRhaWxzIGFib3V0
IGV2ZW50IG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBhbmd1bGFyRXZl
bnQgU3ludGhldGljIGV2ZW50IG9iamVjdC4KKyAgICAgKiBAcGFyYW0ge1JvdXRlfSBuZXh0IEZ1
dHVyZSByb3V0ZSBpbmZvcm1hdGlvbi4KKyAgICAgKiBAcGFyYW0ge1JvdXRlfSBjdXJyZW50IEN1
cnJlbnQgcm91dGUgaW5mb3JtYXRpb24uCisgICAgICovCisKKyAgICAvKioKKyAgICAgKiBAbmdk
b2MgZXZlbnQKKyAgICAgKiBAbmFtZSAkcm91dGUjJHJvdXRlQ2hhbmdlU3VjY2VzcworICAgICAq
IEBldmVudFR5cGUgYnJvYWRjYXN0IG9uIHJvb3Qgc2NvcGUKKyAgICAgKiBAZGVzY3JpcHRpb24K
KyAgICAgKiBCcm9hZGNhc3RlZCBhZnRlciBhIHJvdXRlIGNoYW5nZSBoYXMgaGFwcGVuZWQgc3Vj
Y2Vzc2Z1bGx5LgorICAgICAqIFRoZSBgcmVzb2x2ZWAgZGVwZW5kZW5jaWVzIGFyZSBub3cgYXZh
aWxhYmxlIGluIHRoZSBgY3VycmVudC5sb2NhbHNgIHByb3BlcnR5LgorICAgICAqCisgICAgICog
e0BsaW5rIG5nUm91dGUuZGlyZWN0aXZlOm5nVmlldyBuZ1ZpZXd9IGxpc3RlbnMgZm9yIHRoZSBk
aXJlY3RpdmUKKyAgICAgKiB0byBpbnN0YW50aWF0ZSB0aGUgY29udHJvbGxlciBhbmQgcmVuZGVy
IHRoZSB2aWV3LgorICAgICAqCisgICAgICogQHBhcmFtIHtPYmplY3R9IGFuZ3VsYXJFdmVudCBT
eW50aGV0aWMgZXZlbnQgb2JqZWN0LgorICAgICAqIEBwYXJhbSB7Um91dGV9IGN1cnJlbnQgQ3Vy
cmVudCByb3V0ZSBpbmZvcm1hdGlvbi4KKyAgICAgKiBAcGFyYW0ge1JvdXRlfFVuZGVmaW5lZH0g
cHJldmlvdXMgUHJldmlvdXMgcm91dGUgaW5mb3JtYXRpb24sIG9yIHVuZGVmaW5lZCBpZiBjdXJy
ZW50IGlzCisgICAgICogZmlyc3Qgcm91dGUgZW50ZXJlZC4KKyAgICAgKi8KKworICAgIC8qKgor
ICAgICAqIEBuZ2RvYyBldmVudAorICAgICAqIEBuYW1lICRyb3V0ZSMkcm91dGVDaGFuZ2VFcnJv
cgorICAgICAqIEBldmVudFR5cGUgYnJvYWRjYXN0IG9uIHJvb3Qgc2NvcGUKKyAgICAgKiBAZGVz
Y3JpcHRpb24KKyAgICAgKiBCcm9hZGNhc3RlZCBpZiBhbnkgb2YgdGhlIHJlc29sdmUgcHJvbWlz
ZXMgYXJlIHJlamVjdGVkLgorICAgICAqCisgICAgICogQHBhcmFtIHtPYmplY3R9IGFuZ3VsYXJF
dmVudCBTeW50aGV0aWMgZXZlbnQgb2JqZWN0CisgICAgICogQHBhcmFtIHtSb3V0ZX0gY3VycmVu
dCBDdXJyZW50IHJvdXRlIGluZm9ybWF0aW9uLgorICAgICAqIEBwYXJhbSB7Um91dGV9IHByZXZp
b3VzIFByZXZpb3VzIHJvdXRlIGluZm9ybWF0aW9uLgorICAgICAqIEBwYXJhbSB7Um91dGV9IHJl
amVjdGlvbiBSZWplY3Rpb24gb2YgdGhlIHByb21pc2UuIFVzdWFsbHkgdGhlIGVycm9yIG9mIHRo
ZSBmYWlsZWQgcHJvbWlzZS4KKyAgICAgKi8KKworICAgIC8qKgorICAgICAqIEBuZ2RvYyBldmVu
dAorICAgICAqIEBuYW1lICRyb3V0ZSMkcm91dGVVcGRhdGUKKyAgICAgKiBAZXZlbnRUeXBlIGJy
b2FkY2FzdCBvbiByb290IHNjb3BlCisgICAgICogQGRlc2NyaXB0aW9uCisgICAgICogVGhlIGBy
ZWxvYWRPblNlYXJjaGAgcHJvcGVydHkgaGFzIGJlZW4gc2V0IHRvIGZhbHNlLCBhbmQgd2UgYXJl
IHJldXNpbmcgdGhlIHNhbWUKKyAgICAgKiBpbnN0YW5jZSBvZiB0aGUgQ29udHJvbGxlci4KKyAg
ICAgKgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBhbmd1bGFyRXZlbnQgU3ludGhldGljIGV2ZW50
IG9iamVjdAorICAgICAqIEBwYXJhbSB7Um91dGV9IGN1cnJlbnQgQ3VycmVudC9wcmV2aW91cyBy
b3V0ZSBpbmZvcm1hdGlvbi4KKyAgICAgKi8KKworICAgIHZhciBmb3JjZVJlbG9hZCA9IGZhbHNl
LAorICAgICAgICBwcmVwYXJlZFJvdXRlLAorICAgICAgICBwcmVwYXJlZFJvdXRlSXNVcGRhdGVP
bmx5LAorICAgICAgICAkcm91dGUgPSB7CisgICAgICAgICAgcm91dGVzOiByb3V0ZXMsCisKKyAg
ICAgICAgICAvKioKKyAgICAgICAgICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICAgICAgICogQG5h
bWUgJHJvdXRlI3JlbG9hZAorICAgICAgICAgICAqCisgICAgICAgICAgICogQGRlc2NyaXB0aW9u
CisgICAgICAgICAgICogQ2F1c2VzIGAkcm91dGVgIHNlcnZpY2UgdG8gcmVsb2FkIHRoZSBjdXJy
ZW50IHJvdXRlIGV2ZW4gaWYKKyAgICAgICAgICAgKiB7QGxpbmsgbmcuJGxvY2F0aW9uICRsb2Nh
dGlvbn0gaGFzbid0IGNoYW5nZWQuCisgICAgICAgICAgICoKKyAgICAgICAgICAgKiBBcyBhIHJl
c3VsdCBvZiB0aGF0LCB7QGxpbmsgbmdSb3V0ZS5kaXJlY3RpdmU6bmdWaWV3IG5nVmlld30KKyAg
ICAgICAgICAgKiBjcmVhdGVzIG5ldyBzY29wZSBhbmQgcmVpbnN0YW50aWF0ZXMgdGhlIGNvbnRy
b2xsZXIuCisgICAgICAgICAgICovCisgICAgICAgICAgcmVsb2FkOiBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgIGZvcmNlUmVsb2FkID0gdHJ1ZTsKKworICAgICAgICAgICAgdmFyIGZha2VMb2Nh
dGlvbkV2ZW50ID0geworICAgICAgICAgICAgICBkZWZhdWx0UHJldmVudGVkOiBmYWxzZSwKKyAg
ICAgICAgICAgICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uIGZha2VQcmV2ZW50RGVmYXVsdCgp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIGZvcmNlUmVsb2FkID0gZmFsc2U7CisgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH07CisKKyAgICAgICAgICAgICRyb290U2NvcGUuJGV2YWxBc3luYyhmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgICAgcHJlcGFyZVJvdXRlKGZha2VMb2NhdGlvbkV2ZW50KTsKKyAgICAgICAg
ICAgICAgaWYgKCFmYWtlTG9jYXRpb25FdmVudC5kZWZhdWx0UHJldmVudGVkKSBjb21taXRSb3V0
ZSgpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgfSwKKworICAgICAgICAgIC8qKgorICAg
ICAgICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgICAgICAgKiBAbmFtZSAkcm91dGUjdXBkYXRl
UGFyYW1zCisgICAgICAgICAgICoKKyAgICAgICAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgICAg
ICAgKiBDYXVzZXMgYCRyb3V0ZWAgc2VydmljZSB0byB1cGRhdGUgdGhlIGN1cnJlbnQgVVJMLCBy
ZXBsYWNpbmcKKyAgICAgICAgICAgKiBjdXJyZW50IHJvdXRlIHBhcmFtZXRlcnMgd2l0aCB0aG9z
ZSBzcGVjaWZpZWQgaW4gYG5ld1BhcmFtc2AuCisgICAgICAgICAgICogUHJvdmlkZWQgcHJvcGVy
dHkgbmFtZXMgdGhhdCBtYXRjaCB0aGUgcm91dGUncyBwYXRoIHNlZ21lbnQKKyAgICAgICAgICAg
KiBkZWZpbml0aW9ucyB3aWxsIGJlIGludGVycG9sYXRlZCBpbnRvIHRoZSBsb2NhdGlvbidzIHBh
dGgsIHdoaWxlCisgICAgICAgICAgICogcmVtYWluaW5nIHByb3BlcnRpZXMgd2lsbCBiZSB0cmVh
dGVkIGFzIHF1ZXJ5IHBhcmFtcy4KKyAgICAgICAgICAgKgorICAgICAgICAgICAqIEBwYXJhbSB7
IU9iamVjdDxzdHJpbmcsIHN0cmluZz59IG5ld1BhcmFtcyBtYXBwaW5nIG9mIFVSTCBwYXJhbWV0
ZXIgbmFtZXMgdG8gdmFsdWVzCisgICAgICAgICAgICovCisgICAgICAgICAgdXBkYXRlUGFyYW1z
OiBmdW5jdGlvbihuZXdQYXJhbXMpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnQgJiYg
dGhpcy5jdXJyZW50LiQkcm91dGUpIHsKKyAgICAgICAgICAgICAgbmV3UGFyYW1zID0gYW5ndWxh
ci5leHRlbmQoe30sIHRoaXMuY3VycmVudC5wYXJhbXMsIG5ld1BhcmFtcyk7CisgICAgICAgICAg
ICAgICRsb2NhdGlvbi5wYXRoKGludGVycG9sYXRlKHRoaXMuY3VycmVudC4kJHJvdXRlLm9yaWdp
bmFsUGF0aCwgbmV3UGFyYW1zKSk7CisgICAgICAgICAgICAgIC8vIGludGVycG9sYXRlIG1vZGlm
aWVzIG5ld1BhcmFtcywgb25seSBxdWVyeSBwYXJhbXMgYXJlIGxlZnQKKyAgICAgICAgICAgICAg
JGxvY2F0aW9uLnNlYXJjaChuZXdQYXJhbXMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgdGhyb3cgJHJvdXRlTWluRXJyKCdub3JvdXQnLCAnVHJpZWQgdXBkYXRpbmcgcm91
dGUgd2hlbiB3aXRoIG5vIGN1cnJlbnQgcm91dGUnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICB9CisgICAgICAgIH07CisKKyAgICAkcm9vdFNjb3BlLiRvbignJGxvY2F0aW9uQ2hhbmdlU3Rh
cnQnLCBwcmVwYXJlUm91dGUpOworICAgICRyb290U2NvcGUuJG9uKCckbG9jYXRpb25DaGFuZ2VT
dWNjZXNzJywgY29tbWl0Um91dGUpOworCisgICAgcmV0dXJuICRyb3V0ZTsKKworICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICAv
KioKKyAgICAgKiBAcGFyYW0gb24ge3N0cmluZ30gY3VycmVudCB1cmwKKyAgICAgKiBAcGFyYW0g
cm91dGUge09iamVjdH0gcm91dGUgcmVnZXhwIHRvIG1hdGNoIHRoZSB1cmwgYWdhaW5zdAorICAg
ICAqIEByZXR1cm4gez9PYmplY3R9CisgICAgICoKKyAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAg
KiBDaGVjayBpZiB0aGUgcm91dGUgbWF0Y2hlcyB0aGUgY3VycmVudCB1cmwuCisgICAgICoKKyAg
ICAgKiBJbnNwaXJlZCBieSBtYXRjaCBpbgorICAgICAqIHZpc2lvbm1lZGlhL2V4cHJlc3MvbGli
L3JvdXRlci9yb3V0ZXIuanMuCisgICAgICovCisgICAgZnVuY3Rpb24gc3dpdGNoUm91dGVNYXRj
aGVyKG9uLCByb3V0ZSkgeworICAgICAgdmFyIGtleXMgPSByb3V0ZS5rZXlzLAorICAgICAgICAg
IHBhcmFtcyA9IHt9OworCisgICAgICBpZiAoIXJvdXRlLnJlZ2V4cCkgcmV0dXJuIG51bGw7CisK
KyAgICAgIHZhciBtID0gcm91dGUucmVnZXhwLmV4ZWMob24pOworICAgICAgaWYgKCFtKSByZXR1
cm4gbnVsbDsKKworICAgICAgZm9yICh2YXIgaSA9IDEsIGxlbiA9IG0ubGVuZ3RoOyBpIDwgbGVu
OyArK2kpIHsKKyAgICAgICAgdmFyIGtleSA9IGtleXNbaSAtIDFdOworCisgICAgICAgIHZhciB2
YWwgPSBtW2ldOworCisgICAgICAgIGlmIChrZXkgJiYgdmFsKSB7CisgICAgICAgICAgcGFyYW1z
W2tleS5uYW1lXSA9IHZhbDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgcmV0dXJuIHBhcmFt
czsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwcmVwYXJlUm91dGUoJGxvY2F0aW9uRXZlbnQpIHsK
KyAgICAgIHZhciBsYXN0Um91dGUgPSAkcm91dGUuY3VycmVudDsKKworICAgICAgcHJlcGFyZWRS
b3V0ZSA9IHBhcnNlUm91dGUoKTsKKyAgICAgIHByZXBhcmVkUm91dGVJc1VwZGF0ZU9ubHkgPSBw
cmVwYXJlZFJvdXRlICYmIGxhc3RSb3V0ZSAmJiBwcmVwYXJlZFJvdXRlLiQkcm91dGUgPT09IGxh
c3RSb3V0ZS4kJHJvdXRlCisgICAgICAgICAgJiYgYW5ndWxhci5lcXVhbHMocHJlcGFyZWRSb3V0
ZS5wYXRoUGFyYW1zLCBsYXN0Um91dGUucGF0aFBhcmFtcykKKyAgICAgICAgICAmJiAhcHJlcGFy
ZWRSb3V0ZS5yZWxvYWRPblNlYXJjaCAmJiAhZm9yY2VSZWxvYWQ7CisKKyAgICAgIGlmICghcHJl
cGFyZWRSb3V0ZUlzVXBkYXRlT25seSAmJiAobGFzdFJvdXRlIHx8IHByZXBhcmVkUm91dGUpKSB7
CisgICAgICAgIGlmICgkcm9vdFNjb3BlLiRicm9hZGNhc3QoJyRyb3V0ZUNoYW5nZVN0YXJ0Jywg
cHJlcGFyZWRSb3V0ZSwgbGFzdFJvdXRlKS5kZWZhdWx0UHJldmVudGVkKSB7CisgICAgICAgICAg
aWYgKCRsb2NhdGlvbkV2ZW50KSB7CisgICAgICAgICAgICAkbG9jYXRpb25FdmVudC5wcmV2ZW50
RGVmYXVsdCgpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAg
IGZ1bmN0aW9uIGNvbW1pdFJvdXRlKCkgeworICAgICAgdmFyIGxhc3RSb3V0ZSA9ICRyb3V0ZS5j
dXJyZW50OworICAgICAgdmFyIG5leHRSb3V0ZSA9IHByZXBhcmVkUm91dGU7CisKKyAgICAgIGlm
IChwcmVwYXJlZFJvdXRlSXNVcGRhdGVPbmx5KSB7CisgICAgICAgIGxhc3RSb3V0ZS5wYXJhbXMg
PSBuZXh0Um91dGUucGFyYW1zOworICAgICAgICBhbmd1bGFyLmNvcHkobGFzdFJvdXRlLnBhcmFt
cywgJHJvdXRlUGFyYW1zKTsKKyAgICAgICAgJHJvb3RTY29wZS4kYnJvYWRjYXN0KCckcm91dGVV
cGRhdGUnLCBsYXN0Um91dGUpOworICAgICAgfSBlbHNlIGlmIChuZXh0Um91dGUgfHwgbGFzdFJv
dXRlKSB7CisgICAgICAgIGZvcmNlUmVsb2FkID0gZmFsc2U7CisgICAgICAgICRyb3V0ZS5jdXJy
ZW50ID0gbmV4dFJvdXRlOworICAgICAgICBpZiAobmV4dFJvdXRlKSB7CisgICAgICAgICAgaWYg
KG5leHRSb3V0ZS5yZWRpcmVjdFRvKSB7CisgICAgICAgICAgICBpZiAoYW5ndWxhci5pc1N0cmlu
ZyhuZXh0Um91dGUucmVkaXJlY3RUbykpIHsKKyAgICAgICAgICAgICAgJGxvY2F0aW9uLnBhdGgo
aW50ZXJwb2xhdGUobmV4dFJvdXRlLnJlZGlyZWN0VG8sIG5leHRSb3V0ZS5wYXJhbXMpKS5zZWFy
Y2gobmV4dFJvdXRlLnBhcmFtcykKKyAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICRsb2NhdGlvbi51cmwobmV4dFJv
dXRlLnJlZGlyZWN0VG8obmV4dFJvdXRlLnBhdGhQYXJhbXMsICRsb2NhdGlvbi5wYXRoKCksICRs
b2NhdGlvbi5zZWFyY2goKSkpCisgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgJHEud2hlbihu
ZXh0Um91dGUpLgorICAgICAgICAgIHRoZW4ocmVzb2x2ZUxvY2FscykuCisgICAgICAgICAgdGhl
bihmdW5jdGlvbihsb2NhbHMpIHsKKyAgICAgICAgICAgIC8vIGFmdGVyIHJvdXRlIGNoYW5nZQor
ICAgICAgICAgICAgaWYgKG5leHRSb3V0ZSA9PT0gJHJvdXRlLmN1cnJlbnQpIHsKKyAgICAgICAg
ICAgICAgaWYgKG5leHRSb3V0ZSkgeworICAgICAgICAgICAgICAgIG5leHRSb3V0ZS5sb2NhbHMg
PSBsb2NhbHM7CisgICAgICAgICAgICAgICAgYW5ndWxhci5jb3B5KG5leHRSb3V0ZS5wYXJhbXMs
ICRyb3V0ZVBhcmFtcyk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgJHJvb3RTY29w
ZS4kYnJvYWRjYXN0KCckcm91dGVDaGFuZ2VTdWNjZXNzJywgbmV4dFJvdXRlLCBsYXN0Um91dGUp
OworICAgICAgICAgICAgfQorICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7CisgICAgICAg
ICAgICBpZiAobmV4dFJvdXRlID09PSAkcm91dGUuY3VycmVudCkgeworICAgICAgICAgICAgICAk
cm9vdFNjb3BlLiRicm9hZGNhc3QoJyRyb3V0ZUNoYW5nZUVycm9yJywgbmV4dFJvdXRlLCBsYXN0
Um91dGUsIGVycm9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9KTsKKyAgICAgIH0KKyAg
ICB9CisKKyAgICBmdW5jdGlvbiByZXNvbHZlTG9jYWxzKHJvdXRlKSB7CisgICAgICBpZiAocm91
dGUpIHsKKyAgICAgICAgdmFyIGxvY2FscyA9IGFuZ3VsYXIuZXh0ZW5kKHt9LCByb3V0ZS5yZXNv
bHZlKTsKKyAgICAgICAgYW5ndWxhci5mb3JFYWNoKGxvY2FscywgZnVuY3Rpb24odmFsdWUsIGtl
eSkgeworICAgICAgICAgIGxvY2Fsc1trZXldID0gYW5ndWxhci5pc1N0cmluZyh2YWx1ZSkgPwor
ICAgICAgICAgICAgICAkaW5qZWN0b3IuZ2V0KHZhbHVlKSA6CisgICAgICAgICAgICAgICRpbmpl
Y3Rvci5pbnZva2UodmFsdWUsIG51bGwsIG51bGwsIGtleSk7CisgICAgICAgIH0pOworICAgICAg
ICB2YXIgdGVtcGxhdGUgPSBnZXRUZW1wbGF0ZUZvcihyb3V0ZSk7CisgICAgICAgIGlmIChhbmd1
bGFyLmlzRGVmaW5lZCh0ZW1wbGF0ZSkpIHsKKyAgICAgICAgICBsb2NhbHNbJyR0ZW1wbGF0ZSdd
ID0gdGVtcGxhdGU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICRxLmFsbChsb2NhbHMpOwor
ICAgICAgfQorICAgIH0KKworCisgICAgZnVuY3Rpb24gZ2V0VGVtcGxhdGVGb3Iocm91dGUpIHsK
KyAgICAgIHZhciB0ZW1wbGF0ZSwgdGVtcGxhdGVVcmw7CisgICAgICBpZiAoYW5ndWxhci5pc0Rl
ZmluZWQodGVtcGxhdGUgPSByb3V0ZS50ZW1wbGF0ZSkpIHsKKyAgICAgICAgaWYgKGFuZ3VsYXIu
aXNGdW5jdGlvbih0ZW1wbGF0ZSkpIHsKKyAgICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlKHJv
dXRlLnBhcmFtcyk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSBpZiAoYW5ndWxhci5pc0RlZmlu
ZWQodGVtcGxhdGVVcmwgPSByb3V0ZS50ZW1wbGF0ZVVybCkpIHsKKyAgICAgICAgaWYgKGFuZ3Vs
YXIuaXNGdW5jdGlvbih0ZW1wbGF0ZVVybCkpIHsKKyAgICAgICAgICB0ZW1wbGF0ZVVybCA9IHRl
bXBsYXRlVXJsKHJvdXRlLnBhcmFtcyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFuZ3VsYXIu
aXNEZWZpbmVkKHRlbXBsYXRlVXJsKSkgeworICAgICAgICAgIHJvdXRlLmxvYWRlZFRlbXBsYXRl
VXJsID0gJHNjZS52YWx1ZU9mKHRlbXBsYXRlVXJsKTsKKyAgICAgICAgICB0ZW1wbGF0ZSA9ICR0
ZW1wbGF0ZVJlcXVlc3QodGVtcGxhdGVVcmwpOworICAgICAgICB9CisgICAgICB9CisgICAgICBy
ZXR1cm4gdGVtcGxhdGU7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJucyB7T2Jq
ZWN0fSB0aGUgY3VycmVudCBhY3RpdmUgcm91dGUsIGJ5IG1hdGNoaW5nIGl0IGFnYWluc3QgdGhl
IFVSTAorICAgICAqLworICAgIGZ1bmN0aW9uIHBhcnNlUm91dGUoKSB7CisgICAgICAvLyBNYXRj
aCBhIHJvdXRlCisgICAgICB2YXIgcGFyYW1zLCBtYXRjaDsKKyAgICAgIGFuZ3VsYXIuZm9yRWFj
aChyb3V0ZXMsIGZ1bmN0aW9uKHJvdXRlLCBwYXRoKSB7CisgICAgICAgIGlmICghbWF0Y2ggJiYg
KHBhcmFtcyA9IHN3aXRjaFJvdXRlTWF0Y2hlcigkbG9jYXRpb24ucGF0aCgpLCByb3V0ZSkpKSB7
CisgICAgICAgICAgbWF0Y2ggPSBpbmhlcml0KHJvdXRlLCB7CisgICAgICAgICAgICBwYXJhbXM6
IGFuZ3VsYXIuZXh0ZW5kKHt9LCAkbG9jYXRpb24uc2VhcmNoKCksIHBhcmFtcyksCisgICAgICAg
ICAgICBwYXRoUGFyYW1zOiBwYXJhbXN9KTsKKyAgICAgICAgICBtYXRjaC4kJHJvdXRlID0gcm91
dGU7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgICAgLy8gTm8gcm91dGUgbWF0Y2hlZDsgZmFs
bGJhY2sgdG8gIm90aGVyd2lzZSIgcm91dGUKKyAgICAgIHJldHVybiBtYXRjaCB8fCByb3V0ZXNb
bnVsbF0gJiYgaW5oZXJpdChyb3V0ZXNbbnVsbF0sIHtwYXJhbXM6IHt9LCBwYXRoUGFyYW1zOnt9
fSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybnMge3N0cmluZ30gaW50ZXJwb2xh
dGlvbiBvZiB0aGUgcmVkaXJlY3QgcGF0aCB3aXRoIHRoZSBwYXJhbWV0ZXJzCisgICAgICovCisg
ICAgZnVuY3Rpb24gaW50ZXJwb2xhdGUoc3RyaW5nLCBwYXJhbXMpIHsKKyAgICAgIHZhciByZXN1
bHQgPSBbXTsKKyAgICAgIGFuZ3VsYXIuZm9yRWFjaCgoc3RyaW5nIHx8ICcnKS5zcGxpdCgnOicp
LCBmdW5jdGlvbihzZWdtZW50LCBpKSB7CisgICAgICAgIGlmIChpID09PSAwKSB7CisgICAgICAg
ICAgcmVzdWx0LnB1c2goc2VnbWVudCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdmFy
IHNlZ21lbnRNYXRjaCA9IHNlZ21lbnQubWF0Y2goLyhcdyspKD86Wz8qXSk/KC4qKS8pOworICAg
ICAgICAgIHZhciBrZXkgPSBzZWdtZW50TWF0Y2hbMV07CisgICAgICAgICAgcmVzdWx0LnB1c2go
cGFyYW1zW2tleV0pOworICAgICAgICAgIHJlc3VsdC5wdXNoKHNlZ21lbnRNYXRjaFsyXSB8fCAn
Jyk7CisgICAgICAgICAgZGVsZXRlIHBhcmFtc1trZXldOworICAgICAgICB9CisgICAgICB9KTsK
KyAgICAgIHJldHVybiByZXN1bHQuam9pbignJyk7CisgICAgfQorICB9XTsKK30KKworbmdSb3V0
ZU1vZHVsZS5wcm92aWRlcignJHJvdXRlUGFyYW1zJywgJFJvdXRlUGFyYW1zUHJvdmlkZXIpOwor
CisKKy8qKgorICogQG5nZG9jIHNlcnZpY2UKKyAqIEBuYW1lICRyb3V0ZVBhcmFtcworICogQHJl
cXVpcmVzICRyb3V0ZQorICogQHRoaXMKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFRoZSBgJHJv
dXRlUGFyYW1zYCBzZXJ2aWNlIGFsbG93cyB5b3UgdG8gcmV0cmlldmUgdGhlIGN1cnJlbnQgc2V0
IG9mIHJvdXRlIHBhcmFtZXRlcnMuCisgKgorICogUmVxdWlyZXMgdGhlIHtAbGluayBuZ1JvdXRl
IGBuZ1JvdXRlYH0gbW9kdWxlIHRvIGJlIGluc3RhbGxlZC4KKyAqCisgKiBUaGUgcm91dGUgcGFy
YW1ldGVycyBhcmUgYSBjb21iaW5hdGlvbiBvZiB7QGxpbmsgbmcuJGxvY2F0aW9uIGAkbG9jYXRp
b25gfSdzCisgKiB7QGxpbmsgbmcuJGxvY2F0aW9uI3NlYXJjaCBgc2VhcmNoKClgfSBhbmQge0Bs
aW5rIG5nLiRsb2NhdGlvbiNwYXRoIGBwYXRoKClgfS4KKyAqIFRoZSBgcGF0aGAgcGFyYW1ldGVy
cyBhcmUgZXh0cmFjdGVkIHdoZW4gdGhlIHtAbGluayBuZ1JvdXRlLiRyb3V0ZSBgJHJvdXRlYH0g
cGF0aCBpcyBtYXRjaGVkLgorICoKKyAqIEluIGNhc2Ugb2YgcGFyYW1ldGVyIG5hbWUgY29sbGlz
aW9uLCBgcGF0aGAgcGFyYW1zIHRha2UgcHJlY2VkZW5jZSBvdmVyIGBzZWFyY2hgIHBhcmFtcy4K
KyAqCisgKiBUaGUgc2VydmljZSBndWFyYW50ZWVzIHRoYXQgdGhlIGlkZW50aXR5IG9mIHRoZSBg
JHJvdXRlUGFyYW1zYCBvYmplY3Qgd2lsbCByZW1haW4gdW5jaGFuZ2VkCisgKiAoYnV0IGl0cyBw
cm9wZXJ0aWVzIHdpbGwgbGlrZWx5IGNoYW5nZSkgZXZlbiB3aGVuIGEgcm91dGUgY2hhbmdlIG9j
Y3Vycy4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIGAkcm91dGVQYXJhbXNgIGFyZSBvbmx5IHVwZGF0
ZWQgKmFmdGVyKiBhIHJvdXRlIGNoYW5nZSBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5LgorICogVGhp
cyBtZWFucyB0aGF0IHlvdSBjYW5ub3QgcmVseSBvbiBgJHJvdXRlUGFyYW1zYCBiZWluZyBjb3Jy
ZWN0IGluIHJvdXRlIHJlc29sdmUgZnVuY3Rpb25zLgorICogSW5zdGVhZCB5b3UgY2FuIHVzZSBg
JHJvdXRlLmN1cnJlbnQucGFyYW1zYCB0byBhY2Nlc3MgdGhlIG5ldyByb3V0ZSdzIHBhcmFtZXRl
cnMuCisgKgorICogQGV4YW1wbGUKKyAqIGBgYGpzCisgKiAgLy8gR2l2ZW46CisgKiAgLy8gVVJM
OiBodHRwOi8vc2VydmVyLmNvbS9pbmRleC5odG1sIy9DaGFwdGVyLzEvU2VjdGlvbi8yP3NlYXJj
aD1tb2J5CisgKiAgLy8gUm91dGU6IC9DaGFwdGVyLzpjaGFwdGVySWQvU2VjdGlvbi86c2VjdGlv
bklkCisgKiAgLy8KKyAqICAvLyBUaGVuCisgKiAgJHJvdXRlUGFyYW1zID09PiB7Y2hhcHRlcklk
OicxJywgc2VjdGlvbklkOicyJywgc2VhcmNoOidtb2J5J30KKyAqIGBgYAorICovCitmdW5jdGlv
biAkUm91dGVQYXJhbXNQcm92aWRlcigpIHsKKyAgdGhpcy4kZ2V0ID0gZnVuY3Rpb24oKSB7IHJl
dHVybiB7fTsgfTsKK30KKworbmdSb3V0ZU1vZHVsZS5kaXJlY3RpdmUoJ25nVmlldycsIG5nVmll
d0ZhY3RvcnkpOworbmdSb3V0ZU1vZHVsZS5kaXJlY3RpdmUoJ25nVmlldycsIG5nVmlld0ZpbGxD
b250ZW50RmFjdG9yeSk7CisKKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBu
Z1ZpZXcKKyAqIEByZXN0cmljdCBFQ0EKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqICMgT3ZlcnZp
ZXcKKyAqIGBuZ1ZpZXdgIGlzIGEgZGlyZWN0aXZlIHRoYXQgY29tcGxlbWVudHMgdGhlIHtAbGlu
ayBuZ1JvdXRlLiRyb3V0ZSAkcm91dGV9IHNlcnZpY2UgYnkKKyAqIGluY2x1ZGluZyB0aGUgcmVu
ZGVyZWQgdGVtcGxhdGUgb2YgdGhlIGN1cnJlbnQgcm91dGUgaW50byB0aGUgbWFpbiBsYXlvdXQg
KGBpbmRleC5odG1sYCkgZmlsZS4KKyAqIEV2ZXJ5IHRpbWUgdGhlIGN1cnJlbnQgcm91dGUgY2hh
bmdlcywgdGhlIGluY2x1ZGVkIHZpZXcgY2hhbmdlcyB3aXRoIGl0IGFjY29yZGluZyB0byB0aGUK
KyAqIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGAkcm91dGVgIHNlcnZpY2UuCisgKgorICogUmVxdWly
ZXMgdGhlIHtAbGluayBuZ1JvdXRlIGBuZ1JvdXRlYH0gbW9kdWxlIHRvIGJlIGluc3RhbGxlZC4K
KyAqCisgKiBAYW5pbWF0aW9ucworICogfCBBbmltYXRpb24gICAgICAgICAgICAgICAgICAgICAg
ICB8IE9jY3VycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHwtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS18CisgKiB8IHtAbGluayBuZy4kYW5pbWF0ZSNlbnRlciBlbnRlcn0gIHwgd2hlbiB0aGUg
bmV3IGVsZW1lbnQgaXMgaW5zZXJ0ZWQgdG8gdGhlIERPTSB8CisgKiB8IHtAbGluayBuZy4kYW5p
bWF0ZSNsZWF2ZSBsZWF2ZX0gIHwgd2hlbiB0aGUgb2xkIGVsZW1lbnQgaXMgcmVtb3ZlZCBmcm9t
IHRvIHRoZSBET00gIHwKKyAqCisgKiBUaGUgZW50ZXIgYW5kIGxlYXZlIGFuaW1hdGlvbiBvY2N1
ciBjb25jdXJyZW50bHkuCisgKgorICogQGtub3duSXNzdWUgSWYgYG5nVmlld2AgaXMgY29udGFp
bmVkIGluIGFuIGFzeW5jaHJvbm91c2x5IGxvYWRlZCB0ZW1wbGF0ZSAoZS5nLiBpbiBhbm90aGVy
CisgKiAgICAgICAgICAgICBkaXJlY3RpdmUncyB0ZW1wbGF0ZVVybCBvciBpbiBhIHRlbXBsYXRl
IGxvYWRlZCB1c2luZyBgbmdJbmNsdWRlYCksIHRoZW4geW91IG5lZWQgdG8KKyAqICAgICAgICAg
ICAgIG1ha2Ugc3VyZSB0aGF0IGAkcm91dGVgIGlzIGluc3RhbnRpYXRlZCBpbiB0aW1lIHRvIGNh
cHR1cmUgdGhlIGluaXRpYWwKKyAqICAgICAgICAgICAgIGAkbG9jYXRpb25DaGFuZ2VTdGFydGAg
ZXZlbnQgYW5kIGxvYWQgdGhlIGFwcHJvcHJpYXRlIHZpZXcuIE9uZSB3YXkgdG8gYWNoaWV2ZSB0
aGlzCisgKiAgICAgICAgICAgICBpcyB0byBoYXZlIGl0IGFzIGEgZGVwZW5kZW5jeSBpbiBhIGAu
cnVuYCBibG9jazoKKyAqICAgICAgICAgICAgIGBteU1vZHVsZS5ydW4oWyckcm91dGUnLCBmdW5j
dGlvbigpIHt9XSk7YAorICoKKyAqIEBzY29wZQorICogQHByaW9yaXR5IDQwMAorICogQHBhcmFt
IHtzdHJpbmc9fSBvbmxvYWQgRXhwcmVzc2lvbiB0byBldmFsdWF0ZSB3aGVuZXZlciB0aGUgdmll
dyB1cGRhdGVzLgorICoKKyAqIEBwYXJhbSB7c3RyaW5nPX0gYXV0b3Njcm9sbCBXaGV0aGVyIGBu
Z1ZpZXdgIHNob3VsZCBjYWxsIHtAbGluayBuZy4kYW5jaG9yU2Nyb2xsCisgKiAgICAgICAgICAg
ICAgICAgICRhbmNob3JTY3JvbGx9IHRvIHNjcm9sbCB0aGUgdmlld3BvcnQgYWZ0ZXIgdGhlIHZp
ZXcgaXMgdXBkYXRlZC4KKyAqCisgKiAgICAgICAgICAgICAgICAgIC0gSWYgdGhlIGF0dHJpYnV0
ZSBpcyBub3Qgc2V0LCBkaXNhYmxlIHNjcm9sbGluZy4KKyAqICAgICAgICAgICAgICAgICAgLSBJ
ZiB0aGUgYXR0cmlidXRlIGlzIHNldCB3aXRob3V0IHZhbHVlLCBlbmFibGUgc2Nyb2xsaW5nLgor
ICogICAgICAgICAgICAgICAgICAtIE90aGVyd2lzZSBlbmFibGUgc2Nyb2xsaW5nIG9ubHkgaWYg
dGhlIGBhdXRvc2Nyb2xsYCBhdHRyaWJ1dGUgdmFsdWUgZXZhbHVhdGVkCisgKiAgICAgICAgICAg
ICAgICAgICAgYXMgYW4gZXhwcmVzc2lvbiB5aWVsZHMgYSB0cnV0aHkgdmFsdWUuCisgKiBAZXhh
bXBsZQorICAgIDxleGFtcGxlIG5hbWU9Im5nVmlldy1kaXJlY3RpdmUiIG1vZHVsZT0ibmdWaWV3
RXhhbXBsZSIKKyAgICAgICAgICAgICBkZXBzPSJhbmd1bGFyLXJvdXRlLmpzO2FuZ3VsYXItYW5p
bWF0ZS5qcyIKKyAgICAgICAgICAgICBhbmltYXRpb25zPSJ0cnVlIiBmaXhCYXNlPSJ0cnVlIj4K
KyAgICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICAgICA8ZGl2IG5nLWNvbnRyb2xs
ZXI9Ik1haW5DdHJsIGFzIG1haW4iPgorICAgICAgICAgIENob29zZToKKyAgICAgICAgICA8YSBo
cmVmPSJCb29rL01vYnkiPk1vYnk8L2E+IHwKKyAgICAgICAgICA8YSBocmVmPSJCb29rL01vYnkv
Y2gvMSI+TW9ieTogQ2gxPC9hPiB8CisgICAgICAgICAgPGEgaHJlZj0iQm9vay9HYXRzYnkiPkdh
dHNieTwvYT4gfAorICAgICAgICAgIDxhIGhyZWY9IkJvb2svR2F0c2J5L2NoLzQ/a2V5PXZhbHVl
Ij5HYXRzYnk6IENoNDwvYT4gfAorICAgICAgICAgIDxhIGhyZWY9IkJvb2svU2NhcmxldCI+U2Nh
cmxldCBMZXR0ZXI8L2E+PGJyLz4KKworICAgICAgICAgIDxkaXYgY2xhc3M9InZpZXctYW5pbWF0
ZS1jb250YWluZXIiPgorICAgICAgICAgICAgPGRpdiBuZy12aWV3IGNsYXNzPSJ2aWV3LWFuaW1h
dGUiPjwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxociAvPgorCisgICAgICAg
ICAgPHByZT4kbG9jYXRpb24ucGF0aCgpID0ge3ttYWluLiRsb2NhdGlvbi5wYXRoKCl9fTwvcHJl
PgorICAgICAgICAgIDxwcmU+JHJvdXRlLmN1cnJlbnQudGVtcGxhdGVVcmwgPSB7e21haW4uJHJv
dXRlLmN1cnJlbnQudGVtcGxhdGVVcmx9fTwvcHJlPgorICAgICAgICAgIDxwcmU+JHJvdXRlLmN1
cnJlbnQucGFyYW1zID0ge3ttYWluLiRyb3V0ZS5jdXJyZW50LnBhcmFtc319PC9wcmU+CisgICAg
ICAgICAgPHByZT4kcm91dGVQYXJhbXMgPSB7e21haW4uJHJvdXRlUGFyYW1zfX08L3ByZT4KKyAg
ICAgICAgPC9kaXY+CisgICAgICA8L2ZpbGU+CisKKyAgICAgIDxmaWxlIG5hbWU9ImJvb2suaHRt
bCI+CisgICAgICAgIDxkaXY+CisgICAgICAgICAgY29udHJvbGxlcjoge3tib29rLm5hbWV9fTxi
ciAvPgorICAgICAgICAgIEJvb2sgSWQ6IHt7Ym9vay5wYXJhbXMuYm9va0lkfX08YnIgLz4KKyAg
ICAgICAgPC9kaXY+CisgICAgICA8L2ZpbGU+CisKKyAgICAgIDxmaWxlIG5hbWU9ImNoYXB0ZXIu
aHRtbCI+CisgICAgICAgIDxkaXY+CisgICAgICAgICAgY29udHJvbGxlcjoge3tjaGFwdGVyLm5h
bWV9fTxiciAvPgorICAgICAgICAgIEJvb2sgSWQ6IHt7Y2hhcHRlci5wYXJhbXMuYm9va0lkfX08
YnIgLz4KKyAgICAgICAgICBDaGFwdGVyIElkOiB7e2NoYXB0ZXIucGFyYW1zLmNoYXB0ZXJJZH19
CisgICAgICAgIDwvZGl2PgorICAgICAgPC9maWxlPgorCisgICAgICA8ZmlsZSBuYW1lPSJhbmlt
YXRpb25zLmNzcyI+CisgICAgICAgIC52aWV3LWFuaW1hdGUtY29udGFpbmVyIHsKKyAgICAgICAg
ICBwb3NpdGlvbjpyZWxhdGl2ZTsKKyAgICAgICAgICBoZWlnaHQ6MTAwcHghaW1wb3J0YW50Owor
ICAgICAgICAgIGJhY2tncm91bmQ6d2hpdGU7CisgICAgICAgICAgYm9yZGVyOjFweCBzb2xpZCBi
bGFjazsKKyAgICAgICAgICBoZWlnaHQ6NDBweDsKKyAgICAgICAgICBvdmVyZmxvdzpoaWRkZW47
CisgICAgICAgIH0KKworICAgICAgICAudmlldy1hbmltYXRlIHsKKyAgICAgICAgICBwYWRkaW5n
OjEwcHg7CisgICAgICAgIH0KKworICAgICAgICAudmlldy1hbmltYXRlLm5nLWVudGVyLCAudmll
dy1hbmltYXRlLm5nLWxlYXZlIHsKKyAgICAgICAgICB0cmFuc2l0aW9uOmFsbCBjdWJpYy1iZXpp
ZXIoMC4yNTAsIDAuNDYwLCAwLjQ1MCwgMC45NDApIDEuNXM7CisKKyAgICAgICAgICBkaXNwbGF5
OmJsb2NrOworICAgICAgICAgIHdpZHRoOjEwMCU7CisgICAgICAgICAgYm9yZGVyLWxlZnQ6MXB4
IHNvbGlkIGJsYWNrOworCisgICAgICAgICAgcG9zaXRpb246YWJzb2x1dGU7CisgICAgICAgICAg
dG9wOjA7CisgICAgICAgICAgbGVmdDowOworICAgICAgICAgIHJpZ2h0OjA7CisgICAgICAgICAg
Ym90dG9tOjA7CisgICAgICAgICAgcGFkZGluZzoxMHB4OworICAgICAgICB9CisKKyAgICAgICAg
LnZpZXctYW5pbWF0ZS5uZy1lbnRlciB7CisgICAgICAgICAgbGVmdDoxMDAlOworICAgICAgICB9
CisgICAgICAgIC52aWV3LWFuaW1hdGUubmctZW50ZXIubmctZW50ZXItYWN0aXZlIHsKKyAgICAg
ICAgICBsZWZ0OjA7CisgICAgICAgIH0KKyAgICAgICAgLnZpZXctYW5pbWF0ZS5uZy1sZWF2ZS5u
Zy1sZWF2ZS1hY3RpdmUgeworICAgICAgICAgIGxlZnQ6LTEwMCU7CisgICAgICAgIH0KKyAgICAg
IDwvZmlsZT4KKworICAgICAgPGZpbGUgbmFtZT0ic2NyaXB0LmpzIj4KKyAgICAgICAgYW5ndWxh
ci5tb2R1bGUoJ25nVmlld0V4YW1wbGUnLCBbJ25nUm91dGUnLCAnbmdBbmltYXRlJ10pCisgICAg
ICAgICAgLmNvbmZpZyhbJyRyb3V0ZVByb3ZpZGVyJywgJyRsb2NhdGlvblByb3ZpZGVyJywKKyAg
ICAgICAgICAgIGZ1bmN0aW9uKCRyb3V0ZVByb3ZpZGVyLCAkbG9jYXRpb25Qcm92aWRlcikgewor
ICAgICAgICAgICAgICAkcm91dGVQcm92aWRlcgorICAgICAgICAgICAgICAgIC53aGVuKCcvQm9v
ay86Ym9va0lkJywgeworICAgICAgICAgICAgICAgICAgdGVtcGxhdGVVcmw6ICdib29rLmh0bWwn
LAorICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogJ0Jvb2tDdHJsJywKKyAgICAgICAgICAg
ICAgICAgIGNvbnRyb2xsZXJBczogJ2Jvb2snCisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAg
ICAgICAgICAud2hlbignL0Jvb2svOmJvb2tJZC9jaC86Y2hhcHRlcklkJywgeworICAgICAgICAg
ICAgICAgICAgdGVtcGxhdGVVcmw6ICdjaGFwdGVyLmh0bWwnLAorICAgICAgICAgICAgICAgICAg
Y29udHJvbGxlcjogJ0NoYXB0ZXJDdHJsJywKKyAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJB
czogJ2NoYXB0ZXInCisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgJGxvY2F0
aW9uUHJvdmlkZXIuaHRtbDVNb2RlKHRydWUpOworICAgICAgICAgIH1dKQorICAgICAgICAgIC5j
b250cm9sbGVyKCdNYWluQ3RybCcsIFsnJHJvdXRlJywgJyRyb3V0ZVBhcmFtcycsICckbG9jYXRp
b24nLAorICAgICAgICAgICAgZnVuY3Rpb24gTWFpbkN0cmwoJHJvdXRlLCAkcm91dGVQYXJhbXMs
ICRsb2NhdGlvbikgeworICAgICAgICAgICAgICB0aGlzLiRyb3V0ZSA9ICRyb3V0ZTsKKyAgICAg
ICAgICAgICAgdGhpcy4kbG9jYXRpb24gPSAkbG9jYXRpb247CisgICAgICAgICAgICAgIHRoaXMu
JHJvdXRlUGFyYW1zID0gJHJvdXRlUGFyYW1zOworICAgICAgICAgIH1dKQorICAgICAgICAgIC5j
b250cm9sbGVyKCdCb29rQ3RybCcsIFsnJHJvdXRlUGFyYW1zJywgZnVuY3Rpb24gQm9va0N0cmwo
JHJvdXRlUGFyYW1zKSB7CisgICAgICAgICAgICB0aGlzLm5hbWUgPSAnQm9va0N0cmwnOworICAg
ICAgICAgICAgdGhpcy5wYXJhbXMgPSAkcm91dGVQYXJhbXM7CisgICAgICAgICAgfV0pCisgICAg
ICAgICAgLmNvbnRyb2xsZXIoJ0NoYXB0ZXJDdHJsJywgWyckcm91dGVQYXJhbXMnLCBmdW5jdGlv
biBDaGFwdGVyQ3RybCgkcm91dGVQYXJhbXMpIHsKKyAgICAgICAgICAgIHRoaXMubmFtZSA9ICdD
aGFwdGVyQ3RybCc7CisgICAgICAgICAgICB0aGlzLnBhcmFtcyA9ICRyb3V0ZVBhcmFtczsKKyAg
ICAgICAgICB9XSk7CisKKyAgICAgIDwvZmlsZT4KKworICAgICAgPGZpbGUgbmFtZT0icHJvdHJh
Y3Rvci5qcyIgdHlwZT0icHJvdHJhY3RvciI+CisgICAgICAgIGl0KCdzaG91bGQgbG9hZCBhbmQg
Y29tcGlsZSBjb3JyZWN0IHRlbXBsYXRlJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgZWxlbWVu
dChieS5saW5rVGV4dCgnTW9ieTogQ2gxJykpLmNsaWNrKCk7CisgICAgICAgICAgdmFyIGNvbnRl
bnQgPSBlbGVtZW50KGJ5LmNzcygnW25nLXZpZXddJykpLmdldFRleHQoKTsKKyAgICAgICAgICBl
eHBlY3QoY29udGVudCkudG9NYXRjaCgvY29udHJvbGxlcjogQ2hhcHRlckN0cmwvKTsKKyAgICAg
ICAgICBleHBlY3QoY29udGVudCkudG9NYXRjaCgvQm9vayBJZDogTW9ieS8pOworICAgICAgICAg
IGV4cGVjdChjb250ZW50KS50b01hdGNoKC9DaGFwdGVyIElkOiAxLyk7CisKKyAgICAgICAgICBl
bGVtZW50KGJ5LnBhcnRpYWxMaW5rVGV4dCgnU2NhcmxldCcpKS5jbGljaygpOworCisgICAgICAg
ICAgY29udGVudCA9IGVsZW1lbnQoYnkuY3NzKCdbbmctdmlld10nKSkuZ2V0VGV4dCgpOworICAg
ICAgICAgIGV4cGVjdChjb250ZW50KS50b01hdGNoKC9jb250cm9sbGVyOiBCb29rQ3RybC8pOwor
ICAgICAgICAgIGV4cGVjdChjb250ZW50KS50b01hdGNoKC9Cb29rIElkOiBTY2FybGV0Lyk7Cisg
ICAgICAgIH0pOworICAgICAgPC9maWxlPgorICAgIDwvZXhhbXBsZT4KKyAqLworCisKKy8qKgor
ICogQG5nZG9jIGV2ZW50CisgKiBAbmFtZSBuZ1ZpZXcjJHZpZXdDb250ZW50TG9hZGVkCisgKiBA
ZXZlbnRUeXBlIGVtaXQgb24gdGhlIGN1cnJlbnQgbmdWaWV3IHNjb3BlCisgKiBAZGVzY3JpcHRp
b24KKyAqIEVtaXR0ZWQgZXZlcnkgdGltZSB0aGUgbmdWaWV3IGNvbnRlbnQgaXMgcmVsb2FkZWQu
CisgKi8KK25nVmlld0ZhY3RvcnkuJGluamVjdCA9IFsnJHJvdXRlJywgJyRhbmNob3JTY3JvbGwn
LCAnJGFuaW1hdGUnXTsKK2Z1bmN0aW9uIG5nVmlld0ZhY3RvcnkoJHJvdXRlLCAkYW5jaG9yU2Ny
b2xsLCAkYW5pbWF0ZSkgeworICByZXR1cm4geworICAgIHJlc3RyaWN0OiAnRUNBJywKKyAgICB0
ZXJtaW5hbDogdHJ1ZSwKKyAgICBwcmlvcml0eTogNDAwLAorICAgIHRyYW5zY2x1ZGU6ICdlbGVt
ZW50JywKKyAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgJGVsZW1lbnQsIGF0dHIsIGN0cmwsICR0
cmFuc2NsdWRlKSB7CisgICAgICAgIHZhciBjdXJyZW50U2NvcGUsCisgICAgICAgICAgICBjdXJy
ZW50RWxlbWVudCwKKyAgICAgICAgICAgIHByZXZpb3VzTGVhdmVBbmltYXRpb24sCisgICAgICAg
ICAgICBhdXRvU2Nyb2xsRXhwID0gYXR0ci5hdXRvc2Nyb2xsLAorICAgICAgICAgICAgb25sb2Fk
RXhwID0gYXR0ci5vbmxvYWQgfHwgJyc7CisKKyAgICAgICAgc2NvcGUuJG9uKCckcm91dGVDaGFu
Z2VTdWNjZXNzJywgdXBkYXRlKTsKKyAgICAgICAgdXBkYXRlKCk7CisKKyAgICAgICAgZnVuY3Rp
b24gY2xlYW51cExhc3RWaWV3KCkgeworICAgICAgICAgIGlmIChwcmV2aW91c0xlYXZlQW5pbWF0
aW9uKSB7CisgICAgICAgICAgICAkYW5pbWF0ZS5jYW5jZWwocHJldmlvdXNMZWF2ZUFuaW1hdGlv
bik7CisgICAgICAgICAgICBwcmV2aW91c0xlYXZlQW5pbWF0aW9uID0gbnVsbDsKKyAgICAgICAg
ICB9CisKKyAgICAgICAgICBpZiAoY3VycmVudFNjb3BlKSB7CisgICAgICAgICAgICBjdXJyZW50
U2NvcGUuJGRlc3Ryb3koKTsKKyAgICAgICAgICAgIGN1cnJlbnRTY29wZSA9IG51bGw7CisgICAg
ICAgICAgfQorICAgICAgICAgIGlmIChjdXJyZW50RWxlbWVudCkgeworICAgICAgICAgICAgcHJl
dmlvdXNMZWF2ZUFuaW1hdGlvbiA9ICRhbmltYXRlLmxlYXZlKGN1cnJlbnRFbGVtZW50KTsKKyAg
ICAgICAgICAgIHByZXZpb3VzTGVhdmVBbmltYXRpb24udGhlbihmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgICAgcHJldmlvdXNMZWF2ZUFuaW1hdGlvbiA9IG51bGw7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50ID0gbnVsbDsKKyAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiB1cGRhdGUoKSB7CisgICAgICAgICAgdmFyIGxvY2FscyA9
ICRyb3V0ZS5jdXJyZW50ICYmICRyb3V0ZS5jdXJyZW50LmxvY2FscywKKyAgICAgICAgICAgICAg
dGVtcGxhdGUgPSBsb2NhbHMgJiYgbG9jYWxzLiR0ZW1wbGF0ZTsKKworICAgICAgICAgIGlmIChh
bmd1bGFyLmlzRGVmaW5lZCh0ZW1wbGF0ZSkpIHsKKyAgICAgICAgICAgIHZhciBuZXdTY29wZSA9
IHNjb3BlLiRuZXcoKTsKKyAgICAgICAgICAgIHZhciBjdXJyZW50ID0gJHJvdXRlLmN1cnJlbnQ7
CisKKyAgICAgICAgICAgIC8vIE5vdGU6IFRoaXMgd2lsbCBhbHNvIGxpbmsgYWxsIGNoaWxkcmVu
IG9mIG5nLXZpZXcgdGhhdCB3ZXJlIGNvbnRhaW5lZCBpbiB0aGUgb3JpZ2luYWwKKyAgICAgICAg
ICAgIC8vIGh0bWwuIElmIHRoYXQgY29udGVudCBjb250YWlucyBjb250cm9sbGVycywgLi4uIHRo
ZXkgY291bGQgcG9sbHV0ZS9jaGFuZ2UgdGhlIHNjb3BlLgorICAgICAgICAgICAgLy8gSG93ZXZl
ciwgdXNpbmcgbmctdmlldyBvbiBhbiBlbGVtZW50IHdpdGggYWRkaXRpb25hbCBjb250ZW50IGRv
ZXMgbm90IG1ha2Ugc2Vuc2UuLi4KKyAgICAgICAgICAgIC8vIE5vdGU6IFdlIGNhbid0IHJlbW92
ZSB0aGVtIGluIHRoZSBjbG9uZUF0dGNoRm4gb2YgJHRyYW5zY2x1ZGUgYXMgdGhhdAorICAgICAg
ICAgICAgLy8gZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSBsaW5raW5nIHRoZSBjb250ZW50LCB3
aGljaCB3b3VsZCBhcHBseSBjaGlsZAorICAgICAgICAgICAgLy8gZGlyZWN0aXZlcyB0byBub24g
ZXhpc3RpbmcgZWxlbWVudHMuCisgICAgICAgICAgICB2YXIgY2xvbmUgPSAkdHJhbnNjbHVkZShu
ZXdTY29wZSwgZnVuY3Rpb24oY2xvbmUpIHsKKyAgICAgICAgICAgICAgJGFuaW1hdGUuZW50ZXIo
Y2xvbmUsIG51bGwsIGN1cnJlbnRFbGVtZW50IHx8ICRlbGVtZW50KS50aGVuKGZ1bmN0aW9uIG9u
TmdWaWV3RW50ZXIoKSB7CisgICAgICAgICAgICAgICAgaWYgKGFuZ3VsYXIuaXNEZWZpbmVkKGF1
dG9TY3JvbGxFeHApCisgICAgICAgICAgICAgICAgICAmJiAoIWF1dG9TY3JvbGxFeHAgfHwgc2Nv
cGUuJGV2YWwoYXV0b1Njcm9sbEV4cCkpKSB7CisgICAgICAgICAgICAgICAgICAkYW5jaG9yU2Ny
b2xsKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
ICAgY2xlYW51cExhc3RWaWV3KCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgY3Vy
cmVudEVsZW1lbnQgPSBjbG9uZTsKKyAgICAgICAgICAgIGN1cnJlbnRTY29wZSA9IGN1cnJlbnQu
c2NvcGUgPSBuZXdTY29wZTsKKyAgICAgICAgICAgIGN1cnJlbnRTY29wZS4kZW1pdCgnJHZpZXdD
b250ZW50TG9hZGVkJyk7CisgICAgICAgICAgICBjdXJyZW50U2NvcGUuJGV2YWwob25sb2FkRXhw
KTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2xlYW51cExhc3RWaWV3KCk7Cisg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICB9OworfQorCisvLyBUaGlzIGRpcmVjdGl2
ZSBpcyBjYWxsZWQgZHVyaW5nIHRoZSAkdHJhbnNjbHVkZSBjYWxsIG9mIHRoZSBmaXJzdCBgbmdW
aWV3YCBkaXJlY3RpdmUuCisvLyBJdCB3aWxsIHJlcGxhY2UgYW5kIGNvbXBpbGUgdGhlIGNvbnRl
bnQgb2YgdGhlIGVsZW1lbnQgd2l0aCB0aGUgbG9hZGVkIHRlbXBsYXRlLgorLy8gV2UgbmVlZCB0
aGlzIGRpcmVjdGl2ZSBzbyB0aGF0IHRoZSBlbGVtZW50IGNvbnRlbnQgaXMgYWxyZWFkeSBmaWxs
ZWQgd2hlbgorLy8gdGhlIGxpbmsgZnVuY3Rpb24gb2YgYW5vdGhlciBkaXJlY3RpdmUgb24gdGhl
IHNhbWUgZWxlbWVudCBhcyBuZ1ZpZXcKKy8vIGlzIGNhbGxlZC4KK25nVmlld0ZpbGxDb250ZW50
RmFjdG9yeS4kaW5qZWN0ID0gWyckY29tcGlsZScsICckY29udHJvbGxlcicsICckcm91dGUnXTsK
K2Z1bmN0aW9uIG5nVmlld0ZpbGxDb250ZW50RmFjdG9yeSgkY29tcGlsZSwgJGNvbnRyb2xsZXIs
ICRyb3V0ZSkgeworICByZXR1cm4geworICAgIHJlc3RyaWN0OiAnRUNBJywKKyAgICBwcmlvcml0
eTogLTQwMCwKKyAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgJGVsZW1lbnQpIHsKKyAgICAgIHZh
ciBjdXJyZW50ID0gJHJvdXRlLmN1cnJlbnQsCisgICAgICAgICAgbG9jYWxzID0gY3VycmVudC5s
b2NhbHM7CisKKyAgICAgICRlbGVtZW50Lmh0bWwobG9jYWxzLiR0ZW1wbGF0ZSk7CisKKyAgICAg
IHZhciBsaW5rID0gJGNvbXBpbGUoJGVsZW1lbnQuY29udGVudHMoKSk7CisKKyAgICAgIGlmIChj
dXJyZW50LmNvbnRyb2xsZXIpIHsKKyAgICAgICAgbG9jYWxzLiRzY29wZSA9IHNjb3BlOworICAg
ICAgICB2YXIgY29udHJvbGxlciA9ICRjb250cm9sbGVyKGN1cnJlbnQuY29udHJvbGxlciwgbG9j
YWxzKTsKKyAgICAgICAgaWYgKGN1cnJlbnQuY29udHJvbGxlckFzKSB7CisgICAgICAgICAgc2Nv
cGVbY3VycmVudC5jb250cm9sbGVyQXNdID0gY29udHJvbGxlcjsKKyAgICAgICAgfQorICAgICAg
ICAkZWxlbWVudC5kYXRhKCckbmdDb250cm9sbGVyQ29udHJvbGxlcicsIGNvbnRyb2xsZXIpOwor
ICAgICAgICAkZWxlbWVudC5jaGlsZHJlbigpLmRhdGEoJyRuZ0NvbnRyb2xsZXJDb250cm9sbGVy
JywgY29udHJvbGxlcik7CisgICAgICB9CisgICAgICBzY29wZVtjdXJyZW50LnJlc29sdmVBcyB8
fCAnJHJlc29sdmUnXSA9IGxvY2FsczsKKworICAgICAgbGluayhzY29wZSk7CisgICAgfQorICB9
OworfQorCisKK30pKHdpbmRvdywgd2luZG93LmFuZ3VsYXIpOwpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvYW5ndWxhcmpzL25vZGVfbW9kdWxlcy9hbmd1bGFyL2FuZ3VsYXIuanMgYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9hbmd1bGFyanMvbm9kZV9tb2R1bGVzL2FuZ3VsYXIvYW5ndWxhci5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mNzQ0MmMwYjAzMWNjOGFmYWI1NzhlNzc5ZjlhZGRhMDk2ZDdlYjQ3Ci0tLSAvZGV2L251bGwK
KysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL25vZGVfbW9kdWxlcy9hbmd1bGFyL2FuZ3VsYXIu
anMKQEAgLTAsMCArMSwyODM2NCBAQAorLyoqCisgKiBAbGljZW5zZSBBbmd1bGFySlMgdjEuNC4z
CisgKiAoYykgMjAxMC0yMDE1IEdvb2dsZSwgSW5jLiBodHRwOi8vYW5ndWxhcmpzLm9yZworICog
TGljZW5zZTogTUlUCisgKi8KKyhmdW5jdGlvbih3aW5kb3csIGRvY3VtZW50LCB1bmRlZmluZWQp
IHsndXNlIHN0cmljdCc7CisKKy8qKgorICogQGRlc2NyaXB0aW9uCisgKgorICogVGhpcyBvYmpl
Y3QgcHJvdmlkZXMgYSB1dGlsaXR5IGZvciBwcm9kdWNpbmcgcmljaCBFcnJvciBtZXNzYWdlcyB3
aXRoaW4KKyAqIEFuZ3VsYXIuIEl0IGNhbiBiZSBjYWxsZWQgYXMgZm9sbG93czoKKyAqCisgKiB2
YXIgZXhhbXBsZU1pbkVyciA9IG1pbkVycignZXhhbXBsZScpOworICogdGhyb3cgZXhhbXBsZU1p
bkVycignb25lJywgJ1RoaXMgezB9IGlzIHsxfScsIGZvbywgYmFyKTsKKyAqCisgKiBUaGUgYWJv
dmUgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBtaW5FcnIgaW4gdGhlIGV4YW1wbGUgbmFtZXNwYWNl
LiBUaGUKKyAqIHJlc3VsdGluZyBlcnJvciB3aWxsIGhhdmUgYSBuYW1lc3BhY2VkIGVycm9yIGNv
ZGUgb2YgZXhhbXBsZS5vbmUuICBUaGUKKyAqIHJlc3VsdGluZyBlcnJvciB3aWxsIHJlcGxhY2Ug
ezB9IHdpdGggdGhlIHZhbHVlIG9mIGZvbywgYW5kIHsxfSB3aXRoIHRoZQorICogdmFsdWUgb2Yg
YmFyLiBUaGUgb2JqZWN0IGlzIG5vdCByZXN0cmljdGVkIGluIHRoZSBudW1iZXIgb2YgYXJndW1l
bnRzIGl0IGNhbgorICogdGFrZS4KKyAqCisgKiBJZiBmZXdlciBhcmd1bWVudHMgYXJlIHNwZWNp
ZmllZCB0aGFuIG5lY2Vzc2FyeSBmb3IgaW50ZXJwb2xhdGlvbiwgdGhlIGV4dHJhCisgKiBpbnRl
cnBvbGF0aW9uIG1hcmtlcnMgd2lsbCBiZSBwcmVzZXJ2ZWQgaW4gdGhlIGZpbmFsIHN0cmluZy4K
KyAqCisgKiBTaW5jZSBkYXRhIHdpbGwgYmUgcGFyc2VkIHN0YXRpY2FsbHkgZHVyaW5nIGEgYnVp
bGQgc3RlcCwgc29tZSByZXN0cmljdGlvbnMKKyAqIGFyZSBhcHBsaWVkIHdpdGggcmVzcGVjdCB0
byBob3cgbWluRXJyIGluc3RhbmNlcyBhcmUgY3JlYXRlZCBhbmQgY2FsbGVkLgorICogSW5zdGFu
Y2VzIHNob3VsZCBoYXZlIG5hbWVzIG9mIHRoZSBmb3JtIG5hbWVzcGFjZU1pbkVyciBmb3IgYSBt
aW5FcnIgY3JlYXRlZAorICogdXNpbmcgbWluRXJyKCduYW1lc3BhY2UnKSAuIEVycm9yIGNvZGVz
LCBuYW1lc3BhY2VzIGFuZCB0ZW1wbGF0ZSBzdHJpbmdzCisgKiBzaG91bGQgYWxsIGJlIHN0YXRp
YyBzdHJpbmdzLCBub3QgdmFyaWFibGVzIG9yIGdlbmVyYWwgZXhwcmVzc2lvbnMuCisgKgorICog
QHBhcmFtIHtzdHJpbmd9IG1vZHVsZSBUaGUgbmFtZXNwYWNlIHRvIHVzZSBmb3IgdGhlIG5ldyBt
aW5FcnIgaW5zdGFuY2UuCisgKiBAcGFyYW0ge2Z1bmN0aW9ufSBFcnJvckNvbnN0cnVjdG9yIEN1
c3RvbSBlcnJvciBjb25zdHJ1Y3RvciB0byBiZSBpbnN0YW50aWF0ZWQgd2hlbiByZXR1cm5pbmcK
KyAqICAgZXJyb3IgZnJvbSByZXR1cm5lZCBmdW5jdGlvbiwgZm9yIGNhc2VzIHdoZW4gYSBwYXJ0
aWN1bGFyIHR5cGUgb2YgZXJyb3IgaXMgdXNlZnVsLgorICogQHJldHVybnMge2Z1bmN0aW9uKGNv
ZGU6c3RyaW5nLCB0ZW1wbGF0ZTpzdHJpbmcsIC4uLnRlbXBsYXRlQXJncyk6IEVycm9yfSBtaW5F
cnIgaW5zdGFuY2UKKyAqLworCitmdW5jdGlvbiBtaW5FcnIobW9kdWxlLCBFcnJvckNvbnN0cnVj
dG9yKSB7CisgIEVycm9yQ29uc3RydWN0b3IgPSBFcnJvckNvbnN0cnVjdG9yIHx8IEVycm9yOwor
ICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgdmFyIFNLSVBfSU5ERVhFUyA9IDI7CisKKyAgICB2
YXIgdGVtcGxhdGVBcmdzID0gYXJndW1lbnRzLAorICAgICAgY29kZSA9IHRlbXBsYXRlQXJnc1sw
XSwKKyAgICAgIG1lc3NhZ2UgPSAnWycgKyAobW9kdWxlID8gbW9kdWxlICsgJzonIDogJycpICsg
Y29kZSArICddICcsCisgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlQXJnc1sxXSwKKyAgICAgIHBh
cmFtUHJlZml4LCBpOworCisgICAgbWVzc2FnZSArPSB0ZW1wbGF0ZS5yZXBsYWNlKC9ce1xkK1x9
L2csIGZ1bmN0aW9uKG1hdGNoKSB7CisgICAgICB2YXIgaW5kZXggPSArbWF0Y2guc2xpY2UoMSwg
LTEpLAorICAgICAgICBzaGlmdGVkSW5kZXggPSBpbmRleCArIFNLSVBfSU5ERVhFUzsKKworICAg
ICAgaWYgKHNoaWZ0ZWRJbmRleCA8IHRlbXBsYXRlQXJncy5sZW5ndGgpIHsKKyAgICAgICAgcmV0
dXJuIHRvRGVidWdTdHJpbmcodGVtcGxhdGVBcmdzW3NoaWZ0ZWRJbmRleF0pOworICAgICAgfQor
CisgICAgICByZXR1cm4gbWF0Y2g7CisgICAgfSk7CisKKyAgICBtZXNzYWdlICs9ICdcbmh0dHA6
Ly9lcnJvcnMuYW5ndWxhcmpzLm9yZy8xLjQuMy8nICsKKyAgICAgIChtb2R1bGUgPyBtb2R1bGUg
KyAnLycgOiAnJykgKyBjb2RlOworCisgICAgZm9yIChpID0gU0tJUF9JTkRFWEVTLCBwYXJhbVBy
ZWZpeCA9ICc/JzsgaSA8IHRlbXBsYXRlQXJncy5sZW5ndGg7IGkrKywgcGFyYW1QcmVmaXggPSAn
JicpIHsKKyAgICAgIG1lc3NhZ2UgKz0gcGFyYW1QcmVmaXggKyAncCcgKyAoaSAtIFNLSVBfSU5E
RVhFUykgKyAnPScgKworICAgICAgICBlbmNvZGVVUklDb21wb25lbnQodG9EZWJ1Z1N0cmluZyh0
ZW1wbGF0ZUFyZ3NbaV0pKTsKKyAgICB9CisKKyAgICByZXR1cm4gbmV3IEVycm9yQ29uc3RydWN0
b3IobWVzc2FnZSk7CisgIH07Cit9CisKKy8qIFdlIG5lZWQgdG8gdGVsbCBqc2hpbnQgd2hhdCB2
YXJpYWJsZXMgYXJlIGJlaW5nIGV4cG9ydGVkICovCisvKiBnbG9iYWwgYW5ndWxhcjogdHJ1ZSwK
KyAgbXNpZTogdHJ1ZSwKKyAganFMaXRlOiB0cnVlLAorICBqUXVlcnk6IHRydWUsCisgIHNsaWNl
OiB0cnVlLAorICBzcGxpY2U6IHRydWUsCisgIHB1c2g6IHRydWUsCisgIHRvU3RyaW5nOiB0cnVl
LAorICBuZ01pbkVycjogdHJ1ZSwKKyAgYW5ndWxhck1vZHVsZTogdHJ1ZSwKKyAgdWlkOiB0cnVl
LAorICBSRUdFWF9TVFJJTkdfUkVHRVhQOiB0cnVlLAorICBWQUxJRElUWV9TVEFURV9QUk9QRVJU
WTogdHJ1ZSwKKworICBsb3dlcmNhc2U6IHRydWUsCisgIHVwcGVyY2FzZTogdHJ1ZSwKKyAgbWFu
dWFsTG93ZXJjYXNlOiB0cnVlLAorICBtYW51YWxVcHBlcmNhc2U6IHRydWUsCisgIG5vZGVOYW1l
XzogdHJ1ZSwKKyAgaXNBcnJheUxpa2U6IHRydWUsCisgIGZvckVhY2g6IHRydWUsCisgIGZvckVh
Y2hTb3J0ZWQ6IHRydWUsCisgIHJldmVyc2VQYXJhbXM6IHRydWUsCisgIG5leHRVaWQ6IHRydWUs
CisgIHNldEhhc2hLZXk6IHRydWUsCisgIGV4dGVuZDogdHJ1ZSwKKyAgdG9JbnQ6IHRydWUsCisg
IGluaGVyaXQ6IHRydWUsCisgIG1lcmdlOiB0cnVlLAorICBub29wOiB0cnVlLAorICBpZGVudGl0
eTogdHJ1ZSwKKyAgdmFsdWVGbjogdHJ1ZSwKKyAgaXNVbmRlZmluZWQ6IHRydWUsCisgIGlzRGVm
aW5lZDogdHJ1ZSwKKyAgaXNPYmplY3Q6IHRydWUsCisgIGlzQmxhbmtPYmplY3Q6IHRydWUsCisg
IGlzU3RyaW5nOiB0cnVlLAorICBpc051bWJlcjogdHJ1ZSwKKyAgaXNEYXRlOiB0cnVlLAorICBp
c0FycmF5OiB0cnVlLAorICBpc0Z1bmN0aW9uOiB0cnVlLAorICBpc1JlZ0V4cDogdHJ1ZSwKKyAg
aXNXaW5kb3c6IHRydWUsCisgIGlzU2NvcGU6IHRydWUsCisgIGlzRmlsZTogdHJ1ZSwKKyAgaXNG
b3JtRGF0YTogdHJ1ZSwKKyAgaXNCbG9iOiB0cnVlLAorICBpc0Jvb2xlYW46IHRydWUsCisgIGlz
UHJvbWlzZUxpa2U6IHRydWUsCisgIHRyaW06IHRydWUsCisgIGVzY2FwZUZvclJlZ2V4cDogdHJ1
ZSwKKyAgaXNFbGVtZW50OiB0cnVlLAorICBtYWtlTWFwOiB0cnVlLAorICBpbmNsdWRlczogdHJ1
ZSwKKyAgYXJyYXlSZW1vdmU6IHRydWUsCisgIGNvcHk6IHRydWUsCisgIHNoYWxsb3dDb3B5OiB0
cnVlLAorICBlcXVhbHM6IHRydWUsCisgIGNzcDogdHJ1ZSwKKyAganE6IHRydWUsCisgIGNvbmNh
dDogdHJ1ZSwKKyAgc2xpY2VBcmdzOiB0cnVlLAorICBiaW5kOiB0cnVlLAorICB0b0pzb25SZXBs
YWNlcjogdHJ1ZSwKKyAgdG9Kc29uOiB0cnVlLAorICBmcm9tSnNvbjogdHJ1ZSwKKyAgY29udmVy
dFRpbWV6b25lVG9Mb2NhbDogdHJ1ZSwKKyAgdGltZXpvbmVUb09mZnNldDogdHJ1ZSwKKyAgc3Rh
cnRpbmdUYWc6IHRydWUsCisgIHRyeURlY29kZVVSSUNvbXBvbmVudDogdHJ1ZSwKKyAgcGFyc2VL
ZXlWYWx1ZTogdHJ1ZSwKKyAgdG9LZXlWYWx1ZTogdHJ1ZSwKKyAgZW5jb2RlVXJpU2VnbWVudDog
dHJ1ZSwKKyAgZW5jb2RlVXJpUXVlcnk6IHRydWUsCisgIGFuZ3VsYXJJbml0OiB0cnVlLAorICBi
b290c3RyYXA6IHRydWUsCisgIGdldFRlc3RhYmlsaXR5OiB0cnVlLAorICBzbmFrZV9jYXNlOiB0
cnVlLAorICBiaW5kSlF1ZXJ5OiB0cnVlLAorICBhc3NlcnRBcmc6IHRydWUsCisgIGFzc2VydEFy
Z0ZuOiB0cnVlLAorICBhc3NlcnROb3RIYXNPd25Qcm9wZXJ0eTogdHJ1ZSwKKyAgZ2V0dGVyOiB0
cnVlLAorICBnZXRCbG9ja05vZGVzOiB0cnVlLAorICBoYXNPd25Qcm9wZXJ0eTogdHJ1ZSwKKyAg
Y3JlYXRlTWFwOiB0cnVlLAorCisgIE5PREVfVFlQRV9FTEVNRU5UOiB0cnVlLAorICBOT0RFX1RZ
UEVfQVRUUklCVVRFOiB0cnVlLAorICBOT0RFX1RZUEVfVEVYVDogdHJ1ZSwKKyAgTk9ERV9UWVBF
X0NPTU1FTlQ6IHRydWUsCisgIE5PREVfVFlQRV9ET0NVTUVOVDogdHJ1ZSwKKyAgTk9ERV9UWVBF
X0RPQ1VNRU5UX0ZSQUdNRU5UOiB0cnVlLAorKi8KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCisKKy8qKgorICogQG5nZG9jIG1vZHVsZQorICogQG5hbWUgbmcKKyAqIEBt
b2R1bGUgbmcKKyAqIEBkZXNjcmlwdGlvbgorICoKKyAqICMgbmcgKGNvcmUgbW9kdWxlKQorICog
VGhlIG5nIG1vZHVsZSBpcyBsb2FkZWQgYnkgZGVmYXVsdCB3aGVuIGFuIEFuZ3VsYXJKUyBhcHBs
aWNhdGlvbiBpcyBzdGFydGVkLiBUaGUgbW9kdWxlIGl0c2VsZgorICogY29udGFpbnMgdGhlIGVz
c2VudGlhbCBjb21wb25lbnRzIGZvciBhbiBBbmd1bGFySlMgYXBwbGljYXRpb24gdG8gZnVuY3Rp
b24uIFRoZSB0YWJsZSBiZWxvdworICogbGlzdHMgYSBoaWdoIGxldmVsIGJyZWFrZG93biBvZiBl
YWNoIG9mIHRoZSBzZXJ2aWNlcy9mYWN0b3JpZXMsIGZpbHRlcnMsIGRpcmVjdGl2ZXMgYW5kIHRl
c3RpbmcKKyAqIGNvbXBvbmVudHMgYXZhaWxhYmxlIHdpdGhpbiB0aGlzIGNvcmUgbW9kdWxlLgor
ICoKKyAqIDxkaXYgZG9jLW1vZHVsZS1jb21wb25lbnRzPSJuZyI+PC9kaXY+CisgKi8KKwordmFy
IFJFR0VYX1NUUklOR19SRUdFWFAgPSAvXlwvKC4rKVwvKFthLXpdKikkLzsKKworLy8gVGhlIG5h
bWUgb2YgYSBmb3JtIGNvbnRyb2wncyBWYWxpZGl0eVN0YXRlIHByb3BlcnR5LgorLy8gVGhpcyBp
cyB1c2VkIHNvIHRoYXQgaXQncyBwb3NzaWJsZSBmb3IgaW50ZXJuYWwgdGVzdHMgdG8gY3JlYXRl
IG1vY2sgVmFsaWRpdHlTdGF0ZXMuCit2YXIgVkFMSURJVFlfU1RBVEVfUFJPUEVSVFkgPSAndmFs
aWRpdHknOworCisvKioKKyAqIEBuZ2RvYyBmdW5jdGlvbgorICogQG5hbWUgYW5ndWxhci5sb3dl
cmNhc2UKKyAqIEBtb2R1bGUgbmcKKyAqIEBraW5kIGZ1bmN0aW9uCisgKgorICogQGRlc2NyaXB0
aW9uIENvbnZlcnRzIHRoZSBzcGVjaWZpZWQgc3RyaW5nIHRvIGxvd2VyY2FzZS4KKyAqIEBwYXJh
bSB7c3RyaW5nfSBzdHJpbmcgU3RyaW5nIHRvIGJlIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UuCisg
KiBAcmV0dXJucyB7c3RyaW5nfSBMb3dlcmNhc2VkIHN0cmluZy4KKyAqLwordmFyIGxvd2VyY2Fz
ZSA9IGZ1bmN0aW9uKHN0cmluZykge3JldHVybiBpc1N0cmluZyhzdHJpbmcpID8gc3RyaW5nLnRv
TG93ZXJDYXNlKCkgOiBzdHJpbmc7fTsKK3ZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90
b3R5cGUuaGFzT3duUHJvcGVydHk7CisKKy8qKgorICogQG5nZG9jIGZ1bmN0aW9uCisgKiBAbmFt
ZSBhbmd1bGFyLnVwcGVyY2FzZQorICogQG1vZHVsZSBuZworICogQGtpbmQgZnVuY3Rpb24KKyAq
CisgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIHNwZWNpZmllZCBzdHJpbmcgdG8gdXBwZXJj
YXNlLgorICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBTdHJpbmcgdG8gYmUgY29udmVydGVkIHRv
IHVwcGVyY2FzZS4KKyAqIEByZXR1cm5zIHtzdHJpbmd9IFVwcGVyY2FzZWQgc3RyaW5nLgorICov
Cit2YXIgdXBwZXJjYXNlID0gZnVuY3Rpb24oc3RyaW5nKSB7cmV0dXJuIGlzU3RyaW5nKHN0cmlu
ZykgPyBzdHJpbmcudG9VcHBlckNhc2UoKSA6IHN0cmluZzt9OworCisKK3ZhciBtYW51YWxMb3dl
cmNhc2UgPSBmdW5jdGlvbihzKSB7CisgIC8qIGpzaGludCBiaXR3aXNlOiBmYWxzZSAqLworICBy
ZXR1cm4gaXNTdHJpbmcocykKKyAgICAgID8gcy5yZXBsYWNlKC9bQS1aXS9nLCBmdW5jdGlvbihj
aCkge3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoLmNoYXJDb2RlQXQoMCkgfCAzMik7fSkK
KyAgICAgIDogczsKK307Cit2YXIgbWFudWFsVXBwZXJjYXNlID0gZnVuY3Rpb24ocykgeworICAv
KiBqc2hpbnQgYml0d2lzZTogZmFsc2UgKi8KKyAgcmV0dXJuIGlzU3RyaW5nKHMpCisgICAgICA/
IHMucmVwbGFjZSgvW2Etel0vZywgZnVuY3Rpb24oY2gpIHtyZXR1cm4gU3RyaW5nLmZyb21DaGFy
Q29kZShjaC5jaGFyQ29kZUF0KDApICYgfjMyKTt9KQorICAgICAgOiBzOworfTsKKworCisvLyBT
dHJpbmcjdG9Mb3dlckNhc2UgYW5kIFN0cmluZyN0b1VwcGVyQ2FzZSBkb24ndCBwcm9kdWNlIGNv
cnJlY3QgcmVzdWx0cyBpbiBicm93c2VycyB3aXRoIFR1cmtpc2gKKy8vIGxvY2FsZSwgZm9yIHRo
aXMgcmVhc29uIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMgY2FzZSBhbmQgcmVkZWZpbmUgbG93ZXJj
YXNlL3VwcGVyY2FzZSBtZXRob2RzCisvLyB3aXRoIGNvcnJlY3QgYnV0IHNsb3dlciBhbHRlcm5h
dGl2ZXMuCitpZiAoJ2knICE9PSAnSScudG9Mb3dlckNhc2UoKSkgeworICBsb3dlcmNhc2UgPSBt
YW51YWxMb3dlcmNhc2U7CisgIHVwcGVyY2FzZSA9IG1hbnVhbFVwcGVyY2FzZTsKK30KKworCit2
YXIKKyAgICBtc2llLCAgICAgICAgICAgICAvLyBob2xkcyBtYWpvciB2ZXJzaW9uIG51bWJlciBm
b3IgSUUsIG9yIE5hTiBpZiBVQSBpcyBub3QgSUUuCisgICAganFMaXRlLCAgICAgICAgICAgLy8g
ZGVsYXkgYmluZGluZyBzaW5jZSBqUXVlcnkgY291bGQgYmUgbG9hZGVkIGFmdGVyIHVzLgorICAg
IGpRdWVyeSwgICAgICAgICAgIC8vIGRlbGF5IGJpbmRpbmcKKyAgICBzbGljZSAgICAgICAgICAg
ICA9IFtdLnNsaWNlLAorICAgIHNwbGljZSAgICAgICAgICAgID0gW10uc3BsaWNlLAorICAgIHB1
c2ggICAgICAgICAgICAgID0gW10ucHVzaCwKKyAgICB0b1N0cmluZyAgICAgICAgICA9IE9iamVj
dC5wcm90b3R5cGUudG9TdHJpbmcsCisgICAgZ2V0UHJvdG90eXBlT2YgICAgPSBPYmplY3QuZ2V0
UHJvdG90eXBlT2YsCisgICAgbmdNaW5FcnIgICAgICAgICAgPSBtaW5FcnIoJ25nJyksCisKKyAg
ICAvKiogQG5hbWUgYW5ndWxhciAqLworICAgIGFuZ3VsYXIgICAgICAgICAgID0gd2luZG93LmFu
Z3VsYXIgfHwgKHdpbmRvdy5hbmd1bGFyID0ge30pLAorICAgIGFuZ3VsYXJNb2R1bGUsCisgICAg
dWlkICAgICAgICAgICAgICAgPSAwOworCisvKioKKyAqIGRvY3VtZW50TW9kZSBpcyBhbiBJRS1v
bmx5IHByb3BlcnR5CisgKiBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkv
aWUvY2MxOTY5ODgodj12cy44NSkuYXNweAorICovCittc2llID0gZG9jdW1lbnQuZG9jdW1lbnRN
b2RlOworCisKKy8qKgorICogQHByaXZhdGUKKyAqIEBwYXJhbSB7Kn0gb2JqCisgKiBAcmV0dXJu
IHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgYG9iamAgaXMgYW4gYXJyYXkgb3IgYXJyYXktbGlr
ZSBvYmplY3QgKE5vZGVMaXN0LCBBcmd1bWVudHMsCisgKiAgICAgICAgICAgICAgICAgICBTdHJp
bmcgLi4uKQorICovCitmdW5jdGlvbiBpc0FycmF5TGlrZShvYmopIHsKKyAgaWYgKG9iaiA9PSBu
dWxsIHx8IGlzV2luZG93KG9iaikpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICAvLyBT
dXBwb3J0OiBpT1MgOC4yIChub3QgcmVwcm9kdWNpYmxlIGluIHNpbXVsYXRvcikKKyAgLy8gImxl
bmd0aCIgaW4gb2JqIHVzZWQgdG8gcHJldmVudCBKSVQgZXJyb3IgKGdoLTExNTA4KQorICB2YXIg
bGVuZ3RoID0gImxlbmd0aCIgaW4gT2JqZWN0KG9iaikgJiYgb2JqLmxlbmd0aDsKKworICBpZiAo
b2JqLm5vZGVUeXBlID09PSBOT0RFX1RZUEVfRUxFTUVOVCAmJiBsZW5ndGgpIHsKKyAgICByZXR1
cm4gdHJ1ZTsKKyAgfQorCisgIHJldHVybiBpc1N0cmluZyhvYmopIHx8IGlzQXJyYXkob2JqKSB8
fCBsZW5ndGggPT09IDAgfHwKKyAgICAgICAgIHR5cGVvZiBsZW5ndGggPT09ICdudW1iZXInICYm
IGxlbmd0aCA+IDAgJiYgKGxlbmd0aCAtIDEpIGluIG9iajsKK30KKworLyoqCisgKiBAbmdkb2Mg
ZnVuY3Rpb24KKyAqIEBuYW1lIGFuZ3VsYXIuZm9yRWFjaAorICogQG1vZHVsZSBuZworICogQGtp
bmQgZnVuY3Rpb24KKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIEludm9rZXMgdGhlIGBpdGVyYXRv
cmAgZnVuY3Rpb24gb25jZSBmb3IgZWFjaCBpdGVtIGluIGBvYmpgIGNvbGxlY3Rpb24sIHdoaWNo
IGNhbiBiZSBlaXRoZXIgYW4KKyAqIG9iamVjdCBvciBhbiBhcnJheS4gVGhlIGBpdGVyYXRvcmAg
ZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIGBpdGVyYXRvcih2YWx1ZSwga2V5LCBvYmopYCwgd2hl
cmUgYHZhbHVlYAorICogaXMgdGhlIHZhbHVlIG9mIGFuIG9iamVjdCBwcm9wZXJ0eSBvciBhbiBh
cnJheSBlbGVtZW50LCBga2V5YCBpcyB0aGUgb2JqZWN0IHByb3BlcnR5IGtleSBvcgorICogYXJy
YXkgZWxlbWVudCBpbmRleCBhbmQgb2JqIGlzIHRoZSBgb2JqYCBpdHNlbGYuIFNwZWNpZnlpbmcg
YSBgY29udGV4dGAgZm9yIHRoZSBmdW5jdGlvbiBpcyBvcHRpb25hbC4KKyAqCisgKiBJdCBpcyB3
b3J0aCBub3RpbmcgdGhhdCBgLmZvckVhY2hgIGRvZXMgbm90IGl0ZXJhdGUgb3ZlciBpbmhlcml0
ZWQgcHJvcGVydGllcyBiZWNhdXNlIGl0IGZpbHRlcnMKKyAqIHVzaW5nIHRoZSBgaGFzT3duUHJv
cGVydHlgIG1ldGhvZC4KKyAqCisgKiBVbmxpa2UgRVMyNjIncworICogW0FycmF5LnByb3RvdHlw
ZS5mb3JFYWNoXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4x
LyNzZWMtMTUuNC40LjE4KSwKKyAqIFByb3ZpZGluZyAndW5kZWZpbmVkJyBvciAnbnVsbCcgdmFs
dWVzIGZvciBgb2JqYCB3aWxsIG5vdCB0aHJvdyBhIFR5cGVFcnJvciwgYnV0IHJhdGhlciBqdXN0
CisgKiByZXR1cm4gdGhlIHZhbHVlIHByb3ZpZGVkLgorICoKKyAgIGBgYGpzCisgICAgIHZhciB2
YWx1ZXMgPSB7bmFtZTogJ21pc2tvJywgZ2VuZGVyOiAnbWFsZSd9OworICAgICB2YXIgbG9nID0g
W107CisgICAgIGFuZ3VsYXIuZm9yRWFjaCh2YWx1ZXMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHsK
KyAgICAgICB0aGlzLnB1c2goa2V5ICsgJzogJyArIHZhbHVlKTsKKyAgICAgfSwgbG9nKTsKKyAg
ICAgZXhwZWN0KGxvZykudG9FcXVhbChbJ25hbWU6IG1pc2tvJywgJ2dlbmRlcjogbWFsZSddKTsK
KyAgIGBgYAorICoKKyAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogT2JqZWN0IHRvIGl0ZXJh
dGUgb3Zlci4KKyAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdG9yIEl0ZXJhdG9yIGZ1bmN0aW9u
LgorICogQHBhcmFtIHtPYmplY3Q9fSBjb250ZXh0IE9iamVjdCB0byBiZWNvbWUgY29udGV4dCAo
YHRoaXNgKSBmb3IgdGhlIGl0ZXJhdG9yIGZ1bmN0aW9uLgorICogQHJldHVybnMge09iamVjdHxB
cnJheX0gUmVmZXJlbmNlIHRvIGBvYmpgLgorICovCisKK2Z1bmN0aW9uIGZvckVhY2gob2JqLCBp
dGVyYXRvciwgY29udGV4dCkgeworICB2YXIga2V5LCBsZW5ndGg7CisgIGlmIChvYmopIHsKKyAg
ICBpZiAoaXNGdW5jdGlvbihvYmopKSB7CisgICAgICBmb3IgKGtleSBpbiBvYmopIHsKKyAgICAg
ICAgLy8gTmVlZCB0byBjaGVjayBpZiBoYXNPd25Qcm9wZXJ0eSBleGlzdHMsCisgICAgICAgIC8v
IGFzIG9uIElFOCB0aGUgcmVzdWx0IG9mIHF1ZXJ5U2VsZWN0b3JBbGwgaXMgYW4gb2JqZWN0IHdp
dGhvdXQgYSBoYXNPd25Qcm9wZXJ0eSBmdW5jdGlvbgorICAgICAgICBpZiAoa2V5ICE9ICdwcm90
b3R5cGUnICYmIGtleSAhPSAnbGVuZ3RoJyAmJiBrZXkgIT0gJ25hbWUnICYmICghb2JqLmhhc093
blByb3BlcnR5IHx8IG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSkgeworICAgICAgICAgIGl0ZXJh
dG9yLmNhbGwoY29udGV4dCwgb2JqW2tleV0sIGtleSwgb2JqKTsKKyAgICAgICAgfQorICAgICAg
fQorICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmopIHx8IGlzQXJyYXlMaWtlKG9iaikpIHsKKyAg
ICAgIHZhciBpc1ByaW1pdGl2ZSA9IHR5cGVvZiBvYmogIT09ICdvYmplY3QnOworICAgICAgZm9y
IChrZXkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBrZXkgPCBsZW5ndGg7IGtleSsrKSB7Cisg
ICAgICAgIGlmIChpc1ByaW1pdGl2ZSB8fCBrZXkgaW4gb2JqKSB7CisgICAgICAgICAgaXRlcmF0
b3IuY2FsbChjb250ZXh0LCBvYmpba2V5XSwga2V5LCBvYmopOworICAgICAgICB9CisgICAgICB9
CisgICAgfSBlbHNlIGlmIChvYmouZm9yRWFjaCAmJiBvYmouZm9yRWFjaCAhPT0gZm9yRWFjaCkg
eworICAgICAgICBvYmouZm9yRWFjaChpdGVyYXRvciwgY29udGV4dCwgb2JqKTsKKyAgICB9IGVs
c2UgaWYgKGlzQmxhbmtPYmplY3Qob2JqKSkgeworICAgICAgLy8gY3JlYXRlTWFwKCkgZmFzdCBw
YXRoIC0tLSBTYWZlIHRvIGF2b2lkIGhhc093blByb3BlcnR5IGNoZWNrIGJlY2F1c2UgcHJvdG90
eXBlIGNoYWluIGlzIGVtcHR5CisgICAgICBmb3IgKGtleSBpbiBvYmopIHsKKyAgICAgICAgaXRl
cmF0b3IuY2FsbChjb250ZXh0LCBvYmpba2V5XSwga2V5LCBvYmopOworICAgICAgfQorICAgIH0g
ZWxzZSBpZiAodHlwZW9mIG9iai5oYXNPd25Qcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJykgeworICAg
ICAgLy8gU2xvdyBwYXRoIGZvciBvYmplY3RzIGluaGVyaXRpbmcgT2JqZWN0LnByb3RvdHlwZSwg
aGFzT3duUHJvcGVydHkgY2hlY2sgbmVlZGVkCisgICAgICBmb3IgKGtleSBpbiBvYmopIHsKKyAg
ICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICAgICAgaXRlcmF0b3Iu
Y2FsbChjb250ZXh0LCBvYmpba2V5XSwga2V5LCBvYmopOworICAgICAgICB9CisgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgIC8vIFNsb3cgcGF0aCBmb3Igb2JqZWN0cyB3aGljaCBkbyBub3Qg
aGF2ZSBhIG1ldGhvZCBgaGFzT3duUHJvcGVydHlgCisgICAgICBmb3IgKGtleSBpbiBvYmopIHsK
KyAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7CisgICAgICAgICAg
aXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpba2V5XSwga2V5LCBvYmopOworICAgICAgICB9Cisg
ICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBvYmo7Cit9CisKK2Z1bmN0aW9uIGZvckVhY2hT
b3J0ZWQob2JqLCBpdGVyYXRvciwgY29udGV4dCkgeworICB2YXIga2V5cyA9IE9iamVjdC5rZXlz
KG9iaikuc29ydCgpOworICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsK
KyAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtrZXlzW2ldXSwga2V5c1tpXSk7CisgIH0K
KyAgcmV0dXJuIGtleXM7Cit9CisKKworLyoqCisgKiB3aGVuIHVzaW5nIGZvckVhY2ggdGhlIHBh
cmFtcyBhcmUgdmFsdWUsIGtleSwgYnV0IGl0IGlzIG9mdGVuIHVzZWZ1bCB0byBoYXZlIGtleSwg
dmFsdWUuCisgKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZywgKil9IGl0ZXJhdG9yRm4KKyAqIEBy
ZXR1cm5zIHtmdW5jdGlvbigqLCBzdHJpbmcpfQorICovCitmdW5jdGlvbiByZXZlcnNlUGFyYW1z
KGl0ZXJhdG9yRm4pIHsKKyAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHsgaXRlcmF0b3JG
bihrZXksIHZhbHVlKTsgfTsKK30KKworLyoqCisgKiBBIGNvbnNpc3RlbnQgd2F5IG9mIGNyZWF0
aW5nIHVuaXF1ZSBJRHMgaW4gYW5ndWxhci4KKyAqCisgKiBVc2luZyBzaW1wbGUgbnVtYmVycyBh
bGxvd3MgdXMgdG8gZ2VuZXJhdGUgMjguNiBtaWxsaW9uIHVuaXF1ZSBpZHMgcGVyIHNlY29uZCBm
b3IgMTAgeWVhcnMgYmVmb3JlCisgKiB3ZSBoaXQgbnVtYmVyIHByZWNpc2lvbiBpc3N1ZXMgaW4g
SmF2YVNjcmlwdC4KKyAqCisgKiBNYXRoLnBvdygyLDUzKSAvIDYwIC8gNjAgLyAyNCAvIDM2NSAv
IDEwID0gMjguNk0KKyAqCisgKiBAcmV0dXJucyB7bnVtYmVyfSBhbiB1bmlxdWUgYWxwaGEtbnVt
ZXJpYyBzdHJpbmcKKyAqLworZnVuY3Rpb24gbmV4dFVpZCgpIHsKKyAgcmV0dXJuICsrdWlkOwor
fQorCisKKy8qKgorICogU2V0IG9yIGNsZWFyIHRoZSBoYXNoa2V5IGZvciBhbiBvYmplY3QuCisg
KiBAcGFyYW0gb2JqIG9iamVjdAorICogQHBhcmFtIGggdGhlIGhhc2hrZXkgKCF0cnV0aHkgdG8g
ZGVsZXRlIHRoZSBoYXNoa2V5KQorICovCitmdW5jdGlvbiBzZXRIYXNoS2V5KG9iaiwgaCkgewor
ICBpZiAoaCkgeworICAgIG9iai4kJGhhc2hLZXkgPSBoOworICB9IGVsc2UgeworICAgIGRlbGV0
ZSBvYmouJCRoYXNoS2V5OworICB9Cit9CisKKworZnVuY3Rpb24gYmFzZUV4dGVuZChkc3QsIG9i
anMsIGRlZXApIHsKKyAgdmFyIGggPSBkc3QuJCRoYXNoS2V5OworCisgIGZvciAodmFyIGkgPSAw
LCBpaSA9IG9ianMubGVuZ3RoOyBpIDwgaWk7ICsraSkgeworICAgIHZhciBvYmogPSBvYmpzW2ld
OworICAgIGlmICghaXNPYmplY3Qob2JqKSAmJiAhaXNGdW5jdGlvbihvYmopKSBjb250aW51ZTsK
KyAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7CisgICAgZm9yICh2YXIgaiA9IDAsIGpq
ID0ga2V5cy5sZW5ndGg7IGogPCBqajsgaisrKSB7CisgICAgICB2YXIga2V5ID0ga2V5c1tqXTsK
KyAgICAgIHZhciBzcmMgPSBvYmpba2V5XTsKKworICAgICAgaWYgKGRlZXAgJiYgaXNPYmplY3Qo
c3JjKSkgeworICAgICAgICBpZiAoaXNEYXRlKHNyYykpIHsKKyAgICAgICAgICBkc3Rba2V5XSA9
IG5ldyBEYXRlKHNyYy52YWx1ZU9mKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGlm
ICghaXNPYmplY3QoZHN0W2tleV0pKSBkc3Rba2V5XSA9IGlzQXJyYXkoc3JjKSA/IFtdIDoge307
CisgICAgICAgICAgYmFzZUV4dGVuZChkc3Rba2V5XSwgW3NyY10sIHRydWUpOworICAgICAgICB9
CisgICAgICB9IGVsc2UgeworICAgICAgICBkc3Rba2V5XSA9IHNyYzsKKyAgICAgIH0KKyAgICB9
CisgIH0KKworICBzZXRIYXNoS2V5KGRzdCwgaCk7CisgIHJldHVybiBkc3Q7Cit9CisKKy8qKgor
ICogQG5nZG9jIGZ1bmN0aW9uCisgKiBAbmFtZSBhbmd1bGFyLmV4dGVuZAorICogQG1vZHVsZSBu
ZworICogQGtpbmQgZnVuY3Rpb24KKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIEV4dGVuZHMgdGhl
IGRlc3RpbmF0aW9uIG9iamVjdCBgZHN0YCBieSBjb3B5aW5nIG93biBlbnVtZXJhYmxlIHByb3Bl
cnRpZXMgZnJvbSB0aGUgYHNyY2Agb2JqZWN0KHMpCisgKiB0byBgZHN0YC4gWW91IGNhbiBzcGVj
aWZ5IG11bHRpcGxlIGBzcmNgIG9iamVjdHMuIElmIHlvdSB3YW50IHRvIHByZXNlcnZlIG9yaWdp
bmFsIG9iamVjdHMsIHlvdSBjYW4gZG8gc28KKyAqIGJ5IHBhc3NpbmcgYW4gZW1wdHkgb2JqZWN0
IGFzIHRoZSB0YXJnZXQ6IGB2YXIgb2JqZWN0ID0gYW5ndWxhci5leHRlbmQoe30sIG9iamVjdDEs
IG9iamVjdDIpYC4KKyAqCisgKiAqKk5vdGU6KiogS2VlcCBpbiBtaW5kIHRoYXQgYGFuZ3VsYXIu
ZXh0ZW5kYCBkb2VzIG5vdCBzdXBwb3J0IHJlY3Vyc2l2ZSBtZXJnZSAoZGVlcCBjb3B5KS4gVXNl
CisgKiB7QGxpbmsgYW5ndWxhci5tZXJnZX0gZm9yIHRoaXMuCisgKgorICogQHBhcmFtIHtPYmpl
Y3R9IGRzdCBEZXN0aW5hdGlvbiBvYmplY3QuCisgKiBAcGFyYW0gey4uLk9iamVjdH0gc3JjIFNv
dXJjZSBvYmplY3QocykuCisgKiBAcmV0dXJucyB7T2JqZWN0fSBSZWZlcmVuY2UgdG8gYGRzdGAu
CisgKi8KK2Z1bmN0aW9uIGV4dGVuZChkc3QpIHsKKyAgcmV0dXJuIGJhc2VFeHRlbmQoZHN0LCBz
bGljZS5jYWxsKGFyZ3VtZW50cywgMSksIGZhbHNlKTsKK30KKworCisvKioKKyogQG5nZG9jIGZ1
bmN0aW9uCisqIEBuYW1lIGFuZ3VsYXIubWVyZ2UKKyogQG1vZHVsZSBuZworKiBAa2luZCBmdW5j
dGlvbgorKgorKiBAZGVzY3JpcHRpb24KKyogRGVlcGx5IGV4dGVuZHMgdGhlIGRlc3RpbmF0aW9u
IG9iamVjdCBgZHN0YCBieSBjb3B5aW5nIG93biBlbnVtZXJhYmxlIHByb3BlcnRpZXMgZnJvbSB0
aGUgYHNyY2Agb2JqZWN0KHMpCisqIHRvIGBkc3RgLiBZb3UgY2FuIHNwZWNpZnkgbXVsdGlwbGUg
YHNyY2Agb2JqZWN0cy4gSWYgeW91IHdhbnQgdG8gcHJlc2VydmUgb3JpZ2luYWwgb2JqZWN0cywg
eW91IGNhbiBkbyBzbworKiBieSBwYXNzaW5nIGFuIGVtcHR5IG9iamVjdCBhcyB0aGUgdGFyZ2V0
OiBgdmFyIG9iamVjdCA9IGFuZ3VsYXIubWVyZ2Uoe30sIG9iamVjdDEsIG9iamVjdDIpYC4KKyoK
KyogVW5saWtlIHtAbGluayBhbmd1bGFyLmV4dGVuZCBleHRlbmQoKX0sIGBtZXJnZSgpYCByZWN1
cnNpdmVseSBkZXNjZW5kcyBpbnRvIG9iamVjdCBwcm9wZXJ0aWVzIG9mIHNvdXJjZQorKiBvYmpl
Y3RzLCBwZXJmb3JtaW5nIGEgZGVlcCBjb3B5LgorKgorKiBAcGFyYW0ge09iamVjdH0gZHN0IERl
c3RpbmF0aW9uIG9iamVjdC4KKyogQHBhcmFtIHsuLi5PYmplY3R9IHNyYyBTb3VyY2Ugb2JqZWN0
KHMpLgorKiBAcmV0dXJucyB7T2JqZWN0fSBSZWZlcmVuY2UgdG8gYGRzdGAuCisqLworZnVuY3Rp
b24gbWVyZ2UoZHN0KSB7CisgIHJldHVybiBiYXNlRXh0ZW5kKGRzdCwgc2xpY2UuY2FsbChhcmd1
bWVudHMsIDEpLCB0cnVlKTsKK30KKworCisKK2Z1bmN0aW9uIHRvSW50KHN0cikgeworICByZXR1
cm4gcGFyc2VJbnQoc3RyLCAxMCk7Cit9CisKKworZnVuY3Rpb24gaW5oZXJpdChwYXJlbnQsIGV4
dHJhKSB7CisgIHJldHVybiBleHRlbmQoT2JqZWN0LmNyZWF0ZShwYXJlbnQpLCBleHRyYSk7Cit9
CisKKy8qKgorICogQG5nZG9jIGZ1bmN0aW9uCisgKiBAbmFtZSBhbmd1bGFyLm5vb3AKKyAqIEBt
b2R1bGUgbmcKKyAqIEBraW5kIGZ1bmN0aW9uCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBBIGZ1
bmN0aW9uIHRoYXQgcGVyZm9ybXMgbm8gb3BlcmF0aW9ucy4gVGhpcyBmdW5jdGlvbiBjYW4gYmUg
dXNlZnVsIHdoZW4gd3JpdGluZyBjb2RlIGluIHRoZQorICogZnVuY3Rpb25hbCBzdHlsZS4KKyAg
IGBgYGpzCisgICAgIGZ1bmN0aW9uIGZvbyhjYWxsYmFjaykgeworICAgICAgIHZhciByZXN1bHQg
PSBjYWxjdWxhdGVSZXN1bHQoKTsKKyAgICAgICAoY2FsbGJhY2sgfHwgYW5ndWxhci5ub29wKShy
ZXN1bHQpOworICAgICB9CisgICBgYGAKKyAqLworZnVuY3Rpb24gbm9vcCgpIHt9Citub29wLiRp
bmplY3QgPSBbXTsKKworCisvKioKKyAqIEBuZ2RvYyBmdW5jdGlvbgorICogQG5hbWUgYW5ndWxh
ci5pZGVudGl0eQorICogQG1vZHVsZSBuZworICogQGtpbmQgZnVuY3Rpb24KKyAqCisgKiBAZGVz
Y3JpcHRpb24KKyAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGl0cyBmaXJzdCBhcmd1bWVudC4g
VGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgd2hlbiB3cml0aW5nIGNvZGUgaW4gdGhlCisgKiBmdW5j
dGlvbmFsIHN0eWxlLgorICoKKyAgIGBgYGpzCisgICAgIGZ1bmN0aW9uIHRyYW5zZm9ybWVyKHRy
YW5zZm9ybWF0aW9uRm4sIHZhbHVlKSB7CisgICAgICAgcmV0dXJuICh0cmFuc2Zvcm1hdGlvbkZu
IHx8IGFuZ3VsYXIuaWRlbnRpdHkpKHZhbHVlKTsKKyAgICAgfTsKKyAgIGBgYAorICAqIEBwYXJh
bSB7Kn0gdmFsdWUgdG8gYmUgcmV0dXJuZWQuCisgICogQHJldHVybnMgeyp9IHRoZSB2YWx1ZSBw
YXNzZWQgaW4uCisgKi8KK2Z1bmN0aW9uIGlkZW50aXR5KCQpIHtyZXR1cm4gJDt9CitpZGVudGl0
eS4kaW5qZWN0ID0gW107CisKKworZnVuY3Rpb24gdmFsdWVGbih2YWx1ZSkge3JldHVybiBmdW5j
dGlvbigpIHtyZXR1cm4gdmFsdWU7fTt9CisKK2Z1bmN0aW9uIGhhc0N1c3RvbVRvU3RyaW5nKG9i
aikgeworICByZXR1cm4gaXNGdW5jdGlvbihvYmoudG9TdHJpbmcpICYmIG9iai50b1N0cmluZyAh
PT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzsKK30KKworCisvKioKKyAqIEBuZ2RvYyBmdW5j
dGlvbgorICogQG5hbWUgYW5ndWxhci5pc1VuZGVmaW5lZAorICogQG1vZHVsZSBuZworICogQGtp
bmQgZnVuY3Rpb24KKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIERldGVybWluZXMgaWYgYSByZWZl
cmVuY2UgaXMgdW5kZWZpbmVkLgorICoKKyAqIEBwYXJhbSB7Kn0gdmFsdWUgUmVmZXJlbmNlIHRv
IGNoZWNrLgorICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYHZhbHVlYCBpcyB1bmRlZmlu
ZWQuCisgKi8KK2Z1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlKSB7cmV0dXJuIHR5cGVvZiB2YWx1
ZSA9PT0gJ3VuZGVmaW5lZCc7fQorCisKKy8qKgorICogQG5nZG9jIGZ1bmN0aW9uCisgKiBAbmFt
ZSBhbmd1bGFyLmlzRGVmaW5lZAorICogQG1vZHVsZSBuZworICogQGtpbmQgZnVuY3Rpb24KKyAq
CisgKiBAZGVzY3JpcHRpb24KKyAqIERldGVybWluZXMgaWYgYSByZWZlcmVuY2UgaXMgZGVmaW5l
ZC4KKyAqCisgKiBAcGFyYW0geyp9IHZhbHVlIFJlZmVyZW5jZSB0byBjaGVjay4KKyAqIEByZXR1
cm5zIHtib29sZWFufSBUcnVlIGlmIGB2YWx1ZWAgaXMgZGVmaW5lZC4KKyAqLworZnVuY3Rpb24g
aXNEZWZpbmVkKHZhbHVlKSB7cmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCc7fQor
CisKKy8qKgorICogQG5nZG9jIGZ1bmN0aW9uCisgKiBAbmFtZSBhbmd1bGFyLmlzT2JqZWN0Cisg
KiBAbW9kdWxlIG5nCisgKiBAa2luZCBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlvbgorICog
RGV0ZXJtaW5lcyBpZiBhIHJlZmVyZW5jZSBpcyBhbiBgT2JqZWN0YC4gVW5saWtlIGB0eXBlb2Zg
IGluIEphdmFTY3JpcHQsIGBudWxsYHMgYXJlIG5vdAorICogY29uc2lkZXJlZCB0byBiZSBvYmpl
Y3RzLiBOb3RlIHRoYXQgSmF2YVNjcmlwdCBhcnJheXMgYXJlIG9iamVjdHMuCisgKgorICogQHBh
cmFtIHsqfSB2YWx1ZSBSZWZlcmVuY2UgdG8gY2hlY2suCisgKiBAcmV0dXJucyB7Ym9vbGVhbn0g
VHJ1ZSBpZiBgdmFsdWVgIGlzIGFuIGBPYmplY3RgIGJ1dCBub3QgYG51bGxgLgorICovCitmdW5j
dGlvbiBpc09iamVjdCh2YWx1ZSkgeworICAvLyBodHRwOi8vanNwZXJmLmNvbS9pc29iamVjdDQK
KyAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCc7Cit9
CisKKworLyoqCisgKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBvYmplY3Qgd2l0aCBhIG51
bGwgcHJvdG90eXBlCisgKgorICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYHZhbHVlYCBp
cyBhbiBgT2JqZWN0YCB3aXRoIGEgbnVsbCBwcm90b3R5cGUKKyAqLworZnVuY3Rpb24gaXNCbGFu
a09iamVjdCh2YWx1ZSkgeworICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVl
ID09PSAnb2JqZWN0JyAmJiAhZ2V0UHJvdG90eXBlT2YodmFsdWUpOworfQorCisKKy8qKgorICog
QG5nZG9jIGZ1bmN0aW9uCisgKiBAbmFtZSBhbmd1bGFyLmlzU3RyaW5nCisgKiBAbW9kdWxlIG5n
CisgKiBAa2luZCBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlvbgorICogRGV0ZXJtaW5lcyBp
ZiBhIHJlZmVyZW5jZSBpcyBhIGBTdHJpbmdgLgorICoKKyAqIEBwYXJhbSB7Kn0gdmFsdWUgUmVm
ZXJlbmNlIHRvIGNoZWNrLgorICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYHZhbHVlYCBp
cyBhIGBTdHJpbmdgLgorICovCitmdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge3JldHVybiB0eXBl
b2YgdmFsdWUgPT09ICdzdHJpbmcnO30KKworCisvKioKKyAqIEBuZ2RvYyBmdW5jdGlvbgorICog
QG5hbWUgYW5ndWxhci5pc051bWJlcgorICogQG1vZHVsZSBuZworICogQGtpbmQgZnVuY3Rpb24K
KyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIERldGVybWluZXMgaWYgYSByZWZlcmVuY2UgaXMgYSBg
TnVtYmVyYC4KKyAqCisgKiBUaGlzIGluY2x1ZGVzIHRoZSAic3BlY2lhbCIgbnVtYmVycyBgTmFO
YCwgYCtJbmZpbml0eWAgYW5kIGAtSW5maW5pdHlgLgorICoKKyAqIElmIHlvdSB3aXNoIHRvIGV4
Y2x1ZGUgdGhlc2UgdGhlbiB5b3UgY2FuIHVzZSB0aGUgbmF0aXZlCisgKiBbYGlzRmluaXRlJ10o
aHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9S
ZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvaXNGaW5pdGUpCisgKiBtZXRob2QuCisgKgorICogQHBh
cmFtIHsqfSB2YWx1ZSBSZWZlcmVuY2UgdG8gY2hlY2suCisgKiBAcmV0dXJucyB7Ym9vbGVhbn0g
VHJ1ZSBpZiBgdmFsdWVgIGlzIGEgYE51bWJlcmAuCisgKi8KK2Z1bmN0aW9uIGlzTnVtYmVyKHZh
bHVlKSB7cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7fQorCisKKy8qKgorICogQG5n
ZG9jIGZ1bmN0aW9uCisgKiBAbmFtZSBhbmd1bGFyLmlzRGF0ZQorICogQG1vZHVsZSBuZworICog
QGtpbmQgZnVuY3Rpb24KKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIERldGVybWluZXMgaWYgYSB2
YWx1ZSBpcyBhIGRhdGUuCisgKgorICogQHBhcmFtIHsqfSB2YWx1ZSBSZWZlcmVuY2UgdG8gY2hl
Y2suCisgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBgdmFsdWVgIGlzIGEgYERhdGVgLgor
ICovCitmdW5jdGlvbiBpc0RhdGUodmFsdWUpIHsKKyAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFs
dWUpID09PSAnW29iamVjdCBEYXRlXSc7Cit9CisKKworLyoqCisgKiBAbmdkb2MgZnVuY3Rpb24K
KyAqIEBuYW1lIGFuZ3VsYXIuaXNBcnJheQorICogQG1vZHVsZSBuZworICogQGtpbmQgZnVuY3Rp
b24KKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIERldGVybWluZXMgaWYgYSByZWZlcmVuY2UgaXMg
YW4gYEFycmF5YC4KKyAqCisgKiBAcGFyYW0geyp9IHZhbHVlIFJlZmVyZW5jZSB0byBjaGVjay4K
KyAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGB2YWx1ZWAgaXMgYW4gYEFycmF5YC4KKyAq
LwordmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5OworCisvKioKKyAqIEBuZ2RvYyBmdW5jdGlv
bgorICogQG5hbWUgYW5ndWxhci5pc0Z1bmN0aW9uCisgKiBAbW9kdWxlIG5nCisgKiBAa2luZCBm
dW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlvbgorICogRGV0ZXJtaW5lcyBpZiBhIHJlZmVyZW5j
ZSBpcyBhIGBGdW5jdGlvbmAuCisgKgorICogQHBhcmFtIHsqfSB2YWx1ZSBSZWZlcmVuY2UgdG8g
Y2hlY2suCisgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBgdmFsdWVgIGlzIGEgYEZ1bmN0
aW9uYC4KKyAqLworZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge3JldHVybiB0eXBlb2YgdmFs
dWUgPT09ICdmdW5jdGlvbic7fQorCisKKy8qKgorICogRGV0ZXJtaW5lcyBpZiBhIHZhbHVlIGlz
IGEgcmVndWxhciBleHByZXNzaW9uIG9iamVjdC4KKyAqCisgKiBAcHJpdmF0ZQorICogQHBhcmFt
IHsqfSB2YWx1ZSBSZWZlcmVuY2UgdG8gY2hlY2suCisgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1
ZSBpZiBgdmFsdWVgIGlzIGEgYFJlZ0V4cGAuCisgKi8KK2Z1bmN0aW9uIGlzUmVnRXhwKHZhbHVl
KSB7CisgIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7
Cit9CisKKworLyoqCisgKiBDaGVja3MgaWYgYG9iamAgaXMgYSB3aW5kb3cgb2JqZWN0LgorICoK
KyAqIEBwcml2YXRlCisgKiBAcGFyYW0geyp9IG9iaiBPYmplY3QgdG8gY2hlY2sKKyAqIEByZXR1
cm5zIHtib29sZWFufSBUcnVlIGlmIGBvYmpgIGlzIGEgd2luZG93IG9iai4KKyAqLworZnVuY3Rp
b24gaXNXaW5kb3cob2JqKSB7CisgIHJldHVybiBvYmogJiYgb2JqLndpbmRvdyA9PT0gb2JqOwor
fQorCisKK2Z1bmN0aW9uIGlzU2NvcGUob2JqKSB7CisgIHJldHVybiBvYmogJiYgb2JqLiRldmFs
QXN5bmMgJiYgb2JqLiR3YXRjaDsKK30KKworCitmdW5jdGlvbiBpc0ZpbGUob2JqKSB7CisgIHJl
dHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEZpbGVdJzsKK30KKworCitmdW5j
dGlvbiBpc0Zvcm1EYXRhKG9iaikgeworICByZXR1cm4gdG9TdHJpbmcuY2FsbChvYmopID09PSAn
W29iamVjdCBGb3JtRGF0YV0nOworfQorCisKK2Z1bmN0aW9uIGlzQmxvYihvYmopIHsKKyAgcmV0
dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQmxvYl0nOworfQorCisKK2Z1bmN0
aW9uIGlzQm9vbGVhbih2YWx1ZSkgeworICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnYm9vbGVh
bic7Cit9CisKKworZnVuY3Rpb24gaXNQcm9taXNlTGlrZShvYmopIHsKKyAgcmV0dXJuIG9iaiAm
JiBpc0Z1bmN0aW9uKG9iai50aGVuKTsKK30KKworCit2YXIgVFlQRURfQVJSQVlfUkVHRVhQID0g
L15cW29iamVjdCAoVWludDgoQ2xhbXBlZCk/KXwoVWludDE2KXwoVWludDMyKXwoSW50OCl8KElu
dDE2KXwoSW50MzIpfChGbG9hdCgzMil8KDY0KSlBcnJheVxdJC87CitmdW5jdGlvbiBpc1R5cGVk
QXJyYXkodmFsdWUpIHsKKyAgcmV0dXJuIFRZUEVEX0FSUkFZX1JFR0VYUC50ZXN0KHRvU3RyaW5n
LmNhbGwodmFsdWUpKTsKK30KKworCit2YXIgdHJpbSA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgIHJl
dHVybiBpc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZS50cmltKCkgOiB2YWx1ZTsKK307CisKKy8vIENv
cGllZCBmcm9tOgorLy8gaHR0cDovL2RvY3MuY2xvc3VyZS1saWJyYXJ5Lmdvb2dsZWNvZGUuY29t
L2dpdC9sb2NhbF9jbG9zdXJlX2dvb2dfc3RyaW5nX3N0cmluZy5qcy5zb3VyY2UuaHRtbCNsaW5l
MTAyMQorLy8gUHJlcmVxOiBzIGlzIGEgc3RyaW5nLgordmFyIGVzY2FwZUZvclJlZ2V4cCA9IGZ1
bmN0aW9uKHMpIHsKKyAgcmV0dXJuIHMucmVwbGFjZSgvKFstKClcW1xde30rPyouJFxefCw6Izwh
XFxdKS9nLCAnXFwkMScpLgorICAgICAgICAgICByZXBsYWNlKC9ceDA4L2csICdcXHgwOCcpOwor
fTsKKworCisvKioKKyAqIEBuZ2RvYyBmdW5jdGlvbgorICogQG5hbWUgYW5ndWxhci5pc0VsZW1l
bnQKKyAqIEBtb2R1bGUgbmcKKyAqIEBraW5kIGZ1bmN0aW9uCisgKgorICogQGRlc2NyaXB0aW9u
CisgKiBEZXRlcm1pbmVzIGlmIGEgcmVmZXJlbmNlIGlzIGEgRE9NIGVsZW1lbnQgKG9yIHdyYXBw
ZWQgalF1ZXJ5IGVsZW1lbnQpLgorICoKKyAqIEBwYXJhbSB7Kn0gdmFsdWUgUmVmZXJlbmNlIHRv
IGNoZWNrLgorICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYHZhbHVlYCBpcyBhIERPTSBl
bGVtZW50IChvciB3cmFwcGVkIGpRdWVyeSBlbGVtZW50KS4KKyAqLworZnVuY3Rpb24gaXNFbGVt
ZW50KG5vZGUpIHsKKyAgcmV0dXJuICEhKG5vZGUgJiYKKyAgICAobm9kZS5ub2RlTmFtZSAgLy8g
d2UgYXJlIGEgZGlyZWN0IGVsZW1lbnQKKyAgICB8fCAobm9kZS5wcm9wICYmIG5vZGUuYXR0ciAm
JiBub2RlLmZpbmQpKSk7ICAvLyB3ZSBoYXZlIGFuIG9uIGFuZCBmaW5kIG1ldGhvZCBwYXJ0IG9m
IGpRdWVyeSBBUEkKK30KKworLyoqCisgKiBAcGFyYW0gc3RyICdrZXkxLGtleTIsLi4uJworICog
QHJldHVybnMge29iamVjdH0gaW4gdGhlIGZvcm0gb2Yge2tleTE6dHJ1ZSwga2V5Mjp0cnVlLCAu
Li59CisgKi8KK2Z1bmN0aW9uIG1ha2VNYXAoc3RyKSB7CisgIHZhciBvYmogPSB7fSwgaXRlbXMg
PSBzdHIuc3BsaXQoIiwiKSwgaTsKKyAgZm9yIChpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsr
KSB7CisgICAgb2JqW2l0ZW1zW2ldXSA9IHRydWU7CisgIH0KKyAgcmV0dXJuIG9iajsKK30KKwor
CitmdW5jdGlvbiBub2RlTmFtZV8oZWxlbWVudCkgeworICByZXR1cm4gbG93ZXJjYXNlKGVsZW1l
bnQubm9kZU5hbWUgfHwgKGVsZW1lbnRbMF0gJiYgZWxlbWVudFswXS5ub2RlTmFtZSkpOworfQor
CitmdW5jdGlvbiBpbmNsdWRlcyhhcnJheSwgb2JqKSB7CisgIHJldHVybiBBcnJheS5wcm90b3R5
cGUuaW5kZXhPZi5jYWxsKGFycmF5LCBvYmopICE9IC0xOworfQorCitmdW5jdGlvbiBhcnJheVJl
bW92ZShhcnJheSwgdmFsdWUpIHsKKyAgdmFyIGluZGV4ID0gYXJyYXkuaW5kZXhPZih2YWx1ZSk7
CisgIGlmIChpbmRleCA+PSAwKSB7CisgICAgYXJyYXkuc3BsaWNlKGluZGV4LCAxKTsKKyAgfQor
ICByZXR1cm4gaW5kZXg7Cit9CisKKy8qKgorICogQG5nZG9jIGZ1bmN0aW9uCisgKiBAbmFtZSBh
bmd1bGFyLmNvcHkKKyAqIEBtb2R1bGUgbmcKKyAqIEBraW5kIGZ1bmN0aW9uCisgKgorICogQGRl
c2NyaXB0aW9uCisgKiBDcmVhdGVzIGEgZGVlcCBjb3B5IG9mIGBzb3VyY2VgLCB3aGljaCBzaG91
bGQgYmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5LgorICoKKyAqICogSWYgbm8gZGVzdGluYXRpb24g
aXMgc3VwcGxpZWQsIGEgY29weSBvZiB0aGUgb2JqZWN0IG9yIGFycmF5IGlzIGNyZWF0ZWQuCisg
KiAqIElmIGEgZGVzdGluYXRpb24gaXMgcHJvdmlkZWQsIGFsbCBvZiBpdHMgZWxlbWVudHMgKGZv
ciBhcnJheXMpIG9yIHByb3BlcnRpZXMgKGZvciBvYmplY3RzKQorICogICBhcmUgZGVsZXRlZCBh
bmQgdGhlbiBhbGwgZWxlbWVudHMvcHJvcGVydGllcyBmcm9tIHRoZSBzb3VyY2UgYXJlIGNvcGll
ZCB0byBpdC4KKyAqICogSWYgYHNvdXJjZWAgaXMgbm90IGFuIG9iamVjdCBvciBhcnJheSAoaW5j
LiBgbnVsbGAgYW5kIGB1bmRlZmluZWRgKSwgYHNvdXJjZWAgaXMgcmV0dXJuZWQuCisgKiAqIElm
IGBzb3VyY2VgIGlzIGlkZW50aWNhbCB0byAnZGVzdGluYXRpb24nIGFuIGV4Y2VwdGlvbiB3aWxs
IGJlIHRocm93bi4KKyAqCisgKiBAcGFyYW0geyp9IHNvdXJjZSBUaGUgc291cmNlIHRoYXQgd2ls
bCBiZSB1c2VkIHRvIG1ha2UgYSBjb3B5LgorICogICAgICAgICAgICAgICAgICAgQ2FuIGJlIGFu
eSB0eXBlLCBpbmNsdWRpbmcgcHJpbWl0aXZlcywgYG51bGxgLCBhbmQgYHVuZGVmaW5lZGAuCisg
KiBAcGFyYW0geyhPYmplY3R8QXJyYXkpPX0gZGVzdGluYXRpb24gRGVzdGluYXRpb24gaW50byB3
aGljaCB0aGUgc291cmNlIGlzIGNvcGllZC4gSWYKKyAqICAgICBwcm92aWRlZCwgbXVzdCBiZSBv
ZiB0aGUgc2FtZSB0eXBlIGFzIGBzb3VyY2VgLgorICogQHJldHVybnMgeyp9IFRoZSBjb3B5IG9y
IHVwZGF0ZWQgYGRlc3RpbmF0aW9uYCwgaWYgYGRlc3RpbmF0aW9uYCB3YXMgc3BlY2lmaWVkLgor
ICoKKyAqIEBleGFtcGxlCisgPGV4YW1wbGUgbW9kdWxlPSJjb3B5RXhhbXBsZSI+CisgPGZpbGUg
bmFtZT0iaW5kZXguaHRtbCI+CisgPGRpdiBuZy1jb250cm9sbGVyPSJFeGFtcGxlQ29udHJvbGxl
ciI+CisgPGZvcm0gbm92YWxpZGF0ZSBjbGFzcz0ic2ltcGxlLWZvcm0iPgorIE5hbWU6IDxpbnB1
dCB0eXBlPSJ0ZXh0IiBuZy1tb2RlbD0idXNlci5uYW1lIiAvPjxiciAvPgorIEUtbWFpbDogPGlu
cHV0IHR5cGU9ImVtYWlsIiBuZy1tb2RlbD0idXNlci5lbWFpbCIgLz48YnIgLz4KKyBHZW5kZXI6
IDxpbnB1dCB0eXBlPSJyYWRpbyIgbmctbW9kZWw9InVzZXIuZ2VuZGVyIiB2YWx1ZT0ibWFsZSIg
Lz5tYWxlCisgPGlucHV0IHR5cGU9InJhZGlvIiBuZy1tb2RlbD0idXNlci5nZW5kZXIiIHZhbHVl
PSJmZW1hbGUiIC8+ZmVtYWxlPGJyIC8+CisgPGJ1dHRvbiBuZy1jbGljaz0icmVzZXQoKSI+UkVT
RVQ8L2J1dHRvbj4KKyA8YnV0dG9uIG5nLWNsaWNrPSJ1cGRhdGUodXNlcikiPlNBVkU8L2J1dHRv
bj4KKyA8L2Zvcm0+CisgPHByZT5mb3JtID0ge3t1c2VyIHwganNvbn19PC9wcmU+CisgPHByZT5t
YXN0ZXIgPSB7e21hc3RlciB8IGpzb259fTwvcHJlPgorIDwvZGl2PgorCisgPHNjcmlwdD4KKyAg
YW5ndWxhci5tb2R1bGUoJ2NvcHlFeGFtcGxlJywgW10pCisgICAgLmNvbnRyb2xsZXIoJ0V4YW1w
bGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHsKKyAgICAgICRzY29w
ZS5tYXN0ZXI9IHt9OworCisgICAgICAkc2NvcGUudXBkYXRlID0gZnVuY3Rpb24odXNlcikgewor
ICAgICAgICAvLyBFeGFtcGxlIHdpdGggMSBhcmd1bWVudAorICAgICAgICAkc2NvcGUubWFzdGVy
PSBhbmd1bGFyLmNvcHkodXNlcik7CisgICAgICB9OworCisgICAgICAkc2NvcGUucmVzZXQgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgLy8gRXhhbXBsZSB3aXRoIDIgYXJndW1lbnRzCisgICAgICAg
IGFuZ3VsYXIuY29weSgkc2NvcGUubWFzdGVyLCAkc2NvcGUudXNlcik7CisgICAgICB9OworCisg
ICAgICAkc2NvcGUucmVzZXQoKTsKKyAgICB9XSk7CisgPC9zY3JpcHQ+CisgPC9maWxlPgorIDwv
ZXhhbXBsZT4KKyAqLworZnVuY3Rpb24gY29weShzb3VyY2UsIGRlc3RpbmF0aW9uLCBzdGFja1Nv
dXJjZSwgc3RhY2tEZXN0KSB7CisgIGlmIChpc1dpbmRvdyhzb3VyY2UpIHx8IGlzU2NvcGUoc291
cmNlKSkgeworICAgIHRocm93IG5nTWluRXJyKCdjcHdzJywKKyAgICAgICJDYW4ndCBjb3B5ISBN
YWtpbmcgY29waWVzIG9mIFdpbmRvdyBvciBTY29wZSBpbnN0YW5jZXMgaXMgbm90IHN1cHBvcnRl
ZC4iKTsKKyAgfQorICBpZiAoaXNUeXBlZEFycmF5KGRlc3RpbmF0aW9uKSkgeworICAgIHRocm93
IG5nTWluRXJyKCdjcHRhJywKKyAgICAgICJDYW4ndCBjb3B5ISBUeXBlZEFycmF5IGRlc3RpbmF0
aW9uIGNhbm5vdCBiZSBtdXRhdGVkLiIpOworICB9CisKKyAgaWYgKCFkZXN0aW5hdGlvbikgewor
ICAgIGRlc3RpbmF0aW9uID0gc291cmNlOworICAgIGlmIChpc09iamVjdChzb3VyY2UpKSB7Cisg
ICAgICB2YXIgaW5kZXg7CisgICAgICBpZiAoc3RhY2tTb3VyY2UgJiYgKGluZGV4ID0gc3RhY2tT
b3VyY2UuaW5kZXhPZihzb3VyY2UpKSAhPT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIHN0YWNrRGVz
dFtpbmRleF07CisgICAgICB9CisKKyAgICAgIC8vIFR5cGVkQXJyYXksIERhdGUgYW5kIFJlZ0V4
cCBoYXZlIHNwZWNpZmljIGNvcHkgZnVuY3Rpb25hbGl0eSBhbmQgbXVzdCBiZQorICAgICAgLy8g
cHVzaGVkIG9udG8gdGhlIHN0YWNrIGJlZm9yZSByZXR1cm5pbmcuCisgICAgICAvLyBBcnJheSBh
bmQgb3RoZXIgb2JqZWN0cyBjcmVhdGUgdGhlIGJhc2Ugb2JqZWN0IGFuZCByZWN1cnNlIHRvIGNv
cHkgY2hpbGQKKyAgICAgIC8vIG9iamVjdHMuIFRoZSBhcnJheS9vYmplY3Qgd2lsbCBiZSBwdXNo
ZWQgb250byB0aGUgc3RhY2sgd2hlbiByZWN1cnNlZC4KKyAgICAgIGlmIChpc0FycmF5KHNvdXJj
ZSkpIHsKKyAgICAgICAgcmV0dXJuIGNvcHkoc291cmNlLCBbXSwgc3RhY2tTb3VyY2UsIHN0YWNr
RGVzdCk7CisgICAgICB9IGVsc2UgaWYgKGlzVHlwZWRBcnJheShzb3VyY2UpKSB7CisgICAgICAg
IGRlc3RpbmF0aW9uID0gbmV3IHNvdXJjZS5jb25zdHJ1Y3Rvcihzb3VyY2UpOworICAgICAgfSBl
bHNlIGlmIChpc0RhdGUoc291cmNlKSkgeworICAgICAgICBkZXN0aW5hdGlvbiA9IG5ldyBEYXRl
KHNvdXJjZS5nZXRUaW1lKCkpOworICAgICAgfSBlbHNlIGlmIChpc1JlZ0V4cChzb3VyY2UpKSB7
CisgICAgICAgIGRlc3RpbmF0aW9uID0gbmV3IFJlZ0V4cChzb3VyY2Uuc291cmNlLCBzb3VyY2Uu
dG9TdHJpbmcoKS5tYXRjaCgvW15cL10qJC8pWzBdKTsKKyAgICAgICAgZGVzdGluYXRpb24ubGFz
dEluZGV4ID0gc291cmNlLmxhc3RJbmRleDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHZhciBl
bXB0eU9iamVjdCA9IE9iamVjdC5jcmVhdGUoZ2V0UHJvdG90eXBlT2Yoc291cmNlKSk7CisgICAg
ICAgIHJldHVybiBjb3B5KHNvdXJjZSwgZW1wdHlPYmplY3QsIHN0YWNrU291cmNlLCBzdGFja0Rl
c3QpOworICAgICAgfQorCisgICAgICBpZiAoc3RhY2tEZXN0KSB7CisgICAgICAgIHN0YWNrU291
cmNlLnB1c2goc291cmNlKTsKKyAgICAgICAgc3RhY2tEZXN0LnB1c2goZGVzdGluYXRpb24pOwor
ICAgICAgfQorICAgIH0KKyAgfSBlbHNlIHsKKyAgICBpZiAoc291cmNlID09PSBkZXN0aW5hdGlv
bikgdGhyb3cgbmdNaW5FcnIoJ2NwaScsCisgICAgICAiQ2FuJ3QgY29weSEgU291cmNlIGFuZCBk
ZXN0aW5hdGlvbiBhcmUgaWRlbnRpY2FsLiIpOworCisgICAgc3RhY2tTb3VyY2UgPSBzdGFja1Nv
dXJjZSB8fCBbXTsKKyAgICBzdGFja0Rlc3QgPSBzdGFja0Rlc3QgfHwgW107CisKKyAgICBpZiAo
aXNPYmplY3Qoc291cmNlKSkgeworICAgICAgc3RhY2tTb3VyY2UucHVzaChzb3VyY2UpOworICAg
ICAgc3RhY2tEZXN0LnB1c2goZGVzdGluYXRpb24pOworICAgIH0KKworICAgIHZhciByZXN1bHQs
IGtleTsKKyAgICBpZiAoaXNBcnJheShzb3VyY2UpKSB7CisgICAgICBkZXN0aW5hdGlvbi5sZW5n
dGggPSAwOworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgZGVzdGluYXRpb24ucHVzaChjb3B5KHNvdXJjZVtpXSwgbnVsbCwgc3RhY2tTb3Vy
Y2UsIHN0YWNrRGVzdCkpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICB2YXIgaCA9IGRl
c3RpbmF0aW9uLiQkaGFzaEtleTsKKyAgICAgIGlmIChpc0FycmF5KGRlc3RpbmF0aW9uKSkgewor
ICAgICAgICBkZXN0aW5hdGlvbi5sZW5ndGggPSAwOworICAgICAgfSBlbHNlIHsKKyAgICAgICAg
Zm9yRWFjaChkZXN0aW5hdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSkgeworICAgICAgICAgIGRl
bGV0ZSBkZXN0aW5hdGlvbltrZXldOworICAgICAgICB9KTsKKyAgICAgIH0KKyAgICAgIGlmIChp
c0JsYW5rT2JqZWN0KHNvdXJjZSkpIHsKKyAgICAgICAgLy8gY3JlYXRlTWFwKCkgZmFzdCBwYXRo
IC0tLSBTYWZlIHRvIGF2b2lkIGhhc093blByb3BlcnR5IGNoZWNrIGJlY2F1c2UgcHJvdG90eXBl
IGNoYWluIGlzIGVtcHR5CisgICAgICAgIGZvciAoa2V5IGluIHNvdXJjZSkgeworICAgICAgICAg
IGRlc3RpbmF0aW9uW2tleV0gPSBjb3B5KHNvdXJjZVtrZXldLCBudWxsLCBzdGFja1NvdXJjZSwg
c3RhY2tEZXN0KTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIGlmIChzb3VyY2UgJiYgdHlwZW9m
IHNvdXJjZS5oYXNPd25Qcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICAvLyBTbG93
IHBhdGgsIHdoaWNoIG11c3QgcmVseSBvbiBoYXNPd25Qcm9wZXJ0eQorICAgICAgICBmb3IgKGtl
eSBpbiBzb3VyY2UpIHsKKyAgICAgICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KGtleSkp
IHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uW2tleV0gPSBjb3B5KHNvdXJjZVtrZXldLCBudWxs
LCBzdGFja1NvdXJjZSwgc3RhY2tEZXN0KTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIFNsb3dlc3QgcGF0aCAtLS0gaGFzT3duUHJvcGVydHkgY2Fu
J3QgYmUgY2FsbGVkIGFzIGEgbWV0aG9kCisgICAgICAgIGZvciAoa2V5IGluIHNvdXJjZSkgewor
ICAgICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeworICAgICAg
ICAgICAgZGVzdGluYXRpb25ba2V5XSA9IGNvcHkoc291cmNlW2tleV0sIG51bGwsIHN0YWNrU291
cmNlLCBzdGFja0Rlc3QpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAg
c2V0SGFzaEtleShkZXN0aW5hdGlvbixoKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIGRlc3RpbmF0
aW9uOworfQorCisvKioKKyAqIENyZWF0ZXMgYSBzaGFsbG93IGNvcHkgb2YgYW4gb2JqZWN0LCBh
biBhcnJheSBvciBhIHByaW1pdGl2ZS4KKyAqCisgKiBBc3N1bWVzIHRoYXQgdGhlcmUgYXJlIG5v
IHByb3RvIHByb3BlcnRpZXMgZm9yIG9iamVjdHMuCisgKi8KK2Z1bmN0aW9uIHNoYWxsb3dDb3B5
KHNyYywgZHN0KSB7CisgIGlmIChpc0FycmF5KHNyYykpIHsKKyAgICBkc3QgPSBkc3QgfHwgW107
CisKKyAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBzcmMubGVuZ3RoOyBpIDwgaWk7IGkrKykgewor
ICAgICAgZHN0W2ldID0gc3JjW2ldOworICAgIH0KKyAgfSBlbHNlIGlmIChpc09iamVjdChzcmMp
KSB7CisgICAgZHN0ID0gZHN0IHx8IHt9OworCisgICAgZm9yICh2YXIga2V5IGluIHNyYykgewor
ICAgICAgaWYgKCEoa2V5LmNoYXJBdCgwKSA9PT0gJyQnICYmIGtleS5jaGFyQXQoMSkgPT09ICck
JykpIHsKKyAgICAgICAgZHN0W2tleV0gPSBzcmNba2V5XTsKKyAgICAgIH0KKyAgICB9CisgIH0K
KworICByZXR1cm4gZHN0IHx8IHNyYzsKK30KKworCisvKioKKyAqIEBuZ2RvYyBmdW5jdGlvbgor
ICogQG5hbWUgYW5ndWxhci5lcXVhbHMKKyAqIEBtb2R1bGUgbmcKKyAqIEBraW5kIGZ1bmN0aW9u
CisgKgorICogQGRlc2NyaXB0aW9uCisgKiBEZXRlcm1pbmVzIGlmIHR3byBvYmplY3RzIG9yIHR3
byB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQuIFN1cHBvcnRzIHZhbHVlIHR5cGVzLCByZWd1bGFyCisg
KiBleHByZXNzaW9ucywgYXJyYXlzIGFuZCBvYmplY3RzLgorICoKKyAqIFR3byBvYmplY3RzIG9y
IHZhbHVlcyBhcmUgY29uc2lkZXJlZCBlcXVpdmFsZW50IGlmIGF0IGxlYXN0IG9uZSBvZiB0aGUg
Zm9sbG93aW5nIGlzIHRydWU6CisgKgorICogKiBCb3RoIG9iamVjdHMgb3IgdmFsdWVzIHBhc3Mg
YD09PWAgY29tcGFyaXNvbi4KKyAqICogQm90aCBvYmplY3RzIG9yIHZhbHVlcyBhcmUgb2YgdGhl
IHNhbWUgdHlwZSBhbmQgYWxsIG9mIHRoZWlyIHByb3BlcnRpZXMgYXJlIGVxdWFsIGJ5CisgKiAg
IGNvbXBhcmluZyB0aGVtIHdpdGggYGFuZ3VsYXIuZXF1YWxzYC4KKyAqICogQm90aCB2YWx1ZXMg
YXJlIE5hTi4gKEluIEphdmFTY3JpcHQsIE5hTiA9PSBOYU4gPT4gZmFsc2UuIEJ1dCB3ZSBjb25z
aWRlciB0d28gTmFOIGFzIGVxdWFsKQorICogKiBCb3RoIHZhbHVlcyByZXByZXNlbnQgdGhlIHNh
bWUgcmVndWxhciBleHByZXNzaW9uIChJbiBKYXZhU2NyaXB0LAorICogICAvYWJjLyA9PSAvYWJj
LyA9PiBmYWxzZS4gQnV0IHdlIGNvbnNpZGVyIHR3byByZWd1bGFyIGV4cHJlc3Npb25zIGFzIGVx
dWFsIHdoZW4gdGhlaXIgdGV4dHVhbAorICogICByZXByZXNlbnRhdGlvbiBtYXRjaGVzKS4KKyAq
CisgKiBEdXJpbmcgYSBwcm9wZXJ0eSBjb21wYXJpc29uLCBwcm9wZXJ0aWVzIG9mIGBmdW5jdGlv
bmAgdHlwZSBhbmQgcHJvcGVydGllcyB3aXRoIG5hbWVzCisgKiB0aGF0IGJlZ2luIHdpdGggYCRg
IGFyZSBpZ25vcmVkLgorICoKKyAqIFNjb3BlIGFuZCBET01XaW5kb3cgb2JqZWN0cyBhcmUgYmVp
bmcgY29tcGFyZWQgb25seSBieSBpZGVudGlmeSAoYD09PWApLgorICoKKyAqIEBwYXJhbSB7Kn0g
bzEgT2JqZWN0IG9yIHZhbHVlIHRvIGNvbXBhcmUuCisgKiBAcGFyYW0geyp9IG8yIE9iamVjdCBv
ciB2YWx1ZSB0byBjb21wYXJlLgorICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYXJndW1l
bnRzIGFyZSBlcXVhbC4KKyAqLworZnVuY3Rpb24gZXF1YWxzKG8xLCBvMikgeworICBpZiAobzEg
PT09IG8yKSByZXR1cm4gdHJ1ZTsKKyAgaWYgKG8xID09PSBudWxsIHx8IG8yID09PSBudWxsKSBy
ZXR1cm4gZmFsc2U7CisgIGlmIChvMSAhPT0gbzEgJiYgbzIgIT09IG8yKSByZXR1cm4gdHJ1ZTsg
Ly8gTmFOID09PSBOYU4KKyAgdmFyIHQxID0gdHlwZW9mIG8xLCB0MiA9IHR5cGVvZiBvMiwgbGVu
Z3RoLCBrZXksIGtleVNldDsKKyAgaWYgKHQxID09IHQyKSB7CisgICAgaWYgKHQxID09ICdvYmpl
Y3QnKSB7CisgICAgICBpZiAoaXNBcnJheShvMSkpIHsKKyAgICAgICAgaWYgKCFpc0FycmF5KG8y
KSkgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoKGxlbmd0aCA9IG8xLmxlbmd0aCkgPT0gbzIu
bGVuZ3RoKSB7CisgICAgICAgICAgZm9yIChrZXkgPSAwOyBrZXkgPCBsZW5ndGg7IGtleSsrKSB7
CisgICAgICAgICAgICBpZiAoIWVxdWFscyhvMVtrZXldLCBvMltrZXldKSkgcmV0dXJuIGZhbHNl
OworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
fSBlbHNlIGlmIChpc0RhdGUobzEpKSB7CisgICAgICAgIGlmICghaXNEYXRlKG8yKSkgcmV0dXJu
IGZhbHNlOworICAgICAgICByZXR1cm4gZXF1YWxzKG8xLmdldFRpbWUoKSwgbzIuZ2V0VGltZSgp
KTsKKyAgICAgIH0gZWxzZSBpZiAoaXNSZWdFeHAobzEpKSB7CisgICAgICAgIHJldHVybiBpc1Jl
Z0V4cChvMikgPyBvMS50b1N0cmluZygpID09IG8yLnRvU3RyaW5nKCkgOiBmYWxzZTsKKyAgICAg
IH0gZWxzZSB7CisgICAgICAgIGlmIChpc1Njb3BlKG8xKSB8fCBpc1Njb3BlKG8yKSB8fCBpc1dp
bmRvdyhvMSkgfHwgaXNXaW5kb3cobzIpIHx8CisgICAgICAgICAgaXNBcnJheShvMikgfHwgaXNE
YXRlKG8yKSB8fCBpc1JlZ0V4cChvMikpIHJldHVybiBmYWxzZTsKKyAgICAgICAga2V5U2V0ID0g
Y3JlYXRlTWFwKCk7CisgICAgICAgIGZvciAoa2V5IGluIG8xKSB7CisgICAgICAgICAgaWYgKGtl
eS5jaGFyQXQoMCkgPT09ICckJyB8fCBpc0Z1bmN0aW9uKG8xW2tleV0pKSBjb250aW51ZTsKKyAg
ICAgICAgICBpZiAoIWVxdWFscyhvMVtrZXldLCBvMltrZXldKSkgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgIGtleVNldFtrZXldID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGtleSBp
biBvMikgeworICAgICAgICAgIGlmICghKGtleSBpbiBrZXlTZXQpICYmCisgICAgICAgICAgICAg
IGtleS5jaGFyQXQoMCkgIT09ICckJyAmJgorICAgICAgICAgICAgICBvMltrZXldICE9PSB1bmRl
ZmluZWQgJiYKKyAgICAgICAgICAgICAgIWlzRnVuY3Rpb24obzJba2V5XSkpIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICB9CisgIH0K
KyAgcmV0dXJuIGZhbHNlOworfQorCit2YXIgY3NwID0gZnVuY3Rpb24oKSB7CisgIGlmIChpc0Rl
ZmluZWQoY3NwLmlzQWN0aXZlXykpIHJldHVybiBjc3AuaXNBY3RpdmVfOworCisgIHZhciBhY3Rp
dmUgPSAhIShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbbmctY3NwXScpIHx8CisgICAgICAgICAg
ICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1uZy1jc3BdJykpOworCisgIGlm
ICghYWN0aXZlKSB7CisgICAgdHJ5IHsKKyAgICAgIC8qIGpzaGludCAtVzAzMSwgLVcwNTQgKi8K
KyAgICAgIG5ldyBGdW5jdGlvbignJyk7CisgICAgICAvKiBqc2hpbnQgK1cwMzEsICtXMDU0ICov
CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgYWN0aXZlID0gdHJ1ZTsKKyAgICB9CisgIH0KKwor
ICByZXR1cm4gKGNzcC5pc0FjdGl2ZV8gPSBhY3RpdmUpOworfTsKKworLyoqCisgKiBAbmdkb2Mg
ZGlyZWN0aXZlCisgKiBAbW9kdWxlIG5nCisgKiBAbmFtZSBuZ0pxCisgKgorICogQGVsZW1lbnQg
QU5ZCisgKiBAcGFyYW0ge3N0cmluZz19IG5nSnEgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgYXZh
aWxhYmxlIHVuZGVyIGB3aW5kb3dgCisgKiB0byBiZSB1c2VkIGZvciBhbmd1bGFyLmVsZW1lbnQK
KyAqIEBkZXNjcmlwdGlvbgorICogVXNlIHRoaXMgZGlyZWN0aXZlIHRvIGZvcmNlIHRoZSBhbmd1
bGFyLmVsZW1lbnQgbGlicmFyeS4gIFRoaXMgc2hvdWxkIGJlCisgKiB1c2VkIHRvIGZvcmNlIGVp
dGhlciBqcUxpdGUgYnkgbGVhdmluZyBuZy1qcSBibGFuayBvciBzZXR0aW5nIHRoZSBuYW1lIG9m
CisgKiB0aGUganF1ZXJ5IHZhcmlhYmxlIHVuZGVyIHdpbmRvdyAoZWcuIGpRdWVyeSkuCisgKgor
ICogU2luY2UgYW5ndWxhciBsb29rcyBmb3IgdGhpcyBkaXJlY3RpdmUgd2hlbiBpdCBpcyBsb2Fk
ZWQgKGRvZXNuJ3Qgd2FpdCBmb3IgdGhlCisgKiBET01Db250ZW50TG9hZGVkIGV2ZW50KSwgaXQg
bXVzdCBiZSBwbGFjZWQgb24gYW4gZWxlbWVudCB0aGF0IGNvbWVzIGJlZm9yZSB0aGUgc2NyaXB0
CisgKiB3aGljaCBsb2FkcyBhbmd1bGFyLiBBbHNvLCBvbmx5IHRoZSBmaXJzdCBpbnN0YW5jZSBv
ZiBgbmctanFgIHdpbGwgYmUgdXNlZCBhbmQgYWxsCisgKiBvdGhlcnMgaWdub3JlZC4KKyAqCisg
KiBAZXhhbXBsZQorICogVGhpcyBleGFtcGxlIHNob3dzIGhvdyB0byBmb3JjZSBqcUxpdGUgdXNp
bmcgdGhlIGBuZ0pxYCBkaXJlY3RpdmUgdG8gdGhlIGBodG1sYCB0YWcuCisgYGBgaHRtbAorIDwh
ZG9jdHlwZSBodG1sPgorIDxodG1sIG5nLWFwcCBuZy1qcT4KKyAuLi4KKyAuLi4KKyA8L2h0bWw+
CisgYGBgCisgKiBAZXhhbXBsZQorICogVGhpcyBleGFtcGxlIHNob3dzIGhvdyB0byB1c2UgYSBq
UXVlcnkgYmFzZWQgbGlicmFyeSBvZiBhIGRpZmZlcmVudCBuYW1lLgorICogVGhlIGxpYnJhcnkg
bmFtZSBtdXN0IGJlIGF2YWlsYWJsZSBhdCB0aGUgdG9wIG1vc3QgJ3dpbmRvdycuCisgYGBgaHRt
bAorIDwhZG9jdHlwZSBodG1sPgorIDxodG1sIG5nLWFwcCBuZy1qcT0ialF1ZXJ5TGliIj4KKyAu
Li4KKyAuLi4KKyA8L2h0bWw+CisgYGBgCisgKi8KK3ZhciBqcSA9IGZ1bmN0aW9uKCkgeworICBp
ZiAoaXNEZWZpbmVkKGpxLm5hbWVfKSkgcmV0dXJuIGpxLm5hbWVfOworICB2YXIgZWw7CisgIHZh
ciBpLCBpaSA9IG5nQXR0clByZWZpeGVzLmxlbmd0aCwgcHJlZml4LCBuYW1lOworICBmb3IgKGkg
PSAwOyBpIDwgaWk7ICsraSkgeworICAgIHByZWZpeCA9IG5nQXR0clByZWZpeGVzW2ldOworICAg
IGlmIChlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1snICsgcHJlZml4LnJlcGxhY2UoJzon
LCAnXFw6JykgKyAnanFdJykpIHsKKyAgICAgIG5hbWUgPSBlbC5nZXRBdHRyaWJ1dGUocHJlZml4
ICsgJ2pxJyk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICByZXR1cm4gKGpxLm5hbWVf
ID0gbmFtZSk7Cit9OworCitmdW5jdGlvbiBjb25jYXQoYXJyYXkxLCBhcnJheTIsIGluZGV4KSB7
CisgIHJldHVybiBhcnJheTEuY29uY2F0KHNsaWNlLmNhbGwoYXJyYXkyLCBpbmRleCkpOworfQor
CitmdW5jdGlvbiBzbGljZUFyZ3MoYXJncywgc3RhcnRJbmRleCkgeworICByZXR1cm4gc2xpY2Uu
Y2FsbChhcmdzLCBzdGFydEluZGV4IHx8IDApOworfQorCisKKy8qIGpzaGludCAtVzEwMSAqLwor
LyoqCisgKiBAbmdkb2MgZnVuY3Rpb24KKyAqIEBuYW1lIGFuZ3VsYXIuYmluZAorICogQG1vZHVs
ZSBuZworICogQGtpbmQgZnVuY3Rpb24KKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFJldHVybnMg
YSBmdW5jdGlvbiB3aGljaCBjYWxscyBmdW5jdGlvbiBgZm5gIGJvdW5kIHRvIGBzZWxmYCAoYHNl
bGZgIGJlY29tZXMgdGhlIGB0aGlzYCBmb3IKKyAqIGBmbmApLiBZb3UgY2FuIHN1cHBseSBvcHRp
b25hbCBgYXJnc2AgdGhhdCBhcmUgcHJlYm91bmQgdG8gdGhlIGZ1bmN0aW9uLiBUaGlzIGZlYXR1
cmUgaXMgYWxzbworICoga25vd24gYXMgW3BhcnRpYWwgYXBwbGljYXRpb25dKGh0dHA6Ly9lbi53
aWtpcGVkaWEub3JnL3dpa2kvUGFydGlhbF9hcHBsaWNhdGlvbiksIGFzCisgKiBkaXN0aW5ndWlz
aGVkIGZyb20gW2Z1bmN0aW9uIGN1cnJ5aW5nXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtp
L0N1cnJ5aW5nI0NvbnRyYXN0X3dpdGhfcGFydGlhbF9mdW5jdGlvbl9hcHBsaWNhdGlvbikuCisg
KgorICogQHBhcmFtIHtPYmplY3R9IHNlbGYgQ29udGV4dCB3aGljaCBgZm5gIHNob3VsZCBiZSBl
dmFsdWF0ZWQgaW4uCisgKiBAcGFyYW0ge2Z1bmN0aW9uKCl9IGZuIEZ1bmN0aW9uIHRvIGJlIGJv
dW5kLgorICogQHBhcmFtIHsuLi4qfSBhcmdzIE9wdGlvbmFsIGFyZ3VtZW50cyB0byBiZSBwcmVi
b3VuZCB0byB0aGUgYGZuYCBmdW5jdGlvbiBjYWxsLgorICogQHJldHVybnMge2Z1bmN0aW9uKCl9
IEZ1bmN0aW9uIHRoYXQgd3JhcHMgdGhlIGBmbmAgd2l0aCBhbGwgdGhlIHNwZWNpZmllZCBiaW5k
aW5ncy4KKyAqLworLyoganNoaW50ICtXMTAxICovCitmdW5jdGlvbiBiaW5kKHNlbGYsIGZuKSB7
CisgIHZhciBjdXJyeUFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IHNsaWNlQXJncyhhcmd1
bWVudHMsIDIpIDogW107CisgIGlmIChpc0Z1bmN0aW9uKGZuKSAmJiAhKGZuIGluc3RhbmNlb2Yg
UmVnRXhwKSkgeworICAgIHJldHVybiBjdXJyeUFyZ3MubGVuZ3RoCisgICAgICA/IGZ1bmN0aW9u
KCkgeworICAgICAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoCisgICAgICAgICAgICA/IGZu
LmFwcGx5KHNlbGYsIGNvbmNhdChjdXJyeUFyZ3MsIGFyZ3VtZW50cywgMCkpCisgICAgICAgICAg
ICA6IGZuLmFwcGx5KHNlbGYsIGN1cnJ5QXJncyk7CisgICAgICAgIH0KKyAgICAgIDogZnVuY3Rp
b24oKSB7CisgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgKKyAgICAgICAgICAgID8g
Zm4uYXBwbHkoc2VsZiwgYXJndW1lbnRzKQorICAgICAgICAgICAgOiBmbi5jYWxsKHNlbGYpOwor
ICAgICAgICB9OworICB9IGVsc2UgeworICAgIC8vIGluIElFLCBuYXRpdmUgbWV0aG9kcyBhcmUg
bm90IGZ1bmN0aW9ucyBzbyB0aGV5IGNhbm5vdCBiZSBib3VuZCAobm90ZTogdGhleSBkb24ndCBu
ZWVkIHRvIGJlKQorICAgIHJldHVybiBmbjsKKyAgfQorfQorCisKK2Z1bmN0aW9uIHRvSnNvblJl
cGxhY2VyKGtleSwgdmFsdWUpIHsKKyAgdmFyIHZhbCA9IHZhbHVlOworCisgIGlmICh0eXBlb2Yg
a2V5ID09PSAnc3RyaW5nJyAmJiBrZXkuY2hhckF0KDApID09PSAnJCcgJiYga2V5LmNoYXJBdCgx
KSA9PT0gJyQnKSB7CisgICAgdmFsID0gdW5kZWZpbmVkOworICB9IGVsc2UgaWYgKGlzV2luZG93
KHZhbHVlKSkgeworICAgIHZhbCA9ICckV0lORE9XJzsKKyAgfSBlbHNlIGlmICh2YWx1ZSAmJiAg
ZG9jdW1lbnQgPT09IHZhbHVlKSB7CisgICAgdmFsID0gJyRET0NVTUVOVCc7CisgIH0gZWxzZSBp
ZiAoaXNTY29wZSh2YWx1ZSkpIHsKKyAgICB2YWwgPSAnJFNDT1BFJzsKKyAgfQorCisgIHJldHVy
biB2YWw7Cit9CisKKworLyoqCisgKiBAbmdkb2MgZnVuY3Rpb24KKyAqIEBuYW1lIGFuZ3VsYXIu
dG9Kc29uCisgKiBAbW9kdWxlIG5nCisgKiBAa2luZCBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlw
dGlvbgorICogU2VyaWFsaXplcyBpbnB1dCBpbnRvIGEgSlNPTi1mb3JtYXR0ZWQgc3RyaW5nLiBQ
cm9wZXJ0aWVzIHdpdGggbGVhZGluZyAkJCBjaGFyYWN0ZXJzIHdpbGwgYmUKKyAqIHN0cmlwcGVk
IHNpbmNlIGFuZ3VsYXIgdXNlcyB0aGlzIG5vdGF0aW9uIGludGVybmFsbHkuCisgKgorICogQHBh
cmFtIHtPYmplY3R8QXJyYXl8RGF0ZXxzdHJpbmd8bnVtYmVyfSBvYmogSW5wdXQgdG8gYmUgc2Vy
aWFsaXplZCBpbnRvIEpTT04uCisgKiBAcGFyYW0ge2Jvb2xlYW58bnVtYmVyfSBbcHJldHR5PTJd
IElmIHNldCB0byB0cnVlLCB0aGUgSlNPTiBvdXRwdXQgd2lsbCBjb250YWluIG5ld2xpbmVzIGFu
ZCB3aGl0ZXNwYWNlLgorICogICAgSWYgc2V0IHRvIGFuIGludGVnZXIsIHRoZSBKU09OIG91dHB1
dCB3aWxsIGNvbnRhaW4gdGhhdCBtYW55IHNwYWNlcyBwZXIgaW5kZW50YXRpb24uCisgKiBAcmV0
dXJucyB7c3RyaW5nfHVuZGVmaW5lZH0gSlNPTi1pZmllZCBzdHJpbmcgcmVwcmVzZW50aW5nIGBv
YmpgLgorICovCitmdW5jdGlvbiB0b0pzb24ob2JqLCBwcmV0dHkpIHsKKyAgaWYgKHR5cGVvZiBv
YmogPT09ICd1bmRlZmluZWQnKSByZXR1cm4gdW5kZWZpbmVkOworICBpZiAoIWlzTnVtYmVyKHBy
ZXR0eSkpIHsKKyAgICBwcmV0dHkgPSBwcmV0dHkgPyAyIDogbnVsbDsKKyAgfQorICByZXR1cm4g
SlNPTi5zdHJpbmdpZnkob2JqLCB0b0pzb25SZXBsYWNlciwgcHJldHR5KTsKK30KKworCisvKioK
KyAqIEBuZ2RvYyBmdW5jdGlvbgorICogQG5hbWUgYW5ndWxhci5mcm9tSnNvbgorICogQG1vZHVs
ZSBuZworICogQGtpbmQgZnVuY3Rpb24KKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIERlc2VyaWFs
aXplcyBhIEpTT04gc3RyaW5nLgorICoKKyAqIEBwYXJhbSB7c3RyaW5nfSBqc29uIEpTT04gc3Ry
aW5nIHRvIGRlc2VyaWFsaXplLgorICogQHJldHVybnMge09iamVjdHxBcnJheXxzdHJpbmd8bnVt
YmVyfSBEZXNlcmlhbGl6ZWQgSlNPTiBzdHJpbmcuCisgKi8KK2Z1bmN0aW9uIGZyb21Kc29uKGpz
b24pIHsKKyAgcmV0dXJuIGlzU3RyaW5nKGpzb24pCisgICAgICA/IEpTT04ucGFyc2UoanNvbikK
KyAgICAgIDoganNvbjsKK30KKworCitmdW5jdGlvbiB0aW1lem9uZVRvT2Zmc2V0KHRpbWV6b25l
LCBmYWxsYmFjaykgeworICB2YXIgcmVxdWVzdGVkVGltZXpvbmVPZmZzZXQgPSBEYXRlLnBhcnNl
KCdKYW4gMDEsIDE5NzAgMDA6MDA6MDAgJyArIHRpbWV6b25lKSAvIDYwMDAwOworICByZXR1cm4g
aXNOYU4ocmVxdWVzdGVkVGltZXpvbmVPZmZzZXQpID8gZmFsbGJhY2sgOiByZXF1ZXN0ZWRUaW1l
em9uZU9mZnNldDsKK30KKworCitmdW5jdGlvbiBhZGREYXRlTWludXRlcyhkYXRlLCBtaW51dGVz
KSB7CisgIGRhdGUgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSk7CisgIGRhdGUuc2V0TWludXRl
cyhkYXRlLmdldE1pbnV0ZXMoKSArIG1pbnV0ZXMpOworICByZXR1cm4gZGF0ZTsKK30KKworCitm
dW5jdGlvbiBjb252ZXJ0VGltZXpvbmVUb0xvY2FsKGRhdGUsIHRpbWV6b25lLCByZXZlcnNlKSB7
CisgIHJldmVyc2UgPSByZXZlcnNlID8gLTEgOiAxOworICB2YXIgdGltZXpvbmVPZmZzZXQgPSB0
aW1lem9uZVRvT2Zmc2V0KHRpbWV6b25lLCBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkpOworICBy
ZXR1cm4gYWRkRGF0ZU1pbnV0ZXMoZGF0ZSwgcmV2ZXJzZSAqICh0aW1lem9uZU9mZnNldCAtIGRh
dGUuZ2V0VGltZXpvbmVPZmZzZXQoKSkpOworfQorCisKKy8qKgorICogQHJldHVybnMge3N0cmlu
Z30gUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlbGVtZW50LgorICov
CitmdW5jdGlvbiBzdGFydGluZ1RhZyhlbGVtZW50KSB7CisgIGVsZW1lbnQgPSBqcUxpdGUoZWxl
bWVudCkuY2xvbmUoKTsKKyAgdHJ5IHsKKyAgICAvLyB0dXJucyBvdXQgSUUgZG9lcyBub3QgbGV0
IHlvdSBzZXQgLmh0bWwoKSBvbiBlbGVtZW50cyB3aGljaAorICAgIC8vIGFyZSBub3QgYWxsb3dl
ZCB0byBoYXZlIGNoaWxkcmVuLiBTbyB3ZSBqdXN0IGlnbm9yZSBpdC4KKyAgICBlbGVtZW50LmVt
cHR5KCk7CisgIH0gY2F0Y2ggKGUpIHt9CisgIHZhciBlbGVtSHRtbCA9IGpxTGl0ZSgnPGRpdj4n
KS5hcHBlbmQoZWxlbWVudCkuaHRtbCgpOworICB0cnkgeworICAgIHJldHVybiBlbGVtZW50WzBd
Lm5vZGVUeXBlID09PSBOT0RFX1RZUEVfVEVYVCA/IGxvd2VyY2FzZShlbGVtSHRtbCkgOgorICAg
ICAgICBlbGVtSHRtbC4KKyAgICAgICAgICBtYXRjaCgvXig8W14+XSs+KS8pWzFdLgorICAgICAg
ICAgIHJlcGxhY2UoL148KFtcd1wtXSspLywgZnVuY3Rpb24obWF0Y2gsIG5vZGVOYW1lKSB7IHJl
dHVybiAnPCcgKyBsb3dlcmNhc2Uobm9kZU5hbWUpOyB9KTsKKyAgfSBjYXRjaCAoZSkgeworICAg
IHJldHVybiBsb3dlcmNhc2UoZWxlbUh0bWwpOworICB9CisKK30KKworCisvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8qKgorICogVHJpZXMgdG8g
ZGVjb2RlIHRoZSBVUkkgY29tcG9uZW50IHdpdGhvdXQgdGhyb3dpbmcgYW4gZXhjZXB0aW9uLgor
ICoKKyAqIEBwcml2YXRlCisgKiBAcGFyYW0gc3RyIHZhbHVlIHBvdGVudGlhbCBVUkkgY29tcG9u
ZW50IHRvIGNoZWNrLgorICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYHZhbHVlYCBjYW4g
YmUgZGVjb2RlZAorICogd2l0aCB0aGUgZGVjb2RlVVJJQ29tcG9uZW50IGZ1bmN0aW9uLgorICov
CitmdW5jdGlvbiB0cnlEZWNvZGVVUklDb21wb25lbnQodmFsdWUpIHsKKyAgdHJ5IHsKKyAgICBy
ZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIC8v
IElnbm9yZSBhbnkgaW52YWxpZCB1cmkgY29tcG9uZW50CisgIH0KK30KKworCisvKioKKyAqIFBh
cnNlcyBhbiBlc2NhcGVkIHVybCBxdWVyeSBzdHJpbmcgaW50byBrZXktdmFsdWUgcGFpcnMuCisg
KiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsYm9vbGVhbnxBcnJheT59CisgKi8KK2Z1bmN0aW9u
IHBhcnNlS2V5VmFsdWUoLyoqc3RyaW5nKi9rZXlWYWx1ZSkgeworICB2YXIgb2JqID0ge30sIGtl
eV92YWx1ZSwga2V5OworICBmb3JFYWNoKChrZXlWYWx1ZSB8fCAiIikuc3BsaXQoJyYnKSwgZnVu
Y3Rpb24oa2V5VmFsdWUpIHsKKyAgICBpZiAoa2V5VmFsdWUpIHsKKyAgICAgIGtleV92YWx1ZSA9
IGtleVZhbHVlLnJlcGxhY2UoL1wrL2csJyUyMCcpLnNwbGl0KCc9Jyk7CisgICAgICBrZXkgPSB0
cnlEZWNvZGVVUklDb21wb25lbnQoa2V5X3ZhbHVlWzBdKTsKKyAgICAgIGlmIChpc0RlZmluZWQo
a2V5KSkgeworICAgICAgICB2YXIgdmFsID0gaXNEZWZpbmVkKGtleV92YWx1ZVsxXSkgPyB0cnlE
ZWNvZGVVUklDb21wb25lbnQoa2V5X3ZhbHVlWzFdKSA6IHRydWU7CisgICAgICAgIGlmICghaGFz
T3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHsKKyAgICAgICAgICBvYmpba2V5XSA9IHZhbDsK
KyAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KG9ialtrZXldKSkgeworICAgICAgICAgIG9ialtr
ZXldLnB1c2godmFsKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBvYmpba2V5XSA9IFtv
Ympba2V5XSx2YWxdOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9KTsKKyAgcmV0dXJu
IG9iajsKK30KKworZnVuY3Rpb24gdG9LZXlWYWx1ZShvYmopIHsKKyAgdmFyIHBhcnRzID0gW107
CisgIGZvckVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7CisgICAgaWYgKGlzQXJyYXko
dmFsdWUpKSB7CisgICAgICBmb3JFYWNoKHZhbHVlLCBmdW5jdGlvbihhcnJheVZhbHVlKSB7Cisg
ICAgICAgIHBhcnRzLnB1c2goZW5jb2RlVXJpUXVlcnkoa2V5LCB0cnVlKSArCisgICAgICAgICAg
ICAgICAgICAgKGFycmF5VmFsdWUgPT09IHRydWUgPyAnJyA6ICc9JyArIGVuY29kZVVyaVF1ZXJ5
KGFycmF5VmFsdWUsIHRydWUpKSk7CisgICAgICB9KTsKKyAgICB9IGVsc2UgeworICAgIHBhcnRz
LnB1c2goZW5jb2RlVXJpUXVlcnkoa2V5LCB0cnVlKSArCisgICAgICAgICAgICAgICAodmFsdWUg
PT09IHRydWUgPyAnJyA6ICc9JyArIGVuY29kZVVyaVF1ZXJ5KHZhbHVlLCB0cnVlKSkpOworICAg
IH0KKyAgfSk7CisgIHJldHVybiBwYXJ0cy5sZW5ndGggPyBwYXJ0cy5qb2luKCcmJykgOiAnJzsK
K30KKworCisvKioKKyAqIFdlIG5lZWQgb3VyIGN1c3RvbSBtZXRob2QgYmVjYXVzZSBlbmNvZGVV
UklDb21wb25lbnQgaXMgdG9vIGFnZ3Jlc3NpdmUgYW5kIGRvZXNuJ3QgZm9sbG93CisgKiBodHRw
Oi8vd3d3LmlldGYub3JnL3JmYy9yZmMzOTg2LnR4dCB3aXRoIHJlZ2FyZHMgdG8gdGhlIGNoYXJh
Y3RlciBzZXQgKHBjaGFyKSBhbGxvd2VkIGluIHBhdGgKKyAqIHNlZ21lbnRzOgorICogICAgc2Vn
bWVudCAgICAgICA9ICpwY2hhcgorICogICAgcGNoYXIgICAgICAgICA9IHVucmVzZXJ2ZWQgLyBw
Y3QtZW5jb2RlZCAvIHN1Yi1kZWxpbXMgLyAiOiIgLyAiQCIKKyAqICAgIHBjdC1lbmNvZGVkICAg
PSAiJSIgSEVYRElHIEhFWERJRworICogICAgdW5yZXNlcnZlZCAgICA9IEFMUEhBIC8gRElHSVQg
LyAiLSIgLyAiLiIgLyAiXyIgLyAifiIKKyAqICAgIHN1Yi1kZWxpbXMgICAgPSAiISIgLyAiJCIg
LyAiJiIgLyAiJyIgLyAiKCIgLyAiKSIKKyAqICAgICAgICAgICAgICAgICAgICAgLyAiKiIgLyAi
KyIgLyAiLCIgLyAiOyIgLyAiPSIKKyAqLworZnVuY3Rpb24gZW5jb2RlVXJpU2VnbWVudCh2YWwp
IHsKKyAgcmV0dXJuIGVuY29kZVVyaVF1ZXJ5KHZhbCwgdHJ1ZSkuCisgICAgICAgICAgICAgcmVw
bGFjZSgvJTI2L2dpLCAnJicpLgorICAgICAgICAgICAgIHJlcGxhY2UoLyUzRC9naSwgJz0nKS4K
KyAgICAgICAgICAgICByZXBsYWNlKC8lMkIvZ2ksICcrJyk7Cit9CisKKworLyoqCisgKiBUaGlz
IG1ldGhvZCBpcyBpbnRlbmRlZCBmb3IgZW5jb2RpbmcgKmtleSogb3IgKnZhbHVlKiBwYXJ0cyBv
ZiBxdWVyeSBjb21wb25lbnQuIFdlIG5lZWQgYSBjdXN0b20KKyAqIG1ldGhvZCBiZWNhdXNlIGVu
Y29kZVVSSUNvbXBvbmVudCBpcyB0b28gYWdncmVzc2l2ZSBhbmQgZW5jb2RlcyBzdHVmZiB0aGF0
IGRvZXNuJ3QgaGF2ZSB0byBiZQorICogZW5jb2RlZCBwZXIgaHR0cDovL3Rvb2xzLmlldGYub3Jn
L2h0bWwvcmZjMzk4NjoKKyAqICAgIHF1ZXJ5ICAgICAgID0gKiggcGNoYXIgLyAiLyIgLyAiPyIg
KQorICogICAgcGNoYXIgICAgICAgICA9IHVucmVzZXJ2ZWQgLyBwY3QtZW5jb2RlZCAvIHN1Yi1k
ZWxpbXMgLyAiOiIgLyAiQCIKKyAqICAgIHVucmVzZXJ2ZWQgICAgPSBBTFBIQSAvIERJR0lUIC8g
Ii0iIC8gIi4iIC8gIl8iIC8gIn4iCisgKiAgICBwY3QtZW5jb2RlZCAgID0gIiUiIEhFWERJRyBI
RVhESUcKKyAqICAgIHN1Yi1kZWxpbXMgICAgPSAiISIgLyAiJCIgLyAiJiIgLyAiJyIgLyAiKCIg
LyAiKSIKKyAqICAgICAgICAgICAgICAgICAgICAgLyAiKiIgLyAiKyIgLyAiLCIgLyAiOyIgLyAi
PSIKKyAqLworZnVuY3Rpb24gZW5jb2RlVXJpUXVlcnkodmFsLCBwY3RFbmNvZGVTcGFjZXMpIHsK
KyAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLgorICAgICAgICAgICAgIHJlcGxhY2Uo
LyU0MC9naSwgJ0AnKS4KKyAgICAgICAgICAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuCisgICAg
ICAgICAgICAgcmVwbGFjZSgvJTI0L2csICckJykuCisgICAgICAgICAgICAgcmVwbGFjZSgvJTJD
L2dpLCAnLCcpLgorICAgICAgICAgICAgIHJlcGxhY2UoLyUzQi9naSwgJzsnKS4KKyAgICAgICAg
ICAgICByZXBsYWNlKC8lMjAvZywgKHBjdEVuY29kZVNwYWNlcyA/ICclMjAnIDogJysnKSk7Cit9
CisKK3ZhciBuZ0F0dHJQcmVmaXhlcyA9IFsnbmctJywgJ2RhdGEtbmctJywgJ25nOicsICd4LW5n
LSddOworCitmdW5jdGlvbiBnZXROZ0F0dHJpYnV0ZShlbGVtZW50LCBuZ0F0dHIpIHsKKyAgdmFy
IGF0dHIsIGksIGlpID0gbmdBdHRyUHJlZml4ZXMubGVuZ3RoOworICBmb3IgKGkgPSAwOyBpIDwg
aWk7ICsraSkgeworICAgIGF0dHIgPSBuZ0F0dHJQcmVmaXhlc1tpXSArIG5nQXR0cjsKKyAgICBp
ZiAoaXNTdHJpbmcoYXR0ciA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHIpKSkgeworICAgICAg
cmV0dXJuIGF0dHI7CisgICAgfQorICB9CisgIHJldHVybiBudWxsOworfQorCisvKioKKyAqIEBu
Z2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1lIG5nQXBwCisgKiBAbW9kdWxlIG5nCisgKgorICogQGVs
ZW1lbnQgQU5ZCisgKiBAcGFyYW0ge2FuZ3VsYXIuTW9kdWxlfSBuZ0FwcCBhbiBvcHRpb25hbCBh
cHBsaWNhdGlvbgorICogICB7QGxpbmsgYW5ndWxhci5tb2R1bGUgbW9kdWxlfSBuYW1lIHRvIGxv
YWQuCisgKiBAcGFyYW0ge2Jvb2xlYW49fSBuZ1N0cmljdERpIGlmIHRoaXMgYXR0cmlidXRlIGlz
IHByZXNlbnQgb24gdGhlIGFwcCBlbGVtZW50LCB0aGUgaW5qZWN0b3Igd2lsbCBiZQorICogICBj
cmVhdGVkIGluICJzdHJpY3QtZGkiIG1vZGUuIFRoaXMgbWVhbnMgdGhhdCB0aGUgYXBwbGljYXRp
b24gd2lsbCBmYWlsIHRvIGludm9rZSBmdW5jdGlvbnMgd2hpY2gKKyAqICAgZG8gbm90IHVzZSBl
eHBsaWNpdCBmdW5jdGlvbiBhbm5vdGF0aW9uIChhbmQgYXJlIHRodXMgdW5zdWl0YWJsZSBmb3Ig
bWluaWZpY2F0aW9uKSwgYXMgZGVzY3JpYmVkCisgKiAgIGluIHtAbGluayBndWlkZS9kaSB0aGUg
RGVwZW5kZW5jeSBJbmplY3Rpb24gZ3VpZGV9LCBhbmQgdXNlZnVsIGRlYnVnZ2luZyBpbmZvIHdp
bGwgYXNzaXN0IGluCisgKiAgIHRyYWNraW5nIGRvd24gdGhlIHJvb3Qgb2YgdGhlc2UgYnVncy4K
KyAqCisgKiBAZGVzY3JpcHRpb24KKyAqCisgKiBVc2UgdGhpcyBkaXJlY3RpdmUgdG8gKiphdXRv
LWJvb3RzdHJhcCoqIGFuIEFuZ3VsYXJKUyBhcHBsaWNhdGlvbi4gVGhlIGBuZ0FwcGAgZGlyZWN0
aXZlCisgKiBkZXNpZ25hdGVzIHRoZSAqKnJvb3QgZWxlbWVudCoqIG9mIHRoZSBhcHBsaWNhdGlv
biBhbmQgaXMgdHlwaWNhbGx5IHBsYWNlZCBuZWFyIHRoZSByb290IGVsZW1lbnQKKyAqIG9mIHRo
ZSBwYWdlIC0gZS5nLiBvbiB0aGUgYDxib2R5PmAgb3IgYDxodG1sPmAgdGFncy4KKyAqCisgKiBP
bmx5IG9uZSBBbmd1bGFySlMgYXBwbGljYXRpb24gY2FuIGJlIGF1dG8tYm9vdHN0cmFwcGVkIHBl
ciBIVE1MIGRvY3VtZW50LiBUaGUgZmlyc3QgYG5nQXBwYAorICogZm91bmQgaW4gdGhlIGRvY3Vt
ZW50IHdpbGwgYmUgdXNlZCB0byBkZWZpbmUgdGhlIHJvb3QgZWxlbWVudCB0byBhdXRvLWJvb3Rz
dHJhcCBhcyBhbgorICogYXBwbGljYXRpb24uIFRvIHJ1biBtdWx0aXBsZSBhcHBsaWNhdGlvbnMg
aW4gYW4gSFRNTCBkb2N1bWVudCB5b3UgbXVzdCBtYW51YWxseSBib290c3RyYXAgdGhlbSB1c2lu
ZworICoge0BsaW5rIGFuZ3VsYXIuYm9vdHN0cmFwfSBpbnN0ZWFkLiBBbmd1bGFySlMgYXBwbGlj
YXRpb25zIGNhbm5vdCBiZSBuZXN0ZWQgd2l0aGluIGVhY2ggb3RoZXIuCisgKgorICogWW91IGNh
biBzcGVjaWZ5IGFuICoqQW5ndWxhckpTIG1vZHVsZSoqIHRvIGJlIHVzZWQgYXMgdGhlIHJvb3Qg
bW9kdWxlIGZvciB0aGUgYXBwbGljYXRpb24uICBUaGlzCisgKiBtb2R1bGUgd2lsbCBiZSBsb2Fk
ZWQgaW50byB0aGUge0BsaW5rIGF1dG8uJGluamVjdG9yfSB3aGVuIHRoZSBhcHBsaWNhdGlvbiBp
cyBib290c3RyYXBwZWQuIEl0CisgKiBzaG91bGQgY29udGFpbiB0aGUgYXBwbGljYXRpb24gY29k
ZSBuZWVkZWQgb3IgaGF2ZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbW9kdWxlcyB0aGF0IHdpbGwK
KyAqIGNvbnRhaW4gdGhlIGNvZGUuIFNlZSB7QGxpbmsgYW5ndWxhci5tb2R1bGV9IGZvciBtb3Jl
IGluZm9ybWF0aW9uLgorICoKKyAqIEluIHRoZSBleGFtcGxlIGJlbG93IGlmIHRoZSBgbmdBcHBg
IGRpcmVjdGl2ZSB3ZXJlIG5vdCBwbGFjZWQgb24gdGhlIGBodG1sYCBlbGVtZW50IHRoZW4gdGhl
CisgKiBkb2N1bWVudCB3b3VsZCBub3QgYmUgY29tcGlsZWQsIHRoZSBgQXBwQ29udHJvbGxlcmAg
d291bGQgbm90IGJlIGluc3RhbnRpYXRlZCBhbmQgdGhlIGB7eyBhK2IgfX1gCisgKiB3b3VsZCBu
b3QgYmUgcmVzb2x2ZWQgdG8gYDNgLgorICoKKyAqIGBuZ0FwcGAgaXMgdGhlIGVhc2llc3QsIGFu
ZCBtb3N0IGNvbW1vbiB3YXkgdG8gYm9vdHN0cmFwIGFuIGFwcGxpY2F0aW9uLgorICoKKyA8ZXhh
bXBsZSBtb2R1bGU9Im5nQXBwRGVtbyI+CisgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAg
IDxkaXYgbmctY29udHJvbGxlcj0ibmdBcHBEZW1vQ29udHJvbGxlciI+CisgICAgIEkgY2FuIGFk
ZDoge3thfX0gKyB7e2J9fSA9ICB7eyBhK2IgfX0KKyAgIDwvZGl2PgorICAgPC9maWxlPgorICAg
PGZpbGUgbmFtZT0ic2NyaXB0LmpzIj4KKyAgIGFuZ3VsYXIubW9kdWxlKCduZ0FwcERlbW8nLCBb
XSkuY29udHJvbGxlcignbmdBcHBEZW1vQ29udHJvbGxlcicsIGZ1bmN0aW9uKCRzY29wZSkgewor
ICAgICAkc2NvcGUuYSA9IDE7CisgICAgICRzY29wZS5iID0gMjsKKyAgIH0pOworICAgPC9maWxl
PgorIDwvZXhhbXBsZT4KKyAqCisgKiBVc2luZyBgbmdTdHJpY3REaWAsIHlvdSB3b3VsZCBzZWUg
c29tZXRoaW5nIGxpa2UgdGhpczoKKyAqCisgPGV4YW1wbGUgbmctYXBwLWluY2x1ZGVkPSJ0cnVl
Ij4KKyAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgPGRpdiBuZy1hcHA9Im5nQXBwU3Ry
aWN0RGVtbyIgbmctc3RyaWN0LWRpPgorICAgICAgIDxkaXYgbmctY29udHJvbGxlcj0iR29vZENv
bnRyb2xsZXIxIj4KKyAgICAgICAgICAgSSBjYW4gYWRkOiB7e2F9fSArIHt7Yn19ID0gIHt7IGEr
YiB9fQorCisgICAgICAgICAgIDxwPlRoaXMgcmVuZGVycyBiZWNhdXNlIHRoZSBjb250cm9sbGVy
IGRvZXMgbm90IGZhaWwgdG8KKyAgICAgICAgICAgICAgaW5zdGFudGlhdGUsIGJ5IHVzaW5nIGV4
cGxpY2l0IGFubm90YXRpb24gc3R5bGUgKHNlZQorICAgICAgICAgICAgICBzY3JpcHQuanMgZm9y
IGRldGFpbHMpCisgICAgICAgICAgIDwvcD4KKyAgICAgICA8L2Rpdj4KKworICAgICAgIDxkaXYg
bmctY29udHJvbGxlcj0iR29vZENvbnRyb2xsZXIyIj4KKyAgICAgICAgICAgTmFtZTogPGlucHV0
IG5nLW1vZGVsPSJuYW1lIj48YnIgLz4KKyAgICAgICAgICAgSGVsbG8sIHt7bmFtZX19IQorCisg
ICAgICAgICAgIDxwPlRoaXMgcmVuZGVycyBiZWNhdXNlIHRoZSBjb250cm9sbGVyIGRvZXMgbm90
IGZhaWwgdG8KKyAgICAgICAgICAgICAgaW5zdGFudGlhdGUsIGJ5IHVzaW5nIGV4cGxpY2l0IGFu
bm90YXRpb24gc3R5bGUKKyAgICAgICAgICAgICAgKHNlZSBzY3JpcHQuanMgZm9yIGRldGFpbHMp
CisgICAgICAgICAgIDwvcD4KKyAgICAgICA8L2Rpdj4KKworICAgICAgIDxkaXYgbmctY29udHJv
bGxlcj0iQmFkQ29udHJvbGxlciI+CisgICAgICAgICAgIEkgY2FuIGFkZDoge3thfX0gKyB7e2J9
fSA9ICB7eyBhK2IgfX0KKworICAgICAgICAgICA8cD5UaGUgY29udHJvbGxlciBjb3VsZCBub3Qg
YmUgaW5zdGFudGlhdGVkLCBkdWUgdG8gcmVseWluZworICAgICAgICAgICAgICBvbiBhdXRvbWF0
aWMgZnVuY3Rpb24gYW5ub3RhdGlvbnMgKHdoaWNoIGFyZSBkaXNhYmxlZCBpbgorICAgICAgICAg
ICAgICBzdHJpY3QgbW9kZSkuIEFzIHN1Y2gsIHRoZSBjb250ZW50IG9mIHRoaXMgc2VjdGlvbiBp
cyBub3QKKyAgICAgICAgICAgICAgaW50ZXJwb2xhdGVkLCBhbmQgdGhlcmUgc2hvdWxkIGJlIGFu
IGVycm9yIGluIHlvdXIgd2ViIGNvbnNvbGUuCisgICAgICAgICAgIDwvcD4KKyAgICAgICA8L2Rp
dj4KKyAgIDwvZGl2PgorICAgPC9maWxlPgorICAgPGZpbGUgbmFtZT0ic2NyaXB0LmpzIj4KKyAg
IGFuZ3VsYXIubW9kdWxlKCduZ0FwcFN0cmljdERlbW8nLCBbXSkKKyAgICAgLy8gQmFkQ29udHJv
bGxlciB3aWxsIGZhaWwgdG8gaW5zdGFudGlhdGUsIGR1ZSB0byByZWx5aW5nIG9uIGF1dG9tYXRp
YyBmdW5jdGlvbiBhbm5vdGF0aW9uLAorICAgICAvLyByYXRoZXIgdGhhbiBhbiBleHBsaWNpdCBh
bm5vdGF0aW9uCisgICAgIC5jb250cm9sbGVyKCdCYWRDb250cm9sbGVyJywgZnVuY3Rpb24oJHNj
b3BlKSB7CisgICAgICAgJHNjb3BlLmEgPSAxOworICAgICAgICRzY29wZS5iID0gMjsKKyAgICAg
fSkKKyAgICAgLy8gVW5saWtlIEJhZENvbnRyb2xsZXIsIEdvb2RDb250cm9sbGVyMSBhbmQgR29v
ZENvbnRyb2xsZXIyIHdpbGwgbm90IGZhaWwgdG8gYmUgaW5zdGFudGlhdGVkLAorICAgICAvLyBk
dWUgdG8gdXNpbmcgZXhwbGljaXQgYW5ub3RhdGlvbnMgdXNpbmcgdGhlIGFycmF5IHN0eWxlIGFu
ZCAkaW5qZWN0IHByb3BlcnR5LCByZXNwZWN0aXZlbHkuCisgICAgIC5jb250cm9sbGVyKCdHb29k
Q29udHJvbGxlcjEnLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkgeworICAgICAgICRzY29w
ZS5hID0gMTsKKyAgICAgICAkc2NvcGUuYiA9IDI7CisgICAgIH1dKQorICAgICAuY29udHJvbGxl
cignR29vZENvbnRyb2xsZXIyJywgR29vZENvbnRyb2xsZXIyKTsKKyAgICAgZnVuY3Rpb24gR29v
ZENvbnRyb2xsZXIyKCRzY29wZSkgeworICAgICAgICRzY29wZS5uYW1lID0gIldvcmxkIjsKKyAg
ICAgfQorICAgICBHb29kQ29udHJvbGxlcjIuJGluamVjdCA9IFsnJHNjb3BlJ107CisgICA8L2Zp
bGU+CisgICA8ZmlsZSBuYW1lPSJzdHlsZS5jc3MiPgorICAgZGl2W25nLWNvbnRyb2xsZXJdIHsK
KyAgICAgICBtYXJnaW4tYm90dG9tOiAxZW07CisgICAgICAgLXdlYmtpdC1ib3JkZXItcmFkaXVz
OiA0cHg7CisgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OworICAgICAgIGJvcmRlcjogMXB4IHNv
bGlkOworICAgICAgIHBhZGRpbmc6IC41ZW07CisgICB9CisgICBkaXZbbmctY29udHJvbGxlcl49
R29vZF0geworICAgICAgIGJvcmRlci1jb2xvcjogI2Q2ZTljNjsKKyAgICAgICBiYWNrZ3JvdW5k
LWNvbG9yOiAjZGZmMGQ4OworICAgICAgIGNvbG9yOiAjM2M3NjNkOworICAgfQorICAgZGl2W25n
LWNvbnRyb2xsZXJePUJhZF0geworICAgICAgIGJvcmRlci1jb2xvcjogI2ViY2NkMTsKKyAgICAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJkZWRlOworICAgICAgIGNvbG9yOiAjYTk0NDQyOworICAg
ICAgIG1hcmdpbi1ib3R0b206IDA7CisgICB9CisgICA8L2ZpbGU+CisgPC9leGFtcGxlPgorICov
CitmdW5jdGlvbiBhbmd1bGFySW5pdChlbGVtZW50LCBib290c3RyYXApIHsKKyAgdmFyIGFwcEVs
ZW1lbnQsCisgICAgICBtb2R1bGUsCisgICAgICBjb25maWcgPSB7fTsKKworICAvLyBUaGUgZWxl
bWVudCBgZWxlbWVudGAgaGFzIHByaW9yaXR5IG92ZXIgYW55IG90aGVyIGVsZW1lbnQKKyAgZm9y
RWFjaChuZ0F0dHJQcmVmaXhlcywgZnVuY3Rpb24ocHJlZml4KSB7CisgICAgdmFyIG5hbWUgPSBw
cmVmaXggKyAnYXBwJzsKKworICAgIGlmICghYXBwRWxlbWVudCAmJiBlbGVtZW50Lmhhc0F0dHJp
YnV0ZSAmJiBlbGVtZW50Lmhhc0F0dHJpYnV0ZShuYW1lKSkgeworICAgICAgYXBwRWxlbWVudCA9
IGVsZW1lbnQ7CisgICAgICBtb2R1bGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShuYW1lKTsKKyAg
ICB9CisgIH0pOworICBmb3JFYWNoKG5nQXR0clByZWZpeGVzLCBmdW5jdGlvbihwcmVmaXgpIHsK
KyAgICB2YXIgbmFtZSA9IHByZWZpeCArICdhcHAnOworICAgIHZhciBjYW5kaWRhdGU7CisKKyAg
ICBpZiAoIWFwcEVsZW1lbnQgJiYgKGNhbmRpZGF0ZSA9IGVsZW1lbnQucXVlcnlTZWxlY3Rvcign
WycgKyBuYW1lLnJlcGxhY2UoJzonLCAnXFw6JykgKyAnXScpKSkgeworICAgICAgYXBwRWxlbWVu
dCA9IGNhbmRpZGF0ZTsKKyAgICAgIG1vZHVsZSA9IGNhbmRpZGF0ZS5nZXRBdHRyaWJ1dGUobmFt
ZSk7CisgICAgfQorICB9KTsKKyAgaWYgKGFwcEVsZW1lbnQpIHsKKyAgICBjb25maWcuc3RyaWN0
RGkgPSBnZXROZ0F0dHJpYnV0ZShhcHBFbGVtZW50LCAic3RyaWN0LWRpIikgIT09IG51bGw7Cisg
ICAgYm9vdHN0cmFwKGFwcEVsZW1lbnQsIG1vZHVsZSA/IFttb2R1bGVdIDogW10sIGNvbmZpZyk7
CisgIH0KK30KKworLyoqCisgKiBAbmdkb2MgZnVuY3Rpb24KKyAqIEBuYW1lIGFuZ3VsYXIuYm9v
dHN0cmFwCisgKiBAbW9kdWxlIG5nCisgKiBAZGVzY3JpcHRpb24KKyAqIFVzZSB0aGlzIGZ1bmN0
aW9uIHRvIG1hbnVhbGx5IHN0YXJ0IHVwIGFuZ3VsYXIgYXBwbGljYXRpb24uCisgKgorICogU2Vl
OiB7QGxpbmsgZ3VpZGUvYm9vdHN0cmFwIEJvb3RzdHJhcH0KKyAqCisgKiBOb3RlIHRoYXQgUHJv
dHJhY3RvciBiYXNlZCBlbmQtdG8tZW5kIHRlc3RzIGNhbm5vdCB1c2UgdGhpcyBmdW5jdGlvbiB0
byBib290c3RyYXAgbWFudWFsbHkuCisgKiBUaGV5IG11c3QgdXNlIHtAbGluayBuZy5kaXJlY3Rp
dmU6bmdBcHAgbmdBcHB9LgorICoKKyAqIEFuZ3VsYXIgd2lsbCBkZXRlY3QgaWYgaXQgaGFzIGJl
ZW4gbG9hZGVkIGludG8gdGhlIGJyb3dzZXIgbW9yZSB0aGFuIG9uY2UgYW5kIG9ubHkgYWxsb3cg
dGhlCisgKiBmaXJzdCBsb2FkZWQgc2NyaXB0IHRvIGJlIGJvb3RzdHJhcHBlZCBhbmQgd2lsbCBy
ZXBvcnQgYSB3YXJuaW5nIHRvIHRoZSBicm93c2VyIGNvbnNvbGUgZm9yCisgKiBlYWNoIG9mIHRo
ZSBzdWJzZXF1ZW50IHNjcmlwdHMuIFRoaXMgcHJldmVudHMgc3RyYW5nZSByZXN1bHRzIGluIGFw
cGxpY2F0aW9ucywgd2hlcmUgb3RoZXJ3aXNlCisgKiBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgQW5n
dWxhciB0cnkgdG8gd29yayBvbiB0aGUgRE9NLgorICoKKyAqIGBgYGh0bWwKKyAqIDwhZG9jdHlw
ZSBodG1sPgorICogPGh0bWw+CisgKiA8Ym9keT4KKyAqIDxkaXYgbmctY29udHJvbGxlcj0iV2Vs
Y29tZUNvbnRyb2xsZXIiPgorICogICB7e2dyZWV0aW5nfX0KKyAqIDwvZGl2PgorICoKKyAqIDxz
Y3JpcHQgc3JjPSJhbmd1bGFyLmpzIj48L3NjcmlwdD4KKyAqIDxzY3JpcHQ+CisgKiAgIHZhciBh
cHAgPSBhbmd1bGFyLm1vZHVsZSgnZGVtbycsIFtdKQorICogICAuY29udHJvbGxlcignV2VsY29t
ZUNvbnRyb2xsZXInLCBmdW5jdGlvbigkc2NvcGUpIHsKKyAqICAgICAgICRzY29wZS5ncmVldGlu
ZyA9ICdXZWxjb21lISc7CisgKiAgIH0pOworICogICBhbmd1bGFyLmJvb3RzdHJhcChkb2N1bWVu
dCwgWydkZW1vJ10pOworICogPC9zY3JpcHQ+CisgKiA8L2JvZHk+CisgKiA8L2h0bWw+CisgKiBg
YGAKKyAqCisgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGVsZW1lbnQgRE9NIGVsZW1lbnQgd2hpY2gg
aXMgdGhlIHJvb3Qgb2YgYW5ndWxhciBhcHBsaWNhdGlvbi4KKyAqIEBwYXJhbSB7QXJyYXk8U3Ry
aW5nfEZ1bmN0aW9ufEFycmF5Pj19IG1vZHVsZXMgYW4gYXJyYXkgb2YgbW9kdWxlcyB0byBsb2Fk
IGludG8gdGhlIGFwcGxpY2F0aW9uLgorICogICAgIEVhY2ggaXRlbSBpbiB0aGUgYXJyYXkgc2hv
dWxkIGJlIHRoZSBuYW1lIG9mIGEgcHJlZGVmaW5lZCBtb2R1bGUgb3IgYSAoREkgYW5ub3RhdGVk
KQorICogICAgIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBpbnZva2VkIGJ5IHRoZSBpbmplY3RvciBh
cyBhIGBjb25maWdgIGJsb2NrLgorICogICAgIFNlZToge0BsaW5rIGFuZ3VsYXIubW9kdWxlIG1v
ZHVsZXN9CisgKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyBhbiBvYmplY3QgZm9yIGRlZmluaW5n
IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGFwcGxpY2F0aW9uLiBUaGUKKyAqICAgICBm
b2xsb3dpbmcga2V5cyBhcmUgc3VwcG9ydGVkOgorICoKKyAqICogYHN0cmljdERpYCAtIGRpc2Fi
bGUgYXV0b21hdGljIGZ1bmN0aW9uIGFubm90YXRpb24gZm9yIHRoZSBhcHBsaWNhdGlvbi4gVGhp
cyBpcyBtZWFudCB0bworICogICBhc3Npc3QgaW4gZmluZGluZyBidWdzIHdoaWNoIGJyZWFrIG1p
bmlmaWVkIGNvZGUuIERlZmF1bHRzIHRvIGBmYWxzZWAuCisgKgorICogQHJldHVybnMge2F1dG8u
JGluamVjdG9yfSBSZXR1cm5zIHRoZSBuZXdseSBjcmVhdGVkIGluamVjdG9yIGZvciB0aGlzIGFw
cC4KKyAqLworZnVuY3Rpb24gYm9vdHN0cmFwKGVsZW1lbnQsIG1vZHVsZXMsIGNvbmZpZykgewor
ICBpZiAoIWlzT2JqZWN0KGNvbmZpZykpIGNvbmZpZyA9IHt9OworICB2YXIgZGVmYXVsdENvbmZp
ZyA9IHsKKyAgICBzdHJpY3REaTogZmFsc2UKKyAgfTsKKyAgY29uZmlnID0gZXh0ZW5kKGRlZmF1
bHRDb25maWcsIGNvbmZpZyk7CisgIHZhciBkb0Jvb3RzdHJhcCA9IGZ1bmN0aW9uKCkgeworICAg
IGVsZW1lbnQgPSBqcUxpdGUoZWxlbWVudCk7CisKKyAgICBpZiAoZWxlbWVudC5pbmplY3Rvcigp
KSB7CisgICAgICB2YXIgdGFnID0gKGVsZW1lbnRbMF0gPT09IGRvY3VtZW50KSA/ICdkb2N1bWVu
dCcgOiBzdGFydGluZ1RhZyhlbGVtZW50KTsKKyAgICAgIC8vRW5jb2RlIGFuZ2xlIGJyYWNrZXRz
IHRvIHByZXZlbnQgaW5wdXQgZnJvbSBiZWluZyBzYW5pdGl6ZWQgdG8gZW1wdHkgc3RyaW5nICM4
NjgzCisgICAgICB0aHJvdyBuZ01pbkVycigKKyAgICAgICAgICAnYnRzdHJwZCcsCisgICAgICAg
ICAgIkFwcCBBbHJlYWR5IEJvb3RzdHJhcHBlZCB3aXRoIHRoaXMgRWxlbWVudCAnezB9JyIsCisg
ICAgICAgICAgdGFnLnJlcGxhY2UoLzwvLCcmbHQ7JykucmVwbGFjZSgvPi8sJyZndDsnKSk7Cisg
ICAgfQorCisgICAgbW9kdWxlcyA9IG1vZHVsZXMgfHwgW107CisgICAgbW9kdWxlcy51bnNoaWZ0
KFsnJHByb3ZpZGUnLCBmdW5jdGlvbigkcHJvdmlkZSkgeworICAgICAgJHByb3ZpZGUudmFsdWUo
JyRyb290RWxlbWVudCcsIGVsZW1lbnQpOworICAgIH1dKTsKKworICAgIGlmIChjb25maWcuZGVi
dWdJbmZvRW5hYmxlZCkgeworICAgICAgLy8gUHVzaGluZyBzbyB0aGF0IHRoaXMgb3ZlcnJpZGVz
IGBkZWJ1Z0luZm9FbmFibGVkYCBzZXR0aW5nIGRlZmluZWQgaW4gdXNlcidzIGBtb2R1bGVzYC4K
KyAgICAgIG1vZHVsZXMucHVzaChbJyRjb21waWxlUHJvdmlkZXInLCBmdW5jdGlvbigkY29tcGls
ZVByb3ZpZGVyKSB7CisgICAgICAgICRjb21waWxlUHJvdmlkZXIuZGVidWdJbmZvRW5hYmxlZCh0
cnVlKTsKKyAgICAgIH1dKTsKKyAgICB9CisKKyAgICBtb2R1bGVzLnVuc2hpZnQoJ25nJyk7Cisg
ICAgdmFyIGluamVjdG9yID0gY3JlYXRlSW5qZWN0b3IobW9kdWxlcywgY29uZmlnLnN0cmljdERp
KTsKKyAgICBpbmplY3Rvci5pbnZva2UoWyckcm9vdFNjb3BlJywgJyRyb290RWxlbWVudCcsICck
Y29tcGlsZScsICckaW5qZWN0b3InLAorICAgICAgIGZ1bmN0aW9uIGJvb3RzdHJhcEFwcGx5KHNj
b3BlLCBlbGVtZW50LCBjb21waWxlLCBpbmplY3RvcikgeworICAgICAgICBzY29wZS4kYXBwbHko
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgZWxlbWVudC5kYXRhKCckaW5qZWN0b3InLCBpbmplY3Rv
cik7CisgICAgICAgICAgY29tcGlsZShlbGVtZW50KShzY29wZSk7CisgICAgICAgIH0pOworICAg
ICAgfV0KKyAgICApOworICAgIHJldHVybiBpbmplY3RvcjsKKyAgfTsKKworICB2YXIgTkdfRU5B
QkxFX0RFQlVHX0lORk8gPSAvXk5HX0VOQUJMRV9ERUJVR19JTkZPIS87CisgIHZhciBOR19ERUZF
Ul9CT09UU1RSQVAgPSAvXk5HX0RFRkVSX0JPT1RTVFJBUCEvOworCisgIGlmICh3aW5kb3cgJiYg
TkdfRU5BQkxFX0RFQlVHX0lORk8udGVzdCh3aW5kb3cubmFtZSkpIHsKKyAgICBjb25maWcuZGVi
dWdJbmZvRW5hYmxlZCA9IHRydWU7CisgICAgd2luZG93Lm5hbWUgPSB3aW5kb3cubmFtZS5yZXBs
YWNlKE5HX0VOQUJMRV9ERUJVR19JTkZPLCAnJyk7CisgIH0KKworICBpZiAod2luZG93ICYmICFO
R19ERUZFUl9CT09UU1RSQVAudGVzdCh3aW5kb3cubmFtZSkpIHsKKyAgICByZXR1cm4gZG9Cb290
c3RyYXAoKTsKKyAgfQorCisgIHdpbmRvdy5uYW1lID0gd2luZG93Lm5hbWUucmVwbGFjZShOR19E
RUZFUl9CT09UU1RSQVAsICcnKTsKKyAgYW5ndWxhci5yZXN1bWVCb290c3RyYXAgPSBmdW5jdGlv
bihleHRyYU1vZHVsZXMpIHsKKyAgICBmb3JFYWNoKGV4dHJhTW9kdWxlcywgZnVuY3Rpb24obW9k
dWxlKSB7CisgICAgICBtb2R1bGVzLnB1c2gobW9kdWxlKTsKKyAgICB9KTsKKyAgICByZXR1cm4g
ZG9Cb290c3RyYXAoKTsKKyAgfTsKKworICBpZiAoaXNGdW5jdGlvbihhbmd1bGFyLnJlc3VtZURl
ZmVycmVkQm9vdHN0cmFwKSkgeworICAgIGFuZ3VsYXIucmVzdW1lRGVmZXJyZWRCb290c3RyYXAo
KTsKKyAgfQorfQorCisvKioKKyAqIEBuZ2RvYyBmdW5jdGlvbgorICogQG5hbWUgYW5ndWxhci5y
ZWxvYWRXaXRoRGVidWdJbmZvCisgKiBAbW9kdWxlIG5nCisgKiBAZGVzY3JpcHRpb24KKyAqIFVz
ZSB0aGlzIGZ1bmN0aW9uIHRvIHJlbG9hZCB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiB3aXRoIGRl
YnVnIGluZm9ybWF0aW9uIHR1cm5lZCBvbi4KKyAqIFRoaXMgdGFrZXMgcHJlY2VkZW5jZSBvdmVy
IGEgY2FsbCB0byBgJGNvbXBpbGVQcm92aWRlci5kZWJ1Z0luZm9FbmFibGVkKGZhbHNlKWAuCisg
KgorICogU2VlIHtAbGluayBuZy4kY29tcGlsZVByb3ZpZGVyI2RlYnVnSW5mb0VuYWJsZWR9IGZv
ciBtb3JlLgorICovCitmdW5jdGlvbiByZWxvYWRXaXRoRGVidWdJbmZvKCkgeworICB3aW5kb3cu
bmFtZSA9ICdOR19FTkFCTEVfREVCVUdfSU5GTyEnICsgd2luZG93Lm5hbWU7CisgIHdpbmRvdy5s
b2NhdGlvbi5yZWxvYWQoKTsKK30KKworLyoqCisgKiBAbmFtZSBhbmd1bGFyLmdldFRlc3RhYmls
aXR5CisgKiBAbW9kdWxlIG5nCisgKiBAZGVzY3JpcHRpb24KKyAqIEdldCB0aGUgdGVzdGFiaWxp
dHkgc2VydmljZSBmb3IgdGhlIGluc3RhbmNlIG9mIEFuZ3VsYXIgb24gdGhlIGdpdmVuCisgKiBl
bGVtZW50LgorICogQHBhcmFtIHtET01FbGVtZW50fSBlbGVtZW50IERPTSBlbGVtZW50IHdoaWNo
IGlzIHRoZSByb290IG9mIGFuZ3VsYXIgYXBwbGljYXRpb24uCisgKi8KK2Z1bmN0aW9uIGdldFRl
c3RhYmlsaXR5KHJvb3RFbGVtZW50KSB7CisgIHZhciBpbmplY3RvciA9IGFuZ3VsYXIuZWxlbWVu
dChyb290RWxlbWVudCkuaW5qZWN0b3IoKTsKKyAgaWYgKCFpbmplY3RvcikgeworICAgIHRocm93
IG5nTWluRXJyKCd0ZXN0JywKKyAgICAgICdubyBpbmplY3RvciBmb3VuZCBmb3IgZWxlbWVudCBh
cmd1bWVudCB0byBnZXRUZXN0YWJpbGl0eScpOworICB9CisgIHJldHVybiBpbmplY3Rvci5nZXQo
JyQkdGVzdGFiaWxpdHknKTsKK30KKwordmFyIFNOQUtFX0NBU0VfUkVHRVhQID0gL1tBLVpdL2c7
CitmdW5jdGlvbiBzbmFrZV9jYXNlKG5hbWUsIHNlcGFyYXRvcikgeworICBzZXBhcmF0b3IgPSBz
ZXBhcmF0b3IgfHwgJ18nOworICByZXR1cm4gbmFtZS5yZXBsYWNlKFNOQUtFX0NBU0VfUkVHRVhQ
LCBmdW5jdGlvbihsZXR0ZXIsIHBvcykgeworICAgIHJldHVybiAocG9zID8gc2VwYXJhdG9yIDog
JycpICsgbGV0dGVyLnRvTG93ZXJDYXNlKCk7CisgIH0pOworfQorCit2YXIgYmluZEpRdWVyeUZp
cmVkID0gZmFsc2U7Cit2YXIgc2tpcERlc3Ryb3lPbk5leHRKUXVlcnlDbGVhbkRhdGE7CitmdW5j
dGlvbiBiaW5kSlF1ZXJ5KCkgeworICB2YXIgb3JpZ2luYWxDbGVhbkRhdGE7CisKKyAgaWYgKGJp
bmRKUXVlcnlGaXJlZCkgeworICAgIHJldHVybjsKKyAgfQorCisgIC8vIGJpbmQgdG8galF1ZXJ5
IGlmIHByZXNlbnQ7CisgIHZhciBqcU5hbWUgPSBqcSgpOworICBqUXVlcnkgPSB3aW5kb3cualF1
ZXJ5OyAvLyB1c2UgZGVmYXVsdCBqUXVlcnkuCisgIGlmIChpc0RlZmluZWQoanFOYW1lKSkgeyAv
LyBgbmdKcWAgcHJlc2VudAorICAgIGpRdWVyeSA9IGpxTmFtZSA9PT0gbnVsbCA/IHVuZGVmaW5l
ZCA6IHdpbmRvd1tqcU5hbWVdOyAvLyBpZiBlbXB0eTsgdXNlIGpxTGl0ZS4gaWYgbm90IGVtcHR5
LCB1c2UgalF1ZXJ5IHNwZWNpZmllZCBieSBgbmdKcWAuCisgIH0KKworICAvLyBVc2UgalF1ZXJ5
IGlmIGl0IGV4aXN0cyB3aXRoIHByb3BlciBmdW5jdGlvbmFsaXR5LCBvdGhlcndpc2UgZGVmYXVs
dCB0byB1cy4KKyAgLy8gQW5ndWxhciAxLjIrIHJlcXVpcmVzIGpRdWVyeSAxLjcrIGZvciBvbigp
L29mZigpIHN1cHBvcnQuCisgIC8vIEFuZ3VsYXIgMS4zKyB0ZWNobmljYWxseSByZXF1aXJlcyBh
dCBsZWFzdCBqUXVlcnkgMi4xKyBidXQgaXQgbWF5IHdvcmsgd2l0aCBvbGRlcgorICAvLyB2ZXJz
aW9ucy4gSXQgd2lsbCBub3Qgd29yayBmb3Igc3VyZSB3aXRoIGpRdWVyeSA8MS43LCB0aG91Z2gu
CisgIGlmIChqUXVlcnkgJiYgalF1ZXJ5LmZuLm9uKSB7CisgICAganFMaXRlID0galF1ZXJ5Owor
ICAgIGV4dGVuZChqUXVlcnkuZm4sIHsKKyAgICAgIHNjb3BlOiBKUUxpdGVQcm90b3R5cGUuc2Nv
cGUsCisgICAgICBpc29sYXRlU2NvcGU6IEpRTGl0ZVByb3RvdHlwZS5pc29sYXRlU2NvcGUsCisg
ICAgICBjb250cm9sbGVyOiBKUUxpdGVQcm90b3R5cGUuY29udHJvbGxlciwKKyAgICAgIGluamVj
dG9yOiBKUUxpdGVQcm90b3R5cGUuaW5qZWN0b3IsCisgICAgICBpbmhlcml0ZWREYXRhOiBKUUxp
dGVQcm90b3R5cGUuaW5oZXJpdGVkRGF0YQorICAgIH0pOworCisgICAgLy8gQWxsIG5vZGVzIHJl
bW92ZWQgZnJvbSB0aGUgRE9NIHZpYSB2YXJpb3VzIGpRdWVyeSBBUElzIGxpa2UgLnJlbW92ZSgp
CisgICAgLy8gYXJlIHBhc3NlZCB0aHJvdWdoIGpRdWVyeS5jbGVhbkRhdGEuIE1vbmtleS1wYXRj
aCB0aGlzIG1ldGhvZCB0byBmaXJlCisgICAgLy8gdGhlICRkZXN0cm95IGV2ZW50IG9uIGFsbCBy
ZW1vdmVkIG5vZGVzLgorICAgIG9yaWdpbmFsQ2xlYW5EYXRhID0galF1ZXJ5LmNsZWFuRGF0YTsK
KyAgICBqUXVlcnkuY2xlYW5EYXRhID0gZnVuY3Rpb24oZWxlbXMpIHsKKyAgICAgIHZhciBldmVu
dHM7CisgICAgICBpZiAoIXNraXBEZXN0cm95T25OZXh0SlF1ZXJ5Q2xlYW5EYXRhKSB7CisgICAg
ICAgIGZvciAodmFyIGkgPSAwLCBlbGVtOyAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysp
IHsKKyAgICAgICAgICBldmVudHMgPSBqUXVlcnkuX2RhdGEoZWxlbSwgImV2ZW50cyIpOworICAg
ICAgICAgIGlmIChldmVudHMgJiYgZXZlbnRzLiRkZXN0cm95KSB7CisgICAgICAgICAgICBqUXVl
cnkoZWxlbSkudHJpZ2dlckhhbmRsZXIoJyRkZXN0cm95Jyk7CisgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBza2lwRGVzdHJveU9uTmV4dEpRdWVyeUNsZWFu
RGF0YSA9IGZhbHNlOworICAgICAgfQorICAgICAgb3JpZ2luYWxDbGVhbkRhdGEoZWxlbXMpOwor
ICAgIH07CisgIH0gZWxzZSB7CisgICAganFMaXRlID0gSlFMaXRlOworICB9CisKKyAgYW5ndWxh
ci5lbGVtZW50ID0ganFMaXRlOworCisgIC8vIFByZXZlbnQgZG91YmxlLXByb3h5aW5nLgorICBi
aW5kSlF1ZXJ5RmlyZWQgPSB0cnVlOworfQorCisvKioKKyAqIHRocm93IGVycm9yIGlmIHRoZSBh
cmd1bWVudCBpcyBmYWxzeS4KKyAqLworZnVuY3Rpb24gYXNzZXJ0QXJnKGFyZywgbmFtZSwgcmVh
c29uKSB7CisgIGlmICghYXJnKSB7CisgICAgdGhyb3cgbmdNaW5FcnIoJ2FyZXEnLCAiQXJndW1l
bnQgJ3swfScgaXMgezF9IiwgKG5hbWUgfHwgJz8nKSwgKHJlYXNvbiB8fCAicmVxdWlyZWQiKSk7
CisgIH0KKyAgcmV0dXJuIGFyZzsKK30KKworZnVuY3Rpb24gYXNzZXJ0QXJnRm4oYXJnLCBuYW1l
LCBhY2NlcHRBcnJheUFubm90YXRpb24pIHsKKyAgaWYgKGFjY2VwdEFycmF5QW5ub3RhdGlvbiAm
JiBpc0FycmF5KGFyZykpIHsKKyAgICAgIGFyZyA9IGFyZ1thcmcubGVuZ3RoIC0gMV07CisgIH0K
KworICBhc3NlcnRBcmcoaXNGdW5jdGlvbihhcmcpLCBuYW1lLCAnbm90IGEgZnVuY3Rpb24sIGdv
dCAnICsKKyAgICAgIChhcmcgJiYgdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgPyBhcmcuY29uc3Ry
dWN0b3IubmFtZSB8fCAnT2JqZWN0JyA6IHR5cGVvZiBhcmcpKTsKKyAgcmV0dXJuIGFyZzsKK30K
KworLyoqCisgKiB0aHJvdyBlcnJvciBpZiB0aGUgbmFtZSBnaXZlbiBpcyBoYXNPd25Qcm9wZXJ0
eQorICogQHBhcmFtICB7U3RyaW5nfSBuYW1lICAgIHRoZSBuYW1lIHRvIHRlc3QKKyAqIEBwYXJh
bSAge1N0cmluZ30gY29udGV4dCB0aGUgY29udGV4dCBpbiB3aGljaCB0aGUgbmFtZSBpcyB1c2Vk
LCBzdWNoIGFzIG1vZHVsZSBvciBkaXJlY3RpdmUKKyAqLworZnVuY3Rpb24gYXNzZXJ0Tm90SGFz
T3duUHJvcGVydHkobmFtZSwgY29udGV4dCkgeworICBpZiAobmFtZSA9PT0gJ2hhc093blByb3Bl
cnR5JykgeworICAgIHRocm93IG5nTWluRXJyKCdiYWRuYW1lJywgImhhc093blByb3BlcnR5IGlz
IG5vdCBhIHZhbGlkIHswfSBuYW1lIiwgY29udGV4dCk7CisgIH0KK30KKworLyoqCisgKiBSZXR1
cm4gdGhlIHZhbHVlIGFjY2Vzc2libGUgZnJvbSB0aGUgb2JqZWN0IGJ5IHBhdGguIEFueSB1bmRl
ZmluZWQgdHJhdmVyc2FscyBhcmUgaWdub3JlZAorICogQHBhcmFtIHtPYmplY3R9IG9iaiBzdGFy
dGluZyBvYmplY3QKKyAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoIHBhdGggdG8gdHJhdmVyc2UKKyAq
IEBwYXJhbSB7Ym9vbGVhbn0gW2JpbmRGblRvU2NvcGU9dHJ1ZV0KKyAqIEByZXR1cm5zIHtPYmpl
Y3R9IHZhbHVlIGFzIGFjY2Vzc2libGUgYnkgcGF0aAorICovCisvL1RPRE8obWlza28pOiB0aGlz
IGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHJlbW92ZWQKK2Z1bmN0aW9uIGdldHRlcihvYmosIHBhdGgs
IGJpbmRGblRvU2NvcGUpIHsKKyAgaWYgKCFwYXRoKSByZXR1cm4gb2JqOworICB2YXIga2V5cyA9
IHBhdGguc3BsaXQoJy4nKTsKKyAgdmFyIGtleTsKKyAgdmFyIGxhc3RJbnN0YW5jZSA9IG9iajsK
KyAgdmFyIGxlbiA9IGtleXMubGVuZ3RoOworCisgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBp
KyspIHsKKyAgICBrZXkgPSBrZXlzW2ldOworICAgIGlmIChvYmopIHsKKyAgICAgIG9iaiA9IChs
YXN0SW5zdGFuY2UgPSBvYmopW2tleV07CisgICAgfQorICB9CisgIGlmICghYmluZEZuVG9TY29w
ZSAmJiBpc0Z1bmN0aW9uKG9iaikpIHsKKyAgICByZXR1cm4gYmluZChsYXN0SW5zdGFuY2UsIG9i
aik7CisgIH0KKyAgcmV0dXJuIG9iajsKK30KKworLyoqCisgKiBSZXR1cm4gdGhlIERPTSBzaWJs
aW5ncyBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgbGFzdCBub2RlIGluIHRoZSBnaXZlbiBhcnJheS4K
KyAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IGxpa2Ugb2JqZWN0CisgKiBAcmV0dXJucyB7anFMaXRl
fSBqcUxpdGUgY29sbGVjdGlvbiBjb250YWluaW5nIHRoZSBub2RlcworICovCitmdW5jdGlvbiBn
ZXRCbG9ja05vZGVzKG5vZGVzKSB7CisgIC8vIFRPRE8ocGVyZik6IGp1c3QgY2hlY2sgaWYgYWxs
IGl0ZW1zIGluIGBub2Rlc2AgYXJlIHNpYmxpbmdzIGFuZCBpZiB0aGV5IGFyZSByZXR1cm4gdGhl
IG9yaWdpbmFsCisgIC8vICAgICAgICAgICAgIGNvbGxlY3Rpb24sIG90aGVyd2lzZSB1cGRhdGUg
dGhlIG9yaWdpbmFsIGNvbGxlY3Rpb24uCisgIHZhciBub2RlID0gbm9kZXNbMF07CisgIHZhciBl
bmROb2RlID0gbm9kZXNbbm9kZXMubGVuZ3RoIC0gMV07CisgIHZhciBibG9ja05vZGVzID0gW25v
ZGVdOworCisgIGRvIHsKKyAgICBub2RlID0gbm9kZS5uZXh0U2libGluZzsKKyAgICBpZiAoIW5v
ZGUpIGJyZWFrOworICAgIGJsb2NrTm9kZXMucHVzaChub2RlKTsKKyAgfSB3aGlsZSAobm9kZSAh
PT0gZW5kTm9kZSk7CisKKyAgcmV0dXJuIGpxTGl0ZShibG9ja05vZGVzKTsKK30KKworCisvKioK
KyAqIENyZWF0ZXMgYSBuZXcgb2JqZWN0IHdpdGhvdXQgYSBwcm90b3R5cGUuIFRoaXMgb2JqZWN0
IGlzIHVzZWZ1bCBmb3IgbG9va3VwIHdpdGhvdXQgaGF2aW5nIHRvCisgKiBndWFyZCBhZ2FpbnN0
IHByb3RvdHlwaWNhbGx5IGluaGVyaXRlZCBwcm9wZXJ0aWVzIHZpYSBoYXNPd25Qcm9wZXJ0eS4K
KyAqCisgKiBSZWxhdGVkIG1pY3JvLWJlbmNobWFya3M6CisgKiAtIGh0dHA6Ly9qc3BlcmYuY29t
L29iamVjdC1jcmVhdGUyCisgKiAtIGh0dHA6Ly9qc3BlcmYuY29tL3Byb3RvLW1hcC1sb29rdXAv
MgorICogLSBodHRwOi8vanNwZXJmLmNvbS9mb3ItaW4tdnMtb2JqZWN0LWtleXMyCisgKgorICog
QHJldHVybnMge09iamVjdH0KKyAqLworZnVuY3Rpb24gY3JlYXRlTWFwKCkgeworICByZXR1cm4g
T2JqZWN0LmNyZWF0ZShudWxsKTsKK30KKwordmFyIE5PREVfVFlQRV9FTEVNRU5UID0gMTsKK3Zh
ciBOT0RFX1RZUEVfQVRUUklCVVRFID0gMjsKK3ZhciBOT0RFX1RZUEVfVEVYVCA9IDM7Cit2YXIg
Tk9ERV9UWVBFX0NPTU1FTlQgPSA4OwordmFyIE5PREVfVFlQRV9ET0NVTUVOVCA9IDk7Cit2YXIg
Tk9ERV9UWVBFX0RPQ1VNRU5UX0ZSQUdNRU5UID0gMTE7CisKKy8qKgorICogQG5nZG9jIHR5cGUK
KyAqIEBuYW1lIGFuZ3VsYXIuTW9kdWxlCisgKiBAbW9kdWxlIG5nCisgKiBAZGVzY3JpcHRpb24K
KyAqCisgKiBJbnRlcmZhY2UgZm9yIGNvbmZpZ3VyaW5nIGFuZ3VsYXIge0BsaW5rIGFuZ3VsYXIu
bW9kdWxlIG1vZHVsZXN9LgorICovCisKK2Z1bmN0aW9uIHNldHVwTW9kdWxlTG9hZGVyKHdpbmRv
dykgeworCisgIHZhciAkaW5qZWN0b3JNaW5FcnIgPSBtaW5FcnIoJyRpbmplY3RvcicpOworICB2
YXIgbmdNaW5FcnIgPSBtaW5FcnIoJ25nJyk7CisKKyAgZnVuY3Rpb24gZW5zdXJlKG9iaiwgbmFt
ZSwgZmFjdG9yeSkgeworICAgIHJldHVybiBvYmpbbmFtZV0gfHwgKG9ialtuYW1lXSA9IGZhY3Rv
cnkoKSk7CisgIH0KKworICB2YXIgYW5ndWxhciA9IGVuc3VyZSh3aW5kb3csICdhbmd1bGFyJywg
T2JqZWN0KTsKKworICAvLyBXZSBuZWVkIHRvIGV4cG9zZSBgYW5ndWxhci4kJG1pbkVycmAgdG8g
bW9kdWxlcyBzdWNoIGFzIGBuZ1Jlc291cmNlYCB0aGF0IHJlZmVyZW5jZSBpdCBkdXJpbmcgYm9v
dHN0cmFwCisgIGFuZ3VsYXIuJCRtaW5FcnIgPSBhbmd1bGFyLiQkbWluRXJyIHx8IG1pbkVycjsK
KworICByZXR1cm4gZW5zdXJlKGFuZ3VsYXIsICdtb2R1bGUnLCBmdW5jdGlvbigpIHsKKyAgICAv
KiogQHR5cGUge09iamVjdC48c3RyaW5nLCBhbmd1bGFyLk1vZHVsZT59ICovCisgICAgdmFyIG1v
ZHVsZXMgPSB7fTsKKworICAgIC8qKgorICAgICAqIEBuZ2RvYyBmdW5jdGlvbgorICAgICAqIEBu
YW1lIGFuZ3VsYXIubW9kdWxlCisgICAgICogQG1vZHVsZSBuZworICAgICAqIEBkZXNjcmlwdGlv
bgorICAgICAqCisgICAgICogVGhlIGBhbmd1bGFyLm1vZHVsZWAgaXMgYSBnbG9iYWwgcGxhY2Ug
Zm9yIGNyZWF0aW5nLCByZWdpc3RlcmluZyBhbmQgcmV0cmlldmluZyBBbmd1bGFyCisgICAgICog
bW9kdWxlcy4KKyAgICAgKiBBbGwgbW9kdWxlcyAoYW5ndWxhciBjb3JlIG9yIDNyZCBwYXJ0eSkg
dGhhdCBzaG91bGQgYmUgYXZhaWxhYmxlIHRvIGFuIGFwcGxpY2F0aW9uIG11c3QgYmUKKyAgICAg
KiByZWdpc3RlcmVkIHVzaW5nIHRoaXMgbWVjaGFuaXNtLgorICAgICAqCisgICAgICogV2hlbiBw
YXNzZWQgdHdvIG9yIG1vcmUgYXJndW1lbnRzLCBhIG5ldyBtb2R1bGUgaXMgY3JlYXRlZC4gIElm
IHBhc3NlZCBvbmx5IG9uZSBhcmd1bWVudCwgYW4KKyAgICAgKiBleGlzdGluZyBtb2R1bGUgKHRo
ZSBuYW1lIHBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYG1vZHVsZWApIGlzIHJldHJp
ZXZlZC4KKyAgICAgKgorICAgICAqCisgICAgICogIyBNb2R1bGUKKyAgICAgKgorICAgICAqIEEg
bW9kdWxlIGlzIGEgY29sbGVjdGlvbiBvZiBzZXJ2aWNlcywgZGlyZWN0aXZlcywgY29udHJvbGxl
cnMsIGZpbHRlcnMsIGFuZCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgorICAgICAqIGBhbmd1
bGFyLm1vZHVsZWAgaXMgdXNlZCB0byBjb25maWd1cmUgdGhlIHtAbGluayBhdXRvLiRpbmplY3Rv
ciAkaW5qZWN0b3J9LgorICAgICAqCisgICAgICogYGBganMKKyAgICAgKiAvLyBDcmVhdGUgYSBu
ZXcgbW9kdWxlCisgICAgICogdmFyIG15TW9kdWxlID0gYW5ndWxhci5tb2R1bGUoJ215TW9kdWxl
JywgW10pOworICAgICAqCisgICAgICogLy8gcmVnaXN0ZXIgYSBuZXcgc2VydmljZQorICAgICAq
IG15TW9kdWxlLnZhbHVlKCdhcHBOYW1lJywgJ015Q29vbEFwcCcpOworICAgICAqCisgICAgICog
Ly8gY29uZmlndXJlIGV4aXN0aW5nIHNlcnZpY2VzIGluc2lkZSBpbml0aWFsaXphdGlvbiBibG9j
a3MuCisgICAgICogbXlNb2R1bGUuY29uZmlnKFsnJGxvY2F0aW9uUHJvdmlkZXInLCBmdW5jdGlv
bigkbG9jYXRpb25Qcm92aWRlcikgeworICAgICAqICAgLy8gQ29uZmlndXJlIGV4aXN0aW5nIHBy
b3ZpZGVycworICAgICAqICAgJGxvY2F0aW9uUHJvdmlkZXIuaGFzaFByZWZpeCgnIScpOworICAg
ICAqIH1dKTsKKyAgICAgKiBgYGAKKyAgICAgKgorICAgICAqIFRoZW4geW91IGNhbiBjcmVhdGUg
YW4gaW5qZWN0b3IgYW5kIGxvYWQgeW91ciBtb2R1bGVzIGxpa2UgdGhpczoKKyAgICAgKgorICAg
ICAqIGBgYGpzCisgICAgICogdmFyIGluamVjdG9yID0gYW5ndWxhci5pbmplY3RvcihbJ25nJywg
J215TW9kdWxlJ10pCisgICAgICogYGBgCisgICAgICoKKyAgICAgKiBIb3dldmVyIGl0J3MgbW9y
ZSBsaWtlbHkgdGhhdCB5b3UnbGwganVzdCB1c2UKKyAgICAgKiB7QGxpbmsgbmcuZGlyZWN0aXZl
Om5nQXBwIG5nQXBwfSBvcgorICAgICAqIHtAbGluayBhbmd1bGFyLmJvb3RzdHJhcH0gdG8gc2lt
cGxpZnkgdGhpcyBwcm9jZXNzIGZvciB5b3UuCisgICAgICoKKyAgICAgKiBAcGFyYW0geyFzdHJp
bmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0byBjcmVhdGUgb3IgcmV0cmlldmUuCisg
ICAgICogQHBhcmFtIHshQXJyYXkuPHN0cmluZz49fSByZXF1aXJlcyBJZiBzcGVjaWZpZWQgdGhl
biBuZXcgbW9kdWxlIGlzIGJlaW5nIGNyZWF0ZWQuIElmCisgICAgICogICAgICAgIHVuc3BlY2lm
aWVkIHRoZW4gdGhlIG1vZHVsZSBpcyBiZWluZyByZXRyaWV2ZWQgZm9yIGZ1cnRoZXIgY29uZmln
dXJhdGlvbi4KKyAgICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY29uZmlnRm4gT3B0aW9uYWwgY29u
ZmlndXJhdGlvbiBmdW5jdGlvbiBmb3IgdGhlIG1vZHVsZS4gU2FtZSBhcworICAgICAqICAgICAg
ICB7QGxpbmsgYW5ndWxhci5Nb2R1bGUjY29uZmlnIE1vZHVsZSNjb25maWcoKX0uCisgICAgICog
QHJldHVybnMge21vZHVsZX0gbmV3IG1vZHVsZSB3aXRoIHRoZSB7QGxpbmsgYW5ndWxhci5Nb2R1
bGV9IGFwaS4KKyAgICAgKi8KKyAgICByZXR1cm4gZnVuY3Rpb24gbW9kdWxlKG5hbWUsIHJlcXVp
cmVzLCBjb25maWdGbikgeworICAgICAgdmFyIGFzc2VydE5vdEhhc093blByb3BlcnR5ID0gZnVu
Y3Rpb24obmFtZSwgY29udGV4dCkgeworICAgICAgICBpZiAobmFtZSA9PT0gJ2hhc093blByb3Bl
cnR5JykgeworICAgICAgICAgIHRocm93IG5nTWluRXJyKCdiYWRuYW1lJywgJ2hhc093blByb3Bl
cnR5IGlzIG5vdCBhIHZhbGlkIHswfSBuYW1lJywgY29udGV4dCk7CisgICAgICAgIH0KKyAgICAg
IH07CisKKyAgICAgIGFzc2VydE5vdEhhc093blByb3BlcnR5KG5hbWUsICdtb2R1bGUnKTsKKyAg
ICAgIGlmIChyZXF1aXJlcyAmJiBtb2R1bGVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7CisgICAg
ICAgIG1vZHVsZXNbbmFtZV0gPSBudWxsOworICAgICAgfQorICAgICAgcmV0dXJuIGVuc3VyZSht
b2R1bGVzLCBuYW1lLCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCFyZXF1aXJlcykgeworICAg
ICAgICAgIHRocm93ICRpbmplY3Rvck1pbkVycignbm9tb2QnLCAiTW9kdWxlICd7MH0nIGlzIG5v
dCBhdmFpbGFibGUhIFlvdSBlaXRoZXIgbWlzc3BlbGxlZCAiICsKKyAgICAgICAgICAgICAidGhl
IG1vZHVsZSBuYW1lIG9yIGZvcmdvdCB0byBsb2FkIGl0LiBJZiByZWdpc3RlcmluZyBhIG1vZHVs
ZSBlbnN1cmUgdGhhdCB5b3UgIiArCisgICAgICAgICAgICAgInNwZWNpZnkgdGhlIGRlcGVuZGVu
Y2llcyBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LiIsIG5hbWUpOworICAgICAgICB9CisKKyAgICAg
ICAgLyoqIEB0eXBlIHshQXJyYXkuPEFycmF5LjwqPj59ICovCisgICAgICAgIHZhciBpbnZva2VR
dWV1ZSA9IFtdOworCisgICAgICAgIC8qKiBAdHlwZSB7IUFycmF5LjxGdW5jdGlvbj59ICovCisg
ICAgICAgIHZhciBjb25maWdCbG9ja3MgPSBbXTsKKworICAgICAgICAvKiogQHR5cGUgeyFBcnJh
eS48RnVuY3Rpb24+fSAqLworICAgICAgICB2YXIgcnVuQmxvY2tzID0gW107CisKKyAgICAgICAg
dmFyIGNvbmZpZyA9IGludm9rZUxhdGVyKCckaW5qZWN0b3InLCAnaW52b2tlJywgJ3B1c2gnLCBj
b25maWdCbG9ja3MpOworCisgICAgICAgIC8qKiBAdHlwZSB7YW5ndWxhci5Nb2R1bGV9ICovCisg
ICAgICAgIHZhciBtb2R1bGVJbnN0YW5jZSA9IHsKKyAgICAgICAgICAvLyBQcml2YXRlIHN0YXRl
CisgICAgICAgICAgX2ludm9rZVF1ZXVlOiBpbnZva2VRdWV1ZSwKKyAgICAgICAgICBfY29uZmln
QmxvY2tzOiBjb25maWdCbG9ja3MsCisgICAgICAgICAgX3J1bkJsb2NrczogcnVuQmxvY2tzLAor
CisgICAgICAgICAgLyoqCisgICAgICAgICAgICogQG5nZG9jIHByb3BlcnR5CisgICAgICAgICAg
ICogQG5hbWUgYW5ndWxhci5Nb2R1bGUjcmVxdWlyZXMKKyAgICAgICAgICAgKiBAbW9kdWxlIG5n
CisgICAgICAgICAgICoKKyAgICAgICAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgICAgICAgKiBI
b2xkcyB0aGUgbGlzdCBvZiBtb2R1bGVzIHdoaWNoIHRoZSBpbmplY3RvciB3aWxsIGxvYWQgYmVm
b3JlIHRoZSBjdXJyZW50IG1vZHVsZSBpcworICAgICAgICAgICAqIGxvYWRlZC4KKyAgICAgICAg
ICAgKi8KKyAgICAgICAgICByZXF1aXJlczogcmVxdWlyZXMsCisKKyAgICAgICAgICAvKioKKyAg
ICAgICAgICAgKiBAbmdkb2MgcHJvcGVydHkKKyAgICAgICAgICAgKiBAbmFtZSBhbmd1bGFyLk1v
ZHVsZSNuYW1lCisgICAgICAgICAgICogQG1vZHVsZSBuZworICAgICAgICAgICAqCisgICAgICAg
ICAgICogQGRlc2NyaXB0aW9uCisgICAgICAgICAgICogTmFtZSBvZiB0aGUgbW9kdWxlLgorICAg
ICAgICAgICAqLworICAgICAgICAgIG5hbWU6IG5hbWUsCisKKworICAgICAgICAgIC8qKgorICAg
ICAgICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgICAgICAgKiBAbmFtZSBhbmd1bGFyLk1vZHVs
ZSNwcm92aWRlcgorICAgICAgICAgICAqIEBtb2R1bGUgbmcKKyAgICAgICAgICAgKiBAcGFyYW0g
e3N0cmluZ30gbmFtZSBzZXJ2aWNlIG5hbWUKKyAgICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9u
fSBwcm92aWRlclR5cGUgQ29uc3RydWN0aW9uIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBuZXcgaW5z
dGFuY2Ugb2YgdGhlCisgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlcnZpY2UuCisgICAgICAgICAgICogQGRlc2NyaXB0aW9uCisgICAgICAgICAgICogU2VlIHtA
bGluayBhdXRvLiRwcm92aWRlI3Byb3ZpZGVyICRwcm92aWRlLnByb3ZpZGVyKCl9LgorICAgICAg
ICAgICAqLworICAgICAgICAgIHByb3ZpZGVyOiBpbnZva2VMYXRlckFuZFNldE1vZHVsZU5hbWUo
JyRwcm92aWRlJywgJ3Byb3ZpZGVyJyksCisKKyAgICAgICAgICAvKioKKyAgICAgICAgICAgKiBA
bmdkb2MgbWV0aG9kCisgICAgICAgICAgICogQG5hbWUgYW5ndWxhci5Nb2R1bGUjZmFjdG9yeQor
ICAgICAgICAgICAqIEBtb2R1bGUgbmcKKyAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFt
ZSBzZXJ2aWNlIG5hbWUKKyAgICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm92aWRlckZ1
bmN0aW9uIEZ1bmN0aW9uIGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2Ugb2YgdGhlIHNlcnZpY2Uu
CisgICAgICAgICAgICogQGRlc2NyaXB0aW9uCisgICAgICAgICAgICogU2VlIHtAbGluayBhdXRv
LiRwcm92aWRlI2ZhY3RvcnkgJHByb3ZpZGUuZmFjdG9yeSgpfS4KKyAgICAgICAgICAgKi8KKyAg
ICAgICAgICBmYWN0b3J5OiBpbnZva2VMYXRlckFuZFNldE1vZHVsZU5hbWUoJyRwcm92aWRlJywg
J2ZhY3RvcnknKSwKKworICAgICAgICAgIC8qKgorICAgICAgICAgICAqIEBuZ2RvYyBtZXRob2QK
KyAgICAgICAgICAgKiBAbmFtZSBhbmd1bGFyLk1vZHVsZSNzZXJ2aWNlCisgICAgICAgICAgICog
QG1vZHVsZSBuZworICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIHNlcnZpY2UgbmFt
ZQorICAgICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbnN0cnVjdG9yIEEgY29uc3RydWN0
b3IgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGluc3RhbnRpYXRlZC4KKyAgICAgICAgICAgKiBAZGVz
Y3JpcHRpb24KKyAgICAgICAgICAgKiBTZWUge0BsaW5rIGF1dG8uJHByb3ZpZGUjc2VydmljZSAk
cHJvdmlkZS5zZXJ2aWNlKCl9LgorICAgICAgICAgICAqLworICAgICAgICAgIHNlcnZpY2U6IGlu
dm9rZUxhdGVyQW5kU2V0TW9kdWxlTmFtZSgnJHByb3ZpZGUnLCAnc2VydmljZScpLAorCisgICAg
ICAgICAgLyoqCisgICAgICAgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAgICAgICAqIEBuYW1l
IGFuZ3VsYXIuTW9kdWxlI3ZhbHVlCisgICAgICAgICAgICogQG1vZHVsZSBuZworICAgICAgICAg
ICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIHNlcnZpY2UgbmFtZQorICAgICAgICAgICAqIEBwYXJh
bSB7Kn0gb2JqZWN0IFNlcnZpY2UgaW5zdGFuY2Ugb2JqZWN0LgorICAgICAgICAgICAqIEBkZXNj
cmlwdGlvbgorICAgICAgICAgICAqIFNlZSB7QGxpbmsgYXV0by4kcHJvdmlkZSN2YWx1ZSAkcHJv
dmlkZS52YWx1ZSgpfS4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICB2YWx1ZTogaW52b2tlTGF0
ZXIoJyRwcm92aWRlJywgJ3ZhbHVlJyksCisKKyAgICAgICAgICAvKioKKyAgICAgICAgICAgKiBA
bmdkb2MgbWV0aG9kCisgICAgICAgICAgICogQG5hbWUgYW5ndWxhci5Nb2R1bGUjY29uc3RhbnQK
KyAgICAgICAgICAgKiBAbW9kdWxlIG5nCisgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5h
bWUgY29uc3RhbnQgbmFtZQorICAgICAgICAgICAqIEBwYXJhbSB7Kn0gb2JqZWN0IENvbnN0YW50
IHZhbHVlLgorICAgICAgICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAgICAgICAqIEJlY2F1c2Ug
dGhlIGNvbnN0YW50IGFyZSBmaXhlZCwgdGhleSBnZXQgYXBwbGllZCBiZWZvcmUgb3RoZXIgcHJv
dmlkZSBtZXRob2RzLgorICAgICAgICAgICAqIFNlZSB7QGxpbmsgYXV0by4kcHJvdmlkZSNjb25z
dGFudCAkcHJvdmlkZS5jb25zdGFudCgpfS4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICBjb25z
dGFudDogaW52b2tlTGF0ZXIoJyRwcm92aWRlJywgJ2NvbnN0YW50JywgJ3Vuc2hpZnQnKSwKKwor
ICAgICAgICAgICAvKioKKyAgICAgICAgICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICAgICAgICog
QG5hbWUgYW5ndWxhci5Nb2R1bGUjZGVjb3JhdG9yCisgICAgICAgICAgICogQG1vZHVsZSBuZwor
ICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgc2VydmljZSB0byBk
ZWNvcmF0ZS4KKyAgICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBUaGlzIGZ1bmN0aW9uIHdp
bGwgYmUgaW52b2tlZCB3aGVuIHRoZSBzZXJ2aWNlIG5lZWRzIHRvIGJlCisgICAgICAgICAgICog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZWQgYW5kIHNob3Vs
ZCByZXR1cm4gdGhlIGRlY29yYXRlZCBzZXJ2aWNlIGluc3RhbmNlLgorICAgICAgICAgICAqIEBk
ZXNjcmlwdGlvbgorICAgICAgICAgICAqIFNlZSB7QGxpbmsgYXV0by4kcHJvdmlkZSNkZWNvcmF0
b3IgJHByb3ZpZGUuZGVjb3JhdG9yKCl9LgorICAgICAgICAgICAqLworICAgICAgICAgIGRlY29y
YXRvcjogaW52b2tlTGF0ZXJBbmRTZXRNb2R1bGVOYW1lKCckcHJvdmlkZScsICdkZWNvcmF0b3In
KSwKKworICAgICAgICAgIC8qKgorICAgICAgICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgICAg
ICAgKiBAbmFtZSBhbmd1bGFyLk1vZHVsZSNhbmltYXRpb24KKyAgICAgICAgICAgKiBAbW9kdWxl
IG5nCisgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgYW5pbWF0aW9uIG5hbWUKKyAg
ICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBhbmltYXRpb25GYWN0b3J5IEZhY3RvcnkgZnVu
Y3Rpb24gZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZSBvZiBhbgorICAgICAgICAgICAqICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLgorICAgICAgICAgICAqIEBk
ZXNjcmlwdGlvbgorICAgICAgICAgICAqCisgICAgICAgICAgICogKipOT1RFKio6IGFuaW1hdGlv
bnMgdGFrZSBlZmZlY3Qgb25seSBpZiB0aGUgKipuZ0FuaW1hdGUqKiBtb2R1bGUgaXMgbG9hZGVk
LgorICAgICAgICAgICAqCisgICAgICAgICAgICoKKyAgICAgICAgICAgKiBEZWZpbmVzIGFuIGFu
aW1hdGlvbiBob29rIHRoYXQgY2FuIGJlIGxhdGVyIHVzZWQgd2l0aAorICAgICAgICAgICAqIHtA
bGluayAkYW5pbWF0ZSAkYW5pbWF0ZX0gc2VydmljZSBhbmQgZGlyZWN0aXZlcyB0aGF0IHVzZSB0
aGlzIHNlcnZpY2UuCisgICAgICAgICAgICoKKyAgICAgICAgICAgKiBgYGBqcworICAgICAgICAg
ICAqIG1vZHVsZS5hbmltYXRpb24oJy5hbmltYXRpb24tbmFtZScsIGZ1bmN0aW9uKCRpbmplY3Qx
LCAkaW5qZWN0MikgeworICAgICAgICAgICAqICAgcmV0dXJuIHsKKyAgICAgICAgICAgKiAgICAg
ZXZlbnROYW1lIDogZnVuY3Rpb24oZWxlbWVudCwgZG9uZSkgeworICAgICAgICAgICAqICAgICAg
IC8vY29kZSB0byBydW4gdGhlIGFuaW1hdGlvbgorICAgICAgICAgICAqICAgICAgIC8vb25jZSBj
b21wbGV0ZSwgdGhlbiBydW4gZG9uZSgpCisgICAgICAgICAgICogICAgICAgcmV0dXJuIGZ1bmN0
aW9uIGNhbmNlbGxhdGlvbkZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICAgICAgICAgKiAgICAgICAg
IC8vY29kZSB0byBjYW5jZWwgdGhlIGFuaW1hdGlvbgorICAgICAgICAgICAqICAgICAgIH0KKyAg
ICAgICAgICAgKiAgICAgfQorICAgICAgICAgICAqICAgfQorICAgICAgICAgICAqIH0pCisgICAg
ICAgICAgICogYGBgCisgICAgICAgICAgICoKKyAgICAgICAgICAgKiBTZWUge0BsaW5rIG5nLiRh
bmltYXRlUHJvdmlkZXIjcmVnaXN0ZXIgJGFuaW1hdGVQcm92aWRlci5yZWdpc3RlcigpfSBhbmQK
KyAgICAgICAgICAgKiB7QGxpbmsgbmdBbmltYXRlIG5nQW5pbWF0ZSBtb2R1bGV9IGZvciBtb3Jl
IGluZm9ybWF0aW9uLgorICAgICAgICAgICAqLworICAgICAgICAgIGFuaW1hdGlvbjogaW52b2tl
TGF0ZXJBbmRTZXRNb2R1bGVOYW1lKCckYW5pbWF0ZVByb3ZpZGVyJywgJ3JlZ2lzdGVyJyksCisK
KyAgICAgICAgICAvKioKKyAgICAgICAgICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICAgICAgICog
QG5hbWUgYW5ndWxhci5Nb2R1bGUjZmlsdGVyCisgICAgICAgICAgICogQG1vZHVsZSBuZworICAg
ICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIEZpbHRlciBuYW1lIC0gdGhpcyBtdXN0IGJl
IGEgdmFsaWQgYW5ndWxhciBleHByZXNzaW9uIGlkZW50aWZpZXIKKyAgICAgICAgICAgKiBAcGFy
YW0ge0Z1bmN0aW9ufSBmaWx0ZXJGYWN0b3J5IEZhY3RvcnkgZnVuY3Rpb24gZm9yIGNyZWF0aW5n
IG5ldyBpbnN0YW5jZSBvZiBmaWx0ZXIuCisgICAgICAgICAgICogQGRlc2NyaXB0aW9uCisgICAg
ICAgICAgICogU2VlIHtAbGluayBuZy4kZmlsdGVyUHJvdmlkZXIjcmVnaXN0ZXIgJGZpbHRlclBy
b3ZpZGVyLnJlZ2lzdGVyKCl9LgorICAgICAgICAgICAqCisgICAgICAgICAgICogPGRpdiBjbGFz
cz0iYWxlcnQgYWxlcnQtd2FybmluZyI+CisgICAgICAgICAgICogKipOb3RlOioqIEZpbHRlciBu
YW1lcyBtdXN0IGJlIHZhbGlkIGFuZ3VsYXIge0BsaW5rIGV4cHJlc3Npb259IGlkZW50aWZpZXJz
LCBzdWNoIGFzIGB1cHBlcmNhc2VgIG9yIGBvcmRlckJ5YC4KKyAgICAgICAgICAgKiBOYW1lcyB3
aXRoIHNwZWNpYWwgY2hhcmFjdGVycywgc3VjaCBhcyBoeXBoZW5zIGFuZCBkb3RzLCBhcmUgbm90
IGFsbG93ZWQuIElmIHlvdSB3aXNoIHRvIG5hbWVzcGFjZQorICAgICAgICAgICAqIHlvdXIgZmls
dGVycywgdGhlbiB5b3UgY2FuIHVzZSBjYXBpdGFsaXphdGlvbiAoYG15YXBwU3Vic2VjdGlvbkZp
bHRlcnhgKSBvciB1bmRlcnNjb3JlcworICAgICAgICAgICAqIChgbXlhcHBfc3Vic2VjdGlvbl9m
aWx0ZXJ4YCkuCisgICAgICAgICAgICogPC9kaXY+CisgICAgICAgICAgICovCisgICAgICAgICAg
ZmlsdGVyOiBpbnZva2VMYXRlckFuZFNldE1vZHVsZU5hbWUoJyRmaWx0ZXJQcm92aWRlcicsICdy
ZWdpc3RlcicpLAorCisgICAgICAgICAgLyoqCisgICAgICAgICAgICogQG5nZG9jIG1ldGhvZAor
ICAgICAgICAgICAqIEBuYW1lIGFuZ3VsYXIuTW9kdWxlI2NvbnRyb2xsZXIKKyAgICAgICAgICAg
KiBAbW9kdWxlIG5nCisgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fSBuYW1lIENv
bnRyb2xsZXIgbmFtZSwgb3IgYW4gb2JqZWN0IG1hcCBvZiBjb250cm9sbGVycyB3aGVyZSB0aGUK
KyAgICAgICAgICAgKiAgICBrZXlzIGFyZSB0aGUgbmFtZXMgYW5kIHRoZSB2YWx1ZXMgYXJlIHRo
ZSBjb25zdHJ1Y3RvcnMuCisgICAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29uc3RydWN0
b3IgQ29udHJvbGxlciBjb25zdHJ1Y3RvciBmdW5jdGlvbi4KKyAgICAgICAgICAgKiBAZGVzY3Jp
cHRpb24KKyAgICAgICAgICAgKiBTZWUge0BsaW5rIG5nLiRjb250cm9sbGVyUHJvdmlkZXIjcmVn
aXN0ZXIgJGNvbnRyb2xsZXJQcm92aWRlci5yZWdpc3RlcigpfS4KKyAgICAgICAgICAgKi8KKyAg
ICAgICAgICBjb250cm9sbGVyOiBpbnZva2VMYXRlckFuZFNldE1vZHVsZU5hbWUoJyRjb250cm9s
bGVyUHJvdmlkZXInLCAncmVnaXN0ZXInKSwKKworICAgICAgICAgIC8qKgorICAgICAgICAgICAq
IEBuZ2RvYyBtZXRob2QKKyAgICAgICAgICAgKiBAbmFtZSBhbmd1bGFyLk1vZHVsZSNkaXJlY3Rp
dmUKKyAgICAgICAgICAgKiBAbW9kdWxlIG5nCisgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd8
T2JqZWN0fSBuYW1lIERpcmVjdGl2ZSBuYW1lLCBvciBhbiBvYmplY3QgbWFwIG9mIGRpcmVjdGl2
ZXMgd2hlcmUgdGhlCisgICAgICAgICAgICogICAga2V5cyBhcmUgdGhlIG5hbWVzIGFuZCB0aGUg
dmFsdWVzIGFyZSB0aGUgZmFjdG9yaWVzLgorICAgICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259
IGRpcmVjdGl2ZUZhY3RvcnkgRmFjdG9yeSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgbmV3IGluc3Rh
bmNlIG9mCisgICAgICAgICAgICogZGlyZWN0aXZlcy4KKyAgICAgICAgICAgKiBAZGVzY3JpcHRp
b24KKyAgICAgICAgICAgKiBTZWUge0BsaW5rIG5nLiRjb21waWxlUHJvdmlkZXIjZGlyZWN0aXZl
ICRjb21waWxlUHJvdmlkZXIuZGlyZWN0aXZlKCl9LgorICAgICAgICAgICAqLworICAgICAgICAg
IGRpcmVjdGl2ZTogaW52b2tlTGF0ZXJBbmRTZXRNb2R1bGVOYW1lKCckY29tcGlsZVByb3ZpZGVy
JywgJ2RpcmVjdGl2ZScpLAorCisgICAgICAgICAgLyoqCisgICAgICAgICAgICogQG5nZG9jIG1l
dGhvZAorICAgICAgICAgICAqIEBuYW1lIGFuZ3VsYXIuTW9kdWxlI2NvbmZpZworICAgICAgICAg
ICAqIEBtb2R1bGUgbmcKKyAgICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb25maWdGbiBF
eGVjdXRlIHRoaXMgZnVuY3Rpb24gb24gbW9kdWxlIGxvYWQuIFVzZWZ1bCBmb3Igc2VydmljZQor
ICAgICAgICAgICAqICAgIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICogQGRlc2NyaXB0aW9u
CisgICAgICAgICAgICogVXNlIHRoaXMgbWV0aG9kIHRvIHJlZ2lzdGVyIHdvcmsgd2hpY2ggbmVl
ZHMgdG8gYmUgcGVyZm9ybWVkIG9uIG1vZHVsZSBsb2FkaW5nLgorICAgICAgICAgICAqIEZvciBt
b3JlIGFib3V0IGhvdyB0byBjb25maWd1cmUgc2VydmljZXMsIHNlZQorICAgICAgICAgICAqIHtA
bGluayBwcm92aWRlcnMjcHJvdmlkZXItcmVjaXBlIFByb3ZpZGVyIFJlY2lwZX0uCisgICAgICAg
ICAgICovCisgICAgICAgICAgY29uZmlnOiBjb25maWcsCisKKyAgICAgICAgICAvKioKKyAgICAg
ICAgICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICAgICAgICogQG5hbWUgYW5ndWxhci5Nb2R1bGUj
cnVuCisgICAgICAgICAgICogQG1vZHVsZSBuZworICAgICAgICAgICAqIEBwYXJhbSB7RnVuY3Rp
b259IGluaXRpYWxpemF0aW9uRm4gRXhlY3V0ZSB0aGlzIGZ1bmN0aW9uIGFmdGVyIGluamVjdG9y
IGNyZWF0aW9uLgorICAgICAgICAgICAqICAgIFVzZWZ1bCBmb3IgYXBwbGljYXRpb24gaW5pdGlh
bGl6YXRpb24uCisgICAgICAgICAgICogQGRlc2NyaXB0aW9uCisgICAgICAgICAgICogVXNlIHRo
aXMgbWV0aG9kIHRvIHJlZ2lzdGVyIHdvcmsgd2hpY2ggc2hvdWxkIGJlIHBlcmZvcm1lZCB3aGVu
IHRoZSBpbmplY3RvciBpcyBkb25lCisgICAgICAgICAgICogbG9hZGluZyBhbGwgbW9kdWxlcy4K
KyAgICAgICAgICAgKi8KKyAgICAgICAgICBydW46IGZ1bmN0aW9uKGJsb2NrKSB7CisgICAgICAg
ICAgICBydW5CbG9ja3MucHVzaChibG9jayk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGNvbmZpZ0ZuKSB7CisgICAgICAg
ICAgY29uZmlnKGNvbmZpZ0ZuKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtb2R1bGVJ
bnN0YW5jZTsKKworICAgICAgICAvKioKKyAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3Zp
ZGVyCisgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2QKKyAgICAgICAgICogQHBhcmFt
IHtTdHJpbmc9fSBpbnNlcnRNZXRob2QKKyAgICAgICAgICogQHJldHVybnMge2FuZ3VsYXIuTW9k
dWxlfQorICAgICAgICAgKi8KKyAgICAgICAgZnVuY3Rpb24gaW52b2tlTGF0ZXIocHJvdmlkZXIs
IG1ldGhvZCwgaW5zZXJ0TWV0aG9kLCBxdWV1ZSkgeworICAgICAgICAgIGlmICghcXVldWUpIHF1
ZXVlID0gaW52b2tlUXVldWU7CisgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgcXVldWVbaW5zZXJ0TWV0aG9kIHx8ICdwdXNoJ10oW3Byb3ZpZGVyLCBtZXRob2QsIGFy
Z3VtZW50c10pOworICAgICAgICAgICAgcmV0dXJuIG1vZHVsZUluc3RhbmNlOworICAgICAgICAg
IH07CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9
IHByb3ZpZGVyCisgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2QKKyAgICAgICAgICog
QHJldHVybnMge2FuZ3VsYXIuTW9kdWxlfQorICAgICAgICAgKi8KKyAgICAgICAgZnVuY3Rpb24g
aW52b2tlTGF0ZXJBbmRTZXRNb2R1bGVOYW1lKHByb3ZpZGVyLCBtZXRob2QpIHsKKyAgICAgICAg
ICByZXR1cm4gZnVuY3Rpb24ocmVjaXBlTmFtZSwgZmFjdG9yeUZ1bmN0aW9uKSB7CisgICAgICAg
ICAgICBpZiAoZmFjdG9yeUZ1bmN0aW9uICYmIGlzRnVuY3Rpb24oZmFjdG9yeUZ1bmN0aW9uKSkg
ZmFjdG9yeUZ1bmN0aW9uLiQkbW9kdWxlTmFtZSA9IG5hbWU7CisgICAgICAgICAgICBpbnZva2VR
dWV1ZS5wdXNoKFtwcm92aWRlciwgbWV0aG9kLCBhcmd1bWVudHNdKTsKKyAgICAgICAgICAgIHJl
dHVybiBtb2R1bGVJbnN0YW5jZTsKKyAgICAgICAgICB9OworICAgICAgICB9CisgICAgICB9KTsK
KyAgICB9OworICB9KTsKKworfQorCisvKiBnbG9iYWw6IHRvRGVidWdTdHJpbmc6IHRydWUgKi8K
KworZnVuY3Rpb24gc2VyaWFsaXplT2JqZWN0KG9iaikgeworICB2YXIgc2VlbiA9IFtdOworCisg
IHJldHVybiBKU09OLnN0cmluZ2lmeShvYmosIGZ1bmN0aW9uKGtleSwgdmFsKSB7CisgICAgdmFs
ID0gdG9Kc29uUmVwbGFjZXIoa2V5LCB2YWwpOworICAgIGlmIChpc09iamVjdCh2YWwpKSB7CisK
KyAgICAgIGlmIChzZWVuLmluZGV4T2YodmFsKSA+PSAwKSByZXR1cm4gJzw8YWxyZWFkeSBzZWVu
Pj4nOworCisgICAgICBzZWVuLnB1c2godmFsKTsKKyAgICB9CisgICAgcmV0dXJuIHZhbDsKKyAg
fSk7Cit9CisKK2Z1bmN0aW9uIHRvRGVidWdTdHJpbmcob2JqKSB7CisgIGlmICh0eXBlb2Ygb2Jq
ID09PSAnZnVuY3Rpb24nKSB7CisgICAgcmV0dXJuIG9iai50b1N0cmluZygpLnJlcGxhY2UoLyBc
e1tcc1xTXSokLywgJycpOworICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQn
KSB7CisgICAgcmV0dXJuICd1bmRlZmluZWQnOworICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogIT09
ICdzdHJpbmcnKSB7CisgICAgcmV0dXJuIHNlcmlhbGl6ZU9iamVjdChvYmopOworICB9CisgIHJl
dHVybiBvYmo7Cit9CisKKy8qIGdsb2JhbCBhbmd1bGFyTW9kdWxlOiB0cnVlLAorICB2ZXJzaW9u
OiB0cnVlLAorCisgICRMb2NhbGVQcm92aWRlciwKKyAgJENvbXBpbGVQcm92aWRlciwKKworICBo
dG1sQW5jaG9yRGlyZWN0aXZlLAorICBpbnB1dERpcmVjdGl2ZSwKKyAgaW5wdXREaXJlY3RpdmUs
CisgIGZvcm1EaXJlY3RpdmUsCisgIHNjcmlwdERpcmVjdGl2ZSwKKyAgc2VsZWN0RGlyZWN0aXZl
LAorICBzdHlsZURpcmVjdGl2ZSwKKyAgb3B0aW9uRGlyZWN0aXZlLAorICBuZ0JpbmREaXJlY3Rp
dmUsCisgIG5nQmluZEh0bWxEaXJlY3RpdmUsCisgIG5nQmluZFRlbXBsYXRlRGlyZWN0aXZlLAor
ICBuZ0NsYXNzRGlyZWN0aXZlLAorICBuZ0NsYXNzRXZlbkRpcmVjdGl2ZSwKKyAgbmdDbGFzc09k
ZERpcmVjdGl2ZSwKKyAgbmdDc3BEaXJlY3RpdmUsCisgIG5nQ2xvYWtEaXJlY3RpdmUsCisgIG5n
Q29udHJvbGxlckRpcmVjdGl2ZSwKKyAgbmdGb3JtRGlyZWN0aXZlLAorICBuZ0hpZGVEaXJlY3Rp
dmUsCisgIG5nSWZEaXJlY3RpdmUsCisgIG5nSW5jbHVkZURpcmVjdGl2ZSwKKyAgbmdJbmNsdWRl
RmlsbENvbnRlbnREaXJlY3RpdmUsCisgIG5nSW5pdERpcmVjdGl2ZSwKKyAgbmdOb25CaW5kYWJs
ZURpcmVjdGl2ZSwKKyAgbmdQbHVyYWxpemVEaXJlY3RpdmUsCisgIG5nUmVwZWF0RGlyZWN0aXZl
LAorICBuZ1Nob3dEaXJlY3RpdmUsCisgIG5nU3R5bGVEaXJlY3RpdmUsCisgIG5nU3dpdGNoRGly
ZWN0aXZlLAorICBuZ1N3aXRjaFdoZW5EaXJlY3RpdmUsCisgIG5nU3dpdGNoRGVmYXVsdERpcmVj
dGl2ZSwKKyAgbmdPcHRpb25zRGlyZWN0aXZlLAorICBuZ1RyYW5zY2x1ZGVEaXJlY3RpdmUsCisg
IG5nTW9kZWxEaXJlY3RpdmUsCisgIG5nTGlzdERpcmVjdGl2ZSwKKyAgbmdDaGFuZ2VEaXJlY3Rp
dmUsCisgIHBhdHRlcm5EaXJlY3RpdmUsCisgIHBhdHRlcm5EaXJlY3RpdmUsCisgIHJlcXVpcmVk
RGlyZWN0aXZlLAorICByZXF1aXJlZERpcmVjdGl2ZSwKKyAgbWlubGVuZ3RoRGlyZWN0aXZlLAor
ICBtaW5sZW5ndGhEaXJlY3RpdmUsCisgIG1heGxlbmd0aERpcmVjdGl2ZSwKKyAgbWF4bGVuZ3Ro
RGlyZWN0aXZlLAorICBuZ1ZhbHVlRGlyZWN0aXZlLAorICBuZ01vZGVsT3B0aW9uc0RpcmVjdGl2
ZSwKKyAgbmdBdHRyaWJ1dGVBbGlhc0RpcmVjdGl2ZXMsCisgIG5nRXZlbnREaXJlY3RpdmVzLAor
CisgICRBbmNob3JTY3JvbGxQcm92aWRlciwKKyAgJEFuaW1hdGVQcm92aWRlciwKKyAgJCRDb3Jl
QW5pbWF0ZVF1ZXVlUHJvdmlkZXIsCisgICQkQ29yZUFuaW1hdGVSdW5uZXJQcm92aWRlciwKKyAg
JEJyb3dzZXJQcm92aWRlciwKKyAgJENhY2hlRmFjdG9yeVByb3ZpZGVyLAorICAkQ29udHJvbGxl
clByb3ZpZGVyLAorICAkRG9jdW1lbnRQcm92aWRlciwKKyAgJEV4Y2VwdGlvbkhhbmRsZXJQcm92
aWRlciwKKyAgJEZpbHRlclByb3ZpZGVyLAorICAkSW50ZXJwb2xhdGVQcm92aWRlciwKKyAgJElu
dGVydmFsUHJvdmlkZXIsCisgICQkSGFzaE1hcFByb3ZpZGVyLAorICAkSHR0cFByb3ZpZGVyLAor
ICAkSHR0cFBhcmFtU2VyaWFsaXplclByb3ZpZGVyLAorICAkSHR0cFBhcmFtU2VyaWFsaXplckpR
TGlrZVByb3ZpZGVyLAorICAkSHR0cEJhY2tlbmRQcm92aWRlciwKKyAgJExvY2F0aW9uUHJvdmlk
ZXIsCisgICRMb2dQcm92aWRlciwKKyAgJFBhcnNlUHJvdmlkZXIsCisgICRSb290U2NvcGVQcm92
aWRlciwKKyAgJFFQcm92aWRlciwKKyAgJCRRUHJvdmlkZXIsCisgICQkU2FuaXRpemVVcmlQcm92
aWRlciwKKyAgJFNjZVByb3ZpZGVyLAorICAkU2NlRGVsZWdhdGVQcm92aWRlciwKKyAgJFNuaWZm
ZXJQcm92aWRlciwKKyAgJFRlbXBsYXRlQ2FjaGVQcm92aWRlciwKKyAgJFRlbXBsYXRlUmVxdWVz
dFByb3ZpZGVyLAorICAkJFRlc3RhYmlsaXR5UHJvdmlkZXIsCisgICRUaW1lb3V0UHJvdmlkZXIs
CisgICQkUkFGUHJvdmlkZXIsCisgICRXaW5kb3dQcm92aWRlciwKKyAgJCRqcUxpdGVQcm92aWRl
ciwKKyAgJCRDb29raWVSZWFkZXJQcm92aWRlcgorKi8KKworCisvKioKKyAqIEBuZ2RvYyBvYmpl
Y3QKKyAqIEBuYW1lIGFuZ3VsYXIudmVyc2lvbgorICogQG1vZHVsZSBuZworICogQGRlc2NyaXB0
aW9uCisgKiBBbiBvYmplY3QgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3Vy
cmVudCBBbmd1bGFySlMgdmVyc2lvbi4gVGhpcyBvYmplY3QgaGFzIHRoZQorICogZm9sbG93aW5n
IHByb3BlcnRpZXM6CisgKgorICogLSBgZnVsbGAg4oCTIGB7c3RyaW5nfWAg4oCTIEZ1bGwgdmVy
c2lvbiBzdHJpbmcsIHN1Y2ggYXMgIjAuOS4xOCIuCisgKiAtIGBtYWpvcmAg4oCTIGB7bnVtYmVy
fWAg4oCTIE1ham9yIHZlcnNpb24gbnVtYmVyLCBzdWNoIGFzICIwIi4KKyAqIC0gYG1pbm9yYCDi
gJMgYHtudW1iZXJ9YCDigJMgTWlub3IgdmVyc2lvbiBudW1iZXIsIHN1Y2ggYXMgIjkiLgorICog
LSBgZG90YCDigJMgYHtudW1iZXJ9YCDigJMgRG90IHZlcnNpb24gbnVtYmVyLCBzdWNoIGFzICIx
OCIuCisgKiAtIGBjb2RlTmFtZWAg4oCTIGB7c3RyaW5nfWAg4oCTIENvZGUgbmFtZSBvZiB0aGUg
cmVsZWFzZSwgc3VjaCBhcyAiamlnZ2xpbmctYXJtZmF0Ii4KKyAqLwordmFyIHZlcnNpb24gPSB7
CisgIGZ1bGw6ICcxLjQuMycsICAgIC8vIGFsbCBvZiB0aGVzZSBwbGFjZWhvbGRlciBzdHJpbmdz
IHdpbGwgYmUgcmVwbGFjZWQgYnkgZ3J1bnQncworICBtYWpvcjogMSwgICAgLy8gcGFja2FnZSB0
YXNrCisgIG1pbm9yOiA0LAorICBkb3Q6IDMsCisgIGNvZGVOYW1lOiAnZm9hbS1hY2NlbGVyYXRp
b24nCit9OworCisKK2Z1bmN0aW9uIHB1Ymxpc2hFeHRlcm5hbEFQSShhbmd1bGFyKSB7CisgIGV4
dGVuZChhbmd1bGFyLCB7CisgICAgJ2Jvb3RzdHJhcCc6IGJvb3RzdHJhcCwKKyAgICAnY29weSc6
IGNvcHksCisgICAgJ2V4dGVuZCc6IGV4dGVuZCwKKyAgICAnbWVyZ2UnOiBtZXJnZSwKKyAgICAn
ZXF1YWxzJzogZXF1YWxzLAorICAgICdlbGVtZW50JzoganFMaXRlLAorICAgICdmb3JFYWNoJzog
Zm9yRWFjaCwKKyAgICAnaW5qZWN0b3InOiBjcmVhdGVJbmplY3RvciwKKyAgICAnbm9vcCc6IG5v
b3AsCisgICAgJ2JpbmQnOiBiaW5kLAorICAgICd0b0pzb24nOiB0b0pzb24sCisgICAgJ2Zyb21K
c29uJzogZnJvbUpzb24sCisgICAgJ2lkZW50aXR5JzogaWRlbnRpdHksCisgICAgJ2lzVW5kZWZp
bmVkJzogaXNVbmRlZmluZWQsCisgICAgJ2lzRGVmaW5lZCc6IGlzRGVmaW5lZCwKKyAgICAnaXNT
dHJpbmcnOiBpc1N0cmluZywKKyAgICAnaXNGdW5jdGlvbic6IGlzRnVuY3Rpb24sCisgICAgJ2lz
T2JqZWN0JzogaXNPYmplY3QsCisgICAgJ2lzTnVtYmVyJzogaXNOdW1iZXIsCisgICAgJ2lzRWxl
bWVudCc6IGlzRWxlbWVudCwKKyAgICAnaXNBcnJheSc6IGlzQXJyYXksCisgICAgJ3ZlcnNpb24n
OiB2ZXJzaW9uLAorICAgICdpc0RhdGUnOiBpc0RhdGUsCisgICAgJ2xvd2VyY2FzZSc6IGxvd2Vy
Y2FzZSwKKyAgICAndXBwZXJjYXNlJzogdXBwZXJjYXNlLAorICAgICdjYWxsYmFja3MnOiB7Y291
bnRlcjogMH0sCisgICAgJ2dldFRlc3RhYmlsaXR5JzogZ2V0VGVzdGFiaWxpdHksCisgICAgJyQk
bWluRXJyJzogbWluRXJyLAorICAgICckJGNzcCc6IGNzcCwKKyAgICAncmVsb2FkV2l0aERlYnVn
SW5mbyc6IHJlbG9hZFdpdGhEZWJ1Z0luZm8KKyAgfSk7CisKKyAgYW5ndWxhck1vZHVsZSA9IHNl
dHVwTW9kdWxlTG9hZGVyKHdpbmRvdyk7CisgIHRyeSB7CisgICAgYW5ndWxhck1vZHVsZSgnbmdM
b2NhbGUnKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGFuZ3VsYXJNb2R1bGUoJ25nTG9jYWxlJywg
W10pLnByb3ZpZGVyKCckbG9jYWxlJywgJExvY2FsZVByb3ZpZGVyKTsKKyAgfQorCisgIGFuZ3Vs
YXJNb2R1bGUoJ25nJywgWyduZ0xvY2FsZSddLCBbJyRwcm92aWRlJywKKyAgICBmdW5jdGlvbiBu
Z01vZHVsZSgkcHJvdmlkZSkgeworICAgICAgLy8gJCRzYW5pdGl6ZVVyaVByb3ZpZGVyIG5lZWRz
IHRvIGJlIGJlZm9yZSAkY29tcGlsZVByb3ZpZGVyIGFzIGl0IGlzIHVzZWQgYnkgaXQuCisgICAg
ICAkcHJvdmlkZS5wcm92aWRlcih7CisgICAgICAgICQkc2FuaXRpemVVcmk6ICQkU2FuaXRpemVV
cmlQcm92aWRlcgorICAgICAgfSk7CisgICAgICAkcHJvdmlkZS5wcm92aWRlcignJGNvbXBpbGUn
LCAkQ29tcGlsZVByb3ZpZGVyKS4KKyAgICAgICAgZGlyZWN0aXZlKHsKKyAgICAgICAgICAgIGE6
IGh0bWxBbmNob3JEaXJlY3RpdmUsCisgICAgICAgICAgICBpbnB1dDogaW5wdXREaXJlY3RpdmUs
CisgICAgICAgICAgICB0ZXh0YXJlYTogaW5wdXREaXJlY3RpdmUsCisgICAgICAgICAgICBmb3Jt
OiBmb3JtRGlyZWN0aXZlLAorICAgICAgICAgICAgc2NyaXB0OiBzY3JpcHREaXJlY3RpdmUsCisg
ICAgICAgICAgICBzZWxlY3Q6IHNlbGVjdERpcmVjdGl2ZSwKKyAgICAgICAgICAgIHN0eWxlOiBz
dHlsZURpcmVjdGl2ZSwKKyAgICAgICAgICAgIG9wdGlvbjogb3B0aW9uRGlyZWN0aXZlLAorICAg
ICAgICAgICAgbmdCaW5kOiBuZ0JpbmREaXJlY3RpdmUsCisgICAgICAgICAgICBuZ0JpbmRIdG1s
OiBuZ0JpbmRIdG1sRGlyZWN0aXZlLAorICAgICAgICAgICAgbmdCaW5kVGVtcGxhdGU6IG5nQmlu
ZFRlbXBsYXRlRGlyZWN0aXZlLAorICAgICAgICAgICAgbmdDbGFzczogbmdDbGFzc0RpcmVjdGl2
ZSwKKyAgICAgICAgICAgIG5nQ2xhc3NFdmVuOiBuZ0NsYXNzRXZlbkRpcmVjdGl2ZSwKKyAgICAg
ICAgICAgIG5nQ2xhc3NPZGQ6IG5nQ2xhc3NPZGREaXJlY3RpdmUsCisgICAgICAgICAgICBuZ0Ns
b2FrOiBuZ0Nsb2FrRGlyZWN0aXZlLAorICAgICAgICAgICAgbmdDb250cm9sbGVyOiBuZ0NvbnRy
b2xsZXJEaXJlY3RpdmUsCisgICAgICAgICAgICBuZ0Zvcm06IG5nRm9ybURpcmVjdGl2ZSwKKyAg
ICAgICAgICAgIG5nSGlkZTogbmdIaWRlRGlyZWN0aXZlLAorICAgICAgICAgICAgbmdJZjogbmdJ
ZkRpcmVjdGl2ZSwKKyAgICAgICAgICAgIG5nSW5jbHVkZTogbmdJbmNsdWRlRGlyZWN0aXZlLAor
ICAgICAgICAgICAgbmdJbml0OiBuZ0luaXREaXJlY3RpdmUsCisgICAgICAgICAgICBuZ05vbkJp
bmRhYmxlOiBuZ05vbkJpbmRhYmxlRGlyZWN0aXZlLAorICAgICAgICAgICAgbmdQbHVyYWxpemU6
IG5nUGx1cmFsaXplRGlyZWN0aXZlLAorICAgICAgICAgICAgbmdSZXBlYXQ6IG5nUmVwZWF0RGly
ZWN0aXZlLAorICAgICAgICAgICAgbmdTaG93OiBuZ1Nob3dEaXJlY3RpdmUsCisgICAgICAgICAg
ICBuZ1N0eWxlOiBuZ1N0eWxlRGlyZWN0aXZlLAorICAgICAgICAgICAgbmdTd2l0Y2g6IG5nU3dp
dGNoRGlyZWN0aXZlLAorICAgICAgICAgICAgbmdTd2l0Y2hXaGVuOiBuZ1N3aXRjaFdoZW5EaXJl
Y3RpdmUsCisgICAgICAgICAgICBuZ1N3aXRjaERlZmF1bHQ6IG5nU3dpdGNoRGVmYXVsdERpcmVj
dGl2ZSwKKyAgICAgICAgICAgIG5nT3B0aW9uczogbmdPcHRpb25zRGlyZWN0aXZlLAorICAgICAg
ICAgICAgbmdUcmFuc2NsdWRlOiBuZ1RyYW5zY2x1ZGVEaXJlY3RpdmUsCisgICAgICAgICAgICBu
Z01vZGVsOiBuZ01vZGVsRGlyZWN0aXZlLAorICAgICAgICAgICAgbmdMaXN0OiBuZ0xpc3REaXJl
Y3RpdmUsCisgICAgICAgICAgICBuZ0NoYW5nZTogbmdDaGFuZ2VEaXJlY3RpdmUsCisgICAgICAg
ICAgICBwYXR0ZXJuOiBwYXR0ZXJuRGlyZWN0aXZlLAorICAgICAgICAgICAgbmdQYXR0ZXJuOiBw
YXR0ZXJuRGlyZWN0aXZlLAorICAgICAgICAgICAgcmVxdWlyZWQ6IHJlcXVpcmVkRGlyZWN0aXZl
LAorICAgICAgICAgICAgbmdSZXF1aXJlZDogcmVxdWlyZWREaXJlY3RpdmUsCisgICAgICAgICAg
ICBtaW5sZW5ndGg6IG1pbmxlbmd0aERpcmVjdGl2ZSwKKyAgICAgICAgICAgIG5nTWlubGVuZ3Ro
OiBtaW5sZW5ndGhEaXJlY3RpdmUsCisgICAgICAgICAgICBtYXhsZW5ndGg6IG1heGxlbmd0aERp
cmVjdGl2ZSwKKyAgICAgICAgICAgIG5nTWF4bGVuZ3RoOiBtYXhsZW5ndGhEaXJlY3RpdmUsCisg
ICAgICAgICAgICBuZ1ZhbHVlOiBuZ1ZhbHVlRGlyZWN0aXZlLAorICAgICAgICAgICAgbmdNb2Rl
bE9wdGlvbnM6IG5nTW9kZWxPcHRpb25zRGlyZWN0aXZlCisgICAgICAgIH0pLgorICAgICAgICBk
aXJlY3RpdmUoeworICAgICAgICAgIG5nSW5jbHVkZTogbmdJbmNsdWRlRmlsbENvbnRlbnREaXJl
Y3RpdmUKKyAgICAgICAgfSkuCisgICAgICAgIGRpcmVjdGl2ZShuZ0F0dHJpYnV0ZUFsaWFzRGly
ZWN0aXZlcykuCisgICAgICAgIGRpcmVjdGl2ZShuZ0V2ZW50RGlyZWN0aXZlcyk7CisgICAgICAk
cHJvdmlkZS5wcm92aWRlcih7CisgICAgICAgICRhbmNob3JTY3JvbGw6ICRBbmNob3JTY3JvbGxQ
cm92aWRlciwKKyAgICAgICAgJGFuaW1hdGU6ICRBbmltYXRlUHJvdmlkZXIsCisgICAgICAgICQk
YW5pbWF0ZVF1ZXVlOiAkJENvcmVBbmltYXRlUXVldWVQcm92aWRlciwKKyAgICAgICAgJCRBbmlt
YXRlUnVubmVyOiAkJENvcmVBbmltYXRlUnVubmVyUHJvdmlkZXIsCisgICAgICAgICRicm93c2Vy
OiAkQnJvd3NlclByb3ZpZGVyLAorICAgICAgICAkY2FjaGVGYWN0b3J5OiAkQ2FjaGVGYWN0b3J5
UHJvdmlkZXIsCisgICAgICAgICRjb250cm9sbGVyOiAkQ29udHJvbGxlclByb3ZpZGVyLAorICAg
ICAgICAkZG9jdW1lbnQ6ICREb2N1bWVudFByb3ZpZGVyLAorICAgICAgICAkZXhjZXB0aW9uSGFu
ZGxlcjogJEV4Y2VwdGlvbkhhbmRsZXJQcm92aWRlciwKKyAgICAgICAgJGZpbHRlcjogJEZpbHRl
clByb3ZpZGVyLAorICAgICAgICAkaW50ZXJwb2xhdGU6ICRJbnRlcnBvbGF0ZVByb3ZpZGVyLAor
ICAgICAgICAkaW50ZXJ2YWw6ICRJbnRlcnZhbFByb3ZpZGVyLAorICAgICAgICAkaHR0cDogJEh0
dHBQcm92aWRlciwKKyAgICAgICAgJGh0dHBQYXJhbVNlcmlhbGl6ZXI6ICRIdHRwUGFyYW1TZXJp
YWxpemVyUHJvdmlkZXIsCisgICAgICAgICRodHRwUGFyYW1TZXJpYWxpemVySlFMaWtlOiAkSHR0
cFBhcmFtU2VyaWFsaXplckpRTGlrZVByb3ZpZGVyLAorICAgICAgICAkaHR0cEJhY2tlbmQ6ICRI
dHRwQmFja2VuZFByb3ZpZGVyLAorICAgICAgICAkbG9jYXRpb246ICRMb2NhdGlvblByb3ZpZGVy
LAorICAgICAgICAkbG9nOiAkTG9nUHJvdmlkZXIsCisgICAgICAgICRwYXJzZTogJFBhcnNlUHJv
dmlkZXIsCisgICAgICAgICRyb290U2NvcGU6ICRSb290U2NvcGVQcm92aWRlciwKKyAgICAgICAg
JHE6ICRRUHJvdmlkZXIsCisgICAgICAgICQkcTogJCRRUHJvdmlkZXIsCisgICAgICAgICRzY2U6
ICRTY2VQcm92aWRlciwKKyAgICAgICAgJHNjZURlbGVnYXRlOiAkU2NlRGVsZWdhdGVQcm92aWRl
ciwKKyAgICAgICAgJHNuaWZmZXI6ICRTbmlmZmVyUHJvdmlkZXIsCisgICAgICAgICR0ZW1wbGF0
ZUNhY2hlOiAkVGVtcGxhdGVDYWNoZVByb3ZpZGVyLAorICAgICAgICAkdGVtcGxhdGVSZXF1ZXN0
OiAkVGVtcGxhdGVSZXF1ZXN0UHJvdmlkZXIsCisgICAgICAgICQkdGVzdGFiaWxpdHk6ICQkVGVz
dGFiaWxpdHlQcm92aWRlciwKKyAgICAgICAgJHRpbWVvdXQ6ICRUaW1lb3V0UHJvdmlkZXIsCisg
ICAgICAgICR3aW5kb3c6ICRXaW5kb3dQcm92aWRlciwKKyAgICAgICAgJCRyQUY6ICQkUkFGUHJv
dmlkZXIsCisgICAgICAgICQkanFMaXRlOiAkJGpxTGl0ZVByb3ZpZGVyLAorICAgICAgICAkJEhh
c2hNYXA6ICQkSGFzaE1hcFByb3ZpZGVyLAorICAgICAgICAkJGNvb2tpZVJlYWRlcjogJCRDb29r
aWVSZWFkZXJQcm92aWRlcgorICAgICAgfSk7CisgICAgfQorICBdKTsKK30KKworLyogKiAqICog
KiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAq
ICogKiAqICogKgorICogICAgIEFueSBjb21taXRzIHRvIHRoaXMgZmlsZSBzaG91bGQgYmUgcmV2
aWV3ZWQgd2l0aCBzZWN1cml0eSBpbiBtaW5kLiAgKgorICogICBDaGFuZ2VzIHRvIHRoaXMgZmls
ZSBjYW4gcG90ZW50aWFsbHkgY3JlYXRlIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gKgorICog
ICAgICAgICAgQW4gYXBwcm92YWwgZnJvbSAyIENvcmUgbWVtYmVycyB3aXRoIGhpc3Rvcnkgb2Yg
bW9kaWZ5aW5nICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBmaWxlIGlz
IHJlcXVpcmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KgorICogIERvZXMgdGhlIGNoYW5nZSBzb21laG93IGFsbG93IGZvciBhcmJpdHJhcnkgamF2YXNj
cmlwdCB0byBiZSBleGVjdXRlZD8gKgorICogICAgT3IgYWxsb3dzIGZvciBzb21lb25lIHRvIGNo
YW5nZSB0aGUgcHJvdG90eXBlIG9mIGJ1aWx0LWluIG9iamVjdHM/ICAgKgorICogICAgIE9yIGdp
dmVzIHVuZGVzaXJlZCBhY2Nlc3MgdG8gdmFyaWFibGVzIGxpa2VzIGRvY3VtZW50IG9yIHdpbmRv
dz8gICAgKgorICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAq
ICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KKworLyogZ2xvYmFsIEpRTGl0ZVByb3RvdHlw
ZTogdHJ1ZSwKKyAgYWRkRXZlbnRMaXN0ZW5lckZuOiB0cnVlLAorICByZW1vdmVFdmVudExpc3Rl
bmVyRm46IHRydWUsCisgIEJPT0xFQU5fQVRUUjogdHJ1ZSwKKyAgQUxJQVNFRF9BVFRSOiB0cnVl
LAorKi8KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy9KUUxpdGUKKy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLyoqCisgKiBAbmdkb2MgZnVuY3Rp
b24KKyAqIEBuYW1lIGFuZ3VsYXIuZWxlbWVudAorICogQG1vZHVsZSBuZworICogQGtpbmQgZnVu
Y3Rpb24KKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFdyYXBzIGEgcmF3IERPTSBlbGVtZW50IG9y
IEhUTUwgc3RyaW5nIGFzIGEgW2pRdWVyeV0oaHR0cDovL2pxdWVyeS5jb20pIGVsZW1lbnQuCisg
KgorICogSWYgalF1ZXJ5IGlzIGF2YWlsYWJsZSwgYGFuZ3VsYXIuZWxlbWVudGAgaXMgYW4gYWxp
YXMgZm9yIHRoZQorICogW2pRdWVyeV0oaHR0cDovL2FwaS5qcXVlcnkuY29tL2pRdWVyeS8pIGZ1
bmN0aW9uLiBJZiBqUXVlcnkgaXMgbm90IGF2YWlsYWJsZSwgYGFuZ3VsYXIuZWxlbWVudGAKKyAq
IGRlbGVnYXRlcyB0byBBbmd1bGFyJ3MgYnVpbHQtaW4gc3Vic2V0IG9mIGpRdWVyeSwgY2FsbGVk
ICJqUXVlcnkgbGl0ZSIgb3IgImpxTGl0ZS4iCisgKgorICogPGRpdiBjbGFzcz0iYWxlcnQgYWxl
cnQtc3VjY2VzcyI+anFMaXRlIGlzIGEgdGlueSwgQVBJLWNvbXBhdGlibGUgc3Vic2V0IG9mIGpR
dWVyeSB0aGF0IGFsbG93cworICogQW5ndWxhciB0byBtYW5pcHVsYXRlIHRoZSBET00gaW4gYSBj
cm9zcy1icm93c2VyIGNvbXBhdGlibGUgd2F5LiAqKmpxTGl0ZSoqIGltcGxlbWVudHMgb25seSB0
aGUgbW9zdAorICogY29tbW9ubHkgbmVlZGVkIGZ1bmN0aW9uYWxpdHkgd2l0aCB0aGUgZ29hbCBv
ZiBoYXZpbmcgYSB2ZXJ5IHNtYWxsIGZvb3RwcmludC48L2Rpdj4KKyAqCisgKiBUbyB1c2UgYGpR
dWVyeWAsIHNpbXBseSBlbnN1cmUgaXQgaXMgbG9hZGVkIGJlZm9yZSB0aGUgYGFuZ3VsYXIuanNg
IGZpbGUuCisgKgorICogPGRpdiBjbGFzcz0iYWxlcnQiPioqTm90ZToqKiBhbGwgZWxlbWVudCBy
ZWZlcmVuY2VzIGluIEFuZ3VsYXIgYXJlIGFsd2F5cyB3cmFwcGVkIHdpdGggalF1ZXJ5IG9yCisg
KiBqcUxpdGU7IHRoZXkgYXJlIG5ldmVyIHJhdyBET00gcmVmZXJlbmNlcy48L2Rpdj4KKyAqCisg
KiAjIyBBbmd1bGFyJ3MganFMaXRlCisgKiBqcUxpdGUgcHJvdmlkZXMgb25seSB0aGUgZm9sbG93
aW5nIGpRdWVyeSBtZXRob2RzOgorICoKKyAqIC0gW2BhZGRDbGFzcygpYF0oaHR0cDovL2FwaS5q
cXVlcnkuY29tL2FkZENsYXNzLykKKyAqIC0gW2BhZnRlcigpYF0oaHR0cDovL2FwaS5qcXVlcnku
Y29tL2FmdGVyLykKKyAqIC0gW2BhcHBlbmQoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9hcHBl
bmQvKQorICogLSBbYGF0dHIoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9hdHRyLykgLSBEb2Vz
IG5vdCBzdXBwb3J0IGZ1bmN0aW9ucyBhcyBwYXJhbWV0ZXJzCisgKiAtIFtgYmluZCgpYF0oaHR0
cDovL2FwaS5qcXVlcnkuY29tL2JpbmQvKSAtIERvZXMgbm90IHN1cHBvcnQgbmFtZXNwYWNlcywg
c2VsZWN0b3JzIG9yIGV2ZW50RGF0YQorICogLSBbYGNoaWxkcmVuKClgXShodHRwOi8vYXBpLmpx
dWVyeS5jb20vY2hpbGRyZW4vKSAtIERvZXMgbm90IHN1cHBvcnQgc2VsZWN0b3JzCisgKiAtIFtg
Y2xvbmUoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9jbG9uZS8pCisgKiAtIFtgY29udGVudHMo
KWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9jb250ZW50cy8pCisgKiAtIFtgY3NzKClgXShodHRw
Oi8vYXBpLmpxdWVyeS5jb20vY3NzLykgLSBPbmx5IHJldHJpZXZlcyBpbmxpbmUtc3R5bGVzLCBk
b2VzIG5vdCBjYWxsIGBnZXRDb21wdXRlZFN0eWxlKClgLiBBcyBhIHNldHRlciwgZG9lcyBub3Qg
Y29udmVydCBudW1iZXJzIHRvIHN0cmluZ3Mgb3IgYXBwZW5kICdweCcuCisgKiAtIFtgZGF0YSgp
YF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL2RhdGEvKQorICogLSBbYGRldGFjaCgpYF0oaHR0cDov
L2FwaS5qcXVlcnkuY29tL2RldGFjaC8pCisgKiAtIFtgZW1wdHkoKWBdKGh0dHA6Ly9hcGkuanF1
ZXJ5LmNvbS9lbXB0eS8pCisgKiAtIFtgZXEoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9lcS8p
CisgKiAtIFtgZmluZCgpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL2ZpbmQvKSAtIExpbWl0ZWQg
dG8gbG9va3VwcyBieSB0YWcgbmFtZQorICogLSBbYGhhc0NsYXNzKClgXShodHRwOi8vYXBpLmpx
dWVyeS5jb20vaGFzQ2xhc3MvKQorICogLSBbYGh0bWwoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNv
bS9odG1sLykKKyAqIC0gW2BuZXh0KClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vbmV4dC8pIC0g
RG9lcyBub3Qgc3VwcG9ydCBzZWxlY3RvcnMKKyAqIC0gW2BvbigpYF0oaHR0cDovL2FwaS5qcXVl
cnkuY29tL29uLykgLSBEb2VzIG5vdCBzdXBwb3J0IG5hbWVzcGFjZXMsIHNlbGVjdG9ycyBvciBl
dmVudERhdGEKKyAqIC0gW2BvZmYoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9vZmYvKSAtIERv
ZXMgbm90IHN1cHBvcnQgbmFtZXNwYWNlcyBvciBzZWxlY3RvcnMKKyAqIC0gW2BvbmUoKWBdKGh0
dHA6Ly9hcGkuanF1ZXJ5LmNvbS9vbmUvKSAtIERvZXMgbm90IHN1cHBvcnQgbmFtZXNwYWNlcyBv
ciBzZWxlY3RvcnMKKyAqIC0gW2BwYXJlbnQoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9wYXJl
bnQvKSAtIERvZXMgbm90IHN1cHBvcnQgc2VsZWN0b3JzCisgKiAtIFtgcHJlcGVuZCgpYF0oaHR0
cDovL2FwaS5qcXVlcnkuY29tL3ByZXBlbmQvKQorICogLSBbYHByb3AoKWBdKGh0dHA6Ly9hcGku
anF1ZXJ5LmNvbS9wcm9wLykKKyAqIC0gW2ByZWFkeSgpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29t
L3JlYWR5LykKKyAqIC0gW2ByZW1vdmUoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9yZW1vdmUv
KQorICogLSBbYHJlbW92ZUF0dHIoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9yZW1vdmVBdHRy
LykKKyAqIC0gW2ByZW1vdmVDbGFzcygpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL3JlbW92ZUNs
YXNzLykKKyAqIC0gW2ByZW1vdmVEYXRhKClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vcmVtb3Zl
RGF0YS8pCisgKiAtIFtgcmVwbGFjZVdpdGgoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9yZXBs
YWNlV2l0aC8pCisgKiAtIFtgdGV4dCgpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL3RleHQvKQor
ICogLSBbYHRvZ2dsZUNsYXNzKClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vdG9nZ2xlQ2xhc3Mv
KQorICogLSBbYHRyaWdnZXJIYW5kbGVyKClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vdHJpZ2dl
ckhhbmRsZXIvKSAtIFBhc3NlcyBhIGR1bW15IGV2ZW50IG9iamVjdCB0byBoYW5kbGVycy4KKyAq
IC0gW2B1bmJpbmQoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS91bmJpbmQvKSAtIERvZXMgbm90
IHN1cHBvcnQgbmFtZXNwYWNlcworICogLSBbYHZhbCgpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29t
L3ZhbC8pCisgKiAtIFtgd3JhcCgpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL3dyYXAvKQorICoK
KyAqICMjIGpRdWVyeS9qcUxpdGUgRXh0cmFzCisgKiBBbmd1bGFyIGFsc28gcHJvdmlkZXMgdGhl
IGZvbGxvd2luZyBhZGRpdGlvbmFsIG1ldGhvZHMgYW5kIGV2ZW50cyB0byBib3RoIGpRdWVyeSBh
bmQganFMaXRlOgorICoKKyAqICMjIyBFdmVudHMKKyAqIC0gYCRkZXN0cm95YCAtIEFuZ3VsYXJK
UyBpbnRlcmNlcHRzIGFsbCBqcUxpdGUvalF1ZXJ5J3MgRE9NIGRlc3RydWN0aW9uIGFwaXMgYW5k
IGZpcmVzIHRoaXMgZXZlbnQKKyAqICAgIG9uIGFsbCBET00gbm9kZXMgYmVpbmcgcmVtb3ZlZC4g
IFRoaXMgY2FuIGJlIHVzZWQgdG8gY2xlYW4gdXAgYW55IDNyZCBwYXJ0eSBiaW5kaW5ncyB0byB0
aGUgRE9NCisgKiAgICBlbGVtZW50IGJlZm9yZSBpdCBpcyByZW1vdmVkLgorICoKKyAqICMjIyBN
ZXRob2RzCisgKiAtIGBjb250cm9sbGVyKG5hbWUpYCAtIHJldHJpZXZlcyB0aGUgY29udHJvbGxl
ciBvZiB0aGUgY3VycmVudCBlbGVtZW50IG9yIGl0cyBwYXJlbnQuIEJ5IGRlZmF1bHQKKyAqICAg
cmV0cmlldmVzIGNvbnRyb2xsZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBgbmdDb250cm9sbGVyYCBk
aXJlY3RpdmUuIElmIGBuYW1lYCBpcyBwcm92aWRlZCBhcworICogICBjYW1lbENhc2UgZGlyZWN0
aXZlIG5hbWUsIHRoZW4gdGhlIGNvbnRyb2xsZXIgZm9yIHRoaXMgZGlyZWN0aXZlIHdpbGwgYmUg
cmV0cmlldmVkIChlLmcuCisgKiAgIGAnbmdNb2RlbCdgKS4KKyAqIC0gYGluamVjdG9yKClgIC0g
cmV0cmlldmVzIHRoZSBpbmplY3RvciBvZiB0aGUgY3VycmVudCBlbGVtZW50IG9yIGl0cyBwYXJl
bnQuCisgKiAtIGBzY29wZSgpYCAtIHJldHJpZXZlcyB0aGUge0BsaW5rIG5nLiRyb290U2NvcGUu
U2NvcGUgc2NvcGV9IG9mIHRoZSBjdXJyZW50CisgKiAgIGVsZW1lbnQgb3IgaXRzIHBhcmVudC4g
UmVxdWlyZXMge0BsaW5rIGd1aWRlL3Byb2R1Y3Rpb24jZGlzYWJsaW5nLWRlYnVnLWRhdGEgRGVi
dWcgRGF0YX0gdG8KKyAqICAgYmUgZW5hYmxlZC4KKyAqIC0gYGlzb2xhdGVTY29wZSgpYCAtIHJl
dHJpZXZlcyBhbiBpc29sYXRlIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIHNjb3BlfSBpZiBv
bmUgaXMgYXR0YWNoZWQgZGlyZWN0bHkgdG8gdGhlCisgKiAgIGN1cnJlbnQgZWxlbWVudC4gVGhp
cyBnZXR0ZXIgc2hvdWxkIGJlIHVzZWQgb25seSBvbiBlbGVtZW50cyB0aGF0IGNvbnRhaW4gYSBk
aXJlY3RpdmUgd2hpY2ggc3RhcnRzIGEgbmV3IGlzb2xhdGUKKyAqICAgc2NvcGUuIENhbGxpbmcg
YHNjb3BlKClgIG9uIHRoaXMgZWxlbWVudCBhbHdheXMgcmV0dXJucyB0aGUgb3JpZ2luYWwgbm9u
LWlzb2xhdGUgc2NvcGUuCisgKiAgIFJlcXVpcmVzIHtAbGluayBndWlkZS9wcm9kdWN0aW9uI2Rp
c2FibGluZy1kZWJ1Zy1kYXRhIERlYnVnIERhdGF9IHRvIGJlIGVuYWJsZWQuCisgKiAtIGBpbmhl
cml0ZWREYXRhKClgIC0gc2FtZSBhcyBgZGF0YSgpYCwgYnV0IHdhbGtzIHVwIHRoZSBET00gdW50
aWwgYSB2YWx1ZSBpcyBmb3VuZCBvciB0aGUgdG9wCisgKiAgIHBhcmVudCBlbGVtZW50IGlzIHJl
YWNoZWQuCisgKgorICogQHBhcmFtIHtzdHJpbmd8RE9NRWxlbWVudH0gZWxlbWVudCBIVE1MIHN0
cmluZyBvciBET01FbGVtZW50IHRvIGJlIHdyYXBwZWQgaW50byBqUXVlcnkuCisgKiBAcmV0dXJu
cyB7T2JqZWN0fSBqUXVlcnkgb2JqZWN0LgorICovCisKK0pRTGl0ZS5leHBhbmRvID0gJ25nMzM5
JzsKKwordmFyIGpxQ2FjaGUgPSBKUUxpdGUuY2FjaGUgPSB7fSwKKyAgICBqcUlkID0gMSwKKyAg
ICBhZGRFdmVudExpc3RlbmVyRm4gPSBmdW5jdGlvbihlbGVtZW50LCB0eXBlLCBmbikgeworICAg
ICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZuLCBmYWxzZSk7CisgICAgfSwKKyAg
ICByZW1vdmVFdmVudExpc3RlbmVyRm4gPSBmdW5jdGlvbihlbGVtZW50LCB0eXBlLCBmbikgewor
ICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGZuLCBmYWxzZSk7CisgICAg
fTsKKworLyoKKyAqICEhISBUaGlzIGlzIGFuIHVuZG9jdW1lbnRlZCAicHJpdmF0ZSIgZnVuY3Rp
b24gISEhCisgKi8KK0pRTGl0ZS5fZGF0YSA9IGZ1bmN0aW9uKG5vZGUpIHsKKyAgLy9qUXVlcnkg
YWx3YXlzIHJldHVybnMgYW4gb2JqZWN0IG9uIGNhY2hlIG1pc3MKKyAgcmV0dXJuIHRoaXMuY2Fj
aGVbbm9kZVt0aGlzLmV4cGFuZG9dXSB8fCB7fTsKK307CisKK2Z1bmN0aW9uIGpxTmV4dElkKCkg
eyByZXR1cm4gKytqcUlkOyB9CisKKwordmFyIFNQRUNJQUxfQ0hBUlNfUkVHRVhQID0gLyhbXDpc
LVxfXSsoLikpL2c7Cit2YXIgTU9aX0hBQ0tfUkVHRVhQID0gL15tb3ooW0EtWl0pLzsKK3ZhciBN
T1VTRV9FVkVOVF9NQVA9IHsgbW91c2VsZWF2ZTogIm1vdXNlb3V0IiwgbW91c2VlbnRlcjogIm1v
dXNlb3ZlciJ9OwordmFyIGpxTGl0ZU1pbkVyciA9IG1pbkVycignanFMaXRlJyk7CisKKy8qKgor
ICogQ29udmVydHMgc25ha2VfY2FzZSB0byBjYW1lbENhc2UuCisgKiBBbHNvIHRoZXJlIGlzIHNw
ZWNpYWwgY2FzZSBmb3IgTW96IHByZWZpeCBzdGFydGluZyB3aXRoIHVwcGVyIGNhc2UgbGV0dGVy
LgorICogQHBhcmFtIG5hbWUgTmFtZSB0byBub3JtYWxpemUKKyAqLworZnVuY3Rpb24gY2FtZWxD
YXNlKG5hbWUpIHsKKyAgcmV0dXJuIG5hbWUuCisgICAgcmVwbGFjZShTUEVDSUFMX0NIQVJTX1JF
R0VYUCwgZnVuY3Rpb24oXywgc2VwYXJhdG9yLCBsZXR0ZXIsIG9mZnNldCkgeworICAgICAgcmV0
dXJuIG9mZnNldCA/IGxldHRlci50b1VwcGVyQ2FzZSgpIDogbGV0dGVyOworICAgIH0pLgorICAg
IHJlcGxhY2UoTU9aX0hBQ0tfUkVHRVhQLCAnTW96JDEnKTsKK30KKwordmFyIFNJTkdMRV9UQUdf
UkVHRVhQID0gL148KFx3KylccypcLz8+KD86PFwvXDE+fCkkLzsKK3ZhciBIVE1MX1JFR0VYUCA9
IC88fCYjP1x3KzsvOwordmFyIFRBR19OQU1FX1JFR0VYUCA9IC88KFtcdzpdKykvOwordmFyIFhI
VE1MX1RBR19SRUdFWFAgPSAvPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5r
fG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2dpOworCit2YXIgd3JhcE1hcCA9IHsKKyAg
J29wdGlvbic6IFsxLCAnPHNlbGVjdCBtdWx0aXBsZT0ibXVsdGlwbGUiPicsICc8L3NlbGVjdD4n
XSwKKworICAndGhlYWQnOiBbMSwgJzx0YWJsZT4nLCAnPC90YWJsZT4nXSwKKyAgJ2NvbCc6IFsy
LCAnPHRhYmxlPjxjb2xncm91cD4nLCAnPC9jb2xncm91cD48L3RhYmxlPiddLAorICAndHInOiBb
MiwgJzx0YWJsZT48dGJvZHk+JywgJzwvdGJvZHk+PC90YWJsZT4nXSwKKyAgJ3RkJzogWzMsICc8
dGFibGU+PHRib2R5Pjx0cj4nLCAnPC90cj48L3Rib2R5PjwvdGFibGU+J10sCisgICdfZGVmYXVs
dCc6IFswLCAiIiwgIiJdCit9OworCit3cmFwTWFwLm9wdGdyb3VwID0gd3JhcE1hcC5vcHRpb247
Cit3cmFwTWFwLnRib2R5ID0gd3JhcE1hcC50Zm9vdCA9IHdyYXBNYXAuY29sZ3JvdXAgPSB3cmFw
TWFwLmNhcHRpb24gPSB3cmFwTWFwLnRoZWFkOword3JhcE1hcC50aCA9IHdyYXBNYXAudGQ7CisK
KworZnVuY3Rpb24ganFMaXRlSXNUZXh0Tm9kZShodG1sKSB7CisgIHJldHVybiAhSFRNTF9SRUdF
WFAudGVzdChodG1sKTsKK30KKworZnVuY3Rpb24ganFMaXRlQWNjZXB0c0RhdGEobm9kZSkgewor
ICAvLyBUaGUgd2luZG93IG9iamVjdCBjYW4gYWNjZXB0IGRhdGEgYnV0IGhhcyBubyBub2RlVHlw
ZQorICAvLyBPdGhlcndpc2Ugd2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBlbGVtZW50cyAoMSkg
YW5kIGRvY3VtZW50cyAoOSkKKyAgdmFyIG5vZGVUeXBlID0gbm9kZS5ub2RlVHlwZTsKKyAgcmV0
dXJuIG5vZGVUeXBlID09PSBOT0RFX1RZUEVfRUxFTUVOVCB8fCAhbm9kZVR5cGUgfHwgbm9kZVR5
cGUgPT09IE5PREVfVFlQRV9ET0NVTUVOVDsKK30KKworZnVuY3Rpb24ganFMaXRlSGFzRGF0YShu
b2RlKSB7CisgIGZvciAodmFyIGtleSBpbiBqcUNhY2hlW25vZGUubmczMzldKSB7CisgICAgcmV0
dXJuIHRydWU7CisgIH0KKyAgcmV0dXJuIGZhbHNlOworfQorCitmdW5jdGlvbiBqcUxpdGVCdWls
ZEZyYWdtZW50KGh0bWwsIGNvbnRleHQpIHsKKyAgdmFyIHRtcCwgdGFnLCB3cmFwLAorICAgICAg
ZnJhZ21lbnQgPSBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwKKyAgICAgIG5vZGVz
ID0gW10sIGk7CisKKyAgaWYgKGpxTGl0ZUlzVGV4dE5vZGUoaHRtbCkpIHsKKyAgICAvLyBDb252
ZXJ0IG5vbi1odG1sIGludG8gYSB0ZXh0IG5vZGUKKyAgICBub2Rlcy5wdXNoKGNvbnRleHQuY3Jl
YXRlVGV4dE5vZGUoaHRtbCkpOworICB9IGVsc2UgeworICAgIC8vIENvbnZlcnQgaHRtbCBpbnRv
IERPTSBub2RlcworICAgIHRtcCA9IHRtcCB8fCBmcmFnbWVudC5hcHBlbmRDaGlsZChjb250ZXh0
LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTsKKyAgICB0YWcgPSAoVEFHX05BTUVfUkVHRVhQLmV4ZWMo
aHRtbCkgfHwgWyIiLCAiIl0pWzFdLnRvTG93ZXJDYXNlKCk7CisgICAgd3JhcCA9IHdyYXBNYXBb
dGFnXSB8fCB3cmFwTWFwLl9kZWZhdWx0OworICAgIHRtcC5pbm5lckhUTUwgPSB3cmFwWzFdICsg
aHRtbC5yZXBsYWNlKFhIVE1MX1RBR19SRUdFWFAsICI8JDE+PC8kMj4iKSArIHdyYXBbMl07CisK
KyAgICAvLyBEZXNjZW5kIHRocm91Z2ggd3JhcHBlcnMgdG8gdGhlIHJpZ2h0IGNvbnRlbnQKKyAg
ICBpID0gd3JhcFswXTsKKyAgICB3aGlsZSAoaS0tKSB7CisgICAgICB0bXAgPSB0bXAubGFzdENo
aWxkOworICAgIH0KKworICAgIG5vZGVzID0gY29uY2F0KG5vZGVzLCB0bXAuY2hpbGROb2Rlcyk7
CisKKyAgICB0bXAgPSBmcmFnbWVudC5maXJzdENoaWxkOworICAgIHRtcC50ZXh0Q29udGVudCA9
ICIiOworICB9CisKKyAgLy8gUmVtb3ZlIHdyYXBwZXIgZnJvbSBmcmFnbWVudAorICBmcmFnbWVu
dC50ZXh0Q29udGVudCA9ICIiOworICBmcmFnbWVudC5pbm5lckhUTUwgPSAiIjsgLy8gQ2xlYXIg
aW5uZXIgSFRNTAorICBmb3JFYWNoKG5vZGVzLCBmdW5jdGlvbihub2RlKSB7CisgICAgZnJhZ21l
bnQuYXBwZW5kQ2hpbGQobm9kZSk7CisgIH0pOworCisgIHJldHVybiBmcmFnbWVudDsKK30KKwor
ZnVuY3Rpb24ganFMaXRlUGFyc2VIVE1MKGh0bWwsIGNvbnRleHQpIHsKKyAgY29udGV4dCA9IGNv
bnRleHQgfHwgZG9jdW1lbnQ7CisgIHZhciBwYXJzZWQ7CisKKyAgaWYgKChwYXJzZWQgPSBTSU5H
TEVfVEFHX1JFR0VYUC5leGVjKGh0bWwpKSkgeworICAgIHJldHVybiBbY29udGV4dC5jcmVhdGVF
bGVtZW50KHBhcnNlZFsxXSldOworICB9CisKKyAgaWYgKChwYXJzZWQgPSBqcUxpdGVCdWlsZEZy
YWdtZW50KGh0bWwsIGNvbnRleHQpKSkgeworICAgIHJldHVybiBwYXJzZWQuY2hpbGROb2RlczsK
KyAgfQorCisgIHJldHVybiBbXTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCitmdW5jdGlvbiBKUUxpdGUoZWxlbWVudCkgeworICBpZiAoZWxlbWVu
dCBpbnN0YW5jZW9mIEpRTGl0ZSkgeworICAgIHJldHVybiBlbGVtZW50OworICB9CisKKyAgdmFy
IGFyZ0lzU3RyaW5nOworCisgIGlmIChpc1N0cmluZyhlbGVtZW50KSkgeworICAgIGVsZW1lbnQg
PSB0cmltKGVsZW1lbnQpOworICAgIGFyZ0lzU3RyaW5nID0gdHJ1ZTsKKyAgfQorICBpZiAoISh0
aGlzIGluc3RhbmNlb2YgSlFMaXRlKSkgeworICAgIGlmIChhcmdJc1N0cmluZyAmJiBlbGVtZW50
LmNoYXJBdCgwKSAhPSAnPCcpIHsKKyAgICAgIHRocm93IGpxTGl0ZU1pbkVycignbm9zZWwnLCAn
TG9va2luZyB1cCBlbGVtZW50cyB2aWEgc2VsZWN0b3JzIGlzIG5vdCBzdXBwb3J0ZWQgYnkganFM
aXRlISBTZWU6IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL2FuZ3VsYXIuZWxlbWVudCcp
OworICAgIH0KKyAgICByZXR1cm4gbmV3IEpRTGl0ZShlbGVtZW50KTsKKyAgfQorCisgIGlmIChh
cmdJc1N0cmluZykgeworICAgIGpxTGl0ZUFkZE5vZGVzKHRoaXMsIGpxTGl0ZVBhcnNlSFRNTChl
bGVtZW50KSk7CisgIH0gZWxzZSB7CisgICAganFMaXRlQWRkTm9kZXModGhpcywgZWxlbWVudCk7
CisgIH0KK30KKworZnVuY3Rpb24ganFMaXRlQ2xvbmUoZWxlbWVudCkgeworICByZXR1cm4gZWxl
bWVudC5jbG9uZU5vZGUodHJ1ZSk7Cit9CisKK2Z1bmN0aW9uIGpxTGl0ZURlYWxvYyhlbGVtZW50
LCBvbmx5RGVzY2VuZGFudHMpIHsKKyAgaWYgKCFvbmx5RGVzY2VuZGFudHMpIGpxTGl0ZVJlbW92
ZURhdGEoZWxlbWVudCk7CisKKyAgaWYgKGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCkgeworICAg
IHZhciBkZXNjZW5kYW50cyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnKicpOworICAgIGZv
ciAodmFyIGkgPSAwLCBsID0gZGVzY2VuZGFudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CisgICAg
ICBqcUxpdGVSZW1vdmVEYXRhKGRlc2NlbmRhbnRzW2ldKTsKKyAgICB9CisgIH0KK30KKworZnVu
Y3Rpb24ganFMaXRlT2ZmKGVsZW1lbnQsIHR5cGUsIGZuLCB1bnN1cHBvcnRlZCkgeworICBpZiAo
aXNEZWZpbmVkKHVuc3VwcG9ydGVkKSkgdGhyb3cganFMaXRlTWluRXJyKCdvZmZhcmdzJywgJ2px
TGl0ZSNvZmYoKSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBgc2VsZWN0b3JgIGFyZ3VtZW50Jyk7CisK
KyAgdmFyIGV4cGFuZG9TdG9yZSA9IGpxTGl0ZUV4cGFuZG9TdG9yZShlbGVtZW50KTsKKyAgdmFy
IGV2ZW50cyA9IGV4cGFuZG9TdG9yZSAmJiBleHBhbmRvU3RvcmUuZXZlbnRzOworICB2YXIgaGFu
ZGxlID0gZXhwYW5kb1N0b3JlICYmIGV4cGFuZG9TdG9yZS5oYW5kbGU7CisKKyAgaWYgKCFoYW5k
bGUpIHJldHVybjsgLy9ubyBsaXN0ZW5lcnMgcmVnaXN0ZXJlZAorCisgIGlmICghdHlwZSkgewor
ICAgIGZvciAodHlwZSBpbiBldmVudHMpIHsKKyAgICAgIGlmICh0eXBlICE9PSAnJGRlc3Ryb3kn
KSB7CisgICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXJGbihlbGVtZW50LCB0eXBlLCBoYW5kbGUp
OworICAgICAgfQorICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTsKKyAgICB9CisgIH0gZWxzZSB7
CisgICAgZm9yRWFjaCh0eXBlLnNwbGl0KCcgJyksIGZ1bmN0aW9uKHR5cGUpIHsKKyAgICAgIGlm
IChpc0RlZmluZWQoZm4pKSB7CisgICAgICAgIHZhciBsaXN0ZW5lckZucyA9IGV2ZW50c1t0eXBl
XTsKKyAgICAgICAgYXJyYXlSZW1vdmUobGlzdGVuZXJGbnMgfHwgW10sIGZuKTsKKyAgICAgICAg
aWYgKGxpc3RlbmVyRm5zICYmIGxpc3RlbmVyRm5zLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lckZu
KGVsZW1lbnQsIHR5cGUsIGhhbmRsZSk7CisgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdOworICAg
IH0pOworICB9Cit9CisKK2Z1bmN0aW9uIGpxTGl0ZVJlbW92ZURhdGEoZWxlbWVudCwgbmFtZSkg
eworICB2YXIgZXhwYW5kb0lkID0gZWxlbWVudC5uZzMzOTsKKyAgdmFyIGV4cGFuZG9TdG9yZSA9
IGV4cGFuZG9JZCAmJiBqcUNhY2hlW2V4cGFuZG9JZF07CisKKyAgaWYgKGV4cGFuZG9TdG9yZSkg
eworICAgIGlmIChuYW1lKSB7CisgICAgICBkZWxldGUgZXhwYW5kb1N0b3JlLmRhdGFbbmFtZV07
CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGV4cGFuZG9TdG9yZS5oYW5kbGUpIHsK
KyAgICAgIGlmIChleHBhbmRvU3RvcmUuZXZlbnRzLiRkZXN0cm95KSB7CisgICAgICAgIGV4cGFu
ZG9TdG9yZS5oYW5kbGUoe30sICckZGVzdHJveScpOworICAgICAgfQorICAgICAganFMaXRlT2Zm
KGVsZW1lbnQpOworICAgIH0KKyAgICBkZWxldGUganFDYWNoZVtleHBhbmRvSWRdOworICAgIGVs
ZW1lbnQubmczMzkgPSB1bmRlZmluZWQ7IC8vIGRvbid0IGRlbGV0ZSBET00gZXhwYW5kb3MuIElF
IGFuZCBDaHJvbWUgZG9uJ3QgbGlrZSBpdAorICB9Cit9CisKKworZnVuY3Rpb24ganFMaXRlRXhw
YW5kb1N0b3JlKGVsZW1lbnQsIGNyZWF0ZUlmTmVjZXNzYXJ5KSB7CisgIHZhciBleHBhbmRvSWQg
PSBlbGVtZW50Lm5nMzM5LAorICAgICAgZXhwYW5kb1N0b3JlID0gZXhwYW5kb0lkICYmIGpxQ2Fj
aGVbZXhwYW5kb0lkXTsKKworICBpZiAoY3JlYXRlSWZOZWNlc3NhcnkgJiYgIWV4cGFuZG9TdG9y
ZSkgeworICAgIGVsZW1lbnQubmczMzkgPSBleHBhbmRvSWQgPSBqcU5leHRJZCgpOworICAgIGV4
cGFuZG9TdG9yZSA9IGpxQ2FjaGVbZXhwYW5kb0lkXSA9IHtldmVudHM6IHt9LCBkYXRhOiB7fSwg
aGFuZGxlOiB1bmRlZmluZWR9OworICB9CisKKyAgcmV0dXJuIGV4cGFuZG9TdG9yZTsKK30KKwor
CitmdW5jdGlvbiBqcUxpdGVEYXRhKGVsZW1lbnQsIGtleSwgdmFsdWUpIHsKKyAgaWYgKGpxTGl0
ZUFjY2VwdHNEYXRhKGVsZW1lbnQpKSB7CisKKyAgICB2YXIgaXNTaW1wbGVTZXR0ZXIgPSBpc0Rl
ZmluZWQodmFsdWUpOworICAgIHZhciBpc1NpbXBsZUdldHRlciA9ICFpc1NpbXBsZVNldHRlciAm
JiBrZXkgJiYgIWlzT2JqZWN0KGtleSk7CisgICAgdmFyIG1hc3NHZXR0ZXIgPSAha2V5OworICAg
IHZhciBleHBhbmRvU3RvcmUgPSBqcUxpdGVFeHBhbmRvU3RvcmUoZWxlbWVudCwgIWlzU2ltcGxl
R2V0dGVyKTsKKyAgICB2YXIgZGF0YSA9IGV4cGFuZG9TdG9yZSAmJiBleHBhbmRvU3RvcmUuZGF0
YTsKKworICAgIGlmIChpc1NpbXBsZVNldHRlcikgeyAvLyBkYXRhKCdrZXknLCB2YWx1ZSkKKyAg
ICAgIGRhdGFba2V5XSA9IHZhbHVlOworICAgIH0gZWxzZSB7CisgICAgICBpZiAobWFzc0dldHRl
cikgeyAgLy8gZGF0YSgpCisgICAgICAgIHJldHVybiBkYXRhOworICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgaWYgKGlzU2ltcGxlR2V0dGVyKSB7IC8vIGRhdGEoJ2tleScpCisgICAgICAgICAgLy8g
ZG9uJ3QgZm9yY2UgY3JlYXRpb24gb2YgZXhwYW5kb1N0b3JlIGlmIGl0IGRvZXNuJ3QgZXhpc3Qg
eWV0CisgICAgICAgICAgcmV0dXJuIGRhdGEgJiYgZGF0YVtrZXldOworICAgICAgICB9IGVsc2Ug
eyAvLyBtYXNzLXNldHRlcjogZGF0YSh7a2V5MTogdmFsMSwga2V5MjogdmFsMn0pCisgICAgICAg
ICAgZXh0ZW5kKGRhdGEsIGtleSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KK30K
KworZnVuY3Rpb24ganFMaXRlSGFzQ2xhc3MoZWxlbWVudCwgc2VsZWN0b3IpIHsKKyAgaWYgKCFl
bGVtZW50LmdldEF0dHJpYnV0ZSkgcmV0dXJuIGZhbHNlOworICByZXR1cm4gKCgiICIgKyAoZWxl
bWVudC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykgfHwgJycpICsgIiAiKS5yZXBsYWNlKC9bXG5cdF0v
ZywgIiAiKS4KKyAgICAgIGluZGV4T2YoIiAiICsgc2VsZWN0b3IgKyAiICIpID4gLTEpOworfQor
CitmdW5jdGlvbiBqcUxpdGVSZW1vdmVDbGFzcyhlbGVtZW50LCBjc3NDbGFzc2VzKSB7CisgIGlm
IChjc3NDbGFzc2VzICYmIGVsZW1lbnQuc2V0QXR0cmlidXRlKSB7CisgICAgZm9yRWFjaChjc3ND
bGFzc2VzLnNwbGl0KCcgJyksIGZ1bmN0aW9uKGNzc0NsYXNzKSB7CisgICAgICBlbGVtZW50LnNl
dEF0dHJpYnV0ZSgnY2xhc3MnLCB0cmltKAorICAgICAgICAgICgiICIgKyAoZWxlbWVudC5nZXRB
dHRyaWJ1dGUoJ2NsYXNzJykgfHwgJycpICsgIiAiKQorICAgICAgICAgIC5yZXBsYWNlKC9bXG5c
dF0vZywgIiAiKQorICAgICAgICAgIC5yZXBsYWNlKCIgIiArIHRyaW0oY3NzQ2xhc3MpICsgIiAi
LCAiICIpKQorICAgICAgKTsKKyAgICB9KTsKKyAgfQorfQorCitmdW5jdGlvbiBqcUxpdGVBZGRD
bGFzcyhlbGVtZW50LCBjc3NDbGFzc2VzKSB7CisgIGlmIChjc3NDbGFzc2VzICYmIGVsZW1lbnQu
c2V0QXR0cmlidXRlKSB7CisgICAgdmFyIGV4aXN0aW5nQ2xhc3NlcyA9ICgnICcgKyAoZWxlbWVu
dC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykgfHwgJycpICsgJyAnKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC5yZXBsYWNlKC9bXG5cdF0vZywgIiAiKTsKKworICAgIGZvckVhY2goY3NzQ2xh
c3Nlcy5zcGxpdCgnICcpLCBmdW5jdGlvbihjc3NDbGFzcykgeworICAgICAgY3NzQ2xhc3MgPSB0
cmltKGNzc0NsYXNzKTsKKyAgICAgIGlmIChleGlzdGluZ0NsYXNzZXMuaW5kZXhPZignICcgKyBj
c3NDbGFzcyArICcgJykgPT09IC0xKSB7CisgICAgICAgIGV4aXN0aW5nQ2xhc3NlcyArPSBjc3ND
bGFzcyArICcgJzsKKyAgICAgIH0KKyAgICB9KTsKKworICAgIGVsZW1lbnQuc2V0QXR0cmlidXRl
KCdjbGFzcycsIHRyaW0oZXhpc3RpbmdDbGFzc2VzKSk7CisgIH0KK30KKworCitmdW5jdGlvbiBq
cUxpdGVBZGROb2Rlcyhyb290LCBlbGVtZW50cykgeworICAvLyBUSElTIENPREUgSVMgVkVSWSBI
T1QuIERvbid0IG1ha2UgY2hhbmdlcyB3aXRob3V0IGJlbmNobWFya2luZy4KKworICBpZiAoZWxl
bWVudHMpIHsKKworICAgIC8vIGlmIGEgTm9kZSAodGhlIG1vc3QgY29tbW9uIGNhc2UpCisgICAg
aWYgKGVsZW1lbnRzLm5vZGVUeXBlKSB7CisgICAgICByb290W3Jvb3QubGVuZ3RoKytdID0gZWxl
bWVudHM7CisgICAgfSBlbHNlIHsKKyAgICAgIHZhciBsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7
CisKKyAgICAgIC8vIGlmIGFuIEFycmF5IG9yIE5vZGVMaXN0IGFuZCBub3QgYSBXaW5kb3cKKyAg
ICAgIGlmICh0eXBlb2YgbGVuZ3RoID09PSAnbnVtYmVyJyAmJiBlbGVtZW50cy53aW5kb3cgIT09
IGVsZW1lbnRzKSB7CisgICAgICAgIGlmIChsZW5ndGgpIHsKKyAgICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICByb290W3Jvb3QubGVuZ3RoKytd
ID0gZWxlbWVudHNbaV07CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9IGVsc2Ugewor
ICAgICAgICByb290W3Jvb3QubGVuZ3RoKytdID0gZWxlbWVudHM7CisgICAgICB9CisgICAgfQor
ICB9Cit9CisKKworZnVuY3Rpb24ganFMaXRlQ29udHJvbGxlcihlbGVtZW50LCBuYW1lKSB7Cisg
IHJldHVybiBqcUxpdGVJbmhlcml0ZWREYXRhKGVsZW1lbnQsICckJyArIChuYW1lIHx8ICduZ0Nv
bnRyb2xsZXInKSArICdDb250cm9sbGVyJyk7Cit9CisKK2Z1bmN0aW9uIGpxTGl0ZUluaGVyaXRl
ZERhdGEoZWxlbWVudCwgbmFtZSwgdmFsdWUpIHsKKyAgLy8gaWYgZWxlbWVudCBpcyB0aGUgZG9j
dW1lbnQgb2JqZWN0IHdvcmsgd2l0aCB0aGUgaHRtbCBlbGVtZW50IGluc3RlYWQKKyAgLy8gdGhp
cyBtYWtlcyAkKGRvY3VtZW50KS5zY29wZSgpIHBvc3NpYmxlCisgIGlmIChlbGVtZW50Lm5vZGVU
eXBlID09IE5PREVfVFlQRV9ET0NVTUVOVCkgeworICAgIGVsZW1lbnQgPSBlbGVtZW50LmRvY3Vt
ZW50RWxlbWVudDsKKyAgfQorICB2YXIgbmFtZXMgPSBpc0FycmF5KG5hbWUpID8gbmFtZSA6IFtu
YW1lXTsKKworICB3aGlsZSAoZWxlbWVudCkgeworICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IG5h
bWVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgIGlmICgodmFsdWUgPSBqcUxpdGUuZGF0
YShlbGVtZW50LCBuYW1lc1tpXSkpICE9PSB1bmRlZmluZWQpIHJldHVybiB2YWx1ZTsKKyAgICB9
CisKKyAgICAvLyBJZiBkZWFsaW5nIHdpdGggYSBkb2N1bWVudCBmcmFnbWVudCBub2RlIHdpdGgg
YSBob3N0IGVsZW1lbnQsIGFuZCBubyBwYXJlbnQsIHVzZSB0aGUgaG9zdAorICAgIC8vIGVsZW1l
bnQgYXMgdGhlIHBhcmVudC4gVGhpcyBlbmFibGVzIGRpcmVjdGl2ZXMgd2l0aGluIGEgU2hhZG93
IERPTSBvciBwb2x5ZmlsbGVkIFNoYWRvdyBET00KKyAgICAvLyB0byBsb29rdXAgcGFyZW50IGNv
bnRyb2xsZXJzLgorICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUgfHwgKGVsZW1lbnQu
bm9kZVR5cGUgPT09IE5PREVfVFlQRV9ET0NVTUVOVF9GUkFHTUVOVCAmJiBlbGVtZW50Lmhvc3Qp
OworICB9Cit9CisKK2Z1bmN0aW9uIGpxTGl0ZUVtcHR5KGVsZW1lbnQpIHsKKyAganFMaXRlRGVh
bG9jKGVsZW1lbnQsIHRydWUpOworICB3aGlsZSAoZWxlbWVudC5maXJzdENoaWxkKSB7CisgICAg
ZWxlbWVudC5yZW1vdmVDaGlsZChlbGVtZW50LmZpcnN0Q2hpbGQpOworICB9Cit9CisKK2Z1bmN0
aW9uIGpxTGl0ZVJlbW92ZShlbGVtZW50LCBrZWVwRGF0YSkgeworICBpZiAoIWtlZXBEYXRhKSBq
cUxpdGVEZWFsb2MoZWxlbWVudCk7CisgIHZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7
CisgIGlmIChwYXJlbnQpIHBhcmVudC5yZW1vdmVDaGlsZChlbGVtZW50KTsKK30KKworCitmdW5j
dGlvbiBqcUxpdGVEb2N1bWVudExvYWRlZChhY3Rpb24sIHdpbikgeworICB3aW4gPSB3aW4gfHwg
d2luZG93OworICBpZiAod2luLmRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScpIHsK
KyAgICAvLyBGb3JjZSB0aGUgYWN0aW9uIHRvIGJlIHJ1biBhc3luYyBmb3IgY29uc2lzdGVudCBi
ZWhhdmlvdXIKKyAgICAvLyBmcm9tIHRoZSBhY3Rpb24ncyBwb2ludCBvZiB2aWV3CisgICAgLy8g
aS5lLiBpdCB3aWxsIGRlZmluaXRlbHkgbm90IGJlIGluIGEgJGFwcGx5CisgICAgd2luLnNldFRp
bWVvdXQoYWN0aW9uKTsKKyAgfSBlbHNlIHsKKyAgICAvLyBObyBuZWVkIHRvIHVuYmluZCB0aGlz
IGhhbmRsZXIgYXMgbG9hZCBpcyBvbmx5IGV2ZXIgY2FsbGVkIG9uY2UKKyAgICBqcUxpdGUod2lu
KS5vbignbG9hZCcsIGFjdGlvbik7CisgIH0KK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCisvLyBGdW5jdGlvbnMgd2hpY2ggYXJlIGRlY2xhcmVkIGRpcmVj
dGx5LgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCit2YXIgSlFM
aXRlUHJvdG90eXBlID0gSlFMaXRlLnByb3RvdHlwZSA9IHsKKyAgcmVhZHk6IGZ1bmN0aW9uKGZu
KSB7CisgICAgdmFyIGZpcmVkID0gZmFsc2U7CisKKyAgICBmdW5jdGlvbiB0cmlnZ2VyKCkgewor
ICAgICAgaWYgKGZpcmVkKSByZXR1cm47CisgICAgICBmaXJlZCA9IHRydWU7CisgICAgICBmbigp
OworICAgIH0KKworICAgIC8vIGNoZWNrIGlmIGRvY3VtZW50IGlzIGFscmVhZHkgbG9hZGVkCisg
ICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScpIHsKKyAgICAgIHNldFRp
bWVvdXQodHJpZ2dlcik7CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMub24oJ0RPTUNvbnRlbnRM
b2FkZWQnLCB0cmlnZ2VyKTsgLy8gd29ya3MgZm9yIG1vZGVybiBicm93c2VycyBhbmQgSUU5Cisg
ICAgICAvLyB3ZSBjYW4gbm90IHVzZSBqcUxpdGUgc2luY2Ugd2UgYXJlIG5vdCBkb25lIGxvYWRp
bmcgYW5kIGpRdWVyeSBjb3VsZCBiZSBsb2FkZWQgbGF0ZXIuCisgICAgICAvLyBqc2hpbnQgLVcw
NjQKKyAgICAgIEpRTGl0ZSh3aW5kb3cpLm9uKCdsb2FkJywgdHJpZ2dlcik7IC8vIGZhbGxiYWNr
IHRvIHdpbmRvdy5vbmxvYWQgZm9yIG90aGVycworICAgICAgLy8ganNoaW50ICtXMDY0CisgICAg
fQorICB9LAorICB0b1N0cmluZzogZnVuY3Rpb24oKSB7CisgICAgdmFyIHZhbHVlID0gW107Cisg
ICAgZm9yRWFjaCh0aGlzLCBmdW5jdGlvbihlKSB7IHZhbHVlLnB1c2goJycgKyBlKTt9KTsKKyAg
ICByZXR1cm4gJ1snICsgdmFsdWUuam9pbignLCAnKSArICddJzsKKyAgfSwKKworICBlcTogZnVu
Y3Rpb24oaW5kZXgpIHsKKyAgICAgIHJldHVybiAoaW5kZXggPj0gMCkgPyBqcUxpdGUodGhpc1tp
bmRleF0pIDoganFMaXRlKHRoaXNbdGhpcy5sZW5ndGggKyBpbmRleF0pOworICB9LAorCisgIGxl
bmd0aDogMCwKKyAgcHVzaDogcHVzaCwKKyAgc29ydDogW10uc29ydCwKKyAgc3BsaWNlOiBbXS5z
cGxpY2UKK307CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor
Ly8gRnVuY3Rpb25zIGl0ZXJhdGluZyBnZXR0ZXIvc2V0dGVycy4KKy8vIHRoZXNlIGZ1bmN0aW9u
cyByZXR1cm4gc2VsZiBvbiBzZXR0ZXIgYW5kCisvLyB2YWx1ZSBvbiBnZXQuCisvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK3ZhciBCT09MRUFOX0FUVFIgPSB7fTsK
K2ZvckVhY2goJ211bHRpcGxlLHNlbGVjdGVkLGNoZWNrZWQsZGlzYWJsZWQscmVhZE9ubHkscmVx
dWlyZWQsb3Blbicuc3BsaXQoJywnKSwgZnVuY3Rpb24odmFsdWUpIHsKKyAgQk9PTEVBTl9BVFRS
W2xvd2VyY2FzZSh2YWx1ZSldID0gdmFsdWU7Cit9KTsKK3ZhciBCT09MRUFOX0VMRU1FTlRTID0g
e307Citmb3JFYWNoKCdpbnB1dCxzZWxlY3Qsb3B0aW9uLHRleHRhcmVhLGJ1dHRvbixmb3JtLGRl
dGFpbHMnLnNwbGl0KCcsJyksIGZ1bmN0aW9uKHZhbHVlKSB7CisgIEJPT0xFQU5fRUxFTUVOVFNb
dmFsdWVdID0gdHJ1ZTsKK30pOwordmFyIEFMSUFTRURfQVRUUiA9IHsKKyAgJ25nTWlubGVuZ3Ro
JzogJ21pbmxlbmd0aCcsCisgICduZ01heGxlbmd0aCc6ICdtYXhsZW5ndGgnLAorICAnbmdNaW4n
OiAnbWluJywKKyAgJ25nTWF4JzogJ21heCcsCisgICduZ1BhdHRlcm4nOiAncGF0dGVybicKK307
CisKK2Z1bmN0aW9uIGdldEJvb2xlYW5BdHRyTmFtZShlbGVtZW50LCBuYW1lKSB7CisgIC8vIGNo
ZWNrIGRvbSBsYXN0IHNpbmNlIHdlIHdpbGwgbW9zdCBsaWtlbHkgZmFpbCBvbiBuYW1lCisgIHZh
ciBib29sZWFuQXR0ciA9IEJPT0xFQU5fQVRUUltuYW1lLnRvTG93ZXJDYXNlKCldOworCisgIC8v
IGJvb2xlYW5BdHRyIGlzIGhlcmUgdHdpY2UgdG8gbWluaW1pemUgRE9NIGFjY2VzcworICByZXR1
cm4gYm9vbGVhbkF0dHIgJiYgQk9PTEVBTl9FTEVNRU5UU1tub2RlTmFtZV8oZWxlbWVudCldICYm
IGJvb2xlYW5BdHRyOworfQorCitmdW5jdGlvbiBnZXRBbGlhc2VkQXR0ck5hbWUoZWxlbWVudCwg
bmFtZSkgeworICB2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lOworICByZXR1cm4gKG5v
ZGVOYW1lID09PSAnSU5QVVQnIHx8IG5vZGVOYW1lID09PSAnVEVYVEFSRUEnKSAmJiBBTElBU0VE
X0FUVFJbbmFtZV07Cit9CisKK2ZvckVhY2goeworICBkYXRhOiBqcUxpdGVEYXRhLAorICByZW1v
dmVEYXRhOiBqcUxpdGVSZW1vdmVEYXRhLAorICBoYXNEYXRhOiBqcUxpdGVIYXNEYXRhCit9LCBm
dW5jdGlvbihmbiwgbmFtZSkgeworICBKUUxpdGVbbmFtZV0gPSBmbjsKK30pOworCitmb3JFYWNo
KHsKKyAgZGF0YToganFMaXRlRGF0YSwKKyAgaW5oZXJpdGVkRGF0YToganFMaXRlSW5oZXJpdGVk
RGF0YSwKKworICBzY29wZTogZnVuY3Rpb24oZWxlbWVudCkgeworICAgIC8vIENhbid0IHVzZSBq
cUxpdGVEYXRhIGhlcmUgZGlyZWN0bHkgc28gd2Ugc3RheSBjb21wYXRpYmxlIHdpdGggalF1ZXJ5
IQorICAgIHJldHVybiBqcUxpdGUuZGF0YShlbGVtZW50LCAnJHNjb3BlJykgfHwganFMaXRlSW5o
ZXJpdGVkRGF0YShlbGVtZW50LnBhcmVudE5vZGUgfHwgZWxlbWVudCwgWyckaXNvbGF0ZVNjb3Bl
JywgJyRzY29wZSddKTsKKyAgfSwKKworICBpc29sYXRlU2NvcGU6IGZ1bmN0aW9uKGVsZW1lbnQp
IHsKKyAgICAvLyBDYW4ndCB1c2UganFMaXRlRGF0YSBoZXJlIGRpcmVjdGx5IHNvIHdlIHN0YXkg
Y29tcGF0aWJsZSB3aXRoIGpRdWVyeSEKKyAgICByZXR1cm4ganFMaXRlLmRhdGEoZWxlbWVudCwg
JyRpc29sYXRlU2NvcGUnKSB8fCBqcUxpdGUuZGF0YShlbGVtZW50LCAnJGlzb2xhdGVTY29wZU5v
VGVtcGxhdGUnKTsKKyAgfSwKKworICBjb250cm9sbGVyOiBqcUxpdGVDb250cm9sbGVyLAorCisg
IGluamVjdG9yOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgcmV0dXJuIGpxTGl0ZUluaGVyaXRl
ZERhdGEoZWxlbWVudCwgJyRpbmplY3RvcicpOworICB9LAorCisgIHJlbW92ZUF0dHI6IGZ1bmN0
aW9uKGVsZW1lbnQsIG5hbWUpIHsKKyAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTsK
KyAgfSwKKworICBoYXNDbGFzczoganFMaXRlSGFzQ2xhc3MsCisKKyAgY3NzOiBmdW5jdGlvbihl
bGVtZW50LCBuYW1lLCB2YWx1ZSkgeworICAgIG5hbWUgPSBjYW1lbENhc2UobmFtZSk7CisKKyAg
ICBpZiAoaXNEZWZpbmVkKHZhbHVlKSkgeworICAgICAgZWxlbWVudC5zdHlsZVtuYW1lXSA9IHZh
bHVlOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gZWxlbWVudC5zdHlsZVtuYW1lXTsKKyAg
ICB9CisgIH0sCisKKyAgYXR0cjogZnVuY3Rpb24oZWxlbWVudCwgbmFtZSwgdmFsdWUpIHsKKyAg
ICB2YXIgbm9kZVR5cGUgPSBlbGVtZW50Lm5vZGVUeXBlOworICAgIGlmIChub2RlVHlwZSA9PT0g
Tk9ERV9UWVBFX1RFWFQgfHwgbm9kZVR5cGUgPT09IE5PREVfVFlQRV9BVFRSSUJVVEUgfHwgbm9k
ZVR5cGUgPT09IE5PREVfVFlQRV9DT01NRU5UKSB7CisgICAgICByZXR1cm47CisgICAgfQorICAg
IHZhciBsb3dlcmNhc2VkTmFtZSA9IGxvd2VyY2FzZShuYW1lKTsKKyAgICBpZiAoQk9PTEVBTl9B
VFRSW2xvd2VyY2FzZWROYW1lXSkgeworICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkpIHsKKyAg
ICAgICAgaWYgKCEhdmFsdWUpIHsKKyAgICAgICAgICBlbGVtZW50W25hbWVdID0gdHJ1ZTsKKyAg
ICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCBsb3dlcmNhc2VkTmFtZSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgZWxlbWVudFtuYW1lXSA9IGZhbHNlOworICAgICAgICAg
IGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGxvd2VyY2FzZWROYW1lKTsKKyAgICAgICAgfQorICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIChlbGVtZW50W25hbWVdIHx8CisgICAgICAgICAg
ICAgICAgIChlbGVtZW50LmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKG5hbWUpIHx8IG5vb3ApLnNw
ZWNpZmllZCkKKyAgICAgICAgICAgICAgID8gbG93ZXJjYXNlZE5hbWUKKyAgICAgICAgICAgICAg
IDogdW5kZWZpbmVkOworICAgICAgfQorICAgIH0gZWxzZSBpZiAoaXNEZWZpbmVkKHZhbHVlKSkg
eworICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOworICAgIH0gZWxzZSBp
ZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUpIHsKKyAgICAgIC8vIHRoZSBleHRyYSBhcmd1bWVudCAi
MiIgaXMgdG8gZ2V0IHRoZSByaWdodCB0aGluZyBmb3IgYS5ocmVmIGluIElFLCBzZWUgalF1ZXJ5
IGNvZGUKKyAgICAgIC8vIHNvbWUgZWxlbWVudHMgKGUuZy4gRG9jdW1lbnQpIGRvbid0IGhhdmUg
Z2V0IGF0dHJpYnV0ZSwgc28gcmV0dXJuIHVuZGVmaW5lZAorICAgICAgdmFyIHJldCA9IGVsZW1l
bnQuZ2V0QXR0cmlidXRlKG5hbWUsIDIpOworICAgICAgLy8gbm9ybWFsaXplIG5vbi1leGlzdGlu
ZyBhdHRyaWJ1dGVzIHRvIHVuZGVmaW5lZCAoYXMgalF1ZXJ5KQorICAgICAgcmV0dXJuIHJldCA9
PT0gbnVsbCA/IHVuZGVmaW5lZCA6IHJldDsKKyAgICB9CisgIH0sCisKKyAgcHJvcDogZnVuY3Rp
b24oZWxlbWVudCwgbmFtZSwgdmFsdWUpIHsKKyAgICBpZiAoaXNEZWZpbmVkKHZhbHVlKSkgewor
ICAgICAgZWxlbWVudFtuYW1lXSA9IHZhbHVlOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4g
ZWxlbWVudFtuYW1lXTsKKyAgICB9CisgIH0sCisKKyAgdGV4dDogKGZ1bmN0aW9uKCkgeworICAg
IGdldFRleHQuJGR2ID0gJyc7CisgICAgcmV0dXJuIGdldFRleHQ7CisKKyAgICBmdW5jdGlvbiBn
ZXRUZXh0KGVsZW1lbnQsIHZhbHVlKSB7CisgICAgICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKSB7
CisgICAgICAgIHZhciBub2RlVHlwZSA9IGVsZW1lbnQubm9kZVR5cGU7CisgICAgICAgIHJldHVy
biAobm9kZVR5cGUgPT09IE5PREVfVFlQRV9FTEVNRU5UIHx8IG5vZGVUeXBlID09PSBOT0RFX1RZ
UEVfVEVYVCkgPyBlbGVtZW50LnRleHRDb250ZW50IDogJyc7CisgICAgICB9CisgICAgICBlbGVt
ZW50LnRleHRDb250ZW50ID0gdmFsdWU7CisgICAgfQorICB9KSgpLAorCisgIHZhbDogZnVuY3Rp
b24oZWxlbWVudCwgdmFsdWUpIHsKKyAgICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKSB7CisgICAg
ICBpZiAoZWxlbWVudC5tdWx0aXBsZSAmJiBub2RlTmFtZV8oZWxlbWVudCkgPT09ICdzZWxlY3Qn
KSB7CisgICAgICAgIHZhciByZXN1bHQgPSBbXTsKKyAgICAgICAgZm9yRWFjaChlbGVtZW50Lm9w
dGlvbnMsIGZ1bmN0aW9uKG9wdGlvbikgeworICAgICAgICAgIGlmIChvcHRpb24uc2VsZWN0ZWQp
IHsKKyAgICAgICAgICAgIHJlc3VsdC5wdXNoKG9wdGlvbi52YWx1ZSB8fCBvcHRpb24udGV4dCk7
CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5sZW5ndGgg
PT09IDAgPyBudWxsIDogcmVzdWx0OworICAgICAgfQorICAgICAgcmV0dXJuIGVsZW1lbnQudmFs
dWU7CisgICAgfQorICAgIGVsZW1lbnQudmFsdWUgPSB2YWx1ZTsKKyAgfSwKKworICBodG1sOiBm
dW5jdGlvbihlbGVtZW50LCB2YWx1ZSkgeworICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpIHsK
KyAgICAgIHJldHVybiBlbGVtZW50LmlubmVySFRNTDsKKyAgICB9CisgICAganFMaXRlRGVhbG9j
KGVsZW1lbnQsIHRydWUpOworICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gdmFsdWU7CisgIH0sCisK
KyAgZW1wdHk6IGpxTGl0ZUVtcHR5Cit9LCBmdW5jdGlvbihmbiwgbmFtZSkgeworICAvKioKKyAg
ICogUHJvcGVydGllczogd3JpdGVzIHJldHVybiBzZWxlY3Rpb24sIHJlYWRzIHJldHVybiBmaXJz
dCB2YWx1ZQorICAgKi8KKyAgSlFMaXRlLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKGFyZzEs
IGFyZzIpIHsKKyAgICB2YXIgaSwga2V5OworICAgIHZhciBub2RlQ291bnQgPSB0aGlzLmxlbmd0
aDsKKworICAgIC8vIGpxTGl0ZUhhc0NsYXNzIGhhcyBvbmx5IHR3byBhcmd1bWVudHMsIGJ1dCBp
cyBhIGdldHRlci1vbmx5IGZuLCBzbyB3ZSBuZWVkIHRvIHNwZWNpYWwtY2FzZSBpdAorICAgIC8v
IGluIGEgd2F5IHRoYXQgc3Vydml2ZXMgbWluaWZpY2F0aW9uLgorICAgIC8vIGpxTGl0ZUVtcHR5
IHRha2VzIG5vIGFyZ3VtZW50cyBidXQgaXMgYSBzZXR0ZXIuCisgICAgaWYgKGZuICE9PSBqcUxp
dGVFbXB0eSAmJgorICAgICAgICAoKChmbi5sZW5ndGggPT0gMiAmJiAoZm4gIT09IGpxTGl0ZUhh
c0NsYXNzICYmIGZuICE9PSBqcUxpdGVDb250cm9sbGVyKSkgPyBhcmcxIDogYXJnMikgPT09IHVu
ZGVmaW5lZCkpIHsKKyAgICAgIGlmIChpc09iamVjdChhcmcxKSkgeworCisgICAgICAgIC8vIHdl
IGFyZSBhIHdyaXRlLCBidXQgdGhlIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSB0aGUga2V5L3ZhbHVl
cworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbm9kZUNvdW50OyBpKyspIHsKKyAgICAgICAgICBp
ZiAoZm4gPT09IGpxTGl0ZURhdGEpIHsKKyAgICAgICAgICAgIC8vIGRhdGEoKSB0YWtlcyB0aGUg
d2hvbGUgb2JqZWN0IGluIGpRdWVyeQorICAgICAgICAgICAgZm4odGhpc1tpXSwgYXJnMSk7Cisg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoa2V5IGluIGFyZzEpIHsKKyAgICAg
ICAgICAgICAgZm4odGhpc1tpXSwga2V5LCBhcmcxW2tleV0pOworICAgICAgICAgICAgfQorICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyByZXR1cm4gc2VsZiBmb3IgY2hhaW5pbmcK
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICB9IGVsc2UgeworICAgICAgICAvLyB3ZSBhcmUg
YSByZWFkLCBzbyByZWFkIHRoZSBmaXJzdCBjaGlsZC4KKyAgICAgICAgLy8gVE9ETzogZG8gd2Ug
c3RpbGwgbmVlZCB0aGlzPworICAgICAgICB2YXIgdmFsdWUgPSBmbi4kZHY7CisgICAgICAgIC8v
IE9ubHkgaWYgd2UgaGF2ZSAkZHYgZG8gd2UgaXRlcmF0ZSBvdmVyIGFsbCwgb3RoZXJ3aXNlIGl0
IGlzIGp1c3QgdGhlIGZpcnN0IGVsZW1lbnQuCisgICAgICAgIHZhciBqaiA9ICh2YWx1ZSA9PT0g
dW5kZWZpbmVkKSA/IE1hdGgubWluKG5vZGVDb3VudCwgMSkgOiBub2RlQ291bnQ7CisgICAgICAg
IGZvciAodmFyIGogPSAwOyBqIDwgamo7IGorKykgeworICAgICAgICAgIHZhciBub2RlVmFsdWUg
PSBmbih0aGlzW2pdLCBhcmcxLCBhcmcyKTsKKyAgICAgICAgICB2YWx1ZSA9IHZhbHVlID8gdmFs
dWUgKyBub2RlVmFsdWUgOiBub2RlVmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZh
bHVlOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAvLyB3ZSBhcmUgYSB3cml0ZSwgc28g
YXBwbHkgdG8gYWxsIGNoaWxkcmVuCisgICAgICBmb3IgKGkgPSAwOyBpIDwgbm9kZUNvdW50OyBp
KyspIHsKKyAgICAgICAgZm4odGhpc1tpXSwgYXJnMSwgYXJnMik7CisgICAgICB9CisgICAgICAv
LyByZXR1cm4gc2VsZiBmb3IgY2hhaW5pbmcKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0KKyAg
fTsKK30pOworCitmdW5jdGlvbiBjcmVhdGVFdmVudEhhbmRsZXIoZWxlbWVudCwgZXZlbnRzKSB7
CisgIHZhciBldmVudEhhbmRsZXIgPSBmdW5jdGlvbihldmVudCwgdHlwZSkgeworICAgIC8vIGpR
dWVyeSBzcGVjaWZpYyBhcGkKKyAgICBldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBmdW5jdGlv
bigpIHsKKyAgICAgIHJldHVybiBldmVudC5kZWZhdWx0UHJldmVudGVkOworICAgIH07CisKKyAg
ICB2YXIgZXZlbnRGbnMgPSBldmVudHNbdHlwZSB8fCBldmVudC50eXBlXTsKKyAgICB2YXIgZXZl
bnRGbnNMZW5ndGggPSBldmVudEZucyA/IGV2ZW50Rm5zLmxlbmd0aCA6IDA7CisKKyAgICBpZiAo
IWV2ZW50Rm5zTGVuZ3RoKSByZXR1cm47CisKKyAgICBpZiAoaXNVbmRlZmluZWQoZXZlbnQuaW1t
ZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKSkgeworICAgICAgdmFyIG9yaWdpbmFsU3RvcEltbWVk
aWF0ZVByb3BhZ2F0aW9uID0gZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOworICAgICAg
ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGV2
ZW50LmltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWU7CisKKyAgICAgICAgaWYgKGV2
ZW50LnN0b3BQcm9wYWdhdGlvbikgeworICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKG9yaWdpbmFsU3RvcEltbWVkaWF0ZVByb3BhZ2F0
aW9uKSB7CisgICAgICAgICAgb3JpZ2luYWxTdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24uY2FsbChl
dmVudCk7CisgICAgICAgIH0KKyAgICAgIH07CisgICAgfQorCisgICAgZXZlbnQuaXNJbW1lZGlh
dGVQcm9wYWdhdGlvblN0b3BwZWQgPSBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiBldmVudC5p
bW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPT09IHRydWU7CisgICAgfTsKKworICAgIC8vIENv
cHkgZXZlbnQgaGFuZGxlcnMgaW4gY2FzZSBldmVudCBoYW5kbGVycyBhcnJheSBpcyBtb2RpZmll
ZCBkdXJpbmcgZXhlY3V0aW9uLgorICAgIGlmICgoZXZlbnRGbnNMZW5ndGggPiAxKSkgeworICAg
ICAgZXZlbnRGbnMgPSBzaGFsbG93Q29weShldmVudEZucyk7CisgICAgfQorCisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBldmVudEZuc0xlbmd0aDsgaSsrKSB7CisgICAgICBpZiAoIWV2ZW50Lmlz
SW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpIHsKKyAgICAgICAgZXZlbnRGbnNbaV0uY2Fs
bChlbGVtZW50LCBldmVudCk7CisgICAgICB9CisgICAgfQorICB9OworCisgIC8vIFRPRE86IHRo
aXMgaXMgYSBoYWNrIGZvciBhbmd1bGFyTW9ja3MvY2xlYXJEYXRhQ2FjaGUgdGhhdCBtYWtlcyBp
dCBwb3NzaWJsZSB0byBkZXJlZ2lzdGVyIGFsbAorICAvLyAgICAgICBldmVudHMgb24gYGVsZW1l
bnRgCisgIGV2ZW50SGFuZGxlci5lbGVtID0gZWxlbWVudDsKKyAgcmV0dXJuIGV2ZW50SGFuZGxl
cjsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBG
dW5jdGlvbnMgaXRlcmF0aW5nIHRyYXZlcnNhbC4KKy8vIFRoZXNlIGZ1bmN0aW9ucyBjaGFpbiBy
ZXN1bHRzIGludG8gYSBzaW5nbGUKKy8vIHNlbGVjdG9yLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCitmb3JFYWNoKHsKKyAgcmVtb3ZlRGF0YToganFMaXRlUmVt
b3ZlRGF0YSwKKworICBvbjogZnVuY3Rpb24ganFMaXRlT24oZWxlbWVudCwgdHlwZSwgZm4sIHVu
c3VwcG9ydGVkKSB7CisgICAgaWYgKGlzRGVmaW5lZCh1bnN1cHBvcnRlZCkpIHRocm93IGpxTGl0
ZU1pbkVycignb25hcmdzJywgJ2pxTGl0ZSNvbigpIGRvZXMgbm90IHN1cHBvcnQgdGhlIGBzZWxl
Y3RvcmAgb3IgYGV2ZW50RGF0YWAgcGFyYW1ldGVycycpOworCisgICAgLy8gRG8gbm90IGFkZCBl
dmVudCBoYW5kbGVycyB0byBub24tZWxlbWVudHMgYmVjYXVzZSB0aGV5IHdpbGwgbm90IGJlIGNs
ZWFuZWQgdXAuCisgICAgaWYgKCFqcUxpdGVBY2NlcHRzRGF0YShlbGVtZW50KSkgeworICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIHZhciBleHBhbmRvU3RvcmUgPSBqcUxpdGVFeHBhbmRvU3Rv
cmUoZWxlbWVudCwgdHJ1ZSk7CisgICAgdmFyIGV2ZW50cyA9IGV4cGFuZG9TdG9yZS5ldmVudHM7
CisgICAgdmFyIGhhbmRsZSA9IGV4cGFuZG9TdG9yZS5oYW5kbGU7CisKKyAgICBpZiAoIWhhbmRs
ZSkgeworICAgICAgaGFuZGxlID0gZXhwYW5kb1N0b3JlLmhhbmRsZSA9IGNyZWF0ZUV2ZW50SGFu
ZGxlcihlbGVtZW50LCBldmVudHMpOworICAgIH0KKworICAgIC8vIGh0dHA6Ly9qc3BlcmYuY29t
L3N0cmluZy1pbmRleG9mLXZzLXNwbGl0CisgICAgdmFyIHR5cGVzID0gdHlwZS5pbmRleE9mKCcg
JykgPj0gMCA/IHR5cGUuc3BsaXQoJyAnKSA6IFt0eXBlXTsKKyAgICB2YXIgaSA9IHR5cGVzLmxl
bmd0aDsKKworICAgIHdoaWxlIChpLS0pIHsKKyAgICAgIHR5cGUgPSB0eXBlc1tpXTsKKyAgICAg
IHZhciBldmVudEZucyA9IGV2ZW50c1t0eXBlXTsKKworICAgICAgaWYgKCFldmVudEZucykgewor
ICAgICAgICBldmVudHNbdHlwZV0gPSBbXTsKKworICAgICAgICBpZiAodHlwZSA9PT0gJ21vdXNl
ZW50ZXInIHx8IHR5cGUgPT09ICdtb3VzZWxlYXZlJykgeworICAgICAgICAgIC8vIFJlZmVyIHRv
IGpRdWVyeSdzIGltcGxlbWVudGF0aW9uIG9mIG1vdXNlZW50ZXIgJiBtb3VzZWxlYXZlCisgICAg
ICAgICAgLy8gUmVhZCBhYm91dCBtb3VzZWVudGVyIGFuZCBtb3VzZWxlYXZlOgorICAgICAgICAg
IC8vIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvanMvZXZlbnRzX21vdXNlLmh0bWwjbGluazgK
KworICAgICAgICAgIGpxTGl0ZU9uKGVsZW1lbnQsIE1PVVNFX0VWRU5UX01BUFt0eXBlXSwgZnVu
Y3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLCByZWxhdGVkID0g
ZXZlbnQucmVsYXRlZFRhcmdldDsKKyAgICAgICAgICAgIC8vIEZvciBtb3VzZW50ZXIvbGVhdmUg
Y2FsbCB0aGUgaGFuZGxlciBpZiByZWxhdGVkIGlzIG91dHNpZGUgdGhlIHRhcmdldC4KKyAgICAg
ICAgICAgIC8vIE5COiBObyByZWxhdGVkVGFyZ2V0IGlmIHRoZSBtb3VzZSBsZWZ0L2VudGVyZWQg
dGhlIGJyb3dzZXIgd2luZG93CisgICAgICAgICAgICBpZiAoIXJlbGF0ZWQgfHwgKHJlbGF0ZWQg
IT09IHRhcmdldCAmJiAhdGFyZ2V0LmNvbnRhaW5zKHJlbGF0ZWQpKSkgeworICAgICAgICAgICAg
ICBoYW5kbGUoZXZlbnQsIHR5cGUpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0pOworCisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaWYgKHR5cGUgIT09ICckZGVzdHJveScpIHsKKyAg
ICAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXJGbihlbGVtZW50LCB0eXBlLCBoYW5kbGUpOworICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBldmVudEZucyA9IGV2ZW50c1t0eXBlXTsKKyAg
ICAgIH0KKyAgICAgIGV2ZW50Rm5zLnB1c2goZm4pOworICAgIH0KKyAgfSwKKworICBvZmY6IGpx
TGl0ZU9mZiwKKworICBvbmU6IGZ1bmN0aW9uKGVsZW1lbnQsIHR5cGUsIGZuKSB7CisgICAgZWxl
bWVudCA9IGpxTGl0ZShlbGVtZW50KTsKKworICAgIC8vYWRkIHRoZSBsaXN0ZW5lciB0d2ljZSBz
byB0aGF0IHdoZW4gaXQgaXMgY2FsbGVkCisgICAgLy95b3UgY2FuIHJlbW92ZSB0aGUgb3JpZ2lu
YWwgZnVuY3Rpb24gYW5kIHN0aWxsIGJlCisgICAgLy9hYmxlIHRvIGNhbGwgZWxlbWVudC5vZmYo
ZXYsIGZuKSBub3JtYWxseQorICAgIGVsZW1lbnQub24odHlwZSwgZnVuY3Rpb24gb25GbigpIHsK
KyAgICAgIGVsZW1lbnQub2ZmKHR5cGUsIGZuKTsKKyAgICAgIGVsZW1lbnQub2ZmKHR5cGUsIG9u
Rm4pOworICAgIH0pOworICAgIGVsZW1lbnQub24odHlwZSwgZm4pOworICB9LAorCisgIHJlcGxh
Y2VXaXRoOiBmdW5jdGlvbihlbGVtZW50LCByZXBsYWNlTm9kZSkgeworICAgIHZhciBpbmRleCwg
cGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlOworICAgIGpxTGl0ZURlYWxvYyhlbGVtZW50KTsK
KyAgICBmb3JFYWNoKG5ldyBKUUxpdGUocmVwbGFjZU5vZGUpLCBmdW5jdGlvbihub2RlKSB7Cisg
ICAgICBpZiAoaW5kZXgpIHsKKyAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShub2RlLCBpbmRl
eC5uZXh0U2libGluZyk7CisgICAgICB9IGVsc2UgeworICAgICAgICBwYXJlbnQucmVwbGFjZUNo
aWxkKG5vZGUsIGVsZW1lbnQpOworICAgICAgfQorICAgICAgaW5kZXggPSBub2RlOworICAgIH0p
OworICB9LAorCisgIGNoaWxkcmVuOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgdmFyIGNoaWxk
cmVuID0gW107CisgICAgZm9yRWFjaChlbGVtZW50LmNoaWxkTm9kZXMsIGZ1bmN0aW9uKGVsZW1l
bnQpIHsKKyAgICAgIGlmIChlbGVtZW50Lm5vZGVUeXBlID09PSBOT0RFX1RZUEVfRUxFTUVOVCkg
eworICAgICAgICBjaGlsZHJlbi5wdXNoKGVsZW1lbnQpOworICAgICAgfQorICAgIH0pOworICAg
IHJldHVybiBjaGlsZHJlbjsKKyAgfSwKKworICBjb250ZW50czogZnVuY3Rpb24oZWxlbWVudCkg
eworICAgIHJldHVybiBlbGVtZW50LmNvbnRlbnREb2N1bWVudCB8fCBlbGVtZW50LmNoaWxkTm9k
ZXMgfHwgW107CisgIH0sCisKKyAgYXBwZW5kOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7Cisg
ICAgdmFyIG5vZGVUeXBlID0gZWxlbWVudC5ub2RlVHlwZTsKKyAgICBpZiAobm9kZVR5cGUgIT09
IE5PREVfVFlQRV9FTEVNRU5UICYmIG5vZGVUeXBlICE9PSBOT0RFX1RZUEVfRE9DVU1FTlRfRlJB
R01FTlQpIHJldHVybjsKKworICAgIG5vZGUgPSBuZXcgSlFMaXRlKG5vZGUpOworCisgICAgZm9y
ICh2YXIgaSA9IDAsIGlpID0gbm9kZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICB2YXIg
Y2hpbGQgPSBub2RlW2ldOworICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7CisgICAg
fQorICB9LAorCisgIHByZXBlbmQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHsKKyAgICBpZiAo
ZWxlbWVudC5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFX0VMRU1FTlQpIHsKKyAgICAgIHZhciBpbmRl
eCA9IGVsZW1lbnQuZmlyc3RDaGlsZDsKKyAgICAgIGZvckVhY2gobmV3IEpRTGl0ZShub2RlKSwg
ZnVuY3Rpb24oY2hpbGQpIHsKKyAgICAgICAgZWxlbWVudC5pbnNlcnRCZWZvcmUoY2hpbGQsIGlu
ZGV4KTsKKyAgICAgIH0pOworICAgIH0KKyAgfSwKKworICB3cmFwOiBmdW5jdGlvbihlbGVtZW50
LCB3cmFwTm9kZSkgeworICAgIHdyYXBOb2RlID0ganFMaXRlKHdyYXBOb2RlKS5lcSgwKS5jbG9u
ZSgpWzBdOworICAgIHZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7CisgICAgaWYgKHBh
cmVudCkgeworICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZCh3cmFwTm9kZSwgZWxlbWVudCk7Cisg
ICAgfQorICAgIHdyYXBOb2RlLmFwcGVuZENoaWxkKGVsZW1lbnQpOworICB9LAorCisgIHJlbW92
ZToganFMaXRlUmVtb3ZlLAorCisgIGRldGFjaDogZnVuY3Rpb24oZWxlbWVudCkgeworICAgIGpx
TGl0ZVJlbW92ZShlbGVtZW50LCB0cnVlKTsKKyAgfSwKKworICBhZnRlcjogZnVuY3Rpb24oZWxl
bWVudCwgbmV3RWxlbWVudCkgeworICAgIHZhciBpbmRleCA9IGVsZW1lbnQsIHBhcmVudCA9IGVs
ZW1lbnQucGFyZW50Tm9kZTsKKyAgICBuZXdFbGVtZW50ID0gbmV3IEpRTGl0ZShuZXdFbGVtZW50
KTsKKworICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IG5ld0VsZW1lbnQubGVuZ3RoOyBpIDwgaWk7
IGkrKykgeworICAgICAgdmFyIG5vZGUgPSBuZXdFbGVtZW50W2ldOworICAgICAgcGFyZW50Lmlu
c2VydEJlZm9yZShub2RlLCBpbmRleC5uZXh0U2libGluZyk7CisgICAgICBpbmRleCA9IG5vZGU7
CisgICAgfQorICB9LAorCisgIGFkZENsYXNzOiBqcUxpdGVBZGRDbGFzcywKKyAgcmVtb3ZlQ2xh
c3M6IGpxTGl0ZVJlbW92ZUNsYXNzLAorCisgIHRvZ2dsZUNsYXNzOiBmdW5jdGlvbihlbGVtZW50
LCBzZWxlY3RvciwgY29uZGl0aW9uKSB7CisgICAgaWYgKHNlbGVjdG9yKSB7CisgICAgICBmb3JF
YWNoKHNlbGVjdG9yLnNwbGl0KCcgJyksIGZ1bmN0aW9uKGNsYXNzTmFtZSkgeworICAgICAgICB2
YXIgY2xhc3NDb25kaXRpb24gPSBjb25kaXRpb247CisgICAgICAgIGlmIChpc1VuZGVmaW5lZChj
bGFzc0NvbmRpdGlvbikpIHsKKyAgICAgICAgICBjbGFzc0NvbmRpdGlvbiA9ICFqcUxpdGVIYXND
bGFzcyhlbGVtZW50LCBjbGFzc05hbWUpOworICAgICAgICB9CisgICAgICAgIChjbGFzc0NvbmRp
dGlvbiA/IGpxTGl0ZUFkZENsYXNzIDoganFMaXRlUmVtb3ZlQ2xhc3MpKGVsZW1lbnQsIGNsYXNz
TmFtZSk7CisgICAgICB9KTsKKyAgICB9CisgIH0sCisKKyAgcGFyZW50OiBmdW5jdGlvbihlbGVt
ZW50KSB7CisgICAgdmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTsKKyAgICByZXR1cm4g
cGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSAhPT0gTk9ERV9UWVBFX0RPQ1VNRU5UX0ZSQUdNRU5U
ID8gcGFyZW50IDogbnVsbDsKKyAgfSwKKworICBuZXh0OiBmdW5jdGlvbihlbGVtZW50KSB7Cisg
ICAgcmV0dXJuIGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nOworICB9LAorCisgIGZpbmQ6IGZ1
bmN0aW9uKGVsZW1lbnQsIHNlbGVjdG9yKSB7CisgICAgaWYgKGVsZW1lbnQuZ2V0RWxlbWVudHNC
eVRhZ05hbWUpIHsKKyAgICAgIHJldHVybiBlbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKHNl
bGVjdG9yKTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIFtdOworICAgIH0KKyAgfSwKKwor
ICBjbG9uZToganFMaXRlQ2xvbmUsCisKKyAgdHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uKGVsZW1l
bnQsIGV2ZW50LCBleHRyYVBhcmFtZXRlcnMpIHsKKworICAgIHZhciBkdW1teUV2ZW50LCBldmVu
dEZuc0NvcHksIGhhbmRsZXJBcmdzOworICAgIHZhciBldmVudE5hbWUgPSBldmVudC50eXBlIHx8
IGV2ZW50OworICAgIHZhciBleHBhbmRvU3RvcmUgPSBqcUxpdGVFeHBhbmRvU3RvcmUoZWxlbWVu
dCk7CisgICAgdmFyIGV2ZW50cyA9IGV4cGFuZG9TdG9yZSAmJiBleHBhbmRvU3RvcmUuZXZlbnRz
OworICAgIHZhciBldmVudEZucyA9IGV2ZW50cyAmJiBldmVudHNbZXZlbnROYW1lXTsKKworICAg
IGlmIChldmVudEZucykgeworICAgICAgLy8gQ3JlYXRlIGEgZHVtbXkgZXZlbnQgdG8gcGFzcyB0
byB0aGUgaGFuZGxlcnMKKyAgICAgIGR1bW15RXZlbnQgPSB7CisgICAgICAgIHByZXZlbnREZWZh
dWx0OiBmdW5jdGlvbigpIHsgdGhpcy5kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTsgfSwKKyAgICAg
ICAgaXNEZWZhdWx0UHJldmVudGVkOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuZGVmYXVsdFBy
ZXZlbnRlZCA9PT0gdHJ1ZTsgfSwKKyAgICAgICAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBm
dW5jdGlvbigpIHsgdGhpcy5pbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSB0cnVlOyB9LAor
ICAgICAgICBpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogZnVuY3Rpb24oKSB7IHJldHVy
biB0aGlzLmltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9PT0gdHJ1ZTsgfSwKKyAgICAgICAg
c3RvcFByb3BhZ2F0aW9uOiBub29wLAorICAgICAgICB0eXBlOiBldmVudE5hbWUsCisgICAgICAg
IHRhcmdldDogZWxlbWVudAorICAgICAgfTsKKworICAgICAgLy8gSWYgYSBjdXN0b20gZXZlbnQg
d2FzIHByb3ZpZGVkIHRoZW4gZXh0ZW5kIG91ciBkdW1teSBldmVudCB3aXRoIGl0CisgICAgICBp
ZiAoZXZlbnQudHlwZSkgeworICAgICAgICBkdW1teUV2ZW50ID0gZXh0ZW5kKGR1bW15RXZlbnQs
IGV2ZW50KTsKKyAgICAgIH0KKworICAgICAgLy8gQ29weSBldmVudCBoYW5kbGVycyBpbiBjYXNl
IGV2ZW50IGhhbmRsZXJzIGFycmF5IGlzIG1vZGlmaWVkIGR1cmluZyBleGVjdXRpb24uCisgICAg
ICBldmVudEZuc0NvcHkgPSBzaGFsbG93Q29weShldmVudEZucyk7CisgICAgICBoYW5kbGVyQXJn
cyA9IGV4dHJhUGFyYW1ldGVycyA/IFtkdW1teUV2ZW50XS5jb25jYXQoZXh0cmFQYXJhbWV0ZXJz
KSA6IFtkdW1teUV2ZW50XTsKKworICAgICAgZm9yRWFjaChldmVudEZuc0NvcHksIGZ1bmN0aW9u
KGZuKSB7CisgICAgICAgIGlmICghZHVtbXlFdmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3Rv
cHBlZCgpKSB7CisgICAgICAgICAgZm4uYXBwbHkoZWxlbWVudCwgaGFuZGxlckFyZ3MpOworICAg
ICAgICB9CisgICAgICB9KTsKKyAgICB9CisgIH0KK30sIGZ1bmN0aW9uKGZuLCBuYW1lKSB7Cisg
IC8qKgorICAgKiBjaGFpbmluZyBmdW5jdGlvbnMKKyAgICovCisgIEpRTGl0ZS5wcm90b3R5cGVb
bmFtZV0gPSBmdW5jdGlvbihhcmcxLCBhcmcyLCBhcmczKSB7CisgICAgdmFyIHZhbHVlOworCisg
ICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAg
ICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKSB7CisgICAgICAgIHZhbHVlID0gZm4odGhpc1tpXSwg
YXJnMSwgYXJnMiwgYXJnMyk7CisgICAgICAgIGlmIChpc0RlZmluZWQodmFsdWUpKSB7CisgICAg
ICAgICAgLy8gYW55IGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYSB2YWx1ZSBuZWVkcyB0byBiZSB3
cmFwcGVkCisgICAgICAgICAgdmFsdWUgPSBqcUxpdGUodmFsdWUpOworICAgICAgICB9CisgICAg
ICB9IGVsc2UgeworICAgICAgICBqcUxpdGVBZGROb2Rlcyh2YWx1ZSwgZm4odGhpc1tpXSwgYXJn
MSwgYXJnMiwgYXJnMykpOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gaXNEZWZpbmVkKHZh
bHVlKSA/IHZhbHVlIDogdGhpczsKKyAgfTsKKworICAvLyBiaW5kIGxlZ2FjeSBiaW5kL3VuYmlu
ZCB0byBvbi9vZmYKKyAgSlFMaXRlLnByb3RvdHlwZS5iaW5kID0gSlFMaXRlLnByb3RvdHlwZS5v
bjsKKyAgSlFMaXRlLnByb3RvdHlwZS51bmJpbmQgPSBKUUxpdGUucHJvdG90eXBlLm9mZjsKK30p
OworCisKKy8vIFByb3ZpZGVyIGZvciBwcml2YXRlICQkanFMaXRlIHNlcnZpY2UKK2Z1bmN0aW9u
ICQkanFMaXRlUHJvdmlkZXIoKSB7CisgIHRoaXMuJGdldCA9IGZ1bmN0aW9uICQkanFMaXRlKCkg
eworICAgIHJldHVybiBleHRlbmQoSlFMaXRlLCB7CisgICAgICBoYXNDbGFzczogZnVuY3Rpb24o
bm9kZSwgY2xhc3NlcykgeworICAgICAgICBpZiAobm9kZS5hdHRyKSBub2RlID0gbm9kZVswXTsK
KyAgICAgICAgcmV0dXJuIGpxTGl0ZUhhc0NsYXNzKG5vZGUsIGNsYXNzZXMpOworICAgICAgfSwK
KyAgICAgIGFkZENsYXNzOiBmdW5jdGlvbihub2RlLCBjbGFzc2VzKSB7CisgICAgICAgIGlmIChu
b2RlLmF0dHIpIG5vZGUgPSBub2RlWzBdOworICAgICAgICByZXR1cm4ganFMaXRlQWRkQ2xhc3Mo
bm9kZSwgY2xhc3Nlcyk7CisgICAgICB9LAorICAgICAgcmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKG5v
ZGUsIGNsYXNzZXMpIHsKKyAgICAgICAgaWYgKG5vZGUuYXR0cikgbm9kZSA9IG5vZGVbMF07Cisg
ICAgICAgIHJldHVybiBqcUxpdGVSZW1vdmVDbGFzcyhub2RlLCBjbGFzc2VzKTsKKyAgICAgIH0K
KyAgICB9KTsKKyAgfTsKK30KKworLyoqCisgKiBDb21wdXRlcyBhIGhhc2ggb2YgYW4gJ29iaicu
CisgKiBIYXNoIG9mIGE6CisgKiAgc3RyaW5nIGlzIHN0cmluZworICogIG51bWJlciBpcyBudW1i
ZXIgYXMgc3RyaW5nCisgKiAgb2JqZWN0IGlzIGVpdGhlciByZXN1bHQgb2YgY2FsbGluZyAkJGhh
c2hLZXkgZnVuY3Rpb24gb24gdGhlIG9iamVjdCBvciB1bmlxdWVseSBnZW5lcmF0ZWQgaWQsCisg
KiAgICAgICAgIHRoYXQgaXMgYWxzbyBhc3NpZ25lZCB0byB0aGUgJCRoYXNoS2V5IHByb3BlcnR5
IG9mIHRoZSBvYmplY3QuCisgKgorICogQHBhcmFtIG9iagorICogQHJldHVybnMge3N0cmluZ30g
aGFzaCBzdHJpbmcgc3VjaCB0aGF0IHRoZSBzYW1lIGlucHV0IHdpbGwgaGF2ZSB0aGUgc2FtZSBo
YXNoIHN0cmluZy4KKyAqICAgICAgICAgVGhlIHJlc3VsdGluZyBzdHJpbmcga2V5IGlzIGluICd0
eXBlOmhhc2hLZXknIGZvcm1hdC4KKyAqLworZnVuY3Rpb24gaGFzaEtleShvYmosIG5leHRVaWRG
bikgeworICB2YXIga2V5ID0gb2JqICYmIG9iai4kJGhhc2hLZXk7CisKKyAgaWYgKGtleSkgewor
ICAgIGlmICh0eXBlb2Yga2V5ID09PSAnZnVuY3Rpb24nKSB7CisgICAgICBrZXkgPSBvYmouJCRo
YXNoS2V5KCk7CisgICAgfQorICAgIHJldHVybiBrZXk7CisgIH0KKworICB2YXIgb2JqVHlwZSA9
IHR5cGVvZiBvYmo7CisgIGlmIChvYmpUeXBlID09ICdmdW5jdGlvbicgfHwgKG9ialR5cGUgPT0g
J29iamVjdCcgJiYgb2JqICE9PSBudWxsKSkgeworICAgIGtleSA9IG9iai4kJGhhc2hLZXkgPSBv
YmpUeXBlICsgJzonICsgKG5leHRVaWRGbiB8fCBuZXh0VWlkKSgpOworICB9IGVsc2UgeworICAg
IGtleSA9IG9ialR5cGUgKyAnOicgKyBvYmo7CisgIH0KKworICByZXR1cm4ga2V5OworfQorCisv
KioKKyAqIEhhc2hNYXAgd2hpY2ggY2FuIHVzZSBvYmplY3RzIGFzIGtleXMKKyAqLworZnVuY3Rp
b24gSGFzaE1hcChhcnJheSwgaXNvbGF0ZWRVaWQpIHsKKyAgaWYgKGlzb2xhdGVkVWlkKSB7Cisg
ICAgdmFyIHVpZCA9IDA7CisgICAgdGhpcy5uZXh0VWlkID0gZnVuY3Rpb24oKSB7CisgICAgICBy
ZXR1cm4gKyt1aWQ7CisgICAgfTsKKyAgfQorICBmb3JFYWNoKGFycmF5LCB0aGlzLnB1dCwgdGhp
cyk7Cit9CitIYXNoTWFwLnByb3RvdHlwZSA9IHsKKyAgLyoqCisgICAqIFN0b3JlIGtleSB2YWx1
ZSBwYWlyCisgICAqIEBwYXJhbSBrZXkga2V5IHRvIHN0b3JlIGNhbiBiZSBhbnkgdHlwZQorICAg
KiBAcGFyYW0gdmFsdWUgdmFsdWUgdG8gc3RvcmUgY2FuIGJlIGFueSB0eXBlCisgICAqLworICBw
dXQ6IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKKyAgICB0aGlzW2hhc2hLZXkoa2V5LCB0aGlzLm5l
eHRVaWQpXSA9IHZhbHVlOworICB9LAorCisgIC8qKgorICAgKiBAcGFyYW0ga2V5CisgICAqIEBy
ZXR1cm5zIHtPYmplY3R9IHRoZSB2YWx1ZSBmb3IgdGhlIGtleQorICAgKi8KKyAgZ2V0OiBmdW5j
dGlvbihrZXkpIHsKKyAgICByZXR1cm4gdGhpc1toYXNoS2V5KGtleSwgdGhpcy5uZXh0VWlkKV07
CisgIH0sCisKKyAgLyoqCisgICAqIFJlbW92ZSB0aGUga2V5L3ZhbHVlIHBhaXIKKyAgICogQHBh
cmFtIGtleQorICAgKi8KKyAgcmVtb3ZlOiBmdW5jdGlvbihrZXkpIHsKKyAgICB2YXIgdmFsdWUg
PSB0aGlzW2tleSA9IGhhc2hLZXkoa2V5LCB0aGlzLm5leHRVaWQpXTsKKyAgICBkZWxldGUgdGhp
c1trZXldOworICAgIHJldHVybiB2YWx1ZTsKKyAgfQorfTsKKwordmFyICQkSGFzaE1hcFByb3Zp
ZGVyID0gW2Z1bmN0aW9uKCkgeworICB0aGlzLiRnZXQgPSBbZnVuY3Rpb24oKSB7CisgICAgcmV0
dXJuIEhhc2hNYXA7CisgIH1dOworfV07CisKKy8qKgorICogQG5nZG9jIGZ1bmN0aW9uCisgKiBA
bW9kdWxlIG5nCisgKiBAbmFtZSBhbmd1bGFyLmluamVjdG9yCisgKiBAa2luZCBmdW5jdGlvbgor
ICoKKyAqIEBkZXNjcmlwdGlvbgorICogQ3JlYXRlcyBhbiBpbmplY3RvciBvYmplY3QgdGhhdCBj
YW4gYmUgdXNlZCBmb3IgcmV0cmlldmluZyBzZXJ2aWNlcyBhcyB3ZWxsIGFzIGZvcgorICogZGVw
ZW5kZW5jeSBpbmplY3Rpb24gKHNlZSB7QGxpbmsgZ3VpZGUvZGkgZGVwZW5kZW5jeSBpbmplY3Rp
b259KS4KKyAqCisgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmd8RnVuY3Rpb24+fSBtb2R1bGVzIEEg
bGlzdCBvZiBtb2R1bGUgZnVuY3Rpb25zIG9yIHRoZWlyIGFsaWFzZXMuIFNlZQorICogICAgIHtA
bGluayBhbmd1bGFyLm1vZHVsZX0uIFRoZSBgbmdgIG1vZHVsZSBtdXN0IGJlIGV4cGxpY2l0bHkg
YWRkZWQuCisgKiBAcGFyYW0ge2Jvb2xlYW49fSBbc3RyaWN0RGk9ZmFsc2VdIFdoZXRoZXIgdGhl
IGluamVjdG9yIHNob3VsZCBiZSBpbiBzdHJpY3QgbW9kZSwgd2hpY2gKKyAqICAgICBkaXNhbGxv
d3MgYXJndW1lbnQgbmFtZSBhbm5vdGF0aW9uIGluZmVyZW5jZS4KKyAqIEByZXR1cm5zIHtpbmpl
Y3Rvcn0gSW5qZWN0b3Igb2JqZWN0LiBTZWUge0BsaW5rIGF1dG8uJGluamVjdG9yICRpbmplY3Rv
cn0uCisgKgorICogQGV4YW1wbGUKKyAqIFR5cGljYWwgdXNhZ2UKKyAqIGBgYGpzCisgKiAgIC8v
IGNyZWF0ZSBhbiBpbmplY3RvcgorICogICB2YXIgJGluamVjdG9yID0gYW5ndWxhci5pbmplY3Rv
cihbJ25nJ10pOworICoKKyAqICAgLy8gdXNlIHRoZSBpbmplY3RvciB0byBraWNrIG9mZiB5b3Vy
IGFwcGxpY2F0aW9uCisgKiAgIC8vIHVzZSB0aGUgdHlwZSBpbmZlcmVuY2UgdG8gYXV0byBpbmpl
Y3QgYXJndW1lbnRzLCBvciB1c2UgaW1wbGljaXQgaW5qZWN0aW9uCisgKiAgICRpbmplY3Rvci5p
bnZva2UoZnVuY3Rpb24oJHJvb3RTY29wZSwgJGNvbXBpbGUsICRkb2N1bWVudCkgeworICogICAg
ICRjb21waWxlKCRkb2N1bWVudCkoJHJvb3RTY29wZSk7CisgKiAgICAgJHJvb3RTY29wZS4kZGln
ZXN0KCk7CisgKiAgIH0pOworICogYGBgCisgKgorICogU29tZXRpbWVzIHlvdSB3YW50IHRvIGdl
dCBhY2Nlc3MgdG8gdGhlIGluamVjdG9yIG9mIGEgY3VycmVudGx5IHJ1bm5pbmcgQW5ndWxhciBh
cHAKKyAqIGZyb20gb3V0c2lkZSBBbmd1bGFyLiBQZXJoYXBzLCB5b3Ugd2FudCB0byBpbmplY3Qg
YW5kIGNvbXBpbGUgc29tZSBtYXJrdXAgYWZ0ZXIgdGhlCisgKiBhcHBsaWNhdGlvbiBoYXMgYmVl
biBib290c3RyYXBwZWQuIFlvdSBjYW4gZG8gdGhpcyB1c2luZyB0aGUgZXh0cmEgYGluamVjdG9y
KClgIGFkZGVkCisgKiB0byBKUXVlcnkvanFMaXRlIGVsZW1lbnRzLiBTZWUge0BsaW5rIGFuZ3Vs
YXIuZWxlbWVudH0uCisgKgorICogKlRoaXMgaXMgZmFpcmx5IHJhcmUgYnV0IGNvdWxkIGJlIHRo
ZSBjYXNlIGlmIGEgdGhpcmQgcGFydHkgbGlicmFyeSBpcyBpbmplY3RpbmcgdGhlCisgKiBtYXJr
dXAuKgorICoKKyAqIEluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSBhIG5ldyBibG9jayBvZiBIVE1M
IGNvbnRhaW5pbmcgYSBgbmctY29udHJvbGxlcmAKKyAqIGRpcmVjdGl2ZSBpcyBhZGRlZCB0byB0
aGUgZW5kIG9mIHRoZSBkb2N1bWVudCBib2R5IGJ5IEpRdWVyeS4gV2UgdGhlbiBjb21waWxlIGFu
ZCBsaW5rCisgKiBpdCBpbnRvIHRoZSBjdXJyZW50IEFuZ3VsYXJKUyBzY29wZS4KKyAqCisgKiBg
YGBqcworICogdmFyICRkaXYgPSAkKCc8ZGl2IG5nLWNvbnRyb2xsZXI9Ik15Q3RybCI+e3tjb250
ZW50LmxhYmVsfX08L2Rpdj4nKTsKKyAqICQoZG9jdW1lbnQuYm9keSkuYXBwZW5kKCRkaXYpOwor
ICoKKyAqIGFuZ3VsYXIuZWxlbWVudChkb2N1bWVudCkuaW5qZWN0b3IoKS5pbnZva2UoZnVuY3Rp
b24oJGNvbXBpbGUpIHsKKyAqICAgdmFyIHNjb3BlID0gYW5ndWxhci5lbGVtZW50KCRkaXYpLnNj
b3BlKCk7CisgKiAgICRjb21waWxlKCRkaXYpKHNjb3BlKTsKKyAqIH0pOworICogYGBgCisgKi8K
KworCisvKioKKyAqIEBuZ2RvYyBtb2R1bGUKKyAqIEBuYW1lIGF1dG8KKyAqIEBkZXNjcmlwdGlv
bgorICoKKyAqIEltcGxpY2l0IG1vZHVsZSB3aGljaCBnZXRzIGF1dG9tYXRpY2FsbHkgYWRkZWQg
dG8gZWFjaCB7QGxpbmsgYXV0by4kaW5qZWN0b3IgJGluamVjdG9yfS4KKyAqLworCit2YXIgRk5f
QVJHUyA9IC9eZnVuY3Rpb25ccypbXlwoXSpcKFxzKihbXlwpXSopXCkvbTsKK3ZhciBGTl9BUkdf
U1BMSVQgPSAvLC87Cit2YXIgRk5fQVJHID0gL15ccyooXz8pKFxTKz8pXDFccyokLzsKK3ZhciBT
VFJJUF9DT01NRU5UUyA9IC8oKFwvXC8uKiQpfChcL1wqW1xzXFNdKj9cKlwvKSkvbWc7Cit2YXIg
JGluamVjdG9yTWluRXJyID0gbWluRXJyKCckaW5qZWN0b3InKTsKKworZnVuY3Rpb24gYW5vbkZu
KGZuKSB7CisgIC8vIEZvciBhbm9ueW1vdXMgZnVuY3Rpb25zLCBzaG93aW5nIGF0IHRoZSB2ZXJ5
IGxlYXN0IHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgY2FuIGhlbHAgaW4KKyAgLy8gZGVidWdnaW5n
LgorICB2YXIgZm5UZXh0ID0gZm4udG9TdHJpbmcoKS5yZXBsYWNlKFNUUklQX0NPTU1FTlRTLCAn
JyksCisgICAgICBhcmdzID0gZm5UZXh0Lm1hdGNoKEZOX0FSR1MpOworICBpZiAoYXJncykgewor
ICAgIHJldHVybiAnZnVuY3Rpb24oJyArIChhcmdzWzFdIHx8ICcnKS5yZXBsYWNlKC9bXHNcclxu
XSsvLCAnICcpICsgJyknOworICB9CisgIHJldHVybiAnZm4nOworfQorCitmdW5jdGlvbiBhbm5v
dGF0ZShmbiwgc3RyaWN0RGksIG5hbWUpIHsKKyAgdmFyICRpbmplY3QsCisgICAgICBmblRleHQs
CisgICAgICBhcmdEZWNsLAorICAgICAgbGFzdDsKKworICBpZiAodHlwZW9mIGZuID09PSAnZnVu
Y3Rpb24nKSB7CisgICAgaWYgKCEoJGluamVjdCA9IGZuLiRpbmplY3QpKSB7CisgICAgICAkaW5q
ZWN0ID0gW107CisgICAgICBpZiAoZm4ubGVuZ3RoKSB7CisgICAgICAgIGlmIChzdHJpY3REaSkg
eworICAgICAgICAgIGlmICghaXNTdHJpbmcobmFtZSkgfHwgIW5hbWUpIHsKKyAgICAgICAgICAg
IG5hbWUgPSBmbi5uYW1lIHx8IGFub25Gbihmbik7CisgICAgICAgICAgfQorICAgICAgICAgIHRo
cm93ICRpbmplY3Rvck1pbkVycignc3RyaWN0ZGknLAorICAgICAgICAgICAgJ3swfSBpcyBub3Qg
dXNpbmcgZXhwbGljaXQgYW5ub3RhdGlvbiBhbmQgY2Fubm90IGJlIGludm9rZWQgaW4gc3RyaWN0
IG1vZGUnLCBuYW1lKTsKKyAgICAgICAgfQorICAgICAgICBmblRleHQgPSBmbi50b1N0cmluZygp
LnJlcGxhY2UoU1RSSVBfQ09NTUVOVFMsICcnKTsKKyAgICAgICAgYXJnRGVjbCA9IGZuVGV4dC5t
YXRjaChGTl9BUkdTKTsKKyAgICAgICAgZm9yRWFjaChhcmdEZWNsWzFdLnNwbGl0KEZOX0FSR19T
UExJVCksIGZ1bmN0aW9uKGFyZykgeworICAgICAgICAgIGFyZy5yZXBsYWNlKEZOX0FSRywgZnVu
Y3Rpb24oYWxsLCB1bmRlcnNjb3JlLCBuYW1lKSB7CisgICAgICAgICAgICAkaW5qZWN0LnB1c2go
bmFtZSk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAgfQorICAgICAgZm4uJGlu
amVjdCA9ICRpbmplY3Q7CisgICAgfQorICB9IGVsc2UgaWYgKGlzQXJyYXkoZm4pKSB7CisgICAg
bGFzdCA9IGZuLmxlbmd0aCAtIDE7CisgICAgYXNzZXJ0QXJnRm4oZm5bbGFzdF0sICdmbicpOwor
ICAgICRpbmplY3QgPSBmbi5zbGljZSgwLCBsYXN0KTsKKyAgfSBlbHNlIHsKKyAgICBhc3NlcnRB
cmdGbihmbiwgJ2ZuJywgdHJ1ZSk7CisgIH0KKyAgcmV0dXJuICRpbmplY3Q7Cit9CisKKy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvKioKKyAqIEBuZ2RvYyBzZXJ2
aWNlCisgKiBAbmFtZSAkaW5qZWN0b3IKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqCisgKiBgJGlu
amVjdG9yYCBpcyB1c2VkIHRvIHJldHJpZXZlIG9iamVjdCBpbnN0YW5jZXMgYXMgZGVmaW5lZCBi
eQorICoge0BsaW5rIGF1dG8uJHByb3ZpZGUgcHJvdmlkZXJ9LCBpbnN0YW50aWF0ZSB0eXBlcywg
aW52b2tlIG1ldGhvZHMsCisgKiBhbmQgbG9hZCBtb2R1bGVzLgorICoKKyAqIFRoZSBmb2xsb3dp
bmcgYWx3YXlzIGhvbGRzIHRydWU6CisgKgorICogYGBganMKKyAqICAgdmFyICRpbmplY3RvciA9
IGFuZ3VsYXIuaW5qZWN0b3IoKTsKKyAqICAgZXhwZWN0KCRpbmplY3Rvci5nZXQoJyRpbmplY3Rv
cicpKS50b0JlKCRpbmplY3Rvcik7CisgKiAgIGV4cGVjdCgkaW5qZWN0b3IuaW52b2tlKGZ1bmN0
aW9uKCRpbmplY3RvcikgeworICogICAgIHJldHVybiAkaW5qZWN0b3I7CisgKiAgIH0pKS50b0Jl
KCRpbmplY3Rvcik7CisgKiBgYGAKKyAqCisgKiAjIEluamVjdGlvbiBGdW5jdGlvbiBBbm5vdGF0
aW9uCisgKgorICogSmF2YVNjcmlwdCBkb2VzIG5vdCBoYXZlIGFubm90YXRpb25zLCBhbmQgYW5u
b3RhdGlvbnMgYXJlIG5lZWRlZCBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb24uIFRoZQorICogZm9s
bG93aW5nIGFyZSBhbGwgdmFsaWQgd2F5cyBvZiBhbm5vdGF0aW5nIGZ1bmN0aW9uIHdpdGggaW5q
ZWN0aW9uIGFyZ3VtZW50cyBhbmQgYXJlIGVxdWl2YWxlbnQuCisgKgorICogYGBganMKKyAqICAg
Ly8gaW5mZXJyZWQgKG9ubHkgd29ya3MgaWYgY29kZSBub3QgbWluaWZpZWQvb2JmdXNjYXRlZCkK
KyAqICAgJGluamVjdG9yLmludm9rZShmdW5jdGlvbihzZXJ2aWNlQSl7fSk7CisgKgorICogICAv
LyBhbm5vdGF0ZWQKKyAqICAgZnVuY3Rpb24gZXhwbGljaXQoc2VydmljZUEpIHt9OworICogICBl
eHBsaWNpdC4kaW5qZWN0ID0gWydzZXJ2aWNlQSddOworICogICAkaW5qZWN0b3IuaW52b2tlKGV4
cGxpY2l0KTsKKyAqCisgKiAgIC8vIGlubGluZQorICogICAkaW5qZWN0b3IuaW52b2tlKFsnc2Vy
dmljZUEnLCBmdW5jdGlvbihzZXJ2aWNlQSl7fV0pOworICogYGBgCisgKgorICogIyMgSW5mZXJl
bmNlCisgKgorICogSW4gSmF2YVNjcmlwdCBjYWxsaW5nIGB0b1N0cmluZygpYCBvbiBhIGZ1bmN0
aW9uIHJldHVybnMgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uIFRoZSBkZWZpbml0aW9uCisgKiBj
YW4gdGhlbiBiZSBwYXJzZWQgYW5kIHRoZSBmdW5jdGlvbiBhcmd1bWVudHMgY2FuIGJlIGV4dHJh
Y3RlZC4gVGhpcyBtZXRob2Qgb2YgZGlzY292ZXJpbmcKKyAqIGFubm90YXRpb25zIGlzIGRpc2Fs
bG93ZWQgd2hlbiB0aGUgaW5qZWN0b3IgaXMgaW4gc3RyaWN0IG1vZGUuCisgKiAqTk9URToqIFRo
aXMgZG9lcyBub3Qgd29yayB3aXRoIG1pbmlmaWNhdGlvbiwgYW5kIG9iZnVzY2F0aW9uIHRvb2xz
IHNpbmNlIHRoZXNlIHRvb2xzIGNoYW5nZSB0aGUKKyAqIGFyZ3VtZW50IG5hbWVzLgorICoKKyAq
ICMjIGAkaW5qZWN0YCBBbm5vdGF0aW9uCisgKiBCeSBhZGRpbmcgYW4gYCRpbmplY3RgIHByb3Bl
cnR5IG9udG8gYSBmdW5jdGlvbiB0aGUgaW5qZWN0aW9uIHBhcmFtZXRlcnMgY2FuIGJlIHNwZWNp
ZmllZC4KKyAqCisgKiAjIyBJbmxpbmUKKyAqIEFzIGFuIGFycmF5IG9mIGluamVjdGlvbiBuYW1l
cywgd2hlcmUgdGhlIGxhc3QgaXRlbSBpbiB0aGUgYXJyYXkgaXMgdGhlIGZ1bmN0aW9uIHRvIGNh
bGwuCisgKi8KKworLyoqCisgKiBAbmdkb2MgbWV0aG9kCisgKiBAbmFtZSAkaW5qZWN0b3IjZ2V0
CisgKgorICogQGRlc2NyaXB0aW9uCisgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugb2YgdGhlIHNlcnZp
Y2UuCisgKgorICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGluc3RhbmNl
IHRvIHJldHJpZXZlLgorICogQHBhcmFtIHtzdHJpbmc9fSBjYWxsZXIgQW4gb3B0aW9uYWwgc3Ry
aW5nIHRvIHByb3ZpZGUgdGhlIG9yaWdpbiBvZiB0aGUgZnVuY3Rpb24gY2FsbCBmb3IgZXJyb3Ig
bWVzc2FnZXMuCisgKiBAcmV0dXJuIHsqfSBUaGUgaW5zdGFuY2UuCisgKi8KKworLyoqCisgKiBA
bmdkb2MgbWV0aG9kCisgKiBAbmFtZSAkaW5qZWN0b3IjaW52b2tlCisgKgorICogQGRlc2NyaXB0
aW9uCisgKiBJbnZva2UgdGhlIG1ldGhvZCBhbmQgc3VwcGx5IHRoZSBtZXRob2QgYXJndW1lbnRz
IGZyb20gdGhlIGAkaW5qZWN0b3JgLgorICoKKyAqIEBwYXJhbSB7RnVuY3Rpb258QXJyYXkuPHN0
cmluZ3xGdW5jdGlvbj59IGZuIFRoZSBpbmplY3RhYmxlIGZ1bmN0aW9uIHRvIGludm9rZS4gRnVu
Y3Rpb24gcGFyYW1ldGVycyBhcmUKKyAqICAgaW5qZWN0ZWQgYWNjb3JkaW5nIHRvIHRoZSB7QGxp
bmsgZ3VpZGUvZGkgJGluamVjdCBBbm5vdGF0aW9ufSBydWxlcy4KKyAqIEBwYXJhbSB7T2JqZWN0
PX0gc2VsZiBUaGUgYHRoaXNgIGZvciB0aGUgaW52b2tlZCBtZXRob2QuCisgKiBAcGFyYW0ge09i
amVjdD19IGxvY2FscyBPcHRpb25hbCBvYmplY3QuIElmIHByZXNldCB0aGVuIGFueSBhcmd1bWVu
dCBuYW1lcyBhcmUgcmVhZCBmcm9tIHRoaXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIG9i
amVjdCBmaXJzdCwgYmVmb3JlIHRoZSBgJGluamVjdG9yYCBpcyBjb25zdWx0ZWQuCisgKiBAcmV0
dXJucyB7Kn0gdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBpbnZva2VkIGBmbmAgZnVuY3Rpb24u
CisgKi8KKworLyoqCisgKiBAbmdkb2MgbWV0aG9kCisgKiBAbmFtZSAkaW5qZWN0b3IjaGFzCisg
KgorICogQGRlc2NyaXB0aW9uCisgKiBBbGxvd3MgdGhlIHVzZXIgdG8gcXVlcnkgaWYgdGhlIHBh
cnRpY3VsYXIgc2VydmljZSBleGlzdHMuCisgKgorICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFt
ZSBvZiB0aGUgc2VydmljZSB0byBxdWVyeS4KKyAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAg
aWYgaW5qZWN0b3IgaGFzIGdpdmVuIHNlcnZpY2UuCisgKi8KKworLyoqCisgKiBAbmdkb2MgbWV0
aG9kCisgKiBAbmFtZSAkaW5qZWN0b3IjaW5zdGFudGlhdGUKKyAqIEBkZXNjcmlwdGlvbgorICog
Q3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEpTIHR5cGUuIFRoZSBtZXRob2QgdGFrZXMgYSBjb25z
dHJ1Y3RvciBmdW5jdGlvbiwgaW52b2tlcyB0aGUgbmV3CisgKiBvcGVyYXRvciwgYW5kIHN1cHBs
aWVzIGFsbCBvZiB0aGUgYXJndW1lbnRzIHRvIHRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBhcyBz
cGVjaWZpZWQgYnkgdGhlCisgKiBjb25zdHJ1Y3RvciBhbm5vdGF0aW9uLgorICoKKyAqIEBwYXJh
bSB7RnVuY3Rpb259IFR5cGUgQW5ub3RhdGVkIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLgorICogQHBh
cmFtIHtPYmplY3Q9fSBsb2NhbHMgT3B0aW9uYWwgb2JqZWN0LiBJZiBwcmVzZXQgdGhlbiBhbnkg
YXJndW1lbnQgbmFtZXMgYXJlIHJlYWQgZnJvbSB0aGlzCisgKiBvYmplY3QgZmlyc3QsIGJlZm9y
ZSB0aGUgYCRpbmplY3RvcmAgaXMgY29uc3VsdGVkLgorICogQHJldHVybnMge09iamVjdH0gbmV3
IGluc3RhbmNlIG9mIGBUeXBlYC4KKyAqLworCisvKioKKyAqIEBuZ2RvYyBtZXRob2QKKyAqIEBu
YW1lICRpbmplY3RvciNhbm5vdGF0ZQorICoKKyAqIEBkZXNjcmlwdGlvbgorICogUmV0dXJucyBh
biBhcnJheSBvZiBzZXJ2aWNlIG5hbWVzIHdoaWNoIHRoZSBmdW5jdGlvbiBpcyByZXF1ZXN0aW5n
IGZvciBpbmplY3Rpb24uIFRoaXMgQVBJIGlzCisgKiB1c2VkIGJ5IHRoZSBpbmplY3RvciB0byBk
ZXRlcm1pbmUgd2hpY2ggc2VydmljZXMgbmVlZCB0byBiZSBpbmplY3RlZCBpbnRvIHRoZSBmdW5j
dGlvbiB3aGVuIHRoZQorICogZnVuY3Rpb24gaXMgaW52b2tlZC4gVGhlcmUgYXJlIHRocmVlIHdh
eXMgaW4gd2hpY2ggdGhlIGZ1bmN0aW9uIGNhbiBiZSBhbm5vdGF0ZWQgd2l0aCB0aGUgbmVlZGVk
CisgKiBkZXBlbmRlbmNpZXMuCisgKgorICogIyBBcmd1bWVudCBuYW1lcworICoKKyAqIFRoZSBz
aW1wbGVzdCBmb3JtIGlzIHRvIGV4dHJhY3QgdGhlIGRlcGVuZGVuY2llcyBmcm9tIHRoZSBhcmd1
bWVudHMgb2YgdGhlIGZ1bmN0aW9uLiBUaGlzIGlzIGRvbmUKKyAqIGJ5IGNvbnZlcnRpbmcgdGhl
IGZ1bmN0aW9uIGludG8gYSBzdHJpbmcgdXNpbmcgYHRvU3RyaW5nKClgIG1ldGhvZCBhbmQgZXh0
cmFjdGluZyB0aGUgYXJndW1lbnQKKyAqIG5hbWVzLgorICogYGBganMKKyAqICAgLy8gR2l2ZW4K
KyAqICAgZnVuY3Rpb24gTXlDb250cm9sbGVyKCRzY29wZSwgJHJvdXRlKSB7CisgKiAgICAgLy8g
Li4uCisgKiAgIH0KKyAqCisgKiAgIC8vIFRoZW4KKyAqICAgZXhwZWN0KGluamVjdG9yLmFubm90
YXRlKE15Q29udHJvbGxlcikpLnRvRXF1YWwoWyckc2NvcGUnLCAnJHJvdXRlJ10pOworICogYGBg
CisgKgorICogWW91IGNhbiBkaXNhbGxvdyB0aGlzIG1ldGhvZCBieSB1c2luZyBzdHJpY3QgaW5q
ZWN0aW9uIG1vZGUuCisgKgorICogVGhpcyBtZXRob2QgZG9lcyBub3Qgd29yayB3aXRoIGNvZGUg
bWluaWZpY2F0aW9uIC8gb2JmdXNjYXRpb24uIEZvciB0aGlzIHJlYXNvbiB0aGUgZm9sbG93aW5n
CisgKiBhbm5vdGF0aW9uIHN0cmF0ZWdpZXMgYXJlIHN1cHBvcnRlZC4KKyAqCisgKiAjIFRoZSBg
JGluamVjdGAgcHJvcGVydHkKKyAqCisgKiBJZiBhIGZ1bmN0aW9uIGhhcyBhbiBgJGluamVjdGAg
cHJvcGVydHkgYW5kIGl0cyB2YWx1ZSBpcyBhbiBhcnJheSBvZiBzdHJpbmdzLCB0aGVuIHRoZSBz
dHJpbmdzCisgKiByZXByZXNlbnQgbmFtZXMgb2Ygc2VydmljZXMgdG8gYmUgaW5qZWN0ZWQgaW50
byB0aGUgZnVuY3Rpb24uCisgKiBgYGBqcworICogICAvLyBHaXZlbgorICogICB2YXIgTXlDb250
cm9sbGVyID0gZnVuY3Rpb24ob2JmdXNjYXRlZFNjb3BlLCBvYmZ1c2NhdGVkUm91dGUpIHsKKyAq
ICAgICAvLyAuLi4KKyAqICAgfQorICogICAvLyBEZWZpbmUgZnVuY3Rpb24gZGVwZW5kZW5jaWVz
CisgKiAgIE15Q29udHJvbGxlclsnJGluamVjdCddID0gWyckc2NvcGUnLCAnJHJvdXRlJ107Cisg
KgorICogICAvLyBUaGVuCisgKiAgIGV4cGVjdChpbmplY3Rvci5hbm5vdGF0ZShNeUNvbnRyb2xs
ZXIpKS50b0VxdWFsKFsnJHNjb3BlJywgJyRyb3V0ZSddKTsKKyAqIGBgYAorICoKKyAqICMgVGhl
IGFycmF5IG5vdGF0aW9uCisgKgorICogSXQgaXMgb2Z0ZW4gZGVzaXJhYmxlIHRvIGlubGluZSBJ
bmplY3RlZCBmdW5jdGlvbnMgYW5kIHRoYXQncyB3aGVuIHNldHRpbmcgdGhlIGAkaW5qZWN0YCBw
cm9wZXJ0eQorICogaXMgdmVyeSBpbmNvbnZlbmllbnQuIEluIHRoZXNlIHNpdHVhdGlvbnMgdXNp
bmcgdGhlIGFycmF5IG5vdGF0aW9uIHRvIHNwZWNpZnkgdGhlIGRlcGVuZGVuY2llcyBpbgorICog
YSB3YXkgdGhhdCBzdXJ2aXZlcyBtaW5pZmljYXRpb24gaXMgYSBiZXR0ZXIgY2hvaWNlOgorICoK
KyAqIGBgYGpzCisgKiAgIC8vIFdlIHdpc2ggdG8gd3JpdGUgdGhpcyAobm90IG1pbmlmaWNhdGlv
biAvIG9iZnVzY2F0aW9uIHNhZmUpCisgKiAgIGluamVjdG9yLmludm9rZShmdW5jdGlvbigkY29t
cGlsZSwgJHJvb3RTY29wZSkgeworICogICAgIC8vIC4uLgorICogICB9KTsKKyAqCisgKiAgIC8v
IFdlIGFyZSBmb3JjZWQgdG8gd3JpdGUgYnJlYWsgaW5saW5pbmcKKyAqICAgdmFyIHRtcEZuID0g
ZnVuY3Rpb24ob2JmdXNjYXRlZENvbXBpbGUsIG9iZnVzY2F0ZWRSb290U2NvcGUpIHsKKyAqICAg
ICAvLyAuLi4KKyAqICAgfTsKKyAqICAgdG1wRm4uJGluamVjdCA9IFsnJGNvbXBpbGUnLCAnJHJv
b3RTY29wZSddOworICogICBpbmplY3Rvci5pbnZva2UodG1wRm4pOworICoKKyAqICAgLy8gVG8g
YmV0dGVyIHN1cHBvcnQgaW5saW5lIGZ1bmN0aW9uIHRoZSBpbmxpbmUgYW5ub3RhdGlvbiBpcyBz
dXBwb3J0ZWQKKyAqICAgaW5qZWN0b3IuaW52b2tlKFsnJGNvbXBpbGUnLCAnJHJvb3RTY29wZScs
IGZ1bmN0aW9uKG9iZkNvbXBpbGUsIG9iZlJvb3RTY29wZSkgeworICogICAgIC8vIC4uLgorICog
ICB9XSk7CisgKgorICogICAvLyBUaGVyZWZvcmUKKyAqICAgZXhwZWN0KGluamVjdG9yLmFubm90
YXRlKAorICogICAgICBbJyRjb21waWxlJywgJyRyb290U2NvcGUnLCBmdW5jdGlvbihvYmZ1c18k
Y29tcGlsZSwgb2JmdXNfJHJvb3RTY29wZSkge31dKQorICogICAgKS50b0VxdWFsKFsnJGNvbXBp
bGUnLCAnJHJvb3RTY29wZSddKTsKKyAqIGBgYAorICoKKyAqIEBwYXJhbSB7RnVuY3Rpb258QXJy
YXkuPHN0cmluZ3xGdW5jdGlvbj59IGZuIEZ1bmN0aW9uIGZvciB3aGljaCBkZXBlbmRlbnQgc2Vy
dmljZSBuYW1lcyBuZWVkIHRvCisgKiBiZSByZXRyaWV2ZWQgYXMgZGVzY3JpYmVkIGFib3ZlLgor
ICoKKyAqIEBwYXJhbSB7Ym9vbGVhbj19IFtzdHJpY3REaT1mYWxzZV0gRGlzYWxsb3cgYXJndW1l
bnQgbmFtZSBhbm5vdGF0aW9uIGluZmVyZW5jZS4KKyAqCisgKiBAcmV0dXJucyB7QXJyYXkuPHN0
cmluZz59IFRoZSBuYW1lcyBvZiB0aGUgc2VydmljZXMgd2hpY2ggdGhlIGZ1bmN0aW9uIHJlcXVp
cmVzLgorICovCisKKworCisKKy8qKgorICogQG5nZG9jIHNlcnZpY2UKKyAqIEBuYW1lICRwcm92
aWRlCisgKgorICogQGRlc2NyaXB0aW9uCisgKgorICogVGhlIHtAbGluayBhdXRvLiRwcm92aWRl
ICRwcm92aWRlfSBzZXJ2aWNlIGhhcyBhIG51bWJlciBvZiBtZXRob2RzIGZvciByZWdpc3Rlcmlu
ZyBjb21wb25lbnRzCisgKiB3aXRoIHRoZSB7QGxpbmsgYXV0by4kaW5qZWN0b3IgJGluamVjdG9y
fS4gTWFueSBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGFsc28gZXhwb3NlZCBvbgorICoge0BsaW5r
IGFuZ3VsYXIuTW9kdWxlfS4KKyAqCisgKiBBbiBBbmd1bGFyICoqc2VydmljZSoqIGlzIGEgc2lu
Z2xldG9uIG9iamVjdCBjcmVhdGVkIGJ5IGEgKipzZXJ2aWNlIGZhY3RvcnkqKi4gIFRoZXNlICoq
c2VydmljZQorICogZmFjdG9yaWVzKiogYXJlIGZ1bmN0aW9ucyB3aGljaCwgaW4gdHVybiwgYXJl
IGNyZWF0ZWQgYnkgYSAqKnNlcnZpY2UgcHJvdmlkZXIqKi4KKyAqIFRoZSAqKnNlcnZpY2UgcHJv
dmlkZXJzKiogYXJlIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucy4gV2hlbiBpbnN0YW50aWF0ZWQgdGhl
eSBtdXN0IGNvbnRhaW4gYQorICogcHJvcGVydHkgY2FsbGVkIGAkZ2V0YCwgd2hpY2ggaG9sZHMg
dGhlICoqc2VydmljZSBmYWN0b3J5KiogZnVuY3Rpb24uCisgKgorICogV2hlbiB5b3UgcmVxdWVz
dCBhIHNlcnZpY2UsIHRoZSB7QGxpbmsgYXV0by4kaW5qZWN0b3IgJGluamVjdG9yfSBpcyByZXNw
b25zaWJsZSBmb3IgZmluZGluZyB0aGUKKyAqIGNvcnJlY3QgKipzZXJ2aWNlIHByb3ZpZGVyKios
IGluc3RhbnRpYXRpbmcgaXQgYW5kIHRoZW4gY2FsbGluZyBpdHMgYCRnZXRgICoqc2VydmljZSBm
YWN0b3J5KioKKyAqIGZ1bmN0aW9uIHRvIGdldCB0aGUgaW5zdGFuY2Ugb2YgdGhlICoqc2Vydmlj
ZSoqLgorICoKKyAqIE9mdGVuIHNlcnZpY2VzIGhhdmUgbm8gY29uZmlndXJhdGlvbiBvcHRpb25z
IGFuZCB0aGVyZSBpcyBubyBuZWVkIHRvIGFkZCBtZXRob2RzIHRvIHRoZSBzZXJ2aWNlCisgKiBw
cm92aWRlci4gIFRoZSBwcm92aWRlciB3aWxsIGJlIG5vIG1vcmUgdGhhbiBhIGNvbnN0cnVjdG9y
IGZ1bmN0aW9uIHdpdGggYSBgJGdldGAgcHJvcGVydHkuIEZvcgorICogdGhlc2UgY2FzZXMgdGhl
IHtAbGluayBhdXRvLiRwcm92aWRlICRwcm92aWRlfSBzZXJ2aWNlIGhhcyBhZGRpdGlvbmFsIGhl
bHBlciBtZXRob2RzIHRvIHJlZ2lzdGVyCisgKiBzZXJ2aWNlcyB3aXRob3V0IHNwZWNpZnlpbmcg
YSBwcm92aWRlci4KKyAqCisgKiAqIHtAbGluayBhdXRvLiRwcm92aWRlI3Byb3ZpZGVyIHByb3Zp
ZGVyKHByb3ZpZGVyKX0gLSByZWdpc3RlcnMgYSAqKnNlcnZpY2UgcHJvdmlkZXIqKiB3aXRoIHRo
ZQorICogICAgIHtAbGluayBhdXRvLiRpbmplY3RvciAkaW5qZWN0b3J9CisgKiAqIHtAbGluayBh
dXRvLiRwcm92aWRlI2NvbnN0YW50IGNvbnN0YW50KG9iail9IC0gcmVnaXN0ZXJzIGEgdmFsdWUv
b2JqZWN0IHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGJ5CisgKiAgICAgcHJvdmlkZXJzIGFuZCBzZXJ2
aWNlcy4KKyAqICoge0BsaW5rIGF1dG8uJHByb3ZpZGUjdmFsdWUgdmFsdWUob2JqKX0gLSByZWdp
c3RlcnMgYSB2YWx1ZS9vYmplY3QgdGhhdCBjYW4gb25seSBiZSBhY2Nlc3NlZCBieQorICogICAg
IHNlcnZpY2VzLCBub3QgcHJvdmlkZXJzLgorICogKiB7QGxpbmsgYXV0by4kcHJvdmlkZSNmYWN0
b3J5IGZhY3RvcnkoZm4pfSAtIHJlZ2lzdGVycyBhIHNlcnZpY2UgKipmYWN0b3J5IGZ1bmN0aW9u
KiosIGBmbmAsCisgKiAgICAgdGhhdCB3aWxsIGJlIHdyYXBwZWQgaW4gYSAqKnNlcnZpY2UgcHJv
dmlkZXIqKiBvYmplY3QsIHdob3NlIGAkZ2V0YCBwcm9wZXJ0eSB3aWxsIGNvbnRhaW4gdGhlCisg
KiAgICAgZ2l2ZW4gZmFjdG9yeSBmdW5jdGlvbi4KKyAqICoge0BsaW5rIGF1dG8uJHByb3ZpZGUj
c2VydmljZSBzZXJ2aWNlKGNsYXNzKX0gLSByZWdpc3RlcnMgYSAqKmNvbnN0cnVjdG9yIGZ1bmN0
aW9uKiosIGBjbGFzc2AKKyAqICAgICB0aGF0IHdpbGwgYmUgd3JhcHBlZCBpbiBhICoqc2Vydmlj
ZSBwcm92aWRlcioqIG9iamVjdCwgd2hvc2UgYCRnZXRgIHByb3BlcnR5IHdpbGwgaW5zdGFudGlh
dGUKKyAqICAgICAgYSBuZXcgb2JqZWN0IHVzaW5nIHRoZSBnaXZlbiBjb25zdHJ1Y3RvciBmdW5j
dGlvbi4KKyAqCisgKiBTZWUgdGhlIGluZGl2aWR1YWwgbWV0aG9kcyBmb3IgbW9yZSBpbmZvcm1h
dGlvbiBhbmQgZXhhbXBsZXMuCisgKi8KKworLyoqCisgKiBAbmdkb2MgbWV0aG9kCisgKiBAbmFt
ZSAkcHJvdmlkZSNwcm92aWRlcgorICogQGRlc2NyaXB0aW9uCisgKgorICogUmVnaXN0ZXIgYSAq
KnByb3ZpZGVyIGZ1bmN0aW9uKiogd2l0aCB0aGUge0BsaW5rIGF1dG8uJGluamVjdG9yICRpbmpl
Y3Rvcn0uIFByb3ZpZGVyIGZ1bmN0aW9ucworICogYXJlIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucywg
d2hvc2UgaW5zdGFuY2VzIGFyZSByZXNwb25zaWJsZSBmb3IgInByb3ZpZGluZyIgYSBmYWN0b3J5
IGZvciBhCisgKiBzZXJ2aWNlLgorICoKKyAqIFNlcnZpY2UgcHJvdmlkZXIgbmFtZXMgc3RhcnQg
d2l0aCB0aGUgbmFtZSBvZiB0aGUgc2VydmljZSB0aGV5IHByb3ZpZGUgZm9sbG93ZWQgYnkgYFBy
b3ZpZGVyYC4KKyAqIEZvciBleGFtcGxlLCB0aGUge0BsaW5rIG5nLiRsb2cgJGxvZ30gc2Vydmlj
ZSBoYXMgYSBwcm92aWRlciBjYWxsZWQKKyAqIHtAbGluayBuZy4kbG9nUHJvdmlkZXIgJGxvZ1By
b3ZpZGVyfS4KKyAqCisgKiBTZXJ2aWNlIHByb3ZpZGVyIG9iamVjdHMgY2FuIGhhdmUgYWRkaXRp
b25hbCBtZXRob2RzIHdoaWNoIGFsbG93IGNvbmZpZ3VyYXRpb24gb2YgdGhlIHByb3ZpZGVyCisg
KiBhbmQgaXRzIHNlcnZpY2UuIEltcG9ydGFudGx5LCB5b3UgY2FuIGNvbmZpZ3VyZSB3aGF0IGtp
bmQgb2Ygc2VydmljZSBpcyBjcmVhdGVkIGJ5IHRoZSBgJGdldGAKKyAqIG1ldGhvZCwgb3IgaG93
IHRoYXQgc2VydmljZSB3aWxsIGFjdC4gRm9yIGV4YW1wbGUsIHRoZSB7QGxpbmsgbmcuJGxvZ1By
b3ZpZGVyICRsb2dQcm92aWRlcn0gaGFzIGEKKyAqIG1ldGhvZCB7QGxpbmsgbmcuJGxvZ1Byb3Zp
ZGVyI2RlYnVnRW5hYmxlZCBkZWJ1Z0VuYWJsZWR9CisgKiB3aGljaCBsZXRzIHlvdSBzcGVjaWZ5
IHdoZXRoZXIgdGhlIHtAbGluayBuZy4kbG9nICRsb2d9IHNlcnZpY2Ugd2lsbCBsb2cgZGVidWcg
bWVzc2FnZXMgdG8gdGhlCisgKiBjb25zb2xlIG9yIG5vdC4KKyAqCisgKiBAcGFyYW0ge3N0cmlu
Z30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgaW5zdGFuY2UuIE5PVEU6IHRoZSBwcm92aWRlciB3aWxs
IGJlIGF2YWlsYWJsZSB1bmRlciBgbmFtZSArCisgICAgICAgICAgICAgICAgICAgICAgICAnUHJv
dmlkZXInYCBrZXkuCisgKiBAcGFyYW0geyhPYmplY3R8ZnVuY3Rpb24oKSl9IHByb3ZpZGVyIElm
IHRoZSBwcm92aWRlciBpczoKKyAqCisgKiAgIC0gYE9iamVjdGA6IHRoZW4gaXQgc2hvdWxkIGhh
dmUgYSBgJGdldGAgbWV0aG9kLiBUaGUgYCRnZXRgIG1ldGhvZCB3aWxsIGJlIGludm9rZWQgdXNp
bmcKKyAqICAgICB7QGxpbmsgYXV0by4kaW5qZWN0b3IjaW52b2tlICRpbmplY3Rvci5pbnZva2Uo
KX0gd2hlbiBhbiBpbnN0YW5jZSBuZWVkcyB0byBiZSBjcmVhdGVkLgorICogICAtIGBDb25zdHJ1
Y3RvcmA6IGEgbmV3IGluc3RhbmNlIG9mIHRoZSBwcm92aWRlciB3aWxsIGJlIGNyZWF0ZWQgdXNp
bmcKKyAqICAgICB7QGxpbmsgYXV0by4kaW5qZWN0b3IjaW5zdGFudGlhdGUgJGluamVjdG9yLmlu
c3RhbnRpYXRlKCl9LCB0aGVuIHRyZWF0ZWQgYXMgYG9iamVjdGAuCisgKgorICogQHJldHVybnMg
e09iamVjdH0gcmVnaXN0ZXJlZCBwcm92aWRlciBpbnN0YW5jZQorCisgKiBAZXhhbXBsZQorICoK
KyAqIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gY3JlYXRlIGEgc2ltcGxlIGV2
ZW50IHRyYWNraW5nIHNlcnZpY2UgYW5kIHJlZ2lzdGVyIGl0IHVzaW5nCisgKiB7QGxpbmsgYXV0
by4kcHJvdmlkZSNwcm92aWRlciAkcHJvdmlkZS5wcm92aWRlcigpfS4KKyAqCisgKiBgYGBqcwor
ICogIC8vIERlZmluZSB0aGUgZXZlbnRUcmFja2VyIHByb3ZpZGVyCisgKiAgZnVuY3Rpb24gRXZl
bnRUcmFja2VyUHJvdmlkZXIoKSB7CisgKiAgICB2YXIgdHJhY2tpbmdVcmwgPSAnL3RyYWNrJzsK
KyAqCisgKiAgICAvLyBBIHByb3ZpZGVyIG1ldGhvZCBmb3IgY29uZmlndXJpbmcgd2hlcmUgdGhl
IHRyYWNrZWQgZXZlbnRzIHNob3VsZCBiZWVuIHNhdmVkCisgKiAgICB0aGlzLnNldFRyYWNraW5n
VXJsID0gZnVuY3Rpb24odXJsKSB7CisgKiAgICAgIHRyYWNraW5nVXJsID0gdXJsOworICogICAg
fTsKKyAqCisgKiAgICAvLyBUaGUgc2VydmljZSBmYWN0b3J5IGZ1bmN0aW9uCisgKiAgICB0aGlz
LiRnZXQgPSBbJyRodHRwJywgZnVuY3Rpb24oJGh0dHApIHsKKyAqICAgICAgdmFyIHRyYWNrZWRF
dmVudHMgPSB7fTsKKyAqICAgICAgcmV0dXJuIHsKKyAqICAgICAgICAvLyBDYWxsIHRoaXMgdG8g
dHJhY2sgYW4gZXZlbnQKKyAqICAgICAgICBldmVudDogZnVuY3Rpb24oZXZlbnQpIHsKKyAqICAg
ICAgICAgIHZhciBjb3VudCA9IHRyYWNrZWRFdmVudHNbZXZlbnRdIHx8IDA7CisgKiAgICAgICAg
ICBjb3VudCArPSAxOworICogICAgICAgICAgdHJhY2tlZEV2ZW50c1tldmVudF0gPSBjb3VudDsK
KyAqICAgICAgICAgIHJldHVybiBjb3VudDsKKyAqICAgICAgICB9LAorICogICAgICAgIC8vIENh
bGwgdGhpcyB0byBzYXZlIHRoZSB0cmFja2VkIGV2ZW50cyB0byB0aGUgdHJhY2tpbmdVcmwKKyAq
ICAgICAgICBzYXZlOiBmdW5jdGlvbigpIHsKKyAqICAgICAgICAgICRodHRwLnBvc3QodHJhY2tp
bmdVcmwsIHRyYWNrZWRFdmVudHMpOworICogICAgICAgIH0KKyAqICAgICAgfTsKKyAqICAgIH1d
OworICogIH0KKyAqCisgKiAgZGVzY3JpYmUoJ2V2ZW50VHJhY2tlcicsIGZ1bmN0aW9uKCkgewor
ICogICAgdmFyIHBvc3RTcHk7CisgKgorICogICAgYmVmb3JlRWFjaChtb2R1bGUoZnVuY3Rpb24o
JHByb3ZpZGUpIHsKKyAqICAgICAgLy8gUmVnaXN0ZXIgdGhlIGV2ZW50VHJhY2tlciBwcm92aWRl
cgorICogICAgICAkcHJvdmlkZS5wcm92aWRlcignZXZlbnRUcmFja2VyJywgRXZlbnRUcmFja2Vy
UHJvdmlkZXIpOworICogICAgfSkpOworICoKKyAqICAgIGJlZm9yZUVhY2gobW9kdWxlKGZ1bmN0
aW9uKGV2ZW50VHJhY2tlclByb3ZpZGVyKSB7CisgKiAgICAgIC8vIENvbmZpZ3VyZSBldmVudFRy
YWNrZXIgcHJvdmlkZXIKKyAqICAgICAgZXZlbnRUcmFja2VyUHJvdmlkZXIuc2V0VHJhY2tpbmdV
cmwoJy9jdXN0b20tdHJhY2snKTsKKyAqICAgIH0pKTsKKyAqCisgKiAgICBpdCgndHJhY2tzIGV2
ZW50cycsIGluamVjdChmdW5jdGlvbihldmVudFRyYWNrZXIpIHsKKyAqICAgICAgZXhwZWN0KGV2
ZW50VHJhY2tlci5ldmVudCgnbG9naW4nKSkudG9FcXVhbCgxKTsKKyAqICAgICAgZXhwZWN0KGV2
ZW50VHJhY2tlci5ldmVudCgnbG9naW4nKSkudG9FcXVhbCgyKTsKKyAqICAgIH0pKTsKKyAqCisg
KiAgICBpdCgnc2F2ZXMgdG8gdGhlIHRyYWNraW5nIHVybCcsIGluamVjdChmdW5jdGlvbihldmVu
dFRyYWNrZXIsICRodHRwKSB7CisgKiAgICAgIHBvc3RTcHkgPSBzcHlPbigkaHR0cCwgJ3Bvc3Qn
KTsKKyAqICAgICAgZXZlbnRUcmFja2VyLmV2ZW50KCdsb2dpbicpOworICogICAgICBldmVudFRy
YWNrZXIuc2F2ZSgpOworICogICAgICBleHBlY3QocG9zdFNweSkudG9IYXZlQmVlbkNhbGxlZCgp
OworICogICAgICBleHBlY3QocG9zdFNweS5tb3N0UmVjZW50Q2FsbC5hcmdzWzBdKS5ub3QudG9F
cXVhbCgnL3RyYWNrJyk7CisgKiAgICAgIGV4cGVjdChwb3N0U3B5Lm1vc3RSZWNlbnRDYWxsLmFy
Z3NbMF0pLnRvRXF1YWwoJy9jdXN0b20tdHJhY2snKTsKKyAqICAgICAgZXhwZWN0KHBvc3RTcHku
bW9zdFJlY2VudENhbGwuYXJnc1sxXSkudG9FcXVhbCh7ICdsb2dpbic6IDEgfSk7CisgKiAgICB9
KSk7CisgKiAgfSk7CisgKiBgYGAKKyAqLworCisvKioKKyAqIEBuZ2RvYyBtZXRob2QKKyAqIEBu
YW1lICRwcm92aWRlI2ZhY3RvcnkKKyAqIEBkZXNjcmlwdGlvbgorICoKKyAqIFJlZ2lzdGVyIGEg
KipzZXJ2aWNlIGZhY3RvcnkqKiwgd2hpY2ggd2lsbCBiZSBjYWxsZWQgdG8gcmV0dXJuIHRoZSBz
ZXJ2aWNlIGluc3RhbmNlLgorICogVGhpcyBpcyBzaG9ydCBmb3IgcmVnaXN0ZXJpbmcgYSBzZXJ2
aWNlIHdoZXJlIGl0cyBwcm92aWRlciBjb25zaXN0cyBvZiBvbmx5IGEgYCRnZXRgIHByb3BlcnR5
LAorICogd2hpY2ggaXMgdGhlIGdpdmVuIHNlcnZpY2UgZmFjdG9yeSBmdW5jdGlvbi4KKyAqIFlv
dSBzaG91bGQgdXNlIHtAbGluayBhdXRvLiRwcm92aWRlI2ZhY3RvcnkgJHByb3ZpZGUuZmFjdG9y
eShnZXRGbil9IGlmIHlvdSBkbyBub3QgbmVlZCB0bworICogY29uZmlndXJlIHlvdXIgc2Vydmlj
ZSBpbiBhIHByb3ZpZGVyLgorICoKKyAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9m
IHRoZSBpbnN0YW5jZS4KKyAqIEBwYXJhbSB7RnVuY3Rpb258QXJyYXkuPHN0cmluZ3xGdW5jdGlv
bj59ICRnZXRGbiBUaGUgaW5qZWN0YWJsZSAkZ2V0Rm4gZm9yIHRoZSBpbnN0YW5jZSBjcmVhdGlv
bi4KKyAqICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsbHkgdGhpcyBpcyBhIHNob3J0IGhh
bmQgZm9yIGAkcHJvdmlkZS5wcm92aWRlcihuYW1lLCB7JGdldDogJGdldEZufSlgLgorICogQHJl
dHVybnMge09iamVjdH0gcmVnaXN0ZXJlZCBwcm92aWRlciBpbnN0YW5jZQorICoKKyAqIEBleGFt
cGxlCisgKiBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgcmVnaXN0ZXJpbmcgYSBzZXJ2aWNlCisgKiBg
YGBqcworICogICAkcHJvdmlkZS5mYWN0b3J5KCdwaW5nJywgWyckaHR0cCcsIGZ1bmN0aW9uKCRo
dHRwKSB7CisgKiAgICAgcmV0dXJuIGZ1bmN0aW9uIHBpbmcoKSB7CisgKiAgICAgICByZXR1cm4g
JGh0dHAuc2VuZCgnL3BpbmcnKTsKKyAqICAgICB9OworICogICB9XSk7CisgKiBgYGAKKyAqIFlv
dSB3b3VsZCB0aGVuIGluamVjdCBhbmQgdXNlIHRoaXMgc2VydmljZSBsaWtlIHRoaXM6CisgKiBg
YGBqcworICogICBzb21lTW9kdWxlLmNvbnRyb2xsZXIoJ0N0cmwnLCBbJ3BpbmcnLCBmdW5jdGlv
bihwaW5nKSB7CisgKiAgICAgcGluZygpOworICogICB9XSk7CisgKiBgYGAKKyAqLworCisKKy8q
KgorICogQG5nZG9jIG1ldGhvZAorICogQG5hbWUgJHByb3ZpZGUjc2VydmljZQorICogQGRlc2Ny
aXB0aW9uCisgKgorICogUmVnaXN0ZXIgYSAqKnNlcnZpY2UgY29uc3RydWN0b3IqKiwgd2hpY2gg
d2lsbCBiZSBpbnZva2VkIHdpdGggYG5ld2AgdG8gY3JlYXRlIHRoZSBzZXJ2aWNlCisgKiBpbnN0
YW5jZS4KKyAqIFRoaXMgaXMgc2hvcnQgZm9yIHJlZ2lzdGVyaW5nIGEgc2VydmljZSB3aGVyZSBp
dHMgcHJvdmlkZXIncyBgJGdldGAgcHJvcGVydHkgaXMgdGhlIHNlcnZpY2UKKyAqIGNvbnN0cnVj
dG9yIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGluc3RhbnRpYXRlIHRoZSBzZXJ2aWNl
IGluc3RhbmNlLgorICoKKyAqIFlvdSBzaG91bGQgdXNlIHtAbGluayBhdXRvLiRwcm92aWRlI3Nl
cnZpY2UgJHByb3ZpZGUuc2VydmljZShjbGFzcyl9IGlmIHlvdSBkZWZpbmUgeW91ciBzZXJ2aWNl
CisgKiBhcyBhIHR5cGUvY2xhc3MuCisgKgorICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5h
bWUgb2YgdGhlIGluc3RhbmNlLgorICogQHBhcmFtIHtGdW5jdGlvbnxBcnJheS48c3RyaW5nfEZ1
bmN0aW9uPn0gY29uc3RydWN0b3IgQW4gaW5qZWN0YWJsZSBjbGFzcyAoY29uc3RydWN0b3IgZnVu
Y3Rpb24pCisgKiAgICAgdGhhdCB3aWxsIGJlIGluc3RhbnRpYXRlZC4KKyAqIEByZXR1cm5zIHtP
YmplY3R9IHJlZ2lzdGVyZWQgcHJvdmlkZXIgaW5zdGFuY2UKKyAqCisgKiBAZXhhbXBsZQorICog
SGVyZSBpcyBhbiBleGFtcGxlIG9mIHJlZ2lzdGVyaW5nIGEgc2VydmljZSB1c2luZworICoge0Bs
aW5rIGF1dG8uJHByb3ZpZGUjc2VydmljZSAkcHJvdmlkZS5zZXJ2aWNlKGNsYXNzKX0uCisgKiBg
YGBqcworICogICB2YXIgUGluZyA9IGZ1bmN0aW9uKCRodHRwKSB7CisgKiAgICAgdGhpcy4kaHR0
cCA9ICRodHRwOworICogICB9OworICoKKyAqICAgUGluZy4kaW5qZWN0ID0gWyckaHR0cCddOwor
ICoKKyAqICAgUGluZy5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uKCkgeworICogICAgIHJldHVy
biB0aGlzLiRodHRwLmdldCgnL3BpbmcnKTsKKyAqICAgfTsKKyAqICAgJHByb3ZpZGUuc2Vydmlj
ZSgncGluZycsIFBpbmcpOworICogYGBgCisgKiBZb3Ugd291bGQgdGhlbiBpbmplY3QgYW5kIHVz
ZSB0aGlzIHNlcnZpY2UgbGlrZSB0aGlzOgorICogYGBganMKKyAqICAgc29tZU1vZHVsZS5jb250
cm9sbGVyKCdDdHJsJywgWydwaW5nJywgZnVuY3Rpb24ocGluZykgeworICogICAgIHBpbmcuc2Vu
ZCgpOworICogICB9XSk7CisgKiBgYGAKKyAqLworCisKKy8qKgorICogQG5nZG9jIG1ldGhvZAor
ICogQG5hbWUgJHByb3ZpZGUjdmFsdWUKKyAqIEBkZXNjcmlwdGlvbgorICoKKyAqIFJlZ2lzdGVy
IGEgKip2YWx1ZSBzZXJ2aWNlKiogd2l0aCB0aGUge0BsaW5rIGF1dG8uJGluamVjdG9yICRpbmpl
Y3Rvcn0sIHN1Y2ggYXMgYSBzdHJpbmcsIGEKKyAqIG51bWJlciwgYW4gYXJyYXksIGFuIG9iamVj
dCBvciBhIGZ1bmN0aW9uLiAgVGhpcyBpcyBzaG9ydCBmb3IgcmVnaXN0ZXJpbmcgYSBzZXJ2aWNl
IHdoZXJlIGl0cworICogcHJvdmlkZXIncyBgJGdldGAgcHJvcGVydHkgaXMgYSBmYWN0b3J5IGZ1
bmN0aW9uIHRoYXQgdGFrZXMgbm8gYXJndW1lbnRzIGFuZCByZXR1cm5zIHRoZSAqKnZhbHVlCisg
KiBzZXJ2aWNlKiouCisgKgorICogVmFsdWUgc2VydmljZXMgYXJlIHNpbWlsYXIgdG8gY29uc3Rh
bnQgc2VydmljZXMsIGV4Y2VwdCB0aGF0IHRoZXkgY2Fubm90IGJlIGluamVjdGVkIGludG8gYQor
ICogbW9kdWxlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24gKHNlZSB7QGxpbmsgYW5ndWxhci5Nb2R1
bGUjY29uZmlnfSkgYnV0IHRoZXkgY2FuIGJlIG92ZXJyaWRkZW4gYnkKKyAqIGFuIEFuZ3VsYXIK
KyAqIHtAbGluayBhdXRvLiRwcm92aWRlI2RlY29yYXRvciBkZWNvcmF0b3J9LgorICoKKyAqIEBw
YXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBpbnN0YW5jZS4KKyAqIEBwYXJhbSB7
Kn0gdmFsdWUgVGhlIHZhbHVlLgorICogQHJldHVybnMge09iamVjdH0gcmVnaXN0ZXJlZCBwcm92
aWRlciBpbnN0YW5jZQorICoKKyAqIEBleGFtcGxlCisgKiBIZXJlIGFyZSBzb21lIGV4YW1wbGVz
IG9mIGNyZWF0aW5nIHZhbHVlIHNlcnZpY2VzLgorICogYGBganMKKyAqICAgJHByb3ZpZGUudmFs
dWUoJ0FETUlOX1VTRVInLCAnYWRtaW4nKTsKKyAqCisgKiAgICRwcm92aWRlLnZhbHVlKCdSb2xl
TG9va3VwJywgeyBhZG1pbjogMCwgd3JpdGVyOiAxLCByZWFkZXI6IDIgfSk7CisgKgorICogICAk
cHJvdmlkZS52YWx1ZSgnaGFsZk9mJywgZnVuY3Rpb24odmFsdWUpIHsKKyAqICAgICByZXR1cm4g
dmFsdWUgLyAyOworICogICB9KTsKKyAqIGBgYAorICovCisKKworLyoqCisgKiBAbmdkb2MgbWV0
aG9kCisgKiBAbmFtZSAkcHJvdmlkZSNjb25zdGFudAorICogQGRlc2NyaXB0aW9uCisgKgorICog
UmVnaXN0ZXIgYSAqKmNvbnN0YW50IHNlcnZpY2UqKiwgc3VjaCBhcyBhIHN0cmluZywgYSBudW1i
ZXIsIGFuIGFycmF5LCBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbiwKKyAqIHdpdGggdGhlIHtAbGlu
ayBhdXRvLiRpbmplY3RvciAkaW5qZWN0b3J9LiBVbmxpa2Uge0BsaW5rIGF1dG8uJHByb3ZpZGUj
dmFsdWUgdmFsdWV9IGl0IGNhbiBiZQorICogaW5qZWN0ZWQgaW50byBhIG1vZHVsZSBjb25maWd1
cmF0aW9uIGZ1bmN0aW9uIChzZWUge0BsaW5rIGFuZ3VsYXIuTW9kdWxlI2NvbmZpZ30pIGFuZCBp
dCBjYW5ub3QKKyAqIGJlIG92ZXJyaWRkZW4gYnkgYW4gQW5ndWxhciB7QGxpbmsgYXV0by4kcHJv
dmlkZSNkZWNvcmF0b3IgZGVjb3JhdG9yfS4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBU
aGUgbmFtZSBvZiB0aGUgY29uc3RhbnQuCisgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSBjb25zdGFu
dCB2YWx1ZS4KKyAqIEByZXR1cm5zIHtPYmplY3R9IHJlZ2lzdGVyZWQgaW5zdGFuY2UKKyAqCisg
KiBAZXhhbXBsZQorICogSGVyZSBhIHNvbWUgZXhhbXBsZXMgb2YgY3JlYXRpbmcgY29uc3RhbnRz
OgorICogYGBganMKKyAqICAgJHByb3ZpZGUuY29uc3RhbnQoJ1NIQVJEX0hFSUdIVCcsIDMwNik7
CisgKgorICogICAkcHJvdmlkZS5jb25zdGFudCgnTVlfQ09MT1VSUycsIFsncmVkJywgJ2JsdWUn
LCAnZ3JleSddKTsKKyAqCisgKiAgICRwcm92aWRlLmNvbnN0YW50KCdkb3VibGUnLCBmdW5jdGlv
bih2YWx1ZSkgeworICogICAgIHJldHVybiB2YWx1ZSAqIDI7CisgKiAgIH0pOworICogYGBgCisg
Ki8KKworCisvKioKKyAqIEBuZ2RvYyBtZXRob2QKKyAqIEBuYW1lICRwcm92aWRlI2RlY29yYXRv
cgorICogQGRlc2NyaXB0aW9uCisgKgorICogUmVnaXN0ZXIgYSAqKnNlcnZpY2UgZGVjb3JhdG9y
Kiogd2l0aCB0aGUge0BsaW5rIGF1dG8uJGluamVjdG9yICRpbmplY3Rvcn0uIEEgc2VydmljZSBk
ZWNvcmF0b3IKKyAqIGludGVyY2VwdHMgdGhlIGNyZWF0aW9uIG9mIGEgc2VydmljZSwgYWxsb3dp
bmcgaXQgdG8gb3ZlcnJpZGUgb3IgbW9kaWZ5IHRoZSBiZWhhdmlvdXIgb2YgdGhlCisgKiBzZXJ2
aWNlLiBUaGUgb2JqZWN0IHJldHVybmVkIGJ5IHRoZSBkZWNvcmF0b3IgbWF5IGJlIHRoZSBvcmln
aW5hbCBzZXJ2aWNlLCBvciBhIG5ldyBzZXJ2aWNlCisgKiBvYmplY3Qgd2hpY2ggcmVwbGFjZXMg
b3Igd3JhcHMgYW5kIGRlbGVnYXRlcyB0byB0aGUgb3JpZ2luYWwgc2VydmljZS4KKyAqCisgKiBA
cGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgc2VydmljZSB0byBkZWNvcmF0ZS4K
KyAqIEBwYXJhbSB7RnVuY3Rpb258QXJyYXkuPHN0cmluZ3xGdW5jdGlvbj59IGRlY29yYXRvciBU
aGlzIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCB3aGVuIHRoZSBzZXJ2aWNlIG5lZWRzIHRvIGJl
CisgKiAgICBpbnN0YW50aWF0ZWQgYW5kIHNob3VsZCByZXR1cm4gdGhlIGRlY29yYXRlZCBzZXJ2
aWNlIGluc3RhbmNlLiBUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIHVzaW5nCisgKiAgICB0aGUge0Bs
aW5rIGF1dG8uJGluamVjdG9yI2ludm9rZSBpbmplY3Rvci5pbnZva2V9IG1ldGhvZCBhbmQgaXMg
dGhlcmVmb3JlIGZ1bGx5IGluamVjdGFibGUuCisgKiAgICBMb2NhbCBpbmplY3Rpb24gYXJndW1l
bnRzOgorICoKKyAqICAgICogYCRkZWxlZ2F0ZWAgLSBUaGUgb3JpZ2luYWwgc2VydmljZSBpbnN0
YW5jZSwgd2hpY2ggY2FuIGJlIG1vbmtleSBwYXRjaGVkLCBjb25maWd1cmVkLAorICogICAgICBk
ZWNvcmF0ZWQgb3IgZGVsZWdhdGVkIHRvLgorICoKKyAqIEBleGFtcGxlCisgKiBIZXJlIHdlIGRl
Y29yYXRlIHRoZSB7QGxpbmsgbmcuJGxvZyAkbG9nfSBzZXJ2aWNlIHRvIGNvbnZlcnQgd2Fybmlu
Z3MgdG8gZXJyb3JzIGJ5IGludGVyY2VwdGluZworICogY2FsbHMgdG8ge0BsaW5rIG5nLiRsb2cj
ZXJyb3IgJGxvZy53YXJuKCl9LgorICogYGBganMKKyAqICAgJHByb3ZpZGUuZGVjb3JhdG9yKCck
bG9nJywgWyckZGVsZWdhdGUnLCBmdW5jdGlvbigkZGVsZWdhdGUpIHsKKyAqICAgICAkZGVsZWdh
dGUud2FybiA9ICRkZWxlZ2F0ZS5lcnJvcjsKKyAqICAgICByZXR1cm4gJGRlbGVnYXRlOworICog
ICB9XSk7CisgKiBgYGAKKyAqLworCisKK2Z1bmN0aW9uIGNyZWF0ZUluamVjdG9yKG1vZHVsZXNU
b0xvYWQsIHN0cmljdERpKSB7CisgIHN0cmljdERpID0gKHN0cmljdERpID09PSB0cnVlKTsKKyAg
dmFyIElOU1RBTlRJQVRJTkcgPSB7fSwKKyAgICAgIHByb3ZpZGVyU3VmZml4ID0gJ1Byb3ZpZGVy
JywKKyAgICAgIHBhdGggPSBbXSwKKyAgICAgIGxvYWRlZE1vZHVsZXMgPSBuZXcgSGFzaE1hcChb
XSwgdHJ1ZSksCisgICAgICBwcm92aWRlckNhY2hlID0geworICAgICAgICAkcHJvdmlkZTogewor
ICAgICAgICAgICAgcHJvdmlkZXI6IHN1cHBvcnRPYmplY3QocHJvdmlkZXIpLAorICAgICAgICAg
ICAgZmFjdG9yeTogc3VwcG9ydE9iamVjdChmYWN0b3J5KSwKKyAgICAgICAgICAgIHNlcnZpY2U6
IHN1cHBvcnRPYmplY3Qoc2VydmljZSksCisgICAgICAgICAgICB2YWx1ZTogc3VwcG9ydE9iamVj
dCh2YWx1ZSksCisgICAgICAgICAgICBjb25zdGFudDogc3VwcG9ydE9iamVjdChjb25zdGFudCks
CisgICAgICAgICAgICBkZWNvcmF0b3I6IGRlY29yYXRvcgorICAgICAgICAgIH0KKyAgICAgIH0s
CisgICAgICBwcm92aWRlckluamVjdG9yID0gKHByb3ZpZGVyQ2FjaGUuJGluamVjdG9yID0KKyAg
ICAgICAgICBjcmVhdGVJbnRlcm5hbEluamVjdG9yKHByb3ZpZGVyQ2FjaGUsIGZ1bmN0aW9uKHNl
cnZpY2VOYW1lLCBjYWxsZXIpIHsKKyAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzU3RyaW5nKGNh
bGxlcikpIHsKKyAgICAgICAgICAgICAgcGF0aC5wdXNoKGNhbGxlcik7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB0aHJvdyAkaW5qZWN0b3JNaW5FcnIoJ3VucHInLCAiVW5rbm93biBwcm92
aWRlcjogezB9IiwgcGF0aC5qb2luKCcgPC0gJykpOworICAgICAgICAgIH0pKSwKKyAgICAgIGlu
c3RhbmNlQ2FjaGUgPSB7fSwKKyAgICAgIGluc3RhbmNlSW5qZWN0b3IgPSAoaW5zdGFuY2VDYWNo
ZS4kaW5qZWN0b3IgPQorICAgICAgICAgIGNyZWF0ZUludGVybmFsSW5qZWN0b3IoaW5zdGFuY2VD
YWNoZSwgZnVuY3Rpb24oc2VydmljZU5hbWUsIGNhbGxlcikgeworICAgICAgICAgICAgdmFyIHBy
b3ZpZGVyID0gcHJvdmlkZXJJbmplY3Rvci5nZXQoc2VydmljZU5hbWUgKyBwcm92aWRlclN1ZmZp
eCwgY2FsbGVyKTsKKyAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZUluamVjdG9yLmludm9rZShw
cm92aWRlci4kZ2V0LCBwcm92aWRlciwgdW5kZWZpbmVkLCBzZXJ2aWNlTmFtZSk7CisgICAgICAg
ICAgfSkpOworCisKKyAgZm9yRWFjaChsb2FkTW9kdWxlcyhtb2R1bGVzVG9Mb2FkKSwgZnVuY3Rp
b24oZm4pIHsgaWYgKGZuKSBpbnN0YW5jZUluamVjdG9yLmludm9rZShmbik7IH0pOworCisgIHJl
dHVybiBpbnN0YW5jZUluamVjdG9yOworCisgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLworICAvLyAkcHJvdmlkZXIKKyAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisKKyAgZnVuY3Rpb24gc3VwcG9ydE9iamVjdChkZWxlZ2F0ZSkgeworICAgIHJldHVy
biBmdW5jdGlvbihrZXksIHZhbHVlKSB7CisgICAgICBpZiAoaXNPYmplY3Qoa2V5KSkgeworICAg
ICAgICBmb3JFYWNoKGtleSwgcmV2ZXJzZVBhcmFtcyhkZWxlZ2F0ZSkpOworICAgICAgfSBlbHNl
IHsKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlKGtleSwgdmFsdWUpOworICAgICAgfQorICAgIH07
CisgIH0KKworICBmdW5jdGlvbiBwcm92aWRlcihuYW1lLCBwcm92aWRlcl8pIHsKKyAgICBhc3Nl
cnROb3RIYXNPd25Qcm9wZXJ0eShuYW1lLCAnc2VydmljZScpOworICAgIGlmIChpc0Z1bmN0aW9u
KHByb3ZpZGVyXykgfHwgaXNBcnJheShwcm92aWRlcl8pKSB7CisgICAgICBwcm92aWRlcl8gPSBw
cm92aWRlckluamVjdG9yLmluc3RhbnRpYXRlKHByb3ZpZGVyXyk7CisgICAgfQorICAgIGlmICgh
cHJvdmlkZXJfLiRnZXQpIHsKKyAgICAgIHRocm93ICRpbmplY3Rvck1pbkVycigncGdldCcsICJQ
cm92aWRlciAnezB9JyBtdXN0IGRlZmluZSAkZ2V0IGZhY3RvcnkgbWV0aG9kLiIsIG5hbWUpOwor
ICAgIH0KKyAgICByZXR1cm4gcHJvdmlkZXJDYWNoZVtuYW1lICsgcHJvdmlkZXJTdWZmaXhdID0g
cHJvdmlkZXJfOworICB9CisKKyAgZnVuY3Rpb24gZW5mb3JjZVJldHVyblZhbHVlKG5hbWUsIGZh
Y3RvcnkpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24gZW5mb3JjZWRSZXR1cm5WYWx1ZSgpIHsKKyAg
ICAgIHZhciByZXN1bHQgPSBpbnN0YW5jZUluamVjdG9yLmludm9rZShmYWN0b3J5LCB0aGlzKTsK
KyAgICAgIGlmIChpc1VuZGVmaW5lZChyZXN1bHQpKSB7CisgICAgICAgIHRocm93ICRpbmplY3Rv
ck1pbkVycigndW5kZWYnLCAiUHJvdmlkZXIgJ3swfScgbXVzdCByZXR1cm4gYSB2YWx1ZSBmcm9t
ICRnZXQgZmFjdG9yeSBtZXRob2QuIiwgbmFtZSk7CisgICAgICB9CisgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH07CisgIH0KKworICBmdW5jdGlvbiBmYWN0b3J5KG5hbWUsIGZhY3RvcnlGbiwg
ZW5mb3JjZSkgeworICAgIHJldHVybiBwcm92aWRlcihuYW1lLCB7CisgICAgICAkZ2V0OiBlbmZv
cmNlICE9PSBmYWxzZSA/IGVuZm9yY2VSZXR1cm5WYWx1ZShuYW1lLCBmYWN0b3J5Rm4pIDogZmFj
dG9yeUZuCisgICAgfSk7CisgIH0KKworICBmdW5jdGlvbiBzZXJ2aWNlKG5hbWUsIGNvbnN0cnVj
dG9yKSB7CisgICAgcmV0dXJuIGZhY3RvcnkobmFtZSwgWyckaW5qZWN0b3InLCBmdW5jdGlvbigk
aW5qZWN0b3IpIHsKKyAgICAgIHJldHVybiAkaW5qZWN0b3IuaW5zdGFudGlhdGUoY29uc3RydWN0
b3IpOworICAgIH1dKTsKKyAgfQorCisgIGZ1bmN0aW9uIHZhbHVlKG5hbWUsIHZhbCkgeyByZXR1
cm4gZmFjdG9yeShuYW1lLCB2YWx1ZUZuKHZhbCksIGZhbHNlKTsgfQorCisgIGZ1bmN0aW9uIGNv
bnN0YW50KG5hbWUsIHZhbHVlKSB7CisgICAgYXNzZXJ0Tm90SGFzT3duUHJvcGVydHkobmFtZSwg
J2NvbnN0YW50Jyk7CisgICAgcHJvdmlkZXJDYWNoZVtuYW1lXSA9IHZhbHVlOworICAgIGluc3Rh
bmNlQ2FjaGVbbmFtZV0gPSB2YWx1ZTsKKyAgfQorCisgIGZ1bmN0aW9uIGRlY29yYXRvcihzZXJ2
aWNlTmFtZSwgZGVjb3JGbikgeworICAgIHZhciBvcmlnUHJvdmlkZXIgPSBwcm92aWRlckluamVj
dG9yLmdldChzZXJ2aWNlTmFtZSArIHByb3ZpZGVyU3VmZml4KSwKKyAgICAgICAgb3JpZyRnZXQg
PSBvcmlnUHJvdmlkZXIuJGdldDsKKworICAgIG9yaWdQcm92aWRlci4kZ2V0ID0gZnVuY3Rpb24o
KSB7CisgICAgICB2YXIgb3JpZ0luc3RhbmNlID0gaW5zdGFuY2VJbmplY3Rvci5pbnZva2Uob3Jp
ZyRnZXQsIG9yaWdQcm92aWRlcik7CisgICAgICByZXR1cm4gaW5zdGFuY2VJbmplY3Rvci5pbnZv
a2UoZGVjb3JGbiwgbnVsbCwgeyRkZWxlZ2F0ZTogb3JpZ0luc3RhbmNlfSk7CisgICAgfTsKKyAg
fQorCisgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAvLyBNb2R1bGUg
TG9hZGluZworICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgZnVuY3Rp
b24gbG9hZE1vZHVsZXMobW9kdWxlc1RvTG9hZCkgeworICAgIHZhciBydW5CbG9ja3MgPSBbXSwg
bW9kdWxlRm47CisgICAgZm9yRWFjaChtb2R1bGVzVG9Mb2FkLCBmdW5jdGlvbihtb2R1bGUpIHsK
KyAgICAgIGlmIChsb2FkZWRNb2R1bGVzLmdldChtb2R1bGUpKSByZXR1cm47CisgICAgICBsb2Fk
ZWRNb2R1bGVzLnB1dChtb2R1bGUsIHRydWUpOworCisgICAgICBmdW5jdGlvbiBydW5JbnZva2VR
dWV1ZShxdWV1ZSkgeworICAgICAgICB2YXIgaSwgaWk7CisgICAgICAgIGZvciAoaSA9IDAsIGlp
ID0gcXVldWUubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgIHZhciBpbnZva2VBcmdz
ID0gcXVldWVbaV0sCisgICAgICAgICAgICAgIHByb3ZpZGVyID0gcHJvdmlkZXJJbmplY3Rvci5n
ZXQoaW52b2tlQXJnc1swXSk7CisKKyAgICAgICAgICBwcm92aWRlcltpbnZva2VBcmdzWzFdXS5h
cHBseShwcm92aWRlciwgaW52b2tlQXJnc1syXSk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAg
ICAgdHJ5IHsKKyAgICAgICAgaWYgKGlzU3RyaW5nKG1vZHVsZSkpIHsKKyAgICAgICAgICBtb2R1
bGVGbiA9IGFuZ3VsYXJNb2R1bGUobW9kdWxlKTsKKyAgICAgICAgICBydW5CbG9ja3MgPSBydW5C
bG9ja3MuY29uY2F0KGxvYWRNb2R1bGVzKG1vZHVsZUZuLnJlcXVpcmVzKSkuY29uY2F0KG1vZHVs
ZUZuLl9ydW5CbG9ja3MpOworICAgICAgICAgIHJ1bkludm9rZVF1ZXVlKG1vZHVsZUZuLl9pbnZv
a2VRdWV1ZSk7CisgICAgICAgICAgcnVuSW52b2tlUXVldWUobW9kdWxlRm4uX2NvbmZpZ0Jsb2Nr
cyk7CisgICAgICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbihtb2R1bGUpKSB7CisgICAgICAgICAg
ICBydW5CbG9ja3MucHVzaChwcm92aWRlckluamVjdG9yLmludm9rZShtb2R1bGUpKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChpc0FycmF5KG1vZHVsZSkpIHsKKyAgICAgICAgICAgIHJ1bkJsb2Nrcy5w
dXNoKHByb3ZpZGVySW5qZWN0b3IuaW52b2tlKG1vZHVsZSkpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgIGFzc2VydEFyZ0ZuKG1vZHVsZSwgJ21vZHVsZScpOworICAgICAgICB9CisgICAg
ICB9IGNhdGNoIChlKSB7CisgICAgICAgIGlmIChpc0FycmF5KG1vZHVsZSkpIHsKKyAgICAgICAg
ICBtb2R1bGUgPSBtb2R1bGVbbW9kdWxlLmxlbmd0aCAtIDFdOworICAgICAgICB9CisgICAgICAg
IGlmIChlLm1lc3NhZ2UgJiYgZS5zdGFjayAmJiBlLnN0YWNrLmluZGV4T2YoZS5tZXNzYWdlKSA9
PSAtMSkgeworICAgICAgICAgIC8vIFNhZmFyaSAmIEZGJ3Mgc3RhY2sgdHJhY2VzIGRvbid0IGNv
bnRhaW4gZXJyb3IubWVzc2FnZSBjb250ZW50CisgICAgICAgICAgLy8gdW5saWtlIHRob3NlIG9m
IENocm9tZSBhbmQgSUUKKyAgICAgICAgICAvLyBTbyBpZiBzdGFjayBkb2Vzbid0IGNvbnRhaW4g
bWVzc2FnZSwgd2UgY3JlYXRlIGEgbmV3IHN0cmluZyB0aGF0IGNvbnRhaW5zIGJvdGguCisgICAg
ICAgICAgLy8gU2luY2UgZXJyb3Iuc3RhY2sgaXMgcmVhZC1vbmx5IGluIFNhZmFyaSwgSSdtIG92
ZXJyaWRpbmcgZSBhbmQgbm90IGUuc3RhY2sgaGVyZS4KKyAgICAgICAgICAvKiBqc2hpbnQgLVcw
MjIgKi8KKyAgICAgICAgICBlID0gZS5tZXNzYWdlICsgJ1xuJyArIGUuc3RhY2s7CisgICAgICAg
IH0KKyAgICAgICAgdGhyb3cgJGluamVjdG9yTWluRXJyKCdtb2R1bGVycicsICJGYWlsZWQgdG8g
aW5zdGFudGlhdGUgbW9kdWxlIHswfSBkdWUgdG86XG57MX0iLAorICAgICAgICAgICAgICAgICAg
bW9kdWxlLCBlLnN0YWNrIHx8IGUubWVzc2FnZSB8fCBlKTsKKyAgICAgIH0KKyAgICB9KTsKKyAg
ICByZXR1cm4gcnVuQmxvY2tzOworICB9CisKKyAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCisgIC8vIGludGVybmFsIEluamVjdG9yCisgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLworCisgIGZ1bmN0aW9uIGNyZWF0ZUludGVybmFsSW5qZWN0b3IoY2Fj
aGUsIGZhY3RvcnkpIHsKKworICAgIGZ1bmN0aW9uIGdldFNlcnZpY2Uoc2VydmljZU5hbWUsIGNh
bGxlcikgeworICAgICAgaWYgKGNhY2hlLmhhc093blByb3BlcnR5KHNlcnZpY2VOYW1lKSkgewor
ICAgICAgICBpZiAoY2FjaGVbc2VydmljZU5hbWVdID09PSBJTlNUQU5USUFUSU5HKSB7CisgICAg
ICAgICAgdGhyb3cgJGluamVjdG9yTWluRXJyKCdjZGVwJywgJ0NpcmN1bGFyIGRlcGVuZGVuY3kg
Zm91bmQ6IHswfScsCisgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VOYW1lICsgJyA8LSAnICsg
cGF0aC5qb2luKCcgPC0gJykpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjYWNoZVtzZXJ2
aWNlTmFtZV07CisgICAgICB9IGVsc2UgeworICAgICAgICB0cnkgeworICAgICAgICAgIHBhdGgu
dW5zaGlmdChzZXJ2aWNlTmFtZSk7CisgICAgICAgICAgY2FjaGVbc2VydmljZU5hbWVdID0gSU5T
VEFOVElBVElORzsKKyAgICAgICAgICByZXR1cm4gY2FjaGVbc2VydmljZU5hbWVdID0gZmFjdG9y
eShzZXJ2aWNlTmFtZSwgY2FsbGVyKTsKKyAgICAgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAg
ICAgaWYgKGNhY2hlW3NlcnZpY2VOYW1lXSA9PT0gSU5TVEFOVElBVElORykgeworICAgICAgICAg
ICAgZGVsZXRlIGNhY2hlW3NlcnZpY2VOYW1lXTsKKyAgICAgICAgICB9CisgICAgICAgICAgdGhy
b3cgZXJyOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgIHBhdGguc2hpZnQoKTsKKyAg
ICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGludm9rZShmbiwgc2VsZiwg
bG9jYWxzLCBzZXJ2aWNlTmFtZSkgeworICAgICAgaWYgKHR5cGVvZiBsb2NhbHMgPT09ICdzdHJp
bmcnKSB7CisgICAgICAgIHNlcnZpY2VOYW1lID0gbG9jYWxzOworICAgICAgICBsb2NhbHMgPSBu
dWxsOworICAgICAgfQorCisgICAgICB2YXIgYXJncyA9IFtdLAorICAgICAgICAgICRpbmplY3Qg
PSBjcmVhdGVJbmplY3Rvci4kJGFubm90YXRlKGZuLCBzdHJpY3REaSwgc2VydmljZU5hbWUpLAor
ICAgICAgICAgIGxlbmd0aCwgaSwKKyAgICAgICAgICBrZXk7CisKKyAgICAgIGZvciAoaSA9IDAs
IGxlbmd0aCA9ICRpbmplY3QubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAga2V5
ID0gJGluamVjdFtpXTsKKyAgICAgICAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB7Cisg
ICAgICAgICAgdGhyb3cgJGluamVjdG9yTWluRXJyKCdpdGtuJywKKyAgICAgICAgICAgICAgICAg
ICdJbmNvcnJlY3QgaW5qZWN0aW9uIHRva2VuISBFeHBlY3RlZCBzZXJ2aWNlIG5hbWUgYXMgc3Ry
aW5nLCBnb3QgezB9Jywga2V5KTsKKyAgICAgICAgfQorICAgICAgICBhcmdzLnB1c2goCisgICAg
ICAgICAgbG9jYWxzICYmIGxvY2Fscy5oYXNPd25Qcm9wZXJ0eShrZXkpCisgICAgICAgICAgPyBs
b2NhbHNba2V5XQorICAgICAgICAgIDogZ2V0U2VydmljZShrZXksIHNlcnZpY2VOYW1lKQorICAg
ICAgICApOworICAgICAgfQorICAgICAgaWYgKGlzQXJyYXkoZm4pKSB7CisgICAgICAgIGZuID0g
Zm5bbGVuZ3RoXTsKKyAgICAgIH0KKworICAgICAgLy8gaHR0cDovL2pzcGVyZi5jb20vYW5ndWxh
cmpzLWludm9rZS1hcHBseS12cy1zd2l0Y2gKKyAgICAgIC8vICM1Mzg4CisgICAgICByZXR1cm4g
Zm4uYXBwbHkoc2VsZiwgYXJncyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gaW5zdGFudGlhdGUo
VHlwZSwgbG9jYWxzLCBzZXJ2aWNlTmFtZSkgeworICAgICAgLy8gQ2hlY2sgaWYgVHlwZSBpcyBh
bm5vdGF0ZWQgYW5kIHVzZSBqdXN0IHRoZSBnaXZlbiBmdW5jdGlvbiBhdCBuLTEgYXMgcGFyYW1l
dGVyCisgICAgICAvLyBlLmcuIHNvbWVNb2R1bGUuZmFjdG9yeSgnZ3JlZXRlcicsIFsnJHdpbmRv
dycsIGZ1bmN0aW9uKHJlbmFtZWQkd2luZG93KSB7fV0pOworICAgICAgLy8gT2JqZWN0IGNyZWF0
aW9uOiBodHRwOi8vanNwZXJmLmNvbS9jcmVhdGUtY29uc3RydWN0b3IvMgorICAgICAgdmFyIGlu
c3RhbmNlID0gT2JqZWN0LmNyZWF0ZSgoaXNBcnJheShUeXBlKSA/IFR5cGVbVHlwZS5sZW5ndGgg
LSAxXSA6IFR5cGUpLnByb3RvdHlwZSB8fCBudWxsKTsKKyAgICAgIHZhciByZXR1cm5lZFZhbHVl
ID0gaW52b2tlKFR5cGUsIGluc3RhbmNlLCBsb2NhbHMsIHNlcnZpY2VOYW1lKTsKKworICAgICAg
cmV0dXJuIGlzT2JqZWN0KHJldHVybmVkVmFsdWUpIHx8IGlzRnVuY3Rpb24ocmV0dXJuZWRWYWx1
ZSkgPyByZXR1cm5lZFZhbHVlIDogaW5zdGFuY2U7CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAg
ICAgIGludm9rZTogaW52b2tlLAorICAgICAgaW5zdGFudGlhdGU6IGluc3RhbnRpYXRlLAorICAg
ICAgZ2V0OiBnZXRTZXJ2aWNlLAorICAgICAgYW5ub3RhdGU6IGNyZWF0ZUluamVjdG9yLiQkYW5u
b3RhdGUsCisgICAgICBoYXM6IGZ1bmN0aW9uKG5hbWUpIHsKKyAgICAgICAgcmV0dXJuIHByb3Zp
ZGVyQ2FjaGUuaGFzT3duUHJvcGVydHkobmFtZSArIHByb3ZpZGVyU3VmZml4KSB8fCBjYWNoZS5o
YXNPd25Qcm9wZXJ0eShuYW1lKTsKKyAgICAgIH0KKyAgICB9OworICB9Cit9CisKK2NyZWF0ZUlu
amVjdG9yLiQkYW5ub3RhdGUgPSBhbm5vdGF0ZTsKKworLyoqCisgKiBAbmdkb2MgcHJvdmlkZXIK
KyAqIEBuYW1lICRhbmNob3JTY3JvbGxQcm92aWRlcgorICoKKyAqIEBkZXNjcmlwdGlvbgorICog
VXNlIGAkYW5jaG9yU2Nyb2xsUHJvdmlkZXJgIHRvIGRpc2FibGUgYXV0b21hdGljIHNjcm9sbGlu
ZyB3aGVuZXZlcgorICoge0BsaW5rIG5nLiRsb2NhdGlvbiNoYXNoICRsb2NhdGlvbi5oYXNoKCl9
IGNoYW5nZXMuCisgKi8KK2Z1bmN0aW9uICRBbmNob3JTY3JvbGxQcm92aWRlcigpIHsKKworICB2
YXIgYXV0b1Njcm9sbGluZ0VuYWJsZWQgPSB0cnVlOworCisgIC8qKgorICAgKiBAbmdkb2MgbWV0
aG9kCisgICAqIEBuYW1lICRhbmNob3JTY3JvbGxQcm92aWRlciNkaXNhYmxlQXV0b1Njcm9sbGlu
ZworICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAgICogQnkgZGVmYXVsdCwge0BsaW5rIG5nLiRh
bmNob3JTY3JvbGwgJGFuY2hvclNjcm9sbCgpfSB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IGNo
YW5nZXMgdG8KKyAgICoge0BsaW5rIG5nLiRsb2NhdGlvbiNoYXNoICRsb2NhdGlvbi5oYXNoKCl9
IGFuZCBzY3JvbGwgdG8gdGhlIGVsZW1lbnQgbWF0Y2hpbmcgdGhlIG5ldyBoYXNoLjxiciAvPgor
ICAgKiBVc2UgdGhpcyBtZXRob2QgdG8gZGlzYWJsZSBhdXRvbWF0aWMgc2Nyb2xsaW5nLgorICAg
KgorICAgKiBJZiBhdXRvbWF0aWMgc2Nyb2xsaW5nIGlzIGRpc2FibGVkLCBvbmUgbXVzdCBleHBs
aWNpdGx5IGNhbGwKKyAgICoge0BsaW5rIG5nLiRhbmNob3JTY3JvbGwgJGFuY2hvclNjcm9sbCgp
fSBpbiBvcmRlciB0byBzY3JvbGwgdG8gdGhlIGVsZW1lbnQgcmVsYXRlZCB0byB0aGUKKyAgICog
Y3VycmVudCBoYXNoLgorICAgKi8KKyAgdGhpcy5kaXNhYmxlQXV0b1Njcm9sbGluZyA9IGZ1bmN0
aW9uKCkgeworICAgIGF1dG9TY3JvbGxpbmdFbmFibGVkID0gZmFsc2U7CisgIH07CisKKyAgLyoq
CisgICAqIEBuZ2RvYyBzZXJ2aWNlCisgICAqIEBuYW1lICRhbmNob3JTY3JvbGwKKyAgICogQGtp
bmQgZnVuY3Rpb24KKyAgICogQHJlcXVpcmVzICR3aW5kb3cKKyAgICogQHJlcXVpcmVzICRsb2Nh
dGlvbgorICAgKiBAcmVxdWlyZXMgJHJvb3RTY29wZQorICAgKgorICAgKiBAZGVzY3JpcHRpb24K
KyAgICogV2hlbiBjYWxsZWQsIGl0IHNjcm9sbHMgdG8gdGhlIGVsZW1lbnQgcmVsYXRlZCB0byB0
aGUgc3BlY2lmaWVkIGBoYXNoYCBvciAoaWYgb21pdHRlZCkgdG8gdGhlCisgICAqIGN1cnJlbnQg
dmFsdWUgb2Yge0BsaW5rIG5nLiRsb2NhdGlvbiNoYXNoICRsb2NhdGlvbi5oYXNoKCl9LCBhY2Nv
cmRpbmcgdG8gdGhlIHJ1bGVzIHNwZWNpZmllZAorICAgKiBpbiB0aGUKKyAgICogW0hUTUw1IHNw
ZWNdKGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvT3ZlcnZpZXcuaHRtbCN0aGUtaW5kaWNh
dGVkLXBhcnQtb2YtdGhlLWRvY3VtZW50KS4KKyAgICoKKyAgICogSXQgYWxzbyB3YXRjaGVzIHRo
ZSB7QGxpbmsgbmcuJGxvY2F0aW9uI2hhc2ggJGxvY2F0aW9uLmhhc2goKX0gYW5kIGF1dG9tYXRp
Y2FsbHkgc2Nyb2xscyB0bworICAgKiBtYXRjaCBhbnkgYW5jaG9yIHdoZW5ldmVyIGl0IGNoYW5n
ZXMuIFRoaXMgY2FuIGJlIGRpc2FibGVkIGJ5IGNhbGxpbmcKKyAgICoge0BsaW5rIG5nLiRhbmNo
b3JTY3JvbGxQcm92aWRlciNkaXNhYmxlQXV0b1Njcm9sbGluZyAkYW5jaG9yU2Nyb2xsUHJvdmlk
ZXIuZGlzYWJsZUF1dG9TY3JvbGxpbmcoKX0uCisgICAqCisgICAqIEFkZGl0aW9uYWxseSwgeW91
IGNhbiB1c2UgaXRzIHtAbGluayBuZy4kYW5jaG9yU2Nyb2xsI3lPZmZzZXQgeU9mZnNldH0gcHJv
cGVydHkgdG8gc3BlY2lmeSBhCisgICAqIHZlcnRpY2FsIHNjcm9sbC1vZmZzZXQgKGVpdGhlciBm
aXhlZCBvciBkeW5hbWljKS4KKyAgICoKKyAgICogQHBhcmFtIHtzdHJpbmc9fSBoYXNoIFRoZSBo
YXNoIHNwZWNpZnlpbmcgdGhlIGVsZW1lbnQgdG8gc2Nyb2xsIHRvLiBJZiBvbWl0dGVkLCB0aGUg
dmFsdWUgb2YKKyAgICogICAgICAgICAgICAgICAgICAgICAgIHtAbGluayBuZy4kbG9jYXRpb24j
aGFzaCAkbG9jYXRpb24uaGFzaCgpfSB3aWxsIGJlIHVzZWQuCisgICAqCisgICAqIEBwcm9wZXJ0
eSB7KG51bWJlcnxmdW5jdGlvbnxqcUxpdGUpfSB5T2Zmc2V0CisgICAqIElmIHNldCwgc3BlY2lm
aWVzIGEgdmVydGljYWwgc2Nyb2xsLW9mZnNldC4gVGhpcyBpcyBvZnRlbiB1c2VmdWwgd2hlbiB0
aGVyZSBhcmUgZml4ZWQKKyAgICogcG9zaXRpb25lZCBlbGVtZW50cyBhdCB0aGUgdG9wIG9mIHRo
ZSBwYWdlLCBzdWNoIGFzIG5hdmJhcnMsIGhlYWRlcnMgZXRjLgorICAgKgorICAgKiBgeU9mZnNl
dGAgY2FuIGJlIHNwZWNpZmllZCBpbiB2YXJpb3VzIHdheXM6CisgICAqIC0gKipudW1iZXIqKjog
QSBmaXhlZCBudW1iZXIgb2YgcGl4ZWxzIHRvIGJlIHVzZWQgYXMgb2Zmc2V0LjxiciAvPjxiciAv
PgorICAgKiAtICoqZnVuY3Rpb24qKjogQSBnZXR0ZXIgZnVuY3Rpb24gY2FsbGVkIGV2ZXJ5dGlt
ZSBgJGFuY2hvclNjcm9sbCgpYCBpcyBleGVjdXRlZC4gTXVzdCByZXR1cm4KKyAgICogICBhIG51
bWJlciByZXByZXNlbnRpbmcgdGhlIG9mZnNldCAoaW4gcGl4ZWxzKS48YnIgLz48YnIgLz4KKyAg
ICogLSAqKmpxTGl0ZSoqOiBBIGpxTGl0ZS9qUXVlcnkgZWxlbWVudCB0byBiZSB1c2VkIGZvciBz
cGVjaWZ5aW5nIHRoZSBvZmZzZXQuIFRoZSBkaXN0YW5jZSBmcm9tCisgICAqICAgdGhlIHRvcCBv
ZiB0aGUgcGFnZSB0byB0aGUgZWxlbWVudCdzIGJvdHRvbSB3aWxsIGJlIHVzZWQgYXMgb2Zmc2V0
LjxiciAvPgorICAgKiAgICoqTm90ZSoqOiBUaGUgZWxlbWVudCB3aWxsIGJlIHRha2VuIGludG8g
YWNjb3VudCBvbmx5IGFzIGxvbmcgYXMgaXRzIGBwb3NpdGlvbmAgaXMgc2V0IHRvCisgICAqICAg
YGZpeGVkYC4gVGhpcyBvcHRpb24gaXMgdXNlZnVsLCB3aGVuIGRlYWxpbmcgd2l0aCByZXNwb25z
aXZlIG5hdmJhcnMvaGVhZGVycyB0aGF0IGFkanVzdAorICAgKiAgIHRoZWlyIGhlaWdodCBhbmQv
b3IgcG9zaXRpb25pbmcgYWNjb3JkaW5nIHRvIHRoZSB2aWV3cG9ydCdzIHNpemUuCisgICAqCisg
ICAqIDxiciAvPgorICAgKiA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC13YXJuaW5nIj4KKyAgICog
SW4gb3JkZXIgZm9yIGB5T2Zmc2V0YCB0byB3b3JrIHByb3Blcmx5LCBzY3JvbGxpbmcgc2hvdWxk
IHRha2UgcGxhY2Ugb24gdGhlIGRvY3VtZW50J3Mgcm9vdCBhbmQKKyAgICogbm90IHNvbWUgY2hp
bGQgZWxlbWVudC4KKyAgICogPC9kaXY+CisgICAqCisgICAqIEBleGFtcGxlCisgICAgIDxleGFt
cGxlIG1vZHVsZT0iYW5jaG9yU2Nyb2xsRXhhbXBsZSI+CisgICAgICAgPGZpbGUgbmFtZT0iaW5k
ZXguaHRtbCI+CisgICAgICAgICA8ZGl2IGlkPSJzY3JvbGxBcmVhIiBuZy1jb250cm9sbGVyPSJT
Y3JvbGxDb250cm9sbGVyIj4KKyAgICAgICAgICAgPGEgbmctY2xpY2s9ImdvdG9Cb3R0b20oKSI+
R28gdG8gYm90dG9tPC9hPgorICAgICAgICAgICA8YSBpZD0iYm90dG9tIj48L2E+IFlvdSdyZSBh
dCB0aGUgYm90dG9tIQorICAgICAgICAgPC9kaXY+CisgICAgICAgPC9maWxlPgorICAgICAgIDxm
aWxlIG5hbWU9InNjcmlwdC5qcyI+CisgICAgICAgICBhbmd1bGFyLm1vZHVsZSgnYW5jaG9yU2Ny
b2xsRXhhbXBsZScsIFtdKQorICAgICAgICAgICAuY29udHJvbGxlcignU2Nyb2xsQ29udHJvbGxl
cicsIFsnJHNjb3BlJywgJyRsb2NhdGlvbicsICckYW5jaG9yU2Nyb2xsJywKKyAgICAgICAgICAg
ICBmdW5jdGlvbiAoJHNjb3BlLCAkbG9jYXRpb24sICRhbmNob3JTY3JvbGwpIHsKKyAgICAgICAg
ICAgICAgICRzY29wZS5nb3RvQm90dG9tID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
IC8vIHNldCB0aGUgbG9jYXRpb24uaGFzaCB0byB0aGUgaWQgb2YKKyAgICAgICAgICAgICAgICAg
Ly8gdGhlIGVsZW1lbnQgeW91IHdpc2ggdG8gc2Nyb2xsIHRvLgorICAgICAgICAgICAgICAgICAk
bG9jYXRpb24uaGFzaCgnYm90dG9tJyk7CisKKyAgICAgICAgICAgICAgICAgLy8gY2FsbCAkYW5j
aG9yU2Nyb2xsKCkKKyAgICAgICAgICAgICAgICAgJGFuY2hvclNjcm9sbCgpOworICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgICB9XSk7CisgICAgICAgPC9maWxlPgorICAgICAgIDxmaWxl
IG5hbWU9InN0eWxlLmNzcyI+CisgICAgICAgICAjc2Nyb2xsQXJlYSB7CisgICAgICAgICAgIGhl
aWdodDogMjgwcHg7CisgICAgICAgICAgIG92ZXJmbG93OiBhdXRvOworICAgICAgICAgfQorCisg
ICAgICAgICAjYm90dG9tIHsKKyAgICAgICAgICAgZGlzcGxheTogYmxvY2s7CisgICAgICAgICAg
IG1hcmdpbi10b3A6IDIwMDBweDsKKyAgICAgICAgIH0KKyAgICAgICA8L2ZpbGU+CisgICAgIDwv
ZXhhbXBsZT4KKyAgICoKKyAgICogPGhyIC8+CisgICAqIFRoZSBleGFtcGxlIGJlbG93IGlsbHVz
dHJhdGVzIHRoZSB1c2Ugb2YgYSB2ZXJ0aWNhbCBzY3JvbGwtb2Zmc2V0IChzcGVjaWZpZWQgYXMg
YSBmaXhlZCB2YWx1ZSkuCisgICAqIFNlZSB7QGxpbmsgbmcuJGFuY2hvclNjcm9sbCN5T2Zmc2V0
ICRhbmNob3JTY3JvbGwueU9mZnNldH0gZm9yIG1vcmUgZGV0YWlscy4KKyAgICoKKyAgICogQGV4
YW1wbGUKKyAgICAgPGV4YW1wbGUgbW9kdWxlPSJhbmNob3JTY3JvbGxPZmZzZXRFeGFtcGxlIj4K
KyAgICAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgICAgIDxkaXYgY2xhc3M9ImZp
eGVkLWhlYWRlciIgbmctY29udHJvbGxlcj0iaGVhZGVyQ3RybCI+CisgICAgICAgICAgIDxhIGhy
ZWY9IiIgbmctY2xpY2s9ImdvdG9BbmNob3IoeCkiIG5nLXJlcGVhdD0ieCBpbiBbMSwyLDMsNCw1
XSI+CisgICAgICAgICAgICAgR28gdG8gYW5jaG9yIHt7eH19CisgICAgICAgICAgIDwvYT4KKyAg
ICAgICAgIDwvZGl2PgorICAgICAgICAgPGRpdiBpZD0iYW5jaG9ye3t4fX0iIGNsYXNzPSJhbmNo
b3IiIG5nLXJlcGVhdD0ieCBpbiBbMSwyLDMsNCw1XSI+CisgICAgICAgICAgIEFuY2hvciB7e3h9
fSBvZiA1CisgICAgICAgICA8L2Rpdj4KKyAgICAgICA8L2ZpbGU+CisgICAgICAgPGZpbGUgbmFt
ZT0ic2NyaXB0LmpzIj4KKyAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCdhbmNob3JTY3JvbGxPZmZz
ZXRFeGFtcGxlJywgW10pCisgICAgICAgICAgIC5ydW4oWyckYW5jaG9yU2Nyb2xsJywgZnVuY3Rp
b24oJGFuY2hvclNjcm9sbCkgeworICAgICAgICAgICAgICRhbmNob3JTY3JvbGwueU9mZnNldCA9
IDUwOyAgIC8vIGFsd2F5cyBzY3JvbGwgYnkgNTAgZXh0cmEgcGl4ZWxzCisgICAgICAgICAgIH1d
KQorICAgICAgICAgICAuY29udHJvbGxlcignaGVhZGVyQ3RybCcsIFsnJGFuY2hvclNjcm9sbCcs
ICckbG9jYXRpb24nLCAnJHNjb3BlJywKKyAgICAgICAgICAgICBmdW5jdGlvbiAoJGFuY2hvclNj
cm9sbCwgJGxvY2F0aW9uLCAkc2NvcGUpIHsKKyAgICAgICAgICAgICAgICRzY29wZS5nb3RvQW5j
aG9yID0gZnVuY3Rpb24oeCkgeworICAgICAgICAgICAgICAgICB2YXIgbmV3SGFzaCA9ICdhbmNo
b3InICsgeDsKKyAgICAgICAgICAgICAgICAgaWYgKCRsb2NhdGlvbi5oYXNoKCkgIT09IG5ld0hh
c2gpIHsKKyAgICAgICAgICAgICAgICAgICAvLyBzZXQgdGhlICRsb2NhdGlvbi5oYXNoIHRvIGBu
ZXdIYXNoYCBhbmQKKyAgICAgICAgICAgICAgICAgICAvLyAkYW5jaG9yU2Nyb2xsIHdpbGwgYXV0
b21hdGljYWxseSBzY3JvbGwgdG8gaXQKKyAgICAgICAgICAgICAgICAgICAkbG9jYXRpb24uaGFz
aCgnYW5jaG9yJyArIHgpOworICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgIC8vIGNhbGwgJGFuY2hvclNjcm9sbCgpIGV4cGxpY2l0bHksCisgICAgICAgICAgICAg
ICAgICAgLy8gc2luY2UgJGxvY2F0aW9uLmhhc2ggaGFzbid0IGNoYW5nZWQKKyAgICAgICAgICAg
ICAgICAgICAkYW5jaG9yU2Nyb2xsKCk7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICAgfQorICAgICAgICAgICBdKTsKKyAgICAgICA8L2ZpbGU+Cisg
ICAgICAgPGZpbGUgbmFtZT0ic3R5bGUuY3NzIj4KKyAgICAgICAgIGJvZHkgeworICAgICAgICAg
ICBwYWRkaW5nLXRvcDogNTBweDsKKyAgICAgICAgIH0KKworICAgICAgICAgLmFuY2hvciB7Cisg
ICAgICAgICAgIGJvcmRlcjogMnB4IGRhc2hlZCBEYXJrT3JjaGlkOworICAgICAgICAgICBwYWRk
aW5nOiAxMHB4IDEwcHggMjAwcHggMTBweDsKKyAgICAgICAgIH0KKworICAgICAgICAgLmZpeGVk
LWhlYWRlciB7CisgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4y
KTsKKyAgICAgICAgICAgaGVpZ2h0OiA1MHB4OworICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7
CisgICAgICAgICAgIHRvcDogMDsgbGVmdDogMDsgcmlnaHQ6IDA7CisgICAgICAgICB9CisKKyAg
ICAgICAgIC5maXhlZC1oZWFkZXIgPiBhIHsKKyAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJs
b2NrOworICAgICAgICAgICBtYXJnaW46IDVweCAxNXB4OworICAgICAgICAgfQorICAgICAgIDwv
ZmlsZT4KKyAgICAgPC9leGFtcGxlPgorICAgKi8KKyAgdGhpcy4kZ2V0ID0gWyckd2luZG93Jywg
JyRsb2NhdGlvbicsICckcm9vdFNjb3BlJywgZnVuY3Rpb24oJHdpbmRvdywgJGxvY2F0aW9uLCAk
cm9vdFNjb3BlKSB7CisgICAgdmFyIGRvY3VtZW50ID0gJHdpbmRvdy5kb2N1bWVudDsKKworICAg
IC8vIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgZmlyc3QgYW5jaG9yIGZyb20gYSBOb2RlTGlzdAor
ICAgIC8vICh1c2luZyBgQXJyYXkjc29tZSgpYCBpbnN0ZWFkIG9mIGBhbmd1bGFyI2ZvckVhY2go
KWAgc2luY2UgaXQncyBtb3JlIHBlcmZvcm1hbnQKKyAgICAvLyAgYW5kIHdvcmtpbmcgaW4gYWxs
IHN1cHBvcnRlZCBicm93c2Vycy4pCisgICAgZnVuY3Rpb24gZ2V0Rmlyc3RBbmNob3IobGlzdCkg
eworICAgICAgdmFyIHJlc3VsdCA9IG51bGw7CisgICAgICBBcnJheS5wcm90b3R5cGUuc29tZS5j
YWxsKGxpc3QsIGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICAgICAgaWYgKG5vZGVOYW1lXyhlbGVt
ZW50KSA9PT0gJ2EnKSB7CisgICAgICAgICAgcmVzdWx0ID0gZWxlbWVudDsKKyAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKworICAgIGZ1bmN0aW9uIGdldFlPZmZzZXQoKSB7CisKKyAgICAgIHZhciBvZmZzZXQg
PSBzY3JvbGwueU9mZnNldDsKKworICAgICAgaWYgKGlzRnVuY3Rpb24ob2Zmc2V0KSkgeworICAg
ICAgICBvZmZzZXQgPSBvZmZzZXQoKTsKKyAgICAgIH0gZWxzZSBpZiAoaXNFbGVtZW50KG9mZnNl
dCkpIHsKKyAgICAgICAgdmFyIGVsZW0gPSBvZmZzZXRbMF07CisgICAgICAgIHZhciBzdHlsZSA9
ICR3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtKTsKKyAgICAgICAgaWYgKHN0eWxlLnBvc2l0
aW9uICE9PSAnZml4ZWQnKSB7CisgICAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICBvZmZzZXQgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRv
bTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIGlmICghaXNOdW1iZXIob2Zmc2V0KSkgeworICAg
ICAgICBvZmZzZXQgPSAwOworICAgICAgfQorCisgICAgICByZXR1cm4gb2Zmc2V0OworICAgIH0K
KworICAgIGZ1bmN0aW9uIHNjcm9sbFRvKGVsZW0pIHsKKyAgICAgIGlmIChlbGVtKSB7CisgICAg
ICAgIGVsZW0uc2Nyb2xsSW50b1ZpZXcoKTsKKworICAgICAgICB2YXIgb2Zmc2V0ID0gZ2V0WU9m
ZnNldCgpOworCisgICAgICAgIGlmIChvZmZzZXQpIHsKKyAgICAgICAgICAvLyBgb2Zmc2V0YCBp
cyB0aGUgbnVtYmVyIG9mIHBpeGVscyB3ZSBzaG91bGQgc2Nyb2xsIFVQIGluIG9yZGVyIHRvIGFs
aWduIGBlbGVtYCBwcm9wZXJseS4KKyAgICAgICAgICAvLyBUaGlzIGlzIHRydWUgT05MWSBpZiB0
aGUgY2FsbCB0byBgZWxlbS5zY3JvbGxJbnRvVmlldygpYCBpbml0aWFsbHkgYWxpZ25zIGBlbGVt
YCBhdCB0aGUKKyAgICAgICAgICAvLyB0b3Agb2YgdGhlIHZpZXdwb3J0LgorICAgICAgICAgIC8v
CisgICAgICAgICAgLy8gSUYgdGhlIG51bWJlciBvZiBwaXhlbHMgZnJvbSB0aGUgdG9wIG9mIGBl
bGVtYCB0byB0aGUgZW5kIG9mIHRoZSBwYWdlJ3MgY29udGVudCBpcyBsZXNzCisgICAgICAgICAg
Ly8gdGhhbiB0aGUgaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydCwgdGhlbiBgZWxlbS5zY3JvbGxJbnRv
VmlldygpYCB3aWxsIGFsaWduIHRoZSBgZWxlbWAgc29tZQorICAgICAgICAgIC8vIHdheSBkb3du
IHRoZSBwYWdlLgorICAgICAgICAgIC8vCisgICAgICAgICAgLy8gVGhpcyBpcyBvZnRlbiB0aGUg
Y2FzZSBmb3IgZWxlbWVudHMgbmVhciB0aGUgYm90dG9tIG9mIHRoZSBwYWdlLgorICAgICAgICAg
IC8vCisgICAgICAgICAgLy8gSW4gc3VjaCBjYXNlcyB3ZSBkbyBub3QgbmVlZCB0byBzY3JvbGwg
dGhlIHdob2xlIGBvZmZzZXRgIHVwLCBqdXN0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4KKyAgICAg
ICAgICAvLyB0aGUgdG9wIG9mIHRoZSBlbGVtZW50IGFuZCB0aGUgb2Zmc2V0LCB3aGljaCBpcyBl
bm91Z2ggdG8gYWxpZ24gdGhlIHRvcCBvZiBgZWxlbWAgYXQgdGhlCisgICAgICAgICAgLy8gZGVz
aXJlZCBwb3NpdGlvbi4KKyAgICAgICAgICB2YXIgZWxlbVRvcCA9IGVsZW0uZ2V0Qm91bmRpbmdD
bGllbnRSZWN0KCkudG9wOworICAgICAgICAgICR3aW5kb3cuc2Nyb2xsQnkoMCwgZWxlbVRvcCAt
IG9mZnNldCk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgICR3aW5kb3cuc2Ny
b2xsVG8oMCwgMCk7CisgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gc2Nyb2xsKGhhc2gp
IHsKKyAgICAgIGhhc2ggPSBpc1N0cmluZyhoYXNoKSA/IGhhc2ggOiAkbG9jYXRpb24uaGFzaCgp
OworICAgICAgdmFyIGVsbTsKKworICAgICAgLy8gZW1wdHkgaGFzaCwgc2Nyb2xsIHRvIHRoZSB0
b3Agb2YgdGhlIHBhZ2UKKyAgICAgIGlmICghaGFzaCkgc2Nyb2xsVG8obnVsbCk7CisKKyAgICAg
IC8vIGVsZW1lbnQgd2l0aCBnaXZlbiBpZAorICAgICAgZWxzZSBpZiAoKGVsbSA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKGhhc2gpKSkgc2Nyb2xsVG8oZWxtKTsKKworICAgICAgLy8gZmlyc3Qg
YW5jaG9yIHdpdGggZ2l2ZW4gbmFtZSA6LUQKKyAgICAgIGVsc2UgaWYgKChlbG0gPSBnZXRGaXJz
dEFuY2hvcihkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShoYXNoKSkpKSBzY3JvbGxUbyhlbG0p
OworCisgICAgICAvLyBubyBlbGVtZW50IGFuZCBoYXNoID09ICd0b3AnLCBzY3JvbGwgdG8gdGhl
IHRvcCBvZiB0aGUgcGFnZQorICAgICAgZWxzZSBpZiAoaGFzaCA9PT0gJ3RvcCcpIHNjcm9sbFRv
KG51bGwpOworICAgIH0KKworICAgIC8vIGRvZXMgbm90IHNjcm9sbCB3aGVuIHVzZXIgY2xpY2tz
IG9uIGFuY2hvciBsaW5rIHRoYXQgaXMgY3VycmVudGx5IG9uCisgICAgLy8gKG5vIHVybCBjaGFu
Z2UsIG5vICRsb2NhdGlvbi5oYXNoKCkgY2hhbmdlKSwgYnJvd3NlciBuYXRpdmUgZG9lcyBzY3Jv
bGwKKyAgICBpZiAoYXV0b1Njcm9sbGluZ0VuYWJsZWQpIHsKKyAgICAgICRyb290U2NvcGUuJHdh
dGNoKGZ1bmN0aW9uIGF1dG9TY3JvbGxXYXRjaCgpIHtyZXR1cm4gJGxvY2F0aW9uLmhhc2goKTt9
LAorICAgICAgICBmdW5jdGlvbiBhdXRvU2Nyb2xsV2F0Y2hBY3Rpb24obmV3VmFsLCBvbGRWYWwp
IHsKKyAgICAgICAgICAvLyBza2lwIHRoZSBpbml0aWFsIHNjcm9sbCBpZiAkbG9jYXRpb24uaGFz
aCBpcyBlbXB0eQorICAgICAgICAgIGlmIChuZXdWYWwgPT09IG9sZFZhbCAmJiBuZXdWYWwgPT09
ICcnKSByZXR1cm47CisKKyAgICAgICAgICBqcUxpdGVEb2N1bWVudExvYWRlZChmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgICRyb290U2NvcGUuJGV2YWxBc3luYyhzY3JvbGwpOworICAgICAgICAg
IH0pOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gc2Nyb2xsOworICB9XTsKK30K
KwordmFyICRhbmltYXRlTWluRXJyID0gbWluRXJyKCckYW5pbWF0ZScpOwordmFyIEVMRU1FTlRf
Tk9ERSA9IDE7Cit2YXIgTkdfQU5JTUFURV9DTEFTU05BTUUgPSAnbmctYW5pbWF0ZSc7CisKK2Z1
bmN0aW9uIG1lcmdlQ2xhc3NlcyhhLGIpIHsKKyAgaWYgKCFhICYmICFiKSByZXR1cm4gJyc7Cisg
IGlmICghYSkgcmV0dXJuIGI7CisgIGlmICghYikgcmV0dXJuIGE7CisgIGlmIChpc0FycmF5KGEp
KSBhID0gYS5qb2luKCcgJyk7CisgIGlmIChpc0FycmF5KGIpKSBiID0gYi5qb2luKCcgJyk7Cisg
IHJldHVybiBhICsgJyAnICsgYjsKK30KKworZnVuY3Rpb24gZXh0cmFjdEVsZW1lbnROb2RlKGVs
ZW1lbnQpIHsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50Lmxlbmd0aDsgaSsrKSB7Cisg
ICAgdmFyIGVsbSA9IGVsZW1lbnRbaV07CisgICAgaWYgKGVsbS5ub2RlVHlwZSA9PT0gRUxFTUVO
VF9OT0RFKSB7CisgICAgICByZXR1cm4gZWxtOworICAgIH0KKyAgfQorfQorCitmdW5jdGlvbiBz
cGxpdENsYXNzZXMoY2xhc3NlcykgeworICBpZiAoaXNTdHJpbmcoY2xhc3NlcykpIHsKKyAgICBj
bGFzc2VzID0gY2xhc3Nlcy5zcGxpdCgnICcpOworICB9CisKKyAgLy8gVXNlIGNyZWF0ZU1hcCgp
IHRvIHByZXZlbnQgY2xhc3MgYXNzdW1wdGlvbnMgaW52b2x2aW5nIHByb3BlcnR5IG5hbWVzIGlu
CisgIC8vIE9iamVjdC5wcm90b3R5cGUKKyAgdmFyIG9iaiA9IGNyZWF0ZU1hcCgpOworICBmb3JF
YWNoKGNsYXNzZXMsIGZ1bmN0aW9uKGtsYXNzKSB7CisgICAgLy8gc29tZXRpbWVzIHRoZSBzcGxp
dCBsZWF2ZXMgZW1wdHkgc3RyaW5nIHZhbHVlcworICAgIC8vIGluY2FzZSBleHRyYSBzcGFjZXMg
d2VyZSBhcHBsaWVkIHRvIHRoZSBvcHRpb25zCisgICAgaWYgKGtsYXNzLmxlbmd0aCkgeworICAg
ICAgb2JqW2tsYXNzXSA9IHRydWU7CisgICAgfQorICB9KTsKKyAgcmV0dXJuIG9iajsKK30KKwor
Ly8gaWYgYW55IG90aGVyIHR5cGUgb2Ygb3B0aW9ucyB2YWx1ZSBiZXNpZGVzIGFuIE9iamVjdCB2
YWx1ZSBpcworLy8gcGFzc2VkIGludG8gdGhlICRhbmltYXRlLm1ldGhvZCgpIGFuaW1hdGlvbiB0
aGVuIHRoaXMgaGVscGVyIGNvZGUKKy8vIHdpbGwgYmUgcnVuIHdoaWNoIHdpbGwgaWdub3JlIGl0
LiBXaGlsZSB0aGlzIHBhdGNoIGlzIG5vdCB0aGUKKy8vIGdyZWF0ZXN0IHNvbHV0aW9uIHRvIHRo
aXMsIGEgbG90IG9mIGV4aXN0aW5nIHBsdWdpbnMgZGVwZW5kIG9uCisvLyAkYW5pbWF0ZSB0byBl
aXRoZXIgY2FsbCB0aGUgY2FsbGJhY2sgKDwgMS4yKSBvciByZXR1cm4gYSBwcm9taXNlCisvLyB0
aGF0IGNhbiBiZSBjaGFuZ2VkLiBUaGlzIGhlbHBlciBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhl
IG9wdGlvbnMKKy8vIGFyZSB3aXBlZCBjbGVhbiBpbmNhc2UgYSBjYWxsYmFjayBmdW5jdGlvbiBp
cyBwcm92aWRlZC4KK2Z1bmN0aW9uIHByZXBhcmVBbmltYXRlT3B0aW9ucyhvcHRpb25zKSB7Cisg
IHJldHVybiBpc09iamVjdChvcHRpb25zKQorICAgICAgPyBvcHRpb25zCisgICAgICA6IHt9Owor
fQorCit2YXIgJCRDb3JlQW5pbWF0ZVJ1bm5lclByb3ZpZGVyID0gZnVuY3Rpb24oKSB7CisgIHRo
aXMuJGdldCA9IFsnJHEnLCAnJCRyQUYnLCBmdW5jdGlvbigkcSwgJCRyQUYpIHsKKyAgICBmdW5j
dGlvbiBBbmltYXRlUnVubmVyKCkge30KKyAgICBBbmltYXRlUnVubmVyLmFsbCA9IG5vb3A7Cisg
ICAgQW5pbWF0ZVJ1bm5lci5jaGFpbiA9IG5vb3A7CisgICAgQW5pbWF0ZVJ1bm5lci5wcm90b3R5
cGUgPSB7CisgICAgICBlbmQ6IG5vb3AsCisgICAgICBjYW5jZWw6IG5vb3AsCisgICAgICByZXN1
bWU6IG5vb3AsCisgICAgICBwYXVzZTogbm9vcCwKKyAgICAgIGNvbXBsZXRlOiBub29wLAorICAg
ICAgdGhlbjogZnVuY3Rpb24ocGFzcywgZmFpbCkgeworICAgICAgICByZXR1cm4gJHEoZnVuY3Rp
b24ocmVzb2x2ZSkgeworICAgICAgICAgICQkckFGKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
cmVzb2x2ZSgpOworICAgICAgICAgIH0pOworICAgICAgICB9KS50aGVuKHBhc3MsIGZhaWwpOwor
ICAgICAgfQorICAgIH07CisgICAgcmV0dXJuIEFuaW1hdGVSdW5uZXI7CisgIH1dOworfTsKKwor
Ly8gdGhpcyBpcyBwcmVmaXhlZCB3aXRoIENvcmUgc2luY2UgaXQgY29uZmxpY3RzIHdpdGgKKy8v
IHRoZSBhbmltYXRlUXVldWVQcm92aWRlciBkZWZpbmVkIGluIG5nQW5pbWF0ZS9hbmltYXRlUXVl
dWUuanMKK3ZhciAkJENvcmVBbmltYXRlUXVldWVQcm92aWRlciA9IGZ1bmN0aW9uKCkgeworICB2
YXIgcG9zdERpZ2VzdFF1ZXVlID0gbmV3IEhhc2hNYXAoKTsKKyAgdmFyIHBvc3REaWdlc3RFbGVt
ZW50cyA9IFtdOworCisgIHRoaXMuJGdldCA9IFsnJCRBbmltYXRlUnVubmVyJywgJyRyb290U2Nv
cGUnLAorICAgICAgIGZ1bmN0aW9uKCQkQW5pbWF0ZVJ1bm5lciwgICAkcm9vdFNjb3BlKSB7Cisg
ICAgcmV0dXJuIHsKKyAgICAgIGVuYWJsZWQ6IG5vb3AsCisgICAgICBvbjogbm9vcCwKKyAgICAg
IG9mZjogbm9vcCwKKyAgICAgIHBpbjogbm9vcCwKKworICAgICAgcHVzaDogZnVuY3Rpb24oZWxl
bWVudCwgZXZlbnQsIG9wdGlvbnMsIGRvbU9wZXJhdGlvbikgeworICAgICAgICBkb21PcGVyYXRp
b24gICAgICAgICYmIGRvbU9wZXJhdGlvbigpOworCisgICAgICAgIG9wdGlvbnMgPSBvcHRpb25z
IHx8IHt9OworICAgICAgICBvcHRpb25zLmZyb20gICAgICAgICYmIGVsZW1lbnQuY3NzKG9wdGlv
bnMuZnJvbSk7CisgICAgICAgIG9wdGlvbnMudG8gICAgICAgICAgJiYgZWxlbWVudC5jc3Mob3B0
aW9ucy50byk7CisKKyAgICAgICAgaWYgKG9wdGlvbnMuYWRkQ2xhc3MgfHwgb3B0aW9ucy5yZW1v
dmVDbGFzcykgeworICAgICAgICAgIGFkZFJlbW92ZUNsYXNzZXNQb3N0RGlnZXN0KGVsZW1lbnQs
IG9wdGlvbnMuYWRkQ2xhc3MsIG9wdGlvbnMucmVtb3ZlQ2xhc3MpOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIG5ldyAkJEFuaW1hdGVSdW5uZXIoKTsgLy8ganNoaW50IGlnbm9yZTpsaW5l
CisgICAgICB9CisgICAgfTsKKworICAgIGZ1bmN0aW9uIGFkZFJlbW92ZUNsYXNzZXNQb3N0RGln
ZXN0KGVsZW1lbnQsIGFkZCwgcmVtb3ZlKSB7CisgICAgICB2YXIgZGF0YSA9IHBvc3REaWdlc3RR
dWV1ZS5nZXQoZWxlbWVudCk7CisgICAgICB2YXIgY2xhc3NWYWw7CisKKyAgICAgIGlmICghZGF0
YSkgeworICAgICAgICBwb3N0RGlnZXN0UXVldWUucHV0KGVsZW1lbnQsIGRhdGEgPSB7fSk7Cisg
ICAgICAgIHBvc3REaWdlc3RFbGVtZW50cy5wdXNoKGVsZW1lbnQpOworICAgICAgfQorCisgICAg
ICBpZiAoYWRkKSB7CisgICAgICAgIGZvckVhY2goYWRkLnNwbGl0KCcgJyksIGZ1bmN0aW9uKGNs
YXNzTmFtZSkgeworICAgICAgICAgIGlmIChjbGFzc05hbWUpIHsKKyAgICAgICAgICAgIGRhdGFb
Y2xhc3NOYW1lXSA9IHRydWU7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH0KKwor
ICAgICAgaWYgKHJlbW92ZSkgeworICAgICAgICBmb3JFYWNoKHJlbW92ZS5zcGxpdCgnICcpLCBm
dW5jdGlvbihjbGFzc05hbWUpIHsKKyAgICAgICAgICBpZiAoY2xhc3NOYW1lKSB7CisgICAgICAg
ICAgICBkYXRhW2NsYXNzTmFtZV0gPSBmYWxzZTsKKyAgICAgICAgICB9CisgICAgICAgIH0pOwor
ICAgICAgfQorCisgICAgICBpZiAocG9zdERpZ2VzdEVsZW1lbnRzLmxlbmd0aCA+IDEpIHJldHVy
bjsKKworICAgICAgJHJvb3RTY29wZS4kJHBvc3REaWdlc3QoZnVuY3Rpb24oKSB7CisgICAgICAg
IGZvckVhY2gocG9zdERpZ2VzdEVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgICAg
ICAgdmFyIGRhdGEgPSBwb3N0RGlnZXN0UXVldWUuZ2V0KGVsZW1lbnQpOworICAgICAgICAgIGlm
IChkYXRhKSB7CisgICAgICAgICAgICB2YXIgZXhpc3RpbmcgPSBzcGxpdENsYXNzZXMoZWxlbWVu
dC5hdHRyKCdjbGFzcycpKTsKKyAgICAgICAgICAgIHZhciB0b0FkZCA9ICcnOworICAgICAgICAg
ICAgdmFyIHRvUmVtb3ZlID0gJyc7CisgICAgICAgICAgICBmb3JFYWNoKGRhdGEsIGZ1bmN0aW9u
KHN0YXR1cywgY2xhc3NOYW1lKSB7CisgICAgICAgICAgICAgIHZhciBoYXNDbGFzcyA9ICEhZXhp
c3RpbmdbY2xhc3NOYW1lXTsKKyAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPT0gaGFzQ2xhc3Mp
IHsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICAgICAgICB0b0Fk
ZCArPSAodG9BZGQubGVuZ3RoID8gJyAnIDogJycpICsgY2xhc3NOYW1lOworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICB0b1JlbW92ZSArPSAodG9SZW1vdmUubGVu
Z3RoID8gJyAnIDogJycpICsgY2xhc3NOYW1lOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGZvckVhY2goZWxlbWVudCwg
ZnVuY3Rpb24oZWxtKSB7CisgICAgICAgICAgICAgIHRvQWRkICAgICYmIGpxTGl0ZUFkZENsYXNz
KGVsbSwgdG9BZGQpOworICAgICAgICAgICAgICB0b1JlbW92ZSAmJiBqcUxpdGVSZW1vdmVDbGFz
cyhlbG0sIHRvUmVtb3ZlKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcG9zdERpZ2Vz
dFF1ZXVlLnJlbW92ZShlbGVtZW50KTsKKyAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAg
ICAgIHBvc3REaWdlc3RFbGVtZW50cy5sZW5ndGggPSAwOworICAgICAgfSk7CisgICAgfQorICB9
XTsKK307CisKKy8qKgorICogQG5nZG9jIHByb3ZpZGVyCisgKiBAbmFtZSAkYW5pbWF0ZVByb3Zp
ZGVyCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mICRh
bmltYXRlIHRoYXQgZG9lc24ndCBwZXJmb3JtIGFueSBhbmltYXRpb25zLCBpbnN0ZWFkIGp1c3QK
KyAqIHN5bmNocm9ub3VzbHkgcGVyZm9ybXMgRE9NIHVwZGF0ZXMgYW5kIHJlc29sdmVzIHRoZSBy
ZXR1cm5lZCBydW5uZXIgcHJvbWlzZS4KKyAqCisgKiBJbiBvcmRlciB0byBlbmFibGUgYW5pbWF0
aW9ucyB0aGUgYG5nQW5pbWF0ZWAgbW9kdWxlIGhhcyB0byBiZSBsb2FkZWQuCisgKgorICogVG8g
c2VlIHRoZSBmdW5jdGlvbmFsIGltcGxlbWVudGF0aW9uIGNoZWNrIG91dCBgc3JjL25nQW5pbWF0
ZS9hbmltYXRlLmpzYC4KKyAqLwordmFyICRBbmltYXRlUHJvdmlkZXIgPSBbJyRwcm92aWRlJywg
ZnVuY3Rpb24oJHByb3ZpZGUpIHsKKyAgdmFyIHByb3ZpZGVyID0gdGhpczsKKworICB0aGlzLiQk
cmVnaXN0ZXJlZEFuaW1hdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpOworCisgICAvKioKKyAg
ICogQG5nZG9jIG1ldGhvZAorICAgKiBAbmFtZSAkYW5pbWF0ZVByb3ZpZGVyI3JlZ2lzdGVyCisg
ICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBSZWdpc3RlcnMgYSBuZXcgaW5qZWN0YWJsZSBh
bmltYXRpb24gZmFjdG9yeSBmdW5jdGlvbi4gVGhlIGZhY3RvcnkgZnVuY3Rpb24gcHJvZHVjZXMg
dGhlCisgICAqIGFuaW1hdGlvbiBvYmplY3Qgd2hpY2ggY29udGFpbnMgY2FsbGJhY2sgZnVuY3Rp
b25zIGZvciBlYWNoIGV2ZW50IHRoYXQgaXMgZXhwZWN0ZWQgdG8gYmUKKyAgICogYW5pbWF0ZWQu
CisgICAqCisgICAqICAgKiBgZXZlbnRGbmA6IGBmdW5jdGlvbihlbGVtZW50LCAuLi4gLCBkb25l
RnVuY3Rpb24sIG9wdGlvbnMpYAorICAgKiAgIFRoZSBlbGVtZW50IHRvIGFuaW1hdGUsIHRoZSBg
ZG9uZUZ1bmN0aW9uYCBhbmQgdGhlIG9wdGlvbnMgZmVkIGludG8gdGhlIGFuaW1hdGlvbi4gRGVw
ZW5kaW5nCisgICAqICAgb24gdGhlIHR5cGUgb2YgYW5pbWF0aW9uIGFkZGl0aW9uYWwgYXJndW1l
bnRzIHdpbGwgYmUgaW5qZWN0ZWQgaW50byB0aGUgYW5pbWF0aW9uIGZ1bmN0aW9uLiBUaGUKKyAg
ICogICBsaXN0IGJlbG93IGV4cGxhaW5zIHRoZSBmdW5jdGlvbiBzaWduYXR1cmVzIGZvciB0aGUg
ZGlmZmVyZW50IGFuaW1hdGlvbiBtZXRob2RzOgorICAgKgorICAgKiAgIC0gc2V0Q2xhc3M6IGZ1
bmN0aW9uKGVsZW1lbnQsIGFkZGVkQ2xhc3NlcywgcmVtb3ZlZENsYXNzZXMsIGRvbmVGdW5jdGlv
biwgb3B0aW9ucykKKyAgICogICAtIGFkZENsYXNzOiBmdW5jdGlvbihlbGVtZW50LCBhZGRlZENs
YXNzZXMsIGRvbmVGdW5jdGlvbiwgb3B0aW9ucykKKyAgICogICAtIHJlbW92ZUNsYXNzOiBmdW5j
dGlvbihlbGVtZW50LCByZW1vdmVkQ2xhc3NlcywgZG9uZUZ1bmN0aW9uLCBvcHRpb25zKQorICAg
KiAgIC0gZW50ZXIsIGxlYXZlLCBtb3ZlOiBmdW5jdGlvbihlbGVtZW50LCBkb25lRnVuY3Rpb24s
IG9wdGlvbnMpCisgICAqICAgLSBhbmltYXRlOiBmdW5jdGlvbihlbGVtZW50LCBmcm9tU3R5bGVz
LCB0b1N0eWxlcywgZG9uZUZ1bmN0aW9uLCBvcHRpb25zKQorICAgKgorICAgKiAgIE1ha2Ugc3Vy
ZSB0byB0cmlnZ2VyIHRoZSBgZG9uZUZ1bmN0aW9uYCBvbmNlIHRoZSBhbmltYXRpb24gaXMgZnVs
bHkgY29tcGxldGUuCisgICAqCisgICAqIGBgYGpzCisgICAqICAgcmV0dXJuIHsKKyAgICogICAg
IC8vZW50ZXIsIGxlYXZlLCBtb3ZlIHNpZ25hdHVyZQorICAgKiAgICAgZXZlbnRGbiA6IGZ1bmN0
aW9uKGVsZW1lbnQsIGRvbmUsIG9wdGlvbnMpIHsKKyAgICogICAgICAgLy9jb2RlIHRvIHJ1biB0
aGUgYW5pbWF0aW9uCisgICAqICAgICAgIC8vb25jZSBjb21wbGV0ZSwgdGhlbiBydW4gZG9uZSgp
CisgICAqICAgICAgIHJldHVybiBmdW5jdGlvbiBlbmRGdW5jdGlvbih3YXNDYW5jZWxsZWQpIHsK
KyAgICogICAgICAgICAvL2NvZGUgdG8gY2FuY2VsIHRoZSBhbmltYXRpb24KKyAgICogICAgICAg
fQorICAgKiAgICAgfQorICAgKiAgIH0KKyAgICogYGBgCisgICAqCisgICAqIEBwYXJhbSB7c3Ry
aW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBhbmltYXRpb24gKHRoaXMgaXMgd2hhdCB0aGUgY2xh
c3MtYmFzZWQgQ1NTIHZhbHVlIHdpbGwgYmUgY29tcGFyZWQgdG8pLgorICAgKiBAcGFyYW0ge0Z1
bmN0aW9ufSBmYWN0b3J5IFRoZSBmYWN0b3J5IGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVjdXRl
ZCB0byByZXR1cm4gdGhlIGFuaW1hdGlvbgorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9iamVjdC4KKyAgICovCisgIHRoaXMucmVnaXN0ZXIgPSBmdW5jdGlvbihuYW1lLCBmYWN0b3J5
KSB7CisgICAgaWYgKG5hbWUgJiYgbmFtZS5jaGFyQXQoMCkgIT09ICcuJykgeworICAgICAgdGhy
b3cgJGFuaW1hdGVNaW5FcnIoJ25vdGNzZWwnLCAiRXhwZWN0aW5nIGNsYXNzIHNlbGVjdG9yIHN0
YXJ0aW5nIHdpdGggJy4nIGdvdCAnezB9Jy4iLCBuYW1lKTsKKyAgICB9CisKKyAgICB2YXIga2V5
ID0gbmFtZSArICctYW5pbWF0aW9uJzsKKyAgICBwcm92aWRlci4kJHJlZ2lzdGVyZWRBbmltYXRp
b25zW25hbWUuc3Vic3RyKDEpXSA9IGtleTsKKyAgICAkcHJvdmlkZS5mYWN0b3J5KGtleSwgZmFj
dG9yeSk7CisgIH07CisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgJGFu
aW1hdGVQcm92aWRlciNjbGFzc05hbWVGaWx0ZXIKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisg
ICAqIFNldHMgYW5kL29yIHJldHVybnMgdGhlIENTUyBjbGFzcyByZWd1bGFyIGV4cHJlc3Npb24g
dGhhdCBpcyBjaGVja2VkIHdoZW4gcGVyZm9ybWluZworICAgKiBhbiBhbmltYXRpb24uIFVwb24g
Ym9vdHN0cmFwIHRoZSBjbGFzc05hbWVGaWx0ZXIgdmFsdWUgaXMgbm90IHNldCBhdCBhbGwgYW5k
IHdpbGwKKyAgICogdGhlcmVmb3JlIGVuYWJsZSAkYW5pbWF0ZSB0byBhdHRlbXB0IHRvIHBlcmZv
cm0gYW4gYW5pbWF0aW9uIG9uIGFueSBlbGVtZW50IHRoYXQgaXMgdHJpZ2dlcmVkLgorICAgKiBX
aGVuIHNldHRpbmcgdGhlIGBjbGFzc05hbWVGaWx0ZXJgIHZhbHVlLCBhbmltYXRpb25zIHdpbGwg
b25seSBiZSBwZXJmb3JtZWQgb24gZWxlbWVudHMKKyAgICogdGhhdCBzdWNjZXNzZnVsbHkgbWF0
Y2ggdGhlIGZpbHRlciBleHByZXNzaW9uLiBUaGlzIGluIHR1cm4gY2FuIGJvb3N0IHBlcmZvcm1h
bmNlCisgICAqIGZvciBsb3ctcG93ZXJlZCBkZXZpY2VzIGFzIHdlbGwgYXMgYXBwbGljYXRpb25z
IGNvbnRhaW5pbmcgYSBsb3Qgb2Ygc3RydWN0dXJhbCBvcGVyYXRpb25zLgorICAgKiBAcGFyYW0g
e1JlZ0V4cD19IGV4cHJlc3Npb24gVGhlIGNsYXNzTmFtZSBleHByZXNzaW9uIHdoaWNoIHdpbGwg
YmUgY2hlY2tlZCBhZ2FpbnN0IGFsbCBhbmltYXRpb25zCisgICAqIEByZXR1cm4ge1JlZ0V4cH0g
VGhlIGN1cnJlbnQgQ1NTIGNsYXNzTmFtZSBleHByZXNzaW9uIHZhbHVlLiBJZiBudWxsIHRoZW4g
dGhlcmUgaXMgbm8gZXhwcmVzc2lvbiB2YWx1ZQorICAgKi8KKyAgdGhpcy5jbGFzc05hbWVGaWx0
ZXIgPSBmdW5jdGlvbihleHByZXNzaW9uKSB7CisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09
IDEpIHsKKyAgICAgIHRoaXMuJCRjbGFzc05hbWVGaWx0ZXIgPSAoZXhwcmVzc2lvbiBpbnN0YW5j
ZW9mIFJlZ0V4cCkgPyBleHByZXNzaW9uIDogbnVsbDsKKyAgICAgIGlmICh0aGlzLiQkY2xhc3NO
YW1lRmlsdGVyKSB7CisgICAgICAgIHZhciByZXNlcnZlZFJlZ2V4ID0gbmV3IFJlZ0V4cCgiKFxc
cyt8XFwvKSIgKyBOR19BTklNQVRFX0NMQVNTTkFNRSArICIoXFxzK3xcXC8pIik7CisgICAgICAg
IGlmIChyZXNlcnZlZFJlZ2V4LnRlc3QodGhpcy4kJGNsYXNzTmFtZUZpbHRlci50b1N0cmluZygp
KSkgeworICAgICAgICAgIHRocm93ICRhbmltYXRlTWluRXJyKCdub25nY2xzJywnJGFuaW1hdGVQ
cm92aWRlci5jbGFzc05hbWVGaWx0ZXIocmVnZXgpIHByb2hpYml0cyBhY2NlcHRpbmcgYSByZWdl
eCB2YWx1ZSB3aGljaCBtYXRjaGVzL2NvbnRhaW5zIHRoZSAiezB9IiBDU1MgY2xhc3MuJywgTkdf
QU5JTUFURV9DTEFTU05BTUUpOworCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIHRoaXMuJCRjbGFzc05hbWVGaWx0ZXI7CisgIH07CisKKyAgdGhpcy4kZ2V0ID0gWyckJGFu
aW1hdGVRdWV1ZScsIGZ1bmN0aW9uKCQkYW5pbWF0ZVF1ZXVlKSB7CisgICAgZnVuY3Rpb24gZG9t
SW5zZXJ0KGVsZW1lbnQsIHBhcmVudEVsZW1lbnQsIGFmdGVyRWxlbWVudCkgeworICAgICAgLy8g
aWYgZm9yIHNvbWUgcmVhc29uIHRoZSBwcmV2aW91cyBlbGVtZW50IHdhcyByZW1vdmVkCisgICAg
ICAvLyBmcm9tIHRoZSBkb20gc29tZXRpbWUgYmVmb3JlIHRoaXMgY29kZSBydW5zIHRoZW4gbGV0
J3MKKyAgICAgIC8vIGp1c3Qgc3RpY2sgdG8gdXNpbmcgdGhlIHBhcmVudCBlbGVtZW50IGFzIHRo
ZSBhbmNob3IKKyAgICAgIGlmIChhZnRlckVsZW1lbnQpIHsKKyAgICAgICAgdmFyIGFmdGVyTm9k
ZSA9IGV4dHJhY3RFbGVtZW50Tm9kZShhZnRlckVsZW1lbnQpOworICAgICAgICBpZiAoYWZ0ZXJO
b2RlICYmICFhZnRlck5vZGUucGFyZW50Tm9kZSAmJiAhYWZ0ZXJOb2RlLnByZXZpb3VzRWxlbWVu
dFNpYmxpbmcpIHsKKyAgICAgICAgICBhZnRlckVsZW1lbnQgPSBudWxsOworICAgICAgICB9Cisg
ICAgICB9CisgICAgICBhZnRlckVsZW1lbnQgPyBhZnRlckVsZW1lbnQuYWZ0ZXIoZWxlbWVudCkg
OiBwYXJlbnRFbGVtZW50LnByZXBlbmQoZWxlbWVudCk7CisgICAgfQorCisgICAgLyoqCisgICAg
ICogQG5nZG9jIHNlcnZpY2UKKyAgICAgKiBAbmFtZSAkYW5pbWF0ZQorICAgICAqIEBkZXNjcmlw
dGlvbiBUaGUgJGFuaW1hdGUgc2VydmljZSBleHBvc2VzIGEgc2VyaWVzIG9mIERPTSB1dGlsaXR5
IG1ldGhvZHMgdGhhdCBwcm92aWRlIHN1cHBvcnQKKyAgICAgKiBmb3IgYW5pbWF0aW9uIGhvb2tz
LiBUaGUgZGVmYXVsdCBiZWhhdmlvciBpcyB0aGUgYXBwbGljYXRpb24gb2YgRE9NIG9wZXJhdGlv
bnMsIGhvd2V2ZXIsCisgICAgICogd2hlbiBhbiBhbmltYXRpb24gaXMgZGV0ZWN0ZWQgKGFuZCBh
bmltYXRpb25zIGFyZSBlbmFibGVkKSwgJGFuaW1hdGUgd2lsbCBkbyB0aGUgaGVhdnkgbGlmdGlu
ZworICAgICAqIHRvIGVuc3VyZSB0aGF0IGFuaW1hdGlvbiBydW5zIHdpdGggdGhlIHRyaWdnZXJl
ZCBET00gb3BlcmF0aW9uLgorICAgICAqCisgICAgICogQnkgZGVmYXVsdCAkYW5pbWF0ZSBkb2Vz
bid0IHRyaWdnZXIgYW4gYW5pbWF0aW9ucy4gVGhpcyBpcyBiZWNhdXNlIHRoZSBgbmdBbmltYXRl
YCBtb2R1bGUgaXNuJ3QKKyAgICAgKiBpbmNsdWRlZCBhbmQgb25seSB3aGVuIGl0IGlzIGFjdGl2
ZSB0aGVuIHRoZSBhbmltYXRpb24gaG9va3MgdGhhdCBgJGFuaW1hdGVgIHRyaWdnZXJzIHdpbGwg
YmUKKyAgICAgKiBmdW5jdGlvbmFsLiBPbmNlIGFjdGl2ZSB0aGVuIGFsbCBzdHJ1Y3R1cmFsIGBu
Zy1gIGRpcmVjdGl2ZXMgd2lsbCB0cmlnZ2VyIGFuaW1hdGlvbnMgYXMgdGhleSBwZXJmb3JtCisg
ICAgICogdGhlaXIgRE9NLXJlbGF0ZWQgb3BlcmF0aW9ucyAoZW50ZXIsIGxlYXZlIGFuZCBtb3Zl
KS4gT3RoZXIgZGlyZWN0aXZlcyBzdWNoIGFzIGBuZ0NsYXNzYCwKKyAgICAgKiBgbmdTaG93YCwg
YG5nSGlkZWAgYW5kIGBuZ01lc3NhZ2VzYCBhbHNvIHByb3ZpZGUgc3VwcG9ydCBmb3IgYW5pbWF0
aW9ucy4KKyAgICAgKgorICAgICAqIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhlYCRhbmltYXRl
YCBzZXJ2aWNlIGlzIGFsd2F5cyB1c2VkIHdoZW4gZXhlY3V0aW5nIERPTS1yZWxhdGVkIHByb2Nl
ZHVyZXMgd2l0aGluIGRpcmVjdGl2ZXMuCisgICAgICoKKyAgICAgKiBUbyBsZWFybiBtb3JlIGFi
b3V0IGVuYWJsaW5nIGFuaW1hdGlvbiBzdXBwb3J0LCBjbGljayBoZXJlIHRvIHZpc2l0IHRoZQor
ICAgICAqIHtAbGluayBuZ0FuaW1hdGUgbmdBbmltYXRlIG1vZHVsZSBwYWdlfS4KKyAgICAgKi8K
KyAgICByZXR1cm4geworICAgICAgLy8gd2UgZG9uJ3QgY2FsbCBpdCBkaXJlY3RseSBzaW5jZSBu
b24tZXhpc3RhbnQgYXJndW1lbnRzIG1heQorICAgICAgLy8gYmUgaW50ZXJwcmV0ZWQgYXMgbnVs
bCB3aXRoaW4gdGhlIHN1YiBlbmFibGVkIGZ1bmN0aW9uCisKKyAgICAgIC8qKgorICAgICAgICoK
KyAgICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgICAqIEBuYW1lICRhbmltYXRlI29uCisgICAg
ICAgKiBAa2luZCBmdW5jdGlvbgorICAgICAgICogQGRlc2NyaXB0aW9uIFNldHMgdXAgYW4gZXZl
bnQgbGlzdGVuZXIgdG8gZmlyZSB3aGVuZXZlciB0aGUgYW5pbWF0aW9uIGV2ZW50IChlbnRlciwg
bGVhdmUsIG1vdmUsIGV0Yy4uLikKKyAgICAgICAqICAgIGhhcyBmaXJlZCBvbiB0aGUgZ2l2ZW4g
ZWxlbWVudCBvciBhbW9uZyBhbnkgb2YgaXRzIGNoaWxkcmVuLiBPbmNlIHRoZSBsaXN0ZW5lciBp
cyBmaXJlZCwgdGhlIHByb3ZpZGVkIGNhbGxiYWNrCisgICAgICAgKiAgICBpcyBmaXJlZCB3aXRo
IHRoZSBmb2xsb3dpbmcgcGFyYW1zOgorICAgICAgICoKKyAgICAgICAqIGBgYGpzCisgICAgICAg
KiAkYW5pbWF0ZS5vbignZW50ZXInLCBjb250YWluZXIsCisgICAgICAgKiAgICBmdW5jdGlvbiBj
YWxsYmFjayhlbGVtZW50LCBwaGFzZSkgeworICAgICAgICogICAgICAvLyBjb29sIHdlIGRldGVj
dGVkIGFuIGVudGVyIGFuaW1hdGlvbiB3aXRoaW4gdGhlIGNvbnRhaW5lcgorICAgICAgICogICAg
fQorICAgICAgICogKTsKKyAgICAgICAqIGBgYAorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSB7
c3RyaW5nfSBldmVudCB0aGUgYW5pbWF0aW9uIGV2ZW50IHRoYXQgd2lsbCBiZSBjYXB0dXJlZCAo
ZS5nLiBlbnRlciwgbGVhdmUsIG1vdmUsIGFkZENsYXNzLCByZW1vdmVDbGFzcywgZXRjLi4uKQor
ICAgICAgICogQHBhcmFtIHtET01FbGVtZW50fSBjb250YWluZXIgdGhlIGNvbnRhaW5lciBlbGVt
ZW50IHRoYXQgd2lsbCBjYXB0dXJlIGVhY2ggb2YgdGhlIGFuaW1hdGlvbiBldmVudHMgdGhhdCBh
cmUgZmlyZWQgb24gaXRzZWxmCisgICAgICAgKiAgICAgYXMgd2VsbCBhcyBhbW9uZyBpdHMgY2hp
bGRyZW4KKyAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIHRoZSBjYWxsYmFjayBm
dW5jdGlvbiB0aGF0IHdpbGwgYmUgZmlyZWQgd2hlbiB0aGUgbGlzdGVuZXIgaXMgdHJpZ2dlcmVk
CisgICAgICAgKgorICAgICAgICogVGhlIGFyZ3VtZW50cyBwcmVzZW50IGluIHRoZSBjYWxsYmFj
ayBmdW5jdGlvbiBhcmU6CisgICAgICAgKiAqIGBlbGVtZW50YCAtIFRoZSBjYXB0dXJlZCBET00g
ZWxlbWVudCB0aGF0IHRoZSBhbmltYXRpb24gd2FzIGZpcmVkIG9uLgorICAgICAgICogKiBgcGhh
c2VgIC0gVGhlIHBoYXNlIG9mIHRoZSBhbmltYXRpb24uIFRoZSB0d28gcG9zc2libGUgcGhhc2Vz
IGFyZSAqKnN0YXJ0KiogKHdoZW4gdGhlIGFuaW1hdGlvbiBzdGFydHMpIGFuZCAqKmNsb3NlKiog
KHdoZW4gaXQgZW5kcykuCisgICAgICAgKi8KKyAgICAgIG9uOiAkJGFuaW1hdGVRdWV1ZS5vbiwK
KworICAgICAgLyoqCisgICAgICAgKgorICAgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAgICog
QG5hbWUgJGFuaW1hdGUjb2ZmCisgICAgICAgKiBAa2luZCBmdW5jdGlvbgorICAgICAgICogQGRl
c2NyaXB0aW9uIERlcmVnaXN0ZXJzIGFuIGV2ZW50IGxpc3RlbmVyIGJhc2VkIG9uIHRoZSBldmVu
dCB3aGljaCBoYXMgYmVlbiBhc3NvY2lhdGVkIHdpdGggdGhlIHByb3ZpZGVkIGVsZW1lbnQuIFRo
aXMgbWV0aG9kCisgICAgICAgKiBjYW4gYmUgdXNlZCBpbiB0aHJlZSBkaWZmZXJlbnQgd2F5cyBk
ZXBlbmRpbmcgb24gdGhlIGFyZ3VtZW50czoKKyAgICAgICAqCisgICAgICAgKiBgYGBqcworICAg
ICAgICogLy8gcmVtb3ZlIGFsbCB0aGUgYW5pbWF0aW9uIGV2ZW50IGxpc3RlbmVycyBsaXN0ZW5p
bmcgZm9yIGBlbnRlcmAKKyAgICAgICAqICRhbmltYXRlLm9mZignZW50ZXInKTsKKyAgICAgICAq
CisgICAgICAgKiAvLyByZW1vdmUgYWxsIHRoZSBhbmltYXRpb24gZXZlbnQgbGlzdGVuZXJzIGxp
c3RlbmluZyBmb3IgYGVudGVyYCBvbiB0aGUgZ2l2ZW4gZWxlbWVudCBhbmQgaXRzIGNoaWxkcmVu
CisgICAgICAgKiAkYW5pbWF0ZS5vZmYoJ2VudGVyJywgY29udGFpbmVyKTsKKyAgICAgICAqCisg
ICAgICAgKiAvLyByZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyIGZ1bmN0aW9uIHByb3ZpZGVkIGJ5
IGBsaXN0ZW5lckZuYCB0aGF0IGlzIHNldAorICAgICAgICogLy8gdG8gbGlzdGVuIGZvciBgZW50
ZXJgIG9uIHRoZSBnaXZlbiBgZWxlbWVudGAgYXMgd2VsbCBhcyBpdHMgY2hpbGRyZW4KKyAgICAg
ICAqICRhbmltYXRlLm9mZignZW50ZXInLCBjb250YWluZXIsIGNhbGxiYWNrKTsKKyAgICAgICAq
IGBgYAorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCB0aGUgYW5pbWF0
aW9uIGV2ZW50IChlLmcuIGVudGVyLCBsZWF2ZSwgbW92ZSwgYWRkQ2xhc3MsIHJlbW92ZUNsYXNz
LCBldGMuLi4pCisgICAgICAgKiBAcGFyYW0ge0RPTUVsZW1lbnQ9fSBjb250YWluZXIgdGhlIGNv
bnRhaW5lciBlbGVtZW50IHRoZSBldmVudCBsaXN0ZW5lciB3YXMgcGxhY2VkIG9uCisgICAgICAg
KiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQg
d2FzIHJlZ2lzdGVyZWQgYXMgdGhlIGxpc3RlbmVyCisgICAgICAgKi8KKyAgICAgIG9mZjogJCRh
bmltYXRlUXVldWUub2ZmLAorCisgICAgICAvKioKKyAgICAgICAqIEBuZ2RvYyBtZXRob2QKKyAg
ICAgICAqIEBuYW1lICRhbmltYXRlI3BpbgorICAgICAgICogQGtpbmQgZnVuY3Rpb24KKyAgICAg
ICAqIEBkZXNjcmlwdGlvbiBBc3NvY2lhdGVzIHRoZSBwcm92aWRlZCBlbGVtZW50IHdpdGggYSBo
b3N0IHBhcmVudCBlbGVtZW50IHRvIGFsbG93IHRoZSBlbGVtZW50IHRvIGJlIGFuaW1hdGVkIGV2
ZW4gaWYgaXQgZXhpc3RzCisgICAgICAgKiAgICBvdXRzaWRlIG9mIHRoZSBET00gc3RydWN0dXJl
IG9mIHRoZSBBbmd1bGFyIGFwcGxpY2F0aW9uLiBCeSBkb2luZyBzbywgYW55IGFuaW1hdGlvbiB0
cmlnZ2VyZWQgdmlhIGAkYW5pbWF0ZWAgY2FuIGJlIGlzc3VlZCBvbiB0aGUKKyAgICAgICAqICAg
IGVsZW1lbnQgZGVzcGl0ZSBiZWluZyBvdXRzaWRlIHRoZSByZWFsbSBvZiB0aGUgYXBwbGljYXRp
b24gb3Igd2l0aGluIGFub3RoZXIgYXBwbGljYXRpb24uIFNheSBmb3IgZXhhbXBsZSBpZiB0aGUg
YXBwbGljYXRpb24KKyAgICAgICAqICAgIHdhcyBib290c3RyYXBwZWQgb24gYW4gZWxlbWVudCB0
aGF0IGlzIHNvbWV3aGVyZSBpbnNpZGUgb2YgdGhlIGA8Ym9keT5gIHRhZywgYnV0IHdlIHdhbnRl
ZCB0byBhbGxvdyBmb3IgYW4gZWxlbWVudCB0byBiZSBzaXR1YXRlZAorICAgICAgICogICAgYXMg
YSBkaXJlY3QgY2hpbGQgb2YgYGRvY3VtZW50LmJvZHlgLCB0aGVuIHRoaXMgY2FuIGJlIGFjaGll
dmVkIGJ5IHBpbm5pbmcgdGhlIGVsZW1lbnQgdmlhIGAkYW5pbWF0ZS5waW4oZWxlbWVudClgLiBL
ZWVwIGluIG1pbmQKKyAgICAgICAqICAgIHRoYXQgY2FsbGluZyBgJGFuaW1hdGUucGluKGVsZW1l
bnQsIHBhcmVudEVsZW1lbnQpYCB3aWxsIG5vdCBhY3R1YWxseSBpbnNlcnQgaW50byB0aGUgRE9N
IGFueXdoZXJlOyBpdCB3aWxsIGp1c3QgY3JlYXRlIHRoZSBhc3NvY2lhdGlvbi4KKyAgICAgICAq
CisgICAgICAgKiAgICBOb3RlIHRoYXQgdGhpcyBmZWF0dXJlIGlzIG9ubHkgYWN0aXZlIHdoZW4g
dGhlIGBuZ0FuaW1hdGVgIG1vZHVsZSBpcyB1c2VkLgorICAgICAgICoKKyAgICAgICAqIEBwYXJh
bSB7RE9NRWxlbWVudH0gZWxlbWVudCB0aGUgZXh0ZXJuYWwgZWxlbWVudCB0aGF0IHdpbGwgYmUg
cGlubmVkCisgICAgICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IHBhcmVudEVsZW1lbnQgdGhlIGhv
c3QgcGFyZW50IGVsZW1lbnQgdGhhdCB3aWxsIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXh0ZXJu
YWwgZWxlbWVudAorICAgICAgICovCisgICAgICBwaW46ICQkYW5pbWF0ZVF1ZXVlLnBpbiwKKwor
ICAgICAgLyoqCisgICAgICAgKgorICAgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAgICogQG5h
bWUgJGFuaW1hdGUjZW5hYmxlZAorICAgICAgICogQGtpbmQgZnVuY3Rpb24KKyAgICAgICAqIEBk
ZXNjcmlwdGlvbiBVc2VkIHRvIGdldCBhbmQgc2V0IHdoZXRoZXIgYW5pbWF0aW9ucyBhcmUgZW5h
YmxlZCBvciBub3Qgb24gdGhlIGVudGlyZSBhcHBsaWNhdGlvbiBvciBvbiBhbiBlbGVtZW50IGFu
ZCBpdHMgY2hpbGRyZW4uIFRoaXMKKyAgICAgICAqIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgaW4g
Zm91ciB3YXlzOgorICAgICAgICoKKyAgICAgICAqIGBgYGpzCisgICAgICAgKiAvLyByZXR1cm5z
IHRydWUgb3IgZmFsc2UKKyAgICAgICAqICRhbmltYXRlLmVuYWJsZWQoKTsKKyAgICAgICAqCisg
ICAgICAgKiAvLyBjaGFuZ2VzIHRoZSBlbmFibGVkIHN0YXRlIGZvciBhbGwgYW5pbWF0aW9ucwor
ICAgICAgICogJGFuaW1hdGUuZW5hYmxlZChmYWxzZSk7CisgICAgICAgKiAkYW5pbWF0ZS5lbmFi
bGVkKHRydWUpOworICAgICAgICoKKyAgICAgICAqIC8vIHJldHVybnMgdHJ1ZSBvciBmYWxzZSBp
ZiBhbmltYXRpb25zIGFyZSBlbmFibGVkIGZvciBhbiBlbGVtZW50CisgICAgICAgKiAkYW5pbWF0
ZS5lbmFibGVkKGVsZW1lbnQpOworICAgICAgICoKKyAgICAgICAqIC8vIGNoYW5nZXMgdGhlIGVu
YWJsZWQgc3RhdGUgZm9yIGFuIGVsZW1lbnQgYW5kIGl0cyBjaGlsZHJlbgorICAgICAgICogJGFu
aW1hdGUuZW5hYmxlZChlbGVtZW50LCB0cnVlKTsKKyAgICAgICAqICRhbmltYXRlLmVuYWJsZWQo
ZWxlbWVudCwgZmFsc2UpOworICAgICAgICogYGBgCisgICAgICAgKgorICAgICAgICogQHBhcmFt
IHtET01FbGVtZW50PX0gZWxlbWVudCB0aGUgZWxlbWVudCB0aGF0IHdpbGwgYmUgY29uc2lkZXJl
ZCBmb3IgY2hlY2tpbmcvc2V0dGluZyB0aGUgZW5hYmxlZCBzdGF0ZQorICAgICAgICogQHBhcmFt
IHtib29sZWFuPX0gZW5hYmxlZCB3aGV0aGVyIG9yIG5vdCB0aGUgYW5pbWF0aW9ucyB3aWxsIGJl
IGVuYWJsZWQgZm9yIHRoZSBlbGVtZW50CisgICAgICAgKgorICAgICAgICogQHJldHVybiB7Ym9v
bGVhbn0gd2hldGhlciBvciBub3QgYW5pbWF0aW9ucyBhcmUgZW5hYmxlZAorICAgICAgICovCisg
ICAgICBlbmFibGVkOiAkJGFuaW1hdGVRdWV1ZS5lbmFibGVkLAorCisgICAgICAvKioKKyAgICAg
ICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgICAqIEBuYW1lICRhbmltYXRlI2NhbmNlbAorICAgICAg
ICogQGtpbmQgZnVuY3Rpb24KKyAgICAgICAqIEBkZXNjcmlwdGlvbiBDYW5jZWxzIHRoZSBwcm92
aWRlZCBhbmltYXRpb24uCisgICAgICAgKgorICAgICAgICogQHBhcmFtIHtQcm9taXNlfSBhbmlt
YXRpb25Qcm9taXNlIFRoZSBhbmltYXRpb24gcHJvbWlzZSB0aGF0IGlzIHJldHVybmVkIHdoZW4g
YW4gYW5pbWF0aW9uIGlzIHN0YXJ0ZWQuCisgICAgICAgKi8KKyAgICAgIGNhbmNlbDogZnVuY3Rp
b24ocnVubmVyKSB7CisgICAgICAgIHJ1bm5lci5lbmQgJiYgcnVubmVyLmVuZCgpOworICAgICAg
fSwKKworICAgICAgLyoqCisgICAgICAgKgorICAgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAg
ICogQG5hbWUgJGFuaW1hdGUjZW50ZXIKKyAgICAgICAqIEBraW5kIGZ1bmN0aW9uCisgICAgICAg
KiBAZGVzY3JpcHRpb24gSW5zZXJ0cyB0aGUgZWxlbWVudCBpbnRvIHRoZSBET00gZWl0aGVyIGFm
dGVyIHRoZSBgYWZ0ZXJgIGVsZW1lbnQgKGlmIHByb3ZpZGVkKSBvcgorICAgICAgICogICBhcyB0
aGUgZmlyc3QgY2hpbGQgd2l0aGluIHRoZSBgcGFyZW50YCBlbGVtZW50IGFuZCB0aGVuIHRyaWdn
ZXJzIGFuIGFuaW1hdGlvbi4KKyAgICAgICAqICAgQSBwcm9taXNlIGlzIHJldHVybmVkIHRoYXQg
d2lsbCBiZSByZXNvbHZlZCBkdXJpbmcgdGhlIG5leHQgZGlnZXN0IG9uY2UgdGhlIGFuaW1hdGlv
bgorICAgICAgICogICBoYXMgY29tcGxldGVkLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSB7
RE9NRWxlbWVudH0gZWxlbWVudCB0aGUgZWxlbWVudCB3aGljaCB3aWxsIGJlIGluc2VydGVkIGlu
dG8gdGhlIERPTQorICAgICAgICogQHBhcmFtIHtET01FbGVtZW50fSBwYXJlbnQgdGhlIHBhcmVu
dCBlbGVtZW50IHdoaWNoIHdpbGwgYXBwZW5kIHRoZSBlbGVtZW50IGFzCisgICAgICAgKiAgIGEg
Y2hpbGQgKHNvIGxvbmcgYXMgdGhlIGFmdGVyIGVsZW1lbnQgaXMgbm90IHByZXNlbnQpCisgICAg
ICAgKiBAcGFyYW0ge0RPTUVsZW1lbnQ9fSBhZnRlciB0aGUgc2libGluZyBlbGVtZW50IGFmdGVy
IHdoaWNoIHRoZSBlbGVtZW50IHdpbGwgYmUgYXBwZW5kZWQKKyAgICAgICAqIEBwYXJhbSB7b2Jq
ZWN0PX0gb3B0aW9ucyBhbiBvcHRpb25hbCBjb2xsZWN0aW9uIG9mIG9wdGlvbnMvc3R5bGVzIHRo
YXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50CisgICAgICAgKgorICAgICAgICogQHJl
dHVybiB7UHJvbWlzZX0gdGhlIGFuaW1hdGlvbiBjYWxsYmFjayBwcm9taXNlCisgICAgICAgKi8K
KyAgICAgIGVudGVyOiBmdW5jdGlvbihlbGVtZW50LCBwYXJlbnQsIGFmdGVyLCBvcHRpb25zKSB7
CisgICAgICAgIHBhcmVudCA9IHBhcmVudCAmJiBqcUxpdGUocGFyZW50KTsKKyAgICAgICAgYWZ0
ZXIgPSBhZnRlciAmJiBqcUxpdGUoYWZ0ZXIpOworICAgICAgICBwYXJlbnQgPSBwYXJlbnQgfHwg
YWZ0ZXIucGFyZW50KCk7CisgICAgICAgIGRvbUluc2VydChlbGVtZW50LCBwYXJlbnQsIGFmdGVy
KTsKKyAgICAgICAgcmV0dXJuICQkYW5pbWF0ZVF1ZXVlLnB1c2goZWxlbWVudCwgJ2VudGVyJywg
cHJlcGFyZUFuaW1hdGVPcHRpb25zKG9wdGlvbnMpKTsKKyAgICAgIH0sCisKKyAgICAgIC8qKgor
ICAgICAgICoKKyAgICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgICAqIEBuYW1lICRhbmltYXRl
I21vdmUKKyAgICAgICAqIEBraW5kIGZ1bmN0aW9uCisgICAgICAgKiBAZGVzY3JpcHRpb24gSW5z
ZXJ0cyAobW92ZXMpIHRoZSBlbGVtZW50IGludG8gaXRzIG5ldyBwb3NpdGlvbiBpbiB0aGUgRE9N
IGVpdGhlciBhZnRlcgorICAgICAgICogICB0aGUgYGFmdGVyYCBlbGVtZW50IChpZiBwcm92aWRl
ZCkgb3IgYXMgdGhlIGZpcnN0IGNoaWxkIHdpdGhpbiB0aGUgYHBhcmVudGAgZWxlbWVudAorICAg
ICAgICogICBhbmQgdGhlbiB0cmlnZ2VycyBhbiBhbmltYXRpb24uIEEgcHJvbWlzZSBpcyByZXR1
cm5lZCB0aGF0IHdpbGwgYmUgcmVzb2x2ZWQKKyAgICAgICAqICAgZHVyaW5nIHRoZSBuZXh0IGRp
Z2VzdCBvbmNlIHRoZSBhbmltYXRpb24gaGFzIGNvbXBsZXRlZC4KKyAgICAgICAqCisgICAgICAg
KiBAcGFyYW0ge0RPTUVsZW1lbnR9IGVsZW1lbnQgdGhlIGVsZW1lbnQgd2hpY2ggd2lsbCBiZSBt
b3ZlZCBpbnRvIHRoZSBuZXcgRE9NIHBvc2l0aW9uCisgICAgICAgKiBAcGFyYW0ge0RPTUVsZW1l
bnR9IHBhcmVudCB0aGUgcGFyZW50IGVsZW1lbnQgd2hpY2ggd2lsbCBhcHBlbmQgdGhlIGVsZW1l
bnQgYXMKKyAgICAgICAqICAgYSBjaGlsZCAoc28gbG9uZyBhcyB0aGUgYWZ0ZXIgZWxlbWVudCBp
cyBub3QgcHJlc2VudCkKKyAgICAgICAqIEBwYXJhbSB7RE9NRWxlbWVudD19IGFmdGVyIHRoZSBz
aWJsaW5nIGVsZW1lbnQgYWZ0ZXIgd2hpY2ggdGhlIGVsZW1lbnQgd2lsbCBiZSBhcHBlbmRlZAor
ICAgICAgICogQHBhcmFtIHtvYmplY3Q9fSBvcHRpb25zIGFuIG9wdGlvbmFsIGNvbGxlY3Rpb24g
b2Ygb3B0aW9ucy9zdHlsZXMgdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGVsZW1lbnQKKyAg
ICAgICAqCisgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlfSB0aGUgYW5pbWF0aW9uIGNhbGxiYWNr
IHByb21pc2UKKyAgICAgICAqLworICAgICAgbW92ZTogZnVuY3Rpb24oZWxlbWVudCwgcGFyZW50
LCBhZnRlciwgb3B0aW9ucykgeworICAgICAgICBwYXJlbnQgPSBwYXJlbnQgJiYganFMaXRlKHBh
cmVudCk7CisgICAgICAgIGFmdGVyID0gYWZ0ZXIgJiYganFMaXRlKGFmdGVyKTsKKyAgICAgICAg
cGFyZW50ID0gcGFyZW50IHx8IGFmdGVyLnBhcmVudCgpOworICAgICAgICBkb21JbnNlcnQoZWxl
bWVudCwgcGFyZW50LCBhZnRlcik7CisgICAgICAgIHJldHVybiAkJGFuaW1hdGVRdWV1ZS5wdXNo
KGVsZW1lbnQsICdtb3ZlJywgcHJlcGFyZUFuaW1hdGVPcHRpb25zKG9wdGlvbnMpKTsKKyAgICAg
IH0sCisKKyAgICAgIC8qKgorICAgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAgICogQG5hbWUg
JGFuaW1hdGUjbGVhdmUKKyAgICAgICAqIEBraW5kIGZ1bmN0aW9uCisgICAgICAgKiBAZGVzY3Jp
cHRpb24gVHJpZ2dlcnMgYW4gYW5pbWF0aW9uIGFuZCB0aGVuIHJlbW92ZXMgdGhlIGVsZW1lbnQg
ZnJvbSB0aGUgRE9NLgorICAgICAgICogV2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIGEgcHJv
bWlzZSBpcyByZXR1cm5lZCB0aGF0IHdpbGwgYmUgcmVzb2x2ZWQgZHVyaW5nIHRoZSBuZXh0Cisg
ICAgICAgKiBkaWdlc3Qgb25jZSB0aGUgYW5pbWF0aW9uIGhhcyBjb21wbGV0ZWQuCisgICAgICAg
KgorICAgICAgICogQHBhcmFtIHtET01FbGVtZW50fSBlbGVtZW50IHRoZSBlbGVtZW50IHdoaWNo
IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBET00KKyAgICAgICAqIEBwYXJhbSB7b2JqZWN0PX0g
b3B0aW9ucyBhbiBvcHRpb25hbCBjb2xsZWN0aW9uIG9mIG9wdGlvbnMvc3R5bGVzIHRoYXQgd2ls
bCBiZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50CisgICAgICAgKgorICAgICAgICogQHJldHVybiB7
UHJvbWlzZX0gdGhlIGFuaW1hdGlvbiBjYWxsYmFjayBwcm9taXNlCisgICAgICAgKi8KKyAgICAg
IGxlYXZlOiBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKSB7CisgICAgICAgIHJldHVybiAkJGFu
aW1hdGVRdWV1ZS5wdXNoKGVsZW1lbnQsICdsZWF2ZScsIHByZXBhcmVBbmltYXRlT3B0aW9ucyhv
cHRpb25zKSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgZWxlbWVudC5yZW1vdmUoKTsKKyAgICAg
ICAgfSk7CisgICAgICB9LAorCisgICAgICAvKioKKyAgICAgICAqIEBuZ2RvYyBtZXRob2QKKyAg
ICAgICAqIEBuYW1lICRhbmltYXRlI2FkZENsYXNzCisgICAgICAgKiBAa2luZCBmdW5jdGlvbgor
ICAgICAgICoKKyAgICAgICAqIEBkZXNjcmlwdGlvbiBUcmlnZ2VycyBhbiBhZGRDbGFzcyBhbmlt
YXRpb24gc3Vycm91bmRpbmcgdGhlIGFkZGl0aW9uIG9mIHRoZSBwcm92aWRlZCBDU1MgY2xhc3Mo
ZXMpLiBVcG9uCisgICAgICAgKiAgIGV4ZWN1dGlvbiwgdGhlIGFkZENsYXNzIG9wZXJhdGlvbiB3
aWxsIG9ubHkgYmUgaGFuZGxlZCBhZnRlciB0aGUgbmV4dCBkaWdlc3QgYW5kIGl0IHdpbGwgbm90
IHRyaWdnZXIgYW4KKyAgICAgICAqICAgYW5pbWF0aW9uIGlmIGVsZW1lbnQgYWxyZWFkeSBjb250
YWlucyB0aGUgQ1NTIGNsYXNzIG9yIGlmIHRoZSBjbGFzcyBpcyByZW1vdmVkIGF0IGEgbGF0ZXIg
c3RlcC4KKyAgICAgICAqICAgTm90ZSB0aGF0IGNsYXNzLWJhc2VkIGFuaW1hdGlvbnMgYXJlIHRy
ZWF0ZWQgZGlmZmVyZW50bHkgY29tcGFyZWQgdG8gc3RydWN0dXJhbCBhbmltYXRpb25zCisgICAg
ICAgKiAgIChsaWtlIGVudGVyLCBtb3ZlIGFuZCBsZWF2ZSkgc2luY2UgdGhlIENTUyBjbGFzc2Vz
IG1heSBiZSBhZGRlZC9yZW1vdmVkIGF0IGRpZmZlcmVudCBwb2ludHMKKyAgICAgICAqICAgZGVw
ZW5kaW5nIGlmIENTUyBvciBKYXZhU2NyaXB0IGFuaW1hdGlvbnMgYXJlIHVzZWQuCisgICAgICAg
KgorICAgICAgICogQHBhcmFtIHtET01FbGVtZW50fSBlbGVtZW50IHRoZSBlbGVtZW50IHdoaWNo
IHRoZSBDU1MgY2xhc3NlcyB3aWxsIGJlIGFwcGxpZWQgdG8KKyAgICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSBjbGFzc05hbWUgdGhlIENTUyBjbGFzcyhlcykgdGhhdCB3aWxsIGJlIGFkZGVkIChtdWx0
aXBsZSBjbGFzc2VzIGFyZSBzZXBhcmF0ZWQgdmlhIHNwYWNlcykKKyAgICAgICAqIEBwYXJhbSB7
b2JqZWN0PX0gb3B0aW9ucyBhbiBvcHRpb25hbCBjb2xsZWN0aW9uIG9mIG9wdGlvbnMvc3R5bGVz
IHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50CisgICAgICAgKgorICAgICAgICog
QHJldHVybiB7UHJvbWlzZX0gdGhlIGFuaW1hdGlvbiBjYWxsYmFjayBwcm9taXNlCisgICAgICAg
Ki8KKyAgICAgIGFkZENsYXNzOiBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUsIG9wdGlvbnMp
IHsKKyAgICAgICAgb3B0aW9ucyA9IHByZXBhcmVBbmltYXRlT3B0aW9ucyhvcHRpb25zKTsKKyAg
ICAgICAgb3B0aW9ucy5hZGRDbGFzcyA9IG1lcmdlQ2xhc3NlcyhvcHRpb25zLmFkZGNsYXNzLCBj
bGFzc05hbWUpOworICAgICAgICByZXR1cm4gJCRhbmltYXRlUXVldWUucHVzaChlbGVtZW50LCAn
YWRkQ2xhc3MnLCBvcHRpb25zKTsKKyAgICAgIH0sCisKKyAgICAgIC8qKgorICAgICAgICogQG5n
ZG9jIG1ldGhvZAorICAgICAgICogQG5hbWUgJGFuaW1hdGUjcmVtb3ZlQ2xhc3MKKyAgICAgICAq
IEBraW5kIGZ1bmN0aW9uCisgICAgICAgKgorICAgICAgICogQGRlc2NyaXB0aW9uIFRyaWdnZXJz
IGEgcmVtb3ZlQ2xhc3MgYW5pbWF0aW9uIHN1cnJvdW5kaW5nIHRoZSByZW1vdmFsIG9mIHRoZSBw
cm92aWRlZCBDU1MgY2xhc3MoZXMpLiBVcG9uCisgICAgICAgKiAgIGV4ZWN1dGlvbiwgdGhlIHJl
bW92ZUNsYXNzIG9wZXJhdGlvbiB3aWxsIG9ubHkgYmUgaGFuZGxlZCBhZnRlciB0aGUgbmV4dCBk
aWdlc3QgYW5kIGl0IHdpbGwgbm90IHRyaWdnZXIgYW4KKyAgICAgICAqICAgYW5pbWF0aW9uIGlm
IGVsZW1lbnQgZG9lcyBub3QgY29udGFpbiB0aGUgQ1NTIGNsYXNzIG9yIGlmIHRoZSBjbGFzcyBp
cyBhZGRlZCBhdCBhIGxhdGVyIHN0ZXAuCisgICAgICAgKiAgIE5vdGUgdGhhdCBjbGFzcy1iYXNl
ZCBhbmltYXRpb25zIGFyZSB0cmVhdGVkIGRpZmZlcmVudGx5IGNvbXBhcmVkIHRvIHN0cnVjdHVy
YWwgYW5pbWF0aW9ucworICAgICAgICogICAobGlrZSBlbnRlciwgbW92ZSBhbmQgbGVhdmUpIHNp
bmNlIHRoZSBDU1MgY2xhc3NlcyBtYXkgYmUgYWRkZWQvcmVtb3ZlZCBhdCBkaWZmZXJlbnQgcG9p
bnRzCisgICAgICAgKiAgIGRlcGVuZGluZyBpZiBDU1Mgb3IgSmF2YVNjcmlwdCBhbmltYXRpb25z
IGFyZSB1c2VkLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gZWxlbWVu
dCB0aGUgZWxlbWVudCB3aGljaCB0aGUgQ1NTIGNsYXNzZXMgd2lsbCBiZSBhcHBsaWVkIHRvCisg
ICAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lIHRoZSBDU1MgY2xhc3MoZXMpIHRoYXQg
d2lsbCBiZSByZW1vdmVkIChtdWx0aXBsZSBjbGFzc2VzIGFyZSBzZXBhcmF0ZWQgdmlhIHNwYWNl
cykKKyAgICAgICAqIEBwYXJhbSB7b2JqZWN0PX0gb3B0aW9ucyBhbiBvcHRpb25hbCBjb2xsZWN0
aW9uIG9mIG9wdGlvbnMvc3R5bGVzIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50
CisgICAgICAgKgorICAgICAgICogQHJldHVybiB7UHJvbWlzZX0gdGhlIGFuaW1hdGlvbiBjYWxs
YmFjayBwcm9taXNlCisgICAgICAgKi8KKyAgICAgIHJlbW92ZUNsYXNzOiBmdW5jdGlvbihlbGVt
ZW50LCBjbGFzc05hbWUsIG9wdGlvbnMpIHsKKyAgICAgICAgb3B0aW9ucyA9IHByZXBhcmVBbmlt
YXRlT3B0aW9ucyhvcHRpb25zKTsKKyAgICAgICAgb3B0aW9ucy5yZW1vdmVDbGFzcyA9IG1lcmdl
Q2xhc3NlcyhvcHRpb25zLnJlbW92ZUNsYXNzLCBjbGFzc05hbWUpOworICAgICAgICByZXR1cm4g
JCRhbmltYXRlUXVldWUucHVzaChlbGVtZW50LCAncmVtb3ZlQ2xhc3MnLCBvcHRpb25zKTsKKyAg
ICAgIH0sCisKKyAgICAgIC8qKgorICAgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAgICogQG5h
bWUgJGFuaW1hdGUjc2V0Q2xhc3MKKyAgICAgICAqIEBraW5kIGZ1bmN0aW9uCisgICAgICAgKgor
ICAgICAgICogQGRlc2NyaXB0aW9uIFBlcmZvcm1zIGJvdGggdGhlIGFkZGl0aW9uIGFuZCByZW1v
dmFsIG9mIGEgQ1NTIGNsYXNzZXMgb24gYW4gZWxlbWVudCBhbmQgKGR1cmluZyB0aGUgcHJvY2Vz
cykKKyAgICAgICAqICAgIHRyaWdnZXJzIGFuIGFuaW1hdGlvbiBzdXJyb3VuZGluZyB0aGUgY2xh
c3MgYWRkaXRpb24vcmVtb3ZhbC4gTXVjaCBsaWtlIGAkYW5pbWF0ZS5hZGRDbGFzc2AgYW5kCisg
ICAgICAgKiAgICBgJGFuaW1hdGUucmVtb3ZlQ2xhc3NgLCBgc2V0Q2xhc3NgIHdpbGwgb25seSBl
dmFsdWF0ZSB0aGUgY2xhc3NlcyBiZWluZyBhZGRlZC9yZW1vdmVkIG9uY2UgYSBkaWdlc3QgaGFz
CisgICAgICAgKiAgICBwYXNzZWQuIE5vdGUgdGhhdCBjbGFzcy1iYXNlZCBhbmltYXRpb25zIGFy
ZSB0cmVhdGVkIGRpZmZlcmVudGx5IGNvbXBhcmVkIHRvIHN0cnVjdHVyYWwgYW5pbWF0aW9ucwor
ICAgICAgICogICAgKGxpa2UgZW50ZXIsIG1vdmUgYW5kIGxlYXZlKSBzaW5jZSB0aGUgQ1NTIGNs
YXNzZXMgbWF5IGJlIGFkZGVkL3JlbW92ZWQgYXQgZGlmZmVyZW50IHBvaW50cworICAgICAgICog
ICAgZGVwZW5kaW5nIGlmIENTUyBvciBKYXZhU2NyaXB0IGFuaW1hdGlvbnMgYXJlIHVzZWQuCisg
ICAgICAgKgorICAgICAgICogQHBhcmFtIHtET01FbGVtZW50fSBlbGVtZW50IHRoZSBlbGVtZW50
IHdoaWNoIHRoZSBDU1MgY2xhc3NlcyB3aWxsIGJlIGFwcGxpZWQgdG8KKyAgICAgICAqIEBwYXJh
bSB7c3RyaW5nfSBhZGQgdGhlIENTUyBjbGFzcyhlcykgdGhhdCB3aWxsIGJlIGFkZGVkIChtdWx0
aXBsZSBjbGFzc2VzIGFyZSBzZXBhcmF0ZWQgdmlhIHNwYWNlcykKKyAgICAgICAqIEBwYXJhbSB7
c3RyaW5nfSByZW1vdmUgdGhlIENTUyBjbGFzcyhlcykgdGhhdCB3aWxsIGJlIHJlbW92ZWQgKG11
bHRpcGxlIGNsYXNzZXMgYXJlIHNlcGFyYXRlZCB2aWEgc3BhY2VzKQorICAgICAgICogQHBhcmFt
IHtvYmplY3Q9fSBvcHRpb25zIGFuIG9wdGlvbmFsIGNvbGxlY3Rpb24gb2Ygb3B0aW9ucy9zdHls
ZXMgdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGVsZW1lbnQKKyAgICAgICAqCisgICAgICAg
KiBAcmV0dXJuIHtQcm9taXNlfSB0aGUgYW5pbWF0aW9uIGNhbGxiYWNrIHByb21pc2UKKyAgICAg
ICAqLworICAgICAgc2V0Q2xhc3M6IGZ1bmN0aW9uKGVsZW1lbnQsIGFkZCwgcmVtb3ZlLCBvcHRp
b25zKSB7CisgICAgICAgIG9wdGlvbnMgPSBwcmVwYXJlQW5pbWF0ZU9wdGlvbnMob3B0aW9ucyk7
CisgICAgICAgIG9wdGlvbnMuYWRkQ2xhc3MgPSBtZXJnZUNsYXNzZXMob3B0aW9ucy5hZGRDbGFz
cywgYWRkKTsKKyAgICAgICAgb3B0aW9ucy5yZW1vdmVDbGFzcyA9IG1lcmdlQ2xhc3NlcyhvcHRp
b25zLnJlbW92ZUNsYXNzLCByZW1vdmUpOworICAgICAgICByZXR1cm4gJCRhbmltYXRlUXVldWUu
cHVzaChlbGVtZW50LCAnc2V0Q2xhc3MnLCBvcHRpb25zKTsKKyAgICAgIH0sCisKKyAgICAgIC8q
KgorICAgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAgICogQG5hbWUgJGFuaW1hdGUjYW5pbWF0
ZQorICAgICAgICogQGtpbmQgZnVuY3Rpb24KKyAgICAgICAqCisgICAgICAgKiBAZGVzY3JpcHRp
b24gUGVyZm9ybXMgYW4gaW5saW5lIGFuaW1hdGlvbiBvbiB0aGUgZWxlbWVudCB3aGljaCBhcHBs
aWVzIHRoZSBwcm92aWRlZCB0byBhbmQgZnJvbSBDU1Mgc3R5bGVzIHRvIHRoZSBlbGVtZW50Lgor
ICAgICAgICogSWYgYW55IGRldGVjdGVkIENTUyB0cmFuc2l0aW9uLCBrZXlmcmFtZSBvciBKYXZh
U2NyaXB0IG1hdGNoZXMgdGhlIHByb3ZpZGVkIGNsYXNzTmFtZSB2YWx1ZSB0aGVuIHRoZSBhbmlt
YXRpb24gd2lsbCB0YWtlCisgICAgICAgKiBvbiB0aGUgcHJvdmlkZWQgc3R5bGVzLiBGb3IgZXhh
bXBsZSwgaWYgYSB0cmFuc2l0aW9uIGFuaW1hdGlvbiBpcyBzZXQgZm9yIHRoZSBnaXZlbiBjbGFz
c05hbWUgdGhlbiB0aGUgcHJvdmlkZWQgZnJvbSBhbmQKKyAgICAgICAqIHRvIHN0eWxlcyB3aWxs
IGJlIGFwcGxpZWQgYWxvbmdzaWRlIHRoZSBnaXZlbiB0cmFuc2l0aW9uLiBJZiBhIEphdmFTY3Jp
cHQgYW5pbWF0aW9uIGlzIGRldGVjdGVkIHRoZW4gdGhlIHByb3ZpZGVkIHN0eWxlcworICAgICAg
ICogd2lsbCBiZSBnaXZlbiBpbiBhcyBmdW5jdGlvbiBwYXJhbXRlcnMgaW50byB0aGUgYGFuaW1h
dGVgIG1ldGhvZCAob3IgYXMgYXBhcnQgb2YgdGhlIGBvcHRpb25zYCBwYXJhbWV0ZXIpLgorICAg
ICAgICoKKyAgICAgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gZWxlbWVudCB0aGUgZWxlbWVudCB3
aGljaCB0aGUgQ1NTIHN0eWxlcyB3aWxsIGJlIGFwcGxpZWQgdG8KKyAgICAgICAqIEBwYXJhbSB7
b2JqZWN0fSBmcm9tIHRoZSBmcm9tIChzdGFydGluZykgQ1NTIHN0eWxlcyB0aGF0IHdpbGwgYmUg
YXBwbGllZCB0byB0aGUgZWxlbWVudCBhbmQgYWNyb3NzIHRoZSBhbmltYXRpb24uCisgICAgICAg
KiBAcGFyYW0ge29iamVjdH0gdG8gdGhlIHRvIChkZXN0aW5hdGlvbikgQ1NTIHN0eWxlcyB0aGF0
IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgZWxlbWVudCBhbmQgYWNyb3NzIHRoZSBhbmltYXRpb24u
CisgICAgICAgKiBAcGFyYW0ge3N0cmluZz19IGNsYXNzTmFtZSBhbiBvcHRpb25hbCBDU1MgY2xh
c3MgdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGVsZW1lbnQgZm9yIHRoZSBkdXJhdGlvbiBv
ZiB0aGUgYW5pbWF0aW9uLiBJZgorICAgICAgICogICAgdGhpcyB2YWx1ZSBpcyBsZWZ0IGFzIGVt
cHR5IHRoZW4gYSBDU1MgY2xhc3Mgb2YgYG5nLWlubGluZS1hbmltYXRlYCB3aWxsIGJlIGFwcGxp
ZWQgdG8gdGhlIGVsZW1lbnQuCisgICAgICAgKiAgICAoTm90ZSB0aGF0IGlmIG5vIGFuaW1hdGlv
biBpcyBkZXRlY3RlZCB0aGVuIHRoaXMgdmFsdWUgd2lsbCBub3QgYmUgYXBwcGxpZWQgdG8gdGhl
IGVsZW1lbnQuKQorICAgICAgICogQHBhcmFtIHtvYmplY3Q9fSBvcHRpb25zIGFuIG9wdGlvbmFs
IGNvbGxlY3Rpb24gb2Ygb3B0aW9ucy9zdHlsZXMgdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhl
IGVsZW1lbnQKKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlfSB0aGUgYW5pbWF0
aW9uIGNhbGxiYWNrIHByb21pc2UKKyAgICAgICAqLworICAgICAgYW5pbWF0ZTogZnVuY3Rpb24o
ZWxlbWVudCwgZnJvbSwgdG8sIGNsYXNzTmFtZSwgb3B0aW9ucykgeworICAgICAgICBvcHRpb25z
ID0gcHJlcGFyZUFuaW1hdGVPcHRpb25zKG9wdGlvbnMpOworICAgICAgICBvcHRpb25zLmZyb20g
PSBvcHRpb25zLmZyb20gPyBleHRlbmQob3B0aW9ucy5mcm9tLCBmcm9tKSA6IGZyb207CisgICAg
ICAgIG9wdGlvbnMudG8gICA9IG9wdGlvbnMudG8gICA/IGV4dGVuZChvcHRpb25zLnRvLCB0bykg
ICAgIDogdG87CisKKyAgICAgICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lIHx8ICduZy1pbmxpbmUt
YW5pbWF0ZSc7CisgICAgICAgIG9wdGlvbnMudGVtcENsYXNzZXMgPSBtZXJnZUNsYXNzZXMob3B0
aW9ucy50ZW1wQ2xhc3NlcywgY2xhc3NOYW1lKTsKKyAgICAgICAgcmV0dXJuICQkYW5pbWF0ZVF1
ZXVlLnB1c2goZWxlbWVudCwgJ2FuaW1hdGUnLCBvcHRpb25zKTsKKyAgICAgIH0KKyAgICB9Owor
ICB9XTsKK31dOworCitmdW5jdGlvbiAkJEFzeW5jQ2FsbGJhY2tQcm92aWRlcigpIHsKKyAgdGhp
cy4kZ2V0ID0gWyckJHJBRicsICckdGltZW91dCcsIGZ1bmN0aW9uKCQkckFGLCAkdGltZW91dCkg
eworICAgIHJldHVybiAkJHJBRi5zdXBwb3J0ZWQKKyAgICAgID8gZnVuY3Rpb24oZm4pIHsgcmV0
dXJuICQkckFGKGZuKTsgfQorICAgICAgOiBmdW5jdGlvbihmbikgeworICAgICAgICByZXR1cm4g
JHRpbWVvdXQoZm4sIDAsIGZhbHNlKTsKKyAgICAgIH07CisgIH1dOworfQorCisvKiBnbG9iYWwg
c3RyaXBIYXNoOiB0cnVlICovCisKKy8qKgorICogISBUaGlzIGlzIGEgcHJpdmF0ZSB1bmRvY3Vt
ZW50ZWQgc2VydmljZSAhCisgKgorICogQG5hbWUgJGJyb3dzZXIKKyAqIEByZXF1aXJlcyAkbG9n
CisgKiBAZGVzY3JpcHRpb24KKyAqIFRoaXMgb2JqZWN0IGhhcyB0d28gZ29hbHM6CisgKgorICog
LSBoaWRlIGFsbCB0aGUgZ2xvYmFsIHN0YXRlIGluIHRoZSBicm93c2VyIGNhdXNlZCBieSB0aGUg
d2luZG93IG9iamVjdAorICogLSBhYnN0cmFjdCBhd2F5IGFsbCB0aGUgYnJvd3NlciBzcGVjaWZp
YyBmZWF0dXJlcyBhbmQgaW5jb25zaXN0ZW5jaWVzCisgKgorICogRm9yIHRlc3RzIHdlIHByb3Zp
ZGUge0BsaW5rIG5nTW9jay4kYnJvd3NlciBtb2NrIGltcGxlbWVudGF0aW9ufSBvZiB0aGUgYCRi
cm93c2VyYAorICogc2VydmljZSwgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGNvbnZlbmllbnQgdGVz
dGluZyBvZiB0aGUgYXBwbGljYXRpb24gd2l0aG91dCB0aGUgaW50ZXJhY3Rpb24gd2l0aAorICog
dGhlIHJlYWwgYnJvd3NlciBhcGlzLgorICovCisvKioKKyAqIEBwYXJhbSB7b2JqZWN0fSB3aW5k
b3cgVGhlIGdsb2JhbCB3aW5kb3cgb2JqZWN0LgorICogQHBhcmFtIHtvYmplY3R9IGRvY3VtZW50
IGpRdWVyeSB3cmFwcGVkIGRvY3VtZW50LgorICogQHBhcmFtIHtvYmplY3R9ICRsb2cgd2luZG93
LmNvbnNvbGUgb3IgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUgaW50ZXJmYWNlLgorICogQHBhcmFt
IHtvYmplY3R9ICRzbmlmZmVyICRzbmlmZmVyIHNlcnZpY2UKKyAqLworZnVuY3Rpb24gQnJvd3Nl
cih3aW5kb3csIGRvY3VtZW50LCAkbG9nLCAkc25pZmZlcikgeworICB2YXIgc2VsZiA9IHRoaXMs
CisgICAgICByYXdEb2N1bWVudCA9IGRvY3VtZW50WzBdLAorICAgICAgbG9jYXRpb24gPSB3aW5k
b3cubG9jYXRpb24sCisgICAgICBoaXN0b3J5ID0gd2luZG93Lmhpc3RvcnksCisgICAgICBzZXRU
aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQsCisgICAgICBjbGVhclRpbWVvdXQgPSB3aW5kb3cu
Y2xlYXJUaW1lb3V0LAorICAgICAgcGVuZGluZ0RlZmVySWRzID0ge307CisKKyAgc2VsZi5pc01v
Y2sgPSBmYWxzZTsKKworICB2YXIgb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQgPSAwOworICB2YXIg
b3V0c3RhbmRpbmdSZXF1ZXN0Q2FsbGJhY2tzID0gW107CisKKyAgLy8gVE9ETyh2b2p0YSk6IHJl
bW92ZSB0aGlzIHRlbXBvcmFyeSBhcGkKKyAgc2VsZi4kJGNvbXBsZXRlT3V0c3RhbmRpbmdSZXF1
ZXN0ID0gY29tcGxldGVPdXRzdGFuZGluZ1JlcXVlc3Q7CisgIHNlbGYuJCRpbmNPdXRzdGFuZGlu
Z1JlcXVlc3RDb3VudCA9IGZ1bmN0aW9uKCkgeyBvdXRzdGFuZGluZ1JlcXVlc3RDb3VudCsrOyB9
OworCisgIC8qKgorICAgKiBFeGVjdXRlcyB0aGUgYGZuYCBmdW5jdGlvbihzdXBwb3J0cyBjdXJy
eWluZykgYW5kIGRlY3JlbWVudHMgdGhlIGBvdXRzdGFuZGluZ1JlcXVlc3RDYWxsYmFja3NgCisg
ICAqIGNvdW50ZXIuIElmIHRoZSBjb3VudGVyIHJlYWNoZXMgMCwgYWxsIHRoZSBgb3V0c3RhbmRp
bmdSZXF1ZXN0Q2FsbGJhY2tzYCBhcmUgZXhlY3V0ZWQuCisgICAqLworICBmdW5jdGlvbiBjb21w
bGV0ZU91dHN0YW5kaW5nUmVxdWVzdChmbikgeworICAgIHRyeSB7CisgICAgICBmbi5hcHBseShu
dWxsLCBzbGljZUFyZ3MoYXJndW1lbnRzLCAxKSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgIG91
dHN0YW5kaW5nUmVxdWVzdENvdW50LS07CisgICAgICBpZiAob3V0c3RhbmRpbmdSZXF1ZXN0Q291
bnQgPT09IDApIHsKKyAgICAgICAgd2hpbGUgKG91dHN0YW5kaW5nUmVxdWVzdENhbGxiYWNrcy5s
ZW5ndGgpIHsKKyAgICAgICAgICB0cnkgeworICAgICAgICAgICAgb3V0c3RhbmRpbmdSZXF1ZXN0
Q2FsbGJhY2tzLnBvcCgpKCk7CisgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAg
JGxvZy5lcnJvcihlKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9Cisg
IH0KKworICBmdW5jdGlvbiBnZXRIYXNoKHVybCkgeworICAgIHZhciBpbmRleCA9IHVybC5pbmRl
eE9mKCcjJyk7CisgICAgcmV0dXJuIGluZGV4ID09PSAtMSA/ICcnIDogdXJsLnN1YnN0cihpbmRl
eCk7CisgIH0KKworICAvKioKKyAgICogQHByaXZhdGUKKyAgICogTm90ZTogdGhpcyBtZXRob2Qg
aXMgdXNlZCBvbmx5IGJ5IHNjZW5hcmlvIHJ1bm5lcgorICAgKiBUT0RPKHZvanRhKTogcHJlZml4
IHRoaXMgbWV0aG9kIHdpdGggJCQgPworICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCl9IGNhbGxiYWNr
IEZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiBubyBvdXRzdGFuZGluZyByZXF1ZXN0
CisgICAqLworICBzZWxmLm5vdGlmeVdoZW5Ob091dHN0YW5kaW5nUmVxdWVzdHMgPSBmdW5jdGlv
bihjYWxsYmFjaykgeworICAgIGlmIChvdXRzdGFuZGluZ1JlcXVlc3RDb3VudCA9PT0gMCkgewor
ICAgICAgY2FsbGJhY2soKTsKKyAgICB9IGVsc2UgeworICAgICAgb3V0c3RhbmRpbmdSZXF1ZXN0
Q2FsbGJhY2tzLnB1c2goY2FsbGJhY2spOworICAgIH0KKyAgfTsKKworICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAvLyBV
UkwgQVBJCisgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCisKKyAgdmFyIGNhY2hlZFN0YXRlLCBsYXN0SGlzdG9yeVN0YXRlLAor
ICAgICAgbGFzdEJyb3dzZXJVcmwgPSBsb2NhdGlvbi5ocmVmLAorICAgICAgYmFzZUVsZW1lbnQg
PSBkb2N1bWVudC5maW5kKCdiYXNlJyksCisgICAgICByZWxvYWRMb2NhdGlvbiA9IG51bGw7CisK
KyAgY2FjaGVTdGF0ZSgpOworICBsYXN0SGlzdG9yeVN0YXRlID0gY2FjaGVkU3RhdGU7CisKKyAg
LyoqCisgICAqIEBuYW1lICRicm93c2VyI3VybAorICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAg
ICogR0VUVEVSOgorICAgKiBXaXRob3V0IGFueSBhcmd1bWVudCwgdGhpcyBtZXRob2QganVzdCBy
ZXR1cm5zIGN1cnJlbnQgdmFsdWUgb2YgbG9jYXRpb24uaHJlZi4KKyAgICoKKyAgICogU0VUVEVS
OgorICAgKiBXaXRoIGF0IGxlYXN0IG9uZSBhcmd1bWVudCwgdGhpcyBtZXRob2Qgc2V0cyB1cmwg
dG8gbmV3IHZhbHVlLgorICAgKiBJZiBodG1sNSBoaXN0b3J5IGFwaSBzdXBwb3J0ZWQsIHB1c2hT
dGF0ZS9yZXBsYWNlU3RhdGUgaXMgdXNlZCwgb3RoZXJ3aXNlCisgICAqIGxvY2F0aW9uLmhyZWYv
bG9jYXRpb24ucmVwbGFjZSBpcyB1c2VkLgorICAgKiBSZXR1cm5zIGl0cyBvd24gaW5zdGFuY2Ug
dG8gYWxsb3cgY2hhaW5pbmcKKyAgICoKKyAgICogTk9URTogdGhpcyBhcGkgaXMgaW50ZW5kZWQg
Zm9yIHVzZSBvbmx5IGJ5IHRoZSAkbG9jYXRpb24gc2VydmljZS4gUGxlYXNlIHVzZSB0aGUKKyAg
ICoge0BsaW5rIG5nLiRsb2NhdGlvbiAkbG9jYXRpb24gc2VydmljZX0gdG8gY2hhbmdlIHVybC4K
KyAgICoKKyAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBOZXcgdXJsICh3aGVuIHVzZWQgYXMgc2V0
dGVyKQorICAgKiBAcGFyYW0ge2Jvb2xlYW49fSByZXBsYWNlIFNob3VsZCBuZXcgdXJsIHJlcGxh
Y2UgY3VycmVudCBoaXN0b3J5IHJlY29yZD8KKyAgICogQHBhcmFtIHtvYmplY3Q9fSBzdGF0ZSBv
YmplY3QgdG8gdXNlIHdpdGggcHVzaFN0YXRlL3JlcGxhY2VTdGF0ZQorICAgKi8KKyAgc2VsZi51
cmwgPSBmdW5jdGlvbih1cmwsIHJlcGxhY2UsIHN0YXRlKSB7CisgICAgLy8gSW4gbW9kZXJuIGJy
b3dzZXJzIGBoaXN0b3J5LnN0YXRlYCBpcyBgbnVsbGAgYnkgZGVmYXVsdDsgdHJlYXRpbmcgaXQg
c2VwYXJhdGVseQorICAgIC8vIGZyb20gYHVuZGVmaW5lZGAgd291bGQgY2F1c2UgYCRicm93c2Vy
LnVybCgnL2ZvbycpYCB0byBjaGFuZ2UgYGhpc3Rvcnkuc3RhdGVgCisgICAgLy8gdG8gdW5kZWZp
bmVkIHZpYSBgcHVzaFN0YXRlYC4gSW5zdGVhZCwgbGV0J3MgY2hhbmdlIGB1bmRlZmluZWRgIHRv
IGBudWxsYCBoZXJlLgorICAgIGlmIChpc1VuZGVmaW5lZChzdGF0ZSkpIHsKKyAgICAgIHN0YXRl
ID0gbnVsbDsKKyAgICB9CisKKyAgICAvLyBBbmRyb2lkIEJyb3dzZXIgQkZDYWNoZSBjYXVzZXMg
bG9jYXRpb24sIGhpc3RvcnkgcmVmZXJlbmNlIHRvIGJlY29tZSBzdGFsZS4KKyAgICBpZiAobG9j
YXRpb24gIT09IHdpbmRvdy5sb2NhdGlvbikgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247Cisg
ICAgaWYgKGhpc3RvcnkgIT09IHdpbmRvdy5oaXN0b3J5KSBoaXN0b3J5ID0gd2luZG93Lmhpc3Rv
cnk7CisKKyAgICAvLyBzZXR0ZXIKKyAgICBpZiAodXJsKSB7CisgICAgICB2YXIgc2FtZVN0YXRl
ID0gbGFzdEhpc3RvcnlTdGF0ZSA9PT0gc3RhdGU7CisKKyAgICAgIC8vIERvbid0IGNoYW5nZSBh
bnl0aGluZyBpZiBwcmV2aW91cyBhbmQgY3VycmVudCBVUkxzIGFuZCBzdGF0ZXMgbWF0Y2guIFRo
aXMgYWxzbyBwcmV2ZW50cworICAgICAgLy8gSUU8MTAgZnJvbSBnZXR0aW5nIGludG8gcmVkaXJl
Y3QgbG9vcCB3aGVuIGluIExvY2F0aW9uSGFzaGJhbmdJbkh0bWw1VXJsIG1vZGUuCisgICAgICAv
LyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci5qcy9jb21taXQvZmZiMjcw
MQorICAgICAgaWYgKGxhc3RCcm93c2VyVXJsID09PSB1cmwgJiYgKCEkc25pZmZlci5oaXN0b3J5
IHx8IHNhbWVTdGF0ZSkpIHsKKyAgICAgICAgcmV0dXJuIHNlbGY7CisgICAgICB9CisgICAgICB2
YXIgc2FtZUJhc2UgPSBsYXN0QnJvd3NlclVybCAmJiBzdHJpcEhhc2gobGFzdEJyb3dzZXJVcmwp
ID09PSBzdHJpcEhhc2godXJsKTsKKyAgICAgIGxhc3RCcm93c2VyVXJsID0gdXJsOworICAgICAg
bGFzdEhpc3RvcnlTdGF0ZSA9IHN0YXRlOworICAgICAgLy8gRG9uJ3QgdXNlIGhpc3RvcnkgQVBJ
IGlmIG9ubHkgdGhlIGhhc2ggY2hhbmdlZAorICAgICAgLy8gZHVlIHRvIGEgYnVnIGluIElFMTAv
SUUxMSB3aGljaCBsZWFkcworICAgICAgLy8gdG8gbm90IGZpcmluZyBhIGBoYXNoY2hhbmdlYCBu
b3IgYHBvcHN0YXRlYCBldmVudAorICAgICAgLy8gaW4gc29tZSBjYXNlcyAoc2VlICM5MTQzKS4K
KyAgICAgIGlmICgkc25pZmZlci5oaXN0b3J5ICYmICghc2FtZUJhc2UgfHwgIXNhbWVTdGF0ZSkp
IHsKKyAgICAgICAgaGlzdG9yeVtyZXBsYWNlID8gJ3JlcGxhY2VTdGF0ZScgOiAncHVzaFN0YXRl
J10oc3RhdGUsICcnLCB1cmwpOworICAgICAgICBjYWNoZVN0YXRlKCk7CisgICAgICAgIC8vIERv
IHRoZSBhc3NpZ25tZW50IGFnYWluIHNvIHRoYXQgdGhvc2UgdHdvIHZhcmlhYmxlcyBhcmUgcmVm
ZXJlbnRpYWxseSBpZGVudGljYWwuCisgICAgICAgIGxhc3RIaXN0b3J5U3RhdGUgPSBjYWNoZWRT
dGF0ZTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghc2FtZUJhc2UgfHwgcmVsb2FkTG9j
YXRpb24pIHsKKyAgICAgICAgICByZWxvYWRMb2NhdGlvbiA9IHVybDsKKyAgICAgICAgfQorICAg
ICAgICBpZiAocmVwbGFjZSkgeworICAgICAgICAgIGxvY2F0aW9uLnJlcGxhY2UodXJsKTsKKyAg
ICAgICAgfSBlbHNlIGlmICghc2FtZUJhc2UpIHsKKyAgICAgICAgICBsb2NhdGlvbi5ocmVmID0g
dXJsOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGxvY2F0aW9uLmhhc2ggPSBnZXRIYXNo
KHVybCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiBzZWxmOworICAgIC8vIGdl
dHRlcgorICAgIH0gZWxzZSB7CisgICAgICAvLyAtIHJlbG9hZExvY2F0aW9uIGlzIG5lZWRlZCBh
cyBicm93c2VycyBkb24ndCBhbGxvdyB0byByZWFkIG91dAorICAgICAgLy8gICB0aGUgbmV3IGxv
Y2F0aW9uLmhyZWYgaWYgYSByZWxvYWQgaGFwcGVuZWQuCisgICAgICAvLyAtIHRoZSByZXBsYWNl
bWVudCBpcyBhIHdvcmthcm91bmQgZm9yIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hv
d19idWcuY2dpP2lkPTQwNzE3MgorICAgICAgcmV0dXJuIHJlbG9hZExvY2F0aW9uIHx8IGxvY2F0
aW9uLmhyZWYucmVwbGFjZSgvJTI3L2csIiciKTsKKyAgICB9CisgIH07CisKKyAgLyoqCisgICAq
IEBuYW1lICRicm93c2VyI3N0YXRlCisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBUaGlz
IG1ldGhvZCBpcyBhIGdldHRlci4KKyAgICoKKyAgICogUmV0dXJuIGhpc3Rvcnkuc3RhdGUgb3Ig
bnVsbCBpZiBoaXN0b3J5LnN0YXRlIGlzIHVuZGVmaW5lZC4KKyAgICoKKyAgICogQHJldHVybnMg
e29iamVjdH0gc3RhdGUKKyAgICovCisgIHNlbGYuc3RhdGUgPSBmdW5jdGlvbigpIHsKKyAgICBy
ZXR1cm4gY2FjaGVkU3RhdGU7CisgIH07CisKKyAgdmFyIHVybENoYW5nZUxpc3RlbmVycyA9IFtd
LAorICAgICAgdXJsQ2hhbmdlSW5pdCA9IGZhbHNlOworCisgIGZ1bmN0aW9uIGNhY2hlU3RhdGVB
bmRGaXJlVXJsQ2hhbmdlKCkgeworICAgIGNhY2hlU3RhdGUoKTsKKyAgICBmaXJlVXJsQ2hhbmdl
KCk7CisgIH0KKworICBmdW5jdGlvbiBnZXRDdXJyZW50U3RhdGUoKSB7CisgICAgdHJ5IHsKKyAg
ICAgIHJldHVybiBoaXN0b3J5LnN0YXRlOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIC8vIE1T
SUUgY2FuIHJlcG9ydGVkbHkgdGhyb3cgd2hlbiB0aGVyZSBpcyBubyBzdGF0ZSAoVU5DT05GSVJN
RUQpLgorICAgIH0KKyAgfQorCisgIC8vIFRoaXMgdmFyaWFibGUgc2hvdWxkIGJlIHVzZWQgKm9u
bHkqIGluc2lkZSB0aGUgY2FjaGVTdGF0ZSBmdW5jdGlvbi4KKyAgdmFyIGxhc3RDYWNoZWRTdGF0
ZSA9IG51bGw7CisgIGZ1bmN0aW9uIGNhY2hlU3RhdGUoKSB7CisgICAgLy8gVGhpcyBzaG91bGQg
YmUgdGhlIG9ubHkgcGxhY2UgaW4gJGJyb3dzZXIgd2hlcmUgYGhpc3Rvcnkuc3RhdGVgIGlzIHJl
YWQuCisgICAgY2FjaGVkU3RhdGUgPSBnZXRDdXJyZW50U3RhdGUoKTsKKyAgICBjYWNoZWRTdGF0
ZSA9IGlzVW5kZWZpbmVkKGNhY2hlZFN0YXRlKSA/IG51bGwgOiBjYWNoZWRTdGF0ZTsKKworICAg
IC8vIFByZXZlbnQgY2FsbGJhY2tzIGZvIGZpcmUgdHdpY2UgaWYgYm90aCBoYXNoY2hhbmdlICYg
cG9wc3RhdGUgd2VyZSBmaXJlZC4KKyAgICBpZiAoZXF1YWxzKGNhY2hlZFN0YXRlLCBsYXN0Q2Fj
aGVkU3RhdGUpKSB7CisgICAgICBjYWNoZWRTdGF0ZSA9IGxhc3RDYWNoZWRTdGF0ZTsKKyAgICB9
CisgICAgbGFzdENhY2hlZFN0YXRlID0gY2FjaGVkU3RhdGU7CisgIH0KKworICBmdW5jdGlvbiBm
aXJlVXJsQ2hhbmdlKCkgeworICAgIGlmIChsYXN0QnJvd3NlclVybCA9PT0gc2VsZi51cmwoKSAm
JiBsYXN0SGlzdG9yeVN0YXRlID09PSBjYWNoZWRTdGF0ZSkgeworICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGxhc3RCcm93c2VyVXJsID0gc2VsZi51cmwoKTsKKyAgICBsYXN0SGlzdG9yeVN0
YXRlID0gY2FjaGVkU3RhdGU7CisgICAgZm9yRWFjaCh1cmxDaGFuZ2VMaXN0ZW5lcnMsIGZ1bmN0
aW9uKGxpc3RlbmVyKSB7CisgICAgICBsaXN0ZW5lcihzZWxmLnVybCgpLCBjYWNoZWRTdGF0ZSk7
CisgICAgfSk7CisgIH0KKworICAvKioKKyAgICogQG5hbWUgJGJyb3dzZXIjb25VcmxDaGFuZ2UK
KyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIFJlZ2lzdGVyIGNhbGxiYWNrIGZ1bmN0aW9u
IHRoYXQgd2lsbCBiZSBjYWxsZWQsIHdoZW4gdXJsIGNoYW5nZXMuCisgICAqCisgICAqIEl0J3Mg
b25seSBjYWxsZWQgd2hlbiB0aGUgdXJsIGlzIGNoYW5nZWQgZnJvbSBvdXRzaWRlIG9mIGFuZ3Vs
YXI6CisgICAqIC0gdXNlciB0eXBlcyBkaWZmZXJlbnQgdXJsIGludG8gYWRkcmVzcyBiYXIKKyAg
ICogLSB1c2VyIGNsaWNrcyBvbiBoaXN0b3J5IChmb3J3YXJkL2JhY2spIGJ1dHRvbgorICAgKiAt
IHVzZXIgY2xpY2tzIG9uIGEgbGluaworICAgKgorICAgKiBJdCdzIG5vdCBjYWxsZWQgd2hlbiB1
cmwgaXMgY2hhbmdlZCBieSAkYnJvd3Nlci51cmwoKSBtZXRob2QKKyAgICoKKyAgICogVGhlIGxp
c3RlbmVyIGdldHMgY2FsbGVkIHdpdGggbmV3IHVybCBhcyBwYXJhbWV0ZXIuCisgICAqCisgICAq
IE5PVEU6IHRoaXMgYXBpIGlzIGludGVuZGVkIGZvciB1c2Ugb25seSBieSB0aGUgJGxvY2F0aW9u
IHNlcnZpY2UuIFBsZWFzZSB1c2UgdGhlCisgICAqIHtAbGluayBuZy4kbG9jYXRpb24gJGxvY2F0
aW9uIHNlcnZpY2V9IHRvIG1vbml0b3IgdXJsIGNoYW5nZXMgaW4gYW5ndWxhciBhcHBzLgorICAg
KgorICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZyl9IGxpc3RlbmVyIExpc3RlbmVyIGZ1bmN0
aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHVybCBjaGFuZ2VzLgorICAgKiBAcmV0dXJuIHtmdW5jdGlv
bihzdHJpbmcpfSBSZXR1cm5zIHRoZSByZWdpc3RlcmVkIGxpc3RlbmVyIGZuIC0gaGFuZHkgaWYg
dGhlIGZuIGlzIGFub255bW91cy4KKyAgICovCisgIHNlbGYub25VcmxDaGFuZ2UgPSBmdW5jdGlv
bihjYWxsYmFjaykgeworICAgIC8vIFRPRE8odm9qdGEpOiByZWZhY3RvciB0byB1c2Ugbm9kZSdz
IHN5bnRheCBmb3IgZXZlbnRzCisgICAgaWYgKCF1cmxDaGFuZ2VJbml0KSB7CisgICAgICAvLyBX
ZSBsaXN0ZW4gb24gYm90aCAoaGFzaGNoYW5nZS9wb3BzdGF0ZSkgd2hlbiBhdmFpbGFibGUsIGFz
IHNvbWUgYnJvd3NlcnMgKGUuZy4gT3BlcmEpCisgICAgICAvLyBkb24ndCBmaXJlIHBvcHN0YXRl
IHdoZW4gdXNlciBjaGFuZ2UgdGhlIGFkZHJlc3MgYmFyIGFuZCBkb24ndCBmaXJlIGhhc2hjaGFu
Z2Ugd2hlbiB1cmwKKyAgICAgIC8vIGNoYW5nZWQgYnkgcHVzaC9yZXBsYWNlU3RhdGUKKworICAg
ICAgLy8gaHRtbDUgaGlzdG9yeSBhcGkgLSBwb3BzdGF0ZSBldmVudAorICAgICAgaWYgKCRzbmlm
ZmVyLmhpc3RvcnkpIGpxTGl0ZSh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIGNhY2hlU3RhdGVBbmRG
aXJlVXJsQ2hhbmdlKTsKKyAgICAgIC8vIGhhc2hjaGFuZ2UgZXZlbnQKKyAgICAgIGpxTGl0ZSh3
aW5kb3cpLm9uKCdoYXNoY2hhbmdlJywgY2FjaGVTdGF0ZUFuZEZpcmVVcmxDaGFuZ2UpOworCisg
ICAgICB1cmxDaGFuZ2VJbml0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICB1cmxDaGFuZ2VMaXN0ZW5l
cnMucHVzaChjYWxsYmFjayk7CisgICAgcmV0dXJuIGNhbGxiYWNrOworICB9OworCisgIC8qKgor
ICAgKiBAcHJpdmF0ZQorICAgKiBSZW1vdmUgcG9wc3RhdGUgYW5kIGhhc2hjaGFuZ2UgaGFuZGxl
ciBmcm9tIHdpbmRvdy4KKyAgICoKKyAgICogTk9URTogdGhpcyBhcGkgaXMgaW50ZW5kZWQgZm9y
IHVzZSBvbmx5IGJ5ICRyb290U2NvcGUuCisgICAqLworICBzZWxmLiQkYXBwbGljYXRpb25EZXN0
cm95ZWQgPSBmdW5jdGlvbigpIHsKKyAgICBqcUxpdGUod2luZG93KS5vZmYoJ2hhc2hjaGFuZ2Ug
cG9wc3RhdGUnLCBjYWNoZVN0YXRlQW5kRmlyZVVybENoYW5nZSk7CisgIH07CisKKyAgLyoqCisg
ICAqIENoZWNrcyB3aGV0aGVyIHRoZSB1cmwgaGFzIGNoYW5nZWQgb3V0c2lkZSBvZiBBbmd1bGFy
LgorICAgKiBOZWVkcyB0byBiZSBleHBvcnRlZCB0byBiZSBhYmxlIHRvIGNoZWNrIGZvciBjaGFu
Z2VzIHRoYXQgaGF2ZSBiZWVuIGRvbmUgaW4gc3luYywKKyAgICogYXMgaGFzaGNoYW5nZS9wb3Bz
dGF0ZSBldmVudHMgZmlyZSBpbiBhc3luYy4KKyAgICovCisgIHNlbGYuJCRjaGVja1VybENoYW5n
ZSA9IGZpcmVVcmxDaGFuZ2U7CisKKyAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgLy8gTWlzYyBBUEkKKyAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwor
ICAvKioKKyAgICogQG5hbWUgJGJyb3dzZXIjYmFzZUhyZWYKKyAgICoKKyAgICogQGRlc2NyaXB0
aW9uCisgICAqIFJldHVybnMgY3VycmVudCA8YmFzZSBocmVmPgorICAgKiAoYWx3YXlzIHJlbGF0
aXZlIC0gd2l0aG91dCBkb21haW4pCisgICAqCisgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBj
dXJyZW50IGJhc2UgaHJlZgorICAgKi8KKyAgc2VsZi5iYXNlSHJlZiA9IGZ1bmN0aW9uKCkgewor
ICAgIHZhciBocmVmID0gYmFzZUVsZW1lbnQuYXR0cignaHJlZicpOworICAgIHJldHVybiBocmVm
ID8gaHJlZi5yZXBsYWNlKC9eKGh0dHBzP1w6KT9cL1wvW15cL10qLywgJycpIDogJyc7CisgIH07
CisKKyAgLyoqCisgICAqIEBuYW1lICRicm93c2VyI2RlZmVyCisgICAqIEBwYXJhbSB7ZnVuY3Rp
b24oKX0gZm4gQSBmdW5jdGlvbiwgd2hvJ3MgZXhlY3V0aW9uIHNob3VsZCBiZSBkZWZlcnJlZC4K
KyAgICogQHBhcmFtIHtudW1iZXI9fSBbZGVsYXk9MF0gb2YgbWlsbGlzZWNvbmRzIHRvIGRlZmVy
IHRoZSBmdW5jdGlvbiBleGVjdXRpb24uCisgICAqIEByZXR1cm5zIHsqfSBEZWZlcklkIHRoYXQg
Y2FuIGJlIHVzZWQgdG8gY2FuY2VsIHRoZSB0YXNrIHZpYSBgJGJyb3dzZXIuZGVmZXIuY2FuY2Vs
KClgLgorICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAgICogRXhlY3V0ZXMgYSBmbiBhc3luY2hy
b25vdXNseSB2aWEgYHNldFRpbWVvdXQoZm4sIGRlbGF5KWAuCisgICAqCisgICAqIFVubGlrZSB3
aGVuIGNhbGxpbmcgYHNldFRpbWVvdXRgIGRpcmVjdGx5LCBpbiB0ZXN0IHRoaXMgZnVuY3Rpb24g
aXMgbW9ja2VkIGFuZCBpbnN0ZWFkIG9mIHVzaW5nCisgICAqIGBzZXRUaW1lb3V0YCBpbiB0ZXN0
cywgdGhlIGZucyBhcmUgcXVldWVkIGluIGFuIGFycmF5LCB3aGljaCBjYW4gYmUgcHJvZ3JhbW1h
dGljYWxseSBmbHVzaGVkCisgICAqIHZpYSBgJGJyb3dzZXIuZGVmZXIuZmx1c2goKWAuCisgICAq
CisgICAqLworICBzZWxmLmRlZmVyID0gZnVuY3Rpb24oZm4sIGRlbGF5KSB7CisgICAgdmFyIHRp
bWVvdXRJZDsKKyAgICBvdXRzdGFuZGluZ1JlcXVlc3RDb3VudCsrOworICAgIHRpbWVvdXRJZCA9
IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICBkZWxldGUgcGVuZGluZ0RlZmVySWRzW3Rp
bWVvdXRJZF07CisgICAgICBjb21wbGV0ZU91dHN0YW5kaW5nUmVxdWVzdChmbik7CisgICAgfSwg
ZGVsYXkgfHwgMCk7CisgICAgcGVuZGluZ0RlZmVySWRzW3RpbWVvdXRJZF0gPSB0cnVlOworICAg
IHJldHVybiB0aW1lb3V0SWQ7CisgIH07CisKKworICAvKioKKyAgICogQG5hbWUgJGJyb3dzZXIj
ZGVmZXIuY2FuY2VsCisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBDYW5jZWxzIGEgZGVm
ZXJyZWQgdGFzayBpZGVudGlmaWVkIHdpdGggYGRlZmVySWRgLgorICAgKgorICAgKiBAcGFyYW0g
eyp9IGRlZmVySWQgVG9rZW4gcmV0dXJuZWQgYnkgdGhlIGAkYnJvd3Nlci5kZWZlcmAgZnVuY3Rp
b24uCisgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdGFzayBo
YXNuJ3QgZXhlY3V0ZWQgeWV0IGFuZCB3YXMgc3VjY2Vzc2Z1bGx5CisgICAqICAgICAgICAgICAg
ICAgICAgICBjYW5jZWxlZC4KKyAgICovCisgIHNlbGYuZGVmZXIuY2FuY2VsID0gZnVuY3Rpb24o
ZGVmZXJJZCkgeworICAgIGlmIChwZW5kaW5nRGVmZXJJZHNbZGVmZXJJZF0pIHsKKyAgICAgIGRl
bGV0ZSBwZW5kaW5nRGVmZXJJZHNbZGVmZXJJZF07CisgICAgICBjbGVhclRpbWVvdXQoZGVmZXJJ
ZCk7CisgICAgICBjb21wbGV0ZU91dHN0YW5kaW5nUmVxdWVzdChub29wKTsKKyAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH07CisKK30KKworZnVuY3Rpb24g
JEJyb3dzZXJQcm92aWRlcigpIHsKKyAgdGhpcy4kZ2V0ID0gWyckd2luZG93JywgJyRsb2cnLCAn
JHNuaWZmZXInLCAnJGRvY3VtZW50JywKKyAgICAgIGZ1bmN0aW9uKCR3aW5kb3csICRsb2csICRz
bmlmZmVyLCAkZG9jdW1lbnQpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBCcm93c2VyKCR3aW5kb3cs
ICRkb2N1bWVudCwgJGxvZywgJHNuaWZmZXIpOworICAgICAgfV07Cit9CisKKy8qKgorICogQG5n
ZG9jIHNlcnZpY2UKKyAqIEBuYW1lICRjYWNoZUZhY3RvcnkKKyAqCisgKiBAZGVzY3JpcHRpb24K
KyAqIEZhY3RvcnkgdGhhdCBjb25zdHJ1Y3RzIHtAbGluayAkY2FjaGVGYWN0b3J5LkNhY2hlIENh
Y2hlfSBvYmplY3RzIGFuZCBnaXZlcyBhY2Nlc3MgdG8KKyAqIHRoZW0uCisgKgorICogYGBganMK
KyAqCisgKiAgdmFyIGNhY2hlID0gJGNhY2hlRmFjdG9yeSgnY2FjaGVJZCcpOworICogIGV4cGVj
dCgkY2FjaGVGYWN0b3J5LmdldCgnY2FjaGVJZCcpKS50b0JlKGNhY2hlKTsKKyAqICBleHBlY3Qo
JGNhY2hlRmFjdG9yeS5nZXQoJ25vU3VjaENhY2hlSWQnKSkubm90LnRvQmVEZWZpbmVkKCk7Cisg
KgorICogIGNhY2hlLnB1dCgia2V5IiwgInZhbHVlIik7CisgKiAgY2FjaGUucHV0KCJhbm90aGVy
IGtleSIsICJhbm90aGVyIHZhbHVlIik7CisgKgorICogIC8vIFdlJ3ZlIHNwZWNpZmllZCBubyBv
cHRpb25zIG9uIGNyZWF0aW9uCisgKiAgZXhwZWN0KGNhY2hlLmluZm8oKSkudG9FcXVhbCh7aWQ6
ICdjYWNoZUlkJywgc2l6ZTogMn0pOworICoKKyAqIGBgYAorICoKKyAqCisgKiBAcGFyYW0ge3N0
cmluZ30gY2FjaGVJZCBOYW1lIG9yIGlkIG9mIHRoZSBuZXdseSBjcmVhdGVkIGNhY2hlLgorICog
QHBhcmFtIHtvYmplY3Q9fSBvcHRpb25zIE9wdGlvbnMgb2JqZWN0IHRoYXQgc3BlY2lmaWVzIHRo
ZSBjYWNoZSBiZWhhdmlvci4gUHJvcGVydGllczoKKyAqCisgKiAgIC0gYHtudW1iZXI9fWAgYGNh
cGFjaXR5YCDigJQgdHVybnMgdGhlIGNhY2hlIGludG8gTFJVIGNhY2hlLgorICoKKyAqIEByZXR1
cm5zIHtvYmplY3R9IE5ld2x5IGNyZWF0ZWQgY2FjaGUgb2JqZWN0IHdpdGggdGhlIGZvbGxvd2lu
ZyBzZXQgb2YgbWV0aG9kczoKKyAqCisgKiAtIGB7b2JqZWN0fWAgYGluZm8oKWAg4oCUIFJldHVy
bnMgaWQsIHNpemUsIGFuZCBvcHRpb25zIG9mIGNhY2hlLgorICogLSBge3sqfX1gIGBwdXQoe3N0
cmluZ30ga2V5LCB7Kn0gdmFsdWUpYCDigJQgUHV0cyBhIG5ldyBrZXktdmFsdWUgcGFpciBpbnRv
IHRoZSBjYWNoZSBhbmQgcmV0dXJucworICogICBpdC4KKyAqIC0gYHt7Kn19YCBgZ2V0KHtzdHJp
bmd9IGtleSlgIOKAlCBSZXR1cm5zIGNhY2hlZCB2YWx1ZSBmb3IgYGtleWAgb3IgdW5kZWZpbmVk
IGZvciBjYWNoZSBtaXNzLgorICogLSBge3ZvaWR9YCBgcmVtb3ZlKHtzdHJpbmd9IGtleSlgIOKA
lCBSZW1vdmVzIGEga2V5LXZhbHVlIHBhaXIgZnJvbSB0aGUgY2FjaGUuCisgKiAtIGB7dm9pZH1g
IGByZW1vdmVBbGwoKWAg4oCUIFJlbW92ZXMgYWxsIGNhY2hlZCB2YWx1ZXMuCisgKiAtIGB7dm9p
ZH1gIGBkZXN0cm95KClgIOKAlCBSZW1vdmVzIHJlZmVyZW5jZXMgdG8gdGhpcyBjYWNoZSBmcm9t
ICRjYWNoZUZhY3RvcnkuCisgKgorICogQGV4YW1wbGUKKyAgIDxleGFtcGxlIG1vZHVsZT0iY2Fj
aGVFeGFtcGxlQXBwIj4KKyAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAgICAgPGRp
diBuZy1jb250cm9sbGVyPSJDYWNoZUNvbnRyb2xsZXIiPgorICAgICAgICAgPGlucHV0IG5nLW1v
ZGVsPSJuZXdDYWNoZUtleSIgcGxhY2Vob2xkZXI9IktleSI+CisgICAgICAgICA8aW5wdXQgbmct
bW9kZWw9Im5ld0NhY2hlVmFsdWUiIHBsYWNlaG9sZGVyPSJWYWx1ZSI+CisgICAgICAgICA8YnV0
dG9uIG5nLWNsaWNrPSJwdXQobmV3Q2FjaGVLZXksIG5ld0NhY2hlVmFsdWUpIj5DYWNoZTwvYnV0
dG9uPgorCisgICAgICAgICA8cCBuZy1pZj0ia2V5cy5sZW5ndGgiPkNhY2hlZCBWYWx1ZXM8L3A+
CisgICAgICAgICA8ZGl2IG5nLXJlcGVhdD0ia2V5IGluIGtleXMiPgorICAgICAgICAgICA8c3Bh
biBuZy1iaW5kPSJrZXkiPjwvc3Bhbj4KKyAgICAgICAgICAgPHNwYW4+OiA8L3NwYW4+CisgICAg
ICAgICAgIDxiIG5nLWJpbmQ9ImNhY2hlLmdldChrZXkpIj48L2I+CisgICAgICAgICA8L2Rpdj4K
KworICAgICAgICAgPHA+Q2FjaGUgSW5mbzwvcD4KKyAgICAgICAgIDxkaXYgbmctcmVwZWF0PSIo
a2V5LCB2YWx1ZSkgaW4gY2FjaGUuaW5mbygpIj4KKyAgICAgICAgICAgPHNwYW4gbmctYmluZD0i
a2V5Ij48L3NwYW4+CisgICAgICAgICAgIDxzcGFuPjogPC9zcGFuPgorICAgICAgICAgICA8YiBu
Zy1iaW5kPSJ2YWx1ZSI+PC9iPgorICAgICAgICAgPC9kaXY+CisgICAgICAgPC9kaXY+CisgICAg
IDwvZmlsZT4KKyAgICAgPGZpbGUgbmFtZT0ic2NyaXB0LmpzIj4KKyAgICAgICBhbmd1bGFyLm1v
ZHVsZSgnY2FjaGVFeGFtcGxlQXBwJywgW10pLgorICAgICAgICAgY29udHJvbGxlcignQ2FjaGVD
b250cm9sbGVyJywgWyckc2NvcGUnLCAnJGNhY2hlRmFjdG9yeScsIGZ1bmN0aW9uKCRzY29wZSwg
JGNhY2hlRmFjdG9yeSkgeworICAgICAgICAgICAkc2NvcGUua2V5cyA9IFtdOworICAgICAgICAg
ICAkc2NvcGUuY2FjaGUgPSAkY2FjaGVGYWN0b3J5KCdjYWNoZUlkJyk7CisgICAgICAgICAgICRz
Y29wZS5wdXQgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7CisgICAgICAgICAgICAgaWYgKCRzY29w
ZS5jYWNoZS5nZXQoa2V5KSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAkc2NvcGUu
a2V5cy5wdXNoKGtleSk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgICRzY29wZS5jYWNo
ZS5wdXQoa2V5LCB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IHZhbHVlKTsKKyAgICAgICAg
ICAgfTsKKyAgICAgICAgIH1dKTsKKyAgICAgPC9maWxlPgorICAgICA8ZmlsZSBuYW1lPSJzdHls
ZS5jc3MiPgorICAgICAgIHAgeworICAgICAgICAgbWFyZ2luOiAxMHB4IDAgM3B4OworICAgICAg
IH0KKyAgICAgPC9maWxlPgorICAgPC9leGFtcGxlPgorICovCitmdW5jdGlvbiAkQ2FjaGVGYWN0
b3J5UHJvdmlkZXIoKSB7CisKKyAgdGhpcy4kZ2V0ID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIGNh
Y2hlcyA9IHt9OworCisgICAgZnVuY3Rpb24gY2FjaGVGYWN0b3J5KGNhY2hlSWQsIG9wdGlvbnMp
IHsKKyAgICAgIGlmIChjYWNoZUlkIGluIGNhY2hlcykgeworICAgICAgICB0aHJvdyBtaW5FcnIo
JyRjYWNoZUZhY3RvcnknKSgnaWlkJywgIkNhY2hlSWQgJ3swfScgaXMgYWxyZWFkeSB0YWtlbiEi
LCBjYWNoZUlkKTsKKyAgICAgIH0KKworICAgICAgdmFyIHNpemUgPSAwLAorICAgICAgICAgIHN0
YXRzID0gZXh0ZW5kKHt9LCBvcHRpb25zLCB7aWQ6IGNhY2hlSWR9KSwKKyAgICAgICAgICBkYXRh
ID0ge30sCisgICAgICAgICAgY2FwYWNpdHkgPSAob3B0aW9ucyAmJiBvcHRpb25zLmNhcGFjaXR5
KSB8fCBOdW1iZXIuTUFYX1ZBTFVFLAorICAgICAgICAgIGxydUhhc2ggPSB7fSwKKyAgICAgICAg
ICBmcmVzaEVuZCA9IG51bGwsCisgICAgICAgICAgc3RhbGVFbmQgPSBudWxsOworCisgICAgICAv
KioKKyAgICAgICAqIEBuZ2RvYyB0eXBlCisgICAgICAgKiBAbmFtZSAkY2FjaGVGYWN0b3J5LkNh
Y2hlCisgICAgICAgKgorICAgICAgICogQGRlc2NyaXB0aW9uCisgICAgICAgKiBBIGNhY2hlIG9i
amVjdCB1c2VkIHRvIHN0b3JlIGFuZCByZXRyaWV2ZSBkYXRhLCBwcmltYXJpbHkgdXNlZCBieQor
ICAgICAgICoge0BsaW5rICRodHRwICRodHRwfSBhbmQgdGhlIHtAbGluayBuZy5kaXJlY3RpdmU6
c2NyaXB0IHNjcmlwdH0gZGlyZWN0aXZlIHRvIGNhY2hlCisgICAgICAgKiB0ZW1wbGF0ZXMgYW5k
IG90aGVyIGRhdGEuCisgICAgICAgKgorICAgICAgICogYGBganMKKyAgICAgICAqICBhbmd1bGFy
Lm1vZHVsZSgnc3VwZXJDYWNoZScpCisgICAgICAgKiAgICAuZmFjdG9yeSgnc3VwZXJDYWNoZScs
IFsnJGNhY2hlRmFjdG9yeScsIGZ1bmN0aW9uKCRjYWNoZUZhY3RvcnkpIHsKKyAgICAgICAqICAg
ICAgcmV0dXJuICRjYWNoZUZhY3RvcnkoJ3N1cGVyLWNhY2hlJyk7CisgICAgICAgKiAgICB9XSk7
CisgICAgICAgKiBgYGAKKyAgICAgICAqCisgICAgICAgKiBFeGFtcGxlIHRlc3Q6CisgICAgICAg
KgorICAgICAgICogYGBganMKKyAgICAgICAqICBpdCgnc2hvdWxkIGJlaGF2ZSBsaWtlIGEgY2Fj
aGUnLCBpbmplY3QoZnVuY3Rpb24oc3VwZXJDYWNoZSkgeworICAgICAgICogICAgc3VwZXJDYWNo
ZS5wdXQoJ2tleScsICd2YWx1ZScpOworICAgICAgICogICAgc3VwZXJDYWNoZS5wdXQoJ2Fub3Ro
ZXIga2V5JywgJ2Fub3RoZXIgdmFsdWUnKTsKKyAgICAgICAqCisgICAgICAgKiAgICBleHBlY3Qo
c3VwZXJDYWNoZS5pbmZvKCkpLnRvRXF1YWwoeworICAgICAgICogICAgICBpZDogJ3N1cGVyLWNh
Y2hlJywKKyAgICAgICAqICAgICAgc2l6ZTogMgorICAgICAgICogICAgfSk7CisgICAgICAgKgor
ICAgICAgICogICAgc3VwZXJDYWNoZS5yZW1vdmUoJ2Fub3RoZXIga2V5Jyk7CisgICAgICAgKiAg
ICBleHBlY3Qoc3VwZXJDYWNoZS5nZXQoJ2Fub3RoZXIga2V5JykpLnRvQmVVbmRlZmluZWQoKTsK
KyAgICAgICAqCisgICAgICAgKiAgICBzdXBlckNhY2hlLnJlbW92ZUFsbCgpOworICAgICAgICog
ICAgZXhwZWN0KHN1cGVyQ2FjaGUuaW5mbygpKS50b0VxdWFsKHsKKyAgICAgICAqICAgICAgaWQ6
ICdzdXBlci1jYWNoZScsCisgICAgICAgKiAgICAgIHNpemU6IDAKKyAgICAgICAqICAgIH0pOwor
ICAgICAgICogIH0pKTsKKyAgICAgICAqIGBgYAorICAgICAgICovCisgICAgICByZXR1cm4gY2Fj
aGVzW2NhY2hlSWRdID0geworCisgICAgICAgIC8qKgorICAgICAgICAgKiBAbmdkb2MgbWV0aG9k
CisgICAgICAgICAqIEBuYW1lICRjYWNoZUZhY3RvcnkuQ2FjaGUjcHV0CisgICAgICAgICAqIEBr
aW5kIGZ1bmN0aW9uCisgICAgICAgICAqCisgICAgICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAg
ICAgKiBJbnNlcnRzIGEgbmFtZWQgZW50cnkgaW50byB0aGUge0BsaW5rICRjYWNoZUZhY3Rvcnku
Q2FjaGUgQ2FjaGV9IG9iamVjdCB0byBiZQorICAgICAgICAgKiByZXRyaWV2ZWQgbGF0ZXIsIGFu
ZCBpbmNyZW1lbnRpbmcgdGhlIHNpemUgb2YgdGhlIGNhY2hlIGlmIHRoZSBrZXkgd2FzIG5vdCBh
bHJlYWR5CisgICAgICAgICAqIHByZXNlbnQgaW4gdGhlIGNhY2hlLiBJZiBiZWhhdmluZyBsaWtl
IGFuIExSVSBjYWNoZSwgaXQgd2lsbCBhbHNvIHJlbW92ZSBzdGFsZQorICAgICAgICAgKiBlbnRy
aWVzIGZyb20gdGhlIHNldC4KKyAgICAgICAgICoKKyAgICAgICAgICogSXQgd2lsbCBub3QgaW5z
ZXJ0IHVuZGVmaW5lZCB2YWx1ZXMgaW50byB0aGUgY2FjaGUuCisgICAgICAgICAqCisgICAgICAg
ICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgdGhlIGtleSB1bmRlciB3aGljaCB0aGUgY2FjaGVkIGRh
dGEgaXMgc3RvcmVkLgorICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIHRoZSB2YWx1ZSB0byBz
dG9yZSBhbG9uZ3NpZGUgdGhlIGtleS4gSWYgaXQgaXMgdW5kZWZpbmVkLCB0aGUga2V5CisgICAg
ICAgICAqICAgIHdpbGwgbm90IGJlIHN0b3JlZC4KKyAgICAgICAgICogQHJldHVybnMgeyp9IHRo
ZSB2YWx1ZSBzdG9yZWQuCisgICAgICAgICAqLworICAgICAgICBwdXQ6IGZ1bmN0aW9uKGtleSwg
dmFsdWUpIHsKKyAgICAgICAgICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm47CisgICAg
ICAgICAgaWYgKGNhcGFjaXR5IDwgTnVtYmVyLk1BWF9WQUxVRSkgeworICAgICAgICAgICAgdmFy
IGxydUVudHJ5ID0gbHJ1SGFzaFtrZXldIHx8IChscnVIYXNoW2tleV0gPSB7a2V5OiBrZXl9KTsK
KworICAgICAgICAgICAgcmVmcmVzaChscnVFbnRyeSk7CisgICAgICAgICAgfQorCisgICAgICAg
ICAgaWYgKCEoa2V5IGluIGRhdGEpKSBzaXplKys7CisgICAgICAgICAgZGF0YVtrZXldID0gdmFs
dWU7CisKKyAgICAgICAgICBpZiAoc2l6ZSA+IGNhcGFjaXR5KSB7CisgICAgICAgICAgICB0aGlz
LnJlbW92ZShzdGFsZUVuZC5rZXkpOworICAgICAgICAgIH0KKworICAgICAgICAgIHJldHVybiB2
YWx1ZTsKKyAgICAgICAgfSwKKworICAgICAgICAvKioKKyAgICAgICAgICogQG5nZG9jIG1ldGhv
ZAorICAgICAgICAgKiBAbmFtZSAkY2FjaGVGYWN0b3J5LkNhY2hlI2dldAorICAgICAgICAgKiBA
a2luZCBmdW5jdGlvbgorICAgICAgICAgKgorICAgICAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAg
ICAgICogUmV0cmlldmVzIG5hbWVkIGRhdGEgc3RvcmVkIGluIHRoZSB7QGxpbmsgJGNhY2hlRmFj
dG9yeS5DYWNoZSBDYWNoZX0gb2JqZWN0LgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0g
e3N0cmluZ30ga2V5IHRoZSBrZXkgb2YgdGhlIGRhdGEgdG8gYmUgcmV0cmlldmVkCisgICAgICAg
ICAqIEByZXR1cm5zIHsqfSB0aGUgdmFsdWUgc3RvcmVkLgorICAgICAgICAgKi8KKyAgICAgICAg
Z2V0OiBmdW5jdGlvbihrZXkpIHsKKyAgICAgICAgICBpZiAoY2FwYWNpdHkgPCBOdW1iZXIuTUFY
X1ZBTFVFKSB7CisgICAgICAgICAgICB2YXIgbHJ1RW50cnkgPSBscnVIYXNoW2tleV07CisKKyAg
ICAgICAgICAgIGlmICghbHJ1RW50cnkpIHJldHVybjsKKworICAgICAgICAgICAgcmVmcmVzaChs
cnVFbnRyeSk7CisgICAgICAgICAgfQorCisgICAgICAgICAgcmV0dXJuIGRhdGFba2V5XTsKKyAg
ICAgICAgfSwKKworCisgICAgICAgIC8qKgorICAgICAgICAgKiBAbmdkb2MgbWV0aG9kCisgICAg
ICAgICAqIEBuYW1lICRjYWNoZUZhY3RvcnkuQ2FjaGUjcmVtb3ZlCisgICAgICAgICAqIEBraW5k
IGZ1bmN0aW9uCisgICAgICAgICAqCisgICAgICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAgICAg
KiBSZW1vdmVzIGFuIGVudHJ5IGZyb20gdGhlIHtAbGluayAkY2FjaGVGYWN0b3J5LkNhY2hlIENh
Y2hlfSBvYmplY3QuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkg
dGhlIGtleSBvZiB0aGUgZW50cnkgdG8gYmUgcmVtb3ZlZAorICAgICAgICAgKi8KKyAgICAgICAg
cmVtb3ZlOiBmdW5jdGlvbihrZXkpIHsKKyAgICAgICAgICBpZiAoY2FwYWNpdHkgPCBOdW1iZXIu
TUFYX1ZBTFVFKSB7CisgICAgICAgICAgICB2YXIgbHJ1RW50cnkgPSBscnVIYXNoW2tleV07CisK
KyAgICAgICAgICAgIGlmICghbHJ1RW50cnkpIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGxy
dUVudHJ5ID09IGZyZXNoRW5kKSBmcmVzaEVuZCA9IGxydUVudHJ5LnA7CisgICAgICAgICAgICBp
ZiAobHJ1RW50cnkgPT0gc3RhbGVFbmQpIHN0YWxlRW5kID0gbHJ1RW50cnkubjsKKyAgICAgICAg
ICAgIGxpbmsobHJ1RW50cnkubixscnVFbnRyeS5wKTsKKworICAgICAgICAgICAgZGVsZXRlIGxy
dUhhc2hba2V5XTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBkZWxldGUgZGF0YVtrZXldOwor
ICAgICAgICAgIHNpemUtLTsKKyAgICAgICAgfSwKKworCisgICAgICAgIC8qKgorICAgICAgICAg
KiBAbmdkb2MgbWV0aG9kCisgICAgICAgICAqIEBuYW1lICRjYWNoZUZhY3RvcnkuQ2FjaGUjcmVt
b3ZlQWxsCisgICAgICAgICAqIEBraW5kIGZ1bmN0aW9uCisgICAgICAgICAqCisgICAgICAgICAq
IEBkZXNjcmlwdGlvbgorICAgICAgICAgKiBDbGVhcnMgdGhlIGNhY2hlIG9iamVjdCBvZiBhbnkg
ZW50cmllcy4KKyAgICAgICAgICovCisgICAgICAgIHJlbW92ZUFsbDogZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgZGF0YSA9IHt9OworICAgICAgICAgIHNpemUgPSAwOworICAgICAgICAgIGxydUhh
c2ggPSB7fTsKKyAgICAgICAgICBmcmVzaEVuZCA9IHN0YWxlRW5kID0gbnVsbDsKKyAgICAgICAg
fSwKKworCisgICAgICAgIC8qKgorICAgICAgICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICAgICAq
IEBuYW1lICRjYWNoZUZhY3RvcnkuQ2FjaGUjZGVzdHJveQorICAgICAgICAgKiBAa2luZCBmdW5j
dGlvbgorICAgICAgICAgKgorICAgICAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgICAgICogRGVz
dHJveXMgdGhlIHtAbGluayAkY2FjaGVGYWN0b3J5LkNhY2hlIENhY2hlfSBvYmplY3QgZW50aXJl
bHksCisgICAgICAgICAqIHJlbW92aW5nIGl0IGZyb20gdGhlIHtAbGluayAkY2FjaGVGYWN0b3J5
ICRjYWNoZUZhY3Rvcnl9IHNldC4KKyAgICAgICAgICovCisgICAgICAgIGRlc3Ryb3k6IGZ1bmN0
aW9uKCkgeworICAgICAgICAgIGRhdGEgPSBudWxsOworICAgICAgICAgIHN0YXRzID0gbnVsbDsK
KyAgICAgICAgICBscnVIYXNoID0gbnVsbDsKKyAgICAgICAgICBkZWxldGUgY2FjaGVzW2NhY2hl
SWRdOworICAgICAgICB9LAorCisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBuZ2RvYyBtZXRo
b2QKKyAgICAgICAgICogQG5hbWUgJGNhY2hlRmFjdG9yeS5DYWNoZSNpbmZvCisgICAgICAgICAq
IEBraW5kIGZ1bmN0aW9uCisgICAgICAgICAqCisgICAgICAgICAqIEBkZXNjcmlwdGlvbgorICAg
ICAgICAgKiBSZXRyaWV2ZSBpbmZvcm1hdGlvbiByZWdhcmRpbmcgYSBwYXJ0aWN1bGFyIHtAbGlu
ayAkY2FjaGVGYWN0b3J5LkNhY2hlIENhY2hlfS4KKyAgICAgICAgICoKKyAgICAgICAgICogQHJl
dHVybnMge29iamVjdH0gYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgor
ICAgICAgICAgKiAgIDx1bD4KKyAgICAgICAgICogICAgIDxsaT4qKmlkKio6IHRoZSBpZCBvZiB0
aGUgY2FjaGUgaW5zdGFuY2U8L2xpPgorICAgICAgICAgKiAgICAgPGxpPioqc2l6ZSoqOiB0aGUg
bnVtYmVyIG9mIGVudHJpZXMga2VwdCBpbiB0aGUgY2FjaGUgaW5zdGFuY2U8L2xpPgorICAgICAg
ICAgKiAgICAgPGxpPioqLi4uKio6IGFueSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgZnJvbSB0aGUg
b3B0aW9ucyBvYmplY3Qgd2hlbiBjcmVhdGluZyB0aGUKKyAgICAgICAgICogICAgICAgY2FjaGUu
PC9saT4KKyAgICAgICAgICogICA8L3VsPgorICAgICAgICAgKi8KKyAgICAgICAgaW5mbzogZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgcmV0dXJuIGV4dGVuZCh7fSwgc3RhdHMsIHtzaXplOiBzaXpl
fSk7CisgICAgICAgIH0KKyAgICAgIH07CisKKworICAgICAgLyoqCisgICAgICAgKiBtYWtlcyB0
aGUgYGVudHJ5YCB0aGUgZnJlc2hFbmQgb2YgdGhlIExSVSBsaW5rZWQgbGlzdAorICAgICAgICov
CisgICAgICBmdW5jdGlvbiByZWZyZXNoKGVudHJ5KSB7CisgICAgICAgIGlmIChlbnRyeSAhPSBm
cmVzaEVuZCkgeworICAgICAgICAgIGlmICghc3RhbGVFbmQpIHsKKyAgICAgICAgICAgIHN0YWxl
RW5kID0gZW50cnk7CisgICAgICAgICAgfSBlbHNlIGlmIChzdGFsZUVuZCA9PSBlbnRyeSkgewor
ICAgICAgICAgICAgc3RhbGVFbmQgPSBlbnRyeS5uOworICAgICAgICAgIH0KKworICAgICAgICAg
IGxpbmsoZW50cnkubiwgZW50cnkucCk7CisgICAgICAgICAgbGluayhlbnRyeSwgZnJlc2hFbmQp
OworICAgICAgICAgIGZyZXNoRW5kID0gZW50cnk7CisgICAgICAgICAgZnJlc2hFbmQubiA9IG51
bGw7CisgICAgICAgIH0KKyAgICAgIH0KKworCisgICAgICAvKioKKyAgICAgICAqIGJpZGlyZWN0
aW9uYWxseSBsaW5rcyB0d28gZW50cmllcyBvZiB0aGUgTFJVIGxpbmtlZCBsaXN0CisgICAgICAg
Ki8KKyAgICAgIGZ1bmN0aW9uIGxpbmsobmV4dEVudHJ5LCBwcmV2RW50cnkpIHsKKyAgICAgICAg
aWYgKG5leHRFbnRyeSAhPSBwcmV2RW50cnkpIHsKKyAgICAgICAgICBpZiAobmV4dEVudHJ5KSBu
ZXh0RW50cnkucCA9IHByZXZFbnRyeTsgLy9wIHN0YW5kcyBmb3IgcHJldmlvdXMsICdwcmV2JyBk
aWRuJ3QgbWluaWZ5CisgICAgICAgICAgaWYgKHByZXZFbnRyeSkgcHJldkVudHJ5Lm4gPSBuZXh0
RW50cnk7IC8vbiBzdGFuZHMgZm9yIG5leHQsICduZXh0JyBkaWRuJ3QgbWluaWZ5CisgICAgICAg
IH0KKyAgICAgIH0KKyAgICB9CisKKworICAvKioKKyAgICogQG5nZG9jIG1ldGhvZAorICAgKiBA
bmFtZSAkY2FjaGVGYWN0b3J5I2luZm8KKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIEdl
dCBpbmZvcm1hdGlvbiBhYm91dCBhbGwgdGhlIGNhY2hlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVk
CisgICAqCisgICAqIEByZXR1cm5zIHtPYmplY3R9IC0ga2V5LXZhbHVlIG1hcCBvZiBgY2FjaGVJ
ZGAgdG8gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIGBjYWNoZSNpbmZvYAorICAgKi8KKyAgICBjYWNo
ZUZhY3RvcnkuaW5mbyA9IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIGluZm8gPSB7fTsKKyAgICAg
IGZvckVhY2goY2FjaGVzLCBmdW5jdGlvbihjYWNoZSwgY2FjaGVJZCkgeworICAgICAgICBpbmZv
W2NhY2hlSWRdID0gY2FjaGUuaW5mbygpOworICAgICAgfSk7CisgICAgICByZXR1cm4gaW5mbzsK
KyAgICB9OworCisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgJGNhY2hl
RmFjdG9yeSNnZXQKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIEdldCBhY2Nlc3MgdG8g
YSBjYWNoZSBvYmplY3QgYnkgdGhlIGBjYWNoZUlkYCB1c2VkIHdoZW4gaXQgd2FzIGNyZWF0ZWQu
CisgICAqCisgICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZUlkIE5hbWUgb3IgaWQgb2YgYSBjYWNo
ZSB0byBhY2Nlc3MuCisgICAqIEByZXR1cm5zIHtvYmplY3R9IENhY2hlIG9iamVjdCBpZGVudGlm
aWVkIGJ5IHRoZSBjYWNoZUlkIG9yIHVuZGVmaW5lZCBpZiBubyBzdWNoIGNhY2hlLgorICAgKi8K
KyAgICBjYWNoZUZhY3RvcnkuZ2V0ID0gZnVuY3Rpb24oY2FjaGVJZCkgeworICAgICAgcmV0dXJu
IGNhY2hlc1tjYWNoZUlkXTsKKyAgICB9OworCisKKyAgICByZXR1cm4gY2FjaGVGYWN0b3J5Owor
ICB9OworfQorCisvKioKKyAqIEBuZ2RvYyBzZXJ2aWNlCisgKiBAbmFtZSAkdGVtcGxhdGVDYWNo
ZQorICoKKyAqIEBkZXNjcmlwdGlvbgorICogVGhlIGZpcnN0IHRpbWUgYSB0ZW1wbGF0ZSBpcyB1
c2VkLCBpdCBpcyBsb2FkZWQgaW4gdGhlIHRlbXBsYXRlIGNhY2hlIGZvciBxdWljayByZXRyaWV2
YWwuIFlvdQorICogY2FuIGxvYWQgdGVtcGxhdGVzIGRpcmVjdGx5IGludG8gdGhlIGNhY2hlIGlu
IGEgYHNjcmlwdGAgdGFnLCBvciBieSBjb25zdW1pbmcgdGhlCisgKiBgJHRlbXBsYXRlQ2FjaGVg
IHNlcnZpY2UgZGlyZWN0bHkuCisgKgorICogQWRkaW5nIHZpYSB0aGUgYHNjcmlwdGAgdGFnOgor
ICoKKyAqIGBgYGh0bWwKKyAqICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L25nLXRlbXBsYXRlIiBpZD0i
dGVtcGxhdGVJZC5odG1sIj4KKyAqICAgICA8cD5UaGlzIGlzIHRoZSBjb250ZW50IG9mIHRoZSB0
ZW1wbGF0ZTwvcD4KKyAqICAgPC9zY3JpcHQ+CisgKiBgYGAKKyAqCisgKiAqKk5vdGU6KiogdGhl
IGBzY3JpcHRgIHRhZyBjb250YWluaW5nIHRoZSB0ZW1wbGF0ZSBkb2VzIG5vdCBuZWVkIHRvIGJl
IGluY2x1ZGVkIGluIHRoZSBgaGVhZGAgb2YKKyAqIHRoZSBkb2N1bWVudCwgYnV0IGl0IG11c3Qg
YmUgYSBkZXNjZW5kZW50IG9mIHRoZSB7QGxpbmsgbmcuJHJvb3RFbGVtZW50ICRyb290RWxlbWVu
dH0gKElFLAorICogZWxlbWVudCB3aXRoIG5nLWFwcCBhdHRyaWJ1dGUpLCBvdGhlcndpc2UgdGhl
IHRlbXBsYXRlIHdpbGwgYmUgaWdub3JlZC4KKyAqCisgKiBBZGRpbmcgdmlhIHRoZSBgJHRlbXBs
YXRlQ2FjaGVgIHNlcnZpY2U6CisgKgorICogYGBganMKKyAqIHZhciBteUFwcCA9IGFuZ3VsYXIu
bW9kdWxlKCdteUFwcCcsIFtdKTsKKyAqIG15QXBwLnJ1bihmdW5jdGlvbigkdGVtcGxhdGVDYWNo
ZSkgeworICogICAkdGVtcGxhdGVDYWNoZS5wdXQoJ3RlbXBsYXRlSWQuaHRtbCcsICdUaGlzIGlz
IHRoZSBjb250ZW50IG9mIHRoZSB0ZW1wbGF0ZScpOworICogfSk7CisgKiBgYGAKKyAqCisgKiBU
byByZXRyaWV2ZSB0aGUgdGVtcGxhdGUgbGF0ZXIsIHNpbXBseSB1c2UgaXQgaW4geW91ciBIVE1M
OgorICogYGBgaHRtbAorICogPGRpdiBuZy1pbmNsdWRlPSIgJ3RlbXBsYXRlSWQuaHRtbCcgIj48
L2Rpdj4KKyAqIGBgYAorICoKKyAqIG9yIGdldCBpdCB2aWEgSmF2YXNjcmlwdDoKKyAqIGBgYGpz
CisgKiAkdGVtcGxhdGVDYWNoZS5nZXQoJ3RlbXBsYXRlSWQuaHRtbCcpCisgKiBgYGAKKyAqCisg
KiBTZWUge0BsaW5rIG5nLiRjYWNoZUZhY3RvcnkgJGNhY2hlRmFjdG9yeX0uCisgKgorICovCitm
dW5jdGlvbiAkVGVtcGxhdGVDYWNoZVByb3ZpZGVyKCkgeworICB0aGlzLiRnZXQgPSBbJyRjYWNo
ZUZhY3RvcnknLCBmdW5jdGlvbigkY2FjaGVGYWN0b3J5KSB7CisgICAgcmV0dXJuICRjYWNoZUZh
Y3RvcnkoJ3RlbXBsYXRlcycpOworICB9XTsKK30KKworLyogKiAqICogKiAqICogKiAqICogKiAq
ICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgorICog
ICAgIEFueSBjb21taXRzIHRvIHRoaXMgZmlsZSBzaG91bGQgYmUgcmV2aWV3ZWQgd2l0aCBzZWN1
cml0eSBpbiBtaW5kLiAgKgorICogICBDaGFuZ2VzIHRvIHRoaXMgZmlsZSBjYW4gcG90ZW50aWFs
bHkgY3JlYXRlIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gKgorICogICAgICAgICAgQW4gYXBw
cm92YWwgZnJvbSAyIENvcmUgbWVtYmVycyB3aXRoIGhpc3Rvcnkgb2YgbW9kaWZ5aW5nICAgICAg
KgorICogICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBmaWxlIGlzIHJlcXVpcmVkLiAgICAg
ICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogIERvZXMgdGhl
IGNoYW5nZSBzb21laG93IGFsbG93IGZvciBhcmJpdHJhcnkgamF2YXNjcmlwdCB0byBiZSBleGVj
dXRlZD8gKgorICogICAgT3IgYWxsb3dzIGZvciBzb21lb25lIHRvIGNoYW5nZSB0aGUgcHJvdG90
eXBlIG9mIGJ1aWx0LWluIG9iamVjdHM/ICAgKgorICogICAgIE9yIGdpdmVzIHVuZGVzaXJlZCBh
Y2Nlc3MgdG8gdmFyaWFibGVzIGxpa2VzIGRvY3VtZW50IG9yIHdpbmRvdz8gICAgKgorICogKiAq
ICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICog
KiAqICogKiAqICogKi8KKworLyogISBWQVJJQUJMRS9GVU5DVElPTiBOQU1JTkcgQ09OVkVOVElP
TlMgVEhBVCBBUFBMWSBUTyBUSElTIEZJTEUhCisgKgorICogRE9NLXJlbGF0ZWQgdmFyaWFibGVz
OgorICoKKyAqIC0gIm5vZGUiIC0gRE9NIE5vZGUKKyAqIC0gImVsZW1lbnQiIC0gRE9NIEVsZW1l
bnQgb3IgTm9kZQorICogLSAiJG5vZGUiIG9yICIkZWxlbWVudCIgLSBqcUxpdGUtd3JhcHBlZCBu
b2RlIG9yIGVsZW1lbnQKKyAqCisgKgorICogQ29tcGlsZXIgcmVsYXRlZCBzdHVmZjoKKyAqCisg
KiAtICJsaW5rRm4iIC0gbGlua2luZyBmbiBvZiBhIHNpbmdsZSBkaXJlY3RpdmUKKyAqIC0gIm5v
ZGVMaW5rRm4iIC0gZnVuY3Rpb24gdGhhdCBhZ2dyZWdhdGVzIGFsbCBsaW5raW5nIGZucyBmb3Ig
YSBwYXJ0aWN1bGFyIG5vZGUKKyAqIC0gImNoaWxkTGlua0ZuIiAtICBmdW5jdGlvbiB0aGF0IGFn
Z3JlZ2F0ZXMgYWxsIGxpbmtpbmcgZm5zIGZvciBjaGlsZCBub2RlcyBvZiBhIHBhcnRpY3VsYXIg
bm9kZQorICogLSAiY29tcG9zaXRlTGlua0ZuIiAtIGZ1bmN0aW9uIHRoYXQgYWdncmVnYXRlcyBh
bGwgbGlua2luZyBmbnMgZm9yIGEgY29tcGlsYXRpb24gcm9vdCAobm9kZUxpc3QpCisgKi8KKwor
CisvKioKKyAqIEBuZ2RvYyBzZXJ2aWNlCisgKiBAbmFtZSAkY29tcGlsZQorICogQGtpbmQgZnVu
Y3Rpb24KKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIENvbXBpbGVzIGFuIEhUTUwgc3RyaW5nIG9y
IERPTSBpbnRvIGEgdGVtcGxhdGUgYW5kIHByb2R1Y2VzIGEgdGVtcGxhdGUgZnVuY3Rpb24sIHdo
aWNoCisgKiBjYW4gdGhlbiBiZSB1c2VkIHRvIGxpbmsge0BsaW5rIG5nLiRyb290U2NvcGUuU2Nv
cGUgYHNjb3BlYH0gYW5kIHRoZSB0ZW1wbGF0ZSB0b2dldGhlci4KKyAqCisgKiBUaGUgY29tcGls
YXRpb24gaXMgYSBwcm9jZXNzIG9mIHdhbGtpbmcgdGhlIERPTSB0cmVlIGFuZCBtYXRjaGluZyBE
T00gZWxlbWVudHMgdG8KKyAqIHtAbGluayBuZy4kY29tcGlsZVByb3ZpZGVyI2RpcmVjdGl2ZSBk
aXJlY3RpdmVzfS4KKyAqCisgKiA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC13YXJuaW5nIj4KKyAq
ICoqTm90ZToqKiBUaGlzIGRvY3VtZW50IGlzIGFuIGluLWRlcHRoIHJlZmVyZW5jZSBvZiBhbGwg
ZGlyZWN0aXZlIG9wdGlvbnMuCisgKiBGb3IgYSBnZW50bGUgaW50cm9kdWN0aW9uIHRvIGRpcmVj
dGl2ZXMgd2l0aCBleGFtcGxlcyBvZiBjb21tb24gdXNlIGNhc2VzLAorICogc2VlIHRoZSB7QGxp
bmsgZ3VpZGUvZGlyZWN0aXZlIGRpcmVjdGl2ZSBndWlkZX0uCisgKiA8L2Rpdj4KKyAqCisgKiAj
IyBDb21wcmVoZW5zaXZlIERpcmVjdGl2ZSBBUEkKKyAqCisgKiBUaGVyZSBhcmUgbWFueSBkaWZm
ZXJlbnQgb3B0aW9ucyBmb3IgYSBkaXJlY3RpdmUuCisgKgorICogVGhlIGRpZmZlcmVuY2UgcmVz
aWRlcyBpbiB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmYWN0b3J5IGZ1bmN0aW9uLgorICogWW91
IGNhbiBlaXRoZXIgcmV0dXJuIGEgIkRpcmVjdGl2ZSBEZWZpbml0aW9uIE9iamVjdCIgKHNlZSBi
ZWxvdykgdGhhdCBkZWZpbmVzIHRoZSBkaXJlY3RpdmUgcHJvcGVydGllcywKKyAqIG9yIGp1c3Qg
dGhlIGBwb3N0TGlua2AgZnVuY3Rpb24gKGFsbCBvdGhlciBwcm9wZXJ0aWVzIHdpbGwgaGF2ZSB0
aGUgZGVmYXVsdCB2YWx1ZXMpLgorICoKKyAqIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LXN1Y2Nl
c3MiPgorICogKipCZXN0IFByYWN0aWNlOioqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSAi
ZGlyZWN0aXZlIGRlZmluaXRpb24gb2JqZWN0IiBmb3JtLgorICogPC9kaXY+CisgKgorICogSGVy
ZSdzIGFuIGV4YW1wbGUgZGlyZWN0aXZlIGRlY2xhcmVkIHdpdGggYSBEaXJlY3RpdmUgRGVmaW5p
dGlvbiBPYmplY3Q6CisgKgorICogYGBganMKKyAqICAgdmFyIG15TW9kdWxlID0gYW5ndWxhci5t
b2R1bGUoLi4uKTsKKyAqCisgKiAgIG15TW9kdWxlLmRpcmVjdGl2ZSgnZGlyZWN0aXZlTmFtZScs
IGZ1bmN0aW9uIGZhY3RvcnkoaW5qZWN0YWJsZXMpIHsKKyAqICAgICB2YXIgZGlyZWN0aXZlRGVm
aW5pdGlvbk9iamVjdCA9IHsKKyAqICAgICAgIHByaW9yaXR5OiAwLAorICogICAgICAgdGVtcGxh
dGU6ICc8ZGl2PjwvZGl2PicsIC8vIG9yIC8vIGZ1bmN0aW9uKHRFbGVtZW50LCB0QXR0cnMpIHsg
Li4uIH0sCisgKiAgICAgICAvLyBvcgorICogICAgICAgLy8gdGVtcGxhdGVVcmw6ICdkaXJlY3Rp
dmUuaHRtbCcsIC8vIG9yIC8vIGZ1bmN0aW9uKHRFbGVtZW50LCB0QXR0cnMpIHsgLi4uIH0sCisg
KiAgICAgICB0cmFuc2NsdWRlOiBmYWxzZSwKKyAqICAgICAgIHJlc3RyaWN0OiAnQScsCisgKiAg
ICAgICB0ZW1wbGF0ZU5hbWVzcGFjZTogJ2h0bWwnLAorICogICAgICAgc2NvcGU6IGZhbHNlLAor
ICogICAgICAgY29udHJvbGxlcjogZnVuY3Rpb24oJHNjb3BlLCAkZWxlbWVudCwgJGF0dHJzLCAk
dHJhbnNjbHVkZSwgb3RoZXJJbmplY3RhYmxlcykgeyAuLi4gfSwKKyAqICAgICAgIGNvbnRyb2xs
ZXJBczogJ3N0cmluZ0lkZW50aWZpZXInLAorICogICAgICAgYmluZFRvQ29udHJvbGxlcjogZmFs
c2UsCisgKiAgICAgICByZXF1aXJlOiAnc2libGluZ0RpcmVjdGl2ZU5hbWUnLCAvLyBvciAvLyBb
J15wYXJlbnREaXJlY3RpdmVOYW1lJywgJz9vcHRpb25hbERpcmVjdGl2ZU5hbWUnLCAnP15vcHRp
b25hbFBhcmVudCddLAorICogICAgICAgY29tcGlsZTogZnVuY3Rpb24gY29tcGlsZSh0RWxlbWVu
dCwgdEF0dHJzLCB0cmFuc2NsdWRlKSB7CisgKiAgICAgICAgIHJldHVybiB7CisgKiAgICAgICAg
ICAgcHJlOiBmdW5jdGlvbiBwcmVMaW5rKHNjb3BlLCBpRWxlbWVudCwgaUF0dHJzLCBjb250cm9s
bGVyKSB7IC4uLiB9LAorICogICAgICAgICAgIHBvc3Q6IGZ1bmN0aW9uIHBvc3RMaW5rKHNjb3Bl
LCBpRWxlbWVudCwgaUF0dHJzLCBjb250cm9sbGVyKSB7IC4uLiB9CisgKiAgICAgICAgIH0KKyAq
ICAgICAgICAgLy8gb3IKKyAqICAgICAgICAgLy8gcmV0dXJuIGZ1bmN0aW9uIHBvc3RMaW5rKCAu
Li4gKSB7IC4uLiB9CisgKiAgICAgICB9LAorICogICAgICAgLy8gb3IKKyAqICAgICAgIC8vIGxp
bms6IHsKKyAqICAgICAgIC8vICBwcmU6IGZ1bmN0aW9uIHByZUxpbmsoc2NvcGUsIGlFbGVtZW50
LCBpQXR0cnMsIGNvbnRyb2xsZXIpIHsgLi4uIH0sCisgKiAgICAgICAvLyAgcG9zdDogZnVuY3Rp
b24gcG9zdExpbmsoc2NvcGUsIGlFbGVtZW50LCBpQXR0cnMsIGNvbnRyb2xsZXIpIHsgLi4uIH0K
KyAqICAgICAgIC8vIH0KKyAqICAgICAgIC8vIG9yCisgKiAgICAgICAvLyBsaW5rOiBmdW5jdGlv
biBwb3N0TGluayggLi4uICkgeyAuLi4gfQorICogICAgIH07CisgKiAgICAgcmV0dXJuIGRpcmVj
dGl2ZURlZmluaXRpb25PYmplY3Q7CisgKiAgIH0pOworICogYGBgCisgKgorICogPGRpdiBjbGFz
cz0iYWxlcnQgYWxlcnQtd2FybmluZyI+CisgKiAqKk5vdGU6KiogQW55IHVuc3BlY2lmaWVkIG9w
dGlvbnMgd2lsbCB1c2UgdGhlIGRlZmF1bHQgdmFsdWUuIFlvdSBjYW4gc2VlIHRoZSBkZWZhdWx0
IHZhbHVlcyBiZWxvdy4KKyAqIDwvZGl2PgorICoKKyAqIFRoZXJlZm9yZSB0aGUgYWJvdmUgY2Fu
IGJlIHNpbXBsaWZpZWQgYXM6CisgKgorICogYGBganMKKyAqICAgdmFyIG15TW9kdWxlID0gYW5n
dWxhci5tb2R1bGUoLi4uKTsKKyAqCisgKiAgIG15TW9kdWxlLmRpcmVjdGl2ZSgnZGlyZWN0aXZl
TmFtZScsIGZ1bmN0aW9uIGZhY3RvcnkoaW5qZWN0YWJsZXMpIHsKKyAqICAgICB2YXIgZGlyZWN0
aXZlRGVmaW5pdGlvbk9iamVjdCA9IHsKKyAqICAgICAgIGxpbms6IGZ1bmN0aW9uIHBvc3RMaW5r
KHNjb3BlLCBpRWxlbWVudCwgaUF0dHJzKSB7IC4uLiB9CisgKiAgICAgfTsKKyAqICAgICByZXR1
cm4gZGlyZWN0aXZlRGVmaW5pdGlvbk9iamVjdDsKKyAqICAgICAvLyBvcgorICogICAgIC8vIHJl
dHVybiBmdW5jdGlvbiBwb3N0TGluayhzY29wZSwgaUVsZW1lbnQsIGlBdHRycykgeyAuLi4gfQor
ICogICB9KTsKKyAqIGBgYAorICoKKyAqCisgKgorICogIyMjIERpcmVjdGl2ZSBEZWZpbml0aW9u
IE9iamVjdAorICoKKyAqIFRoZSBkaXJlY3RpdmUgZGVmaW5pdGlvbiBvYmplY3QgcHJvdmlkZXMg
aW5zdHJ1Y3Rpb25zIHRvIHRoZSB7QGxpbmsgbmcuJGNvbXBpbGUKKyAqIGNvbXBpbGVyfS4gVGhl
IGF0dHJpYnV0ZXMgYXJlOgorICoKKyAqICMjIyMgYG11bHRpRWxlbWVudGAKKyAqIFdoZW4gdGhp
cyBwcm9wZXJ0eSBpcyBzZXQgdG8gdHJ1ZSwgdGhlIEhUTUwgY29tcGlsZXIgd2lsbCBjb2xsZWN0
IERPTSBub2RlcyBiZXR3ZWVuCisgKiBub2RlcyB3aXRoIHRoZSBhdHRyaWJ1dGVzIGBkaXJlY3Rp
dmUtbmFtZS1zdGFydGAgYW5kIGBkaXJlY3RpdmUtbmFtZS1lbmRgLCBhbmQgZ3JvdXAgdGhlbQor
ICogdG9nZXRoZXIgYXMgdGhlIGRpcmVjdGl2ZSBlbGVtZW50cy4gSXQgaXMgcmVjb21tZW5kZWQg
dGhhdCB0aGlzIGZlYXR1cmUgYmUgdXNlZCBvbiBkaXJlY3RpdmVzCisgKiB3aGljaCBhcmUgbm90
IHN0cmljdGx5IGJlaGF2aW91cmFsIChzdWNoIGFzIHtAbGluayBuZ0NsaWNrfSksIGFuZCB3aGlj
aAorICogZG8gbm90IG1hbmlwdWxhdGUgb3IgcmVwbGFjZSBjaGlsZCBub2RlcyAoc3VjaCBhcyB7
QGxpbmsgbmdJbmNsdWRlfSkuCisgKgorICogIyMjIyBgcHJpb3JpdHlgCisgKiBXaGVuIHRoZXJl
IGFyZSBtdWx0aXBsZSBkaXJlY3RpdmVzIGRlZmluZWQgb24gYSBzaW5nbGUgRE9NIGVsZW1lbnQs
IHNvbWV0aW1lcyBpdAorICogaXMgbmVjZXNzYXJ5IHRvIHNwZWNpZnkgdGhlIG9yZGVyIGluIHdo
aWNoIHRoZSBkaXJlY3RpdmVzIGFyZSBhcHBsaWVkLiBUaGUgYHByaW9yaXR5YCBpcyB1c2VkCisg
KiB0byBzb3J0IHRoZSBkaXJlY3RpdmVzIGJlZm9yZSB0aGVpciBgY29tcGlsZWAgZnVuY3Rpb25z
IGdldCBjYWxsZWQuIFByaW9yaXR5IGlzIGRlZmluZWQgYXMgYQorICogbnVtYmVyLiBEaXJlY3Rp
dmVzIHdpdGggZ3JlYXRlciBudW1lcmljYWwgYHByaW9yaXR5YCBhcmUgY29tcGlsZWQgZmlyc3Qu
IFByZS1saW5rIGZ1bmN0aW9ucworICogYXJlIGFsc28gcnVuIGluIHByaW9yaXR5IG9yZGVyLCBi
dXQgcG9zdC1saW5rIGZ1bmN0aW9ucyBhcmUgcnVuIGluIHJldmVyc2Ugb3JkZXIuIFRoZSBvcmRl
cgorICogb2YgZGlyZWN0aXZlcyB3aXRoIHRoZSBzYW1lIHByaW9yaXR5IGlzIHVuZGVmaW5lZC4g
VGhlIGRlZmF1bHQgcHJpb3JpdHkgaXMgYDBgLgorICoKKyAqICMjIyMgYHRlcm1pbmFsYAorICog
SWYgc2V0IHRvIHRydWUgdGhlbiB0aGUgY3VycmVudCBgcHJpb3JpdHlgIHdpbGwgYmUgdGhlIGxh
c3Qgc2V0IG9mIGRpcmVjdGl2ZXMKKyAqIHdoaWNoIHdpbGwgZXhlY3V0ZSAoYW55IGRpcmVjdGl2
ZXMgYXQgdGhlIGN1cnJlbnQgcHJpb3JpdHkgd2lsbCBzdGlsbCBleGVjdXRlCisgKiBhcyB0aGUg
b3JkZXIgb2YgZXhlY3V0aW9uIG9uIHNhbWUgYHByaW9yaXR5YCBpcyB1bmRlZmluZWQpLiBOb3Rl
IHRoYXQgZXhwcmVzc2lvbnMKKyAqIGFuZCBvdGhlciBkaXJlY3RpdmVzIHVzZWQgaW4gdGhlIGRp
cmVjdGl2ZSdzIHRlbXBsYXRlIHdpbGwgYWxzbyBiZSBleGNsdWRlZCBmcm9tIGV4ZWN1dGlvbi4K
KyAqCisgKiAjIyMjIGBzY29wZWAKKyAqICoqSWYgc2V0IHRvIGB0cnVlYCwqKiB0aGVuIGEgbmV3
IHNjb3BlIHdpbGwgYmUgY3JlYXRlZCBmb3IgdGhpcyBkaXJlY3RpdmUuIElmIG11bHRpcGxlIGRp
cmVjdGl2ZXMgb24gdGhlCisgKiBzYW1lIGVsZW1lbnQgcmVxdWVzdCBhIG5ldyBzY29wZSwgb25s
eSBvbmUgbmV3IHNjb3BlIGlzIGNyZWF0ZWQuIFRoZSBuZXcgc2NvcGUgcnVsZSBkb2VzIG5vdAor
ICogYXBwbHkgZm9yIHRoZSByb290IG9mIHRoZSB0ZW1wbGF0ZSBzaW5jZSB0aGUgcm9vdCBvZiB0
aGUgdGVtcGxhdGUgYWx3YXlzIGdldHMgYSBuZXcgc2NvcGUuCisgKgorICogKipJZiBzZXQgdG8g
YHt9YCAob2JqZWN0IGhhc2gpLCoqIHRoZW4gYSBuZXcgImlzb2xhdGUiIHNjb3BlIGlzIGNyZWF0
ZWQuIFRoZSAnaXNvbGF0ZScgc2NvcGUgZGlmZmVycyBmcm9tCisgKiBub3JtYWwgc2NvcGUgaW4g
dGhhdCBpdCBkb2VzIG5vdCBwcm90b3R5cGljYWxseSBpbmhlcml0IGZyb20gdGhlIHBhcmVudCBz
Y29wZS4gVGhpcyBpcyB1c2VmdWwKKyAqIHdoZW4gY3JlYXRpbmcgcmV1c2FibGUgY29tcG9uZW50
cywgd2hpY2ggc2hvdWxkIG5vdCBhY2NpZGVudGFsbHkgcmVhZCBvciBtb2RpZnkgZGF0YSBpbiB0
aGUKKyAqIHBhcmVudCBzY29wZS4KKyAqCisgKiBUaGUgJ2lzb2xhdGUnIHNjb3BlIHRha2VzIGFu
IG9iamVjdCBoYXNoIHdoaWNoIGRlZmluZXMgYSBzZXQgb2YgbG9jYWwgc2NvcGUgcHJvcGVydGll
cworICogZGVyaXZlZCBmcm9tIHRoZSBwYXJlbnQgc2NvcGUuIFRoZXNlIGxvY2FsIHByb3BlcnRp
ZXMgYXJlIHVzZWZ1bCBmb3IgYWxpYXNpbmcgdmFsdWVzIGZvcgorICogdGVtcGxhdGVzLiBMb2Nh
bHMgZGVmaW5pdGlvbiBpcyBhIGhhc2ggb2YgbG9jYWwgc2NvcGUgcHJvcGVydHkgdG8gaXRzIHNv
dXJjZToKKyAqCisgKiAqIGBAYCBvciBgQGF0dHJgIC0gYmluZCBhIGxvY2FsIHNjb3BlIHByb3Bl
cnR5IHRvIHRoZSB2YWx1ZSBvZiBET00gYXR0cmlidXRlLiBUaGUgcmVzdWx0IGlzCisgKiAgIGFs
d2F5cyBhIHN0cmluZyBzaW5jZSBET00gYXR0cmlidXRlcyBhcmUgc3RyaW5ncy4gSWYgbm8gYGF0
dHJgIG5hbWUgaXMgc3BlY2lmaWVkICB0aGVuIHRoZQorICogICBhdHRyaWJ1dGUgbmFtZSBpcyBh
c3N1bWVkIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBsb2NhbCBuYW1lLgorICogICBHaXZlbiBgPHdp
ZGdldCBteS1hdHRyPSJoZWxsbyB7e25hbWV9fSI+YCBhbmQgd2lkZ2V0IGRlZmluaXRpb24KKyAq
ICAgb2YgYHNjb3BlOiB7IGxvY2FsTmFtZTonQG15QXR0cicgfWAsIHRoZW4gd2lkZ2V0IHNjb3Bl
IHByb3BlcnR5IGBsb2NhbE5hbWVgIHdpbGwgcmVmbGVjdAorICogICB0aGUgaW50ZXJwb2xhdGVk
IHZhbHVlIG9mIGBoZWxsbyB7e25hbWV9fWAuIEFzIHRoZSBgbmFtZWAgYXR0cmlidXRlIGNoYW5n
ZXMgc28gd2lsbCB0aGUKKyAqICAgYGxvY2FsTmFtZWAgcHJvcGVydHkgb24gdGhlIHdpZGdldCBz
Y29wZS4gVGhlIGBuYW1lYCBpcyByZWFkIGZyb20gdGhlIHBhcmVudCBzY29wZSAobm90CisgKiAg
IGNvbXBvbmVudCBzY29wZSkuCisgKgorICogKiBgPWAgb3IgYD1hdHRyYCAtIHNldCB1cCBiaS1k
aXJlY3Rpb25hbCBiaW5kaW5nIGJldHdlZW4gYSBsb2NhbCBzY29wZSBwcm9wZXJ0eSBhbmQgdGhl
CisgKiAgIHBhcmVudCBzY29wZSBwcm9wZXJ0eSBvZiBuYW1lIGRlZmluZWQgdmlhIHRoZSB2YWx1
ZSBvZiB0aGUgYGF0dHJgIGF0dHJpYnV0ZS4gSWYgbm8gYGF0dHJgCisgKiAgIG5hbWUgaXMgc3Bl
Y2lmaWVkIHRoZW4gdGhlIGF0dHJpYnV0ZSBuYW1lIGlzIGFzc3VtZWQgdG8gYmUgdGhlIHNhbWUg
YXMgdGhlIGxvY2FsIG5hbWUuCisgKiAgIEdpdmVuIGA8d2lkZ2V0IG15LWF0dHI9InBhcmVudE1v
ZGVsIj5gIGFuZCB3aWRnZXQgZGVmaW5pdGlvbiBvZgorICogICBgc2NvcGU6IHsgbG9jYWxNb2Rl
bDonPW15QXR0cicgfWAsIHRoZW4gd2lkZ2V0IHNjb3BlIHByb3BlcnR5IGBsb2NhbE1vZGVsYCB3
aWxsIHJlZmxlY3QgdGhlCisgKiAgIHZhbHVlIG9mIGBwYXJlbnRNb2RlbGAgb24gdGhlIHBhcmVu
dCBzY29wZS4gQW55IGNoYW5nZXMgdG8gYHBhcmVudE1vZGVsYCB3aWxsIGJlIHJlZmxlY3RlZAor
ICogICBpbiBgbG9jYWxNb2RlbGAgYW5kIGFueSBjaGFuZ2VzIGluIGBsb2NhbE1vZGVsYCB3aWxs
IHJlZmxlY3QgaW4gYHBhcmVudE1vZGVsYC4gSWYgdGhlIHBhcmVudAorICogICBzY29wZSBwcm9w
ZXJ0eSBkb2Vzbid0IGV4aXN0LCBpdCB3aWxsIHRocm93IGEgTk9OX0FTU0lHTkFCTEVfTU9ERUxf
RVhQUkVTU0lPTiBleGNlcHRpb24uIFlvdQorICogICBjYW4gYXZvaWQgdGhpcyBiZWhhdmlvciB1
c2luZyBgPT9gIG9yIGA9P2F0dHJgIGluIG9yZGVyIHRvIGZsYWcgdGhlIHByb3BlcnR5IGFzIG9w
dGlvbmFsLiBJZgorICogICB5b3Ugd2FudCB0byBzaGFsbG93IHdhdGNoIGZvciBjaGFuZ2VzIChp
LmUuICR3YXRjaENvbGxlY3Rpb24gaW5zdGVhZCBvZiAkd2F0Y2gpIHlvdSBjYW4gdXNlCisgKiAg
IGA9KmAgb3IgYD0qYXR0cmAgKGA9Kj9gIG9yIGA9Kj9hdHRyYCBpZiB0aGUgcHJvcGVydHkgaXMg
b3B0aW9uYWwpLgorICoKKyAqICogYCZgIG9yIGAmYXR0cmAgLSBwcm92aWRlcyBhIHdheSB0byBl
eGVjdXRlIGFuIGV4cHJlc3Npb24gaW4gdGhlIGNvbnRleHQgb2YgdGhlIHBhcmVudCBzY29wZS4K
KyAqICAgSWYgbm8gYGF0dHJgIG5hbWUgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGF0dHJpYnV0ZSBu
YW1lIGlzIGFzc3VtZWQgdG8gYmUgdGhlIHNhbWUgYXMgdGhlCisgKiAgIGxvY2FsIG5hbWUuIEdp
dmVuIGA8d2lkZ2V0IG15LWF0dHI9ImNvdW50ID0gY291bnQgKyB2YWx1ZSI+YCBhbmQgd2lkZ2V0
IGRlZmluaXRpb24gb2YKKyAqICAgYHNjb3BlOiB7IGxvY2FsRm46JyZteUF0dHInIH1gLCB0aGVu
IGlzb2xhdGUgc2NvcGUgcHJvcGVydHkgYGxvY2FsRm5gIHdpbGwgcG9pbnQgdG8KKyAqICAgYSBm
dW5jdGlvbiB3cmFwcGVyIGZvciB0aGUgYGNvdW50ID0gY291bnQgKyB2YWx1ZWAgZXhwcmVzc2lv
bi4gT2Z0ZW4gaXQncyBkZXNpcmFibGUgdG8KKyAqICAgcGFzcyBkYXRhIGZyb20gdGhlIGlzb2xh
dGVkIHNjb3BlIHZpYSBhbiBleHByZXNzaW9uIHRvIHRoZSBwYXJlbnQgc2NvcGUsIHRoaXMgY2Fu
IGJlCisgKiAgIGRvbmUgYnkgcGFzc2luZyBhIG1hcCBvZiBsb2NhbCB2YXJpYWJsZSBuYW1lcyBh
bmQgdmFsdWVzIGludG8gdGhlIGV4cHJlc3Npb24gd3JhcHBlciBmbi4KKyAqICAgRm9yIGV4YW1w
bGUsIGlmIHRoZSBleHByZXNzaW9uIGlzIGBpbmNyZW1lbnQoYW1vdW50KWAgdGhlbiB3ZSBjYW4g
c3BlY2lmeSB0aGUgYW1vdW50IHZhbHVlCisgKiAgIGJ5IGNhbGxpbmcgdGhlIGBsb2NhbEZuYCBh
cyBgbG9jYWxGbih7YW1vdW50OiAyMn0pYC4KKyAqCisgKgorICogIyMjIyBgYmluZFRvQ29udHJv
bGxlcmAKKyAqIFdoZW4gYW4gaXNvbGF0ZSBzY29wZSBpcyB1c2VkIGZvciBhIGNvbXBvbmVudCAo
c2VlIGFib3ZlKSwgYW5kIGBjb250cm9sbGVyQXNgIGlzIHVzZWQsIGBiaW5kVG9Db250cm9sbGVy
OiB0cnVlYCB3aWxsCisgKiBhbGxvdyBhIGNvbXBvbmVudCB0byBoYXZlIGl0cyBwcm9wZXJ0aWVz
IGJvdW5kIHRvIHRoZSBjb250cm9sbGVyLCByYXRoZXIgdGhhbiB0byBzY29wZS4gV2hlbiB0aGUg
Y29udHJvbGxlcgorICogaXMgaW5zdGFudGlhdGVkLCB0aGUgaW5pdGlhbCB2YWx1ZXMgb2YgdGhl
IGlzb2xhdGUgc2NvcGUgYmluZGluZ3MgYXJlIGFscmVhZHkgYXZhaWxhYmxlLgorICoKKyAqICMj
IyMgYGNvbnRyb2xsZXJgCisgKiBDb250cm9sbGVyIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLiBUaGUg
Y29udHJvbGxlciBpcyBpbnN0YW50aWF0ZWQgYmVmb3JlIHRoZQorICogcHJlLWxpbmtpbmcgcGhh
c2UgYW5kIGl0IGlzIHNoYXJlZCB3aXRoIG90aGVyIGRpcmVjdGl2ZXMgKHNlZQorICogYHJlcXVp
cmVgIGF0dHJpYnV0ZSkuIFRoaXMgYWxsb3dzIHRoZSBkaXJlY3RpdmVzIHRvIGNvbW11bmljYXRl
IHdpdGggZWFjaCBvdGhlciBhbmQgYXVnbWVudAorICogZWFjaCBvdGhlcidzIGJlaGF2aW9yLiBU
aGUgY29udHJvbGxlciBpcyBpbmplY3RhYmxlIChhbmQgc3VwcG9ydHMgYnJhY2tldCBub3RhdGlv
bikgd2l0aCB0aGUgZm9sbG93aW5nIGxvY2FsczoKKyAqCisgKiAqIGAkc2NvcGVgIC0gQ3VycmVu
dCBzY29wZSBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnQKKyAqICogYCRlbGVtZW50YCAtIEN1
cnJlbnQgZWxlbWVudAorICogKiBgJGF0dHJzYCAtIEN1cnJlbnQgYXR0cmlidXRlcyBvYmplY3Qg
Zm9yIHRoZSBlbGVtZW50CisgKiAqIGAkdHJhbnNjbHVkZWAgLSBBIHRyYW5zY2x1ZGUgbGlua2lu
ZyBmdW5jdGlvbiBwcmUtYm91bmQgdG8gdGhlIGNvcnJlY3QgdHJhbnNjbHVzaW9uIHNjb3BlOgor
ICogICBgZnVuY3Rpb24oW3Njb3BlXSwgY2xvbmVMaW5raW5nRm4sIGZ1dHVyZVBhcmVudEVsZW1l
bnQpYC4KKyAqICAgICogYHNjb3BlYDogb3B0aW9uYWwgYXJndW1lbnQgdG8gb3ZlcnJpZGUgdGhl
IHNjb3BlLgorICogICAgKiBgY2xvbmVMaW5raW5nRm5gOiBvcHRpb25hbCBhcmd1bWVudCB0byBj
cmVhdGUgY2xvbmVzIG9mIHRoZSBvcmlnaW5hbCB0cmFuc2NsdWRlZCBjb250ZW50LgorICogICAg
KiBgZnV0dXJlUGFyZW50RWxlbWVudGA6CisgKiAgICAgICAgKiBkZWZpbmVzIHRoZSBwYXJlbnQg
dG8gd2hpY2ggdGhlIGBjbG9uZUxpbmtpbmdGbmAgd2lsbCBhZGQgdGhlIGNsb25lZCBlbGVtZW50
cy4KKyAqICAgICAgICAqIGRlZmF1bHQ6IGAkZWxlbWVudC5wYXJlbnQoKWAgcmVzcC4gYCRlbGVt
ZW50YCBmb3IgYHRyYW5zY2x1ZGU6J2VsZW1lbnQnYCByZXNwLiBgdHJhbnNjbHVkZTp0cnVlYC4K
KyAqICAgICAgICAqIG9ubHkgbmVlZGVkIGZvciB0cmFuc2NsdWRlcyB0aGF0IGFyZSBhbGxvd2Vk
IHRvIGNvbnRhaW4gbm9uIGh0bWwgZWxlbWVudHMgKGUuZy4gU1ZHIGVsZW1lbnRzKQorICogICAg
ICAgICAgYW5kIHdoZW4gdGhlIGBjbG9uZUxpbmtpbkZuYCBpcyBwYXNzZWQsCisgKiAgICAgICAg
ICBhcyB0aG9zZSBlbGVtZW50cyBuZWVkIHRvIGNyZWF0ZWQgYW5kIGNsb25lZCBpbiBhIHNwZWNp
YWwgd2F5IHdoZW4gdGhleSBhcmUgZGVmaW5lZCBvdXRzaWRlIHRoZWlyCisgKiAgICAgICAgICB1
c3VhbCBjb250YWluZXJzIChlLmcuIGxpa2UgYDxzdmc+YCkuCisgKiAgICAgICAgKiBTZWUgYWxz
byB0aGUgYGRpcmVjdGl2ZS50ZW1wbGF0ZU5hbWVzcGFjZWAgcHJvcGVydHkuCisgKgorICoKKyAq
ICMjIyMgYHJlcXVpcmVgCisgKiBSZXF1aXJlIGFub3RoZXIgZGlyZWN0aXZlIGFuZCBpbmplY3Qg
aXRzIGNvbnRyb2xsZXIgYXMgdGhlIGZvdXJ0aCBhcmd1bWVudCB0byB0aGUgbGlua2luZyBmdW5j
dGlvbi4gVGhlCisgKiBgcmVxdWlyZWAgdGFrZXMgYSBzdHJpbmcgbmFtZSAob3IgYXJyYXkgb2Yg
c3RyaW5ncykgb2YgdGhlIGRpcmVjdGl2ZShzKSB0byBwYXNzIGluLiBJZiBhbiBhcnJheSBpcyB1
c2VkLCB0aGUKKyAqIGluamVjdGVkIGFyZ3VtZW50IHdpbGwgYmUgYW4gYXJyYXkgaW4gY29ycmVz
cG9uZGluZyBvcmRlci4gSWYgbm8gc3VjaCBkaXJlY3RpdmUgY2FuIGJlCisgKiBmb3VuZCwgb3Ig
aWYgdGhlIGRpcmVjdGl2ZSBkb2VzIG5vdCBoYXZlIGEgY29udHJvbGxlciwgdGhlbiBhbiBlcnJv
ciBpcyByYWlzZWQgKHVubGVzcyBubyBsaW5rIGZ1bmN0aW9uCisgKiBpcyBzcGVjaWZpZWQsIGlu
IHdoaWNoIGNhc2UgZXJyb3IgY2hlY2tpbmcgaXMgc2tpcHBlZCkuIFRoZSBuYW1lIGNhbiBiZSBw
cmVmaXhlZCB3aXRoOgorICoKKyAqICogKG5vIHByZWZpeCkgLSBMb2NhdGUgdGhlIHJlcXVpcmVk
IGNvbnRyb2xsZXIgb24gdGhlIGN1cnJlbnQgZWxlbWVudC4gVGhyb3cgYW4gZXJyb3IgaWYgbm90
IGZvdW5kLgorICogKiBgP2AgLSBBdHRlbXB0IHRvIGxvY2F0ZSB0aGUgcmVxdWlyZWQgY29udHJv
bGxlciBvciBwYXNzIGBudWxsYCB0byB0aGUgYGxpbmtgIGZuIGlmIG5vdCBmb3VuZC4KKyAqICog
YF5gIC0gTG9jYXRlIHRoZSByZXF1aXJlZCBjb250cm9sbGVyIGJ5IHNlYXJjaGluZyB0aGUgZWxl
bWVudCBhbmQgaXRzIHBhcmVudHMuIFRocm93IGFuIGVycm9yIGlmIG5vdCBmb3VuZC4KKyAqICog
YF5eYCAtIExvY2F0ZSB0aGUgcmVxdWlyZWQgY29udHJvbGxlciBieSBzZWFyY2hpbmcgdGhlIGVs
ZW1lbnQncyBwYXJlbnRzLiBUaHJvdyBhbiBlcnJvciBpZiBub3QgZm91bmQuCisgKiAqIGA/XmAg
LSBBdHRlbXB0IHRvIGxvY2F0ZSB0aGUgcmVxdWlyZWQgY29udHJvbGxlciBieSBzZWFyY2hpbmcg
dGhlIGVsZW1lbnQgYW5kIGl0cyBwYXJlbnRzIG9yIHBhc3MKKyAqICAgYG51bGxgIHRvIHRoZSBg
bGlua2AgZm4gaWYgbm90IGZvdW5kLgorICogKiBgP15eYCAtIEF0dGVtcHQgdG8gbG9jYXRlIHRo
ZSByZXF1aXJlZCBjb250cm9sbGVyIGJ5IHNlYXJjaGluZyB0aGUgZWxlbWVudCdzIHBhcmVudHMs
IG9yIHBhc3MKKyAqICAgYG51bGxgIHRvIHRoZSBgbGlua2AgZm4gaWYgbm90IGZvdW5kLgorICoK
KyAqCisgKiAjIyMjIGBjb250cm9sbGVyQXNgCisgKiBJZGVudGlmaWVyIG5hbWUgZm9yIGEgcmVm
ZXJlbmNlIHRvIHRoZSBjb250cm9sbGVyIGluIHRoZSBkaXJlY3RpdmUncyBzY29wZS4KKyAqIFRo
aXMgYWxsb3dzIHRoZSBjb250cm9sbGVyIHRvIGJlIHJlZmVyZW5jZWQgZnJvbSB0aGUgZGlyZWN0
aXZlIHRlbXBsYXRlLiBUaGUgZGlyZWN0aXZlCisgKiBuZWVkcyB0byBkZWZpbmUgYSBzY29wZSBm
b3IgdGhpcyBjb25maWd1cmF0aW9uIHRvIGJlIHVzZWQuIFVzZWZ1bCBpbiB0aGUgY2FzZSB3aGVu
CisgKiBkaXJlY3RpdmUgaXMgdXNlZCBhcyBjb21wb25lbnQuCisgKgorICoKKyAqICMjIyMgYHJl
c3RyaWN0YAorICogU3RyaW5nIG9mIHN1YnNldCBvZiBgRUFDTWAgd2hpY2ggcmVzdHJpY3RzIHRo
ZSBkaXJlY3RpdmUgdG8gYSBzcGVjaWZpYyBkaXJlY3RpdmUKKyAqIGRlY2xhcmF0aW9uIHN0eWxl
LiBJZiBvbWl0dGVkLCB0aGUgZGVmYXVsdHMgKGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzKSBhcmUg
dXNlZC4KKyAqCisgKiAqIGBFYCAtIEVsZW1lbnQgbmFtZSAoZGVmYXVsdCk6IGA8bXktZGlyZWN0
aXZlPjwvbXktZGlyZWN0aXZlPmAKKyAqICogYEFgIC0gQXR0cmlidXRlIChkZWZhdWx0KTogYDxk
aXYgbXktZGlyZWN0aXZlPSJleHAiPjwvZGl2PmAKKyAqICogYENgIC0gQ2xhc3M6IGA8ZGl2IGNs
YXNzPSJteS1kaXJlY3RpdmU6IGV4cDsiPjwvZGl2PmAKKyAqICogYE1gIC0gQ29tbWVudDogYDwh
LS0gZGlyZWN0aXZlOiBteS1kaXJlY3RpdmUgZXhwIC0tPmAKKyAqCisgKgorICogIyMjIyBgdGVt
cGxhdGVOYW1lc3BhY2VgCisgKiBTdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBkb2N1bWVudCB0eXBl
IHVzZWQgYnkgdGhlIG1hcmt1cCBpbiB0aGUgdGVtcGxhdGUuCisgKiBBbmd1bGFySlMgbmVlZHMg
dGhpcyBpbmZvcm1hdGlvbiBhcyB0aG9zZSBlbGVtZW50cyBuZWVkIHRvIGJlIGNyZWF0ZWQgYW5k
IGNsb25lZAorICogaW4gYSBzcGVjaWFsIHdheSB3aGVuIHRoZXkgYXJlIGRlZmluZWQgb3V0c2lk
ZSB0aGVpciB1c3VhbCBjb250YWluZXJzIGxpa2UgYDxzdmc+YCBhbmQgYDxtYXRoPmAuCisgKgor
ICogKiBgaHRtbGAgLSBBbGwgcm9vdCBub2RlcyBpbiB0aGUgdGVtcGxhdGUgYXJlIEhUTUwuIFJv
b3Qgbm9kZXMgbWF5IGFsc28gYmUKKyAqICAgdG9wLWxldmVsIGVsZW1lbnRzIHN1Y2ggYXMgYDxz
dmc+YCBvciBgPG1hdGg+YC4KKyAqICogYHN2Z2AgLSBUaGUgcm9vdCBub2RlcyBpbiB0aGUgdGVt
cGxhdGUgYXJlIFNWRyBlbGVtZW50cyAoZXhjbHVkaW5nIGA8bWF0aD5gKS4KKyAqICogYG1hdGhg
IC0gVGhlIHJvb3Qgbm9kZXMgaW4gdGhlIHRlbXBsYXRlIGFyZSBNYXRoTUwgZWxlbWVudHMgKGV4
Y2x1ZGluZyBgPHN2Zz5gKS4KKyAqCisgKiBJZiBubyBgdGVtcGxhdGVOYW1lc3BhY2VgIGlzIHNw
ZWNpZmllZCwgdGhlbiB0aGUgbmFtZXNwYWNlIGlzIGNvbnNpZGVyZWQgdG8gYmUgYGh0bWxgLgor
ICoKKyAqICMjIyMgYHRlbXBsYXRlYAorICogSFRNTCBtYXJrdXAgdGhhdCBtYXk6CisgKiAqIFJl
cGxhY2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBkaXJlY3RpdmUncyBlbGVtZW50IChkZWZhdWx0KS4K
KyAqICogUmVwbGFjZSB0aGUgZGlyZWN0aXZlJ3MgZWxlbWVudCBpdHNlbGYgKGlmIGByZXBsYWNl
YCBpcyB0cnVlIC0gREVQUkVDQVRFRCkuCisgKiAqIFdyYXAgdGhlIGNvbnRlbnRzIG9mIHRoZSBk
aXJlY3RpdmUncyBlbGVtZW50IChpZiBgdHJhbnNjbHVkZWAgaXMgdHJ1ZSkuCisgKgorICogVmFs
dWUgbWF5IGJlOgorICoKKyAqICogQSBzdHJpbmcuIEZvciBleGFtcGxlIGA8ZGl2IHJlZC1vbi1o
b3Zlcj57e2RlbGV0ZV9zdHJ9fTwvZGl2PmAuCisgKiAqIEEgZnVuY3Rpb24gd2hpY2ggdGFrZXMg
dHdvIGFyZ3VtZW50cyBgdEVsZW1lbnRgIGFuZCBgdEF0dHJzYCAoZGVzY3JpYmVkIGluIHRoZSBg
Y29tcGlsZWAKKyAqICAgZnVuY3Rpb24gYXBpIGJlbG93KSBhbmQgcmV0dXJucyBhIHN0cmluZyB2
YWx1ZS4KKyAqCisgKgorICogIyMjIyBgdGVtcGxhdGVVcmxgCisgKiBUaGlzIGlzIHNpbWlsYXIg
dG8gYHRlbXBsYXRlYCBidXQgdGhlIHRlbXBsYXRlIGlzIGxvYWRlZCBmcm9tIHRoZSBzcGVjaWZp
ZWQgVVJMLCBhc3luY2hyb25vdXNseS4KKyAqCisgKiBCZWNhdXNlIHRlbXBsYXRlIGxvYWRpbmcg
aXMgYXN5bmNocm9ub3VzIHRoZSBjb21waWxlciB3aWxsIHN1c3BlbmQgY29tcGlsYXRpb24gb2Yg
ZGlyZWN0aXZlcyBvbiB0aGF0IGVsZW1lbnQKKyAqIGZvciBsYXRlciB3aGVuIHRoZSB0ZW1wbGF0
ZSBoYXMgYmVlbiByZXNvbHZlZC4gIEluIHRoZSBtZWFudGltZSBpdCB3aWxsIGNvbnRpbnVlIHRv
IGNvbXBpbGUgYW5kIGxpbmsKKyAqIHNpYmxpbmcgYW5kIHBhcmVudCBlbGVtZW50cyBhcyB0aG91
Z2ggdGhpcyBlbGVtZW50IGhhZCBub3QgY29udGFpbmVkIGFueSBkaXJlY3RpdmVzLgorICoKKyAq
IFRoZSBjb21waWxlciBkb2VzIG5vdCBzdXNwZW5kIHRoZSBlbnRpcmUgY29tcGlsYXRpb24gdG8g
d2FpdCBmb3IgdGVtcGxhdGVzIHRvIGJlIGxvYWRlZCBiZWNhdXNlIHRoaXMKKyAqIHdvdWxkIHJl
c3VsdCBpbiB0aGUgd2hvbGUgYXBwICJzdGFsbGluZyIgdW50aWwgYWxsIHRlbXBsYXRlcyBhcmUg
bG9hZGVkIGFzeW5jaHJvbm91c2x5IC0gZXZlbiBpbiB0aGUKKyAqIGNhc2Ugd2hlbiBvbmx5IG9u
ZSBkZWVwbHkgbmVzdGVkIGRpcmVjdGl2ZSBoYXMgYHRlbXBsYXRlVXJsYC4KKyAqCisgKiBUZW1w
bGF0ZSBsb2FkaW5nIGlzIGFzeW5jaHJvbm91cyBldmVuIGlmIHRoZSB0ZW1wbGF0ZSBoYXMgYmVl
biBwcmVsb2FkZWQgaW50byB0aGUge0BsaW5rICR0ZW1wbGF0ZUNhY2hlfQorICoKKyAqIFlvdSBj
YW4gc3BlY2lmeSBgdGVtcGxhdGVVcmxgIGFzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgVVJM
IG9yIGFzIGEgZnVuY3Rpb24gd2hpY2ggdGFrZXMgdHdvCisgKiBhcmd1bWVudHMgYHRFbGVtZW50
YCBhbmQgYHRBdHRyc2AgKGRlc2NyaWJlZCBpbiB0aGUgYGNvbXBpbGVgIGZ1bmN0aW9uIGFwaSBi
ZWxvdykgYW5kIHJldHVybnMKKyAqIGEgc3RyaW5nIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgdXJs
LiAgSW4gZWl0aGVyIGNhc2UsIHRoZSB0ZW1wbGF0ZSBVUkwgaXMgcGFzc2VkIHRocm91Z2gge0Bs
aW5rCisgKiAkc2NlI2dldFRydXN0ZWRSZXNvdXJjZVVybCAkc2NlLmdldFRydXN0ZWRSZXNvdXJj
ZVVybH0uCisgKgorICoKKyAqICMjIyMgYHJlcGxhY2VgIChbKkRFUFJFQ0FURUQqIV0sIHdpbGwg
YmUgcmVtb3ZlZCBpbiBuZXh0IG1ham9yIHJlbGVhc2UgLSBpLmUuIHYyLjApCisgKiBzcGVjaWZ5
IHdoYXQgdGhlIHRlbXBsYXRlIHNob3VsZCByZXBsYWNlLiBEZWZhdWx0cyB0byBgZmFsc2VgLgor
ICoKKyAqICogYHRydWVgIC0gdGhlIHRlbXBsYXRlIHdpbGwgcmVwbGFjZSB0aGUgZGlyZWN0aXZl
J3MgZWxlbWVudC4KKyAqICogYGZhbHNlYCAtIHRoZSB0ZW1wbGF0ZSB3aWxsIHJlcGxhY2UgdGhl
IGNvbnRlbnRzIG9mIHRoZSBkaXJlY3RpdmUncyBlbGVtZW50LgorICoKKyAqIFRoZSByZXBsYWNl
bWVudCBwcm9jZXNzIG1pZ3JhdGVzIGFsbCBvZiB0aGUgYXR0cmlidXRlcyAvIGNsYXNzZXMgZnJv
bSB0aGUgb2xkIGVsZW1lbnQgdG8gdGhlIG5ldworICogb25lLiBTZWUgdGhlIHtAbGluayBndWlk
ZS9kaXJlY3RpdmUjdGVtcGxhdGUtZXhwYW5kaW5nLWRpcmVjdGl2ZQorICogRGlyZWN0aXZlcyBH
dWlkZX0gZm9yIGFuIGV4YW1wbGUuCisgKgorICogVGhlcmUgYXJlIHZlcnkgZmV3IHNjZW5hcmlv
cyB3aGVyZSBlbGVtZW50IHJlcGxhY2VtZW50IGlzIHJlcXVpcmVkIGZvciB0aGUgYXBwbGljYXRp
b24gZnVuY3Rpb24sCisgKiB0aGUgbWFpbiBvbmUgYmVpbmcgcmV1c2FibGUgY3VzdG9tIGNvbXBv
bmVudHMgdGhhdCBhcmUgdXNlZCB3aXRoaW4gU1ZHIGNvbnRleHRzCisgKiAoYmVjYXVzZSBTVkcg
ZG9lc24ndCB3b3JrIHdpdGggY3VzdG9tIGVsZW1lbnRzIGluIHRoZSBET00gdHJlZSkuCisgKgor
ICogIyMjIyBgdHJhbnNjbHVkZWAKKyAqIEV4dHJhY3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBlbGVt
ZW50IHdoZXJlIHRoZSBkaXJlY3RpdmUgYXBwZWFycyBhbmQgbWFrZSBpdCBhdmFpbGFibGUgdG8g
dGhlIGRpcmVjdGl2ZS4KKyAqIFRoZSBjb250ZW50cyBhcmUgY29tcGlsZWQgYW5kIHByb3ZpZGVk
IHRvIHRoZSBkaXJlY3RpdmUgYXMgYSAqKnRyYW5zY2x1c2lvbiBmdW5jdGlvbioqLiBTZWUgdGhl
CisgKiB7QGxpbmsgJGNvbXBpbGUjdHJhbnNjbHVzaW9uIFRyYW5zY2x1c2lvbn0gc2VjdGlvbiBi
ZWxvdy4KKyAqCisgKiBUaGVyZSBhcmUgdHdvIGtpbmRzIG9mIHRyYW5zY2x1c2lvbiBkZXBlbmRp
bmcgdXBvbiB3aGV0aGVyIHlvdSB3YW50IHRvIHRyYW5zY2x1ZGUganVzdCB0aGUgY29udGVudHMg
b2YgdGhlCisgKiBkaXJlY3RpdmUncyBlbGVtZW50IG9yIHRoZSBlbnRpcmUgZWxlbWVudDoKKyAq
CisgKiAqIGB0cnVlYCAtIHRyYW5zY2x1ZGUgdGhlIGNvbnRlbnQgKGkuZS4gdGhlIGNoaWxkIG5v
ZGVzKSBvZiB0aGUgZGlyZWN0aXZlJ3MgZWxlbWVudC4KKyAqICogYCdlbGVtZW50J2AgLSB0cmFu
c2NsdWRlIHRoZSB3aG9sZSBvZiB0aGUgZGlyZWN0aXZlJ3MgZWxlbWVudCBpbmNsdWRpbmcgYW55
IGRpcmVjdGl2ZXMgb24gdGhpcworICogICBlbGVtZW50IHRoYXQgZGVmaW5lZCBhdCBhIGxvd2Vy
IHByaW9yaXR5IHRoYW4gdGhpcyBkaXJlY3RpdmUuIFdoZW4gdXNlZCwgdGhlIGB0ZW1wbGF0ZWAK
KyAqICAgcHJvcGVydHkgaXMgaWdub3JlZC4KKyAqCisgKgorICogIyMjIyBgY29tcGlsZWAKKyAq
CisgKiBgYGBqcworICogICBmdW5jdGlvbiBjb21waWxlKHRFbGVtZW50LCB0QXR0cnMsIHRyYW5z
Y2x1ZGUpIHsgLi4uIH0KKyAqIGBgYAorICoKKyAqIFRoZSBjb21waWxlIGZ1bmN0aW9uIGRlYWxz
IHdpdGggdHJhbnNmb3JtaW5nIHRoZSB0ZW1wbGF0ZSBET00uIFNpbmNlIG1vc3QgZGlyZWN0aXZl
cyBkbyBub3QgZG8KKyAqIHRlbXBsYXRlIHRyYW5zZm9ybWF0aW9uLCBpdCBpcyBub3QgdXNlZCBv
ZnRlbi4gVGhlIGNvbXBpbGUgZnVuY3Rpb24gdGFrZXMgdGhlIGZvbGxvd2luZyBhcmd1bWVudHM6
CisgKgorICogICAqIGB0RWxlbWVudGAgLSB0ZW1wbGF0ZSBlbGVtZW50IC0gVGhlIGVsZW1lbnQg
d2hlcmUgdGhlIGRpcmVjdGl2ZSBoYXMgYmVlbiBkZWNsYXJlZC4gSXQgaXMKKyAqICAgICBzYWZl
IHRvIGRvIHRlbXBsYXRlIHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBlbGVtZW50IGFuZCBjaGlsZCBl
bGVtZW50cyBvbmx5LgorICoKKyAqICAgKiBgdEF0dHJzYCAtIHRlbXBsYXRlIGF0dHJpYnV0ZXMg
LSBOb3JtYWxpemVkIGxpc3Qgb2YgYXR0cmlidXRlcyBkZWNsYXJlZCBvbiB0aGlzIGVsZW1lbnQg
c2hhcmVkCisgKiAgICAgYmV0d2VlbiBhbGwgZGlyZWN0aXZlIGNvbXBpbGUgZnVuY3Rpb25zLgor
ICoKKyAqICAgKiBgdHJhbnNjbHVkZWAgLSAgWypERVBSRUNBVEVEKiFdIEEgdHJhbnNjbHVkZSBs
aW5raW5nIGZ1bmN0aW9uOiBgZnVuY3Rpb24oc2NvcGUsIGNsb25lTGlua2luZ0ZuKWAKKyAqCisg
KiA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC13YXJuaW5nIj4KKyAqICoqTm90ZToqKiBUaGUgdGVt
cGxhdGUgaW5zdGFuY2UgYW5kIHRoZSBsaW5rIGluc3RhbmNlIG1heSBiZSBkaWZmZXJlbnQgb2Jq
ZWN0cyBpZiB0aGUgdGVtcGxhdGUgaGFzCisgKiBiZWVuIGNsb25lZC4gRm9yIHRoaXMgcmVhc29u
IGl0IGlzICoqbm90Kiogc2FmZSB0byBkbyBhbnl0aGluZyBvdGhlciB0aGFuIERPTSB0cmFuc2Zv
cm1hdGlvbnMgdGhhdAorICogYXBwbHkgdG8gYWxsIGNsb25lZCBET00gbm9kZXMgd2l0aGluIHRo
ZSBjb21waWxlIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIERPTSBsaXN0ZW5lciByZWdpc3RyYXRp
b24KKyAqIHNob3VsZCBiZSBkb25lIGluIGEgbGlua2luZyBmdW5jdGlvbiByYXRoZXIgdGhhbiBp
biBhIGNvbXBpbGUgZnVuY3Rpb24uCisgKiA8L2Rpdj4KKworICogPGRpdiBjbGFzcz0iYWxlcnQg
YWxlcnQtd2FybmluZyI+CisgKiAqKk5vdGU6KiogVGhlIGNvbXBpbGUgZnVuY3Rpb24gY2Fubm90
IGhhbmRsZSBkaXJlY3RpdmVzIHRoYXQgcmVjdXJzaXZlbHkgdXNlIHRoZW1zZWx2ZXMgaW4gdGhl
aXIKKyAqIG93biB0ZW1wbGF0ZXMgb3IgY29tcGlsZSBmdW5jdGlvbnMuIENvbXBpbGluZyB0aGVz
ZSBkaXJlY3RpdmVzIHJlc3VsdHMgaW4gYW4gaW5maW5pdGUgbG9vcCBhbmQgYQorICogc3RhY2sg
b3ZlcmZsb3cgZXJyb3JzLgorICoKKyAqIFRoaXMgY2FuIGJlIGF2b2lkZWQgYnkgbWFudWFsbHkg
dXNpbmcgJGNvbXBpbGUgaW4gdGhlIHBvc3RMaW5rIGZ1bmN0aW9uIHRvIGltcGVyYXRpdmVseSBj
b21waWxlCisgKiBhIGRpcmVjdGl2ZSdzIHRlbXBsYXRlIGluc3RlYWQgb2YgcmVseWluZyBvbiBh
dXRvbWF0aWMgdGVtcGxhdGUgY29tcGlsYXRpb24gdmlhIGB0ZW1wbGF0ZWAgb3IKKyAqIGB0ZW1w
bGF0ZVVybGAgZGVjbGFyYXRpb24gb3IgbWFudWFsIGNvbXBpbGF0aW9uIGluc2lkZSB0aGUgY29t
cGlsZSBmdW5jdGlvbi4KKyAqIDwvZGl2PgorICoKKyAqIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0
LWRhbmdlciI+CisgKiAqKk5vdGU6KiogVGhlIGB0cmFuc2NsdWRlYCBmdW5jdGlvbiB0aGF0IGlz
IHBhc3NlZCB0byB0aGUgY29tcGlsZSBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCBhcyBpdAorICog
ICBlLmcuIGRvZXMgbm90IGtub3cgYWJvdXQgdGhlIHJpZ2h0IG91dGVyIHNjb3BlLiBQbGVhc2Ug
dXNlIHRoZSB0cmFuc2NsdWRlIGZ1bmN0aW9uIHRoYXQgaXMgcGFzc2VkCisgKiAgIHRvIHRoZSBs
aW5rIGZ1bmN0aW9uIGluc3RlYWQuCisgKiA8L2Rpdj4KKworICogQSBjb21waWxlIGZ1bmN0aW9u
IGNhbiBoYXZlIGEgcmV0dXJuIHZhbHVlIHdoaWNoIGNhbiBiZSBlaXRoZXIgYSBmdW5jdGlvbiBv
ciBhbiBvYmplY3QuCisgKgorICogKiByZXR1cm5pbmcgYSAocG9zdC1saW5rKSBmdW5jdGlvbiAt
IGlzIGVxdWl2YWxlbnQgdG8gcmVnaXN0ZXJpbmcgdGhlIGxpbmtpbmcgZnVuY3Rpb24gdmlhIHRo
ZQorICogICBgbGlua2AgcHJvcGVydHkgb2YgdGhlIGNvbmZpZyBvYmplY3Qgd2hlbiB0aGUgY29t
cGlsZSBmdW5jdGlvbiBpcyBlbXB0eS4KKyAqCisgKiAqIHJldHVybmluZyBhbiBvYmplY3Qgd2l0
aCBmdW5jdGlvbihzKSByZWdpc3RlcmVkIHZpYSBgcHJlYCBhbmQgYHBvc3RgIHByb3BlcnRpZXMg
LSBhbGxvd3MgeW91IHRvCisgKiAgIGNvbnRyb2wgd2hlbiBhIGxpbmtpbmcgZnVuY3Rpb24gc2hv
dWxkIGJlIGNhbGxlZCBkdXJpbmcgdGhlIGxpbmtpbmcgcGhhc2UuIFNlZSBpbmZvIGFib3V0Cisg
KiAgIHByZS1saW5raW5nIGFuZCBwb3N0LWxpbmtpbmcgZnVuY3Rpb25zIGJlbG93LgorICoKKyAq
CisgKiAjIyMjIGBsaW5rYAorICogVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIG9ubHkgaWYgdGhlIGBj
b21waWxlYCBwcm9wZXJ0eSBpcyBub3QgZGVmaW5lZC4KKyAqCisgKiBgYGBqcworICogICBmdW5j
dGlvbiBsaW5rKHNjb3BlLCBpRWxlbWVudCwgaUF0dHJzLCBjb250cm9sbGVyLCB0cmFuc2NsdWRl
Rm4pIHsgLi4uIH0KKyAqIGBgYAorICoKKyAqIFRoZSBsaW5rIGZ1bmN0aW9uIGlzIHJlc3BvbnNp
YmxlIGZvciByZWdpc3RlcmluZyBET00gbGlzdGVuZXJzIGFzIHdlbGwgYXMgdXBkYXRpbmcgdGhl
IERPTS4gSXQgaXMKKyAqIGV4ZWN1dGVkIGFmdGVyIHRoZSB0ZW1wbGF0ZSBoYXMgYmVlbiBjbG9u
ZWQuIFRoaXMgaXMgd2hlcmUgbW9zdCBvZiB0aGUgZGlyZWN0aXZlIGxvZ2ljIHdpbGwgYmUKKyAq
IHB1dC4KKyAqCisgKiAgICogYHNjb3BlYCAtIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIFNj
b3BlfSAtIFRoZSBzY29wZSB0byBiZSB1c2VkIGJ5IHRoZQorICogICAgIGRpcmVjdGl2ZSBmb3Ig
cmVnaXN0ZXJpbmcge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJHdhdGNoIHdhdGNoZXN9Lgor
ICoKKyAqICAgKiBgaUVsZW1lbnRgIC0gaW5zdGFuY2UgZWxlbWVudCAtIFRoZSBlbGVtZW50IHdo
ZXJlIHRoZSBkaXJlY3RpdmUgaXMgdG8gYmUgdXNlZC4gSXQgaXMgc2FmZSB0bworICogICAgIG1h
bmlwdWxhdGUgdGhlIGNoaWxkcmVuIG9mIHRoZSBlbGVtZW50IG9ubHkgaW4gYHBvc3RMaW5rYCBm
dW5jdGlvbiBzaW5jZSB0aGUgY2hpbGRyZW4gaGF2ZQorICogICAgIGFscmVhZHkgYmVlbiBsaW5r
ZWQuCisgKgorICogICAqIGBpQXR0cnNgIC0gaW5zdGFuY2UgYXR0cmlidXRlcyAtIE5vcm1hbGl6
ZWQgbGlzdCBvZiBhdHRyaWJ1dGVzIGRlY2xhcmVkIG9uIHRoaXMgZWxlbWVudCBzaGFyZWQKKyAq
ICAgICBiZXR3ZWVuIGFsbCBkaXJlY3RpdmUgbGlua2luZyBmdW5jdGlvbnMuCisgKgorICogICAq
IGBjb250cm9sbGVyYCAtIHRoZSBkaXJlY3RpdmUncyByZXF1aXJlZCBjb250cm9sbGVyIGluc3Rh
bmNlKHMpIC0gSW5zdGFuY2VzIGFyZSBzaGFyZWQKKyAqICAgICBhbW9uZyBhbGwgZGlyZWN0aXZl
cywgd2hpY2ggYWxsb3dzIHRoZSBkaXJlY3RpdmVzIHRvIHVzZSB0aGUgY29udHJvbGxlcnMgYXMg
YSBjb21tdW5pY2F0aW9uCisgKiAgICAgY2hhbm5lbC4gVGhlIGV4YWN0IHZhbHVlIGRlcGVuZHMg
b24gdGhlIGRpcmVjdGl2ZSdzIGByZXF1aXJlYCBwcm9wZXJ0eToKKyAqICAgICAgICogbm8gY29u
dHJvbGxlcihzKSByZXF1aXJlZDogdGhlIGRpcmVjdGl2ZSdzIG93biBjb250cm9sbGVyLCBvciBg
dW5kZWZpbmVkYCBpZiBpdCBkb2Vzbid0IGhhdmUgb25lCisgKiAgICAgICAqIGBzdHJpbmdgOiB0
aGUgY29udHJvbGxlciBpbnN0YW5jZQorICogICAgICAgKiBgYXJyYXlgOiBhcnJheSBvZiBjb250
cm9sbGVyIGluc3RhbmNlcworICoKKyAqICAgICBJZiBhIHJlcXVpcmVkIGNvbnRyb2xsZXIgY2Fu
bm90IGJlIGZvdW5kLCBhbmQgaXQgaXMgb3B0aW9uYWwsIHRoZSBpbnN0YW5jZSBpcyBgbnVsbGAs
CisgKiAgICAgb3RoZXJ3aXNlIHRoZSB7QGxpbmsgZXJyb3I6JGNvbXBpbGU6Y3RyZXEgTWlzc2lu
ZyBSZXF1aXJlZCBDb250cm9sbGVyfSBlcnJvciBpcyB0aHJvd24uCisgKgorICogICAgIE5vdGUg
dGhhdCB5b3UgY2FuIGFsc28gcmVxdWlyZSB0aGUgZGlyZWN0aXZlJ3Mgb3duIGNvbnRyb2xsZXIg
LSBpdCB3aWxsIGJlIG1hZGUgYXZhaWxhYmxlIGxpa2UKKyAqICAgICBsaWtlIGFueSBvdGhlciBj
b250cm9sbGVyLgorICoKKyAqICAgKiBgdHJhbnNjbHVkZUZuYCAtIEEgdHJhbnNjbHVkZSBsaW5r
aW5nIGZ1bmN0aW9uIHByZS1ib3VuZCB0byB0aGUgY29ycmVjdCB0cmFuc2NsdXNpb24gc2NvcGUu
CisgKiAgICAgVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgYCR0cmFuc2NsdWRlYAorICogICAgIHBh
cmFtZXRlciBvZiBkaXJlY3RpdmUgY29udHJvbGxlcnMsIHNlZSB0aGVyZSBmb3IgZGV0YWlscy4K
KyAqICAgICBgZnVuY3Rpb24oW3Njb3BlXSwgY2xvbmVMaW5raW5nRm4sIGZ1dHVyZVBhcmVudEVs
ZW1lbnQpYC4KKyAqCisgKiAjIyMjIFByZS1saW5raW5nIGZ1bmN0aW9uCisgKgorICogRXhlY3V0
ZWQgYmVmb3JlIHRoZSBjaGlsZCBlbGVtZW50cyBhcmUgbGlua2VkLiBOb3Qgc2FmZSB0byBkbyBE
T00gdHJhbnNmb3JtYXRpb24gc2luY2UgdGhlCisgKiBjb21waWxlciBsaW5raW5nIGZ1bmN0aW9u
IHdpbGwgZmFpbCB0byBsb2NhdGUgdGhlIGNvcnJlY3QgZWxlbWVudHMgZm9yIGxpbmtpbmcuCisg
KgorICogIyMjIyBQb3N0LWxpbmtpbmcgZnVuY3Rpb24KKyAqCisgKiBFeGVjdXRlZCBhZnRlciB0
aGUgY2hpbGQgZWxlbWVudHMgYXJlIGxpbmtlZC4KKyAqCisgKiBOb3RlIHRoYXQgY2hpbGQgZWxl
bWVudHMgdGhhdCBjb250YWluIGB0ZW1wbGF0ZVVybGAgZGlyZWN0aXZlcyB3aWxsIG5vdCBoYXZl
IGJlZW4gY29tcGlsZWQKKyAqIGFuZCBsaW5rZWQgc2luY2UgdGhleSBhcmUgd2FpdGluZyBmb3Ig
dGhlaXIgdGVtcGxhdGUgdG8gbG9hZCBhc3luY2hyb25vdXNseSBhbmQgdGhlaXIgb3duCisgKiBj
b21waWxhdGlvbiBhbmQgbGlua2luZyBoYXMgYmVlbiBzdXNwZW5kZWQgdW50aWwgdGhhdCBvY2N1
cnMuCisgKgorICogSXQgaXMgc2FmZSB0byBkbyBET00gdHJhbnNmb3JtYXRpb24gaW4gdGhlIHBv
c3QtbGlua2luZyBmdW5jdGlvbiBvbiBlbGVtZW50cyB0aGF0IGFyZSBub3Qgd2FpdGluZworICog
Zm9yIHRoZWlyIGFzeW5jIHRlbXBsYXRlcyB0byBiZSByZXNvbHZlZC4KKyAqCisgKgorICogIyMj
IFRyYW5zY2x1c2lvbgorICoKKyAqIFRyYW5zY2x1c2lvbiBpcyB0aGUgcHJvY2VzcyBvZiBleHRy
YWN0aW5nIGEgY29sbGVjdGlvbiBvZiBET00gZWxlbWVudCBmcm9tIG9uZSBwYXJ0IG9mIHRoZSBE
T00gYW5kCisgKiBjb3B5aW5nIHRoZW0gdG8gYW5vdGhlciBwYXJ0IG9mIHRoZSBET00sIHdoaWxl
IG1haW50YWluaW5nIHRoZWlyIGNvbm5lY3Rpb24gdG8gdGhlIG9yaWdpbmFsIEFuZ3VsYXJKUwor
ICogc2NvcGUgZnJvbSB3aGVyZSB0aGV5IHdlcmUgdGFrZW4uCisgKgorICogVHJhbnNjbHVzaW9u
IGlzIHVzZWQgKG9mdGVuIHdpdGgge0BsaW5rIG5nVHJhbnNjbHVkZX0pIHRvIGluc2VydCB0aGUK
KyAqIG9yaWdpbmFsIGNvbnRlbnRzIG9mIGEgZGlyZWN0aXZlJ3MgZWxlbWVudCBpbnRvIGEgc3Bl
Y2lmaWVkIHBsYWNlIGluIHRoZSB0ZW1wbGF0ZSBvZiB0aGUgZGlyZWN0aXZlLgorICogVGhlIGJl
bmVmaXQgb2YgdHJhbnNjbHVzaW9uLCBvdmVyIHNpbXBseSBtb3ZpbmcgdGhlIERPTSBlbGVtZW50
cyBtYW51YWxseSwgaXMgdGhhdCB0aGUgdHJhbnNjbHVkZWQKKyAqIGNvbnRlbnQgaGFzIGFjY2Vz
cyB0byB0aGUgcHJvcGVydGllcyBvbiB0aGUgc2NvcGUgZnJvbSB3aGljaCBpdCB3YXMgdGFrZW4s
IGV2ZW4gaWYgdGhlIGRpcmVjdGl2ZQorICogaGFzIGlzb2xhdGVkIHNjb3BlLgorICogU2VlIHRo
ZSB7QGxpbmsgZ3VpZGUvZGlyZWN0aXZlI2NyZWF0aW5nLWEtZGlyZWN0aXZlLXRoYXQtd3JhcHMt
b3RoZXItZWxlbWVudHMgRGlyZWN0aXZlcyBHdWlkZX0uCisgKgorICogVGhpcyBtYWtlcyBpdCBw
b3NzaWJsZSBmb3IgdGhlIHdpZGdldCB0byBoYXZlIHByaXZhdGUgc3RhdGUgZm9yIGl0cyB0ZW1w
bGF0ZSwgd2hpbGUgdGhlIHRyYW5zY2x1ZGVkCisgKiBjb250ZW50IGhhcyBhY2Nlc3MgdG8gaXRz
IG9yaWdpbmF0aW5nIHNjb3BlLgorICoKKyAqIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LXdhcm5p
bmciPgorICogKipOb3RlOioqIFdoZW4gdGVzdGluZyBhbiBlbGVtZW50IHRyYW5zY2x1ZGUgZGly
ZWN0aXZlIHlvdSBtdXN0IG5vdCBwbGFjZSB0aGUgZGlyZWN0aXZlIGF0IHRoZSByb290IG9mIHRo
ZQorICogRE9NIGZyYWdtZW50IHRoYXQgaXMgYmVpbmcgY29tcGlsZWQuIFNlZSB7QGxpbmsgZ3Vp
ZGUvdW5pdC10ZXN0aW5nI3Rlc3RpbmctdHJhbnNjbHVzaW9uLWRpcmVjdGl2ZXMKKyAqIFRlc3Rp
bmcgVHJhbnNjbHVzaW9uIERpcmVjdGl2ZXN9LgorICogPC9kaXY+CisgKgorICogIyMjIyBUcmFu
c2NsdXNpb24gRnVuY3Rpb25zCisgKgorICogV2hlbiBhIGRpcmVjdGl2ZSByZXF1ZXN0cyB0cmFu
c2NsdXNpb24sIHRoZSBjb21waWxlciBleHRyYWN0cyBpdHMgY29udGVudHMgYW5kIHByb3ZpZGVz
IGEgKip0cmFuc2NsdXNpb24KKyAqIGZ1bmN0aW9uKiogdG8gdGhlIGRpcmVjdGl2ZSdzIGBsaW5r
YCBmdW5jdGlvbiBhbmQgYGNvbnRyb2xsZXJgLiBUaGlzIHRyYW5zY2x1c2lvbiBmdW5jdGlvbiBp
cyBhIHNwZWNpYWwKKyAqICoqbGlua2luZyBmdW5jdGlvbioqIHRoYXQgd2lsbCByZXR1cm4gdGhl
IGNvbXBpbGVkIGNvbnRlbnRzIGxpbmtlZCB0byBhIG5ldyB0cmFuc2NsdXNpb24gc2NvcGUuCisg
KgorICogPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyI+CisgKiBJZiB5b3UgYXJlIGp1c3Qg
dXNpbmcge0BsaW5rIG5nVHJhbnNjbHVkZX0gdGhlbiB5b3UgZG9uJ3QgbmVlZCB0byB3b3JyeSBh
Ym91dCB0aGlzIGZ1bmN0aW9uLCBzaW5jZQorICogbmdUcmFuc2NsdWRlIHdpbGwgZGVhbCB3aXRo
IGl0IGZvciB1cy4KKyAqIDwvZGl2PgorICoKKyAqIElmIHlvdSB3YW50IHRvIG1hbnVhbGx5IGNv
bnRyb2wgdGhlIGluc2VydGlvbiBhbmQgcmVtb3ZhbCBvZiB0aGUgdHJhbnNjbHVkZWQgY29udGVu
dCBpbiB5b3VyIGRpcmVjdGl2ZQorICogdGhlbiB5b3UgbXVzdCB1c2UgdGhpcyB0cmFuc2NsdWRl
IGZ1bmN0aW9uLiBXaGVuIHlvdSBjYWxsIGEgdHJhbnNjbHVkZSBmdW5jdGlvbiBpdCByZXR1cm5z
IGEgYSBqcUxpdGUvSlF1ZXJ5CisgKiBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgY29tcGlsZWQg
RE9NLCB3aGljaCBpcyBsaW5rZWQgdG8gdGhlIGNvcnJlY3QgdHJhbnNjbHVzaW9uIHNjb3BlLgor
ICoKKyAqIFdoZW4geW91IGNhbGwgYSB0cmFuc2NsdXNpb24gZnVuY3Rpb24geW91IGNhbiBwYXNz
IGluIGEgKipjbG9uZSBhdHRhY2ggZnVuY3Rpb24qKi4gVGhpcyBmdW5jdGlvbiBhY2NlcHRzCisg
KiB0d28gcGFyYW1ldGVycywgYGZ1bmN0aW9uKGNsb25lLCBzY29wZSkgeyAuLi4gfWAsIHdoZXJl
IHRoZSBgY2xvbmVgIGlzIGEgZnJlc2ggY29tcGlsZWQgY29weSBvZiB5b3VyIHRyYW5zY2x1ZGVk
CisgKiBjb250ZW50IGFuZCB0aGUgYHNjb3BlYCBpcyB0aGUgbmV3bHkgY3JlYXRlZCB0cmFuc2Ns
dXNpb24gc2NvcGUsIHRvIHdoaWNoIHRoZSBjbG9uZSBpcyBib3VuZC4KKyAqCisgKiA8ZGl2IGNs
YXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAqICoqQmVzdCBQcmFjdGljZSoqOiBBbHdheXMgcHJv
dmlkZSBhIGBjbG9uZUZuYCAoY2xvbmUgYXR0YWNoIGZ1bmN0aW9uKSB3aGVuIHlvdSBjYWxsIGEg
dHJhbnNsdWRlIGZ1bmN0aW9uCisgKiBzaW5jZSB5b3UgdGhlbiBnZXQgYSBmcmVzaCBjbG9uZSBv
ZiB0aGUgb3JpZ2luYWwgRE9NIGFuZCBhbHNvIGhhdmUgYWNjZXNzIHRvIHRoZSBuZXcgdHJhbnNj
bHVzaW9uIHNjb3BlLgorICogPC9kaXY+CisgKgorICogSXQgaXMgbm9ybWFsIHByYWN0aWNlIHRv
IGF0dGFjaCB5b3VyIHRyYW5zY2x1ZGVkIGNvbnRlbnQgKGBjbG9uZWApIHRvIHRoZSBET00gaW5z
aWRlIHlvdXIgKipjbG9uZQorICogYXR0YWNoIGZ1bmN0aW9uKio6CisgKgorICogYGBganMKKyAq
IHZhciB0cmFuc2NsdWRlZENvbnRlbnQsIHRyYW5zY2x1c2lvblNjb3BlOworICoKKyAqICR0cmFu
c2NsdWRlKGZ1bmN0aW9uKGNsb25lLCBzY29wZSkgeworICogICBlbGVtZW50LmFwcGVuZChjbG9u
ZSk7CisgKiAgIHRyYW5zY2x1ZGVkQ29udGVudCA9IGNsb25lOworICogICB0cmFuc2NsdXNpb25T
Y29wZSA9IHNjb3BlOworICogfSk7CisgKiBgYGAKKyAqCisgKiBMYXRlciwgaWYgeW91IHdhbnQg
dG8gcmVtb3ZlIHRoZSB0cmFuc2NsdWRlZCBjb250ZW50IGZyb20geW91ciBET00gdGhlbiB5b3Ug
c2hvdWxkIGFsc28gZGVzdHJveSB0aGUKKyAqIGFzc29jaWF0ZWQgdHJhbnNjbHVzaW9uIHNjb3Bl
OgorICoKKyAqIGBgYGpzCisgKiB0cmFuc2NsdWRlZENvbnRlbnQucmVtb3ZlKCk7CisgKiB0cmFu
c2NsdXNpb25TY29wZS4kZGVzdHJveSgpOworICogYGBgCisgKgorICogPGRpdiBjbGFzcz0iYWxl
cnQgYWxlcnQtaW5mbyI+CisgKiAqKkJlc3QgUHJhY3RpY2UqKjogaWYgeW91IGludGVuZCB0byBh
ZGQgYW5kIHJlbW92ZSB0cmFuc2NsdWRlZCBjb250ZW50IG1hbnVhbGx5IGluIHlvdXIgZGlyZWN0
aXZlCisgKiAoYnkgY2FsbGluZyB0aGUgdHJhbnNjbHVkZSBmdW5jdGlvbiB0byBnZXQgdGhlIERP
TSBhbmQgY2FsbGluZyBgZWxlbWVudC5yZW1vdmUoKWAgdG8gcmVtb3ZlIGl0KSwKKyAqIHRoZW4g
eW91IGFyZSBhbHNvIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGAkZGVzdHJveWAgb24gdGhlIHRy
YW5zY2x1c2lvbiBzY29wZS4KKyAqIDwvZGl2PgorICoKKyAqIFRoZSBidWlsdC1pbiBET00gbWFu
aXB1bGF0aW9uIGRpcmVjdGl2ZXMsIHN1Y2ggYXMge0BsaW5rIG5nSWZ9LCB7QGxpbmsgbmdTd2l0
Y2h9IGFuZCB7QGxpbmsgbmdSZXBlYXR9CisgKiBhdXRvbWF0aWNhbGx5IGRlc3Ryb3kgdGhlaXIg
dHJhbnNsdWRlZCBjbG9uZXMgYXMgbmVjZXNzYXJ5IHNvIHlvdSBkbyBub3QgbmVlZCB0byB3b3Jy
eSBhYm91dCB0aGlzIGlmCisgKiB5b3UgYXJlIHNpbXBseSB1c2luZyB7QGxpbmsgbmdUcmFuc2Ns
dWRlfSB0byBpbmplY3QgdGhlIHRyYW5zY2x1c2lvbiBpbnRvIHlvdXIgZGlyZWN0aXZlLgorICoK
KyAqCisgKiAjIyMjIFRyYW5zY2x1c2lvbiBTY29wZXMKKyAqCisgKiBXaGVuIHlvdSBjYWxsIGEg
dHJhbnNjbHVkZSBmdW5jdGlvbiBpdCByZXR1cm5zIGEgRE9NIGZyYWdtZW50IHRoYXQgaXMgcHJl
LWJvdW5kIHRvIGEgKip0cmFuc2NsdXNpb24KKyAqIHNjb3BlKiouIFRoaXMgc2NvcGUgaXMgc3Bl
Y2lhbCwgaW4gdGhhdCBpdCBpcyBhIGNoaWxkIG9mIHRoZSBkaXJlY3RpdmUncyBzY29wZSAoYW5k
IHNvIGdldHMgZGVzdHJveWVkCisgKiB3aGVuIHRoZSBkaXJlY3RpdmUncyBzY29wZSBnZXRzIGRl
c3Ryb3llZCkgYnV0IGl0IGluaGVyaXRzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBzY29wZSBmcm9t
IHdoaWNoIGl0CisgKiB3YXMgdGFrZW4uCisgKgorICogRm9yIGV4YW1wbGUgY29uc2lkZXIgYSBk
aXJlY3RpdmUgdGhhdCB1c2VzIHRyYW5zY2x1c2lvbiBhbmQgaXNvbGF0ZWQgc2NvcGUuIFRoZSBE
T00gaGllcmFyY2h5IG1pZ2h0IGxvb2sKKyAqIGxpa2UgdGhpczoKKyAqCisgKiBgYGBodG1sCisg
KiA8ZGl2IG5nLWFwcD4KKyAqICAgPGRpdiBpc29sYXRlPgorICogICAgIDxkaXYgdHJhbnNjbHVz
aW9uPgorICogICAgIDwvZGl2PgorICogICA8L2Rpdj4KKyAqIDwvZGl2PgorICogYGBgCisgKgor
ICogVGhlIGAkcGFyZW50YCBzY29wZSBoaWVyYXJjaHkgd2lsbCBsb29rIGxpa2UgdGhpczoKKyAq
CisgKiBgYGAKKyAqIC0gJHJvb3RTY29wZQorICogICAtIGlzb2xhdGUKKyAqICAgICAtIHRyYW5z
Y2x1c2lvbgorICogYGBgCisgKgorICogYnV0IHRoZSBzY29wZXMgd2lsbCBpbmhlcml0IHByb3Rv
dHlwaWNhbGx5IGZyb20gZGlmZmVyZW50IHNjb3BlcyB0byB0aGVpciBgJHBhcmVudGAuCisgKgor
ICogYGBgCisgKiAtICRyb290U2NvcGUKKyAqICAgLSB0cmFuc2NsdXNpb24KKyAqIC0gaXNvbGF0
ZQorICogYGBgCisgKgorICoKKyAqICMjIyBBdHRyaWJ1dGVzCisgKgorICogVGhlIHtAbGluayBu
Zy4kY29tcGlsZS5kaXJlY3RpdmUuQXR0cmlidXRlcyBBdHRyaWJ1dGVzfSBvYmplY3QgLSBwYXNz
ZWQgYXMgYSBwYXJhbWV0ZXIgaW4gdGhlCisgKiBgbGluaygpYCBvciBgY29tcGlsZSgpYCBmdW5j
dGlvbnMuIEl0IGhhcyBhIHZhcmlldHkgb2YgdXNlcy4KKyAqCisgKiBhY2Nlc3NpbmcgKk5vcm1h
bGl6ZWQgYXR0cmlidXRlIG5hbWVzOioKKyAqIERpcmVjdGl2ZXMgbGlrZSAnbmdCaW5kJyBjYW4g
YmUgZXhwcmVzc2VkIGluIG1hbnkgd2F5czogJ25nOmJpbmQnLCBgZGF0YS1uZy1iaW5kYCwgb3Ig
J3gtbmctYmluZCcuCisgKiB0aGUgYXR0cmlidXRlcyBvYmplY3QgYWxsb3dzIGZvciBub3JtYWxp
emVkIGFjY2VzcyB0bworICogICB0aGUgYXR0cmlidXRlcy4KKyAqCisgKiAqICpEaXJlY3RpdmUg
aW50ZXItY29tbXVuaWNhdGlvbjoqIEFsbCBkaXJlY3RpdmVzIHNoYXJlIHRoZSBzYW1lIGluc3Rh
bmNlIG9mIHRoZSBhdHRyaWJ1dGVzCisgKiAgIG9iamVjdCB3aGljaCBhbGxvd3MgdGhlIGRpcmVj
dGl2ZXMgdG8gdXNlIHRoZSBhdHRyaWJ1dGVzIG9iamVjdCBhcyBpbnRlciBkaXJlY3RpdmUKKyAq
ICAgY29tbXVuaWNhdGlvbi4KKyAqCisgKiAqICpTdXBwb3J0cyBpbnRlcnBvbGF0aW9uOiogSW50
ZXJwb2xhdGlvbiBhdHRyaWJ1dGVzIGFyZSBhc3NpZ25lZCB0byB0aGUgYXR0cmlidXRlIG9iamVj
dAorICogICBhbGxvd2luZyBvdGhlciBkaXJlY3RpdmVzIHRvIHJlYWQgdGhlIGludGVycG9sYXRl
ZCB2YWx1ZS4KKyAqCisgKiAqICpPYnNlcnZpbmcgaW50ZXJwb2xhdGVkIGF0dHJpYnV0ZXM6KiBV
c2UgYCRvYnNlcnZlYCB0byBvYnNlcnZlIHRoZSB2YWx1ZSBjaGFuZ2VzIG9mIGF0dHJpYnV0ZXMK
KyAqICAgdGhhdCBjb250YWluIGludGVycG9sYXRpb24gKGUuZy4gYHNyYz0ie3tiYXJ9fSJgKS4g
Tm90IG9ubHkgaXMgdGhpcyB2ZXJ5IGVmZmljaWVudCBidXQgaXQncyBhbHNvCisgKiAgIHRoZSBv
bmx5IHdheSB0byBlYXNpbHkgZ2V0IHRoZSBhY3R1YWwgdmFsdWUgYmVjYXVzZSBkdXJpbmcgdGhl
IGxpbmtpbmcgcGhhc2UgdGhlIGludGVycG9sYXRpb24KKyAqICAgaGFzbid0IGJlZW4gZXZhbHVh
dGVkIHlldCBhbmQgc28gdGhlIHZhbHVlIGlzIGF0IHRoaXMgdGltZSBzZXQgdG8gYHVuZGVmaW5l
ZGAuCisgKgorICogYGBganMKKyAqIGZ1bmN0aW9uIGxpbmtpbmdGbihzY29wZSwgZWxtLCBhdHRy
cywgY3RybCkgeworICogICAvLyBnZXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZQorICogICBjb25zb2xl
LmxvZyhhdHRycy5uZ01vZGVsKTsKKyAqCisgKiAgIC8vIGNoYW5nZSB0aGUgYXR0cmlidXRlCisg
KiAgIGF0dHJzLiRzZXQoJ25nTW9kZWwnLCAnbmV3IHZhbHVlJyk7CisgKgorICogICAvLyBvYnNl
cnZlIGNoYW5nZXMgdG8gaW50ZXJwb2xhdGVkIGF0dHJpYnV0ZQorICogICBhdHRycy4kb2JzZXJ2
ZSgnbmdNb2RlbCcsIGZ1bmN0aW9uKHZhbHVlKSB7CisgKiAgICAgY29uc29sZS5sb2coJ25nTW9k
ZWwgaGFzIGNoYW5nZWQgdmFsdWUgdG8gJyArIHZhbHVlKTsKKyAqICAgfSk7CisgKiB9CisgKiBg
YGAKKyAqCisgKiAjIyBFeGFtcGxlCisgKgorICogPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtd2Fy
bmluZyI+CisgKiAqKk5vdGUqKjogVHlwaWNhbGx5IGRpcmVjdGl2ZXMgYXJlIHJlZ2lzdGVyZWQg
d2l0aCBgbW9kdWxlLmRpcmVjdGl2ZWAuIFRoZSBleGFtcGxlIGJlbG93IGlzCisgKiB0byBpbGx1
c3RyYXRlIGhvdyBgJGNvbXBpbGVgIHdvcmtzLgorICogPC9kaXY+CisgKgorIDxleGFtcGxlIG1v
ZHVsZT0iY29tcGlsZUV4YW1wbGUiPgorICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAg
PHNjcmlwdD4KKyAgICAgIGFuZ3VsYXIubW9kdWxlKCdjb21waWxlRXhhbXBsZScsIFtdLCBmdW5j
dGlvbigkY29tcGlsZVByb3ZpZGVyKSB7CisgICAgICAgIC8vIGNvbmZpZ3VyZSBuZXcgJ2NvbXBp
bGUnIGRpcmVjdGl2ZSBieSBwYXNzaW5nIGEgZGlyZWN0aXZlCisgICAgICAgIC8vIGZhY3Rvcnkg
ZnVuY3Rpb24uIFRoZSBmYWN0b3J5IGZ1bmN0aW9uIGluamVjdHMgdGhlICckY29tcGlsZScKKyAg
ICAgICAgJGNvbXBpbGVQcm92aWRlci5kaXJlY3RpdmUoJ2NvbXBpbGUnLCBmdW5jdGlvbigkY29t
cGlsZSkgeworICAgICAgICAgIC8vIGRpcmVjdGl2ZSBmYWN0b3J5IGNyZWF0ZXMgYSBsaW5rIGZ1
bmN0aW9uCisgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRycykg
eworICAgICAgICAgICAgc2NvcGUuJHdhdGNoKAorICAgICAgICAgICAgICBmdW5jdGlvbihzY29w
ZSkgeworICAgICAgICAgICAgICAgICAvLyB3YXRjaCB0aGUgJ2NvbXBpbGUnIGV4cHJlc3Npb24g
Zm9yIGNoYW5nZXMKKyAgICAgICAgICAgICAgICByZXR1cm4gc2NvcGUuJGV2YWwoYXR0cnMuY29t
cGlsZSk7CisgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgIGZ1bmN0aW9uKHZhbHVlKSB7
CisgICAgICAgICAgICAgICAgLy8gd2hlbiB0aGUgJ2NvbXBpbGUnIGV4cHJlc3Npb24gY2hhbmdl
cworICAgICAgICAgICAgICAgIC8vIGFzc2lnbiBpdCBpbnRvIHRoZSBjdXJyZW50IERPTQorICAg
ICAgICAgICAgICAgIGVsZW1lbnQuaHRtbCh2YWx1ZSk7CisKKyAgICAgICAgICAgICAgICAvLyBj
b21waWxlIHRoZSBuZXcgRE9NIGFuZCBsaW5rIGl0IHRvIHRoZSBjdXJyZW50CisgICAgICAgICAg
ICAgICAgLy8gc2NvcGUuCisgICAgICAgICAgICAgICAgLy8gTk9URTogd2Ugb25seSBjb21waWxl
IC5jaGlsZE5vZGVzIHNvIHRoYXQKKyAgICAgICAgICAgICAgICAvLyB3ZSBkb24ndCBnZXQgaW50
byBpbmZpbml0ZSBsb29wIGNvbXBpbGluZyBvdXJzZWx2ZXMKKyAgICAgICAgICAgICAgICAkY29t
cGlsZShlbGVtZW50LmNvbnRlbnRzKCkpKHNjb3BlKTsKKyAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgKTsKKyAgICAgICAgICB9OworICAgICAgICB9KTsKKyAgICAgIH0pCisgICAgICAuY29u
dHJvbGxlcignR3JlZXRlckNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkg
eworICAgICAgICAkc2NvcGUubmFtZSA9ICdBbmd1bGFyJzsKKyAgICAgICAgJHNjb3BlLmh0bWwg
PSAnSGVsbG8ge3tuYW1lfX0nOworICAgICAgfV0pOworICAgIDwvc2NyaXB0PgorICAgIDxkaXYg
bmctY29udHJvbGxlcj0iR3JlZXRlckNvbnRyb2xsZXIiPgorICAgICAgPGlucHV0IG5nLW1vZGVs
PSJuYW1lIj4gPGJyLz4KKyAgICAgIDx0ZXh0YXJlYSBuZy1tb2RlbD0iaHRtbCI+PC90ZXh0YXJl
YT4gPGJyLz4KKyAgICAgIDxkaXYgY29tcGlsZT0iaHRtbCI+PC9kaXY+CisgICAgPC9kaXY+Cisg
ICA8L2ZpbGU+CisgICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFjdG9y
Ij4KKyAgICAgaXQoJ3Nob3VsZCBhdXRvIGNvbXBpbGUnLCBmdW5jdGlvbigpIHsKKyAgICAgICB2
YXIgdGV4dGFyZWEgPSAkKCd0ZXh0YXJlYScpOworICAgICAgIHZhciBvdXRwdXQgPSAkKCdkaXZb
Y29tcGlsZV0nKTsKKyAgICAgICAvLyBUaGUgaW5pdGlhbCBzdGF0ZSByZWFkcyAnSGVsbG8gQW5n
dWxhcicuCisgICAgICAgZXhwZWN0KG91dHB1dC5nZXRUZXh0KCkpLnRvQmUoJ0hlbGxvIEFuZ3Vs
YXInKTsKKyAgICAgICB0ZXh0YXJlYS5jbGVhcigpOworICAgICAgIHRleHRhcmVhLnNlbmRLZXlz
KCd7e25hbWV9fSEnKTsKKyAgICAgICBleHBlY3Qob3V0cHV0LmdldFRleHQoKSkudG9CZSgnQW5n
dWxhciEnKTsKKyAgICAgfSk7CisgICA8L2ZpbGU+CisgPC9leGFtcGxlPgorCisgKgorICoKKyAq
IEBwYXJhbSB7c3RyaW5nfERPTUVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCBvciBIVE1MIHN0cmlu
ZyB0byBjb21waWxlIGludG8gYSB0ZW1wbGF0ZSBmdW5jdGlvbi4KKyAqIEBwYXJhbSB7ZnVuY3Rp
b24oYW5ndWxhci5TY29wZSwgY2xvbmVBdHRhY2hGbj0pfSB0cmFuc2NsdWRlIGZ1bmN0aW9uIGF2
YWlsYWJsZSB0byBkaXJlY3RpdmVzIC0gREVQUkVDQVRFRC4KKyAqCisgKiA8ZGl2IGNsYXNzPSJh
bGVydCBhbGVydC1kYW5nZXIiPgorICogKipOb3RlOioqIFBhc3NpbmcgYSBgdHJhbnNjbHVkZWAg
ZnVuY3Rpb24gdG8gdGhlICRjb21waWxlIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQsIGFzIGl0Cisg
KiAgIGUuZy4gd2lsbCBub3QgdXNlIHRoZSByaWdodCBvdXRlciBzY29wZS4gUGxlYXNlIHBhc3Mg
dGhlIHRyYW5zY2x1ZGUgZnVuY3Rpb24gYXMgYQorICogICBgcGFyZW50Qm91bmRUcmFuc2NsdWRl
Rm5gIHRvIHRoZSBsaW5rIGZ1bmN0aW9uIGluc3RlYWQuCisgKiA8L2Rpdj4KKyAqCisgKiBAcGFy
YW0ge251bWJlcn0gbWF4UHJpb3JpdHkgb25seSBhcHBseSBkaXJlY3RpdmVzIGxvd2VyIHRoYW4g
Z2l2ZW4gcHJpb3JpdHkgKE9ubHkgZWZmZWN0cyB0aGUKKyAqICAgICAgICAgICAgICAgICByb290
IGVsZW1lbnQocyksIG5vdCB0aGVpciBjaGlsZHJlbikKKyAqIEByZXR1cm5zIHtmdW5jdGlvbihz
Y29wZSwgY2xvbmVBdHRhY2hGbj0sIG9wdGlvbnM9KX0gYSBsaW5rIGZ1bmN0aW9uIHdoaWNoIGlz
IHVzZWQgdG8gYmluZCB0ZW1wbGF0ZQorICogKGEgRE9NIGVsZW1lbnQvdHJlZSkgdG8gYSBzY29w
ZS4gV2hlcmU6CisgKgorICogICogYHNjb3BlYCAtIEEge0BsaW5rIG5nLiRyb290U2NvcGUuU2Nv
cGUgU2NvcGV9IHRvIGJpbmQgdG8uCisgKiAgKiBgY2xvbmVBdHRhY2hGbmAgLSBJZiBgY2xvbmVB
dHRhY2hGbmAgaXMgcHJvdmlkZWQsIHRoZW4gdGhlIGxpbmsgZnVuY3Rpb24gd2lsbCBjbG9uZSB0
aGUKKyAqICBgdGVtcGxhdGVgIGFuZCBjYWxsIHRoZSBgY2xvbmVBdHRhY2hGbmAgZnVuY3Rpb24g
YWxsb3dpbmcgdGhlIGNhbGxlciB0byBhdHRhY2ggdGhlCisgKiAgY2xvbmVkIGVsZW1lbnRzIHRv
IHRoZSBET00gZG9jdW1lbnQgYXQgdGhlIGFwcHJvcHJpYXRlIHBsYWNlLiBUaGUgYGNsb25lQXR0
YWNoRm5gIGlzCisgKiAgY2FsbGVkIGFzOiA8YnIvPiBgY2xvbmVBdHRhY2hGbihjbG9uZWRFbGVt
ZW50LCBzY29wZSlgIHdoZXJlOgorICoKKyAqICAgICAgKiBgY2xvbmVkRWxlbWVudGAgLSBpcyBh
IGNsb25lIG9mIHRoZSBvcmlnaW5hbCBgZWxlbWVudGAgcGFzc2VkIGludG8gdGhlIGNvbXBpbGVy
LgorICogICAgICAqIGBzY29wZWAgLSBpcyB0aGUgY3VycmVudCBzY29wZSB3aXRoIHdoaWNoIHRo
ZSBsaW5raW5nIGZ1bmN0aW9uIGlzIHdvcmtpbmcgd2l0aC4KKyAqCisgKiAgKiBgb3B0aW9uc2Ag
LSBBbiBvcHRpb25hbCBvYmplY3QgaGFzaCB3aXRoIGxpbmtpbmcgb3B0aW9ucy4gSWYgYG9wdGlv
bnNgIGlzIHByb3ZpZGVkLCB0aGVuIHRoZSBmb2xsb3dpbmcKKyAqICBrZXlzIG1heSBiZSB1c2Vk
IHRvIGNvbnRyb2wgbGlua2luZyBiZWhhdmlvcjoKKyAqCisgKiAgICAgICogYHBhcmVudEJvdW5k
VHJhbnNjbHVkZUZuYCAtIHRoZSB0cmFuc2NsdWRlIGZ1bmN0aW9uIG1hZGUgYXZhaWxhYmxlIHRv
CisgKiAgICAgICAgZGlyZWN0aXZlczsgaWYgZ2l2ZW4sIGl0IHdpbGwgYmUgcGFzc2VkIHRocm91
Z2ggdG8gdGhlIGxpbmsgZnVuY3Rpb25zIG9mCisgKiAgICAgICAgZGlyZWN0aXZlcyBmb3VuZCBp
biBgZWxlbWVudGAgZHVyaW5nIGNvbXBpbGF0aW9uLgorICogICAgICAqIGB0cmFuc2NsdWRlQ29u
dHJvbGxlcnNgIC0gYW4gb2JqZWN0IGhhc2ggd2l0aCBrZXlzIHRoYXQgbWFwIGNvbnRyb2xsZXIg
bmFtZXMKKyAqICAgICAgICB0byBjb250cm9sbGVyIGluc3RhbmNlczsgaWYgZ2l2ZW4sIGl0IHdp
bGwgbWFrZSB0aGUgY29udHJvbGxlcnMKKyAqICAgICAgICBhdmFpbGFibGUgdG8gZGlyZWN0aXZl
cy4KKyAqICAgICAgKiBgZnV0dXJlUGFyZW50RWxlbWVudGAgLSBkZWZpbmVzIHRoZSBwYXJlbnQg
dG8gd2hpY2ggdGhlIGBjbG9uZUF0dGFjaEZuYCB3aWxsIGFkZAorICogICAgICAgIHRoZSBjbG9u
ZWQgZWxlbWVudHM7IG9ubHkgbmVlZGVkIGZvciB0cmFuc2NsdWRlcyB0aGF0IGFyZSBhbGxvd2Vk
IHRvIGNvbnRhaW4gbm9uIGh0bWwKKyAqICAgICAgICBlbGVtZW50cyAoZS5nLiBTVkcgZWxlbWVu
dHMpLiBTZWUgYWxzbyB0aGUgZGlyZWN0aXZlLmNvbnRyb2xsZXIgcHJvcGVydHkuCisgKgorICog
Q2FsbGluZyB0aGUgbGlua2luZyBmdW5jdGlvbiByZXR1cm5zIHRoZSBlbGVtZW50IG9mIHRoZSB0
ZW1wbGF0ZS4gSXQgaXMgZWl0aGVyIHRoZSBvcmlnaW5hbAorICogZWxlbWVudCBwYXNzZWQgaW4s
IG9yIHRoZSBjbG9uZSBvZiB0aGUgZWxlbWVudCBpZiB0aGUgYGNsb25lQXR0YWNoRm5gIGlzIHBy
b3ZpZGVkLgorICoKKyAqIEFmdGVyIGxpbmtpbmcgdGhlIHZpZXcgaXMgbm90IHVwZGF0ZWQgdW50
aWwgYWZ0ZXIgYSBjYWxsIHRvICRkaWdlc3Qgd2hpY2ggdHlwaWNhbGx5IGlzIGRvbmUgYnkKKyAq
IEFuZ3VsYXIgYXV0b21hdGljYWxseS4KKyAqCisgKiBJZiB5b3UgbmVlZCBhY2Nlc3MgdG8gdGhl
IGJvdW5kIHZpZXcsIHRoZXJlIGFyZSB0d28gd2F5cyB0byBkbyBpdDoKKyAqCisgKiAtIElmIHlv
dSBhcmUgbm90IGFza2luZyB0aGUgbGlua2luZyBmdW5jdGlvbiB0byBjbG9uZSB0aGUgdGVtcGxh
dGUsIGNyZWF0ZSB0aGUgRE9NIGVsZW1lbnQocykKKyAqICAgYmVmb3JlIHlvdSBzZW5kIHRoZW0g
dG8gdGhlIGNvbXBpbGVyIGFuZCBrZWVwIHRoaXMgcmVmZXJlbmNlIGFyb3VuZC4KKyAqICAgYGBg
anMKKyAqICAgICB2YXIgZWxlbWVudCA9ICRjb21waWxlKCc8cD57e3RvdGFsfX08L3A+Jykoc2Nv
cGUpOworICogICBgYGAKKyAqCisgKiAtIGlmIG9uIHRoZSBvdGhlciBoYW5kLCB5b3UgbmVlZCB0
aGUgZWxlbWVudCB0byBiZSBjbG9uZWQsIHRoZSB2aWV3IHJlZmVyZW5jZSBmcm9tIHRoZSBvcmln
aW5hbAorICogICBleGFtcGxlIHdvdWxkIG5vdCBwb2ludCB0byB0aGUgY2xvbmUsIGJ1dCByYXRo
ZXIgdG8gdGhlIG9yaWdpbmFsIHRlbXBsYXRlIHRoYXQgd2FzIGNsb25lZC4gSW4KKyAqICAgdGhp
cyBjYXNlLCB5b3UgY2FuIGFjY2VzcyB0aGUgY2xvbmUgdmlhIHRoZSBjbG9uZUF0dGFjaEZuOgor
ICogICBgYGBqcworICogICAgIHZhciB0ZW1wbGF0ZUVsZW1lbnQgPSBhbmd1bGFyLmVsZW1lbnQo
JzxwPnt7dG90YWx9fTwvcD4nKSwKKyAqICAgICAgICAgc2NvcGUgPSAuLi4uOworICoKKyAqICAg
ICB2YXIgY2xvbmVkRWxlbWVudCA9ICRjb21waWxlKHRlbXBsYXRlRWxlbWVudCkoc2NvcGUsIGZ1
bmN0aW9uKGNsb25lZEVsZW1lbnQsIHNjb3BlKSB7CisgKiAgICAgICAvL2F0dGFjaCB0aGUgY2xv
bmUgdG8gRE9NIGRvY3VtZW50IGF0IHRoZSByaWdodCBwbGFjZQorICogICAgIH0pOworICoKKyAq
ICAgICAvL25vdyB3ZSBoYXZlIHJlZmVyZW5jZSB0byB0aGUgY2xvbmVkIERPTSB2aWEgYGNsb25l
ZEVsZW1lbnRgCisgKiAgIGBgYAorICoKKyAqCisgKiBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRo
ZSBjb21waWxlciB3b3Jrcywgc2VlIHRoZQorICoge0BsaW5rIGd1aWRlL2NvbXBpbGVyIEFuZ3Vs
YXIgSFRNTCBDb21waWxlcn0gc2VjdGlvbiBvZiB0aGUgRGV2ZWxvcGVyIEd1aWRlLgorICovCisK
K3ZhciAkY29tcGlsZU1pbkVyciA9IG1pbkVycignJGNvbXBpbGUnKTsKKworLyoqCisgKiBAbmdk
b2MgcHJvdmlkZXIKKyAqIEBuYW1lICRjb21waWxlUHJvdmlkZXIKKyAqCisgKiBAZGVzY3JpcHRp
b24KKyAqLworJENvbXBpbGVQcm92aWRlci4kaW5qZWN0ID0gWyckcHJvdmlkZScsICckJHNhbml0
aXplVXJpUHJvdmlkZXInXTsKK2Z1bmN0aW9uICRDb21waWxlUHJvdmlkZXIoJHByb3ZpZGUsICQk
c2FuaXRpemVVcmlQcm92aWRlcikgeworICB2YXIgaGFzRGlyZWN0aXZlcyA9IHt9LAorICAgICAg
U3VmZml4ID0gJ0RpcmVjdGl2ZScsCisgICAgICBDT01NRU5UX0RJUkVDVElWRV9SRUdFWFAgPSAv
XlxzKmRpcmVjdGl2ZVw6XHMqKFtcd1wtXSspXHMrKC4qKSQvLAorICAgICAgQ0xBU1NfRElSRUNU
SVZFX1JFR0VYUCA9IC8oKFtcd1wtXSspKD86XDooW147XSspKT87PykvLAorICAgICAgQUxMX09S
X05PVEhJTkdfQVRUUlMgPSBtYWtlTWFwKCduZ1NyYyxuZ1NyY3NldCxzcmMsc3Jjc2V0JyksCisg
ICAgICBSRVFVSVJFX1BSRUZJWF9SRUdFWFAgPSAvXig/OihcXlxePyk/KFw/KT8oXF5cXj8pPyk/
LzsKKworICAvLyBSZWY6IGh0dHA6Ly9kZXZlbG9wZXJzLndoYXR3Zy5vcmcvd2ViYXBwYXBpcy5o
dG1sI2V2ZW50LWhhbmRsZXItaWRsLWF0dHJpYnV0ZXMKKyAgLy8gVGhlIGFzc3VtcHRpb24gaXMg
dGhhdCBmdXR1cmUgRE9NIGV2ZW50IGF0dHJpYnV0ZSBuYW1lcyB3aWxsIGJlZ2luIHdpdGgKKyAg
Ly8gJ29uJyBhbmQgYmUgY29tcG9zZWQgb2Ygb25seSBFbmdsaXNoIGxldHRlcnMuCisgIHZhciBF
VkVOVF9IQU5ETEVSX0FUVFJfUkVHRVhQID0gL14ob25bYS16XSt8Zm9ybWFjdGlvbikkLzsKKwor
ICBmdW5jdGlvbiBwYXJzZUlzb2xhdGVCaW5kaW5ncyhzY29wZSwgZGlyZWN0aXZlTmFtZSwgaXND
b250cm9sbGVyKSB7CisgICAgdmFyIExPQ0FMX1JFR0VYUCA9IC9eXHMqKFtAJl18PShcKj8pKShc
Pz8pXHMqKFx3KilccyokLzsKKworICAgIHZhciBiaW5kaW5ncyA9IHt9OworCisgICAgZm9yRWFj
aChzY29wZSwgZnVuY3Rpb24oZGVmaW5pdGlvbiwgc2NvcGVOYW1lKSB7CisgICAgICB2YXIgbWF0
Y2ggPSBkZWZpbml0aW9uLm1hdGNoKExPQ0FMX1JFR0VYUCk7CisKKyAgICAgIGlmICghbWF0Y2gp
IHsKKyAgICAgICAgdGhyb3cgJGNvbXBpbGVNaW5FcnIoJ2lzY3AnLAorICAgICAgICAgICAgIklu
dmFsaWQgezN9IGZvciBkaXJlY3RpdmUgJ3swfScuIiArCisgICAgICAgICAgICAiIERlZmluaXRp
b246IHsuLi4gezF9OiAnezJ9JyAuLi59IiwKKyAgICAgICAgICAgIGRpcmVjdGl2ZU5hbWUsIHNj
b3BlTmFtZSwgZGVmaW5pdGlvbiwKKyAgICAgICAgICAgIChpc0NvbnRyb2xsZXIgPyAiY29udHJv
bGxlciBiaW5kaW5ncyBkZWZpbml0aW9uIiA6CisgICAgICAgICAgICAiaXNvbGF0ZSBzY29wZSBk
ZWZpbml0aW9uIikpOworICAgICAgfQorCisgICAgICBiaW5kaW5nc1tzY29wZU5hbWVdID0gewor
ICAgICAgICBtb2RlOiBtYXRjaFsxXVswXSwKKyAgICAgICAgY29sbGVjdGlvbjogbWF0Y2hbMl0g
PT09ICcqJywKKyAgICAgICAgb3B0aW9uYWw6IG1hdGNoWzNdID09PSAnPycsCisgICAgICAgIGF0
dHJOYW1lOiBtYXRjaFs0XSB8fCBzY29wZU5hbWUKKyAgICAgIH07CisgICAgfSk7CisKKyAgICBy
ZXR1cm4gYmluZGluZ3M7CisgIH0KKworICBmdW5jdGlvbiBwYXJzZURpcmVjdGl2ZUJpbmRpbmdz
KGRpcmVjdGl2ZSwgZGlyZWN0aXZlTmFtZSkgeworICAgIHZhciBiaW5kaW5ncyA9IHsKKyAgICAg
IGlzb2xhdGVTY29wZTogbnVsbCwKKyAgICAgIGJpbmRUb0NvbnRyb2xsZXI6IG51bGwKKyAgICB9
OworICAgIGlmIChpc09iamVjdChkaXJlY3RpdmUuc2NvcGUpKSB7CisgICAgICBpZiAoZGlyZWN0
aXZlLmJpbmRUb0NvbnRyb2xsZXIgPT09IHRydWUpIHsKKyAgICAgICAgYmluZGluZ3MuYmluZFRv
Q29udHJvbGxlciA9IHBhcnNlSXNvbGF0ZUJpbmRpbmdzKGRpcmVjdGl2ZS5zY29wZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVj
dGl2ZU5hbWUsIHRydWUpOworICAgICAgICBiaW5kaW5ncy5pc29sYXRlU2NvcGUgPSB7fTsKKyAg
ICAgIH0gZWxzZSB7CisgICAgICAgIGJpbmRpbmdzLmlzb2xhdGVTY29wZSA9IHBhcnNlSXNvbGF0
ZUJpbmRpbmdzKGRpcmVjdGl2ZS5zY29wZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlTmFtZSwgZmFsc2UpOworICAgICAgfQor
ICAgIH0KKyAgICBpZiAoaXNPYmplY3QoZGlyZWN0aXZlLmJpbmRUb0NvbnRyb2xsZXIpKSB7Cisg
ICAgICBiaW5kaW5ncy5iaW5kVG9Db250cm9sbGVyID0KKyAgICAgICAgICBwYXJzZUlzb2xhdGVC
aW5kaW5ncyhkaXJlY3RpdmUuYmluZFRvQ29udHJvbGxlciwgZGlyZWN0aXZlTmFtZSwgdHJ1ZSk7
CisgICAgfQorICAgIGlmIChpc09iamVjdChiaW5kaW5ncy5iaW5kVG9Db250cm9sbGVyKSkgewor
ICAgICAgdmFyIGNvbnRyb2xsZXIgPSBkaXJlY3RpdmUuY29udHJvbGxlcjsKKyAgICAgIHZhciBj
b250cm9sbGVyQXMgPSBkaXJlY3RpdmUuY29udHJvbGxlckFzOworICAgICAgaWYgKCFjb250cm9s
bGVyKSB7CisgICAgICAgIC8vIFRoZXJlIGlzIG5vIGNvbnRyb2xsZXIsIHRoZXJlIG1heSBvciBt
YXkgbm90IGJlIGEgY29udHJvbGxlckFzIHByb3BlcnR5CisgICAgICAgIHRocm93ICRjb21waWxl
TWluRXJyKCdub2N0cmwnLAorICAgICAgICAgICAgICAiQ2Fubm90IGJpbmQgdG8gY29udHJvbGxl
ciB3aXRob3V0IGRpcmVjdGl2ZSAnezB9J3MgY29udHJvbGxlci4iLAorICAgICAgICAgICAgICBk
aXJlY3RpdmVOYW1lKTsKKyAgICAgIH0gZWxzZSBpZiAoIWlkZW50aWZpZXJGb3JDb250cm9sbGVy
KGNvbnRyb2xsZXIsIGNvbnRyb2xsZXJBcykpIHsKKyAgICAgICAgLy8gVGhlcmUgaXMgYSBjb250
cm9sbGVyLCBidXQgbm8gaWRlbnRpZmllciBvciBjb250cm9sbGVyQXMgcHJvcGVydHkKKyAgICAg
ICAgdGhyb3cgJGNvbXBpbGVNaW5FcnIoJ25vaWRlbnQnLAorICAgICAgICAgICAgICAiQ2Fubm90
IGJpbmQgdG8gY29udHJvbGxlciB3aXRob3V0IGlkZW50aWZpZXIgZm9yIGRpcmVjdGl2ZSAnezB9
Jy4iLAorICAgICAgICAgICAgICBkaXJlY3RpdmVOYW1lKTsKKyAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIGJpbmRpbmdzOworICB9CisKKyAgZnVuY3Rpb24gYXNzZXJ0VmFsaWREaXJlY3RpdmVO
YW1lKG5hbWUpIHsKKyAgICB2YXIgbGV0dGVyID0gbmFtZS5jaGFyQXQoMCk7CisgICAgaWYgKCFs
ZXR0ZXIgfHwgbGV0dGVyICE9PSBsb3dlcmNhc2UobGV0dGVyKSkgeworICAgICAgdGhyb3cgJGNv
bXBpbGVNaW5FcnIoJ2JhZGRpcicsICJEaXJlY3RpdmUgbmFtZSAnezB9JyBpcyBpbnZhbGlkLiBU
aGUgZmlyc3QgY2hhcmFjdGVyIG11c3QgYmUgYSBsb3dlcmNhc2UgbGV0dGVyIiwgbmFtZSk7Cisg
ICAgfQorICAgIGlmIChuYW1lICE9PSBuYW1lLnRyaW0oKSkgeworICAgICAgdGhyb3cgJGNvbXBp
bGVNaW5FcnIoJ2JhZGRpcicsCisgICAgICAgICAgICAiRGlyZWN0aXZlIG5hbWUgJ3swfScgaXMg
aW52YWxpZC4gVGhlIG5hbWUgc2hvdWxkIG5vdCBjb250YWluIGxlYWRpbmcgb3IgdHJhaWxpbmcg
d2hpdGVzcGFjZXMiLAorICAgICAgICAgICAgbmFtZSk7CisgICAgfQorICB9CisKKyAgLyoqCisg
ICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgJGNvbXBpbGVQcm92aWRlciNkaXJlY3RpdmUK
KyAgICogQGtpbmQgZnVuY3Rpb24KKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIFJlZ2lz
dGVyIGEgbmV3IGRpcmVjdGl2ZSB3aXRoIHRoZSBjb21waWxlci4KKyAgICoKKyAgICogQHBhcmFt
IHtzdHJpbmd8T2JqZWN0fSBuYW1lIE5hbWUgb2YgdGhlIGRpcmVjdGl2ZSBpbiBjYW1lbC1jYXNl
IChpLmUuIDxjb2RlPm5nQmluZDwvY29kZT4gd2hpY2gKKyAgICogICAgd2lsbCBtYXRjaCBhcyA8
Y29kZT5uZy1iaW5kPC9jb2RlPiksIG9yIGFuIG9iamVjdCBtYXAgb2YgZGlyZWN0aXZlcyB3aGVy
ZSB0aGUga2V5cyBhcmUgdGhlCisgICAqICAgIG5hbWVzIGFuZCB0aGUgdmFsdWVzIGFyZSB0aGUg
ZmFjdG9yaWVzLgorICAgKiBAcGFyYW0ge0Z1bmN0aW9ufEFycmF5fSBkaXJlY3RpdmVGYWN0b3J5
IEFuIGluamVjdGFibGUgZGlyZWN0aXZlIGZhY3RvcnkgZnVuY3Rpb24uIFNlZQorICAgKiAgICB7
QGxpbmsgZ3VpZGUvZGlyZWN0aXZlfSBmb3IgbW9yZSBpbmZvLgorICAgKiBAcmV0dXJucyB7bmcu
JGNvbXBpbGVQcm92aWRlcn0gU2VsZiBmb3IgY2hhaW5pbmcuCisgICAqLworICAgdGhpcy5kaXJl
Y3RpdmUgPSBmdW5jdGlvbiByZWdpc3RlckRpcmVjdGl2ZShuYW1lLCBkaXJlY3RpdmVGYWN0b3J5
KSB7CisgICAgYXNzZXJ0Tm90SGFzT3duUHJvcGVydHkobmFtZSwgJ2RpcmVjdGl2ZScpOworICAg
IGlmIChpc1N0cmluZyhuYW1lKSkgeworICAgICAgYXNzZXJ0VmFsaWREaXJlY3RpdmVOYW1lKG5h
bWUpOworICAgICAgYXNzZXJ0QXJnKGRpcmVjdGl2ZUZhY3RvcnksICdkaXJlY3RpdmVGYWN0b3J5
Jyk7CisgICAgICBpZiAoIWhhc0RpcmVjdGl2ZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHsKKyAg
ICAgICAgaGFzRGlyZWN0aXZlc1tuYW1lXSA9IFtdOworICAgICAgICAkcHJvdmlkZS5mYWN0b3J5
KG5hbWUgKyBTdWZmaXgsIFsnJGluamVjdG9yJywgJyRleGNlcHRpb25IYW5kbGVyJywKKyAgICAg
ICAgICBmdW5jdGlvbigkaW5qZWN0b3IsICRleGNlcHRpb25IYW5kbGVyKSB7CisgICAgICAgICAg
ICB2YXIgZGlyZWN0aXZlcyA9IFtdOworICAgICAgICAgICAgZm9yRWFjaChoYXNEaXJlY3RpdmVz
W25hbWVdLCBmdW5jdGlvbihkaXJlY3RpdmVGYWN0b3J5LCBpbmRleCkgeworICAgICAgICAgICAg
ICB0cnkgeworICAgICAgICAgICAgICAgIHZhciBkaXJlY3RpdmUgPSAkaW5qZWN0b3IuaW52b2tl
KGRpcmVjdGl2ZUZhY3RvcnkpOworICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGRpcmVj
dGl2ZSkpIHsKKyAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZSA9IHsgY29tcGlsZTogdmFsdWVG
bihkaXJlY3RpdmUpIH07CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghZGlyZWN0aXZlLmNv
bXBpbGUgJiYgZGlyZWN0aXZlLmxpbmspIHsKKyAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZS5j
b21waWxlID0gdmFsdWVGbihkaXJlY3RpdmUubGluayk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGRpcmVjdGl2ZS5wcmlvcml0eSA9IGRpcmVjdGl2ZS5wcmlvcml0eSB8fCAw
OworICAgICAgICAgICAgICAgIGRpcmVjdGl2ZS5pbmRleCA9IGluZGV4OworICAgICAgICAgICAg
ICAgIGRpcmVjdGl2ZS5uYW1lID0gZGlyZWN0aXZlLm5hbWUgfHwgbmFtZTsKKyAgICAgICAgICAg
ICAgICBkaXJlY3RpdmUucmVxdWlyZSA9IGRpcmVjdGl2ZS5yZXF1aXJlIHx8IChkaXJlY3RpdmUu
Y29udHJvbGxlciAmJiBkaXJlY3RpdmUubmFtZSk7CisgICAgICAgICAgICAgICAgZGlyZWN0aXZl
LnJlc3RyaWN0ID0gZGlyZWN0aXZlLnJlc3RyaWN0IHx8ICdFQSc7CisgICAgICAgICAgICAgICAg
dmFyIGJpbmRpbmdzID0gZGlyZWN0aXZlLiQkYmluZGluZ3MgPQorICAgICAgICAgICAgICAgICAg
ICBwYXJzZURpcmVjdGl2ZUJpbmRpbmdzKGRpcmVjdGl2ZSwgZGlyZWN0aXZlLm5hbWUpOworICAg
ICAgICAgICAgICAgIGlmIChpc09iamVjdChiaW5kaW5ncy5pc29sYXRlU2NvcGUpKSB7CisgICAg
ICAgICAgICAgICAgICBkaXJlY3RpdmUuJCRpc29sYXRlQmluZGluZ3MgPSBiaW5kaW5ncy5pc29s
YXRlU2NvcGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRpcmVjdGl2ZS4k
JG1vZHVsZU5hbWUgPSBkaXJlY3RpdmVGYWN0b3J5LiQkbW9kdWxlTmFtZTsKKyAgICAgICAgICAg
ICAgICBkaXJlY3RpdmVzLnB1c2goZGlyZWN0aXZlKTsKKyAgICAgICAgICAgICAgfSBjYXRjaCAo
ZSkgeworICAgICAgICAgICAgICAgICRleGNlcHRpb25IYW5kbGVyKGUpOworICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybiBkaXJlY3RpdmVzOworICAg
ICAgICAgIH1dKTsKKyAgICAgIH0KKyAgICAgIGhhc0RpcmVjdGl2ZXNbbmFtZV0ucHVzaChkaXJl
Y3RpdmVGYWN0b3J5KTsKKyAgICB9IGVsc2UgeworICAgICAgZm9yRWFjaChuYW1lLCByZXZlcnNl
UGFyYW1zKHJlZ2lzdGVyRGlyZWN0aXZlKSk7CisgICAgfQorICAgIHJldHVybiB0aGlzOworICB9
OworCisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgJGNvbXBpbGVQcm92
aWRlciNhSHJlZlNhbml0aXphdGlvbldoaXRlbGlzdAorICAgKiBAa2luZCBmdW5jdGlvbgorICAg
KgorICAgKiBAZGVzY3JpcHRpb24KKyAgICogUmV0cmlldmVzIG9yIG92ZXJyaWRlcyB0aGUgZGVm
YXVsdCByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBpcyB1c2VkIGZvciB3aGl0ZWxpc3Rpbmcgb2Yg
c2FmZQorICAgKiB1cmxzIGR1cmluZyBhW2hyZWZdIHNhbml0aXphdGlvbi4KKyAgICoKKyAgICog
VGhlIHNhbml0aXphdGlvbiBpcyBhIHNlY3VyaXR5IG1lYXN1cmUgYWltZWQgYXQgcHJldmVudGlu
ZyBYU1MgYXR0YWNrcyB2aWEgaHRtbCBsaW5rcy4KKyAgICoKKyAgICogQW55IHVybCBhYm91dCB0
byBiZSBhc3NpZ25lZCB0byBhW2hyZWZdIHZpYSBkYXRhLWJpbmRpbmcgaXMgZmlyc3Qgbm9ybWFs
aXplZCBhbmQgdHVybmVkIGludG8KKyAgICogYW4gYWJzb2x1dGUgdXJsLiBBZnRlcndhcmRzLCB0
aGUgdXJsIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgYGFIcmVmU2FuaXRpemF0aW9uV2hpdGVsaXN0
YAorICAgKiByZWd1bGFyIGV4cHJlc3Npb24uIElmIGEgbWF0Y2ggaXMgZm91bmQsIHRoZSBvcmln
aW5hbCB1cmwgaXMgd3JpdHRlbiBpbnRvIHRoZSBkb20uIE90aGVyd2lzZSwKKyAgICogdGhlIGFi
c29sdXRlIHVybCBpcyBwcmVmaXhlZCB3aXRoIGAndW5zYWZlOidgIHN0cmluZyBhbmQgb25seSB0
aGVuIGlzIGl0IHdyaXR0ZW4gaW50byB0aGUgRE9NLgorICAgKgorICAgKiBAcGFyYW0ge1JlZ0V4
cD19IHJlZ2V4cCBOZXcgcmVnZXhwIHRvIHdoaXRlbGlzdCB1cmxzIHdpdGguCisgICAqIEByZXR1
cm5zIHtSZWdFeHB8bmcuJGNvbXBpbGVQcm92aWRlcn0gQ3VycmVudCBSZWdFeHAgaWYgY2FsbGVk
IHdpdGhvdXQgdmFsdWUgb3Igc2VsZiBmb3IKKyAgICogICAgY2hhaW5pbmcgb3RoZXJ3aXNlLgor
ICAgKi8KKyAgdGhpcy5hSHJlZlNhbml0aXphdGlvbldoaXRlbGlzdCA9IGZ1bmN0aW9uKHJlZ2V4
cCkgeworICAgIGlmIChpc0RlZmluZWQocmVnZXhwKSkgeworICAgICAgJCRzYW5pdGl6ZVVyaVBy
b3ZpZGVyLmFIcmVmU2FuaXRpemF0aW9uV2hpdGVsaXN0KHJlZ2V4cCk7CisgICAgICByZXR1cm4g
dGhpczsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuICQkc2FuaXRpemVVcmlQcm92aWRlci5h
SHJlZlNhbml0aXphdGlvbldoaXRlbGlzdCgpOworICAgIH0KKyAgfTsKKworCisgIC8qKgorICAg
KiBAbmdkb2MgbWV0aG9kCisgICAqIEBuYW1lICRjb21waWxlUHJvdmlkZXIjaW1nU3JjU2FuaXRp
emF0aW9uV2hpdGVsaXN0CisgICAqIEBraW5kIGZ1bmN0aW9uCisgICAqCisgICAqIEBkZXNjcmlw
dGlvbgorICAgKiBSZXRyaWV2ZXMgb3Igb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHJlZ3VsYXIgZXhw
cmVzc2lvbiB0aGF0IGlzIHVzZWQgZm9yIHdoaXRlbGlzdGluZyBvZiBzYWZlCisgICAqIHVybHMg
ZHVyaW5nIGltZ1tzcmNdIHNhbml0aXphdGlvbi4KKyAgICoKKyAgICogVGhlIHNhbml0aXphdGlv
biBpcyBhIHNlY3VyaXR5IG1lYXN1cmUgYWltZWQgYXQgcHJldmVudCBYU1MgYXR0YWNrcyB2aWEg
aHRtbCBsaW5rcy4KKyAgICoKKyAgICogQW55IHVybCBhYm91dCB0byBiZSBhc3NpZ25lZCB0byBp
bWdbc3JjXSB2aWEgZGF0YS1iaW5kaW5nIGlzIGZpcnN0IG5vcm1hbGl6ZWQgYW5kIHR1cm5lZCBp
bnRvCisgICAqIGFuIGFic29sdXRlIHVybC4gQWZ0ZXJ3YXJkcywgdGhlIHVybCBpcyBtYXRjaGVk
IGFnYWluc3QgdGhlIGBpbWdTcmNTYW5pdGl6YXRpb25XaGl0ZWxpc3RgCisgICAqIHJlZ3VsYXIg
ZXhwcmVzc2lvbi4gSWYgYSBtYXRjaCBpcyBmb3VuZCwgdGhlIG9yaWdpbmFsIHVybCBpcyB3cml0
dGVuIGludG8gdGhlIGRvbS4gT3RoZXJ3aXNlLAorICAgKiB0aGUgYWJzb2x1dGUgdXJsIGlzIHBy
ZWZpeGVkIHdpdGggYCd1bnNhZmU6J2Agc3RyaW5nIGFuZCBvbmx5IHRoZW4gaXMgaXQgd3JpdHRl
biBpbnRvIHRoZSBET00uCisgICAqCisgICAqIEBwYXJhbSB7UmVnRXhwPX0gcmVnZXhwIE5ldyBy
ZWdleHAgdG8gd2hpdGVsaXN0IHVybHMgd2l0aC4KKyAgICogQHJldHVybnMge1JlZ0V4cHxuZy4k
Y29tcGlsZVByb3ZpZGVyfSBDdXJyZW50IFJlZ0V4cCBpZiBjYWxsZWQgd2l0aG91dCB2YWx1ZSBv
ciBzZWxmIGZvcgorICAgKiAgICBjaGFpbmluZyBvdGhlcndpc2UuCisgICAqLworICB0aGlzLmlt
Z1NyY1Nhbml0aXphdGlvbldoaXRlbGlzdCA9IGZ1bmN0aW9uKHJlZ2V4cCkgeworICAgIGlmIChp
c0RlZmluZWQocmVnZXhwKSkgeworICAgICAgJCRzYW5pdGl6ZVVyaVByb3ZpZGVyLmltZ1NyY1Nh
bml0aXphdGlvbldoaXRlbGlzdChyZWdleHApOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSBl
bHNlIHsKKyAgICAgIHJldHVybiAkJHNhbml0aXplVXJpUHJvdmlkZXIuaW1nU3JjU2FuaXRpemF0
aW9uV2hpdGVsaXN0KCk7CisgICAgfQorICB9OworCisgIC8qKgorICAgKiBAbmdkb2MgbWV0aG9k
CisgICAqIEBuYW1lICAkY29tcGlsZVByb3ZpZGVyI2RlYnVnSW5mb0VuYWJsZWQKKyAgICoKKyAg
ICogQHBhcmFtIHtib29sZWFuPX0gZW5hYmxlZCB1cGRhdGUgdGhlIGRlYnVnSW5mb0VuYWJsZWQg
c3RhdGUgaWYgcHJvdmlkZWQsIG90aGVyd2lzZSBqdXN0IHJldHVybiB0aGUKKyAgICogY3VycmVu
dCBkZWJ1Z0luZm9FbmFibGVkIHN0YXRlCisgICAqIEByZXR1cm5zIHsqfSBjdXJyZW50IHZhbHVl
IGlmIHVzZWQgYXMgZ2V0dGVyIG9yIGl0c2VsZiAoY2hhaW5pbmcpIGlmIHVzZWQgYXMgc2V0dGVy
CisgICAqCisgICAqIEBraW5kIGZ1bmN0aW9uCisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAg
KiBDYWxsIHRoaXMgbWV0aG9kIHRvIGVuYWJsZS9kaXNhYmxlIHZhcmlvdXMgZGVidWcgcnVudGlt
ZSBpbmZvcm1hdGlvbiBpbiB0aGUgY29tcGlsZXIgc3VjaCBhcyBhZGRpbmcKKyAgICogYmluZGlu
ZyBpbmZvcm1hdGlvbiBhbmQgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgc2NvcGUgb24gdG8g
RE9NIGVsZW1lbnRzLgorICAgKiBJZiBlbmFibGVkLCB0aGUgY29tcGlsZXIgd2lsbCBhZGQgdGhl
IGZvbGxvd2luZyB0byBET00gZWxlbWVudHMgdGhhdCBoYXZlIGJlZW4gYm91bmQgdG8gdGhlIHNj
b3BlCisgICAqICogYG5nLWJpbmRpbmdgIENTUyBjbGFzcworICAgKiAqIGAkYmluZGluZ2AgZGF0
YSBwcm9wZXJ0eSBjb250YWluaW5nIGFuIGFycmF5IG9mIHRoZSBiaW5kaW5nIGV4cHJlc3Npb25z
CisgICAqCisgICAqIFlvdSBtYXkgd2FudCB0byBkaXNhYmxlIHRoaXMgaW4gcHJvZHVjdGlvbiBm
b3IgYSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBib29zdC4gU2VlCisgICAqIHtAbGluayBndWlk
ZS9wcm9kdWN0aW9uI2Rpc2FibGluZy1kZWJ1Zy1kYXRhIERpc2FibGluZyBEZWJ1ZyBEYXRhfSBm
b3IgbW9yZS4KKyAgICoKKyAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgdHJ1ZS4KKyAgICovCisg
IHZhciBkZWJ1Z0luZm9FbmFibGVkID0gdHJ1ZTsKKyAgdGhpcy5kZWJ1Z0luZm9FbmFibGVkID0g
ZnVuY3Rpb24oZW5hYmxlZCkgeworICAgIGlmIChpc0RlZmluZWQoZW5hYmxlZCkpIHsKKyAgICAg
IGRlYnVnSW5mb0VuYWJsZWQgPSBlbmFibGVkOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQor
ICAgIHJldHVybiBkZWJ1Z0luZm9FbmFibGVkOworICB9OworCisgIHRoaXMuJGdldCA9IFsKKyAg
ICAgICAgICAgICckaW5qZWN0b3InLCAnJGludGVycG9sYXRlJywgJyRleGNlcHRpb25IYW5kbGVy
JywgJyR0ZW1wbGF0ZVJlcXVlc3QnLCAnJHBhcnNlJywKKyAgICAgICAgICAgICckY29udHJvbGxl
cicsICckcm9vdFNjb3BlJywgJyRkb2N1bWVudCcsICckc2NlJywgJyRhbmltYXRlJywgJyQkc2Fu
aXRpemVVcmknLAorICAgIGZ1bmN0aW9uKCRpbmplY3RvciwgICAkaW50ZXJwb2xhdGUsICAgJGV4
Y2VwdGlvbkhhbmRsZXIsICAgJHRlbXBsYXRlUmVxdWVzdCwgICAkcGFyc2UsCisgICAgICAgICAg
ICAgJGNvbnRyb2xsZXIsICAgJHJvb3RTY29wZSwgICAkZG9jdW1lbnQsICAgJHNjZSwgICAkYW5p
bWF0ZSwgICAkJHNhbml0aXplVXJpKSB7CisKKyAgICB2YXIgQXR0cmlidXRlcyA9IGZ1bmN0aW9u
KGVsZW1lbnQsIGF0dHJpYnV0ZXNUb0NvcHkpIHsKKyAgICAgIGlmIChhdHRyaWJ1dGVzVG9Db3B5
KSB7CisgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoYXR0cmlidXRlc1RvQ29weSk7Cisg
ICAgICAgIHZhciBpLCBsLCBrZXk7CisKKyAgICAgICAgZm9yIChpID0gMCwgbCA9IGtleXMubGVu
Z3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICAgICAga2V5ID0ga2V5c1tpXTsKKyAgICAgICAgICB0
aGlzW2tleV0gPSBhdHRyaWJ1dGVzVG9Db3B5W2tleV07CisgICAgICAgIH0KKyAgICAgIH0gZWxz
ZSB7CisgICAgICAgIHRoaXMuJGF0dHIgPSB7fTsKKyAgICAgIH0KKworICAgICAgdGhpcy4kJGVs
ZW1lbnQgPSBlbGVtZW50OworICAgIH07CisKKyAgICBBdHRyaWJ1dGVzLnByb3RvdHlwZSA9IHsK
KyAgICAgIC8qKgorICAgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAgICogQG5hbWUgJGNvbXBp
bGUuZGlyZWN0aXZlLkF0dHJpYnV0ZXMjJG5vcm1hbGl6ZQorICAgICAgICogQGtpbmQgZnVuY3Rp
b24KKyAgICAgICAqCisgICAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgICAqIENvbnZlcnRzIGFu
IGF0dHJpYnV0ZSBuYW1lIChlLmcuIGRhc2gvY29sb24vdW5kZXJzY29yZS1kZWxpbWl0ZWQgc3Ry
aW5nLCBvcHRpb25hbGx5IHByZWZpeGVkIHdpdGggYHgtYCBvcgorICAgICAgICogYGRhdGEtYCkg
dG8gaXRzIG5vcm1hbGl6ZWQsIGNhbWVsQ2FzZSBmb3JtLgorICAgICAgICoKKyAgICAgICAqIEFs
c28gdGhlcmUgaXMgc3BlY2lhbCBjYXNlIGZvciBNb3ogcHJlZml4IHN0YXJ0aW5nIHdpdGggdXBw
ZXIgY2FzZSBsZXR0ZXIuCisgICAgICAgKgorICAgICAgICogRm9yIGZ1cnRoZXIgaW5mb3JtYXRp
b24gY2hlY2sgb3V0IHRoZSBndWlkZSBvbiB7QGxpbmsgZ3VpZGUvZGlyZWN0aXZlI21hdGNoaW5n
LWRpcmVjdGl2ZXMgTWF0Y2hpbmcgRGlyZWN0aXZlc30KKyAgICAgICAqCisgICAgICAgKiBAcGFy
YW0ge3N0cmluZ30gbmFtZSBOYW1lIHRvIG5vcm1hbGl6ZQorICAgICAgICovCisgICAgICAkbm9y
bWFsaXplOiBkaXJlY3RpdmVOb3JtYWxpemUsCisKKworICAgICAgLyoqCisgICAgICAgKiBAbmdk
b2MgbWV0aG9kCisgICAgICAgKiBAbmFtZSAkY29tcGlsZS5kaXJlY3RpdmUuQXR0cmlidXRlcyMk
YWRkQ2xhc3MKKyAgICAgICAqIEBraW5kIGZ1bmN0aW9uCisgICAgICAgKgorICAgICAgICogQGRl
c2NyaXB0aW9uCisgICAgICAgKiBBZGRzIHRoZSBDU1MgY2xhc3MgdmFsdWUgc3BlY2lmaWVkIGJ5
IHRoZSBjbGFzc1ZhbCBwYXJhbWV0ZXIgdG8gdGhlIGVsZW1lbnQuIElmIGFuaW1hdGlvbnMKKyAg
ICAgICAqIGFyZSBlbmFibGVkIHRoZW4gYW4gYW5pbWF0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkIGZv
ciB0aGUgY2xhc3MgYWRkaXRpb24uCisgICAgICAgKgorICAgICAgICogQHBhcmFtIHtzdHJpbmd9
IGNsYXNzVmFsIFRoZSBjbGFzc05hbWUgdmFsdWUgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBl
bGVtZW50CisgICAgICAgKi8KKyAgICAgICRhZGRDbGFzczogZnVuY3Rpb24oY2xhc3NWYWwpIHsK
KyAgICAgICAgaWYgKGNsYXNzVmFsICYmIGNsYXNzVmFsLmxlbmd0aCA+IDApIHsKKyAgICAgICAg
ICAkYW5pbWF0ZS5hZGRDbGFzcyh0aGlzLiQkZWxlbWVudCwgY2xhc3NWYWwpOworICAgICAgICB9
CisgICAgICB9LAorCisgICAgICAvKioKKyAgICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgICAq
IEBuYW1lICRjb21waWxlLmRpcmVjdGl2ZS5BdHRyaWJ1dGVzIyRyZW1vdmVDbGFzcworICAgICAg
ICogQGtpbmQgZnVuY3Rpb24KKyAgICAgICAqCisgICAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAg
ICAqIFJlbW92ZXMgdGhlIENTUyBjbGFzcyB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIGNsYXNzVmFs
IHBhcmFtZXRlciBmcm9tIHRoZSBlbGVtZW50LiBJZgorICAgICAgICogYW5pbWF0aW9ucyBhcmUg
ZW5hYmxlZCB0aGVuIGFuIGFuaW1hdGlvbiB3aWxsIGJlIHRyaWdnZXJlZCBmb3IgdGhlIGNsYXNz
IHJlbW92YWwuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzVmFsIFRo
ZSBjbGFzc05hbWUgdmFsdWUgdGhhdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgZWxlbWVudAor
ICAgICAgICovCisgICAgICAkcmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKGNsYXNzVmFsKSB7CisgICAg
ICAgIGlmIChjbGFzc1ZhbCAmJiBjbGFzc1ZhbC5sZW5ndGggPiAwKSB7CisgICAgICAgICAgJGFu
aW1hdGUucmVtb3ZlQ2xhc3ModGhpcy4kJGVsZW1lbnQsIGNsYXNzVmFsKTsKKyAgICAgICAgfQor
ICAgICAgfSwKKworICAgICAgLyoqCisgICAgICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICAgKiBA
bmFtZSAkY29tcGlsZS5kaXJlY3RpdmUuQXR0cmlidXRlcyMkdXBkYXRlQ2xhc3MKKyAgICAgICAq
IEBraW5kIGZ1bmN0aW9uCisgICAgICAgKgorICAgICAgICogQGRlc2NyaXB0aW9uCisgICAgICAg
KiBBZGRzIGFuZCByZW1vdmVzIHRoZSBhcHByb3ByaWF0ZSBDU1MgY2xhc3MgdmFsdWVzIHRvIHRo
ZSBlbGVtZW50IGJhc2VkIG9uIHRoZSBkaWZmZXJlbmNlCisgICAgICAgKiBiZXR3ZWVuIHRoZSBu
ZXcgYW5kIG9sZCBDU1MgY2xhc3MgdmFsdWVzIChzcGVjaWZpZWQgYXMgbmV3Q2xhc3NlcyBhbmQg
b2xkQ2xhc3NlcykuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5ld0NsYXNz
ZXMgVGhlIGN1cnJlbnQgQ1NTIGNsYXNzTmFtZSB2YWx1ZQorICAgICAgICogQHBhcmFtIHtzdHJp
bmd9IG9sZENsYXNzZXMgVGhlIGZvcm1lciBDU1MgY2xhc3NOYW1lIHZhbHVlCisgICAgICAgKi8K
KyAgICAgICR1cGRhdGVDbGFzczogZnVuY3Rpb24obmV3Q2xhc3Nlcywgb2xkQ2xhc3Nlcykgewor
ICAgICAgICB2YXIgdG9BZGQgPSB0b2tlbkRpZmZlcmVuY2UobmV3Q2xhc3Nlcywgb2xkQ2xhc3Nl
cyk7CisgICAgICAgIGlmICh0b0FkZCAmJiB0b0FkZC5sZW5ndGgpIHsKKyAgICAgICAgICAkYW5p
bWF0ZS5hZGRDbGFzcyh0aGlzLiQkZWxlbWVudCwgdG9BZGQpOworICAgICAgICB9CisKKyAgICAg
ICAgdmFyIHRvUmVtb3ZlID0gdG9rZW5EaWZmZXJlbmNlKG9sZENsYXNzZXMsIG5ld0NsYXNzZXMp
OworICAgICAgICBpZiAodG9SZW1vdmUgJiYgdG9SZW1vdmUubGVuZ3RoKSB7CisgICAgICAgICAg
JGFuaW1hdGUucmVtb3ZlQ2xhc3ModGhpcy4kJGVsZW1lbnQsIHRvUmVtb3ZlKTsKKyAgICAgICAg
fQorICAgICAgfSwKKworICAgICAgLyoqCisgICAgICAgKiBTZXQgYSBub3JtYWxpemVkIGF0dHJp
YnV0ZSBvbiB0aGUgZWxlbWVudCBpbiBhIHdheSBzdWNoIHRoYXQgYWxsIGRpcmVjdGl2ZXMKKyAg
ICAgICAqIGNhbiBzaGFyZSB0aGUgYXR0cmlidXRlLiBUaGlzIGZ1bmN0aW9uIHByb3Blcmx5IGhh
bmRsZXMgYm9vbGVhbiBhdHRyaWJ1dGVzLgorICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBO
b3JtYWxpemVkIGtleS4gKGllIG5nQXR0cmlidXRlKQorICAgICAgICogQHBhcmFtIHtzdHJpbmd8
Ym9vbGVhbn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC4gSWYgYG51bGxgIGF0dHJpYnV0ZSB3aWxs
IGJlIGRlbGV0ZWQuCisgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSB3cml0ZUF0dHIgSWYgZmFs
c2UsIGRvZXMgbm90IHdyaXRlIHRoZSB2YWx1ZSB0byBET00gZWxlbWVudCBhdHRyaWJ1dGUuCisg
ICAgICAgKiAgICAgRGVmYXVsdHMgdG8gdHJ1ZS4KKyAgICAgICAqIEBwYXJhbSB7c3RyaW5nPX0g
YXR0ck5hbWUgT3B0aW9uYWwgbm9uZSBub3JtYWxpemVkIG5hbWUuIERlZmF1bHRzIHRvIGtleS4K
KyAgICAgICAqLworICAgICAgJHNldDogZnVuY3Rpb24oa2V5LCB2YWx1ZSwgd3JpdGVBdHRyLCBh
dHRyTmFtZSkgeworICAgICAgICAvLyBUT0RPOiBkZWNpZGUgd2hldGhlciBvciBub3QgdG8gdGhy
b3cgYW4gZXJyb3IgaWYgImNsYXNzIgorICAgICAgICAvL2lzIHNldCB0aHJvdWdoIHRoaXMgZnVu
Y3Rpb24gc2luY2UgaXQgbWF5IGNhdXNlICR1cGRhdGVDbGFzcyB0bworICAgICAgICAvL2JlY29t
ZSB1bnN0YWJsZS4KKworICAgICAgICB2YXIgbm9kZSA9IHRoaXMuJCRlbGVtZW50WzBdLAorICAg
ICAgICAgICAgYm9vbGVhbktleSA9IGdldEJvb2xlYW5BdHRyTmFtZShub2RlLCBrZXkpLAorICAg
ICAgICAgICAgYWxpYXNlZEtleSA9IGdldEFsaWFzZWRBdHRyTmFtZShub2RlLCBrZXkpLAorICAg
ICAgICAgICAgb2JzZXJ2ZXIgPSBrZXksCisgICAgICAgICAgICBub2RlTmFtZTsKKworICAgICAg
ICBpZiAoYm9vbGVhbktleSkgeworICAgICAgICAgIHRoaXMuJCRlbGVtZW50LnByb3Aoa2V5LCB2
YWx1ZSk7CisgICAgICAgICAgYXR0ck5hbWUgPSBib29sZWFuS2V5OworICAgICAgICB9IGVsc2Ug
aWYgKGFsaWFzZWRLZXkpIHsKKyAgICAgICAgICB0aGlzW2FsaWFzZWRLZXldID0gdmFsdWU7Cisg
ICAgICAgICAgb2JzZXJ2ZXIgPSBhbGlhc2VkS2V5OworICAgICAgICB9CisKKyAgICAgICAgdGhp
c1trZXldID0gdmFsdWU7CisKKyAgICAgICAgLy8gdHJhbnNsYXRlIG5vcm1hbGl6ZWQga2V5IHRv
IGFjdHVhbCBrZXkKKyAgICAgICAgaWYgKGF0dHJOYW1lKSB7CisgICAgICAgICAgdGhpcy4kYXR0
cltrZXldID0gYXR0ck5hbWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgYXR0ck5hbWUg
PSB0aGlzLiRhdHRyW2tleV07CisgICAgICAgICAgaWYgKCFhdHRyTmFtZSkgeworICAgICAgICAg
ICAgdGhpcy4kYXR0cltrZXldID0gYXR0ck5hbWUgPSBzbmFrZV9jYXNlKGtleSwgJy0nKTsKKyAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBub2RlTmFtZSA9IG5vZGVOYW1lXyh0aGlz
LiQkZWxlbWVudCk7CisKKyAgICAgICAgaWYgKChub2RlTmFtZSA9PT0gJ2EnICYmIGtleSA9PT0g
J2hyZWYnKSB8fAorICAgICAgICAgICAgKG5vZGVOYW1lID09PSAnaW1nJyAmJiBrZXkgPT09ICdz
cmMnKSkgeworICAgICAgICAgIC8vIHNhbml0aXplIGFbaHJlZl0gYW5kIGltZ1tzcmNdIHZhbHVl
cworICAgICAgICAgIHRoaXNba2V5XSA9IHZhbHVlID0gJCRzYW5pdGl6ZVVyaSh2YWx1ZSwga2V5
ID09PSAnc3JjJyk7CisgICAgICAgIH0gZWxzZSBpZiAobm9kZU5hbWUgPT09ICdpbWcnICYmIGtl
eSA9PT0gJ3NyY3NldCcpIHsKKyAgICAgICAgICAvLyBzYW5pdGl6ZSBpbWdbc3Jjc2V0XSB2YWx1
ZXMKKyAgICAgICAgICB2YXIgcmVzdWx0ID0gIiI7CisKKyAgICAgICAgICAvLyBmaXJzdCBjaGVj
ayBpZiB0aGVyZSBhcmUgc3BhY2VzIGJlY2F1c2UgaXQncyBub3QgdGhlIHNhbWUgcGF0dGVybgor
ICAgICAgICAgIHZhciB0cmltbWVkU3Jjc2V0ID0gdHJpbSh2YWx1ZSk7CisgICAgICAgICAgLy8g
ICAgICAgICAgICAgICAgKCAgIDk5OXggICAsfCAgIDk5OXcgICAsfCAgICx8LCAgICkKKyAgICAg
ICAgICB2YXIgc3JjUGF0dGVybiA9IC8oXHMrXGQreFxzKix8XHMrXGQrd1xzKix8XHMrLHwsXHMr
KS87CisgICAgICAgICAgdmFyIHBhdHRlcm4gPSAvXHMvLnRlc3QodHJpbW1lZFNyY3NldCkgPyBz
cmNQYXR0ZXJuIDogLygsKS87CisKKyAgICAgICAgICAvLyBzcGxpdCBzcmNzZXQgaW50byB0dXBs
ZSBvZiB1cmkgYW5kIGRlc2NyaXB0b3IgZXhjZXB0IGZvciB0aGUgbGFzdCBpdGVtCisgICAgICAg
ICAgdmFyIHJhd1VyaXMgPSB0cmltbWVkU3Jjc2V0LnNwbGl0KHBhdHRlcm4pOworCisgICAgICAg
ICAgLy8gZm9yIGVhY2ggdHVwbGVzCisgICAgICAgICAgdmFyIG5iclVyaXNXaXRoMnBhcnRzID0g
TWF0aC5mbG9vcihyYXdVcmlzLmxlbmd0aCAvIDIpOworICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbmJyVXJpc1dpdGgycGFydHM7IGkrKykgeworICAgICAgICAgICAgdmFyIGlubmVySWR4
ID0gaSAqIDI7CisgICAgICAgICAgICAvLyBzYW5pdGl6ZSB0aGUgdXJpCisgICAgICAgICAgICBy
ZXN1bHQgKz0gJCRzYW5pdGl6ZVVyaSh0cmltKHJhd1VyaXNbaW5uZXJJZHhdKSwgdHJ1ZSk7Cisg
ICAgICAgICAgICAvLyBhZGQgdGhlIGRlc2NyaXB0b3IKKyAgICAgICAgICAgIHJlc3VsdCArPSAo
IiAiICsgdHJpbShyYXdVcmlzW2lubmVySWR4ICsgMV0pKTsKKyAgICAgICAgICB9CisKKyAgICAg
ICAgICAvLyBzcGxpdCB0aGUgbGFzdCBpdGVtIGludG8gdXJpIGFuZCBkZXNjcmlwdG9yCisgICAg
ICAgICAgdmFyIGxhc3RUdXBsZSA9IHRyaW0ocmF3VXJpc1tpICogMl0pLnNwbGl0KC9ccy8pOwor
CisgICAgICAgICAgLy8gc2FuaXRpemUgdGhlIGxhc3QgdXJpCisgICAgICAgICAgcmVzdWx0ICs9
ICQkc2FuaXRpemVVcmkodHJpbShsYXN0VHVwbGVbMF0pLCB0cnVlKTsKKworICAgICAgICAgIC8v
IGFuZCBhZGQgdGhlIGxhc3QgZGVzY3JpcHRvciBpZiBhbnkKKyAgICAgICAgICBpZiAobGFzdFR1
cGxlLmxlbmd0aCA9PT0gMikgeworICAgICAgICAgICAgcmVzdWx0ICs9ICgiICIgKyB0cmltKGxh
c3RUdXBsZVsxXSkpOworICAgICAgICAgIH0KKyAgICAgICAgICB0aGlzW2tleV0gPSB2YWx1ZSA9
IHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3cml0ZUF0dHIgIT09IGZhbHNlKSB7
CisgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHsK
KyAgICAgICAgICAgIHRoaXMuJCRlbGVtZW50LnJlbW92ZUF0dHIoYXR0ck5hbWUpOworICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLiQkZWxlbWVudC5hdHRyKGF0dHJOYW1lLCB2
YWx1ZSk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gZmlyZSBvYnNlcnZl
cnMKKyAgICAgICAgdmFyICQkb2JzZXJ2ZXJzID0gdGhpcy4kJG9ic2VydmVyczsKKyAgICAgICAg
JCRvYnNlcnZlcnMgJiYgZm9yRWFjaCgkJG9ic2VydmVyc1tvYnNlcnZlcl0sIGZ1bmN0aW9uKGZu
KSB7CisgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZuKHZhbHVlKTsKKyAgICAgICAgICB9
IGNhdGNoIChlKSB7CisgICAgICAgICAgICAkZXhjZXB0aW9uSGFuZGxlcihlKTsKKyAgICAgICAg
ICB9CisgICAgICAgIH0pOworICAgICAgfSwKKworCisgICAgICAvKioKKyAgICAgICAqIEBuZ2Rv
YyBtZXRob2QKKyAgICAgICAqIEBuYW1lICRjb21waWxlLmRpcmVjdGl2ZS5BdHRyaWJ1dGVzIyRv
YnNlcnZlCisgICAgICAgKiBAa2luZCBmdW5jdGlvbgorICAgICAgICoKKyAgICAgICAqIEBkZXNj
cmlwdGlvbgorICAgICAgICogT2JzZXJ2ZXMgYW4gaW50ZXJwb2xhdGVkIGF0dHJpYnV0ZS4KKyAg
ICAgICAqCisgICAgICAgKiBUaGUgb2JzZXJ2ZXIgZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIG9u
Y2UgZHVyaW5nIHRoZSBuZXh0IGAkZGlnZXN0YCBmb2xsb3dpbmcKKyAgICAgICAqIGNvbXBpbGF0
aW9uLiBUaGUgb2JzZXJ2ZXIgaXMgdGhlbiBpbnZva2VkIHdoZW5ldmVyIHRoZSBpbnRlcnBvbGF0
ZWQgdmFsdWUKKyAgICAgICAqIGNoYW5nZXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIHtz
dHJpbmd9IGtleSBOb3JtYWxpemVkIGtleS4gKGllIG5nQXR0cmlidXRlKSAuCisgICAgICAgKiBA
cGFyYW0ge2Z1bmN0aW9uKGludGVycG9sYXRlZFZhbHVlKX0gZm4gRnVuY3Rpb24gdGhhdCB3aWxs
IGJlIGNhbGxlZCB3aGVuZXZlcgorICAgICAgICAgICAgICAgIHRoZSBpbnRlcnBvbGF0ZWQgdmFs
dWUgb2YgdGhlIGF0dHJpYnV0ZSBjaGFuZ2VzLgorICAgICAgICogICAgICAgIFNlZSB0aGUge0Bs
aW5rIGd1aWRlL2RpcmVjdGl2ZSN0ZXh0LWFuZC1hdHRyaWJ1dGUtYmluZGluZ3MgRGlyZWN0aXZl
c30gZ3VpZGUgZm9yIG1vcmUgaW5mby4KKyAgICAgICAqIEByZXR1cm5zIHtmdW5jdGlvbigpfSBS
ZXR1cm5zIGEgZGVyZWdpc3RyYXRpb24gZnVuY3Rpb24gZm9yIHRoaXMgb2JzZXJ2ZXIuCisgICAg
ICAgKi8KKyAgICAgICRvYnNlcnZlOiBmdW5jdGlvbihrZXksIGZuKSB7CisgICAgICAgIHZhciBh
dHRycyA9IHRoaXMsCisgICAgICAgICAgICAkJG9ic2VydmVycyA9IChhdHRycy4kJG9ic2VydmVy
cyB8fCAoYXR0cnMuJCRvYnNlcnZlcnMgPSBjcmVhdGVNYXAoKSkpLAorICAgICAgICAgICAgbGlz
dGVuZXJzID0gKCQkb2JzZXJ2ZXJzW2tleV0gfHwgKCQkb2JzZXJ2ZXJzW2tleV0gPSBbXSkpOwor
CisgICAgICAgIGxpc3RlbmVycy5wdXNoKGZuKTsKKyAgICAgICAgJHJvb3RTY29wZS4kZXZhbEFz
eW5jKGZ1bmN0aW9uKCkgeworICAgICAgICAgIGlmICghbGlzdGVuZXJzLiQkaW50ZXIgJiYgYXR0
cnMuaGFzT3duUHJvcGVydHkoa2V5KSkgeworICAgICAgICAgICAgLy8gbm8gb25lIHJlZ2lzdGVy
ZWQgYXR0cmlidXRlIGludGVycG9sYXRpb24gZnVuY3Rpb24sIHNvIGxldHMgY2FsbCBpdCBtYW51
YWxseQorICAgICAgICAgICAgZm4oYXR0cnNba2V5XSk7CisgICAgICAgICAgfQorICAgICAgICB9
KTsKKworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgYXJyYXlSZW1vdmUo
bGlzdGVuZXJzLCBmbik7CisgICAgICAgIH07CisgICAgICB9CisgICAgfTsKKworCisgICAgZnVu
Y3Rpb24gc2FmZUFkZENsYXNzKCRlbGVtZW50LCBjbGFzc05hbWUpIHsKKyAgICAgIHRyeSB7Cisg
ICAgICAgICRlbGVtZW50LmFkZENsYXNzKGNsYXNzTmFtZSk7CisgICAgICB9IGNhdGNoIChlKSB7
CisgICAgICAgIC8vIGlnbm9yZSwgc2luY2UgaXQgbWVhbnMgdGhhdCB3ZSBhcmUgdHJ5aW5nIHRv
IHNldCBjbGFzcyBvbgorICAgICAgICAvLyBTVkcgZWxlbWVudCwgd2hlcmUgY2xhc3MgbmFtZSBp
cyByZWFkLW9ubHkuCisgICAgICB9CisgICAgfQorCisKKyAgICB2YXIgc3RhcnRTeW1ib2wgPSAk
aW50ZXJwb2xhdGUuc3RhcnRTeW1ib2woKSwKKyAgICAgICAgZW5kU3ltYm9sID0gJGludGVycG9s
YXRlLmVuZFN5bWJvbCgpLAorICAgICAgICBkZW5vcm1hbGl6ZVRlbXBsYXRlID0gKHN0YXJ0U3lt
Ym9sID09ICd7eycgfHwgZW5kU3ltYm9sICA9PSAnfX0nKQorICAgICAgICAgICAgPyBpZGVudGl0
eQorICAgICAgICAgICAgOiBmdW5jdGlvbiBkZW5vcm1hbGl6ZVRlbXBsYXRlKHRlbXBsYXRlKSB7
CisgICAgICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKC9ce1x7L2csIHN0YXJ0U3lt
Ym9sKS5yZXBsYWNlKC99fS9nLCBlbmRTeW1ib2wpOworICAgICAgICB9LAorICAgICAgICBOR19B
VFRSX0JJTkRJTkcgPSAvXm5nQXR0cltBLVpdLzsKKworICAgIGNvbXBpbGUuJCRhZGRCaW5kaW5n
SW5mbyA9IGRlYnVnSW5mb0VuYWJsZWQgPyBmdW5jdGlvbiAkJGFkZEJpbmRpbmdJbmZvKCRlbGVt
ZW50LCBiaW5kaW5nKSB7CisgICAgICB2YXIgYmluZGluZ3MgPSAkZWxlbWVudC5kYXRhKCckYmlu
ZGluZycpIHx8IFtdOworCisgICAgICBpZiAoaXNBcnJheShiaW5kaW5nKSkgeworICAgICAgICBi
aW5kaW5ncyA9IGJpbmRpbmdzLmNvbmNhdChiaW5kaW5nKTsKKyAgICAgIH0gZWxzZSB7CisgICAg
ICAgIGJpbmRpbmdzLnB1c2goYmluZGluZyk7CisgICAgICB9CisKKyAgICAgICRlbGVtZW50LmRh
dGEoJyRiaW5kaW5nJywgYmluZGluZ3MpOworICAgIH0gOiBub29wOworCisgICAgY29tcGlsZS4k
JGFkZEJpbmRpbmdDbGFzcyA9IGRlYnVnSW5mb0VuYWJsZWQgPyBmdW5jdGlvbiAkJGFkZEJpbmRp
bmdDbGFzcygkZWxlbWVudCkgeworICAgICAgc2FmZUFkZENsYXNzKCRlbGVtZW50LCAnbmctYmlu
ZGluZycpOworICAgIH0gOiBub29wOworCisgICAgY29tcGlsZS4kJGFkZFNjb3BlSW5mbyA9IGRl
YnVnSW5mb0VuYWJsZWQgPyBmdW5jdGlvbiAkJGFkZFNjb3BlSW5mbygkZWxlbWVudCwgc2NvcGUs
IGlzb2xhdGVkLCBub1RlbXBsYXRlKSB7CisgICAgICB2YXIgZGF0YU5hbWUgPSBpc29sYXRlZCA/
IChub1RlbXBsYXRlID8gJyRpc29sYXRlU2NvcGVOb1RlbXBsYXRlJyA6ICckaXNvbGF0ZVNjb3Bl
JykgOiAnJHNjb3BlJzsKKyAgICAgICRlbGVtZW50LmRhdGEoZGF0YU5hbWUsIHNjb3BlKTsKKyAg
ICB9IDogbm9vcDsKKworICAgIGNvbXBpbGUuJCRhZGRTY29wZUNsYXNzID0gZGVidWdJbmZvRW5h
YmxlZCA/IGZ1bmN0aW9uICQkYWRkU2NvcGVDbGFzcygkZWxlbWVudCwgaXNvbGF0ZWQpIHsKKyAg
ICAgIHNhZmVBZGRDbGFzcygkZWxlbWVudCwgaXNvbGF0ZWQgPyAnbmctaXNvbGF0ZS1zY29wZScg
OiAnbmctc2NvcGUnKTsKKyAgICB9IDogbm9vcDsKKworICAgIHJldHVybiBjb21waWxlOworCisg
ICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgZnVuY3Rpb24gY29t
cGlsZSgkY29tcGlsZU5vZGVzLCB0cmFuc2NsdWRlRm4sIG1heFByaW9yaXR5LCBpZ25vcmVEaXJl
Y3RpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0NvbXBpbGVDb250ZXh0KSB7
CisgICAgICBpZiAoISgkY29tcGlsZU5vZGVzIGluc3RhbmNlb2YganFMaXRlKSkgeworICAgICAg
ICAvLyBqcXVlcnkgYWx3YXlzIHJld3JhcHMsIHdoZXJlYXMgd2UgbmVlZCB0byBwcmVzZXJ2ZSB0
aGUgb3JpZ2luYWwgc2VsZWN0b3Igc28gdGhhdCB3ZSBjYW4KKyAgICAgICAgLy8gbW9kaWZ5IGl0
LgorICAgICAgICAkY29tcGlsZU5vZGVzID0ganFMaXRlKCRjb21waWxlTm9kZXMpOworICAgICAg
fQorICAgICAgLy8gV2UgY2FuIG5vdCBjb21waWxlIHRvcCBsZXZlbCB0ZXh0IGVsZW1lbnRzIHNp
bmNlIHRleHQgbm9kZXMgY2FuIGJlIG1lcmdlZCBhbmQgd2Ugd2lsbAorICAgICAgLy8gbm90IGJl
IGFibGUgdG8gYXR0YWNoIHNjb3BlIGRhdGEgdG8gdGhlbSwgc28gd2Ugd2lsbCB3cmFwIHRoZW0g
aW4gPHNwYW4+CisgICAgICBmb3JFYWNoKCRjb21waWxlTm9kZXMsIGZ1bmN0aW9uKG5vZGUsIGlu
ZGV4KSB7CisgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IE5PREVfVFlQRV9URVhUICYmIG5v
ZGUubm9kZVZhbHVlLm1hdGNoKC9cUysvKSAvKiBub24tZW1wdHkgKi8gKSB7CisgICAgICAgICAg
JGNvbXBpbGVOb2Rlc1tpbmRleF0gPSBqcUxpdGUobm9kZSkud3JhcCgnPHNwYW4+PC9zcGFuPicp
LnBhcmVudCgpWzBdOworICAgICAgICB9CisgICAgICB9KTsKKyAgICAgIHZhciBjb21wb3NpdGVM
aW5rRm4gPQorICAgICAgICAgICAgICBjb21waWxlTm9kZXMoJGNvbXBpbGVOb2RlcywgdHJhbnNj
bHVkZUZuLCAkY29tcGlsZU5vZGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4UHJp
b3JpdHksIGlnbm9yZURpcmVjdGl2ZSwgcHJldmlvdXNDb21waWxlQ29udGV4dCk7CisgICAgICBj
b21waWxlLiQkYWRkU2NvcGVDbGFzcygkY29tcGlsZU5vZGVzKTsKKyAgICAgIHZhciBuYW1lc3Bh
Y2UgPSBudWxsOworICAgICAgcmV0dXJuIGZ1bmN0aW9uIHB1YmxpY0xpbmtGbihzY29wZSwgY2xv
bmVDb25uZWN0Rm4sIG9wdGlvbnMpIHsKKyAgICAgICAgYXNzZXJ0QXJnKHNjb3BlLCAnc2NvcGUn
KTsKKworICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKKyAgICAgICAgdmFyIHBhcmVu
dEJvdW5kVHJhbnNjbHVkZUZuID0gb3B0aW9ucy5wYXJlbnRCb3VuZFRyYW5zY2x1ZGVGbiwKKyAg
ICAgICAgICB0cmFuc2NsdWRlQ29udHJvbGxlcnMgPSBvcHRpb25zLnRyYW5zY2x1ZGVDb250cm9s
bGVycywKKyAgICAgICAgICBmdXR1cmVQYXJlbnRFbGVtZW50ID0gb3B0aW9ucy5mdXR1cmVQYXJl
bnRFbGVtZW50OworCisgICAgICAgIC8vIFdoZW4gYHBhcmVudEJvdW5kVHJhbnNjbHVkZUZuYCBp
cyBwYXNzZWQsIGl0IGlzIGEKKyAgICAgICAgLy8gYGNvbnRyb2xsZXJzQm91bmRUcmFuc2NsdWRl
YCBmdW5jdGlvbiAoaXQgd2FzIHByZXZpb3VzbHkgcGFzc2VkCisgICAgICAgIC8vIGFzIGB0cmFu
c2NsdWRlYCB0byBkaXJlY3RpdmUubGluaykgc28gd2UgbXVzdCB1bndyYXAgaXQgdG8gZ2V0Cisg
ICAgICAgIC8vIGl0cyBgYm91bmRUcmFuc2NsdWRlRm5gCisgICAgICAgIGlmIChwYXJlbnRCb3Vu
ZFRyYW5zY2x1ZGVGbiAmJiBwYXJlbnRCb3VuZFRyYW5zY2x1ZGVGbi4kJGJvdW5kVHJhbnNjbHVk
ZSkgeworICAgICAgICAgIHBhcmVudEJvdW5kVHJhbnNjbHVkZUZuID0gcGFyZW50Qm91bmRUcmFu
c2NsdWRlRm4uJCRib3VuZFRyYW5zY2x1ZGU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW5h
bWVzcGFjZSkgeworICAgICAgICAgIG5hbWVzcGFjZSA9IGRldGVjdE5hbWVzcGFjZUZvckNoaWxk
RWxlbWVudHMoZnV0dXJlUGFyZW50RWxlbWVudCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyICRs
aW5rTm9kZTsKKyAgICAgICAgaWYgKG5hbWVzcGFjZSAhPT0gJ2h0bWwnKSB7CisgICAgICAgICAg
Ly8gV2hlbiB1c2luZyBhIGRpcmVjdGl2ZSB3aXRoIHJlcGxhY2U6dHJ1ZSBhbmQgdGVtcGxhdGVV
cmwgdGhlICRjb21waWxlTm9kZXMKKyAgICAgICAgICAvLyAob3IgYSBjaGlsZCBlbGVtZW50IGlu
c2lkZSBvZiB0aGVtKQorICAgICAgICAgIC8vIG1pZ2h0IGNoYW5nZSwgc28gd2UgbmVlZCB0byBy
ZWNyZWF0ZSB0aGUgbmFtZXNwYWNlIGFkYXB0ZWQgY29tcGlsZU5vZGVzCisgICAgICAgICAgLy8g
Zm9yIGNhbGwgdG8gdGhlIGxpbmsgZnVuY3Rpb24uCisgICAgICAgICAgLy8gTm90ZTogVGhpcyB3
aWxsIGFscmVhZHkgY2xvbmUgdGhlIG5vZGVzLi4uCisgICAgICAgICAgJGxpbmtOb2RlID0ganFM
aXRlKAorICAgICAgICAgICAgd3JhcFRlbXBsYXRlKG5hbWVzcGFjZSwganFMaXRlKCc8ZGl2Picp
LmFwcGVuZCgkY29tcGlsZU5vZGVzKS5odG1sKCkpCisgICAgICAgICAgKTsKKyAgICAgICAgfSBl
bHNlIGlmIChjbG9uZUNvbm5lY3RGbikgeworICAgICAgICAgIC8vIGltcG9ydGFudCEhOiB3ZSBt
dXN0IGNhbGwgb3VyIGpxTGl0ZS5jbG9uZSgpIHNpbmNlIHRoZSBqUXVlcnkgb25lIGlzIHRyeWlu
ZyB0byBiZSBzbWFydAorICAgICAgICAgIC8vIGFuZCBzb21ldGltZXMgY2hhbmdlcyB0aGUgc3Ry
dWN0dXJlIG9mIHRoZSBET00uCisgICAgICAgICAgJGxpbmtOb2RlID0gSlFMaXRlUHJvdG90eXBl
LmNsb25lLmNhbGwoJGNvbXBpbGVOb2Rlcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
JGxpbmtOb2RlID0gJGNvbXBpbGVOb2RlczsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0cmFu
c2NsdWRlQ29udHJvbGxlcnMpIHsKKyAgICAgICAgICBmb3IgKHZhciBjb250cm9sbGVyTmFtZSBp
biB0cmFuc2NsdWRlQ29udHJvbGxlcnMpIHsKKyAgICAgICAgICAgICRsaW5rTm9kZS5kYXRhKCck
JyArIGNvbnRyb2xsZXJOYW1lICsgJ0NvbnRyb2xsZXInLCB0cmFuc2NsdWRlQ29udHJvbGxlcnNb
Y29udHJvbGxlck5hbWVdLmluc3RhbmNlKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBjb21waWxlLiQkYWRkU2NvcGVJbmZvKCRsaW5rTm9kZSwgc2NvcGUpOworCisgICAgICAg
IGlmIChjbG9uZUNvbm5lY3RGbikgY2xvbmVDb25uZWN0Rm4oJGxpbmtOb2RlLCBzY29wZSk7Cisg
ICAgICAgIGlmIChjb21wb3NpdGVMaW5rRm4pIGNvbXBvc2l0ZUxpbmtGbihzY29wZSwgJGxpbmtO
b2RlLCAkbGlua05vZGUsIHBhcmVudEJvdW5kVHJhbnNjbHVkZUZuKTsKKyAgICAgICAgcmV0dXJu
ICRsaW5rTm9kZTsKKyAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gZGV0ZWN0TmFtZXNw
YWNlRm9yQ2hpbGRFbGVtZW50cyhwYXJlbnRFbGVtZW50KSB7CisgICAgICAvLyBUT0RPOiBNYWtl
IHRoaXMgZGV0ZWN0IE1hdGhNTCBhcyB3ZWxsLi4uCisgICAgICB2YXIgbm9kZSA9IHBhcmVudEVs
ZW1lbnQgJiYgcGFyZW50RWxlbWVudFswXTsKKyAgICAgIGlmICghbm9kZSkgeworICAgICAgICBy
ZXR1cm4gJ2h0bWwnOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIG5vZGVOYW1lXyhu
b2RlKSAhPT0gJ2ZvcmVpZ25vYmplY3QnICYmIG5vZGUudG9TdHJpbmcoKS5tYXRjaCgvU1ZHLykg
PyAnc3ZnJyA6ICdodG1sJzsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb21w
aWxlIGZ1bmN0aW9uIG1hdGNoZXMgZWFjaCBub2RlIGluIG5vZGVMaXN0IGFnYWluc3QgdGhlIGRp
cmVjdGl2ZXMuIE9uY2UgYWxsIGRpcmVjdGl2ZXMKKyAgICAgKiBmb3IgYSBwYXJ0aWN1bGFyIG5v
ZGUgYXJlIGNvbGxlY3RlZCB0aGVpciBjb21waWxlIGZ1bmN0aW9ucyBhcmUgZXhlY3V0ZWQuIFRo
ZSBjb21waWxlCisgICAgICogZnVuY3Rpb25zIHJldHVybiB2YWx1ZXMgLSB0aGUgbGlua2luZyBm
dW5jdGlvbnMgLSBhcmUgY29tYmluZWQgaW50byBhIGNvbXBvc2l0ZSBsaW5raW5nCisgICAgICog
ZnVuY3Rpb24sIHdoaWNoIGlzIHRoZSBhIGxpbmtpbmcgZnVuY3Rpb24gZm9yIHRoZSBub2RlLgor
ICAgICAqCisgICAgICogQHBhcmFtIHtOb2RlTGlzdH0gbm9kZUxpc3QgYW4gYXJyYXkgb2Ygbm9k
ZXMgb3IgTm9kZUxpc3QgdG8gY29tcGlsZQorICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oYW5ndWxh
ci5TY29wZSwgY2xvbmVBdHRhY2hGbj0pfSB0cmFuc2NsdWRlRm4gQSBsaW5raW5nIGZ1bmN0aW9u
LCB3aGVyZSB0aGUKKyAgICAgKiAgICAgICAgc2NvcGUgYXJndW1lbnQgaXMgYXV0by1nZW5lcmF0
ZWQgdG8gdGhlIG5ldyBjaGlsZCBvZiB0aGUgdHJhbnNjbHVkZWQgcGFyZW50IHNjb3BlLgorICAg
ICAqIEBwYXJhbSB7RE9NRWxlbWVudD19ICRyb290RWxlbWVudCBJZiB0aGUgbm9kZUxpc3QgaXMg
dGhlIHJvb3Qgb2YgdGhlIGNvbXBpbGF0aW9uIHRyZWUgdGhlbgorICAgICAqICAgICAgICB0aGUg
cm9vdEVsZW1lbnQgbXVzdCBiZSBzZXQgdGhlIGpxTGl0ZSBjb2xsZWN0aW9uIG9mIHRoZSBjb21w
aWxlIHJvb3QuIFRoaXMgaXMKKyAgICAgKiAgICAgICAgbmVlZGVkIHNvIHRoYXQgdGhlIGpxTGl0
ZSBjb2xsZWN0aW9uIGl0ZW1zIGNhbiBiZSByZXBsYWNlZCB3aXRoIHdpZGdldHMuCisgICAgICog
QHBhcmFtIHtudW1iZXI9fSBtYXhQcmlvcml0eSBNYXggZGlyZWN0aXZlIHByaW9yaXR5LgorICAg
ICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBjb21wb3NpdGUgbGlua2luZyBmdW5jdGlvbiBvZiBh
bGwgb2YgdGhlIG1hdGNoZWQgZGlyZWN0aXZlcyBvciBudWxsLgorICAgICAqLworICAgIGZ1bmN0
aW9uIGNvbXBpbGVOb2Rlcyhub2RlTGlzdCwgdHJhbnNjbHVkZUZuLCAkcm9vdEVsZW1lbnQsIG1h
eFByaW9yaXR5LCBpZ25vcmVEaXJlY3RpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJldmlvdXNDb21waWxlQ29udGV4dCkgeworICAgICAgdmFyIGxpbmtGbnMgPSBbXSwKKyAgICAg
ICAgICBhdHRycywgZGlyZWN0aXZlcywgbm9kZUxpbmtGbiwgY2hpbGROb2RlcywgY2hpbGRMaW5r
Rm4sIGxpbmtGbkZvdW5kLCBub2RlTGlua0ZuRm91bmQ7CisKKyAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbm9kZUxpc3QubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgYXR0cnMgPSBuZXcgQXR0cmli
dXRlcygpOworCisgICAgICAgIC8vIHdlIG11c3QgYWx3YXlzIHJlZmVyIHRvIG5vZGVMaXN0W2ld
IHNpbmNlIHRoZSBub2RlcyBjYW4gYmUgcmVwbGFjZWQgdW5kZXJuZWF0aCB1cy4KKyAgICAgICAg
ZGlyZWN0aXZlcyA9IGNvbGxlY3REaXJlY3RpdmVzKG5vZGVMaXN0W2ldLCBbXSwgYXR0cnMsIGkg
PT09IDAgPyBtYXhQcmlvcml0eSA6IHVuZGVmaW5lZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZ25vcmVEaXJlY3RpdmUpOworCisgICAgICAgIG5vZGVMaW5rRm4g
PSAoZGlyZWN0aXZlcy5sZW5ndGgpCisgICAgICAgICAgICA/IGFwcGx5RGlyZWN0aXZlc1RvTm9k
ZShkaXJlY3RpdmVzLCBub2RlTGlzdFtpXSwgYXR0cnMsIHRyYW5zY2x1ZGVGbiwgJHJvb3RFbGVt
ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCBbXSwgW10s
IHByZXZpb3VzQ29tcGlsZUNvbnRleHQpCisgICAgICAgICAgICA6IG51bGw7CisKKyAgICAgICAg
aWYgKG5vZGVMaW5rRm4gJiYgbm9kZUxpbmtGbi5zY29wZSkgeworICAgICAgICAgIGNvbXBpbGUu
JCRhZGRTY29wZUNsYXNzKGF0dHJzLiQkZWxlbWVudCk7CisgICAgICAgIH0KKworICAgICAgICBj
aGlsZExpbmtGbiA9IChub2RlTGlua0ZuICYmIG5vZGVMaW5rRm4udGVybWluYWwgfHwKKyAgICAg
ICAgICAgICAgICAgICAgICAhKGNoaWxkTm9kZXMgPSBub2RlTGlzdFtpXS5jaGlsZE5vZGVzKSB8
fAorICAgICAgICAgICAgICAgICAgICAgICFjaGlsZE5vZGVzLmxlbmd0aCkKKyAgICAgICAgICAg
ID8gbnVsbAorICAgICAgICAgICAgOiBjb21waWxlTm9kZXMoY2hpbGROb2RlcywKKyAgICAgICAg
ICAgICAgICAgbm9kZUxpbmtGbiA/ICgKKyAgICAgICAgICAgICAgICAgIChub2RlTGlua0ZuLnRy
YW5zY2x1ZGVPblRoaXNFbGVtZW50IHx8ICFub2RlTGlua0ZuLnRlbXBsYXRlT25UaGlzRWxlbWVu
dCkKKyAgICAgICAgICAgICAgICAgICAgICYmIG5vZGVMaW5rRm4udHJhbnNjbHVkZSkgOiB0cmFu
c2NsdWRlRm4pOworCisgICAgICAgIGlmIChub2RlTGlua0ZuIHx8IGNoaWxkTGlua0ZuKSB7Cisg
ICAgICAgICAgbGlua0Zucy5wdXNoKGksIG5vZGVMaW5rRm4sIGNoaWxkTGlua0ZuKTsKKyAgICAg
ICAgICBsaW5rRm5Gb3VuZCA9IHRydWU7CisgICAgICAgICAgbm9kZUxpbmtGbkZvdW5kID0gbm9k
ZUxpbmtGbkZvdW5kIHx8IG5vZGVMaW5rRm47CisgICAgICAgIH0KKworICAgICAgICAvL3VzZSB0
aGUgcHJldmlvdXMgY29udGV4dCBvbmx5IGZvciB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgdmly
dHVhbCBncm91cAorICAgICAgICBwcmV2aW91c0NvbXBpbGVDb250ZXh0ID0gbnVsbDsKKyAgICAg
IH0KKworICAgICAgLy8gcmV0dXJuIGEgbGlua2luZyBmdW5jdGlvbiBpZiB3ZSBoYXZlIGZvdW5k
IGFueXRoaW5nLCBudWxsIG90aGVyd2lzZQorICAgICAgcmV0dXJuIGxpbmtGbkZvdW5kID8gY29t
cG9zaXRlTGlua0ZuIDogbnVsbDsKKworICAgICAgZnVuY3Rpb24gY29tcG9zaXRlTGlua0ZuKHNj
b3BlLCBub2RlTGlzdCwgJHJvb3RFbGVtZW50LCBwYXJlbnRCb3VuZFRyYW5zY2x1ZGVGbikgewor
ICAgICAgICB2YXIgbm9kZUxpbmtGbiwgY2hpbGRMaW5rRm4sIG5vZGUsIGNoaWxkU2NvcGUsIGks
IGlpLCBpZHgsIGNoaWxkQm91bmRUcmFuc2NsdWRlRm47CisgICAgICAgIHZhciBzdGFibGVOb2Rl
TGlzdDsKKworCisgICAgICAgIGlmIChub2RlTGlua0ZuRm91bmQpIHsKKyAgICAgICAgICAvLyBj
b3B5IG5vZGVMaXN0IHNvIHRoYXQgaWYgYSBub2RlTGlua0ZuIHJlbW92ZXMgb3IgYWRkcyBhbiBl
bGVtZW50IGF0IHRoaXMgRE9NIGxldmVsIG91cgorICAgICAgICAgIC8vIG9mZnNldHMgZG9uJ3Qg
Z2V0IHNjcmV3ZWQgdXAKKyAgICAgICAgICB2YXIgbm9kZUxpc3RMZW5ndGggPSBub2RlTGlzdC5s
ZW5ndGg7CisgICAgICAgICAgc3RhYmxlTm9kZUxpc3QgPSBuZXcgQXJyYXkobm9kZUxpc3RMZW5n
dGgpOworCisgICAgICAgICAgLy8gY3JlYXRlIGEgc3BhcnNlIGFycmF5IGJ5IG9ubHkgY29weWlu
ZyB0aGUgZWxlbWVudHMgd2hpY2ggaGF2ZSBhIGxpbmtGbgorICAgICAgICAgIGZvciAoaSA9IDA7
IGkgPCBsaW5rRm5zLmxlbmd0aDsgaSs9MykgeworICAgICAgICAgICAgaWR4ID0gbGlua0Zuc1tp
XTsKKyAgICAgICAgICAgIHN0YWJsZU5vZGVMaXN0W2lkeF0gPSBub2RlTGlzdFtpZHhdOworICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzdGFibGVOb2RlTGlzdCA9IG5v
ZGVMaXN0OworICAgICAgICB9CisKKyAgICAgICAgZm9yIChpID0gMCwgaWkgPSBsaW5rRm5zLmxl
bmd0aDsgaSA8IGlpOykgeworICAgICAgICAgIG5vZGUgPSBzdGFibGVOb2RlTGlzdFtsaW5rRm5z
W2krK11dOworICAgICAgICAgIG5vZGVMaW5rRm4gPSBsaW5rRm5zW2krK107CisgICAgICAgICAg
Y2hpbGRMaW5rRm4gPSBsaW5rRm5zW2krK107CisKKyAgICAgICAgICBpZiAobm9kZUxpbmtGbikg
eworICAgICAgICAgICAgaWYgKG5vZGVMaW5rRm4uc2NvcGUpIHsKKyAgICAgICAgICAgICAgY2hp
bGRTY29wZSA9IHNjb3BlLiRuZXcoKTsKKyAgICAgICAgICAgICAgY29tcGlsZS4kJGFkZFNjb3Bl
SW5mbyhqcUxpdGUobm9kZSksIGNoaWxkU2NvcGUpOworICAgICAgICAgICAgICB2YXIgZGVzdHJv
eUJpbmRpbmdzID0gbm9kZUxpbmtGbi4kJGRlc3Ryb3lCaW5kaW5nczsKKyAgICAgICAgICAgICAg
aWYgKGRlc3Ryb3lCaW5kaW5ncykgeworICAgICAgICAgICAgICAgIG5vZGVMaW5rRm4uJCRkZXN0
cm95QmluZGluZ3MgPSBudWxsOworICAgICAgICAgICAgICAgIGNoaWxkU2NvcGUuJG9uKCckZGVz
dHJveWVkJywgZGVzdHJveUJpbmRpbmdzKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgY2hpbGRTY29wZSA9IHNjb3BlOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAobm9kZUxpbmtGbi50cmFuc2NsdWRlT25UaGlzRWxlbWVudCkg
eworICAgICAgICAgICAgICBjaGlsZEJvdW5kVHJhbnNjbHVkZUZuID0gY3JlYXRlQm91bmRUcmFu
c2NsdWRlRm4oCisgICAgICAgICAgICAgICAgICBzY29wZSwgbm9kZUxpbmtGbi50cmFuc2NsdWRl
LCBwYXJlbnRCb3VuZFRyYW5zY2x1ZGVGbik7CisKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIW5v
ZGVMaW5rRm4udGVtcGxhdGVPblRoaXNFbGVtZW50ICYmIHBhcmVudEJvdW5kVHJhbnNjbHVkZUZu
KSB7CisgICAgICAgICAgICAgIGNoaWxkQm91bmRUcmFuc2NsdWRlRm4gPSBwYXJlbnRCb3VuZFRy
YW5zY2x1ZGVGbjsKKworICAgICAgICAgICAgfSBlbHNlIGlmICghcGFyZW50Qm91bmRUcmFuc2Ns
dWRlRm4gJiYgdHJhbnNjbHVkZUZuKSB7CisgICAgICAgICAgICAgIGNoaWxkQm91bmRUcmFuc2Ns
dWRlRm4gPSBjcmVhdGVCb3VuZFRyYW5zY2x1ZGVGbihzY29wZSwgdHJhbnNjbHVkZUZuKTsKKwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgY2hpbGRCb3VuZFRyYW5zY2x1ZGVG
biA9IG51bGw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5vZGVMaW5rRm4oY2hpbGRM
aW5rRm4sIGNoaWxkU2NvcGUsIG5vZGUsICRyb290RWxlbWVudCwgY2hpbGRCb3VuZFRyYW5zY2x1
ZGVGbiwKKyAgICAgICAgICAgICAgICAgICAgICAgbm9kZUxpbmtGbik7CisKKyAgICAgICAgICB9
IGVsc2UgaWYgKGNoaWxkTGlua0ZuKSB7CisgICAgICAgICAgICBjaGlsZExpbmtGbihzY29wZSwg
bm9kZS5jaGlsZE5vZGVzLCB1bmRlZmluZWQsIHBhcmVudEJvdW5kVHJhbnNjbHVkZUZuKTsKKyAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBjcmVh
dGVCb3VuZFRyYW5zY2x1ZGVGbihzY29wZSwgdHJhbnNjbHVkZUZuLCBwcmV2aW91c0JvdW5kVHJh
bnNjbHVkZUZuKSB7CisKKyAgICAgIHZhciBib3VuZFRyYW5zY2x1ZGVGbiA9IGZ1bmN0aW9uKHRy
YW5zY2x1ZGVkU2NvcGUsIGNsb25lRm4sIGNvbnRyb2xsZXJzLCBmdXR1cmVQYXJlbnRFbGVtZW50
LCBjb250YWluaW5nU2NvcGUpIHsKKworICAgICAgICBpZiAoIXRyYW5zY2x1ZGVkU2NvcGUpIHsK
KyAgICAgICAgICB0cmFuc2NsdWRlZFNjb3BlID0gc2NvcGUuJG5ldyhmYWxzZSwgY29udGFpbmlu
Z1Njb3BlKTsKKyAgICAgICAgICB0cmFuc2NsdWRlZFNjb3BlLiQkdHJhbnNjbHVkZWQgPSB0cnVl
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRyYW5zY2x1ZGVGbih0cmFuc2NsdWRlZFNj
b3BlLCBjbG9uZUZuLCB7CisgICAgICAgICAgcGFyZW50Qm91bmRUcmFuc2NsdWRlRm46IHByZXZp
b3VzQm91bmRUcmFuc2NsdWRlRm4sCisgICAgICAgICAgdHJhbnNjbHVkZUNvbnRyb2xsZXJzOiBj
b250cm9sbGVycywKKyAgICAgICAgICBmdXR1cmVQYXJlbnRFbGVtZW50OiBmdXR1cmVQYXJlbnRF
bGVtZW50CisgICAgICAgIH0pOworICAgICAgfTsKKworICAgICAgcmV0dXJuIGJvdW5kVHJhbnNj
bHVkZUZuOworICAgIH0KKworICAgIC8qKgorICAgICAqIExvb2tzIGZvciBkaXJlY3RpdmVzIG9u
IHRoZSBnaXZlbiBub2RlIGFuZCBhZGRzIHRoZW0gdG8gdGhlIGRpcmVjdGl2ZSBjb2xsZWN0aW9u
IHdoaWNoIGlzCisgICAgICogc29ydGVkLgorICAgICAqCisgICAgICogQHBhcmFtIG5vZGUgTm9k
ZSB0byBzZWFyY2guCisgICAgICogQHBhcmFtIGRpcmVjdGl2ZXMgQW4gYXJyYXkgdG8gd2hpY2gg
dGhlIGRpcmVjdGl2ZXMgYXJlIGFkZGVkIHRvLiBUaGlzIGFycmF5IGlzIHNvcnRlZCBiZWZvcmUK
KyAgICAgKiAgICAgICAgdGhlIGZ1bmN0aW9uIHJldHVybnMuCisgICAgICogQHBhcmFtIGF0dHJz
IFRoZSBzaGFyZWQgYXR0cnMgb2JqZWN0IHdoaWNoIGlzIHVzZWQgdG8gcG9wdWxhdGUgdGhlIG5v
cm1hbGl6ZWQgYXR0cmlidXRlcy4KKyAgICAgKiBAcGFyYW0ge251bWJlcj19IG1heFByaW9yaXR5
IE1heCBkaXJlY3RpdmUgcHJpb3JpdHkuCisgICAgICovCisgICAgZnVuY3Rpb24gY29sbGVjdERp
cmVjdGl2ZXMobm9kZSwgZGlyZWN0aXZlcywgYXR0cnMsIG1heFByaW9yaXR5LCBpZ25vcmVEaXJl
Y3RpdmUpIHsKKyAgICAgIHZhciBub2RlVHlwZSA9IG5vZGUubm9kZVR5cGUsCisgICAgICAgICAg
YXR0cnNNYXAgPSBhdHRycy4kYXR0ciwKKyAgICAgICAgICBtYXRjaCwKKyAgICAgICAgICBjbGFz
c05hbWU7CisKKyAgICAgIHN3aXRjaCAobm9kZVR5cGUpIHsKKyAgICAgICAgY2FzZSBOT0RFX1RZ
UEVfRUxFTUVOVDogLyogRWxlbWVudCAqLworICAgICAgICAgIC8vIHVzZSB0aGUgbm9kZSBuYW1l
OiA8ZGlyZWN0aXZlPgorICAgICAgICAgIGFkZERpcmVjdGl2ZShkaXJlY3RpdmVzLAorICAgICAg
ICAgICAgICBkaXJlY3RpdmVOb3JtYWxpemUobm9kZU5hbWVfKG5vZGUpKSwgJ0UnLCBtYXhQcmlv
cml0eSwgaWdub3JlRGlyZWN0aXZlKTsKKworICAgICAgICAgIC8vIGl0ZXJhdGUgb3ZlciB0aGUg
YXR0cmlidXRlcworICAgICAgICAgIGZvciAodmFyIGF0dHIsIG5hbWUsIG5OYW1lLCBuZ0F0dHJO
YW1lLCB2YWx1ZSwgaXNOZ0F0dHIsIG5BdHRycyA9IG5vZGUuYXR0cmlidXRlcywKKyAgICAgICAg
ICAgICAgICAgICBqID0gMCwgamogPSBuQXR0cnMgJiYgbkF0dHJzLmxlbmd0aDsgaiA8IGpqOyBq
KyspIHsKKyAgICAgICAgICAgIHZhciBhdHRyU3RhcnROYW1lID0gZmFsc2U7CisgICAgICAgICAg
ICB2YXIgYXR0ckVuZE5hbWUgPSBmYWxzZTsKKworICAgICAgICAgICAgYXR0ciA9IG5BdHRyc1tq
XTsKKyAgICAgICAgICAgIG5hbWUgPSBhdHRyLm5hbWU7CisgICAgICAgICAgICB2YWx1ZSA9IHRy
aW0oYXR0ci52YWx1ZSk7CisKKyAgICAgICAgICAgIC8vIHN1cHBvcnQgbmdBdHRyIGF0dHJpYnV0
ZSBiaW5kaW5nCisgICAgICAgICAgICBuZ0F0dHJOYW1lID0gZGlyZWN0aXZlTm9ybWFsaXplKG5h
bWUpOworICAgICAgICAgICAgaWYgKGlzTmdBdHRyID0gTkdfQVRUUl9CSU5ESU5HLnRlc3QobmdB
dHRyTmFtZSkpIHsKKyAgICAgICAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShQUkVGSVhfUkVH
RVhQLCAnJykKKyAgICAgICAgICAgICAgICAuc3Vic3RyKDgpLnJlcGxhY2UoL18oLikvZywgZnVu
Y3Rpb24obWF0Y2gsIGxldHRlcikgeworICAgICAgICAgICAgICAgICAgcmV0dXJuIGxldHRlci50
b1VwcGVyQ2FzZSgpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICB2YXIgZGlyZWN0aXZlTk5hbWUgPSBuZ0F0dHJOYW1lLnJlcGxhY2UoLyhTdGFydHxF
bmQpJC8sICcnKTsKKyAgICAgICAgICAgIGlmIChkaXJlY3RpdmVJc011bHRpRWxlbWVudChkaXJl
Y3RpdmVOTmFtZSkpIHsKKyAgICAgICAgICAgICAgaWYgKG5nQXR0ck5hbWUgPT09IGRpcmVjdGl2
ZU5OYW1lICsgJ1N0YXJ0JykgeworICAgICAgICAgICAgICAgIGF0dHJTdGFydE5hbWUgPSBuYW1l
OworICAgICAgICAgICAgICAgIGF0dHJFbmROYW1lID0gbmFtZS5zdWJzdHIoMCwgbmFtZS5sZW5n
dGggLSA1KSArICdlbmQnOworICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cigwLCBu
YW1lLmxlbmd0aCAtIDYpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIG5OYW1lID0gZGlyZWN0aXZlTm9ybWFsaXplKG5hbWUudG9Mb3dlckNhc2UoKSk7Cisg
ICAgICAgICAgICBhdHRyc01hcFtuTmFtZV0gPSBuYW1lOworICAgICAgICAgICAgaWYgKGlzTmdB
dHRyIHx8ICFhdHRycy5oYXNPd25Qcm9wZXJ0eShuTmFtZSkpIHsKKyAgICAgICAgICAgICAgICBh
dHRyc1tuTmFtZV0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAoZ2V0Qm9vbGVhbkF0dHJO
YW1lKG5vZGUsIG5OYW1lKSkgeworICAgICAgICAgICAgICAgICAgYXR0cnNbbk5hbWVdID0gdHJ1
ZTsgLy8gcHJlc2VuY2UgbWVhbnMgdHJ1ZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGFkZEF0dHJJbnRlcnBvbGF0ZURpcmVjdGl2ZShub2RlLCBkaXJlY3Rp
dmVzLCB2YWx1ZSwgbk5hbWUsIGlzTmdBdHRyKTsKKyAgICAgICAgICAgIGFkZERpcmVjdGl2ZShk
aXJlY3RpdmVzLCBuTmFtZSwgJ0EnLCBtYXhQcmlvcml0eSwgaWdub3JlRGlyZWN0aXZlLCBhdHRy
U3RhcnROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyRW5kTmFtZSk7CisgICAg
ICAgICAgfQorCisgICAgICAgICAgLy8gdXNlIGNsYXNzIGFzIGRpcmVjdGl2ZQorICAgICAgICAg
IGNsYXNzTmFtZSA9IG5vZGUuY2xhc3NOYW1lOworICAgICAgICAgIGlmIChpc09iamVjdChjbGFz
c05hbWUpKSB7CisgICAgICAgICAgICAgIC8vIE1heWJlIFNWR0FuaW1hdGVkU3RyaW5nCisgICAg
ICAgICAgICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS5hbmltVmFsOworICAgICAgICAgIH0KKyAg
ICAgICAgICBpZiAoaXNTdHJpbmcoY2xhc3NOYW1lKSAmJiBjbGFzc05hbWUgIT09ICcnKSB7Cisg
ICAgICAgICAgICB3aGlsZSAobWF0Y2ggPSBDTEFTU19ESVJFQ1RJVkVfUkVHRVhQLmV4ZWMoY2xh
c3NOYW1lKSkgeworICAgICAgICAgICAgICBuTmFtZSA9IGRpcmVjdGl2ZU5vcm1hbGl6ZShtYXRj
aFsyXSk7CisgICAgICAgICAgICAgIGlmIChhZGREaXJlY3RpdmUoZGlyZWN0aXZlcywgbk5hbWUs
ICdDJywgbWF4UHJpb3JpdHksIGlnbm9yZURpcmVjdGl2ZSkpIHsKKyAgICAgICAgICAgICAgICBh
dHRyc1tuTmFtZV0gPSB0cmltKG1hdGNoWzNdKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUuc3Vic3RyKG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0u
bGVuZ3RoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgTk9ERV9UWVBFX1RFWFQ6IC8qIFRleHQgTm9kZSAqLworICAgICAgICAgIGlm
IChtc2llID09PSAxMSkgeworICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgIzExNzgxCisg
ICAgICAgICAgICB3aGlsZSAobm9kZS5wYXJlbnROb2RlICYmIG5vZGUubmV4dFNpYmxpbmcgJiYg
bm9kZS5uZXh0U2libGluZy5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFX1RFWFQpIHsKKyAgICAgICAg
ICAgICAgbm9kZS5ub2RlVmFsdWUgPSBub2RlLm5vZGVWYWx1ZSArIG5vZGUubmV4dFNpYmxpbmcu
bm9kZVZhbHVlOworICAgICAgICAgICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9k
ZS5uZXh0U2libGluZyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGFk
ZFRleHRJbnRlcnBvbGF0ZURpcmVjdGl2ZShkaXJlY3RpdmVzLCBub2RlLm5vZGVWYWx1ZSk7Cisg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTk9ERV9UWVBFX0NPTU1FTlQ6IC8qIENvbW1l
bnQgKi8KKyAgICAgICAgICB0cnkgeworICAgICAgICAgICAgbWF0Y2ggPSBDT01NRU5UX0RJUkVD
VElWRV9SRUdFWFAuZXhlYyhub2RlLm5vZGVWYWx1ZSk7CisgICAgICAgICAgICBpZiAobWF0Y2gp
IHsKKyAgICAgICAgICAgICAgbk5hbWUgPSBkaXJlY3RpdmVOb3JtYWxpemUobWF0Y2hbMV0pOwor
ICAgICAgICAgICAgICBpZiAoYWRkRGlyZWN0aXZlKGRpcmVjdGl2ZXMsIG5OYW1lLCAnTScsIG1h
eFByaW9yaXR5LCBpZ25vcmVEaXJlY3RpdmUpKSB7CisgICAgICAgICAgICAgICAgYXR0cnNbbk5h
bWVdID0gdHJpbShtYXRjaFsyXSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAvLyB0dXJucyBvdXQgdGhhdCB1bmRl
ciBzb21lIGNpcmN1bXN0YW5jZXMgSUU5IHRocm93cyBlcnJvcnMgd2hlbiBvbmUgYXR0ZW1wdHMg
dG8gcmVhZAorICAgICAgICAgICAgLy8gY29tbWVudCdzIG5vZGUgdmFsdWUuCisgICAgICAgICAg
ICAvLyBKdXN0IGlnbm9yZSBpdCBhbmQgY29udGludWUuIChDYW4ndCBzZWVtIHRvIHJlcHJvZHVj
ZSBpbiB0ZXN0IGNhc2UuKQorICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgIH0K
KworICAgICAgZGlyZWN0aXZlcy5zb3J0KGJ5UHJpb3JpdHkpOworICAgICAgcmV0dXJuIGRpcmVj
dGl2ZXM7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2l2ZW4gYSBub2RlIHdpdGggYW4gZGly
ZWN0aXZlLXN0YXJ0IGl0IGNvbGxlY3RzIGFsbCBvZiB0aGUgc2libGluZ3MgdW50aWwgaXQgZmlu
ZHMKKyAgICAgKiBkaXJlY3RpdmUtZW5kLgorICAgICAqIEBwYXJhbSBub2RlCisgICAgICogQHBh
cmFtIGF0dHJTdGFydAorICAgICAqIEBwYXJhbSBhdHRyRW5kCisgICAgICogQHJldHVybnMgeyp9
CisgICAgICovCisgICAgZnVuY3Rpb24gZ3JvdXBTY2FuKG5vZGUsIGF0dHJTdGFydCwgYXR0ckVu
ZCkgeworICAgICAgdmFyIG5vZGVzID0gW107CisgICAgICB2YXIgZGVwdGggPSAwOworICAgICAg
aWYgKGF0dHJTdGFydCAmJiBub2RlLmhhc0F0dHJpYnV0ZSAmJiBub2RlLmhhc0F0dHJpYnV0ZShh
dHRyU3RhcnQpKSB7CisgICAgICAgIGRvIHsKKyAgICAgICAgICBpZiAoIW5vZGUpIHsKKyAgICAg
ICAgICAgIHRocm93ICRjb21waWxlTWluRXJyKCd1dGVyZGlyJywKKyAgICAgICAgICAgICAgICAg
ICAgICAiVW50ZXJtaW5hdGVkIGF0dHJpYnV0ZSwgZm91bmQgJ3swfScgYnV0IG5vIG1hdGNoaW5n
ICd7MX0nIGZvdW5kLiIsCisgICAgICAgICAgICAgICAgICAgICAgYXR0clN0YXJ0LCBhdHRyRW5k
KTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gTk9ERV9UWVBF
X0VMRU1FTlQpIHsKKyAgICAgICAgICAgIGlmIChub2RlLmhhc0F0dHJpYnV0ZShhdHRyU3RhcnQp
KSBkZXB0aCsrOworICAgICAgICAgICAgaWYgKG5vZGUuaGFzQXR0cmlidXRlKGF0dHJFbmQpKSBk
ZXB0aC0tOworICAgICAgICAgIH0KKyAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUpOworICAgICAg
ICAgIG5vZGUgPSBub2RlLm5leHRTaWJsaW5nOworICAgICAgICB9IHdoaWxlIChkZXB0aCA+IDAp
OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbm9kZXMucHVzaChub2RlKTsKKyAgICAgIH0KKwor
ICAgICAgcmV0dXJuIGpxTGl0ZShub2Rlcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogV3Jh
cHBlciBmb3IgbGlua2luZyBmdW5jdGlvbiB3aGljaCBjb252ZXJ0cyBub3JtYWwgbGlua2luZyBm
dW5jdGlvbiBpbnRvIGEgZ3JvdXBlZAorICAgICAqIGxpbmtpbmcgZnVuY3Rpb24uCisgICAgICog
QHBhcmFtIGxpbmtGbgorICAgICAqIEBwYXJhbSBhdHRyU3RhcnQKKyAgICAgKiBAcGFyYW0gYXR0
ckVuZAorICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBn
cm91cEVsZW1lbnRzTGlua0ZuV3JhcHBlcihsaW5rRm4sIGF0dHJTdGFydCwgYXR0ckVuZCkgewor
ICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRycywgY29udHJvbGxlcnMs
IHRyYW5zY2x1ZGVGbikgeworICAgICAgICBlbGVtZW50ID0gZ3JvdXBTY2FuKGVsZW1lbnRbMF0s
IGF0dHJTdGFydCwgYXR0ckVuZCk7CisgICAgICAgIHJldHVybiBsaW5rRm4oc2NvcGUsIGVsZW1l
bnQsIGF0dHJzLCBjb250cm9sbGVycywgdHJhbnNjbHVkZUZuKTsKKyAgICAgIH07CisgICAgfQor
CisgICAgLyoqCisgICAgICogT25jZSB0aGUgZGlyZWN0aXZlcyBoYXZlIGJlZW4gY29sbGVjdGVk
LCB0aGVpciBjb21waWxlIGZ1bmN0aW9ucyBhcmUgZXhlY3V0ZWQuIFRoaXMgbWV0aG9kCisgICAg
ICogaXMgcmVzcG9uc2libGUgZm9yIGlubGluaW5nIGRpcmVjdGl2ZSB0ZW1wbGF0ZXMgYXMgd2Vs
bCBhcyB0ZXJtaW5hdGluZyB0aGUgYXBwbGljYXRpb24KKyAgICAgKiBvZiB0aGUgZGlyZWN0aXZl
cyBpZiB0aGUgdGVybWluYWwgZGlyZWN0aXZlIGhhcyBiZWVuIHJlYWNoZWQuCisgICAgICoKKyAg
ICAgKiBAcGFyYW0ge0FycmF5fSBkaXJlY3RpdmVzIEFycmF5IG9mIGNvbGxlY3RlZCBkaXJlY3Rp
dmVzIHRvIGV4ZWN1dGUgdGhlaXIgY29tcGlsZSBmdW5jdGlvbi4KKyAgICAgKiAgICAgICAgdGhp
cyBuZWVkcyB0byBiZSBwcmUtc29ydGVkIGJ5IHByaW9yaXR5IG9yZGVyLgorICAgICAqIEBwYXJh
bSB7Tm9kZX0gY29tcGlsZU5vZGUgVGhlIHJhdyBET00gbm9kZSB0byBhcHBseSB0aGUgY29tcGls
ZSBmdW5jdGlvbnMgdG8KKyAgICAgKiBAcGFyYW0ge09iamVjdH0gdGVtcGxhdGVBdHRycyBUaGUg
c2hhcmVkIGF0dHJpYnV0ZSBmdW5jdGlvbgorICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oYW5ndWxh
ci5TY29wZSwgY2xvbmVBdHRhY2hGbj0pfSB0cmFuc2NsdWRlRm4gQSBsaW5raW5nIGZ1bmN0aW9u
LCB3aGVyZSB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2NvcGUgYXJndW1lbnQgaXMgYXV0by1nZW5lcmF0ZWQgdG8gdGhlIG5ldwor
ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGlsZCBvZiB0aGUgdHJhbnNjbHVkZWQgcGFyZW50IHNjb3BlLgorICAgICAqIEBwYXJhbSB7SlFM
aXRlfSBqcUNvbGxlY3Rpb24gSWYgd2UgYXJlIHdvcmtpbmcgb24gdGhlIHJvb3Qgb2YgdGhlIGNv
bXBpbGUgdHJlZSB0aGVuIHRoaXMKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFyZ3VtZW50IGhhcyB0aGUgcm9vdCBqcUxpdGUgYXJyYXkgc28gdGhhdCB3ZSBjYW4gcmVwbGFj
ZSBub2RlcworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gaXQuCisgICAg
ICogQHBhcmFtIHtPYmplY3Q9fSBvcmlnaW5hbFJlcGxhY2VEaXJlY3RpdmUgQW4gb3B0aW9uYWwg
ZGlyZWN0aXZlIHRoYXQgd2lsbCBiZSBpZ25vcmVkIHdoZW4KKyAgICAgKiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxpbmcgdGhlIHRyYW5zY2x1c2lvbi4K
KyAgICAgKiBAcGFyYW0ge0FycmF5LjxGdW5jdGlvbj59IHByZUxpbmtGbnMKKyAgICAgKiBAcGFy
YW0ge0FycmF5LjxGdW5jdGlvbj59IHBvc3RMaW5rRm5zCisgICAgICogQHBhcmFtIHtPYmplY3R9
IHByZXZpb3VzQ29tcGlsZUNvbnRleHQgQ29udGV4dCB1c2VkIGZvciBwcmV2aW91cyBjb21waWxh
dGlvbiBvZiB0aGUgY3VycmVudAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUKKyAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IGxpbmtGbgorICAgICAq
LworICAgIGZ1bmN0aW9uIGFwcGx5RGlyZWN0aXZlc1RvTm9kZShkaXJlY3RpdmVzLCBjb21waWxl
Tm9kZSwgdGVtcGxhdGVBdHRycywgdHJhbnNjbHVkZUZuLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqcUNvbGxlY3Rpb24sIG9yaWdpbmFsUmVwbGFjZURpcmVjdGl2ZSwgcHJl
TGlua0ZucywgcG9zdExpbmtGbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByZXZpb3VzQ29tcGlsZUNvbnRleHQpIHsKKyAgICAgIHByZXZpb3VzQ29tcGlsZUNvbnRleHQg
PSBwcmV2aW91c0NvbXBpbGVDb250ZXh0IHx8IHt9OworCisgICAgICB2YXIgdGVybWluYWxQcmlv
cml0eSA9IC1OdW1iZXIuTUFYX1ZBTFVFLAorICAgICAgICAgIG5ld1Njb3BlRGlyZWN0aXZlID0g
cHJldmlvdXNDb21waWxlQ29udGV4dC5uZXdTY29wZURpcmVjdGl2ZSwKKyAgICAgICAgICBjb250
cm9sbGVyRGlyZWN0aXZlcyA9IHByZXZpb3VzQ29tcGlsZUNvbnRleHQuY29udHJvbGxlckRpcmVj
dGl2ZXMsCisgICAgICAgICAgbmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlID0gcHJldmlvdXNDb21w
aWxlQ29udGV4dC5uZXdJc29sYXRlU2NvcGVEaXJlY3RpdmUsCisgICAgICAgICAgdGVtcGxhdGVE
aXJlY3RpdmUgPSBwcmV2aW91c0NvbXBpbGVDb250ZXh0LnRlbXBsYXRlRGlyZWN0aXZlLAorICAg
ICAgICAgIG5vblRsYlRyYW5zY2x1ZGVEaXJlY3RpdmUgPSBwcmV2aW91c0NvbXBpbGVDb250ZXh0
Lm5vblRsYlRyYW5zY2x1ZGVEaXJlY3RpdmUsCisgICAgICAgICAgaGFzVHJhbnNjbHVkZURpcmVj
dGl2ZSA9IGZhbHNlLAorICAgICAgICAgIGhhc1RlbXBsYXRlID0gZmFsc2UsCisgICAgICAgICAg
aGFzRWxlbWVudFRyYW5zY2x1ZGVEaXJlY3RpdmUgPSBwcmV2aW91c0NvbXBpbGVDb250ZXh0Lmhh
c0VsZW1lbnRUcmFuc2NsdWRlRGlyZWN0aXZlLAorICAgICAgICAgICRjb21waWxlTm9kZSA9IHRl
bXBsYXRlQXR0cnMuJCRlbGVtZW50ID0ganFMaXRlKGNvbXBpbGVOb2RlKSwKKyAgICAgICAgICBk
aXJlY3RpdmUsCisgICAgICAgICAgZGlyZWN0aXZlTmFtZSwKKyAgICAgICAgICAkdGVtcGxhdGUs
CisgICAgICAgICAgcmVwbGFjZURpcmVjdGl2ZSA9IG9yaWdpbmFsUmVwbGFjZURpcmVjdGl2ZSwK
KyAgICAgICAgICBjaGlsZFRyYW5zY2x1ZGVGbiA9IHRyYW5zY2x1ZGVGbiwKKyAgICAgICAgICBs
aW5rRm4sCisgICAgICAgICAgZGlyZWN0aXZlVmFsdWU7CisKKyAgICAgIC8vIGV4ZWN1dGVzIGFs
bCBkaXJlY3RpdmVzIG9uIHRoZSBjdXJyZW50IGVsZW1lbnQKKyAgICAgIGZvciAodmFyIGkgPSAw
LCBpaSA9IGRpcmVjdGl2ZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICBkaXJlY3Rp
dmUgPSBkaXJlY3RpdmVzW2ldOworICAgICAgICB2YXIgYXR0clN0YXJ0ID0gZGlyZWN0aXZlLiQk
c3RhcnQ7CisgICAgICAgIHZhciBhdHRyRW5kID0gZGlyZWN0aXZlLiQkZW5kOworCisgICAgICAg
IC8vIGNvbGxlY3QgbXVsdGlibG9jayBzZWN0aW9ucworICAgICAgICBpZiAoYXR0clN0YXJ0KSB7
CisgICAgICAgICAgJGNvbXBpbGVOb2RlID0gZ3JvdXBTY2FuKGNvbXBpbGVOb2RlLCBhdHRyU3Rh
cnQsIGF0dHJFbmQpOworICAgICAgICB9CisgICAgICAgICR0ZW1wbGF0ZSA9IHVuZGVmaW5lZDsK
KworICAgICAgICBpZiAodGVybWluYWxQcmlvcml0eSA+IGRpcmVjdGl2ZS5wcmlvcml0eSkgewor
ICAgICAgICAgIGJyZWFrOyAvLyBwcmV2ZW50IGZ1cnRoZXIgcHJvY2Vzc2luZyBvZiBkaXJlY3Rp
dmVzCisgICAgICAgIH0KKworICAgICAgICBpZiAoZGlyZWN0aXZlVmFsdWUgPSBkaXJlY3RpdmUu
c2NvcGUpIHsKKworICAgICAgICAgIC8vIHNraXAgdGhlIGNoZWNrIGZvciBkaXJlY3RpdmVzIHdp
dGggYXN5bmMgdGVtcGxhdGVzLCB3ZSdsbCBjaGVjayB0aGUgZGVyaXZlZCBzeW5jCisgICAgICAg
ICAgLy8gZGlyZWN0aXZlIHdoZW4gdGhlIHRlbXBsYXRlIGFycml2ZXMKKyAgICAgICAgICBpZiAo
IWRpcmVjdGl2ZS50ZW1wbGF0ZVVybCkgeworICAgICAgICAgICAgaWYgKGlzT2JqZWN0KGRpcmVj
dGl2ZVZhbHVlKSkgeworICAgICAgICAgICAgICAvLyBUaGlzIGRpcmVjdGl2ZSBpcyB0cnlpbmcg
dG8gYWRkIGFuIGlzb2xhdGVkIHNjb3BlLgorICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHRo
ZXJlIGlzIG5vIHNjb3BlIG9mIGFueSBraW5kIGFscmVhZHkKKyAgICAgICAgICAgICAgYXNzZXJ0
Tm9EdXBsaWNhdGUoJ25ldy9pc29sYXRlZCBzY29wZScsIG5ld0lzb2xhdGVTY29wZURpcmVjdGl2
ZSB8fCBuZXdTY29wZURpcmVjdGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGlyZWN0aXZlLCAkY29tcGlsZU5vZGUpOworICAgICAgICAgICAgICBuZXdJc29sYXRlU2NvcGVE
aXJlY3RpdmUgPSBkaXJlY3RpdmU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAvLyBUaGlzIGRpcmVjdGl2ZSBpcyB0cnlpbmcgdG8gYWRkIGEgY2hpbGQgc2NvcGUuCisgICAg
ICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlcmUgaXMgbm8gaXNvbGF0ZWQgc2NvcGUgYWxyZWFk
eQorICAgICAgICAgICAgICBhc3NlcnROb0R1cGxpY2F0ZSgnbmV3L2lzb2xhdGVkIHNjb3BlJywg
bmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlLCBkaXJlY3RpdmUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICRjb21waWxlTm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQor
CisgICAgICAgICAgbmV3U2NvcGVEaXJlY3RpdmUgPSBuZXdTY29wZURpcmVjdGl2ZSB8fCBkaXJl
Y3RpdmU7CisgICAgICAgIH0KKworICAgICAgICBkaXJlY3RpdmVOYW1lID0gZGlyZWN0aXZlLm5h
bWU7CisKKyAgICAgICAgaWYgKCFkaXJlY3RpdmUudGVtcGxhdGVVcmwgJiYgZGlyZWN0aXZlLmNv
bnRyb2xsZXIpIHsKKyAgICAgICAgICBkaXJlY3RpdmVWYWx1ZSA9IGRpcmVjdGl2ZS5jb250cm9s
bGVyOworICAgICAgICAgIGNvbnRyb2xsZXJEaXJlY3RpdmVzID0gY29udHJvbGxlckRpcmVjdGl2
ZXMgfHwgY3JlYXRlTWFwKCk7CisgICAgICAgICAgYXNzZXJ0Tm9EdXBsaWNhdGUoIiciICsgZGly
ZWN0aXZlTmFtZSArICInIGNvbnRyb2xsZXIiLAorICAgICAgICAgICAgICBjb250cm9sbGVyRGly
ZWN0aXZlc1tkaXJlY3RpdmVOYW1lXSwgZGlyZWN0aXZlLCAkY29tcGlsZU5vZGUpOworICAgICAg
ICAgIGNvbnRyb2xsZXJEaXJlY3RpdmVzW2RpcmVjdGl2ZU5hbWVdID0gZGlyZWN0aXZlOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGRpcmVjdGl2ZVZhbHVlID0gZGlyZWN0aXZlLnRyYW5zY2x1
ZGUpIHsKKyAgICAgICAgICBoYXNUcmFuc2NsdWRlRGlyZWN0aXZlID0gdHJ1ZTsKKworICAgICAg
ICAgIC8vIFNwZWNpYWwgY2FzZSBuZ0lmIGFuZCBuZ1JlcGVhdCBzbyB0aGF0IHdlIGRvbid0IGNv
bXBsYWluIGFib3V0IGR1cGxpY2F0ZSB0cmFuc2NsdXNpb24uCisgICAgICAgICAgLy8gVGhpcyBv
cHRpb24gc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBkaXJlY3RpdmVzIHRoYXQga25vdyBob3cgdG8g
c2FmZWx5IGhhbmRsZSBlbGVtZW50IHRyYW5zY2x1c2lvbiwKKyAgICAgICAgICAvLyB3aGVyZSB0
aGUgdHJhbnNjbHVkZWQgbm9kZXMgYXJlIGFkZGVkIG9yIHJlcGxhY2VkIGFmdGVyIGxpbmtpbmcu
CisgICAgICAgICAgaWYgKCFkaXJlY3RpdmUuJCR0bGIpIHsKKyAgICAgICAgICAgIGFzc2VydE5v
RHVwbGljYXRlKCd0cmFuc2NsdXNpb24nLCBub25UbGJUcmFuc2NsdWRlRGlyZWN0aXZlLCBkaXJl
Y3RpdmUsICRjb21waWxlTm9kZSk7CisgICAgICAgICAgICBub25UbGJUcmFuc2NsdWRlRGlyZWN0
aXZlID0gZGlyZWN0aXZlOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChkaXJlY3RpdmVW
YWx1ZSA9PSAnZWxlbWVudCcpIHsKKyAgICAgICAgICAgIGhhc0VsZW1lbnRUcmFuc2NsdWRlRGly
ZWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgIHRlcm1pbmFsUHJpb3JpdHkgPSBkaXJlY3RpdmUu
cHJpb3JpdHk7CisgICAgICAgICAgICAkdGVtcGxhdGUgPSAkY29tcGlsZU5vZGU7CisgICAgICAg
ICAgICAkY29tcGlsZU5vZGUgPSB0ZW1wbGF0ZUF0dHJzLiQkZWxlbWVudCA9CisgICAgICAgICAg
ICAgICAganFMaXRlKGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoJyAnICsgZGlyZWN0aXZlTmFtZSAr
ICc6ICcgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
bXBsYXRlQXR0cnNbZGlyZWN0aXZlTmFtZV0gKyAnICcpKTsKKyAgICAgICAgICAgIGNvbXBpbGVO
b2RlID0gJGNvbXBpbGVOb2RlWzBdOworICAgICAgICAgICAgcmVwbGFjZVdpdGgoanFDb2xsZWN0
aW9uLCBzbGljZUFyZ3MoJHRlbXBsYXRlKSwgY29tcGlsZU5vZGUpOworCisgICAgICAgICAgICBj
aGlsZFRyYW5zY2x1ZGVGbiA9IGNvbXBpbGUoJHRlbXBsYXRlLCB0cmFuc2NsdWRlRm4sIHRlcm1p
bmFsUHJpb3JpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVw
bGFjZURpcmVjdGl2ZSAmJiByZXBsYWNlRGlyZWN0aXZlLm5hbWUsIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IHBhc3MgaW46CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAtIGNvbnRyb2xsZXJEaXJlY3RpdmVz
IC0gb3RoZXJ3aXNlIHdlJ2xsIGNyZWF0ZSBkdXBsaWNhdGVzIGNvbnRyb2xsZXJzCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAtIG5ld0lzb2xhdGVTY29wZURp
cmVjdGl2ZSBvciB0ZW1wbGF0ZURpcmVjdGl2ZSAtIGNvbWJpbmluZyB0ZW1wbGF0ZXMgd2l0aAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBlbGVtZW50IHRy
YW5zY2x1c2lvbiBkb2Vzbid0IG1ha2Ugc2Vuc2UuCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gV2UgbmVlZCBvbmx5IG5vblRsYlRyYW5zY2x1ZGVEaXJlY3RpdmUgc28gdGhhdCB3
ZSBwcmV2ZW50IHB1dHRpbmcgdHJhbnNjbHVzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBvbiB0aGUgc2FtZSBlbGVtZW50IG1vcmUgdGhhbiBvbmNlLgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uVGxiVHJhbnNjbHVk
ZURpcmVjdGl2ZTogbm9uVGxiVHJhbnNjbHVkZURpcmVjdGl2ZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAkdGVtcGxhdGUgPSBqcUxpdGUoanFMaXRlQ2xvbmUoY29tcGlsZU5vZGUpKS5jb250ZW50cygp
OworICAgICAgICAgICAgJGNvbXBpbGVOb2RlLmVtcHR5KCk7IC8vIGNsZWFyIGNvbnRlbnRzCisg
ICAgICAgICAgICBjaGlsZFRyYW5zY2x1ZGVGbiA9IGNvbXBpbGUoJHRlbXBsYXRlLCB0cmFuc2Ns
dWRlRm4pOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChkaXJlY3RpdmUu
dGVtcGxhdGUpIHsKKyAgICAgICAgICBoYXNUZW1wbGF0ZSA9IHRydWU7CisgICAgICAgICAgYXNz
ZXJ0Tm9EdXBsaWNhdGUoJ3RlbXBsYXRlJywgdGVtcGxhdGVEaXJlY3RpdmUsIGRpcmVjdGl2ZSwg
JGNvbXBpbGVOb2RlKTsKKyAgICAgICAgICB0ZW1wbGF0ZURpcmVjdGl2ZSA9IGRpcmVjdGl2ZTsK
KworICAgICAgICAgIGRpcmVjdGl2ZVZhbHVlID0gKGlzRnVuY3Rpb24oZGlyZWN0aXZlLnRlbXBs
YXRlKSkKKyAgICAgICAgICAgICAgPyBkaXJlY3RpdmUudGVtcGxhdGUoJGNvbXBpbGVOb2RlLCB0
ZW1wbGF0ZUF0dHJzKQorICAgICAgICAgICAgICA6IGRpcmVjdGl2ZS50ZW1wbGF0ZTsKKworICAg
ICAgICAgIGRpcmVjdGl2ZVZhbHVlID0gZGVub3JtYWxpemVUZW1wbGF0ZShkaXJlY3RpdmVWYWx1
ZSk7CisKKyAgICAgICAgICBpZiAoZGlyZWN0aXZlLnJlcGxhY2UpIHsKKyAgICAgICAgICAgIHJl
cGxhY2VEaXJlY3RpdmUgPSBkaXJlY3RpdmU7CisgICAgICAgICAgICBpZiAoanFMaXRlSXNUZXh0
Tm9kZShkaXJlY3RpdmVWYWx1ZSkpIHsKKyAgICAgICAgICAgICAgJHRlbXBsYXRlID0gW107Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAkdGVtcGxhdGUgPSByZW1vdmVDb21t
ZW50cyh3cmFwVGVtcGxhdGUoZGlyZWN0aXZlLnRlbXBsYXRlTmFtZXNwYWNlLCB0cmltKGRpcmVj
dGl2ZVZhbHVlKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29tcGlsZU5vZGUgPSAk
dGVtcGxhdGVbMF07CisKKyAgICAgICAgICAgIGlmICgkdGVtcGxhdGUubGVuZ3RoICE9IDEgfHwg
Y29tcGlsZU5vZGUubm9kZVR5cGUgIT09IE5PREVfVFlQRV9FTEVNRU5UKSB7CisgICAgICAgICAg
ICAgIHRocm93ICRjb21waWxlTWluRXJyKCd0cGxydCcsCisgICAgICAgICAgICAgICAgICAiVGVt
cGxhdGUgZm9yIGRpcmVjdGl2ZSAnezB9JyBtdXN0IGhhdmUgZXhhY3RseSBvbmUgcm9vdCBlbGVt
ZW50LiB7MX0iLAorICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlTmFtZSwgJycpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICByZXBsYWNlV2l0aChqcUNvbGxlY3Rpb24sICRjb21waWxl
Tm9kZSwgY29tcGlsZU5vZGUpOworCisgICAgICAgICAgICB2YXIgbmV3VGVtcGxhdGVBdHRycyA9
IHskYXR0cjoge319OworCisgICAgICAgICAgICAvLyBjb21iaW5lIGRpcmVjdGl2ZXMgZnJvbSB0
aGUgb3JpZ2luYWwgbm9kZSBhbmQgZnJvbSB0aGUgdGVtcGxhdGU6CisgICAgICAgICAgICAvLyAt
IHRha2UgdGhlIGFycmF5IG9mIGRpcmVjdGl2ZXMgZm9yIHRoaXMgZWxlbWVudAorICAgICAgICAg
ICAgLy8gLSBzcGxpdCBpdCBpbnRvIHR3byBwYXJ0cywgdGhvc2UgdGhhdCBhbHJlYWR5IGFwcGxp
ZWQgKHByb2Nlc3NlZCkgYW5kIHRob3NlIHRoYXQgd2VyZW4ndCAodW5wcm9jZXNzZWQpCisgICAg
ICAgICAgICAvLyAtIGNvbGxlY3QgZGlyZWN0aXZlcyBmcm9tIHRoZSB0ZW1wbGF0ZSBhbmQgc29y
dCB0aGVtIGJ5IHByaW9yaXR5CisgICAgICAgICAgICAvLyAtIGNvbWJpbmUgZGlyZWN0aXZlcyBh
czogcHJvY2Vzc2VkICsgdGVtcGxhdGUgKyB1bnByb2Nlc3NlZAorICAgICAgICAgICAgdmFyIHRl
bXBsYXRlRGlyZWN0aXZlcyA9IGNvbGxlY3REaXJlY3RpdmVzKGNvbXBpbGVOb2RlLCBbXSwgbmV3
VGVtcGxhdGVBdHRycyk7CisgICAgICAgICAgICB2YXIgdW5wcm9jZXNzZWREaXJlY3RpdmVzID0g
ZGlyZWN0aXZlcy5zcGxpY2UoaSArIDEsIGRpcmVjdGl2ZXMubGVuZ3RoIC0gKGkgKyAxKSk7CisK
KyAgICAgICAgICAgIGlmIChuZXdJc29sYXRlU2NvcGVEaXJlY3RpdmUpIHsKKyAgICAgICAgICAg
ICAgbWFya0RpcmVjdGl2ZXNBc0lzb2xhdGUodGVtcGxhdGVEaXJlY3RpdmVzKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGRpcmVjdGl2ZXMgPSBkaXJlY3RpdmVzLmNvbmNhdCh0ZW1wbGF0
ZURpcmVjdGl2ZXMpLmNvbmNhdCh1bnByb2Nlc3NlZERpcmVjdGl2ZXMpOworICAgICAgICAgICAg
bWVyZ2VUZW1wbGF0ZUF0dHJpYnV0ZXModGVtcGxhdGVBdHRycywgbmV3VGVtcGxhdGVBdHRycyk7
CisKKyAgICAgICAgICAgIGlpID0gZGlyZWN0aXZlcy5sZW5ndGg7CisgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICRjb21waWxlTm9kZS5odG1sKGRpcmVjdGl2ZVZhbHVlKTsKKyAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoZGlyZWN0aXZlLnRlbXBsYXRlVXJsKSB7
CisgICAgICAgICAgaGFzVGVtcGxhdGUgPSB0cnVlOworICAgICAgICAgIGFzc2VydE5vRHVwbGlj
YXRlKCd0ZW1wbGF0ZScsIHRlbXBsYXRlRGlyZWN0aXZlLCBkaXJlY3RpdmUsICRjb21waWxlTm9k
ZSk7CisgICAgICAgICAgdGVtcGxhdGVEaXJlY3RpdmUgPSBkaXJlY3RpdmU7CisKKyAgICAgICAg
ICBpZiAoZGlyZWN0aXZlLnJlcGxhY2UpIHsKKyAgICAgICAgICAgIHJlcGxhY2VEaXJlY3RpdmUg
PSBkaXJlY3RpdmU7CisgICAgICAgICAgfQorCisgICAgICAgICAgbm9kZUxpbmtGbiA9IGNvbXBp
bGVUZW1wbGF0ZVVybChkaXJlY3RpdmVzLnNwbGljZShpLCBkaXJlY3RpdmVzLmxlbmd0aCAtIGkp
LCAkY29tcGlsZU5vZGUsCisgICAgICAgICAgICAgIHRlbXBsYXRlQXR0cnMsIGpxQ29sbGVjdGlv
biwgaGFzVHJhbnNjbHVkZURpcmVjdGl2ZSAmJiBjaGlsZFRyYW5zY2x1ZGVGbiwgcHJlTGlua0Zu
cywgcG9zdExpbmtGbnMsIHsKKyAgICAgICAgICAgICAgICBjb250cm9sbGVyRGlyZWN0aXZlczog
Y29udHJvbGxlckRpcmVjdGl2ZXMsCisgICAgICAgICAgICAgICAgbmV3U2NvcGVEaXJlY3RpdmU6
IChuZXdTY29wZURpcmVjdGl2ZSAhPT0gZGlyZWN0aXZlKSAmJiBuZXdTY29wZURpcmVjdGl2ZSwK
KyAgICAgICAgICAgICAgICBuZXdJc29sYXRlU2NvcGVEaXJlY3RpdmU6IG5ld0lzb2xhdGVTY29w
ZURpcmVjdGl2ZSwKKyAgICAgICAgICAgICAgICB0ZW1wbGF0ZURpcmVjdGl2ZTogdGVtcGxhdGVE
aXJlY3RpdmUsCisgICAgICAgICAgICAgICAgbm9uVGxiVHJhbnNjbHVkZURpcmVjdGl2ZTogbm9u
VGxiVHJhbnNjbHVkZURpcmVjdGl2ZQorICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICBpaSA9
IGRpcmVjdGl2ZXMubGVuZ3RoOworICAgICAgICB9IGVsc2UgaWYgKGRpcmVjdGl2ZS5jb21waWxl
KSB7CisgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGxpbmtGbiA9IGRpcmVjdGl2ZS5jb21w
aWxlKCRjb21waWxlTm9kZSwgdGVtcGxhdGVBdHRycywgY2hpbGRUcmFuc2NsdWRlRm4pOworICAg
ICAgICAgICAgaWYgKGlzRnVuY3Rpb24obGlua0ZuKSkgeworICAgICAgICAgICAgICBhZGRMaW5r
Rm5zKG51bGwsIGxpbmtGbiwgYXR0clN0YXJ0LCBhdHRyRW5kKTsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAobGlua0ZuKSB7CisgICAgICAgICAgICAgIGFkZExpbmtGbnMobGlua0ZuLnByZSwgbGlu
a0ZuLnBvc3QsIGF0dHJTdGFydCwgYXR0ckVuZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
fSBjYXRjaCAoZSkgeworICAgICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoZSwgc3RhcnRpbmdU
YWcoJGNvbXBpbGVOb2RlKSk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYg
KGRpcmVjdGl2ZS50ZXJtaW5hbCkgeworICAgICAgICAgIG5vZGVMaW5rRm4udGVybWluYWwgPSB0
cnVlOworICAgICAgICAgIHRlcm1pbmFsUHJpb3JpdHkgPSBNYXRoLm1heCh0ZXJtaW5hbFByaW9y
aXR5LCBkaXJlY3RpdmUucHJpb3JpdHkpOworICAgICAgICB9CisKKyAgICAgIH0KKworICAgICAg
bm9kZUxpbmtGbi5zY29wZSA9IG5ld1Njb3BlRGlyZWN0aXZlICYmIG5ld1Njb3BlRGlyZWN0aXZl
LnNjb3BlID09PSB0cnVlOworICAgICAgbm9kZUxpbmtGbi50cmFuc2NsdWRlT25UaGlzRWxlbWVu
dCA9IGhhc1RyYW5zY2x1ZGVEaXJlY3RpdmU7CisgICAgICBub2RlTGlua0ZuLnRlbXBsYXRlT25U
aGlzRWxlbWVudCA9IGhhc1RlbXBsYXRlOworICAgICAgbm9kZUxpbmtGbi50cmFuc2NsdWRlID0g
Y2hpbGRUcmFuc2NsdWRlRm47CisKKyAgICAgIHByZXZpb3VzQ29tcGlsZUNvbnRleHQuaGFzRWxl
bWVudFRyYW5zY2x1ZGVEaXJlY3RpdmUgPSBoYXNFbGVtZW50VHJhbnNjbHVkZURpcmVjdGl2ZTsK
KworICAgICAgLy8gbWlnaHQgYmUgbm9ybWFsIG9yIGRlbGF5ZWQgbm9kZUxpbmtGbiBkZXBlbmRp
bmcgb24gaWYgdGVtcGxhdGVVcmwgaXMgcHJlc2VudAorICAgICAgcmV0dXJuIG5vZGVMaW5rRm47
CisKKyAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICAgIGZ1bmN0aW9uIGFkZExpbmtG
bnMocHJlLCBwb3N0LCBhdHRyU3RhcnQsIGF0dHJFbmQpIHsKKyAgICAgICAgaWYgKHByZSkgewor
ICAgICAgICAgIGlmIChhdHRyU3RhcnQpIHByZSA9IGdyb3VwRWxlbWVudHNMaW5rRm5XcmFwcGVy
KHByZSwgYXR0clN0YXJ0LCBhdHRyRW5kKTsKKyAgICAgICAgICBwcmUucmVxdWlyZSA9IGRpcmVj
dGl2ZS5yZXF1aXJlOworICAgICAgICAgIHByZS5kaXJlY3RpdmVOYW1lID0gZGlyZWN0aXZlTmFt
ZTsKKyAgICAgICAgICBpZiAobmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlID09PSBkaXJlY3RpdmUg
fHwgZGlyZWN0aXZlLiQkaXNvbGF0ZVNjb3BlKSB7CisgICAgICAgICAgICBwcmUgPSBjbG9uZUFu
ZEFubm90YXRlRm4ocHJlLCB7aXNvbGF0ZVNjb3BlOiB0cnVlfSk7CisgICAgICAgICAgfQorICAg
ICAgICAgIHByZUxpbmtGbnMucHVzaChwcmUpOworICAgICAgICB9CisgICAgICAgIGlmIChwb3N0
KSB7CisgICAgICAgICAgaWYgKGF0dHJTdGFydCkgcG9zdCA9IGdyb3VwRWxlbWVudHNMaW5rRm5X
cmFwcGVyKHBvc3QsIGF0dHJTdGFydCwgYXR0ckVuZCk7CisgICAgICAgICAgcG9zdC5yZXF1aXJl
ID0gZGlyZWN0aXZlLnJlcXVpcmU7CisgICAgICAgICAgcG9zdC5kaXJlY3RpdmVOYW1lID0gZGly
ZWN0aXZlTmFtZTsKKyAgICAgICAgICBpZiAobmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlID09PSBk
aXJlY3RpdmUgfHwgZGlyZWN0aXZlLiQkaXNvbGF0ZVNjb3BlKSB7CisgICAgICAgICAgICBwb3N0
ID0gY2xvbmVBbmRBbm5vdGF0ZUZuKHBvc3QsIHtpc29sYXRlU2NvcGU6IHRydWV9KTsKKyAgICAg
ICAgICB9CisgICAgICAgICAgcG9zdExpbmtGbnMucHVzaChwb3N0KTsKKyAgICAgICAgfQorICAg
ICAgfQorCisKKyAgICAgIGZ1bmN0aW9uIGdldENvbnRyb2xsZXJzKGRpcmVjdGl2ZU5hbWUsIHJl
cXVpcmUsICRlbGVtZW50LCBlbGVtZW50Q29udHJvbGxlcnMpIHsKKyAgICAgICAgdmFyIHZhbHVl
OworCisgICAgICAgIGlmIChpc1N0cmluZyhyZXF1aXJlKSkgeworICAgICAgICAgIHZhciBtYXRj
aCA9IHJlcXVpcmUubWF0Y2goUkVRVUlSRV9QUkVGSVhfUkVHRVhQKTsKKyAgICAgICAgICB2YXIg
bmFtZSA9IHJlcXVpcmUuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCk7CisgICAgICAgICAgdmFy
IGluaGVyaXRUeXBlID0gbWF0Y2hbMV0gfHwgbWF0Y2hbM107CisgICAgICAgICAgdmFyIG9wdGlv
bmFsID0gbWF0Y2hbMl0gPT09ICc/JzsKKworICAgICAgICAgIC8vSWYgb25seSBwYXJlbnRzIHRo
ZW4gc3RhcnQgYXQgdGhlIHBhcmVudCBlbGVtZW50CisgICAgICAgICAgaWYgKGluaGVyaXRUeXBl
ID09PSAnXl4nKSB7CisgICAgICAgICAgICAkZWxlbWVudCA9ICRlbGVtZW50LnBhcmVudCgpOwor
ICAgICAgICAgIC8vT3RoZXJ3aXNlIGF0dGVtcHQgZ2V0dGluZyB0aGUgY29udHJvbGxlciBmcm9t
IGVsZW1lbnRDb250cm9sbGVycyBpbiBjYXNlCisgICAgICAgICAgLy90aGUgZWxlbWVudCBpcyB0
cmFuc2NsdWRlZCAoYW5kIGhhcyBubyBkYXRhKSBhbmQgdG8gYXZvaWQgLmRhdGEgaWYgcG9zc2li
bGUKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWUgPSBlbGVtZW50Q29udHJv
bGxlcnMgJiYgZWxlbWVudENvbnRyb2xsZXJzW25hbWVdOworICAgICAgICAgICAgdmFsdWUgPSB2
YWx1ZSAmJiB2YWx1ZS5pbnN0YW5jZTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoIXZh
bHVlKSB7CisgICAgICAgICAgICB2YXIgZGF0YU5hbWUgPSAnJCcgKyBuYW1lICsgJ0NvbnRyb2xs
ZXInOworICAgICAgICAgICAgdmFsdWUgPSBpbmhlcml0VHlwZSA/ICRlbGVtZW50LmluaGVyaXRl
ZERhdGEoZGF0YU5hbWUpIDogJGVsZW1lbnQuZGF0YShkYXRhTmFtZSk7CisgICAgICAgICAgfQor
CisgICAgICAgICAgaWYgKCF2YWx1ZSAmJiAhb3B0aW9uYWwpIHsKKyAgICAgICAgICAgIHRocm93
ICRjb21waWxlTWluRXJyKCdjdHJlcScsCisgICAgICAgICAgICAgICAgIkNvbnRyb2xsZXIgJ3sw
fScsIHJlcXVpcmVkIGJ5IGRpcmVjdGl2ZSAnezF9JywgY2FuJ3QgYmUgZm91bmQhIiwKKyAgICAg
ICAgICAgICAgICBuYW1lLCBkaXJlY3RpdmVOYW1lKTsKKyAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSBpZiAoaXNBcnJheShyZXF1aXJlKSkgeworICAgICAgICAgIHZhbHVlID0gW107CisgICAg
ICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gcmVxdWlyZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7
CisgICAgICAgICAgICB2YWx1ZVtpXSA9IGdldENvbnRyb2xsZXJzKGRpcmVjdGl2ZU5hbWUsIHJl
cXVpcmVbaV0sICRlbGVtZW50LCBlbGVtZW50Q29udHJvbGxlcnMpOworICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiB2YWx1ZSB8fCBudWxsOworICAgICAgfQorCisgICAg
ICBmdW5jdGlvbiBzZXR1cENvbnRyb2xsZXJzKCRlbGVtZW50LCBhdHRycywgdHJhbnNjbHVkZUZu
LCBjb250cm9sbGVyRGlyZWN0aXZlcywgaXNvbGF0ZVNjb3BlLCBzY29wZSkgeworICAgICAgICB2
YXIgZWxlbWVudENvbnRyb2xsZXJzID0gY3JlYXRlTWFwKCk7CisgICAgICAgIGZvciAodmFyIGNv
bnRyb2xsZXJLZXkgaW4gY29udHJvbGxlckRpcmVjdGl2ZXMpIHsKKyAgICAgICAgICB2YXIgZGly
ZWN0aXZlID0gY29udHJvbGxlckRpcmVjdGl2ZXNbY29udHJvbGxlcktleV07CisgICAgICAgICAg
dmFyIGxvY2FscyA9IHsKKyAgICAgICAgICAgICRzY29wZTogZGlyZWN0aXZlID09PSBuZXdJc29s
YXRlU2NvcGVEaXJlY3RpdmUgfHwgZGlyZWN0aXZlLiQkaXNvbGF0ZVNjb3BlID8gaXNvbGF0ZVNj
b3BlIDogc2NvcGUsCisgICAgICAgICAgICAkZWxlbWVudDogJGVsZW1lbnQsCisgICAgICAgICAg
ICAkYXR0cnM6IGF0dHJzLAorICAgICAgICAgICAgJHRyYW5zY2x1ZGU6IHRyYW5zY2x1ZGVGbgor
ICAgICAgICAgIH07CisKKyAgICAgICAgICB2YXIgY29udHJvbGxlciA9IGRpcmVjdGl2ZS5jb250
cm9sbGVyOworICAgICAgICAgIGlmIChjb250cm9sbGVyID09ICdAJykgeworICAgICAgICAgICAg
Y29udHJvbGxlciA9IGF0dHJzW2RpcmVjdGl2ZS5uYW1lXTsKKyAgICAgICAgICB9CisKKyAgICAg
ICAgICB2YXIgY29udHJvbGxlckluc3RhbmNlID0gJGNvbnRyb2xsZXIoY29udHJvbGxlciwgbG9j
YWxzLCB0cnVlLCBkaXJlY3RpdmUuY29udHJvbGxlckFzKTsKKworICAgICAgICAgIC8vIEZvciBk
aXJlY3RpdmVzIHdpdGggZWxlbWVudCB0cmFuc2NsdXNpb24gdGhlIGVsZW1lbnQgaXMgYSBjb21t
ZW50LAorICAgICAgICAgIC8vIGJ1dCBqUXVlcnkgLmRhdGEgZG9lc24ndCBzdXBwb3J0IGF0dGFj
aGluZyBkYXRhIHRvIGNvbW1lbnQgbm9kZXMgYXMgaXQncyBoYXJkIHRvCisgICAgICAgICAgLy8g
Y2xlYW4gdXAgKGh0dHA6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzgzMzUpLgorICAgICAgICAg
IC8vIEluc3RlYWQsIHdlIHNhdmUgdGhlIGNvbnRyb2xsZXJzIGZvciB0aGUgZWxlbWVudCBpbiBh
IGxvY2FsIGhhc2ggYW5kIGF0dGFjaCB0byAuZGF0YQorICAgICAgICAgIC8vIGxhdGVyLCBvbmNl
IHdlIGhhdmUgdGhlIGFjdHVhbCBlbGVtZW50LgorICAgICAgICAgIGVsZW1lbnRDb250cm9sbGVy
c1tkaXJlY3RpdmUubmFtZV0gPSBjb250cm9sbGVySW5zdGFuY2U7CisgICAgICAgICAgaWYgKCFo
YXNFbGVtZW50VHJhbnNjbHVkZURpcmVjdGl2ZSkgeworICAgICAgICAgICAgJGVsZW1lbnQuZGF0
YSgnJCcgKyBkaXJlY3RpdmUubmFtZSArICdDb250cm9sbGVyJywgY29udHJvbGxlckluc3RhbmNl
Lmluc3RhbmNlKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGVsZW1l
bnRDb250cm9sbGVyczsKKyAgICAgIH0KKworICAgICAgZnVuY3Rpb24gbm9kZUxpbmtGbihjaGls
ZExpbmtGbiwgc2NvcGUsIGxpbmtOb2RlLCAkcm9vdEVsZW1lbnQsIGJvdW5kVHJhbnNjbHVkZUZu
LAorICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzTGlua0ZuKSB7CisgICAgICAgIHZhciBp
LCBpaSwgbGlua0ZuLCBjb250cm9sbGVyLCBpc29sYXRlU2NvcGUsIGVsZW1lbnRDb250cm9sbGVy
cywgdHJhbnNjbHVkZUZuLCAkZWxlbWVudCwKKyAgICAgICAgICAgIGF0dHJzOworCisgICAgICAg
IGlmIChjb21waWxlTm9kZSA9PT0gbGlua05vZGUpIHsKKyAgICAgICAgICBhdHRycyA9IHRlbXBs
YXRlQXR0cnM7CisgICAgICAgICAgJGVsZW1lbnQgPSB0ZW1wbGF0ZUF0dHJzLiQkZWxlbWVudDsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAkZWxlbWVudCA9IGpxTGl0ZShsaW5rTm9kZSk7
CisgICAgICAgICAgYXR0cnMgPSBuZXcgQXR0cmlidXRlcygkZWxlbWVudCwgdGVtcGxhdGVBdHRy
cyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlKSB7
CisgICAgICAgICAgaXNvbGF0ZVNjb3BlID0gc2NvcGUuJG5ldyh0cnVlKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChib3VuZFRyYW5zY2x1ZGVGbikgeworICAgICAgICAgIC8vIHRyYWNrIGBi
b3VuZFRyYW5zY2x1ZGVGbmAgc28gaXQgY2FuIGJlIHVud3JhcHBlZCBpZiBgdHJhbnNjbHVkZUZu
YAorICAgICAgICAgIC8vIGlzIGxhdGVyIHBhc3NlZCBhcyBgcGFyZW50Qm91bmRUcmFuc2NsdWRl
Rm5gIHRvIGBwdWJsaWNMaW5rRm5gCisgICAgICAgICAgdHJhbnNjbHVkZUZuID0gY29udHJvbGxl
cnNCb3VuZFRyYW5zY2x1ZGU7CisgICAgICAgICAgdHJhbnNjbHVkZUZuLiQkYm91bmRUcmFuc2Ns
dWRlID0gYm91bmRUcmFuc2NsdWRlRm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29udHJv
bGxlckRpcmVjdGl2ZXMpIHsKKyAgICAgICAgICBlbGVtZW50Q29udHJvbGxlcnMgPSBzZXR1cENv
bnRyb2xsZXJzKCRlbGVtZW50LCBhdHRycywgdHJhbnNjbHVkZUZuLCBjb250cm9sbGVyRGlyZWN0
aXZlcywgaXNvbGF0ZVNjb3BlLCBzY29wZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobmV3
SXNvbGF0ZVNjb3BlRGlyZWN0aXZlKSB7CisgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBpc29sYXRl
IHNjb3BlIGJpbmRpbmdzIGZvciBuZXcgaXNvbGF0ZSBzY29wZSBkaXJlY3RpdmUuCisgICAgICAg
ICAgY29tcGlsZS4kJGFkZFNjb3BlSW5mbygkZWxlbWVudCwgaXNvbGF0ZVNjb3BlLCB0cnVlLCAh
KHRlbXBsYXRlRGlyZWN0aXZlICYmICh0ZW1wbGF0ZURpcmVjdGl2ZSA9PT0gbmV3SXNvbGF0ZVNj
b3BlRGlyZWN0aXZlIHx8CisgICAgICAgICAgICAgIHRlbXBsYXRlRGlyZWN0aXZlID09PSBuZXdJ
c29sYXRlU2NvcGVEaXJlY3RpdmUuJCRvcmlnaW5hbERpcmVjdGl2ZSkpKTsKKyAgICAgICAgICBj
b21waWxlLiQkYWRkU2NvcGVDbGFzcygkZWxlbWVudCwgdHJ1ZSk7CisgICAgICAgICAgaXNvbGF0
ZVNjb3BlLiQkaXNvbGF0ZUJpbmRpbmdzID0KKyAgICAgICAgICAgICAgbmV3SXNvbGF0ZVNjb3Bl
RGlyZWN0aXZlLiQkaXNvbGF0ZUJpbmRpbmdzOworICAgICAgICAgIGluaXRpYWxpemVEaXJlY3Rp
dmVCaW5kaW5ncyhzY29wZSwgYXR0cnMsIGlzb2xhdGVTY29wZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaXNvbGF0ZVNjb3BlLiQkaXNvbGF0ZUJpbmRpbmdzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJc29sYXRlU2NvcGVEaXJlY3Rp
dmUsIGlzb2xhdGVTY29wZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGVsZW1lbnRDb250cm9s
bGVycykgeworICAgICAgICAgIC8vIEluaXRpYWxpemUgYmluZFRvQ29udHJvbGxlciBiaW5kaW5n
cyBmb3IgbmV3L2lzb2xhdGUgc2NvcGVzCisgICAgICAgICAgdmFyIHNjb3BlRGlyZWN0aXZlID0g
bmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlIHx8IG5ld1Njb3BlRGlyZWN0aXZlOworICAgICAgICAg
IHZhciBiaW5kaW5nczsKKyAgICAgICAgICB2YXIgY29udHJvbGxlckZvckJpbmRpbmdzOworICAg
ICAgICAgIGlmIChzY29wZURpcmVjdGl2ZSAmJiBlbGVtZW50Q29udHJvbGxlcnNbc2NvcGVEaXJl
Y3RpdmUubmFtZV0pIHsKKyAgICAgICAgICAgIGJpbmRpbmdzID0gc2NvcGVEaXJlY3RpdmUuJCRi
aW5kaW5ncy5iaW5kVG9Db250cm9sbGVyOworICAgICAgICAgICAgY29udHJvbGxlciA9IGVsZW1l
bnRDb250cm9sbGVyc1tzY29wZURpcmVjdGl2ZS5uYW1lXTsKKworICAgICAgICAgICAgaWYgKGNv
bnRyb2xsZXIgJiYgY29udHJvbGxlci5pZGVudGlmaWVyICYmIGJpbmRpbmdzKSB7CisgICAgICAg
ICAgICAgIGNvbnRyb2xsZXJGb3JCaW5kaW5ncyA9IGNvbnRyb2xsZXI7CisgICAgICAgICAgICAg
IHRoaXNMaW5rRm4uJCRkZXN0cm95QmluZGluZ3MgPQorICAgICAgICAgICAgICAgICAgaW5pdGlh
bGl6ZURpcmVjdGl2ZUJpbmRpbmdzKHNjb3BlLCBhdHRycywgY29udHJvbGxlci5pbnN0YW5jZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5ncywg
c2NvcGVEaXJlY3RpdmUpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBm
b3IgKGkgaW4gZWxlbWVudENvbnRyb2xsZXJzKSB7CisgICAgICAgICAgICBjb250cm9sbGVyID0g
ZWxlbWVudENvbnRyb2xsZXJzW2ldOworICAgICAgICAgICAgdmFyIGNvbnRyb2xsZXJSZXN1bHQg
PSBjb250cm9sbGVyKCk7CisKKyAgICAgICAgICAgIGlmIChjb250cm9sbGVyUmVzdWx0ICE9PSBj
b250cm9sbGVyLmluc3RhbmNlKSB7CisgICAgICAgICAgICAgIC8vIElmIHRoZSBjb250cm9sbGVy
IGNvbnN0cnVjdG9yIGhhcyBhIHJldHVybiB2YWx1ZSwgb3ZlcndyaXRlIHRoZSBpbnN0YW5jZQor
ICAgICAgICAgICAgICAvLyBmcm9tIHNldHVwQ29udHJvbGxlcnMgYW5kIHVwZGF0ZSB0aGUgZWxl
bWVudCBkYXRhCisgICAgICAgICAgICAgIGNvbnRyb2xsZXIuaW5zdGFuY2UgPSBjb250cm9sbGVy
UmVzdWx0OworICAgICAgICAgICAgICAkZWxlbWVudC5kYXRhKCckJyArIGkgKyAnQ29udHJvbGxl
cicsIGNvbnRyb2xsZXJSZXN1bHQpOworICAgICAgICAgICAgICBpZiAoY29udHJvbGxlciA9PT0g
Y29udHJvbGxlckZvckJpbmRpbmdzKSB7CisgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGFuZCBy
ZS1pbnN0YWxsIGJpbmRUb0NvbnRyb2xsZXIgYmluZGluZ3MKKyAgICAgICAgICAgICAgICB0aGlz
TGlua0ZuLiQkZGVzdHJveUJpbmRpbmdzKCk7CisgICAgICAgICAgICAgICAgdGhpc0xpbmtGbi4k
JGRlc3Ryb3lCaW5kaW5ncyA9CisgICAgICAgICAgICAgICAgICBpbml0aWFsaXplRGlyZWN0aXZl
QmluZGluZ3Moc2NvcGUsIGF0dHJzLCBjb250cm9sbGVyUmVzdWx0LCBiaW5kaW5ncywgc2NvcGVE
aXJlY3RpdmUpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgLy8gUFJFTElOS0lORworICAgICAgICBmb3IgKGkgPSAwLCBp
aSA9IHByZUxpbmtGbnMubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgIGxpbmtGbiA9
IHByZUxpbmtGbnNbaV07CisgICAgICAgICAgaW52b2tlTGlua0ZuKGxpbmtGbiwKKyAgICAgICAg
ICAgICAgbGlua0ZuLmlzb2xhdGVTY29wZSA/IGlzb2xhdGVTY29wZSA6IHNjb3BlLAorICAgICAg
ICAgICAgICAkZWxlbWVudCwKKyAgICAgICAgICAgICAgYXR0cnMsCisgICAgICAgICAgICAgIGxp
bmtGbi5yZXF1aXJlICYmIGdldENvbnRyb2xsZXJzKGxpbmtGbi5kaXJlY3RpdmVOYW1lLCBsaW5r
Rm4ucmVxdWlyZSwgJGVsZW1lbnQsIGVsZW1lbnRDb250cm9sbGVycyksCisgICAgICAgICAgICAg
IHRyYW5zY2x1ZGVGbgorICAgICAgICAgICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBSRUNV
UlNJT04KKyAgICAgICAgLy8gV2Ugb25seSBwYXNzIHRoZSBpc29sYXRlIHNjb3BlLCBpZiB0aGUg
aXNvbGF0ZSBkaXJlY3RpdmUgaGFzIGEgdGVtcGxhdGUsCisgICAgICAgIC8vIG90aGVyd2lzZSB0
aGUgY2hpbGQgZWxlbWVudHMgZG8gbm90IGJlbG9uZyB0byB0aGUgaXNvbGF0ZSBkaXJlY3RpdmUu
CisgICAgICAgIHZhciBzY29wZVRvQ2hpbGQgPSBzY29wZTsKKyAgICAgICAgaWYgKG5ld0lzb2xh
dGVTY29wZURpcmVjdGl2ZSAmJiAobmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlLnRlbXBsYXRlIHx8
IG5ld0lzb2xhdGVTY29wZURpcmVjdGl2ZS50ZW1wbGF0ZVVybCA9PT0gbnVsbCkpIHsKKyAgICAg
ICAgICBzY29wZVRvQ2hpbGQgPSBpc29sYXRlU2NvcGU7CisgICAgICAgIH0KKyAgICAgICAgY2hp
bGRMaW5rRm4gJiYgY2hpbGRMaW5rRm4oc2NvcGVUb0NoaWxkLCBsaW5rTm9kZS5jaGlsZE5vZGVz
LCB1bmRlZmluZWQsIGJvdW5kVHJhbnNjbHVkZUZuKTsKKworICAgICAgICAvLyBQT1NUTElOS0lO
RworICAgICAgICBmb3IgKGkgPSBwb3N0TGlua0Zucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkg
eworICAgICAgICAgIGxpbmtGbiA9IHBvc3RMaW5rRm5zW2ldOworICAgICAgICAgIGludm9rZUxp
bmtGbihsaW5rRm4sCisgICAgICAgICAgICAgIGxpbmtGbi5pc29sYXRlU2NvcGUgPyBpc29sYXRl
U2NvcGUgOiBzY29wZSwKKyAgICAgICAgICAgICAgJGVsZW1lbnQsCisgICAgICAgICAgICAgIGF0
dHJzLAorICAgICAgICAgICAgICBsaW5rRm4ucmVxdWlyZSAmJiBnZXRDb250cm9sbGVycyhsaW5r
Rm4uZGlyZWN0aXZlTmFtZSwgbGlua0ZuLnJlcXVpcmUsICRlbGVtZW50LCBlbGVtZW50Q29udHJv
bGxlcnMpLAorICAgICAgICAgICAgICB0cmFuc2NsdWRlRm4KKyAgICAgICAgICApOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCBpcyBpbmplY3RlZCBh
cyBgJHRyYW5zY2x1ZGVgLgorICAgICAgICAvLyBOb3RlOiBhbGwgYXJndW1lbnRzIGFyZSBvcHRp
b25hbCEKKyAgICAgICAgZnVuY3Rpb24gY29udHJvbGxlcnNCb3VuZFRyYW5zY2x1ZGUoc2NvcGUs
IGNsb25lQXR0YWNoRm4sIGZ1dHVyZVBhcmVudEVsZW1lbnQpIHsKKyAgICAgICAgICB2YXIgdHJh
bnNjbHVkZUNvbnRyb2xsZXJzOworCisgICAgICAgICAgLy8gTm8gc2NvcGUgcGFzc2VkIGluOgor
ICAgICAgICAgIGlmICghaXNTY29wZShzY29wZSkpIHsKKyAgICAgICAgICAgIGZ1dHVyZVBhcmVu
dEVsZW1lbnQgPSBjbG9uZUF0dGFjaEZuOworICAgICAgICAgICAgY2xvbmVBdHRhY2hGbiA9IHNj
b3BlOworICAgICAgICAgICAgc2NvcGUgPSB1bmRlZmluZWQ7CisgICAgICAgICAgfQorCisgICAg
ICAgICAgaWYgKGhhc0VsZW1lbnRUcmFuc2NsdWRlRGlyZWN0aXZlKSB7CisgICAgICAgICAgICB0
cmFuc2NsdWRlQ29udHJvbGxlcnMgPSBlbGVtZW50Q29udHJvbGxlcnM7CisgICAgICAgICAgfQor
ICAgICAgICAgIGlmICghZnV0dXJlUGFyZW50RWxlbWVudCkgeworICAgICAgICAgICAgZnV0dXJl
UGFyZW50RWxlbWVudCA9IGhhc0VsZW1lbnRUcmFuc2NsdWRlRGlyZWN0aXZlID8gJGVsZW1lbnQu
cGFyZW50KCkgOiAkZWxlbWVudDsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIGJvdW5k
VHJhbnNjbHVkZUZuKHNjb3BlLCBjbG9uZUF0dGFjaEZuLCB0cmFuc2NsdWRlQ29udHJvbGxlcnMs
IGZ1dHVyZVBhcmVudEVsZW1lbnQsIHNjb3BlVG9DaGlsZCk7CisgICAgICAgIH0KKyAgICAgIH0K
KyAgICB9CisKKyAgICBmdW5jdGlvbiBtYXJrRGlyZWN0aXZlc0FzSXNvbGF0ZShkaXJlY3RpdmVz
KSB7CisgICAgICAvLyBtYXJrIGFsbCBkaXJlY3RpdmVzIGFzIG5lZWRpbmcgaXNvbGF0ZSBzY29w
ZS4KKyAgICAgIGZvciAodmFyIGogPSAwLCBqaiA9IGRpcmVjdGl2ZXMubGVuZ3RoOyBqIDwgamo7
IGorKykgeworICAgICAgICBkaXJlY3RpdmVzW2pdID0gaW5oZXJpdChkaXJlY3RpdmVzW2pdLCB7
JCRpc29sYXRlU2NvcGU6IHRydWV9KTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAg
KiBsb29rcyB1cCB0aGUgZGlyZWN0aXZlIGFuZCBkZWNvcmF0ZXMgaXQgd2l0aCBleGNlcHRpb24g
aGFuZGxpbmcgYW5kIHByb3BlciBwYXJhbWV0ZXJzLiBXZQorICAgICAqIGNhbGwgdGhpcyB0aGUg
Ym91bmREaXJlY3RpdmUuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBuYW1l
IG9mIHRoZSBkaXJlY3RpdmUgdG8gbG9vayB1cC4KKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gbG9j
YXRpb24gVGhlIGRpcmVjdGl2ZSBtdXN0IGJlIGZvdW5kIGluIHNwZWNpZmljIGZvcm1hdC4KKyAg
ICAgKiAgIFN0cmluZyBjb250YWluaW5nIGFueSBvZiB0aGVzZXMgY2hhcmFjdGVyczoKKyAgICAg
KgorICAgICAqICAgKiBgRWA6IGVsZW1lbnQgbmFtZQorICAgICAqICAgKiBgQSc6IGF0dHJpYnV0
ZQorICAgICAqICAgKiBgQ2A6IGNsYXNzCisgICAgICogICAqIGBNYDogY29tbWVudAorICAgICAq
IEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIGRpcmVjdGl2ZSB3YXMgYWRkZWQuCisgICAgICov
CisgICAgZnVuY3Rpb24gYWRkRGlyZWN0aXZlKHREaXJlY3RpdmVzLCBuYW1lLCBsb2NhdGlvbiwg
bWF4UHJpb3JpdHksIGlnbm9yZURpcmVjdGl2ZSwgc3RhcnRBdHRyTmFtZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgZW5kQXR0ck5hbWUpIHsKKyAgICAgIGlmIChuYW1lID09PSBpZ25vcmVE
aXJlY3RpdmUpIHJldHVybiBudWxsOworICAgICAgdmFyIG1hdGNoID0gbnVsbDsKKyAgICAgIGlm
IChoYXNEaXJlY3RpdmVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7CisgICAgICAgIGZvciAodmFy
IGRpcmVjdGl2ZSwgZGlyZWN0aXZlcyA9ICRpbmplY3Rvci5nZXQobmFtZSArIFN1ZmZpeCksCisg
ICAgICAgICAgICBpID0gMCwgaWkgPSBkaXJlY3RpdmVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsK
KyAgICAgICAgICB0cnkgeworICAgICAgICAgICAgZGlyZWN0aXZlID0gZGlyZWN0aXZlc1tpXTsK
KyAgICAgICAgICAgIGlmICgobWF4UHJpb3JpdHkgPT09IHVuZGVmaW5lZCB8fCBtYXhQcmlvcml0
eSA+IGRpcmVjdGl2ZS5wcmlvcml0eSkgJiYKKyAgICAgICAgICAgICAgICAgZGlyZWN0aXZlLnJl
c3RyaWN0LmluZGV4T2YobG9jYXRpb24pICE9IC0xKSB7CisgICAgICAgICAgICAgIGlmIChzdGFy
dEF0dHJOYW1lKSB7CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlID0gaW5oZXJpdChkaXJlY3Rp
dmUsIHskJHN0YXJ0OiBzdGFydEF0dHJOYW1lLCAkJGVuZDogZW5kQXR0ck5hbWV9KTsKKyAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICB0RGlyZWN0aXZlcy5wdXNoKGRpcmVjdGl2ZSk7Cisg
ICAgICAgICAgICAgIG1hdGNoID0gZGlyZWN0aXZlOworICAgICAgICAgICAgfQorICAgICAgICAg
IH0gY2F0Y2ggKGUpIHsgJGV4Y2VwdGlvbkhhbmRsZXIoZSk7IH0KKyAgICAgICAgfQorICAgICAg
fQorICAgICAgcmV0dXJuIG1hdGNoOworICAgIH0KKworCisgICAgLyoqCisgICAgICogbG9va3Mg
dXAgdGhlIGRpcmVjdGl2ZSBhbmQgcmV0dXJucyB0cnVlIGlmIGl0IGlzIGEgbXVsdGktZWxlbWVu
dCBkaXJlY3RpdmUsCisgICAgICogYW5kIHRoZXJlZm9yZSByZXF1aXJlcyBET00gbm9kZXMgYmV0
d2VlbiAtc3RhcnQgYW5kIC1lbmQgbWFya2VycyB0byBiZSBncm91cGVkCisgICAgICogdG9nZXRo
ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBuYW1lIG9mIHRoZSBkaXJl
Y3RpdmUgdG8gbG9vayB1cC4KKyAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGRpcmVjdGl2ZSB3YXMg
cmVnaXN0ZXJlZCBhcyBtdWx0aS1lbGVtZW50LgorICAgICAqLworICAgIGZ1bmN0aW9uIGRpcmVj
dGl2ZUlzTXVsdGlFbGVtZW50KG5hbWUpIHsKKyAgICAgIGlmIChoYXNEaXJlY3RpdmVzLmhhc093
blByb3BlcnR5KG5hbWUpKSB7CisgICAgICAgIGZvciAodmFyIGRpcmVjdGl2ZSwgZGlyZWN0aXZl
cyA9ICRpbmplY3Rvci5nZXQobmFtZSArIFN1ZmZpeCksCisgICAgICAgICAgICBpID0gMCwgaWkg
PSBkaXJlY3RpdmVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICBkaXJlY3RpdmUg
PSBkaXJlY3RpdmVzW2ldOworICAgICAgICAgIGlmIChkaXJlY3RpdmUubXVsdGlFbGVtZW50KSB7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
IH0KKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBXaGVuIHRo
ZSBlbGVtZW50IGlzIHJlcGxhY2VkIHdpdGggSFRNTCB0ZW1wbGF0ZSB0aGVuIHRoZSBuZXcgYXR0
cmlidXRlcworICAgICAqIG9uIHRoZSB0ZW1wbGF0ZSBuZWVkIHRvIGJlIG1lcmdlZCB3aXRoIHRo
ZSBleGlzdGluZyBhdHRyaWJ1dGVzIGluIHRoZSBET00uCisgICAgICogVGhlIGRlc2lyZWQgZWZm
ZWN0IGlzIHRvIGhhdmUgYm90aCBvZiB0aGUgYXR0cmlidXRlcyBwcmVzZW50LgorICAgICAqCisg
ICAgICogQHBhcmFtIHtvYmplY3R9IGRzdCBkZXN0aW5hdGlvbiBhdHRyaWJ1dGVzIChvcmlnaW5h
bCBET00pCisgICAgICogQHBhcmFtIHtvYmplY3R9IHNyYyBzb3VyY2UgYXR0cmlidXRlcyAoZnJv
bSB0aGUgZGlyZWN0aXZlIHRlbXBsYXRlKQorICAgICAqLworICAgIGZ1bmN0aW9uIG1lcmdlVGVt
cGxhdGVBdHRyaWJ1dGVzKGRzdCwgc3JjKSB7CisgICAgICB2YXIgc3JjQXR0ciA9IHNyYy4kYXR0
ciwKKyAgICAgICAgICBkc3RBdHRyID0gZHN0LiRhdHRyLAorICAgICAgICAgICRlbGVtZW50ID0g
ZHN0LiQkZWxlbWVudDsKKworICAgICAgLy8gcmVhcHBseSB0aGUgb2xkIGF0dHJpYnV0ZXMgdG8g
dGhlIG5ldyBlbGVtZW50CisgICAgICBmb3JFYWNoKGRzdCwgZnVuY3Rpb24odmFsdWUsIGtleSkg
eworICAgICAgICBpZiAoa2V5LmNoYXJBdCgwKSAhPSAnJCcpIHsKKyAgICAgICAgICBpZiAoc3Jj
W2tleV0gJiYgc3JjW2tleV0gIT09IHZhbHVlKSB7CisgICAgICAgICAgICB2YWx1ZSArPSAoa2V5
ID09PSAnc3R5bGUnID8gJzsnIDogJyAnKSArIHNyY1trZXldOworICAgICAgICAgIH0KKyAgICAg
ICAgICBkc3QuJHNldChrZXksIHZhbHVlLCB0cnVlLCBzcmNBdHRyW2tleV0pOworICAgICAgICB9
CisgICAgICB9KTsKKworICAgICAgLy8gY29weSB0aGUgbmV3IGF0dHJpYnV0ZXMgb24gdGhlIG9s
ZCBhdHRycyBvYmplY3QKKyAgICAgIGZvckVhY2goc3JjLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7
CisgICAgICAgIGlmIChrZXkgPT0gJ2NsYXNzJykgeworICAgICAgICAgIHNhZmVBZGRDbGFzcygk
ZWxlbWVudCwgdmFsdWUpOworICAgICAgICAgIGRzdFsnY2xhc3MnXSA9IChkc3RbJ2NsYXNzJ10g
PyBkc3RbJ2NsYXNzJ10gKyAnICcgOiAnJykgKyB2YWx1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChr
ZXkgPT0gJ3N0eWxlJykgeworICAgICAgICAgICRlbGVtZW50LmF0dHIoJ3N0eWxlJywgJGVsZW1l
bnQuYXR0cignc3R5bGUnKSArICc7JyArIHZhbHVlKTsKKyAgICAgICAgICBkc3RbJ3N0eWxlJ10g
PSAoZHN0WydzdHlsZSddID8gZHN0WydzdHlsZSddICsgJzsnIDogJycpICsgdmFsdWU7CisgICAg
ICAgICAgLy8gYGRzdGAgd2lsbCBuZXZlciBjb250YWluIGhhc093blByb3BlcnR5IGFzIERPTSBw
YXJzZXIgd29uJ3QgbGV0IGl0LgorICAgICAgICAgIC8vIFlvdSB3aWxsIGdldCBhbiAiSW52YWxp
ZENoYXJhY3RlckVycm9yOiBET00gRXhjZXB0aW9uIDUiIGVycm9yIGlmIHlvdQorICAgICAgICAg
IC8vIGhhdmUgYW4gYXR0cmlidXRlIGxpa2UgImhhcy1vd24tcHJvcGVydHkiIG9yICJkYXRhLWhh
cy1vd24tcHJvcGVydHkiLCBldGMuCisgICAgICAgIH0gZWxzZSBpZiAoa2V5LmNoYXJBdCgwKSAh
PSAnJCcgJiYgIWRzdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICAgICAgZHN0W2tleV0g
PSB2YWx1ZTsKKyAgICAgICAgICBkc3RBdHRyW2tleV0gPSBzcmNBdHRyW2tleV07CisgICAgICAg
IH0KKyAgICAgIH0pOworICAgIH0KKworCisgICAgZnVuY3Rpb24gY29tcGlsZVRlbXBsYXRlVXJs
KGRpcmVjdGl2ZXMsICRjb21waWxlTm9kZSwgdEF0dHJzLAorICAgICAgICAkcm9vdEVsZW1lbnQs
IGNoaWxkVHJhbnNjbHVkZUZuLCBwcmVMaW5rRm5zLCBwb3N0TGlua0ZucywgcHJldmlvdXNDb21w
aWxlQ29udGV4dCkgeworICAgICAgdmFyIGxpbmtRdWV1ZSA9IFtdLAorICAgICAgICAgIGFmdGVy
VGVtcGxhdGVOb2RlTGlua0ZuLAorICAgICAgICAgIGFmdGVyVGVtcGxhdGVDaGlsZExpbmtGbiwK
KyAgICAgICAgICBiZWZvcmVUZW1wbGF0ZUNvbXBpbGVOb2RlID0gJGNvbXBpbGVOb2RlWzBdLAor
ICAgICAgICAgIG9yaWdBc3luY0RpcmVjdGl2ZSA9IGRpcmVjdGl2ZXMuc2hpZnQoKSwKKyAgICAg
ICAgICBkZXJpdmVkU3luY0RpcmVjdGl2ZSA9IGluaGVyaXQob3JpZ0FzeW5jRGlyZWN0aXZlLCB7
CisgICAgICAgICAgICB0ZW1wbGF0ZVVybDogbnVsbCwgdHJhbnNjbHVkZTogbnVsbCwgcmVwbGFj
ZTogbnVsbCwgJCRvcmlnaW5hbERpcmVjdGl2ZTogb3JpZ0FzeW5jRGlyZWN0aXZlCisgICAgICAg
ICAgfSksCisgICAgICAgICAgdGVtcGxhdGVVcmwgPSAoaXNGdW5jdGlvbihvcmlnQXN5bmNEaXJl
Y3RpdmUudGVtcGxhdGVVcmwpKQorICAgICAgICAgICAgICA/IG9yaWdBc3luY0RpcmVjdGl2ZS50
ZW1wbGF0ZVVybCgkY29tcGlsZU5vZGUsIHRBdHRycykKKyAgICAgICAgICAgICAgOiBvcmlnQXN5
bmNEaXJlY3RpdmUudGVtcGxhdGVVcmwsCisgICAgICAgICAgdGVtcGxhdGVOYW1lc3BhY2UgPSBv
cmlnQXN5bmNEaXJlY3RpdmUudGVtcGxhdGVOYW1lc3BhY2U7CisKKyAgICAgICRjb21waWxlTm9k
ZS5lbXB0eSgpOworCisgICAgICAkdGVtcGxhdGVSZXF1ZXN0KHRlbXBsYXRlVXJsKQorICAgICAg
ICAudGhlbihmdW5jdGlvbihjb250ZW50KSB7CisgICAgICAgICAgdmFyIGNvbXBpbGVOb2RlLCB0
ZW1wVGVtcGxhdGVBdHRycywgJHRlbXBsYXRlLCBjaGlsZEJvdW5kVHJhbnNjbHVkZUZuOworCisg
ICAgICAgICAgY29udGVudCA9IGRlbm9ybWFsaXplVGVtcGxhdGUoY29udGVudCk7CisKKyAgICAg
ICAgICBpZiAob3JpZ0FzeW5jRGlyZWN0aXZlLnJlcGxhY2UpIHsKKyAgICAgICAgICAgIGlmIChq
cUxpdGVJc1RleHROb2RlKGNvbnRlbnQpKSB7CisgICAgICAgICAgICAgICR0ZW1wbGF0ZSA9IFtd
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgJHRlbXBsYXRlID0gcmVtb3Zl
Q29tbWVudHMod3JhcFRlbXBsYXRlKHRlbXBsYXRlTmFtZXNwYWNlLCB0cmltKGNvbnRlbnQpKSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb21waWxlTm9kZSA9ICR0ZW1wbGF0ZVswXTsK
KworICAgICAgICAgICAgaWYgKCR0ZW1wbGF0ZS5sZW5ndGggIT0gMSB8fCBjb21waWxlTm9kZS5u
b2RlVHlwZSAhPT0gTk9ERV9UWVBFX0VMRU1FTlQpIHsKKyAgICAgICAgICAgICAgdGhyb3cgJGNv
bXBpbGVNaW5FcnIoJ3RwbHJ0JywKKyAgICAgICAgICAgICAgICAgICJUZW1wbGF0ZSBmb3IgZGly
ZWN0aXZlICd7MH0nIG11c3QgaGF2ZSBleGFjdGx5IG9uZSByb290IGVsZW1lbnQuIHsxfSIsCisg
ICAgICAgICAgICAgICAgICBvcmlnQXN5bmNEaXJlY3RpdmUubmFtZSwgdGVtcGxhdGVVcmwpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0ZW1wVGVtcGxhdGVBdHRycyA9IHskYXR0cjog
e319OworICAgICAgICAgICAgcmVwbGFjZVdpdGgoJHJvb3RFbGVtZW50LCAkY29tcGlsZU5vZGUs
IGNvbXBpbGVOb2RlKTsKKyAgICAgICAgICAgIHZhciB0ZW1wbGF0ZURpcmVjdGl2ZXMgPSBjb2xs
ZWN0RGlyZWN0aXZlcyhjb21waWxlTm9kZSwgW10sIHRlbXBUZW1wbGF0ZUF0dHJzKTsKKworICAg
ICAgICAgICAgaWYgKGlzT2JqZWN0KG9yaWdBc3luY0RpcmVjdGl2ZS5zY29wZSkpIHsKKyAgICAg
ICAgICAgICAgbWFya0RpcmVjdGl2ZXNBc0lzb2xhdGUodGVtcGxhdGVEaXJlY3RpdmVzKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGRpcmVjdGl2ZXMgPSB0ZW1wbGF0ZURpcmVjdGl2ZXMu
Y29uY2F0KGRpcmVjdGl2ZXMpOworICAgICAgICAgICAgbWVyZ2VUZW1wbGF0ZUF0dHJpYnV0ZXMo
dEF0dHJzLCB0ZW1wVGVtcGxhdGVBdHRycyk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGNvbXBpbGVOb2RlID0gYmVmb3JlVGVtcGxhdGVDb21waWxlTm9kZTsKKyAgICAgICAgICAg
ICRjb21waWxlTm9kZS5odG1sKGNvbnRlbnQpOworICAgICAgICAgIH0KKworICAgICAgICAgIGRp
cmVjdGl2ZXMudW5zaGlmdChkZXJpdmVkU3luY0RpcmVjdGl2ZSk7CisKKyAgICAgICAgICBhZnRl
clRlbXBsYXRlTm9kZUxpbmtGbiA9IGFwcGx5RGlyZWN0aXZlc1RvTm9kZShkaXJlY3RpdmVzLCBj
b21waWxlTm9kZSwgdEF0dHJzLAorICAgICAgICAgICAgICBjaGlsZFRyYW5zY2x1ZGVGbiwgJGNv
bXBpbGVOb2RlLCBvcmlnQXN5bmNEaXJlY3RpdmUsIHByZUxpbmtGbnMsIHBvc3RMaW5rRm5zLAor
ICAgICAgICAgICAgICBwcmV2aW91c0NvbXBpbGVDb250ZXh0KTsKKyAgICAgICAgICBmb3JFYWNo
KCRyb290RWxlbWVudCwgZnVuY3Rpb24obm9kZSwgaSkgeworICAgICAgICAgICAgaWYgKG5vZGUg
PT0gY29tcGlsZU5vZGUpIHsKKyAgICAgICAgICAgICAgJHJvb3RFbGVtZW50W2ldID0gJGNvbXBp
bGVOb2RlWzBdOworICAgICAgICAgICAgfQorICAgICAgICAgIH0pOworICAgICAgICAgIGFmdGVy
VGVtcGxhdGVDaGlsZExpbmtGbiA9IGNvbXBpbGVOb2RlcygkY29tcGlsZU5vZGVbMF0uY2hpbGRO
b2RlcywgY2hpbGRUcmFuc2NsdWRlRm4pOworCisgICAgICAgICAgd2hpbGUgKGxpbmtRdWV1ZS5s
ZW5ndGgpIHsKKyAgICAgICAgICAgIHZhciBzY29wZSA9IGxpbmtRdWV1ZS5zaGlmdCgpLAorICAg
ICAgICAgICAgICAgIGJlZm9yZVRlbXBsYXRlTGlua05vZGUgPSBsaW5rUXVldWUuc2hpZnQoKSwK
KyAgICAgICAgICAgICAgICBsaW5rUm9vdEVsZW1lbnQgPSBsaW5rUXVldWUuc2hpZnQoKSwKKyAg
ICAgICAgICAgICAgICBib3VuZFRyYW5zY2x1ZGVGbiA9IGxpbmtRdWV1ZS5zaGlmdCgpLAorICAg
ICAgICAgICAgICAgIGxpbmtOb2RlID0gJGNvbXBpbGVOb2RlWzBdOworCisgICAgICAgICAgICBp
ZiAoc2NvcGUuJCRkZXN0cm95ZWQpIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAoYmVmb3Jl
VGVtcGxhdGVMaW5rTm9kZSAhPT0gYmVmb3JlVGVtcGxhdGVDb21waWxlTm9kZSkgeworICAgICAg
ICAgICAgICB2YXIgb2xkQ2xhc3NlcyA9IGJlZm9yZVRlbXBsYXRlTGlua05vZGUuY2xhc3NOYW1l
OworCisgICAgICAgICAgICAgIGlmICghKHByZXZpb3VzQ29tcGlsZUNvbnRleHQuaGFzRWxlbWVu
dFRyYW5zY2x1ZGVEaXJlY3RpdmUgJiYKKyAgICAgICAgICAgICAgICAgIG9yaWdBc3luY0RpcmVj
dGl2ZS5yZXBsYWNlKSkgeworICAgICAgICAgICAgICAgIC8vIGl0IHdhcyBjbG9uZWQgdGhlcmVm
b3JlIHdlIGhhdmUgdG8gY2xvbmUgYXMgd2VsbC4KKyAgICAgICAgICAgICAgICBsaW5rTm9kZSA9
IGpxTGl0ZUNsb25lKGNvbXBpbGVOb2RlKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICByZXBsYWNlV2l0aChsaW5rUm9vdEVsZW1lbnQsIGpxTGl0ZShiZWZvcmVUZW1wbGF0ZUxpbmtO
b2RlKSwgbGlua05vZGUpOworCisgICAgICAgICAgICAgIC8vIENvcHkgaW4gQ1NTIGNsYXNzZXMg
ZnJvbSBvcmlnaW5hbCBub2RlCisgICAgICAgICAgICAgIHNhZmVBZGRDbGFzcyhqcUxpdGUobGlu
a05vZGUpLCBvbGRDbGFzc2VzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhZnRl
clRlbXBsYXRlTm9kZUxpbmtGbi50cmFuc2NsdWRlT25UaGlzRWxlbWVudCkgeworICAgICAgICAg
ICAgICBjaGlsZEJvdW5kVHJhbnNjbHVkZUZuID0gY3JlYXRlQm91bmRUcmFuc2NsdWRlRm4oc2Nv
cGUsIGFmdGVyVGVtcGxhdGVOb2RlTGlua0ZuLnRyYW5zY2x1ZGUsIGJvdW5kVHJhbnNjbHVkZUZu
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGNoaWxkQm91bmRUcmFuc2Ns
dWRlRm4gPSBib3VuZFRyYW5zY2x1ZGVGbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFm
dGVyVGVtcGxhdGVOb2RlTGlua0ZuKGFmdGVyVGVtcGxhdGVDaGlsZExpbmtGbiwgc2NvcGUsIGxp
bmtOb2RlLCAkcm9vdEVsZW1lbnQsCisgICAgICAgICAgICAgIGNoaWxkQm91bmRUcmFuc2NsdWRl
Rm4sIGFmdGVyVGVtcGxhdGVOb2RlTGlua0ZuKTsKKyAgICAgICAgICB9CisgICAgICAgICAgbGlu
a1F1ZXVlID0gbnVsbDsKKyAgICAgICAgfSk7CisKKyAgICAgIHJldHVybiBmdW5jdGlvbiBkZWxh
eWVkTm9kZUxpbmtGbihpZ25vcmVDaGlsZExpbmtGbiwgc2NvcGUsIG5vZGUsIHJvb3RFbGVtZW50
LCBib3VuZFRyYW5zY2x1ZGVGbikgeworICAgICAgICB2YXIgY2hpbGRCb3VuZFRyYW5zY2x1ZGVG
biA9IGJvdW5kVHJhbnNjbHVkZUZuOworICAgICAgICBpZiAoc2NvcGUuJCRkZXN0cm95ZWQpIHJl
dHVybjsKKyAgICAgICAgaWYgKGxpbmtRdWV1ZSkgeworICAgICAgICAgIGxpbmtRdWV1ZS5wdXNo
KHNjb3BlLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgcm9vdEVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRCb3Vu
ZFRyYW5zY2x1ZGVGbik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaWYgKGFmdGVyVGVt
cGxhdGVOb2RlTGlua0ZuLnRyYW5zY2x1ZGVPblRoaXNFbGVtZW50KSB7CisgICAgICAgICAgICBj
aGlsZEJvdW5kVHJhbnNjbHVkZUZuID0gY3JlYXRlQm91bmRUcmFuc2NsdWRlRm4oc2NvcGUsIGFm
dGVyVGVtcGxhdGVOb2RlTGlua0ZuLnRyYW5zY2x1ZGUsIGJvdW5kVHJhbnNjbHVkZUZuKTsKKyAg
ICAgICAgICB9CisgICAgICAgICAgYWZ0ZXJUZW1wbGF0ZU5vZGVMaW5rRm4oYWZ0ZXJUZW1wbGF0
ZUNoaWxkTGlua0ZuLCBzY29wZSwgbm9kZSwgcm9vdEVsZW1lbnQsIGNoaWxkQm91bmRUcmFuc2Ns
dWRlRm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJUZW1wbGF0ZU5v
ZGVMaW5rRm4pOworICAgICAgICB9CisgICAgICB9OworICAgIH0KKworCisgICAgLyoqCisgICAg
ICogU29ydGluZyBmdW5jdGlvbiBmb3IgYm91bmQgZGlyZWN0aXZlcy4KKyAgICAgKi8KKyAgICBm
dW5jdGlvbiBieVByaW9yaXR5KGEsIGIpIHsKKyAgICAgIHZhciBkaWZmID0gYi5wcmlvcml0eSAt
IGEucHJpb3JpdHk7CisgICAgICBpZiAoZGlmZiAhPT0gMCkgcmV0dXJuIGRpZmY7CisgICAgICBp
ZiAoYS5uYW1lICE9PSBiLm5hbWUpIHJldHVybiAoYS5uYW1lIDwgYi5uYW1lKSA/IC0xIDogMTsK
KyAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBh
c3NlcnROb0R1cGxpY2F0ZSh3aGF0LCBwcmV2aW91c0RpcmVjdGl2ZSwgZGlyZWN0aXZlLCBlbGVt
ZW50KSB7CisKKyAgICAgIGZ1bmN0aW9uIHdyYXBNb2R1bGVOYW1lSWZEZWZpbmVkKG1vZHVsZU5h
bWUpIHsKKyAgICAgICAgcmV0dXJuIG1vZHVsZU5hbWUgPworICAgICAgICAgICgnIChtb2R1bGU6
ICcgKyBtb2R1bGVOYW1lICsgJyknKSA6CisgICAgICAgICAgJyc7CisgICAgICB9CisKKyAgICAg
IGlmIChwcmV2aW91c0RpcmVjdGl2ZSkgeworICAgICAgICB0aHJvdyAkY29tcGlsZU1pbkVycign
bXVsdGlkaXInLCAnTXVsdGlwbGUgZGlyZWN0aXZlcyBbezB9ezF9LCB7Mn17M31dIGFza2luZyBm
b3IgezR9IG9uOiB7NX0nLAorICAgICAgICAgICAgcHJldmlvdXNEaXJlY3RpdmUubmFtZSwgd3Jh
cE1vZHVsZU5hbWVJZkRlZmluZWQocHJldmlvdXNEaXJlY3RpdmUuJCRtb2R1bGVOYW1lKSwKKyAg
ICAgICAgICAgIGRpcmVjdGl2ZS5uYW1lLCB3cmFwTW9kdWxlTmFtZUlmRGVmaW5lZChkaXJlY3Rp
dmUuJCRtb2R1bGVOYW1lKSwgd2hhdCwgc3RhcnRpbmdUYWcoZWxlbWVudCkpOworICAgICAgfQor
ICAgIH0KKworCisgICAgZnVuY3Rpb24gYWRkVGV4dEludGVycG9sYXRlRGlyZWN0aXZlKGRpcmVj
dGl2ZXMsIHRleHQpIHsKKyAgICAgIHZhciBpbnRlcnBvbGF0ZUZuID0gJGludGVycG9sYXRlKHRl
eHQsIHRydWUpOworICAgICAgaWYgKGludGVycG9sYXRlRm4pIHsKKyAgICAgICAgZGlyZWN0aXZl
cy5wdXNoKHsKKyAgICAgICAgICBwcmlvcml0eTogMCwKKyAgICAgICAgICBjb21waWxlOiBmdW5j
dGlvbiB0ZXh0SW50ZXJwb2xhdGVDb21waWxlRm4odGVtcGxhdGVOb2RlKSB7CisgICAgICAgICAg
ICB2YXIgdGVtcGxhdGVOb2RlUGFyZW50ID0gdGVtcGxhdGVOb2RlLnBhcmVudCgpLAorICAgICAg
ICAgICAgICAgIGhhc0NvbXBpbGVQYXJlbnQgPSAhIXRlbXBsYXRlTm9kZVBhcmVudC5sZW5ndGg7
CisKKyAgICAgICAgICAgIC8vIFdoZW4gdHJhbnNjbHVkaW5nIGEgdGVtcGxhdGUgdGhhdCBoYXMg
YmluZGluZ3MgaW4gdGhlIHJvb3QKKyAgICAgICAgICAgIC8vIHdlIGRvbid0IGhhdmUgYSBwYXJl
bnQgYW5kIHRodXMgbmVlZCB0byBhZGQgdGhlIGNsYXNzIGR1cmluZyBsaW5raW5nIGZuLgorICAg
ICAgICAgICAgaWYgKGhhc0NvbXBpbGVQYXJlbnQpIGNvbXBpbGUuJCRhZGRCaW5kaW5nQ2xhc3Mo
dGVtcGxhdGVOb2RlUGFyZW50KTsKKworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRleHRJ
bnRlcnBvbGF0ZUxpbmtGbihzY29wZSwgbm9kZSkgeworICAgICAgICAgICAgICB2YXIgcGFyZW50
ID0gbm9kZS5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgaWYgKCFoYXNDb21waWxlUGFyZW50KSBj
b21waWxlLiQkYWRkQmluZGluZ0NsYXNzKHBhcmVudCk7CisgICAgICAgICAgICAgIGNvbXBpbGUu
JCRhZGRCaW5kaW5nSW5mbyhwYXJlbnQsIGludGVycG9sYXRlRm4uZXhwcmVzc2lvbnMpOworICAg
ICAgICAgICAgICBzY29wZS4kd2F0Y2goaW50ZXJwb2xhdGVGbiwgZnVuY3Rpb24gaW50ZXJwb2xh
dGVGbldhdGNoQWN0aW9uKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgbm9kZVswXS5ub2RlVmFs
dWUgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9OworICAgICAgICAg
IH0KKyAgICAgICAgfSk7CisgICAgICB9CisgICAgfQorCisKKyAgICBmdW5jdGlvbiB3cmFwVGVt
cGxhdGUodHlwZSwgdGVtcGxhdGUpIHsKKyAgICAgIHR5cGUgPSBsb3dlcmNhc2UodHlwZSB8fCAn
aHRtbCcpOworICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICBjYXNlICdzdmcnOgorICAgICAg
Y2FzZSAnbWF0aCc6CisgICAgICAgIHZhciB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2Jyk7CisgICAgICAgIHdyYXBwZXIuaW5uZXJIVE1MID0gJzwnICsgdHlwZSArICc+JyAr
IHRlbXBsYXRlICsgJzwvJyArIHR5cGUgKyAnPic7CisgICAgICAgIHJldHVybiB3cmFwcGVyLmNo
aWxkTm9kZXNbMF0uY2hpbGROb2RlczsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB0
ZW1wbGF0ZTsKKyAgICAgIH0KKyAgICB9CisKKworICAgIGZ1bmN0aW9uIGdldFRydXN0ZWRDb250
ZXh0KG5vZGUsIGF0dHJOb3JtYWxpemVkTmFtZSkgeworICAgICAgaWYgKGF0dHJOb3JtYWxpemVk
TmFtZSA9PSAic3JjZG9jIikgeworICAgICAgICByZXR1cm4gJHNjZS5IVE1MOworICAgICAgfQor
ICAgICAgdmFyIHRhZyA9IG5vZGVOYW1lXyhub2RlKTsKKyAgICAgIC8vIG1hY3Rpb25beGxpbms6
aHJlZl0gY2FuIHNvdXJjZSBTVkcuICBJdCdzIG5vdCBsaW1pdGVkIHRvIDxtYWN0aW9uPi4KKyAg
ICAgIGlmIChhdHRyTm9ybWFsaXplZE5hbWUgPT0gInhsaW5rSHJlZiIgfHwKKyAgICAgICAgICAo
dGFnID09ICJmb3JtIiAmJiBhdHRyTm9ybWFsaXplZE5hbWUgPT0gImFjdGlvbiIpIHx8CisgICAg
ICAgICAgKHRhZyAhPSAiaW1nIiAmJiAoYXR0ck5vcm1hbGl6ZWROYW1lID09ICJzcmMiIHx8Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ck5vcm1hbGl6ZWROYW1lID09ICJuZ1NyYyIp
KSkgeworICAgICAgICByZXR1cm4gJHNjZS5SRVNPVVJDRV9VUkw7CisgICAgICB9CisgICAgfQor
CisKKyAgICBmdW5jdGlvbiBhZGRBdHRySW50ZXJwb2xhdGVEaXJlY3RpdmUobm9kZSwgZGlyZWN0
aXZlcywgdmFsdWUsIG5hbWUsIGFsbE9yTm90aGluZykgeworICAgICAgdmFyIHRydXN0ZWRDb250
ZXh0ID0gZ2V0VHJ1c3RlZENvbnRleHQobm9kZSwgbmFtZSk7CisgICAgICBhbGxPck5vdGhpbmcg
PSBBTExfT1JfTk9USElOR19BVFRSU1tuYW1lXSB8fCBhbGxPck5vdGhpbmc7CisKKyAgICAgIHZh
ciBpbnRlcnBvbGF0ZUZuID0gJGludGVycG9sYXRlKHZhbHVlLCB0cnVlLCB0cnVzdGVkQ29udGV4
dCwgYWxsT3JOb3RoaW5nKTsKKworICAgICAgLy8gbm8gaW50ZXJwb2xhdGlvbiBmb3VuZCAtPiBp
Z25vcmUKKyAgICAgIGlmICghaW50ZXJwb2xhdGVGbikgcmV0dXJuOworCisKKyAgICAgIGlmIChu
YW1lID09PSAibXVsdGlwbGUiICYmIG5vZGVOYW1lXyhub2RlKSA9PT0gInNlbGVjdCIpIHsKKyAg
ICAgICAgdGhyb3cgJGNvbXBpbGVNaW5FcnIoInNlbG11bHRpIiwKKyAgICAgICAgICAgICJCaW5k
aW5nIHRvIHRoZSAnbXVsdGlwbGUnIGF0dHJpYnV0ZSBpcyBub3Qgc3VwcG9ydGVkLiBFbGVtZW50
OiB7MH0iLAorICAgICAgICAgICAgc3RhcnRpbmdUYWcobm9kZSkpOworICAgICAgfQorCisgICAg
ICBkaXJlY3RpdmVzLnB1c2goeworICAgICAgICBwcmlvcml0eTogMTAwLAorICAgICAgICBjb21w
aWxlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgIHBy
ZTogZnVuY3Rpb24gYXR0ckludGVycG9sYXRlUHJlTGlua0ZuKHNjb3BlLCBlbGVtZW50LCBhdHRy
KSB7CisgICAgICAgICAgICAgICAgdmFyICQkb2JzZXJ2ZXJzID0gKGF0dHIuJCRvYnNlcnZlcnMg
fHwgKGF0dHIuJCRvYnNlcnZlcnMgPSB7fSkpOworCisgICAgICAgICAgICAgICAgaWYgKEVWRU5U
X0hBTkRMRVJfQVRUUl9SRUdFWFAudGVzdChuYW1lKSkgeworICAgICAgICAgICAgICAgICAgdGhy
b3cgJGNvbXBpbGVNaW5FcnIoJ25vZG9tZXZlbnRzJywKKyAgICAgICAgICAgICAgICAgICAgICAi
SW50ZXJwb2xhdGlvbnMgZm9yIEhUTUwgRE9NIGV2ZW50IGF0dHJpYnV0ZXMgYXJlIGRpc2FsbG93
ZWQuICBQbGVhc2UgdXNlIHRoZSAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIm5nLSB2
ZXJzaW9ucyAoc3VjaCBhcyBuZy1jbGljayBpbnN0ZWFkIG9mIG9uY2xpY2spIGluc3RlYWQuIik7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGF0dHJpYnV0
ZSBoYXMgY2hhbmdlZCBzaW5jZSBsYXN0ICRpbnRlcnBvbGF0ZSgpZWQKKyAgICAgICAgICAgICAg
ICB2YXIgbmV3VmFsdWUgPSBhdHRyW25hbWVdOworICAgICAgICAgICAgICAgIGlmIChuZXdWYWx1
ZSAhPT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gaW50ZXJwb2xh
dGUgYWdhaW4gc2luY2UgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBoYXMgYmVlbiB1cGRhdGVkCisgICAg
ICAgICAgICAgICAgICAvLyAoZS5nLiBieSBhbm90aGVyIGRpcmVjdGl2ZSdzIGNvbXBpbGUgZnVu
Y3Rpb24pCisgICAgICAgICAgICAgICAgICAvLyBlbnN1cmUgdW5zZXQvZW1wdHkgdmFsdWVzIG1h
a2UgaW50ZXJwb2xhdGVGbiBmYWxzeQorICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVGbiA9
IG5ld1ZhbHVlICYmICRpbnRlcnBvbGF0ZShuZXdWYWx1ZSwgdHJ1ZSwgdHJ1c3RlZENvbnRleHQs
IGFsbE9yTm90aGluZyk7CisgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG5ld1ZhbHVlOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGlmIGF0dHJpYnV0ZSB3YXMgdXBk
YXRlZCBzbyB0aGF0IHRoZXJlIGlzIG5vIGludGVycG9sYXRpb24gZ29pbmcgb24gd2UgZG9uJ3Qg
d2FudCB0bworICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIGFueSBvYnNlcnZlcnMKKyAgICAg
ICAgICAgICAgICBpZiAoIWludGVycG9sYXRlRm4pIHJldHVybjsKKworICAgICAgICAgICAgICAg
IC8vIGluaXRpYWxpemUgYXR0ciBvYmplY3Qgc28gdGhhdCBpdCdzIHJlYWR5IGluIGNhc2Ugd2Ug
bmVlZCB0aGUgdmFsdWUgZm9yIGlzb2xhdGUKKyAgICAgICAgICAgICAgICAvLyBzY29wZSBpbml0
aWFsaXphdGlvbiwgb3RoZXJ3aXNlIHRoZSB2YWx1ZSB3b3VsZCBub3QgYmUgYXZhaWxhYmxlIGZy
b20gaXNvbGF0ZQorICAgICAgICAgICAgICAgIC8vIGRpcmVjdGl2ZSdzIGxpbmtpbmcgZm4gZHVy
aW5nIGxpbmtpbmcgcGhhc2UKKyAgICAgICAgICAgICAgICBhdHRyW25hbWVdID0gaW50ZXJwb2xh
dGVGbihzY29wZSk7CisKKyAgICAgICAgICAgICAgICAoJCRvYnNlcnZlcnNbbmFtZV0gfHwgKCQk
b2JzZXJ2ZXJzW25hbWVdID0gW10pKS4kJGludGVyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAo
YXR0ci4kJG9ic2VydmVycyAmJiBhdHRyLiQkb2JzZXJ2ZXJzW25hbWVdLiQkc2NvcGUgfHwgc2Nv
cGUpLgorICAgICAgICAgICAgICAgICAgJHdhdGNoKGludGVycG9sYXRlRm4sIGZ1bmN0aW9uIGlu
dGVycG9sYXRlRm5XYXRjaEFjdGlvbihuZXdWYWx1ZSwgb2xkVmFsdWUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy9zcGVjaWFsIGNhc2UgZm9yIGNsYXNzIGF0dHJpYnV0ZSBhZGRpdGlvbiArIHJl
bW92YWwKKyAgICAgICAgICAgICAgICAgICAgLy9zbyB0aGF0IGNsYXNzIGNoYW5nZXMgY2FuIHRh
cCBpbnRvIHRoZSBhbmltYXRpb24KKyAgICAgICAgICAgICAgICAgICAgLy9ob29rcyBwcm92aWRl
ZCBieSB0aGUgJGFuaW1hdGUgc2VydmljZS4gQmUgc3VyZSB0bworICAgICAgICAgICAgICAgICAg
ICAvL3NraXAgYW5pbWF0aW9ucyB3aGVuIHRoZSBmaXJzdCBkaWdlc3Qgb2NjdXJzICh3aGVuCisg
ICAgICAgICAgICAgICAgICAgIC8vYm90aCB0aGUgbmV3IGFuZCB0aGUgb2xkIHZhbHVlcyBhcmUg
dGhlIHNhbWUpIHNpbmNlCisgICAgICAgICAgICAgICAgICAgIC8vdGhlIENTUyBjbGFzc2VzIGFy
ZSB0aGUgbm9uLWludGVycG9sYXRlZCB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5h
bWUgPT09ICdjbGFzcycgJiYgbmV3VmFsdWUgIT0gb2xkVmFsdWUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICBhdHRyLiR1cGRhdGVDbGFzcyhuZXdWYWx1ZSwgb2xkVmFsdWUpOworICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgIGF0dHIuJHNldChuYW1l
LCBuZXdWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICAgIH0KKyAgICAgIH0p
OworICAgIH0KKworCisgICAgLyoqCisgICAgICogVGhpcyBpcyBhIHNwZWNpYWwganFMaXRlLnJl
cGxhY2VXaXRoLCB3aGljaCBjYW4gcmVwbGFjZSBpdGVtcyB3aGljaAorICAgICAqIGhhdmUgbm8g
cGFyZW50cywgcHJvdmlkZWQgdGhhdCB0aGUgY29udGFpbmluZyBqcUxpdGUgY29sbGVjdGlvbiBp
cyBwcm92aWRlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSB7SnFMaXRlPX0gJHJvb3RFbGVtZW50
IFRoZSByb290IG9mIHRoZSBjb21waWxlIHRyZWUuIFVzZWQgc28gdGhhdCB3ZSBjYW4gcmVwbGFj
ZSBub2RlcworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSByb290
IG9mIHRoZSB0cmVlLgorICAgICAqIEBwYXJhbSB7SnFMaXRlfSBlbGVtZW50c1RvUmVtb3ZlIFRo
ZSBqcUxpdGUgZWxlbWVudCB3aGljaCB3ZSBhcmUgZ29pbmcgdG8gcmVwbGFjZS4gV2Uga2VlcAor
ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzaGVsbCwgYnV0IHJl
cGxhY2UgaXRzIERPTSBub2RlIHJlZmVyZW5jZS4KKyAgICAgKiBAcGFyYW0ge05vZGV9IG5ld05v
ZGUgVGhlIG5ldyBET00gbm9kZS4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiByZXBsYWNlV2l0aCgk
cm9vdEVsZW1lbnQsIGVsZW1lbnRzVG9SZW1vdmUsIG5ld05vZGUpIHsKKyAgICAgIHZhciBmaXJz
dEVsZW1lbnRUb1JlbW92ZSA9IGVsZW1lbnRzVG9SZW1vdmVbMF0sCisgICAgICAgICAgcmVtb3Zl
Q291bnQgPSBlbGVtZW50c1RvUmVtb3ZlLmxlbmd0aCwKKyAgICAgICAgICBwYXJlbnQgPSBmaXJz
dEVsZW1lbnRUb1JlbW92ZS5wYXJlbnROb2RlLAorICAgICAgICAgIGksIGlpOworCisgICAgICBp
ZiAoJHJvb3RFbGVtZW50KSB7CisgICAgICAgIGZvciAoaSA9IDAsIGlpID0gJHJvb3RFbGVtZW50
Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICBpZiAoJHJvb3RFbGVtZW50W2ldID09
IGZpcnN0RWxlbWVudFRvUmVtb3ZlKSB7CisgICAgICAgICAgICAkcm9vdEVsZW1lbnRbaSsrXSA9
IG5ld05vZGU7CisgICAgICAgICAgICBmb3IgKHZhciBqID0gaSwgajIgPSBqICsgcmVtb3ZlQ291
bnQgLSAxLAorICAgICAgICAgICAgICAgICAgICAgamogPSAkcm9vdEVsZW1lbnQubGVuZ3RoOwor
ICAgICAgICAgICAgICAgICBqIDwgamo7IGorKywgajIrKykgeworICAgICAgICAgICAgICBpZiAo
ajIgPCBqaikgeworICAgICAgICAgICAgICAgICRyb290RWxlbWVudFtqXSA9ICRyb290RWxlbWVu
dFtqMl07CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGVsZXRlICRy
b290RWxlbWVudFtqXTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgJHJvb3RFbGVtZW50Lmxlbmd0aCAtPSByZW1vdmVDb3VudCAtIDE7CisKKyAgICAgICAgICAg
IC8vIElmIHRoZSByZXBsYWNlZCBlbGVtZW50IGlzIGFsc28gdGhlIGpRdWVyeSAuY29udGV4dCB0
aGVuIHJlcGxhY2UgaXQKKyAgICAgICAgICAgIC8vIC5jb250ZXh0IGlzIGEgZGVwcmVjYXRlZCBq
UXVlcnkgYXBpLCBzbyB3ZSBzaG91bGQgc2V0IGl0IG9ubHkgd2hlbiBqUXVlcnkgc2V0IGl0Cisg
ICAgICAgICAgICAvLyBodHRwOi8vYXBpLmpxdWVyeS5jb20vY29udGV4dC8KKyAgICAgICAgICAg
IGlmICgkcm9vdEVsZW1lbnQuY29udGV4dCA9PT0gZmlyc3RFbGVtZW50VG9SZW1vdmUpIHsKKyAg
ICAgICAgICAgICAgJHJvb3RFbGVtZW50LmNvbnRleHQgPSBuZXdOb2RlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisK
KyAgICAgIGlmIChwYXJlbnQpIHsKKyAgICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZChuZXdOb2Rl
LCBmaXJzdEVsZW1lbnRUb1JlbW92ZSk7CisgICAgICB9CisKKyAgICAgIC8vIFRPRE8ocGVyZik6
IHdoYXQncyB0aGlzIGRvY3VtZW50IGZyYWdtZW50IGZvcj8gaXMgaXQgbmVlZGVkPyBjYW4gd2Ug
YXQgbGVhc3QgcmV1c2UgaXQ/CisgICAgICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVE
b2N1bWVudEZyYWdtZW50KCk7CisgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChmaXJzdEVsZW1l
bnRUb1JlbW92ZSk7CisKKyAgICAgIGlmIChqcUxpdGUuaGFzRGF0YShmaXJzdEVsZW1lbnRUb1Jl
bW92ZSkpIHsKKyAgICAgICAgLy8gQ29weSBvdmVyIHVzZXIgZGF0YSAodGhhdCBpbmNsdWRlcyBB
bmd1bGFyJ3MgJHNjb3BlIGV0Yy4pLiBEb24ndCBjb3B5IHByaXZhdGUKKyAgICAgICAgLy8gZGF0
YSBoZXJlIGJlY2F1c2UgdGhlcmUncyBubyBwdWJsaWMgaW50ZXJmYWNlIGluIGpRdWVyeSB0byBk
byB0aGF0IGFuZCBjb3B5aW5nIG92ZXIKKyAgICAgICAgLy8gZXZlbnQgbGlzdGVuZXJzICh3aGlj
aCBpcyB0aGUgbWFpbiB1c2Ugb2YgcHJpdmF0ZSBkYXRhKSB3b3VsZG4ndCB3b3JrIGFueXdheS4K
KyAgICAgICAganFMaXRlKG5ld05vZGUpLmRhdGEoanFMaXRlKGZpcnN0RWxlbWVudFRvUmVtb3Zl
KS5kYXRhKCkpOworCisgICAgICAgIC8vIFJlbW92ZSBkYXRhIG9mIHRoZSByZXBsYWNlZCBlbGVt
ZW50LiBXZSBjYW5ub3QganVzdCBjYWxsIC5yZW1vdmUoKQorICAgICAgICAvLyBvbiB0aGUgZWxl
bWVudCBpdCBzaW5jZSB0aGF0IHdvdWxkIGRlYWxsb2NhdGUgc2NvcGUgdGhhdCBpcyBuZWVkZWQK
KyAgICAgICAgLy8gZm9yIHRoZSBuZXcgbm9kZS4gSW5zdGVhZCwgcmVtb3ZlIHRoZSBkYXRhICJt
YW51YWxseSIuCisgICAgICAgIGlmICghalF1ZXJ5KSB7CisgICAgICAgICAgZGVsZXRlIGpxTGl0
ZS5jYWNoZVtmaXJzdEVsZW1lbnRUb1JlbW92ZVtqcUxpdGUuZXhwYW5kb11dOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgIC8vIGpRdWVyeSAyLnggZG9lc24ndCBleHBvc2UgdGhlIGRhdGEg
c3RvcmFnZS4gVXNlIGpRdWVyeS5jbGVhbkRhdGEgdG8gY2xlYW4gdXAgYWZ0ZXIKKyAgICAgICAg
ICAvLyB0aGUgcmVwbGFjZWQgZWxlbWVudC4gVGhlIGNsZWFuRGF0YSB2ZXJzaW9uIG1vbmtleS1w
YXRjaGVkIGJ5IEFuZ3VsYXIgd291bGQgY2F1c2UKKyAgICAgICAgICAvLyB0aGUgc2NvcGUgdG8g
YmUgdHJhc2hlZCBhbmQgd2UgZG8gbmVlZCB0aGUgdmVyeSBzYW1lIHNjb3BlIHRvIHdvcmsgd2l0
aCB0aGUgbmV3CisgICAgICAgICAgLy8gZWxlbWVudC4gSG93ZXZlciwgd2UgY2Fubm90IGp1c3Qg
Y2FjaGUgdGhlIG5vbi1wYXRjaGVkIHZlcnNpb24gYW5kIHVzZSBpdCBoZXJlIGFzCisgICAgICAg
ICAgLy8gdGhhdCB3b3VsZCBicmVhayBpZiBhbm90aGVyIGxpYnJhcnkgcGF0Y2hlcyB0aGUgbWV0
aG9kIGFmdGVyIEFuZ3VsYXIgZG9lcyAob25lCisgICAgICAgICAgLy8gZXhhbXBsZSBpcyBqUXVl
cnkgVUkpLiBJbnN0ZWFkLCBzZXQgYSBmbGFnIGluZGljYXRpbmcgc2NvcGUgZGVzdHJveWluZyBz
aG91bGQgYmUKKyAgICAgICAgICAvLyBza2lwcGVkIHRoaXMgb25lIHRpbWUuCisgICAgICAgICAg
c2tpcERlc3Ryb3lPbk5leHRKUXVlcnlDbGVhbkRhdGEgPSB0cnVlOworICAgICAgICAgIGpRdWVy
eS5jbGVhbkRhdGEoW2ZpcnN0RWxlbWVudFRvUmVtb3ZlXSk7CisgICAgICAgIH0KKyAgICAgIH0K
KworICAgICAgZm9yICh2YXIgayA9IDEsIGtrID0gZWxlbWVudHNUb1JlbW92ZS5sZW5ndGg7IGsg
PCBrazsgaysrKSB7CisgICAgICAgIHZhciBlbGVtZW50ID0gZWxlbWVudHNUb1JlbW92ZVtrXTsK
KyAgICAgICAganFMaXRlKGVsZW1lbnQpLnJlbW92ZSgpOyAvLyBtdXN0IGRvIHRoaXMgd2F5IHRv
IGNsZWFuIHVwIGV4cGFuZG8KKyAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7
CisgICAgICAgIGRlbGV0ZSBlbGVtZW50c1RvUmVtb3ZlW2tdOworICAgICAgfQorCisgICAgICBl
bGVtZW50c1RvUmVtb3ZlWzBdID0gbmV3Tm9kZTsKKyAgICAgIGVsZW1lbnRzVG9SZW1vdmUubGVu
Z3RoID0gMTsKKyAgICB9CisKKworICAgIGZ1bmN0aW9uIGNsb25lQW5kQW5ub3RhdGVGbihmbiwg
YW5ub3RhdGlvbikgeworICAgICAgcmV0dXJuIGV4dGVuZChmdW5jdGlvbigpIHsgcmV0dXJuIGZu
LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH0sIGZuLCBhbm5vdGF0aW9uKTsKKyAgICB9CisKKwor
ICAgIGZ1bmN0aW9uIGludm9rZUxpbmtGbihsaW5rRm4sIHNjb3BlLCAkZWxlbWVudCwgYXR0cnMs
IGNvbnRyb2xsZXJzLCB0cmFuc2NsdWRlRm4pIHsKKyAgICAgIHRyeSB7CisgICAgICAgIGxpbmtG
bihzY29wZSwgJGVsZW1lbnQsIGF0dHJzLCBjb250cm9sbGVycywgdHJhbnNjbHVkZUZuKTsKKyAg
ICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoZSwgc3RhcnRpbmdU
YWcoJGVsZW1lbnQpKTsKKyAgICAgIH0KKyAgICB9CisKKworICAgIC8vIFNldCB1cCAkd2F0Y2hl
cyBmb3IgaXNvbGF0ZSBzY29wZSBhbmQgY29udHJvbGxlciBiaW5kaW5ncy4gVGhpcyBwcm9jZXNz
CisgICAgLy8gb25seSBvY2N1cnMgZm9yIGlzb2xhdGUgc2NvcGVzIGFuZCBuZXcgc2NvcGVzIHdp
dGggY29udHJvbGxlckFzLgorICAgIGZ1bmN0aW9uIGluaXRpYWxpemVEaXJlY3RpdmVCaW5kaW5n
cyhzY29wZSwgYXR0cnMsIGRlc3RpbmF0aW9uLCBiaW5kaW5ncywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlLCBuZXdTY29wZSkgeworICAgICAgdmFy
IG9uTmV3U2NvcGVEZXN0cm95ZWQ7CisgICAgICBmb3JFYWNoKGJpbmRpbmdzLCBmdW5jdGlvbihk
ZWZpbml0aW9uLCBzY29wZU5hbWUpIHsKKyAgICAgICAgdmFyIGF0dHJOYW1lID0gZGVmaW5pdGlv
bi5hdHRyTmFtZSwKKyAgICAgICAgb3B0aW9uYWwgPSBkZWZpbml0aW9uLm9wdGlvbmFsLAorICAg
ICAgICBtb2RlID0gZGVmaW5pdGlvbi5tb2RlLCAvLyBALCA9LCBvciAmCisgICAgICAgIGxhc3RW
YWx1ZSwKKyAgICAgICAgcGFyZW50R2V0LCBwYXJlbnRTZXQsIGNvbXBhcmU7CisKKyAgICAgICAg
aWYgKCFoYXNPd25Qcm9wZXJ0eS5jYWxsKGF0dHJzLCBhdHRyTmFtZSkpIHsKKyAgICAgICAgICAv
LyBJbiB0aGUgY2FzZSBvZiB1c2VyIGRlZmluZWQgYSBiaW5kaW5nIHdpdGggdGhlIHNhbWUgbmFt
ZSBhcyBhIG1ldGhvZCBpbiBPYmplY3QucHJvdG90eXBlIGJ1dCBkaWRuJ3Qgc2V0CisgICAgICAg
ICAgLy8gdGhlIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSBz
dWJzZXF1ZW50IGNvZGUgd29uJ3QgYWNjZXNzIHRvIHRoZSBwcm90b3R5cGUgZnVuY3Rpb24KKyAg
ICAgICAgICBhdHRyc1thdHRyTmFtZV0gPSB1bmRlZmluZWQ7CisgICAgICAgIH0KKworICAgICAg
ICBzd2l0Y2ggKG1vZGUpIHsKKworICAgICAgICAgIGNhc2UgJ0AnOgorICAgICAgICAgICAgaWYg
KCFhdHRyc1thdHRyTmFtZV0gJiYgIW9wdGlvbmFsKSB7CisgICAgICAgICAgICAgIGRlc3RpbmF0
aW9uW3Njb3BlTmFtZV0gPSB1bmRlZmluZWQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGF0dHJzLiRvYnNlcnZlKGF0dHJOYW1lLCBmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICAgICAg
ICBkZXN0aW5hdGlvbltzY29wZU5hbWVdID0gdmFsdWU7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIGF0dHJzLiQkb2JzZXJ2ZXJzW2F0dHJOYW1lXS4kJHNjb3BlID0gc2NvcGU7CisgICAg
ICAgICAgICBpZiAoYXR0cnNbYXR0ck5hbWVdKSB7CisgICAgICAgICAgICAgIC8vIElmIHRoZSBh
dHRyaWJ1dGUgaGFzIGJlZW4gcHJvdmlkZWQgdGhlbiB3ZSB0cmlnZ2VyIGFuIGludGVycG9sYXRp
b24gdG8gZW5zdXJlCisgICAgICAgICAgICAgIC8vIHRoZSB2YWx1ZSBpcyB0aGVyZSBmb3IgdXNl
IGluIHRoZSBsaW5rIGZuCisgICAgICAgICAgICAgIGRlc3RpbmF0aW9uW3Njb3BlTmFtZV0gPSAk
aW50ZXJwb2xhdGUoYXR0cnNbYXR0ck5hbWVdKShzY29wZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgJz0nOgorICAgICAgICAgICAgaWYgKG9w
dGlvbmFsICYmICFhdHRyc1thdHRyTmFtZV0pIHsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcGFyZW50R2V0ID0gJHBhcnNlKGF0dHJzW2F0dHJOYW1l
XSk7CisKKyAgICAgICAgICAgIGlmIChwYXJlbnRHZXQubGl0ZXJhbCkgeworICAgICAgICAgICAg
ICBjb21wYXJlID0gZXF1YWxzOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
Y29tcGFyZSA9IGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIGEgPT09IGIgfHwgKGEgIT09IGEgJiYg
YiAhPT0gYik7IH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYXJlbnRTZXQgPSBwYXJl
bnRHZXQuYXNzaWduIHx8IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAvLyByZXNldCB0aGUg
Y2hhbmdlLCBvciB3ZSB3aWxsIHRocm93IHRoaXMgZXhjZXB0aW9uIG9uIGV2ZXJ5ICRkaWdlc3QK
KyAgICAgICAgICAgICAgbGFzdFZhbHVlID0gZGVzdGluYXRpb25bc2NvcGVOYW1lXSA9IHBhcmVu
dEdldChzY29wZSk7CisgICAgICAgICAgICAgIHRocm93ICRjb21waWxlTWluRXJyKCdub25hc3Np
Z24nLAorICAgICAgICAgICAgICAgICAgIkV4cHJlc3Npb24gJ3swfScgdXNlZCB3aXRoIGRpcmVj
dGl2ZSAnezF9JyBpcyBub24tYXNzaWduYWJsZSEiLAorICAgICAgICAgICAgICAgICAgYXR0cnNb
YXR0ck5hbWVdLCBkaXJlY3RpdmUubmFtZSk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAg
bGFzdFZhbHVlID0gZGVzdGluYXRpb25bc2NvcGVOYW1lXSA9IHBhcmVudEdldChzY29wZSk7Cisg
ICAgICAgICAgICB2YXIgcGFyZW50VmFsdWVXYXRjaCA9IGZ1bmN0aW9uIHBhcmVudFZhbHVlV2F0
Y2gocGFyZW50VmFsdWUpIHsKKyAgICAgICAgICAgICAgaWYgKCFjb21wYXJlKHBhcmVudFZhbHVl
LCBkZXN0aW5hdGlvbltzY29wZU5hbWVdKSkgeworICAgICAgICAgICAgICAgIC8vIHdlIGFyZSBv
dXQgb2Ygc3luYyBhbmQgbmVlZCB0byBjb3B5CisgICAgICAgICAgICAgICAgaWYgKCFjb21wYXJl
KHBhcmVudFZhbHVlLCBsYXN0VmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAvLyBwYXJlbnQg
Y2hhbmdlZCBhbmQgaXQgaGFzIHByZWNlZGVuY2UKKyAgICAgICAgICAgICAgICAgIGRlc3RpbmF0
aW9uW3Njb3BlTmFtZV0gPSBwYXJlbnRWYWx1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHBhcmVudCBjYW4gYmUgYXNzaWduZWQgdGhlbiBk
byBzbworICAgICAgICAgICAgICAgICAgcGFyZW50U2V0KHNjb3BlLCBwYXJlbnRWYWx1ZSA9IGRl
c3RpbmF0aW9uW3Njb3BlTmFtZV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICByZXR1cm4gbGFzdFZhbHVlID0gcGFyZW50VmFsdWU7CisgICAgICAg
ICAgICB9OworICAgICAgICAgICAgcGFyZW50VmFsdWVXYXRjaC4kc3RhdGVmdWwgPSB0cnVlOwor
ICAgICAgICAgICAgdmFyIHVud2F0Y2g7CisgICAgICAgICAgICBpZiAoZGVmaW5pdGlvbi5jb2xs
ZWN0aW9uKSB7CisgICAgICAgICAgICAgIHVud2F0Y2ggPSBzY29wZS4kd2F0Y2hDb2xsZWN0aW9u
KGF0dHJzW2F0dHJOYW1lXSwgcGFyZW50VmFsdWVXYXRjaCk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICB1bndhdGNoID0gc2NvcGUuJHdhdGNoKCRwYXJzZShhdHRyc1thdHRy
TmFtZV0sIHBhcmVudFZhbHVlV2F0Y2gpLCBudWxsLCBwYXJlbnRHZXQubGl0ZXJhbCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBvbk5ld1Njb3BlRGVzdHJveWVkID0gKG9uTmV3U2NvcGVE
ZXN0cm95ZWQgfHwgW10pOworICAgICAgICAgICAgb25OZXdTY29wZURlc3Ryb3llZC5wdXNoKHVu
d2F0Y2gpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlICcmJzoKKyAgICAg
ICAgICAgIHBhcmVudEdldCA9ICRwYXJzZShhdHRyc1thdHRyTmFtZV0pOworCisgICAgICAgICAg
ICAvLyBEb24ndCBhc3NpZ24gbm9vcCB0byBkZXN0aW5hdGlvbiBpZiBleHByZXNzaW9uIGlzIG5v
dCB2YWxpZAorICAgICAgICAgICAgaWYgKHBhcmVudEdldCA9PT0gbm9vcCAmJiBvcHRpb25hbCkg
YnJlYWs7CisKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uW3Njb3BlTmFtZV0gPSBmdW5jdGlvbihs
b2NhbHMpIHsKKyAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudEdldChzY29wZSwgbG9jYWxzKTsK
KyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfSk7
CisgICAgICB2YXIgZGVzdHJveUJpbmRpbmdzID0gb25OZXdTY29wZURlc3Ryb3llZCA/IGZ1bmN0
aW9uIGRlc3Ryb3lCaW5kaW5ncygpIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gb25O
ZXdTY29wZURlc3Ryb3llZC5sZW5ndGg7IGkgPCBpaTsgKytpKSB7CisgICAgICAgICAgb25OZXdT
Y29wZURlc3Ryb3llZFtpXSgpOworICAgICAgICB9CisgICAgICB9IDogbm9vcDsKKyAgICAgIGlm
IChuZXdTY29wZSAmJiBkZXN0cm95QmluZGluZ3MgIT09IG5vb3ApIHsKKyAgICAgICAgbmV3U2Nv
cGUuJG9uKCckZGVzdHJveScsIGRlc3Ryb3lCaW5kaW5ncyk7CisgICAgICAgIHJldHVybiBub29w
OworICAgICAgfQorICAgICAgcmV0dXJuIGRlc3Ryb3lCaW5kaW5nczsKKyAgICB9CisgIH1dOwor
fQorCit2YXIgUFJFRklYX1JFR0VYUCA9IC9eKCg/Onh8ZGF0YSlbXDpcLV9dKS9pOworLyoqCisg
KiBDb252ZXJ0cyBhbGwgYWNjZXB0ZWQgZGlyZWN0aXZlcyBmb3JtYXQgaW50byBwcm9wZXIgZGly
ZWN0aXZlIG5hbWUuCisgKiBAcGFyYW0gbmFtZSBOYW1lIHRvIG5vcm1hbGl6ZQorICovCitmdW5j
dGlvbiBkaXJlY3RpdmVOb3JtYWxpemUobmFtZSkgeworICByZXR1cm4gY2FtZWxDYXNlKG5hbWUu
cmVwbGFjZShQUkVGSVhfUkVHRVhQLCAnJykpOworfQorCisvKioKKyAqIEBuZ2RvYyB0eXBlCisg
KiBAbmFtZSAkY29tcGlsZS5kaXJlY3RpdmUuQXR0cmlidXRlcworICoKKyAqIEBkZXNjcmlwdGlv
bgorICogQSBzaGFyZWQgb2JqZWN0IGJldHdlZW4gZGlyZWN0aXZlIGNvbXBpbGUgLyBsaW5raW5n
IGZ1bmN0aW9ucyB3aGljaCBjb250YWlucyBub3JtYWxpemVkIERPTQorICogZWxlbWVudCBhdHRy
aWJ1dGVzLiBUaGUgdmFsdWVzIHJlZmxlY3QgY3VycmVudCBiaW5kaW5nIHN0YXRlIGB7eyB9fWAu
IFRoZSBub3JtYWxpemF0aW9uIGlzCisgKiBuZWVkZWQgc2luY2UgYWxsIG9mIHRoZXNlIGFyZSB0
cmVhdGVkIGFzIGVxdWl2YWxlbnQgaW4gQW5ndWxhcjoKKyAqCisgKiBgYGAKKyAqICAgIDxzcGFu
IG5nOmJpbmQ9ImEiIG5nLWJpbmQ9ImEiIGRhdGEtbmctYmluZD0iYSIgeC1uZy1iaW5kPSJhIj4K
KyAqIGBgYAorICovCisKKy8qKgorICogQG5nZG9jIHByb3BlcnR5CisgKiBAbmFtZSAkY29tcGls
ZS5kaXJlY3RpdmUuQXR0cmlidXRlcyMkYXR0cgorICoKKyAqIEBkZXNjcmlwdGlvbgorICogQSBt
YXAgb2YgRE9NIGVsZW1lbnQgYXR0cmlidXRlIG5hbWVzIHRvIHRoZSBub3JtYWxpemVkIG5hbWUu
IFRoaXMgaXMKKyAqIG5lZWRlZCB0byBkbyByZXZlcnNlIGxvb2t1cCBmcm9tIG5vcm1hbGl6ZWQg
bmFtZSBiYWNrIHRvIGFjdHVhbCBuYW1lLgorICovCisKKworLyoqCisgKiBAbmdkb2MgbWV0aG9k
CisgKiBAbmFtZSAkY29tcGlsZS5kaXJlY3RpdmUuQXR0cmlidXRlcyMkc2V0CisgKiBAa2luZCBm
dW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlvbgorICogU2V0IERPTSBlbGVtZW50IGF0dHJpYnV0
ZSB2YWx1ZS4KKyAqCisgKgorICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTm9ybWFsaXplZCBlbGVt
ZW50IGF0dHJpYnV0ZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBtb2RpZnkuIFRoZSBuYW1lIGlz
CisgKiAgICAgICAgICByZXZlcnNlLXRyYW5zbGF0ZWQgdXNpbmcgdGhlIHtAbGluayBuZy4kY29t
cGlsZS5kaXJlY3RpdmUuQXR0cmlidXRlcyMkYXR0ciAkYXR0cn0KKyAqICAgICAgICAgIHByb3Bl
cnR5IHRvIHRoZSBvcmlnaW5hbCBuYW1lLgorICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIFZhbHVl
IHRvIHNldCB0aGUgYXR0cmlidXRlIHRvLiBUaGUgdmFsdWUgY2FuIGJlIGFuIGludGVycG9sYXRl
ZCBzdHJpbmcuCisgKi8KKworCisKKy8qKgorICogQ2xvc3VyZSBjb21waWxlciB0eXBlIGluZm9y
bWF0aW9uCisgKi8KKworZnVuY3Rpb24gbm9kZXNldExpbmtpbmdGbigKKyAgLyogYW5ndWxhci5T
Y29wZSAqLyBzY29wZSwKKyAgLyogTm9kZUxpc3QgKi8gbm9kZUxpc3QsCisgIC8qIEVsZW1lbnQg
Ki8gcm9vdEVsZW1lbnQsCisgIC8qIGZ1bmN0aW9uKEZ1bmN0aW9uKSAqLyBib3VuZFRyYW5zY2x1
ZGVGbgorKSB7fQorCitmdW5jdGlvbiBkaXJlY3RpdmVMaW5raW5nRm4oCisgIC8qIG5vZGVzZXRM
aW5raW5nRm4gKi8gbm9kZXNldExpbmtpbmdGbiwKKyAgLyogYW5ndWxhci5TY29wZSAqLyBzY29w
ZSwKKyAgLyogTm9kZSAqLyBub2RlLAorICAvKiBFbGVtZW50ICovIHJvb3RFbGVtZW50LAorICAv
KiBmdW5jdGlvbihGdW5jdGlvbikgKi8gYm91bmRUcmFuc2NsdWRlRm4KKykge30KKworZnVuY3Rp
b24gdG9rZW5EaWZmZXJlbmNlKHN0cjEsIHN0cjIpIHsKKyAgdmFyIHZhbHVlcyA9ICcnLAorICAg
ICAgdG9rZW5zMSA9IHN0cjEuc3BsaXQoL1xzKy8pLAorICAgICAgdG9rZW5zMiA9IHN0cjIuc3Bs
aXQoL1xzKy8pOworCisgIG91dGVyOgorICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2VuczEubGVu
Z3RoOyBpKyspIHsKKyAgICB2YXIgdG9rZW4gPSB0b2tlbnMxW2ldOworICAgIGZvciAodmFyIGog
PSAwOyBqIDwgdG9rZW5zMi5sZW5ndGg7IGorKykgeworICAgICAgaWYgKHRva2VuID09IHRva2Vu
czJbal0pIGNvbnRpbnVlIG91dGVyOworICAgIH0KKyAgICB2YWx1ZXMgKz0gKHZhbHVlcy5sZW5n
dGggPiAwID8gJyAnIDogJycpICsgdG9rZW47CisgIH0KKyAgcmV0dXJuIHZhbHVlczsKK30KKwor
ZnVuY3Rpb24gcmVtb3ZlQ29tbWVudHMoanFOb2RlcykgeworICBqcU5vZGVzID0ganFMaXRlKGpx
Tm9kZXMpOworICB2YXIgaSA9IGpxTm9kZXMubGVuZ3RoOworCisgIGlmIChpIDw9IDEpIHsKKyAg
ICByZXR1cm4ganFOb2RlczsKKyAgfQorCisgIHdoaWxlIChpLS0pIHsKKyAgICB2YXIgbm9kZSA9
IGpxTm9kZXNbaV07CisgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5PREVfVFlQRV9DT01NRU5U
KSB7CisgICAgICBzcGxpY2UuY2FsbChqcU5vZGVzLCBpLCAxKTsKKyAgICB9CisgIH0KKyAgcmV0
dXJuIGpxTm9kZXM7Cit9CisKK3ZhciAkY29udHJvbGxlck1pbkVyciA9IG1pbkVycignJGNvbnRy
b2xsZXInKTsKKworCit2YXIgQ05UUkxfUkVHID0gL14oXFMrKShccythc1xzKyhcdyspKT8kLzsK
K2Z1bmN0aW9uIGlkZW50aWZpZXJGb3JDb250cm9sbGVyKGNvbnRyb2xsZXIsIGlkZW50KSB7Cisg
IGlmIChpZGVudCAmJiBpc1N0cmluZyhpZGVudCkpIHJldHVybiBpZGVudDsKKyAgaWYgKGlzU3Ry
aW5nKGNvbnRyb2xsZXIpKSB7CisgICAgdmFyIG1hdGNoID0gQ05UUkxfUkVHLmV4ZWMoY29udHJv
bGxlcik7CisgICAgaWYgKG1hdGNoKSByZXR1cm4gbWF0Y2hbM107CisgIH0KK30KKworCisvKioK
KyAqIEBuZ2RvYyBwcm92aWRlcgorICogQG5hbWUgJGNvbnRyb2xsZXJQcm92aWRlcgorICogQGRl
c2NyaXB0aW9uCisgKiBUaGUge0BsaW5rIG5nLiRjb250cm9sbGVyICRjb250cm9sbGVyIHNlcnZp
Y2V9IGlzIHVzZWQgYnkgQW5ndWxhciB0byBjcmVhdGUgbmV3CisgKiBjb250cm9sbGVycy4KKyAq
CisgKiBUaGlzIHByb3ZpZGVyIGFsbG93cyBjb250cm9sbGVyIHJlZ2lzdHJhdGlvbiB2aWEgdGhl
CisgKiB7QGxpbmsgbmcuJGNvbnRyb2xsZXJQcm92aWRlciNyZWdpc3RlciByZWdpc3Rlcn0gbWV0
aG9kLgorICovCitmdW5jdGlvbiAkQ29udHJvbGxlclByb3ZpZGVyKCkgeworICB2YXIgY29udHJv
bGxlcnMgPSB7fSwKKyAgICAgIGdsb2JhbHMgPSBmYWxzZTsKKworICAvKioKKyAgICogQG5nZG9j
IG1ldGhvZAorICAgKiBAbmFtZSAkY29udHJvbGxlclByb3ZpZGVyI3JlZ2lzdGVyCisgICAqIEBw
YXJhbSB7c3RyaW5nfE9iamVjdH0gbmFtZSBDb250cm9sbGVyIG5hbWUsIG9yIGFuIG9iamVjdCBt
YXAgb2YgY29udHJvbGxlcnMgd2hlcmUgdGhlIGtleXMgYXJlCisgICAqICAgIHRoZSBuYW1lcyBh
bmQgdGhlIHZhbHVlcyBhcmUgdGhlIGNvbnN0cnVjdG9ycy4KKyAgICogQHBhcmFtIHtGdW5jdGlv
bnxBcnJheX0gY29uc3RydWN0b3IgQ29udHJvbGxlciBjb25zdHJ1Y3RvciBmbiAob3B0aW9uYWxs
eSBkZWNvcmF0ZWQgd2l0aCBESQorICAgKiAgICBhbm5vdGF0aW9ucyBpbiB0aGUgYXJyYXkgbm90
YXRpb24pLgorICAgKi8KKyAgdGhpcy5yZWdpc3RlciA9IGZ1bmN0aW9uKG5hbWUsIGNvbnN0cnVj
dG9yKSB7CisgICAgYXNzZXJ0Tm90SGFzT3duUHJvcGVydHkobmFtZSwgJ2NvbnRyb2xsZXInKTsK
KyAgICBpZiAoaXNPYmplY3QobmFtZSkpIHsKKyAgICAgIGV4dGVuZChjb250cm9sbGVycywgbmFt
ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGNvbnRyb2xsZXJzW25hbWVdID0gY29uc3RydWN0b3I7
CisgICAgfQorICB9OworCisgIC8qKgorICAgKiBAbmdkb2MgbWV0aG9kCisgICAqIEBuYW1lICRj
b250cm9sbGVyUHJvdmlkZXIjYWxsb3dHbG9iYWxzCisgICAqIEBkZXNjcmlwdGlvbiBJZiBjYWxs
ZWQsIGFsbG93cyBgJGNvbnRyb2xsZXJgIHRvIGZpbmQgY29udHJvbGxlciBjb25zdHJ1Y3RvcnMg
b24gYHdpbmRvd2AKKyAgICovCisgIHRoaXMuYWxsb3dHbG9iYWxzID0gZnVuY3Rpb24oKSB7Cisg
ICAgZ2xvYmFscyA9IHRydWU7CisgIH07CisKKworICB0aGlzLiRnZXQgPSBbJyRpbmplY3Rvcics
ICckd2luZG93JywgZnVuY3Rpb24oJGluamVjdG9yLCAkd2luZG93KSB7CisKKyAgICAvKioKKyAg
ICAgKiBAbmdkb2Mgc2VydmljZQorICAgICAqIEBuYW1lICRjb250cm9sbGVyCisgICAgICogQHJl
cXVpcmVzICRpbmplY3RvcgorICAgICAqCisgICAgICogQHBhcmFtIHtGdW5jdGlvbnxzdHJpbmd9
IGNvbnN0cnVjdG9yIElmIGNhbGxlZCB3aXRoIGEgZnVuY3Rpb24gdGhlbiBpdCdzIGNvbnNpZGVy
ZWQgdG8gYmUgdGhlCisgICAgICogICAgY29udHJvbGxlciBjb25zdHJ1Y3RvciBmdW5jdGlvbi4g
T3RoZXJ3aXNlIGl0J3MgY29uc2lkZXJlZCB0byBiZSBhIHN0cmluZyB3aGljaCBpcyB1c2VkCisg
ICAgICogICAgdG8gcmV0cmlldmUgdGhlIGNvbnRyb2xsZXIgY29uc3RydWN0b3IgdXNpbmcgdGhl
IGZvbGxvd2luZyBzdGVwczoKKyAgICAgKgorICAgICAqICAgICogY2hlY2sgaWYgYSBjb250cm9s
bGVyIHdpdGggZ2l2ZW4gbmFtZSBpcyByZWdpc3RlcmVkIHZpYSBgJGNvbnRyb2xsZXJQcm92aWRl
cmAKKyAgICAgKiAgICAqIGNoZWNrIGlmIGV2YWx1YXRpbmcgdGhlIHN0cmluZyBvbiB0aGUgY3Vy
cmVudCBzY29wZSByZXR1cm5zIGEgY29uc3RydWN0b3IKKyAgICAgKiAgICAqIGlmICRjb250cm9s
bGVyUHJvdmlkZXIjYWxsb3dHbG9iYWxzLCBjaGVjayBgd2luZG93W2NvbnN0cnVjdG9yXWAgb24g
dGhlIGdsb2JhbAorICAgICAqICAgICAgYHdpbmRvd2Agb2JqZWN0IChub3QgcmVjb21tZW5kZWQp
CisgICAgICoKKyAgICAgKiAgICBUaGUgc3RyaW5nIGNhbiB1c2UgdGhlIGBjb250cm9sbGVyIGFz
IHByb3BlcnR5YCBzeW50YXgsIHdoZXJlIHRoZSBjb250cm9sbGVyIGluc3RhbmNlIGlzIHB1Ymxp
c2hlZAorICAgICAqICAgIGFzIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgb24gdGhlIGBzY29wZWA7
IHRoZSBgc2NvcGVgIG11c3QgYmUgaW5qZWN0ZWQgaW50byBgbG9jYWxzYCBwYXJhbSBmb3IgdGhp
cworICAgICAqICAgIHRvIHdvcmsgY29ycmVjdGx5LgorICAgICAqCisgICAgICogQHBhcmFtIHtP
YmplY3R9IGxvY2FscyBJbmplY3Rpb24gbG9jYWxzIGZvciBDb250cm9sbGVyLgorICAgICAqIEBy
ZXR1cm4ge09iamVjdH0gSW5zdGFuY2Ugb2YgZ2l2ZW4gY29udHJvbGxlci4KKyAgICAgKgorICAg
ICAqIEBkZXNjcmlwdGlvbgorICAgICAqIGAkY29udHJvbGxlcmAgc2VydmljZSBpcyByZXNwb25z
aWJsZSBmb3IgaW5zdGFudGlhdGluZyBjb250cm9sbGVycy4KKyAgICAgKgorICAgICAqIEl0J3Mg
anVzdCBhIHNpbXBsZSBjYWxsIHRvIHtAbGluayBhdXRvLiRpbmplY3RvciAkaW5qZWN0b3J9LCBi
dXQgZXh0cmFjdGVkIGludG8KKyAgICAgKiBhIHNlcnZpY2UsIHNvIHRoYXQgb25lIGNhbiBvdmVy
cmlkZSB0aGlzIHNlcnZpY2Ugd2l0aCBbQkMgdmVyc2lvbl0oaHR0cHM6Ly9naXN0LmdpdGh1Yi5j
b20vMTY0OTc4OCkuCisgICAgICovCisgICAgcmV0dXJuIGZ1bmN0aW9uKGV4cHJlc3Npb24sIGxv
Y2FscywgbGF0ZXIsIGlkZW50KSB7CisgICAgICAvLyBQUklWQVRFIEFQSToKKyAgICAgIC8vICAg
cGFyYW0gYGxhdGVyYCAtLS0gaW5kaWNhdGVzIHRoYXQgdGhlIGNvbnRyb2xsZXIncyBjb25zdHJ1
Y3RvciBpcyBpbnZva2VkIGF0IGEgbGF0ZXIgdGltZS4KKyAgICAgIC8vICAgICAgICAgICAgICAg
ICAgICAgSWYgdHJ1ZSwgJGNvbnRyb2xsZXIgd2lsbCBhbGxvY2F0ZSB0aGUgb2JqZWN0IHdpdGgg
dGhlIGNvcnJlY3QKKyAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlIGNoYWlu
LCBidXQgd2lsbCBub3QgaW52b2tlIHRoZSBjb250cm9sbGVyIHVudGlsIGEgcmV0dXJuZWQKKyAg
ICAgIC8vICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgaXMgaW52b2tlZC4KKyAgICAgIC8v
ICAgcGFyYW0gYGlkZW50YCAtLS0gQW4gb3B0aW9uYWwgbGFiZWwgd2hpY2ggb3ZlcnJpZGVzIHRo
ZSBsYWJlbCBwYXJzZWQgZnJvbSB0aGUgY29udHJvbGxlcgorICAgICAgLy8gICAgICAgICAgICAg
ICAgICAgICBleHByZXNzaW9uLCBpZiBhbnkuCisgICAgICB2YXIgaW5zdGFuY2UsIG1hdGNoLCBj
b25zdHJ1Y3RvciwgaWRlbnRpZmllcjsKKyAgICAgIGxhdGVyID0gbGF0ZXIgPT09IHRydWU7Cisg
ICAgICBpZiAoaWRlbnQgJiYgaXNTdHJpbmcoaWRlbnQpKSB7CisgICAgICAgIGlkZW50aWZpZXIg
PSBpZGVudDsKKyAgICAgIH0KKworICAgICAgaWYgKGlzU3RyaW5nKGV4cHJlc3Npb24pKSB7Cisg
ICAgICAgIG1hdGNoID0gZXhwcmVzc2lvbi5tYXRjaChDTlRSTF9SRUcpOworICAgICAgICBpZiAo
IW1hdGNoKSB7CisgICAgICAgICAgdGhyb3cgJGNvbnRyb2xsZXJNaW5FcnIoJ2N0cmxmbXQnLAor
ICAgICAgICAgICAgIkJhZGx5IGZvcm1lZCBjb250cm9sbGVyIHN0cmluZyAnezB9Jy4gIiArCisg
ICAgICAgICAgICAiTXVzdCBtYXRjaCBgX19uYW1lX18gYXMgX19pZF9fYCBvciBgX19uYW1lX19g
LiIsIGV4cHJlc3Npb24pOworICAgICAgICB9CisgICAgICAgIGNvbnN0cnVjdG9yID0gbWF0Y2hb
MV0sCisgICAgICAgIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyIHx8IG1hdGNoWzNdOworICAgICAg
ICBleHByZXNzaW9uID0gY29udHJvbGxlcnMuaGFzT3duUHJvcGVydHkoY29uc3RydWN0b3IpCisg
ICAgICAgICAgICA/IGNvbnRyb2xsZXJzW2NvbnN0cnVjdG9yXQorICAgICAgICAgICAgOiBnZXR0
ZXIobG9jYWxzLiRzY29wZSwgY29uc3RydWN0b3IsIHRydWUpIHx8CisgICAgICAgICAgICAgICAg
KGdsb2JhbHMgPyBnZXR0ZXIoJHdpbmRvdywgY29uc3RydWN0b3IsIHRydWUpIDogdW5kZWZpbmVk
KTsKKworICAgICAgICBhc3NlcnRBcmdGbihleHByZXNzaW9uLCBjb25zdHJ1Y3RvciwgdHJ1ZSk7
CisgICAgICB9CisKKyAgICAgIGlmIChsYXRlcikgeworICAgICAgICAvLyBJbnN0YW50aWF0ZSBj
b250cm9sbGVyIGxhdGVyOgorICAgICAgICAvLyBUaGlzIG1hY2hpbmVyeSBpcyB1c2VkIHRvIGNy
ZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgb2JqZWN0IGJlZm9yZSBjYWxsaW5nIHRoZQorICAgICAg
ICAvLyBjb250cm9sbGVyJ3MgY29uc3RydWN0b3IgaXRzZWxmLgorICAgICAgICAvLworICAgICAg
ICAvLyBUaGlzIGFsbG93cyBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIHRoZSBjb250cm9sbGVy
IGJlZm9yZSB0aGUgY29uc3RydWN0b3IgaXMKKyAgICAgICAgLy8gaW52b2tlZC4gUHJpbWFyaWx5
LCB0aGlzIGlzIHVzZWQgZm9yIGlzb2xhdGUgc2NvcGUgYmluZGluZ3MgaW4gJGNvbXBpbGUuCisg
ICAgICAgIC8vCisgICAgICAgIC8vIFRoaXMgZmVhdHVyZSBpcyBub3QgaW50ZW5kZWQgZm9yIHVz
ZSBieSBhcHBsaWNhdGlvbnMsIGFuZCBpcyB0aHVzIG5vdCBkb2N1bWVudGVkCisgICAgICAgIC8v
IHB1YmxpY2x5LgorICAgICAgICAvLyBPYmplY3QgY3JlYXRpb246IGh0dHA6Ly9qc3BlcmYuY29t
L2NyZWF0ZS1jb25zdHJ1Y3Rvci8yCisgICAgICAgIHZhciBjb250cm9sbGVyUHJvdG90eXBlID0g
KGlzQXJyYXkoZXhwcmVzc2lvbikgPworICAgICAgICAgIGV4cHJlc3Npb25bZXhwcmVzc2lvbi5s
ZW5ndGggLSAxXSA6IGV4cHJlc3Npb24pLnByb3RvdHlwZTsKKyAgICAgICAgaW5zdGFuY2UgPSBP
YmplY3QuY3JlYXRlKGNvbnRyb2xsZXJQcm90b3R5cGUgfHwgbnVsbCk7CisKKyAgICAgICAgaWYg
KGlkZW50aWZpZXIpIHsKKyAgICAgICAgICBhZGRJZGVudGlmaWVyKGxvY2FscywgaWRlbnRpZmll
ciwgaW5zdGFuY2UsIGNvbnN0cnVjdG9yIHx8IGV4cHJlc3Npb24ubmFtZSk7CisgICAgICAgIH0K
KworICAgICAgICB2YXIgaW5zdGFudGlhdGU7CisgICAgICAgIHJldHVybiBpbnN0YW50aWF0ZSA9
IGV4dGVuZChmdW5jdGlvbigpIHsKKyAgICAgICAgICB2YXIgcmVzdWx0ID0gJGluamVjdG9yLmlu
dm9rZShleHByZXNzaW9uLCBpbnN0YW5jZSwgbG9jYWxzLCBjb25zdHJ1Y3Rvcik7CisgICAgICAg
ICAgaWYgKHJlc3VsdCAhPT0gaW5zdGFuY2UgJiYgKGlzT2JqZWN0KHJlc3VsdCkgfHwgaXNGdW5j
dGlvbihyZXN1bHQpKSkgeworICAgICAgICAgICAgaW5zdGFuY2UgPSByZXN1bHQ7CisgICAgICAg
ICAgICBpZiAoaWRlbnRpZmllcikgeworICAgICAgICAgICAgICAvLyBJZiByZXN1bHQgY2hhbmdl
ZCwgcmUtYXNzaWduIGNvbnRyb2xsZXJBcyB2YWx1ZSB0byBzY29wZS4KKyAgICAgICAgICAgICAg
YWRkSWRlbnRpZmllcihsb2NhbHMsIGlkZW50aWZpZXIsIGluc3RhbmNlLCBjb25zdHJ1Y3RvciB8
fCBleHByZXNzaW9uLm5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAg
ICByZXR1cm4gaW5zdGFuY2U7CisgICAgICAgIH0sIHsKKyAgICAgICAgICBpbnN0YW5jZTogaW5z
dGFuY2UsCisgICAgICAgICAgaWRlbnRpZmllcjogaWRlbnRpZmllcgorICAgICAgICB9KTsKKyAg
ICAgIH0KKworICAgICAgaW5zdGFuY2UgPSAkaW5qZWN0b3IuaW5zdGFudGlhdGUoZXhwcmVzc2lv
biwgbG9jYWxzLCBjb25zdHJ1Y3Rvcik7CisKKyAgICAgIGlmIChpZGVudGlmaWVyKSB7CisgICAg
ICAgIGFkZElkZW50aWZpZXIobG9jYWxzLCBpZGVudGlmaWVyLCBpbnN0YW5jZSwgY29uc3RydWN0
b3IgfHwgZXhwcmVzc2lvbi5uYW1lKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIGluc3RhbmNl
OworICAgIH07CisKKyAgICBmdW5jdGlvbiBhZGRJZGVudGlmaWVyKGxvY2FscywgaWRlbnRpZmll
ciwgaW5zdGFuY2UsIG5hbWUpIHsKKyAgICAgIGlmICghKGxvY2FscyAmJiBpc09iamVjdChsb2Nh
bHMuJHNjb3BlKSkpIHsKKyAgICAgICAgdGhyb3cgbWluRXJyKCckY29udHJvbGxlcicpKCdub3Nj
cCcsCisgICAgICAgICAgIkNhbm5vdCBleHBvcnQgY29udHJvbGxlciAnezB9JyBhcyAnezF9JyEg
Tm8gJHNjb3BlIG9iamVjdCBwcm92aWRlZCB2aWEgYGxvY2Fsc2AuIiwKKyAgICAgICAgICBuYW1l
LCBpZGVudGlmaWVyKTsKKyAgICAgIH0KKworICAgICAgbG9jYWxzLiRzY29wZVtpZGVudGlmaWVy
XSA9IGluc3RhbmNlOworICAgIH0KKyAgfV07Cit9CisKKy8qKgorICogQG5nZG9jIHNlcnZpY2UK
KyAqIEBuYW1lICRkb2N1bWVudAorICogQHJlcXVpcmVzICR3aW5kb3cKKyAqCisgKiBAZGVzY3Jp
cHRpb24KKyAqIEEge0BsaW5rIGFuZ3VsYXIuZWxlbWVudCBqUXVlcnkgb3IganFMaXRlfSB3cmFw
cGVyIGZvciB0aGUgYnJvd3NlcidzIGB3aW5kb3cuZG9jdW1lbnRgIG9iamVjdC4KKyAqCisgKiBA
ZXhhbXBsZQorICAgPGV4YW1wbGUgbW9kdWxlPSJkb2N1bWVudEV4YW1wbGUiPgorICAgICA8Zmls
ZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9IkV4YW1wbGVD
b250cm9sbGVyIj4KKyAgICAgICAgIDxwPiRkb2N1bWVudCB0aXRsZTogPGIgbmctYmluZD0idGl0
bGUiPjwvYj48L3A+CisgICAgICAgICA8cD53aW5kb3cuZG9jdW1lbnQgdGl0bGU6IDxiIG5nLWJp
bmQ9IndpbmRvd1RpdGxlIj48L2I+PC9wPgorICAgICAgIDwvZGl2PgorICAgICA8L2ZpbGU+Cisg
ICAgIDxmaWxlIG5hbWU9InNjcmlwdC5qcyI+CisgICAgICAgYW5ndWxhci5tb2R1bGUoJ2RvY3Vt
ZW50RXhhbXBsZScsIFtdKQorICAgICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVy
JywgWyckc2NvcGUnLCAnJGRvY3VtZW50JywgZnVuY3Rpb24oJHNjb3BlLCAkZG9jdW1lbnQpIHsK
KyAgICAgICAgICAgJHNjb3BlLnRpdGxlID0gJGRvY3VtZW50WzBdLnRpdGxlOworICAgICAgICAg
ICAkc2NvcGUud2luZG93VGl0bGUgPSBhbmd1bGFyLmVsZW1lbnQod2luZG93LmRvY3VtZW50KVsw
XS50aXRsZTsKKyAgICAgICAgIH1dKTsKKyAgICAgPC9maWxlPgorICAgPC9leGFtcGxlPgorICov
CitmdW5jdGlvbiAkRG9jdW1lbnRQcm92aWRlcigpIHsKKyAgdGhpcy4kZ2V0ID0gWyckd2luZG93
JywgZnVuY3Rpb24od2luZG93KSB7CisgICAgcmV0dXJuIGpxTGl0ZSh3aW5kb3cuZG9jdW1lbnQp
OworICB9XTsKK30KKworLyoqCisgKiBAbmdkb2Mgc2VydmljZQorICogQG5hbWUgJGV4Y2VwdGlv
bkhhbmRsZXIKKyAqIEByZXF1aXJlcyBuZy4kbG9nCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBB
bnkgdW5jYXVnaHQgZXhjZXB0aW9uIGluIGFuZ3VsYXIgZXhwcmVzc2lvbnMgaXMgZGVsZWdhdGVk
IHRvIHRoaXMgc2VydmljZS4KKyAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHNpbXBseSBk
ZWxlZ2F0ZXMgdG8gYCRsb2cuZXJyb3JgIHdoaWNoIGxvZ3MgaXQgaW50bworICogdGhlIGJyb3dz
ZXIgY29uc29sZS4KKyAqCisgKiBJbiB1bml0IHRlc3RzLCBpZiBgYW5ndWxhci1tb2Nrcy5qc2Ag
aXMgbG9hZGVkLCB0aGlzIHNlcnZpY2UgaXMgb3ZlcnJpZGRlbiBieQorICoge0BsaW5rIG5nTW9j
ay4kZXhjZXB0aW9uSGFuZGxlciBtb2NrICRleGNlcHRpb25IYW5kbGVyfSB3aGljaCBhaWRzIGlu
IHRlc3RpbmcuCisgKgorICogIyMgRXhhbXBsZToKKyAqCisgKiBgYGBqcworICogICBhbmd1bGFy
Lm1vZHVsZSgnZXhjZXB0aW9uT3ZlcnJpZGUnLCBbXSkuZmFjdG9yeSgnJGV4Y2VwdGlvbkhhbmRs
ZXInLCBmdW5jdGlvbigpIHsKKyAqICAgICByZXR1cm4gZnVuY3Rpb24oZXhjZXB0aW9uLCBjYXVz
ZSkgeworICogICAgICAgZXhjZXB0aW9uLm1lc3NhZ2UgKz0gJyAoY2F1c2VkIGJ5ICInICsgY2F1
c2UgKyAnIiknOworICogICAgICAgdGhyb3cgZXhjZXB0aW9uOworICogICAgIH07CisgKiAgIH0p
OworICogYGBgCisgKgorICogVGhpcyBleGFtcGxlIHdpbGwgb3ZlcnJpZGUgdGhlIG5vcm1hbCBh
Y3Rpb24gb2YgYCRleGNlcHRpb25IYW5kbGVyYCwgdG8gbWFrZSBhbmd1bGFyCisgKiBleGNlcHRp
b25zIGZhaWwgaGFyZCB3aGVuIHRoZXkgaGFwcGVuLCBpbnN0ZWFkIG9mIGp1c3QgbG9nZ2luZyB0
byB0aGUgY29uc29sZS4KKyAqCisgKiA8aHIgLz4KKyAqIE5vdGUsIHRoYXQgY29kZSBleGVjdXRl
ZCBpbiBldmVudC1saXN0ZW5lcnMgKGV2ZW4gdGhvc2UgcmVnaXN0ZXJlZCB1c2luZyBqcUxpdGUn
cyBgb25gL2BiaW5kYAorICogbWV0aG9kcykgZG9lcyBub3QgZGVsZWdhdGUgZXhjZXB0aW9ucyB0
byB0aGUge0BsaW5rIG5nLiRleGNlcHRpb25IYW5kbGVyICRleGNlcHRpb25IYW5kbGVyfQorICog
KHVubGVzcyBleGVjdXRlZCBkdXJpbmcgYSBkaWdlc3QpLgorICoKKyAqIElmIHlvdSB3aXNoLCB5
b3UgY2FuIG1hbnVhbGx5IGRlbGVnYXRlIGV4Y2VwdGlvbnMsIGUuZy4KKyAqIGB0cnkgeyAuLi4g
fSBjYXRjaChlKSB7ICRleGNlcHRpb25IYW5kbGVyKGUpOyB9YAorICoKKyAqIEBwYXJhbSB7RXJy
b3J9IGV4Y2VwdGlvbiBFeGNlcHRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBlcnJvci4KKyAqIEBw
YXJhbSB7c3RyaW5nPX0gY2F1c2Ugb3B0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbnRl
eHQgaW4gd2hpY2gKKyAqICAgICAgIHRoZSBlcnJvciB3YXMgdGhyb3duLgorICoKKyAqLworZnVu
Y3Rpb24gJEV4Y2VwdGlvbkhhbmRsZXJQcm92aWRlcigpIHsKKyAgdGhpcy4kZ2V0ID0gWyckbG9n
JywgZnVuY3Rpb24oJGxvZykgeworICAgIHJldHVybiBmdW5jdGlvbihleGNlcHRpb24sIGNhdXNl
KSB7CisgICAgICAkbG9nLmVycm9yLmFwcGx5KCRsb2csIGFyZ3VtZW50cyk7CisgICAgfTsKKyAg
fV07Cit9CisKK3ZhciBBUFBMSUNBVElPTl9KU09OID0gJ2FwcGxpY2F0aW9uL2pzb24nOwordmFy
IENPTlRFTlRfVFlQRV9BUFBMSUNBVElPTl9KU09OID0geydDb250ZW50LVR5cGUnOiBBUFBMSUNB
VElPTl9KU09OICsgJztjaGFyc2V0PXV0Zi04J307Cit2YXIgSlNPTl9TVEFSVCA9IC9eXFt8Xlx7
KD8hXHspLzsKK3ZhciBKU09OX0VORFMgPSB7CisgICdbJzogL10kLywKKyAgJ3snOiAvfSQvCit9
OwordmFyIEpTT05fUFJPVEVDVElPTl9QUkVGSVggPSAvXlwpXF1cfScsP1xuLzsKKworZnVuY3Rp
b24gc2VyaWFsaXplVmFsdWUodikgeworICBpZiAoaXNPYmplY3QodikpIHsKKyAgICByZXR1cm4g
aXNEYXRlKHYpID8gdi50b0lTT1N0cmluZygpIDogdG9Kc29uKHYpOworICB9CisgIHJldHVybiB2
OworfQorCisKK2Z1bmN0aW9uICRIdHRwUGFyYW1TZXJpYWxpemVyUHJvdmlkZXIoKSB7CisgIC8q
KgorICAgKiBAbmdkb2Mgc2VydmljZQorICAgKiBAbmFtZSAkaHR0cFBhcmFtU2VyaWFsaXplcgor
ICAgKiBAZGVzY3JpcHRpb24KKyAgICoKKyAgICogRGVmYXVsdCB7QGxpbmsgJGh0dHAgYCRodHRw
YH0gcGFyYW1zIHNlcmlhbGl6ZXIgdGhhdCBjb252ZXJ0cyBvYmplY3RzIHRvIHN0cmluZ3MKKyAg
ICogYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgcnVsZXM6CisgICAqCisgICAqICogYHsnZm9v
JzogJ2Jhcid9YCByZXN1bHRzIGluIGBmb289YmFyYAorICAgKiAqIGB7J2Zvbyc6IERhdGUubm93
KCl9YCByZXN1bHRzIGluIGBmb289MjAxNS0wNC0wMVQwOSUzQTUwJTNBNDkuMjYyWmAgKGB0b0lT
T1N0cmluZygpYCBhbmQgZW5jb2RlZCByZXByZXNlbnRhdGlvbiBvZiBhIERhdGUgb2JqZWN0KQor
ICAgKiAqIGB7J2Zvbyc6IFsnYmFyJywgJ2JheiddfWAgcmVzdWx0cyBpbiBgZm9vPWJhciZmb289
YmF6YCAocmVwZWF0ZWQga2V5IGZvciBlYWNoIGFycmF5IGVsZW1lbnQpCisgICAqICogYHsnZm9v
JzogeydiYXInOidiYXonfX1gIHJlc3VsdHMgaW4gYGZvbz0lN0IlMjJiYXIlMjIlM0ElMjJiYXol
MjIlN0QiYCAoc3RyaW5naWZpZWQgYW5kIGVuY29kZWQgcmVwcmVzZW50YXRpb24gb2YgYW4gb2Jq
ZWN0KQorICAgKgorICAgKiBOb3RlIHRoYXQgc2VyaWFsaXplciB3aWxsIHNvcnQgdGhlIHJlcXVl
c3QgcGFyYW1ldGVycyBhbHBoYWJldGljYWxseS4KKyAgICogKi8KKworICB0aGlzLiRnZXQgPSBm
dW5jdGlvbigpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24gbmdQYXJhbVNlcmlhbGl6ZXIocGFyYW1z
KSB7CisgICAgICBpZiAoIXBhcmFtcykgcmV0dXJuICcnOworICAgICAgdmFyIHBhcnRzID0gW107
CisgICAgICBmb3JFYWNoU29ydGVkKHBhcmFtcywgZnVuY3Rpb24odmFsdWUsIGtleSkgeworICAg
ICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm47Cisg
ICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkgeworICAgICAgICAgIGZvckVhY2godmFsdWUsIGZ1
bmN0aW9uKHYsIGspIHsKKyAgICAgICAgICAgIHBhcnRzLnB1c2goZW5jb2RlVXJpUXVlcnkoa2V5
KSAgKyAnPScgKyBlbmNvZGVVcmlRdWVyeShzZXJpYWxpemVWYWx1ZSh2KSkpOworICAgICAgICAg
IH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHBhcnRzLnB1c2goZW5jb2RlVXJpUXVl
cnkoa2V5KSArICc9JyArIGVuY29kZVVyaVF1ZXJ5KHNlcmlhbGl6ZVZhbHVlKHZhbHVlKSkpOwor
ICAgICAgICB9CisgICAgICB9KTsKKworICAgICAgcmV0dXJuIHBhcnRzLmpvaW4oJyYnKTsKKyAg
ICB9OworICB9OworfQorCitmdW5jdGlvbiAkSHR0cFBhcmFtU2VyaWFsaXplckpRTGlrZVByb3Zp
ZGVyKCkgeworICAvKioKKyAgICogQG5nZG9jIHNlcnZpY2UKKyAgICogQG5hbWUgJGh0dHBQYXJh
bVNlcmlhbGl6ZXJKUUxpa2UKKyAgICogQGRlc2NyaXB0aW9uCisgICAqCisgICAqIEFsdGVybmF0
aXZlIHtAbGluayAkaHR0cCBgJGh0dHBgfSBwYXJhbXMgc2VyaWFsaXplciB0aGF0IGZvbGxvd3MK
KyAgICogalF1ZXJ5J3MgW2BwYXJhbSgpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL2pxdWVyeS5w
YXJhbS8pIG1ldGhvZCBsb2dpYy4KKyAgICogVGhlIHNlcmlhbGl6ZXIgd2lsbCBhbHNvIHNvcnQg
dGhlIHBhcmFtcyBhbHBoYWJldGljYWxseS4KKyAgICoKKyAgICogVG8gdXNlIGl0IGZvciBzZXJp
YWxpemluZyBgJGh0dHBgIHJlcXVlc3QgcGFyYW1ldGVycywgc2V0IGl0IGFzIHRoZSBgcGFyYW1T
ZXJpYWxpemVyYCBwcm9wZXJ0eToKKyAgICoKKyAgICogYGBganMKKyAgICogJGh0dHAoeworICAg
KiAgIHVybDogbXlVcmwsCisgICAqICAgbWV0aG9kOiAnR0VUJywKKyAgICogICBwYXJhbXM6IG15
UGFyYW1zLAorICAgKiAgIHBhcmFtU2VyaWFsaXplcjogJyRodHRwUGFyYW1TZXJpYWxpemVySlFM
aWtlJworICAgKiB9KTsKKyAgICogYGBgCisgICAqCisgICAqIEl0IGlzIGFsc28gcG9zc2libGUg
dG8gc2V0IGl0IGFzIHRoZSBkZWZhdWx0IGBwYXJhbVNlcmlhbGl6ZXJgIGluIHRoZQorICAgKiB7
QGxpbmsgJGh0dHBQcm92aWRlciNkZWZhdWx0cyBgJGh0dHBQcm92aWRlcmB9LgorICAgKgorICAg
KiBBZGRpdGlvbmFsbHksIHlvdSBjYW4gaW5qZWN0IHRoZSBzZXJpYWxpemVyIGFuZCB1c2UgaXQg
ZXhwbGljaXRseSwgZm9yIGV4YW1wbGUgdG8gc2VyaWFsaXplCisgICAqIGZvcm0gZGF0YSBmb3Ig
c3VibWlzc2lvbjoKKyAgICoKKyAgICogYGBganMKKyAgICogLmNvbnRyb2xsZXIoZnVuY3Rpb24o
JGh0dHAsICRodHRwUGFyYW1TZXJpYWxpemVySlFMaWtlKSB7CisgICAqICAgLy8uLi4KKyAgICoK
KyAgICogICAkaHR0cCh7CisgICAqICAgICB1cmw6IG15VXJsLAorICAgKiAgICAgbWV0aG9kOiAn
UE9TVCcsCisgICAqICAgICBkYXRhOiAkaHR0cFBhcmFtU2VyaWFsaXplckpRTGlrZShteURhdGEp
LAorICAgKiAgICAgaGVhZGVyczogeworICAgKiAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxp
Y2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcKKyAgICogICAgIH0KKyAgICogICB9KTsKKyAg
ICoKKyAgICogfSk7CisgICAqIGBgYAorICAgKgorICAgKiAqLworICB0aGlzLiRnZXQgPSBmdW5j
dGlvbigpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24galF1ZXJ5TGlrZVBhcmFtU2VyaWFsaXplcihw
YXJhbXMpIHsKKyAgICAgIGlmICghcGFyYW1zKSByZXR1cm4gJyc7CisgICAgICB2YXIgcGFydHMg
PSBbXTsKKyAgICAgIHNlcmlhbGl6ZShwYXJhbXMsICcnLCB0cnVlKTsKKyAgICAgIHJldHVybiBw
YXJ0cy5qb2luKCcmJyk7CisKKyAgICAgIGZ1bmN0aW9uIHNlcmlhbGl6ZSh0b1NlcmlhbGl6ZSwg
cHJlZml4LCB0b3BMZXZlbCkgeworICAgICAgICBpZiAodG9TZXJpYWxpemUgPT09IG51bGwgfHwg
aXNVbmRlZmluZWQodG9TZXJpYWxpemUpKSByZXR1cm47CisgICAgICAgIGlmIChpc0FycmF5KHRv
U2VyaWFsaXplKSkgeworICAgICAgICAgIGZvckVhY2godG9TZXJpYWxpemUsIGZ1bmN0aW9uKHZh
bHVlKSB7CisgICAgICAgICAgICBzZXJpYWxpemUodmFsdWUsIHByZWZpeCArICdbXScpOworICAg
ICAgICAgIH0pOworICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHRvU2VyaWFsaXplKSAmJiAh
aXNEYXRlKHRvU2VyaWFsaXplKSkgeworICAgICAgICAgIGZvckVhY2hTb3J0ZWQodG9TZXJpYWxp
emUsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHsKKyAgICAgICAgICAgIHNlcmlhbGl6ZSh2YWx1ZSwg
cHJlZml4ICsKKyAgICAgICAgICAgICAgICAodG9wTGV2ZWwgPyAnJyA6ICdbJykgKworICAgICAg
ICAgICAgICAgIGtleSArCisgICAgICAgICAgICAgICAgKHRvcExldmVsID8gJycgOiAnXScpKTsK
KyAgICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBwYXJ0cy5wdXNoKGVu
Y29kZVVyaVF1ZXJ5KHByZWZpeCkgKyAnPScgKyBlbmNvZGVVcmlRdWVyeShzZXJpYWxpemVWYWx1
ZSh0b1NlcmlhbGl6ZSkpKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH07CisgIH07Cit9CisK
K2Z1bmN0aW9uIGRlZmF1bHRIdHRwUmVzcG9uc2VUcmFuc2Zvcm0oZGF0YSwgaGVhZGVycykgewor
ICBpZiAoaXNTdHJpbmcoZGF0YSkpIHsKKyAgICAvLyBTdHJpcCBqc29uIHZ1bG5lcmFiaWxpdHkg
cHJvdGVjdGlvbiBwcmVmaXggYW5kIHRyaW0gd2hpdGVzcGFjZQorICAgIHZhciB0ZW1wRGF0YSA9
IGRhdGEucmVwbGFjZShKU09OX1BST1RFQ1RJT05fUFJFRklYLCAnJykudHJpbSgpOworCisgICAg
aWYgKHRlbXBEYXRhKSB7CisgICAgICB2YXIgY29udGVudFR5cGUgPSBoZWFkZXJzKCdDb250ZW50
LVR5cGUnKTsKKyAgICAgIGlmICgoY29udGVudFR5cGUgJiYgKGNvbnRlbnRUeXBlLmluZGV4T2Yo
QVBQTElDQVRJT05fSlNPTikgPT09IDApKSB8fCBpc0pzb25MaWtlKHRlbXBEYXRhKSkgeworICAg
ICAgICBkYXRhID0gZnJvbUpzb24odGVtcERhdGEpOworICAgICAgfQorICAgIH0KKyAgfQorCisg
IHJldHVybiBkYXRhOworfQorCitmdW5jdGlvbiBpc0pzb25MaWtlKHN0cikgeworICAgIHZhciBq
c29uU3RhcnQgPSBzdHIubWF0Y2goSlNPTl9TVEFSVCk7CisgICAgcmV0dXJuIGpzb25TdGFydCAm
JiBKU09OX0VORFNbanNvblN0YXJ0WzBdXS50ZXN0KHN0cik7Cit9CisKKy8qKgorICogUGFyc2Ug
aGVhZGVycyBpbnRvIGtleSB2YWx1ZSBvYmplY3QKKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gaGVh
ZGVycyBSYXcgaGVhZGVycyBhcyBhIHN0cmluZworICogQHJldHVybnMge09iamVjdH0gUGFyc2Vk
IGhlYWRlcnMgYXMga2V5IHZhbHVlIG9iamVjdAorICovCitmdW5jdGlvbiBwYXJzZUhlYWRlcnMo
aGVhZGVycykgeworICB2YXIgcGFyc2VkID0gY3JlYXRlTWFwKCksIGk7CisKKyAgZnVuY3Rpb24g
ZmlsbEluUGFyc2VkKGtleSwgdmFsKSB7CisgICAgaWYgKGtleSkgeworICAgICAgcGFyc2VkW2tl
eV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDsKKyAgICB9
CisgIH0KKworICBpZiAoaXNTdHJpbmcoaGVhZGVycykpIHsKKyAgICBmb3JFYWNoKGhlYWRlcnMu
c3BsaXQoJ1xuJyksIGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAgIGkgPSBsaW5lLmluZGV4T2YoJzon
KTsKKyAgICAgIGZpbGxJblBhcnNlZChsb3dlcmNhc2UodHJpbShsaW5lLnN1YnN0cigwLCBpKSkp
LCB0cmltKGxpbmUuc3Vic3RyKGkgKyAxKSkpOworICAgIH0pOworICB9IGVsc2UgaWYgKGlzT2Jq
ZWN0KGhlYWRlcnMpKSB7CisgICAgZm9yRWFjaChoZWFkZXJzLCBmdW5jdGlvbihoZWFkZXJWYWws
IGhlYWRlcktleSkgeworICAgICAgZmlsbEluUGFyc2VkKGxvd2VyY2FzZShoZWFkZXJLZXkpLCB0
cmltKGhlYWRlclZhbCkpOworICAgIH0pOworICB9CisKKyAgcmV0dXJuIHBhcnNlZDsKK30KKwor
CisvKioKKyAqIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHByb3ZpZGVzIGFjY2VzcyB0byBwYXJz
ZWQgaGVhZGVycy4KKyAqCisgKiBIZWFkZXJzIGFyZSBsYXp5IHBhcnNlZCB3aGVuIGZpcnN0IHJl
cXVlc3RlZC4KKyAqIEBzZWUgcGFyc2VIZWFkZXJzCisgKgorICogQHBhcmFtIHsoc3RyaW5nfE9i
amVjdCl9IGhlYWRlcnMgSGVhZGVycyB0byBwcm92aWRlIGFjY2VzcyB0by4KKyAqIEByZXR1cm5z
IHtmdW5jdGlvbihzdHJpbmc9KX0gUmV0dXJucyBhIGdldHRlciBmdW5jdGlvbiB3aGljaCBpZiBj
YWxsZWQgd2l0aDoKKyAqCisgKiAgIC0gaWYgY2FsbGVkIHdpdGggc2luZ2xlIGFuIGFyZ3VtZW50
IHJldHVybnMgYSBzaW5nbGUgaGVhZGVyIHZhbHVlIG9yIG51bGwKKyAqICAgLSBpZiBjYWxsZWQg
d2l0aCBubyBhcmd1bWVudHMgcmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgaGVhZGVy
cy4KKyAqLworZnVuY3Rpb24gaGVhZGVyc0dldHRlcihoZWFkZXJzKSB7CisgIHZhciBoZWFkZXJz
T2JqOworCisgIHJldHVybiBmdW5jdGlvbihuYW1lKSB7CisgICAgaWYgKCFoZWFkZXJzT2JqKSBo
ZWFkZXJzT2JqID0gIHBhcnNlSGVhZGVycyhoZWFkZXJzKTsKKworICAgIGlmIChuYW1lKSB7Cisg
ICAgICB2YXIgdmFsdWUgPSBoZWFkZXJzT2JqW2xvd2VyY2FzZShuYW1lKV07CisgICAgICBpZiAo
dmFsdWUgPT09IHZvaWQgMCkgeworICAgICAgICB2YWx1ZSA9IG51bGw7CisgICAgICB9CisgICAg
ICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgcmV0dXJuIGhlYWRlcnNPYmo7CisgIH07Cit9
CisKKworLyoqCisgKiBDaGFpbiBhbGwgZ2l2ZW4gZnVuY3Rpb25zCisgKgorICogVGhpcyBmdW5j
dGlvbiBpcyB1c2VkIGZvciBib3RoIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHRyYW5zZm9ybWluZwor
ICoKKyAqIEBwYXJhbSB7Kn0gZGF0YSBEYXRhIHRvIHRyYW5zZm9ybS4KKyAqIEBwYXJhbSB7ZnVu
Y3Rpb24oc3RyaW5nPSl9IGhlYWRlcnMgSFRUUCBoZWFkZXJzIGdldHRlciBmbi4KKyAqIEBwYXJh
bSB7bnVtYmVyfSBzdGF0dXMgSFRUUCBzdGF0dXMgY29kZSBvZiB0aGUgcmVzcG9uc2UuCisgKiBA
cGFyYW0geyhGdW5jdGlvbnxBcnJheS48RnVuY3Rpb24+KX0gZm5zIEZ1bmN0aW9uIG9yIGFuIGFy
cmF5IG9mIGZ1bmN0aW9ucy4KKyAqIEByZXR1cm5zIHsqfSBUcmFuc2Zvcm1lZCBkYXRhLgorICov
CitmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGRhdGEsIGhlYWRlcnMsIHN0YXR1cywgZm5zKSB7Cisg
IGlmIChpc0Z1bmN0aW9uKGZucykpIHsKKyAgICByZXR1cm4gZm5zKGRhdGEsIGhlYWRlcnMsIHN0
YXR1cyk7CisgIH0KKworICBmb3JFYWNoKGZucywgZnVuY3Rpb24oZm4pIHsKKyAgICBkYXRhID0g
Zm4oZGF0YSwgaGVhZGVycywgc3RhdHVzKTsKKyAgfSk7CisKKyAgcmV0dXJuIGRhdGE7Cit9CisK
KworZnVuY3Rpb24gaXNTdWNjZXNzKHN0YXR1cykgeworICByZXR1cm4gMjAwIDw9IHN0YXR1cyAm
JiBzdGF0dXMgPCAzMDA7Cit9CisKKworLyoqCisgKiBAbmdkb2MgcHJvdmlkZXIKKyAqIEBuYW1l
ICRodHRwUHJvdmlkZXIKKyAqIEBkZXNjcmlwdGlvbgorICogVXNlIGAkaHR0cFByb3ZpZGVyYCB0
byBjaGFuZ2UgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlIHtAbGluayBuZy4kaHR0cCAkaHR0
cH0gc2VydmljZS4KKyAqICovCitmdW5jdGlvbiAkSHR0cFByb3ZpZGVyKCkgeworICAvKioKKyAg
ICogQG5nZG9jIHByb3BlcnR5CisgICAqIEBuYW1lICRodHRwUHJvdmlkZXIjZGVmYXVsdHMKKyAg
ICogQGRlc2NyaXB0aW9uCisgICAqCisgICAqIE9iamVjdCBjb250YWluaW5nIGRlZmF1bHQgdmFs
dWVzIGZvciBhbGwge0BsaW5rIG5nLiRodHRwICRodHRwfSByZXF1ZXN0cy4KKyAgICoKKyAgICog
LSAqKmBkZWZhdWx0cy5jYWNoZWAqKiAtIHtPYmplY3R9IC0gYW4gb2JqZWN0IGJ1aWx0IHdpdGgg
e0BsaW5rIG5nLiRjYWNoZUZhY3RvcnkgYCRjYWNoZUZhY3RvcnlgfQorICAgKiB0aGF0IHdpbGwg
cHJvdmlkZSB0aGUgY2FjaGUgZm9yIGFsbCByZXF1ZXN0cyB3aG8gc2V0IHRoZWlyIGBjYWNoZWAg
cHJvcGVydHkgdG8gYHRydWVgLgorICAgKiBJZiB5b3Ugc2V0IHRoZSBgZGVmYXVsdHMuY2FjaGUg
PSBmYWxzZWAgdGhlbiBvbmx5IHJlcXVlc3RzIHRoYXQgc3BlY2lmeSB0aGVpciBvd24gY3VzdG9t
CisgICAqIGNhY2hlIG9iamVjdCB3aWxsIGJlIGNhY2hlZC4gU2VlIHtAbGluayAkaHR0cCNjYWNo
aW5nICRodHRwIENhY2hpbmd9IGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgKgorICAgKiAtICoq
YGRlZmF1bHRzLnhzcmZDb29raWVOYW1lYCoqIC0ge3N0cmluZ30gLSBOYW1lIG9mIGNvb2tpZSBj
b250YWluaW5nIHRoZSBYU1JGIHRva2VuLgorICAgKiBEZWZhdWx0cyB2YWx1ZSBpcyBgJ1hTUkYt
VE9LRU4nYC4KKyAgICoKKyAgICogLSAqKmBkZWZhdWx0cy54c3JmSGVhZGVyTmFtZWAqKiAtIHtz
dHJpbmd9IC0gTmFtZSBvZiBIVFRQIGhlYWRlciB0byBwb3B1bGF0ZSB3aXRoIHRoZQorICAgKiBY
U1JGIHRva2VuLiBEZWZhdWx0cyB2YWx1ZSBpcyBgJ1gtWFNSRi1UT0tFTidgLgorICAgKgorICAg
KiAtICoqYGRlZmF1bHRzLmhlYWRlcnNgKiogLSB7T2JqZWN0fSAtIERlZmF1bHQgaGVhZGVycyBm
b3IgYWxsICRodHRwIHJlcXVlc3RzLgorICAgKiBSZWZlciB0byB7QGxpbmsgbmcuJGh0dHAjc2V0
dGluZy1odHRwLWhlYWRlcnMgJGh0dHB9IGZvciBkb2N1bWVudGF0aW9uIG9uCisgICAqIHNldHRp
bmcgZGVmYXVsdCBoZWFkZXJzLgorICAgKiAgICAgLSAqKmBkZWZhdWx0cy5oZWFkZXJzLmNvbW1v
bmAqKgorICAgKiAgICAgLSAqKmBkZWZhdWx0cy5oZWFkZXJzLnBvc3RgKioKKyAgICogICAgIC0g
KipgZGVmYXVsdHMuaGVhZGVycy5wdXRgKioKKyAgICogICAgIC0gKipgZGVmYXVsdHMuaGVhZGVy
cy5wYXRjaGAqKgorICAgKgorICAgKgorICAgKiAtICoqYGRlZmF1bHRzLnBhcmFtU2VyaWFsaXpl
cmAqKiAtIGB7c3RyaW5nfGZ1bmN0aW9uKE9iamVjdDxzdHJpbmcsc3RyaW5nPik6c3RyaW5nfWAg
LSBBIGZ1bmN0aW9uCisgICAqICB1c2VkIHRvIHRoZSBwcmVwYXJlIHN0cmluZyByZXByZXNlbnRh
dGlvbiBvZiByZXF1ZXN0IHBhcmFtZXRlcnMgKHNwZWNpZmllZCBhcyBhbiBvYmplY3QpLgorICAg
KiAgSWYgc3BlY2lmaWVkIGFzIHN0cmluZywgaXQgaXMgaW50ZXJwcmV0ZWQgYXMgYSBmdW5jdGlv
biByZWdpc3RlcmVkIHdpdGggdGhlIHtAbGluayBhdXRvLiRpbmplY3RvciAkaW5qZWN0b3J9Lgor
ICAgKiAgRGVmYXVsdHMgdG8ge0BsaW5rIG5nLiRodHRwUGFyYW1TZXJpYWxpemVyICRodHRwUGFy
YW1TZXJpYWxpemVyfS4KKyAgICoKKyAgICoqLworICB2YXIgZGVmYXVsdHMgPSB0aGlzLmRlZmF1
bHRzID0geworICAgIC8vIHRyYW5zZm9ybSBpbmNvbWluZyByZXNwb25zZSBkYXRhCisgICAgdHJh
bnNmb3JtUmVzcG9uc2U6IFtkZWZhdWx0SHR0cFJlc3BvbnNlVHJhbnNmb3JtXSwKKworICAgIC8v
IHRyYW5zZm9ybSBvdXRnb2luZyByZXF1ZXN0IGRhdGEKKyAgICB0cmFuc2Zvcm1SZXF1ZXN0OiBb
ZnVuY3Rpb24oZCkgeworICAgICAgcmV0dXJuIGlzT2JqZWN0KGQpICYmICFpc0ZpbGUoZCkgJiYg
IWlzQmxvYihkKSAmJiAhaXNGb3JtRGF0YShkKSA/IHRvSnNvbihkKSA6IGQ7CisgICAgfV0sCisK
KyAgICAvLyBkZWZhdWx0IGhlYWRlcnMKKyAgICBoZWFkZXJzOiB7CisgICAgICBjb21tb246IHsK
KyAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonCisg
ICAgICB9LAorICAgICAgcG9zdDogICBzaGFsbG93Q29weShDT05URU5UX1RZUEVfQVBQTElDQVRJ
T05fSlNPTiksCisgICAgICBwdXQ6ICAgIHNoYWxsb3dDb3B5KENPTlRFTlRfVFlQRV9BUFBMSUNB
VElPTl9KU09OKSwKKyAgICAgIHBhdGNoOiAgc2hhbGxvd0NvcHkoQ09OVEVOVF9UWVBFX0FQUExJ
Q0FUSU9OX0pTT04pCisgICAgfSwKKworICAgIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTics
CisgICAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLAorCisgICAgcGFyYW1TZXJpYWxp
emVyOiAnJGh0dHBQYXJhbVNlcmlhbGl6ZXInCisgIH07CisKKyAgdmFyIHVzZUFwcGx5QXN5bmMg
PSBmYWxzZTsKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgJGh0dHBQcm92
aWRlciN1c2VBcHBseUFzeW5jCisgICAqIEBkZXNjcmlwdGlvbgorICAgKgorICAgKiBDb25maWd1
cmUgJGh0dHAgc2VydmljZSB0byBjb21iaW5lIHByb2Nlc3Npbmcgb2YgbXVsdGlwbGUgaHR0cCBy
ZXNwb25zZXMgcmVjZWl2ZWQgYXQgYXJvdW5kCisgICAqIHRoZSBzYW1lIHRpbWUgdmlhIHtAbGlu
ayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRhcHBseUFzeW5jICRyb290U2NvcGUuJGFwcGx5QXN5bmN9
LiBUaGlzIGNhbiByZXN1bHQgaW4KKyAgICogc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wcm92
ZW1lbnQgZm9yIGJpZ2dlciBhcHBsaWNhdGlvbnMgdGhhdCBtYWtlIG1hbnkgSFRUUCByZXF1ZXN0
cworICAgKiBjb25jdXJyZW50bHkgKGNvbW1vbiBkdXJpbmcgYXBwbGljYXRpb24gYm9vdHN0cmFw
KS4KKyAgICoKKyAgICogRGVmYXVsdHMgdG8gZmFsc2UuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmll
ZCwgcmV0dXJucyB0aGUgY3VycmVudCBjb25maWd1cmVkIHZhbHVlLgorICAgKgorICAgKiBAcGFy
YW0ge2Jvb2xlYW49fSB2YWx1ZSBJZiB0cnVlLCB3aGVuIHJlcXVlc3RzIGFyZSBsb2FkZWQsIHRo
ZXkgd2lsbCBzY2hlZHVsZSBhIGRlZmVycmVkCisgICAqICAgICJhcHBseSIgb24gdGhlIG5leHQg
dGljaywgZ2l2aW5nIHRpbWUgZm9yIHN1YnNlcXVlbnQgcmVxdWVzdHMgaW4gYSByb3VnaGx5IH4x
MG1zIHdpbmRvdworICAgKiAgICB0byBsb2FkIGFuZCBzaGFyZSB0aGUgc2FtZSBkaWdlc3QgY3lj
bGUuCisgICAqCisgICAqIEByZXR1cm5zIHtib29sZWFufE9iamVjdH0gSWYgYSB2YWx1ZSBpcyBz
cGVjaWZpZWQsIHJldHVybnMgdGhlICRodHRwUHJvdmlkZXIgZm9yIGNoYWluaW5nLgorICAgKiAg
ICBvdGhlcndpc2UsIHJldHVybnMgdGhlIGN1cnJlbnQgY29uZmlndXJlZCB2YWx1ZS4KKyAgICoq
LworICB0aGlzLnVzZUFwcGx5QXN5bmMgPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIGlmIChpc0Rl
ZmluZWQodmFsdWUpKSB7CisgICAgICB1c2VBcHBseUFzeW5jID0gISF2YWx1ZTsKKyAgICAgIHJl
dHVybiB0aGlzOworICAgIH0KKyAgICByZXR1cm4gdXNlQXBwbHlBc3luYzsKKyAgfTsKKworICAv
KioKKyAgICogQG5nZG9jIHByb3BlcnR5CisgICAqIEBuYW1lICRodHRwUHJvdmlkZXIjaW50ZXJj
ZXB0b3JzCisgICAqIEBkZXNjcmlwdGlvbgorICAgKgorICAgKiBBcnJheSBjb250YWluaW5nIHNl
cnZpY2UgZmFjdG9yaWVzIGZvciBhbGwgc3luY2hyb25vdXMgb3IgYXN5bmNocm9ub3VzIHtAbGlu
ayBuZy4kaHR0cCAkaHR0cH0KKyAgICogcHJlLXByb2Nlc3Npbmcgb2YgcmVxdWVzdCBvciBwb3N0
cHJvY2Vzc2luZyBvZiByZXNwb25zZXMuCisgICAqCisgICAqIFRoZXNlIHNlcnZpY2UgZmFjdG9y
aWVzIGFyZSBvcmRlcmVkIGJ5IHJlcXVlc3QsIGkuZS4gdGhleSBhcmUgYXBwbGllZCBpbiB0aGUg
c2FtZSBvcmRlciBhcyB0aGUKKyAgICogYXJyYXksIG9uIHJlcXVlc3QsIGJ1dCByZXZlcnNlIG9y
ZGVyLCBvbiByZXNwb25zZS4KKyAgICoKKyAgICoge0BsaW5rIG5nLiRodHRwI2ludGVyY2VwdG9y
cyBJbnRlcmNlcHRvcnMgZGV0YWlsZWQgaW5mb30KKyAgICoqLworICB2YXIgaW50ZXJjZXB0b3JG
YWN0b3JpZXMgPSB0aGlzLmludGVyY2VwdG9ycyA9IFtdOworCisgIHRoaXMuJGdldCA9IFsnJGh0
dHBCYWNrZW5kJywgJyQkY29va2llUmVhZGVyJywgJyRjYWNoZUZhY3RvcnknLCAnJHJvb3RTY29w
ZScsICckcScsICckaW5qZWN0b3InLAorICAgICAgZnVuY3Rpb24oJGh0dHBCYWNrZW5kLCAkJGNv
b2tpZVJlYWRlciwgJGNhY2hlRmFjdG9yeSwgJHJvb3RTY29wZSwgJHEsICRpbmplY3Rvcikgewor
CisgICAgdmFyIGRlZmF1bHRDYWNoZSA9ICRjYWNoZUZhY3RvcnkoJyRodHRwJyk7CisKKyAgICAv
KioKKyAgICAgKiBNYWtlIHN1cmUgdGhhdCBkZWZhdWx0IHBhcmFtIHNlcmlhbGl6ZXIgaXMgZXhw
b3NlZCBhcyBhIGZ1bmN0aW9uCisgICAgICovCisgICAgZGVmYXVsdHMucGFyYW1TZXJpYWxpemVy
ID0gaXNTdHJpbmcoZGVmYXVsdHMucGFyYW1TZXJpYWxpemVyKSA/CisgICAgICAkaW5qZWN0b3Iu
Z2V0KGRlZmF1bHRzLnBhcmFtU2VyaWFsaXplcikgOiBkZWZhdWx0cy5wYXJhbVNlcmlhbGl6ZXI7
CisKKyAgICAvKioKKyAgICAgKiBJbnRlcmNlcHRvcnMgc3RvcmVkIGluIHJldmVyc2Ugb3JkZXIu
IElubmVyIGludGVyY2VwdG9ycyBiZWZvcmUgb3V0ZXIgaW50ZXJjZXB0b3JzLgorICAgICAqIFRo
ZSByZXZlcnNhbCBpcyBuZWVkZWQgc28gdGhhdCB3ZSBjYW4gYnVpbGQgdXAgdGhlIGludGVyY2Vw
dGlvbiBjaGFpbiBhcm91bmQgdGhlCisgICAgICogc2VydmVyIHJlcXVlc3QuCisgICAgICovCisg
ICAgdmFyIHJldmVyc2VkSW50ZXJjZXB0b3JzID0gW107CisKKyAgICBmb3JFYWNoKGludGVyY2Vw
dG9yRmFjdG9yaWVzLCBmdW5jdGlvbihpbnRlcmNlcHRvckZhY3RvcnkpIHsKKyAgICAgIHJldmVy
c2VkSW50ZXJjZXB0b3JzLnVuc2hpZnQoaXNTdHJpbmcoaW50ZXJjZXB0b3JGYWN0b3J5KQorICAg
ICAgICAgID8gJGluamVjdG9yLmdldChpbnRlcmNlcHRvckZhY3RvcnkpIDogJGluamVjdG9yLmlu
dm9rZShpbnRlcmNlcHRvckZhY3RvcnkpKTsKKyAgICB9KTsKKworICAgIC8qKgorICAgICAqIEBu
Z2RvYyBzZXJ2aWNlCisgICAgICogQGtpbmQgZnVuY3Rpb24KKyAgICAgKiBAbmFtZSAkaHR0cAor
ICAgICAqIEByZXF1aXJlcyBuZy4kaHR0cEJhY2tlbmQKKyAgICAgKiBAcmVxdWlyZXMgJGNhY2hl
RmFjdG9yeQorICAgICAqIEByZXF1aXJlcyAkcm9vdFNjb3BlCisgICAgICogQHJlcXVpcmVzICRx
CisgICAgICogQHJlcXVpcmVzICRpbmplY3RvcgorICAgICAqCisgICAgICogQGRlc2NyaXB0aW9u
CisgICAgICogVGhlIGAkaHR0cGAgc2VydmljZSBpcyBhIGNvcmUgQW5ndWxhciBzZXJ2aWNlIHRo
YXQgZmFjaWxpdGF0ZXMgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSByZW1vdGUKKyAgICAgKiBIVFRQ
IHNlcnZlcnMgdmlhIHRoZSBicm93c2VyJ3MgW1hNTEh0dHBSZXF1ZXN0XShodHRwczovL2RldmVs
b3Blci5tb3ppbGxhLm9yZy9lbi94bWxodHRwcmVxdWVzdCkKKyAgICAgKiBvYmplY3Qgb3Igdmlh
IFtKU09OUF0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9KU09OUCkuCisgICAgICoKKyAg
ICAgKiBGb3IgdW5pdCB0ZXN0aW5nIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSBgJGh0dHBgIHNlcnZp
Y2UsIHNlZQorICAgICAqIHtAbGluayBuZ01vY2suJGh0dHBCYWNrZW5kICRodHRwQmFja2VuZCBt
b2NrfS4KKyAgICAgKgorICAgICAqIEZvciBhIGhpZ2hlciBsZXZlbCBvZiBhYnN0cmFjdGlvbiwg
cGxlYXNlIGNoZWNrIG91dCB0aGUge0BsaW5rIG5nUmVzb3VyY2UuJHJlc291cmNlCisgICAgICog
JHJlc291cmNlfSBzZXJ2aWNlLgorICAgICAqCisgICAgICogVGhlICRodHRwIEFQSSBpcyBiYXNl
ZCBvbiB0aGUge0BsaW5rIG5nLiRxIGRlZmVycmVkL3Byb21pc2UgQVBJc30gZXhwb3NlZCBieQor
ICAgICAqIHRoZSAkcSBzZXJ2aWNlLiBXaGlsZSBmb3Igc2ltcGxlIHVzYWdlIHBhdHRlcm5zIHRo
aXMgZG9lc24ndCBtYXR0ZXIgbXVjaCwgZm9yIGFkdmFuY2VkIHVzYWdlCisgICAgICogaXQgaXMg
aW1wb3J0YW50IHRvIGZhbWlsaWFyaXplIHlvdXJzZWxmIHdpdGggdGhlc2UgQVBJcyBhbmQgdGhl
IGd1YXJhbnRlZXMgdGhleSBwcm92aWRlLgorICAgICAqCisgICAgICoKKyAgICAgKiAjIyBHZW5l
cmFsIHVzYWdlCisgICAgICogVGhlIGAkaHR0cGAgc2VydmljZSBpcyBhIGZ1bmN0aW9uIHdoaWNo
IHRha2VzIGEgc2luZ2xlIGFyZ3VtZW50IOKAlCBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0IOKAlAor
ICAgICAqIHRoYXQgaXMgdXNlZCB0byBnZW5lcmF0ZSBhbiBIVFRQIHJlcXVlc3QgYW5kIHJldHVy
bnMgIGEge0BsaW5rIG5nLiRxIHByb21pc2V9CisgICAgICogd2l0aCB0d28gJGh0dHAgc3BlY2lm
aWMgbWV0aG9kczogYHN1Y2Nlc3NgIGFuZCBgZXJyb3JgLgorICAgICAqCisgICAgICogYGBganMK
KyAgICAgKiAgIC8vIFNpbXBsZSBHRVQgcmVxdWVzdCBleGFtcGxlIDoKKyAgICAgKiAgICRodHRw
LmdldCgnL3NvbWVVcmwnKS4KKyAgICAgKiAgICAgc3VjY2VzcyhmdW5jdGlvbihkYXRhLCBzdGF0
dXMsIGhlYWRlcnMsIGNvbmZpZykgeworICAgICAqICAgICAgIC8vIHRoaXMgY2FsbGJhY2sgd2ls
bCBiZSBjYWxsZWQgYXN5bmNocm9ub3VzbHkKKyAgICAgKiAgICAgICAvLyB3aGVuIHRoZSByZXNw
b25zZSBpcyBhdmFpbGFibGUKKyAgICAgKiAgICAgfSkuCisgICAgICogICAgIGVycm9yKGZ1bmN0
aW9uKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7CisgICAgICogICAgICAgLy8gY2Fs
bGVkIGFzeW5jaHJvbm91c2x5IGlmIGFuIGVycm9yIG9jY3VycworICAgICAqICAgICAgIC8vIG9y
IHNlcnZlciByZXR1cm5zIHJlc3BvbnNlIHdpdGggYW4gZXJyb3Igc3RhdHVzLgorICAgICAqICAg
ICB9KTsKKyAgICAgKiBgYGAKKyAgICAgKgorICAgICAqIGBgYGpzCisgICAgICogICAvLyBTaW1w
bGUgUE9TVCByZXF1ZXN0IGV4YW1wbGUgKHBhc3NpbmcgZGF0YSkgOgorICAgICAqICAgJGh0dHAu
cG9zdCgnL3NvbWVVcmwnLCB7bXNnOidoZWxsbyB3b3JkISd9KS4KKyAgICAgKiAgICAgc3VjY2Vz
cyhmdW5jdGlvbihkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykgeworICAgICAqICAgICAg
IC8vIHRoaXMgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgYXN5bmNocm9ub3VzbHkKKyAgICAgKiAg
ICAgICAvLyB3aGVuIHRoZSByZXNwb25zZSBpcyBhdmFpbGFibGUKKyAgICAgKiAgICAgfSkuCisg
ICAgICogICAgIGVycm9yKGZ1bmN0aW9uKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7
CisgICAgICogICAgICAgLy8gY2FsbGVkIGFzeW5jaHJvbm91c2x5IGlmIGFuIGVycm9yIG9jY3Vy
cworICAgICAqICAgICAgIC8vIG9yIHNlcnZlciByZXR1cm5zIHJlc3BvbnNlIHdpdGggYW4gZXJy
b3Igc3RhdHVzLgorICAgICAqICAgICB9KTsKKyAgICAgKiBgYGAKKyAgICAgKgorICAgICAqCisg
ICAgICogU2luY2UgdGhlIHJldHVybmVkIHZhbHVlIG9mIGNhbGxpbmcgdGhlICRodHRwIGZ1bmN0
aW9uIGlzIGEgYHByb21pc2VgLCB5b3UgY2FuIGFsc28gdXNlCisgICAgICogdGhlIGB0aGVuYCBt
ZXRob2QgdG8gcmVnaXN0ZXIgY2FsbGJhY2tzLCBhbmQgdGhlc2UgY2FsbGJhY2tzIHdpbGwgcmVj
ZWl2ZSBhIHNpbmdsZSBhcmd1bWVudCDigJMKKyAgICAgKiBhbiBvYmplY3QgcmVwcmVzZW50aW5n
IHRoZSByZXNwb25zZS4gU2VlIHRoZSBBUEkgc2lnbmF0dXJlIGFuZCB0eXBlIGluZm8gYmVsb3cg
Zm9yIG1vcmUKKyAgICAgKiBkZXRhaWxzLgorICAgICAqCisgICAgICogQSByZXNwb25zZSBzdGF0
dXMgY29kZSBiZXR3ZWVuIDIwMCBhbmQgMjk5IGlzIGNvbnNpZGVyZWQgYSBzdWNjZXNzIHN0YXR1
cyBhbmQKKyAgICAgKiB3aWxsIHJlc3VsdCBpbiB0aGUgc3VjY2VzcyBjYWxsYmFjayBiZWluZyBj
YWxsZWQuIE5vdGUgdGhhdCBpZiB0aGUgcmVzcG9uc2UgaXMgYSByZWRpcmVjdCwKKyAgICAgKiBY
TUxIdHRwUmVxdWVzdCB3aWxsIHRyYW5zcGFyZW50bHkgZm9sbG93IGl0LCBtZWFuaW5nIHRoYXQg
dGhlIGVycm9yIGNhbGxiYWNrIHdpbGwgbm90IGJlCisgICAgICogY2FsbGVkIGZvciBzdWNoIHJl
c3BvbnNlcy4KKyAgICAgKgorICAgICAqICMjIFdyaXRpbmcgVW5pdCBUZXN0cyB0aGF0IHVzZSAk
aHR0cAorICAgICAqIFdoZW4gdW5pdCB0ZXN0aW5nICh1c2luZyB7QGxpbmsgbmdNb2NrIG5nTW9j
a30pLCBpdCBpcyBuZWNlc3NhcnkgdG8gY2FsbAorICAgICAqIHtAbGluayBuZ01vY2suJGh0dHBC
YWNrZW5kI2ZsdXNoICRodHRwQmFja2VuZC5mbHVzaCgpfSB0byBmbHVzaCBlYWNoIHBlbmRpbmcK
KyAgICAgKiByZXF1ZXN0IHVzaW5nIHRyYWluZWQgcmVzcG9uc2VzLgorICAgICAqCisgICAgICog
YGBgCisgICAgICogJGh0dHBCYWNrZW5kLmV4cGVjdEdFVCguLi4pOworICAgICAqICRodHRwLmdl
dCguLi4pOworICAgICAqICRodHRwQmFja2VuZC5mbHVzaCgpOworICAgICAqIGBgYAorICAgICAq
CisgICAgICogIyMgU2hvcnRjdXQgbWV0aG9kcworICAgICAqCisgICAgICogU2hvcnRjdXQgbWV0
aG9kcyBhcmUgYWxzbyBhdmFpbGFibGUuIEFsbCBzaG9ydGN1dCBtZXRob2RzIHJlcXVpcmUgcGFz
c2luZyBpbiB0aGUgVVJMLCBhbmQKKyAgICAgKiByZXF1ZXN0IGRhdGEgbXVzdCBiZSBwYXNzZWQg
aW4gZm9yIFBPU1QvUFVUIHJlcXVlc3RzLgorICAgICAqCisgICAgICogYGBganMKKyAgICAgKiAg
ICRodHRwLmdldCgnL3NvbWVVcmwnKS5zdWNjZXNzKHN1Y2Nlc3NDYWxsYmFjayk7CisgICAgICog
ICAkaHR0cC5wb3N0KCcvc29tZVVybCcsIGRhdGEpLnN1Y2Nlc3Moc3VjY2Vzc0NhbGxiYWNrKTsK
KyAgICAgKiBgYGAKKyAgICAgKgorICAgICAqIENvbXBsZXRlIGxpc3Qgb2Ygc2hvcnRjdXQgbWV0
aG9kczoKKyAgICAgKgorICAgICAqIC0ge0BsaW5rIG5nLiRodHRwI2dldCAkaHR0cC5nZXR9Cisg
ICAgICogLSB7QGxpbmsgbmcuJGh0dHAjaGVhZCAkaHR0cC5oZWFkfQorICAgICAqIC0ge0BsaW5r
IG5nLiRodHRwI3Bvc3QgJGh0dHAucG9zdH0KKyAgICAgKiAtIHtAbGluayBuZy4kaHR0cCNwdXQg
JGh0dHAucHV0fQorICAgICAqIC0ge0BsaW5rIG5nLiRodHRwI2RlbGV0ZSAkaHR0cC5kZWxldGV9
CisgICAgICogLSB7QGxpbmsgbmcuJGh0dHAjanNvbnAgJGh0dHAuanNvbnB9CisgICAgICogLSB7
QGxpbmsgbmcuJGh0dHAjcGF0Y2ggJGh0dHAucGF0Y2h9CisgICAgICoKKyAgICAgKgorICAgICAq
ICMjIFNldHRpbmcgSFRUUCBIZWFkZXJzCisgICAgICoKKyAgICAgKiBUaGUgJGh0dHAgc2Vydmlj
ZSB3aWxsIGF1dG9tYXRpY2FsbHkgYWRkIGNlcnRhaW4gSFRUUCBoZWFkZXJzIHRvIGFsbCByZXF1
ZXN0cy4gVGhlc2UgZGVmYXVsdHMKKyAgICAgKiBjYW4gYmUgZnVsbHkgY29uZmlndXJlZCBieSBh
Y2Nlc3NpbmcgdGhlIGAkaHR0cFByb3ZpZGVyLmRlZmF1bHRzLmhlYWRlcnNgIGNvbmZpZ3VyYXRp
b24KKyAgICAgKiBvYmplY3QsIHdoaWNoIGN1cnJlbnRseSBjb250YWlucyB0aGlzIGRlZmF1bHQg
Y29uZmlndXJhdGlvbjoKKyAgICAgKgorICAgICAqIC0gYCRodHRwUHJvdmlkZXIuZGVmYXVsdHMu
aGVhZGVycy5jb21tb25gIChoZWFkZXJzIHRoYXQgYXJlIGNvbW1vbiBmb3IgYWxsIHJlcXVlc3Rz
KToKKyAgICAgKiAgIC0gYEFjY2VwdDogYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKiAv
ICpgCisgICAgICogLSBgJGh0dHBQcm92aWRlci5kZWZhdWx0cy5oZWFkZXJzLnBvc3RgOiAoaGVh
ZGVyIGRlZmF1bHRzIGZvciBQT1NUIHJlcXVlc3RzKQorICAgICAqICAgLSBgQ29udGVudC1UeXBl
OiBhcHBsaWNhdGlvbi9qc29uYAorICAgICAqIC0gYCRodHRwUHJvdmlkZXIuZGVmYXVsdHMuaGVh
ZGVycy5wdXRgIChoZWFkZXIgZGVmYXVsdHMgZm9yIFBVVCByZXF1ZXN0cykKKyAgICAgKiAgIC0g
YENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbmAKKyAgICAgKgorICAgICAqIFRvIGFkZCBv
ciBvdmVyd3JpdGUgdGhlc2UgZGVmYXVsdHMsIHNpbXBseSBhZGQgb3IgcmVtb3ZlIGEgcHJvcGVy
dHkgZnJvbSB0aGVzZSBjb25maWd1cmF0aW9uCisgICAgICogb2JqZWN0cy4gVG8gYWRkIGhlYWRl
cnMgZm9yIGFuIEhUVFAgbWV0aG9kIG90aGVyIHRoYW4gUE9TVCBvciBQVVQsIHNpbXBseSBhZGQg
YSBuZXcgb2JqZWN0CisgICAgICogd2l0aCB0aGUgbG93ZXJjYXNlZCBIVFRQIG1ldGhvZCBuYW1l
IGFzIHRoZSBrZXksIGUuZy4KKyAgICAgKiBgJGh0dHBQcm92aWRlci5kZWZhdWx0cy5oZWFkZXJz
LmdldCA9IHsgJ015LUhlYWRlcicgOiAndmFsdWUnIH1gLgorICAgICAqCisgICAgICogVGhlIGRl
ZmF1bHRzIGNhbiBhbHNvIGJlIHNldCBhdCBydW50aW1lIHZpYSB0aGUgYCRodHRwLmRlZmF1bHRz
YCBvYmplY3QgaW4gdGhlIHNhbWUKKyAgICAgKiBmYXNoaW9uLiBGb3IgZXhhbXBsZToKKyAgICAg
KgorICAgICAqIGBgYAorICAgICAqIG1vZHVsZS5ydW4oZnVuY3Rpb24oJGh0dHApIHsKKyAgICAg
KiAgICRodHRwLmRlZmF1bHRzLmhlYWRlcnMuY29tbW9uLkF1dGhvcml6YXRpb24gPSAnQmFzaWMg
WW1WbGNEcGliMjl3JworICAgICAqIH0pOworICAgICAqIGBgYAorICAgICAqCisgICAgICogSW4g
YWRkaXRpb24sIHlvdSBjYW4gc3VwcGx5IGEgYGhlYWRlcnNgIHByb3BlcnR5IGluIHRoZSBjb25m
aWcgb2JqZWN0IHBhc3NlZCB3aGVuCisgICAgICogY2FsbGluZyBgJGh0dHAoY29uZmlnKWAsIHdo
aWNoIG92ZXJyaWRlcyB0aGUgZGVmYXVsdHMgd2l0aG91dCBjaGFuZ2luZyB0aGVtIGdsb2JhbGx5
LgorICAgICAqCisgICAgICogVG8gZXhwbGljaXRseSByZW1vdmUgYSBoZWFkZXIgYXV0b21hdGlj
YWxseSBhZGRlZCB2aWEgJGh0dHBQcm92aWRlci5kZWZhdWx0cy5oZWFkZXJzIG9uIGEgcGVyIHJl
cXVlc3QgYmFzaXMsCisgICAgICogVXNlIHRoZSBgaGVhZGVyc2AgcHJvcGVydHksIHNldHRpbmcg
dGhlIGRlc2lyZWQgaGVhZGVyIHRvIGB1bmRlZmluZWRgLiBGb3IgZXhhbXBsZToKKyAgICAgKgor
ICAgICAqIGBgYGpzCisgICAgICogdmFyIHJlcSA9IHsKKyAgICAgKiAgbWV0aG9kOiAnUE9TVCcs
CisgICAgICogIHVybDogJ2h0dHA6Ly9leGFtcGxlLmNvbScsCisgICAgICogIGhlYWRlcnM6IHsK
KyAgICAgKiAgICAnQ29udGVudC1UeXBlJzogdW5kZWZpbmVkCisgICAgICogIH0sCisgICAgICog
IGRhdGE6IHsgdGVzdDogJ3Rlc3QnIH0KKyAgICAgKiB9CisgICAgICoKKyAgICAgKiAkaHR0cChy
ZXEpLnN1Y2Nlc3MoZnVuY3Rpb24oKXsuLi59KS5lcnJvcihmdW5jdGlvbigpey4uLn0pOworICAg
ICAqIGBgYAorICAgICAqCisgICAgICogIyMgVHJhbnNmb3JtaW5nIFJlcXVlc3RzIGFuZCBSZXNw
b25zZXMKKyAgICAgKgorICAgICAqIEJvdGggcmVxdWVzdHMgYW5kIHJlc3BvbnNlcyBjYW4gYmUg
dHJhbnNmb3JtZWQgdXNpbmcgdHJhbnNmb3JtYXRpb24gZnVuY3Rpb25zOiBgdHJhbnNmb3JtUmVx
dWVzdGAKKyAgICAgKiBhbmQgYHRyYW5zZm9ybVJlc3BvbnNlYC4gVGhlc2UgcHJvcGVydGllcyBj
YW4gYmUgYSBzaW5nbGUgZnVuY3Rpb24gdGhhdCByZXR1cm5zCisgICAgICogdGhlIHRyYW5zZm9y
bWVkIHZhbHVlIChgZnVuY3Rpb24oZGF0YSwgaGVhZGVyc0dldHRlciwgc3RhdHVzKWApIG9yIGFu
IGFycmF5IG9mIHN1Y2ggdHJhbnNmb3JtYXRpb24gZnVuY3Rpb25zLAorICAgICAqIHdoaWNoIGFs
bG93cyB5b3UgdG8gYHB1c2hgIG9yIGB1bnNoaWZ0YCBhIG5ldyB0cmFuc2Zvcm1hdGlvbiBmdW5j
dGlvbiBpbnRvIHRoZSB0cmFuc2Zvcm1hdGlvbiBjaGFpbi4KKyAgICAgKgorICAgICAqICMjIyBE
ZWZhdWx0IFRyYW5zZm9ybWF0aW9ucworICAgICAqCisgICAgICogVGhlIGAkaHR0cFByb3ZpZGVy
YCBwcm92aWRlciBhbmQgYCRodHRwYCBzZXJ2aWNlIGV4cG9zZSBgZGVmYXVsdHMudHJhbnNmb3Jt
UmVxdWVzdGAgYW5kCisgICAgICogYGRlZmF1bHRzLnRyYW5zZm9ybVJlc3BvbnNlYCBwcm9wZXJ0
aWVzLiBJZiBhIHJlcXVlc3QgZG9lcyBub3QgcHJvdmlkZSBpdHMgb3duIHRyYW5zZm9ybWF0aW9u
cworICAgICAqIHRoZW4gdGhlc2Ugd2lsbCBiZSBhcHBsaWVkLgorICAgICAqCisgICAgICogWW91
IGNhbiBhdWdtZW50IG9yIHJlcGxhY2UgdGhlIGRlZmF1bHQgdHJhbnNmb3JtYXRpb25zIGJ5IG1v
ZGlmeWluZyB0aGVzZSBwcm9wZXJ0aWVzIGJ5IGFkZGluZyB0byBvcgorICAgICAqIHJlcGxhY2lu
ZyB0aGUgYXJyYXkuCisgICAgICoKKyAgICAgKiBBbmd1bGFyIHByb3ZpZGVzIHRoZSBmb2xsb3dp
bmcgZGVmYXVsdCB0cmFuc2Zvcm1hdGlvbnM6CisgICAgICoKKyAgICAgKiBSZXF1ZXN0IHRyYW5z
Zm9ybWF0aW9ucyAoYCRodHRwUHJvdmlkZXIuZGVmYXVsdHMudHJhbnNmb3JtUmVxdWVzdGAgYW5k
IGAkaHR0cC5kZWZhdWx0cy50cmFuc2Zvcm1SZXF1ZXN0YCk6CisgICAgICoKKyAgICAgKiAtIElm
IHRoZSBgZGF0YWAgcHJvcGVydHkgb2YgdGhlIHJlcXVlc3QgY29uZmlndXJhdGlvbiBvYmplY3Qg
Y29udGFpbnMgYW4gb2JqZWN0LCBzZXJpYWxpemUgaXQKKyAgICAgKiAgIGludG8gSlNPTiBmb3Jt
YXQuCisgICAgICoKKyAgICAgKiBSZXNwb25zZSB0cmFuc2Zvcm1hdGlvbnMgKGAkaHR0cFByb3Zp
ZGVyLmRlZmF1bHRzLnRyYW5zZm9ybVJlc3BvbnNlYCBhbmQgYCRodHRwLmRlZmF1bHRzLnRyYW5z
Zm9ybVJlc3BvbnNlYCk6CisgICAgICoKKyAgICAgKiAgLSBJZiBYU1JGIHByZWZpeCBpcyBkZXRl
Y3RlZCwgc3RyaXAgaXQgKHNlZSBTZWN1cml0eSBDb25zaWRlcmF0aW9ucyBzZWN0aW9uIGJlbG93
KS4KKyAgICAgKiAgLSBJZiBKU09OIHJlc3BvbnNlIGlzIGRldGVjdGVkLCBkZXNlcmlhbGl6ZSBp
dCB1c2luZyBhIEpTT04gcGFyc2VyLgorICAgICAqCisgICAgICoKKyAgICAgKiAjIyMgT3ZlcnJp
ZGluZyB0aGUgRGVmYXVsdCBUcmFuc2Zvcm1hdGlvbnMgUGVyIFJlcXVlc3QKKyAgICAgKgorICAg
ICAqIElmIHlvdSB3aXNoIG92ZXJyaWRlIHRoZSByZXF1ZXN0L3Jlc3BvbnNlIHRyYW5zZm9ybWF0
aW9ucyBvbmx5IGZvciBhIHNpbmdsZSByZXF1ZXN0IHRoZW4gcHJvdmlkZQorICAgICAqIGB0cmFu
c2Zvcm1SZXF1ZXN0YCBhbmQvb3IgYHRyYW5zZm9ybVJlc3BvbnNlYCBwcm9wZXJ0aWVzIG9uIHRo
ZSBjb25maWd1cmF0aW9uIG9iamVjdCBwYXNzZWQKKyAgICAgKiBpbnRvIGAkaHR0cGAuCisgICAg
ICoKKyAgICAgKiBOb3RlIHRoYXQgaWYgeW91IHByb3ZpZGUgdGhlc2UgcHJvcGVydGllcyBvbiB0
aGUgY29uZmlnIG9iamVjdCB0aGUgZGVmYXVsdCB0cmFuc2Zvcm1hdGlvbnMgd2lsbCBiZQorICAg
ICAqIG92ZXJ3cml0dGVuLiBJZiB5b3Ugd2lzaCB0byBhdWdtZW50IHRoZSBkZWZhdWx0IHRyYW5z
Zm9ybWF0aW9ucyB0aGVuIHlvdSBtdXN0IGluY2x1ZGUgdGhlbSBpbiB5b3VyCisgICAgICogbG9j
YWwgdHJhbnNmb3JtYXRpb24gYXJyYXkuCisgICAgICoKKyAgICAgKiBUaGUgZm9sbG93aW5nIGNv
ZGUgZGVtb25zdHJhdGVzIGFkZGluZyBhIG5ldyByZXNwb25zZSB0cmFuc2Zvcm1hdGlvbiB0byBi
ZSBydW4gYWZ0ZXIgdGhlIGRlZmF1bHQgcmVzcG9uc2UKKyAgICAgKiB0cmFuc2Zvcm1hdGlvbnMg
aGF2ZSBiZWVuIHJ1bi4KKyAgICAgKgorICAgICAqIGBgYGpzCisgICAgICogZnVuY3Rpb24gYXBw
ZW5kVHJhbnNmb3JtKGRlZmF1bHRzLCB0cmFuc2Zvcm0pIHsKKyAgICAgKgorICAgICAqICAgLy8g
V2UgY2FuJ3QgZ3VhcmFudGVlIHRoYXQgdGhlIGRlZmF1bHQgdHJhbnNmb3JtYXRpb24gaXMgYW4g
YXJyYXkKKyAgICAgKiAgIGRlZmF1bHRzID0gYW5ndWxhci5pc0FycmF5KGRlZmF1bHRzKSA/IGRl
ZmF1bHRzIDogW2RlZmF1bHRzXTsKKyAgICAgKgorICAgICAqICAgLy8gQXBwZW5kIHRoZSBuZXcg
dHJhbnNmb3JtYXRpb24gdG8gdGhlIGRlZmF1bHRzCisgICAgICogICByZXR1cm4gZGVmYXVsdHMu
Y29uY2F0KHRyYW5zZm9ybSk7CisgICAgICogfQorICAgICAqCisgICAgICogJGh0dHAoeworICAg
ICAqICAgdXJsOiAnLi4uJywKKyAgICAgKiAgIG1ldGhvZDogJ0dFVCcsCisgICAgICogICB0cmFu
c2Zvcm1SZXNwb25zZTogYXBwZW5kVHJhbnNmb3JtKCRodHRwLmRlZmF1bHRzLnRyYW5zZm9ybVJl
c3BvbnNlLCBmdW5jdGlvbih2YWx1ZSkgeworICAgICAqICAgICByZXR1cm4gZG9UcmFuc2Zvcm0o
dmFsdWUpOworICAgICAqICAgfSkKKyAgICAgKiB9KTsKKyAgICAgKiBgYGAKKyAgICAgKgorICAg
ICAqCisgICAgICogIyMgQ2FjaGluZworICAgICAqCisgICAgICogVG8gZW5hYmxlIGNhY2hpbmcs
IHNldCB0aGUgcmVxdWVzdCBjb25maWd1cmF0aW9uIGBjYWNoZWAgcHJvcGVydHkgdG8gYHRydWVg
ICh0byB1c2UgZGVmYXVsdAorICAgICAqIGNhY2hlKSBvciB0byBhIGN1c3RvbSBjYWNoZSBvYmpl
Y3QgKGJ1aWx0IHdpdGgge0BsaW5rIG5nLiRjYWNoZUZhY3RvcnkgYCRjYWNoZUZhY3RvcnlgfSku
CisgICAgICogV2hlbiB0aGUgY2FjaGUgaXMgZW5hYmxlZCwgYCRodHRwYCBzdG9yZXMgdGhlIHJl
c3BvbnNlIGZyb20gdGhlIHNlcnZlciBpbiB0aGUgc3BlY2lmaWVkCisgICAgICogY2FjaGUuIFRo
ZSBuZXh0IHRpbWUgdGhlIHNhbWUgcmVxdWVzdCBpcyBtYWRlLCB0aGUgcmVzcG9uc2UgaXMgc2Vy
dmVkIGZyb20gdGhlIGNhY2hlIHdpdGhvdXQKKyAgICAgKiBzZW5kaW5nIGEgcmVxdWVzdCB0byB0
aGUgc2VydmVyLgorICAgICAqCisgICAgICogTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIHJlc3BvbnNl
IGlzIHNlcnZlZCBmcm9tIGNhY2hlLCBkZWxpdmVyeSBvZiB0aGUgZGF0YSBpcyBhc3luY2hyb25v
dXMgaW4KKyAgICAgKiB0aGUgc2FtZSB3YXkgdGhhdCByZWFsIHJlcXVlc3RzIGFyZS4KKyAgICAg
KgorICAgICAqIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBHRVQgcmVxdWVzdHMgZm9yIHRoZSBzYW1l
IFVSTCB0aGF0IHNob3VsZCBiZSBjYWNoZWQgdXNpbmcgdGhlIHNhbWUKKyAgICAgKiBjYWNoZSwg
YnV0IHRoZSBjYWNoZSBpcyBub3QgcG9wdWxhdGVkIHlldCwgb25seSBvbmUgcmVxdWVzdCB0byB0
aGUgc2VydmVyIHdpbGwgYmUgbWFkZSBhbmQKKyAgICAgKiB0aGUgcmVtYWluaW5nIHJlcXVlc3Rz
IHdpbGwgYmUgZnVsZmlsbGVkIHVzaW5nIHRoZSByZXNwb25zZSBmcm9tIHRoZSBmaXJzdCByZXF1
ZXN0LgorICAgICAqCisgICAgICogWW91IGNhbiBjaGFuZ2UgdGhlIGRlZmF1bHQgY2FjaGUgdG8g
YSBuZXcgb2JqZWN0IChidWlsdCB3aXRoCisgICAgICoge0BsaW5rIG5nLiRjYWNoZUZhY3Rvcnkg
YCRjYWNoZUZhY3RvcnlgfSkgYnkgdXBkYXRpbmcgdGhlCisgICAgICoge0BsaW5rIG5nLiRodHRw
I2RlZmF1bHRzIGAkaHR0cC5kZWZhdWx0cy5jYWNoZWB9IHByb3BlcnR5LiBBbGwgcmVxdWVzdHMg
d2hvIHNldAorICAgICAqIHRoZWlyIGBjYWNoZWAgcHJvcGVydHkgdG8gYHRydWVgIHdpbGwgbm93
IHVzZSB0aGlzIGNhY2hlIG9iamVjdC4KKyAgICAgKgorICAgICAqIElmIHlvdSBzZXQgdGhlIGRl
ZmF1bHQgY2FjaGUgdG8gYGZhbHNlYCB0aGVuIG9ubHkgcmVxdWVzdHMgdGhhdCBzcGVjaWZ5IHRo
ZWlyIG93biBjdXN0b20KKyAgICAgKiBjYWNoZSBvYmplY3Qgd2lsbCBiZSBjYWNoZWQuCisgICAg
ICoKKyAgICAgKiAjIyBJbnRlcmNlcHRvcnMKKyAgICAgKgorICAgICAqIEJlZm9yZSB5b3Ugc3Rh
cnQgY3JlYXRpbmcgaW50ZXJjZXB0b3JzLCBiZSBzdXJlIHRvIHVuZGVyc3RhbmQgdGhlCisgICAg
ICoge0BsaW5rIG5nLiRxICRxIGFuZCBkZWZlcnJlZC9wcm9taXNlIEFQSXN9LgorICAgICAqCisg
ICAgICogRm9yIHB1cnBvc2VzIG9mIGdsb2JhbCBlcnJvciBoYW5kbGluZywgYXV0aGVudGljYXRp
b24sIG9yIGFueSBraW5kIG9mIHN5bmNocm9ub3VzIG9yCisgICAgICogYXN5bmNocm9ub3VzIHBy
ZS1wcm9jZXNzaW5nIG9mIHJlcXVlc3Qgb3IgcG9zdHByb2Nlc3Npbmcgb2YgcmVzcG9uc2VzLCBp
dCBpcyBkZXNpcmFibGUgdG8gYmUKKyAgICAgKiBhYmxlIHRvIGludGVyY2VwdCByZXF1ZXN0cyBi
ZWZvcmUgdGhleSBhcmUgaGFuZGVkIHRvIHRoZSBzZXJ2ZXIgYW5kCisgICAgICogcmVzcG9uc2Vz
IGJlZm9yZSB0aGV5IGFyZSBoYW5kZWQgb3ZlciB0byB0aGUgYXBwbGljYXRpb24gY29kZSB0aGF0
CisgICAgICogaW5pdGlhdGVkIHRoZXNlIHJlcXVlc3RzLiBUaGUgaW50ZXJjZXB0b3JzIGxldmVy
YWdlIHRoZSB7QGxpbmsgbmcuJHEKKyAgICAgKiBwcm9taXNlIEFQSXN9IHRvIGZ1bGZpbGwgdGhp
cyBuZWVkIGZvciBib3RoIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgcHJlLXByb2Nlc3Np
bmcuCisgICAgICoKKyAgICAgKiBUaGUgaW50ZXJjZXB0b3JzIGFyZSBzZXJ2aWNlIGZhY3Rvcmll
cyB0aGF0IGFyZSByZWdpc3RlcmVkIHdpdGggdGhlIGAkaHR0cFByb3ZpZGVyYCBieQorICAgICAq
IGFkZGluZyB0aGVtIHRvIHRoZSBgJGh0dHBQcm92aWRlci5pbnRlcmNlcHRvcnNgIGFycmF5LiBU
aGUgZmFjdG9yeSBpcyBjYWxsZWQgYW5kCisgICAgICogaW5qZWN0ZWQgd2l0aCBkZXBlbmRlbmNp
ZXMgKGlmIHNwZWNpZmllZCkgYW5kIHJldHVybnMgdGhlIGludGVyY2VwdG9yLgorICAgICAqCisg
ICAgICogVGhlcmUgYXJlIHR3byBraW5kcyBvZiBpbnRlcmNlcHRvcnMgKGFuZCB0d28ga2luZHMg
b2YgcmVqZWN0aW9uIGludGVyY2VwdG9ycyk6CisgICAgICoKKyAgICAgKiAgICogYHJlcXVlc3Rg
OiBpbnRlcmNlcHRvcnMgZ2V0IGNhbGxlZCB3aXRoIGEgaHR0cCBgY29uZmlnYCBvYmplY3QuIFRo
ZSBmdW5jdGlvbiBpcyBmcmVlIHRvCisgICAgICogICAgIG1vZGlmeSB0aGUgYGNvbmZpZ2Agb2Jq
ZWN0IG9yIGNyZWF0ZSBhIG5ldyBvbmUuIFRoZSBmdW5jdGlvbiBuZWVkcyB0byByZXR1cm4gdGhl
IGBjb25maWdgCisgICAgICogICAgIG9iamVjdCBkaXJlY3RseSwgb3IgYSBwcm9taXNlIGNvbnRh
aW5pbmcgdGhlIGBjb25maWdgIG9yIGEgbmV3IGBjb25maWdgIG9iamVjdC4KKyAgICAgKiAgICog
YHJlcXVlc3RFcnJvcmA6IGludGVyY2VwdG9yIGdldHMgY2FsbGVkIHdoZW4gYSBwcmV2aW91cyBp
bnRlcmNlcHRvciB0aHJldyBhbiBlcnJvciBvcgorICAgICAqICAgICByZXNvbHZlZCB3aXRoIGEg
cmVqZWN0aW9uLgorICAgICAqICAgKiBgcmVzcG9uc2VgOiBpbnRlcmNlcHRvcnMgZ2V0IGNhbGxl
ZCB3aXRoIGh0dHAgYHJlc3BvbnNlYCBvYmplY3QuIFRoZSBmdW5jdGlvbiBpcyBmcmVlIHRvCisg
ICAgICogICAgIG1vZGlmeSB0aGUgYHJlc3BvbnNlYCBvYmplY3Qgb3IgY3JlYXRlIGEgbmV3IG9u
ZS4gVGhlIGZ1bmN0aW9uIG5lZWRzIHRvIHJldHVybiB0aGUgYHJlc3BvbnNlYAorICAgICAqICAg
ICBvYmplY3QgZGlyZWN0bHksIG9yIGFzIGEgcHJvbWlzZSBjb250YWluaW5nIHRoZSBgcmVzcG9u
c2VgIG9yIGEgbmV3IGByZXNwb25zZWAgb2JqZWN0LgorICAgICAqICAgKiBgcmVzcG9uc2VFcnJv
cmA6IGludGVyY2VwdG9yIGdldHMgY2FsbGVkIHdoZW4gYSBwcmV2aW91cyBpbnRlcmNlcHRvciB0
aHJldyBhbiBlcnJvciBvcgorICAgICAqICAgICByZXNvbHZlZCB3aXRoIGEgcmVqZWN0aW9uLgor
ICAgICAqCisgICAgICoKKyAgICAgKiBgYGBqcworICAgICAqICAgLy8gcmVnaXN0ZXIgdGhlIGlu
dGVyY2VwdG9yIGFzIGEgc2VydmljZQorICAgICAqICAgJHByb3ZpZGUuZmFjdG9yeSgnbXlIdHRw
SW50ZXJjZXB0b3InLCBmdW5jdGlvbigkcSwgZGVwZW5kZW5jeTEsIGRlcGVuZGVuY3kyKSB7Cisg
ICAgICogICAgIHJldHVybiB7CisgICAgICogICAgICAgLy8gb3B0aW9uYWwgbWV0aG9kCisgICAg
ICogICAgICAgJ3JlcXVlc3QnOiBmdW5jdGlvbihjb25maWcpIHsKKyAgICAgKiAgICAgICAgIC8v
IGRvIHNvbWV0aGluZyBvbiBzdWNjZXNzCisgICAgICogICAgICAgICByZXR1cm4gY29uZmlnOwor
ICAgICAqICAgICAgIH0sCisgICAgICoKKyAgICAgKiAgICAgICAvLyBvcHRpb25hbCBtZXRob2QK
KyAgICAgKiAgICAgICdyZXF1ZXN0RXJyb3InOiBmdW5jdGlvbihyZWplY3Rpb24pIHsKKyAgICAg
KiAgICAgICAgIC8vIGRvIHNvbWV0aGluZyBvbiBlcnJvcgorICAgICAqICAgICAgICAgaWYgKGNh
blJlY292ZXIocmVqZWN0aW9uKSkgeworICAgICAqICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VP
ck5ld1Byb21pc2UKKyAgICAgKiAgICAgICAgIH0KKyAgICAgKiAgICAgICAgIHJldHVybiAkcS5y
ZWplY3QocmVqZWN0aW9uKTsKKyAgICAgKiAgICAgICB9LAorICAgICAqCisgICAgICoKKyAgICAg
KgorICAgICAqICAgICAgIC8vIG9wdGlvbmFsIG1ldGhvZAorICAgICAqICAgICAgICdyZXNwb25z
ZSc6IGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICogICAgICAgICAvLyBkbyBzb21ldGhpbmcg
b24gc3VjY2VzcworICAgICAqICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOworICAgICAqICAgICAg
IH0sCisgICAgICoKKyAgICAgKiAgICAgICAvLyBvcHRpb25hbCBtZXRob2QKKyAgICAgKiAgICAg
ICdyZXNwb25zZUVycm9yJzogZnVuY3Rpb24ocmVqZWN0aW9uKSB7CisgICAgICogICAgICAgICAv
LyBkbyBzb21ldGhpbmcgb24gZXJyb3IKKyAgICAgKiAgICAgICAgIGlmIChjYW5SZWNvdmVyKHJl
amVjdGlvbikpIHsKKyAgICAgKiAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlT3JOZXdQcm9taXNl
CisgICAgICogICAgICAgICB9CisgICAgICogICAgICAgICByZXR1cm4gJHEucmVqZWN0KHJlamVj
dGlvbik7CisgICAgICogICAgICAgfQorICAgICAqICAgICB9OworICAgICAqICAgfSk7CisgICAg
ICoKKyAgICAgKiAgICRodHRwUHJvdmlkZXIuaW50ZXJjZXB0b3JzLnB1c2goJ215SHR0cEludGVy
Y2VwdG9yJyk7CisgICAgICoKKyAgICAgKgorICAgICAqICAgLy8gYWx0ZXJuYXRpdmVseSwgcmVn
aXN0ZXIgdGhlIGludGVyY2VwdG9yIHZpYSBhbiBhbm9ueW1vdXMgZmFjdG9yeQorICAgICAqICAg
JGh0dHBQcm92aWRlci5pbnRlcmNlcHRvcnMucHVzaChmdW5jdGlvbigkcSwgZGVwZW5kZW5jeTEs
IGRlcGVuZGVuY3kyKSB7CisgICAgICogICAgIHJldHVybiB7CisgICAgICogICAgICAncmVxdWVz
dCc6IGZ1bmN0aW9uKGNvbmZpZykgeworICAgICAqICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUK
KyAgICAgKiAgICAgICB9LAorICAgICAqCisgICAgICogICAgICAgJ3Jlc3BvbnNlJzogZnVuY3Rp
b24ocmVzcG9uc2UpIHsKKyAgICAgKiAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlCisgICAgICog
ICAgICAgfQorICAgICAqICAgICB9OworICAgICAqICAgfSk7CisgICAgICogYGBgCisgICAgICoK
KyAgICAgKiAjIyBTZWN1cml0eSBDb25zaWRlcmF0aW9ucworICAgICAqCisgICAgICogV2hlbiBk
ZXNpZ25pbmcgd2ViIGFwcGxpY2F0aW9ucywgY29uc2lkZXIgc2VjdXJpdHkgdGhyZWF0cyBmcm9t
OgorICAgICAqCisgICAgICogLSBbSlNPTiB2dWxuZXJhYmlsaXR5XShodHRwOi8vaGFhY2tlZC5j
b20vYXJjaGl2ZS8yMDA4LzExLzIwL2FuYXRvbXktb2YtYS1zdWJ0bGUtanNvbi12dWxuZXJhYmls
aXR5LmFzcHgpCisgICAgICogLSBbWFNSRl0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9D
cm9zcy1zaXRlX3JlcXVlc3RfZm9yZ2VyeSkKKyAgICAgKgorICAgICAqIEJvdGggc2VydmVyIGFu
ZCB0aGUgY2xpZW50IG11c3QgY29vcGVyYXRlIGluIG9yZGVyIHRvIGVsaW1pbmF0ZSB0aGVzZSB0
aHJlYXRzLiBBbmd1bGFyIGNvbWVzCisgICAgICogcHJlLWNvbmZpZ3VyZWQgd2l0aCBzdHJhdGVn
aWVzIHRoYXQgYWRkcmVzcyB0aGVzZSBpc3N1ZXMsIGJ1dCBmb3IgdGhpcyB0byB3b3JrIGJhY2tl
bmQgc2VydmVyCisgICAgICogY29vcGVyYXRpb24gaXMgcmVxdWlyZWQuCisgICAgICoKKyAgICAg
KiAjIyMgSlNPTiBWdWxuZXJhYmlsaXR5IFByb3RlY3Rpb24KKyAgICAgKgorICAgICAqIEEgW0pT
T04gdnVsbmVyYWJpbGl0eV0oaHR0cDovL2hhYWNrZWQuY29tL2FyY2hpdmUvMjAwOC8xMS8yMC9h
bmF0b215LW9mLWEtc3VidGxlLWpzb24tdnVsbmVyYWJpbGl0eS5hc3B4KQorICAgICAqIGFsbG93
cyB0aGlyZCBwYXJ0eSB3ZWJzaXRlIHRvIHR1cm4geW91ciBKU09OIHJlc291cmNlIFVSTCBpbnRv
CisgICAgICogW0pTT05QXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0pTT05QKSByZXF1
ZXN0IHVuZGVyIHNvbWUgY29uZGl0aW9ucy4gVG8KKyAgICAgKiBjb3VudGVyIHRoaXMgeW91ciBz
ZXJ2ZXIgY2FuIHByZWZpeCBhbGwgSlNPTiByZXF1ZXN0cyB3aXRoIGZvbGxvd2luZyBzdHJpbmcg
YCIpXX0nLFxuImAuCisgICAgICogQW5ndWxhciB3aWxsIGF1dG9tYXRpY2FsbHkgc3RyaXAgdGhl
IHByZWZpeCBiZWZvcmUgcHJvY2Vzc2luZyBpdCBhcyBKU09OLgorICAgICAqCisgICAgICogRm9y
IGV4YW1wbGUgaWYgeW91ciBzZXJ2ZXIgbmVlZHMgdG8gcmV0dXJuOgorICAgICAqIGBgYGpzCisg
ICAgICogWydvbmUnLCd0d28nXQorICAgICAqIGBgYAorICAgICAqCisgICAgICogd2hpY2ggaXMg
dnVsbmVyYWJsZSB0byBhdHRhY2ssIHlvdXIgc2VydmVyIGNhbiByZXR1cm46CisgICAgICogYGBg
anMKKyAgICAgKiApXX0nLAorICAgICAqIFsnb25lJywndHdvJ10KKyAgICAgKiBgYGAKKyAgICAg
KgorICAgICAqIEFuZ3VsYXIgd2lsbCBzdHJpcCB0aGUgcHJlZml4LCBiZWZvcmUgcHJvY2Vzc2lu
ZyB0aGUgSlNPTi4KKyAgICAgKgorICAgICAqCisgICAgICogIyMjIENyb3NzIFNpdGUgUmVxdWVz
dCBGb3JnZXJ5IChYU1JGKSBQcm90ZWN0aW9uCisgICAgICoKKyAgICAgKiBbWFNSRl0oaHR0cDov
L2VuLndpa2lwZWRpYS5vcmcvd2lraS9Dcm9zcy1zaXRlX3JlcXVlc3RfZm9yZ2VyeSkgaXMgYSB0
ZWNobmlxdWUgYnkgd2hpY2gKKyAgICAgKiBhbiB1bmF1dGhvcml6ZWQgc2l0ZSBjYW4gZ2FpbiB5
b3VyIHVzZXIncyBwcml2YXRlIGRhdGEuIEFuZ3VsYXIgcHJvdmlkZXMgYSBtZWNoYW5pc20KKyAg
ICAgKiB0byBjb3VudGVyIFhTUkYuIFdoZW4gcGVyZm9ybWluZyBYSFIgcmVxdWVzdHMsIHRoZSAk
aHR0cCBzZXJ2aWNlIHJlYWRzIGEgdG9rZW4gZnJvbSBhIGNvb2tpZQorICAgICAqIChieSBkZWZh
dWx0LCBgWFNSRi1UT0tFTmApIGFuZCBzZXRzIGl0IGFzIGFuIEhUVFAgaGVhZGVyIChgWC1YU1JG
LVRPS0VOYCkuIFNpbmNlIG9ubHkKKyAgICAgKiBKYXZhU2NyaXB0IHRoYXQgcnVucyBvbiB5b3Vy
IGRvbWFpbiBjb3VsZCByZWFkIHRoZSBjb29raWUsIHlvdXIgc2VydmVyIGNhbiBiZSBhc3N1cmVk
IHRoYXQKKyAgICAgKiB0aGUgWEhSIGNhbWUgZnJvbSBKYXZhU2NyaXB0IHJ1bm5pbmcgb24geW91
ciBkb21haW4uIFRoZSBoZWFkZXIgd2lsbCBub3QgYmUgc2V0IGZvcgorICAgICAqIGNyb3NzLWRv
bWFpbiByZXF1ZXN0cy4KKyAgICAgKgorICAgICAqIFRvIHRha2UgYWR2YW50YWdlIG9mIHRoaXMs
IHlvdXIgc2VydmVyIG5lZWRzIHRvIHNldCBhIHRva2VuIGluIGEgSmF2YVNjcmlwdCByZWFkYWJs
ZSBzZXNzaW9uCisgICAgICogY29va2llIGNhbGxlZCBgWFNSRi1UT0tFTmAgb24gdGhlIGZpcnN0
IEhUVFAgR0VUIHJlcXVlc3QuIE9uIHN1YnNlcXVlbnQgWEhSIHJlcXVlc3RzIHRoZQorICAgICAq
IHNlcnZlciBjYW4gdmVyaWZ5IHRoYXQgdGhlIGNvb2tpZSBtYXRjaGVzIGBYLVhTUkYtVE9LRU5g
IEhUVFAgaGVhZGVyLCBhbmQgdGhlcmVmb3JlIGJlIHN1cmUKKyAgICAgKiB0aGF0IG9ubHkgSmF2
YVNjcmlwdCBydW5uaW5nIG9uIHlvdXIgZG9tYWluIGNvdWxkIGhhdmUgc2VudCB0aGUgcmVxdWVz
dC4gVGhlIHRva2VuIG11c3QgYmUKKyAgICAgKiB1bmlxdWUgZm9yIGVhY2ggdXNlciBhbmQgbXVz
dCBiZSB2ZXJpZmlhYmxlIGJ5IHRoZSBzZXJ2ZXIgKHRvIHByZXZlbnQgdGhlIEphdmFTY3JpcHQg
ZnJvbQorICAgICAqIG1ha2luZyB1cCBpdHMgb3duIHRva2VucykuIFdlIHJlY29tbWVuZCB0aGF0
IHRoZSB0b2tlbiBpcyBhIGRpZ2VzdCBvZiB5b3VyIHNpdGUncworICAgICAqIGF1dGhlbnRpY2F0
aW9uIGNvb2tpZSB3aXRoIGEgW3NhbHRdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Nh
bHRfKGNyeXB0b2dyYXBoeSYjNDE7KQorICAgICAqIGZvciBhZGRlZCBzZWN1cml0eS4KKyAgICAg
KgorICAgICAqIFRoZSBuYW1lIG9mIHRoZSBoZWFkZXJzIGNhbiBiZSBzcGVjaWZpZWQgdXNpbmcg
dGhlIHhzcmZIZWFkZXJOYW1lIGFuZCB4c3JmQ29va2llTmFtZQorICAgICAqIHByb3BlcnRpZXMg
b2YgZWl0aGVyICRodHRwUHJvdmlkZXIuZGVmYXVsdHMgYXQgY29uZmlnLXRpbWUsICRodHRwLmRl
ZmF1bHRzIGF0IHJ1bi10aW1lLAorICAgICAqIG9yIHRoZSBwZXItcmVxdWVzdCBjb25maWcgb2Jq
ZWN0LgorICAgICAqCisgICAgICogSW4gb3JkZXIgdG8gcHJldmVudCBjb2xsaXNpb25zIGluIGVu
dmlyb25tZW50cyB3aGVyZSBtdWx0aXBsZSBBbmd1bGFyIGFwcHMgc2hhcmUgdGhlCisgICAgICog
c2FtZSBkb21haW4gb3Igc3ViZG9tYWluLCB3ZSByZWNvbW1lbmQgdGhhdCBlYWNoIGFwcGxpY2F0
aW9uIHVzZXMgdW5pcXVlIGNvb2tpZSBuYW1lLgorICAgICAqCisgICAgICoKKyAgICAgKiBAcGFy
YW0ge29iamVjdH0gY29uZmlnIE9iamVjdCBkZXNjcmliaW5nIHRoZSByZXF1ZXN0IHRvIGJlIG1h
ZGUgYW5kIGhvdyBpdCBzaG91bGQgYmUKKyAgICAgKiAgICBwcm9jZXNzZWQuIFRoZSBvYmplY3Qg
aGFzIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorICAgICAqCisgICAgICogICAgLSAqKm1ldGhvZCoq
IOKAkyBge3N0cmluZ31gIOKAkyBIVFRQIG1ldGhvZCAoZS5nLiAnR0VUJywgJ1BPU1QnLCBldGMp
CisgICAgICogICAgLSAqKnVybCoqIOKAkyBge3N0cmluZ31gIOKAkyBBYnNvbHV0ZSBvciByZWxh
dGl2ZSBVUkwgb2YgdGhlIHJlc291cmNlIHRoYXQgaXMgYmVpbmcgcmVxdWVzdGVkLgorICAgICAq
ICAgIC0gKipwYXJhbXMqKiDigJMgYHtPYmplY3QuPHN0cmluZ3xPYmplY3Q+fWAg4oCTIE1hcCBv
ZiBzdHJpbmdzIG9yIG9iamVjdHMgd2hpY2ggd2lsbCBiZSBzZXJpYWxpemVkCisgICAgICogICAg
ICB3aXRoIHRoZSBgcGFyYW1TZXJpYWxpemVyYCBhbmQgYXBwZW5kZWQgYXMgR0VUIHBhcmFtZXRl
cnMuCisgICAgICogICAgLSAqKmRhdGEqKiDigJMgYHtzdHJpbmd8T2JqZWN0fWAg4oCTIERhdGEg
dG8gYmUgc2VudCBhcyB0aGUgcmVxdWVzdCBtZXNzYWdlIGRhdGEuCisgICAgICogICAgLSAqKmhl
YWRlcnMqKiDigJMgYHtPYmplY3R9YCDigJMgTWFwIG9mIHN0cmluZ3Mgb3IgZnVuY3Rpb25zIHdo
aWNoIHJldHVybiBzdHJpbmdzIHJlcHJlc2VudGluZworICAgICAqICAgICAgSFRUUCBoZWFkZXJz
IHRvIHNlbmQgdG8gdGhlIHNlcnZlci4gSWYgdGhlIHJldHVybiB2YWx1ZSBvZiBhIGZ1bmN0aW9u
IGlzIG51bGwsIHRoZQorICAgICAqICAgICAgaGVhZGVyIHdpbGwgbm90IGJlIHNlbnQuIEZ1bmN0
aW9ucyBhY2NlcHQgYSBjb25maWcgb2JqZWN0IGFzIGFuIGFyZ3VtZW50LgorICAgICAqICAgIC0g
Kip4c3JmSGVhZGVyTmFtZSoqIOKAkyBge3N0cmluZ31gIOKAkyBOYW1lIG9mIEhUVFAgaGVhZGVy
IHRvIHBvcHVsYXRlIHdpdGggdGhlIFhTUkYgdG9rZW4uCisgICAgICogICAgLSAqKnhzcmZDb29r
aWVOYW1lKiog4oCTIGB7c3RyaW5nfWAg4oCTIE5hbWUgb2YgY29va2llIGNvbnRhaW5pbmcgdGhl
IFhTUkYgdG9rZW4uCisgICAgICogICAgLSAqKnRyYW5zZm9ybVJlcXVlc3QqKiDigJMKKyAgICAg
KiAgICAgIGB7ZnVuY3Rpb24oZGF0YSwgaGVhZGVyc0dldHRlcil8QXJyYXkuPGZ1bmN0aW9uKGRh
dGEsIGhlYWRlcnNHZXR0ZXIpPn1gIOKAkworICAgICAqICAgICAgdHJhbnNmb3JtIGZ1bmN0aW9u
IG9yIGFuIGFycmF5IG9mIHN1Y2ggZnVuY3Rpb25zLiBUaGUgdHJhbnNmb3JtIGZ1bmN0aW9uIHRh
a2VzIHRoZSBodHRwCisgICAgICogICAgICByZXF1ZXN0IGJvZHkgYW5kIGhlYWRlcnMgYW5kIHJl
dHVybnMgaXRzIHRyYW5zZm9ybWVkICh0eXBpY2FsbHkgc2VyaWFsaXplZCkgdmVyc2lvbi4KKyAg
ICAgKiAgICAgIFNlZSB7QGxpbmsgbmcuJGh0dHAjb3ZlcnJpZGluZy10aGUtZGVmYXVsdC10cmFu
c2Zvcm1hdGlvbnMtcGVyLXJlcXVlc3QKKyAgICAgKiAgICAgIE92ZXJyaWRpbmcgdGhlIERlZmF1
bHQgVHJhbnNmb3JtYXRpb25zfQorICAgICAqICAgIC0gKip0cmFuc2Zvcm1SZXNwb25zZSoqIOKA
kworICAgICAqICAgICAgYHtmdW5jdGlvbihkYXRhLCBoZWFkZXJzR2V0dGVyLCBzdGF0dXMpfEFy
cmF5LjxmdW5jdGlvbihkYXRhLCBoZWFkZXJzR2V0dGVyLCBzdGF0dXMpPn1gIOKAkworICAgICAq
ICAgICAgdHJhbnNmb3JtIGZ1bmN0aW9uIG9yIGFuIGFycmF5IG9mIHN1Y2ggZnVuY3Rpb25zLiBU
aGUgdHJhbnNmb3JtIGZ1bmN0aW9uIHRha2VzIHRoZSBodHRwCisgICAgICogICAgICByZXNwb25z
ZSBib2R5LCBoZWFkZXJzIGFuZCBzdGF0dXMgYW5kIHJldHVybnMgaXRzIHRyYW5zZm9ybWVkICh0
eXBpY2FsbHkgZGVzZXJpYWxpemVkKSB2ZXJzaW9uLgorICAgICAqICAgICAgU2VlIHtAbGluayBu
Zy4kaHR0cCNvdmVycmlkaW5nLXRoZS1kZWZhdWx0LXRyYW5zZm9ybWF0aW9ucy1wZXItcmVxdWVz
dAorICAgICAqICAgICAgT3ZlcnJpZGluZyB0aGUgRGVmYXVsdCBUcmFuc2Zvcm1hdGlvbmpxTGlr
c30KKyAgICAgKiAgICAtICoqcGFyYW1TZXJpYWxpemVyKiogLSBge3N0cmluZ3xmdW5jdGlvbihP
YmplY3Q8c3RyaW5nLHN0cmluZz4pOnN0cmluZ31gIC0gQSBmdW5jdGlvbiB1c2VkIHRvCisgICAg
ICogICAgICBwcmVwYXJlIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgcmVxdWVzdCBwYXJh
bWV0ZXJzIChzcGVjaWZpZWQgYXMgYW4gb2JqZWN0KS4KKyAgICAgKiAgICAgIElmIHNwZWNpZmll
ZCBhcyBzdHJpbmcsIGl0IGlzIGludGVycHJldGVkIGFzIGZ1bmN0aW9uIHJlZ2lzdGVyZWQgd2l0
aCB0aGUKKyAgICAgKiAgICAgIHtAbGluayAkaW5qZWN0b3IgJGluamVjdG9yfSwgd2hpY2ggbWVh
bnMgeW91IGNhbiBjcmVhdGUgeW91ciBvd24gc2VyaWFsaXplcgorICAgICAqICAgICAgYnkgcmVn
aXN0ZXJpbmcgaXQgYXMgYSB7QGxpbmsgYXV0by4kcHJvdmlkZSNzZXJ2aWNlIHNlcnZpY2V9Lgor
ICAgICAqICAgICAgVGhlIGRlZmF1bHQgc2VyaWFsaXplciBpcyB0aGUge0BsaW5rICRodHRwUGFy
YW1TZXJpYWxpemVyICRodHRwUGFyYW1TZXJpYWxpemVyfTsKKyAgICAgKiAgICAgIGFsdGVybmF0
aXZlbHksIHlvdSBjYW4gdXNlIHRoZSB7QGxpbmsgJGh0dHBQYXJhbVNlcmlhbGl6ZXJKUUxpa2Ug
JGh0dHBQYXJhbVNlcmlhbGl6ZXJKUUxpa2V9CisgICAgICogICAgLSAqKmNhY2hlKiog4oCTIGB7
Ym9vbGVhbnxDYWNoZX1gIOKAkyBJZiB0cnVlLCBhIGRlZmF1bHQgJGh0dHAgY2FjaGUgd2lsbCBi
ZSB1c2VkIHRvIGNhY2hlIHRoZQorICAgICAqICAgICAgR0VUIHJlcXVlc3QsIG90aGVyd2lzZSBp
ZiBhIGNhY2hlIGluc3RhbmNlIGJ1aWx0IHdpdGgKKyAgICAgKiAgICAgIHtAbGluayBuZy4kY2Fj
aGVGYWN0b3J5ICRjYWNoZUZhY3Rvcnl9LCB0aGlzIGNhY2hlIHdpbGwgYmUgdXNlZCBmb3IKKyAg
ICAgKiAgICAgIGNhY2hpbmcuCisgICAgICogICAgLSAqKnRpbWVvdXQqKiDigJMgYHtudW1iZXJ8
UHJvbWlzZX1gIOKAkyB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcywgb3Ige0BsaW5rIG5nLiRxIHBy
b21pc2V9CisgICAgICogICAgICB0aGF0IHNob3VsZCBhYm9ydCB0aGUgcmVxdWVzdCB3aGVuIHJl
c29sdmVkLgorICAgICAqICAgIC0gKip3aXRoQ3JlZGVudGlhbHMqKiAtIGB7Ym9vbGVhbn1gIC0g
d2hldGhlciB0byBzZXQgdGhlIGB3aXRoQ3JlZGVudGlhbHNgIGZsYWcgb24gdGhlCisgICAgICog
ICAgICBYSFIgb2JqZWN0LiBTZWUgW3JlcXVlc3RzIHdpdGggY3JlZGVudGlhbHNdKGh0dHBzOi8v
ZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUVFAvQWNjZXNzX2NvbnRyb2xfQ09SUyNS
ZXF1ZXN0c193aXRoX2NyZWRlbnRpYWxzKQorICAgICAqICAgICAgZm9yIG1vcmUgaW5mb3JtYXRp
b24uCisgICAgICogICAgLSAqKnJlc3BvbnNlVHlwZSoqIC0gYHtzdHJpbmd9YCAtIHNlZQorICAg
ICAqICAgICAgW1hNTEh0dHBSZXF1ZXN0LnJlc3BvbnNlVHlwZV0oaHR0cHM6Ly9kZXZlbG9wZXIu
bW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1hNTEh0dHBSZXF1ZXN0I3htbGh0dHByZXF1
ZXN0LXJlc3BvbnNldHlwZSkuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyB7SHR0cFByb21pc2V9
IFJldHVybnMgYSB7QGxpbmsgbmcuJHEgcHJvbWlzZX0gb2JqZWN0IHdpdGggdGhlCisgICAgICog
ICBzdGFuZGFyZCBgdGhlbmAgbWV0aG9kIGFuZCB0d28gaHR0cCBzcGVjaWZpYyBtZXRob2RzOiBg
c3VjY2Vzc2AgYW5kIGBlcnJvcmAuIFRoZSBgdGhlbmAKKyAgICAgKiAgIG1ldGhvZCB0YWtlcyB0
d28gYXJndW1lbnRzIGEgc3VjY2VzcyBhbmQgYW4gZXJyb3IgY2FsbGJhY2sgd2hpY2ggd2lsbCBi
ZSBjYWxsZWQgd2l0aCBhCisgICAgICogICByZXNwb25zZSBvYmplY3QuIFRoZSBgc3VjY2Vzc2Ag
YW5kIGBlcnJvcmAgbWV0aG9kcyB0YWtlIGEgc2luZ2xlIGFyZ3VtZW50IC0gYSBmdW5jdGlvbiB0
aGF0CisgICAgICogICB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IHN1Y2NlZWRzIG9y
IGZhaWxzIHJlc3BlY3RpdmVseS4gVGhlIGFyZ3VtZW50cyBwYXNzZWQgaW50bworICAgICAqICAg
dGhlc2UgZnVuY3Rpb25zIGFyZSBkZXN0cnVjdHVyZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJl
c3BvbnNlIG9iamVjdCBwYXNzZWQgaW50byB0aGUKKyAgICAgKiAgIGB0aGVuYCBtZXRob2QuIFRo
ZSByZXNwb25zZSBvYmplY3QgaGFzIHRoZXNlIHByb3BlcnRpZXM6CisgICAgICoKKyAgICAgKiAg
IC0gKipkYXRhKiog4oCTIGB7c3RyaW5nfE9iamVjdH1gIOKAkyBUaGUgcmVzcG9uc2UgYm9keSB0
cmFuc2Zvcm1lZCB3aXRoIHRoZSB0cmFuc2Zvcm0KKyAgICAgKiAgICAgZnVuY3Rpb25zLgorICAg
ICAqICAgLSAqKnN0YXR1cyoqIOKAkyBge251bWJlcn1gIOKAkyBIVFRQIHN0YXR1cyBjb2RlIG9m
IHRoZSByZXNwb25zZS4KKyAgICAgKiAgIC0gKipoZWFkZXJzKiog4oCTIGB7ZnVuY3Rpb24oW2hl
YWRlck5hbWVdKX1gIOKAkyBIZWFkZXIgZ2V0dGVyIGZ1bmN0aW9uLgorICAgICAqICAgLSAqKmNv
bmZpZyoqIOKAkyBge09iamVjdH1gIOKAkyBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgdGhhdCB3
YXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgcmVxdWVzdC4KKyAgICAgKiAgIC0gKipzdGF0dXNUZXh0
Kiog4oCTIGB7c3RyaW5nfWAg4oCTIEhUVFAgc3RhdHVzIHRleHQgb2YgdGhlIHJlc3BvbnNlLgor
ICAgICAqCisgICAgICogQHByb3BlcnR5IHtBcnJheS48T2JqZWN0Pn0gcGVuZGluZ1JlcXVlc3Rz
IEFycmF5IG9mIGNvbmZpZyBvYmplY3RzIGZvciBjdXJyZW50bHkgcGVuZGluZworICAgICAqICAg
cmVxdWVzdHMuIFRoaXMgaXMgcHJpbWFyaWx5IG1lYW50IHRvIGJlIHVzZWQgZm9yIGRlYnVnZ2lu
ZyBwdXJwb3Nlcy4KKyAgICAgKgorICAgICAqCisgICAgICogQGV4YW1wbGUKKzxleGFtcGxlIG1v
ZHVsZT0iaHR0cEV4YW1wbGUiPgorPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgIDxkaXYgbmct
Y29udHJvbGxlcj0iRmV0Y2hDb250cm9sbGVyIj4KKyAgICA8c2VsZWN0IG5nLW1vZGVsPSJtZXRo
b2QiIGFyaWEtbGFiZWw9IlJlcXVlc3QgbWV0aG9kIj4KKyAgICAgIDxvcHRpb24+R0VUPC9vcHRp
b24+CisgICAgICA8b3B0aW9uPkpTT05QPC9vcHRpb24+CisgICAgPC9zZWxlY3Q+CisgICAgPGlu
cHV0IHR5cGU9InRleHQiIG5nLW1vZGVsPSJ1cmwiIHNpemU9IjgwIiBhcmlhLWxhYmVsPSJVUkwi
IC8+CisgICAgPGJ1dHRvbiBpZD0iZmV0Y2hidG4iIG5nLWNsaWNrPSJmZXRjaCgpIj5mZXRjaDwv
YnV0dG9uPjxicj4KKyAgICA8YnV0dG9uIGlkPSJzYW1wbGVnZXRidG4iIG5nLWNsaWNrPSJ1cGRh
dGVNb2RlbCgnR0VUJywgJ2h0dHAtaGVsbG8uaHRtbCcpIj5TYW1wbGUgR0VUPC9idXR0b24+Cisg
ICAgPGJ1dHRvbiBpZD0ic2FtcGxlanNvbnBidG4iCisgICAgICBuZy1jbGljaz0idXBkYXRlTW9k
ZWwoJ0pTT05QJywKKyAgICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8vYW5ndWxhcmpzLm9yZy9n
cmVldC5waHA/Y2FsbGJhY2s9SlNPTl9DQUxMQkFDSyZuYW1lPVN1cGVyJTIwSGVybycpIj4KKyAg
ICAgIFNhbXBsZSBKU09OUAorICAgIDwvYnV0dG9uPgorICAgIDxidXR0b24gaWQ9ImludmFsaWRq
c29ucGJ0biIKKyAgICAgIG5nLWNsaWNrPSJ1cGRhdGVNb2RlbCgnSlNPTlAnLCAnaHR0cHM6Ly9h
bmd1bGFyanMub3JnL2RvZXNudGV4aXN0JmNhbGxiYWNrPUpTT05fQ0FMTEJBQ0snKSI+CisgICAg
ICAgIEludmFsaWQgSlNPTlAKKyAgICAgIDwvYnV0dG9uPgorICAgIDxwcmU+aHR0cCBzdGF0dXMg
Y29kZToge3tzdGF0dXN9fTwvcHJlPgorICAgIDxwcmU+aHR0cCByZXNwb25zZSBkYXRhOiB7e2Rh
dGF9fTwvcHJlPgorICA8L2Rpdj4KKzwvZmlsZT4KKzxmaWxlIG5hbWU9InNjcmlwdC5qcyI+Cisg
IGFuZ3VsYXIubW9kdWxlKCdodHRwRXhhbXBsZScsIFtdKQorICAgIC5jb250cm9sbGVyKCdGZXRj
aENvbnRyb2xsZXInLCBbJyRzY29wZScsICckaHR0cCcsICckdGVtcGxhdGVDYWNoZScsCisgICAg
ICBmdW5jdGlvbigkc2NvcGUsICRodHRwLCAkdGVtcGxhdGVDYWNoZSkgeworICAgICAgICAkc2Nv
cGUubWV0aG9kID0gJ0dFVCc7CisgICAgICAgICRzY29wZS51cmwgPSAnaHR0cC1oZWxsby5odG1s
JzsKKworICAgICAgICAkc2NvcGUuZmV0Y2ggPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAkc2Nv
cGUuY29kZSA9IG51bGw7CisgICAgICAgICAgJHNjb3BlLnJlc3BvbnNlID0gbnVsbDsKKworICAg
ICAgICAgICRodHRwKHttZXRob2Q6ICRzY29wZS5tZXRob2QsIHVybDogJHNjb3BlLnVybCwgY2Fj
aGU6ICR0ZW1wbGF0ZUNhY2hlfSkuCisgICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uKGRhdGEs
IHN0YXR1cykgeworICAgICAgICAgICAgICAkc2NvcGUuc3RhdHVzID0gc3RhdHVzOworICAgICAg
ICAgICAgICAkc2NvcGUuZGF0YSA9IGRhdGE7CisgICAgICAgICAgICB9KS4KKyAgICAgICAgICAg
IGVycm9yKGZ1bmN0aW9uKGRhdGEsIHN0YXR1cykgeworICAgICAgICAgICAgICAkc2NvcGUuZGF0
YSA9IGRhdGEgfHwgIlJlcXVlc3QgZmFpbGVkIjsKKyAgICAgICAgICAgICAgJHNjb3BlLnN0YXR1
cyA9IHN0YXR1czsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfTsKKworICAgICAgICAkc2NvcGUu
dXBkYXRlTW9kZWwgPSBmdW5jdGlvbihtZXRob2QsIHVybCkgeworICAgICAgICAgICRzY29wZS5t
ZXRob2QgPSBtZXRob2Q7CisgICAgICAgICAgJHNjb3BlLnVybCA9IHVybDsKKyAgICAgICAgfTsK
KyAgICAgIH1dKTsKKzwvZmlsZT4KKzxmaWxlIG5hbWU9Imh0dHAtaGVsbG8uaHRtbCI+CisgIEhl
bGxvLCAkaHR0cCEKKzwvZmlsZT4KKzxmaWxlIG5hbWU9InByb3RyYWN0b3IuanMiIHR5cGU9InBy
b3RyYWN0b3IiPgorICB2YXIgc3RhdHVzID0gZWxlbWVudChieS5iaW5kaW5nKCdzdGF0dXMnKSk7
CisgIHZhciBkYXRhID0gZWxlbWVudChieS5iaW5kaW5nKCdkYXRhJykpOworICB2YXIgZmV0Y2hC
dG4gPSBlbGVtZW50KGJ5LmlkKCdmZXRjaGJ0bicpKTsKKyAgdmFyIHNhbXBsZUdldEJ0biA9IGVs
ZW1lbnQoYnkuaWQoJ3NhbXBsZWdldGJ0bicpKTsKKyAgdmFyIHNhbXBsZUpzb25wQnRuID0gZWxl
bWVudChieS5pZCgnc2FtcGxlanNvbnBidG4nKSk7CisgIHZhciBpbnZhbGlkSnNvbnBCdG4gPSBl
bGVtZW50KGJ5LmlkKCdpbnZhbGlkanNvbnBidG4nKSk7CisKKyAgaXQoJ3Nob3VsZCBtYWtlIGFu
IHhociBHRVQgcmVxdWVzdCcsIGZ1bmN0aW9uKCkgeworICAgIHNhbXBsZUdldEJ0bi5jbGljaygp
OworICAgIGZldGNoQnRuLmNsaWNrKCk7CisgICAgZXhwZWN0KHN0YXR1cy5nZXRUZXh0KCkpLnRv
TWF0Y2goJzIwMCcpOworICAgIGV4cGVjdChkYXRhLmdldFRleHQoKSkudG9NYXRjaCgvSGVsbG8s
IFwkaHR0cCEvKTsKKyAgfSk7CisKKy8vIENvbW1lbnRlZCBvdXQgZHVlIHRvIGZsYWtlcy4gU2Vl
IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIuanMvaXNzdWVzLzkxODUKKy8vIGl0
KCdzaG91bGQgbWFrZSBhIEpTT05QIHJlcXVlc3QgdG8gYW5ndWxhcmpzLm9yZycsIGZ1bmN0aW9u
KCkgeworLy8gICBzYW1wbGVKc29ucEJ0bi5jbGljaygpOworLy8gICBmZXRjaEJ0bi5jbGljaygp
OworLy8gICBleHBlY3Qoc3RhdHVzLmdldFRleHQoKSkudG9NYXRjaCgnMjAwJyk7CisvLyAgIGV4
cGVjdChkYXRhLmdldFRleHQoKSkudG9NYXRjaCgvU3VwZXIgSGVybyEvKTsKKy8vIH0pOworCisg
IGl0KCdzaG91bGQgbWFrZSBKU09OUCByZXF1ZXN0IHRvIGludmFsaWQgVVJMIGFuZCBpbnZva2Ug
dGhlIGVycm9yIGhhbmRsZXInLAorICAgICAgZnVuY3Rpb24oKSB7CisgICAgaW52YWxpZEpzb25w
QnRuLmNsaWNrKCk7CisgICAgZmV0Y2hCdG4uY2xpY2soKTsKKyAgICBleHBlY3Qoc3RhdHVzLmdl
dFRleHQoKSkudG9NYXRjaCgnMCcpOworICAgIGV4cGVjdChkYXRhLmdldFRleHQoKSkudG9NYXRj
aCgnUmVxdWVzdCBmYWlsZWQnKTsKKyAgfSk7Cis8L2ZpbGU+Cis8L2V4YW1wbGU+CisgICAgICov
CisgICAgZnVuY3Rpb24gJGh0dHAocmVxdWVzdENvbmZpZykgeworCisgICAgICBpZiAoIWFuZ3Vs
YXIuaXNPYmplY3QocmVxdWVzdENvbmZpZykpIHsKKyAgICAgICAgdGhyb3cgbWluRXJyKCckaHR0
cCcpKCdiYWRyZXEnLCAnSHR0cCByZXF1ZXN0IGNvbmZpZ3VyYXRpb24gbXVzdCBiZSBhbiBvYmpl
Y3QuICBSZWNlaXZlZDogezB9JywgcmVxdWVzdENvbmZpZyk7CisgICAgICB9CisKKyAgICAgIHZh
ciBjb25maWcgPSBleHRlbmQoeworICAgICAgICBtZXRob2Q6ICdnZXQnLAorICAgICAgICB0cmFu
c2Zvcm1SZXF1ZXN0OiBkZWZhdWx0cy50cmFuc2Zvcm1SZXF1ZXN0LAorICAgICAgICB0cmFuc2Zv
cm1SZXNwb25zZTogZGVmYXVsdHMudHJhbnNmb3JtUmVzcG9uc2UsCisgICAgICAgIHBhcmFtU2Vy
aWFsaXplcjogZGVmYXVsdHMucGFyYW1TZXJpYWxpemVyCisgICAgICB9LCByZXF1ZXN0Q29uZmln
KTsKKworICAgICAgY29uZmlnLmhlYWRlcnMgPSBtZXJnZUhlYWRlcnMocmVxdWVzdENvbmZpZyk7
CisgICAgICBjb25maWcubWV0aG9kID0gdXBwZXJjYXNlKGNvbmZpZy5tZXRob2QpOworICAgICAg
Y29uZmlnLnBhcmFtU2VyaWFsaXplciA9IGlzU3RyaW5nKGNvbmZpZy5wYXJhbVNlcmlhbGl6ZXIp
ID8KKyAgICAgICAgJGluamVjdG9yLmdldChjb25maWcucGFyYW1TZXJpYWxpemVyKSA6IGNvbmZp
Zy5wYXJhbVNlcmlhbGl6ZXI7CisKKyAgICAgIHZhciBzZXJ2ZXJSZXF1ZXN0ID0gZnVuY3Rpb24o
Y29uZmlnKSB7CisgICAgICAgIHZhciBoZWFkZXJzID0gY29uZmlnLmhlYWRlcnM7CisgICAgICAg
IHZhciByZXFEYXRhID0gdHJhbnNmb3JtRGF0YShjb25maWcuZGF0YSwgaGVhZGVyc0dldHRlciho
ZWFkZXJzKSwgdW5kZWZpbmVkLCBjb25maWcudHJhbnNmb3JtUmVxdWVzdCk7CisKKyAgICAgICAg
Ly8gc3RyaXAgY29udGVudC10eXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkCisgICAgICAgIGlmIChp
c1VuZGVmaW5lZChyZXFEYXRhKSkgeworICAgICAgICAgIGZvckVhY2goaGVhZGVycywgZnVuY3Rp
b24odmFsdWUsIGhlYWRlcikgeworICAgICAgICAgICAgaWYgKGxvd2VyY2FzZShoZWFkZXIpID09
PSAnY29udGVudC10eXBlJykgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBoZWFkZXJzW2hlYWRl
cl07CisgICAgICAgICAgICB9CisgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoaXNVbmRlZmluZWQoY29uZmlnLndpdGhDcmVkZW50aWFscykgJiYgIWlzVW5kZWZpbmVkKGRl
ZmF1bHRzLndpdGhDcmVkZW50aWFscykpIHsKKyAgICAgICAgICBjb25maWcud2l0aENyZWRlbnRp
YWxzID0gZGVmYXVsdHMud2l0aENyZWRlbnRpYWxzOworICAgICAgICB9CisKKyAgICAgICAgLy8g
c2VuZCByZXF1ZXN0CisgICAgICAgIHJldHVybiBzZW5kUmVxKGNvbmZpZywgcmVxRGF0YSkudGhl
bih0cmFuc2Zvcm1SZXNwb25zZSwgdHJhbnNmb3JtUmVzcG9uc2UpOworICAgICAgfTsKKworICAg
ICAgdmFyIGNoYWluID0gW3NlcnZlclJlcXVlc3QsIHVuZGVmaW5lZF07CisgICAgICB2YXIgcHJv
bWlzZSA9ICRxLndoZW4oY29uZmlnKTsKKworICAgICAgLy8gYXBwbHkgaW50ZXJjZXB0b3JzCisg
ICAgICBmb3JFYWNoKHJldmVyc2VkSW50ZXJjZXB0b3JzLCBmdW5jdGlvbihpbnRlcmNlcHRvcikg
eworICAgICAgICBpZiAoaW50ZXJjZXB0b3IucmVxdWVzdCB8fCBpbnRlcmNlcHRvci5yZXF1ZXN0
RXJyb3IpIHsKKyAgICAgICAgICBjaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLnJlcXVlc3QsIGlu
dGVyY2VwdG9yLnJlcXVlc3RFcnJvcik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGludGVyY2Vw
dG9yLnJlc3BvbnNlIHx8IGludGVyY2VwdG9yLnJlc3BvbnNlRXJyb3IpIHsKKyAgICAgICAgICBj
aGFpbi5wdXNoKGludGVyY2VwdG9yLnJlc3BvbnNlLCBpbnRlcmNlcHRvci5yZXNwb25zZUVycm9y
KTsKKyAgICAgICAgfQorICAgICAgfSk7CisKKyAgICAgIHdoaWxlIChjaGFpbi5sZW5ndGgpIHsK
KyAgICAgICAgdmFyIHRoZW5GbiA9IGNoYWluLnNoaWZ0KCk7CisgICAgICAgIHZhciByZWplY3RG
biA9IGNoYWluLnNoaWZ0KCk7CisKKyAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbih0aGVu
Rm4sIHJlamVjdEZuKTsKKyAgICAgIH0KKworICAgICAgcHJvbWlzZS5zdWNjZXNzID0gZnVuY3Rp
b24oZm4pIHsKKyAgICAgICAgYXNzZXJ0QXJnRm4oZm4sICdmbicpOworCisgICAgICAgIHByb21p
c2UudGhlbihmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICAgIGZuKHJlc3BvbnNlLmRhdGEs
IHJlc3BvbnNlLnN0YXR1cywgcmVzcG9uc2UuaGVhZGVycywgY29uZmlnKTsKKyAgICAgICAgfSk7
CisgICAgICAgIHJldHVybiBwcm9taXNlOworICAgICAgfTsKKworICAgICAgcHJvbWlzZS5lcnJv
ciA9IGZ1bmN0aW9uKGZuKSB7CisgICAgICAgIGFzc2VydEFyZ0ZuKGZuLCAnZm4nKTsKKworICAg
ICAgICBwcm9taXNlLnRoZW4obnVsbCwgZnVuY3Rpb24ocmVzcG9uc2UpIHsKKyAgICAgICAgICBm
bihyZXNwb25zZS5kYXRhLCByZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLmhlYWRlcnMsIGNvbmZp
Zyk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcHJvbWlzZTsKKyAgICAgIH07CisKKyAg
ICAgIHJldHVybiBwcm9taXNlOworCisgICAgICBmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShy
ZXNwb25zZSkgeworICAgICAgICAvLyBtYWtlIGEgY29weSBzaW5jZSB0aGUgcmVzcG9uc2UgbXVz
dCBiZSBjYWNoZWFibGUKKyAgICAgICAgdmFyIHJlc3AgPSBleHRlbmQoe30sIHJlc3BvbnNlKTsK
KyAgICAgICAgaWYgKCFyZXNwb25zZS5kYXRhKSB7CisgICAgICAgICAgcmVzcC5kYXRhID0gcmVz
cG9uc2UuZGF0YTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXNwLmRhdGEgPSB0cmFu
c2Zvcm1EYXRhKHJlc3BvbnNlLmRhdGEsIHJlc3BvbnNlLmhlYWRlcnMsIHJlc3BvbnNlLnN0YXR1
cywgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
KGlzU3VjY2VzcyhyZXNwb25zZS5zdGF0dXMpKQorICAgICAgICAgID8gcmVzcAorICAgICAgICAg
IDogJHEucmVqZWN0KHJlc3ApOworICAgICAgfQorCisgICAgICBmdW5jdGlvbiBleGVjdXRlSGVh
ZGVyRm5zKGhlYWRlcnMsIGNvbmZpZykgeworICAgICAgICB2YXIgaGVhZGVyQ29udGVudCwgcHJv
Y2Vzc2VkSGVhZGVycyA9IHt9OworCisgICAgICAgIGZvckVhY2goaGVhZGVycywgZnVuY3Rpb24o
aGVhZGVyRm4sIGhlYWRlcikgeworICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGhlYWRlckZuKSkg
eworICAgICAgICAgICAgaGVhZGVyQ29udGVudCA9IGhlYWRlckZuKGNvbmZpZyk7CisgICAgICAg
ICAgICBpZiAoaGVhZGVyQ29udGVudCAhPSBudWxsKSB7CisgICAgICAgICAgICAgIHByb2Nlc3Nl
ZEhlYWRlcnNbaGVhZGVyXSA9IGhlYWRlckNvbnRlbnQ7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByb2Nlc3NlZEhlYWRlcnNbaGVhZGVyXSA9IGhlYWRl
ckZuOworICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIHByb2Nlc3Nl
ZEhlYWRlcnM7CisgICAgICB9CisKKyAgICAgIGZ1bmN0aW9uIG1lcmdlSGVhZGVycyhjb25maWcp
IHsKKyAgICAgICAgdmFyIGRlZkhlYWRlcnMgPSBkZWZhdWx0cy5oZWFkZXJzLAorICAgICAgICAg
ICAgcmVxSGVhZGVycyA9IGV4dGVuZCh7fSwgY29uZmlnLmhlYWRlcnMpLAorICAgICAgICAgICAg
ZGVmSGVhZGVyTmFtZSwgbG93ZXJjYXNlRGVmSGVhZGVyTmFtZSwgcmVxSGVhZGVyTmFtZTsKKwor
ICAgICAgICBkZWZIZWFkZXJzID0gZXh0ZW5kKHt9LCBkZWZIZWFkZXJzLmNvbW1vbiwgZGVmSGVh
ZGVyc1tsb3dlcmNhc2UoY29uZmlnLm1ldGhvZCldKTsKKworICAgICAgICAvLyB1c2luZyBmb3It
aW4gaW5zdGVhZCBvZiBmb3JFYWNoIHRvIGF2b2lkIHVuZWNlc3NhcnkgaXRlcmF0aW9uIGFmdGVy
IGhlYWRlciBoYXMgYmVlbiBmb3VuZAorICAgICAgICBkZWZhdWx0SGVhZGVyc0l0ZXJhdGlvbjoK
KyAgICAgICAgZm9yIChkZWZIZWFkZXJOYW1lIGluIGRlZkhlYWRlcnMpIHsKKyAgICAgICAgICBs
b3dlcmNhc2VEZWZIZWFkZXJOYW1lID0gbG93ZXJjYXNlKGRlZkhlYWRlck5hbWUpOworCisgICAg
ICAgICAgZm9yIChyZXFIZWFkZXJOYW1lIGluIHJlcUhlYWRlcnMpIHsKKyAgICAgICAgICAgIGlm
IChsb3dlcmNhc2UocmVxSGVhZGVyTmFtZSkgPT09IGxvd2VyY2FzZURlZkhlYWRlck5hbWUpIHsK
KyAgICAgICAgICAgICAgY29udGludWUgZGVmYXVsdEhlYWRlcnNJdGVyYXRpb247CisgICAgICAg
ICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgcmVxSGVhZGVyc1tkZWZIZWFkZXJOYW1l
XSA9IGRlZkhlYWRlcnNbZGVmSGVhZGVyTmFtZV07CisgICAgICAgIH0KKworICAgICAgICAvLyBl
eGVjdXRlIGlmIGhlYWRlciB2YWx1ZSBpcyBhIGZ1bmN0aW9uIGZvciBtZXJnZWQgaGVhZGVycwor
ICAgICAgICByZXR1cm4gZXhlY3V0ZUhlYWRlckZucyhyZXFIZWFkZXJzLCBzaGFsbG93Q29weShj
b25maWcpKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAkaHR0cC5wZW5kaW5nUmVxdWVzdHMgPSBb
XTsKKworICAgIC8qKgorICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgKiBAbmFtZSAkaHR0cCNn
ZXQKKyAgICAgKgorICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAqIFNob3J0Y3V0IG1ldGhvZCB0
byBwZXJmb3JtIGBHRVRgIHJlcXVlc3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30g
dXJsIFJlbGF0aXZlIG9yIGFic29sdXRlIFVSTCBzcGVjaWZ5aW5nIHRoZSBkZXN0aW5hdGlvbiBv
ZiB0aGUgcmVxdWVzdAorICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIE9wdGlvbmFsIGNv
bmZpZ3VyYXRpb24gb2JqZWN0CisgICAgICogQHJldHVybnMge0h0dHBQcm9taXNlfSBGdXR1cmUg
b2JqZWN0CisgICAgICovCisKKyAgICAvKioKKyAgICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICog
QG5hbWUgJGh0dHAjZGVsZXRlCisgICAgICoKKyAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgKiBT
aG9ydGN1dCBtZXRob2QgdG8gcGVyZm9ybSBgREVMRVRFYCByZXF1ZXN0LgorICAgICAqCisgICAg
ICogQHBhcmFtIHtzdHJpbmd9IHVybCBSZWxhdGl2ZSBvciBhYnNvbHV0ZSBVUkwgc3BlY2lmeWlu
ZyB0aGUgZGVzdGluYXRpb24gb2YgdGhlIHJlcXVlc3QKKyAgICAgKiBAcGFyYW0ge09iamVjdD19
IGNvbmZpZyBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9iamVjdAorICAgICAqIEByZXR1cm5zIHtI
dHRwUHJvbWlzZX0gRnV0dXJlIG9iamVjdAorICAgICAqLworCisgICAgLyoqCisgICAgICogQG5n
ZG9jIG1ldGhvZAorICAgICAqIEBuYW1lICRodHRwI2hlYWQKKyAgICAgKgorICAgICAqIEBkZXNj
cmlwdGlvbgorICAgICAqIFNob3J0Y3V0IG1ldGhvZCB0byBwZXJmb3JtIGBIRUFEYCByZXF1ZXN0
LgorICAgICAqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBSZWxhdGl2ZSBvciBhYnNvbHV0
ZSBVUkwgc3BlY2lmeWluZyB0aGUgZGVzdGluYXRpb24gb2YgdGhlIHJlcXVlc3QKKyAgICAgKiBA
cGFyYW0ge09iamVjdD19IGNvbmZpZyBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9iamVjdAorICAg
ICAqIEByZXR1cm5zIHtIdHRwUHJvbWlzZX0gRnV0dXJlIG9iamVjdAorICAgICAqLworCisgICAg
LyoqCisgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAqIEBuYW1lICRodHRwI2pzb25wCisgICAg
ICoKKyAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgKiBTaG9ydGN1dCBtZXRob2QgdG8gcGVyZm9y
bSBgSlNPTlBgIHJlcXVlc3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFJl
bGF0aXZlIG9yIGFic29sdXRlIFVSTCBzcGVjaWZ5aW5nIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUg
cmVxdWVzdC4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBjYWxs
YmFjayBzaG91bGQgYmUgdGhlIHN0cmluZyBgSlNPTl9DQUxMQkFDS2AuCisgICAgICogQHBhcmFt
IHtPYmplY3Q9fSBjb25maWcgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvYmplY3QKKyAgICAgKiBA
cmV0dXJucyB7SHR0cFByb21pc2V9IEZ1dHVyZSBvYmplY3QKKyAgICAgKi8KKyAgICBjcmVhdGVT
aG9ydE1ldGhvZHMoJ2dldCcsICdkZWxldGUnLCAnaGVhZCcsICdqc29ucCcpOworCisgICAgLyoq
CisgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAqIEBuYW1lICRodHRwI3Bvc3QKKyAgICAgKgor
ICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAqIFNob3J0Y3V0IG1ldGhvZCB0byBwZXJmb3JtIGBQ
T1NUYCByZXF1ZXN0LgorICAgICAqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBSZWxhdGl2
ZSBvciBhYnNvbHV0ZSBVUkwgc3BlY2lmeWluZyB0aGUgZGVzdGluYXRpb24gb2YgdGhlIHJlcXVl
c3QKKyAgICAgKiBAcGFyYW0geyp9IGRhdGEgUmVxdWVzdCBjb250ZW50CisgICAgICogQHBhcmFt
IHtPYmplY3Q9fSBjb25maWcgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvYmplY3QKKyAgICAgKiBA
cmV0dXJucyB7SHR0cFByb21pc2V9IEZ1dHVyZSBvYmplY3QKKyAgICAgKi8KKworICAgIC8qKgor
ICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgKiBAbmFtZSAkaHR0cCNwdXQKKyAgICAgKgorICAg
ICAqIEBkZXNjcmlwdGlvbgorICAgICAqIFNob3J0Y3V0IG1ldGhvZCB0byBwZXJmb3JtIGBQVVRg
IHJlcXVlc3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFJlbGF0aXZlIG9y
IGFic29sdXRlIFVSTCBzcGVjaWZ5aW5nIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgcmVxdWVzdAor
ICAgICAqIEBwYXJhbSB7Kn0gZGF0YSBSZXF1ZXN0IGNvbnRlbnQKKyAgICAgKiBAcGFyYW0ge09i
amVjdD19IGNvbmZpZyBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9iamVjdAorICAgICAqIEByZXR1
cm5zIHtIdHRwUHJvbWlzZX0gRnV0dXJlIG9iamVjdAorICAgICAqLworCisgICAgIC8qKgorICAg
ICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICAqIEBuYW1lICRodHRwI3BhdGNoCisgICAgICAqCisg
ICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAgKiBTaG9ydGN1dCBtZXRob2QgdG8gcGVyZm9ybSBg
UEFUQ0hgIHJlcXVlc3QuCisgICAgICAqCisgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgUmVs
YXRpdmUgb3IgYWJzb2x1dGUgVVJMIHNwZWNpZnlpbmcgdGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBy
ZXF1ZXN0CisgICAgICAqIEBwYXJhbSB7Kn0gZGF0YSBSZXF1ZXN0IGNvbnRlbnQKKyAgICAgICog
QHBhcmFtIHtPYmplY3Q9fSBjb25maWcgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvYmplY3QKKyAg
ICAgICogQHJldHVybnMge0h0dHBQcm9taXNlfSBGdXR1cmUgb2JqZWN0CisgICAgICAqLworICAg
IGNyZWF0ZVNob3J0TWV0aG9kc1dpdGhEYXRhKCdwb3N0JywgJ3B1dCcsICdwYXRjaCcpOworCisg
ICAgICAgIC8qKgorICAgICAgICAgKiBAbmdkb2MgcHJvcGVydHkKKyAgICAgICAgICogQG5hbWUg
JGh0dHAjZGVmYXVsdHMKKyAgICAgICAgICoKKyAgICAgICAgICogQGRlc2NyaXB0aW9uCisgICAg
ICAgICAqIFJ1bnRpbWUgZXF1aXZhbGVudCBvZiB0aGUgYCRodHRwUHJvdmlkZXIuZGVmYXVsdHNg
IHByb3BlcnR5LiBBbGxvd3MgY29uZmlndXJhdGlvbiBvZgorICAgICAgICAgKiBkZWZhdWx0IGhl
YWRlcnMsIHdpdGhDcmVkZW50aWFscyBhcyB3ZWxsIGFzIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHRy
YW5zZm9ybWF0aW9ucy4KKyAgICAgICAgICoKKyAgICAgICAgICogU2VlICJTZXR0aW5nIEhUVFAg
SGVhZGVycyIgYW5kICJUcmFuc2Zvcm1pbmcgUmVxdWVzdHMgYW5kIFJlc3BvbnNlcyIgc2VjdGlv
bnMgYWJvdmUuCisgICAgICAgICAqLworICAgICRodHRwLmRlZmF1bHRzID0gZGVmYXVsdHM7CisK
KworICAgIHJldHVybiAkaHR0cDsKKworCisgICAgZnVuY3Rpb24gY3JlYXRlU2hvcnRNZXRob2Rz
KG5hbWVzKSB7CisgICAgICBmb3JFYWNoKGFyZ3VtZW50cywgZnVuY3Rpb24obmFtZSkgeworICAg
ICAgICAkaHR0cFtuYW1lXSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7CisgICAgICAgICAgcmV0
dXJuICRodHRwKGV4dGVuZCh7fSwgY29uZmlnIHx8IHt9LCB7CisgICAgICAgICAgICBtZXRob2Q6
IG5hbWUsCisgICAgICAgICAgICB1cmw6IHVybAorICAgICAgICAgIH0pKTsKKyAgICAgICAgfTsK
KyAgICAgIH0pOworICAgIH0KKworCisgICAgZnVuY3Rpb24gY3JlYXRlU2hvcnRNZXRob2RzV2l0
aERhdGEobmFtZSkgeworICAgICAgZm9yRWFjaChhcmd1bWVudHMsIGZ1bmN0aW9uKG5hbWUpIHsK
KyAgICAgICAgJGh0dHBbbmFtZV0gPSBmdW5jdGlvbih1cmwsIGRhdGEsIGNvbmZpZykgeworICAg
ICAgICAgIHJldHVybiAkaHR0cChleHRlbmQoe30sIGNvbmZpZyB8fCB7fSwgeworICAgICAgICAg
ICAgbWV0aG9kOiBuYW1lLAorICAgICAgICAgICAgdXJsOiB1cmwsCisgICAgICAgICAgICBkYXRh
OiBkYXRhCisgICAgICAgICAgfSkpOworICAgICAgICB9OworICAgICAgfSk7CisgICAgfQorCisK
KyAgICAvKioKKyAgICAgKiBNYWtlcyB0aGUgcmVxdWVzdC4KKyAgICAgKgorICAgICAqICEhISBB
Q0NFU1NFUyBDTE9TVVJFIFZBUlM6CisgICAgICogJGh0dHBCYWNrZW5kLCBkZWZhdWx0cywgJGxv
ZywgJHJvb3RTY29wZSwgZGVmYXVsdENhY2hlLCAkaHR0cC5wZW5kaW5nUmVxdWVzdHMKKyAgICAg
Ki8KKyAgICBmdW5jdGlvbiBzZW5kUmVxKGNvbmZpZywgcmVxRGF0YSkgeworICAgICAgdmFyIGRl
ZmVycmVkID0gJHEuZGVmZXIoKSwKKyAgICAgICAgICBwcm9taXNlID0gZGVmZXJyZWQucHJvbWlz
ZSwKKyAgICAgICAgICBjYWNoZSwKKyAgICAgICAgICBjYWNoZWRSZXNwLAorICAgICAgICAgIHJl
cUhlYWRlcnMgPSBjb25maWcuaGVhZGVycywKKyAgICAgICAgICB1cmwgPSBidWlsZFVybChjb25m
aWcudXJsLCBjb25maWcucGFyYW1TZXJpYWxpemVyKGNvbmZpZy5wYXJhbXMpKTsKKworICAgICAg
JGh0dHAucGVuZGluZ1JlcXVlc3RzLnB1c2goY29uZmlnKTsKKyAgICAgIHByb21pc2UudGhlbihy
ZW1vdmVQZW5kaW5nUmVxLCByZW1vdmVQZW5kaW5nUmVxKTsKKworCisgICAgICBpZiAoKGNvbmZp
Zy5jYWNoZSB8fCBkZWZhdWx0cy5jYWNoZSkgJiYgY29uZmlnLmNhY2hlICE9PSBmYWxzZSAmJgor
ICAgICAgICAgIChjb25maWcubWV0aG9kID09PSAnR0VUJyB8fCBjb25maWcubWV0aG9kID09PSAn
SlNPTlAnKSkgeworICAgICAgICBjYWNoZSA9IGlzT2JqZWN0KGNvbmZpZy5jYWNoZSkgPyBjb25m
aWcuY2FjaGUKKyAgICAgICAgICAgICAgOiBpc09iamVjdChkZWZhdWx0cy5jYWNoZSkgPyBkZWZh
dWx0cy5jYWNoZQorICAgICAgICAgICAgICA6IGRlZmF1bHRDYWNoZTsKKyAgICAgIH0KKworICAg
ICAgaWYgKGNhY2hlKSB7CisgICAgICAgIGNhY2hlZFJlc3AgPSBjYWNoZS5nZXQodXJsKTsKKyAg
ICAgICAgaWYgKGlzRGVmaW5lZChjYWNoZWRSZXNwKSkgeworICAgICAgICAgIGlmIChpc1Byb21p
c2VMaWtlKGNhY2hlZFJlc3ApKSB7CisgICAgICAgICAgICAvLyBjYWNoZWQgcmVxdWVzdCBoYXMg
YWxyZWFkeSBiZWVuIHNlbnQsIGJ1dCB0aGVyZSBpcyBubyByZXNwb25zZSB5ZXQKKyAgICAgICAg
ICAgIGNhY2hlZFJlc3AudGhlbihyZXNvbHZlUHJvbWlzZVdpdGhSZXN1bHQsIHJlc29sdmVQcm9t
aXNlV2l0aFJlc3VsdCk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIHNlcnZp
bmcgZnJvbSBjYWNoZQorICAgICAgICAgICAgaWYgKGlzQXJyYXkoY2FjaGVkUmVzcCkpIHsKKyAg
ICAgICAgICAgICAgcmVzb2x2ZVByb21pc2UoY2FjaGVkUmVzcFsxXSwgY2FjaGVkUmVzcFswXSwg
c2hhbGxvd0NvcHkoY2FjaGVkUmVzcFsyXSksIGNhY2hlZFJlc3BbM10pOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgcmVzb2x2ZVByb21pc2UoY2FjaGVkUmVzcCwgMjAwLCB7
fSwgJ09LJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgIC8vIHB1dCB0aGUgcHJvbWlzZSBmb3IgdGhlIG5vbi10cmFuc2Zvcm1lZCByZXNw
b25zZSBpbnRvIGNhY2hlIGFzIGEgcGxhY2Vob2xkZXIKKyAgICAgICAgICBjYWNoZS5wdXQodXJs
LCBwcm9taXNlKTsKKyAgICAgICAgfQorICAgICAgfQorCisKKyAgICAgIC8vIGlmIHdlIHdvbid0
IGhhdmUgdGhlIHJlc3BvbnNlIGluIGNhY2hlLCBzZXQgdGhlIHhzcmYgaGVhZGVycyBhbmQKKyAg
ICAgIC8vIHNlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIGJhY2tlbmQKKyAgICAgIGlmIChpc1VuZGVm
aW5lZChjYWNoZWRSZXNwKSkgeworICAgICAgICB2YXIgeHNyZlZhbHVlID0gdXJsSXNTYW1lT3Jp
Z2luKGNvbmZpZy51cmwpCisgICAgICAgICAgICA/ICQkY29va2llUmVhZGVyKClbY29uZmlnLnhz
cmZDb29raWVOYW1lIHx8IGRlZmF1bHRzLnhzcmZDb29raWVOYW1lXQorICAgICAgICAgICAgOiB1
bmRlZmluZWQ7CisgICAgICAgIGlmICh4c3JmVmFsdWUpIHsKKyAgICAgICAgICByZXFIZWFkZXJz
Wyhjb25maWcueHNyZkhlYWRlck5hbWUgfHwgZGVmYXVsdHMueHNyZkhlYWRlck5hbWUpXSA9IHhz
cmZWYWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgICRodHRwQmFja2VuZChjb25maWcubWV0aG9k
LCB1cmwsIHJlcURhdGEsIGRvbmUsIHJlcUhlYWRlcnMsIGNvbmZpZy50aW1lb3V0LAorICAgICAg
ICAgICAgY29uZmlnLndpdGhDcmVkZW50aWFscywgY29uZmlnLnJlc3BvbnNlVHlwZSk7CisgICAg
ICB9CisKKyAgICAgIHJldHVybiBwcm9taXNlOworCisKKyAgICAgIC8qKgorICAgICAgICogQ2Fs
bGJhY2sgcmVnaXN0ZXJlZCB0byAkaHR0cEJhY2tlbmQoKToKKyAgICAgICAqICAtIGNhY2hlcyB0
aGUgcmVzcG9uc2UgaWYgZGVzaXJlZAorICAgICAgICogIC0gcmVzb2x2ZXMgdGhlIHJhdyAkaHR0
cCBwcm9taXNlCisgICAgICAgKiAgLSBjYWxscyAkYXBwbHkKKyAgICAgICAqLworICAgICAgZnVu
Y3Rpb24gZG9uZShzdGF0dXMsIHJlc3BvbnNlLCBoZWFkZXJzU3RyaW5nLCBzdGF0dXNUZXh0KSB7
CisgICAgICAgIGlmIChjYWNoZSkgeworICAgICAgICAgIGlmIChpc1N1Y2Nlc3Moc3RhdHVzKSkg
eworICAgICAgICAgICAgY2FjaGUucHV0KHVybCwgW3N0YXR1cywgcmVzcG9uc2UsIHBhcnNlSGVh
ZGVycyhoZWFkZXJzU3RyaW5nKSwgc3RhdHVzVGV4dF0pOworICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAvLyByZW1vdmUgcHJvbWlzZSBmcm9tIHRoZSBjYWNoZQorICAgICAgICAgICAg
Y2FjaGUucmVtb3ZlKHVybCk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZnVu
Y3Rpb24gcmVzb2x2ZUh0dHBQcm9taXNlKCkgeworICAgICAgICAgIHJlc29sdmVQcm9taXNlKHJl
c3BvbnNlLCBzdGF0dXMsIGhlYWRlcnNTdHJpbmcsIHN0YXR1c1RleHQpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHVzZUFwcGx5QXN5bmMpIHsKKyAgICAgICAgICAkcm9vdFNjb3BlLiRhcHBs
eUFzeW5jKHJlc29sdmVIdHRwUHJvbWlzZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
cmVzb2x2ZUh0dHBQcm9taXNlKCk7CisgICAgICAgICAgaWYgKCEkcm9vdFNjb3BlLiQkcGhhc2Up
ICRyb290U2NvcGUuJGFwcGx5KCk7CisgICAgICAgIH0KKyAgICAgIH0KKworCisgICAgICAvKioK
KyAgICAgICAqIFJlc29sdmVzIHRoZSByYXcgJGh0dHAgcHJvbWlzZS4KKyAgICAgICAqLworICAg
ICAgZnVuY3Rpb24gcmVzb2x2ZVByb21pc2UocmVzcG9uc2UsIHN0YXR1cywgaGVhZGVycywgc3Rh
dHVzVGV4dCkgeworICAgICAgICAvLyBub3JtYWxpemUgaW50ZXJuYWwgc3RhdHVzZXMgdG8gMAor
ICAgICAgICBzdGF0dXMgPSBNYXRoLm1heChzdGF0dXMsIDApOworCisgICAgICAgIChpc1N1Y2Nl
c3Moc3RhdHVzKSA/IGRlZmVycmVkLnJlc29sdmUgOiBkZWZlcnJlZC5yZWplY3QpKHsKKyAgICAg
ICAgICBkYXRhOiByZXNwb25zZSwKKyAgICAgICAgICBzdGF0dXM6IHN0YXR1cywKKyAgICAgICAg
ICBoZWFkZXJzOiBoZWFkZXJzR2V0dGVyKGhlYWRlcnMpLAorICAgICAgICAgIGNvbmZpZzogY29u
ZmlnLAorICAgICAgICAgIHN0YXR1c1RleHQ6IHN0YXR1c1RleHQKKyAgICAgICAgfSk7CisgICAg
ICB9CisKKyAgICAgIGZ1bmN0aW9uIHJlc29sdmVQcm9taXNlV2l0aFJlc3VsdChyZXN1bHQpIHsK
KyAgICAgICAgcmVzb2x2ZVByb21pc2UocmVzdWx0LmRhdGEsIHJlc3VsdC5zdGF0dXMsIHNoYWxs
b3dDb3B5KHJlc3VsdC5oZWFkZXJzKCkpLCByZXN1bHQuc3RhdHVzVGV4dCk7CisgICAgICB9CisK
KyAgICAgIGZ1bmN0aW9uIHJlbW92ZVBlbmRpbmdSZXEoKSB7CisgICAgICAgIHZhciBpZHggPSAk
aHR0cC5wZW5kaW5nUmVxdWVzdHMuaW5kZXhPZihjb25maWcpOworICAgICAgICBpZiAoaWR4ICE9
PSAtMSkgJGh0dHAucGVuZGluZ1JlcXVlc3RzLnNwbGljZShpZHgsIDEpOworICAgICAgfQorICAg
IH0KKworCisgICAgZnVuY3Rpb24gYnVpbGRVcmwodXJsLCBzZXJpYWxpemVkUGFyYW1zKSB7Cisg
ICAgICBpZiAoc2VyaWFsaXplZFBhcmFtcy5sZW5ndGggPiAwKSB7CisgICAgICAgIHVybCArPSAo
KHVybC5pbmRleE9mKCc/JykgPT0gLTEpID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7
CisgICAgICB9CisgICAgICByZXR1cm4gdXJsOworICAgIH0KKyAgfV07Cit9CisKK2Z1bmN0aW9u
IGNyZWF0ZVhocigpIHsKKyAgICByZXR1cm4gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpOwor
fQorCisvKioKKyAqIEBuZ2RvYyBzZXJ2aWNlCisgKiBAbmFtZSAkaHR0cEJhY2tlbmQKKyAqIEBy
ZXF1aXJlcyAkd2luZG93CisgKiBAcmVxdWlyZXMgJGRvY3VtZW50CisgKgorICogQGRlc2NyaXB0
aW9uCisgKiBIVFRQIGJhY2tlbmQgdXNlZCBieSB0aGUge0BsaW5rIG5nLiRodHRwIHNlcnZpY2V9
IHRoYXQgZGVsZWdhdGVzIHRvCisgKiBYTUxIdHRwUmVxdWVzdCBvYmplY3Qgb3IgSlNPTlAgYW5k
IGRlYWxzIHdpdGggYnJvd3NlciBpbmNvbXBhdGliaWxpdGllcy4KKyAqCisgKiBZb3Ugc2hvdWxk
IG5ldmVyIG5lZWQgdG8gdXNlIHRoaXMgc2VydmljZSBkaXJlY3RseSwgaW5zdGVhZCB1c2UgdGhl
IGhpZ2hlci1sZXZlbCBhYnN0cmFjdGlvbnM6CisgKiB7QGxpbmsgbmcuJGh0dHAgJGh0dHB9IG9y
IHtAbGluayBuZ1Jlc291cmNlLiRyZXNvdXJjZSAkcmVzb3VyY2V9LgorICoKKyAqIER1cmluZyB0
ZXN0aW5nIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgc3dhcHBlZCB3aXRoIHtAbGluayBuZ01vY2su
JGh0dHBCYWNrZW5kIG1vY2sKKyAqICRodHRwQmFja2VuZH0gd2hpY2ggY2FuIGJlIHRyYWluZWQg
d2l0aCByZXNwb25zZXMuCisgKi8KK2Z1bmN0aW9uICRIdHRwQmFja2VuZFByb3ZpZGVyKCkgewor
ICB0aGlzLiRnZXQgPSBbJyRicm93c2VyJywgJyR3aW5kb3cnLCAnJGRvY3VtZW50JywgZnVuY3Rp
b24oJGJyb3dzZXIsICR3aW5kb3csICRkb2N1bWVudCkgeworICAgIHJldHVybiBjcmVhdGVIdHRw
QmFja2VuZCgkYnJvd3NlciwgY3JlYXRlWGhyLCAkYnJvd3Nlci5kZWZlciwgJHdpbmRvdy5hbmd1
bGFyLmNhbGxiYWNrcywgJGRvY3VtZW50WzBdKTsKKyAgfV07Cit9CisKK2Z1bmN0aW9uIGNyZWF0
ZUh0dHBCYWNrZW5kKCRicm93c2VyLCBjcmVhdGVYaHIsICRicm93c2VyRGVmZXIsIGNhbGxiYWNr
cywgcmF3RG9jdW1lbnQpIHsKKyAgLy8gVE9ETyh2b2p0YSk6IGZpeCB0aGUgc2lnbmF0dXJlCisg
IHJldHVybiBmdW5jdGlvbihtZXRob2QsIHVybCwgcG9zdCwgY2FsbGJhY2ssIGhlYWRlcnMsIHRp
bWVvdXQsIHdpdGhDcmVkZW50aWFscywgcmVzcG9uc2VUeXBlKSB7CisgICAgJGJyb3dzZXIuJCRp
bmNPdXRzdGFuZGluZ1JlcXVlc3RDb3VudCgpOworICAgIHVybCA9IHVybCB8fCAkYnJvd3Nlci51
cmwoKTsKKworICAgIGlmIChsb3dlcmNhc2UobWV0aG9kKSA9PSAnanNvbnAnKSB7CisgICAgICB2
YXIgY2FsbGJhY2tJZCA9ICdfJyArIChjYWxsYmFja3MuY291bnRlcisrKS50b1N0cmluZygzNik7
CisgICAgICBjYWxsYmFja3NbY2FsbGJhY2tJZF0gPSBmdW5jdGlvbihkYXRhKSB7CisgICAgICAg
IGNhbGxiYWNrc1tjYWxsYmFja0lkXS5kYXRhID0gZGF0YTsKKyAgICAgICAgY2FsbGJhY2tzW2Nh
bGxiYWNrSWRdLmNhbGxlZCA9IHRydWU7CisgICAgICB9OworCisgICAgICB2YXIganNvbnBEb25l
ID0ganNvbnBSZXEodXJsLnJlcGxhY2UoJ0pTT05fQ0FMTEJBQ0snLCAnYW5ndWxhci5jYWxsYmFj
a3MuJyArIGNhbGxiYWNrSWQpLAorICAgICAgICAgIGNhbGxiYWNrSWQsIGZ1bmN0aW9uKHN0YXR1
cywgdGV4dCkgeworICAgICAgICBjb21wbGV0ZVJlcXVlc3QoY2FsbGJhY2ssIHN0YXR1cywgY2Fs
bGJhY2tzW2NhbGxiYWNrSWRdLmRhdGEsICIiLCB0ZXh0KTsKKyAgICAgICAgY2FsbGJhY2tzW2Nh
bGxiYWNrSWRdID0gbm9vcDsKKyAgICAgIH0pOworICAgIH0gZWxzZSB7CisKKyAgICAgIHZhciB4
aHIgPSBjcmVhdGVYaHIoKTsKKworICAgICAgeGhyLm9wZW4obWV0aG9kLCB1cmwsIHRydWUpOwor
ICAgICAgZm9yRWFjaChoZWFkZXJzLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7CisgICAgICAgIGlm
IChpc0RlZmluZWQodmFsdWUpKSB7CisgICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihr
ZXksIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgfSk7CisKKyAgICAgIHhoci5vbmxvYWQgPSBm
dW5jdGlvbiByZXF1ZXN0TG9hZGVkKCkgeworICAgICAgICB2YXIgc3RhdHVzVGV4dCA9IHhoci5z
dGF0dXNUZXh0IHx8ICcnOworCisgICAgICAgIC8vIHJlc3BvbnNlVGV4dCBpcyB0aGUgb2xkLXNj
aG9vbCB3YXkgb2YgcmV0cmlldmluZyByZXNwb25zZSAoc3VwcG9ydGVkIGJ5IElFOCAmIDkpCisg
ICAgICAgIC8vIHJlc3BvbnNlL3Jlc3BvbnNlVHlwZSBwcm9wZXJ0aWVzIHdlcmUgaW50cm9kdWNl
ZCBpbiBYSFIgTGV2ZWwyIHNwZWMgKHN1cHBvcnRlZCBieSBJRTEwKQorICAgICAgICB2YXIgcmVz
cG9uc2UgPSAoJ3Jlc3BvbnNlJyBpbiB4aHIpID8geGhyLnJlc3BvbnNlIDogeGhyLnJlc3BvbnNl
VGV4dDsKKworICAgICAgICAvLyBub3JtYWxpemUgSUU5IGJ1ZyAoaHR0cDovL2J1Z3MuanF1ZXJ5
LmNvbS90aWNrZXQvMTQ1MCkKKyAgICAgICAgdmFyIHN0YXR1cyA9IHhoci5zdGF0dXMgPT09IDEy
MjMgPyAyMDQgOiB4aHIuc3RhdHVzOworCisgICAgICAgIC8vIGZpeCBzdGF0dXMgY29kZSB3aGVu
IGl0IGlzIDAgKDAgc3RhdHVzIGlzIHVuZG9jdW1lbnRlZCkuCisgICAgICAgIC8vIE9jY3VycyB3
aGVuIGFjY2Vzc2luZyBmaWxlIHJlc291cmNlcyBvciBvbiBBbmRyb2lkIDQuMSBzdG9jayBicm93
c2VyCisgICAgICAgIC8vIHdoaWxlIHJldHJpZXZpbmcgZmlsZXMgZnJvbSBhcHBsaWNhdGlvbiBj
YWNoZS4KKyAgICAgICAgaWYgKHN0YXR1cyA9PT0gMCkgeworICAgICAgICAgIHN0YXR1cyA9IHJl
c3BvbnNlID8gMjAwIDogdXJsUmVzb2x2ZSh1cmwpLnByb3RvY29sID09ICdmaWxlJyA/IDQwNCA6
IDA7CisgICAgICAgIH0KKworICAgICAgICBjb21wbGV0ZVJlcXVlc3QoY2FsbGJhY2ssCisgICAg
ICAgICAgICBzdGF0dXMsCisgICAgICAgICAgICByZXNwb25zZSwKKyAgICAgICAgICAgIHhoci5n
ZXRBbGxSZXNwb25zZUhlYWRlcnMoKSwKKyAgICAgICAgICAgIHN0YXR1c1RleHQpOworICAgICAg
fTsKKworICAgICAgdmFyIHJlcXVlc3RFcnJvciA9IGZ1bmN0aW9uKCkgeworICAgICAgICAvLyBU
aGUgcmVzcG9uc2UgaXMgYWx3YXlzIGVtcHR5CisgICAgICAgIC8vIFNlZSBodHRwczovL3hoci5z
cGVjLndoYXR3Zy5vcmcvI3JlcXVlc3QtZXJyb3Itc3RlcHMgYW5kIGh0dHBzOi8vZmV0Y2guc3Bl
Yy53aGF0d2cub3JnLyNjb25jZXB0LW5ldHdvcmstZXJyb3IKKyAgICAgICAgY29tcGxldGVSZXF1
ZXN0KGNhbGxiYWNrLCAtMSwgbnVsbCwgbnVsbCwgJycpOworICAgICAgfTsKKworICAgICAgeGhy
Lm9uZXJyb3IgPSByZXF1ZXN0RXJyb3I7CisgICAgICB4aHIub25hYm9ydCA9IHJlcXVlc3RFcnJv
cjsKKworICAgICAgaWYgKHdpdGhDcmVkZW50aWFscykgeworICAgICAgICB4aHIud2l0aENyZWRl
bnRpYWxzID0gdHJ1ZTsKKyAgICAgIH0KKworICAgICAgaWYgKHJlc3BvbnNlVHlwZSkgeworICAg
ICAgICB0cnkgeworICAgICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGU7Cisg
ICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAvLyBXZWJLaXQgYWRkZWQgc3VwcG9ydCBm
b3IgdGhlIGpzb24gcmVzcG9uc2VUeXBlIHZhbHVlIG9uIDA5LzAzLzIwMTMKKyAgICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2NDguIFZlcnNpb25z
IG9mIFNhZmFyaSBwcmlvciB0byA3IGFyZQorICAgICAgICAgIC8vIGtub3duIHRvIHRocm93IHdo
ZW4gc2V0dGluZyB0aGUgdmFsdWUgImpzb24iIGFzIHRoZSByZXNwb25zZSB0eXBlLiBPdGhlciBv
bGRlcgorICAgICAgICAgIC8vIGJyb3dzZXJzIGltcGxlbWVudGluZyB0aGUgcmVzcG9uc2VUeXBl
CisgICAgICAgICAgLy8KKyAgICAgICAgICAvLyBUaGUganNvbiByZXNwb25zZSB0eXBlIGNhbiBi
ZSBpZ25vcmVkIGlmIG5vdCBzdXBwb3J0ZWQsIGJlY2F1c2UgSlNPTiBwYXlsb2FkcyBhcmUKKyAg
ICAgICAgICAvLyBwYXJzZWQgb24gdGhlIGNsaWVudC1zaWRlIHJlZ2FyZGxlc3MuCisgICAgICAg
ICAgaWYgKHJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7CisgICAgICAgICAgICB0aHJvdyBlOwor
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICB4aHIuc2VuZChwb3N0KTsK
KyAgICB9CisKKyAgICBpZiAodGltZW91dCA+IDApIHsKKyAgICAgIHZhciB0aW1lb3V0SWQgPSAk
YnJvd3NlckRlZmVyKHRpbWVvdXRSZXF1ZXN0LCB0aW1lb3V0KTsKKyAgICB9IGVsc2UgaWYgKGlz
UHJvbWlzZUxpa2UodGltZW91dCkpIHsKKyAgICAgIHRpbWVvdXQudGhlbih0aW1lb3V0UmVxdWVz
dCk7CisgICAgfQorCisKKyAgICBmdW5jdGlvbiB0aW1lb3V0UmVxdWVzdCgpIHsKKyAgICAgIGpz
b25wRG9uZSAmJiBqc29ucERvbmUoKTsKKyAgICAgIHhociAmJiB4aHIuYWJvcnQoKTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBjb21wbGV0ZVJlcXVlc3QoY2FsbGJhY2ssIHN0YXR1cywgcmVzcG9u
c2UsIGhlYWRlcnNTdHJpbmcsIHN0YXR1c1RleHQpIHsKKyAgICAgIC8vIGNhbmNlbCB0aW1lb3V0
IGFuZCBzdWJzZXF1ZW50IHRpbWVvdXQgcHJvbWlzZSByZXNvbHV0aW9uCisgICAgICBpZiAodGlt
ZW91dElkICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgJGJyb3dzZXJEZWZlci5jYW5jZWwodGlt
ZW91dElkKTsKKyAgICAgIH0KKyAgICAgIGpzb25wRG9uZSA9IHhociA9IG51bGw7CisKKyAgICAg
IGNhbGxiYWNrKHN0YXR1cywgcmVzcG9uc2UsIGhlYWRlcnNTdHJpbmcsIHN0YXR1c1RleHQpOwor
ICAgICAgJGJyb3dzZXIuJCRjb21wbGV0ZU91dHN0YW5kaW5nUmVxdWVzdChub29wKTsKKyAgICB9
CisgIH07CisKKyAgZnVuY3Rpb24ganNvbnBSZXEodXJsLCBjYWxsYmFja0lkLCBkb25lKSB7Cisg
ICAgLy8gd2UgY2FuJ3QgdXNlIGpRdWVyeS9qcUxpdGUgaGVyZSBiZWNhdXNlIGpRdWVyeSBkb2Vz
IGNyYXp5IHN0dWZmIHdpdGggc2NyaXB0IGVsZW1lbnRzLCBlLmcuOgorICAgIC8vIC0gZmV0Y2hl
cyBsb2NhbCBzY3JpcHRzIHZpYSBYSFIgYW5kIGV2YWxzIHRoZW0KKyAgICAvLyAtIGFkZHMgYW5k
IGltbWVkaWF0ZWx5IHJlbW92ZXMgc2NyaXB0IGVsZW1lbnRzIGZyb20gdGhlIGRvY3VtZW50Cisg
ICAgdmFyIHNjcmlwdCA9IHJhd0RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpLCBjYWxs
YmFjayA9IG51bGw7CisgICAgc2NyaXB0LnR5cGUgPSAidGV4dC9qYXZhc2NyaXB0IjsKKyAgICBz
Y3JpcHQuc3JjID0gdXJsOworICAgIHNjcmlwdC5hc3luYyA9IHRydWU7CisKKyAgICBjYWxsYmFj
ayA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICByZW1vdmVFdmVudExpc3RlbmVyRm4oc2NyaXB0
LCAibG9hZCIsIGNhbGxiYWNrKTsKKyAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXJGbihzY3JpcHQs
ICJlcnJvciIsIGNhbGxiYWNrKTsKKyAgICAgIHJhd0RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQo
c2NyaXB0KTsKKyAgICAgIHNjcmlwdCA9IG51bGw7CisgICAgICB2YXIgc3RhdHVzID0gLTE7Cisg
ICAgICB2YXIgdGV4dCA9ICJ1bmtub3duIjsKKworICAgICAgaWYgKGV2ZW50KSB7CisgICAgICAg
IGlmIChldmVudC50eXBlID09PSAibG9hZCIgJiYgIWNhbGxiYWNrc1tjYWxsYmFja0lkXS5jYWxs
ZWQpIHsKKyAgICAgICAgICBldmVudCA9IHsgdHlwZTogImVycm9yIiB9OworICAgICAgICB9Cisg
ICAgICAgIHRleHQgPSBldmVudC50eXBlOworICAgICAgICBzdGF0dXMgPSBldmVudC50eXBlID09
PSAiZXJyb3IiID8gNDA0IDogMjAwOworICAgICAgfQorCisgICAgICBpZiAoZG9uZSkgeworICAg
ICAgICBkb25lKHN0YXR1cywgdGV4dCk7CisgICAgICB9CisgICAgfTsKKworICAgIGFkZEV2ZW50
TGlzdGVuZXJGbihzY3JpcHQsICJsb2FkIiwgY2FsbGJhY2spOworICAgIGFkZEV2ZW50TGlzdGVu
ZXJGbihzY3JpcHQsICJlcnJvciIsIGNhbGxiYWNrKTsKKyAgICByYXdEb2N1bWVudC5ib2R5LmFw
cGVuZENoaWxkKHNjcmlwdCk7CisgICAgcmV0dXJuIGNhbGxiYWNrOworICB9Cit9CisKK3ZhciAk
aW50ZXJwb2xhdGVNaW5FcnIgPSBhbmd1bGFyLiRpbnRlcnBvbGF0ZU1pbkVyciA9IG1pbkVycign
JGludGVycG9sYXRlJyk7CiskaW50ZXJwb2xhdGVNaW5FcnIudGhyb3dOb2NvbmNhdCA9IGZ1bmN0
aW9uKHRleHQpIHsKKyAgdGhyb3cgJGludGVycG9sYXRlTWluRXJyKCdub2NvbmNhdCcsCisgICAg
ICAiRXJyb3Igd2hpbGUgaW50ZXJwb2xhdGluZzogezB9XG5TdHJpY3QgQ29udGV4dHVhbCBFc2Nh
cGluZyBkaXNhbGxvd3MgIiArCisgICAgICAiaW50ZXJwb2xhdGlvbnMgdGhhdCBjb25jYXRlbmF0
ZSBtdWx0aXBsZSBleHByZXNzaW9ucyB3aGVuIGEgdHJ1c3RlZCB2YWx1ZSBpcyAiICsKKyAgICAg
ICJyZXF1aXJlZC4gIFNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlIiwg
dGV4dCk7Cit9OworCiskaW50ZXJwb2xhdGVNaW5FcnIuaW50ZXJyID0gZnVuY3Rpb24odGV4dCwg
ZXJyKSB7CisgIHJldHVybiAkaW50ZXJwb2xhdGVNaW5FcnIoJ2ludGVycicsICJDYW4ndCBpbnRl
cnBvbGF0ZTogezB9XG57MX0iLCB0ZXh0LCBlcnIudG9TdHJpbmcoKSk7Cit9OworCisvKioKKyAq
IEBuZ2RvYyBwcm92aWRlcgorICogQG5hbWUgJGludGVycG9sYXRlUHJvdmlkZXIKKyAqCisgKiBA
ZGVzY3JpcHRpb24KKyAqCisgKiBVc2VkIGZvciBjb25maWd1cmluZyB0aGUgaW50ZXJwb2xhdGlv
biBtYXJrdXAuIERlZmF1bHRzIHRvIGB7e2AgYW5kIGB9fWAuCisgKgorICogQGV4YW1wbGUKKzxl
eGFtcGxlIG1vZHVsZT0iY3VzdG9tSW50ZXJwb2xhdGlvbkFwcCI+Cis8ZmlsZSBuYW1lPSJpbmRl
eC5odG1sIj4KKzxzY3JpcHQ+CisgIHZhciBjdXN0b21JbnRlcnBvbGF0aW9uQXBwID0gYW5ndWxh
ci5tb2R1bGUoJ2N1c3RvbUludGVycG9sYXRpb25BcHAnLCBbXSk7CisKKyAgY3VzdG9tSW50ZXJw
b2xhdGlvbkFwcC5jb25maWcoZnVuY3Rpb24oJGludGVycG9sYXRlUHJvdmlkZXIpIHsKKyAgICAk
aW50ZXJwb2xhdGVQcm92aWRlci5zdGFydFN5bWJvbCgnLy8nKTsKKyAgICAkaW50ZXJwb2xhdGVQ
cm92aWRlci5lbmRTeW1ib2woJy8vJyk7CisgIH0pOworCisKKyAgY3VzdG9tSW50ZXJwb2xhdGlv
bkFwcC5jb250cm9sbGVyKCdEZW1vQ29udHJvbGxlcicsIGZ1bmN0aW9uKCkgeworICAgICAgdGhp
cy5sYWJlbCA9ICJUaGlzIGJpbmRpbmcgaXMgYnJvdWdodCB5b3UgYnkgLy8gaW50ZXJwb2xhdGlv
biBzeW1ib2xzLiI7CisgIH0pOworPC9zY3JpcHQ+Cis8ZGl2IG5nLWFwcD0iQXBwIiBuZy1jb250
cm9sbGVyPSJEZW1vQ29udHJvbGxlciBhcyBkZW1vIj4KKyAgICAvL2RlbW8ubGFiZWwvLworPC9k
aXY+Cis8L2ZpbGU+Cis8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFjdG9y
Ij4KKyAgaXQoJ3Nob3VsZCBpbnRlcnBvbGF0ZSBiaW5kaW5nIHdpdGggY3VzdG9tIHN5bWJvbHMn
LCBmdW5jdGlvbigpIHsKKyAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKCdkZW1vLmxhYmVs
JykpLmdldFRleHQoKSkudG9CZSgnVGhpcyBiaW5kaW5nIGlzIGJyb3VnaHQgeW91IGJ5IC8vIGlu
dGVycG9sYXRpb24gc3ltYm9scy4nKTsKKyAgfSk7Cis8L2ZpbGU+Cis8L2V4YW1wbGU+CisgKi8K
K2Z1bmN0aW9uICRJbnRlcnBvbGF0ZVByb3ZpZGVyKCkgeworICB2YXIgc3RhcnRTeW1ib2wgPSAn
e3snOworICB2YXIgZW5kU3ltYm9sID0gJ319JzsKKworICAvKioKKyAgICogQG5nZG9jIG1ldGhv
ZAorICAgKiBAbmFtZSAkaW50ZXJwb2xhdGVQcm92aWRlciNzdGFydFN5bWJvbAorICAgKiBAZGVz
Y3JpcHRpb24KKyAgICogU3ltYm9sIHRvIGRlbm90ZSBzdGFydCBvZiBleHByZXNzaW9uIGluIHRo
ZSBpbnRlcnBvbGF0ZWQgc3RyaW5nLiBEZWZhdWx0cyB0byBge3tgLgorICAgKgorICAgKiBAcGFy
YW0ge3N0cmluZz19IHZhbHVlIG5ldyB2YWx1ZSB0byBzZXQgdGhlIHN0YXJ0aW5nIHN5bWJvbCB0
by4KKyAgICogQHJldHVybnMge3N0cmluZ3xzZWxmfSBSZXR1cm5zIHRoZSBzeW1ib2wgd2hlbiB1
c2VkIGFzIGdldHRlciBhbmQgc2VsZiBpZiB1c2VkIGFzIHNldHRlci4KKyAgICovCisgIHRoaXMu
c3RhcnRTeW1ib2wgPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIGlmICh2YWx1ZSkgeworICAgICAg
c3RhcnRTeW1ib2wgPSB2YWx1ZTsKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0gZWxzZSB7Cisg
ICAgICByZXR1cm4gc3RhcnRTeW1ib2w7CisgICAgfQorICB9OworCisgIC8qKgorICAgKiBAbmdk
b2MgbWV0aG9kCisgICAqIEBuYW1lICRpbnRlcnBvbGF0ZVByb3ZpZGVyI2VuZFN5bWJvbAorICAg
KiBAZGVzY3JpcHRpb24KKyAgICogU3ltYm9sIHRvIGRlbm90ZSB0aGUgZW5kIG9mIGV4cHJlc3Np
b24gaW4gdGhlIGludGVycG9sYXRlZCBzdHJpbmcuIERlZmF1bHRzIHRvIGB9fWAuCisgICAqCisg
ICAqIEBwYXJhbSB7c3RyaW5nPX0gdmFsdWUgbmV3IHZhbHVlIHRvIHNldCB0aGUgZW5kaW5nIHN5
bWJvbCB0by4KKyAgICogQHJldHVybnMge3N0cmluZ3xzZWxmfSBSZXR1cm5zIHRoZSBzeW1ib2wg
d2hlbiB1c2VkIGFzIGdldHRlciBhbmQgc2VsZiBpZiB1c2VkIGFzIHNldHRlci4KKyAgICovCisg
IHRoaXMuZW5kU3ltYm9sID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgICBpZiAodmFsdWUpIHsKKyAg
ICAgIGVuZFN5bWJvbCA9IHZhbHVlOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSBlbHNlIHsK
KyAgICAgIHJldHVybiBlbmRTeW1ib2w7CisgICAgfQorICB9OworCisKKyAgdGhpcy4kZ2V0ID0g
WyckcGFyc2UnLCAnJGV4Y2VwdGlvbkhhbmRsZXInLCAnJHNjZScsIGZ1bmN0aW9uKCRwYXJzZSwg
JGV4Y2VwdGlvbkhhbmRsZXIsICRzY2UpIHsKKyAgICB2YXIgc3RhcnRTeW1ib2xMZW5ndGggPSBz
dGFydFN5bWJvbC5sZW5ndGgsCisgICAgICAgIGVuZFN5bWJvbExlbmd0aCA9IGVuZFN5bWJvbC5s
ZW5ndGgsCisgICAgICAgIGVzY2FwZWRTdGFydFJlZ2V4cCA9IG5ldyBSZWdFeHAoc3RhcnRTeW1i
b2wucmVwbGFjZSgvLi9nLCBlc2NhcGUpLCAnZycpLAorICAgICAgICBlc2NhcGVkRW5kUmVnZXhw
ID0gbmV3IFJlZ0V4cChlbmRTeW1ib2wucmVwbGFjZSgvLi9nLCBlc2NhcGUpLCAnZycpOworCisg
ICAgZnVuY3Rpb24gZXNjYXBlKGNoKSB7CisgICAgICByZXR1cm4gJ1xcXFxcXCcgKyBjaDsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiB1bmVzY2FwZVRleHQodGV4dCkgeworICAgICAgcmV0dXJuIHRl
eHQucmVwbGFjZShlc2NhcGVkU3RhcnRSZWdleHAsIHN0YXJ0U3ltYm9sKS4KKyAgICAgICAgcmVw
bGFjZShlc2NhcGVkRW5kUmVnZXhwLCBlbmRTeW1ib2wpOworICAgIH0KKworICAgIGZ1bmN0aW9u
IHN0cmluZ2lmeSh2YWx1ZSkgeworICAgICAgaWYgKHZhbHVlID09IG51bGwpIHsgLy8gbnVsbCB8
fCB1bmRlZmluZWQKKyAgICAgICAgcmV0dXJuICcnOworICAgICAgfQorICAgICAgc3dpdGNoICh0
eXBlb2YgdmFsdWUpIHsKKyAgICAgICAgY2FzZSAnc3RyaW5nJzoKKyAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSAnbnVtYmVyJzoKKyAgICAgICAgICB2YWx1ZSA9ICcnICsgdmFsdWU7Cisg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgdmFsdWUgPSB0b0pz
b24odmFsdWUpOworICAgICAgfQorCisgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAg
LyoqCisgICAgICogQG5nZG9jIHNlcnZpY2UKKyAgICAgKiBAbmFtZSAkaW50ZXJwb2xhdGUKKyAg
ICAgKiBAa2luZCBmdW5jdGlvbgorICAgICAqCisgICAgICogQHJlcXVpcmVzICRwYXJzZQorICAg
ICAqIEByZXF1aXJlcyAkc2NlCisgICAgICoKKyAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgKgor
ICAgICAqIENvbXBpbGVzIGEgc3RyaW5nIHdpdGggbWFya3VwIGludG8gYW4gaW50ZXJwb2xhdGlv
biBmdW5jdGlvbi4gVGhpcyBzZXJ2aWNlIGlzIHVzZWQgYnkgdGhlCisgICAgICogSFRNTCB7QGxp
bmsgbmcuJGNvbXBpbGUgJGNvbXBpbGV9IHNlcnZpY2UgZm9yIGRhdGEgYmluZGluZy4gU2VlCisg
ICAgICoge0BsaW5rIG5nLiRpbnRlcnBvbGF0ZVByb3ZpZGVyICRpbnRlcnBvbGF0ZVByb3ZpZGVy
fSBmb3IgY29uZmlndXJpbmcgdGhlCisgICAgICogaW50ZXJwb2xhdGlvbiBtYXJrdXAuCisgICAg
ICoKKyAgICAgKgorICAgICAqIGBgYGpzCisgICAgICogICB2YXIgJGludGVycG9sYXRlID0gLi4u
OyAvLyBpbmplY3RlZAorICAgICAqICAgdmFyIGV4cCA9ICRpbnRlcnBvbGF0ZSgnSGVsbG8ge3tu
YW1lIHwgdXBwZXJjYXNlfX0hJyk7CisgICAgICogICBleHBlY3QoZXhwKHtuYW1lOidBbmd1bGFy
J30pLnRvRXF1YWwoJ0hlbGxvIEFOR1VMQVIhJyk7CisgICAgICogYGBgCisgICAgICoKKyAgICAg
KiBgJGludGVycG9sYXRlYCB0YWtlcyBhbiBvcHRpb25hbCBmb3VydGggYXJndW1lbnQsIGBhbGxP
ck5vdGhpbmdgLiBJZiBgYWxsT3JOb3RoaW5nYCBpcworICAgICAqIGB0cnVlYCwgdGhlIGludGVy
cG9sYXRpb24gZnVuY3Rpb24gd2lsbCByZXR1cm4gYHVuZGVmaW5lZGAgdW5sZXNzIGFsbCBlbWJl
ZGRlZCBleHByZXNzaW9ucworICAgICAqIGV2YWx1YXRlIHRvIGEgdmFsdWUgb3RoZXIgdGhhbiBg
dW5kZWZpbmVkYC4KKyAgICAgKgorICAgICAqIGBgYGpzCisgICAgICogICB2YXIgJGludGVycG9s
YXRlID0gLi4uOyAvLyBpbmplY3RlZAorICAgICAqICAgdmFyIGNvbnRleHQgPSB7Z3JlZXRpbmc6
ICdIZWxsbycsIG5hbWU6IHVuZGVmaW5lZCB9OworICAgICAqCisgICAgICogICAvLyBkZWZhdWx0
ICJmb3JnaXZpbmciIG1vZGUKKyAgICAgKiAgIHZhciBleHAgPSAkaW50ZXJwb2xhdGUoJ3t7Z3Jl
ZXRpbmd9fSB7e25hbWV9fSEnKTsKKyAgICAgKiAgIGV4cGVjdChleHAoY29udGV4dCkpLnRvRXF1
YWwoJ0hlbGxvICEnKTsKKyAgICAgKgorICAgICAqICAgLy8gImFsbE9yTm90aGluZyIgbW9kZQor
ICAgICAqICAgZXhwID0gJGludGVycG9sYXRlKCd7e2dyZWV0aW5nfX0ge3tuYW1lfX0hJywgZmFs
c2UsIG51bGwsIHRydWUpOworICAgICAqICAgZXhwZWN0KGV4cChjb250ZXh0KSkudG9CZVVuZGVm
aW5lZCgpOworICAgICAqICAgY29udGV4dC5uYW1lID0gJ0FuZ3VsYXInOworICAgICAqICAgZXhw
ZWN0KGV4cChjb250ZXh0KSkudG9FcXVhbCgnSGVsbG8gQW5ndWxhciEnKTsKKyAgICAgKiBgYGAK
KyAgICAgKgorICAgICAqIGBhbGxPck5vdGhpbmdgIGlzIHVzZWZ1bCBmb3IgaW50ZXJwb2xhdGlu
ZyBVUkxzLiBgbmdTcmNgIGFuZCBgbmdTcmNzZXRgIHVzZSB0aGlzIGJlaGF2aW9yLgorICAgICAq
CisgICAgICogIyMjI0VzY2FwZWQgSW50ZXJwb2xhdGlvbgorICAgICAqICRpbnRlcnBvbGF0ZSBw
cm92aWRlcyBhIG1lY2hhbmlzbSBmb3IgZXNjYXBpbmcgaW50ZXJwb2xhdGlvbiBtYXJrZXJzLiBT
dGFydCBhbmQgZW5kIG1hcmtlcnMKKyAgICAgKiBjYW4gYmUgZXNjYXBlZCBieSBwcmVjZWRpbmcg
ZWFjaCBvZiB0aGVpciBjaGFyYWN0ZXJzIHdpdGggYSBSRVZFUlNFIFNPTElEVVMgVSswMDVDIChi
YWNrc2xhc2gpLgorICAgICAqIEl0IHdpbGwgYmUgcmVuZGVyZWQgYXMgYSByZWd1bGFyIHN0YXJ0
L2VuZCBtYXJrZXIsIGFuZCB3aWxsIG5vdCBiZSBpbnRlcnByZXRlZCBhcyBhbiBleHByZXNzaW9u
CisgICAgICogb3IgYmluZGluZy4KKyAgICAgKgorICAgICAqIFRoaXMgZW5hYmxlcyB3ZWItc2Vy
dmVycyB0byBwcmV2ZW50IHNjcmlwdCBpbmplY3Rpb24gYXR0YWNrcyBhbmQgZGVmYWNpbmcgYXR0
YWNrcywgdG8gc29tZQorICAgICAqIGRlZ3JlZSwgd2hpbGUgYWxzbyBlbmFibGluZyBjb2RlIGV4
YW1wbGVzIHRvIHdvcmsgd2l0aG91dCByZWx5aW5nIG9uIHRoZQorICAgICAqIHtAbGluayBuZy5k
aXJlY3RpdmU6bmdOb25CaW5kYWJsZSBuZ05vbkJpbmRhYmxlfSBkaXJlY3RpdmUuCisgICAgICoK
KyAgICAgKiAqKkZvciBzZWN1cml0eSBwdXJwb3NlcywgaXQgaXMgc3Ryb25nbHkgZW5jb3VyYWdl
ZCB0aGF0IHdlYiBzZXJ2ZXJzIGVzY2FwZSB1c2VyLXN1cHBsaWVkIGRhdGEsCisgICAgICogcmVw
bGFjaW5nIGFuZ2xlIGJyYWNrZXRzICgmbHQ7LCAmZ3Q7KSB3aXRoICZhbXA7bHQ7IGFuZCAmYW1w
O2d0OyByZXNwZWN0aXZlbHksIGFuZCByZXBsYWNpbmcgYWxsCisgICAgICogaW50ZXJwb2xhdGlv
biBzdGFydC9lbmQgbWFya2VycyB3aXRoIHRoZWlyIGVzY2FwZWQgY291bnRlcnBhcnRzLioqCisg
ICAgICoKKyAgICAgKiBFc2NhcGVkIGludGVycG9sYXRpb24gbWFya2VycyBhcmUgb25seSByZXBs
YWNlZCB3aXRoIHRoZSBhY3R1YWwgaW50ZXJwb2xhdGlvbiBtYXJrZXJzIGluIHJlbmRlcmVkCisg
ICAgICogb3V0cHV0IHdoZW4gdGhlICRpbnRlcnBvbGF0ZSBzZXJ2aWNlIHByb2Nlc3NlcyB0aGUg
dGV4dC4gU28sIGZvciBIVE1MIGVsZW1lbnRzIGludGVycG9sYXRlZAorICAgICAqIGJ5IHtAbGlu
ayBuZy4kY29tcGlsZSAkY29tcGlsZX0sIG9yIG90aGVyd2lzZSBpbnRlcnBvbGF0ZWQgd2l0aCB0
aGUgYG11c3RIYXZlRXhwcmVzc2lvbmAgcGFyYW1ldGVyCisgICAgICogc2V0IHRvIGB0cnVlYCwg
dGhlIGludGVycG9sYXRlZCB0ZXh0IG11c3QgY29udGFpbiBhbiB1bmVzY2FwZWQgaW50ZXJwb2xh
dGlvbiBleHByZXNzaW9uLiBBcyBzdWNoLAorICAgICAqIHRoaXMgaXMgdHlwaWNhbGx5IHVzZWZ1
bCBvbmx5IHdoZW4gdXNlci1kYXRhIGlzIHVzZWQgaW4gcmVuZGVyaW5nIGEgdGVtcGxhdGUgZnJv
bSB0aGUgc2VydmVyLCBvcgorICAgICAqIHdoZW4gb3RoZXJ3aXNlIHVudHJ1c3RlZCBkYXRhIGlz
IHVzZWQgYnkgYSBkaXJlY3RpdmUuCisgICAgICoKKyAgICAgKiA8ZXhhbXBsZT4KKyAgICAgKiAg
PGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAgICogICAgPGRpdiBuZy1pbml0PSJ1c2VybmFt
ZT0nQSB1c2VyJyI+CisgICAgICogICAgICA8cCBuZy1pbml0PSJhcHB0aXRsZT0nRXNjYXBpbmcg
ZGVtbyciPnt7YXBwdGl0bGV9fTogXHtceyB1c2VybmFtZSA9ICJkZWZhY2VkIHZhbHVlIjsgXH1c
fQorICAgICAqICAgICAgICA8L3A+CisgICAgICogICAgICA8cD48c3Ryb25nPnt7dXNlcm5hbWV9
fTwvc3Ryb25nPiBhdHRlbXB0cyB0byBpbmplY3QgY29kZSB3aGljaCB3aWxsIGRlZmFjZSB0aGUK
KyAgICAgKiAgICAgICAgYXBwbGljYXRpb24sIGJ1dCBmYWlscyB0byBhY2NvbXBsaXNoIHRoZWly
IHRhc2ssIGJlY2F1c2UgdGhlIHNlcnZlciBoYXMgY29ycmVjdGx5CisgICAgICogICAgICAgIGVz
Y2FwZWQgdGhlIGludGVycG9sYXRpb24gc3RhcnQvZW5kIG1hcmtlcnMgd2l0aCBSRVZFUlNFIFNP
TElEVVMgVSswMDVDIChiYWNrc2xhc2gpCisgICAgICogICAgICAgIGNoYXJhY3RlcnMuPC9wPgor
ICAgICAqICAgICAgPHA+SW5zdGVhZCwgdGhlIHJlc3VsdCBvZiB0aGUgYXR0ZW1wdGVkIHNjcmlw
dCBpbmplY3Rpb24gaXMgdmlzaWJsZSwgYW5kIGNhbiBiZSByZW1vdmVkCisgICAgICogICAgICAg
IGZyb20gdGhlIGRhdGFiYXNlIGJ5IGFuIGFkbWluaXN0cmF0b3IuPC9wPgorICAgICAqICAgIDwv
ZGl2PgorICAgICAqICA8L2ZpbGU+CisgICAgICogPC9leGFtcGxlPgorICAgICAqCisgICAgICog
QHBhcmFtIHtzdHJpbmd9IHRleHQgVGhlIHRleHQgd2l0aCBtYXJrdXAgdG8gaW50ZXJwb2xhdGUu
CisgICAgICogQHBhcmFtIHtib29sZWFuPX0gbXVzdEhhdmVFeHByZXNzaW9uIGlmIHNldCB0byB0
cnVlIHRoZW4gdGhlIGludGVycG9sYXRpb24gc3RyaW5nIG11c3QgaGF2ZQorICAgICAqICAgIGVt
YmVkZGVkIGV4cHJlc3Npb24gaW4gb3JkZXIgdG8gcmV0dXJuIGFuIGludGVycG9sYXRpb24gZnVu
Y3Rpb24uIFN0cmluZ3Mgd2l0aCBubworICAgICAqICAgIGVtYmVkZGVkIGV4cHJlc3Npb24gd2ls
bCByZXR1cm4gbnVsbCBmb3IgdGhlIGludGVycG9sYXRpb24gZnVuY3Rpb24uCisgICAgICogQHBh
cmFtIHtzdHJpbmc9fSB0cnVzdGVkQ29udGV4dCB3aGVuIHByb3ZpZGVkLCB0aGUgcmV0dXJuZWQg
ZnVuY3Rpb24gcGFzc2VzIHRoZSBpbnRlcnBvbGF0ZWQKKyAgICAgKiAgICByZXN1bHQgdGhyb3Vn
aCB7QGxpbmsgbmcuJHNjZSNnZXRUcnVzdGVkICRzY2UuZ2V0VHJ1c3RlZChpbnRlcnBvbGF0ZWRS
ZXN1bHQsCisgICAgICogICAgdHJ1c3RlZENvbnRleHQpfSBiZWZvcmUgcmV0dXJuaW5nIGl0LiAg
UmVmZXIgdG8gdGhlIHtAbGluayBuZy4kc2NlICRzY2V9IHNlcnZpY2UgdGhhdAorICAgICAqICAg
IHByb3ZpZGVzIFN0cmljdCBDb250ZXh0dWFsIEVzY2FwaW5nIGZvciBkZXRhaWxzLgorICAgICAq
IEBwYXJhbSB7Ym9vbGVhbj19IGFsbE9yTm90aGluZyBpZiBgdHJ1ZWAsIHRoZW4gdGhlIHJldHVy
bmVkIGZ1bmN0aW9uIHJldHVybnMgdW5kZWZpbmVkCisgICAgICogICAgdW5sZXNzIGFsbCBlbWJl
ZGRlZCBleHByZXNzaW9ucyBldmFsdWF0ZSB0byBhIHZhbHVlIG90aGVyIHRoYW4gYHVuZGVmaW5l
ZGAuCisgICAgICogQHJldHVybnMge2Z1bmN0aW9uKGNvbnRleHQpfSBhbiBpbnRlcnBvbGF0aW9u
IGZ1bmN0aW9uIHdoaWNoIGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUKKyAgICAgKiAgICBpbnRlcnBv
bGF0ZWQgc3RyaW5nLiBUaGUgZnVuY3Rpb24gaGFzIHRoZXNlIHBhcmFtZXRlcnM6CisgICAgICoK
KyAgICAgKiAtIGBjb250ZXh0YDogZXZhbHVhdGlvbiBjb250ZXh0IGZvciBhbGwgZXhwcmVzc2lv
bnMgZW1iZWRkZWQgaW4gdGhlIGludGVycG9sYXRlZCB0ZXh0CisgICAgICovCisgICAgZnVuY3Rp
b24gJGludGVycG9sYXRlKHRleHQsIG11c3RIYXZlRXhwcmVzc2lvbiwgdHJ1c3RlZENvbnRleHQs
IGFsbE9yTm90aGluZykgeworICAgICAgYWxsT3JOb3RoaW5nID0gISFhbGxPck5vdGhpbmc7Cisg
ICAgICB2YXIgc3RhcnRJbmRleCwKKyAgICAgICAgICBlbmRJbmRleCwKKyAgICAgICAgICBpbmRl
eCA9IDAsCisgICAgICAgICAgZXhwcmVzc2lvbnMgPSBbXSwKKyAgICAgICAgICBwYXJzZUZucyA9
IFtdLAorICAgICAgICAgIHRleHRMZW5ndGggPSB0ZXh0Lmxlbmd0aCwKKyAgICAgICAgICBleHAs
CisgICAgICAgICAgY29uY2F0ID0gW10sCisgICAgICAgICAgZXhwcmVzc2lvblBvc2l0aW9ucyA9
IFtdOworCisgICAgICB3aGlsZSAoaW5kZXggPCB0ZXh0TGVuZ3RoKSB7CisgICAgICAgIGlmICgo
KHN0YXJ0SW5kZXggPSB0ZXh0LmluZGV4T2Yoc3RhcnRTeW1ib2wsIGluZGV4KSkgIT0gLTEpICYm
CisgICAgICAgICAgICAgKChlbmRJbmRleCA9IHRleHQuaW5kZXhPZihlbmRTeW1ib2wsIHN0YXJ0
SW5kZXggKyBzdGFydFN5bWJvbExlbmd0aCkpICE9IC0xKSkgeworICAgICAgICAgIGlmIChpbmRl
eCAhPT0gc3RhcnRJbmRleCkgeworICAgICAgICAgICAgY29uY2F0LnB1c2godW5lc2NhcGVUZXh0
KHRleHQuc3Vic3RyaW5nKGluZGV4LCBzdGFydEluZGV4KSkpOworICAgICAgICAgIH0KKyAgICAg
ICAgICBleHAgPSB0ZXh0LnN1YnN0cmluZyhzdGFydEluZGV4ICsgc3RhcnRTeW1ib2xMZW5ndGgs
IGVuZEluZGV4KTsKKyAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKGV4cCk7CisgICAgICAgICAg
cGFyc2VGbnMucHVzaCgkcGFyc2UoZXhwLCBwYXJzZVN0cmluZ2lmeUludGVyY2VwdG9yKSk7Cisg
ICAgICAgICAgaW5kZXggPSBlbmRJbmRleCArIGVuZFN5bWJvbExlbmd0aDsKKyAgICAgICAgICBl
eHByZXNzaW9uUG9zaXRpb25zLnB1c2goY29uY2F0Lmxlbmd0aCk7CisgICAgICAgICAgY29uY2F0
LnB1c2goJycpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIC8vIHdlIGRpZCBub3QgZmlu
ZCBhbiBpbnRlcnBvbGF0aW9uLCBzbyB3ZSBoYXZlIHRvIGFkZCB0aGUgcmVtYWluZGVyIHRvIHRo
ZSBzZXBhcmF0b3JzIGFycmF5CisgICAgICAgICAgaWYgKGluZGV4ICE9PSB0ZXh0TGVuZ3RoKSB7
CisgICAgICAgICAgICBjb25jYXQucHVzaCh1bmVzY2FwZVRleHQodGV4dC5zdWJzdHJpbmcoaW5k
ZXgpKSk7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9
CisKKyAgICAgIC8vIENvbmNhdGVuYXRpbmcgZXhwcmVzc2lvbnMgbWFrZXMgaXQgaGFyZCB0byBy
ZWFzb24gYWJvdXQgd2hldGhlciBzb21lIGNvbWJpbmF0aW9uIG9mCisgICAgICAvLyBjb25jYXRl
bmF0ZWQgdmFsdWVzIGFyZSB1bnNhZmUgdG8gdXNlIGFuZCBjb3VsZCBlYXNpbHkgbGVhZCB0byBY
U1MuICBCeSByZXF1aXJpbmcgdGhhdCBhCisgICAgICAvLyBzaW5nbGUgZXhwcmVzc2lvbiBiZSB1
c2VkIGZvciBpZnJhbWVbc3JjXSwgb2JqZWN0W3NyY10sIGV0Yy4sIHdlIGVuc3VyZSB0aGF0IHRo
ZSB2YWx1ZQorICAgICAgLy8gdGhhdCdzIHVzZWQgaXMgYXNzaWduZWQgb3IgY29uc3RydWN0ZWQg
Ynkgc29tZSBKUyBjb2RlIHNvbWV3aGVyZSB0aGF0IGlzIG1vcmUgdGVzdGFibGUgb3IKKyAgICAg
IC8vIG1ha2UgaXQgb2J2aW91cyB0aGF0IHlvdSBib3VuZCB0aGUgdmFsdWUgdG8gc29tZSB1c2Vy
IGNvbnRyb2xsZWQgdmFsdWUuICBUaGlzIGhlbHBzIHJlZHVjZQorICAgICAgLy8gdGhlIGxvYWQg
d2hlbiBhdWRpdGluZyBmb3IgWFNTIGlzc3Vlcy4KKyAgICAgIGlmICh0cnVzdGVkQ29udGV4dCAm
JiBjb25jYXQubGVuZ3RoID4gMSkgeworICAgICAgICAgICRpbnRlcnBvbGF0ZU1pbkVyci50aHJv
d05vY29uY2F0KHRleHQpOworICAgICAgfQorCisgICAgICBpZiAoIW11c3RIYXZlRXhwcmVzc2lv
biB8fCBleHByZXNzaW9ucy5sZW5ndGgpIHsKKyAgICAgICAgdmFyIGNvbXB1dGUgPSBmdW5jdGlv
bih2YWx1ZXMpIHsKKyAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBleHByZXNzaW9ucy5s
ZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoYWxsT3JOb3RoaW5nICYmIGlz
VW5kZWZpbmVkKHZhbHVlc1tpXSkpIHJldHVybjsKKyAgICAgICAgICAgIGNvbmNhdFtleHByZXNz
aW9uUG9zaXRpb25zW2ldXSA9IHZhbHVlc1tpXTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0
dXJuIGNvbmNhdC5qb2luKCcnKTsKKyAgICAgICAgfTsKKworICAgICAgICB2YXIgZ2V0VmFsdWUg
PSBmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICAgIHJldHVybiB0cnVzdGVkQ29udGV4dCA/Cisg
ICAgICAgICAgICAkc2NlLmdldFRydXN0ZWQodHJ1c3RlZENvbnRleHQsIHZhbHVlKSA6CisgICAg
ICAgICAgICAkc2NlLnZhbHVlT2YodmFsdWUpOworICAgICAgICB9OworCisgICAgICAgIHJldHVy
biBleHRlbmQoZnVuY3Rpb24gaW50ZXJwb2xhdGlvbkZuKGNvbnRleHQpIHsKKyAgICAgICAgICAg
IHZhciBpID0gMDsKKyAgICAgICAgICAgIHZhciBpaSA9IGV4cHJlc3Npb25zLmxlbmd0aDsKKyAg
ICAgICAgICAgIHZhciB2YWx1ZXMgPSBuZXcgQXJyYXkoaWkpOworCisgICAgICAgICAgICB0cnkg
eworICAgICAgICAgICAgICBmb3IgKDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgICAgICB2
YWx1ZXNbaV0gPSBwYXJzZUZuc1tpXShjb250ZXh0KTsKKyAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgIHJldHVybiBjb21wdXRlKHZhbHVlcyk7CisgICAgICAgICAgICB9IGNhdGNoIChl
cnIpIHsKKyAgICAgICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoJGludGVycG9sYXRlTWluRXJy
LmludGVycih0ZXh0LCBlcnIpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIH0sIHsKKyAg
ICAgICAgICAvLyBhbGwgb2YgdGhlc2UgcHJvcGVydGllcyBhcmUgdW5kb2N1bWVudGVkIGZvciBu
b3cKKyAgICAgICAgICBleHA6IHRleHQsIC8vanVzdCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHJl
Z3VsYXIgd2F0Y2hlcnMgY3JlYXRlZCB2aWEgJHdhdGNoCisgICAgICAgICAgZXhwcmVzc2lvbnM6
IGV4cHJlc3Npb25zLAorICAgICAgICAgICQkd2F0Y2hEZWxlZ2F0ZTogZnVuY3Rpb24oc2NvcGUs
IGxpc3RlbmVyKSB7CisgICAgICAgICAgICB2YXIgbGFzdFZhbHVlOworICAgICAgICAgICAgcmV0
dXJuIHNjb3BlLiR3YXRjaEdyb3VwKHBhcnNlRm5zLCBmdW5jdGlvbiBpbnRlcnBvbGF0ZUZuV2F0
Y2hlcih2YWx1ZXMsIG9sZFZhbHVlcykgeworICAgICAgICAgICAgICB2YXIgY3VyclZhbHVlID0g
Y29tcHV0ZSh2YWx1ZXMpOworICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihsaXN0ZW5lcikp
IHsKKyAgICAgICAgICAgICAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIGN1cnJWYWx1ZSwgdmFsdWVz
ICE9PSBvbGRWYWx1ZXMgPyBsYXN0VmFsdWUgOiBjdXJyVmFsdWUsIHNjb3BlKTsKKyAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICBsYXN0VmFsdWUgPSBjdXJyVmFsdWU7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgfQorCisgICAgICBmdW5jdGlv
biBwYXJzZVN0cmluZ2lmeUludGVyY2VwdG9yKHZhbHVlKSB7CisgICAgICAgIHRyeSB7CisgICAg
ICAgICAgdmFsdWUgPSBnZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgcmV0dXJuIGFsbE9yTm90
aGluZyAmJiAhaXNEZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogc3RyaW5naWZ5KHZhbHVlKTsKKyAg
ICAgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoJGludGVy
cG9sYXRlTWluRXJyLmludGVycih0ZXh0LCBlcnIpKTsKKyAgICAgICAgfQorICAgICAgfQorICAg
IH0KKworCisgICAgLyoqCisgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAqIEBuYW1lICRpbnRl
cnBvbGF0ZSNzdGFydFN5bWJvbAorICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAqIFN5bWJvbCB0
byBkZW5vdGUgdGhlIHN0YXJ0IG9mIGV4cHJlc3Npb24gaW4gdGhlIGludGVycG9sYXRlZCBzdHJp
bmcuIERlZmF1bHRzIHRvIGB7e2AuCisgICAgICoKKyAgICAgKiBVc2Uge0BsaW5rIG5nLiRpbnRl
cnBvbGF0ZVByb3ZpZGVyI3N0YXJ0U3ltYm9sIGAkaW50ZXJwb2xhdGVQcm92aWRlci5zdGFydFN5
bWJvbGB9IHRvIGNoYW5nZQorICAgICAqIHRoZSBzeW1ib2wuCisgICAgICoKKyAgICAgKiBAcmV0
dXJucyB7c3RyaW5nfSBzdGFydCBzeW1ib2wuCisgICAgICovCisgICAgJGludGVycG9sYXRlLnN0
YXJ0U3ltYm9sID0gZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gc3RhcnRTeW1ib2w7CisgICAg
fTsKKworCisgICAgLyoqCisgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAqIEBuYW1lICRpbnRl
cnBvbGF0ZSNlbmRTeW1ib2wKKyAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgKiBTeW1ib2wgdG8g
ZGVub3RlIHRoZSBlbmQgb2YgZXhwcmVzc2lvbiBpbiB0aGUgaW50ZXJwb2xhdGVkIHN0cmluZy4g
RGVmYXVsdHMgdG8gYH19YC4KKyAgICAgKgorICAgICAqIFVzZSB7QGxpbmsgbmcuJGludGVycG9s
YXRlUHJvdmlkZXIjZW5kU3ltYm9sIGAkaW50ZXJwb2xhdGVQcm92aWRlci5lbmRTeW1ib2xgfSB0
byBjaGFuZ2UKKyAgICAgKiB0aGUgc3ltYm9sLgorICAgICAqCisgICAgICogQHJldHVybnMge3N0
cmluZ30gZW5kIHN5bWJvbC4KKyAgICAgKi8KKyAgICAkaW50ZXJwb2xhdGUuZW5kU3ltYm9sID0g
ZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gZW5kU3ltYm9sOworICAgIH07CisKKyAgICByZXR1
cm4gJGludGVycG9sYXRlOworICB9XTsKK30KKworZnVuY3Rpb24gJEludGVydmFsUHJvdmlkZXIo
KSB7CisgIHRoaXMuJGdldCA9IFsnJHJvb3RTY29wZScsICckd2luZG93JywgJyRxJywgJyQkcScs
CisgICAgICAgZnVuY3Rpb24oJHJvb3RTY29wZSwgICAkd2luZG93LCAgICRxLCAgICQkcSkgewor
ICAgIHZhciBpbnRlcnZhbHMgPSB7fTsKKworCisgICAgIC8qKgorICAgICAgKiBAbmdkb2Mgc2Vy
dmljZQorICAgICAgKiBAbmFtZSAkaW50ZXJ2YWwKKyAgICAgICoKKyAgICAgICogQGRlc2NyaXB0
aW9uCisgICAgICAqIEFuZ3VsYXIncyB3cmFwcGVyIGZvciBgd2luZG93LnNldEludGVydmFsYC4g
VGhlIGBmbmAgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZXZlcnkgYGRlbGF5YAorICAgICAgKiBtaWxs
aXNlY29uZHMuCisgICAgICAqCisgICAgICAqIFRoZSByZXR1cm4gdmFsdWUgb2YgcmVnaXN0ZXJp
bmcgYW4gaW50ZXJ2YWwgZnVuY3Rpb24gaXMgYSBwcm9taXNlLiBUaGlzIHByb21pc2Ugd2lsbCBi
ZQorICAgICAgKiBub3RpZmllZCB1cG9uIGVhY2ggdGljayBvZiB0aGUgaW50ZXJ2YWwsIGFuZCB3
aWxsIGJlIHJlc29sdmVkIGFmdGVyIGBjb3VudGAgaXRlcmF0aW9ucywgb3IKKyAgICAgICogcnVu
IGluZGVmaW5pdGVseSBpZiBgY291bnRgIGlzIG5vdCBkZWZpbmVkLiBUaGUgdmFsdWUgb2YgdGhl
IG5vdGlmaWNhdGlvbiB3aWxsIGJlIHRoZQorICAgICAgKiBudW1iZXIgb2YgaXRlcmF0aW9ucyB0
aGF0IGhhdmUgcnVuLgorICAgICAgKiBUbyBjYW5jZWwgYW4gaW50ZXJ2YWwsIGNhbGwgYCRpbnRl
cnZhbC5jYW5jZWwocHJvbWlzZSlgLgorICAgICAgKgorICAgICAgKiBJbiB0ZXN0cyB5b3UgY2Fu
IHVzZSB7QGxpbmsgbmdNb2NrLiRpbnRlcnZhbCNmbHVzaCBgJGludGVydmFsLmZsdXNoKG1pbGxp
cylgfSB0bworICAgICAgKiBtb3ZlIGZvcndhcmQgYnkgYG1pbGxpc2AgbWlsbGlzZWNvbmRzIGFu
ZCB0cmlnZ2VyIGFueSBmdW5jdGlvbnMgc2NoZWR1bGVkIHRvIHJ1biBpbiB0aGF0CisgICAgICAq
IHRpbWUuCisgICAgICAqCisgICAgICAqIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LXdhcm5pbmci
PgorICAgICAgKiAqKk5vdGUqKjogSW50ZXJ2YWxzIGNyZWF0ZWQgYnkgdGhpcyBzZXJ2aWNlIG11
c3QgYmUgZXhwbGljaXRseSBkZXN0cm95ZWQgd2hlbiB5b3UgYXJlIGZpbmlzaGVkCisgICAgICAq
IHdpdGggdGhlbS4gIEluIHBhcnRpY3VsYXIgdGhleSBhcmUgbm90IGF1dG9tYXRpY2FsbHkgZGVz
dHJveWVkIHdoZW4gYSBjb250cm9sbGVyJ3Mgc2NvcGUgb3IgYQorICAgICAgKiBkaXJlY3RpdmUn
cyBlbGVtZW50IGFyZSBkZXN0cm95ZWQuCisgICAgICAqIFlvdSBzaG91bGQgdGFrZSB0aGlzIGlu
dG8gY29uc2lkZXJhdGlvbiBhbmQgbWFrZSBzdXJlIHRvIGFsd2F5cyBjYW5jZWwgdGhlIGludGVy
dmFsIGF0IHRoZQorICAgICAgKiBhcHByb3ByaWF0ZSBtb21lbnQuICBTZWUgdGhlIGV4YW1wbGUg
YmVsb3cgZm9yIG1vcmUgZGV0YWlscyBvbiBob3cgYW5kIHdoZW4gdG8gZG8gdGhpcy4KKyAgICAg
ICogPC9kaXY+CisgICAgICAqCisgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gZm4gQSBmdW5j
dGlvbiB0aGF0IHNob3VsZCBiZSBjYWxsZWQgcmVwZWF0ZWRseS4KKyAgICAgICogQHBhcmFtIHtu
dW1iZXJ9IGRlbGF5IE51bWJlciBvZiBtaWxsaXNlY29uZHMgYmV0d2VlbiBlYWNoIGZ1bmN0aW9u
IGNhbGwuCisgICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gW2NvdW50PTBdIE51bWJlciBvZiB0aW1l
cyB0byByZXBlYXQuIElmIG5vdCBzZXQsIG9yIDAsIHdpbGwgcmVwZWF0CisgICAgICAqICAgaW5k
ZWZpbml0ZWx5LgorICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBbaW52b2tlQXBwbHk9dHJ1ZV0g
SWYgc2V0IHRvIGBmYWxzZWAgc2tpcHMgbW9kZWwgZGlydHkgY2hlY2tpbmcsIG90aGVyd2lzZQor
ICAgICAgKiAgIHdpbGwgaW52b2tlIGBmbmAgd2l0aGluIHRoZSB7QGxpbmsgbmcuJHJvb3RTY29w
ZS5TY29wZSMkYXBwbHkgJGFwcGx5fSBibG9jay4KKyAgICAgICogQHBhcmFtIHsuLi4qPX0gUGFz
cyBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgdG8gdGhlIGV4ZWN1dGVkIGZ1bmN0aW9uLgorICAgICAg
KiBAcmV0dXJucyB7cHJvbWlzZX0gQSBwcm9taXNlIHdoaWNoIHdpbGwgYmUgbm90aWZpZWQgb24g
ZWFjaCBpdGVyYXRpb24uCisgICAgICAqCisgICAgICAqIEBleGFtcGxlCisgICAgICAqIDxleGFt
cGxlIG1vZHVsZT0iaW50ZXJ2YWxFeGFtcGxlIj4KKyAgICAgICogPGZpbGUgbmFtZT0iaW5kZXgu
aHRtbCI+CisgICAgICAqICAgPHNjcmlwdD4KKyAgICAgICogICAgIGFuZ3VsYXIubW9kdWxlKCdp
bnRlcnZhbEV4YW1wbGUnLCBbXSkKKyAgICAgICogICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVD
b250cm9sbGVyJywgWyckc2NvcGUnLCAnJGludGVydmFsJywKKyAgICAgICogICAgICAgICBmdW5j
dGlvbigkc2NvcGUsICRpbnRlcnZhbCkgeworICAgICAgKiAgICAgICAgICAgJHNjb3BlLmZvcm1h
dCA9ICdNL2QveXkgaDptbTpzcyBhJzsKKyAgICAgICogICAgICAgICAgICRzY29wZS5ibG9vZF8x
ID0gMTAwOworICAgICAgKiAgICAgICAgICAgJHNjb3BlLmJsb29kXzIgPSAxMjA7CisgICAgICAq
CisgICAgICAqICAgICAgICAgICB2YXIgc3RvcDsKKyAgICAgICogICAgICAgICAgICRzY29wZS5m
aWdodCA9IGZ1bmN0aW9uKCkgeworICAgICAgKiAgICAgICAgICAgICAvLyBEb24ndCBzdGFydCBh
IG5ldyBmaWdodCBpZiB3ZSBhcmUgYWxyZWFkeSBmaWdodGluZworICAgICAgKiAgICAgICAgICAg
ICBpZiAoIGFuZ3VsYXIuaXNEZWZpbmVkKHN0b3ApICkgcmV0dXJuOworICAgICAgKgorICAgICAg
KiAgICAgICAgICAgICBzdG9wID0gJGludGVydmFsKGZ1bmN0aW9uKCkgeworICAgICAgKiAgICAg
ICAgICAgICAgIGlmICgkc2NvcGUuYmxvb2RfMSA+IDAgJiYgJHNjb3BlLmJsb29kXzIgPiAwKSB7
CisgICAgICAqICAgICAgICAgICAgICAgICAkc2NvcGUuYmxvb2RfMSA9ICRzY29wZS5ibG9vZF8x
IC0gMzsKKyAgICAgICogICAgICAgICAgICAgICAgICRzY29wZS5ibG9vZF8yID0gJHNjb3BlLmJs
b29kXzIgLSA0OworICAgICAgKiAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAqICAgICAg
ICAgICAgICAgICAkc2NvcGUuc3RvcEZpZ2h0KCk7CisgICAgICAqICAgICAgICAgICAgICAgfQor
ICAgICAgKiAgICAgICAgICAgICB9LCAxMDApOworICAgICAgKiAgICAgICAgICAgfTsKKyAgICAg
ICoKKyAgICAgICogICAgICAgICAgICRzY29wZS5zdG9wRmlnaHQgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICogICAgICAgICAgICAgaWYgKGFuZ3VsYXIuaXNEZWZpbmVkKHN0b3ApKSB7CisgICAgICAq
ICAgICAgICAgICAgICAgJGludGVydmFsLmNhbmNlbChzdG9wKTsKKyAgICAgICogICAgICAgICAg
ICAgICBzdG9wID0gdW5kZWZpbmVkOworICAgICAgKiAgICAgICAgICAgICB9CisgICAgICAqICAg
ICAgICAgICB9OworICAgICAgKgorICAgICAgKiAgICAgICAgICAgJHNjb3BlLnJlc2V0RmlnaHQg
PSBmdW5jdGlvbigpIHsKKyAgICAgICogICAgICAgICAgICAgJHNjb3BlLmJsb29kXzEgPSAxMDA7
CisgICAgICAqICAgICAgICAgICAgICRzY29wZS5ibG9vZF8yID0gMTIwOworICAgICAgKiAgICAg
ICAgICAgfTsKKyAgICAgICoKKyAgICAgICogICAgICAgICAgICRzY29wZS4kb24oJyRkZXN0cm95
JywgZnVuY3Rpb24oKSB7CisgICAgICAqICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRo
ZSBpbnRlcnZhbCBpcyBkZXN0cm95ZWQgdG9vCisgICAgICAqICAgICAgICAgICAgICRzY29wZS5z
dG9wRmlnaHQoKTsKKyAgICAgICogICAgICAgICAgIH0pOworICAgICAgKiAgICAgICAgIH1dKQor
ICAgICAgKiAgICAgICAvLyBSZWdpc3RlciB0aGUgJ215Q3VycmVudFRpbWUnIGRpcmVjdGl2ZSBm
YWN0b3J5IG1ldGhvZC4KKyAgICAgICogICAgICAgLy8gV2UgaW5qZWN0ICRpbnRlcnZhbCBhbmQg
ZGF0ZUZpbHRlciBzZXJ2aWNlIHNpbmNlIHRoZSBmYWN0b3J5IG1ldGhvZCBpcyBESS4KKyAgICAg
ICogICAgICAgLmRpcmVjdGl2ZSgnbXlDdXJyZW50VGltZScsIFsnJGludGVydmFsJywgJ2RhdGVG
aWx0ZXInLAorICAgICAgKiAgICAgICAgIGZ1bmN0aW9uKCRpbnRlcnZhbCwgZGF0ZUZpbHRlcikg
eworICAgICAgKiAgICAgICAgICAgLy8gcmV0dXJuIHRoZSBkaXJlY3RpdmUgbGluayBmdW5jdGlv
bi4gKGNvbXBpbGUgZnVuY3Rpb24gbm90IG5lZWRlZCkKKyAgICAgICogICAgICAgICAgIHJldHVy
biBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cnMpIHsKKyAgICAgICogICAgICAgICAgICAg
dmFyIGZvcm1hdCwgIC8vIGRhdGUgZm9ybWF0CisgICAgICAqICAgICAgICAgICAgICAgICBzdG9w
VGltZTsgLy8gc28gdGhhdCB3ZSBjYW4gY2FuY2VsIHRoZSB0aW1lIHVwZGF0ZXMKKyAgICAgICoK
KyAgICAgICogICAgICAgICAgICAgLy8gdXNlZCB0byB1cGRhdGUgdGhlIFVJCisgICAgICAqICAg
ICAgICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVRpbWUoKSB7CisgICAgICAqICAgICAgICAgICAgICAg
ZWxlbWVudC50ZXh0KGRhdGVGaWx0ZXIobmV3IERhdGUoKSwgZm9ybWF0KSk7CisgICAgICAqICAg
ICAgICAgICAgIH0KKyAgICAgICoKKyAgICAgICogICAgICAgICAgICAgLy8gd2F0Y2ggdGhlIGV4
cHJlc3Npb24sIGFuZCB1cGRhdGUgdGhlIFVJIG9uIGNoYW5nZS4KKyAgICAgICogICAgICAgICAg
ICAgc2NvcGUuJHdhdGNoKGF0dHJzLm15Q3VycmVudFRpbWUsIGZ1bmN0aW9uKHZhbHVlKSB7Cisg
ICAgICAqICAgICAgICAgICAgICAgZm9ybWF0ID0gdmFsdWU7CisgICAgICAqICAgICAgICAgICAg
ICAgdXBkYXRlVGltZSgpOworICAgICAgKiAgICAgICAgICAgICB9KTsKKyAgICAgICoKKyAgICAg
ICogICAgICAgICAgICAgc3RvcFRpbWUgPSAkaW50ZXJ2YWwodXBkYXRlVGltZSwgMTAwMCk7Cisg
ICAgICAqCisgICAgICAqICAgICAgICAgICAgIC8vIGxpc3RlbiBvbiBET00gZGVzdHJveSAocmVt
b3ZhbCkgZXZlbnQsIGFuZCBjYW5jZWwgdGhlIG5leHQgVUkgdXBkYXRlCisgICAgICAqICAgICAg
ICAgICAgIC8vIHRvIHByZXZlbnQgdXBkYXRpbmcgdGltZSBhZnRlciB0aGUgRE9NIGVsZW1lbnQg
d2FzIHJlbW92ZWQuCisgICAgICAqICAgICAgICAgICAgIGVsZW1lbnQub24oJyRkZXN0cm95Jywg
ZnVuY3Rpb24oKSB7CisgICAgICAqICAgICAgICAgICAgICAgJGludGVydmFsLmNhbmNlbChzdG9w
VGltZSk7CisgICAgICAqICAgICAgICAgICAgIH0pOworICAgICAgKiAgICAgICAgICAgfQorICAg
ICAgKiAgICAgICAgIH1dKTsKKyAgICAgICogICA8L3NjcmlwdD4KKyAgICAgICoKKyAgICAgICog
ICA8ZGl2PgorICAgICAgKiAgICAgPGRpdiBuZy1jb250cm9sbGVyPSJFeGFtcGxlQ29udHJvbGxl
ciI+CisgICAgICAqICAgICAgIDxsYWJlbD5EYXRlIGZvcm1hdDogPGlucHV0IG5nLW1vZGVsPSJm
b3JtYXQiPjwvbGFiZWw+IDxoci8+CisgICAgICAqICAgICAgIEN1cnJlbnQgdGltZSBpczogPHNw
YW4gbXktY3VycmVudC10aW1lPSJmb3JtYXQiPjwvc3Bhbj4KKyAgICAgICogICAgICAgPGhyLz4K
KyAgICAgICogICAgICAgQmxvb2QgMSA6IDxmb250IGNvbG9yPSdyZWQnPnt7Ymxvb2RfMX19PC9m
b250PgorICAgICAgKiAgICAgICBCbG9vZCAyIDogPGZvbnQgY29sb3I9J3JlZCc+e3tibG9vZF8y
fX08L2ZvbnQ+CisgICAgICAqICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLW5nLWNs
aWNrPSJmaWdodCgpIj5GaWdodDwvYnV0dG9uPgorICAgICAgKiAgICAgICA8YnV0dG9uIHR5cGU9
ImJ1dHRvbiIgZGF0YS1uZy1jbGljaz0ic3RvcEZpZ2h0KCkiPlN0b3BGaWdodDwvYnV0dG9uPgor
ICAgICAgKiAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1uZy1jbGljaz0icmVzZXRG
aWdodCgpIj5yZXNldEZpZ2h0PC9idXR0b24+CisgICAgICAqICAgICA8L2Rpdj4KKyAgICAgICog
ICA8L2Rpdj4KKyAgICAgICoKKyAgICAgICogPC9maWxlPgorICAgICAgKiA8L2V4YW1wbGU+Cisg
ICAgICAqLworICAgIGZ1bmN0aW9uIGludGVydmFsKGZuLCBkZWxheSwgY291bnQsIGludm9rZUFw
cGx5KSB7CisgICAgICB2YXIgaGFzUGFyYW1zID0gYXJndW1lbnRzLmxlbmd0aCA+IDQsCisgICAg
ICAgICAgYXJncyA9IGhhc1BhcmFtcyA/IHNsaWNlQXJncyhhcmd1bWVudHMsIDQpIDogW10sCisg
ICAgICAgICAgc2V0SW50ZXJ2YWwgPSAkd2luZG93LnNldEludGVydmFsLAorICAgICAgICAgIGNs
ZWFySW50ZXJ2YWwgPSAkd2luZG93LmNsZWFySW50ZXJ2YWwsCisgICAgICAgICAgaXRlcmF0aW9u
ID0gMCwKKyAgICAgICAgICBza2lwQXBwbHkgPSAoaXNEZWZpbmVkKGludm9rZUFwcGx5KSAmJiAh
aW52b2tlQXBwbHkpLAorICAgICAgICAgIGRlZmVycmVkID0gKHNraXBBcHBseSA/ICQkcSA6ICRx
KS5kZWZlcigpLAorICAgICAgICAgIHByb21pc2UgPSBkZWZlcnJlZC5wcm9taXNlOworCisgICAg
ICBjb3VudCA9IGlzRGVmaW5lZChjb3VudCkgPyBjb3VudCA6IDA7CisKKyAgICAgIHByb21pc2Uu
dGhlbihudWxsLCBudWxsLCAoIWhhc1BhcmFtcykgPyBmbiA6IGZ1bmN0aW9uKCkgeworICAgICAg
ICBmbi5hcHBseShudWxsLCBhcmdzKTsKKyAgICAgIH0pOworCisgICAgICBwcm9taXNlLiQkaW50
ZXJ2YWxJZCA9IHNldEludGVydmFsKGZ1bmN0aW9uIHRpY2soKSB7CisgICAgICAgIGRlZmVycmVk
Lm5vdGlmeShpdGVyYXRpb24rKyk7CisKKyAgICAgICAgaWYgKGNvdW50ID4gMCAmJiBpdGVyYXRp
b24gPj0gY291bnQpIHsKKyAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKGl0ZXJhdGlvbik7Cisg
ICAgICAgICAgY2xlYXJJbnRlcnZhbChwcm9taXNlLiQkaW50ZXJ2YWxJZCk7CisgICAgICAgICAg
ZGVsZXRlIGludGVydmFsc1twcm9taXNlLiQkaW50ZXJ2YWxJZF07CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIXNraXBBcHBseSkgJHJvb3RTY29wZS4kYXBwbHkoKTsKKworICAgICAgfSwgZGVs
YXkpOworCisgICAgICBpbnRlcnZhbHNbcHJvbWlzZS4kJGludGVydmFsSWRdID0gZGVmZXJyZWQ7
CisKKyAgICAgIHJldHVybiBwcm9taXNlOworICAgIH0KKworCisgICAgIC8qKgorICAgICAgKiBA
bmdkb2MgbWV0aG9kCisgICAgICAqIEBuYW1lICRpbnRlcnZhbCNjYW5jZWwKKyAgICAgICoKKyAg
ICAgICogQGRlc2NyaXB0aW9uCisgICAgICAqIENhbmNlbHMgYSB0YXNrIGFzc29jaWF0ZWQgd2l0
aCB0aGUgYHByb21pc2VgLgorICAgICAgKgorICAgICAgKiBAcGFyYW0ge3Byb21pc2V9IHByb21p
c2UgcmV0dXJuZWQgYnkgdGhlIGAkaW50ZXJ2YWxgIGZ1bmN0aW9uLgorICAgICAgKiBAcmV0dXJu
cyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHRhc2sgd2FzIHN1Y2Nlc3NmdWxseSBj
YW5jZWxlZC4KKyAgICAgICovCisgICAgaW50ZXJ2YWwuY2FuY2VsID0gZnVuY3Rpb24ocHJvbWlz
ZSkgeworICAgICAgaWYgKHByb21pc2UgJiYgcHJvbWlzZS4kJGludGVydmFsSWQgaW4gaW50ZXJ2
YWxzKSB7CisgICAgICAgIGludGVydmFsc1twcm9taXNlLiQkaW50ZXJ2YWxJZF0ucmVqZWN0KCdj
YW5jZWxlZCcpOworICAgICAgICAkd2luZG93LmNsZWFySW50ZXJ2YWwocHJvbWlzZS4kJGludGVy
dmFsSWQpOworICAgICAgICBkZWxldGUgaW50ZXJ2YWxzW3Byb21pc2UuJCRpbnRlcnZhbElkXTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fTsKKworICAgIHJldHVybiBpbnRlcnZhbDsKKyAgfV07Cit9CisKKy8qKgorICogQG5nZG9jIHNl
cnZpY2UKKyAqIEBuYW1lICRsb2NhbGUKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqICRsb2NhbGUg
c2VydmljZSBwcm92aWRlcyBsb2NhbGl6YXRpb24gcnVsZXMgZm9yIHZhcmlvdXMgQW5ndWxhciBj
b21wb25lbnRzLiBBcyBvZiByaWdodCBub3cgdGhlCisgKiBvbmx5IHB1YmxpYyBhcGkgaXM6Cisg
KgorICogKiBgaWRgIOKAkyBge3N0cmluZ31gIOKAkyBsb2NhbGUgaWQgZm9ybWF0dGVkIGFzIGBs
YW5ndWFnZUlkLWNvdW50cnlJZGAgKGUuZy4gYGVuLXVzYCkKKyAqLworZnVuY3Rpb24gJExvY2Fs
ZVByb3ZpZGVyKCkgeworICB0aGlzLiRnZXQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gewor
ICAgICAgaWQ6ICdlbi11cycsCisKKyAgICAgIE5VTUJFUl9GT1JNQVRTOiB7CisgICAgICAgIERF
Q0lNQUxfU0VQOiAnLicsCisgICAgICAgIEdST1VQX1NFUDogJywnLAorICAgICAgICBQQVRURVJO
UzogWworICAgICAgICAgIHsgLy8gRGVjaW1hbCBQYXR0ZXJuCisgICAgICAgICAgICBtaW5JbnQ6
IDEsCisgICAgICAgICAgICBtaW5GcmFjOiAwLAorICAgICAgICAgICAgbWF4RnJhYzogMywKKyAg
ICAgICAgICAgIHBvc1ByZTogJycsCisgICAgICAgICAgICBwb3NTdWY6ICcnLAorICAgICAgICAg
ICAgbmVnUHJlOiAnLScsCisgICAgICAgICAgICBuZWdTdWY6ICcnLAorICAgICAgICAgICAgZ1Np
emU6IDMsCisgICAgICAgICAgICBsZ1NpemU6IDMKKyAgICAgICAgICB9LHsgLy9DdXJyZW5jeSBQ
YXR0ZXJuCisgICAgICAgICAgICBtaW5JbnQ6IDEsCisgICAgICAgICAgICBtaW5GcmFjOiAyLAor
ICAgICAgICAgICAgbWF4RnJhYzogMiwKKyAgICAgICAgICAgIHBvc1ByZTogJ1x1MDBBNCcsCisg
ICAgICAgICAgICBwb3NTdWY6ICcnLAorICAgICAgICAgICAgbmVnUHJlOiAnKFx1MDBBNCcsCisg
ICAgICAgICAgICBuZWdTdWY6ICcpJywKKyAgICAgICAgICAgIGdTaXplOiAzLAorICAgICAgICAg
ICAgbGdTaXplOiAzCisgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICBDVVJSRU5DWV9T
WU06ICckJworICAgICAgfSwKKworICAgICAgREFURVRJTUVfRk9STUFUUzogeworICAgICAgICBN
T05USDoKKyAgICAgICAgICAgICdKYW51YXJ5LEZlYnJ1YXJ5LE1hcmNoLEFwcmlsLE1heSxKdW5l
LEp1bHksQXVndXN0LFNlcHRlbWJlcixPY3RvYmVyLE5vdmVtYmVyLERlY2VtYmVyJworICAgICAg
ICAgICAgLnNwbGl0KCcsJyksCisgICAgICAgIFNIT1JUTU9OVEg6ICAnSmFuLEZlYixNYXIsQXBy
LE1heSxKdW4sSnVsLEF1ZyxTZXAsT2N0LE5vdixEZWMnLnNwbGl0KCcsJyksCisgICAgICAgIERB
WTogJ1N1bmRheSxNb25kYXksVHVlc2RheSxXZWRuZXNkYXksVGh1cnNkYXksRnJpZGF5LFNhdHVy
ZGF5Jy5zcGxpdCgnLCcpLAorICAgICAgICBTSE9SVERBWTogJ1N1bixNb24sVHVlLFdlZCxUaHUs
RnJpLFNhdCcuc3BsaXQoJywnKSwKKyAgICAgICAgQU1QTVM6IFsnQU0nLCdQTSddLAorICAgICAg
ICBtZWRpdW06ICdNTU0gZCwgeSBoOm1tOnNzIGEnLAorICAgICAgICAnc2hvcnQnOiAnTS9kL3l5
IGg6bW0gYScsCisgICAgICAgIGZ1bGxEYXRlOiAnRUVFRSwgTU1NTSBkLCB5JywKKyAgICAgICAg
bG9uZ0RhdGU6ICdNTU1NIGQsIHknLAorICAgICAgICBtZWRpdW1EYXRlOiAnTU1NIGQsIHknLAor
ICAgICAgICBzaG9ydERhdGU6ICdNL2QveXknLAorICAgICAgICBtZWRpdW1UaW1lOiAnaDptbTpz
cyBhJywKKyAgICAgICAgc2hvcnRUaW1lOiAnaDptbSBhJywKKyAgICAgICAgRVJBTkFNRVM6IFsK
KyAgICAgICAgICAiQmVmb3JlIENocmlzdCIsCisgICAgICAgICAgIkFubm8gRG9taW5pIgorICAg
ICAgICBdLAorICAgICAgICBFUkFTOiBbCisgICAgICAgICAgIkJDIiwKKyAgICAgICAgICAiQUQi
CisgICAgICAgIF0KKyAgICAgIH0sCisKKyAgICAgIHBsdXJhbENhdDogZnVuY3Rpb24obnVtKSB7
CisgICAgICAgIGlmIChudW0gPT09IDEpIHsKKyAgICAgICAgICByZXR1cm4gJ29uZSc7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuICdvdGhlcic7CisgICAgICB9CisgICAgfTsKKyAgfTsKK30K
KwordmFyIFBBVEhfTUFUQ0ggPSAvXihbXlw/I10qKShcPyhbXiNdKikpPygjKC4qKSk/JC8sCisg
ICAgREVGQVVMVF9QT1JUUyA9IHsnaHR0cCc6IDgwLCAnaHR0cHMnOiA0NDMsICdmdHAnOiAyMX07
Cit2YXIgJGxvY2F0aW9uTWluRXJyID0gbWluRXJyKCckbG9jYXRpb24nKTsKKworCisvKioKKyAq
IEVuY29kZSBwYXRoIHVzaW5nIGVuY29kZVVyaVNlZ21lbnQsIGlnbm9yaW5nIGZvcndhcmQgc2xh
c2hlcworICoKKyAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFBhdGggdG8gZW5jb2RlCisgKiBAcmV0
dXJucyB7c3RyaW5nfQorICovCitmdW5jdGlvbiBlbmNvZGVQYXRoKHBhdGgpIHsKKyAgdmFyIHNl
Z21lbnRzID0gcGF0aC5zcGxpdCgnLycpLAorICAgICAgaSA9IHNlZ21lbnRzLmxlbmd0aDsKKwor
ICB3aGlsZSAoaS0tKSB7CisgICAgc2VnbWVudHNbaV0gPSBlbmNvZGVVcmlTZWdtZW50KHNlZ21l
bnRzW2ldKTsKKyAgfQorCisgIHJldHVybiBzZWdtZW50cy5qb2luKCcvJyk7Cit9CisKK2Z1bmN0
aW9uIHBhcnNlQWJzb2x1dGVVcmwoYWJzb2x1dGVVcmwsIGxvY2F0aW9uT2JqKSB7CisgIHZhciBw
YXJzZWRVcmwgPSB1cmxSZXNvbHZlKGFic29sdXRlVXJsKTsKKworICBsb2NhdGlvbk9iai4kJHBy
b3RvY29sID0gcGFyc2VkVXJsLnByb3RvY29sOworICBsb2NhdGlvbk9iai4kJGhvc3QgPSBwYXJz
ZWRVcmwuaG9zdG5hbWU7CisgIGxvY2F0aW9uT2JqLiQkcG9ydCA9IHRvSW50KHBhcnNlZFVybC5w
b3J0KSB8fCBERUZBVUxUX1BPUlRTW3BhcnNlZFVybC5wcm90b2NvbF0gfHwgbnVsbDsKK30KKwor
CitmdW5jdGlvbiBwYXJzZUFwcFVybChyZWxhdGl2ZVVybCwgbG9jYXRpb25PYmopIHsKKyAgdmFy
IHByZWZpeGVkID0gKHJlbGF0aXZlVXJsLmNoYXJBdCgwKSAhPT0gJy8nKTsKKyAgaWYgKHByZWZp
eGVkKSB7CisgICAgcmVsYXRpdmVVcmwgPSAnLycgKyByZWxhdGl2ZVVybDsKKyAgfQorICB2YXIg
bWF0Y2ggPSB1cmxSZXNvbHZlKHJlbGF0aXZlVXJsKTsKKyAgbG9jYXRpb25PYmouJCRwYXRoID0g
ZGVjb2RlVVJJQ29tcG9uZW50KHByZWZpeGVkICYmIG1hdGNoLnBhdGhuYW1lLmNoYXJBdCgwKSA9
PT0gJy8nID8KKyAgICAgIG1hdGNoLnBhdGhuYW1lLnN1YnN0cmluZygxKSA6IG1hdGNoLnBhdGhu
YW1lKTsKKyAgbG9jYXRpb25PYmouJCRzZWFyY2ggPSBwYXJzZUtleVZhbHVlKG1hdGNoLnNlYXJj
aCk7CisgIGxvY2F0aW9uT2JqLiQkaGFzaCA9IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaC5oYXNo
KTsKKworICAvLyBtYWtlIHN1cmUgcGF0aCBzdGFydHMgd2l0aCAnLyc7CisgIGlmIChsb2NhdGlv
bk9iai4kJHBhdGggJiYgbG9jYXRpb25PYmouJCRwYXRoLmNoYXJBdCgwKSAhPSAnLycpIHsKKyAg
ICBsb2NhdGlvbk9iai4kJHBhdGggPSAnLycgKyBsb2NhdGlvbk9iai4kJHBhdGg7CisgIH0KK30K
KworCisvKioKKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gYmVnaW4KKyAqIEBwYXJhbSB7c3RyaW5n
fSB3aG9sZQorICogQHJldHVybnMge3N0cmluZ30gcmV0dXJucyB0ZXh0IGZyb20gd2hvbGUgYWZ0
ZXIgYmVnaW4gb3IgdW5kZWZpbmVkIGlmIGl0IGRvZXMgbm90IGJlZ2luIHdpdGgKKyAqICAgICAg
ICAgICAgICAgICAgIGV4cGVjdGVkIHN0cmluZy4KKyAqLworZnVuY3Rpb24gYmVnaW5zV2l0aChi
ZWdpbiwgd2hvbGUpIHsKKyAgaWYgKHdob2xlLmluZGV4T2YoYmVnaW4pID09PSAwKSB7CisgICAg
cmV0dXJuIHdob2xlLnN1YnN0cihiZWdpbi5sZW5ndGgpOworICB9Cit9CisKKworZnVuY3Rpb24g
c3RyaXBIYXNoKHVybCkgeworICB2YXIgaW5kZXggPSB1cmwuaW5kZXhPZignIycpOworICByZXR1
cm4gaW5kZXggPT0gLTEgPyB1cmwgOiB1cmwuc3Vic3RyKDAsIGluZGV4KTsKK30KKworZnVuY3Rp
b24gdHJpbUVtcHR5SGFzaCh1cmwpIHsKKyAgcmV0dXJuIHVybC5yZXBsYWNlKC8oIy4rKXwjJC8s
ICckMScpOworfQorCisKK2Z1bmN0aW9uIHN0cmlwRmlsZSh1cmwpIHsKKyAgcmV0dXJuIHVybC5z
dWJzdHIoMCwgc3RyaXBIYXNoKHVybCkubGFzdEluZGV4T2YoJy8nKSArIDEpOworfQorCisvKiBy
ZXR1cm4gdGhlIHNlcnZlciBvbmx5IChzY2hlbWU6Ly9ob3N0OnBvcnQpICovCitmdW5jdGlvbiBz
ZXJ2ZXJCYXNlKHVybCkgeworICByZXR1cm4gdXJsLnN1YnN0cmluZygwLCB1cmwuaW5kZXhPZign
LycsIHVybC5pbmRleE9mKCcvLycpICsgMikpOworfQorCisKKy8qKgorICogTG9jYXRpb25IdG1s
NVVybCByZXByZXNlbnRzIGFuIHVybAorICogVGhpcyBvYmplY3QgaXMgZXhwb3NlZCBhcyAkbG9j
YXRpb24gc2VydmljZSB3aGVuIEhUTUw1IG1vZGUgaXMgZW5hYmxlZCBhbmQgc3VwcG9ydGVkCisg
KgorICogQGNvbnN0cnVjdG9yCisgKiBAcGFyYW0ge3N0cmluZ30gYXBwQmFzZSBhcHBsaWNhdGlv
biBiYXNlIFVSTAorICogQHBhcmFtIHtzdHJpbmd9IGJhc2VQcmVmaXggdXJsIHBhdGggcHJlZml4
CisgKi8KK2Z1bmN0aW9uIExvY2F0aW9uSHRtbDVVcmwoYXBwQmFzZSwgYmFzZVByZWZpeCkgewor
ICB0aGlzLiQkaHRtbDUgPSB0cnVlOworICBiYXNlUHJlZml4ID0gYmFzZVByZWZpeCB8fCAnJzsK
KyAgdmFyIGFwcEJhc2VOb0ZpbGUgPSBzdHJpcEZpbGUoYXBwQmFzZSk7CisgIHBhcnNlQWJzb2x1
dGVVcmwoYXBwQmFzZSwgdGhpcyk7CisKKworICAvKioKKyAgICogUGFyc2UgZ2l2ZW4gaHRtbDUg
KHJlZ3VsYXIpIHVybCBzdHJpbmcgaW50byBwcm9wZXJ0aWVzCisgICAqIEBwYXJhbSB7c3RyaW5n
fSB1cmwgSFRNTDUgdXJsCisgICAqIEBwcml2YXRlCisgICAqLworICB0aGlzLiQkcGFyc2UgPSBm
dW5jdGlvbih1cmwpIHsKKyAgICB2YXIgcGF0aFVybCA9IGJlZ2luc1dpdGgoYXBwQmFzZU5vRmls
ZSwgdXJsKTsKKyAgICBpZiAoIWlzU3RyaW5nKHBhdGhVcmwpKSB7CisgICAgICB0aHJvdyAkbG9j
YXRpb25NaW5FcnIoJ2lwdGhwcmZ4JywgJ0ludmFsaWQgdXJsICJ7MH0iLCBtaXNzaW5nIHBhdGgg
cHJlZml4ICJ7MX0iLicsIHVybCwKKyAgICAgICAgICBhcHBCYXNlTm9GaWxlKTsKKyAgICB9CisK
KyAgICBwYXJzZUFwcFVybChwYXRoVXJsLCB0aGlzKTsKKworICAgIGlmICghdGhpcy4kJHBhdGgp
IHsKKyAgICAgIHRoaXMuJCRwYXRoID0gJy8nOworICAgIH0KKworICAgIHRoaXMuJCRjb21wb3Nl
KCk7CisgIH07CisKKyAgLyoqCisgICAqIENvbXBvc2UgdXJsIGFuZCB1cGRhdGUgYGFic1VybGAg
cHJvcGVydHkKKyAgICogQHByaXZhdGUKKyAgICovCisgIHRoaXMuJCRjb21wb3NlID0gZnVuY3Rp
b24oKSB7CisgICAgdmFyIHNlYXJjaCA9IHRvS2V5VmFsdWUodGhpcy4kJHNlYXJjaCksCisgICAg
ICAgIGhhc2ggPSB0aGlzLiQkaGFzaCA/ICcjJyArIGVuY29kZVVyaVNlZ21lbnQodGhpcy4kJGhh
c2gpIDogJyc7CisKKyAgICB0aGlzLiQkdXJsID0gZW5jb2RlUGF0aCh0aGlzLiQkcGF0aCkgKyAo
c2VhcmNoID8gJz8nICsgc2VhcmNoIDogJycpICsgaGFzaDsKKyAgICB0aGlzLiQkYWJzVXJsID0g
YXBwQmFzZU5vRmlsZSArIHRoaXMuJCR1cmwuc3Vic3RyKDEpOyAvLyBmaXJzdCBjaGFyIGlzIGFs
d2F5cyAnLycKKyAgfTsKKworICB0aGlzLiQkcGFyc2VMaW5rVXJsID0gZnVuY3Rpb24odXJsLCBy
ZWxIcmVmKSB7CisgICAgaWYgKHJlbEhyZWYgJiYgcmVsSHJlZlswXSA9PT0gJyMnKSB7CisgICAg
ICAvLyBzcGVjaWFsIGNhc2UgZm9yIGxpbmtzIHRvIGhhc2ggZnJhZ21lbnRzOgorICAgICAgLy8g
a2VlcCB0aGUgb2xkIHVybCBhbmQgb25seSByZXBsYWNlIHRoZSBoYXNoIGZyYWdtZW50CisgICAg
ICB0aGlzLmhhc2gocmVsSHJlZi5zbGljZSgxKSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgdmFyIGFwcFVybCwgcHJldkFwcFVybDsKKyAgICB2YXIgcmV3cml0dGVuVXJsOworCisg
ICAgaWYgKChhcHBVcmwgPSBiZWdpbnNXaXRoKGFwcEJhc2UsIHVybCkpICE9PSB1bmRlZmluZWQp
IHsKKyAgICAgIHByZXZBcHBVcmwgPSBhcHBVcmw7CisgICAgICBpZiAoKGFwcFVybCA9IGJlZ2lu
c1dpdGgoYmFzZVByZWZpeCwgYXBwVXJsKSkgIT09IHVuZGVmaW5lZCkgeworICAgICAgICByZXdy
aXR0ZW5VcmwgPSBhcHBCYXNlTm9GaWxlICsgKGJlZ2luc1dpdGgoJy8nLCBhcHBVcmwpIHx8IGFw
cFVybCk7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXdyaXR0ZW5VcmwgPSBhcHBCYXNlICsg
cHJldkFwcFVybDsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKChhcHBVcmwgPSBiZWdpbnNXaXRo
KGFwcEJhc2VOb0ZpbGUsIHVybCkpICE9PSB1bmRlZmluZWQpIHsKKyAgICAgIHJld3JpdHRlblVy
bCA9IGFwcEJhc2VOb0ZpbGUgKyBhcHBVcmw7CisgICAgfSBlbHNlIGlmIChhcHBCYXNlTm9GaWxl
ID09IHVybCArICcvJykgeworICAgICAgcmV3cml0dGVuVXJsID0gYXBwQmFzZU5vRmlsZTsKKyAg
ICB9CisgICAgaWYgKHJld3JpdHRlblVybCkgeworICAgICAgdGhpcy4kJHBhcnNlKHJld3JpdHRl
blVybCk7CisgICAgfQorICAgIHJldHVybiAhIXJld3JpdHRlblVybDsKKyAgfTsKK30KKworCisv
KioKKyAqIExvY2F0aW9uSGFzaGJhbmdVcmwgcmVwcmVzZW50cyB1cmwKKyAqIFRoaXMgb2JqZWN0
IGlzIGV4cG9zZWQgYXMgJGxvY2F0aW9uIHNlcnZpY2Ugd2hlbiBkZXZlbG9wZXIgZG9lc24ndCBv
cHQgaW50byBodG1sNSBtb2RlLgorICogSXQgYWxzbyBzZXJ2ZXMgYXMgdGhlIGJhc2UgY2xhc3Mg
Zm9yIGh0bWw1IG1vZGUgZmFsbGJhY2sgb24gbGVnYWN5IGJyb3dzZXJzLgorICoKKyAqIEBjb25z
dHJ1Y3RvcgorICogQHBhcmFtIHtzdHJpbmd9IGFwcEJhc2UgYXBwbGljYXRpb24gYmFzZSBVUkwK
KyAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoUHJlZml4IGhhc2hiYW5nIHByZWZpeAorICovCitmdW5j
dGlvbiBMb2NhdGlvbkhhc2hiYW5nVXJsKGFwcEJhc2UsIGhhc2hQcmVmaXgpIHsKKyAgdmFyIGFw
cEJhc2VOb0ZpbGUgPSBzdHJpcEZpbGUoYXBwQmFzZSk7CisKKyAgcGFyc2VBYnNvbHV0ZVVybChh
cHBCYXNlLCB0aGlzKTsKKworCisgIC8qKgorICAgKiBQYXJzZSBnaXZlbiBoYXNoYmFuZyB1cmwg
aW50byBwcm9wZXJ0aWVzCisgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgSGFzaGJhbmcgdXJsCisg
ICAqIEBwcml2YXRlCisgICAqLworICB0aGlzLiQkcGFyc2UgPSBmdW5jdGlvbih1cmwpIHsKKyAg
ICB2YXIgd2l0aG91dEJhc2VVcmwgPSBiZWdpbnNXaXRoKGFwcEJhc2UsIHVybCkgfHwgYmVnaW5z
V2l0aChhcHBCYXNlTm9GaWxlLCB1cmwpOworICAgIHZhciB3aXRob3V0SGFzaFVybDsKKworICAg
IGlmICghaXNVbmRlZmluZWQod2l0aG91dEJhc2VVcmwpICYmIHdpdGhvdXRCYXNlVXJsLmNoYXJB
dCgwKSA9PT0gJyMnKSB7CisKKyAgICAgIC8vIFRoZSByZXN0IG9mIHRoZSB1cmwgc3RhcnRzIHdp
dGggYSBoYXNoIHNvIHdlIGhhdmUKKyAgICAgIC8vIGdvdCBlaXRoZXIgYSBoYXNoYmFuZyBwYXRo
IG9yIGEgcGxhaW4gaGFzaCBmcmFnbWVudAorICAgICAgd2l0aG91dEhhc2hVcmwgPSBiZWdpbnNX
aXRoKGhhc2hQcmVmaXgsIHdpdGhvdXRCYXNlVXJsKTsKKyAgICAgIGlmIChpc1VuZGVmaW5lZCh3
aXRob3V0SGFzaFVybCkpIHsKKyAgICAgICAgLy8gVGhlcmUgd2FzIG5vIGhhc2hiYW5nIHByZWZp
eCBzbyB3ZSBqdXN0IGhhdmUgYSBoYXNoIGZyYWdtZW50CisgICAgICAgIHdpdGhvdXRIYXNoVXJs
ID0gd2l0aG91dEJhc2VVcmw7CisgICAgICB9CisKKyAgICB9IGVsc2UgeworICAgICAgLy8gVGhl
cmUgd2FzIG5vIGhhc2hiYW5nIHBhdGggbm9yIGhhc2ggZnJhZ21lbnQ6CisgICAgICAvLyBJZiB3
ZSBhcmUgaW4gSFRNTDUgbW9kZSB3ZSB1c2Ugd2hhdCBpcyBsZWZ0IGFzIHRoZSBwYXRoOworICAg
ICAgLy8gT3RoZXJ3aXNlIHdlIGlnbm9yZSB3aGF0IGlzIGxlZnQKKyAgICAgIGlmICh0aGlzLiQk
aHRtbDUpIHsKKyAgICAgICAgd2l0aG91dEhhc2hVcmwgPSB3aXRob3V0QmFzZVVybDsKKyAgICAg
IH0gZWxzZSB7CisgICAgICAgIHdpdGhvdXRIYXNoVXJsID0gJyc7CisgICAgICAgIGlmIChpc1Vu
ZGVmaW5lZCh3aXRob3V0QmFzZVVybCkpIHsKKyAgICAgICAgICBhcHBCYXNlID0gdXJsOworICAg
ICAgICAgIHRoaXMucmVwbGFjZSgpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAg
cGFyc2VBcHBVcmwod2l0aG91dEhhc2hVcmwsIHRoaXMpOworCisgICAgdGhpcy4kJHBhdGggPSBy
ZW1vdmVXaW5kb3dzRHJpdmVOYW1lKHRoaXMuJCRwYXRoLCB3aXRob3V0SGFzaFVybCwgYXBwQmFz
ZSk7CisKKyAgICB0aGlzLiQkY29tcG9zZSgpOworCisgICAgLyoKKyAgICAgKiBJbiBXaW5kb3dz
LCBvbiBhbiBhbmNob3Igbm9kZSBvbiBkb2N1bWVudHMgbG9hZGVkIGZyb20KKyAgICAgKiB0aGUg
ZmlsZXN5c3RlbSwgdGhlIGJyb3dzZXIgd2lsbCByZXR1cm4gYSBwYXRobmFtZQorICAgICAqIHBy
ZWZpeGVkIHdpdGggdGhlIGRyaXZlIG5hbWUgKCcvQzovcGF0aCcpIHdoZW4gYQorICAgICAqIHBh
dGhuYW1lIHdpdGhvdXQgYSBkcml2ZSBpcyBzZXQ6CisgICAgICogICogYS5zZXRBdHRyaWJ1dGUo
J2hyZWYnLCAnL2ZvbycpCisgICAgICogICAqIGEucGF0aG5hbWUgPT09ICcvQzovZm9vJyAvL3Ry
dWUKKyAgICAgKgorICAgICAqIEluc2lkZSBvZiBBbmd1bGFyLCB3ZSdyZSBhbHdheXMgdXNpbmcg
cGF0aG5hbWVzIHRoYXQKKyAgICAgKiBkbyBub3QgaW5jbHVkZSBkcml2ZSBuYW1lcyBmb3Igcm91
dGluZy4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiByZW1vdmVXaW5kb3dzRHJpdmVOYW1lKHBhdGgs
IHVybCwgYmFzZSkgeworICAgICAgLyoKKyAgICAgIE1hdGNoZXMgcGF0aHMgZm9yIGZpbGUgcHJv
dG9jb2wgb24gd2luZG93cywKKyAgICAgIHN1Y2ggYXMgL0M6L2Zvby9iYXIsIGFuZCBjYXB0dXJl
cyBvbmx5IC9mb28vYmFyLgorICAgICAgKi8KKyAgICAgIHZhciB3aW5kb3dzRmlsZVBhdGhFeHAg
PSAvXlwvW0EtWl06KFwvLiopLzsKKworICAgICAgdmFyIGZpcnN0UGF0aFNlZ21lbnRNYXRjaDsK
KworICAgICAgLy9HZXQgdGhlIHJlbGF0aXZlIHBhdGggZnJvbSB0aGUgaW5wdXQgVVJMLgorICAg
ICAgaWYgKHVybC5pbmRleE9mKGJhc2UpID09PSAwKSB7CisgICAgICAgIHVybCA9IHVybC5yZXBs
YWNlKGJhc2UsICcnKTsKKyAgICAgIH0KKworICAgICAgLy8gVGhlIGlucHV0IFVSTCBpbnRlbnRp
b25hbGx5IGNvbnRhaW5zIGEgZmlyc3QgcGF0aCBzZWdtZW50IHRoYXQgZW5kcyB3aXRoIGEgY29s
b24uCisgICAgICBpZiAod2luZG93c0ZpbGVQYXRoRXhwLmV4ZWModXJsKSkgeworICAgICAgICBy
ZXR1cm4gcGF0aDsKKyAgICAgIH0KKworICAgICAgZmlyc3RQYXRoU2VnbWVudE1hdGNoID0gd2lu
ZG93c0ZpbGVQYXRoRXhwLmV4ZWMocGF0aCk7CisgICAgICByZXR1cm4gZmlyc3RQYXRoU2VnbWVu
dE1hdGNoID8gZmlyc3RQYXRoU2VnbWVudE1hdGNoWzFdIDogcGF0aDsKKyAgICB9CisgIH07CisK
KyAgLyoqCisgICAqIENvbXBvc2UgaGFzaGJhbmcgdXJsIGFuZCB1cGRhdGUgYGFic1VybGAgcHJv
cGVydHkKKyAgICogQHByaXZhdGUKKyAgICovCisgIHRoaXMuJCRjb21wb3NlID0gZnVuY3Rpb24o
KSB7CisgICAgdmFyIHNlYXJjaCA9IHRvS2V5VmFsdWUodGhpcy4kJHNlYXJjaCksCisgICAgICAg
IGhhc2ggPSB0aGlzLiQkaGFzaCA/ICcjJyArIGVuY29kZVVyaVNlZ21lbnQodGhpcy4kJGhhc2gp
IDogJyc7CisKKyAgICB0aGlzLiQkdXJsID0gZW5jb2RlUGF0aCh0aGlzLiQkcGF0aCkgKyAoc2Vh
cmNoID8gJz8nICsgc2VhcmNoIDogJycpICsgaGFzaDsKKyAgICB0aGlzLiQkYWJzVXJsID0gYXBw
QmFzZSArICh0aGlzLiQkdXJsID8gaGFzaFByZWZpeCArIHRoaXMuJCR1cmwgOiAnJyk7CisgIH07
CisKKyAgdGhpcy4kJHBhcnNlTGlua1VybCA9IGZ1bmN0aW9uKHVybCwgcmVsSHJlZikgeworICAg
IGlmIChzdHJpcEhhc2goYXBwQmFzZSkgPT0gc3RyaXBIYXNoKHVybCkpIHsKKyAgICAgIHRoaXMu
JCRwYXJzZSh1cmwpOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKKyAgfTsKK30KKworCisvKioKKyAqIExvY2F0aW9uSGFzaGJhbmdVcmwgcmVwcmVzZW50cyB1
cmwKKyAqIFRoaXMgb2JqZWN0IGlzIGV4cG9zZWQgYXMgJGxvY2F0aW9uIHNlcnZpY2Ugd2hlbiBo
dG1sNSBoaXN0b3J5IGFwaSBpcyBlbmFibGVkIGJ1dCB0aGUgYnJvd3NlcgorICogZG9lcyBub3Qg
c3VwcG9ydCBpdC4KKyAqCisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7c3RyaW5nfSBhcHBC
YXNlIGFwcGxpY2F0aW9uIGJhc2UgVVJMCisgKiBAcGFyYW0ge3N0cmluZ30gaGFzaFByZWZpeCBo
YXNoYmFuZyBwcmVmaXgKKyAqLworZnVuY3Rpb24gTG9jYXRpb25IYXNoYmFuZ0luSHRtbDVVcmwo
YXBwQmFzZSwgaGFzaFByZWZpeCkgeworICB0aGlzLiQkaHRtbDUgPSB0cnVlOworICBMb2NhdGlv
bkhhc2hiYW5nVXJsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisKKyAgdmFyIGFwcEJhc2VOb0Zp
bGUgPSBzdHJpcEZpbGUoYXBwQmFzZSk7CisKKyAgdGhpcy4kJHBhcnNlTGlua1VybCA9IGZ1bmN0
aW9uKHVybCwgcmVsSHJlZikgeworICAgIGlmIChyZWxIcmVmICYmIHJlbEhyZWZbMF0gPT09ICcj
JykgeworICAgICAgLy8gc3BlY2lhbCBjYXNlIGZvciBsaW5rcyB0byBoYXNoIGZyYWdtZW50czoK
KyAgICAgIC8vIGtlZXAgdGhlIG9sZCB1cmwgYW5kIG9ubHkgcmVwbGFjZSB0aGUgaGFzaCBmcmFn
bWVudAorICAgICAgdGhpcy5oYXNoKHJlbEhyZWYuc2xpY2UoMSkpOworICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgdmFyIHJld3JpdHRlblVybDsKKyAgICB2YXIgYXBwVXJsOworCisg
ICAgaWYgKGFwcEJhc2UgPT0gc3RyaXBIYXNoKHVybCkpIHsKKyAgICAgIHJld3JpdHRlblVybCA9
IHVybDsKKyAgICB9IGVsc2UgaWYgKChhcHBVcmwgPSBiZWdpbnNXaXRoKGFwcEJhc2VOb0ZpbGUs
IHVybCkpKSB7CisgICAgICByZXdyaXR0ZW5VcmwgPSBhcHBCYXNlICsgaGFzaFByZWZpeCArIGFw
cFVybDsKKyAgICB9IGVsc2UgaWYgKGFwcEJhc2VOb0ZpbGUgPT09IHVybCArICcvJykgeworICAg
ICAgcmV3cml0dGVuVXJsID0gYXBwQmFzZU5vRmlsZTsKKyAgICB9CisgICAgaWYgKHJld3JpdHRl
blVybCkgeworICAgICAgdGhpcy4kJHBhcnNlKHJld3JpdHRlblVybCk7CisgICAgfQorICAgIHJl
dHVybiAhIXJld3JpdHRlblVybDsKKyAgfTsKKworICB0aGlzLiQkY29tcG9zZSA9IGZ1bmN0aW9u
KCkgeworICAgIHZhciBzZWFyY2ggPSB0b0tleVZhbHVlKHRoaXMuJCRzZWFyY2gpLAorICAgICAg
ICBoYXNoID0gdGhpcy4kJGhhc2ggPyAnIycgKyBlbmNvZGVVcmlTZWdtZW50KHRoaXMuJCRoYXNo
KSA6ICcnOworCisgICAgdGhpcy4kJHVybCA9IGVuY29kZVBhdGgodGhpcy4kJHBhdGgpICsgKHNl
YXJjaCA/ICc/JyArIHNlYXJjaCA6ICcnKSArIGhhc2g7CisgICAgLy8gaW5jbHVkZSBoYXNoUHJl
Zml4IGluICQkYWJzVXJsIHdoZW4gJCR1cmwgaXMgZW1wdHkgc28gSUU4ICYgOSBkbyBub3QgcmVs
b2FkIHBhZ2UgYmVjYXVzZSBvZiByZW1vdmFsIG9mICcjJworICAgIHRoaXMuJCRhYnNVcmwgPSBh
cHBCYXNlICsgaGFzaFByZWZpeCArIHRoaXMuJCR1cmw7CisgIH07CisKK30KKworCit2YXIgbG9j
YXRpb25Qcm90b3R5cGUgPSB7CisKKyAgLyoqCisgICAqIEFyZSB3ZSBpbiBodG1sNSBtb2RlPwor
ICAgKiBAcHJpdmF0ZQorICAgKi8KKyAgJCRodG1sNTogZmFsc2UsCisKKyAgLyoqCisgICAqIEhh
cyBhbnkgY2hhbmdlIGJlZW4gcmVwbGFjaW5nPworICAgKiBAcHJpdmF0ZQorICAgKi8KKyAgJCRy
ZXBsYWNlOiBmYWxzZSwKKworICAvKioKKyAgICogQG5nZG9jIG1ldGhvZAorICAgKiBAbmFtZSAk
bG9jYXRpb24jYWJzVXJsCisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBUaGlzIG1ldGhv
ZCBpcyBnZXR0ZXIgb25seS4KKyAgICoKKyAgICogUmV0dXJuIGZ1bGwgdXJsIHJlcHJlc2VudGF0
aW9uIHdpdGggYWxsIHNlZ21lbnRzIGVuY29kZWQgYWNjb3JkaW5nIHRvIHJ1bGVzIHNwZWNpZmll
ZCBpbgorICAgKiBbUkZDIDM5ODZdKGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzM5ODYudHh0
KS4KKyAgICoKKyAgICoKKyAgICogYGBganMKKyAgICogLy8gZ2l2ZW4gdXJsIGh0dHA6Ly9leGFt
cGxlLmNvbS8jL3NvbWUvcGF0aD9mb289YmFyJmJhej14b3hvCisgICAqIHZhciBhYnNVcmwgPSAk
bG9jYXRpb24uYWJzVXJsKCk7CisgICAqIC8vID0+ICJodHRwOi8vZXhhbXBsZS5jb20vIy9zb21l
L3BhdGg/Zm9vPWJhciZiYXo9eG94byIKKyAgICogYGBgCisgICAqCisgICAqIEByZXR1cm4ge3N0
cmluZ30gZnVsbCB1cmwKKyAgICovCisgIGFic1VybDogbG9jYXRpb25HZXR0ZXIoJyQkYWJzVXJs
JyksCisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgJGxvY2F0aW9uI3Vy
bAorICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAgICogVGhpcyBtZXRob2QgaXMgZ2V0dGVyIC8g
c2V0dGVyLgorICAgKgorICAgKiBSZXR1cm4gdXJsIChlLmcuIGAvcGF0aD9hPWIjaGFzaGApIHdo
ZW4gY2FsbGVkIHdpdGhvdXQgYW55IHBhcmFtZXRlci4KKyAgICoKKyAgICogQ2hhbmdlIHBhdGgs
IHNlYXJjaCBhbmQgaGFzaCwgd2hlbiBjYWxsZWQgd2l0aCBwYXJhbWV0ZXIgYW5kIHJldHVybiBg
JGxvY2F0aW9uYC4KKyAgICoKKyAgICoKKyAgICogYGBganMKKyAgICogLy8gZ2l2ZW4gdXJsIGh0
dHA6Ly9leGFtcGxlLmNvbS8jL3NvbWUvcGF0aD9mb289YmFyJmJhej14b3hvCisgICAqIHZhciB1
cmwgPSAkbG9jYXRpb24udXJsKCk7CisgICAqIC8vID0+ICIvc29tZS9wYXRoP2Zvbz1iYXImYmF6
PXhveG8iCisgICAqIGBgYAorICAgKgorICAgKiBAcGFyYW0ge3N0cmluZz19IHVybCBOZXcgdXJs
IHdpdGhvdXQgYmFzZSBwcmVmaXggKGUuZy4gYC9wYXRoP2E9YiNoYXNoYCkKKyAgICogQHJldHVy
biB7c3RyaW5nfSB1cmwKKyAgICovCisgIHVybDogZnVuY3Rpb24odXJsKSB7CisgICAgaWYgKGlz
VW5kZWZpbmVkKHVybCkpIHsKKyAgICAgIHJldHVybiB0aGlzLiQkdXJsOworICAgIH0KKworICAg
IHZhciBtYXRjaCA9IFBBVEhfTUFUQ0guZXhlYyh1cmwpOworICAgIGlmIChtYXRjaFsxXSB8fCB1
cmwgPT09ICcnKSB0aGlzLnBhdGgoZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzFdKSk7CisgICAg
aWYgKG1hdGNoWzJdIHx8IG1hdGNoWzFdIHx8IHVybCA9PT0gJycpIHRoaXMuc2VhcmNoKG1hdGNo
WzNdIHx8ICcnKTsKKyAgICB0aGlzLmhhc2gobWF0Y2hbNV0gfHwgJycpOworCisgICAgcmV0dXJu
IHRoaXM7CisgIH0sCisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgJGxv
Y2F0aW9uI3Byb3RvY29sCisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBUaGlzIG1ldGhv
ZCBpcyBnZXR0ZXIgb25seS4KKyAgICoKKyAgICogUmV0dXJuIHByb3RvY29sIG9mIGN1cnJlbnQg
dXJsLgorICAgKgorICAgKgorICAgKiBgYGBqcworICAgKiAvLyBnaXZlbiB1cmwgaHR0cDovL2V4
YW1wbGUuY29tLyMvc29tZS9wYXRoP2Zvbz1iYXImYmF6PXhveG8KKyAgICogdmFyIHByb3RvY29s
ID0gJGxvY2F0aW9uLnByb3RvY29sKCk7CisgICAqIC8vID0+ICJodHRwIgorICAgKiBgYGAKKyAg
ICoKKyAgICogQHJldHVybiB7c3RyaW5nfSBwcm90b2NvbCBvZiBjdXJyZW50IHVybAorICAgKi8K
KyAgcHJvdG9jb2w6IGxvY2F0aW9uR2V0dGVyKCckJHByb3RvY29sJyksCisKKyAgLyoqCisgICAq
IEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgJGxvY2F0aW9uI2hvc3QKKyAgICoKKyAgICogQGRl
c2NyaXB0aW9uCisgICAqIFRoaXMgbWV0aG9kIGlzIGdldHRlciBvbmx5LgorICAgKgorICAgKiBS
ZXR1cm4gaG9zdCBvZiBjdXJyZW50IHVybC4KKyAgICoKKyAgICogTm90ZTogY29tcGFyZWQgdG8g
dGhlIG5vbi1hbmd1bGFyIHZlcnNpb24gYGxvY2F0aW9uLmhvc3RgIHdoaWNoIHJldHVybnMgYGhv
c3RuYW1lOnBvcnRgLCB0aGlzIHJldHVybnMgdGhlIGBob3N0bmFtZWAgcG9ydGlvbiBvbmx5Lgor
ICAgKgorICAgKgorICAgKiBgYGBqcworICAgKiAvLyBnaXZlbiB1cmwgaHR0cDovL2V4YW1wbGUu
Y29tLyMvc29tZS9wYXRoP2Zvbz1iYXImYmF6PXhveG8KKyAgICogdmFyIGhvc3QgPSAkbG9jYXRp
b24uaG9zdCgpOworICAgKiAvLyA9PiAiZXhhbXBsZS5jb20iCisgICAqCisgICAqIC8vIGdpdmVu
IHVybCBodHRwOi8vdXNlcjpwYXNzd29yZEBleGFtcGxlLmNvbTo4MDgwLyMvc29tZS9wYXRoP2Zv
bz1iYXImYmF6PXhveG8KKyAgICogaG9zdCA9ICRsb2NhdGlvbi5ob3N0KCk7CisgICAqIC8vID0+
ICJleGFtcGxlLmNvbSIKKyAgICogaG9zdCA9IGxvY2F0aW9uLmhvc3Q7CisgICAqIC8vID0+ICJl
eGFtcGxlLmNvbTo4MDgwIgorICAgKiBgYGAKKyAgICoKKyAgICogQHJldHVybiB7c3RyaW5nfSBo
b3N0IG9mIGN1cnJlbnQgdXJsLgorICAgKi8KKyAgaG9zdDogbG9jYXRpb25HZXR0ZXIoJyQkaG9z
dCcpLAorCisgIC8qKgorICAgKiBAbmdkb2MgbWV0aG9kCisgICAqIEBuYW1lICRsb2NhdGlvbiNw
b3J0CisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBUaGlzIG1ldGhvZCBpcyBnZXR0ZXIg
b25seS4KKyAgICoKKyAgICogUmV0dXJuIHBvcnQgb2YgY3VycmVudCB1cmwuCisgICAqCisgICAq
CisgICAqIGBgYGpzCisgICAqIC8vIGdpdmVuIHVybCBodHRwOi8vZXhhbXBsZS5jb20vIy9zb21l
L3BhdGg/Zm9vPWJhciZiYXo9eG94bworICAgKiB2YXIgcG9ydCA9ICRsb2NhdGlvbi5wb3J0KCk7
CisgICAqIC8vID0+IDgwCisgICAqIGBgYAorICAgKgorICAgKiBAcmV0dXJuIHtOdW1iZXJ9IHBv
cnQKKyAgICovCisgIHBvcnQ6IGxvY2F0aW9uR2V0dGVyKCckJHBvcnQnKSwKKworICAvKioKKyAg
ICogQG5nZG9jIG1ldGhvZAorICAgKiBAbmFtZSAkbG9jYXRpb24jcGF0aAorICAgKgorICAgKiBA
ZGVzY3JpcHRpb24KKyAgICogVGhpcyBtZXRob2QgaXMgZ2V0dGVyIC8gc2V0dGVyLgorICAgKgor
ICAgKiBSZXR1cm4gcGF0aCBvZiBjdXJyZW50IHVybCB3aGVuIGNhbGxlZCB3aXRob3V0IGFueSBw
YXJhbWV0ZXIuCisgICAqCisgICAqIENoYW5nZSBwYXRoIHdoZW4gY2FsbGVkIHdpdGggcGFyYW1l
dGVyIGFuZCByZXR1cm4gYCRsb2NhdGlvbmAuCisgICAqCisgICAqIE5vdGU6IFBhdGggc2hvdWxk
IGFsd2F5cyBiZWdpbiB3aXRoIGZvcndhcmQgc2xhc2ggKC8pLCB0aGlzIG1ldGhvZCB3aWxsIGFk
ZCB0aGUgZm9yd2FyZCBzbGFzaAorICAgKiBpZiBpdCBpcyBtaXNzaW5nLgorICAgKgorICAgKgor
ICAgKiBgYGBqcworICAgKiAvLyBnaXZlbiB1cmwgaHR0cDovL2V4YW1wbGUuY29tLyMvc29tZS9w
YXRoP2Zvbz1iYXImYmF6PXhveG8KKyAgICogdmFyIHBhdGggPSAkbG9jYXRpb24ucGF0aCgpOwor
ICAgKiAvLyA9PiAiL3NvbWUvcGF0aCIKKyAgICogYGBgCisgICAqCisgICAqIEBwYXJhbSB7KHN0
cmluZ3xudW1iZXIpPX0gcGF0aCBOZXcgcGF0aAorICAgKiBAcmV0dXJuIHtzdHJpbmd9IHBhdGgK
KyAgICovCisgIHBhdGg6IGxvY2F0aW9uR2V0dGVyU2V0dGVyKCckJHBhdGgnLCBmdW5jdGlvbihw
YXRoKSB7CisgICAgcGF0aCA9IHBhdGggIT09IG51bGwgPyBwYXRoLnRvU3RyaW5nKCkgOiAnJzsK
KyAgICByZXR1cm4gcGF0aC5jaGFyQXQoMCkgPT0gJy8nID8gcGF0aCA6ICcvJyArIHBhdGg7Cisg
IH0pLAorCisgIC8qKgorICAgKiBAbmdkb2MgbWV0aG9kCisgICAqIEBuYW1lICRsb2NhdGlvbiNz
ZWFyY2gKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIFRoaXMgbWV0aG9kIGlzIGdldHRl
ciAvIHNldHRlci4KKyAgICoKKyAgICogUmV0dXJuIHNlYXJjaCBwYXJ0IChhcyBvYmplY3QpIG9m
IGN1cnJlbnQgdXJsIHdoZW4gY2FsbGVkIHdpdGhvdXQgYW55IHBhcmFtZXRlci4KKyAgICoKKyAg
ICogQ2hhbmdlIHNlYXJjaCBwYXJ0IHdoZW4gY2FsbGVkIHdpdGggcGFyYW1ldGVyIGFuZCByZXR1
cm4gYCRsb2NhdGlvbmAuCisgICAqCisgICAqCisgICAqIGBgYGpzCisgICAqIC8vIGdpdmVuIHVy
bCBodHRwOi8vZXhhbXBsZS5jb20vIy9zb21lL3BhdGg/Zm9vPWJhciZiYXo9eG94bworICAgKiB2
YXIgc2VhcmNoT2JqZWN0ID0gJGxvY2F0aW9uLnNlYXJjaCgpOworICAgKiAvLyA9PiB7Zm9vOiAn
YmFyJywgYmF6OiAneG94byd9CisgICAqCisgICAqIC8vIHNldCBmb28gdG8gJ3lpcGVlJworICAg
KiAkbG9jYXRpb24uc2VhcmNoKCdmb28nLCAneWlwZWUnKTsKKyAgICogLy8gJGxvY2F0aW9uLnNl
YXJjaCgpID0+IHtmb286ICd5aXBlZScsIGJhejogJ3hveG8nfQorICAgKiBgYGAKKyAgICoKKyAg
ICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0LjxzdHJpbmc+fE9iamVjdC48QXJyYXkuPHN0cmluZz4+
fSBzZWFyY2ggTmV3IHNlYXJjaCBwYXJhbXMgLSBzdHJpbmcgb3IKKyAgICogaGFzaCBvYmplY3Qu
CisgICAqCisgICAqIFdoZW4gY2FsbGVkIHdpdGggYSBzaW5nbGUgYXJndW1lbnQgdGhlIG1ldGhv
ZCBhY3RzIGFzIGEgc2V0dGVyLCBzZXR0aW5nIHRoZSBgc2VhcmNoYCBjb21wb25lbnQKKyAgICog
b2YgYCRsb2NhdGlvbmAgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZS4KKyAgICoKKyAgICogSWYgdGhl
IGFyZ3VtZW50IGlzIGEgaGFzaCBvYmplY3QgY29udGFpbmluZyBhbiBhcnJheSBvZiB2YWx1ZXMs
IHRoZXNlIHZhbHVlcyB3aWxsIGJlIGVuY29kZWQKKyAgICogYXMgZHVwbGljYXRlIHNlYXJjaCBw
YXJhbWV0ZXJzIGluIHRoZSB1cmwuCisgICAqCisgICAqIEBwYXJhbSB7KHN0cmluZ3xOdW1iZXJ8
QXJyYXk8c3RyaW5nPnxib29sZWFuKT19IHBhcmFtVmFsdWUgSWYgYHNlYXJjaGAgaXMgYSBzdHJp
bmcgb3IgbnVtYmVyLCB0aGVuIGBwYXJhbVZhbHVlYAorICAgKiB3aWxsIG92ZXJyaWRlIG9ubHkg
YSBzaW5nbGUgc2VhcmNoIHByb3BlcnR5LgorICAgKgorICAgKiBJZiBgcGFyYW1WYWx1ZWAgaXMg
YW4gYXJyYXksIGl0IHdpbGwgb3ZlcnJpZGUgdGhlIHByb3BlcnR5IG9mIHRoZSBgc2VhcmNoYCBj
b21wb25lbnQgb2YKKyAgICogYCRsb2NhdGlvbmAgc3BlY2lmaWVkIHZpYSB0aGUgZmlyc3QgYXJn
dW1lbnQuCisgICAqCisgICAqIElmIGBwYXJhbVZhbHVlYCBpcyBgbnVsbGAsIHRoZSBwcm9wZXJ0
eSBzcGVjaWZpZWQgdmlhIHRoZSBmaXJzdCBhcmd1bWVudCB3aWxsIGJlIGRlbGV0ZWQuCisgICAq
CisgICAqIElmIGBwYXJhbVZhbHVlYCBpcyBgdHJ1ZWAsIHRoZSBwcm9wZXJ0eSBzcGVjaWZpZWQg
dmlhIHRoZSBmaXJzdCBhcmd1bWVudCB3aWxsIGJlIGFkZGVkIHdpdGggbm8KKyAgICogdmFsdWUg
bm9yIHRyYWlsaW5nIGVxdWFsIHNpZ24uCisgICAqCisgICAqIEByZXR1cm4ge09iamVjdH0gSWYg
Y2FsbGVkIHdpdGggbm8gYXJndW1lbnRzIHJldHVybnMgdGhlIHBhcnNlZCBgc2VhcmNoYCBvYmpl
Y3QuIElmIGNhbGxlZCB3aXRoCisgICAqIG9uZSBvciBtb3JlIGFyZ3VtZW50cyByZXR1cm5zIGAk
bG9jYXRpb25gIG9iamVjdCBpdHNlbGYuCisgICAqLworICBzZWFyY2g6IGZ1bmN0aW9uKHNlYXJj
aCwgcGFyYW1WYWx1ZSkgeworICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkgeworICAgICAg
Y2FzZSAwOgorICAgICAgICByZXR1cm4gdGhpcy4kJHNlYXJjaDsKKyAgICAgIGNhc2UgMToKKyAg
ICAgICAgaWYgKGlzU3RyaW5nKHNlYXJjaCkgfHwgaXNOdW1iZXIoc2VhcmNoKSkgeworICAgICAg
ICAgIHNlYXJjaCA9IHNlYXJjaC50b1N0cmluZygpOworICAgICAgICAgIHRoaXMuJCRzZWFyY2gg
PSBwYXJzZUtleVZhbHVlKHNlYXJjaCk7CisgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3Qoc2Vh
cmNoKSkgeworICAgICAgICAgIHNlYXJjaCA9IGNvcHkoc2VhcmNoLCB7fSk7CisgICAgICAgICAg
Ly8gcmVtb3ZlIG9iamVjdCB1bmRlZmluZWQgb3IgbnVsbCBwcm9wZXJ0aWVzCisgICAgICAgICAg
Zm9yRWFjaChzZWFyY2gsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHsKKyAgICAgICAgICAgIGlmICh2
YWx1ZSA9PSBudWxsKSBkZWxldGUgc2VhcmNoW2tleV07CisgICAgICAgICAgfSk7CisKKyAgICAg
ICAgICB0aGlzLiQkc2VhcmNoID0gc2VhcmNoOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
IHRocm93ICRsb2NhdGlvbk1pbkVycignaXNyY2hhcmcnLAorICAgICAgICAgICAgICAnVGhlIGZp
cnN0IGFyZ3VtZW50IG9mIHRoZSBgJGxvY2F0aW9uI3NlYXJjaCgpYCBjYWxsIG11c3QgYmUgYSBz
dHJpbmcgb3IgYW4gb2JqZWN0LicpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHBhcmFtVmFsdWUpIHx8IHBhcmFtVmFs
dWUgPT09IG51bGwpIHsKKyAgICAgICAgICBkZWxldGUgdGhpcy4kJHNlYXJjaFtzZWFyY2hdOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRoaXMuJCRzZWFyY2hbc2VhcmNoXSA9IHBhcmFt
VmFsdWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0aGlzLiQkY29tcG9zZSgpOworICAgIHJl
dHVybiB0aGlzOworICB9LAorCisgIC8qKgorICAgKiBAbmdkb2MgbWV0aG9kCisgICAqIEBuYW1l
ICRsb2NhdGlvbiNoYXNoCisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBUaGlzIG1ldGhv
ZCBpcyBnZXR0ZXIgLyBzZXR0ZXIuCisgICAqCisgICAqIFJldHVybiBoYXNoIGZyYWdtZW50IHdo
ZW4gY2FsbGVkIHdpdGhvdXQgYW55IHBhcmFtZXRlci4KKyAgICoKKyAgICogQ2hhbmdlIGhhc2gg
ZnJhZ21lbnQgd2hlbiBjYWxsZWQgd2l0aCBwYXJhbWV0ZXIgYW5kIHJldHVybiBgJGxvY2F0aW9u
YC4KKyAgICoKKyAgICoKKyAgICogYGBganMKKyAgICogLy8gZ2l2ZW4gdXJsIGh0dHA6Ly9leGFt
cGxlLmNvbS8jL3NvbWUvcGF0aD9mb289YmFyJmJhej14b3hvI2hhc2hWYWx1ZQorICAgKiB2YXIg
aGFzaCA9ICRsb2NhdGlvbi5oYXNoKCk7CisgICAqIC8vID0+ICJoYXNoVmFsdWUiCisgICAqIGBg
YAorICAgKgorICAgKiBAcGFyYW0geyhzdHJpbmd8bnVtYmVyKT19IGhhc2ggTmV3IGhhc2ggZnJh
Z21lbnQKKyAgICogQHJldHVybiB7c3RyaW5nfSBoYXNoCisgICAqLworICBoYXNoOiBsb2NhdGlv
bkdldHRlclNldHRlcignJCRoYXNoJywgZnVuY3Rpb24oaGFzaCkgeworICAgIHJldHVybiBoYXNo
ICE9PSBudWxsID8gaGFzaC50b1N0cmluZygpIDogJyc7CisgIH0pLAorCisgIC8qKgorICAgKiBA
bmdkb2MgbWV0aG9kCisgICAqIEBuYW1lICRsb2NhdGlvbiNyZXBsYWNlCisgICAqCisgICAqIEBk
ZXNjcmlwdGlvbgorICAgKiBJZiBjYWxsZWQsIGFsbCBjaGFuZ2VzIHRvICRsb2NhdGlvbiBkdXJp
bmcgY3VycmVudCBgJGRpZ2VzdGAgd2lsbCBiZSByZXBsYWNpbmcgY3VycmVudCBoaXN0b3J5Cisg
ICAqIHJlY29yZCwgaW5zdGVhZCBvZiBhZGRpbmcgbmV3IG9uZS4KKyAgICovCisgIHJlcGxhY2U6
IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuJCRyZXBsYWNlID0gdHJ1ZTsKKyAgICByZXR1cm4gdGhp
czsKKyAgfQorfTsKKworZm9yRWFjaChbTG9jYXRpb25IYXNoYmFuZ0luSHRtbDVVcmwsIExvY2F0
aW9uSGFzaGJhbmdVcmwsIExvY2F0aW9uSHRtbDVVcmxdLCBmdW5jdGlvbihMb2NhdGlvbikgewor
ICBMb2NhdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGxvY2F0aW9uUHJvdG90eXBlKTsK
KworICAvKioKKyAgICogQG5nZG9jIG1ldGhvZAorICAgKiBAbmFtZSAkbG9jYXRpb24jc3RhdGUK
KyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIFRoaXMgbWV0aG9kIGlzIGdldHRlciAvIHNl
dHRlci4KKyAgICoKKyAgICogUmV0dXJuIHRoZSBoaXN0b3J5IHN0YXRlIG9iamVjdCB3aGVuIGNh
bGxlZCB3aXRob3V0IGFueSBwYXJhbWV0ZXIuCisgICAqCisgICAqIENoYW5nZSB0aGUgaGlzdG9y
eSBzdGF0ZSBvYmplY3Qgd2hlbiBjYWxsZWQgd2l0aCBvbmUgcGFyYW1ldGVyIGFuZCByZXR1cm4g
YCRsb2NhdGlvbmAuCisgICAqIFRoZSBzdGF0ZSBvYmplY3QgaXMgbGF0ZXIgcGFzc2VkIHRvIGBw
dXNoU3RhdGVgIG9yIGByZXBsYWNlU3RhdGVgLgorICAgKgorICAgKiBOT1RFOiBUaGlzIG1ldGhv
ZCBpcyBzdXBwb3J0ZWQgb25seSBpbiBIVE1MNSBtb2RlIGFuZCBvbmx5IGluIGJyb3dzZXJzIHN1
cHBvcnRpbmcKKyAgICogdGhlIEhUTUw1IEhpc3RvcnkgQVBJIChpLmUuIG1ldGhvZHMgYHB1c2hT
dGF0ZWAgYW5kIGByZXBsYWNlU3RhdGVgKS4gSWYgeW91IG5lZWQgdG8gc3VwcG9ydAorICAgKiBv
bGRlciBicm93c2VycyAobGlrZSBJRTkgb3IgQW5kcm9pZCA8IDQuMCksIGRvbid0IHVzZSB0aGlz
IG1ldGhvZC4KKyAgICoKKyAgICogQHBhcmFtIHtvYmplY3Q9fSBzdGF0ZSBTdGF0ZSBvYmplY3Qg
Zm9yIHB1c2hTdGF0ZSBvciByZXBsYWNlU3RhdGUKKyAgICogQHJldHVybiB7b2JqZWN0fSBzdGF0
ZQorICAgKi8KKyAgTG9jYXRpb24ucHJvdG90eXBlLnN0YXRlID0gZnVuY3Rpb24oc3RhdGUpIHsK
KyAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHsKKyAgICAgIHJldHVybiB0aGlzLiQkc3RhdGU7
CisgICAgfQorCisgICAgaWYgKExvY2F0aW9uICE9PSBMb2NhdGlvbkh0bWw1VXJsIHx8ICF0aGlz
LiQkaHRtbDUpIHsKKyAgICAgIHRocm93ICRsb2NhdGlvbk1pbkVycignbm9zdGF0ZScsICdIaXN0
b3J5IEFQSSBzdGF0ZSBzdXBwb3J0IGlzIGF2YWlsYWJsZSBvbmx5ICcgKworICAgICAgICAnaW4g
SFRNTDUgbW9kZSBhbmQgb25seSBpbiBicm93c2VycyBzdXBwb3J0aW5nIEhUTUw1IEhpc3Rvcnkg
QVBJJyk7CisgICAgfQorICAgIC8vIFRoZSB1c2VyIG1pZ2h0IG1vZGlmeSBgc3RhdGVPYmplY3Rg
IGFmdGVyIGludm9raW5nIGAkbG9jYXRpb24uc3RhdGUoc3RhdGVPYmplY3QpYAorICAgIC8vIGJ1
dCB3ZSdyZSBjaGFuZ2luZyB0aGUgJCRzdGF0ZSByZWZlcmVuY2UgdG8gJGJyb3dzZXIuc3RhdGUo
KSBkdXJpbmcgdGhlICRkaWdlc3QKKyAgICAvLyBzbyB0aGUgbW9kaWZpY2F0aW9uIHdpbmRvdyBp
cyBuYXJyb3cuCisgICAgdGhpcy4kJHN0YXRlID0gaXNVbmRlZmluZWQoc3RhdGUpID8gbnVsbCA6
IHN0YXRlOworCisgICAgcmV0dXJuIHRoaXM7CisgIH07Cit9KTsKKworCitmdW5jdGlvbiBsb2Nh
dGlvbkdldHRlcihwcm9wZXJ0eSkgeworICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJu
IHRoaXNbcHJvcGVydHldOworICB9OworfQorCisKK2Z1bmN0aW9uIGxvY2F0aW9uR2V0dGVyU2V0
dGVyKHByb3BlcnR5LCBwcmVwcm9jZXNzKSB7CisgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkgewor
ICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpIHsKKyAgICAgIHJldHVybiB0aGlzW3Byb3BlcnR5
XTsKKyAgICB9CisKKyAgICB0aGlzW3Byb3BlcnR5XSA9IHByZXByb2Nlc3ModmFsdWUpOworICAg
IHRoaXMuJCRjb21wb3NlKCk7CisKKyAgICByZXR1cm4gdGhpczsKKyAgfTsKK30KKworCisvKioK
KyAqIEBuZ2RvYyBzZXJ2aWNlCisgKiBAbmFtZSAkbG9jYXRpb24KKyAqCisgKiBAcmVxdWlyZXMg
JHJvb3RFbGVtZW50CisgKgorICogQGRlc2NyaXB0aW9uCisgKiBUaGUgJGxvY2F0aW9uIHNlcnZp
Y2UgcGFyc2VzIHRoZSBVUkwgaW4gdGhlIGJyb3dzZXIgYWRkcmVzcyBiYXIgKGJhc2VkIG9uIHRo
ZQorICogW3dpbmRvdy5sb2NhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4v
d2luZG93LmxvY2F0aW9uKSkgYW5kIG1ha2VzIHRoZSBVUkwKKyAqIGF2YWlsYWJsZSB0byB5b3Vy
IGFwcGxpY2F0aW9uLiBDaGFuZ2VzIHRvIHRoZSBVUkwgaW4gdGhlIGFkZHJlc3MgYmFyIGFyZSBy
ZWZsZWN0ZWQgaW50bworICogJGxvY2F0aW9uIHNlcnZpY2UgYW5kIGNoYW5nZXMgdG8gJGxvY2F0
aW9uIGFyZSByZWZsZWN0ZWQgaW50byB0aGUgYnJvd3NlciBhZGRyZXNzIGJhci4KKyAqCisgKiAq
KlRoZSAkbG9jYXRpb24gc2VydmljZToqKgorICoKKyAqIC0gRXhwb3NlcyB0aGUgY3VycmVudCBV
UkwgaW4gdGhlIGJyb3dzZXIgYWRkcmVzcyBiYXIsIHNvIHlvdSBjYW4KKyAqICAgLSBXYXRjaCBh
bmQgb2JzZXJ2ZSB0aGUgVVJMLgorICogICAtIENoYW5nZSB0aGUgVVJMLgorICogLSBTeW5jaHJv
bml6ZXMgdGhlIFVSTCB3aXRoIHRoZSBicm93c2VyIHdoZW4gdGhlIHVzZXIKKyAqICAgLSBDaGFu
Z2VzIHRoZSBhZGRyZXNzIGJhci4KKyAqICAgLSBDbGlja3MgdGhlIGJhY2sgb3IgZm9yd2FyZCBi
dXR0b24gKG9yIGNsaWNrcyBhIEhpc3RvcnkgbGluaykuCisgKiAgIC0gQ2xpY2tzIG9uIGEgbGlu
ay4KKyAqIC0gUmVwcmVzZW50cyB0aGUgVVJMIG9iamVjdCBhcyBhIHNldCBvZiBtZXRob2RzIChw
cm90b2NvbCwgaG9zdCwgcG9ydCwgcGF0aCwgc2VhcmNoLCBoYXNoKS4KKyAqCisgKiBGb3IgbW9y
ZSBpbmZvcm1hdGlvbiBzZWUge0BsaW5rIGd1aWRlLyRsb2NhdGlvbiBEZXZlbG9wZXIgR3VpZGU6
IFVzaW5nICRsb2NhdGlvbn0KKyAqLworCisvKioKKyAqIEBuZ2RvYyBwcm92aWRlcgorICogQG5h
bWUgJGxvY2F0aW9uUHJvdmlkZXIKKyAqIEBkZXNjcmlwdGlvbgorICogVXNlIHRoZSBgJGxvY2F0
aW9uUHJvdmlkZXJgIHRvIGNvbmZpZ3VyZSBob3cgdGhlIGFwcGxpY2F0aW9uIGRlZXAgbGlua2lu
ZyBwYXRocyBhcmUgc3RvcmVkLgorICovCitmdW5jdGlvbiAkTG9jYXRpb25Qcm92aWRlcigpIHsK
KyAgdmFyIGhhc2hQcmVmaXggPSAnJywKKyAgICAgIGh0bWw1TW9kZSA9IHsKKyAgICAgICAgZW5h
YmxlZDogZmFsc2UsCisgICAgICAgIHJlcXVpcmVCYXNlOiB0cnVlLAorICAgICAgICByZXdyaXRl
TGlua3M6IHRydWUKKyAgICAgIH07CisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICog
QG5hbWUgJGxvY2F0aW9uUHJvdmlkZXIjaGFzaFByZWZpeAorICAgKiBAZGVzY3JpcHRpb24KKyAg
ICogQHBhcmFtIHtzdHJpbmc9fSBwcmVmaXggUHJlZml4IGZvciBoYXNoIHBhcnQgKGNvbnRhaW5p
bmcgcGF0aCBhbmQgc2VhcmNoKQorICAgKiBAcmV0dXJucyB7Kn0gY3VycmVudCB2YWx1ZSBpZiB1
c2VkIGFzIGdldHRlciBvciBpdHNlbGYgKGNoYWluaW5nKSBpZiB1c2VkIGFzIHNldHRlcgorICAg
Ki8KKyAgdGhpcy5oYXNoUHJlZml4ID0gZnVuY3Rpb24ocHJlZml4KSB7CisgICAgaWYgKGlzRGVm
aW5lZChwcmVmaXgpKSB7CisgICAgICBoYXNoUHJlZml4ID0gcHJlZml4OworICAgICAgcmV0dXJu
IHRoaXM7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBoYXNoUHJlZml4OworICAgIH0KKyAg
fTsKKworICAvKioKKyAgICogQG5nZG9jIG1ldGhvZAorICAgKiBAbmFtZSAkbG9jYXRpb25Qcm92
aWRlciNodG1sNU1vZGUKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIEBwYXJhbSB7KGJvb2xlYW58
T2JqZWN0KT19IG1vZGUgSWYgYm9vbGVhbiwgc2V0cyBgaHRtbDVNb2RlLmVuYWJsZWRgIHRvIHZh
bHVlLgorICAgKiAgIElmIG9iamVjdCwgc2V0cyBgZW5hYmxlZGAsIGByZXF1aXJlQmFzZWAgYW5k
IGByZXdyaXRlTGlua3NgIHRvIHJlc3BlY3RpdmUgdmFsdWVzLiBTdXBwb3J0ZWQKKyAgICogICBw
cm9wZXJ0aWVzOgorICAgKiAgIC0gKiplbmFibGVkKiog4oCTIGB7Ym9vbGVhbn1gIOKAkyAoZGVm
YXVsdDogZmFsc2UpIElmIHRydWUsIHdpbGwgcmVseSBvbiBgaGlzdG9yeS5wdXNoU3RhdGVgIHRv
CisgICAqICAgICBjaGFuZ2UgdXJscyB3aGVyZSBzdXBwb3J0ZWQuIFdpbGwgZmFsbCBiYWNrIHRv
IGhhc2gtcHJlZml4ZWQgcGF0aHMgaW4gYnJvd3NlcnMgdGhhdCBkbyBub3QKKyAgICogICAgIHN1
cHBvcnQgYHB1c2hTdGF0ZWAuCisgICAqICAgLSAqKnJlcXVpcmVCYXNlKiogLSBge2Jvb2xlYW59
YCAtIChkZWZhdWx0OiBgdHJ1ZWApIFdoZW4gaHRtbDVNb2RlIGlzIGVuYWJsZWQsIHNwZWNpZmll
cworICAgKiAgICAgd2hldGhlciBvciBub3QgYSA8YmFzZT4gdGFnIGlzIHJlcXVpcmVkIHRvIGJl
IHByZXNlbnQuIElmIGBlbmFibGVkYCBhbmQgYHJlcXVpcmVCYXNlYCBhcmUKKyAgICogICAgIHRy
dWUsIGFuZCBhIGJhc2UgdGFnIGlzIG5vdCBwcmVzZW50LCBhbiBlcnJvciB3aWxsIGJlIHRocm93
biB3aGVuIGAkbG9jYXRpb25gIGlzIGluamVjdGVkLgorICAgKiAgICAgU2VlIHRoZSB7QGxpbmsg
Z3VpZGUvJGxvY2F0aW9uICRsb2NhdGlvbiBndWlkZSBmb3IgbW9yZSBpbmZvcm1hdGlvbn0KKyAg
ICogICAtICoqcmV3cml0ZUxpbmtzKiogLSBge2Jvb2xlYW59YCAtIChkZWZhdWx0OiBgdHJ1ZWAp
IFdoZW4gaHRtbDVNb2RlIGlzIGVuYWJsZWQsCisgICAqICAgICBlbmFibGVzL2Rpc2FibGVzIHVy
bCByZXdyaXRpbmcgZm9yIHJlbGF0aXZlIGxpbmtzLgorICAgKgorICAgKiBAcmV0dXJucyB7T2Jq
ZWN0fSBodG1sNU1vZGUgb2JqZWN0IGlmIHVzZWQgYXMgZ2V0dGVyIG9yIGl0c2VsZiAoY2hhaW5p
bmcpIGlmIHVzZWQgYXMgc2V0dGVyCisgICAqLworICB0aGlzLmh0bWw1TW9kZSA9IGZ1bmN0aW9u
KG1vZGUpIHsKKyAgICBpZiAoaXNCb29sZWFuKG1vZGUpKSB7CisgICAgICBodG1sNU1vZGUuZW5h
YmxlZCA9IG1vZGU7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9IGVsc2UgaWYgKGlzT2JqZWN0
KG1vZGUpKSB7CisKKyAgICAgIGlmIChpc0Jvb2xlYW4obW9kZS5lbmFibGVkKSkgeworICAgICAg
ICBodG1sNU1vZGUuZW5hYmxlZCA9IG1vZGUuZW5hYmxlZDsKKyAgICAgIH0KKworICAgICAgaWYg
KGlzQm9vbGVhbihtb2RlLnJlcXVpcmVCYXNlKSkgeworICAgICAgICBodG1sNU1vZGUucmVxdWly
ZUJhc2UgPSBtb2RlLnJlcXVpcmVCYXNlOworICAgICAgfQorCisgICAgICBpZiAoaXNCb29sZWFu
KG1vZGUucmV3cml0ZUxpbmtzKSkgeworICAgICAgICBodG1sNU1vZGUucmV3cml0ZUxpbmtzID0g
bW9kZS5yZXdyaXRlTGlua3M7CisgICAgICB9CisKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0g
ZWxzZSB7CisgICAgICByZXR1cm4gaHRtbDVNb2RlOworICAgIH0KKyAgfTsKKworICAvKioKKyAg
ICogQG5nZG9jIGV2ZW50CisgICAqIEBuYW1lICRsb2NhdGlvbiMkbG9jYXRpb25DaGFuZ2VTdGFy
dAorICAgKiBAZXZlbnRUeXBlIGJyb2FkY2FzdCBvbiByb290IHNjb3BlCisgICAqIEBkZXNjcmlw
dGlvbgorICAgKiBCcm9hZGNhc3RlZCBiZWZvcmUgYSBVUkwgd2lsbCBjaGFuZ2UuCisgICAqCisg
ICAqIFRoaXMgY2hhbmdlIGNhbiBiZSBwcmV2ZW50ZWQgYnkgY2FsbGluZworICAgKiBgcHJldmVu
dERlZmF1bHRgIG1ldGhvZCBvZiB0aGUgZXZlbnQuIFNlZSB7QGxpbmsgbmcuJHJvb3RTY29wZS5T
Y29wZSMkb259IGZvciBtb3JlCisgICAqIGRldGFpbHMgYWJvdXQgZXZlbnQgb2JqZWN0LiBVcG9u
IHN1Y2Nlc3NmdWwgY2hhbmdlCisgICAqIHtAbGluayBuZy4kbG9jYXRpb24jJGxvY2F0aW9uQ2hh
bmdlU3VjY2VzcyAkbG9jYXRpb25DaGFuZ2VTdWNjZXNzfSBpcyBmaXJlZC4KKyAgICoKKyAgICog
VGhlIGBuZXdTdGF0ZWAgYW5kIGBvbGRTdGF0ZWAgcGFyYW1ldGVycyBtYXkgYmUgZGVmaW5lZCBv
bmx5IGluIEhUTUw1IG1vZGUgYW5kIHdoZW4KKyAgICogdGhlIGJyb3dzZXIgc3VwcG9ydHMgdGhl
IEhUTUw1IEhpc3RvcnkgQVBJLgorICAgKgorICAgKiBAcGFyYW0ge09iamVjdH0gYW5ndWxhckV2
ZW50IFN5bnRoZXRpYyBldmVudCBvYmplY3QuCisgICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdVcmwg
TmV3IFVSTAorICAgKiBAcGFyYW0ge3N0cmluZz19IG9sZFVybCBVUkwgdGhhdCB3YXMgYmVmb3Jl
IGl0IHdhcyBjaGFuZ2VkLgorICAgKiBAcGFyYW0ge3N0cmluZz19IG5ld1N0YXRlIE5ldyBoaXN0
b3J5IHN0YXRlIG9iamVjdAorICAgKiBAcGFyYW0ge3N0cmluZz19IG9sZFN0YXRlIEhpc3Rvcnkg
c3RhdGUgb2JqZWN0IHRoYXQgd2FzIGJlZm9yZSBpdCB3YXMgY2hhbmdlZC4KKyAgICovCisKKyAg
LyoqCisgICAqIEBuZ2RvYyBldmVudAorICAgKiBAbmFtZSAkbG9jYXRpb24jJGxvY2F0aW9uQ2hh
bmdlU3VjY2VzcworICAgKiBAZXZlbnRUeXBlIGJyb2FkY2FzdCBvbiByb290IHNjb3BlCisgICAq
IEBkZXNjcmlwdGlvbgorICAgKiBCcm9hZGNhc3RlZCBhZnRlciBhIFVSTCB3YXMgY2hhbmdlZC4K
KyAgICoKKyAgICogVGhlIGBuZXdTdGF0ZWAgYW5kIGBvbGRTdGF0ZWAgcGFyYW1ldGVycyBtYXkg
YmUgZGVmaW5lZCBvbmx5IGluIEhUTUw1IG1vZGUgYW5kIHdoZW4KKyAgICogdGhlIGJyb3dzZXIg
c3VwcG9ydHMgdGhlIEhUTUw1IEhpc3RvcnkgQVBJLgorICAgKgorICAgKiBAcGFyYW0ge09iamVj
dH0gYW5ndWxhckV2ZW50IFN5bnRoZXRpYyBldmVudCBvYmplY3QuCisgICAqIEBwYXJhbSB7c3Ry
aW5nfSBuZXdVcmwgTmV3IFVSTAorICAgKiBAcGFyYW0ge3N0cmluZz19IG9sZFVybCBVUkwgdGhh
dCB3YXMgYmVmb3JlIGl0IHdhcyBjaGFuZ2VkLgorICAgKiBAcGFyYW0ge3N0cmluZz19IG5ld1N0
YXRlIE5ldyBoaXN0b3J5IHN0YXRlIG9iamVjdAorICAgKiBAcGFyYW0ge3N0cmluZz19IG9sZFN0
YXRlIEhpc3Rvcnkgc3RhdGUgb2JqZWN0IHRoYXQgd2FzIGJlZm9yZSBpdCB3YXMgY2hhbmdlZC4K
KyAgICovCisKKyAgdGhpcy4kZ2V0ID0gWyckcm9vdFNjb3BlJywgJyRicm93c2VyJywgJyRzbmlm
ZmVyJywgJyRyb290RWxlbWVudCcsICckd2luZG93JywKKyAgICAgIGZ1bmN0aW9uKCRyb290U2Nv
cGUsICRicm93c2VyLCAkc25pZmZlciwgJHJvb3RFbGVtZW50LCAkd2luZG93KSB7CisgICAgdmFy
ICRsb2NhdGlvbiwKKyAgICAgICAgTG9jYXRpb25Nb2RlLAorICAgICAgICBiYXNlSHJlZiA9ICRi
cm93c2VyLmJhc2VIcmVmKCksIC8vIGlmIGJhc2VbaHJlZl0gaXMgdW5kZWZpbmVkLCBpdCBkZWZh
dWx0cyB0byAnJworICAgICAgICBpbml0aWFsVXJsID0gJGJyb3dzZXIudXJsKCksCisgICAgICAg
IGFwcEJhc2U7CisKKyAgICBpZiAoaHRtbDVNb2RlLmVuYWJsZWQpIHsKKyAgICAgIGlmICghYmFz
ZUhyZWYgJiYgaHRtbDVNb2RlLnJlcXVpcmVCYXNlKSB7CisgICAgICAgIHRocm93ICRsb2NhdGlv
bk1pbkVycignbm9iYXNlJywKKyAgICAgICAgICAiJGxvY2F0aW9uIGluIEhUTUw1IG1vZGUgcmVx
dWlyZXMgYSA8YmFzZT4gdGFnIHRvIGJlIHByZXNlbnQhIik7CisgICAgICB9CisgICAgICBhcHBC
YXNlID0gc2VydmVyQmFzZShpbml0aWFsVXJsKSArIChiYXNlSHJlZiB8fCAnLycpOworICAgICAg
TG9jYXRpb25Nb2RlID0gJHNuaWZmZXIuaGlzdG9yeSA/IExvY2F0aW9uSHRtbDVVcmwgOiBMb2Nh
dGlvbkhhc2hiYW5nSW5IdG1sNVVybDsKKyAgICB9IGVsc2UgeworICAgICAgYXBwQmFzZSA9IHN0
cmlwSGFzaChpbml0aWFsVXJsKTsKKyAgICAgIExvY2F0aW9uTW9kZSA9IExvY2F0aW9uSGFzaGJh
bmdVcmw7CisgICAgfQorICAgICRsb2NhdGlvbiA9IG5ldyBMb2NhdGlvbk1vZGUoYXBwQmFzZSwg
JyMnICsgaGFzaFByZWZpeCk7CisgICAgJGxvY2F0aW9uLiQkcGFyc2VMaW5rVXJsKGluaXRpYWxV
cmwsIGluaXRpYWxVcmwpOworCisgICAgJGxvY2F0aW9uLiQkc3RhdGUgPSAkYnJvd3Nlci5zdGF0
ZSgpOworCisgICAgdmFyIElHTk9SRV9VUklfUkVHRVhQID0gL15ccyooamF2YXNjcmlwdHxtYWls
dG8pOi9pOworCisgICAgZnVuY3Rpb24gc2V0QnJvd3NlclVybFdpdGhGYWxsYmFjayh1cmwsIHJl
cGxhY2UsIHN0YXRlKSB7CisgICAgICB2YXIgb2xkVXJsID0gJGxvY2F0aW9uLnVybCgpOworICAg
ICAgdmFyIG9sZFN0YXRlID0gJGxvY2F0aW9uLiQkc3RhdGU7CisgICAgICB0cnkgeworICAgICAg
ICAkYnJvd3Nlci51cmwodXJsLCByZXBsYWNlLCBzdGF0ZSk7CisKKyAgICAgICAgLy8gTWFrZSBz
dXJlICRsb2NhdGlvbi5zdGF0ZSgpIHJldHVybnMgcmVmZXJlbnRpYWxseSBpZGVudGljYWwgKG5v
dCBqdXN0IGRlZXBseSBlcXVhbCkKKyAgICAgICAgLy8gc3RhdGUgb2JqZWN0OyB0aGlzIG1ha2Vz
IHBvc3NpYmxlIHF1aWNrIGNoZWNraW5nIGlmIHRoZSBzdGF0ZSBjaGFuZ2VkIGluIHRoZSBkaWdl
c3QKKyAgICAgICAgLy8gbG9vcC4gQ2hlY2tpbmcgZGVlcCBlcXVhbGl0eSB3b3VsZCBiZSB0b28g
ZXhwZW5zaXZlLgorICAgICAgICAkbG9jYXRpb24uJCRzdGF0ZSA9ICRicm93c2VyLnN0YXRlKCk7
CisgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIC8vIFJlc3RvcmUgb2xkIHZhbHVlcyBpZiBw
dXNoU3RhdGUgZmFpbHMKKyAgICAgICAgJGxvY2F0aW9uLnVybChvbGRVcmwpOworICAgICAgICAk
bG9jYXRpb24uJCRzdGF0ZSA9IG9sZFN0YXRlOworCisgICAgICAgIHRocm93IGU7CisgICAgICB9
CisgICAgfQorCisgICAgJHJvb3RFbGVtZW50Lm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7
CisgICAgICAvLyBUT0RPKHZvanRhKTogcmV3cml0ZSBsaW5rIHdoZW4gb3BlbmluZyBpbiBuZXcg
dGFiL3dpbmRvdyAoaW4gbGVnYWN5IGJyb3dzZXIpCisgICAgICAvLyBjdXJyZW50bHkgd2Ugb3Bl
biBuaWNlIHVybCBsaW5rIGFuZCByZWRpcmVjdCB0aGVuCisKKyAgICAgIGlmICghaHRtbDVNb2Rl
LnJld3JpdGVMaW5rcyB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQu
c2hpZnRLZXkgfHwgZXZlbnQud2hpY2ggPT0gMiB8fCBldmVudC5idXR0b24gPT0gMikgcmV0dXJu
OworCisgICAgICB2YXIgZWxtID0ganFMaXRlKGV2ZW50LnRhcmdldCk7CisKKyAgICAgIC8vIHRy
YXZlcnNlIHRoZSBET00gdXAgdG8gZmluZCBmaXJzdCBBIHRhZworICAgICAgd2hpbGUgKG5vZGVO
YW1lXyhlbG1bMF0pICE9PSAnYScpIHsKKyAgICAgICAgLy8gaWdub3JlIHJld3JpdGluZyBpZiBu
byBBIHRhZyAocmVhY2hlZCByb290IGVsZW1lbnQsIG9yIG5vIHBhcmVudCAtIHJlbW92ZWQgZnJv
bSBkb2N1bWVudCkKKyAgICAgICAgaWYgKGVsbVswXSA9PT0gJHJvb3RFbGVtZW50WzBdIHx8ICEo
ZWxtID0gZWxtLnBhcmVudCgpKVswXSkgcmV0dXJuOworICAgICAgfQorCisgICAgICB2YXIgYWJz
SHJlZiA9IGVsbS5wcm9wKCdocmVmJyk7CisgICAgICAvLyBnZXQgdGhlIGFjdHVhbCBocmVmIGF0
dHJpYnV0ZSAtIHNlZQorICAgICAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9s
aWJyYXJ5L2llL2RkMzQ3MTQ4KHY9dnMuODUpLmFzcHgKKyAgICAgIHZhciByZWxIcmVmID0gZWxt
LmF0dHIoJ2hyZWYnKSB8fCBlbG0uYXR0cigneGxpbms6aHJlZicpOworCisgICAgICBpZiAoaXNP
YmplY3QoYWJzSHJlZikgJiYgYWJzSHJlZi50b1N0cmluZygpID09PSAnW29iamVjdCBTVkdBbmlt
YXRlZFN0cmluZ10nKSB7CisgICAgICAgIC8vIFNWR0FuaW1hdGVkU3RyaW5nLmFuaW1WYWwgc2hv
dWxkIGJlIGlkZW50aWNhbCB0byBTVkdBbmltYXRlZFN0cmluZy5iYXNlVmFsLCB1bmxlc3MgZHVy
aW5nCisgICAgICAgIC8vIGFuIGFuaW1hdGlvbi4KKyAgICAgICAgYWJzSHJlZiA9IHVybFJlc29s
dmUoYWJzSHJlZi5hbmltVmFsKS5ocmVmOworICAgICAgfQorCisgICAgICAvLyBJZ25vcmUgd2hl
biB1cmwgaXMgc3RhcnRlZCB3aXRoIGphdmFzY3JpcHQ6IG9yIG1haWx0bzoKKyAgICAgIGlmIChJ
R05PUkVfVVJJX1JFR0VYUC50ZXN0KGFic0hyZWYpKSByZXR1cm47CisKKyAgICAgIGlmIChhYnNI
cmVmICYmICFlbG0uYXR0cigndGFyZ2V0JykgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgp
KSB7CisgICAgICAgIGlmICgkbG9jYXRpb24uJCRwYXJzZUxpbmtVcmwoYWJzSHJlZiwgcmVsSHJl
ZikpIHsKKyAgICAgICAgICAvLyBXZSBkbyBhIHByZXZlbnREZWZhdWx0IGZvciBhbGwgdXJscyB0
aGF0IGFyZSBwYXJ0IG9mIHRoZSBhbmd1bGFyIGFwcGxpY2F0aW9uLAorICAgICAgICAgIC8vIGlu
IGh0bWw1bW9kZSBhbmQgYWxzbyB3aXRob3V0LCBzbyB0aGF0IHdlIGFyZSBhYmxlIHRvIGFib3J0
IG5hdmlnYXRpb24gd2l0aG91dAorICAgICAgICAgIC8vIGdldHRpbmcgZG91YmxlIGVudHJpZXMg
aW4gdGhlIGxvY2F0aW9uIGhpc3RvcnkuCisgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQo
KTsKKyAgICAgICAgICAvLyB1cGRhdGUgbG9jYXRpb24gbWFudWFsbHkKKyAgICAgICAgICBpZiAo
JGxvY2F0aW9uLmFic1VybCgpICE9ICRicm93c2VyLnVybCgpKSB7CisgICAgICAgICAgICAkcm9v
dFNjb3BlLiRhcHBseSgpOworICAgICAgICAgICAgLy8gaGFjayB0byB3b3JrIGFyb3VuZCBGRjYg
YnVnIDY4NDIwOCB3aGVuIHNjZW5hcmlvIHJ1bm5lciBjbGlja3Mgb24gbGlua3MKKyAgICAgICAg
ICAgICR3aW5kb3cuYW5ndWxhclsnZmYtNjg0MjA4LXByZXZlbnREZWZhdWx0J10gPSB0cnVlOwor
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0pOworCisKKyAgICAvLyByZXdy
aXRlIGhhc2hiYW5nIHVybCA8PiBodG1sNSB1cmwKKyAgICBpZiAodHJpbUVtcHR5SGFzaCgkbG9j
YXRpb24uYWJzVXJsKCkpICE9IHRyaW1FbXB0eUhhc2goaW5pdGlhbFVybCkpIHsKKyAgICAgICRi
cm93c2VyLnVybCgkbG9jYXRpb24uYWJzVXJsKCksIHRydWUpOworICAgIH0KKworICAgIHZhciBp
bml0aWFsaXppbmcgPSB0cnVlOworCisgICAgLy8gdXBkYXRlICRsb2NhdGlvbiB3aGVuICRicm93
c2VyIHVybCBjaGFuZ2VzCisgICAgJGJyb3dzZXIub25VcmxDaGFuZ2UoZnVuY3Rpb24obmV3VXJs
LCBuZXdTdGF0ZSkgeworICAgICAgJHJvb3RTY29wZS4kZXZhbEFzeW5jKGZ1bmN0aW9uKCkgewor
ICAgICAgICB2YXIgb2xkVXJsID0gJGxvY2F0aW9uLmFic1VybCgpOworICAgICAgICB2YXIgb2xk
U3RhdGUgPSAkbG9jYXRpb24uJCRzdGF0ZTsKKyAgICAgICAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQ7
CisKKyAgICAgICAgJGxvY2F0aW9uLiQkcGFyc2UobmV3VXJsKTsKKyAgICAgICAgJGxvY2F0aW9u
LiQkc3RhdGUgPSBuZXdTdGF0ZTsKKworICAgICAgICBkZWZhdWx0UHJldmVudGVkID0gJHJvb3RT
Y29wZS4kYnJvYWRjYXN0KCckbG9jYXRpb25DaGFuZ2VTdGFydCcsIG5ld1VybCwgb2xkVXJsLAor
ICAgICAgICAgICAgbmV3U3RhdGUsIG9sZFN0YXRlKS5kZWZhdWx0UHJldmVudGVkOworCisgICAg
ICAgIC8vIGlmIHRoZSBsb2NhdGlvbiB3YXMgY2hhbmdlZCBieSBhIGAkbG9jYXRpb25DaGFuZ2VT
dGFydGAgaGFuZGxlciB0aGVuIHN0b3AKKyAgICAgICAgLy8gcHJvY2Vzc2luZyB0aGlzIGxvY2F0
aW9uIGNoYW5nZQorICAgICAgICBpZiAoJGxvY2F0aW9uLmFic1VybCgpICE9PSBuZXdVcmwpIHJl
dHVybjsKKworICAgICAgICBpZiAoZGVmYXVsdFByZXZlbnRlZCkgeworICAgICAgICAgICRsb2Nh
dGlvbi4kJHBhcnNlKG9sZFVybCk7CisgICAgICAgICAgJGxvY2F0aW9uLiQkc3RhdGUgPSBvbGRT
dGF0ZTsKKyAgICAgICAgICBzZXRCcm93c2VyVXJsV2l0aEZhbGxiYWNrKG9sZFVybCwgZmFsc2Us
IG9sZFN0YXRlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpbml0aWFsaXppbmcgPSBm
YWxzZTsKKyAgICAgICAgICBhZnRlckxvY2F0aW9uQ2hhbmdlKG9sZFVybCwgb2xkU3RhdGUpOwor
ICAgICAgICB9CisgICAgICB9KTsKKyAgICAgIGlmICghJHJvb3RTY29wZS4kJHBoYXNlKSAkcm9v
dFNjb3BlLiRkaWdlc3QoKTsKKyAgICB9KTsKKworICAgIC8vIHVwZGF0ZSBicm93c2VyCisgICAg
JHJvb3RTY29wZS4kd2F0Y2goZnVuY3Rpb24gJGxvY2F0aW9uV2F0Y2goKSB7CisgICAgICB2YXIg
b2xkVXJsID0gdHJpbUVtcHR5SGFzaCgkYnJvd3Nlci51cmwoKSk7CisgICAgICB2YXIgbmV3VXJs
ID0gdHJpbUVtcHR5SGFzaCgkbG9jYXRpb24uYWJzVXJsKCkpOworICAgICAgdmFyIG9sZFN0YXRl
ID0gJGJyb3dzZXIuc3RhdGUoKTsKKyAgICAgIHZhciBjdXJyZW50UmVwbGFjZSA9ICRsb2NhdGlv
bi4kJHJlcGxhY2U7CisgICAgICB2YXIgdXJsT3JTdGF0ZUNoYW5nZWQgPSBvbGRVcmwgIT09IG5l
d1VybCB8fAorICAgICAgICAoJGxvY2F0aW9uLiQkaHRtbDUgJiYgJHNuaWZmZXIuaGlzdG9yeSAm
JiBvbGRTdGF0ZSAhPT0gJGxvY2F0aW9uLiQkc3RhdGUpOworCisgICAgICBpZiAoaW5pdGlhbGl6
aW5nIHx8IHVybE9yU3RhdGVDaGFuZ2VkKSB7CisgICAgICAgIGluaXRpYWxpemluZyA9IGZhbHNl
OworCisgICAgICAgICRyb290U2NvcGUuJGV2YWxBc3luYyhmdW5jdGlvbigpIHsKKyAgICAgICAg
ICB2YXIgbmV3VXJsID0gJGxvY2F0aW9uLmFic1VybCgpOworICAgICAgICAgIHZhciBkZWZhdWx0
UHJldmVudGVkID0gJHJvb3RTY29wZS4kYnJvYWRjYXN0KCckbG9jYXRpb25DaGFuZ2VTdGFydCcs
IG5ld1VybCwgb2xkVXJsLAorICAgICAgICAgICAgICAkbG9jYXRpb24uJCRzdGF0ZSwgb2xkU3Rh
dGUpLmRlZmF1bHRQcmV2ZW50ZWQ7CisKKyAgICAgICAgICAvLyBpZiB0aGUgbG9jYXRpb24gd2Fz
IGNoYW5nZWQgYnkgYSBgJGxvY2F0aW9uQ2hhbmdlU3RhcnRgIGhhbmRsZXIgdGhlbiBzdG9wCisg
ICAgICAgICAgLy8gcHJvY2Vzc2luZyB0aGlzIGxvY2F0aW9uIGNoYW5nZQorICAgICAgICAgIGlm
ICgkbG9jYXRpb24uYWJzVXJsKCkgIT09IG5ld1VybCkgcmV0dXJuOworCisgICAgICAgICAgaWYg
KGRlZmF1bHRQcmV2ZW50ZWQpIHsKKyAgICAgICAgICAgICRsb2NhdGlvbi4kJHBhcnNlKG9sZFVy
bCk7CisgICAgICAgICAgICAkbG9jYXRpb24uJCRzdGF0ZSA9IG9sZFN0YXRlOworICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBpZiAodXJsT3JTdGF0ZUNoYW5nZWQpIHsKKyAgICAgICAg
ICAgICAgc2V0QnJvd3NlclVybFdpdGhGYWxsYmFjayhuZXdVcmwsIGN1cnJlbnRSZXBsYWNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZFN0YXRlID09PSAkbG9j
YXRpb24uJCRzdGF0ZSA/IG51bGwgOiAkbG9jYXRpb24uJCRzdGF0ZSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBhZnRlckxvY2F0aW9uQ2hhbmdlKG9sZFVybCwgb2xkU3RhdGUpOworICAg
ICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICB9CisKKyAgICAgICRsb2NhdGlvbi4kJHJlcGxh
Y2UgPSBmYWxzZTsKKworICAgICAgLy8gd2UgZG9uJ3QgbmVlZCB0byByZXR1cm4gYW55dGhpbmcg
YmVjYXVzZSAkZXZhbEFzeW5jIHdpbGwgbWFrZSB0aGUgZGlnZXN0IGxvb3AgZGlydHkgd2hlbgor
ICAgICAgLy8gdGhlcmUgaXMgYSBjaGFuZ2UKKyAgICB9KTsKKworICAgIHJldHVybiAkbG9jYXRp
b247CisKKyAgICBmdW5jdGlvbiBhZnRlckxvY2F0aW9uQ2hhbmdlKG9sZFVybCwgb2xkU3RhdGUp
IHsKKyAgICAgICRyb290U2NvcGUuJGJyb2FkY2FzdCgnJGxvY2F0aW9uQ2hhbmdlU3VjY2Vzcycs
ICRsb2NhdGlvbi5hYnNVcmwoKSwgb2xkVXJsLAorICAgICAgICAkbG9jYXRpb24uJCRzdGF0ZSwg
b2xkU3RhdGUpOworICAgIH0KK31dOworfQorCisvKioKKyAqIEBuZ2RvYyBzZXJ2aWNlCisgKiBA
bmFtZSAkbG9nCisgKiBAcmVxdWlyZXMgJHdpbmRvdworICoKKyAqIEBkZXNjcmlwdGlvbgorICog
U2ltcGxlIHNlcnZpY2UgZm9yIGxvZ2dpbmcuIERlZmF1bHQgaW1wbGVtZW50YXRpb24gc2FmZWx5
IHdyaXRlcyB0aGUgbWVzc2FnZQorICogaW50byB0aGUgYnJvd3NlcidzIGNvbnNvbGUgKGlmIHBy
ZXNlbnQpLgorICoKKyAqIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyBzZXJ2aWNlIGlzIHRvIHNp
bXBsaWZ5IGRlYnVnZ2luZyBhbmQgdHJvdWJsZXNob290aW5nLgorICoKKyAqIFRoZSBkZWZhdWx0
IGlzIHRvIGxvZyBgZGVidWdgIG1lc3NhZ2VzLiBZb3UgY2FuIHVzZQorICoge0BsaW5rIG5nLiRs
b2dQcm92aWRlciBuZy4kbG9nUHJvdmlkZXIjZGVidWdFbmFibGVkfSB0byBjaGFuZ2UgdGhpcy4K
KyAqCisgKiBAZXhhbXBsZQorICAgPGV4YW1wbGUgbW9kdWxlPSJsb2dFeGFtcGxlIj4KKyAgICAg
PGZpbGUgbmFtZT0ic2NyaXB0LmpzIj4KKyAgICAgICBhbmd1bGFyLm1vZHVsZSgnbG9nRXhhbXBs
ZScsIFtdKQorICAgICAgICAgLmNvbnRyb2xsZXIoJ0xvZ0NvbnRyb2xsZXInLCBbJyRzY29wZScs
ICckbG9nJywgZnVuY3Rpb24oJHNjb3BlLCAkbG9nKSB7CisgICAgICAgICAgICRzY29wZS4kbG9n
ID0gJGxvZzsKKyAgICAgICAgICAgJHNjb3BlLm1lc3NhZ2UgPSAnSGVsbG8gV29ybGQhJzsKKyAg
ICAgICAgIH1dKTsKKyAgICAgPC9maWxlPgorICAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4K
KyAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9IkxvZ0NvbnRyb2xsZXIiPgorICAgICAgICAgPHA+
UmVsb2FkIHRoaXMgcGFnZSB3aXRoIG9wZW4gY29uc29sZSwgZW50ZXIgdGV4dCBhbmQgaGl0IHRo
ZSBsb2cgYnV0dG9uLi4uPC9wPgorICAgICAgICAgPGxhYmVsPk1lc3NhZ2U6CisgICAgICAgICA8
aW5wdXQgdHlwZT0idGV4dCIgbmctbW9kZWw9Im1lc3NhZ2UiIC8+PC9sYWJlbD4KKyAgICAgICAg
IDxidXR0b24gbmctY2xpY2s9IiRsb2cubG9nKG1lc3NhZ2UpIj5sb2c8L2J1dHRvbj4KKyAgICAg
ICAgIDxidXR0b24gbmctY2xpY2s9IiRsb2cud2FybihtZXNzYWdlKSI+d2FybjwvYnV0dG9uPgor
ICAgICAgICAgPGJ1dHRvbiBuZy1jbGljaz0iJGxvZy5pbmZvKG1lc3NhZ2UpIj5pbmZvPC9idXR0
b24+CisgICAgICAgICA8YnV0dG9uIG5nLWNsaWNrPSIkbG9nLmVycm9yKG1lc3NhZ2UpIj5lcnJv
cjwvYnV0dG9uPgorICAgICAgICAgPGJ1dHRvbiBuZy1jbGljaz0iJGxvZy5kZWJ1ZyhtZXNzYWdl
KSI+ZGVidWc8L2J1dHRvbj4KKyAgICAgICA8L2Rpdj4KKyAgICAgPC9maWxlPgorICAgPC9leGFt
cGxlPgorICovCisKKy8qKgorICogQG5nZG9jIHByb3ZpZGVyCisgKiBAbmFtZSAkbG9nUHJvdmlk
ZXIKKyAqIEBkZXNjcmlwdGlvbgorICogVXNlIHRoZSBgJGxvZ1Byb3ZpZGVyYCB0byBjb25maWd1
cmUgaG93IHRoZSBhcHBsaWNhdGlvbiBsb2dzIG1lc3NhZ2VzCisgKi8KK2Z1bmN0aW9uICRMb2dQ
cm92aWRlcigpIHsKKyAgdmFyIGRlYnVnID0gdHJ1ZSwKKyAgICAgIHNlbGYgPSB0aGlzOworCisg
IC8qKgorICAgKiBAbmdkb2MgbWV0aG9kCisgICAqIEBuYW1lICRsb2dQcm92aWRlciNkZWJ1Z0Vu
YWJsZWQKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGZsYWcgZW5h
YmxlIG9yIGRpc2FibGUgZGVidWcgbGV2ZWwgbWVzc2FnZXMKKyAgICogQHJldHVybnMgeyp9IGN1
cnJlbnQgdmFsdWUgaWYgdXNlZCBhcyBnZXR0ZXIgb3IgaXRzZWxmIChjaGFpbmluZykgaWYgdXNl
ZCBhcyBzZXR0ZXIKKyAgICovCisgIHRoaXMuZGVidWdFbmFibGVkID0gZnVuY3Rpb24oZmxhZykg
eworICAgIGlmIChpc0RlZmluZWQoZmxhZykpIHsKKyAgICAgIGRlYnVnID0gZmxhZzsKKyAgICBy
ZXR1cm4gdGhpczsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIGRlYnVnOworICAgIH0KKyAg
fTsKKworICB0aGlzLiRnZXQgPSBbJyR3aW5kb3cnLCBmdW5jdGlvbigkd2luZG93KSB7CisgICAg
cmV0dXJuIHsKKyAgICAgIC8qKgorICAgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAgICogQG5h
bWUgJGxvZyNsb2cKKyAgICAgICAqCisgICAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgICAqIFdy
aXRlIGEgbG9nIG1lc3NhZ2UKKyAgICAgICAqLworICAgICAgbG9nOiBjb25zb2xlTG9nKCdsb2cn
KSwKKworICAgICAgLyoqCisgICAgICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICAgKiBAbmFtZSAk
bG9nI2luZm8KKyAgICAgICAqCisgICAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgICAqIFdyaXRl
IGFuIGluZm9ybWF0aW9uIG1lc3NhZ2UKKyAgICAgICAqLworICAgICAgaW5mbzogY29uc29sZUxv
ZygnaW5mbycpLAorCisgICAgICAvKioKKyAgICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgICAq
IEBuYW1lICRsb2cjd2FybgorICAgICAgICoKKyAgICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAg
ICogV3JpdGUgYSB3YXJuaW5nIG1lc3NhZ2UKKyAgICAgICAqLworICAgICAgd2FybjogY29uc29s
ZUxvZygnd2FybicpLAorCisgICAgICAvKioKKyAgICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAg
ICAqIEBuYW1lICRsb2cjZXJyb3IKKyAgICAgICAqCisgICAgICAgKiBAZGVzY3JpcHRpb24KKyAg
ICAgICAqIFdyaXRlIGFuIGVycm9yIG1lc3NhZ2UKKyAgICAgICAqLworICAgICAgZXJyb3I6IGNv
bnNvbGVMb2coJ2Vycm9yJyksCisKKyAgICAgIC8qKgorICAgICAgICogQG5nZG9jIG1ldGhvZAor
ICAgICAgICogQG5hbWUgJGxvZyNkZWJ1ZworICAgICAgICoKKyAgICAgICAqIEBkZXNjcmlwdGlv
bgorICAgICAgICogV3JpdGUgYSBkZWJ1ZyBtZXNzYWdlCisgICAgICAgKi8KKyAgICAgIGRlYnVn
OiAoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBmbiA9IGNvbnNvbGVMb2coJ2RlYnVnJyk7CisK
KyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgIGlmIChkZWJ1ZykgeworICAg
ICAgICAgICAgZm4uYXBwbHkoc2VsZiwgYXJndW1lbnRzKTsKKyAgICAgICAgICB9CisgICAgICAg
IH07CisgICAgICB9KCkpCisgICAgfTsKKworICAgIGZ1bmN0aW9uIGZvcm1hdEVycm9yKGFyZykg
eworICAgICAgaWYgKGFyZyBpbnN0YW5jZW9mIEVycm9yKSB7CisgICAgICAgIGlmIChhcmcuc3Rh
Y2spIHsKKyAgICAgICAgICBhcmcgPSAoYXJnLm1lc3NhZ2UgJiYgYXJnLnN0YWNrLmluZGV4T2Yo
YXJnLm1lc3NhZ2UpID09PSAtMSkKKyAgICAgICAgICAgICAgPyAnRXJyb3I6ICcgKyBhcmcubWVz
c2FnZSArICdcbicgKyBhcmcuc3RhY2sKKyAgICAgICAgICAgICAgOiBhcmcuc3RhY2s7CisgICAg
ICAgIH0gZWxzZSBpZiAoYXJnLnNvdXJjZVVSTCkgeworICAgICAgICAgIGFyZyA9IGFyZy5tZXNz
YWdlICsgJ1xuJyArIGFyZy5zb3VyY2VVUkwgKyAnOicgKyBhcmcubGluZTsKKyAgICAgICAgfQor
ICAgICAgfQorICAgICAgcmV0dXJuIGFyZzsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjb25zb2xl
TG9nKHR5cGUpIHsKKyAgICAgIHZhciBjb25zb2xlID0gJHdpbmRvdy5jb25zb2xlIHx8IHt9LAor
ICAgICAgICAgIGxvZ0ZuID0gY29uc29sZVt0eXBlXSB8fCBjb25zb2xlLmxvZyB8fCBub29wLAor
ICAgICAgICAgIGhhc0FwcGx5ID0gZmFsc2U7CisKKyAgICAgIC8vIE5vdGU6IHJlYWRpbmcgbG9n
Rm4uYXBwbHkgdGhyb3dzIGFuIGVycm9yIGluIElFMTEgaW4gSUU4IGRvY3VtZW50IG1vZGUuCisg
ICAgICAvLyBUaGUgcmVhc29uIGJlaGluZCB0aGlzIGlzIHRoYXQgY29uc29sZS5sb2cgaGFzIHR5
cGUgIm9iamVjdCIgaW4gSUU4Li4uCisgICAgICB0cnkgeworICAgICAgICBoYXNBcHBseSA9ICEh
bG9nRm4uYXBwbHk7CisgICAgICB9IGNhdGNoIChlKSB7fQorCisgICAgICBpZiAoaGFzQXBwbHkp
IHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHZhciBhcmdzID0gW107
CisgICAgICAgICAgZm9yRWFjaChhcmd1bWVudHMsIGZ1bmN0aW9uKGFyZykgeworICAgICAgICAg
ICAgYXJncy5wdXNoKGZvcm1hdEVycm9yKGFyZykpOworICAgICAgICAgIH0pOworICAgICAgICAg
IHJldHVybiBsb2dGbi5hcHBseShjb25zb2xlLCBhcmdzKTsKKyAgICAgICAgfTsKKyAgICAgIH0K
KworICAgICAgLy8gd2UgYXJlIElFIHdoaWNoIGVpdGhlciBkb2Vzbid0IGhhdmUgd2luZG93LmNv
bnNvbGUgPT4gdGhpcyBpcyBub29wIGFuZCB3ZSBkbyBub3RoaW5nLAorICAgICAgLy8gb3Igd2Ug
YXJlIElFIHdoZXJlIGNvbnNvbGUubG9nIGRvZXNuJ3QgaGF2ZSBhcHBseSBzbyB3ZSBsb2cgYXQg
bGVhc3QgZmlyc3QgMiBhcmdzCisgICAgICByZXR1cm4gZnVuY3Rpb24oYXJnMSwgYXJnMikgewor
ICAgICAgICBsb2dGbihhcmcxLCBhcmcyID09IG51bGwgPyAnJyA6IGFyZzIpOworICAgICAgfTsK
KyAgICB9CisgIH1dOworfQorCisvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICog
KiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisgKiAgICAgQW55IGNvbW1p
dHMgdG8gdGhpcyBmaWxlIHNob3VsZCBiZSByZXZpZXdlZCB3aXRoIHNlY3VyaXR5IGluIG1pbmQu
ICAqCisgKiAgIENoYW5nZXMgdG8gdGhpcyBmaWxlIGNhbiBwb3RlbnRpYWxseSBjcmVhdGUgc2Vj
dXJpdHkgdnVsbmVyYWJpbGl0aWVzLiAqCisgKiAgICAgICAgICBBbiBhcHByb3ZhbCBmcm9tIDIg
Q29yZSBtZW1iZXJzIHdpdGggaGlzdG9yeSBvZiBtb2RpZnlpbmcgICAgICAqCisgKiAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzIGZpbGUgaXMgcmVxdWlyZWQuICAgICAgICAgICAgICAgICAg
ICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgRG9lcyB0aGUgY2hhbmdlIHNvbWVo
b3cgYWxsb3cgZm9yIGFyYml0cmFyeSBqYXZhc2NyaXB0IHRvIGJlIGV4ZWN1dGVkPyAqCisgKiAg
ICBPciBhbGxvd3MgZm9yIHNvbWVvbmUgdG8gY2hhbmdlIHRoZSBwcm90b3R5cGUgb2YgYnVpbHQt
aW4gb2JqZWN0cz8gICAqCisgKiAgICAgT3IgZ2l2ZXMgdW5kZXNpcmVkIGFjY2VzcyB0byB2YXJp
YWJsZXMgbGlrZXMgZG9jdW1lbnQgb3Igd2luZG93PyAgICAqCisgKiAqICogKiAqICogKiAqICog
KiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAq
LworCit2YXIgJHBhcnNlTWluRXJyID0gbWluRXJyKCckcGFyc2UnKTsKKworLy8gU2FuZGJveGlu
ZyBBbmd1bGFyIEV4cHJlc3Npb25zCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vIEFuZ3VsYXIgZXhwcmVzc2lvbnMgYXJlIGdlbmVyYWxseSBjb25zaWRlcmVkIHNhZmUgYmVj
YXVzZSB0aGVzZSBleHByZXNzaW9ucyBvbmx5IGhhdmUgZGlyZWN0CisvLyBhY2Nlc3MgdG8gYCRz
Y29wZWAgYW5kIGxvY2Fscy4gSG93ZXZlciwgb25lIGNhbiBvYnRhaW4gdGhlIGFiaWxpdHkgdG8g
ZXhlY3V0ZSBhcmJpdHJhcnkgSlMgY29kZSBieQorLy8gb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRv
IG5hdGl2ZSBKUyBmdW5jdGlvbnMgc3VjaCBhcyB0aGUgRnVuY3Rpb24gY29uc3RydWN0b3IuCisv
LworLy8gQXMgYW4gZXhhbXBsZSwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBBbmd1bGFyIGV4cHJl
c3Npb246CisvLworLy8gICB7fS50b1N0cmluZy5jb25zdHJ1Y3RvcignYWxlcnQoImV2aWwgSlMg
Y29kZSIpJykKKy8vCisvLyBUaGlzIHNhbmRib3hpbmcgdGVjaG5pcXVlIGlzIG5vdCBwZXJmZWN0
IGFuZCBkb2Vzbid0IGFpbSB0byBiZS4gVGhlIGdvYWwgaXMgdG8gcHJldmVudCBleHBsb2l0cwor
Ly8gYWdhaW5zdCB0aGUgZXhwcmVzc2lvbiBsYW5ndWFnZSwgYnV0IG5vdCB0byBwcmV2ZW50IGV4
cGxvaXRzIHRoYXQgd2VyZSBlbmFibGVkIGJ5IGV4cG9zaW5nCisvLyBzZW5zaXRpdmUgSmF2YVNj
cmlwdCBvciBicm93c2VyIEFQSXMgb24gU2NvcGUuIEV4cG9zaW5nIHN1Y2ggb2JqZWN0cyBvbiBh
IFNjb3BlIGlzIG5ldmVyIGEgZ29vZAorLy8gcHJhY3RpY2UgYW5kIHRoZXJlZm9yZSB3ZSBhcmUg
bm90IGV2ZW4gdHJ5aW5nIHRvIHByb3RlY3QgYWdhaW5zdCBpbnRlcmFjdGlvbiB3aXRoIGFuIG9i
amVjdAorLy8gZXhwbGljaXRseSBleHBvc2VkIGluIHRoaXMgd2F5LgorLy8KKy8vIEluIGdlbmVy
YWwsIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBhY2Nlc3MgYSBXaW5kb3cgb2JqZWN0IGZyb20gYW4g
YW5ndWxhciBleHByZXNzaW9uIHVubGVzcyBhCisvLyB3aW5kb3cgb3Igc29tZSBET00gb2JqZWN0
IHRoYXQgaGFzIGEgcmVmZXJlbmNlIHRvIHdpbmRvdyBpcyBwdWJsaXNoZWQgb250byBhIFNjb3Bl
LgorLy8gU2ltaWxhcmx5IHdlIHByZXZlbnQgaW52b2NhdGlvbnMgb2YgZnVuY3Rpb24ga25vd24g
dG8gYmUgZGFuZ2Vyb3VzLCBhcyB3ZWxsIGFzIGFzc2lnbm1lbnRzIHRvCisvLyBuYXRpdmUgb2Jq
ZWN0cy4KKy8vCisvLyBTZWUgaHR0cHM6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvZ3VpZGUvc2VjdXJp
dHkKKworCitmdW5jdGlvbiBlbnN1cmVTYWZlTWVtYmVyTmFtZShuYW1lLCBmdWxsRXhwcmVzc2lv
bikgeworICBpZiAobmFtZSA9PT0gIl9fZGVmaW5lR2V0dGVyX18iIHx8IG5hbWUgPT09ICJfX2Rl
ZmluZVNldHRlcl9fIgorICAgICAgfHwgbmFtZSA9PT0gIl9fbG9va3VwR2V0dGVyX18iIHx8IG5h
bWUgPT09ICJfX2xvb2t1cFNldHRlcl9fIgorICAgICAgfHwgbmFtZSA9PT0gIl9fcHJvdG9fXyIp
IHsKKyAgICB0aHJvdyAkcGFyc2VNaW5FcnIoJ2lzZWNmbGQnLAorICAgICAgICAnQXR0ZW1wdGlu
ZyB0byBhY2Nlc3MgYSBkaXNhbGxvd2VkIGZpZWxkIGluIEFuZ3VsYXIgZXhwcmVzc2lvbnMhICcK
KyAgICAgICAgKyAnRXhwcmVzc2lvbjogezB9JywgZnVsbEV4cHJlc3Npb24pOworICB9CisgIHJl
dHVybiBuYW1lOworfQorCitmdW5jdGlvbiBlbnN1cmVTYWZlT2JqZWN0KG9iaiwgZnVsbEV4cHJl
c3Npb24pIHsKKyAgLy8gbmlmdHkgY2hlY2sgaWYgb2JqIGlzIEZ1bmN0aW9uIHRoYXQgaXMgZmFz
dCBhbmQgd29ya3MgYWNyb3NzIGlmcmFtZXMgYW5kIG90aGVyIGNvbnRleHRzCisgIGlmIChvYmop
IHsKKyAgICBpZiAob2JqLmNvbnN0cnVjdG9yID09PSBvYmopIHsKKyAgICAgIHRocm93ICRwYXJz
ZU1pbkVycignaXNlY2ZuJywKKyAgICAgICAgICAnUmVmZXJlbmNpbmcgRnVuY3Rpb24gaW4gQW5n
dWxhciBleHByZXNzaW9ucyBpcyBkaXNhbGxvd2VkISBFeHByZXNzaW9uOiB7MH0nLAorICAgICAg
ICAgIGZ1bGxFeHByZXNzaW9uKTsKKyAgICB9IGVsc2UgaWYgKC8vIGlzV2luZG93KG9iaikKKyAg
ICAgICAgb2JqLndpbmRvdyA9PT0gb2JqKSB7CisgICAgICB0aHJvdyAkcGFyc2VNaW5FcnIoJ2lz
ZWN3aW5kb3cnLAorICAgICAgICAgICdSZWZlcmVuY2luZyB0aGUgV2luZG93IGluIEFuZ3VsYXIg
ZXhwcmVzc2lvbnMgaXMgZGlzYWxsb3dlZCEgRXhwcmVzc2lvbjogezB9JywKKyAgICAgICAgICBm
dWxsRXhwcmVzc2lvbik7CisgICAgfSBlbHNlIGlmICgvLyBpc0VsZW1lbnQob2JqKQorICAgICAg
ICBvYmouY2hpbGRyZW4gJiYgKG9iai5ub2RlTmFtZSB8fCAob2JqLnByb3AgJiYgb2JqLmF0dHIg
JiYgb2JqLmZpbmQpKSkgeworICAgICAgdGhyb3cgJHBhcnNlTWluRXJyKCdpc2VjZG9tJywKKyAg
ICAgICAgICAnUmVmZXJlbmNpbmcgRE9NIG5vZGVzIGluIEFuZ3VsYXIgZXhwcmVzc2lvbnMgaXMg
ZGlzYWxsb3dlZCEgRXhwcmVzc2lvbjogezB9JywKKyAgICAgICAgICBmdWxsRXhwcmVzc2lvbik7
CisgICAgfSBlbHNlIGlmICgvLyBibG9jayBPYmplY3Qgc28gdGhhdCB3ZSBjYW4ndCBnZXQgaG9s
ZCBvZiBkYW5nZXJvdXMgT2JqZWN0LiogbWV0aG9kcworICAgICAgICBvYmogPT09IE9iamVjdCkg
eworICAgICAgdGhyb3cgJHBhcnNlTWluRXJyKCdpc2Vjb2JqJywKKyAgICAgICAgICAnUmVmZXJl
bmNpbmcgT2JqZWN0IGluIEFuZ3VsYXIgZXhwcmVzc2lvbnMgaXMgZGlzYWxsb3dlZCEgRXhwcmVz
c2lvbjogezB9JywKKyAgICAgICAgICBmdWxsRXhwcmVzc2lvbik7CisgICAgfQorICB9CisgIHJl
dHVybiBvYmo7Cit9CisKK3ZhciBDQUxMID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7Cit2YXIg
QVBQTFkgPSBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHk7Cit2YXIgQklORCA9IEZ1bmN0aW9uLnBy
b3RvdHlwZS5iaW5kOworCitmdW5jdGlvbiBlbnN1cmVTYWZlRnVuY3Rpb24ob2JqLCBmdWxsRXhw
cmVzc2lvbikgeworICBpZiAob2JqKSB7CisgICAgaWYgKG9iai5jb25zdHJ1Y3RvciA9PT0gb2Jq
KSB7CisgICAgICB0aHJvdyAkcGFyc2VNaW5FcnIoJ2lzZWNmbicsCisgICAgICAgICdSZWZlcmVu
Y2luZyBGdW5jdGlvbiBpbiBBbmd1bGFyIGV4cHJlc3Npb25zIGlzIGRpc2FsbG93ZWQhIEV4cHJl
c3Npb246IHswfScsCisgICAgICAgIGZ1bGxFeHByZXNzaW9uKTsKKyAgICB9IGVsc2UgaWYgKG9i
aiA9PT0gQ0FMTCB8fCBvYmogPT09IEFQUExZIHx8IG9iaiA9PT0gQklORCkgeworICAgICAgdGhy
b3cgJHBhcnNlTWluRXJyKCdpc2VjZmYnLAorICAgICAgICAnUmVmZXJlbmNpbmcgY2FsbCwgYXBw
bHkgb3IgYmluZCBpbiBBbmd1bGFyIGV4cHJlc3Npb25zIGlzIGRpc2FsbG93ZWQhIEV4cHJlc3Np
b246IHswfScsCisgICAgICAgIGZ1bGxFeHByZXNzaW9uKTsKKyAgICB9CisgIH0KK30KKwordmFy
IE9QRVJBVE9SUyA9IGNyZWF0ZU1hcCgpOworZm9yRWFjaCgnKyAtICogLyAlID09PSAhPT0gPT0g
IT0gPCA+IDw9ID49ICYmIHx8ICEgPSB8Jy5zcGxpdCgnICcpLCBmdW5jdGlvbihvcGVyYXRvcikg
eyBPUEVSQVRPUlNbb3BlcmF0b3JdID0gdHJ1ZTsgfSk7Cit2YXIgRVNDQVBFID0geyJuIjoiXG4i
LCAiZiI6IlxmIiwgInIiOiJcciIsICJ0IjoiXHQiLCAidiI6Ilx2IiwgIiciOiInIiwgJyInOici
J307CisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworCisv
KioKKyAqIEBjb25zdHJ1Y3RvcgorICovCit2YXIgTGV4ZXIgPSBmdW5jdGlvbihvcHRpb25zKSB7
CisgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7Cit9OworCitMZXhlci5wcm90b3R5cGUgPSB7Cisg
IGNvbnN0cnVjdG9yOiBMZXhlciwKKworICBsZXg6IGZ1bmN0aW9uKHRleHQpIHsKKyAgICB0aGlz
LnRleHQgPSB0ZXh0OworICAgIHRoaXMuaW5kZXggPSAwOworICAgIHRoaXMudG9rZW5zID0gW107
CisKKyAgICB3aGlsZSAodGhpcy5pbmRleCA8IHRoaXMudGV4dC5sZW5ndGgpIHsKKyAgICAgIHZh
ciBjaCA9IHRoaXMudGV4dC5jaGFyQXQodGhpcy5pbmRleCk7CisgICAgICBpZiAoY2ggPT09ICci
JyB8fCBjaCA9PT0gIiciKSB7CisgICAgICAgIHRoaXMucmVhZFN0cmluZyhjaCk7CisgICAgICB9
IGVsc2UgaWYgKHRoaXMuaXNOdW1iZXIoY2gpIHx8IGNoID09PSAnLicgJiYgdGhpcy5pc051bWJl
cih0aGlzLnBlZWsoKSkpIHsKKyAgICAgICAgdGhpcy5yZWFkTnVtYmVyKCk7CisgICAgICB9IGVs
c2UgaWYgKHRoaXMuaXNJZGVudChjaCkpIHsKKyAgICAgICAgdGhpcy5yZWFkSWRlbnQoKTsKKyAg
ICAgIH0gZWxzZSBpZiAodGhpcy5pcyhjaCwgJygpe31bXS4sOzo/JykpIHsKKyAgICAgICAgdGhp
cy50b2tlbnMucHVzaCh7aW5kZXg6IHRoaXMuaW5kZXgsIHRleHQ6IGNofSk7CisgICAgICAgIHRo
aXMuaW5kZXgrKzsKKyAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1doaXRlc3BhY2UoY2gpKSB7Cisg
ICAgICAgIHRoaXMuaW5kZXgrKzsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHZhciBjaDIgPSBj
aCArIHRoaXMucGVlaygpOworICAgICAgICB2YXIgY2gzID0gY2gyICsgdGhpcy5wZWVrKDIpOwor
ICAgICAgICB2YXIgb3AxID0gT1BFUkFUT1JTW2NoXTsKKyAgICAgICAgdmFyIG9wMiA9IE9QRVJB
VE9SU1tjaDJdOworICAgICAgICB2YXIgb3AzID0gT1BFUkFUT1JTW2NoM107CisgICAgICAgIGlm
IChvcDEgfHwgb3AyIHx8IG9wMykgeworICAgICAgICAgIHZhciB0b2tlbiA9IG9wMyA/IGNoMyA6
IChvcDIgPyBjaDIgOiBjaCk7CisgICAgICAgICAgdGhpcy50b2tlbnMucHVzaCh7aW5kZXg6IHRo
aXMuaW5kZXgsIHRleHQ6IHRva2VuLCBvcGVyYXRvcjogdHJ1ZX0pOworICAgICAgICAgIHRoaXMu
aW5kZXggKz0gdG9rZW4ubGVuZ3RoOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRoaXMu
dGhyb3dFcnJvcignVW5leHBlY3RlZCBuZXh0IGNoYXJhY3RlciAnLCB0aGlzLmluZGV4LCB0aGlz
LmluZGV4ICsgMSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRoaXMu
dG9rZW5zOworICB9LAorCisgIGlzOiBmdW5jdGlvbihjaCwgY2hhcnMpIHsKKyAgICByZXR1cm4g
Y2hhcnMuaW5kZXhPZihjaCkgIT09IC0xOworICB9LAorCisgIHBlZWs6IGZ1bmN0aW9uKGkpIHsK
KyAgICB2YXIgbnVtID0gaSB8fCAxOworICAgIHJldHVybiAodGhpcy5pbmRleCArIG51bSA8IHRo
aXMudGV4dC5sZW5ndGgpID8gdGhpcy50ZXh0LmNoYXJBdCh0aGlzLmluZGV4ICsgbnVtKSA6IGZh
bHNlOworICB9LAorCisgIGlzTnVtYmVyOiBmdW5jdGlvbihjaCkgeworICAgIHJldHVybiAoJzAn
IDw9IGNoICYmIGNoIDw9ICc5JykgJiYgdHlwZW9mIGNoID09PSAic3RyaW5nIjsKKyAgfSwKKwor
ICBpc1doaXRlc3BhY2U6IGZ1bmN0aW9uKGNoKSB7CisgICAgLy8gSUUgdHJlYXRzIG5vbi1icmVh
a2luZyBzcGFjZSBhcyBcdTAwQTAKKyAgICByZXR1cm4gKGNoID09PSAnICcgfHwgY2ggPT09ICdc
cicgfHwgY2ggPT09ICdcdCcgfHwKKyAgICAgICAgICAgIGNoID09PSAnXG4nIHx8IGNoID09PSAn
XHYnIHx8IGNoID09PSAnXHUwMEEwJyk7CisgIH0sCisKKyAgaXNJZGVudDogZnVuY3Rpb24oY2gp
IHsKKyAgICByZXR1cm4gKCdhJyA8PSBjaCAmJiBjaCA8PSAneicgfHwKKyAgICAgICAgICAgICdB
JyA8PSBjaCAmJiBjaCA8PSAnWicgfHwKKyAgICAgICAgICAgICdfJyA9PT0gY2ggfHwgY2ggPT09
ICckJyk7CisgIH0sCisKKyAgaXNFeHBPcGVyYXRvcjogZnVuY3Rpb24oY2gpIHsKKyAgICByZXR1
cm4gKGNoID09PSAnLScgfHwgY2ggPT09ICcrJyB8fCB0aGlzLmlzTnVtYmVyKGNoKSk7CisgIH0s
CisKKyAgdGhyb3dFcnJvcjogZnVuY3Rpb24oZXJyb3IsIHN0YXJ0LCBlbmQpIHsKKyAgICBlbmQg
PSBlbmQgfHwgdGhpcy5pbmRleDsKKyAgICB2YXIgY29sU3RyID0gKGlzRGVmaW5lZChzdGFydCkK
KyAgICAgICAgICAgID8gJ3MgJyArIHN0YXJ0ICsgICctJyArIHRoaXMuaW5kZXggKyAnIFsnICsg
dGhpcy50ZXh0LnN1YnN0cmluZyhzdGFydCwgZW5kKSArICddJworICAgICAgICAgICAgOiAnICcg
KyBlbmQpOworICAgIHRocm93ICRwYXJzZU1pbkVycignbGV4ZXJyJywgJ0xleGVyIEVycm9yOiB7
MH0gYXQgY29sdW1uezF9IGluIGV4cHJlc3Npb24gW3syfV0uJywKKyAgICAgICAgZXJyb3IsIGNv
bFN0ciwgdGhpcy50ZXh0KTsKKyAgfSwKKworICByZWFkTnVtYmVyOiBmdW5jdGlvbigpIHsKKyAg
ICB2YXIgbnVtYmVyID0gJyc7CisgICAgdmFyIHN0YXJ0ID0gdGhpcy5pbmRleDsKKyAgICB3aGls
ZSAodGhpcy5pbmRleCA8IHRoaXMudGV4dC5sZW5ndGgpIHsKKyAgICAgIHZhciBjaCA9IGxvd2Vy
Y2FzZSh0aGlzLnRleHQuY2hhckF0KHRoaXMuaW5kZXgpKTsKKyAgICAgIGlmIChjaCA9PSAnLicg
fHwgdGhpcy5pc051bWJlcihjaCkpIHsKKyAgICAgICAgbnVtYmVyICs9IGNoOworICAgICAgfSBl
bHNlIHsKKyAgICAgICAgdmFyIHBlZWtDaCA9IHRoaXMucGVlaygpOworICAgICAgICBpZiAoY2gg
PT0gJ2UnICYmIHRoaXMuaXNFeHBPcGVyYXRvcihwZWVrQ2gpKSB7CisgICAgICAgICAgbnVtYmVy
ICs9IGNoOworICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNFeHBPcGVyYXRvcihjaCkgJiYKKyAg
ICAgICAgICAgIHBlZWtDaCAmJiB0aGlzLmlzTnVtYmVyKHBlZWtDaCkgJiYKKyAgICAgICAgICAg
IG51bWJlci5jaGFyQXQobnVtYmVyLmxlbmd0aCAtIDEpID09ICdlJykgeworICAgICAgICAgIG51
bWJlciArPSBjaDsKKyAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzRXhwT3BlcmF0b3IoY2gpICYm
CisgICAgICAgICAgICAoIXBlZWtDaCB8fCAhdGhpcy5pc051bWJlcihwZWVrQ2gpKSAmJgorICAg
ICAgICAgICAgbnVtYmVyLmNoYXJBdChudW1iZXIubGVuZ3RoIC0gMSkgPT0gJ2UnKSB7CisgICAg
ICAgICAgdGhpcy50aHJvd0Vycm9yKCdJbnZhbGlkIGV4cG9uZW50Jyk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHRoaXMuaW5k
ZXgrKzsKKyAgICB9CisgICAgdGhpcy50b2tlbnMucHVzaCh7CisgICAgICBpbmRleDogc3RhcnQs
CisgICAgICB0ZXh0OiBudW1iZXIsCisgICAgICBjb25zdGFudDogdHJ1ZSwKKyAgICAgIHZhbHVl
OiBOdW1iZXIobnVtYmVyKQorICAgIH0pOworICB9LAorCisgIHJlYWRJZGVudDogZnVuY3Rpb24o
KSB7CisgICAgdmFyIHN0YXJ0ID0gdGhpcy5pbmRleDsKKyAgICB3aGlsZSAodGhpcy5pbmRleCA8
IHRoaXMudGV4dC5sZW5ndGgpIHsKKyAgICAgIHZhciBjaCA9IHRoaXMudGV4dC5jaGFyQXQodGhp
cy5pbmRleCk7CisgICAgICBpZiAoISh0aGlzLmlzSWRlbnQoY2gpIHx8IHRoaXMuaXNOdW1iZXIo
Y2gpKSkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHRoaXMuaW5kZXgrKzsKKyAg
ICB9CisgICAgdGhpcy50b2tlbnMucHVzaCh7CisgICAgICBpbmRleDogc3RhcnQsCisgICAgICB0
ZXh0OiB0aGlzLnRleHQuc2xpY2Uoc3RhcnQsIHRoaXMuaW5kZXgpLAorICAgICAgaWRlbnRpZmll
cjogdHJ1ZQorICAgIH0pOworICB9LAorCisgIHJlYWRTdHJpbmc6IGZ1bmN0aW9uKHF1b3RlKSB7
CisgICAgdmFyIHN0YXJ0ID0gdGhpcy5pbmRleDsKKyAgICB0aGlzLmluZGV4Kys7CisgICAgdmFy
IHN0cmluZyA9ICcnOworICAgIHZhciByYXdTdHJpbmcgPSBxdW90ZTsKKyAgICB2YXIgZXNjYXBl
ID0gZmFsc2U7CisgICAgd2hpbGUgKHRoaXMuaW5kZXggPCB0aGlzLnRleHQubGVuZ3RoKSB7Cisg
ICAgICB2YXIgY2ggPSB0aGlzLnRleHQuY2hhckF0KHRoaXMuaW5kZXgpOworICAgICAgcmF3U3Ry
aW5nICs9IGNoOworICAgICAgaWYgKGVzY2FwZSkgeworICAgICAgICBpZiAoY2ggPT09ICd1Jykg
eworICAgICAgICAgIHZhciBoZXggPSB0aGlzLnRleHQuc3Vic3RyaW5nKHRoaXMuaW5kZXggKyAx
LCB0aGlzLmluZGV4ICsgNSk7CisgICAgICAgICAgaWYgKCFoZXgubWF0Y2goL1tcZGEtZl17NH0v
aSkpIHsKKyAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcignSW52YWxpZCB1bmljb2RlIGVzY2Fw
ZSBbXFx1JyArIGhleCArICddJyk7CisgICAgICAgICAgfQorICAgICAgICAgIHRoaXMuaW5kZXgg
Kz0gNDsKKyAgICAgICAgICBzdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCho
ZXgsIDE2KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdmFyIHJlcCA9IEVTQ0FQRVtj
aF07CisgICAgICAgICAgc3RyaW5nID0gc3RyaW5nICsgKHJlcCB8fCBjaCk7CisgICAgICAgIH0K
KyAgICAgICAgZXNjYXBlID0gZmFsc2U7CisgICAgICB9IGVsc2UgaWYgKGNoID09PSAnXFwnKSB7
CisgICAgICAgIGVzY2FwZSA9IHRydWU7CisgICAgICB9IGVsc2UgaWYgKGNoID09PSBxdW90ZSkg
eworICAgICAgICB0aGlzLmluZGV4Kys7CisgICAgICAgIHRoaXMudG9rZW5zLnB1c2goeworICAg
ICAgICAgIGluZGV4OiBzdGFydCwKKyAgICAgICAgICB0ZXh0OiByYXdTdHJpbmcsCisgICAgICAg
ICAgY29uc3RhbnQ6IHRydWUsCisgICAgICAgICAgdmFsdWU6IHN0cmluZworICAgICAgICB9KTsK
KyAgICAgICAgcmV0dXJuOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgc3RyaW5nICs9IGNoOwor
ICAgICAgfQorICAgICAgdGhpcy5pbmRleCsrOworICAgIH0KKyAgICB0aGlzLnRocm93RXJyb3Io
J1VudGVybWluYXRlZCBxdW90ZScsIHN0YXJ0KTsKKyAgfQorfTsKKwordmFyIEFTVCA9IGZ1bmN0
aW9uKGxleGVyLCBvcHRpb25zKSB7CisgIHRoaXMubGV4ZXIgPSBsZXhlcjsKKyAgdGhpcy5vcHRp
b25zID0gb3B0aW9uczsKK307CisKK0FTVC5Qcm9ncmFtID0gJ1Byb2dyYW0nOworQVNULkV4cHJl
c3Npb25TdGF0ZW1lbnQgPSAnRXhwcmVzc2lvblN0YXRlbWVudCc7CitBU1QuQXNzaWdubWVudEV4
cHJlc3Npb24gPSAnQXNzaWdubWVudEV4cHJlc3Npb24nOworQVNULkNvbmRpdGlvbmFsRXhwcmVz
c2lvbiA9ICdDb25kaXRpb25hbEV4cHJlc3Npb24nOworQVNULkxvZ2ljYWxFeHByZXNzaW9uID0g
J0xvZ2ljYWxFeHByZXNzaW9uJzsKK0FTVC5CaW5hcnlFeHByZXNzaW9uID0gJ0JpbmFyeUV4cHJl
c3Npb24nOworQVNULlVuYXJ5RXhwcmVzc2lvbiA9ICdVbmFyeUV4cHJlc3Npb24nOworQVNULkNh
bGxFeHByZXNzaW9uID0gJ0NhbGxFeHByZXNzaW9uJzsKK0FTVC5NZW1iZXJFeHByZXNzaW9uID0g
J01lbWJlckV4cHJlc3Npb24nOworQVNULklkZW50aWZpZXIgPSAnSWRlbnRpZmllcic7CitBU1Qu
TGl0ZXJhbCA9ICdMaXRlcmFsJzsKK0FTVC5BcnJheUV4cHJlc3Npb24gPSAnQXJyYXlFeHByZXNz
aW9uJzsKK0FTVC5Qcm9wZXJ0eSA9ICdQcm9wZXJ0eSc7CitBU1QuT2JqZWN0RXhwcmVzc2lvbiA9
ICdPYmplY3RFeHByZXNzaW9uJzsKK0FTVC5UaGlzRXhwcmVzc2lvbiA9ICdUaGlzRXhwcmVzc2lv
bic7CisKKy8vIEludGVybmFsIHVzZSBvbmx5CitBU1QuTkdWYWx1ZVBhcmFtZXRlciA9ICdOR1Zh
bHVlUGFyYW1ldGVyJzsKKworQVNULnByb3RvdHlwZSA9IHsKKyAgYXN0OiBmdW5jdGlvbih0ZXh0
KSB7CisgICAgdGhpcy50ZXh0ID0gdGV4dDsKKyAgICB0aGlzLnRva2VucyA9IHRoaXMubGV4ZXIu
bGV4KHRleHQpOworCisgICAgdmFyIHZhbHVlID0gdGhpcy5wcm9ncmFtKCk7CisKKyAgICBpZiAo
dGhpcy50b2tlbnMubGVuZ3RoICE9PSAwKSB7CisgICAgICB0aGlzLnRocm93RXJyb3IoJ2lzIGFu
IHVuZXhwZWN0ZWQgdG9rZW4nLCB0aGlzLnRva2Vuc1swXSk7CisgICAgfQorCisgICAgcmV0dXJu
IHZhbHVlOworICB9LAorCisgIHByb2dyYW06IGZ1bmN0aW9uKCkgeworICAgIHZhciBib2R5ID0g
W107CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgIGlmICh0aGlzLnRva2Vucy5sZW5ndGggPiAw
ICYmICF0aGlzLnBlZWsoJ30nLCAnKScsICc7JywgJ10nKSkKKyAgICAgICAgYm9keS5wdXNoKHRo
aXMuZXhwcmVzc2lvblN0YXRlbWVudCgpKTsKKyAgICAgIGlmICghdGhpcy5leHBlY3QoJzsnKSkg
eworICAgICAgICByZXR1cm4geyB0eXBlOiBBU1QuUHJvZ3JhbSwgYm9keTogYm9keX07CisgICAg
ICB9CisgICAgfQorICB9LAorCisgIGV4cHJlc3Npb25TdGF0ZW1lbnQ6IGZ1bmN0aW9uKCkgewor
ICAgIHJldHVybiB7IHR5cGU6IEFTVC5FeHByZXNzaW9uU3RhdGVtZW50LCBleHByZXNzaW9uOiB0
aGlzLmZpbHRlckNoYWluKCkgfTsKKyAgfSwKKworICBmaWx0ZXJDaGFpbjogZnVuY3Rpb24oKSB7
CisgICAgdmFyIGxlZnQgPSB0aGlzLmV4cHJlc3Npb24oKTsKKyAgICB2YXIgdG9rZW47CisgICAg
d2hpbGUgKCh0b2tlbiA9IHRoaXMuZXhwZWN0KCd8JykpKSB7CisgICAgICBsZWZ0ID0gdGhpcy5m
aWx0ZXIobGVmdCk7CisgICAgfQorICAgIHJldHVybiBsZWZ0OworICB9LAorCisgIGV4cHJlc3Np
b246IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmFzc2lnbm1lbnQoKTsKKyAgfSwKKwor
ICBhc3NpZ25tZW50OiBmdW5jdGlvbigpIHsKKyAgICB2YXIgcmVzdWx0ID0gdGhpcy50ZXJuYXJ5
KCk7CisgICAgaWYgKHRoaXMuZXhwZWN0KCc9JykpIHsKKyAgICAgIHJlc3VsdCA9IHsgdHlwZTog
QVNULkFzc2lnbm1lbnRFeHByZXNzaW9uLCBsZWZ0OiByZXN1bHQsIHJpZ2h0OiB0aGlzLmFzc2ln
bm1lbnQoKSwgb3BlcmF0b3I6ICc9J307CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisgIH0s
CisKKyAgdGVybmFyeTogZnVuY3Rpb24oKSB7CisgICAgdmFyIHRlc3QgPSB0aGlzLmxvZ2ljYWxP
UigpOworICAgIHZhciBhbHRlcm5hdGU7CisgICAgdmFyIGNvbnNlcXVlbnQ7CisgICAgaWYgKHRo
aXMuZXhwZWN0KCc/JykpIHsKKyAgICAgIGFsdGVybmF0ZSA9IHRoaXMuZXhwcmVzc2lvbigpOwor
ICAgICAgaWYgKHRoaXMuY29uc3VtZSgnOicpKSB7CisgICAgICAgIGNvbnNlcXVlbnQgPSB0aGlz
LmV4cHJlc3Npb24oKTsKKyAgICAgICAgcmV0dXJuIHsgdHlwZTogQVNULkNvbmRpdGlvbmFsRXhw
cmVzc2lvbiwgdGVzdDogdGVzdCwgYWx0ZXJuYXRlOiBhbHRlcm5hdGUsIGNvbnNlcXVlbnQ6IGNv
bnNlcXVlbnR9OworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdGVzdDsKKyAgfSwKKworICBs
b2dpY2FsT1I6IGZ1bmN0aW9uKCkgeworICAgIHZhciBsZWZ0ID0gdGhpcy5sb2dpY2FsQU5EKCk7
CisgICAgd2hpbGUgKHRoaXMuZXhwZWN0KCd8fCcpKSB7CisgICAgICBsZWZ0ID0geyB0eXBlOiBB
U1QuTG9naWNhbEV4cHJlc3Npb24sIG9wZXJhdG9yOiAnfHwnLCBsZWZ0OiBsZWZ0LCByaWdodDog
dGhpcy5sb2dpY2FsQU5EKCkgfTsKKyAgICB9CisgICAgcmV0dXJuIGxlZnQ7CisgIH0sCisKKyAg
bG9naWNhbEFORDogZnVuY3Rpb24oKSB7CisgICAgdmFyIGxlZnQgPSB0aGlzLmVxdWFsaXR5KCk7
CisgICAgd2hpbGUgKHRoaXMuZXhwZWN0KCcmJicpKSB7CisgICAgICBsZWZ0ID0geyB0eXBlOiBB
U1QuTG9naWNhbEV4cHJlc3Npb24sIG9wZXJhdG9yOiAnJiYnLCBsZWZ0OiBsZWZ0LCByaWdodDog
dGhpcy5lcXVhbGl0eSgpfTsKKyAgICB9CisgICAgcmV0dXJuIGxlZnQ7CisgIH0sCisKKyAgZXF1
YWxpdHk6IGZ1bmN0aW9uKCkgeworICAgIHZhciBsZWZ0ID0gdGhpcy5yZWxhdGlvbmFsKCk7Cisg
ICAgdmFyIHRva2VuOworICAgIHdoaWxlICgodG9rZW4gPSB0aGlzLmV4cGVjdCgnPT0nLCchPScs
Jz09PScsJyE9PScpKSkgeworICAgICAgbGVmdCA9IHsgdHlwZTogQVNULkJpbmFyeUV4cHJlc3Np
b24sIG9wZXJhdG9yOiB0b2tlbi50ZXh0LCBsZWZ0OiBsZWZ0LCByaWdodDogdGhpcy5yZWxhdGlv
bmFsKCkgfTsKKyAgICB9CisgICAgcmV0dXJuIGxlZnQ7CisgIH0sCisKKyAgcmVsYXRpb25hbDog
ZnVuY3Rpb24oKSB7CisgICAgdmFyIGxlZnQgPSB0aGlzLmFkZGl0aXZlKCk7CisgICAgdmFyIHRv
a2VuOworICAgIHdoaWxlICgodG9rZW4gPSB0aGlzLmV4cGVjdCgnPCcsICc+JywgJzw9JywgJz49
JykpKSB7CisgICAgICBsZWZ0ID0geyB0eXBlOiBBU1QuQmluYXJ5RXhwcmVzc2lvbiwgb3BlcmF0
b3I6IHRva2VuLnRleHQsIGxlZnQ6IGxlZnQsIHJpZ2h0OiB0aGlzLmFkZGl0aXZlKCkgfTsKKyAg
ICB9CisgICAgcmV0dXJuIGxlZnQ7CisgIH0sCisKKyAgYWRkaXRpdmU6IGZ1bmN0aW9uKCkgewor
ICAgIHZhciBsZWZ0ID0gdGhpcy5tdWx0aXBsaWNhdGl2ZSgpOworICAgIHZhciB0b2tlbjsKKyAg
ICB3aGlsZSAoKHRva2VuID0gdGhpcy5leHBlY3QoJysnLCctJykpKSB7CisgICAgICBsZWZ0ID0g
eyB0eXBlOiBBU1QuQmluYXJ5RXhwcmVzc2lvbiwgb3BlcmF0b3I6IHRva2VuLnRleHQsIGxlZnQ6
IGxlZnQsIHJpZ2h0OiB0aGlzLm11bHRpcGxpY2F0aXZlKCkgfTsKKyAgICB9CisgICAgcmV0dXJu
IGxlZnQ7CisgIH0sCisKKyAgbXVsdGlwbGljYXRpdmU6IGZ1bmN0aW9uKCkgeworICAgIHZhciBs
ZWZ0ID0gdGhpcy51bmFyeSgpOworICAgIHZhciB0b2tlbjsKKyAgICB3aGlsZSAoKHRva2VuID0g
dGhpcy5leHBlY3QoJyonLCcvJywnJScpKSkgeworICAgICAgbGVmdCA9IHsgdHlwZTogQVNULkJp
bmFyeUV4cHJlc3Npb24sIG9wZXJhdG9yOiB0b2tlbi50ZXh0LCBsZWZ0OiBsZWZ0LCByaWdodDog
dGhpcy51bmFyeSgpIH07CisgICAgfQorICAgIHJldHVybiBsZWZ0OworICB9LAorCisgIHVuYXJ5
OiBmdW5jdGlvbigpIHsKKyAgICB2YXIgdG9rZW47CisgICAgaWYgKCh0b2tlbiA9IHRoaXMuZXhw
ZWN0KCcrJywgJy0nLCAnIScpKSkgeworICAgICAgcmV0dXJuIHsgdHlwZTogQVNULlVuYXJ5RXhw
cmVzc2lvbiwgb3BlcmF0b3I6IHRva2VuLnRleHQsIHByZWZpeDogdHJ1ZSwgYXJndW1lbnQ6IHRo
aXMudW5hcnkoKSB9OworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gdGhpcy5wcmltYXJ5KCk7
CisgICAgfQorICB9LAorCisgIHByaW1hcnk6IGZ1bmN0aW9uKCkgeworICAgIHZhciBwcmltYXJ5
OworICAgIGlmICh0aGlzLmV4cGVjdCgnKCcpKSB7CisgICAgICBwcmltYXJ5ID0gdGhpcy5maWx0
ZXJDaGFpbigpOworICAgICAgdGhpcy5jb25zdW1lKCcpJyk7CisgICAgfSBlbHNlIGlmICh0aGlz
LmV4cGVjdCgnWycpKSB7CisgICAgICBwcmltYXJ5ID0gdGhpcy5hcnJheURlY2xhcmF0aW9uKCk7
CisgICAgfSBlbHNlIGlmICh0aGlzLmV4cGVjdCgneycpKSB7CisgICAgICBwcmltYXJ5ID0gdGhp
cy5vYmplY3QoKTsKKyAgICB9IGVsc2UgaWYgKHRoaXMuY29uc3RhbnRzLmhhc093blByb3BlcnR5
KHRoaXMucGVlaygpLnRleHQpKSB7CisgICAgICBwcmltYXJ5ID0gY29weSh0aGlzLmNvbnN0YW50
c1t0aGlzLmNvbnN1bWUoKS50ZXh0XSk7CisgICAgfSBlbHNlIGlmICh0aGlzLnBlZWsoKS5pZGVu
dGlmaWVyKSB7CisgICAgICBwcmltYXJ5ID0gdGhpcy5pZGVudGlmaWVyKCk7CisgICAgfSBlbHNl
IGlmICh0aGlzLnBlZWsoKS5jb25zdGFudCkgeworICAgICAgcHJpbWFyeSA9IHRoaXMuY29uc3Rh
bnQoKTsKKyAgICB9IGVsc2UgeworICAgICAgdGhpcy50aHJvd0Vycm9yKCdub3QgYSBwcmltYXJ5
IGV4cHJlc3Npb24nLCB0aGlzLnBlZWsoKSk7CisgICAgfQorCisgICAgdmFyIG5leHQ7CisgICAg
d2hpbGUgKChuZXh0ID0gdGhpcy5leHBlY3QoJygnLCAnWycsICcuJykpKSB7CisgICAgICBpZiAo
bmV4dC50ZXh0ID09PSAnKCcpIHsKKyAgICAgICAgcHJpbWFyeSA9IHt0eXBlOiBBU1QuQ2FsbEV4
cHJlc3Npb24sIGNhbGxlZTogcHJpbWFyeSwgYXJndW1lbnRzOiB0aGlzLnBhcnNlQXJndW1lbnRz
KCkgfTsKKyAgICAgICAgdGhpcy5jb25zdW1lKCcpJyk7CisgICAgICB9IGVsc2UgaWYgKG5leHQu
dGV4dCA9PT0gJ1snKSB7CisgICAgICAgIHByaW1hcnkgPSB7IHR5cGU6IEFTVC5NZW1iZXJFeHBy
ZXNzaW9uLCBvYmplY3Q6IHByaW1hcnksIHByb3BlcnR5OiB0aGlzLmV4cHJlc3Npb24oKSwgY29t
cHV0ZWQ6IHRydWUgfTsKKyAgICAgICAgdGhpcy5jb25zdW1lKCddJyk7CisgICAgICB9IGVsc2Ug
aWYgKG5leHQudGV4dCA9PT0gJy4nKSB7CisgICAgICAgIHByaW1hcnkgPSB7IHR5cGU6IEFTVC5N
ZW1iZXJFeHByZXNzaW9uLCBvYmplY3Q6IHByaW1hcnksIHByb3BlcnR5OiB0aGlzLmlkZW50aWZp
ZXIoKSwgY29tcHV0ZWQ6IGZhbHNlIH07CisgICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLnRo
cm93RXJyb3IoJ0lNUE9TU0lCTEUnKTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHByaW1h
cnk7CisgIH0sCisKKyAgZmlsdGVyOiBmdW5jdGlvbihiYXNlRXhwcmVzc2lvbikgeworICAgIHZh
ciBhcmdzID0gW2Jhc2VFeHByZXNzaW9uXTsKKyAgICB2YXIgcmVzdWx0ID0ge3R5cGU6IEFTVC5D
YWxsRXhwcmVzc2lvbiwgY2FsbGVlOiB0aGlzLmlkZW50aWZpZXIoKSwgYXJndW1lbnRzOiBhcmdz
LCBmaWx0ZXI6IHRydWV9OworCisgICAgd2hpbGUgKHRoaXMuZXhwZWN0KCc6JykpIHsKKyAgICAg
IGFyZ3MucHVzaCh0aGlzLmV4cHJlc3Npb24oKSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgfSwKKworICBwYXJzZUFyZ3VtZW50czogZnVuY3Rpb24oKSB7CisgICAgdmFyIGFyZ3Mg
PSBbXTsKKyAgICBpZiAodGhpcy5wZWVrVG9rZW4oKS50ZXh0ICE9PSAnKScpIHsKKyAgICAgIGRv
IHsKKyAgICAgICAgYXJncy5wdXNoKHRoaXMuZXhwcmVzc2lvbigpKTsKKyAgICAgIH0gd2hpbGUg
KHRoaXMuZXhwZWN0KCcsJykpOworICAgIH0KKyAgICByZXR1cm4gYXJnczsKKyAgfSwKKworICBp
ZGVudGlmaWVyOiBmdW5jdGlvbigpIHsKKyAgICB2YXIgdG9rZW4gPSB0aGlzLmNvbnN1bWUoKTsK
KyAgICBpZiAoIXRva2VuLmlkZW50aWZpZXIpIHsKKyAgICAgIHRoaXMudGhyb3dFcnJvcignaXMg
bm90IGEgdmFsaWQgaWRlbnRpZmllcicsIHRva2VuKTsKKyAgICB9CisgICAgcmV0dXJuIHsgdHlw
ZTogQVNULklkZW50aWZpZXIsIG5hbWU6IHRva2VuLnRleHQgfTsKKyAgfSwKKworICBjb25zdGFu
dDogZnVuY3Rpb24oKSB7CisgICAgLy8gVE9ETyBjaGVjayB0aGF0IGl0IGlzIGEgY29uc3RhbnQK
KyAgICByZXR1cm4geyB0eXBlOiBBU1QuTGl0ZXJhbCwgdmFsdWU6IHRoaXMuY29uc3VtZSgpLnZh
bHVlIH07CisgIH0sCisKKyAgYXJyYXlEZWNsYXJhdGlvbjogZnVuY3Rpb24oKSB7CisgICAgdmFy
IGVsZW1lbnRzID0gW107CisgICAgaWYgKHRoaXMucGVla1Rva2VuKCkudGV4dCAhPT0gJ10nKSB7
CisgICAgICBkbyB7CisgICAgICAgIGlmICh0aGlzLnBlZWsoJ10nKSkgeworICAgICAgICAgIC8v
IFN1cHBvcnQgdHJhaWxpbmcgY29tbWFzIHBlciBFUzUuMS4KKyAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBlbGVtZW50cy5wdXNoKHRoaXMuZXhwcmVzc2lvbigpKTsKKyAgICAg
IH0gd2hpbGUgKHRoaXMuZXhwZWN0KCcsJykpOworICAgIH0KKyAgICB0aGlzLmNvbnN1bWUoJ10n
KTsKKworICAgIHJldHVybiB7IHR5cGU6IEFTVC5BcnJheUV4cHJlc3Npb24sIGVsZW1lbnRzOiBl
bGVtZW50cyB9OworICB9LAorCisgIG9iamVjdDogZnVuY3Rpb24oKSB7CisgICAgdmFyIHByb3Bl
cnRpZXMgPSBbXSwgcHJvcGVydHk7CisgICAgaWYgKHRoaXMucGVla1Rva2VuKCkudGV4dCAhPT0g
J30nKSB7CisgICAgICBkbyB7CisgICAgICAgIGlmICh0aGlzLnBlZWsoJ30nKSkgeworICAgICAg
ICAgIC8vIFN1cHBvcnQgdHJhaWxpbmcgY29tbWFzIHBlciBFUzUuMS4KKyAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBwcm9wZXJ0eSA9IHt0eXBlOiBBU1QuUHJvcGVydHksIGtp
bmQ6ICdpbml0J307CisgICAgICAgIGlmICh0aGlzLnBlZWsoKS5jb25zdGFudCkgeworICAgICAg
ICAgIHByb3BlcnR5LmtleSA9IHRoaXMuY29uc3RhbnQoKTsKKyAgICAgICAgfSBlbHNlIGlmICh0
aGlzLnBlZWsoKS5pZGVudGlmaWVyKSB7CisgICAgICAgICAgcHJvcGVydHkua2V5ID0gdGhpcy5p
ZGVudGlmaWVyKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdGhpcy50aHJvd0Vycm9y
KCJpbnZhbGlkIGtleSIsIHRoaXMucGVlaygpKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLmNv
bnN1bWUoJzonKTsKKyAgICAgICAgcHJvcGVydHkudmFsdWUgPSB0aGlzLmV4cHJlc3Npb24oKTsK
KyAgICAgICAgcHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTsKKyAgICAgIH0gd2hpbGUgKHRoaXMu
ZXhwZWN0KCcsJykpOworICAgIH0KKyAgICB0aGlzLmNvbnN1bWUoJ30nKTsKKworICAgIHJldHVy
biB7dHlwZTogQVNULk9iamVjdEV4cHJlc3Npb24sIHByb3BlcnRpZXM6IHByb3BlcnRpZXMgfTsK
KyAgfSwKKworICB0aHJvd0Vycm9yOiBmdW5jdGlvbihtc2csIHRva2VuKSB7CisgICAgdGhyb3cg
JHBhcnNlTWluRXJyKCdzeW50YXgnLAorICAgICAgICAnU3ludGF4IEVycm9yOiBUb2tlbiBcJ3sw
fVwnIHsxfSBhdCBjb2x1bW4gezJ9IG9mIHRoZSBleHByZXNzaW9uIFt7M31dIHN0YXJ0aW5nIGF0
IFt7NH1dLicsCisgICAgICAgICAgdG9rZW4udGV4dCwgbXNnLCAodG9rZW4uaW5kZXggKyAxKSwg
dGhpcy50ZXh0LCB0aGlzLnRleHQuc3Vic3RyaW5nKHRva2VuLmluZGV4KSk7CisgIH0sCisKKyAg
Y29uc3VtZTogZnVuY3Rpb24oZTEpIHsKKyAgICBpZiAodGhpcy50b2tlbnMubGVuZ3RoID09PSAw
KSB7CisgICAgICB0aHJvdyAkcGFyc2VNaW5FcnIoJ3Vlb2UnLCAnVW5leHBlY3RlZCBlbmQgb2Yg
ZXhwcmVzc2lvbjogezB9JywgdGhpcy50ZXh0KTsKKyAgICB9CisKKyAgICB2YXIgdG9rZW4gPSB0
aGlzLmV4cGVjdChlMSk7CisgICAgaWYgKCF0b2tlbikgeworICAgICAgdGhpcy50aHJvd0Vycm9y
KCdpcyB1bmV4cGVjdGVkLCBleHBlY3RpbmcgWycgKyBlMSArICddJywgdGhpcy5wZWVrKCkpOwor
ICAgIH0KKyAgICByZXR1cm4gdG9rZW47CisgIH0sCisKKyAgcGVla1Rva2VuOiBmdW5jdGlvbigp
IHsKKyAgICBpZiAodGhpcy50b2tlbnMubGVuZ3RoID09PSAwKSB7CisgICAgICB0aHJvdyAkcGFy
c2VNaW5FcnIoJ3Vlb2UnLCAnVW5leHBlY3RlZCBlbmQgb2YgZXhwcmVzc2lvbjogezB9JywgdGhp
cy50ZXh0KTsKKyAgICB9CisgICAgcmV0dXJuIHRoaXMudG9rZW5zWzBdOworICB9LAorCisgIHBl
ZWs6IGZ1bmN0aW9uKGUxLCBlMiwgZTMsIGU0KSB7CisgICAgcmV0dXJuIHRoaXMucGVla0FoZWFk
KDAsIGUxLCBlMiwgZTMsIGU0KTsKKyAgfSwKKworICBwZWVrQWhlYWQ6IGZ1bmN0aW9uKGksIGUx
LCBlMiwgZTMsIGU0KSB7CisgICAgaWYgKHRoaXMudG9rZW5zLmxlbmd0aCA+IGkpIHsKKyAgICAg
IHZhciB0b2tlbiA9IHRoaXMudG9rZW5zW2ldOworICAgICAgdmFyIHQgPSB0b2tlbi50ZXh0Owor
ICAgICAgaWYgKHQgPT09IGUxIHx8IHQgPT09IGUyIHx8IHQgPT09IGUzIHx8IHQgPT09IGU0IHx8
CisgICAgICAgICAgKCFlMSAmJiAhZTIgJiYgIWUzICYmICFlNCkpIHsKKyAgICAgICAgcmV0dXJu
IHRva2VuOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH0sCisKKyAgZXhw
ZWN0OiBmdW5jdGlvbihlMSwgZTIsIGUzLCBlNCkgeworICAgIHZhciB0b2tlbiA9IHRoaXMucGVl
ayhlMSwgZTIsIGUzLCBlNCk7CisgICAgaWYgKHRva2VuKSB7CisgICAgICB0aGlzLnRva2Vucy5z
aGlmdCgpOworICAgICAgcmV0dXJuIHRva2VuOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cisg
IH0sCisKKworICAvKiBgdW5kZWZpbmVkYCBpcyBub3QgYSBjb25zdGFudCwgaXQgaXMgYW4gaWRl
bnRpZmllciwKKyAgICogYnV0IHVzaW5nIGl0IGFzIGFuIGlkZW50aWZpZXIgaXMgbm90IHN1cHBv
cnRlZAorICAgKi8KKyAgY29uc3RhbnRzOiB7CisgICAgJ3RydWUnOiB7IHR5cGU6IEFTVC5MaXRl
cmFsLCB2YWx1ZTogdHJ1ZSB9LAorICAgICdmYWxzZSc6IHsgdHlwZTogQVNULkxpdGVyYWwsIHZh
bHVlOiBmYWxzZSB9LAorICAgICdudWxsJzogeyB0eXBlOiBBU1QuTGl0ZXJhbCwgdmFsdWU6IG51
bGwgfSwKKyAgICAndW5kZWZpbmVkJzoge3R5cGU6IEFTVC5MaXRlcmFsLCB2YWx1ZTogdW5kZWZp
bmVkIH0sCisgICAgJ3RoaXMnOiB7dHlwZTogQVNULlRoaXNFeHByZXNzaW9uIH0KKyAgfQorfTsK
KworZnVuY3Rpb24gaWZEZWZpbmVkKHYsIGQpIHsKKyAgcmV0dXJuIHR5cGVvZiB2ICE9PSAndW5k
ZWZpbmVkJyA/IHYgOiBkOworfQorCitmdW5jdGlvbiBwbHVzRm4obCwgcikgeworICBpZiAodHlw
ZW9mIGwgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gcjsKKyAgaWYgKHR5cGVvZiByID09PSAndW5k
ZWZpbmVkJykgcmV0dXJuIGw7CisgIHJldHVybiBsICsgcjsKK30KKworZnVuY3Rpb24gaXNTdGF0
ZWxlc3MoJGZpbHRlciwgZmlsdGVyTmFtZSkgeworICB2YXIgZm4gPSAkZmlsdGVyKGZpbHRlck5h
bWUpOworICByZXR1cm4gIWZuLiRzdGF0ZWZ1bDsKK30KKworZnVuY3Rpb24gZmluZENvbnN0YW50
QW5kV2F0Y2hFeHByZXNzaW9ucyhhc3QsICRmaWx0ZXIpIHsKKyAgdmFyIGFsbENvbnN0YW50czsK
KyAgdmFyIGFyZ3NUb1dhdGNoOworICBzd2l0Y2ggKGFzdC50eXBlKSB7CisgIGNhc2UgQVNULlBy
b2dyYW06CisgICAgYWxsQ29uc3RhbnRzID0gdHJ1ZTsKKyAgICBmb3JFYWNoKGFzdC5ib2R5LCBm
dW5jdGlvbihleHByKSB7CisgICAgICBmaW5kQ29uc3RhbnRBbmRXYXRjaEV4cHJlc3Npb25zKGV4
cHIuZXhwcmVzc2lvbiwgJGZpbHRlcik7CisgICAgICBhbGxDb25zdGFudHMgPSBhbGxDb25zdGFu
dHMgJiYgZXhwci5leHByZXNzaW9uLmNvbnN0YW50OworICAgIH0pOworICAgIGFzdC5jb25zdGFu
dCA9IGFsbENvbnN0YW50czsKKyAgICBicmVhazsKKyAgY2FzZSBBU1QuTGl0ZXJhbDoKKyAgICBh
c3QuY29uc3RhbnQgPSB0cnVlOworICAgIGFzdC50b1dhdGNoID0gW107CisgICAgYnJlYWs7Cisg
IGNhc2UgQVNULlVuYXJ5RXhwcmVzc2lvbjoKKyAgICBmaW5kQ29uc3RhbnRBbmRXYXRjaEV4cHJl
c3Npb25zKGFzdC5hcmd1bWVudCwgJGZpbHRlcik7CisgICAgYXN0LmNvbnN0YW50ID0gYXN0LmFy
Z3VtZW50LmNvbnN0YW50OworICAgIGFzdC50b1dhdGNoID0gYXN0LmFyZ3VtZW50LnRvV2F0Y2g7
CisgICAgYnJlYWs7CisgIGNhc2UgQVNULkJpbmFyeUV4cHJlc3Npb246CisgICAgZmluZENvbnN0
YW50QW5kV2F0Y2hFeHByZXNzaW9ucyhhc3QubGVmdCwgJGZpbHRlcik7CisgICAgZmluZENvbnN0
YW50QW5kV2F0Y2hFeHByZXNzaW9ucyhhc3QucmlnaHQsICRmaWx0ZXIpOworICAgIGFzdC5jb25z
dGFudCA9IGFzdC5sZWZ0LmNvbnN0YW50ICYmIGFzdC5yaWdodC5jb25zdGFudDsKKyAgICBhc3Qu
dG9XYXRjaCA9IGFzdC5sZWZ0LnRvV2F0Y2guY29uY2F0KGFzdC5yaWdodC50b1dhdGNoKTsKKyAg
ICBicmVhazsKKyAgY2FzZSBBU1QuTG9naWNhbEV4cHJlc3Npb246CisgICAgZmluZENvbnN0YW50
QW5kV2F0Y2hFeHByZXNzaW9ucyhhc3QubGVmdCwgJGZpbHRlcik7CisgICAgZmluZENvbnN0YW50
QW5kV2F0Y2hFeHByZXNzaW9ucyhhc3QucmlnaHQsICRmaWx0ZXIpOworICAgIGFzdC5jb25zdGFu
dCA9IGFzdC5sZWZ0LmNvbnN0YW50ICYmIGFzdC5yaWdodC5jb25zdGFudDsKKyAgICBhc3QudG9X
YXRjaCA9IGFzdC5jb25zdGFudCA/IFtdIDogW2FzdF07CisgICAgYnJlYWs7CisgIGNhc2UgQVNU
LkNvbmRpdGlvbmFsRXhwcmVzc2lvbjoKKyAgICBmaW5kQ29uc3RhbnRBbmRXYXRjaEV4cHJlc3Np
b25zKGFzdC50ZXN0LCAkZmlsdGVyKTsKKyAgICBmaW5kQ29uc3RhbnRBbmRXYXRjaEV4cHJlc3Np
b25zKGFzdC5hbHRlcm5hdGUsICRmaWx0ZXIpOworICAgIGZpbmRDb25zdGFudEFuZFdhdGNoRXhw
cmVzc2lvbnMoYXN0LmNvbnNlcXVlbnQsICRmaWx0ZXIpOworICAgIGFzdC5jb25zdGFudCA9IGFz
dC50ZXN0LmNvbnN0YW50ICYmIGFzdC5hbHRlcm5hdGUuY29uc3RhbnQgJiYgYXN0LmNvbnNlcXVl
bnQuY29uc3RhbnQ7CisgICAgYXN0LnRvV2F0Y2ggPSBhc3QuY29uc3RhbnQgPyBbXSA6IFthc3Rd
OworICAgIGJyZWFrOworICBjYXNlIEFTVC5JZGVudGlmaWVyOgorICAgIGFzdC5jb25zdGFudCA9
IGZhbHNlOworICAgIGFzdC50b1dhdGNoID0gW2FzdF07CisgICAgYnJlYWs7CisgIGNhc2UgQVNU
Lk1lbWJlckV4cHJlc3Npb246CisgICAgZmluZENvbnN0YW50QW5kV2F0Y2hFeHByZXNzaW9ucyhh
c3Qub2JqZWN0LCAkZmlsdGVyKTsKKyAgICBpZiAoYXN0LmNvbXB1dGVkKSB7CisgICAgICBmaW5k
Q29uc3RhbnRBbmRXYXRjaEV4cHJlc3Npb25zKGFzdC5wcm9wZXJ0eSwgJGZpbHRlcik7CisgICAg
fQorICAgIGFzdC5jb25zdGFudCA9IGFzdC5vYmplY3QuY29uc3RhbnQgJiYgKCFhc3QuY29tcHV0
ZWQgfHwgYXN0LnByb3BlcnR5LmNvbnN0YW50KTsKKyAgICBhc3QudG9XYXRjaCA9IFthc3RdOwor
ICAgIGJyZWFrOworICBjYXNlIEFTVC5DYWxsRXhwcmVzc2lvbjoKKyAgICBhbGxDb25zdGFudHMg
PSBhc3QuZmlsdGVyID8gaXNTdGF0ZWxlc3MoJGZpbHRlciwgYXN0LmNhbGxlZS5uYW1lKSA6IGZh
bHNlOworICAgIGFyZ3NUb1dhdGNoID0gW107CisgICAgZm9yRWFjaChhc3QuYXJndW1lbnRzLCBm
dW5jdGlvbihleHByKSB7CisgICAgICBmaW5kQ29uc3RhbnRBbmRXYXRjaEV4cHJlc3Npb25zKGV4
cHIsICRmaWx0ZXIpOworICAgICAgYWxsQ29uc3RhbnRzID0gYWxsQ29uc3RhbnRzICYmIGV4cHIu
Y29uc3RhbnQ7CisgICAgICBpZiAoIWV4cHIuY29uc3RhbnQpIHsKKyAgICAgICAgYXJnc1RvV2F0
Y2gucHVzaC5hcHBseShhcmdzVG9XYXRjaCwgZXhwci50b1dhdGNoKTsKKyAgICAgIH0KKyAgICB9
KTsKKyAgICBhc3QuY29uc3RhbnQgPSBhbGxDb25zdGFudHM7CisgICAgYXN0LnRvV2F0Y2ggPSBh
c3QuZmlsdGVyICYmIGlzU3RhdGVsZXNzKCRmaWx0ZXIsIGFzdC5jYWxsZWUubmFtZSkgPyBhcmdz
VG9XYXRjaCA6IFthc3RdOworICAgIGJyZWFrOworICBjYXNlIEFTVC5Bc3NpZ25tZW50RXhwcmVz
c2lvbjoKKyAgICBmaW5kQ29uc3RhbnRBbmRXYXRjaEV4cHJlc3Npb25zKGFzdC5sZWZ0LCAkZmls
dGVyKTsKKyAgICBmaW5kQ29uc3RhbnRBbmRXYXRjaEV4cHJlc3Npb25zKGFzdC5yaWdodCwgJGZp
bHRlcik7CisgICAgYXN0LmNvbnN0YW50ID0gYXN0LmxlZnQuY29uc3RhbnQgJiYgYXN0LnJpZ2h0
LmNvbnN0YW50OworICAgIGFzdC50b1dhdGNoID0gW2FzdF07CisgICAgYnJlYWs7CisgIGNhc2Ug
QVNULkFycmF5RXhwcmVzc2lvbjoKKyAgICBhbGxDb25zdGFudHMgPSB0cnVlOworICAgIGFyZ3NU
b1dhdGNoID0gW107CisgICAgZm9yRWFjaChhc3QuZWxlbWVudHMsIGZ1bmN0aW9uKGV4cHIpIHsK
KyAgICAgIGZpbmRDb25zdGFudEFuZFdhdGNoRXhwcmVzc2lvbnMoZXhwciwgJGZpbHRlcik7Cisg
ICAgICBhbGxDb25zdGFudHMgPSBhbGxDb25zdGFudHMgJiYgZXhwci5jb25zdGFudDsKKyAgICAg
IGlmICghZXhwci5jb25zdGFudCkgeworICAgICAgICBhcmdzVG9XYXRjaC5wdXNoLmFwcGx5KGFy
Z3NUb1dhdGNoLCBleHByLnRvV2F0Y2gpOworICAgICAgfQorICAgIH0pOworICAgIGFzdC5jb25z
dGFudCA9IGFsbENvbnN0YW50czsKKyAgICBhc3QudG9XYXRjaCA9IGFyZ3NUb1dhdGNoOworICAg
IGJyZWFrOworICBjYXNlIEFTVC5PYmplY3RFeHByZXNzaW9uOgorICAgIGFsbENvbnN0YW50cyA9
IHRydWU7CisgICAgYXJnc1RvV2F0Y2ggPSBbXTsKKyAgICBmb3JFYWNoKGFzdC5wcm9wZXJ0aWVz
LCBmdW5jdGlvbihwcm9wZXJ0eSkgeworICAgICAgZmluZENvbnN0YW50QW5kV2F0Y2hFeHByZXNz
aW9ucyhwcm9wZXJ0eS52YWx1ZSwgJGZpbHRlcik7CisgICAgICBhbGxDb25zdGFudHMgPSBhbGxD
b25zdGFudHMgJiYgcHJvcGVydHkudmFsdWUuY29uc3RhbnQ7CisgICAgICBpZiAoIXByb3BlcnR5
LnZhbHVlLmNvbnN0YW50KSB7CisgICAgICAgIGFyZ3NUb1dhdGNoLnB1c2guYXBwbHkoYXJnc1Rv
V2F0Y2gsIHByb3BlcnR5LnZhbHVlLnRvV2F0Y2gpOworICAgICAgfQorICAgIH0pOworICAgIGFz
dC5jb25zdGFudCA9IGFsbENvbnN0YW50czsKKyAgICBhc3QudG9XYXRjaCA9IGFyZ3NUb1dhdGNo
OworICAgIGJyZWFrOworICBjYXNlIEFTVC5UaGlzRXhwcmVzc2lvbjoKKyAgICBhc3QuY29uc3Rh
bnQgPSBmYWxzZTsKKyAgICBhc3QudG9XYXRjaCA9IFtdOworICAgIGJyZWFrOworICB9Cit9CisK
K2Z1bmN0aW9uIGdldElucHV0cyhib2R5KSB7CisgIGlmIChib2R5Lmxlbmd0aCAhPSAxKSByZXR1
cm47CisgIHZhciBsYXN0RXhwcmVzc2lvbiA9IGJvZHlbMF0uZXhwcmVzc2lvbjsKKyAgdmFyIGNh
bmRpZGF0ZSA9IGxhc3RFeHByZXNzaW9uLnRvV2F0Y2g7CisgIGlmIChjYW5kaWRhdGUubGVuZ3Ro
ICE9PSAxKSByZXR1cm4gY2FuZGlkYXRlOworICByZXR1cm4gY2FuZGlkYXRlWzBdICE9PSBsYXN0
RXhwcmVzc2lvbiA/IGNhbmRpZGF0ZSA6IHVuZGVmaW5lZDsKK30KKworZnVuY3Rpb24gaXNBc3Np
Z25hYmxlKGFzdCkgeworICByZXR1cm4gYXN0LnR5cGUgPT09IEFTVC5JZGVudGlmaWVyIHx8IGFz
dC50eXBlID09PSBBU1QuTWVtYmVyRXhwcmVzc2lvbjsKK30KKworZnVuY3Rpb24gYXNzaWduYWJs
ZUFTVChhc3QpIHsKKyAgaWYgKGFzdC5ib2R5Lmxlbmd0aCA9PT0gMSAmJiBpc0Fzc2lnbmFibGUo
YXN0LmJvZHlbMF0uZXhwcmVzc2lvbikpIHsKKyAgICByZXR1cm4ge3R5cGU6IEFTVC5Bc3NpZ25t
ZW50RXhwcmVzc2lvbiwgbGVmdDogYXN0LmJvZHlbMF0uZXhwcmVzc2lvbiwgcmlnaHQ6IHt0eXBl
OiBBU1QuTkdWYWx1ZVBhcmFtZXRlcn0sIG9wZXJhdG9yOiAnPSd9OworICB9Cit9CisKK2Z1bmN0
aW9uIGlzTGl0ZXJhbChhc3QpIHsKKyAgcmV0dXJuIGFzdC5ib2R5Lmxlbmd0aCA9PT0gMCB8fAor
ICAgICAgYXN0LmJvZHkubGVuZ3RoID09PSAxICYmICgKKyAgICAgIGFzdC5ib2R5WzBdLmV4cHJl
c3Npb24udHlwZSA9PT0gQVNULkxpdGVyYWwgfHwKKyAgICAgIGFzdC5ib2R5WzBdLmV4cHJlc3Np
b24udHlwZSA9PT0gQVNULkFycmF5RXhwcmVzc2lvbiB8fAorICAgICAgYXN0LmJvZHlbMF0uZXhw
cmVzc2lvbi50eXBlID09PSBBU1QuT2JqZWN0RXhwcmVzc2lvbik7Cit9CisKK2Z1bmN0aW9uIGlz
Q29uc3RhbnQoYXN0KSB7CisgIHJldHVybiBhc3QuY29uc3RhbnQ7Cit9CisKK2Z1bmN0aW9uIEFT
VENvbXBpbGVyKGFzdEJ1aWxkZXIsICRmaWx0ZXIpIHsKKyAgdGhpcy5hc3RCdWlsZGVyID0gYXN0
QnVpbGRlcjsKKyAgdGhpcy4kZmlsdGVyID0gJGZpbHRlcjsKK30KKworQVNUQ29tcGlsZXIucHJv
dG90eXBlID0geworICBjb21waWxlOiBmdW5jdGlvbihleHByZXNzaW9uLCBleHBlbnNpdmVDaGVj
a3MpIHsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgdmFyIGFzdCA9IHRoaXMuYXN0QnVpbGRl
ci5hc3QoZXhwcmVzc2lvbik7CisgICAgdGhpcy5zdGF0ZSA9IHsKKyAgICAgIG5leHRJZDogMCwK
KyAgICAgIGZpbHRlcnM6IHt9LAorICAgICAgZXhwZW5zaXZlQ2hlY2tzOiBleHBlbnNpdmVDaGVj
a3MsCisgICAgICBmbjoge3ZhcnM6IFtdLCBib2R5OiBbXSwgb3duOiB7fX0sCisgICAgICBhc3Np
Z246IHt2YXJzOiBbXSwgYm9keTogW10sIG93bjoge319LAorICAgICAgaW5wdXRzOiBbXQorICAg
IH07CisgICAgZmluZENvbnN0YW50QW5kV2F0Y2hFeHByZXNzaW9ucyhhc3QsIHNlbGYuJGZpbHRl
cik7CisgICAgdmFyIGV4dHJhID0gJyc7CisgICAgdmFyIGFzc2lnbmFibGU7CisgICAgdGhpcy5z
dGFnZSA9ICdhc3NpZ24nOworICAgIGlmICgoYXNzaWduYWJsZSA9IGFzc2lnbmFibGVBU1QoYXN0
KSkpIHsKKyAgICAgIHRoaXMuc3RhdGUuY29tcHV0aW5nID0gJ2Fzc2lnbic7CisgICAgICB2YXIg
cmVzdWx0ID0gdGhpcy5uZXh0SWQoKTsKKyAgICAgIHRoaXMucmVjdXJzZShhc3NpZ25hYmxlLCBy
ZXN1bHQpOworICAgICAgZXh0cmEgPSAnZm4uYXNzaWduPScgKyB0aGlzLmdlbmVyYXRlRnVuY3Rp
b24oJ2Fzc2lnbicsICdzLHYsbCcpOworICAgIH0KKyAgICB2YXIgdG9XYXRjaCA9IGdldElucHV0
cyhhc3QuYm9keSk7CisgICAgc2VsZi5zdGFnZSA9ICdpbnB1dHMnOworICAgIGZvckVhY2godG9X
YXRjaCwgZnVuY3Rpb24od2F0Y2gsIGtleSkgeworICAgICAgdmFyIGZuS2V5ID0gJ2ZuJyArIGtl
eTsKKyAgICAgIHNlbGYuc3RhdGVbZm5LZXldID0ge3ZhcnM6IFtdLCBib2R5OiBbXSwgb3duOiB7
fX07CisgICAgICBzZWxmLnN0YXRlLmNvbXB1dGluZyA9IGZuS2V5OworICAgICAgdmFyIGludG9J
ZCA9IHNlbGYubmV4dElkKCk7CisgICAgICBzZWxmLnJlY3Vyc2Uod2F0Y2gsIGludG9JZCk7Cisg
ICAgICBzZWxmLnJldHVybl8oaW50b0lkKTsKKyAgICAgIHNlbGYuc3RhdGUuaW5wdXRzLnB1c2go
Zm5LZXkpOworICAgICAgd2F0Y2gud2F0Y2hJZCA9IGtleTsKKyAgICB9KTsKKyAgICB0aGlzLnN0
YXRlLmNvbXB1dGluZyA9ICdmbic7CisgICAgdGhpcy5zdGFnZSA9ICdtYWluJzsKKyAgICB0aGlz
LnJlY3Vyc2UoYXN0KTsKKyAgICB2YXIgZm5TdHJpbmcgPQorICAgICAgLy8gVGhlIGJ1aWxkIGFu
ZCBtaW5pZmljYXRpb24gc3RlcHMgcmVtb3ZlIHRoZSBzdHJpbmcgInVzZSBzdHJpY3QiIGZyb20g
dGhlIGNvZGUsIGJ1dCB0aGlzIGlzIGRvbmUgdXNpbmcgYSByZWdleC4KKyAgICAgIC8vIFRoaXMg
aXMgYSB3b3JrYXJvdW5kIGZvciB0aGlzIHVudGlsIHdlIGRvIGEgYmV0dGVyIGpvYiBhdCBvbmx5
IHJlbW92aW5nIHRoZSBwcmVmaXggb25seSB3aGVuIHdlIHNob3VsZC4KKyAgICAgICciJyArIHRo
aXMuVVNFICsgJyAnICsgdGhpcy5TVFJJQ1QgKyAnIjtcbicgKworICAgICAgdGhpcy5maWx0ZXJQ
cmVmaXgoKSArCisgICAgICAndmFyIGZuPScgKyB0aGlzLmdlbmVyYXRlRnVuY3Rpb24oJ2ZuJywg
J3MsbCxhLGknKSArCisgICAgICBleHRyYSArCisgICAgICB0aGlzLndhdGNoRm5zKCkgKworICAg
ICAgJ3JldHVybiBmbjsnOworCisgICAgLyoganNoaW50IC1XMDU0ICovCisgICAgdmFyIGZuID0g
KG5ldyBGdW5jdGlvbignJGZpbHRlcicsCisgICAgICAgICdlbnN1cmVTYWZlTWVtYmVyTmFtZScs
CisgICAgICAgICdlbnN1cmVTYWZlT2JqZWN0JywKKyAgICAgICAgJ2Vuc3VyZVNhZmVGdW5jdGlv
bicsCisgICAgICAgICdpZkRlZmluZWQnLAorICAgICAgICAncGx1cycsCisgICAgICAgICd0ZXh0
JywKKyAgICAgICAgZm5TdHJpbmcpKSgKKyAgICAgICAgICB0aGlzLiRmaWx0ZXIsCisgICAgICAg
ICAgZW5zdXJlU2FmZU1lbWJlck5hbWUsCisgICAgICAgICAgZW5zdXJlU2FmZU9iamVjdCwKKyAg
ICAgICAgICBlbnN1cmVTYWZlRnVuY3Rpb24sCisgICAgICAgICAgaWZEZWZpbmVkLAorICAgICAg
ICAgIHBsdXNGbiwKKyAgICAgICAgICBleHByZXNzaW9uKTsKKyAgICAvKiBqc2hpbnQgK1cwNTQg
Ki8KKyAgICB0aGlzLnN0YXRlID0gdGhpcy5zdGFnZSA9IHVuZGVmaW5lZDsKKyAgICBmbi5saXRl
cmFsID0gaXNMaXRlcmFsKGFzdCk7CisgICAgZm4uY29uc3RhbnQgPSBpc0NvbnN0YW50KGFzdCk7
CisgICAgcmV0dXJuIGZuOworICB9LAorCisgIFVTRTogJ3VzZScsCisKKyAgU1RSSUNUOiAnc3Ry
aWN0JywKKworICB3YXRjaEZuczogZnVuY3Rpb24oKSB7CisgICAgdmFyIHJlc3VsdCA9IFtdOwor
ICAgIHZhciBmbnMgPSB0aGlzLnN0YXRlLmlucHV0czsKKyAgICB2YXIgc2VsZiA9IHRoaXM7Cisg
ICAgZm9yRWFjaChmbnMsIGZ1bmN0aW9uKG5hbWUpIHsKKyAgICAgIHJlc3VsdC5wdXNoKCd2YXIg
JyArIG5hbWUgKyAnPScgKyBzZWxmLmdlbmVyYXRlRnVuY3Rpb24obmFtZSwgJ3MnKSk7CisgICAg
fSk7CisgICAgaWYgKGZucy5sZW5ndGgpIHsKKyAgICAgIHJlc3VsdC5wdXNoKCdmbi5pbnB1dHM9
WycgKyBmbnMuam9pbignLCcpICsgJ107Jyk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQuam9p
bignJyk7CisgIH0sCisKKyAgZ2VuZXJhdGVGdW5jdGlvbjogZnVuY3Rpb24obmFtZSwgcGFyYW1z
KSB7CisgICAgcmV0dXJuICdmdW5jdGlvbignICsgcGFyYW1zICsgJyl7JyArCisgICAgICAgIHRo
aXMudmFyc1ByZWZpeChuYW1lKSArCisgICAgICAgIHRoaXMuYm9keShuYW1lKSArCisgICAgICAg
ICd9Oyc7CisgIH0sCisKKyAgZmlsdGVyUHJlZml4OiBmdW5jdGlvbigpIHsKKyAgICB2YXIgcGFy
dHMgPSBbXTsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgZm9yRWFjaCh0aGlzLnN0YXRlLmZp
bHRlcnMsIGZ1bmN0aW9uKGlkLCBmaWx0ZXIpIHsKKyAgICAgIHBhcnRzLnB1c2goaWQgKyAnPSRm
aWx0ZXIoJyArIHNlbGYuZXNjYXBlKGZpbHRlcikgKyAnKScpOworICAgIH0pOworICAgIGlmIChw
YXJ0cy5sZW5ndGgpIHJldHVybiAndmFyICcgKyBwYXJ0cy5qb2luKCcsJykgKyAnOyc7CisgICAg
cmV0dXJuICcnOworICB9LAorCisgIHZhcnNQcmVmaXg6IGZ1bmN0aW9uKHNlY3Rpb24pIHsKKyAg
ICByZXR1cm4gdGhpcy5zdGF0ZVtzZWN0aW9uXS52YXJzLmxlbmd0aCA/ICd2YXIgJyArIHRoaXMu
c3RhdGVbc2VjdGlvbl0udmFycy5qb2luKCcsJykgKyAnOycgOiAnJzsKKyAgfSwKKworICBib2R5
OiBmdW5jdGlvbihzZWN0aW9uKSB7CisgICAgcmV0dXJuIHRoaXMuc3RhdGVbc2VjdGlvbl0uYm9k
eS5qb2luKCcnKTsKKyAgfSwKKworICByZWN1cnNlOiBmdW5jdGlvbihhc3QsIGludG9JZCwgbmFt
ZUlkLCByZWN1cnNpb25GbiwgY3JlYXRlLCBza2lwV2F0Y2hJZENoZWNrKSB7CisgICAgdmFyIGxl
ZnQsIHJpZ2h0LCBzZWxmID0gdGhpcywgYXJncywgZXhwcmVzc2lvbjsKKyAgICByZWN1cnNpb25G
biA9IHJlY3Vyc2lvbkZuIHx8IG5vb3A7CisgICAgaWYgKCFza2lwV2F0Y2hJZENoZWNrICYmIGlz
RGVmaW5lZChhc3Qud2F0Y2hJZCkpIHsKKyAgICAgIGludG9JZCA9IGludG9JZCB8fCB0aGlzLm5l
eHRJZCgpOworICAgICAgdGhpcy5pZl8oJ2knLAorICAgICAgICB0aGlzLmxhenlBc3NpZ24oaW50
b0lkLCB0aGlzLmNvbXB1dGVkTWVtYmVyKCdpJywgYXN0LndhdGNoSWQpKSwKKyAgICAgICAgdGhp
cy5sYXp5UmVjdXJzZShhc3QsIGludG9JZCwgbmFtZUlkLCByZWN1cnNpb25GbiwgY3JlYXRlLCB0
cnVlKQorICAgICAgKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgc3dpdGNoIChhc3QudHlw
ZSkgeworICAgIGNhc2UgQVNULlByb2dyYW06CisgICAgICBmb3JFYWNoKGFzdC5ib2R5LCBmdW5j
dGlvbihleHByZXNzaW9uLCBwb3MpIHsKKyAgICAgICAgc2VsZi5yZWN1cnNlKGV4cHJlc3Npb24u
ZXhwcmVzc2lvbiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZ1bmN0aW9uKGV4cHIpIHsgcmlnaHQg
PSBleHByOyB9KTsKKyAgICAgICAgaWYgKHBvcyAhPT0gYXN0LmJvZHkubGVuZ3RoIC0gMSkgewor
ICAgICAgICAgIHNlbGYuY3VycmVudCgpLmJvZHkucHVzaChyaWdodCwgJzsnKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICBzZWxmLnJldHVybl8ocmlnaHQpOworICAgICAgICB9CisgICAg
ICB9KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQVNULkxpdGVyYWw6CisgICAgICBleHByZXNz
aW9uID0gdGhpcy5lc2NhcGUoYXN0LnZhbHVlKTsKKyAgICAgIHRoaXMuYXNzaWduKGludG9JZCwg
ZXhwcmVzc2lvbik7CisgICAgICByZWN1cnNpb25GbihleHByZXNzaW9uKTsKKyAgICAgIGJyZWFr
OworICAgIGNhc2UgQVNULlVuYXJ5RXhwcmVzc2lvbjoKKyAgICAgIHRoaXMucmVjdXJzZShhc3Qu
YXJndW1lbnQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbihleHByKSB7IHJpZ2h0ID0g
ZXhwcjsgfSk7CisgICAgICBleHByZXNzaW9uID0gYXN0Lm9wZXJhdG9yICsgJygnICsgdGhpcy5p
ZkRlZmluZWQocmlnaHQsIDApICsgJyknOworICAgICAgdGhpcy5hc3NpZ24oaW50b0lkLCBleHBy
ZXNzaW9uKTsKKyAgICAgIHJlY3Vyc2lvbkZuKGV4cHJlc3Npb24pOworICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBU1QuQmluYXJ5RXhwcmVzc2lvbjoKKyAgICAgIHRoaXMucmVjdXJzZShhc3QubGVm
dCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZ1bmN0aW9uKGV4cHIpIHsgbGVmdCA9IGV4cHI7IH0p
OworICAgICAgdGhpcy5yZWN1cnNlKGFzdC5yaWdodCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZ1
bmN0aW9uKGV4cHIpIHsgcmlnaHQgPSBleHByOyB9KTsKKyAgICAgIGlmIChhc3Qub3BlcmF0b3Ig
PT09ICcrJykgeworICAgICAgICBleHByZXNzaW9uID0gdGhpcy5wbHVzKGxlZnQsIHJpZ2h0KTsK
KyAgICAgIH0gZWxzZSBpZiAoYXN0Lm9wZXJhdG9yID09PSAnLScpIHsKKyAgICAgICAgZXhwcmVz
c2lvbiA9IHRoaXMuaWZEZWZpbmVkKGxlZnQsIDApICsgYXN0Lm9wZXJhdG9yICsgdGhpcy5pZkRl
ZmluZWQocmlnaHQsIDApOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZXhwcmVzc2lvbiA9ICco
JyArIGxlZnQgKyAnKScgKyBhc3Qub3BlcmF0b3IgKyAnKCcgKyByaWdodCArICcpJzsKKyAgICAg
IH0KKyAgICAgIHRoaXMuYXNzaWduKGludG9JZCwgZXhwcmVzc2lvbik7CisgICAgICByZWN1cnNp
b25GbihleHByZXNzaW9uKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQVNULkxvZ2ljYWxFeHBy
ZXNzaW9uOgorICAgICAgaW50b0lkID0gaW50b0lkIHx8IHRoaXMubmV4dElkKCk7CisgICAgICBz
ZWxmLnJlY3Vyc2UoYXN0LmxlZnQsIGludG9JZCk7CisgICAgICBzZWxmLmlmXyhhc3Qub3BlcmF0
b3IgPT09ICcmJicgPyBpbnRvSWQgOiBzZWxmLm5vdChpbnRvSWQpLCBzZWxmLmxhenlSZWN1cnNl
KGFzdC5yaWdodCwgaW50b0lkKSk7CisgICAgICByZWN1cnNpb25GbihpbnRvSWQpOworICAgICAg
YnJlYWs7CisgICAgY2FzZSBBU1QuQ29uZGl0aW9uYWxFeHByZXNzaW9uOgorICAgICAgaW50b0lk
ID0gaW50b0lkIHx8IHRoaXMubmV4dElkKCk7CisgICAgICBzZWxmLnJlY3Vyc2UoYXN0LnRlc3Qs
IGludG9JZCk7CisgICAgICBzZWxmLmlmXyhpbnRvSWQsIHNlbGYubGF6eVJlY3Vyc2UoYXN0LmFs
dGVybmF0ZSwgaW50b0lkKSwgc2VsZi5sYXp5UmVjdXJzZShhc3QuY29uc2VxdWVudCwgaW50b0lk
KSk7CisgICAgICByZWN1cnNpb25GbihpbnRvSWQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBB
U1QuSWRlbnRpZmllcjoKKyAgICAgIGludG9JZCA9IGludG9JZCB8fCB0aGlzLm5leHRJZCgpOwor
ICAgICAgaWYgKG5hbWVJZCkgeworICAgICAgICBuYW1lSWQuY29udGV4dCA9IHNlbGYuc3RhZ2Ug
PT09ICdpbnB1dHMnID8gJ3MnIDogdGhpcy5hc3NpZ24odGhpcy5uZXh0SWQoKSwgdGhpcy5nZXRI
YXNPd25Qcm9wZXJ0eSgnbCcsIGFzdC5uYW1lKSArICc/bDpzJyk7CisgICAgICAgIG5hbWVJZC5j
b21wdXRlZCA9IGZhbHNlOworICAgICAgICBuYW1lSWQubmFtZSA9IGFzdC5uYW1lOworICAgICAg
fQorICAgICAgZW5zdXJlU2FmZU1lbWJlck5hbWUoYXN0Lm5hbWUpOworICAgICAgc2VsZi5pZl8o
c2VsZi5zdGFnZSA9PT0gJ2lucHV0cycgfHwgc2VsZi5ub3Qoc2VsZi5nZXRIYXNPd25Qcm9wZXJ0
eSgnbCcsIGFzdC5uYW1lKSksCisgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHNlbGYu
aWZfKHNlbGYuc3RhZ2UgPT09ICdpbnB1dHMnIHx8ICdzJywgZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICBpZiAoY3JlYXRlICYmIGNyZWF0ZSAhPT0gMSkgeworICAgICAgICAgICAgICBzZWxmLmlm
XygKKyAgICAgICAgICAgICAgICBzZWxmLm5vdChzZWxmLm5vbkNvbXB1dGVkTWVtYmVyKCdzJywg
YXN0Lm5hbWUpKSwKKyAgICAgICAgICAgICAgICBzZWxmLmxhenlBc3NpZ24oc2VsZi5ub25Db21w
dXRlZE1lbWJlcigncycsIGFzdC5uYW1lKSwgJ3t9JykpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgc2VsZi5hc3NpZ24oaW50b0lkLCBzZWxmLm5vbkNvbXB1dGVkTWVtYmVyKCdzJywgYXN0
Lm5hbWUpKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfSwgaW50b0lkICYmIHNlbGYubGF6eUFz
c2lnbihpbnRvSWQsIHNlbGYubm9uQ29tcHV0ZWRNZW1iZXIoJ2wnLCBhc3QubmFtZSkpCisgICAg
ICAgICk7CisgICAgICBpZiAoc2VsZi5zdGF0ZS5leHBlbnNpdmVDaGVja3MgfHwgaXNQb3NzaWJs
eURhbmdlcm91c01lbWJlck5hbWUoYXN0Lm5hbWUpKSB7CisgICAgICAgIHNlbGYuYWRkRW5zdXJl
U2FmZU9iamVjdChpbnRvSWQpOworICAgICAgfQorICAgICAgcmVjdXJzaW9uRm4oaW50b0lkKTsK
KyAgICAgIGJyZWFrOworICAgIGNhc2UgQVNULk1lbWJlckV4cHJlc3Npb246CisgICAgICBsZWZ0
ID0gbmFtZUlkICYmIChuYW1lSWQuY29udGV4dCA9IHRoaXMubmV4dElkKCkpIHx8IHRoaXMubmV4
dElkKCk7CisgICAgICBpbnRvSWQgPSBpbnRvSWQgfHwgdGhpcy5uZXh0SWQoKTsKKyAgICAgIHNl
bGYucmVjdXJzZShhc3Qub2JqZWN0LCBsZWZ0LCB1bmRlZmluZWQsIGZ1bmN0aW9uKCkgeworICAg
ICAgICBzZWxmLmlmXyhzZWxmLm5vdE51bGwobGVmdCksIGZ1bmN0aW9uKCkgeworICAgICAgICAg
IGlmIChhc3QuY29tcHV0ZWQpIHsKKyAgICAgICAgICAgIHJpZ2h0ID0gc2VsZi5uZXh0SWQoKTsK
KyAgICAgICAgICAgIHNlbGYucmVjdXJzZShhc3QucHJvcGVydHksIHJpZ2h0KTsKKyAgICAgICAg
ICAgIHNlbGYuYWRkRW5zdXJlU2FmZU1lbWJlck5hbWUocmlnaHQpOworICAgICAgICAgICAgaWYg
KGNyZWF0ZSAmJiBjcmVhdGUgIT09IDEpIHsKKyAgICAgICAgICAgICAgc2VsZi5pZl8oc2VsZi5u
b3Qoc2VsZi5jb21wdXRlZE1lbWJlcihsZWZ0LCByaWdodCkpLCBzZWxmLmxhenlBc3NpZ24oc2Vs
Zi5jb21wdXRlZE1lbWJlcihsZWZ0LCByaWdodCksICd7fScpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGV4cHJlc3Npb24gPSBzZWxmLmVuc3VyZVNhZmVPYmplY3Qoc2VsZi5jb21wdXRl
ZE1lbWJlcihsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgc2VsZi5hc3NpZ24oaW50b0lkLCBl
eHByZXNzaW9uKTsKKyAgICAgICAgICAgIGlmIChuYW1lSWQpIHsKKyAgICAgICAgICAgICAgbmFt
ZUlkLmNvbXB1dGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgbmFtZUlkLm5hbWUgPSByaWdodDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZW5zdXJlU2Fm
ZU1lbWJlck5hbWUoYXN0LnByb3BlcnR5Lm5hbWUpOworICAgICAgICAgICAgaWYgKGNyZWF0ZSAm
JiBjcmVhdGUgIT09IDEpIHsKKyAgICAgICAgICAgICAgc2VsZi5pZl8oc2VsZi5ub3Qoc2VsZi5u
b25Db21wdXRlZE1lbWJlcihsZWZ0LCBhc3QucHJvcGVydHkubmFtZSkpLCBzZWxmLmxhenlBc3Np
Z24oc2VsZi5ub25Db21wdXRlZE1lbWJlcihsZWZ0LCBhc3QucHJvcGVydHkubmFtZSksICd7fScp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGV4cHJlc3Npb24gPSBzZWxmLm5vbkNvbXB1
dGVkTWVtYmVyKGxlZnQsIGFzdC5wcm9wZXJ0eS5uYW1lKTsKKyAgICAgICAgICAgIGlmIChzZWxm
LnN0YXRlLmV4cGVuc2l2ZUNoZWNrcyB8fCBpc1Bvc3NpYmx5RGFuZ2Vyb3VzTWVtYmVyTmFtZShh
c3QucHJvcGVydHkubmFtZSkpIHsKKyAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHNlbGYuZW5z
dXJlU2FmZU9iamVjdChleHByZXNzaW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNl
bGYuYXNzaWduKGludG9JZCwgZXhwcmVzc2lvbik7CisgICAgICAgICAgICBpZiAobmFtZUlkKSB7
CisgICAgICAgICAgICAgIG5hbWVJZC5jb21wdXRlZCA9IGZhbHNlOworICAgICAgICAgICAgICBu
YW1lSWQubmFtZSA9IGFzdC5wcm9wZXJ0eS5uYW1lOworICAgICAgICAgICAgfQorICAgICAgICAg
IH0KKyAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgc2VsZi5hc3NpZ24oaW50b0lk
LCAndW5kZWZpbmVkJyk7CisgICAgICAgIH0pOworICAgICAgICByZWN1cnNpb25GbihpbnRvSWQp
OworICAgICAgfSwgISFjcmVhdGUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBBU1QuQ2FsbEV4
cHJlc3Npb246CisgICAgICBpbnRvSWQgPSBpbnRvSWQgfHwgdGhpcy5uZXh0SWQoKTsKKyAgICAg
IGlmIChhc3QuZmlsdGVyKSB7CisgICAgICAgIHJpZ2h0ID0gc2VsZi5maWx0ZXIoYXN0LmNhbGxl
ZS5uYW1lKTsKKyAgICAgICAgYXJncyA9IFtdOworICAgICAgICBmb3JFYWNoKGFzdC5hcmd1bWVu
dHMsIGZ1bmN0aW9uKGV4cHIpIHsKKyAgICAgICAgICB2YXIgYXJndW1lbnQgPSBzZWxmLm5leHRJ
ZCgpOworICAgICAgICAgIHNlbGYucmVjdXJzZShleHByLCBhcmd1bWVudCk7CisgICAgICAgICAg
YXJncy5wdXNoKGFyZ3VtZW50KTsKKyAgICAgICAgfSk7CisgICAgICAgIGV4cHJlc3Npb24gPSBy
aWdodCArICcoJyArIGFyZ3Muam9pbignLCcpICsgJyknOworICAgICAgICBzZWxmLmFzc2lnbihp
bnRvSWQsIGV4cHJlc3Npb24pOworICAgICAgICByZWN1cnNpb25GbihpbnRvSWQpOworICAgICAg
fSBlbHNlIHsKKyAgICAgICAgcmlnaHQgPSBzZWxmLm5leHRJZCgpOworICAgICAgICBsZWZ0ID0g
e307CisgICAgICAgIGFyZ3MgPSBbXTsKKyAgICAgICAgc2VsZi5yZWN1cnNlKGFzdC5jYWxsZWUs
IHJpZ2h0LCBsZWZ0LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICBzZWxmLmlmXyhzZWxmLm5vdE51
bGwocmlnaHQpLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHNlbGYuYWRkRW5zdXJlU2FmZUZ1
bmN0aW9uKHJpZ2h0KTsKKyAgICAgICAgICAgIGZvckVhY2goYXN0LmFyZ3VtZW50cywgZnVuY3Rp
b24oZXhwcikgeworICAgICAgICAgICAgICBzZWxmLnJlY3Vyc2UoZXhwciwgc2VsZi5uZXh0SWQo
KSwgdW5kZWZpbmVkLCBmdW5jdGlvbihhcmd1bWVudCkgeworICAgICAgICAgICAgICAgIGFyZ3Mu
cHVzaChzZWxmLmVuc3VyZVNhZmVPYmplY3QoYXJndW1lbnQpKTsKKyAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGlmIChsZWZ0Lm5hbWUpIHsKKyAgICAgICAg
ICAgICAgaWYgKCFzZWxmLnN0YXRlLmV4cGVuc2l2ZUNoZWNrcykgeworICAgICAgICAgICAgICAg
IHNlbGYuYWRkRW5zdXJlU2FmZU9iamVjdChsZWZ0LmNvbnRleHQpOworICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgIGV4cHJlc3Npb24gPSBzZWxmLm1lbWJlcihsZWZ0LmNvbnRleHQsIGxl
ZnQubmFtZSwgbGVmdC5jb21wdXRlZCkgKyAnKCcgKyBhcmdzLmpvaW4oJywnKSArICcpJzsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGV4cHJlc3Npb24gPSByaWdodCArICco
JyArIGFyZ3Muam9pbignLCcpICsgJyknOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXhw
cmVzc2lvbiA9IHNlbGYuZW5zdXJlU2FmZU9iamVjdChleHByZXNzaW9uKTsKKyAgICAgICAgICAg
IHNlbGYuYXNzaWduKGludG9JZCwgZXhwcmVzc2lvbik7CisgICAgICAgICAgfSwgZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICBzZWxmLmFzc2lnbihpbnRvSWQsICd1bmRlZmluZWQnKTsKKyAgICAg
ICAgICB9KTsKKyAgICAgICAgICByZWN1cnNpb25GbihpbnRvSWQpOworICAgICAgICB9KTsKKyAg
ICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgQVNULkFzc2lnbm1lbnRFeHByZXNzaW9uOgor
ICAgICAgcmlnaHQgPSB0aGlzLm5leHRJZCgpOworICAgICAgbGVmdCA9IHt9OworICAgICAgaWYg
KCFpc0Fzc2lnbmFibGUoYXN0LmxlZnQpKSB7CisgICAgICAgIHRocm93ICRwYXJzZU1pbkVycign
bHZhbCcsICdUcnlpbmcgdG8gYXNzaW5nIGEgdmFsdWUgdG8gYSBub24gbC12YWx1ZScpOworICAg
ICAgfQorICAgICAgdGhpcy5yZWN1cnNlKGFzdC5sZWZ0LCB1bmRlZmluZWQsIGxlZnQsIGZ1bmN0
aW9uKCkgeworICAgICAgICBzZWxmLmlmXyhzZWxmLm5vdE51bGwobGVmdC5jb250ZXh0KSwgZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgc2VsZi5yZWN1cnNlKGFzdC5yaWdodCwgcmlnaHQpOworICAg
ICAgICAgIHNlbGYuYWRkRW5zdXJlU2FmZU9iamVjdChzZWxmLm1lbWJlcihsZWZ0LmNvbnRleHQs
IGxlZnQubmFtZSwgbGVmdC5jb21wdXRlZCkpOworICAgICAgICAgIGV4cHJlc3Npb24gPSBzZWxm
Lm1lbWJlcihsZWZ0LmNvbnRleHQsIGxlZnQubmFtZSwgbGVmdC5jb21wdXRlZCkgKyBhc3Qub3Bl
cmF0b3IgKyByaWdodDsKKyAgICAgICAgICBzZWxmLmFzc2lnbihpbnRvSWQsIGV4cHJlc3Npb24p
OworICAgICAgICAgIHJlY3Vyc2lvbkZuKGludG9JZCB8fCBleHByZXNzaW9uKTsKKyAgICAgICAg
fSk7CisgICAgICB9LCAxKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQVNULkFycmF5RXhwcmVz
c2lvbjoKKyAgICAgIGFyZ3MgPSBbXTsKKyAgICAgIGZvckVhY2goYXN0LmVsZW1lbnRzLCBmdW5j
dGlvbihleHByKSB7CisgICAgICAgIHNlbGYucmVjdXJzZShleHByLCBzZWxmLm5leHRJZCgpLCB1
bmRlZmluZWQsIGZ1bmN0aW9uKGFyZ3VtZW50KSB7CisgICAgICAgICAgYXJncy5wdXNoKGFyZ3Vt
ZW50KTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAgICAgIGV4cHJlc3Npb24gPSAnWycgKyBh
cmdzLmpvaW4oJywnKSArICddJzsKKyAgICAgIHRoaXMuYXNzaWduKGludG9JZCwgZXhwcmVzc2lv
bik7CisgICAgICByZWN1cnNpb25GbihleHByZXNzaW9uKTsKKyAgICAgIGJyZWFrOworICAgIGNh
c2UgQVNULk9iamVjdEV4cHJlc3Npb246CisgICAgICBhcmdzID0gW107CisgICAgICBmb3JFYWNo
KGFzdC5wcm9wZXJ0aWVzLCBmdW5jdGlvbihwcm9wZXJ0eSkgeworICAgICAgICBzZWxmLnJlY3Vy
c2UocHJvcGVydHkudmFsdWUsIHNlbGYubmV4dElkKCksIHVuZGVmaW5lZCwgZnVuY3Rpb24oZXhw
cikgeworICAgICAgICAgIGFyZ3MucHVzaChzZWxmLmVzY2FwZSgKKyAgICAgICAgICAgICAgcHJv
cGVydHkua2V5LnR5cGUgPT09IEFTVC5JZGVudGlmaWVyID8gcHJvcGVydHkua2V5Lm5hbWUgOgor
ICAgICAgICAgICAgICAgICgnJyArIHByb3BlcnR5LmtleS52YWx1ZSkpICsKKyAgICAgICAgICAg
ICAgJzonICsgZXhwcik7CisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgICBleHByZXNzaW9u
ID0gJ3snICsgYXJncy5qb2luKCcsJykgKyAnfSc7CisgICAgICB0aGlzLmFzc2lnbihpbnRvSWQs
IGV4cHJlc3Npb24pOworICAgICAgcmVjdXJzaW9uRm4oZXhwcmVzc2lvbik7CisgICAgICBicmVh
azsKKyAgICBjYXNlIEFTVC5UaGlzRXhwcmVzc2lvbjoKKyAgICAgIHRoaXMuYXNzaWduKGludG9J
ZCwgJ3MnKTsKKyAgICAgIHJlY3Vyc2lvbkZuKCdzJyk7CisgICAgICBicmVhazsKKyAgICBjYXNl
IEFTVC5OR1ZhbHVlUGFyYW1ldGVyOgorICAgICAgdGhpcy5hc3NpZ24oaW50b0lkLCAndicpOwor
ICAgICAgcmVjdXJzaW9uRm4oJ3YnKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfSwKKworICBn
ZXRIYXNPd25Qcm9wZXJ0eTogZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydHkpIHsKKyAgICB2YXIg
a2V5ID0gZWxlbWVudCArICcuJyArIHByb3BlcnR5OworICAgIHZhciBvd24gPSB0aGlzLmN1cnJl
bnQoKS5vd247CisgICAgaWYgKCFvd24uaGFzT3duUHJvcGVydHkoa2V5KSkgeworICAgICAgb3du
W2tleV0gPSB0aGlzLm5leHRJZChmYWxzZSwgZWxlbWVudCArICcmJignICsgdGhpcy5lc2NhcGUo
cHJvcGVydHkpICsgJyBpbiAnICsgZWxlbWVudCArICcpJyk7CisgICAgfQorICAgIHJldHVybiBv
d25ba2V5XTsKKyAgfSwKKworICBhc3NpZ246IGZ1bmN0aW9uKGlkLCB2YWx1ZSkgeworICAgIGlm
ICghaWQpIHJldHVybjsKKyAgICB0aGlzLmN1cnJlbnQoKS5ib2R5LnB1c2goaWQsICc9JywgdmFs
dWUsICc7Jyk7CisgICAgcmV0dXJuIGlkOworICB9LAorCisgIGZpbHRlcjogZnVuY3Rpb24oZmls
dGVyTmFtZSkgeworICAgIGlmICghdGhpcy5zdGF0ZS5maWx0ZXJzLmhhc093blByb3BlcnR5KGZp
bHRlck5hbWUpKSB7CisgICAgICB0aGlzLnN0YXRlLmZpbHRlcnNbZmlsdGVyTmFtZV0gPSB0aGlz
Lm5leHRJZCh0cnVlKTsKKyAgICB9CisgICAgcmV0dXJuIHRoaXMuc3RhdGUuZmlsdGVyc1tmaWx0
ZXJOYW1lXTsKKyAgfSwKKworICBpZkRlZmluZWQ6IGZ1bmN0aW9uKGlkLCBkZWZhdWx0VmFsdWUp
IHsKKyAgICByZXR1cm4gJ2lmRGVmaW5lZCgnICsgaWQgKyAnLCcgKyB0aGlzLmVzY2FwZShkZWZh
dWx0VmFsdWUpICsgJyknOworICB9LAorCisgIHBsdXM6IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7
CisgICAgcmV0dXJuICdwbHVzKCcgKyBsZWZ0ICsgJywnICsgcmlnaHQgKyAnKSc7CisgIH0sCisK
KyAgcmV0dXJuXzogZnVuY3Rpb24oaWQpIHsKKyAgICB0aGlzLmN1cnJlbnQoKS5ib2R5LnB1c2go
J3JldHVybiAnLCBpZCwgJzsnKTsKKyAgfSwKKworICBpZl86IGZ1bmN0aW9uKHRlc3QsIGFsdGVy
bmF0ZSwgY29uc2VxdWVudCkgeworICAgIGlmICh0ZXN0ID09PSB0cnVlKSB7CisgICAgICBhbHRl
cm5hdGUoKTsKKyAgICB9IGVsc2UgeworICAgICAgdmFyIGJvZHkgPSB0aGlzLmN1cnJlbnQoKS5i
b2R5OworICAgICAgYm9keS5wdXNoKCdpZignLCB0ZXN0LCAnKXsnKTsKKyAgICAgIGFsdGVybmF0
ZSgpOworICAgICAgYm9keS5wdXNoKCd9Jyk7CisgICAgICBpZiAoY29uc2VxdWVudCkgeworICAg
ICAgICBib2R5LnB1c2goJ2Vsc2V7Jyk7CisgICAgICAgIGNvbnNlcXVlbnQoKTsKKyAgICAgICAg
Ym9keS5wdXNoKCd9Jyk7CisgICAgICB9CisgICAgfQorICB9LAorCisgIG5vdDogZnVuY3Rpb24o
ZXhwcmVzc2lvbikgeworICAgIHJldHVybiAnISgnICsgZXhwcmVzc2lvbiArICcpJzsKKyAgfSwK
KworICBub3ROdWxsOiBmdW5jdGlvbihleHByZXNzaW9uKSB7CisgICAgcmV0dXJuIGV4cHJlc3Np
b24gKyAnIT1udWxsJzsKKyAgfSwKKworICBub25Db21wdXRlZE1lbWJlcjogZnVuY3Rpb24obGVm
dCwgcmlnaHQpIHsKKyAgICByZXR1cm4gbGVmdCArICcuJyArIHJpZ2h0OworICB9LAorCisgIGNv
bXB1dGVkTWVtYmVyOiBmdW5jdGlvbihsZWZ0LCByaWdodCkgeworICAgIHJldHVybiBsZWZ0ICsg
J1snICsgcmlnaHQgKyAnXSc7CisgIH0sCisKKyAgbWVtYmVyOiBmdW5jdGlvbihsZWZ0LCByaWdo
dCwgY29tcHV0ZWQpIHsKKyAgICBpZiAoY29tcHV0ZWQpIHJldHVybiB0aGlzLmNvbXB1dGVkTWVt
YmVyKGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gdGhpcy5ub25Db21wdXRlZE1lbWJlcihsZWZ0
LCByaWdodCk7CisgIH0sCisKKyAgYWRkRW5zdXJlU2FmZU9iamVjdDogZnVuY3Rpb24oaXRlbSkg
eworICAgIHRoaXMuY3VycmVudCgpLmJvZHkucHVzaCh0aGlzLmVuc3VyZVNhZmVPYmplY3QoaXRl
bSksICc7Jyk7CisgIH0sCisKKyAgYWRkRW5zdXJlU2FmZU1lbWJlck5hbWU6IGZ1bmN0aW9uKGl0
ZW0pIHsKKyAgICB0aGlzLmN1cnJlbnQoKS5ib2R5LnB1c2godGhpcy5lbnN1cmVTYWZlTWVtYmVy
TmFtZShpdGVtKSwgJzsnKTsKKyAgfSwKKworICBhZGRFbnN1cmVTYWZlRnVuY3Rpb246IGZ1bmN0
aW9uKGl0ZW0pIHsKKyAgICB0aGlzLmN1cnJlbnQoKS5ib2R5LnB1c2godGhpcy5lbnN1cmVTYWZl
RnVuY3Rpb24oaXRlbSksICc7Jyk7CisgIH0sCisKKyAgZW5zdXJlU2FmZU9iamVjdDogZnVuY3Rp
b24oaXRlbSkgeworICAgIHJldHVybiAnZW5zdXJlU2FmZU9iamVjdCgnICsgaXRlbSArICcsdGV4
dCknOworICB9LAorCisgIGVuc3VyZVNhZmVNZW1iZXJOYW1lOiBmdW5jdGlvbihpdGVtKSB7Cisg
ICAgcmV0dXJuICdlbnN1cmVTYWZlTWVtYmVyTmFtZSgnICsgaXRlbSArICcsdGV4dCknOworICB9
LAorCisgIGVuc3VyZVNhZmVGdW5jdGlvbjogZnVuY3Rpb24oaXRlbSkgeworICAgIHJldHVybiAn
ZW5zdXJlU2FmZUZ1bmN0aW9uKCcgKyBpdGVtICsgJyx0ZXh0KSc7CisgIH0sCisKKyAgbGF6eVJl
Y3Vyc2U6IGZ1bmN0aW9uKGFzdCwgaW50b0lkLCBuYW1lSWQsIHJlY3Vyc2lvbkZuLCBjcmVhdGUs
IHNraXBXYXRjaElkQ2hlY2spIHsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgcmV0dXJuIGZ1
bmN0aW9uKCkgeworICAgICAgc2VsZi5yZWN1cnNlKGFzdCwgaW50b0lkLCBuYW1lSWQsIHJlY3Vy
c2lvbkZuLCBjcmVhdGUsIHNraXBXYXRjaElkQ2hlY2spOworICAgIH07CisgIH0sCisKKyAgbGF6
eUFzc2lnbjogZnVuY3Rpb24oaWQsIHZhbHVlKSB7CisgICAgdmFyIHNlbGYgPSB0aGlzOworICAg
IHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgIHNlbGYuYXNzaWduKGlkLCB2YWx1ZSk7CisgICAg
fTsKKyAgfSwKKworICBzdHJpbmdFc2NhcGVSZWdleDogL1teIGEtekEtWjAtOV0vZywKKworICBz
dHJpbmdFc2NhcGVGbjogZnVuY3Rpb24oYykgeworICAgIHJldHVybiAnXFx1JyArICgnMDAwMCcg
KyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCk7CisgIH0sCisKKyAgZXNj
YXBlOiBmdW5jdGlvbih2YWx1ZSkgeworICAgIGlmIChpc1N0cmluZyh2YWx1ZSkpIHJldHVybiAi
JyIgKyB2YWx1ZS5yZXBsYWNlKHRoaXMuc3RyaW5nRXNjYXBlUmVnZXgsIHRoaXMuc3RyaW5nRXNj
YXBlRm4pICsgIiciOworICAgIGlmIChpc051bWJlcih2YWx1ZSkpIHJldHVybiB2YWx1ZS50b1N0
cmluZygpOworICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkgcmV0dXJuICd0cnVlJzsKKyAgICBpZiAo
dmFsdWUgPT09IGZhbHNlKSByZXR1cm4gJ2ZhbHNlJzsKKyAgICBpZiAodmFsdWUgPT09IG51bGwp
IHJldHVybiAnbnVsbCc7CisgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHJl
dHVybiAndW5kZWZpbmVkJzsKKworICAgIHRocm93ICRwYXJzZU1pbkVycignZXNjJywgJ0lNUE9T
U0lCTEUnKTsKKyAgfSwKKworICBuZXh0SWQ6IGZ1bmN0aW9uKHNraXAsIGluaXQpIHsKKyAgICB2
YXIgaWQgPSAndicgKyAodGhpcy5zdGF0ZS5uZXh0SWQrKyk7CisgICAgaWYgKCFza2lwKSB7Cisg
ICAgICB0aGlzLmN1cnJlbnQoKS52YXJzLnB1c2goaWQgKyAoaW5pdCA/ICc9JyArIGluaXQgOiAn
JykpOworICAgIH0KKyAgICByZXR1cm4gaWQ7CisgIH0sCisKKyAgY3VycmVudDogZnVuY3Rpb24o
KSB7CisgICAgcmV0dXJuIHRoaXMuc3RhdGVbdGhpcy5zdGF0ZS5jb21wdXRpbmddOworICB9Cit9
OworCisKK2Z1bmN0aW9uIEFTVEludGVycHJldGVyKGFzdEJ1aWxkZXIsICRmaWx0ZXIpIHsKKyAg
dGhpcy5hc3RCdWlsZGVyID0gYXN0QnVpbGRlcjsKKyAgdGhpcy4kZmlsdGVyID0gJGZpbHRlcjsK
K30KKworQVNUSW50ZXJwcmV0ZXIucHJvdG90eXBlID0geworICBjb21waWxlOiBmdW5jdGlvbihl
eHByZXNzaW9uLCBleHBlbnNpdmVDaGVja3MpIHsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAg
dmFyIGFzdCA9IHRoaXMuYXN0QnVpbGRlci5hc3QoZXhwcmVzc2lvbik7CisgICAgdGhpcy5leHBy
ZXNzaW9uID0gZXhwcmVzc2lvbjsKKyAgICB0aGlzLmV4cGVuc2l2ZUNoZWNrcyA9IGV4cGVuc2l2
ZUNoZWNrczsKKyAgICBmaW5kQ29uc3RhbnRBbmRXYXRjaEV4cHJlc3Npb25zKGFzdCwgc2VsZi4k
ZmlsdGVyKTsKKyAgICB2YXIgYXNzaWduYWJsZTsKKyAgICB2YXIgYXNzaWduOworICAgIGlmICgo
YXNzaWduYWJsZSA9IGFzc2lnbmFibGVBU1QoYXN0KSkpIHsKKyAgICAgIGFzc2lnbiA9IHRoaXMu
cmVjdXJzZShhc3NpZ25hYmxlKTsKKyAgICB9CisgICAgdmFyIHRvV2F0Y2ggPSBnZXRJbnB1dHMo
YXN0LmJvZHkpOworICAgIHZhciBpbnB1dHM7CisgICAgaWYgKHRvV2F0Y2gpIHsKKyAgICAgIGlu
cHV0cyA9IFtdOworICAgICAgZm9yRWFjaCh0b1dhdGNoLCBmdW5jdGlvbih3YXRjaCwga2V5KSB7
CisgICAgICAgIHZhciBpbnB1dCA9IHNlbGYucmVjdXJzZSh3YXRjaCk7CisgICAgICAgIHdhdGNo
LmlucHV0ID0gaW5wdXQ7CisgICAgICAgIGlucHV0cy5wdXNoKGlucHV0KTsKKyAgICAgICAgd2F0
Y2gud2F0Y2hJZCA9IGtleTsKKyAgICAgIH0pOworICAgIH0KKyAgICB2YXIgZXhwcmVzc2lvbnMg
PSBbXTsKKyAgICBmb3JFYWNoKGFzdC5ib2R5LCBmdW5jdGlvbihleHByZXNzaW9uKSB7CisgICAg
ICBleHByZXNzaW9ucy5wdXNoKHNlbGYucmVjdXJzZShleHByZXNzaW9uLmV4cHJlc3Npb24pKTsK
KyAgICB9KTsKKyAgICB2YXIgZm4gPSBhc3QuYm9keS5sZW5ndGggPT09IDAgPyBmdW5jdGlvbigp
IHt9IDoKKyAgICAgICAgICAgICBhc3QuYm9keS5sZW5ndGggPT09IDEgPyBleHByZXNzaW9uc1sw
XSA6CisgICAgICAgICAgICAgZnVuY3Rpb24oc2NvcGUsIGxvY2FscykgeworICAgICAgICAgICAg
ICAgdmFyIGxhc3RWYWx1ZTsKKyAgICAgICAgICAgICAgIGZvckVhY2goZXhwcmVzc2lvbnMsIGZ1
bmN0aW9uKGV4cCkgeworICAgICAgICAgICAgICAgICBsYXN0VmFsdWUgPSBleHAoc2NvcGUsIGxv
Y2Fscyk7CisgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgIHJldHVybiBsYXN0VmFs
dWU7CisgICAgICAgICAgICAgfTsKKyAgICBpZiAoYXNzaWduKSB7CisgICAgICBmbi5hc3NpZ24g
PSBmdW5jdGlvbihzY29wZSwgdmFsdWUsIGxvY2FscykgeworICAgICAgICByZXR1cm4gYXNzaWdu
KHNjb3BlLCBsb2NhbHMsIHZhbHVlKTsKKyAgICAgIH07CisgICAgfQorICAgIGlmIChpbnB1dHMp
IHsKKyAgICAgIGZuLmlucHV0cyA9IGlucHV0czsKKyAgICB9CisgICAgZm4ubGl0ZXJhbCA9IGlz
TGl0ZXJhbChhc3QpOworICAgIGZuLmNvbnN0YW50ID0gaXNDb25zdGFudChhc3QpOworICAgIHJl
dHVybiBmbjsKKyAgfSwKKworICByZWN1cnNlOiBmdW5jdGlvbihhc3QsIGNvbnRleHQsIGNyZWF0
ZSkgeworICAgIHZhciBsZWZ0LCByaWdodCwgc2VsZiA9IHRoaXMsIGFyZ3MsIGV4cHJlc3Npb247
CisgICAgaWYgKGFzdC5pbnB1dCkgeworICAgICAgcmV0dXJuIHRoaXMuaW5wdXRzKGFzdC5pbnB1
dCwgYXN0LndhdGNoSWQpOworICAgIH0KKyAgICBzd2l0Y2ggKGFzdC50eXBlKSB7CisgICAgY2Fz
ZSBBU1QuTGl0ZXJhbDoKKyAgICAgIHJldHVybiB0aGlzLnZhbHVlKGFzdC52YWx1ZSwgY29udGV4
dCk7CisgICAgY2FzZSBBU1QuVW5hcnlFeHByZXNzaW9uOgorICAgICAgcmlnaHQgPSB0aGlzLnJl
Y3Vyc2UoYXN0LmFyZ3VtZW50KTsKKyAgICAgIHJldHVybiB0aGlzWyd1bmFyeScgKyBhc3Qub3Bl
cmF0b3JdKHJpZ2h0LCBjb250ZXh0KTsKKyAgICBjYXNlIEFTVC5CaW5hcnlFeHByZXNzaW9uOgor
ICAgICAgbGVmdCA9IHRoaXMucmVjdXJzZShhc3QubGVmdCk7CisgICAgICByaWdodCA9IHRoaXMu
cmVjdXJzZShhc3QucmlnaHQpOworICAgICAgcmV0dXJuIHRoaXNbJ2JpbmFyeScgKyBhc3Qub3Bl
cmF0b3JdKGxlZnQsIHJpZ2h0LCBjb250ZXh0KTsKKyAgICBjYXNlIEFTVC5Mb2dpY2FsRXhwcmVz
c2lvbjoKKyAgICAgIGxlZnQgPSB0aGlzLnJlY3Vyc2UoYXN0LmxlZnQpOworICAgICAgcmlnaHQg
PSB0aGlzLnJlY3Vyc2UoYXN0LnJpZ2h0KTsKKyAgICAgIHJldHVybiB0aGlzWydiaW5hcnknICsg
YXN0Lm9wZXJhdG9yXShsZWZ0LCByaWdodCwgY29udGV4dCk7CisgICAgY2FzZSBBU1QuQ29uZGl0
aW9uYWxFeHByZXNzaW9uOgorICAgICAgcmV0dXJuIHRoaXNbJ3Rlcm5hcnk/OiddKAorICAgICAg
ICB0aGlzLnJlY3Vyc2UoYXN0LnRlc3QpLAorICAgICAgICB0aGlzLnJlY3Vyc2UoYXN0LmFsdGVy
bmF0ZSksCisgICAgICAgIHRoaXMucmVjdXJzZShhc3QuY29uc2VxdWVudCksCisgICAgICAgIGNv
bnRleHQKKyAgICAgICk7CisgICAgY2FzZSBBU1QuSWRlbnRpZmllcjoKKyAgICAgIGVuc3VyZVNh
ZmVNZW1iZXJOYW1lKGFzdC5uYW1lLCBzZWxmLmV4cHJlc3Npb24pOworICAgICAgcmV0dXJuIHNl
bGYuaWRlbnRpZmllcihhc3QubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5leHBlbnNpdmVDaGVja3MgfHwgaXNQb3NzaWJseURhbmdlcm91c01lbWJlck5hbWUoYXN0Lm5h
bWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LCBjcmVhdGUsIHNlbGYu
ZXhwcmVzc2lvbik7CisgICAgY2FzZSBBU1QuTWVtYmVyRXhwcmVzc2lvbjoKKyAgICAgIGxlZnQg
PSB0aGlzLnJlY3Vyc2UoYXN0Lm9iamVjdCwgZmFsc2UsICEhY3JlYXRlKTsKKyAgICAgIGlmICgh
YXN0LmNvbXB1dGVkKSB7CisgICAgICAgIGVuc3VyZVNhZmVNZW1iZXJOYW1lKGFzdC5wcm9wZXJ0
eS5uYW1lLCBzZWxmLmV4cHJlc3Npb24pOworICAgICAgICByaWdodCA9IGFzdC5wcm9wZXJ0eS5u
YW1lOworICAgICAgfQorICAgICAgaWYgKGFzdC5jb21wdXRlZCkgcmlnaHQgPSB0aGlzLnJlY3Vy
c2UoYXN0LnByb3BlcnR5KTsKKyAgICAgIHJldHVybiBhc3QuY29tcHV0ZWQgPworICAgICAgICB0
aGlzLmNvbXB1dGVkTWVtYmVyKGxlZnQsIHJpZ2h0LCBjb250ZXh0LCBjcmVhdGUsIHNlbGYuZXhw
cmVzc2lvbikgOgorICAgICAgICB0aGlzLm5vbkNvbXB1dGVkTWVtYmVyKGxlZnQsIHJpZ2h0LCBz
ZWxmLmV4cGVuc2l2ZUNoZWNrcywgY29udGV4dCwgY3JlYXRlLCBzZWxmLmV4cHJlc3Npb24pOwor
ICAgIGNhc2UgQVNULkNhbGxFeHByZXNzaW9uOgorICAgICAgYXJncyA9IFtdOworICAgICAgZm9y
RWFjaChhc3QuYXJndW1lbnRzLCBmdW5jdGlvbihleHByKSB7CisgICAgICAgIGFyZ3MucHVzaChz
ZWxmLnJlY3Vyc2UoZXhwcikpOworICAgICAgfSk7CisgICAgICBpZiAoYXN0LmZpbHRlcikgcmln
aHQgPSB0aGlzLiRmaWx0ZXIoYXN0LmNhbGxlZS5uYW1lKTsKKyAgICAgIGlmICghYXN0LmZpbHRl
cikgcmlnaHQgPSB0aGlzLnJlY3Vyc2UoYXN0LmNhbGxlZSwgdHJ1ZSk7CisgICAgICByZXR1cm4g
YXN0LmZpbHRlciA/CisgICAgICAgIGZ1bmN0aW9uKHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5w
dXRzKSB7CisgICAgICAgICAgdmFyIHZhbHVlcyA9IFtdOworICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgYXJncy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFsdWVzLnB1c2goYXJn
c1tpXShzY29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0cykpOworICAgICAgICAgIH0KKyAgICAg
ICAgICB2YXIgdmFsdWUgPSByaWdodC5hcHBseSh1bmRlZmluZWQsIHZhbHVlcywgaW5wdXRzKTsK
KyAgICAgICAgICByZXR1cm4gY29udGV4dCA/IHtjb250ZXh0OiB1bmRlZmluZWQsIG5hbWU6IHVu
ZGVmaW5lZCwgdmFsdWU6IHZhbHVlfSA6IHZhbHVlOworICAgICAgICB9IDoKKyAgICAgICAgZnVu
Y3Rpb24oc2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpIHsKKyAgICAgICAgICB2YXIgcmhz
ID0gcmlnaHQoc2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpOworICAgICAgICAgIHZhciB2
YWx1ZTsKKyAgICAgICAgICBpZiAocmhzLnZhbHVlICE9IG51bGwpIHsKKyAgICAgICAgICAgIGVu
c3VyZVNhZmVPYmplY3QocmhzLmNvbnRleHQsIHNlbGYuZXhwcmVzc2lvbik7CisgICAgICAgICAg
ICBlbnN1cmVTYWZlRnVuY3Rpb24ocmhzLnZhbHVlLCBzZWxmLmV4cHJlc3Npb24pOworICAgICAg
ICAgICAgdmFyIHZhbHVlcyA9IFtdOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBh
cmdzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGVuc3VyZVNhZmVP
YmplY3QoYXJnc1tpXShzY29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0cyksIHNlbGYuZXhwcmVz
c2lvbikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFsdWUgPSBlbnN1cmVTYWZlT2Jq
ZWN0KHJocy52YWx1ZS5hcHBseShyaHMuY29udGV4dCwgdmFsdWVzKSwgc2VsZi5leHByZXNzaW9u
KTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIGNvbnRleHQgPyB7dmFsdWU6IHZhbHVl
fSA6IHZhbHVlOworICAgICAgICB9OworICAgIGNhc2UgQVNULkFzc2lnbm1lbnRFeHByZXNzaW9u
OgorICAgICAgbGVmdCA9IHRoaXMucmVjdXJzZShhc3QubGVmdCwgdHJ1ZSwgMSk7CisgICAgICBy
aWdodCA9IHRoaXMucmVjdXJzZShhc3QucmlnaHQpOworICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNj
b3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKSB7CisgICAgICAgIHZhciBsaHMgPSBsZWZ0KHNj
b3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKTsKKyAgICAgICAgdmFyIHJocyA9IHJpZ2h0KHNj
b3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKTsKKyAgICAgICAgZW5zdXJlU2FmZU9iamVjdChs
aHMudmFsdWUsIHNlbGYuZXhwcmVzc2lvbik7CisgICAgICAgIGxocy5jb250ZXh0W2xocy5uYW1l
XSA9IHJoczsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQgPyB7dmFsdWU6IHJoc30gOiByaHM7Cisg
ICAgICB9OworICAgIGNhc2UgQVNULkFycmF5RXhwcmVzc2lvbjoKKyAgICAgIGFyZ3MgPSBbXTsK
KyAgICAgIGZvckVhY2goYXN0LmVsZW1lbnRzLCBmdW5jdGlvbihleHByKSB7CisgICAgICAgIGFy
Z3MucHVzaChzZWxmLnJlY3Vyc2UoZXhwcikpOworICAgICAgfSk7CisgICAgICByZXR1cm4gZnVu
Y3Rpb24oc2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpIHsKKyAgICAgICAgdmFyIHZhbHVl
ID0gW107CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7ICsraSkgewor
ICAgICAgICAgIHZhbHVlLnB1c2goYXJnc1tpXShzY29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0
cykpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjb250ZXh0ID8ge3ZhbHVlOiB2YWx1ZX0g
OiB2YWx1ZTsKKyAgICAgIH07CisgICAgY2FzZSBBU1QuT2JqZWN0RXhwcmVzc2lvbjoKKyAgICAg
IGFyZ3MgPSBbXTsKKyAgICAgIGZvckVhY2goYXN0LnByb3BlcnRpZXMsIGZ1bmN0aW9uKHByb3Bl
cnR5KSB7CisgICAgICAgIGFyZ3MucHVzaCh7a2V5OiBwcm9wZXJ0eS5rZXkudHlwZSA9PT0gQVNU
LklkZW50aWZpZXIgPworICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkua2V5Lm5hbWUg
OgorICAgICAgICAgICAgICAgICAgICAgICAgKCcnICsgcHJvcGVydHkua2V5LnZhbHVlKSwKKyAg
ICAgICAgICAgICAgICAgICB2YWx1ZTogc2VsZi5yZWN1cnNlKHByb3BlcnR5LnZhbHVlKQorICAg
ICAgICB9KTsKKyAgICAgIH0pOworICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBsb2NhbHMs
IGFzc2lnbiwgaW5wdXRzKSB7CisgICAgICAgIHZhciB2YWx1ZSA9IHt9OworICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICB2YWx1ZVthcmdz
W2ldLmtleV0gPSBhcmdzW2ldLnZhbHVlKHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gY29udGV4dCA/IHt2YWx1ZTogdmFsdWV9IDogdmFs
dWU7CisgICAgICB9OworICAgIGNhc2UgQVNULlRoaXNFeHByZXNzaW9uOgorICAgICAgcmV0dXJu
IGZ1bmN0aW9uKHNjb3BlKSB7CisgICAgICAgIHJldHVybiBjb250ZXh0ID8ge3ZhbHVlOiBzY29w
ZX0gOiBzY29wZTsKKyAgICAgIH07CisgICAgY2FzZSBBU1QuTkdWYWx1ZVBhcmFtZXRlcjoKKyAg
ICAgIHJldHVybiBmdW5jdGlvbihzY29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0cykgeworICAg
ICAgICByZXR1cm4gY29udGV4dCA/IHt2YWx1ZTogYXNzaWdufSA6IGFzc2lnbjsKKyAgICAgIH07
CisgICAgfQorICB9LAorCisgICd1bmFyeSsnOiBmdW5jdGlvbihhcmd1bWVudCwgY29udGV4dCkg
eworICAgIHJldHVybiBmdW5jdGlvbihzY29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0cykgewor
ICAgICAgdmFyIGFyZyA9IGFyZ3VtZW50KHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKTsK
KyAgICAgIGlmIChpc0RlZmluZWQoYXJnKSkgeworICAgICAgICBhcmcgPSArYXJnOworICAgICAg
fSBlbHNlIHsKKyAgICAgICAgYXJnID0gMDsKKyAgICAgIH0KKyAgICAgIHJldHVybiBjb250ZXh0
ID8ge3ZhbHVlOiBhcmd9IDogYXJnOworICAgIH07CisgIH0sCisgICd1bmFyeS0nOiBmdW5jdGlv
bihhcmd1bWVudCwgY29udGV4dCkgeworICAgIHJldHVybiBmdW5jdGlvbihzY29wZSwgbG9jYWxz
LCBhc3NpZ24sIGlucHV0cykgeworICAgICAgdmFyIGFyZyA9IGFyZ3VtZW50KHNjb3BlLCBsb2Nh
bHMsIGFzc2lnbiwgaW5wdXRzKTsKKyAgICAgIGlmIChpc0RlZmluZWQoYXJnKSkgeworICAgICAg
ICBhcmcgPSAtYXJnOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgYXJnID0gMDsKKyAgICAgIH0K
KyAgICAgIHJldHVybiBjb250ZXh0ID8ge3ZhbHVlOiBhcmd9IDogYXJnOworICAgIH07CisgIH0s
CisgICd1bmFyeSEnOiBmdW5jdGlvbihhcmd1bWVudCwgY29udGV4dCkgeworICAgIHJldHVybiBm
dW5jdGlvbihzY29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0cykgeworICAgICAgdmFyIGFyZyA9
ICFhcmd1bWVudChzY29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0cyk7CisgICAgICByZXR1cm4g
Y29udGV4dCA/IHt2YWx1ZTogYXJnfSA6IGFyZzsKKyAgICB9OworICB9LAorICAnYmluYXJ5Kyc6
IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0LCBjb250ZXh0KSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKHNj
b3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKSB7CisgICAgICB2YXIgbGhzID0gbGVmdChzY29w
ZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0cyk7CisgICAgICB2YXIgcmhzID0gcmlnaHQoc2NvcGUs
IGxvY2FscywgYXNzaWduLCBpbnB1dHMpOworICAgICAgdmFyIGFyZyA9IHBsdXNGbihsaHMsIHJo
cyk7CisgICAgICByZXR1cm4gY29udGV4dCA/IHt2YWx1ZTogYXJnfSA6IGFyZzsKKyAgICB9Owor
ICB9LAorICAnYmluYXJ5LSc6IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0LCBjb250ZXh0KSB7CisgICAg
cmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKSB7CisgICAgICB2
YXIgbGhzID0gbGVmdChzY29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0cyk7CisgICAgICB2YXIg
cmhzID0gcmlnaHQoc2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpOworICAgICAgdmFyIGFy
ZyA9IChpc0RlZmluZWQobGhzKSA/IGxocyA6IDApIC0gKGlzRGVmaW5lZChyaHMpID8gcmhzIDog
MCk7CisgICAgICByZXR1cm4gY29udGV4dCA/IHt2YWx1ZTogYXJnfSA6IGFyZzsKKyAgICB9Owor
ICB9LAorICAnYmluYXJ5Kic6IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0LCBjb250ZXh0KSB7CisgICAg
cmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKSB7CisgICAgICB2
YXIgYXJnID0gbGVmdChzY29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0cykgKiByaWdodChzY29w
ZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0cyk7CisgICAgICByZXR1cm4gY29udGV4dCA/IHt2YWx1
ZTogYXJnfSA6IGFyZzsKKyAgICB9OworICB9LAorICAnYmluYXJ5Lyc6IGZ1bmN0aW9uKGxlZnQs
IHJpZ2h0LCBjb250ZXh0KSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBsb2NhbHMsIGFz
c2lnbiwgaW5wdXRzKSB7CisgICAgICB2YXIgYXJnID0gbGVmdChzY29wZSwgbG9jYWxzLCBhc3Np
Z24sIGlucHV0cykgLyByaWdodChzY29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0cyk7CisgICAg
ICByZXR1cm4gY29udGV4dCA/IHt2YWx1ZTogYXJnfSA6IGFyZzsKKyAgICB9OworICB9LAorICAn
YmluYXJ5JSc6IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0LCBjb250ZXh0KSB7CisgICAgcmV0dXJuIGZ1
bmN0aW9uKHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKSB7CisgICAgICB2YXIgYXJnID0g
bGVmdChzY29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0cykgJSByaWdodChzY29wZSwgbG9jYWxz
LCBhc3NpZ24sIGlucHV0cyk7CisgICAgICByZXR1cm4gY29udGV4dCA/IHt2YWx1ZTogYXJnfSA6
IGFyZzsKKyAgICB9OworICB9LAorICAnYmluYXJ5PT09JzogZnVuY3Rpb24obGVmdCwgcmlnaHQs
IGNvbnRleHQpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUsIGxvY2FscywgYXNzaWduLCBp
bnB1dHMpIHsKKyAgICAgIHZhciBhcmcgPSBsZWZ0KHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5w
dXRzKSA9PT0gcmlnaHQoc2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpOworICAgICAgcmV0
dXJuIGNvbnRleHQgPyB7dmFsdWU6IGFyZ30gOiBhcmc7CisgICAgfTsKKyAgfSwKKyAgJ2JpbmFy
eSE9PSc6IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0LCBjb250ZXh0KSB7CisgICAgcmV0dXJuIGZ1bmN0
aW9uKHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKSB7CisgICAgICB2YXIgYXJnID0gbGVm
dChzY29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0cykgIT09IHJpZ2h0KHNjb3BlLCBsb2NhbHMs
IGFzc2lnbiwgaW5wdXRzKTsKKyAgICAgIHJldHVybiBjb250ZXh0ID8ge3ZhbHVlOiBhcmd9IDog
YXJnOworICAgIH07CisgIH0sCisgICdiaW5hcnk9PSc6IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0LCBj
b250ZXh0KSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5w
dXRzKSB7CisgICAgICB2YXIgYXJnID0gbGVmdChzY29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0
cykgPT0gcmlnaHQoc2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpOworICAgICAgcmV0dXJu
IGNvbnRleHQgPyB7dmFsdWU6IGFyZ30gOiBhcmc7CisgICAgfTsKKyAgfSwKKyAgJ2JpbmFyeSE9
JzogZnVuY3Rpb24obGVmdCwgcmlnaHQsIGNvbnRleHQpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24o
c2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpIHsKKyAgICAgIHZhciBhcmcgPSBsZWZ0KHNj
b3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKSAhPSByaWdodChzY29wZSwgbG9jYWxzLCBhc3Np
Z24sIGlucHV0cyk7CisgICAgICByZXR1cm4gY29udGV4dCA/IHt2YWx1ZTogYXJnfSA6IGFyZzsK
KyAgICB9OworICB9LAorICAnYmluYXJ5PCc6IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0LCBjb250ZXh0
KSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKSB7
CisgICAgICB2YXIgYXJnID0gbGVmdChzY29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0cykgPCBy
aWdodChzY29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0cyk7CisgICAgICByZXR1cm4gY29udGV4
dCA/IHt2YWx1ZTogYXJnfSA6IGFyZzsKKyAgICB9OworICB9LAorICAnYmluYXJ5Pic6IGZ1bmN0
aW9uKGxlZnQsIHJpZ2h0LCBjb250ZXh0KSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBs
b2NhbHMsIGFzc2lnbiwgaW5wdXRzKSB7CisgICAgICB2YXIgYXJnID0gbGVmdChzY29wZSwgbG9j
YWxzLCBhc3NpZ24sIGlucHV0cykgPiByaWdodChzY29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0
cyk7CisgICAgICByZXR1cm4gY29udGV4dCA/IHt2YWx1ZTogYXJnfSA6IGFyZzsKKyAgICB9Owor
ICB9LAorICAnYmluYXJ5PD0nOiBmdW5jdGlvbihsZWZ0LCByaWdodCwgY29udGV4dCkgeworICAg
IHJldHVybiBmdW5jdGlvbihzY29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0cykgeworICAgICAg
dmFyIGFyZyA9IGxlZnQoc2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpIDw9IHJpZ2h0KHNj
b3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKTsKKyAgICAgIHJldHVybiBjb250ZXh0ID8ge3Zh
bHVlOiBhcmd9IDogYXJnOworICAgIH07CisgIH0sCisgICdiaW5hcnk+PSc6IGZ1bmN0aW9uKGxl
ZnQsIHJpZ2h0LCBjb250ZXh0KSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBsb2NhbHMs
IGFzc2lnbiwgaW5wdXRzKSB7CisgICAgICB2YXIgYXJnID0gbGVmdChzY29wZSwgbG9jYWxzLCBh
c3NpZ24sIGlucHV0cykgPj0gcmlnaHQoc2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpOwor
ICAgICAgcmV0dXJuIGNvbnRleHQgPyB7dmFsdWU6IGFyZ30gOiBhcmc7CisgICAgfTsKKyAgfSwK
KyAgJ2JpbmFyeSYmJzogZnVuY3Rpb24obGVmdCwgcmlnaHQsIGNvbnRleHQpIHsKKyAgICByZXR1
cm4gZnVuY3Rpb24oc2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpIHsKKyAgICAgIHZhciBh
cmcgPSBsZWZ0KHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKSAmJiByaWdodChzY29wZSwg
bG9jYWxzLCBhc3NpZ24sIGlucHV0cyk7CisgICAgICByZXR1cm4gY29udGV4dCA/IHt2YWx1ZTog
YXJnfSA6IGFyZzsKKyAgICB9OworICB9LAorICAnYmluYXJ5fHwnOiBmdW5jdGlvbihsZWZ0LCBy
aWdodCwgY29udGV4dCkgeworICAgIHJldHVybiBmdW5jdGlvbihzY29wZSwgbG9jYWxzLCBhc3Np
Z24sIGlucHV0cykgeworICAgICAgdmFyIGFyZyA9IGxlZnQoc2NvcGUsIGxvY2FscywgYXNzaWdu
LCBpbnB1dHMpIHx8IHJpZ2h0KHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKTsKKyAgICAg
IHJldHVybiBjb250ZXh0ID8ge3ZhbHVlOiBhcmd9IDogYXJnOworICAgIH07CisgIH0sCisgICd0
ZXJuYXJ5PzonOiBmdW5jdGlvbih0ZXN0LCBhbHRlcm5hdGUsIGNvbnNlcXVlbnQsIGNvbnRleHQp
IHsKKyAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1dHMpIHsK
KyAgICAgIHZhciBhcmcgPSB0ZXN0KHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKSA/IGFs
dGVybmF0ZShzY29wZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0cykgOiBjb25zZXF1ZW50KHNjb3Bl
LCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKTsKKyAgICAgIHJldHVybiBjb250ZXh0ID8ge3ZhbHVl
OiBhcmd9IDogYXJnOworICAgIH07CisgIH0sCisgIHZhbHVlOiBmdW5jdGlvbih2YWx1ZSwgY29u
dGV4dCkgeworICAgIHJldHVybiBmdW5jdGlvbigpIHsgcmV0dXJuIGNvbnRleHQgPyB7Y29udGV4
dDogdW5kZWZpbmVkLCBuYW1lOiB1bmRlZmluZWQsIHZhbHVlOiB2YWx1ZX0gOiB2YWx1ZTsgfTsK
KyAgfSwKKyAgaWRlbnRpZmllcjogZnVuY3Rpb24obmFtZSwgZXhwZW5zaXZlQ2hlY2tzLCBjb250
ZXh0LCBjcmVhdGUsIGV4cHJlc3Npb24pIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUsIGxv
Y2FscywgYXNzaWduLCBpbnB1dHMpIHsKKyAgICAgIHZhciBiYXNlID0gbG9jYWxzICYmIChuYW1l
IGluIGxvY2FscykgPyBsb2NhbHMgOiBzY29wZTsKKyAgICAgIGlmIChjcmVhdGUgJiYgY3JlYXRl
ICE9PSAxICYmIGJhc2UgJiYgIShiYXNlW25hbWVdKSkgeworICAgICAgICBiYXNlW25hbWVdID0g
e307CisgICAgICB9CisgICAgICB2YXIgdmFsdWUgPSBiYXNlID8gYmFzZVtuYW1lXSA6IHVuZGVm
aW5lZDsKKyAgICAgIGlmIChleHBlbnNpdmVDaGVja3MpIHsKKyAgICAgICAgZW5zdXJlU2FmZU9i
amVjdCh2YWx1ZSwgZXhwcmVzc2lvbik7CisgICAgICB9CisgICAgICBpZiAoY29udGV4dCkgewor
ICAgICAgICByZXR1cm4ge2NvbnRleHQ6IGJhc2UsIG5hbWU6IG5hbWUsIHZhbHVlOiB2YWx1ZX07
CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICB9CisgICAgfTsK
KyAgfSwKKyAgY29tcHV0ZWRNZW1iZXI6IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0LCBjb250ZXh0LCBj
cmVhdGUsIGV4cHJlc3Npb24pIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUsIGxvY2Fscywg
YXNzaWduLCBpbnB1dHMpIHsKKyAgICAgIHZhciBsaHMgPSBsZWZ0KHNjb3BlLCBsb2NhbHMsIGFz
c2lnbiwgaW5wdXRzKTsKKyAgICAgIHZhciByaHM7CisgICAgICB2YXIgdmFsdWU7CisgICAgICBp
ZiAobGhzICE9IG51bGwpIHsKKyAgICAgICAgcmhzID0gcmlnaHQoc2NvcGUsIGxvY2FscywgYXNz
aWduLCBpbnB1dHMpOworICAgICAgICBlbnN1cmVTYWZlTWVtYmVyTmFtZShyaHMsIGV4cHJlc3Np
b24pOworICAgICAgICBpZiAoY3JlYXRlICYmIGNyZWF0ZSAhPT0gMSAmJiBsaHMgJiYgIShsaHNb
cmhzXSkpIHsKKyAgICAgICAgICBsaHNbcmhzXSA9IHt9OworICAgICAgICB9CisgICAgICAgIHZh
bHVlID0gbGhzW3Joc107CisgICAgICAgIGVuc3VyZVNhZmVPYmplY3QodmFsdWUsIGV4cHJlc3Np
b24pOworICAgICAgfQorICAgICAgaWYgKGNvbnRleHQpIHsKKyAgICAgICAgcmV0dXJuIHtjb250
ZXh0OiBsaHMsIG5hbWU6IHJocywgdmFsdWU6IHZhbHVlfTsKKyAgICAgIH0gZWxzZSB7CisgICAg
ICAgIHJldHVybiB2YWx1ZTsKKyAgICAgIH0KKyAgICB9OworICB9LAorICBub25Db21wdXRlZE1l
bWJlcjogZnVuY3Rpb24obGVmdCwgcmlnaHQsIGV4cGVuc2l2ZUNoZWNrcywgY29udGV4dCwgY3Jl
YXRlLCBleHByZXNzaW9uKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBsb2NhbHMsIGFz
c2lnbiwgaW5wdXRzKSB7CisgICAgICB2YXIgbGhzID0gbGVmdChzY29wZSwgbG9jYWxzLCBhc3Np
Z24sIGlucHV0cyk7CisgICAgICBpZiAoY3JlYXRlICYmIGNyZWF0ZSAhPT0gMSAmJiBsaHMgJiYg
IShsaHNbcmlnaHRdKSkgeworICAgICAgICBsaHNbcmlnaHRdID0ge307CisgICAgICB9CisgICAg
ICB2YXIgdmFsdWUgPSBsaHMgIT0gbnVsbCA/IGxoc1tyaWdodF0gOiB1bmRlZmluZWQ7CisgICAg
ICBpZiAoZXhwZW5zaXZlQ2hlY2tzIHx8IGlzUG9zc2libHlEYW5nZXJvdXNNZW1iZXJOYW1lKHJp
Z2h0KSkgeworICAgICAgICBlbnN1cmVTYWZlT2JqZWN0KHZhbHVlLCBleHByZXNzaW9uKTsKKyAg
ICAgIH0KKyAgICAgIGlmIChjb250ZXh0KSB7CisgICAgICAgIHJldHVybiB7Y29udGV4dDogbGhz
LCBuYW1lOiByaWdodCwgdmFsdWU6IHZhbHVlfTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJl
dHVybiB2YWx1ZTsKKyAgICAgIH0KKyAgICB9OworICB9LAorICBpbnB1dHM6IGZ1bmN0aW9uKGlu
cHV0LCB3YXRjaElkKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCB2YWx1ZSwgbG9jYWxz
LCBpbnB1dHMpIHsKKyAgICAgIGlmIChpbnB1dHMpIHJldHVybiBpbnB1dHNbd2F0Y2hJZF07Cisg
ICAgICByZXR1cm4gaW5wdXQoc2NvcGUsIHZhbHVlLCBsb2NhbHMpOworICAgIH07CisgIH0KK307
CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKi8KK3ZhciBQYXJzZXIgPSBmdW5jdGlvbihsZXhl
ciwgJGZpbHRlciwgb3B0aW9ucykgeworICB0aGlzLmxleGVyID0gbGV4ZXI7CisgIHRoaXMuJGZp
bHRlciA9ICRmaWx0ZXI7CisgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CisgIHRoaXMuYXN0ID0g
bmV3IEFTVCh0aGlzLmxleGVyKTsKKyAgdGhpcy5hc3RDb21waWxlciA9IG9wdGlvbnMuY3NwID8g
bmV3IEFTVEludGVycHJldGVyKHRoaXMuYXN0LCAkZmlsdGVyKSA6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5ldyBBU1RDb21waWxlcih0aGlzLmFzdCwgJGZpbHRlcik7Cit9
OworCitQYXJzZXIucHJvdG90eXBlID0geworICBjb25zdHJ1Y3RvcjogUGFyc2VyLAorCisgIHBh
cnNlOiBmdW5jdGlvbih0ZXh0KSB7CisgICAgcmV0dXJuIHRoaXMuYXN0Q29tcGlsZXIuY29tcGls
ZSh0ZXh0LCB0aGlzLm9wdGlvbnMuZXhwZW5zaXZlQ2hlY2tzKTsKKyAgfQorfTsKKworLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFBhcnNlciBo
ZWxwZXIgZnVuY3Rpb25zCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLworCitmdW5jdGlvbiBzZXR0ZXIob2JqLCBwYXRoLCBzZXRWYWx1ZSwgZnVsbEV4
cCkgeworICBlbnN1cmVTYWZlT2JqZWN0KG9iaiwgZnVsbEV4cCk7CisKKyAgdmFyIGVsZW1lbnQg
PSBwYXRoLnNwbGl0KCcuJyksIGtleTsKKyAgZm9yICh2YXIgaSA9IDA7IGVsZW1lbnQubGVuZ3Ro
ID4gMTsgaSsrKSB7CisgICAga2V5ID0gZW5zdXJlU2FmZU1lbWJlck5hbWUoZWxlbWVudC5zaGlm
dCgpLCBmdWxsRXhwKTsKKyAgICB2YXIgcHJvcGVydHlPYmogPSBlbnN1cmVTYWZlT2JqZWN0KG9i
altrZXldLCBmdWxsRXhwKTsKKyAgICBpZiAoIXByb3BlcnR5T2JqKSB7CisgICAgICBwcm9wZXJ0
eU9iaiA9IHt9OworICAgICAgb2JqW2tleV0gPSBwcm9wZXJ0eU9iajsKKyAgICB9CisgICAgb2Jq
ID0gcHJvcGVydHlPYmo7CisgIH0KKyAga2V5ID0gZW5zdXJlU2FmZU1lbWJlck5hbWUoZWxlbWVu
dC5zaGlmdCgpLCBmdWxsRXhwKTsKKyAgZW5zdXJlU2FmZU9iamVjdChvYmpba2V5XSwgZnVsbEV4
cCk7CisgIG9ialtrZXldID0gc2V0VmFsdWU7CisgIHJldHVybiBzZXRWYWx1ZTsKK30KKwordmFy
IGdldHRlckZuQ2FjaGVEZWZhdWx0ID0gY3JlYXRlTWFwKCk7Cit2YXIgZ2V0dGVyRm5DYWNoZUV4
cGVuc2l2ZSA9IGNyZWF0ZU1hcCgpOworCitmdW5jdGlvbiBpc1Bvc3NpYmx5RGFuZ2Vyb3VzTWVt
YmVyTmFtZShuYW1lKSB7CisgIHJldHVybiBuYW1lID09ICdjb25zdHJ1Y3Rvcic7Cit9CisKK3Zh
ciBvYmplY3RWYWx1ZU9mID0gT2JqZWN0LnByb3RvdHlwZS52YWx1ZU9mOworCitmdW5jdGlvbiBn
ZXRWYWx1ZU9mKHZhbHVlKSB7CisgIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlLnZhbHVlT2YpID8g
dmFsdWUudmFsdWVPZigpIDogb2JqZWN0VmFsdWVPZi5jYWxsKHZhbHVlKTsKK30KKworLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLyoqCisgKiBAbmdkb2Mgc2VydmljZQor
ICogQG5hbWUgJHBhcnNlCisgKiBAa2luZCBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlvbgor
ICoKKyAqIENvbnZlcnRzIEFuZ3VsYXIge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lv
bn0gaW50byBhIGZ1bmN0aW9uLgorICoKKyAqIGBgYGpzCisgKiAgIHZhciBnZXR0ZXIgPSAkcGFy
c2UoJ3VzZXIubmFtZScpOworICogICB2YXIgc2V0dGVyID0gZ2V0dGVyLmFzc2lnbjsKKyAqICAg
dmFyIGNvbnRleHQgPSB7dXNlcjp7bmFtZTonYW5ndWxhcid9fTsKKyAqICAgdmFyIGxvY2FscyA9
IHt1c2VyOntuYW1lOidsb2NhbCd9fTsKKyAqCisgKiAgIGV4cGVjdChnZXR0ZXIoY29udGV4dCkp
LnRvRXF1YWwoJ2FuZ3VsYXInKTsKKyAqICAgc2V0dGVyKGNvbnRleHQsICduZXdWYWx1ZScpOwor
ICogICBleHBlY3QoY29udGV4dC51c2VyLm5hbWUpLnRvRXF1YWwoJ25ld1ZhbHVlJyk7CisgKiAg
IGV4cGVjdChnZXR0ZXIoY29udGV4dCwgbG9jYWxzKSkudG9FcXVhbCgnbG9jYWwnKTsKKyAqIGBg
YAorICoKKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gZXhwcmVzc2lvbiBTdHJpbmcgZXhwcmVzc2lv
biB0byBjb21waWxlLgorICogQHJldHVybnMge2Z1bmN0aW9uKGNvbnRleHQsIGxvY2Fscyl9IGEg
ZnVuY3Rpb24gd2hpY2ggcmVwcmVzZW50cyB0aGUgY29tcGlsZWQgZXhwcmVzc2lvbjoKKyAqCisg
KiAgICAqIGBjb250ZXh0YCDigJMgYHtvYmplY3R9YCDigJMgYW4gb2JqZWN0IGFnYWluc3Qgd2hp
Y2ggYW55IGV4cHJlc3Npb25zIGVtYmVkZGVkIGluIHRoZSBzdHJpbmdzCisgKiAgICAgIGFyZSBl
dmFsdWF0ZWQgYWdhaW5zdCAodHlwaWNhbGx5IGEgc2NvcGUgb2JqZWN0KS4KKyAqICAgICogYGxv
Y2Fsc2Ag4oCTIGB7b2JqZWN0PX1gIOKAkyBsb2NhbCB2YXJpYWJsZXMgY29udGV4dCBvYmplY3Qs
IHVzZWZ1bCBmb3Igb3ZlcnJpZGluZyB2YWx1ZXMgaW4KKyAqICAgICAgYGNvbnRleHRgLgorICoK
KyAqICAgIFRoZSByZXR1cm5lZCBmdW5jdGlvbiBhbHNvIGhhcyB0aGUgZm9sbG93aW5nIHByb3Bl
cnRpZXM6CisgKiAgICAgICogYGxpdGVyYWxgIOKAkyBge2Jvb2xlYW59YCDigJMgd2hldGhlciB0
aGUgZXhwcmVzc2lvbidzIHRvcC1sZXZlbCBub2RlIGlzIGEgSmF2YVNjcmlwdAorICogICAgICAg
IGxpdGVyYWwuCisgKiAgICAgICogYGNvbnN0YW50YCDigJMgYHtib29sZWFufWAg4oCTIHdoZXRo
ZXIgdGhlIGV4cHJlc3Npb24gaXMgbWFkZSBlbnRpcmVseSBvZiBKYXZhU2NyaXB0CisgKiAgICAg
ICAgY29uc3RhbnQgbGl0ZXJhbHMuCisgKiAgICAgICogYGFzc2lnbmAg4oCTIGB7P2Z1bmN0aW9u
KGNvbnRleHQsIHZhbHVlKX1gIOKAkyBpZiB0aGUgZXhwcmVzc2lvbiBpcyBhc3NpZ25hYmxlLCB0
aGlzIHdpbGwgYmUKKyAqICAgICAgICBzZXQgdG8gYSBmdW5jdGlvbiB0byBjaGFuZ2UgaXRzIHZh
bHVlIG9uIHRoZSBnaXZlbiBjb250ZXh0LgorICoKKyAqLworCisKKy8qKgorICogQG5nZG9jIHBy
b3ZpZGVyCisgKiBAbmFtZSAkcGFyc2VQcm92aWRlcgorICoKKyAqIEBkZXNjcmlwdGlvbgorICog
YCRwYXJzZVByb3ZpZGVyYCBjYW4gYmUgdXNlZCBmb3IgY29uZmlndXJpbmcgdGhlIGRlZmF1bHQg
YmVoYXZpb3Igb2YgdGhlIHtAbGluayBuZy4kcGFyc2UgJHBhcnNlfQorICogIHNlcnZpY2UuCisg
Ki8KK2Z1bmN0aW9uICRQYXJzZVByb3ZpZGVyKCkgeworICB2YXIgY2FjaGVEZWZhdWx0ID0gY3Jl
YXRlTWFwKCk7CisgIHZhciBjYWNoZUV4cGVuc2l2ZSA9IGNyZWF0ZU1hcCgpOworCisgIHRoaXMu
JGdldCA9IFsnJGZpbHRlcicsICckc25pZmZlcicsIGZ1bmN0aW9uKCRmaWx0ZXIsICRzbmlmZmVy
KSB7CisgICAgdmFyICRwYXJzZU9wdGlvbnMgPSB7CisgICAgICAgICAgY3NwOiAkc25pZmZlci5j
c3AsCisgICAgICAgICAgZXhwZW5zaXZlQ2hlY2tzOiBmYWxzZQorICAgICAgICB9LAorICAgICAg
ICAkcGFyc2VPcHRpb25zRXhwZW5zaXZlID0geworICAgICAgICAgIGNzcDogJHNuaWZmZXIuY3Nw
LAorICAgICAgICAgIGV4cGVuc2l2ZUNoZWNrczogdHJ1ZQorICAgICAgICB9OworCisgICAgcmV0
dXJuIGZ1bmN0aW9uICRwYXJzZShleHAsIGludGVyY2VwdG9yRm4sIGV4cGVuc2l2ZUNoZWNrcykg
eworICAgICAgdmFyIHBhcnNlZEV4cHJlc3Npb24sIG9uZVRpbWUsIGNhY2hlS2V5OworCisgICAg
ICBzd2l0Y2ggKHR5cGVvZiBleHApIHsKKyAgICAgICAgY2FzZSAnc3RyaW5nJzoKKyAgICAgICAg
ICBleHAgPSBleHAudHJpbSgpOworICAgICAgICAgIGNhY2hlS2V5ID0gZXhwOworCisgICAgICAg
ICAgdmFyIGNhY2hlID0gKGV4cGVuc2l2ZUNoZWNrcyA/IGNhY2hlRXhwZW5zaXZlIDogY2FjaGVE
ZWZhdWx0KTsKKyAgICAgICAgICBwYXJzZWRFeHByZXNzaW9uID0gY2FjaGVbY2FjaGVLZXldOwor
CisgICAgICAgICAgaWYgKCFwYXJzZWRFeHByZXNzaW9uKSB7CisgICAgICAgICAgICBpZiAoZXhw
LmNoYXJBdCgwKSA9PT0gJzonICYmIGV4cC5jaGFyQXQoMSkgPT09ICc6JykgeworICAgICAgICAg
ICAgICBvbmVUaW1lID0gdHJ1ZTsKKyAgICAgICAgICAgICAgZXhwID0gZXhwLnN1YnN0cmluZygy
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBwYXJzZU9wdGlvbnMgPSBleHBlbnNp
dmVDaGVja3MgPyAkcGFyc2VPcHRpb25zRXhwZW5zaXZlIDogJHBhcnNlT3B0aW9uczsKKyAgICAg
ICAgICAgIHZhciBsZXhlciA9IG5ldyBMZXhlcihwYXJzZU9wdGlvbnMpOworICAgICAgICAgICAg
dmFyIHBhcnNlciA9IG5ldyBQYXJzZXIobGV4ZXIsICRmaWx0ZXIsIHBhcnNlT3B0aW9ucyk7Cisg
ICAgICAgICAgICBwYXJzZWRFeHByZXNzaW9uID0gcGFyc2VyLnBhcnNlKGV4cCk7CisgICAgICAg
ICAgICBpZiAocGFyc2VkRXhwcmVzc2lvbi5jb25zdGFudCkgeworICAgICAgICAgICAgICBwYXJz
ZWRFeHByZXNzaW9uLiQkd2F0Y2hEZWxlZ2F0ZSA9IGNvbnN0YW50V2F0Y2hEZWxlZ2F0ZTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAob25lVGltZSkgeworICAgICAgICAgICAgICBwYXJzZWRFeHBy
ZXNzaW9uLiQkd2F0Y2hEZWxlZ2F0ZSA9IHBhcnNlZEV4cHJlc3Npb24ubGl0ZXJhbCA/CisgICAg
ICAgICAgICAgICAgICBvbmVUaW1lTGl0ZXJhbFdhdGNoRGVsZWdhdGUgOiBvbmVUaW1lV2F0Y2hE
ZWxlZ2F0ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyc2VkRXhwcmVzc2lvbi5pbnB1dHMp
IHsKKyAgICAgICAgICAgICAgcGFyc2VkRXhwcmVzc2lvbi4kJHdhdGNoRGVsZWdhdGUgPSBpbnB1
dHNXYXRjaERlbGVnYXRlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FjaGVbY2FjaGVL
ZXldID0gcGFyc2VkRXhwcmVzc2lvbjsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIGFk
ZEludGVyY2VwdG9yKHBhcnNlZEV4cHJlc3Npb24sIGludGVyY2VwdG9yRm4pOworCisgICAgICAg
IGNhc2UgJ2Z1bmN0aW9uJzoKKyAgICAgICAgICByZXR1cm4gYWRkSW50ZXJjZXB0b3IoZXhwLCBp
bnRlcmNlcHRvckZuKTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHJldHVybiBub29w
OworICAgICAgfQorICAgIH07CisKKyAgICBmdW5jdGlvbiBleHByZXNzaW9uSW5wdXREaXJ0eUNo
ZWNrKG5ld1ZhbHVlLCBvbGRWYWx1ZU9mVmFsdWUpIHsKKworICAgICAgaWYgKG5ld1ZhbHVlID09
IG51bGwgfHwgb2xkVmFsdWVPZlZhbHVlID09IG51bGwpIHsgLy8gbnVsbC91bmRlZmluZWQKKyAg
ICAgICAgcmV0dXJuIG5ld1ZhbHVlID09PSBvbGRWYWx1ZU9mVmFsdWU7CisgICAgICB9CisKKyAg
ICAgIGlmICh0eXBlb2YgbmV3VmFsdWUgPT09ICdvYmplY3QnKSB7CisKKyAgICAgICAgLy8gYXR0
ZW1wdCB0byBjb252ZXJ0IHRoZSB2YWx1ZSB0byBhIHByaW1pdGl2ZSB0eXBlCisgICAgICAgIC8v
IFRPRE8oZG9jcyk6IGFkZCBhIG5vdGUgdG8gZG9jcyB0aGF0IGJ5IGltcGxlbWVudGluZyB2YWx1
ZU9mIGV2ZW4gb2JqZWN0cyBhbmQgYXJyYXlzIGNhbgorICAgICAgICAvLyAgICAgICAgICAgICBi
ZSBjaGVhcGx5IGRpcnR5LWNoZWNrZWQKKyAgICAgICAgbmV3VmFsdWUgPSBnZXRWYWx1ZU9mKG5l
d1ZhbHVlKTsKKworICAgICAgICBpZiAodHlwZW9mIG5ld1ZhbHVlID09PSAnb2JqZWN0Jykgewor
ICAgICAgICAgIC8vIG9iamVjdHMvYXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIC0gZGVlcC13YXRj
aGluZyB0aGVtIHdvdWxkIGJlIHRvbyBleHBlbnNpdmUKKyAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKworICAgICAgICAvLyBmYWxsLXRocm91Z2ggdG8gdGhlIHByaW1pdGl2ZSBl
cXVhbGl0eSBjaGVjaworICAgICAgfQorCisgICAgICAvL1ByaW1pdGl2ZSBvciBOYU4KKyAgICAg
IHJldHVybiBuZXdWYWx1ZSA9PT0gb2xkVmFsdWVPZlZhbHVlIHx8IChuZXdWYWx1ZSAhPT0gbmV3
VmFsdWUgJiYgb2xkVmFsdWVPZlZhbHVlICE9PSBvbGRWYWx1ZU9mVmFsdWUpOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGlucHV0c1dhdGNoRGVsZWdhdGUoc2NvcGUsIGxpc3RlbmVyLCBvYmplY3RF
cXVhbGl0eSwgcGFyc2VkRXhwcmVzc2lvbiwgcHJldHR5UHJpbnRFeHByZXNzaW9uKSB7CisgICAg
ICB2YXIgaW5wdXRFeHByZXNzaW9ucyA9IHBhcnNlZEV4cHJlc3Npb24uaW5wdXRzOworICAgICAg
dmFyIGxhc3RSZXN1bHQ7CisKKyAgICAgIGlmIChpbnB1dEV4cHJlc3Npb25zLmxlbmd0aCA9PT0g
MSkgeworICAgICAgICB2YXIgb2xkSW5wdXRWYWx1ZU9mID0gZXhwcmVzc2lvbklucHV0RGlydHlD
aGVjazsgLy8gaW5pdCB0byBzb21ldGhpbmcgdW5pcXVlIHNvIHRoYXQgZXF1YWxzIGNoZWNrIGZh
aWxzCisgICAgICAgIGlucHV0RXhwcmVzc2lvbnMgPSBpbnB1dEV4cHJlc3Npb25zWzBdOworICAg
ICAgICByZXR1cm4gc2NvcGUuJHdhdGNoKGZ1bmN0aW9uIGV4cHJlc3Npb25JbnB1dFdhdGNoKHNj
b3BlKSB7CisgICAgICAgICAgdmFyIG5ld0lucHV0VmFsdWUgPSBpbnB1dEV4cHJlc3Npb25zKHNj
b3BlKTsKKyAgICAgICAgICBpZiAoIWV4cHJlc3Npb25JbnB1dERpcnR5Q2hlY2sobmV3SW5wdXRW
YWx1ZSwgb2xkSW5wdXRWYWx1ZU9mKSkgeworICAgICAgICAgICAgbGFzdFJlc3VsdCA9IHBhcnNl
ZEV4cHJlc3Npb24oc2NvcGUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBbbmV3SW5wdXRWYWx1ZV0p
OworICAgICAgICAgICAgb2xkSW5wdXRWYWx1ZU9mID0gbmV3SW5wdXRWYWx1ZSAmJiBnZXRWYWx1
ZU9mKG5ld0lucHV0VmFsdWUpOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gbGFzdFJl
c3VsdDsKKyAgICAgICAgfSwgbGlzdGVuZXIsIG9iamVjdEVxdWFsaXR5LCBwcmV0dHlQcmludEV4
cHJlc3Npb24pOworICAgICAgfQorCisgICAgICB2YXIgb2xkSW5wdXRWYWx1ZU9mVmFsdWVzID0g
W107CisgICAgICB2YXIgb2xkSW5wdXRWYWx1ZXMgPSBbXTsKKyAgICAgIGZvciAodmFyIGkgPSAw
LCBpaSA9IGlucHV0RXhwcmVzc2lvbnMubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICBv
bGRJbnB1dFZhbHVlT2ZWYWx1ZXNbaV0gPSBleHByZXNzaW9uSW5wdXREaXJ0eUNoZWNrOyAvLyBp
bml0IHRvIHNvbWV0aGluZyB1bmlxdWUgc28gdGhhdCBlcXVhbHMgY2hlY2sgZmFpbHMKKyAgICAg
ICAgb2xkSW5wdXRWYWx1ZXNbaV0gPSBudWxsOworICAgICAgfQorCisgICAgICByZXR1cm4gc2Nv
cGUuJHdhdGNoKGZ1bmN0aW9uIGV4cHJlc3Npb25JbnB1dHNXYXRjaChzY29wZSkgeworICAgICAg
ICB2YXIgY2hhbmdlZCA9IGZhbHNlOworCisgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGlu
cHV0RXhwcmVzc2lvbnMubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgIHZhciBuZXdJ
bnB1dFZhbHVlID0gaW5wdXRFeHByZXNzaW9uc1tpXShzY29wZSk7CisgICAgICAgICAgaWYgKGNo
YW5nZWQgfHwgKGNoYW5nZWQgPSAhZXhwcmVzc2lvbklucHV0RGlydHlDaGVjayhuZXdJbnB1dFZh
bHVlLCBvbGRJbnB1dFZhbHVlT2ZWYWx1ZXNbaV0pKSkgeworICAgICAgICAgICAgb2xkSW5wdXRW
YWx1ZXNbaV0gPSBuZXdJbnB1dFZhbHVlOworICAgICAgICAgICAgb2xkSW5wdXRWYWx1ZU9mVmFs
dWVzW2ldID0gbmV3SW5wdXRWYWx1ZSAmJiBnZXRWYWx1ZU9mKG5ld0lucHV0VmFsdWUpOworICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChjaGFuZ2VkKSB7CisgICAgICAgICAg
bGFzdFJlc3VsdCA9IHBhcnNlZEV4cHJlc3Npb24oc2NvcGUsIHVuZGVmaW5lZCwgdW5kZWZpbmVk
LCBvbGRJbnB1dFZhbHVlcyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbGFzdFJlc3Vs
dDsKKyAgICAgIH0sIGxpc3RlbmVyLCBvYmplY3RFcXVhbGl0eSwgcHJldHR5UHJpbnRFeHByZXNz
aW9uKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBvbmVUaW1lV2F0Y2hEZWxlZ2F0ZShzY29wZSwg
bGlzdGVuZXIsIG9iamVjdEVxdWFsaXR5LCBwYXJzZWRFeHByZXNzaW9uKSB7CisgICAgICB2YXIg
dW53YXRjaCwgbGFzdFZhbHVlOworICAgICAgcmV0dXJuIHVud2F0Y2ggPSBzY29wZS4kd2F0Y2go
ZnVuY3Rpb24gb25lVGltZVdhdGNoKHNjb3BlKSB7CisgICAgICAgIHJldHVybiBwYXJzZWRFeHBy
ZXNzaW9uKHNjb3BlKTsKKyAgICAgIH0sIGZ1bmN0aW9uIG9uZVRpbWVMaXN0ZW5lcih2YWx1ZSwg
b2xkLCBzY29wZSkgeworICAgICAgICBsYXN0VmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgaWYgKGlz
RnVuY3Rpb24obGlzdGVuZXIpKSB7CisgICAgICAgICAgbGlzdGVuZXIuYXBwbHkodGhpcywgYXJn
dW1lbnRzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlKSkgeworICAg
ICAgICAgIHNjb3BlLiQkcG9zdERpZ2VzdChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmIChp
c0RlZmluZWQobGFzdFZhbHVlKSkgeworICAgICAgICAgICAgICB1bndhdGNoKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgIH0sIG9iamVjdEVxdWFsaXR5
KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBvbmVUaW1lTGl0ZXJhbFdhdGNoRGVsZWdhdGUoc2Nv
cGUsIGxpc3RlbmVyLCBvYmplY3RFcXVhbGl0eSwgcGFyc2VkRXhwcmVzc2lvbikgeworICAgICAg
dmFyIHVud2F0Y2gsIGxhc3RWYWx1ZTsKKyAgICAgIHJldHVybiB1bndhdGNoID0gc2NvcGUuJHdh
dGNoKGZ1bmN0aW9uIG9uZVRpbWVXYXRjaChzY29wZSkgeworICAgICAgICByZXR1cm4gcGFyc2Vk
RXhwcmVzc2lvbihzY29wZSk7CisgICAgICB9LCBmdW5jdGlvbiBvbmVUaW1lTGlzdGVuZXIodmFs
dWUsIG9sZCwgc2NvcGUpIHsKKyAgICAgICAgbGFzdFZhbHVlID0gdmFsdWU7CisgICAgICAgIGlm
IChpc0Z1bmN0aW9uKGxpc3RlbmVyKSkgeworICAgICAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywg
dmFsdWUsIG9sZCwgc2NvcGUpOworICAgICAgICB9CisgICAgICAgIGlmIChpc0FsbERlZmluZWQo
dmFsdWUpKSB7CisgICAgICAgICAgc2NvcGUuJCRwb3N0RGlnZXN0KGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgaWYgKGlzQWxsRGVmaW5lZChsYXN0VmFsdWUpKSB1bndhdGNoKCk7CisgICAgICAg
ICAgfSk7CisgICAgICAgIH0KKyAgICAgIH0sIG9iamVjdEVxdWFsaXR5KTsKKworICAgICAgZnVu
Y3Rpb24gaXNBbGxEZWZpbmVkKHZhbHVlKSB7CisgICAgICAgIHZhciBhbGxEZWZpbmVkID0gdHJ1
ZTsKKyAgICAgICAgZm9yRWFjaCh2YWx1ZSwgZnVuY3Rpb24odmFsKSB7CisgICAgICAgICAgaWYg
KCFpc0RlZmluZWQodmFsKSkgYWxsRGVmaW5lZCA9IGZhbHNlOworICAgICAgICB9KTsKKyAgICAg
ICAgcmV0dXJuIGFsbERlZmluZWQ7CisgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gY29u
c3RhbnRXYXRjaERlbGVnYXRlKHNjb3BlLCBsaXN0ZW5lciwgb2JqZWN0RXF1YWxpdHksIHBhcnNl
ZEV4cHJlc3Npb24pIHsKKyAgICAgIHZhciB1bndhdGNoOworICAgICAgcmV0dXJuIHVud2F0Y2gg
PSBzY29wZS4kd2F0Y2goZnVuY3Rpb24gY29uc3RhbnRXYXRjaChzY29wZSkgeworICAgICAgICBy
ZXR1cm4gcGFyc2VkRXhwcmVzc2lvbihzY29wZSk7CisgICAgICB9LCBmdW5jdGlvbiBjb25zdGFu
dExpc3RlbmVyKHZhbHVlLCBvbGQsIHNjb3BlKSB7CisgICAgICAgIGlmIChpc0Z1bmN0aW9uKGxp
c3RlbmVyKSkgeworICAgICAgICAgIGxpc3RlbmVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Cisg
ICAgICAgIH0KKyAgICAgICAgdW53YXRjaCgpOworICAgICAgfSwgb2JqZWN0RXF1YWxpdHkpOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIGFkZEludGVyY2VwdG9yKHBhcnNlZEV4cHJlc3Npb24sIGlu
dGVyY2VwdG9yRm4pIHsKKyAgICAgIGlmICghaW50ZXJjZXB0b3JGbikgcmV0dXJuIHBhcnNlZEV4
cHJlc3Npb247CisgICAgICB2YXIgd2F0Y2hEZWxlZ2F0ZSA9IHBhcnNlZEV4cHJlc3Npb24uJCR3
YXRjaERlbGVnYXRlOworCisgICAgICB2YXIgcmVndWxhcldhdGNoID0KKyAgICAgICAgICB3YXRj
aERlbGVnYXRlICE9PSBvbmVUaW1lTGl0ZXJhbFdhdGNoRGVsZWdhdGUgJiYKKyAgICAgICAgICB3
YXRjaERlbGVnYXRlICE9PSBvbmVUaW1lV2F0Y2hEZWxlZ2F0ZTsKKworICAgICAgdmFyIGZuID0g
cmVndWxhcldhdGNoID8gZnVuY3Rpb24gcmVndWxhckludGVyY2VwdGVkRXhwcmVzc2lvbihzY29w
ZSwgbG9jYWxzLCBhc3NpZ24sIGlucHV0cykgeworICAgICAgICB2YXIgdmFsdWUgPSBwYXJzZWRF
eHByZXNzaW9uKHNjb3BlLCBsb2NhbHMsIGFzc2lnbiwgaW5wdXRzKTsKKyAgICAgICAgcmV0dXJu
IGludGVyY2VwdG9yRm4odmFsdWUsIHNjb3BlLCBsb2NhbHMpOworICAgICAgfSA6IGZ1bmN0aW9u
IG9uZVRpbWVJbnRlcmNlcHRlZEV4cHJlc3Npb24oc2NvcGUsIGxvY2FscywgYXNzaWduLCBpbnB1
dHMpIHsKKyAgICAgICAgdmFyIHZhbHVlID0gcGFyc2VkRXhwcmVzc2lvbihzY29wZSwgbG9jYWxz
LCBhc3NpZ24sIGlucHV0cyk7CisgICAgICAgIHZhciByZXN1bHQgPSBpbnRlcmNlcHRvckZuKHZh
bHVlLCBzY29wZSwgbG9jYWxzKTsKKyAgICAgICAgLy8gd2Ugb25seSByZXR1cm4gdGhlIGludGVy
Y2VwdG9yJ3MgcmVzdWx0IGlmIHRoZQorICAgICAgICAvLyBpbml0aWFsIHZhbHVlIGlzIGRlZmlu
ZWQgKGZvciBiaW5kLW9uY2UpCisgICAgICAgIHJldHVybiBpc0RlZmluZWQodmFsdWUpID8gcmVz
dWx0IDogdmFsdWU7CisgICAgICB9OworCisgICAgICAvLyBQcm9wYWdhdGUgJCR3YXRjaERlbGVn
YXRlcyBvdGhlciB0aGVuIGlucHV0c1dhdGNoRGVsZWdhdGUKKyAgICAgIGlmIChwYXJzZWRFeHBy
ZXNzaW9uLiQkd2F0Y2hEZWxlZ2F0ZSAmJgorICAgICAgICAgIHBhcnNlZEV4cHJlc3Npb24uJCR3
YXRjaERlbGVnYXRlICE9PSBpbnB1dHNXYXRjaERlbGVnYXRlKSB7CisgICAgICAgIGZuLiQkd2F0
Y2hEZWxlZ2F0ZSA9IHBhcnNlZEV4cHJlc3Npb24uJCR3YXRjaERlbGVnYXRlOworICAgICAgfSBl
bHNlIGlmICghaW50ZXJjZXB0b3JGbi4kc3RhdGVmdWwpIHsKKyAgICAgICAgLy8gSWYgdGhlcmUg
aXMgYW4gaW50ZXJjZXB0b3IsIGJ1dCBubyB3YXRjaERlbGVnYXRlIHRoZW4gdHJlYXQgdGhlIGlu
dGVyY2VwdG9yIGxpa2UKKyAgICAgICAgLy8gd2UgdHJlYXQgZmlsdGVycyAtIGl0IGlzIGFzc3Vt
ZWQgdG8gYmUgYSBwdXJlIGZ1bmN0aW9uIHVubGVzcyBmbGFnZ2VkIHdpdGggJHN0YXRlZnVsCisg
ICAgICAgIGZuLiQkd2F0Y2hEZWxlZ2F0ZSA9IGlucHV0c1dhdGNoRGVsZWdhdGU7CisgICAgICAg
IGZuLmlucHV0cyA9IHBhcnNlZEV4cHJlc3Npb24uaW5wdXRzID8gcGFyc2VkRXhwcmVzc2lvbi5p
bnB1dHMgOiBbcGFyc2VkRXhwcmVzc2lvbl07CisgICAgICB9CisKKyAgICAgIHJldHVybiBmbjsK
KyAgICB9CisgIH1dOworfQorCisvKioKKyAqIEBuZ2RvYyBzZXJ2aWNlCisgKiBAbmFtZSAkcQor
ICogQHJlcXVpcmVzICRyb290U2NvcGUKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIEEgc2Vydmlj
ZSB0aGF0IGhlbHBzIHlvdSBydW4gZnVuY3Rpb25zIGFzeW5jaHJvbm91c2x5LCBhbmQgdXNlIHRo
ZWlyIHJldHVybiB2YWx1ZXMgKG9yIGV4Y2VwdGlvbnMpCisgKiB3aGVuIHRoZXkgYXJlIGRvbmUg
cHJvY2Vzc2luZy4KKyAqCisgKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHByb21pc2Vz
L2RlZmVycmVkIG9iamVjdHMgaW5zcGlyZWQgYnkKKyAqIFtLcmlzIEtvd2FsJ3MgUV0oaHR0cHM6
Ly9naXRodWIuY29tL2tyaXNrb3dhbC9xKS4KKyAqCisgKiAkcSBjYW4gYmUgdXNlZCBpbiB0d28g
ZmFzaGlvbnMgLS0tIG9uZSB3aGljaCBpcyBtb3JlIHNpbWlsYXIgdG8gS3JpcyBLb3dhbCdzIFEg
b3IgalF1ZXJ5J3MgRGVmZXJyZWQKKyAqIGltcGxlbWVudGF0aW9ucywgYW5kIHRoZSBvdGhlciB3
aGljaCByZXNlbWJsZXMgRVM2IHByb21pc2VzIHRvIHNvbWUgZGVncmVlLgorICoKKyAqICMgJHEg
Y29uc3RydWN0b3IKKyAqCisgKiBUaGUgc3RyZWFtbGluZWQgRVM2IHN0eWxlIHByb21pc2UgaXMg
ZXNzZW50aWFsbHkganVzdCB1c2luZyAkcSBhcyBhIGNvbnN0cnVjdG9yIHdoaWNoIHRha2VzIGEg
YHJlc29sdmVyYAorICogZnVuY3Rpb24gYXMgdGhlIGZpcnN0IGFyZ3VtZW50LiBUaGlzIGlzIHNp
bWlsYXIgdG8gdGhlIG5hdGl2ZSBQcm9taXNlIGltcGxlbWVudGF0aW9uIGZyb20gRVM2IEhhcm1v
bnksCisgKiBzZWUgW01ETl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9j
cy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvUHJvbWlzZSkuCisgKgor
ICogV2hpbGUgdGhlIGNvbnN0cnVjdG9yLXN0eWxlIHVzZSBpcyBzdXBwb3J0ZWQsIG5vdCBhbGwg
b2YgdGhlIHN1cHBvcnRpbmcgbWV0aG9kcyBmcm9tIEVTNiBIYXJtb255IHByb21pc2VzIGFyZQor
ICogYXZhaWxhYmxlIHlldC4KKyAqCisgKiBJdCBjYW4gYmUgdXNlZCBsaWtlIHNvOgorICoKKyAq
IGBgYGpzCisgKiAgIC8vIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIGV4YW1wbGUgbGV0J3MgYXNz
dW1lIHRoYXQgdmFyaWFibGVzIGAkcWAgYW5kIGBva1RvR3JlZXRgCisgKiAgIC8vIGFyZSBhdmFp
bGFibGUgaW4gdGhlIGN1cnJlbnQgbGV4aWNhbCBzY29wZSAodGhleSBjb3VsZCBoYXZlIGJlZW4g
aW5qZWN0ZWQgb3IgcGFzc2VkIGluKS4KKyAqCisgKiAgIGZ1bmN0aW9uIGFzeW5jR3JlZXQobmFt
ZSkgeworICogICAgIC8vIHBlcmZvcm0gc29tZSBhc3luY2hyb25vdXMgb3BlcmF0aW9uLCByZXNv
bHZlIG9yIHJlamVjdCB0aGUgcHJvbWlzZSB3aGVuIGFwcHJvcHJpYXRlLgorICogICAgIHJldHVy
biAkcShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAqICAgICAgIHNldFRpbWVvdXQoZnVu
Y3Rpb24oKSB7CisgKiAgICAgICAgIGlmIChva1RvR3JlZXQobmFtZSkpIHsKKyAqICAgICAgICAg
ICByZXNvbHZlKCdIZWxsbywgJyArIG5hbWUgKyAnIScpOworICogICAgICAgICB9IGVsc2Ugewor
ICogICAgICAgICAgIHJlamVjdCgnR3JlZXRpbmcgJyArIG5hbWUgKyAnIGlzIG5vdCBhbGxvd2Vk
LicpOworICogICAgICAgICB9CisgKiAgICAgICB9LCAxMDAwKTsKKyAqICAgICB9KTsKKyAqICAg
fQorICoKKyAqICAgdmFyIHByb21pc2UgPSBhc3luY0dyZWV0KCdSb2JpbiBIb29kJyk7CisgKiAg
IHByb21pc2UudGhlbihmdW5jdGlvbihncmVldGluZykgeworICogICAgIGFsZXJ0KCdTdWNjZXNz
OiAnICsgZ3JlZXRpbmcpOworICogICB9LCBmdW5jdGlvbihyZWFzb24pIHsKKyAqICAgICBhbGVy
dCgnRmFpbGVkOiAnICsgcmVhc29uKTsKKyAqICAgfSk7CisgKiBgYGAKKyAqCisgKiBOb3RlOiBw
cm9ncmVzcy9ub3RpZnkgY2FsbGJhY2tzIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZCB2aWEg
dGhlIEVTNi1zdHlsZSBpbnRlcmZhY2UuCisgKgorICogSG93ZXZlciwgdGhlIG1vcmUgdHJhZGl0
aW9uYWwgQ29tbW9uSlMtc3R5bGUgdXNhZ2UgaXMgc3RpbGwgYXZhaWxhYmxlLCBhbmQgZG9jdW1l
bnRlZCBiZWxvdy4KKyAqCisgKiBbVGhlIENvbW1vbkpTIFByb21pc2UgcHJvcG9zYWxdKGh0dHA6
Ly93aWtpLmNvbW1vbmpzLm9yZy93aWtpL1Byb21pc2VzKSBkZXNjcmliZXMgYSBwcm9taXNlIGFz
IGFuCisgKiBpbnRlcmZhY2UgZm9yIGludGVyYWN0aW5nIHdpdGggYW4gb2JqZWN0IHRoYXQgcmVw
cmVzZW50cyB0aGUgcmVzdWx0IG9mIGFuIGFjdGlvbiB0aGF0IGlzCisgKiBwZXJmb3JtZWQgYXN5
bmNocm9ub3VzbHksIGFuZCBtYXkgb3IgbWF5IG5vdCBiZSBmaW5pc2hlZCBhdCBhbnkgZ2l2ZW4g
cG9pbnQgaW4gdGltZS4KKyAqCisgKiBGcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBkZWFsaW5nIHdp
dGggZXJyb3IgaGFuZGxpbmcsIGRlZmVycmVkIGFuZCBwcm9taXNlIEFQSXMgYXJlIHRvCisgKiBh
c3luY2hyb25vdXMgcHJvZ3JhbW1pbmcgd2hhdCBgdHJ5YCwgYGNhdGNoYCBhbmQgYHRocm93YCBr
ZXl3b3JkcyBhcmUgdG8gc3luY2hyb25vdXMgcHJvZ3JhbW1pbmcuCisgKgorICogYGBganMKKyAq
ICAgLy8gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgZXhhbXBsZSBsZXQncyBhc3N1bWUgdGhhdCB2
YXJpYWJsZXMgYCRxYCBhbmQgYG9rVG9HcmVldGAKKyAqICAgLy8gYXJlIGF2YWlsYWJsZSBpbiB0
aGUgY3VycmVudCBsZXhpY2FsIHNjb3BlICh0aGV5IGNvdWxkIGhhdmUgYmVlbiBpbmplY3RlZCBv
ciBwYXNzZWQgaW4pLgorICoKKyAqICAgZnVuY3Rpb24gYXN5bmNHcmVldChuYW1lKSB7CisgKiAg
ICAgdmFyIGRlZmVycmVkID0gJHEuZGVmZXIoKTsKKyAqCisgKiAgICAgc2V0VGltZW91dChmdW5j
dGlvbigpIHsKKyAqICAgICAgIGRlZmVycmVkLm5vdGlmeSgnQWJvdXQgdG8gZ3JlZXQgJyArIG5h
bWUgKyAnLicpOworICoKKyAqICAgICAgIGlmIChva1RvR3JlZXQobmFtZSkpIHsKKyAqICAgICAg
ICAgZGVmZXJyZWQucmVzb2x2ZSgnSGVsbG8sICcgKyBuYW1lICsgJyEnKTsKKyAqICAgICAgIH0g
ZWxzZSB7CisgKiAgICAgICAgIGRlZmVycmVkLnJlamVjdCgnR3JlZXRpbmcgJyArIG5hbWUgKyAn
IGlzIG5vdCBhbGxvd2VkLicpOworICogICAgICAgfQorICogICAgIH0sIDEwMDApOworICoKKyAq
ICAgICByZXR1cm4gZGVmZXJyZWQucHJvbWlzZTsKKyAqICAgfQorICoKKyAqICAgdmFyIHByb21p
c2UgPSBhc3luY0dyZWV0KCdSb2JpbiBIb29kJyk7CisgKiAgIHByb21pc2UudGhlbihmdW5jdGlv
bihncmVldGluZykgeworICogICAgIGFsZXJ0KCdTdWNjZXNzOiAnICsgZ3JlZXRpbmcpOworICog
ICB9LCBmdW5jdGlvbihyZWFzb24pIHsKKyAqICAgICBhbGVydCgnRmFpbGVkOiAnICsgcmVhc29u
KTsKKyAqICAgfSwgZnVuY3Rpb24odXBkYXRlKSB7CisgKiAgICAgYWxlcnQoJ0dvdCBub3RpZmlj
YXRpb246ICcgKyB1cGRhdGUpOworICogICB9KTsKKyAqIGBgYAorICoKKyAqIEF0IGZpcnN0IGl0
IG1pZ2h0IG5vdCBiZSBvYnZpb3VzIHdoeSB0aGlzIGV4dHJhIGNvbXBsZXhpdHkgaXMgd29ydGgg
dGhlIHRyb3VibGUuIFRoZSBwYXlvZmYKKyAqIGNvbWVzIGluIHRoZSB3YXkgb2YgZ3VhcmFudGVl
cyB0aGF0IHByb21pc2UgYW5kIGRlZmVycmVkIEFQSXMgbWFrZSwgc2VlCisgKiBodHRwczovL2dp
dGh1Yi5jb20va3Jpc2tvd2FsL3VuY29tbW9uanMvYmxvYi9tYXN0ZXIvcHJvbWlzZXMvc3BlY2lm
aWNhdGlvbi5tZC4KKyAqCisgKiBBZGRpdGlvbmFsbHkgdGhlIHByb21pc2UgYXBpIGFsbG93cyBm
b3IgY29tcG9zaXRpb24gdGhhdCBpcyB2ZXJ5IGhhcmQgdG8gZG8gd2l0aCB0aGUKKyAqIHRyYWRp
dGlvbmFsIGNhbGxiYWNrIChbQ1BTXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbnRp
bnVhdGlvbi1wYXNzaW5nX3N0eWxlKSkgYXBwcm9hY2guCisgKiBGb3IgbW9yZSBvbiB0aGlzIHBs
ZWFzZSBzZWUgdGhlIFtRIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9rcmlza293
YWwvcSkgZXNwZWNpYWxseSB0aGUKKyAqIHNlY3Rpb24gb24gc2VyaWFsIG9yIHBhcmFsbGVsIGpv
aW5pbmcgb2YgcHJvbWlzZXMuCisgKgorICogIyBUaGUgRGVmZXJyZWQgQVBJCisgKgorICogQSBu
ZXcgaW5zdGFuY2Ugb2YgZGVmZXJyZWQgaXMgY29uc3RydWN0ZWQgYnkgY2FsbGluZyBgJHEuZGVm
ZXIoKWAuCisgKgorICogVGhlIHB1cnBvc2Ugb2YgdGhlIGRlZmVycmVkIG9iamVjdCBpcyB0byBl
eHBvc2UgdGhlIGFzc29jaWF0ZWQgUHJvbWlzZSBpbnN0YW5jZSBhcyB3ZWxsIGFzIEFQSXMKKyAq
IHRoYXQgY2FuIGJlIHVzZWQgZm9yIHNpZ25hbGluZyB0aGUgc3VjY2Vzc2Z1bCBvciB1bnN1Y2Nl
c3NmdWwgY29tcGxldGlvbiwgYXMgd2VsbCBhcyB0aGUgc3RhdHVzCisgKiBvZiB0aGUgdGFzay4K
KyAqCisgKiAqKk1ldGhvZHMqKgorICoKKyAqIC0gYHJlc29sdmUodmFsdWUpYCDigJMgcmVzb2x2
ZXMgdGhlIGRlcml2ZWQgcHJvbWlzZSB3aXRoIHRoZSBgdmFsdWVgLiBJZiB0aGUgdmFsdWUgaXMg
YSByZWplY3Rpb24KKyAqICAgY29uc3RydWN0ZWQgdmlhIGAkcS5yZWplY3RgLCB0aGUgcHJvbWlz
ZSB3aWxsIGJlIHJlamVjdGVkIGluc3RlYWQuCisgKiAtIGByZWplY3QocmVhc29uKWAg4oCTIHJl
amVjdHMgdGhlIGRlcml2ZWQgcHJvbWlzZSB3aXRoIHRoZSBgcmVhc29uYC4gVGhpcyBpcyBlcXVp
dmFsZW50IHRvCisgKiAgIHJlc29sdmluZyBpdCB3aXRoIGEgcmVqZWN0aW9uIGNvbnN0cnVjdGVk
IHZpYSBgJHEucmVqZWN0YC4KKyAqIC0gYG5vdGlmeSh2YWx1ZSlgIC0gcHJvdmlkZXMgdXBkYXRl
cyBvbiB0aGUgc3RhdHVzIG9mIHRoZSBwcm9taXNlJ3MgZXhlY3V0aW9uLiBUaGlzIG1heSBiZSBj
YWxsZWQKKyAqICAgbXVsdGlwbGUgdGltZXMgYmVmb3JlIHRoZSBwcm9taXNlIGlzIGVpdGhlciBy
ZXNvbHZlZCBvciByZWplY3RlZC4KKyAqCisgKiAqKlByb3BlcnRpZXMqKgorICoKKyAqIC0gcHJv
bWlzZSDigJMgYHtQcm9taXNlfWAg4oCTIHByb21pc2Ugb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0
aGlzIGRlZmVycmVkLgorICoKKyAqCisgKiAjIFRoZSBQcm9taXNlIEFQSQorICoKKyAqIEEgbmV3
IHByb21pc2UgaW5zdGFuY2UgaXMgY3JlYXRlZCB3aGVuIGEgZGVmZXJyZWQgaW5zdGFuY2UgaXMg
Y3JlYXRlZCBhbmQgY2FuIGJlIHJldHJpZXZlZCBieQorICogY2FsbGluZyBgZGVmZXJyZWQucHJv
bWlzZWAuCisgKgorICogVGhlIHB1cnBvc2Ugb2YgdGhlIHByb21pc2Ugb2JqZWN0IGlzIHRvIGFs
bG93IGZvciBpbnRlcmVzdGVkIHBhcnRpZXMgdG8gZ2V0IGFjY2VzcyB0byB0aGUgcmVzdWx0Cisg
KiBvZiB0aGUgZGVmZXJyZWQgdGFzayB3aGVuIGl0IGNvbXBsZXRlcy4KKyAqCisgKiAqKk1ldGhv
ZHMqKgorICoKKyAqIC0gYHRoZW4oc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBub3Rp
ZnlDYWxsYmFjaylgIOKAkyByZWdhcmRsZXNzIG9mIHdoZW4gdGhlIHByb21pc2Ugd2FzIG9yCisg
KiAgIHdpbGwgYmUgcmVzb2x2ZWQgb3IgcmVqZWN0ZWQsIGB0aGVuYCBjYWxscyBvbmUgb2YgdGhl
IHN1Y2Nlc3Mgb3IgZXJyb3IgY2FsbGJhY2tzIGFzeW5jaHJvbm91c2x5CisgKiAgIGFzIHNvb24g
YXMgdGhlIHJlc3VsdCBpcyBhdmFpbGFibGUuIFRoZSBjYWxsYmFja3MgYXJlIGNhbGxlZCB3aXRo
IGEgc2luZ2xlIGFyZ3VtZW50OiB0aGUgcmVzdWx0CisgKiAgIG9yIHJlamVjdGlvbiByZWFzb24u
IEFkZGl0aW9uYWxseSwgdGhlIG5vdGlmeSBjYWxsYmFjayBtYXkgYmUgY2FsbGVkIHplcm8gb3Ig
bW9yZSB0aW1lcyB0bworICogICBwcm92aWRlIGEgcHJvZ3Jlc3MgaW5kaWNhdGlvbiwgYmVmb3Jl
IHRoZSBwcm9taXNlIGlzIHJlc29sdmVkIG9yIHJlamVjdGVkLgorICoKKyAqICAgVGhpcyBtZXRo
b2QgKnJldHVybnMgYSBuZXcgcHJvbWlzZSogd2hpY2ggaXMgcmVzb2x2ZWQgb3IgcmVqZWN0ZWQg
dmlhIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlCisgKiAgIGBzdWNjZXNzQ2FsbGJhY2tgLCBgZXJy
b3JDYWxsYmFja2AgKHVubGVzcyB0aGF0IHZhbHVlIGlzIGEgcHJvbWlzZSwgaW4gd2hpY2ggY2Fz
ZSBpdCBpcyByZXNvbHZlZAorICogICB3aXRoIHRoZSB2YWx1ZSB3aGljaCBpcyByZXNvbHZlZCBp
biB0aGF0IHByb21pc2UgdXNpbmcKKyAqICAgW3Byb21pc2UgY2hhaW5pbmddKGh0dHA6Ly93d3cu
aHRtbDVyb2Nrcy5jb20vZW4vdHV0b3JpYWxzL2VzNi9wcm9taXNlcy8jdG9jLXByb21pc2VzLXF1
ZXVlcykpLgorICogICBJdCBhbHNvIG5vdGlmaWVzIHZpYSB0aGUgcmV0dXJuIHZhbHVlIG9mIHRo
ZSBgbm90aWZ5Q2FsbGJhY2tgIG1ldGhvZC4gVGhlIHByb21pc2UgY2Fubm90IGJlCisgKiAgIHJl
c29sdmVkIG9yIHJlamVjdGVkIGZyb20gdGhlIG5vdGlmeUNhbGxiYWNrIG1ldGhvZC4KKyAqCisg
KiAtIGBjYXRjaChlcnJvckNhbGxiYWNrKWAg4oCTIHNob3J0aGFuZCBmb3IgYHByb21pc2UudGhl
bihudWxsLCBlcnJvckNhbGxiYWNrKWAKKyAqCisgKiAtIGBmaW5hbGx5KGNhbGxiYWNrLCBub3Rp
ZnlDYWxsYmFjaylgIOKAkyBhbGxvd3MgeW91IHRvIG9ic2VydmUgZWl0aGVyIHRoZSBmdWxmaWxs
bWVudCBvciByZWplY3Rpb24gb2YgYSBwcm9taXNlLAorICogICBidXQgdG8gZG8gc28gd2l0aG91
dCBtb2RpZnlpbmcgdGhlIGZpbmFsIHZhbHVlLiBUaGlzIGlzIHVzZWZ1bCB0byByZWxlYXNlIHJl
c291cmNlcyBvciBkbyBzb21lCisgKiAgIGNsZWFuLXVwIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSB3
aGV0aGVyIHRoZSBwcm9taXNlIHdhcyByZWplY3RlZCBvciByZXNvbHZlZC4gU2VlIHRoZSBbZnVs
bAorICogICBzcGVjaWZpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20va3Jpc2tvd2FsL3Evd2lr
aS9BUEktUmVmZXJlbmNlI3Byb21pc2VmaW5hbGx5Y2FsbGJhY2spIGZvcgorICogICBtb3JlIGlu
Zm9ybWF0aW9uLgorICoKKyAqICMgQ2hhaW5pbmcgcHJvbWlzZXMKKyAqCisgKiBCZWNhdXNlIGNh
bGxpbmcgdGhlIGB0aGVuYCBtZXRob2Qgb2YgYSBwcm9taXNlIHJldHVybnMgYSBuZXcgZGVyaXZl
ZCBwcm9taXNlLCBpdCBpcyBlYXNpbHkKKyAqIHBvc3NpYmxlIHRvIGNyZWF0ZSBhIGNoYWluIG9m
IHByb21pc2VzOgorICoKKyAqIGBgYGpzCisgKiAgIHByb21pc2VCID0gcHJvbWlzZUEudGhlbihm
dW5jdGlvbihyZXN1bHQpIHsKKyAqICAgICByZXR1cm4gcmVzdWx0ICsgMTsKKyAqICAgfSk7Cisg
KgorICogICAvLyBwcm9taXNlQiB3aWxsIGJlIHJlc29sdmVkIGltbWVkaWF0ZWx5IGFmdGVyIHBy
b21pc2VBIGlzIHJlc29sdmVkIGFuZCBpdHMgdmFsdWUKKyAqICAgLy8gd2lsbCBiZSB0aGUgcmVz
dWx0IG9mIHByb21pc2VBIGluY3JlbWVudGVkIGJ5IDEKKyAqIGBgYAorICoKKyAqIEl0IGlzIHBv
c3NpYmxlIHRvIGNyZWF0ZSBjaGFpbnMgb2YgYW55IGxlbmd0aCBhbmQgc2luY2UgYSBwcm9taXNl
IGNhbiBiZSByZXNvbHZlZCB3aXRoIGFub3RoZXIKKyAqIHByb21pc2UgKHdoaWNoIHdpbGwgZGVm
ZXIgaXRzIHJlc29sdXRpb24gZnVydGhlciksIGl0IGlzIHBvc3NpYmxlIHRvIHBhdXNlL2RlZmVy
IHJlc29sdXRpb24gb2YKKyAqIHRoZSBwcm9taXNlcyBhdCBhbnkgcG9pbnQgaW4gdGhlIGNoYWlu
LiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGltcGxlbWVudCBwb3dlcmZ1bCBBUElzIGxpa2UK
KyAqICRodHRwJ3MgcmVzcG9uc2UgaW50ZXJjZXB0b3JzLgorICoKKyAqCisgKiAjIERpZmZlcmVu
Y2VzIGJldHdlZW4gS3JpcyBLb3dhbCdzIFEgYW5kICRxCisgKgorICogIFRoZXJlIGFyZSB0d28g
bWFpbiBkaWZmZXJlbmNlczoKKyAqCisgKiAtICRxIGlzIGludGVncmF0ZWQgd2l0aCB0aGUge0Bs
aW5rIG5nLiRyb290U2NvcGUuU2NvcGV9IFNjb3BlIG1vZGVsIG9ic2VydmF0aW9uCisgKiAgIG1l
Y2hhbmlzbSBpbiBhbmd1bGFyLCB3aGljaCBtZWFucyBmYXN0ZXIgcHJvcGFnYXRpb24gb2YgcmVz
b2x1dGlvbiBvciByZWplY3Rpb24gaW50byB5b3VyCisgKiAgIG1vZGVscyBhbmQgYXZvaWRpbmcg
dW5uZWNlc3NhcnkgYnJvd3NlciByZXBhaW50cywgd2hpY2ggd291bGQgcmVzdWx0IGluIGZsaWNr
ZXJpbmcgVUkuCisgKiAtIFEgaGFzIG1hbnkgbW9yZSBmZWF0dXJlcyB0aGFuICRxLCBidXQgdGhh
dCBjb21lcyBhdCBhIGNvc3Qgb2YgYnl0ZXMuICRxIGlzIHRpbnksIGJ1dCBjb250YWlucworICog
ICBhbGwgdGhlIGltcG9ydGFudCBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgY29tbW9uIGFzeW5j
IHRhc2tzLgorICoKKyAqICAjIFRlc3RpbmcKKyAqCisgKiAgYGBganMKKyAqICAgIGl0KCdzaG91
bGQgc2ltdWxhdGUgcHJvbWlzZScsIGluamVjdChmdW5jdGlvbigkcSwgJHJvb3RTY29wZSkgewor
ICogICAgICB2YXIgZGVmZXJyZWQgPSAkcS5kZWZlcigpOworICogICAgICB2YXIgcHJvbWlzZSA9
IGRlZmVycmVkLnByb21pc2U7CisgKiAgICAgIHZhciByZXNvbHZlZFZhbHVlOworICoKKyAqICAg
ICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7IHJlc29sdmVkVmFsdWUgPSB2YWx1ZTsg
fSk7CisgKiAgICAgIGV4cGVjdChyZXNvbHZlZFZhbHVlKS50b0JlVW5kZWZpbmVkKCk7CisgKgor
ICogICAgICAvLyBTaW11bGF0ZSByZXNvbHZpbmcgb2YgcHJvbWlzZQorICogICAgICBkZWZlcnJl
ZC5yZXNvbHZlKDEyMyk7CisgKiAgICAgIC8vIE5vdGUgdGhhdCB0aGUgJ3RoZW4nIGZ1bmN0aW9u
IGRvZXMgbm90IGdldCBjYWxsZWQgc3luY2hyb25vdXNseS4KKyAqICAgICAgLy8gVGhpcyBpcyBi
ZWNhdXNlIHdlIHdhbnQgdGhlIHByb21pc2UgQVBJIHRvIGFsd2F5cyBiZSBhc3luYywgd2hldGhl
ciBvciBub3QKKyAqICAgICAgLy8gaXQgZ290IGNhbGxlZCBzeW5jaHJvbm91c2x5IG9yIGFzeW5j
aHJvbm91c2x5LgorICogICAgICBleHBlY3QocmVzb2x2ZWRWYWx1ZSkudG9CZVVuZGVmaW5lZCgp
OworICoKKyAqICAgICAgLy8gUHJvcGFnYXRlIHByb21pc2UgcmVzb2x1dGlvbiB0byAndGhlbicg
ZnVuY3Rpb25zIHVzaW5nICRhcHBseSgpLgorICogICAgICAkcm9vdFNjb3BlLiRhcHBseSgpOwor
ICogICAgICBleHBlY3QocmVzb2x2ZWRWYWx1ZSkudG9FcXVhbCgxMjMpOworICogICAgfSkpOwor
ICogIGBgYAorICoKKyAqIEBwYXJhbSB7ZnVuY3Rpb24oZnVuY3Rpb24sIGZ1bmN0aW9uKX0gcmVz
b2x2ZXIgRnVuY3Rpb24gd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIHJlc29sdmluZyBvcgorICog
ICByZWplY3RpbmcgdGhlIG5ld2x5IGNyZWF0ZWQgcHJvbWlzZS4gVGhlIGZpcnN0IHBhcmFtZXRl
ciBpcyBhIGZ1bmN0aW9uIHdoaWNoIHJlc29sdmVzIHRoZQorICogICBwcm9taXNlLCB0aGUgc2Vj
b25kIHBhcmFtZXRlciBpcyBhIGZ1bmN0aW9uIHdoaWNoIHJlamVjdHMgdGhlIHByb21pc2UuCisg
KgorICogQHJldHVybnMge1Byb21pc2V9IFRoZSBuZXdseSBjcmVhdGVkIHByb21pc2UuCisgKi8K
K2Z1bmN0aW9uICRRUHJvdmlkZXIoKSB7CisKKyAgdGhpcy4kZ2V0ID0gWyckcm9vdFNjb3BlJywg
JyRleGNlcHRpb25IYW5kbGVyJywgZnVuY3Rpb24oJHJvb3RTY29wZSwgJGV4Y2VwdGlvbkhhbmRs
ZXIpIHsKKyAgICByZXR1cm4gcUZhY3RvcnkoZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgICAgICRy
b290U2NvcGUuJGV2YWxBc3luYyhjYWxsYmFjayk7CisgICAgfSwgJGV4Y2VwdGlvbkhhbmRsZXIp
OworICB9XTsKK30KKworZnVuY3Rpb24gJCRRUHJvdmlkZXIoKSB7CisgIHRoaXMuJGdldCA9IFsn
JGJyb3dzZXInLCAnJGV4Y2VwdGlvbkhhbmRsZXInLCBmdW5jdGlvbigkYnJvd3NlciwgJGV4Y2Vw
dGlvbkhhbmRsZXIpIHsKKyAgICByZXR1cm4gcUZhY3RvcnkoZnVuY3Rpb24oY2FsbGJhY2spIHsK
KyAgICAgICRicm93c2VyLmRlZmVyKGNhbGxiYWNrKTsKKyAgICB9LCAkZXhjZXB0aW9uSGFuZGxl
cik7CisgIH1dOworfQorCisvKioKKyAqIENvbnN0cnVjdHMgYSBwcm9taXNlIG1hbmFnZXIuCisg
KgorICogQHBhcmFtIHtmdW5jdGlvbihmdW5jdGlvbil9IG5leHRUaWNrIEZ1bmN0aW9uIGZvciBl
eGVjdXRpbmcgZnVuY3Rpb25zIGluIHRoZSBuZXh0IHR1cm4uCisgKiBAcGFyYW0ge2Z1bmN0aW9u
KC4uLiopfSBleGNlcHRpb25IYW5kbGVyIEZ1bmN0aW9uIGludG8gd2hpY2ggdW5leHBlY3RlZCBl
eGNlcHRpb25zIGFyZSBwYXNzZWQgZm9yCisgKiAgICAgZGVidWdnaW5nIHB1cnBvc2VzLgorICog
QHJldHVybnMge29iamVjdH0gUHJvbWlzZSBtYW5hZ2VyLgorICovCitmdW5jdGlvbiBxRmFjdG9y
eShuZXh0VGljaywgZXhjZXB0aW9uSGFuZGxlcikgeworICB2YXIgJHFNaW5FcnIgPSBtaW5FcnIo
JyRxJywgVHlwZUVycm9yKTsKKyAgZnVuY3Rpb24gY2FsbE9uY2Uoc2VsZiwgcmVzb2x2ZUZuLCBy
ZWplY3RGbikgeworICAgIHZhciBjYWxsZWQgPSBmYWxzZTsKKyAgICBmdW5jdGlvbiB3cmFwKGZu
KSB7CisgICAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgaWYgKGNhbGxlZCkg
cmV0dXJuOworICAgICAgICBjYWxsZWQgPSB0cnVlOworICAgICAgICBmbi5jYWxsKHNlbGYsIHZh
bHVlKTsKKyAgICAgIH07CisgICAgfQorCisgICAgcmV0dXJuIFt3cmFwKHJlc29sdmVGbiksIHdy
YXAocmVqZWN0Rm4pXTsKKyAgfQorCisgIC8qKgorICAgKiBAbmdkb2MgbWV0aG9kCisgICAqIEBu
YW1lIG5nLiRxI2RlZmVyCisgICAqIEBraW5kIGZ1bmN0aW9uCisgICAqCisgICAqIEBkZXNjcmlw
dGlvbgorICAgKiBDcmVhdGVzIGEgYERlZmVycmVkYCBvYmplY3Qgd2hpY2ggcmVwcmVzZW50cyBh
IHRhc2sgd2hpY2ggd2lsbCBmaW5pc2ggaW4gdGhlIGZ1dHVyZS4KKyAgICoKKyAgICogQHJldHVy
bnMge0RlZmVycmVkfSBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIGRlZmVycmVkLgorICAgKi8K
KyAgdmFyIGRlZmVyID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBEZWZlcnJlZCgpOwor
ICB9OworCisgIGZ1bmN0aW9uIFByb21pc2UoKSB7CisgICAgdGhpcy4kJHN0YXRlID0geyBzdGF0
dXM6IDAgfTsKKyAgfQorCisgIFByb21pc2UucHJvdG90eXBlID0geworICAgIHRoZW46IGZ1bmN0
aW9uKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBwcm9ncmVzc0JhY2spIHsKKyAgICAgIHZhciBy
ZXN1bHQgPSBuZXcgRGVmZXJyZWQoKTsKKworICAgICAgdGhpcy4kJHN0YXRlLnBlbmRpbmcgPSB0
aGlzLiQkc3RhdGUucGVuZGluZyB8fCBbXTsKKyAgICAgIHRoaXMuJCRzdGF0ZS5wZW5kaW5nLnB1
c2goW3Jlc3VsdCwgb25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHByb2dyZXNzQmFja10pOworICAg
ICAgaWYgKHRoaXMuJCRzdGF0ZS5zdGF0dXMgPiAwKSBzY2hlZHVsZVByb2Nlc3NRdWV1ZSh0aGlz
LiQkc3RhdGUpOworCisgICAgICByZXR1cm4gcmVzdWx0LnByb21pc2U7CisgICAgfSwKKworICAg
ICJjYXRjaCI6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7CisgICAgICByZXR1cm4gdGhpcy50aGVuKG51
bGwsIGNhbGxiYWNrKTsKKyAgICB9LAorCisgICAgImZpbmFsbHkiOiBmdW5jdGlvbihjYWxsYmFj
aywgcHJvZ3Jlc3NCYWNrKSB7CisgICAgICByZXR1cm4gdGhpcy50aGVuKGZ1bmN0aW9uKHZhbHVl
KSB7CisgICAgICAgIHJldHVybiBoYW5kbGVDYWxsYmFjayh2YWx1ZSwgdHJ1ZSwgY2FsbGJhY2sp
OworICAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHsKKyAgICAgICAgcmV0dXJuIGhhbmRsZUNhbGxi
YWNrKGVycm9yLCBmYWxzZSwgY2FsbGJhY2spOworICAgICAgfSwgcHJvZ3Jlc3NCYWNrKTsKKyAg
ICB9CisgIH07CisKKyAgLy9GYXN0ZXIsIG1vcmUgYmFzaWMgdGhhbiBhbmd1bGFyLmJpbmQgaHR0
cDovL2pzcGVyZi5jb20vYW5ndWxhci1iaW5kLXZzLWN1c3RvbS12cy1uYXRpdmUKKyAgZnVuY3Rp
b24gc2ltcGxlQmluZChjb250ZXh0LCBmbikgeworICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkg
eworICAgICAgZm4uY2FsbChjb250ZXh0LCB2YWx1ZSk7CisgICAgfTsKKyAgfQorCisgIGZ1bmN0
aW9uIHByb2Nlc3NRdWV1ZShzdGF0ZSkgeworICAgIHZhciBmbiwgZGVmZXJyZWQsIHBlbmRpbmc7
CisKKyAgICBwZW5kaW5nID0gc3RhdGUucGVuZGluZzsKKyAgICBzdGF0ZS5wcm9jZXNzU2NoZWR1
bGVkID0gZmFsc2U7CisgICAgc3RhdGUucGVuZGluZyA9IHVuZGVmaW5lZDsKKyAgICBmb3IgKHZh
ciBpID0gMCwgaWkgPSBwZW5kaW5nLmxlbmd0aDsgaSA8IGlpOyArK2kpIHsKKyAgICAgIGRlZmVy
cmVkID0gcGVuZGluZ1tpXVswXTsKKyAgICAgIGZuID0gcGVuZGluZ1tpXVtzdGF0ZS5zdGF0dXNd
OworICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKGlzRnVuY3Rpb24oZm4pKSB7CisgICAgICAgICAg
ZGVmZXJyZWQucmVzb2x2ZShmbihzdGF0ZS52YWx1ZSkpOworICAgICAgICB9IGVsc2UgaWYgKHN0
YXRlLnN0YXR1cyA9PT0gMSkgeworICAgICAgICAgIGRlZmVycmVkLnJlc29sdmUoc3RhdGUudmFs
dWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGRlZmVycmVkLnJlamVjdChzdGF0ZS52
YWx1ZSk7CisgICAgICAgIH0KKyAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZGVmZXJyZWQu
cmVqZWN0KGUpOworICAgICAgICBleGNlcHRpb25IYW5kbGVyKGUpOworICAgICAgfQorICAgIH0K
KyAgfQorCisgIGZ1bmN0aW9uIHNjaGVkdWxlUHJvY2Vzc1F1ZXVlKHN0YXRlKSB7CisgICAgaWYg
KHN0YXRlLnByb2Nlc3NTY2hlZHVsZWQgfHwgIXN0YXRlLnBlbmRpbmcpIHJldHVybjsKKyAgICBz
dGF0ZS5wcm9jZXNzU2NoZWR1bGVkID0gdHJ1ZTsKKyAgICBuZXh0VGljayhmdW5jdGlvbigpIHsg
cHJvY2Vzc1F1ZXVlKHN0YXRlKTsgfSk7CisgIH0KKworICBmdW5jdGlvbiBEZWZlcnJlZCgpIHsK
KyAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZSgpOworICAgIC8vTmVjZXNzYXJ5IHRvIHN1
cHBvcnQgdW5ib3VuZCBleGVjdXRpb24gOi8KKyAgICB0aGlzLnJlc29sdmUgPSBzaW1wbGVCaW5k
KHRoaXMsIHRoaXMucmVzb2x2ZSk7CisgICAgdGhpcy5yZWplY3QgPSBzaW1wbGVCaW5kKHRoaXMs
IHRoaXMucmVqZWN0KTsKKyAgICB0aGlzLm5vdGlmeSA9IHNpbXBsZUJpbmQodGhpcywgdGhpcy5u
b3RpZnkpOworICB9CisKKyAgRGVmZXJyZWQucHJvdG90eXBlID0geworICAgIHJlc29sdmU6IGZ1
bmN0aW9uKHZhbCkgeworICAgICAgaWYgKHRoaXMucHJvbWlzZS4kJHN0YXRlLnN0YXR1cykgcmV0
dXJuOworICAgICAgaWYgKHZhbCA9PT0gdGhpcy5wcm9taXNlKSB7CisgICAgICAgIHRoaXMuJCRy
ZWplY3QoJHFNaW5FcnIoCisgICAgICAgICAgJ3FjeWNsZScsCisgICAgICAgICAgIkV4cGVjdGVk
IHByb21pc2UgdG8gYmUgcmVzb2x2ZWQgd2l0aCB2YWx1ZSBvdGhlciB0aGFuIGl0c2VsZiAnezB9
JyIsCisgICAgICAgICAgdmFsKSk7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLiQkcmVz
b2x2ZSh2YWwpOworICAgICAgfQorCisgICAgfSwKKworICAgICQkcmVzb2x2ZTogZnVuY3Rpb24o
dmFsKSB7CisgICAgICB2YXIgdGhlbiwgZm5zOworCisgICAgICBmbnMgPSBjYWxsT25jZSh0aGlz
LCB0aGlzLiQkcmVzb2x2ZSwgdGhpcy4kJHJlamVjdCk7CisgICAgICB0cnkgeworICAgICAgICBp
ZiAoKGlzT2JqZWN0KHZhbCkgfHwgaXNGdW5jdGlvbih2YWwpKSkgdGhlbiA9IHZhbCAmJiB2YWwu
dGhlbjsKKyAgICAgICAgaWYgKGlzRnVuY3Rpb24odGhlbikpIHsKKyAgICAgICAgICB0aGlzLnBy
b21pc2UuJCRzdGF0ZS5zdGF0dXMgPSAtMTsKKyAgICAgICAgICB0aGVuLmNhbGwodmFsLCBmbnNb
MF0sIGZuc1sxXSwgdGhpcy5ub3RpZnkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRo
aXMucHJvbWlzZS4kJHN0YXRlLnZhbHVlID0gdmFsOworICAgICAgICAgIHRoaXMucHJvbWlzZS4k
JHN0YXRlLnN0YXR1cyA9IDE7CisgICAgICAgICAgc2NoZWR1bGVQcm9jZXNzUXVldWUodGhpcy5w
cm9taXNlLiQkc3RhdGUpOworICAgICAgICB9CisgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAg
IGZuc1sxXShlKTsKKyAgICAgICAgZXhjZXB0aW9uSGFuZGxlcihlKTsKKyAgICAgIH0KKyAgICB9
LAorCisgICAgcmVqZWN0OiBmdW5jdGlvbihyZWFzb24pIHsKKyAgICAgIGlmICh0aGlzLnByb21p
c2UuJCRzdGF0ZS5zdGF0dXMpIHJldHVybjsKKyAgICAgIHRoaXMuJCRyZWplY3QocmVhc29uKTsK
KyAgICB9LAorCisgICAgJCRyZWplY3Q6IGZ1bmN0aW9uKHJlYXNvbikgeworICAgICAgdGhpcy5w
cm9taXNlLiQkc3RhdGUudmFsdWUgPSByZWFzb247CisgICAgICB0aGlzLnByb21pc2UuJCRzdGF0
ZS5zdGF0dXMgPSAyOworICAgICAgc2NoZWR1bGVQcm9jZXNzUXVldWUodGhpcy5wcm9taXNlLiQk
c3RhdGUpOworICAgIH0sCisKKyAgICBub3RpZnk6IGZ1bmN0aW9uKHByb2dyZXNzKSB7CisgICAg
ICB2YXIgY2FsbGJhY2tzID0gdGhpcy5wcm9taXNlLiQkc3RhdGUucGVuZGluZzsKKworICAgICAg
aWYgKCh0aGlzLnByb21pc2UuJCRzdGF0ZS5zdGF0dXMgPD0gMCkgJiYgY2FsbGJhY2tzICYmIGNh
bGxiYWNrcy5sZW5ndGgpIHsKKyAgICAgICAgbmV4dFRpY2soZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgdmFyIGNhbGxiYWNrLCByZXN1bHQ7CisgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0g
Y2FsbGJhY2tzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGNh
bGxiYWNrc1tpXVswXTsKKyAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2tzW2ldWzNdOwor
ICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgcmVzdWx0Lm5vdGlmeShpc0Z1bmN0aW9u
KGNhbGxiYWNrKSA/IGNhbGxiYWNrKHByb2dyZXNzKSA6IHByb2dyZXNzKTsKKyAgICAgICAgICAg
IH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlcihlKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgfQorICAgIH0KKyAgfTsK
KworICAvKioKKyAgICogQG5nZG9jIG1ldGhvZAorICAgKiBAbmFtZSAkcSNyZWplY3QKKyAgICog
QGtpbmQgZnVuY3Rpb24KKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIENyZWF0ZXMgYSBw
cm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgYXMgcmVqZWN0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGBy
ZWFzb25gLiBUaGlzIGFwaSBzaG91bGQgYmUKKyAgICogdXNlZCB0byBmb3J3YXJkIHJlamVjdGlv
biBpbiBhIGNoYWluIG9mIHByb21pc2VzLiBJZiB5b3UgYXJlIGRlYWxpbmcgd2l0aCB0aGUgbGFz
dCBwcm9taXNlIGluCisgICAqIGEgcHJvbWlzZSBjaGFpbiwgeW91IGRvbid0IG5lZWQgdG8gd29y
cnkgYWJvdXQgaXQuCisgICAqCisgICAqIFdoZW4gY29tcGFyaW5nIGRlZmVycmVkcy9wcm9taXNl
cyB0byB0aGUgZmFtaWxpYXIgYmVoYXZpb3Igb2YgdHJ5L2NhdGNoL3Rocm93LCB0aGluayBvZgor
ICAgKiBgcmVqZWN0YCBhcyB0aGUgYHRocm93YCBrZXl3b3JkIGluIEphdmFTY3JpcHQuIFRoaXMg
YWxzbyBtZWFucyB0aGF0IGlmIHlvdSAiY2F0Y2giIGFuIGVycm9yIHZpYQorICAgKiBhIHByb21p
c2UgZXJyb3IgY2FsbGJhY2sgYW5kIHlvdSB3YW50IHRvIGZvcndhcmQgdGhlIGVycm9yIHRvIHRo
ZSBwcm9taXNlIGRlcml2ZWQgZnJvbSB0aGUKKyAgICogY3VycmVudCBwcm9taXNlLCB5b3UgaGF2
ZSB0byAicmV0aHJvdyIgdGhlIGVycm9yIGJ5IHJldHVybmluZyBhIHJlamVjdGlvbiBjb25zdHJ1
Y3RlZCB2aWEKKyAgICogYHJlamVjdGAuCisgICAqCisgICAqIGBgYGpzCisgICAqICAgcHJvbWlz
ZUIgPSBwcm9taXNlQS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgKiAgICAgLy8gc3VjY2Vz
czogZG8gc29tZXRoaW5nIGFuZCByZXNvbHZlIHByb21pc2VCCisgICAqICAgICAvLyAgICAgICAg
ICB3aXRoIHRoZSBvbGQgb3IgYSBuZXcgcmVzdWx0CisgICAqICAgICByZXR1cm4gcmVzdWx0Owor
ICAgKiAgIH0sIGZ1bmN0aW9uKHJlYXNvbikgeworICAgKiAgICAgLy8gZXJyb3I6IGhhbmRsZSB0
aGUgZXJyb3IgaWYgcG9zc2libGUgYW5kCisgICAqICAgICAvLyAgICAgICAgcmVzb2x2ZSBwcm9t
aXNlQiB3aXRoIG5ld1Byb21pc2VPclZhbHVlLAorICAgKiAgICAgLy8gICAgICAgIG90aGVyd2lz
ZSBmb3J3YXJkIHRoZSByZWplY3Rpb24gdG8gcHJvbWlzZUIKKyAgICogICAgIGlmIChjYW5IYW5k
bGUocmVhc29uKSkgeworICAgKiAgICAgIC8vIGhhbmRsZSB0aGUgZXJyb3IgYW5kIHJlY292ZXIK
KyAgICogICAgICByZXR1cm4gbmV3UHJvbWlzZU9yVmFsdWU7CisgICAqICAgICB9CisgICAqICAg
ICByZXR1cm4gJHEucmVqZWN0KHJlYXNvbik7CisgICAqICAgfSk7CisgICAqIGBgYAorICAgKgor
ICAgKiBAcGFyYW0geyp9IHJlYXNvbiBDb25zdGFudCwgbWVzc2FnZSwgZXhjZXB0aW9uIG9yIGFu
IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHJlamVjdGlvbiByZWFzb24uCisgICAqIEByZXR1cm5z
IHtQcm9taXNlfSBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHdhcyBhbHJlYWR5IHJlc29sdmVkIGFz
IHJlamVjdGVkIHdpdGggdGhlIGByZWFzb25gLgorICAgKi8KKyAgdmFyIHJlamVjdCA9IGZ1bmN0
aW9uKHJlYXNvbikgeworICAgIHZhciByZXN1bHQgPSBuZXcgRGVmZXJyZWQoKTsKKyAgICByZXN1
bHQucmVqZWN0KHJlYXNvbik7CisgICAgcmV0dXJuIHJlc3VsdC5wcm9taXNlOworICB9OworCisg
IHZhciBtYWtlUHJvbWlzZSA9IGZ1bmN0aW9uIG1ha2VQcm9taXNlKHZhbHVlLCByZXNvbHZlZCkg
eworICAgIHZhciByZXN1bHQgPSBuZXcgRGVmZXJyZWQoKTsKKyAgICBpZiAocmVzb2x2ZWQpIHsK
KyAgICAgIHJlc3VsdC5yZXNvbHZlKHZhbHVlKTsKKyAgICB9IGVsc2UgeworICAgICAgcmVzdWx0
LnJlamVjdCh2YWx1ZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQucHJvbWlzZTsKKyAgfTsK
KworICB2YXIgaGFuZGxlQ2FsbGJhY2sgPSBmdW5jdGlvbiBoYW5kbGVDYWxsYmFjayh2YWx1ZSwg
aXNSZXNvbHZlZCwgY2FsbGJhY2spIHsKKyAgICB2YXIgY2FsbGJhY2tPdXRwdXQgPSBudWxsOwor
ICAgIHRyeSB7CisgICAgICBpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIGNhbGxiYWNrT3V0cHV0
ID0gY2FsbGJhY2soKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICByZXR1cm4gbWFrZVByb21p
c2UoZSwgZmFsc2UpOworICAgIH0KKyAgICBpZiAoaXNQcm9taXNlTGlrZShjYWxsYmFja091dHB1
dCkpIHsKKyAgICAgIHJldHVybiBjYWxsYmFja091dHB1dC50aGVuKGZ1bmN0aW9uKCkgeworICAg
ICAgICByZXR1cm4gbWFrZVByb21pc2UodmFsdWUsIGlzUmVzb2x2ZWQpOworICAgICAgfSwgZnVu
Y3Rpb24oZXJyb3IpIHsKKyAgICAgICAgcmV0dXJuIG1ha2VQcm9taXNlKGVycm9yLCBmYWxzZSk7
CisgICAgICB9KTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIG1ha2VQcm9taXNlKHZhbHVl
LCBpc1Jlc29sdmVkKTsKKyAgICB9CisgIH07CisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRob2QK
KyAgICogQG5hbWUgJHEjd2hlbgorICAgKiBAa2luZCBmdW5jdGlvbgorICAgKgorICAgKiBAZGVz
Y3JpcHRpb24KKyAgICogV3JhcHMgYW4gb2JqZWN0IHRoYXQgbWlnaHQgYmUgYSB2YWx1ZSBvciBh
ICgzcmQgcGFydHkpIHRoZW4tYWJsZSBwcm9taXNlIGludG8gYSAkcSBwcm9taXNlLgorICAgKiBU
aGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSBhcmUgZGVhbGluZyB3aXRoIGFuIG9iamVjdCB0aGF0IG1p
Z2h0IG9yIG1pZ2h0IG5vdCBiZSBhIHByb21pc2UsIG9yIGlmCisgICAqIHRoZSBwcm9taXNlIGNv
bWVzIGZyb20gYSBzb3VyY2UgdGhhdCBjYW4ndCBiZSB0cnVzdGVkLgorICAgKgorICAgKiBAcGFy
YW0geyp9IHZhbHVlIFZhbHVlIG9yIGEgcHJvbWlzZQorICAgKiBAcmV0dXJucyB7UHJvbWlzZX0g
UmV0dXJucyBhIHByb21pc2Ugb2YgdGhlIHBhc3NlZCB2YWx1ZSBvciBwcm9taXNlCisgICAqLwor
CisKKyAgdmFyIHdoZW4gPSBmdW5jdGlvbih2YWx1ZSwgY2FsbGJhY2ssIGVycmJhY2ssIHByb2dy
ZXNzQmFjaykgeworICAgIHZhciByZXN1bHQgPSBuZXcgRGVmZXJyZWQoKTsKKyAgICByZXN1bHQu
cmVzb2x2ZSh2YWx1ZSk7CisgICAgcmV0dXJuIHJlc3VsdC5wcm9taXNlLnRoZW4oY2FsbGJhY2ss
IGVycmJhY2ssIHByb2dyZXNzQmFjayk7CisgIH07CisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRo
b2QKKyAgICogQG5hbWUgJHEjcmVzb2x2ZQorICAgKiBAa2luZCBmdW5jdGlvbgorICAgKgorICAg
KiBAZGVzY3JpcHRpb24KKyAgICogQWxpYXMgb2Yge0BsaW5rIG5nLiRxI3doZW4gd2hlbn0gdG8g
bWFpbnRhaW4gbmFtaW5nIGNvbnNpc3RlbmN5IHdpdGggRVM2LgorICAgKgorICAgKiBAcGFyYW0g
eyp9IHZhbHVlIFZhbHVlIG9yIGEgcHJvbWlzZQorICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gUmV0
dXJucyBhIHByb21pc2Ugb2YgdGhlIHBhc3NlZCB2YWx1ZSBvciBwcm9taXNlCisgICAqLworICB2
YXIgcmVzb2x2ZSA9IHdoZW47CisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5h
bWUgJHEjYWxsCisgICAqIEBraW5kIGZ1bmN0aW9uCisgICAqCisgICAqIEBkZXNjcmlwdGlvbgor
ICAgKiBDb21iaW5lcyBtdWx0aXBsZSBwcm9taXNlcyBpbnRvIGEgc2luZ2xlIHByb21pc2UgdGhh
dCBpcyByZXNvbHZlZCB3aGVuIGFsbCBvZiB0aGUgaW5wdXQKKyAgICogcHJvbWlzZXMgYXJlIHJl
c29sdmVkLgorICAgKgorICAgKiBAcGFyYW0ge0FycmF5LjxQcm9taXNlPnxPYmplY3QuPFByb21p
c2U+fSBwcm9taXNlcyBBbiBhcnJheSBvciBoYXNoIG9mIHByb21pc2VzLgorICAgKiBAcmV0dXJu
cyB7UHJvbWlzZX0gUmV0dXJucyBhIHNpbmdsZSBwcm9taXNlIHRoYXQgd2lsbCBiZSByZXNvbHZl
ZCB3aXRoIGFuIGFycmF5L2hhc2ggb2YgdmFsdWVzLAorICAgKiAgIGVhY2ggdmFsdWUgY29ycmVz
cG9uZGluZyB0byB0aGUgcHJvbWlzZSBhdCB0aGUgc2FtZSBpbmRleC9rZXkgaW4gdGhlIGBwcm9t
aXNlc2AgYXJyYXkvaGFzaC4KKyAgICogICBJZiBhbnkgb2YgdGhlIHByb21pc2VzIGlzIHJlc29s
dmVkIHdpdGggYSByZWplY3Rpb24sIHRoaXMgcmVzdWx0aW5nIHByb21pc2Ugd2lsbCBiZSByZWpl
Y3RlZAorICAgKiAgIHdpdGggdGhlIHNhbWUgcmVqZWN0aW9uIHZhbHVlLgorICAgKi8KKworICBm
dW5jdGlvbiBhbGwocHJvbWlzZXMpIHsKKyAgICB2YXIgZGVmZXJyZWQgPSBuZXcgRGVmZXJyZWQo
KSwKKyAgICAgICAgY291bnRlciA9IDAsCisgICAgICAgIHJlc3VsdHMgPSBpc0FycmF5KHByb21p
c2VzKSA/IFtdIDoge307CisKKyAgICBmb3JFYWNoKHByb21pc2VzLCBmdW5jdGlvbihwcm9taXNl
LCBrZXkpIHsKKyAgICAgIGNvdW50ZXIrKzsKKyAgICAgIHdoZW4ocHJvbWlzZSkudGhlbihmdW5j
dGlvbih2YWx1ZSkgeworICAgICAgICBpZiAocmVzdWx0cy5oYXNPd25Qcm9wZXJ0eShrZXkpKSBy
ZXR1cm47CisgICAgICAgIHJlc3VsdHNba2V5XSA9IHZhbHVlOworICAgICAgICBpZiAoISgtLWNv
dW50ZXIpKSBkZWZlcnJlZC5yZXNvbHZlKHJlc3VsdHMpOworICAgICAgfSwgZnVuY3Rpb24ocmVh
c29uKSB7CisgICAgICAgIGlmIChyZXN1bHRzLmhhc093blByb3BlcnR5KGtleSkpIHJldHVybjsK
KyAgICAgICAgZGVmZXJyZWQucmVqZWN0KHJlYXNvbik7CisgICAgICB9KTsKKyAgICB9KTsKKwor
ICAgIGlmIChjb3VudGVyID09PSAwKSB7CisgICAgICBkZWZlcnJlZC5yZXNvbHZlKHJlc3VsdHMp
OworICAgIH0KKworICAgIHJldHVybiBkZWZlcnJlZC5wcm9taXNlOworICB9CisKKyAgdmFyICRR
ID0gZnVuY3Rpb24gUShyZXNvbHZlcikgeworICAgIGlmICghaXNGdW5jdGlvbihyZXNvbHZlcikp
IHsKKyAgICAgIHRocm93ICRxTWluRXJyKCdub3JzbHZyJywgIkV4cGVjdGVkIHJlc29sdmVyRm4s
IGdvdCAnezB9JyIsIHJlc29sdmVyKTsKKyAgICB9CisKKyAgICBpZiAoISh0aGlzIGluc3RhbmNl
b2YgUSkpIHsKKyAgICAgIC8vIE1vcmUgdXNlZnVsIHdoZW4gJFEgaXMgdGhlIFByb21pc2UgaXRz
ZWxmLgorICAgICAgcmV0dXJuIG5ldyBRKHJlc29sdmVyKTsKKyAgICB9CisKKyAgICB2YXIgZGVm
ZXJyZWQgPSBuZXcgRGVmZXJyZWQoKTsKKworICAgIGZ1bmN0aW9uIHJlc29sdmVGbih2YWx1ZSkg
eworICAgICAgZGVmZXJyZWQucmVzb2x2ZSh2YWx1ZSk7CisgICAgfQorCisgICAgZnVuY3Rpb24g
cmVqZWN0Rm4ocmVhc29uKSB7CisgICAgICBkZWZlcnJlZC5yZWplY3QocmVhc29uKTsKKyAgICB9
CisKKyAgICByZXNvbHZlcihyZXNvbHZlRm4sIHJlamVjdEZuKTsKKworICAgIHJldHVybiBkZWZl
cnJlZC5wcm9taXNlOworICB9OworCisgICRRLmRlZmVyID0gZGVmZXI7CisgICRRLnJlamVjdCA9
IHJlamVjdDsKKyAgJFEud2hlbiA9IHdoZW47CisgICRRLnJlc29sdmUgPSByZXNvbHZlOworICAk
US5hbGwgPSBhbGw7CisKKyAgcmV0dXJuICRROworfQorCitmdW5jdGlvbiAkJFJBRlByb3ZpZGVy
KCkgeyAvL3JBRgorICB0aGlzLiRnZXQgPSBbJyR3aW5kb3cnLCAnJHRpbWVvdXQnLCBmdW5jdGlv
bigkd2luZG93LCAkdGltZW91dCkgeworICAgIHZhciByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSAk
d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAkd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZTsKKworICAgIHZhciBj
YW5jZWxBbmltYXRpb25GcmFtZSA9ICR3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgfHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkd2luZG93LndlYmtpdENhbmNlbEFuaW1hdGlv
bkZyYW1lIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdpbmRvdy53ZWJraXRD
YW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7CisKKyAgICB2YXIgcmFmU3VwcG9ydGVkID0gISFy
ZXF1ZXN0QW5pbWF0aW9uRnJhbWU7CisgICAgdmFyIHJhZkZuID0gcmFmU3VwcG9ydGVkCisgICAg
ICA/IGZ1bmN0aW9uKGZuKSB7CisgICAgICAgICAgdmFyIGlkID0gcmVxdWVzdEFuaW1hdGlvbkZy
YW1lKGZuKTsKKyAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBjYW5j
ZWxBbmltYXRpb25GcmFtZShpZCk7CisgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgOiBm
dW5jdGlvbihmbikgeworICAgICAgICAgIHZhciB0aW1lciA9ICR0aW1lb3V0KGZuLCAxNi42Niwg
ZmFsc2UpOyAvLyAxMDAwIC8gNjAgPSAxNi42NjYKKyAgICAgICAgICByZXR1cm4gZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAkdGltZW91dC5jYW5jZWwodGltZXIpOworICAgICAgICAgIH07Cisg
ICAgICAgIH07CisKKyAgICBxdWV1ZUZuLnN1cHBvcnRlZCA9IHJhZlN1cHBvcnRlZDsKKworICAg
IHZhciBjYW5jZWxMYXN0UkFGOworICAgIHZhciB0YXNrQ291bnQgPSAwOworICAgIHZhciB0YXNr
UXVldWUgPSBbXTsKKyAgICByZXR1cm4gcXVldWVGbjsKKworICAgIGZ1bmN0aW9uIGZsdXNoKCkg
eworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YXNrUXVldWUubGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgdmFyIHRhc2sgPSB0YXNrUXVldWVbaV07CisgICAgICAgIGlmICh0YXNrKSB7CisgICAg
ICAgICAgdGFza1F1ZXVlW2ldID0gbnVsbDsKKyAgICAgICAgICB0YXNrKCk7CisgICAgICAgIH0K
KyAgICAgIH0KKyAgICAgIHRhc2tDb3VudCA9IHRhc2tRdWV1ZS5sZW5ndGggPSAwOworICAgIH0K
KworICAgIGZ1bmN0aW9uIHF1ZXVlRm4oYXN5bmNGbikgeworICAgICAgdmFyIGluZGV4ID0gdGFz
a1F1ZXVlLmxlbmd0aDsKKworICAgICAgdGFza0NvdW50Kys7CisgICAgICB0YXNrUXVldWUucHVz
aChhc3luY0ZuKTsKKworICAgICAgaWYgKGluZGV4ID09PSAwKSB7CisgICAgICAgIGNhbmNlbExh
c3RSQUYgPSByYWZGbihmbHVzaCk7CisgICAgICB9CisKKyAgICAgIHJldHVybiBmdW5jdGlvbiBj
YW5jZWxRdWV1ZUZuKCkgeworICAgICAgICBpZiAoaW5kZXggPj0gMCkgeworICAgICAgICAgIHRh
c2tRdWV1ZVtpbmRleF0gPSBudWxsOworICAgICAgICAgIGluZGV4ID0gbnVsbDsKKworICAgICAg
ICAgIGlmICgtLXRhc2tDb3VudCA9PT0gMCAmJiBjYW5jZWxMYXN0UkFGKSB7CisgICAgICAgICAg
ICBjYW5jZWxMYXN0UkFGKCk7CisgICAgICAgICAgICBjYW5jZWxMYXN0UkFGID0gbnVsbDsKKyAg
ICAgICAgICAgIHRhc2tRdWV1ZS5sZW5ndGggPSAwOworICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgfTsKKyAgICB9CisgIH1dOworfQorCisvKioKKyAqIERFU0lHTiBOT1RFUworICoKKyAq
IFRoZSBkZXNpZ24gZGVjaXNpb25zIGJlaGluZCB0aGUgc2NvcGUgYXJlIGhlYXZpbHkgZmF2b3Jl
ZCBmb3Igc3BlZWQgYW5kIG1lbW9yeSBjb25zdW1wdGlvbi4KKyAqCisgKiBUaGUgdHlwaWNhbCB1
c2Ugb2Ygc2NvcGUgaXMgdG8gd2F0Y2ggdGhlIGV4cHJlc3Npb25zLCB3aGljaCBtb3N0IG9mIHRo
ZSB0aW1lIHJldHVybiB0aGUgc2FtZQorICogdmFsdWUgYXMgbGFzdCB0aW1lIHNvIHdlIG9wdGlt
aXplIHRoZSBvcGVyYXRpb24uCisgKgorICogQ2xvc3VyZXMgY29uc3RydWN0aW9uIGlzIGV4cGVu
c2l2ZSBpbiB0ZXJtcyBvZiBzcGVlZCBhcyB3ZWxsIGFzIG1lbW9yeToKKyAqICAgLSBObyBjbG9z
dXJlcywgaW5zdGVhZCB1c2UgcHJvdG90eXBpY2FsIGluaGVyaXRhbmNlIGZvciBBUEkKKyAqICAg
LSBJbnRlcm5hbCBzdGF0ZSBuZWVkcyB0byBiZSBzdG9yZWQgb24gc2NvcGUgZGlyZWN0bHksIHdo
aWNoIG1lYW5zIHRoYXQgcHJpdmF0ZSBzdGF0ZSBpcworICogICAgIGV4cG9zZWQgYXMgJCRfX19f
IHByb3BlcnRpZXMKKyAqCisgKiBMb29wIG9wZXJhdGlvbnMgYXJlIG9wdGltaXplZCBieSB1c2lu
ZyB3aGlsZShjb3VudC0tKSB7IC4uLiB9CisgKiAgIC0gdGhpcyBtZWFucyB0aGF0IGluIG9yZGVy
IHRvIGtlZXAgdGhlIHNhbWUgb3JkZXIgb2YgZXhlY3V0aW9uIGFzIGFkZGl0aW9uIHdlIGhhdmUg
dG8gYWRkCisgKiAgICAgaXRlbXMgdG8gdGhlIGFycmF5IGF0IHRoZSBiZWdpbm5pbmcgKHVuc2hp
ZnQpIGluc3RlYWQgb2YgYXQgdGhlIGVuZCAocHVzaCkKKyAqCisgKiBDaGlsZCBzY29wZXMgYXJl
IGNyZWF0ZWQgYW5kIHJlbW92ZWQgb2Z0ZW4KKyAqICAgLSBVc2luZyBhbiBhcnJheSB3b3VsZCBi
ZSBzbG93IHNpbmNlIGluc2VydHMgaW4gbWlkZGxlIGFyZSBleHBlbnNpdmUgc28gd2UgdXNlIGxp
bmtlZCBsaXN0CisgKgorICogVGhlcmUgYXJlIGZldyB3YXRjaGVzIHRoZW4gYSBsb3Qgb2Ygb2Jz
ZXJ2ZXJzLiBUaGlzIGlzIHdoeSB5b3UgZG9uJ3Qgd2FudCB0aGUgb2JzZXJ2ZXIgdG8gYmUKKyAq
IGltcGxlbWVudGVkIGluIHRoZSBzYW1lIHdheSBhcyB3YXRjaC4gV2F0Y2ggcmVxdWlyZXMgcmV0
dXJuIG9mIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIHdoaWNoCisgKiBhcmUgZXhwZW5zaXZlIHRv
IGNvbnN0cnVjdC4KKyAqLworCisKKy8qKgorICogQG5nZG9jIHByb3ZpZGVyCisgKiBAbmFtZSAk
cm9vdFNjb3BlUHJvdmlkZXIKKyAqIEBkZXNjcmlwdGlvbgorICoKKyAqIFByb3ZpZGVyIGZvciB0
aGUgJHJvb3RTY29wZSBzZXJ2aWNlLgorICovCisKKy8qKgorICogQG5nZG9jIG1ldGhvZAorICog
QG5hbWUgJHJvb3RTY29wZVByb3ZpZGVyI2RpZ2VzdFR0bAorICogQGRlc2NyaXB0aW9uCisgKgor
ICogU2V0cyB0aGUgbnVtYmVyIG9mIGAkZGlnZXN0YCBpdGVyYXRpb25zIHRoZSBzY29wZSBzaG91
bGQgYXR0ZW1wdCB0byBleGVjdXRlIGJlZm9yZSBnaXZpbmcgdXAgYW5kCisgKiBhc3N1bWluZyB0
aGF0IHRoZSBtb2RlbCBpcyB1bnN0YWJsZS4KKyAqCisgKiBUaGUgY3VycmVudCBkZWZhdWx0IGlz
IDEwIGl0ZXJhdGlvbnMuCisgKgorICogSW4gY29tcGxleCBhcHBsaWNhdGlvbnMgaXQncyBwb3Nz
aWJsZSB0aGF0IHRoZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiBgJHdhdGNoYHMgd2lsbCByZXN1bHQg
aW4KKyAqIHNldmVyYWwgZGlnZXN0IGl0ZXJhdGlvbnMuIEhvd2V2ZXIgaWYgYW4gYXBwbGljYXRp
b24gbmVlZHMgbW9yZSB0aGFuIHRoZSBkZWZhdWx0IDEwIGRpZ2VzdAorICogaXRlcmF0aW9ucyBm
b3IgaXRzIG1vZGVsIHRvIHN0YWJpbGl6ZSB0aGVuIHlvdSBzaG91bGQgaW52ZXN0aWdhdGUgd2hh
dCBpcyBjYXVzaW5nIHRoZSBtb2RlbCB0bworICogY29udGludW91c2x5IGNoYW5nZSBkdXJpbmcg
dGhlIGRpZ2VzdC4KKyAqCisgKiBJbmNyZWFzaW5nIHRoZSBUVEwgY291bGQgaGF2ZSBwZXJmb3Jt
YW5jZSBpbXBsaWNhdGlvbnMsIHNvIHlvdSBzaG91bGQgbm90IGNoYW5nZSBpdCB3aXRob3V0Cisg
KiBwcm9wZXIganVzdGlmaWNhdGlvbi4KKyAqCisgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgVGhl
IG51bWJlciBvZiBkaWdlc3QgaXRlcmF0aW9ucy4KKyAqLworCisKKy8qKgorICogQG5nZG9jIHNl
cnZpY2UKKyAqIEBuYW1lICRyb290U2NvcGUKKyAqIEBkZXNjcmlwdGlvbgorICoKKyAqIEV2ZXJ5
IGFwcGxpY2F0aW9uIGhhcyBhIHNpbmdsZSByb290IHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3Bl
IHNjb3BlfS4KKyAqIEFsbCBvdGhlciBzY29wZXMgYXJlIGRlc2NlbmRhbnQgc2NvcGVzIG9mIHRo
ZSByb290IHNjb3BlLiBTY29wZXMgcHJvdmlkZSBzZXBhcmF0aW9uCisgKiBiZXR3ZWVuIHRoZSBt
b2RlbCBhbmQgdGhlIHZpZXcsIHZpYSBhIG1lY2hhbmlzbSBmb3Igd2F0Y2hpbmcgdGhlIG1vZGVs
IGZvciBjaGFuZ2VzLgorICogVGhleSBhbHNvIHByb3ZpZGUgYW4gZXZlbnQgZW1pc3Npb24vYnJv
YWRjYXN0IGFuZCBzdWJzY3JpcHRpb24gZmFjaWxpdHkuIFNlZSB0aGUKKyAqIHtAbGluayBndWlk
ZS9zY29wZSBkZXZlbG9wZXIgZ3VpZGUgb24gc2NvcGVzfS4KKyAqLworZnVuY3Rpb24gJFJvb3RT
Y29wZVByb3ZpZGVyKCkgeworICB2YXIgVFRMID0gMTA7CisgIHZhciAkcm9vdFNjb3BlTWluRXJy
ID0gbWluRXJyKCckcm9vdFNjb3BlJyk7CisgIHZhciBsYXN0RGlydHlXYXRjaCA9IG51bGw7Cisg
IHZhciBhcHBseUFzeW5jSWQgPSBudWxsOworCisgIHRoaXMuZGlnZXN0VHRsID0gZnVuY3Rpb24o
dmFsdWUpIHsKKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCkgeworICAgICAgVFRMID0gdmFsdWU7
CisgICAgfQorICAgIHJldHVybiBUVEw7CisgIH07CisKKyAgZnVuY3Rpb24gY3JlYXRlQ2hpbGRT
Y29wZUNsYXNzKHBhcmVudCkgeworICAgIGZ1bmN0aW9uIENoaWxkU2NvcGUoKSB7CisgICAgICB0
aGlzLiQkd2F0Y2hlcnMgPSB0aGlzLiQkbmV4dFNpYmxpbmcgPQorICAgICAgICAgIHRoaXMuJCRj
aGlsZEhlYWQgPSB0aGlzLiQkY2hpbGRUYWlsID0gbnVsbDsKKyAgICAgIHRoaXMuJCRsaXN0ZW5l
cnMgPSB7fTsKKyAgICAgIHRoaXMuJCRsaXN0ZW5lckNvdW50ID0ge307CisgICAgICB0aGlzLiQk
d2F0Y2hlcnNDb3VudCA9IDA7CisgICAgICB0aGlzLiRpZCA9IG5leHRVaWQoKTsKKyAgICAgIHRo
aXMuJCRDaGlsZFNjb3BlID0gbnVsbDsKKyAgICB9CisgICAgQ2hpbGRTY29wZS5wcm90b3R5cGUg
PSBwYXJlbnQ7CisgICAgcmV0dXJuIENoaWxkU2NvcGU7CisgIH0KKworICB0aGlzLiRnZXQgPSBb
JyRpbmplY3RvcicsICckZXhjZXB0aW9uSGFuZGxlcicsICckcGFyc2UnLCAnJGJyb3dzZXInLAor
ICAgICAgZnVuY3Rpb24oJGluamVjdG9yLCAkZXhjZXB0aW9uSGFuZGxlciwgJHBhcnNlLCAkYnJv
d3NlcikgeworCisgICAgZnVuY3Rpb24gZGVzdHJveUNoaWxkU2NvcGUoJGV2ZW50KSB7CisgICAg
ICAgICRldmVudC5jdXJyZW50U2NvcGUuJCRkZXN0cm95ZWQgPSB0cnVlOworICAgIH0KKworICAg
IC8qKgorICAgICAqIEBuZ2RvYyB0eXBlCisgICAgICogQG5hbWUgJHJvb3RTY29wZS5TY29wZQor
ICAgICAqCisgICAgICogQGRlc2NyaXB0aW9uCisgICAgICogQSByb290IHNjb3BlIGNhbiBiZSBy
ZXRyaWV2ZWQgdXNpbmcgdGhlIHtAbGluayBuZy4kcm9vdFNjb3BlICRyb290U2NvcGV9IGtleSBm
cm9tIHRoZQorICAgICAqIHtAbGluayBhdXRvLiRpbmplY3RvciAkaW5qZWN0b3J9LiBDaGlsZCBz
Y29wZXMgYXJlIGNyZWF0ZWQgdXNpbmcgdGhlCisgICAgICoge0BsaW5rIG5nLiRyb290U2NvcGUu
U2NvcGUjJG5ldyAkbmV3KCl9IG1ldGhvZC4gKE1vc3Qgc2NvcGVzIGFyZSBjcmVhdGVkIGF1dG9t
YXRpY2FsbHkgd2hlbgorICAgICAqIGNvbXBpbGVkIEhUTUwgdGVtcGxhdGUgaXMgZXhlY3V0ZWQu
KQorICAgICAqCisgICAgICogSGVyZSBpcyBhIHNpbXBsZSBzY29wZSBzbmlwcGV0IHRvIHNob3cg
aG93IHlvdSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgc2NvcGUuCisgICAgICogYGBgaHRtbAorICAg
ICAqIDxmaWxlIHNyYz0iLi90ZXN0L25nL3Jvb3RTY29wZVNwZWMuanMiIHRhZz0iZG9jczEiIC8+
CisgICAgICogYGBgCisgICAgICoKKyAgICAgKiAjIEluaGVyaXRhbmNlCisgICAgICogQSBzY29w
ZSBjYW4gaW5oZXJpdCBmcm9tIGEgcGFyZW50IHNjb3BlLCBhcyBpbiB0aGlzIGV4YW1wbGU6Cisg
ICAgICogYGBganMKKyAgICAgICAgIHZhciBwYXJlbnQgPSAkcm9vdFNjb3BlOworICAgICAgICAg
dmFyIGNoaWxkID0gcGFyZW50LiRuZXcoKTsKKworICAgICAgICAgcGFyZW50LnNhbHV0YXRpb24g
PSAiSGVsbG8iOworICAgICAgICAgZXhwZWN0KGNoaWxkLnNhbHV0YXRpb24pLnRvRXF1YWwoJ0hl
bGxvJyk7CisKKyAgICAgICAgIGNoaWxkLnNhbHV0YXRpb24gPSAiV2VsY29tZSI7CisgICAgICAg
ICBleHBlY3QoY2hpbGQuc2FsdXRhdGlvbikudG9FcXVhbCgnV2VsY29tZScpOworICAgICAgICAg
ZXhwZWN0KHBhcmVudC5zYWx1dGF0aW9uKS50b0VxdWFsKCdIZWxsbycpOworICAgICAqIGBgYAor
ICAgICAqCisgICAgICogV2hlbiBpbnRlcmFjdGluZyB3aXRoIGBTY29wZWAgaW4gdGVzdHMsIGFk
ZGl0aW9uYWwgaGVscGVyIG1ldGhvZHMgYXJlIGF2YWlsYWJsZSBvbiB0aGUKKyAgICAgKiBpbnN0
YW5jZXMgb2YgYFNjb3BlYCB0eXBlLiBTZWUge0BsaW5rIG5nTW9jay4kcm9vdFNjb3BlLlNjb3Bl
IG5nTW9jayBTY29wZX0gZm9yIGFkZGl0aW9uYWwKKyAgICAgKiBkZXRhaWxzLgorICAgICAqCisg
ICAgICoKKyAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCBmdW5jdGlvbigpPj19IHByb3Zp
ZGVycyBNYXAgb2Ygc2VydmljZSBmYWN0b3J5IHdoaWNoIG5lZWQgdG8gYmUKKyAgICAgKiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkIGZvciB0aGUgY3VycmVu
dCBzY29wZS4gRGVmYXVsdHMgdG8ge0BsaW5rIG5nfS4KKyAgICAgKiBAcGFyYW0ge09iamVjdC48
c3RyaW5nLCAqPj19IGluc3RhbmNlQ2FjaGUgUHJvdmlkZXMgcHJlLWluc3RhbnRpYXRlZCBzZXJ2
aWNlcyB3aGljaCBzaG91bGQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFw
cGVuZC9vdmVycmlkZSBzZXJ2aWNlcyBwcm92aWRlZCBieSBgcHJvdmlkZXJzYC4gVGhpcyBpcyBo
YW5keQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB1bml0LXRlc3Rp
bmcgYW5kIGhhdmluZyB0aGUgbmVlZCB0byBvdmVycmlkZSBhIGRlZmF1bHQKKyAgICAgKiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UuCisgICAgICogQHJldHVybnMge09iamVj
dH0gTmV3bHkgY3JlYXRlZCBzY29wZS4KKyAgICAgKgorICAgICAqLworICAgIGZ1bmN0aW9uIFNj
b3BlKCkgeworICAgICAgdGhpcy4kaWQgPSBuZXh0VWlkKCk7CisgICAgICB0aGlzLiQkcGhhc2Ug
PSB0aGlzLiRwYXJlbnQgPSB0aGlzLiQkd2F0Y2hlcnMgPQorICAgICAgICAgICAgICAgICAgICAg
dGhpcy4kJG5leHRTaWJsaW5nID0gdGhpcy4kJHByZXZTaWJsaW5nID0KKyAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuJCRjaGlsZEhlYWQgPSB0aGlzLiQkY2hpbGRUYWlsID0gbnVsbDsKKyAgICAg
IHRoaXMuJHJvb3QgPSB0aGlzOworICAgICAgdGhpcy4kJGRlc3Ryb3llZCA9IGZhbHNlOworICAg
ICAgdGhpcy4kJGxpc3RlbmVycyA9IHt9OworICAgICAgdGhpcy4kJGxpc3RlbmVyQ291bnQgPSB7
fTsKKyAgICAgIHRoaXMuJCR3YXRjaGVyc0NvdW50ID0gMDsKKyAgICAgIHRoaXMuJCRpc29sYXRl
QmluZGluZ3MgPSBudWxsOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBuZ2RvYyBwcm9wZXJ0
eQorICAgICAqIEBuYW1lICRyb290U2NvcGUuU2NvcGUjJGlkCisgICAgICoKKyAgICAgKiBAZGVz
Y3JpcHRpb24KKyAgICAgKiBVbmlxdWUgc2NvcGUgSUQgKG1vbm90b25pY2FsbHkgaW5jcmVhc2lu
ZykgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuCisgICAgICovCisKKyAgICAgLyoqCisgICAgICAqIEBu
Z2RvYyBwcm9wZXJ0eQorICAgICAgKiBAbmFtZSAkcm9vdFNjb3BlLlNjb3BlIyRwYXJlbnQKKyAg
ICAgICoKKyAgICAgICogQGRlc2NyaXB0aW9uCisgICAgICAqIFJlZmVyZW5jZSB0byB0aGUgcGFy
ZW50IHNjb3BlLgorICAgICAgKi8KKworICAgICAgLyoqCisgICAgICAgKiBAbmdkb2MgcHJvcGVy
dHkKKyAgICAgICAqIEBuYW1lICRyb290U2NvcGUuU2NvcGUjJHJvb3QKKyAgICAgICAqCisgICAg
ICAgKiBAZGVzY3JpcHRpb24KKyAgICAgICAqIFJlZmVyZW5jZSB0byB0aGUgcm9vdCBzY29wZS4K
KyAgICAgICAqLworCisgICAgU2NvcGUucHJvdG90eXBlID0geworICAgICAgY29uc3RydWN0b3I6
IFNjb3BlLAorICAgICAgLyoqCisgICAgICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICAgKiBAbmFt
ZSAkcm9vdFNjb3BlLlNjb3BlIyRuZXcKKyAgICAgICAqIEBraW5kIGZ1bmN0aW9uCisgICAgICAg
KgorICAgICAgICogQGRlc2NyaXB0aW9uCisgICAgICAgKiBDcmVhdGVzIGEgbmV3IGNoaWxkIHtA
bGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIHNjb3BlfS4KKyAgICAgICAqCisgICAgICAgKiBUaGUg
cGFyZW50IHNjb3BlIHdpbGwgcHJvcGFnYXRlIHRoZSB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29w
ZSMkZGlnZXN0ICRkaWdlc3QoKX0gZXZlbnQuCisgICAgICAgKiBUaGUgc2NvcGUgY2FuIGJlIHJl
bW92ZWQgZnJvbSB0aGUgc2NvcGUgaGllcmFyY2h5IHVzaW5nIHtAbGluayBuZy4kcm9vdFNjb3Bl
LlNjb3BlIyRkZXN0cm95ICRkZXN0cm95KCl9LgorICAgICAgICoKKyAgICAgICAqIHtAbGluayBu
Zy4kcm9vdFNjb3BlLlNjb3BlIyRkZXN0cm95ICRkZXN0cm95KCl9IG11c3QgYmUgY2FsbGVkIG9u
IGEgc2NvcGUgd2hlbiBpdCBpcworICAgICAgICogZGVzaXJlZCBmb3IgdGhlIHNjb3BlIGFuZCBp
dHMgY2hpbGQgc2NvcGVzIHRvIGJlIHBlcm1hbmVudGx5IGRldGFjaGVkIGZyb20gdGhlIHBhcmVu
dCBhbmQKKyAgICAgICAqIHRodXMgc3RvcCBwYXJ0aWNpcGF0aW5nIGluIG1vZGVsIGNoYW5nZSBk
ZXRlY3Rpb24gYW5kIGxpc3RlbmVyIG5vdGlmaWNhdGlvbiBieSBpbnZva2luZy4KKyAgICAgICAq
CisgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzb2xhdGUgSWYgdHJ1ZSwgdGhlbiB0aGUgc2Nv
cGUgZG9lcyBub3QgcHJvdG90eXBpY2FsbHkgaW5oZXJpdCBmcm9tIHRoZQorICAgICAgICogICAg
ICAgICBwYXJlbnQgc2NvcGUuIFRoZSBzY29wZSBpcyBpc29sYXRlZCwgYXMgaXQgY2FuIG5vdCBz
ZWUgcGFyZW50IHNjb3BlIHByb3BlcnRpZXMuCisgICAgICAgKiAgICAgICAgIFdoZW4gY3JlYXRp
bmcgd2lkZ2V0cywgaXQgaXMgdXNlZnVsIGZvciB0aGUgd2lkZ2V0IHRvIG5vdCBhY2NpZGVudGFs
bHkgcmVhZCBwYXJlbnQKKyAgICAgICAqICAgICAgICAgc3RhdGUuCisgICAgICAgKgorICAgICAg
ICogQHBhcmFtIHtTY29wZX0gW3BhcmVudD10aGlzXSBUaGUge0BsaW5rIG5nLiRyb290U2NvcGUu
U2NvcGUgYFNjb3BlYH0gdGhhdCB3aWxsIGJlIHRoZSBgJHBhcmVudGAKKyAgICAgICAqICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgc2NvcGUuIERlZmF1
bHRzIHRvIGB0aGlzYCBzY29wZSBpZiBub3QgcHJvdmlkZWQuCisgICAgICAgKiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgdXNlZCB3aGVuIGNyZWF0aW5nIGEgdHJhbnNjbHVk
ZSBzY29wZSB0byBjb3JyZWN0bHkgcGxhY2UgaXQKKyAgICAgICAqICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW4gdGhlIHNjb3BlIGhpZXJhcmNoeSB3aGlsZSBtYWludGFpbmluZyB0aGUg
Y29ycmVjdCBwcm90b3R5cGljYWwKKyAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5oZXJpdGFuY2UuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMge09iamVjdH0gVGhl
IG5ld2x5IGNyZWF0ZWQgY2hpbGQgc2NvcGUuCisgICAgICAgKgorICAgICAgICovCisgICAgICAk
bmV3OiBmdW5jdGlvbihpc29sYXRlLCBwYXJlbnQpIHsKKyAgICAgICAgdmFyIGNoaWxkOworCisg
ICAgICAgIHBhcmVudCA9IHBhcmVudCB8fCB0aGlzOworCisgICAgICAgIGlmIChpc29sYXRlKSB7
CisgICAgICAgICAgY2hpbGQgPSBuZXcgU2NvcGUoKTsKKyAgICAgICAgICBjaGlsZC4kcm9vdCA9
IHRoaXMuJHJvb3Q7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgLy8gT25seSBjcmVhdGUg
YSBjaGlsZCBzY29wZSBjbGFzcyBpZiBzb21lYm9keSBhc2tzIGZvciBvbmUsCisgICAgICAgICAg
Ly8gYnV0IGNhY2hlIGl0IHRvIGFsbG93IHRoZSBWTSB0byBvcHRpbWl6ZSBsb29rdXBzLgorICAg
ICAgICAgIGlmICghdGhpcy4kJENoaWxkU2NvcGUpIHsKKyAgICAgICAgICAgIHRoaXMuJCRDaGls
ZFNjb3BlID0gY3JlYXRlQ2hpbGRTY29wZUNsYXNzKHRoaXMpOworICAgICAgICAgIH0KKyAgICAg
ICAgICBjaGlsZCA9IG5ldyB0aGlzLiQkQ2hpbGRTY29wZSgpOworICAgICAgICB9CisgICAgICAg
IGNoaWxkLiRwYXJlbnQgPSBwYXJlbnQ7CisgICAgICAgIGNoaWxkLiQkcHJldlNpYmxpbmcgPSBw
YXJlbnQuJCRjaGlsZFRhaWw7CisgICAgICAgIGlmIChwYXJlbnQuJCRjaGlsZEhlYWQpIHsKKyAg
ICAgICAgICBwYXJlbnQuJCRjaGlsZFRhaWwuJCRuZXh0U2libGluZyA9IGNoaWxkOworICAgICAg
ICAgIHBhcmVudC4kJGNoaWxkVGFpbCA9IGNoaWxkOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgIHBhcmVudC4kJGNoaWxkSGVhZCA9IHBhcmVudC4kJGNoaWxkVGFpbCA9IGNoaWxkOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gV2hlbiB0aGUgbmV3IHNjb3BlIGlzIG5vdCBpc29sYXRlZCBv
ciB3ZSBpbmhlcml0IGZyb20gYHRoaXNgLCBhbmQKKyAgICAgICAgLy8gdGhlIHBhcmVudCBzY29w
ZSBpcyBkZXN0cm95ZWQsIHRoZSBwcm9wZXJ0eSBgJCRkZXN0cm95ZWRgIGlzIGluaGVyaXRlZAor
ICAgICAgICAvLyBwcm90b3R5cGljYWxseS4gSW4gYWxsIG90aGVyIGNhc2VzLCB0aGlzIHByb3Bl
cnR5IG5lZWRzIHRvIGJlIHNldAorICAgICAgICAvLyB3aGVuIHRoZSBwYXJlbnQgc2NvcGUgaXMg
ZGVzdHJveWVkLgorICAgICAgICAvLyBUaGUgbGlzdGVuZXIgbmVlZHMgdG8gYmUgYWRkZWQgYWZ0
ZXIgdGhlIHBhcmVudCBpcyBzZXQKKyAgICAgICAgaWYgKGlzb2xhdGUgfHwgcGFyZW50ICE9IHRo
aXMpIGNoaWxkLiRvbignJGRlc3Ryb3knLCBkZXN0cm95Q2hpbGRTY29wZSk7CisKKyAgICAgICAg
cmV0dXJuIGNoaWxkOworICAgICAgfSwKKworICAgICAgLyoqCisgICAgICAgKiBAbmdkb2MgbWV0
aG9kCisgICAgICAgKiBAbmFtZSAkcm9vdFNjb3BlLlNjb3BlIyR3YXRjaAorICAgICAgICogQGtp
bmQgZnVuY3Rpb24KKyAgICAgICAqCisgICAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgICAqIFJl
Z2lzdGVycyBhIGBsaXN0ZW5lcmAgY2FsbGJhY2sgdG8gYmUgZXhlY3V0ZWQgd2hlbmV2ZXIgdGhl
IGB3YXRjaEV4cHJlc3Npb25gIGNoYW5nZXMuCisgICAgICAgKgorICAgICAgICogLSBUaGUgYHdh
dGNoRXhwcmVzc2lvbmAgaXMgY2FsbGVkIG9uIGV2ZXJ5IGNhbGwgdG8ge0BsaW5rIG5nLiRyb290
U2NvcGUuU2NvcGUjJGRpZ2VzdAorICAgICAgICogICAkZGlnZXN0KCl9IGFuZCBzaG91bGQgcmV0
dXJuIHRoZSB2YWx1ZSB0aGF0IHdpbGwgYmUgd2F0Y2hlZC4gKFNpbmNlCisgICAgICAgKiAgIHtA
bGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRkaWdlc3QgJGRpZ2VzdCgpfSByZXJ1bnMgd2hlbiBp
dCBkZXRlY3RzIGNoYW5nZXMgdGhlCisgICAgICAgKiAgIGB3YXRjaEV4cHJlc3Npb25gIGNhbiBl
eGVjdXRlIG11bHRpcGxlIHRpbWVzIHBlcgorICAgICAgICogICB7QGxpbmsgbmcuJHJvb3RTY29w
ZS5TY29wZSMkZGlnZXN0ICRkaWdlc3QoKX0gYW5kIHNob3VsZCBiZSBpZGVtcG90ZW50LikKKyAg
ICAgICAqIC0gVGhlIGBsaXN0ZW5lcmAgaXMgY2FsbGVkIG9ubHkgd2hlbiB0aGUgdmFsdWUgZnJv
bSB0aGUgY3VycmVudCBgd2F0Y2hFeHByZXNzaW9uYCBhbmQgdGhlCisgICAgICAgKiAgIHByZXZp
b3VzIGNhbGwgdG8gYHdhdGNoRXhwcmVzc2lvbmAgYXJlIG5vdCBlcXVhbCAod2l0aCB0aGUgZXhj
ZXB0aW9uIG9mIHRoZSBpbml0aWFsIHJ1biwKKyAgICAgICAqICAgc2VlIGJlbG93KS4gSW5lcXVh
bGl0eSBpcyBkZXRlcm1pbmVkIGFjY29yZGluZyB0byByZWZlcmVuY2UgaW5lcXVhbGl0eSwKKyAg
ICAgICAqICAgW3N0cmljdCBjb21wYXJpc29uXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9y
Zy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PcGVyYXRvcnMvQ29tcGFyaXNv
bl9PcGVyYXRvcnMpCisgICAgICAgKiAgICB2aWEgdGhlIGAhPT1gIEphdmFzY3JpcHQgb3BlcmF0
b3IsIHVubGVzcyBgb2JqZWN0RXF1YWxpdHkgPT0gdHJ1ZWAKKyAgICAgICAqICAgKHNlZSBuZXh0
IHBvaW50KQorICAgICAgICogLSBXaGVuIGBvYmplY3RFcXVhbGl0eSA9PSB0cnVlYCwgaW5lcXVh
bGl0eSBvZiB0aGUgYHdhdGNoRXhwcmVzc2lvbmAgaXMgZGV0ZXJtaW5lZAorICAgICAgICogICBh
Y2NvcmRpbmcgdG8gdGhlIHtAbGluayBhbmd1bGFyLmVxdWFsc30gZnVuY3Rpb24uIFRvIHNhdmUg
dGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgZm9yCisgICAgICAgKiAgIGxhdGVyIGNvbXBhcmlzb24s
IHRoZSB7QGxpbmsgYW5ndWxhci5jb3B5fSBmdW5jdGlvbiBpcyB1c2VkLiBUaGlzIHRoZXJlZm9y
ZSBtZWFucyB0aGF0CisgICAgICAgKiAgIHdhdGNoaW5nIGNvbXBsZXggb2JqZWN0cyB3aWxsIGhh
dmUgYWR2ZXJzZSBtZW1vcnkgYW5kIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4KKyAgICAgICAq
IC0gVGhlIHdhdGNoIGBsaXN0ZW5lcmAgbWF5IGNoYW5nZSB0aGUgbW9kZWwsIHdoaWNoIG1heSB0
cmlnZ2VyIG90aGVyIGBsaXN0ZW5lcmBzIHRvIGZpcmUuCisgICAgICAgKiAgIFRoaXMgaXMgYWNo
aWV2ZWQgYnkgcmVydW5uaW5nIHRoZSB3YXRjaGVycyB1bnRpbCBubyBjaGFuZ2VzIGFyZSBkZXRl
Y3RlZC4gVGhlIHJlcnVuCisgICAgICAgKiAgIGl0ZXJhdGlvbiBsaW1pdCBpcyAxMCB0byBwcmV2
ZW50IGFuIGluZmluaXRlIGxvb3AgZGVhZGxvY2suCisgICAgICAgKgorICAgICAgICoKKyAgICAg
ICAqIElmIHlvdSB3YW50IHRvIGJlIG5vdGlmaWVkIHdoZW5ldmVyIHtAbGluayBuZy4kcm9vdFNj
b3BlLlNjb3BlIyRkaWdlc3QgJGRpZ2VzdH0gaXMgY2FsbGVkLAorICAgICAgICogeW91IGNhbiBy
ZWdpc3RlciBhIGB3YXRjaEV4cHJlc3Npb25gIGZ1bmN0aW9uIHdpdGggbm8gYGxpc3RlbmVyYC4g
KFNpbmNlIGB3YXRjaEV4cHJlc3Npb25gCisgICAgICAgKiBjYW4gZXhlY3V0ZSBtdWx0aXBsZSB0
aW1lcyBwZXIge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGRpZ2VzdCAkZGlnZXN0fSBjeWNs
ZSB3aGVuIGEKKyAgICAgICAqIGNoYW5nZSBpcyBkZXRlY3RlZCwgYmUgcHJlcGFyZWQgZm9yIG11
bHRpcGxlIGNhbGxzIHRvIHlvdXIgbGlzdGVuZXIuKQorICAgICAgICoKKyAgICAgICAqIEFmdGVy
IGEgd2F0Y2hlciBpcyByZWdpc3RlcmVkIHdpdGggdGhlIHNjb3BlLCB0aGUgYGxpc3RlbmVyYCBm
biBpcyBjYWxsZWQgYXN5bmNocm9ub3VzbHkKKyAgICAgICAqICh2aWEge0BsaW5rIG5nLiRyb290
U2NvcGUuU2NvcGUjJGV2YWxBc3luYyAkZXZhbEFzeW5jfSkgdG8gaW5pdGlhbGl6ZSB0aGUKKyAg
ICAgICAqIHdhdGNoZXIuIEluIHJhcmUgY2FzZXMsIHRoaXMgaXMgdW5kZXNpcmFibGUgYmVjYXVz
ZSB0aGUgbGlzdGVuZXIgaXMgY2FsbGVkIHdoZW4gdGhlIHJlc3VsdAorICAgICAgICogb2YgYHdh
dGNoRXhwcmVzc2lvbmAgZGlkbid0IGNoYW5nZS4gVG8gZGV0ZWN0IHRoaXMgc2NlbmFyaW8gd2l0
aGluIHRoZSBgbGlzdGVuZXJgIGZuLCB5b3UKKyAgICAgICAqIGNhbiBjb21wYXJlIHRoZSBgbmV3
VmFsYCBhbmQgYG9sZFZhbGAuIElmIHRoZXNlIHR3byB2YWx1ZXMgYXJlIGlkZW50aWNhbCAoYD09
PWApIHRoZW4gdGhlCisgICAgICAgKiBsaXN0ZW5lciB3YXMgY2FsbGVkIGR1ZSB0byBpbml0aWFs
aXphdGlvbi4KKyAgICAgICAqCisgICAgICAgKgorICAgICAgICoKKyAgICAgICAqICMgRXhhbXBs
ZQorICAgICAgICogYGBganMKKyAgICAgICAgICAgLy8gbGV0J3MgYXNzdW1lIHRoYXQgc2NvcGUg
d2FzIGRlcGVuZGVuY3kgaW5qZWN0ZWQgYXMgdGhlICRyb290U2NvcGUKKyAgICAgICAgICAgdmFy
IHNjb3BlID0gJHJvb3RTY29wZTsKKyAgICAgICAgICAgc2NvcGUubmFtZSA9ICdtaXNrbyc7Cisg
ICAgICAgICAgIHNjb3BlLmNvdW50ZXIgPSAwOworCisgICAgICAgICAgIGV4cGVjdChzY29wZS5j
b3VudGVyKS50b0VxdWFsKDApOworICAgICAgICAgICBzY29wZS4kd2F0Y2goJ25hbWUnLCBmdW5j
dGlvbihuZXdWYWx1ZSwgb2xkVmFsdWUpIHsKKyAgICAgICAgICAgICBzY29wZS5jb3VudGVyID0g
c2NvcGUuY291bnRlciArIDE7CisgICAgICAgICAgIH0pOworICAgICAgICAgICBleHBlY3Qoc2Nv
cGUuY291bnRlcikudG9FcXVhbCgwKTsKKworICAgICAgICAgICBzY29wZS4kZGlnZXN0KCk7Cisg
ICAgICAgICAgIC8vIHRoZSBsaXN0ZW5lciBpcyBhbHdheXMgY2FsbGVkIGR1cmluZyB0aGUgZmly
c3QgJGRpZ2VzdCBsb29wIGFmdGVyIGl0IHdhcyByZWdpc3RlcmVkCisgICAgICAgICAgIGV4cGVj
dChzY29wZS5jb3VudGVyKS50b0VxdWFsKDEpOworCisgICAgICAgICAgIHNjb3BlLiRkaWdlc3Qo
KTsKKyAgICAgICAgICAgLy8gYnV0IG5vdyBpdCB3aWxsIG5vdCBiZSBjYWxsZWQgdW5sZXNzIHRo
ZSB2YWx1ZSBjaGFuZ2VzCisgICAgICAgICAgIGV4cGVjdChzY29wZS5jb3VudGVyKS50b0VxdWFs
KDEpOworCisgICAgICAgICAgIHNjb3BlLm5hbWUgPSAnYWRhbSc7CisgICAgICAgICAgIHNjb3Bl
LiRkaWdlc3QoKTsKKyAgICAgICAgICAgZXhwZWN0KHNjb3BlLmNvdW50ZXIpLnRvRXF1YWwoMik7
CisKKworCisgICAgICAgICAgIC8vIFVzaW5nIGEgZnVuY3Rpb24gYXMgYSB3YXRjaEV4cHJlc3Np
b24KKyAgICAgICAgICAgdmFyIGZvb2Q7CisgICAgICAgICAgIHNjb3BlLmZvb2RDb3VudGVyID0g
MDsKKyAgICAgICAgICAgZXhwZWN0KHNjb3BlLmZvb2RDb3VudGVyKS50b0VxdWFsKDApOworICAg
ICAgICAgICBzY29wZS4kd2F0Y2goCisgICAgICAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1
cm5zIHRoZSB2YWx1ZSBiZWluZyB3YXRjaGVkLiBJdCBpcyBjYWxsZWQgZm9yIGVhY2ggdHVybiBv
ZiB0aGUgJGRpZ2VzdCBsb29wCisgICAgICAgICAgICAgZnVuY3Rpb24oKSB7IHJldHVybiBmb29k
OyB9LAorICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGNoYW5nZSBsaXN0ZW5lciwgY2FsbGVk
IHdoZW4gdGhlIHZhbHVlIHJldHVybmVkIGZyb20gdGhlIGFib3ZlIGZ1bmN0aW9uIGNoYW5nZXMK
KyAgICAgICAgICAgICBmdW5jdGlvbihuZXdWYWx1ZSwgb2xkVmFsdWUpIHsKKyAgICAgICAgICAg
ICAgIGlmICggbmV3VmFsdWUgIT09IG9sZFZhbHVlICkgeworICAgICAgICAgICAgICAgICAvLyBP
bmx5IGluY3JlbWVudCB0aGUgY291bnRlciBpZiB0aGUgdmFsdWUgY2hhbmdlZAorICAgICAgICAg
ICAgICAgICBzY29wZS5mb29kQ291bnRlciA9IHNjb3BlLmZvb2RDb3VudGVyICsgMTsKKyAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICB9CisgICAgICAgICAgICk7CisgICAgICAgICAgIC8v
IE5vIGRpZ2VzdCBoYXMgYmVlbiBydW4gc28gdGhlIGNvdW50ZXIgd2lsbCBiZSB6ZXJvCisgICAg
ICAgICAgIGV4cGVjdChzY29wZS5mb29kQ291bnRlcikudG9FcXVhbCgwKTsKKworICAgICAgICAg
ICAvLyBSdW4gdGhlIGRpZ2VzdCBidXQgc2luY2UgZm9vZCBoYXMgbm90IGNoYW5nZWQgY291bnQg
d2lsbCBzdGlsbCBiZSB6ZXJvCisgICAgICAgICAgIHNjb3BlLiRkaWdlc3QoKTsKKyAgICAgICAg
ICAgZXhwZWN0KHNjb3BlLmZvb2RDb3VudGVyKS50b0VxdWFsKDApOworCisgICAgICAgICAgIC8v
IFVwZGF0ZSBmb29kIGFuZCBydW4gZGlnZXN0LiAgTm93IHRoZSBjb3VudGVyIHdpbGwgaW5jcmVt
ZW50CisgICAgICAgICAgIGZvb2QgPSAnY2hlZXNlYnVyZ2VyJzsKKyAgICAgICAgICAgc2NvcGUu
JGRpZ2VzdCgpOworICAgICAgICAgICBleHBlY3Qoc2NvcGUuZm9vZENvdW50ZXIpLnRvRXF1YWwo
MSk7CisKKyAgICAgICAqIGBgYAorICAgICAgICoKKyAgICAgICAqCisgICAgICAgKgorICAgICAg
ICogQHBhcmFtIHsoZnVuY3Rpb24oKXxzdHJpbmcpfSB3YXRjaEV4cHJlc3Npb24gRXhwcmVzc2lv
biB0aGF0IGlzIGV2YWx1YXRlZCBvbiBlYWNoCisgICAgICAgKiAgICB7QGxpbmsgbmcuJHJvb3RT
Y29wZS5TY29wZSMkZGlnZXN0ICRkaWdlc3R9IGN5Y2xlLiBBIGNoYW5nZSBpbiB0aGUgcmV0dXJu
IHZhbHVlIHRyaWdnZXJzCisgICAgICAgKiAgICBhIGNhbGwgdG8gdGhlIGBsaXN0ZW5lcmAuCisg
ICAgICAgKgorICAgICAgICogICAgLSBgc3RyaW5nYDogRXZhbHVhdGVkIGFzIHtAbGluayBndWlk
ZS9leHByZXNzaW9uIGV4cHJlc3Npb259CisgICAgICAgKiAgICAtIGBmdW5jdGlvbihzY29wZSlg
OiBjYWxsZWQgd2l0aCBjdXJyZW50IGBzY29wZWAgYXMgYSBwYXJhbWV0ZXIuCisgICAgICAgKiBA
cGFyYW0ge2Z1bmN0aW9uKG5ld1ZhbCwgb2xkVmFsLCBzY29wZSl9IGxpc3RlbmVyIENhbGxiYWNr
IGNhbGxlZCB3aGVuZXZlciB0aGUgdmFsdWUKKyAgICAgICAqICAgIG9mIGB3YXRjaEV4cHJlc3Np
b25gIGNoYW5nZXMuCisgICAgICAgKgorICAgICAgICogICAgLSBgbmV3VmFsYCBjb250YWlucyB0
aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgYHdhdGNoRXhwcmVzc2lvbmAKKyAgICAgICAqICAgIC0g
YG9sZFZhbGAgY29udGFpbnMgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBgd2F0Y2hFeHByZXNz
aW9uYAorICAgICAgICogICAgLSBgc2NvcGVgIHJlZmVycyB0byB0aGUgY3VycmVudCBzY29wZQor
ICAgICAgICogQHBhcmFtIHtib29sZWFuPX0gb2JqZWN0RXF1YWxpdHkgQ29tcGFyZSBmb3Igb2Jq
ZWN0IGVxdWFsaXR5IHVzaW5nIHtAbGluayBhbmd1bGFyLmVxdWFsc30gaW5zdGVhZCBvZgorICAg
ICAgICogICAgIGNvbXBhcmluZyBmb3IgcmVmZXJlbmNlIGVxdWFsaXR5LgorICAgICAgICogQHJl
dHVybnMge2Z1bmN0aW9uKCl9IFJldHVybnMgYSBkZXJlZ2lzdHJhdGlvbiBmdW5jdGlvbiBmb3Ig
dGhpcyBsaXN0ZW5lci4KKyAgICAgICAqLworICAgICAgJHdhdGNoOiBmdW5jdGlvbih3YXRjaEV4
cCwgbGlzdGVuZXIsIG9iamVjdEVxdWFsaXR5LCBwcmV0dHlQcmludEV4cHJlc3Npb24pIHsKKyAg
ICAgICAgdmFyIGdldCA9ICRwYXJzZSh3YXRjaEV4cCk7CisKKyAgICAgICAgaWYgKGdldC4kJHdh
dGNoRGVsZWdhdGUpIHsKKyAgICAgICAgICByZXR1cm4gZ2V0LiQkd2F0Y2hEZWxlZ2F0ZSh0aGlz
LCBsaXN0ZW5lciwgb2JqZWN0RXF1YWxpdHksIGdldCwgd2F0Y2hFeHApOworICAgICAgICB9Cisg
ICAgICAgIHZhciBzY29wZSA9IHRoaXMsCisgICAgICAgICAgICBhcnJheSA9IHNjb3BlLiQkd2F0
Y2hlcnMsCisgICAgICAgICAgICB3YXRjaGVyID0geworICAgICAgICAgICAgICBmbjogbGlzdGVu
ZXIsCisgICAgICAgICAgICAgIGxhc3Q6IGluaXRXYXRjaFZhbCwKKyAgICAgICAgICAgICAgZ2V0
OiBnZXQsCisgICAgICAgICAgICAgIGV4cDogcHJldHR5UHJpbnRFeHByZXNzaW9uIHx8IHdhdGNo
RXhwLAorICAgICAgICAgICAgICBlcTogISFvYmplY3RFcXVhbGl0eQorICAgICAgICAgICAgfTsK
KworICAgICAgICBsYXN0RGlydHlXYXRjaCA9IG51bGw7CisKKyAgICAgICAgaWYgKCFpc0Z1bmN0
aW9uKGxpc3RlbmVyKSkgeworICAgICAgICAgIHdhdGNoZXIuZm4gPSBub29wOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKCFhcnJheSkgeworICAgICAgICAgIGFycmF5ID0gc2NvcGUuJCR3YXRj
aGVycyA9IFtdOworICAgICAgICB9CisgICAgICAgIC8vIHdlIHVzZSB1bnNoaWZ0IHNpbmNlIHdl
IHVzZSBhIHdoaWxlIGxvb3AgaW4gJGRpZ2VzdCBmb3Igc3BlZWQuCisgICAgICAgIC8vIHRoZSB3
aGlsZSBsb29wIHJlYWRzIGluIHJldmVyc2Ugb3JkZXIuCisgICAgICAgIGFycmF5LnVuc2hpZnQo
d2F0Y2hlcik7CisgICAgICAgIGluY3JlbWVudFdhdGNoZXJzQ291bnQodGhpcywgMSk7CisKKyAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uIGRlcmVnaXN0ZXJXYXRjaCgpIHsKKyAgICAgICAgICBpZiAo
YXJyYXlSZW1vdmUoYXJyYXksIHdhdGNoZXIpID49IDApIHsKKyAgICAgICAgICAgIGluY3JlbWVu
dFdhdGNoZXJzQ291bnQoc2NvcGUsIC0xKTsKKyAgICAgICAgICB9CisgICAgICAgICAgbGFzdERp
cnR5V2F0Y2ggPSBudWxsOworICAgICAgICB9OworICAgICAgfSwKKworICAgICAgLyoqCisgICAg
ICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICAgKiBAbmFtZSAkcm9vdFNjb3BlLlNjb3BlIyR3YXRj
aEdyb3VwCisgICAgICAgKiBAa2luZCBmdW5jdGlvbgorICAgICAgICoKKyAgICAgICAqIEBkZXNj
cmlwdGlvbgorICAgICAgICogQSB2YXJpYW50IG9mIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3Bl
IyR3YXRjaCAkd2F0Y2goKX0gd2hlcmUgaXQgd2F0Y2hlcyBhbiBhcnJheSBvZiBgd2F0Y2hFeHBy
ZXNzaW9uc2AuCisgICAgICAgKiBJZiBhbnkgb25lIGV4cHJlc3Npb24gaW4gdGhlIGNvbGxlY3Rp
b24gY2hhbmdlcyB0aGUgYGxpc3RlbmVyYCBpcyBleGVjdXRlZC4KKyAgICAgICAqCisgICAgICAg
KiAtIFRoZSBpdGVtcyBpbiB0aGUgYHdhdGNoRXhwcmVzc2lvbnNgIGFycmF5IGFyZSBvYnNlcnZl
ZCB2aWEgc3RhbmRhcmQgJHdhdGNoIG9wZXJhdGlvbiBhbmQgYXJlIGV4YW1pbmVkIG9uIGV2ZXJ5
CisgICAgICAgKiAgIGNhbGwgdG8gJGRpZ2VzdCgpIHRvIHNlZSBpZiBhbnkgaXRlbXMgY2hhbmdl
cy4KKyAgICAgICAqIC0gVGhlIGBsaXN0ZW5lcmAgaXMgY2FsbGVkIHdoZW5ldmVyIGFueSBleHBy
ZXNzaW9uIGluIHRoZSBgd2F0Y2hFeHByZXNzaW9uc2AgYXJyYXkgY2hhbmdlcy4KKyAgICAgICAq
CisgICAgICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmd8RnVuY3Rpb24oc2NvcGUpPn0gd2F0Y2hF
eHByZXNzaW9ucyBBcnJheSBvZiBleHByZXNzaW9ucyB0aGF0IHdpbGwgYmUgaW5kaXZpZHVhbGx5
CisgICAgICAgKiB3YXRjaGVkIHVzaW5nIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyR3YXRj
aCAkd2F0Y2goKX0KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG5ld1ZhbHVl
cywgb2xkVmFsdWVzLCBzY29wZSl9IGxpc3RlbmVyIENhbGxiYWNrIGNhbGxlZCB3aGVuZXZlciB0
aGUgcmV0dXJuIHZhbHVlIG9mIGFueQorICAgICAgICogICAgZXhwcmVzc2lvbiBpbiBgd2F0Y2hF
eHByZXNzaW9uc2AgY2hhbmdlcworICAgICAgICogICAgVGhlIGBuZXdWYWx1ZXNgIGFycmF5IGNv
bnRhaW5zIHRoZSBjdXJyZW50IHZhbHVlcyBvZiB0aGUgYHdhdGNoRXhwcmVzc2lvbnNgLCB3aXRo
IHRoZSBpbmRleGVzIG1hdGNoaW5nCisgICAgICAgKiAgICB0aG9zZSBvZiBgd2F0Y2hFeHByZXNz
aW9uYAorICAgICAgICogICAgYW5kIHRoZSBgb2xkVmFsdWVzYCBhcnJheSBjb250YWlucyB0aGUg
cHJldmlvdXMgdmFsdWVzIG9mIHRoZSBgd2F0Y2hFeHByZXNzaW9uc2AsIHdpdGggdGhlIGluZGV4
ZXMgbWF0Y2hpbmcKKyAgICAgICAqICAgIHRob3NlIG9mIGB3YXRjaEV4cHJlc3Npb25gCisgICAg
ICAgKiAgICBUaGUgYHNjb3BlYCByZWZlcnMgdG8gdGhlIGN1cnJlbnQgc2NvcGUuCisgICAgICAg
KiBAcmV0dXJucyB7ZnVuY3Rpb24oKX0gUmV0dXJucyBhIGRlLXJlZ2lzdHJhdGlvbiBmdW5jdGlv
biBmb3IgYWxsIGxpc3RlbmVycy4KKyAgICAgICAqLworICAgICAgJHdhdGNoR3JvdXA6IGZ1bmN0
aW9uKHdhdGNoRXhwcmVzc2lvbnMsIGxpc3RlbmVyKSB7CisgICAgICAgIHZhciBvbGRWYWx1ZXMg
PSBuZXcgQXJyYXkod2F0Y2hFeHByZXNzaW9ucy5sZW5ndGgpOworICAgICAgICB2YXIgbmV3VmFs
dWVzID0gbmV3IEFycmF5KHdhdGNoRXhwcmVzc2lvbnMubGVuZ3RoKTsKKyAgICAgICAgdmFyIGRl
cmVnaXN0ZXJGbnMgPSBbXTsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICB2YXIg
Y2hhbmdlUmVhY3Rpb25TY2hlZHVsZWQgPSBmYWxzZTsKKyAgICAgICAgdmFyIGZpcnN0UnVuID0g
dHJ1ZTsKKworICAgICAgICBpZiAoIXdhdGNoRXhwcmVzc2lvbnMubGVuZ3RoKSB7CisgICAgICAg
ICAgLy8gTm8gZXhwcmVzc2lvbnMgbWVhbnMgd2UgY2FsbCB0aGUgbGlzdGVuZXIgQVNBUAorICAg
ICAgICAgIHZhciBzaG91bGRDYWxsID0gdHJ1ZTsKKyAgICAgICAgICBzZWxmLiRldmFsQXN5bmMo
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkQ2FsbCkgbGlzdGVuZXIobmV3VmFs
dWVzLCBuZXdWYWx1ZXMsIHNlbGYpOworICAgICAgICAgIH0pOworICAgICAgICAgIHJldHVybiBm
dW5jdGlvbiBkZXJlZ2lzdGVyV2F0Y2hHcm91cCgpIHsKKyAgICAgICAgICAgIHNob3VsZENhbGwg
PSBmYWxzZTsKKyAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHdhdGNoRXhw
cmVzc2lvbnMubGVuZ3RoID09PSAxKSB7CisgICAgICAgICAgLy8gU3BlY2lhbCBjYXNlIHNpemUg
b2Ygb25lCisgICAgICAgICAgcmV0dXJuIHRoaXMuJHdhdGNoKHdhdGNoRXhwcmVzc2lvbnNbMF0s
IGZ1bmN0aW9uIHdhdGNoR3JvdXBBY3Rpb24odmFsdWUsIG9sZFZhbHVlLCBzY29wZSkgeworICAg
ICAgICAgICAgbmV3VmFsdWVzWzBdID0gdmFsdWU7CisgICAgICAgICAgICBvbGRWYWx1ZXNbMF0g
PSBvbGRWYWx1ZTsKKyAgICAgICAgICAgIGxpc3RlbmVyKG5ld1ZhbHVlcywgKHZhbHVlID09PSBv
bGRWYWx1ZSkgPyBuZXdWYWx1ZXMgOiBvbGRWYWx1ZXMsIHNjb3BlKTsKKyAgICAgICAgICB9KTsK
KyAgICAgICAgfQorCisgICAgICAgIGZvckVhY2god2F0Y2hFeHByZXNzaW9ucywgZnVuY3Rpb24o
ZXhwciwgaSkgeworICAgICAgICAgIHZhciB1bndhdGNoRm4gPSBzZWxmLiR3YXRjaChleHByLCBm
dW5jdGlvbiB3YXRjaEdyb3VwU3ViQWN0aW9uKHZhbHVlLCBvbGRWYWx1ZSkgeworICAgICAgICAg
ICAgbmV3VmFsdWVzW2ldID0gdmFsdWU7CisgICAgICAgICAgICBvbGRWYWx1ZXNbaV0gPSBvbGRW
YWx1ZTsKKyAgICAgICAgICAgIGlmICghY2hhbmdlUmVhY3Rpb25TY2hlZHVsZWQpIHsKKyAgICAg
ICAgICAgICAgY2hhbmdlUmVhY3Rpb25TY2hlZHVsZWQgPSB0cnVlOworICAgICAgICAgICAgICBz
ZWxmLiRldmFsQXN5bmMod2F0Y2hHcm91cEFjdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgfSk7CisgICAgICAgICAgZGVyZWdpc3RlckZucy5wdXNoKHVud2F0Y2hGbik7CisgICAgICAg
IH0pOworCisgICAgICAgIGZ1bmN0aW9uIHdhdGNoR3JvdXBBY3Rpb24oKSB7CisgICAgICAgICAg
Y2hhbmdlUmVhY3Rpb25TY2hlZHVsZWQgPSBmYWxzZTsKKworICAgICAgICAgIGlmIChmaXJzdFJ1
bikgeworICAgICAgICAgICAgZmlyc3RSdW4gPSBmYWxzZTsKKyAgICAgICAgICAgIGxpc3RlbmVy
KG5ld1ZhbHVlcywgbmV3VmFsdWVzLCBzZWxmKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgbGlzdGVuZXIobmV3VmFsdWVzLCBvbGRWYWx1ZXMsIHNlbGYpOworICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmdW5jdGlvbiBkZXJlZ2lzdGVyV2F0Y2hHcm91
cCgpIHsKKyAgICAgICAgICB3aGlsZSAoZGVyZWdpc3RlckZucy5sZW5ndGgpIHsKKyAgICAgICAg
ICAgIGRlcmVnaXN0ZXJGbnMuc2hpZnQoKSgpOworICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAg
ICAgIH0sCisKKworICAgICAgLyoqCisgICAgICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICAgKiBA
bmFtZSAkcm9vdFNjb3BlLlNjb3BlIyR3YXRjaENvbGxlY3Rpb24KKyAgICAgICAqIEBraW5kIGZ1
bmN0aW9uCisgICAgICAgKgorICAgICAgICogQGRlc2NyaXB0aW9uCisgICAgICAgKiBTaGFsbG93
IHdhdGNoZXMgdGhlIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0IGFuZCBmaXJlcyB3aGVuZXZlciBh
bnkgb2YgdGhlIHByb3BlcnRpZXMgY2hhbmdlCisgICAgICAgKiAoZm9yIGFycmF5cywgdGhpcyBp
bXBsaWVzIHdhdGNoaW5nIHRoZSBhcnJheSBpdGVtczsgZm9yIG9iamVjdCBtYXBzLCB0aGlzIGlt
cGxpZXMgd2F0Y2hpbmcKKyAgICAgICAqIHRoZSBwcm9wZXJ0aWVzKS4gSWYgYSBjaGFuZ2UgaXMg
ZGV0ZWN0ZWQsIHRoZSBgbGlzdGVuZXJgIGNhbGxiYWNrIGlzIGZpcmVkLgorICAgICAgICoKKyAg
ICAgICAqIC0gVGhlIGBvYmpgIGNvbGxlY3Rpb24gaXMgb2JzZXJ2ZWQgdmlhIHN0YW5kYXJkICR3
YXRjaCBvcGVyYXRpb24gYW5kIGlzIGV4YW1pbmVkIG9uIGV2ZXJ5CisgICAgICAgKiAgIGNhbGwg
dG8gJGRpZ2VzdCgpIHRvIHNlZSBpZiBhbnkgaXRlbXMgaGF2ZSBiZWVuIGFkZGVkLCByZW1vdmVk
LCBvciBtb3ZlZC4KKyAgICAgICAqIC0gVGhlIGBsaXN0ZW5lcmAgaXMgY2FsbGVkIHdoZW5ldmVy
IGFueXRoaW5nIHdpdGhpbiB0aGUgYG9iamAgaGFzIGNoYW5nZWQuIEV4YW1wbGVzIGluY2x1ZGUK
KyAgICAgICAqICAgYWRkaW5nLCByZW1vdmluZywgYW5kIG1vdmluZyBpdGVtcyBiZWxvbmdpbmcg
dG8gYW4gb2JqZWN0IG9yIGFycmF5LgorICAgICAgICoKKyAgICAgICAqCisgICAgICAgKiAjIEV4
YW1wbGUKKyAgICAgICAqIGBgYGpzCisgICAgICAgICAgJHNjb3BlLm5hbWVzID0gWydpZ29yJywg
J21hdGlhcycsICdtaXNrbycsICdqYW1lcyddOworICAgICAgICAgICRzY29wZS5kYXRhQ291bnQg
PSA0OworCisgICAgICAgICAgJHNjb3BlLiR3YXRjaENvbGxlY3Rpb24oJ25hbWVzJywgZnVuY3Rp
b24obmV3TmFtZXMsIG9sZE5hbWVzKSB7CisgICAgICAgICAgICAkc2NvcGUuZGF0YUNvdW50ID0g
bmV3TmFtZXMubGVuZ3RoOworICAgICAgICAgIH0pOworCisgICAgICAgICAgZXhwZWN0KCRzY29w
ZS5kYXRhQ291bnQpLnRvRXF1YWwoNCk7CisgICAgICAgICAgJHNjb3BlLiRkaWdlc3QoKTsKKwor
ICAgICAgICAgIC8vc3RpbGwgYXQgNCAuLi4gbm8gY2hhbmdlcworICAgICAgICAgIGV4cGVjdCgk
c2NvcGUuZGF0YUNvdW50KS50b0VxdWFsKDQpOworCisgICAgICAgICAgJHNjb3BlLm5hbWVzLnBv
cCgpOworICAgICAgICAgICRzY29wZS4kZGlnZXN0KCk7CisKKyAgICAgICAgICAvL25vdyB0aGVy
ZSdzIGJlZW4gYSBjaGFuZ2UKKyAgICAgICAgICBleHBlY3QoJHNjb3BlLmRhdGFDb3VudCkudG9F
cXVhbCgzKTsKKyAgICAgICAqIGBgYAorICAgICAgICoKKyAgICAgICAqCisgICAgICAgKiBAcGFy
YW0ge3N0cmluZ3xmdW5jdGlvbihzY29wZSl9IG9iaiBFdmFsdWF0ZWQgYXMge0BsaW5rIGd1aWRl
L2V4cHJlc3Npb24gZXhwcmVzc2lvbn0uIFRoZQorICAgICAgICogICAgZXhwcmVzc2lvbiB2YWx1
ZSBzaG91bGQgZXZhbHVhdGUgdG8gYW4gb2JqZWN0IG9yIGFuIGFycmF5IHdoaWNoIGlzIG9ic2Vy
dmVkIG9uIGVhY2gKKyAgICAgICAqICAgIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRkaWdl
c3QgJGRpZ2VzdH0gY3ljbGUuIEFueSBzaGFsbG93IGNoYW5nZSB3aXRoaW4gdGhlCisgICAgICAg
KiAgICBjb2xsZWN0aW9uIHdpbGwgdHJpZ2dlciBhIGNhbGwgdG8gdGhlIGBsaXN0ZW5lcmAuCisg
ICAgICAgKgorICAgICAgICogQHBhcmFtIHtmdW5jdGlvbihuZXdDb2xsZWN0aW9uLCBvbGRDb2xs
ZWN0aW9uLCBzY29wZSl9IGxpc3RlbmVyIGEgY2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkCisgICAg
ICAgKiAgICB3aGVuIGEgY2hhbmdlIGlzIGRldGVjdGVkLgorICAgICAgICogICAgLSBUaGUgYG5l
d0NvbGxlY3Rpb25gIG9iamVjdCBpcyB0aGUgbmV3bHkgbW9kaWZpZWQgZGF0YSBvYnRhaW5lZCBm
cm9tIHRoZSBgb2JqYCBleHByZXNzaW9uCisgICAgICAgKiAgICAtIFRoZSBgb2xkQ29sbGVjdGlv
bmAgb2JqZWN0IGlzIGEgY29weSBvZiB0aGUgZm9ybWVyIGNvbGxlY3Rpb24gZGF0YS4KKyAgICAg
ICAqICAgICAgRHVlIHRvIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zLCB0aGVgb2xkQ29sbGVj
dGlvbmAgdmFsdWUgaXMgY29tcHV0ZWQgb25seSBpZiB0aGUKKyAgICAgICAqICAgICAgYGxpc3Rl
bmVyYCBmdW5jdGlvbiBkZWNsYXJlcyB0d28gb3IgbW9yZSBhcmd1bWVudHMuCisgICAgICAgKiAg
ICAtIFRoZSBgc2NvcGVgIGFyZ3VtZW50IHJlZmVycyB0byB0aGUgY3VycmVudCBzY29wZS4KKyAg
ICAgICAqCisgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb24oKX0gUmV0dXJucyBhIGRlLXJlZ2lz
dHJhdGlvbiBmdW5jdGlvbiBmb3IgdGhpcyBsaXN0ZW5lci4gV2hlbiB0aGUKKyAgICAgICAqICAg
IGRlLXJlZ2lzdHJhdGlvbiBmdW5jdGlvbiBpcyBleGVjdXRlZCwgdGhlIGludGVybmFsIHdhdGNo
IG9wZXJhdGlvbiBpcyB0ZXJtaW5hdGVkLgorICAgICAgICovCisgICAgICAkd2F0Y2hDb2xsZWN0
aW9uOiBmdW5jdGlvbihvYmosIGxpc3RlbmVyKSB7CisgICAgICAgICR3YXRjaENvbGxlY3Rpb25J
bnRlcmNlcHRvci4kc3RhdGVmdWwgPSB0cnVlOworCisgICAgICAgIHZhciBzZWxmID0gdGhpczsK
KyAgICAgICAgLy8gdGhlIGN1cnJlbnQgdmFsdWUsIHVwZGF0ZWQgb24gZWFjaCBkaXJ0eS1jaGVj
ayBydW4KKyAgICAgICAgdmFyIG5ld1ZhbHVlOworICAgICAgICAvLyBhIHNoYWxsb3cgY29weSBv
ZiB0aGUgbmV3VmFsdWUgZnJvbSB0aGUgbGFzdCBkaXJ0eS1jaGVjayBydW4sCisgICAgICAgIC8v
IHVwZGF0ZWQgdG8gbWF0Y2ggbmV3VmFsdWUgZHVyaW5nIGRpcnR5LWNoZWNrIHJ1bgorICAgICAg
ICB2YXIgb2xkVmFsdWU7CisgICAgICAgIC8vIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBuZXdWYWx1
ZSBmcm9tIHdoZW4gdGhlIGxhc3QgY2hhbmdlIGhhcHBlbmVkCisgICAgICAgIHZhciB2ZXJ5T2xk
VmFsdWU7CisgICAgICAgIC8vIG9ubHkgdHJhY2sgdmVyeU9sZFZhbHVlIGlmIHRoZSBsaXN0ZW5l
ciBpcyBhc2tpbmcgZm9yIGl0CisgICAgICAgIHZhciB0cmFja1ZlcnlPbGRWYWx1ZSA9IChsaXN0
ZW5lci5sZW5ndGggPiAxKTsKKyAgICAgICAgdmFyIGNoYW5nZURldGVjdGVkID0gMDsKKyAgICAg
ICAgdmFyIGNoYW5nZURldGVjdG9yID0gJHBhcnNlKG9iaiwgJHdhdGNoQ29sbGVjdGlvbkludGVy
Y2VwdG9yKTsKKyAgICAgICAgdmFyIGludGVybmFsQXJyYXkgPSBbXTsKKyAgICAgICAgdmFyIGlu
dGVybmFsT2JqZWN0ID0ge307CisgICAgICAgIHZhciBpbml0UnVuID0gdHJ1ZTsKKyAgICAgICAg
dmFyIG9sZExlbmd0aCA9IDA7CisKKyAgICAgICAgZnVuY3Rpb24gJHdhdGNoQ29sbGVjdGlvbklu
dGVyY2VwdG9yKF92YWx1ZSkgeworICAgICAgICAgIG5ld1ZhbHVlID0gX3ZhbHVlOworICAgICAg
ICAgIHZhciBuZXdMZW5ndGgsIGtleSwgYm90aE5hTiwgbmV3SXRlbSwgb2xkSXRlbTsKKworICAg
ICAgICAgIC8vIElmIHRoZSBuZXcgdmFsdWUgaXMgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB1bmRl
ZmluZWQgYXMgdGhlIHdhdGNoIG1heSBiZSBhIG9uZS10aW1lIHdhdGNoCisgICAgICAgICAgaWYg
KGlzVW5kZWZpbmVkKG5ld1ZhbHVlKSkgcmV0dXJuOworCisgICAgICAgICAgaWYgKCFpc09iamVj
dChuZXdWYWx1ZSkpIHsgLy8gaWYgcHJpbWl0aXZlCisgICAgICAgICAgICBpZiAob2xkVmFsdWUg
IT09IG5ld1ZhbHVlKSB7CisgICAgICAgICAgICAgIG9sZFZhbHVlID0gbmV3VmFsdWU7CisgICAg
ICAgICAgICAgIGNoYW5nZURldGVjdGVkKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBl
bHNlIGlmIChpc0FycmF5TGlrZShuZXdWYWx1ZSkpIHsKKyAgICAgICAgICAgIGlmIChvbGRWYWx1
ZSAhPT0gaW50ZXJuYWxBcnJheSkgeworICAgICAgICAgICAgICAvLyB3ZSBhcmUgdHJhbnNpdGlv
bmluZyBmcm9tIHNvbWV0aGluZyB3aGljaCB3YXMgbm90IGFuIGFycmF5IGludG8gYXJyYXkuCisg
ICAgICAgICAgICAgIG9sZFZhbHVlID0gaW50ZXJuYWxBcnJheTsKKyAgICAgICAgICAgICAgb2xk
TGVuZ3RoID0gb2xkVmFsdWUubGVuZ3RoID0gMDsKKyAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0
ZWQrKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbmV3TGVuZ3RoID0gbmV3VmFsdWUu
bGVuZ3RoOworCisgICAgICAgICAgICBpZiAob2xkTGVuZ3RoICE9PSBuZXdMZW5ndGgpIHsKKyAg
ICAgICAgICAgICAgLy8gaWYgbGVuZ3RocyBkbyBub3QgbWF0Y2ggd2UgbmVlZCB0byB0cmlnZ2Vy
IGNoYW5nZSBub3RpZmljYXRpb24KKyAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0ZWQrKzsKKyAg
ICAgICAgICAgICAgb2xkVmFsdWUubGVuZ3RoID0gb2xkTGVuZ3RoID0gbmV3TGVuZ3RoOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgLy8gY29weSB0aGUgaXRlbXMgdG8gb2xkVmFsdWUgYW5k
IGxvb2sgZm9yIGNoYW5nZXMuCisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0xl
bmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgIG9sZEl0ZW0gPSBvbGRWYWx1ZVtpXTsKKyAgICAg
ICAgICAgICAgbmV3SXRlbSA9IG5ld1ZhbHVlW2ldOworCisgICAgICAgICAgICAgIGJvdGhOYU4g
PSAob2xkSXRlbSAhPT0gb2xkSXRlbSkgJiYgKG5ld0l0ZW0gIT09IG5ld0l0ZW0pOworICAgICAg
ICAgICAgICBpZiAoIWJvdGhOYU4gJiYgKG9sZEl0ZW0gIT09IG5ld0l0ZW0pKSB7CisgICAgICAg
ICAgICAgICAgY2hhbmdlRGV0ZWN0ZWQrKzsKKyAgICAgICAgICAgICAgICBvbGRWYWx1ZVtpXSA9
IG5ld0l0ZW07CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgaWYgKG9sZFZhbHVlICE9PSBpbnRlcm5hbE9iamVjdCkgeworICAg
ICAgICAgICAgICAvLyB3ZSBhcmUgdHJhbnNpdGlvbmluZyBmcm9tIHNvbWV0aGluZyB3aGljaCB3
YXMgbm90IGFuIG9iamVjdCBpbnRvIG9iamVjdC4KKyAgICAgICAgICAgICAgb2xkVmFsdWUgPSBp
bnRlcm5hbE9iamVjdCA9IHt9OworICAgICAgICAgICAgICBvbGRMZW5ndGggPSAwOworICAgICAg
ICAgICAgICBjaGFuZ2VEZXRlY3RlZCsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8g
Y29weSB0aGUgaXRlbXMgdG8gb2xkVmFsdWUgYW5kIGxvb2sgZm9yIGNoYW5nZXMuCisgICAgICAg
ICAgICBuZXdMZW5ndGggPSAwOworICAgICAgICAgICAgZm9yIChrZXkgaW4gbmV3VmFsdWUpIHsK
KyAgICAgICAgICAgICAgaWYgKG5ld1ZhbHVlLmhhc093blByb3BlcnR5KGtleSkpIHsKKyAgICAg
ICAgICAgICAgICBuZXdMZW5ndGgrKzsKKyAgICAgICAgICAgICAgICBuZXdJdGVtID0gbmV3VmFs
dWVba2V5XTsKKyAgICAgICAgICAgICAgICBvbGRJdGVtID0gb2xkVmFsdWVba2V5XTsKKworICAg
ICAgICAgICAgICAgIGlmIChrZXkgaW4gb2xkVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgIGJv
dGhOYU4gPSAob2xkSXRlbSAhPT0gb2xkSXRlbSkgJiYgKG5ld0l0ZW0gIT09IG5ld0l0ZW0pOwor
ICAgICAgICAgICAgICAgICAgaWYgKCFib3RoTmFOICYmIChvbGRJdGVtICE9PSBuZXdJdGVtKSkg
eworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VEZXRlY3RlZCsrOworICAgICAgICAgICAgICAg
ICAgICBvbGRWYWx1ZVtrZXldID0gbmV3SXRlbTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgb2xkTGVuZ3RoKys7CisgICAg
ICAgICAgICAgICAgICBvbGRWYWx1ZVtrZXldID0gbmV3SXRlbTsKKyAgICAgICAgICAgICAgICAg
IGNoYW5nZURldGVjdGVkKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob2xkTGVuZ3RoID4gbmV3TGVuZ3RoKSB7Cisg
ICAgICAgICAgICAgIC8vIHdlIHVzZWQgdG8gaGF2ZSBtb3JlIGtleXMsIG5lZWQgdG8gZmluZCB0
aGVtIGFuZCBkZXN0cm95IHRoZW0uCisgICAgICAgICAgICAgIGNoYW5nZURldGVjdGVkKys7Cisg
ICAgICAgICAgICAgIGZvciAoa2V5IGluIG9sZFZhbHVlKSB7CisgICAgICAgICAgICAgICAgaWYg
KCFuZXdWYWx1ZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICAgICAgICAgICAgICBvbGRM
ZW5ndGgtLTsKKyAgICAgICAgICAgICAgICAgIGRlbGV0ZSBvbGRWYWx1ZVtrZXldOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0K
KyAgICAgICAgICByZXR1cm4gY2hhbmdlRGV0ZWN0ZWQ7CisgICAgICAgIH0KKworICAgICAgICBm
dW5jdGlvbiAkd2F0Y2hDb2xsZWN0aW9uQWN0aW9uKCkgeworICAgICAgICAgIGlmIChpbml0UnVu
KSB7CisgICAgICAgICAgICBpbml0UnVuID0gZmFsc2U7CisgICAgICAgICAgICBsaXN0ZW5lcihu
ZXdWYWx1ZSwgbmV3VmFsdWUsIHNlbGYpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBsaXN0ZW5lcihuZXdWYWx1ZSwgdmVyeU9sZFZhbHVlLCBzZWxmKTsKKyAgICAgICAgICB9CisK
KyAgICAgICAgICAvLyBtYWtlIGEgY29weSBmb3IgdGhlIG5leHQgdGltZSBhIGNvbGxlY3Rpb24g
aXMgY2hhbmdlZAorICAgICAgICAgIGlmICh0cmFja1ZlcnlPbGRWYWx1ZSkgeworICAgICAgICAg
ICAgaWYgKCFpc09iamVjdChuZXdWYWx1ZSkpIHsKKyAgICAgICAgICAgICAgLy9wcmltaXRpdmUK
KyAgICAgICAgICAgICAgdmVyeU9sZFZhbHVlID0gbmV3VmFsdWU7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKGlzQXJyYXlMaWtlKG5ld1ZhbHVlKSkgeworICAgICAgICAgICAgICB2ZXJ5T2xkVmFs
dWUgPSBuZXcgQXJyYXkobmV3VmFsdWUubGVuZ3RoKTsKKyAgICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBuZXdWYWx1ZS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIHZlcnlP
bGRWYWx1ZVtpXSA9IG5ld1ZhbHVlW2ldOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
IGVsc2UgeyAvLyBpZiBvYmplY3QKKyAgICAgICAgICAgICAgdmVyeU9sZFZhbHVlID0ge307Cisg
ICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBuZXdWYWx1ZSkgeworICAgICAgICAgICAgICAg
IGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG5ld1ZhbHVlLCBrZXkpKSB7CisgICAgICAgICAgICAg
ICAgICB2ZXJ5T2xkVmFsdWVba2V5XSA9IG5ld1ZhbHVlW2tleV07CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIHRoaXMuJHdhdGNoKGNoYW5nZURldGVjdG9yLCAkd2F0Y2hDb2xs
ZWN0aW9uQWN0aW9uKTsKKyAgICAgIH0sCisKKyAgICAgIC8qKgorICAgICAgICogQG5nZG9jIG1l
dGhvZAorICAgICAgICogQG5hbWUgJHJvb3RTY29wZS5TY29wZSMkZGlnZXN0CisgICAgICAgKiBA
a2luZCBmdW5jdGlvbgorICAgICAgICoKKyAgICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAgICog
UHJvY2Vzc2VzIGFsbCBvZiB0aGUge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJHdhdGNoIHdh
dGNoZXJzfSBvZiB0aGUgY3VycmVudCBzY29wZSBhbmQKKyAgICAgICAqIGl0cyBjaGlsZHJlbi4g
QmVjYXVzZSBhIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyR3YXRjaCB3YXRjaGVyfSdzIGxp
c3RlbmVyIGNhbiBjaGFuZ2UKKyAgICAgICAqIHRoZSBtb2RlbCwgdGhlIGAkZGlnZXN0KClgIGtl
ZXBzIGNhbGxpbmcgdGhlIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyR3YXRjaCB3YXRjaGVy
c30KKyAgICAgICAqIHVudGlsIG5vIG1vcmUgbGlzdGVuZXJzIGFyZSBmaXJpbmcuIFRoaXMgbWVh
bnMgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBnZXQgaW50byBhbiBpbmZpbml0ZQorICAgICAgICog
bG9vcC4gVGhpcyBmdW5jdGlvbiB3aWxsIHRocm93IGAnTWF4aW11bSBpdGVyYXRpb24gbGltaXQg
ZXhjZWVkZWQuJ2AgaWYgdGhlIG51bWJlciBvZgorICAgICAgICogaXRlcmF0aW9ucyBleGNlZWRz
IDEwLgorICAgICAgICoKKyAgICAgICAqIFVzdWFsbHksIHlvdSBkb24ndCBjYWxsIGAkZGlnZXN0
KClgIGRpcmVjdGx5IGluCisgICAgICAgKiB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nQ29udHJvbGxl
ciBjb250cm9sbGVyc30gb3IgaW4KKyAgICAgICAqIHtAbGluayBuZy4kY29tcGlsZVByb3ZpZGVy
I2RpcmVjdGl2ZSBkaXJlY3RpdmVzfS4KKyAgICAgICAqIEluc3RlYWQsIHlvdSBzaG91bGQgY2Fs
bCB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkYXBwbHkgJGFwcGx5KCl9ICh0eXBpY2FsbHkg
ZnJvbSB3aXRoaW4KKyAgICAgICAqIGEge0BsaW5rIG5nLiRjb21waWxlUHJvdmlkZXIjZGlyZWN0
aXZlIGRpcmVjdGl2ZX0pLCB3aGljaCB3aWxsIGZvcmNlIGEgYCRkaWdlc3QoKWAuCisgICAgICAg
KgorICAgICAgICogSWYgeW91IHdhbnQgdG8gYmUgbm90aWZpZWQgd2hlbmV2ZXIgYCRkaWdlc3Qo
KWAgaXMgY2FsbGVkLAorICAgICAgICogeW91IGNhbiByZWdpc3RlciBhIGB3YXRjaEV4cHJlc3Np
b25gIGZ1bmN0aW9uIHdpdGgKKyAgICAgICAqIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyR3
YXRjaCAkd2F0Y2goKX0gd2l0aCBubyBgbGlzdGVuZXJgLgorICAgICAgICoKKyAgICAgICAqIElu
IHVuaXQgdGVzdHMsIHlvdSBtYXkgbmVlZCB0byBjYWxsIGAkZGlnZXN0KClgIHRvIHNpbXVsYXRl
IHRoZSBzY29wZSBsaWZlIGN5Y2xlLgorICAgICAgICoKKyAgICAgICAqICMgRXhhbXBsZQorICAg
ICAgICogYGBganMKKyAgICAgICAgICAgdmFyIHNjb3BlID0gLi4uOworICAgICAgICAgICBzY29w
ZS5uYW1lID0gJ21pc2tvJzsKKyAgICAgICAgICAgc2NvcGUuY291bnRlciA9IDA7CisKKyAgICAg
ICAgICAgZXhwZWN0KHNjb3BlLmNvdW50ZXIpLnRvRXF1YWwoMCk7CisgICAgICAgICAgIHNjb3Bl
LiR3YXRjaCgnbmFtZScsIGZ1bmN0aW9uKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgeworICAgICAgICAg
ICAgIHNjb3BlLmNvdW50ZXIgPSBzY29wZS5jb3VudGVyICsgMTsKKyAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgIGV4cGVjdChzY29wZS5jb3VudGVyKS50b0VxdWFsKDApOworCisgICAgICAgICAg
IHNjb3BlLiRkaWdlc3QoKTsKKyAgICAgICAgICAgLy8gdGhlIGxpc3RlbmVyIGlzIGFsd2F5cyBj
YWxsZWQgZHVyaW5nIHRoZSBmaXJzdCAkZGlnZXN0IGxvb3AgYWZ0ZXIgaXQgd2FzIHJlZ2lzdGVy
ZWQKKyAgICAgICAgICAgZXhwZWN0KHNjb3BlLmNvdW50ZXIpLnRvRXF1YWwoMSk7CisKKyAgICAg
ICAgICAgc2NvcGUuJGRpZ2VzdCgpOworICAgICAgICAgICAvLyBidXQgbm93IGl0IHdpbGwgbm90
IGJlIGNhbGxlZCB1bmxlc3MgdGhlIHZhbHVlIGNoYW5nZXMKKyAgICAgICAgICAgZXhwZWN0KHNj
b3BlLmNvdW50ZXIpLnRvRXF1YWwoMSk7CisKKyAgICAgICAgICAgc2NvcGUubmFtZSA9ICdhZGFt
JzsKKyAgICAgICAgICAgc2NvcGUuJGRpZ2VzdCgpOworICAgICAgICAgICBleHBlY3Qoc2NvcGUu
Y291bnRlcikudG9FcXVhbCgyKTsKKyAgICAgICAqIGBgYAorICAgICAgICoKKyAgICAgICAqLwor
ICAgICAgJGRpZ2VzdDogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciB3YXRjaCwgdmFsdWUsIGxh
c3QsCisgICAgICAgICAgICB3YXRjaGVycywKKyAgICAgICAgICAgIGxlbmd0aCwKKyAgICAgICAg
ICAgIGRpcnR5LCB0dGwgPSBUVEwsCisgICAgICAgICAgICBuZXh0LCBjdXJyZW50LCB0YXJnZXQg
PSB0aGlzLAorICAgICAgICAgICAgd2F0Y2hMb2cgPSBbXSwKKyAgICAgICAgICAgIGxvZ0lkeCwg
bG9nTXNnLCBhc3luY1Rhc2s7CisKKyAgICAgICAgYmVnaW5QaGFzZSgnJGRpZ2VzdCcpOworICAg
ICAgICAvLyBDaGVjayBmb3IgY2hhbmdlcyB0byBicm93c2VyIHVybCB0aGF0IGhhcHBlbmVkIGlu
IHN5bmMgYmVmb3JlIHRoZSBjYWxsIHRvICRkaWdlc3QKKyAgICAgICAgJGJyb3dzZXIuJCRjaGVj
a1VybENoYW5nZSgpOworCisgICAgICAgIGlmICh0aGlzID09PSAkcm9vdFNjb3BlICYmIGFwcGx5
QXN5bmNJZCAhPT0gbnVsbCkgeworICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIHJvb3Qgc2Nv
cGUsIGFuZCAkYXBwbHlBc3luYyBoYXMgc2NoZWR1bGVkIGEgZGVmZXJyZWQgJGFwcGx5KCksIHRo
ZW4KKyAgICAgICAgICAvLyBjYW5jZWwgdGhlIHNjaGVkdWxlZCAkYXBwbHkgYW5kIGZsdXNoIHRo
ZSBxdWV1ZSBvZiBleHByZXNzaW9ucyB0byBiZSBldmFsdWF0ZWQuCisgICAgICAgICAgJGJyb3dz
ZXIuZGVmZXIuY2FuY2VsKGFwcGx5QXN5bmNJZCk7CisgICAgICAgICAgZmx1c2hBcHBseUFzeW5j
KCk7CisgICAgICAgIH0KKworICAgICAgICBsYXN0RGlydHlXYXRjaCA9IG51bGw7CisKKyAgICAg
ICAgZG8geyAvLyAid2hpbGUgZGlydHkiIGxvb3AKKyAgICAgICAgICBkaXJ0eSA9IGZhbHNlOwor
ICAgICAgICAgIGN1cnJlbnQgPSB0YXJnZXQ7CisKKyAgICAgICAgICB3aGlsZSAoYXN5bmNRdWV1
ZS5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgIGFzeW5jVGFzayA9
IGFzeW5jUXVldWUuc2hpZnQoKTsKKyAgICAgICAgICAgICAgYXN5bmNUYXNrLnNjb3BlLiRldmFs
KGFzeW5jVGFzay5leHByZXNzaW9uLCBhc3luY1Rhc2subG9jYWxzKTsKKyAgICAgICAgICAgIH0g
Y2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBsYXN0RGlydHlXYXRjaCA9IG51bGw7CisgICAgICAgICAgfQor
CisgICAgICAgICAgdHJhdmVyc2VTY29wZXNMb29wOgorICAgICAgICAgIGRvIHsgLy8gInRyYXZl
cnNlIHRoZSBzY29wZXMiIGxvb3AKKyAgICAgICAgICAgIGlmICgod2F0Y2hlcnMgPSBjdXJyZW50
LiQkd2F0Y2hlcnMpKSB7CisgICAgICAgICAgICAgIC8vIHByb2Nlc3Mgb3VyIHdhdGNoZXMKKyAg
ICAgICAgICAgICAgbGVuZ3RoID0gd2F0Y2hlcnMubGVuZ3RoOworICAgICAgICAgICAgICB3aGls
ZSAobGVuZ3RoLS0pIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAg
d2F0Y2ggPSB3YXRjaGVyc1tsZW5ndGhdOworICAgICAgICAgICAgICAgICAgLy8gTW9zdCBjb21t
b24gd2F0Y2hlcyBhcmUgb24gcHJpbWl0aXZlcywgaW4gd2hpY2ggY2FzZSB3ZSBjYW4gc2hvcnQK
KyAgICAgICAgICAgICAgICAgIC8vIGNpcmN1aXQgaXQgd2l0aCA9PT0gb3BlcmF0b3IsIG9ubHkg
d2hlbiA9PT0gZmFpbHMgZG8gd2UgdXNlIC5lcXVhbHMKKyAgICAgICAgICAgICAgICAgIGlmICh3
YXRjaCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoKHZhbHVlID0gd2F0Y2guZ2V0KGN1cnJl
bnQpKSAhPT0gKGxhc3QgPSB3YXRjaC5sYXN0KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAg
ISh3YXRjaC5lcQorICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZXF1YWxzKHZhbHVlLCBs
YXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKHR5cGVvZiB2YWx1ZSA9PT0gJ251
bWJlcicgJiYgdHlwZW9mIGxhc3QgPT09ICdudW1iZXInCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgaXNOYU4odmFsdWUpICYmIGlzTmFOKGxhc3QpKSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICBkaXJ0eSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgbGFzdERpcnR5
V2F0Y2ggPSB3YXRjaDsKKyAgICAgICAgICAgICAgICAgICAgICB3YXRjaC5sYXN0ID0gd2F0Y2gu
ZXEgPyBjb3B5KHZhbHVlLCBudWxsKSA6IHZhbHVlOworICAgICAgICAgICAgICAgICAgICAgIHdh
dGNoLmZuKHZhbHVlLCAoKGxhc3QgPT09IGluaXRXYXRjaFZhbCkgPyB2YWx1ZSA6IGxhc3QpLCBj
dXJyZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAodHRsIDwgNSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbG9nSWR4ID0gNCAtIHR0bDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghd2F0Y2hMb2dbbG9nSWR4XSkgd2F0Y2hMb2dbbG9nSWR4XSA9IFtdOworICAgICAgICAg
ICAgICAgICAgICAgICAgd2F0Y2hMb2dbbG9nSWR4XS5wdXNoKHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgbXNnOiBpc0Z1bmN0aW9uKHdhdGNoLmV4cCkgPyAnZm46ICcgKyAod2F0Y2guZXhw
Lm5hbWUgfHwgd2F0Y2guZXhwLnRvU3RyaW5nKCkpIDogd2F0Y2guZXhwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBuZXdWYWw6IHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBv
bGRWYWw6IGxhc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3YXRjaCA9PT0gbGFzdERp
cnR5V2F0Y2gpIHsKKyAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbW9zdCByZWNlbnRs
eSBkaXJ0eSB3YXRjaGVyIGlzIG5vdyBjbGVhbiwgc2hvcnQgY2lyY3VpdCBzaW5jZSB0aGUgcmVt
YWluaW5nIHdhdGNoZXJzCisgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBhbHJlYWR5IGJl
ZW4gdGVzdGVkLgorICAgICAgICAgICAgICAgICAgICAgIGRpcnR5ID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWsgdHJhdmVyc2VTY29wZXNMb29wOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkg
eworICAgICAgICAgICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoZSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIElu
c2FuaXR5IFdhcm5pbmc6IHNjb3BlIGRlcHRoLWZpcnN0IHRyYXZlcnNhbAorICAgICAgICAgICAg
Ly8geWVzLCB0aGlzIGNvZGUgaXMgYSBiaXQgY3JhenksIGJ1dCBpdCB3b3JrcyBhbmQgd2UgaGF2
ZSB0ZXN0cyB0byBwcm92ZSBpdCEKKyAgICAgICAgICAgIC8vIHRoaXMgcGllY2Ugc2hvdWxkIGJl
IGtlcHQgaW4gc3luYyB3aXRoIHRoZSB0cmF2ZXJzYWwgaW4gJGJyb2FkY2FzdAorICAgICAgICAg
ICAgaWYgKCEobmV4dCA9ICgoY3VycmVudC4kJHdhdGNoZXJzQ291bnQgJiYgY3VycmVudC4kJGNo
aWxkSGVhZCkgfHwKKyAgICAgICAgICAgICAgICAoY3VycmVudCAhPT0gdGFyZ2V0ICYmIGN1cnJl
bnQuJCRuZXh0U2libGluZykpKSkgeworICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudCAhPT0g
dGFyZ2V0ICYmICEobmV4dCA9IGN1cnJlbnQuJCRuZXh0U2libGluZykpIHsKKyAgICAgICAgICAg
ICAgICBjdXJyZW50ID0gY3VycmVudC4kcGFyZW50OworICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgfSB3aGlsZSAoKGN1cnJlbnQgPSBuZXh0KSk7CisKKyAgICAgICAg
ICAvLyBgYnJlYWsgdHJhdmVyc2VTY29wZXNMb29wO2AgdGFrZXMgdXMgdG8gaGVyZQorCisgICAg
ICAgICAgaWYgKChkaXJ0eSB8fCBhc3luY1F1ZXVlLmxlbmd0aCkgJiYgISh0dGwtLSkpIHsKKyAg
ICAgICAgICAgIGNsZWFyUGhhc2UoKTsKKyAgICAgICAgICAgIHRocm93ICRyb290U2NvcGVNaW5F
cnIoJ2luZmRpZycsCisgICAgICAgICAgICAgICAgJ3swfSAkZGlnZXN0KCkgaXRlcmF0aW9ucyBy
ZWFjaGVkLiBBYm9ydGluZyFcbicgKworICAgICAgICAgICAgICAgICdXYXRjaGVycyBmaXJlZCBp
biB0aGUgbGFzdCA1IGl0ZXJhdGlvbnM6IHsxfScsCisgICAgICAgICAgICAgICAgVFRMLCB3YXRj
aExvZyk7CisgICAgICAgICAgfQorCisgICAgICAgIH0gd2hpbGUgKGRpcnR5IHx8IGFzeW5jUXVl
dWUubGVuZ3RoKTsKKworICAgICAgICBjbGVhclBoYXNlKCk7CisKKyAgICAgICAgd2hpbGUgKHBv
c3REaWdlc3RRdWV1ZS5sZW5ndGgpIHsKKyAgICAgICAgICB0cnkgeworICAgICAgICAgICAgcG9z
dERpZ2VzdFF1ZXVlLnNoaWZ0KCkoKTsKKyAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAg
ICAgICAkZXhjZXB0aW9uSGFuZGxlcihlKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
IH0sCisKKworICAgICAgLyoqCisgICAgICAgKiBAbmdkb2MgZXZlbnQKKyAgICAgICAqIEBuYW1l
ICRyb290U2NvcGUuU2NvcGUjJGRlc3Ryb3kKKyAgICAgICAqIEBldmVudFR5cGUgYnJvYWRjYXN0
IG9uIHNjb3BlIGJlaW5nIGRlc3Ryb3llZAorICAgICAgICoKKyAgICAgICAqIEBkZXNjcmlwdGlv
bgorICAgICAgICogQnJvYWRjYXN0ZWQgd2hlbiBhIHNjb3BlIGFuZCBpdHMgY2hpbGRyZW4gYXJl
IGJlaW5nIGRlc3Ryb3llZC4KKyAgICAgICAqCisgICAgICAgKiBOb3RlIHRoYXQsIGluIEFuZ3Vs
YXJKUywgdGhlcmUgaXMgYWxzbyBhIGAkZGVzdHJveWAgalF1ZXJ5IGV2ZW50LCB3aGljaCBjYW4g
YmUgdXNlZCB0bworICAgICAgICogY2xlYW4gdXAgRE9NIGJpbmRpbmdzIGJlZm9yZSBhbiBlbGVt
ZW50IGlzIHJlbW92ZWQgZnJvbSB0aGUgRE9NLgorICAgICAgICovCisKKyAgICAgIC8qKgorICAg
ICAgICogQG5nZG9jIG1ldGhvZAorICAgICAgICogQG5hbWUgJHJvb3RTY29wZS5TY29wZSMkZGVz
dHJveQorICAgICAgICogQGtpbmQgZnVuY3Rpb24KKyAgICAgICAqCisgICAgICAgKiBAZGVzY3Jp
cHRpb24KKyAgICAgICAqIFJlbW92ZXMgdGhlIGN1cnJlbnQgc2NvcGUgKGFuZCBhbGwgb2YgaXRz
IGNoaWxkcmVuKSBmcm9tIHRoZSBwYXJlbnQgc2NvcGUuIFJlbW92YWwgaW1wbGllcworICAgICAg
ICogdGhhdCBjYWxscyB0byB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkZGlnZXN0ICRkaWdl
c3QoKX0gd2lsbCBubyBsb25nZXIKKyAgICAgICAqIHByb3BhZ2F0ZSB0byB0aGUgY3VycmVudCBz
Y29wZSBhbmQgaXRzIGNoaWxkcmVuLiBSZW1vdmFsIGFsc28gaW1wbGllcyB0aGF0IHRoZSBjdXJy
ZW50CisgICAgICAgKiBzY29wZSBpcyBlbGlnaWJsZSBmb3IgZ2FyYmFnZSBjb2xsZWN0aW9uLgor
ICAgICAgICoKKyAgICAgICAqIFRoZSBgJGRlc3Ryb3koKWAgaXMgdXN1YWxseSB1c2VkIGJ5IGRp
cmVjdGl2ZXMgc3VjaCBhcworICAgICAgICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ1JlcGVhdCBu
Z1JlcGVhdH0gZm9yIG1hbmFnaW5nIHRoZQorICAgICAgICogdW5yb2xsaW5nIG9mIHRoZSBsb29w
LgorICAgICAgICoKKyAgICAgICAqIEp1c3QgYmVmb3JlIGEgc2NvcGUgaXMgZGVzdHJveWVkLCBh
IGAkZGVzdHJveWAgZXZlbnQgaXMgYnJvYWRjYXN0ZWQgb24gdGhpcyBzY29wZS4KKyAgICAgICAq
IEFwcGxpY2F0aW9uIGNvZGUgY2FuIHJlZ2lzdGVyIGEgYCRkZXN0cm95YCBldmVudCBoYW5kbGVy
IHRoYXQgd2lsbCBnaXZlIGl0IGEgY2hhbmNlIHRvCisgICAgICAgKiBwZXJmb3JtIGFueSBuZWNl
c3NhcnkgY2xlYW51cC4KKyAgICAgICAqCisgICAgICAgKiBOb3RlIHRoYXQsIGluIEFuZ3VsYXJK
UywgdGhlcmUgaXMgYWxzbyBhIGAkZGVzdHJveWAgalF1ZXJ5IGV2ZW50LCB3aGljaCBjYW4gYmUg
dXNlZCB0bworICAgICAgICogY2xlYW4gdXAgRE9NIGJpbmRpbmdzIGJlZm9yZSBhbiBlbGVtZW50
IGlzIHJlbW92ZWQgZnJvbSB0aGUgRE9NLgorICAgICAgICovCisgICAgICAkZGVzdHJveTogZnVu
Y3Rpb24oKSB7CisgICAgICAgIC8vIFdlIGNhbid0IGRlc3Ryb3kgYSBzY29wZSB0aGF0IGhhcyBi
ZWVuIGFscmVhZHkgZGVzdHJveWVkLgorICAgICAgICBpZiAodGhpcy4kJGRlc3Ryb3llZCkgcmV0
dXJuOworICAgICAgICB2YXIgcGFyZW50ID0gdGhpcy4kcGFyZW50OworCisgICAgICAgIHRoaXMu
JGJyb2FkY2FzdCgnJGRlc3Ryb3knKTsKKyAgICAgICAgdGhpcy4kJGRlc3Ryb3llZCA9IHRydWU7
CisKKyAgICAgICAgaWYgKHRoaXMgPT09ICRyb290U2NvcGUpIHsKKyAgICAgICAgICAvL1JlbW92
ZSBoYW5kbGVycyBhdHRhY2hlZCB0byB3aW5kb3cgd2hlbiAkcm9vdFNjb3BlIGlzIHJlbW92ZWQK
KyAgICAgICAgICAkYnJvd3Nlci4kJGFwcGxpY2F0aW9uRGVzdHJveWVkKCk7CisgICAgICAgIH0K
KworICAgICAgICBpbmNyZW1lbnRXYXRjaGVyc0NvdW50KHRoaXMsIC10aGlzLiQkd2F0Y2hlcnND
b3VudCk7CisgICAgICAgIGZvciAodmFyIGV2ZW50TmFtZSBpbiB0aGlzLiQkbGlzdGVuZXJDb3Vu
dCkgeworICAgICAgICAgIGRlY3JlbWVudExpc3RlbmVyQ291bnQodGhpcywgdGhpcy4kJGxpc3Rl
bmVyQ291bnRbZXZlbnROYW1lXSwgZXZlbnROYW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IHNldmVyIGFsbCB0aGUgcmVmZXJlbmNlcyB0byBwYXJlbnQgc2NvcGVzIChhZnRlciB0aGlzIGNs
ZWFudXAsIHRoZSBjdXJyZW50IHNjb3BlIHNob3VsZAorICAgICAgICAvLyBub3QgYmUgcmV0YWlu
ZWQgYnkgYW55IG9mIG91ciByZWZlcmVuY2VzIGFuZCBzaG91bGQgYmUgZWxpZ2libGUgZm9yIGdh
cmJhZ2UgY29sbGVjdGlvbikKKyAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQuJCRjaGlsZEhl
YWQgPT0gdGhpcykgcGFyZW50LiQkY2hpbGRIZWFkID0gdGhpcy4kJG5leHRTaWJsaW5nOworICAg
ICAgICBpZiAocGFyZW50ICYmIHBhcmVudC4kJGNoaWxkVGFpbCA9PSB0aGlzKSBwYXJlbnQuJCRj
aGlsZFRhaWwgPSB0aGlzLiQkcHJldlNpYmxpbmc7CisgICAgICAgIGlmICh0aGlzLiQkcHJldlNp
YmxpbmcpIHRoaXMuJCRwcmV2U2libGluZy4kJG5leHRTaWJsaW5nID0gdGhpcy4kJG5leHRTaWJs
aW5nOworICAgICAgICBpZiAodGhpcy4kJG5leHRTaWJsaW5nKSB0aGlzLiQkbmV4dFNpYmxpbmcu
JCRwcmV2U2libGluZyA9IHRoaXMuJCRwcmV2U2libGluZzsKKworICAgICAgICAvLyBEaXNhYmxl
IGxpc3RlbmVycywgd2F0Y2hlcnMgYW5kIGFwcGx5L2RpZ2VzdCBtZXRob2RzCisgICAgICAgIHRo
aXMuJGRlc3Ryb3kgPSB0aGlzLiRkaWdlc3QgPSB0aGlzLiRhcHBseSA9IHRoaXMuJGV2YWxBc3lu
YyA9IHRoaXMuJGFwcGx5QXN5bmMgPSBub29wOworICAgICAgICB0aGlzLiRvbiA9IHRoaXMuJHdh
dGNoID0gdGhpcy4kd2F0Y2hHcm91cCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbm9vcDsgfTsKKyAg
ICAgICAgdGhpcy4kJGxpc3RlbmVycyA9IHt9OworCisgICAgICAgIC8vIEFsbCBvZiB0aGUgY29k
ZSBiZWxvdyBpcyBib2d1cyBjb2RlIHRoYXQgd29ya3MgYXJvdW5kIFY4J3MgbWVtb3J5IGxlYWsg
dmlhIG9wdGltaXplZCBjb2RlCisgICAgICAgIC8vIGFuZCBpbmxpbmUgY2FjaGVzLgorICAgICAg
ICAvLworICAgICAgICAvLyBzZWU6CisgICAgICAgIC8vIC0gaHR0cHM6Ly9jb2RlLmdvb2dsZS5j
b20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTIwNzMjYzI2CisgICAgICAgIC8vIC0gaHR0cHM6Ly9n
aXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci5qcy9pc3N1ZXMvNjc5NCNpc3N1ZWNvbW1lbnQtMzg2
NDg5MDkKKyAgICAgICAgLy8gLSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyLmpz
L2lzc3Vlcy8xMzEzI2lzc3VlY29tbWVudC0xMDM3ODQ1MQorCisgICAgICAgIHRoaXMuJHBhcmVu
dCA9IHRoaXMuJCRuZXh0U2libGluZyA9IHRoaXMuJCRwcmV2U2libGluZyA9IHRoaXMuJCRjaGls
ZEhlYWQgPQorICAgICAgICAgICAgdGhpcy4kJGNoaWxkVGFpbCA9IHRoaXMuJHJvb3QgPSB0aGlz
LiQkd2F0Y2hlcnMgPSBudWxsOworICAgICAgfSwKKworICAgICAgLyoqCisgICAgICAgKiBAbmdk
b2MgbWV0aG9kCisgICAgICAgKiBAbmFtZSAkcm9vdFNjb3BlLlNjb3BlIyRldmFsCisgICAgICAg
KiBAa2luZCBmdW5jdGlvbgorICAgICAgICoKKyAgICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAg
ICogRXhlY3V0ZXMgdGhlIGBleHByZXNzaW9uYCBvbiB0aGUgY3VycmVudCBzY29wZSBhbmQgcmV0
dXJucyB0aGUgcmVzdWx0LiBBbnkgZXhjZXB0aW9ucyBpbgorICAgICAgICogdGhlIGV4cHJlc3Np
b24gYXJlIHByb3BhZ2F0ZWQgKHVuY2F1Z2h0KS4gVGhpcyBpcyB1c2VmdWwgd2hlbiBldmFsdWF0
aW5nIEFuZ3VsYXIKKyAgICAgICAqIGV4cHJlc3Npb25zLgorICAgICAgICoKKyAgICAgICAqICMg
RXhhbXBsZQorICAgICAgICogYGBganMKKyAgICAgICAgICAgdmFyIHNjb3BlID0gbmcuJHJvb3RT
Y29wZS5TY29wZSgpOworICAgICAgICAgICBzY29wZS5hID0gMTsKKyAgICAgICAgICAgc2NvcGUu
YiA9IDI7CisKKyAgICAgICAgICAgZXhwZWN0KHNjb3BlLiRldmFsKCdhK2InKSkudG9FcXVhbCgz
KTsKKyAgICAgICAgICAgZXhwZWN0KHNjb3BlLiRldmFsKGZ1bmN0aW9uKHNjb3BlKXsgcmV0dXJu
IHNjb3BlLmEgKyBzY29wZS5iOyB9KSkudG9FcXVhbCgzKTsKKyAgICAgICAqIGBgYAorICAgICAg
ICoKKyAgICAgICAqIEBwYXJhbSB7KHN0cmluZ3xmdW5jdGlvbigpKT19IGV4cHJlc3Npb24gQW4g
YW5ndWxhciBleHByZXNzaW9uIHRvIGJlIGV4ZWN1dGVkLgorICAgICAgICoKKyAgICAgICAqICAg
IC0gYHN0cmluZ2A6IGV4ZWN1dGUgdXNpbmcgdGhlIHJ1bGVzIGFzIGRlZmluZWQgaW4gIHtAbGlu
ayBndWlkZS9leHByZXNzaW9uIGV4cHJlc3Npb259LgorICAgICAgICogICAgLSBgZnVuY3Rpb24o
c2NvcGUpYDogZXhlY3V0ZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgY3VycmVudCBgc2NvcGVgIHBh
cmFtZXRlci4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0geyhvYmplY3QpPX0gbG9jYWxzIExv
Y2FsIHZhcmlhYmxlcyBvYmplY3QsIHVzZWZ1bCBmb3Igb3ZlcnJpZGluZyB2YWx1ZXMgaW4gc2Nv
cGUuCisgICAgICAgKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdCBvZiBldmFsdWF0aW5nIHRoZSBl
eHByZXNzaW9uLgorICAgICAgICovCisgICAgICAkZXZhbDogZnVuY3Rpb24oZXhwciwgbG9jYWxz
KSB7CisgICAgICAgIHJldHVybiAkcGFyc2UoZXhwcikodGhpcywgbG9jYWxzKTsKKyAgICAgIH0s
CisKKyAgICAgIC8qKgorICAgICAgICogQG5nZG9jIG1ldGhvZAorICAgICAgICogQG5hbWUgJHJv
b3RTY29wZS5TY29wZSMkZXZhbEFzeW5jCisgICAgICAgKiBAa2luZCBmdW5jdGlvbgorICAgICAg
ICoKKyAgICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAgICogRXhlY3V0ZXMgdGhlIGV4cHJlc3Np
b24gb24gdGhlIGN1cnJlbnQgc2NvcGUgYXQgYSBsYXRlciBwb2ludCBpbiB0aW1lLgorICAgICAg
ICoKKyAgICAgICAqIFRoZSBgJGV2YWxBc3luY2AgbWFrZXMgbm8gZ3VhcmFudGVlcyBhcyB0byB3
aGVuIHRoZSBgZXhwcmVzc2lvbmAgd2lsbCBiZSBleGVjdXRlZCwgb25seQorICAgICAgICogdGhh
dDoKKyAgICAgICAqCisgICAgICAgKiAgIC0gaXQgd2lsbCBleGVjdXRlIGFmdGVyIHRoZSBmdW5j
dGlvbiB0aGF0IHNjaGVkdWxlZCB0aGUgZXZhbHVhdGlvbiAocHJlZmVyYWJseSBiZWZvcmUgRE9N
CisgICAgICAgKiAgICAgcmVuZGVyaW5nKS4KKyAgICAgICAqICAgLSBhdCBsZWFzdCBvbmUge0Bs
aW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGRpZ2VzdCAkZGlnZXN0IGN5Y2xlfSB3aWxsIGJlIHBl
cmZvcm1lZCBhZnRlcgorICAgICAgICogICAgIGBleHByZXNzaW9uYCBleGVjdXRpb24uCisgICAg
ICAgKgorICAgICAgICogQW55IGV4Y2VwdGlvbnMgZnJvbSB0aGUgZXhlY3V0aW9uIG9mIHRoZSBl
eHByZXNzaW9uIGFyZSBmb3J3YXJkZWQgdG8gdGhlCisgICAgICAgKiB7QGxpbmsgbmcuJGV4Y2Vw
dGlvbkhhbmRsZXIgJGV4Y2VwdGlvbkhhbmRsZXJ9IHNlcnZpY2UuCisgICAgICAgKgorICAgICAg
ICogX19Ob3RlOl9fIGlmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG91dHNpZGUgb2YgYSBgJGRp
Z2VzdGAgY3ljbGUsIGEgbmV3IGAkZGlnZXN0YCBjeWNsZQorICAgICAgICogd2lsbCBiZSBzY2hl
ZHVsZWQuIEhvd2V2ZXIsIGl0IGlzIGVuY291cmFnZWQgdG8gYWx3YXlzIGNhbGwgY29kZSB0aGF0
IGNoYW5nZXMgdGhlIG1vZGVsCisgICAgICAgKiBmcm9tIHdpdGhpbiBhbiBgJGFwcGx5YCBjYWxs
LiBUaGF0IGluY2x1ZGVzIGNvZGUgZXZhbHVhdGVkIHZpYSBgJGV2YWxBc3luY2AuCisgICAgICAg
KgorICAgICAgICogQHBhcmFtIHsoc3RyaW5nfGZ1bmN0aW9uKCkpPX0gZXhwcmVzc2lvbiBBbiBh
bmd1bGFyIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWQuCisgICAgICAgKgorICAgICAgICogICAg
LSBgc3RyaW5nYDogZXhlY3V0ZSB1c2luZyB0aGUgcnVsZXMgYXMgZGVmaW5lZCBpbiB7QGxpbmsg
Z3VpZGUvZXhwcmVzc2lvbiBleHByZXNzaW9ufS4KKyAgICAgICAqICAgIC0gYGZ1bmN0aW9uKHNj
b3BlKWA6IGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGN1cnJlbnQgYHNjb3BlYCBwYXJh
bWV0ZXIuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIHsob2JqZWN0KT19IGxvY2FscyBMb2Nh
bCB2YXJpYWJsZXMgb2JqZWN0LCB1c2VmdWwgZm9yIG92ZXJyaWRpbmcgdmFsdWVzIGluIHNjb3Bl
LgorICAgICAgICovCisgICAgICAkZXZhbEFzeW5jOiBmdW5jdGlvbihleHByLCBsb2NhbHMpIHsK
KyAgICAgICAgLy8gaWYgd2UgYXJlIG91dHNpZGUgb2YgYW4gJGRpZ2VzdCBsb29wIGFuZCB0aGlz
IGlzIHRoZSBmaXJzdCB0aW1lIHdlIGFyZSBzY2hlZHVsaW5nIGFzeW5jCisgICAgICAgIC8vIHRh
c2sgYWxzbyBzY2hlZHVsZSBhc3luYyBhdXRvLWZsdXNoCisgICAgICAgIGlmICghJHJvb3RTY29w
ZS4kJHBoYXNlICYmICFhc3luY1F1ZXVlLmxlbmd0aCkgeworICAgICAgICAgICRicm93c2VyLmRl
ZmVyKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaWYgKGFzeW5jUXVldWUubGVuZ3RoKSB7Cisg
ICAgICAgICAgICAgICRyb290U2NvcGUuJGRpZ2VzdCgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgYXN5bmNRdWV1ZS5wdXNoKHtzY29wZTogdGhp
cywgZXhwcmVzc2lvbjogZXhwciwgbG9jYWxzOiBsb2NhbHN9KTsKKyAgICAgIH0sCisKKyAgICAg
ICQkcG9zdERpZ2VzdDogZnVuY3Rpb24oZm4pIHsKKyAgICAgICAgcG9zdERpZ2VzdFF1ZXVlLnB1
c2goZm4pOworICAgICAgfSwKKworICAgICAgLyoqCisgICAgICAgKiBAbmdkb2MgbWV0aG9kCisg
ICAgICAgKiBAbmFtZSAkcm9vdFNjb3BlLlNjb3BlIyRhcHBseQorICAgICAgICogQGtpbmQgZnVu
Y3Rpb24KKyAgICAgICAqCisgICAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgICAqIGAkYXBwbHko
KWAgaXMgdXNlZCB0byBleGVjdXRlIGFuIGV4cHJlc3Npb24gaW4gYW5ndWxhciBmcm9tIG91dHNp
ZGUgb2YgdGhlIGFuZ3VsYXIKKyAgICAgICAqIGZyYW1ld29yay4gKEZvciBleGFtcGxlIGZyb20g
YnJvd3NlciBET00gZXZlbnRzLCBzZXRUaW1lb3V0LCBYSFIgb3IgdGhpcmQgcGFydHkgbGlicmFy
aWVzKS4KKyAgICAgICAqIEJlY2F1c2Ugd2UgYXJlIGNhbGxpbmcgaW50byB0aGUgYW5ndWxhciBm
cmFtZXdvcmsgd2UgbmVlZCB0byBwZXJmb3JtIHByb3BlciBzY29wZSBsaWZlCisgICAgICAgKiBj
eWNsZSBvZiB7QGxpbmsgbmcuJGV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uIGhhbmRsaW5nfSwK
KyAgICAgICAqIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRkaWdlc3QgZXhlY3V0aW5nIHdh
dGNoZXN9LgorICAgICAgICoKKyAgICAgICAqICMjIExpZmUgY3ljbGUKKyAgICAgICAqCisgICAg
ICAgKiAjIFBzZXVkby1Db2RlIG9mIGAkYXBwbHkoKWAKKyAgICAgICAqIGBgYGpzCisgICAgICAg
ICAgIGZ1bmN0aW9uICRhcHBseShleHByKSB7CisgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAg
ICAgICAgIHJldHVybiAkZXZhbChleHByKTsKKyAgICAgICAgICAgICB9IGNhdGNoIChlKSB7Cisg
ICAgICAgICAgICAgICAkZXhjZXB0aW9uSGFuZGxlcihlKTsKKyAgICAgICAgICAgICB9IGZpbmFs
bHkgeworICAgICAgICAgICAgICAgJHJvb3QuJGRpZ2VzdCgpOworICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgfQorICAgICAgICogYGBgCisgICAgICAgKgorICAgICAgICoKKyAgICAgICAqIFNj
b3BlJ3MgYCRhcHBseSgpYCBtZXRob2QgdHJhbnNpdGlvbnMgdGhyb3VnaCB0aGUgZm9sbG93aW5n
IHN0YWdlczoKKyAgICAgICAqCisgICAgICAgKiAxLiBUaGUge0BsaW5rIGd1aWRlL2V4cHJlc3Np
b24gZXhwcmVzc2lvbn0gaXMgZXhlY3V0ZWQgdXNpbmcgdGhlCisgICAgICAgKiAgICB7QGxpbmsg
bmcuJHJvb3RTY29wZS5TY29wZSMkZXZhbCAkZXZhbCgpfSBtZXRob2QuCisgICAgICAgKiAyLiBB
bnkgZXhjZXB0aW9ucyBmcm9tIHRoZSBleGVjdXRpb24gb2YgdGhlIGV4cHJlc3Npb24gYXJlIGZv
cndhcmRlZCB0byB0aGUKKyAgICAgICAqICAgIHtAbGluayBuZy4kZXhjZXB0aW9uSGFuZGxlciAk
ZXhjZXB0aW9uSGFuZGxlcn0gc2VydmljZS4KKyAgICAgICAqIDMuIFRoZSB7QGxpbmsgbmcuJHJv
b3RTY29wZS5TY29wZSMkd2F0Y2ggd2F0Y2h9IGxpc3RlbmVycyBhcmUgZmlyZWQgaW1tZWRpYXRl
bHkgYWZ0ZXIgdGhlCisgICAgICAgKiAgICBleHByZXNzaW9uIHdhcyBleGVjdXRlZCB1c2luZyB0
aGUge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGRpZ2VzdCAkZGlnZXN0KCl9IG1ldGhvZC4K
KyAgICAgICAqCisgICAgICAgKgorICAgICAgICogQHBhcmFtIHsoc3RyaW5nfGZ1bmN0aW9uKCkp
PX0gZXhwIEFuIGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBiZSBleGVjdXRlZC4KKyAgICAgICAqCisg
ICAgICAgKiAgICAtIGBzdHJpbmdgOiBleGVjdXRlIHVzaW5nIHRoZSBydWxlcyBhcyBkZWZpbmVk
IGluIHtAbGluayBndWlkZS9leHByZXNzaW9uIGV4cHJlc3Npb259LgorICAgICAgICogICAgLSBg
ZnVuY3Rpb24oc2NvcGUpYDogZXhlY3V0ZSB0aGUgZnVuY3Rpb24gd2l0aCBjdXJyZW50IGBzY29w
ZWAgcGFyYW1ldGVyLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0
IG9mIGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb24uCisgICAgICAgKi8KKyAgICAgICRhcHBseTog
ZnVuY3Rpb24oZXhwcikgeworICAgICAgICB0cnkgeworICAgICAgICAgIGJlZ2luUGhhc2UoJyRh
cHBseScpOworICAgICAgICAgIHJldHVybiB0aGlzLiRldmFsKGV4cHIpOworICAgICAgICB9IGNh
dGNoIChlKSB7CisgICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoZSk7CisgICAgICAgIH0gZmlu
YWxseSB7CisgICAgICAgICAgY2xlYXJQaGFzZSgpOworICAgICAgICAgIHRyeSB7CisgICAgICAg
ICAgICAkcm9vdFNjb3BlLiRkaWdlc3QoKTsKKyAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAg
ICAgICAgICAkZXhjZXB0aW9uSGFuZGxlcihlKTsKKyAgICAgICAgICAgIHRocm93IGU7CisgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICB9LAorCisgICAgICAvKioKKyAgICAgICAqIEBuZ2Rv
YyBtZXRob2QKKyAgICAgICAqIEBuYW1lICRyb290U2NvcGUuU2NvcGUjJGFwcGx5QXN5bmMKKyAg
ICAgICAqIEBraW5kIGZ1bmN0aW9uCisgICAgICAgKgorICAgICAgICogQGRlc2NyaXB0aW9uCisg
ICAgICAgKiBTY2hlZHVsZSB0aGUgaW52b2NhdGlvbiBvZiAkYXBwbHkgdG8gb2NjdXIgYXQgYSBs
YXRlciB0aW1lLiBUaGUgYWN0dWFsIHRpbWUgZGlmZmVyZW5jZQorICAgICAgICogdmFyaWVzIGFj
cm9zcyBicm93c2VycywgYnV0IGlzIHR5cGljYWxseSBhcm91bmQgfjEwIG1pbGxpc2Vjb25kcy4K
KyAgICAgICAqCisgICAgICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIHF1ZXVlIHVwIG11bHRpcGxl
IGV4cHJlc3Npb25zIHdoaWNoIG5lZWQgdG8gYmUgZXZhbHVhdGVkIGluIHRoZSBzYW1lCisgICAg
ICAgKiBkaWdlc3QuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIHsoc3RyaW5nfGZ1bmN0aW9u
KCkpPX0gZXhwIEFuIGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBiZSBleGVjdXRlZC4KKyAgICAgICAq
CisgICAgICAgKiAgICAtIGBzdHJpbmdgOiBleGVjdXRlIHVzaW5nIHRoZSBydWxlcyBhcyBkZWZp
bmVkIGluIHtAbGluayBndWlkZS9leHByZXNzaW9uIGV4cHJlc3Npb259LgorICAgICAgICogICAg
LSBgZnVuY3Rpb24oc2NvcGUpYDogZXhlY3V0ZSB0aGUgZnVuY3Rpb24gd2l0aCBjdXJyZW50IGBz
Y29wZWAgcGFyYW1ldGVyLgorICAgICAgICovCisgICAgICAkYXBwbHlBc3luYzogZnVuY3Rpb24o
ZXhwcikgeworICAgICAgICB2YXIgc2NvcGUgPSB0aGlzOworICAgICAgICBleHByICYmIGFwcGx5
QXN5bmNRdWV1ZS5wdXNoKCRhcHBseUFzeW5jRXhwcmVzc2lvbik7CisgICAgICAgIHNjaGVkdWxl
QXBwbHlBc3luYygpOworCisgICAgICAgIGZ1bmN0aW9uICRhcHBseUFzeW5jRXhwcmVzc2lvbigp
IHsKKyAgICAgICAgICBzY29wZS4kZXZhbChleHByKTsKKyAgICAgICAgfQorICAgICAgfSwKKwor
ICAgICAgLyoqCisgICAgICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICAgKiBAbmFtZSAkcm9vdFNj
b3BlLlNjb3BlIyRvbgorICAgICAgICogQGtpbmQgZnVuY3Rpb24KKyAgICAgICAqCisgICAgICAg
KiBAZGVzY3JpcHRpb24KKyAgICAgICAqIExpc3RlbnMgb24gZXZlbnRzIG9mIGEgZ2l2ZW4gdHlw
ZS4gU2VlIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRlbWl0ICRlbWl0fSBmb3IKKyAgICAg
ICAqIGRpc2N1c3Npb24gb2YgZXZlbnQgbGlmZSBjeWNsZS4KKyAgICAgICAqCisgICAgICAgKiBU
aGUgZXZlbnQgbGlzdGVuZXIgZnVuY3Rpb24gZm9ybWF0IGlzOiBgZnVuY3Rpb24oZXZlbnQsIGFy
Z3MuLi4pYC4gVGhlIGBldmVudGAgb2JqZWN0CisgICAgICAgKiBwYXNzZWQgaW50byB0aGUgbGlz
dGVuZXIgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKKyAgICAgICAqCisgICAgICAgKiAg
IC0gYHRhcmdldFNjb3BlYCAtIGB7U2NvcGV9YDogdGhlIHNjb3BlIG9uIHdoaWNoIHRoZSBldmVu
dCB3YXMgYCRlbWl0YC1lZCBvcgorICAgICAgICogICAgIGAkYnJvYWRjYXN0YC1lZC4KKyAgICAg
ICAqICAgLSBgY3VycmVudFNjb3BlYCAtIGB7U2NvcGV9YDogdGhlIHNjb3BlIHRoYXQgaXMgY3Vy
cmVudGx5IGhhbmRsaW5nIHRoZSBldmVudC4gT25jZSB0aGUKKyAgICAgICAqICAgICBldmVudCBw
cm9wYWdhdGVzIHRocm91Z2ggdGhlIHNjb3BlIGhpZXJhcmNoeSwgdGhpcyBwcm9wZXJ0eSBpcyBz
ZXQgdG8gbnVsbC4KKyAgICAgICAqICAgLSBgbmFtZWAgLSBge3N0cmluZ31gOiBuYW1lIG9mIHRo
ZSBldmVudC4KKyAgICAgICAqICAgLSBgc3RvcFByb3BhZ2F0aW9uYCAtIGB7ZnVuY3Rpb249fWA6
IGNhbGxpbmcgYHN0b3BQcm9wYWdhdGlvbmAgZnVuY3Rpb24gd2lsbCBjYW5jZWwKKyAgICAgICAq
ICAgICBmdXJ0aGVyIGV2ZW50IHByb3BhZ2F0aW9uIChhdmFpbGFibGUgb25seSBmb3IgZXZlbnRz
IHRoYXQgd2VyZSBgJGVtaXRgLWVkKS4KKyAgICAgICAqICAgLSBgcHJldmVudERlZmF1bHRgIC0g
YHtmdW5jdGlvbn1gOiBjYWxsaW5nIGBwcmV2ZW50RGVmYXVsdGAgc2V0cyBgZGVmYXVsdFByZXZl
bnRlZGAgZmxhZworICAgICAgICogICAgIHRvIHRydWUuCisgICAgICAgKiAgIC0gYGRlZmF1bHRQ
cmV2ZW50ZWRgIC0gYHtib29sZWFufWA6IHRydWUgaWYgYHByZXZlbnREZWZhdWx0YCB3YXMgY2Fs
bGVkLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIEV2ZW50IG5hbWUg
dG8gbGlzdGVuIG9uLgorICAgICAgICogQHBhcmFtIHtmdW5jdGlvbihldmVudCwgLi4uYXJncyl9
IGxpc3RlbmVyIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgZXZlbnQgaXMgZW1pdHRlZC4KKyAg
ICAgICAqIEByZXR1cm5zIHtmdW5jdGlvbigpfSBSZXR1cm5zIGEgZGVyZWdpc3RyYXRpb24gZnVu
Y3Rpb24gZm9yIHRoaXMgbGlzdGVuZXIuCisgICAgICAgKi8KKyAgICAgICRvbjogZnVuY3Rpb24o
bmFtZSwgbGlzdGVuZXIpIHsKKyAgICAgICAgdmFyIG5hbWVkTGlzdGVuZXJzID0gdGhpcy4kJGxp
c3RlbmVyc1tuYW1lXTsKKyAgICAgICAgaWYgKCFuYW1lZExpc3RlbmVycykgeworICAgICAgICAg
IHRoaXMuJCRsaXN0ZW5lcnNbbmFtZV0gPSBuYW1lZExpc3RlbmVycyA9IFtdOworICAgICAgICB9
CisgICAgICAgIG5hbWVkTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpOworCisgICAgICAgIHZhciBj
dXJyZW50ID0gdGhpczsKKyAgICAgICAgZG8geworICAgICAgICAgIGlmICghY3VycmVudC4kJGxp
c3RlbmVyQ291bnRbbmFtZV0pIHsKKyAgICAgICAgICAgIGN1cnJlbnQuJCRsaXN0ZW5lckNvdW50
W25hbWVdID0gMDsKKyAgICAgICAgICB9CisgICAgICAgICAgY3VycmVudC4kJGxpc3RlbmVyQ291
bnRbbmFtZV0rKzsKKyAgICAgICAgfSB3aGlsZSAoKGN1cnJlbnQgPSBjdXJyZW50LiRwYXJlbnQp
KTsKKworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIHJldHVybiBmdW5jdGlvbigp
IHsKKyAgICAgICAgICB2YXIgaW5kZXhPZkxpc3RlbmVyID0gbmFtZWRMaXN0ZW5lcnMuaW5kZXhP
ZihsaXN0ZW5lcik7CisgICAgICAgICAgaWYgKGluZGV4T2ZMaXN0ZW5lciAhPT0gLTEpIHsKKyAg
ICAgICAgICAgIG5hbWVkTGlzdGVuZXJzW2luZGV4T2ZMaXN0ZW5lcl0gPSBudWxsOworICAgICAg
ICAgICAgZGVjcmVtZW50TGlzdGVuZXJDb3VudChzZWxmLCAxLCBuYW1lKTsKKyAgICAgICAgICB9
CisgICAgICAgIH07CisgICAgICB9LAorCisKKyAgICAgIC8qKgorICAgICAgICogQG5nZG9jIG1l
dGhvZAorICAgICAgICogQG5hbWUgJHJvb3RTY29wZS5TY29wZSMkZW1pdAorICAgICAgICogQGtp
bmQgZnVuY3Rpb24KKyAgICAgICAqCisgICAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgICAqIERp
c3BhdGNoZXMgYW4gZXZlbnQgYG5hbWVgIHVwd2FyZHMgdGhyb3VnaCB0aGUgc2NvcGUgaGllcmFy
Y2h5IG5vdGlmeWluZyB0aGUKKyAgICAgICAqIHJlZ2lzdGVyZWQge0BsaW5rIG5nLiRyb290U2Nv
cGUuU2NvcGUjJG9ufSBsaXN0ZW5lcnMuCisgICAgICAgKgorICAgICAgICogVGhlIGV2ZW50IGxp
ZmUgY3ljbGUgc3RhcnRzIGF0IHRoZSBzY29wZSBvbiB3aGljaCBgJGVtaXRgIHdhcyBjYWxsZWQu
IEFsbAorICAgICAgICoge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJG9uIGxpc3RlbmVyc30g
bGlzdGVuaW5nIGZvciBgbmFtZWAgZXZlbnQgb24gdGhpcyBzY29wZSBnZXQKKyAgICAgICAqIG5v
dGlmaWVkLiBBZnRlcndhcmRzLCB0aGUgZXZlbnQgdHJhdmVyc2VzIHVwd2FyZHMgdG93YXJkIHRo
ZSByb290IHNjb3BlIGFuZCBjYWxscyBhbGwKKyAgICAgICAqIHJlZ2lzdGVyZWQgbGlzdGVuZXJz
IGFsb25nIHRoZSB3YXkuIFRoZSBldmVudCB3aWxsIHN0b3AgcHJvcGFnYXRpbmcgaWYgb25lIG9m
IHRoZSBsaXN0ZW5lcnMKKyAgICAgICAqIGNhbmNlbHMgaXQuCisgICAgICAgKgorICAgICAgICog
QW55IGV4Y2VwdGlvbiBlbWl0dGVkIGZyb20gdGhlIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3Bl
IyRvbiBsaXN0ZW5lcnN9IHdpbGwgYmUgcGFzc2VkCisgICAgICAgKiBvbnRvIHRoZSB7QGxpbmsg
bmcuJGV4Y2VwdGlvbkhhbmRsZXIgJGV4Y2VwdGlvbkhhbmRsZXJ9IHNlcnZpY2UuCisgICAgICAg
KgorICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgRXZlbnQgbmFtZSB0byBlbWl0LgorICAg
ICAgICogQHBhcmFtIHsuLi4qfSBhcmdzIE9wdGlvbmFsIG9uZSBvciBtb3JlIGFyZ3VtZW50cyB3
aGljaCB3aWxsIGJlIHBhc3NlZCBvbnRvIHRoZSBldmVudCBsaXN0ZW5lcnMuCisgICAgICAgKiBA
cmV0dXJuIHtPYmplY3R9IEV2ZW50IG9iamVjdCAoc2VlIHtAbGluayBuZy4kcm9vdFNjb3BlLlNj
b3BlIyRvbn0pLgorICAgICAgICovCisgICAgICAkZW1pdDogZnVuY3Rpb24obmFtZSwgYXJncykg
eworICAgICAgICB2YXIgZW1wdHkgPSBbXSwKKyAgICAgICAgICAgIG5hbWVkTGlzdGVuZXJzLAor
ICAgICAgICAgICAgc2NvcGUgPSB0aGlzLAorICAgICAgICAgICAgc3RvcFByb3BhZ2F0aW9uID0g
ZmFsc2UsCisgICAgICAgICAgICBldmVudCA9IHsKKyAgICAgICAgICAgICAgbmFtZTogbmFtZSwK
KyAgICAgICAgICAgICAgdGFyZ2V0U2NvcGU6IHNjb3BlLAorICAgICAgICAgICAgICBzdG9wUHJv
cGFnYXRpb246IGZ1bmN0aW9uKCkge3N0b3BQcm9wYWdhdGlvbiA9IHRydWU7fSwKKyAgICAgICAg
ICAgICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGV2ZW50
LmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOworICAgICAgICAgICAgICB9LAorICAgICAgICAgICAg
ICBkZWZhdWx0UHJldmVudGVkOiBmYWxzZQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGxp
c3RlbmVyQXJncyA9IGNvbmNhdChbZXZlbnRdLCBhcmd1bWVudHMsIDEpLAorICAgICAgICAgICAg
aSwgbGVuZ3RoOworCisgICAgICAgIGRvIHsKKyAgICAgICAgICBuYW1lZExpc3RlbmVycyA9IHNj
b3BlLiQkbGlzdGVuZXJzW25hbWVdIHx8IGVtcHR5OworICAgICAgICAgIGV2ZW50LmN1cnJlbnRT
Y29wZSA9IHNjb3BlOworICAgICAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IG5hbWVkTGlzdGVu
ZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisKKyAgICAgICAgICAgIC8vIGlmIGxpc3Rl
bmVycyB3ZXJlIGRlcmVnaXN0ZXJlZCwgZGVmcmFnbWVudCB0aGUgYXJyYXkKKyAgICAgICAgICAg
IGlmICghbmFtZWRMaXN0ZW5lcnNbaV0pIHsKKyAgICAgICAgICAgICAgbmFtZWRMaXN0ZW5lcnMu
c3BsaWNlKGksIDEpOworICAgICAgICAgICAgICBpLS07CisgICAgICAgICAgICAgIGxlbmd0aC0t
OworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRy
eSB7CisgICAgICAgICAgICAgIC8vYWxsb3cgYWxsIGxpc3RlbmVycyBhdHRhY2hlZCB0byB0aGUg
Y3VycmVudCBzY29wZSB0byBydW4KKyAgICAgICAgICAgICAgbmFtZWRMaXN0ZW5lcnNbaV0uYXBw
bHkobnVsbCwgbGlzdGVuZXJBcmdzKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
ICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
fQorICAgICAgICAgIC8vaWYgYW55IGxpc3RlbmVyIG9uIHRoZSBjdXJyZW50IHNjb3BlIHN0b3Bz
IHByb3BhZ2F0aW9uLCBwcmV2ZW50IGJ1YmJsaW5nCisgICAgICAgICAgaWYgKHN0b3BQcm9wYWdh
dGlvbikgeworICAgICAgICAgICAgZXZlbnQuY3VycmVudFNjb3BlID0gbnVsbDsKKyAgICAgICAg
ICAgIHJldHVybiBldmVudDsKKyAgICAgICAgICB9CisgICAgICAgICAgLy90cmF2ZXJzZSB1cHdh
cmRzCisgICAgICAgICAgc2NvcGUgPSBzY29wZS4kcGFyZW50OworICAgICAgICB9IHdoaWxlIChz
Y29wZSk7CisKKyAgICAgICAgZXZlbnQuY3VycmVudFNjb3BlID0gbnVsbDsKKworICAgICAgICBy
ZXR1cm4gZXZlbnQ7CisgICAgICB9LAorCisKKyAgICAgIC8qKgorICAgICAgICogQG5nZG9jIG1l
dGhvZAorICAgICAgICogQG5hbWUgJHJvb3RTY29wZS5TY29wZSMkYnJvYWRjYXN0CisgICAgICAg
KiBAa2luZCBmdW5jdGlvbgorICAgICAgICoKKyAgICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAg
ICogRGlzcGF0Y2hlcyBhbiBldmVudCBgbmFtZWAgZG93bndhcmRzIHRvIGFsbCBjaGlsZCBzY29w
ZXMgKGFuZCB0aGVpciBjaGlsZHJlbikgbm90aWZ5aW5nIHRoZQorICAgICAgICogcmVnaXN0ZXJl
ZCB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkb259IGxpc3RlbmVycy4KKyAgICAgICAqCisg
ICAgICAgKiBUaGUgZXZlbnQgbGlmZSBjeWNsZSBzdGFydHMgYXQgdGhlIHNjb3BlIG9uIHdoaWNo
IGAkYnJvYWRjYXN0YCB3YXMgY2FsbGVkLiBBbGwKKyAgICAgICAqIHtAbGluayBuZy4kcm9vdFNj
b3BlLlNjb3BlIyRvbiBsaXN0ZW5lcnN9IGxpc3RlbmluZyBmb3IgYG5hbWVgIGV2ZW50IG9uIHRo
aXMgc2NvcGUgZ2V0CisgICAgICAgKiBub3RpZmllZC4gQWZ0ZXJ3YXJkcywgdGhlIGV2ZW50IHBy
b3BhZ2F0ZXMgdG8gYWxsIGRpcmVjdCBhbmQgaW5kaXJlY3Qgc2NvcGVzIG9mIHRoZSBjdXJyZW50
CisgICAgICAgKiBzY29wZSBhbmQgY2FsbHMgYWxsIHJlZ2lzdGVyZWQgbGlzdGVuZXJzIGFsb25n
IHRoZSB3YXkuIFRoZSBldmVudCBjYW5ub3QgYmUgY2FuY2VsZWQuCisgICAgICAgKgorICAgICAg
ICogQW55IGV4Y2VwdGlvbiBlbWl0dGVkIGZyb20gdGhlIHtAbGluayBuZy4kcm9vdFNjb3BlLlNj
b3BlIyRvbiBsaXN0ZW5lcnN9IHdpbGwgYmUgcGFzc2VkCisgICAgICAgKiBvbnRvIHRoZSB7QGxp
bmsgbmcuJGV4Y2VwdGlvbkhhbmRsZXIgJGV4Y2VwdGlvbkhhbmRsZXJ9IHNlcnZpY2UuCisgICAg
ICAgKgorICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgRXZlbnQgbmFtZSB0byBicm9hZGNh
c3QuCisgICAgICAgKiBAcGFyYW0gey4uLip9IGFyZ3MgT3B0aW9uYWwgb25lIG9yIG1vcmUgYXJn
dW1lbnRzIHdoaWNoIHdpbGwgYmUgcGFzc2VkIG9udG8gdGhlIGV2ZW50IGxpc3RlbmVycy4KKyAg
ICAgICAqIEByZXR1cm4ge09iamVjdH0gRXZlbnQgb2JqZWN0LCBzZWUge0BsaW5rIG5nLiRyb290
U2NvcGUuU2NvcGUjJG9ufQorICAgICAgICovCisgICAgICAkYnJvYWRjYXN0OiBmdW5jdGlvbihu
YW1lLCBhcmdzKSB7CisgICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLAorICAgICAgICAgICAgY3Vy
cmVudCA9IHRhcmdldCwKKyAgICAgICAgICAgIG5leHQgPSB0YXJnZXQsCisgICAgICAgICAgICBl
dmVudCA9IHsKKyAgICAgICAgICAgICAgbmFtZTogbmFtZSwKKyAgICAgICAgICAgICAgdGFyZ2V0
U2NvcGU6IHRhcmdldCwKKyAgICAgICAgICAgICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgIGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOworICAgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgICBkZWZhdWx0UHJldmVudGVkOiBmYWxzZQorICAgICAg
ICAgICAgfTsKKworICAgICAgICBpZiAoIXRhcmdldC4kJGxpc3RlbmVyQ291bnRbbmFtZV0pIHJl
dHVybiBldmVudDsKKworICAgICAgICB2YXIgbGlzdGVuZXJBcmdzID0gY29uY2F0KFtldmVudF0s
IGFyZ3VtZW50cywgMSksCisgICAgICAgICAgICBsaXN0ZW5lcnMsIGksIGxlbmd0aDsKKworICAg
ICAgICAvL2Rvd24gd2hpbGUgeW91IGNhbiwgdGhlbiB1cCBhbmQgbmV4dCBzaWJsaW5nIG9yIHVw
IGFuZCBuZXh0IHNpYmxpbmcgdW50aWwgYmFjayBhdCByb290CisgICAgICAgIHdoaWxlICgoY3Vy
cmVudCA9IG5leHQpKSB7CisgICAgICAgICAgZXZlbnQuY3VycmVudFNjb3BlID0gY3VycmVudDsK
KyAgICAgICAgICBsaXN0ZW5lcnMgPSBjdXJyZW50LiQkbGlzdGVuZXJzW25hbWVdIHx8IFtdOwor
ICAgICAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IGxpc3RlbmVycy5sZW5ndGg7IGkgPCBsZW5n
dGg7IGkrKykgeworICAgICAgICAgICAgLy8gaWYgbGlzdGVuZXJzIHdlcmUgZGVyZWdpc3RlcmVk
LCBkZWZyYWdtZW50IHRoZSBhcnJheQorICAgICAgICAgICAgaWYgKCFsaXN0ZW5lcnNbaV0pIHsK
KyAgICAgICAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpLCAxKTsKKyAgICAgICAgICAgICAgaS0t
OworICAgICAgICAgICAgICBsZW5ndGgtLTsKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgIGxpc3RlbmVyc1tp
XS5hcHBseShudWxsLCBsaXN0ZW5lckFyZ3MpOworICAgICAgICAgICAgfSBjYXRjaCAoZSkgewor
ICAgICAgICAgICAgICAkZXhjZXB0aW9uSGFuZGxlcihlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICB9CisKKyAgICAgICAgICAvLyBJbnNhbml0eSBXYXJuaW5nOiBzY29wZSBkZXB0aC1maXJz
dCB0cmF2ZXJzYWwKKyAgICAgICAgICAvLyB5ZXMsIHRoaXMgY29kZSBpcyBhIGJpdCBjcmF6eSwg
YnV0IGl0IHdvcmtzIGFuZCB3ZSBoYXZlIHRlc3RzIHRvIHByb3ZlIGl0IQorICAgICAgICAgIC8v
IHRoaXMgcGllY2Ugc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSB0cmF2ZXJzYWwgaW4g
JGRpZ2VzdAorICAgICAgICAgIC8vICh0aG91Z2ggaXQgZGlmZmVycyBkdWUgdG8gaGF2aW5nIHRo
ZSBleHRyYSBjaGVjayBmb3IgJCRsaXN0ZW5lckNvdW50KQorICAgICAgICAgIGlmICghKG5leHQg
PSAoKGN1cnJlbnQuJCRsaXN0ZW5lckNvdW50W25hbWVdICYmIGN1cnJlbnQuJCRjaGlsZEhlYWQp
IHx8CisgICAgICAgICAgICAgIChjdXJyZW50ICE9PSB0YXJnZXQgJiYgY3VycmVudC4kJG5leHRT
aWJsaW5nKSkpKSB7CisgICAgICAgICAgICB3aGlsZSAoY3VycmVudCAhPT0gdGFyZ2V0ICYmICEo
bmV4dCA9IGN1cnJlbnQuJCRuZXh0U2libGluZykpIHsKKyAgICAgICAgICAgICAgY3VycmVudCA9
IGN1cnJlbnQuJHBhcmVudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBldmVudC5jdXJyZW50U2NvcGUgPSBudWxsOworICAgICAgICByZXR1cm4gZXZl
bnQ7CisgICAgICB9CisgICAgfTsKKworICAgIHZhciAkcm9vdFNjb3BlID0gbmV3IFNjb3BlKCk7
CisKKyAgICAvL1RoZSBpbnRlcm5hbCBxdWV1ZXMuIEV4cG9zZSB0aGVtIG9uIHRoZSAkcm9vdFNj
b3BlIGZvciBkZWJ1Z2dpbmcvdGVzdGluZyBwdXJwb3Nlcy4KKyAgICB2YXIgYXN5bmNRdWV1ZSA9
ICRyb290U2NvcGUuJCRhc3luY1F1ZXVlID0gW107CisgICAgdmFyIHBvc3REaWdlc3RRdWV1ZSA9
ICRyb290U2NvcGUuJCRwb3N0RGlnZXN0UXVldWUgPSBbXTsKKyAgICB2YXIgYXBwbHlBc3luY1F1
ZXVlID0gJHJvb3RTY29wZS4kJGFwcGx5QXN5bmNRdWV1ZSA9IFtdOworCisgICAgcmV0dXJuICRy
b290U2NvcGU7CisKKworICAgIGZ1bmN0aW9uIGJlZ2luUGhhc2UocGhhc2UpIHsKKyAgICAgIGlm
ICgkcm9vdFNjb3BlLiQkcGhhc2UpIHsKKyAgICAgICAgdGhyb3cgJHJvb3RTY29wZU1pbkVycign
aW5wcm9nJywgJ3swfSBhbHJlYWR5IGluIHByb2dyZXNzJywgJHJvb3RTY29wZS4kJHBoYXNlKTsK
KyAgICAgIH0KKworICAgICAgJHJvb3RTY29wZS4kJHBoYXNlID0gcGhhc2U7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gY2xlYXJQaGFzZSgpIHsKKyAgICAgICRyb290U2NvcGUuJCRwaGFzZSA9IG51
bGw7CisgICAgfQorCisgICAgZnVuY3Rpb24gaW5jcmVtZW50V2F0Y2hlcnNDb3VudChjdXJyZW50
LCBjb3VudCkgeworICAgICAgZG8geworICAgICAgICBjdXJyZW50LiQkd2F0Y2hlcnNDb3VudCAr
PSBjb3VudDsKKyAgICAgIH0gd2hpbGUgKChjdXJyZW50ID0gY3VycmVudC4kcGFyZW50KSk7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gZGVjcmVtZW50TGlzdGVuZXJDb3VudChjdXJyZW50LCBjb3Vu
dCwgbmFtZSkgeworICAgICAgZG8geworICAgICAgICBjdXJyZW50LiQkbGlzdGVuZXJDb3VudFtu
YW1lXSAtPSBjb3VudDsKKworICAgICAgICBpZiAoY3VycmVudC4kJGxpc3RlbmVyQ291bnRbbmFt
ZV0gPT09IDApIHsKKyAgICAgICAgICBkZWxldGUgY3VycmVudC4kJGxpc3RlbmVyQ291bnRbbmFt
ZV07CisgICAgICAgIH0KKyAgICAgIH0gd2hpbGUgKChjdXJyZW50ID0gY3VycmVudC4kcGFyZW50
KSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogZnVuY3Rpb24gdXNlZCBhcyBhbiBpbml0aWFs
IHZhbHVlIGZvciB3YXRjaGVycy4KKyAgICAgKiBiZWNhdXNlIGl0J3MgdW5pcXVlIHdlIGNhbiBl
YXNpbHkgdGVsbCBpdCBhcGFydCBmcm9tIG90aGVyIHZhbHVlcworICAgICAqLworICAgIGZ1bmN0
aW9uIGluaXRXYXRjaFZhbCgpIHt9CisKKyAgICBmdW5jdGlvbiBmbHVzaEFwcGx5QXN5bmMoKSB7
CisgICAgICB3aGlsZSAoYXBwbHlBc3luY1F1ZXVlLmxlbmd0aCkgeworICAgICAgICB0cnkgewor
ICAgICAgICAgIGFwcGx5QXN5bmNRdWV1ZS5zaGlmdCgpKCk7CisgICAgICAgIH0gY2F0Y2ggKGUp
IHsKKyAgICAgICAgICAkZXhjZXB0aW9uSGFuZGxlcihlKTsKKyAgICAgICAgfQorICAgICAgfQor
ICAgICAgYXBwbHlBc3luY0lkID0gbnVsbDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzY2hlZHVs
ZUFwcGx5QXN5bmMoKSB7CisgICAgICBpZiAoYXBwbHlBc3luY0lkID09PSBudWxsKSB7CisgICAg
ICAgIGFwcGx5QXN5bmNJZCA9ICRicm93c2VyLmRlZmVyKGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICRyb290U2NvcGUuJGFwcGx5KGZsdXNoQXBwbHlBc3luYyk7CisgICAgICAgIH0pOworICAgICAg
fQorICAgIH0KKyAgfV07Cit9CisKKy8qKgorICogQGRlc2NyaXB0aW9uCisgKiBQcml2YXRlIHNl
cnZpY2UgdG8gc2FuaXRpemUgdXJpcyBmb3IgbGlua3MgYW5kIGltYWdlcy4gVXNlZCBieSAkY29t
cGlsZSBhbmQgJHNhbml0aXplLgorICovCitmdW5jdGlvbiAkJFNhbml0aXplVXJpUHJvdmlkZXIo
KSB7CisgIHZhciBhSHJlZlNhbml0aXphdGlvbldoaXRlbGlzdCA9IC9eXHMqKGh0dHBzP3xmdHB8
bWFpbHRvfHRlbHxmaWxlKTovLAorICAgIGltZ1NyY1Nhbml0aXphdGlvbldoaXRlbGlzdCA9IC9e
XHMqKChodHRwcz98ZnRwfGZpbGV8YmxvYik6fGRhdGE6aW1hZ2VcLykvOworCisgIC8qKgorICAg
KiBAZGVzY3JpcHRpb24KKyAgICogUmV0cmlldmVzIG9yIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBy
ZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBpcyB1c2VkIGZvciB3aGl0ZWxpc3Rpbmcgb2Ygc2FmZQor
ICAgKiB1cmxzIGR1cmluZyBhW2hyZWZdIHNhbml0aXphdGlvbi4KKyAgICoKKyAgICogVGhlIHNh
bml0aXphdGlvbiBpcyBhIHNlY3VyaXR5IG1lYXN1cmUgYWltZWQgYXQgcHJldmVudCBYU1MgYXR0
YWNrcyB2aWEgaHRtbCBsaW5rcy4KKyAgICoKKyAgICogQW55IHVybCBhYm91dCB0byBiZSBhc3Np
Z25lZCB0byBhW2hyZWZdIHZpYSBkYXRhLWJpbmRpbmcgaXMgZmlyc3Qgbm9ybWFsaXplZCBhbmQg
dHVybmVkIGludG8KKyAgICogYW4gYWJzb2x1dGUgdXJsLiBBZnRlcndhcmRzLCB0aGUgdXJsIGlz
IG1hdGNoZWQgYWdhaW5zdCB0aGUgYGFIcmVmU2FuaXRpemF0aW9uV2hpdGVsaXN0YAorICAgKiBy
ZWd1bGFyIGV4cHJlc3Npb24uIElmIGEgbWF0Y2ggaXMgZm91bmQsIHRoZSBvcmlnaW5hbCB1cmwg
aXMgd3JpdHRlbiBpbnRvIHRoZSBkb20uIE90aGVyd2lzZSwKKyAgICogdGhlIGFic29sdXRlIHVy
bCBpcyBwcmVmaXhlZCB3aXRoIGAndW5zYWZlOidgIHN0cmluZyBhbmQgb25seSB0aGVuIGlzIGl0
IHdyaXR0ZW4gaW50byB0aGUgRE9NLgorICAgKgorICAgKiBAcGFyYW0ge1JlZ0V4cD19IHJlZ2V4
cCBOZXcgcmVnZXhwIHRvIHdoaXRlbGlzdCB1cmxzIHdpdGguCisgICAqIEByZXR1cm5zIHtSZWdF
eHB8bmcuJGNvbXBpbGVQcm92aWRlcn0gQ3VycmVudCBSZWdFeHAgaWYgY2FsbGVkIHdpdGhvdXQg
dmFsdWUgb3Igc2VsZiBmb3IKKyAgICogICAgY2hhaW5pbmcgb3RoZXJ3aXNlLgorICAgKi8KKyAg
dGhpcy5hSHJlZlNhbml0aXphdGlvbldoaXRlbGlzdCA9IGZ1bmN0aW9uKHJlZ2V4cCkgeworICAg
IGlmIChpc0RlZmluZWQocmVnZXhwKSkgeworICAgICAgYUhyZWZTYW5pdGl6YXRpb25XaGl0ZWxp
c3QgPSByZWdleHA7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisgICAgcmV0dXJuIGFIcmVm
U2FuaXRpemF0aW9uV2hpdGVsaXN0OworICB9OworCisKKyAgLyoqCisgICAqIEBkZXNjcmlwdGlv
bgorICAgKiBSZXRyaWV2ZXMgb3Igb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHJlZ3VsYXIgZXhwcmVz
c2lvbiB0aGF0IGlzIHVzZWQgZm9yIHdoaXRlbGlzdGluZyBvZiBzYWZlCisgICAqIHVybHMgZHVy
aW5nIGltZ1tzcmNdIHNhbml0aXphdGlvbi4KKyAgICoKKyAgICogVGhlIHNhbml0aXphdGlvbiBp
cyBhIHNlY3VyaXR5IG1lYXN1cmUgYWltZWQgYXQgcHJldmVudCBYU1MgYXR0YWNrcyB2aWEgaHRt
bCBsaW5rcy4KKyAgICoKKyAgICogQW55IHVybCBhYm91dCB0byBiZSBhc3NpZ25lZCB0byBpbWdb
c3JjXSB2aWEgZGF0YS1iaW5kaW5nIGlzIGZpcnN0IG5vcm1hbGl6ZWQgYW5kIHR1cm5lZCBpbnRv
CisgICAqIGFuIGFic29sdXRlIHVybC4gQWZ0ZXJ3YXJkcywgdGhlIHVybCBpcyBtYXRjaGVkIGFn
YWluc3QgdGhlIGBpbWdTcmNTYW5pdGl6YXRpb25XaGl0ZWxpc3RgCisgICAqIHJlZ3VsYXIgZXhw
cmVzc2lvbi4gSWYgYSBtYXRjaCBpcyBmb3VuZCwgdGhlIG9yaWdpbmFsIHVybCBpcyB3cml0dGVu
IGludG8gdGhlIGRvbS4gT3RoZXJ3aXNlLAorICAgKiB0aGUgYWJzb2x1dGUgdXJsIGlzIHByZWZp
eGVkIHdpdGggYCd1bnNhZmU6J2Agc3RyaW5nIGFuZCBvbmx5IHRoZW4gaXMgaXQgd3JpdHRlbiBp
bnRvIHRoZSBET00uCisgICAqCisgICAqIEBwYXJhbSB7UmVnRXhwPX0gcmVnZXhwIE5ldyByZWdl
eHAgdG8gd2hpdGVsaXN0IHVybHMgd2l0aC4KKyAgICogQHJldHVybnMge1JlZ0V4cHxuZy4kY29t
cGlsZVByb3ZpZGVyfSBDdXJyZW50IFJlZ0V4cCBpZiBjYWxsZWQgd2l0aG91dCB2YWx1ZSBvciBz
ZWxmIGZvcgorICAgKiAgICBjaGFpbmluZyBvdGhlcndpc2UuCisgICAqLworICB0aGlzLmltZ1Ny
Y1Nhbml0aXphdGlvbldoaXRlbGlzdCA9IGZ1bmN0aW9uKHJlZ2V4cCkgeworICAgIGlmIChpc0Rl
ZmluZWQocmVnZXhwKSkgeworICAgICAgaW1nU3JjU2FuaXRpemF0aW9uV2hpdGVsaXN0ID0gcmVn
ZXhwOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorICAgIHJldHVybiBpbWdTcmNTYW5pdGl6
YXRpb25XaGl0ZWxpc3Q7CisgIH07CisKKyAgdGhpcy4kZ2V0ID0gZnVuY3Rpb24oKSB7CisgICAg
cmV0dXJuIGZ1bmN0aW9uIHNhbml0aXplVXJpKHVyaSwgaXNJbWFnZSkgeworICAgICAgdmFyIHJl
Z2V4ID0gaXNJbWFnZSA/IGltZ1NyY1Nhbml0aXphdGlvbldoaXRlbGlzdCA6IGFIcmVmU2FuaXRp
emF0aW9uV2hpdGVsaXN0OworICAgICAgdmFyIG5vcm1hbGl6ZWRWYWw7CisgICAgICBub3JtYWxp
emVkVmFsID0gdXJsUmVzb2x2ZSh1cmkpLmhyZWY7CisgICAgICBpZiAobm9ybWFsaXplZFZhbCAh
PT0gJycgJiYgIW5vcm1hbGl6ZWRWYWwubWF0Y2gocmVnZXgpKSB7CisgICAgICAgIHJldHVybiAn
dW5zYWZlOicgKyBub3JtYWxpemVkVmFsOworICAgICAgfQorICAgICAgcmV0dXJuIHVyaTsKKyAg
ICB9OworICB9OworfQorCisvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAq
ICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCisgKiAgICAgQW55IGNvbW1pdHMg
dG8gdGhpcyBmaWxlIHNob3VsZCBiZSByZXZpZXdlZCB3aXRoIHNlY3VyaXR5IGluIG1pbmQuICAq
CisgKiAgIENoYW5nZXMgdG8gdGhpcyBmaWxlIGNhbiBwb3RlbnRpYWxseSBjcmVhdGUgc2VjdXJp
dHkgdnVsbmVyYWJpbGl0aWVzLiAqCisgKiAgICAgICAgICBBbiBhcHByb3ZhbCBmcm9tIDIgQ29y
ZSBtZW1iZXJzIHdpdGggaGlzdG9yeSBvZiBtb2RpZnlpbmcgICAgICAqCisgKiAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzIGZpbGUgaXMgcmVxdWlyZWQuICAgICAgICAgICAgICAgICAgICAg
ICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgRG9lcyB0aGUgY2hhbmdlIHNvbWVob3cg
YWxsb3cgZm9yIGFyYml0cmFyeSBqYXZhc2NyaXB0IHRvIGJlIGV4ZWN1dGVkPyAqCisgKiAgICBP
ciBhbGxvd3MgZm9yIHNvbWVvbmUgdG8gY2hhbmdlIHRoZSBwcm90b3R5cGUgb2YgYnVpbHQtaW4g
b2JqZWN0cz8gICAqCisgKiAgICAgT3IgZ2l2ZXMgdW5kZXNpcmVkIGFjY2VzcyB0byB2YXJpYWJs
ZXMgbGlrZXMgZG9jdW1lbnQgb3Igd2luZG93PyAgICAqCisgKiAqICogKiAqICogKiAqICogKiAq
ICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLwor
Cit2YXIgJHNjZU1pbkVyciA9IG1pbkVycignJHNjZScpOworCit2YXIgU0NFX0NPTlRFWFRTID0g
eworICBIVE1MOiAnaHRtbCcsCisgIENTUzogJ2NzcycsCisgIFVSTDogJ3VybCcsCisgIC8vIFJF
U09VUkNFX1VSTCBpcyBhIHN1YnR5cGUgb2YgVVJMIHVzZWQgaW4gY29udGV4dHMgd2hlcmUgYSBw
cml2aWxlZ2VkIHJlc291cmNlIGlzIHNvdXJjZWQgZnJvbSBhCisgIC8vIHVybC4gIChlLmcuIG5n
LWluY2x1ZGUsIHNjcmlwdCBzcmMsIHRlbXBsYXRlVXJsKQorICBSRVNPVVJDRV9VUkw6ICdyZXNv
dXJjZVVybCcsCisgIEpTOiAnanMnCit9OworCisvLyBIZWxwZXIgZnVuY3Rpb25zIGZvbGxvdy4K
KworZnVuY3Rpb24gYWRqdXN0TWF0Y2hlcihtYXRjaGVyKSB7CisgIGlmIChtYXRjaGVyID09PSAn
c2VsZicpIHsKKyAgICByZXR1cm4gbWF0Y2hlcjsKKyAgfSBlbHNlIGlmIChpc1N0cmluZyhtYXRj
aGVyKSkgeworICAgIC8vIFN0cmluZ3MgbWF0Y2ggZXhhY3RseSBleGNlcHQgZm9yIDIgd2lsZGNh
cmRzIC0gJyonIGFuZCAnKionLgorICAgIC8vICcqJyBtYXRjaGVzIGFueSBjaGFyYWN0ZXIgZXhj
ZXB0IHRob3NlIGZyb20gdGhlIHNldCAnOi8uPyYnLgorICAgIC8vICcqKicgbWF0Y2hlcyBhbnkg
Y2hhcmFjdGVyIChsaWtlIC4qIGluIGEgUmVnRXhwKS4KKyAgICAvLyBNb3JlIHRoYW4gMiAqJ3Mg
cmFpc2VzIGFuIGVycm9yIGFzIGl0J3MgaWxsIGRlZmluZWQuCisgICAgaWYgKG1hdGNoZXIuaW5k
ZXhPZignKioqJykgPiAtMSkgeworICAgICAgdGhyb3cgJHNjZU1pbkVycignaXdjYXJkJywKKyAg
ICAgICAgICAnSWxsZWdhbCBzZXF1ZW5jZSAqKiogaW4gc3RyaW5nIG1hdGNoZXIuICBTdHJpbmc6
IHswfScsIG1hdGNoZXIpOworICAgIH0KKyAgICBtYXRjaGVyID0gZXNjYXBlRm9yUmVnZXhwKG1h
dGNoZXIpLgorICAgICAgICAgICAgICAgICAgcmVwbGFjZSgnXFwqXFwqJywgJy4qJykuCisgICAg
ICAgICAgICAgICAgICByZXBsYWNlKCdcXConLCAnW146Ly4/JjtdKicpOworICAgIHJldHVybiBu
ZXcgUmVnRXhwKCdeJyArIG1hdGNoZXIgKyAnJCcpOworICB9IGVsc2UgaWYgKGlzUmVnRXhwKG1h
dGNoZXIpKSB7CisgICAgLy8gVGhlIG9ubHkgb3RoZXIgdHlwZSBvZiBtYXRjaGVyIGFsbG93ZWQg
aXMgYSBSZWdleHAuCisgICAgLy8gTWF0Y2ggZW50aXJlIFVSTCAvIGRpc2FsbG93IHBhcnRpYWwg
bWF0Y2hlcy4KKyAgICAvLyBGbGFncyBhcmUgcmVzZXQgKGkuZS4gbm8gZ2xvYmFsLCBpZ25vcmVD
YXNlIG9yIG11bHRpbGluZSkKKyAgICByZXR1cm4gbmV3IFJlZ0V4cCgnXicgKyBtYXRjaGVyLnNv
dXJjZSArICckJyk7CisgIH0gZWxzZSB7CisgICAgdGhyb3cgJHNjZU1pbkVycignaW1hdGNoZXIn
LAorICAgICAgICAnTWF0Y2hlcnMgbWF5IG9ubHkgYmUgInNlbGYiLCBzdHJpbmcgcGF0dGVybnMg
b3IgUmVnRXhwIG9iamVjdHMnKTsKKyAgfQorfQorCisKK2Z1bmN0aW9uIGFkanVzdE1hdGNoZXJz
KG1hdGNoZXJzKSB7CisgIHZhciBhZGp1c3RlZE1hdGNoZXJzID0gW107CisgIGlmIChpc0RlZmlu
ZWQobWF0Y2hlcnMpKSB7CisgICAgZm9yRWFjaChtYXRjaGVycywgZnVuY3Rpb24obWF0Y2hlcikg
eworICAgICAgYWRqdXN0ZWRNYXRjaGVycy5wdXNoKGFkanVzdE1hdGNoZXIobWF0Y2hlcikpOwor
ICAgIH0pOworICB9CisgIHJldHVybiBhZGp1c3RlZE1hdGNoZXJzOworfQorCisKKy8qKgorICog
QG5nZG9jIHNlcnZpY2UKKyAqIEBuYW1lICRzY2VEZWxlZ2F0ZQorICogQGtpbmQgZnVuY3Rpb24K
KyAqCisgKiBAZGVzY3JpcHRpb24KKyAqCisgKiBgJHNjZURlbGVnYXRlYCBpcyBhIHNlcnZpY2Ug
dGhhdCBpcyB1c2VkIGJ5IHRoZSBgJHNjZWAgc2VydmljZSB0byBwcm92aWRlIHtAbGluayBuZy4k
c2NlIFN0cmljdAorICogQ29udGV4dHVhbCBFc2NhcGluZyAoU0NFKX0gc2VydmljZXMgdG8gQW5n
dWxhckpTLgorICoKKyAqIFR5cGljYWxseSwgeW91IHdvdWxkIGNvbmZpZ3VyZSBvciBvdmVycmlk
ZSB0aGUge0BsaW5rIG5nLiRzY2VEZWxlZ2F0ZSAkc2NlRGVsZWdhdGV9IGluc3RlYWQgb2YKKyAq
IHRoZSBgJHNjZWAgc2VydmljZSB0byBjdXN0b21pemUgdGhlIHdheSBTdHJpY3QgQ29udGV4dHVh
bCBFc2NhcGluZyB3b3JrcyBpbiBBbmd1bGFySlMuICBUaGlzIGlzCisgKiBiZWNhdXNlLCB3aGls
ZSB0aGUgYCRzY2VgIHByb3ZpZGVzIG51bWVyb3VzIHNob3J0aGFuZCBtZXRob2RzLCBldGMuLCB5
b3UgcmVhbGx5IG9ubHkgbmVlZCB0bworICogb3ZlcnJpZGUgMyBjb3JlIGZ1bmN0aW9ucyAoYHRy
dXN0QXNgLCBgZ2V0VHJ1c3RlZGAgYW5kIGB2YWx1ZU9mYCkgdG8gcmVwbGFjZSB0aGUgd2F5IHRo
aW5ncworICogd29yayBiZWNhdXNlIGAkc2NlYCBkZWxlZ2F0ZXMgdG8gYCRzY2VEZWxlZ2F0ZWAg
Zm9yIHRoZXNlIG9wZXJhdGlvbnMuCisgKgorICogUmVmZXIge0BsaW5rIG5nLiRzY2VEZWxlZ2F0
ZVByb3ZpZGVyICRzY2VEZWxlZ2F0ZVByb3ZpZGVyfSB0byBjb25maWd1cmUgdGhpcyBzZXJ2aWNl
LgorICoKKyAqIFRoZSBkZWZhdWx0IGluc3RhbmNlIG9mIGAkc2NlRGVsZWdhdGVgIHNob3VsZCB3
b3JrIG91dCBvZiB0aGUgYm94IHdpdGggbGl0dGxlIHBhaW4uICBXaGlsZSB5b3UKKyAqIGNhbiBv
dmVycmlkZSBpdCBjb21wbGV0ZWx5IHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgYCRzY2VgLCB0
aGUgY29tbW9uIGNhc2Ugd291bGQKKyAqIGludm9sdmUgY29uZmlndXJpbmcgdGhlIHtAbGluayBu
Zy4kc2NlRGVsZWdhdGVQcm92aWRlciAkc2NlRGVsZWdhdGVQcm92aWRlcn0gaW5zdGVhZCBieSBz
ZXR0aW5nCisgKiB5b3VyIG93biB3aGl0ZWxpc3RzIGFuZCBibGFja2xpc3RzIGZvciB0cnVzdGlu
ZyBVUkxzIHVzZWQgZm9yIGxvYWRpbmcgQW5ndWxhckpTIHJlc291cmNlcyBzdWNoIGFzCisgKiB0
ZW1wbGF0ZXMuICBSZWZlciB7QGxpbmsgbmcuJHNjZURlbGVnYXRlUHJvdmlkZXIjcmVzb3VyY2VV
cmxXaGl0ZWxpc3QKKyAqICRzY2VEZWxlZ2F0ZVByb3ZpZGVyLnJlc291cmNlVXJsV2hpdGVsaXN0
fSBhbmQge0BsaW5rCisgKiBuZy4kc2NlRGVsZWdhdGVQcm92aWRlciNyZXNvdXJjZVVybEJsYWNr
bGlzdCAkc2NlRGVsZWdhdGVQcm92aWRlci5yZXNvdXJjZVVybEJsYWNrbGlzdH0KKyAqLworCisv
KioKKyAqIEBuZ2RvYyBwcm92aWRlcgorICogQG5hbWUgJHNjZURlbGVnYXRlUHJvdmlkZXIKKyAq
IEBkZXNjcmlwdGlvbgorICoKKyAqIFRoZSBgJHNjZURlbGVnYXRlUHJvdmlkZXJgIHByb3ZpZGVy
IGFsbG93cyBkZXZlbG9wZXJzIHRvIGNvbmZpZ3VyZSB0aGUge0BsaW5rIG5nLiRzY2VEZWxlZ2F0
ZQorICogJHNjZURlbGVnYXRlfSBzZXJ2aWNlLiAgVGhpcyBhbGxvd3Mgb25lIHRvIGdldC9zZXQg
dGhlIHdoaXRlbGlzdHMgYW5kIGJsYWNrbGlzdHMgdXNlZCB0byBlbnN1cmUKKyAqIHRoYXQgdGhl
IFVSTHMgdXNlZCBmb3Igc291cmNpbmcgQW5ndWxhciB0ZW1wbGF0ZXMgYXJlIHNhZmUuICBSZWZl
ciB7QGxpbmsKKyAqIG5nLiRzY2VEZWxlZ2F0ZVByb3ZpZGVyI3Jlc291cmNlVXJsV2hpdGVsaXN0
ICRzY2VEZWxlZ2F0ZVByb3ZpZGVyLnJlc291cmNlVXJsV2hpdGVsaXN0fSBhbmQKKyAqIHtAbGlu
ayBuZy4kc2NlRGVsZWdhdGVQcm92aWRlciNyZXNvdXJjZVVybEJsYWNrbGlzdCAkc2NlRGVsZWdh
dGVQcm92aWRlci5yZXNvdXJjZVVybEJsYWNrbGlzdH0KKyAqCisgKiBGb3IgdGhlIGdlbmVyYWwg
ZGV0YWlscyBhYm91dCB0aGlzIHNlcnZpY2UgaW4gQW5ndWxhciwgcmVhZCB0aGUgbWFpbiBwYWdl
IGZvciB7QGxpbmsgbmcuJHNjZQorICogU3RyaWN0IENvbnRleHR1YWwgRXNjYXBpbmcgKFNDRSl9
LgorICoKKyAqICoqRXhhbXBsZSoqOiAgQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBjYXNlLiA8YSBu
YW1lPSJleGFtcGxlIj48L2E+CisgKgorICogLSB5b3VyIGFwcCBpcyBob3N0ZWQgYXQgdXJsIGBo
dHRwOi8vbXlhcHAuZXhhbXBsZS5jb20vYAorICogLSBidXQgc29tZSBvZiB5b3VyIHRlbXBsYXRl
cyBhcmUgaG9zdGVkIG9uIG90aGVyIGRvbWFpbnMgeW91IGNvbnRyb2wgc3VjaCBhcworICogICBg
aHR0cDovL3NydjAxLmFzc2V0cy5leGFtcGxlLmNvbS9gLMKgIGBodHRwOi8vc3J2MDIuYXNzZXRz
LmV4YW1wbGUuY29tL2AsIGV0Yy4KKyAqIC0gYW5kIHlvdSBoYXZlIGFuIG9wZW4gcmVkaXJlY3Qg
YXQgYGh0dHA6Ly9teWFwcC5leGFtcGxlLmNvbS9jbGlja1RocnU/Li4uYC4KKyAqCisgKiBIZXJl
IGlzIHdoYXQgYSBzZWN1cmUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBzY2VuYXJpbyBtaWdodCBs
b29rIGxpa2U6CisgKgorICogYGBgCisgKiAgYW5ndWxhci5tb2R1bGUoJ215QXBwJywgW10pLmNv
bmZpZyhmdW5jdGlvbigkc2NlRGVsZWdhdGVQcm92aWRlcikgeworICogICAgJHNjZURlbGVnYXRl
UHJvdmlkZXIucmVzb3VyY2VVcmxXaGl0ZWxpc3QoWworICogICAgICAvLyBBbGxvdyBzYW1lIG9y
aWdpbiByZXNvdXJjZSBsb2Fkcy4KKyAqICAgICAgJ3NlbGYnLAorICogICAgICAvLyBBbGxvdyBs
b2FkaW5nIGZyb20gb3VyIGFzc2V0cyBkb21haW4uICBOb3RpY2UgdGhlIGRpZmZlcmVuY2UgYmV0
d2VlbiAqIGFuZCAqKi4KKyAqICAgICAgJ2h0dHA6Ly9zcnYqLmFzc2V0cy5leGFtcGxlLmNvbS8q
KicKKyAqICAgIF0pOworICoKKyAqICAgIC8vIFRoZSBibGFja2xpc3Qgb3ZlcnJpZGVzIHRoZSB3
aGl0ZWxpc3Qgc28gdGhlIG9wZW4gcmVkaXJlY3QgaGVyZSBpcyBibG9ja2VkLgorICogICAgJHNj
ZURlbGVnYXRlUHJvdmlkZXIucmVzb3VyY2VVcmxCbGFja2xpc3QoWworICogICAgICAnaHR0cDov
L215YXBwLmV4YW1wbGUuY29tL2NsaWNrVGhydSoqJworICogICAgXSk7CisgKiAgfSk7CisgKiBg
YGAKKyAqLworCitmdW5jdGlvbiAkU2NlRGVsZWdhdGVQcm92aWRlcigpIHsKKyAgdGhpcy5TQ0Vf
Q09OVEVYVFMgPSBTQ0VfQ09OVEVYVFM7CisKKyAgLy8gUmVzb3VyY2UgVVJMcyBjYW4gYWxzbyBi
ZSB0cnVzdGVkIGJ5IHBvbGljeS4KKyAgdmFyIHJlc291cmNlVXJsV2hpdGVsaXN0ID0gWydzZWxm
J10sCisgICAgICByZXNvdXJjZVVybEJsYWNrbGlzdCA9IFtdOworCisgIC8qKgorICAgKiBAbmdk
b2MgbWV0aG9kCisgICAqIEBuYW1lICRzY2VEZWxlZ2F0ZVByb3ZpZGVyI3Jlc291cmNlVXJsV2hp
dGVsaXN0CisgICAqIEBraW5kIGZ1bmN0aW9uCisgICAqCisgICAqIEBwYXJhbSB7QXJyYXk9fSB3
aGl0ZWxpc3QgV2hlbiBwcm92aWRlZCwgcmVwbGFjZXMgdGhlIHJlc291cmNlVXJsV2hpdGVsaXN0
IHdpdGggdGhlIHZhbHVlCisgICAqICAgICBwcm92aWRlZC4gIFRoaXMgbXVzdCBiZSBhbiBhcnJh
eSBvciBudWxsLiAgQSBzbmFwc2hvdCBvZiB0aGlzIGFycmF5IGlzIHVzZWQgc28gZnVydGhlcgor
ICAgKiAgICAgY2hhbmdlcyB0byB0aGUgYXJyYXkgYXJlIGlnbm9yZWQuCisgICAqCisgICAqICAg
ICBGb2xsb3cge0BsaW5rIG5nLiRzY2UjcmVzb3VyY2VVcmxQYXR0ZXJuSXRlbSB0aGlzIGxpbmt9
IGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBpdGVtcworICAgKiAgICAgYWxsb3dlZCBpbiB0aGlz
IGFycmF5LgorICAgKgorICAgKiAgICAgTm90ZTogKiphbiBlbXB0eSB3aGl0ZWxpc3QgYXJyYXkg
d2lsbCBibG9jayBhbGwgVVJMcyoqIQorICAgKgorICAgKiBAcmV0dXJuIHtBcnJheX0gdGhlIGN1
cnJlbnRseSBzZXQgd2hpdGVsaXN0IGFycmF5LgorICAgKgorICAgKiBUaGUgKipkZWZhdWx0IHZh
bHVlKiogd2hlbiBubyB3aGl0ZWxpc3QgaGFzIGJlZW4gZXhwbGljaXRseSBzZXQgaXMgYFsnc2Vs
ZiddYCBhbGxvd2luZyBvbmx5CisgICAqIHNhbWUgb3JpZ2luIHJlc291cmNlIHJlcXVlc3RzLgor
ICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAgICogU2V0cy9HZXRzIHRoZSB3aGl0ZWxpc3Qgb2Yg
dHJ1c3RlZCByZXNvdXJjZSBVUkxzLgorICAgKi8KKyAgdGhpcy5yZXNvdXJjZVVybFdoaXRlbGlz
dCA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHsKKyAgICAg
IHJlc291cmNlVXJsV2hpdGVsaXN0ID0gYWRqdXN0TWF0Y2hlcnModmFsdWUpOworICAgIH0KKyAg
ICByZXR1cm4gcmVzb3VyY2VVcmxXaGl0ZWxpc3Q7CisgIH07CisKKyAgLyoqCisgICAqIEBuZ2Rv
YyBtZXRob2QKKyAgICogQG5hbWUgJHNjZURlbGVnYXRlUHJvdmlkZXIjcmVzb3VyY2VVcmxCbGFj
a2xpc3QKKyAgICogQGtpbmQgZnVuY3Rpb24KKyAgICoKKyAgICogQHBhcmFtIHtBcnJheT19IGJs
YWNrbGlzdCBXaGVuIHByb3ZpZGVkLCByZXBsYWNlcyB0aGUgcmVzb3VyY2VVcmxCbGFja2xpc3Qg
d2l0aCB0aGUgdmFsdWUKKyAgICogICAgIHByb3ZpZGVkLiAgVGhpcyBtdXN0IGJlIGFuIGFycmF5
IG9yIG51bGwuICBBIHNuYXBzaG90IG9mIHRoaXMgYXJyYXkgaXMgdXNlZCBzbyBmdXJ0aGVyCisg
ICAqICAgICBjaGFuZ2VzIHRvIHRoZSBhcnJheSBhcmUgaWdub3JlZC4KKyAgICoKKyAgICogICAg
IEZvbGxvdyB7QGxpbmsgbmcuJHNjZSNyZXNvdXJjZVVybFBhdHRlcm5JdGVtIHRoaXMgbGlua30g
Zm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGl0ZW1zCisgICAqICAgICBhbGxvd2VkIGluIHRoaXMg
YXJyYXkuCisgICAqCisgICAqICAgICBUaGUgdHlwaWNhbCB1c2FnZSBmb3IgdGhlIGJsYWNrbGlz
dCBpcyB0byAqKmJsb2NrCisgICAqICAgICBbb3BlbiByZWRpcmVjdHNdKGh0dHA6Ly9jd2UubWl0
cmUub3JnL2RhdGEvZGVmaW5pdGlvbnMvNjAxLmh0bWwpKiogc2VydmVkIGJ5IHlvdXIgZG9tYWlu
IGFzCisgICAqICAgICB0aGVzZSB3b3VsZCBvdGhlcndpc2UgYmUgdHJ1c3RlZCBidXQgYWN0dWFs
bHkgcmV0dXJuIGNvbnRlbnQgZnJvbSB0aGUgcmVkaXJlY3RlZCBkb21haW4uCisgICAqCisgICAq
ICAgICBGaW5hbGx5LCAqKnRoZSBibGFja2xpc3Qgb3ZlcnJpZGVzIHRoZSB3aGl0ZWxpc3QqKiBh
bmQgaGFzIHRoZSBmaW5hbCBzYXkuCisgICAqCisgICAqIEByZXR1cm4ge0FycmF5fSB0aGUgY3Vy
cmVudGx5IHNldCBibGFja2xpc3QgYXJyYXkuCisgICAqCisgICAqIFRoZSAqKmRlZmF1bHQgdmFs
dWUqKiB3aGVuIG5vIHdoaXRlbGlzdCBoYXMgYmVlbiBleHBsaWNpdGx5IHNldCBpcyB0aGUgZW1w
dHkgYXJyYXkgKGkuZS4gdGhlcmUKKyAgICogaXMgbm8gYmxhY2tsaXN0LikKKyAgICoKKyAgICog
QGRlc2NyaXB0aW9uCisgICAqIFNldHMvR2V0cyB0aGUgYmxhY2tsaXN0IG9mIHRydXN0ZWQgcmVz
b3VyY2UgVVJMcy4KKyAgICovCisKKyAgdGhpcy5yZXNvdXJjZVVybEJsYWNrbGlzdCA9IGZ1bmN0
aW9uKHZhbHVlKSB7CisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHsKKyAgICAgIHJlc291cmNl
VXJsQmxhY2tsaXN0ID0gYWRqdXN0TWF0Y2hlcnModmFsdWUpOworICAgIH0KKyAgICByZXR1cm4g
cmVzb3VyY2VVcmxCbGFja2xpc3Q7CisgIH07CisKKyAgdGhpcy4kZ2V0ID0gWyckaW5qZWN0b3In
LCBmdW5jdGlvbigkaW5qZWN0b3IpIHsKKworICAgIHZhciBodG1sU2FuaXRpemVyID0gZnVuY3Rp
b24gaHRtbFNhbml0aXplcihodG1sKSB7CisgICAgICB0aHJvdyAkc2NlTWluRXJyKCd1bnNhZmUn
LCAnQXR0ZW1wdGluZyB0byB1c2UgYW4gdW5zYWZlIHZhbHVlIGluIGEgc2FmZSBjb250ZXh0Licp
OworICAgIH07CisKKyAgICBpZiAoJGluamVjdG9yLmhhcygnJHNhbml0aXplJykpIHsKKyAgICAg
IGh0bWxTYW5pdGl6ZXIgPSAkaW5qZWN0b3IuZ2V0KCckc2FuaXRpemUnKTsKKyAgICB9CisKKwor
ICAgIGZ1bmN0aW9uIG1hdGNoVXJsKG1hdGNoZXIsIHBhcnNlZFVybCkgeworICAgICAgaWYgKG1h
dGNoZXIgPT09ICdzZWxmJykgeworICAgICAgICByZXR1cm4gdXJsSXNTYW1lT3JpZ2luKHBhcnNl
ZFVybCk7CisgICAgICB9IGVsc2UgeworICAgICAgICAvLyBkZWZpbml0ZWx5IGEgcmVnZXguICBT
ZWUgYWRqdXN0TWF0Y2hlcnMoKQorICAgICAgICByZXR1cm4gISFtYXRjaGVyLmV4ZWMocGFyc2Vk
VXJsLmhyZWYpOworICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGlzUmVzb3VyY2VVcmxB
bGxvd2VkQnlQb2xpY3kodXJsKSB7CisgICAgICB2YXIgcGFyc2VkVXJsID0gdXJsUmVzb2x2ZSh1
cmwudG9TdHJpbmcoKSk7CisgICAgICB2YXIgaSwgbiwgYWxsb3dlZCA9IGZhbHNlOworICAgICAg
Ly8gRW5zdXJlIHRoYXQgYXQgbGVhc3Qgb25lIGl0ZW0gZnJvbSB0aGUgd2hpdGVsaXN0IGFsbG93
cyB0aGlzIHVybC4KKyAgICAgIGZvciAoaSA9IDAsIG4gPSByZXNvdXJjZVVybFdoaXRlbGlzdC5s
ZW5ndGg7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgaWYgKG1hdGNoVXJsKHJlc291cmNlVXJsV2hp
dGVsaXN0W2ldLCBwYXJzZWRVcmwpKSB7CisgICAgICAgICAgYWxsb3dlZCA9IHRydWU7CisgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGlmIChhbGxvd2VkKSB7Cisg
ICAgICAgIC8vIEVuc3VyZSB0aGF0IG5vIGl0ZW0gZnJvbSB0aGUgYmxhY2tsaXN0IGJsb2NrZWQg
dGhpcyB1cmwuCisgICAgICAgIGZvciAoaSA9IDAsIG4gPSByZXNvdXJjZVVybEJsYWNrbGlzdC5s
ZW5ndGg7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgICBpZiAobWF0Y2hVcmwocmVzb3VyY2VVcmxC
bGFja2xpc3RbaV0sIHBhcnNlZFVybCkpIHsKKyAgICAgICAgICAgIGFsbG93ZWQgPSBmYWxzZTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAg
ICAgcmV0dXJuIGFsbG93ZWQ7CisgICAgfQorCisgICAgZnVuY3Rpb24gZ2VuZXJhdGVIb2xkZXJU
eXBlKEJhc2UpIHsKKyAgICAgIHZhciBob2xkZXJUeXBlID0gZnVuY3Rpb24gVHJ1c3RlZFZhbHVl
SG9sZGVyVHlwZSh0cnVzdGVkVmFsdWUpIHsKKyAgICAgICAgdGhpcy4kJHVud3JhcFRydXN0ZWRW
YWx1ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgIHJldHVybiB0cnVzdGVkVmFsdWU7CisgICAg
ICAgIH07CisgICAgICB9OworICAgICAgaWYgKEJhc2UpIHsKKyAgICAgICAgaG9sZGVyVHlwZS5w
cm90b3R5cGUgPSBuZXcgQmFzZSgpOworICAgICAgfQorICAgICAgaG9sZGVyVHlwZS5wcm90b3R5
cGUudmFsdWVPZiA9IGZ1bmN0aW9uIHNjZVZhbHVlT2YoKSB7CisgICAgICAgIHJldHVybiB0aGlz
LiQkdW53cmFwVHJ1c3RlZFZhbHVlKCk7CisgICAgICB9OworICAgICAgaG9sZGVyVHlwZS5wcm90
b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiBzY2VUb1N0cmluZygpIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuJCR1bndyYXBUcnVzdGVkVmFsdWUoKS50b1N0cmluZygpOworICAgICAgfTsKKyAgICAg
IHJldHVybiBob2xkZXJUeXBlOworICAgIH0KKworICAgIHZhciB0cnVzdGVkVmFsdWVIb2xkZXJC
YXNlID0gZ2VuZXJhdGVIb2xkZXJUeXBlKCksCisgICAgICAgIGJ5VHlwZSA9IHt9OworCisgICAg
YnlUeXBlW1NDRV9DT05URVhUUy5IVE1MXSA9IGdlbmVyYXRlSG9sZGVyVHlwZSh0cnVzdGVkVmFs
dWVIb2xkZXJCYXNlKTsKKyAgICBieVR5cGVbU0NFX0NPTlRFWFRTLkNTU10gPSBnZW5lcmF0ZUhv
bGRlclR5cGUodHJ1c3RlZFZhbHVlSG9sZGVyQmFzZSk7CisgICAgYnlUeXBlW1NDRV9DT05URVhU
Uy5VUkxdID0gZ2VuZXJhdGVIb2xkZXJUeXBlKHRydXN0ZWRWYWx1ZUhvbGRlckJhc2UpOworICAg
IGJ5VHlwZVtTQ0VfQ09OVEVYVFMuSlNdID0gZ2VuZXJhdGVIb2xkZXJUeXBlKHRydXN0ZWRWYWx1
ZUhvbGRlckJhc2UpOworICAgIGJ5VHlwZVtTQ0VfQ09OVEVYVFMuUkVTT1VSQ0VfVVJMXSA9IGdl
bmVyYXRlSG9sZGVyVHlwZShieVR5cGVbU0NFX0NPTlRFWFRTLlVSTF0pOworCisgICAgLyoqCisg
ICAgICogQG5nZG9jIG1ldGhvZAorICAgICAqIEBuYW1lICRzY2VEZWxlZ2F0ZSN0cnVzdEFzCisg
ICAgICoKKyAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0
IGlzIHRydXN0ZWQgYnkgYW5ndWxhciBmb3IgdXNlIGluIHNwZWNpZmllZCBzdHJpY3QKKyAgICAg
KiBjb250ZXh0dWFsIGVzY2FwaW5nIGNvbnRleHRzIChzdWNoIGFzIG5nLWJpbmQtaHRtbCwgbmct
aW5jbHVkZSwgYW55IHNyYworICAgICAqIGF0dHJpYnV0ZSBpbnRlcnBvbGF0aW9uLCBhbnkgZG9t
IGV2ZW50IGJpbmRpbmcgYXR0cmlidXRlIGludGVycG9sYXRpb24KKyAgICAgKiBzdWNoIGFzIGZv
ciBvbmNsaWNrLCAgZXRjLikgdGhhdCB1c2VzIHRoZSBwcm92aWRlZCB2YWx1ZS4KKyAgICAgKiBT
ZWUge0BsaW5rIG5nLiRzY2UgJHNjZX0gZm9yIGVuYWJsaW5nIHN0cmljdCBjb250ZXh0dWFsIGVz
Y2FwaW5nLgorICAgICAqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGtpbmQgb2Yg
Y29udGV4dCBpbiB3aGljaCB0aGlzIHZhbHVlIGlzIHNhZmUgZm9yIHVzZS4gIGUuZy4gdXJsLAor
ICAgICAqICAgcmVzb3VyY2VVcmwsIGh0bWwsIGpzIGFuZCBjc3MuCisgICAgICogQHBhcmFtIHsq
fSB2YWx1ZSBUaGUgdmFsdWUgdGhhdCB0aGF0IHNob3VsZCBiZSBjb25zaWRlcmVkIHRydXN0ZWQv
c2FmZS4KKyAgICAgKiBAcmV0dXJucyB7Kn0gQSB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHN0
YW5kIGluIGZvciB0aGUgcHJvdmlkZWQgYHZhbHVlYCBpbiBwbGFjZXMKKyAgICAgKiB3aGVyZSBB
bmd1bGFyIGV4cGVjdHMgYSAkc2NlLnRydXN0QXMoKSByZXR1cm4gdmFsdWUuCisgICAgICovCisg
ICAgZnVuY3Rpb24gdHJ1c3RBcyh0eXBlLCB0cnVzdGVkVmFsdWUpIHsKKyAgICAgIHZhciBDb25z
dHJ1Y3RvciA9IChieVR5cGUuaGFzT3duUHJvcGVydHkodHlwZSkgPyBieVR5cGVbdHlwZV0gOiBu
dWxsKTsKKyAgICAgIGlmICghQ29uc3RydWN0b3IpIHsKKyAgICAgICAgdGhyb3cgJHNjZU1pbkVy
cignaWNvbnRleHQnLAorICAgICAgICAgICAgJ0F0dGVtcHRlZCB0byB0cnVzdCBhIHZhbHVlIGlu
IGludmFsaWQgY29udGV4dC4gQ29udGV4dDogezB9OyBWYWx1ZTogezF9JywKKyAgICAgICAgICAg
IHR5cGUsIHRydXN0ZWRWYWx1ZSk7CisgICAgICB9CisgICAgICBpZiAodHJ1c3RlZFZhbHVlID09
PSBudWxsIHx8IHRydXN0ZWRWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHRydXN0ZWRWYWx1ZSA9PT0g
JycpIHsKKyAgICAgICAgcmV0dXJuIHRydXN0ZWRWYWx1ZTsKKyAgICAgIH0KKyAgICAgIC8vIEFs
bCB0aGUgY3VycmVudCBjb250ZXh0cyBpbiBTQ0VfQ09OVEVYVFMgaGFwcGVuIHRvIGJlIHN0cmlu
Z3MuICBJbiBvcmRlciB0byBhdm9pZCB0cnVzdGluZworICAgICAgLy8gbXV0YWJsZSBvYmplY3Rz
LCB3ZSBlbnN1cmUgaGVyZSB0aGF0IHRoZSB2YWx1ZSBwYXNzZWQgaW4gaXMgYWN0dWFsbHkgYSBz
dHJpbmcuCisgICAgICBpZiAodHlwZW9mIHRydXN0ZWRWYWx1ZSAhPT0gJ3N0cmluZycpIHsKKyAg
ICAgICAgdGhyb3cgJHNjZU1pbkVycignaXR5cGUnLAorICAgICAgICAgICAgJ0F0dGVtcHRlZCB0
byB0cnVzdCBhIG5vbi1zdHJpbmcgdmFsdWUgaW4gYSBjb250ZW50IHJlcXVpcmluZyBhIHN0cmlu
ZzogQ29udGV4dDogezB9JywKKyAgICAgICAgICAgIHR5cGUpOworICAgICAgfQorICAgICAgcmV0
dXJuIG5ldyBDb25zdHJ1Y3Rvcih0cnVzdGVkVmFsdWUpOworICAgIH0KKworICAgIC8qKgorICAg
ICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgKiBAbmFtZSAkc2NlRGVsZWdhdGUjdmFsdWVPZgorICAg
ICAqCisgICAgICogQGRlc2NyaXB0aW9uCisgICAgICogSWYgdGhlIHBhc3NlZCBwYXJhbWV0ZXIg
aGFkIGJlZW4gcmV0dXJuZWQgYnkgYSBwcmlvciBjYWxsIHRvIHtAbGluayBuZy4kc2NlRGVsZWdh
dGUjdHJ1c3RBcworICAgICAqIGAkc2NlRGVsZWdhdGUudHJ1c3RBc2B9LCByZXR1cm5zIHRoZSB2
YWx1ZSB0aGF0IGhhZCBiZWVuIHBhc3NlZCB0byB7QGxpbmsKKyAgICAgKiBuZy4kc2NlRGVsZWdh
dGUjdHJ1c3RBcyBgJHNjZURlbGVnYXRlLnRydXN0QXNgfS4KKyAgICAgKgorICAgICAqIElmIHRo
ZSBwYXNzZWQgcGFyYW1ldGVyIGlzIG5vdCBhIHZhbHVlIHRoYXQgaGFkIGJlZW4gcmV0dXJuZWQg
Ynkge0BsaW5rCisgICAgICogbmcuJHNjZURlbGVnYXRlI3RydXN0QXMgYCRzY2VEZWxlZ2F0ZS50
cnVzdEFzYH0sIHJldHVybnMgaXQgYXMtaXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0geyp9IHZh
bHVlIFRoZSByZXN1bHQgb2YgYSBwcmlvciB7QGxpbmsgbmcuJHNjZURlbGVnYXRlI3RydXN0QXMg
YCRzY2VEZWxlZ2F0ZS50cnVzdEFzYH0KKyAgICAgKiAgICAgIGNhbGwgb3IgYW55dGhpbmcgZWxz
ZS4KKyAgICAgKiBAcmV0dXJucyB7Kn0gVGhlIGB2YWx1ZWAgdGhhdCB3YXMgb3JpZ2luYWxseSBw
cm92aWRlZCB0byB7QGxpbmsgbmcuJHNjZURlbGVnYXRlI3RydXN0QXMKKyAgICAgKiAgICAgYCRz
Y2VEZWxlZ2F0ZS50cnVzdEFzYH0gaWYgYHZhbHVlYCBpcyB0aGUgcmVzdWx0IG9mIHN1Y2ggYSBj
YWxsLiAgT3RoZXJ3aXNlLCByZXR1cm5zCisgICAgICogICAgIGB2YWx1ZWAgdW5jaGFuZ2VkLgor
ICAgICAqLworICAgIGZ1bmN0aW9uIHZhbHVlT2YobWF5YmVUcnVzdGVkKSB7CisgICAgICBpZiAo
bWF5YmVUcnVzdGVkIGluc3RhbmNlb2YgdHJ1c3RlZFZhbHVlSG9sZGVyQmFzZSkgeworICAgICAg
ICByZXR1cm4gbWF5YmVUcnVzdGVkLiQkdW53cmFwVHJ1c3RlZFZhbHVlKCk7CisgICAgICB9IGVs
c2UgeworICAgICAgICByZXR1cm4gbWF5YmVUcnVzdGVkOworICAgICAgfQorICAgIH0KKworICAg
IC8qKgorICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgKiBAbmFtZSAkc2NlRGVsZWdhdGUjZ2V0
VHJ1c3RlZAorICAgICAqCisgICAgICogQGRlc2NyaXB0aW9uCisgICAgICogVGFrZXMgdGhlIHJl
c3VsdCBvZiBhIHtAbGluayBuZy4kc2NlRGVsZWdhdGUjdHJ1c3RBcyBgJHNjZURlbGVnYXRlLnRy
dXN0QXNgfSBjYWxsIGFuZAorICAgICAqIHJldHVybnMgdGhlIG9yaWdpbmFsbHkgc3VwcGxpZWQg
dmFsdWUgaWYgdGhlIHF1ZXJpZWQgY29udGV4dCB0eXBlIGlzIGEgc3VwZXJ0eXBlIG9mIHRoZQor
ICAgICAqIGNyZWF0ZWQgdHlwZS4gIElmIHRoaXMgY29uZGl0aW9uIGlzbid0IHNhdGlzZmllZCwg
dGhyb3dzIGFuIGV4Y2VwdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBl
IFRoZSBraW5kIG9mIGNvbnRleHQgaW4gd2hpY2ggdGhpcyB2YWx1ZSBpcyB0byBiZSB1c2VkLgor
ICAgICAqIEBwYXJhbSB7Kn0gbWF5YmVUcnVzdGVkIFRoZSByZXN1bHQgb2YgYSBwcmlvciB7QGxp
bmsgbmcuJHNjZURlbGVnYXRlI3RydXN0QXMKKyAgICAgKiAgICAgYCRzY2VEZWxlZ2F0ZS50cnVz
dEFzYH0gY2FsbC4KKyAgICAgKiBAcmV0dXJucyB7Kn0gVGhlIHZhbHVlIHRoZSB3YXMgb3JpZ2lu
YWxseSBwcm92aWRlZCB0byB7QGxpbmsgbmcuJHNjZURlbGVnYXRlI3RydXN0QXMKKyAgICAgKiAg
ICAgYCRzY2VEZWxlZ2F0ZS50cnVzdEFzYH0gaWYgdmFsaWQgaW4gdGhpcyBjb250ZXh0LiAgT3Ro
ZXJ3aXNlLCB0aHJvd3MgYW4gZXhjZXB0aW9uLgorICAgICAqLworICAgIGZ1bmN0aW9uIGdldFRy
dXN0ZWQodHlwZSwgbWF5YmVUcnVzdGVkKSB7CisgICAgICBpZiAobWF5YmVUcnVzdGVkID09PSBu
dWxsIHx8IG1heWJlVHJ1c3RlZCA9PT0gdW5kZWZpbmVkIHx8IG1heWJlVHJ1c3RlZCA9PT0gJycp
IHsKKyAgICAgICAgcmV0dXJuIG1heWJlVHJ1c3RlZDsKKyAgICAgIH0KKyAgICAgIHZhciBjb25z
dHJ1Y3RvciA9IChieVR5cGUuaGFzT3duUHJvcGVydHkodHlwZSkgPyBieVR5cGVbdHlwZV0gOiBu
dWxsKTsKKyAgICAgIGlmIChjb25zdHJ1Y3RvciAmJiBtYXliZVRydXN0ZWQgaW5zdGFuY2VvZiBj
b25zdHJ1Y3RvcikgeworICAgICAgICByZXR1cm4gbWF5YmVUcnVzdGVkLiQkdW53cmFwVHJ1c3Rl
ZFZhbHVlKCk7CisgICAgICB9CisgICAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgdGhlbiB3ZSBtYXkg
b25seSB0YWtlIG9uZSBvZiB0d28gYWN0aW9ucy4KKyAgICAgIC8vIDEuIHNhbml0aXplIHRoZSB2
YWx1ZSBmb3IgdGhlIHJlcXVlc3RlZCB0eXBlLCBvcgorICAgICAgLy8gMi4gdGhyb3cgYW4gZXhj
ZXB0aW9uLgorICAgICAgaWYgKHR5cGUgPT09IFNDRV9DT05URVhUUy5SRVNPVVJDRV9VUkwpIHsK
KyAgICAgICAgaWYgKGlzUmVzb3VyY2VVcmxBbGxvd2VkQnlQb2xpY3kobWF5YmVUcnVzdGVkKSkg
eworICAgICAgICAgIHJldHVybiBtYXliZVRydXN0ZWQ7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgdGhyb3cgJHNjZU1pbkVycignaW5zZWN1cmwnLAorICAgICAgICAgICAgICAnQmxvY2tl
ZCBsb2FkaW5nIHJlc291cmNlIGZyb20gdXJsIG5vdCBhbGxvd2VkIGJ5ICRzY2VEZWxlZ2F0ZSBw
b2xpY3kuICBVUkw6IHswfScsCisgICAgICAgICAgICAgIG1heWJlVHJ1c3RlZC50b1N0cmluZygp
KTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBTQ0VfQ09OVEVYVFMuSFRN
TCkgeworICAgICAgICByZXR1cm4gaHRtbFNhbml0aXplcihtYXliZVRydXN0ZWQpOworICAgICAg
fQorICAgICAgdGhyb3cgJHNjZU1pbkVycigndW5zYWZlJywgJ0F0dGVtcHRpbmcgdG8gdXNlIGFu
IHVuc2FmZSB2YWx1ZSBpbiBhIHNhZmUgY29udGV4dC4nKTsKKyAgICB9CisKKyAgICByZXR1cm4g
eyB0cnVzdEFzOiB0cnVzdEFzLAorICAgICAgICAgICAgIGdldFRydXN0ZWQ6IGdldFRydXN0ZWQs
CisgICAgICAgICAgICAgdmFsdWVPZjogdmFsdWVPZiB9OworICB9XTsKK30KKworCisvKioKKyAq
IEBuZ2RvYyBwcm92aWRlcgorICogQG5hbWUgJHNjZVByb3ZpZGVyCisgKiBAZGVzY3JpcHRpb24K
KyAqCisgKiBUaGUgJHNjZVByb3ZpZGVyIHByb3ZpZGVyIGFsbG93cyBkZXZlbG9wZXJzIHRvIGNv
bmZpZ3VyZSB0aGUge0BsaW5rIG5nLiRzY2UgJHNjZX0gc2VydmljZS4KKyAqIC0gICBlbmFibGUv
ZGlzYWJsZSBTdHJpY3QgQ29udGV4dHVhbCBFc2NhcGluZyAoU0NFKSBpbiBhIG1vZHVsZQorICog
LSAgIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdpdGggYSBjdXN0b20gZGVs
ZWdhdGUKKyAqCisgKiBSZWFkIG1vcmUgYWJvdXQge0BsaW5rIG5nLiRzY2UgU3RyaWN0IENvbnRl
eHR1YWwgRXNjYXBpbmcgKFNDRSl9LgorICovCisKKy8qIGpzaGludCBtYXhsZW46IGZhbHNlKi8K
KworLyoqCisgKiBAbmdkb2Mgc2VydmljZQorICogQG5hbWUgJHNjZQorICogQGtpbmQgZnVuY3Rp
b24KKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqCisgKiBgJHNjZWAgaXMgYSBzZXJ2aWNlIHRoYXQg
cHJvdmlkZXMgU3RyaWN0IENvbnRleHR1YWwgRXNjYXBpbmcgc2VydmljZXMgdG8gQW5ndWxhckpT
LgorICoKKyAqICMgU3RyaWN0IENvbnRleHR1YWwgRXNjYXBpbmcKKyAqCisgKiBTdHJpY3QgQ29u
dGV4dHVhbCBFc2NhcGluZyAoU0NFKSBpcyBhIG1vZGUgaW4gd2hpY2ggQW5ndWxhckpTIHJlcXVp
cmVzIGJpbmRpbmdzIGluIGNlcnRhaW4KKyAqIGNvbnRleHRzIHRvIHJlc3VsdCBpbiBhIHZhbHVl
IHRoYXQgaXMgbWFya2VkIGFzIHNhZmUgdG8gdXNlIGZvciB0aGF0IGNvbnRleHQuICBPbmUgZXhh
bXBsZSBvZgorICogc3VjaCBhIGNvbnRleHQgaXMgYmluZGluZyBhcmJpdHJhcnkgaHRtbCBjb250
cm9sbGVkIGJ5IHRoZSB1c2VyIHZpYSBgbmctYmluZC1odG1sYC4gIFdlIHJlZmVyCisgKiB0byB0
aGVzZSBjb250ZXh0cyBhcyBwcml2aWxlZ2VkIG9yIFNDRSBjb250ZXh0cy4KKyAqCisgKiBBcyBv
ZiB2ZXJzaW9uIDEuMiwgQW5ndWxhciBzaGlwcyB3aXRoIFNDRSBlbmFibGVkIGJ5IGRlZmF1bHQu
CisgKgorICogTm90ZTogIFdoZW4gZW5hYmxlZCAodGhlIGRlZmF1bHQpLCBJRTwxMSBpbiBxdWly
a3MgbW9kZSBpcyBub3Qgc3VwcG9ydGVkLiAgSW4gdGhpcyBtb2RlLCBJRTwxMSBhbGxvdworICog
b25lIHRvIGV4ZWN1dGUgYXJiaXRyYXJ5IGphdmFzY3JpcHQgYnkgdGhlIHVzZSBvZiB0aGUgZXhw
cmVzc2lvbigpIHN5bnRheC4gIFJlZmVyCisgKiA8aHR0cDovL2Jsb2dzLm1zZG4uY29tL2IvaWUv
YXJjaGl2ZS8yMDA4LzEwLzE2L2VuZGluZy1leHByZXNzaW9ucy5hc3B4PiB0byBsZWFybiBtb3Jl
IGFib3V0IHRoZW0uCisgKiBZb3UgY2FuIGVuc3VyZSB5b3VyIGRvY3VtZW50IGlzIGluIHN0YW5k
YXJkcyBtb2RlIGFuZCBub3QgcXVpcmtzIG1vZGUgYnkgYWRkaW5nIGA8IWRvY3R5cGUgaHRtbD5g
CisgKiB0byB0aGUgdG9wIG9mIHlvdXIgSFRNTCBkb2N1bWVudC4KKyAqCisgKiBTQ0UgYXNzaXN0
cyBpbiB3cml0aW5nIGNvZGUgaW4gd2F5IHRoYXQgKGEpIGlzIHNlY3VyZSBieSBkZWZhdWx0IGFu
ZCAoYikgbWFrZXMgYXVkaXRpbmcgZm9yCisgKiBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgc3Vj
aCBhcyBYU1MsIGNsaWNramFja2luZywgZXRjLiBhIGxvdCBlYXNpZXIuCisgKgorICogSGVyZSdz
IGFuIGV4YW1wbGUgb2YgYSBiaW5kaW5nIGluIGEgcHJpdmlsZWdlZCBjb250ZXh0OgorICoKKyAq
IGBgYAorICogPGlucHV0IG5nLW1vZGVsPSJ1c2VySHRtbCIgYXJpYS1sYWJlbD0iVXNlciBpbnB1
dCI+CisgKiA8ZGl2IG5nLWJpbmQtaHRtbD0idXNlckh0bWwiPjwvZGl2PgorICogYGBgCisgKgor
ICogTm90aWNlIHRoYXQgYG5nLWJpbmQtaHRtbGAgaXMgYm91bmQgdG8gYHVzZXJIdG1sYCBjb250
cm9sbGVkIGJ5IHRoZSB1c2VyLiAgV2l0aCBTQ0UKKyAqIGRpc2FibGVkLCB0aGlzIGFwcGxpY2F0
aW9uIGFsbG93cyB0aGUgdXNlciB0byByZW5kZXIgYXJiaXRyYXJ5IEhUTUwgaW50byB0aGUgRElW
LgorICogSW4gYSBtb3JlIHJlYWxpc3RpYyBleGFtcGxlLCBvbmUgbWF5IGJlIHJlbmRlcmluZyB1
c2VyIGNvbW1lbnRzLCBibG9nIGFydGljbGVzLCBldGMuIHZpYQorICogYmluZGluZ3MuICAoSFRN
TCBpcyBqdXN0IG9uZSBleGFtcGxlIG9mIGEgY29udGV4dCB3aGVyZSByZW5kZXJpbmcgdXNlciBj
b250cm9sbGVkIGlucHV0IGNyZWF0ZXMKKyAqIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4pCisg
KgorICogRm9yIHRoZSBjYXNlIG9mIEhUTUwsIHlvdSBtaWdodCB1c2UgYSBsaWJyYXJ5LCBlaXRo
ZXIgb24gdGhlIGNsaWVudCBzaWRlLCBvciBvbiB0aGUgc2VydmVyIHNpZGUsCisgKiB0byBzYW5p
dGl6ZSB1bnNhZmUgSFRNTCBiZWZvcmUgYmluZGluZyB0byB0aGUgdmFsdWUgYW5kIHJlbmRlcmlu
ZyBpdCBpbiB0aGUgZG9jdW1lbnQuCisgKgorICogSG93IHdvdWxkIHlvdSBlbnN1cmUgdGhhdCBl
dmVyeSBwbGFjZSB0aGF0IHVzZWQgdGhlc2UgdHlwZXMgb2YgYmluZGluZ3Mgd2FzIGJvdW5kIHRv
IGEgdmFsdWUgdGhhdAorICogd2FzIHNhbml0aXplZCBieSB5b3VyIGxpYnJhcnkgKG9yIHJldHVy
bmVkIGFzIHNhZmUgZm9yIHJlbmRlcmluZyBieSB5b3VyIHNlcnZlcj8pICBIb3cgY2FuIHlvdQor
ICogZW5zdXJlIHRoYXQgeW91IGRpZG4ndCBhY2NpZGVudGFsbHkgZGVsZXRlIHRoZSBsaW5lIHRo
YXQgc2FuaXRpemVkIHRoZSB2YWx1ZSwgb3IgcmVuYW1lZCBzb21lCisgKiBwcm9wZXJ0aWVzL2Zp
ZWxkcyBhbmQgZm9yZ290IHRvIHVwZGF0ZSB0aGUgYmluZGluZyB0byB0aGUgc2FuaXRpemVkIHZh
bHVlPworICoKKyAqIFRvIGJlIHNlY3VyZSBieSBkZWZhdWx0LCB5b3Ugd2FudCB0byBlbnN1cmUg
dGhhdCBhbnkgc3VjaCBiaW5kaW5ncyBhcmUgZGlzYWxsb3dlZCB1bmxlc3MgeW91IGNhbgorICog
ZGV0ZXJtaW5lIHRoYXQgc29tZXRoaW5nIGV4cGxpY2l0bHkgc2F5cyBpdCdzIHNhZmUgdG8gdXNl
IGEgdmFsdWUgZm9yIGJpbmRpbmcgaW4gdGhhdAorICogY29udGV4dC4gIFlvdSBjYW4gdGhlbiBh
dWRpdCB5b3VyIGNvZGUgKGEgc2ltcGxlIGdyZXAgd291bGQgZG8pIHRvIGVuc3VyZSB0aGF0IHRo
aXMgaXMgb25seSBkb25lCisgKiBmb3IgdGhvc2UgdmFsdWVzIHRoYXQgeW91IGNhbiBlYXNpbHkg
dGVsbCBhcmUgc2FmZSAtIGJlY2F1c2UgdGhleSB3ZXJlIHJlY2VpdmVkIGZyb20geW91ciBzZXJ2
ZXIsCisgKiBzYW5pdGl6ZWQgYnkgeW91ciBsaWJyYXJ5LCBldGMuICBZb3UgY2FuIG9yZ2FuaXpl
IHlvdXIgY29kZWJhc2UgdG8gaGVscCB3aXRoIHRoaXMgLSBwZXJoYXBzCisgKiBhbGxvd2luZyBv
bmx5IHRoZSBmaWxlcyBpbiBhIHNwZWNpZmljIGRpcmVjdG9yeSB0byBkbyB0aGlzLiAgRW5zdXJp
bmcgdGhhdCB0aGUgaW50ZXJuYWwgQVBJCisgKiBleHBvc2VkIGJ5IHRoYXQgY29kZSBkb2Vzbid0
IG1hcmt1cCBhcmJpdHJhcnkgdmFsdWVzIGFzIHNhZmUgdGhlbiBiZWNvbWVzIGEgbW9yZSBtYW5h
Z2VhYmxlIHRhc2suCisgKgorICogSW4gdGhlIGNhc2Ugb2YgQW5ndWxhckpTJyBTQ0Ugc2Vydmlj
ZSwgb25lIHVzZXMge0BsaW5rIG5nLiRzY2UjdHJ1c3RBcyAkc2NlLnRydXN0QXN9CisgKiAoYW5k
IHNob3J0aGFuZCBtZXRob2RzIHN1Y2ggYXMge0BsaW5rIG5nLiRzY2UjdHJ1c3RBc0h0bWwgJHNj
ZS50cnVzdEFzSHRtbH0sIGV0Yy4pIHRvCisgKiBvYnRhaW4gdmFsdWVzIHRoYXQgd2lsbCBiZSBh
Y2NlcHRlZCBieSBTQ0UgLyBwcml2aWxlZ2VkIGNvbnRleHRzLgorICoKKyAqCisgKiAjIyBIb3cg
ZG9lcyBpdCB3b3JrPworICoKKyAqIEluIHByaXZpbGVnZWQgY29udGV4dHMsIGRpcmVjdGl2ZXMg
YW5kIGNvZGUgd2lsbCBiaW5kIHRvIHRoZSByZXN1bHQgb2Yge0BsaW5rIG5nLiRzY2UjZ2V0VHJ1
c3RlZAorICogJHNjZS5nZXRUcnVzdGVkKGNvbnRleHQsIHZhbHVlKX0gcmF0aGVyIHRoYW4gdG8g
dGhlIHZhbHVlIGRpcmVjdGx5LiAgRGlyZWN0aXZlcyB1c2Uge0BsaW5rCisgKiBuZy4kc2NlI3Bh
cnNlQXMgJHNjZS5wYXJzZUFzfSByYXRoZXIgdGhhbiBgJHBhcnNlYCB0byB3YXRjaCBhdHRyaWJ1
dGUgYmluZGluZ3MsIHdoaWNoIHBlcmZvcm1zIHRoZQorICoge0BsaW5rIG5nLiRzY2UjZ2V0VHJ1
c3RlZCAkc2NlLmdldFRydXN0ZWR9IGJlaGluZCB0aGUgc2NlbmVzIG9uIG5vbi1jb25zdGFudCBs
aXRlcmFscy4KKyAqCisgKiBBcyBhbiBleGFtcGxlLCB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nQmlu
ZEh0bWwgbmdCaW5kSHRtbH0gdXNlcyB7QGxpbmsKKyAqIG5nLiRzY2UjcGFyc2VBc0h0bWwgJHNj
ZS5wYXJzZUFzSHRtbChiaW5kaW5nIGV4cHJlc3Npb24pfS4gIEhlcmUncyB0aGUgYWN0dWFsIGNv
ZGUgKHNsaWdodGx5CisgKiBzaW1wbGlmaWVkKToKKyAqCisgKiBgYGAKKyAqIHZhciBuZ0JpbmRI
dG1sRGlyZWN0aXZlID0gWyckc2NlJywgZnVuY3Rpb24oJHNjZSkgeworICogICByZXR1cm4gZnVu
Y3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHIpIHsKKyAqICAgICBzY29wZS4kd2F0Y2goJHNjZS5w
YXJzZUFzSHRtbChhdHRyLm5nQmluZEh0bWwpLCBmdW5jdGlvbih2YWx1ZSkgeworICogICAgICAg
ZWxlbWVudC5odG1sKHZhbHVlIHx8ICcnKTsKKyAqICAgICB9KTsKKyAqICAgfTsKKyAqIH1dOwor
ICogYGBgCisgKgorICogIyMgSW1wYWN0IG9uIGxvYWRpbmcgdGVtcGxhdGVzCisgKgorICogVGhp
cyBhcHBsaWVzIGJvdGggdG8gdGhlIHtAbGluayBuZy5kaXJlY3RpdmU6bmdJbmNsdWRlIGBuZy1p
bmNsdWRlYH0gZGlyZWN0aXZlIGFzIHdlbGwgYXMKKyAqIGB0ZW1wbGF0ZVVybGAncyBzcGVjaWZp
ZWQgYnkge0BsaW5rIGd1aWRlL2RpcmVjdGl2ZSBkaXJlY3RpdmVzfS4KKyAqCisgKiBCeSBkZWZh
dWx0LCBBbmd1bGFyIG9ubHkgbG9hZHMgdGVtcGxhdGVzIGZyb20gdGhlIHNhbWUgZG9tYWluIGFu
ZCBwcm90b2NvbCBhcyB0aGUgYXBwbGljYXRpb24KKyAqIGRvY3VtZW50LiAgVGhpcyBpcyBkb25l
IGJ5IGNhbGxpbmcge0BsaW5rIG5nLiRzY2UjZ2V0VHJ1c3RlZFJlc291cmNlVXJsCisgKiAkc2Nl
LmdldFRydXN0ZWRSZXNvdXJjZVVybH0gb24gdGhlIHRlbXBsYXRlIFVSTC4gIFRvIGxvYWQgdGVt
cGxhdGVzIGZyb20gb3RoZXIgZG9tYWlucyBhbmQvb3IKKyAqIHByb3RvY29scywgeW91IG1heSBl
aXRoZXIgZWl0aGVyIHtAbGluayBuZy4kc2NlRGVsZWdhdGVQcm92aWRlciNyZXNvdXJjZVVybFdo
aXRlbGlzdCB3aGl0ZWxpc3QKKyAqIHRoZW19IG9yIHtAbGluayBuZy4kc2NlI3RydXN0QXNSZXNv
dXJjZVVybCB3cmFwIGl0fSBpbnRvIGEgdHJ1c3RlZCB2YWx1ZS4KKyAqCisgKiAqUGxlYXNlIG5v
dGUqOgorICogVGhlIGJyb3dzZXIncworICogW1NhbWUgT3JpZ2luIFBvbGljeV0oaHR0cHM6Ly9j
b2RlLmdvb2dsZS5jb20vcC9icm93c2Vyc2VjL3dpa2kvUGFydDIjU2FtZS1vcmlnaW5fcG9saWN5
X2Zvcl9YTUxIdHRwUmVxdWVzdCkKKyAqIGFuZCBbQ3Jvc3MtT3JpZ2luIFJlc291cmNlIFNoYXJp
bmcgKENPUlMpXShodHRwOi8vd3d3LnczLm9yZy9UUi9jb3JzLykKKyAqIHBvbGljeSBhcHBseSBp
biBhZGRpdGlvbiB0byB0aGlzIGFuZCBtYXkgZnVydGhlciByZXN0cmljdCB3aGV0aGVyIHRoZSB0
ZW1wbGF0ZSBpcyBzdWNjZXNzZnVsbHkKKyAqIGxvYWRlZC4gIFRoaXMgbWVhbnMgdGhhdCB3aXRo
b3V0IHRoZSByaWdodCBDT1JTIHBvbGljeSwgbG9hZGluZyB0ZW1wbGF0ZXMgZnJvbSBhIGRpZmZl
cmVudCBkb21haW4KKyAqIHdvbid0IHdvcmsgb24gYWxsIGJyb3dzZXJzLiAgQWxzbywgbG9hZGlu
ZyB0ZW1wbGF0ZXMgZnJvbSBgZmlsZTovL2AgVVJMIGRvZXMgbm90IHdvcmsgb24gc29tZQorICog
YnJvd3NlcnMuCisgKgorICogIyMgVGhpcyBmZWVscyBsaWtlIHRvbyBtdWNoIG92ZXJoZWFkCisg
KgorICogSXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCBTQ0Ugb25seSBhcHBsaWVzIHRv
IGludGVycG9sYXRpb24gZXhwcmVzc2lvbnMuCisgKgorICogSWYgeW91ciBleHByZXNzaW9ucyBh
cmUgY29uc3RhbnQgbGl0ZXJhbHMsIHRoZXkncmUgYXV0b21hdGljYWxseSB0cnVzdGVkIGFuZCB5
b3UgZG9uJ3QgbmVlZCB0bworICogY2FsbCBgJHNjZS50cnVzdEFzYCBvbiB0aGVtIChyZW1lbWJl
ciB0byBpbmNsdWRlIHRoZSBgbmdTYW5pdGl6ZWAgbW9kdWxlKSAoZS5nLgorICogYDxkaXYgbmct
YmluZC1odG1sPSInPGI+aW1wbGljaXRseSB0cnVzdGVkPC9iPiciPjwvZGl2PmApIGp1c3Qgd29y
a3MuCisgKgorICogQWRkaXRpb25hbGx5LCBgYVtocmVmXWAgYW5kIGBpbWdbc3JjXWAgYXV0b21h
dGljYWxseSBzYW5pdGl6ZSB0aGVpciBVUkxzIGFuZCBkbyBub3QgcGFzcyB0aGVtCisgKiB0aHJv
dWdoIHtAbGluayBuZy4kc2NlI2dldFRydXN0ZWQgJHNjZS5nZXRUcnVzdGVkfS4gIFNDRSBkb2Vz
bid0IHBsYXkgYSByb2xlIGhlcmUuCisgKgorICogVGhlIGluY2x1ZGVkIHtAbGluayBuZy4kc2Nl
RGVsZWdhdGUgJHNjZURlbGVnYXRlfSBjb21lcyB3aXRoIHNhbmUgZGVmYXVsdHMgdG8gYWxsb3cg
eW91IHRvIGxvYWQKKyAqIHRlbXBsYXRlcyBpbiBgbmctaW5jbHVkZWAgZnJvbSB5b3VyIGFwcGxp
Y2F0aW9uJ3MgZG9tYWluIHdpdGhvdXQgaGF2aW5nIHRvIGV2ZW4ga25vdyBhYm91dCBTQ0UuCisg
KiBJdCBibG9ja3MgbG9hZGluZyB0ZW1wbGF0ZXMgZnJvbSBvdGhlciBkb21haW5zIG9yIGxvYWRp
bmcgdGVtcGxhdGVzIG92ZXIgaHR0cCBmcm9tIGFuIGh0dHBzCisgKiBzZXJ2ZWQgZG9jdW1lbnQu
ICBZb3UgY2FuIGNoYW5nZSB0aGVzZSBieSBzZXR0aW5nIHlvdXIgb3duIGN1c3RvbSB7QGxpbmsK
KyAqIG5nLiRzY2VEZWxlZ2F0ZVByb3ZpZGVyI3Jlc291cmNlVXJsV2hpdGVsaXN0IHdoaXRlbGlz
dHN9IGFuZCB7QGxpbmsKKyAqIG5nLiRzY2VEZWxlZ2F0ZVByb3ZpZGVyI3Jlc291cmNlVXJsQmxh
Y2tsaXN0IGJsYWNrbGlzdHN9IGZvciBtYXRjaGluZyBzdWNoIFVSTHMuCisgKgorICogVGhpcyBz
aWduaWZpY2FudGx5IHJlZHVjZXMgdGhlIG92ZXJoZWFkLiAgSXQgaXMgZmFyIGVhc2llciB0byBw
YXkgdGhlIHNtYWxsIG92ZXJoZWFkIGFuZCBoYXZlIGFuCisgKiBhcHBsaWNhdGlvbiB0aGF0J3Mg
c2VjdXJlIGFuZCBjYW4gYmUgYXVkaXRlZCB0byB2ZXJpZnkgdGhhdCB3aXRoIG11Y2ggbW9yZSBl
YXNlIHRoYW4gYm9sdGluZworICogc2VjdXJpdHkgb250byBhbiBhcHBsaWNhdGlvbiBsYXRlci4K
KyAqCisgKiA8YSBuYW1lPSJjb250ZXh0cyI+PC9hPgorICogIyMgV2hhdCB0cnVzdGVkIGNvbnRl
eHQgdHlwZXMgYXJlIHN1cHBvcnRlZD8KKyAqCisgKiB8IENvbnRleHQgICAgICAgICAgICAgfCBO
b3RlcyAgICAgICAgICB8CisgKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0t
LS18CisgKiB8IGAkc2NlLkhUTUxgICAgICAgICAgfCBGb3IgSFRNTCB0aGF0J3Mgc2FmZSB0byBz
b3VyY2UgaW50byB0aGUgYXBwbGljYXRpb24uICBUaGUge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0Jp
bmRIdG1sIG5nQmluZEh0bWx9IGRpcmVjdGl2ZSB1c2VzIHRoaXMgY29udGV4dCBmb3IgYmluZGlu
Z3MuIElmIGFuIHVuc2FmZSB2YWx1ZSBpcyBlbmNvdW50ZXJlZCBhbmQgdGhlIHtAbGluayBuZ1Nh
bml0aXplICRzYW5pdGl6ZX0gbW9kdWxlIGlzIHByZXNlbnQgdGhpcyB3aWxsIHNhbml0aXplIHRo
ZSB2YWx1ZSBpbnN0ZWFkIG9mIHRocm93aW5nIGFuIGVycm9yLiB8CisgKiB8IGAkc2NlLkNTU2Ag
ICAgICAgICAgfCBGb3IgQ1NTIHRoYXQncyBzYWZlIHRvIHNvdXJjZSBpbnRvIHRoZSBhcHBsaWNh
dGlvbi4gIEN1cnJlbnRseSB1bnVzZWQuICBGZWVsIGZyZWUgdG8gdXNlIGl0IGluIHlvdXIgb3du
IGRpcmVjdGl2ZXMuIHwKKyAqIHwgYCRzY2UuVVJMYCAgICAgICAgICB8IEZvciBVUkxzIHRoYXQg
YXJlIHNhZmUgdG8gZm9sbG93IGFzIGxpbmtzLiAgQ3VycmVudGx5IHVudXNlZCAoYDxhIGhyZWY9
YCBhbmQgYDxpbWcgc3JjPWAgc2FuaXRpemUgdGhlaXIgdXJscyBhbmQgZG9uJ3QgY29uc3RpdHV0
ZSBhbiBTQ0UgY29udGV4dC4gfAorICogfCBgJHNjZS5SRVNPVVJDRV9VUkxgIHwgRm9yIFVSTHMg
dGhhdCBhcmUgbm90IG9ubHkgc2FmZSB0byBmb2xsb3cgYXMgbGlua3MsIGJ1dCB3aG9zZSBjb250
ZW50cyBhcmUgYWxzbyBzYWZlIHRvIGluY2x1ZGUgaW4geW91ciBhcHBsaWNhdGlvbi4gIEV4YW1w
bGVzIGluY2x1ZGUgYG5nLWluY2x1ZGVgLCBgc3JjYCAvIGBuZ1NyY2AgYmluZGluZ3MgZm9yIHRh
Z3Mgb3RoZXIgdGhhbiBgSU1HYCAoZS5nLiBgSUZSQU1FYCwgYE9CSkVDVGAsIGV0Yy4pICA8YnI+
PGJyPk5vdGUgdGhhdCBgJHNjZS5SRVNPVVJDRV9VUkxgIG1ha2VzIGEgc3Ryb25nZXIgc3RhdGVt
ZW50IGFib3V0IHRoZSBVUkwgdGhhbiBgJHNjZS5VUkxgIGRvZXMgYW5kIHRoZXJlZm9yZSBjb250
ZXh0cyByZXF1aXJpbmcgdmFsdWVzIHRydXN0ZWQgZm9yIGAkc2NlLlJFU09VUkNFX1VSTGAgY2Fu
IGJlIHVzZWQgYW55d2hlcmUgdGhhdCB2YWx1ZXMgdHJ1c3RlZCBmb3IgYCRzY2UuVVJMYCBhcmUg
cmVxdWlyZWQuIHwKKyAqIHwgYCRzY2UuSlNgICAgICAgICAgICB8IEZvciBKYXZhU2NyaXB0IHRo
YXQgaXMgc2FmZSB0byBleGVjdXRlIGluIHlvdXIgYXBwbGljYXRpb24ncyBjb250ZXh0LiAgQ3Vy
cmVudGx5IHVudXNlZC4gIEZlZWwgZnJlZSB0byB1c2UgaXQgaW4geW91ciBvd24gZGlyZWN0aXZl
cy4gfAorICoKKyAqICMjIEZvcm1hdCBvZiBpdGVtcyBpbiB7QGxpbmsgbmcuJHNjZURlbGVnYXRl
UHJvdmlkZXIjcmVzb3VyY2VVcmxXaGl0ZWxpc3QgcmVzb3VyY2VVcmxXaGl0ZWxpc3R9L3tAbGlu
ayBuZy4kc2NlRGVsZWdhdGVQcm92aWRlciNyZXNvdXJjZVVybEJsYWNrbGlzdCBCbGFja2xpc3R9
IDxhIG5hbWU9InJlc291cmNlVXJsUGF0dGVybkl0ZW0iPjwvYT4KKyAqCisgKiAgRWFjaCBlbGVt
ZW50IGluIHRoZXNlIGFycmF5cyBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICoKKyAq
ICAtICoqJ3NlbGYnKioKKyAqICAgIC0gVGhlIHNwZWNpYWwgKipzdHJpbmcqKiwgYCdzZWxmJ2As
IGNhbiBiZSB1c2VkIHRvIG1hdGNoIGFnYWluc3QgYWxsIFVSTHMgb2YgdGhlICoqc2FtZQorICog
ICAgICBkb21haW4qKiBhcyB0aGUgYXBwbGljYXRpb24gZG9jdW1lbnQgdXNpbmcgdGhlICoqc2Ft
ZSBwcm90b2NvbCoqLgorICogIC0gKipTdHJpbmcqKiAoZXhjZXB0IHRoZSBzcGVjaWFsIHZhbHVl
IGAnc2VsZidgKQorICogICAgLSBUaGUgc3RyaW5nIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgZnVs
bCAqbm9ybWFsaXplZCAvIGFic29sdXRlIFVSTCogb2YgdGhlIHJlc291cmNlCisgKiAgICAgIGJl
aW5nIHRlc3RlZCAoc3Vic3RyaW5nIG1hdGNoZXMgYXJlIG5vdCBnb29kIGVub3VnaC4pCisgKiAg
ICAtIFRoZXJlIGFyZSBleGFjdGx5ICoqdHdvIHdpbGRjYXJkIHNlcXVlbmNlcyoqIC0gYCpgIGFu
ZCBgKipgLiAgQWxsIG90aGVyIGNoYXJhY3RlcnMKKyAqICAgICAgbWF0Y2ggdGhlbXNlbHZlcy4K
KyAqICAgIC0gYCpgOiBtYXRjaGVzIHplcm8gb3IgbW9yZSBvY2N1cnJlbmNlcyBvZiBhbnkgY2hh
cmFjdGVyIG90aGVyIHRoYW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgNgorICogICAgICBjaGFyYWN0
ZXJzOiAnYDpgJywgJ2AvYCcsICdgLmAnLCAnYD9gJywgJ2AmYCcgYW5kICc7Jy4gIEl0J3MgYSB1
c2VmdWwgd2lsZGNhcmQgZm9yIHVzZQorICogICAgICBpbiBhIHdoaXRlbGlzdC4KKyAqICAgIC0g
YCoqYDogbWF0Y2hlcyB6ZXJvIG9yIG1vcmUgb2NjdXJyZW5jZXMgb2YgKmFueSogY2hhcmFjdGVy
LiAgQXMgc3VjaCwgaXQncyBub3QKKyAqICAgICAgbm90IGFwcHJvcHJpYXRlIHRvIHVzZSBpbiBm
b3IgYSBzY2hlbWUsIGRvbWFpbiwgZXRjLiBhcyBpdCB3b3VsZCBtYXRjaCB0b28gbXVjaC4gIChl
LmcuCisgKiAgICAgIGh0dHA6Ly8qKi5leGFtcGxlLmNvbS8gd291bGQgbWF0Y2ggaHR0cDovL2V2
aWwuY29tLz9pZ25vcmU9LmV4YW1wbGUuY29tLyBhbmQgdGhhdCBtaWdodAorICogICAgICBub3Qg
aGF2ZSBiZWVuIHRoZSBpbnRlbnRpb24uKSAgSXRzIHVzYWdlIGF0IHRoZSB2ZXJ5IGVuZCBvZiB0
aGUgcGF0aCBpcyBvay4gIChlLmcuCisgKiAgICAgIGh0dHA6Ly9mb28uZXhhbXBsZS5jb20vdGVt
cGxhdGVzLyoqKS4KKyAqICAtICoqUmVnRXhwKiogKCpzZWUgY2F2ZWF0IGJlbG93KikKKyAqICAg
IC0gKkNhdmVhdCo6ICBXaGlsZSByZWd1bGFyIGV4cHJlc3Npb25zIGFyZSBwb3dlcmZ1bCBhbmQg
b2ZmZXIgZ3JlYXQgZmxleGliaWxpdHksICB0aGVpciBzeW50YXgKKyAqICAgICAgKGFuZCBhbGwg
dGhlIGluZXZpdGFibGUgZXNjYXBpbmcpIG1ha2VzIHRoZW0gKmhhcmRlciB0byBtYWludGFpbiou
ICBJdCdzIGVhc3kgdG8KKyAqICAgICAgYWNjaWRlbnRhbGx5IGludHJvZHVjZSBhIGJ1ZyB3aGVu
IG9uZSB1cGRhdGVzIGEgY29tcGxleCBleHByZXNzaW9uIChpbWhvLCBhbGwgcmVnZXhlcyBzaG91
bGQKKyAqICAgICAgaGF2ZSBnb29kIHRlc3QgY292ZXJhZ2UuKS4gIEZvciBpbnN0YW5jZSwgdGhl
IHVzZSBvZiBgLmAgaW4gdGhlIHJlZ2V4IGlzIGNvcnJlY3Qgb25seSBpbiBhCisgKiAgICAgIHNt
YWxsIG51bWJlciBvZiBjYXNlcy4gIEEgYC5gIGNoYXJhY3RlciBpbiB0aGUgcmVnZXggdXNlZCB3
aGVuIG1hdGNoaW5nIHRoZSBzY2hlbWUgb3IgYQorICogICAgICBzdWJkb21haW4gY291bGQgYmUg
bWF0Y2hlZCBhZ2FpbnN0IGEgYDpgIG9yIGxpdGVyYWwgYC5gIHRoYXQgd2FzIGxpa2VseSBub3Qg
aW50ZW5kZWQuICAgSXQKKyAqICAgICAgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRvIHVzZSB0aGUg
c3RyaW5nIHBhdHRlcm5zIGFuZCBvbmx5IGZhbGwgYmFjayB0byByZWd1bGFyIGV4cHJlc3Npb25z
CisgKiAgICAgIGlmIHRoZXkgYXMgYSBsYXN0IHJlc29ydC4KKyAqICAgIC0gVGhlIHJlZ3VsYXIg
ZXhwcmVzc2lvbiBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFJlZ0V4cCAoaS5lLiBub3QgYSBzdHJp
bmcuKSAgSXQgaXMKKyAqICAgICAgbWF0Y2hlZCBhZ2FpbnN0IHRoZSAqKmVudGlyZSoqICpub3Jt
YWxpemVkIC8gYWJzb2x1dGUgVVJMKiBvZiB0aGUgcmVzb3VyY2UgYmVpbmcgdGVzdGVkCisgKiAg
ICAgIChldmVuIHdoZW4gdGhlIFJlZ0V4cCBkaWQgbm90IGhhdmUgdGhlIGBeYCBhbmQgYCRgIGNv
ZGVzLikgIEluIGFkZGl0aW9uLCBhbnkgZmxhZ3MKKyAqICAgICAgcHJlc2VudCBvbiB0aGUgUmVn
RXhwIChzdWNoIGFzIG11bHRpbGluZSwgZ2xvYmFsLCBpZ25vcmVDYXNlKSBhcmUgaWdub3JlZC4K
KyAqICAgIC0gSWYgeW91IGFyZSBnZW5lcmF0aW5nIHlvdXIgSmF2YVNjcmlwdCBmcm9tIHNvbWUg
b3RoZXIgdGVtcGxhdGluZyBlbmdpbmUgKG5vdAorICogICAgICByZWNvbW1lbmRlZCwgZS5nLiBp
biBpc3N1ZSBbIzQwMDZdKGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIuanMvaXNz
dWVzLzQwMDYpKSwKKyAqICAgICAgcmVtZW1iZXIgdG8gZXNjYXBlIHlvdXIgcmVndWxhciBleHBy
ZXNzaW9uIChhbmQgYmUgYXdhcmUgdGhhdCB5b3UgbWlnaHQgbmVlZCBtb3JlIHRoYW4KKyAqICAg
ICAgb25lIGxldmVsIG9mIGVzY2FwaW5nIGRlcGVuZGluZyBvbiB5b3VyIHRlbXBsYXRpbmcgZW5n
aW5lIGFuZCB0aGUgd2F5IHlvdSBpbnRlcnBvbGF0ZWQKKyAqICAgICAgdGhlIHZhbHVlLikgIERv
IG1ha2UgdXNlIG9mIHlvdXIgcGxhdGZvcm0ncyBlc2NhcGluZyBtZWNoYW5pc20gYXMgaXQgbWln
aHQgYmUgZ29vZAorICogICAgICBlbm91Z2ggYmVmb3JlIGNvZGluZyB5b3VyIG93bi4gIGUuZy4g
UnVieSBoYXMKKyAqICAgICAgW1JlZ2V4cC5lc2NhcGUoc3RyKV0oaHR0cDovL3d3dy5ydWJ5LWRv
Yy5vcmcvY29yZS0yLjAuMC9SZWdleHAuaHRtbCNtZXRob2QtYy1lc2NhcGUpCisgKiAgICAgIGFu
ZCBQeXRob24gaGFzIFtyZS5lc2NhcGVdKGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS9y
ZS5odG1sI3JlLmVzY2FwZSkuCisgKiAgICAgIEphdmFzY3JpcHQgbGFja3MgYSBzaW1pbGFyIGJ1
aWx0IGluIGZ1bmN0aW9uIGZvciBlc2NhcGluZy4gIFRha2UgYSBsb29rIGF0IEdvb2dsZQorICog
ICAgICBDbG9zdXJlIGxpYnJhcnkncyBbZ29vZy5zdHJpbmcucmVnRXhwRXNjYXBlKHMpXSgKKyAq
ICAgICAgaHR0cDovL2RvY3MuY2xvc3VyZS1saWJyYXJ5Lmdvb2dsZWNvZGUuY29tL2dpdC9jbG9z
dXJlX2dvb2dfc3RyaW5nX3N0cmluZy5qcy5zb3VyY2UuaHRtbCNsaW5lOTYyKS4KKyAqCisgKiBS
ZWZlciB7QGxpbmsgbmcuJHNjZURlbGVnYXRlUHJvdmlkZXIgJHNjZURlbGVnYXRlUHJvdmlkZXJ9
IGZvciBhbiBleGFtcGxlLgorICoKKyAqICMjIFNob3cgbWUgYW4gZXhhbXBsZSB1c2luZyBTQ0Uu
CisgKgorICogPGV4YW1wbGUgbW9kdWxlPSJteVNjZUFwcCIgZGVwcz0iYW5ndWxhci1zYW5pdGl6
ZS5qcyI+CisgKiA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAqICAgPGRpdiBuZy1jb250cm9s
bGVyPSJBcHBDb250cm9sbGVyIGFzIG15Q3RybCI+CisgKiAgICAgPGkgbmctYmluZC1odG1sPSJt
eUN0cmwuZXhwbGljaXRseVRydXN0ZWRIdG1sIiBpZD0iZXhwbGljaXRseVRydXN0ZWRIdG1sIj48
L2k+PGJyPjxicj4KKyAqICAgICA8Yj5Vc2VyIGNvbW1lbnRzPC9iPjxicj4KKyAqICAgICBCeSBk
ZWZhdWx0LCBIVE1MIHRoYXQgaXNuJ3QgZXhwbGljaXRseSB0cnVzdGVkIChlLmcuIEFsaWNlJ3Mg
Y29tbWVudCkgaXMgc2FuaXRpemVkIHdoZW4KKyAqICAgICAkc2FuaXRpemUgaXMgYXZhaWxhYmxl
LiAgSWYgJHNhbml0aXplIGlzbid0IGF2YWlsYWJsZSwgdGhpcyByZXN1bHRzIGluIGFuIGVycm9y
IGluc3RlYWQgb2YgYW4KKyAqICAgICBleHBsb2l0LgorICogICAgIDxkaXYgY2xhc3M9IndlbGwi
PgorICogICAgICAgPGRpdiBuZy1yZXBlYXQ9InVzZXJDb21tZW50IGluIG15Q3RybC51c2VyQ29t
bWVudHMiPgorICogICAgICAgICA8Yj57e3VzZXJDb21tZW50Lm5hbWV9fTwvYj46CisgKiAgICAg
ICAgIDxzcGFuIG5nLWJpbmQtaHRtbD0idXNlckNvbW1lbnQuaHRtbENvbW1lbnQiIGNsYXNzPSJo
dG1sQ29tbWVudCI+PC9zcGFuPgorICogICAgICAgICA8YnI+CisgKiAgICAgICA8L2Rpdj4KKyAq
ICAgICA8L2Rpdj4KKyAqICAgPC9kaXY+CisgKiA8L2ZpbGU+CisgKgorICogPGZpbGUgbmFtZT0i
c2NyaXB0LmpzIj4KKyAqICAgYW5ndWxhci5tb2R1bGUoJ215U2NlQXBwJywgWyduZ1Nhbml0aXpl
J10pCisgKiAgICAgLmNvbnRyb2xsZXIoJ0FwcENvbnRyb2xsZXInLCBbJyRodHRwJywgJyR0ZW1w
bGF0ZUNhY2hlJywgJyRzY2UnLAorICogICAgICAgZnVuY3Rpb24oJGh0dHAsICR0ZW1wbGF0ZUNh
Y2hlLCAkc2NlKSB7CisgKiAgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAqICAgICAgICAgJGh0
dHAuZ2V0KCJ0ZXN0X2RhdGEuanNvbiIsIHtjYWNoZTogJHRlbXBsYXRlQ2FjaGV9KS5zdWNjZXNz
KGZ1bmN0aW9uKHVzZXJDb21tZW50cykgeworICogICAgICAgICAgIHNlbGYudXNlckNvbW1lbnRz
ID0gdXNlckNvbW1lbnRzOworICogICAgICAgICB9KTsKKyAqICAgICAgICAgc2VsZi5leHBsaWNp
dGx5VHJ1c3RlZEh0bWwgPSAkc2NlLnRydXN0QXNIdG1sKAorICogICAgICAgICAgICAgJzxzcGFu
IG9ubW91c2VvdmVyPSJ0aGlzLnRleHRDb250ZW50PSZxdW90O0V4cGxpY2l0bHkgdHJ1c3RlZCBI
VE1MIGJ5cGFzc2VzICcgKworICogICAgICAgICAgICAgJ3Nhbml0aXphdGlvbi4mcXVvdDsiPkhv
dmVyIG92ZXIgdGhpcyB0ZXh0Ljwvc3Bhbj4nKTsKKyAqICAgICAgIH1dKTsKKyAqIDwvZmlsZT4K
KyAqCisgKiA8ZmlsZSBuYW1lPSJ0ZXN0X2RhdGEuanNvbiI+CisgKiBbCisgKiAgIHsgIm5hbWUi
OiAiQWxpY2UiLAorICogICAgICJodG1sQ29tbWVudCI6CisgKiAgICAgICAgICI8c3BhbiBvbm1v
dXNlb3Zlcj0ndGhpcy50ZXh0Q29udGVudD1cIlBXTjNEIVwiJz5JcyA8aT5hbnlvbmU8L2k+IHJl
YWRpbmcgdGhpcz88L3NwYW4+IgorICogICB9LAorICogICB7ICJuYW1lIjogIkJvYiIsCisgKiAg
ICAgImh0bWxDb21tZW50IjogIjxpPlllcyE8L2k+ICBBbSBJIHRoZSBvbmx5IG90aGVyIG9uZT8i
CisgKiAgIH0KKyAqIF0KKyAqIDwvZmlsZT4KKyAqCisgKiA8ZmlsZSBuYW1lPSJwcm90cmFjdG9y
LmpzIiB0eXBlPSJwcm90cmFjdG9yIj4KKyAqICAgZGVzY3JpYmUoJ1NDRSBkb2MgZGVtbycsIGZ1
bmN0aW9uKCkgeworICogICAgIGl0KCdzaG91bGQgc2FuaXRpemUgdW50cnVzdGVkIHZhbHVlcycs
IGZ1bmN0aW9uKCkgeworICogICAgICAgZXhwZWN0KGVsZW1lbnQuYWxsKGJ5LmNzcygnLmh0bWxD
b21tZW50JykpLmZpcnN0KCkuZ2V0SW5uZXJIdG1sKCkpCisgKiAgICAgICAgICAgLnRvQmUoJzxz
cGFuPklzIDxpPmFueW9uZTwvaT4gcmVhZGluZyB0aGlzPzwvc3Bhbj4nKTsKKyAqICAgICB9KTsK
KyAqCisgKiAgICAgaXQoJ3Nob3VsZCBOT1Qgc2FuaXRpemUgZXhwbGljaXRseSB0cnVzdGVkIHZh
bHVlcycsIGZ1bmN0aW9uKCkgeworICogICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ2V4cGxp
Y2l0bHlUcnVzdGVkSHRtbCcpKS5nZXRJbm5lckh0bWwoKSkudG9CZSgKKyAqICAgICAgICAgICAn
PHNwYW4gb25tb3VzZW92ZXI9InRoaXMudGV4dENvbnRlbnQ9JnF1b3Q7RXhwbGljaXRseSB0cnVz
dGVkIEhUTUwgYnlwYXNzZXMgJyArCisgKiAgICAgICAgICAgJ3Nhbml0aXphdGlvbi4mcXVvdDsi
PkhvdmVyIG92ZXIgdGhpcyB0ZXh0Ljwvc3Bhbj4nKTsKKyAqICAgICB9KTsKKyAqICAgfSk7Cisg
KiA8L2ZpbGU+CisgKiA8L2V4YW1wbGU+CisgKgorICoKKyAqCisgKiAjIyBDYW4gSSBkaXNhYmxl
IFNDRSBjb21wbGV0ZWx5PworICoKKyAqIFllcywgeW91IGNhbi4gIEhvd2V2ZXIsIHRoaXMgaXMg
c3Ryb25nbHkgZGlzY291cmFnZWQuICBTQ0UgZ2l2ZXMgeW91IGEgbG90IG9mIHNlY3VyaXR5IGJl
bmVmaXRzCisgKiBmb3IgbGl0dGxlIGNvZGluZyBvdmVyaGVhZC4gIEl0IHdpbGwgYmUgbXVjaCBo
YXJkZXIgdG8gdGFrZSBhbiBTQ0UgZGlzYWJsZWQgYXBwbGljYXRpb24gYW5kCisgKiBlaXRoZXIg
c2VjdXJlIGl0IG9uIHlvdXIgb3duIG9yIGVuYWJsZSBTQ0UgYXQgYSBsYXRlciBzdGFnZS4gIEl0
IG1pZ2h0IG1ha2Ugc2Vuc2UgdG8gZGlzYWJsZSBTQ0UKKyAqIGZvciBjYXNlcyB3aGVyZSB5b3Ug
aGF2ZSBhIGxvdCBvZiBleGlzdGluZyBjb2RlIHRoYXQgd2FzIHdyaXR0ZW4gYmVmb3JlIFNDRSB3
YXMgaW50cm9kdWNlZCBhbmQKKyAqIHlvdSdyZSBtaWdyYXRpbmcgdGhlbSBhIG1vZHVsZSBhdCBh
IHRpbWUuCisgKgorICogVGhhdCBzYWlkLCBoZXJlJ3MgaG93IHlvdSBjYW4gY29tcGxldGVseSBk
aXNhYmxlIFNDRToKKyAqCisgKiBgYGAKKyAqIGFuZ3VsYXIubW9kdWxlKCdteUFwcFdpdGhTY2VE
aXNhYmxlZG15QXBwJywgW10pLmNvbmZpZyhmdW5jdGlvbigkc2NlUHJvdmlkZXIpIHsKKyAqICAg
Ly8gQ29tcGxldGVseSBkaXNhYmxlIFNDRS4gIEZvciBkZW1vbnN0cmF0aW9uIHB1cnBvc2VzIG9u
bHkhCisgKiAgIC8vIERvIG5vdCB1c2UgaW4gbmV3IHByb2plY3RzLgorICogICAkc2NlUHJvdmlk
ZXIuZW5hYmxlZChmYWxzZSk7CisgKiB9KTsKKyAqIGBgYAorICoKKyAqLworLyoganNoaW50IG1h
eGxlbjogMTAwICovCisKK2Z1bmN0aW9uICRTY2VQcm92aWRlcigpIHsKKyAgdmFyIGVuYWJsZWQg
PSB0cnVlOworCisgIC8qKgorICAgKiBAbmdkb2MgbWV0aG9kCisgICAqIEBuYW1lICRzY2VQcm92
aWRlciNlbmFibGVkCisgICAqIEBraW5kIGZ1bmN0aW9uCisgICAqCisgICAqIEBwYXJhbSB7Ym9v
bGVhbj19IHZhbHVlIElmIHByb3ZpZGVkLCB0aGVuIGVuYWJsZXMvZGlzYWJsZXMgU0NFLgorICAg
KiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIFNDRSBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndp
c2UuCisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBFbmFibGVzL2Rpc2FibGVzIFNDRSBh
bmQgcmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZS4KKyAgICovCisgIHRoaXMuZW5hYmxlZCA9IGZ1
bmN0aW9uKHZhbHVlKSB7CisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHsKKyAgICAgIGVuYWJs
ZWQgPSAhIXZhbHVlOworICAgIH0KKyAgICByZXR1cm4gZW5hYmxlZDsKKyAgfTsKKworCisgIC8q
IERlc2lnbiBub3RlcyBvbiB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IgU0NFLgorICAg
KgorICAgKiBUaGUgQVBJIGNvbnRyYWN0IGZvciB0aGUgU0NFIGRlbGVnYXRlCisgICAqIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICogVGhlIFNDRSBkZWxlZ2F0ZSBv
YmplY3QgbXVzdCBwcm92aWRlIHRoZSBmb2xsb3dpbmcgMyBtZXRob2RzOgorICAgKgorICAgKiAt
IHRydXN0QXMoY29udGV4dEVudW0sIHZhbHVlKQorICAgKiAgICAgVGhpcyBtZXRob2QgaXMgdXNl
ZCB0byB0ZWxsIHRoZSBTQ0Ugc2VydmljZSB0aGF0IHRoZSBwcm92aWRlZCB2YWx1ZSBpcyBPSyB0
byB1c2UgaW4gdGhlCisgICAqICAgICBjb250ZXh0cyBzcGVjaWZpZWQgYnkgY29udGV4dEVudW0u
ICBJdCBtdXN0IHJldHVybiBhbiBvYmplY3QgdGhhdCB3aWxsIGJlIGFjY2VwdGVkIGJ5CisgICAq
ICAgICBnZXRUcnVzdGVkKCkgZm9yIGEgY29tcGF0aWJsZSBjb250ZXh0RW51bSBhbmQgcmV0dXJu
IHRoaXMgdmFsdWUuCisgICAqCisgICAqIC0gdmFsdWVPZih2YWx1ZSkKKyAgICogICAgIEZvciB2
YWx1ZXMgdGhhdCB3ZXJlIG5vdCBwcm9kdWNlZCBieSB0cnVzdEFzKCksIHJldHVybiB0aGVtIGFz
IGlzLiAgRm9yIHZhbHVlcyB0aGF0IHdlcmUKKyAgICogICAgIHByb2R1Y2VkIGJ5IHRydXN0QXMo
KSwgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIGlucHV0IHZhbHVlIHRvIHRydXN0QXMuICBCYXNp
Y2FsbHksIGlmCisgICAqICAgICB0cnVzdEFzIGlzIHdyYXBwaW5nIHRoZSBnaXZlbiB2YWx1ZXMg
aW50byBzb21lIHR5cGUsIHRoaXMgb3BlcmF0aW9uIHVud3JhcHMgaXQgd2hlbiBnaXZlbgorICAg
KiAgICAgc3VjaCBhIHZhbHVlLgorICAgKgorICAgKiAtIGdldFRydXN0ZWQoY29udGV4dEVudW0s
IHZhbHVlKQorICAgKiAgICAgVGhpcyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIHRoZSBhIHZhbHVl
IHRoYXQgaXMgc2FmZSB0byB1c2UgaW4gdGhlIGNvbnRleHQgc3BlY2lmaWVkIGJ5CisgICAqICAg
ICBjb250ZXh0RW51bSBvciB0aHJvdyBhbmQgZXhjZXB0aW9uIG90aGVyd2lzZS4KKyAgICoKKyAg
ICogTk9URTogVGhpcyBjb250cmFjdCBkZWxpYmVyYXRlbHkgZG9lcyBOT1Qgc3RhdGUgdGhhdCB2
YWx1ZXMgcmV0dXJuZWQgYnkgdHJ1c3RBcygpIG11c3QgYmUKKyAgICogb3BhcXVlIG9yIHdyYXBw
ZWQgaW4gc29tZSBob2xkZXIgb2JqZWN0LiAgVGhhdCBoYXBwZW5zIHRvIGJlIGFuIGltcGxlbWVu
dGF0aW9uIGRldGFpbC4gIEZvcgorICAgKiBpbnN0YW5jZSwgYW4gaW1wbGVtZW50YXRpb24gY291
bGQgbWFpbnRhaW4gYSByZWdpc3RyeSBvZiBhbGwgdHJ1c3RlZCBvYmplY3RzIGJ5IGNvbnRleHQu
ICBJbgorICAgKiBzdWNoIGEgY2FzZSwgdHJ1c3RBcygpIHdvdWxkIHJldHVybiB0aGUgc2FtZSBv
YmplY3QgdGhhdCB3YXMgcGFzc2VkIGluLiAgZ2V0VHJ1c3RlZCgpIHdvdWxkCisgICAqIHJldHVy
biB0aGUgc2FtZSBvYmplY3QgcGFzc2VkIGluIGlmIGl0IHdhcyBmb3VuZCBpbiB0aGUgcmVnaXN0
cnkgdW5kZXIgYSBjb21wYXRpYmxlIGNvbnRleHQgb3IKKyAgICogdGhyb3cgYW4gZXhjZXB0aW9u
IG90aGVyd2lzZS4gIEFuIGltcGxlbWVudGF0aW9uIG1pZ2h0IG9ubHkgd3JhcCB2YWx1ZXMgc29t
ZSBvZiB0aGUgdGltZSBiYXNlZAorICAgKiBvbiBzb21lIGNyaXRlcmlhLiAgZ2V0VHJ1c3RlZCgp
IG1pZ2h0IHJldHVybiBhIHZhbHVlIGFuZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciBzcGVj
aWFsCisgICAqIGNvbnN0YW50cyBvciBvYmplY3RzIGV2ZW4gaWYgbm90IHdyYXBwZWQuICBBbGwg
c3VjaCBpbXBsZW1lbnRhdGlvbnMgZnVsZmlsbCB0aGlzIGNvbnRyYWN0LgorICAgKgorICAgKgor
ICAgKiBBIG5vdGUgb24gdGhlIGluaGVyaXRhbmNlIG1vZGVsIGZvciBTQ0UgY29udGV4dHMKKyAg
ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAq
IEkndmUgdXNlZCBpbmhlcml0YW5jZSBhbmQgbWFkZSBSRVNPVVJDRV9VUkwgd3JhcHBlZCB0eXBl
cyBhIHN1YnR5cGUgb2YgVVJMIHdyYXBwZWQgdHlwZXMuICBUaGlzCisgICAqIGlzIHB1cmVseSBh
biBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgorICAgKgorICAgKiBUaGUgY29udHJhY3QgaXMgc2lt
cGx5IHRoaXM6CisgICAqCisgICAqICAgICBnZXRUcnVzdGVkKCRzY2UuUkVTT1VSQ0VfVVJMLCB2
YWx1ZSkgc3VjY2VlZGluZyBpbXBsaWVzIHRoYXQgZ2V0VHJ1c3RlZCgkc2NlLlVSTCwgdmFsdWUp
CisgICAqICAgICB3aWxsIGFsc28gc3VjY2VlZC4KKyAgICoKKyAgICogSW5oZXJpdGFuY2UgaGFw
cGVucyB0byBjYXB0dXJlIHRoaXMgaW4gYSBuYXR1cmFsIHdheS4gIEluIHNvbWUgZnV0dXJlLCB3
ZQorICAgKiBtYXkgbm90IHVzZSBpbmhlcml0YW5jZSBhbnltb3JlLiAgVGhhdCBpcyBPSyBiZWNh
dXNlIG5vIGNvZGUgb3V0c2lkZSBvZgorICAgKiBzY2UuanMgYW5kIHNjZVNwZWNzLmpzIHdvdWxk
IG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhpcyBkZXRhaWwuCisgICAqLworCisgIHRoaXMuJGdldCA9
IFsnJHBhcnNlJywgJyRzY2VEZWxlZ2F0ZScsIGZ1bmN0aW9uKAorICAgICAgICAgICAgICAgICRw
YXJzZSwgICAkc2NlRGVsZWdhdGUpIHsKKyAgICAvLyBQcmVyZXE6IEVuc3VyZSB0aGF0IHdlJ3Jl
IG5vdCBydW5uaW5nIGluIElFPDExIHF1aXJrcyBtb2RlLiAgSW4gdGhhdCBtb2RlLCBJRSA8IDEx
IGFsbG93CisgICAgLy8gdGhlICJleHByZXNzaW9uKGphdmFzY3JpcHQgZXhwcmVzc2lvbikiIHN5
bnRheCB3aGljaCBpcyBpbnNlY3VyZS4KKyAgICBpZiAoZW5hYmxlZCAmJiBtc2llIDwgOCkgewor
ICAgICAgdGhyb3cgJHNjZU1pbkVycignaWVxdWlya3MnLAorICAgICAgICAnU3RyaWN0IENvbnRl
eHR1YWwgRXNjYXBpbmcgZG9lcyBub3Qgc3VwcG9ydCBJbnRlcm5ldCBFeHBsb3JlciB2ZXJzaW9u
IDwgMTEgaW4gcXVpcmtzICcgKworICAgICAgICAnbW9kZS4gIFlvdSBjYW4gZml4IHRoaXMgYnkg
YWRkaW5nIHRoZSB0ZXh0IDwhZG9jdHlwZSBodG1sPiB0byB0aGUgdG9wIG9mIHlvdXIgSFRNTCAn
ICsKKyAgICAgICAgJ2RvY3VtZW50LiAgU2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBp
L25nLiRzY2UgZm9yIG1vcmUgaW5mb3JtYXRpb24uJyk7CisgICAgfQorCisgICAgdmFyIHNjZSA9
IHNoYWxsb3dDb3B5KFNDRV9DT05URVhUUyk7CisKKyAgICAvKioKKyAgICAgKiBAbmdkb2MgbWV0
aG9kCisgICAgICogQG5hbWUgJHNjZSNpc0VuYWJsZWQKKyAgICAgKiBAa2luZCBmdW5jdGlvbgor
ICAgICAqCisgICAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiBTQ0UgaXMgZW5hYmxlZCwg
ZmFsc2Ugb3RoZXJ3aXNlLiAgSWYgeW91IHdhbnQgdG8gc2V0IHRoZSB2YWx1ZSwgeW91CisgICAg
ICogaGF2ZSB0byBkbyBpdCBhdCBtb2R1bGUgY29uZmlnIHRpbWUgb24ge0BsaW5rIG5nLiRzY2VQ
cm92aWRlciAkc2NlUHJvdmlkZXJ9LgorICAgICAqCisgICAgICogQGRlc2NyaXB0aW9uCisgICAg
ICogUmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBTQ0UgaXMgZW5hYmxlZC4KKyAgICAg
Ki8KKyAgICBzY2UuaXNFbmFibGVkID0gZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gZW5hYmxl
ZDsKKyAgICB9OworICAgIHNjZS50cnVzdEFzID0gJHNjZURlbGVnYXRlLnRydXN0QXM7CisgICAg
c2NlLmdldFRydXN0ZWQgPSAkc2NlRGVsZWdhdGUuZ2V0VHJ1c3RlZDsKKyAgICBzY2UudmFsdWVP
ZiA9ICRzY2VEZWxlZ2F0ZS52YWx1ZU9mOworCisgICAgaWYgKCFlbmFibGVkKSB7CisgICAgICBz
Y2UudHJ1c3RBcyA9IHNjZS5nZXRUcnVzdGVkID0gZnVuY3Rpb24odHlwZSwgdmFsdWUpIHsgcmV0
dXJuIHZhbHVlOyB9OworICAgICAgc2NlLnZhbHVlT2YgPSBpZGVudGl0eTsKKyAgICB9CisKKyAg
ICAvKioKKyAgICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICogQG5hbWUgJHNjZSNwYXJzZUFzCisg
ICAgICoKKyAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgKiBDb252ZXJ0cyBBbmd1bGFyIHtAbGlu
ayBndWlkZS9leHByZXNzaW9uIGV4cHJlc3Npb259IGludG8gYSBmdW5jdGlvbi4gIFRoaXMgaXMg
bGlrZSB7QGxpbmsKKyAgICAgKiBuZy4kcGFyc2UgJHBhcnNlfSBhbmQgaXMgaWRlbnRpY2FsIHdo
ZW4gdGhlIGV4cHJlc3Npb24gaXMgYSBsaXRlcmFsIGNvbnN0YW50LiAgT3RoZXJ3aXNlLCBpdAor
ICAgICAqIHdyYXBzIHRoZSBleHByZXNzaW9uIGluIGEgY2FsbCB0byB7QGxpbmsgbmcuJHNjZSNn
ZXRUcnVzdGVkICRzY2UuZ2V0VHJ1c3RlZCgqdHlwZSosCisgICAgICogKnJlc3VsdCopfQorICAg
ICAqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGtpbmQgb2YgU0NFIGNvbnRleHQg
aW4gd2hpY2ggdGhpcyByZXN1bHQgd2lsbCBiZSB1c2VkLgorICAgICAqIEBwYXJhbSB7c3RyaW5n
fSBleHByZXNzaW9uIFN0cmluZyBleHByZXNzaW9uIHRvIGNvbXBpbGUuCisgICAgICogQHJldHVy
bnMge2Z1bmN0aW9uKGNvbnRleHQsIGxvY2Fscyl9IGEgZnVuY3Rpb24gd2hpY2ggcmVwcmVzZW50
cyB0aGUgY29tcGlsZWQgZXhwcmVzc2lvbjoKKyAgICAgKgorICAgICAqICAgICogYGNvbnRleHRg
IOKAkyBge29iamVjdH1gIOKAkyBhbiBvYmplY3QgYWdhaW5zdCB3aGljaCBhbnkgZXhwcmVzc2lv
bnMgZW1iZWRkZWQgaW4gdGhlIHN0cmluZ3MKKyAgICAgKiAgICAgIGFyZSBldmFsdWF0ZWQgYWdh
aW5zdCAodHlwaWNhbGx5IGEgc2NvcGUgb2JqZWN0KS4KKyAgICAgKiAgICAqIGBsb2NhbHNgIOKA
kyBge29iamVjdD19YCDigJMgbG9jYWwgdmFyaWFibGVzIGNvbnRleHQgb2JqZWN0LCB1c2VmdWwg
Zm9yIG92ZXJyaWRpbmcgdmFsdWVzIGluCisgICAgICogICAgICBgY29udGV4dGAuCisgICAgICov
CisgICAgc2NlLnBhcnNlQXMgPSBmdW5jdGlvbiBzY2VQYXJzZUFzKHR5cGUsIGV4cHIpIHsKKyAg
ICAgIHZhciBwYXJzZWQgPSAkcGFyc2UoZXhwcik7CisgICAgICBpZiAocGFyc2VkLmxpdGVyYWwg
JiYgcGFyc2VkLmNvbnN0YW50KSB7CisgICAgICAgIHJldHVybiBwYXJzZWQ7CisgICAgICB9IGVs
c2UgeworICAgICAgICByZXR1cm4gJHBhcnNlKGV4cHIsIGZ1bmN0aW9uKHZhbHVlKSB7CisgICAg
ICAgICAgcmV0dXJuIHNjZS5nZXRUcnVzdGVkKHR5cGUsIHZhbHVlKTsKKyAgICAgICAgfSk7Cisg
ICAgICB9CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgKiBA
bmFtZSAkc2NlI3RydXN0QXMKKyAgICAgKgorICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAqIERl
bGVnYXRlcyB0byB7QGxpbmsgbmcuJHNjZURlbGVnYXRlI3RydXN0QXMgYCRzY2VEZWxlZ2F0ZS50
cnVzdEFzYH0uICBBcyBzdWNoLAorICAgICAqIHJldHVybnMgYW4gb2JqZWN0IHRoYXQgaXMgdHJ1
c3RlZCBieSBhbmd1bGFyIGZvciB1c2UgaW4gc3BlY2lmaWVkIHN0cmljdCBjb250ZXh0dWFsCisg
ICAgICogZXNjYXBpbmcgY29udGV4dHMgKHN1Y2ggYXMgbmctYmluZC1odG1sLCBuZy1pbmNsdWRl
LCBhbnkgc3JjIGF0dHJpYnV0ZQorICAgICAqIGludGVycG9sYXRpb24sIGFueSBkb20gZXZlbnQg
YmluZGluZyBhdHRyaWJ1dGUgaW50ZXJwb2xhdGlvbiBzdWNoIGFzIGZvciBvbmNsaWNrLCAgZXRj
LikKKyAgICAgKiB0aGF0IHVzZXMgdGhlIHByb3ZpZGVkIHZhbHVlLiAgU2VlICoge0BsaW5rIG5n
LiRzY2UgJHNjZX0gZm9yIGVuYWJsaW5nIHN0cmljdCBjb250ZXh0dWFsCisgICAgICogZXNjYXBp
bmcuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUga2luZCBvZiBjb250
ZXh0IGluIHdoaWNoIHRoaXMgdmFsdWUgaXMgc2FmZSBmb3IgdXNlLiAgZS5nLiB1cmwsCisgICAg
ICogICByZXNvdXJjZVVybCwgaHRtbCwganMgYW5kIGNzcy4KKyAgICAgKiBAcGFyYW0geyp9IHZh
bHVlIFRoZSB2YWx1ZSB0aGF0IHRoYXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgdHJ1c3RlZC9zYWZl
LgorICAgICAqIEByZXR1cm5zIHsqfSBBIHZhbHVlIHRoYXQgY2FuIGJlIHVzZWQgdG8gc3RhbmQg
aW4gZm9yIHRoZSBwcm92aWRlZCBgdmFsdWVgIGluIHBsYWNlcworICAgICAqIHdoZXJlIEFuZ3Vs
YXIgZXhwZWN0cyBhICRzY2UudHJ1c3RBcygpIHJldHVybiB2YWx1ZS4KKyAgICAgKi8KKworICAg
IC8qKgorICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgKiBAbmFtZSAkc2NlI3RydXN0QXNIdG1s
CisgICAgICoKKyAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgKiBTaG9ydGhhbmQgbWV0aG9kLiAg
YCRzY2UudHJ1c3RBc0h0bWwodmFsdWUpYCDihpIKKyAgICAgKiAgICAge0BsaW5rIG5nLiRzY2VE
ZWxlZ2F0ZSN0cnVzdEFzIGAkc2NlRGVsZWdhdGUudHJ1c3RBcygkc2NlLkhUTUwsIHZhbHVlKWB9
CisgICAgICoKKyAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB0cnVzdEFzLgor
ICAgICAqIEByZXR1cm5zIHsqfSBBbiBvYmplY3QgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHtAbGlu
ayBuZy4kc2NlI2dldFRydXN0ZWRIdG1sCisgICAgICogICAgICRzY2UuZ2V0VHJ1c3RlZEh0bWwo
dmFsdWUpfSB0byBvYnRhaW4gdGhlIG9yaWdpbmFsIHZhbHVlLiAgKHByaXZpbGVnZWQgZGlyZWN0
aXZlcworICAgICAqICAgICBvbmx5IGFjY2VwdCBleHByZXNzaW9ucyB0aGF0IGFyZSBlaXRoZXIg
bGl0ZXJhbCBjb25zdGFudHMgb3IgYXJlIHRoZQorICAgICAqICAgICByZXR1cm4gdmFsdWUgb2Yg
e0BsaW5rIG5nLiRzY2UjdHJ1c3RBcyAkc2NlLnRydXN0QXN9LikKKyAgICAgKi8KKworICAgIC8q
KgorICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgKiBAbmFtZSAkc2NlI3RydXN0QXNVcmwKKyAg
ICAgKgorICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAqIFNob3J0aGFuZCBtZXRob2QuICBgJHNj
ZS50cnVzdEFzVXJsKHZhbHVlKWAg4oaSCisgICAgICogICAgIHtAbGluayBuZy4kc2NlRGVsZWdh
dGUjdHJ1c3RBcyBgJHNjZURlbGVnYXRlLnRydXN0QXMoJHNjZS5VUkwsIHZhbHVlKWB9CisgICAg
ICoKKyAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB0cnVzdEFzLgorICAgICAq
IEByZXR1cm5zIHsqfSBBbiBvYmplY3QgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHtAbGluayBuZy4k
c2NlI2dldFRydXN0ZWRVcmwKKyAgICAgKiAgICAgJHNjZS5nZXRUcnVzdGVkVXJsKHZhbHVlKX0g
dG8gb2J0YWluIHRoZSBvcmlnaW5hbCB2YWx1ZS4gIChwcml2aWxlZ2VkIGRpcmVjdGl2ZXMKKyAg
ICAgKiAgICAgb25seSBhY2NlcHQgZXhwcmVzc2lvbnMgdGhhdCBhcmUgZWl0aGVyIGxpdGVyYWwg
Y29uc3RhbnRzIG9yIGFyZSB0aGUKKyAgICAgKiAgICAgcmV0dXJuIHZhbHVlIG9mIHtAbGluayBu
Zy4kc2NlI3RydXN0QXMgJHNjZS50cnVzdEFzfS4pCisgICAgICovCisKKyAgICAvKioKKyAgICAg
KiBAbmdkb2MgbWV0aG9kCisgICAgICogQG5hbWUgJHNjZSN0cnVzdEFzUmVzb3VyY2VVcmwKKyAg
ICAgKgorICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAqIFNob3J0aGFuZCBtZXRob2QuICBgJHNj
ZS50cnVzdEFzUmVzb3VyY2VVcmwodmFsdWUpYCDihpIKKyAgICAgKiAgICAge0BsaW5rIG5nLiRz
Y2VEZWxlZ2F0ZSN0cnVzdEFzIGAkc2NlRGVsZWdhdGUudHJ1c3RBcygkc2NlLlJFU09VUkNFX1VS
TCwgdmFsdWUpYH0KKyAgICAgKgorICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRv
IHRydXN0QXMuCisgICAgICogQHJldHVybnMgeyp9IEFuIG9iamVjdCB0aGF0IGNhbiBiZSBwYXNz
ZWQgdG8ge0BsaW5rIG5nLiRzY2UjZ2V0VHJ1c3RlZFJlc291cmNlVXJsCisgICAgICogICAgICRz
Y2UuZ2V0VHJ1c3RlZFJlc291cmNlVXJsKHZhbHVlKX0gdG8gb2J0YWluIHRoZSBvcmlnaW5hbCB2
YWx1ZS4gIChwcml2aWxlZ2VkIGRpcmVjdGl2ZXMKKyAgICAgKiAgICAgb25seSBhY2NlcHQgZXhw
cmVzc2lvbnMgdGhhdCBhcmUgZWl0aGVyIGxpdGVyYWwgY29uc3RhbnRzIG9yIGFyZSB0aGUgcmV0
dXJuCisgICAgICogICAgIHZhbHVlIG9mIHtAbGluayBuZy4kc2NlI3RydXN0QXMgJHNjZS50cnVz
dEFzfS4pCisgICAgICovCisKKyAgICAvKioKKyAgICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICog
QG5hbWUgJHNjZSN0cnVzdEFzSnMKKyAgICAgKgorICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAq
IFNob3J0aGFuZCBtZXRob2QuICBgJHNjZS50cnVzdEFzSnModmFsdWUpYCDihpIKKyAgICAgKiAg
ICAge0BsaW5rIG5nLiRzY2VEZWxlZ2F0ZSN0cnVzdEFzIGAkc2NlRGVsZWdhdGUudHJ1c3RBcygk
c2NlLkpTLCB2YWx1ZSlgfQorICAgICAqCisgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFs
dWUgdG8gdHJ1c3RBcy4KKyAgICAgKiBAcmV0dXJucyB7Kn0gQW4gb2JqZWN0IHRoYXQgY2FuIGJl
IHBhc3NlZCB0byB7QGxpbmsgbmcuJHNjZSNnZXRUcnVzdGVkSnMKKyAgICAgKiAgICAgJHNjZS5n
ZXRUcnVzdGVkSnModmFsdWUpfSB0byBvYnRhaW4gdGhlIG9yaWdpbmFsIHZhbHVlLiAgKHByaXZp
bGVnZWQgZGlyZWN0aXZlcworICAgICAqICAgICBvbmx5IGFjY2VwdCBleHByZXNzaW9ucyB0aGF0
IGFyZSBlaXRoZXIgbGl0ZXJhbCBjb25zdGFudHMgb3IgYXJlIHRoZQorICAgICAqICAgICByZXR1
cm4gdmFsdWUgb2Yge0BsaW5rIG5nLiRzY2UjdHJ1c3RBcyAkc2NlLnRydXN0QXN9LikKKyAgICAg
Ki8KKworICAgIC8qKgorICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgKiBAbmFtZSAkc2NlI2dl
dFRydXN0ZWQKKyAgICAgKgorICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAqIERlbGVnYXRlcyB0
byB7QGxpbmsgbmcuJHNjZURlbGVnYXRlI2dldFRydXN0ZWQgYCRzY2VEZWxlZ2F0ZS5nZXRUcnVz
dGVkYH0uICBBcyBzdWNoLAorICAgICAqIHRha2VzIHRoZSByZXN1bHQgb2YgYSB7QGxpbmsgbmcu
JHNjZSN0cnVzdEFzIGAkc2NlLnRydXN0QXNgfSgpIGNhbGwgYW5kIHJldHVybnMgdGhlCisgICAg
ICogb3JpZ2luYWxseSBzdXBwbGllZCB2YWx1ZSBpZiB0aGUgcXVlcmllZCBjb250ZXh0IHR5cGUg
aXMgYSBzdXBlcnR5cGUgb2YgdGhlIGNyZWF0ZWQgdHlwZS4KKyAgICAgKiBJZiB0aGlzIGNvbmRp
dGlvbiBpc24ndCBzYXRpc2ZpZWQsIHRocm93cyBhbiBleGNlcHRpb24uCisgICAgICoKKyAgICAg
KiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUga2luZCBvZiBjb250ZXh0IGluIHdoaWNoIHRoaXMg
dmFsdWUgaXMgdG8gYmUgdXNlZC4KKyAgICAgKiBAcGFyYW0geyp9IG1heWJlVHJ1c3RlZCBUaGUg
cmVzdWx0IG9mIGEgcHJpb3Ige0BsaW5rIG5nLiRzY2UjdHJ1c3RBcyBgJHNjZS50cnVzdEFzYH0K
KyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsLgorICAgICAqIEByZXR1cm5zIHsq
fSBUaGUgdmFsdWUgdGhlIHdhcyBvcmlnaW5hbGx5IHByb3ZpZGVkIHRvCisgICAgICogICAgICAg
ICAgICAgIHtAbGluayBuZy4kc2NlI3RydXN0QXMgYCRzY2UudHJ1c3RBc2B9IGlmIHZhbGlkIGlu
IHRoaXMgY29udGV4dC4KKyAgICAgKiAgICAgICAgICAgICAgT3RoZXJ3aXNlLCB0aHJvd3MgYW4g
ZXhjZXB0aW9uLgorICAgICAqLworCisgICAgLyoqCisgICAgICogQG5nZG9jIG1ldGhvZAorICAg
ICAqIEBuYW1lICRzY2UjZ2V0VHJ1c3RlZEh0bWwKKyAgICAgKgorICAgICAqIEBkZXNjcmlwdGlv
bgorICAgICAqIFNob3J0aGFuZCBtZXRob2QuICBgJHNjZS5nZXRUcnVzdGVkSHRtbCh2YWx1ZSlg
IOKGkgorICAgICAqICAgICB7QGxpbmsgbmcuJHNjZURlbGVnYXRlI2dldFRydXN0ZWQgYCRzY2VE
ZWxlZ2F0ZS5nZXRUcnVzdGVkKCRzY2UuSFRNTCwgdmFsdWUpYH0KKyAgICAgKgorICAgICAqIEBw
YXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHBhc3MgdG8gYCRzY2UuZ2V0VHJ1c3RlZGAuCisg
ICAgICogQHJldHVybnMgeyp9IFRoZSByZXR1cm4gdmFsdWUgb2YgYCRzY2UuZ2V0VHJ1c3RlZCgk
c2NlLkhUTUwsIHZhbHVlKWAKKyAgICAgKi8KKworICAgIC8qKgorICAgICAqIEBuZ2RvYyBtZXRo
b2QKKyAgICAgKiBAbmFtZSAkc2NlI2dldFRydXN0ZWRDc3MKKyAgICAgKgorICAgICAqIEBkZXNj
cmlwdGlvbgorICAgICAqIFNob3J0aGFuZCBtZXRob2QuICBgJHNjZS5nZXRUcnVzdGVkQ3NzKHZh
bHVlKWAg4oaSCisgICAgICogICAgIHtAbGluayBuZy4kc2NlRGVsZWdhdGUjZ2V0VHJ1c3RlZCBg
JHNjZURlbGVnYXRlLmdldFRydXN0ZWQoJHNjZS5DU1MsIHZhbHVlKWB9CisgICAgICoKKyAgICAg
KiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwYXNzIHRvIGAkc2NlLmdldFRydXN0ZWRg
LgorICAgICAqIEByZXR1cm5zIHsqfSBUaGUgcmV0dXJuIHZhbHVlIG9mIGAkc2NlLmdldFRydXN0
ZWQoJHNjZS5DU1MsIHZhbHVlKWAKKyAgICAgKi8KKworICAgIC8qKgorICAgICAqIEBuZ2RvYyBt
ZXRob2QKKyAgICAgKiBAbmFtZSAkc2NlI2dldFRydXN0ZWRVcmwKKyAgICAgKgorICAgICAqIEBk
ZXNjcmlwdGlvbgorICAgICAqIFNob3J0aGFuZCBtZXRob2QuICBgJHNjZS5nZXRUcnVzdGVkVXJs
KHZhbHVlKWAg4oaSCisgICAgICogICAgIHtAbGluayBuZy4kc2NlRGVsZWdhdGUjZ2V0VHJ1c3Rl
ZCBgJHNjZURlbGVnYXRlLmdldFRydXN0ZWQoJHNjZS5VUkwsIHZhbHVlKWB9CisgICAgICoKKyAg
ICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwYXNzIHRvIGAkc2NlLmdldFRydXN0
ZWRgLgorICAgICAqIEByZXR1cm5zIHsqfSBUaGUgcmV0dXJuIHZhbHVlIG9mIGAkc2NlLmdldFRy
dXN0ZWQoJHNjZS5VUkwsIHZhbHVlKWAKKyAgICAgKi8KKworICAgIC8qKgorICAgICAqIEBuZ2Rv
YyBtZXRob2QKKyAgICAgKiBAbmFtZSAkc2NlI2dldFRydXN0ZWRSZXNvdXJjZVVybAorICAgICAq
CisgICAgICogQGRlc2NyaXB0aW9uCisgICAgICogU2hvcnRoYW5kIG1ldGhvZC4gIGAkc2NlLmdl
dFRydXN0ZWRSZXNvdXJjZVVybCh2YWx1ZSlgIOKGkgorICAgICAqICAgICB7QGxpbmsgbmcuJHNj
ZURlbGVnYXRlI2dldFRydXN0ZWQgYCRzY2VEZWxlZ2F0ZS5nZXRUcnVzdGVkKCRzY2UuUkVTT1VS
Q0VfVVJMLCB2YWx1ZSlgfQorICAgICAqCisgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFs
dWUgdG8gcGFzcyB0byBgJHNjZURlbGVnYXRlLmdldFRydXN0ZWRgLgorICAgICAqIEByZXR1cm5z
IHsqfSBUaGUgcmV0dXJuIHZhbHVlIG9mIGAkc2NlLmdldFRydXN0ZWQoJHNjZS5SRVNPVVJDRV9V
UkwsIHZhbHVlKWAKKyAgICAgKi8KKworICAgIC8qKgorICAgICAqIEBuZ2RvYyBtZXRob2QKKyAg
ICAgKiBAbmFtZSAkc2NlI2dldFRydXN0ZWRKcworICAgICAqCisgICAgICogQGRlc2NyaXB0aW9u
CisgICAgICogU2hvcnRoYW5kIG1ldGhvZC4gIGAkc2NlLmdldFRydXN0ZWRKcyh2YWx1ZSlgIOKG
kgorICAgICAqICAgICB7QGxpbmsgbmcuJHNjZURlbGVnYXRlI2dldFRydXN0ZWQgYCRzY2VEZWxl
Z2F0ZS5nZXRUcnVzdGVkKCRzY2UuSlMsIHZhbHVlKWB9CisgICAgICoKKyAgICAgKiBAcGFyYW0g
eyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwYXNzIHRvIGAkc2NlLmdldFRydXN0ZWRgLgorICAgICAq
IEByZXR1cm5zIHsqfSBUaGUgcmV0dXJuIHZhbHVlIG9mIGAkc2NlLmdldFRydXN0ZWQoJHNjZS5K
UywgdmFsdWUpYAorICAgICAqLworCisgICAgLyoqCisgICAgICogQG5nZG9jIG1ldGhvZAorICAg
ICAqIEBuYW1lICRzY2UjcGFyc2VBc0h0bWwKKyAgICAgKgorICAgICAqIEBkZXNjcmlwdGlvbgor
ICAgICAqIFNob3J0aGFuZCBtZXRob2QuICBgJHNjZS5wYXJzZUFzSHRtbChleHByZXNzaW9uIHN0
cmluZylgIOKGkgorICAgICAqICAgICB7QGxpbmsgbmcuJHNjZSNwYXJzZUFzIGAkc2NlLnBhcnNl
QXMoJHNjZS5IVE1MLCB2YWx1ZSlgfQorICAgICAqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IGV4
cHJlc3Npb24gU3RyaW5nIGV4cHJlc3Npb24gdG8gY29tcGlsZS4KKyAgICAgKiBAcmV0dXJucyB7
ZnVuY3Rpb24oY29udGV4dCwgbG9jYWxzKX0gYSBmdW5jdGlvbiB3aGljaCByZXByZXNlbnRzIHRo
ZSBjb21waWxlZCBleHByZXNzaW9uOgorICAgICAqCisgICAgICogICAgKiBgY29udGV4dGAg4oCT
IGB7b2JqZWN0fWAg4oCTIGFuIG9iamVjdCBhZ2FpbnN0IHdoaWNoIGFueSBleHByZXNzaW9ucyBl
bWJlZGRlZCBpbiB0aGUgc3RyaW5ncworICAgICAqICAgICAgYXJlIGV2YWx1YXRlZCBhZ2FpbnN0
ICh0eXBpY2FsbHkgYSBzY29wZSBvYmplY3QpLgorICAgICAqICAgICogYGxvY2Fsc2Ag4oCTIGB7
b2JqZWN0PX1gIOKAkyBsb2NhbCB2YXJpYWJsZXMgY29udGV4dCBvYmplY3QsIHVzZWZ1bCBmb3Ig
b3ZlcnJpZGluZyB2YWx1ZXMgaW4KKyAgICAgKiAgICAgIGBjb250ZXh0YC4KKyAgICAgKi8KKwor
ICAgIC8qKgorICAgICAqIEBuZ2RvYyBtZXRob2QKKyAgICAgKiBAbmFtZSAkc2NlI3BhcnNlQXND
c3MKKyAgICAgKgorICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAqIFNob3J0aGFuZCBtZXRob2Qu
ICBgJHNjZS5wYXJzZUFzQ3NzKHZhbHVlKWAg4oaSCisgICAgICogICAgIHtAbGluayBuZy4kc2Nl
I3BhcnNlQXMgYCRzY2UucGFyc2VBcygkc2NlLkNTUywgdmFsdWUpYH0KKyAgICAgKgorICAgICAq
IEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIFN0cmluZyBleHByZXNzaW9uIHRvIGNvbXBpbGUu
CisgICAgICogQHJldHVybnMge2Z1bmN0aW9uKGNvbnRleHQsIGxvY2Fscyl9IGEgZnVuY3Rpb24g
d2hpY2ggcmVwcmVzZW50cyB0aGUgY29tcGlsZWQgZXhwcmVzc2lvbjoKKyAgICAgKgorICAgICAq
ICAgICogYGNvbnRleHRgIOKAkyBge29iamVjdH1gIOKAkyBhbiBvYmplY3QgYWdhaW5zdCB3aGlj
aCBhbnkgZXhwcmVzc2lvbnMgZW1iZWRkZWQgaW4gdGhlIHN0cmluZ3MKKyAgICAgKiAgICAgIGFy
ZSBldmFsdWF0ZWQgYWdhaW5zdCAodHlwaWNhbGx5IGEgc2NvcGUgb2JqZWN0KS4KKyAgICAgKiAg
ICAqIGBsb2NhbHNgIOKAkyBge29iamVjdD19YCDigJMgbG9jYWwgdmFyaWFibGVzIGNvbnRleHQg
b2JqZWN0LCB1c2VmdWwgZm9yIG92ZXJyaWRpbmcgdmFsdWVzIGluCisgICAgICogICAgICBgY29u
dGV4dGAuCisgICAgICovCisKKyAgICAvKioKKyAgICAgKiBAbmdkb2MgbWV0aG9kCisgICAgICog
QG5hbWUgJHNjZSNwYXJzZUFzVXJsCisgICAgICoKKyAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAg
KiBTaG9ydGhhbmQgbWV0aG9kLiAgYCRzY2UucGFyc2VBc1VybCh2YWx1ZSlgIOKGkgorICAgICAq
ICAgICB7QGxpbmsgbmcuJHNjZSNwYXJzZUFzIGAkc2NlLnBhcnNlQXMoJHNjZS5VUkwsIHZhbHVl
KWB9CisgICAgICoKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXhwcmVzc2lvbiBTdHJpbmcgZXhw
cmVzc2lvbiB0byBjb21waWxlLgorICAgICAqIEByZXR1cm5zIHtmdW5jdGlvbihjb250ZXh0LCBs
b2NhbHMpfSBhIGZ1bmN0aW9uIHdoaWNoIHJlcHJlc2VudHMgdGhlIGNvbXBpbGVkIGV4cHJlc3Np
b246CisgICAgICoKKyAgICAgKiAgICAqIGBjb250ZXh0YCDigJMgYHtvYmplY3R9YCDigJMgYW4g
b2JqZWN0IGFnYWluc3Qgd2hpY2ggYW55IGV4cHJlc3Npb25zIGVtYmVkZGVkIGluIHRoZSBzdHJp
bmdzCisgICAgICogICAgICBhcmUgZXZhbHVhdGVkIGFnYWluc3QgKHR5cGljYWxseSBhIHNjb3Bl
IG9iamVjdCkuCisgICAgICogICAgKiBgbG9jYWxzYCDigJMgYHtvYmplY3Q9fWAg4oCTIGxvY2Fs
IHZhcmlhYmxlcyBjb250ZXh0IG9iamVjdCwgdXNlZnVsIGZvciBvdmVycmlkaW5nIHZhbHVlcyBp
bgorICAgICAqICAgICAgYGNvbnRleHRgLgorICAgICAqLworCisgICAgLyoqCisgICAgICogQG5n
ZG9jIG1ldGhvZAorICAgICAqIEBuYW1lICRzY2UjcGFyc2VBc1Jlc291cmNlVXJsCisgICAgICoK
KyAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgKiBTaG9ydGhhbmQgbWV0aG9kLiAgYCRzY2UucGFy
c2VBc1Jlc291cmNlVXJsKHZhbHVlKWAg4oaSCisgICAgICogICAgIHtAbGluayBuZy4kc2NlI3Bh
cnNlQXMgYCRzY2UucGFyc2VBcygkc2NlLlJFU09VUkNFX1VSTCwgdmFsdWUpYH0KKyAgICAgKgor
ICAgICAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIFN0cmluZyBleHByZXNzaW9uIHRvIGNv
bXBpbGUuCisgICAgICogQHJldHVybnMge2Z1bmN0aW9uKGNvbnRleHQsIGxvY2Fscyl9IGEgZnVu
Y3Rpb24gd2hpY2ggcmVwcmVzZW50cyB0aGUgY29tcGlsZWQgZXhwcmVzc2lvbjoKKyAgICAgKgor
ICAgICAqICAgICogYGNvbnRleHRgIOKAkyBge29iamVjdH1gIOKAkyBhbiBvYmplY3QgYWdhaW5z
dCB3aGljaCBhbnkgZXhwcmVzc2lvbnMgZW1iZWRkZWQgaW4gdGhlIHN0cmluZ3MKKyAgICAgKiAg
ICAgIGFyZSBldmFsdWF0ZWQgYWdhaW5zdCAodHlwaWNhbGx5IGEgc2NvcGUgb2JqZWN0KS4KKyAg
ICAgKiAgICAqIGBsb2NhbHNgIOKAkyBge29iamVjdD19YCDigJMgbG9jYWwgdmFyaWFibGVzIGNv
bnRleHQgb2JqZWN0LCB1c2VmdWwgZm9yIG92ZXJyaWRpbmcgdmFsdWVzIGluCisgICAgICogICAg
ICBgY29udGV4dGAuCisgICAgICovCisKKyAgICAvKioKKyAgICAgKiBAbmdkb2MgbWV0aG9kCisg
ICAgICogQG5hbWUgJHNjZSNwYXJzZUFzSnMKKyAgICAgKgorICAgICAqIEBkZXNjcmlwdGlvbgor
ICAgICAqIFNob3J0aGFuZCBtZXRob2QuICBgJHNjZS5wYXJzZUFzSnModmFsdWUpYCDihpIKKyAg
ICAgKiAgICAge0BsaW5rIG5nLiRzY2UjcGFyc2VBcyBgJHNjZS5wYXJzZUFzKCRzY2UuSlMsIHZh
bHVlKWB9CisgICAgICoKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXhwcmVzc2lvbiBTdHJpbmcg
ZXhwcmVzc2lvbiB0byBjb21waWxlLgorICAgICAqIEByZXR1cm5zIHtmdW5jdGlvbihjb250ZXh0
LCBsb2NhbHMpfSBhIGZ1bmN0aW9uIHdoaWNoIHJlcHJlc2VudHMgdGhlIGNvbXBpbGVkIGV4cHJl
c3Npb246CisgICAgICoKKyAgICAgKiAgICAqIGBjb250ZXh0YCDigJMgYHtvYmplY3R9YCDigJMg
YW4gb2JqZWN0IGFnYWluc3Qgd2hpY2ggYW55IGV4cHJlc3Npb25zIGVtYmVkZGVkIGluIHRoZSBz
dHJpbmdzCisgICAgICogICAgICBhcmUgZXZhbHVhdGVkIGFnYWluc3QgKHR5cGljYWxseSBhIHNj
b3BlIG9iamVjdCkuCisgICAgICogICAgKiBgbG9jYWxzYCDigJMgYHtvYmplY3Q9fWAg4oCTIGxv
Y2FsIHZhcmlhYmxlcyBjb250ZXh0IG9iamVjdCwgdXNlZnVsIGZvciBvdmVycmlkaW5nIHZhbHVl
cyBpbgorICAgICAqICAgICAgYGNvbnRleHRgLgorICAgICAqLworCisgICAgLy8gU2hvcnRoYW5k
IGRlbGVnYXRpb25zLgorICAgIHZhciBwYXJzZSA9IHNjZS5wYXJzZUFzLAorICAgICAgICBnZXRU
cnVzdGVkID0gc2NlLmdldFRydXN0ZWQsCisgICAgICAgIHRydXN0QXMgPSBzY2UudHJ1c3RBczsK
KworICAgIGZvckVhY2goU0NFX0NPTlRFWFRTLCBmdW5jdGlvbihlbnVtVmFsdWUsIG5hbWUpIHsK
KyAgICAgIHZhciBsTmFtZSA9IGxvd2VyY2FzZShuYW1lKTsKKyAgICAgIHNjZVtjYW1lbENhc2Uo
InBhcnNlX2FzXyIgKyBsTmFtZSldID0gZnVuY3Rpb24oZXhwcikgeworICAgICAgICByZXR1cm4g
cGFyc2UoZW51bVZhbHVlLCBleHByKTsKKyAgICAgIH07CisgICAgICBzY2VbY2FtZWxDYXNlKCJn
ZXRfdHJ1c3RlZF8iICsgbE5hbWUpXSA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAgIHJldHVy
biBnZXRUcnVzdGVkKGVudW1WYWx1ZSwgdmFsdWUpOworICAgICAgfTsKKyAgICAgIHNjZVtjYW1l
bENhc2UoInRydXN0X2FzXyIgKyBsTmFtZSldID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAg
cmV0dXJuIHRydXN0QXMoZW51bVZhbHVlLCB2YWx1ZSk7CisgICAgICB9OworICAgIH0pOworCisg
ICAgcmV0dXJuIHNjZTsKKyAgfV07Cit9CisKKy8qKgorICogISEhIFRoaXMgaXMgYW4gdW5kb2N1
bWVudGVkICJwcml2YXRlIiBzZXJ2aWNlICEhIQorICoKKyAqIEBuYW1lICRzbmlmZmVyCisgKiBA
cmVxdWlyZXMgJHdpbmRvdworICogQHJlcXVpcmVzICRkb2N1bWVudAorICoKKyAqIEBwcm9wZXJ0
eSB7Ym9vbGVhbn0gaGlzdG9yeSBEb2VzIHRoZSBicm93c2VyIHN1cHBvcnQgaHRtbDUgaGlzdG9y
eSBhcGkgPworICogQHByb3BlcnR5IHtib29sZWFufSB0cmFuc2l0aW9ucyBEb2VzIHRoZSBicm93
c2VyIHN1cHBvcnQgQ1NTIHRyYW5zaXRpb24gZXZlbnRzID8KKyAqIEBwcm9wZXJ0eSB7Ym9vbGVh
bn0gYW5pbWF0aW9ucyBEb2VzIHRoZSBicm93c2VyIHN1cHBvcnQgQ1NTIGFuaW1hdGlvbiBldmVu
dHMgPworICoKKyAqIEBkZXNjcmlwdGlvbgorICogVGhpcyBpcyB2ZXJ5IHNpbXBsZSBpbXBsZW1l
bnRhdGlvbiBvZiB0ZXN0aW5nIGJyb3dzZXIncyBmZWF0dXJlcy4KKyAqLworZnVuY3Rpb24gJFNu
aWZmZXJQcm92aWRlcigpIHsKKyAgdGhpcy4kZ2V0ID0gWyckd2luZG93JywgJyRkb2N1bWVudCcs
IGZ1bmN0aW9uKCR3aW5kb3csICRkb2N1bWVudCkgeworICAgIHZhciBldmVudFN1cHBvcnQgPSB7
fSwKKyAgICAgICAgYW5kcm9pZCA9CisgICAgICAgICAgdG9JbnQoKC9hbmRyb2lkIChcZCspLy5l
eGVjKGxvd2VyY2FzZSgoJHdpbmRvdy5uYXZpZ2F0b3IgfHwge30pLnVzZXJBZ2VudCkpIHx8IFtd
KVsxXSksCisgICAgICAgIGJveGVlID0gL0JveGVlL2kudGVzdCgoJHdpbmRvdy5uYXZpZ2F0b3Ig
fHwge30pLnVzZXJBZ2VudCksCisgICAgICAgIGRvY3VtZW50ID0gJGRvY3VtZW50WzBdIHx8IHt9
LAorICAgICAgICB2ZW5kb3JQcmVmaXgsCisgICAgICAgIHZlbmRvclJlZ2V4ID0gL14oTW96fHdl
YmtpdHxtcykoPz1bQS1aXSkvLAorICAgICAgICBib2R5U3R5bGUgPSBkb2N1bWVudC5ib2R5ICYm
IGRvY3VtZW50LmJvZHkuc3R5bGUsCisgICAgICAgIHRyYW5zaXRpb25zID0gZmFsc2UsCisgICAg
ICAgIGFuaW1hdGlvbnMgPSBmYWxzZSwKKyAgICAgICAgbWF0Y2g7CisKKyAgICBpZiAoYm9keVN0
eWxlKSB7CisgICAgICBmb3IgKHZhciBwcm9wIGluIGJvZHlTdHlsZSkgeworICAgICAgICBpZiAo
bWF0Y2ggPSB2ZW5kb3JSZWdleC5leGVjKHByb3ApKSB7CisgICAgICAgICAgdmVuZG9yUHJlZml4
ID0gbWF0Y2hbMF07CisgICAgICAgICAgdmVuZG9yUHJlZml4ID0gdmVuZG9yUHJlZml4LnN1YnN0
cigwLCAxKS50b1VwcGVyQ2FzZSgpICsgdmVuZG9yUHJlZml4LnN1YnN0cigxKTsKKyAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoIXZlbmRvclByZWZpeCkg
eworICAgICAgICB2ZW5kb3JQcmVmaXggPSAoJ1dlYmtpdE9wYWNpdHknIGluIGJvZHlTdHlsZSkg
JiYgJ3dlYmtpdCc7CisgICAgICB9CisKKyAgICAgIHRyYW5zaXRpb25zID0gISEoKCd0cmFuc2l0
aW9uJyBpbiBib2R5U3R5bGUpIHx8ICh2ZW5kb3JQcmVmaXggKyAnVHJhbnNpdGlvbicgaW4gYm9k
eVN0eWxlKSk7CisgICAgICBhbmltYXRpb25zICA9ICEhKCgnYW5pbWF0aW9uJyBpbiBib2R5U3R5
bGUpIHx8ICh2ZW5kb3JQcmVmaXggKyAnQW5pbWF0aW9uJyBpbiBib2R5U3R5bGUpKTsKKworICAg
ICAgaWYgKGFuZHJvaWQgJiYgKCF0cmFuc2l0aW9ucyB8fCAgIWFuaW1hdGlvbnMpKSB7CisgICAg
ICAgIHRyYW5zaXRpb25zID0gaXNTdHJpbmcoYm9keVN0eWxlLndlYmtpdFRyYW5zaXRpb24pOwor
ICAgICAgICBhbmltYXRpb25zID0gaXNTdHJpbmcoYm9keVN0eWxlLndlYmtpdEFuaW1hdGlvbik7
CisgICAgICB9CisgICAgfQorCisKKyAgICByZXR1cm4geworICAgICAgLy8gQW5kcm9pZCBoYXMg
aGlzdG9yeS5wdXNoU3RhdGUsIGJ1dCBpdCBkb2VzIG5vdCB1cGRhdGUgbG9jYXRpb24gY29ycmVj
dGx5CisgICAgICAvLyBzbyBsZXQncyBub3QgdXNlIHRoZSBoaXN0b3J5IEFQSSBhdCBhbGwuCisg
ICAgICAvLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvYW5kcm9pZC9pc3N1ZXMvZGV0YWlsP2lk
PTE3NDcxCisgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyLmpzL2lz
c3Vlcy85MDQKKworICAgICAgLy8gb2xkZXIgd2Via2l0IGJyb3dzZXIgKDUzMy45KSBvbiBCb3hl
ZSBib3ggaGFzIGV4YWN0bHkgdGhlIHNhbWUgcHJvYmxlbSBhcyBBbmRyb2lkIGhhcworICAgICAg
Ly8gc28gbGV0J3Mgbm90IHVzZSB0aGUgaGlzdG9yeSBBUEkgYWxzbworICAgICAgLy8gV2UgYXJl
IHB1cnBvc2VmdWxseSB1c2luZyBgIShhbmRyb2lkIDwgNClgIHRvIGNvdmVyIHRoZSBjYXNlIHdo
ZW4gYGFuZHJvaWRgIGlzIHVuZGVmaW5lZAorICAgICAgLy8ganNoaW50IC1XMDE4CisgICAgICBo
aXN0b3J5OiAhISgkd2luZG93Lmhpc3RvcnkgJiYgJHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSAm
JiAhKGFuZHJvaWQgPCA0KSAmJiAhYm94ZWUpLAorICAgICAgLy8ganNoaW50ICtXMDE4CisgICAg
ICBoYXNFdmVudDogZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgLy8gSUU5IGltcGxlbWVudHMg
J2lucHV0JyBldmVudCBpdCdzIHNvIGZ1YmFyZWQgdGhhdCB3ZSByYXRoZXIgcHJldGVuZCB0aGF0
IGl0IGRvZXNuJ3QgaGF2ZQorICAgICAgICAvLyBpdC4gSW4gcGFydGljdWxhciB0aGUgZXZlbnQg
aXMgbm90IGZpcmVkIHdoZW4gYmFja3NwYWNlIG9yIGRlbGV0ZSBrZXkgYXJlIHByZXNzZWQgb3IK
KyAgICAgICAgLy8gd2hlbiBjdXQgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZC4KKyAgICAgICAgLy8g
SUUxMCsgaW1wbGVtZW50cyAnaW5wdXQnIGV2ZW50IGJ1dCBpdCBlcnJvbmVvdXNseSBmaXJlcyB1
bmRlciB2YXJpb3VzIHNpdHVhdGlvbnMsCisgICAgICAgIC8vIGUuZy4gd2hlbiBwbGFjZWhvbGRl
ciBjaGFuZ2VzLCBvciBhIGZvcm0gaXMgZm9jdXNlZC4KKyAgICAgICAgaWYgKGV2ZW50ID09PSAn
aW5wdXQnICYmIG1zaWUgPD0gMTEpIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoaXNVbmRl
ZmluZWQoZXZlbnRTdXBwb3J0W2V2ZW50XSkpIHsKKyAgICAgICAgICB2YXIgZGl2RWxtID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgICAgZXZlbnRTdXBwb3J0W2V2ZW50
XSA9ICdvbicgKyBldmVudCBpbiBkaXZFbG07CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
ZXZlbnRTdXBwb3J0W2V2ZW50XTsKKyAgICAgIH0sCisgICAgICBjc3A6IGNzcCgpLAorICAgICAg
dmVuZG9yUHJlZml4OiB2ZW5kb3JQcmVmaXgsCisgICAgICB0cmFuc2l0aW9uczogdHJhbnNpdGlv
bnMsCisgICAgICBhbmltYXRpb25zOiBhbmltYXRpb25zLAorICAgICAgYW5kcm9pZDogYW5kcm9p
ZAorICAgIH07CisgIH1dOworfQorCit2YXIgJGNvbXBpbGVNaW5FcnIgPSBtaW5FcnIoJyRjb21w
aWxlJyk7CisKKy8qKgorICogQG5nZG9jIHNlcnZpY2UKKyAqIEBuYW1lICR0ZW1wbGF0ZVJlcXVl
c3QKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFRoZSBgJHRlbXBsYXRlUmVxdWVzdGAgc2Vydmlj
ZSBydW5zIHNlY3VyaXR5IGNoZWNrcyB0aGVuIGRvd25sb2FkcyB0aGUgcHJvdmlkZWQgdGVtcGxh
dGUgdXNpbmcKKyAqIGAkaHR0cGAgYW5kLCB1cG9uIHN1Y2Nlc3MsIHN0b3JlcyB0aGUgY29udGVu
dHMgaW5zaWRlIG9mIGAkdGVtcGxhdGVDYWNoZWAuIElmIHRoZSBIVFRQIHJlcXVlc3QKKyAqIGZh
aWxzIG9yIHRoZSByZXNwb25zZSBkYXRhIG9mIHRoZSBIVFRQIHJlcXVlc3QgaXMgZW1wdHksIGEg
YCRjb21waWxlYCBlcnJvciB3aWxsIGJlIHRocm93biAodGhlCisgKiBleGNlcHRpb24gY2FuIGJl
IHRod2FydGVkIGJ5IHNldHRpbmcgdGhlIDJuZCBwYXJhbWV0ZXIgb2YgdGhlIGZ1bmN0aW9uIHRv
IHRydWUpLiBOb3RlIHRoYXQgdGhlCisgKiBjb250ZW50cyBvZiBgJHRlbXBsYXRlQ2FjaGVgIGFy
ZSB0cnVzdGVkLCBzbyB0aGUgY2FsbCB0byBgJHNjZS5nZXRUcnVzdGVkVXJsKHRwbClgIGlzIG9t
aXR0ZWQKKyAqIHdoZW4gYHRwbGAgaXMgb2YgdHlwZSBzdHJpbmcgYW5kIGAkdGVtcGxhdGVDYWNo
ZWAgaGFzIHRoZSBtYXRjaGluZyBlbnRyeS4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ3xUcnVzdGVk
UmVzb3VyY2VVcmx9IHRwbCBUaGUgSFRUUCByZXF1ZXN0IHRlbXBsYXRlIFVSTAorICogQHBhcmFt
IHtib29sZWFuPX0gaWdub3JlUmVxdWVzdEVycm9yIFdoZXRoZXIgb3Igbm90IHRvIGlnbm9yZSB0
aGUgZXhjZXB0aW9uIHdoZW4gdGhlIHJlcXVlc3QgZmFpbHMgb3IgdGhlIHRlbXBsYXRlIGlzIGVt
cHR5CisgKgorICogQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlIGZvciB0aGUgSFRUUCByZXNw
b25zZSBkYXRhIG9mIHRoZSBnaXZlbiBVUkwuCisgKgorICogQHByb3BlcnR5IHtudW1iZXJ9IHRv
dGFsUGVuZGluZ1JlcXVlc3RzIHRvdGFsIGFtb3VudCBvZiBwZW5kaW5nIHRlbXBsYXRlIHJlcXVl
c3RzIGJlaW5nIGRvd25sb2FkZWQuCisgKi8KK2Z1bmN0aW9uICRUZW1wbGF0ZVJlcXVlc3RQcm92
aWRlcigpIHsKKyAgdGhpcy4kZ2V0ID0gWyckdGVtcGxhdGVDYWNoZScsICckaHR0cCcsICckcScs
ICckc2NlJywgZnVuY3Rpb24oJHRlbXBsYXRlQ2FjaGUsICRodHRwLCAkcSwgJHNjZSkgeworICAg
IGZ1bmN0aW9uIGhhbmRsZVJlcXVlc3RGbih0cGwsIGlnbm9yZVJlcXVlc3RFcnJvcikgeworICAg
ICAgaGFuZGxlUmVxdWVzdEZuLnRvdGFsUGVuZGluZ1JlcXVlc3RzKys7CisKKyAgICAgIC8vIFdl
IGNvbnNpZGVyIHRoZSB0ZW1wbGF0ZSBjYWNoZSBob2xkcyBvbmx5IHRydXN0ZWQgdGVtcGxhdGVz
LCBzbworICAgICAgLy8gdGhlcmUncyBubyBuZWVkIHRvIGdvIHRocm91Z2ggd2hpdGVsaXN0aW5n
IGFnYWluIGZvciBrZXlzIHRoYXQgYWxyZWFkeQorICAgICAgLy8gYXJlIGluY2x1ZGVkIGluIHRo
ZXJlLiBUaGlzIGFsc28gbWFrZXMgQW5ndWxhciBhY2NlcHQgYW55IHNjcmlwdAorICAgICAgLy8g
ZGlyZWN0aXZlLCBubyBtYXR0ZXIgaXRzIG5hbWUuIEhvd2V2ZXIsIHdlIHN0aWxsIG5lZWQgdG8g
dW53cmFwIHRydXN0ZWQKKyAgICAgIC8vIHR5cGVzLgorICAgICAgaWYgKCFpc1N0cmluZyh0cGwp
IHx8ICEkdGVtcGxhdGVDYWNoZS5nZXQodHBsKSkgeworICAgICAgICB0cGwgPSAkc2NlLmdldFRy
dXN0ZWRSZXNvdXJjZVVybCh0cGwpOworICAgICAgfQorCisgICAgICB2YXIgdHJhbnNmb3JtUmVz
cG9uc2UgPSAkaHR0cC5kZWZhdWx0cyAmJiAkaHR0cC5kZWZhdWx0cy50cmFuc2Zvcm1SZXNwb25z
ZTsKKworICAgICAgaWYgKGlzQXJyYXkodHJhbnNmb3JtUmVzcG9uc2UpKSB7CisgICAgICAgIHRy
YW5zZm9ybVJlc3BvbnNlID0gdHJhbnNmb3JtUmVzcG9uc2UuZmlsdGVyKGZ1bmN0aW9uKHRyYW5z
Zm9ybWVyKSB7CisgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVyICE9PSBkZWZhdWx0SHR0cFJl
c3BvbnNlVHJhbnNmb3JtOworICAgICAgICB9KTsKKyAgICAgIH0gZWxzZSBpZiAodHJhbnNmb3Jt
UmVzcG9uc2UgPT09IGRlZmF1bHRIdHRwUmVzcG9uc2VUcmFuc2Zvcm0pIHsKKyAgICAgICAgdHJh
bnNmb3JtUmVzcG9uc2UgPSBudWxsOworICAgICAgfQorCisgICAgICB2YXIgaHR0cE9wdGlvbnMg
PSB7CisgICAgICAgIGNhY2hlOiAkdGVtcGxhdGVDYWNoZSwKKyAgICAgICAgdHJhbnNmb3JtUmVz
cG9uc2U6IHRyYW5zZm9ybVJlc3BvbnNlCisgICAgICB9OworCisgICAgICByZXR1cm4gJGh0dHAu
Z2V0KHRwbCwgaHR0cE9wdGlvbnMpCisgICAgICAgIFsnZmluYWxseSddKGZ1bmN0aW9uKCkgewor
ICAgICAgICAgIGhhbmRsZVJlcXVlc3RGbi50b3RhbFBlbmRpbmdSZXF1ZXN0cy0tOworICAgICAg
ICB9KQorICAgICAgICAudGhlbihmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICAgICR0ZW1w
bGF0ZUNhY2hlLnB1dCh0cGwsIHJlc3BvbnNlLmRhdGEpOworICAgICAgICAgIHJldHVybiByZXNw
b25zZS5kYXRhOworICAgICAgICB9LCBoYW5kbGVFcnJvcik7CisKKyAgICAgIGZ1bmN0aW9uIGhh
bmRsZUVycm9yKHJlc3ApIHsKKyAgICAgICAgaWYgKCFpZ25vcmVSZXF1ZXN0RXJyb3IpIHsKKyAg
ICAgICAgICB0aHJvdyAkY29tcGlsZU1pbkVycigndHBsb2FkJywgJ0ZhaWxlZCB0byBsb2FkIHRl
bXBsYXRlOiB7MH0gKEhUVFAgc3RhdHVzOiB7MX0gezJ9KScsCisgICAgICAgICAgICB0cGwsIHJl
c3Auc3RhdHVzLCByZXNwLnN0YXR1c1RleHQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAk
cS5yZWplY3QocmVzcCk7CisgICAgICB9CisgICAgfQorCisgICAgaGFuZGxlUmVxdWVzdEZuLnRv
dGFsUGVuZGluZ1JlcXVlc3RzID0gMDsKKworICAgIHJldHVybiBoYW5kbGVSZXF1ZXN0Rm47Cisg
IH1dOworfQorCitmdW5jdGlvbiAkJFRlc3RhYmlsaXR5UHJvdmlkZXIoKSB7CisgIHRoaXMuJGdl
dCA9IFsnJHJvb3RTY29wZScsICckYnJvd3NlcicsICckbG9jYXRpb24nLAorICAgICAgIGZ1bmN0
aW9uKCRyb290U2NvcGUsICAgJGJyb3dzZXIsICAgJGxvY2F0aW9uKSB7CisKKyAgICAvKioKKyAg
ICAgKiBAbmFtZSAkdGVzdGFiaWxpdHkKKyAgICAgKgorICAgICAqIEBkZXNjcmlwdGlvbgorICAg
ICAqIFRoZSBwcml2YXRlICQkdGVzdGFiaWxpdHkgc2VydmljZSBwcm92aWRlcyBhIGNvbGxlY3Rp
b24gb2YgbWV0aG9kcyBmb3IgdXNlIHdoZW4gZGVidWdnaW5nCisgICAgICogb3IgYnkgYXV0b21h
dGVkIHRlc3QgYW5kIGRlYnVnZ2luZyB0b29scy4KKyAgICAgKi8KKyAgICB2YXIgdGVzdGFiaWxp
dHkgPSB7fTsKKworICAgIC8qKgorICAgICAqIEBuYW1lICQkdGVzdGFiaWxpdHkjZmluZEJpbmRp
bmdzCisgICAgICoKKyAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgKiBSZXR1cm5zIGFuIGFycmF5
IG9mIGVsZW1lbnRzIHRoYXQgYXJlIGJvdW5kICh2aWEgbmctYmluZCBvciB7e319KQorICAgICAq
IHRvIGV4cHJlc3Npb25zIG1hdGNoaW5nIHRoZSBpbnB1dC4KKyAgICAgKgorICAgICAqIEBwYXJh
bSB7RWxlbWVudH0gZWxlbWVudCBUaGUgZWxlbWVudCByb290IHRvIHNlYXJjaCBmcm9tLgorICAg
ICAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8g
bWF0Y2guCisgICAgICogQHBhcmFtIHtib29sZWFufSBvcHRfZXhhY3RNYXRjaCBJZiB0cnVlLCBv
bmx5IHJldHVybnMgZXhhY3QgbWF0Y2hlcworICAgICAqICAgICBmb3IgdGhlIGV4cHJlc3Npb24u
IEZpbHRlcnMgYW5kIHdoaXRlc3BhY2UgYXJlIGlnbm9yZWQuCisgICAgICovCisgICAgdGVzdGFi
aWxpdHkuZmluZEJpbmRpbmdzID0gZnVuY3Rpb24oZWxlbWVudCwgZXhwcmVzc2lvbiwgb3B0X2V4
YWN0TWF0Y2gpIHsKKyAgICAgIHZhciBiaW5kaW5ncyA9IGVsZW1lbnQuZ2V0RWxlbWVudHNCeUNs
YXNzTmFtZSgnbmctYmluZGluZycpOworICAgICAgdmFyIG1hdGNoZXMgPSBbXTsKKyAgICAgIGZv
ckVhY2goYmluZGluZ3MsIGZ1bmN0aW9uKGJpbmRpbmcpIHsKKyAgICAgICAgdmFyIGRhdGFCaW5k
aW5nID0gYW5ndWxhci5lbGVtZW50KGJpbmRpbmcpLmRhdGEoJyRiaW5kaW5nJyk7CisgICAgICAg
IGlmIChkYXRhQmluZGluZykgeworICAgICAgICAgIGZvckVhY2goZGF0YUJpbmRpbmcsIGZ1bmN0
aW9uKGJpbmRpbmdOYW1lKSB7CisgICAgICAgICAgICBpZiAob3B0X2V4YWN0TWF0Y2gpIHsKKyAg
ICAgICAgICAgICAgdmFyIG1hdGNoZXIgPSBuZXcgUmVnRXhwKCcoXnxcXHMpJyArIGVzY2FwZUZv
clJlZ2V4cChleHByZXNzaW9uKSArICcoXFxzfFxcfHwkKScpOworICAgICAgICAgICAgICBpZiAo
bWF0Y2hlci50ZXN0KGJpbmRpbmdOYW1lKSkgeworICAgICAgICAgICAgICAgIG1hdGNoZXMucHVz
aChiaW5kaW5nKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgaWYgKGJpbmRpbmdOYW1lLmluZGV4T2YoZXhwcmVzc2lvbikgIT0gLTEpIHsKKyAg
ICAgICAgICAgICAgICBtYXRjaGVzLnB1c2goYmluZGluZyk7CisgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgICBy
ZXR1cm4gbWF0Y2hlczsKKyAgICB9OworCisgICAgLyoqCisgICAgICogQG5hbWUgJCR0ZXN0YWJp
bGl0eSNmaW5kTW9kZWxzCisgICAgICoKKyAgICAgKiBAZGVzY3JpcHRpb24KKyAgICAgKiBSZXR1
cm5zIGFuIGFycmF5IG9mIGVsZW1lbnRzIHRoYXQgYXJlIHR3by13YXkgZm91bmQgdmlhIG5nLW1v
ZGVsIHRvCisgICAgICogZXhwcmVzc2lvbnMgbWF0Y2hpbmcgdGhlIGlucHV0LgorICAgICAqCisg
ICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRoZSBlbGVtZW50IHJvb3QgdG8gc2VhcmNo
IGZyb20uCisgICAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gVGhlIG1vZGVsIGV4cHJl
c3Npb24gdG8gbWF0Y2guCisgICAgICogQHBhcmFtIHtib29sZWFufSBvcHRfZXhhY3RNYXRjaCBJ
ZiB0cnVlLCBvbmx5IHJldHVybnMgZXhhY3QgbWF0Y2hlcworICAgICAqICAgICBmb3IgdGhlIGV4
cHJlc3Npb24uCisgICAgICovCisgICAgdGVzdGFiaWxpdHkuZmluZE1vZGVscyA9IGZ1bmN0aW9u
KGVsZW1lbnQsIGV4cHJlc3Npb24sIG9wdF9leGFjdE1hdGNoKSB7CisgICAgICB2YXIgcHJlZml4
ZXMgPSBbJ25nLScsICdkYXRhLW5nLScsICduZ1xcOiddOworICAgICAgZm9yICh2YXIgcCA9IDA7
IHAgPCBwcmVmaXhlcy5sZW5ndGg7ICsrcCkgeworICAgICAgICB2YXIgYXR0cmlidXRlRXF1YWxz
ID0gb3B0X2V4YWN0TWF0Y2ggPyAnPScgOiAnKj0nOworICAgICAgICB2YXIgc2VsZWN0b3IgPSAn
WycgKyBwcmVmaXhlc1twXSArICdtb2RlbCcgKyBhdHRyaWJ1dGVFcXVhbHMgKyAnIicgKyBleHBy
ZXNzaW9uICsgJyJdJzsKKyAgICAgICAgdmFyIGVsZW1lbnRzID0gZWxlbWVudC5xdWVyeVNlbGVj
dG9yQWxsKHNlbGVjdG9yKTsKKyAgICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCkgeworICAgICAg
ICAgIHJldHVybiBlbGVtZW50czsKKyAgICAgICAgfQorICAgICAgfQorICAgIH07CisKKyAgICAv
KioKKyAgICAgKiBAbmFtZSAkJHRlc3RhYmlsaXR5I2dldExvY2F0aW9uCisgICAgICoKKyAgICAg
KiBAZGVzY3JpcHRpb24KKyAgICAgKiBTaG9ydGN1dCBmb3IgZ2V0dGluZyB0aGUgbG9jYXRpb24g
aW4gYSBicm93c2VyIGFnbm9zdGljIHdheS4gUmV0dXJucworICAgICAqICAgICB0aGUgcGF0aCwg
c2VhcmNoLCBhbmQgaGFzaC4gKGUuZy4gL3BhdGg/YT1iI2hhc2gpCisgICAgICovCisgICAgdGVz
dGFiaWxpdHkuZ2V0TG9jYXRpb24gPSBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiAkbG9jYXRp
b24udXJsKCk7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEBuYW1lICQkdGVzdGFiaWxpdHkj
c2V0TG9jYXRpb24KKyAgICAgKgorICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAqIFNob3J0Y3V0
IGZvciBuYXZpZ2F0aW5nIHRvIGEgbG9jYXRpb24gd2l0aG91dCBkb2luZyBhIGZ1bGwgcGFnZSBy
ZWxvYWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBsb2NhdGlvbiB1
cmwgKHBhdGgsIHNlYXJjaCBhbmQgaGFzaCwKKyAgICAgKiAgICAgZS5nLiAvcGF0aD9hPWIjaGFz
aCkgdG8gZ28gdG8uCisgICAgICovCisgICAgdGVzdGFiaWxpdHkuc2V0TG9jYXRpb24gPSBmdW5j
dGlvbih1cmwpIHsKKyAgICAgIGlmICh1cmwgIT09ICRsb2NhdGlvbi51cmwoKSkgeworICAgICAg
ICAkbG9jYXRpb24udXJsKHVybCk7CisgICAgICAgICRyb290U2NvcGUuJGRpZ2VzdCgpOworICAg
ICAgfQorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBAbmFtZSAkJHRlc3RhYmlsaXR5I3doZW5T
dGFibGUKKyAgICAgKgorICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAqIENhbGxzIHRoZSBjYWxs
YmFjayB3aGVuICR0aW1lb3V0IGFuZCAkaHR0cCByZXF1ZXN0cyBhcmUgY29tcGxldGVkLgorICAg
ICAqCisgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sKKyAgICAgKi8KKyAgICB0ZXN0
YWJpbGl0eS53aGVuU3RhYmxlID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgICAgICRicm93c2Vy
Lm5vdGlmeVdoZW5Ob091dHN0YW5kaW5nUmVxdWVzdHMoY2FsbGJhY2spOworICAgIH07CisKKyAg
ICByZXR1cm4gdGVzdGFiaWxpdHk7CisgIH1dOworfQorCitmdW5jdGlvbiAkVGltZW91dFByb3Zp
ZGVyKCkgeworICB0aGlzLiRnZXQgPSBbJyRyb290U2NvcGUnLCAnJGJyb3dzZXInLCAnJHEnLCAn
JCRxJywgJyRleGNlcHRpb25IYW5kbGVyJywKKyAgICAgICBmdW5jdGlvbigkcm9vdFNjb3BlLCAg
ICRicm93c2VyLCAgICRxLCAgICQkcSwgICAkZXhjZXB0aW9uSGFuZGxlcikgeworCisgICAgdmFy
IGRlZmVycmVkcyA9IHt9OworCisKKyAgICAgLyoqCisgICAgICAqIEBuZ2RvYyBzZXJ2aWNlCisg
ICAgICAqIEBuYW1lICR0aW1lb3V0CisgICAgICAqCisgICAgICAqIEBkZXNjcmlwdGlvbgorICAg
ICAgKiBBbmd1bGFyJ3Mgd3JhcHBlciBmb3IgYHdpbmRvdy5zZXRUaW1lb3V0YC4gVGhlIGBmbmAg
ZnVuY3Rpb24gaXMgd3JhcHBlZCBpbnRvIGEgdHJ5L2NhdGNoCisgICAgICAqIGJsb2NrIGFuZCBk
ZWxlZ2F0ZXMgYW55IGV4Y2VwdGlvbnMgdG8KKyAgICAgICoge0BsaW5rIG5nLiRleGNlcHRpb25I
YW5kbGVyICRleGNlcHRpb25IYW5kbGVyfSBzZXJ2aWNlLgorICAgICAgKgorICAgICAgKiBUaGUg
cmV0dXJuIHZhbHVlIG9mIGNhbGxpbmcgYCR0aW1lb3V0YCBpcyBhIHByb21pc2UsIHdoaWNoIHdp
bGwgYmUgcmVzb2x2ZWQgd2hlbgorICAgICAgKiB0aGUgZGVsYXkgaGFzIHBhc3NlZCBhbmQgdGhl
IHRpbWVvdXQgZnVuY3Rpb24sIGlmIHByb3ZpZGVkLCBpcyBleGVjdXRlZC4KKyAgICAgICoKKyAg
ICAgICogVG8gY2FuY2VsIGEgdGltZW91dCByZXF1ZXN0LCBjYWxsIGAkdGltZW91dC5jYW5jZWwo
cHJvbWlzZSlgLgorICAgICAgKgorICAgICAgKiBJbiB0ZXN0cyB5b3UgY2FuIHVzZSB7QGxpbmsg
bmdNb2NrLiR0aW1lb3V0IGAkdGltZW91dC5mbHVzaCgpYH0gdG8KKyAgICAgICogc3luY2hyb25v
dXNseSBmbHVzaCB0aGUgcXVldWUgb2YgZGVmZXJyZWQgZnVuY3Rpb25zLgorICAgICAgKgorICAg
ICAgKiBJZiB5b3Ugb25seSB3YW50IGEgcHJvbWlzZSB0aGF0IHdpbGwgYmUgcmVzb2x2ZWQgYWZ0
ZXIgc29tZSBzcGVjaWZpZWQgZGVsYXkKKyAgICAgICogdGhlbiB5b3UgY2FuIGNhbGwgYCR0aW1l
b3V0YCB3aXRob3V0IHRoZSBgZm5gIGZ1bmN0aW9uLgorICAgICAgKgorICAgICAgKiBAcGFyYW0g
e2Z1bmN0aW9uKCk9fSBmbiBBIGZ1bmN0aW9uLCB3aG9zZSBleGVjdXRpb24gc2hvdWxkIGJlIGRl
bGF5ZWQuCisgICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gW2RlbGF5PTBdIERlbGF5IGluIG1pbGxp
c2Vjb25kcy4KKyAgICAgICogQHBhcmFtIHtib29sZWFuPX0gW2ludm9rZUFwcGx5PXRydWVdIElm
IHNldCB0byBgZmFsc2VgIHNraXBzIG1vZGVsIGRpcnR5IGNoZWNraW5nLCBvdGhlcndpc2UKKyAg
ICAgICogICB3aWxsIGludm9rZSBgZm5gIHdpdGhpbiB0aGUge0BsaW5rIG5nLiRyb290U2NvcGUu
U2NvcGUjJGFwcGx5ICRhcHBseX0gYmxvY2suCisgICAgICAqIEBwYXJhbSB7Li4uKj19IFBhc3Mg
YWRkaXRpb25hbCBwYXJhbWV0ZXJzIHRvIHRoZSBleGVjdXRlZCBmdW5jdGlvbi4KKyAgICAgICog
QHJldHVybnMge1Byb21pc2V9IFByb21pc2UgdGhhdCB3aWxsIGJlIHJlc29sdmVkIHdoZW4gdGhl
IHRpbWVvdXQgaXMgcmVhY2hlZC4gVGhlIHZhbHVlIHRoaXMKKyAgICAgICogICBwcm9taXNlIHdp
bGwgYmUgcmVzb2x2ZWQgd2l0aCBpcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBgZm5gIGZ1bmN0
aW9uLgorICAgICAgKgorICAgICAgKi8KKyAgICBmdW5jdGlvbiB0aW1lb3V0KGZuLCBkZWxheSwg
aW52b2tlQXBwbHkpIHsKKyAgICAgIGlmICghaXNGdW5jdGlvbihmbikpIHsKKyAgICAgICAgaW52
b2tlQXBwbHkgPSBkZWxheTsKKyAgICAgICAgZGVsYXkgPSBmbjsKKyAgICAgICAgZm4gPSBub29w
OworICAgICAgfQorCisgICAgICB2YXIgYXJncyA9IHNsaWNlQXJncyhhcmd1bWVudHMsIDMpLAor
ICAgICAgICAgIHNraXBBcHBseSA9IChpc0RlZmluZWQoaW52b2tlQXBwbHkpICYmICFpbnZva2VB
cHBseSksCisgICAgICAgICAgZGVmZXJyZWQgPSAoc2tpcEFwcGx5ID8gJCRxIDogJHEpLmRlZmVy
KCksCisgICAgICAgICAgcHJvbWlzZSA9IGRlZmVycmVkLnByb21pc2UsCisgICAgICAgICAgdGlt
ZW91dElkOworCisgICAgICB0aW1lb3V0SWQgPSAkYnJvd3Nlci5kZWZlcihmdW5jdGlvbigpIHsK
KyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKGZuLmFwcGx5KG51bGws
IGFyZ3MpKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgIGRlZmVycmVkLnJlamVj
dChlKTsKKyAgICAgICAgICAkZXhjZXB0aW9uSGFuZGxlcihlKTsKKyAgICAgICAgfQorICAgICAg
ICBmaW5hbGx5IHsKKyAgICAgICAgICBkZWxldGUgZGVmZXJyZWRzW3Byb21pc2UuJCR0aW1lb3V0
SWRdOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFza2lwQXBwbHkpICRyb290U2NvcGUuJGFw
cGx5KCk7CisgICAgICB9LCBkZWxheSk7CisKKyAgICAgIHByb21pc2UuJCR0aW1lb3V0SWQgPSB0
aW1lb3V0SWQ7CisgICAgICBkZWZlcnJlZHNbdGltZW91dElkXSA9IGRlZmVycmVkOworCisgICAg
ICByZXR1cm4gcHJvbWlzZTsKKyAgICB9CisKKworICAgICAvKioKKyAgICAgICogQG5nZG9jIG1l
dGhvZAorICAgICAgKiBAbmFtZSAkdGltZW91dCNjYW5jZWwKKyAgICAgICoKKyAgICAgICogQGRl
c2NyaXB0aW9uCisgICAgICAqIENhbmNlbHMgYSB0YXNrIGFzc29jaWF0ZWQgd2l0aCB0aGUgYHBy
b21pc2VgLiBBcyBhIHJlc3VsdCBvZiB0aGlzLCB0aGUgcHJvbWlzZSB3aWxsIGJlCisgICAgICAq
IHJlc29sdmVkIHdpdGggYSByZWplY3Rpb24uCisgICAgICAqCisgICAgICAqIEBwYXJhbSB7UHJv
bWlzZT19IHByb21pc2UgUHJvbWlzZSByZXR1cm5lZCBieSB0aGUgYCR0aW1lb3V0YCBmdW5jdGlv
bi4KKyAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB0YXNr
IGhhc24ndCBleGVjdXRlZCB5ZXQgYW5kIHdhcyBzdWNjZXNzZnVsbHkKKyAgICAgICogICBjYW5j
ZWxlZC4KKyAgICAgICovCisgICAgdGltZW91dC5jYW5jZWwgPSBmdW5jdGlvbihwcm9taXNlKSB7
CisgICAgICBpZiAocHJvbWlzZSAmJiBwcm9taXNlLiQkdGltZW91dElkIGluIGRlZmVycmVkcykg
eworICAgICAgICBkZWZlcnJlZHNbcHJvbWlzZS4kJHRpbWVvdXRJZF0ucmVqZWN0KCdjYW5jZWxl
ZCcpOworICAgICAgICBkZWxldGUgZGVmZXJyZWRzW3Byb21pc2UuJCR0aW1lb3V0SWRdOworICAg
ICAgICByZXR1cm4gJGJyb3dzZXIuZGVmZXIuY2FuY2VsKHByb21pc2UuJCR0aW1lb3V0SWQpOwor
ICAgICAgfQorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisKKyAgICByZXR1cm4gdGltZW91
dDsKKyAgfV07Cit9CisKKy8vIE5PVEU6ICBUaGUgdXNhZ2Ugb2Ygd2luZG93IGFuZCBkb2N1bWVu
dCBpbnN0ZWFkIG9mICR3aW5kb3cgYW5kICRkb2N1bWVudCBoZXJlIGlzCisvLyBkZWxpYmVyYXRl
LiAgVGhpcyBzZXJ2aWNlIGRlcGVuZHMgb24gdGhlIHNwZWNpZmljIGJlaGF2aW9yIG9mIGFuY2hv
ciBub2RlcyBjcmVhdGVkIGJ5IHRoZQorLy8gYnJvd3NlciAocmVzb2x2aW5nIGFuZCBwYXJzaW5n
IFVSTHMpIHRoYXQgaXMgdW5saWtlbHkgdG8gYmUgcHJvdmlkZWQgYnkgbW9jayBvYmplY3RzIGFu
ZAorLy8gY2F1c2UgdXMgdG8gYnJlYWsgdGVzdHMuICBJbiBhZGRpdGlvbiwgd2hlbiB0aGUgYnJv
d3NlciByZXNvbHZlcyBhIFVSTCBmb3IgWEhSLCBpdAorLy8gZG9lc24ndCBrbm93IGFib3V0IG1v
Y2tlZCBsb2NhdGlvbnMgYW5kIHJlc29sdmVzIFVSTHMgdG8gdGhlIHJlYWwgZG9jdW1lbnQgLSB3
aGljaCBpcworLy8gZXhhY3RseSB0aGUgYmVoYXZpb3IgbmVlZGVkIGhlcmUuICBUaGVyZSBpcyBs
aXR0bGUgdmFsdWUgaXMgbW9ja2luZyB0aGVzZSBvdXQgZm9yIHRoaXMKKy8vIHNlcnZpY2UuCit2
YXIgdXJsUGFyc2luZ05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Cit2YXIgb3Jp
Z2luVXJsID0gdXJsUmVzb2x2ZSh3aW5kb3cubG9jYXRpb24uaHJlZik7CisKKworLyoqCisgKgor
ICogSW1wbGVtZW50YXRpb24gTm90ZXMgZm9yIG5vbi1JRSBicm93c2VycworICogLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQXNzaWduaW5nIGEgVVJMIHRvIHRo
ZSBocmVmIHByb3BlcnR5IG9mIGFuIGFuY2hvciBET00gbm9kZSwgZXZlbiBvbmUgYXR0YWNoZWQg
dG8gdGhlIERPTSwKKyAqIHJlc3VsdHMgYm90aCBpbiB0aGUgbm9ybWFsaXppbmcgYW5kIHBhcnNp
bmcgb2YgdGhlIFVSTC4gIE5vcm1hbGl6aW5nIG1lYW5zIHRoYXQgYSByZWxhdGl2ZQorICogVVJM
IHdpbGwgYmUgcmVzb2x2ZWQgaW50byBhbiBhYnNvbHV0ZSBVUkwgaW4gdGhlIGNvbnRleHQgb2Yg
dGhlIGFwcGxpY2F0aW9uIGRvY3VtZW50LgorICogUGFyc2luZyBtZWFucyB0aGF0IHRoZSBhbmNo
b3Igbm9kZSdzIGhvc3QsIGhvc3RuYW1lLCBwcm90b2NvbCwgcG9ydCwgcGF0aG5hbWUgYW5kIHJl
bGF0ZWQKKyAqIHByb3BlcnRpZXMgYXJlIGFsbCBwb3B1bGF0ZWQgdG8gcmVmbGVjdCB0aGUgbm9y
bWFsaXplZCBVUkwuICBUaGlzIGFwcHJvYWNoIGhhcyB3aWRlCisgKiBjb21wYXRpYmlsaXR5IC0g
U2FmYXJpIDErLCBNb3ppbGxhIDErLCBPcGVyYSA3KyxlIGV0Yy4gIFNlZQorICogaHR0cDovL3d3
dy5hcHRhbmEuY29tL3JlZmVyZW5jZS9odG1sL2FwaS9IVE1MQW5jaG9yRWxlbWVudC5odG1sCisg
KgorICogSW1wbGVtZW50YXRpb24gTm90ZXMgZm9yIElFCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKyAqIElFID49IDggYW5kIDw9IDEwIG5vcm1hbGl6ZXMgdGhlIFVSTCB3aGVuIGFz
c2lnbmVkIHRvIHRoZSBhbmNob3Igbm9kZSBzaW1pbGFyIHRvIHRoZSBvdGhlcgorICogYnJvd3Nl
cnMuICBIb3dldmVyLCB0aGUgcGFyc2VkIGNvbXBvbmVudHMgd2lsbCBub3QgYmUgc2V0IGlmIHRo
ZSBVUkwgYXNzaWduZWQgZGlkIG5vdCBzcGVjaWZ5CisgKiB0aGVtLiAgKGUuZy4gaWYgeW91IGFz
c2lnbiBhLmhyZWYgPSAiZm9vIiwgdGhlbiBhLnByb3RvY29sLCBhLmhvc3QsIGV0Yy4gd2lsbCBi
ZSBlbXB0eS4pICBXZQorICogd29yayBhcm91bmQgdGhhdCBieSBwZXJmb3JtaW5nIHRoZSBwYXJz
aW5nIGluIGEgMm5kIHN0ZXAgYnkgdGFraW5nIGEgcHJldmlvdXNseSBub3JtYWxpemVkCisgKiBV
UkwgKGUuZy4gYnkgYXNzaWduaW5nIHRvIGEuaHJlZikgYW5kIGFzc2lnbmluZyBpdCBhLmhyZWYg
YWdhaW4uICBUaGlzIGNvcnJlY3RseSBwb3B1bGF0ZXMgdGhlCisgKiBwcm9wZXJ0aWVzIHN1Y2gg
YXMgcHJvdG9jb2wsIGhvc3RuYW1lLCBwb3J0LCBldGMuCisgKgorICogSUU3IGRvZXMgbm90IG5v
cm1hbGl6ZSB0aGUgVVJMIHdoZW4gYXNzaWduZWQgdG8gYW4gYW5jaG9yIG5vZGUuICAoQXBwYXJl
bnRseSwgaXQgZG9lcywgaWYgb25lCisgKiB1c2VzIHRoZSBpbm5lciBIVE1MIGFwcHJvYWNoIHRv
IGFzc2lnbiB0aGUgVVJMIGFzIHBhcnQgb2YgYW4gSFRNTCBzbmlwcGV0IC0KKyAqIGh0dHA6Ly9z
dGFja292ZXJmbG93LmNvbS9hLzQ3MjcyOSkgIEhvd2V2ZXIsIHNldHRpbmcgaW1nW3NyY10gZG9l
cyBub3JtYWxpemUgdGhlIFVSTC4KKyAqIFVuZm9ydHVuYXRlbHksIHNldHRpbmcgaW1nW3NyY10g
dG8gc29tZXRoaW5nIGxpa2UgImphdmFzY3JpcHQ6Zm9vIiBvbiBJRSB0aHJvd3MgYW4gZXhjZXB0
aW9uLgorICogU2luY2UgdGhlIHByaW1hcnkgdXNhZ2UgZm9yIG5vcm1hbGl6aW5nIFVSTHMgaXMg
dG8gc2FuaXRpemUgc3VjaCBVUkxzLCB3ZSBjYW4ndCB1c2UgdGhhdAorICogbWV0aG9kIGFuZCBJ
RSA8IDggaXMgdW5zdXBwb3J0ZWQuCisgKgorICogUmVmZXJlbmNlczoKKyAqICAgaHR0cDovL2Rl
dmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEFuY2hvckVsZW1lbnQK
KyAqICAgaHR0cDovL3d3dy5hcHRhbmEuY29tL3JlZmVyZW5jZS9odG1sL2FwaS9IVE1MQW5jaG9y
RWxlbWVudC5odG1sCisgKiAgIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlscwor
ICogICBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyLmpzL3B1bGwvMjkwMgorICog
ICBodHRwOi8vamFtZXMucGFkb2xzZXkuY29tL2phdmFzY3JpcHQvcGFyc2luZy11cmxzLXdpdGgt
dGhlLWRvbS8KKyAqCisgKiBAa2luZCBmdW5jdGlvbgorICogQHBhcmFtIHtzdHJpbmd9IHVybCBU
aGUgVVJMIHRvIGJlIHBhcnNlZC4KKyAqIEBkZXNjcmlwdGlvbiBOb3JtYWxpemVzIGFuZCBwYXJz
ZXMgYSBVUkwuCisgKiBAcmV0dXJucyB7b2JqZWN0fSBSZXR1cm5zIHRoZSBub3JtYWxpemVkIFVS
TCBhcyBhIGRpY3Rpb25hcnkuCisgKgorICogICB8IG1lbWJlciBuYW1lICAgfCBEZXNjcmlwdGlv
biAgICB8CisgKiAgIHwtLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwKKyAqICAgfCBo
cmVmICAgICAgICAgIHwgQSBub3JtYWxpemVkIHZlcnNpb24gb2YgdGhlIHByb3ZpZGVkIFVSTCBp
ZiBpdCB3YXMgbm90IGFuIGFic29sdXRlIFVSTCB8CisgKiAgIHwgcHJvdG9jb2wgICAgICB8IFRo
ZSBwcm90b2NvbCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIGNvbG9uICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfAorICogICB8IGhvc3QgICAgICAgICAgfCBUaGUgaG9zdCBhbmQgcG9ydCAo
aWYgdGhlIHBvcnQgaXMgbm9uLWRlZmF1bHQpIG9mIHRoZSBub3JtYWxpemVkVXJsICAgIHwKKyAq
ICAgfCBzZWFyY2ggICAgICAgIHwgVGhlIHNlYXJjaCBwYXJhbXMsIG1pbnVzIHRoZSBxdWVzdGlv
biBtYXJrICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgIHwgaGFzaCAgICAgICAg
ICB8IFRoZSBoYXNoIHN0cmluZywgbWludXMgdGhlIGhhc2ggc3ltYm9sCisgKiAgIHwgaG9zdG5h
bWUgICAgICB8IFRoZSBob3N0bmFtZQorICogICB8IHBvcnQgICAgICAgICAgfCBUaGUgcG9ydCwg
d2l0aG91dCAiOiIKKyAqICAgfCBwYXRobmFtZSAgICAgIHwgVGhlIHBhdGhuYW1lLCBiZWdpbm5p
bmcgd2l0aCAiLyIKKyAqCisgKi8KK2Z1bmN0aW9uIHVybFJlc29sdmUodXJsKSB7CisgIHZhciBo
cmVmID0gdXJsOworCisgIGlmIChtc2llKSB7CisgICAgLy8gTm9ybWFsaXplIGJlZm9yZSBwYXJz
ZS4gIFJlZmVyIEltcGxlbWVudGF0aW9uIE5vdGVzIG9uIHdoeSB0aGlzIGlzCisgICAgLy8gZG9u
ZSBpbiB0d28gc3RlcHMgb24gSUUuCisgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCJo
cmVmIiwgaHJlZik7CisgICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7CisgIH0KKworICB1
cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTsKKworICAvLyB1cmxQYXJz
aW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVj
LndoYXR3Zy5vcmcvI3VybHV0aWxzCisgIHJldHVybiB7CisgICAgaHJlZjogdXJsUGFyc2luZ05v
ZGUuaHJlZiwKKyAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJz
aW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLAorICAgIGhvc3Q6IHVybFBh
cnNpbmdOb2RlLmhvc3QsCisgICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQ
YXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlw/LywgJycpIDogJycsCisgICAgaGFzaDogdXJs
UGFyc2luZ05vZGUuaGFzaCA/IHVybFBhcnNpbmdOb2RlLmhhc2gucmVwbGFjZSgvXiMvLCAnJykg
OiAnJywKKyAgICBob3N0bmFtZTogdXJsUGFyc2luZ05vZGUuaG9zdG5hbWUsCisgICAgcG9ydDog
dXJsUGFyc2luZ05vZGUucG9ydCwKKyAgICBwYXRobmFtZTogKHVybFBhcnNpbmdOb2RlLnBhdGhu
YW1lLmNoYXJBdCgwKSA9PT0gJy8nKQorICAgICAgPyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZQor
ICAgICAgOiAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZQorICB9OworfQorCisvKioKKyAq
IFBhcnNlIGEgcmVxdWVzdCBVUkwgYW5kIGRldGVybWluZSB3aGV0aGVyIHRoaXMgaXMgYSBzYW1l
LW9yaWdpbiByZXF1ZXN0IGFzIHRoZSBhcHBsaWNhdGlvbiBkb2N1bWVudC4KKyAqCisgKiBAcGFy
YW0ge3N0cmluZ3xvYmplY3R9IHJlcXVlc3RVcmwgVGhlIHVybCBvZiB0aGUgcmVxdWVzdCBhcyBh
IHN0cmluZyB0aGF0IHdpbGwgYmUgcmVzb2x2ZWQKKyAqIG9yIGEgcGFyc2VkIFVSTCBvYmplY3Qu
CisgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgcmVxdWVzdCBpcyBmb3IgdGhlIHNh
bWUgb3JpZ2luIGFzIHRoZSBhcHBsaWNhdGlvbiBkb2N1bWVudC4KKyAqLworZnVuY3Rpb24gdXJs
SXNTYW1lT3JpZ2luKHJlcXVlc3RVcmwpIHsKKyAgdmFyIHBhcnNlZCA9IChpc1N0cmluZyhyZXF1
ZXN0VXJsKSkgPyB1cmxSZXNvbHZlKHJlcXVlc3RVcmwpIDogcmVxdWVzdFVybDsKKyAgcmV0dXJu
IChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVybC5wcm90b2NvbCAmJgorICAgICAgICAgIHBh
cnNlZC5ob3N0ID09PSBvcmlnaW5VcmwuaG9zdCk7Cit9CisKKy8qKgorICogQG5nZG9jIHNlcnZp
Y2UKKyAqIEBuYW1lICR3aW5kb3cKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIEEgcmVmZXJlbmNl
IHRvIHRoZSBicm93c2VyJ3MgYHdpbmRvd2Agb2JqZWN0LiBXaGlsZSBgd2luZG93YAorICogaXMg
Z2xvYmFsbHkgYXZhaWxhYmxlIGluIEphdmFTY3JpcHQsIGl0IGNhdXNlcyB0ZXN0YWJpbGl0eSBw
cm9ibGVtcywgYmVjYXVzZQorICogaXQgaXMgYSBnbG9iYWwgdmFyaWFibGUuIEluIGFuZ3VsYXIg
d2UgYWx3YXlzIHJlZmVyIHRvIGl0IHRocm91Z2ggdGhlCisgKiBgJHdpbmRvd2Agc2VydmljZSwg
c28gaXQgbWF5IGJlIG92ZXJyaWRkZW4sIHJlbW92ZWQgb3IgbW9ja2VkIGZvciB0ZXN0aW5nLgor
ICoKKyAqIEV4cHJlc3Npb25zLCBsaWtlIHRoZSBvbmUgZGVmaW5lZCBmb3IgdGhlIGBuZ0NsaWNr
YCBkaXJlY3RpdmUgaW4gdGhlIGV4YW1wbGUKKyAqIGJlbG93LCBhcmUgZXZhbHVhdGVkIHdpdGgg
cmVzcGVjdCB0byB0aGUgY3VycmVudCBzY29wZS4gIFRoZXJlZm9yZSwgdGhlcmUgaXMKKyAqIG5v
IHJpc2sgb2YgaW5hZHZlcnRlbnRseSBjb2RpbmcgaW4gYSBkZXBlbmRlbmN5IG9uIGEgZ2xvYmFs
IHZhbHVlIGluIHN1Y2ggYW4KKyAqIGV4cHJlc3Npb24uCisgKgorICogQGV4YW1wbGUKKyAgIDxl
eGFtcGxlIG1vZHVsZT0id2luZG93RXhhbXBsZSI+CisgICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0
bWwiPgorICAgICAgIDxzY3JpcHQ+CisgICAgICAgICBhbmd1bGFyLm1vZHVsZSgnd2luZG93RXhh
bXBsZScsIFtdKQorICAgICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBb
JyRzY29wZScsICckd2luZG93JywgZnVuY3Rpb24oJHNjb3BlLCAkd2luZG93KSB7CisgICAgICAg
ICAgICAgJHNjb3BlLmdyZWV0aW5nID0gJ0hlbGxvLCBXb3JsZCEnOworICAgICAgICAgICAgICRz
Y29wZS5kb0dyZWV0aW5nID0gZnVuY3Rpb24oZ3JlZXRpbmcpIHsKKyAgICAgICAgICAgICAgICR3
aW5kb3cuYWxlcnQoZ3JlZXRpbmcpOworICAgICAgICAgICAgIH07CisgICAgICAgICAgIH1dKTsK
KyAgICAgICA8L3NjcmlwdD4KKyAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9IkV4YW1wbGVDb250
cm9sbGVyIj4KKyAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuZy1tb2RlbD0iZ3JlZXRpbmci
IGFyaWEtbGFiZWw9ImdyZWV0aW5nIiAvPgorICAgICAgICAgPGJ1dHRvbiBuZy1jbGljaz0iZG9H
cmVldGluZyhncmVldGluZykiPkFMRVJUPC9idXR0b24+CisgICAgICAgPC9kaXY+CisgICAgIDwv
ZmlsZT4KKyAgICAgPGZpbGUgbmFtZT0icHJvdHJhY3Rvci5qcyIgdHlwZT0icHJvdHJhY3RvciI+
CisgICAgICBpdCgnc2hvdWxkIGRpc3BsYXkgdGhlIGdyZWV0aW5nIGluIHRoZSBpbnB1dCBib3gn
LCBmdW5jdGlvbigpIHsKKyAgICAgICBlbGVtZW50KGJ5Lm1vZGVsKCdncmVldGluZycpKS5zZW5k
S2V5cygnSGVsbG8sIEUyRSBUZXN0cycpOworICAgICAgIC8vIElmIHdlIGNsaWNrIHRoZSBidXR0
b24gaXQgd2lsbCBibG9jayB0aGUgdGVzdCBydW5uZXIKKyAgICAgICAvLyBlbGVtZW50KCc6YnV0
dG9uJykuY2xpY2soKTsKKyAgICAgIH0pOworICAgICA8L2ZpbGU+CisgICA8L2V4YW1wbGU+Cisg
Ki8KK2Z1bmN0aW9uICRXaW5kb3dQcm92aWRlcigpIHsKKyAgdGhpcy4kZ2V0ID0gdmFsdWVGbih3
aW5kb3cpOworfQorCisvKioKKyAqIEBuYW1lICQkY29va2llUmVhZGVyCisgKiBAcmVxdWlyZXMg
JGRvY3VtZW50CisgKgorICogQGRlc2NyaXB0aW9uCisgKiBUaGlzIGlzIGEgcHJpdmF0ZSBzZXJ2
aWNlIGZvciByZWFkaW5nIGNvb2tpZXMgdXNlZCBieSAkaHR0cCBhbmQgbmdDb29raWVzCisgKgor
ICogQHJldHVybiB7T2JqZWN0fSBhIGtleS92YWx1ZSBtYXAgb2YgdGhlIGN1cnJlbnQgY29va2ll
cworICovCitmdW5jdGlvbiAkJENvb2tpZVJlYWRlcigkZG9jdW1lbnQpIHsKKyAgdmFyIHJhd0Rv
Y3VtZW50ID0gJGRvY3VtZW50WzBdIHx8IHt9OworICB2YXIgbGFzdENvb2tpZXMgPSB7fTsKKyAg
dmFyIGxhc3RDb29raWVTdHJpbmcgPSAnJzsKKworICBmdW5jdGlvbiBzYWZlRGVjb2RlVVJJQ29t
cG9uZW50KHN0cikgeworICAgIHRyeSB7CisgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50
KHN0cik7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgcmV0dXJuIHN0cjsKKyAgICB9CisgIH0K
KworICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgdmFyIGNvb2tpZUFycmF5LCBjb29raWUsIGks
IGluZGV4LCBuYW1lOworICAgIHZhciBjdXJyZW50Q29va2llU3RyaW5nID0gcmF3RG9jdW1lbnQu
Y29va2llIHx8ICcnOworCisgICAgaWYgKGN1cnJlbnRDb29raWVTdHJpbmcgIT09IGxhc3RDb29r
aWVTdHJpbmcpIHsKKyAgICAgIGxhc3RDb29raWVTdHJpbmcgPSBjdXJyZW50Q29va2llU3RyaW5n
OworICAgICAgY29va2llQXJyYXkgPSBsYXN0Q29va2llU3RyaW5nLnNwbGl0KCc7ICcpOworICAg
ICAgbGFzdENvb2tpZXMgPSB7fTsKKworICAgICAgZm9yIChpID0gMDsgaSA8IGNvb2tpZUFycmF5
Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGNvb2tpZSA9IGNvb2tpZUFycmF5W2ldOworICAgICAg
ICBpbmRleCA9IGNvb2tpZS5pbmRleE9mKCc9Jyk7CisgICAgICAgIGlmIChpbmRleCA+IDApIHsg
Ly9pZ25vcmUgbmFtZWxlc3MgY29va2llcworICAgICAgICAgIG5hbWUgPSBzYWZlRGVjb2RlVVJJ
Q29tcG9uZW50KGNvb2tpZS5zdWJzdHJpbmcoMCwgaW5kZXgpKTsKKyAgICAgICAgICAvLyB0aGUg
Zmlyc3QgdmFsdWUgdGhhdCBpcyBzZWVuIGZvciBhIGNvb2tpZSBpcyB0aGUgbW9zdAorICAgICAg
ICAgIC8vIHNwZWNpZmljIG9uZS4gIHZhbHVlcyBmb3IgdGhlIHNhbWUgY29va2llIG5hbWUgdGhh
dAorICAgICAgICAgIC8vIGZvbGxvdyBhcmUgZm9yIGxlc3Mgc3BlY2lmaWMgcGF0aHMuCisgICAg
ICAgICAgaWYgKGxhc3RDb29raWVzW25hbWVdID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAg
IGxhc3RDb29raWVzW25hbWVdID0gc2FmZURlY29kZVVSSUNvbXBvbmVudChjb29raWUuc3Vic3Ry
aW5nKGluZGV4ICsgMSkpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gbGFzdENvb2tpZXM7CisgIH07Cit9CisKKyQkQ29va2llUmVhZGVyLiRpbmpl
Y3QgPSBbJyRkb2N1bWVudCddOworCitmdW5jdGlvbiAkJENvb2tpZVJlYWRlclByb3ZpZGVyKCkg
eworICB0aGlzLiRnZXQgPSAkJENvb2tpZVJlYWRlcjsKK30KKworLyogZ2xvYmFsIGN1cnJlbmN5
RmlsdGVyOiB0cnVlLAorIGRhdGVGaWx0ZXI6IHRydWUsCisgZmlsdGVyRmlsdGVyOiB0cnVlLAor
IGpzb25GaWx0ZXI6IHRydWUsCisgbGltaXRUb0ZpbHRlcjogdHJ1ZSwKKyBsb3dlcmNhc2VGaWx0
ZXI6IHRydWUsCisgbnVtYmVyRmlsdGVyOiB0cnVlLAorIG9yZGVyQnlGaWx0ZXI6IHRydWUsCisg
dXBwZXJjYXNlRmlsdGVyOiB0cnVlLAorICovCisKKy8qKgorICogQG5nZG9jIHByb3ZpZGVyCisg
KiBAbmFtZSAkZmlsdGVyUHJvdmlkZXIKKyAqIEBkZXNjcmlwdGlvbgorICoKKyAqIEZpbHRlcnMg
YXJlIGp1c3QgZnVuY3Rpb25zIHdoaWNoIHRyYW5zZm9ybSBpbnB1dCB0byBhbiBvdXRwdXQuIEhv
d2V2ZXIgZmlsdGVycyBuZWVkIHRvIGJlCisgKiBEZXBlbmRlbmN5IEluamVjdGVkLiBUbyBhY2hp
ZXZlIHRoaXMgYSBmaWx0ZXIgZGVmaW5pdGlvbiBjb25zaXN0cyBvZiBhIGZhY3RvcnkgZnVuY3Rp
b24gd2hpY2ggaXMKKyAqIGFubm90YXRlZCB3aXRoIGRlcGVuZGVuY2llcyBhbmQgaXMgcmVzcG9u
c2libGUgZm9yIGNyZWF0aW5nIGEgZmlsdGVyIGZ1bmN0aW9uLgorICoKKyAqIDxkaXYgY2xhc3M9
ImFsZXJ0IGFsZXJ0LXdhcm5pbmciPgorICogKipOb3RlOioqIEZpbHRlciBuYW1lcyBtdXN0IGJl
IHZhbGlkIGFuZ3VsYXIge0BsaW5rIGV4cHJlc3Npb259IGlkZW50aWZpZXJzLCBzdWNoIGFzIGB1
cHBlcmNhc2VgIG9yIGBvcmRlckJ5YC4KKyAqIE5hbWVzIHdpdGggc3BlY2lhbCBjaGFyYWN0ZXJz
LCBzdWNoIGFzIGh5cGhlbnMgYW5kIGRvdHMsIGFyZSBub3QgYWxsb3dlZC4gSWYgeW91IHdpc2gg
dG8gbmFtZXNwYWNlCisgKiB5b3VyIGZpbHRlcnMsIHRoZW4geW91IGNhbiB1c2UgY2FwaXRhbGl6
YXRpb24gKGBteWFwcFN1YnNlY3Rpb25GaWx0ZXJ4YCkgb3IgdW5kZXJzY29yZXMKKyAqIChgbXlh
cHBfc3Vic2VjdGlvbl9maWx0ZXJ4YCkuCisgKiA8L2Rpdj4KKyAqCisgKiBgYGBqcworICogICAv
LyBGaWx0ZXIgcmVnaXN0cmF0aW9uCisgKiAgIGZ1bmN0aW9uIE15TW9kdWxlKCRwcm92aWRlLCAk
ZmlsdGVyUHJvdmlkZXIpIHsKKyAqICAgICAvLyBjcmVhdGUgYSBzZXJ2aWNlIHRvIGRlbW9uc3Ry
YXRlIGluamVjdGlvbiAobm90IGFsd2F5cyBuZWVkZWQpCisgKiAgICAgJHByb3ZpZGUudmFsdWUo
J2dyZWV0JywgZnVuY3Rpb24obmFtZSl7CisgKiAgICAgICByZXR1cm4gJ0hlbGxvICcgKyBuYW1l
ICsgJyEnOworICogICAgIH0pOworICoKKyAqICAgICAvLyByZWdpc3RlciBhIGZpbHRlciBmYWN0
b3J5IHdoaWNoIHVzZXMgdGhlCisgKiAgICAgLy8gZ3JlZXQgc2VydmljZSB0byBkZW1vbnN0cmF0
ZSBESS4KKyAqICAgICAkZmlsdGVyUHJvdmlkZXIucmVnaXN0ZXIoJ2dyZWV0JywgZnVuY3Rpb24o
Z3JlZXQpeworICogICAgICAgLy8gcmV0dXJuIHRoZSBmaWx0ZXIgZnVuY3Rpb24gd2hpY2ggdXNl
cyB0aGUgZ3JlZXQgc2VydmljZQorICogICAgICAgLy8gdG8gZ2VuZXJhdGUgc2FsdXRhdGlvbgor
ICogICAgICAgcmV0dXJuIGZ1bmN0aW9uKHRleHQpIHsKKyAqICAgICAgICAgLy8gZmlsdGVycyBu
ZWVkIHRvIGJlIGZvcmdpdmluZyBzbyBjaGVjayBpbnB1dCB2YWxpZGl0eQorICogICAgICAgICBy
ZXR1cm4gdGV4dCAmJiBncmVldCh0ZXh0KSB8fCB0ZXh0OworICogICAgICAgfTsKKyAqICAgICB9
KTsKKyAqICAgfQorICogYGBgCisgKgorICogVGhlIGZpbHRlciBmdW5jdGlvbiBpcyByZWdpc3Rl
cmVkIHdpdGggdGhlIGAkaW5qZWN0b3JgIHVuZGVyIHRoZSBmaWx0ZXIgbmFtZSBzdWZmaXggd2l0
aAorICogYEZpbHRlcmAuCisgKgorICogYGBganMKKyAqICAgaXQoJ3Nob3VsZCBiZSB0aGUgc2Ft
ZSBpbnN0YW5jZScsIGluamVjdCgKKyAqICAgICBmdW5jdGlvbigkZmlsdGVyUHJvdmlkZXIpIHsK
KyAqICAgICAgICRmaWx0ZXJQcm92aWRlci5yZWdpc3RlcigncmV2ZXJzZScsIGZ1bmN0aW9uKCl7
CisgKiAgICAgICAgIHJldHVybiAuLi47CisgKiAgICAgICB9KTsKKyAqICAgICB9LAorICogICAg
IGZ1bmN0aW9uKCRmaWx0ZXIsIHJldmVyc2VGaWx0ZXIpIHsKKyAqICAgICAgIGV4cGVjdCgkZmls
dGVyKCdyZXZlcnNlJykpLnRvQmUocmV2ZXJzZUZpbHRlcik7CisgKiAgICAgfSk7CisgKiBgYGAK
KyAqCisgKgorICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IGFuZ3VsYXIgZmlsdGVy
cyB3b3JrLCBhbmQgaG93IHRvIGNyZWF0ZSB5b3VyIG93biBmaWx0ZXJzLCBzZWUKKyAqIHtAbGlu
ayBndWlkZS9maWx0ZXIgRmlsdGVyc30gaW4gdGhlIEFuZ3VsYXIgRGV2ZWxvcGVyIEd1aWRlLgor
ICovCisKKy8qKgorICogQG5nZG9jIHNlcnZpY2UKKyAqIEBuYW1lICRmaWx0ZXIKKyAqIEBraW5k
IGZ1bmN0aW9uCisgKiBAZGVzY3JpcHRpb24KKyAqIEZpbHRlcnMgYXJlIHVzZWQgZm9yIGZvcm1h
dHRpbmcgZGF0YSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuCisgKgorICogVGhlIGdlbmVyYWwgc3lu
dGF4IGluIHRlbXBsYXRlcyBpcyBhcyBmb2xsb3dzOgorICoKKyAqICAgICAgICAge3sgZXhwcmVz
c2lvbiBbfCBmaWx0ZXJfbmFtZVs6cGFyYW1ldGVyX3ZhbHVlXSAuLi4gXSB9fQorICoKKyAqIEBw
YXJhbSB7U3RyaW5nfSBuYW1lIE5hbWUgb2YgdGhlIGZpbHRlciBmdW5jdGlvbiB0byByZXRyaWV2
ZQorICogQHJldHVybiB7RnVuY3Rpb259IHRoZSBmaWx0ZXIgZnVuY3Rpb24KKyAqIEBleGFtcGxl
CisgICA8ZXhhbXBsZSBuYW1lPSIkZmlsdGVyIiBtb2R1bGU9ImZpbHRlckV4YW1wbGUiPgorICAg
ICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9Ik1h
aW5DdHJsIj4KKyAgICAgICAgPGgzPnt7IG9yaWdpbmFsVGV4dCB9fTwvaDM+CisgICAgICAgIDxo
Mz57eyBmaWx0ZXJlZFRleHQgfX08L2gzPgorICAgICAgIDwvZGl2PgorICAgICA8L2ZpbGU+CisK
KyAgICAgPGZpbGUgbmFtZT0ic2NyaXB0LmpzIj4KKyAgICAgIGFuZ3VsYXIubW9kdWxlKCdmaWx0
ZXJFeGFtcGxlJywgW10pCisgICAgICAuY29udHJvbGxlcignTWFpbkN0cmwnLCBmdW5jdGlvbigk
c2NvcGUsICRmaWx0ZXIpIHsKKyAgICAgICAgJHNjb3BlLm9yaWdpbmFsVGV4dCA9ICdoZWxsbyc7
CisgICAgICAgICRzY29wZS5maWx0ZXJlZFRleHQgPSAkZmlsdGVyKCd1cHBlcmNhc2UnKSgkc2Nv
cGUub3JpZ2luYWxUZXh0KTsKKyAgICAgIH0pOworICAgICA8L2ZpbGU+CisgICA8L2V4YW1wbGU+
CisgICovCiskRmlsdGVyUHJvdmlkZXIuJGluamVjdCA9IFsnJHByb3ZpZGUnXTsKK2Z1bmN0aW9u
ICRGaWx0ZXJQcm92aWRlcigkcHJvdmlkZSkgeworICB2YXIgc3VmZml4ID0gJ0ZpbHRlcic7CisK
KyAgLyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgJGZpbHRlclByb3ZpZGVyI3Jl
Z2lzdGVyCisgICAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0gbmFtZSBOYW1lIG9mIHRoZSBmaWx0
ZXIgZnVuY3Rpb24sIG9yIGFuIG9iamVjdCBtYXAgb2YgZmlsdGVycyB3aGVyZQorICAgKiAgICB0
aGUga2V5cyBhcmUgdGhlIGZpbHRlciBuYW1lcyBhbmQgdGhlIHZhbHVlcyBhcmUgdGhlIGZpbHRl
ciBmYWN0b3JpZXMuCisgICAqCisgICAqICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LXdhcm5p
bmciPgorICAgKiAgICAqKk5vdGU6KiogRmlsdGVyIG5hbWVzIG11c3QgYmUgdmFsaWQgYW5ndWxh
ciB7QGxpbmsgZXhwcmVzc2lvbn0gaWRlbnRpZmllcnMsIHN1Y2ggYXMgYHVwcGVyY2FzZWAgb3Ig
YG9yZGVyQnlgLgorICAgKiAgICBOYW1lcyB3aXRoIHNwZWNpYWwgY2hhcmFjdGVycywgc3VjaCBh
cyBoeXBoZW5zIGFuZCBkb3RzLCBhcmUgbm90IGFsbG93ZWQuIElmIHlvdSB3aXNoIHRvIG5hbWVz
cGFjZQorICAgKiAgICB5b3VyIGZpbHRlcnMsIHRoZW4geW91IGNhbiB1c2UgY2FwaXRhbGl6YXRp
b24gKGBteWFwcFN1YnNlY3Rpb25GaWx0ZXJ4YCkgb3IgdW5kZXJzY29yZXMKKyAgICogICAgKGBt
eWFwcF9zdWJzZWN0aW9uX2ZpbHRlcnhgKS4KKyAgICogICAgPC9kaXY+CisgICAqIEByZXR1cm5z
IHtPYmplY3R9IFJlZ2lzdGVyZWQgZmlsdGVyIGluc3RhbmNlLCBvciBpZiBhIG1hcCBvZiBmaWx0
ZXJzIHdhcyBwcm92aWRlZCB0aGVuIGEgbWFwCisgICAqICAgIG9mIHRoZSByZWdpc3RlcmVkIGZp
bHRlciBpbnN0YW5jZXMuCisgICAqLworICBmdW5jdGlvbiByZWdpc3RlcihuYW1lLCBmYWN0b3J5
KSB7CisgICAgaWYgKGlzT2JqZWN0KG5hbWUpKSB7CisgICAgICB2YXIgZmlsdGVycyA9IHt9Owor
ICAgICAgZm9yRWFjaChuYW1lLCBmdW5jdGlvbihmaWx0ZXIsIGtleSkgeworICAgICAgICBmaWx0
ZXJzW2tleV0gPSByZWdpc3RlcihrZXksIGZpbHRlcik7CisgICAgICB9KTsKKyAgICAgIHJldHVy
biBmaWx0ZXJzOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gJHByb3ZpZGUuZmFjdG9yeShu
YW1lICsgc3VmZml4LCBmYWN0b3J5KTsKKyAgICB9CisgIH0KKyAgdGhpcy5yZWdpc3RlciA9IHJl
Z2lzdGVyOworCisgIHRoaXMuJGdldCA9IFsnJGluamVjdG9yJywgZnVuY3Rpb24oJGluamVjdG9y
KSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKG5hbWUpIHsKKyAgICAgIHJldHVybiAkaW5qZWN0b3Iu
Z2V0KG5hbWUgKyBzdWZmaXgpOworICAgIH07CisgIH1dOworCisgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAvKiBnbG9iYWwKKyAgICBjdXJyZW5jeUZpbHRl
cjogZmFsc2UsCisgICAgZGF0ZUZpbHRlcjogZmFsc2UsCisgICAgZmlsdGVyRmlsdGVyOiBmYWxz
ZSwKKyAgICBqc29uRmlsdGVyOiBmYWxzZSwKKyAgICBsaW1pdFRvRmlsdGVyOiBmYWxzZSwKKyAg
ICBsb3dlcmNhc2VGaWx0ZXI6IGZhbHNlLAorICAgIG51bWJlckZpbHRlcjogZmFsc2UsCisgICAg
b3JkZXJCeUZpbHRlcjogZmFsc2UsCisgICAgdXBwZXJjYXNlRmlsdGVyOiBmYWxzZSwKKyAgKi8K
KworICByZWdpc3RlcignY3VycmVuY3knLCBjdXJyZW5jeUZpbHRlcik7CisgIHJlZ2lzdGVyKCdk
YXRlJywgZGF0ZUZpbHRlcik7CisgIHJlZ2lzdGVyKCdmaWx0ZXInLCBmaWx0ZXJGaWx0ZXIpOwor
ICByZWdpc3RlcignanNvbicsIGpzb25GaWx0ZXIpOworICByZWdpc3RlcignbGltaXRUbycsIGxp
bWl0VG9GaWx0ZXIpOworICByZWdpc3RlcignbG93ZXJjYXNlJywgbG93ZXJjYXNlRmlsdGVyKTsK
KyAgcmVnaXN0ZXIoJ251bWJlcicsIG51bWJlckZpbHRlcik7CisgIHJlZ2lzdGVyKCdvcmRlckJ5
Jywgb3JkZXJCeUZpbHRlcik7CisgIHJlZ2lzdGVyKCd1cHBlcmNhc2UnLCB1cHBlcmNhc2VGaWx0
ZXIpOworfQorCisvKioKKyAqIEBuZ2RvYyBmaWx0ZXIKKyAqIEBuYW1lIGZpbHRlcgorICogQGtp
bmQgZnVuY3Rpb24KKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFNlbGVjdHMgYSBzdWJzZXQgb2Yg
aXRlbXMgZnJvbSBgYXJyYXlgIGFuZCByZXR1cm5zIGl0IGFzIGEgbmV3IGFycmF5LgorICoKKyAq
IEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3VyY2UgYXJyYXkuCisgKiBAcGFyYW0ge3N0cmlu
Z3xPYmplY3R8ZnVuY3Rpb24oKX0gZXhwcmVzc2lvbiBUaGUgcHJlZGljYXRlIHRvIGJlIHVzZWQg
Zm9yIHNlbGVjdGluZyBpdGVtcyBmcm9tCisgKiAgIGBhcnJheWAuCisgKgorICogICBDYW4gYmUg
b25lIG9mOgorICoKKyAqICAgLSBgc3RyaW5nYDogVGhlIHN0cmluZyBpcyB1c2VkIGZvciBtYXRj
aGluZyBhZ2FpbnN0IHRoZSBjb250ZW50cyBvZiB0aGUgYGFycmF5YC4gQWxsIHN0cmluZ3Mgb3IK
KyAqICAgICBvYmplY3RzIHdpdGggc3RyaW5nIHByb3BlcnRpZXMgaW4gYGFycmF5YCB0aGF0IG1h
dGNoIHRoaXMgc3RyaW5nIHdpbGwgYmUgcmV0dXJuZWQuIFRoaXMgYWxzbworICogICAgIGFwcGxp
ZXMgdG8gbmVzdGVkIG9iamVjdCBwcm9wZXJ0aWVzLgorICogICAgIFRoZSBwcmVkaWNhdGUgY2Fu
IGJlIG5lZ2F0ZWQgYnkgcHJlZml4aW5nIHRoZSBzdHJpbmcgd2l0aCBgIWAuCisgKgorICogICAt
IGBPYmplY3RgOiBBIHBhdHRlcm4gb2JqZWN0IGNhbiBiZSB1c2VkIHRvIGZpbHRlciBzcGVjaWZp
YyBwcm9wZXJ0aWVzIG9uIG9iamVjdHMgY29udGFpbmVkCisgKiAgICAgYnkgYGFycmF5YC4gRm9y
IGV4YW1wbGUgYHtuYW1lOiJNIiwgcGhvbmU6IjEifWAgcHJlZGljYXRlIHdpbGwgcmV0dXJuIGFu
IGFycmF5IG9mIGl0ZW1zCisgKiAgICAgd2hpY2ggaGF2ZSBwcm9wZXJ0eSBgbmFtZWAgY29udGFp
bmluZyAiTSIgYW5kIHByb3BlcnR5IGBwaG9uZWAgY29udGFpbmluZyAiMSIuIEEgc3BlY2lhbAor
ICogICAgIHByb3BlcnR5IG5hbWUgYCRgIGNhbiBiZSB1c2VkIChhcyBpbiBgeyQ6InRleHQifWAp
IHRvIGFjY2VwdCBhIG1hdGNoIGFnYWluc3QgYW55CisgKiAgICAgcHJvcGVydHkgb2YgdGhlIG9i
amVjdCBvciBpdHMgbmVzdGVkIG9iamVjdCBwcm9wZXJ0aWVzLiBUaGF0J3MgZXF1aXZhbGVudCB0
byB0aGUgc2ltcGxlCisgKiAgICAgc3Vic3RyaW5nIG1hdGNoIHdpdGggYSBgc3RyaW5nYCBhcyBk
ZXNjcmliZWQgYWJvdmUuIFRoZSBwcmVkaWNhdGUgY2FuIGJlIG5lZ2F0ZWQgYnkgcHJlZml4aW5n
CisgKiAgICAgdGhlIHN0cmluZyB3aXRoIGAhYC4KKyAqICAgICBGb3IgZXhhbXBsZSBge25hbWU6
ICIhTSJ9YCBwcmVkaWNhdGUgd2lsbCByZXR1cm4gYW4gYXJyYXkgb2YgaXRlbXMgd2hpY2ggaGF2
ZSBwcm9wZXJ0eSBgbmFtZWAKKyAqICAgICBub3QgY29udGFpbmluZyAiTSIuCisgKgorICogICAg
IE5vdGUgdGhhdCBhIG5hbWVkIHByb3BlcnR5IHdpbGwgbWF0Y2ggcHJvcGVydGllcyBvbiB0aGUg
c2FtZSBsZXZlbCBvbmx5LCB3aGlsZSB0aGUgc3BlY2lhbAorICogICAgIGAkYCBwcm9wZXJ0eSB3
aWxsIG1hdGNoIHByb3BlcnRpZXMgb24gdGhlIHNhbWUgbGV2ZWwgb3IgZGVlcGVyLiBFLmcuIGFu
IGFycmF5IGl0ZW0gbGlrZQorICogICAgIGB7bmFtZToge2ZpcnN0OiAnSm9obicsIGxhc3Q6ICdE
b2UnfX1gIHdpbGwgKipub3QqKiBiZSBtYXRjaGVkIGJ5IGB7bmFtZTogJ0pvaG4nfWAsIGJ1dAor
ICogICAgICoqd2lsbCoqIGJlIG1hdGNoZWQgYnkgYHskOiAnSm9obid9YC4KKyAqCisgKiAgIC0g
YGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgYXJyYXkpYDogQSBwcmVkaWNhdGUgZnVuY3Rpb24gY2Fu
IGJlIHVzZWQgdG8gd3JpdGUgYXJiaXRyYXJ5IGZpbHRlcnMuCisgKiAgICAgVGhlIGZ1bmN0aW9u
IGlzIGNhbGxlZCBmb3IgZWFjaCBlbGVtZW50IG9mIHRoZSBhcnJheSwgd2l0aCB0aGUgZWxlbWVu
dCwgaXRzIGluZGV4LCBhbmQKKyAqICAgICB0aGUgZW50aXJlIGFycmF5IGl0c2VsZiBhcyBhcmd1
bWVudHMuCisgKgorICogICAgIFRoZSBmaW5hbCByZXN1bHQgaXMgYW4gYXJyYXkgb2YgdGhvc2Ug
ZWxlbWVudHMgdGhhdCB0aGUgcHJlZGljYXRlIHJldHVybmVkIHRydWUgZm9yLgorICoKKyAqIEBw
YXJhbSB7ZnVuY3Rpb24oYWN0dWFsLCBleHBlY3RlZCl8dHJ1ZXx1bmRlZmluZWR9IGNvbXBhcmF0
b3IgQ29tcGFyYXRvciB3aGljaCBpcyB1c2VkIGluCisgKiAgICAgZGV0ZXJtaW5pbmcgaWYgdGhl
IGV4cGVjdGVkIHZhbHVlIChmcm9tIHRoZSBmaWx0ZXIgZXhwcmVzc2lvbikgYW5kIGFjdHVhbCB2
YWx1ZSAoZnJvbQorICogICAgIHRoZSBvYmplY3QgaW4gdGhlIGFycmF5KSBzaG91bGQgYmUgY29u
c2lkZXJlZCBhIG1hdGNoLgorICoKKyAqICAgQ2FuIGJlIG9uZSBvZjoKKyAqCisgKiAgIC0gYGZ1
bmN0aW9uKGFjdHVhbCwgZXhwZWN0ZWQpYDoKKyAqICAgICBUaGUgZnVuY3Rpb24gd2lsbCBiZSBn
aXZlbiB0aGUgb2JqZWN0IHZhbHVlIGFuZCB0aGUgcHJlZGljYXRlIHZhbHVlIHRvIGNvbXBhcmUg
YW5kCisgKiAgICAgc2hvdWxkIHJldHVybiB0cnVlIGlmIGJvdGggdmFsdWVzIHNob3VsZCBiZSBj
b25zaWRlcmVkIGVxdWFsLgorICoKKyAqICAgLSBgdHJ1ZWA6IEEgc2hvcnRoYW5kIGZvciBgZnVu
Y3Rpb24oYWN0dWFsLCBleHBlY3RlZCkgeyByZXR1cm4gYW5ndWxhci5lcXVhbHMoYWN0dWFsLCBl
eHBlY3RlZCl9YC4KKyAqICAgICBUaGlzIGlzIGVzc2VudGlhbGx5IHN0cmljdCBjb21wYXJpc29u
IG9mIGV4cGVjdGVkIGFuZCBhY3R1YWwuCisgKgorICogICAtIGBmYWxzZXx1bmRlZmluZWRgOiBB
IHNob3J0IGhhbmQgZm9yIGEgZnVuY3Rpb24gd2hpY2ggd2lsbCBsb29rIGZvciBhIHN1YnN0cmlu
ZyBtYXRjaCBpbiBjYXNlCisgKiAgICAgaW5zZW5zaXRpdmUgd2F5LgorICoKKyAqICAgICBQcmlt
aXRpdmUgdmFsdWVzIGFyZSBjb252ZXJ0ZWQgdG8gc3RyaW5ncy4gT2JqZWN0cyBhcmUgbm90IGNv
bXBhcmVkIGFnYWluc3QgcHJpbWl0aXZlcywKKyAqICAgICB1bmxlc3MgdGhleSBoYXZlIGEgY3Vz
dG9tIGB0b1N0cmluZ2AgbWV0aG9kIChlLmcuIGBEYXRlYCBvYmplY3RzKS4KKyAqCisgKiBAZXhh
bXBsZQorICAgPGV4YW1wbGU+CisgICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICAg
IDxkaXYgbmctaW5pdD0iZnJpZW5kcyA9IFt7bmFtZTonSm9obicsIHBob25lOic1NTUtMTI3Nid9
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bmFtZTonTWFyeScsIHBob25lOic4
MDAtQklHLU1BUlknfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge25hbWU6J01p
a2UnLCBwaG9uZTonNTU1LTQzMjEnfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
e25hbWU6J0FkYW0nLCBwaG9uZTonNTU1LTU2NzgnfSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAge25hbWU6J0p1bGllJywgcGhvbmU6JzU1NS04NzY1J30sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHtuYW1lOidKdWxpZXR0ZScsIHBob25lOic1NTUtNTY3OCd9XSI+
PC9kaXY+CisKKyAgICAgICA8bGFiZWw+U2VhcmNoOiA8aW5wdXQgbmctbW9kZWw9InNlYXJjaFRl
eHQiPjwvbGFiZWw+CisgICAgICAgPHRhYmxlIGlkPSJzZWFyY2hUZXh0UmVzdWx0cyI+CisgICAg
ICAgICA8dHI+PHRoPk5hbWU8L3RoPjx0aD5QaG9uZTwvdGg+PC90cj4KKyAgICAgICAgIDx0ciBu
Zy1yZXBlYXQ9ImZyaWVuZCBpbiBmcmllbmRzIHwgZmlsdGVyOnNlYXJjaFRleHQiPgorICAgICAg
ICAgICA8dGQ+e3tmcmllbmQubmFtZX19PC90ZD4KKyAgICAgICAgICAgPHRkPnt7ZnJpZW5kLnBo
b25lfX08L3RkPgorICAgICAgICAgPC90cj4KKyAgICAgICA8L3RhYmxlPgorICAgICAgIDxocj4K
KyAgICAgICA8bGFiZWw+QW55OiA8aW5wdXQgbmctbW9kZWw9InNlYXJjaC4kIj48L2xhYmVsPiA8
YnI+CisgICAgICAgPGxhYmVsPk5hbWUgb25seSA8aW5wdXQgbmctbW9kZWw9InNlYXJjaC5uYW1l
Ij48L2xhYmVsPjxicj4KKyAgICAgICA8bGFiZWw+UGhvbmUgb25seSA8aW5wdXQgbmctbW9kZWw9
InNlYXJjaC5waG9uZSI+PC9sYWJlbD48YnI+CisgICAgICAgPGxhYmVsPkVxdWFsaXR5IDxpbnB1
dCB0eXBlPSJjaGVja2JveCIgbmctbW9kZWw9InN0cmljdCI+PC9sYWJlbD48YnI+CisgICAgICAg
PHRhYmxlIGlkPSJzZWFyY2hPYmpSZXN1bHRzIj4KKyAgICAgICAgIDx0cj48dGg+TmFtZTwvdGg+
PHRoPlBob25lPC90aD48L3RyPgorICAgICAgICAgPHRyIG5nLXJlcGVhdD0iZnJpZW5kT2JqIGlu
IGZyaWVuZHMgfCBmaWx0ZXI6c2VhcmNoOnN0cmljdCI+CisgICAgICAgICAgIDx0ZD57e2ZyaWVu
ZE9iai5uYW1lfX08L3RkPgorICAgICAgICAgICA8dGQ+e3tmcmllbmRPYmoucGhvbmV9fTwvdGQ+
CisgICAgICAgICA8L3RyPgorICAgICAgIDwvdGFibGU+CisgICAgIDwvZmlsZT4KKyAgICAgPGZp
bGUgbmFtZT0icHJvdHJhY3Rvci5qcyIgdHlwZT0icHJvdHJhY3RvciI+CisgICAgICAgdmFyIGV4
cGVjdEZyaWVuZE5hbWVzID0gZnVuY3Rpb24oZXhwZWN0ZWROYW1lcywga2V5KSB7CisgICAgICAg
ICBlbGVtZW50LmFsbChieS5yZXBlYXRlcihrZXkgKyAnIGluIGZyaWVuZHMnKS5jb2x1bW4oa2V5
ICsgJy5uYW1lJykpLnRoZW4oZnVuY3Rpb24oYXJyKSB7CisgICAgICAgICAgIGFyci5mb3JFYWNo
KGZ1bmN0aW9uKHdkLCBpKSB7CisgICAgICAgICAgICAgZXhwZWN0KHdkLmdldFRleHQoKSkudG9N
YXRjaChleHBlY3RlZE5hbWVzW2ldKTsKKyAgICAgICAgICAgfSk7CisgICAgICAgICB9KTsKKyAg
ICAgICB9OworCisgICAgICAgaXQoJ3Nob3VsZCBzZWFyY2ggYWNyb3NzIGFsbCBmaWVsZHMgd2hl
biBmaWx0ZXJpbmcgd2l0aCBhIHN0cmluZycsIGZ1bmN0aW9uKCkgeworICAgICAgICAgdmFyIHNl
YXJjaFRleHQgPSBlbGVtZW50KGJ5Lm1vZGVsKCdzZWFyY2hUZXh0JykpOworICAgICAgICAgc2Vh
cmNoVGV4dC5jbGVhcigpOworICAgICAgICAgc2VhcmNoVGV4dC5zZW5kS2V5cygnbScpOworICAg
ICAgICAgZXhwZWN0RnJpZW5kTmFtZXMoWydNYXJ5JywgJ01pa2UnLCAnQWRhbSddLCAnZnJpZW5k
Jyk7CisKKyAgICAgICAgIHNlYXJjaFRleHQuY2xlYXIoKTsKKyAgICAgICAgIHNlYXJjaFRleHQu
c2VuZEtleXMoJzc2Jyk7CisgICAgICAgICBleHBlY3RGcmllbmROYW1lcyhbJ0pvaG4nLCAnSnVs
aWUnXSwgJ2ZyaWVuZCcpOworICAgICAgIH0pOworCisgICAgICAgaXQoJ3Nob3VsZCBzZWFyY2gg
aW4gc3BlY2lmaWMgZmllbGRzIHdoZW4gZmlsdGVyaW5nIHdpdGggYSBwcmVkaWNhdGUgb2JqZWN0
JywgZnVuY3Rpb24oKSB7CisgICAgICAgICB2YXIgc2VhcmNoQW55ID0gZWxlbWVudChieS5tb2Rl
bCgnc2VhcmNoLiQnKSk7CisgICAgICAgICBzZWFyY2hBbnkuY2xlYXIoKTsKKyAgICAgICAgIHNl
YXJjaEFueS5zZW5kS2V5cygnaScpOworICAgICAgICAgZXhwZWN0RnJpZW5kTmFtZXMoWydNYXJ5
JywgJ01pa2UnLCAnSnVsaWUnLCAnSnVsaWV0dGUnXSwgJ2ZyaWVuZE9iaicpOworICAgICAgIH0p
OworICAgICAgIGl0KCdzaG91bGQgdXNlIGEgZXF1YWwgY29tcGFyaXNvbiB3aGVuIGNvbXBhcmF0
b3IgaXMgdHJ1ZScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgdmFyIHNlYXJjaE5hbWUgPSBlbGVt
ZW50KGJ5Lm1vZGVsKCdzZWFyY2gubmFtZScpKTsKKyAgICAgICAgIHZhciBzdHJpY3QgPSBlbGVt
ZW50KGJ5Lm1vZGVsKCdzdHJpY3QnKSk7CisgICAgICAgICBzZWFyY2hOYW1lLmNsZWFyKCk7Cisg
ICAgICAgICBzZWFyY2hOYW1lLnNlbmRLZXlzKCdKdWxpZScpOworICAgICAgICAgc3RyaWN0LmNs
aWNrKCk7CisgICAgICAgICBleHBlY3RGcmllbmROYW1lcyhbJ0p1bGllJ10sICdmcmllbmRPYmon
KTsKKyAgICAgICB9KTsKKyAgICAgPC9maWxlPgorICAgPC9leGFtcGxlPgorICovCitmdW5jdGlv
biBmaWx0ZXJGaWx0ZXIoKSB7CisgIHJldHVybiBmdW5jdGlvbihhcnJheSwgZXhwcmVzc2lvbiwg
Y29tcGFyYXRvcikgeworICAgIGlmICghaXNBcnJheUxpa2UoYXJyYXkpKSB7CisgICAgICBpZiAo
YXJyYXkgPT0gbnVsbCkgeworICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgICB9IGVsc2Ugewor
ICAgICAgICB0aHJvdyBtaW5FcnIoJ2ZpbHRlcicpKCdub3RhcnJheScsICdFeHBlY3RlZCBhcnJh
eSBidXQgcmVjZWl2ZWQ6IHswfScsIGFycmF5KTsKKyAgICAgIH0KKyAgICB9CisKKyAgICB2YXIg
ZXhwcmVzc2lvblR5cGUgPSBnZXRUeXBlRm9yRmlsdGVyKGV4cHJlc3Npb24pOworICAgIHZhciBw
cmVkaWNhdGVGbjsKKyAgICB2YXIgbWF0Y2hBZ2FpbnN0QW55UHJvcDsKKworICAgIHN3aXRjaCAo
ZXhwcmVzc2lvblR5cGUpIHsKKyAgICAgIGNhc2UgJ2Z1bmN0aW9uJzoKKyAgICAgICAgcHJlZGlj
YXRlRm4gPSBleHByZXNzaW9uOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ2Jvb2xlYW4n
OgorICAgICAgY2FzZSAnbnVsbCc6CisgICAgICBjYXNlICdudW1iZXInOgorICAgICAgY2FzZSAn
c3RyaW5nJzoKKyAgICAgICAgbWF0Y2hBZ2FpbnN0QW55UHJvcCA9IHRydWU7CisgICAgICAgIC8v
anNoaW50IC1XMDg2CisgICAgICBjYXNlICdvYmplY3QnOgorICAgICAgICAvL2pzaGludCArVzA4
NgorICAgICAgICBwcmVkaWNhdGVGbiA9IGNyZWF0ZVByZWRpY2F0ZUZuKGV4cHJlc3Npb24sIGNv
bXBhcmF0b3IsIG1hdGNoQWdhaW5zdEFueVByb3ApOworICAgICAgICBicmVhazsKKyAgICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBhcnJheTsKKyAgICB9CisKKyAgICByZXR1cm4gQXJyYXku
cHJvdG90eXBlLmZpbHRlci5jYWxsKGFycmF5LCBwcmVkaWNhdGVGbik7CisgIH07Cit9CisKKy8v
IEhlbHBlciBmdW5jdGlvbnMgZm9yIGBmaWx0ZXJGaWx0ZXJgCitmdW5jdGlvbiBjcmVhdGVQcmVk
aWNhdGVGbihleHByZXNzaW9uLCBjb21wYXJhdG9yLCBtYXRjaEFnYWluc3RBbnlQcm9wKSB7Cisg
IHZhciBzaG91bGRNYXRjaFByaW1pdGl2ZXMgPSBpc09iamVjdChleHByZXNzaW9uKSAmJiAoJyQn
IGluIGV4cHJlc3Npb24pOworICB2YXIgcHJlZGljYXRlRm47CisKKyAgaWYgKGNvbXBhcmF0b3Ig
PT09IHRydWUpIHsKKyAgICBjb21wYXJhdG9yID0gZXF1YWxzOworICB9IGVsc2UgaWYgKCFpc0Z1
bmN0aW9uKGNvbXBhcmF0b3IpKSB7CisgICAgY29tcGFyYXRvciA9IGZ1bmN0aW9uKGFjdHVhbCwg
ZXhwZWN0ZWQpIHsKKyAgICAgIGlmIChpc1VuZGVmaW5lZChhY3R1YWwpKSB7CisgICAgICAgIC8v
IE5vIHN1YnN0cmluZyBtYXRjaGluZyBhZ2FpbnN0IGB1bmRlZmluZWRgCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgIH0KKyAgICAgIGlmICgoYWN0dWFsID09PSBudWxsKSB8fCAoZXhwZWN0
ZWQgPT09IG51bGwpKSB7CisgICAgICAgIC8vIE5vIHN1YnN0cmluZyBtYXRjaGluZyBhZ2FpbnN0
IGBudWxsYDsgb25seSBtYXRjaCBhZ2FpbnN0IGBudWxsYAorICAgICAgICByZXR1cm4gYWN0dWFs
ID09PSBleHBlY3RlZDsKKyAgICAgIH0KKyAgICAgIGlmIChpc09iamVjdChleHBlY3RlZCkgfHwg
KGlzT2JqZWN0KGFjdHVhbCkgJiYgIWhhc0N1c3RvbVRvU3RyaW5nKGFjdHVhbCkpKSB7CisgICAg
ICAgIC8vIFNob3VsZCBub3QgY29tcGFyZSBwcmltaXRpdmVzIGFnYWluc3Qgb2JqZWN0cywgdW5s
ZXNzIHRoZXkgaGF2ZSBjdXN0b20gYHRvU3RyaW5nYCBtZXRob2QKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgfQorCisgICAgICBhY3R1YWwgPSBsb3dlcmNhc2UoJycgKyBhY3R1YWwpOwor
ICAgICAgZXhwZWN0ZWQgPSBsb3dlcmNhc2UoJycgKyBleHBlY3RlZCk7CisgICAgICByZXR1cm4g
YWN0dWFsLmluZGV4T2YoZXhwZWN0ZWQpICE9PSAtMTsKKyAgICB9OworICB9CisKKyAgcHJlZGlj
YXRlRm4gPSBmdW5jdGlvbihpdGVtKSB7CisgICAgaWYgKHNob3VsZE1hdGNoUHJpbWl0aXZlcyAm
JiAhaXNPYmplY3QoaXRlbSkpIHsKKyAgICAgIHJldHVybiBkZWVwQ29tcGFyZShpdGVtLCBleHBy
ZXNzaW9uLiQsIGNvbXBhcmF0b3IsIGZhbHNlKTsKKyAgICB9CisgICAgcmV0dXJuIGRlZXBDb21w
YXJlKGl0ZW0sIGV4cHJlc3Npb24sIGNvbXBhcmF0b3IsIG1hdGNoQWdhaW5zdEFueVByb3ApOwor
ICB9OworCisgIHJldHVybiBwcmVkaWNhdGVGbjsKK30KKworZnVuY3Rpb24gZGVlcENvbXBhcmUo
YWN0dWFsLCBleHBlY3RlZCwgY29tcGFyYXRvciwgbWF0Y2hBZ2FpbnN0QW55UHJvcCwgZG9udE1h
dGNoV2hvbGVPYmplY3QpIHsKKyAgdmFyIGFjdHVhbFR5cGUgPSBnZXRUeXBlRm9yRmlsdGVyKGFj
dHVhbCk7CisgIHZhciBleHBlY3RlZFR5cGUgPSBnZXRUeXBlRm9yRmlsdGVyKGV4cGVjdGVkKTsK
KworICBpZiAoKGV4cGVjdGVkVHlwZSA9PT0gJ3N0cmluZycpICYmIChleHBlY3RlZC5jaGFyQXQo
MCkgPT09ICchJykpIHsKKyAgICByZXR1cm4gIWRlZXBDb21wYXJlKGFjdHVhbCwgZXhwZWN0ZWQu
c3Vic3RyaW5nKDEpLCBjb21wYXJhdG9yLCBtYXRjaEFnYWluc3RBbnlQcm9wKTsKKyAgfSBlbHNl
IGlmIChpc0FycmF5KGFjdHVhbCkpIHsKKyAgICAvLyBJbiBjYXNlIGBhY3R1YWxgIGlzIGFuIGFy
cmF5LCBjb25zaWRlciBpdCBhIG1hdGNoCisgICAgLy8gaWYgQU5ZIG9mIGl0J3MgaXRlbXMgbWF0
Y2hlcyBgZXhwZWN0ZWRgCisgICAgcmV0dXJuIGFjdHVhbC5zb21lKGZ1bmN0aW9uKGl0ZW0pIHsK
KyAgICAgIHJldHVybiBkZWVwQ29tcGFyZShpdGVtLCBleHBlY3RlZCwgY29tcGFyYXRvciwgbWF0
Y2hBZ2FpbnN0QW55UHJvcCk7CisgICAgfSk7CisgIH0KKworICBzd2l0Y2ggKGFjdHVhbFR5cGUp
IHsKKyAgICBjYXNlICdvYmplY3QnOgorICAgICAgdmFyIGtleTsKKyAgICAgIGlmIChtYXRjaEFn
YWluc3RBbnlQcm9wKSB7CisgICAgICAgIGZvciAoa2V5IGluIGFjdHVhbCkgeworICAgICAgICAg
IGlmICgoa2V5LmNoYXJBdCgwKSAhPT0gJyQnKSAmJiBkZWVwQ29tcGFyZShhY3R1YWxba2V5XSwg
ZXhwZWN0ZWQsIGNvbXBhcmF0b3IsIHRydWUpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRvbnRNYXRjaFdob2xlT2Jq
ZWN0ID8gZmFsc2UgOiBkZWVwQ29tcGFyZShhY3R1YWwsIGV4cGVjdGVkLCBjb21wYXJhdG9yLCBm
YWxzZSk7CisgICAgICB9IGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gJ29iamVjdCcpIHsKKyAg
ICAgICAgZm9yIChrZXkgaW4gZXhwZWN0ZWQpIHsKKyAgICAgICAgICB2YXIgZXhwZWN0ZWRWYWwg
PSBleHBlY3RlZFtrZXldOworICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGV4cGVjdGVkVmFsKSB8
fCBpc1VuZGVmaW5lZChleHBlY3RlZFZhbCkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgIH0KKworICAgICAgICAgIHZhciBtYXRjaEFueVByb3BlcnR5ID0ga2V5ID09PSAnJCc7
CisgICAgICAgICAgdmFyIGFjdHVhbFZhbCA9IG1hdGNoQW55UHJvcGVydHkgPyBhY3R1YWwgOiBh
Y3R1YWxba2V5XTsKKyAgICAgICAgICBpZiAoIWRlZXBDb21wYXJlKGFjdHVhbFZhbCwgZXhwZWN0
ZWRWYWwsIGNvbXBhcmF0b3IsIG1hdGNoQW55UHJvcGVydHksIG1hdGNoQW55UHJvcGVydHkpKSB7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGNvbXBhcmF0
b3IoYWN0dWFsLCBleHBlY3RlZCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlICdm
dW5jdGlvbic6CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVy
biBjb21wYXJhdG9yKGFjdHVhbCwgZXhwZWN0ZWQpOworICB9Cit9CisKKy8vIFVzZWQgZm9yIGVh
c2lseSBkaWZmZXJlbnRpYXRpbmcgYmV0d2VlbiBgbnVsbGAgYW5kIGFjdHVhbCBgb2JqZWN0YAor
ZnVuY3Rpb24gZ2V0VHlwZUZvckZpbHRlcih2YWwpIHsKKyAgcmV0dXJuICh2YWwgPT09IG51bGwp
ID8gJ251bGwnIDogdHlwZW9mIHZhbDsKK30KKworLyoqCisgKiBAbmdkb2MgZmlsdGVyCisgKiBA
bmFtZSBjdXJyZW5jeQorICogQGtpbmQgZnVuY3Rpb24KKyAqCisgKiBAZGVzY3JpcHRpb24KKyAq
IEZvcm1hdHMgYSBudW1iZXIgYXMgYSBjdXJyZW5jeSAoaWUgJDEsMjM0LjU2KS4gV2hlbiBubyBj
dXJyZW5jeSBzeW1ib2wgaXMgcHJvdmlkZWQsIGRlZmF1bHQKKyAqIHN5bWJvbCBmb3IgY3VycmVu
dCBsb2NhbGUgaXMgdXNlZC4KKyAqCisgKiBAcGFyYW0ge251bWJlcn0gYW1vdW50IElucHV0IHRv
IGZpbHRlci4KKyAqIEBwYXJhbSB7c3RyaW5nPX0gc3ltYm9sIEN1cnJlbmN5IHN5bWJvbCBvciBp
ZGVudGlmaWVyIHRvIGJlIGRpc3BsYXllZC4KKyAqIEBwYXJhbSB7bnVtYmVyPX0gZnJhY3Rpb25T
aXplIE51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyB0byByb3VuZCB0aGUgYW1vdW50IHRvLCBkZWZh
dWx0cyB0byBkZWZhdWx0IG1heCBmcmFjdGlvbiBzaXplIGZvciBjdXJyZW50IGxvY2FsZQorICog
QHJldHVybnMge3N0cmluZ30gRm9ybWF0dGVkIG51bWJlci4KKyAqCisgKgorICogQGV4YW1wbGUK
KyAgIDxleGFtcGxlIG1vZHVsZT0iY3VycmVuY3lFeGFtcGxlIj4KKyAgICAgPGZpbGUgbmFtZT0i
aW5kZXguaHRtbCI+CisgICAgICAgPHNjcmlwdD4KKyAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCdj
dXJyZW5jeUV4YW1wbGUnLCBbXSkKKyAgICAgICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250
cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHsKKyAgICAgICAgICAgICAkc2Nv
cGUuYW1vdW50ID0gMTIzNC41NjsKKyAgICAgICAgICAgfV0pOworICAgICAgIDwvc2NyaXB0Pgor
ICAgICAgIDxkaXYgbmctY29udHJvbGxlcj0iRXhhbXBsZUNvbnRyb2xsZXIiPgorICAgICAgICAg
PGlucHV0IHR5cGU9Im51bWJlciIgbmctbW9kZWw9ImFtb3VudCIgYXJpYS1sYWJlbD0iYW1vdW50
Ij4gPGJyPgorICAgICAgICAgZGVmYXVsdCBjdXJyZW5jeSBzeW1ib2wgKCQpOiA8c3BhbiBpZD0i
Y3VycmVuY3ktZGVmYXVsdCI+e3thbW91bnQgfCBjdXJyZW5jeX19PC9zcGFuPjxicj4KKyAgICAg
ICAgIGN1c3RvbSBjdXJyZW5jeSBpZGVudGlmaWVyIChVU0QkKTogPHNwYW4gaWQ9ImN1cnJlbmN5
LWN1c3RvbSI+e3thbW91bnQgfCBjdXJyZW5jeToiVVNEJCJ9fTwvc3Bhbj4KKyAgICAgICAgIG5v
IGZyYWN0aW9ucyAoMCk6IDxzcGFuIGlkPSJjdXJyZW5jeS1uby1mcmFjdGlvbnMiPnt7YW1vdW50
IHwgY3VycmVuY3k6IlVTRCQiOjB9fTwvc3Bhbj4KKyAgICAgICA8L2Rpdj4KKyAgICAgPC9maWxl
PgorICAgICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFjdG9yIj4KKyAg
ICAgICBpdCgnc2hvdWxkIGluaXQgd2l0aCAxMjM0LjU2JywgZnVuY3Rpb24oKSB7CisgICAgICAg
ICBleHBlY3QoZWxlbWVudChieS5pZCgnY3VycmVuY3ktZGVmYXVsdCcpKS5nZXRUZXh0KCkpLnRv
QmUoJyQxLDIzNC41NicpOworICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ2N1cnJlbmN5
LWN1c3RvbScpKS5nZXRUZXh0KCkpLnRvQmUoJ1VTRCQxLDIzNC41NicpOworICAgICAgICAgZXhw
ZWN0KGVsZW1lbnQoYnkuaWQoJ2N1cnJlbmN5LW5vLWZyYWN0aW9ucycpKS5nZXRUZXh0KCkpLnRv
QmUoJ1VTRCQxLDIzNScpOworICAgICAgIH0pOworICAgICAgIGl0KCdzaG91bGQgdXBkYXRlJywg
ZnVuY3Rpb24oKSB7CisgICAgICAgICBpZiAoYnJvd3Nlci5wYXJhbXMuYnJvd3NlciA9PSAnc2Fm
YXJpJykgeworICAgICAgICAgICAvLyBTYWZhcmkgZG9lcyBub3QgdW5kZXJzdGFuZCB0aGUgbWlu
dXMga2V5LiBTZWUKKyAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvcHJv
dHJhY3Rvci9pc3N1ZXMvNDgxCisgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgIH0KKyAgICAg
ICAgIGVsZW1lbnQoYnkubW9kZWwoJ2Ftb3VudCcpKS5jbGVhcigpOworICAgICAgICAgZWxlbWVu
dChieS5tb2RlbCgnYW1vdW50JykpLnNlbmRLZXlzKCctMTIzNCcpOworICAgICAgICAgZXhwZWN0
KGVsZW1lbnQoYnkuaWQoJ2N1cnJlbmN5LWRlZmF1bHQnKSkuZ2V0VGV4dCgpKS50b0JlKCcoJDEs
MjM0LjAwKScpOworICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ2N1cnJlbmN5LWN1c3Rv
bScpKS5nZXRUZXh0KCkpLnRvQmUoJyhVU0QkMSwyMzQuMDApJyk7CisgICAgICAgICBleHBlY3Qo
ZWxlbWVudChieS5pZCgnY3VycmVuY3ktbm8tZnJhY3Rpb25zJykpLmdldFRleHQoKSkudG9CZSgn
KFVTRCQxLDIzNCknKTsKKyAgICAgICB9KTsKKyAgICAgPC9maWxlPgorICAgPC9leGFtcGxlPgor
ICovCitjdXJyZW5jeUZpbHRlci4kaW5qZWN0ID0gWyckbG9jYWxlJ107CitmdW5jdGlvbiBjdXJy
ZW5jeUZpbHRlcigkbG9jYWxlKSB7CisgIHZhciBmb3JtYXRzID0gJGxvY2FsZS5OVU1CRVJfRk9S
TUFUUzsKKyAgcmV0dXJuIGZ1bmN0aW9uKGFtb3VudCwgY3VycmVuY3lTeW1ib2wsIGZyYWN0aW9u
U2l6ZSkgeworICAgIGlmIChpc1VuZGVmaW5lZChjdXJyZW5jeVN5bWJvbCkpIHsKKyAgICAgIGN1
cnJlbmN5U3ltYm9sID0gZm9ybWF0cy5DVVJSRU5DWV9TWU07CisgICAgfQorCisgICAgaWYgKGlz
VW5kZWZpbmVkKGZyYWN0aW9uU2l6ZSkpIHsKKyAgICAgIGZyYWN0aW9uU2l6ZSA9IGZvcm1hdHMu
UEFUVEVSTlNbMV0ubWF4RnJhYzsKKyAgICB9CisKKyAgICAvLyBpZiBudWxsIG9yIHVuZGVmaW5l
ZCBwYXNzIGl0IHRocm91Z2gKKyAgICByZXR1cm4gKGFtb3VudCA9PSBudWxsKQorICAgICAgICA/
IGFtb3VudAorICAgICAgICA6IGZvcm1hdE51bWJlcihhbW91bnQsIGZvcm1hdHMuUEFUVEVSTlNb
MV0sIGZvcm1hdHMuR1JPVVBfU0VQLCBmb3JtYXRzLkRFQ0lNQUxfU0VQLCBmcmFjdGlvblNpemUp
LgorICAgICAgICAgICAgcmVwbGFjZSgvXHUwMEE0L2csIGN1cnJlbmN5U3ltYm9sKTsKKyAgfTsK
K30KKworLyoqCisgKiBAbmdkb2MgZmlsdGVyCisgKiBAbmFtZSBudW1iZXIKKyAqIEBraW5kIGZ1
bmN0aW9uCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBGb3JtYXRzIGEgbnVtYmVyIGFzIHRleHQu
CisgKgorICogSWYgdGhlIGlucHV0IGlzIG51bGwgb3IgdW5kZWZpbmVkLCBpdCB3aWxsIGp1c3Qg
YmUgcmV0dXJuZWQuCisgKiBJZiB0aGUgaW5wdXQgaXMgaW5maW5pdGUgKEluZmluaXR5Ly1JbmZp
bml0eSkgdGhlIEluZmluaXR5IHN5bWJvbCAn4oieJyBpcyByZXR1cm5lZC4KKyAqIElmIHRoZSBp
bnB1dCBpcyBub3QgYSBudW1iZXIgYW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLgorICoKKyAq
CisgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IG51bWJlciBOdW1iZXIgdG8gZm9ybWF0LgorICog
QHBhcmFtIHsobnVtYmVyfHN0cmluZyk9fSBmcmFjdGlvblNpemUgTnVtYmVyIG9mIGRlY2ltYWwg
cGxhY2VzIHRvIHJvdW5kIHRoZSBudW1iZXIgdG8uCisgKiBJZiB0aGlzIGlzIG5vdCBwcm92aWRl
ZCB0aGVuIHRoZSBmcmFjdGlvbiBzaXplIGlzIGNvbXB1dGVkIGZyb20gdGhlIGN1cnJlbnQgbG9j
YWxlJ3MgbnVtYmVyCisgKiBmb3JtYXR0aW5nIHBhdHRlcm4uIEluIHRoZSBjYXNlIG9mIHRoZSBk
ZWZhdWx0IGxvY2FsZSwgaXQgd2lsbCBiZSAzLgorICogQHJldHVybnMge3N0cmluZ30gTnVtYmVy
IHJvdW5kZWQgdG8gZGVjaW1hbFBsYWNlcyBhbmQgcGxhY2VzIGEg4oCcLOKAnSBhZnRlciBlYWNo
IHRoaXJkIGRpZ2l0LgorICoKKyAqIEBleGFtcGxlCisgICA8ZXhhbXBsZSBtb2R1bGU9Im51bWJl
ckZpbHRlckV4YW1wbGUiPgorICAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgICA8
c2NyaXB0PgorICAgICAgICAgYW5ndWxhci5tb2R1bGUoJ251bWJlckZpbHRlckV4YW1wbGUnLCBb
XSkKKyAgICAgICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUn
LCBmdW5jdGlvbigkc2NvcGUpIHsKKyAgICAgICAgICAgICAkc2NvcGUudmFsID0gMTIzNC41Njc4
OTsKKyAgICAgICAgICAgfV0pOworICAgICAgIDwvc2NyaXB0PgorICAgICAgIDxkaXYgbmctY29u
dHJvbGxlcj0iRXhhbXBsZUNvbnRyb2xsZXIiPgorICAgICAgICAgPGxhYmVsPkVudGVyIG51bWJl
cjogPGlucHV0IG5nLW1vZGVsPSd2YWwnPjwvbGFiZWw+PGJyPgorICAgICAgICAgRGVmYXVsdCBm
b3JtYXR0aW5nOiA8c3BhbiBpZD0nbnVtYmVyLWRlZmF1bHQnPnt7dmFsIHwgbnVtYmVyfX08L3Nw
YW4+PGJyPgorICAgICAgICAgTm8gZnJhY3Rpb25zOiA8c3Bhbj57e3ZhbCB8IG51bWJlcjowfX08
L3NwYW4+PGJyPgorICAgICAgICAgTmVnYXRpdmUgbnVtYmVyOiA8c3Bhbj57ey12YWwgfCBudW1i
ZXI6NH19PC9zcGFuPgorICAgICAgIDwvZGl2PgorICAgICA8L2ZpbGU+CisgICAgIDxmaWxlIG5h
bWU9InByb3RyYWN0b3IuanMiIHR5cGU9InByb3RyYWN0b3IiPgorICAgICAgIGl0KCdzaG91bGQg
Zm9ybWF0IG51bWJlcnMnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5
LmlkKCdudW1iZXItZGVmYXVsdCcpKS5nZXRUZXh0KCkpLnRvQmUoJzEsMjM0LjU2OCcpOworICAg
ICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGluZygndmFsIHwgbnVtYmVyOjAnKSkuZ2V0VGV4
dCgpKS50b0JlKCcxLDIzNScpOworICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGluZygn
LXZhbCB8IG51bWJlcjo0JykpLmdldFRleHQoKSkudG9CZSgnLTEsMjM0LjU2NzknKTsKKyAgICAg
ICB9KTsKKworICAgICAgIGl0KCdzaG91bGQgdXBkYXRlJywgZnVuY3Rpb24oKSB7CisgICAgICAg
ICBlbGVtZW50KGJ5Lm1vZGVsKCd2YWwnKSkuY2xlYXIoKTsKKyAgICAgICAgIGVsZW1lbnQoYnku
bW9kZWwoJ3ZhbCcpKS5zZW5kS2V5cygnMzM3NC4zMzMnKTsKKyAgICAgICAgIGV4cGVjdChlbGVt
ZW50KGJ5LmlkKCdudW1iZXItZGVmYXVsdCcpKS5nZXRUZXh0KCkpLnRvQmUoJzMsMzc0LjMzMycp
OworICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGluZygndmFsIHwgbnVtYmVyOjAnKSku
Z2V0VGV4dCgpKS50b0JlKCczLDM3NCcpOworICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuYmlu
ZGluZygnLXZhbCB8IG51bWJlcjo0JykpLmdldFRleHQoKSkudG9CZSgnLTMsMzc0LjMzMzAnKTsK
KyAgICAgIH0pOworICAgICA8L2ZpbGU+CisgICA8L2V4YW1wbGU+CisgKi8KKworCitudW1iZXJG
aWx0ZXIuJGluamVjdCA9IFsnJGxvY2FsZSddOworZnVuY3Rpb24gbnVtYmVyRmlsdGVyKCRsb2Nh
bGUpIHsKKyAgdmFyIGZvcm1hdHMgPSAkbG9jYWxlLk5VTUJFUl9GT1JNQVRTOworICByZXR1cm4g
ZnVuY3Rpb24obnVtYmVyLCBmcmFjdGlvblNpemUpIHsKKworICAgIC8vIGlmIG51bGwgb3IgdW5k
ZWZpbmVkIHBhc3MgaXQgdGhyb3VnaAorICAgIHJldHVybiAobnVtYmVyID09IG51bGwpCisgICAg
ICAgID8gbnVtYmVyCisgICAgICAgIDogZm9ybWF0TnVtYmVyKG51bWJlciwgZm9ybWF0cy5QQVRU
RVJOU1swXSwgZm9ybWF0cy5HUk9VUF9TRVAsIGZvcm1hdHMuREVDSU1BTF9TRVAsCisgICAgICAg
ICAgICAgICAgICAgICAgIGZyYWN0aW9uU2l6ZSk7CisgIH07Cit9CisKK3ZhciBERUNJTUFMX1NF
UCA9ICcuJzsKK2Z1bmN0aW9uIGZvcm1hdE51bWJlcihudW1iZXIsIHBhdHRlcm4sIGdyb3VwU2Vw
LCBkZWNpbWFsU2VwLCBmcmFjdGlvblNpemUpIHsKKyAgaWYgKGlzT2JqZWN0KG51bWJlcikpIHJl
dHVybiAnJzsKKworICB2YXIgaXNOZWdhdGl2ZSA9IG51bWJlciA8IDA7CisgIG51bWJlciA9IE1h
dGguYWJzKG51bWJlcik7CisKKyAgdmFyIGlzSW5maW5pdHkgPSBudW1iZXIgPT09IEluZmluaXR5
OworICBpZiAoIWlzSW5maW5pdHkgJiYgIWlzRmluaXRlKG51bWJlcikpIHJldHVybiAnJzsKKwor
ICB2YXIgbnVtU3RyID0gbnVtYmVyICsgJycsCisgICAgICBmb3JtYXRlZFRleHQgPSAnJywKKyAg
ICAgIGhhc0V4cG9uZW50ID0gZmFsc2UsCisgICAgICBwYXJ0cyA9IFtdOworCisgIGlmIChpc0lu
ZmluaXR5KSBmb3JtYXRlZFRleHQgPSAnXHUyMjFlJzsKKworICBpZiAoIWlzSW5maW5pdHkgJiYg
bnVtU3RyLmluZGV4T2YoJ2UnKSAhPT0gLTEpIHsKKyAgICB2YXIgbWF0Y2ggPSBudW1TdHIubWF0
Y2goLyhbXGRcLl0rKWUoLT8pKFxkKykvKTsKKyAgICBpZiAobWF0Y2ggJiYgbWF0Y2hbMl0gPT0g
Jy0nICYmIG1hdGNoWzNdID4gZnJhY3Rpb25TaXplICsgMSkgeworICAgICAgbnVtYmVyID0gMDsK
KyAgICB9IGVsc2UgeworICAgICAgZm9ybWF0ZWRUZXh0ID0gbnVtU3RyOworICAgICAgaGFzRXhw
b25lbnQgPSB0cnVlOworICAgIH0KKyAgfQorCisgIGlmICghaXNJbmZpbml0eSAmJiAhaGFzRXhw
b25lbnQpIHsKKyAgICB2YXIgZnJhY3Rpb25MZW4gPSAobnVtU3RyLnNwbGl0KERFQ0lNQUxfU0VQ
KVsxXSB8fCAnJykubGVuZ3RoOworCisgICAgLy8gZGV0ZXJtaW5lIGZyYWN0aW9uU2l6ZSBpZiBp
dCBpcyBub3Qgc3BlY2lmaWVkCisgICAgaWYgKGlzVW5kZWZpbmVkKGZyYWN0aW9uU2l6ZSkpIHsK
KyAgICAgIGZyYWN0aW9uU2l6ZSA9IE1hdGgubWluKE1hdGgubWF4KHBhdHRlcm4ubWluRnJhYywg
ZnJhY3Rpb25MZW4pLCBwYXR0ZXJuLm1heEZyYWMpOworICAgIH0KKworICAgIC8vIHNhZmVseSBy
b3VuZCBudW1iZXJzIGluIEpTIHdpdGhvdXQgaGl0dGluZyBpbXByZWNpc2lvbnMgb2YgZmxvYXRp
bmctcG9pbnQgYXJpdGhtZXRpY3MKKyAgICAvLyBpbnNwaXJlZCBieToKKyAgICAvLyBodHRwczov
L2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5j
ZS9HbG9iYWxfT2JqZWN0cy9NYXRoL3JvdW5kCisgICAgbnVtYmVyID0gKyhNYXRoLnJvdW5kKCso
bnVtYmVyLnRvU3RyaW5nKCkgKyAnZScgKyBmcmFjdGlvblNpemUpKS50b1N0cmluZygpICsgJ2Un
ICsgLWZyYWN0aW9uU2l6ZSk7CisKKyAgICB2YXIgZnJhY3Rpb24gPSAoJycgKyBudW1iZXIpLnNw
bGl0KERFQ0lNQUxfU0VQKTsKKyAgICB2YXIgd2hvbGUgPSBmcmFjdGlvblswXTsKKyAgICBmcmFj
dGlvbiA9IGZyYWN0aW9uWzFdIHx8ICcnOworCisgICAgdmFyIGksIHBvcyA9IDAsCisgICAgICAg
IGxncm91cCA9IHBhdHRlcm4ubGdTaXplLAorICAgICAgICBncm91cCA9IHBhdHRlcm4uZ1NpemU7
CisKKyAgICBpZiAod2hvbGUubGVuZ3RoID49IChsZ3JvdXAgKyBncm91cCkpIHsKKyAgICAgIHBv
cyA9IHdob2xlLmxlbmd0aCAtIGxncm91cDsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBwb3M7IGkr
KykgeworICAgICAgICBpZiAoKHBvcyAtIGkpICUgZ3JvdXAgPT09IDAgJiYgaSAhPT0gMCkgewor
ICAgICAgICAgIGZvcm1hdGVkVGV4dCArPSBncm91cFNlcDsKKyAgICAgICAgfQorICAgICAgICBm
b3JtYXRlZFRleHQgKz0gd2hvbGUuY2hhckF0KGkpOworICAgICAgfQorICAgIH0KKworICAgIGZv
ciAoaSA9IHBvczsgaSA8IHdob2xlLmxlbmd0aDsgaSsrKSB7CisgICAgICBpZiAoKHdob2xlLmxl
bmd0aCAtIGkpICUgbGdyb3VwID09PSAwICYmIGkgIT09IDApIHsKKyAgICAgICAgZm9ybWF0ZWRU
ZXh0ICs9IGdyb3VwU2VwOworICAgICAgfQorICAgICAgZm9ybWF0ZWRUZXh0ICs9IHdob2xlLmNo
YXJBdChpKTsKKyAgICB9CisKKyAgICAvLyBmb3JtYXQgZnJhY3Rpb24gcGFydC4KKyAgICB3aGls
ZSAoZnJhY3Rpb24ubGVuZ3RoIDwgZnJhY3Rpb25TaXplKSB7CisgICAgICBmcmFjdGlvbiArPSAn
MCc7CisgICAgfQorCisgICAgaWYgKGZyYWN0aW9uU2l6ZSAmJiBmcmFjdGlvblNpemUgIT09ICIw
IikgZm9ybWF0ZWRUZXh0ICs9IGRlY2ltYWxTZXAgKyBmcmFjdGlvbi5zdWJzdHIoMCwgZnJhY3Rp
b25TaXplKTsKKyAgfSBlbHNlIHsKKyAgICBpZiAoZnJhY3Rpb25TaXplID4gMCAmJiBudW1iZXIg
PCAxKSB7CisgICAgICBmb3JtYXRlZFRleHQgPSBudW1iZXIudG9GaXhlZChmcmFjdGlvblNpemUp
OworICAgICAgbnVtYmVyID0gcGFyc2VGbG9hdChmb3JtYXRlZFRleHQpOworICAgIH0KKyAgfQor
CisgIGlmIChudW1iZXIgPT09IDApIHsKKyAgICBpc05lZ2F0aXZlID0gZmFsc2U7CisgIH0KKwor
ICBwYXJ0cy5wdXNoKGlzTmVnYXRpdmUgPyBwYXR0ZXJuLm5lZ1ByZSA6IHBhdHRlcm4ucG9zUHJl
LAorICAgICAgICAgICAgIGZvcm1hdGVkVGV4dCwKKyAgICAgICAgICAgICBpc05lZ2F0aXZlID8g
cGF0dGVybi5uZWdTdWYgOiBwYXR0ZXJuLnBvc1N1Zik7CisgIHJldHVybiBwYXJ0cy5qb2luKCcn
KTsKK30KKworZnVuY3Rpb24gcGFkTnVtYmVyKG51bSwgZGlnaXRzLCB0cmltKSB7CisgIHZhciBu
ZWcgPSAnJzsKKyAgaWYgKG51bSA8IDApIHsKKyAgICBuZWcgPSAgJy0nOworICAgIG51bSA9IC1u
dW07CisgIH0KKyAgbnVtID0gJycgKyBudW07CisgIHdoaWxlIChudW0ubGVuZ3RoIDwgZGlnaXRz
KSBudW0gPSAnMCcgKyBudW07CisgIGlmICh0cmltKSB7CisgICAgbnVtID0gbnVtLnN1YnN0cihu
dW0ubGVuZ3RoIC0gZGlnaXRzKTsKKyAgfQorICByZXR1cm4gbmVnICsgbnVtOworfQorCisKK2Z1
bmN0aW9uIGRhdGVHZXR0ZXIobmFtZSwgc2l6ZSwgb2Zmc2V0LCB0cmltKSB7CisgIG9mZnNldCA9
IG9mZnNldCB8fCAwOworICByZXR1cm4gZnVuY3Rpb24oZGF0ZSkgeworICAgIHZhciB2YWx1ZSA9
IGRhdGVbJ2dldCcgKyBuYW1lXSgpOworICAgIGlmIChvZmZzZXQgPiAwIHx8IHZhbHVlID4gLW9m
ZnNldCkgeworICAgICAgdmFsdWUgKz0gb2Zmc2V0OworICAgIH0KKyAgICBpZiAodmFsdWUgPT09
IDAgJiYgb2Zmc2V0ID09IC0xMikgdmFsdWUgPSAxMjsKKyAgICByZXR1cm4gcGFkTnVtYmVyKHZh
bHVlLCBzaXplLCB0cmltKTsKKyAgfTsKK30KKworZnVuY3Rpb24gZGF0ZVN0ckdldHRlcihuYW1l
LCBzaG9ydEZvcm0pIHsKKyAgcmV0dXJuIGZ1bmN0aW9uKGRhdGUsIGZvcm1hdHMpIHsKKyAgICB2
YXIgdmFsdWUgPSBkYXRlWydnZXQnICsgbmFtZV0oKTsKKyAgICB2YXIgZ2V0ID0gdXBwZXJjYXNl
KHNob3J0Rm9ybSA/ICgnU0hPUlQnICsgbmFtZSkgOiBuYW1lKTsKKworICAgIHJldHVybiBmb3Jt
YXRzW2dldF1bdmFsdWVdOworICB9OworfQorCitmdW5jdGlvbiB0aW1lWm9uZUdldHRlcihkYXRl
LCBmb3JtYXRzLCBvZmZzZXQpIHsKKyAgdmFyIHpvbmUgPSAtMSAqIG9mZnNldDsKKyAgdmFyIHBh
ZGRlZFpvbmUgPSAoem9uZSA+PSAwKSA/ICIrIiA6ICIiOworCisgIHBhZGRlZFpvbmUgKz0gcGFk
TnVtYmVyKE1hdGhbem9uZSA+IDAgPyAnZmxvb3InIDogJ2NlaWwnXSh6b25lIC8gNjApLCAyKSAr
CisgICAgICAgICAgICAgICAgcGFkTnVtYmVyKE1hdGguYWJzKHpvbmUgJSA2MCksIDIpOworCisg
IHJldHVybiBwYWRkZWRab25lOworfQorCitmdW5jdGlvbiBnZXRGaXJzdFRodXJzZGF5T2ZZZWFy
KHllYXIpIHsKKyAgICAvLyAwID0gaW5kZXggb2YgSmFudWFyeQorICAgIHZhciBkYXlPZldlZWtP
bkZpcnN0ID0gKG5ldyBEYXRlKHllYXIsIDAsIDEpKS5nZXREYXkoKTsKKyAgICAvLyA0ID0gaW5k
ZXggb2YgVGh1cnNkYXkgKCsxIHRvIGFjY291bnQgZm9yIDFzdCA9IDUpCisgICAgLy8gMTEgPSBp
bmRleCBvZiAqbmV4dCogVGh1cnNkYXkgKCsxIGFjY291bnQgZm9yIDFzdCA9IDEyKQorICAgIHJl
dHVybiBuZXcgRGF0ZSh5ZWFyLCAwLCAoKGRheU9mV2Vla09uRmlyc3QgPD0gNCkgPyA1IDogMTIp
IC0gZGF5T2ZXZWVrT25GaXJzdCk7Cit9CisKK2Z1bmN0aW9uIGdldFRodXJzZGF5VGhpc1dlZWso
ZGF0ZXRpbWUpIHsKKyAgICByZXR1cm4gbmV3IERhdGUoZGF0ZXRpbWUuZ2V0RnVsbFllYXIoKSwg
ZGF0ZXRpbWUuZ2V0TW9udGgoKSwKKyAgICAgIC8vIDQgPSBpbmRleCBvZiBUaHVyc2RheQorICAg
ICAgZGF0ZXRpbWUuZ2V0RGF0ZSgpICsgKDQgLSBkYXRldGltZS5nZXREYXkoKSkpOworfQorCitm
dW5jdGlvbiB3ZWVrR2V0dGVyKHNpemUpIHsKKyAgIHJldHVybiBmdW5jdGlvbihkYXRlKSB7Cisg
ICAgICB2YXIgZmlyc3RUaHVycyA9IGdldEZpcnN0VGh1cnNkYXlPZlllYXIoZGF0ZS5nZXRGdWxs
WWVhcigpKSwKKyAgICAgICAgIHRoaXNUaHVycyA9IGdldFRodXJzZGF5VGhpc1dlZWsoZGF0ZSk7
CisKKyAgICAgIHZhciBkaWZmID0gK3RoaXNUaHVycyAtICtmaXJzdFRodXJzLAorICAgICAgICAg
cmVzdWx0ID0gMSArIE1hdGgucm91bmQoZGlmZiAvIDYuMDQ4ZTgpOyAvLyA2LjA0OGU4IG1zIHBl
ciB3ZWVrCisKKyAgICAgIHJldHVybiBwYWROdW1iZXIocmVzdWx0LCBzaXplKTsKKyAgIH07Cit9
CisKK2Z1bmN0aW9uIGFtcG1HZXR0ZXIoZGF0ZSwgZm9ybWF0cykgeworICByZXR1cm4gZGF0ZS5n
ZXRIb3VycygpIDwgMTIgPyBmb3JtYXRzLkFNUE1TWzBdIDogZm9ybWF0cy5BTVBNU1sxXTsKK30K
KworZnVuY3Rpb24gZXJhR2V0dGVyKGRhdGUsIGZvcm1hdHMpIHsKKyAgcmV0dXJuIGRhdGUuZ2V0
RnVsbFllYXIoKSA8PSAwID8gZm9ybWF0cy5FUkFTWzBdIDogZm9ybWF0cy5FUkFTWzFdOworfQor
CitmdW5jdGlvbiBsb25nRXJhR2V0dGVyKGRhdGUsIGZvcm1hdHMpIHsKKyAgcmV0dXJuIGRhdGUu
Z2V0RnVsbFllYXIoKSA8PSAwID8gZm9ybWF0cy5FUkFOQU1FU1swXSA6IGZvcm1hdHMuRVJBTkFN
RVNbMV07Cit9CisKK3ZhciBEQVRFX0ZPUk1BVFMgPSB7CisgIHl5eXk6IGRhdGVHZXR0ZXIoJ0Z1
bGxZZWFyJywgNCksCisgICAgeXk6IGRhdGVHZXR0ZXIoJ0Z1bGxZZWFyJywgMiwgMCwgdHJ1ZSks
CisgICAgIHk6IGRhdGVHZXR0ZXIoJ0Z1bGxZZWFyJywgMSksCisgIE1NTU06IGRhdGVTdHJHZXR0
ZXIoJ01vbnRoJyksCisgICBNTU06IGRhdGVTdHJHZXR0ZXIoJ01vbnRoJywgdHJ1ZSksCisgICAg
TU06IGRhdGVHZXR0ZXIoJ01vbnRoJywgMiwgMSksCisgICAgIE06IGRhdGVHZXR0ZXIoJ01vbnRo
JywgMSwgMSksCisgICAgZGQ6IGRhdGVHZXR0ZXIoJ0RhdGUnLCAyKSwKKyAgICAgZDogZGF0ZUdl
dHRlcignRGF0ZScsIDEpLAorICAgIEhIOiBkYXRlR2V0dGVyKCdIb3VycycsIDIpLAorICAgICBI
OiBkYXRlR2V0dGVyKCdIb3VycycsIDEpLAorICAgIGhoOiBkYXRlR2V0dGVyKCdIb3VycycsIDIs
IC0xMiksCisgICAgIGg6IGRhdGVHZXR0ZXIoJ0hvdXJzJywgMSwgLTEyKSwKKyAgICBtbTogZGF0
ZUdldHRlcignTWludXRlcycsIDIpLAorICAgICBtOiBkYXRlR2V0dGVyKCdNaW51dGVzJywgMSks
CisgICAgc3M6IGRhdGVHZXR0ZXIoJ1NlY29uZHMnLCAyKSwKKyAgICAgczogZGF0ZUdldHRlcign
U2Vjb25kcycsIDEpLAorICAgICAvLyB3aGlsZSBJU08gODYwMSByZXF1aXJlcyBmcmFjdGlvbnMg
dG8gYmUgcHJlZml4ZWQgd2l0aCBgLmAgb3IgYCxgCisgICAgIC8vIHdlIGNhbiBiZSBqdXN0IHNh
ZmVseSByZWx5IG9uIHVzaW5nIGBzc3NgIHNpbmNlIHdlIGN1cnJlbnRseSBkb24ndCBzdXBwb3J0
IHNpbmdsZSBvciB0d28gZGlnaXQgZnJhY3Rpb25zCisgICBzc3M6IGRhdGVHZXR0ZXIoJ01pbGxp
c2Vjb25kcycsIDMpLAorICBFRUVFOiBkYXRlU3RyR2V0dGVyKCdEYXknKSwKKyAgIEVFRTogZGF0
ZVN0ckdldHRlcignRGF5JywgdHJ1ZSksCisgICAgIGE6IGFtcG1HZXR0ZXIsCisgICAgIFo6IHRp
bWVab25lR2V0dGVyLAorICAgIHd3OiB3ZWVrR2V0dGVyKDIpLAorICAgICB3OiB3ZWVrR2V0dGVy
KDEpLAorICAgICBHOiBlcmFHZXR0ZXIsCisgICAgIEdHOiBlcmFHZXR0ZXIsCisgICAgIEdHRzog
ZXJhR2V0dGVyLAorICAgICBHR0dHOiBsb25nRXJhR2V0dGVyCit9OworCit2YXIgREFURV9GT1JN
QVRTX1NQTElUID0gLygoPzpbXnlNZEhobXNhWkV3RyddKyl8KD86Jyg/OlteJ118JycpKicpfCg/
OkUrfHkrfE0rfGQrfEgrfGgrfG0rfHMrfGF8WnxHK3x3KykpKC4qKS8sCisgICAgTlVNQkVSX1NU
UklORyA9IC9eXC0/XGQrJC87CisKKy8qKgorICogQG5nZG9jIGZpbHRlcgorICogQG5hbWUgZGF0
ZQorICogQGtpbmQgZnVuY3Rpb24KKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqICAgRm9ybWF0cyBg
ZGF0ZWAgdG8gYSBzdHJpbmcgYmFzZWQgb24gdGhlIHJlcXVlc3RlZCBgZm9ybWF0YC4KKyAqCisg
KiAgIGBmb3JtYXRgIHN0cmluZyBjYW4gYmUgY29tcG9zZWQgb2YgdGhlIGZvbGxvd2luZyBlbGVt
ZW50czoKKyAqCisgKiAgICogYCd5eXl5J2A6IDQgZGlnaXQgcmVwcmVzZW50YXRpb24gb2YgeWVh
ciAoZS5nLiBBRCAxID0+IDAwMDEsIEFEIDIwMTAgPT4gMjAxMCkKKyAqICAgKiBgJ3l5J2A6IDIg
ZGlnaXQgcmVwcmVzZW50YXRpb24gb2YgeWVhciwgcGFkZGVkICgwMC05OSkuIChlLmcuIEFEIDIw
MDEgPT4gMDEsIEFEIDIwMTAgPT4gMTApCisgKiAgICogYCd5J2A6IDEgZGlnaXQgcmVwcmVzZW50
YXRpb24gb2YgeWVhciwgZS5nLiAoQUQgMSA9PiAxLCBBRCAxOTkgPT4gMTk5KQorICogICAqIGAn
TU1NTSdgOiBNb250aCBpbiB5ZWFyIChKYW51YXJ5LURlY2VtYmVyKQorICogICAqIGAnTU1NJ2A6
IE1vbnRoIGluIHllYXIgKEphbi1EZWMpCisgKiAgICogYCdNTSdgOiBNb250aCBpbiB5ZWFyLCBw
YWRkZWQgKDAxLTEyKQorICogICAqIGAnTSdgOiBNb250aCBpbiB5ZWFyICgxLTEyKQorICogICAq
IGAnZGQnYDogRGF5IGluIG1vbnRoLCBwYWRkZWQgKDAxLTMxKQorICogICAqIGAnZCdgOiBEYXkg
aW4gbW9udGggKDEtMzEpCisgKiAgICogYCdFRUVFJ2A6IERheSBpbiBXZWVrLChTdW5kYXktU2F0
dXJkYXkpCisgKiAgICogYCdFRUUnYDogRGF5IGluIFdlZWssIChTdW4tU2F0KQorICogICAqIGAn
SEgnYDogSG91ciBpbiBkYXksIHBhZGRlZCAoMDAtMjMpCisgKiAgICogYCdIJ2A6IEhvdXIgaW4g
ZGF5ICgwLTIzKQorICogICAqIGAnaGgnYDogSG91ciBpbiBBTS9QTSwgcGFkZGVkICgwMS0xMikK
KyAqICAgKiBgJ2gnYDogSG91ciBpbiBBTS9QTSwgKDEtMTIpCisgKiAgICogYCdtbSdgOiBNaW51
dGUgaW4gaG91ciwgcGFkZGVkICgwMC01OSkKKyAqICAgKiBgJ20nYDogTWludXRlIGluIGhvdXIg
KDAtNTkpCisgKiAgICogYCdzcydgOiBTZWNvbmQgaW4gbWludXRlLCBwYWRkZWQgKDAwLTU5KQor
ICogICAqIGAncydgOiBTZWNvbmQgaW4gbWludXRlICgwLTU5KQorICogICAqIGAnc3NzJ2A6IE1p
bGxpc2Vjb25kIGluIHNlY29uZCwgcGFkZGVkICgwMDAtOTk5KQorICogICAqIGAnYSdgOiBBTS9Q
TSBtYXJrZXIKKyAqICAgKiBgJ1onYDogNCBkaWdpdCAoK3NpZ24pIHJlcHJlc2VudGF0aW9uIG9m
IHRoZSB0aW1lem9uZSBvZmZzZXQgKC0xMjAwLSsxMjAwKQorICogICAqIGAnd3cnYDogV2VlayBv
ZiB5ZWFyLCBwYWRkZWQgKDAwLTUzKS4gV2VlayAwMSBpcyB0aGUgd2VlayB3aXRoIHRoZSBmaXJz
dCBUaHVyc2RheSBvZiB0aGUgeWVhcgorICogICAqIGAndydgOiBXZWVrIG9mIHllYXIgKDAtNTMp
LiBXZWVrIDEgaXMgdGhlIHdlZWsgd2l0aCB0aGUgZmlyc3QgVGh1cnNkYXkgb2YgdGhlIHllYXIK
KyAqICAgKiBgJ0cnYCwgYCdHRydgLCBgJ0dHRydgOiBUaGUgYWJicmV2aWF0ZWQgZm9ybSBvZiB0
aGUgZXJhIHN0cmluZyAoZS5nLiAnQUQnKQorICogICAqIGAnR0dHRydgOiBUaGUgbG9uZyBmb3Jt
IG9mIHRoZSBlcmEgc3RyaW5nIChlLmcuICdBbm5vIERvbWluaScpCisgKgorICogICBgZm9ybWF0
YCBzdHJpbmcgY2FuIGFsc28gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgcHJlZGVmaW5lZAorICog
ICB7QGxpbmsgZ3VpZGUvaTE4biBsb2NhbGl6YWJsZSBmb3JtYXRzfToKKyAqCisgKiAgICogYCdt
ZWRpdW0nYDogZXF1aXZhbGVudCB0byBgJ01NTSBkLCB5IGg6bW06c3MgYSdgIGZvciBlbl9VUyBs
b2NhbGUKKyAqICAgICAoZS5nLiBTZXAgMywgMjAxMCAxMjowNTowOCBQTSkKKyAqICAgKiBgJ3No
b3J0J2A6IGVxdWl2YWxlbnQgdG8gYCdNL2QveXkgaDptbSBhJ2AgZm9yIGVuX1VTICBsb2NhbGUg
KGUuZy4gOS8zLzEwIDEyOjA1IFBNKQorICogICAqIGAnZnVsbERhdGUnYDogZXF1aXZhbGVudCB0
byBgJ0VFRUUsIE1NTU0gZCwgeSdgIGZvciBlbl9VUyAgbG9jYWxlCisgKiAgICAgKGUuZy4gRnJp
ZGF5LCBTZXB0ZW1iZXIgMywgMjAxMCkKKyAqICAgKiBgJ2xvbmdEYXRlJ2A6IGVxdWl2YWxlbnQg
dG8gYCdNTU1NIGQsIHknYCBmb3IgZW5fVVMgIGxvY2FsZSAoZS5nLiBTZXB0ZW1iZXIgMywgMjAx
MCkKKyAqICAgKiBgJ21lZGl1bURhdGUnYDogZXF1aXZhbGVudCB0byBgJ01NTSBkLCB5J2AgZm9y
IGVuX1VTICBsb2NhbGUgKGUuZy4gU2VwIDMsIDIwMTApCisgKiAgICogYCdzaG9ydERhdGUnYDog
ZXF1aXZhbGVudCB0byBgJ00vZC95eSdgIGZvciBlbl9VUyBsb2NhbGUgKGUuZy4gOS8zLzEwKQor
ICogICAqIGAnbWVkaXVtVGltZSdgOiBlcXVpdmFsZW50IHRvIGAnaDptbTpzcyBhJ2AgZm9yIGVu
X1VTIGxvY2FsZSAoZS5nLiAxMjowNTowOCBQTSkKKyAqICAgKiBgJ3Nob3J0VGltZSdgOiBlcXVp
dmFsZW50IHRvIGAnaDptbSBhJ2AgZm9yIGVuX1VTIGxvY2FsZSAoZS5nLiAxMjowNSBQTSkKKyAq
CisgKiAgIGBmb3JtYXRgIHN0cmluZyBjYW4gY29udGFpbiBsaXRlcmFsIHZhbHVlcy4gVGhlc2Ug
bmVlZCB0byBiZSBlc2NhcGVkIGJ5IHN1cnJvdW5kaW5nIHdpdGggc2luZ2xlIHF1b3RlcyAoZS5n
LgorICogICBgImggJ2luIHRoZSBtb3JuaW5nJyJgKS4gSW4gb3JkZXIgdG8gb3V0cHV0IGEgc2lu
Z2xlIHF1b3RlLCBlc2NhcGUgaXQgLSBpLmUuLCB0d28gc2luZ2xlIHF1b3RlcyBpbiBhIHNlcXVl
bmNlCisgKiAgIChlLmcuIGAiaCAnbycnY2xvY2snImApLgorICoKKyAqIEBwYXJhbSB7KERhdGV8
bnVtYmVyfHN0cmluZyl9IGRhdGUgRGF0ZSB0byBmb3JtYXQgZWl0aGVyIGFzIERhdGUgb2JqZWN0
LCBtaWxsaXNlY29uZHMgKHN0cmluZyBvcgorICogICAgbnVtYmVyKSBvciB2YXJpb3VzIElTTyA4
NjAxIGRhdGV0aW1lIHN0cmluZyBmb3JtYXRzIChlLmcuIHl5eXktTU0tZGRUSEg6bW06c3Muc3Nz
WiBhbmQgaXRzCisgKiAgICBzaG9ydGVyIHZlcnNpb25zIGxpa2UgeXl5eS1NTS1kZFRISDptbVos
IHl5eXktTU0tZGQgb3IgeXl5eU1NZGRUSEhtbXNzWikuIElmIG5vIHRpbWV6b25lIGlzCisgKiAg
ICBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpbnB1dCwgdGhlIHRpbWUgaXMgY29uc2lkZXJlZCB0
byBiZSBpbiB0aGUgbG9jYWwgdGltZXpvbmUuCisgKiBAcGFyYW0ge3N0cmluZz19IGZvcm1hdCBG
b3JtYXR0aW5nIHJ1bGVzIChzZWUgRGVzY3JpcHRpb24pLiBJZiBub3Qgc3BlY2lmaWVkLAorICog
ICAgYG1lZGl1bURhdGVgIGlzIHVzZWQuCisgKiBAcGFyYW0ge3N0cmluZz19IHRpbWV6b25lIFRp
bWV6b25lIHRvIGJlIHVzZWQgZm9yIGZvcm1hdHRpbmcuIEl0IHVuZGVyc3RhbmRzIFVUQy9HTVQg
YW5kIHRoZQorICogICAgY29udGluZW50YWwgVVMgdGltZSB6b25lIGFiYnJldmlhdGlvbnMsIGJ1
dCBmb3IgZ2VuZXJhbCB1c2UsIHVzZSBhIHRpbWUgem9uZSBvZmZzZXQsIGZvcgorICogICAgZXhh
bXBsZSwgYCcrMDQzMCdgICg0IGhvdXJzLCAzMCBtaW51dGVzIGVhc3Qgb2YgdGhlIEdyZWVud2lj
aCBtZXJpZGlhbikKKyAqICAgIElmIG5vdCBzcGVjaWZpZWQsIHRoZSB0aW1lem9uZSBvZiB0aGUg
YnJvd3NlciB3aWxsIGJlIHVzZWQuCisgKiBAcmV0dXJucyB7c3RyaW5nfSBGb3JtYXR0ZWQgc3Ry
aW5nIG9yIHRoZSBpbnB1dCBpZiBpbnB1dCBpcyBub3QgcmVjb2duaXplZCBhcyBkYXRlL21pbGxp
cy4KKyAqCisgKiBAZXhhbXBsZQorICAgPGV4YW1wbGU+CisgICAgIDxmaWxlIG5hbWU9ImluZGV4
Lmh0bWwiPgorICAgICAgIDxzcGFuIG5nLW5vbi1iaW5kYWJsZT57ezEyODgzMjM2MjMwMDYgfCBk
YXRlOidtZWRpdW0nfX08L3NwYW4+OgorICAgICAgICAgICA8c3Bhbj57ezEyODgzMjM2MjMwMDYg
fCBkYXRlOidtZWRpdW0nfX08L3NwYW4+PGJyPgorICAgICAgIDxzcGFuIG5nLW5vbi1iaW5kYWJs
ZT57ezEyODgzMjM2MjMwMDYgfCBkYXRlOid5eXl5LU1NLWRkIEhIOm1tOnNzIFonfX08L3NwYW4+
OgorICAgICAgICAgIDxzcGFuPnt7MTI4ODMyMzYyMzAwNiB8IGRhdGU6J3l5eXktTU0tZGQgSEg6
bW06c3MgWid9fTwvc3Bhbj48YnI+CisgICAgICAgPHNwYW4gbmctbm9uLWJpbmRhYmxlPnt7MTI4
ODMyMzYyMzAwNiB8IGRhdGU6J01NL2RkL3l5eXkgQCBoOm1tYSd9fTwvc3Bhbj46CisgICAgICAg
ICAgPHNwYW4+e3snMTI4ODMyMzYyMzAwNicgfCBkYXRlOidNTS9kZC95eXl5IEAgaDptbWEnfX08
L3NwYW4+PGJyPgorICAgICAgIDxzcGFuIG5nLW5vbi1iaW5kYWJsZT57ezEyODgzMjM2MjMwMDYg
fCBkYXRlOiJNTS9kZC95eXl5ICdhdCcgaDptbWEifX08L3NwYW4+OgorICAgICAgICAgIDxzcGFu
Pnt7JzEyODgzMjM2MjMwMDYnIHwgZGF0ZToiTU0vZGQveXl5eSAnYXQnIGg6bW1hIn19PC9zcGFu
Pjxicj4KKyAgICAgPC9maWxlPgorICAgICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBl
PSJwcm90cmFjdG9yIj4KKyAgICAgICBpdCgnc2hvdWxkIGZvcm1hdCBkYXRlJywgZnVuY3Rpb24o
KSB7CisgICAgICAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKCIxMjg4MzIzNjIzMDA2IHwg
ZGF0ZTonbWVkaXVtJyIpKS5nZXRUZXh0KCkpLgorICAgICAgICAgICAgdG9NYXRjaCgvT2N0IDJc
ZCwgMjAxMCBcZHsxLDJ9OlxkezJ9OlxkezJ9IChBTXxQTSkvKTsKKyAgICAgICAgIGV4cGVjdChl
bGVtZW50KGJ5LmJpbmRpbmcoIjEyODgzMjM2MjMwMDYgfCBkYXRlOid5eXl5LU1NLWRkIEhIOm1t
OnNzIFonIikpLmdldFRleHQoKSkuCisgICAgICAgICAgICB0b01hdGNoKC8yMDEwXC0xMFwtMlxk
IFxkezJ9OlxkezJ9OlxkezJ9IChcLXxcKyk/XGR7NH0vKTsKKyAgICAgICAgIGV4cGVjdChlbGVt
ZW50KGJ5LmJpbmRpbmcoIicxMjg4MzIzNjIzMDA2JyB8IGRhdGU6J01NL2RkL3l5eXkgQCBoOm1t
YSciKSkuZ2V0VGV4dCgpKS4KKyAgICAgICAgICAgIHRvTWF0Y2goLzEwXC8yXGRcLzIwMTAgQCBc
ZHsxLDJ9OlxkezJ9KEFNfFBNKS8pOworICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGlu
ZygiJzEyODgzMjM2MjMwMDYnIHwgZGF0ZTpcIk1NL2RkL3l5eXkgJ2F0JyBoOm1tYVwiIikpLmdl
dFRleHQoKSkuCisgICAgICAgICAgICB0b01hdGNoKC8xMFwvMlxkXC8yMDEwIGF0IFxkezEsMn06
XGR7Mn0oQU18UE0pLyk7CisgICAgICAgfSk7CisgICAgIDwvZmlsZT4KKyAgIDwvZXhhbXBsZT4K
KyAqLworZGF0ZUZpbHRlci4kaW5qZWN0ID0gWyckbG9jYWxlJ107CitmdW5jdGlvbiBkYXRlRmls
dGVyKCRsb2NhbGUpIHsKKworCisgIHZhciBSX0lTTzg2MDFfU1RSID0gL14oXGR7NH0pLT8oXGRc
ZCktPyhcZFxkKSg/OlQoXGRcZCkoPzo6PyhcZFxkKSg/Ojo/KFxkXGQpKD86XC4oXGQrKSk/KT8p
PyhafChbKy1dKShcZFxkKTo/KFxkXGQpKT8pPyQvOworICAgICAgICAgICAgICAgICAgICAgLy8g
MSAgICAgICAgMiAgICAgICAzICAgICAgICAgNCAgICAgICAgICA1ICAgICAgICAgIDYgICAgICAg
ICAgNyAgICAgICAgICA4ICA5ICAgICAxMCAgICAgIDExCisgIGZ1bmN0aW9uIGpzb25TdHJpbmdU
b0RhdGUoc3RyaW5nKSB7CisgICAgdmFyIG1hdGNoOworICAgIGlmIChtYXRjaCA9IHN0cmluZy5t
YXRjaChSX0lTTzg2MDFfU1RSKSkgeworICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgwKSwKKyAg
ICAgICAgICB0ekhvdXIgPSAwLAorICAgICAgICAgIHR6TWluICA9IDAsCisgICAgICAgICAgZGF0
ZVNldHRlciA9IG1hdGNoWzhdID8gZGF0ZS5zZXRVVENGdWxsWWVhciA6IGRhdGUuc2V0RnVsbFll
YXIsCisgICAgICAgICAgdGltZVNldHRlciA9IG1hdGNoWzhdID8gZGF0ZS5zZXRVVENIb3VycyA6
IGRhdGUuc2V0SG91cnM7CisKKyAgICAgIGlmIChtYXRjaFs5XSkgeworICAgICAgICB0ekhvdXIg
PSB0b0ludChtYXRjaFs5XSArIG1hdGNoWzEwXSk7CisgICAgICAgIHR6TWluID0gdG9JbnQobWF0
Y2hbOV0gKyBtYXRjaFsxMV0pOworICAgICAgfQorICAgICAgZGF0ZVNldHRlci5jYWxsKGRhdGUs
IHRvSW50KG1hdGNoWzFdKSwgdG9JbnQobWF0Y2hbMl0pIC0gMSwgdG9JbnQobWF0Y2hbM10pKTsK
KyAgICAgIHZhciBoID0gdG9JbnQobWF0Y2hbNF0gfHwgMCkgLSB0ekhvdXI7CisgICAgICB2YXIg
bSA9IHRvSW50KG1hdGNoWzVdIHx8IDApIC0gdHpNaW47CisgICAgICB2YXIgcyA9IHRvSW50KG1h
dGNoWzZdIHx8IDApOworICAgICAgdmFyIG1zID0gTWF0aC5yb3VuZChwYXJzZUZsb2F0KCcwLicg
KyAobWF0Y2hbN10gfHwgMCkpICogMTAwMCk7CisgICAgICB0aW1lU2V0dGVyLmNhbGwoZGF0ZSwg
aCwgbSwgcywgbXMpOworICAgICAgcmV0dXJuIGRhdGU7CisgICAgfQorICAgIHJldHVybiBzdHJp
bmc7CisgIH0KKworCisgIHJldHVybiBmdW5jdGlvbihkYXRlLCBmb3JtYXQsIHRpbWV6b25lKSB7
CisgICAgdmFyIHRleHQgPSAnJywKKyAgICAgICAgcGFydHMgPSBbXSwKKyAgICAgICAgZm4sIG1h
dGNoOworCisgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICdtZWRpdW1EYXRlJzsKKyAgICBmb3JtYXQg
PSAkbG9jYWxlLkRBVEVUSU1FX0ZPUk1BVFNbZm9ybWF0XSB8fCBmb3JtYXQ7CisgICAgaWYgKGlz
U3RyaW5nKGRhdGUpKSB7CisgICAgICBkYXRlID0gTlVNQkVSX1NUUklORy50ZXN0KGRhdGUpID8g
dG9JbnQoZGF0ZSkgOiBqc29uU3RyaW5nVG9EYXRlKGRhdGUpOworICAgIH0KKworICAgIGlmIChp
c051bWJlcihkYXRlKSkgeworICAgICAgZGF0ZSA9IG5ldyBEYXRlKGRhdGUpOworICAgIH0KKwor
ICAgIGlmICghaXNEYXRlKGRhdGUpIHx8ICFpc0Zpbml0ZShkYXRlLmdldFRpbWUoKSkpIHsKKyAg
ICAgIHJldHVybiBkYXRlOworICAgIH0KKworICAgIHdoaWxlIChmb3JtYXQpIHsKKyAgICAgIG1h
dGNoID0gREFURV9GT1JNQVRTX1NQTElULmV4ZWMoZm9ybWF0KTsKKyAgICAgIGlmIChtYXRjaCkg
eworICAgICAgICBwYXJ0cyA9IGNvbmNhdChwYXJ0cywgbWF0Y2gsIDEpOworICAgICAgICBmb3Jt
YXQgPSBwYXJ0cy5wb3AoKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHBhcnRzLnB1c2goZm9y
bWF0KTsKKyAgICAgICAgZm9ybWF0ID0gbnVsbDsKKyAgICAgIH0KKyAgICB9CisKKyAgICB2YXIg
ZGF0ZVRpbWV6b25lT2Zmc2V0ID0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpOworICAgIGlmICh0
aW1lem9uZSkgeworICAgICAgZGF0ZVRpbWV6b25lT2Zmc2V0ID0gdGltZXpvbmVUb09mZnNldCh0
aW1lem9uZSwgZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpKTsKKyAgICAgIGRhdGUgPSBjb252ZXJ0
VGltZXpvbmVUb0xvY2FsKGRhdGUsIHRpbWV6b25lLCB0cnVlKTsKKyAgICB9CisgICAgZm9yRWFj
aChwYXJ0cywgZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgIGZuID0gREFURV9GT1JNQVRTW3ZhbHVl
XTsKKyAgICAgIHRleHQgKz0gZm4gPyBmbihkYXRlLCAkbG9jYWxlLkRBVEVUSU1FX0ZPUk1BVFMs
IGRhdGVUaW1lem9uZU9mZnNldCkKKyAgICAgICAgICAgICAgICAgOiB2YWx1ZS5yZXBsYWNlKC8o
Xid8JyQpL2csICcnKS5yZXBsYWNlKC8nJy9nLCAiJyIpOworICAgIH0pOworCisgICAgcmV0dXJu
IHRleHQ7CisgIH07Cit9CisKKworLyoqCisgKiBAbmdkb2MgZmlsdGVyCisgKiBAbmFtZSBqc29u
CisgKiBAa2luZCBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlvbgorICogICBBbGxvd3MgeW91
IHRvIGNvbnZlcnQgYSBKYXZhU2NyaXB0IG9iamVjdCBpbnRvIEpTT04gc3RyaW5nLgorICoKKyAq
ICAgVGhpcyBmaWx0ZXIgaXMgbW9zdGx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nLiBXaGVuIHVzaW5n
IHRoZSBkb3VibGUgY3VybHkge3t2YWx1ZX19IG5vdGF0aW9uCisgKiAgIHRoZSBiaW5kaW5nIGlz
IGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIEpTT04uCisgKgorICogQHBhcmFtIHsqfSBvYmpl
Y3QgQW55IEphdmFTY3JpcHQgb2JqZWN0IChpbmNsdWRpbmcgYXJyYXlzIGFuZCBwcmltaXRpdmUg
dHlwZXMpIHRvIGZpbHRlci4KKyAqIEBwYXJhbSB7bnVtYmVyPX0gc3BhY2luZyBUaGUgbnVtYmVy
IG9mIHNwYWNlcyB0byB1c2UgcGVyIGluZGVudGF0aW9uLCBkZWZhdWx0cyB0byAyLgorICogQHJl
dHVybnMge3N0cmluZ30gSlNPTiBzdHJpbmcuCisgKgorICoKKyAqIEBleGFtcGxlCisgICA8ZXhh
bXBsZT4KKyAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAgICAgPHByZSBpZD0iZGVm
YXVsdC1zcGFjaW5nIj57eyB7J25hbWUnOid2YWx1ZSd9IHwganNvbiB9fTwvcHJlPgorICAgICAg
IDxwcmUgaWQ9ImN1c3RvbS1zcGFjaW5nIj57eyB7J25hbWUnOid2YWx1ZSd9IHwganNvbjo0IH19
PC9wcmU+CisgICAgIDwvZmlsZT4KKyAgICAgPGZpbGUgbmFtZT0icHJvdHJhY3Rvci5qcyIgdHlw
ZT0icHJvdHJhY3RvciI+CisgICAgICAgaXQoJ3Nob3VsZCBqc29uaWZ5IGZpbHRlcmVkIG9iamVj
dHMnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmlkKCdkZWZhdWx0
LXNwYWNpbmcnKSkuZ2V0VGV4dCgpKS50b01hdGNoKC9ce1xuICAibmFtZSI6ID8idmFsdWUiXG59
Lyk7CisgICAgICAgICBleHBlY3QoZWxlbWVudChieS5pZCgnY3VzdG9tLXNwYWNpbmcnKSkuZ2V0
VGV4dCgpKS50b01hdGNoKC9ce1xuICAgICJuYW1lIjogPyJ2YWx1ZSJcbn0vKTsKKyAgICAgICB9
KTsKKyAgICAgPC9maWxlPgorICAgPC9leGFtcGxlPgorICoKKyAqLworZnVuY3Rpb24ganNvbkZp
bHRlcigpIHsKKyAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgc3BhY2luZykgeworICAgIGlmIChp
c1VuZGVmaW5lZChzcGFjaW5nKSkgeworICAgICAgICBzcGFjaW5nID0gMjsKKyAgICB9CisgICAg
cmV0dXJuIHRvSnNvbihvYmplY3QsIHNwYWNpbmcpOworICB9OworfQorCisKKy8qKgorICogQG5n
ZG9jIGZpbHRlcgorICogQG5hbWUgbG93ZXJjYXNlCisgKiBAa2luZCBmdW5jdGlvbgorICogQGRl
c2NyaXB0aW9uCisgKiBDb252ZXJ0cyBzdHJpbmcgdG8gbG93ZXJjYXNlLgorICogQHNlZSBhbmd1
bGFyLmxvd2VyY2FzZQorICovCit2YXIgbG93ZXJjYXNlRmlsdGVyID0gdmFsdWVGbihsb3dlcmNh
c2UpOworCisKKy8qKgorICogQG5nZG9jIGZpbHRlcgorICogQG5hbWUgdXBwZXJjYXNlCisgKiBA
a2luZCBmdW5jdGlvbgorICogQGRlc2NyaXB0aW9uCisgKiBDb252ZXJ0cyBzdHJpbmcgdG8gdXBw
ZXJjYXNlLgorICogQHNlZSBhbmd1bGFyLnVwcGVyY2FzZQorICovCit2YXIgdXBwZXJjYXNlRmls
dGVyID0gdmFsdWVGbih1cHBlcmNhc2UpOworCisvKioKKyAqIEBuZ2RvYyBmaWx0ZXIKKyAqIEBu
YW1lIGxpbWl0VG8KKyAqIEBraW5kIGZ1bmN0aW9uCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBD
cmVhdGVzIGEgbmV3IGFycmF5IG9yIHN0cmluZyBjb250YWluaW5nIG9ubHkgYSBzcGVjaWZpZWQg
bnVtYmVyIG9mIGVsZW1lbnRzLiBUaGUgZWxlbWVudHMKKyAqIGFyZSB0YWtlbiBmcm9tIGVpdGhl
ciB0aGUgYmVnaW5uaW5nIG9yIHRoZSBlbmQgb2YgdGhlIHNvdXJjZSBhcnJheSwgc3RyaW5nIG9y
IG51bWJlciwgYXMgc3BlY2lmaWVkIGJ5CisgKiB0aGUgdmFsdWUgYW5kIHNpZ24gKHBvc2l0aXZl
IG9yIG5lZ2F0aXZlKSBvZiBgbGltaXRgLiBJZiBhIG51bWJlciBpcyB1c2VkIGFzIGlucHV0LCBp
dCBpcworICogY29udmVydGVkIHRvIGEgc3RyaW5nLgorICoKKyAqIEBwYXJhbSB7QXJyYXl8c3Ry
aW5nfG51bWJlcn0gaW5wdXQgU291cmNlIGFycmF5LCBzdHJpbmcgb3IgbnVtYmVyIHRvIGJlIGxp
bWl0ZWQuCisgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGxpbWl0IFRoZSBsZW5ndGggb2YgdGhl
IHJldHVybmVkIGFycmF5IG9yIHN0cmluZy4gSWYgdGhlIGBsaW1pdGAgbnVtYmVyCisgKiAgICAg
aXMgcG9zaXRpdmUsIGBsaW1pdGAgbnVtYmVyIG9mIGl0ZW1zIGZyb20gdGhlIGJlZ2lubmluZyBv
ZiB0aGUgc291cmNlIGFycmF5L3N0cmluZyBhcmUgY29waWVkLgorICogICAgIElmIHRoZSBudW1i
ZXIgaXMgbmVnYXRpdmUsIGBsaW1pdGAgbnVtYmVyICBvZiBpdGVtcyBmcm9tIHRoZSBlbmQgb2Yg
dGhlIHNvdXJjZSBhcnJheS9zdHJpbmcKKyAqICAgICBhcmUgY29waWVkLiBUaGUgYGxpbWl0YCB3
aWxsIGJlIHRyaW1tZWQgaWYgaXQgZXhjZWVkcyBgYXJyYXkubGVuZ3RoYC4gSWYgYGxpbWl0YCBp
cyB1bmRlZmluZWQsCisgKiAgICAgdGhlIGlucHV0IHdpbGwgYmUgcmV0dXJuZWQgdW5jaGFuZ2Vk
LgorICogQHBhcmFtIHsoc3RyaW5nfG51bWJlcik9fSBiZWdpbiBJbmRleCBhdCB3aGljaCB0byBi
ZWdpbiBsaW1pdGF0aW9uLiBBcyBhIG5lZ2F0aXZlIGluZGV4LCBgYmVnaW5gCisgKiAgICAgaW5k
aWNhdGVzIGFuIG9mZnNldCBmcm9tIHRoZSBlbmQgb2YgYGlucHV0YC4gRGVmYXVsdHMgdG8gYDBg
LgorICogQHJldHVybnMge0FycmF5fHN0cmluZ30gQSBuZXcgc3ViLWFycmF5IG9yIHN1YnN0cmlu
ZyBvZiBsZW5ndGggYGxpbWl0YCBvciBsZXNzIGlmIGlucHV0IGFycmF5CisgKiAgICAgaGFkIGxl
c3MgdGhhbiBgbGltaXRgIGVsZW1lbnRzLgorICoKKyAqIEBleGFtcGxlCisgICA8ZXhhbXBsZSBt
b2R1bGU9ImxpbWl0VG9FeGFtcGxlIj4KKyAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+Cisg
ICAgICAgPHNjcmlwdD4KKyAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCdsaW1pdFRvRXhhbXBsZScs
IFtdKQorICAgICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29w
ZScsIGZ1bmN0aW9uKCRzY29wZSkgeworICAgICAgICAgICAgICRzY29wZS5udW1iZXJzID0gWzEs
MiwzLDQsNSw2LDcsOCw5XTsKKyAgICAgICAgICAgICAkc2NvcGUubGV0dGVycyA9ICJhYmNkZWZn
aGkiOworICAgICAgICAgICAgICRzY29wZS5sb25nTnVtYmVyID0gMjM0NTQzMjM0MjsKKyAgICAg
ICAgICAgICAkc2NvcGUubnVtTGltaXQgPSAzOworICAgICAgICAgICAgICRzY29wZS5sZXR0ZXJM
aW1pdCA9IDM7CisgICAgICAgICAgICAgJHNjb3BlLmxvbmdOdW1iZXJMaW1pdCA9IDM7CisgICAg
ICAgICAgIH1dKTsKKyAgICAgICA8L3NjcmlwdD4KKyAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9
IkV4YW1wbGVDb250cm9sbGVyIj4KKyAgICAgICAgIDxsYWJlbD4KKyAgICAgICAgICAgIExpbWl0
IHt7bnVtYmVyc319IHRvOgorICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgc3RlcD0i
MSIgbmctbW9kZWw9Im51bUxpbWl0Ij4KKyAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICA8cD5P
dXRwdXQgbnVtYmVyczoge3sgbnVtYmVycyB8IGxpbWl0VG86bnVtTGltaXQgfX08L3A+CisgICAg
ICAgICA8bGFiZWw+CisgICAgICAgICAgICBMaW1pdCB7e2xldHRlcnN9fSB0bzoKKyAgICAgICAg
ICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIHN0ZXA9IjEiIG5nLW1vZGVsPSJsZXR0ZXJMaW1pdCI+
CisgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgPHA+T3V0cHV0IGxldHRlcnM6IHt7IGxldHRl
cnMgfCBsaW1pdFRvOmxldHRlckxpbWl0IH19PC9wPgorICAgICAgICAgPGxhYmVsPgorICAgICAg
ICAgICAgTGltaXQge3tsb25nTnVtYmVyfX0gdG86CisgICAgICAgICAgICA8aW5wdXQgdHlwZT0i
bnVtYmVyIiBzdGVwPSIxIiBuZy1tb2RlbD0ibG9uZ051bWJlckxpbWl0Ij4KKyAgICAgICAgIDwv
bGFiZWw+CisgICAgICAgICA8cD5PdXRwdXQgbG9uZyBudW1iZXI6IHt7IGxvbmdOdW1iZXIgfCBs
aW1pdFRvOmxvbmdOdW1iZXJMaW1pdCB9fTwvcD4KKyAgICAgICA8L2Rpdj4KKyAgICAgPC9maWxl
PgorICAgICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFjdG9yIj4KKyAg
ICAgICB2YXIgbnVtTGltaXRJbnB1dCA9IGVsZW1lbnQoYnkubW9kZWwoJ251bUxpbWl0JykpOwor
ICAgICAgIHZhciBsZXR0ZXJMaW1pdElucHV0ID0gZWxlbWVudChieS5tb2RlbCgnbGV0dGVyTGlt
aXQnKSk7CisgICAgICAgdmFyIGxvbmdOdW1iZXJMaW1pdElucHV0ID0gZWxlbWVudChieS5tb2Rl
bCgnbG9uZ051bWJlckxpbWl0JykpOworICAgICAgIHZhciBsaW1pdGVkTnVtYmVycyA9IGVsZW1l
bnQoYnkuYmluZGluZygnbnVtYmVycyB8IGxpbWl0VG86bnVtTGltaXQnKSk7CisgICAgICAgdmFy
IGxpbWl0ZWRMZXR0ZXJzID0gZWxlbWVudChieS5iaW5kaW5nKCdsZXR0ZXJzIHwgbGltaXRUbzps
ZXR0ZXJMaW1pdCcpKTsKKyAgICAgICB2YXIgbGltaXRlZExvbmdOdW1iZXIgPSBlbGVtZW50KGJ5
LmJpbmRpbmcoJ2xvbmdOdW1iZXIgfCBsaW1pdFRvOmxvbmdOdW1iZXJMaW1pdCcpKTsKKworICAg
ICAgIGl0KCdzaG91bGQgbGltaXQgdGhlIG51bWJlciBhcnJheSB0byBmaXJzdCB0aHJlZSBpdGVt
cycsIGZ1bmN0aW9uKCkgeworICAgICAgICAgZXhwZWN0KG51bUxpbWl0SW5wdXQuZ2V0QXR0cmli
dXRlKCd2YWx1ZScpKS50b0JlKCczJyk7CisgICAgICAgICBleHBlY3QobGV0dGVyTGltaXRJbnB1
dC5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpLnRvQmUoJzMnKTsKKyAgICAgICAgIGV4cGVjdChsb25n
TnVtYmVyTGltaXRJbnB1dC5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpLnRvQmUoJzMnKTsKKyAgICAg
ICAgIGV4cGVjdChsaW1pdGVkTnVtYmVycy5nZXRUZXh0KCkpLnRvRXF1YWwoJ091dHB1dCBudW1i
ZXJzOiBbMSwyLDNdJyk7CisgICAgICAgICBleHBlY3QobGltaXRlZExldHRlcnMuZ2V0VGV4dCgp
KS50b0VxdWFsKCdPdXRwdXQgbGV0dGVyczogYWJjJyk7CisgICAgICAgICBleHBlY3QobGltaXRl
ZExvbmdOdW1iZXIuZ2V0VGV4dCgpKS50b0VxdWFsKCdPdXRwdXQgbG9uZyBudW1iZXI6IDIzNCcp
OworICAgICAgIH0pOworCisgICAgICAgLy8gVGhlcmUgaXMgYSBidWcgaW4gc2FmYXJpIGFuZCBw
cm90cmFjdG9yIHRoYXQgZG9lc24ndCBsaWtlIHRoZSBtaW51cyBrZXkKKyAgICAgICAvLyBpdCgn
c2hvdWxkIHVwZGF0ZSB0aGUgb3V0cHV0IHdoZW4gLTMgaXMgZW50ZXJlZCcsIGZ1bmN0aW9uKCkg
eworICAgICAgIC8vICAgbnVtTGltaXRJbnB1dC5jbGVhcigpOworICAgICAgIC8vICAgbnVtTGlt
aXRJbnB1dC5zZW5kS2V5cygnLTMnKTsKKyAgICAgICAvLyAgIGxldHRlckxpbWl0SW5wdXQuY2xl
YXIoKTsKKyAgICAgICAvLyAgIGxldHRlckxpbWl0SW5wdXQuc2VuZEtleXMoJy0zJyk7CisgICAg
ICAgLy8gICBsb25nTnVtYmVyTGltaXRJbnB1dC5jbGVhcigpOworICAgICAgIC8vICAgbG9uZ051
bWJlckxpbWl0SW5wdXQuc2VuZEtleXMoJy0zJyk7CisgICAgICAgLy8gICBleHBlY3QobGltaXRl
ZE51bWJlcnMuZ2V0VGV4dCgpKS50b0VxdWFsKCdPdXRwdXQgbnVtYmVyczogWzcsOCw5XScpOwor
ICAgICAgIC8vICAgZXhwZWN0KGxpbWl0ZWRMZXR0ZXJzLmdldFRleHQoKSkudG9FcXVhbCgnT3V0
cHV0IGxldHRlcnM6IGdoaScpOworICAgICAgIC8vICAgZXhwZWN0KGxpbWl0ZWRMb25nTnVtYmVy
LmdldFRleHQoKSkudG9FcXVhbCgnT3V0cHV0IGxvbmcgbnVtYmVyOiAzNDInKTsKKyAgICAgICAv
LyB9KTsKKworICAgICAgIGl0KCdzaG91bGQgbm90IGV4Y2VlZCB0aGUgbWF4aW11bSBzaXplIG9m
IGlucHV0IGFycmF5JywgZnVuY3Rpb24oKSB7CisgICAgICAgICBudW1MaW1pdElucHV0LmNsZWFy
KCk7CisgICAgICAgICBudW1MaW1pdElucHV0LnNlbmRLZXlzKCcxMDAnKTsKKyAgICAgICAgIGxl
dHRlckxpbWl0SW5wdXQuY2xlYXIoKTsKKyAgICAgICAgIGxldHRlckxpbWl0SW5wdXQuc2VuZEtl
eXMoJzEwMCcpOworICAgICAgICAgbG9uZ051bWJlckxpbWl0SW5wdXQuY2xlYXIoKTsKKyAgICAg
ICAgIGxvbmdOdW1iZXJMaW1pdElucHV0LnNlbmRLZXlzKCcxMDAnKTsKKyAgICAgICAgIGV4cGVj
dChsaW1pdGVkTnVtYmVycy5nZXRUZXh0KCkpLnRvRXF1YWwoJ091dHB1dCBudW1iZXJzOiBbMSwy
LDMsNCw1LDYsNyw4LDldJyk7CisgICAgICAgICBleHBlY3QobGltaXRlZExldHRlcnMuZ2V0VGV4
dCgpKS50b0VxdWFsKCdPdXRwdXQgbGV0dGVyczogYWJjZGVmZ2hpJyk7CisgICAgICAgICBleHBl
Y3QobGltaXRlZExvbmdOdW1iZXIuZ2V0VGV4dCgpKS50b0VxdWFsKCdPdXRwdXQgbG9uZyBudW1i
ZXI6IDIzNDU0MzIzNDInKTsKKyAgICAgICB9KTsKKyAgICAgPC9maWxlPgorICAgPC9leGFtcGxl
PgorKi8KK2Z1bmN0aW9uIGxpbWl0VG9GaWx0ZXIoKSB7CisgIHJldHVybiBmdW5jdGlvbihpbnB1
dCwgbGltaXQsIGJlZ2luKSB7CisgICAgaWYgKE1hdGguYWJzKE51bWJlcihsaW1pdCkpID09PSBJ
bmZpbml0eSkgeworICAgICAgbGltaXQgPSBOdW1iZXIobGltaXQpOworICAgIH0gZWxzZSB7Cisg
ICAgICBsaW1pdCA9IHRvSW50KGxpbWl0KTsKKyAgICB9CisgICAgaWYgKGlzTmFOKGxpbWl0KSkg
cmV0dXJuIGlucHV0OworCisgICAgaWYgKGlzTnVtYmVyKGlucHV0KSkgaW5wdXQgPSBpbnB1dC50
b1N0cmluZygpOworICAgIGlmICghaXNBcnJheShpbnB1dCkgJiYgIWlzU3RyaW5nKGlucHV0KSkg
cmV0dXJuIGlucHV0OworCisgICAgYmVnaW4gPSAoIWJlZ2luIHx8IGlzTmFOKGJlZ2luKSkgPyAw
IDogdG9JbnQoYmVnaW4pOworICAgIGJlZ2luID0gKGJlZ2luIDwgMCAmJiBiZWdpbiA+PSAtaW5w
dXQubGVuZ3RoKSA/IGlucHV0Lmxlbmd0aCArIGJlZ2luIDogYmVnaW47CisKKyAgICBpZiAobGlt
aXQgPj0gMCkgeworICAgICAgcmV0dXJuIGlucHV0LnNsaWNlKGJlZ2luLCBiZWdpbiArIGxpbWl0
KTsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKGJlZ2luID09PSAwKSB7CisgICAgICAgIHJldHVy
biBpbnB1dC5zbGljZShsaW1pdCwgaW5wdXQubGVuZ3RoKTsKKyAgICAgIH0gZWxzZSB7CisgICAg
ICAgIHJldHVybiBpbnB1dC5zbGljZShNYXRoLm1heCgwLCBiZWdpbiArIGxpbWl0KSwgYmVnaW4p
OworICAgICAgfQorICAgIH0KKyAgfTsKK30KKworLyoqCisgKiBAbmdkb2MgZmlsdGVyCisgKiBA
bmFtZSBvcmRlckJ5CisgKiBAa2luZCBmdW5jdGlvbgorICoKKyAqIEBkZXNjcmlwdGlvbgorICog
T3JkZXJzIGEgc3BlY2lmaWVkIGBhcnJheWAgYnkgdGhlIGBleHByZXNzaW9uYCBwcmVkaWNhdGUu
IEl0IGlzIG9yZGVyZWQgYWxwaGFiZXRpY2FsbHkKKyAqIGZvciBzdHJpbmdzIGFuZCBudW1lcmlj
YWxseSBmb3IgbnVtYmVycy4gTm90ZTogaWYgeW91IG5vdGljZSBudW1iZXJzIGFyZSBub3QgYmVp
bmcgc29ydGVkCisgKiBhcyBleHBlY3RlZCwgbWFrZSBzdXJlIHRoZXkgYXJlIGFjdHVhbGx5IGJl
aW5nIHNhdmVkIGFzIG51bWJlcnMgYW5kIG5vdCBzdHJpbmdzLgorICoKKyAqIEBwYXJhbSB7QXJy
YXl9IGFycmF5IFRoZSBhcnJheSB0byBzb3J0LgorICogQHBhcmFtIHtmdW5jdGlvbigqKXxzdHJp
bmd8QXJyYXkuPChmdW5jdGlvbigqKXxzdHJpbmcpPj19IGV4cHJlc3Npb24gQSBwcmVkaWNhdGUg
dG8gYmUKKyAqICAgIHVzZWQgYnkgdGhlIGNvbXBhcmF0b3IgdG8gZGV0ZXJtaW5lIHRoZSBvcmRl
ciBvZiBlbGVtZW50cy4KKyAqCisgKiAgICBDYW4gYmUgb25lIG9mOgorICoKKyAqICAgIC0gYGZ1
bmN0aW9uYDogR2V0dGVyIGZ1bmN0aW9uLiBUaGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gd2ls
bCBiZSBzb3J0ZWQgdXNpbmcgdGhlCisgKiAgICAgIGA8YCwgYD09PWAsIGA+YCBvcGVyYXRvci4K
KyAqICAgIC0gYHN0cmluZ2A6IEFuIEFuZ3VsYXIgZXhwcmVzc2lvbi4gVGhlIHJlc3VsdCBvZiB0
aGlzIGV4cHJlc3Npb24gaXMgdXNlZCB0byBjb21wYXJlIGVsZW1lbnRzCisgKiAgICAgIChmb3Ig
ZXhhbXBsZSBgbmFtZWAgdG8gc29ydCBieSBhIHByb3BlcnR5IGNhbGxlZCBgbmFtZWAgb3IgYG5h
bWUuc3Vic3RyKDAsIDMpYCB0byBzb3J0IGJ5CisgKiAgICAgIDMgZmlyc3QgY2hhcmFjdGVycyBv
ZiBhIHByb3BlcnR5IGNhbGxlZCBgbmFtZWApLiBUaGUgcmVzdWx0IG9mIGEgY29uc3RhbnQgZXhw
cmVzc2lvbgorICogICAgICBpcyBpbnRlcnByZXRlZCBhcyBhIHByb3BlcnR5IG5hbWUgdG8gYmUg
dXNlZCBpbiBjb21wYXJpc29ucyAoZm9yIGV4YW1wbGUgYCJzcGVjaWFsIG5hbWUiYAorICogICAg
ICB0byBzb3J0IG9iamVjdCBieSB0aGUgdmFsdWUgb2YgdGhlaXIgYHNwZWNpYWwgbmFtZWAgcHJv
cGVydHkpLiBBbiBleHByZXNzaW9uIGNhbiBiZQorICogICAgICBvcHRpb25hbGx5IHByZWZpeGVk
IHdpdGggYCtgIG9yIGAtYCB0byBjb250cm9sIGFzY2VuZGluZyBvciBkZXNjZW5kaW5nIHNvcnQg
b3JkZXIKKyAqICAgICAgKGZvciBleGFtcGxlLCBgK25hbWVgIG9yIGAtbmFtZWApLiBJZiBubyBw
cm9wZXJ0eSBpcyBwcm92aWRlZCwgKGUuZy4gYCcrJ2ApIHRoZW4gdGhlIGFycmF5CisgKiAgICAg
IGVsZW1lbnQgaXRzZWxmIGlzIHVzZWQgdG8gY29tcGFyZSB3aGVyZSBzb3J0aW5nLgorICogICAg
LSBgQXJyYXlgOiBBbiBhcnJheSBvZiBmdW5jdGlvbiBvciBzdHJpbmcgcHJlZGljYXRlcy4gVGhl
IGZpcnN0IHByZWRpY2F0ZSBpbiB0aGUgYXJyYXkKKyAqICAgICAgaXMgdXNlZCBmb3Igc29ydGlu
ZywgYnV0IHdoZW4gdHdvIGl0ZW1zIGFyZSBlcXVpdmFsZW50LCB0aGUgbmV4dCBwcmVkaWNhdGUg
aXMgdXNlZC4KKyAqCisgKiAgICBJZiB0aGUgcHJlZGljYXRlIGlzIG1pc3Npbmcgb3IgZW1wdHkg
dGhlbiBpdCBkZWZhdWx0cyB0byBgJysnYC4KKyAqCisgKiBAcGFyYW0ge2Jvb2xlYW49fSByZXZl
cnNlIFJldmVyc2UgdGhlIG9yZGVyIG9mIHRoZSBhcnJheS4KKyAqIEByZXR1cm5zIHtBcnJheX0g
U29ydGVkIGNvcHkgb2YgdGhlIHNvdXJjZSBhcnJheS4KKyAqCisgKgorICogQGV4YW1wbGUKKyAq
IFRoZSBleGFtcGxlIGJlbG93IGRlbW9uc3RyYXRlcyBhIHNpbXBsZSBuZ1JlcGVhdCwgd2hlcmUg
dGhlIGRhdGEgaXMgc29ydGVkCisgKiBieSBhZ2UgaW4gZGVzY2VuZGluZyBvcmRlciAocHJlZGlj
YXRlIGlzIHNldCB0byBgJy1hZ2UnYCkuCisgKiBgcmV2ZXJzZWAgaXMgbm90IHNldCwgd2hpY2gg
bWVhbnMgaXQgZGVmYXVsdHMgdG8gYGZhbHNlYC4KKyAgIDxleGFtcGxlIG1vZHVsZT0ib3JkZXJC
eUV4YW1wbGUiPgorICAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgICA8c2NyaXB0
PgorICAgICAgICAgYW5ndWxhci5tb2R1bGUoJ29yZGVyQnlFeGFtcGxlJywgW10pCisgICAgICAg
ICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24o
JHNjb3BlKSB7CisgICAgICAgICAgICAgJHNjb3BlLmZyaWVuZHMgPQorICAgICAgICAgICAgICAg
ICBbe25hbWU6J0pvaG4nLCBwaG9uZTonNTU1LTEyMTInLCBhZ2U6MTB9LAorICAgICAgICAgICAg
ICAgICAge25hbWU6J01hcnknLCBwaG9uZTonNTU1LTk4NzYnLCBhZ2U6MTl9LAorICAgICAgICAg
ICAgICAgICAge25hbWU6J01pa2UnLCBwaG9uZTonNTU1LTQzMjEnLCBhZ2U6MjF9LAorICAgICAg
ICAgICAgICAgICAge25hbWU6J0FkYW0nLCBwaG9uZTonNTU1LTU2NzgnLCBhZ2U6MzV9LAorICAg
ICAgICAgICAgICAgICAge25hbWU6J0p1bGllJywgcGhvbmU6JzU1NS04NzY1JywgYWdlOjI5fV07
CisgICAgICAgICAgIH1dKTsKKyAgICAgICA8L3NjcmlwdD4KKyAgICAgICA8ZGl2IG5nLWNvbnRy
b2xsZXI9IkV4YW1wbGVDb250cm9sbGVyIj4KKyAgICAgICAgIDx0YWJsZSBjbGFzcz0iZnJpZW5k
Ij4KKyAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgIDx0aD5OYW1lPC90aD4KKyAgICAgICAg
ICAgICA8dGg+UGhvbmUgTnVtYmVyPC90aD4KKyAgICAgICAgICAgICA8dGg+QWdlPC90aD4KKyAg
ICAgICAgICAgPC90cj4KKyAgICAgICAgICAgPHRyIG5nLXJlcGVhdD0iZnJpZW5kIGluIGZyaWVu
ZHMgfCBvcmRlckJ5OictYWdlJyI+CisgICAgICAgICAgICAgPHRkPnt7ZnJpZW5kLm5hbWV9fTwv
dGQ+CisgICAgICAgICAgICAgPHRkPnt7ZnJpZW5kLnBob25lfX08L3RkPgorICAgICAgICAgICAg
IDx0ZD57e2ZyaWVuZC5hZ2V9fTwvdGQ+CisgICAgICAgICAgIDwvdHI+CisgICAgICAgICA8L3Rh
YmxlPgorICAgICAgIDwvZGl2PgorICAgICA8L2ZpbGU+CisgICA8L2V4YW1wbGU+CisgKgorICog
VGhlIHByZWRpY2F0ZSBhbmQgcmV2ZXJzZSBwYXJhbWV0ZXJzIGNhbiBiZSBjb250cm9sbGVkIGR5
bmFtaWNhbGx5IHRocm91Z2ggc2NvcGUgcHJvcGVydGllcywKKyAqIGFzIHNob3duIGluIHRoZSBu
ZXh0IGV4YW1wbGUuCisgKiBAZXhhbXBsZQorICAgPGV4YW1wbGUgbW9kdWxlPSJvcmRlckJ5RXhh
bXBsZSI+CisgICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICAgIDxzY3JpcHQ+Cisg
ICAgICAgICBhbmd1bGFyLm1vZHVsZSgnb3JkZXJCeUV4YW1wbGUnLCBbXSkKKyAgICAgICAgICAg
LmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2Nv
cGUpIHsKKyAgICAgICAgICAgICAkc2NvcGUuZnJpZW5kcyA9CisgICAgICAgICAgICAgICAgIFt7
bmFtZTonSm9obicsIHBob25lOic1NTUtMTIxMicsIGFnZToxMH0sCisgICAgICAgICAgICAgICAg
ICB7bmFtZTonTWFyeScsIHBob25lOic1NTUtOTg3NicsIGFnZToxOX0sCisgICAgICAgICAgICAg
ICAgICB7bmFtZTonTWlrZScsIHBob25lOic1NTUtNDMyMScsIGFnZToyMX0sCisgICAgICAgICAg
ICAgICAgICB7bmFtZTonQWRhbScsIHBob25lOic1NTUtNTY3OCcsIGFnZTozNX0sCisgICAgICAg
ICAgICAgICAgICB7bmFtZTonSnVsaWUnLCBwaG9uZTonNTU1LTg3NjUnLCBhZ2U6Mjl9XTsKKyAg
ICAgICAgICAgICAkc2NvcGUucHJlZGljYXRlID0gJ2FnZSc7CisgICAgICAgICAgICAgJHNjb3Bl
LnJldmVyc2UgPSB0cnVlOworICAgICAgICAgICAgICRzY29wZS5vcmRlciA9IGZ1bmN0aW9uKHBy
ZWRpY2F0ZSkgeworICAgICAgICAgICAgICAgJHNjb3BlLnJldmVyc2UgPSAoJHNjb3BlLnByZWRp
Y2F0ZSA9PT0gcHJlZGljYXRlKSA/ICEkc2NvcGUucmV2ZXJzZSA6IGZhbHNlOworICAgICAgICAg
ICAgICAgJHNjb3BlLnByZWRpY2F0ZSA9IHByZWRpY2F0ZTsKKyAgICAgICAgICAgICB9OworICAg
ICAgICAgICB9XSk7CisgICAgICAgPC9zY3JpcHQ+CisgICAgICAgPHN0eWxlIHR5cGU9InRleHQv
Y3NzIj4KKyAgICAgICAgIC5zb3J0b3JkZXI6YWZ0ZXIgeworICAgICAgICAgICBjb250ZW50OiAn
XDI1YjInOworICAgICAgICAgfQorICAgICAgICAgLnNvcnRvcmRlci5yZXZlcnNlOmFmdGVyIHsK
KyAgICAgICAgICAgY29udGVudDogJ1wyNWJjJzsKKyAgICAgICAgIH0KKyAgICAgICA8L3N0eWxl
PgorICAgICAgIDxkaXYgbmctY29udHJvbGxlcj0iRXhhbXBsZUNvbnRyb2xsZXIiPgorICAgICAg
ICAgPHByZT5Tb3J0aW5nIHByZWRpY2F0ZSA9IHt7cHJlZGljYXRlfX07IHJldmVyc2UgPSB7e3Jl
dmVyc2V9fTwvcHJlPgorICAgICAgICAgPGhyLz4KKyAgICAgICAgIFsgPGEgaHJlZj0iIiBuZy1j
bGljaz0icHJlZGljYXRlPScnIj51bnNvcnRlZDwvYT4gXQorICAgICAgICAgPHRhYmxlIGNsYXNz
PSJmcmllbmQiPgorICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgPHRoPgorICAgICAgICAg
ICAgICAgPGEgaHJlZj0iIiBuZy1jbGljaz0ib3JkZXIoJ25hbWUnKSI+TmFtZTwvYT4KKyAgICAg
ICAgICAgICAgIDxzcGFuIGNsYXNzPSJzb3J0b3JkZXIiIG5nLXNob3c9InByZWRpY2F0ZSA9PT0g
J25hbWUnIiBuZy1jbGFzcz0ie3JldmVyc2U6cmV2ZXJzZX0iPjwvc3Bhbj4KKyAgICAgICAgICAg
ICA8L3RoPgorICAgICAgICAgICAgIDx0aD4KKyAgICAgICAgICAgICAgIDxhIGhyZWY9IiIgbmct
Y2xpY2s9Im9yZGVyKCdwaG9uZScpIj5QaG9uZSBOdW1iZXI8L2E+CisgICAgICAgICAgICAgICA8
c3BhbiBjbGFzcz0ic29ydG9yZGVyIiBuZy1zaG93PSJwcmVkaWNhdGUgPT09ICdwaG9uZSciIG5n
LWNsYXNzPSJ7cmV2ZXJzZTpyZXZlcnNlfSI+PC9zcGFuPgorICAgICAgICAgICAgIDwvdGg+Cisg
ICAgICAgICAgICAgPHRoPgorICAgICAgICAgICAgICAgPGEgaHJlZj0iIiBuZy1jbGljaz0ib3Jk
ZXIoJ2FnZScpIj5BZ2U8L2E+CisgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic29ydG9yZGVy
IiBuZy1zaG93PSJwcmVkaWNhdGUgPT09ICdhZ2UnIiBuZy1jbGFzcz0ie3JldmVyc2U6cmV2ZXJz
ZX0iPjwvc3Bhbj4KKyAgICAgICAgICAgICA8L3RoPgorICAgICAgICAgICA8L3RyPgorICAgICAg
ICAgICA8dHIgbmctcmVwZWF0PSJmcmllbmQgaW4gZnJpZW5kcyB8IG9yZGVyQnk6cHJlZGljYXRl
OnJldmVyc2UiPgorICAgICAgICAgICAgIDx0ZD57e2ZyaWVuZC5uYW1lfX08L3RkPgorICAgICAg
ICAgICAgIDx0ZD57e2ZyaWVuZC5waG9uZX19PC90ZD4KKyAgICAgICAgICAgICA8dGQ+e3tmcmll
bmQuYWdlfX08L3RkPgorICAgICAgICAgICA8L3RyPgorICAgICAgICAgPC90YWJsZT4KKyAgICAg
ICA8L2Rpdj4KKyAgICAgPC9maWxlPgorICAgPC9leGFtcGxlPgorICoKKyAqIEl0J3MgYWxzbyBw
b3NzaWJsZSB0byBjYWxsIHRoZSBvcmRlckJ5IGZpbHRlciBtYW51YWxseSwgYnkgaW5qZWN0aW5n
IGAkZmlsdGVyYCwgcmV0cmlldmluZyB0aGUKKyAqIGZpbHRlciByb3V0aW5lIHdpdGggYCRmaWx0
ZXIoJ29yZGVyQnknKWAsIGFuZCBjYWxsaW5nIHRoZSByZXR1cm5lZCBmaWx0ZXIgcm91dGluZSB3
aXRoIHRoZQorICogZGVzaXJlZCBwYXJhbWV0ZXJzLgorICoKKyAqIEV4YW1wbGU6CisgKgorICog
QGV4YW1wbGUKKyAgPGV4YW1wbGUgbW9kdWxlPSJvcmRlckJ5RXhhbXBsZSI+CisgICAgPGZpbGUg
bmFtZT0iaW5kZXguaHRtbCI+CisgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9IkV4YW1wbGVDb250
cm9sbGVyIj4KKyAgICAgICAgPHRhYmxlIGNsYXNzPSJmcmllbmQiPgorICAgICAgICAgIDx0cj4K
KyAgICAgICAgICAgIDx0aD48YSBocmVmPSIiIG5nLWNsaWNrPSJyZXZlcnNlPWZhbHNlO29yZGVy
KCduYW1lJywgZmFsc2UpIj5OYW1lPC9hPgorICAgICAgICAgICAgICAoPGEgaHJlZj0iIiBuZy1j
bGljaz0ib3JkZXIoJy1uYW1lJyxmYWxzZSkiPl48L2E+KTwvdGg+CisgICAgICAgICAgICA8dGg+
PGEgaHJlZj0iIiBuZy1jbGljaz0icmV2ZXJzZT0hcmV2ZXJzZTtvcmRlcigncGhvbmUnLCByZXZl
cnNlKSI+UGhvbmUgTnVtYmVyPC9hPjwvdGg+CisgICAgICAgICAgICA8dGg+PGEgaHJlZj0iIiBu
Zy1jbGljaz0icmV2ZXJzZT0hcmV2ZXJzZTtvcmRlcignYWdlJyxyZXZlcnNlKSI+QWdlPC9hPjwv
dGg+CisgICAgICAgICAgPC90cj4KKyAgICAgICAgICA8dHIgbmctcmVwZWF0PSJmcmllbmQgaW4g
ZnJpZW5kcyI+CisgICAgICAgICAgICA8dGQ+e3tmcmllbmQubmFtZX19PC90ZD4KKyAgICAgICAg
ICAgIDx0ZD57e2ZyaWVuZC5waG9uZX19PC90ZD4KKyAgICAgICAgICAgIDx0ZD57e2ZyaWVuZC5h
Z2V9fTwvdGQ+CisgICAgICAgICAgPC90cj4KKyAgICAgICAgPC90YWJsZT4KKyAgICAgIDwvZGl2
PgorICAgIDwvZmlsZT4KKworICAgIDxmaWxlIG5hbWU9InNjcmlwdC5qcyI+CisgICAgICBhbmd1
bGFyLm1vZHVsZSgnb3JkZXJCeUV4YW1wbGUnLCBbXSkKKyAgICAgICAgLmNvbnRyb2xsZXIoJ0V4
YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCAnJGZpbHRlcicsIGZ1bmN0aW9uKCRzY29wZSwg
JGZpbHRlcikgeworICAgICAgICAgIHZhciBvcmRlckJ5ID0gJGZpbHRlcignb3JkZXJCeScpOwor
ICAgICAgICAgICRzY29wZS5mcmllbmRzID0gWworICAgICAgICAgICAgeyBuYW1lOiAnSm9obics
ICAgIHBob25lOiAnNTU1LTEyMTInLCAgICBhZ2U6IDEwIH0sCisgICAgICAgICAgICB7IG5hbWU6
ICdNYXJ5JywgICAgcGhvbmU6ICc1NTUtOTg3NicsICAgIGFnZTogMTkgfSwKKyAgICAgICAgICAg
IHsgbmFtZTogJ01pa2UnLCAgICBwaG9uZTogJzU1NS00MzIxJywgICAgYWdlOiAyMSB9LAorICAg
ICAgICAgICAgeyBuYW1lOiAnQWRhbScsICAgIHBob25lOiAnNTU1LTU2NzgnLCAgICBhZ2U6IDM1
IH0sCisgICAgICAgICAgICB7IG5hbWU6ICdKdWxpZScsICAgcGhvbmU6ICc1NTUtODc2NScsICAg
IGFnZTogMjkgfQorICAgICAgICAgIF07CisgICAgICAgICAgJHNjb3BlLm9yZGVyID0gZnVuY3Rp
b24ocHJlZGljYXRlLCByZXZlcnNlKSB7CisgICAgICAgICAgICAkc2NvcGUuZnJpZW5kcyA9IG9y
ZGVyQnkoJHNjb3BlLmZyaWVuZHMsIHByZWRpY2F0ZSwgcmV2ZXJzZSk7CisgICAgICAgICAgfTsK
KyAgICAgICAgICAkc2NvcGUub3JkZXIoJy1hZ2UnLGZhbHNlKTsKKyAgICAgICAgfV0pOworICAg
IDwvZmlsZT4KKzwvZXhhbXBsZT4KKyAqLworb3JkZXJCeUZpbHRlci4kaW5qZWN0ID0gWyckcGFy
c2UnXTsKK2Z1bmN0aW9uIG9yZGVyQnlGaWx0ZXIoJHBhcnNlKSB7CisgIHJldHVybiBmdW5jdGlv
bihhcnJheSwgc29ydFByZWRpY2F0ZSwgcmV2ZXJzZU9yZGVyKSB7CisKKyAgICBpZiAoIShpc0Fy
cmF5TGlrZShhcnJheSkpKSByZXR1cm4gYXJyYXk7CisKKyAgICBpZiAoIWlzQXJyYXkoc29ydFBy
ZWRpY2F0ZSkpIHsgc29ydFByZWRpY2F0ZSA9IFtzb3J0UHJlZGljYXRlXTsgfQorICAgIGlmIChz
b3J0UHJlZGljYXRlLmxlbmd0aCA9PT0gMCkgeyBzb3J0UHJlZGljYXRlID0gWycrJ107IH0KKwor
ICAgIHZhciBwcmVkaWNhdGVzID0gcHJvY2Vzc1ByZWRpY2F0ZXMoc29ydFByZWRpY2F0ZSwgcmV2
ZXJzZU9yZGVyKTsKKworICAgIC8vIFRoZSBuZXh0IHRocmVlIGxpbmVzIGFyZSBhIHZlcnNpb24g
b2YgYSBTd2FydHppYW4gVHJhbnNmb3JtIGlkaW9tIGZyb20gUGVybAorICAgIC8vIChzb21ldGlt
ZXMgY2FsbGVkIHRoZSBEZWNvcmF0ZS1Tb3J0LVVuZGVjb3JhdGUgaWRpb20pCisgICAgLy8gU2Vl
IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NjaHdhcnR6aWFuX3RyYW5zZm9ybQorICAg
IHZhciBjb21wYXJlVmFsdWVzID0gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGFycmF5LCBnZXRD
b21wYXJpc29uT2JqZWN0KTsKKyAgICBjb21wYXJlVmFsdWVzLnNvcnQoZG9Db21wYXJpc29uKTsK
KyAgICBhcnJheSA9IGNvbXBhcmVWYWx1ZXMubWFwKGZ1bmN0aW9uKGl0ZW0pIHsgcmV0dXJuIGl0
ZW0udmFsdWU7IH0pOworCisgICAgcmV0dXJuIGFycmF5OworCisgICAgZnVuY3Rpb24gZ2V0Q29t
cGFyaXNvbk9iamVjdCh2YWx1ZSwgaW5kZXgpIHsKKyAgICAgIHJldHVybiB7CisgICAgICAgIHZh
bHVlOiB2YWx1ZSwKKyAgICAgICAgcHJlZGljYXRlVmFsdWVzOiBwcmVkaWNhdGVzLm1hcChmdW5j
dGlvbihwcmVkaWNhdGUpIHsKKyAgICAgICAgICByZXR1cm4gZ2V0UHJlZGljYXRlVmFsdWUocHJl
ZGljYXRlLmdldCh2YWx1ZSksIGluZGV4KTsKKyAgICAgICAgfSkKKyAgICAgIH07CisgICAgfQor
CisgICAgZnVuY3Rpb24gZG9Db21wYXJpc29uKHYxLCB2MikgeworICAgICAgdmFyIHJlc3VsdCA9
IDA7CisgICAgICBmb3IgKHZhciBpbmRleD0wLCBsZW5ndGggPSBwcmVkaWNhdGVzLmxlbmd0aDsg
aW5kZXggPCBsZW5ndGg7ICsraW5kZXgpIHsKKyAgICAgICAgcmVzdWx0ID0gY29tcGFyZSh2MS5w
cmVkaWNhdGVWYWx1ZXNbaW5kZXhdLCB2Mi5wcmVkaWNhdGVWYWx1ZXNbaW5kZXhdKSAqIHByZWRp
Y2F0ZXNbaW5kZXhdLmRlc2NlbmRpbmc7CisgICAgICAgIGlmIChyZXN1bHQpIGJyZWFrOworICAg
ICAgfQorICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgIH07CisKKyAgZnVuY3Rpb24gcHJv
Y2Vzc1ByZWRpY2F0ZXMoc29ydFByZWRpY2F0ZSwgcmV2ZXJzZU9yZGVyKSB7CisgICAgcmV2ZXJz
ZU9yZGVyID0gcmV2ZXJzZU9yZGVyID8gLTEgOiAxOworICAgIHJldHVybiBzb3J0UHJlZGljYXRl
Lm1hcChmdW5jdGlvbihwcmVkaWNhdGUpIHsKKyAgICAgIHZhciBkZXNjZW5kaW5nID0gMSwgZ2V0
ID0gaWRlbnRpdHk7CisKKyAgICAgIGlmIChpc0Z1bmN0aW9uKHByZWRpY2F0ZSkpIHsKKyAgICAg
ICAgZ2V0ID0gcHJlZGljYXRlOworICAgICAgfSBlbHNlIGlmIChpc1N0cmluZyhwcmVkaWNhdGUp
KSB7CisgICAgICAgIGlmICgocHJlZGljYXRlLmNoYXJBdCgwKSA9PSAnKycgfHwgcHJlZGljYXRl
LmNoYXJBdCgwKSA9PSAnLScpKSB7CisgICAgICAgICAgZGVzY2VuZGluZyA9IHByZWRpY2F0ZS5j
aGFyQXQoMCkgPT0gJy0nID8gLTEgOiAxOworICAgICAgICAgIHByZWRpY2F0ZSA9IHByZWRpY2F0
ZS5zdWJzdHJpbmcoMSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHByZWRpY2F0ZSAhPT0gJycp
IHsKKyAgICAgICAgICBnZXQgPSAkcGFyc2UocHJlZGljYXRlKTsKKyAgICAgICAgICBpZiAoZ2V0
LmNvbnN0YW50KSB7CisgICAgICAgICAgICB2YXIga2V5ID0gZ2V0KCk7CisgICAgICAgICAgICBn
ZXQgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfTsKKyAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiB7IGdldDogZ2V0LCBkZXNjZW5kaW5n
OiBkZXNjZW5kaW5nICogcmV2ZXJzZU9yZGVyIH07CisgICAgfSk7CisgIH0KKworICBmdW5jdGlv
biBpc1ByaW1pdGl2ZSh2YWx1ZSkgeworICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7CisgICAg
ICBjYXNlICdudW1iZXInOiAvKiBmYWxscyB0aHJvdWdoICovCisgICAgICBjYXNlICdib29sZWFu
JzogLyogZmFsbHMgdGhyb3VnaCAqLworICAgICAgY2FzZSAnc3RyaW5nJzoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICB9CisKKyAgZnVuY3Rpb24gb2JqZWN0VmFsdWUodmFsdWUsIGluZGV4KSB7CisgICAgLy8gSWYg
YHZhbHVlT2ZgIGlzIGEgdmFsaWQgZnVuY3Rpb24gdXNlIHRoYXQKKyAgICBpZiAodHlwZW9mIHZh
bHVlLnZhbHVlT2YgPT09ICdmdW5jdGlvbicpIHsKKyAgICAgIHZhbHVlID0gdmFsdWUudmFsdWVP
ZigpOworICAgICAgaWYgKGlzUHJpbWl0aXZlKHZhbHVlKSkgcmV0dXJuIHZhbHVlOworICAgIH0K
KyAgICAvLyBJZiBgdG9TdHJpbmdgIGlzIGEgdmFsaWQgZnVuY3Rpb24gYW5kIG5vdCB0aGUgb25l
IGZyb20gYE9iamVjdC5wcm90b3R5cGVgIHVzZSB0aGF0CisgICAgaWYgKGhhc0N1c3RvbVRvU3Ry
aW5nKHZhbHVlKSkgeworICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpOworICAgICAgaWYg
KGlzUHJpbWl0aXZlKHZhbHVlKSkgcmV0dXJuIHZhbHVlOworICAgIH0KKyAgICAvLyBXZSBoYXZl
IGEgYmFzaWMgb2JqZWN0IHNvIHdlIHVzZSB0aGUgcG9zaXRpb24gb2YgdGhlIG9iamVjdCBpbiB0
aGUgY29sbGVjdGlvbgorICAgIHJldHVybiBpbmRleDsKKyAgfQorCisgIGZ1bmN0aW9uIGdldFBy
ZWRpY2F0ZVZhbHVlKHZhbHVlLCBpbmRleCkgeworICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVl
OworICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgeworICAgICAgdHlwZSA9ICdzdHJpbmcnOworICAg
ICAgdmFsdWUgPSAnbnVsbCc7CisgICAgfSBlbHNlIGlmICh0eXBlID09PSAnc3RyaW5nJykgewor
ICAgICAgdmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpOworICAgIH0gZWxzZSBpZiAodHlwZSA9
PT0gJ29iamVjdCcpIHsKKyAgICAgIHZhbHVlID0gb2JqZWN0VmFsdWUodmFsdWUsIGluZGV4KTsK
KyAgICB9CisgICAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCB0eXBlOiB0eXBlIH07CisgIH0KKwor
ICBmdW5jdGlvbiBjb21wYXJlKHYxLCB2MikgeworICAgIHZhciByZXN1bHQgPSAwOworICAgIGlm
ICh2MS50eXBlID09PSB2Mi50eXBlKSB7CisgICAgICBpZiAodjEudmFsdWUgIT09IHYyLnZhbHVl
KSB7CisgICAgICAgIHJlc3VsdCA9IHYxLnZhbHVlIDwgdjIudmFsdWUgPyAtMSA6IDE7CisgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHJlc3VsdCA9IHYxLnR5cGUgPCB2Mi50eXBlID8gLTEg
OiAxOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworICB9Cit9CisKK2Z1bmN0aW9uIG5nRGly
ZWN0aXZlKGRpcmVjdGl2ZSkgeworICBpZiAoaXNGdW5jdGlvbihkaXJlY3RpdmUpKSB7CisgICAg
ZGlyZWN0aXZlID0geworICAgICAgbGluazogZGlyZWN0aXZlCisgICAgfTsKKyAgfQorICBkaXJl
Y3RpdmUucmVzdHJpY3QgPSBkaXJlY3RpdmUucmVzdHJpY3QgfHwgJ0FDJzsKKyAgcmV0dXJuIHZh
bHVlRm4oZGlyZWN0aXZlKTsKK30KKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFt
ZSBhCisgKiBAcmVzdHJpY3QgRQorICoKKyAqIEBkZXNjcmlwdGlvbgorICogTW9kaWZpZXMgdGhl
IGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlIGh0bWwgQSB0YWcgc28gdGhhdCB0aGUgZGVmYXVsdCBh
Y3Rpb24gaXMgcHJldmVudGVkIHdoZW4KKyAqIHRoZSBocmVmIGF0dHJpYnV0ZSBpcyBlbXB0eS4K
KyAqCisgKiBUaGlzIGNoYW5nZSBwZXJtaXRzIHRoZSBlYXN5IGNyZWF0aW9uIG9mIGFjdGlvbiBs
aW5rcyB3aXRoIHRoZSBgbmdDbGlja2AgZGlyZWN0aXZlCisgKiB3aXRob3V0IGNoYW5naW5nIHRo
ZSBsb2NhdGlvbiBvciBjYXVzaW5nIHBhZ2UgcmVsb2FkcywgZS5nLjoKKyAqIGA8YSBocmVmPSIi
IG5nLWNsaWNrPSJsaXN0LmFkZEl0ZW0oKSI+QWRkIEl0ZW08L2E+YAorICovCit2YXIgaHRtbEFu
Y2hvckRpcmVjdGl2ZSA9IHZhbHVlRm4oeworICByZXN0cmljdDogJ0UnLAorICBjb21waWxlOiBm
dW5jdGlvbihlbGVtZW50LCBhdHRyKSB7CisgICAgaWYgKCFhdHRyLmhyZWYgJiYgIWF0dHIueGxp
bmtIcmVmKSB7CisgICAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQpIHsKKyAgICAg
ICAgLy8gSWYgdGhlIGxpbmtlZCBlbGVtZW50IGlzIG5vdCBhbiBhbmNob3IgdGFnIGFueW1vcmUs
IGRvIG5vdGhpbmcKKyAgICAgICAgaWYgKGVsZW1lbnRbMF0ubm9kZU5hbWUudG9Mb3dlckNhc2Uo
KSAhPT0gJ2EnKSByZXR1cm47CisKKyAgICAgICAgLy8gU1ZHQUVsZW1lbnQgZG9lcyBub3QgdXNl
IHRoZSBocmVmIGF0dHJpYnV0ZSwgYnV0IHJhdGhlciB0aGUgJ3hsaW5rSHJlZicgYXR0cmlidXRl
LgorICAgICAgICB2YXIgaHJlZiA9IHRvU3RyaW5nLmNhbGwoZWxlbWVudC5wcm9wKCdocmVmJykp
ID09PSAnW29iamVjdCBTVkdBbmltYXRlZFN0cmluZ10nID8KKyAgICAgICAgICAgICAgICAgICAn
eGxpbms6aHJlZicgOiAnaHJlZic7CisgICAgICAgIGVsZW1lbnQub24oJ2NsaWNrJywgZnVuY3Rp
b24oZXZlbnQpIHsKKyAgICAgICAgICAvLyBpZiB3ZSBoYXZlIG5vIGhyZWYgdXJsLCB0aGVuIGRv
bid0IG5hdmlnYXRlIGFueXdoZXJlLgorICAgICAgICAgIGlmICghZWxlbWVudC5hdHRyKGhyZWYp
KSB7CisgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgIH0KKyAg
ICAgICAgfSk7CisgICAgICB9OworICAgIH0KKyAgfQorfSk7CisKKy8qKgorICogQG5nZG9jIGRp
cmVjdGl2ZQorICogQG5hbWUgbmdIcmVmCisgKiBAcmVzdHJpY3QgQQorICogQHByaW9yaXR5IDk5
CisgKgorICogQGRlc2NyaXB0aW9uCisgKiBVc2luZyBBbmd1bGFyIG1hcmt1cCBsaWtlIGB7e2hh
c2h9fWAgaW4gYW4gaHJlZiBhdHRyaWJ1dGUgd2lsbAorICogbWFrZSB0aGUgbGluayBnbyB0byB0
aGUgd3JvbmcgVVJMIGlmIHRoZSB1c2VyIGNsaWNrcyBpdCBiZWZvcmUKKyAqIEFuZ3VsYXIgaGFz
IGEgY2hhbmNlIHRvIHJlcGxhY2UgdGhlIGB7e2hhc2h9fWAgbWFya3VwIHdpdGggaXRzCisgKiB2
YWx1ZS4gVW50aWwgQW5ndWxhciByZXBsYWNlcyB0aGUgbWFya3VwIHRoZSBsaW5rIHdpbGwgYmUg
YnJva2VuCisgKiBhbmQgd2lsbCBtb3N0IGxpa2VseSByZXR1cm4gYSA0MDQgZXJyb3IuIFRoZSBg
bmdIcmVmYCBkaXJlY3RpdmUKKyAqIHNvbHZlcyB0aGlzIHByb2JsZW0uCisgKgorICogVGhlIHdy
b25nIHdheSB0byB3cml0ZSBpdDoKKyAqIGBgYGh0bWwKKyAqIDxhIGhyZWY9Imh0dHA6Ly93d3cu
Z3JhdmF0YXIuY29tL2F2YXRhci97e2hhc2h9fSI+bGluazE8L2E+CisgKiBgYGAKKyAqCisgKiBU
aGUgY29ycmVjdCB3YXkgdG8gd3JpdGUgaXQ6CisgKiBgYGBodG1sCisgKiA8YSBuZy1ocmVmPSJo
dHRwOi8vd3d3LmdyYXZhdGFyLmNvbS9hdmF0YXIve3toYXNofX0iPmxpbmsxPC9hPgorICogYGBg
CisgKgorICogQGVsZW1lbnQgQQorICogQHBhcmFtIHt0ZW1wbGF0ZX0gbmdIcmVmIGFueSBzdHJp
bmcgd2hpY2ggY2FuIGNvbnRhaW4gYHt7fX1gIG1hcmt1cC4KKyAqCisgKiBAZXhhbXBsZQorICog
VGhpcyBleGFtcGxlIHNob3dzIHZhcmlvdXMgY29tYmluYXRpb25zIG9mIGBocmVmYCwgYG5nLWhy
ZWZgIGFuZCBgbmctY2xpY2tgIGF0dHJpYnV0ZXMKKyAqIGluIGxpbmtzIGFuZCB0aGVpciBkaWZm
ZXJlbnQgYmVoYXZpb3JzOgorICAgIDxleGFtcGxlPgorICAgICAgPGZpbGUgbmFtZT0iaW5kZXgu
aHRtbCI+CisgICAgICAgIDxpbnB1dCBuZy1tb2RlbD0idmFsdWUiIC8+PGJyIC8+CisgICAgICAg
IDxhIGlkPSJsaW5rLTEiIGhyZWYgbmctY2xpY2s9InZhbHVlID0gMSI+bGluayAxPC9hPiAobGlu
aywgZG9uJ3QgcmVsb2FkKTxiciAvPgorICAgICAgICA8YSBpZD0ibGluay0yIiBocmVmPSIiIG5n
LWNsaWNrPSJ2YWx1ZSA9IDIiPmxpbmsgMjwvYT4gKGxpbmssIGRvbid0IHJlbG9hZCk8YnIgLz4K
KyAgICAgICAgPGEgaWQ9ImxpbmstMyIgbmctaHJlZj0iL3t7JzEyMyd9fSI+bGluayAzPC9hPiAo
bGluaywgcmVsb2FkISk8YnIgLz4KKyAgICAgICAgPGEgaWQ9ImxpbmstNCIgaHJlZj0iIiBuYW1l
PSJ4eCIgbmctY2xpY2s9InZhbHVlID0gNCI+YW5jaG9yPC9hPiAobGluaywgZG9uJ3QgcmVsb2Fk
KTxiciAvPgorICAgICAgICA8YSBpZD0ibGluay01IiBuYW1lPSJ4eHgiIG5nLWNsaWNrPSJ2YWx1
ZSA9IDUiPmFuY2hvcjwvYT4gKG5vIGxpbmspPGJyIC8+CisgICAgICAgIDxhIGlkPSJsaW5rLTYi
IG5nLWhyZWY9Int7dmFsdWV9fSI+bGluazwvYT4gKGxpbmssIGNoYW5nZSBsb2NhdGlvbikKKyAg
ICAgIDwvZmlsZT4KKyAgICAgIDxmaWxlIG5hbWU9InByb3RyYWN0b3IuanMiIHR5cGU9InByb3Ry
YWN0b3IiPgorICAgICAgICBpdCgnc2hvdWxkIGV4ZWN1dGUgbmctY2xpY2sgYnV0IG5vdCByZWxv
YWQgd2hlbiBocmVmIHdpdGhvdXQgdmFsdWUnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICBlbGVt
ZW50KGJ5LmlkKCdsaW5rLTEnKSkuY2xpY2soKTsKKyAgICAgICAgICBleHBlY3QoZWxlbWVudChi
eS5tb2RlbCgndmFsdWUnKSkuZ2V0QXR0cmlidXRlKCd2YWx1ZScpKS50b0VxdWFsKCcxJyk7Cisg
ICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ2xpbmstMScpKS5nZXRBdHRyaWJ1dGUoJ2hy
ZWYnKSkudG9CZSgnJyk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdzaG91bGQgZXhlY3V0
ZSBuZy1jbGljayBidXQgbm90IHJlbG9hZCB3aGVuIGhyZWYgZW1wdHkgc3RyaW5nJywgZnVuY3Rp
b24oKSB7CisgICAgICAgICAgZWxlbWVudChieS5pZCgnbGluay0yJykpLmNsaWNrKCk7CisgICAg
ICAgICAgZXhwZWN0KGVsZW1lbnQoYnkubW9kZWwoJ3ZhbHVlJykpLmdldEF0dHJpYnV0ZSgndmFs
dWUnKSkudG9FcXVhbCgnMicpOworICAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmlkKCdsaW5r
LTInKSkuZ2V0QXR0cmlidXRlKCdocmVmJykpLnRvQmUoJycpOworICAgICAgICB9KTsKKworICAg
ICAgICBpdCgnc2hvdWxkIGV4ZWN1dGUgbmctY2xpY2sgYW5kIGNoYW5nZSB1cmwgd2hlbiBuZy1o
cmVmIHNwZWNpZmllZCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5
LmlkKCdsaW5rLTMnKSkuZ2V0QXR0cmlidXRlKCdocmVmJykpLnRvTWF0Y2goL1wvMTIzJC8pOwor
CisgICAgICAgICAgZWxlbWVudChieS5pZCgnbGluay0zJykpLmNsaWNrKCk7CisKKyAgICAgICAg
ICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBuYXZpZ2F0ZSBhd2F5IGZyb20gYW4gQW5ndWxhciBwYWdl
LCBzbyB3ZSBuZWVkCisgICAgICAgICAgLy8gdG8gdXNlIGJyb3dzZXIuZHJpdmVyIHRvIGdldCB0
aGUgYmFzZSB3ZWJkcml2ZXIuCisKKyAgICAgICAgICBicm93c2VyLndhaXQoZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICByZXR1cm4gYnJvd3Nlci5kcml2ZXIuZ2V0Q3VycmVudFVybCgpLnRoZW4o
ZnVuY3Rpb24odXJsKSB7CisgICAgICAgICAgICAgIHJldHVybiB1cmwubWF0Y2goL1wvMTIzJC8p
OworICAgICAgICAgICAgfSk7CisgICAgICAgICAgfSwgNTAwMCwgJ3BhZ2Ugc2hvdWxkIG5hdmln
YXRlIHRvIC8xMjMnKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCBleGVjdXRl
IG5nLWNsaWNrIGJ1dCBub3QgcmVsb2FkIHdoZW4gaHJlZiBlbXB0eSBzdHJpbmcgYW5kIG5hbWUg
c3BlY2lmaWVkJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgZWxlbWVudChieS5pZCgnbGluay00
JykpLmNsaWNrKCk7CisgICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkubW9kZWwoJ3ZhbHVlJykp
LmdldEF0dHJpYnV0ZSgndmFsdWUnKSkudG9FcXVhbCgnNCcpOworICAgICAgICAgIGV4cGVjdChl
bGVtZW50KGJ5LmlkKCdsaW5rLTQnKSkuZ2V0QXR0cmlidXRlKCdocmVmJykpLnRvQmUoJycpOwor
ICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIGV4ZWN1dGUgbmctY2xpY2sgYnV0IG5v
dCByZWxvYWQgd2hlbiBubyBocmVmIGJ1dCBuYW1lIHNwZWNpZmllZCcsIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgIGVsZW1lbnQoYnkuaWQoJ2xpbmstNScpKS5jbGljaygpOworICAgICAgICAgIGV4
cGVjdChlbGVtZW50KGJ5Lm1vZGVsKCd2YWx1ZScpKS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpLnRv
RXF1YWwoJzUnKTsKKyAgICAgICAgICBleHBlY3QoZWxlbWVudChieS5pZCgnbGluay01JykpLmdl
dEF0dHJpYnV0ZSgnaHJlZicpKS50b0JlKG51bGwpOworICAgICAgICB9KTsKKworICAgICAgICBp
dCgnc2hvdWxkIG9ubHkgY2hhbmdlIHVybCB3aGVuIG9ubHkgbmctaHJlZicsIGZ1bmN0aW9uKCkg
eworICAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ3ZhbHVlJykpLmNsZWFyKCk7CisgICAgICAg
ICAgZWxlbWVudChieS5tb2RlbCgndmFsdWUnKSkuc2VuZEtleXMoJzYnKTsKKyAgICAgICAgICBl
eHBlY3QoZWxlbWVudChieS5pZCgnbGluay02JykpLmdldEF0dHJpYnV0ZSgnaHJlZicpKS50b01h
dGNoKC9cLzYkLyk7CisKKyAgICAgICAgICBlbGVtZW50KGJ5LmlkKCdsaW5rLTYnKSkuY2xpY2so
KTsKKworICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIG5hdmlnYXRlIGF3YXkgZnJvbSBh
biBBbmd1bGFyIHBhZ2UsIHNvIHdlIG5lZWQKKyAgICAgICAgICAvLyB0byB1c2UgYnJvd3Nlci5k
cml2ZXIgdG8gZ2V0IHRoZSBiYXNlIHdlYmRyaXZlci4KKyAgICAgICAgICBicm93c2VyLndhaXQo
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICByZXR1cm4gYnJvd3Nlci5kcml2ZXIuZ2V0Q3VycmVu
dFVybCgpLnRoZW4oZnVuY3Rpb24odXJsKSB7CisgICAgICAgICAgICAgIHJldHVybiB1cmwubWF0
Y2goL1wvNiQvKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgIH0sIDUwMDAsICdwYWdlIHNo
b3VsZCBuYXZpZ2F0ZSB0byAvNicpOworICAgICAgICB9KTsKKyAgICAgIDwvZmlsZT4KKyAgICA8
L2V4YW1wbGU+CisgKi8KKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBuZ1Ny
YworICogQHJlc3RyaWN0IEEKKyAqIEBwcmlvcml0eSA5OQorICoKKyAqIEBkZXNjcmlwdGlvbgor
ICogVXNpbmcgQW5ndWxhciBtYXJrdXAgbGlrZSBge3toYXNofX1gIGluIGEgYHNyY2AgYXR0cmli
dXRlIGRvZXNuJ3QKKyAqIHdvcmsgcmlnaHQ6IFRoZSBicm93c2VyIHdpbGwgZmV0Y2ggZnJvbSB0
aGUgVVJMIHdpdGggdGhlIGxpdGVyYWwKKyAqIHRleHQgYHt7aGFzaH19YCB1bnRpbCBBbmd1bGFy
IHJlcGxhY2VzIHRoZSBleHByZXNzaW9uIGluc2lkZQorICogYHt7aGFzaH19YC4gVGhlIGBuZ1Ny
Y2AgZGlyZWN0aXZlIHNvbHZlcyB0aGlzIHByb2JsZW0uCisgKgorICogVGhlIGJ1Z2d5IHdheSB0
byB3cml0ZSBpdDoKKyAqIGBgYGh0bWwKKyAqIDxpbWcgc3JjPSJodHRwOi8vd3d3LmdyYXZhdGFy
LmNvbS9hdmF0YXIve3toYXNofX0iIGFsdD0iRGVzY3JpcHRpb24iLz4KKyAqIGBgYAorICoKKyAq
IFRoZSBjb3JyZWN0IHdheSB0byB3cml0ZSBpdDoKKyAqIGBgYGh0bWwKKyAqIDxpbWcgbmctc3Jj
PSJodHRwOi8vd3d3LmdyYXZhdGFyLmNvbS9hdmF0YXIve3toYXNofX0iIGFsdD0iRGVzY3JpcHRp
b24iIC8+CisgKiBgYGAKKyAqCisgKiBAZWxlbWVudCBJTUcKKyAqIEBwYXJhbSB7dGVtcGxhdGV9
IG5nU3JjIGFueSBzdHJpbmcgd2hpY2ggY2FuIGNvbnRhaW4gYHt7fX1gIG1hcmt1cC4KKyAqLwor
CisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1lIG5nU3Jjc2V0CisgKiBAcmVzdHJp
Y3QgQQorICogQHByaW9yaXR5IDk5CisgKgorICogQGRlc2NyaXB0aW9uCisgKiBVc2luZyBBbmd1
bGFyIG1hcmt1cCBsaWtlIGB7e2hhc2h9fWAgaW4gYSBgc3Jjc2V0YCBhdHRyaWJ1dGUgZG9lc24n
dAorICogd29yayByaWdodDogVGhlIGJyb3dzZXIgd2lsbCBmZXRjaCBmcm9tIHRoZSBVUkwgd2l0
aCB0aGUgbGl0ZXJhbAorICogdGV4dCBge3toYXNofX1gIHVudGlsIEFuZ3VsYXIgcmVwbGFjZXMg
dGhlIGV4cHJlc3Npb24gaW5zaWRlCisgKiBge3toYXNofX1gLiBUaGUgYG5nU3Jjc2V0YCBkaXJl
Y3RpdmUgc29sdmVzIHRoaXMgcHJvYmxlbS4KKyAqCisgKiBUaGUgYnVnZ3kgd2F5IHRvIHdyaXRl
IGl0OgorICogYGBgaHRtbAorICogPGltZyBzcmNzZXQ9Imh0dHA6Ly93d3cuZ3JhdmF0YXIuY29t
L2F2YXRhci97e2hhc2h9fSAyeCIgYWx0PSJEZXNjcmlwdGlvbiIvPgorICogYGBgCisgKgorICog
VGhlIGNvcnJlY3Qgd2F5IHRvIHdyaXRlIGl0OgorICogYGBgaHRtbAorICogPGltZyBuZy1zcmNz
ZXQ9Imh0dHA6Ly93d3cuZ3JhdmF0YXIuY29tL2F2YXRhci97e2hhc2h9fSAyeCIgYWx0PSJEZXNj
cmlwdGlvbiIgLz4KKyAqIGBgYAorICoKKyAqIEBlbGVtZW50IElNRworICogQHBhcmFtIHt0ZW1w
bGF0ZX0gbmdTcmNzZXQgYW55IHN0cmluZyB3aGljaCBjYW4gY29udGFpbiBge3t9fWAgbWFya3Vw
LgorICovCisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgbmdEaXNhYmxlZAor
ICogQHJlc3RyaWN0IEEKKyAqIEBwcmlvcml0eSAxMDAKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAq
CisgKiBUaGlzIGRpcmVjdGl2ZSBzZXRzIHRoZSBgZGlzYWJsZWRgIGF0dHJpYnV0ZSBvbiB0aGUg
ZWxlbWVudCBpZiB0aGUKKyAqIHtAbGluayBndWlkZS9leHByZXNzaW9uIGV4cHJlc3Npb259IGlu
c2lkZSBgbmdEaXNhYmxlZGAgZXZhbHVhdGVzIHRvIHRydXRoeS4KKyAqCisgKiBBIHNwZWNpYWwg
ZGlyZWN0aXZlIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHdlIGNhbm5vdCB1c2UgaW50ZXJwb2xhdGlv
biBpbnNpZGUgdGhlIGBkaXNhYmxlZGAKKyAqIGF0dHJpYnV0ZS4gIFRoZSBmb2xsb3dpbmcgZXhh
bXBsZSB3b3VsZCBtYWtlIHRoZSBidXR0b24gZW5hYmxlZCBvbiBDaHJvbWUvRmlyZWZveAorICog
YnV0IG5vdCBvbiBvbGRlciBJRXM6CisgKgorICogYGBgaHRtbAorICogPCEtLSBTZWUgYmVsb3cg
Zm9yIGFuIGV4YW1wbGUgb2YgbmctZGlzYWJsZWQgYmVpbmcgdXNlZCBjb3JyZWN0bHkgLS0+Cisg
KiA8ZGl2IG5nLWluaXQ9ImlzRGlzYWJsZWQgPSBmYWxzZSI+CisgKiAgPGJ1dHRvbiBkaXNhYmxl
ZD0ie3tpc0Rpc2FibGVkfX0iPkRpc2FibGVkPC9idXR0b24+CisgKiA8L2Rpdj4KKyAqIGBgYAor
ICoKKyAqIFRoaXMgaXMgYmVjYXVzZSB0aGUgSFRNTCBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IHJl
cXVpcmUgYnJvd3NlcnMgdG8gcHJlc2VydmUgdGhlIHZhbHVlcyBvZgorICogYm9vbGVhbiBhdHRy
aWJ1dGVzIHN1Y2ggYXMgYGRpc2FibGVkYCAoVGhlaXIgcHJlc2VuY2UgbWVhbnMgdHJ1ZSBhbmQg
dGhlaXIgYWJzZW5jZSBtZWFucyBmYWxzZS4pCisgKiBJZiB3ZSBwdXQgYW4gQW5ndWxhciBpbnRl
cnBvbGF0aW9uIGV4cHJlc3Npb24gaW50byBzdWNoIGFuIGF0dHJpYnV0ZSB0aGVuIHRoZQorICog
YmluZGluZyBpbmZvcm1hdGlvbiB3b3VsZCBiZSBsb3N0IHdoZW4gdGhlIGJyb3dzZXIgcmVtb3Zl
cyB0aGUgYXR0cmlidXRlLgorICoKKyAqIEBleGFtcGxlCisgICAgPGV4YW1wbGU+CisgICAgICA8
ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgICAgPGxhYmVsPkNsaWNrIG1lIHRvIHRvZ2ds
ZTogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuZy1tb2RlbD0iY2hlY2tlZCI+PC9sYWJlbD48YnIv
PgorICAgICAgICA8YnV0dG9uIG5nLW1vZGVsPSJidXR0b24iIG5nLWRpc2FibGVkPSJjaGVja2Vk
Ij5CdXR0b248L2J1dHRvbj4KKyAgICAgIDwvZmlsZT4KKyAgICAgIDxmaWxlIG5hbWU9InByb3Ry
YWN0b3IuanMiIHR5cGU9InByb3RyYWN0b3IiPgorICAgICAgICBpdCgnc2hvdWxkIHRvZ2dsZSBi
dXR0b24nLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICBleHBlY3QoZWxlbWVudChieS5jc3MoJ2J1
dHRvbicpKS5nZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpLnRvQmVGYWxzeSgpOworICAgICAgICAg
IGVsZW1lbnQoYnkubW9kZWwoJ2NoZWNrZWQnKSkuY2xpY2soKTsKKyAgICAgICAgICBleHBlY3Qo
ZWxlbWVudChieS5jc3MoJ2J1dHRvbicpKS5nZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpLnRvQmVU
cnV0aHkoKTsKKyAgICAgICAgfSk7CisgICAgICA8L2ZpbGU+CisgICAgPC9leGFtcGxlPgorICoK
KyAqIEBlbGVtZW50IElOUFVUCisgKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nRGlzYWJsZWQgSWYg
dGhlIHtAbGluayBndWlkZS9leHByZXNzaW9uIGV4cHJlc3Npb259IGlzIHRydXRoeSwKKyAqICAg
ICB0aGVuIHRoZSBgZGlzYWJsZWRgIGF0dHJpYnV0ZSB3aWxsIGJlIHNldCBvbiB0aGUgZWxlbWVu
dAorICovCisKKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBuZ0NoZWNrZWQK
KyAqIEByZXN0cmljdCBBCisgKiBAcHJpb3JpdHkgMTAwCisgKgorICogQGRlc2NyaXB0aW9uCisg
KiBTZXRzIHRoZSBgY2hlY2tlZGAgYXR0cmlidXRlIG9uIHRoZSBlbGVtZW50LCBpZiB0aGUgZXhw
cmVzc2lvbiBpbnNpZGUgYG5nQ2hlY2tlZGAgaXMgdHJ1dGh5LgorICoKKyAqIE5vdGUgdGhhdCB0
aGlzIGRpcmVjdGl2ZSBzaG91bGQgbm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCB7QGxpbmsgbmdN
b2RlbCBgbmdNb2RlbGB9LAorICogYXMgdGhpcyBjYW4gbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2
aW9yLgorICoKKyAqICMjIyBXaHkgZG8gd2UgbmVlZCBgbmdDaGVja2VkYD8KKyAqCisgKiBUaGUg
SFRNTCBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IHJlcXVpcmUgYnJvd3NlcnMgdG8gcHJlc2VydmUg
dGhlIHZhbHVlcyBvZiBib29sZWFuIGF0dHJpYnV0ZXMKKyAqIHN1Y2ggYXMgY2hlY2tlZC4gKFRo
ZWlyIHByZXNlbmNlIG1lYW5zIHRydWUgYW5kIHRoZWlyIGFic2VuY2UgbWVhbnMgZmFsc2UuKQor
ICogSWYgd2UgcHV0IGFuIEFuZ3VsYXIgaW50ZXJwb2xhdGlvbiBleHByZXNzaW9uIGludG8gc3Vj
aCBhbiBhdHRyaWJ1dGUgdGhlbiB0aGUKKyAqIGJpbmRpbmcgaW5mb3JtYXRpb24gd291bGQgYmUg
bG9zdCB3aGVuIHRoZSBicm93c2VyIHJlbW92ZXMgdGhlIGF0dHJpYnV0ZS4KKyAqIFRoZSBgbmdD
aGVja2VkYCBkaXJlY3RpdmUgc29sdmVzIHRoaXMgcHJvYmxlbSBmb3IgdGhlIGBjaGVja2VkYCBh
dHRyaWJ1dGUuCisgKiBUaGlzIGNvbXBsZW1lbnRhcnkgZGlyZWN0aXZlIGlzIG5vdCByZW1vdmVk
IGJ5IHRoZSBicm93c2VyIGFuZCBzbyBwcm92aWRlcworICogYSBwZXJtYW5lbnQgcmVsaWFibGUg
cGxhY2UgdG8gc3RvcmUgdGhlIGJpbmRpbmcgaW5mb3JtYXRpb24uCisgKiBAZXhhbXBsZQorICAg
IDxleGFtcGxlPgorICAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAgICAgIDxsYWJl
bD5DaGVjayBtZSB0byBjaGVjayBib3RoOiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5nLW1vZGVs
PSJtYXN0ZXIiPjwvbGFiZWw+PGJyLz4KKyAgICAgICAgPGlucHV0IGlkPSJjaGVja1NsYXZlIiB0
eXBlPSJjaGVja2JveCIgbmctY2hlY2tlZD0ibWFzdGVyIiBhcmlhLWxhYmVsPSJTbGF2ZSBpbnB1
dCI+CisgICAgICA8L2ZpbGU+CisgICAgICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBl
PSJwcm90cmFjdG9yIj4KKyAgICAgICAgaXQoJ3Nob3VsZCBjaGVjayBib3RoIGNoZWNrQm94ZXMn
LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICBleHBlY3QoZWxlbWVudChieS5pZCgnY2hlY2tTbGF2
ZScpKS5nZXRBdHRyaWJ1dGUoJ2NoZWNrZWQnKSkudG9CZUZhbHN5KCk7CisgICAgICAgICAgZWxl
bWVudChieS5tb2RlbCgnbWFzdGVyJykpLmNsaWNrKCk7CisgICAgICAgICAgZXhwZWN0KGVsZW1l
bnQoYnkuaWQoJ2NoZWNrU2xhdmUnKSkuZ2V0QXR0cmlidXRlKCdjaGVja2VkJykpLnRvQmVUcnV0
aHkoKTsKKyAgICAgICAgfSk7CisgICAgICA8L2ZpbGU+CisgICAgPC9leGFtcGxlPgorICoKKyAq
IEBlbGVtZW50IElOUFVUCisgKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nQ2hlY2tlZCBJZiB0aGUg
e0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0gaXMgdHJ1dGh5LAorICogICAgIHRo
ZW4gdGhlIGBjaGVja2VkYCBhdHRyaWJ1dGUgd2lsbCBiZSBzZXQgb24gdGhlIGVsZW1lbnQKKyAq
LworCisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgbmdSZWFkb25seQorICog
QHJlc3RyaWN0IEEKKyAqIEBwcmlvcml0eSAxMDAKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFRo
ZSBIVE1MIHNwZWNpZmljYXRpb24gZG9lcyBub3QgcmVxdWlyZSBicm93c2VycyB0byBwcmVzZXJ2
ZSB0aGUgdmFsdWVzIG9mIGJvb2xlYW4gYXR0cmlidXRlcworICogc3VjaCBhcyByZWFkb25seS4g
KFRoZWlyIHByZXNlbmNlIG1lYW5zIHRydWUgYW5kIHRoZWlyIGFic2VuY2UgbWVhbnMgZmFsc2Uu
KQorICogSWYgd2UgcHV0IGFuIEFuZ3VsYXIgaW50ZXJwb2xhdGlvbiBleHByZXNzaW9uIGludG8g
c3VjaCBhbiBhdHRyaWJ1dGUgdGhlbiB0aGUKKyAqIGJpbmRpbmcgaW5mb3JtYXRpb24gd291bGQg
YmUgbG9zdCB3aGVuIHRoZSBicm93c2VyIHJlbW92ZXMgdGhlIGF0dHJpYnV0ZS4KKyAqIFRoZSBg
bmdSZWFkb25seWAgZGlyZWN0aXZlIHNvbHZlcyB0aGlzIHByb2JsZW0gZm9yIHRoZSBgcmVhZG9u
bHlgIGF0dHJpYnV0ZS4KKyAqIFRoaXMgY29tcGxlbWVudGFyeSBkaXJlY3RpdmUgaXMgbm90IHJl
bW92ZWQgYnkgdGhlIGJyb3dzZXIgYW5kIHNvIHByb3ZpZGVzCisgKiBhIHBlcm1hbmVudCByZWxp
YWJsZSBwbGFjZSB0byBzdG9yZSB0aGUgYmluZGluZyBpbmZvcm1hdGlvbi4KKyAqIEBleGFtcGxl
CisgICAgPGV4YW1wbGU+CisgICAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgICAg
PGxhYmVsPkNoZWNrIG1lIHRvIG1ha2UgdGV4dCByZWFkb25seTogPGlucHV0IHR5cGU9ImNoZWNr
Ym94IiBuZy1tb2RlbD0iY2hlY2tlZCI+PC9sYWJlbD48YnIvPgorICAgICAgICA8aW5wdXQgdHlw
ZT0idGV4dCIgbmctcmVhZG9ubHk9ImNoZWNrZWQiIHZhbHVlPSJJJ20gQW5ndWxhciIgYXJpYS1s
YWJlbD0iUmVhZG9ubHkgZmllbGQiIC8+CisgICAgICA8L2ZpbGU+CisgICAgICA8ZmlsZSBuYW1l
PSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFjdG9yIj4KKyAgICAgICAgaXQoJ3Nob3VsZCB0
b2dnbGUgcmVhZG9ubHkgYXR0cicsIGZ1bmN0aW9uKCkgeworICAgICAgICAgIGV4cGVjdChlbGVt
ZW50KGJ5LmNzcygnW3R5cGU9InRleHQiXScpKS5nZXRBdHRyaWJ1dGUoJ3JlYWRvbmx5JykpLnRv
QmVGYWxzeSgpOworICAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ2NoZWNrZWQnKSkuY2xpY2so
KTsKKyAgICAgICAgICBleHBlY3QoZWxlbWVudChieS5jc3MoJ1t0eXBlPSJ0ZXh0Il0nKSkuZ2V0
QXR0cmlidXRlKCdyZWFkb25seScpKS50b0JlVHJ1dGh5KCk7CisgICAgICAgIH0pOworICAgICAg
PC9maWxlPgorICAgIDwvZXhhbXBsZT4KKyAqCisgKiBAZWxlbWVudCBJTlBVVAorICogQHBhcmFt
IHtleHByZXNzaW9ufSBuZ1JlYWRvbmx5IElmIHRoZSB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBl
eHByZXNzaW9ufSBpcyB0cnV0aHksCisgKiAgICAgdGhlbiBzcGVjaWFsIGF0dHJpYnV0ZSAicmVh
ZG9ubHkiIHdpbGwgYmUgc2V0IG9uIHRoZSBlbGVtZW50CisgKi8KKworCisvKioKKyAqIEBuZ2Rv
YyBkaXJlY3RpdmUKKyAqIEBuYW1lIG5nU2VsZWN0ZWQKKyAqIEByZXN0cmljdCBBCisgKiBAcHJp
b3JpdHkgMTAwCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBUaGUgSFRNTCBzcGVjaWZpY2F0aW9u
IGRvZXMgbm90IHJlcXVpcmUgYnJvd3NlcnMgdG8gcHJlc2VydmUgdGhlIHZhbHVlcyBvZiBib29s
ZWFuIGF0dHJpYnV0ZXMKKyAqIHN1Y2ggYXMgc2VsZWN0ZWQuIChUaGVpciBwcmVzZW5jZSBtZWFu
cyB0cnVlIGFuZCB0aGVpciBhYnNlbmNlIG1lYW5zIGZhbHNlLikKKyAqIElmIHdlIHB1dCBhbiBB
bmd1bGFyIGludGVycG9sYXRpb24gZXhwcmVzc2lvbiBpbnRvIHN1Y2ggYW4gYXR0cmlidXRlIHRo
ZW4gdGhlCisgKiBiaW5kaW5nIGluZm9ybWF0aW9uIHdvdWxkIGJlIGxvc3Qgd2hlbiB0aGUgYnJv
d3NlciByZW1vdmVzIHRoZSBhdHRyaWJ1dGUuCisgKiBUaGUgYG5nU2VsZWN0ZWRgIGRpcmVjdGl2
ZSBzb2x2ZXMgdGhpcyBwcm9ibGVtIGZvciB0aGUgYHNlbGVjdGVkYCBhdHRyaWJ1dGUuCisgKiBU
aGlzIGNvbXBsZW1lbnRhcnkgZGlyZWN0aXZlIGlzIG5vdCByZW1vdmVkIGJ5IHRoZSBicm93c2Vy
IGFuZCBzbyBwcm92aWRlcworICogYSBwZXJtYW5lbnQgcmVsaWFibGUgcGxhY2UgdG8gc3RvcmUg
dGhlIGJpbmRpbmcgaW5mb3JtYXRpb24uCisgKgorICogQGV4YW1wbGUKKyAgICA8ZXhhbXBsZT4K
KyAgICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICAgICA8bGFiZWw+Q2hlY2sgbWUg
dG8gc2VsZWN0OiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5nLW1vZGVsPSJzZWxlY3RlZCI+PC9s
YWJlbD48YnIvPgorICAgICAgICA8c2VsZWN0IGFyaWEtbGFiZWw9Im5nU2VsZWN0ZWQgZGVtbyI+
CisgICAgICAgICAgPG9wdGlvbj5IZWxsbyE8L29wdGlvbj4KKyAgICAgICAgICA8b3B0aW9uIGlk
PSJncmVldCIgbmctc2VsZWN0ZWQ9InNlbGVjdGVkIj5HcmVldGluZ3MhPC9vcHRpb24+CisgICAg
ICAgIDwvc2VsZWN0PgorICAgICAgPC9maWxlPgorICAgICAgPGZpbGUgbmFtZT0icHJvdHJhY3Rv
ci5qcyIgdHlwZT0icHJvdHJhY3RvciI+CisgICAgICAgIGl0KCdzaG91bGQgc2VsZWN0IEdyZWV0
aW5ncyEnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICBleHBlY3QoZWxlbWVudChieS5pZCgnZ3Jl
ZXQnKSkuZ2V0QXR0cmlidXRlKCdzZWxlY3RlZCcpKS50b0JlRmFsc3koKTsKKyAgICAgICAgICBl
bGVtZW50KGJ5Lm1vZGVsKCdzZWxlY3RlZCcpKS5jbGljaygpOworICAgICAgICAgIGV4cGVjdChl
bGVtZW50KGJ5LmlkKCdncmVldCcpKS5nZXRBdHRyaWJ1dGUoJ3NlbGVjdGVkJykpLnRvQmVUcnV0
aHkoKTsKKyAgICAgICAgfSk7CisgICAgICA8L2ZpbGU+CisgICAgPC9leGFtcGxlPgorICoKKyAq
IEBlbGVtZW50IE9QVElPTgorICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ1NlbGVjdGVkIElmIHRo
ZSB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBleHByZXNzaW9ufSBpcyB0cnV0aHksCisgKiAgICAg
dGhlbiBzcGVjaWFsIGF0dHJpYnV0ZSAic2VsZWN0ZWQiIHdpbGwgYmUgc2V0IG9uIHRoZSBlbGVt
ZW50CisgKi8KKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBuZ09wZW4KKyAq
IEByZXN0cmljdCBBCisgKiBAcHJpb3JpdHkgMTAwCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBU
aGUgSFRNTCBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IHJlcXVpcmUgYnJvd3NlcnMgdG8gcHJlc2Vy
dmUgdGhlIHZhbHVlcyBvZiBib29sZWFuIGF0dHJpYnV0ZXMKKyAqIHN1Y2ggYXMgb3Blbi4gKFRo
ZWlyIHByZXNlbmNlIG1lYW5zIHRydWUgYW5kIHRoZWlyIGFic2VuY2UgbWVhbnMgZmFsc2UuKQor
ICogSWYgd2UgcHV0IGFuIEFuZ3VsYXIgaW50ZXJwb2xhdGlvbiBleHByZXNzaW9uIGludG8gc3Vj
aCBhbiBhdHRyaWJ1dGUgdGhlbiB0aGUKKyAqIGJpbmRpbmcgaW5mb3JtYXRpb24gd291bGQgYmUg
bG9zdCB3aGVuIHRoZSBicm93c2VyIHJlbW92ZXMgdGhlIGF0dHJpYnV0ZS4KKyAqIFRoZSBgbmdP
cGVuYCBkaXJlY3RpdmUgc29sdmVzIHRoaXMgcHJvYmxlbSBmb3IgdGhlIGBvcGVuYCBhdHRyaWJ1
dGUuCisgKiBUaGlzIGNvbXBsZW1lbnRhcnkgZGlyZWN0aXZlIGlzIG5vdCByZW1vdmVkIGJ5IHRo
ZSBicm93c2VyIGFuZCBzbyBwcm92aWRlcworICogYSBwZXJtYW5lbnQgcmVsaWFibGUgcGxhY2Ug
dG8gc3RvcmUgdGhlIGJpbmRpbmcgaW5mb3JtYXRpb24uCisgKiBAZXhhbXBsZQorICAgICA8ZXhh
bXBsZT4KKyAgICAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgICAgIDxsYWJlbD5D
aGVjayBtZSBjaGVjayBtdWx0aXBsZTogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuZy1tb2RlbD0i
b3BlbiI+PC9sYWJlbD48YnIvPgorICAgICAgICAgPGRldGFpbHMgaWQ9ImRldGFpbHMiIG5nLW9w
ZW49Im9wZW4iPgorICAgICAgICAgICAgPHN1bW1hcnk+U2hvdy9IaWRlIG1lPC9zdW1tYXJ5Pgor
ICAgICAgICAgPC9kZXRhaWxzPgorICAgICAgIDwvZmlsZT4KKyAgICAgICA8ZmlsZSBuYW1lPSJw
cm90cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFjdG9yIj4KKyAgICAgICAgIGl0KCdzaG91bGQgdG9n
Z2xlIG9wZW4nLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQo
J2RldGFpbHMnKSkuZ2V0QXR0cmlidXRlKCdvcGVuJykpLnRvQmVGYWxzeSgpOworICAgICAgICAg
ICBlbGVtZW50KGJ5Lm1vZGVsKCdvcGVuJykpLmNsaWNrKCk7CisgICAgICAgICAgIGV4cGVjdChl
bGVtZW50KGJ5LmlkKCdkZXRhaWxzJykpLmdldEF0dHJpYnV0ZSgnb3BlbicpKS50b0JlVHJ1dGh5
KCk7CisgICAgICAgICB9KTsKKyAgICAgICA8L2ZpbGU+CisgICAgIDwvZXhhbXBsZT4KKyAqCisg
KiBAZWxlbWVudCBERVRBSUxTCisgKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nT3BlbiBJZiB0aGUg
e0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0gaXMgdHJ1dGh5LAorICogICAgIHRo
ZW4gc3BlY2lhbCBhdHRyaWJ1dGUgIm9wZW4iIHdpbGwgYmUgc2V0IG9uIHRoZSBlbGVtZW50Cisg
Ki8KKwordmFyIG5nQXR0cmlidXRlQWxpYXNEaXJlY3RpdmVzID0ge307CisKKy8vIGJvb2xlYW4g
YXR0cnMgYXJlIGV2YWx1YXRlZAorZm9yRWFjaChCT09MRUFOX0FUVFIsIGZ1bmN0aW9uKHByb3BO
YW1lLCBhdHRyTmFtZSkgeworICAvLyBiaW5kaW5nIHRvIG11bHRpcGxlIGlzIG5vdCBzdXBwb3J0
ZWQKKyAgaWYgKHByb3BOYW1lID09ICJtdWx0aXBsZSIpIHJldHVybjsKKworICBmdW5jdGlvbiBk
ZWZhdWx0TGlua0ZuKHNjb3BlLCBlbGVtZW50LCBhdHRyKSB7CisgICAgc2NvcGUuJHdhdGNoKGF0
dHJbbm9ybWFsaXplZF0sIGZ1bmN0aW9uIG5nQm9vbGVhbkF0dHJXYXRjaEFjdGlvbih2YWx1ZSkg
eworICAgICAgYXR0ci4kc2V0KGF0dHJOYW1lLCAhIXZhbHVlKTsKKyAgICB9KTsKKyAgfQorCisg
IHZhciBub3JtYWxpemVkID0gZGlyZWN0aXZlTm9ybWFsaXplKCduZy0nICsgYXR0ck5hbWUpOwor
ICB2YXIgbGlua0ZuID0gZGVmYXVsdExpbmtGbjsKKworICBpZiAocHJvcE5hbWUgPT09ICdjaGVj
a2VkJykgeworICAgIGxpbmtGbiA9IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyKSB7Cisg
ICAgICAvLyBlbnN1cmluZyBuZ0NoZWNrZWQgZG9lc24ndCBpbnRlcmZlcmUgd2l0aCBuZ01vZGVs
IHdoZW4gYm90aCBhcmUgc2V0IG9uIHRoZSBzYW1lIGlucHV0CisgICAgICBpZiAoYXR0ci5uZ01v
ZGVsICE9PSBhdHRyW25vcm1hbGl6ZWRdKSB7CisgICAgICAgIGRlZmF1bHRMaW5rRm4oc2NvcGUs
IGVsZW1lbnQsIGF0dHIpOworICAgICAgfQorICAgIH07CisgIH0KKworICBuZ0F0dHJpYnV0ZUFs
aWFzRGlyZWN0aXZlc1tub3JtYWxpemVkXSA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB7Cisg
ICAgICByZXN0cmljdDogJ0EnLAorICAgICAgcHJpb3JpdHk6IDEwMCwKKyAgICAgIGxpbms6IGxp
bmtGbgorICAgIH07CisgIH07Cit9KTsKKworLy8gYWxpYXNlZCBpbnB1dCBhdHRycyBhcmUgZXZh
bHVhdGVkCitmb3JFYWNoKEFMSUFTRURfQVRUUiwgZnVuY3Rpb24oaHRtbEF0dHIsIG5nQXR0cikg
eworICBuZ0F0dHJpYnV0ZUFsaWFzRGlyZWN0aXZlc1tuZ0F0dHJdID0gZnVuY3Rpb24oKSB7Cisg
ICAgcmV0dXJuIHsKKyAgICAgIHByaW9yaXR5OiAxMDAsCisgICAgICBsaW5rOiBmdW5jdGlvbihz
Y29wZSwgZWxlbWVudCwgYXR0cikgeworICAgICAgICAvL3NwZWNpYWwgY2FzZSBuZ1BhdHRlcm4g
d2hlbiBhIGxpdGVyYWwgcmVndWxhciBleHByZXNzaW9uIHZhbHVlCisgICAgICAgIC8vaXMgdXNl
ZCBhcyB0aGUgZXhwcmVzc2lvbiAodGhpcyB3YXkgd2UgZG9uJ3QgaGF2ZSB0byB3YXRjaCBhbnl0
aGluZykuCisgICAgICAgIGlmIChuZ0F0dHIgPT09ICJuZ1BhdHRlcm4iICYmIGF0dHIubmdQYXR0
ZXJuLmNoYXJBdCgwKSA9PSAiLyIpIHsKKyAgICAgICAgICB2YXIgbWF0Y2ggPSBhdHRyLm5nUGF0
dGVybi5tYXRjaChSRUdFWF9TVFJJTkdfUkVHRVhQKTsKKyAgICAgICAgICBpZiAobWF0Y2gpIHsK
KyAgICAgICAgICAgIGF0dHIuJHNldCgibmdQYXR0ZXJuIiwgbmV3IFJlZ0V4cChtYXRjaFsxXSwg
bWF0Y2hbMl0pKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBzY29wZS4kd2F0Y2goYXR0cltuZ0F0dHJdLCBmdW5jdGlvbiBuZ0F0dHJBbGlh
c1dhdGNoQWN0aW9uKHZhbHVlKSB7CisgICAgICAgICAgYXR0ci4kc2V0KG5nQXR0ciwgdmFsdWUp
OworICAgICAgICB9KTsKKyAgICAgIH0KKyAgICB9OworICB9OworfSk7CisKKy8vIG5nLXNyYywg
bmctc3Jjc2V0LCBuZy1ocmVmIGFyZSBpbnRlcnBvbGF0ZWQKK2ZvckVhY2goWydzcmMnLCAnc3Jj
c2V0JywgJ2hyZWYnXSwgZnVuY3Rpb24oYXR0ck5hbWUpIHsKKyAgdmFyIG5vcm1hbGl6ZWQgPSBk
aXJlY3RpdmVOb3JtYWxpemUoJ25nLScgKyBhdHRyTmFtZSk7CisgIG5nQXR0cmlidXRlQWxpYXNE
aXJlY3RpdmVzW25vcm1hbGl6ZWRdID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHsKKyAgICAg
IHByaW9yaXR5OiA5OSwgLy8gaXQgbmVlZHMgdG8gcnVuIGFmdGVyIHRoZSBhdHRyaWJ1dGVzIGFy
ZSBpbnRlcnBvbGF0ZWQKKyAgICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRy
KSB7CisgICAgICAgIHZhciBwcm9wTmFtZSA9IGF0dHJOYW1lLAorICAgICAgICAgICAgbmFtZSA9
IGF0dHJOYW1lOworCisgICAgICAgIGlmIChhdHRyTmFtZSA9PT0gJ2hyZWYnICYmCisgICAgICAg
ICAgICB0b1N0cmluZy5jYWxsKGVsZW1lbnQucHJvcCgnaHJlZicpKSA9PT0gJ1tvYmplY3QgU1ZH
QW5pbWF0ZWRTdHJpbmddJykgeworICAgICAgICAgIG5hbWUgPSAneGxpbmtIcmVmJzsKKyAgICAg
ICAgICBhdHRyLiRhdHRyW25hbWVdID0gJ3hsaW5rOmhyZWYnOworICAgICAgICAgIHByb3BOYW1l
ID0gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIGF0dHIuJG9ic2VydmUobm9ybWFsaXplZCwg
ZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAgICBp
ZiAoYXR0ck5hbWUgPT09ICdocmVmJykgeworICAgICAgICAgICAgICBhdHRyLiRzZXQobmFtZSwg
bnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgfQor
CisgICAgICAgICAgYXR0ci4kc2V0KG5hbWUsIHZhbHVlKTsKKworICAgICAgICAgIC8vIG9uIElF
LCBpZiAibmc6c3JjIiBkaXJlY3RpdmUgZGVjbGFyYXRpb24gaXMgdXNlZCBhbmQgInNyYyIgYXR0
cmlidXRlIGRvZXNuJ3QgZXhpc3QKKyAgICAgICAgICAvLyB0aGVuIGNhbGxpbmcgZWxlbWVudC5z
ZXRBdHRyaWJ1dGUoJ3NyYycsICdmb28nKSBkb2Vzbid0IGRvIGFueXRoaW5nLCBzbyB3ZSBuZWVk
CisgICAgICAgICAgLy8gdG8gc2V0IHRoZSBwcm9wZXJ0eSBhcyB3ZWxsIHRvIGFjaGlldmUgdGhl
IGRlc2lyZWQgZWZmZWN0LgorICAgICAgICAgIC8vIHdlIHVzZSBhdHRyW2F0dHJOYW1lXSB2YWx1
ZSBzaW5jZSAkc2V0IGNhbiBzYW5pdGl6ZSB0aGUgdXJsLgorICAgICAgICAgIGlmIChtc2llICYm
IHByb3BOYW1lKSBlbGVtZW50LnByb3AocHJvcE5hbWUsIGF0dHJbbmFtZV0pOworICAgICAgICB9
KTsKKyAgICAgIH0KKyAgICB9OworICB9OworfSk7CisKKy8qIGdsb2JhbCAtbnVsbEZvcm1DdHJs
LCAtU1VCTUlUVEVEX0NMQVNTLCBhZGRTZXRWYWxpZGl0eU1ldGhvZDogdHJ1ZQorICovCit2YXIg
bnVsbEZvcm1DdHJsID0geworICAkYWRkQ29udHJvbDogbm9vcCwKKyAgJCRyZW5hbWVDb250cm9s
OiBudWxsRm9ybVJlbmFtZUNvbnRyb2wsCisgICRyZW1vdmVDb250cm9sOiBub29wLAorICAkc2V0
VmFsaWRpdHk6IG5vb3AsCisgICRzZXREaXJ0eTogbm9vcCwKKyAgJHNldFByaXN0aW5lOiBub29w
LAorICAkc2V0U3VibWl0dGVkOiBub29wCit9LAorU1VCTUlUVEVEX0NMQVNTID0gJ25nLXN1Ym1p
dHRlZCc7CisKK2Z1bmN0aW9uIG51bGxGb3JtUmVuYW1lQ29udHJvbChjb250cm9sLCBuYW1lKSB7
CisgIGNvbnRyb2wuJG5hbWUgPSBuYW1lOworfQorCisvKioKKyAqIEBuZ2RvYyB0eXBlCisgKiBA
bmFtZSBmb3JtLkZvcm1Db250cm9sbGVyCisgKgorICogQHByb3BlcnR5IHtib29sZWFufSAkcHJp
c3RpbmUgVHJ1ZSBpZiB1c2VyIGhhcyBub3QgaW50ZXJhY3RlZCB3aXRoIHRoZSBmb3JtIHlldC4K
KyAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gJGRpcnR5IFRydWUgaWYgdXNlciBoYXMgYWxyZWFkeSBp
bnRlcmFjdGVkIHdpdGggdGhlIGZvcm0uCisgKiBAcHJvcGVydHkge2Jvb2xlYW59ICR2YWxpZCBU
cnVlIGlmIGFsbCBvZiB0aGUgY29udGFpbmluZyBmb3JtcyBhbmQgY29udHJvbHMgYXJlIHZhbGlk
LgorICogQHByb3BlcnR5IHtib29sZWFufSAkaW52YWxpZCBUcnVlIGlmIGF0IGxlYXN0IG9uZSBj
b250YWluaW5nIGNvbnRyb2wgb3IgZm9ybSBpcyBpbnZhbGlkLgorICogQHByb3BlcnR5IHtib29s
ZWFufSAkc3VibWl0dGVkIFRydWUgaWYgdXNlciBoYXMgc3VibWl0dGVkIHRoZSBmb3JtIGV2ZW4g
aWYgaXRzIGludmFsaWQuCisgKgorICogQHByb3BlcnR5IHtPYmplY3R9ICRlcnJvciBJcyBhbiBv
YmplY3QgaGFzaCwgY29udGFpbmluZyByZWZlcmVuY2VzIHRvIGNvbnRyb2xzIG9yCisgKiAgZm9y
bXMgd2l0aCBmYWlsaW5nIHZhbGlkYXRvcnMsIHdoZXJlOgorICoKKyAqICAtIGtleXMgYXJlIHZh
bGlkYXRpb24gdG9rZW5zIChlcnJvciBuYW1lcyksCisgKiAgLSB2YWx1ZXMgYXJlIGFycmF5cyBv
ZiBjb250cm9scyBvciBmb3JtcyB0aGF0IGhhdmUgYSBmYWlsaW5nIHZhbGlkYXRvciBmb3IgZ2l2
ZW4gZXJyb3IgbmFtZS4KKyAqCisgKiAgQnVpbHQtaW4gdmFsaWRhdGlvbiB0b2tlbnM6CisgKgor
ICogIC0gYGVtYWlsYAorICogIC0gYG1heGAKKyAqICAtIGBtYXhsZW5ndGhgCisgKiAgLSBgbWlu
YAorICogIC0gYG1pbmxlbmd0aGAKKyAqICAtIGBudW1iZXJgCisgKiAgLSBgcGF0dGVybmAKKyAq
ICAtIGByZXF1aXJlZGAKKyAqICAtIGB1cmxgCisgKiAgLSBgZGF0ZWAKKyAqICAtIGBkYXRldGlt
ZWxvY2FsYAorICogIC0gYHRpbWVgCisgKiAgLSBgd2Vla2AKKyAqICAtIGBtb250aGAKKyAqCisg
KiBAZGVzY3JpcHRpb24KKyAqIGBGb3JtQ29udHJvbGxlcmAga2VlcHMgdHJhY2sgb2YgYWxsIGl0
cyBjb250cm9scyBhbmQgbmVzdGVkIGZvcm1zIGFzIHdlbGwgYXMgdGhlIHN0YXRlIG9mIHRoZW0s
CisgKiBzdWNoIGFzIGJlaW5nIHZhbGlkL2ludmFsaWQgb3IgZGlydHkvcHJpc3RpbmUuCisgKgor
ICogRWFjaCB7QGxpbmsgbmcuZGlyZWN0aXZlOmZvcm0gZm9ybX0gZGlyZWN0aXZlIGNyZWF0ZXMg
YW4gaW5zdGFuY2UKKyAqIG9mIGBGb3JtQ29udHJvbGxlcmAuCisgKgorICovCisvL2Fza3MgZm9y
ICRzY29wZSB0byBmb29sIHRoZSBCQyBjb250cm9sbGVyIG1vZHVsZQorRm9ybUNvbnRyb2xsZXIu
JGluamVjdCA9IFsnJGVsZW1lbnQnLCAnJGF0dHJzJywgJyRzY29wZScsICckYW5pbWF0ZScsICck
aW50ZXJwb2xhdGUnXTsKK2Z1bmN0aW9uIEZvcm1Db250cm9sbGVyKGVsZW1lbnQsIGF0dHJzLCAk
c2NvcGUsICRhbmltYXRlLCAkaW50ZXJwb2xhdGUpIHsKKyAgdmFyIGZvcm0gPSB0aGlzLAorICAg
ICAgY29udHJvbHMgPSBbXTsKKworICB2YXIgcGFyZW50Rm9ybSA9IGZvcm0uJCRwYXJlbnRGb3Jt
ID0gZWxlbWVudC5wYXJlbnQoKS5jb250cm9sbGVyKCdmb3JtJykgfHwgbnVsbEZvcm1DdHJsOwor
CisgIC8vIGluaXQgc3RhdGUKKyAgZm9ybS4kZXJyb3IgPSB7fTsKKyAgZm9ybS4kJHN1Y2Nlc3Mg
PSB7fTsKKyAgZm9ybS4kcGVuZGluZyA9IHVuZGVmaW5lZDsKKyAgZm9ybS4kbmFtZSA9ICRpbnRl
cnBvbGF0ZShhdHRycy5uYW1lIHx8IGF0dHJzLm5nRm9ybSB8fCAnJykoJHNjb3BlKTsKKyAgZm9y
bS4kZGlydHkgPSBmYWxzZTsKKyAgZm9ybS4kcHJpc3RpbmUgPSB0cnVlOworICBmb3JtLiR2YWxp
ZCA9IHRydWU7CisgIGZvcm0uJGludmFsaWQgPSBmYWxzZTsKKyAgZm9ybS4kc3VibWl0dGVkID0g
ZmFsc2U7CisKKyAgcGFyZW50Rm9ybS4kYWRkQ29udHJvbChmb3JtKTsKKworICAvKioKKyAgICog
QG5nZG9jIG1ldGhvZAorICAgKiBAbmFtZSBmb3JtLkZvcm1Db250cm9sbGVyIyRyb2xsYmFja1Zp
ZXdWYWx1ZQorICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAgICogUm9sbGJhY2sgYWxsIGZvcm0g
Y29udHJvbHMgcGVuZGluZyB1cGRhdGVzIHRvIHRoZSBgJG1vZGVsVmFsdWVgLgorICAgKgorICAg
KiBVcGRhdGVzIG1heSBiZSBwZW5kaW5nIGJ5IGEgZGVib3VuY2VkIGV2ZW50IG9yIGJlY2F1c2Ug
dGhlIGlucHV0IGlzIHdhaXRpbmcgZm9yIGEgc29tZSBmdXR1cmUKKyAgICogZXZlbnQgZGVmaW5l
ZCBpbiBgbmctbW9kZWwtb3B0aW9uc2AuIFRoaXMgbWV0aG9kIGlzIHR5cGljYWxseSBuZWVkZWQg
YnkgdGhlIHJlc2V0IGJ1dHRvbiBvZgorICAgKiBhIGZvcm0gdGhhdCB1c2VzIGBuZy1tb2RlbC1v
cHRpb25zYCB0byBwZW5kIHVwZGF0ZXMuCisgICAqLworICBmb3JtLiRyb2xsYmFja1ZpZXdWYWx1
ZSA9IGZ1bmN0aW9uKCkgeworICAgIGZvckVhY2goY29udHJvbHMsIGZ1bmN0aW9uKGNvbnRyb2wp
IHsKKyAgICAgIGNvbnRyb2wuJHJvbGxiYWNrVmlld1ZhbHVlKCk7CisgICAgfSk7CisgIH07CisK
KyAgLyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgZm9ybS5Gb3JtQ29udHJvbGxl
ciMkY29tbWl0Vmlld1ZhbHVlCisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBDb21taXQg
YWxsIGZvcm0gY29udHJvbHMgcGVuZGluZyB1cGRhdGVzIHRvIHRoZSBgJG1vZGVsVmFsdWVgLgor
ICAgKgorICAgKiBVcGRhdGVzIG1heSBiZSBwZW5kaW5nIGJ5IGEgZGVib3VuY2VkIGV2ZW50IG9y
IGJlY2F1c2UgdGhlIGlucHV0IGlzIHdhaXRpbmcgZm9yIGEgc29tZSBmdXR1cmUKKyAgICogZXZl
bnQgZGVmaW5lZCBpbiBgbmctbW9kZWwtb3B0aW9uc2AuIFRoaXMgbWV0aG9kIGlzIHJhcmVseSBu
ZWVkZWQgYXMgYE5nTW9kZWxDb250cm9sbGVyYAorICAgKiB1c3VhbGx5IGhhbmRsZXMgY2FsbGlu
ZyB0aGlzIGluIHJlc3BvbnNlIHRvIGlucHV0IGV2ZW50cy4KKyAgICovCisgIGZvcm0uJGNvbW1p
dFZpZXdWYWx1ZSA9IGZ1bmN0aW9uKCkgeworICAgIGZvckVhY2goY29udHJvbHMsIGZ1bmN0aW9u
KGNvbnRyb2wpIHsKKyAgICAgIGNvbnRyb2wuJGNvbW1pdFZpZXdWYWx1ZSgpOworICAgIH0pOwor
ICB9OworCisgIC8qKgorICAgKiBAbmdkb2MgbWV0aG9kCisgICAqIEBuYW1lIGZvcm0uRm9ybUNv
bnRyb2xsZXIjJGFkZENvbnRyb2wKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIFJlZ2lz
dGVyIGEgY29udHJvbCB3aXRoIHRoZSBmb3JtLgorICAgKgorICAgKiBJbnB1dCBlbGVtZW50cyB1
c2luZyBuZ01vZGVsQ29udHJvbGxlciBkbyB0aGlzIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGV5IGFy
ZSBsaW5rZWQuCisgICAqLworICBmb3JtLiRhZGRDb250cm9sID0gZnVuY3Rpb24oY29udHJvbCkg
eworICAgIC8vIEJyZWFraW5nIGNoYW5nZSAtIGJlZm9yZSwgaW5wdXRzIHdob3NlIG5hbWUgd2Fz
ICJoYXNPd25Qcm9wZXJ0eSIgd2VyZSBxdWlldGx5IGlnbm9yZWQKKyAgICAvLyBhbmQgbm90IGFk
ZGVkIHRvIHRoZSBzY29wZS4gIE5vdyB3ZSB0aHJvdyBhbiBlcnJvci4KKyAgICBhc3NlcnROb3RI
YXNPd25Qcm9wZXJ0eShjb250cm9sLiRuYW1lLCAnaW5wdXQnKTsKKyAgICBjb250cm9scy5wdXNo
KGNvbnRyb2wpOworCisgICAgaWYgKGNvbnRyb2wuJG5hbWUpIHsKKyAgICAgIGZvcm1bY29udHJv
bC4kbmFtZV0gPSBjb250cm9sOworICAgIH0KKyAgfTsKKworICAvLyBQcml2YXRlIEFQSTogcmVu
YW1lIGEgZm9ybSBjb250cm9sCisgIGZvcm0uJCRyZW5hbWVDb250cm9sID0gZnVuY3Rpb24oY29u
dHJvbCwgbmV3TmFtZSkgeworICAgIHZhciBvbGROYW1lID0gY29udHJvbC4kbmFtZTsKKworICAg
IGlmIChmb3JtW29sZE5hbWVdID09PSBjb250cm9sKSB7CisgICAgICBkZWxldGUgZm9ybVtvbGRO
YW1lXTsKKyAgICB9CisgICAgZm9ybVtuZXdOYW1lXSA9IGNvbnRyb2w7CisgICAgY29udHJvbC4k
bmFtZSA9IG5ld05hbWU7CisgIH07CisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICog
QG5hbWUgZm9ybS5Gb3JtQ29udHJvbGxlciMkcmVtb3ZlQ29udHJvbAorICAgKgorICAgKiBAZGVz
Y3JpcHRpb24KKyAgICogRGVyZWdpc3RlciBhIGNvbnRyb2wgZnJvbSB0aGUgZm9ybS4KKyAgICoK
KyAgICogSW5wdXQgZWxlbWVudHMgdXNpbmcgbmdNb2RlbENvbnRyb2xsZXIgZG8gdGhpcyBhdXRv
bWF0aWNhbGx5IHdoZW4gdGhleSBhcmUgZGVzdHJveWVkLgorICAgKi8KKyAgZm9ybS4kcmVtb3Zl
Q29udHJvbCA9IGZ1bmN0aW9uKGNvbnRyb2wpIHsKKyAgICBpZiAoY29udHJvbC4kbmFtZSAmJiBm
b3JtW2NvbnRyb2wuJG5hbWVdID09PSBjb250cm9sKSB7CisgICAgICBkZWxldGUgZm9ybVtjb250
cm9sLiRuYW1lXTsKKyAgICB9CisgICAgZm9yRWFjaChmb3JtLiRwZW5kaW5nLCBmdW5jdGlvbih2
YWx1ZSwgbmFtZSkgeworICAgICAgZm9ybS4kc2V0VmFsaWRpdHkobmFtZSwgbnVsbCwgY29udHJv
bCk7CisgICAgfSk7CisgICAgZm9yRWFjaChmb3JtLiRlcnJvciwgZnVuY3Rpb24odmFsdWUsIG5h
bWUpIHsKKyAgICAgIGZvcm0uJHNldFZhbGlkaXR5KG5hbWUsIG51bGwsIGNvbnRyb2wpOworICAg
IH0pOworICAgIGZvckVhY2goZm9ybS4kJHN1Y2Nlc3MsIGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7
CisgICAgICBmb3JtLiRzZXRWYWxpZGl0eShuYW1lLCBudWxsLCBjb250cm9sKTsKKyAgICB9KTsK
KworICAgIGFycmF5UmVtb3ZlKGNvbnRyb2xzLCBjb250cm9sKTsKKyAgfTsKKworCisgIC8qKgor
ICAgKiBAbmdkb2MgbWV0aG9kCisgICAqIEBuYW1lIGZvcm0uRm9ybUNvbnRyb2xsZXIjJHNldFZh
bGlkaXR5CisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBTZXRzIHRoZSB2YWxpZGl0eSBv
ZiBhIGZvcm0gY29udHJvbC4KKyAgICoKKyAgICogVGhpcyBtZXRob2Qgd2lsbCBhbHNvIHByb3Bh
Z2F0ZSB0byBwYXJlbnQgZm9ybXMuCisgICAqLworICBhZGRTZXRWYWxpZGl0eU1ldGhvZCh7Cisg
ICAgY3RybDogdGhpcywKKyAgICAkZWxlbWVudDogZWxlbWVudCwKKyAgICBzZXQ6IGZ1bmN0aW9u
KG9iamVjdCwgcHJvcGVydHksIGNvbnRyb2xsZXIpIHsKKyAgICAgIHZhciBsaXN0ID0gb2JqZWN0
W3Byb3BlcnR5XTsKKyAgICAgIGlmICghbGlzdCkgeworICAgICAgICBvYmplY3RbcHJvcGVydHld
ID0gW2NvbnRyb2xsZXJdOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIGluZGV4ID0gbGlz
dC5pbmRleE9mKGNvbnRyb2xsZXIpOworICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7CisgICAg
ICAgICAgbGlzdC5wdXNoKGNvbnRyb2xsZXIpOworICAgICAgICB9CisgICAgICB9CisgICAgfSwK
KyAgICB1bnNldDogZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSwgY29udHJvbGxlcikgeworICAg
ICAgdmFyIGxpc3QgPSBvYmplY3RbcHJvcGVydHldOworICAgICAgaWYgKCFsaXN0KSB7CisgICAg
ICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGFycmF5UmVtb3ZlKGxpc3QsIGNvbnRyb2xsZXIp
OworICAgICAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7CisgICAgICAgIGRlbGV0ZSBvYmplY3Rb
cHJvcGVydHldOworICAgICAgfQorICAgIH0sCisgICAgcGFyZW50Rm9ybTogcGFyZW50Rm9ybSwK
KyAgICAkYW5pbWF0ZTogJGFuaW1hdGUKKyAgfSk7CisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRo
b2QKKyAgICogQG5hbWUgZm9ybS5Gb3JtQ29udHJvbGxlciMkc2V0RGlydHkKKyAgICoKKyAgICog
QGRlc2NyaXB0aW9uCisgICAqIFNldHMgdGhlIGZvcm0gdG8gYSBkaXJ0eSBzdGF0ZS4KKyAgICoK
KyAgICogVGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCB0byBhZGQgdGhlICduZy1kaXJ0eScgY2xh
c3MgYW5kIHNldCB0aGUgZm9ybSB0byBhIGRpcnR5CisgICAqIHN0YXRlIChuZy1kaXJ0eSBjbGFz
cykuIFRoaXMgbWV0aG9kIHdpbGwgYWxzbyBwcm9wYWdhdGUgdG8gcGFyZW50IGZvcm1zLgorICAg
Ki8KKyAgZm9ybS4kc2V0RGlydHkgPSBmdW5jdGlvbigpIHsKKyAgICAkYW5pbWF0ZS5yZW1vdmVD
bGFzcyhlbGVtZW50LCBQUklTVElORV9DTEFTUyk7CisgICAgJGFuaW1hdGUuYWRkQ2xhc3MoZWxl
bWVudCwgRElSVFlfQ0xBU1MpOworICAgIGZvcm0uJGRpcnR5ID0gdHJ1ZTsKKyAgICBmb3JtLiRw
cmlzdGluZSA9IGZhbHNlOworICAgIHBhcmVudEZvcm0uJHNldERpcnR5KCk7CisgIH07CisKKyAg
LyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgZm9ybS5Gb3JtQ29udHJvbGxlciMk
c2V0UHJpc3RpbmUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIFNldHMgdGhlIGZvcm0g
dG8gaXRzIHByaXN0aW5lIHN0YXRlLgorICAgKgorICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgY2Fs
bGVkIHRvIHJlbW92ZSB0aGUgJ25nLWRpcnR5JyBjbGFzcyBhbmQgc2V0IHRoZSBmb3JtIHRvIGl0
cyBwcmlzdGluZQorICAgKiBzdGF0ZSAobmctcHJpc3RpbmUgY2xhc3MpLiBUaGlzIG1ldGhvZCB3
aWxsIGFsc28gcHJvcGFnYXRlIHRvIGFsbCB0aGUgY29udHJvbHMgY29udGFpbmVkCisgICAqIGlu
IHRoaXMgZm9ybS4KKyAgICoKKyAgICogU2V0dGluZyBhIGZvcm0gYmFjayB0byBhIHByaXN0aW5l
IHN0YXRlIGlzIG9mdGVuIHVzZWZ1bCB3aGVuIHdlIHdhbnQgdG8gJ3JldXNlJyBhIGZvcm0gYWZ0
ZXIKKyAgICogc2F2aW5nIG9yIHJlc2V0dGluZyBpdC4KKyAgICovCisgIGZvcm0uJHNldFByaXN0
aW5lID0gZnVuY3Rpb24oKSB7CisgICAgJGFuaW1hdGUuc2V0Q2xhc3MoZWxlbWVudCwgUFJJU1RJ
TkVfQ0xBU1MsIERJUlRZX0NMQVNTICsgJyAnICsgU1VCTUlUVEVEX0NMQVNTKTsKKyAgICBmb3Jt
LiRkaXJ0eSA9IGZhbHNlOworICAgIGZvcm0uJHByaXN0aW5lID0gdHJ1ZTsKKyAgICBmb3JtLiRz
dWJtaXR0ZWQgPSBmYWxzZTsKKyAgICBmb3JFYWNoKGNvbnRyb2xzLCBmdW5jdGlvbihjb250cm9s
KSB7CisgICAgICBjb250cm9sLiRzZXRQcmlzdGluZSgpOworICAgIH0pOworICB9OworCisgIC8q
KgorICAgKiBAbmdkb2MgbWV0aG9kCisgICAqIEBuYW1lIGZvcm0uRm9ybUNvbnRyb2xsZXIjJHNl
dFVudG91Y2hlZAorICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAgICogU2V0cyB0aGUgZm9ybSB0
byBpdHMgdW50b3VjaGVkIHN0YXRlLgorICAgKgorICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgY2Fs
bGVkIHRvIHJlbW92ZSB0aGUgJ25nLXRvdWNoZWQnIGNsYXNzIGFuZCBzZXQgdGhlIGZvcm0gY29u
dHJvbHMgdG8gdGhlaXIKKyAgICogdW50b3VjaGVkIHN0YXRlIChuZy11bnRvdWNoZWQgY2xhc3Mp
LgorICAgKgorICAgKiBTZXR0aW5nIGEgZm9ybSBjb250cm9scyBiYWNrIHRvIHRoZWlyIHVudG91
Y2hlZCBzdGF0ZSBpcyBvZnRlbiB1c2VmdWwgd2hlbiBzZXR0aW5nIHRoZSBmb3JtCisgICAqIGJh
Y2sgdG8gaXRzIHByaXN0aW5lIHN0YXRlLgorICAgKi8KKyAgZm9ybS4kc2V0VW50b3VjaGVkID0g
ZnVuY3Rpb24oKSB7CisgICAgZm9yRWFjaChjb250cm9scywgZnVuY3Rpb24oY29udHJvbCkgewor
ICAgICAgY29udHJvbC4kc2V0VW50b3VjaGVkKCk7CisgICAgfSk7CisgIH07CisKKyAgLyoqCisg
ICAqIEBuZ2RvYyBtZXRob2QKKyAgICogQG5hbWUgZm9ybS5Gb3JtQ29udHJvbGxlciMkc2V0U3Vi
bWl0dGVkCisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBTZXRzIHRoZSBmb3JtIHRvIGl0
cyBzdWJtaXR0ZWQgc3RhdGUuCisgICAqLworICBmb3JtLiRzZXRTdWJtaXR0ZWQgPSBmdW5jdGlv
bigpIHsKKyAgICAkYW5pbWF0ZS5hZGRDbGFzcyhlbGVtZW50LCBTVUJNSVRURURfQ0xBU1MpOwor
ICAgIGZvcm0uJHN1Ym1pdHRlZCA9IHRydWU7CisgICAgcGFyZW50Rm9ybS4kc2V0U3VibWl0dGVk
KCk7CisgIH07Cit9CisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgbmdGb3Jt
CisgKiBAcmVzdHJpY3QgRUFDCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBOZXN0YWJsZSBhbGlh
cyBvZiB7QGxpbmsgbmcuZGlyZWN0aXZlOmZvcm0gYGZvcm1gfSBkaXJlY3RpdmUuIEhUTUwKKyAq
IGRvZXMgbm90IGFsbG93IG5lc3Rpbmcgb2YgZm9ybSBlbGVtZW50cy4gSXQgaXMgdXNlZnVsIHRv
IG5lc3QgZm9ybXMsIGZvciBleGFtcGxlIGlmIHRoZSB2YWxpZGl0eSBvZiBhCisgKiBzdWItZ3Jv
dXAgb2YgY29udHJvbHMgbmVlZHMgdG8gYmUgZGV0ZXJtaW5lZC4KKyAqCisgKiBOb3RlOiB0aGUg
cHVycG9zZSBvZiBgbmdGb3JtYCBpcyB0byBncm91cCBjb250cm9scywKKyAqIGJ1dCBub3QgdG8g
YmUgYSByZXBsYWNlbWVudCBmb3IgdGhlIGA8Zm9ybT5gIHRhZyB3aXRoIGFsbCBvZiBpdHMgY2Fw
YWJpbGl0aWVzCisgKiAoZS5nLiBwb3N0aW5nIHRvIHRoZSBzZXJ2ZXIsIC4uLikuCisgKgorICog
QHBhcmFtIHtzdHJpbmc9fSBuZ0Zvcm18bmFtZSBOYW1lIG9mIHRoZSBmb3JtLiBJZiBzcGVjaWZp
ZWQsIHRoZSBmb3JtIGNvbnRyb2xsZXIgd2lsbCBiZSBwdWJsaXNoZWQgaW50bworICogICAgICAg
ICAgICAgICAgICAgICAgIHJlbGF0ZWQgc2NvcGUsIHVuZGVyIHRoaXMgbmFtZS4KKyAqCisgKi8K
KworIC8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgZm9ybQorICogQHJlc3RyaWN0
IEUKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIERpcmVjdGl2ZSB0aGF0IGluc3RhbnRpYXRlcwor
ICoge0BsaW5rIGZvcm0uRm9ybUNvbnRyb2xsZXIgRm9ybUNvbnRyb2xsZXJ9LgorICoKKyAqIElm
IHRoZSBgbmFtZWAgYXR0cmlidXRlIGlzIHNwZWNpZmllZCwgdGhlIGZvcm0gY29udHJvbGxlciBp
cyBwdWJsaXNoZWQgb250byB0aGUgY3VycmVudCBzY29wZSB1bmRlcgorICogdGhpcyBuYW1lLgor
ICoKKyAqICMgQWxpYXM6IHtAbGluayBuZy5kaXJlY3RpdmU6bmdGb3JtIGBuZ0Zvcm1gfQorICoK
KyAqIEluIEFuZ3VsYXIsIGZvcm1zIGNhbiBiZSBuZXN0ZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUg
b3V0ZXIgZm9ybSBpcyB2YWxpZCB3aGVuIGFsbCBvZiB0aGUgY2hpbGQKKyAqIGZvcm1zIGFyZSB2
YWxpZCBhcyB3ZWxsLiBIb3dldmVyLCBicm93c2VycyBkbyBub3QgYWxsb3cgbmVzdGluZyBvZiBg
PGZvcm0+YCBlbGVtZW50cywgc28KKyAqIEFuZ3VsYXIgcHJvdmlkZXMgdGhlIHtAbGluayBuZy5k
aXJlY3RpdmU6bmdGb3JtIGBuZ0Zvcm1gfSBkaXJlY3RpdmUgd2hpY2ggYmVoYXZlcyBpZGVudGlj
YWxseSB0bworICogYDxmb3JtPmAgYnV0IGNhbiBiZSBuZXN0ZWQuICBUaGlzIGFsbG93cyB5b3Ug
dG8gaGF2ZSBuZXN0ZWQgZm9ybXMsIHdoaWNoIGlzIHZlcnkgdXNlZnVsIHdoZW4KKyAqIHVzaW5n
IEFuZ3VsYXIgdmFsaWRhdGlvbiBkaXJlY3RpdmVzIGluIGZvcm1zIHRoYXQgYXJlIGR5bmFtaWNh
bGx5IGdlbmVyYXRlZCB1c2luZyB0aGUKKyAqIHtAbGluayBuZy5kaXJlY3RpdmU6bmdSZXBlYXQg
YG5nUmVwZWF0YH0gZGlyZWN0aXZlLiBTaW5jZSB5b3UgY2Fubm90IGR5bmFtaWNhbGx5IGdlbmVy
YXRlIHRoZSBgbmFtZWAKKyAqIGF0dHJpYnV0ZSBvZiBpbnB1dCBlbGVtZW50cyB1c2luZyBpbnRl
cnBvbGF0aW9uLCB5b3UgaGF2ZSB0byB3cmFwIGVhY2ggc2V0IG9mIHJlcGVhdGVkIGlucHV0cyBp
biBhbgorICogYG5nRm9ybWAgZGlyZWN0aXZlIGFuZCBuZXN0IHRoZXNlIGluIGFuIG91dGVyIGBm
b3JtYCBlbGVtZW50LgorICoKKyAqCisgKiAjIENTUyBjbGFzc2VzCisgKiAgLSBgbmctdmFsaWRg
IGlzIHNldCBpZiB0aGUgZm9ybSBpcyB2YWxpZC4KKyAqICAtIGBuZy1pbnZhbGlkYCBpcyBzZXQg
aWYgdGhlIGZvcm0gaXMgaW52YWxpZC4KKyAqICAtIGBuZy1wcmlzdGluZWAgaXMgc2V0IGlmIHRo
ZSBmb3JtIGlzIHByaXN0aW5lLgorICogIC0gYG5nLWRpcnR5YCBpcyBzZXQgaWYgdGhlIGZvcm0g
aXMgZGlydHkuCisgKiAgLSBgbmctc3VibWl0dGVkYCBpcyBzZXQgaWYgdGhlIGZvcm0gd2FzIHN1
Ym1pdHRlZC4KKyAqCisgKiBLZWVwIGluIG1pbmQgdGhhdCBuZ0FuaW1hdGUgY2FuIGRldGVjdCBl
YWNoIG9mIHRoZXNlIGNsYXNzZXMgd2hlbiBhZGRlZCBhbmQgcmVtb3ZlZC4KKyAqCisgKgorICog
IyBTdWJtaXR0aW5nIGEgZm9ybSBhbmQgcHJldmVudGluZyB0aGUgZGVmYXVsdCBhY3Rpb24KKyAq
CisgKiBTaW5jZSB0aGUgcm9sZSBvZiBmb3JtcyBpbiBjbGllbnQtc2lkZSBBbmd1bGFyIGFwcGxp
Y2F0aW9ucyBpcyBkaWZmZXJlbnQgdGhhbiBpbiBjbGFzc2ljYWwKKyAqIHJvdW5kdHJpcCBhcHBz
LCBpdCBpcyBkZXNpcmFibGUgZm9yIHRoZSBicm93c2VyIG5vdCB0byB0cmFuc2xhdGUgdGhlIGZv
cm0gc3VibWlzc2lvbiBpbnRvIGEgZnVsbAorICogcGFnZSByZWxvYWQgdGhhdCBzZW5kcyB0aGUg
ZGF0YSB0byB0aGUgc2VydmVyLiBJbnN0ZWFkIHNvbWUgamF2YXNjcmlwdCBsb2dpYyBzaG91bGQg
YmUgdHJpZ2dlcmVkCisgKiB0byBoYW5kbGUgdGhlIGZvcm0gc3VibWlzc2lvbiBpbiBhbiBhcHBs
aWNhdGlvbi1zcGVjaWZpYyB3YXkuCisgKgorICogRm9yIHRoaXMgcmVhc29uLCBBbmd1bGFyIHBy
ZXZlbnRzIHRoZSBkZWZhdWx0IGFjdGlvbiAoZm9ybSBzdWJtaXNzaW9uIHRvIHRoZSBzZXJ2ZXIp
IHVubGVzcyB0aGUKKyAqIGA8Zm9ybT5gIGVsZW1lbnQgaGFzIGFuIGBhY3Rpb25gIGF0dHJpYnV0
ZSBzcGVjaWZpZWQuCisgKgorICogWW91IGNhbiB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgdHdv
IHdheXMgdG8gc3BlY2lmeSB3aGF0IGphdmFzY3JpcHQgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQg
d2hlbgorICogYSBmb3JtIGlzIHN1Ym1pdHRlZDoKKyAqCisgKiAtIHtAbGluayBuZy5kaXJlY3Rp
dmU6bmdTdWJtaXQgbmdTdWJtaXR9IGRpcmVjdGl2ZSBvbiB0aGUgZm9ybSBlbGVtZW50CisgKiAt
IHtAbGluayBuZy5kaXJlY3RpdmU6bmdDbGljayBuZ0NsaWNrfSBkaXJlY3RpdmUgb24gdGhlIGZp
cnN0CisgICogIGJ1dHRvbiBvciBpbnB1dCBmaWVsZCBvZiB0eXBlIHN1Ym1pdCAoaW5wdXRbdHlw
ZT1zdWJtaXRdKQorICoKKyAqIFRvIHByZXZlbnQgZG91YmxlIGV4ZWN1dGlvbiBvZiB0aGUgaGFu
ZGxlciwgdXNlIG9ubHkgb25lIG9mIHRoZSB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nU3VibWl0IG5n
U3VibWl0fQorICogb3Ige0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0NsaWNrIG5nQ2xpY2t9IGRpcmVj
dGl2ZXMuCisgKiBUaGlzIGlzIGJlY2F1c2Ugb2YgdGhlIGZvbGxvd2luZyBmb3JtIHN1Ym1pc3Np
b24gcnVsZXMgaW4gdGhlIEhUTUwgc3BlY2lmaWNhdGlvbjoKKyAqCisgKiAtIElmIGEgZm9ybSBo
YXMgb25seSBvbmUgaW5wdXQgZmllbGQgdGhlbiBoaXR0aW5nIGVudGVyIGluIHRoaXMgZmllbGQg
dHJpZ2dlcnMgZm9ybSBzdWJtaXQKKyAqIChgbmdTdWJtaXRgKQorICogLSBpZiBhIGZvcm0gaGFz
IDIrIGlucHV0IGZpZWxkcyBhbmQgbm8gYnV0dG9ucyBvciBpbnB1dFt0eXBlPXN1Ym1pdF0gdGhl
biBoaXR0aW5nIGVudGVyCisgKiBkb2Vzbid0IHRyaWdnZXIgc3VibWl0CisgKiAtIGlmIGEgZm9y
bSBoYXMgb25lIG9yIG1vcmUgaW5wdXQgZmllbGRzIGFuZCBvbmUgb3IgbW9yZSBidXR0b25zIG9y
IGlucHV0W3R5cGU9c3VibWl0XSB0aGVuCisgKiBoaXR0aW5nIGVudGVyIGluIGFueSBvZiB0aGUg
aW5wdXQgZmllbGRzIHdpbGwgdHJpZ2dlciB0aGUgY2xpY2sgaGFuZGxlciBvbiB0aGUgKmZpcnN0
KiBidXR0b24gb3IKKyAqIGlucHV0W3R5cGU9c3VibWl0XSAoYG5nQ2xpY2tgKSAqYW5kKiBhIHN1
Ym1pdCBoYW5kbGVyIG9uIHRoZSBlbmNsb3NpbmcgZm9ybSAoYG5nU3VibWl0YCkKKyAqCisgKiBB
bnkgcGVuZGluZyBgbmdNb2RlbE9wdGlvbnNgIGNoYW5nZXMgd2lsbCB0YWtlIHBsYWNlIGltbWVk
aWF0ZWx5IHdoZW4gYW4gZW5jbG9zaW5nIGZvcm0gaXMKKyAqIHN1Ym1pdHRlZC4gTm90ZSB0aGF0
IGBuZ0NsaWNrYCBldmVudHMgd2lsbCBvY2N1ciBiZWZvcmUgdGhlIG1vZGVsIGlzIHVwZGF0ZWQu
IFVzZSBgbmdTdWJtaXRgCisgKiB0byBoYXZlIGFjY2VzcyB0byB0aGUgdXBkYXRlZCBtb2RlbC4K
KyAqCisgKiAjIyBBbmltYXRpb24gSG9va3MKKyAqCisgKiBBbmltYXRpb25zIGluIG5nRm9ybSBh
cmUgdHJpZ2dlcmVkIHdoZW4gYW55IG9mIHRoZSBhc3NvY2lhdGVkIENTUyBjbGFzc2VzIGFyZSBh
ZGRlZCBhbmQgcmVtb3ZlZC4KKyAqIFRoZXNlIGNsYXNzZXMgYXJlOiBgLm5nLXByaXN0aW5lYCwg
YC5uZy1kaXJ0eWAsIGAubmctaW52YWxpZGAgYW5kIGAubmctdmFsaWRgIGFzIHdlbGwgYXMgYW55
CisgKiBvdGhlciB2YWxpZGF0aW9ucyB0aGF0IGFyZSBwZXJmb3JtZWQgd2l0aGluIHRoZSBmb3Jt
LiBBbmltYXRpb25zIGluIG5nRm9ybSBhcmUgc2ltaWxhciB0byBob3cKKyAqIHRoZXkgd29yayBp
biBuZ0NsYXNzIGFuZCBhbmltYXRpb25zIGNhbiBiZSBob29rZWQgaW50byB1c2luZyBDU1MgdHJh
bnNpdGlvbnMsIGtleWZyYW1lcyBhcyB3ZWxsCisgKiBhcyBKUyBhbmltYXRpb25zLgorICoKKyAq
IFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBhIHNpbXBsZSB3YXkgdG8gdXRpbGl6ZSBDU1Mg
dHJhbnNpdGlvbnMgdG8gc3R5bGUgYSBmb3JtIGVsZW1lbnQKKyAqIHRoYXQgaGFzIGJlZW4gcmVu
ZGVyZWQgYXMgaW52YWxpZCBhZnRlciBpdCBoYXMgYmVlbiB2YWxpZGF0ZWQ6CisgKgorICogPHBy
ZT4KKyAqIC8vYmUgc3VyZSB0byBpbmNsdWRlIG5nQW5pbWF0ZSBhcyBhIG1vZHVsZSB0byBob29r
IGludG8gbW9yZQorICogLy9hZHZhbmNlZCBhbmltYXRpb25zCisgKiAubXktZm9ybSB7CisgKiAg
IHRyYW5zaXRpb246MC41cyBsaW5lYXIgYWxsOworICogICBiYWNrZ3JvdW5kOiB3aGl0ZTsKKyAq
IH0KKyAqIC5teS1mb3JtLm5nLWludmFsaWQgeworICogICBiYWNrZ3JvdW5kOiByZWQ7CisgKiAg
IGNvbG9yOndoaXRlOworICogfQorICogPC9wcmU+CisgKgorICogQGV4YW1wbGUKKyAgICA8ZXhh
bXBsZSBkZXBzPSJhbmd1bGFyLWFuaW1hdGUuanMiIGFuaW1hdGlvbnM9InRydWUiIGZpeEJhc2U9
InRydWUiIG1vZHVsZT0iZm9ybUV4YW1wbGUiPgorICAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRt
bCI+CisgICAgICAgPHNjcmlwdD4KKyAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCdmb3JtRXhhbXBs
ZScsIFtdKQorICAgICAgICAgICAuY29udHJvbGxlcignRm9ybUNvbnRyb2xsZXInLCBbJyRzY29w
ZScsIGZ1bmN0aW9uKCRzY29wZSkgeworICAgICAgICAgICAgICRzY29wZS51c2VyVHlwZSA9ICdn
dWVzdCc7CisgICAgICAgICAgIH1dKTsKKyAgICAgICA8L3NjcmlwdD4KKyAgICAgICA8c3R5bGU+
CisgICAgICAgIC5teS1mb3JtIHsKKyAgICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246YWxsIGxp
bmVhciAwLjVzOworICAgICAgICAgIHRyYW5zaXRpb246YWxsIGxpbmVhciAwLjVzOworICAgICAg
ICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OworICAgICAgICB9CisgICAgICAgIC5teS1mb3Jt
Lm5nLWludmFsaWQgeworICAgICAgICAgIGJhY2tncm91bmQ6IHJlZDsKKyAgICAgICAgfQorICAg
ICAgIDwvc3R5bGU+CisgICAgICAgPGZvcm0gbmFtZT0ibXlGb3JtIiBuZy1jb250cm9sbGVyPSJG
b3JtQ29udHJvbGxlciIgY2xhc3M9Im15LWZvcm0iPgorICAgICAgICAgdXNlclR5cGU6IDxpbnB1
dCBuYW1lPSJpbnB1dCIgbmctbW9kZWw9InVzZXJUeXBlIiByZXF1aXJlZD4KKyAgICAgICAgIDxz
cGFuIGNsYXNzPSJlcnJvciIgbmctc2hvdz0ibXlGb3JtLmlucHV0LiRlcnJvci5yZXF1aXJlZCI+
UmVxdWlyZWQhPC9zcGFuPjxicj4KKyAgICAgICAgIDxjb2RlPnVzZXJUeXBlID0ge3t1c2VyVHlw
ZX19PC9jb2RlPjxicj4KKyAgICAgICAgIDxjb2RlPm15Rm9ybS5pbnB1dC4kdmFsaWQgPSB7e215
Rm9ybS5pbnB1dC4kdmFsaWR9fTwvY29kZT48YnI+CisgICAgICAgICA8Y29kZT5teUZvcm0uaW5w
dXQuJGVycm9yID0ge3tteUZvcm0uaW5wdXQuJGVycm9yfX08L2NvZGU+PGJyPgorICAgICAgICAg
PGNvZGU+bXlGb3JtLiR2YWxpZCA9IHt7bXlGb3JtLiR2YWxpZH19PC9jb2RlPjxicj4KKyAgICAg
ICAgIDxjb2RlPm15Rm9ybS4kZXJyb3IucmVxdWlyZWQgPSB7eyEhbXlGb3JtLiRlcnJvci5yZXF1
aXJlZH19PC9jb2RlPjxicj4KKyAgICAgICAgPC9mb3JtPgorICAgICAgPC9maWxlPgorICAgICAg
PGZpbGUgbmFtZT0icHJvdHJhY3Rvci5qcyIgdHlwZT0icHJvdHJhY3RvciI+CisgICAgICAgIGl0
KCdzaG91bGQgaW5pdGlhbGl6ZSB0byBtb2RlbCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHZh
ciB1c2VyVHlwZSA9IGVsZW1lbnQoYnkuYmluZGluZygndXNlclR5cGUnKSk7CisgICAgICAgICAg
dmFyIHZhbGlkID0gZWxlbWVudChieS5iaW5kaW5nKCdteUZvcm0uaW5wdXQuJHZhbGlkJykpOwor
CisgICAgICAgICAgZXhwZWN0KHVzZXJUeXBlLmdldFRleHQoKSkudG9Db250YWluKCdndWVzdCcp
OworICAgICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbigndHJ1ZScpOwor
ICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIGJlIGludmFsaWQgaWYgZW1wdHknLCBm
dW5jdGlvbigpIHsKKyAgICAgICAgICB2YXIgdXNlclR5cGUgPSBlbGVtZW50KGJ5LmJpbmRpbmco
J3VzZXJUeXBlJykpOworICAgICAgICAgIHZhciB2YWxpZCA9IGVsZW1lbnQoYnkuYmluZGluZygn
bXlGb3JtLmlucHV0LiR2YWxpZCcpKTsKKyAgICAgICAgICB2YXIgdXNlcklucHV0ID0gZWxlbWVu
dChieS5tb2RlbCgndXNlclR5cGUnKSk7CisKKyAgICAgICAgICB1c2VySW5wdXQuY2xlYXIoKTsK
KyAgICAgICAgICB1c2VySW5wdXQuc2VuZEtleXMoJycpOworCisgICAgICAgICAgZXhwZWN0KHVz
ZXJUeXBlLmdldFRleHQoKSkudG9FcXVhbCgndXNlclR5cGUgPScpOworICAgICAgICAgIGV4cGVj
dCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignZmFsc2UnKTsKKyAgICAgICAgfSk7CisgICAg
ICA8L2ZpbGU+CisgICAgPC9leGFtcGxlPgorICoKKyAqIEBwYXJhbSB7c3RyaW5nPX0gbmFtZSBO
YW1lIG9mIHRoZSBmb3JtLiBJZiBzcGVjaWZpZWQsIHRoZSBmb3JtIGNvbnRyb2xsZXIgd2lsbCBi
ZSBwdWJsaXNoZWQgaW50bworICogICAgICAgICAgICAgICAgICAgICAgIHJlbGF0ZWQgc2NvcGUs
IHVuZGVyIHRoaXMgbmFtZS4KKyAqLwordmFyIGZvcm1EaXJlY3RpdmVGYWN0b3J5ID0gZnVuY3Rp
b24oaXNOZ0Zvcm0pIHsKKyAgcmV0dXJuIFsnJHRpbWVvdXQnLCBmdW5jdGlvbigkdGltZW91dCkg
eworICAgIHZhciBmb3JtRGlyZWN0aXZlID0geworICAgICAgbmFtZTogJ2Zvcm0nLAorICAgICAg
cmVzdHJpY3Q6IGlzTmdGb3JtID8gJ0VBQycgOiAnRScsCisgICAgICBjb250cm9sbGVyOiBGb3Jt
Q29udHJvbGxlciwKKyAgICAgIGNvbXBpbGU6IGZ1bmN0aW9uIG5nRm9ybUNvbXBpbGUoZm9ybUVs
ZW1lbnQsIGF0dHIpIHsKKyAgICAgICAgLy8gU2V0dXAgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgY29u
dHJvbAorICAgICAgICBmb3JtRWxlbWVudC5hZGRDbGFzcyhQUklTVElORV9DTEFTUykuYWRkQ2xh
c3MoVkFMSURfQ0xBU1MpOworCisgICAgICAgIHZhciBuYW1lQXR0ciA9IGF0dHIubmFtZSA/ICdu
YW1lJyA6IChpc05nRm9ybSAmJiBhdHRyLm5nRm9ybSA/ICduZ0Zvcm0nIDogZmFsc2UpOworCisg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgcHJlOiBmdW5jdGlvbiBuZ0Zvcm1QcmVMaW5rKHNj
b3BlLCBmb3JtRWxlbWVudCwgYXR0ciwgY29udHJvbGxlcikgeworICAgICAgICAgICAgLy8gaWYg
YGFjdGlvbmAgYXR0ciBpcyBub3QgcHJlc2VudCBvbiB0aGUgZm9ybSwgcHJldmVudCB0aGUgZGVm
YXVsdCBhY3Rpb24gKHN1Ym1pc3Npb24pCisgICAgICAgICAgICBpZiAoISgnYWN0aW9uJyBpbiBh
dHRyKSkgeworICAgICAgICAgICAgICAvLyB3ZSBjYW4ndCB1c2UganEgZXZlbnRzIGJlY2F1c2Ug
aWYgYSBmb3JtIGlzIGRlc3Ryb3llZCBkdXJpbmcgc3VibWlzc2lvbiB0aGUgZGVmYXVsdAorICAg
ICAgICAgICAgICAvLyBhY3Rpb24gaXMgbm90IHByZXZlbnRlZC4gc2VlICMxMjM4CisgICAgICAg
ICAgICAgIC8vCisgICAgICAgICAgICAgIC8vIElFIDkgaXMgbm90IGFmZmVjdGVkIGJlY2F1c2Ug
aXQgZG9lc24ndCBmaXJlIGEgc3VibWl0IGV2ZW50IGFuZCB0cnkgdG8gZG8gYSBmdWxsCisgICAg
ICAgICAgICAgIC8vIHBhZ2UgcmVsb2FkIGlmIHRoZSBmb3JtIHdhcyBkZXN0cm95ZWQgYnkgc3Vi
bWlzc2lvbiBvZiB0aGUgZm9ybSB2aWEgYSBjbGljayBoYW5kbGVyCisgICAgICAgICAgICAgIC8v
IG9uIGEgYnV0dG9uIGluIHRoZSBmb3JtLiBMb29rcyBsaWtlIGFuIElFOSBzcGVjaWZpYyBidWcu
CisgICAgICAgICAgICAgIHZhciBoYW5kbGVGb3JtU3VibWlzc2lvbiA9IGZ1bmN0aW9uKGV2ZW50
KSB7CisgICAgICAgICAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgICAgY29udHJvbGxlci4kY29tbWl0Vmlld1ZhbHVlKCk7CisgICAgICAgICAgICAgICAg
ICBjb250cm9sbGVyLiRzZXRTdWJtaXR0ZWQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAg
ICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICAgIH07CisK
KyAgICAgICAgICAgICAgYWRkRXZlbnRMaXN0ZW5lckZuKGZvcm1FbGVtZW50WzBdLCAnc3VibWl0
JywgaGFuZGxlRm9ybVN1Ym1pc3Npb24pOworCisgICAgICAgICAgICAgIC8vIHVucmVnaXN0ZXIg
dGhlIHByZXZlbnREZWZhdWx0IGxpc3RlbmVyIHNvIHRoYXQgd2UgZG9uJ3Qgbm90IGxlYWsgbWVt
b3J5IGJ1dCBpbiBhCisgICAgICAgICAgICAgIC8vIHdheSB0aGF0IHdpbGwgYWNoaWV2ZSB0aGUg
cHJldmVudGlvbiBvZiB0aGUgZGVmYXVsdCBhY3Rpb24uCisgICAgICAgICAgICAgIGZvcm1FbGVt
ZW50Lm9uKCckZGVzdHJveScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICR0aW1lb3V0
KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lckZuKGZv
cm1FbGVtZW50WzBdLCAnc3VibWl0JywgaGFuZGxlRm9ybVN1Ym1pc3Npb24pOworICAgICAgICAg
ICAgICAgIH0sIDAsIGZhbHNlKTsKKyAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHZhciBwYXJlbnRGb3JtQ3RybCA9IGNvbnRyb2xsZXIuJCRwYXJlbnRGb3Jt
OworCisgICAgICAgICAgICBpZiAobmFtZUF0dHIpIHsKKyAgICAgICAgICAgICAgc2V0dGVyKHNj
b3BlLCBjb250cm9sbGVyLiRuYW1lLCBjb250cm9sbGVyLCBjb250cm9sbGVyLiRuYW1lKTsKKyAg
ICAgICAgICAgICAgYXR0ci4kb2JzZXJ2ZShuYW1lQXR0ciwgZnVuY3Rpb24obmV3VmFsdWUpIHsK
KyAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci4kbmFtZSA9PT0gbmV3VmFsdWUpIHJldHVy
bjsKKyAgICAgICAgICAgICAgICBzZXR0ZXIoc2NvcGUsIGNvbnRyb2xsZXIuJG5hbWUsIHVuZGVm
aW5lZCwgY29udHJvbGxlci4kbmFtZSk7CisgICAgICAgICAgICAgICAgcGFyZW50Rm9ybUN0cmwu
JCRyZW5hbWVDb250cm9sKGNvbnRyb2xsZXIsIG5ld1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBz
ZXR0ZXIoc2NvcGUsIGNvbnRyb2xsZXIuJG5hbWUsIGNvbnRyb2xsZXIsIGNvbnRyb2xsZXIuJG5h
bWUpOworICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvcm1F
bGVtZW50Lm9uKCckZGVzdHJveScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICBwYXJlbnRG
b3JtQ3RybC4kcmVtb3ZlQ29udHJvbChjb250cm9sbGVyKTsKKyAgICAgICAgICAgICAgaWYgKG5h
bWVBdHRyKSB7CisgICAgICAgICAgICAgICAgc2V0dGVyKHNjb3BlLCBhdHRyW25hbWVBdHRyXSwg
dW5kZWZpbmVkLCBjb250cm9sbGVyLiRuYW1lKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICBleHRlbmQoY29udHJvbGxlciwgbnVsbEZvcm1DdHJsKTsgLy9zdG9wIHByb3BhZ2F0aW5n
IGNoaWxkIGRlc3RydWN0aW9uIGhhbmRsZXJzIHVwd2FyZHMKKyAgICAgICAgICAgIH0pOworICAg
ICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgIH0KKyAgICB9OworCisgICAgcmV0dXJuIGZvcm1E
aXJlY3RpdmU7CisgIH1dOworfTsKKwordmFyIGZvcm1EaXJlY3RpdmUgPSBmb3JtRGlyZWN0aXZl
RmFjdG9yeSgpOwordmFyIG5nRm9ybURpcmVjdGl2ZSA9IGZvcm1EaXJlY3RpdmVGYWN0b3J5KHRy
dWUpOworCisvKiBnbG9iYWwgVkFMSURfQ0xBU1M6IGZhbHNlLAorICBJTlZBTElEX0NMQVNTOiBm
YWxzZSwKKyAgUFJJU1RJTkVfQ0xBU1M6IGZhbHNlLAorICBESVJUWV9DTEFTUzogZmFsc2UsCisg
IFVOVE9VQ0hFRF9DTEFTUzogZmFsc2UsCisgIFRPVUNIRURfQ0xBU1M6IGZhbHNlLAorICAkbmdN
b2RlbE1pbkVycjogZmFsc2UsCisqLworCisvLyBSZWdleCBjb2RlIGlzIG9idGFpbmVkIGZyb20g
U086IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzMxNDMwNzAvamF2YXNjcmlw
dC1yZWdleC1pc28tZGF0ZXRpbWUjYW5zd2VyLTMxNDMyMzEKK3ZhciBJU09fREFURV9SRUdFWFAg
PSAvXGR7NH0tWzAxXVxkLVswLTNdXGRUWzAtMl1cZDpbMC01XVxkOlswLTVdXGRcLlxkKyhbKy1d
WzAtMl1cZDpbMC01XVxkfFopLzsKK3ZhciBVUkxfUkVHRVhQID0gL14oZnRwfGh0dHB8aHR0cHMp
OlwvXC8oXHcrOnswLDF9XHcqQCk/KFxTKykoOlswLTldKyk/KFwvfFwvKFtcdyMhOi4/Kz0mJUAh
XC1cL10pKT8kLzsKK3ZhciBFTUFJTF9SRUdFWFAgPSAvXlthLXowLTkhIyQlJicqK1wvPT9eX2B7
fH1+Li1dK0BbYS16MC05XShbYS16MC05LV0qW2EtejAtOV0pPyhcLlthLXowLTldKFthLXowLTkt
XSpbYS16MC05XSk/KSokL2k7Cit2YXIgTlVNQkVSX1JFR0VYUCA9IC9eXHMqKFwtfFwrKT8oXGQr
fChcZCooXC5cZCopKSkoW2VFXVsrLV0/XGQrKT9ccyokLzsKK3ZhciBEQVRFX1JFR0VYUCA9IC9e
KFxkezR9KS0oXGR7Mn0pLShcZHsyfSkkLzsKK3ZhciBEQVRFVElNRUxPQ0FMX1JFR0VYUCA9IC9e
KFxkezR9KS0oXGRcZCktKFxkXGQpVChcZFxkKTooXGRcZCkoPzo6KFxkXGQpKFwuXGR7MSwzfSk/
KT8kLzsKK3ZhciBXRUVLX1JFR0VYUCA9IC9eKFxkezR9KS1XKFxkXGQpJC87Cit2YXIgTU9OVEhf
UkVHRVhQID0gL14oXGR7NH0pLShcZFxkKSQvOwordmFyIFRJTUVfUkVHRVhQID0gL14oXGRcZCk6
KFxkXGQpKD86OihcZFxkKShcLlxkezEsM30pPyk/JC87CisKK3ZhciBpbnB1dFR5cGUgPSB7CisK
KyAgLyoqCisgICAqIEBuZ2RvYyBpbnB1dAorICAgKiBAbmFtZSBpbnB1dFt0ZXh0XQorICAgKgor
ICAgKiBAZGVzY3JpcHRpb24KKyAgICogU3RhbmRhcmQgSFRNTCB0ZXh0IGlucHV0IHdpdGggYW5n
dWxhciBkYXRhIGJpbmRpbmcsIGluaGVyaXRlZCBieSBtb3N0IG9mIHRoZSBgaW5wdXRgIGVsZW1l
bnRzLgorICAgKgorICAgKgorICAgKiBAcGFyYW0ge3N0cmluZ30gbmdNb2RlbCBBc3NpZ25hYmxl
IGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBkYXRhLWJpbmQgdG8uCisgICAqIEBwYXJhbSB7c3RyaW5n
PX0gbmFtZSBQcm9wZXJ0eSBuYW1lIG9mIHRoZSBmb3JtIHVuZGVyIHdoaWNoIHRoZSBjb250cm9s
IGlzIHB1Ymxpc2hlZC4KKyAgICogQHBhcmFtIHtzdHJpbmc9fSByZXF1aXJlZCBBZGRzIGByZXF1
aXJlZGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIG5vdCBlbnRlcmVkLgor
ICAgKiBAcGFyYW0ge3N0cmluZz19IG5nUmVxdWlyZWQgQWRkcyBgcmVxdWlyZWRgIGF0dHJpYnV0
ZSBhbmQgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGNvbnN0cmFpbnQgdG8KKyAgICogICAgdGhlIGVs
ZW1lbnQgd2hlbiB0aGUgbmdSZXF1aXJlZCBleHByZXNzaW9uIGV2YWx1YXRlcyB0byB0cnVlLiBV
c2UgYG5nUmVxdWlyZWRgIGluc3RlYWQgb2YKKyAgICogICAgYHJlcXVpcmVkYCB3aGVuIHlvdSB3
YW50IHRvIGRhdGEtYmluZCB0byB0aGUgYHJlcXVpcmVkYCBhdHRyaWJ1dGUuCisgICAqIEBwYXJh
bSB7bnVtYmVyPX0gbmdNaW5sZW5ndGggU2V0cyBgbWlubGVuZ3RoYCB2YWxpZGF0aW9uIGVycm9y
IGtleSBpZiB0aGUgdmFsdWUgaXMgc2hvcnRlciB0aGFuCisgICAqICAgIG1pbmxlbmd0aC4KKyAg
ICogQHBhcmFtIHtudW1iZXI9fSBuZ01heGxlbmd0aCBTZXRzIGBtYXhsZW5ndGhgIHZhbGlkYXRp
b24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBsb25nZXIgdGhhbgorICAgKiAgICBtYXhsZW5n
dGguIFNldHRpbmcgdGhlIGF0dHJpYnV0ZSB0byBhIG5lZ2F0aXZlIG9yIG5vbi1udW1lcmljIHZh
bHVlLCBhbGxvd3MgdmlldyB2YWx1ZXMgb2YKKyAgICogICAgYW55IGxlbmd0aC4KKyAgICogQHBh
cmFtIHtzdHJpbmc9fSBwYXR0ZXJuIFNpbWlsYXIgdG8gYG5nUGF0dGVybmAgZXhjZXB0IHRoYXQg
dGhlIGF0dHJpYnV0ZSB2YWx1ZSBpcyB0aGUgYWN0dWFsIHN0cmluZworICAgKiAgICB0aGF0IGNv
bnRhaW5zIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gYm9keSB0aGF0IHdpbGwgYmUgY29udmVydGVk
IHRvIGEgcmVndWxhciBleHByZXNzaW9uCisgICAqICAgIGFzIGluIHRoZSBuZ1BhdHRlcm4gZGly
ZWN0aXZlLgorICAgKiBAcGFyYW0ge3N0cmluZz19IG5nUGF0dGVybiBTZXRzIGBwYXR0ZXJuYCB2
YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgbmdNb2RlbCB2YWx1ZSBkb2VzIG5vdCBtYXRjaAor
ICAgKiAgICBhIFJlZ0V4cCBmb3VuZCBieSBldmFsdWF0aW5nIHRoZSBBbmd1bGFyIGV4cHJlc3Np
b24gZ2l2ZW4gaW4gdGhlIGF0dHJpYnV0ZSB2YWx1ZS4KKyAgICogICAgSWYgdGhlIGV4cHJlc3Np
b24gZXZhbHVhdGVzIHRvIGEgUmVnRXhwIG9iamVjdCwgdGhlbiB0aGlzIGlzIHVzZWQgZGlyZWN0
bHkuCisgICAqICAgIElmIHRoZSBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBhIHN0cmluZywgdGhl
biBpdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIFJlZ0V4cAorICAgKiAgICBhZnRlciB3cmFwcGlu
ZyBpdCBpbiBgXmAgYW5kIGAkYCBjaGFyYWN0ZXJzLiBGb3IgaW5zdGFuY2UsIGAiYWJjImAgd2ls
bCBiZSBjb252ZXJ0ZWQgdG8KKyAgICogICAgYG5ldyBSZWdFeHAoJ15hYmMkJylgLjxiciAvPgor
ICAgKiAgICAqKk5vdGU6KiogQXZvaWQgdXNpbmcgdGhlIGBnYCBmbGFnIG9uIHRoZSBSZWdFeHAs
IGFzIGl0IHdpbGwgY2F1c2UgZWFjaCBzdWNjZXNzaXZlIHNlYXJjaCB0bworICAgKiAgICBzdGFy
dCBhdCB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgc2VhcmNoJ3MgbWF0Y2gsIHRodXMgbm90IHRha2lu
ZyB0aGUgd2hvbGUgaW5wdXQgdmFsdWUgaW50bworICAgKiAgICBhY2NvdW50LgorICAgKiBAcGFy
YW0ge3N0cmluZz19IG5nQ2hhbmdlIEFuZ3VsYXIgZXhwcmVzc2lvbiB0byBiZSBleGVjdXRlZCB3
aGVuIGlucHV0IGNoYW5nZXMgZHVlIHRvIHVzZXIKKyAgICogICAgaW50ZXJhY3Rpb24gd2l0aCB0
aGUgaW5wdXQgZWxlbWVudC4KKyAgICogQHBhcmFtIHtib29sZWFuPX0gW25nVHJpbT10cnVlXSBJ
ZiBzZXQgdG8gZmFsc2UgQW5ndWxhciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IHRyaW0gdGhlIGlu
cHV0LgorICAgKiAgICBUaGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkIGZvciBpbnB1dFt0eXBlPXBh
c3N3b3JkXSBjb250cm9scywgd2hpY2ggd2lsbCBuZXZlciB0cmltIHRoZQorICAgKiAgICBpbnB1
dC4KKyAgICoKKyAgICogQGV4YW1wbGUKKyAgICAgIDxleGFtcGxlIG5hbWU9InRleHQtaW5wdXQt
ZGlyZWN0aXZlIiBtb2R1bGU9InRleHRJbnB1dEV4YW1wbGUiPgorICAgICAgICA8ZmlsZSBuYW1l
PSJpbmRleC5odG1sIj4KKyAgICAgICAgIDxzY3JpcHQ+CisgICAgICAgICAgIGFuZ3VsYXIubW9k
dWxlKCd0ZXh0SW5wdXRFeGFtcGxlJywgW10pCisgICAgICAgICAgICAgLmNvbnRyb2xsZXIoJ0V4
YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHsKKyAgICAgICAg
ICAgICAgICRzY29wZS5leGFtcGxlID0geworICAgICAgICAgICAgICAgICB0ZXh0OiAnZ3Vlc3Qn
LAorICAgICAgICAgICAgICAgICB3b3JkOiAvXlxzKlx3KlxzKiQvCisgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgIH1dKTsKKyAgICAgICAgIDwvc2NyaXB0PgorICAgICAgICAgPGZvcm0g
bmFtZT0ibXlGb3JtIiBuZy1jb250cm9sbGVyPSJFeGFtcGxlQ29udHJvbGxlciI+CisgICAgICAg
ICAgIDxsYWJlbD5TaW5nbGUgd29yZDoKKyAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIg
bmFtZT0iaW5wdXQiIG5nLW1vZGVsPSJleGFtcGxlLnRleHQiCisgICAgICAgICAgICAgICAgICAg
IG5nLXBhdHRlcm49ImV4YW1wbGUud29yZCIgcmVxdWlyZWQgbmctdHJpbT0iZmFsc2UiPgorICAg
ICAgICAgICA8L2xhYmVsPgorICAgICAgICAgICA8ZGl2IHJvbGU9ImFsZXJ0Ij4KKyAgICAgICAg
ICAgICA8c3BhbiBjbGFzcz0iZXJyb3IiIG5nLXNob3c9Im15Rm9ybS5pbnB1dC4kZXJyb3IucmVx
dWlyZWQiPgorICAgICAgICAgICAgICAgUmVxdWlyZWQhPC9zcGFuPgorICAgICAgICAgICAgIDxz
cGFuIGNsYXNzPSJlcnJvciIgbmctc2hvdz0ibXlGb3JtLmlucHV0LiRlcnJvci5wYXR0ZXJuIj4K
KyAgICAgICAgICAgICAgIFNpbmdsZSB3b3JkIG9ubHkhPC9zcGFuPgorICAgICAgICAgICA8L2Rp
dj4KKyAgICAgICAgICAgPHR0PnRleHQgPSB7e2V4YW1wbGUudGV4dH19PC90dD48YnIvPgorICAg
ICAgICAgICA8dHQ+bXlGb3JtLmlucHV0LiR2YWxpZCA9IHt7bXlGb3JtLmlucHV0LiR2YWxpZH19
PC90dD48YnIvPgorICAgICAgICAgICA8dHQ+bXlGb3JtLmlucHV0LiRlcnJvciA9IHt7bXlGb3Jt
LmlucHV0LiRlcnJvcn19PC90dD48YnIvPgorICAgICAgICAgICA8dHQ+bXlGb3JtLiR2YWxpZCA9
IHt7bXlGb3JtLiR2YWxpZH19PC90dD48YnIvPgorICAgICAgICAgICA8dHQ+bXlGb3JtLiRlcnJv
ci5yZXF1aXJlZCA9IHt7ISFteUZvcm0uJGVycm9yLnJlcXVpcmVkfX08L3R0Pjxici8+CisgICAg
ICAgICAgPC9mb3JtPgorICAgICAgICA8L2ZpbGU+CisgICAgICAgIDxmaWxlIG5hbWU9InByb3Ry
YWN0b3IuanMiIHR5cGU9InByb3RyYWN0b3IiPgorICAgICAgICAgIHZhciB0ZXh0ID0gZWxlbWVu
dChieS5iaW5kaW5nKCdleGFtcGxlLnRleHQnKSk7CisgICAgICAgICAgdmFyIHZhbGlkID0gZWxl
bWVudChieS5iaW5kaW5nKCdteUZvcm0uaW5wdXQuJHZhbGlkJykpOworICAgICAgICAgIHZhciBp
bnB1dCA9IGVsZW1lbnQoYnkubW9kZWwoJ2V4YW1wbGUudGV4dCcpKTsKKworICAgICAgICAgIGl0
KCdzaG91bGQgaW5pdGlhbGl6ZSB0byBtb2RlbCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ZXhwZWN0KHRleHQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ2d1ZXN0Jyk7CisgICAgICAgICAgICBl
eHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ3RydWUnKTsKKyAgICAgICAgICB9KTsK
KworICAgICAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBlbXB0eScsIGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgaW5wdXQuY2xlYXIoKTsKKyAgICAgICAgICAgIGlucHV0LnNlbmRLZXlz
KCcnKTsKKworICAgICAgICAgICAgZXhwZWN0KHRleHQuZ2V0VGV4dCgpKS50b0VxdWFsKCd0ZXh0
ID0nKTsKKyAgICAgICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignZmFs
c2UnKTsKKyAgICAgICAgICB9KTsKKworICAgICAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBp
ZiBtdWx0aSB3b3JkJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpbnB1dC5jbGVhcigpOwor
ICAgICAgICAgICAgaW5wdXQuc2VuZEtleXMoJ2hlbGxvIHdvcmxkJyk7CisKKyAgICAgICAgICAg
IGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignZmFsc2UnKTsKKyAgICAgICAgICB9
KTsKKyAgICAgICAgPC9maWxlPgorICAgICAgPC9leGFtcGxlPgorICAgKi8KKyAgJ3RleHQnOiB0
ZXh0SW5wdXRUeXBlLAorCisgICAgLyoqCisgICAgICogQG5nZG9jIGlucHV0CisgICAgICogQG5h
bWUgaW5wdXRbZGF0ZV0KKyAgICAgKgorICAgICAqIEBkZXNjcmlwdGlvbgorICAgICAqIElucHV0
IHdpdGggZGF0ZSB2YWxpZGF0aW9uIGFuZCB0cmFuc2Zvcm1hdGlvbi4gSW4gYnJvd3NlcnMgdGhh
dCBkbyBub3QgeWV0IHN1cHBvcnQKKyAgICAgKiB0aGUgSFRNTDUgZGF0ZSBpbnB1dCwgYSB0ZXh0
IGVsZW1lbnQgd2lsbCBiZSB1c2VkLiBJbiB0aGF0IGNhc2UsIHRleHQgbXVzdCBiZSBlbnRlcmVk
IGluIGEgdmFsaWQgSVNPLTg2MDEKKyAgICAgKiBkYXRlIGZvcm1hdCAoeXl5eS1NTS1kZCksIGZv
ciBleGFtcGxlOiBgMjAwOS0wMS0wNmAuIFNpbmNlIG1hbnkKKyAgICAgKiBtb2Rlcm4gYnJvd3Nl
cnMgZG8gbm90IHlldCBzdXBwb3J0IHRoaXMgaW5wdXQgdHlwZSwgaXQgaXMgaW1wb3J0YW50IHRv
IHByb3ZpZGUgY3VlcyB0byB1c2VycyBvbiB0aGUKKyAgICAgKiBleHBlY3RlZCBpbnB1dCBmb3Jt
YXQgdmlhIGEgcGxhY2Vob2xkZXIgb3IgbGFiZWwuCisgICAgICoKKyAgICAgKiBUaGUgbW9kZWwg
bXVzdCBhbHdheXMgYmUgYSBEYXRlIG9iamVjdCwgb3RoZXJ3aXNlIEFuZ3VsYXIgd2lsbCB0aHJv
dyBhbiBlcnJvci4KKyAgICAgKiBJbnZhbGlkIGBEYXRlYCBvYmplY3RzIChkYXRlcyB3aG9zZSBg
Z2V0VGltZSgpYCBpcyBgTmFOYCkgd2lsbCBiZSByZW5kZXJlZCBhcyBhbiBlbXB0eSBzdHJpbmcu
CisgICAgICoKKyAgICAgKiBUaGUgdGltZXpvbmUgdG8gYmUgdXNlZCB0byByZWFkL3dyaXRlIHRo
ZSBgRGF0ZWAgaW5zdGFuY2UgaW4gdGhlIG1vZGVsIGNhbiBiZSBkZWZpbmVkIHVzaW5nCisgICAg
ICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ01vZGVsT3B0aW9ucyBuZ01vZGVsT3B0aW9uc30uIEJ5
IGRlZmF1bHQsIHRoaXMgaXMgdGhlIHRpbWV6b25lIG9mIHRoZSBicm93c2VyLgorICAgICAqCisg
ICAgICogQHBhcmFtIHtzdHJpbmd9IG5nTW9kZWwgQXNzaWduYWJsZSBhbmd1bGFyIGV4cHJlc3Np
b24gdG8gZGF0YS1iaW5kIHRvLgorICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gbmFtZSBQcm9wZXJ0
eSBuYW1lIG9mIHRoZSBmb3JtIHVuZGVyIHdoaWNoIHRoZSBjb250cm9sIGlzIHB1Ymxpc2hlZC4K
KyAgICAgKiBAcGFyYW0ge3N0cmluZz19IG1pbiBTZXRzIHRoZSBgbWluYCB2YWxpZGF0aW9uIGVy
cm9yIGtleSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpcyBsZXNzIHRoYW4gYG1pbmAuIFRoaXMgbXVz
dCBiZSBhCisgICAgICogdmFsaWQgSVNPIGRhdGUgc3RyaW5nICh5eXl5LU1NLWRkKS4KKyAgICAg
KiBAcGFyYW0ge3N0cmluZz19IG1heCBTZXRzIHRoZSBgbWF4YCB2YWxpZGF0aW9uIGVycm9yIGtl
eSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpcyBncmVhdGVyIHRoYW4gYG1heGAuIFRoaXMgbXVzdCBi
ZQorICAgICAqIGEgdmFsaWQgSVNPIGRhdGUgc3RyaW5nICh5eXl5LU1NLWRkKS4KKyAgICAgKiBA
cGFyYW0ge3N0cmluZz19IHJlcXVpcmVkIFNldHMgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGVycm9y
IGtleSBpZiB0aGUgdmFsdWUgaXMgbm90IGVudGVyZWQuCisgICAgICogQHBhcmFtIHtzdHJpbmc9
fSBuZ1JlcXVpcmVkIEFkZHMgYHJlcXVpcmVkYCBhdHRyaWJ1dGUgYW5kIGByZXF1aXJlZGAgdmFs
aWRhdGlvbiBjb25zdHJhaW50IHRvCisgICAgICogICAgdGhlIGVsZW1lbnQgd2hlbiB0aGUgbmdS
ZXF1aXJlZCBleHByZXNzaW9uIGV2YWx1YXRlcyB0byB0cnVlLiBVc2UgYG5nUmVxdWlyZWRgIGlu
c3RlYWQgb2YKKyAgICAgKiAgICBgcmVxdWlyZWRgIHdoZW4geW91IHdhbnQgdG8gZGF0YS1iaW5k
IHRvIHRoZSBgcmVxdWlyZWRgIGF0dHJpYnV0ZS4KKyAgICAgKiBAcGFyYW0ge3N0cmluZz19IG5n
Q2hhbmdlIEFuZ3VsYXIgZXhwcmVzc2lvbiB0byBiZSBleGVjdXRlZCB3aGVuIGlucHV0IGNoYW5n
ZXMgZHVlIHRvIHVzZXIKKyAgICAgKiAgICBpbnRlcmFjdGlvbiB3aXRoIHRoZSBpbnB1dCBlbGVt
ZW50LgorICAgICAqCisgICAgICogQGV4YW1wbGUKKyAgICAgPGV4YW1wbGUgbmFtZT0iZGF0ZS1p
bnB1dC1kaXJlY3RpdmUiIG1vZHVsZT0iZGF0ZUlucHV0RXhhbXBsZSI+CisgICAgIDxmaWxlIG5h
bWU9ImluZGV4Lmh0bWwiPgorICAgICAgIDxzY3JpcHQ+CisgICAgICAgICAgYW5ndWxhci5tb2R1
bGUoJ2RhdGVJbnB1dEV4YW1wbGUnLCBbXSkKKyAgICAgICAgICAgIC5jb250cm9sbGVyKCdEYXRl
Q29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7CisgICAgICAgICAgICAg
ICRzY29wZS5leGFtcGxlID0geworICAgICAgICAgICAgICAgIHZhbHVlOiBuZXcgRGF0ZSgyMDEz
LCA5LCAyMikKKyAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH1dKTsKKyAgICAgICA8L3Nj
cmlwdD4KKyAgICAgICA8Zm9ybSBuYW1lPSJteUZvcm0iIG5nLWNvbnRyb2xsZXI9IkRhdGVDb250
cm9sbGVyIGFzIGRhdGVDdHJsIj4KKyAgICAgICAgICA8bGFiZWwgZm9yPSJleGFtcGxlSW5wdXQi
PlBpY2sgYSBkYXRlIGluIDIwMTM6PC9sYWJlbD4KKyAgICAgICAgICA8aW5wdXQgdHlwZT0iZGF0
ZSIgaWQ9ImV4YW1wbGVJbnB1dCIgbmFtZT0iaW5wdXQiIG5nLW1vZGVsPSJleGFtcGxlLnZhbHVl
IgorICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ieXl5eS1NTS1kZCIgbWluPSIyMDEzLTAxLTAx
IiBtYXg9IjIwMTMtMTItMzEiIHJlcXVpcmVkIC8+CisgICAgICAgICAgPGRpdiByb2xlPSJhbGVy
dCI+CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZXJyb3IiIG5nLXNob3c9Im15Rm9ybS5pbnB1
dC4kZXJyb3IucmVxdWlyZWQiPgorICAgICAgICAgICAgICAgIFJlcXVpcmVkITwvc3Bhbj4KKyAg
ICAgICAgICAgIDxzcGFuIGNsYXNzPSJlcnJvciIgbmctc2hvdz0ibXlGb3JtLmlucHV0LiRlcnJv
ci5kYXRlIj4KKyAgICAgICAgICAgICAgICBOb3QgYSB2YWxpZCBkYXRlITwvc3Bhbj4KKyAgICAg
ICAgICAgPC9kaXY+CisgICAgICAgICAgIDx0dD52YWx1ZSA9IHt7ZXhhbXBsZS52YWx1ZSB8IGRh
dGU6ICJ5eXl5LU1NLWRkIn19PC90dD48YnIvPgorICAgICAgICAgICA8dHQ+bXlGb3JtLmlucHV0
LiR2YWxpZCA9IHt7bXlGb3JtLmlucHV0LiR2YWxpZH19PC90dD48YnIvPgorICAgICAgICAgICA8
dHQ+bXlGb3JtLmlucHV0LiRlcnJvciA9IHt7bXlGb3JtLmlucHV0LiRlcnJvcn19PC90dD48YnIv
PgorICAgICAgICAgICA8dHQ+bXlGb3JtLiR2YWxpZCA9IHt7bXlGb3JtLiR2YWxpZH19PC90dD48
YnIvPgorICAgICAgICAgICA8dHQ+bXlGb3JtLiRlcnJvci5yZXF1aXJlZCA9IHt7ISFteUZvcm0u
JGVycm9yLnJlcXVpcmVkfX08L3R0Pjxici8+CisgICAgICAgPC9mb3JtPgorICAgICA8L2ZpbGU+
CisgICAgIDxmaWxlIG5hbWU9InByb3RyYWN0b3IuanMiIHR5cGU9InByb3RyYWN0b3IiPgorICAg
ICAgICB2YXIgdmFsdWUgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ2V4YW1wbGUudmFsdWUgfCBkYXRl
OiAieXl5eS1NTS1kZCInKSk7CisgICAgICAgIHZhciB2YWxpZCA9IGVsZW1lbnQoYnkuYmluZGlu
ZygnbXlGb3JtLmlucHV0LiR2YWxpZCcpKTsKKyAgICAgICAgdmFyIGlucHV0ID0gZWxlbWVudChi
eS5tb2RlbCgnZXhhbXBsZS52YWx1ZScpKTsKKworICAgICAgICAvLyBjdXJyZW50bHkgcHJvdHJh
Y3Rvci93ZWJkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydAorICAgICAgICAvLyBzZW5kaW5nIGtleXMg
dG8gYWxsIGtub3duIEhUTUw1IGlucHV0IGNvbnRyb2xzCisgICAgICAgIC8vIGZvciB2YXJpb3Vz
IGJyb3dzZXJzIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvcHJvdHJhY3Rvci9pc3N1
ZXMvNTYyKS4KKyAgICAgICAgZnVuY3Rpb24gc2V0SW5wdXQodmFsKSB7CisgICAgICAgICAgLy8g
c2V0IHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCBhbmQgZm9yY2UgdmFsaWRhdGlvbi4KKyAgICAg
ICAgICB2YXIgc2NyID0gInZhciBpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhhbXBs
ZUlucHV0Jyk7ICIgKworICAgICAgICAgICJpcHQudmFsdWUgPSAnIiArIHZhbCArICInOyIgKwor
ICAgICAgICAgICJhbmd1bGFyLmVsZW1lbnQoaXB0KS5zY29wZSgpLiRhcHBseShmdW5jdGlvbihz
KSB7IHMubXlGb3JtW2lwdC5uYW1lXS4kc2V0Vmlld1ZhbHVlKCciICsgdmFsICsgIicpOyB9KTsi
OworICAgICAgICAgIGJyb3dzZXIuZXhlY3V0ZVNjcmlwdChzY3IpOworICAgICAgICB9CisKKyAg
ICAgICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIHRvIG1vZGVsJywgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgZXhwZWN0KHZhbHVlLmdldFRleHQoKSkudG9Db250YWluKCcyMDEzLTEwLTIyJyk7Cisg
ICAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCdteUZvcm0uaW5wdXQu
JHZhbGlkID0gdHJ1ZScpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIGJlIGlu
dmFsaWQgaWYgZW1wdHknLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICBzZXRJbnB1dCgnJyk7Cisg
ICAgICAgICAgZXhwZWN0KHZhbHVlLmdldFRleHQoKSkudG9FcXVhbCgndmFsdWUgPScpOworICAg
ICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignbXlGb3JtLmlucHV0LiR2
YWxpZCA9IGZhbHNlJyk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdzaG91bGQgYmUgaW52
YWxpZCBpZiBvdmVyIG1heCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHNldElucHV0KCcyMDE1
LTAxLTAxJyk7CisgICAgICAgICAgZXhwZWN0KHZhbHVlLmdldFRleHQoKSkudG9Db250YWluKCcn
KTsKKyAgICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ215Rm9ybS5p
bnB1dC4kdmFsaWQgPSBmYWxzZScpOworICAgICAgICB9KTsKKyAgICAgPC9maWxlPgorICAgICA8
L2V4YW1wbGU+CisgICAgICovCisgICdkYXRlJzogY3JlYXRlRGF0ZUlucHV0VHlwZSgnZGF0ZScs
IERBVEVfUkVHRVhQLAorICAgICAgICAgY3JlYXRlRGF0ZVBhcnNlcihEQVRFX1JFR0VYUCwgWyd5
eXl5JywgJ01NJywgJ2RkJ10pLAorICAgICAgICAgJ3l5eXktTU0tZGQnKSwKKworICAgLyoqCisg
ICAgKiBAbmdkb2MgaW5wdXQKKyAgICAqIEBuYW1lIGlucHV0W2RhdGV0aW1lLWxvY2FsXQorICAg
ICoKKyAgICAqIEBkZXNjcmlwdGlvbgorICAgICogSW5wdXQgd2l0aCBkYXRldGltZSB2YWxpZGF0
aW9uIGFuZCB0cmFuc2Zvcm1hdGlvbi4gSW4gYnJvd3NlcnMgdGhhdCBkbyBub3QgeWV0IHN1cHBv
cnQKKyAgICAqIHRoZSBIVE1MNSBkYXRlIGlucHV0LCBhIHRleHQgZWxlbWVudCB3aWxsIGJlIHVz
ZWQuIEluIHRoYXQgY2FzZSwgdGhlIHRleHQgbXVzdCBiZSBlbnRlcmVkIGluIGEgdmFsaWQgSVNP
LTg2MDEKKyAgICAqIGxvY2FsIGRhdGV0aW1lIGZvcm1hdCAoeXl5eS1NTS1kZFRISDptbTpzcyks
IGZvciBleGFtcGxlOiBgMjAxMC0xMi0yOFQxNDo1NzowMGAuCisgICAgKgorICAgICogVGhlIG1v
ZGVsIG11c3QgYWx3YXlzIGJlIGEgRGF0ZSBvYmplY3QsIG90aGVyd2lzZSBBbmd1bGFyIHdpbGwg
dGhyb3cgYW4gZXJyb3IuCisgICAgKiBJbnZhbGlkIGBEYXRlYCBvYmplY3RzIChkYXRlcyB3aG9z
ZSBgZ2V0VGltZSgpYCBpcyBgTmFOYCkgd2lsbCBiZSByZW5kZXJlZCBhcyBhbiBlbXB0eSBzdHJp
bmcuCisgICAgKgorICAgICogVGhlIHRpbWV6b25lIHRvIGJlIHVzZWQgdG8gcmVhZC93cml0ZSB0
aGUgYERhdGVgIGluc3RhbmNlIGluIHRoZSBtb2RlbCBjYW4gYmUgZGVmaW5lZCB1c2luZworICAg
ICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ01vZGVsT3B0aW9ucyBuZ01vZGVsT3B0aW9uc30uIEJ5
IGRlZmF1bHQsIHRoaXMgaXMgdGhlIHRpbWV6b25lIG9mIHRoZSBicm93c2VyLgorICAgICoKKyAg
ICAqIEBwYXJhbSB7c3RyaW5nfSBuZ01vZGVsIEFzc2lnbmFibGUgYW5ndWxhciBleHByZXNzaW9u
IHRvIGRhdGEtYmluZCB0by4KKyAgICAqIEBwYXJhbSB7c3RyaW5nPX0gbmFtZSBQcm9wZXJ0eSBu
YW1lIG9mIHRoZSBmb3JtIHVuZGVyIHdoaWNoIHRoZSBjb250cm9sIGlzIHB1Ymxpc2hlZC4KKyAg
ICAqIEBwYXJhbSB7c3RyaW5nPX0gbWluIFNldHMgdGhlIGBtaW5gIHZhbGlkYXRpb24gZXJyb3Ig
a2V5IGlmIHRoZSB2YWx1ZSBlbnRlcmVkIGlzIGxlc3MgdGhhbiBgbWluYC4gVGhpcyBtdXN0IGJl
IGEKKyAgICAqIHZhbGlkIElTTyBkYXRldGltZSBmb3JtYXQgKHl5eXktTU0tZGRUSEg6bW06c3Mp
LgorICAgICogQHBhcmFtIHtzdHJpbmc9fSBtYXggU2V0cyB0aGUgYG1heGAgdmFsaWRhdGlvbiBl
cnJvciBrZXkgaWYgdGhlIHZhbHVlIGVudGVyZWQgaXMgZ3JlYXRlciB0aGFuIGBtYXhgLiBUaGlz
IG11c3QgYmUKKyAgICAqIGEgdmFsaWQgSVNPIGRhdGV0aW1lIGZvcm1hdCAoeXl5eS1NTS1kZFRI
SDptbTpzcykuCisgICAgKiBAcGFyYW0ge3N0cmluZz19IHJlcXVpcmVkIFNldHMgYHJlcXVpcmVk
YCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgbm90IGVudGVyZWQuCisgICAg
KiBAcGFyYW0ge3N0cmluZz19IG5nUmVxdWlyZWQgQWRkcyBgcmVxdWlyZWRgIGF0dHJpYnV0ZSBh
bmQgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGNvbnN0cmFpbnQgdG8KKyAgICAqICAgIHRoZSBlbGVt
ZW50IHdoZW4gdGhlIG5nUmVxdWlyZWQgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gdHJ1ZS4gVXNl
IGBuZ1JlcXVpcmVkYCBpbnN0ZWFkIG9mCisgICAgKiAgICBgcmVxdWlyZWRgIHdoZW4geW91IHdh
bnQgdG8gZGF0YS1iaW5kIHRvIHRoZSBgcmVxdWlyZWRgIGF0dHJpYnV0ZS4KKyAgICAqIEBwYXJh
bSB7c3RyaW5nPX0gbmdDaGFuZ2UgQW5ndWxhciBleHByZXNzaW9uIHRvIGJlIGV4ZWN1dGVkIHdo
ZW4gaW5wdXQgY2hhbmdlcyBkdWUgdG8gdXNlcgorICAgICogICAgaW50ZXJhY3Rpb24gd2l0aCB0
aGUgaW5wdXQgZWxlbWVudC4KKyAgICAqCisgICAgKiBAZXhhbXBsZQorICAgIDxleGFtcGxlIG5h
bWU9ImRhdGV0aW1lbG9jYWwtaW5wdXQtZGlyZWN0aXZlIiBtb2R1bGU9ImRhdGVFeGFtcGxlIj4K
KyAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgIDxzY3JpcHQ+CisgICAgICAgIGFu
Z3VsYXIubW9kdWxlKCdkYXRlRXhhbXBsZScsIFtdKQorICAgICAgICAgIC5jb250cm9sbGVyKCdE
YXRlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7CisgICAgICAgICAg
ICAkc2NvcGUuZXhhbXBsZSA9IHsKKyAgICAgICAgICAgICAgdmFsdWU6IG5ldyBEYXRlKDIwMTAs
IDExLCAyOCwgMTQsIDU3KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICB9XSk7CisgICAgICA8
L3NjcmlwdD4KKyAgICAgIDxmb3JtIG5hbWU9Im15Rm9ybSIgbmctY29udHJvbGxlcj0iRGF0ZUNv
bnRyb2xsZXIgYXMgZGF0ZUN0cmwiPgorICAgICAgICA8bGFiZWwgZm9yPSJleGFtcGxlSW5wdXQi
PlBpY2sgYSBkYXRlIGJldHdlZW4gaW4gMjAxMzo8L2xhYmVsPgorICAgICAgICA8aW5wdXQgdHlw
ZT0iZGF0ZXRpbWUtbG9jYWwiIGlkPSJleGFtcGxlSW5wdXQiIG5hbWU9ImlucHV0IiBuZy1tb2Rl
bD0iZXhhbXBsZS52YWx1ZSIKKyAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ5eXl5LU1NLWRkVEhI
Om1tOnNzIiBtaW49IjIwMDEtMDEtMDFUMDA6MDA6MDAiIG1heD0iMjAxMy0xMi0zMVQwMDowMDow
MCIgcmVxdWlyZWQgLz4KKyAgICAgICAgPGRpdiByb2xlPSJhbGVydCI+CisgICAgICAgICAgPHNw
YW4gY2xhc3M9ImVycm9yIiBuZy1zaG93PSJteUZvcm0uaW5wdXQuJGVycm9yLnJlcXVpcmVkIj4K
KyAgICAgICAgICAgICAgUmVxdWlyZWQhPC9zcGFuPgorICAgICAgICAgIDxzcGFuIGNsYXNzPSJl
cnJvciIgbmctc2hvdz0ibXlGb3JtLmlucHV0LiRlcnJvci5kYXRldGltZWxvY2FsIj4KKyAgICAg
ICAgICAgICAgTm90IGEgdmFsaWQgZGF0ZSE8L3NwYW4+CisgICAgICAgIDwvZGl2PgorICAgICAg
ICA8dHQ+dmFsdWUgPSB7e2V4YW1wbGUudmFsdWUgfCBkYXRlOiAieXl5eS1NTS1kZFRISDptbTpz
cyJ9fTwvdHQ+PGJyLz4KKyAgICAgICAgPHR0Pm15Rm9ybS5pbnB1dC4kdmFsaWQgPSB7e215Rm9y
bS5pbnB1dC4kdmFsaWR9fTwvdHQ+PGJyLz4KKyAgICAgICAgPHR0Pm15Rm9ybS5pbnB1dC4kZXJy
b3IgPSB7e215Rm9ybS5pbnB1dC4kZXJyb3J9fTwvdHQ+PGJyLz4KKyAgICAgICAgPHR0Pm15Rm9y
bS4kdmFsaWQgPSB7e215Rm9ybS4kdmFsaWR9fTwvdHQ+PGJyLz4KKyAgICAgICAgPHR0Pm15Rm9y
bS4kZXJyb3IucmVxdWlyZWQgPSB7eyEhbXlGb3JtLiRlcnJvci5yZXF1aXJlZH19PC90dD48YnIv
PgorICAgICAgPC9mb3JtPgorICAgIDwvZmlsZT4KKyAgICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9y
LmpzIiB0eXBlPSJwcm90cmFjdG9yIj4KKyAgICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQoYnkuYmlu
ZGluZygnZXhhbXBsZS52YWx1ZSB8IGRhdGU6ICJ5eXl5LU1NLWRkVEhIOm1tOnNzIicpKTsKKyAg
ICAgIHZhciB2YWxpZCA9IGVsZW1lbnQoYnkuYmluZGluZygnbXlGb3JtLmlucHV0LiR2YWxpZCcp
KTsKKyAgICAgIHZhciBpbnB1dCA9IGVsZW1lbnQoYnkubW9kZWwoJ2V4YW1wbGUudmFsdWUnKSk7
CisKKyAgICAgIC8vIGN1cnJlbnRseSBwcm90cmFjdG9yL3dlYmRyaXZlciBkb2VzIG5vdCBzdXBw
b3J0CisgICAgICAvLyBzZW5kaW5nIGtleXMgdG8gYWxsIGtub3duIEhUTUw1IGlucHV0IGNvbnRy
b2xzCisgICAgICAvLyBmb3IgdmFyaW91cyBicm93c2VycyAoaHR0cHM6Ly9naXRodWIuY29tL2Fu
Z3VsYXIvcHJvdHJhY3Rvci9pc3N1ZXMvNTYyKS4KKyAgICAgIGZ1bmN0aW9uIHNldElucHV0KHZh
bCkgeworICAgICAgICAvLyBzZXQgdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50IGFuZCBmb3JjZSB2
YWxpZGF0aW9uLgorICAgICAgICB2YXIgc2NyID0gInZhciBpcHQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnZXhhbXBsZUlucHV0Jyk7ICIgKworICAgICAgICAiaXB0LnZhbHVlID0gJyIgKyB2
YWwgKyAiJzsiICsKKyAgICAgICAgImFuZ3VsYXIuZWxlbWVudChpcHQpLnNjb3BlKCkuJGFwcGx5
KGZ1bmN0aW9uKHMpIHsgcy5teUZvcm1baXB0Lm5hbWVdLiRzZXRWaWV3VmFsdWUoJyIgKyB2YWwg
KyAiJyk7IH0pOyI7CisgICAgICAgIGJyb3dzZXIuZXhlY3V0ZVNjcmlwdChzY3IpOworICAgICAg
fQorCisgICAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgdG8gbW9kZWwnLCBmdW5jdGlvbigpIHsK
KyAgICAgICAgZXhwZWN0KHZhbHVlLmdldFRleHQoKSkudG9Db250YWluKCcyMDEwLTEyLTI4VDE0
OjU3OjAwJyk7CisgICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignbXlG
b3JtLmlucHV0LiR2YWxpZCA9IHRydWUnKTsKKyAgICAgIH0pOworCisgICAgICBpdCgnc2hvdWxk
IGJlIGludmFsaWQgaWYgZW1wdHknLCBmdW5jdGlvbigpIHsKKyAgICAgICAgc2V0SW5wdXQoJycp
OworICAgICAgICBleHBlY3QodmFsdWUuZ2V0VGV4dCgpKS50b0VxdWFsKCd2YWx1ZSA9Jyk7Cisg
ICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignbXlGb3JtLmlucHV0LiR2
YWxpZCA9IGZhbHNlJyk7CisgICAgICB9KTsKKworICAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlk
IGlmIG92ZXIgbWF4JywgZnVuY3Rpb24oKSB7CisgICAgICAgIHNldElucHV0KCcyMDE1LTAxLTAx
VDIzOjU5OjAwJyk7CisgICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkpLnRvQ29udGFpbign
Jyk7CisgICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignbXlGb3JtLmlu
cHV0LiR2YWxpZCA9IGZhbHNlJyk7CisgICAgICB9KTsKKyAgICA8L2ZpbGU+CisgICAgPC9leGFt
cGxlPgorICAgICovCisgICdkYXRldGltZS1sb2NhbCc6IGNyZWF0ZURhdGVJbnB1dFR5cGUoJ2Rh
dGV0aW1lbG9jYWwnLCBEQVRFVElNRUxPQ0FMX1JFR0VYUCwKKyAgICAgIGNyZWF0ZURhdGVQYXJz
ZXIoREFURVRJTUVMT0NBTF9SRUdFWFAsIFsneXl5eScsICdNTScsICdkZCcsICdISCcsICdtbScs
ICdzcycsICdzc3MnXSksCisgICAgICAneXl5eS1NTS1kZFRISDptbTpzcy5zc3MnKSwKKworICAv
KioKKyAgICogQG5nZG9jIGlucHV0CisgICAqIEBuYW1lIGlucHV0W3RpbWVdCisgICAqCisgICAq
IEBkZXNjcmlwdGlvbgorICAgKiBJbnB1dCB3aXRoIHRpbWUgdmFsaWRhdGlvbiBhbmQgdHJhbnNm
b3JtYXRpb24uIEluIGJyb3dzZXJzIHRoYXQgZG8gbm90IHlldCBzdXBwb3J0CisgICAqIHRoZSBI
VE1MNSBkYXRlIGlucHV0LCBhIHRleHQgZWxlbWVudCB3aWxsIGJlIHVzZWQuIEluIHRoYXQgY2Fz
ZSwgdGhlIHRleHQgbXVzdCBiZSBlbnRlcmVkIGluIGEgdmFsaWQgSVNPLTg2MDEKKyAgICogbG9j
YWwgdGltZSBmb3JtYXQgKEhIOm1tOnNzKSwgZm9yIGV4YW1wbGU6IGAxNDo1NzowMGAuIE1vZGVs
IG11c3QgYmUgYSBEYXRlIG9iamVjdC4gVGhpcyBiaW5kaW5nIHdpbGwgYWx3YXlzIG91dHB1dCBh
CisgICAqIERhdGUgb2JqZWN0IHRvIHRoZSBtb2RlbCBvZiBKYW51YXJ5IDEsIDE5NzAsIG9yIGxv
Y2FsIGRhdGUgYG5ldyBEYXRlKDE5NzAsIDAsIDEsIEhILCBtbSwgc3MpYC4KKyAgICoKKyAgICog
VGhlIG1vZGVsIG11c3QgYWx3YXlzIGJlIGEgRGF0ZSBvYmplY3QsIG90aGVyd2lzZSBBbmd1bGFy
IHdpbGwgdGhyb3cgYW4gZXJyb3IuCisgICAqIEludmFsaWQgYERhdGVgIG9iamVjdHMgKGRhdGVz
IHdob3NlIGBnZXRUaW1lKClgIGlzIGBOYU5gKSB3aWxsIGJlIHJlbmRlcmVkIGFzIGFuIGVtcHR5
IHN0cmluZy4KKyAgICoKKyAgICogVGhlIHRpbWV6b25lIHRvIGJlIHVzZWQgdG8gcmVhZC93cml0
ZSB0aGUgYERhdGVgIGluc3RhbmNlIGluIHRoZSBtb2RlbCBjYW4gYmUgZGVmaW5lZCB1c2luZwor
ICAgKiB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nTW9kZWxPcHRpb25zIG5nTW9kZWxPcHRpb25zfS4g
QnkgZGVmYXVsdCwgdGhpcyBpcyB0aGUgdGltZXpvbmUgb2YgdGhlIGJyb3dzZXIuCisgICAqCisg
ICAqIEBwYXJhbSB7c3RyaW5nfSBuZ01vZGVsIEFzc2lnbmFibGUgYW5ndWxhciBleHByZXNzaW9u
IHRvIGRhdGEtYmluZCB0by4KKyAgICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lIFByb3BlcnR5IG5h
bWUgb2YgdGhlIGZvcm0gdW5kZXIgd2hpY2ggdGhlIGNvbnRyb2wgaXMgcHVibGlzaGVkLgorICAg
KiBAcGFyYW0ge3N0cmluZz19IG1pbiBTZXRzIHRoZSBgbWluYCB2YWxpZGF0aW9uIGVycm9yIGtl
eSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpcyBsZXNzIHRoYW4gYG1pbmAuIFRoaXMgbXVzdCBiZSBh
CisgICAqIHZhbGlkIElTTyB0aW1lIGZvcm1hdCAoSEg6bW06c3MpLgorICAgKiBAcGFyYW0ge3N0
cmluZz19IG1heCBTZXRzIHRoZSBgbWF4YCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFs
dWUgZW50ZXJlZCBpcyBncmVhdGVyIHRoYW4gYG1heGAuIFRoaXMgbXVzdCBiZSBhCisgICAqIHZh
bGlkIElTTyB0aW1lIGZvcm1hdCAoSEg6bW06c3MpLgorICAgKiBAcGFyYW0ge3N0cmluZz19IHJl
cXVpcmVkIFNldHMgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUg
aXMgbm90IGVudGVyZWQuCisgICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdSZXF1aXJlZCBBZGRzIGBy
ZXF1aXJlZGAgYXR0cmlidXRlIGFuZCBgcmVxdWlyZWRgIHZhbGlkYXRpb24gY29uc3RyYWludCB0
bworICAgKiAgICB0aGUgZWxlbWVudCB3aGVuIHRoZSBuZ1JlcXVpcmVkIGV4cHJlc3Npb24gZXZh
bHVhdGVzIHRvIHRydWUuIFVzZSBgbmdSZXF1aXJlZGAgaW5zdGVhZCBvZgorICAgKiAgICBgcmVx
dWlyZWRgIHdoZW4geW91IHdhbnQgdG8gZGF0YS1iaW5kIHRvIHRoZSBgcmVxdWlyZWRgIGF0dHJp
YnV0ZS4KKyAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ0NoYW5nZSBBbmd1bGFyIGV4cHJlc3Npb24g
dG8gYmUgZXhlY3V0ZWQgd2hlbiBpbnB1dCBjaGFuZ2VzIGR1ZSB0byB1c2VyCisgICAqICAgIGlu
dGVyYWN0aW9uIHdpdGggdGhlIGlucHV0IGVsZW1lbnQuCisgICAqCisgICAqIEBleGFtcGxlCisg
ICA8ZXhhbXBsZSBuYW1lPSJ0aW1lLWlucHV0LWRpcmVjdGl2ZSIgbW9kdWxlPSJ0aW1lRXhhbXBs
ZSI+CisgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgPHNjcmlwdD4KKyAgICAgIGFu
Z3VsYXIubW9kdWxlKCd0aW1lRXhhbXBsZScsIFtdKQorICAgICAgICAuY29udHJvbGxlcignRGF0
ZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkgeworICAgICAgICAgICRz
Y29wZS5leGFtcGxlID0geworICAgICAgICAgICAgdmFsdWU6IG5ldyBEYXRlKDE5NzAsIDAsIDEs
IDE0LCA1NywgMCkKKyAgICAgICAgICB9OworICAgICAgICB9XSk7CisgICAgIDwvc2NyaXB0Pgor
ICAgICA8Zm9ybSBuYW1lPSJteUZvcm0iIG5nLWNvbnRyb2xsZXI9IkRhdGVDb250cm9sbGVyIGFz
IGRhdGVDdHJsIj4KKyAgICAgICAgPGxhYmVsIGZvcj0iZXhhbXBsZUlucHV0Ij5QaWNrIGEgYmV0
d2VlbiA4YW0gYW5kIDVwbTo8L2xhYmVsPgorICAgICAgICA8aW5wdXQgdHlwZT0idGltZSIgaWQ9
ImV4YW1wbGVJbnB1dCIgbmFtZT0iaW5wdXQiIG5nLW1vZGVsPSJleGFtcGxlLnZhbHVlIgorICAg
ICAgICAgICAgcGxhY2Vob2xkZXI9IkhIOm1tOnNzIiBtaW49IjA4OjAwOjAwIiBtYXg9IjE3OjAw
OjAwIiByZXF1aXJlZCAvPgorICAgICAgICA8ZGl2IHJvbGU9ImFsZXJ0Ij4KKyAgICAgICAgICA8
c3BhbiBjbGFzcz0iZXJyb3IiIG5nLXNob3c9Im15Rm9ybS5pbnB1dC4kZXJyb3IucmVxdWlyZWQi
PgorICAgICAgICAgICAgICBSZXF1aXJlZCE8L3NwYW4+CisgICAgICAgICAgPHNwYW4gY2xhc3M9
ImVycm9yIiBuZy1zaG93PSJteUZvcm0uaW5wdXQuJGVycm9yLnRpbWUiPgorICAgICAgICAgICAg
ICBOb3QgYSB2YWxpZCBkYXRlITwvc3Bhbj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDx0dD52
YWx1ZSA9IHt7ZXhhbXBsZS52YWx1ZSB8IGRhdGU6ICJISDptbTpzcyJ9fTwvdHQ+PGJyLz4KKyAg
ICAgICAgPHR0Pm15Rm9ybS5pbnB1dC4kdmFsaWQgPSB7e215Rm9ybS5pbnB1dC4kdmFsaWR9fTwv
dHQ+PGJyLz4KKyAgICAgICAgPHR0Pm15Rm9ybS5pbnB1dC4kZXJyb3IgPSB7e215Rm9ybS5pbnB1
dC4kZXJyb3J9fTwvdHQ+PGJyLz4KKyAgICAgICAgPHR0Pm15Rm9ybS4kdmFsaWQgPSB7e215Rm9y
bS4kdmFsaWR9fTwvdHQ+PGJyLz4KKyAgICAgICAgPHR0Pm15Rm9ybS4kZXJyb3IucmVxdWlyZWQg
PSB7eyEhbXlGb3JtLiRlcnJvci5yZXF1aXJlZH19PC90dD48YnIvPgorICAgICA8L2Zvcm0+Cisg
ICA8L2ZpbGU+CisgICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFjdG9y
Ij4KKyAgICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQoYnkuYmluZGluZygnZXhhbXBsZS52YWx1ZSB8
IGRhdGU6ICJISDptbTpzcyInKSk7CisgICAgICB2YXIgdmFsaWQgPSBlbGVtZW50KGJ5LmJpbmRp
bmcoJ215Rm9ybS5pbnB1dC4kdmFsaWQnKSk7CisgICAgICB2YXIgaW5wdXQgPSBlbGVtZW50KGJ5
Lm1vZGVsKCdleGFtcGxlLnZhbHVlJykpOworCisgICAgICAvLyBjdXJyZW50bHkgcHJvdHJhY3Rv
ci93ZWJkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydAorICAgICAgLy8gc2VuZGluZyBrZXlzIHRvIGFs
bCBrbm93biBIVE1MNSBpbnB1dCBjb250cm9scworICAgICAgLy8gZm9yIHZhcmlvdXMgYnJvd3Nl
cnMgKGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL3Byb3RyYWN0b3IvaXNzdWVzLzU2MikuCisg
ICAgICBmdW5jdGlvbiBzZXRJbnB1dCh2YWwpIHsKKyAgICAgICAgLy8gc2V0IHRoZSB2YWx1ZSBv
ZiB0aGUgZWxlbWVudCBhbmQgZm9yY2UgdmFsaWRhdGlvbi4KKyAgICAgICAgdmFyIHNjciA9ICJ2
YXIgaXB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4YW1wbGVJbnB1dCcpOyAiICsKKyAg
ICAgICAgImlwdC52YWx1ZSA9ICciICsgdmFsICsgIic7IiArCisgICAgICAgICJhbmd1bGFyLmVs
ZW1lbnQoaXB0KS5zY29wZSgpLiRhcHBseShmdW5jdGlvbihzKSB7IHMubXlGb3JtW2lwdC5uYW1l
XS4kc2V0Vmlld1ZhbHVlKCciICsgdmFsICsgIicpOyB9KTsiOworICAgICAgICBicm93c2VyLmV4
ZWN1dGVTY3JpcHQoc2NyKTsKKyAgICAgIH0KKworICAgICAgaXQoJ3Nob3VsZCBpbml0aWFsaXpl
IHRvIG1vZGVsJywgZnVuY3Rpb24oKSB7CisgICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkp
LnRvQ29udGFpbignMTQ6NTc6MDAnKTsKKyAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSku
dG9Db250YWluKCdteUZvcm0uaW5wdXQuJHZhbGlkID0gdHJ1ZScpOworICAgICAgfSk7CisKKyAg
ICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBlbXB0eScsIGZ1bmN0aW9uKCkgeworICAgICAg
ICBzZXRJbnB1dCgnJyk7CisgICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkpLnRvRXF1YWwo
J3ZhbHVlID0nKTsKKyAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCdt
eUZvcm0uaW5wdXQuJHZhbGlkID0gZmFsc2UnKTsKKyAgICAgIH0pOworCisgICAgICBpdCgnc2hv
dWxkIGJlIGludmFsaWQgaWYgb3ZlciBtYXgnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgc2V0SW5w
dXQoJzIzOjU5OjAwJyk7CisgICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkpLnRvQ29udGFp
bignJyk7CisgICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignbXlGb3Jt
LmlucHV0LiR2YWxpZCA9IGZhbHNlJyk7CisgICAgICB9KTsKKyAgIDwvZmlsZT4KKyAgIDwvZXhh
bXBsZT4KKyAgICovCisgICd0aW1lJzogY3JlYXRlRGF0ZUlucHV0VHlwZSgndGltZScsIFRJTUVf
UkVHRVhQLAorICAgICAgY3JlYXRlRGF0ZVBhcnNlcihUSU1FX1JFR0VYUCwgWydISCcsICdtbScs
ICdzcycsICdzc3MnXSksCisgICAgICdISDptbTpzcy5zc3MnKSwKKworICAgLyoqCisgICAgKiBA
bmdkb2MgaW5wdXQKKyAgICAqIEBuYW1lIGlucHV0W3dlZWtdCisgICAgKgorICAgICogQGRlc2Ny
aXB0aW9uCisgICAgKiBJbnB1dCB3aXRoIHdlZWstb2YtdGhlLXllYXIgdmFsaWRhdGlvbiBhbmQg
dHJhbnNmb3JtYXRpb24gdG8gRGF0ZS4gSW4gYnJvd3NlcnMgdGhhdCBkbyBub3QgeWV0IHN1cHBv
cnQKKyAgICAqIHRoZSBIVE1MNSB3ZWVrIGlucHV0LCBhIHRleHQgZWxlbWVudCB3aWxsIGJlIHVz
ZWQuIEluIHRoYXQgY2FzZSwgdGhlIHRleHQgbXVzdCBiZSBlbnRlcmVkIGluIGEgdmFsaWQgSVNP
LTg2MDEKKyAgICAqIHdlZWsgZm9ybWF0ICh5eXl5LVcjIyksIGZvciBleGFtcGxlOiBgMjAxMy1X
MDJgLgorICAgICoKKyAgICAqIFRoZSBtb2RlbCBtdXN0IGFsd2F5cyBiZSBhIERhdGUgb2JqZWN0
LCBvdGhlcndpc2UgQW5ndWxhciB3aWxsIHRocm93IGFuIGVycm9yLgorICAgICogSW52YWxpZCBg
RGF0ZWAgb2JqZWN0cyAoZGF0ZXMgd2hvc2UgYGdldFRpbWUoKWAgaXMgYE5hTmApIHdpbGwgYmUg
cmVuZGVyZWQgYXMgYW4gZW1wdHkgc3RyaW5nLgorICAgICoKKyAgICAqIFRoZSB0aW1lem9uZSB0
byBiZSB1c2VkIHRvIHJlYWQvd3JpdGUgdGhlIGBEYXRlYCBpbnN0YW5jZSBpbiB0aGUgbW9kZWwg
Y2FuIGJlIGRlZmluZWQgdXNpbmcKKyAgICAqIHtAbGluayBuZy5kaXJlY3RpdmU6bmdNb2RlbE9w
dGlvbnMgbmdNb2RlbE9wdGlvbnN9LiBCeSBkZWZhdWx0LCB0aGlzIGlzIHRoZSB0aW1lem9uZSBv
ZiB0aGUgYnJvd3Nlci4KKyAgICAqCisgICAgKiBAcGFyYW0ge3N0cmluZ30gbmdNb2RlbCBBc3Np
Z25hYmxlIGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBkYXRhLWJpbmQgdG8uCisgICAgKiBAcGFyYW0g
e3N0cmluZz19IG5hbWUgUHJvcGVydHkgbmFtZSBvZiB0aGUgZm9ybSB1bmRlciB3aGljaCB0aGUg
Y29udHJvbCBpcyBwdWJsaXNoZWQuCisgICAgKiBAcGFyYW0ge3N0cmluZz19IG1pbiBTZXRzIHRo
ZSBgbWluYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpcyBsZXNz
IHRoYW4gYG1pbmAuIFRoaXMgbXVzdCBiZSBhCisgICAgKiB2YWxpZCBJU08gd2VlayBmb3JtYXQg
KHl5eXktVyMjKS4KKyAgICAqIEBwYXJhbSB7c3RyaW5nPX0gbWF4IFNldHMgdGhlIGBtYXhgIHZh
bGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBlbnRlcmVkIGlzIGdyZWF0ZXIgdGhhbiBg
bWF4YC4gVGhpcyBtdXN0IGJlCisgICAgKiBhIHZhbGlkIElTTyB3ZWVrIGZvcm1hdCAoeXl5eS1X
IyMpLgorICAgICogQHBhcmFtIHtzdHJpbmc9fSByZXF1aXJlZCBTZXRzIGByZXF1aXJlZGAgdmFs
aWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIG5vdCBlbnRlcmVkLgorICAgICogQHBh
cmFtIHtzdHJpbmc9fSBuZ1JlcXVpcmVkIEFkZHMgYHJlcXVpcmVkYCBhdHRyaWJ1dGUgYW5kIGBy
ZXF1aXJlZGAgdmFsaWRhdGlvbiBjb25zdHJhaW50IHRvCisgICAgKiAgICB0aGUgZWxlbWVudCB3
aGVuIHRoZSBuZ1JlcXVpcmVkIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRydWUuIFVzZSBgbmdS
ZXF1aXJlZGAgaW5zdGVhZCBvZgorICAgICogICAgYHJlcXVpcmVkYCB3aGVuIHlvdSB3YW50IHRv
IGRhdGEtYmluZCB0byB0aGUgYHJlcXVpcmVkYCBhdHRyaWJ1dGUuCisgICAgKiBAcGFyYW0ge3N0
cmluZz19IG5nQ2hhbmdlIEFuZ3VsYXIgZXhwcmVzc2lvbiB0byBiZSBleGVjdXRlZCB3aGVuIGlu
cHV0IGNoYW5nZXMgZHVlIHRvIHVzZXIKKyAgICAqICAgIGludGVyYWN0aW9uIHdpdGggdGhlIGlu
cHV0IGVsZW1lbnQuCisgICAgKgorICAgICogQGV4YW1wbGUKKyAgICA8ZXhhbXBsZSBuYW1lPSJ3
ZWVrLWlucHV0LWRpcmVjdGl2ZSIgbW9kdWxlPSJ3ZWVrRXhhbXBsZSI+CisgICAgPGZpbGUgbmFt
ZT0iaW5kZXguaHRtbCI+CisgICAgICA8c2NyaXB0PgorICAgICAgYW5ndWxhci5tb2R1bGUoJ3dl
ZWtFeGFtcGxlJywgW10pCisgICAgICAgIC5jb250cm9sbGVyKCdEYXRlQ29udHJvbGxlcicsIFsn
JHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7CisgICAgICAgICAgJHNjb3BlLmV4YW1wbGUgPSB7
CisgICAgICAgICAgICB2YWx1ZTogbmV3IERhdGUoMjAxMywgMCwgMykKKyAgICAgICAgICB9Owor
ICAgICAgICB9XSk7CisgICAgICA8L3NjcmlwdD4KKyAgICAgIDxmb3JtIG5hbWU9Im15Rm9ybSIg
bmctY29udHJvbGxlcj0iRGF0ZUNvbnRyb2xsZXIgYXMgZGF0ZUN0cmwiPgorICAgICAgICA8bGFi
ZWw+UGljayBhIGRhdGUgYmV0d2VlbiBpbiAyMDEzOgorICAgICAgICAgIDxpbnB1dCBpZD0iZXhh
bXBsZUlucHV0IiB0eXBlPSJ3ZWVrIiBuYW1lPSJpbnB1dCIgbmctbW9kZWw9ImV4YW1wbGUudmFs
dWUiCisgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJZWVlZLVcjIyIgbWluPSIyMDEyLVcz
MiIKKyAgICAgICAgICAgICAgICAgbWF4PSIyMDEzLVc1MiIgcmVxdWlyZWQgLz4KKyAgICAgICAg
PC9sYWJlbD4KKyAgICAgICAgPGRpdiByb2xlPSJhbGVydCI+CisgICAgICAgICAgPHNwYW4gY2xh
c3M9ImVycm9yIiBuZy1zaG93PSJteUZvcm0uaW5wdXQuJGVycm9yLnJlcXVpcmVkIj4KKyAgICAg
ICAgICAgICAgUmVxdWlyZWQhPC9zcGFuPgorICAgICAgICAgIDxzcGFuIGNsYXNzPSJlcnJvciIg
bmctc2hvdz0ibXlGb3JtLmlucHV0LiRlcnJvci53ZWVrIj4KKyAgICAgICAgICAgICAgTm90IGEg
dmFsaWQgZGF0ZSE8L3NwYW4+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8dHQ+dmFsdWUgPSB7
e2V4YW1wbGUudmFsdWUgfCBkYXRlOiAieXl5eS1Xd3cifX08L3R0Pjxici8+CisgICAgICAgIDx0
dD5teUZvcm0uaW5wdXQuJHZhbGlkID0ge3tteUZvcm0uaW5wdXQuJHZhbGlkfX08L3R0Pjxici8+
CisgICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJGVycm9yID0ge3tteUZvcm0uaW5wdXQuJGVycm9y
fX08L3R0Pjxici8+CisgICAgICAgIDx0dD5teUZvcm0uJHZhbGlkID0ge3tteUZvcm0uJHZhbGlk
fX08L3R0Pjxici8+CisgICAgICAgIDx0dD5teUZvcm0uJGVycm9yLnJlcXVpcmVkID0ge3shIW15
Rm9ybS4kZXJyb3IucmVxdWlyZWR9fTwvdHQ+PGJyLz4KKyAgICAgIDwvZm9ybT4KKyAgICA8L2Zp
bGU+CisgICAgPGZpbGUgbmFtZT0icHJvdHJhY3Rvci5qcyIgdHlwZT0icHJvdHJhY3RvciI+Cisg
ICAgICB2YXIgdmFsdWUgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ2V4YW1wbGUudmFsdWUgfCBkYXRl
OiAieXl5eS1Xd3ciJykpOworICAgICAgdmFyIHZhbGlkID0gZWxlbWVudChieS5iaW5kaW5nKCdt
eUZvcm0uaW5wdXQuJHZhbGlkJykpOworICAgICAgdmFyIGlucHV0ID0gZWxlbWVudChieS5tb2Rl
bCgnZXhhbXBsZS52YWx1ZScpKTsKKworICAgICAgLy8gY3VycmVudGx5IHByb3RyYWN0b3Ivd2Vi
ZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQKKyAgICAgIC8vIHNlbmRpbmcga2V5cyB0byBhbGwga25v
d24gSFRNTDUgaW5wdXQgY29udHJvbHMKKyAgICAgIC8vIGZvciB2YXJpb3VzIGJyb3dzZXJzICho
dHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9wcm90cmFjdG9yL2lzc3Vlcy81NjIpLgorICAgICAg
ZnVuY3Rpb24gc2V0SW5wdXQodmFsKSB7CisgICAgICAgIC8vIHNldCB0aGUgdmFsdWUgb2YgdGhl
IGVsZW1lbnQgYW5kIGZvcmNlIHZhbGlkYXRpb24uCisgICAgICAgIHZhciBzY3IgPSAidmFyIGlw
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleGFtcGxlSW5wdXQnKTsgIiArCisgICAgICAg
ICJpcHQudmFsdWUgPSAnIiArIHZhbCArICInOyIgKworICAgICAgICAiYW5ndWxhci5lbGVtZW50
KGlwdCkuc2NvcGUoKS4kYXBwbHkoZnVuY3Rpb24ocykgeyBzLm15Rm9ybVtpcHQubmFtZV0uJHNl
dFZpZXdWYWx1ZSgnIiArIHZhbCArICInKTsgfSk7IjsKKyAgICAgICAgYnJvd3Nlci5leGVjdXRl
U2NyaXB0KHNjcik7CisgICAgICB9CisKKyAgICAgIGl0KCdzaG91bGQgaW5pdGlhbGl6ZSB0byBt
b2RlbCcsIGZ1bmN0aW9uKCkgeworICAgICAgICBleHBlY3QodmFsdWUuZ2V0VGV4dCgpKS50b0Nv
bnRhaW4oJzIwMTMtVzAxJyk7CisgICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29u
dGFpbignbXlGb3JtLmlucHV0LiR2YWxpZCA9IHRydWUnKTsKKyAgICAgIH0pOworCisgICAgICBp
dCgnc2hvdWxkIGJlIGludmFsaWQgaWYgZW1wdHknLCBmdW5jdGlvbigpIHsKKyAgICAgICAgc2V0
SW5wdXQoJycpOworICAgICAgICBleHBlY3QodmFsdWUuZ2V0VGV4dCgpKS50b0VxdWFsKCd2YWx1
ZSA9Jyk7CisgICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignbXlGb3Jt
LmlucHV0LiR2YWxpZCA9IGZhbHNlJyk7CisgICAgICB9KTsKKworICAgICAgaXQoJ3Nob3VsZCBi
ZSBpbnZhbGlkIGlmIG92ZXIgbWF4JywgZnVuY3Rpb24oKSB7CisgICAgICAgIHNldElucHV0KCcy
MDE1LVcwMScpOworICAgICAgICBleHBlY3QodmFsdWUuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJycp
OworICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ215Rm9ybS5pbnB1
dC4kdmFsaWQgPSBmYWxzZScpOworICAgICAgfSk7CisgICAgPC9maWxlPgorICAgIDwvZXhhbXBs
ZT4KKyAgICAqLworICAnd2Vlayc6IGNyZWF0ZURhdGVJbnB1dFR5cGUoJ3dlZWsnLCBXRUVLX1JF
R0VYUCwgd2Vla1BhcnNlciwgJ3l5eXktV3d3JyksCisKKyAgLyoqCisgICAqIEBuZ2RvYyBpbnB1
dAorICAgKiBAbmFtZSBpbnB1dFttb250aF0KKyAgICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAq
IElucHV0IHdpdGggbW9udGggdmFsaWRhdGlvbiBhbmQgdHJhbnNmb3JtYXRpb24uIEluIGJyb3dz
ZXJzIHRoYXQgZG8gbm90IHlldCBzdXBwb3J0CisgICAqIHRoZSBIVE1MNSBtb250aCBpbnB1dCwg
YSB0ZXh0IGVsZW1lbnQgd2lsbCBiZSB1c2VkLiBJbiB0aGF0IGNhc2UsIHRoZSB0ZXh0IG11c3Qg
YmUgZW50ZXJlZCBpbiBhIHZhbGlkIElTTy04NjAxCisgICAqIG1vbnRoIGZvcm1hdCAoeXl5eS1N
TSksIGZvciBleGFtcGxlOiBgMjAwOS0wMWAuCisgICAqCisgICAqIFRoZSBtb2RlbCBtdXN0IGFs
d2F5cyBiZSBhIERhdGUgb2JqZWN0LCBvdGhlcndpc2UgQW5ndWxhciB3aWxsIHRocm93IGFuIGVy
cm9yLgorICAgKiBJbnZhbGlkIGBEYXRlYCBvYmplY3RzIChkYXRlcyB3aG9zZSBgZ2V0VGltZSgp
YCBpcyBgTmFOYCkgd2lsbCBiZSByZW5kZXJlZCBhcyBhbiBlbXB0eSBzdHJpbmcuCisgICAqIElm
IHRoZSBtb2RlbCBpcyBub3Qgc2V0IHRvIHRoZSBmaXJzdCBvZiB0aGUgbW9udGgsIHRoZSBuZXh0
IHZpZXcgdG8gbW9kZWwgdXBkYXRlIHdpbGwgc2V0IGl0CisgICAqIHRvIHRoZSBmaXJzdCBvZiB0
aGUgbW9udGguCisgICAqCisgICAqIFRoZSB0aW1lem9uZSB0byBiZSB1c2VkIHRvIHJlYWQvd3Jp
dGUgdGhlIGBEYXRlYCBpbnN0YW5jZSBpbiB0aGUgbW9kZWwgY2FuIGJlIGRlZmluZWQgdXNpbmcK
KyAgICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ01vZGVsT3B0aW9ucyBuZ01vZGVsT3B0aW9uc30u
IEJ5IGRlZmF1bHQsIHRoaXMgaXMgdGhlIHRpbWV6b25lIG9mIHRoZSBicm93c2VyLgorICAgKgor
ICAgKiBAcGFyYW0ge3N0cmluZ30gbmdNb2RlbCBBc3NpZ25hYmxlIGFuZ3VsYXIgZXhwcmVzc2lv
biB0byBkYXRhLWJpbmQgdG8uCisgICAqIEBwYXJhbSB7c3RyaW5nPX0gbmFtZSBQcm9wZXJ0eSBu
YW1lIG9mIHRoZSBmb3JtIHVuZGVyIHdoaWNoIHRoZSBjb250cm9sIGlzIHB1Ymxpc2hlZC4KKyAg
ICogQHBhcmFtIHtzdHJpbmc9fSBtaW4gU2V0cyB0aGUgYG1pbmAgdmFsaWRhdGlvbiBlcnJvciBr
ZXkgaWYgdGhlIHZhbHVlIGVudGVyZWQgaXMgbGVzcyB0aGFuIGBtaW5gLiBUaGlzIG11c3QgYmUK
KyAgICogYSB2YWxpZCBJU08gbW9udGggZm9ybWF0ICh5eXl5LU1NKS4KKyAgICogQHBhcmFtIHtz
dHJpbmc9fSBtYXggU2V0cyB0aGUgYG1heGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZh
bHVlIGVudGVyZWQgaXMgZ3JlYXRlciB0aGFuIGBtYXhgLiBUaGlzIG11c3QKKyAgICogYmUgYSB2
YWxpZCBJU08gbW9udGggZm9ybWF0ICh5eXl5LU1NKS4KKyAgICogQHBhcmFtIHtzdHJpbmc9fSBy
ZXF1aXJlZCBTZXRzIGByZXF1aXJlZGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVl
IGlzIG5vdCBlbnRlcmVkLgorICAgKiBAcGFyYW0ge3N0cmluZz19IG5nUmVxdWlyZWQgQWRkcyBg
cmVxdWlyZWRgIGF0dHJpYnV0ZSBhbmQgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGNvbnN0cmFpbnQg
dG8KKyAgICogICAgdGhlIGVsZW1lbnQgd2hlbiB0aGUgbmdSZXF1aXJlZCBleHByZXNzaW9uIGV2
YWx1YXRlcyB0byB0cnVlLiBVc2UgYG5nUmVxdWlyZWRgIGluc3RlYWQgb2YKKyAgICogICAgYHJl
cXVpcmVkYCB3aGVuIHlvdSB3YW50IHRvIGRhdGEtYmluZCB0byB0aGUgYHJlcXVpcmVkYCBhdHRy
aWJ1dGUuCisgICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdDaGFuZ2UgQW5ndWxhciBleHByZXNzaW9u
IHRvIGJlIGV4ZWN1dGVkIHdoZW4gaW5wdXQgY2hhbmdlcyBkdWUgdG8gdXNlcgorICAgKiAgICBp
bnRlcmFjdGlvbiB3aXRoIHRoZSBpbnB1dCBlbGVtZW50LgorICAgKgorICAgKiBAZXhhbXBsZQor
ICAgPGV4YW1wbGUgbmFtZT0ibW9udGgtaW5wdXQtZGlyZWN0aXZlIiBtb2R1bGU9Im1vbnRoRXhh
bXBsZSI+CisgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgPHNjcmlwdD4KKyAgICAg
IGFuZ3VsYXIubW9kdWxlKCdtb250aEV4YW1wbGUnLCBbXSkKKyAgICAgICAgLmNvbnRyb2xsZXIo
J0RhdGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHsKKyAgICAgICAg
ICAkc2NvcGUuZXhhbXBsZSA9IHsKKyAgICAgICAgICAgIHZhbHVlOiBuZXcgRGF0ZSgyMDEzLCA5
LCAxKQorICAgICAgICAgIH07CisgICAgICAgIH1dKTsKKyAgICAgPC9zY3JpcHQ+CisgICAgIDxm
b3JtIG5hbWU9Im15Rm9ybSIgbmctY29udHJvbGxlcj0iRGF0ZUNvbnRyb2xsZXIgYXMgZGF0ZUN0
cmwiPgorICAgICAgIDxsYWJlbCBmb3I9ImV4YW1wbGVJbnB1dCI+UGljayBhIG1vbnRoIGluIDIw
MTM6PC9sYWJlbD4KKyAgICAgICA8aW5wdXQgaWQ9ImV4YW1wbGVJbnB1dCIgdHlwZT0ibW9udGgi
IG5hbWU9ImlucHV0IiBuZy1tb2RlbD0iZXhhbXBsZS52YWx1ZSIKKyAgICAgICAgICBwbGFjZWhv
bGRlcj0ieXl5eS1NTSIgbWluPSIyMDEzLTAxIiBtYXg9IjIwMTMtMTIiIHJlcXVpcmVkIC8+Cisg
ICAgICAgPGRpdiByb2xlPSJhbGVydCI+CisgICAgICAgICA8c3BhbiBjbGFzcz0iZXJyb3IiIG5n
LXNob3c9Im15Rm9ybS5pbnB1dC4kZXJyb3IucmVxdWlyZWQiPgorICAgICAgICAgICAgUmVxdWly
ZWQhPC9zcGFuPgorICAgICAgICAgPHNwYW4gY2xhc3M9ImVycm9yIiBuZy1zaG93PSJteUZvcm0u
aW5wdXQuJGVycm9yLm1vbnRoIj4KKyAgICAgICAgICAgIE5vdCBhIHZhbGlkIG1vbnRoITwvc3Bh
bj4KKyAgICAgICA8L2Rpdj4KKyAgICAgICA8dHQ+dmFsdWUgPSB7e2V4YW1wbGUudmFsdWUgfCBk
YXRlOiAieXl5eS1NTSJ9fTwvdHQ+PGJyLz4KKyAgICAgICA8dHQ+bXlGb3JtLmlucHV0LiR2YWxp
ZCA9IHt7bXlGb3JtLmlucHV0LiR2YWxpZH19PC90dD48YnIvPgorICAgICAgIDx0dD5teUZvcm0u
aW5wdXQuJGVycm9yID0ge3tteUZvcm0uaW5wdXQuJGVycm9yfX08L3R0Pjxici8+CisgICAgICAg
PHR0Pm15Rm9ybS4kdmFsaWQgPSB7e215Rm9ybS4kdmFsaWR9fTwvdHQ+PGJyLz4KKyAgICAgICA8
dHQ+bXlGb3JtLiRlcnJvci5yZXF1aXJlZCA9IHt7ISFteUZvcm0uJGVycm9yLnJlcXVpcmVkfX08
L3R0Pjxici8+CisgICAgIDwvZm9ybT4KKyAgIDwvZmlsZT4KKyAgIDxmaWxlIG5hbWU9InByb3Ry
YWN0b3IuanMiIHR5cGU9InByb3RyYWN0b3IiPgorICAgICAgdmFyIHZhbHVlID0gZWxlbWVudChi
eS5iaW5kaW5nKCdleGFtcGxlLnZhbHVlIHwgZGF0ZTogInl5eXktTU0iJykpOworICAgICAgdmFy
IHZhbGlkID0gZWxlbWVudChieS5iaW5kaW5nKCdteUZvcm0uaW5wdXQuJHZhbGlkJykpOworICAg
ICAgdmFyIGlucHV0ID0gZWxlbWVudChieS5tb2RlbCgnZXhhbXBsZS52YWx1ZScpKTsKKworICAg
ICAgLy8gY3VycmVudGx5IHByb3RyYWN0b3Ivd2ViZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQKKyAg
ICAgIC8vIHNlbmRpbmcga2V5cyB0byBhbGwga25vd24gSFRNTDUgaW5wdXQgY29udHJvbHMKKyAg
ICAgIC8vIGZvciB2YXJpb3VzIGJyb3dzZXJzIChodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9w
cm90cmFjdG9yL2lzc3Vlcy81NjIpLgorICAgICAgZnVuY3Rpb24gc2V0SW5wdXQodmFsKSB7Cisg
ICAgICAgIC8vIHNldCB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQgYW5kIGZvcmNlIHZhbGlkYXRp
b24uCisgICAgICAgIHZhciBzY3IgPSAidmFyIGlwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdleGFtcGxlSW5wdXQnKTsgIiArCisgICAgICAgICJpcHQudmFsdWUgPSAnIiArIHZhbCArICIn
OyIgKworICAgICAgICAiYW5ndWxhci5lbGVtZW50KGlwdCkuc2NvcGUoKS4kYXBwbHkoZnVuY3Rp
b24ocykgeyBzLm15Rm9ybVtpcHQubmFtZV0uJHNldFZpZXdWYWx1ZSgnIiArIHZhbCArICInKTsg
fSk7IjsKKyAgICAgICAgYnJvd3Nlci5leGVjdXRlU2NyaXB0KHNjcik7CisgICAgICB9CisKKyAg
ICAgIGl0KCdzaG91bGQgaW5pdGlhbGl6ZSB0byBtb2RlbCcsIGZ1bmN0aW9uKCkgeworICAgICAg
ICBleHBlY3QodmFsdWUuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJzIwMTMtMTAnKTsKKyAgICAgICAg
ZXhwZWN0KHZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCdteUZvcm0uaW5wdXQuJHZhbGlkID0g
dHJ1ZScpOworICAgICAgfSk7CisKKyAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBlbXB0
eScsIGZ1bmN0aW9uKCkgeworICAgICAgICBzZXRJbnB1dCgnJyk7CisgICAgICAgIGV4cGVjdCh2
YWx1ZS5nZXRUZXh0KCkpLnRvRXF1YWwoJ3ZhbHVlID0nKTsKKyAgICAgICAgZXhwZWN0KHZhbGlk
LmdldFRleHQoKSkudG9Db250YWluKCdteUZvcm0uaW5wdXQuJHZhbGlkID0gZmFsc2UnKTsKKyAg
ICAgIH0pOworCisgICAgICBpdCgnc2hvdWxkIGJlIGludmFsaWQgaWYgb3ZlciBtYXgnLCBmdW5j
dGlvbigpIHsKKyAgICAgICAgc2V0SW5wdXQoJzIwMTUtMDEnKTsKKyAgICAgICAgZXhwZWN0KHZh
bHVlLmdldFRleHQoKSkudG9Db250YWluKCcnKTsKKyAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRl
eHQoKSkudG9Db250YWluKCdteUZvcm0uaW5wdXQuJHZhbGlkID0gZmFsc2UnKTsKKyAgICAgIH0p
OworICAgPC9maWxlPgorICAgPC9leGFtcGxlPgorICAgKi8KKyAgJ21vbnRoJzogY3JlYXRlRGF0
ZUlucHV0VHlwZSgnbW9udGgnLCBNT05USF9SRUdFWFAsCisgICAgIGNyZWF0ZURhdGVQYXJzZXIo
TU9OVEhfUkVHRVhQLCBbJ3l5eXknLCAnTU0nXSksCisgICAgICd5eXl5LU1NJyksCisKKyAgLyoq
CisgICAqIEBuZ2RvYyBpbnB1dAorICAgKiBAbmFtZSBpbnB1dFtudW1iZXJdCisgICAqCisgICAq
IEBkZXNjcmlwdGlvbgorICAgKiBUZXh0IGlucHV0IHdpdGggbnVtYmVyIHZhbGlkYXRpb24gYW5k
IHRyYW5zZm9ybWF0aW9uLiBTZXRzIHRoZSBgbnVtYmVyYCB2YWxpZGF0aW9uCisgICAqIGVycm9y
IGlmIG5vdCBhIHZhbGlkIG51bWJlci4KKyAgICoKKyAgICogPGRpdiBjbGFzcz0iYWxlcnQgYWxl
cnQtd2FybmluZyI+CisgICAqIFRoZSBtb2RlbCBtdXN0IGFsd2F5cyBiZSBvZiB0eXBlIGBudW1i
ZXJgIG90aGVyd2lzZSBBbmd1bGFyIHdpbGwgdGhyb3cgYW4gZXJyb3IuCisgICAqIEJlIGF3YXJl
IHRoYXQgYSBzdHJpbmcgY29udGFpbmluZyBhIG51bWJlciBpcyBub3QgZW5vdWdoLiBTZWUgdGhl
IHtAbGluayBuZ01vZGVsOm51bWZtdH0KKyAgICogZXJyb3IgZG9jcyBmb3IgbW9yZSBpbmZvcm1h
dGlvbiBhbmQgYW4gZXhhbXBsZSBvZiBob3cgdG8gY29udmVydCB5b3VyIG1vZGVsIGlmIG5lY2Vz
c2FyeS4KKyAgICogPC9kaXY+CisgICAqCisgICAqICMjIElzc3VlcyB3aXRoIEhUTUw1IGNvbnN0
cmFpbnQgdmFsaWRhdGlvbgorICAgKgorICAgKiBJbiBicm93c2VycyB0aGF0IGZvbGxvdyB0aGUK
KyAgICogW0hUTUw1IHNwZWNpZmljYXRpb25dKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcv
bXVsdGlwYWdlL2Zvcm1zLmh0bWwjbnVtYmVyLXN0YXRlLSUyOHR5cGU9bnVtYmVyJTI5KSwKKyAg
ICogYGlucHV0W251bWJlcl1gIGRvZXMgbm90IHdvcmsgYXMgZXhwZWN0ZWQgd2l0aCB7QGxpbmsg
bmdNb2RlbE9wdGlvbnMgYG5nTW9kZWxPcHRpb25zLmFsbG93SW52YWxpZGB9LgorICAgKiBJZiBh
IG5vbi1udW1iZXIgaXMgZW50ZXJlZCBpbiB0aGUgaW5wdXQsIHRoZSBicm93c2VyIHdpbGwgcmVw
b3J0IHRoZSB2YWx1ZSBhcyBhbiBlbXB0eSBzdHJpbmcsCisgICAqIHdoaWNoIG1lYW5zIHRoZSB2
aWV3IC8gbW9kZWwgdmFsdWVzIGluIGBuZ01vZGVsYCBhbmQgc3Vic2VxdWVudGx5IHRoZSBzY29w
ZSB2YWx1ZQorICAgKiB3aWxsIGFsc28gYmUgYW4gZW1wdHkgc3RyaW5nLgorICAgKgorICAgKgor
ICAgKiBAcGFyYW0ge3N0cmluZ30gbmdNb2RlbCBBc3NpZ25hYmxlIGFuZ3VsYXIgZXhwcmVzc2lv
biB0byBkYXRhLWJpbmQgdG8uCisgICAqIEBwYXJhbSB7c3RyaW5nPX0gbmFtZSBQcm9wZXJ0eSBu
YW1lIG9mIHRoZSBmb3JtIHVuZGVyIHdoaWNoIHRoZSBjb250cm9sIGlzIHB1Ymxpc2hlZC4KKyAg
ICogQHBhcmFtIHtzdHJpbmc9fSBtaW4gU2V0cyB0aGUgYG1pbmAgdmFsaWRhdGlvbiBlcnJvciBr
ZXkgaWYgdGhlIHZhbHVlIGVudGVyZWQgaXMgbGVzcyB0aGFuIGBtaW5gLgorICAgKiBAcGFyYW0g
e3N0cmluZz19IG1heCBTZXRzIHRoZSBgbWF4YCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUg
dmFsdWUgZW50ZXJlZCBpcyBncmVhdGVyIHRoYW4gYG1heGAuCisgICAqIEBwYXJhbSB7c3RyaW5n
PX0gcmVxdWlyZWQgU2V0cyBgcmVxdWlyZWRgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2
YWx1ZSBpcyBub3QgZW50ZXJlZC4KKyAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ1JlcXVpcmVkIEFk
ZHMgYHJlcXVpcmVkYCBhdHRyaWJ1dGUgYW5kIGByZXF1aXJlZGAgdmFsaWRhdGlvbiBjb25zdHJh
aW50IHRvCisgICAqICAgIHRoZSBlbGVtZW50IHdoZW4gdGhlIG5nUmVxdWlyZWQgZXhwcmVzc2lv
biBldmFsdWF0ZXMgdG8gdHJ1ZS4gVXNlIGBuZ1JlcXVpcmVkYCBpbnN0ZWFkIG9mCisgICAqICAg
IGByZXF1aXJlZGAgd2hlbiB5b3Ugd2FudCB0byBkYXRhLWJpbmQgdG8gdGhlIGByZXF1aXJlZGAg
YXR0cmlidXRlLgorICAgKiBAcGFyYW0ge251bWJlcj19IG5nTWlubGVuZ3RoIFNldHMgYG1pbmxl
bmd0aGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIHNob3J0ZXIgdGhhbgor
ICAgKiAgICBtaW5sZW5ndGguCisgICAqIEBwYXJhbSB7bnVtYmVyPX0gbmdNYXhsZW5ndGggU2V0
cyBgbWF4bGVuZ3RoYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgbG9uZ2Vy
IHRoYW4KKyAgICogICAgbWF4bGVuZ3RoLiBTZXR0aW5nIHRoZSBhdHRyaWJ1dGUgdG8gYSBuZWdh
dGl2ZSBvciBub24tbnVtZXJpYyB2YWx1ZSwgYWxsb3dzIHZpZXcgdmFsdWVzIG9mCisgICAqICAg
IGFueSBsZW5ndGguCisgICAqIEBwYXJhbSB7c3RyaW5nPX0gcGF0dGVybiBTaW1pbGFyIHRvIGBu
Z1BhdHRlcm5gIGV4Y2VwdCB0aGF0IHRoZSBhdHRyaWJ1dGUgdmFsdWUgaXMgdGhlIGFjdHVhbCBz
dHJpbmcKKyAgICogICAgdGhhdCBjb250YWlucyB0aGUgcmVndWxhciBleHByZXNzaW9uIGJvZHkg
dGhhdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgKiAgICBh
cyBpbiB0aGUgbmdQYXR0ZXJuIGRpcmVjdGl2ZS4KKyAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ1Bh
dHRlcm4gU2V0cyBgcGF0dGVybmAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIG5nTW9kZWwg
dmFsdWUgZG9lcyBub3QgbWF0Y2gKKyAgICogICAgYSBSZWdFeHAgZm91bmQgYnkgZXZhbHVhdGlu
ZyB0aGUgQW5ndWxhciBleHByZXNzaW9uIGdpdmVuIGluIHRoZSBhdHRyaWJ1dGUgdmFsdWUuCisg
ICAqICAgIElmIHRoZSBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBhIFJlZ0V4cCBvYmplY3QsIHRo
ZW4gdGhpcyBpcyB1c2VkIGRpcmVjdGx5LgorICAgKiAgICBJZiB0aGUgZXhwcmVzc2lvbiBldmFs
dWF0ZXMgdG8gYSBzdHJpbmcsIHRoZW4gaXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBSZWdFeHAK
KyAgICogICAgYWZ0ZXIgd3JhcHBpbmcgaXQgaW4gYF5gIGFuZCBgJGAgY2hhcmFjdGVycy4gRm9y
IGluc3RhbmNlLCBgImFiYyJgIHdpbGwgYmUgY29udmVydGVkIHRvCisgICAqICAgIGBuZXcgUmVn
RXhwKCdeYWJjJCcpYC48YnIgLz4KKyAgICogICAgKipOb3RlOioqIEF2b2lkIHVzaW5nIHRoZSBg
Z2AgZmxhZyBvbiB0aGUgUmVnRXhwLCBhcyBpdCB3aWxsIGNhdXNlIGVhY2ggc3VjY2Vzc2l2ZSBz
ZWFyY2ggdG8KKyAgICogICAgc3RhcnQgYXQgdGhlIGluZGV4IG9mIHRoZSBsYXN0IHNlYXJjaCdz
IG1hdGNoLCB0aHVzIG5vdCB0YWtpbmcgdGhlIHdob2xlIGlucHV0IHZhbHVlIGludG8KKyAgICog
ICAgYWNjb3VudC4KKyAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ0NoYW5nZSBBbmd1bGFyIGV4cHJl
c3Npb24gdG8gYmUgZXhlY3V0ZWQgd2hlbiBpbnB1dCBjaGFuZ2VzIGR1ZSB0byB1c2VyCisgICAq
ICAgIGludGVyYWN0aW9uIHdpdGggdGhlIGlucHV0IGVsZW1lbnQuCisgICAqCisgICAqIEBleGFt
cGxlCisgICAgICA8ZXhhbXBsZSBuYW1lPSJudW1iZXItaW5wdXQtZGlyZWN0aXZlIiBtb2R1bGU9
Im51bWJlckV4YW1wbGUiPgorICAgICAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAg
ICAgIDxzY3JpcHQ+CisgICAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCdudW1iZXJFeGFtcGxlJywg
W10pCisgICAgICAgICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2Nv
cGUnLCBmdW5jdGlvbigkc2NvcGUpIHsKKyAgICAgICAgICAgICAgICRzY29wZS5leGFtcGxlID0g
eworICAgICAgICAgICAgICAgICB2YWx1ZTogMTIKKyAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICAgfV0pOworICAgICAgICAgPC9zY3JpcHQ+CisgICAgICAgICA8Zm9ybSBuYW1lPSJteUZv
cm0iIG5nLWNvbnRyb2xsZXI9IkV4YW1wbGVDb250cm9sbGVyIj4KKyAgICAgICAgICAgPGxhYmVs
Pk51bWJlcjoKKyAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBuYW1lPSJpbnB1dCIg
bmctbW9kZWw9ImV4YW1wbGUudmFsdWUiCisgICAgICAgICAgICAgICAgICAgIG1pbj0iMCIgbWF4
PSI5OSIgcmVxdWlyZWQ+CisgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgICAgPGRpdiByb2xl
PSJhbGVydCI+CisgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVycm9yIiBuZy1zaG93PSJteUZv
cm0uaW5wdXQuJGVycm9yLnJlcXVpcmVkIj4KKyAgICAgICAgICAgICAgIFJlcXVpcmVkITwvc3Bh
bj4KKyAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZXJyb3IiIG5nLXNob3c9Im15Rm9ybS5pbnB1
dC4kZXJyb3IubnVtYmVyIj4KKyAgICAgICAgICAgICAgIE5vdCB2YWxpZCBudW1iZXIhPC9zcGFu
PgorICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgPHR0PnZhbHVlID0ge3tleGFtcGxlLnZh
bHVlfX08L3R0Pjxici8+CisgICAgICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJHZhbGlkID0ge3tt
eUZvcm0uaW5wdXQuJHZhbGlkfX08L3R0Pjxici8+CisgICAgICAgICAgIDx0dD5teUZvcm0uaW5w
dXQuJGVycm9yID0ge3tteUZvcm0uaW5wdXQuJGVycm9yfX08L3R0Pjxici8+CisgICAgICAgICAg
IDx0dD5teUZvcm0uJHZhbGlkID0ge3tteUZvcm0uJHZhbGlkfX08L3R0Pjxici8+CisgICAgICAg
ICAgIDx0dD5teUZvcm0uJGVycm9yLnJlcXVpcmVkID0ge3shIW15Rm9ybS4kZXJyb3IucmVxdWly
ZWR9fTwvdHQ+PGJyLz4KKyAgICAgICAgICA8L2Zvcm0+CisgICAgICAgIDwvZmlsZT4KKyAgICAg
ICAgPGZpbGUgbmFtZT0icHJvdHJhY3Rvci5qcyIgdHlwZT0icHJvdHJhY3RvciI+CisgICAgICAg
ICAgdmFyIHZhbHVlID0gZWxlbWVudChieS5iaW5kaW5nKCdleGFtcGxlLnZhbHVlJykpOworICAg
ICAgICAgIHZhciB2YWxpZCA9IGVsZW1lbnQoYnkuYmluZGluZygnbXlGb3JtLmlucHV0LiR2YWxp
ZCcpKTsKKyAgICAgICAgICB2YXIgaW5wdXQgPSBlbGVtZW50KGJ5Lm1vZGVsKCdleGFtcGxlLnZh
bHVlJykpOworCisgICAgICAgICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIHRvIG1vZGVsJywgZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICBleHBlY3QodmFsdWUuZ2V0VGV4dCgpKS50b0NvbnRhaW4o
JzEyJyk7CisgICAgICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ3Ry
dWUnKTsKKyAgICAgICAgICB9KTsKKworICAgICAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBp
ZiBlbXB0eScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaW5wdXQuY2xlYXIoKTsKKyAgICAg
ICAgICAgIGlucHV0LnNlbmRLZXlzKCcnKTsKKyAgICAgICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRU
ZXh0KCkpLnRvRXF1YWwoJ3ZhbHVlID0nKTsKKyAgICAgICAgICAgIGV4cGVjdCh2YWxpZC5nZXRU
ZXh0KCkpLnRvQ29udGFpbignZmFsc2UnKTsKKyAgICAgICAgICB9KTsKKworICAgICAgICAgIGl0
KCdzaG91bGQgYmUgaW52YWxpZCBpZiBvdmVyIG1heCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgaW5wdXQuY2xlYXIoKTsKKyAgICAgICAgICAgIGlucHV0LnNlbmRLZXlzKCcxMjMnKTsKKyAg
ICAgICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkpLnRvRXF1YWwoJ3ZhbHVlID0nKTsKKyAg
ICAgICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignZmFsc2UnKTsKKyAg
ICAgICAgICB9KTsKKyAgICAgICAgPC9maWxlPgorICAgICAgPC9leGFtcGxlPgorICAgKi8KKyAg
J251bWJlcic6IG51bWJlcklucHV0VHlwZSwKKworCisgIC8qKgorICAgKiBAbmdkb2MgaW5wdXQK
KyAgICogQG5hbWUgaW5wdXRbdXJsXQorICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAgICogVGV4
dCBpbnB1dCB3aXRoIFVSTCB2YWxpZGF0aW9uLiBTZXRzIHRoZSBgdXJsYCB2YWxpZGF0aW9uIGVy
cm9yIGtleSBpZiB0aGUgY29udGVudCBpcyBub3QgYQorICAgKiB2YWxpZCBVUkwuCisgICAqCisg
ICAqIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LXdhcm5pbmciPgorICAgKiAqKk5vdGU6KiogYGlu
cHV0W3VybF1gIHVzZXMgYSByZWdleCB0byB2YWxpZGF0ZSB1cmxzIHRoYXQgaXMgZGVyaXZlZCBm
cm9tIHRoZSByZWdleAorICAgKiB1c2VkIGluIENocm9taXVtLiBJZiB5b3UgbmVlZCBzdHJpY3Rl
ciB2YWxpZGF0aW9uLCB5b3UgY2FuIHVzZSBgbmctcGF0dGVybmAgb3IgbW9kaWZ5CisgICAqIHRo
ZSBidWlsdC1pbiB2YWxpZGF0b3JzIChzZWUgdGhlIHtAbGluayBndWlkZS9mb3JtcyBGb3JtcyBn
dWlkZX0pCisgICAqIDwvZGl2PgorICAgKgorICAgKiBAcGFyYW0ge3N0cmluZ30gbmdNb2RlbCBB
c3NpZ25hYmxlIGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBkYXRhLWJpbmQgdG8uCisgICAqIEBwYXJh
bSB7c3RyaW5nPX0gbmFtZSBQcm9wZXJ0eSBuYW1lIG9mIHRoZSBmb3JtIHVuZGVyIHdoaWNoIHRo
ZSBjb250cm9sIGlzIHB1Ymxpc2hlZC4KKyAgICogQHBhcmFtIHtzdHJpbmc9fSByZXF1aXJlZCBT
ZXRzIGByZXF1aXJlZGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIG5vdCBl
bnRlcmVkLgorICAgKiBAcGFyYW0ge3N0cmluZz19IG5nUmVxdWlyZWQgQWRkcyBgcmVxdWlyZWRg
IGF0dHJpYnV0ZSBhbmQgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGNvbnN0cmFpbnQgdG8KKyAgICog
ICAgdGhlIGVsZW1lbnQgd2hlbiB0aGUgbmdSZXF1aXJlZCBleHByZXNzaW9uIGV2YWx1YXRlcyB0
byB0cnVlLiBVc2UgYG5nUmVxdWlyZWRgIGluc3RlYWQgb2YKKyAgICogICAgYHJlcXVpcmVkYCB3
aGVuIHlvdSB3YW50IHRvIGRhdGEtYmluZCB0byB0aGUgYHJlcXVpcmVkYCBhdHRyaWJ1dGUuCisg
ICAqIEBwYXJhbSB7bnVtYmVyPX0gbmdNaW5sZW5ndGggU2V0cyBgbWlubGVuZ3RoYCB2YWxpZGF0
aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgc2hvcnRlciB0aGFuCisgICAqICAgIG1pbmxl
bmd0aC4KKyAgICogQHBhcmFtIHtudW1iZXI9fSBuZ01heGxlbmd0aCBTZXRzIGBtYXhsZW5ndGhg
IHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBsb25nZXIgdGhhbgorICAgKiAg
ICBtYXhsZW5ndGguIFNldHRpbmcgdGhlIGF0dHJpYnV0ZSB0byBhIG5lZ2F0aXZlIG9yIG5vbi1u
dW1lcmljIHZhbHVlLCBhbGxvd3MgdmlldyB2YWx1ZXMgb2YKKyAgICogICAgYW55IGxlbmd0aC4K
KyAgICogQHBhcmFtIHtzdHJpbmc9fSBwYXR0ZXJuIFNpbWlsYXIgdG8gYG5nUGF0dGVybmAgZXhj
ZXB0IHRoYXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBpcyB0aGUgYWN0dWFsIHN0cmluZworICAgKiAg
ICB0aGF0IGNvbnRhaW5zIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gYm9keSB0aGF0IHdpbGwgYmUg
Y29udmVydGVkIHRvIGEgcmVndWxhciBleHByZXNzaW9uCisgICAqICAgIGFzIGluIHRoZSBuZ1Bh
dHRlcm4gZGlyZWN0aXZlLgorICAgKiBAcGFyYW0ge3N0cmluZz19IG5nUGF0dGVybiBTZXRzIGBw
YXR0ZXJuYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgbmdNb2RlbCB2YWx1ZSBkb2VzIG5v
dCBtYXRjaAorICAgKiAgICBhIFJlZ0V4cCBmb3VuZCBieSBldmFsdWF0aW5nIHRoZSBBbmd1bGFy
IGV4cHJlc3Npb24gZ2l2ZW4gaW4gdGhlIGF0dHJpYnV0ZSB2YWx1ZS4KKyAgICogICAgSWYgdGhl
IGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGEgUmVnRXhwIG9iamVjdCwgdGhlbiB0aGlzIGlzIHVz
ZWQgZGlyZWN0bHkuCisgICAqICAgIElmIHRoZSBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBhIHN0
cmluZywgdGhlbiBpdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIFJlZ0V4cAorICAgKiAgICBhZnRl
ciB3cmFwcGluZyBpdCBpbiBgXmAgYW5kIGAkYCBjaGFyYWN0ZXJzLiBGb3IgaW5zdGFuY2UsIGAi
YWJjImAgd2lsbCBiZSBjb252ZXJ0ZWQgdG8KKyAgICogICAgYG5ldyBSZWdFeHAoJ15hYmMkJylg
LjxiciAvPgorICAgKiAgICAqKk5vdGU6KiogQXZvaWQgdXNpbmcgdGhlIGBnYCBmbGFnIG9uIHRo
ZSBSZWdFeHAsIGFzIGl0IHdpbGwgY2F1c2UgZWFjaCBzdWNjZXNzaXZlIHNlYXJjaCB0bworICAg
KiAgICBzdGFydCBhdCB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgc2VhcmNoJ3MgbWF0Y2gsIHRodXMg
bm90IHRha2luZyB0aGUgd2hvbGUgaW5wdXQgdmFsdWUgaW50bworICAgKiAgICBhY2NvdW50Lgor
ICAgKiBAcGFyYW0ge3N0cmluZz19IG5nQ2hhbmdlIEFuZ3VsYXIgZXhwcmVzc2lvbiB0byBiZSBl
eGVjdXRlZCB3aGVuIGlucHV0IGNoYW5nZXMgZHVlIHRvIHVzZXIKKyAgICogICAgaW50ZXJhY3Rp
b24gd2l0aCB0aGUgaW5wdXQgZWxlbWVudC4KKyAgICoKKyAgICogQGV4YW1wbGUKKyAgICAgIDxl
eGFtcGxlIG5hbWU9InVybC1pbnB1dC1kaXJlY3RpdmUiIG1vZHVsZT0idXJsRXhhbXBsZSI+Cisg
ICAgICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICAgICAgPHNjcmlwdD4KKyAgICAg
ICAgICAgYW5ndWxhci5tb2R1bGUoJ3VybEV4YW1wbGUnLCBbXSkKKyAgICAgICAgICAgICAuY29u
dHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkg
eworICAgICAgICAgICAgICAgJHNjb3BlLnVybCA9IHsKKyAgICAgICAgICAgICAgICAgdGV4dDog
J2h0dHA6Ly9nb29nbGUuY29tJworICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICB9XSk7
CisgICAgICAgICA8L3NjcmlwdD4KKyAgICAgICAgIDxmb3JtIG5hbWU9Im15Rm9ybSIgbmctY29u
dHJvbGxlcj0iRXhhbXBsZUNvbnRyb2xsZXIiPgorICAgICAgICAgICA8bGFiZWw+VVJMOgorICAg
ICAgICAgICAgIDxpbnB1dCB0eXBlPSJ1cmwiIG5hbWU9ImlucHV0IiBuZy1tb2RlbD0idXJsLnRl
eHQiIHJlcXVpcmVkPgorICAgICAgICAgICA8bGFiZWw+CisgICAgICAgICAgIDxkaXYgcm9sZT0i
YWxlcnQiPgorICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlcnJvciIgbmctc2hvdz0ibXlGb3Jt
LmlucHV0LiRlcnJvci5yZXF1aXJlZCI+CisgICAgICAgICAgICAgICBSZXF1aXJlZCE8L3NwYW4+
CisgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVycm9yIiBuZy1zaG93PSJteUZvcm0uaW5wdXQu
JGVycm9yLnVybCI+CisgICAgICAgICAgICAgICBOb3QgdmFsaWQgdXJsITwvc3Bhbj4KKyAgICAg
ICAgICAgPC9kaXY+CisgICAgICAgICAgIDx0dD50ZXh0ID0ge3t1cmwudGV4dH19PC90dD48YnIv
PgorICAgICAgICAgICA8dHQ+bXlGb3JtLmlucHV0LiR2YWxpZCA9IHt7bXlGb3JtLmlucHV0LiR2
YWxpZH19PC90dD48YnIvPgorICAgICAgICAgICA8dHQ+bXlGb3JtLmlucHV0LiRlcnJvciA9IHt7
bXlGb3JtLmlucHV0LiRlcnJvcn19PC90dD48YnIvPgorICAgICAgICAgICA8dHQ+bXlGb3JtLiR2
YWxpZCA9IHt7bXlGb3JtLiR2YWxpZH19PC90dD48YnIvPgorICAgICAgICAgICA8dHQ+bXlGb3Jt
LiRlcnJvci5yZXF1aXJlZCA9IHt7ISFteUZvcm0uJGVycm9yLnJlcXVpcmVkfX08L3R0Pjxici8+
CisgICAgICAgICAgIDx0dD5teUZvcm0uJGVycm9yLnVybCA9IHt7ISFteUZvcm0uJGVycm9yLnVy
bH19PC90dD48YnIvPgorICAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgPC9maWxlPgorICAgICAg
ICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFjdG9yIj4KKyAgICAgICAg
ICB2YXIgdGV4dCA9IGVsZW1lbnQoYnkuYmluZGluZygndXJsLnRleHQnKSk7CisgICAgICAgICAg
dmFyIHZhbGlkID0gZWxlbWVudChieS5iaW5kaW5nKCdteUZvcm0uaW5wdXQuJHZhbGlkJykpOwor
ICAgICAgICAgIHZhciBpbnB1dCA9IGVsZW1lbnQoYnkubW9kZWwoJ3VybC50ZXh0JykpOworCisg
ICAgICAgICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIHRvIG1vZGVsJywgZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICBleHBlY3QodGV4dC5nZXRUZXh0KCkpLnRvQ29udGFpbignaHR0cDovL2dvb2ds
ZS5jb20nKTsKKyAgICAgICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbign
dHJ1ZScpOworICAgICAgICAgIH0pOworCisgICAgICAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlk
IGlmIGVtcHR5JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpbnB1dC5jbGVhcigpOworICAg
ICAgICAgICAgaW5wdXQuc2VuZEtleXMoJycpOworCisgICAgICAgICAgICBleHBlY3QodGV4dC5n
ZXRUZXh0KCkpLnRvRXF1YWwoJ3RleHQgPScpOworICAgICAgICAgICAgZXhwZWN0KHZhbGlkLmdl
dFRleHQoKSkudG9Db250YWluKCdmYWxzZScpOworICAgICAgICAgIH0pOworCisgICAgICAgICAg
aXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIG5vdCB1cmwnLCBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIGlucHV0LmNsZWFyKCk7CisgICAgICAgICAgICBpbnB1dC5zZW5kS2V5cygnYm94Jyk7CisK
KyAgICAgICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignZmFsc2UnKTsK
KyAgICAgICAgICB9KTsKKyAgICAgICAgPC9maWxlPgorICAgICAgPC9leGFtcGxlPgorICAgKi8K
KyAgJ3VybCc6IHVybElucHV0VHlwZSwKKworCisgIC8qKgorICAgKiBAbmdkb2MgaW5wdXQKKyAg
ICogQG5hbWUgaW5wdXRbZW1haWxdCisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBUZXh0
IGlucHV0IHdpdGggZW1haWwgdmFsaWRhdGlvbi4gU2V0cyB0aGUgYGVtYWlsYCB2YWxpZGF0aW9u
IGVycm9yIGtleSBpZiBub3QgYSB2YWxpZCBlbWFpbAorICAgKiBhZGRyZXNzLgorICAgKgorICAg
KiA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC13YXJuaW5nIj4KKyAgICogKipOb3RlOioqIGBpbnB1
dFtlbWFpbF1gIHVzZXMgYSByZWdleCB0byB2YWxpZGF0ZSBlbWFpbCBhZGRyZXNzZXMgdGhhdCBp
cyBkZXJpdmVkIGZyb20gdGhlIHJlZ2V4CisgICAqIHVzZWQgaW4gQ2hyb21pdW0uIElmIHlvdSBu
ZWVkIHN0cmljdGVyIHZhbGlkYXRpb24gKGUuZy4gcmVxdWlyaW5nIGEgdG9wLWxldmVsIGRvbWFp
biksIHlvdSBjYW4KKyAgICogdXNlIGBuZy1wYXR0ZXJuYCBvciBtb2RpZnkgdGhlIGJ1aWx0LWlu
IHZhbGlkYXRvcnMgKHNlZSB0aGUge0BsaW5rIGd1aWRlL2Zvcm1zIEZvcm1zIGd1aWRlfSkKKyAg
ICogPC9kaXY+CisgICAqCisgICAqIEBwYXJhbSB7c3RyaW5nfSBuZ01vZGVsIEFzc2lnbmFibGUg
YW5ndWxhciBleHByZXNzaW9uIHRvIGRhdGEtYmluZCB0by4KKyAgICogQHBhcmFtIHtzdHJpbmc9
fSBuYW1lIFByb3BlcnR5IG5hbWUgb2YgdGhlIGZvcm0gdW5kZXIgd2hpY2ggdGhlIGNvbnRyb2wg
aXMgcHVibGlzaGVkLgorICAgKiBAcGFyYW0ge3N0cmluZz19IHJlcXVpcmVkIFNldHMgYHJlcXVp
cmVkYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgbm90IGVudGVyZWQuCisg
ICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdSZXF1aXJlZCBBZGRzIGByZXF1aXJlZGAgYXR0cmlidXRl
IGFuZCBgcmVxdWlyZWRgIHZhbGlkYXRpb24gY29uc3RyYWludCB0bworICAgKiAgICB0aGUgZWxl
bWVudCB3aGVuIHRoZSBuZ1JlcXVpcmVkIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRydWUuIFVz
ZSBgbmdSZXF1aXJlZGAgaW5zdGVhZCBvZgorICAgKiAgICBgcmVxdWlyZWRgIHdoZW4geW91IHdh
bnQgdG8gZGF0YS1iaW5kIHRvIHRoZSBgcmVxdWlyZWRgIGF0dHJpYnV0ZS4KKyAgICogQHBhcmFt
IHtudW1iZXI9fSBuZ01pbmxlbmd0aCBTZXRzIGBtaW5sZW5ndGhgIHZhbGlkYXRpb24gZXJyb3Ig
a2V5IGlmIHRoZSB2YWx1ZSBpcyBzaG9ydGVyIHRoYW4KKyAgICogICAgbWlubGVuZ3RoLgorICAg
KiBAcGFyYW0ge251bWJlcj19IG5nTWF4bGVuZ3RoIFNldHMgYG1heGxlbmd0aGAgdmFsaWRhdGlv
biBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIGxvbmdlciB0aGFuCisgICAqICAgIG1heGxlbmd0
aC4gU2V0dGluZyB0aGUgYXR0cmlidXRlIHRvIGEgbmVnYXRpdmUgb3Igbm9uLW51bWVyaWMgdmFs
dWUsIGFsbG93cyB2aWV3IHZhbHVlcyBvZgorICAgKiAgICBhbnkgbGVuZ3RoLgorICAgKiBAcGFy
YW0ge3N0cmluZz19IHBhdHRlcm4gU2ltaWxhciB0byBgbmdQYXR0ZXJuYCBleGNlcHQgdGhhdCB0
aGUgYXR0cmlidXRlIHZhbHVlIGlzIHRoZSBhY3R1YWwgc3RyaW5nCisgICAqICAgIHRoYXQgY29u
dGFpbnMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBib2R5IHRoYXQgd2lsbCBiZSBjb252ZXJ0ZWQg
dG8gYSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICogICAgYXMgaW4gdGhlIG5nUGF0dGVybiBkaXJl
Y3RpdmUuCisgICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdQYXR0ZXJuIFNldHMgYHBhdHRlcm5gIHZh
bGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSBuZ01vZGVsIHZhbHVlIGRvZXMgbm90IG1hdGNoCisg
ICAqICAgIGEgUmVnRXhwIGZvdW5kIGJ5IGV2YWx1YXRpbmcgdGhlIEFuZ3VsYXIgZXhwcmVzc2lv
biBnaXZlbiBpbiB0aGUgYXR0cmlidXRlIHZhbHVlLgorICAgKiAgICBJZiB0aGUgZXhwcmVzc2lv
biBldmFsdWF0ZXMgdG8gYSBSZWdFeHAgb2JqZWN0LCB0aGVuIHRoaXMgaXMgdXNlZCBkaXJlY3Rs
eS4KKyAgICogICAgSWYgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGEgc3RyaW5nLCB0aGVu
IGl0IHdpbGwgYmUgY29udmVydGVkIHRvIGEgUmVnRXhwCisgICAqICAgIGFmdGVyIHdyYXBwaW5n
IGl0IGluIGBeYCBhbmQgYCRgIGNoYXJhY3RlcnMuIEZvciBpbnN0YW5jZSwgYCJhYmMiYCB3aWxs
IGJlIGNvbnZlcnRlZCB0bworICAgKiAgICBgbmV3IFJlZ0V4cCgnXmFiYyQnKWAuPGJyIC8+Cisg
ICAqICAgICoqTm90ZToqKiBBdm9pZCB1c2luZyB0aGUgYGdgIGZsYWcgb24gdGhlIFJlZ0V4cCwg
YXMgaXQgd2lsbCBjYXVzZSBlYWNoIHN1Y2Nlc3NpdmUgc2VhcmNoIHRvCisgICAqICAgIHN0YXJ0
IGF0IHRoZSBpbmRleCBvZiB0aGUgbGFzdCBzZWFyY2gncyBtYXRjaCwgdGh1cyBub3QgdGFraW5n
IHRoZSB3aG9sZSBpbnB1dCB2YWx1ZSBpbnRvCisgICAqICAgIGFjY291bnQuCisgICAqIEBwYXJh
bSB7c3RyaW5nPX0gbmdDaGFuZ2UgQW5ndWxhciBleHByZXNzaW9uIHRvIGJlIGV4ZWN1dGVkIHdo
ZW4gaW5wdXQgY2hhbmdlcyBkdWUgdG8gdXNlcgorICAgKiAgICBpbnRlcmFjdGlvbiB3aXRoIHRo
ZSBpbnB1dCBlbGVtZW50LgorICAgKgorICAgKiBAZXhhbXBsZQorICAgICAgPGV4YW1wbGUgbmFt
ZT0iZW1haWwtaW5wdXQtZGlyZWN0aXZlIiBtb2R1bGU9ImVtYWlsRXhhbXBsZSI+CisgICAgICAg
IDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICAgICAgPHNjcmlwdD4KKyAgICAgICAgICAg
YW5ndWxhci5tb2R1bGUoJ2VtYWlsRXhhbXBsZScsIFtdKQorICAgICAgICAgICAgIC5jb250cm9s
bGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7Cisg
ICAgICAgICAgICAgICAkc2NvcGUuZW1haWwgPSB7CisgICAgICAgICAgICAgICAgIHRleHQ6ICdt
ZUBleGFtcGxlLmNvbScKKyAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgfV0pOworICAg
ICAgICAgPC9zY3JpcHQ+CisgICAgICAgICAgIDxmb3JtIG5hbWU9Im15Rm9ybSIgbmctY29udHJv
bGxlcj0iRXhhbXBsZUNvbnRyb2xsZXIiPgorICAgICAgICAgICAgIDxsYWJlbD5FbWFpbDoKKyAg
ICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJlbWFpbCIgbmFtZT0iaW5wdXQiIG5nLW1vZGVsPSJl
bWFpbC50ZXh0IiByZXF1aXJlZD4KKyAgICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgICAg
IDxkaXYgcm9sZT0iYWxlcnQiPgorICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVycm9yIiBu
Zy1zaG93PSJteUZvcm0uaW5wdXQuJGVycm9yLnJlcXVpcmVkIj4KKyAgICAgICAgICAgICAgICAg
UmVxdWlyZWQhPC9zcGFuPgorICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVycm9yIiBuZy1z
aG93PSJteUZvcm0uaW5wdXQuJGVycm9yLmVtYWlsIj4KKyAgICAgICAgICAgICAgICAgTm90IHZh
bGlkIGVtYWlsITwvc3Bhbj4KKyAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICA8dHQ+
dGV4dCA9IHt7ZW1haWwudGV4dH19PC90dD48YnIvPgorICAgICAgICAgICAgIDx0dD5teUZvcm0u
aW5wdXQuJHZhbGlkID0ge3tteUZvcm0uaW5wdXQuJHZhbGlkfX08L3R0Pjxici8+CisgICAgICAg
ICAgICAgPHR0Pm15Rm9ybS5pbnB1dC4kZXJyb3IgPSB7e215Rm9ybS5pbnB1dC4kZXJyb3J9fTwv
dHQ+PGJyLz4KKyAgICAgICAgICAgICA8dHQ+bXlGb3JtLiR2YWxpZCA9IHt7bXlGb3JtLiR2YWxp
ZH19PC90dD48YnIvPgorICAgICAgICAgICAgIDx0dD5teUZvcm0uJGVycm9yLnJlcXVpcmVkID0g
e3shIW15Rm9ybS4kZXJyb3IucmVxdWlyZWR9fTwvdHQ+PGJyLz4KKyAgICAgICAgICAgICA8dHQ+
bXlGb3JtLiRlcnJvci5lbWFpbCA9IHt7ISFteUZvcm0uJGVycm9yLmVtYWlsfX08L3R0Pjxici8+
CisgICAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgIDwvZmlsZT4KKyAgICAgICAgPGZpbGUgbmFt
ZT0icHJvdHJhY3Rvci5qcyIgdHlwZT0icHJvdHJhY3RvciI+CisgICAgICAgICAgdmFyIHRleHQg
PSBlbGVtZW50KGJ5LmJpbmRpbmcoJ2VtYWlsLnRleHQnKSk7CisgICAgICAgICAgdmFyIHZhbGlk
ID0gZWxlbWVudChieS5iaW5kaW5nKCdteUZvcm0uaW5wdXQuJHZhbGlkJykpOworICAgICAgICAg
IHZhciBpbnB1dCA9IGVsZW1lbnQoYnkubW9kZWwoJ2VtYWlsLnRleHQnKSk7CisKKyAgICAgICAg
ICBpdCgnc2hvdWxkIGluaXRpYWxpemUgdG8gbW9kZWwnLCBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIGV4cGVjdCh0ZXh0LmdldFRleHQoKSkudG9Db250YWluKCdtZUBleGFtcGxlLmNvbScpOwor
ICAgICAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCd0cnVlJyk7Cisg
ICAgICAgICAgfSk7CisKKyAgICAgICAgICBpdCgnc2hvdWxkIGJlIGludmFsaWQgaWYgZW1wdHkn
LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlucHV0LmNsZWFyKCk7CisgICAgICAgICAgICBp
bnB1dC5zZW5kS2V5cygnJyk7CisgICAgICAgICAgICBleHBlY3QodGV4dC5nZXRUZXh0KCkpLnRv
RXF1YWwoJ3RleHQgPScpOworICAgICAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSkudG9D
b250YWluKCdmYWxzZScpOworICAgICAgICAgIH0pOworCisgICAgICAgICAgaXQoJ3Nob3VsZCBi
ZSBpbnZhbGlkIGlmIG5vdCBlbWFpbCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaW5wdXQu
Y2xlYXIoKTsKKyAgICAgICAgICAgIGlucHV0LnNlbmRLZXlzKCd4eHgnKTsKKworICAgICAgICAg
ICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCdmYWxzZScpOworICAgICAgICAg
IH0pOworICAgICAgICA8L2ZpbGU+CisgICAgICA8L2V4YW1wbGU+CisgICAqLworICAnZW1haWwn
OiBlbWFpbElucHV0VHlwZSwKKworCisgIC8qKgorICAgKiBAbmdkb2MgaW5wdXQKKyAgICogQG5h
bWUgaW5wdXRbcmFkaW9dCisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBIVE1MIHJhZGlv
IGJ1dHRvbi4KKyAgICoKKyAgICogQHBhcmFtIHtzdHJpbmd9IG5nTW9kZWwgQXNzaWduYWJsZSBh
bmd1bGFyIGV4cHJlc3Npb24gdG8gZGF0YS1iaW5kIHRvLgorICAgKiBAcGFyYW0ge3N0cmluZ30g
dmFsdWUgVGhlIHZhbHVlIHRvIHdoaWNoIHRoZSBgbmdNb2RlbGAgZXhwcmVzc2lvbiBzaG91bGQg
YmUgc2V0IHdoZW4gc2VsZWN0ZWQuCisgICAqICAgIE5vdGUgdGhhdCBgdmFsdWVgIG9ubHkgc3Vw
cG9ydHMgYHN0cmluZ2AgdmFsdWVzLCBpLmUuIHRoZSBzY29wZSBtb2RlbCBuZWVkcyB0byBiZSBh
IHN0cmluZywKKyAgICogICAgdG9vLiBVc2UgYG5nVmFsdWVgIGlmIHlvdSBuZWVkIGNvbXBsZXgg
bW9kZWxzIChgbnVtYmVyYCwgYG9iamVjdGAsIC4uLikuCisgICAqIEBwYXJhbSB7c3RyaW5nPX0g
bmFtZSBQcm9wZXJ0eSBuYW1lIG9mIHRoZSBmb3JtIHVuZGVyIHdoaWNoIHRoZSBjb250cm9sIGlz
IHB1Ymxpc2hlZC4KKyAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ0NoYW5nZSBBbmd1bGFyIGV4cHJl
c3Npb24gdG8gYmUgZXhlY3V0ZWQgd2hlbiBpbnB1dCBjaGFuZ2VzIGR1ZSB0byB1c2VyCisgICAq
ICAgIGludGVyYWN0aW9uIHdpdGggdGhlIGlucHV0IGVsZW1lbnQuCisgICAqIEBwYXJhbSB7c3Ry
aW5nfSBuZ1ZhbHVlIEFuZ3VsYXIgZXhwcmVzc2lvbiB0byB3aGljaCBgbmdNb2RlbGAgd2lsbCBi
ZSBiZSBzZXQgd2hlbiB0aGUgcmFkaW8KKyAgICogICAgaXMgc2VsZWN0ZWQuIFNob3VsZCBiZSB1
c2VkIGluc3RlYWQgb2YgdGhlIGB2YWx1ZWAgYXR0cmlidXRlIGlmIHlvdSBuZWVkCisgICAqICAg
IGEgbm9uLXN0cmluZyBgbmdNb2RlbGAgKGBib29sZWFuYCwgYGFycmF5YCwgLi4uKS4KKyAgICoK
KyAgICogQGV4YW1wbGUKKyAgICAgIDxleGFtcGxlIG5hbWU9InJhZGlvLWlucHV0LWRpcmVjdGl2
ZSIgbW9kdWxlPSJyYWRpb0V4YW1wbGUiPgorICAgICAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1s
Ij4KKyAgICAgICAgIDxzY3JpcHQ+CisgICAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCdyYWRpb0V4
YW1wbGUnLCBbXSkKKyAgICAgICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXIn
LCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkgeworICAgICAgICAgICAgICAgJHNjb3BlLmNv
bG9yID0geworICAgICAgICAgICAgICAgICBuYW1lOiAnYmx1ZScKKyAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICAgICAkc2NvcGUuc3BlY2lhbFZhbHVlID0geworICAgICAgICAgICAgICAg
ICAiaWQiOiAiMTIzNDUiLAorICAgICAgICAgICAgICAgICAidmFsdWUiOiAiZ3JlZW4iCisgICAg
ICAgICAgICAgICB9OworICAgICAgICAgICAgIH1dKTsKKyAgICAgICAgIDwvc2NyaXB0PgorICAg
ICAgICAgPGZvcm0gbmFtZT0ibXlGb3JtIiBuZy1jb250cm9sbGVyPSJFeGFtcGxlQ29udHJvbGxl
ciI+CisgICAgICAgICAgIDxsYWJlbD4KKyAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8i
IG5nLW1vZGVsPSJjb2xvci5uYW1lIiB2YWx1ZT0icmVkIj4KKyAgICAgICAgICAgICBSZWQKKyAg
ICAgICAgICAgPC9sYWJlbD48YnIvPgorICAgICAgICAgICA8bGFiZWw+CisgICAgICAgICAgICAg
PGlucHV0IHR5cGU9InJhZGlvIiBuZy1tb2RlbD0iY29sb3IubmFtZSIgbmctdmFsdWU9InNwZWNp
YWxWYWx1ZSI+CisgICAgICAgICAgICAgR3JlZW4KKyAgICAgICAgICAgPC9sYWJlbD48YnIvPgor
ICAgICAgICAgICA8bGFiZWw+CisgICAgICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBuZy1t
b2RlbD0iY29sb3IubmFtZSIgdmFsdWU9ImJsdWUiPgorICAgICAgICAgICAgIEJsdWUKKyAgICAg
ICAgICAgPC9sYWJlbD48YnIvPgorICAgICAgICAgICA8dHQ+Y29sb3IgPSB7e2NvbG9yLm5hbWUg
fCBqc29ufX08L3R0Pjxici8+CisgICAgICAgICAgPC9mb3JtPgorICAgICAgICAgIE5vdGUgdGhh
dCBgbmctdmFsdWU9InNwZWNpYWxWYWx1ZSJgIHNldHMgcmFkaW8gaXRlbSdzIHZhbHVlIHRvIGJl
IHRoZSB2YWx1ZSBvZiBgJHNjb3BlLnNwZWNpYWxWYWx1ZWAuCisgICAgICAgIDwvZmlsZT4KKyAg
ICAgICAgPGZpbGUgbmFtZT0icHJvdHJhY3Rvci5qcyIgdHlwZT0icHJvdHJhY3RvciI+CisgICAg
ICAgICAgaXQoJ3Nob3VsZCBjaGFuZ2Ugc3RhdGUnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
IHZhciBjb2xvciA9IGVsZW1lbnQoYnkuYmluZGluZygnY29sb3IubmFtZScpKTsKKworICAgICAg
ICAgICAgZXhwZWN0KGNvbG9yLmdldFRleHQoKSkudG9Db250YWluKCdibHVlJyk7CisKKyAgICAg
ICAgICAgIGVsZW1lbnQuYWxsKGJ5Lm1vZGVsKCdjb2xvci5uYW1lJykpLmdldCgwKS5jbGljaygp
OworCisgICAgICAgICAgICBleHBlY3QoY29sb3IuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ3JlZCcp
OworICAgICAgICAgIH0pOworICAgICAgICA8L2ZpbGU+CisgICAgICA8L2V4YW1wbGU+CisgICAq
LworICAncmFkaW8nOiByYWRpb0lucHV0VHlwZSwKKworCisgIC8qKgorICAgKiBAbmdkb2MgaW5w
dXQKKyAgICogQG5hbWUgaW5wdXRbY2hlY2tib3hdCisgICAqCisgICAqIEBkZXNjcmlwdGlvbgor
ICAgKiBIVE1MIGNoZWNrYm94LgorICAgKgorICAgKiBAcGFyYW0ge3N0cmluZ30gbmdNb2RlbCBB
c3NpZ25hYmxlIGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBkYXRhLWJpbmQgdG8uCisgICAqIEBwYXJh
bSB7c3RyaW5nPX0gbmFtZSBQcm9wZXJ0eSBuYW1lIG9mIHRoZSBmb3JtIHVuZGVyIHdoaWNoIHRo
ZSBjb250cm9sIGlzIHB1Ymxpc2hlZC4KKyAgICogQHBhcmFtIHtleHByZXNzaW9uPX0gbmdUcnVl
VmFsdWUgVGhlIHZhbHVlIHRvIHdoaWNoIHRoZSBleHByZXNzaW9uIHNob3VsZCBiZSBzZXQgd2hl
biBzZWxlY3RlZC4KKyAgICogQHBhcmFtIHtleHByZXNzaW9uPX0gbmdGYWxzZVZhbHVlIFRoZSB2
YWx1ZSB0byB3aGljaCB0aGUgZXhwcmVzc2lvbiBzaG91bGQgYmUgc2V0IHdoZW4gbm90IHNlbGVj
dGVkLgorICAgKiBAcGFyYW0ge3N0cmluZz19IG5nQ2hhbmdlIEFuZ3VsYXIgZXhwcmVzc2lvbiB0
byBiZSBleGVjdXRlZCB3aGVuIGlucHV0IGNoYW5nZXMgZHVlIHRvIHVzZXIKKyAgICogICAgaW50
ZXJhY3Rpb24gd2l0aCB0aGUgaW5wdXQgZWxlbWVudC4KKyAgICoKKyAgICogQGV4YW1wbGUKKyAg
ICAgIDxleGFtcGxlIG5hbWU9ImNoZWNrYm94LWlucHV0LWRpcmVjdGl2ZSIgbW9kdWxlPSJjaGVj
a2JveEV4YW1wbGUiPgorICAgICAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgICAg
IDxzY3JpcHQ+CisgICAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCdjaGVja2JveEV4YW1wbGUnLCBb
XSkKKyAgICAgICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29w
ZScsIGZ1bmN0aW9uKCRzY29wZSkgeworICAgICAgICAgICAgICAgJHNjb3BlLmNoZWNrYm94TW9k
ZWwgPSB7CisgICAgICAgICAgICAgICAgdmFsdWUxIDogdHJ1ZSwKKyAgICAgICAgICAgICAgICB2
YWx1ZTIgOiAnWUVTJworICAgICAgICAgICAgICB9OworICAgICAgICAgICAgIH1dKTsKKyAgICAg
ICAgIDwvc2NyaXB0PgorICAgICAgICAgPGZvcm0gbmFtZT0ibXlGb3JtIiBuZy1jb250cm9sbGVy
PSJFeGFtcGxlQ29udHJvbGxlciI+CisgICAgICAgICAgIDxsYWJlbD5WYWx1ZTE6CisgICAgICAg
ICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuZy1tb2RlbD0iY2hlY2tib3hNb2RlbC52YWx1
ZTEiPgorICAgICAgICAgICA8L2xhYmVsPjxici8+CisgICAgICAgICAgIDxsYWJlbD5WYWx1ZTI6
CisgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuZy1tb2RlbD0iY2hlY2tib3hN
b2RlbC52YWx1ZTIiCisgICAgICAgICAgICAgICAgICAgIG5nLXRydWUtdmFsdWU9IidZRVMnIiBu
Zy1mYWxzZS12YWx1ZT0iJ05PJyI+CisgICAgICAgICAgICA8L2xhYmVsPjxici8+CisgICAgICAg
ICAgIDx0dD52YWx1ZTEgPSB7e2NoZWNrYm94TW9kZWwudmFsdWUxfX08L3R0Pjxici8+CisgICAg
ICAgICAgIDx0dD52YWx1ZTIgPSB7e2NoZWNrYm94TW9kZWwudmFsdWUyfX08L3R0Pjxici8+Cisg
ICAgICAgICAgPC9mb3JtPgorICAgICAgICA8L2ZpbGU+CisgICAgICAgIDxmaWxlIG5hbWU9InBy
b3RyYWN0b3IuanMiIHR5cGU9InByb3RyYWN0b3IiPgorICAgICAgICAgIGl0KCdzaG91bGQgY2hh
bmdlIHN0YXRlJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgdmFsdWUxID0gZWxlbWVu
dChieS5iaW5kaW5nKCdjaGVja2JveE1vZGVsLnZhbHVlMScpKTsKKyAgICAgICAgICAgIHZhciB2
YWx1ZTIgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ2NoZWNrYm94TW9kZWwudmFsdWUyJykpOworCisg
ICAgICAgICAgICBleHBlY3QodmFsdWUxLmdldFRleHQoKSkudG9Db250YWluKCd0cnVlJyk7Cisg
ICAgICAgICAgICBleHBlY3QodmFsdWUyLmdldFRleHQoKSkudG9Db250YWluKCdZRVMnKTsKKwor
ICAgICAgICAgICAgZWxlbWVudChieS5tb2RlbCgnY2hlY2tib3hNb2RlbC52YWx1ZTEnKSkuY2xp
Y2soKTsKKyAgICAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ2NoZWNrYm94TW9kZWwudmFsdWUy
JykpLmNsaWNrKCk7CisKKyAgICAgICAgICAgIGV4cGVjdCh2YWx1ZTEuZ2V0VGV4dCgpKS50b0Nv
bnRhaW4oJ2ZhbHNlJyk7CisgICAgICAgICAgICBleHBlY3QodmFsdWUyLmdldFRleHQoKSkudG9D
b250YWluKCdOTycpOworICAgICAgICAgIH0pOworICAgICAgICA8L2ZpbGU+CisgICAgICA8L2V4
YW1wbGU+CisgICAqLworICAnY2hlY2tib3gnOiBjaGVja2JveElucHV0VHlwZSwKKworICAnaGlk
ZGVuJzogbm9vcCwKKyAgJ2J1dHRvbic6IG5vb3AsCisgICdzdWJtaXQnOiBub29wLAorICAncmVz
ZXQnOiBub29wLAorICAnZmlsZSc6IG5vb3AKK307CisKK2Z1bmN0aW9uIHN0cmluZ0Jhc2VkSW5w
dXRUeXBlKGN0cmwpIHsKKyAgY3RybC4kZm9ybWF0dGVycy5wdXNoKGZ1bmN0aW9uKHZhbHVlKSB7
CisgICAgcmV0dXJuIGN0cmwuJGlzRW1wdHkodmFsdWUpID8gdmFsdWUgOiB2YWx1ZS50b1N0cmlu
ZygpOworICB9KTsKK30KKworZnVuY3Rpb24gdGV4dElucHV0VHlwZShzY29wZSwgZWxlbWVudCwg
YXR0ciwgY3RybCwgJHNuaWZmZXIsICRicm93c2VyKSB7CisgIGJhc2VJbnB1dFR5cGUoc2NvcGUs
IGVsZW1lbnQsIGF0dHIsIGN0cmwsICRzbmlmZmVyLCAkYnJvd3Nlcik7CisgIHN0cmluZ0Jhc2Vk
SW5wdXRUeXBlKGN0cmwpOworfQorCitmdW5jdGlvbiBiYXNlSW5wdXRUeXBlKHNjb3BlLCBlbGVt
ZW50LCBhdHRyLCBjdHJsLCAkc25pZmZlciwgJGJyb3dzZXIpIHsKKyAgdmFyIHR5cGUgPSBsb3dl
cmNhc2UoZWxlbWVudFswXS50eXBlKTsKKworICAvLyBJbiBjb21wb3NpdGlvbiBtb2RlLCB1c2Vy
cyBhcmUgc3RpbGwgaW5wdXRpbmcgaW50ZXJtZWRpYXRlIHRleHQgYnVmZmVyLAorICAvLyBob2xk
IHRoZSBsaXN0ZW5lciB1bnRpbCBjb21wb3NpdGlvbiBpcyBkb25lLgorICAvLyBNb3JlIGFib3V0
IGNvbXBvc2l0aW9uIGV2ZW50czogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMv
ZG9jcy9XZWIvQVBJL0NvbXBvc2l0aW9uRXZlbnQKKyAgaWYgKCEkc25pZmZlci5hbmRyb2lkKSB7
CisgICAgdmFyIGNvbXBvc2luZyA9IGZhbHNlOworCisgICAgZWxlbWVudC5vbignY29tcG9zaXRp
b25zdGFydCcsIGZ1bmN0aW9uKGRhdGEpIHsKKyAgICAgIGNvbXBvc2luZyA9IHRydWU7CisgICAg
fSk7CisKKyAgICBlbGVtZW50Lm9uKCdjb21wb3NpdGlvbmVuZCcsIGZ1bmN0aW9uKCkgeworICAg
ICAgY29tcG9zaW5nID0gZmFsc2U7CisgICAgICBsaXN0ZW5lcigpOworICAgIH0pOworICB9CisK
KyAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24oZXYpIHsKKyAgICBpZiAodGltZW91dCkgeworICAg
ICAgJGJyb3dzZXIuZGVmZXIuY2FuY2VsKHRpbWVvdXQpOworICAgICAgdGltZW91dCA9IG51bGw7
CisgICAgfQorICAgIGlmIChjb21wb3NpbmcpIHJldHVybjsKKyAgICB2YXIgdmFsdWUgPSBlbGVt
ZW50LnZhbCgpLAorICAgICAgICBldmVudCA9IGV2ICYmIGV2LnR5cGU7CisKKyAgICAvLyBCeSBk
ZWZhdWx0IHdlIHdpbGwgdHJpbSB0aGUgdmFsdWUKKyAgICAvLyBJZiB0aGUgYXR0cmlidXRlIG5n
LXRyaW0gZXhpc3RzIHdlIHdpbGwgYXZvaWQgdHJpbW1pbmcKKyAgICAvLyBJZiBpbnB1dCB0eXBl
IGlzICdwYXNzd29yZCcsIHRoZSB2YWx1ZSBpcyBuZXZlciB0cmltbWVkCisgICAgaWYgKHR5cGUg
IT09ICdwYXNzd29yZCcgJiYgKCFhdHRyLm5nVHJpbSB8fCBhdHRyLm5nVHJpbSAhPT0gJ2ZhbHNl
JykpIHsKKyAgICAgIHZhbHVlID0gdHJpbSh2YWx1ZSk7CisgICAgfQorCisgICAgLy8gSWYgYSBj
b250cm9sIGlzIHN1ZmZlcmluZyBmcm9tIGJhZCBpbnB1dCAoZHVlIHRvIG5hdGl2ZSB2YWxpZGF0
b3JzKSwgYnJvd3NlcnMgZGlzY2FyZCBpdHMKKyAgICAvLyB2YWx1ZSwgc28gaXQgbWF5IGJlIG5l
Y2Vzc2FyeSB0byByZXZhbGlkYXRlIChieSBjYWxsaW5nICRzZXRWaWV3VmFsdWUgYWdhaW4pIGV2
ZW4gaWYgdGhlCisgICAgLy8gY29udHJvbCdzIHZhbHVlIGlzIHRoZSBzYW1lIGVtcHR5IHZhbHVl
IHR3aWNlIGluIGEgcm93LgorICAgIGlmIChjdHJsLiR2aWV3VmFsdWUgIT09IHZhbHVlIHx8ICh2
YWx1ZSA9PT0gJycgJiYgY3RybC4kJGhhc05hdGl2ZVZhbGlkYXRvcnMpKSB7CisgICAgICBjdHJs
LiRzZXRWaWV3VmFsdWUodmFsdWUsIGV2ZW50KTsKKyAgICB9CisgIH07CisKKyAgLy8gaWYgdGhl
IGJyb3dzZXIgZG9lcyBzdXBwb3J0ICJpbnB1dCIgZXZlbnQsIHdlIGFyZSBmaW5lIC0gZXhjZXB0
IG9uIElFOSB3aGljaCBkb2Vzbid0IGZpcmUgdGhlCisgIC8vIGlucHV0IGV2ZW50IG9uIGJhY2tz
cGFjZSwgZGVsZXRlIG9yIGN1dAorICBpZiAoJHNuaWZmZXIuaGFzRXZlbnQoJ2lucHV0JykpIHsK
KyAgICBlbGVtZW50Lm9uKCdpbnB1dCcsIGxpc3RlbmVyKTsKKyAgfSBlbHNlIHsKKyAgICB2YXIg
dGltZW91dDsKKworICAgIHZhciBkZWZlckxpc3RlbmVyID0gZnVuY3Rpb24oZXYsIGlucHV0LCBv
cmlnVmFsdWUpIHsKKyAgICAgIGlmICghdGltZW91dCkgeworICAgICAgICB0aW1lb3V0ID0gJGJy
b3dzZXIuZGVmZXIoZnVuY3Rpb24oKSB7CisgICAgICAgICAgdGltZW91dCA9IG51bGw7CisgICAg
ICAgICAgaWYgKCFpbnB1dCB8fCBpbnB1dC52YWx1ZSAhPT0gb3JpZ1ZhbHVlKSB7CisgICAgICAg
ICAgICBsaXN0ZW5lcihldik7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH0KKyAg
ICB9OworCisgICAgZWxlbWVudC5vbigna2V5ZG93bicsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAg
ICB2YXIga2V5ID0gZXZlbnQua2V5Q29kZTsKKworICAgICAgLy8gaWdub3JlCisgICAgICAvLyAg
ICBjb21tYW5kICAgICAgICAgICAgbW9kaWZpZXJzICAgICAgICAgICAgICAgICAgIGFycm93cwor
ICAgICAgaWYgKGtleSA9PT0gOTEgfHwgKDE1IDwga2V5ICYmIGtleSA8IDE5KSB8fCAoMzcgPD0g
a2V5ICYmIGtleSA8PSA0MCkpIHJldHVybjsKKworICAgICAgZGVmZXJMaXN0ZW5lcihldmVudCwg
dGhpcywgdGhpcy52YWx1ZSk7CisgICAgfSk7CisKKyAgICAvLyBpZiB1c2VyIG1vZGlmaWVzIGlu
cHV0IHZhbHVlIHVzaW5nIGNvbnRleHQgbWVudSBpbiBJRSwgd2UgbmVlZCAicGFzdGUiIGFuZCAi
Y3V0IiBldmVudHMgdG8gY2F0Y2ggaXQKKyAgICBpZiAoJHNuaWZmZXIuaGFzRXZlbnQoJ3Bhc3Rl
JykpIHsKKyAgICAgIGVsZW1lbnQub24oJ3Bhc3RlIGN1dCcsIGRlZmVyTGlzdGVuZXIpOworICAg
IH0KKyAgfQorCisgIC8vIGlmIHVzZXIgcGFzdGUgaW50byBpbnB1dCB1c2luZyBtb3VzZSBvbiBv
bGRlciBicm93c2VyCisgIC8vIG9yIGZvcm0gYXV0b2NvbXBsZXRlIG9uIG5ld2VyIGJyb3dzZXIs
IHdlIG5lZWQgImNoYW5nZSIgZXZlbnQgdG8gY2F0Y2ggaXQKKyAgZWxlbWVudC5vbignY2hhbmdl
JywgbGlzdGVuZXIpOworCisgIGN0cmwuJHJlbmRlciA9IGZ1bmN0aW9uKCkgeworICAgIGVsZW1l
bnQudmFsKGN0cmwuJGlzRW1wdHkoY3RybC4kdmlld1ZhbHVlKSA/ICcnIDogY3RybC4kdmlld1Zh
bHVlKTsKKyAgfTsKK30KKworZnVuY3Rpb24gd2Vla1BhcnNlcihpc29XZWVrLCBleGlzdGluZ0Rh
dGUpIHsKKyAgaWYgKGlzRGF0ZShpc29XZWVrKSkgeworICAgIHJldHVybiBpc29XZWVrOworICB9
CisKKyAgaWYgKGlzU3RyaW5nKGlzb1dlZWspKSB7CisgICAgV0VFS19SRUdFWFAubGFzdEluZGV4
ID0gMDsKKyAgICB2YXIgcGFydHMgPSBXRUVLX1JFR0VYUC5leGVjKGlzb1dlZWspOworICAgIGlm
IChwYXJ0cykgeworICAgICAgdmFyIHllYXIgPSArcGFydHNbMV0sCisgICAgICAgICAgd2VlayA9
ICtwYXJ0c1syXSwKKyAgICAgICAgICBob3VycyA9IDAsCisgICAgICAgICAgbWludXRlcyA9IDAs
CisgICAgICAgICAgc2Vjb25kcyA9IDAsCisgICAgICAgICAgbWlsbGlzZWNvbmRzID0gMCwKKyAg
ICAgICAgICBmaXJzdFRodXJzID0gZ2V0Rmlyc3RUaHVyc2RheU9mWWVhcih5ZWFyKSwKKyAgICAg
ICAgICBhZGREYXlzID0gKHdlZWsgLSAxKSAqIDc7CisKKyAgICAgIGlmIChleGlzdGluZ0RhdGUp
IHsKKyAgICAgICAgaG91cnMgPSBleGlzdGluZ0RhdGUuZ2V0SG91cnMoKTsKKyAgICAgICAgbWlu
dXRlcyA9IGV4aXN0aW5nRGF0ZS5nZXRNaW51dGVzKCk7CisgICAgICAgIHNlY29uZHMgPSBleGlz
dGluZ0RhdGUuZ2V0U2Vjb25kcygpOworICAgICAgICBtaWxsaXNlY29uZHMgPSBleGlzdGluZ0Rh
dGUuZ2V0TWlsbGlzZWNvbmRzKCk7CisgICAgICB9CisKKyAgICAgIHJldHVybiBuZXcgRGF0ZSh5
ZWFyLCAwLCBmaXJzdFRodXJzLmdldERhdGUoKSArIGFkZERheXMsIGhvdXJzLCBtaW51dGVzLCBz
ZWNvbmRzLCBtaWxsaXNlY29uZHMpOworICAgIH0KKyAgfQorCisgIHJldHVybiBOYU47Cit9CisK
K2Z1bmN0aW9uIGNyZWF0ZURhdGVQYXJzZXIocmVnZXhwLCBtYXBwaW5nKSB7CisgIHJldHVybiBm
dW5jdGlvbihpc28sIGRhdGUpIHsKKyAgICB2YXIgcGFydHMsIG1hcDsKKworICAgIGlmIChpc0Rh
dGUoaXNvKSkgeworICAgICAgcmV0dXJuIGlzbzsKKyAgICB9CisKKyAgICBpZiAoaXNTdHJpbmco
aXNvKSkgeworICAgICAgLy8gV2hlbiBhIGRhdGUgaXMgSlNPTidpZmllZCB0byB3cmFwcyBpdHNl
bGYgaW5zaWRlIG9mIGFuIGV4dHJhCisgICAgICAvLyBzZXQgb2YgZG91YmxlIHF1b3Rlcy4gVGhp
cyBtYWtlcyB0aGUgZGF0ZSBwYXJzaW5nIGNvZGUgdW5hYmxlCisgICAgICAvLyB0byBtYXRjaCB0
aGUgZGF0ZSBzdHJpbmcgYW5kIHBhcnNlIGl0IGFzIGEgZGF0ZS4KKyAgICAgIGlmIChpc28uY2hh
ckF0KDApID09ICciJyAmJiBpc28uY2hhckF0KGlzby5sZW5ndGggLSAxKSA9PSAnIicpIHsKKyAg
ICAgICAgaXNvID0gaXNvLnN1YnN0cmluZygxLCBpc28ubGVuZ3RoIC0gMSk7CisgICAgICB9Cisg
ICAgICBpZiAoSVNPX0RBVEVfUkVHRVhQLnRlc3QoaXNvKSkgeworICAgICAgICByZXR1cm4gbmV3
IERhdGUoaXNvKTsKKyAgICAgIH0KKyAgICAgIHJlZ2V4cC5sYXN0SW5kZXggPSAwOworICAgICAg
cGFydHMgPSByZWdleHAuZXhlYyhpc28pOworCisgICAgICBpZiAocGFydHMpIHsKKyAgICAgICAg
cGFydHMuc2hpZnQoKTsKKyAgICAgICAgaWYgKGRhdGUpIHsKKyAgICAgICAgICBtYXAgPSB7Cisg
ICAgICAgICAgICB5eXl5OiBkYXRlLmdldEZ1bGxZZWFyKCksCisgICAgICAgICAgICBNTTogZGF0
ZS5nZXRNb250aCgpICsgMSwKKyAgICAgICAgICAgIGRkOiBkYXRlLmdldERhdGUoKSwKKyAgICAg
ICAgICAgIEhIOiBkYXRlLmdldEhvdXJzKCksCisgICAgICAgICAgICBtbTogZGF0ZS5nZXRNaW51
dGVzKCksCisgICAgICAgICAgICBzczogZGF0ZS5nZXRTZWNvbmRzKCksCisgICAgICAgICAgICBz
c3M6IGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLyAxMDAwCisgICAgICAgICAgfTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICBtYXAgPSB7IHl5eXk6IDE5NzAsIE1NOiAxLCBkZDogMSwgSEg6
IDAsIG1tOiAwLCBzczogMCwgc3NzOiAwIH07CisgICAgICAgIH0KKworICAgICAgICBmb3JFYWNo
KHBhcnRzLCBmdW5jdGlvbihwYXJ0LCBpbmRleCkgeworICAgICAgICAgIGlmIChpbmRleCA8IG1h
cHBpbmcubGVuZ3RoKSB7CisgICAgICAgICAgICBtYXBbbWFwcGluZ1tpbmRleF1dID0gK3BhcnQ7
CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIG5ldyBEYXRlKG1hcC55
eXl5LCBtYXAuTU0gLSAxLCBtYXAuZGQsIG1hcC5ISCwgbWFwLm1tLCBtYXAuc3MgfHwgMCwgbWFw
LnNzcyAqIDEwMDAgfHwgMCk7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIE5hTjsKKyAg
fTsKK30KKworZnVuY3Rpb24gY3JlYXRlRGF0ZUlucHV0VHlwZSh0eXBlLCByZWdleHAsIHBhcnNl
RGF0ZSwgZm9ybWF0KSB7CisgIHJldHVybiBmdW5jdGlvbiBkeW5hbWljRGF0ZUlucHV0VHlwZShz
Y29wZSwgZWxlbWVudCwgYXR0ciwgY3RybCwgJHNuaWZmZXIsICRicm93c2VyLCAkZmlsdGVyKSB7
CisgICAgYmFkSW5wdXRDaGVja2VyKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsKTsKKyAgICBi
YXNlSW5wdXRUeXBlKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsLCAkc25pZmZlciwgJGJyb3dz
ZXIpOworICAgIHZhciB0aW1lem9uZSA9IGN0cmwgJiYgY3RybC4kb3B0aW9ucyAmJiBjdHJsLiRv
cHRpb25zLnRpbWV6b25lOworICAgIHZhciBwcmV2aW91c0RhdGU7CisKKyAgICBjdHJsLiQkcGFy
c2VyTmFtZSA9IHR5cGU7CisgICAgY3RybC4kcGFyc2Vycy5wdXNoKGZ1bmN0aW9uKHZhbHVlKSB7
CisgICAgICBpZiAoY3RybC4kaXNFbXB0eSh2YWx1ZSkpIHJldHVybiBudWxsOworICAgICAgaWYg
KHJlZ2V4cC50ZXN0KHZhbHVlKSkgeworICAgICAgICAvLyBOb3RlOiBXZSBjYW5ub3QgcmVhZCBj
dHJsLiRtb2RlbFZhbHVlLCBhcyB0aGVyZSBtaWdodCBiZSBhIGRpZmZlcmVudAorICAgICAgICAv
LyBwYXJzZXIvZm9ybWF0dGVyIGluIHRoZSBwcm9jZXNzaW5nIGNoYWluIHNvIHRoYXQgdGhlIG1v
ZGVsCisgICAgICAgIC8vIGNvbnRhaW5zIHNvbWUgZGlmZmVyZW50IGRhdGEgZm9ybWF0IQorICAg
ICAgICB2YXIgcGFyc2VkRGF0ZSA9IHBhcnNlRGF0ZSh2YWx1ZSwgcHJldmlvdXNEYXRlKTsKKyAg
ICAgICAgaWYgKHRpbWV6b25lKSB7CisgICAgICAgICAgcGFyc2VkRGF0ZSA9IGNvbnZlcnRUaW1l
em9uZVRvTG9jYWwocGFyc2VkRGF0ZSwgdGltZXpvbmUpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBwYXJzZWREYXRlOworICAgICAgfQorICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICB9
KTsKKworICAgIGN0cmwuJGZvcm1hdHRlcnMucHVzaChmdW5jdGlvbih2YWx1ZSkgeworICAgICAg
aWYgKHZhbHVlICYmICFpc0RhdGUodmFsdWUpKSB7CisgICAgICAgIHRocm93ICRuZ01vZGVsTWlu
RXJyKCdkYXRlZm10JywgJ0V4cGVjdGVkIGB7MH1gIHRvIGJlIGEgZGF0ZScsIHZhbHVlKTsKKyAg
ICAgIH0KKyAgICAgIGlmIChpc1ZhbGlkRGF0ZSh2YWx1ZSkpIHsKKyAgICAgICAgcHJldmlvdXNE
YXRlID0gdmFsdWU7CisgICAgICAgIGlmIChwcmV2aW91c0RhdGUgJiYgdGltZXpvbmUpIHsKKyAg
ICAgICAgICBwcmV2aW91c0RhdGUgPSBjb252ZXJ0VGltZXpvbmVUb0xvY2FsKHByZXZpb3VzRGF0
ZSwgdGltZXpvbmUsIHRydWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAkZmlsdGVyKCdk
YXRlJykodmFsdWUsIGZvcm1hdCwgdGltZXpvbmUpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAg
cHJldmlvdXNEYXRlID0gbnVsbDsKKyAgICAgICAgcmV0dXJuICcnOworICAgICAgfQorICAgIH0p
OworCisgICAgaWYgKGlzRGVmaW5lZChhdHRyLm1pbikgfHwgYXR0ci5uZ01pbikgeworICAgICAg
dmFyIG1pblZhbDsKKyAgICAgIGN0cmwuJHZhbGlkYXRvcnMubWluID0gZnVuY3Rpb24odmFsdWUp
IHsKKyAgICAgICAgcmV0dXJuICFpc1ZhbGlkRGF0ZSh2YWx1ZSkgfHwgaXNVbmRlZmluZWQobWlu
VmFsKSB8fCBwYXJzZURhdGUodmFsdWUpID49IG1pblZhbDsKKyAgICAgIH07CisgICAgICBhdHRy
LiRvYnNlcnZlKCdtaW4nLCBmdW5jdGlvbih2YWwpIHsKKyAgICAgICAgbWluVmFsID0gcGFyc2VP
YnNlcnZlZERhdGVWYWx1ZSh2YWwpOworICAgICAgICBjdHJsLiR2YWxpZGF0ZSgpOworICAgICAg
fSk7CisgICAgfQorCisgICAgaWYgKGlzRGVmaW5lZChhdHRyLm1heCkgfHwgYXR0ci5uZ01heCkg
eworICAgICAgdmFyIG1heFZhbDsKKyAgICAgIGN0cmwuJHZhbGlkYXRvcnMubWF4ID0gZnVuY3Rp
b24odmFsdWUpIHsKKyAgICAgICAgcmV0dXJuICFpc1ZhbGlkRGF0ZSh2YWx1ZSkgfHwgaXNVbmRl
ZmluZWQobWF4VmFsKSB8fCBwYXJzZURhdGUodmFsdWUpIDw9IG1heFZhbDsKKyAgICAgIH07Cisg
ICAgICBhdHRyLiRvYnNlcnZlKCdtYXgnLCBmdW5jdGlvbih2YWwpIHsKKyAgICAgICAgbWF4VmFs
ID0gcGFyc2VPYnNlcnZlZERhdGVWYWx1ZSh2YWwpOworICAgICAgICBjdHJsLiR2YWxpZGF0ZSgp
OworICAgICAgfSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNWYWxpZERhdGUodmFsdWUpIHsK
KyAgICAgIC8vIEludmFsaWQgRGF0ZTogZ2V0VGltZSgpIHJldHVybnMgTmFOCisgICAgICByZXR1
cm4gdmFsdWUgJiYgISh2YWx1ZS5nZXRUaW1lICYmIHZhbHVlLmdldFRpbWUoKSAhPT0gdmFsdWUu
Z2V0VGltZSgpKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZU9ic2VydmVkRGF0ZVZhbHVl
KHZhbCkgeworICAgICAgcmV0dXJuIGlzRGVmaW5lZCh2YWwpID8gKGlzRGF0ZSh2YWwpID8gdmFs
IDogcGFyc2VEYXRlKHZhbCkpIDogdW5kZWZpbmVkOworICAgIH0KKyAgfTsKK30KKworZnVuY3Rp
b24gYmFkSW5wdXRDaGVja2VyKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsKSB7CisgIHZhciBu
b2RlID0gZWxlbWVudFswXTsKKyAgdmFyIG5hdGl2ZVZhbGlkYXRpb24gPSBjdHJsLiQkaGFzTmF0
aXZlVmFsaWRhdG9ycyA9IGlzT2JqZWN0KG5vZGUudmFsaWRpdHkpOworICBpZiAobmF0aXZlVmFs
aWRhdGlvbikgeworICAgIGN0cmwuJHBhcnNlcnMucHVzaChmdW5jdGlvbih2YWx1ZSkgeworICAg
ICAgdmFyIHZhbGlkaXR5ID0gZWxlbWVudC5wcm9wKFZBTElESVRZX1NUQVRFX1BST1BFUlRZKSB8
fCB7fTsKKyAgICAgIC8vIERldGVjdCBidWcgaW4gRkYzNSBmb3IgaW5wdXRbZW1haWxdIChodHRw
czovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDY0NDMwKToKKyAgICAg
IC8vIC0gYWxzbyBzZXRzIHZhbGlkaXR5LmJhZElucHV0IChzaG91bGQgb25seSBiZSB2YWxpZGl0
eS50eXBlTWlzbWF0Y2gpLgorICAgICAgLy8gLSBzZWUgaHR0cDovL3d3dy53aGF0d2cub3JnL3Nw
ZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNlLW1haWwtc3Rh
dGUtKHR5cGU9ZW1haWwpCisgICAgICAvLyAtIGNhbiBpZ25vcmUgdGhpcyBjYXNlIGFzIHdlIGNh
biBzdGlsbCByZWFkIG91dCB0aGUgZXJyb25lb3VzIGVtYWlsLi4uCisgICAgICByZXR1cm4gdmFs
aWRpdHkuYmFkSW5wdXQgJiYgIXZhbGlkaXR5LnR5cGVNaXNtYXRjaCA/IHVuZGVmaW5lZCA6IHZh
bHVlOworICAgIH0pOworICB9Cit9CisKK2Z1bmN0aW9uIG51bWJlcklucHV0VHlwZShzY29wZSwg
ZWxlbWVudCwgYXR0ciwgY3RybCwgJHNuaWZmZXIsICRicm93c2VyKSB7CisgIGJhZElucHV0Q2hl
Y2tlcihzY29wZSwgZWxlbWVudCwgYXR0ciwgY3RybCk7CisgIGJhc2VJbnB1dFR5cGUoc2NvcGUs
IGVsZW1lbnQsIGF0dHIsIGN0cmwsICRzbmlmZmVyLCAkYnJvd3Nlcik7CisKKyAgY3RybC4kJHBh
cnNlck5hbWUgPSAnbnVtYmVyJzsKKyAgY3RybC4kcGFyc2Vycy5wdXNoKGZ1bmN0aW9uKHZhbHVl
KSB7CisgICAgaWYgKGN0cmwuJGlzRW1wdHkodmFsdWUpKSAgICAgIHJldHVybiBudWxsOworICAg
IGlmIChOVU1CRVJfUkVHRVhQLnRlc3QodmFsdWUpKSByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7
CisgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgfSk7CisKKyAgY3RybC4kZm9ybWF0dGVycy5wdXNo
KGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgaWYgKCFjdHJsLiRpc0VtcHR5KHZhbHVlKSkgeworICAg
ICAgaWYgKCFpc051bWJlcih2YWx1ZSkpIHsKKyAgICAgICAgdGhyb3cgJG5nTW9kZWxNaW5FcnIo
J251bWZtdCcsICdFeHBlY3RlZCBgezB9YCB0byBiZSBhIG51bWJlcicsIHZhbHVlKTsKKyAgICAg
IH0KKyAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTsKKyAgICB9CisgICAgcmV0dXJuIHZh
bHVlOworICB9KTsKKworICBpZiAoaXNEZWZpbmVkKGF0dHIubWluKSB8fCBhdHRyLm5nTWluKSB7
CisgICAgdmFyIG1pblZhbDsKKyAgICBjdHJsLiR2YWxpZGF0b3JzLm1pbiA9IGZ1bmN0aW9uKHZh
bHVlKSB7CisgICAgICByZXR1cm4gY3RybC4kaXNFbXB0eSh2YWx1ZSkgfHwgaXNVbmRlZmluZWQo
bWluVmFsKSB8fCB2YWx1ZSA+PSBtaW5WYWw7CisgICAgfTsKKworICAgIGF0dHIuJG9ic2VydmUo
J21pbicsIGZ1bmN0aW9uKHZhbCkgeworICAgICAgaWYgKGlzRGVmaW5lZCh2YWwpICYmICFpc051
bWJlcih2YWwpKSB7CisgICAgICAgIHZhbCA9IHBhcnNlRmxvYXQodmFsLCAxMCk7CisgICAgICB9
CisgICAgICBtaW5WYWwgPSBpc051bWJlcih2YWwpICYmICFpc05hTih2YWwpID8gdmFsIDogdW5k
ZWZpbmVkOworICAgICAgLy8gVE9ETyhtYXRza28pOiBpbXBsZW1lbnQgdmFsaWRhdGVMYXRlciB0
byByZWR1Y2UgbnVtYmVyIG9mIHZhbGlkYXRpb25zCisgICAgICBjdHJsLiR2YWxpZGF0ZSgpOwor
ICAgIH0pOworICB9CisKKyAgaWYgKGlzRGVmaW5lZChhdHRyLm1heCkgfHwgYXR0ci5uZ01heCkg
eworICAgIHZhciBtYXhWYWw7CisgICAgY3RybC4kdmFsaWRhdG9ycy5tYXggPSBmdW5jdGlvbih2
YWx1ZSkgeworICAgICAgcmV0dXJuIGN0cmwuJGlzRW1wdHkodmFsdWUpIHx8IGlzVW5kZWZpbmVk
KG1heFZhbCkgfHwgdmFsdWUgPD0gbWF4VmFsOworICAgIH07CisKKyAgICBhdHRyLiRvYnNlcnZl
KCdtYXgnLCBmdW5jdGlvbih2YWwpIHsKKyAgICAgIGlmIChpc0RlZmluZWQodmFsKSAmJiAhaXNO
dW1iZXIodmFsKSkgeworICAgICAgICB2YWwgPSBwYXJzZUZsb2F0KHZhbCwgMTApOworICAgICAg
fQorICAgICAgbWF4VmFsID0gaXNOdW1iZXIodmFsKSAmJiAhaXNOYU4odmFsKSA/IHZhbCA6IHVu
ZGVmaW5lZDsKKyAgICAgIC8vIFRPRE8obWF0c2tvKTogaW1wbGVtZW50IHZhbGlkYXRlTGF0ZXIg
dG8gcmVkdWNlIG51bWJlciBvZiB2YWxpZGF0aW9ucworICAgICAgY3RybC4kdmFsaWRhdGUoKTsK
KyAgICB9KTsKKyAgfQorfQorCitmdW5jdGlvbiB1cmxJbnB1dFR5cGUoc2NvcGUsIGVsZW1lbnQs
IGF0dHIsIGN0cmwsICRzbmlmZmVyLCAkYnJvd3NlcikgeworICAvLyBOb3RlOiBubyBiYWRJbnB1
dENoZWNrZXIgaGVyZSBieSBwdXJwb3NlIGFzIGB1cmxgIGlzIG9ubHkgYSB2YWxpZGF0aW9uCisg
IC8vIGluIGJyb3dzZXJzLCBpLmUuIHdlIGNhbiBhbHdheXMgcmVhZCBvdXQgaW5wdXQudmFsdWUg
ZXZlbiBpZiBpdCBpcyBub3QgdmFsaWQhCisgIGJhc2VJbnB1dFR5cGUoc2NvcGUsIGVsZW1lbnQs
IGF0dHIsIGN0cmwsICRzbmlmZmVyLCAkYnJvd3Nlcik7CisgIHN0cmluZ0Jhc2VkSW5wdXRUeXBl
KGN0cmwpOworCisgIGN0cmwuJCRwYXJzZXJOYW1lID0gJ3VybCc7CisgIGN0cmwuJHZhbGlkYXRv
cnMudXJsID0gZnVuY3Rpb24obW9kZWxWYWx1ZSwgdmlld1ZhbHVlKSB7CisgICAgdmFyIHZhbHVl
ID0gbW9kZWxWYWx1ZSB8fCB2aWV3VmFsdWU7CisgICAgcmV0dXJuIGN0cmwuJGlzRW1wdHkodmFs
dWUpIHx8IFVSTF9SRUdFWFAudGVzdCh2YWx1ZSk7CisgIH07Cit9CisKK2Z1bmN0aW9uIGVtYWls
SW5wdXRUeXBlKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsLCAkc25pZmZlciwgJGJyb3dzZXIp
IHsKKyAgLy8gTm90ZTogbm8gYmFkSW5wdXRDaGVja2VyIGhlcmUgYnkgcHVycG9zZSBhcyBgdXJs
YCBpcyBvbmx5IGEgdmFsaWRhdGlvbgorICAvLyBpbiBicm93c2VycywgaS5lLiB3ZSBjYW4gYWx3
YXlzIHJlYWQgb3V0IGlucHV0LnZhbHVlIGV2ZW4gaWYgaXQgaXMgbm90IHZhbGlkIQorICBiYXNl
SW5wdXRUeXBlKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsLCAkc25pZmZlciwgJGJyb3dzZXIp
OworICBzdHJpbmdCYXNlZElucHV0VHlwZShjdHJsKTsKKworICBjdHJsLiQkcGFyc2VyTmFtZSA9
ICdlbWFpbCc7CisgIGN0cmwuJHZhbGlkYXRvcnMuZW1haWwgPSBmdW5jdGlvbihtb2RlbFZhbHVl
LCB2aWV3VmFsdWUpIHsKKyAgICB2YXIgdmFsdWUgPSBtb2RlbFZhbHVlIHx8IHZpZXdWYWx1ZTsK
KyAgICByZXR1cm4gY3RybC4kaXNFbXB0eSh2YWx1ZSkgfHwgRU1BSUxfUkVHRVhQLnRlc3QodmFs
dWUpOworICB9OworfQorCitmdW5jdGlvbiByYWRpb0lucHV0VHlwZShzY29wZSwgZWxlbWVudCwg
YXR0ciwgY3RybCkgeworICAvLyBtYWtlIHRoZSBuYW1lIHVuaXF1ZSwgaWYgbm90IGRlZmluZWQK
KyAgaWYgKGlzVW5kZWZpbmVkKGF0dHIubmFtZSkpIHsKKyAgICBlbGVtZW50LmF0dHIoJ25hbWUn
LCBuZXh0VWlkKCkpOworICB9CisKKyAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24oZXYpIHsKKyAg
ICBpZiAoZWxlbWVudFswXS5jaGVja2VkKSB7CisgICAgICBjdHJsLiRzZXRWaWV3VmFsdWUoYXR0
ci52YWx1ZSwgZXYgJiYgZXYudHlwZSk7CisgICAgfQorICB9OworCisgIGVsZW1lbnQub24oJ2Ns
aWNrJywgbGlzdGVuZXIpOworCisgIGN0cmwuJHJlbmRlciA9IGZ1bmN0aW9uKCkgeworICAgIHZh
ciB2YWx1ZSA9IGF0dHIudmFsdWU7CisgICAgZWxlbWVudFswXS5jaGVja2VkID0gKHZhbHVlID09
IGN0cmwuJHZpZXdWYWx1ZSk7CisgIH07CisKKyAgYXR0ci4kb2JzZXJ2ZSgndmFsdWUnLCBjdHJs
LiRyZW5kZXIpOworfQorCitmdW5jdGlvbiBwYXJzZUNvbnN0YW50RXhwcigkcGFyc2UsIGNvbnRl
eHQsIG5hbWUsIGV4cHJlc3Npb24sIGZhbGxiYWNrKSB7CisgIHZhciBwYXJzZUZuOworICBpZiAo
aXNEZWZpbmVkKGV4cHJlc3Npb24pKSB7CisgICAgcGFyc2VGbiA9ICRwYXJzZShleHByZXNzaW9u
KTsKKyAgICBpZiAoIXBhcnNlRm4uY29uc3RhbnQpIHsKKyAgICAgIHRocm93IG1pbkVycignbmdN
b2RlbCcpKCdjb25zdGV4cHInLCAnRXhwZWN0ZWQgY29uc3RhbnQgZXhwcmVzc2lvbiBmb3IgYHsw
fWAsIGJ1dCBzYXcgJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdgezF9
YC4nLCBuYW1lLCBleHByZXNzaW9uKTsKKyAgICB9CisgICAgcmV0dXJuIHBhcnNlRm4oY29udGV4
dCk7CisgIH0KKyAgcmV0dXJuIGZhbGxiYWNrOworfQorCitmdW5jdGlvbiBjaGVja2JveElucHV0
VHlwZShzY29wZSwgZWxlbWVudCwgYXR0ciwgY3RybCwgJHNuaWZmZXIsICRicm93c2VyLCAkZmls
dGVyLCAkcGFyc2UpIHsKKyAgdmFyIHRydWVWYWx1ZSA9IHBhcnNlQ29uc3RhbnRFeHByKCRwYXJz
ZSwgc2NvcGUsICduZ1RydWVWYWx1ZScsIGF0dHIubmdUcnVlVmFsdWUsIHRydWUpOworICB2YXIg
ZmFsc2VWYWx1ZSA9IHBhcnNlQ29uc3RhbnRFeHByKCRwYXJzZSwgc2NvcGUsICduZ0ZhbHNlVmFs
dWUnLCBhdHRyLm5nRmFsc2VWYWx1ZSwgZmFsc2UpOworCisgIHZhciBsaXN0ZW5lciA9IGZ1bmN0
aW9uKGV2KSB7CisgICAgY3RybC4kc2V0Vmlld1ZhbHVlKGVsZW1lbnRbMF0uY2hlY2tlZCwgZXYg
JiYgZXYudHlwZSk7CisgIH07CisKKyAgZWxlbWVudC5vbignY2xpY2snLCBsaXN0ZW5lcik7CisK
KyAgY3RybC4kcmVuZGVyID0gZnVuY3Rpb24oKSB7CisgICAgZWxlbWVudFswXS5jaGVja2VkID0g
Y3RybC4kdmlld1ZhbHVlOworICB9OworCisgIC8vIE92ZXJyaWRlIHRoZSBzdGFuZGFyZCBgJGlz
RW1wdHlgIGJlY2F1c2UgdGhlICR2aWV3VmFsdWUgb2YgYW4gZW1wdHkgY2hlY2tib3ggaXMgYWx3
YXlzIHNldCB0byBgZmFsc2VgCisgIC8vIFRoaXMgaXMgYmVjYXVzZSBvZiB0aGUgcGFyc2VyIGJl
bG93LCB3aGljaCBjb21wYXJlcyB0aGUgYCRtb2RlbFZhbHVlYCB3aXRoIGB0cnVlVmFsdWVgIHRv
IGNvbnZlcnQKKyAgLy8gaXQgdG8gYSBib29sZWFuLgorICBjdHJsLiRpc0VtcHR5ID0gZnVuY3Rp
b24odmFsdWUpIHsKKyAgICByZXR1cm4gdmFsdWUgPT09IGZhbHNlOworICB9OworCisgIGN0cmwu
JGZvcm1hdHRlcnMucHVzaChmdW5jdGlvbih2YWx1ZSkgeworICAgIHJldHVybiBlcXVhbHModmFs
dWUsIHRydWVWYWx1ZSk7CisgIH0pOworCisgIGN0cmwuJHBhcnNlcnMucHVzaChmdW5jdGlvbih2
YWx1ZSkgeworICAgIHJldHVybiB2YWx1ZSA/IHRydWVWYWx1ZSA6IGZhbHNlVmFsdWU7CisgIH0p
OworfQorCisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgdGV4dGFyZWEKKyAq
IEByZXN0cmljdCBFCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBIVE1MIHRleHRhcmVhIGVsZW1l
bnQgY29udHJvbCB3aXRoIGFuZ3VsYXIgZGF0YS1iaW5kaW5nLiBUaGUgZGF0YS1iaW5kaW5nIGFu
ZCB2YWxpZGF0aW9uCisgKiBwcm9wZXJ0aWVzIG9mIHRoaXMgZWxlbWVudCBhcmUgZXhhY3RseSB0
aGUgc2FtZSBhcyB0aG9zZSBvZiB0aGUKKyAqIHtAbGluayBuZy5kaXJlY3RpdmU6aW5wdXQgaW5w
dXQgZWxlbWVudH0uCisgKgorICogQHBhcmFtIHtzdHJpbmd9IG5nTW9kZWwgQXNzaWduYWJsZSBh
bmd1bGFyIGV4cHJlc3Npb24gdG8gZGF0YS1iaW5kIHRvLgorICogQHBhcmFtIHtzdHJpbmc9fSBu
YW1lIFByb3BlcnR5IG5hbWUgb2YgdGhlIGZvcm0gdW5kZXIgd2hpY2ggdGhlIGNvbnRyb2wgaXMg
cHVibGlzaGVkLgorICogQHBhcmFtIHtzdHJpbmc9fSByZXF1aXJlZCBTZXRzIGByZXF1aXJlZGAg
dmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIG5vdCBlbnRlcmVkLgorICogQHBh
cmFtIHtzdHJpbmc9fSBuZ1JlcXVpcmVkIEFkZHMgYHJlcXVpcmVkYCBhdHRyaWJ1dGUgYW5kIGBy
ZXF1aXJlZGAgdmFsaWRhdGlvbiBjb25zdHJhaW50IHRvCisgKiAgICB0aGUgZWxlbWVudCB3aGVu
IHRoZSBuZ1JlcXVpcmVkIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRydWUuIFVzZSBgbmdSZXF1
aXJlZGAgaW5zdGVhZCBvZgorICogICAgYHJlcXVpcmVkYCB3aGVuIHlvdSB3YW50IHRvIGRhdGEt
YmluZCB0byB0aGUgYHJlcXVpcmVkYCBhdHRyaWJ1dGUuCisgKiBAcGFyYW0ge251bWJlcj19IG5n
TWlubGVuZ3RoIFNldHMgYG1pbmxlbmd0aGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZh
bHVlIGlzIHNob3J0ZXIgdGhhbgorICogICAgbWlubGVuZ3RoLgorICogQHBhcmFtIHtudW1iZXI9
fSBuZ01heGxlbmd0aCBTZXRzIGBtYXhsZW5ndGhgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRo
ZSB2YWx1ZSBpcyBsb25nZXIgdGhhbgorICogICAgbWF4bGVuZ3RoLiBTZXR0aW5nIHRoZSBhdHRy
aWJ1dGUgdG8gYSBuZWdhdGl2ZSBvciBub24tbnVtZXJpYyB2YWx1ZSwgYWxsb3dzIHZpZXcgdmFs
dWVzIG9mIGFueQorICogICAgbGVuZ3RoLgorICogQHBhcmFtIHtzdHJpbmc9fSBuZ1BhdHRlcm4g
U2V0cyBgcGF0dGVybmAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIG5nTW9kZWwgdmFsdWUg
ZG9lcyBub3QgbWF0Y2gKKyAqICAgIGEgUmVnRXhwIGZvdW5kIGJ5IGV2YWx1YXRpbmcgdGhlIEFu
Z3VsYXIgZXhwcmVzc2lvbiBnaXZlbiBpbiB0aGUgYXR0cmlidXRlIHZhbHVlLgorICogICAgSWYg
dGhlIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGEgUmVnRXhwIG9iamVjdCwgdGhlbiB0aGlzIGlz
IHVzZWQgZGlyZWN0bHkuCisgKiAgICBJZiB0aGUgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gYSBz
dHJpbmcsIHRoZW4gaXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBSZWdFeHAKKyAqICAgIGFmdGVy
IHdyYXBwaW5nIGl0IGluIGBeYCBhbmQgYCRgIGNoYXJhY3RlcnMuIEZvciBpbnN0YW5jZSwgYCJh
YmMiYCB3aWxsIGJlIGNvbnZlcnRlZCB0bworICogICAgYG5ldyBSZWdFeHAoJ15hYmMkJylgLjxi
ciAvPgorICogICAgKipOb3RlOioqIEF2b2lkIHVzaW5nIHRoZSBgZ2AgZmxhZyBvbiB0aGUgUmVn
RXhwLCBhcyBpdCB3aWxsIGNhdXNlIGVhY2ggc3VjY2Vzc2l2ZSBzZWFyY2ggdG8KKyAqICAgIHN0
YXJ0IGF0IHRoZSBpbmRleCBvZiB0aGUgbGFzdCBzZWFyY2gncyBtYXRjaCwgdGh1cyBub3QgdGFr
aW5nIHRoZSB3aG9sZSBpbnB1dCB2YWx1ZSBpbnRvCisgKiAgICBhY2NvdW50LgorICogQHBhcmFt
IHtzdHJpbmc9fSBuZ0NoYW5nZSBBbmd1bGFyIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWQgd2hl
biBpbnB1dCBjaGFuZ2VzIGR1ZSB0byB1c2VyCisgKiAgICBpbnRlcmFjdGlvbiB3aXRoIHRoZSBp
bnB1dCBlbGVtZW50LgorICogQHBhcmFtIHtib29sZWFuPX0gW25nVHJpbT10cnVlXSBJZiBzZXQg
dG8gZmFsc2UgQW5ndWxhciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IHRyaW0gdGhlIGlucHV0Lgor
ICovCisKKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBpbnB1dAorICogQHJl
c3RyaWN0IEUKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIEhUTUwgaW5wdXQgZWxlbWVudCBjb250
cm9sLiBXaGVuIHVzZWQgdG9nZXRoZXIgd2l0aCB7QGxpbmsgbmdNb2RlbCBgbmdNb2RlbGB9LCBp
dCBwcm92aWRlcyBkYXRhLWJpbmRpbmcsCisgKiBpbnB1dCBzdGF0ZSBjb250cm9sLCBhbmQgdmFs
aWRhdGlvbi4KKyAqIElucHV0IGNvbnRyb2wgZm9sbG93cyBIVE1MNSBpbnB1dCB0eXBlcyBhbmQg
cG9seWZpbGxzIHRoZSBIVE1MNSB2YWxpZGF0aW9uIGJlaGF2aW9yIGZvciBvbGRlciBicm93c2Vy
cy4KKyAqCisgKiA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC13YXJuaW5nIj4KKyAqICoqTm90ZToq
KiBOb3QgZXZlcnkgZmVhdHVyZSBvZmZlcmVkIGlzIGF2YWlsYWJsZSBmb3IgYWxsIGlucHV0IHR5
cGVzLgorICogU3BlY2lmaWNhbGx5LCBkYXRhIGJpbmRpbmcgYW5kIGV2ZW50IGhhbmRsaW5nIHZp
YSBgbmctbW9kZWxgIGlzIHVuc3VwcG9ydGVkIGZvciBgaW5wdXRbZmlsZV1gLgorICogPC9kaXY+
CisgKgorICogQHBhcmFtIHtzdHJpbmd9IG5nTW9kZWwgQXNzaWduYWJsZSBhbmd1bGFyIGV4cHJl
c3Npb24gdG8gZGF0YS1iaW5kIHRvLgorICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lIFByb3BlcnR5
IG5hbWUgb2YgdGhlIGZvcm0gdW5kZXIgd2hpY2ggdGhlIGNvbnRyb2wgaXMgcHVibGlzaGVkLgor
ICogQHBhcmFtIHtzdHJpbmc9fSByZXF1aXJlZCBTZXRzIGByZXF1aXJlZGAgdmFsaWRhdGlvbiBl
cnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIG5vdCBlbnRlcmVkLgorICogQHBhcmFtIHtib29sZWFu
PX0gbmdSZXF1aXJlZCBTZXRzIGByZXF1aXJlZGAgYXR0cmlidXRlIGlmIHNldCB0byB0cnVlCisg
KiBAcGFyYW0ge251bWJlcj19IG5nTWlubGVuZ3RoIFNldHMgYG1pbmxlbmd0aGAgdmFsaWRhdGlv
biBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIHNob3J0ZXIgdGhhbgorICogICAgbWlubGVuZ3Ro
LgorICogQHBhcmFtIHtudW1iZXI9fSBuZ01heGxlbmd0aCBTZXRzIGBtYXhsZW5ndGhgIHZhbGlk
YXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBsb25nZXIgdGhhbgorICogICAgbWF4bGVu
Z3RoLiBTZXR0aW5nIHRoZSBhdHRyaWJ1dGUgdG8gYSBuZWdhdGl2ZSBvciBub24tbnVtZXJpYyB2
YWx1ZSwgYWxsb3dzIHZpZXcgdmFsdWVzIG9mIGFueQorICogICAgbGVuZ3RoLgorICogQHBhcmFt
IHtzdHJpbmc9fSBuZ1BhdHRlcm4gU2V0cyBgcGF0dGVybmAgdmFsaWRhdGlvbiBlcnJvciBrZXkg
aWYgdGhlIG5nTW9kZWwgdmFsdWUgZG9lcyBub3QgbWF0Y2gKKyAqICAgIGEgUmVnRXhwIGZvdW5k
IGJ5IGV2YWx1YXRpbmcgdGhlIEFuZ3VsYXIgZXhwcmVzc2lvbiBnaXZlbiBpbiB0aGUgYXR0cmli
dXRlIHZhbHVlLgorICogICAgSWYgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGEgUmVnRXhw
IG9iamVjdCwgdGhlbiB0aGlzIGlzIHVzZWQgZGlyZWN0bHkuCisgKiAgICBJZiB0aGUgZXhwcmVz
c2lvbiBldmFsdWF0ZXMgdG8gYSBzdHJpbmcsIHRoZW4gaXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8g
YSBSZWdFeHAKKyAqICAgIGFmdGVyIHdyYXBwaW5nIGl0IGluIGBeYCBhbmQgYCRgIGNoYXJhY3Rl
cnMuIEZvciBpbnN0YW5jZSwgYCJhYmMiYCB3aWxsIGJlIGNvbnZlcnRlZCB0bworICogICAgYG5l
dyBSZWdFeHAoJ15hYmMkJylgLjxiciAvPgorICogICAgKipOb3RlOioqIEF2b2lkIHVzaW5nIHRo
ZSBgZ2AgZmxhZyBvbiB0aGUgUmVnRXhwLCBhcyBpdCB3aWxsIGNhdXNlIGVhY2ggc3VjY2Vzc2l2
ZSBzZWFyY2ggdG8KKyAqICAgIHN0YXJ0IGF0IHRoZSBpbmRleCBvZiB0aGUgbGFzdCBzZWFyY2gn
cyBtYXRjaCwgdGh1cyBub3QgdGFraW5nIHRoZSB3aG9sZSBpbnB1dCB2YWx1ZSBpbnRvCisgKiAg
ICBhY2NvdW50LgorICogQHBhcmFtIHtzdHJpbmc9fSBuZ0NoYW5nZSBBbmd1bGFyIGV4cHJlc3Np
b24gdG8gYmUgZXhlY3V0ZWQgd2hlbiBpbnB1dCBjaGFuZ2VzIGR1ZSB0byB1c2VyCisgKiAgICBp
bnRlcmFjdGlvbiB3aXRoIHRoZSBpbnB1dCBlbGVtZW50LgorICogQHBhcmFtIHtib29sZWFuPX0g
W25nVHJpbT10cnVlXSBJZiBzZXQgdG8gZmFsc2UgQW5ndWxhciB3aWxsIG5vdCBhdXRvbWF0aWNh
bGx5IHRyaW0gdGhlIGlucHV0LgorICogICAgVGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZCBmb3Ig
aW5wdXRbdHlwZT1wYXNzd29yZF0gY29udHJvbHMsIHdoaWNoIHdpbGwgbmV2ZXIgdHJpbSB0aGUK
KyAqICAgIGlucHV0LgorICoKKyAqIEBleGFtcGxlCisgICAgPGV4YW1wbGUgbmFtZT0iaW5wdXQt
ZGlyZWN0aXZlIiBtb2R1bGU9ImlucHV0RXhhbXBsZSI+CisgICAgICA8ZmlsZSBuYW1lPSJpbmRl
eC5odG1sIj4KKyAgICAgICA8c2NyaXB0PgorICAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCdpbnB1
dEV4YW1wbGUnLCBbXSkKKyAgICAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxl
cicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7CisgICAgICAgICAgICAgICRzY29wZS51
c2VyID0ge25hbWU6ICdndWVzdCcsIGxhc3Q6ICd2aXNpdG9yJ307CisgICAgICAgICAgICB9XSk7
CisgICAgICAgPC9zY3JpcHQ+CisgICAgICAgPGRpdiBuZy1jb250cm9sbGVyPSJFeGFtcGxlQ29u
dHJvbGxlciI+CisgICAgICAgICA8Zm9ybSBuYW1lPSJteUZvcm0iPgorICAgICAgICAgICA8bGFi
ZWw+CisgICAgICAgICAgICAgIFVzZXIgbmFtZToKKyAgICAgICAgICAgICAgPGlucHV0IHR5cGU9
InRleHQiIG5hbWU9InVzZXJOYW1lIiBuZy1tb2RlbD0idXNlci5uYW1lIiByZXF1aXJlZD4KKyAg
ICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgICAgPGRpdiByb2xlPSJhbGVydCI+CisgICAgICAg
ICAgICAgPHNwYW4gY2xhc3M9ImVycm9yIiBuZy1zaG93PSJteUZvcm0udXNlck5hbWUuJGVycm9y
LnJlcXVpcmVkIj4KKyAgICAgICAgICAgICAgUmVxdWlyZWQhPC9zcGFuPgorICAgICAgICAgICA8
L2Rpdj4KKyAgICAgICAgICAgPGxhYmVsPgorICAgICAgICAgICAgICBMYXN0IG5hbWU6CisgICAg
ICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJsYXN0TmFtZSIgbmctbW9kZWw9InVz
ZXIubGFzdCIKKyAgICAgICAgICAgICAgbmctbWlubGVuZ3RoPSIzIiBuZy1tYXhsZW5ndGg9IjEw
Ij4KKyAgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgICAgPGRpdiByb2xlPSJhbGVydCI+Cisg
ICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVycm9yIiBuZy1zaG93PSJteUZvcm0ubGFzdE5hbWUu
JGVycm9yLm1pbmxlbmd0aCI+CisgICAgICAgICAgICAgICBUb28gc2hvcnQhPC9zcGFuPgorICAg
ICAgICAgICAgIDxzcGFuIGNsYXNzPSJlcnJvciIgbmctc2hvdz0ibXlGb3JtLmxhc3ROYW1lLiRl
cnJvci5tYXhsZW5ndGgiPgorICAgICAgICAgICAgICAgVG9vIGxvbmchPC9zcGFuPgorICAgICAg
ICAgICA8L2Rpdj4KKyAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgIDxocj4KKyAgICAgICAgIDx0
dD51c2VyID0ge3t1c2VyfX08L3R0Pjxici8+CisgICAgICAgICA8dHQ+bXlGb3JtLnVzZXJOYW1l
LiR2YWxpZCA9IHt7bXlGb3JtLnVzZXJOYW1lLiR2YWxpZH19PC90dD48YnIvPgorICAgICAgICAg
PHR0Pm15Rm9ybS51c2VyTmFtZS4kZXJyb3IgPSB7e215Rm9ybS51c2VyTmFtZS4kZXJyb3J9fTwv
dHQ+PGJyLz4KKyAgICAgICAgIDx0dD5teUZvcm0ubGFzdE5hbWUuJHZhbGlkID0ge3tteUZvcm0u
bGFzdE5hbWUuJHZhbGlkfX08L3R0Pjxici8+CisgICAgICAgICA8dHQ+bXlGb3JtLmxhc3ROYW1l
LiRlcnJvciA9IHt7bXlGb3JtLmxhc3ROYW1lLiRlcnJvcn19PC90dD48YnIvPgorICAgICAgICAg
PHR0Pm15Rm9ybS4kdmFsaWQgPSB7e215Rm9ybS4kdmFsaWR9fTwvdHQ+PGJyLz4KKyAgICAgICAg
IDx0dD5teUZvcm0uJGVycm9yLnJlcXVpcmVkID0ge3shIW15Rm9ybS4kZXJyb3IucmVxdWlyZWR9
fTwvdHQ+PGJyLz4KKyAgICAgICAgIDx0dD5teUZvcm0uJGVycm9yLm1pbmxlbmd0aCA9IHt7ISFt
eUZvcm0uJGVycm9yLm1pbmxlbmd0aH19PC90dD48YnIvPgorICAgICAgICAgPHR0Pm15Rm9ybS4k
ZXJyb3IubWF4bGVuZ3RoID0ge3shIW15Rm9ybS4kZXJyb3IubWF4bGVuZ3RofX08L3R0Pjxici8+
CisgICAgICAgPC9kaXY+CisgICAgICA8L2ZpbGU+CisgICAgICA8ZmlsZSBuYW1lPSJwcm90cmFj
dG9yLmpzIiB0eXBlPSJwcm90cmFjdG9yIj4KKyAgICAgICAgdmFyIHVzZXIgPSBlbGVtZW50KGJ5
LmV4YWN0QmluZGluZygndXNlcicpKTsKKyAgICAgICAgdmFyIHVzZXJOYW1lVmFsaWQgPSBlbGVt
ZW50KGJ5LmJpbmRpbmcoJ215Rm9ybS51c2VyTmFtZS4kdmFsaWQnKSk7CisgICAgICAgIHZhciBs
YXN0TmFtZVZhbGlkID0gZWxlbWVudChieS5iaW5kaW5nKCdteUZvcm0ubGFzdE5hbWUuJHZhbGlk
JykpOworICAgICAgICB2YXIgbGFzdE5hbWVFcnJvciA9IGVsZW1lbnQoYnkuYmluZGluZygnbXlG
b3JtLmxhc3ROYW1lLiRlcnJvcicpKTsKKyAgICAgICAgdmFyIGZvcm1WYWxpZCA9IGVsZW1lbnQo
YnkuYmluZGluZygnbXlGb3JtLiR2YWxpZCcpKTsKKyAgICAgICAgdmFyIHVzZXJOYW1lSW5wdXQg
PSBlbGVtZW50KGJ5Lm1vZGVsKCd1c2VyLm5hbWUnKSk7CisgICAgICAgIHZhciB1c2VyTGFzdElu
cHV0ID0gZWxlbWVudChieS5tb2RlbCgndXNlci5sYXN0JykpOworCisgICAgICAgIGl0KCdzaG91
bGQgaW5pdGlhbGl6ZSB0byBtb2RlbCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgIGV4cGVjdCh1
c2VyLmdldFRleHQoKSkudG9Db250YWluKCd7Im5hbWUiOiJndWVzdCIsImxhc3QiOiJ2aXNpdG9y
In0nKTsKKyAgICAgICAgICBleHBlY3QodXNlck5hbWVWYWxpZC5nZXRUZXh0KCkpLnRvQ29udGFp
bigndHJ1ZScpOworICAgICAgICAgIGV4cGVjdChmb3JtVmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRh
aW4oJ3RydWUnKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlk
IGlmIGVtcHR5IHdoZW4gcmVxdWlyZWQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICB1c2VyTmFt
ZUlucHV0LmNsZWFyKCk7CisgICAgICAgICAgdXNlck5hbWVJbnB1dC5zZW5kS2V5cygnJyk7CisK
KyAgICAgICAgICBleHBlY3QodXNlci5nZXRUZXh0KCkpLnRvQ29udGFpbigneyJsYXN0Ijoidmlz
aXRvciJ9Jyk7CisgICAgICAgICAgZXhwZWN0KHVzZXJOYW1lVmFsaWQuZ2V0VGV4dCgpKS50b0Nv
bnRhaW4oJ2ZhbHNlJyk7CisgICAgICAgICAgZXhwZWN0KGZvcm1WYWxpZC5nZXRUZXh0KCkpLnRv
Q29udGFpbignZmFsc2UnKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCBiZSB2
YWxpZCBpZiBlbXB0eSB3aGVuIG1pbiBsZW5ndGggaXMgc2V0JywgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgdXNlckxhc3RJbnB1dC5jbGVhcigpOworICAgICAgICAgIHVzZXJMYXN0SW5wdXQuc2Vu
ZEtleXMoJycpOworCisgICAgICAgICAgZXhwZWN0KHVzZXIuZ2V0VGV4dCgpKS50b0NvbnRhaW4o
J3sibmFtZSI6Imd1ZXN0IiwibGFzdCI6IiJ9Jyk7CisgICAgICAgICAgZXhwZWN0KGxhc3ROYW1l
VmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ3RydWUnKTsKKyAgICAgICAgICBleHBlY3QoZm9y
bVZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCd0cnVlJyk7CisgICAgICAgIH0pOworCisgICAg
ICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBsZXNzIHRoYW4gcmVxdWlyZWQgbWluIGxlbmd0
aCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHVzZXJMYXN0SW5wdXQuY2xlYXIoKTsKKyAgICAg
ICAgICB1c2VyTGFzdElucHV0LnNlbmRLZXlzKCd4eCcpOworCisgICAgICAgICAgZXhwZWN0KHVz
ZXIuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ3sibmFtZSI6Imd1ZXN0In0nKTsKKyAgICAgICAgICBl
eHBlY3QobGFzdE5hbWVWYWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignZmFsc2UnKTsKKyAgICAg
ICAgICBleHBlY3QobGFzdE5hbWVFcnJvci5nZXRUZXh0KCkpLnRvQ29udGFpbignbWlubGVuZ3Ro
Jyk7CisgICAgICAgICAgZXhwZWN0KGZvcm1WYWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignZmFs
c2UnKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIGxv
bmdlciB0aGFuIG1heCBsZW5ndGgnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICB1c2VyTGFzdElu
cHV0LmNsZWFyKCk7CisgICAgICAgICAgdXNlckxhc3RJbnB1dC5zZW5kS2V5cygnc29tZSByaWRp
Y3Vsb3VzbHkgbG9uZyBuYW1lJyk7CisKKyAgICAgICAgICBleHBlY3QodXNlci5nZXRUZXh0KCkp
LnRvQ29udGFpbigneyJuYW1lIjoiZ3Vlc3QifScpOworICAgICAgICAgIGV4cGVjdChsYXN0TmFt
ZVZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCdmYWxzZScpOworICAgICAgICAgIGV4cGVjdChs
YXN0TmFtZUVycm9yLmdldFRleHQoKSkudG9Db250YWluKCdtYXhsZW5ndGgnKTsKKyAgICAgICAg
ICBleHBlY3QoZm9ybVZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCdmYWxzZScpOworICAgICAg
ICB9KTsKKyAgICAgIDwvZmlsZT4KKyAgICA8L2V4YW1wbGU+CisgKi8KK3ZhciBpbnB1dERpcmVj
dGl2ZSA9IFsnJGJyb3dzZXInLCAnJHNuaWZmZXInLCAnJGZpbHRlcicsICckcGFyc2UnLAorICAg
IGZ1bmN0aW9uKCRicm93c2VyLCAkc25pZmZlciwgJGZpbHRlciwgJHBhcnNlKSB7CisgIHJldHVy
biB7CisgICAgcmVzdHJpY3Q6ICdFJywKKyAgICByZXF1aXJlOiBbJz9uZ01vZGVsJ10sCisgICAg
bGluazogeworICAgICAgcHJlOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0ciwgY3RybHMp
IHsKKyAgICAgICAgaWYgKGN0cmxzWzBdKSB7CisgICAgICAgICAgKGlucHV0VHlwZVtsb3dlcmNh
c2UoYXR0ci50eXBlKV0gfHwgaW5wdXRUeXBlLnRleHQpKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBj
dHJsc1swXSwgJHNuaWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICRicm93c2VyLCAkZmlsdGVyLCAkcGFyc2UpOworICAg
ICAgICB9CisgICAgICB9CisgICAgfQorICB9OworfV07CisKKworCit2YXIgQ09OU1RBTlRfVkFM
VUVfUkVHRVhQID0gL14odHJ1ZXxmYWxzZXxcZCspJC87CisvKioKKyAqIEBuZ2RvYyBkaXJlY3Rp
dmUKKyAqIEBuYW1lIG5nVmFsdWUKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIEJpbmRzIHRoZSBn
aXZlbiBleHByZXNzaW9uIHRvIHRoZSB2YWx1ZSBvZiBgPG9wdGlvbj5gIG9yIHtAbGluayBpbnB1
dFtyYWRpb10gYGlucHV0W3JhZGlvXWB9LAorICogc28gdGhhdCB3aGVuIHRoZSBlbGVtZW50IGlz
IHNlbGVjdGVkLCB0aGUge0BsaW5rIG5nTW9kZWwgYG5nTW9kZWxgfSBvZiB0aGF0IGVsZW1lbnQg
aXMgc2V0IHRvCisgKiB0aGUgYm91bmQgdmFsdWUuCisgKgorICogYG5nVmFsdWVgIGlzIHVzZWZ1
bCB3aGVuIGR5bmFtaWNhbGx5IGdlbmVyYXRpbmcgbGlzdHMgb2YgcmFkaW8gYnV0dG9ucyB1c2lu
ZworICoge0BsaW5rIG5nUmVwZWF0IGBuZ1JlcGVhdGB9LCBhcyBzaG93biBiZWxvdy4KKyAqCisg
KiBMaWtld2lzZSwgYG5nVmFsdWVgIGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIGA8b3B0aW9uPmAg
ZWxlbWVudHMgZm9yCisgKiB0aGUge0BsaW5rIHNlbGVjdCBgc2VsZWN0YH0gZWxlbWVudC4gSW4g
dGhhdCBjYXNlIGhvd2V2ZXIsIG9ubHkgc3RyaW5ncyBhcmUgc3VwcG9ydGVkCisgKiBmb3IgdGhl
IGB2YWx1ZSBgYXR0cmlidXRlLCBzbyB0aGUgcmVzdWx0aW5nIGBuZ01vZGVsYCB3aWxsIGFsd2F5
cyBiZSBhIHN0cmluZy4KKyAqIFN1cHBvcnQgZm9yIGBzZWxlY3RgIG1vZGVscyB3aXRoIG5vbi1z
dHJpbmcgdmFsdWVzIGlzIGF2YWlsYWJsZSB2aWEgYG5nT3B0aW9uc2AuCisgKgorICogQGVsZW1l
bnQgaW5wdXQKKyAqIEBwYXJhbSB7c3RyaW5nPX0gbmdWYWx1ZSBhbmd1bGFyIGV4cHJlc3Npb24s
IHdob3NlIHZhbHVlIHdpbGwgYmUgYm91bmQgdG8gdGhlIGB2YWx1ZWAgYXR0cmlidXRlCisgKiAg
IG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQKKyAqCisgKiBAZXhhbXBsZQorICAgIDxleGFtcGxlIG5h
bWU9Im5nVmFsdWUtZGlyZWN0aXZlIiBtb2R1bGU9InZhbHVlRXhhbXBsZSI+CisgICAgICA8Zmls
ZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgICA8c2NyaXB0PgorICAgICAgICAgIGFuZ3VsYXIu
bW9kdWxlKCd2YWx1ZUV4YW1wbGUnLCBbXSkKKyAgICAgICAgICAgIC5jb250cm9sbGVyKCdFeGFt
cGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7CisgICAgICAgICAg
ICAgICRzY29wZS5uYW1lcyA9IFsncGl6emEnLCAndW5pY29ybnMnLCAncm9ib3RzJ107CisgICAg
ICAgICAgICAgICRzY29wZS5teSA9IHsgZmF2b3JpdGU6ICd1bmljb3JucycgfTsKKyAgICAgICAg
ICAgIH1dKTsKKyAgICAgICA8L3NjcmlwdD4KKyAgICAgICAgPGZvcm0gbmctY29udHJvbGxlcj0i
RXhhbXBsZUNvbnRyb2xsZXIiPgorICAgICAgICAgIDxoMj5XaGljaCBpcyB5b3VyIGZhdm9yaXRl
PzwvaDI+CisgICAgICAgICAgICA8bGFiZWwgbmctcmVwZWF0PSJuYW1lIGluIG5hbWVzIiBmb3I9
Int7bmFtZX19Ij4KKyAgICAgICAgICAgICAge3tuYW1lfX0KKyAgICAgICAgICAgICAgPGlucHV0
IHR5cGU9InJhZGlvIgorICAgICAgICAgICAgICAgICAgICAgbmctbW9kZWw9Im15LmZhdm9yaXRl
IgorICAgICAgICAgICAgICAgICAgICAgbmctdmFsdWU9Im5hbWUiCisgICAgICAgICAgICAgICAg
ICAgICBpZD0ie3tuYW1lfX0iCisgICAgICAgICAgICAgICAgICAgICBuYW1lPSJmYXZvcml0ZSI+
CisgICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgIDxkaXY+WW91IGNob3NlIHt7bXkuZmF2
b3JpdGV9fTwvZGl2PgorICAgICAgICA8L2Zvcm0+CisgICAgICA8L2ZpbGU+CisgICAgICA8Zmls
ZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFjdG9yIj4KKyAgICAgICAgdmFyIGZh
dm9yaXRlID0gZWxlbWVudChieS5iaW5kaW5nKCdteS5mYXZvcml0ZScpKTsKKworICAgICAgICBp
dCgnc2hvdWxkIGluaXRpYWxpemUgdG8gbW9kZWwnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICBl
eHBlY3QoZmF2b3JpdGUuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ3VuaWNvcm5zJyk7CisgICAgICAg
IH0pOworICAgICAgICBpdCgnc2hvdWxkIGJpbmQgdGhlIHZhbHVlcyB0byB0aGUgaW5wdXRzJywg
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgZWxlbWVudC5hbGwoYnkubW9kZWwoJ215LmZhdm9yaXRl
JykpLmdldCgwKS5jbGljaygpOworICAgICAgICAgIGV4cGVjdChmYXZvcml0ZS5nZXRUZXh0KCkp
LnRvQ29udGFpbigncGl6emEnKTsKKyAgICAgICAgfSk7CisgICAgICA8L2ZpbGU+CisgICAgPC9l
eGFtcGxlPgorICovCit2YXIgbmdWYWx1ZURpcmVjdGl2ZSA9IGZ1bmN0aW9uKCkgeworICByZXR1
cm4geworICAgIHJlc3RyaWN0OiAnQScsCisgICAgcHJpb3JpdHk6IDEwMCwKKyAgICBjb21waWxl
OiBmdW5jdGlvbih0cGwsIHRwbEF0dHIpIHsKKyAgICAgIGlmIChDT05TVEFOVF9WQUxVRV9SRUdF
WFAudGVzdCh0cGxBdHRyLm5nVmFsdWUpKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiBuZ1Zh
bHVlQ29uc3RhbnRMaW5rKHNjb3BlLCBlbG0sIGF0dHIpIHsKKyAgICAgICAgICBhdHRyLiRzZXQo
J3ZhbHVlJywgc2NvcGUuJGV2YWwoYXR0ci5uZ1ZhbHVlKSk7CisgICAgICAgIH07CisgICAgICB9
IGVsc2UgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmdWYWx1ZUxpbmsoc2NvcGUsIGVsbSwg
YXR0cikgeworICAgICAgICAgIHNjb3BlLiR3YXRjaChhdHRyLm5nVmFsdWUsIGZ1bmN0aW9uIHZh
bHVlV2F0Y2hBY3Rpb24odmFsdWUpIHsKKyAgICAgICAgICAgIGF0dHIuJHNldCgndmFsdWUnLCB2
YWx1ZSk7CisgICAgICAgICAgfSk7CisgICAgICAgIH07CisgICAgICB9CisgICAgfQorICB9Owor
fTsKKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBuZ0JpbmQKKyAqIEByZXN0
cmljdCBBQworICoKKyAqIEBkZXNjcmlwdGlvbgorICogVGhlIGBuZ0JpbmRgIGF0dHJpYnV0ZSB0
ZWxscyBBbmd1bGFyIHRvIHJlcGxhY2UgdGhlIHRleHQgY29udGVudCBvZiB0aGUgc3BlY2lmaWVk
IEhUTUwgZWxlbWVudAorICogd2l0aCB0aGUgdmFsdWUgb2YgYSBnaXZlbiBleHByZXNzaW9uLCBh
bmQgdG8gdXBkYXRlIHRoZSB0ZXh0IGNvbnRlbnQgd2hlbiB0aGUgdmFsdWUgb2YgdGhhdAorICog
ZXhwcmVzc2lvbiBjaGFuZ2VzLgorICoKKyAqIFR5cGljYWxseSwgeW91IGRvbid0IHVzZSBgbmdC
aW5kYCBkaXJlY3RseSwgYnV0IGluc3RlYWQgeW91IHVzZSB0aGUgZG91YmxlIGN1cmx5IG1hcmt1
cCBsaWtlCisgKiBge3sgZXhwcmVzc2lvbiB9fWAgd2hpY2ggaXMgc2ltaWxhciBidXQgbGVzcyB2
ZXJib3NlLgorICoKKyAqIEl0IGlzIHByZWZlcmFibGUgdG8gdXNlIGBuZ0JpbmRgIGluc3RlYWQg
b2YgYHt7IGV4cHJlc3Npb24gfX1gIGlmIGEgdGVtcGxhdGUgaXMgbW9tZW50YXJpbHkKKyAqIGRp
c3BsYXllZCBieSB0aGUgYnJvd3NlciBpbiBpdHMgcmF3IHN0YXRlIGJlZm9yZSBBbmd1bGFyIGNv
bXBpbGVzIGl0LiBTaW5jZSBgbmdCaW5kYCBpcyBhbgorICogZWxlbWVudCBhdHRyaWJ1dGUsIGl0
IG1ha2VzIHRoZSBiaW5kaW5ncyBpbnZpc2libGUgdG8gdGhlIHVzZXIgd2hpbGUgdGhlIHBhZ2Ug
aXMgbG9hZGluZy4KKyAqCisgKiBBbiBhbHRlcm5hdGl2ZSBzb2x1dGlvbiB0byB0aGlzIHByb2Js
ZW0gd291bGQgYmUgdXNpbmcgdGhlCisgKiB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nQ2xvYWsgbmdD
bG9ha30gZGlyZWN0aXZlLgorICoKKyAqCisgKiBAZWxlbWVudCBBTlkKKyAqIEBwYXJhbSB7ZXhw
cmVzc2lvbn0gbmdCaW5kIHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2
YWx1YXRlLgorICoKKyAqIEBleGFtcGxlCisgKiBFbnRlciBhIG5hbWUgaW4gdGhlIExpdmUgUHJl
dmlldyB0ZXh0IGJveDsgdGhlIGdyZWV0aW5nIGJlbG93IHRoZSB0ZXh0IGJveCBjaGFuZ2VzIGlu
c3RhbnRseS4KKyAgIDxleGFtcGxlIG1vZHVsZT0iYmluZEV4YW1wbGUiPgorICAgICA8ZmlsZSBu
YW1lPSJpbmRleC5odG1sIj4KKyAgICAgICA8c2NyaXB0PgorICAgICAgICAgYW5ndWxhci5tb2R1
bGUoJ2JpbmRFeGFtcGxlJywgW10pCisgICAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29u
dHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7CisgICAgICAgICAgICAgJHNj
b3BlLm5hbWUgPSAnV2hpcmxlZCc7CisgICAgICAgICAgIH1dKTsKKyAgICAgICA8L3NjcmlwdD4K
KyAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9IkV4YW1wbGVDb250cm9sbGVyIj4KKyAgICAgICAg
IDxsYWJlbD5FbnRlciBuYW1lOiA8aW5wdXQgdHlwZT0idGV4dCIgbmctbW9kZWw9Im5hbWUiPjwv
bGFiZWw+PGJyPgorICAgICAgICAgSGVsbG8gPHNwYW4gbmctYmluZD0ibmFtZSI+PC9zcGFuPiEK
KyAgICAgICA8L2Rpdj4KKyAgICAgPC9maWxlPgorICAgICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9y
LmpzIiB0eXBlPSJwcm90cmFjdG9yIj4KKyAgICAgICBpdCgnc2hvdWxkIGNoZWNrIG5nLWJpbmQn
LCBmdW5jdGlvbigpIHsKKyAgICAgICAgIHZhciBuYW1lSW5wdXQgPSBlbGVtZW50KGJ5Lm1vZGVs
KCduYW1lJykpOworCisgICAgICAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKCduYW1lJykp
LmdldFRleHQoKSkudG9CZSgnV2hpcmxlZCcpOworICAgICAgICAgbmFtZUlucHV0LmNsZWFyKCk7
CisgICAgICAgICBuYW1lSW5wdXQuc2VuZEtleXMoJ3dvcmxkJyk7CisgICAgICAgICBleHBlY3Qo
ZWxlbWVudChieS5iaW5kaW5nKCduYW1lJykpLmdldFRleHQoKSkudG9CZSgnd29ybGQnKTsKKyAg
ICAgICB9KTsKKyAgICAgPC9maWxlPgorICAgPC9leGFtcGxlPgorICovCit2YXIgbmdCaW5kRGly
ZWN0aXZlID0gWyckY29tcGlsZScsIGZ1bmN0aW9uKCRjb21waWxlKSB7CisgIHJldHVybiB7Cisg
ICAgcmVzdHJpY3Q6ICdBQycsCisgICAgY29tcGlsZTogZnVuY3Rpb24gbmdCaW5kQ29tcGlsZSh0
ZW1wbGF0ZUVsZW1lbnQpIHsKKyAgICAgICRjb21waWxlLiQkYWRkQmluZGluZ0NsYXNzKHRlbXBs
YXRlRWxlbWVudCk7CisgICAgICByZXR1cm4gZnVuY3Rpb24gbmdCaW5kTGluayhzY29wZSwgZWxl
bWVudCwgYXR0cikgeworICAgICAgICAkY29tcGlsZS4kJGFkZEJpbmRpbmdJbmZvKGVsZW1lbnQs
IGF0dHIubmdCaW5kKTsKKyAgICAgICAgZWxlbWVudCA9IGVsZW1lbnRbMF07CisgICAgICAgIHNj
b3BlLiR3YXRjaChhdHRyLm5nQmluZCwgZnVuY3Rpb24gbmdCaW5kV2F0Y2hBY3Rpb24odmFsdWUp
IHsKKyAgICAgICAgICBlbGVtZW50LnRleHRDb250ZW50ID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/
ICcnIDogdmFsdWU7CisgICAgICAgIH0pOworICAgICAgfTsKKyAgICB9CisgIH07Cit9XTsKKwor
CisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1lIG5nQmluZFRlbXBsYXRlCisgKgor
ICogQGRlc2NyaXB0aW9uCisgKiBUaGUgYG5nQmluZFRlbXBsYXRlYCBkaXJlY3RpdmUgc3BlY2lm
aWVzIHRoYXQgdGhlIGVsZW1lbnQKKyAqIHRleHQgY29udGVudCBzaG91bGQgYmUgcmVwbGFjZWQg
d2l0aCB0aGUgaW50ZXJwb2xhdGlvbiBvZiB0aGUgdGVtcGxhdGUKKyAqIGluIHRoZSBgbmdCaW5k
VGVtcGxhdGVgIGF0dHJpYnV0ZS4KKyAqIFVubGlrZSBgbmdCaW5kYCwgdGhlIGBuZ0JpbmRUZW1w
bGF0ZWAgY2FuIGNvbnRhaW4gbXVsdGlwbGUgYHt7YCBgfX1gCisgKiBleHByZXNzaW9ucy4gVGhp
cyBkaXJlY3RpdmUgaXMgbmVlZGVkIHNpbmNlIHNvbWUgSFRNTCBlbGVtZW50cworICogKHN1Y2gg
YXMgVElUTEUgYW5kIE9QVElPTikgY2Fubm90IGNvbnRhaW4gU1BBTiBlbGVtZW50cy4KKyAqCisg
KiBAZWxlbWVudCBBTlkKKyAqIEBwYXJhbSB7c3RyaW5nfSBuZ0JpbmRUZW1wbGF0ZSB0ZW1wbGF0
ZSBvZiBmb3JtCisgKiAgIDx0dD57ezwvdHQ+IDx0dD5leHByZXNzaW9uPC90dD4gPHR0Pn19PC90
dD4gdG8gZXZhbC4KKyAqCisgKiBAZXhhbXBsZQorICogVHJ5IGl0IGhlcmU6IGVudGVyIHRleHQg
aW4gdGV4dCBib3ggYW5kIHdhdGNoIHRoZSBncmVldGluZyBjaGFuZ2UuCisgICA8ZXhhbXBsZSBt
b2R1bGU9ImJpbmRFeGFtcGxlIj4KKyAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAg
ICAgPHNjcmlwdD4KKyAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCdiaW5kRXhhbXBsZScsIFtdKQor
ICAgICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1
bmN0aW9uKCRzY29wZSkgeworICAgICAgICAgICAgICRzY29wZS5zYWx1dGF0aW9uID0gJ0hlbGxv
JzsKKyAgICAgICAgICAgICAkc2NvcGUubmFtZSA9ICdXb3JsZCc7CisgICAgICAgICAgIH1dKTsK
KyAgICAgICA8L3NjcmlwdD4KKyAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9IkV4YW1wbGVDb250
cm9sbGVyIj4KKyAgICAgICAgPGxhYmVsPlNhbHV0YXRpb246IDxpbnB1dCB0eXBlPSJ0ZXh0IiBu
Zy1tb2RlbD0ic2FsdXRhdGlvbiI+PC9sYWJlbD48YnI+CisgICAgICAgIDxsYWJlbD5OYW1lOiA8
aW5wdXQgdHlwZT0idGV4dCIgbmctbW9kZWw9Im5hbWUiPjwvbGFiZWw+PGJyPgorICAgICAgICA8
cHJlIG5nLWJpbmQtdGVtcGxhdGU9Int7c2FsdXRhdGlvbn19IHt7bmFtZX19ISI+PC9wcmU+Cisg
ICAgICAgPC9kaXY+CisgICAgIDwvZmlsZT4KKyAgICAgPGZpbGUgbmFtZT0icHJvdHJhY3Rvci5q
cyIgdHlwZT0icHJvdHJhY3RvciI+CisgICAgICAgaXQoJ3Nob3VsZCBjaGVjayBuZy1iaW5kJywg
ZnVuY3Rpb24oKSB7CisgICAgICAgICB2YXIgc2FsdXRhdGlvbkVsZW0gPSBlbGVtZW50KGJ5LmJp
bmRpbmcoJ3NhbHV0YXRpb24nKSk7CisgICAgICAgICB2YXIgc2FsdXRhdGlvbklucHV0ID0gZWxl
bWVudChieS5tb2RlbCgnc2FsdXRhdGlvbicpKTsKKyAgICAgICAgIHZhciBuYW1lSW5wdXQgPSBl
bGVtZW50KGJ5Lm1vZGVsKCduYW1lJykpOworCisgICAgICAgICBleHBlY3Qoc2FsdXRhdGlvbkVs
ZW0uZ2V0VGV4dCgpKS50b0JlKCdIZWxsbyBXb3JsZCEnKTsKKworICAgICAgICAgc2FsdXRhdGlv
bklucHV0LmNsZWFyKCk7CisgICAgICAgICBzYWx1dGF0aW9uSW5wdXQuc2VuZEtleXMoJ0dyZWV0
aW5ncycpOworICAgICAgICAgbmFtZUlucHV0LmNsZWFyKCk7CisgICAgICAgICBuYW1lSW5wdXQu
c2VuZEtleXMoJ3VzZXInKTsKKworICAgICAgICAgZXhwZWN0KHNhbHV0YXRpb25FbGVtLmdldFRl
eHQoKSkudG9CZSgnR3JlZXRpbmdzIHVzZXIhJyk7CisgICAgICAgfSk7CisgICAgIDwvZmlsZT4K
KyAgIDwvZXhhbXBsZT4KKyAqLwordmFyIG5nQmluZFRlbXBsYXRlRGlyZWN0aXZlID0gWyckaW50
ZXJwb2xhdGUnLCAnJGNvbXBpbGUnLCBmdW5jdGlvbigkaW50ZXJwb2xhdGUsICRjb21waWxlKSB7
CisgIHJldHVybiB7CisgICAgY29tcGlsZTogZnVuY3Rpb24gbmdCaW5kVGVtcGxhdGVDb21waWxl
KHRlbXBsYXRlRWxlbWVudCkgeworICAgICAgJGNvbXBpbGUuJCRhZGRCaW5kaW5nQ2xhc3ModGVt
cGxhdGVFbGVtZW50KTsKKyAgICAgIHJldHVybiBmdW5jdGlvbiBuZ0JpbmRUZW1wbGF0ZUxpbmso
c2NvcGUsIGVsZW1lbnQsIGF0dHIpIHsKKyAgICAgICAgdmFyIGludGVycG9sYXRlRm4gPSAkaW50
ZXJwb2xhdGUoZWxlbWVudC5hdHRyKGF0dHIuJGF0dHIubmdCaW5kVGVtcGxhdGUpKTsKKyAgICAg
ICAgJGNvbXBpbGUuJCRhZGRCaW5kaW5nSW5mbyhlbGVtZW50LCBpbnRlcnBvbGF0ZUZuLmV4cHJl
c3Npb25zKTsKKyAgICAgICAgZWxlbWVudCA9IGVsZW1lbnRbMF07CisgICAgICAgIGF0dHIuJG9i
c2VydmUoJ25nQmluZFRlbXBsYXRlJywgZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgICBlbGVt
ZW50LnRleHRDb250ZW50ID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/ICcnIDogdmFsdWU7CisgICAg
ICAgIH0pOworICAgICAgfTsKKyAgICB9CisgIH07Cit9XTsKKworCisvKioKKyAqIEBuZ2RvYyBk
aXJlY3RpdmUKKyAqIEBuYW1lIG5nQmluZEh0bWwKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIEV2
YWx1YXRlcyB0aGUgZXhwcmVzc2lvbiBhbmQgaW5zZXJ0cyB0aGUgcmVzdWx0aW5nIEhUTUwgaW50
byB0aGUgZWxlbWVudCBpbiBhIHNlY3VyZSB3YXkuIEJ5IGRlZmF1bHQsCisgKiB0aGUgcmVzdWx0
aW5nIEhUTUwgY29udGVudCB3aWxsIGJlIHNhbml0aXplZCB1c2luZyB0aGUge0BsaW5rIG5nU2Fu
aXRpemUuJHNhbml0aXplICRzYW5pdGl6ZX0gc2VydmljZS4KKyAqIFRvIHV0aWxpemUgdGhpcyBm
dW5jdGlvbmFsaXR5LCBlbnN1cmUgdGhhdCBgJHNhbml0aXplYCBpcyBhdmFpbGFibGUsIGZvciBl
eGFtcGxlLCBieSBpbmNsdWRpbmcge0BsaW5rCisgKiBuZ1Nhbml0aXplfSBpbiB5b3VyIG1vZHVs
ZSdzIGRlcGVuZGVuY2llcyAobm90IGluIGNvcmUgQW5ndWxhcikuIEluIG9yZGVyIHRvIHVzZSB7
QGxpbmsgbmdTYW5pdGl6ZX0KKyAqIGluIHlvdXIgbW9kdWxlJ3MgZGVwZW5kZW5jaWVzLCB5b3Ug
bmVlZCB0byBpbmNsdWRlICJhbmd1bGFyLXNhbml0aXplLmpzIiBpbiB5b3VyIGFwcGxpY2F0aW9u
LgorICoKKyAqIFlvdSBtYXkgYWxzbyBieXBhc3Mgc2FuaXRpemF0aW9uIGZvciB2YWx1ZXMgeW91
IGtub3cgYXJlIHNhZmUuIFRvIGRvIHNvLCBiaW5kIHRvCisgKiBhbiBleHBsaWNpdGx5IHRydXN0
ZWQgdmFsdWUgdmlhIHtAbGluayBuZy4kc2NlI3RydXN0QXNIdG1sICRzY2UudHJ1c3RBc0h0bWx9
LiAgU2VlIHRoZSBleGFtcGxlCisgKiB1bmRlciB7QGxpbmsgbmcuJHNjZSNzaG93LW1lLWFuLWV4
YW1wbGUtdXNpbmctc2NlLSBTdHJpY3QgQ29udGV4dHVhbCBFc2NhcGluZyAoU0NFKX0uCisgKgor
ICogTm90ZTogSWYgYSBgJHNhbml0aXplYCBzZXJ2aWNlIGlzIHVuYXZhaWxhYmxlIGFuZCB0aGUg
Ym91bmQgdmFsdWUgaXNuJ3QgZXhwbGljaXRseSB0cnVzdGVkLCB5b3UKKyAqIHdpbGwgaGF2ZSBh
biBleGNlcHRpb24gKGluc3RlYWQgb2YgYW4gZXhwbG9pdC4pCisgKgorICogQGVsZW1lbnQgQU5Z
CisgKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nQmluZEh0bWwge0BsaW5rIGd1aWRlL2V4cHJlc3Np
b24gRXhwcmVzc2lvbn0gdG8gZXZhbHVhdGUuCisgKgorICogQGV4YW1wbGUKKworICAgPGV4YW1w
bGUgbW9kdWxlPSJiaW5kSHRtbEV4YW1wbGUiIGRlcHM9ImFuZ3VsYXItc2FuaXRpemUuanMiPgor
ICAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9
IkV4YW1wbGVDb250cm9sbGVyIj4KKyAgICAgICAgPHAgbmctYmluZC1odG1sPSJteUhUTUwiPjwv
cD4KKyAgICAgICA8L2Rpdj4KKyAgICAgPC9maWxlPgorCisgICAgIDxmaWxlIG5hbWU9InNjcmlw
dC5qcyI+CisgICAgICAgYW5ndWxhci5tb2R1bGUoJ2JpbmRIdG1sRXhhbXBsZScsIFsnbmdTYW5p
dGl6ZSddKQorICAgICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2Nv
cGUnLCBmdW5jdGlvbigkc2NvcGUpIHsKKyAgICAgICAgICAgJHNjb3BlLm15SFRNTCA9CisgICAg
ICAgICAgICAgICdJIGFtIGFuIDxjb2RlPkhUTUw8L2NvZGU+c3RyaW5nIHdpdGggJyArCisgICAg
ICAgICAgICAgICc8YSBocmVmPSIjIj5saW5rcyE8L2E+IGFuZCBvdGhlciA8ZW0+c3R1ZmY8L2Vt
Pic7CisgICAgICAgICB9XSk7CisgICAgIDwvZmlsZT4KKworICAgICA8ZmlsZSBuYW1lPSJwcm90
cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFjdG9yIj4KKyAgICAgICBpdCgnc2hvdWxkIGNoZWNrIG5n
LWJpbmQtaHRtbCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuYmlu
ZGluZygnbXlIVE1MJykpLmdldFRleHQoKSkudG9CZSgKKyAgICAgICAgICAgICAnSSBhbSBhbiBI
VE1Mc3RyaW5nIHdpdGggbGlua3MhIGFuZCBvdGhlciBzdHVmZicpOworICAgICAgIH0pOworICAg
ICA8L2ZpbGU+CisgICA8L2V4YW1wbGU+CisgKi8KK3ZhciBuZ0JpbmRIdG1sRGlyZWN0aXZlID0g
Wyckc2NlJywgJyRwYXJzZScsICckY29tcGlsZScsIGZ1bmN0aW9uKCRzY2UsICRwYXJzZSwgJGNv
bXBpbGUpIHsKKyAgcmV0dXJuIHsKKyAgICByZXN0cmljdDogJ0EnLAorICAgIGNvbXBpbGU6IGZ1
bmN0aW9uIG5nQmluZEh0bWxDb21waWxlKHRFbGVtZW50LCB0QXR0cnMpIHsKKyAgICAgIHZhciBu
Z0JpbmRIdG1sR2V0dGVyID0gJHBhcnNlKHRBdHRycy5uZ0JpbmRIdG1sKTsKKyAgICAgIHZhciBu
Z0JpbmRIdG1sV2F0Y2ggPSAkcGFyc2UodEF0dHJzLm5nQmluZEh0bWwsIGZ1bmN0aW9uIGdldFN0
cmluZ1ZhbHVlKHZhbHVlKSB7CisgICAgICAgIHJldHVybiAodmFsdWUgfHwgJycpLnRvU3RyaW5n
KCk7CisgICAgICB9KTsKKyAgICAgICRjb21waWxlLiQkYWRkQmluZGluZ0NsYXNzKHRFbGVtZW50
KTsKKworICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5nQmluZEh0bWxMaW5rKHNjb3BlLCBlbGVtZW50
LCBhdHRyKSB7CisgICAgICAgICRjb21waWxlLiQkYWRkQmluZGluZ0luZm8oZWxlbWVudCwgYXR0
ci5uZ0JpbmRIdG1sKTsKKworICAgICAgICBzY29wZS4kd2F0Y2gobmdCaW5kSHRtbFdhdGNoLCBm
dW5jdGlvbiBuZ0JpbmRIdG1sV2F0Y2hBY3Rpb24oKSB7CisgICAgICAgICAgLy8gd2UgcmUtZXZh
bHVhdGUgdGhlIGV4cHIgYmVjYXVzZSB3ZSB3YW50IGEgVHJ1c3RlZFZhbHVlSG9sZGVyVHlwZQor
ICAgICAgICAgIC8vIGZvciAkc2NlLCBub3QgYSBzdHJpbmcKKyAgICAgICAgICBlbGVtZW50Lmh0
bWwoJHNjZS5nZXRUcnVzdGVkSHRtbChuZ0JpbmRIdG1sR2V0dGVyKHNjb3BlKSkgfHwgJycpOwor
ICAgICAgICB9KTsKKyAgICAgIH07CisgICAgfQorICB9OworfV07CisKKy8qKgorICogQG5nZG9j
IGRpcmVjdGl2ZQorICogQG5hbWUgbmdDaGFuZ2UKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIEV2
YWx1YXRlIHRoZSBnaXZlbiBleHByZXNzaW9uIHdoZW4gdGhlIHVzZXIgY2hhbmdlcyB0aGUgaW5w
dXQuCisgKiBUaGUgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgaW1tZWRpYXRlbHksIHVubGlrZSB0
aGUgSmF2YVNjcmlwdCBvbmNoYW5nZSBldmVudAorICogd2hpY2ggb25seSB0cmlnZ2VycyBhdCB0
aGUgZW5kIG9mIGEgY2hhbmdlICh1c3VhbGx5LCB3aGVuIHRoZSB1c2VyIGxlYXZlcyB0aGUKKyAq
IGZvcm0gZWxlbWVudCBvciBwcmVzc2VzIHRoZSByZXR1cm4ga2V5KS4KKyAqCisgKiBUaGUgYG5n
Q2hhbmdlYCBleHByZXNzaW9uIGlzIG9ubHkgZXZhbHVhdGVkIHdoZW4gYSBjaGFuZ2UgaW4gdGhl
IGlucHV0IHZhbHVlIGNhdXNlcworICogYSBuZXcgdmFsdWUgdG8gYmUgY29tbWl0dGVkIHRvIHRo
ZSBtb2RlbC4KKyAqCisgKiBJdCB3aWxsIG5vdCBiZSBldmFsdWF0ZWQ6CisgKiAqIGlmIHRoZSB2
YWx1ZSByZXR1cm5lZCBmcm9tIHRoZSBgJHBhcnNlcnNgIHRyYW5zZm9ybWF0aW9uIHBpcGVsaW5l
IGhhcyBub3QgY2hhbmdlZAorICogKiBpZiB0aGUgaW5wdXQgaGFzIGNvbnRpbnVlZCB0byBiZSBp
bnZhbGlkIHNpbmNlIHRoZSBtb2RlbCB3aWxsIHN0YXkgYG51bGxgCisgKiAqIGlmIHRoZSBtb2Rl
bCBpcyBjaGFuZ2VkIHByb2dyYW1tYXRpY2FsbHkgYW5kIG5vdCBieSBhIGNoYW5nZSB0byB0aGUg
aW5wdXQgdmFsdWUKKyAqCisgKgorICogTm90ZSwgdGhpcyBkaXJlY3RpdmUgcmVxdWlyZXMgYG5n
TW9kZWxgIHRvIGJlIHByZXNlbnQuCisgKgorICogQGVsZW1lbnQgaW5wdXQKKyAqIEBwYXJhbSB7
ZXhwcmVzc2lvbn0gbmdDaGFuZ2Uge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0g
dG8gZXZhbHVhdGUgdXBvbiBjaGFuZ2UKKyAqIGluIGlucHV0IHZhbHVlLgorICoKKyAqIEBleGFt
cGxlCisgKiA8ZXhhbXBsZSBuYW1lPSJuZ0NoYW5nZS1kaXJlY3RpdmUiIG1vZHVsZT0iY2hhbmdl
RXhhbXBsZSI+CisgKiAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICogICAgIDxzY3JpcHQ+
CisgKiAgICAgICBhbmd1bGFyLm1vZHVsZSgnY2hhbmdlRXhhbXBsZScsIFtdKQorICogICAgICAg
ICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRz
Y29wZSkgeworICogICAgICAgICAgICRzY29wZS5jb3VudGVyID0gMDsKKyAqICAgICAgICAgICAk
c2NvcGUuY2hhbmdlID0gZnVuY3Rpb24oKSB7CisgKiAgICAgICAgICAgICAkc2NvcGUuY291bnRl
cisrOworICogICAgICAgICAgIH07CisgKiAgICAgICAgIH1dKTsKKyAqICAgICA8L3NjcmlwdD4K
KyAqICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9IkV4YW1wbGVDb250cm9sbGVyIj4KKyAqICAgICAg
IDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmctbW9kZWw9ImNvbmZpcm1lZCIgbmctY2hhbmdlPSJj
aGFuZ2UoKSIgaWQ9Im5nLWNoYW5nZS1leGFtcGxlMSIgLz4KKyAqICAgICAgIDxpbnB1dCB0eXBl
PSJjaGVja2JveCIgbmctbW9kZWw9ImNvbmZpcm1lZCIgaWQ9Im5nLWNoYW5nZS1leGFtcGxlMiIg
Lz4KKyAqICAgICAgIDxsYWJlbCBmb3I9Im5nLWNoYW5nZS1leGFtcGxlMiI+Q29uZmlybWVkPC9s
YWJlbD48YnIgLz4KKyAqICAgICAgIDx0dD5kZWJ1ZyA9IHt7Y29uZmlybWVkfX08L3R0Pjxici8+
CisgKiAgICAgICA8dHQ+Y291bnRlciA9IHt7Y291bnRlcn19PC90dD48YnIvPgorICogICAgIDwv
ZGl2PgorICogICA8L2ZpbGU+CisgKiAgIDxmaWxlIG5hbWU9InByb3RyYWN0b3IuanMiIHR5cGU9
InByb3RyYWN0b3IiPgorICogICAgIHZhciBjb3VudGVyID0gZWxlbWVudChieS5iaW5kaW5nKCdj
b3VudGVyJykpOworICogICAgIHZhciBkZWJ1ZyA9IGVsZW1lbnQoYnkuYmluZGluZygnY29uZmly
bWVkJykpOworICoKKyAqICAgICBpdCgnc2hvdWxkIGV2YWx1YXRlIHRoZSBleHByZXNzaW9uIGlm
IGNoYW5naW5nIGZyb20gdmlldycsIGZ1bmN0aW9uKCkgeworICogICAgICAgZXhwZWN0KGNvdW50
ZXIuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJzAnKTsKKyAqCisgKiAgICAgICBlbGVtZW50KGJ5Lmlk
KCduZy1jaGFuZ2UtZXhhbXBsZTEnKSkuY2xpY2soKTsKKyAqCisgKiAgICAgICBleHBlY3QoY291
bnRlci5nZXRUZXh0KCkpLnRvQ29udGFpbignMScpOworICogICAgICAgZXhwZWN0KGRlYnVnLmdl
dFRleHQoKSkudG9Db250YWluKCd0cnVlJyk7CisgKiAgICAgfSk7CisgKgorICogICAgIGl0KCdz
aG91bGQgbm90IGV2YWx1YXRlIHRoZSBleHByZXNzaW9uIGlmIGNoYW5naW5nIGZyb20gbW9kZWwn
LCBmdW5jdGlvbigpIHsKKyAqICAgICAgIGVsZW1lbnQoYnkuaWQoJ25nLWNoYW5nZS1leGFtcGxl
MicpKS5jbGljaygpOworCisgKiAgICAgICBleHBlY3QoY291bnRlci5nZXRUZXh0KCkpLnRvQ29u
dGFpbignMCcpOworICogICAgICAgZXhwZWN0KGRlYnVnLmdldFRleHQoKSkudG9Db250YWluKCd0
cnVlJyk7CisgKiAgICAgfSk7CisgKiAgIDwvZmlsZT4KKyAqIDwvZXhhbXBsZT4KKyAqLwordmFy
IG5nQ2hhbmdlRGlyZWN0aXZlID0gdmFsdWVGbih7CisgIHJlc3RyaWN0OiAnQScsCisgIHJlcXVp
cmU6ICduZ01vZGVsJywKKyAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0
cmwpIHsKKyAgICBjdHJsLiR2aWV3Q2hhbmdlTGlzdGVuZXJzLnB1c2goZnVuY3Rpb24oKSB7Cisg
ICAgICBzY29wZS4kZXZhbChhdHRyLm5nQ2hhbmdlKTsKKyAgICB9KTsKKyAgfQorfSk7CisKK2Z1
bmN0aW9uIGNsYXNzRGlyZWN0aXZlKG5hbWUsIHNlbGVjdG9yKSB7CisgIG5hbWUgPSAnbmdDbGFz
cycgKyBuYW1lOworICByZXR1cm4gWyckYW5pbWF0ZScsIGZ1bmN0aW9uKCRhbmltYXRlKSB7Cisg
ICAgcmV0dXJuIHsKKyAgICAgIHJlc3RyaWN0OiAnQUMnLAorICAgICAgbGluazogZnVuY3Rpb24o
c2NvcGUsIGVsZW1lbnQsIGF0dHIpIHsKKyAgICAgICAgdmFyIG9sZFZhbDsKKworICAgICAgICBz
Y29wZS4kd2F0Y2goYXR0cltuYW1lXSwgbmdDbGFzc1dhdGNoQWN0aW9uLCB0cnVlKTsKKworICAg
ICAgICBhdHRyLiRvYnNlcnZlKCdjbGFzcycsIGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAgICAg
bmdDbGFzc1dhdGNoQWN0aW9uKHNjb3BlLiRldmFsKGF0dHJbbmFtZV0pKTsKKyAgICAgICAgfSk7
CisKKworICAgICAgICBpZiAobmFtZSAhPT0gJ25nQ2xhc3MnKSB7CisgICAgICAgICAgc2NvcGUu
JHdhdGNoKCckaW5kZXgnLCBmdW5jdGlvbigkaW5kZXgsIG9sZCRpbmRleCkgeworICAgICAgICAg
ICAgLy8ganNoaW50IGJpdHdpc2U6IGZhbHNlCisgICAgICAgICAgICB2YXIgbW9kID0gJGluZGV4
ICYgMTsKKyAgICAgICAgICAgIGlmIChtb2QgIT09IChvbGQkaW5kZXggJiAxKSkgeworICAgICAg
ICAgICAgICB2YXIgY2xhc3NlcyA9IGFycmF5Q2xhc3NlcyhzY29wZS4kZXZhbChhdHRyW25hbWVd
KSk7CisgICAgICAgICAgICAgIG1vZCA9PT0gc2VsZWN0b3IgPworICAgICAgICAgICAgICAgIGFk
ZENsYXNzZXMoY2xhc3NlcykgOgorICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzZXMoY2xhc3Nl
cyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBm
dW5jdGlvbiBhZGRDbGFzc2VzKGNsYXNzZXMpIHsKKyAgICAgICAgICB2YXIgbmV3Q2xhc3NlcyA9
IGRpZ2VzdENsYXNzQ291bnRzKGNsYXNzZXMsIDEpOworICAgICAgICAgIGF0dHIuJGFkZENsYXNz
KG5ld0NsYXNzZXMpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcmVtb3ZlQ2xhc3Nl
cyhjbGFzc2VzKSB7CisgICAgICAgICAgdmFyIG5ld0NsYXNzZXMgPSBkaWdlc3RDbGFzc0NvdW50
cyhjbGFzc2VzLCAtMSk7CisgICAgICAgICAgYXR0ci4kcmVtb3ZlQ2xhc3MobmV3Q2xhc3Nlcyk7
CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBkaWdlc3RDbGFzc0NvdW50cyhjbGFzc2Vz
LCBjb3VudCkgeworICAgICAgICAgIC8vIFVzZSBjcmVhdGVNYXAoKSB0byBwcmV2ZW50IGNsYXNz
IGFzc3VtcHRpb25zIGludm9sdmluZyBwcm9wZXJ0eQorICAgICAgICAgIC8vIG5hbWVzIGluIE9i
amVjdC5wcm90b3R5cGUKKyAgICAgICAgICB2YXIgY2xhc3NDb3VudHMgPSBlbGVtZW50LmRhdGEo
JyRjbGFzc0NvdW50cycpIHx8IGNyZWF0ZU1hcCgpOworICAgICAgICAgIHZhciBjbGFzc2VzVG9V
cGRhdGUgPSBbXTsKKyAgICAgICAgICBmb3JFYWNoKGNsYXNzZXMsIGZ1bmN0aW9uKGNsYXNzTmFt
ZSkgeworICAgICAgICAgICAgaWYgKGNvdW50ID4gMCB8fCBjbGFzc0NvdW50c1tjbGFzc05hbWVd
KSB7CisgICAgICAgICAgICAgIGNsYXNzQ291bnRzW2NsYXNzTmFtZV0gPSAoY2xhc3NDb3VudHNb
Y2xhc3NOYW1lXSB8fCAwKSArIGNvdW50OworICAgICAgICAgICAgICBpZiAoY2xhc3NDb3VudHNb
Y2xhc3NOYW1lXSA9PT0gKyhjb3VudCA+IDApKSB7CisgICAgICAgICAgICAgICAgY2xhc3Nlc1Rv
VXBkYXRlLnB1c2goY2xhc3NOYW1lKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgIH0pOworICAgICAgICAgIGVsZW1lbnQuZGF0YSgnJGNsYXNzQ291bnRzJywgY2xh
c3NDb3VudHMpOworICAgICAgICAgIHJldHVybiBjbGFzc2VzVG9VcGRhdGUuam9pbignICcpOwor
ICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdXBkYXRlQ2xhc3NlcyhvbGRDbGFzc2VzLCBu
ZXdDbGFzc2VzKSB7CisgICAgICAgICAgdmFyIHRvQWRkID0gYXJyYXlEaWZmZXJlbmNlKG5ld0Ns
YXNzZXMsIG9sZENsYXNzZXMpOworICAgICAgICAgIHZhciB0b1JlbW92ZSA9IGFycmF5RGlmZmVy
ZW5jZShvbGRDbGFzc2VzLCBuZXdDbGFzc2VzKTsKKyAgICAgICAgICB0b0FkZCA9IGRpZ2VzdENs
YXNzQ291bnRzKHRvQWRkLCAxKTsKKyAgICAgICAgICB0b1JlbW92ZSA9IGRpZ2VzdENsYXNzQ291
bnRzKHRvUmVtb3ZlLCAtMSk7CisgICAgICAgICAgaWYgKHRvQWRkICYmIHRvQWRkLmxlbmd0aCkg
eworICAgICAgICAgICAgJGFuaW1hdGUuYWRkQ2xhc3MoZWxlbWVudCwgdG9BZGQpOworICAgICAg
ICAgIH0KKyAgICAgICAgICBpZiAodG9SZW1vdmUgJiYgdG9SZW1vdmUubGVuZ3RoKSB7CisgICAg
ICAgICAgICAkYW5pbWF0ZS5yZW1vdmVDbGFzcyhlbGVtZW50LCB0b1JlbW92ZSk7CisgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gbmdDbGFzc1dhdGNoQWN0aW9uKG5l
d1ZhbCkgeworICAgICAgICAgIGlmIChzZWxlY3RvciA9PT0gdHJ1ZSB8fCBzY29wZS4kaW5kZXgg
JSAyID09PSBzZWxlY3RvcikgeworICAgICAgICAgICAgdmFyIG5ld0NsYXNzZXMgPSBhcnJheUNs
YXNzZXMobmV3VmFsIHx8IFtdKTsKKyAgICAgICAgICAgIGlmICghb2xkVmFsKSB7CisgICAgICAg
ICAgICAgIGFkZENsYXNzZXMobmV3Q2xhc3Nlcyk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFl
cXVhbHMobmV3VmFsLG9sZFZhbCkpIHsKKyAgICAgICAgICAgICAgdmFyIG9sZENsYXNzZXMgPSBh
cnJheUNsYXNzZXMob2xkVmFsKTsKKyAgICAgICAgICAgICAgdXBkYXRlQ2xhc3NlcyhvbGRDbGFz
c2VzLCBuZXdDbGFzc2VzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAg
b2xkVmFsID0gc2hhbGxvd0NvcHkobmV3VmFsKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH07
CisKKyAgICBmdW5jdGlvbiBhcnJheURpZmZlcmVuY2UodG9rZW5zMSwgdG9rZW5zMikgeworICAg
ICAgdmFyIHZhbHVlcyA9IFtdOworCisgICAgICBvdXRlcjoKKyAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgdG9rZW5zMS5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgdG9rZW4gPSB0b2tlbnMx
W2ldOworICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRva2VuczIubGVuZ3RoOyBqKyspIHsK
KyAgICAgICAgICBpZiAodG9rZW4gPT0gdG9rZW5zMltqXSkgY29udGludWUgb3V0ZXI7CisgICAg
ICAgIH0KKyAgICAgICAgdmFsdWVzLnB1c2godG9rZW4pOworICAgICAgfQorICAgICAgcmV0dXJu
IHZhbHVlczsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBhcnJheUNsYXNzZXMoY2xhc3NWYWwpIHsK
KyAgICAgIHZhciBjbGFzc2VzID0gW107CisgICAgICBpZiAoaXNBcnJheShjbGFzc1ZhbCkpIHsK
KyAgICAgICAgZm9yRWFjaChjbGFzc1ZhbCwgZnVuY3Rpb24odikgeworICAgICAgICAgIGNsYXNz
ZXMgPSBjbGFzc2VzLmNvbmNhdChhcnJheUNsYXNzZXModikpOworICAgICAgICB9KTsKKyAgICAg
ICAgcmV0dXJuIGNsYXNzZXM7CisgICAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKGNsYXNzVmFsKSkg
eworICAgICAgICByZXR1cm4gY2xhc3NWYWwuc3BsaXQoJyAnKTsKKyAgICAgIH0gZWxzZSBpZiAo
aXNPYmplY3QoY2xhc3NWYWwpKSB7CisgICAgICAgIGZvckVhY2goY2xhc3NWYWwsIGZ1bmN0aW9u
KHYsIGspIHsKKyAgICAgICAgICBpZiAodikgeworICAgICAgICAgICAgY2xhc3NlcyA9IGNsYXNz
ZXMuY29uY2F0KGsuc3BsaXQoJyAnKSk7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAg
ICAgcmV0dXJuIGNsYXNzZXM7CisgICAgICB9CisgICAgICByZXR1cm4gY2xhc3NWYWw7CisgICAg
fQorICB9XTsKK30KKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBuZ0NsYXNz
CisgKiBAcmVzdHJpY3QgQUMKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFRoZSBgbmdDbGFzc2Ag
ZGlyZWN0aXZlIGFsbG93cyB5b3UgdG8gZHluYW1pY2FsbHkgc2V0IENTUyBjbGFzc2VzIG9uIGFu
IEhUTUwgZWxlbWVudCBieSBkYXRhYmluZGluZworICogYW4gZXhwcmVzc2lvbiB0aGF0IHJlcHJl
c2VudHMgYWxsIGNsYXNzZXMgdG8gYmUgYWRkZWQuCisgKgorICogVGhlIGRpcmVjdGl2ZSBvcGVy
YXRlcyBpbiB0aHJlZSBkaWZmZXJlbnQgd2F5cywgZGVwZW5kaW5nIG9uIHdoaWNoIG9mIHRocmVl
IHR5cGVzIHRoZSBleHByZXNzaW9uCisgKiBldmFsdWF0ZXMgdG86CisgKgorICogMS4gSWYgdGhl
IGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGEgc3RyaW5nLCB0aGUgc3RyaW5nIHNob3VsZCBiZSBv
bmUgb3IgbW9yZSBzcGFjZS1kZWxpbWl0ZWQgY2xhc3MKKyAqIG5hbWVzLgorICoKKyAqIDIuIElm
IHRoZSBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBhbiBvYmplY3QsIHRoZW4gZm9yIGVhY2gga2V5
LXZhbHVlIHBhaXIgb2YgdGhlCisgKiBvYmplY3Qgd2l0aCBhIHRydXRoeSB2YWx1ZSB0aGUgY29y
cmVzcG9uZGluZyBrZXkgaXMgdXNlZCBhcyBhIGNsYXNzIG5hbWUuCisgKgorICogMy4gSWYgdGhl
IGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGFuIGFycmF5LCBlYWNoIGVsZW1lbnQgb2YgdGhlIGFy
cmF5IHNob3VsZCBlaXRoZXIgYmUgYSBzdHJpbmcgYXMgaW4KKyAqIHR5cGUgMSBvciBhbiBvYmpl
Y3QgYXMgaW4gdHlwZSAyLiBUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiBtaXggc3RyaW5ncyBhbmQg
b2JqZWN0cyB0b2dldGhlciBpbiBhbiBhcnJheQorICogdG8gZ2l2ZSB5b3UgbW9yZSBjb250cm9s
IG92ZXIgd2hhdCBDU1MgY2xhc3NlcyBhcHBlYXIuIFNlZSB0aGUgY29kZSBiZWxvdyBmb3IgYW4g
ZXhhbXBsZSBvZiB0aGlzLgorICoKKyAqCisgKiBUaGUgZGlyZWN0aXZlIHdvbid0IGFkZCBkdXBs
aWNhdGUgY2xhc3NlcyBpZiBhIHBhcnRpY3VsYXIgY2xhc3Mgd2FzIGFscmVhZHkgc2V0LgorICoK
KyAqIFdoZW4gdGhlIGV4cHJlc3Npb24gY2hhbmdlcywgdGhlIHByZXZpb3VzbHkgYWRkZWQgY2xh
c3NlcyBhcmUgcmVtb3ZlZCBhbmQgb25seSB0aGVuIGFyZSB0aGUKKyAqIG5ldyBjbGFzc2VzIGFk
ZGVkLgorICoKKyAqIEBhbmltYXRpb25zCisgKiAqKmFkZCoqIC0gaGFwcGVucyBqdXN0IGJlZm9y
ZSB0aGUgY2xhc3MgaXMgYXBwbGllZCB0byB0aGUgZWxlbWVudHMKKyAqCisgKiAqKnJlbW92ZSoq
IC0gaGFwcGVucyBqdXN0IGJlZm9yZSB0aGUgY2xhc3MgaXMgcmVtb3ZlZCBmcm9tIHRoZSBlbGVt
ZW50CisgKgorICogQGVsZW1lbnQgQU5ZCisgKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nQ2xhc3Mg
e0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbC4gVGhlIHJlc3VsdAor
ICogICBvZiB0aGUgZXZhbHVhdGlvbiBjYW4gYmUgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHNwYWNl
IGRlbGltaXRlZCBjbGFzcworICogICBuYW1lcywgYW4gYXJyYXksIG9yIGEgbWFwIG9mIGNsYXNz
IG5hbWVzIHRvIGJvb2xlYW4gdmFsdWVzLiBJbiB0aGUgY2FzZSBvZiBhIG1hcCwgdGhlCisgKiAg
IG5hbWVzIG9mIHRoZSBwcm9wZXJ0aWVzIHdob3NlIHZhbHVlcyBhcmUgdHJ1dGh5IHdpbGwgYmUg
YWRkZWQgYXMgY3NzIGNsYXNzZXMgdG8gdGhlCisgKiAgIGVsZW1lbnQuCisgKgorICogQGV4YW1w
bGUgRXhhbXBsZSB0aGF0IGRlbW9uc3RyYXRlcyBiYXNpYyBiaW5kaW5ncyB2aWEgbmdDbGFzcyBk
aXJlY3RpdmUuCisgICA8ZXhhbXBsZT4KKyAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+Cisg
ICAgICAgPHAgbmctY2xhc3M9IntzdHJpa2U6IGRlbGV0ZWQsIGJvbGQ6IGltcG9ydGFudCwgJ2hh
cy1lcnJvcic6IGVycm9yfSI+TWFwIFN5bnRheCBFeGFtcGxlPC9wPgorICAgICAgIDxsYWJlbD4K
KyAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5nLW1vZGVsPSJkZWxldGVkIj4KKyAg
ICAgICAgICBkZWxldGVkIChhcHBseSAic3RyaWtlIiBjbGFzcykKKyAgICAgICA8L2xhYmVsPjxi
cj4KKyAgICAgICA8bGFiZWw+CisgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuZy1t
b2RlbD0iaW1wb3J0YW50Ij4KKyAgICAgICAgICBpbXBvcnRhbnQgKGFwcGx5ICJib2xkIiBjbGFz
cykKKyAgICAgICA8L2xhYmVsPjxicj4KKyAgICAgICA8bGFiZWw+CisgICAgICAgICAgPGlucHV0
IHR5cGU9ImNoZWNrYm94IiBuZy1tb2RlbD0iZXJyb3IiPgorICAgICAgICAgIGVycm9yIChhcHBs
eSAiaGFzLWVycm9yIiBjbGFzcykKKyAgICAgICA8L2xhYmVsPgorICAgICAgIDxocj4KKyAgICAg
ICA8cCBuZy1jbGFzcz0ic3R5bGUiPlVzaW5nIFN0cmluZyBTeW50YXg8L3A+CisgICAgICAgPGlu
cHV0IHR5cGU9InRleHQiIG5nLW1vZGVsPSJzdHlsZSIKKyAgICAgICAgICAgICAgcGxhY2Vob2xk
ZXI9IlR5cGU6IGJvbGQgc3RyaWtlIHJlZCIgYXJpYS1sYWJlbD0iVHlwZTogYm9sZCBzdHJpa2Ug
cmVkIj4KKyAgICAgICA8aHI+CisgICAgICAgPHAgbmctY2xhc3M9IltzdHlsZTEsIHN0eWxlMiwg
c3R5bGUzXSI+VXNpbmcgQXJyYXkgU3ludGF4PC9wPgorICAgICAgIDxpbnB1dCBuZy1tb2RlbD0i
c3R5bGUxIgorICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iVHlwZTogYm9sZCwgc3RyaWtlIG9y
IHJlZCIgYXJpYS1sYWJlbD0iVHlwZTogYm9sZCwgc3RyaWtlIG9yIHJlZCI+PGJyPgorICAgICAg
IDxpbnB1dCBuZy1tb2RlbD0ic3R5bGUyIgorICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iVHlw
ZTogYm9sZCwgc3RyaWtlIG9yIHJlZCIgYXJpYS1sYWJlbD0iVHlwZTogYm9sZCwgc3RyaWtlIG9y
IHJlZCAyIj48YnI+CisgICAgICAgPGlucHV0IG5nLW1vZGVsPSJzdHlsZTMiCisgICAgICAgICAg
ICAgIHBsYWNlaG9sZGVyPSJUeXBlOiBib2xkLCBzdHJpa2Ugb3IgcmVkIiBhcmlhLWxhYmVsPSJU
eXBlOiBib2xkLCBzdHJpa2Ugb3IgcmVkIDMiPjxicj4KKyAgICAgICA8aHI+CisgICAgICAgPHAg
bmctY2xhc3M9IltzdHlsZTQsIHtvcmFuZ2U6IHdhcm5pbmd9XSI+VXNpbmcgQXJyYXkgYW5kIE1h
cCBTeW50YXg8L3A+CisgICAgICAgPGlucHV0IG5nLW1vZGVsPSJzdHlsZTQiIHBsYWNlaG9sZGVy
PSJUeXBlOiBib2xkLCBzdHJpa2UiIGFyaWEtbGFiZWw9IlR5cGU6IGJvbGQsIHN0cmlrZSI+PGJy
PgorICAgICAgIDxsYWJlbD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5nLW1vZGVsPSJ3YXJuaW5n
Ij4gd2FybmluZyAoYXBwbHkgIm9yYW5nZSIgY2xhc3MpPC9sYWJlbD4KKyAgICAgPC9maWxlPgor
ICAgICA8ZmlsZSBuYW1lPSJzdHlsZS5jc3MiPgorICAgICAgIC5zdHJpa2UgeworICAgICAgICAg
ICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsKKyAgICAgICB9CisgICAgICAgLmJvbGQg
eworICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICAgICB9CisgICAgICAgLnJlZCB7
CisgICAgICAgICAgIGNvbG9yOiByZWQ7CisgICAgICAgfQorICAgICAgIC5oYXMtZXJyb3Igewor
ICAgICAgICAgICBjb2xvcjogcmVkOworICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxs
b3c7CisgICAgICAgfQorICAgICAgIC5vcmFuZ2UgeworICAgICAgICAgICBjb2xvcjogb3Jhbmdl
OworICAgICAgIH0KKyAgICAgPC9maWxlPgorICAgICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpz
IiB0eXBlPSJwcm90cmFjdG9yIj4KKyAgICAgICB2YXIgcHMgPSBlbGVtZW50LmFsbChieS5jc3Mo
J3AnKSk7CisKKyAgICAgICBpdCgnc2hvdWxkIGxldCB5b3UgdG9nZ2xlIHRoZSBjbGFzcycsIGZ1
bmN0aW9uKCkgeworCisgICAgICAgICBleHBlY3QocHMuZmlyc3QoKS5nZXRBdHRyaWJ1dGUoJ2Ns
YXNzJykpLm5vdC50b01hdGNoKC9ib2xkLyk7CisgICAgICAgICBleHBlY3QocHMuZmlyc3QoKS5n
ZXRBdHRyaWJ1dGUoJ2NsYXNzJykpLm5vdC50b01hdGNoKC9oYXMtZXJyb3IvKTsKKworICAgICAg
ICAgZWxlbWVudChieS5tb2RlbCgnaW1wb3J0YW50JykpLmNsaWNrKCk7CisgICAgICAgICBleHBl
Y3QocHMuZmlyc3QoKS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykpLnRvTWF0Y2goL2JvbGQvKTsKKwor
ICAgICAgICAgZWxlbWVudChieS5tb2RlbCgnZXJyb3InKSkuY2xpY2soKTsKKyAgICAgICAgIGV4
cGVjdChwcy5maXJzdCgpLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSkudG9NYXRjaCgvaGFzLWVycm9y
Lyk7CisgICAgICAgfSk7CisKKyAgICAgICBpdCgnc2hvdWxkIGxldCB5b3UgdG9nZ2xlIHN0cmlu
ZyBleGFtcGxlJywgZnVuY3Rpb24oKSB7CisgICAgICAgICBleHBlY3QocHMuZ2V0KDEpLmdldEF0
dHJpYnV0ZSgnY2xhc3MnKSkudG9CZSgnJyk7CisgICAgICAgICBlbGVtZW50KGJ5Lm1vZGVsKCdz
dHlsZScpKS5jbGVhcigpOworICAgICAgICAgZWxlbWVudChieS5tb2RlbCgnc3R5bGUnKSkuc2Vu
ZEtleXMoJ3JlZCcpOworICAgICAgICAgZXhwZWN0KHBzLmdldCgxKS5nZXRBdHRyaWJ1dGUoJ2Ns
YXNzJykpLnRvQmUoJ3JlZCcpOworICAgICAgIH0pOworCisgICAgICAgaXQoJ2FycmF5IGV4YW1w
bGUgc2hvdWxkIGhhdmUgMyBjbGFzc2VzJywgZnVuY3Rpb24oKSB7CisgICAgICAgICBleHBlY3Qo
cHMuZ2V0KDIpLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSkudG9CZSgnJyk7CisgICAgICAgICBlbGVt
ZW50KGJ5Lm1vZGVsKCdzdHlsZTEnKSkuc2VuZEtleXMoJ2JvbGQnKTsKKyAgICAgICAgIGVsZW1l
bnQoYnkubW9kZWwoJ3N0eWxlMicpKS5zZW5kS2V5cygnc3RyaWtlJyk7CisgICAgICAgICBlbGVt
ZW50KGJ5Lm1vZGVsKCdzdHlsZTMnKSkuc2VuZEtleXMoJ3JlZCcpOworICAgICAgICAgZXhwZWN0
KHBzLmdldCgyKS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykpLnRvQmUoJ2JvbGQgc3RyaWtlIHJlZCcp
OworICAgICAgIH0pOworCisgICAgICAgaXQoJ2FycmF5IHdpdGggbWFwIGV4YW1wbGUgc2hvdWxk
IGhhdmUgMiBjbGFzc2VzJywgZnVuY3Rpb24oKSB7CisgICAgICAgICBleHBlY3QocHMubGFzdCgp
LmdldEF0dHJpYnV0ZSgnY2xhc3MnKSkudG9CZSgnJyk7CisgICAgICAgICBlbGVtZW50KGJ5Lm1v
ZGVsKCdzdHlsZTQnKSkuc2VuZEtleXMoJ2JvbGQnKTsKKyAgICAgICAgIGVsZW1lbnQoYnkubW9k
ZWwoJ3dhcm5pbmcnKSkuY2xpY2soKTsKKyAgICAgICAgIGV4cGVjdChwcy5sYXN0KCkuZ2V0QXR0
cmlidXRlKCdjbGFzcycpKS50b0JlKCdib2xkIG9yYW5nZScpOworICAgICAgIH0pOworICAgICA8
L2ZpbGU+CisgICA8L2V4YW1wbGU+CisKKyAgICMjIEFuaW1hdGlvbnMKKworICAgVGhlIGV4YW1w
bGUgYmVsb3cgZGVtb25zdHJhdGVzIGhvdyB0byBwZXJmb3JtIGFuaW1hdGlvbnMgdXNpbmcgbmdD
bGFzcy4KKworICAgPGV4YW1wbGUgbW9kdWxlPSJuZ0FuaW1hdGUiIGRlcHM9ImFuZ3VsYXItYW5p
bWF0ZS5qcyIgYW5pbWF0aW9ucz0idHJ1ZSI+CisgICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwi
PgorICAgICAgPGlucHV0IGlkPSJzZXRidG4iIHR5cGU9ImJ1dHRvbiIgdmFsdWU9InNldCIgbmct
Y2xpY2s9Im15VmFyPSdteS1jbGFzcyciPgorICAgICAgPGlucHV0IGlkPSJjbGVhcmJ0biIgdHlw
ZT0iYnV0dG9uIiB2YWx1ZT0iY2xlYXIiIG5nLWNsaWNrPSJteVZhcj0nJyI+CisgICAgICA8YnI+
CisgICAgICA8c3BhbiBjbGFzcz0iYmFzZS1jbGFzcyIgbmctY2xhc3M9Im15VmFyIj5TYW1wbGUg
VGV4dDwvc3Bhbj4KKyAgICAgPC9maWxlPgorICAgICA8ZmlsZSBuYW1lPSJzdHlsZS5jc3MiPgor
ICAgICAgIC5iYXNlLWNsYXNzIHsKKyAgICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjphbGwgY3Vi
aWMtYmV6aWVyKDAuMjUwLCAwLjQ2MCwgMC40NTAsIDAuOTQwKSAwLjVzOworICAgICAgICAgdHJh
bnNpdGlvbjphbGwgY3ViaWMtYmV6aWVyKDAuMjUwLCAwLjQ2MCwgMC40NTAsIDAuOTQwKSAwLjVz
OworICAgICAgIH0KKworICAgICAgIC5iYXNlLWNsYXNzLm15LWNsYXNzIHsKKyAgICAgICAgIGNv
bG9yOiByZWQ7CisgICAgICAgICBmb250LXNpemU6M2VtOworICAgICAgIH0KKyAgICAgPC9maWxl
PgorICAgICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFjdG9yIj4KKyAg
ICAgICBpdCgnc2hvdWxkIGNoZWNrIG5nLWNsYXNzJywgZnVuY3Rpb24oKSB7CisgICAgICAgICBl
eHBlY3QoZWxlbWVudChieS5jc3MoJy5iYXNlLWNsYXNzJykpLmdldEF0dHJpYnV0ZSgnY2xhc3Mn
KSkubm90LgorICAgICAgICAgICB0b01hdGNoKC9teS1jbGFzcy8pOworCisgICAgICAgICBlbGVt
ZW50KGJ5LmlkKCdzZXRidG4nKSkuY2xpY2soKTsKKworICAgICAgICAgZXhwZWN0KGVsZW1lbnQo
YnkuY3NzKCcuYmFzZS1jbGFzcycpKS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykpLgorICAgICAgICAg
ICB0b01hdGNoKC9teS1jbGFzcy8pOworCisgICAgICAgICBlbGVtZW50KGJ5LmlkKCdjbGVhcmJ0
bicpKS5jbGljaygpOworCisgICAgICAgICBleHBlY3QoZWxlbWVudChieS5jc3MoJy5iYXNlLWNs
YXNzJykpLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSkubm90LgorICAgICAgICAgICB0b01hdGNoKC9t
eS1jbGFzcy8pOworICAgICAgIH0pOworICAgICA8L2ZpbGU+CisgICA8L2V4YW1wbGU+CisKKwor
ICAgIyMgbmdDbGFzcyBhbmQgcHJlLWV4aXN0aW5nIENTUzMgVHJhbnNpdGlvbnMvQW5pbWF0aW9u
cworICAgVGhlIG5nQ2xhc3MgZGlyZWN0aXZlIHN0aWxsIHN1cHBvcnRzIENTUzMgVHJhbnNpdGlv
bnMvQW5pbWF0aW9ucyBldmVuIGlmIHRoZXkgZG8gbm90IGZvbGxvdyB0aGUgbmdBbmltYXRlIENT
UyBuYW1pbmcgc3RydWN0dXJlLgorICAgVXBvbiBhbmltYXRpb24gbmdBbmltYXRlIHdpbGwgYXBw
bHkgc3VwcGxlbWVudGFyeSBDU1MgY2xhc3NlcyB0byB0cmFjayB0aGUgc3RhcnQgYW5kIGVuZCBv
ZiBhbiBhbmltYXRpb24sIGJ1dCB0aGlzIHdpbGwgbm90IGhpbmRlcgorICAgYW55IHByZS1leGlz
dGluZyBDU1MgdHJhbnNpdGlvbnMgYWxyZWFkeSBvbiB0aGUgZWxlbWVudC4gVG8gZ2V0IGFuIGlk
ZWEgb2Ygd2hhdCBoYXBwZW5zIGR1cmluZyBhIGNsYXNzLWJhc2VkIGFuaW1hdGlvbiwgYmUgc3Vy
ZQorICAgdG8gdmlldyB0aGUgc3RlcCBieSBzdGVwIGRldGFpbHMgb2Yge0BsaW5rICRhbmltYXRl
I2FkZENsYXNzICRhbmltYXRlLmFkZENsYXNzfSBhbmQKKyAgIHtAbGluayAkYW5pbWF0ZSNyZW1v
dmVDbGFzcyAkYW5pbWF0ZS5yZW1vdmVDbGFzc30uCisgKi8KK3ZhciBuZ0NsYXNzRGlyZWN0aXZl
ID0gY2xhc3NEaXJlY3RpdmUoJycsIHRydWUpOworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUK
KyAqIEBuYW1lIG5nQ2xhc3NPZGQKKyAqIEByZXN0cmljdCBBQworICoKKyAqIEBkZXNjcmlwdGlv
bgorICogVGhlIGBuZ0NsYXNzT2RkYCBhbmQgYG5nQ2xhc3NFdmVuYCBkaXJlY3RpdmVzIHdvcmsg
ZXhhY3RseSBhcworICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0NsYXNzIG5nQ2xhc3N9LCBleGNl
cHQgdGhleSB3b3JrIGluCisgKiBjb25qdW5jdGlvbiB3aXRoIGBuZ1JlcGVhdGAgYW5kIHRha2Ug
ZWZmZWN0IG9ubHkgb24gb2RkIChldmVuKSByb3dzLgorICoKKyAqIFRoaXMgZGlyZWN0aXZlIGNh
biBiZSBhcHBsaWVkIG9ubHkgd2l0aGluIHRoZSBzY29wZSBvZiBhbgorICoge0BsaW5rIG5nLmRp
cmVjdGl2ZTpuZ1JlcGVhdCBuZ1JlcGVhdH0uCisgKgorICogQGVsZW1lbnQgQU5ZCisgKiBAcGFy
YW0ge2V4cHJlc3Npb259IG5nQ2xhc3NPZGQge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVz
c2lvbn0gdG8gZXZhbC4gVGhlIHJlc3VsdAorICogICBvZiB0aGUgZXZhbHVhdGlvbiBjYW4gYmUg
YSBzdHJpbmcgcmVwcmVzZW50aW5nIHNwYWNlIGRlbGltaXRlZCBjbGFzcyBuYW1lcyBvciBhbiBh
cnJheS4KKyAqCisgKiBAZXhhbXBsZQorICAgPGV4YW1wbGU+CisgICAgIDxmaWxlIG5hbWU9Imlu
ZGV4Lmh0bWwiPgorICAgICAgICA8b2wgbmctaW5pdD0ibmFtZXM9WydKb2huJywgJ01hcnknLCAn
Q2F0ZScsICdTdXonXSI+CisgICAgICAgICAgPGxpIG5nLXJlcGVhdD0ibmFtZSBpbiBuYW1lcyI+
CisgICAgICAgICAgIDxzcGFuIG5nLWNsYXNzLW9kZD0iJ29kZCciIG5nLWNsYXNzLWV2ZW49Iidl
dmVuJyI+CisgICAgICAgICAgICAge3tuYW1lfX0KKyAgICAgICAgICAgPC9zcGFuPgorICAgICAg
ICAgIDwvbGk+CisgICAgICAgIDwvb2w+CisgICAgIDwvZmlsZT4KKyAgICAgPGZpbGUgbmFtZT0i
c3R5bGUuY3NzIj4KKyAgICAgICAub2RkIHsKKyAgICAgICAgIGNvbG9yOiByZWQ7CisgICAgICAg
fQorICAgICAgIC5ldmVuIHsKKyAgICAgICAgIGNvbG9yOiBibHVlOworICAgICAgIH0KKyAgICAg
PC9maWxlPgorICAgICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFjdG9y
Ij4KKyAgICAgICBpdCgnc2hvdWxkIGNoZWNrIG5nLWNsYXNzLW9kZCBhbmQgbmctY2xhc3MtZXZl
bicsIGZ1bmN0aW9uKCkgeworICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkucmVwZWF0ZXIoJ25h
bWUgaW4gbmFtZXMnKS5yb3coMCkuY29sdW1uKCduYW1lJykpLmdldEF0dHJpYnV0ZSgnY2xhc3Mn
KSkuCisgICAgICAgICAgIHRvTWF0Y2goL29kZC8pOworICAgICAgICAgZXhwZWN0KGVsZW1lbnQo
YnkucmVwZWF0ZXIoJ25hbWUgaW4gbmFtZXMnKS5yb3coMSkuY29sdW1uKCduYW1lJykpLmdldEF0
dHJpYnV0ZSgnY2xhc3MnKSkuCisgICAgICAgICAgIHRvTWF0Y2goL2V2ZW4vKTsKKyAgICAgICB9
KTsKKyAgICAgPC9maWxlPgorICAgPC9leGFtcGxlPgorICovCit2YXIgbmdDbGFzc09kZERpcmVj
dGl2ZSA9IGNsYXNzRGlyZWN0aXZlKCdPZGQnLCAwKTsKKworLyoqCisgKiBAbmdkb2MgZGlyZWN0
aXZlCisgKiBAbmFtZSBuZ0NsYXNzRXZlbgorICogQHJlc3RyaWN0IEFDCisgKgorICogQGRlc2Ny
aXB0aW9uCisgKiBUaGUgYG5nQ2xhc3NPZGRgIGFuZCBgbmdDbGFzc0V2ZW5gIGRpcmVjdGl2ZXMg
d29yayBleGFjdGx5IGFzCisgKiB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nQ2xhc3MgbmdDbGFzc30s
IGV4Y2VwdCB0aGV5IHdvcmsgaW4KKyAqIGNvbmp1bmN0aW9uIHdpdGggYG5nUmVwZWF0YCBhbmQg
dGFrZSBlZmZlY3Qgb25seSBvbiBvZGQgKGV2ZW4pIHJvd3MuCisgKgorICogVGhpcyBkaXJlY3Rp
dmUgY2FuIGJlIGFwcGxpZWQgb25seSB3aXRoaW4gdGhlIHNjb3BlIG9mIGFuCisgKiB7QGxpbmsg
bmcuZGlyZWN0aXZlOm5nUmVwZWF0IG5nUmVwZWF0fS4KKyAqCisgKiBAZWxlbWVudCBBTlkKKyAq
IEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdDbGFzc0V2ZW4ge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24g
RXhwcmVzc2lvbn0gdG8gZXZhbC4gVGhlCisgKiAgIHJlc3VsdCBvZiB0aGUgZXZhbHVhdGlvbiBj
YW4gYmUgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHNwYWNlIGRlbGltaXRlZCBjbGFzcyBuYW1lcyBv
ciBhbiBhcnJheS4KKyAqCisgKiBAZXhhbXBsZQorICAgPGV4YW1wbGU+CisgICAgIDxmaWxlIG5h
bWU9ImluZGV4Lmh0bWwiPgorICAgICAgICA8b2wgbmctaW5pdD0ibmFtZXM9WydKb2huJywgJ01h
cnknLCAnQ2F0ZScsICdTdXonXSI+CisgICAgICAgICAgPGxpIG5nLXJlcGVhdD0ibmFtZSBpbiBu
YW1lcyI+CisgICAgICAgICAgIDxzcGFuIG5nLWNsYXNzLW9kZD0iJ29kZCciIG5nLWNsYXNzLWV2
ZW49IidldmVuJyI+CisgICAgICAgICAgICAge3tuYW1lfX0gJm5ic3A7ICZuYnNwOyAmbmJzcDsK
KyAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgIDwvbGk+CisgICAgICAgIDwvb2w+CisgICAg
IDwvZmlsZT4KKyAgICAgPGZpbGUgbmFtZT0ic3R5bGUuY3NzIj4KKyAgICAgICAub2RkIHsKKyAg
ICAgICAgIGNvbG9yOiByZWQ7CisgICAgICAgfQorICAgICAgIC5ldmVuIHsKKyAgICAgICAgIGNv
bG9yOiBibHVlOworICAgICAgIH0KKyAgICAgPC9maWxlPgorICAgICA8ZmlsZSBuYW1lPSJwcm90
cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFjdG9yIj4KKyAgICAgICBpdCgnc2hvdWxkIGNoZWNrIG5n
LWNsYXNzLW9kZCBhbmQgbmctY2xhc3MtZXZlbicsIGZ1bmN0aW9uKCkgeworICAgICAgICAgZXhw
ZWN0KGVsZW1lbnQoYnkucmVwZWF0ZXIoJ25hbWUgaW4gbmFtZXMnKS5yb3coMCkuY29sdW1uKCdu
YW1lJykpLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSkuCisgICAgICAgICAgIHRvTWF0Y2goL29kZC8p
OworICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkucmVwZWF0ZXIoJ25hbWUgaW4gbmFtZXMnKS5y
b3coMSkuY29sdW1uKCduYW1lJykpLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSkuCisgICAgICAgICAg
IHRvTWF0Y2goL2V2ZW4vKTsKKyAgICAgICB9KTsKKyAgICAgPC9maWxlPgorICAgPC9leGFtcGxl
PgorICovCit2YXIgbmdDbGFzc0V2ZW5EaXJlY3RpdmUgPSBjbGFzc0RpcmVjdGl2ZSgnRXZlbics
IDEpOworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1lIG5nQ2xvYWsKKyAqIEBy
ZXN0cmljdCBBQworICoKKyAqIEBkZXNjcmlwdGlvbgorICogVGhlIGBuZ0Nsb2FrYCBkaXJlY3Rp
dmUgaXMgdXNlZCB0byBwcmV2ZW50IHRoZSBBbmd1bGFyIGh0bWwgdGVtcGxhdGUgZnJvbSBiZWlu
ZyBicmllZmx5CisgKiBkaXNwbGF5ZWQgYnkgdGhlIGJyb3dzZXIgaW4gaXRzIHJhdyAodW5jb21w
aWxlZCkgZm9ybSB3aGlsZSB5b3VyIGFwcGxpY2F0aW9uIGlzIGxvYWRpbmcuIFVzZSB0aGlzCisg
KiBkaXJlY3RpdmUgdG8gYXZvaWQgdGhlIHVuZGVzaXJhYmxlIGZsaWNrZXIgZWZmZWN0IGNhdXNl
ZCBieSB0aGUgaHRtbCB0ZW1wbGF0ZSBkaXNwbGF5LgorICoKKyAqIFRoZSBkaXJlY3RpdmUgY2Fu
IGJlIGFwcGxpZWQgdG8gdGhlIGA8Ym9keT5gIGVsZW1lbnQsIGJ1dCB0aGUgcHJlZmVycmVkIHVz
YWdlIGlzIHRvIGFwcGx5CisgKiBtdWx0aXBsZSBgbmdDbG9ha2AgZGlyZWN0aXZlcyB0byBzbWFs
bCBwb3J0aW9ucyBvZiB0aGUgcGFnZSB0byBwZXJtaXQgcHJvZ3Jlc3NpdmUgcmVuZGVyaW5nCisg
KiBvZiB0aGUgYnJvd3NlciB2aWV3LgorICoKKyAqIGBuZ0Nsb2FrYCB3b3JrcyBpbiBjb29wZXJh
dGlvbiB3aXRoIHRoZSBmb2xsb3dpbmcgY3NzIHJ1bGUgZW1iZWRkZWQgd2l0aGluIGBhbmd1bGFy
LmpzYCBhbmQKKyAqIGBhbmd1bGFyLm1pbi5qc2AuCisgKiBGb3IgQ1NQIG1vZGUgcGxlYXNlIGFk
ZCBgYW5ndWxhci1jc3AuY3NzYCB0byB5b3VyIGh0bWwgZmlsZSAoc2VlIHtAbGluayBuZy5kaXJl
Y3RpdmU6bmdDc3AgbmdDc3B9KS4KKyAqCisgKiBgYGBjc3MKKyAqIFtuZ1w6Y2xvYWtdLCBbbmct
Y2xvYWtdLCBbZGF0YS1uZy1jbG9ha10sIFt4LW5nLWNsb2FrXSwgLm5nLWNsb2FrLCAueC1uZy1j
bG9hayB7CisgKiAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKKyAqIH0KKyAqIGBgYAorICoK
KyAqIFdoZW4gdGhpcyBjc3MgcnVsZSBpcyBsb2FkZWQgYnkgdGhlIGJyb3dzZXIsIGFsbCBodG1s
IGVsZW1lbnRzIChpbmNsdWRpbmcgdGhlaXIgY2hpbGRyZW4pIHRoYXQKKyAqIGFyZSB0YWdnZWQg
d2l0aCB0aGUgYG5nQ2xvYWtgIGRpcmVjdGl2ZSBhcmUgaGlkZGVuLiBXaGVuIEFuZ3VsYXIgZW5j
b3VudGVycyB0aGlzIGRpcmVjdGl2ZQorICogZHVyaW5nIHRoZSBjb21waWxhdGlvbiBvZiB0aGUg
dGVtcGxhdGUgaXQgZGVsZXRlcyB0aGUgYG5nQ2xvYWtgIGVsZW1lbnQgYXR0cmlidXRlLCBtYWtp
bmcKKyAqIHRoZSBjb21waWxlZCBlbGVtZW50IHZpc2libGUuCisgKgorICogRm9yIHRoZSBiZXN0
IHJlc3VsdCwgdGhlIGBhbmd1bGFyLmpzYCBzY3JpcHQgbXVzdCBiZSBsb2FkZWQgaW4gdGhlIGhl
YWQgc2VjdGlvbiBvZiB0aGUgaHRtbAorICogZG9jdW1lbnQ7IGFsdGVybmF0aXZlbHksIHRoZSBj
c3MgcnVsZSBhYm92ZSBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBleHRlcm5hbCBzdHlsZXNoZWV0
IG9mIHRoZQorICogYXBwbGljYXRpb24uCisgKgorICogQGVsZW1lbnQgQU5ZCisgKgorICogQGV4
YW1wbGUKKyAgIDxleGFtcGxlPgorICAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAg
ICAgPGRpdiBpZD0idGVtcGxhdGUxIiBuZy1jbG9haz57eyAnaGVsbG8nIH19PC9kaXY+CisgICAg
ICAgIDxkaXYgaWQ9InRlbXBsYXRlMiIgY2xhc3M9Im5nLWNsb2FrIj57eyAnd29ybGQnIH19PC9k
aXY+CisgICAgIDwvZmlsZT4KKyAgICAgPGZpbGUgbmFtZT0icHJvdHJhY3Rvci5qcyIgdHlwZT0i
cHJvdHJhY3RvciI+CisgICAgICAgaXQoJ3Nob3VsZCByZW1vdmUgdGhlIHRlbXBsYXRlIGRpcmVj
dGl2ZSBhbmQgY3NzIGNsYXNzJywgZnVuY3Rpb24oKSB7CisgICAgICAgICBleHBlY3QoJCgnI3Rl
bXBsYXRlMScpLmdldEF0dHJpYnV0ZSgnbmctY2xvYWsnKSkuCisgICAgICAgICAgIHRvQmVOdWxs
KCk7CisgICAgICAgICBleHBlY3QoJCgnI3RlbXBsYXRlMicpLmdldEF0dHJpYnV0ZSgnbmctY2xv
YWsnKSkuCisgICAgICAgICAgIHRvQmVOdWxsKCk7CisgICAgICAgfSk7CisgICAgIDwvZmlsZT4K
KyAgIDwvZXhhbXBsZT4KKyAqCisgKi8KK3ZhciBuZ0Nsb2FrRGlyZWN0aXZlID0gbmdEaXJlY3Rp
dmUoeworICBjb21waWxlOiBmdW5jdGlvbihlbGVtZW50LCBhdHRyKSB7CisgICAgYXR0ci4kc2V0
KCduZ0Nsb2FrJywgdW5kZWZpbmVkKTsKKyAgICBlbGVtZW50LnJlbW92ZUNsYXNzKCduZy1jbG9h
aycpOworICB9Cit9KTsKKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBuZ0Nv
bnRyb2xsZXIKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFRoZSBgbmdDb250cm9sbGVyYCBkaXJl
Y3RpdmUgYXR0YWNoZXMgYSBjb250cm9sbGVyIGNsYXNzIHRvIHRoZSB2aWV3LiBUaGlzIGlzIGEg
a2V5IGFzcGVjdCBvZiBob3cgYW5ndWxhcgorICogc3VwcG9ydHMgdGhlIHByaW5jaXBsZXMgYmVo
aW5kIHRoZSBNb2RlbC1WaWV3LUNvbnRyb2xsZXIgZGVzaWduIHBhdHRlcm4uCisgKgorICogTVZD
IGNvbXBvbmVudHMgaW4gYW5ndWxhcjoKKyAqCisgKiAqIE1vZGVsIOKAlCBNb2RlbHMgYXJlIHRo
ZSBwcm9wZXJ0aWVzIG9mIGEgc2NvcGU7IHNjb3BlcyBhcmUgYXR0YWNoZWQgdG8gdGhlIERPTSB3
aGVyZSBzY29wZSBwcm9wZXJ0aWVzCisgKiAgIGFyZSBhY2Nlc3NlZCB0aHJvdWdoIGJpbmRpbmdz
LgorICogKiBWaWV3IOKAlCBUaGUgdGVtcGxhdGUgKEhUTUwgd2l0aCBkYXRhIGJpbmRpbmdzKSB0
aGF0IGlzIHJlbmRlcmVkIGludG8gdGhlIFZpZXcuCisgKiAqIENvbnRyb2xsZXIg4oCUIFRoZSBg
bmdDb250cm9sbGVyYCBkaXJlY3RpdmUgc3BlY2lmaWVzIGEgQ29udHJvbGxlciBjbGFzczsgdGhl
IGNsYXNzIGNvbnRhaW5zIGJ1c2luZXNzCisgKiAgIGxvZ2ljIGJlaGluZCB0aGUgYXBwbGljYXRp
b24gdG8gZGVjb3JhdGUgdGhlIHNjb3BlIHdpdGggZnVuY3Rpb25zIGFuZCB2YWx1ZXMKKyAqCisg
KiBOb3RlIHRoYXQgeW91IGNhbiBhbHNvIGF0dGFjaCBjb250cm9sbGVycyB0byB0aGUgRE9NIGJ5
IGRlY2xhcmluZyBpdCBpbiBhIHJvdXRlIGRlZmluaXRpb24KKyAqIHZpYSB0aGUge0BsaW5rIG5n
Um91dGUuJHJvdXRlICRyb3V0ZX0gc2VydmljZS4gQSBjb21tb24gbWlzdGFrZSBpcyB0byBkZWNs
YXJlIHRoZSBjb250cm9sbGVyCisgKiBhZ2FpbiB1c2luZyBgbmctY29udHJvbGxlcmAgaW4gdGhl
IHRlbXBsYXRlIGl0c2VsZi4gIFRoaXMgd2lsbCBjYXVzZSB0aGUgY29udHJvbGxlciB0byBiZSBh
dHRhY2hlZAorICogYW5kIGV4ZWN1dGVkIHR3aWNlLgorICoKKyAqIEBlbGVtZW50IEFOWQorICog
QHNjb3BlCisgKiBAcHJpb3JpdHkgNTAwCisgKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nQ29udHJv
bGxlciBOYW1lIG9mIGEgY29uc3RydWN0b3IgZnVuY3Rpb24gcmVnaXN0ZXJlZCB3aXRoIHRoZSBj
dXJyZW50CisgKiB7QGxpbmsgbmcuJGNvbnRyb2xsZXJQcm92aWRlciAkY29udHJvbGxlclByb3Zp
ZGVyfSBvciBhbiB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBleHByZXNzaW9ufQorICogdGhhdCBv
biB0aGUgY3VycmVudCBzY29wZSBldmFsdWF0ZXMgdG8gYSBjb25zdHJ1Y3RvciBmdW5jdGlvbi4K
KyAqCisgKiBUaGUgY29udHJvbGxlciBpbnN0YW5jZSBjYW4gYmUgcHVibGlzaGVkIGludG8gYSBz
Y29wZSBwcm9wZXJ0eSBieSBzcGVjaWZ5aW5nCisgKiBgbmctY29udHJvbGxlcj0iYXMgcHJvcGVy
dHlOYW1lImAuCisgKgorICogSWYgdGhlIGN1cnJlbnQgYCRjb250cm9sbGVyUHJvdmlkZXJgIGlz
IGNvbmZpZ3VyZWQgdG8gdXNlIGdsb2JhbHMgKHZpYQorICoge0BsaW5rIG5nLiRjb250cm9sbGVy
UHJvdmlkZXIjYWxsb3dHbG9iYWxzIGAkY29udHJvbGxlclByb3ZpZGVyLmFsbG93R2xvYmFscygp
YCB9KSwgdGhpcyBtYXkKKyAqIGFsc28gYmUgdGhlIG5hbWUgb2YgYSBnbG9iYWxseSBhY2Nlc3Np
YmxlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIChub3QgcmVjb21tZW5kZWQpLgorICoKKyAqIEBleGFt
cGxlCisgKiBIZXJlIGlzIGEgc2ltcGxlIGZvcm0gZm9yIGVkaXRpbmcgdXNlciBjb250YWN0IGlu
Zm9ybWF0aW9uLiBBZGRpbmcsIHJlbW92aW5nLCBjbGVhcmluZywgYW5kCisgKiBncmVldGluZyBh
cmUgbWV0aG9kcyBkZWNsYXJlZCBvbiB0aGUgY29udHJvbGxlciAoc2VlIHNvdXJjZSB0YWIpLiBU
aGVzZSBtZXRob2RzIGNhbgorICogZWFzaWx5IGJlIGNhbGxlZCBmcm9tIHRoZSBhbmd1bGFyIG1h
cmt1cC4gQW55IGNoYW5nZXMgdG8gdGhlIGRhdGEgYXJlIGF1dG9tYXRpY2FsbHkgcmVmbGVjdGVk
CisgKiBpbiB0aGUgVmlldyB3aXRob3V0IHRoZSBuZWVkIGZvciBhIG1hbnVhbCB1cGRhdGUuCisg
KgorICogVHdvIGRpZmZlcmVudCBkZWNsYXJhdGlvbiBzdHlsZXMgYXJlIGluY2x1ZGVkIGJlbG93
OgorICoKKyAqICogb25lIGJpbmRzIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMgZGlyZWN0bHkgb250
byB0aGUgY29udHJvbGxlciB1c2luZyBgdGhpc2A6CisgKiBgbmctY29udHJvbGxlcj0iU2V0dGlu
Z3NDb250cm9sbGVyMSBhcyBzZXR0aW5ncyJgCisgKiAqIG9uZSBpbmplY3RzIGAkc2NvcGVgIGlu
dG8gdGhlIGNvbnRyb2xsZXI6CisgKiBgbmctY29udHJvbGxlcj0iU2V0dGluZ3NDb250cm9sbGVy
MiJgCisgKgorICogVGhlIHNlY29uZCBvcHRpb24gaXMgbW9yZSBjb21tb24gaW4gdGhlIEFuZ3Vs
YXIgY29tbXVuaXR5LCBhbmQgaXMgZ2VuZXJhbGx5IHVzZWQgaW4gYm9pbGVycGxhdGVzCisgKiBh
bmQgaW4gdGhpcyBndWlkZS4gSG93ZXZlciwgdGhlcmUgYXJlIGFkdmFudGFnZXMgdG8gYmluZGlu
ZyBwcm9wZXJ0aWVzIGRpcmVjdGx5IHRvIHRoZSBjb250cm9sbGVyCisgKiBhbmQgYXZvaWRpbmcg
c2NvcGUuCisgKgorICogKiBVc2luZyBgY29udHJvbGxlciBhc2AgbWFrZXMgaXQgb2J2aW91cyB3
aGljaCBjb250cm9sbGVyIHlvdSBhcmUgYWNjZXNzaW5nIGluIHRoZSB0ZW1wbGF0ZSB3aGVuCisg
KiBtdWx0aXBsZSBjb250cm9sbGVycyBhcHBseSB0byBhbiBlbGVtZW50LgorICogKiBJZiB5b3Ug
YXJlIHdyaXRpbmcgeW91ciBjb250cm9sbGVycyBhcyBjbGFzc2VzIHlvdSBoYXZlIGVhc2llciBh
Y2Nlc3MgdG8gdGhlIHByb3BlcnRpZXMgYW5kCisgKiBtZXRob2RzLCB3aGljaCB3aWxsIGFwcGVh
ciBvbiB0aGUgc2NvcGUsIGZyb20gaW5zaWRlIHRoZSBjb250cm9sbGVyIGNvZGUuCisgKiAqIFNp
bmNlIHRoZXJlIGlzIGFsd2F5cyBhIGAuYCBpbiB0aGUgYmluZGluZ3MsIHlvdSBkb24ndCBoYXZl
IHRvIHdvcnJ5IGFib3V0IHByb3RvdHlwYWwKKyAqIGluaGVyaXRhbmNlIG1hc2tpbmcgcHJpbWl0
aXZlcy4KKyAqCisgKiBUaGlzIGV4YW1wbGUgZGVtb25zdHJhdGVzIHRoZSBgY29udHJvbGxlciBh
c2Agc3ludGF4LgorICoKKyAqIDxleGFtcGxlIG5hbWU9Im5nQ29udHJvbGxlckFzIiBtb2R1bGU9
ImNvbnRyb2xsZXJBc0V4YW1wbGUiPgorICogICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAq
ICAgIDxkaXYgaWQ9ImN0cmwtYXMtZXhtcGwiIG5nLWNvbnRyb2xsZXI9IlNldHRpbmdzQ29udHJv
bGxlcjEgYXMgc2V0dGluZ3MiPgorICogICAgICA8bGFiZWw+TmFtZTogPGlucHV0IHR5cGU9InRl
eHQiIG5nLW1vZGVsPSJzZXR0aW5ncy5uYW1lIi8+PC9sYWJlbD4KKyAqICAgICAgPGJ1dHRvbiBu
Zy1jbGljaz0ic2V0dGluZ3MuZ3JlZXQoKSI+Z3JlZXQ8L2J1dHRvbj48YnIvPgorICogICAgICBD
b250YWN0OgorICogICAgICA8dWw+CisgKiAgICAgICAgPGxpIG5nLXJlcGVhdD0iY29udGFjdCBp
biBzZXR0aW5ncy5jb250YWN0cyI+CisgKiAgICAgICAgICA8c2VsZWN0IG5nLW1vZGVsPSJjb250
YWN0LnR5cGUiIGFyaWEtbGFiZWw9IkNvbnRhY3QgbWV0aG9kIiBpZD0ic2VsZWN0X3t7JGluZGV4
fX0iPgorICogICAgICAgICAgICAgPG9wdGlvbj5waG9uZTwvb3B0aW9uPgorICogICAgICAgICAg
ICAgPG9wdGlvbj5lbWFpbDwvb3B0aW9uPgorICogICAgICAgICAgPC9zZWxlY3Q+CisgKiAgICAg
ICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmctbW9kZWw9ImNvbnRhY3QudmFsdWUiIGFyaWEtbGFi
ZWxsZWRieT0ic2VsZWN0X3t7JGluZGV4fX0iIC8+CisgKiAgICAgICAgICA8YnV0dG9uIG5nLWNs
aWNrPSJzZXR0aW5ncy5jbGVhckNvbnRhY3QoY29udGFjdCkiPmNsZWFyPC9idXR0b24+CisgKiAg
ICAgICAgICA8YnV0dG9uIG5nLWNsaWNrPSJzZXR0aW5ncy5yZW1vdmVDb250YWN0KGNvbnRhY3Qp
IiBhcmlhLWxhYmVsPSJSZW1vdmUiPlg8L2J1dHRvbj4KKyAqICAgICAgICA8L2xpPgorICogICAg
ICAgIDxsaT48YnV0dG9uIG5nLWNsaWNrPSJzZXR0aW5ncy5hZGRDb250YWN0KCkiPmFkZDwvYnV0
dG9uPjwvbGk+CisgKiAgICAgPC91bD4KKyAqICAgIDwvZGl2PgorICogICA8L2ZpbGU+CisgKiAg
IDxmaWxlIG5hbWU9ImFwcC5qcyI+CisgKiAgICBhbmd1bGFyLm1vZHVsZSgnY29udHJvbGxlckFz
RXhhbXBsZScsIFtdKQorICogICAgICAuY29udHJvbGxlcignU2V0dGluZ3NDb250cm9sbGVyMScs
IFNldHRpbmdzQ29udHJvbGxlcjEpOworICoKKyAqICAgIGZ1bmN0aW9uIFNldHRpbmdzQ29udHJv
bGxlcjEoKSB7CisgKiAgICAgIHRoaXMubmFtZSA9ICJKb2huIFNtaXRoIjsKKyAqICAgICAgdGhp
cy5jb250YWN0cyA9IFsKKyAqICAgICAgICB7dHlwZTogJ3Bob25lJywgdmFsdWU6ICc0MDggNTU1
IDEyMTInfSwKKyAqICAgICAgICB7dHlwZTogJ2VtYWlsJywgdmFsdWU6ICdqb2huLnNtaXRoQGV4
YW1wbGUub3JnJ30gXTsKKyAqICAgIH0KKyAqCisgKiAgICBTZXR0aW5nc0NvbnRyb2xsZXIxLnBy
b3RvdHlwZS5ncmVldCA9IGZ1bmN0aW9uKCkgeworICogICAgICBhbGVydCh0aGlzLm5hbWUpOwor
ICogICAgfTsKKyAqCisgKiAgICBTZXR0aW5nc0NvbnRyb2xsZXIxLnByb3RvdHlwZS5hZGRDb250
YWN0ID0gZnVuY3Rpb24oKSB7CisgKiAgICAgIHRoaXMuY29udGFjdHMucHVzaCh7dHlwZTogJ2Vt
YWlsJywgdmFsdWU6ICd5b3VybmFtZUBleGFtcGxlLm9yZyd9KTsKKyAqICAgIH07CisgKgorICog
ICAgU2V0dGluZ3NDb250cm9sbGVyMS5wcm90b3R5cGUucmVtb3ZlQ29udGFjdCA9IGZ1bmN0aW9u
KGNvbnRhY3RUb1JlbW92ZSkgeworICogICAgIHZhciBpbmRleCA9IHRoaXMuY29udGFjdHMuaW5k
ZXhPZihjb250YWN0VG9SZW1vdmUpOworICogICAgICB0aGlzLmNvbnRhY3RzLnNwbGljZShpbmRl
eCwgMSk7CisgKiAgICB9OworICoKKyAqICAgIFNldHRpbmdzQ29udHJvbGxlcjEucHJvdG90eXBl
LmNsZWFyQ29udGFjdCA9IGZ1bmN0aW9uKGNvbnRhY3QpIHsKKyAqICAgICAgY29udGFjdC50eXBl
ID0gJ3Bob25lJzsKKyAqICAgICAgY29udGFjdC52YWx1ZSA9ICcnOworICogICAgfTsKKyAqICAg
PC9maWxlPgorICogICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFjdG9y
Ij4KKyAqICAgICBpdCgnc2hvdWxkIGNoZWNrIGNvbnRyb2xsZXIgYXMnLCBmdW5jdGlvbigpIHsK
KyAqICAgICAgIHZhciBjb250YWluZXIgPSBlbGVtZW50KGJ5LmlkKCdjdHJsLWFzLWV4bXBsJykp
OworICogICAgICAgICBleHBlY3QoY29udGFpbmVyLmVsZW1lbnQoYnkubW9kZWwoJ3NldHRpbmdz
Lm5hbWUnKSkKKyAqICAgICAgICAgICAuZ2V0QXR0cmlidXRlKCd2YWx1ZScpKS50b0JlKCdKb2hu
IFNtaXRoJyk7CisgKgorICogICAgICAgdmFyIGZpcnN0UmVwZWF0ID0KKyAqICAgICAgICAgICBj
b250YWluZXIuZWxlbWVudChieS5yZXBlYXRlcignY29udGFjdCBpbiBzZXR0aW5ncy5jb250YWN0
cycpLnJvdygwKSk7CisgKiAgICAgICB2YXIgc2Vjb25kUmVwZWF0ID0KKyAqICAgICAgICAgICBj
b250YWluZXIuZWxlbWVudChieS5yZXBlYXRlcignY29udGFjdCBpbiBzZXR0aW5ncy5jb250YWN0
cycpLnJvdygxKSk7CisgKgorICogICAgICAgZXhwZWN0KGZpcnN0UmVwZWF0LmVsZW1lbnQoYnku
bW9kZWwoJ2NvbnRhY3QudmFsdWUnKSkuZ2V0QXR0cmlidXRlKCd2YWx1ZScpKQorICogICAgICAg
ICAgIC50b0JlKCc0MDggNTU1IDEyMTInKTsKKyAqCisgKiAgICAgICBleHBlY3Qoc2Vjb25kUmVw
ZWF0LmVsZW1lbnQoYnkubW9kZWwoJ2NvbnRhY3QudmFsdWUnKSkuZ2V0QXR0cmlidXRlKCd2YWx1
ZScpKQorICogICAgICAgICAgIC50b0JlKCdqb2huLnNtaXRoQGV4YW1wbGUub3JnJyk7CisgKgor
ICogICAgICAgZmlyc3RSZXBlYXQuZWxlbWVudChieS5idXR0b25UZXh0KCdjbGVhcicpKS5jbGlj
aygpOworICoKKyAqICAgICAgIGV4cGVjdChmaXJzdFJlcGVhdC5lbGVtZW50KGJ5Lm1vZGVsKCdj
b250YWN0LnZhbHVlJykpLmdldEF0dHJpYnV0ZSgndmFsdWUnKSkKKyAqICAgICAgICAgICAudG9C
ZSgnJyk7CisgKgorICogICAgICAgY29udGFpbmVyLmVsZW1lbnQoYnkuYnV0dG9uVGV4dCgnYWRk
JykpLmNsaWNrKCk7CisgKgorICogICAgICAgZXhwZWN0KGNvbnRhaW5lci5lbGVtZW50KGJ5LnJl
cGVhdGVyKCdjb250YWN0IGluIHNldHRpbmdzLmNvbnRhY3RzJykucm93KDIpKQorICogICAgICAg
ICAgIC5lbGVtZW50KGJ5Lm1vZGVsKCdjb250YWN0LnZhbHVlJykpCisgKiAgICAgICAgICAgLmdl
dEF0dHJpYnV0ZSgndmFsdWUnKSkKKyAqICAgICAgICAgICAudG9CZSgneW91cm5hbWVAZXhhbXBs
ZS5vcmcnKTsKKyAqICAgICB9KTsKKyAqICAgPC9maWxlPgorICogPC9leGFtcGxlPgorICoKKyAq
IFRoaXMgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgdGhlICJhdHRhY2ggdG8gYCRzY29wZWAiIHN0eWxl
IG9mIGNvbnRyb2xsZXIuCisgKgorICogPGV4YW1wbGUgbmFtZT0ibmdDb250cm9sbGVyIiBtb2R1
bGU9ImNvbnRyb2xsZXJFeGFtcGxlIj4KKyAqICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAq
ICAgPGRpdiBpZD0iY3RybC1leG1wbCIgbmctY29udHJvbGxlcj0iU2V0dGluZ3NDb250cm9sbGVy
MiI+CisgKiAgICAgPGxhYmVsPk5hbWU6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuZy1tb2RlbD0ibmFt
ZSIvPjwvbGFiZWw+CisgKiAgICAgPGJ1dHRvbiBuZy1jbGljaz0iZ3JlZXQoKSI+Z3JlZXQ8L2J1
dHRvbj48YnIvPgorICogICAgIENvbnRhY3Q6CisgKiAgICAgPHVsPgorICogICAgICAgPGxpIG5n
LXJlcGVhdD0iY29udGFjdCBpbiBjb250YWN0cyI+CisgKiAgICAgICAgIDxzZWxlY3QgbmctbW9k
ZWw9ImNvbnRhY3QudHlwZSIgaWQ9InNlbGVjdF97eyRpbmRleH19Ij4KKyAqICAgICAgICAgICAg
PG9wdGlvbj5waG9uZTwvb3B0aW9uPgorICogICAgICAgICAgICA8b3B0aW9uPmVtYWlsPC9vcHRp
b24+CisgKiAgICAgICAgIDwvc2VsZWN0PgorICogICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIg
bmctbW9kZWw9ImNvbnRhY3QudmFsdWUiIGFyaWEtbGFiZWxsZWRieT0ic2VsZWN0X3t7JGluZGV4
fX0iIC8+CisgKiAgICAgICAgIDxidXR0b24gbmctY2xpY2s9ImNsZWFyQ29udGFjdChjb250YWN0
KSI+Y2xlYXI8L2J1dHRvbj4KKyAqICAgICAgICAgPGJ1dHRvbiBuZy1jbGljaz0icmVtb3ZlQ29u
dGFjdChjb250YWN0KSI+WDwvYnV0dG9uPgorICogICAgICAgPC9saT4KKyAqICAgICAgIDxsaT5b
IDxidXR0b24gbmctY2xpY2s9ImFkZENvbnRhY3QoKSI+YWRkPC9idXR0b24+IF08L2xpPgorICog
ICAgPC91bD4KKyAqICAgPC9kaXY+CisgKiAgPC9maWxlPgorICogIDxmaWxlIG5hbWU9ImFwcC5q
cyI+CisgKiAgIGFuZ3VsYXIubW9kdWxlKCdjb250cm9sbGVyRXhhbXBsZScsIFtdKQorICogICAg
IC5jb250cm9sbGVyKCdTZXR0aW5nc0NvbnRyb2xsZXIyJywgWyckc2NvcGUnLCBTZXR0aW5nc0Nv
bnRyb2xsZXIyXSk7CisgKgorICogICBmdW5jdGlvbiBTZXR0aW5nc0NvbnRyb2xsZXIyKCRzY29w
ZSkgeworICogICAgICRzY29wZS5uYW1lID0gIkpvaG4gU21pdGgiOworICogICAgICRzY29wZS5j
b250YWN0cyA9IFsKKyAqICAgICAgIHt0eXBlOidwaG9uZScsIHZhbHVlOic0MDggNTU1IDEyMTIn
fSwKKyAqICAgICAgIHt0eXBlOidlbWFpbCcsIHZhbHVlOidqb2huLnNtaXRoQGV4YW1wbGUub3Jn
J30gXTsKKyAqCisgKiAgICAgJHNjb3BlLmdyZWV0ID0gZnVuY3Rpb24oKSB7CisgKiAgICAgICBh
bGVydCgkc2NvcGUubmFtZSk7CisgKiAgICAgfTsKKyAqCisgKiAgICAgJHNjb3BlLmFkZENvbnRh
Y3QgPSBmdW5jdGlvbigpIHsKKyAqICAgICAgICRzY29wZS5jb250YWN0cy5wdXNoKHt0eXBlOidl
bWFpbCcsIHZhbHVlOid5b3VybmFtZUBleGFtcGxlLm9yZyd9KTsKKyAqICAgICB9OworICoKKyAq
ICAgICAkc2NvcGUucmVtb3ZlQ29udGFjdCA9IGZ1bmN0aW9uKGNvbnRhY3RUb1JlbW92ZSkgewor
ICogICAgICAgdmFyIGluZGV4ID0gJHNjb3BlLmNvbnRhY3RzLmluZGV4T2YoY29udGFjdFRvUmVt
b3ZlKTsKKyAqICAgICAgICRzY29wZS5jb250YWN0cy5zcGxpY2UoaW5kZXgsIDEpOworICogICAg
IH07CisgKgorICogICAgICRzY29wZS5jbGVhckNvbnRhY3QgPSBmdW5jdGlvbihjb250YWN0KSB7
CisgKiAgICAgICBjb250YWN0LnR5cGUgPSAncGhvbmUnOworICogICAgICAgY29udGFjdC52YWx1
ZSA9ICcnOworICogICAgIH07CisgKiAgIH0KKyAqICA8L2ZpbGU+CisgKiAgPGZpbGUgbmFtZT0i
cHJvdHJhY3Rvci5qcyIgdHlwZT0icHJvdHJhY3RvciI+CisgKiAgICBpdCgnc2hvdWxkIGNoZWNr
IGNvbnRyb2xsZXInLCBmdW5jdGlvbigpIHsKKyAqICAgICAgdmFyIGNvbnRhaW5lciA9IGVsZW1l
bnQoYnkuaWQoJ2N0cmwtZXhtcGwnKSk7CisgKgorICogICAgICBleHBlY3QoY29udGFpbmVyLmVs
ZW1lbnQoYnkubW9kZWwoJ25hbWUnKSkKKyAqICAgICAgICAgIC5nZXRBdHRyaWJ1dGUoJ3ZhbHVl
JykpLnRvQmUoJ0pvaG4gU21pdGgnKTsKKyAqCisgKiAgICAgIHZhciBmaXJzdFJlcGVhdCA9Cisg
KiAgICAgICAgICBjb250YWluZXIuZWxlbWVudChieS5yZXBlYXRlcignY29udGFjdCBpbiBjb250
YWN0cycpLnJvdygwKSk7CisgKiAgICAgIHZhciBzZWNvbmRSZXBlYXQgPQorICogICAgICAgICAg
Y29udGFpbmVyLmVsZW1lbnQoYnkucmVwZWF0ZXIoJ2NvbnRhY3QgaW4gY29udGFjdHMnKS5yb3co
MSkpOworICoKKyAqICAgICAgZXhwZWN0KGZpcnN0UmVwZWF0LmVsZW1lbnQoYnkubW9kZWwoJ2Nv
bnRhY3QudmFsdWUnKSkuZ2V0QXR0cmlidXRlKCd2YWx1ZScpKQorICogICAgICAgICAgLnRvQmUo
JzQwOCA1NTUgMTIxMicpOworICogICAgICBleHBlY3Qoc2Vjb25kUmVwZWF0LmVsZW1lbnQoYnku
bW9kZWwoJ2NvbnRhY3QudmFsdWUnKSkuZ2V0QXR0cmlidXRlKCd2YWx1ZScpKQorICogICAgICAg
ICAgLnRvQmUoJ2pvaG4uc21pdGhAZXhhbXBsZS5vcmcnKTsKKyAqCisgKiAgICAgIGZpcnN0UmVw
ZWF0LmVsZW1lbnQoYnkuYnV0dG9uVGV4dCgnY2xlYXInKSkuY2xpY2soKTsKKyAqCisgKiAgICAg
IGV4cGVjdChmaXJzdFJlcGVhdC5lbGVtZW50KGJ5Lm1vZGVsKCdjb250YWN0LnZhbHVlJykpLmdl
dEF0dHJpYnV0ZSgndmFsdWUnKSkKKyAqICAgICAgICAgIC50b0JlKCcnKTsKKyAqCisgKiAgICAg
IGNvbnRhaW5lci5lbGVtZW50KGJ5LmJ1dHRvblRleHQoJ2FkZCcpKS5jbGljaygpOworICoKKyAq
ICAgICAgZXhwZWN0KGNvbnRhaW5lci5lbGVtZW50KGJ5LnJlcGVhdGVyKCdjb250YWN0IGluIGNv
bnRhY3RzJykucm93KDIpKQorICogICAgICAgICAgLmVsZW1lbnQoYnkubW9kZWwoJ2NvbnRhY3Qu
dmFsdWUnKSkKKyAqICAgICAgICAgIC5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpCisgKiAgICAgICAg
ICAudG9CZSgneW91cm5hbWVAZXhhbXBsZS5vcmcnKTsKKyAqICAgIH0pOworICogIDwvZmlsZT4K
KyAqPC9leGFtcGxlPgorCisgKi8KK3ZhciBuZ0NvbnRyb2xsZXJEaXJlY3RpdmUgPSBbZnVuY3Rp
b24oKSB7CisgIHJldHVybiB7CisgICAgcmVzdHJpY3Q6ICdBJywKKyAgICBzY29wZTogdHJ1ZSwK
KyAgICBjb250cm9sbGVyOiAnQCcsCisgICAgcHJpb3JpdHk6IDUwMAorICB9OworfV07CisKKy8q
KgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgbmdDc3AKKyAqCisgKiBAZWxlbWVudCBo
dG1sCisgKiBAZGVzY3JpcHRpb24KKyAqIEVuYWJsZXMgW0NTUCAoQ29udGVudCBTZWN1cml0eSBQ
b2xpY3kpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9TZWN1cml0eS9DU1ApIHN1
cHBvcnQuCisgKgorICogVGhpcyBpcyBuZWNlc3Nhcnkgd2hlbiBkZXZlbG9waW5nIHRoaW5ncyBs
aWtlIEdvb2dsZSBDaHJvbWUgRXh0ZW5zaW9ucyBvciBVbml2ZXJzYWwgV2luZG93cyBBcHBzLgor
ICoKKyAqIENTUCBmb3JiaWRzIGFwcHMgdG8gdXNlIGBldmFsYCBvciBgRnVuY3Rpb24oc3RyaW5n
KWAgZ2VuZXJhdGVkIGZ1bmN0aW9ucyAoYW1vbmcgb3RoZXIgdGhpbmdzKS4KKyAqIEZvciBBbmd1
bGFyIHRvIGJlIENTUCBjb21wYXRpYmxlIHRoZXJlIGFyZSBvbmx5IHR3byB0aGluZ3MgdGhhdCB3
ZSBuZWVkIHRvIGRvIGRpZmZlcmVudGx5OgorICoKKyAqIC0gZG9uJ3QgdXNlIGBGdW5jdGlvbmAg
Y29uc3RydWN0b3IgdG8gZ2VuZXJhdGUgb3B0aW1pemVkIHZhbHVlIGdldHRlcnMKKyAqIC0gZG9u
J3QgaW5qZWN0IGN1c3RvbSBzdHlsZXNoZWV0IGludG8gdGhlIGRvY3VtZW50CisgKgorICogQW5n
dWxhckpTIHVzZXMgYEZ1bmN0aW9uKHN0cmluZylgIGdlbmVyYXRlZCBmdW5jdGlvbnMgYXMgYSBz
cGVlZCBvcHRpbWl6YXRpb24uIEFwcGx5aW5nIHRoZSBgbmdDc3BgCisgKiBkaXJlY3RpdmUgd2ls
bCBjYXVzZSBBbmd1bGFyIHRvIHVzZSBDU1AgY29tcGF0aWJpbGl0eSBtb2RlLiBXaGVuIHRoaXMg
bW9kZSBpcyBvbiBBbmd1bGFySlMgd2lsbAorICogZXZhbHVhdGUgYWxsIGV4cHJlc3Npb25zIHVw
IHRvIDMwJSBzbG93ZXIgdGhhbiBpbiBub24tQ1NQIG1vZGUsIGJ1dCBubyBzZWN1cml0eSB2aW9s
YXRpb25zIHdpbGwKKyAqIGJlIHJhaXNlZC4KKyAqCisgKiBDU1AgZm9yYmlkcyBKYXZhU2NyaXB0
IHRvIGlubGluZSBzdHlsZXNoZWV0IHJ1bGVzLiBJbiBub24gQ1NQIG1vZGUgQW5ndWxhciBhdXRv
bWF0aWNhbGx5CisgKiBpbmNsdWRlcyBzb21lIENTUyBydWxlcyAoZS5nLiB7QGxpbmsgbmcuZGly
ZWN0aXZlOm5nQ2xvYWsgbmdDbG9ha30pLgorICogVG8gbWFrZSB0aG9zZSBkaXJlY3RpdmVzIHdv
cmsgaW4gQ1NQIG1vZGUsIGluY2x1ZGUgdGhlIGBhbmd1bGFyLWNzcC5jc3NgIG1hbnVhbGx5Lgor
ICoKKyAqIEFuZ3VsYXIgdHJpZXMgdG8gYXV0b2RldGVjdCBpZiBDU1AgaXMgYWN0aXZlIGFuZCBh
dXRvbWF0aWNhbGx5IHR1cm4gb24gdGhlIENTUC1zYWZlIG1vZGUuIFRoaXMKKyAqIGF1dG9kZXRl
Y3Rpb24gaG93ZXZlciB0cmlnZ2VycyBhIENTUCBlcnJvciB0byBiZSBsb2dnZWQgaW4gdGhlIGNv
bnNvbGU6CisgKgorICogYGBgCisgKiBSZWZ1c2VkIHRvIGV2YWx1YXRlIGEgc3RyaW5nIGFzIEph
dmFTY3JpcHQgYmVjYXVzZSAndW5zYWZlLWV2YWwnIGlzIG5vdCBhbiBhbGxvd2VkIHNvdXJjZSBv
ZgorICogc2NyaXB0IGluIHRoZSBmb2xsb3dpbmcgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgZGly
ZWN0aXZlOiAiZGVmYXVsdC1zcmMgJ3NlbGYnIi4gTm90ZSB0aGF0CisgKiAnc2NyaXB0LXNyYycg
d2FzIG5vdCBleHBsaWNpdGx5IHNldCwgc28gJ2RlZmF1bHQtc3JjJyBpcyB1c2VkIGFzIGEgZmFs
bGJhY2suCisgKiBgYGAKKyAqCisgKiBUaGlzIGVycm9yIGlzIGhhcm1sZXNzIGJ1dCBhbm5veWlu
Zy4gVG8gcHJldmVudCB0aGUgZXJyb3IgZnJvbSBzaG93aW5nIHVwLCBwdXQgdGhlIGBuZ0NzcGAK
KyAqIGRpcmVjdGl2ZSBvbiB0aGUgcm9vdCBlbGVtZW50IG9mIHRoZSBhcHBsaWNhdGlvbiBvciBv
biB0aGUgYGFuZ3VsYXIuanNgIHNjcmlwdCB0YWcsIHdoaWNoZXZlcgorICogYXBwZWFycyBmaXJz
dCBpbiB0aGUgaHRtbCBkb2N1bWVudC4KKyAqCisgKiAqTm90ZTogVGhpcyBkaXJlY3RpdmUgaXMg
b25seSBhdmFpbGFibGUgaW4gdGhlIGBuZy1jc3BgIGFuZCBgZGF0YS1uZy1jc3BgIGF0dHJpYnV0
ZSBmb3JtLioKKyAqCisgKiBAZXhhbXBsZQorICogVGhpcyBleGFtcGxlIHNob3dzIGhvdyB0byBh
cHBseSB0aGUgYG5nQ3NwYCBkaXJlY3RpdmUgdG8gdGhlIGBodG1sYCB0YWcuCisgICBgYGBodG1s
CisgICAgIDwhZG9jdHlwZSBodG1sPgorICAgICA8aHRtbCBuZy1hcHAgbmctY3NwPgorICAgICAu
Li4KKyAgICAgLi4uCisgICAgIDwvaHRtbD4KKyAgIGBgYAorICAqIEBleGFtcGxlCisgICAgICAv
LyBOb3RlOiB0aGUgc3VmZml4IGAuY3NwYCBpbiB0aGUgZXhhbXBsZSBuYW1lIHRyaWdnZXJzCisg
ICAgICAvLyBjc3AgbW9kZSBpbiBvdXIgaHR0cCBzZXJ2ZXIhCisgICAgICA8ZXhhbXBsZSBuYW1l
PSJleGFtcGxlLmNzcCIgbW9kdWxlPSJjc3BFeGFtcGxlIiBuZy1jc3A9InRydWUiPgorICAgICAg
ICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9
Ik1haW5Db250cm9sbGVyIGFzIGN0cmwiPgorICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAg
ICAgPGJ1dHRvbiBuZy1jbGljaz0iY3RybC5pbmMoKSIgaWQ9ImluYyI+SW5jcmVtZW50PC9idXR0
b24+CisgICAgICAgICAgICAgIDxzcGFuIGlkPSJjb3VudGVyIj4KKyAgICAgICAgICAgICAgICB7
e2N0cmwuY291bnRlcn19CisgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgIDwvZGl2
PgorCisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICA8YnV0dG9uIG5nLWNsaWNrPSJj
dHJsLmV2aWwoKSIgaWQ9ImV2aWwiPkV2aWw8L2J1dHRvbj4KKyAgICAgICAgICAgICAgPHNwYW4g
aWQ9ImV2aWxFcnJvciI+CisgICAgICAgICAgICAgICAge3tjdHJsLmV2aWxFcnJvcn19CisgICAg
ICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2Pgor
ICAgICAgICA8L2ZpbGU+CisgICAgICAgIDxmaWxlIG5hbWU9InNjcmlwdC5qcyI+CisgICAgICAg
ICAgIGFuZ3VsYXIubW9kdWxlKCdjc3BFeGFtcGxlJywgW10pCisgICAgICAgICAgICAgLmNvbnRy
b2xsZXIoJ01haW5Db250cm9sbGVyJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5jb3VudGVyID0gMDsKKyAgICAgICAgICAgICAgICB0aGlzLmluYyA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgICAgdGhpcy5jb3VudGVyKys7CisgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgICAgICB0aGlzLmV2aWwgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAg
IC8vIGpzaGludCBldmlsOnRydWUKKyAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAg
ICAgICAgICAgIGV2YWwoJzErMicpOworICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewor
ICAgICAgICAgICAgICAgICAgICB0aGlzLmV2aWxFcnJvciA9IGUubWVzc2FnZTsKKyAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgPC9maWxlPgorICAgICAgICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90
cmFjdG9yIj4KKyAgICAgICAgICB2YXIgdXRpbCwgd2ViZHJpdmVyOworCisgICAgICAgICAgdmFy
IGluY0J0biA9IGVsZW1lbnQoYnkuaWQoJ2luYycpKTsKKyAgICAgICAgICB2YXIgY291bnRlciA9
IGVsZW1lbnQoYnkuaWQoJ2NvdW50ZXInKSk7CisgICAgICAgICAgdmFyIGV2aWxCdG4gPSBlbGVt
ZW50KGJ5LmlkKCdldmlsJykpOworICAgICAgICAgIHZhciBldmlsRXJyb3IgPSBlbGVtZW50KGJ5
LmlkKCdldmlsRXJyb3InKSk7CisKKyAgICAgICAgICBmdW5jdGlvbiBnZXRBbmRDbGVhclNldmVy
ZUVycm9ycygpIHsKKyAgICAgICAgICAgIHJldHVybiBicm93c2VyLm1hbmFnZSgpLmxvZ3MoKS5n
ZXQoJ2Jyb3dzZXInKS50aGVuKGZ1bmN0aW9uKGJyb3dzZXJMb2cpIHsKKyAgICAgICAgICAgICAg
cmV0dXJuIGJyb3dzZXJMb2cuZmlsdGVyKGZ1bmN0aW9uKGxvZ0VudHJ5KSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGxvZ0VudHJ5LmxldmVsLnZhbHVlID4gd2ViZHJpdmVyLmxvZ2dpbmcuTGV2
ZWwuV0FSTklORy52YWx1ZTsKKyAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICB9CisKKyAgICAgICAgICBmdW5jdGlvbiBjbGVhckVycm9ycygpIHsKKyAgICAgICAg
ICAgIGdldEFuZENsZWFyU2V2ZXJlRXJyb3JzKCk7CisgICAgICAgICAgfQorCisgICAgICAgICAg
ZnVuY3Rpb24gZXhwZWN0Tm9FcnJvcnMoKSB7CisgICAgICAgICAgICBnZXRBbmRDbGVhclNldmVy
ZUVycm9ycygpLnRoZW4oZnVuY3Rpb24oZmlsdGVyZWRMb2cpIHsKKyAgICAgICAgICAgICAgZXhw
ZWN0KGZpbHRlcmVkTG9nLmxlbmd0aCkudG9FcXVhbCgwKTsKKyAgICAgICAgICAgICAgaWYgKGZp
bHRlcmVkTG9nLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdicm93c2Vy
IGNvbnNvbGUgZXJyb3JzOiAnICsgdXRpbC5pbnNwZWN0KGZpbHRlcmVkTG9nKSk7CisgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICAgIH0KKworICAgICAgICAgIGZ1bmN0
aW9uIGV4cGVjdEVycm9yKHJlZ2V4KSB7CisgICAgICAgICAgICBnZXRBbmRDbGVhclNldmVyZUVy
cm9ycygpLnRoZW4oZnVuY3Rpb24oZmlsdGVyZWRMb2cpIHsKKyAgICAgICAgICAgICAgdmFyIGZv
dW5kID0gZmFsc2U7CisgICAgICAgICAgICAgIGZpbHRlcmVkTG9nLmZvckVhY2goZnVuY3Rpb24o
bG9nKSB7CisgICAgICAgICAgICAgICAgaWYgKGxvZy5tZXNzYWdlLm1hdGNoKHJlZ2V4KSkgewor
ICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIGFuIGVycm9yIHRoYXQgbWF0Y2hlcyAnICsgcmVn
ZXgpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICB9CisKKyAg
ICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdXRpbCA9IHJlcXVp
cmUoJ3V0aWwnKTsKKyAgICAgICAgICAgIHdlYmRyaXZlciA9IHJlcXVpcmUoJ3Byb3RyYWN0b3Iv
bm9kZV9tb2R1bGVzL3NlbGVuaXVtLXdlYmRyaXZlcicpOworICAgICAgICAgIH0pOworCisgICAg
ICAgICAgLy8gRm9yIG5vdywgd2Ugb25seSB0ZXN0IG9uIENocm9tZSwKKyAgICAgICAgICAvLyBh
cyBTYWZhcmkgZG9lcyBub3QgbG9hZCB0aGUgcGFnZSB3aXRoIFByb3RyYWN0b3IncyBpbmplY3Rl
ZCBzY3JpcHRzLAorICAgICAgICAgIC8vIGFuZCBGaXJlZm94IHdlYmRyaXZlciBhbHdheXMgZGlz
YWJsZXMgY29udGVudCBzZWN1cml0eSBwb2xpY3kgKCM2MzU4KQorICAgICAgICAgIGlmIChicm93
c2VyLnBhcmFtcy5icm93c2VyICE9PSAnY2hyb21lJykgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgIH0KKworICAgICAgICAgIGl0KCdzaG91bGQgbm90IHJlcG9ydCBlcnJvcnMgd2hl
biB0aGUgcGFnZSBpcyBsb2FkZWQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIC8vIGNsZWFy
IGVycm9ycyBzbyB3ZSBhcmUgbm90IGRlcGVuZGVudCBvbiBwcmV2aW91cyB0ZXN0cworICAgICAg
ICAgICAgY2xlYXJFcnJvcnMoKTsKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gcmVsb2FkIHRoZSBw
YWdlIGFzIHRoZSBwYWdlIGlzIGFscmVhZHkgbG9hZGVkIHdoZW4KKyAgICAgICAgICAgIC8vIHdl
IGNvbWUgaGVyZQorICAgICAgICAgICAgYnJvd3Nlci5kcml2ZXIuZ2V0Q3VycmVudFVybCgpLnRo
ZW4oZnVuY3Rpb24odXJsKSB7CisgICAgICAgICAgICAgIGJyb3dzZXIuZ2V0KHVybCk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIGV4cGVjdE5vRXJyb3JzKCk7CisgICAgICAgICAgfSk7
CisKKyAgICAgICAgICBpdCgnc2hvdWxkIGV2YWx1YXRlIGV4cHJlc3Npb25zJywgZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICBleHBlY3QoY291bnRlci5nZXRUZXh0KCkpLnRvRXF1YWwoJzAnKTsK
KyAgICAgICAgICAgIGluY0J0bi5jbGljaygpOworICAgICAgICAgICAgZXhwZWN0KGNvdW50ZXIu
Z2V0VGV4dCgpKS50b0VxdWFsKCcxJyk7CisgICAgICAgICAgICBleHBlY3ROb0Vycm9ycygpOwor
ICAgICAgICAgIH0pOworCisgICAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhbmQgcmVwb3J0IGFu
IGVycm9yIHdoZW4gdXNpbmcgImV2YWwiJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBldmls
QnRuLmNsaWNrKCk7CisgICAgICAgICAgICBleHBlY3QoZXZpbEVycm9yLmdldFRleHQoKSkudG9N
YXRjaCgvQ29udGVudCBTZWN1cml0eSBQb2xpY3kvKTsKKyAgICAgICAgICAgIGV4cGVjdEVycm9y
KC9Db250ZW50IFNlY3VyaXR5IFBvbGljeS8pOworICAgICAgICAgIH0pOworICAgICAgICA8L2Zp
bGU+CisgICAgICA8L2V4YW1wbGU+CisgICovCisKKy8vIG5nQ3NwIGlzIG5vdCBpbXBsZW1lbnRl
ZCBhcyBhIHByb3BlciBkaXJlY3RpdmUgYW55IG1vcmUsIGJlY2F1c2Ugd2UgbmVlZCBpdCBiZSBw
cm9jZXNzZWQgd2hpbGUgd2UKKy8vIGJvb3RzdHJhcCB0aGUgc3lzdGVtIChiZWZvcmUgJHBhcnNl
IGlzIGluc3RhbnRpYXRlZCksIGZvciB0aGlzIHJlYXNvbiB3ZSBqdXN0IGhhdmUKKy8vIHRoZSBj
c3AuaXNBY3RpdmUoKSBmbiB0aGF0IGxvb2tzIGZvciBuZy1jc3AgYXR0cmlidXRlIGFueXdoZXJl
IGluIHRoZSBjdXJyZW50IGRvYworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1l
IG5nQ2xpY2sKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFRoZSBuZ0NsaWNrIGRpcmVjdGl2ZSBh
bGxvd3MgeW91IHRvIHNwZWNpZnkgY3VzdG9tIGJlaGF2aW9yIHdoZW4KKyAqIGFuIGVsZW1lbnQg
aXMgY2xpY2tlZC4KKyAqCisgKiBAZWxlbWVudCBBTlkKKyAqIEBwcmlvcml0eSAwCisgKiBAcGFy
YW0ge2V4cHJlc3Npb259IG5nQ2xpY2sge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lv
bn0gdG8gZXZhbHVhdGUgdXBvbgorICogY2xpY2suICh7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiMt
ZXZlbnQtIEV2ZW50IG9iamVjdCBpcyBhdmFpbGFibGUgYXMgYCRldmVudGB9KQorICoKKyAqIEBl
eGFtcGxlCisgICA8ZXhhbXBsZT4KKyAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAg
ICA8YnV0dG9uIG5nLWNsaWNrPSJjb3VudCA9IGNvdW50ICsgMSIgbmctaW5pdD0iY291bnQ9MCI+
CisgICAgICAgIEluY3JlbWVudAorICAgICAgPC9idXR0b24+CisgICAgICA8c3Bhbj4KKyAgICAg
ICAgY291bnQ6IHt7Y291bnR9fQorICAgICAgPC9zcGFuPgorICAgICA8L2ZpbGU+CisgICAgIDxm
aWxlIG5hbWU9InByb3RyYWN0b3IuanMiIHR5cGU9InByb3RyYWN0b3IiPgorICAgICAgIGl0KCdz
aG91bGQgY2hlY2sgbmctY2xpY2snLCBmdW5jdGlvbigpIHsKKyAgICAgICAgIGV4cGVjdChlbGVt
ZW50KGJ5LmJpbmRpbmcoJ2NvdW50JykpLmdldFRleHQoKSkudG9NYXRjaCgnMCcpOworICAgICAg
ICAgZWxlbWVudChieS5jc3MoJ2J1dHRvbicpKS5jbGljaygpOworICAgICAgICAgZXhwZWN0KGVs
ZW1lbnQoYnkuYmluZGluZygnY291bnQnKSkuZ2V0VGV4dCgpKS50b01hdGNoKCcxJyk7CisgICAg
ICAgfSk7CisgICAgIDwvZmlsZT4KKyAgIDwvZXhhbXBsZT4KKyAqLworLyoKKyAqIEEgY29sbGVj
dGlvbiBvZiBkaXJlY3RpdmVzIHRoYXQgYWxsb3dzIGNyZWF0aW9uIG9mIGN1c3RvbSBldmVudCBo
YW5kbGVycyB0aGF0IGFyZSBkZWZpbmVkIGFzCisgKiBhbmd1bGFyIGV4cHJlc3Npb25zIGFuZCBh
cmUgY29tcGlsZWQgYW5kIGV4ZWN1dGVkIHdpdGhpbiB0aGUgY3VycmVudCBzY29wZS4KKyAqLwor
dmFyIG5nRXZlbnREaXJlY3RpdmVzID0ge307CisKKy8vIEZvciBldmVudHMgdGhhdCBtaWdodCBm
aXJlIHN5bmNocm9ub3VzbHkgZHVyaW5nIERPTSBtYW5pcHVsYXRpb24KKy8vIHdlIG5lZWQgdG8g
ZXhlY3V0ZSB0aGVpciBldmVudCBoYW5kbGVycyBhc3luY2hyb25vdXNseSB1c2luZyAkZXZhbEFz
eW5jLAorLy8gc28gdGhhdCB0aGV5IGFyZSBub3QgZXhlY3V0ZWQgaW4gYW4gaW5jb25zaXN0ZW50
IHN0YXRlLgordmFyIGZvcmNlQXN5bmNFdmVudHMgPSB7CisgICdibHVyJzogdHJ1ZSwKKyAgJ2Zv
Y3VzJzogdHJ1ZQorfTsKK2ZvckVhY2goCisgICdjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91
c2V1cCBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2Vtb3ZlIG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBr
ZXlkb3duIGtleXVwIGtleXByZXNzIHN1Ym1pdCBmb2N1cyBibHVyIGNvcHkgY3V0IHBhc3RlJy5z
cGxpdCgnICcpLAorICBmdW5jdGlvbihldmVudE5hbWUpIHsKKyAgICB2YXIgZGlyZWN0aXZlTmFt
ZSA9IGRpcmVjdGl2ZU5vcm1hbGl6ZSgnbmctJyArIGV2ZW50TmFtZSk7CisgICAgbmdFdmVudERp
cmVjdGl2ZXNbZGlyZWN0aXZlTmFtZV0gPSBbJyRwYXJzZScsICckcm9vdFNjb3BlJywgZnVuY3Rp
b24oJHBhcnNlLCAkcm9vdFNjb3BlKSB7CisgICAgICByZXR1cm4geworICAgICAgICByZXN0cmlj
dDogJ0EnLAorICAgICAgICBjb21waWxlOiBmdW5jdGlvbigkZWxlbWVudCwgYXR0cikgeworICAg
ICAgICAgIC8vIFdlIGV4cG9zZSB0aGUgcG93ZXJmdWwgJGV2ZW50IG9iamVjdCBvbiB0aGUgc2Nv
cGUgdGhhdCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIFdpbmRvdywKKyAgICAgICAgICAvLyBldGMu
IHRoYXQgaXNuJ3QgcHJvdGVjdGVkIGJ5IHRoZSBmYXN0IHBhdGhzIGluICRwYXJzZS4gIFdlIGV4
cGxpY2l0bHkgcmVxdWVzdCBiZXR0ZXIKKyAgICAgICAgICAvLyBjaGVja3MgYXQgdGhlIGNvc3Qg
b2Ygc3BlZWQgc2luY2UgZXZlbnQgaGFuZGxlciBleHByZXNzaW9ucyBhcmUgbm90IGV4ZWN1dGVk
IGFzCisgICAgICAgICAgLy8gZnJlcXVlbnRseSBhcyByZWd1bGFyIGNoYW5nZSBkZXRlY3Rpb24u
CisgICAgICAgICAgdmFyIGZuID0gJHBhcnNlKGF0dHJbZGlyZWN0aXZlTmFtZV0sIC8qIGludGVy
Y2VwdG9yRm4gKi8gbnVsbCwgLyogZXhwZW5zaXZlQ2hlY2tzICovIHRydWUpOworICAgICAgICAg
IHJldHVybiBmdW5jdGlvbiBuZ0V2ZW50SGFuZGxlcihzY29wZSwgZWxlbWVudCkgeworICAgICAg
ICAgICAgZWxlbWVudC5vbihldmVudE5hbWUsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAg
ICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGZuKHNjb3Bl
LCB7JGV2ZW50OmV2ZW50fSk7CisgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgIGlmIChm
b3JjZUFzeW5jRXZlbnRzW2V2ZW50TmFtZV0gJiYgJHJvb3RTY29wZS4kJHBoYXNlKSB7CisgICAg
ICAgICAgICAgICAgc2NvcGUuJGV2YWxBc3luYyhjYWxsYmFjayk7CisgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgc2NvcGUuJGFwcGx5KGNhbGxiYWNrKTsKKyAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAg
fTsKKyAgICB9XTsKKyAgfQorKTsKKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFt
ZSBuZ0RibGNsaWNrCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBUaGUgYG5nRGJsY2xpY2tgIGRp
cmVjdGl2ZSBhbGxvd3MgeW91IHRvIHNwZWNpZnkgY3VzdG9tIGJlaGF2aW9yIG9uIGEgZGJsY2xp
Y2sgZXZlbnQuCisgKgorICogQGVsZW1lbnQgQU5ZCisgKiBAcHJpb3JpdHkgMAorICogQHBhcmFt
IHtleHByZXNzaW9ufSBuZ0RibGNsaWNrIHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Np
b259IHRvIGV2YWx1YXRlIHVwb24KKyAqIGEgZGJsY2xpY2suIChUaGUgRXZlbnQgb2JqZWN0IGlz
IGF2YWlsYWJsZSBhcyBgJGV2ZW50YCkKKyAqCisgKiBAZXhhbXBsZQorICAgPGV4YW1wbGU+Cisg
ICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICAgPGJ1dHRvbiBuZy1kYmxjbGljaz0i
Y291bnQgPSBjb3VudCArIDEiIG5nLWluaXQ9ImNvdW50PTAiPgorICAgICAgICBJbmNyZW1lbnQg
KG9uIGRvdWJsZSBjbGljaykKKyAgICAgIDwvYnV0dG9uPgorICAgICAgY291bnQ6IHt7Y291bnR9
fQorICAgICA8L2ZpbGU+CisgICA8L2V4YW1wbGU+CisgKi8KKworCisvKioKKyAqIEBuZ2RvYyBk
aXJlY3RpdmUKKyAqIEBuYW1lIG5nTW91c2Vkb3duCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBU
aGUgbmdNb3VzZWRvd24gZGlyZWN0aXZlIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBjdXN0b20gYmVo
YXZpb3Igb24gbW91c2Vkb3duIGV2ZW50LgorICoKKyAqIEBlbGVtZW50IEFOWQorICogQHByaW9y
aXR5IDAKKyAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdNb3VzZWRvd24ge0BsaW5rIGd1aWRlL2V4
cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbHVhdGUgdXBvbgorICogbW91c2Vkb3duLiAoe0Bs
aW5rIGd1aWRlL2V4cHJlc3Npb24jLWV2ZW50LSBFdmVudCBvYmplY3QgaXMgYXZhaWxhYmxlIGFz
IGAkZXZlbnRgfSkKKyAqCisgKiBAZXhhbXBsZQorICAgPGV4YW1wbGU+CisgICAgIDxmaWxlIG5h
bWU9ImluZGV4Lmh0bWwiPgorICAgICAgPGJ1dHRvbiBuZy1tb3VzZWRvd249ImNvdW50ID0gY291
bnQgKyAxIiBuZy1pbml0PSJjb3VudD0wIj4KKyAgICAgICAgSW5jcmVtZW50IChvbiBtb3VzZSBk
b3duKQorICAgICAgPC9idXR0b24+CisgICAgICBjb3VudDoge3tjb3VudH19CisgICAgIDwvZmls
ZT4KKyAgIDwvZXhhbXBsZT4KKyAqLworCisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICog
QG5hbWUgbmdNb3VzZXVwCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBTcGVjaWZ5IGN1c3RvbSBi
ZWhhdmlvciBvbiBtb3VzZXVwIGV2ZW50LgorICoKKyAqIEBlbGVtZW50IEFOWQorICogQHByaW9y
aXR5IDAKKyAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdNb3VzZXVwIHtAbGluayBndWlkZS9leHBy
ZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWx1YXRlIHVwb24KKyAqIG1vdXNldXAuICh7QGxpbmsg
Z3VpZGUvZXhwcmVzc2lvbiMtZXZlbnQtIEV2ZW50IG9iamVjdCBpcyBhdmFpbGFibGUgYXMgYCRl
dmVudGB9KQorICoKKyAqIEBleGFtcGxlCisgICA8ZXhhbXBsZT4KKyAgICAgPGZpbGUgbmFtZT0i
aW5kZXguaHRtbCI+CisgICAgICA8YnV0dG9uIG5nLW1vdXNldXA9ImNvdW50ID0gY291bnQgKyAx
IiBuZy1pbml0PSJjb3VudD0wIj4KKyAgICAgICAgSW5jcmVtZW50IChvbiBtb3VzZSB1cCkKKyAg
ICAgIDwvYnV0dG9uPgorICAgICAgY291bnQ6IHt7Y291bnR9fQorICAgICA8L2ZpbGU+CisgICA8
L2V4YW1wbGU+CisgKi8KKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBuZ01v
dXNlb3ZlcgorICoKKyAqIEBkZXNjcmlwdGlvbgorICogU3BlY2lmeSBjdXN0b20gYmVoYXZpb3Ig
b24gbW91c2VvdmVyIGV2ZW50LgorICoKKyAqIEBlbGVtZW50IEFOWQorICogQHByaW9yaXR5IDAK
KyAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdNb3VzZW92ZXIge0BsaW5rIGd1aWRlL2V4cHJlc3Np
b24gRXhwcmVzc2lvbn0gdG8gZXZhbHVhdGUgdXBvbgorICogbW91c2VvdmVyLiAoe0BsaW5rIGd1
aWRlL2V4cHJlc3Npb24jLWV2ZW50LSBFdmVudCBvYmplY3QgaXMgYXZhaWxhYmxlIGFzIGAkZXZl
bnRgfSkKKyAqCisgKiBAZXhhbXBsZQorICAgPGV4YW1wbGU+CisgICAgIDxmaWxlIG5hbWU9Imlu
ZGV4Lmh0bWwiPgorICAgICAgPGJ1dHRvbiBuZy1tb3VzZW92ZXI9ImNvdW50ID0gY291bnQgKyAx
IiBuZy1pbml0PSJjb3VudD0wIj4KKyAgICAgICAgSW5jcmVtZW50ICh3aGVuIG1vdXNlIGlzIG92
ZXIpCisgICAgICA8L2J1dHRvbj4KKyAgICAgIGNvdW50OiB7e2NvdW50fX0KKyAgICAgPC9maWxl
PgorICAgPC9leGFtcGxlPgorICovCisKKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBA
bmFtZSBuZ01vdXNlZW50ZXIKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFNwZWNpZnkgY3VzdG9t
IGJlaGF2aW9yIG9uIG1vdXNlZW50ZXIgZXZlbnQuCisgKgorICogQGVsZW1lbnQgQU5ZCisgKiBA
cHJpb3JpdHkgMAorICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ01vdXNlZW50ZXIge0BsaW5rIGd1
aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbHVhdGUgdXBvbgorICogbW91c2VlbnRl
ci4gKHtAbGluayBndWlkZS9leHByZXNzaW9uIy1ldmVudC0gRXZlbnQgb2JqZWN0IGlzIGF2YWls
YWJsZSBhcyBgJGV2ZW50YH0pCisgKgorICogQGV4YW1wbGUKKyAgIDxleGFtcGxlPgorICAgICA8
ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgIDxidXR0b24gbmctbW91c2VlbnRlcj0iY291
bnQgPSBjb3VudCArIDEiIG5nLWluaXQ9ImNvdW50PTAiPgorICAgICAgICBJbmNyZW1lbnQgKHdo
ZW4gbW91c2UgZW50ZXJzKQorICAgICAgPC9idXR0b24+CisgICAgICBjb3VudDoge3tjb3VudH19
CisgICAgIDwvZmlsZT4KKyAgIDwvZXhhbXBsZT4KKyAqLworCisKKy8qKgorICogQG5nZG9jIGRp
cmVjdGl2ZQorICogQG5hbWUgbmdNb3VzZWxlYXZlCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBT
cGVjaWZ5IGN1c3RvbSBiZWhhdmlvciBvbiBtb3VzZWxlYXZlIGV2ZW50LgorICoKKyAqIEBlbGVt
ZW50IEFOWQorICogQHByaW9yaXR5IDAKKyAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdNb3VzZWxl
YXZlIHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWx1YXRlIHVwb24K
KyAqIG1vdXNlbGVhdmUuICh7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiMtZXZlbnQtIEV2ZW50IG9i
amVjdCBpcyBhdmFpbGFibGUgYXMgYCRldmVudGB9KQorICoKKyAqIEBleGFtcGxlCisgICA8ZXhh
bXBsZT4KKyAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAgICA8YnV0dG9uIG5nLW1v
dXNlbGVhdmU9ImNvdW50ID0gY291bnQgKyAxIiBuZy1pbml0PSJjb3VudD0wIj4KKyAgICAgICAg
SW5jcmVtZW50ICh3aGVuIG1vdXNlIGxlYXZlcykKKyAgICAgIDwvYnV0dG9uPgorICAgICAgY291
bnQ6IHt7Y291bnR9fQorICAgICA8L2ZpbGU+CisgICA8L2V4YW1wbGU+CisgKi8KKworCisvKioK
KyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1lIG5nTW91c2Vtb3ZlCisgKgorICogQGRlc2Ny
aXB0aW9uCisgKiBTcGVjaWZ5IGN1c3RvbSBiZWhhdmlvciBvbiBtb3VzZW1vdmUgZXZlbnQuCisg
KgorICogQGVsZW1lbnQgQU5ZCisgKiBAcHJpb3JpdHkgMAorICogQHBhcmFtIHtleHByZXNzaW9u
fSBuZ01vdXNlbW92ZSB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFs
dWF0ZSB1cG9uCisgKiBtb3VzZW1vdmUuICh7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiMtZXZlbnQt
IEV2ZW50IG9iamVjdCBpcyBhdmFpbGFibGUgYXMgYCRldmVudGB9KQorICoKKyAqIEBleGFtcGxl
CisgICA8ZXhhbXBsZT4KKyAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAgICA8YnV0
dG9uIG5nLW1vdXNlbW92ZT0iY291bnQgPSBjb3VudCArIDEiIG5nLWluaXQ9ImNvdW50PTAiPgor
ICAgICAgICBJbmNyZW1lbnQgKHdoZW4gbW91c2UgbW92ZXMpCisgICAgICA8L2J1dHRvbj4KKyAg
ICAgIGNvdW50OiB7e2NvdW50fX0KKyAgICAgPC9maWxlPgorICAgPC9leGFtcGxlPgorICovCisK
KworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBuZ0tleWRvd24KKyAqCisgKiBA
ZGVzY3JpcHRpb24KKyAqIFNwZWNpZnkgY3VzdG9tIGJlaGF2aW9yIG9uIGtleWRvd24gZXZlbnQu
CisgKgorICogQGVsZW1lbnQgQU5ZCisgKiBAcHJpb3JpdHkgMAorICogQHBhcmFtIHtleHByZXNz
aW9ufSBuZ0tleWRvd24ge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZh
bHVhdGUgdXBvbgorICoga2V5ZG93bi4gKEV2ZW50IG9iamVjdCBpcyBhdmFpbGFibGUgYXMgYCRl
dmVudGAgYW5kIGNhbiBiZSBpbnRlcnJvZ2F0ZWQgZm9yIGtleUNvZGUsIGFsdEtleSwgZXRjLikK
KyAqCisgKiBAZXhhbXBsZQorICAgPGV4YW1wbGU+CisgICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0
bWwiPgorICAgICAgPGlucHV0IG5nLWtleWRvd249ImNvdW50ID0gY291bnQgKyAxIiBuZy1pbml0
PSJjb3VudD0wIj4KKyAgICAgIGtleSBkb3duIGNvdW50OiB7e2NvdW50fX0KKyAgICAgPC9maWxl
PgorICAgPC9leGFtcGxlPgorICovCisKKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBA
bmFtZSBuZ0tleXVwCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBTcGVjaWZ5IGN1c3RvbSBiZWhh
dmlvciBvbiBrZXl1cCBldmVudC4KKyAqCisgKiBAZWxlbWVudCBBTlkKKyAqIEBwcmlvcml0eSAw
CisgKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nS2V5dXAge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24g
RXhwcmVzc2lvbn0gdG8gZXZhbHVhdGUgdXBvbgorICoga2V5dXAuIChFdmVudCBvYmplY3QgaXMg
YXZhaWxhYmxlIGFzIGAkZXZlbnRgIGFuZCBjYW4gYmUgaW50ZXJyb2dhdGVkIGZvciBrZXlDb2Rl
LCBhbHRLZXksIGV0Yy4pCisgKgorICogQGV4YW1wbGUKKyAgIDxleGFtcGxlPgorICAgICA8Zmls
ZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgICA8cD5UeXBpbmcgaW4gdGhlIGlucHV0IGJveCBi
ZWxvdyB1cGRhdGVzIHRoZSBrZXkgY291bnQ8L3A+CisgICAgICAgPGlucHV0IG5nLWtleXVwPSJj
b3VudCA9IGNvdW50ICsgMSIgbmctaW5pdD0iY291bnQ9MCI+IGtleSB1cCBjb3VudDoge3tjb3Vu
dH19CisKKyAgICAgICA8cD5UeXBpbmcgaW4gdGhlIGlucHV0IGJveCBiZWxvdyB1cGRhdGVzIHRo
ZSBrZXljb2RlPC9wPgorICAgICAgIDxpbnB1dCBuZy1rZXl1cD0iZXZlbnQ9JGV2ZW50Ij4KKyAg
ICAgICA8cD5ldmVudCBrZXlDb2RlOiB7eyBldmVudC5rZXlDb2RlIH19PC9wPgorICAgICAgIDxw
PmV2ZW50IGFsdEtleToge3sgZXZlbnQuYWx0S2V5IH19PC9wPgorICAgICA8L2ZpbGU+CisgICA8
L2V4YW1wbGU+CisgKi8KKworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1lIG5n
S2V5cHJlc3MKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFNwZWNpZnkgY3VzdG9tIGJlaGF2aW9y
IG9uIGtleXByZXNzIGV2ZW50LgorICoKKyAqIEBlbGVtZW50IEFOWQorICogQHBhcmFtIHtleHBy
ZXNzaW9ufSBuZ0tleXByZXNzIHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRv
IGV2YWx1YXRlIHVwb24KKyAqIGtleXByZXNzLiAoe0BsaW5rIGd1aWRlL2V4cHJlc3Npb24jLWV2
ZW50LSBFdmVudCBvYmplY3QgaXMgYXZhaWxhYmxlIGFzIGAkZXZlbnRgfQorICogYW5kIGNhbiBi
ZSBpbnRlcnJvZ2F0ZWQgZm9yIGtleUNvZGUsIGFsdEtleSwgZXRjLikKKyAqCisgKiBAZXhhbXBs
ZQorICAgPGV4YW1wbGU+CisgICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICAgPGlu
cHV0IG5nLWtleXByZXNzPSJjb3VudCA9IGNvdW50ICsgMSIgbmctaW5pdD0iY291bnQ9MCI+Cisg
ICAgICBrZXkgcHJlc3MgY291bnQ6IHt7Y291bnR9fQorICAgICA8L2ZpbGU+CisgICA8L2V4YW1w
bGU+CisgKi8KKworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1lIG5nU3VibWl0
CisgKgorICogQGRlc2NyaXB0aW9uCisgKiBFbmFibGVzIGJpbmRpbmcgYW5ndWxhciBleHByZXNz
aW9ucyB0byBvbnN1Ym1pdCBldmVudHMuCisgKgorICogQWRkaXRpb25hbGx5IGl0IHByZXZlbnRz
IHRoZSBkZWZhdWx0IGFjdGlvbiAod2hpY2ggZm9yIGZvcm0gbWVhbnMgc2VuZGluZyB0aGUgcmVx
dWVzdCB0byB0aGUKKyAqIHNlcnZlciBhbmQgcmVsb2FkaW5nIHRoZSBjdXJyZW50IHBhZ2UpLCBi
dXQgb25seSBpZiB0aGUgZm9ybSBkb2VzIG5vdCBjb250YWluIGBhY3Rpb25gLAorICogYGRhdGEt
YWN0aW9uYCwgb3IgYHgtYWN0aW9uYCBhdHRyaWJ1dGVzLgorICoKKyAqIDxkaXYgY2xhc3M9ImFs
ZXJ0IGFsZXJ0LXdhcm5pbmciPgorICogKipXYXJuaW5nOioqIEJlIGNhcmVmdWwgbm90IHRvIGNh
dXNlICJkb3VibGUtc3VibWlzc2lvbiIgYnkgdXNpbmcgYm90aCB0aGUgYG5nQ2xpY2tgIGFuZAor
ICogYG5nU3VibWl0YCBoYW5kbGVycyB0b2dldGhlci4gU2VlIHRoZQorICoge0BsaW5rIGZvcm0j
c3VibWl0dGluZy1hLWZvcm0tYW5kLXByZXZlbnRpbmctdGhlLWRlZmF1bHQtYWN0aW9uIGBmb3Jt
YCBkaXJlY3RpdmUgZG9jdW1lbnRhdGlvbn0KKyAqIGZvciBhIGRldGFpbGVkIGRpc2N1c3Npb24g
b2Ygd2hlbiBgbmdTdWJtaXRgIG1heSBiZSB0cmlnZ2VyZWQuCisgKiA8L2Rpdj4KKyAqCisgKiBA
ZWxlbWVudCBmb3JtCisgKiBAcHJpb3JpdHkgMAorICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ1N1
Ym1pdCB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsLgorICogKHtA
bGluayBndWlkZS9leHByZXNzaW9uIy1ldmVudC0gRXZlbnQgb2JqZWN0IGlzIGF2YWlsYWJsZSBh
cyBgJGV2ZW50YH0pCisgKgorICogQGV4YW1wbGUKKyAgIDxleGFtcGxlIG1vZHVsZT0ic3VibWl0
RXhhbXBsZSI+CisgICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICAgPHNjcmlwdD4K
KyAgICAgICAgYW5ndWxhci5tb2R1bGUoJ3N1Ym1pdEV4YW1wbGUnLCBbXSkKKyAgICAgICAgICAu
Y29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29w
ZSkgeworICAgICAgICAgICAgJHNjb3BlLmxpc3QgPSBbXTsKKyAgICAgICAgICAgICRzY29wZS50
ZXh0ID0gJ2hlbGxvJzsKKyAgICAgICAgICAgICRzY29wZS5zdWJtaXQgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgICAgaWYgKCRzY29wZS50ZXh0KSB7CisgICAgICAgICAgICAgICAgJHNjb3Bl
Lmxpc3QucHVzaCh0aGlzLnRleHQpOworICAgICAgICAgICAgICAgICRzY29wZS50ZXh0ID0gJyc7
CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgfV0pOworICAgICAg
PC9zY3JpcHQ+CisgICAgICA8Zm9ybSBuZy1zdWJtaXQ9InN1Ym1pdCgpIiBuZy1jb250cm9sbGVy
PSJFeGFtcGxlQ29udHJvbGxlciI+CisgICAgICAgIEVudGVyIHRleHQgYW5kIGhpdCBlbnRlcjoK
KyAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5nLW1vZGVsPSJ0ZXh0IiBuYW1lPSJ0ZXh0IiAv
PgorICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBpZD0ic3VibWl0IiB2YWx1ZT0iU3VibWl0
IiAvPgorICAgICAgICA8cHJlPmxpc3Q9e3tsaXN0fX08L3ByZT4KKyAgICAgIDwvZm9ybT4KKyAg
ICAgPC9maWxlPgorICAgICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFj
dG9yIj4KKyAgICAgICBpdCgnc2hvdWxkIGNoZWNrIG5nLXN1Ym1pdCcsIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGluZygnbGlzdCcpKS5nZXRUZXh0KCkpLnRv
QmUoJ2xpc3Q9W10nKTsKKyAgICAgICAgIGVsZW1lbnQoYnkuY3NzKCcjc3VibWl0JykpLmNsaWNr
KCk7CisgICAgICAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKCdsaXN0JykpLmdldFRleHQo
KSkudG9Db250YWluKCdoZWxsbycpOworICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkubW9kZWwo
J3RleHQnKSkuZ2V0QXR0cmlidXRlKCd2YWx1ZScpKS50b0JlKCcnKTsKKyAgICAgICB9KTsKKyAg
ICAgICBpdCgnc2hvdWxkIGlnbm9yZSBlbXB0eSBzdHJpbmdzJywgZnVuY3Rpb24oKSB7CisgICAg
ICAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKCdsaXN0JykpLmdldFRleHQoKSkudG9CZSgn
bGlzdD1bXScpOworICAgICAgICAgZWxlbWVudChieS5jc3MoJyNzdWJtaXQnKSkuY2xpY2soKTsK
KyAgICAgICAgIGVsZW1lbnQoYnkuY3NzKCcjc3VibWl0JykpLmNsaWNrKCk7CisgICAgICAgICBl
eHBlY3QoZWxlbWVudChieS5iaW5kaW5nKCdsaXN0JykpLmdldFRleHQoKSkudG9Db250YWluKCdo
ZWxsbycpOworICAgICAgICB9KTsKKyAgICAgPC9maWxlPgorICAgPC9leGFtcGxlPgorICovCisK
Ky8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgbmdGb2N1cworICoKKyAqIEBkZXNj
cmlwdGlvbgorICogU3BlY2lmeSBjdXN0b20gYmVoYXZpb3Igb24gZm9jdXMgZXZlbnQuCisgKgor
ICogTm90ZTogQXMgdGhlIGBmb2N1c2AgZXZlbnQgaXMgZXhlY3V0ZWQgc3luY2hyb25vdXNseSB3
aGVuIGNhbGxpbmcgYGlucHV0LmZvY3VzKClgCisgKiBBbmd1bGFySlMgZXhlY3V0ZXMgdGhlIGV4
cHJlc3Npb24gdXNpbmcgYHNjb3BlLiRldmFsQXN5bmNgIGlmIHRoZSBldmVudCBpcyBmaXJlZAor
ICogZHVyaW5nIGFuIGAkYXBwbHlgIHRvIGVuc3VyZSBhIGNvbnNpc3RlbnQgc3RhdGUuCisgKgor
ICogQGVsZW1lbnQgd2luZG93LCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYQorICogQHByaW9y
aXR5IDAKKyAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdGb2N1cyB7QGxpbmsgZ3VpZGUvZXhwcmVz
c2lvbiBFeHByZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9uCisgKiBmb2N1cy4gKHtAbGluayBndWlk
ZS9leHByZXNzaW9uIy1ldmVudC0gRXZlbnQgb2JqZWN0IGlzIGF2YWlsYWJsZSBhcyBgJGV2ZW50
YH0pCisgKgorICogQGV4YW1wbGUKKyAqIFNlZSB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nQ2xpY2sg
bmdDbGlja30KKyAqLworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1lIG5nQmx1
cgorICoKKyAqIEBkZXNjcmlwdGlvbgorICogU3BlY2lmeSBjdXN0b20gYmVoYXZpb3Igb24gYmx1
ciBldmVudC4KKyAqCisgKiBBIFtibHVyIGV2ZW50XShodHRwczovL2RldmVsb3Blci5tb3ppbGxh
Lm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvYmx1cikgZmlyZXMgd2hlbgorICogYW4gZWxlbWVu
dCBoYXMgbG9zdCBmb2N1cy4KKyAqCisgKiBOb3RlOiBBcyB0aGUgYGJsdXJgIGV2ZW50IGlzIGV4
ZWN1dGVkIHN5bmNocm9ub3VzbHkgYWxzbyBkdXJpbmcgRE9NIG1hbmlwdWxhdGlvbnMKKyAqIChl
LmcuIHJlbW92aW5nIGEgZm9jdXNzZWQgaW5wdXQpLAorICogQW5ndWxhckpTIGV4ZWN1dGVzIHRo
ZSBleHByZXNzaW9uIHVzaW5nIGBzY29wZS4kZXZhbEFzeW5jYCBpZiB0aGUgZXZlbnQgaXMgZmly
ZWQKKyAqIGR1cmluZyBhbiBgJGFwcGx5YCB0byBlbnN1cmUgYSBjb25zaXN0ZW50IHN0YXRlLgor
ICoKKyAqIEBlbGVtZW50IHdpbmRvdywgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIGEKKyAqIEBw
cmlvcml0eSAwCisgKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nQmx1ciB7QGxpbmsgZ3VpZGUvZXhw
cmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9uCisgKiBibHVyLiAoe0BsaW5rIGd1
aWRlL2V4cHJlc3Npb24jLWV2ZW50LSBFdmVudCBvYmplY3QgaXMgYXZhaWxhYmxlIGFzIGAkZXZl
bnRgfSkKKyAqCisgKiBAZXhhbXBsZQorICogU2VlIHtAbGluayBuZy5kaXJlY3RpdmU6bmdDbGlj
ayBuZ0NsaWNrfQorICovCisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgbmdD
b3B5CisgKgorICogQGRlc2NyaXB0aW9uCisgKiBTcGVjaWZ5IGN1c3RvbSBiZWhhdmlvciBvbiBj
b3B5IGV2ZW50LgorICoKKyAqIEBlbGVtZW50IHdpbmRvdywgaW5wdXQsIHNlbGVjdCwgdGV4dGFy
ZWEsIGEKKyAqIEBwcmlvcml0eSAwCisgKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nQ29weSB7QGxp
bmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9uCisgKiBjb3B5
LiAoe0BsaW5rIGd1aWRlL2V4cHJlc3Npb24jLWV2ZW50LSBFdmVudCBvYmplY3QgaXMgYXZhaWxh
YmxlIGFzIGAkZXZlbnRgfSkKKyAqCisgKiBAZXhhbXBsZQorICAgPGV4YW1wbGU+CisgICAgIDxm
aWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICAgPGlucHV0IG5nLWNvcHk9ImNvcGllZD10cnVl
IiBuZy1pbml0PSJjb3BpZWQ9ZmFsc2U7IHZhbHVlPSdjb3B5IG1lJyIgbmctbW9kZWw9InZhbHVl
Ij4KKyAgICAgIGNvcGllZDoge3tjb3BpZWR9fQorICAgICA8L2ZpbGU+CisgICA8L2V4YW1wbGU+
CisgKi8KKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBuZ0N1dAorICoKKyAq
IEBkZXNjcmlwdGlvbgorICogU3BlY2lmeSBjdXN0b20gYmVoYXZpb3Igb24gY3V0IGV2ZW50Lgor
ICoKKyAqIEBlbGVtZW50IHdpbmRvdywgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIGEKKyAqIEBw
cmlvcml0eSAwCisgKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nQ3V0IHtAbGluayBndWlkZS9leHBy
ZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWx1YXRlIHVwb24KKyAqIGN1dC4gKHtAbGluayBndWlk
ZS9leHByZXNzaW9uIy1ldmVudC0gRXZlbnQgb2JqZWN0IGlzIGF2YWlsYWJsZSBhcyBgJGV2ZW50
YH0pCisgKgorICogQGV4YW1wbGUKKyAgIDxleGFtcGxlPgorICAgICA8ZmlsZSBuYW1lPSJpbmRl
eC5odG1sIj4KKyAgICAgIDxpbnB1dCBuZy1jdXQ9ImN1dD10cnVlIiBuZy1pbml0PSJjdXQ9ZmFs
c2U7IHZhbHVlPSdjdXQgbWUnIiBuZy1tb2RlbD0idmFsdWUiPgorICAgICAgY3V0OiB7e2N1dH19
CisgICAgIDwvZmlsZT4KKyAgIDwvZXhhbXBsZT4KKyAqLworCisvKioKKyAqIEBuZ2RvYyBkaXJl
Y3RpdmUKKyAqIEBuYW1lIG5nUGFzdGUKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFNwZWNpZnkg
Y3VzdG9tIGJlaGF2aW9yIG9uIHBhc3RlIGV2ZW50LgorICoKKyAqIEBlbGVtZW50IHdpbmRvdywg
aW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIGEKKyAqIEBwcmlvcml0eSAwCisgKiBAcGFyYW0ge2V4
cHJlc3Npb259IG5nUGFzdGUge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8g
ZXZhbHVhdGUgdXBvbgorICogcGFzdGUuICh7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiMtZXZlbnQt
IEV2ZW50IG9iamVjdCBpcyBhdmFpbGFibGUgYXMgYCRldmVudGB9KQorICoKKyAqIEBleGFtcGxl
CisgICA8ZXhhbXBsZT4KKyAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAgICA8aW5w
dXQgbmctcGFzdGU9InBhc3RlPXRydWUiIG5nLWluaXQ9InBhc3RlPWZhbHNlIiBwbGFjZWhvbGRl
cj0ncGFzdGUgaGVyZSc+CisgICAgICBwYXN0ZWQ6IHt7cGFzdGV9fQorICAgICA8L2ZpbGU+Cisg
ICA8L2V4YW1wbGU+CisgKi8KKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBu
Z0lmCisgKiBAcmVzdHJpY3QgQQorICogQG11bHRpRWxlbWVudAorICoKKyAqIEBkZXNjcmlwdGlv
bgorICogVGhlIGBuZ0lmYCBkaXJlY3RpdmUgcmVtb3ZlcyBvciByZWNyZWF0ZXMgYSBwb3J0aW9u
IG9mIHRoZSBET00gdHJlZSBiYXNlZCBvbiBhbgorICoge2V4cHJlc3Npb259LiBJZiB0aGUgZXhw
cmVzc2lvbiBhc3NpZ25lZCB0byBgbmdJZmAgZXZhbHVhdGVzIHRvIGEgZmFsc2UKKyAqIHZhbHVl
IHRoZW4gdGhlIGVsZW1lbnQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBET00sIG90aGVyd2lzZSBhIGNs
b25lIG9mIHRoZQorICogZWxlbWVudCBpcyByZWluc2VydGVkIGludG8gdGhlIERPTS4KKyAqCisg
KiBgbmdJZmAgZGlmZmVycyBmcm9tIGBuZ1Nob3dgIGFuZCBgbmdIaWRlYCBpbiB0aGF0IGBuZ0lm
YCBjb21wbGV0ZWx5IHJlbW92ZXMgYW5kIHJlY3JlYXRlcyB0aGUKKyAqIGVsZW1lbnQgaW4gdGhl
IERPTSByYXRoZXIgdGhhbiBjaGFuZ2luZyBpdHMgdmlzaWJpbGl0eSB2aWEgdGhlIGBkaXNwbGF5
YCBjc3MgcHJvcGVydHkuICBBIGNvbW1vbgorICogY2FzZSB3aGVuIHRoaXMgZGlmZmVyZW5jZSBp
cyBzaWduaWZpY2FudCBpcyB3aGVuIHVzaW5nIGNzcyBzZWxlY3RvcnMgdGhhdCByZWx5IG9uIGFu
IGVsZW1lbnQncworICogcG9zaXRpb24gd2l0aGluIHRoZSBET00sIHN1Y2ggYXMgdGhlIGA6Zmly
c3QtY2hpbGRgIG9yIGA6bGFzdC1jaGlsZGAgcHNldWRvLWNsYXNzZXMuCisgKgorICogTm90ZSB0
aGF0IHdoZW4gYW4gZWxlbWVudCBpcyByZW1vdmVkIHVzaW5nIGBuZ0lmYCBpdHMgc2NvcGUgaXMg
ZGVzdHJveWVkIGFuZCBhIG5ldyBzY29wZQorICogaXMgY3JlYXRlZCB3aGVuIHRoZSBlbGVtZW50
IGlzIHJlc3RvcmVkLiAgVGhlIHNjb3BlIGNyZWF0ZWQgd2l0aGluIGBuZ0lmYCBpbmhlcml0cyBm
cm9tCisgKiBpdHMgcGFyZW50IHNjb3BlIHVzaW5nCisgKiBbcHJvdG90eXBhbCBpbmhlcml0YW5j
ZV0oaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci5qcy93aWtpL1VuZGVyc3RhbmRp
bmctU2NvcGVzI2phdmFzY3JpcHQtcHJvdG90eXBhbC1pbmhlcml0YW5jZSkuCisgKiBBbiBpbXBv
cnRhbnQgaW1wbGljYXRpb24gb2YgdGhpcyBpcyBpZiBgbmdNb2RlbGAgaXMgdXNlZCB3aXRoaW4g
YG5nSWZgIHRvIGJpbmQgdG8KKyAqIGEgamF2YXNjcmlwdCBwcmltaXRpdmUgZGVmaW5lZCBpbiB0
aGUgcGFyZW50IHNjb3BlLiBJbiB0aGlzIGNhc2UgYW55IG1vZGlmaWNhdGlvbnMgbWFkZSB0byB0
aGUKKyAqIHZhcmlhYmxlIHdpdGhpbiB0aGUgY2hpbGQgc2NvcGUgd2lsbCBvdmVycmlkZSAoaGlk
ZSkgdGhlIHZhbHVlIGluIHRoZSBwYXJlbnQgc2NvcGUuCisgKgorICogQWxzbywgYG5nSWZgIHJl
Y3JlYXRlcyBlbGVtZW50cyB1c2luZyB0aGVpciBjb21waWxlZCBzdGF0ZS4gQW4gZXhhbXBsZSBv
ZiB0aGlzIGJlaGF2aW9yCisgKiBpcyBpZiBhbiBlbGVtZW50J3MgY2xhc3MgYXR0cmlidXRlIGlz
IGRpcmVjdGx5IG1vZGlmaWVkIGFmdGVyIGl0J3MgY29tcGlsZWQsIHVzaW5nIHNvbWV0aGluZyBs
aWtlCisgKiBqUXVlcnkncyBgLmFkZENsYXNzKClgIG1ldGhvZCwgYW5kIHRoZSBlbGVtZW50IGlz
IGxhdGVyIHJlbW92ZWQuIFdoZW4gYG5nSWZgIHJlY3JlYXRlcyB0aGUgZWxlbWVudAorICogdGhl
IGFkZGVkIGNsYXNzIHdpbGwgYmUgbG9zdCBiZWNhdXNlIHRoZSBvcmlnaW5hbCBjb21waWxlZCBz
dGF0ZSBpcyB1c2VkIHRvIHJlZ2VuZXJhdGUgdGhlIGVsZW1lbnQuCisgKgorICogQWRkaXRpb25h
bGx5LCB5b3UgY2FuIHByb3ZpZGUgYW5pbWF0aW9ucyB2aWEgdGhlIGBuZ0FuaW1hdGVgIG1vZHVs
ZSB0byBhbmltYXRlIHRoZSBgZW50ZXJgCisgKiBhbmQgYGxlYXZlYCBlZmZlY3RzLgorICoKKyAq
IEBhbmltYXRpb25zCisgKiBlbnRlciAtIGhhcHBlbnMganVzdCBhZnRlciB0aGUgYG5nSWZgIGNv
bnRlbnRzIGNoYW5nZSBhbmQgYSBuZXcgRE9NIGVsZW1lbnQgaXMgY3JlYXRlZCBhbmQgaW5qZWN0
ZWQgaW50byB0aGUgYG5nSWZgIGNvbnRhaW5lcgorICogbGVhdmUgLSBoYXBwZW5zIGp1c3QgYmVm
b3JlIHRoZSBgbmdJZmAgY29udGVudHMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgRE9NCisgKgorICog
QGVsZW1lbnQgQU5ZCisgKiBAc2NvcGUKKyAqIEBwcmlvcml0eSA2MDAKKyAqIEBwYXJhbSB7ZXhw
cmVzc2lvbn0gbmdJZiBJZiB0aGUge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0g
aXMgZmFsc3kgdGhlbgorICogICAgIHRoZSBlbGVtZW50IGlzIHJlbW92ZWQgZnJvbSB0aGUgRE9N
IHRyZWUuIElmIGl0IGlzIHRydXRoeSBhIGNvcHkgb2YgdGhlIGNvbXBpbGVkCisgKiAgICAgZWxl
bWVudCBpcyBhZGRlZCB0byB0aGUgRE9NIHRyZWUuCisgKgorICogQGV4YW1wbGUKKyAgPGV4YW1w
bGUgbW9kdWxlPSJuZ0FuaW1hdGUiIGRlcHM9ImFuZ3VsYXItYW5pbWF0ZS5qcyIgYW5pbWF0aW9u
cz0idHJ1ZSI+CisgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAgICA8bGFiZWw+Q2xp
Y2sgbWU6IDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmctbW9kZWw9ImNoZWNrZWQiIG5nLWluaXQ9
ImNoZWNrZWQ9dHJ1ZSIgLz48L2xhYmVsPjxici8+CisgICAgICBTaG93IHdoZW4gY2hlY2tlZDoK
KyAgICAgIDxzcGFuIG5nLWlmPSJjaGVja2VkIiBjbGFzcz0iYW5pbWF0ZS1pZiI+CisgICAgICAg
IFRoaXMgaXMgcmVtb3ZlZCB3aGVuIHRoZSBjaGVja2JveCBpcyB1bmNoZWNrZWQuCisgICAgICA8
L3NwYW4+CisgICAgPC9maWxlPgorICAgIDxmaWxlIG5hbWU9ImFuaW1hdGlvbnMuY3NzIj4KKyAg
ICAgIC5hbmltYXRlLWlmIHsKKyAgICAgICAgYmFja2dyb3VuZDp3aGl0ZTsKKyAgICAgICAgYm9y
ZGVyOjFweCBzb2xpZCBibGFjazsKKyAgICAgICAgcGFkZGluZzoxMHB4OworICAgICAgfQorCisg
ICAgICAuYW5pbWF0ZS1pZi5uZy1lbnRlciwgLmFuaW1hdGUtaWYubmctbGVhdmUgeworICAgICAg
ICAtd2Via2l0LXRyYW5zaXRpb246YWxsIGN1YmljLWJlemllcigwLjI1MCwgMC40NjAsIDAuNDUw
LCAwLjk0MCkgMC41czsKKyAgICAgICAgdHJhbnNpdGlvbjphbGwgY3ViaWMtYmV6aWVyKDAuMjUw
LCAwLjQ2MCwgMC40NTAsIDAuOTQwKSAwLjVzOworICAgICAgfQorCisgICAgICAuYW5pbWF0ZS1p
Zi5uZy1lbnRlciwKKyAgICAgIC5hbmltYXRlLWlmLm5nLWxlYXZlLm5nLWxlYXZlLWFjdGl2ZSB7
CisgICAgICAgIG9wYWNpdHk6MDsKKyAgICAgIH0KKworICAgICAgLmFuaW1hdGUtaWYubmctbGVh
dmUsCisgICAgICAuYW5pbWF0ZS1pZi5uZy1lbnRlci5uZy1lbnRlci1hY3RpdmUgeworICAgICAg
ICBvcGFjaXR5OjE7CisgICAgICB9CisgICAgPC9maWxlPgorICA8L2V4YW1wbGU+CisgKi8KK3Zh
ciBuZ0lmRGlyZWN0aXZlID0gWyckYW5pbWF0ZScsIGZ1bmN0aW9uKCRhbmltYXRlKSB7CisgIHJl
dHVybiB7CisgICAgbXVsdGlFbGVtZW50OiB0cnVlLAorICAgIHRyYW5zY2x1ZGU6ICdlbGVtZW50
JywKKyAgICBwcmlvcml0eTogNjAwLAorICAgIHRlcm1pbmFsOiB0cnVlLAorICAgIHJlc3RyaWN0
OiAnQScsCisgICAgJCR0bGI6IHRydWUsCisgICAgbGluazogZnVuY3Rpb24oJHNjb3BlLCAkZWxl
bWVudCwgJGF0dHIsIGN0cmwsICR0cmFuc2NsdWRlKSB7CisgICAgICAgIHZhciBibG9jaywgY2hp
bGRTY29wZSwgcHJldmlvdXNFbGVtZW50czsKKyAgICAgICAgJHNjb3BlLiR3YXRjaCgkYXR0ci5u
Z0lmLCBmdW5jdGlvbiBuZ0lmV2F0Y2hBY3Rpb24odmFsdWUpIHsKKworICAgICAgICAgIGlmICh2
YWx1ZSkgeworICAgICAgICAgICAgaWYgKCFjaGlsZFNjb3BlKSB7CisgICAgICAgICAgICAgICR0
cmFuc2NsdWRlKGZ1bmN0aW9uKGNsb25lLCBuZXdTY29wZSkgeworICAgICAgICAgICAgICAgIGNo
aWxkU2NvcGUgPSBuZXdTY29wZTsKKyAgICAgICAgICAgICAgICBjbG9uZVtjbG9uZS5sZW5ndGgr
K10gPSBkb2N1bWVudC5jcmVhdGVDb21tZW50KCcgZW5kIG5nSWY6ICcgKyAkYXR0ci5uZ0lmICsg
JyAnKTsKKyAgICAgICAgICAgICAgICAvLyBOb3RlOiBXZSBvbmx5IG5lZWQgdGhlIGZpcnN0L2xh
c3Qgbm9kZSBvZiB0aGUgY2xvbmVkIG5vZGVzLgorICAgICAgICAgICAgICAgIC8vIEhvd2V2ZXIs
IHdlIG5lZWQgdG8ga2VlcCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBqcWxpdGUgd3JhcHBlciBhcyBp
dCBtaWdodCBiZSBjaGFuZ2VkIGxhdGVyCisgICAgICAgICAgICAgICAgLy8gYnkgYSBkaXJlY3Rp
dmUgd2l0aCB0ZW1wbGF0ZVVybCB3aGVuIGl0cyB0ZW1wbGF0ZSBhcnJpdmVzLgorICAgICAgICAg
ICAgICAgIGJsb2NrID0geworICAgICAgICAgICAgICAgICAgY2xvbmU6IGNsb25lCisgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAkYW5pbWF0ZS5lbnRlcihjbG9uZSwgJGVsZW1l
bnQucGFyZW50KCksICRlbGVtZW50KTsKKyAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChwcmV2aW91c0VsZW1lbnRzKSB7
CisgICAgICAgICAgICAgIHByZXZpb3VzRWxlbWVudHMucmVtb3ZlKCk7CisgICAgICAgICAgICAg
IHByZXZpb3VzRWxlbWVudHMgPSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGNoaWxkU2NvcGUpIHsKKyAgICAgICAgICAgICAgY2hpbGRTY29wZS4kZGVzdHJveSgpOworICAg
ICAgICAgICAgICBjaGlsZFNjb3BlID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChibG9jaykgeworICAgICAgICAgICAgICBwcmV2aW91c0VsZW1lbnRzID0gZ2V0QmxvY2tO
b2RlcyhibG9jay5jbG9uZSk7CisgICAgICAgICAgICAgICRhbmltYXRlLmxlYXZlKHByZXZpb3Vz
RWxlbWVudHMpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgcHJldmlvdXNFbGVt
ZW50cyA9IG51bGw7CisgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICBibG9jayA9IG51
bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisgIH07
Cit9XTsKKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBuZ0luY2x1ZGUKKyAq
IEByZXN0cmljdCBFQ0EKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIEZldGNoZXMsIGNvbXBpbGVz
IGFuZCBpbmNsdWRlcyBhbiBleHRlcm5hbCBIVE1MIGZyYWdtZW50LgorICoKKyAqIEJ5IGRlZmF1
bHQsIHRoZSB0ZW1wbGF0ZSBVUkwgaXMgcmVzdHJpY3RlZCB0byB0aGUgc2FtZSBkb21haW4gYW5k
IHByb3RvY29sIGFzIHRoZQorICogYXBwbGljYXRpb24gZG9jdW1lbnQuIFRoaXMgaXMgZG9uZSBi
eSBjYWxsaW5nIHtAbGluayAkc2NlI2dldFRydXN0ZWRSZXNvdXJjZVVybAorICogJHNjZS5nZXRU
cnVzdGVkUmVzb3VyY2VVcmx9IG9uIGl0LiBUbyBsb2FkIHRlbXBsYXRlcyBmcm9tIG90aGVyIGRv
bWFpbnMgb3IgcHJvdG9jb2xzCisgKiB5b3UgbWF5IGVpdGhlciB7QGxpbmsgbmcuJHNjZURlbGVn
YXRlUHJvdmlkZXIjcmVzb3VyY2VVcmxXaGl0ZWxpc3Qgd2hpdGVsaXN0IHRoZW19IG9yCisgKiB7
QGxpbmsgJHNjZSN0cnVzdEFzUmVzb3VyY2VVcmwgd3JhcCB0aGVtfSBhcyB0cnVzdGVkIHZhbHVl
cy4gUmVmZXIgdG8gQW5ndWxhcidzIHtAbGluaworICogbmcuJHNjZSBTdHJpY3QgQ29udGV4dHVh
bCBFc2NhcGluZ30uCisgKgorICogSW4gYWRkaXRpb24sIHRoZSBicm93c2VyJ3MKKyAqIFtTYW1l
IE9yaWdpbiBQb2xpY3ldKGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvYnJvd3NlcnNlYy93aWtp
L1BhcnQyI1NhbWUtb3JpZ2luX3BvbGljeV9mb3JfWE1MSHR0cFJlcXVlc3QpCisgKiBhbmQgW0Ny
b3NzLU9yaWdpbiBSZXNvdXJjZSBTaGFyaW5nIChDT1JTKV0oaHR0cDovL3d3dy53My5vcmcvVFIv
Y29ycy8pCisgKiBwb2xpY3kgbWF5IGZ1cnRoZXIgcmVzdHJpY3Qgd2hldGhlciB0aGUgdGVtcGxh
dGUgaXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC4KKyAqIEZvciBleGFtcGxlLCBgbmdJbmNsdWRlYCB3
b24ndCB3b3JrIGZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMgb24gYWxsIGJyb3dzZXJzIGFuZCBm
b3IgYGZpbGU6Ly9gCisgKiBhY2Nlc3Mgb24gc29tZSBicm93c2Vycy4KKyAqCisgKiBAYW5pbWF0
aW9ucworICogZW50ZXIgLSBhbmltYXRpb24gaXMgdXNlZCB0byBicmluZyBuZXcgY29udGVudCBp
bnRvIHRoZSBicm93c2VyLgorICogbGVhdmUgLSBhbmltYXRpb24gaXMgdXNlZCB0byBhbmltYXRl
IGV4aXN0aW5nIGNvbnRlbnQgYXdheS4KKyAqCisgKiBUaGUgZW50ZXIgYW5kIGxlYXZlIGFuaW1h
dGlvbiBvY2N1ciBjb25jdXJyZW50bHkuCisgKgorICogQHNjb3BlCisgKiBAcHJpb3JpdHkgNDAw
CisgKgorICogQHBhcmFtIHtzdHJpbmd9IG5nSW5jbHVkZXxzcmMgYW5ndWxhciBleHByZXNzaW9u
IGV2YWx1YXRpbmcgdG8gVVJMLiBJZiB0aGUgc291cmNlIGlzIGEgc3RyaW5nIGNvbnN0YW50LAor
ICogICAgICAgICAgICAgICAgIG1ha2Ugc3VyZSB5b3Ugd3JhcCBpdCBpbiAqKnNpbmdsZSoqIHF1
b3RlcywgZS5nLiBgc3JjPSInbXlQYXJ0aWFsVGVtcGxhdGUuaHRtbCciYC4KKyAqIEBwYXJhbSB7
c3RyaW5nPX0gb25sb2FkIEV4cHJlc3Npb24gdG8gZXZhbHVhdGUgd2hlbiBhIG5ldyBwYXJ0aWFs
IGlzIGxvYWRlZC4KKyAqCisgKiBAcGFyYW0ge3N0cmluZz19IGF1dG9zY3JvbGwgV2hldGhlciBg
bmdJbmNsdWRlYCBzaG91bGQgY2FsbCB7QGxpbmsgbmcuJGFuY2hvclNjcm9sbAorICogICAgICAg
ICAgICAgICAgICAkYW5jaG9yU2Nyb2xsfSB0byBzY3JvbGwgdGhlIHZpZXdwb3J0IGFmdGVyIHRo
ZSBjb250ZW50IGlzIGxvYWRlZC4KKyAqCisgKiAgICAgICAgICAgICAgICAgIC0gSWYgdGhlIGF0
dHJpYnV0ZSBpcyBub3Qgc2V0LCBkaXNhYmxlIHNjcm9sbGluZy4KKyAqICAgICAgICAgICAgICAg
ICAgLSBJZiB0aGUgYXR0cmlidXRlIGlzIHNldCB3aXRob3V0IHZhbHVlLCBlbmFibGUgc2Nyb2xs
aW5nLgorICogICAgICAgICAgICAgICAgICAtIE90aGVyd2lzZSBlbmFibGUgc2Nyb2xsaW5nIG9u
bHkgaWYgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRydXRoeSB2YWx1ZS4KKyAqCisgKiBA
ZXhhbXBsZQorICA8ZXhhbXBsZSBtb2R1bGU9ImluY2x1ZGVFeGFtcGxlIiBkZXBzPSJhbmd1bGFy
LWFuaW1hdGUuanMiIGFuaW1hdGlvbnM9InRydWUiPgorICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0
bWwiPgorICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9IkV4YW1wbGVDb250cm9sbGVyIj4KKyAgICAg
ICA8c2VsZWN0IG5nLW1vZGVsPSJ0ZW1wbGF0ZSIgbmctb3B0aW9ucz0idC5uYW1lIGZvciB0IGlu
IHRlbXBsYXRlcyI+CisgICAgICAgIDxvcHRpb24gdmFsdWU9IiI+KGJsYW5rKTwvb3B0aW9uPgor
ICAgICAgIDwvc2VsZWN0PgorICAgICAgIHVybCBvZiB0aGUgdGVtcGxhdGU6IDxjb2RlPnt7dGVt
cGxhdGUudXJsfX08L2NvZGU+CisgICAgICAgPGhyLz4KKyAgICAgICA8ZGl2IGNsYXNzPSJzbGlk
ZS1hbmltYXRlLWNvbnRhaW5lciI+CisgICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZS1hbmltYXRl
IiBuZy1pbmNsdWRlPSJ0ZW1wbGF0ZS51cmwiPjwvZGl2PgorICAgICAgIDwvZGl2PgorICAgICA8
L2Rpdj4KKyAgICA8L2ZpbGU+CisgICAgPGZpbGUgbmFtZT0ic2NyaXB0LmpzIj4KKyAgICAgIGFu
Z3VsYXIubW9kdWxlKCdpbmNsdWRlRXhhbXBsZScsIFsnbmdBbmltYXRlJ10pCisgICAgICAgIC5j
b250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3Bl
KSB7CisgICAgICAgICAgJHNjb3BlLnRlbXBsYXRlcyA9CisgICAgICAgICAgICBbIHsgbmFtZTog
J3RlbXBsYXRlMS5odG1sJywgdXJsOiAndGVtcGxhdGUxLmh0bWwnfSwKKyAgICAgICAgICAgICAg
eyBuYW1lOiAndGVtcGxhdGUyLmh0bWwnLCB1cmw6ICd0ZW1wbGF0ZTIuaHRtbCd9IF07CisgICAg
ICAgICAgJHNjb3BlLnRlbXBsYXRlID0gJHNjb3BlLnRlbXBsYXRlc1swXTsKKyAgICAgICAgfV0p
OworICAgICA8L2ZpbGU+CisgICAgPGZpbGUgbmFtZT0idGVtcGxhdGUxLmh0bWwiPgorICAgICAg
Q29udGVudCBvZiB0ZW1wbGF0ZTEuaHRtbAorICAgIDwvZmlsZT4KKyAgICA8ZmlsZSBuYW1lPSJ0
ZW1wbGF0ZTIuaHRtbCI+CisgICAgICBDb250ZW50IG9mIHRlbXBsYXRlMi5odG1sCisgICAgPC9m
aWxlPgorICAgIDxmaWxlIG5hbWU9ImFuaW1hdGlvbnMuY3NzIj4KKyAgICAgIC5zbGlkZS1hbmlt
YXRlLWNvbnRhaW5lciB7CisgICAgICAgIHBvc2l0aW9uOnJlbGF0aXZlOworICAgICAgICBiYWNr
Z3JvdW5kOndoaXRlOworICAgICAgICBib3JkZXI6MXB4IHNvbGlkIGJsYWNrOworICAgICAgICBo
ZWlnaHQ6NDBweDsKKyAgICAgICAgb3ZlcmZsb3c6aGlkZGVuOworICAgICAgfQorCisgICAgICAu
c2xpZGUtYW5pbWF0ZSB7CisgICAgICAgIHBhZGRpbmc6MTBweDsKKyAgICAgIH0KKworICAgICAg
LnNsaWRlLWFuaW1hdGUubmctZW50ZXIsIC5zbGlkZS1hbmltYXRlLm5nLWxlYXZlIHsKKyAgICAg
ICAgLXdlYmtpdC10cmFuc2l0aW9uOmFsbCBjdWJpYy1iZXppZXIoMC4yNTAsIDAuNDYwLCAwLjQ1
MCwgMC45NDApIDAuNXM7CisgICAgICAgIHRyYW5zaXRpb246YWxsIGN1YmljLWJlemllcigwLjI1
MCwgMC40NjAsIDAuNDUwLCAwLjk0MCkgMC41czsKKworICAgICAgICBwb3NpdGlvbjphYnNvbHV0
ZTsKKyAgICAgICAgdG9wOjA7CisgICAgICAgIGxlZnQ6MDsKKyAgICAgICAgcmlnaHQ6MDsKKyAg
ICAgICAgYm90dG9tOjA7CisgICAgICAgIGRpc3BsYXk6YmxvY2s7CisgICAgICAgIHBhZGRpbmc6
MTBweDsKKyAgICAgIH0KKworICAgICAgLnNsaWRlLWFuaW1hdGUubmctZW50ZXIgeworICAgICAg
ICB0b3A6LTUwcHg7CisgICAgICB9CisgICAgICAuc2xpZGUtYW5pbWF0ZS5uZy1lbnRlci5uZy1l
bnRlci1hY3RpdmUgeworICAgICAgICB0b3A6MDsKKyAgICAgIH0KKworICAgICAgLnNsaWRlLWFu
aW1hdGUubmctbGVhdmUgeworICAgICAgICB0b3A6MDsKKyAgICAgIH0KKyAgICAgIC5zbGlkZS1h
bmltYXRlLm5nLWxlYXZlLm5nLWxlYXZlLWFjdGl2ZSB7CisgICAgICAgIHRvcDo1MHB4OworICAg
ICAgfQorICAgIDwvZmlsZT4KKyAgICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJw
cm90cmFjdG9yIj4KKyAgICAgIHZhciB0ZW1wbGF0ZVNlbGVjdCA9IGVsZW1lbnQoYnkubW9kZWwo
J3RlbXBsYXRlJykpOworICAgICAgdmFyIGluY2x1ZGVFbGVtID0gZWxlbWVudChieS5jc3MoJ1tu
Zy1pbmNsdWRlXScpKTsKKworICAgICAgaXQoJ3Nob3VsZCBsb2FkIHRlbXBsYXRlMS5odG1sJywg
ZnVuY3Rpb24oKSB7CisgICAgICAgIGV4cGVjdChpbmNsdWRlRWxlbS5nZXRUZXh0KCkpLnRvTWF0
Y2goL0NvbnRlbnQgb2YgdGVtcGxhdGUxLmh0bWwvKTsKKyAgICAgIH0pOworCisgICAgICBpdCgn
c2hvdWxkIGxvYWQgdGVtcGxhdGUyLmh0bWwnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKGJy
b3dzZXIucGFyYW1zLmJyb3dzZXIgPT0gJ2ZpcmVmb3gnKSB7CisgICAgICAgICAgLy8gRmlyZWZv
eCBjYW4ndCBoYW5kbGUgdXNpbmcgc2VsZWN0cworICAgICAgICAgIC8vIFNlZSBodHRwczovL2dp
dGh1Yi5jb20vYW5ndWxhci9wcm90cmFjdG9yL2lzc3Vlcy80ODAKKyAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgdGVtcGxhdGVTZWxlY3QuY2xpY2soKTsKKyAgICAgICAgdGVt
cGxhdGVTZWxlY3QuYWxsKGJ5LmNzcygnb3B0aW9uJykpLmdldCgyKS5jbGljaygpOworICAgICAg
ICBleHBlY3QoaW5jbHVkZUVsZW0uZ2V0VGV4dCgpKS50b01hdGNoKC9Db250ZW50IG9mIHRlbXBs
YXRlMi5odG1sLyk7CisgICAgICB9KTsKKworICAgICAgaXQoJ3Nob3VsZCBjaGFuZ2UgdG8gYmxh
bmsnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKGJyb3dzZXIucGFyYW1zLmJyb3dzZXIgPT0g
J2ZpcmVmb3gnKSB7CisgICAgICAgICAgLy8gRmlyZWZveCBjYW4ndCBoYW5kbGUgdXNpbmcgc2Vs
ZWN0cworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0ZW1wbGF0ZVNlbGVj
dC5jbGljaygpOworICAgICAgICB0ZW1wbGF0ZVNlbGVjdC5hbGwoYnkuY3NzKCdvcHRpb24nKSku
Z2V0KDApLmNsaWNrKCk7CisgICAgICAgIGV4cGVjdChpbmNsdWRlRWxlbS5pc1ByZXNlbnQoKSku
dG9CZShmYWxzZSk7CisgICAgICB9KTsKKyAgICA8L2ZpbGU+CisgIDwvZXhhbXBsZT4KKyAqLwor
CisKKy8qKgorICogQG5nZG9jIGV2ZW50CisgKiBAbmFtZSBuZ0luY2x1ZGUjJGluY2x1ZGVDb250
ZW50UmVxdWVzdGVkCisgKiBAZXZlbnRUeXBlIGVtaXQgb24gdGhlIHNjb3BlIG5nSW5jbHVkZSB3
YXMgZGVjbGFyZWQgaW4KKyAqIEBkZXNjcmlwdGlvbgorICogRW1pdHRlZCBldmVyeSB0aW1lIHRo
ZSBuZ0luY2x1ZGUgY29udGVudCBpcyByZXF1ZXN0ZWQuCisgKgorICogQHBhcmFtIHtPYmplY3R9
IGFuZ3VsYXJFdmVudCBTeW50aGV0aWMgZXZlbnQgb2JqZWN0LgorICogQHBhcmFtIHtTdHJpbmd9
IHNyYyBVUkwgb2YgY29udGVudCB0byBsb2FkLgorICovCisKKworLyoqCisgKiBAbmdkb2MgZXZl
bnQKKyAqIEBuYW1lIG5nSW5jbHVkZSMkaW5jbHVkZUNvbnRlbnRMb2FkZWQKKyAqIEBldmVudFR5
cGUgZW1pdCBvbiB0aGUgY3VycmVudCBuZ0luY2x1ZGUgc2NvcGUKKyAqIEBkZXNjcmlwdGlvbgor
ICogRW1pdHRlZCBldmVyeSB0aW1lIHRoZSBuZ0luY2x1ZGUgY29udGVudCBpcyByZWxvYWRlZC4K
KyAqCisgKiBAcGFyYW0ge09iamVjdH0gYW5ndWxhckV2ZW50IFN5bnRoZXRpYyBldmVudCBvYmpl
Y3QuCisgKiBAcGFyYW0ge1N0cmluZ30gc3JjIFVSTCBvZiBjb250ZW50IHRvIGxvYWQuCisgKi8K
KworCisvKioKKyAqIEBuZ2RvYyBldmVudAorICogQG5hbWUgbmdJbmNsdWRlIyRpbmNsdWRlQ29u
dGVudEVycm9yCisgKiBAZXZlbnRUeXBlIGVtaXQgb24gdGhlIHNjb3BlIG5nSW5jbHVkZSB3YXMg
ZGVjbGFyZWQgaW4KKyAqIEBkZXNjcmlwdGlvbgorICogRW1pdHRlZCB3aGVuIGEgdGVtcGxhdGUg
SFRUUCByZXF1ZXN0IHlpZWxkcyBhbiBlcnJvbmVvdXMgcmVzcG9uc2UgKHN0YXR1cyA8IDIwMCB8
fCBzdGF0dXMgPiAyOTkpCisgKgorICogQHBhcmFtIHtPYmplY3R9IGFuZ3VsYXJFdmVudCBTeW50
aGV0aWMgZXZlbnQgb2JqZWN0LgorICogQHBhcmFtIHtTdHJpbmd9IHNyYyBVUkwgb2YgY29udGVu
dCB0byBsb2FkLgorICovCit2YXIgbmdJbmNsdWRlRGlyZWN0aXZlID0gWyckdGVtcGxhdGVSZXF1
ZXN0JywgJyRhbmNob3JTY3JvbGwnLCAnJGFuaW1hdGUnLAorICAgICAgICAgICAgICAgICAgZnVu
Y3Rpb24oJHRlbXBsYXRlUmVxdWVzdCwgICAkYW5jaG9yU2Nyb2xsLCAgICRhbmltYXRlKSB7Cisg
IHJldHVybiB7CisgICAgcmVzdHJpY3Q6ICdFQ0EnLAorICAgIHByaW9yaXR5OiA0MDAsCisgICAg
dGVybWluYWw6IHRydWUsCisgICAgdHJhbnNjbHVkZTogJ2VsZW1lbnQnLAorICAgIGNvbnRyb2xs
ZXI6IGFuZ3VsYXIubm9vcCwKKyAgICBjb21waWxlOiBmdW5jdGlvbihlbGVtZW50LCBhdHRyKSB7
CisgICAgICB2YXIgc3JjRXhwID0gYXR0ci5uZ0luY2x1ZGUgfHwgYXR0ci5zcmMsCisgICAgICAg
ICAgb25sb2FkRXhwID0gYXR0ci5vbmxvYWQgfHwgJycsCisgICAgICAgICAgYXV0b1Njcm9sbEV4
cCA9IGF0dHIuYXV0b3Njcm9sbDsKKworICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCAkZWxl
bWVudCwgJGF0dHIsIGN0cmwsICR0cmFuc2NsdWRlKSB7CisgICAgICAgIHZhciBjaGFuZ2VDb3Vu
dGVyID0gMCwKKyAgICAgICAgICAgIGN1cnJlbnRTY29wZSwKKyAgICAgICAgICAgIHByZXZpb3Vz
RWxlbWVudCwKKyAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50OworCisgICAgICAgIHZhciBjbGVh
bnVwTGFzdEluY2x1ZGVDb250ZW50ID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgaWYgKHByZXZp
b3VzRWxlbWVudCkgeworICAgICAgICAgICAgcHJldmlvdXNFbGVtZW50LnJlbW92ZSgpOworICAg
ICAgICAgICAgcHJldmlvdXNFbGVtZW50ID0gbnVsbDsKKyAgICAgICAgICB9CisgICAgICAgICAg
aWYgKGN1cnJlbnRTY29wZSkgeworICAgICAgICAgICAgY3VycmVudFNjb3BlLiRkZXN0cm95KCk7
CisgICAgICAgICAgICBjdXJyZW50U2NvcGUgPSBudWxsOworICAgICAgICAgIH0KKyAgICAgICAg
ICBpZiAoY3VycmVudEVsZW1lbnQpIHsKKyAgICAgICAgICAgICRhbmltYXRlLmxlYXZlKGN1cnJl
bnRFbGVtZW50KS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICBwcmV2aW91c0VsZW1l
bnQgPSBudWxsOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBwcmV2aW91c0VsZW1lbnQg
PSBjdXJyZW50RWxlbWVudDsKKyAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50ID0gbnVsbDsKKyAg
ICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgc2NvcGUuJHdhdGNoKHNyY0V4cCwgZnVu
Y3Rpb24gbmdJbmNsdWRlV2F0Y2hBY3Rpb24oc3JjKSB7CisgICAgICAgICAgdmFyIGFmdGVyQW5p
bWF0aW9uID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAoaXNEZWZpbmVkKGF1dG9TY3Jv
bGxFeHApICYmICghYXV0b1Njcm9sbEV4cCB8fCBzY29wZS4kZXZhbChhdXRvU2Nyb2xsRXhwKSkp
IHsKKyAgICAgICAgICAgICAgJGFuY2hvclNjcm9sbCgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgIH07CisgICAgICAgICAgdmFyIHRoaXNDaGFuZ2VJZCA9ICsrY2hhbmdlQ291bnRlcjsKKwor
ICAgICAgICAgIGlmIChzcmMpIHsKKyAgICAgICAgICAgIC8vc2V0IHRoZSAybmQgcGFyYW0gdG8g
dHJ1ZSB0byBpZ25vcmUgdGhlIHRlbXBsYXRlIHJlcXVlc3QgZXJyb3Igc28gdGhhdCB0aGUgaW5u
ZXIKKyAgICAgICAgICAgIC8vY29udGVudHMgYW5kIHNjb3BlIGNhbiBiZSBjbGVhbmVkIHVwLgor
ICAgICAgICAgICAgJHRlbXBsYXRlUmVxdWVzdChzcmMsIHRydWUpLnRoZW4oZnVuY3Rpb24ocmVz
cG9uc2UpIHsKKyAgICAgICAgICAgICAgaWYgKHRoaXNDaGFuZ2VJZCAhPT0gY2hhbmdlQ291bnRl
cikgcmV0dXJuOworICAgICAgICAgICAgICB2YXIgbmV3U2NvcGUgPSBzY29wZS4kbmV3KCk7Cisg
ICAgICAgICAgICAgIGN0cmwudGVtcGxhdGUgPSByZXNwb25zZTsKKworICAgICAgICAgICAgICAv
LyBOb3RlOiBUaGlzIHdpbGwgYWxzbyBsaW5rIGFsbCBjaGlsZHJlbiBvZiBuZy1pbmNsdWRlIHRo
YXQgd2VyZSBjb250YWluZWQgaW4gdGhlIG9yaWdpbmFsCisgICAgICAgICAgICAgIC8vIGh0bWwu
IElmIHRoYXQgY29udGVudCBjb250YWlucyBjb250cm9sbGVycywgLi4uIHRoZXkgY291bGQgcG9s
bHV0ZS9jaGFuZ2UgdGhlIHNjb3BlLgorICAgICAgICAgICAgICAvLyBIb3dldmVyLCB1c2luZyBu
Zy1pbmNsdWRlIG9uIGFuIGVsZW1lbnQgd2l0aCBhZGRpdGlvbmFsIGNvbnRlbnQgZG9lcyBub3Qg
bWFrZSBzZW5zZS4uLgorICAgICAgICAgICAgICAvLyBOb3RlOiBXZSBjYW4ndCByZW1vdmUgdGhl
bSBpbiB0aGUgY2xvbmVBdHRjaEZuIG9mICR0cmFuc2NsdWRlIGFzIHRoYXQKKyAgICAgICAgICAg
ICAgLy8gZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSBsaW5raW5nIHRoZSBjb250ZW50LCB3aGlj
aCB3b3VsZCBhcHBseSBjaGlsZAorICAgICAgICAgICAgICAvLyBkaXJlY3RpdmVzIHRvIG5vbiBl
eGlzdGluZyBlbGVtZW50cy4KKyAgICAgICAgICAgICAgdmFyIGNsb25lID0gJHRyYW5zY2x1ZGUo
bmV3U2NvcGUsIGZ1bmN0aW9uKGNsb25lKSB7CisgICAgICAgICAgICAgICAgY2xlYW51cExhc3RJ
bmNsdWRlQ29udGVudCgpOworICAgICAgICAgICAgICAgICRhbmltYXRlLmVudGVyKGNsb25lLCBu
dWxsLCAkZWxlbWVudCkudGhlbihhZnRlckFuaW1hdGlvbik7CisgICAgICAgICAgICAgIH0pOwor
CisgICAgICAgICAgICAgIGN1cnJlbnRTY29wZSA9IG5ld1Njb3BlOworICAgICAgICAgICAgICBj
dXJyZW50RWxlbWVudCA9IGNsb25lOworCisgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS4kZW1p
dCgnJGluY2x1ZGVDb250ZW50TG9hZGVkJywgc3JjKTsKKyAgICAgICAgICAgICAgc2NvcGUuJGV2
YWwob25sb2FkRXhwKTsKKyAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICBpZiAodGhpc0NoYW5nZUlkID09PSBjaGFuZ2VDb3VudGVyKSB7CisgICAgICAgICAgICAgICAg
Y2xlYW51cExhc3RJbmNsdWRlQ29udGVudCgpOworICAgICAgICAgICAgICAgIHNjb3BlLiRlbWl0
KCckaW5jbHVkZUNvbnRlbnRFcnJvcicsIHNyYyk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgc2NvcGUuJGVtaXQoJyRpbmNsdWRlQ29udGVudFJlcXVlc3Rl
ZCcsIHNyYyk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNsZWFudXBMYXN0SW5j
bHVkZUNvbnRlbnQoKTsKKyAgICAgICAgICAgIGN0cmwudGVtcGxhdGUgPSBudWxsOworICAgICAg
ICAgIH0KKyAgICAgICAgfSk7CisgICAgICB9OworICAgIH0KKyAgfTsKK31dOworCisvLyBUaGlz
IGRpcmVjdGl2ZSBpcyBjYWxsZWQgZHVyaW5nIHRoZSAkdHJhbnNjbHVkZSBjYWxsIG9mIHRoZSBm
aXJzdCBgbmdJbmNsdWRlYCBkaXJlY3RpdmUuCisvLyBJdCB3aWxsIHJlcGxhY2UgYW5kIGNvbXBp
bGUgdGhlIGNvbnRlbnQgb2YgdGhlIGVsZW1lbnQgd2l0aCB0aGUgbG9hZGVkIHRlbXBsYXRlLgor
Ly8gV2UgbmVlZCB0aGlzIGRpcmVjdGl2ZSBzbyB0aGF0IHRoZSBlbGVtZW50IGNvbnRlbnQgaXMg
YWxyZWFkeSBmaWxsZWQgd2hlbgorLy8gdGhlIGxpbmsgZnVuY3Rpb24gb2YgYW5vdGhlciBkaXJl
Y3RpdmUgb24gdGhlIHNhbWUgZWxlbWVudCBhcyBuZ0luY2x1ZGUKKy8vIGlzIGNhbGxlZC4KK3Zh
ciBuZ0luY2x1ZGVGaWxsQ29udGVudERpcmVjdGl2ZSA9IFsnJGNvbXBpbGUnLAorICBmdW5jdGlv
bigkY29tcGlsZSkgeworICAgIHJldHVybiB7CisgICAgICByZXN0cmljdDogJ0VDQScsCisgICAg
ICBwcmlvcml0eTogLTQwMCwKKyAgICAgIHJlcXVpcmU6ICduZ0luY2x1ZGUnLAorICAgICAgbGlu
azogZnVuY3Rpb24oc2NvcGUsICRlbGVtZW50LCAkYXR0ciwgY3RybCkgeworICAgICAgICBpZiAo
L1NWRy8udGVzdCgkZWxlbWVudFswXS50b1N0cmluZygpKSkgeworICAgICAgICAgIC8vIFdlYktp
dDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTY5OCAtLS0gU1ZH
IGVsZW1lbnRzIGRvIG5vdAorICAgICAgICAgIC8vIHN1cHBvcnQgaW5uZXJIVE1MLCBzbyBkZXRl
Y3QgdGhpcyBoZXJlIGFuZCB0cnkgdG8gZ2VuZXJhdGUgdGhlIGNvbnRlbnRzCisgICAgICAgICAg
Ly8gc3BlY2lhbGx5LgorICAgICAgICAgICRlbGVtZW50LmVtcHR5KCk7CisgICAgICAgICAgJGNv
bXBpbGUoanFMaXRlQnVpbGRGcmFnbWVudChjdHJsLnRlbXBsYXRlLCBkb2N1bWVudCkuY2hpbGRO
b2Rlcykoc2NvcGUsCisgICAgICAgICAgICAgIGZ1bmN0aW9uIG5hbWVzcGFjZUFkYXB0ZWRDbG9u
ZShjbG9uZSkgeworICAgICAgICAgICAgJGVsZW1lbnQuYXBwZW5kKGNsb25lKTsKKyAgICAgICAg
ICB9LCB7ZnV0dXJlUGFyZW50RWxlbWVudDogJGVsZW1lbnR9KTsKKyAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICAkZWxlbWVudC5odG1sKGN0cmwudGVtcGxhdGUpOworICAg
ICAgICAkY29tcGlsZSgkZWxlbWVudC5jb250ZW50cygpKShzY29wZSk7CisgICAgICB9CisgICAg
fTsKKyAgfV07CisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgbmdJbml0Cisg
KiBAcmVzdHJpY3QgQUMKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFRoZSBgbmdJbml0YCBkaXJl
Y3RpdmUgYWxsb3dzIHlvdSB0byBldmFsdWF0ZSBhbiBleHByZXNzaW9uIGluIHRoZQorICogY3Vy
cmVudCBzY29wZS4KKyAqCisgKiA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1kYW5nZXIiPgorICog
VGhlIG9ubHkgYXBwcm9wcmlhdGUgdXNlIG9mIGBuZ0luaXRgIGlzIGZvciBhbGlhc2luZyBzcGVj
aWFsIHByb3BlcnRpZXMgb2YKKyAqIHtAbGluayBuZy5kaXJlY3RpdmU6bmdSZXBlYXQgYG5nUmVw
ZWF0YH0sIGFzIHNlZW4gaW4gdGhlIGRlbW8gYmVsb3cuIEJlc2lkZXMgdGhpcyBjYXNlLCB5b3UK
KyAqIHNob3VsZCB1c2Uge0BsaW5rIGd1aWRlL2NvbnRyb2xsZXIgY29udHJvbGxlcnN9IHJhdGhl
ciB0aGFuIGBuZ0luaXRgCisgKiB0byBpbml0aWFsaXplIHZhbHVlcyBvbiBhIHNjb3BlLgorICog
PC9kaXY+CisgKiA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC13YXJuaW5nIj4KKyAqICoqTm90ZSoq
OiBJZiB5b3UgaGF2ZSBhc3NpZ25tZW50IGluIGBuZ0luaXRgIGFsb25nIHdpdGgge0BsaW5rIG5n
LiRmaWx0ZXIgYCRmaWx0ZXJgfSwgbWFrZQorICogc3VyZSB5b3UgaGF2ZSBwYXJlbnRoZXNpcyBm
b3IgY29ycmVjdCBwcmVjZWRlbmNlOgorICogPHByZSBjbGFzcz0icHJldHR5cHJpbnQiPgorICog
YDxkaXYgbmctaW5pdD0idGVzdDEgPSAoZGF0YSB8IG9yZGVyQnk6J25hbWUnKSI+PC9kaXY+YAor
ICogPC9wcmU+CisgKiA8L2Rpdj4KKyAqCisgKiBAcHJpb3JpdHkgNDUwCisgKgorICogQGVsZW1l
bnQgQU5ZCisgKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nSW5pdCB7QGxpbmsgZ3VpZGUvZXhwcmVz
c2lvbiBFeHByZXNzaW9ufSB0byBldmFsLgorICoKKyAqIEBleGFtcGxlCisgICA8ZXhhbXBsZSBt
b2R1bGU9ImluaXRFeGFtcGxlIj4KKyAgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICA8
c2NyaXB0PgorICAgICBhbmd1bGFyLm1vZHVsZSgnaW5pdEV4YW1wbGUnLCBbXSkKKyAgICAgICAu
Y29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29w
ZSkgeworICAgICAgICAgJHNjb3BlLmxpc3QgPSBbWydhJywgJ2InXSwgWydjJywgJ2QnXV07Cisg
ICAgICAgfV0pOworICAgPC9zY3JpcHQ+CisgICA8ZGl2IG5nLWNvbnRyb2xsZXI9IkV4YW1wbGVD
b250cm9sbGVyIj4KKyAgICAgPGRpdiBuZy1yZXBlYXQ9ImlubmVyTGlzdCBpbiBsaXN0IiBuZy1p
bml0PSJvdXRlckluZGV4ID0gJGluZGV4Ij4KKyAgICAgICA8ZGl2IG5nLXJlcGVhdD0idmFsdWUg
aW4gaW5uZXJMaXN0IiBuZy1pbml0PSJpbm5lckluZGV4ID0gJGluZGV4Ij4KKyAgICAgICAgICA8
c3BhbiBjbGFzcz0iZXhhbXBsZS1pbml0Ij5saXN0WyB7e291dGVySW5kZXh9fSBdWyB7e2lubmVy
SW5kZXh9fSBdID0ge3t2YWx1ZX19Ozwvc3Bhbj4KKyAgICAgICA8L2Rpdj4KKyAgICAgPC9kaXY+
CisgICA8L2Rpdj4KKyAgICAgPC9maWxlPgorICAgICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpz
IiB0eXBlPSJwcm90cmFjdG9yIj4KKyAgICAgICBpdCgnc2hvdWxkIGFsaWFzIGluZGV4IHBvc2l0
aW9ucycsIGZ1bmN0aW9uKCkgeworICAgICAgICAgdmFyIGVsZW1lbnRzID0gZWxlbWVudC5hbGwo
YnkuY3NzKCcuZXhhbXBsZS1pbml0JykpOworICAgICAgICAgZXhwZWN0KGVsZW1lbnRzLmdldCgw
KS5nZXRUZXh0KCkpLnRvQmUoJ2xpc3RbIDAgXVsgMCBdID0gYTsnKTsKKyAgICAgICAgIGV4cGVj
dChlbGVtZW50cy5nZXQoMSkuZ2V0VGV4dCgpKS50b0JlKCdsaXN0WyAwIF1bIDEgXSA9IGI7Jyk7
CisgICAgICAgICBleHBlY3QoZWxlbWVudHMuZ2V0KDIpLmdldFRleHQoKSkudG9CZSgnbGlzdFsg
MSBdWyAwIF0gPSBjOycpOworICAgICAgICAgZXhwZWN0KGVsZW1lbnRzLmdldCgzKS5nZXRUZXh0
KCkpLnRvQmUoJ2xpc3RbIDEgXVsgMSBdID0gZDsnKTsKKyAgICAgICB9KTsKKyAgICAgPC9maWxl
PgorICAgPC9leGFtcGxlPgorICovCit2YXIgbmdJbml0RGlyZWN0aXZlID0gbmdEaXJlY3RpdmUo
eworICBwcmlvcml0eTogNDUwLAorICBjb21waWxlOiBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4g
eworICAgICAgcHJlOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cnMpIHsKKyAgICAgICAg
c2NvcGUuJGV2YWwoYXR0cnMubmdJbml0KTsKKyAgICAgIH0KKyAgICB9OworICB9Cit9KTsKKwor
LyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBuZ0xpc3QKKyAqCisgKiBAZGVzY3Jp
cHRpb24KKyAqIFRleHQgaW5wdXQgdGhhdCBjb252ZXJ0cyBiZXR3ZWVuIGEgZGVsaW1pdGVkIHN0
cmluZyBhbmQgYW4gYXJyYXkgb2Ygc3RyaW5ncy4gVGhlIGRlZmF1bHQKKyAqIGRlbGltaXRlciBp
cyBhIGNvbW1hIGZvbGxvd2VkIGJ5IGEgc3BhY2UgLSBlcXVpdmFsZW50IHRvIGBuZy1saXN0PSIs
ICJgLiBZb3UgY2FuIHNwZWNpZnkgYSBjdXN0b20KKyAqIGRlbGltaXRlciBhcyB0aGUgdmFsdWUg
b2YgdGhlIGBuZ0xpc3RgIGF0dHJpYnV0ZSAtIGZvciBleGFtcGxlLCBgbmctbGlzdD0iIHwgImAu
CisgKgorICogVGhlIGJlaGF2aW91ciBvZiB0aGUgZGlyZWN0aXZlIGlzIGFmZmVjdGVkIGJ5IHRo
ZSB1c2Ugb2YgdGhlIGBuZ1RyaW1gIGF0dHJpYnV0ZS4KKyAqICogSWYgYG5nVHJpbWAgaXMgc2V0
IHRvIGAiZmFsc2UiYCB0aGVuIHdoaXRlc3BhY2UgYXJvdW5kIGJvdGggdGhlIHNlcGFyYXRvciBh
bmQgZWFjaAorICogICBsaXN0IGl0ZW0gaXMgcmVzcGVjdGVkLiBUaGlzIGltcGxpZXMgdGhhdCB0
aGUgdXNlciBvZiB0aGUgZGlyZWN0aXZlIGlzIHJlc3BvbnNpYmxlIGZvcgorICogICBkZWFsaW5n
IHdpdGggd2hpdGVzcGFjZSBidXQgYWxzbyBhbGxvd3MgeW91IHRvIHVzZSB3aGl0ZXNwYWNlIGFz
IGEgZGVsaW1pdGVyLCBzdWNoIGFzIGEKKyAqICAgdGFiIG9yIG5ld2xpbmUgY2hhcmFjdGVyLgor
ICogKiBPdGhlcndpc2Ugd2hpdGVzcGFjZSBhcm91bmQgdGhlIGRlbGltaXRlciBpcyBpZ25vcmVk
IHdoZW4gc3BsaXR0aW5nIChhbHRob3VnaCBpdCBpcyByZXNwZWN0ZWQKKyAqICAgd2hlbiBqb2lu
aW5nIHRoZSBsaXN0IGl0ZW1zIGJhY2sgdG9nZXRoZXIpIGFuZCB3aGl0ZXNwYWNlIGFyb3VuZCBl
YWNoIGxpc3QgaXRlbSBpcyBzdHJpcHBlZAorICogICBiZWZvcmUgaXQgaXMgYWRkZWQgdG8gdGhl
IG1vZGVsLgorICoKKyAqICMjIyBFeGFtcGxlIHdpdGggVmFsaWRhdGlvbgorICoKKyAqIDxleGFt
cGxlIG5hbWU9Im5nTGlzdC1kaXJlY3RpdmUiIG1vZHVsZT0ibGlzdEV4YW1wbGUiPgorICogICA8
ZmlsZSBuYW1lPSJhcHAuanMiPgorICogICAgICBhbmd1bGFyLm1vZHVsZSgnbGlzdEV4YW1wbGUn
LCBbXSkKKyAqICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29w
ZScsIGZ1bmN0aW9uKCRzY29wZSkgeworICogICAgICAgICAgJHNjb3BlLm5hbWVzID0gWydtb3Jw
aGV1cycsICduZW8nLCAndHJpbml0eSddOworICogICAgICAgIH1dKTsKKyAqICAgPC9maWxlPgor
ICogICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAqICAgIDxmb3JtIG5hbWU9Im15Rm9ybSIg
bmctY29udHJvbGxlcj0iRXhhbXBsZUNvbnRyb2xsZXIiPgorICogICAgICA8bGFiZWw+TGlzdDog
PGlucHV0IG5hbWU9Im5hbWVzSW5wdXQiIG5nLW1vZGVsPSJuYW1lcyIgbmctbGlzdCByZXF1aXJl
ZD48L2xhYmVsPgorICogICAgICA8c3BhbiByb2xlPSJhbGVydCI+CisgKiAgICAgICAgPHNwYW4g
Y2xhc3M9ImVycm9yIiBuZy1zaG93PSJteUZvcm0ubmFtZXNJbnB1dC4kZXJyb3IucmVxdWlyZWQi
PgorICogICAgICAgIFJlcXVpcmVkITwvc3Bhbj4KKyAqICAgICAgPC9zcGFuPgorICogICAgICA8
YnI+CisgKiAgICAgIDx0dD5uYW1lcyA9IHt7bmFtZXN9fTwvdHQ+PGJyLz4KKyAqICAgICAgPHR0
Pm15Rm9ybS5uYW1lc0lucHV0LiR2YWxpZCA9IHt7bXlGb3JtLm5hbWVzSW5wdXQuJHZhbGlkfX08
L3R0Pjxici8+CisgKiAgICAgIDx0dD5teUZvcm0ubmFtZXNJbnB1dC4kZXJyb3IgPSB7e215Rm9y
bS5uYW1lc0lucHV0LiRlcnJvcn19PC90dD48YnIvPgorICogICAgICA8dHQ+bXlGb3JtLiR2YWxp
ZCA9IHt7bXlGb3JtLiR2YWxpZH19PC90dD48YnIvPgorICogICAgICA8dHQ+bXlGb3JtLiRlcnJv
ci5yZXF1aXJlZCA9IHt7ISFteUZvcm0uJGVycm9yLnJlcXVpcmVkfX08L3R0Pjxici8+CisgKiAg
ICAgPC9mb3JtPgorICogICA8L2ZpbGU+CisgKiAgIDxmaWxlIG5hbWU9InByb3RyYWN0b3IuanMi
IHR5cGU9InByb3RyYWN0b3IiPgorICogICAgIHZhciBsaXN0SW5wdXQgPSBlbGVtZW50KGJ5Lm1v
ZGVsKCduYW1lcycpKTsKKyAqICAgICB2YXIgbmFtZXMgPSBlbGVtZW50KGJ5LmV4YWN0QmluZGlu
ZygnbmFtZXMnKSk7CisgKiAgICAgdmFyIHZhbGlkID0gZWxlbWVudChieS5iaW5kaW5nKCdteUZv
cm0ubmFtZXNJbnB1dC4kdmFsaWQnKSk7CisgKiAgICAgdmFyIGVycm9yID0gZWxlbWVudChieS5j
c3MoJ3NwYW4uZXJyb3InKSk7CisgKgorICogICAgIGl0KCdzaG91bGQgaW5pdGlhbGl6ZSB0byBt
b2RlbCcsIGZ1bmN0aW9uKCkgeworICogICAgICAgZXhwZWN0KG5hbWVzLmdldFRleHQoKSkudG9D
b250YWluKCdbIm1vcnBoZXVzIiwibmVvIiwidHJpbml0eSJdJyk7CisgKiAgICAgICBleHBlY3Qo
dmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ3RydWUnKTsKKyAqICAgICAgIGV4cGVjdChlcnJv
ci5nZXRDc3NWYWx1ZSgnZGlzcGxheScpKS50b0JlKCdub25lJyk7CisgKiAgICAgfSk7CisgKgor
ICogICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBlbXB0eScsIGZ1bmN0aW9uKCkgeworICog
ICAgICAgbGlzdElucHV0LmNsZWFyKCk7CisgKiAgICAgICBsaXN0SW5wdXQuc2VuZEtleXMoJycp
OworICoKKyAqICAgICAgIGV4cGVjdChuYW1lcy5nZXRUZXh0KCkpLnRvQ29udGFpbignJyk7Cisg
KiAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ2ZhbHNlJyk7CisgKiAg
ICAgICBleHBlY3QoZXJyb3IuZ2V0Q3NzVmFsdWUoJ2Rpc3BsYXknKSkubm90LnRvQmUoJ25vbmUn
KTsKKyAqICAgICB9KTsKKyAqICAgPC9maWxlPgorICogPC9leGFtcGxlPgorICoKKyAqICMjIyBF
eGFtcGxlIC0gc3BsaXR0aW5nIG9uIHdoaXRlc3BhY2UKKyAqIDxleGFtcGxlIG5hbWU9Im5nTGlz
dC1kaXJlY3RpdmUtbmV3bGluZXMiPgorICogICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAq
ICAgIDx0ZXh0YXJlYSBuZy1tb2RlbD0ibGlzdCIgbmctbGlzdD0iJiMxMDsiIG5nLXRyaW09ImZh
bHNlIj48L3RleHRhcmVhPgorICogICAgPHByZT57eyBsaXN0IHwganNvbiB9fTwvcHJlPgorICog
ICA8L2ZpbGU+CisgKiAgIDxmaWxlIG5hbWU9InByb3RyYWN0b3IuanMiIHR5cGU9InByb3RyYWN0
b3IiPgorICogICAgIGl0KCJzaG91bGQgc3BsaXQgdGhlIHRleHQgYnkgbmV3bGluZXMiLCBmdW5j
dGlvbigpIHsKKyAqICAgICAgIHZhciBsaXN0SW5wdXQgPSBlbGVtZW50KGJ5Lm1vZGVsKCdsaXN0
JykpOworICogICAgICAgdmFyIG91dHB1dCA9IGVsZW1lbnQoYnkuYmluZGluZygnbGlzdCB8IGpz
b24nKSk7CisgKiAgICAgICBsaXN0SW5wdXQuc2VuZEtleXMoJ2FiY1xuZGVmXG5naGknKTsKKyAq
ICAgICAgIGV4cGVjdChvdXRwdXQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ1tcbiAgImFiYyIsXG4g
ICJkZWYiLFxuICAiZ2hpIlxuXScpOworICogICAgIH0pOworICogICA8L2ZpbGU+CisgKiA8L2V4
YW1wbGU+CisgKgorICogQGVsZW1lbnQgaW5wdXQKKyAqIEBwYXJhbSB7c3RyaW5nPX0gbmdMaXN0
IG9wdGlvbmFsIGRlbGltaXRlciB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIHNwbGl0IHRoZSB2YWx1
ZS4KKyAqLwordmFyIG5nTGlzdERpcmVjdGl2ZSA9IGZ1bmN0aW9uKCkgeworICByZXR1cm4gewor
ICAgIHJlc3RyaWN0OiAnQScsCisgICAgcHJpb3JpdHk6IDEwMCwKKyAgICByZXF1aXJlOiAnbmdN
b2RlbCcsCisgICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwpIHsK
KyAgICAgIC8vIFdlIHdhbnQgdG8gY29udHJvbCB3aGl0ZXNwYWNlIHRyaW1taW5nIHNvIHdlIHVz
ZSB0aGlzIGNvbnZvbHV0ZWQgYXBwcm9hY2gKKyAgICAgIC8vIHRvIGFjY2VzcyB0aGUgbmdMaXN0
IGF0dHJpYnV0ZSwgd2hpY2ggZG9lc24ndCBwcmUtdHJpbSB0aGUgYXR0cmlidXRlCisgICAgICB2
YXIgbmdMaXN0ID0gZWxlbWVudC5hdHRyKGF0dHIuJGF0dHIubmdMaXN0KSB8fCAnLCAnOworICAg
ICAgdmFyIHRyaW1WYWx1ZXMgPSBhdHRyLm5nVHJpbSAhPT0gJ2ZhbHNlJzsKKyAgICAgIHZhciBz
ZXBhcmF0b3IgPSB0cmltVmFsdWVzID8gdHJpbShuZ0xpc3QpIDogbmdMaXN0OworCisgICAgICB2
YXIgcGFyc2UgPSBmdW5jdGlvbih2aWV3VmFsdWUpIHsKKyAgICAgICAgLy8gSWYgdGhlIHZpZXdW
YWx1ZSBpcyBpbnZhbGlkIChzYXkgcmVxdWlyZWQgYnV0IGVtcHR5KSBpdCB3aWxsIGJlIGB1bmRl
ZmluZWRgCisgICAgICAgIGlmIChpc1VuZGVmaW5lZCh2aWV3VmFsdWUpKSByZXR1cm47CisKKyAg
ICAgICAgdmFyIGxpc3QgPSBbXTsKKworICAgICAgICBpZiAodmlld1ZhbHVlKSB7CisgICAgICAg
ICAgZm9yRWFjaCh2aWV3VmFsdWUuc3BsaXQoc2VwYXJhdG9yKSwgZnVuY3Rpb24odmFsdWUpIHsK
KyAgICAgICAgICAgIGlmICh2YWx1ZSkgbGlzdC5wdXNoKHRyaW1WYWx1ZXMgPyB0cmltKHZhbHVl
KSA6IHZhbHVlKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBs
aXN0OworICAgICAgfTsKKworICAgICAgY3RybC4kcGFyc2Vycy5wdXNoKHBhcnNlKTsKKyAgICAg
IGN0cmwuJGZvcm1hdHRlcnMucHVzaChmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICBpZiAoaXNB
cnJheSh2YWx1ZSkpIHsKKyAgICAgICAgICByZXR1cm4gdmFsdWUuam9pbihuZ0xpc3QpOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICAgIH0pOworCisgICAgICAv
LyBPdmVycmlkZSB0aGUgc3RhbmRhcmQgJGlzRW1wdHkgYmVjYXVzZSBhbiBlbXB0eSBhcnJheSBt
ZWFucyB0aGUgaW5wdXQgaXMgZW1wdHkuCisgICAgICBjdHJsLiRpc0VtcHR5ID0gZnVuY3Rpb24o
dmFsdWUpIHsKKyAgICAgICAgcmV0dXJuICF2YWx1ZSB8fCAhdmFsdWUubGVuZ3RoOworICAgICAg
fTsKKyAgICB9CisgIH07Cit9OworCisvKiBnbG9iYWwgVkFMSURfQ0xBU1M6IHRydWUsCisgIElO
VkFMSURfQ0xBU1M6IHRydWUsCisgIFBSSVNUSU5FX0NMQVNTOiB0cnVlLAorICBESVJUWV9DTEFT
UzogdHJ1ZSwKKyAgVU5UT1VDSEVEX0NMQVNTOiB0cnVlLAorICBUT1VDSEVEX0NMQVNTOiB0cnVl
LAorKi8KKwordmFyIFZBTElEX0NMQVNTID0gJ25nLXZhbGlkJywKKyAgICBJTlZBTElEX0NMQVNT
ID0gJ25nLWludmFsaWQnLAorICAgIFBSSVNUSU5FX0NMQVNTID0gJ25nLXByaXN0aW5lJywKKyAg
ICBESVJUWV9DTEFTUyA9ICduZy1kaXJ0eScsCisgICAgVU5UT1VDSEVEX0NMQVNTID0gJ25nLXVu
dG91Y2hlZCcsCisgICAgVE9VQ0hFRF9DTEFTUyA9ICduZy10b3VjaGVkJywKKyAgICBQRU5ESU5H
X0NMQVNTID0gJ25nLXBlbmRpbmcnOworCisKK3ZhciAkbmdNb2RlbE1pbkVyciA9IG5ldyBtaW5F
cnIoJ25nTW9kZWwnKTsKKworLyoqCisgKiBAbmdkb2MgdHlwZQorICogQG5hbWUgbmdNb2RlbC5O
Z01vZGVsQ29udHJvbGxlcgorICoKKyAqIEBwcm9wZXJ0eSB7c3RyaW5nfSAkdmlld1ZhbHVlIEFj
dHVhbCBzdHJpbmcgdmFsdWUgaW4gdGhlIHZpZXcuCisgKiBAcHJvcGVydHkgeyp9ICRtb2RlbFZh
bHVlIFRoZSB2YWx1ZSBpbiB0aGUgbW9kZWwgdGhhdCB0aGUgY29udHJvbCBpcyBib3VuZCB0by4K
KyAqIEBwcm9wZXJ0eSB7QXJyYXkuPEZ1bmN0aW9uPn0gJHBhcnNlcnMgQXJyYXkgb2YgZnVuY3Rp
b25zIHRvIGV4ZWN1dGUsIGFzIGEgcGlwZWxpbmUsIHdoZW5ldmVyCisgICAgICAgdGhlIGNvbnRy
b2wgcmVhZHMgdmFsdWUgZnJvbSB0aGUgRE9NLiBUaGUgZnVuY3Rpb25zIGFyZSBjYWxsZWQgaW4g
YXJyYXkgb3JkZXIsIGVhY2ggcGFzc2luZworICAgICAgIGl0cyByZXR1cm4gdmFsdWUgdGhyb3Vn
aCB0byB0aGUgbmV4dC4gVGhlIGxhc3QgcmV0dXJuIHZhbHVlIGlzIGZvcndhcmRlZCB0byB0aGUK
KyAgICAgICB7QGxpbmsgbmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlciMkdmFsaWRhdG9ycyBgJHZh
bGlkYXRvcnNgfSBjb2xsZWN0aW9uLgorCitQYXJzZXJzIGFyZSB1c2VkIHRvIHNhbml0aXplIC8g
Y29udmVydCB0aGUge0BsaW5rIG5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXIjJHZpZXdWYWx1ZQor
YCR2aWV3VmFsdWVgfS4KKworUmV0dXJuaW5nIGB1bmRlZmluZWRgIGZyb20gYSBwYXJzZXIgbWVh
bnMgYSBwYXJzZSBlcnJvciBvY2N1cnJlZC4gSW4gdGhhdCBjYXNlLAorbm8ge0BsaW5rIG5nTW9k
ZWwuTmdNb2RlbENvbnRyb2xsZXIjJHZhbGlkYXRvcnMgYCR2YWxpZGF0b3JzYH0gd2lsbCBydW4g
YW5kIHRoZSBgbmdNb2RlbGAKK3dpbGwgYmUgc2V0IHRvIGB1bmRlZmluZWRgIHVubGVzcyB7QGxp
bmsgbmdNb2RlbE9wdGlvbnMgYG5nTW9kZWxPcHRpb25zLmFsbG93SW52YWxpZGB9CitpcyBzZXQg
dG8gYHRydWVgLiBUaGUgcGFyc2UgZXJyb3IgaXMgc3RvcmVkIGluIGBuZ01vZGVsLiRlcnJvci5w
YXJzZWAuCisKKyAqCisgKiBAcHJvcGVydHkge0FycmF5LjxGdW5jdGlvbj59ICRmb3JtYXR0ZXJz
IEFycmF5IG9mIGZ1bmN0aW9ucyB0byBleGVjdXRlLCBhcyBhIHBpcGVsaW5lLCB3aGVuZXZlcgor
ICAgICAgIHRoZSBtb2RlbCB2YWx1ZSBjaGFuZ2VzLiBUaGUgZnVuY3Rpb25zIGFyZSBjYWxsZWQg
aW4gcmV2ZXJzZSBhcnJheSBvcmRlciwgZWFjaCBwYXNzaW5nIHRoZSB2YWx1ZSB0aHJvdWdoIHRv
IHRoZQorICAgICAgIG5leHQuIFRoZSBsYXN0IHJldHVybiB2YWx1ZSBpcyB1c2VkIGFzIHRoZSBh
Y3R1YWwgRE9NIHZhbHVlLgorICAgICAgIFVzZWQgdG8gZm9ybWF0IC8gY29udmVydCB2YWx1ZXMg
Zm9yIGRpc3BsYXkgaW4gdGhlIGNvbnRyb2wuCisgKiBgYGBqcworICogZnVuY3Rpb24gZm9ybWF0
dGVyKHZhbHVlKSB7CisgKiAgIGlmICh2YWx1ZSkgeworICogICAgIHJldHVybiB2YWx1ZS50b1Vw
cGVyQ2FzZSgpOworICogICB9CisgKiB9CisgKiBuZ01vZGVsLiRmb3JtYXR0ZXJzLnB1c2goZm9y
bWF0dGVyKTsKKyAqIGBgYAorICoKKyAqIEBwcm9wZXJ0eSB7T2JqZWN0LjxzdHJpbmcsIGZ1bmN0
aW9uPn0gJHZhbGlkYXRvcnMgQSBjb2xsZWN0aW9uIG9mIHZhbGlkYXRvcnMgdGhhdCBhcmUgYXBw
bGllZAorICogICAgICB3aGVuZXZlciB0aGUgbW9kZWwgdmFsdWUgY2hhbmdlcy4gVGhlIGtleSB2
YWx1ZSB3aXRoaW4gdGhlIG9iamVjdCByZWZlcnMgdG8gdGhlIG5hbWUgb2YgdGhlCisgKiAgICAg
IHZhbGlkYXRvciB3aGlsZSB0aGUgZnVuY3Rpb24gcmVmZXJzIHRvIHRoZSB2YWxpZGF0aW9uIG9w
ZXJhdGlvbi4gVGhlIHZhbGlkYXRpb24gb3BlcmF0aW9uIGlzCisgKiAgICAgIHByb3ZpZGVkIHdp
dGggdGhlIG1vZGVsIHZhbHVlIGFzIGFuIGFyZ3VtZW50IGFuZCBtdXN0IHJldHVybiBhIHRydWUg
b3IgZmFsc2UgdmFsdWUgZGVwZW5kaW5nCisgKiAgICAgIG9uIHRoZSByZXNwb25zZSBvZiB0aGF0
IHZhbGlkYXRpb24uCisgKgorICogYGBganMKKyAqIG5nTW9kZWwuJHZhbGlkYXRvcnMudmFsaWRD
aGFyYWN0ZXJzID0gZnVuY3Rpb24obW9kZWxWYWx1ZSwgdmlld1ZhbHVlKSB7CisgKiAgIHZhciB2
YWx1ZSA9IG1vZGVsVmFsdWUgfHwgdmlld1ZhbHVlOworICogICByZXR1cm4gL1swLTldKy8udGVz
dCh2YWx1ZSkgJiYKKyAqICAgICAgICAgIC9bYS16XSsvLnRlc3QodmFsdWUpICYmCisgKiAgICAg
ICAgICAvW0EtWl0rLy50ZXN0KHZhbHVlKSAmJgorICogICAgICAgICAgL1xXKy8udGVzdCh2YWx1
ZSk7CisgKiB9OworICogYGBgCisgKgorICogQHByb3BlcnR5IHtPYmplY3QuPHN0cmluZywgZnVu
Y3Rpb24+fSAkYXN5bmNWYWxpZGF0b3JzIEEgY29sbGVjdGlvbiBvZiB2YWxpZGF0aW9ucyB0aGF0
IGFyZSBleHBlY3RlZCB0bworICogICAgICBwZXJmb3JtIGFuIGFzeW5jaHJvbm91cyB2YWxpZGF0
aW9uIChlLmcuIGEgSFRUUCByZXF1ZXN0KS4gVGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gdGhhdCBp
cyBwcm92aWRlZAorICogICAgICBpcyBleHBlY3RlZCB0byByZXR1cm4gYSBwcm9taXNlIHdoZW4g
aXQgaXMgcnVuIGR1cmluZyB0aGUgbW9kZWwgdmFsaWRhdGlvbiBwcm9jZXNzLiBPbmNlIHRoZSBw
cm9taXNlCisgKiAgICAgIGlzIGRlbGl2ZXJlZCB0aGVuIHRoZSB2YWxpZGF0aW9uIHN0YXR1cyB3
aWxsIGJlIHNldCB0byB0cnVlIHdoZW4gZnVsZmlsbGVkIGFuZCBmYWxzZSB3aGVuIHJlamVjdGVk
LgorICogICAgICBXaGVuIHRoZSBhc3luY2hyb25vdXMgdmFsaWRhdG9ycyBhcmUgdHJpZ2dlcmVk
LCBlYWNoIG9mIHRoZSB2YWxpZGF0b3JzIHdpbGwgcnVuIGluIHBhcmFsbGVsIGFuZCB0aGUgbW9k
ZWwKKyAqICAgICAgdmFsdWUgd2lsbCBvbmx5IGJlIHVwZGF0ZWQgb25jZSBhbGwgdmFsaWRhdG9y
cyBoYXZlIGJlZW4gZnVsZmlsbGVkLiBBcyBsb25nIGFzIGFuIGFzeW5jaHJvbm91cyB2YWxpZGF0
b3IKKyAqICAgICAgaXMgdW5mdWxmaWxsZWQsIGl0cyBrZXkgd2lsbCBiZSBhZGRlZCB0byB0aGUg
Y29udHJvbGxlcnMgYCRwZW5kaW5nYCBwcm9wZXJ0eS4gQWxzbywgYWxsIGFzeW5jaHJvbm91cyB2
YWxpZGF0b3JzCisgKiAgICAgIHdpbGwgb25seSBydW4gb25jZSBhbGwgc3luY2hyb25vdXMgdmFs
aWRhdG9ycyBoYXZlIHBhc3NlZC4KKyAqCisgKiBQbGVhc2Ugbm90ZSB0aGF0IGlmICRodHRwIGlz
IHVzZWQgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgc2VydmVyIHJldHVybnMgYSBzdWNj
ZXNzIEhUVFAgcmVzcG9uc2UgY29kZQorICogaW4gb3JkZXIgdG8gZnVsZmlsbCB0aGUgdmFsaWRh
dGlvbiBhbmQgYSBzdGF0dXMgbGV2ZWwgb2YgYDR4eGAgaW4gb3JkZXIgdG8gcmVqZWN0IHRoZSB2
YWxpZGF0aW9uLgorICoKKyAqIGBgYGpzCisgKiBuZ01vZGVsLiRhc3luY1ZhbGlkYXRvcnMudW5p
cXVlVXNlcm5hbWUgPSBmdW5jdGlvbihtb2RlbFZhbHVlLCB2aWV3VmFsdWUpIHsKKyAqICAgdmFy
IHZhbHVlID0gbW9kZWxWYWx1ZSB8fCB2aWV3VmFsdWU7CisgKgorICogICAvLyBMb29rdXAgdXNl
ciBieSB1c2VybmFtZQorICogICByZXR1cm4gJGh0dHAuZ2V0KCcvYXBpL3VzZXJzLycgKyB2YWx1
ZSkuCisgKiAgICAgIHRoZW4oZnVuY3Rpb24gcmVzb2x2ZWQoKSB7CisgKiAgICAgICAgLy91c2Vy
bmFtZSBleGlzdHMsIHRoaXMgbWVhbnMgdmFsaWRhdGlvbiBmYWlscworICogICAgICAgIHJldHVy
biAkcS5yZWplY3QoJ2V4aXN0cycpOworICogICAgICB9LCBmdW5jdGlvbiByZWplY3RlZCgpIHsK
KyAqICAgICAgICAvL3VzZXJuYW1lIGRvZXMgbm90IGV4aXN0LCB0aGVyZWZvcmUgdGhpcyB2YWxp
ZGF0aW9uIHBhc3NlcworICogICAgICAgIHJldHVybiB0cnVlOworICogICAgICB9KTsKKyAqIH07
CisgKiBgYGAKKyAqCisgKiBAcHJvcGVydHkge0FycmF5LjxGdW5jdGlvbj59ICR2aWV3Q2hhbmdl
TGlzdGVuZXJzIEFycmF5IG9mIGZ1bmN0aW9ucyB0byBleGVjdXRlIHdoZW5ldmVyIHRoZQorICog
ICAgIHZpZXcgdmFsdWUgaGFzIGNoYW5nZWQuIEl0IGlzIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50
cywgYW5kIGl0cyByZXR1cm4gdmFsdWUgaXMgaWdub3JlZC4KKyAqICAgICBUaGlzIGNhbiBiZSB1
c2VkIGluIHBsYWNlIG9mIGFkZGl0aW9uYWwgJHdhdGNoZXMgYWdhaW5zdCB0aGUgbW9kZWwgdmFs
dWUuCisgKgorICogQHByb3BlcnR5IHtPYmplY3R9ICRlcnJvciBBbiBvYmplY3QgaGFzaCB3aXRo
IGFsbCBmYWlsaW5nIHZhbGlkYXRvciBpZHMgYXMga2V5cy4KKyAqIEBwcm9wZXJ0eSB7T2JqZWN0
fSAkcGVuZGluZyBBbiBvYmplY3QgaGFzaCB3aXRoIGFsbCBwZW5kaW5nIHZhbGlkYXRvciBpZHMg
YXMga2V5cy4KKyAqCisgKiBAcHJvcGVydHkge2Jvb2xlYW59ICR1bnRvdWNoZWQgVHJ1ZSBpZiBj
b250cm9sIGhhcyBub3QgbG9zdCBmb2N1cyB5ZXQuCisgKiBAcHJvcGVydHkge2Jvb2xlYW59ICR0
b3VjaGVkIFRydWUgaWYgY29udHJvbCBoYXMgbG9zdCBmb2N1cy4KKyAqIEBwcm9wZXJ0eSB7Ym9v
bGVhbn0gJHByaXN0aW5lIFRydWUgaWYgdXNlciBoYXMgbm90IGludGVyYWN0ZWQgd2l0aCB0aGUg
Y29udHJvbCB5ZXQuCisgKiBAcHJvcGVydHkge2Jvb2xlYW59ICRkaXJ0eSBUcnVlIGlmIHVzZXIg
aGFzIGFscmVhZHkgaW50ZXJhY3RlZCB3aXRoIHRoZSBjb250cm9sLgorICogQHByb3BlcnR5IHti
b29sZWFufSAkdmFsaWQgVHJ1ZSBpZiB0aGVyZSBpcyBubyBlcnJvci4KKyAqIEBwcm9wZXJ0eSB7
Ym9vbGVhbn0gJGludmFsaWQgVHJ1ZSBpZiBhdCBsZWFzdCBvbmUgZXJyb3Igb24gdGhlIGNvbnRy
b2wuCisgKiBAcHJvcGVydHkge3N0cmluZ30gJG5hbWUgVGhlIG5hbWUgYXR0cmlidXRlIG9mIHRo
ZSBjb250cm9sLgorICoKKyAqIEBkZXNjcmlwdGlvbgorICoKKyAqIGBOZ01vZGVsQ29udHJvbGxl
cmAgcHJvdmlkZXMgQVBJIGZvciB0aGUge0BsaW5rIG5nTW9kZWwgYG5nTW9kZWxgfSBkaXJlY3Rp
dmUuCisgKiBUaGUgY29udHJvbGxlciBjb250YWlucyBzZXJ2aWNlcyBmb3IgZGF0YS1iaW5kaW5n
LCB2YWxpZGF0aW9uLCBDU1MgdXBkYXRlcywgYW5kIHZhbHVlIGZvcm1hdHRpbmcKKyAqIGFuZCBw
YXJzaW5nLiBJdCBwdXJwb3NlZnVsbHkgZG9lcyBub3QgY29udGFpbiBhbnkgbG9naWMgd2hpY2gg
ZGVhbHMgd2l0aCBET00gcmVuZGVyaW5nIG9yCisgKiBsaXN0ZW5pbmcgdG8gRE9NIGV2ZW50cy4K
KyAqIFN1Y2ggRE9NIHJlbGF0ZWQgbG9naWMgc2hvdWxkIGJlIHByb3ZpZGVkIGJ5IG90aGVyIGRp
cmVjdGl2ZXMgd2hpY2ggbWFrZSB1c2Ugb2YKKyAqIGBOZ01vZGVsQ29udHJvbGxlcmAgZm9yIGRh
dGEtYmluZGluZyB0byBjb250cm9sIGVsZW1lbnRzLgorICogQW5ndWxhciBwcm92aWRlcyB0aGlz
IERPTSBsb2dpYyBmb3IgbW9zdCB7QGxpbmsgaW5wdXQgYGlucHV0YH0gZWxlbWVudHMuCisgKiBB
dCB0aGUgZW5kIG9mIHRoaXMgcGFnZSB5b3UgY2FuIGZpbmQgYSB7QGxpbmsgbmdNb2RlbC5OZ01v
ZGVsQ29udHJvbGxlciNjdXN0b20tY29udHJvbC1leGFtcGxlCisgKiBjdXN0b20gY29udHJvbCBl
eGFtcGxlfSB0aGF0IHVzZXMgYG5nTW9kZWxDb250cm9sbGVyYCB0byBiaW5kIHRvIGBjb250ZW50
ZWRpdGFibGVgIGVsZW1lbnRzLgorICoKKyAqIEBleGFtcGxlCisgKiAjIyMgQ3VzdG9tIENvbnRy
b2wgRXhhbXBsZQorICogVGhpcyBleGFtcGxlIHNob3dzIGhvdyB0byB1c2UgYE5nTW9kZWxDb250
cm9sbGVyYCB3aXRoIGEgY3VzdG9tIGNvbnRyb2wgdG8gYWNoaWV2ZQorICogZGF0YS1iaW5kaW5n
LiBOb3RpY2UgaG93IGRpZmZlcmVudCBkaXJlY3RpdmVzIChgY29udGVudGVkaXRhYmxlYCwgYG5n
LW1vZGVsYCwgYW5kIGByZXF1aXJlZGApCisgKiBjb2xsYWJvcmF0ZSB0b2dldGhlciB0byBhY2hp
ZXZlIHRoZSBkZXNpcmVkIHJlc3VsdC4KKyAqCisgKiBgY29udGVudGVkaXRhYmxlYCBpcyBhbiBI
VE1MNSBhdHRyaWJ1dGUsIHdoaWNoIHRlbGxzIHRoZSBicm93c2VyIHRvIGxldCB0aGUgZWxlbWVu
dAorICogY29udGVudHMgYmUgZWRpdGVkIGluIHBsYWNlIGJ5IHRoZSB1c2VyLgorICoKKyAqIFdl
IGFyZSB1c2luZyB0aGUge0BsaW5rIG5nLnNlcnZpY2U6JHNjZSAkc2NlfSBzZXJ2aWNlIGhlcmUg
YW5kIGluY2x1ZGUgdGhlIHtAbGluayBuZ1Nhbml0aXplICRzYW5pdGl6ZX0KKyAqIG1vZHVsZSB0
byBhdXRvbWF0aWNhbGx5IHJlbW92ZSAiYmFkIiBjb250ZW50IGxpa2UgaW5saW5lIGV2ZW50IGxp
c3RlbmVyIChlLmcuIGA8c3BhbiBvbmNsaWNrPSIuLi4iPmApLgorICogSG93ZXZlciwgYXMgd2Ug
YXJlIHVzaW5nIGAkc2NlYCB0aGUgbW9kZWwgY2FuIHN0aWxsIGRlY2lkZSB0byBwcm92aWRlIHVu
c2FmZSBjb250ZW50IGlmIGl0IG1hcmtzCisgKiB0aGF0IGNvbnRlbnQgdXNpbmcgdGhlIGAkc2Nl
YCBzZXJ2aWNlLgorICoKKyAqIDxleGFtcGxlIG5hbWU9Ik5nTW9kZWxDb250cm9sbGVyIiBtb2R1
bGU9ImN1c3RvbUNvbnRyb2wiIGRlcHM9ImFuZ3VsYXItc2FuaXRpemUuanMiPgorICAgIDxmaWxl
IG5hbWU9InN0eWxlLmNzcyI+CisgICAgICBbY29udGVudGVkaXRhYmxlXSB7CisgICAgICAgIGJv
cmRlcjogMXB4IHNvbGlkIGJsYWNrOworICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsK
KyAgICAgICAgbWluLWhlaWdodDogMjBweDsKKyAgICAgIH0KKworICAgICAgLm5nLWludmFsaWQg
eworICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZWQ7CisgICAgICB9CisKKyAgICA8L2ZpbGU+
CisgICAgPGZpbGUgbmFtZT0ic2NyaXB0LmpzIj4KKyAgICAgIGFuZ3VsYXIubW9kdWxlKCdjdXN0
b21Db250cm9sJywgWyduZ1Nhbml0aXplJ10pLgorICAgICAgICBkaXJlY3RpdmUoJ2NvbnRlbnRl
ZGl0YWJsZScsIFsnJHNjZScsIGZ1bmN0aW9uKCRzY2UpIHsKKyAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgcmVzdHJpY3Q6ICdBJywgLy8gb25seSBhY3RpdmF0ZSBvbiBlbGVtZW50IGF0
dHJpYnV0ZQorICAgICAgICAgICAgcmVxdWlyZTogJz9uZ01vZGVsJywgLy8gZ2V0IGEgaG9sZCBv
ZiBOZ01vZGVsQ29udHJvbGxlcgorICAgICAgICAgICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVs
ZW1lbnQsIGF0dHJzLCBuZ01vZGVsKSB7CisgICAgICAgICAgICAgIGlmICghbmdNb2RlbCkgcmV0
dXJuOyAvLyBkbyBub3RoaW5nIGlmIG5vIG5nLW1vZGVsCisKKyAgICAgICAgICAgICAgLy8gU3Bl
Y2lmeSBob3cgVUkgc2hvdWxkIGJlIHVwZGF0ZWQKKyAgICAgICAgICAgICAgbmdNb2RlbC4kcmVu
ZGVyID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZWxlbWVudC5odG1sKCRzY2UuZ2V0
VHJ1c3RlZEh0bWwobmdNb2RlbC4kdmlld1ZhbHVlIHx8ICcnKSk7CisgICAgICAgICAgICAgIH07
CisKKyAgICAgICAgICAgICAgLy8gTGlzdGVuIGZvciBjaGFuZ2UgZXZlbnRzIHRvIGVuYWJsZSBi
aW5kaW5nCisgICAgICAgICAgICAgIGVsZW1lbnQub24oJ2JsdXIga2V5dXAgY2hhbmdlJywgZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgc2NvcGUuJGV2YWxBc3luYyhyZWFkKTsKKyAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgIHJlYWQoKTsgLy8gaW5pdGlhbGl6ZQorCisgICAg
ICAgICAgICAgIC8vIFdyaXRlIGRhdGEgdG8gdGhlIG1vZGVsCisgICAgICAgICAgICAgIGZ1bmN0
aW9uIHJlYWQoKSB7CisgICAgICAgICAgICAgICAgdmFyIGh0bWwgPSBlbGVtZW50Lmh0bWwoKTsK
KyAgICAgICAgICAgICAgICAvLyBXaGVuIHdlIGNsZWFyIHRoZSBjb250ZW50IGVkaXRhYmxlIHRo
ZSBicm93c2VyIGxlYXZlcyBhIDxicj4gYmVoaW5kCisgICAgICAgICAgICAgICAgLy8gSWYgc3Ry
aXAtYnIgYXR0cmlidXRlIGlzIHByb3ZpZGVkIHRoZW4gd2Ugc3RyaXAgdGhpcyBvdXQKKyAgICAg
ICAgICAgICAgICBpZiAoIGF0dHJzLnN0cmlwQnIgJiYgaHRtbCA9PSAnPGJyPicgKSB7CisgICAg
ICAgICAgICAgICAgICBodG1sID0gJyc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIG5nTW9kZWwuJHNldFZpZXdWYWx1ZShodG1sKTsKKyAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgIH07CisgICAgICAgIH1dKTsKKyAgICA8L2ZpbGU+CisgICAgPGZp
bGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAgICA8Zm9ybSBuYW1lPSJteUZvcm0iPgorICAgICAg
IDxkaXYgY29udGVudGVkaXRhYmxlCisgICAgICAgICAgICBuYW1lPSJteVdpZGdldCIgbmctbW9k
ZWw9InVzZXJDb250ZW50IgorICAgICAgICAgICAgc3RyaXAtYnI9InRydWUiCisgICAgICAgICAg
ICByZXF1aXJlZD5DaGFuZ2UgbWUhPC9kaXY+CisgICAgICAgIDxzcGFuIG5nLXNob3c9Im15Rm9y
bS5teVdpZGdldC4kZXJyb3IucmVxdWlyZWQiPlJlcXVpcmVkITwvc3Bhbj4KKyAgICAgICA8aHI+
CisgICAgICAgPHRleHRhcmVhIG5nLW1vZGVsPSJ1c2VyQ29udGVudCIgYXJpYS1sYWJlbD0iRHlu
YW1pYyB0ZXh0YXJlYSI+PC90ZXh0YXJlYT4KKyAgICAgIDwvZm9ybT4KKyAgICA8L2ZpbGU+Cisg
ICAgPGZpbGUgbmFtZT0icHJvdHJhY3Rvci5qcyIgdHlwZT0icHJvdHJhY3RvciI+CisgICAgaXQo
J3Nob3VsZCBkYXRhLWJpbmQgYW5kIGJlY29tZSBpbnZhbGlkJywgZnVuY3Rpb24oKSB7CisgICAg
ICBpZiAoYnJvd3Nlci5wYXJhbXMuYnJvd3NlciA9PSAnc2FmYXJpJyB8fCBicm93c2VyLnBhcmFt
cy5icm93c2VyID09ICdmaXJlZm94JykgeworICAgICAgICAvLyBTYWZhcmlEcml2ZXIgY2FuJ3Qg
aGFuZGxlIGNvbnRlbnRlZGl0YWJsZQorICAgICAgICAvLyBhbmQgRmlyZWZveCBkcml2ZXIgY2Fu
J3QgY2xlYXIgY29udGVudGVkaXRhYmxlcyB2ZXJ5IHdlbGwKKyAgICAgICAgcmV0dXJuOworICAg
ICAgfQorICAgICAgdmFyIGNvbnRlbnRFZGl0YWJsZSA9IGVsZW1lbnQoYnkuY3NzKCdbY29udGVu
dGVkaXRhYmxlXScpKTsKKyAgICAgIHZhciBjb250ZW50ID0gJ0NoYW5nZSBtZSEnOworCisgICAg
ICBleHBlY3QoY29udGVudEVkaXRhYmxlLmdldFRleHQoKSkudG9FcXVhbChjb250ZW50KTsKKwor
ICAgICAgY29udGVudEVkaXRhYmxlLmNsZWFyKCk7CisgICAgICBjb250ZW50RWRpdGFibGUuc2Vu
ZEtleXMocHJvdHJhY3Rvci5LZXkuQkFDS19TUEFDRSk7CisgICAgICBleHBlY3QoY29udGVudEVk
aXRhYmxlLmdldFRleHQoKSkudG9FcXVhbCgnJyk7CisgICAgICBleHBlY3QoY29udGVudEVkaXRh
YmxlLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSkudG9NYXRjaCgvbmctaW52YWxpZC1yZXF1aXJlZC8p
OworICAgIH0pOworICAgIDwvZmlsZT4KKyAqIDwvZXhhbXBsZT4KKyAqCisgKgorICovCit2YXIg
TmdNb2RlbENvbnRyb2xsZXIgPSBbJyRzY29wZScsICckZXhjZXB0aW9uSGFuZGxlcicsICckYXR0
cnMnLCAnJGVsZW1lbnQnLCAnJHBhcnNlJywgJyRhbmltYXRlJywgJyR0aW1lb3V0JywgJyRyb290
U2NvcGUnLCAnJHEnLCAnJGludGVycG9sYXRlJywKKyAgICBmdW5jdGlvbigkc2NvcGUsICRleGNl
cHRpb25IYW5kbGVyLCAkYXR0ciwgJGVsZW1lbnQsICRwYXJzZSwgJGFuaW1hdGUsICR0aW1lb3V0
LCAkcm9vdFNjb3BlLCAkcSwgJGludGVycG9sYXRlKSB7CisgIHRoaXMuJHZpZXdWYWx1ZSA9IE51
bWJlci5OYU47CisgIHRoaXMuJG1vZGVsVmFsdWUgPSBOdW1iZXIuTmFOOworICB0aGlzLiQkcmF3
TW9kZWxWYWx1ZSA9IHVuZGVmaW5lZDsgLy8gc3RvcmVzIHRoZSBwYXJzZWQgbW9kZWxWYWx1ZSAv
IG1vZGVsIHNldCBmcm9tIHNjb3BlIHJlZ2FyZGxlc3Mgb2YgdmFsaWRpdHkuCisgIHRoaXMuJHZh
bGlkYXRvcnMgPSB7fTsKKyAgdGhpcy4kYXN5bmNWYWxpZGF0b3JzID0ge307CisgIHRoaXMuJHBh
cnNlcnMgPSBbXTsKKyAgdGhpcy4kZm9ybWF0dGVycyA9IFtdOworICB0aGlzLiR2aWV3Q2hhbmdl
TGlzdGVuZXJzID0gW107CisgIHRoaXMuJHVudG91Y2hlZCA9IHRydWU7CisgIHRoaXMuJHRvdWNo
ZWQgPSBmYWxzZTsKKyAgdGhpcy4kcHJpc3RpbmUgPSB0cnVlOworICB0aGlzLiRkaXJ0eSA9IGZh
bHNlOworICB0aGlzLiR2YWxpZCA9IHRydWU7CisgIHRoaXMuJGludmFsaWQgPSBmYWxzZTsKKyAg
dGhpcy4kZXJyb3IgPSB7fTsgLy8ga2VlcCBpbnZhbGlkIGtleXMgaGVyZQorICB0aGlzLiQkc3Vj
Y2VzcyA9IHt9OyAvLyBrZWVwIHZhbGlkIGtleXMgaGVyZQorICB0aGlzLiRwZW5kaW5nID0gdW5k
ZWZpbmVkOyAvLyBrZWVwIHBlbmRpbmcga2V5cyBoZXJlCisgIHRoaXMuJG5hbWUgPSAkaW50ZXJw
b2xhdGUoJGF0dHIubmFtZSB8fCAnJywgZmFsc2UpKCRzY29wZSk7CisKKworICB2YXIgcGFyc2Vk
TmdNb2RlbCA9ICRwYXJzZSgkYXR0ci5uZ01vZGVsKSwKKyAgICAgIHBhcnNlZE5nTW9kZWxBc3Np
Z24gPSBwYXJzZWROZ01vZGVsLmFzc2lnbiwKKyAgICAgIG5nTW9kZWxHZXQgPSBwYXJzZWROZ01v
ZGVsLAorICAgICAgbmdNb2RlbFNldCA9IHBhcnNlZE5nTW9kZWxBc3NpZ24sCisgICAgICBwZW5k
aW5nRGVib3VuY2UgPSBudWxsLAorICAgICAgcGFyc2VyVmFsaWQsCisgICAgICBjdHJsID0gdGhp
czsKKworICB0aGlzLiQkc2V0T3B0aW9ucyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKKyAgICBjdHJs
LiRvcHRpb25zID0gb3B0aW9uczsKKyAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdldHRlclNl
dHRlcikgeworICAgICAgdmFyIGludm9rZU1vZGVsR2V0dGVyID0gJHBhcnNlKCRhdHRyLm5nTW9k
ZWwgKyAnKCknKSwKKyAgICAgICAgICBpbnZva2VNb2RlbFNldHRlciA9ICRwYXJzZSgkYXR0ci5u
Z01vZGVsICsgJygkJCRwKScpOworCisgICAgICBuZ01vZGVsR2V0ID0gZnVuY3Rpb24oJHNjb3Bl
KSB7CisgICAgICAgIHZhciBtb2RlbFZhbHVlID0gcGFyc2VkTmdNb2RlbCgkc2NvcGUpOworICAg
ICAgICBpZiAoaXNGdW5jdGlvbihtb2RlbFZhbHVlKSkgeworICAgICAgICAgIG1vZGVsVmFsdWUg
PSBpbnZva2VNb2RlbEdldHRlcigkc2NvcGUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBt
b2RlbFZhbHVlOworICAgICAgfTsKKyAgICAgIG5nTW9kZWxTZXQgPSBmdW5jdGlvbigkc2NvcGUs
IG5ld1ZhbHVlKSB7CisgICAgICAgIGlmIChpc0Z1bmN0aW9uKHBhcnNlZE5nTW9kZWwoJHNjb3Bl
KSkpIHsKKyAgICAgICAgICBpbnZva2VNb2RlbFNldHRlcigkc2NvcGUsIHskJCRwOiBjdHJsLiRt
b2RlbFZhbHVlfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcGFyc2VkTmdNb2RlbEFz
c2lnbigkc2NvcGUsIGN0cmwuJG1vZGVsVmFsdWUpOworICAgICAgICB9CisgICAgICB9OworICAg
IH0gZWxzZSBpZiAoIXBhcnNlZE5nTW9kZWwuYXNzaWduKSB7CisgICAgICB0aHJvdyAkbmdNb2Rl
bE1pbkVycignbm9uYXNzaWduJywgIkV4cHJlc3Npb24gJ3swfScgaXMgbm9uLWFzc2lnbmFibGUu
IEVsZW1lbnQ6IHsxfSIsCisgICAgICAgICAgJGF0dHIubmdNb2RlbCwgc3RhcnRpbmdUYWcoJGVs
ZW1lbnQpKTsKKyAgICB9CisgIH07CisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICog
QG5hbWUgbmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlciMkcmVuZGVyCisgICAqCisgICAqIEBkZXNj
cmlwdGlvbgorICAgKiBDYWxsZWQgd2hlbiB0aGUgdmlldyBuZWVkcyB0byBiZSB1cGRhdGVkLiBJ
dCBpcyBleHBlY3RlZCB0aGF0IHRoZSB1c2VyIG9mIHRoZSBuZy1tb2RlbAorICAgKiBkaXJlY3Rp
dmUgd2lsbCBpbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAqCisgICAqIFRoZSBgJHJlbmRlcigp
YCBtZXRob2QgaXMgaW52b2tlZCBpbiB0aGUgZm9sbG93aW5nIHNpdHVhdGlvbnM6CisgICAqCisg
ICAqICogYCRyb2xsYmFja1ZpZXdWYWx1ZSgpYCBpcyBjYWxsZWQuICBJZiB3ZSBhcmUgcm9sbGlu
ZyBiYWNrIHRoZSB2aWV3IHZhbHVlIHRvIHRoZSBsYXN0CisgICAqICAgY29tbWl0dGVkIHZhbHVl
IHRoZW4gYCRyZW5kZXIoKWAgaXMgY2FsbGVkIHRvIHVwZGF0ZSB0aGUgaW5wdXQgY29udHJvbC4K
KyAgICogKiBUaGUgdmFsdWUgcmVmZXJlbmNlZCBieSBgbmctbW9kZWxgIGlzIGNoYW5nZWQgcHJv
Z3JhbW1hdGljYWxseSBhbmQgYm90aCB0aGUgYCRtb2RlbFZhbHVlYCBhbmQKKyAgICogICB0aGUg
YCR2aWV3VmFsdWVgIGFyZSBkaWZmZXJlbnQgZnJvbSBsYXN0IHRpbWUuCisgICAqCisgICAqIFNp
bmNlIGBuZy1tb2RlbGAgZG9lcyBub3QgZG8gYSBkZWVwIHdhdGNoLCBgJHJlbmRlcigpYCBpcyBv
bmx5IGludm9rZWQgaWYgdGhlIHZhbHVlcyBvZgorICAgKiBgJG1vZGVsVmFsdWVgIGFuZCBgJHZp
ZXdWYWx1ZWAgYXJlIGFjdHVhbGx5IGRpZmZlcmVudCBmcm9tIHRoZWlyIHByZXZpb3VzIHZhbHVl
LiBJZiBgJG1vZGVsVmFsdWVgCisgICAqIG9yIGAkdmlld1ZhbHVlYCBhcmUgb2JqZWN0cyAocmF0
aGVyIHRoYW4gYSBzdHJpbmcgb3IgbnVtYmVyKSB0aGVuIGAkcmVuZGVyKClgIHdpbGwgbm90IGJl
CisgICAqIGludm9rZWQgaWYgeW91IG9ubHkgY2hhbmdlIGEgcHJvcGVydHkgb24gdGhlIG9iamVj
dHMuCisgICAqLworICB0aGlzLiRyZW5kZXIgPSBub29wOworCisgIC8qKgorICAgKiBAbmdkb2Mg
bWV0aG9kCisgICAqIEBuYW1lIG5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXIjJGlzRW1wdHkKKyAg
ICoKKyAgICogQGRlc2NyaXB0aW9uCisgICAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gd2UgbmVlZCB0
byBkZXRlcm1pbmUgaWYgdGhlIHZhbHVlIG9mIGFuIGlucHV0IGlzIGVtcHR5LgorICAgKgorICAg
KiBGb3IgaW5zdGFuY2UsIHRoZSByZXF1aXJlZCBkaXJlY3RpdmUgZG9lcyB0aGlzIHRvIHdvcmsg
b3V0IGlmIHRoZSBpbnB1dCBoYXMgZGF0YSBvciBub3QuCisgICAqCisgICAqIFRoZSBkZWZhdWx0
IGAkaXNFbXB0eWAgZnVuY3Rpb24gY2hlY2tzIHdoZXRoZXIgdGhlIHZhbHVlIGlzIGB1bmRlZmlu
ZWRgLCBgJydgLCBgbnVsbGAgb3IgYE5hTmAuCisgICAqCisgICAqIFlvdSBjYW4gb3ZlcnJpZGUg
dGhpcyBmb3IgaW5wdXQgZGlyZWN0aXZlcyB3aG9zZSBjb25jZXB0IG9mIGJlaW5nIGVtcHR5IGlz
IGRpZmZlcmVudCBmcm9tIHRoZQorICAgKiBkZWZhdWx0LiBUaGUgYGNoZWNrYm94SW5wdXRUeXBl
YCBkaXJlY3RpdmUgZG9lcyB0aGlzIGJlY2F1c2UgaW4gaXRzIGNhc2UgYSB2YWx1ZSBvZiBgZmFs
c2VgCisgICAqIGltcGxpZXMgZW1wdHkuCisgICAqCisgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhl
IHZhbHVlIG9mIHRoZSBpbnB1dCB0byBjaGVjayBmb3IgZW1wdGluZXNzLgorICAgKiBAcmV0dXJu
cyB7Ym9vbGVhbn0gVHJ1ZSBpZiBgdmFsdWVgIGlzICJlbXB0eSIuCisgICAqLworICB0aGlzLiRp
c0VtcHR5ID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgICByZXR1cm4gaXNVbmRlZmluZWQodmFsdWUp
IHx8IHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWU7Cisg
IH07CisKKyAgdmFyIHBhcmVudEZvcm0gPSAkZWxlbWVudC5pbmhlcml0ZWREYXRhKCckZm9ybUNv
bnRyb2xsZXInKSB8fCBudWxsRm9ybUN0cmwsCisgICAgICBjdXJyZW50VmFsaWRhdGlvblJ1bklk
ID0gMDsKKworICAvKioKKyAgICogQG5nZG9jIG1ldGhvZAorICAgKiBAbmFtZSBuZ01vZGVsLk5n
TW9kZWxDb250cm9sbGVyIyRzZXRWYWxpZGl0eQorICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAg
ICogQ2hhbmdlIHRoZSB2YWxpZGl0eSBzdGF0ZSwgYW5kIG5vdGlmeSB0aGUgZm9ybS4KKyAgICoK
KyAgICogVGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCB3aXRoaW4gJHBhcnNlcnMvJGZvcm1hdHRl
cnMgb3IgYSBjdXN0b20gdmFsaWRhdGlvbiBpbXBsZW1lbnRhdGlvbi4KKyAgICogSG93ZXZlciwg
aW4gbW9zdCBjYXNlcyBpdCBzaG91bGQgYmUgc3VmZmljaWVudCB0byB1c2UgdGhlIGBuZ01vZGVs
LiR2YWxpZGF0b3JzYCBhbmQKKyAgICogYG5nTW9kZWwuJGFzeW5jVmFsaWRhdG9yc2AgY29sbGVj
dGlvbnMgd2hpY2ggd2lsbCBjYWxsIGAkc2V0VmFsaWRpdHlgIGF1dG9tYXRpY2FsbHkuCisgICAq
CisgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWxpZGF0aW9uRXJyb3JLZXkgTmFtZSBvZiB0aGUgdmFs
aWRhdG9yLiBUaGUgYHZhbGlkYXRpb25FcnJvcktleWAgd2lsbCBiZSBhc3NpZ25lZAorICAgKiAg
ICAgICAgdG8gZWl0aGVyIGAkZXJyb3JbdmFsaWRhdGlvbkVycm9yS2V5XWAgb3IgYCRwZW5kaW5n
W3ZhbGlkYXRpb25FcnJvcktleV1gCisgICAqICAgICAgICAoZm9yIHVuZnVsZmlsbGVkIGAkYXN5
bmNWYWxpZGF0b3JzYCksIHNvIHRoYXQgaXQgaXMgYXZhaWxhYmxlIGZvciBkYXRhLWJpbmRpbmcu
CisgICAqICAgICAgICBUaGUgYHZhbGlkYXRpb25FcnJvcktleWAgc2hvdWxkIGJlIGluIGNhbWVs
Q2FzZSBhbmQgd2lsbCBnZXQgY29udmVydGVkIGludG8gZGFzaC1jYXNlCisgICAqICAgICAgICBm
b3IgY2xhc3MgbmFtZS4gRXhhbXBsZTogYG15RXJyb3JgIHdpbGwgcmVzdWx0IGluIGBuZy12YWxp
ZC1teS1lcnJvcmAgYW5kIGBuZy1pbnZhbGlkLW15LWVycm9yYAorICAgKiAgICAgICAgY2xhc3Mg
YW5kIGNhbiBiZSBib3VuZCB0byBhcyAgYHt7c29tZUZvcm0uc29tZUNvbnRyb2wuJGVycm9yLm15
RXJyb3J9fWAgLgorICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzVmFsaWQgV2hldGhlciB0aGUgY3Vy
cmVudCBzdGF0ZSBpcyB2YWxpZCAodHJ1ZSksIGludmFsaWQgKGZhbHNlKSwgcGVuZGluZyAodW5k
ZWZpbmVkKSwKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHNraXBwZWQgKG51bGwp
LiBQZW5kaW5nIGlzIHVzZWQgZm9yIHVuZnVsZmlsbGVkIGAkYXN5bmNWYWxpZGF0b3JzYC4KKyAg
ICogICAgICAgICAgICAgICAgICAgICAgICAgIFNraXBwZWQgaXMgdXNlZCBieSBBbmd1bGFyIHdo
ZW4gdmFsaWRhdG9ycyBkbyBub3QgcnVuIGJlY2F1c2Ugb2YgcGFyc2UgZXJyb3JzIGFuZAorICAg
KiAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBgJGFzeW5jVmFsaWRhdG9yc2AgZG8gbm90
IHJ1biBiZWNhdXNlIGFueSBvZiB0aGUgYCR2YWxpZGF0b3JzYCBmYWlsZWQuCisgICAqLworICBh
ZGRTZXRWYWxpZGl0eU1ldGhvZCh7CisgICAgY3RybDogdGhpcywKKyAgICAkZWxlbWVudDogJGVs
ZW1lbnQsCisgICAgc2V0OiBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7CisgICAgICBvYmpl
Y3RbcHJvcGVydHldID0gdHJ1ZTsKKyAgICB9LAorICAgIHVuc2V0OiBmdW5jdGlvbihvYmplY3Qs
IHByb3BlcnR5KSB7CisgICAgICBkZWxldGUgb2JqZWN0W3Byb3BlcnR5XTsKKyAgICB9LAorICAg
IHBhcmVudEZvcm06IHBhcmVudEZvcm0sCisgICAgJGFuaW1hdGU6ICRhbmltYXRlCisgIH0pOwor
CisgIC8qKgorICAgKiBAbmdkb2MgbWV0aG9kCisgICAqIEBuYW1lIG5nTW9kZWwuTmdNb2RlbENv
bnRyb2xsZXIjJHNldFByaXN0aW5lCisgICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBTZXRz
IHRoZSBjb250cm9sIHRvIGl0cyBwcmlzdGluZSBzdGF0ZS4KKyAgICoKKyAgICogVGhpcyBtZXRo
b2QgY2FuIGJlIGNhbGxlZCB0byByZW1vdmUgdGhlIGBuZy1kaXJ0eWAgY2xhc3MgYW5kIHNldCB0
aGUgY29udHJvbCB0byBpdHMgcHJpc3RpbmUKKyAgICogc3RhdGUgKGBuZy1wcmlzdGluZWAgY2xh
c3MpLiBBIG1vZGVsIGlzIGNvbnNpZGVyZWQgdG8gYmUgcHJpc3RpbmUgd2hlbiB0aGUgY29udHJv
bAorICAgKiBoYXMgbm90IGJlZW4gY2hhbmdlZCBmcm9tIHdoZW4gZmlyc3QgY29tcGlsZWQuCisg
ICAqLworICB0aGlzLiRzZXRQcmlzdGluZSA9IGZ1bmN0aW9uKCkgeworICAgIGN0cmwuJGRpcnR5
ID0gZmFsc2U7CisgICAgY3RybC4kcHJpc3RpbmUgPSB0cnVlOworICAgICRhbmltYXRlLnJlbW92
ZUNsYXNzKCRlbGVtZW50LCBESVJUWV9DTEFTUyk7CisgICAgJGFuaW1hdGUuYWRkQ2xhc3MoJGVs
ZW1lbnQsIFBSSVNUSU5FX0NMQVNTKTsKKyAgfTsKKworICAvKioKKyAgICogQG5nZG9jIG1ldGhv
ZAorICAgKiBAbmFtZSBuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVyIyRzZXREaXJ0eQorICAgKgor
ICAgKiBAZGVzY3JpcHRpb24KKyAgICogU2V0cyB0aGUgY29udHJvbCB0byBpdHMgZGlydHkgc3Rh
dGUuCisgICAqCisgICAqIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgdG8gcmVtb3ZlIHRoZSBg
bmctcHJpc3RpbmVgIGNsYXNzIGFuZCBzZXQgdGhlIGNvbnRyb2wgdG8gaXRzIGRpcnR5CisgICAq
IHN0YXRlIChgbmctZGlydHlgIGNsYXNzKS4gQSBtb2RlbCBpcyBjb25zaWRlcmVkIHRvIGJlIGRp
cnR5IHdoZW4gdGhlIGNvbnRyb2wgaGFzIGJlZW4gY2hhbmdlZAorICAgKiBmcm9tIHdoZW4gZmly
c3QgY29tcGlsZWQuCisgICAqLworICB0aGlzLiRzZXREaXJ0eSA9IGZ1bmN0aW9uKCkgeworICAg
IGN0cmwuJGRpcnR5ID0gdHJ1ZTsKKyAgICBjdHJsLiRwcmlzdGluZSA9IGZhbHNlOworICAgICRh
bmltYXRlLnJlbW92ZUNsYXNzKCRlbGVtZW50LCBQUklTVElORV9DTEFTUyk7CisgICAgJGFuaW1h
dGUuYWRkQ2xhc3MoJGVsZW1lbnQsIERJUlRZX0NMQVNTKTsKKyAgICBwYXJlbnRGb3JtLiRzZXRE
aXJ0eSgpOworICB9OworCisgIC8qKgorICAgKiBAbmdkb2MgbWV0aG9kCisgICAqIEBuYW1lIG5n
TW9kZWwuTmdNb2RlbENvbnRyb2xsZXIjJHNldFVudG91Y2hlZAorICAgKgorICAgKiBAZGVzY3Jp
cHRpb24KKyAgICogU2V0cyB0aGUgY29udHJvbCB0byBpdHMgdW50b3VjaGVkIHN0YXRlLgorICAg
KgorICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIHRvIHJlbW92ZSB0aGUgYG5nLXRvdWNo
ZWRgIGNsYXNzIGFuZCBzZXQgdGhlIGNvbnRyb2wgdG8gaXRzCisgICAqIHVudG91Y2hlZCBzdGF0
ZSAoYG5nLXVudG91Y2hlZGAgY2xhc3MpLiBVcG9uIGNvbXBpbGF0aW9uLCBhIG1vZGVsIGlzIHNl
dCBhcyB1bnRvdWNoZWQKKyAgICogYnkgZGVmYXVsdCwgaG93ZXZlciB0aGlzIGZ1bmN0aW9uIGNh
biBiZSB1c2VkIHRvIHJlc3RvcmUgdGhhdCBzdGF0ZSBpZiB0aGUgbW9kZWwgaGFzCisgICAqIGFs
cmVhZHkgYmVlbiB0b3VjaGVkIGJ5IHRoZSB1c2VyLgorICAgKi8KKyAgdGhpcy4kc2V0VW50b3Vj
aGVkID0gZnVuY3Rpb24oKSB7CisgICAgY3RybC4kdG91Y2hlZCA9IGZhbHNlOworICAgIGN0cmwu
JHVudG91Y2hlZCA9IHRydWU7CisgICAgJGFuaW1hdGUuc2V0Q2xhc3MoJGVsZW1lbnQsIFVOVE9V
Q0hFRF9DTEFTUywgVE9VQ0hFRF9DTEFTUyk7CisgIH07CisKKyAgLyoqCisgICAqIEBuZ2RvYyBt
ZXRob2QKKyAgICogQG5hbWUgbmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlciMkc2V0VG91Y2hlZAor
ICAgKgorICAgKiBAZGVzY3JpcHRpb24KKyAgICogU2V0cyB0aGUgY29udHJvbCB0byBpdHMgdG91
Y2hlZCBzdGF0ZS4KKyAgICoKKyAgICogVGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCB0byByZW1v
dmUgdGhlIGBuZy11bnRvdWNoZWRgIGNsYXNzIGFuZCBzZXQgdGhlIGNvbnRyb2wgdG8gaXRzCisg
ICAqIHRvdWNoZWQgc3RhdGUgKGBuZy10b3VjaGVkYCBjbGFzcykuIEEgbW9kZWwgaXMgY29uc2lk
ZXJlZCB0byBiZSB0b3VjaGVkIHdoZW4gdGhlIHVzZXIgaGFzCisgICAqIGZpcnN0IGZvY3VzZWQg
dGhlIGNvbnRyb2wgZWxlbWVudCBhbmQgdGhlbiBzaGlmdGVkIGZvY3VzIGF3YXkgZnJvbSB0aGUg
Y29udHJvbCAoYmx1ciBldmVudCkuCisgICAqLworICB0aGlzLiRzZXRUb3VjaGVkID0gZnVuY3Rp
b24oKSB7CisgICAgY3RybC4kdG91Y2hlZCA9IHRydWU7CisgICAgY3RybC4kdW50b3VjaGVkID0g
ZmFsc2U7CisgICAgJGFuaW1hdGUuc2V0Q2xhc3MoJGVsZW1lbnQsIFRPVUNIRURfQ0xBU1MsIFVO
VE9VQ0hFRF9DTEFTUyk7CisgIH07CisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRob2QKKyAgICog
QG5hbWUgbmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlciMkcm9sbGJhY2tWaWV3VmFsdWUKKyAgICoK
KyAgICogQGRlc2NyaXB0aW9uCisgICAqIENhbmNlbCBhbiB1cGRhdGUgYW5kIHJlc2V0IHRoZSBp
bnB1dCBlbGVtZW50J3MgdmFsdWUgdG8gcHJldmVudCBhbiB1cGRhdGUgdG8gdGhlIGAkbW9kZWxW
YWx1ZWAsCisgICAqIHdoaWNoIG1heSBiZSBjYXVzZWQgYnkgYSBwZW5kaW5nIGRlYm91bmNlZCBl
dmVudCBvciBiZWNhdXNlIHRoZSBpbnB1dCBpcyB3YWl0aW5nIGZvciBhIHNvbWUKKyAgICogZnV0
dXJlIGV2ZW50LgorICAgKgorICAgKiBJZiB5b3UgaGF2ZSBhbiBpbnB1dCB0aGF0IHVzZXMgYG5n
LW1vZGVsLW9wdGlvbnNgIHRvIHNldCB1cCBkZWJvdW5jZWQgZXZlbnRzIG9yIGV2ZW50cyBzdWNo
CisgICAqIGFzIGJsdXIgeW91IGNhbiBoYXZlIGEgc2l0dWF0aW9uIHdoZXJlIHRoZXJlIGlzIGEg
cGVyaW9kIHdoZW4gdGhlIGAkdmlld1ZhbHVlYAorICAgKiBpcyBvdXQgb2Ygc3luY2ggd2l0aCB0
aGUgbmdNb2RlbCdzIGAkbW9kZWxWYWx1ZWAuCisgICAqCisgICAqIEluIHRoaXMgY2FzZSwgeW91
IGNhbiBydW4gaW50byBkaWZmaWN1bHRpZXMgaWYgeW91IHRyeSB0byB1cGRhdGUgdGhlIG5nTW9k
ZWwncyBgJG1vZGVsVmFsdWVgCisgICAqIHByb2dyYW1tYXRpY2FsbHkgYmVmb3JlIHRoZXNlIGRl
Ym91bmNlZC9mdXR1cmUgZXZlbnRzIGhhdmUgcmVzb2x2ZWQvb2NjdXJyZWQsIGJlY2F1c2UgQW5n
dWxhcidzCisgICAqIGRpcnR5IGNoZWNraW5nIG1lY2hhbmlzbSBpcyBub3QgYWJsZSB0byB0ZWxs
IHdoZXRoZXIgdGhlIG1vZGVsIGhhcyBhY3R1YWxseSBjaGFuZ2VkIG9yIG5vdC4KKyAgICoKKyAg
ICogVGhlIGAkcm9sbGJhY2tWaWV3VmFsdWUoKWAgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgYmVm
b3JlIHByb2dyYW1tYXRpY2FsbHkgY2hhbmdpbmcgdGhlIG1vZGVsIG9mIGFuCisgICAqIGlucHV0
IHdoaWNoIG1heSBoYXZlIHN1Y2ggZXZlbnRzIHBlbmRpbmcuIFRoaXMgaXMgaW1wb3J0YW50IGlu
IG9yZGVyIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZQorICAgKiBpbnB1dCBmaWVsZCB3aWxsIGJlIHVw
ZGF0ZWQgd2l0aCB0aGUgbmV3IG1vZGVsIHZhbHVlIGFuZCBhbnkgcGVuZGluZyBvcGVyYXRpb25z
IGFyZSBjYW5jZWxsZWQuCisgICAqCisgICAqIDxleGFtcGxlIG5hbWU9Im5nLW1vZGVsLWNhbmNl
bC11cGRhdGUiIG1vZHVsZT0iY2FuY2VsLXVwZGF0ZS1leGFtcGxlIj4KKyAgICogICA8ZmlsZSBu
YW1lPSJhcHAuanMiPgorICAgKiAgICAgYW5ndWxhci5tb2R1bGUoJ2NhbmNlbC11cGRhdGUtZXhh
bXBsZScsIFtdKQorICAgKgorICAgKiAgICAgLmNvbnRyb2xsZXIoJ0NhbmNlbFVwZGF0ZUNvbnRy
b2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkgeworICAgKiAgICAgICAkc2NvcGUu
cmVzZXRXaXRoQ2FuY2VsID0gZnVuY3Rpb24oZSkgeworICAgKiAgICAgICAgIGlmIChlLmtleUNv
ZGUgPT0gMjcpIHsKKyAgICogICAgICAgICAgICRzY29wZS5teUZvcm0ubXlJbnB1dDEuJHJvbGxi
YWNrVmlld1ZhbHVlKCk7CisgICAqICAgICAgICAgICAkc2NvcGUubXlWYWx1ZSA9ICcnOworICAg
KiAgICAgICAgIH0KKyAgICogICAgICAgfTsKKyAgICogICAgICAgJHNjb3BlLnJlc2V0V2l0aG91
dENhbmNlbCA9IGZ1bmN0aW9uKGUpIHsKKyAgICogICAgICAgICBpZiAoZS5rZXlDb2RlID09IDI3
KSB7CisgICAqICAgICAgICAgICAkc2NvcGUubXlWYWx1ZSA9ICcnOworICAgKiAgICAgICAgIH0K
KyAgICogICAgICAgfTsKKyAgICogICAgIH1dKTsKKyAgICogICA8L2ZpbGU+CisgICAqICAgPGZp
bGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAqICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9IkNhbmNl
bFVwZGF0ZUNvbnRyb2xsZXIiPgorICAgKiAgICAgICA8cD5UcnkgdHlwaW5nIHNvbWV0aGluZyBp
biBlYWNoIGlucHV0LiAgU2VlIHRoYXQgdGhlIG1vZGVsIG9ubHkgdXBkYXRlcyB3aGVuIHlvdQor
ICAgKiAgICAgICAgICBibHVyIG9mZiB0aGUgaW5wdXQuCisgICAqICAgICAgICA8L3A+CisgICAq
ICAgICAgICA8cD5Ob3cgc2VlIHdoYXQgaGFwcGVucyBpZiB5b3Ugc3RhcnQgdHlwaW5nIHRoZW4g
cHJlc3MgdGhlIEVzY2FwZSBrZXk8L3A+CisgICAqCisgICAqICAgICAgIDxmb3JtIG5hbWU9Im15
Rm9ybSIgbmctbW9kZWwtb3B0aW9ucz0ieyB1cGRhdGVPbjogJ2JsdXInIH0iPgorICAgKiAgICAg
ICAgIDxwIGlkPSJpbnB1dERlc2NyaXB0aW9uMSI+V2l0aCAkcm9sbGJhY2tWaWV3VmFsdWUoKTwv
cD4KKyAgICogICAgICAgICA8aW5wdXQgbmFtZT0ibXlJbnB1dDEiIGFyaWEtZGVzY3JpYmVkYnk9
ImlucHV0RGVzY3JpcHRpb24xIiBuZy1tb2RlbD0ibXlWYWx1ZSIKKyAgICogICAgICAgICAgICAg
ICAgbmcta2V5ZG93bj0icmVzZXRXaXRoQ2FuY2VsKCRldmVudCkiPjxici8+CisgICAqICAgICAg
ICAgbXlWYWx1ZTogInt7IG15VmFsdWUgfX0iCisgICAqCisgICAqICAgICAgICAgPHAgaWQ9Imlu
cHV0RGVzY3JpcHRpb24yIj5XaXRob3V0ICRyb2xsYmFja1ZpZXdWYWx1ZSgpPC9wPgorICAgKiAg
ICAgICAgIDxpbnB1dCBuYW1lPSJteUlucHV0MiIgYXJpYS1kZXNjcmliZWRieT0iaW5wdXREZXNj
cmlwdGlvbjIiIG5nLW1vZGVsPSJteVZhbHVlIgorICAgKiAgICAgICAgICAgICAgICBuZy1rZXlk
b3duPSJyZXNldFdpdGhvdXRDYW5jZWwoJGV2ZW50KSI+PGJyLz4KKyAgICogICAgICAgICBteVZh
bHVlOiAie3sgbXlWYWx1ZSB9fSIKKyAgICogICAgICAgPC9mb3JtPgorICAgKiAgICAgPC9kaXY+
CisgICAqICAgPC9maWxlPgorICAgKiA8L2V4YW1wbGU+CisgICAqLworICB0aGlzLiRyb2xsYmFj
a1ZpZXdWYWx1ZSA9IGZ1bmN0aW9uKCkgeworICAgICR0aW1lb3V0LmNhbmNlbChwZW5kaW5nRGVi
b3VuY2UpOworICAgIGN0cmwuJHZpZXdWYWx1ZSA9IGN0cmwuJCRsYXN0Q29tbWl0dGVkVmlld1Zh
bHVlOworICAgIGN0cmwuJHJlbmRlcigpOworICB9OworCisgIC8qKgorICAgKiBAbmdkb2MgbWV0
aG9kCisgICAqIEBuYW1lIG5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXIjJHZhbGlkYXRlCisgICAq
CisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBSdW5zIGVhY2ggb2YgdGhlIHJlZ2lzdGVyZWQgdmFs
aWRhdG9ycyAoZmlyc3Qgc3luY2hyb25vdXMgdmFsaWRhdG9ycyBhbmQgdGhlbgorICAgKiBhc3lu
Y2hyb25vdXMgdmFsaWRhdG9ycykuCisgICAqIElmIHRoZSB2YWxpZGl0eSBjaGFuZ2VzIHRvIGlu
dmFsaWQsIHRoZSBtb2RlbCB3aWxsIGJlIHNldCB0byBgdW5kZWZpbmVkYCwKKyAgICogdW5sZXNz
IHtAbGluayBuZ01vZGVsT3B0aW9ucyBgbmdNb2RlbE9wdGlvbnMuYWxsb3dJbnZhbGlkYH0gaXMg
YHRydWVgLgorICAgKiBJZiB0aGUgdmFsaWRpdHkgY2hhbmdlcyB0byB2YWxpZCwgaXQgd2lsbCBz
ZXQgdGhlIG1vZGVsIHRvIHRoZSBsYXN0IGF2YWlsYWJsZSB2YWxpZAorICAgKiBgJG1vZGVsVmFs
dWVgLCBpLmUuIGVpdGhlciB0aGUgbGFzdCBwYXJzZWQgdmFsdWUgb3IgdGhlIGxhc3QgdmFsdWUg
c2V0IGZyb20gdGhlIHNjb3BlLgorICAgKi8KKyAgdGhpcy4kdmFsaWRhdGUgPSBmdW5jdGlvbigp
IHsKKyAgICAvLyBpZ25vcmUgJHZhbGlkYXRlIGJlZm9yZSBtb2RlbCBpcyBpbml0aWFsaXplZAor
ICAgIGlmIChpc051bWJlcihjdHJsLiRtb2RlbFZhbHVlKSAmJiBpc05hTihjdHJsLiRtb2RlbFZh
bHVlKSkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciB2aWV3VmFsdWUgPSBjdHJs
LiQkbGFzdENvbW1pdHRlZFZpZXdWYWx1ZTsKKyAgICAvLyBOb3RlOiB3ZSB1c2UgdGhlICQkcmF3
TW9kZWxWYWx1ZSBhcyAkbW9kZWxWYWx1ZSBtaWdodCBoYXZlIGJlZW4KKyAgICAvLyBzZXQgdG8g
dW5kZWZpbmVkIGR1cmluZyBhIHZpZXcgLT4gbW9kZWwgdXBkYXRlIHRoYXQgZm91bmQgdmFsaWRh
dGlvbgorICAgIC8vIGVycm9ycy4gV2UgY2FuJ3QgcGFyc2UgdGhlIHZpZXcgaGVyZSwgc2luY2Ug
dGhhdCBjb3VsZCBjaGFuZ2UKKyAgICAvLyB0aGUgbW9kZWwgYWx0aG91Z2ggbmVpdGhlciB2aWV3
VmFsdWUgbm9yIHRoZSBtb2RlbCBvbiB0aGUgc2NvcGUgY2hhbmdlZAorICAgIHZhciBtb2RlbFZh
bHVlID0gY3RybC4kJHJhd01vZGVsVmFsdWU7CisKKyAgICB2YXIgcHJldlZhbGlkID0gY3RybC4k
dmFsaWQ7CisgICAgdmFyIHByZXZNb2RlbFZhbHVlID0gY3RybC4kbW9kZWxWYWx1ZTsKKworICAg
IHZhciBhbGxvd0ludmFsaWQgPSBjdHJsLiRvcHRpb25zICYmIGN0cmwuJG9wdGlvbnMuYWxsb3dJ
bnZhbGlkOworCisgICAgY3RybC4kJHJ1blZhbGlkYXRvcnMobW9kZWxWYWx1ZSwgdmlld1ZhbHVl
LCBmdW5jdGlvbihhbGxWYWxpZCkgeworICAgICAgLy8gSWYgdGhlcmUgd2FzIG5vIGNoYW5nZSBp
biB2YWxpZGl0eSwgZG9uJ3QgdXBkYXRlIHRoZSBtb2RlbAorICAgICAgLy8gVGhpcyBwcmV2ZW50
cyBjaGFuZ2luZyBhbiBpbnZhbGlkIG1vZGVsVmFsdWUgdG8gdW5kZWZpbmVkCisgICAgICBpZiAo
IWFsbG93SW52YWxpZCAmJiBwcmV2VmFsaWQgIT09IGFsbFZhbGlkKSB7CisgICAgICAgIC8vIE5v
dGU6IERvbid0IGNoZWNrIGN0cmwuJHZhbGlkIGhlcmUsIGFzIHdlIGNvdWxkIGhhdmUKKyAgICAg
ICAgLy8gZXh0ZXJuYWwgdmFsaWRhdG9ycyAoZS5nLiBjYWxjdWxhdGVkIG9uIHRoZSBzZXJ2ZXIp
LAorICAgICAgICAvLyB0aGF0IGp1c3QgY2FsbCAkc2V0VmFsaWRpdHkgYW5kIG5lZWQgdGhlIG1v
ZGVsIHZhbHVlCisgICAgICAgIC8vIHRvIGNhbGN1bGF0ZSB0aGVpciB2YWxpZGl0eS4KKyAgICAg
ICAgY3RybC4kbW9kZWxWYWx1ZSA9IGFsbFZhbGlkID8gbW9kZWxWYWx1ZSA6IHVuZGVmaW5lZDsK
KworICAgICAgICBpZiAoY3RybC4kbW9kZWxWYWx1ZSAhPT0gcHJldk1vZGVsVmFsdWUpIHsKKyAg
ICAgICAgICBjdHJsLiQkd3JpdGVNb2RlbFRvU2NvcGUoKTsKKyAgICAgICAgfQorICAgICAgfQor
ICAgIH0pOworCisgIH07CisKKyAgdGhpcy4kJHJ1blZhbGlkYXRvcnMgPSBmdW5jdGlvbihtb2Rl
bFZhbHVlLCB2aWV3VmFsdWUsIGRvbmVDYWxsYmFjaykgeworICAgIGN1cnJlbnRWYWxpZGF0aW9u
UnVuSWQrKzsKKyAgICB2YXIgbG9jYWxWYWxpZGF0aW9uUnVuSWQgPSBjdXJyZW50VmFsaWRhdGlv
blJ1bklkOworCisgICAgLy8gY2hlY2sgcGFyc2VyIGVycm9yCisgICAgaWYgKCFwcm9jZXNzUGFy
c2VFcnJvcnMoKSkgeworICAgICAgdmFsaWRhdGlvbkRvbmUoZmFsc2UpOworICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAoIXByb2Nlc3NTeW5jVmFsaWRhdG9ycygpKSB7CisgICAgICB2YWxp
ZGF0aW9uRG9uZShmYWxzZSk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIHByb2Nlc3NBc3lu
Y1ZhbGlkYXRvcnMoKTsKKworICAgIGZ1bmN0aW9uIHByb2Nlc3NQYXJzZUVycm9ycygpIHsKKyAg
ICAgIHZhciBlcnJvcktleSA9IGN0cmwuJCRwYXJzZXJOYW1lIHx8ICdwYXJzZSc7CisgICAgICBp
ZiAocGFyc2VyVmFsaWQgPT09IHVuZGVmaW5lZCkgeworICAgICAgICBzZXRWYWxpZGl0eShlcnJv
cktleSwgbnVsbCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAoIXBhcnNlclZhbGlkKSB7
CisgICAgICAgICAgZm9yRWFjaChjdHJsLiR2YWxpZGF0b3JzLCBmdW5jdGlvbih2LCBuYW1lKSB7
CisgICAgICAgICAgICBzZXRWYWxpZGl0eShuYW1lLCBudWxsKTsKKyAgICAgICAgICB9KTsKKyAg
ICAgICAgICBmb3JFYWNoKGN0cmwuJGFzeW5jVmFsaWRhdG9ycywgZnVuY3Rpb24odiwgbmFtZSkg
eworICAgICAgICAgICAgc2V0VmFsaWRpdHkobmFtZSwgbnVsbCk7CisgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gU2V0IHRoZSBwYXJzZSBlcnJvciBsYXN0LCB0byBwcmV2ZW50
IHVuc2V0dGluZyBpdCwgc2hvdWxkIGEgJHZhbGlkYXRvcnMga2V5ID09IHBhcnNlck5hbWUKKyAg
ICAgICAgc2V0VmFsaWRpdHkoZXJyb3JLZXksIHBhcnNlclZhbGlkKTsKKyAgICAgICAgcmV0dXJu
IHBhcnNlclZhbGlkOworICAgICAgfQorICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gcHJvY2Vzc1N5bmNWYWxpZGF0b3JzKCkgeworICAgICAgdmFyIHN5bmNWYWxpZGF0
b3JzVmFsaWQgPSB0cnVlOworICAgICAgZm9yRWFjaChjdHJsLiR2YWxpZGF0b3JzLCBmdW5jdGlv
bih2YWxpZGF0b3IsIG5hbWUpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IHZhbGlkYXRvcihtb2Rl
bFZhbHVlLCB2aWV3VmFsdWUpOworICAgICAgICBzeW5jVmFsaWRhdG9yc1ZhbGlkID0gc3luY1Zh
bGlkYXRvcnNWYWxpZCAmJiByZXN1bHQ7CisgICAgICAgIHNldFZhbGlkaXR5KG5hbWUsIHJlc3Vs
dCk7CisgICAgICB9KTsKKyAgICAgIGlmICghc3luY1ZhbGlkYXRvcnNWYWxpZCkgeworICAgICAg
ICBmb3JFYWNoKGN0cmwuJGFzeW5jVmFsaWRhdG9ycywgZnVuY3Rpb24odiwgbmFtZSkgeworICAg
ICAgICAgIHNldFZhbGlkaXR5KG5hbWUsIG51bGwpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgfQorICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gcHJvY2Vzc0FzeW5jVmFsaWRhdG9ycygpIHsKKyAgICAgIHZhciB2YWxpZGF0b3JQcm9t
aXNlcyA9IFtdOworICAgICAgdmFyIGFsbFZhbGlkID0gdHJ1ZTsKKyAgICAgIGZvckVhY2goY3Ry
bC4kYXN5bmNWYWxpZGF0b3JzLCBmdW5jdGlvbih2YWxpZGF0b3IsIG5hbWUpIHsKKyAgICAgICAg
dmFyIHByb21pc2UgPSB2YWxpZGF0b3IobW9kZWxWYWx1ZSwgdmlld1ZhbHVlKTsKKyAgICAgICAg
aWYgKCFpc1Byb21pc2VMaWtlKHByb21pc2UpKSB7CisgICAgICAgICAgdGhyb3cgJG5nTW9kZWxN
aW5FcnIoIiRhc3luY1ZhbGlkYXRvcnMiLAorICAgICAgICAgICAgIkV4cGVjdGVkIGFzeW5jaHJv
bm91cyB2YWxpZGF0b3IgdG8gcmV0dXJuIGEgcHJvbWlzZSBidXQgZ290ICd7MH0nIGluc3RlYWQu
IiwgcHJvbWlzZSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0VmFsaWRpdHkobmFtZSwgdW5kZWZp
bmVkKTsKKyAgICAgICAgdmFsaWRhdG9yUHJvbWlzZXMucHVzaChwcm9taXNlLnRoZW4oZnVuY3Rp
b24oKSB7CisgICAgICAgICAgc2V0VmFsaWRpdHkobmFtZSwgdHJ1ZSk7CisgICAgICAgIH0sIGZ1
bmN0aW9uKGVycm9yKSB7CisgICAgICAgICAgYWxsVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICBz
ZXRWYWxpZGl0eShuYW1lLCBmYWxzZSk7CisgICAgICAgIH0pKTsKKyAgICAgIH0pOworICAgICAg
aWYgKCF2YWxpZGF0b3JQcm9taXNlcy5sZW5ndGgpIHsKKyAgICAgICAgdmFsaWRhdGlvbkRvbmUo
dHJ1ZSk7CisgICAgICB9IGVsc2UgeworICAgICAgICAkcS5hbGwodmFsaWRhdG9yUHJvbWlzZXMp
LnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgICAgdmFsaWRhdGlvbkRvbmUoYWxsVmFsaWQpOwor
ICAgICAgICB9LCBub29wKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBzZXRWYWxp
ZGl0eShuYW1lLCBpc1ZhbGlkKSB7CisgICAgICBpZiAobG9jYWxWYWxpZGF0aW9uUnVuSWQgPT09
IGN1cnJlbnRWYWxpZGF0aW9uUnVuSWQpIHsKKyAgICAgICAgY3RybC4kc2V0VmFsaWRpdHkobmFt
ZSwgaXNWYWxpZCk7CisgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gdmFsaWRhdGlvbkRv
bmUoYWxsVmFsaWQpIHsKKyAgICAgIGlmIChsb2NhbFZhbGlkYXRpb25SdW5JZCA9PT0gY3VycmVu
dFZhbGlkYXRpb25SdW5JZCkgeworCisgICAgICAgIGRvbmVDYWxsYmFjayhhbGxWYWxpZCk7Cisg
ICAgICB9CisgICAgfQorICB9OworCisgIC8qKgorICAgKiBAbmdkb2MgbWV0aG9kCisgICAqIEBu
YW1lIG5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXIjJGNvbW1pdFZpZXdWYWx1ZQorICAgKgorICAg
KiBAZGVzY3JpcHRpb24KKyAgICogQ29tbWl0IGEgcGVuZGluZyB1cGRhdGUgdG8gdGhlIGAkbW9k
ZWxWYWx1ZWAuCisgICAqCisgICAqIFVwZGF0ZXMgbWF5IGJlIHBlbmRpbmcgYnkgYSBkZWJvdW5j
ZWQgZXZlbnQgb3IgYmVjYXVzZSB0aGUgaW5wdXQgaXMgd2FpdGluZyBmb3IgYSBzb21lIGZ1dHVy
ZQorICAgKiBldmVudCBkZWZpbmVkIGluIGBuZy1tb2RlbC1vcHRpb25zYC4gdGhpcyBtZXRob2Qg
aXMgcmFyZWx5IG5lZWRlZCBhcyBgTmdNb2RlbENvbnRyb2xsZXJgCisgICAqIHVzdWFsbHkgaGFu
ZGxlcyBjYWxsaW5nIHRoaXMgaW4gcmVzcG9uc2UgdG8gaW5wdXQgZXZlbnRzLgorICAgKi8KKyAg
dGhpcy4kY29tbWl0Vmlld1ZhbHVlID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHZpZXdWYWx1ZSA9
IGN0cmwuJHZpZXdWYWx1ZTsKKworICAgICR0aW1lb3V0LmNhbmNlbChwZW5kaW5nRGVib3VuY2Up
OworCisgICAgLy8gSWYgdGhlIHZpZXcgdmFsdWUgaGFzIG5vdCBjaGFuZ2VkIHRoZW4gd2Ugc2hv
dWxkIGp1c3QgZXhpdCwgZXhjZXB0IGluIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzCisgICAgLy8g
YSBuYXRpdmUgdmFsaWRhdG9yIG9uIHRoZSBlbGVtZW50LiBJbiB0aGlzIGNhc2UgdGhlIHZhbGlk
YXRpb24gc3RhdGUgbWF5IGhhdmUgY2hhbmdlZCBldmVuIHRob3VnaAorICAgIC8vIHRoZSB2aWV3
VmFsdWUgaGFzIHN0YXllZCBlbXB0eS4KKyAgICBpZiAoY3RybC4kJGxhc3RDb21taXR0ZWRWaWV3
VmFsdWUgPT09IHZpZXdWYWx1ZSAmJiAodmlld1ZhbHVlICE9PSAnJyB8fCAhY3RybC4kJGhhc05h
dGl2ZVZhbGlkYXRvcnMpKSB7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGN0cmwuJCRsYXN0
Q29tbWl0dGVkVmlld1ZhbHVlID0gdmlld1ZhbHVlOworCisgICAgLy8gY2hhbmdlIHRvIGRpcnR5
CisgICAgaWYgKGN0cmwuJHByaXN0aW5lKSB7CisgICAgICB0aGlzLiRzZXREaXJ0eSgpOworICAg
IH0KKyAgICB0aGlzLiQkcGFyc2VBbmRWYWxpZGF0ZSgpOworICB9OworCisgIHRoaXMuJCRwYXJz
ZUFuZFZhbGlkYXRlID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHZpZXdWYWx1ZSA9IGN0cmwuJCRs
YXN0Q29tbWl0dGVkVmlld1ZhbHVlOworICAgIHZhciBtb2RlbFZhbHVlID0gdmlld1ZhbHVlOwor
ICAgIHBhcnNlclZhbGlkID0gaXNVbmRlZmluZWQobW9kZWxWYWx1ZSkgPyB1bmRlZmluZWQgOiB0
cnVlOworCisgICAgaWYgKHBhcnNlclZhbGlkKSB7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGN0cmwuJHBhcnNlcnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgbW9kZWxWYWx1ZSA9IGN0cmwu
JHBhcnNlcnNbaV0obW9kZWxWYWx1ZSk7CisgICAgICAgIGlmIChpc1VuZGVmaW5lZChtb2RlbFZh
bHVlKSkgeworICAgICAgICAgIHBhcnNlclZhbGlkID0gZmFsc2U7CisgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgaWYgKGlzTnVtYmVyKGN0cmwuJG1vZGVs
VmFsdWUpICYmIGlzTmFOKGN0cmwuJG1vZGVsVmFsdWUpKSB7CisgICAgICAvLyBjdHJsLiRtb2Rl
bFZhbHVlIGhhcyBub3QgYmVlbiB0b3VjaGVkIHlldC4uLgorICAgICAgY3RybC4kbW9kZWxWYWx1
ZSA9IG5nTW9kZWxHZXQoJHNjb3BlKTsKKyAgICB9CisgICAgdmFyIHByZXZNb2RlbFZhbHVlID0g
Y3RybC4kbW9kZWxWYWx1ZTsKKyAgICB2YXIgYWxsb3dJbnZhbGlkID0gY3RybC4kb3B0aW9ucyAm
JiBjdHJsLiRvcHRpb25zLmFsbG93SW52YWxpZDsKKyAgICBjdHJsLiQkcmF3TW9kZWxWYWx1ZSA9
IG1vZGVsVmFsdWU7CisKKyAgICBpZiAoYWxsb3dJbnZhbGlkKSB7CisgICAgICBjdHJsLiRtb2Rl
bFZhbHVlID0gbW9kZWxWYWx1ZTsKKyAgICAgIHdyaXRlVG9Nb2RlbElmTmVlZGVkKCk7CisgICAg
fQorCisgICAgLy8gUGFzcyB0aGUgJCRsYXN0Q29tbWl0dGVkVmlld1ZhbHVlIGhlcmUsIGJlY2F1
c2UgdGhlIGNhY2hlZCB2aWV3VmFsdWUgbWlnaHQgYmUgb3V0IG9mIGRhdGUuCisgICAgLy8gVGhp
cyBjYW4gaGFwcGVuIGlmIGUuZy4gJHNldFZpZXdWYWx1ZSBpcyBjYWxsZWQgZnJvbSBpbnNpZGUg
YSBwYXJzZXIKKyAgICBjdHJsLiQkcnVuVmFsaWRhdG9ycyhtb2RlbFZhbHVlLCBjdHJsLiQkbGFz
dENvbW1pdHRlZFZpZXdWYWx1ZSwgZnVuY3Rpb24oYWxsVmFsaWQpIHsKKyAgICAgIGlmICghYWxs
b3dJbnZhbGlkKSB7CisgICAgICAgIC8vIE5vdGU6IERvbid0IGNoZWNrIGN0cmwuJHZhbGlkIGhl
cmUsIGFzIHdlIGNvdWxkIGhhdmUKKyAgICAgICAgLy8gZXh0ZXJuYWwgdmFsaWRhdG9ycyAoZS5n
LiBjYWxjdWxhdGVkIG9uIHRoZSBzZXJ2ZXIpLAorICAgICAgICAvLyB0aGF0IGp1c3QgY2FsbCAk
c2V0VmFsaWRpdHkgYW5kIG5lZWQgdGhlIG1vZGVsIHZhbHVlCisgICAgICAgIC8vIHRvIGNhbGN1
bGF0ZSB0aGVpciB2YWxpZGl0eS4KKyAgICAgICAgY3RybC4kbW9kZWxWYWx1ZSA9IGFsbFZhbGlk
ID8gbW9kZWxWYWx1ZSA6IHVuZGVmaW5lZDsKKyAgICAgICAgd3JpdGVUb01vZGVsSWZOZWVkZWQo
KTsKKyAgICAgIH0KKyAgICB9KTsKKworICAgIGZ1bmN0aW9uIHdyaXRlVG9Nb2RlbElmTmVlZGVk
KCkgeworICAgICAgaWYgKGN0cmwuJG1vZGVsVmFsdWUgIT09IHByZXZNb2RlbFZhbHVlKSB7Cisg
ICAgICAgIGN0cmwuJCR3cml0ZU1vZGVsVG9TY29wZSgpOworICAgICAgfQorICAgIH0KKyAgfTsK
KworICB0aGlzLiQkd3JpdGVNb2RlbFRvU2NvcGUgPSBmdW5jdGlvbigpIHsKKyAgICBuZ01vZGVs
U2V0KCRzY29wZSwgY3RybC4kbW9kZWxWYWx1ZSk7CisgICAgZm9yRWFjaChjdHJsLiR2aWV3Q2hh
bmdlTGlzdGVuZXJzLCBmdW5jdGlvbihsaXN0ZW5lcikgeworICAgICAgdHJ5IHsKKyAgICAgICAg
bGlzdGVuZXIoKTsKKyAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgJGV4Y2VwdGlvbkhhbmRs
ZXIoZSk7CisgICAgICB9CisgICAgfSk7CisgIH07CisKKyAgLyoqCisgICAqIEBuZ2RvYyBtZXRo
b2QKKyAgICogQG5hbWUgbmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlciMkc2V0Vmlld1ZhbHVlCisg
ICAqCisgICAqIEBkZXNjcmlwdGlvbgorICAgKiBVcGRhdGUgdGhlIHZpZXcgdmFsdWUuCisgICAq
CisgICAqIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBhbiBpbnB1dCBkaXJlY3Rp
dmUgd2FudCB0byBjaGFuZ2UgdGhlIHZpZXcgdmFsdWU7IHR5cGljYWxseSwKKyAgICogdGhpcyBp
cyBkb25lIGZyb20gd2l0aGluIGEgRE9NIGV2ZW50IGhhbmRsZXIuCisgICAqCisgICAqIEZvciBl
eGFtcGxlIHtAbGluayBuZy5kaXJlY3RpdmU6aW5wdXQgaW5wdXR9IGNhbGxzIGl0IHdoZW4gdGhl
IHZhbHVlIG9mIHRoZSBpbnB1dCBjaGFuZ2VzIGFuZAorICAgKiB7QGxpbmsgbmcuZGlyZWN0aXZl
OnNlbGVjdCBzZWxlY3R9IGNhbGxzIGl0IHdoZW4gYW4gb3B0aW9uIGlzIHNlbGVjdGVkLgorICAg
KgorICAgKiBJZiB0aGUgbmV3IGB2YWx1ZWAgaXMgYW4gb2JqZWN0IChyYXRoZXIgdGhhbiBhIHN0
cmluZyBvciBhIG51bWJlciksIHdlIHNob3VsZCBtYWtlIGEgY29weSBvZiB0aGUKKyAgICogb2Jq
ZWN0IGJlZm9yZSBwYXNzaW5nIGl0IHRvIGAkc2V0Vmlld1ZhbHVlYC4gIFRoaXMgaXMgYmVjYXVz
ZSBgbmdNb2RlbGAgZG9lcyBub3QgcGVyZm9ybSBhIGRlZXAKKyAgICogd2F0Y2ggb2Ygb2JqZWN0
cywgaXQgb25seSBsb29rcyBmb3IgYSBjaGFuZ2Ugb2YgaWRlbnRpdHkuIElmIHlvdSBvbmx5IGNo
YW5nZSB0aGUgcHJvcGVydHkgb2YKKyAgICogdGhlIG9iamVjdCB0aGVuIG5nTW9kZWwgd2lsbCBu
b3QgcmVhbGlzZSB0aGF0IHRoZSBvYmplY3QgaGFzIGNoYW5nZWQgYW5kIHdpbGwgbm90IGludm9r
ZSB0aGUKKyAgICogYCRwYXJzZXJzYCBhbmQgYCR2YWxpZGF0b3JzYCBwaXBlbGluZXMuCisgICAq
CisgICAqIEZvciB0aGlzIHJlYXNvbiwgeW91IHNob3VsZCBub3QgY2hhbmdlIHByb3BlcnRpZXMg
b2YgdGhlIGNvcHkgb25jZSBpdCBoYXMgYmVlbiBwYXNzZWQgdG8KKyAgICogYCRzZXRWaWV3VmFs
dWVgLiBPdGhlcndpc2UgeW91IG1heSBjYXVzZSB0aGUgbW9kZWwgdmFsdWUgb24gdGhlIHNjb3Bl
IHRvIGNoYW5nZSBpbmNvcnJlY3RseS4KKyAgICoKKyAgICogV2hlbiB0aGlzIG1ldGhvZCBpcyBj
YWxsZWQsIHRoZSBuZXcgYHZhbHVlYCB3aWxsIGJlIHN0YWdlZCBmb3IgY29tbWl0dGluZyB0aHJv
dWdoIHRoZSBgJHBhcnNlcnNgCisgICAqIGFuZCBgJHZhbGlkYXRvcnNgIHBpcGVsaW5lcy4gSWYg
dGhlcmUgYXJlIG5vIHNwZWNpYWwge0BsaW5rIG5nTW9kZWxPcHRpb25zfSBzcGVjaWZpZWQgdGhl
biB0aGUgc3RhZ2VkCisgICAqIHZhbHVlIHNlbnQgZGlyZWN0bHkgZm9yIHByb2Nlc3NpbmcsIGZp
bmFsbHkgdG8gYmUgYXBwbGllZCB0byBgJG1vZGVsVmFsdWVgIGFuZCB0aGVuIHRoZQorICAgKiAq
KmV4cHJlc3Npb24qKiBzcGVjaWZpZWQgaW4gdGhlIGBuZy1tb2RlbGAgYXR0cmlidXRlLgorICAg
KgorICAgKiBMYXN0bHksIGFsbCB0aGUgcmVnaXN0ZXJlZCBjaGFuZ2UgbGlzdGVuZXJzLCBpbiB0
aGUgYCR2aWV3Q2hhbmdlTGlzdGVuZXJzYCBsaXN0LCBhcmUgY2FsbGVkLgorICAgKgorICAgKiBJ
biBjYXNlIHRoZSB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nTW9kZWxPcHRpb25zIG5nTW9kZWxPcHRp
b25zfSBkaXJlY3RpdmUgaXMgdXNlZCB3aXRoIGB1cGRhdGVPbmAKKyAgICogYW5kIHRoZSBgZGVm
YXVsdGAgdHJpZ2dlciBpcyBub3QgbGlzdGVkLCBhbGwgdGhvc2UgYWN0aW9ucyB3aWxsIHJlbWFp
biBwZW5kaW5nIHVudGlsIG9uZSBvZiB0aGUKKyAgICogYHVwZGF0ZU9uYCBldmVudHMgaXMgdHJp
Z2dlcmVkIG9uIHRoZSBET00gZWxlbWVudC4KKyAgICogQWxsIHRoZXNlIGFjdGlvbnMgd2lsbCBi
ZSBkZWJvdW5jZWQgaWYgdGhlIHtAbGluayBuZy5kaXJlY3RpdmU6bmdNb2RlbE9wdGlvbnMgbmdN
b2RlbE9wdGlvbnN9CisgICAqIGRpcmVjdGl2ZSBpcyB1c2VkIHdpdGggYSBjdXN0b20gZGVib3Vu
Y2UgZm9yIHRoaXMgcGFydGljdWxhciBldmVudC4KKyAgICoKKyAgICogTm90ZSB0aGF0IGNhbGxp
bmcgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0cmlnZ2VyIGEgYCRkaWdlc3RgLgorICAgKgorICAg
KiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgVmFsdWUgZnJvbSB0aGUgdmlldy4KKyAgICogQHBhcmFt
IHtzdHJpbmd9IHRyaWdnZXIgRXZlbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIHVwZGF0ZS4KKyAgICov
CisgIHRoaXMuJHNldFZpZXdWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlLCB0cmlnZ2VyKSB7CisgICAg
Y3RybC4kdmlld1ZhbHVlID0gdmFsdWU7CisgICAgaWYgKCFjdHJsLiRvcHRpb25zIHx8IGN0cmwu
JG9wdGlvbnMudXBkYXRlT25EZWZhdWx0KSB7CisgICAgICBjdHJsLiQkZGVib3VuY2VWaWV3VmFs
dWVDb21taXQodHJpZ2dlcik7CisgICAgfQorICB9OworCisgIHRoaXMuJCRkZWJvdW5jZVZpZXdW
YWx1ZUNvbW1pdCA9IGZ1bmN0aW9uKHRyaWdnZXIpIHsKKyAgICB2YXIgZGVib3VuY2VEZWxheSA9
IDAsCisgICAgICAgIG9wdGlvbnMgPSBjdHJsLiRvcHRpb25zLAorICAgICAgICBkZWJvdW5jZTsK
KworICAgIGlmIChvcHRpb25zICYmIGlzRGVmaW5lZChvcHRpb25zLmRlYm91bmNlKSkgeworICAg
ICAgZGVib3VuY2UgPSBvcHRpb25zLmRlYm91bmNlOworICAgICAgaWYgKGlzTnVtYmVyKGRlYm91
bmNlKSkgeworICAgICAgICBkZWJvdW5jZURlbGF5ID0gZGVib3VuY2U7CisgICAgICB9IGVsc2Ug
aWYgKGlzTnVtYmVyKGRlYm91bmNlW3RyaWdnZXJdKSkgeworICAgICAgICBkZWJvdW5jZURlbGF5
ID0gZGVib3VuY2VbdHJpZ2dlcl07CisgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyKGRlYm91bmNl
WydkZWZhdWx0J10pKSB7CisgICAgICAgIGRlYm91bmNlRGVsYXkgPSBkZWJvdW5jZVsnZGVmYXVs
dCddOworICAgICAgfQorICAgIH0KKworICAgICR0aW1lb3V0LmNhbmNlbChwZW5kaW5nRGVib3Vu
Y2UpOworICAgIGlmIChkZWJvdW5jZURlbGF5KSB7CisgICAgICBwZW5kaW5nRGVib3VuY2UgPSAk
dGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgY3RybC4kY29tbWl0Vmlld1ZhbHVlKCk7Cisg
ICAgICB9LCBkZWJvdW5jZURlbGF5KTsKKyAgICB9IGVsc2UgaWYgKCRyb290U2NvcGUuJCRwaGFz
ZSkgeworICAgICAgY3RybC4kY29tbWl0Vmlld1ZhbHVlKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICRzY29wZS4kYXBwbHkoZnVuY3Rpb24oKSB7CisgICAgICAgIGN0cmwuJGNvbW1pdFZpZXdWYWx1
ZSgpOworICAgICAgfSk7CisgICAgfQorICB9OworCisgIC8vIG1vZGVsIC0+IHZhbHVlCisgIC8v
IE5vdGU6IHdlIGNhbm5vdCB1c2UgYSBub3JtYWwgc2NvcGUuJHdhdGNoIGFzIHdlIHdhbnQgdG8g
ZGV0ZWN0IHRoZSBmb2xsb3dpbmc6CisgIC8vIDEuIHNjb3BlIHZhbHVlIGlzICdhJworICAvLyAy
LiB1c2VyIGVudGVycyAnYicKKyAgLy8gMy4gbmctY2hhbmdlIGtpY2tzIGluIGFuZCByZXZlcnRz
IHNjb3BlIHZhbHVlIHRvICdhJworICAvLyAgICAtPiBzY29wZSB2YWx1ZSBkaWQgbm90IGNoYW5n
ZSBzaW5jZSB0aGUgbGFzdCBkaWdlc3QgYXMKKyAgLy8gICAgICAgbmctY2hhbmdlIGV4ZWN1dGVz
IGluIGFwcGx5IHBoYXNlCisgIC8vIDQuIHZpZXcgc2hvdWxkIGJlIGNoYW5nZWQgYmFjayB0byAn
YScKKyAgJHNjb3BlLiR3YXRjaChmdW5jdGlvbiBuZ01vZGVsV2F0Y2goKSB7CisgICAgdmFyIG1v
ZGVsVmFsdWUgPSBuZ01vZGVsR2V0KCRzY29wZSk7CisKKyAgICAvLyBpZiBzY29wZSBtb2RlbCB2
YWx1ZSBhbmQgbmdNb2RlbCB2YWx1ZSBhcmUgb3V0IG9mIHN5bmMKKyAgICAvLyBUT0RPKHBlcmYp
OiB3aHkgbm90IG1vdmUgdGhpcyB0byB0aGUgYWN0aW9uIGZuPworICAgIGlmIChtb2RlbFZhbHVl
ICE9PSBjdHJsLiRtb2RlbFZhbHVlICYmCisgICAgICAgLy8gY2hlY2tzIGZvciBOYU4gaXMgbmVl
ZGVkIHRvIGFsbG93IHNldHRpbmcgdGhlIG1vZGVsIHRvIE5hTiB3aGVuIHRoZXJlJ3MgYW4gYXN5
bmNWYWxpZGF0b3IKKyAgICAgICAoY3RybC4kbW9kZWxWYWx1ZSA9PT0gY3RybC4kbW9kZWxWYWx1
ZSB8fCBtb2RlbFZhbHVlID09PSBtb2RlbFZhbHVlKQorICAgICkgeworICAgICAgY3RybC4kbW9k
ZWxWYWx1ZSA9IGN0cmwuJCRyYXdNb2RlbFZhbHVlID0gbW9kZWxWYWx1ZTsKKyAgICAgIHBhcnNl
clZhbGlkID0gdW5kZWZpbmVkOworCisgICAgICB2YXIgZm9ybWF0dGVycyA9IGN0cmwuJGZvcm1h
dHRlcnMsCisgICAgICAgICAgaWR4ID0gZm9ybWF0dGVycy5sZW5ndGg7CisKKyAgICAgIHZhciB2
aWV3VmFsdWUgPSBtb2RlbFZhbHVlOworICAgICAgd2hpbGUgKGlkeC0tKSB7CisgICAgICAgIHZp
ZXdWYWx1ZSA9IGZvcm1hdHRlcnNbaWR4XSh2aWV3VmFsdWUpOworICAgICAgfQorICAgICAgaWYg
KGN0cmwuJHZpZXdWYWx1ZSAhPT0gdmlld1ZhbHVlKSB7CisgICAgICAgIGN0cmwuJHZpZXdWYWx1
ZSA9IGN0cmwuJCRsYXN0Q29tbWl0dGVkVmlld1ZhbHVlID0gdmlld1ZhbHVlOworICAgICAgICBj
dHJsLiRyZW5kZXIoKTsKKworICAgICAgICBjdHJsLiQkcnVuVmFsaWRhdG9ycyhtb2RlbFZhbHVl
LCB2aWV3VmFsdWUsIG5vb3ApOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBtb2RlbFZh
bHVlOworICB9KTsKK31dOworCisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUg
bmdNb2RlbAorICoKKyAqIEBlbGVtZW50IGlucHV0CisgKiBAcHJpb3JpdHkgMQorICoKKyAqIEBk
ZXNjcmlwdGlvbgorICogVGhlIGBuZ01vZGVsYCBkaXJlY3RpdmUgYmluZHMgYW4gYGlucHV0YCxg
c2VsZWN0YCwgYHRleHRhcmVhYCAob3IgY3VzdG9tIGZvcm0gY29udHJvbCkgdG8gYQorICogcHJv
cGVydHkgb24gdGhlIHNjb3BlIHVzaW5nIHtAbGluayBuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVy
IE5nTW9kZWxDb250cm9sbGVyfSwKKyAqIHdoaWNoIGlzIGNyZWF0ZWQgYW5kIGV4cG9zZWQgYnkg
dGhpcyBkaXJlY3RpdmUuCisgKgorICogYG5nTW9kZWxgIGlzIHJlc3BvbnNpYmxlIGZvcjoKKyAq
CisgKiAtIEJpbmRpbmcgdGhlIHZpZXcgaW50byB0aGUgbW9kZWwsIHdoaWNoIG90aGVyIGRpcmVj
dGl2ZXMgc3VjaCBhcyBgaW5wdXRgLCBgdGV4dGFyZWFgIG9yIGBzZWxlY3RgCisgKiAgIHJlcXVp
cmUuCisgKiAtIFByb3ZpZGluZyB2YWxpZGF0aW9uIGJlaGF2aW9yIChpLmUuIHJlcXVpcmVkLCBu
dW1iZXIsIGVtYWlsLCB1cmwpLgorICogLSBLZWVwaW5nIHRoZSBzdGF0ZSBvZiB0aGUgY29udHJv
bCAodmFsaWQvaW52YWxpZCwgZGlydHkvcHJpc3RpbmUsIHRvdWNoZWQvdW50b3VjaGVkLCB2YWxp
ZGF0aW9uIGVycm9ycykuCisgKiAtIFNldHRpbmcgcmVsYXRlZCBjc3MgY2xhc3NlcyBvbiB0aGUg
ZWxlbWVudCAoYG5nLXZhbGlkYCwgYG5nLWludmFsaWRgLCBgbmctZGlydHlgLCBgbmctcHJpc3Rp
bmVgLCBgbmctdG91Y2hlZGAsIGBuZy11bnRvdWNoZWRgKSBpbmNsdWRpbmcgYW5pbWF0aW9ucy4K
KyAqIC0gUmVnaXN0ZXJpbmcgdGhlIGNvbnRyb2wgd2l0aCBpdHMgcGFyZW50IHtAbGluayBuZy5k
aXJlY3RpdmU6Zm9ybSBmb3JtfS4KKyAqCisgKiBOb3RlOiBgbmdNb2RlbGAgd2lsbCB0cnkgdG8g
YmluZCB0byB0aGUgcHJvcGVydHkgZ2l2ZW4gYnkgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbiBv
biB0aGUKKyAqIGN1cnJlbnQgc2NvcGUuIElmIHRoZSBwcm9wZXJ0eSBkb2Vzbid0IGFscmVhZHkg
ZXhpc3Qgb24gdGhpcyBzY29wZSwgaXQgd2lsbCBiZSBjcmVhdGVkCisgKiBpbXBsaWNpdGx5IGFu
ZCBhZGRlZCB0byB0aGUgc2NvcGUuCisgKgorICogRm9yIGJlc3QgcHJhY3RpY2VzIG9uIHVzaW5n
IGBuZ01vZGVsYCwgc2VlOgorICoKKyAqICAtIFtVbmRlcnN0YW5kaW5nIFNjb3Blc10oaHR0cHM6
Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci5qcy93aWtpL1VuZGVyc3RhbmRpbmctU2NvcGVz
KQorICoKKyAqIEZvciBiYXNpYyBleGFtcGxlcywgaG93IHRvIHVzZSBgbmdNb2RlbGAsIHNlZToK
KyAqCisgKiAgLSB7QGxpbmsgbmcuZGlyZWN0aXZlOmlucHV0IGlucHV0fQorICogICAgLSB7QGxp
bmsgaW5wdXRbdGV4dF0gdGV4dH0KKyAqICAgIC0ge0BsaW5rIGlucHV0W2NoZWNrYm94XSBjaGVj
a2JveH0KKyAqICAgIC0ge0BsaW5rIGlucHV0W3JhZGlvXSByYWRpb30KKyAqICAgIC0ge0BsaW5r
IGlucHV0W251bWJlcl0gbnVtYmVyfQorICogICAgLSB7QGxpbmsgaW5wdXRbZW1haWxdIGVtYWls
fQorICogICAgLSB7QGxpbmsgaW5wdXRbdXJsXSB1cmx9CisgKiAgICAtIHtAbGluayBpbnB1dFtk
YXRlXSBkYXRlfQorICogICAgLSB7QGxpbmsgaW5wdXRbZGF0ZXRpbWUtbG9jYWxdIGRhdGV0aW1l
LWxvY2FsfQorICogICAgLSB7QGxpbmsgaW5wdXRbdGltZV0gdGltZX0KKyAqICAgIC0ge0BsaW5r
IGlucHV0W21vbnRoXSBtb250aH0KKyAqICAgIC0ge0BsaW5rIGlucHV0W3dlZWtdIHdlZWt9Cisg
KiAgLSB7QGxpbmsgbmcuZGlyZWN0aXZlOnNlbGVjdCBzZWxlY3R9CisgKiAgLSB7QGxpbmsgbmcu
ZGlyZWN0aXZlOnRleHRhcmVhIHRleHRhcmVhfQorICoKKyAqICMgQ1NTIGNsYXNzZXMKKyAqIFRo
ZSBmb2xsb3dpbmcgQ1NTIGNsYXNzZXMgYXJlIGFkZGVkIGFuZCByZW1vdmVkIG9uIHRoZSBhc3Nv
Y2lhdGVkIGlucHV0L3NlbGVjdC90ZXh0YXJlYSBlbGVtZW50CisgKiBkZXBlbmRpbmcgb24gdGhl
IHZhbGlkaXR5IG9mIHRoZSBtb2RlbC4KKyAqCisgKiAgLSBgbmctdmFsaWRgOiB0aGUgbW9kZWwg
aXMgdmFsaWQKKyAqICAtIGBuZy1pbnZhbGlkYDogdGhlIG1vZGVsIGlzIGludmFsaWQKKyAqICAt
IGBuZy12YWxpZC1ba2V5XWA6IGZvciBlYWNoIHZhbGlkIGtleSBhZGRlZCBieSBgJHNldFZhbGlk
aXR5YAorICogIC0gYG5nLWludmFsaWQtW2tleV1gOiBmb3IgZWFjaCBpbnZhbGlkIGtleSBhZGRl
ZCBieSBgJHNldFZhbGlkaXR5YAorICogIC0gYG5nLXByaXN0aW5lYDogdGhlIGNvbnRyb2wgaGFz
bid0IGJlZW4gaW50ZXJhY3RlZCB3aXRoIHlldAorICogIC0gYG5nLWRpcnR5YDogdGhlIGNvbnRy
b2wgaGFzIGJlZW4gaW50ZXJhY3RlZCB3aXRoCisgKiAgLSBgbmctdG91Y2hlZGA6IHRoZSBjb250
cm9sIGhhcyBiZWVuIGJsdXJyZWQKKyAqICAtIGBuZy11bnRvdWNoZWRgOiB0aGUgY29udHJvbCBo
YXNuJ3QgYmVlbiBibHVycmVkCisgKiAgLSBgbmctcGVuZGluZ2A6IGFueSBgJGFzeW5jVmFsaWRh
dG9yc2AgYXJlIHVuZnVsZmlsbGVkCisgKgorICogS2VlcCBpbiBtaW5kIHRoYXQgbmdBbmltYXRl
IGNhbiBkZXRlY3QgZWFjaCBvZiB0aGVzZSBjbGFzc2VzIHdoZW4gYWRkZWQgYW5kIHJlbW92ZWQu
CisgKgorICogIyMgQW5pbWF0aW9uIEhvb2tzCisgKgorICogQW5pbWF0aW9ucyB3aXRoaW4gbW9k
ZWxzIGFyZSB0cmlnZ2VyZWQgd2hlbiBhbnkgb2YgdGhlIGFzc29jaWF0ZWQgQ1NTIGNsYXNzZXMg
YXJlIGFkZGVkIGFuZCByZW1vdmVkCisgKiBvbiB0aGUgaW5wdXQgZWxlbWVudCB3aGljaCBpcyBh
dHRhY2hlZCB0byB0aGUgbW9kZWwuIFRoZXNlIGNsYXNzZXMgYXJlOiBgLm5nLXByaXN0aW5lYCwg
YC5uZy1kaXJ0eWAsCisgKiBgLm5nLWludmFsaWRgIGFuZCBgLm5nLXZhbGlkYCBhcyB3ZWxsIGFz
IGFueSBvdGhlciB2YWxpZGF0aW9ucyB0aGF0IGFyZSBwZXJmb3JtZWQgb24gdGhlIG1vZGVsIGl0
c2VsZi4KKyAqIFRoZSBhbmltYXRpb25zIHRoYXQgYXJlIHRyaWdnZXJlZCB3aXRoaW4gbmdNb2Rl
bCBhcmUgc2ltaWxhciB0byBob3cgdGhleSB3b3JrIGluIG5nQ2xhc3MgYW5kCisgKiBhbmltYXRp
b25zIGNhbiBiZSBob29rZWQgaW50byB1c2luZyBDU1MgdHJhbnNpdGlvbnMsIGtleWZyYW1lcyBh
cyB3ZWxsIGFzIEpTIGFuaW1hdGlvbnMuCisgKgorICogVGhlIGZvbGxvd2luZyBleGFtcGxlIHNo
b3dzIGEgc2ltcGxlIHdheSB0byB1dGlsaXplIENTUyB0cmFuc2l0aW9ucyB0byBzdHlsZSBhbiBp
bnB1dCBlbGVtZW50CisgKiB0aGF0IGhhcyBiZWVuIHJlbmRlcmVkIGFzIGludmFsaWQgYWZ0ZXIg
aXQgaGFzIGJlZW4gdmFsaWRhdGVkOgorICoKKyAqIDxwcmU+CisgKiAvL2JlIHN1cmUgdG8gaW5j
bHVkZSBuZ0FuaW1hdGUgYXMgYSBtb2R1bGUgdG8gaG9vayBpbnRvIG1vcmUKKyAqIC8vYWR2YW5j
ZWQgYW5pbWF0aW9ucworICogLm15LWlucHV0IHsKKyAqICAgdHJhbnNpdGlvbjowLjVzIGxpbmVh
ciBhbGw7CisgKiAgIGJhY2tncm91bmQ6IHdoaXRlOworICogfQorICogLm15LWlucHV0Lm5nLWlu
dmFsaWQgeworICogICBiYWNrZ3JvdW5kOiByZWQ7CisgKiAgIGNvbG9yOndoaXRlOworICogfQor
ICogPC9wcmU+CisgKgorICogQGV4YW1wbGUKKyAqIDxleGFtcGxlIGRlcHM9ImFuZ3VsYXItYW5p
bWF0ZS5qcyIgYW5pbWF0aW9ucz0idHJ1ZSIgZml4QmFzZT0idHJ1ZSIgbW9kdWxlPSJpbnB1dEV4
YW1wbGUiPgorICAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgICA8c2NyaXB0Pgor
ICAgICAgICBhbmd1bGFyLm1vZHVsZSgnaW5wdXRFeGFtcGxlJywgW10pCisgICAgICAgICAgLmNv
bnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUp
IHsKKyAgICAgICAgICAgICRzY29wZS52YWwgPSAnMSc7CisgICAgICAgICAgfV0pOworICAgICAg
IDwvc2NyaXB0PgorICAgICAgIDxzdHlsZT4KKyAgICAgICAgIC5teS1pbnB1dCB7CisgICAgICAg
ICAgIC13ZWJraXQtdHJhbnNpdGlvbjphbGwgbGluZWFyIDAuNXM7CisgICAgICAgICAgIHRyYW5z
aXRpb246YWxsIGxpbmVhciAwLjVzOworICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVu
dDsKKyAgICAgICAgIH0KKyAgICAgICAgIC5teS1pbnB1dC5uZy1pbnZhbGlkIHsKKyAgICAgICAg
ICAgY29sb3I6d2hpdGU7CisgICAgICAgICAgIGJhY2tncm91bmQ6IHJlZDsKKyAgICAgICAgIH0K
KyAgICAgICA8L3N0eWxlPgorICAgICAgIDxwIGlkPSJpbnB1dERlc2NyaXB0aW9uIj4KKyAgICAg
ICAgVXBkYXRlIGlucHV0IHRvIHNlZSB0cmFuc2l0aW9ucyB3aGVuIHZhbGlkL2ludmFsaWQuCisg
ICAgICAgIEludGVnZXIgaXMgYSB2YWxpZCB2YWx1ZS4KKyAgICAgICA8L3A+CisgICAgICAgPGZv
cm0gbmFtZT0idGVzdEZvcm0iIG5nLWNvbnRyb2xsZXI9IkV4YW1wbGVDb250cm9sbGVyIj4KKyAg
ICAgICAgIDxpbnB1dCBuZy1tb2RlbD0idmFsIiBuZy1wYXR0ZXJuPSIvXlxkKyQvIiBuYW1lPSJh
bmltIiBjbGFzcz0ibXktaW5wdXQiCisgICAgICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT0i
aW5wdXREZXNjcmlwdGlvbiIgLz4KKyAgICAgICA8L2Zvcm0+CisgICAgIDwvZmlsZT4KKyAqIDwv
ZXhhbXBsZT4KKyAqCisgKiAjIyBCaW5kaW5nIHRvIGEgZ2V0dGVyL3NldHRlcgorICoKKyAqIFNv
bWV0aW1lcyBpdCdzIGhlbHBmdWwgdG8gYmluZCBgbmdNb2RlbGAgdG8gYSBnZXR0ZXIvc2V0dGVy
IGZ1bmN0aW9uLiAgQSBnZXR0ZXIvc2V0dGVyIGlzIGEKKyAqIGZ1bmN0aW9uIHRoYXQgcmV0dXJu
cyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCB3aGVuIGNhbGxlZCB3aXRoIHplcm8gYXJn
dW1lbnRzLCBhbmQgc2V0cworICogdGhlIGludGVybmFsIHN0YXRlIG9mIGEgbW9kZWwgd2hlbiBj
YWxsZWQgd2l0aCBhbiBhcmd1bWVudC4gSXQncyBzb21ldGltZXMgdXNlZnVsIHRvIHVzZSB0aGlz
CisgKiBmb3IgbW9kZWxzIHRoYXQgaGF2ZSBhbiBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiB0aGF0
J3MgZGlmZmVyZW50IGZyb20gd2hhdCB0aGUgbW9kZWwgZXhwb3NlcworICogdG8gdGhlIHZpZXcu
CisgKgorICogPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtc3VjY2VzcyI+CisgKiAqKkJlc3QgUHJh
Y3RpY2U6KiogSXQncyBiZXN0IHRvIGtlZXAgZ2V0dGVycyBmYXN0IGJlY2F1c2UgQW5ndWxhciBp
cyBsaWtlbHkgdG8gY2FsbCB0aGVtIG1vcmUKKyAqIGZyZXF1ZW50bHkgdGhhbiBvdGhlciBwYXJ0
cyBvZiB5b3VyIGNvZGUuCisgKiA8L2Rpdj4KKyAqCisgKiBZb3UgdXNlIHRoaXMgYmVoYXZpb3Ig
YnkgYWRkaW5nIGBuZy1tb2RlbC1vcHRpb25zPSJ7IGdldHRlclNldHRlcjogdHJ1ZSB9ImAgdG8g
YW4gZWxlbWVudCB0aGF0CisgKiBoYXMgYG5nLW1vZGVsYCBhdHRhY2hlZCB0byBpdC4gWW91IGNh
biBhbHNvIGFkZCBgbmctbW9kZWwtb3B0aW9ucz0ieyBnZXR0ZXJTZXR0ZXI6IHRydWUgfSJgIHRv
CisgKiBhIGA8Zm9ybT5gLCB3aGljaCB3aWxsIGVuYWJsZSB0aGlzIGJlaGF2aW9yIGZvciBhbGwg
YDxpbnB1dD5gcyB3aXRoaW4gaXQuIFNlZQorICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ01vZGVs
T3B0aW9ucyBgbmdNb2RlbE9wdGlvbnNgfSBmb3IgbW9yZS4KKyAqCisgKiBUaGUgZm9sbG93aW5n
IGV4YW1wbGUgc2hvd3MgaG93IHRvIHVzZSBgbmdNb2RlbGAgd2l0aCBhIGdldHRlci9zZXR0ZXI6
CisgKgorICogQGV4YW1wbGUKKyAqIDxleGFtcGxlIG5hbWU9Im5nTW9kZWwtZ2V0dGVyLXNldHRl
ciIgbW9kdWxlPSJnZXR0ZXJTZXR0ZXJFeGFtcGxlIj4KKyAgICAgPGZpbGUgbmFtZT0iaW5kZXgu
aHRtbCI+CisgICAgICAgPGRpdiBuZy1jb250cm9sbGVyPSJFeGFtcGxlQ29udHJvbGxlciI+Cisg
ICAgICAgICA8Zm9ybSBuYW1lPSJ1c2VyRm9ybSI+CisgICAgICAgICAgIDxsYWJlbD5OYW1lOgor
ICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyTmFtZSIKKyAgICAgICAg
ICAgICAgICAgICAgbmctbW9kZWw9InVzZXIubmFtZSIKKyAgICAgICAgICAgICAgICAgICAgbmct
bW9kZWwtb3B0aW9ucz0ieyBnZXR0ZXJTZXR0ZXI6IHRydWUgfSIgLz4KKyAgICAgICAgICAgPC9s
YWJlbD4KKyAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgIDxwcmU+dXNlci5uYW1lID0gPHNwYW4g
bmctYmluZD0idXNlci5uYW1lKCkiPjwvc3Bhbj48L3ByZT4KKyAgICAgICA8L2Rpdj4KKyAgICAg
PC9maWxlPgorICAgICA8ZmlsZSBuYW1lPSJhcHAuanMiPgorICAgICAgIGFuZ3VsYXIubW9kdWxl
KCdnZXR0ZXJTZXR0ZXJFeGFtcGxlJywgW10pCisgICAgICAgICAuY29udHJvbGxlcignRXhhbXBs
ZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkgeworICAgICAgICAgICB2
YXIgX25hbWUgPSAnQnJpYW4nOworICAgICAgICAgICAkc2NvcGUudXNlciA9IHsKKyAgICAgICAg
ICAgICBuYW1lOiBmdW5jdGlvbihuZXdOYW1lKSB7CisgICAgICAgICAgICAgIC8vIE5vdGUgdGhh
dCBuZXdOYW1lIGNhbiBiZSB1bmRlZmluZWQgZm9yIHR3byByZWFzb25zOgorICAgICAgICAgICAg
ICAvLyAxLiBCZWNhdXNlIGl0IGlzIGNhbGxlZCBhcyBhIGdldHRlciBhbmQgdGh1cyBjYWxsZWQg
d2l0aCBubyBhcmd1bWVudHMKKyAgICAgICAgICAgICAgLy8gMi4gQmVjYXVzZSB0aGUgcHJvcGVy
dHkgc2hvdWxkIGFjdHVhbGx5IGJlIHNldCB0byB1bmRlZmluZWQuIFRoaXMgaGFwcGVucyBlLmcu
IGlmIHRoZQorICAgICAgICAgICAgICAvLyAgICBpbnB1dCBpcyBpbnZhbGlkCisgICAgICAgICAg
ICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKF9uYW1lID0gbmV3TmFtZSkgOiBfbmFtZTsK
KyAgICAgICAgICAgICB9CisgICAgICAgICAgIH07CisgICAgICAgICB9XSk7CisgICAgIDwvZmls
ZT4KKyAqIDwvZXhhbXBsZT4KKyAqLwordmFyIG5nTW9kZWxEaXJlY3RpdmUgPSBbJyRyb290U2Nv
cGUnLCBmdW5jdGlvbigkcm9vdFNjb3BlKSB7CisgIHJldHVybiB7CisgICAgcmVzdHJpY3Q6ICdB
JywKKyAgICByZXF1aXJlOiBbJ25nTW9kZWwnLCAnXj9mb3JtJywgJ14/bmdNb2RlbE9wdGlvbnMn
XSwKKyAgICBjb250cm9sbGVyOiBOZ01vZGVsQ29udHJvbGxlciwKKyAgICAvLyBQcmVsaW5rIG5l
ZWRzIHRvIHJ1biBiZWZvcmUgYW55IGlucHV0IGRpcmVjdGl2ZQorICAgIC8vIHNvIHRoYXQgd2Ug
Y2FuIHNldCB0aGUgTmdNb2RlbE9wdGlvbnMgaW4gTmdNb2RlbENvbnRyb2xsZXIKKyAgICAvLyBi
ZWZvcmUgYW55b25lIGVsc2UgdXNlcyBpdC4KKyAgICBwcmlvcml0eTogMSwKKyAgICBjb21waWxl
OiBmdW5jdGlvbiBuZ01vZGVsQ29tcGlsZShlbGVtZW50KSB7CisgICAgICAvLyBTZXR1cCBpbml0
aWFsIHN0YXRlIG9mIHRoZSBjb250cm9sCisgICAgICBlbGVtZW50LmFkZENsYXNzKFBSSVNUSU5F
X0NMQVNTKS5hZGRDbGFzcyhVTlRPVUNIRURfQ0xBU1MpLmFkZENsYXNzKFZBTElEX0NMQVNTKTsK
KworICAgICAgcmV0dXJuIHsKKyAgICAgICAgcHJlOiBmdW5jdGlvbiBuZ01vZGVsUHJlTGluayhz
Y29wZSwgZWxlbWVudCwgYXR0ciwgY3RybHMpIHsKKyAgICAgICAgICB2YXIgbW9kZWxDdHJsID0g
Y3RybHNbMF0sCisgICAgICAgICAgICAgIGZvcm1DdHJsID0gY3RybHNbMV0gfHwgbnVsbEZvcm1D
dHJsOworCisgICAgICAgICAgbW9kZWxDdHJsLiQkc2V0T3B0aW9ucyhjdHJsc1syXSAmJiBjdHJs
c1syXS4kb3B0aW9ucyk7CisKKyAgICAgICAgICAvLyBub3RpZnkgb3RoZXJzLCBlc3BlY2lhbGx5
IHBhcmVudCBmb3JtcworICAgICAgICAgIGZvcm1DdHJsLiRhZGRDb250cm9sKG1vZGVsQ3RybCk7
CisKKyAgICAgICAgICBhdHRyLiRvYnNlcnZlKCduYW1lJywgZnVuY3Rpb24obmV3VmFsdWUpIHsK
KyAgICAgICAgICAgIGlmIChtb2RlbEN0cmwuJG5hbWUgIT09IG5ld1ZhbHVlKSB7CisgICAgICAg
ICAgICAgIGZvcm1DdHJsLiQkcmVuYW1lQ29udHJvbChtb2RlbEN0cmwsIG5ld1ZhbHVlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICB9KTsKKworICAgICAgICAgIHNjb3BlLiRvbignJGRlc3Ry
b3knLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGZvcm1DdHJsLiRyZW1vdmVDb250cm9sKG1v
ZGVsQ3RybCk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0sCisgICAgICAgIHBvc3Q6IGZ1bmN0
aW9uIG5nTW9kZWxQb3N0TGluayhzY29wZSwgZWxlbWVudCwgYXR0ciwgY3RybHMpIHsKKyAgICAg
ICAgICB2YXIgbW9kZWxDdHJsID0gY3RybHNbMF07CisgICAgICAgICAgaWYgKG1vZGVsQ3RybC4k
b3B0aW9ucyAmJiBtb2RlbEN0cmwuJG9wdGlvbnMudXBkYXRlT24pIHsKKyAgICAgICAgICAgIGVs
ZW1lbnQub24obW9kZWxDdHJsLiRvcHRpb25zLnVwZGF0ZU9uLCBmdW5jdGlvbihldikgeworICAg
ICAgICAgICAgICBtb2RlbEN0cmwuJCRkZWJvdW5jZVZpZXdWYWx1ZUNvbW1pdChldiAmJiBldi50
eXBlKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgIH0KKworICAgICAgICAgIGVsZW1lbnQu
b24oJ2JsdXInLCBmdW5jdGlvbihldikgeworICAgICAgICAgICAgaWYgKG1vZGVsQ3RybC4kdG91
Y2hlZCkgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoJHJvb3RTY29wZS4kJHBoYXNlKSB7Cisg
ICAgICAgICAgICAgIHNjb3BlLiRldmFsQXN5bmMobW9kZWxDdHJsLiRzZXRUb3VjaGVkKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHNjb3BlLiRhcHBseShtb2RlbEN0cmwu
JHNldFRvdWNoZWQpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0pOworICAgICAgICB9Cisg
ICAgICB9OworICAgIH0KKyAgfTsKK31dOworCit2YXIgREVGQVVMVF9SRUdFWFAgPSAvKFxzK3xe
KWRlZmF1bHQoXHMrfCQpLzsKKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBu
Z01vZGVsT3B0aW9ucworICoKKyAqIEBkZXNjcmlwdGlvbgorICogQWxsb3dzIHR1bmluZyBob3cg
bW9kZWwgdXBkYXRlcyBhcmUgZG9uZS4gVXNpbmcgYG5nTW9kZWxPcHRpb25zYCB5b3UgY2FuIHNw
ZWNpZnkgYSBjdXN0b20gbGlzdCBvZgorICogZXZlbnRzIHRoYXQgd2lsbCB0cmlnZ2VyIGEgbW9k
ZWwgdXBkYXRlIGFuZC9vciBhIGRlYm91bmNpbmcgZGVsYXkgc28gdGhhdCB0aGUgYWN0dWFsIHVw
ZGF0ZSBvbmx5CisgKiB0YWtlcyBwbGFjZSB3aGVuIGEgdGltZXIgZXhwaXJlczsgdGhpcyB0aW1l
ciB3aWxsIGJlIHJlc2V0IGFmdGVyIGFub3RoZXIgY2hhbmdlIHRha2VzIHBsYWNlLgorICoKKyAq
IEdpdmVuIHRoZSBuYXR1cmUgb2YgYG5nTW9kZWxPcHRpb25zYCwgdGhlIHZhbHVlIGRpc3BsYXll
ZCBpbnNpZGUgaW5wdXQgZmllbGRzIGluIHRoZSB2aWV3IG1pZ2h0CisgKiBiZSBkaWZmZXJlbnQg
ZnJvbSB0aGUgdmFsdWUgaW4gdGhlIGFjdHVhbCBtb2RlbC4gVGhpcyBtZWFucyB0aGF0IGlmIHlv
dSB1cGRhdGUgdGhlIG1vZGVsIHlvdQorICogc2hvdWxkIGFsc28gaW52b2tlIHtAbGluayBuZ01v
ZGVsLk5nTW9kZWxDb250cm9sbGVyIGAkcm9sbGJhY2tWaWV3VmFsdWVgfSBvbiB0aGUgcmVsZXZh
bnQgaW5wdXQgZmllbGQgaW4KKyAqIG9yZGVyIHRvIG1ha2Ugc3VyZSBpdCBpcyBzeW5jaHJvbml6
ZWQgd2l0aCB0aGUgbW9kZWwgYW5kIHRoYXQgYW55IGRlYm91bmNlZCBhY3Rpb24gaXMgY2FuY2Vs
ZWQuCisgKgorICogVGhlIGVhc2llc3Qgd2F5IHRvIHJlZmVyZW5jZSB0aGUgY29udHJvbCdzIHtA
bGluayBuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVyIGAkcm9sbGJhY2tWaWV3VmFsdWVgfQorICog
bWV0aG9kIGlzIGJ5IG1ha2luZyBzdXJlIHRoZSBpbnB1dCBpcyBwbGFjZWQgaW5zaWRlIGEgZm9y
bSB0aGF0IGhhcyBhIGBuYW1lYCBhdHRyaWJ1dGUuIFRoaXMgaXMKKyAqIGltcG9ydGFudCBiZWNh
dXNlIGBmb3JtYCBjb250cm9sbGVycyBhcmUgcHVibGlzaGVkIHRvIHRoZSByZWxhdGVkIHNjb3Bl
IHVuZGVyIHRoZSBuYW1lIGluIHRoZWlyCisgKiBgbmFtZWAgYXR0cmlidXRlLgorICoKKyAqIEFu
eSBwZW5kaW5nIGNoYW5nZXMgd2lsbCB0YWtlIHBsYWNlIGltbWVkaWF0ZWx5IHdoZW4gYW4gZW5j
bG9zaW5nIGZvcm0gaXMgc3VibWl0dGVkIHZpYSB0aGUKKyAqIGBzdWJtaXRgIGV2ZW50LiBOb3Rl
IHRoYXQgYG5nQ2xpY2tgIGV2ZW50cyB3aWxsIG9jY3VyIGJlZm9yZSB0aGUgbW9kZWwgaXMgdXBk
YXRlZC4gVXNlIGBuZ1N1Ym1pdGAKKyAqIHRvIGhhdmUgYWNjZXNzIHRvIHRoZSB1cGRhdGVkIG1v
ZGVsLgorICoKKyAqIGBuZ01vZGVsT3B0aW9uc2AgaGFzIGFuIGVmZmVjdCBvbiB0aGUgZWxlbWVu
dCBpdCdzIGRlY2xhcmVkIG9uIGFuZCBpdHMgZGVzY2VuZGFudHMuCisgKgorICogQHBhcmFtIHtP
YmplY3R9IG5nTW9kZWxPcHRpb25zIG9wdGlvbnMgdG8gYXBwbHkgdG8gdGhlIGN1cnJlbnQgbW9k
ZWwuIFZhbGlkIGtleXMgYXJlOgorICogICAtIGB1cGRhdGVPbmA6IHN0cmluZyBzcGVjaWZ5aW5n
IHdoaWNoIGV2ZW50IHNob3VsZCB0aGUgaW5wdXQgYmUgYm91bmQgdG8uIFlvdSBjYW4gc2V0IHNl
dmVyYWwKKyAqICAgICBldmVudHMgdXNpbmcgYW4gc3BhY2UgZGVsaW1pdGVkIGxpc3QuIFRoZXJl
IGlzIGEgc3BlY2lhbCBldmVudCBjYWxsZWQgYGRlZmF1bHRgIHRoYXQKKyAqICAgICBtYXRjaGVz
IHRoZSBkZWZhdWx0IGV2ZW50cyBiZWxvbmdpbmcgb2YgdGhlIGNvbnRyb2wuCisgKiAgIC0gYGRl
Ym91bmNlYDogaW50ZWdlciB2YWx1ZSB3aGljaCBjb250YWlucyB0aGUgZGVib3VuY2UgbW9kZWwg
dXBkYXRlIHZhbHVlIGluIG1pbGxpc2Vjb25kcy4gQQorICogICAgIHZhbHVlIG9mIDAgdHJpZ2dl
cnMgYW4gaW1tZWRpYXRlIHVwZGF0ZS4gSWYgYW4gb2JqZWN0IGlzIHN1cHBsaWVkIGluc3RlYWQs
IHlvdSBjYW4gc3BlY2lmeSBhCisgKiAgICAgY3VzdG9tIHZhbHVlIGZvciBlYWNoIGV2ZW50LiBG
b3IgZXhhbXBsZToKKyAqICAgICBgbmctbW9kZWwtb3B0aW9ucz0ieyB1cGRhdGVPbjogJ2RlZmF1
bHQgYmx1cicsIGRlYm91bmNlOiB7ICdkZWZhdWx0JzogNTAwLCAnYmx1cic6IDAgfSB9ImAKKyAq
ICAgLSBgYWxsb3dJbnZhbGlkYDogYm9vbGVhbiB2YWx1ZSB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0
aGUgbW9kZWwgY2FuIGJlIHNldCB3aXRoIHZhbHVlcyB0aGF0IGRpZAorICogICAgIG5vdCB2YWxp
ZGF0ZSBjb3JyZWN0bHkgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBzZXR0aW5n
IHRoZSBtb2RlbCB0byB1bmRlZmluZWQuCisgKiAgIC0gYGdldHRlclNldHRlcmA6IGJvb2xlYW4g
dmFsdWUgd2hpY2ggZGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0byB0cmVhdCBmdW5jdGlvbnMg
Ym91bmQgdG8KKyAgICAgICBgbmdNb2RlbGAgYXMgZ2V0dGVycy9zZXR0ZXJzLgorICogICAtIGB0
aW1lem9uZWA6IERlZmluZXMgdGhlIHRpbWV6b25lIHRvIGJlIHVzZWQgdG8gcmVhZC93cml0ZSB0
aGUgYERhdGVgIGluc3RhbmNlIGluIHRoZSBtb2RlbCBmb3IKKyAqICAgICBgPGlucHV0IHR5cGU9
ImRhdGUiPmAsIGA8aW5wdXQgdHlwZT0idGltZSI+YCwgLi4uIC4gSXQgdW5kZXJzdGFuZHMgVVRD
L0dNVCBhbmQgdGhlCisgKiAgICAgY29udGluZW50YWwgVVMgdGltZSB6b25lIGFiYnJldmlhdGlv
bnMsIGJ1dCBmb3IgZ2VuZXJhbCB1c2UsIHVzZSBhIHRpbWUgem9uZSBvZmZzZXQsIGZvcgorICog
ICAgIGV4YW1wbGUsIGAnKzA0MzAnYCAoNCBob3VycywgMzAgbWludXRlcyBlYXN0IG9mIHRoZSBH
cmVlbndpY2ggbWVyaWRpYW4pCisgKiAgICAgSWYgbm90IHNwZWNpZmllZCwgdGhlIHRpbWV6b25l
IG9mIHRoZSBicm93c2VyIHdpbGwgYmUgdXNlZC4KKyAqCisgKiBAZXhhbXBsZQorCisgIFRoZSBm
b2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gb3ZlcnJpZGUgaW1tZWRpYXRlIHVwZGF0ZXMu
IENoYW5nZXMgb24gdGhlIGlucHV0cyB3aXRoaW4gdGhlCisgIGZvcm0gd2lsbCB1cGRhdGUgdGhl
IG1vZGVsIG9ubHkgd2hlbiB0aGUgY29udHJvbCBsb3NlcyBmb2N1cyAoYmx1ciBldmVudCkuIElm
IGBlc2NhcGVgIGtleSBpcworICBwcmVzc2VkIHdoaWxlIHRoZSBpbnB1dCBmaWVsZCBpcyBmb2N1
c2VkLCB0aGUgdmFsdWUgaXMgcmVzZXQgdG8gdGhlIHZhbHVlIGluIHRoZSBjdXJyZW50IG1vZGVs
LgorCisgIDxleGFtcGxlIG5hbWU9Im5nTW9kZWxPcHRpb25zLWRpcmVjdGl2ZS1ibHVyIiBtb2R1
bGU9Im9wdGlvbnNFeGFtcGxlIj4KKyAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAg
IDxkaXYgbmctY29udHJvbGxlcj0iRXhhbXBsZUNvbnRyb2xsZXIiPgorICAgICAgICA8Zm9ybSBu
YW1lPSJ1c2VyRm9ybSI+CisgICAgICAgICAgPGxhYmVsPk5hbWU6CisgICAgICAgICAgICA8aW5w
dXQgdHlwZT0idGV4dCIgbmFtZT0idXNlck5hbWUiCisgICAgICAgICAgICAgICAgICAgbmctbW9k
ZWw9InVzZXIubmFtZSIKKyAgICAgICAgICAgICAgICAgICBuZy1tb2RlbC1vcHRpb25zPSJ7IHVw
ZGF0ZU9uOiAnYmx1cicgfSIKKyAgICAgICAgICAgICAgICAgICBuZy1rZXl1cD0iY2FuY2VsKCRl
dmVudCkiIC8+CisgICAgICAgICAgPC9sYWJlbD48YnIgLz4KKyAgICAgICAgICA8bGFiZWw+T3Ro
ZXIgZGF0YToKKyAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuZy1tb2RlbD0idXNlci5k
YXRhIiAvPgorICAgICAgICAgIDwvbGFiZWw+PGJyIC8+CisgICAgICAgIDwvZm9ybT4KKyAgICAg
ICAgPHByZT51c2VyLm5hbWUgPSA8c3BhbiBuZy1iaW5kPSJ1c2VyLm5hbWUiPjwvc3Bhbj48L3By
ZT4KKyAgICAgIDwvZGl2PgorICAgIDwvZmlsZT4KKyAgICA8ZmlsZSBuYW1lPSJhcHAuanMiPgor
ICAgICAgYW5ndWxhci5tb2R1bGUoJ29wdGlvbnNFeGFtcGxlJywgW10pCisgICAgICAgIC5jb250
cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7
CisgICAgICAgICAgJHNjb3BlLnVzZXIgPSB7IG5hbWU6ICdzYXknLCBkYXRhOiAnJyB9OworCisg
ICAgICAgICAgJHNjb3BlLmNhbmNlbCA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgIGlmIChl
LmtleUNvZGUgPT0gMjcpIHsKKyAgICAgICAgICAgICAgJHNjb3BlLnVzZXJGb3JtLnVzZXJOYW1l
LiRyb2xsYmFja1ZpZXdWYWx1ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgIH07CisgICAg
ICAgIH1dKTsKKyAgICA8L2ZpbGU+CisgICAgPGZpbGUgbmFtZT0icHJvdHJhY3Rvci5qcyIgdHlw
ZT0icHJvdHJhY3RvciI+CisgICAgICB2YXIgbW9kZWwgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ3Vz
ZXIubmFtZScpKTsKKyAgICAgIHZhciBpbnB1dCA9IGVsZW1lbnQoYnkubW9kZWwoJ3VzZXIubmFt
ZScpKTsKKyAgICAgIHZhciBvdGhlciA9IGVsZW1lbnQoYnkubW9kZWwoJ3VzZXIuZGF0YScpKTsK
KworICAgICAgaXQoJ3Nob3VsZCBhbGxvdyBjdXN0b20gZXZlbnRzJywgZnVuY3Rpb24oKSB7Cisg
ICAgICAgIGlucHV0LnNlbmRLZXlzKCcgaGVsbG8nKTsKKyAgICAgICAgaW5wdXQuY2xpY2soKTsK
KyAgICAgICAgZXhwZWN0KG1vZGVsLmdldFRleHQoKSkudG9FcXVhbCgnc2F5Jyk7CisgICAgICAg
IG90aGVyLmNsaWNrKCk7CisgICAgICAgIGV4cGVjdChtb2RlbC5nZXRUZXh0KCkpLnRvRXF1YWwo
J3NheSBoZWxsbycpOworICAgICAgfSk7CisKKyAgICAgIGl0KCdzaG91bGQgJHJvbGxiYWNrVmll
d1ZhbHVlIHdoZW4gbW9kZWwgY2hhbmdlcycsIGZ1bmN0aW9uKCkgeworICAgICAgICBpbnB1dC5z
ZW5kS2V5cygnIGhlbGxvJyk7CisgICAgICAgIGV4cGVjdChpbnB1dC5nZXRBdHRyaWJ1dGUoJ3Zh
bHVlJykpLnRvRXF1YWwoJ3NheSBoZWxsbycpOworICAgICAgICBpbnB1dC5zZW5kS2V5cyhwcm90
cmFjdG9yLktleS5FU0NBUEUpOworICAgICAgICBleHBlY3QoaW5wdXQuZ2V0QXR0cmlidXRlKCd2
YWx1ZScpKS50b0VxdWFsKCdzYXknKTsKKyAgICAgICAgb3RoZXIuY2xpY2soKTsKKyAgICAgICAg
ZXhwZWN0KG1vZGVsLmdldFRleHQoKSkudG9FcXVhbCgnc2F5Jyk7CisgICAgICB9KTsKKyAgICA8
L2ZpbGU+CisgIDwvZXhhbXBsZT4KKworICBUaGlzIG9uZSBzaG93cyBob3cgdG8gZGVib3VuY2Ug
bW9kZWwgY2hhbmdlcy4gTW9kZWwgd2lsbCBiZSB1cGRhdGVkIG9ubHkgMSBzZWMgYWZ0ZXIgbGFz
dCBjaGFuZ2UuCisgIElmIHRoZSBgQ2xlYXJgIGJ1dHRvbiBpcyBwcmVzc2VkLCBhbnkgZGVib3Vu
Y2VkIGFjdGlvbiBpcyBjYW5jZWxlZCBhbmQgdGhlIHZhbHVlIGJlY29tZXMgZW1wdHkuCisKKyAg
PGV4YW1wbGUgbmFtZT0ibmdNb2RlbE9wdGlvbnMtZGlyZWN0aXZlLWRlYm91bmNlIiBtb2R1bGU9
Im9wdGlvbnNFeGFtcGxlIj4KKyAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgIDxk
aXYgbmctY29udHJvbGxlcj0iRXhhbXBsZUNvbnRyb2xsZXIiPgorICAgICAgICA8Zm9ybSBuYW1l
PSJ1c2VyRm9ybSI+CisgICAgICAgICAgPGxhYmVsPk5hbWU6CisgICAgICAgICAgICA8aW5wdXQg
dHlwZT0idGV4dCIgbmFtZT0idXNlck5hbWUiCisgICAgICAgICAgICAgICAgICAgbmctbW9kZWw9
InVzZXIubmFtZSIKKyAgICAgICAgICAgICAgICAgICBuZy1tb2RlbC1vcHRpb25zPSJ7IGRlYm91
bmNlOiAxMDAwIH0iIC8+CisgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgICA8YnV0dG9uIG5n
LWNsaWNrPSJ1c2VyRm9ybS51c2VyTmFtZS4kcm9sbGJhY2tWaWV3VmFsdWUoKTsgdXNlci5uYW1l
PScnIj5DbGVhcjwvYnV0dG9uPgorICAgICAgICAgIDxiciAvPgorICAgICAgICA8L2Zvcm0+Cisg
ICAgICAgIDxwcmU+dXNlci5uYW1lID0gPHNwYW4gbmctYmluZD0idXNlci5uYW1lIj48L3NwYW4+
PC9wcmU+CisgICAgICA8L2Rpdj4KKyAgICA8L2ZpbGU+CisgICAgPGZpbGUgbmFtZT0iYXBwLmpz
Ij4KKyAgICAgIGFuZ3VsYXIubW9kdWxlKCdvcHRpb25zRXhhbXBsZScsIFtdKQorICAgICAgICAu
Y29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29w
ZSkgeworICAgICAgICAgICRzY29wZS51c2VyID0geyBuYW1lOiAnc2F5JyB9OworICAgICAgICB9
XSk7CisgICAgPC9maWxlPgorICA8L2V4YW1wbGU+CisKKyAgVGhpcyBvbmUgc2hvd3MgaG93IHRv
IGJpbmQgdG8gZ2V0dGVyL3NldHRlcnM6CisKKyAgPGV4YW1wbGUgbmFtZT0ibmdNb2RlbE9wdGlv
bnMtZGlyZWN0aXZlLWdldHRlci1zZXR0ZXIiIG1vZHVsZT0iZ2V0dGVyU2V0dGVyRXhhbXBsZSI+
CisgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+CisgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9
IkV4YW1wbGVDb250cm9sbGVyIj4KKyAgICAgICAgPGZvcm0gbmFtZT0idXNlckZvcm0iPgorICAg
ICAgICAgIDxsYWJlbD5OYW1lOgorICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9
InVzZXJOYW1lIgorICAgICAgICAgICAgICAgICAgIG5nLW1vZGVsPSJ1c2VyLm5hbWUiCisgICAg
ICAgICAgICAgICAgICAgbmctbW9kZWwtb3B0aW9ucz0ieyBnZXR0ZXJTZXR0ZXI6IHRydWUgfSIg
Lz4KKyAgICAgICAgICA8L2xhYmVsPgorICAgICAgICA8L2Zvcm0+CisgICAgICAgIDxwcmU+dXNl
ci5uYW1lID0gPHNwYW4gbmctYmluZD0idXNlci5uYW1lKCkiPjwvc3Bhbj48L3ByZT4KKyAgICAg
IDwvZGl2PgorICAgIDwvZmlsZT4KKyAgICA8ZmlsZSBuYW1lPSJhcHAuanMiPgorICAgICAgYW5n
dWxhci5tb2R1bGUoJ2dldHRlclNldHRlckV4YW1wbGUnLCBbXSkKKyAgICAgICAgLmNvbnRyb2xs
ZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHsKKyAg
ICAgICAgICB2YXIgX25hbWUgPSAnQnJpYW4nOworICAgICAgICAgICRzY29wZS51c2VyID0gewor
ICAgICAgICAgICAgbmFtZTogZnVuY3Rpb24obmV3TmFtZSkgeworICAgICAgICAgICAgICAvLyBO
b3RlIHRoYXQgbmV3TmFtZSBjYW4gYmUgdW5kZWZpbmVkIGZvciB0d28gcmVhc29uczoKKyAgICAg
ICAgICAgICAgLy8gMS4gQmVjYXVzZSBpdCBpcyBjYWxsZWQgYXMgYSBnZXR0ZXIgYW5kIHRodXMg
Y2FsbGVkIHdpdGggbm8gYXJndW1lbnRzCisgICAgICAgICAgICAgIC8vIDIuIEJlY2F1c2UgdGhl
IHByb3BlcnR5IHNob3VsZCBhY3R1YWxseSBiZSBzZXQgdG8gdW5kZWZpbmVkLiBUaGlzIGhhcHBl
bnMgZS5nLiBpZiB0aGUKKyAgICAgICAgICAgICAgLy8gICAgaW5wdXQgaXMgaW52YWxpZAorICAg
ICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChfbmFtZSA9IG5ld05hbWUpIDog
X25hbWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgfTsKKyAgICAgICAgfV0pOworICAgIDwv
ZmlsZT4KKyAgPC9leGFtcGxlPgorICovCit2YXIgbmdNb2RlbE9wdGlvbnNEaXJlY3RpdmUgPSBm
dW5jdGlvbigpIHsKKyAgcmV0dXJuIHsKKyAgICByZXN0cmljdDogJ0EnLAorICAgIGNvbnRyb2xs
ZXI6IFsnJHNjb3BlJywgJyRhdHRycycsIGZ1bmN0aW9uKCRzY29wZSwgJGF0dHJzKSB7CisgICAg
ICB2YXIgdGhhdCA9IHRoaXM7CisgICAgICB0aGlzLiRvcHRpb25zID0gY29weSgkc2NvcGUuJGV2
YWwoJGF0dHJzLm5nTW9kZWxPcHRpb25zKSk7CisgICAgICAvLyBBbGxvdyBhZGRpbmcvb3ZlcnJp
ZGluZyBib3VuZCBldmVudHMKKyAgICAgIGlmICh0aGlzLiRvcHRpb25zLnVwZGF0ZU9uICE9PSB1
bmRlZmluZWQpIHsKKyAgICAgICAgdGhpcy4kb3B0aW9ucy51cGRhdGVPbkRlZmF1bHQgPSBmYWxz
ZTsKKyAgICAgICAgLy8gZXh0cmFjdCAiZGVmYXVsdCIgcHNldWRvLWV2ZW50IGZyb20gbGlzdCBv
ZiBldmVudHMgdGhhdCBjYW4gdHJpZ2dlciBhIG1vZGVsIHVwZGF0ZQorICAgICAgICB0aGlzLiRv
cHRpb25zLnVwZGF0ZU9uID0gdHJpbSh0aGlzLiRvcHRpb25zLnVwZGF0ZU9uLnJlcGxhY2UoREVG
QVVMVF9SRUdFWFAsIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHRoYXQuJG9wdGlvbnMudXBkYXRl
T25EZWZhdWx0ID0gdHJ1ZTsKKyAgICAgICAgICByZXR1cm4gJyAnOworICAgICAgICB9KSk7Cisg
ICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLiRvcHRpb25zLnVwZGF0ZU9uRGVmYXVsdCA9IHRy
dWU7CisgICAgICB9CisgICAgfV0KKyAgfTsKK307CisKKworCisvLyBoZWxwZXIgbWV0aG9kcwor
ZnVuY3Rpb24gYWRkU2V0VmFsaWRpdHlNZXRob2QoY29udGV4dCkgeworICB2YXIgY3RybCA9IGNv
bnRleHQuY3RybCwKKyAgICAgICRlbGVtZW50ID0gY29udGV4dC4kZWxlbWVudCwKKyAgICAgIGNs
YXNzQ2FjaGUgPSB7fSwKKyAgICAgIHNldCA9IGNvbnRleHQuc2V0LAorICAgICAgdW5zZXQgPSBj
b250ZXh0LnVuc2V0LAorICAgICAgcGFyZW50Rm9ybSA9IGNvbnRleHQucGFyZW50Rm9ybSwKKyAg
ICAgICRhbmltYXRlID0gY29udGV4dC4kYW5pbWF0ZTsKKworICBjbGFzc0NhY2hlW0lOVkFMSURf
Q0xBU1NdID0gIShjbGFzc0NhY2hlW1ZBTElEX0NMQVNTXSA9ICRlbGVtZW50Lmhhc0NsYXNzKFZB
TElEX0NMQVNTKSk7CisKKyAgY3RybC4kc2V0VmFsaWRpdHkgPSBzZXRWYWxpZGl0eTsKKworICBm
dW5jdGlvbiBzZXRWYWxpZGl0eSh2YWxpZGF0aW9uRXJyb3JLZXksIHN0YXRlLCBjb250cm9sbGVy
KSB7CisgICAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQpIHsKKyAgICAgIGNyZWF0ZUFuZFNldCgn
JHBlbmRpbmcnLCB2YWxpZGF0aW9uRXJyb3JLZXksIGNvbnRyb2xsZXIpOworICAgIH0gZWxzZSB7
CisgICAgICB1bnNldEFuZENsZWFudXAoJyRwZW5kaW5nJywgdmFsaWRhdGlvbkVycm9yS2V5LCBj
b250cm9sbGVyKTsKKyAgICB9CisgICAgaWYgKCFpc0Jvb2xlYW4oc3RhdGUpKSB7CisgICAgICB1
bnNldChjdHJsLiRlcnJvciwgdmFsaWRhdGlvbkVycm9yS2V5LCBjb250cm9sbGVyKTsKKyAgICAg
IHVuc2V0KGN0cmwuJCRzdWNjZXNzLCB2YWxpZGF0aW9uRXJyb3JLZXksIGNvbnRyb2xsZXIpOwor
ICAgIH0gZWxzZSB7CisgICAgICBpZiAoc3RhdGUpIHsKKyAgICAgICAgdW5zZXQoY3RybC4kZXJy
b3IsIHZhbGlkYXRpb25FcnJvcktleSwgY29udHJvbGxlcik7CisgICAgICAgIHNldChjdHJsLiQk
c3VjY2VzcywgdmFsaWRhdGlvbkVycm9yS2V5LCBjb250cm9sbGVyKTsKKyAgICAgIH0gZWxzZSB7
CisgICAgICAgIHNldChjdHJsLiRlcnJvciwgdmFsaWRhdGlvbkVycm9yS2V5LCBjb250cm9sbGVy
KTsKKyAgICAgICAgdW5zZXQoY3RybC4kJHN1Y2Nlc3MsIHZhbGlkYXRpb25FcnJvcktleSwgY29u
dHJvbGxlcik7CisgICAgICB9CisgICAgfQorICAgIGlmIChjdHJsLiRwZW5kaW5nKSB7CisgICAg
ICBjYWNoZWRUb2dnbGVDbGFzcyhQRU5ESU5HX0NMQVNTLCB0cnVlKTsKKyAgICAgIGN0cmwuJHZh
bGlkID0gY3RybC4kaW52YWxpZCA9IHVuZGVmaW5lZDsKKyAgICAgIHRvZ2dsZVZhbGlkYXRpb25D
c3MoJycsIG51bGwpOworICAgIH0gZWxzZSB7CisgICAgICBjYWNoZWRUb2dnbGVDbGFzcyhQRU5E
SU5HX0NMQVNTLCBmYWxzZSk7CisgICAgICBjdHJsLiR2YWxpZCA9IGlzT2JqZWN0RW1wdHkoY3Ry
bC4kZXJyb3IpOworICAgICAgY3RybC4kaW52YWxpZCA9ICFjdHJsLiR2YWxpZDsKKyAgICAgIHRv
Z2dsZVZhbGlkYXRpb25Dc3MoJycsIGN0cmwuJHZhbGlkKTsKKyAgICB9CisKKyAgICAvLyByZS1y
ZWFkIHRoZSBzdGF0ZSBhcyB0aGUgc2V0L3Vuc2V0IG1ldGhvZHMgY291bGQgaGF2ZQorICAgIC8v
IGNvbWJpbmVkIHN0YXRlIGluIGN0cmwuJGVycm9yW3ZhbGlkYXRpb25FcnJvcl0gKHVzZWQgZm9y
IGZvcm1zKSwKKyAgICAvLyB3aGVyZSBzZXR0aW5nL3Vuc2V0dGluZyBvbmx5IGluY3JlbWVudHMv
ZGVjcmVtZW50cyB0aGUgdmFsdWUsCisgICAgLy8gYW5kIGRvZXMgbm90IHJlcGxhY2UgaXQuCisg
ICAgdmFyIGNvbWJpbmVkU3RhdGU7CisgICAgaWYgKGN0cmwuJHBlbmRpbmcgJiYgY3RybC4kcGVu
ZGluZ1t2YWxpZGF0aW9uRXJyb3JLZXldKSB7CisgICAgICBjb21iaW5lZFN0YXRlID0gdW5kZWZp
bmVkOworICAgIH0gZWxzZSBpZiAoY3RybC4kZXJyb3JbdmFsaWRhdGlvbkVycm9yS2V5XSkgewor
ICAgICAgY29tYmluZWRTdGF0ZSA9IGZhbHNlOworICAgIH0gZWxzZSBpZiAoY3RybC4kJHN1Y2Nl
c3NbdmFsaWRhdGlvbkVycm9yS2V5XSkgeworICAgICAgY29tYmluZWRTdGF0ZSA9IHRydWU7Cisg
ICAgfSBlbHNlIHsKKyAgICAgIGNvbWJpbmVkU3RhdGUgPSBudWxsOworICAgIH0KKworICAgIHRv
Z2dsZVZhbGlkYXRpb25Dc3ModmFsaWRhdGlvbkVycm9yS2V5LCBjb21iaW5lZFN0YXRlKTsKKyAg
ICBwYXJlbnRGb3JtLiRzZXRWYWxpZGl0eSh2YWxpZGF0aW9uRXJyb3JLZXksIGNvbWJpbmVkU3Rh
dGUsIGN0cmwpOworICB9CisKKyAgZnVuY3Rpb24gY3JlYXRlQW5kU2V0KG5hbWUsIHZhbHVlLCBj
b250cm9sbGVyKSB7CisgICAgaWYgKCFjdHJsW25hbWVdKSB7CisgICAgICBjdHJsW25hbWVdID0g
e307CisgICAgfQorICAgIHNldChjdHJsW25hbWVdLCB2YWx1ZSwgY29udHJvbGxlcik7CisgIH0K
KworICBmdW5jdGlvbiB1bnNldEFuZENsZWFudXAobmFtZSwgdmFsdWUsIGNvbnRyb2xsZXIpIHsK
KyAgICBpZiAoY3RybFtuYW1lXSkgeworICAgICAgdW5zZXQoY3RybFtuYW1lXSwgdmFsdWUsIGNv
bnRyb2xsZXIpOworICAgIH0KKyAgICBpZiAoaXNPYmplY3RFbXB0eShjdHJsW25hbWVdKSkgewor
ICAgICAgY3RybFtuYW1lXSA9IHVuZGVmaW5lZDsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiBj
YWNoZWRUb2dnbGVDbGFzcyhjbGFzc05hbWUsIHN3aXRjaFZhbHVlKSB7CisgICAgaWYgKHN3aXRj
aFZhbHVlICYmICFjbGFzc0NhY2hlW2NsYXNzTmFtZV0pIHsKKyAgICAgICRhbmltYXRlLmFkZENs
YXNzKCRlbGVtZW50LCBjbGFzc05hbWUpOworICAgICAgY2xhc3NDYWNoZVtjbGFzc05hbWVdID0g
dHJ1ZTsKKyAgICB9IGVsc2UgaWYgKCFzd2l0Y2hWYWx1ZSAmJiBjbGFzc0NhY2hlW2NsYXNzTmFt
ZV0pIHsKKyAgICAgICRhbmltYXRlLnJlbW92ZUNsYXNzKCRlbGVtZW50LCBjbGFzc05hbWUpOwor
ICAgICAgY2xhc3NDYWNoZVtjbGFzc05hbWVdID0gZmFsc2U7CisgICAgfQorICB9CisKKyAgZnVu
Y3Rpb24gdG9nZ2xlVmFsaWRhdGlvbkNzcyh2YWxpZGF0aW9uRXJyb3JLZXksIGlzVmFsaWQpIHsK
KyAgICB2YWxpZGF0aW9uRXJyb3JLZXkgPSB2YWxpZGF0aW9uRXJyb3JLZXkgPyAnLScgKyBzbmFr
ZV9jYXNlKHZhbGlkYXRpb25FcnJvcktleSwgJy0nKSA6ICcnOworCisgICAgY2FjaGVkVG9nZ2xl
Q2xhc3MoVkFMSURfQ0xBU1MgKyB2YWxpZGF0aW9uRXJyb3JLZXksIGlzVmFsaWQgPT09IHRydWUp
OworICAgIGNhY2hlZFRvZ2dsZUNsYXNzKElOVkFMSURfQ0xBU1MgKyB2YWxpZGF0aW9uRXJyb3JL
ZXksIGlzVmFsaWQgPT09IGZhbHNlKTsKKyAgfQorfQorCitmdW5jdGlvbiBpc09iamVjdEVtcHR5
KG9iaikgeworICBpZiAob2JqKSB7CisgICAgZm9yICh2YXIgcHJvcCBpbiBvYmopIHsKKyAgICAg
IGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcCkpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKiBAbmdkb2Mg
ZGlyZWN0aXZlCisgKiBAbmFtZSBuZ05vbkJpbmRhYmxlCisgKiBAcmVzdHJpY3QgQUMKKyAqIEBw
cmlvcml0eSAxMDAwCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBUaGUgYG5nTm9uQmluZGFibGVg
IGRpcmVjdGl2ZSB0ZWxscyBBbmd1bGFyIG5vdCB0byBjb21waWxlIG9yIGJpbmQgdGhlIGNvbnRl
bnRzIG9mIHRoZSBjdXJyZW50CisgKiBET00gZWxlbWVudC4gVGhpcyBpcyB1c2VmdWwgaWYgdGhl
IGVsZW1lbnQgY29udGFpbnMgd2hhdCBhcHBlYXJzIHRvIGJlIEFuZ3VsYXIgZGlyZWN0aXZlcyBh
bmQKKyAqIGJpbmRpbmdzIGJ1dCB3aGljaCBzaG91bGQgYmUgaWdub3JlZCBieSBBbmd1bGFyLiBU
aGlzIGNvdWxkIGJlIHRoZSBjYXNlIGlmIHlvdSBoYXZlIGEgc2l0ZSB0aGF0CisgKiBkaXNwbGF5
cyBzbmlwcGV0cyBvZiBjb2RlLCBmb3IgaW5zdGFuY2UuCisgKgorICogQGVsZW1lbnQgQU5ZCisg
KgorICogQGV4YW1wbGUKKyAqIEluIHRoaXMgZXhhbXBsZSB0aGVyZSBhcmUgdHdvIGxvY2F0aW9u
cyB3aGVyZSBhIHNpbXBsZSBpbnRlcnBvbGF0aW9uIGJpbmRpbmcgKGB7e319YCkgaXMgcHJlc2Vu
dCwKKyAqIGJ1dCB0aGUgb25lIHdyYXBwZWQgaW4gYG5nTm9uQmluZGFibGVgIGlzIGxlZnQgYWxv
bmUuCisgKgorICogQGV4YW1wbGUKKyAgICA8ZXhhbXBsZT4KKyAgICAgIDxmaWxlIG5hbWU9Imlu
ZGV4Lmh0bWwiPgorICAgICAgICA8ZGl2Pk5vcm1hbDoge3sxICsgMn19PC9kaXY+CisgICAgICAg
IDxkaXYgbmctbm9uLWJpbmRhYmxlPklnbm9yZWQ6IHt7MSArIDJ9fTwvZGl2PgorICAgICAgPC9m
aWxlPgorICAgICAgPGZpbGUgbmFtZT0icHJvdHJhY3Rvci5qcyIgdHlwZT0icHJvdHJhY3RvciI+
CisgICAgICAgaXQoJ3Nob3VsZCBjaGVjayBuZy1ub24tYmluZGFibGUnLCBmdW5jdGlvbigpIHsK
KyAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmJpbmRpbmcoJzEgKyAyJykpLmdldFRleHQoKSku
dG9Db250YWluKCczJyk7CisgICAgICAgICBleHBlY3QoZWxlbWVudC5hbGwoYnkuY3NzKCdkaXYn
KSkubGFzdCgpLmdldFRleHQoKSkudG9NYXRjaCgvMSBcKyAyLyk7CisgICAgICAgfSk7CisgICAg
ICA8L2ZpbGU+CisgICAgPC9leGFtcGxlPgorICovCit2YXIgbmdOb25CaW5kYWJsZURpcmVjdGl2
ZSA9IG5nRGlyZWN0aXZlKHsgdGVybWluYWw6IHRydWUsIHByaW9yaXR5OiAxMDAwIH0pOworCisv
KiBnbG9iYWwganFMaXRlUmVtb3ZlICovCisKK3ZhciBuZ09wdGlvbnNNaW5FcnIgPSBtaW5FcnIo
J25nT3B0aW9ucycpOworCisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1lIG5nT3B0
aW9ucworICogQHJlc3RyaWN0IEEKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqCisgKiBUaGUgYG5n
T3B0aW9uc2AgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIGR5bmFtaWNhbGx5IGdlbmVyYXRlIGEg
bGlzdCBvZiBgPG9wdGlvbj5gCisgKiBlbGVtZW50cyBmb3IgdGhlIGA8c2VsZWN0PmAgZWxlbWVu
dCB1c2luZyB0aGUgYXJyYXkgb3Igb2JqZWN0IG9idGFpbmVkIGJ5IGV2YWx1YXRpbmcgdGhlCisg
KiBgbmdPcHRpb25zYCBjb21wcmVoZW5zaW9uIGV4cHJlc3Npb24uCisgKgorICogSW4gbWFueSBj
YXNlcywgYG5nUmVwZWF0YCBjYW4gYmUgdXNlZCBvbiBgPG9wdGlvbj5gIGVsZW1lbnRzIGluc3Rl
YWQgb2YgYG5nT3B0aW9uc2AgdG8gYWNoaWV2ZSBhCisgKiBzaW1pbGFyIHJlc3VsdC4gSG93ZXZl
ciwgYG5nT3B0aW9uc2AgcHJvdmlkZXMgc29tZSBiZW5lZml0cyBzdWNoIGFzIHJlZHVjaW5nIG1l
bW9yeSBhbmQKKyAqIGluY3JlYXNpbmcgc3BlZWQgYnkgbm90IGNyZWF0aW5nIGEgbmV3IHNjb3Bl
IGZvciBlYWNoIHJlcGVhdGVkIGluc3RhbmNlLCBhcyB3ZWxsIGFzIHByb3ZpZGluZworICogbW9y
ZSBmbGV4aWJpbGl0eSBpbiBob3cgdGhlIGA8c2VsZWN0PmAncyBtb2RlbCBpcyBhc3NpZ25lZCB2
aWEgdGhlIGBzZWxlY3RgICoqYGFzYCoqIHBhcnQgb2YgdGhlCisgKiBjb21wcmVoZW5zaW9uIGV4
cHJlc3Npb24uIGBuZ09wdGlvbnNgIHNob3VsZCBiZSB1c2VkIHdoZW4gdGhlIGA8c2VsZWN0PmAg
bW9kZWwgbmVlZHMgdG8gYmUgYm91bmQKKyAqICB0byBhIG5vbi1zdHJpbmcgdmFsdWUuIFRoaXMg
aXMgYmVjYXVzZSBhbiBvcHRpb24gZWxlbWVudCBjYW4gb25seSBiZSBib3VuZCB0byBzdHJpbmcg
dmFsdWVzIGF0CisgKiBwcmVzZW50LgorICoKKyAqIFdoZW4gYW4gaXRlbSBpbiB0aGUgYDxzZWxl
Y3Q+YCBtZW51IGlzIHNlbGVjdGVkLCB0aGUgYXJyYXkgZWxlbWVudCBvciBvYmplY3QgcHJvcGVy
dHkKKyAqIHJlcHJlc2VudGVkIGJ5IHRoZSBzZWxlY3RlZCBvcHRpb24gd2lsbCBiZSBib3VuZCB0
byB0aGUgbW9kZWwgaWRlbnRpZmllZCBieSB0aGUgYG5nTW9kZWxgCisgKiBkaXJlY3RpdmUuCisg
KgorICogT3B0aW9uYWxseSwgYSBzaW5nbGUgaGFyZC1jb2RlZCBgPG9wdGlvbj5gIGVsZW1lbnQs
IHdpdGggdGhlIHZhbHVlIHNldCB0byBhbiBlbXB0eSBzdHJpbmcsIGNhbgorICogYmUgbmVzdGVk
IGludG8gdGhlIGA8c2VsZWN0PmAgZWxlbWVudC4gVGhpcyBlbGVtZW50IHdpbGwgdGhlbiByZXBy
ZXNlbnQgdGhlIGBudWxsYCBvciAibm90IHNlbGVjdGVkIgorICogb3B0aW9uLiBTZWUgZXhhbXBs
ZSBiZWxvdyBmb3IgZGVtb25zdHJhdGlvbi4KKyAqCisgKiAjIyBDb21wbGV4IE1vZGVscyAob2Jq
ZWN0cyBvciBjb2xsZWN0aW9ucykKKyAqCisgKiAqKk5vdGU6KiogQnkgZGVmYXVsdCwgYG5nTW9k
ZWxgIHdhdGNoZXMgdGhlIG1vZGVsIGJ5IHJlZmVyZW5jZSwgbm90IHZhbHVlLiBUaGlzIGlzIGlt
cG9ydGFudCB3aGVuCisgKiBiaW5kaW5nIGFueSBpbnB1dCBkaXJlY3RpdmUgdG8gYSBtb2RlbCB0
aGF0IGlzIGFuIG9iamVjdCBvciBhIGNvbGxlY3Rpb24uCisgKgorICogU2luY2UgdGhpcyBpcyBh
IGNvbW1vbiBzaXR1YXRpb24gZm9yIGBuZ09wdGlvbnNgIHRoZSBkaXJlY3RpdmUgYWRkaXRpb25h
bGx5IHdhdGNoZXMgdGhlIG1vZGVsIHVzaW5nCisgKiBgJHdhdGNoQ29sbGVjdGlvbmAgd2hlbiB0
aGUgc2VsZWN0IGhhcyB0aGUgYG11bHRpcGxlYCBhdHRyaWJ1dGUgb3Igd2hlbiB0aGVyZSBpcyBh
IGB0cmFjayBieWAgY2xhdXNlIGluCisgKiB0aGUgb3B0aW9ucyBleHByZXNzaW9uLiBUaGlzIGFs
bG93cyBuZ09wdGlvbnMgdG8gdHJpZ2dlciBhIHJlLXJlbmRlcmluZyBvZiB0aGUgb3B0aW9ucyBl
dmVuIGlmIHRoZSBhY3R1YWwKKyAqIG9iamVjdC9jb2xsZWN0aW9uIGhhcyBub3QgY2hhbmdlZCBp
ZGVudGl0eSBidXQgb25seSBhIHByb3BlcnR5IG9uIHRoZSBvYmplY3Qgb3IgYW4gaXRlbSBpbiB0
aGUgY29sbGVjdGlvbgorICogY2hhbmdlcy4KKyAqCisgKiBOb3RlIHRoYXQgYCR3YXRjaENvbGxl
Y3Rpb25gIGRvZXMgYSBzaGFsbG93IGNvbXBhcmlzb24gb2YgdGhlIHByb3BlcnRpZXMgb2YgdGhl
IG9iamVjdCAob3IgdGhlIGl0ZW1zIGluIHRoZSBjb2xsZWN0aW9uCisgKiBpZiB0aGUgbW9kZWwg
aXMgYW4gYXJyYXkpLiBUaGlzIG1lYW5zIHRoYXQgY2hhbmdpbmcgYSBwcm9wZXJ0eSBkZWVwZXIg
aW5zaWRlIHRoZSBvYmplY3QvY29sbGVjdGlvbiB0aGF0IHRoZQorICogZmlyc3QgbGV2ZWwgd2ls
bCBub3QgdHJpZ2dlciBhIHJlLXJlbmRlcmluZy4KKyAqCisgKgorICogIyMgYHNlbGVjdGAgKipg
YXNgKioKKyAqCisgKiBVc2luZyBgc2VsZWN0YCAqKmBhc2AqKiB3aWxsIGJpbmQgdGhlIHJlc3Vs
dCBvZiB0aGUgYHNlbGVjdGAgZXhwcmVzc2lvbiB0byB0aGUgbW9kZWwsIGJ1dAorICogdGhlIHZh
bHVlIG9mIHRoZSBgPHNlbGVjdD5gIGFuZCBgPG9wdGlvbj5gIGh0bWwgZWxlbWVudHMgd2lsbCBi
ZSBlaXRoZXIgdGhlIGluZGV4IChmb3IgYXJyYXkgZGF0YSBzb3VyY2VzKQorICogb3IgcHJvcGVy
dHkgbmFtZSAoZm9yIG9iamVjdCBkYXRhIHNvdXJjZXMpIG9mIHRoZSB2YWx1ZSB3aXRoaW4gdGhl
IGNvbGxlY3Rpb24uIElmIGEgKipgdHJhY2sgYnlgKiogZXhwcmVzc2lvbgorICogaXMgdXNlZCwg
dGhlIHJlc3VsdCBvZiB0aGF0IGV4cHJlc3Npb24gd2lsbCBiZSBzZXQgYXMgdGhlIHZhbHVlIG9m
IHRoZSBgb3B0aW9uYCBhbmQgYHNlbGVjdGAgZWxlbWVudHMuCisgKgorICoKKyAqICMjIyBgc2Vs
ZWN0YCAqKmBhc2AqKiBhbmQgKipgdHJhY2sgYnlgKioKKyAqCisgKiA8ZGl2IGNsYXNzPSJhbGVy
dCBhbGVydC13YXJuaW5nIj4KKyAqIERvIG5vdCB1c2UgYHNlbGVjdGAgKipgYXNgKiogYW5kICoq
YHRyYWNrIGJ5YCoqIGluIHRoZSBzYW1lIGV4cHJlc3Npb24uIFRoZXkgYXJlIG5vdCBkZXNpZ25l
ZCB0byB3b3JrIHRvZ2V0aGVyLgorICogPC9kaXY+CisgKgorICogQ29uc2lkZXIgdGhlIGZvbGxv
d2luZyBleGFtcGxlOgorICoKKyAqIGBgYGh0bWwKKyAqIDxzZWxlY3Qgbmctb3B0aW9ucz0iaXRl
bS5zdWJJdGVtIGFzIGl0ZW0ubGFiZWwgZm9yIGl0ZW0gaW4gdmFsdWVzIHRyYWNrIGJ5IGl0ZW0u
aWQiIG5nLW1vZGVsPSJzZWxlY3RlZCI+CisgKiBgYGAKKyAqCisgKiBgYGBqcworICogJHNjb3Bl
LnZhbHVlcyA9IFt7CisgKiAgIGlkOiAxLAorICogICBsYWJlbDogJ2FMYWJlbCcsCisgKiAgIHN1
Ykl0ZW06IHsgbmFtZTogJ2FTdWJJdGVtJyB9CisgKiB9LCB7CisgKiAgIGlkOiAyLAorICogICBs
YWJlbDogJ2JMYWJlbCcsCisgKiAgIHN1Ykl0ZW06IHsgbmFtZTogJ2JTdWJJdGVtJyB9CisgKiB9
XTsKKyAqCisgKiAkc2NvcGUuc2VsZWN0ZWQgPSB7IG5hbWU6ICdhU3ViSXRlbScgfTsKKyAqIGBg
YAorICoKKyAqIFdpdGggdGhlIHB1cnBvc2Ugb2YgcHJlc2VydmluZyB0aGUgc2VsZWN0aW9uLCB0
aGUgKipgdHJhY2sgYnlgKiogZXhwcmVzc2lvbiBpcyBhbHdheXMgYXBwbGllZCB0byB0aGUgZWxl
bWVudAorICogb2YgdGhlIGRhdGEgc291cmNlICh0byBgaXRlbWAgaW4gdGhpcyBleGFtcGxlKS4g
VG8gY2FsY3VsYXRlIHdoZXRoZXIgYW4gZWxlbWVudCBpcyBzZWxlY3RlZCwgd2UgZG8gdGhlCisg
KiBmb2xsb3dpbmc6CisgKgorICogMS4gQXBwbHkgKipgdHJhY2sgYnlgKiogdG8gdGhlIGVsZW1l
bnRzIGluIHRoZSBhcnJheS4gSW4gdGhlIGV4YW1wbGU6IGBbMSwgMl1gCisgKiAyLiBBcHBseSAq
KmB0cmFjayBieWAqKiB0byB0aGUgYWxyZWFkeSBzZWxlY3RlZCB2YWx1ZSBpbiBgbmdNb2RlbGAu
CisgKiAgICBJbiB0aGUgZXhhbXBsZTogdGhpcyBpcyBub3QgcG9zc2libGUgYXMgKipgdHJhY2sg
YnlgKiogcmVmZXJzIHRvIGBpdGVtLmlkYCwgYnV0IHRoZSBzZWxlY3RlZAorICogICAgdmFsdWUg
ZnJvbSBgbmdNb2RlbGAgaXMgYHtuYW1lOiAnYVN1Ykl0ZW0nfWAsIHNvIHRoZSAqKmB0cmFjayBi
eWAqKiBleHByZXNzaW9uIGlzIGFwcGxpZWQgdG8KKyAqICAgIGEgd3Jvbmcgb2JqZWN0LCB0aGUg
c2VsZWN0ZWQgZWxlbWVudCBjYW4ndCBiZSBmb3VuZCwgYDxzZWxlY3Q+YCBpcyBhbHdheXMgcmVz
ZXQgdG8gdGhlICJub3QKKyAqICAgIHNlbGVjdGVkIiBvcHRpb24uCisgKgorICoKKyAqIEBwYXJh
bSB7c3RyaW5nfSBuZ01vZGVsIEFzc2lnbmFibGUgYW5ndWxhciBleHByZXNzaW9uIHRvIGRhdGEt
YmluZCB0by4KKyAqIEBwYXJhbSB7c3RyaW5nPX0gbmFtZSBQcm9wZXJ0eSBuYW1lIG9mIHRoZSBm
b3JtIHVuZGVyIHdoaWNoIHRoZSBjb250cm9sIGlzIHB1Ymxpc2hlZC4KKyAqIEBwYXJhbSB7c3Ry
aW5nPX0gcmVxdWlyZWQgVGhlIGNvbnRyb2wgaXMgY29uc2lkZXJlZCB2YWxpZCBvbmx5IGlmIHZh
bHVlIGlzIGVudGVyZWQuCisgKiBAcGFyYW0ge3N0cmluZz19IG5nUmVxdWlyZWQgQWRkcyBgcmVx
dWlyZWRgIGF0dHJpYnV0ZSBhbmQgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGNvbnN0cmFpbnQgdG8K
KyAqICAgIHRoZSBlbGVtZW50IHdoZW4gdGhlIG5nUmVxdWlyZWQgZXhwcmVzc2lvbiBldmFsdWF0
ZXMgdG8gdHJ1ZS4gVXNlIGBuZ1JlcXVpcmVkYCBpbnN0ZWFkIG9mCisgKiAgICBgcmVxdWlyZWRg
IHdoZW4geW91IHdhbnQgdG8gZGF0YS1iaW5kIHRvIHRoZSBgcmVxdWlyZWRgIGF0dHJpYnV0ZS4K
KyAqIEBwYXJhbSB7Y29tcHJlaGVuc2lvbl9leHByZXNzaW9uPX0gbmdPcHRpb25zIGluIG9uZSBv
ZiB0aGUgZm9sbG93aW5nIGZvcm1zOgorICoKKyAqICAgKiBmb3IgYXJyYXkgZGF0YSBzb3VyY2Vz
OgorICogICAgICogYGxhYmVsYCAqKmBmb3JgKiogYHZhbHVlYCAqKmBpbmAqKiBgYXJyYXlgCisg
KiAgICAgKiBgc2VsZWN0YCAqKmBhc2AqKiBgbGFiZWxgICoqYGZvcmAqKiBgdmFsdWVgICoqYGlu
YCoqIGBhcnJheWAKKyAqICAgICAqIGBsYWJlbGAgKipgZ3JvdXAgYnlgKiogYGdyb3VwYCAqKmBm
b3JgKiogYHZhbHVlYCAqKmBpbmAqKiBgYXJyYXlgCisgKiAgICAgKiBgbGFiZWxgICoqYGRpc2Fi
bGUgd2hlbmAqKiBgZGlzYWJsZWAgKipgZm9yYCoqIGB2YWx1ZWAgKipgaW5gKiogYGFycmF5YAor
ICogICAgICogYGxhYmVsYCAqKmBncm91cCBieWAqKiBgZ3JvdXBgICoqYGZvcmAqKiBgdmFsdWVg
ICoqYGluYCoqIGBhcnJheWAgKipgdHJhY2sgYnlgKiogYHRyYWNrZXhwcmAKKyAqICAgICAqIGBs
YWJlbGAgKipgZGlzYWJsZSB3aGVuYCoqIGBkaXNhYmxlYCAqKmBmb3JgKiogYHZhbHVlYCAqKmBp
bmAqKiBgYXJyYXlgICoqYHRyYWNrIGJ5YCoqIGB0cmFja2V4cHJgCisgKiAgICAgKiBgbGFiZWxg
ICoqYGZvcmAqKiBgdmFsdWVgICoqYGluYCoqIGBhcnJheWAgfCBvcmRlckJ5OmBvcmRlcmV4cHJg
ICoqYHRyYWNrIGJ5YCoqIGB0cmFja2V4cHJgCisgKiAgICAgICAgKGZvciBpbmNsdWRpbmcgYSBm
aWx0ZXIgd2l0aCBgdHJhY2sgYnlgKQorICogICAqIGZvciBvYmplY3QgZGF0YSBzb3VyY2VzOgor
ICogICAgICogYGxhYmVsYCAqKmBmb3IgKGAqKmBrZXlgICoqYCxgKiogYHZhbHVlYCoqYCkgaW5g
KiogYG9iamVjdGAKKyAqICAgICAqIGBzZWxlY3RgICoqYGFzYCoqIGBsYWJlbGAgKipgZm9yIChg
Kipga2V5YCAqKmAsYCoqIGB2YWx1ZWAqKmApIGluYCoqIGBvYmplY3RgCisgKiAgICAgKiBgbGFi
ZWxgICoqYGdyb3VwIGJ5YCoqIGBncm91cGAgKipgZm9yIChgKipga2V5YCoqYCxgKiogYHZhbHVl
YCoqYCkgaW5gKiogYG9iamVjdGAKKyAqICAgICAqIGBsYWJlbGAgKipgZGlzYWJsZSB3aGVuYCoq
IGBkaXNhYmxlYCAqKmBmb3IgKGAqKmBrZXlgKipgLGAqKiBgdmFsdWVgKipgKSBpbmAqKiBgb2Jq
ZWN0YAorICogICAgICogYHNlbGVjdGAgKipgYXNgKiogYGxhYmVsYCAqKmBncm91cCBieWAqKiBg
Z3JvdXBgCisgKiAgICAgICAgICoqYGZvcmAgYChgKipga2V5YCoqYCxgKiogYHZhbHVlYCoqYCkg
aW5gKiogYG9iamVjdGAKKyAqICAgICAqIGBzZWxlY3RgICoqYGFzYCoqIGBsYWJlbGAgKipgZGlz
YWJsZSB3aGVuYCoqIGBkaXNhYmxlYAorICogICAgICAgICAqKmBmb3JgIGAoYCoqYGtleWAqKmAs
YCoqIGB2YWx1ZWAqKmApIGluYCoqIGBvYmplY3RgCisgKgorICogV2hlcmU6CisgKgorICogICAq
IGBhcnJheWAgLyBgb2JqZWN0YDogYW4gZXhwcmVzc2lvbiB3aGljaCBldmFsdWF0ZXMgdG8gYW4g
YXJyYXkgLyBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLgorICogICAqIGB2YWx1ZWA6IGxvY2FsIHZh
cmlhYmxlIHdoaWNoIHdpbGwgcmVmZXIgdG8gZWFjaCBpdGVtIGluIHRoZSBgYXJyYXlgIG9yIGVh
Y2ggcHJvcGVydHkgdmFsdWUKKyAqICAgICAgb2YgYG9iamVjdGAgZHVyaW5nIGl0ZXJhdGlvbi4K
KyAqICAgKiBga2V5YDogbG9jYWwgdmFyaWFibGUgd2hpY2ggd2lsbCByZWZlciB0byBhIHByb3Bl
cnR5IG5hbWUgaW4gYG9iamVjdGAgZHVyaW5nIGl0ZXJhdGlvbi4KKyAqICAgKiBgbGFiZWxgOiBU
aGUgcmVzdWx0IG9mIHRoaXMgZXhwcmVzc2lvbiB3aWxsIGJlIHRoZSBsYWJlbCBmb3IgYDxvcHRp
b24+YCBlbGVtZW50LiBUaGUKKyAqICAgICBgZXhwcmVzc2lvbmAgd2lsbCBtb3N0IGxpa2VseSBy
ZWZlciB0byB0aGUgYHZhbHVlYCB2YXJpYWJsZSAoZS5nLiBgdmFsdWUucHJvcGVydHlOYW1lYCku
CisgKiAgICogYHNlbGVjdGA6IFRoZSByZXN1bHQgb2YgdGhpcyBleHByZXNzaW9uIHdpbGwgYmUg
Ym91bmQgdG8gdGhlIG1vZGVsIG9mIHRoZSBwYXJlbnQgYDxzZWxlY3Q+YAorICogICAgICBlbGVt
ZW50LiBJZiBub3Qgc3BlY2lmaWVkLCBgc2VsZWN0YCBleHByZXNzaW9uIHdpbGwgZGVmYXVsdCB0
byBgdmFsdWVgLgorICogICAqIGBncm91cGA6IFRoZSByZXN1bHQgb2YgdGhpcyBleHByZXNzaW9u
IHdpbGwgYmUgdXNlZCB0byBncm91cCBvcHRpb25zIHVzaW5nIHRoZSBgPG9wdGdyb3VwPmAKKyAq
ICAgICAgRE9NIGVsZW1lbnQuCisgKiAgICogYGRpc2FibGVgOiBUaGUgcmVzdWx0IG9mIHRoaXMg
ZXhwcmVzc2lvbiB3aWxsIGJlIHVzZWQgdG8gZGlzYWJsZSB0aGUgcmVuZGVyZWQgYDxvcHRpb24+
YAorICogICAgICBlbGVtZW50LiBSZXR1cm4gYHRydWVgIHRvIGRpc2FibGUuCisgKiAgICogYHRy
YWNrZXhwcmA6IFVzZWQgd2hlbiB3b3JraW5nIHdpdGggYW4gYXJyYXkgb2Ygb2JqZWN0cy4gVGhl
IHJlc3VsdCBvZiB0aGlzIGV4cHJlc3Npb24gd2lsbCBiZQorICogICAgICB1c2VkIHRvIGlkZW50
aWZ5IHRoZSBvYmplY3RzIGluIHRoZSBhcnJheS4gVGhlIGB0cmFja2V4cHJgIHdpbGwgbW9zdCBs
aWtlbHkgcmVmZXIgdG8gdGhlCisgKiAgICAgYHZhbHVlYCB2YXJpYWJsZSAoZS5nLiBgdmFsdWUu
cHJvcGVydHlOYW1lYCkuIFdpdGggdGhpcyB0aGUgc2VsZWN0aW9uIGlzIHByZXNlcnZlZAorICog
ICAgICBldmVuIHdoZW4gdGhlIG9wdGlvbnMgYXJlIHJlY3JlYXRlZCAoZS5nLiByZWxvYWRlZCBm
cm9tIHRoZSBzZXJ2ZXIpLgorICoKKyAqIEBleGFtcGxlCisgICAgPGV4YW1wbGUgbW9kdWxlPSJz
ZWxlY3RFeGFtcGxlIj4KKyAgICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICAgICA8
c2NyaXB0PgorICAgICAgICBhbmd1bGFyLm1vZHVsZSgnc2VsZWN0RXhhbXBsZScsIFtdKQorICAg
ICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rp
b24oJHNjb3BlKSB7CisgICAgICAgICAgICAkc2NvcGUuY29sb3JzID0gWworICAgICAgICAgICAg
ICB7bmFtZTonYmxhY2snLCBzaGFkZTonZGFyayd9LAorICAgICAgICAgICAgICB7bmFtZTond2hp
dGUnLCBzaGFkZTonbGlnaHQnLCBub3RBbk9wdGlvbjogdHJ1ZX0sCisgICAgICAgICAgICAgIHtu
YW1lOidyZWQnLCBzaGFkZTonZGFyayd9LAorICAgICAgICAgICAgICB7bmFtZTonYmx1ZScsIHNo
YWRlOidkYXJrJywgbm90QW5PcHRpb246IHRydWV9LAorICAgICAgICAgICAgICB7bmFtZToneWVs
bG93Jywgc2hhZGU6J2xpZ2h0Jywgbm90QW5PcHRpb246IGZhbHNlfQorICAgICAgICAgICAgXTsK
KyAgICAgICAgICAgICRzY29wZS5teUNvbG9yID0gJHNjb3BlLmNvbG9yc1syXTsgLy8gcmVkCisg
ICAgICAgICAgfV0pOworICAgICAgICA8L3NjcmlwdD4KKyAgICAgICAgPGRpdiBuZy1jb250cm9s
bGVyPSJFeGFtcGxlQ29udHJvbGxlciI+CisgICAgICAgICAgPHVsPgorICAgICAgICAgICAgPGxp
IG5nLXJlcGVhdD0iY29sb3IgaW4gY29sb3JzIj4KKyAgICAgICAgICAgICAgPGxhYmVsPk5hbWU6
IDxpbnB1dCBuZy1tb2RlbD0iY29sb3IubmFtZSI+PC9sYWJlbD4KKyAgICAgICAgICAgICAgPGxh
YmVsPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmctbW9kZWw9ImNvbG9yLm5vdEFuT3B0aW9uIj4g
RGlzYWJsZWQ/PC9sYWJlbD4KKyAgICAgICAgICAgICAgPGJ1dHRvbiBuZy1jbGljaz0iY29sb3Jz
LnNwbGljZSgkaW5kZXgsIDEpIiBhcmlhLWxhYmVsPSJSZW1vdmUiPlg8L2J1dHRvbj4KKyAgICAg
ICAgICAgIDwvbGk+CisgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgIDxidXR0b24gbmct
Y2xpY2s9ImNvbG9ycy5wdXNoKHt9KSI+YWRkPC9idXR0b24+CisgICAgICAgICAgICA8L2xpPgor
ICAgICAgICAgIDwvdWw+CisgICAgICAgICAgPGhyLz4KKyAgICAgICAgICA8bGFiZWw+Q29sb3Ig
KG51bGwgbm90IGFsbG93ZWQpOgorICAgICAgICAgICAgPHNlbGVjdCBuZy1tb2RlbD0ibXlDb2xv
ciIgbmctb3B0aW9ucz0iY29sb3IubmFtZSBmb3IgY29sb3IgaW4gY29sb3JzIj48L3NlbGVjdD4K
KyAgICAgICAgICA8L2xhYmVsPjxici8+CisgICAgICAgICAgPGxhYmVsPkNvbG9yIChudWxsIGFs
bG93ZWQpOgorICAgICAgICAgIDxzcGFuICBjbGFzcz0ibnVsbGFibGUiPgorICAgICAgICAgICAg
PHNlbGVjdCBuZy1tb2RlbD0ibXlDb2xvciIgbmctb3B0aW9ucz0iY29sb3IubmFtZSBmb3IgY29s
b3IgaW4gY29sb3JzIj4KKyAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iIj4tLSBjaG9vc2Ug
Y29sb3IgLS08L29wdGlvbj4KKyAgICAgICAgICAgIDwvc2VsZWN0PgorICAgICAgICAgIDwvc3Bh
bj48L2xhYmVsPjxici8+CisKKyAgICAgICAgICA8bGFiZWw+Q29sb3IgZ3JvdXBlZCBieSBzaGFk
ZToKKyAgICAgICAgICAgIDxzZWxlY3QgbmctbW9kZWw9Im15Q29sb3IiIG5nLW9wdGlvbnM9ImNv
bG9yLm5hbWUgZ3JvdXAgYnkgY29sb3Iuc2hhZGUgZm9yIGNvbG9yIGluIGNvbG9ycyI+CisgICAg
ICAgICAgICA8L3NlbGVjdD4KKyAgICAgICAgICA8L2xhYmVsPjxici8+CisKKyAgICAgICAgICA8
bGFiZWw+Q29sb3IgZ3JvdXBlZCBieSBzaGFkZSwgd2l0aCBzb21lIGRpc2FibGVkOgorICAgICAg
ICAgICAgPHNlbGVjdCBuZy1tb2RlbD0ibXlDb2xvciIKKyAgICAgICAgICAgICAgICAgIG5nLW9w
dGlvbnM9ImNvbG9yLm5hbWUgZ3JvdXAgYnkgY29sb3Iuc2hhZGUgZGlzYWJsZSB3aGVuIGNvbG9y
Lm5vdEFuT3B0aW9uIGZvciBjb2xvciBpbiBjb2xvcnMiPgorICAgICAgICAgICAgPC9zZWxlY3Q+
CisgICAgICAgICAgPC9sYWJlbD48YnIvPgorCisKKworICAgICAgICAgIFNlbGVjdCA8YnV0dG9u
IG5nLWNsaWNrPSJteUNvbG9yID0geyBuYW1lOidub3QgaW4gbGlzdCcsIHNoYWRlOiAnb3RoZXIn
IH0iPmJvZ3VzPC9idXR0b24+LgorICAgICAgICAgIDxici8+CisgICAgICAgICAgPGhyLz4KKyAg
ICAgICAgICBDdXJyZW50bHkgc2VsZWN0ZWQ6IHt7IHtzZWxlY3RlZF9jb2xvcjpteUNvbG9yfSB9
fQorICAgICAgICAgIDxkaXYgc3R5bGU9ImJvcmRlcjpzb2xpZCAxcHggYmxhY2s7IGhlaWdodDoy
MHB4IgorICAgICAgICAgICAgICAgbmctc3R5bGU9InsnYmFja2dyb3VuZC1jb2xvcic6bXlDb2xv
ci5uYW1lfSI+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgPC9maWxl
PgorICAgICAgPGZpbGUgbmFtZT0icHJvdHJhY3Rvci5qcyIgdHlwZT0icHJvdHJhY3RvciI+Cisg
ICAgICAgICBpdCgnc2hvdWxkIGNoZWNrIG5nLW9wdGlvbnMnLCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGluZygne3NlbGVjdGVkX2NvbG9yOm15Q29sb3J9
JykpLmdldFRleHQoKSkudG9NYXRjaCgncmVkJyk7CisgICAgICAgICAgIGVsZW1lbnQuYWxsKGJ5
Lm1vZGVsKCdteUNvbG9yJykpLmZpcnN0KCkuY2xpY2soKTsKKyAgICAgICAgICAgZWxlbWVudC5h
bGwoYnkuY3NzKCdzZWxlY3RbbmctbW9kZWw9Im15Q29sb3IiXSBvcHRpb24nKSkuZmlyc3QoKS5j
bGljaygpOworICAgICAgICAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKCd7c2VsZWN0ZWRf
Y29sb3I6bXlDb2xvcn0nKSkuZ2V0VGV4dCgpKS50b01hdGNoKCdibGFjaycpOworICAgICAgICAg
ICBlbGVtZW50KGJ5LmNzcygnLm51bGxhYmxlIHNlbGVjdFtuZy1tb2RlbD0ibXlDb2xvciJdJykp
LmNsaWNrKCk7CisgICAgICAgICAgIGVsZW1lbnQuYWxsKGJ5LmNzcygnLm51bGxhYmxlIHNlbGVj
dFtuZy1tb2RlbD0ibXlDb2xvciJdIG9wdGlvbicpKS5maXJzdCgpLmNsaWNrKCk7CisgICAgICAg
ICAgIGV4cGVjdChlbGVtZW50KGJ5LmJpbmRpbmcoJ3tzZWxlY3RlZF9jb2xvcjpteUNvbG9yfScp
KS5nZXRUZXh0KCkpLnRvTWF0Y2goJ251bGwnKTsKKyAgICAgICAgIH0pOworICAgICAgPC9maWxl
PgorICAgIDwvZXhhbXBsZT4KKyAqLworCisvLyBqc2hpbnQgbWF4bGVuOiBmYWxzZQorLy8gICAg
ICAgICAgICAgICAgICAgICAvLzAwMDAxMTExMTExMTExMDAwMDAwMDAwMDAyMjIyMjIyMjIyMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMzMzMzMzMzMzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NDQ0
NDQ0NDQ0NDAwMDAwMDAwMDAwMDA1NTU1NTU1NTU1NTU1NTUwMDAwMDAwMDA2NjY2NjY2NjY2NjY2
NjYwMDAwMDAwNzc3Nzc3Nzc3Nzc3Nzc3MDAwMDAwMDAwMDAwMDAwODg4ODg4ODg4ODAwMDAwMDAw
MDAwMDAwMDAwMDA5OTk5OTk5OTk5Cit2YXIgTkdfT1BUSU9OU19SRUdFWFAgPSAvXlxzKihbXHNc
U10rPykoPzpccythc1xzKyhbXHNcU10rPykpPyg/OlxzK2dyb3VwXHMrYnlccysoW1xzXFNdKz8p
KT8oPzpccytkaXNhYmxlXHMrd2hlblxzKyhbXHNcU10rPykpP1xzK2ZvclxzKyg/OihbXCRcd11b
XCRcd10qKXwoPzpcKFxzKihbXCRcd11bXCRcd10qKVxzKixccyooW1wkXHddW1wkXHddKilccypc
KSkpXHMraW5ccysoW1xzXFNdKz8pKD86XHMrdHJhY2tccytieVxzKyhbXHNcU10rPykpPyQvOwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTogdmFsdWUgZXhwcmVzc2lvbiAodmFsdWVGbikK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIDI6IGxhYmVsIGV4cHJlc3Npb24gKGRpc3BsYXlG
bikKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIDM6IGdyb3VwIGJ5IGV4cHJlc3Npb24gKGdy
b3VwQnlGbikKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIDQ6IGRpc2FibGUgd2hlbiBleHBy
ZXNzaW9uIChkaXNhYmxlV2hlbkZuKQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gNTogYXJy
YXkgaXRlbSB2YXJpYWJsZSBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAvLyA2OiBvYmpl
Y3QgaXRlbSBrZXkgdmFyaWFibGUgbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gNzog
b2JqZWN0IGl0ZW0gdmFsdWUgdmFyaWFibGUgbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gODogY29sbGVjdGlvbiBleHByZXNzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAvLyA5
OiB0cmFjayBieSBleHByZXNzaW9uCisvLyBqc2hpbnQgbWF4bGVuOiAxMDAKKworCit2YXIgbmdP
cHRpb25zRGlyZWN0aXZlID0gWyckY29tcGlsZScsICckcGFyc2UnLCBmdW5jdGlvbigkY29tcGls
ZSwgJHBhcnNlKSB7CisKKyAgZnVuY3Rpb24gcGFyc2VPcHRpb25zRXhwcmVzc2lvbihvcHRpb25z
RXhwLCBzZWxlY3RFbGVtZW50LCBzY29wZSkgeworCisgICAgdmFyIG1hdGNoID0gb3B0aW9uc0V4
cC5tYXRjaChOR19PUFRJT05TX1JFR0VYUCk7CisgICAgaWYgKCEobWF0Y2gpKSB7CisgICAgICB0
aHJvdyBuZ09wdGlvbnNNaW5FcnIoJ2lleHAnLAorICAgICAgICAiRXhwZWN0ZWQgZXhwcmVzc2lv
biBpbiBmb3JtIG9mICIgKworICAgICAgICAiJ19zZWxlY3RfIChhcyBfbGFiZWxfKT8gZm9yIChf
a2V5XywpP192YWx1ZV8gaW4gX2NvbGxlY3Rpb25fJyIgKworICAgICAgICAiIGJ1dCBnb3QgJ3sw
fScuIEVsZW1lbnQ6IHsxfSIsCisgICAgICAgIG9wdGlvbnNFeHAsIHN0YXJ0aW5nVGFnKHNlbGVj
dEVsZW1lbnQpKTsKKyAgICB9CisKKyAgICAvLyBFeHRyYWN0IHRoZSBwYXJ0cyBmcm9tIHRoZSBu
Z09wdGlvbnMgZXhwcmVzc2lvbgorCisgICAgLy8gVGhlIHZhcmlhYmxlIG5hbWUgZm9yIHRoZSB2
YWx1ZSBvZiB0aGUgaXRlbSBpbiB0aGUgY29sbGVjdGlvbgorICAgIHZhciB2YWx1ZU5hbWUgPSBt
YXRjaFs1XSB8fCBtYXRjaFs3XTsKKyAgICAvLyBUaGUgdmFyaWFibGUgbmFtZSBmb3IgdGhlIGtl
eSBvZiB0aGUgaXRlbSBpbiB0aGUgY29sbGVjdGlvbgorICAgIHZhciBrZXlOYW1lID0gbWF0Y2hb
Nl07CisKKyAgICAvLyBBbiBleHByZXNzaW9uIHRoYXQgZ2VuZXJhdGVzIHRoZSB2aWV3VmFsdWUg
Zm9yIGFuIG9wdGlvbiBpZiB0aGVyZSBpcyBhIGxhYmVsIGV4cHJlc3Npb24KKyAgICB2YXIgc2Vs
ZWN0QXMgPSAvIGFzIC8udGVzdChtYXRjaFswXSkgJiYgbWF0Y2hbMV07CisgICAgLy8gQW4gZXhw
cmVzc2lvbiB0aGF0IGlzIHVzZWQgdG8gdHJhY2sgdGhlIGlkIG9mIGVhY2ggb2JqZWN0IGluIHRo
ZSBvcHRpb25zIGNvbGxlY3Rpb24KKyAgICB2YXIgdHJhY2tCeSA9IG1hdGNoWzldOworICAgIC8v
IEFuIGV4cHJlc3Npb24gdGhhdCBnZW5lcmF0ZXMgdGhlIHZpZXdWYWx1ZSBmb3IgYW4gb3B0aW9u
IGlmIHRoZXJlIGlzIG5vIGxhYmVsIGV4cHJlc3Npb24KKyAgICB2YXIgdmFsdWVGbiA9ICRwYXJz
ZShtYXRjaFsyXSA/IG1hdGNoWzFdIDogdmFsdWVOYW1lKTsKKyAgICB2YXIgc2VsZWN0QXNGbiA9
IHNlbGVjdEFzICYmICRwYXJzZShzZWxlY3RBcyk7CisgICAgdmFyIHZpZXdWYWx1ZUZuID0gc2Vs
ZWN0QXNGbiB8fCB2YWx1ZUZuOworICAgIHZhciB0cmFja0J5Rm4gPSB0cmFja0J5ICYmICRwYXJz
ZSh0cmFja0J5KTsKKworICAgIC8vIEdldCB0aGUgdmFsdWUgYnkgd2hpY2ggd2UgYXJlIGdvaW5n
IHRvIHRyYWNrIHRoZSBvcHRpb24KKyAgICAvLyBpZiB3ZSBoYXZlIGEgdHJhY2tGbiB0aGVuIHVz
ZSB0aGF0IChwYXNzaW5nIHNjb3BlIGFuZCBsb2NhbHMpCisgICAgLy8gb3RoZXJ3aXNlIGp1c3Qg
aGFzaCB0aGUgZ2l2ZW4gdmlld1ZhbHVlCisgICAgdmFyIGdldFRyYWNrQnlWYWx1ZUZuID0gdHJh
Y2tCeSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih2YWx1ZSwgbG9j
YWxzKSB7IHJldHVybiB0cmFja0J5Rm4oc2NvcGUsIGxvY2Fscyk7IH0gOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0SGFzaE9mVmFsdWUodmFsdWUpIHsgcmV0dXJu
IGhhc2hLZXkodmFsdWUpOyB9OworICAgIHZhciBnZXRUcmFja0J5VmFsdWUgPSBmdW5jdGlvbih2
YWx1ZSwga2V5KSB7CisgICAgICByZXR1cm4gZ2V0VHJhY2tCeVZhbHVlRm4odmFsdWUsIGdldExv
Y2Fscyh2YWx1ZSwga2V5KSk7CisgICAgfTsKKworICAgIHZhciBkaXNwbGF5Rm4gPSAkcGFyc2Uo
bWF0Y2hbMl0gfHwgbWF0Y2hbMV0pOworICAgIHZhciBncm91cEJ5Rm4gPSAkcGFyc2UobWF0Y2hb
M10gfHwgJycpOworICAgIHZhciBkaXNhYmxlV2hlbkZuID0gJHBhcnNlKG1hdGNoWzRdIHx8ICcn
KTsKKyAgICB2YXIgdmFsdWVzRm4gPSAkcGFyc2UobWF0Y2hbOF0pOworCisgICAgdmFyIGxvY2Fs
cyA9IHt9OworICAgIHZhciBnZXRMb2NhbHMgPSBrZXlOYW1lID8gZnVuY3Rpb24odmFsdWUsIGtl
eSkgeworICAgICAgbG9jYWxzW2tleU5hbWVdID0ga2V5OworICAgICAgbG9jYWxzW3ZhbHVlTmFt
ZV0gPSB2YWx1ZTsKKyAgICAgIHJldHVybiBsb2NhbHM7CisgICAgfSA6IGZ1bmN0aW9uKHZhbHVl
KSB7CisgICAgICBsb2NhbHNbdmFsdWVOYW1lXSA9IHZhbHVlOworICAgICAgcmV0dXJuIGxvY2Fs
czsKKyAgICB9OworCisKKyAgICBmdW5jdGlvbiBPcHRpb24oc2VsZWN0VmFsdWUsIHZpZXdWYWx1
ZSwgbGFiZWwsIGdyb3VwLCBkaXNhYmxlZCkgeworICAgICAgdGhpcy5zZWxlY3RWYWx1ZSA9IHNl
bGVjdFZhbHVlOworICAgICAgdGhpcy52aWV3VmFsdWUgPSB2aWV3VmFsdWU7CisgICAgICB0aGlz
LmxhYmVsID0gbGFiZWw7CisgICAgICB0aGlzLmdyb3VwID0gZ3JvdXA7CisgICAgICB0aGlzLmRp
c2FibGVkID0gZGlzYWJsZWQ7CisgICAgfQorCisgICAgZnVuY3Rpb24gZ2V0T3B0aW9uVmFsdWVz
S2V5cyhvcHRpb25WYWx1ZXMpIHsKKyAgICAgIHZhciBvcHRpb25WYWx1ZXNLZXlzOworCisgICAg
ICBpZiAoIWtleU5hbWUgJiYgaXNBcnJheUxpa2Uob3B0aW9uVmFsdWVzKSkgeworICAgICAgICBv
cHRpb25WYWx1ZXNLZXlzID0gb3B0aW9uVmFsdWVzOworICAgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gaWYgb2JqZWN0LCBleHRyYWN0IGtleXMsIGluIGVudW1lcmF0aW9uIG9yZGVyLCB1bnNvcnRl
ZAorICAgICAgICBvcHRpb25WYWx1ZXNLZXlzID0gW107CisgICAgICAgIGZvciAodmFyIGl0ZW1L
ZXkgaW4gb3B0aW9uVmFsdWVzKSB7CisgICAgICAgICAgaWYgKG9wdGlvblZhbHVlcy5oYXNPd25Q
cm9wZXJ0eShpdGVtS2V5KSAmJiBpdGVtS2V5LmNoYXJBdCgwKSAhPT0gJyQnKSB7CisgICAgICAg
ICAgICBvcHRpb25WYWx1ZXNLZXlzLnB1c2goaXRlbUtleSk7CisgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICB9CisgICAgICByZXR1cm4gb3B0aW9uVmFsdWVzS2V5czsKKyAgICB9CisKKyAg
ICByZXR1cm4geworICAgICAgdHJhY2tCeTogdHJhY2tCeSwKKyAgICAgIGdldFRyYWNrQnlWYWx1
ZTogZ2V0VHJhY2tCeVZhbHVlLAorICAgICAgZ2V0V2F0Y2hhYmxlczogJHBhcnNlKHZhbHVlc0Zu
LCBmdW5jdGlvbihvcHRpb25WYWx1ZXMpIHsKKyAgICAgICAgLy8gQ3JlYXRlIGEgY29sbGVjdGlv
biBvZiB0aGluZ3MgdGhhdCB3ZSB3b3VsZCBsaWtlIHRvIHdhdGNoICh3YXRjaGVkQXJyYXkpCisg
ICAgICAgIC8vIHNvIHRoYXQgdGhleSBjYW4gYWxsIGJlIHdhdGNoZWQgdXNpbmcgYSBzaW5nbGUg
JHdhdGNoQ29sbGVjdGlvbgorICAgICAgICAvLyB0aGF0IG9ubHkgcnVucyB0aGUgaGFuZGxlciBv
bmNlIGlmIGFueXRoaW5nIGNoYW5nZXMKKyAgICAgICAgdmFyIHdhdGNoZWRBcnJheSA9IFtdOwor
ICAgICAgICBvcHRpb25WYWx1ZXMgPSBvcHRpb25WYWx1ZXMgfHwgW107CisKKyAgICAgICAgdmFy
IG9wdGlvblZhbHVlc0tleXMgPSBnZXRPcHRpb25WYWx1ZXNLZXlzKG9wdGlvblZhbHVlcyk7Cisg
ICAgICAgIHZhciBvcHRpb25WYWx1ZXNMZW5ndGggPSBvcHRpb25WYWx1ZXNLZXlzLmxlbmd0aDsK
KyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG9wdGlvblZhbHVlc0xlbmd0aDsg
aW5kZXgrKykgeworICAgICAgICAgIHZhciBrZXkgPSAob3B0aW9uVmFsdWVzID09PSBvcHRpb25W
YWx1ZXNLZXlzKSA/IGluZGV4IDogb3B0aW9uVmFsdWVzS2V5c1tpbmRleF07CisgICAgICAgICAg
dmFyIHZhbHVlID0gb3B0aW9uVmFsdWVzW2tleV07CisKKyAgICAgICAgICB2YXIgbG9jYWxzID0g
Z2V0TG9jYWxzKG9wdGlvblZhbHVlc1trZXldLCBrZXkpOworICAgICAgICAgIHZhciBzZWxlY3RW
YWx1ZSA9IGdldFRyYWNrQnlWYWx1ZUZuKG9wdGlvblZhbHVlc1trZXldLCBsb2NhbHMpOworICAg
ICAgICAgIHdhdGNoZWRBcnJheS5wdXNoKHNlbGVjdFZhbHVlKTsKKworICAgICAgICAgIC8vIE9u
bHkgbmVlZCB0byB3YXRjaCB0aGUgZGlzcGxheUZuIGlmIHRoZXJlIGlzIGEgc3BlY2lmaWMgbGFi
ZWwgZXhwcmVzc2lvbgorICAgICAgICAgIGlmIChtYXRjaFsyXSB8fCBtYXRjaFsxXSkgeworICAg
ICAgICAgICAgdmFyIGxhYmVsID0gZGlzcGxheUZuKHNjb3BlLCBsb2NhbHMpOworICAgICAgICAg
ICAgd2F0Y2hlZEFycmF5LnB1c2gobGFiZWwpOworICAgICAgICAgIH0KKworICAgICAgICAgIC8v
IE9ubHkgbmVlZCB0byB3YXRjaCB0aGUgZGlzYWJsZVdoZW5GbiBpZiB0aGVyZSBpcyBhIHNwZWNp
ZmljIGRpc2FibGUgZXhwcmVzc2lvbgorICAgICAgICAgIGlmIChtYXRjaFs0XSkgeworICAgICAg
ICAgICAgdmFyIGRpc2FibGVXaGVuID0gZGlzYWJsZVdoZW5GbihzY29wZSwgbG9jYWxzKTsKKyAg
ICAgICAgICAgIHdhdGNoZWRBcnJheS5wdXNoKGRpc2FibGVXaGVuKTsKKyAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHdhdGNoZWRBcnJheTsKKyAgICAgIH0pLAorCisgICAg
ICBnZXRPcHRpb25zOiBmdW5jdGlvbigpIHsKKworICAgICAgICB2YXIgb3B0aW9uSXRlbXMgPSBb
XTsKKyAgICAgICAgdmFyIHNlbGVjdFZhbHVlTWFwID0ge307CisKKyAgICAgICAgLy8gVGhlIG9w
dGlvbiB2YWx1ZXMgd2VyZSBhbHJlYWR5IGNvbXB1dGVkIGluIHRoZSBgZ2V0V2F0Y2hhYmxlc2Ag
Zm4sCisgICAgICAgIC8vIHdoaWNoIG11c3QgaGF2ZSBiZWVuIGNhbGxlZCB0byB0cmlnZ2VyIGBn
ZXRPcHRpb25zYAorICAgICAgICB2YXIgb3B0aW9uVmFsdWVzID0gdmFsdWVzRm4oc2NvcGUpIHx8
IFtdOworICAgICAgICB2YXIgb3B0aW9uVmFsdWVzS2V5cyA9IGdldE9wdGlvblZhbHVlc0tleXMo
b3B0aW9uVmFsdWVzKTsKKyAgICAgICAgdmFyIG9wdGlvblZhbHVlc0xlbmd0aCA9IG9wdGlvblZh
bHVlc0tleXMubGVuZ3RoOworCisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBv
cHRpb25WYWx1ZXNMZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICB2YXIga2V5ID0gKG9wdGlv
blZhbHVlcyA9PT0gb3B0aW9uVmFsdWVzS2V5cykgPyBpbmRleCA6IG9wdGlvblZhbHVlc0tleXNb
aW5kZXhdOworICAgICAgICAgIHZhciB2YWx1ZSA9IG9wdGlvblZhbHVlc1trZXldOworICAgICAg
ICAgIHZhciBsb2NhbHMgPSBnZXRMb2NhbHModmFsdWUsIGtleSk7CisgICAgICAgICAgdmFyIHZp
ZXdWYWx1ZSA9IHZpZXdWYWx1ZUZuKHNjb3BlLCBsb2NhbHMpOworICAgICAgICAgIHZhciBzZWxl
Y3RWYWx1ZSA9IGdldFRyYWNrQnlWYWx1ZUZuKHZpZXdWYWx1ZSwgbG9jYWxzKTsKKyAgICAgICAg
ICB2YXIgbGFiZWwgPSBkaXNwbGF5Rm4oc2NvcGUsIGxvY2Fscyk7CisgICAgICAgICAgdmFyIGdy
b3VwID0gZ3JvdXBCeUZuKHNjb3BlLCBsb2NhbHMpOworICAgICAgICAgIHZhciBkaXNhYmxlZCA9
IGRpc2FibGVXaGVuRm4oc2NvcGUsIGxvY2Fscyk7CisgICAgICAgICAgdmFyIG9wdGlvbkl0ZW0g
PSBuZXcgT3B0aW9uKHNlbGVjdFZhbHVlLCB2aWV3VmFsdWUsIGxhYmVsLCBncm91cCwgZGlzYWJs
ZWQpOworCisgICAgICAgICAgb3B0aW9uSXRlbXMucHVzaChvcHRpb25JdGVtKTsKKyAgICAgICAg
ICBzZWxlY3RWYWx1ZU1hcFtzZWxlY3RWYWx1ZV0gPSBvcHRpb25JdGVtOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICBpdGVtczogb3B0aW9uSXRlbXMsCisgICAgICAg
ICAgc2VsZWN0VmFsdWVNYXA6IHNlbGVjdFZhbHVlTWFwLAorICAgICAgICAgIGdldE9wdGlvbkZy
b21WaWV3VmFsdWU6IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAgICAgICByZXR1cm4gc2VsZWN0
VmFsdWVNYXBbZ2V0VHJhY2tCeVZhbHVlKHZhbHVlKV07CisgICAgICAgICAgfSwKKyAgICAgICAg
ICBnZXRWaWV3VmFsdWVGcm9tT3B0aW9uOiBmdW5jdGlvbihvcHRpb24pIHsKKyAgICAgICAgICAg
IC8vIElmIHRoZSB2aWV3VmFsdWUgY291bGQgYmUgYW4gb2JqZWN0IHRoYXQgbWF5IGJlIG11dGF0
ZWQgYnkgdGhlIGFwcGxpY2F0aW9uLAorICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBtYWtlIGEg
Y29weSBhbmQgbm90IHJldHVybiB0aGUgcmVmZXJlbmNlIHRvIHRoZSB2YWx1ZSBvbiB0aGUgb3B0
aW9uLgorICAgICAgICAgICAgcmV0dXJuIHRyYWNrQnkgPyBhbmd1bGFyLmNvcHkob3B0aW9uLnZp
ZXdWYWx1ZSkgOiBvcHRpb24udmlld1ZhbHVlOworICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAg
ICAgIH0KKyAgICB9OworICB9CisKKworICAvLyB3ZSBjYW4ndCBqdXN0IGpxTGl0ZSgnPG9wdGlv
bj4nKSBzaW5jZSBqcUxpdGUgaXMgbm90IHNtYXJ0IGVub3VnaAorICAvLyB0byBjcmVhdGUgaXQg
aW4gPHNlbGVjdD4gYW5kIElFIGJhcmZzIG90aGVyd2lzZS4KKyAgdmFyIG9wdGlvblRlbXBsYXRl
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyksCisgICAgICBvcHRHcm91cFRlbXBs
YXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0Z3JvdXAnKTsKKworICByZXR1cm4gewor
ICAgIHJlc3RyaWN0OiAnQScsCisgICAgdGVybWluYWw6IHRydWUsCisgICAgcmVxdWlyZTogWydz
ZWxlY3QnLCAnP25nTW9kZWwnXSwKKyAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgc2VsZWN0RWxl
bWVudCwgYXR0ciwgY3RybHMpIHsKKworICAgICAgLy8gaWYgbmdNb2RlbCBpcyBub3QgZGVmaW5l
ZCwgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZworICAgICAgdmFyIG5nTW9kZWxDdHJsID0g
Y3RybHNbMV07CisgICAgICBpZiAoIW5nTW9kZWxDdHJsKSByZXR1cm47CisKKyAgICAgIHZhciBz
ZWxlY3RDdHJsID0gY3RybHNbMF07CisgICAgICB2YXIgbXVsdGlwbGUgPSBhdHRyLm11bHRpcGxl
OworCisgICAgICAvLyBUaGUgZW1wdHlPcHRpb24gYWxsb3dzIHRoZSBhcHBsaWNhdGlvbiBkZXZl
bG9wZXIgdG8gcHJvdmlkZSB0aGVpciBvd24gY3VzdG9tICJlbXB0eSIKKyAgICAgIC8vIG9wdGlv
biB3aGVuIHRoZSB2aWV3VmFsdWUgZG9lcyBub3QgbWF0Y2ggYW55IG9mIHRoZSBvcHRpb24gdmFs
dWVzLgorICAgICAgdmFyIGVtcHR5T3B0aW9uOworICAgICAgZm9yICh2YXIgaSA9IDAsIGNoaWxk
cmVuID0gc2VsZWN0RWxlbWVudC5jaGlsZHJlbigpLCBpaSA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8
IGlpOyBpKyspIHsKKyAgICAgICAgaWYgKGNoaWxkcmVuW2ldLnZhbHVlID09PSAnJykgeworICAg
ICAgICAgIGVtcHR5T3B0aW9uID0gY2hpbGRyZW4uZXEoaSk7CisgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgIH0KKworICAgICAgdmFyIHByb3ZpZGVkRW1wdHlPcHRpb24gPSAhIWVt
cHR5T3B0aW9uOworCisgICAgICB2YXIgdW5rbm93bk9wdGlvbiA9IGpxTGl0ZShvcHRpb25UZW1w
bGF0ZS5jbG9uZU5vZGUoZmFsc2UpKTsKKyAgICAgIHVua25vd25PcHRpb24udmFsKCc/Jyk7CisK
KyAgICAgIHZhciBvcHRpb25zOworICAgICAgdmFyIG5nT3B0aW9ucyA9IHBhcnNlT3B0aW9uc0V4
cHJlc3Npb24oYXR0ci5uZ09wdGlvbnMsIHNlbGVjdEVsZW1lbnQsIHNjb3BlKTsKKworCisgICAg
ICB2YXIgcmVuZGVyRW1wdHlPcHRpb24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCFwcm92
aWRlZEVtcHR5T3B0aW9uKSB7CisgICAgICAgICAgc2VsZWN0RWxlbWVudC5wcmVwZW5kKGVtcHR5
T3B0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBzZWxlY3RFbGVtZW50LnZhbCgnJyk7CisgICAg
ICAgIGVtcHR5T3B0aW9uLnByb3AoJ3NlbGVjdGVkJywgdHJ1ZSk7IC8vIG5lZWRlZCBmb3IgSUUK
KyAgICAgICAgZW1wdHlPcHRpb24uYXR0cignc2VsZWN0ZWQnLCB0cnVlKTsKKyAgICAgIH07CisK
KyAgICAgIHZhciByZW1vdmVFbXB0eU9wdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAo
IXByb3ZpZGVkRW1wdHlPcHRpb24pIHsKKyAgICAgICAgICBlbXB0eU9wdGlvbi5yZW1vdmUoKTsK
KyAgICAgICAgfQorICAgICAgfTsKKworCisgICAgICB2YXIgcmVuZGVyVW5rbm93bk9wdGlvbiA9
IGZ1bmN0aW9uKCkgeworICAgICAgICBzZWxlY3RFbGVtZW50LnByZXBlbmQodW5rbm93bk9wdGlv
bik7CisgICAgICAgIHNlbGVjdEVsZW1lbnQudmFsKCc/Jyk7CisgICAgICAgIHVua25vd25PcHRp
b24ucHJvcCgnc2VsZWN0ZWQnLCB0cnVlKTsgLy8gbmVlZGVkIGZvciBJRQorICAgICAgICB1bmtu
b3duT3B0aW9uLmF0dHIoJ3NlbGVjdGVkJywgdHJ1ZSk7CisgICAgICB9OworCisgICAgICB2YXIg
cmVtb3ZlVW5rbm93bk9wdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICB1bmtub3duT3B0aW9u
LnJlbW92ZSgpOworICAgICAgfTsKKworCisgICAgICAvLyBVcGRhdGUgdGhlIGNvbnRyb2xsZXIg
bWV0aG9kcyBmb3IgbXVsdGlwbGUgc2VsZWN0YWJsZSBvcHRpb25zCisgICAgICBpZiAoIW11bHRp
cGxlKSB7CisKKyAgICAgICAgc2VsZWN0Q3RybC53cml0ZVZhbHVlID0gZnVuY3Rpb24gd3JpdGVO
Z09wdGlvbnNWYWx1ZSh2YWx1ZSkgeworICAgICAgICAgIHZhciBvcHRpb24gPSBvcHRpb25zLmdl
dE9wdGlvbkZyb21WaWV3VmFsdWUodmFsdWUpOworCisgICAgICAgICAgaWYgKG9wdGlvbiAmJiAh
b3B0aW9uLmRpc2FibGVkKSB7CisgICAgICAgICAgICBpZiAoc2VsZWN0RWxlbWVudFswXS52YWx1
ZSAhPT0gb3B0aW9uLnNlbGVjdFZhbHVlKSB7CisgICAgICAgICAgICAgIHJlbW92ZVVua25vd25P
cHRpb24oKTsKKyAgICAgICAgICAgICAgcmVtb3ZlRW1wdHlPcHRpb24oKTsKKworICAgICAgICAg
ICAgICBzZWxlY3RFbGVtZW50WzBdLnZhbHVlID0gb3B0aW9uLnNlbGVjdFZhbHVlOworICAgICAg
ICAgICAgICBvcHRpb24uZWxlbWVudC5zZWxlY3RlZCA9IHRydWU7CisgICAgICAgICAgICAgIG9w
dGlvbi5lbGVtZW50LnNldEF0dHJpYnV0ZSgnc2VsZWN0ZWQnLCAnc2VsZWN0ZWQnKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHZhbHVlID09PSBu
dWxsIHx8IHByb3ZpZGVkRW1wdHlPcHRpb24pIHsKKyAgICAgICAgICAgICAgcmVtb3ZlVW5rbm93
bk9wdGlvbigpOworICAgICAgICAgICAgICByZW5kZXJFbXB0eU9wdGlvbigpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgcmVtb3ZlRW1wdHlPcHRpb24oKTsKKyAgICAgICAg
ICAgICAgcmVuZGVyVW5rbm93bk9wdGlvbigpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0K
KyAgICAgICAgfTsKKworICAgICAgICBzZWxlY3RDdHJsLnJlYWRWYWx1ZSA9IGZ1bmN0aW9uIHJl
YWROZ09wdGlvbnNWYWx1ZSgpIHsKKworICAgICAgICAgIHZhciBzZWxlY3RlZE9wdGlvbiA9IG9w
dGlvbnMuc2VsZWN0VmFsdWVNYXBbc2VsZWN0RWxlbWVudC52YWwoKV07CisKKyAgICAgICAgICBp
ZiAoc2VsZWN0ZWRPcHRpb24gJiYgIXNlbGVjdGVkT3B0aW9uLmRpc2FibGVkKSB7CisgICAgICAg
ICAgICByZW1vdmVFbXB0eU9wdGlvbigpOworICAgICAgICAgICAgcmVtb3ZlVW5rbm93bk9wdGlv
bigpOworICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuZ2V0Vmlld1ZhbHVlRnJvbU9wdGlvbihz
ZWxlY3RlZE9wdGlvbik7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiBudWxsOworICAg
ICAgICB9OworCisgICAgICAgIC8vIElmIHdlIGFyZSB1c2luZyBgdHJhY2sgYnlgIHRoZW4gd2Ug
bXVzdCB3YXRjaCB0aGUgdHJhY2tlZCB2YWx1ZSBvbiB0aGUgbW9kZWwKKyAgICAgICAgLy8gc2lu
Y2UgbmdNb2RlbCBvbmx5IHdhdGNoZXMgZm9yIG9iamVjdCBpZGVudGl0eSBjaGFuZ2UKKyAgICAg
ICAgaWYgKG5nT3B0aW9ucy50cmFja0J5KSB7CisgICAgICAgICAgc2NvcGUuJHdhdGNoKAorICAg
ICAgICAgICAgZnVuY3Rpb24oKSB7IHJldHVybiBuZ09wdGlvbnMuZ2V0VHJhY2tCeVZhbHVlKG5n
TW9kZWxDdHJsLiR2aWV3VmFsdWUpOyB9LAorICAgICAgICAgICAgZnVuY3Rpb24oKSB7IG5nTW9k
ZWxDdHJsLiRyZW5kZXIoKTsgfQorICAgICAgICAgICk7CisgICAgICAgIH0KKworICAgICAgfSBl
bHNlIHsKKworICAgICAgICBuZ01vZGVsQ3RybC4kaXNFbXB0eSA9IGZ1bmN0aW9uKHZhbHVlKSB7
CisgICAgICAgICAgcmV0dXJuICF2YWx1ZSB8fCB2YWx1ZS5sZW5ndGggPT09IDA7CisgICAgICAg
IH07CisKKworICAgICAgICBzZWxlY3RDdHJsLndyaXRlVmFsdWUgPSBmdW5jdGlvbiB3cml0ZU5n
T3B0aW9uc011bHRpcGxlKHZhbHVlKSB7CisgICAgICAgICAgb3B0aW9ucy5pdGVtcy5mb3JFYWNo
KGZ1bmN0aW9uKG9wdGlvbikgeworICAgICAgICAgICAgb3B0aW9uLmVsZW1lbnQuc2VsZWN0ZWQg
PSBmYWxzZTsKKyAgICAgICAgICB9KTsKKworICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAg
ICAgICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7CisgICAgICAgICAgICAgIHZhciBv
cHRpb24gPSBvcHRpb25zLmdldE9wdGlvbkZyb21WaWV3VmFsdWUoaXRlbSk7CisgICAgICAgICAg
ICAgIGlmIChvcHRpb24gJiYgIW9wdGlvbi5kaXNhYmxlZCkgb3B0aW9uLmVsZW1lbnQuc2VsZWN0
ZWQgPSB0cnVlOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgfQorICAgICAgICB9OworCisK
KyAgICAgICAgc2VsZWN0Q3RybC5yZWFkVmFsdWUgPSBmdW5jdGlvbiByZWFkTmdPcHRpb25zTXVs
dGlwbGUoKSB7CisgICAgICAgICAgdmFyIHNlbGVjdGVkVmFsdWVzID0gc2VsZWN0RWxlbWVudC52
YWwoKSB8fCBbXSwKKyAgICAgICAgICAgICAgc2VsZWN0aW9ucyA9IFtdOworCisgICAgICAgICAg
Zm9yRWFjaChzZWxlY3RlZFZhbHVlcywgZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgICAgIHZh
ciBvcHRpb24gPSBvcHRpb25zLnNlbGVjdFZhbHVlTWFwW3ZhbHVlXTsKKyAgICAgICAgICAgIGlm
ICghb3B0aW9uLmRpc2FibGVkKSBzZWxlY3Rpb25zLnB1c2gob3B0aW9ucy5nZXRWaWV3VmFsdWVG
cm9tT3B0aW9uKG9wdGlvbikpOworICAgICAgICAgIH0pOworCisgICAgICAgICAgcmV0dXJuIHNl
bGVjdGlvbnM7CisgICAgICAgIH07CisKKyAgICAgICAgLy8gSWYgd2UgYXJlIHVzaW5nIGB0cmFj
ayBieWAgdGhlbiB3ZSBtdXN0IHdhdGNoIHRoZXNlIHRyYWNrZWQgdmFsdWVzIG9uIHRoZSBtb2Rl
bAorICAgICAgICAvLyBzaW5jZSBuZ01vZGVsIG9ubHkgd2F0Y2hlcyBmb3Igb2JqZWN0IGlkZW50
aXR5IGNoYW5nZQorICAgICAgICBpZiAobmdPcHRpb25zLnRyYWNrQnkpIHsKKworICAgICAgICAg
IHNjb3BlLiR3YXRjaENvbGxlY3Rpb24oZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAoaXNB
cnJheShuZ01vZGVsQ3RybC4kdmlld1ZhbHVlKSkgeworICAgICAgICAgICAgICByZXR1cm4gbmdN
b2RlbEN0cmwuJHZpZXdWYWx1ZS5tYXAoZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbmdPcHRpb25zLmdldFRyYWNrQnlWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgfQorICAgICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgbmdNb2RlbEN0cmwuJHJlbmRlcigpOworICAgICAgICAgIH0pOworCisgICAgICAgIH0KKyAg
ICAgIH0KKworCisgICAgICBpZiAocHJvdmlkZWRFbXB0eU9wdGlvbikgeworCisgICAgICAgIC8v
IHdlIG5lZWQgdG8gcmVtb3ZlIGl0IGJlZm9yZSBjYWxsaW5nIHNlbGVjdEVsZW1lbnQuZW1wdHko
KSBiZWNhdXNlIG90aGVyd2lzZSBJRSB3aWxsCisgICAgICAgIC8vIHJlbW92ZSB0aGUgbGFiZWwg
ZnJvbSB0aGUgZWxlbWVudC4gd3RmPworICAgICAgICBlbXB0eU9wdGlvbi5yZW1vdmUoKTsKKwor
ICAgICAgICAvLyBjb21waWxlIHRoZSBlbGVtZW50IHNpbmNlIHRoZXJlIG1pZ2h0IGJlIGJpbmRp
bmdzIGluIGl0CisgICAgICAgICRjb21waWxlKGVtcHR5T3B0aW9uKShzY29wZSk7CisKKyAgICAg
ICAgLy8gcmVtb3ZlIHRoZSBjbGFzcywgd2hpY2ggaXMgYWRkZWQgYXV0b21hdGljYWxseSBiZWNh
dXNlIHdlIHJlY29tcGlsZSB0aGUgZWxlbWVudCBhbmQgaXQKKyAgICAgICAgLy8gYmVjb21lcyB0
aGUgY29tcGlsYXRpb24gcm9vdAorICAgICAgICBlbXB0eU9wdGlvbi5yZW1vdmVDbGFzcygnbmct
c2NvcGUnKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGVtcHR5T3B0aW9uID0ganFMaXRlKG9w
dGlvblRlbXBsYXRlLmNsb25lTm9kZShmYWxzZSkpOworICAgICAgfQorCisgICAgICAvLyBXZSBu
ZWVkIHRvIGRvIHRoaXMgaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgb3B0aW9ucyBvYmplY3QgaXMg
ZGVmaW5lZAorICAgICAgLy8gd2hlbiB3ZSBmaXJzdCBoaXQgaXQgaW4gd3JpdGVOZ09wdGlvbnNW
YWx1ZQorICAgICAgdXBkYXRlT3B0aW9ucygpOworCisgICAgICAvLyBXZSB3aWxsIHJlLXJlbmRl
ciB0aGUgb3B0aW9uIGVsZW1lbnRzIGlmIHRoZSBvcHRpb24gdmFsdWVzIG9yIGxhYmVscyBjaGFu
Z2UKKyAgICAgIHNjb3BlLiR3YXRjaENvbGxlY3Rpb24obmdPcHRpb25zLmdldFdhdGNoYWJsZXMs
IHVwZGF0ZU9wdGlvbnMpOworCisgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy8KKworCisgICAgICBmdW5j
dGlvbiB1cGRhdGVPcHRpb25FbGVtZW50KG9wdGlvbiwgZWxlbWVudCkgeworICAgICAgICBvcHRp
b24uZWxlbWVudCA9IGVsZW1lbnQ7CisgICAgICAgIGVsZW1lbnQuZGlzYWJsZWQgPSBvcHRpb24u
ZGlzYWJsZWQ7CisgICAgICAgIGlmIChvcHRpb24udmFsdWUgIT09IGVsZW1lbnQudmFsdWUpIGVs
ZW1lbnQudmFsdWUgPSBvcHRpb24uc2VsZWN0VmFsdWU7CisgICAgICAgIGlmIChvcHRpb24ubGFi
ZWwgIT09IGVsZW1lbnQubGFiZWwpIHsKKyAgICAgICAgICBlbGVtZW50LmxhYmVsID0gb3B0aW9u
LmxhYmVsOworICAgICAgICAgIGVsZW1lbnQudGV4dENvbnRlbnQgPSBvcHRpb24ubGFiZWw7Cisg
ICAgICAgIH0KKyAgICAgIH0KKworICAgICAgZnVuY3Rpb24gYWRkT3JSZXVzZUVsZW1lbnQocGFy
ZW50LCBjdXJyZW50LCB0eXBlLCB0ZW1wbGF0ZUVsZW1lbnQpIHsKKyAgICAgICAgdmFyIGVsZW1l
bnQ7CisgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgd2UgY2FuIHJldXNlIHRoZSBuZXh0IGVsZW1l
bnQKKyAgICAgICAgaWYgKGN1cnJlbnQgJiYgbG93ZXJjYXNlKGN1cnJlbnQubm9kZU5hbWUpID09
PSB0eXBlKSB7CisgICAgICAgICAgLy8gVGhlIG5leHQgZWxlbWVudCBpcyB0aGUgcmlnaHQgdHlw
ZSBzbyByZXVzZSBpdAorICAgICAgICAgIGVsZW1lbnQgPSBjdXJyZW50OworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgIC8vIFRoZSBuZXh0IGVsZW1lbnQgaXMgbm90IHRoZSByaWdodCB0eXBl
IHNvIGNyZWF0ZSBhIG5ldyBvbmUKKyAgICAgICAgICBlbGVtZW50ID0gdGVtcGxhdGVFbGVtZW50
LmNsb25lTm9kZShmYWxzZSk7CisgICAgICAgICAgaWYgKCFjdXJyZW50KSB7CisgICAgICAgICAg
ICAvLyBUaGVyZSBhcmUgbm8gbW9yZSBlbGVtZW50cyBzbyBqdXN0IGFwcGVuZCBpdCB0byB0aGUg
c2VsZWN0CisgICAgICAgICAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7CisgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFRoZSBuZXh0IGVsZW1lbnQgaXMgbm90IGEgZ3Jv
dXAgc28gaW5zZXJ0IHRoZSBuZXcgb25lCisgICAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3Jl
KGVsZW1lbnQsIGN1cnJlbnQpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gZWxlbWVudDsKKyAgICAgIH0KKworCisgICAgICBmdW5jdGlvbiByZW1vdmVFeGNlc3NFbGVt
ZW50cyhjdXJyZW50KSB7CisgICAgICAgIHZhciBuZXh0OworICAgICAgICB3aGlsZSAoY3VycmVu
dCkgeworICAgICAgICAgIG5leHQgPSBjdXJyZW50Lm5leHRTaWJsaW5nOworICAgICAgICAgIGpx
TGl0ZVJlbW92ZShjdXJyZW50KTsKKyAgICAgICAgICBjdXJyZW50ID0gbmV4dDsKKyAgICAgICAg
fQorICAgICAgfQorCisKKyAgICAgIGZ1bmN0aW9uIHNraXBFbXB0eUFuZFVua25vd25PcHRpb25z
KGN1cnJlbnQpIHsKKyAgICAgICAgdmFyIGVtcHR5T3B0aW9uXyA9IGVtcHR5T3B0aW9uICYmIGVt
cHR5T3B0aW9uWzBdOworICAgICAgICB2YXIgdW5rbm93bk9wdGlvbl8gPSB1bmtub3duT3B0aW9u
ICYmIHVua25vd25PcHRpb25bMF07CisKKyAgICAgICAgaWYgKGVtcHR5T3B0aW9uXyB8fCB1bmtu
b3duT3B0aW9uXykgeworICAgICAgICAgIHdoaWxlIChjdXJyZW50ICYmCisgICAgICAgICAgICAg
ICAgKGN1cnJlbnQgPT09IGVtcHR5T3B0aW9uXyB8fAorICAgICAgICAgICAgICAgIGN1cnJlbnQg
PT09IHVua25vd25PcHRpb25fKSkgeworICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4
dFNpYmxpbmc7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBjdXJyZW50
OworICAgICAgfQorCisKKyAgICAgIGZ1bmN0aW9uIHVwZGF0ZU9wdGlvbnMoKSB7CisKKyAgICAg
ICAgdmFyIHByZXZpb3VzVmFsdWUgPSBvcHRpb25zICYmIHNlbGVjdEN0cmwucmVhZFZhbHVlKCk7
CisKKyAgICAgICAgb3B0aW9ucyA9IG5nT3B0aW9ucy5nZXRPcHRpb25zKCk7CisKKyAgICAgICAg
dmFyIGdyb3VwTWFwID0ge307CisgICAgICAgIHZhciBjdXJyZW50RWxlbWVudCA9IHNlbGVjdEVs
ZW1lbnRbMF0uZmlyc3RDaGlsZDsKKworICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgZW1wdHkg
b3B0aW9uIGlzIGFsd2F5cyB0aGVyZSBpZiBpdCB3YXMgZXhwbGljaXRseSBwcm92aWRlZAorICAg
ICAgICBpZiAocHJvdmlkZWRFbXB0eU9wdGlvbikgeworICAgICAgICAgIHNlbGVjdEVsZW1lbnQu
cHJlcGVuZChlbXB0eU9wdGlvbik7CisgICAgICAgIH0KKworICAgICAgICBjdXJyZW50RWxlbWVu
dCA9IHNraXBFbXB0eUFuZFVua25vd25PcHRpb25zKGN1cnJlbnRFbGVtZW50KTsKKworICAgICAg
ICBvcHRpb25zLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gdXBkYXRlT3B0aW9uKG9wdGlvbikgewor
ICAgICAgICAgIHZhciBncm91cDsKKyAgICAgICAgICB2YXIgZ3JvdXBFbGVtZW50OworICAgICAg
ICAgIHZhciBvcHRpb25FbGVtZW50OworCisgICAgICAgICAgaWYgKG9wdGlvbi5ncm91cCkgewor
CisgICAgICAgICAgICAvLyBUaGlzIG9wdGlvbiBpcyB0byBsaXZlIGluIGEgZ3JvdXAKKyAgICAg
ICAgICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGFscmVhZHkgY3JlYXRlZCB0aGlzIGdyb3VwCisgICAg
ICAgICAgICBncm91cCA9IGdyb3VwTWFwW29wdGlvbi5ncm91cF07CisKKyAgICAgICAgICAgIGlm
ICghZ3JvdXApIHsKKworICAgICAgICAgICAgICAvLyBXZSBoYXZlIG5vdCBhbHJlYWR5IGNyZWF0
ZWQgdGhpcyBncm91cAorICAgICAgICAgICAgICBncm91cEVsZW1lbnQgPSBhZGRPclJldXNlRWxl
bWVudChzZWxlY3RFbGVtZW50WzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ29wdGdyb3VwJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3B0R3JvdXBUZW1wbGF0ZSk7CisgICAgICAgICAgICAg
IC8vIE1vdmUgdG8gdGhlIG5leHQgZWxlbWVudAorICAgICAgICAgICAgICBjdXJyZW50RWxlbWVu
dCA9IGdyb3VwRWxlbWVudC5uZXh0U2libGluZzsKKworICAgICAgICAgICAgICAvLyBVcGRhdGUg
dGhlIGxhYmVsIG9uIHRoZSBncm91cCBlbGVtZW50CisgICAgICAgICAgICAgIGdyb3VwRWxlbWVu
dC5sYWJlbCA9IG9wdGlvbi5ncm91cDsKKworICAgICAgICAgICAgICAvLyBTdG9yZSBpdCBmb3Ig
dXNlIGxhdGVyCisgICAgICAgICAgICAgIGdyb3VwID0gZ3JvdXBNYXBbb3B0aW9uLmdyb3VwXSA9
IHsKKyAgICAgICAgICAgICAgICBncm91cEVsZW1lbnQ6IGdyb3VwRWxlbWVudCwKKyAgICAgICAg
ICAgICAgICBjdXJyZW50T3B0aW9uRWxlbWVudDogZ3JvdXBFbGVtZW50LmZpcnN0Q2hpbGQKKyAg
ICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTbyBub3cg
d2UgaGF2ZSBhIGdyb3VwIGZvciB0aGlzIG9wdGlvbiB3ZSBhZGQgdGhlIG9wdGlvbiB0byB0aGUg
Z3JvdXAKKyAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQgPSBhZGRPclJldXNlRWxlbWVudChncm91
cC5ncm91cEVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ3JvdXAuY3VycmVudE9wdGlvbkVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ29wdGlvbicsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uVGVtcGxhdGUpOworICAgICAgICAgICAgdXBk
YXRlT3B0aW9uRWxlbWVudChvcHRpb24sIG9wdGlvbkVsZW1lbnQpOworICAgICAgICAgICAgLy8g
TW92ZSB0byB0aGUgbmV4dCBlbGVtZW50CisgICAgICAgICAgICBncm91cC5jdXJyZW50T3B0aW9u
RWxlbWVudCA9IG9wdGlvbkVsZW1lbnQubmV4dFNpYmxpbmc7CisKKyAgICAgICAgICB9IGVsc2Ug
eworCisgICAgICAgICAgICAvLyBUaGlzIG9wdGlvbiBpcyBub3QgaW4gYSBncm91cAorICAgICAg
ICAgICAgb3B0aW9uRWxlbWVudCA9IGFkZE9yUmV1c2VFbGVtZW50KHNlbGVjdEVsZW1lbnRbMF0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEVs
ZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29w
dGlvbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0
aW9uVGVtcGxhdGUpOworICAgICAgICAgICAgdXBkYXRlT3B0aW9uRWxlbWVudChvcHRpb24sIG9w
dGlvbkVsZW1lbnQpOworICAgICAgICAgICAgLy8gTW92ZSB0byB0aGUgbmV4dCBlbGVtZW50Cisg
ICAgICAgICAgICBjdXJyZW50RWxlbWVudCA9IG9wdGlvbkVsZW1lbnQubmV4dFNpYmxpbmc7Cisg
ICAgICAgICAgfQorICAgICAgICB9KTsKKworCisgICAgICAgIC8vIE5vdyByZW1vdmUgYWxsIGV4
Y2VzcyBvcHRpb25zIGFuZCBncm91cAorICAgICAgICBPYmplY3Qua2V5cyhncm91cE1hcCkuZm9y
RWFjaChmdW5jdGlvbihrZXkpIHsKKyAgICAgICAgICByZW1vdmVFeGNlc3NFbGVtZW50cyhncm91
cE1hcFtrZXldLmN1cnJlbnRPcHRpb25FbGVtZW50KTsKKyAgICAgICAgfSk7CisgICAgICAgIHJl
bW92ZUV4Y2Vzc0VsZW1lbnRzKGN1cnJlbnRFbGVtZW50KTsKKworICAgICAgICBuZ01vZGVsQ3Ry
bC4kcmVuZGVyKCk7CisKKyAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSB2YWx1ZSBoYXMg
Y2hhbmdlZCBkdWUgdG8gdGhlIHVwZGF0ZSB0byB0aGUgb3B0aW9ucworICAgICAgICBpZiAoIW5n
TW9kZWxDdHJsLiRpc0VtcHR5KHByZXZpb3VzVmFsdWUpKSB7CisgICAgICAgICAgdmFyIG5leHRW
YWx1ZSA9IHNlbGVjdEN0cmwucmVhZFZhbHVlKCk7CisgICAgICAgICAgaWYgKG5nT3B0aW9ucy50
cmFja0J5ID8gIWVxdWFscyhwcmV2aW91c1ZhbHVlLCBuZXh0VmFsdWUpIDogcHJldmlvdXNWYWx1
ZSAhPT0gbmV4dFZhbHVlKSB7CisgICAgICAgICAgICBuZ01vZGVsQ3RybC4kc2V0Vmlld1ZhbHVl
KG5leHRWYWx1ZSk7CisgICAgICAgICAgICBuZ01vZGVsQ3RybC4kcmVuZGVyKCk7CisgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgIH0KKworICAgIH0KKyAgfTsKK31dOworCisvKioKKyAq
IEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1lIG5nUGx1cmFsaXplCisgKiBAcmVzdHJpY3QgRUEK
KyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIGBuZ1BsdXJhbGl6ZWAgaXMgYSBkaXJlY3RpdmUgdGhh
dCBkaXNwbGF5cyBtZXNzYWdlcyBhY2NvcmRpbmcgdG8gZW4tVVMgbG9jYWxpemF0aW9uIHJ1bGVz
LgorICogVGhlc2UgcnVsZXMgYXJlIGJ1bmRsZWQgd2l0aCBhbmd1bGFyLmpzLCBidXQgY2FuIGJl
IG92ZXJyaWRkZW4KKyAqIChzZWUge0BsaW5rIGd1aWRlL2kxOG4gQW5ndWxhciBpMThufSBkZXYg
Z3VpZGUpLiBZb3UgY29uZmlndXJlIG5nUGx1cmFsaXplIGRpcmVjdGl2ZQorICogYnkgc3BlY2lm
eWluZyB0aGUgbWFwcGluZ3MgYmV0d2VlbgorICogW3BsdXJhbCBjYXRlZ29yaWVzXShodHRwOi8v
dW5pY29kZS5vcmcvcmVwb3MvY2xkci10bXAvdHJ1bmsvZGlmZi9zdXBwbGVtZW50YWwvbGFuZ3Vh
Z2VfcGx1cmFsX3J1bGVzLmh0bWwpCisgKiBhbmQgdGhlIHN0cmluZ3MgdG8gYmUgZGlzcGxheWVk
LgorICoKKyAqICMgUGx1cmFsIGNhdGVnb3JpZXMgYW5kIGV4cGxpY2l0IG51bWJlciBydWxlcwor
ICogVGhlcmUgYXJlIHR3bworICogW3BsdXJhbCBjYXRlZ29yaWVzXShodHRwOi8vdW5pY29kZS5v
cmcvcmVwb3MvY2xkci10bXAvdHJ1bmsvZGlmZi9zdXBwbGVtZW50YWwvbGFuZ3VhZ2VfcGx1cmFs
X3J1bGVzLmh0bWwpCisgKiBpbiBBbmd1bGFyJ3MgZGVmYXVsdCBlbi1VUyBsb2NhbGU6ICJvbmUi
IGFuZCAib3RoZXIiLgorICoKKyAqIFdoaWxlIGEgcGx1cmFsIGNhdGVnb3J5IG1heSBtYXRjaCBt
YW55IG51bWJlcnMgKGZvciBleGFtcGxlLCBpbiBlbi1VUyBsb2NhbGUsICJvdGhlciIgY2FuIG1h
dGNoCisgKiBhbnkgbnVtYmVyIHRoYXQgaXMgbm90IDEpLCBhbiBleHBsaWNpdCBudW1iZXIgcnVs
ZSBjYW4gb25seSBtYXRjaCBvbmUgbnVtYmVyLiBGb3IgZXhhbXBsZSwgdGhlCisgKiBleHBsaWNp
dCBudW1iZXIgcnVsZSBmb3IgIjMiIG1hdGNoZXMgdGhlIG51bWJlciAzLiBUaGVyZSBhcmUgZXhh
bXBsZXMgb2YgcGx1cmFsIGNhdGVnb3JpZXMKKyAqIGFuZCBleHBsaWNpdCBudW1iZXIgcnVsZXMg
dGhyb3VnaG91dCB0aGUgcmVzdCBvZiB0aGlzIGRvY3VtZW50YXRpb24uCisgKgorICogIyBDb25m
aWd1cmluZyBuZ1BsdXJhbGl6ZQorICogWW91IGNvbmZpZ3VyZSBuZ1BsdXJhbGl6ZSBieSBwcm92
aWRpbmcgMiBhdHRyaWJ1dGVzOiBgY291bnRgIGFuZCBgd2hlbmAuCisgKiBZb3UgY2FuIGFsc28g
cHJvdmlkZSBhbiBvcHRpb25hbCBhdHRyaWJ1dGUsIGBvZmZzZXRgLgorICoKKyAqIFRoZSB2YWx1
ZSBvZiB0aGUgYGNvdW50YCBhdHRyaWJ1dGUgY2FuIGJlIGVpdGhlciBhIHN0cmluZyBvciBhbiB7
QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbgorICogQW5ndWxhciBleHByZXNzaW9ufTsgdGhlc2UgYXJl
IGV2YWx1YXRlZCBvbiB0aGUgY3VycmVudCBzY29wZSBmb3IgaXRzIGJvdW5kIHZhbHVlLgorICoK
KyAqIFRoZSBgd2hlbmAgYXR0cmlidXRlIHNwZWNpZmllcyB0aGUgbWFwcGluZ3MgYmV0d2VlbiBw
bHVyYWwgY2F0ZWdvcmllcyBhbmQgdGhlIGFjdHVhbAorICogc3RyaW5nIHRvIGJlIGRpc3BsYXll
ZC4gVGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgc2hvdWxkIGJlIGEgSlNPTiBvYmplY3QuCisg
KgorICogVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byBjb25maWd1cmUgbmdQbHVy
YWxpemU6CisgKgorICogYGBgaHRtbAorICogPG5nLXBsdXJhbGl6ZSBjb3VudD0icGVyc29uQ291
bnQiCisgICAgICAgICAgICAgICAgIHdoZW49InsnMCc6ICdOb2JvZHkgaXMgdmlld2luZy4nLAor
ICogICAgICAgICAgICAgICAgICAgICAgJ29uZSc6ICcxIHBlcnNvbiBpcyB2aWV3aW5nLicsCisg
KiAgICAgICAgICAgICAgICAgICAgICAnb3RoZXInOiAne30gcGVvcGxlIGFyZSB2aWV3aW5nLid9
Ij4KKyAqIDwvbmctcGx1cmFsaXplPgorICpgYGAKKyAqCisgKiBJbiB0aGUgZXhhbXBsZSwgYCIw
OiBOb2JvZHkgaXMgdmlld2luZy4iYCBpcyBhbiBleHBsaWNpdCBudW1iZXIgcnVsZS4gSWYgeW91
IGRpZCBub3QKKyAqIHNwZWNpZnkgdGhpcyBydWxlLCAwIHdvdWxkIGJlIG1hdGNoZWQgdG8gdGhl
ICJvdGhlciIgY2F0ZWdvcnkgYW5kICIwIHBlb3BsZSBhcmUgdmlld2luZyIKKyAqIHdvdWxkIGJl
IHNob3duIGluc3RlYWQgb2YgIk5vYm9keSBpcyB2aWV3aW5nIi4gWW91IGNhbiBzcGVjaWZ5IGFu
IGV4cGxpY2l0IG51bWJlciBydWxlIGZvcgorICogb3RoZXIgbnVtYmVycywgZm9yIGV4YW1wbGUg
MTIsIHNvIHRoYXQgaW5zdGVhZCBvZiBzaG93aW5nICIxMiBwZW9wbGUgYXJlIHZpZXdpbmciLCB5
b3UgY2FuCisgKiBzaG93ICJhIGRvemVuIHBlb3BsZSBhcmUgdmlld2luZyIuCisgKgorICogWW91
IGNhbiB1c2UgYSBzZXQgb2YgY2xvc2VkIGJyYWNlcyAoYHt9YCkgYXMgYSBwbGFjZWhvbGRlciBm
b3IgdGhlIG51bWJlciB0aGF0IHlvdSB3YW50IHN1YnN0aXR1dGVkCisgKiBpbnRvIHBsdXJhbGl6
ZWQgc3RyaW5ncy4gSW4gdGhlIHByZXZpb3VzIGV4YW1wbGUsIEFuZ3VsYXIgd2lsbCByZXBsYWNl
IGB7fWAgd2l0aAorICogPHNwYW4gbmctbm9uLWJpbmRhYmxlPmB7e3BlcnNvbkNvdW50fX1gPC9z
cGFuPi4gVGhlIGNsb3NlZCBicmFjZXMgYHt9YCBpcyBhIHBsYWNlaG9sZGVyCisgKiBmb3IgPHNw
YW4gbmctbm9uLWJpbmRhYmxlPnt7bnVtYmVyRXhwcmVzc2lvbn19PC9zcGFuPi4KKyAqCisgKiBJ
ZiBubyBydWxlIGlzIGRlZmluZWQgZm9yIGEgY2F0ZWdvcnksIHRoZW4gYW4gZW1wdHkgc3RyaW5n
IGlzIGRpc3BsYXllZCBhbmQgYSB3YXJuaW5nIGlzIGdlbmVyYXRlZC4KKyAqIE5vdGUgdGhhdCBz
b21lIGxvY2FsZXMgZGVmaW5lIG1vcmUgY2F0ZWdvcmllcyB0aGFuIGBvbmVgIGFuZCBgb3RoZXJg
LiBGb3IgZXhhbXBsZSwgZnItZnIgZGVmaW5lcyBgZmV3YCBhbmQgYG1hbnlgLgorICoKKyAqICMg
Q29uZmlndXJpbmcgbmdQbHVyYWxpemUgd2l0aCBvZmZzZXQKKyAqIFRoZSBgb2Zmc2V0YCBhdHRy
aWJ1dGUgYWxsb3dzIGZ1cnRoZXIgY3VzdG9taXphdGlvbiBvZiBwbHVyYWxpemVkIHRleHQsIHdo
aWNoIGNhbiByZXN1bHQgaW4KKyAqIGEgYmV0dGVyIHVzZXIgZXhwZXJpZW5jZS4gRm9yIGV4YW1w
bGUsIGluc3RlYWQgb2YgdGhlIG1lc3NhZ2UgIjQgcGVvcGxlIGFyZSB2aWV3aW5nIHRoaXMgZG9j
dW1lbnQiLAorICogeW91IG1pZ2h0IGRpc3BsYXkgIkpvaG4sIEthdGUgYW5kIDIgb3RoZXJzIGFy
ZSB2aWV3aW5nIHRoaXMgZG9jdW1lbnQiLgorICogVGhlIG9mZnNldCBhdHRyaWJ1dGUgYWxsb3dz
IHlvdSB0byBvZmZzZXQgYSBudW1iZXIgYnkgYW55IGRlc2lyZWQgdmFsdWUuCisgKiBMZXQncyB0
YWtlIGEgbG9vayBhdCBhbiBleGFtcGxlOgorICoKKyAqIGBgYGh0bWwKKyAqIDxuZy1wbHVyYWxp
emUgY291bnQ9InBlcnNvbkNvdW50IiBvZmZzZXQ9MgorICogICAgICAgICAgICAgICB3aGVuPSJ7
JzAnOiAnTm9ib2R5IGlzIHZpZXdpbmcuJywKKyAqICAgICAgICAgICAgICAgICAgICAgICcxJzog
J3t7cGVyc29uMX19IGlzIHZpZXdpbmcuJywKKyAqICAgICAgICAgICAgICAgICAgICAgICcyJzog
J3t7cGVyc29uMX19IGFuZCB7e3BlcnNvbjJ9fSBhcmUgdmlld2luZy4nLAorICogICAgICAgICAg
ICAgICAgICAgICAgJ29uZSc6ICd7e3BlcnNvbjF9fSwge3twZXJzb24yfX0gYW5kIG9uZSBvdGhl
ciBwZXJzb24gYXJlIHZpZXdpbmcuJywKKyAqICAgICAgICAgICAgICAgICAgICAgICdvdGhlcic6
ICd7e3BlcnNvbjF9fSwge3twZXJzb24yfX0gYW5kIHt9IG90aGVyIHBlb3BsZSBhcmUgdmlld2lu
Zy4nfSI+CisgKiA8L25nLXBsdXJhbGl6ZT4KKyAqIGBgYAorICoKKyAqIE5vdGljZSB0aGF0IHdl
IGFyZSBzdGlsbCB1c2luZyB0d28gcGx1cmFsIGNhdGVnb3JpZXMob25lLCBvdGhlciksIGJ1dCB3
ZSBhZGRlZAorICogdGhyZWUgZXhwbGljaXQgbnVtYmVyIHJ1bGVzIDAsIDEgYW5kIDIuCisgKiBX
aGVuIG9uZSBwZXJzb24sIHBlcmhhcHMgSm9obiwgdmlld3MgdGhlIGRvY3VtZW50LCAiSm9obiBp
cyB2aWV3aW5nIiB3aWxsIGJlIHNob3duLgorICogV2hlbiB0aHJlZSBwZW9wbGUgdmlldyB0aGUg
ZG9jdW1lbnQsIG5vIGV4cGxpY2l0IG51bWJlciBydWxlIGlzIGZvdW5kLCBzbworICogYW4gb2Zm
c2V0IG9mIDIgaXMgdGFrZW4gb2ZmIDMsIGFuZCBBbmd1bGFyIHVzZXMgMSB0byBkZWNpZGUgdGhl
IHBsdXJhbCBjYXRlZ29yeS4KKyAqIEluIHRoaXMgY2FzZSwgcGx1cmFsIGNhdGVnb3J5ICdvbmUn
IGlzIG1hdGNoZWQgYW5kICJKb2huLCBNYXJ5IGFuZCBvbmUgb3RoZXIgcGVyc29uIGFyZSB2aWV3
aW5nIgorICogaXMgc2hvd24uCisgKgorICogTm90ZSB0aGF0IHdoZW4geW91IHNwZWNpZnkgb2Zm
c2V0cywgeW91IG11c3QgcHJvdmlkZSBleHBsaWNpdCBudW1iZXIgcnVsZXMgZm9yCisgKiBudW1i
ZXJzIGZyb20gMCB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBvZmZzZXQuIElmIHlvdSB1c2UgYW4g
b2Zmc2V0IG9mIDMsIGZvciBleGFtcGxlLAorICogeW91IG11c3QgcHJvdmlkZSBleHBsaWNpdCBu
dW1iZXIgcnVsZXMgZm9yIDAsIDEsIDIgYW5kIDMuIFlvdSBtdXN0IGFsc28gcHJvdmlkZSBwbHVy
YWwgc3RyaW5ncyBmb3IKKyAqIHBsdXJhbCBjYXRlZ29yaWVzICJvbmUiIGFuZCAib3RoZXIiLgor
ICoKKyAqIEBwYXJhbSB7c3RyaW5nfGV4cHJlc3Npb259IGNvdW50IFRoZSB2YXJpYWJsZSB0byBi
ZSBib3VuZCB0by4KKyAqIEBwYXJhbSB7c3RyaW5nfSB3aGVuIFRoZSBtYXBwaW5nIGJldHdlZW4g
cGx1cmFsIGNhdGVnb3J5IHRvIGl0cyBjb3JyZXNwb25kaW5nIHN0cmluZ3MuCisgKiBAcGFyYW0g
e251bWJlcj19IG9mZnNldCBPZmZzZXQgdG8gZGVkdWN0IGZyb20gdGhlIHRvdGFsIG51bWJlci4K
KyAqCisgKiBAZXhhbXBsZQorICAgIDxleGFtcGxlIG1vZHVsZT0icGx1cmFsaXplRXhhbXBsZSI+
CisgICAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAgICAgICAgPHNjcmlwdD4KKyAgICAg
ICAgICBhbmd1bGFyLm1vZHVsZSgncGx1cmFsaXplRXhhbXBsZScsIFtdKQorICAgICAgICAgICAg
LmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2Nv
cGUpIHsKKyAgICAgICAgICAgICAgJHNjb3BlLnBlcnNvbjEgPSAnSWdvcic7CisgICAgICAgICAg
ICAgICRzY29wZS5wZXJzb24yID0gJ01pc2tvJzsKKyAgICAgICAgICAgICAgJHNjb3BlLnBlcnNv
bkNvdW50ID0gMTsKKyAgICAgICAgICAgIH1dKTsKKyAgICAgICAgPC9zY3JpcHQ+CisgICAgICAg
IDxkaXYgbmctY29udHJvbGxlcj0iRXhhbXBsZUNvbnRyb2xsZXIiPgorICAgICAgICAgIDxsYWJl
bD5QZXJzb24gMTo8aW5wdXQgdHlwZT0idGV4dCIgbmctbW9kZWw9InBlcnNvbjEiIHZhbHVlPSJJ
Z29yIiAvPjwvbGFiZWw+PGJyLz4KKyAgICAgICAgICA8bGFiZWw+UGVyc29uIDI6PGlucHV0IHR5
cGU9InRleHQiIG5nLW1vZGVsPSJwZXJzb24yIiB2YWx1ZT0iTWlza28iIC8+PC9sYWJlbD48YnIv
PgorICAgICAgICAgIDxsYWJlbD5OdW1iZXIgb2YgUGVvcGxlOjxpbnB1dCB0eXBlPSJ0ZXh0IiBu
Zy1tb2RlbD0icGVyc29uQ291bnQiIHZhbHVlPSIxIiAvPjwvbGFiZWw+PGJyLz4KKworICAgICAg
ICAgIDwhLS0tIEV4YW1wbGUgd2l0aCBzaW1wbGUgcGx1cmFsaXphdGlvbiBydWxlcyBmb3IgZW4g
bG9jYWxlIC0tLT4KKyAgICAgICAgICBXaXRob3V0IE9mZnNldDoKKyAgICAgICAgICA8bmctcGx1
cmFsaXplIGNvdW50PSJwZXJzb25Db3VudCIKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoZW49
InsnMCc6ICdOb2JvZHkgaXMgdmlld2luZy4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdvbmUnOiAnMSBwZXJzb24gaXMgdmlld2luZy4nLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdvdGhlcic6ICd7fSBwZW9wbGUgYXJlIHZpZXdpbmcuJ30iPgorICAgICAgICAg
IDwvbmctcGx1cmFsaXplPjxicj4KKworICAgICAgICAgIDwhLS0tIEV4YW1wbGUgd2l0aCBvZmZz
ZXQgLS0tPgorICAgICAgICAgIFdpdGggT2Zmc2V0KDIpOgorICAgICAgICAgIDxuZy1wbHVyYWxp
emUgY291bnQ9InBlcnNvbkNvdW50IiBvZmZzZXQ9MgorICAgICAgICAgICAgICAgICAgICAgICAg
d2hlbj0ieycwJzogJ05vYm9keSBpcyB2aWV3aW5nLicsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJzEnOiAne3twZXJzb24xfX0gaXMgdmlld2luZy4nLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICcyJzogJ3t7cGVyc29uMX19IGFuZCB7e3BlcnNvbjJ9fSBhcmUgdmll
d2luZy4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmUnOiAne3twZXJzb24x
fX0sIHt7cGVyc29uMn19IGFuZCBvbmUgb3RoZXIgcGVyc29uIGFyZSB2aWV3aW5nLicsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ290aGVyJzogJ3t7cGVyc29uMX19LCB7e3BlcnNv
bjJ9fSBhbmQge30gb3RoZXIgcGVvcGxlIGFyZSB2aWV3aW5nLid9Ij4KKyAgICAgICAgICA8L25n
LXBsdXJhbGl6ZT4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2ZpbGU+CisgICAgICA8ZmlsZSBu
YW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFjdG9yIj4KKyAgICAgICAgaXQoJ3Nob3Vs
ZCBzaG93IGNvcnJlY3QgcGx1cmFsaXplZCBzdHJpbmcnLCBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICB2YXIgd2l0aG91dE9mZnNldCA9IGVsZW1lbnQuYWxsKGJ5LmNzcygnbmctcGx1cmFsaXplJykp
LmdldCgwKTsKKyAgICAgICAgICB2YXIgd2l0aE9mZnNldCA9IGVsZW1lbnQuYWxsKGJ5LmNzcygn
bmctcGx1cmFsaXplJykpLmdldCgxKTsKKyAgICAgICAgICB2YXIgY291bnRJbnB1dCA9IGVsZW1l
bnQoYnkubW9kZWwoJ3BlcnNvbkNvdW50JykpOworCisgICAgICAgICAgZXhwZWN0KHdpdGhvdXRP
ZmZzZXQuZ2V0VGV4dCgpKS50b0VxdWFsKCcxIHBlcnNvbiBpcyB2aWV3aW5nLicpOworICAgICAg
ICAgIGV4cGVjdCh3aXRoT2Zmc2V0LmdldFRleHQoKSkudG9FcXVhbCgnSWdvciBpcyB2aWV3aW5n
LicpOworCisgICAgICAgICAgY291bnRJbnB1dC5jbGVhcigpOworICAgICAgICAgIGNvdW50SW5w
dXQuc2VuZEtleXMoJzAnKTsKKworICAgICAgICAgIGV4cGVjdCh3aXRob3V0T2Zmc2V0LmdldFRl
eHQoKSkudG9FcXVhbCgnTm9ib2R5IGlzIHZpZXdpbmcuJyk7CisgICAgICAgICAgZXhwZWN0KHdp
dGhPZmZzZXQuZ2V0VGV4dCgpKS50b0VxdWFsKCdOb2JvZHkgaXMgdmlld2luZy4nKTsKKworICAg
ICAgICAgIGNvdW50SW5wdXQuY2xlYXIoKTsKKyAgICAgICAgICBjb3VudElucHV0LnNlbmRLZXlz
KCcyJyk7CisKKyAgICAgICAgICBleHBlY3Qod2l0aG91dE9mZnNldC5nZXRUZXh0KCkpLnRvRXF1
YWwoJzIgcGVvcGxlIGFyZSB2aWV3aW5nLicpOworICAgICAgICAgIGV4cGVjdCh3aXRoT2Zmc2V0
LmdldFRleHQoKSkudG9FcXVhbCgnSWdvciBhbmQgTWlza28gYXJlIHZpZXdpbmcuJyk7CisKKyAg
ICAgICAgICBjb3VudElucHV0LmNsZWFyKCk7CisgICAgICAgICAgY291bnRJbnB1dC5zZW5kS2V5
cygnMycpOworCisgICAgICAgICAgZXhwZWN0KHdpdGhvdXRPZmZzZXQuZ2V0VGV4dCgpKS50b0Vx
dWFsKCczIHBlb3BsZSBhcmUgdmlld2luZy4nKTsKKyAgICAgICAgICBleHBlY3Qod2l0aE9mZnNl
dC5nZXRUZXh0KCkpLnRvRXF1YWwoJ0lnb3IsIE1pc2tvIGFuZCBvbmUgb3RoZXIgcGVyc29uIGFy
ZSB2aWV3aW5nLicpOworCisgICAgICAgICAgY291bnRJbnB1dC5jbGVhcigpOworICAgICAgICAg
IGNvdW50SW5wdXQuc2VuZEtleXMoJzQnKTsKKworICAgICAgICAgIGV4cGVjdCh3aXRob3V0T2Zm
c2V0LmdldFRleHQoKSkudG9FcXVhbCgnNCBwZW9wbGUgYXJlIHZpZXdpbmcuJyk7CisgICAgICAg
ICAgZXhwZWN0KHdpdGhPZmZzZXQuZ2V0VGV4dCgpKS50b0VxdWFsKCdJZ29yLCBNaXNrbyBhbmQg
MiBvdGhlciBwZW9wbGUgYXJlIHZpZXdpbmcuJyk7CisgICAgICAgIH0pOworICAgICAgICBpdCgn
c2hvdWxkIHNob3cgZGF0YS1ib3VuZCBuYW1lcycsIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHZh
ciB3aXRoT2Zmc2V0ID0gZWxlbWVudC5hbGwoYnkuY3NzKCduZy1wbHVyYWxpemUnKSkuZ2V0KDEp
OworICAgICAgICAgIHZhciBwZXJzb25Db3VudCA9IGVsZW1lbnQoYnkubW9kZWwoJ3BlcnNvbkNv
dW50JykpOworICAgICAgICAgIHZhciBwZXJzb24xID0gZWxlbWVudChieS5tb2RlbCgncGVyc29u
MScpKTsKKyAgICAgICAgICB2YXIgcGVyc29uMiA9IGVsZW1lbnQoYnkubW9kZWwoJ3BlcnNvbjIn
KSk7CisgICAgICAgICAgcGVyc29uQ291bnQuY2xlYXIoKTsKKyAgICAgICAgICBwZXJzb25Db3Vu
dC5zZW5kS2V5cygnNCcpOworICAgICAgICAgIHBlcnNvbjEuY2xlYXIoKTsKKyAgICAgICAgICBw
ZXJzb24xLnNlbmRLZXlzKCdEaScpOworICAgICAgICAgIHBlcnNvbjIuY2xlYXIoKTsKKyAgICAg
ICAgICBwZXJzb24yLnNlbmRLZXlzKCdWb2p0YScpOworICAgICAgICAgIGV4cGVjdCh3aXRoT2Zm
c2V0LmdldFRleHQoKSkudG9FcXVhbCgnRGksIFZvanRhIGFuZCAyIG90aGVyIHBlb3BsZSBhcmUg
dmlld2luZy4nKTsKKyAgICAgICAgfSk7CisgICAgICA8L2ZpbGU+CisgICAgPC9leGFtcGxlPgor
ICovCit2YXIgbmdQbHVyYWxpemVEaXJlY3RpdmUgPSBbJyRsb2NhbGUnLCAnJGludGVycG9sYXRl
JywgJyRsb2cnLCBmdW5jdGlvbigkbG9jYWxlLCAkaW50ZXJwb2xhdGUsICRsb2cpIHsKKyAgdmFy
IEJSQUNFID0gL3t9L2csCisgICAgICBJU19XSEVOID0gL153aGVuKE1pbnVzKT8oLispJC87CisK
KyAgcmV0dXJuIHsKKyAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cikgewor
ICAgICAgdmFyIG51bWJlckV4cCA9IGF0dHIuY291bnQsCisgICAgICAgICAgd2hlbkV4cCA9IGF0
dHIuJGF0dHIud2hlbiAmJiBlbGVtZW50LmF0dHIoYXR0ci4kYXR0ci53aGVuKSwgLy8gd2UgaGF2
ZSB7e319IGluIGF0dHJzCisgICAgICAgICAgb2Zmc2V0ID0gYXR0ci5vZmZzZXQgfHwgMCwKKyAg
ICAgICAgICB3aGVucyA9IHNjb3BlLiRldmFsKHdoZW5FeHApIHx8IHt9LAorICAgICAgICAgIHdo
ZW5zRXhwRm5zID0ge30sCisgICAgICAgICAgc3RhcnRTeW1ib2wgPSAkaW50ZXJwb2xhdGUuc3Rh
cnRTeW1ib2woKSwKKyAgICAgICAgICBlbmRTeW1ib2wgPSAkaW50ZXJwb2xhdGUuZW5kU3ltYm9s
KCksCisgICAgICAgICAgYnJhY2VSZXBsYWNlbWVudCA9IHN0YXJ0U3ltYm9sICsgbnVtYmVyRXhw
ICsgJy0nICsgb2Zmc2V0ICsgZW5kU3ltYm9sLAorICAgICAgICAgIHdhdGNoUmVtb3ZlciA9IGFu
Z3VsYXIubm9vcCwKKyAgICAgICAgICBsYXN0Q291bnQ7CisKKyAgICAgIGZvckVhY2goYXR0ciwg
ZnVuY3Rpb24oZXhwcmVzc2lvbiwgYXR0cmlidXRlTmFtZSkgeworICAgICAgICB2YXIgdG1wTWF0
Y2ggPSBJU19XSEVOLmV4ZWMoYXR0cmlidXRlTmFtZSk7CisgICAgICAgIGlmICh0bXBNYXRjaCkg
eworICAgICAgICAgIHZhciB3aGVuS2V5ID0gKHRtcE1hdGNoWzFdID8gJy0nIDogJycpICsgbG93
ZXJjYXNlKHRtcE1hdGNoWzJdKTsKKyAgICAgICAgICB3aGVuc1t3aGVuS2V5XSA9IGVsZW1lbnQu
YXR0cihhdHRyLiRhdHRyW2F0dHJpYnV0ZU5hbWVdKTsKKyAgICAgICAgfQorICAgICAgfSk7Cisg
ICAgICBmb3JFYWNoKHdoZW5zLCBmdW5jdGlvbihleHByZXNzaW9uLCBrZXkpIHsKKyAgICAgICAg
d2hlbnNFeHBGbnNba2V5XSA9ICRpbnRlcnBvbGF0ZShleHByZXNzaW9uLnJlcGxhY2UoQlJBQ0Us
IGJyYWNlUmVwbGFjZW1lbnQpKTsKKworICAgICAgfSk7CisKKyAgICAgIHNjb3BlLiR3YXRjaChu
dW1iZXJFeHAsIGZ1bmN0aW9uIG5nUGx1cmFsaXplV2F0Y2hBY3Rpb24obmV3VmFsKSB7CisgICAg
ICAgIHZhciBjb3VudCA9IHBhcnNlRmxvYXQobmV3VmFsKTsKKyAgICAgICAgdmFyIGNvdW50SXNO
YU4gPSBpc05hTihjb3VudCk7CisKKyAgICAgICAgaWYgKCFjb3VudElzTmFOICYmICEoY291bnQg
aW4gd2hlbnMpKSB7CisgICAgICAgICAgLy8gSWYgYW4gZXhwbGljaXQgbnVtYmVyIHJ1bGUgc3Vj
aCBhcyAxLCAyLCAzLi4uIGlzIGRlZmluZWQsIGp1c3QgdXNlIGl0LgorICAgICAgICAgIC8vIE90
aGVyd2lzZSwgY2hlY2sgaXQgYWdhaW5zdCBwbHVyYWxpemF0aW9uIHJ1bGVzIGluICRsb2NhbGUg
c2VydmljZS4KKyAgICAgICAgICBjb3VudCA9ICRsb2NhbGUucGx1cmFsQ2F0KGNvdW50IC0gb2Zm
c2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIGJvdGggYGNvdW50YCBhbmQgYGxhc3RD
b3VudGAgYXJlIE5hTiwgd2UgZG9uJ3QgbmVlZCB0byByZS1yZWdpc3RlciBhIHdhdGNoLgorICAg
ICAgICAvLyBJbiBKUyBgTmFOICE9PSBOYU5gLCBzbyB3ZSBoYXZlIHRvIGV4bGljaXRseSBjaGVj
ay4KKyAgICAgICAgaWYgKChjb3VudCAhPT0gbGFzdENvdW50KSAmJiAhKGNvdW50SXNOYU4gJiYg
aXNOdW1iZXIobGFzdENvdW50KSAmJiBpc05hTihsYXN0Q291bnQpKSkgeworICAgICAgICAgIHdh
dGNoUmVtb3ZlcigpOworICAgICAgICAgIHZhciB3aGVuRXhwRm4gPSB3aGVuc0V4cEZuc1tjb3Vu
dF07CisgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHdoZW5FeHBGbikpIHsKKyAgICAgICAgICAg
IGlmIChuZXdWYWwgIT0gbnVsbCkgeworICAgICAgICAgICAgICAkbG9nLmRlYnVnKCJuZ1BsdXJh
bGl6ZTogbm8gcnVsZSBkZWZpbmVkIGZvciAnIiArIGNvdW50ICsgIicgaW4gIiArIHdoZW5FeHAp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2F0Y2hSZW1vdmVyID0gbm9vcDsKKyAgICAg
ICAgICAgIHVwZGF0ZUVsZW1lbnRUZXh0KCk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHdhdGNoUmVtb3ZlciA9IHNjb3BlLiR3YXRjaCh3aGVuRXhwRm4sIHVwZGF0ZUVsZW1lbnRU
ZXh0KTsKKyAgICAgICAgICB9CisgICAgICAgICAgbGFzdENvdW50ID0gY291bnQ7CisgICAgICAg
IH0KKyAgICAgIH0pOworCisgICAgICBmdW5jdGlvbiB1cGRhdGVFbGVtZW50VGV4dChuZXdUZXh0
KSB7CisgICAgICAgIGVsZW1lbnQudGV4dChuZXdUZXh0IHx8ICcnKTsKKyAgICAgIH0KKyAgICB9
CisgIH07Cit9XTsKKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBuZ1JlcGVh
dAorICogQG11bHRpRWxlbWVudAorICoKKyAqIEBkZXNjcmlwdGlvbgorICogVGhlIGBuZ1JlcGVh
dGAgZGlyZWN0aXZlIGluc3RhbnRpYXRlcyBhIHRlbXBsYXRlIG9uY2UgcGVyIGl0ZW0gZnJvbSBh
IGNvbGxlY3Rpb24uIEVhY2ggdGVtcGxhdGUKKyAqIGluc3RhbmNlIGdldHMgaXRzIG93biBzY29w
ZSwgd2hlcmUgdGhlIGdpdmVuIGxvb3AgdmFyaWFibGUgaXMgc2V0IHRvIHRoZSBjdXJyZW50IGNv
bGxlY3Rpb24gaXRlbSwKKyAqIGFuZCBgJGluZGV4YCBpcyBzZXQgdG8gdGhlIGl0ZW0gaW5kZXgg
b3Iga2V5LgorICoKKyAqIFNwZWNpYWwgcHJvcGVydGllcyBhcmUgZXhwb3NlZCBvbiB0aGUgbG9j
YWwgc2NvcGUgb2YgZWFjaCB0ZW1wbGF0ZSBpbnN0YW5jZSwgaW5jbHVkaW5nOgorICoKKyAqIHwg
VmFyaWFibGUgIHwgVHlwZSAgICAgICAgICAgIHwgRGV0YWlscyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHwt
LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAqIHwg
YCRpbmRleGAgIHwge0B0eXBlIG51bWJlcn0gIHwgaXRlcmF0b3Igb2Zmc2V0IG9mIHRoZSByZXBl
YXRlZCBlbGVtZW50ICgwLi5sZW5ndGgtMSkgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHwg
YCRmaXJzdGAgIHwge0B0eXBlIGJvb2xlYW59IHwgdHJ1ZSBpZiB0aGUgcmVwZWF0ZWQgZWxlbWVu
dCBpcyBmaXJzdCBpbiB0aGUgaXRlcmF0b3IuICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHwg
YCRtaWRkbGVgIHwge0B0eXBlIGJvb2xlYW59IHwgdHJ1ZSBpZiB0aGUgcmVwZWF0ZWQgZWxlbWVu
dCBpcyBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgbGFzdCBpbiB0aGUgaXRlcmF0b3IuIHwKKyAqIHwg
YCRsYXN0YCAgIHwge0B0eXBlIGJvb2xlYW59IHwgdHJ1ZSBpZiB0aGUgcmVwZWF0ZWQgZWxlbWVu
dCBpcyBsYXN0IGluIHRoZSBpdGVyYXRvci4gICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHwg
YCRldmVuYCAgIHwge0B0eXBlIGJvb2xlYW59IHwgdHJ1ZSBpZiB0aGUgaXRlcmF0b3IgcG9zaXRp
b24gYCRpbmRleGAgaXMgZXZlbiAob3RoZXJ3aXNlIGZhbHNlKS4gICAgICAgICAgIHwKKyAqIHwg
YCRvZGRgICAgIHwge0B0eXBlIGJvb2xlYW59IHwgdHJ1ZSBpZiB0aGUgaXRlcmF0b3IgcG9zaXRp
b24gYCRpbmRleGAgaXMgb2RkIChvdGhlcndpc2UgZmFsc2UpLiAgICAgICAgICAgIHwKKyAqCisg
KiBDcmVhdGluZyBhbGlhc2VzIGZvciB0aGVzZSBwcm9wZXJ0aWVzIGlzIHBvc3NpYmxlIHdpdGgg
e0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0luaXQgYG5nSW5pdGB9LgorICogVGhpcyBtYXkgYmUgdXNl
ZnVsIHdoZW4sIGZvciBpbnN0YW5jZSwgbmVzdGluZyBuZ1JlcGVhdHMuCisgKgorICoKKyAqICMg
SXRlcmF0aW5nIG92ZXIgb2JqZWN0IHByb3BlcnRpZXMKKyAqCisgKiBJdCBpcyBwb3NzaWJsZSB0
byBnZXQgYG5nUmVwZWF0YCB0byBpdGVyYXRlIG92ZXIgdGhlIHByb3BlcnRpZXMgb2YgYW4gb2Jq
ZWN0IHVzaW5nIHRoZSBmb2xsb3dpbmcKKyAqIHN5bnRheDoKKyAqCisgKiBgYGBqcworICogPGRp
diBuZy1yZXBlYXQ9IihrZXksIHZhbHVlKSBpbiBteU9iaiI+IC4uLiA8L2Rpdj4KKyAqIGBgYAor
ICoKKyAqIFlvdSBuZWVkIHRvIGJlIGF3YXJlIHRoYXQgdGhlIEphdmFTY3JpcHQgc3BlY2lmaWNh
dGlvbiBkb2VzIG5vdCBkZWZpbmUgdGhlIG9yZGVyIG9mIGtleXMKKyAqIHJldHVybmVkIGZvciBh
biBvYmplY3QuIChUbyBtaXRpZ2F0ZSB0aGlzIGluIEFuZ3VsYXIgMS4zIHRoZSBgbmdSZXBlYXRg
IGRpcmVjdGl2ZQorICogdXNlZCB0byBzb3J0IHRoZSBrZXlzIGFscGhhYmV0aWNhbGx5LikKKyAq
CisgKiBWZXJzaW9uIDEuNCByZW1vdmVkIHRoZSBhbHBoYWJldGljIHNvcnRpbmcuIFdlIG5vdyBy
ZWx5IG9uIHRoZSBvcmRlciByZXR1cm5lZCBieSB0aGUgYnJvd3NlcgorICogd2hlbiBydW5uaW5n
IGBmb3Iga2V5IGluIG15T2JqYC4gSXQgc2VlbXMgdGhhdCBicm93c2VycyBnZW5lcmFsbHkgZm9s
bG93IHRoZSBzdHJhdGVneSBvZiBwcm92aWRpbmcKKyAqIGtleXMgaW4gdGhlIG9yZGVyIGluIHdo
aWNoIHRoZXkgd2VyZSBkZWZpbmVkLCBhbHRob3VnaCB0aGVyZSBhcmUgZXhjZXB0aW9ucyB3aGVu
IGtleXMgYXJlIGRlbGV0ZWQKKyAqIGFuZCByZWluc3RhdGVkLiBTZWUgaHR0cHM6Ly9kZXZlbG9w
ZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT3BlcmF0
b3JzL2RlbGV0ZSNDcm9zcy1icm93c2VyX2lzc3VlcworICoKKyAqIElmIHRoaXMgaXMgbm90IGRl
c2lyZWQsIHRoZSByZWNvbW1lbmRlZCB3b3JrYXJvdW5kIGlzIHRvIGNvbnZlcnQgeW91ciBvYmpl
Y3QgaW50byBhbiBhcnJheQorICogdGhhdCBpcyBzb3J0ZWQgaW50byB0aGUgb3JkZXIgdGhhdCB5
b3UgcHJlZmVyIGJlZm9yZSBwcm92aWRpbmcgaXQgdG8gYG5nUmVwZWF0YC4gIFlvdSBjb3VsZAor
ICogZG8gdGhpcyB3aXRoIGEgZmlsdGVyIHN1Y2ggYXMgW3RvQXJyYXlGaWx0ZXJdKGh0dHA6Ly9u
Z21vZHVsZXMub3JnL21vZHVsZXMvYW5ndWxhci10b0FycmF5RmlsdGVyKQorICogb3IgaW1wbGVt
ZW50IGEgYCR3YXRjaGAgb24gdGhlIG9iamVjdCB5b3Vyc2VsZi4KKyAqCisgKgorICogIyBUcmFj
a2luZyBhbmQgRHVwbGljYXRlcworICoKKyAqIFdoZW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBjb2xs
ZWN0aW9uIGNoYW5nZSwgYG5nUmVwZWF0YCBtYWtlcyB0aGUgY29ycmVzcG9uZGluZyBjaGFuZ2Vz
IHRvIHRoZSBET006CisgKgorICogKiBXaGVuIGFuIGl0ZW0gaXMgYWRkZWQsIGEgbmV3IGluc3Rh
bmNlIG9mIHRoZSB0ZW1wbGF0ZSBpcyBhZGRlZCB0byB0aGUgRE9NLgorICogKiBXaGVuIGFuIGl0
ZW0gaXMgcmVtb3ZlZCwgaXRzIHRlbXBsYXRlIGluc3RhbmNlIGlzIHJlbW92ZWQgZnJvbSB0aGUg
RE9NLgorICogKiBXaGVuIGl0ZW1zIGFyZSByZW9yZGVyZWQsIHRoZWlyIHJlc3BlY3RpdmUgdGVt
cGxhdGVzIGFyZSByZW9yZGVyZWQgaW4gdGhlIERPTS4KKyAqCisgKiBCeSBkZWZhdWx0LCBgbmdS
ZXBlYXRgIGRvZXMgbm90IGFsbG93IGR1cGxpY2F0ZSBpdGVtcyBpbiBhcnJheXMuIFRoaXMgaXMg
YmVjYXVzZSB3aGVuCisgKiB0aGVyZSBhcmUgZHVwbGljYXRlcywgaXQgaXMgbm90IHBvc3NpYmxl
IHRvIG1haW50YWluIGEgb25lLXRvLW9uZSBtYXBwaW5nIGJldHdlZW4gY29sbGVjdGlvbgorICog
aXRlbXMgYW5kIERPTSBlbGVtZW50cy4KKyAqCisgKiBJZiB5b3UgZG8gbmVlZCB0byByZXBlYXQg
ZHVwbGljYXRlIGl0ZW1zLCB5b3UgY2FuIHN1YnN0aXR1dGUgdGhlIGRlZmF1bHQgdHJhY2tpbmcg
YmVoYXZpb3IKKyAqIHdpdGggeW91ciBvd24gdXNpbmcgdGhlIGB0cmFjayBieWAgZXhwcmVzc2lv
bi4KKyAqCisgKiBGb3IgZXhhbXBsZSwgeW91IG1heSB0cmFjayBpdGVtcyBieSB0aGUgaW5kZXgg
b2YgZWFjaCBpdGVtIGluIHRoZSBjb2xsZWN0aW9uLCB1c2luZyB0aGUKKyAqIHNwZWNpYWwgc2Nv
cGUgcHJvcGVydHkgYCRpbmRleGA6CisgKiBgYGBodG1sCisgKiAgICA8ZGl2IG5nLXJlcGVhdD0i
biBpbiBbNDIsIDQyLCA0MywgNDNdIHRyYWNrIGJ5ICRpbmRleCI+CisgKiAgICAgIHt7bn19Cisg
KiAgICA8L2Rpdj4KKyAqIGBgYAorICoKKyAqIFlvdSBtYXkgdXNlIGFyYml0cmFyeSBleHByZXNz
aW9ucyBpbiBgdHJhY2sgYnlgLCBpbmNsdWRpbmcgcmVmZXJlbmNlcyB0byBjdXN0b20gZnVuY3Rp
b25zCisgKiBvbiB0aGUgc2NvcGU6CisgKiBgYGBodG1sCisgKiAgICA8ZGl2IG5nLXJlcGVhdD0i
biBpbiBbNDIsIDQyLCA0MywgNDNdIHRyYWNrIGJ5IG15VHJhY2tpbmdGdW5jdGlvbihuKSI+Cisg
KiAgICAgIHt7bn19CisgKiAgICA8L2Rpdj4KKyAqIGBgYAorICoKKyAqIElmIHlvdSBhcmUgd29y
a2luZyB3aXRoIG9iamVjdHMgdGhhdCBoYXZlIGFuIGlkZW50aWZpZXIgcHJvcGVydHksIHlvdSBj
YW4gdHJhY2sKKyAqIGJ5IHRoZSBpZGVudGlmaWVyIGluc3RlYWQgb2YgdGhlIHdob2xlIG9iamVj
dC4gU2hvdWxkIHlvdSByZWxvYWQgeW91ciBkYXRhIGxhdGVyLCBgbmdSZXBlYXRgCisgKiB3aWxs
IG5vdCBoYXZlIHRvIHJlYnVpbGQgdGhlIERPTSBlbGVtZW50cyBmb3IgaXRlbXMgaXQgaGFzIGFs
cmVhZHkgcmVuZGVyZWQsIGV2ZW4gaWYgdGhlCisgKiBKYXZhU2NyaXB0IG9iamVjdHMgaW4gdGhl
IGNvbGxlY3Rpb24gaGF2ZSBiZWVuIHN1YnN0aXR1dGVkIGZvciBuZXcgb25lczoKKyAqIGBgYGh0
bWwKKyAqICAgIDxkaXYgbmctcmVwZWF0PSJtb2RlbCBpbiBjb2xsZWN0aW9uIHRyYWNrIGJ5IG1v
ZGVsLmlkIj4KKyAqICAgICAge3ttb2RlbC5uYW1lfX0KKyAqICAgIDwvZGl2PgorICogYGBgCisg
KgorICogV2hlbiBubyBgdHJhY2sgYnlgIGV4cHJlc3Npb24gaXMgcHJvdmlkZWQsIGl0IGlzIGVx
dWl2YWxlbnQgdG8gdHJhY2tpbmcgYnkgdGhlIGJ1aWx0LWluCisgKiBgJGlkYCBmdW5jdGlvbiwg
d2hpY2ggdHJhY2tzIGl0ZW1zIGJ5IHRoZWlyIGlkZW50aXR5OgorICogYGBgaHRtbAorICogICAg
PGRpdiBuZy1yZXBlYXQ9Im9iaiBpbiBjb2xsZWN0aW9uIHRyYWNrIGJ5ICRpZChvYmopIj4KKyAq
ICAgICAge3tvYmoucHJvcH19CisgKiAgICA8L2Rpdj4KKyAqIGBgYAorICoKKyAqIDxkaXYgY2xh
c3M9ImFsZXJ0IGFsZXJ0LXdhcm5pbmciPgorICogKipOb3RlOioqIGB0cmFjayBieWAgbXVzdCBh
bHdheXMgYmUgdGhlIGxhc3QgZXhwcmVzc2lvbjoKKyAqIDwvZGl2PgorICogYGBgCisgKiA8ZGl2
IG5nLXJlcGVhdD0ibW9kZWwgaW4gY29sbGVjdGlvbiB8IG9yZGVyQnk6ICdpZCcgYXMgZmlsdGVy
ZWRfcmVzdWx0IHRyYWNrIGJ5IG1vZGVsLmlkIj4KKyAqICAgICB7e21vZGVsLm5hbWV9fQorICog
PC9kaXY+CisgKiBgYGAKKyAqCisgKiAjIFNwZWNpYWwgcmVwZWF0IHN0YXJ0IGFuZCBlbmQgcG9p
bnRzCisgKiBUbyByZXBlYXQgYSBzZXJpZXMgb2YgZWxlbWVudHMgaW5zdGVhZCBvZiBqdXN0IG9u
ZSBwYXJlbnQgZWxlbWVudCwgbmdSZXBlYXQgKGFzIHdlbGwgYXMgb3RoZXIgbmcgZGlyZWN0aXZl
cykgc3VwcG9ydHMgZXh0ZW5kaW5nCisgKiB0aGUgcmFuZ2Ugb2YgdGhlIHJlcGVhdGVyIGJ5IGRl
ZmluaW5nIGV4cGxpY2l0IHN0YXJ0IGFuZCBlbmQgcG9pbnRzIGJ5IHVzaW5nICoqbmctcmVwZWF0
LXN0YXJ0KiogYW5kICoqbmctcmVwZWF0LWVuZCoqIHJlc3BlY3RpdmVseS4KKyAqIFRoZSAqKm5n
LXJlcGVhdC1zdGFydCoqIGRpcmVjdGl2ZSB3b3JrcyB0aGUgc2FtZSBhcyAqKm5nLXJlcGVhdCoq
LCBidXQgd2lsbCByZXBlYXQgYWxsIHRoZSBIVE1MIGNvZGUgKGluY2x1ZGluZyB0aGUgdGFnIGl0
J3MgZGVmaW5lZCBvbikKKyAqIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIGVuZGluZyBIVE1MIHRh
ZyB3aGVyZSAqKm5nLXJlcGVhdC1lbmQqKiBpcyBwbGFjZWQuCisgKgorICogVGhlIGV4YW1wbGUg
YmVsb3cgbWFrZXMgdXNlIG9mIHRoaXMgZmVhdHVyZToKKyAqIGBgYGh0bWwKKyAqICAgPGhlYWRl
ciBuZy1yZXBlYXQtc3RhcnQ9Iml0ZW0gaW4gaXRlbXMiPgorICogICAgIEhlYWRlciB7eyBpdGVt
IH19CisgKiAgIDwvaGVhZGVyPgorICogICA8ZGl2IGNsYXNzPSJib2R5Ij4KKyAqICAgICBCb2R5
IHt7IGl0ZW0gfX0KKyAqICAgPC9kaXY+CisgKiAgIDxmb290ZXIgbmctcmVwZWF0LWVuZD4KKyAq
ICAgICBGb290ZXIge3sgaXRlbSB9fQorICogICA8L2Zvb3Rlcj4KKyAqIGBgYAorICoKKyAqIEFu
ZCB3aXRoIGFuIGlucHV0IG9mIHtAdHlwZSBbJ0EnLCdCJ119IGZvciB0aGUgaXRlbXMgdmFyaWFi
bGUgaW4gdGhlIGV4YW1wbGUgYWJvdmUsIHRoZSBvdXRwdXQgd2lsbCBldmFsdWF0ZSB0bzoKKyAq
IGBgYGh0bWwKKyAqICAgPGhlYWRlcj4KKyAqICAgICBIZWFkZXIgQQorICogICA8L2hlYWRlcj4K
KyAqICAgPGRpdiBjbGFzcz0iYm9keSI+CisgKiAgICAgQm9keSBBCisgKiAgIDwvZGl2PgorICog
ICA8Zm9vdGVyPgorICogICAgIEZvb3RlciBBCisgKiAgIDwvZm9vdGVyPgorICogICA8aGVhZGVy
PgorICogICAgIEhlYWRlciBCCisgKiAgIDwvaGVhZGVyPgorICogICA8ZGl2IGNsYXNzPSJib2R5
Ij4KKyAqICAgICBCb2R5IEIKKyAqICAgPC9kaXY+CisgKiAgIDxmb290ZXI+CisgKiAgICAgRm9v
dGVyIEIKKyAqICAgPC9mb290ZXI+CisgKiBgYGAKKyAqCisgKiBUaGUgY3VzdG9tIHN0YXJ0IGFu
ZCBlbmQgcG9pbnRzIGZvciBuZ1JlcGVhdCBhbHNvIHN1cHBvcnQgYWxsIG90aGVyIEhUTUwgZGly
ZWN0aXZlIHN5bnRheCBmbGF2b3JzIHByb3ZpZGVkIGluIEFuZ3VsYXJKUyAoc3VjaAorICogYXMg
KipkYXRhLW5nLXJlcGVhdC1zdGFydCoqLCAqKngtbmctcmVwZWF0LXN0YXJ0KiogYW5kICoqbmc6
cmVwZWF0LXN0YXJ0KiopLgorICoKKyAqIEBhbmltYXRpb25zCisgKiAqKi5lbnRlcioqIC0gd2hl
biBhIG5ldyBpdGVtIGlzIGFkZGVkIHRvIHRoZSBsaXN0IG9yIHdoZW4gYW4gaXRlbSBpcyByZXZl
YWxlZCBhZnRlciBhIGZpbHRlcgorICoKKyAqICoqLmxlYXZlKiogLSB3aGVuIGFuIGl0ZW0gaXMg
cmVtb3ZlZCBmcm9tIHRoZSBsaXN0IG9yIHdoZW4gYW4gaXRlbSBpcyBmaWx0ZXJlZCBvdXQKKyAq
CisgKiAqKi5tb3ZlKiogLSB3aGVuIGFuIGFkamFjZW50IGl0ZW0gaXMgZmlsdGVyZWQgb3V0IGNh
dXNpbmcgYSByZW9yZGVyIG9yIHdoZW4gdGhlIGl0ZW0gY29udGVudHMgYXJlIHJlb3JkZXJlZAor
ICoKKyAqIEBlbGVtZW50IEFOWQorICogQHNjb3BlCisgKiBAcHJpb3JpdHkgMTAwMAorICogQHBh
cmFtIHtyZXBlYXRfZXhwcmVzc2lvbn0gbmdSZXBlYXQgVGhlIGV4cHJlc3Npb24gaW5kaWNhdGlu
ZyBob3cgdG8gZW51bWVyYXRlIGEgY29sbGVjdGlvbi4gVGhlc2UKKyAqICAgZm9ybWF0cyBhcmUg
Y3VycmVudGx5IHN1cHBvcnRlZDoKKyAqCisgKiAgICogYHZhcmlhYmxlIGluIGV4cHJlc3Npb25g
IOKAkyB3aGVyZSB2YXJpYWJsZSBpcyB0aGUgdXNlciBkZWZpbmVkIGxvb3AgdmFyaWFibGUgYW5k
IGBleHByZXNzaW9uYAorICogICAgIGlzIGEgc2NvcGUgZXhwcmVzc2lvbiBnaXZpbmcgdGhlIGNv
bGxlY3Rpb24gdG8gZW51bWVyYXRlLgorICoKKyAqICAgICBGb3IgZXhhbXBsZTogYGFsYnVtIGlu
IGFydGlzdC5hbGJ1bXNgLgorICoKKyAqICAgKiBgKGtleSwgdmFsdWUpIGluIGV4cHJlc3Npb25g
IOKAkyB3aGVyZSBga2V5YCBhbmQgYHZhbHVlYCBjYW4gYmUgYW55IHVzZXIgZGVmaW5lZCBpZGVu
dGlmaWVycywKKyAqICAgICBhbmQgYGV4cHJlc3Npb25gIGlzIHRoZSBzY29wZSBleHByZXNzaW9u
IGdpdmluZyB0aGUgY29sbGVjdGlvbiB0byBlbnVtZXJhdGUuCisgKgorICogICAgIEZvciBleGFt
cGxlOiBgKG5hbWUsIGFnZSkgaW4geydhZGFtJzoxMCwgJ2FtYWxpZSc6MTJ9YC4KKyAqCisgKiAg
ICogYHZhcmlhYmxlIGluIGV4cHJlc3Npb24gdHJhY2sgYnkgdHJhY2tpbmdfZXhwcmVzc2lvbmAg
4oCTIFlvdSBjYW4gYWxzbyBwcm92aWRlIGFuIG9wdGlvbmFsIHRyYWNraW5nIGV4cHJlc3Npb24K
KyAqICAgICB3aGljaCBjYW4gYmUgdXNlZCB0byBhc3NvY2lhdGUgdGhlIG9iamVjdHMgaW4gdGhl
IGNvbGxlY3Rpb24gd2l0aCB0aGUgRE9NIGVsZW1lbnRzLiBJZiBubyB0cmFja2luZyBleHByZXNz
aW9uCisgKiAgICAgaXMgc3BlY2lmaWVkLCBuZy1yZXBlYXQgYXNzb2NpYXRlcyBlbGVtZW50cyBi
eSBpZGVudGl0eS4gSXQgaXMgYW4gZXJyb3IgdG8gaGF2ZQorICogICAgIG1vcmUgdGhhbiBvbmUg
dHJhY2tpbmcgZXhwcmVzc2lvbiB2YWx1ZSByZXNvbHZlIHRvIHRoZSBzYW1lIGtleS4gKFRoaXMg
d291bGQgbWVhbiB0aGF0IHR3byBkaXN0aW5jdCBvYmplY3RzIGFyZQorICogICAgIG1hcHBlZCB0
byB0aGUgc2FtZSBET00gZWxlbWVudCwgd2hpY2ggaXMgbm90IHBvc3NpYmxlLikKKyAqCisgKiAg
ICAgTm90ZSB0aGF0IHRoZSB0cmFja2luZyBleHByZXNzaW9uIG11c3QgY29tZSBsYXN0LCBhZnRl
ciBhbnkgZmlsdGVycywgYW5kIHRoZSBhbGlhcyBleHByZXNzaW9uLgorICoKKyAqICAgICBGb3Ig
ZXhhbXBsZTogYGl0ZW0gaW4gaXRlbXNgIGlzIGVxdWl2YWxlbnQgdG8gYGl0ZW0gaW4gaXRlbXMg
dHJhY2sgYnkgJGlkKGl0ZW0pYC4gVGhpcyBpbXBsaWVzIHRoYXQgdGhlIERPTSBlbGVtZW50cwor
ICogICAgIHdpbGwgYmUgYXNzb2NpYXRlZCBieSBpdGVtIGlkZW50aXR5IGluIHRoZSBhcnJheS4K
KyAqCisgKiAgICAgRm9yIGV4YW1wbGU6IGBpdGVtIGluIGl0ZW1zIHRyYWNrIGJ5ICRpZChpdGVt
KWAuIEEgYnVpbHQgaW4gYCRpZCgpYCBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBhc3NpZ24gYSB1
bmlxdWUKKyAqICAgICBgJCRoYXNoS2V5YCBwcm9wZXJ0eSB0byBlYWNoIGl0ZW0gaW4gdGhlIGFy
cmF5LiBUaGlzIHByb3BlcnR5IGlzIHRoZW4gdXNlZCBhcyBhIGtleSB0byBhc3NvY2lhdGVkIERP
TSBlbGVtZW50cworICogICAgIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgaXRlbSBpbiB0aGUgYXJy
YXkgYnkgaWRlbnRpdHkuIE1vdmluZyB0aGUgc2FtZSBvYmplY3QgaW4gYXJyYXkgd291bGQgbW92
ZSB0aGUgRE9NCisgKiAgICAgZWxlbWVudCBpbiB0aGUgc2FtZSB3YXkgaW4gdGhlIERPTS4KKyAq
CisgKiAgICAgRm9yIGV4YW1wbGU6IGBpdGVtIGluIGl0ZW1zIHRyYWNrIGJ5IGl0ZW0uaWRgIGlz
IGEgdHlwaWNhbCBwYXR0ZXJuIHdoZW4gdGhlIGl0ZW1zIGNvbWUgZnJvbSB0aGUgZGF0YWJhc2Uu
IEluIHRoaXMKKyAqICAgICBjYXNlIHRoZSBvYmplY3QgaWRlbnRpdHkgZG9lcyBub3QgbWF0dGVy
LiBUd28gb2JqZWN0cyBhcmUgY29uc2lkZXJlZCBlcXVpdmFsZW50IGFzIGxvbmcgYXMgdGhlaXIg
YGlkYAorICogICAgIHByb3BlcnR5IGlzIHNhbWUuCisgKgorICogICAgIEZvciBleGFtcGxlOiBg
aXRlbSBpbiBpdGVtcyB8IGZpbHRlcjpzZWFyY2hUZXh0IHRyYWNrIGJ5IGl0ZW0uaWRgIGlzIGEg
cGF0dGVybiB0aGF0IG1pZ2h0IGJlIHVzZWQgdG8gYXBwbHkgYSBmaWx0ZXIKKyAqICAgICB0byBp
dGVtcyBpbiBjb25qdW5jdGlvbiB3aXRoIGEgdHJhY2tpbmcgZXhwcmVzc2lvbi4KKyAqCisgKiAg
ICogYHZhcmlhYmxlIGluIGV4cHJlc3Npb24gYXMgYWxpYXNfZXhwcmVzc2lvbmAg4oCTIFlvdSBj
YW4gYWxzbyBwcm92aWRlIGFuIG9wdGlvbmFsIGFsaWFzIGV4cHJlc3Npb24gd2hpY2ggd2lsbCB0
aGVuIHN0b3JlIHRoZQorICogICAgIGludGVybWVkaWF0ZSByZXN1bHRzIG9mIHRoZSByZXBlYXRl
ciBhZnRlciB0aGUgZmlsdGVycyBoYXZlIGJlZW4gYXBwbGllZC4gVHlwaWNhbGx5IHRoaXMgaXMg
dXNlZCB0byByZW5kZXIgYSBzcGVjaWFsIG1lc3NhZ2UKKyAqICAgICB3aGVuIGEgZmlsdGVyIGlz
IGFjdGl2ZSBvbiB0aGUgcmVwZWF0ZXIsIGJ1dCB0aGUgZmlsdGVyZWQgcmVzdWx0IHNldCBpcyBl
bXB0eS4KKyAqCisgKiAgICAgRm9yIGV4YW1wbGU6IGBpdGVtIGluIGl0ZW1zIHwgZmlsdGVyOngg
YXMgcmVzdWx0c2Agd2lsbCBzdG9yZSB0aGUgZnJhZ21lbnQgb2YgdGhlIHJlcGVhdGVkIGl0ZW1z
IGFzIGByZXN1bHRzYCwgYnV0IG9ubHkgYWZ0ZXIKKyAqICAgICB0aGUgaXRlbXMgaGF2ZSBiZWVu
IHByb2Nlc3NlZCB0aHJvdWdoIHRoZSBmaWx0ZXIuCisgKgorICogICAgIFBsZWFzZSBub3RlIHRo
YXQgYGFzIFt2YXJpYWJsZSBuYW1lXSBpcyBub3QgYW4gb3BlcmF0b3IgYnV0IHJhdGhlciBhIHBh
cnQgb2YgbmdSZXBlYXQgbWljcm8tc3ludGF4IHNvIGl0IGNhbiBiZSB1c2VkIG9ubHkgYXQgdGhl
IGVuZAorICogICAgIChhbmQgbm90IGFzIG9wZXJhdG9yLCBpbnNpZGUgYW4gZXhwcmVzc2lvbiku
CisgKgorICogICAgIEZvciBleGFtcGxlOiBgaXRlbSBpbiBpdGVtcyB8IGZpbHRlciA6IHggfCBv
cmRlckJ5IDogb3JkZXIgfCBsaW1pdFRvIDogbGltaXQgYXMgcmVzdWx0c2AgLgorICoKKyAqIEBl
eGFtcGxlCisgKiBUaGlzIGV4YW1wbGUgaW5pdGlhbGl6ZXMgdGhlIHNjb3BlIHRvIGEgbGlzdCBv
ZiBuYW1lcyBhbmQKKyAqIHRoZW4gdXNlcyBgbmdSZXBlYXRgIHRvIGRpc3BsYXkgZXZlcnkgcGVy
c29uOgorICA8ZXhhbXBsZSBtb2R1bGU9Im5nQW5pbWF0ZSIgZGVwcz0iYW5ndWxhci1hbmltYXRl
LmpzIiBhbmltYXRpb25zPSJ0cnVlIj4KKyAgICA8ZmlsZSBuYW1lPSJpbmRleC5odG1sIj4KKyAg
ICAgIDxkaXYgbmctaW5pdD0iZnJpZW5kcyA9IFsKKyAgICAgICAge25hbWU6J0pvaG4nLCBhZ2U6
MjUsIGdlbmRlcjonYm95J30sCisgICAgICAgIHtuYW1lOidKZXNzaWUnLCBhZ2U6MzAsIGdlbmRl
cjonZ2lybCd9LAorICAgICAgICB7bmFtZTonSm9oYW5uYScsIGFnZToyOCwgZ2VuZGVyOidnaXJs
J30sCisgICAgICAgIHtuYW1lOidKb3knLCBhZ2U6MTUsIGdlbmRlcjonZ2lybCd9LAorICAgICAg
ICB7bmFtZTonTWFyeScsIGFnZToyOCwgZ2VuZGVyOidnaXJsJ30sCisgICAgICAgIHtuYW1lOidQ
ZXRlcicsIGFnZTo5NSwgZ2VuZGVyOidib3knfSwKKyAgICAgICAge25hbWU6J1NlYmFzdGlhbics
IGFnZTo1MCwgZ2VuZGVyOidib3knfSwKKyAgICAgICAge25hbWU6J0VyaWthJywgYWdlOjI3LCBn
ZW5kZXI6J2dpcmwnfSwKKyAgICAgICAge25hbWU6J1BhdHJpY2snLCBhZ2U6NDAsIGdlbmRlcjon
Ym95J30sCisgICAgICAgIHtuYW1lOidTYW1hbnRoYScsIGFnZTo2MCwgZ2VuZGVyOidnaXJsJ30K
KyAgICAgIF0iPgorICAgICAgICBJIGhhdmUge3tmcmllbmRzLmxlbmd0aH19IGZyaWVuZHMuIFRo
ZXkgYXJlOgorICAgICAgICA8aW5wdXQgdHlwZT0ic2VhcmNoIiBuZy1tb2RlbD0icSIgcGxhY2Vo
b2xkZXI9ImZpbHRlciBmcmllbmRzLi4uIiBhcmlhLWxhYmVsPSJmaWx0ZXIgZnJpZW5kcyIgLz4K
KyAgICAgICAgPHVsIGNsYXNzPSJleGFtcGxlLWFuaW1hdGUtY29udGFpbmVyIj4KKyAgICAgICAg
ICA8bGkgY2xhc3M9ImFuaW1hdGUtcmVwZWF0IiBuZy1yZXBlYXQ9ImZyaWVuZCBpbiBmcmllbmRz
IHwgZmlsdGVyOnEgYXMgcmVzdWx0cyI+CisgICAgICAgICAgICBbe3skaW5kZXggKyAxfX1dIHt7
ZnJpZW5kLm5hbWV9fSB3aG8gaXMge3tmcmllbmQuYWdlfX0geWVhcnMgb2xkLgorICAgICAgICAg
IDwvbGk+CisgICAgICAgICAgPGxpIGNsYXNzPSJhbmltYXRlLXJlcGVhdCIgbmctaWY9InJlc3Vs
dHMubGVuZ3RoID09IDAiPgorICAgICAgICAgICAgPHN0cm9uZz5ObyByZXN1bHRzIGZvdW5kLi4u
PC9zdHJvbmc+CisgICAgICAgICAgPC9saT4KKyAgICAgICAgPC91bD4KKyAgICAgIDwvZGl2Pgor
ICAgIDwvZmlsZT4KKyAgICA8ZmlsZSBuYW1lPSJhbmltYXRpb25zLmNzcyI+CisgICAgICAuZXhh
bXBsZS1hbmltYXRlLWNvbnRhaW5lciB7CisgICAgICAgIGJhY2tncm91bmQ6d2hpdGU7CisgICAg
ICAgIGJvcmRlcjoxcHggc29saWQgYmxhY2s7CisgICAgICAgIGxpc3Qtc3R5bGU6bm9uZTsKKyAg
ICAgICAgbWFyZ2luOjA7CisgICAgICAgIHBhZGRpbmc6MCAxMHB4OworICAgICAgfQorCisgICAg
ICAuYW5pbWF0ZS1yZXBlYXQgeworICAgICAgICBsaW5lLWhlaWdodDo0MHB4OworICAgICAgICBs
aXN0LXN0eWxlOm5vbmU7CisgICAgICAgIGJveC1zaXppbmc6Ym9yZGVyLWJveDsKKyAgICAgIH0K
KworICAgICAgLmFuaW1hdGUtcmVwZWF0Lm5nLW1vdmUsCisgICAgICAuYW5pbWF0ZS1yZXBlYXQu
bmctZW50ZXIsCisgICAgICAuYW5pbWF0ZS1yZXBlYXQubmctbGVhdmUgeworICAgICAgICAtd2Vi
a2l0LXRyYW5zaXRpb246YWxsIGxpbmVhciAwLjVzOworICAgICAgICB0cmFuc2l0aW9uOmFsbCBs
aW5lYXIgMC41czsKKyAgICAgIH0KKworICAgICAgLmFuaW1hdGUtcmVwZWF0Lm5nLWxlYXZlLm5n
LWxlYXZlLWFjdGl2ZSwKKyAgICAgIC5hbmltYXRlLXJlcGVhdC5uZy1tb3ZlLAorICAgICAgLmFu
aW1hdGUtcmVwZWF0Lm5nLWVudGVyIHsKKyAgICAgICAgb3BhY2l0eTowOworICAgICAgICBtYXgt
aGVpZ2h0OjA7CisgICAgICB9CisKKyAgICAgIC5hbmltYXRlLXJlcGVhdC5uZy1sZWF2ZSwKKyAg
ICAgIC5hbmltYXRlLXJlcGVhdC5uZy1tb3ZlLm5nLW1vdmUtYWN0aXZlLAorICAgICAgLmFuaW1h
dGUtcmVwZWF0Lm5nLWVudGVyLm5nLWVudGVyLWFjdGl2ZSB7CisgICAgICAgIG9wYWNpdHk6MTsK
KyAgICAgICAgbWF4LWhlaWdodDo0MHB4OworICAgICAgfQorICAgIDwvZmlsZT4KKyAgICA8Zmls
ZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFjdG9yIj4KKyAgICAgIHZhciBmcmll
bmRzID0gZWxlbWVudC5hbGwoYnkucmVwZWF0ZXIoJ2ZyaWVuZCBpbiBmcmllbmRzJykpOworCisg
ICAgICBpdCgnc2hvdWxkIHJlbmRlciBpbml0aWFsIGRhdGEgc2V0JywgZnVuY3Rpb24oKSB7Cisg
ICAgICAgIGV4cGVjdChmcmllbmRzLmNvdW50KCkpLnRvQmUoMTApOworICAgICAgICBleHBlY3Qo
ZnJpZW5kcy5nZXQoMCkuZ2V0VGV4dCgpKS50b0VxdWFsKCdbMV0gSm9obiB3aG8gaXMgMjUgeWVh
cnMgb2xkLicpOworICAgICAgICBleHBlY3QoZnJpZW5kcy5nZXQoMSkuZ2V0VGV4dCgpKS50b0Vx
dWFsKCdbMl0gSmVzc2llIHdobyBpcyAzMCB5ZWFycyBvbGQuJyk7CisgICAgICAgIGV4cGVjdChm
cmllbmRzLmxhc3QoKS5nZXRUZXh0KCkpLnRvRXF1YWwoJ1sxMF0gU2FtYW50aGEgd2hvIGlzIDYw
IHllYXJzIG9sZC4nKTsKKyAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGluZygnZnJpZW5k
cy5sZW5ndGgnKSkuZ2V0VGV4dCgpKQorICAgICAgICAgICAgLnRvTWF0Y2goIkkgaGF2ZSAxMCBm
cmllbmRzLiBUaGV5IGFyZToiKTsKKyAgICAgIH0pOworCisgICAgICAgaXQoJ3Nob3VsZCB1cGRh
dGUgcmVwZWF0ZXIgd2hlbiBmaWx0ZXIgcHJlZGljYXRlIGNoYW5nZXMnLCBmdW5jdGlvbigpIHsK
KyAgICAgICAgIGV4cGVjdChmcmllbmRzLmNvdW50KCkpLnRvQmUoMTApOworCisgICAgICAgICBl
bGVtZW50KGJ5Lm1vZGVsKCdxJykpLnNlbmRLZXlzKCdtYScpOworCisgICAgICAgICBleHBlY3Qo
ZnJpZW5kcy5jb3VudCgpKS50b0JlKDIpOworICAgICAgICAgZXhwZWN0KGZyaWVuZHMuZ2V0KDAp
LmdldFRleHQoKSkudG9FcXVhbCgnWzFdIE1hcnkgd2hvIGlzIDI4IHllYXJzIG9sZC4nKTsKKyAg
ICAgICAgIGV4cGVjdChmcmllbmRzLmxhc3QoKS5nZXRUZXh0KCkpLnRvRXF1YWwoJ1syXSBTYW1h
bnRoYSB3aG8gaXMgNjAgeWVhcnMgb2xkLicpOworICAgICAgIH0pOworICAgICAgPC9maWxlPgor
ICAgIDwvZXhhbXBsZT4KKyAqLwordmFyIG5nUmVwZWF0RGlyZWN0aXZlID0gWyckcGFyc2UnLCAn
JGFuaW1hdGUnLCBmdW5jdGlvbigkcGFyc2UsICRhbmltYXRlKSB7CisgIHZhciBOR19SRU1PVkVE
ID0gJyQkTkdfUkVNT1ZFRCc7CisgIHZhciBuZ1JlcGVhdE1pbkVyciA9IG1pbkVycignbmdSZXBl
YXQnKTsKKworICB2YXIgdXBkYXRlU2NvcGUgPSBmdW5jdGlvbihzY29wZSwgaW5kZXgsIHZhbHVl
SWRlbnRpZmllciwgdmFsdWUsIGtleUlkZW50aWZpZXIsIGtleSwgYXJyYXlMZW5ndGgpIHsKKyAg
ICAvLyBUT0RPKHBlcmYpOiBnZW5lcmF0ZSBzZXR0ZXJzIHRvIHNoYXZlIG9mZiB+NDBtcyBvciAx
LTEuNSUKKyAgICBzY29wZVt2YWx1ZUlkZW50aWZpZXJdID0gdmFsdWU7CisgICAgaWYgKGtleUlk
ZW50aWZpZXIpIHNjb3BlW2tleUlkZW50aWZpZXJdID0ga2V5OworICAgIHNjb3BlLiRpbmRleCA9
IGluZGV4OworICAgIHNjb3BlLiRmaXJzdCA9IChpbmRleCA9PT0gMCk7CisgICAgc2NvcGUuJGxh
c3QgPSAoaW5kZXggPT09IChhcnJheUxlbmd0aCAtIDEpKTsKKyAgICBzY29wZS4kbWlkZGxlID0g
IShzY29wZS4kZmlyc3QgfHwgc2NvcGUuJGxhc3QpOworICAgIC8vIGpzaGludCBiaXR3aXNlOiBm
YWxzZQorICAgIHNjb3BlLiRvZGQgPSAhKHNjb3BlLiRldmVuID0gKGluZGV4JjEpID09PSAwKTsK
KyAgICAvLyBqc2hpbnQgYml0d2lzZTogdHJ1ZQorICB9OworCisgIHZhciBnZXRCbG9ja1N0YXJ0
ID0gZnVuY3Rpb24oYmxvY2spIHsKKyAgICByZXR1cm4gYmxvY2suY2xvbmVbMF07CisgIH07CisK
KyAgdmFyIGdldEJsb2NrRW5kID0gZnVuY3Rpb24oYmxvY2spIHsKKyAgICByZXR1cm4gYmxvY2su
Y2xvbmVbYmxvY2suY2xvbmUubGVuZ3RoIC0gMV07CisgIH07CisKKworICByZXR1cm4geworICAg
IHJlc3RyaWN0OiAnQScsCisgICAgbXVsdGlFbGVtZW50OiB0cnVlLAorICAgIHRyYW5zY2x1ZGU6
ICdlbGVtZW50JywKKyAgICBwcmlvcml0eTogMTAwMCwKKyAgICB0ZXJtaW5hbDogdHJ1ZSwKKyAg
ICAkJHRsYjogdHJ1ZSwKKyAgICBjb21waWxlOiBmdW5jdGlvbiBuZ1JlcGVhdENvbXBpbGUoJGVs
ZW1lbnQsICRhdHRyKSB7CisgICAgICB2YXIgZXhwcmVzc2lvbiA9ICRhdHRyLm5nUmVwZWF0Owor
ICAgICAgdmFyIG5nUmVwZWF0RW5kQ29tbWVudCA9IGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoJyBl
bmQgbmdSZXBlYXQ6ICcgKyBleHByZXNzaW9uICsgJyAnKTsKKworICAgICAgdmFyIG1hdGNoID0g
ZXhwcmVzc2lvbi5tYXRjaCgvXlxzKihbXHNcU10rPylccytpblxzKyhbXHNcU10rPykoPzpccyth
c1xzKyhbXHNcU10rPykpPyg/OlxzK3RyYWNrXHMrYnlccysoW1xzXFNdKz8pKT9ccyokLyk7CisK
KyAgICAgIGlmICghbWF0Y2gpIHsKKyAgICAgICAgdGhyb3cgbmdSZXBlYXRNaW5FcnIoJ2lleHAn
LCAiRXhwZWN0ZWQgZXhwcmVzc2lvbiBpbiBmb3JtIG9mICdfaXRlbV8gaW4gX2NvbGxlY3Rpb25f
WyB0cmFjayBieSBfaWRfXScgYnV0IGdvdCAnezB9Jy4iLAorICAgICAgICAgICAgZXhwcmVzc2lv
bik7CisgICAgICB9CisKKyAgICAgIHZhciBsaHMgPSBtYXRjaFsxXTsKKyAgICAgIHZhciByaHMg
PSBtYXRjaFsyXTsKKyAgICAgIHZhciBhbGlhc0FzID0gbWF0Y2hbM107CisgICAgICB2YXIgdHJh
Y2tCeUV4cCA9IG1hdGNoWzRdOworCisgICAgICBtYXRjaCA9IGxocy5tYXRjaCgvXig/Oihccypb
XCRcd10rKXxcKFxzKihbXCRcd10rKVxzKixccyooW1wkXHddKylccypcKSkkLyk7CisKKyAgICAg
IGlmICghbWF0Y2gpIHsKKyAgICAgICAgdGhyb3cgbmdSZXBlYXRNaW5FcnIoJ2lpZGV4cCcsICIn
X2l0ZW1fJyBpbiAnX2l0ZW1fIGluIF9jb2xsZWN0aW9uXycgc2hvdWxkIGJlIGFuIGlkZW50aWZp
ZXIgb3IgJyhfa2V5XywgX3ZhbHVlXyknIGV4cHJlc3Npb24sIGJ1dCBnb3QgJ3swfScuIiwKKyAg
ICAgICAgICAgIGxocyk7CisgICAgICB9CisgICAgICB2YXIgdmFsdWVJZGVudGlmaWVyID0gbWF0
Y2hbM10gfHwgbWF0Y2hbMV07CisgICAgICB2YXIga2V5SWRlbnRpZmllciA9IG1hdGNoWzJdOwor
CisgICAgICBpZiAoYWxpYXNBcyAmJiAoIS9eWyRhLXpBLVpfXVskYS16QS1aMC05X10qJC8udGVz
dChhbGlhc0FzKSB8fAorICAgICAgICAgIC9eKG51bGx8dW5kZWZpbmVkfHRoaXN8XCRpbmRleHxc
JGZpcnN0fFwkbWlkZGxlfFwkbGFzdHxcJGV2ZW58XCRvZGR8XCRwYXJlbnR8XCRyb290fFwkaWQp
JC8udGVzdChhbGlhc0FzKSkpIHsKKyAgICAgICAgdGhyb3cgbmdSZXBlYXRNaW5FcnIoJ2JhZGlk
ZW50JywgImFsaWFzICd7MH0nIGlzIGludmFsaWQgLS0tIG11c3QgYmUgYSB2YWxpZCBKUyBpZGVu
dGlmaWVyIHdoaWNoIGlzIG5vdCBhIHJlc2VydmVkIG5hbWUuIiwKKyAgICAgICAgICBhbGlhc0Fz
KTsKKyAgICAgIH0KKworICAgICAgdmFyIHRyYWNrQnlFeHBHZXR0ZXIsIHRyYWNrQnlJZEV4cEZu
LCB0cmFja0J5SWRBcnJheUZuLCB0cmFja0J5SWRPYmpGbjsKKyAgICAgIHZhciBoYXNoRm5Mb2Nh
bHMgPSB7JGlkOiBoYXNoS2V5fTsKKworICAgICAgaWYgKHRyYWNrQnlFeHApIHsKKyAgICAgICAg
dHJhY2tCeUV4cEdldHRlciA9ICRwYXJzZSh0cmFja0J5RXhwKTsKKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgIHRyYWNrQnlJZEFycmF5Rm4gPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7CisgICAgICAg
ICAgcmV0dXJuIGhhc2hLZXkodmFsdWUpOworICAgICAgICB9OworICAgICAgICB0cmFja0J5SWRP
YmpGbiA9IGZ1bmN0aW9uKGtleSkgeworICAgICAgICAgIHJldHVybiBrZXk7CisgICAgICAgIH07
CisgICAgICB9CisKKyAgICAgIHJldHVybiBmdW5jdGlvbiBuZ1JlcGVhdExpbmsoJHNjb3BlLCAk
ZWxlbWVudCwgJGF0dHIsIGN0cmwsICR0cmFuc2NsdWRlKSB7CisKKyAgICAgICAgaWYgKHRyYWNr
QnlFeHBHZXR0ZXIpIHsKKyAgICAgICAgICB0cmFja0J5SWRFeHBGbiA9IGZ1bmN0aW9uKGtleSwg
dmFsdWUsIGluZGV4KSB7CisgICAgICAgICAgICAvLyBhc3NpZ24ga2V5LCB2YWx1ZSwgYW5kICRp
bmRleCB0byB0aGUgbG9jYWxzIHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZCBpbiBoYXNoIGZ1bmN0
aW9ucworICAgICAgICAgICAgaWYgKGtleUlkZW50aWZpZXIpIGhhc2hGbkxvY2Fsc1trZXlJZGVu
dGlmaWVyXSA9IGtleTsKKyAgICAgICAgICAgIGhhc2hGbkxvY2Fsc1t2YWx1ZUlkZW50aWZpZXJd
ID0gdmFsdWU7CisgICAgICAgICAgICBoYXNoRm5Mb2NhbHMuJGluZGV4ID0gaW5kZXg7CisgICAg
ICAgICAgICByZXR1cm4gdHJhY2tCeUV4cEdldHRlcigkc2NvcGUsIGhhc2hGbkxvY2Fscyk7Cisg
ICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFN0b3JlIGEgbGlzdCBvZiBlbGVt
ZW50cyBmcm9tIHByZXZpb3VzIHJ1bi4gVGhpcyBpcyBhIGhhc2ggd2hlcmUga2V5IGlzIHRoZSBp
dGVtIGZyb20gdGhlCisgICAgICAgIC8vIGl0ZXJhdG9yLCBhbmQgdGhlIHZhbHVlIGlzIG9iamVj
dHMgd2l0aCBmb2xsb3dpbmcgcHJvcGVydGllcy4KKyAgICAgICAgLy8gICAtIHNjb3BlOiBib3Vu
ZCBzY29wZQorICAgICAgICAvLyAgIC0gZWxlbWVudDogcHJldmlvdXMgZWxlbWVudC4KKyAgICAg
ICAgLy8gICAtIGluZGV4OiBwb3NpdGlvbgorICAgICAgICAvLworICAgICAgICAvLyBXZSBhcmUg
dXNpbmcgbm8tcHJvdG8gb2JqZWN0IHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBndWFyZCBhZ2Fp
bnN0IGluaGVyaXRlZCBwcm9wcyB2aWEKKyAgICAgICAgLy8gaGFzT3duUHJvcGVydHkuCisgICAg
ICAgIHZhciBsYXN0QmxvY2tNYXAgPSBjcmVhdGVNYXAoKTsKKworICAgICAgICAvL3dhdGNoIHBy
b3BzCisgICAgICAgICRzY29wZS4kd2F0Y2hDb2xsZWN0aW9uKHJocywgZnVuY3Rpb24gbmdSZXBl
YXRBY3Rpb24oY29sbGVjdGlvbikgeworICAgICAgICAgIHZhciBpbmRleCwgbGVuZ3RoLAorICAg
ICAgICAgICAgICBwcmV2aW91c05vZGUgPSAkZWxlbWVudFswXSwgICAgIC8vIG5vZGUgdGhhdCBj
bG9uZWQgbm9kZXMgc2hvdWxkIGJlIGluc2VydGVkIGFmdGVyCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZWQgdG8gdGhlIGNvbW1lbnQg
bm9kZSBhbmNob3IKKyAgICAgICAgICAgICAgbmV4dE5vZGUsCisgICAgICAgICAgICAgIC8vIFNh
bWUgYXMgbGFzdEJsb2NrTWFwIGJ1dCBpdCBoYXMgdGhlIGN1cnJlbnQgc3RhdGUuIEl0IHdpbGwg
YmVjb21lIHRoZQorICAgICAgICAgICAgICAvLyBsYXN0QmxvY2tNYXAgb24gdGhlIG5leHQgaXRl
cmF0aW9uLgorICAgICAgICAgICAgICBuZXh0QmxvY2tNYXAgPSBjcmVhdGVNYXAoKSwKKyAgICAg
ICAgICAgICAgY29sbGVjdGlvbkxlbmd0aCwKKyAgICAgICAgICAgICAga2V5LCB2YWx1ZSwgLy8g
a2V5L3ZhbHVlIG9mIGl0ZXJhdGlvbgorICAgICAgICAgICAgICB0cmFja0J5SWQsCisgICAgICAg
ICAgICAgIHRyYWNrQnlJZEZuLAorICAgICAgICAgICAgICBjb2xsZWN0aW9uS2V5cywKKyAgICAg
ICAgICAgICAgYmxvY2ssICAgICAgIC8vIGxhc3Qgb2JqZWN0IGluZm9ybWF0aW9uIHtzY29wZSwg
ZWxlbWVudCwgaWR9CisgICAgICAgICAgICAgIG5leHRCbG9ja09yZGVyLAorICAgICAgICAgICAg
ICBlbGVtZW50c1RvUmVtb3ZlOworCisgICAgICAgICAgaWYgKGFsaWFzQXMpIHsKKyAgICAgICAg
ICAgICRzY29wZVthbGlhc0FzXSA9IGNvbGxlY3Rpb247CisgICAgICAgICAgfQorCisgICAgICAg
ICAgaWYgKGlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pKSB7CisgICAgICAgICAgICBjb2xsZWN0aW9u
S2V5cyA9IGNvbGxlY3Rpb247CisgICAgICAgICAgICB0cmFja0J5SWRGbiA9IHRyYWNrQnlJZEV4
cEZuIHx8IHRyYWNrQnlJZEFycmF5Rm47CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHRyYWNrQnlJZEZuID0gdHJhY2tCeUlkRXhwRm4gfHwgdHJhY2tCeUlkT2JqRm47CisgICAgICAg
ICAgICAvLyBpZiBvYmplY3QsIGV4dHJhY3Qga2V5cywgaW4gZW51bWVyYXRpb24gb3JkZXIsIHVu
c29ydGVkCisgICAgICAgICAgICBjb2xsZWN0aW9uS2V5cyA9IFtdOworICAgICAgICAgICAgZm9y
ICh2YXIgaXRlbUtleSBpbiBjb2xsZWN0aW9uKSB7CisgICAgICAgICAgICAgIGlmIChjb2xsZWN0
aW9uLmhhc093blByb3BlcnR5KGl0ZW1LZXkpICYmIGl0ZW1LZXkuY2hhckF0KDApICE9PSAnJCcp
IHsKKyAgICAgICAgICAgICAgICBjb2xsZWN0aW9uS2V5cy5wdXNoKGl0ZW1LZXkpOworICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgY29sbGVj
dGlvbkxlbmd0aCA9IGNvbGxlY3Rpb25LZXlzLmxlbmd0aDsKKyAgICAgICAgICBuZXh0QmxvY2tP
cmRlciA9IG5ldyBBcnJheShjb2xsZWN0aW9uTGVuZ3RoKTsKKworICAgICAgICAgIC8vIGxvY2F0
ZSBleGlzdGluZyBpdGVtcworICAgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGNvbGxl
Y3Rpb25MZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgIGtleSA9IChjb2xsZWN0aW9uID09
PSBjb2xsZWN0aW9uS2V5cykgPyBpbmRleCA6IGNvbGxlY3Rpb25LZXlzW2luZGV4XTsKKyAgICAg
ICAgICAgIHZhbHVlID0gY29sbGVjdGlvbltrZXldOworICAgICAgICAgICAgdHJhY2tCeUlkID0g
dHJhY2tCeUlkRm4oa2V5LCB2YWx1ZSwgaW5kZXgpOworICAgICAgICAgICAgaWYgKGxhc3RCbG9j
a01hcFt0cmFja0J5SWRdKSB7CisgICAgICAgICAgICAgIC8vIGZvdW5kIHByZXZpb3VzbHkgc2Vl
biBibG9jaworICAgICAgICAgICAgICBibG9jayA9IGxhc3RCbG9ja01hcFt0cmFja0J5SWRdOwor
ICAgICAgICAgICAgICBkZWxldGUgbGFzdEJsb2NrTWFwW3RyYWNrQnlJZF07CisgICAgICAgICAg
ICAgIG5leHRCbG9ja01hcFt0cmFja0J5SWRdID0gYmxvY2s7CisgICAgICAgICAgICAgIG5leHRC
bG9ja09yZGVyW2luZGV4XSA9IGJsb2NrOworICAgICAgICAgICAgfSBlbHNlIGlmIChuZXh0Qmxv
Y2tNYXBbdHJhY2tCeUlkXSkgeworICAgICAgICAgICAgICAvLyBpZiBjb2xsaXNpb24gZGV0ZWN0
ZWQuIHJlc3RvcmUgbGFzdEJsb2NrTWFwIGFuZCB0aHJvdyBhbiBlcnJvcgorICAgICAgICAgICAg
ICBmb3JFYWNoKG5leHRCbG9ja09yZGVyLCBmdW5jdGlvbihibG9jaykgeworICAgICAgICAgICAg
ICAgIGlmIChibG9jayAmJiBibG9jay5zY29wZSkgbGFzdEJsb2NrTWFwW2Jsb2NrLmlkXSA9IGJs
b2NrOworICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgdGhyb3cgbmdSZXBlYXRNaW5F
cnIoJ2R1cGVzJywKKyAgICAgICAgICAgICAgICAgICJEdXBsaWNhdGVzIGluIGEgcmVwZWF0ZXIg
YXJlIG5vdCBhbGxvd2VkLiBVc2UgJ3RyYWNrIGJ5JyBleHByZXNzaW9uIHRvIHNwZWNpZnkgdW5p
cXVlIGtleXMuIFJlcGVhdGVyOiB7MH0sIER1cGxpY2F0ZSBrZXk6IHsxfSwgRHVwbGljYXRlIHZh
bHVlOiB7Mn0iLAorICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiwgdHJhY2tCeUlkLCB2YWx1
ZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAvLyBuZXcgbmV2ZXIgYmVm
b3JlIHNlZW4gYmxvY2sKKyAgICAgICAgICAgICAgbmV4dEJsb2NrT3JkZXJbaW5kZXhdID0ge2lk
OiB0cmFja0J5SWQsIHNjb3BlOiB1bmRlZmluZWQsIGNsb25lOiB1bmRlZmluZWR9OworICAgICAg
ICAgICAgICBuZXh0QmxvY2tNYXBbdHJhY2tCeUlkXSA9IHRydWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgfQorCisgICAgICAgICAgLy8gcmVtb3ZlIGxlZnRvdmVyIGl0ZW1zCisgICAgICAg
ICAgZm9yICh2YXIgYmxvY2tLZXkgaW4gbGFzdEJsb2NrTWFwKSB7CisgICAgICAgICAgICBibG9j
ayA9IGxhc3RCbG9ja01hcFtibG9ja0tleV07CisgICAgICAgICAgICBlbGVtZW50c1RvUmVtb3Zl
ID0gZ2V0QmxvY2tOb2RlcyhibG9jay5jbG9uZSk7CisgICAgICAgICAgICAkYW5pbWF0ZS5sZWF2
ZShlbGVtZW50c1RvUmVtb3ZlKTsKKyAgICAgICAgICAgIGlmIChlbGVtZW50c1RvUmVtb3ZlWzBd
LnBhcmVudE5vZGUpIHsKKyAgICAgICAgICAgICAgLy8gaWYgdGhlIGVsZW1lbnQgd2FzIG5vdCBy
ZW1vdmVkIHlldCBiZWNhdXNlIG9mIHBlbmRpbmcgYW5pbWF0aW9uLCBtYXJrIGl0IGFzIGRlbGV0
ZWQKKyAgICAgICAgICAgICAgLy8gc28gdGhhdCB3ZSBjYW4gaWdub3JlIGl0IGxhdGVyCisgICAg
ICAgICAgICAgIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBlbGVtZW50c1RvUmVtb3ZlLmxlbmd0
aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50c1Rv
UmVtb3ZlW2luZGV4XVtOR19SRU1PVkVEXSA9IHRydWU7CisgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJsb2NrLnNjb3BlLiRkZXN0cm95KCk7CisgICAgICAgICAg
fQorCisgICAgICAgICAgLy8gd2UgYXJlIG5vdCB1c2luZyBmb3JFYWNoIGZvciBwZXJmIHJlYXNv
bnMgKHRyeWluZyB0byBhdm9pZCAjY2FsbCkKKyAgICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5k
ZXggPCBjb2xsZWN0aW9uTGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICBrZXkgPSAoY29s
bGVjdGlvbiA9PT0gY29sbGVjdGlvbktleXMpID8gaW5kZXggOiBjb2xsZWN0aW9uS2V5c1tpbmRl
eF07CisgICAgICAgICAgICB2YWx1ZSA9IGNvbGxlY3Rpb25ba2V5XTsKKyAgICAgICAgICAgIGJs
b2NrID0gbmV4dEJsb2NrT3JkZXJbaW5kZXhdOworCisgICAgICAgICAgICBpZiAoYmxvY2suc2Nv
cGUpIHsKKyAgICAgICAgICAgICAgLy8gaWYgd2UgaGF2ZSBhbHJlYWR5IHNlZW4gdGhpcyBvYmpl
Y3QsIHRoZW4gd2UgbmVlZCB0byByZXVzZSB0aGUKKyAgICAgICAgICAgICAgLy8gYXNzb2NpYXRl
ZCBzY29wZS9lbGVtZW50CisKKyAgICAgICAgICAgICAgbmV4dE5vZGUgPSBwcmV2aW91c05vZGU7
CisKKyAgICAgICAgICAgICAgLy8gc2tpcCBub2RlcyB0aGF0IGFyZSBhbHJlYWR5IHBlbmRpbmcg
cmVtb3ZhbCB2aWEgbGVhdmUgYW5pbWF0aW9uCisgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAg
ICAgICAgICBuZXh0Tm9kZSA9IG5leHROb2RlLm5leHRTaWJsaW5nOworICAgICAgICAgICAgICB9
IHdoaWxlIChuZXh0Tm9kZSAmJiBuZXh0Tm9kZVtOR19SRU1PVkVEXSk7CisKKyAgICAgICAgICAg
ICAgaWYgKGdldEJsb2NrU3RhcnQoYmxvY2spICE9IG5leHROb2RlKSB7CisgICAgICAgICAgICAg
ICAgLy8gZXhpc3RpbmcgaXRlbSB3aGljaCBnb3QgbW92ZWQKKyAgICAgICAgICAgICAgICAkYW5p
bWF0ZS5tb3ZlKGdldEJsb2NrTm9kZXMoYmxvY2suY2xvbmUpLCBudWxsLCBqcUxpdGUocHJldmlv
dXNOb2RlKSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgcHJldmlvdXNOb2RlID0g
Z2V0QmxvY2tFbmQoYmxvY2spOworICAgICAgICAgICAgICB1cGRhdGVTY29wZShibG9jay5zY29w
ZSwgaW5kZXgsIHZhbHVlSWRlbnRpZmllciwgdmFsdWUsIGtleUlkZW50aWZpZXIsIGtleSwgY29s
bGVjdGlvbkxlbmd0aCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAvLyBu
ZXcgaXRlbSB3aGljaCB3ZSBkb24ndCBrbm93IGFib3V0CisgICAgICAgICAgICAgICR0cmFuc2Ns
dWRlKGZ1bmN0aW9uIG5nUmVwZWF0VHJhbnNjbHVkZShjbG9uZSwgc2NvcGUpIHsKKyAgICAgICAg
ICAgICAgICBibG9jay5zY29wZSA9IHNjb3BlOworICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9q
c3BlcmYuY29tL2Nsb25lLXZzLWNyZWF0ZWNvbW1lbnQKKyAgICAgICAgICAgICAgICB2YXIgZW5k
Tm9kZSA9IG5nUmVwZWF0RW5kQ29tbWVudC5jbG9uZU5vZGUoZmFsc2UpOworICAgICAgICAgICAg
ICAgIGNsb25lW2Nsb25lLmxlbmd0aCsrXSA9IGVuZE5vZGU7CisKKyAgICAgICAgICAgICAgICAv
LyBUT0RPKHBlcmYpOiBzdXBwb3J0IG5ha2VkIHByZXZpb3VzTm9kZSBpbiBgZW50ZXJgIHRvIGF2
b2lkIGNyZWF0aW9uIG9mIGpxTGl0ZSB3cmFwcGVyPworICAgICAgICAgICAgICAgICRhbmltYXRl
LmVudGVyKGNsb25lLCBudWxsLCBqcUxpdGUocHJldmlvdXNOb2RlKSk7CisgICAgICAgICAgICAg
ICAgcHJldmlvdXNOb2RlID0gZW5kTm9kZTsKKyAgICAgICAgICAgICAgICAvLyBOb3RlOiBXZSBv
bmx5IG5lZWQgdGhlIGZpcnN0L2xhc3Qgbm9kZSBvZiB0aGUgY2xvbmVkIG5vZGVzLgorICAgICAg
ICAgICAgICAgIC8vIEhvd2V2ZXIsIHdlIG5lZWQgdG8ga2VlcCB0aGUgcmVmZXJlbmNlIHRvIHRo
ZSBqcWxpdGUgd3JhcHBlciBhcyBpdCBtaWdodCBiZSBjaGFuZ2VkIGxhdGVyCisgICAgICAgICAg
ICAgICAgLy8gYnkgYSBkaXJlY3RpdmUgd2l0aCB0ZW1wbGF0ZVVybCB3aGVuIGl0cyB0ZW1wbGF0
ZSBhcnJpdmVzLgorICAgICAgICAgICAgICAgIGJsb2NrLmNsb25lID0gY2xvbmU7CisgICAgICAg
ICAgICAgICAgbmV4dEJsb2NrTWFwW2Jsb2NrLmlkXSA9IGJsb2NrOworICAgICAgICAgICAgICAg
IHVwZGF0ZVNjb3BlKGJsb2NrLnNjb3BlLCBpbmRleCwgdmFsdWVJZGVudGlmaWVyLCB2YWx1ZSwg
a2V5SWRlbnRpZmllciwga2V5LCBjb2xsZWN0aW9uTGVuZ3RoKTsKKyAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGxhc3RCbG9ja01hcCA9IG5l
eHRCbG9ja01hcDsKKyAgICAgICAgfSk7CisgICAgICB9OworICAgIH0KKyAgfTsKK31dOworCit2
YXIgTkdfSElERV9DTEFTUyA9ICduZy1oaWRlJzsKK3ZhciBOR19ISURFX0lOX1BST0dSRVNTX0NM
QVNTID0gJ25nLWhpZGUtYW5pbWF0ZSc7CisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBu
YW1lIG5nU2hvdworICogQG11bHRpRWxlbWVudAorICoKKyAqIEBkZXNjcmlwdGlvbgorICogVGhl
IGBuZ1Nob3dgIGRpcmVjdGl2ZSBzaG93cyBvciBoaWRlcyB0aGUgZ2l2ZW4gSFRNTCBlbGVtZW50
IGJhc2VkIG9uIHRoZSBleHByZXNzaW9uCisgKiBwcm92aWRlZCB0byB0aGUgYG5nU2hvd2AgYXR0
cmlidXRlLiBUaGUgZWxlbWVudCBpcyBzaG93biBvciBoaWRkZW4gYnkgcmVtb3Zpbmcgb3IgYWRk
aW5nCisgKiB0aGUgYC5uZy1oaWRlYCBDU1MgY2xhc3Mgb250byB0aGUgZWxlbWVudC4gVGhlIGAu
bmctaGlkZWAgQ1NTIGNsYXNzIGlzIHByZWRlZmluZWQKKyAqIGluIEFuZ3VsYXJKUyBhbmQgc2V0
cyB0aGUgZGlzcGxheSBzdHlsZSB0byBub25lICh1c2luZyBhbiAhaW1wb3J0YW50IGZsYWcpLgor
ICogRm9yIENTUCBtb2RlIHBsZWFzZSBhZGQgYGFuZ3VsYXItY3NwLmNzc2AgdG8geW91ciBodG1s
IGZpbGUgKHNlZSB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nQ3NwIG5nQ3NwfSkuCisgKgorICogYGBg
aHRtbAorICogPCEtLSB3aGVuICRzY29wZS5teVZhbHVlIGlzIHRydXRoeSAoZWxlbWVudCBpcyB2
aXNpYmxlKSAtLT4KKyAqIDxkaXYgbmctc2hvdz0ibXlWYWx1ZSI+PC9kaXY+CisgKgorICogPCEt
LSB3aGVuICRzY29wZS5teVZhbHVlIGlzIGZhbHN5IChlbGVtZW50IGlzIGhpZGRlbikgLS0+Cisg
KiA8ZGl2IG5nLXNob3c9Im15VmFsdWUiIGNsYXNzPSJuZy1oaWRlIj48L2Rpdj4KKyAqIGBgYAor
ICoKKyAqIFdoZW4gdGhlIGBuZ1Nob3dgIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGEgZmFsc3kg
dmFsdWUgdGhlbiB0aGUgYC5uZy1oaWRlYCBDU1MgY2xhc3MgaXMgYWRkZWQgdG8gdGhlIGNsYXNz
CisgKiBhdHRyaWJ1dGUgb24gdGhlIGVsZW1lbnQgY2F1c2luZyBpdCB0byBiZWNvbWUgaGlkZGVu
LiBXaGVuIHRydXRoeSwgdGhlIGAubmctaGlkZWAgQ1NTIGNsYXNzIGlzIHJlbW92ZWQKKyAqIGZy
b20gdGhlIGVsZW1lbnQgY2F1c2luZyB0aGUgZWxlbWVudCBub3QgdG8gYXBwZWFyIGhpZGRlbi4K
KyAqCisgKiAjIyBXaHkgaXMgIWltcG9ydGFudCB1c2VkPworICoKKyAqIFlvdSBtYXkgYmUgd29u
ZGVyaW5nIHdoeSAhaW1wb3J0YW50IGlzIHVzZWQgZm9yIHRoZSBgLm5nLWhpZGVgIENTUyBjbGFz
cy4gVGhpcyBpcyBiZWNhdXNlIHRoZSBgLm5nLWhpZGVgIHNlbGVjdG9yCisgKiBjYW4gYmUgZWFz
aWx5IG92ZXJyaWRkZW4gYnkgaGVhdmllciBzZWxlY3RvcnMuIEZvciBleGFtcGxlLCBzb21ldGhp
bmcgYXMgc2ltcGxlCisgKiBhcyBjaGFuZ2luZyB0aGUgZGlzcGxheSBzdHlsZSBvbiBhIEhUTUwg
bGlzdCBpdGVtIHdvdWxkIG1ha2UgaGlkZGVuIGVsZW1lbnRzIGFwcGVhciB2aXNpYmxlLgorICog
VGhpcyBhbHNvIGJlY29tZXMgYSBiaWdnZXIgaXNzdWUgd2hlbiBkZWFsaW5nIHdpdGggQ1NTIGZy
YW1ld29ya3MuCisgKgorICogQnkgdXNpbmcgIWltcG9ydGFudCwgdGhlIHNob3cgYW5kIGhpZGUg
YmVoYXZpb3Igd2lsbCB3b3JrIGFzIGV4cGVjdGVkIGRlc3BpdGUgYW55IGNsYXNoIGJldHdlZW4g
Q1NTIHNlbGVjdG9yCisgKiBzcGVjaWZpY2l0eSAod2hlbiAhaW1wb3J0YW50IGlzbid0IHVzZWQg
d2l0aCBhbnkgY29uZmxpY3Rpbmcgc3R5bGVzKS4gSWYgYSBkZXZlbG9wZXIgY2hvb3NlcyB0byBv
dmVycmlkZSB0aGUKKyAqIHN0eWxpbmcgdG8gY2hhbmdlIGhvdyB0byBoaWRlIGFuIGVsZW1lbnQg
dGhlbiBpdCBpcyBqdXN0IGEgbWF0dGVyIG9mIHVzaW5nICFpbXBvcnRhbnQgaW4gdGhlaXIgb3du
IENTUyBjb2RlLgorICoKKyAqICMjIyBPdmVycmlkaW5nIGAubmctaGlkZWAKKyAqCisgKiBCeSBk
ZWZhdWx0LCB0aGUgYC5uZy1oaWRlYCBjbGFzcyB3aWxsIHN0eWxlIHRoZSBlbGVtZW50IHdpdGgg
YGRpc3BsYXk6IG5vbmUhaW1wb3J0YW50YC4gSWYgeW91IHdpc2ggdG8gY2hhbmdlCisgKiB0aGUg
aGlkZSBiZWhhdmlvciB3aXRoIG5nU2hvdy9uZ0hpZGUgdGhlbiB0aGlzIGNhbiBiZSBhY2hpZXZl
ZCBieSByZXN0YXRpbmcgdGhlIHN0eWxlcyBmb3IgdGhlIGAubmctaGlkZWAKKyAqIGNsYXNzIENT
Uy4gTm90ZSB0aGF0IHRoZSBzZWxlY3RvciB0aGF0IG5lZWRzIHRvIGJlIHVzZWQgaXMgYWN0dWFs
bHkgYC5uZy1oaWRlOm5vdCgubmctaGlkZS1hbmltYXRlKWAgdG8gY29wZQorICogd2l0aCBleHRy
YSBhbmltYXRpb24gY2xhc3NlcyB0aGF0IGNhbiBiZSBhZGRlZC4KKyAqCisgKiBgYGBjc3MKKyAq
IC5uZy1oaWRlOm5vdCgubmctaGlkZS1hbmltYXRlKSB7CisgKiAgIC8mIzQyOyB0aGlzIGlzIGp1
c3QgYW5vdGhlciBmb3JtIG9mIGhpZGluZyBhbiBlbGVtZW50ICYjNDI7LworICogICBkaXNwbGF5
OiBibG9jayFpbXBvcnRhbnQ7CisgKiAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAqICAgdG9wOiAt
OTk5OXB4OworICogICBsZWZ0OiAtOTk5OXB4OworICogfQorICogYGBgCisgKgorICogQnkgZGVm
YXVsdCB5b3UgZG9uJ3QgbmVlZCB0byBvdmVycmlkZSBpbiBDU1MgYW55dGhpbmcgYW5kIHRoZSBh
bmltYXRpb25zIHdpbGwgd29yayBhcm91bmQgdGhlIGRpc3BsYXkgc3R5bGUuCisgKgorICogIyMg
QSBub3RlIGFib3V0IGFuaW1hdGlvbnMgd2l0aCBgbmdTaG93YAorICoKKyAqIEFuaW1hdGlvbnMg
aW4gbmdTaG93L25nSGlkZSB3b3JrIHdpdGggdGhlIHNob3cgYW5kIGhpZGUgZXZlbnRzIHRoYXQg
YXJlIHRyaWdnZXJlZCB3aGVuIHRoZSBkaXJlY3RpdmUgZXhwcmVzc2lvbgorICogaXMgdHJ1ZSBh
bmQgZmFsc2UuIFRoaXMgc3lzdGVtIHdvcmtzIGxpa2UgdGhlIGFuaW1hdGlvbiBzeXN0ZW0gcHJl
c2VudCB3aXRoIG5nQ2xhc3MgZXhjZXB0IHRoYXQKKyAqIHlvdSBtdXN0IGFsc28gaW5jbHVkZSB0
aGUgIWltcG9ydGFudCBmbGFnIHRvIG92ZXJyaWRlIHRoZSBkaXNwbGF5IHByb3BlcnR5CisgKiBz
byB0aGF0IHlvdSBjYW4gcGVyZm9ybSBhbiBhbmltYXRpb24gd2hlbiB0aGUgZWxlbWVudCBpcyBo
aWRkZW4gZHVyaW5nIHRoZSB0aW1lIG9mIHRoZSBhbmltYXRpb24uCisgKgorICogYGBgY3NzCisg
KiAvLworICogLy9hIHdvcmtpbmcgZXhhbXBsZSBjYW4gYmUgZm91bmQgYXQgdGhlIGJvdHRvbSBv
ZiB0aGlzIHBhZ2UKKyAqIC8vCisgKiAubXktZWxlbWVudC5uZy1oaWRlLWFkZCwgLm15LWVsZW1l
bnQubmctaGlkZS1yZW1vdmUgeworICogICAvJiM0MjsgdGhpcyBpcyByZXF1aXJlZCBhcyBvZiAx
LjN4IHRvIHByb3Blcmx5CisgKiAgICAgIGFwcGx5IGFsbCBzdHlsaW5nIGluIGEgc2hvdy9oaWRl
IGFuaW1hdGlvbiAmIzQyOy8KKyAqICAgdHJhbnNpdGlvbjogMHMgbGluZWFyIGFsbDsKKyAqIH0K
KyAqCisgKiAubXktZWxlbWVudC5uZy1oaWRlLWFkZC1hY3RpdmUsCisgKiAubXktZWxlbWVudC5u
Zy1oaWRlLXJlbW92ZS1hY3RpdmUgeworICogICAvJiM0MjsgdGhlIHRyYW5zaXRpb24gaXMgZGVm
aW5lZCBpbiB0aGUgYWN0aXZlIGNsYXNzICYjNDI7LworICogICB0cmFuc2l0aW9uOiAxcyBsaW5l
YXIgYWxsOworICogfQorICoKKyAqIC5teS1lbGVtZW50Lm5nLWhpZGUtYWRkIHsgLi4uIH0KKyAq
IC5teS1lbGVtZW50Lm5nLWhpZGUtYWRkLm5nLWhpZGUtYWRkLWFjdGl2ZSB7IC4uLiB9CisgKiAu
bXktZWxlbWVudC5uZy1oaWRlLXJlbW92ZSB7IC4uLiB9CisgKiAubXktZWxlbWVudC5uZy1oaWRl
LXJlbW92ZS5uZy1oaWRlLXJlbW92ZS1hY3RpdmUgeyAuLi4gfQorICogYGBgCisgKgorICogS2Vl
cCBpbiBtaW5kIHRoYXQsIGFzIG9mIEFuZ3VsYXJKUyB2ZXJzaW9uIDEuMy4wLWJldGEuMTEsIHRo
ZXJlIGlzIG5vIG5lZWQgdG8gY2hhbmdlIHRoZSBkaXNwbGF5CisgKiBwcm9wZXJ0eSB0byBibG9j
ayBkdXJpbmcgYW5pbWF0aW9uIHN0YXRlcy0tbmdBbmltYXRlIHdpbGwgaGFuZGxlIHRoZSBzdHls
ZSB0b2dnbGluZyBhdXRvbWF0aWNhbGx5IGZvciB5b3UuCisgKgorICogQGFuaW1hdGlvbnMKKyAq
IGFkZENsYXNzOiBgLm5nLWhpZGVgIC0gaGFwcGVucyBhZnRlciB0aGUgYG5nU2hvd2AgZXhwcmVz
c2lvbiBldmFsdWF0ZXMgdG8gYSB0cnV0aHkgdmFsdWUgYW5kIHRoZSBqdXN0IGJlZm9yZSBjb250
ZW50cyBhcmUgc2V0IHRvIHZpc2libGUKKyAqIHJlbW92ZUNsYXNzOiBgLm5nLWhpZGVgIC0gaGFw
cGVucyBhZnRlciB0aGUgYG5nU2hvd2AgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gYSBub24gdHJ1
dGh5IHZhbHVlIGFuZCBqdXN0IGJlZm9yZSB0aGUgY29udGVudHMgYXJlIHNldCB0byBoaWRkZW4K
KyAqCisgKiBAZWxlbWVudCBBTlkKKyAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdTaG93IElmIHRo
ZSB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBleHByZXNzaW9ufSBpcyB0cnV0aHkKKyAqICAgICB0
aGVuIHRoZSBlbGVtZW50IGlzIHNob3duIG9yIGhpZGRlbiByZXNwZWN0aXZlbHkuCisgKgorICog
QGV4YW1wbGUKKyAgPGV4YW1wbGUgbW9kdWxlPSJuZ0FuaW1hdGUiIGRlcHM9ImFuZ3VsYXItYW5p
bWF0ZS5qcyIgYW5pbWF0aW9ucz0idHJ1ZSI+CisgICAgPGZpbGUgbmFtZT0iaW5kZXguaHRtbCI+
CisgICAgICBDbGljayBtZTogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuZy1tb2RlbD0iY2hlY2tl
ZCIgYXJpYS1sYWJlbD0iVG9nZ2xlIG5nSGlkZSI+PGJyLz4KKyAgICAgIDxkaXY+CisgICAgICAg
IFNob3c6CisgICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrLWVsZW1lbnQgYW5pbWF0ZS1zaG93IiBu
Zy1zaG93PSJjaGVja2VkIj4KKyAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBo
aWNvbi10aHVtYnMtdXAiPjwvc3Bhbj4gSSBzaG93IHVwIHdoZW4geW91ciBjaGVja2JveCBpcyBj
aGVja2VkLgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgICAgPGRpdj4KKyAgICAg
ICAgSGlkZToKKyAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2stZWxlbWVudCBhbmltYXRlLXNob3ci
IG5nLWhpZGU9ImNoZWNrZWQiPgorICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5
cGhpY29uLXRodW1icy1kb3duIj48L3NwYW4+IEkgaGlkZSB3aGVuIHlvdXIgY2hlY2tib3ggaXMg
Y2hlY2tlZC4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8L2ZpbGU+CisgICAg
PGZpbGUgbmFtZT0iZ2x5cGhpY29ucy5jc3MiPgorICAgICAgQGltcG9ydCB1cmwoLi4vLi4vY29t
cG9uZW50cy9ib290c3RyYXAtMy4xLjEvY3NzL2Jvb3RzdHJhcC5jc3MpOworICAgIDwvZmlsZT4K
KyAgICA8ZmlsZSBuYW1lPSJhbmltYXRpb25zLmNzcyI+CisgICAgICAuYW5pbWF0ZS1zaG93IHsK
KyAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CisgICAgICAgIG9wYWNpdHk6IDE7CisgICAgICAg
IHBhZGRpbmc6IDEwcHg7CisgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOworICAgICAg
ICBiYWNrZ3JvdW5kOiB3aGl0ZTsKKyAgICAgIH0KKworICAgICAgLmFuaW1hdGUtc2hvdy5uZy1o
aWRlLWFkZC5uZy1oaWRlLWFkZC1hY3RpdmUsCisgICAgICAuYW5pbWF0ZS1zaG93Lm5nLWhpZGUt
cmVtb3ZlLm5nLWhpZGUtcmVtb3ZlLWFjdGl2ZSB7CisgICAgICAgIC13ZWJraXQtdHJhbnNpdGlv
bjogYWxsIGxpbmVhciAwLjVzOworICAgICAgICB0cmFuc2l0aW9uOiBhbGwgbGluZWFyIDAuNXM7
CisgICAgICB9CisKKyAgICAgIC5hbmltYXRlLXNob3cubmctaGlkZSB7CisgICAgICAgIGxpbmUt
aGVpZ2h0OiAwOworICAgICAgICBvcGFjaXR5OiAwOworICAgICAgICBwYWRkaW5nOiAwIDEwcHg7
CisgICAgICB9CisKKyAgICAgIC5jaGVjay1lbGVtZW50IHsKKyAgICAgICAgcGFkZGluZzogMTBw
eDsKKyAgICAgICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7CisgICAgICAgIGJhY2tncm91bmQ6
IHdoaXRlOworICAgICAgfQorICAgIDwvZmlsZT4KKyAgICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9y
LmpzIiB0eXBlPSJwcm90cmFjdG9yIj4KKyAgICAgIHZhciB0aHVtYnNVcCA9IGVsZW1lbnQoYnku
Y3NzKCdzcGFuLmdseXBoaWNvbi10aHVtYnMtdXAnKSk7CisgICAgICB2YXIgdGh1bWJzRG93biA9
IGVsZW1lbnQoYnkuY3NzKCdzcGFuLmdseXBoaWNvbi10aHVtYnMtZG93bicpKTsKKworICAgICAg
aXQoJ3Nob3VsZCBjaGVjayBuZy1zaG93IC8gbmctaGlkZScsIGZ1bmN0aW9uKCkgeworICAgICAg
ICBleHBlY3QodGh1bWJzVXAuaXNEaXNwbGF5ZWQoKSkudG9CZUZhbHN5KCk7CisgICAgICAgIGV4
cGVjdCh0aHVtYnNEb3duLmlzRGlzcGxheWVkKCkpLnRvQmVUcnV0aHkoKTsKKworICAgICAgICBl
bGVtZW50KGJ5Lm1vZGVsKCdjaGVja2VkJykpLmNsaWNrKCk7CisKKyAgICAgICAgZXhwZWN0KHRo
dW1ic1VwLmlzRGlzcGxheWVkKCkpLnRvQmVUcnV0aHkoKTsKKyAgICAgICAgZXhwZWN0KHRodW1i
c0Rvd24uaXNEaXNwbGF5ZWQoKSkudG9CZUZhbHN5KCk7CisgICAgICB9KTsKKyAgICA8L2ZpbGU+
CisgIDwvZXhhbXBsZT4KKyAqLwordmFyIG5nU2hvd0RpcmVjdGl2ZSA9IFsnJGFuaW1hdGUnLCBm
dW5jdGlvbigkYW5pbWF0ZSkgeworICByZXR1cm4geworICAgIHJlc3RyaWN0OiAnQScsCisgICAg
bXVsdGlFbGVtZW50OiB0cnVlLAorICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBh
dHRyKSB7CisgICAgICBzY29wZS4kd2F0Y2goYXR0ci5uZ1Nob3csIGZ1bmN0aW9uIG5nU2hvd1dh
dGNoQWN0aW9uKHZhbHVlKSB7CisgICAgICAgIC8vIHdlJ3JlIGFkZGluZyBhIHRlbXBvcmFyeSwg
YW5pbWF0aW9uLXNwZWNpZmljIGNsYXNzIGZvciBuZy1oaWRlIHNpbmNlIHRoaXMgd2F5CisgICAg
ICAgIC8vIHdlIGNhbiBjb250cm9sIHdoZW4gdGhlIGVsZW1lbnQgaXMgYWN0dWFsbHkgZGlzcGxh
eWVkIG9uIHNjcmVlbiB3aXRob3V0IGhhdmluZworICAgICAgICAvLyB0byBoYXZlIGEgZ2xvYmFs
L2dyZWVkeSBDU1Mgc2VsZWN0b3IgdGhhdCBicmVha3Mgd2hlbiBvdGhlciBhbmltYXRpb25zIGFy
ZSBydW4uCisgICAgICAgIC8vIFJlYWQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3Vs
YXIuanMvaXNzdWVzLzkxMDMjaXNzdWVjb21tZW50LTU4MzM1ODQ1CisgICAgICAgICRhbmltYXRl
W3ZhbHVlID8gJ3JlbW92ZUNsYXNzJyA6ICdhZGRDbGFzcyddKGVsZW1lbnQsIE5HX0hJREVfQ0xB
U1MsIHsKKyAgICAgICAgICB0ZW1wQ2xhc3NlczogTkdfSElERV9JTl9QUk9HUkVTU19DTEFTUwor
ICAgICAgICB9KTsKKyAgICAgIH0pOworICAgIH0KKyAgfTsKK31dOworCisKKy8qKgorICogQG5n
ZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgbmdIaWRlCisgKiBAbXVsdGlFbGVtZW50CisgKgorICog
QGRlc2NyaXB0aW9uCisgKiBUaGUgYG5nSGlkZWAgZGlyZWN0aXZlIHNob3dzIG9yIGhpZGVzIHRo
ZSBnaXZlbiBIVE1MIGVsZW1lbnQgYmFzZWQgb24gdGhlIGV4cHJlc3Npb24KKyAqIHByb3ZpZGVk
IHRvIHRoZSBgbmdIaWRlYCBhdHRyaWJ1dGUuIFRoZSBlbGVtZW50IGlzIHNob3duIG9yIGhpZGRl
biBieSByZW1vdmluZyBvciBhZGRpbmcKKyAqIHRoZSBgbmctaGlkZWAgQ1NTIGNsYXNzIG9udG8g
dGhlIGVsZW1lbnQuIFRoZSBgLm5nLWhpZGVgIENTUyBjbGFzcyBpcyBwcmVkZWZpbmVkCisgKiBp
biBBbmd1bGFySlMgYW5kIHNldHMgdGhlIGRpc3BsYXkgc3R5bGUgdG8gbm9uZSAodXNpbmcgYW4g
IWltcG9ydGFudCBmbGFnKS4KKyAqIEZvciBDU1AgbW9kZSBwbGVhc2UgYWRkIGBhbmd1bGFyLWNz
cC5jc3NgIHRvIHlvdXIgaHRtbCBmaWxlIChzZWUge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0NzcCBu
Z0NzcH0pLgorICoKKyAqIGBgYGh0bWwKKyAqIDwhLS0gd2hlbiAkc2NvcGUubXlWYWx1ZSBpcyB0
cnV0aHkgKGVsZW1lbnQgaXMgaGlkZGVuKSAtLT4KKyAqIDxkaXYgbmctaGlkZT0ibXlWYWx1ZSIg
Y2xhc3M9Im5nLWhpZGUiPjwvZGl2PgorICoKKyAqIDwhLS0gd2hlbiAkc2NvcGUubXlWYWx1ZSBp
cyBmYWxzeSAoZWxlbWVudCBpcyB2aXNpYmxlKSAtLT4KKyAqIDxkaXYgbmctaGlkZT0ibXlWYWx1
ZSI+PC9kaXY+CisgKiBgYGAKKyAqCisgKiBXaGVuIHRoZSBgbmdIaWRlYCBleHByZXNzaW9uIGV2
YWx1YXRlcyB0byBhIHRydXRoeSB2YWx1ZSB0aGVuIHRoZSBgLm5nLWhpZGVgIENTUyBjbGFzcyBp
cyBhZGRlZCB0byB0aGUgY2xhc3MKKyAqIGF0dHJpYnV0ZSBvbiB0aGUgZWxlbWVudCBjYXVzaW5n
IGl0IHRvIGJlY29tZSBoaWRkZW4uIFdoZW4gZmFsc3ksIHRoZSBgLm5nLWhpZGVgIENTUyBjbGFz
cyBpcyByZW1vdmVkCisgKiBmcm9tIHRoZSBlbGVtZW50IGNhdXNpbmcgdGhlIGVsZW1lbnQgbm90
IHRvIGFwcGVhciBoaWRkZW4uCisgKgorICogIyMgV2h5IGlzICFpbXBvcnRhbnQgdXNlZD8KKyAq
CisgKiBZb3UgbWF5IGJlIHdvbmRlcmluZyB3aHkgIWltcG9ydGFudCBpcyB1c2VkIGZvciB0aGUg
YC5uZy1oaWRlYCBDU1MgY2xhc3MuIFRoaXMgaXMgYmVjYXVzZSB0aGUgYC5uZy1oaWRlYCBzZWxl
Y3RvcgorICogY2FuIGJlIGVhc2lseSBvdmVycmlkZGVuIGJ5IGhlYXZpZXIgc2VsZWN0b3JzLiBG
b3IgZXhhbXBsZSwgc29tZXRoaW5nIGFzIHNpbXBsZQorICogYXMgY2hhbmdpbmcgdGhlIGRpc3Bs
YXkgc3R5bGUgb24gYSBIVE1MIGxpc3QgaXRlbSB3b3VsZCBtYWtlIGhpZGRlbiBlbGVtZW50cyBh
cHBlYXIgdmlzaWJsZS4KKyAqIFRoaXMgYWxzbyBiZWNvbWVzIGEgYmlnZ2VyIGlzc3VlIHdoZW4g
ZGVhbGluZyB3aXRoIENTUyBmcmFtZXdvcmtzLgorICoKKyAqIEJ5IHVzaW5nICFpbXBvcnRhbnQs
IHRoZSBzaG93IGFuZCBoaWRlIGJlaGF2aW9yIHdpbGwgd29yayBhcyBleHBlY3RlZCBkZXNwaXRl
IGFueSBjbGFzaCBiZXR3ZWVuIENTUyBzZWxlY3RvcgorICogc3BlY2lmaWNpdHkgKHdoZW4gIWlt
cG9ydGFudCBpc24ndCB1c2VkIHdpdGggYW55IGNvbmZsaWN0aW5nIHN0eWxlcykuIElmIGEgZGV2
ZWxvcGVyIGNob29zZXMgdG8gb3ZlcnJpZGUgdGhlCisgKiBzdHlsaW5nIHRvIGNoYW5nZSBob3cg
dG8gaGlkZSBhbiBlbGVtZW50IHRoZW4gaXQgaXMganVzdCBhIG1hdHRlciBvZiB1c2luZyAhaW1w
b3J0YW50IGluIHRoZWlyIG93biBDU1MgY29kZS4KKyAqCisgKiAjIyMgT3ZlcnJpZGluZyBgLm5n
LWhpZGVgCisgKgorICogQnkgZGVmYXVsdCwgdGhlIGAubmctaGlkZWAgY2xhc3Mgd2lsbCBzdHls
ZSB0aGUgZWxlbWVudCB3aXRoIGBkaXNwbGF5OiBub25lIWltcG9ydGFudGAuIElmIHlvdSB3aXNo
IHRvIGNoYW5nZQorICogdGhlIGhpZGUgYmVoYXZpb3Igd2l0aCBuZ1Nob3cvbmdIaWRlIHRoZW4g
dGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgcmVzdGF0aW5nIHRoZSBzdHlsZXMgZm9yIHRoZSBgLm5n
LWhpZGVgCisgKiBjbGFzcyBpbiBDU1M6CisgKgorICogYGBgY3NzCisgKiAubmctaGlkZSB7Cisg
KiAgIC8mIzQyOyB0aGlzIGlzIGp1c3QgYW5vdGhlciBmb3JtIG9mIGhpZGluZyBhbiBlbGVtZW50
ICYjNDI7LworICogICBkaXNwbGF5OiBibG9jayFpbXBvcnRhbnQ7CisgKiAgIHBvc2l0aW9uOiBh
YnNvbHV0ZTsKKyAqICAgdG9wOiAtOTk5OXB4OworICogICBsZWZ0OiAtOTk5OXB4OworICogfQor
ICogYGBgCisgKgorICogQnkgZGVmYXVsdCB5b3UgZG9uJ3QgbmVlZCB0byBvdmVycmlkZSBpbiBD
U1MgYW55dGhpbmcgYW5kIHRoZSBhbmltYXRpb25zIHdpbGwgd29yayBhcm91bmQgdGhlIGRpc3Bs
YXkgc3R5bGUuCisgKgorICogIyMgQSBub3RlIGFib3V0IGFuaW1hdGlvbnMgd2l0aCBgbmdIaWRl
YAorICoKKyAqIEFuaW1hdGlvbnMgaW4gbmdTaG93L25nSGlkZSB3b3JrIHdpdGggdGhlIHNob3cg
YW5kIGhpZGUgZXZlbnRzIHRoYXQgYXJlIHRyaWdnZXJlZCB3aGVuIHRoZSBkaXJlY3RpdmUgZXhw
cmVzc2lvbgorICogaXMgdHJ1ZSBhbmQgZmFsc2UuIFRoaXMgc3lzdGVtIHdvcmtzIGxpa2UgdGhl
IGFuaW1hdGlvbiBzeXN0ZW0gcHJlc2VudCB3aXRoIG5nQ2xhc3MsIGV4Y2VwdCB0aGF0IHRoZSBg
Lm5nLWhpZGVgCisgKiBDU1MgY2xhc3MgaXMgYWRkZWQgYW5kIHJlbW92ZWQgZm9yIHlvdSBpbnN0
ZWFkIG9mIHlvdXIgb3duIENTUyBjbGFzcy4KKyAqCisgKiBgYGBjc3MKKyAqIC8vCisgKiAvL2Eg
d29ya2luZyBleGFtcGxlIGNhbiBiZSBmb3VuZCBhdCB0aGUgYm90dG9tIG9mIHRoaXMgcGFnZQor
ICogLy8KKyAqIC5teS1lbGVtZW50Lm5nLWhpZGUtYWRkLCAubXktZWxlbWVudC5uZy1oaWRlLXJl
bW92ZSB7CisgKiAgIHRyYW5zaXRpb246IDAuNXMgbGluZWFyIGFsbDsKKyAqIH0KKyAqCisgKiAu
bXktZWxlbWVudC5uZy1oaWRlLWFkZCB7IC4uLiB9CisgKiAubXktZWxlbWVudC5uZy1oaWRlLWFk
ZC5uZy1oaWRlLWFkZC1hY3RpdmUgeyAuLi4gfQorICogLm15LWVsZW1lbnQubmctaGlkZS1yZW1v
dmUgeyAuLi4gfQorICogLm15LWVsZW1lbnQubmctaGlkZS1yZW1vdmUubmctaGlkZS1yZW1vdmUt
YWN0aXZlIHsgLi4uIH0KKyAqIGBgYAorICoKKyAqIEtlZXAgaW4gbWluZCB0aGF0LCBhcyBvZiBB
bmd1bGFySlMgdmVyc2lvbiAxLjMuMC1iZXRhLjExLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNoYW5n
ZSB0aGUgZGlzcGxheQorICogcHJvcGVydHkgdG8gYmxvY2sgZHVyaW5nIGFuaW1hdGlvbiBzdGF0
ZXMtLW5nQW5pbWF0ZSB3aWxsIGhhbmRsZSB0aGUgc3R5bGUgdG9nZ2xpbmcgYXV0b21hdGljYWxs
eSBmb3IgeW91LgorICoKKyAqIEBhbmltYXRpb25zCisgKiByZW1vdmVDbGFzczogYC5uZy1oaWRl
YCAtIGhhcHBlbnMgYWZ0ZXIgdGhlIGBuZ0hpZGVgIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGEg
dHJ1dGh5IHZhbHVlIGFuZCBqdXN0IGJlZm9yZSB0aGUgY29udGVudHMgYXJlIHNldCB0byBoaWRk
ZW4KKyAqIGFkZENsYXNzOiBgLm5nLWhpZGVgIC0gaGFwcGVucyBhZnRlciB0aGUgYG5nSGlkZWAg
ZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gYSBub24gdHJ1dGh5IHZhbHVlIGFuZCBqdXN0IGJlZm9y
ZSB0aGUgY29udGVudHMgYXJlIHNldCB0byB2aXNpYmxlCisgKgorICogQGVsZW1lbnQgQU5ZCisg
KiBAcGFyYW0ge2V4cHJlc3Npb259IG5nSGlkZSBJZiB0aGUge0BsaW5rIGd1aWRlL2V4cHJlc3Np
b24gZXhwcmVzc2lvbn0gaXMgdHJ1dGh5IHRoZW4KKyAqICAgICB0aGUgZWxlbWVudCBpcyBzaG93
biBvciBoaWRkZW4gcmVzcGVjdGl2ZWx5LgorICoKKyAqIEBleGFtcGxlCisgIDxleGFtcGxlIG1v
ZHVsZT0ibmdBbmltYXRlIiBkZXBzPSJhbmd1bGFyLWFuaW1hdGUuanMiIGFuaW1hdGlvbnM9InRy
dWUiPgorICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICAgQ2xpY2sgbWU6IDxpbnB1
dCB0eXBlPSJjaGVja2JveCIgbmctbW9kZWw9ImNoZWNrZWQiIGFyaWEtbGFiZWw9IlRvZ2dsZSBu
Z1Nob3ciPjxici8+CisgICAgICA8ZGl2PgorICAgICAgICBTaG93OgorICAgICAgICA8ZGl2IGNs
YXNzPSJjaGVjay1lbGVtZW50IGFuaW1hdGUtaGlkZSIgbmctc2hvdz0iY2hlY2tlZCI+CisgICAg
ICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tdGh1bWJzLXVwIj48L3NwYW4+
IEkgc2hvdyB1cCB3aGVuIHlvdXIgY2hlY2tib3ggaXMgY2hlY2tlZC4KKyAgICAgICAgPC9kaXY+
CisgICAgICA8L2Rpdj4KKyAgICAgIDxkaXY+CisgICAgICAgIEhpZGU6CisgICAgICAgIDxkaXYg
Y2xhc3M9ImNoZWNrLWVsZW1lbnQgYW5pbWF0ZS1oaWRlIiBuZy1oaWRlPSJjaGVja2VkIj4KKyAg
ICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi10aHVtYnMtZG93biI+PC9z
cGFuPiBJIGhpZGUgd2hlbiB5b3VyIGNoZWNrYm94IGlzIGNoZWNrZWQuCisgICAgICAgIDwvZGl2
PgorICAgICAgPC9kaXY+CisgICAgPC9maWxlPgorICAgIDxmaWxlIG5hbWU9ImdseXBoaWNvbnMu
Y3NzIj4KKyAgICAgIEBpbXBvcnQgdXJsKC4uLy4uL2NvbXBvbmVudHMvYm9vdHN0cmFwLTMuMS4x
L2Nzcy9ib290c3RyYXAuY3NzKTsKKyAgICA8L2ZpbGU+CisgICAgPGZpbGUgbmFtZT0iYW5pbWF0
aW9ucy5jc3MiPgorICAgICAgLmFuaW1hdGUtaGlkZSB7CisgICAgICAgIC13ZWJraXQtdHJhbnNp
dGlvbjogYWxsIGxpbmVhciAwLjVzOworICAgICAgICB0cmFuc2l0aW9uOiBhbGwgbGluZWFyIDAu
NXM7CisgICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OworICAgICAgICBvcGFjaXR5OiAxOworICAg
ICAgICBwYWRkaW5nOiAxMHB4OworICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjazsKKyAg
ICAgICAgYmFja2dyb3VuZDogd2hpdGU7CisgICAgICB9CisKKyAgICAgIC5hbmltYXRlLWhpZGUu
bmctaGlkZSB7CisgICAgICAgIGxpbmUtaGVpZ2h0OiAwOworICAgICAgICBvcGFjaXR5OiAwOwor
ICAgICAgICBwYWRkaW5nOiAwIDEwcHg7CisgICAgICB9CisKKyAgICAgIC5jaGVjay1lbGVtZW50
IHsKKyAgICAgICAgcGFkZGluZzogMTBweDsKKyAgICAgICAgYm9yZGVyOiAxcHggc29saWQgYmxh
Y2s7CisgICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOworICAgICAgfQorICAgIDwvZmlsZT4KKyAg
ICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFjdG9yIj4KKyAgICAgIHZh
ciB0aHVtYnNVcCA9IGVsZW1lbnQoYnkuY3NzKCdzcGFuLmdseXBoaWNvbi10aHVtYnMtdXAnKSk7
CisgICAgICB2YXIgdGh1bWJzRG93biA9IGVsZW1lbnQoYnkuY3NzKCdzcGFuLmdseXBoaWNvbi10
aHVtYnMtZG93bicpKTsKKworICAgICAgaXQoJ3Nob3VsZCBjaGVjayBuZy1zaG93IC8gbmctaGlk
ZScsIGZ1bmN0aW9uKCkgeworICAgICAgICBleHBlY3QodGh1bWJzVXAuaXNEaXNwbGF5ZWQoKSku
dG9CZUZhbHN5KCk7CisgICAgICAgIGV4cGVjdCh0aHVtYnNEb3duLmlzRGlzcGxheWVkKCkpLnRv
QmVUcnV0aHkoKTsKKworICAgICAgICBlbGVtZW50KGJ5Lm1vZGVsKCdjaGVja2VkJykpLmNsaWNr
KCk7CisKKyAgICAgICAgZXhwZWN0KHRodW1ic1VwLmlzRGlzcGxheWVkKCkpLnRvQmVUcnV0aHko
KTsKKyAgICAgICAgZXhwZWN0KHRodW1ic0Rvd24uaXNEaXNwbGF5ZWQoKSkudG9CZUZhbHN5KCk7
CisgICAgICB9KTsKKyAgICA8L2ZpbGU+CisgIDwvZXhhbXBsZT4KKyAqLwordmFyIG5nSGlkZURp
cmVjdGl2ZSA9IFsnJGFuaW1hdGUnLCBmdW5jdGlvbigkYW5pbWF0ZSkgeworICByZXR1cm4gewor
ICAgIHJlc3RyaWN0OiAnQScsCisgICAgbXVsdGlFbGVtZW50OiB0cnVlLAorICAgIGxpbms6IGZ1
bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyKSB7CisgICAgICBzY29wZS4kd2F0Y2goYXR0ci5u
Z0hpZGUsIGZ1bmN0aW9uIG5nSGlkZVdhdGNoQWN0aW9uKHZhbHVlKSB7CisgICAgICAgIC8vIFRo
ZSBjb21tZW50IGluc2lkZSBvZiB0aGUgbmdTaG93RGlyZWN0aXZlIGV4cGxhaW5zIHdoeSB3ZSBh
ZGQgYW5kCisgICAgICAgIC8vIHJlbW92ZSBhIHRlbXBvcmFyeSBjbGFzcyBmb3IgdGhlIHNob3cv
aGlkZSBhbmltYXRpb24KKyAgICAgICAgJGFuaW1hdGVbdmFsdWUgPyAnYWRkQ2xhc3MnIDogJ3Jl
bW92ZUNsYXNzJ10oZWxlbWVudCxOR19ISURFX0NMQVNTLCB7CisgICAgICAgICAgdGVtcENsYXNz
ZXM6IE5HX0hJREVfSU5fUFJPR1JFU1NfQ0xBU1MKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAg
ICB9CisgIH07Cit9XTsKKworLyoqCisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBuZ1N0
eWxlCisgKiBAcmVzdHJpY3QgQUMKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIFRoZSBgbmdTdHls
ZWAgZGlyZWN0aXZlIGFsbG93cyB5b3UgdG8gc2V0IENTUyBzdHlsZSBvbiBhbiBIVE1MIGVsZW1l
bnQgY29uZGl0aW9uYWxseS4KKyAqCisgKiBAZWxlbWVudCBBTlkKKyAqIEBwYXJhbSB7ZXhwcmVz
c2lvbn0gbmdTdHlsZQorICoKKyAqIHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259
IHdoaWNoIGV2YWxzIHRvIGFuCisgKiBvYmplY3Qgd2hvc2Uga2V5cyBhcmUgQ1NTIHN0eWxlIG5h
bWVzIGFuZCB2YWx1ZXMgYXJlIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGZvciB0aG9zZSBDU1MKKyAq
IGtleXMuCisgKgorICogU2luY2Ugc29tZSBDU1Mgc3R5bGUgbmFtZXMgYXJlIG5vdCB2YWxpZCBr
ZXlzIGZvciBhbiBvYmplY3QsIHRoZXkgbXVzdCBiZSBxdW90ZWQuCisgKiBTZWUgdGhlICdiYWNr
Z3JvdW5kLWNvbG9yJyBzdHlsZSBpbiB0aGUgZXhhbXBsZSBiZWxvdy4KKyAqCisgKiBAZXhhbXBs
ZQorICAgPGV4YW1wbGU+CisgICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICAgICAgICA8
aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0ic2V0IGNvbG9yIiBuZy1jbGljaz0ibXlTdHlsZT17
Y29sb3I6J3JlZCd9Ij4KKyAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9InNldCBi
YWNrZ3JvdW5kIiBuZy1jbGljaz0ibXlTdHlsZT17J2JhY2tncm91bmQtY29sb3InOidibHVlJ30i
PgorICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iY2xlYXIiIG5nLWNsaWNrPSJt
eVN0eWxlPXt9Ij4KKyAgICAgICAgPGJyLz4KKyAgICAgICAgPHNwYW4gbmctc3R5bGU9Im15U3R5
bGUiPlNhbXBsZSBUZXh0PC9zcGFuPgorICAgICAgICA8cHJlPm15U3R5bGU9e3tteVN0eWxlfX08
L3ByZT4KKyAgICAgPC9maWxlPgorICAgICA8ZmlsZSBuYW1lPSJzdHlsZS5jc3MiPgorICAgICAg
IHNwYW4geworICAgICAgICAgY29sb3I6IGJsYWNrOworICAgICAgIH0KKyAgICAgPC9maWxlPgor
ICAgICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFjdG9yIj4KKyAgICAg
ICB2YXIgY29sb3JTcGFuID0gZWxlbWVudChieS5jc3MoJ3NwYW4nKSk7CisKKyAgICAgICBpdCgn
c2hvdWxkIGNoZWNrIG5nLXN0eWxlJywgZnVuY3Rpb24oKSB7CisgICAgICAgICBleHBlY3QoY29s
b3JTcGFuLmdldENzc1ZhbHVlKCdjb2xvcicpKS50b0JlKCdyZ2JhKDAsIDAsIDAsIDEpJyk7Cisg
ICAgICAgICBlbGVtZW50KGJ5LmNzcygnaW5wdXRbdmFsdWU9XCdzZXQgY29sb3JcJ10nKSkuY2xp
Y2soKTsKKyAgICAgICAgIGV4cGVjdChjb2xvclNwYW4uZ2V0Q3NzVmFsdWUoJ2NvbG9yJykpLnRv
QmUoJ3JnYmEoMjU1LCAwLCAwLCAxKScpOworICAgICAgICAgZWxlbWVudChieS5jc3MoJ2lucHV0
W3ZhbHVlPWNsZWFyXScpKS5jbGljaygpOworICAgICAgICAgZXhwZWN0KGNvbG9yU3Bhbi5nZXRD
c3NWYWx1ZSgnY29sb3InKSkudG9CZSgncmdiYSgwLCAwLCAwLCAxKScpOworICAgICAgIH0pOwor
ICAgICA8L2ZpbGU+CisgICA8L2V4YW1wbGU+CisgKi8KK3ZhciBuZ1N0eWxlRGlyZWN0aXZlID0g
bmdEaXJlY3RpdmUoZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHIpIHsKKyAgc2NvcGUuJHdh
dGNoKGF0dHIubmdTdHlsZSwgZnVuY3Rpb24gbmdTdHlsZVdhdGNoQWN0aW9uKG5ld1N0eWxlcywg
b2xkU3R5bGVzKSB7CisgICAgaWYgKG9sZFN0eWxlcyAmJiAobmV3U3R5bGVzICE9PSBvbGRTdHls
ZXMpKSB7CisgICAgICBmb3JFYWNoKG9sZFN0eWxlcywgZnVuY3Rpb24odmFsLCBzdHlsZSkgeyBl
bGVtZW50LmNzcyhzdHlsZSwgJycpO30pOworICAgIH0KKyAgICBpZiAobmV3U3R5bGVzKSBlbGVt
ZW50LmNzcyhuZXdTdHlsZXMpOworICB9LCB0cnVlKTsKK30pOworCisvKioKKyAqIEBuZ2RvYyBk
aXJlY3RpdmUKKyAqIEBuYW1lIG5nU3dpdGNoCisgKiBAcmVzdHJpY3QgRUEKKyAqCisgKiBAZGVz
Y3JpcHRpb24KKyAqIFRoZSBgbmdTd2l0Y2hgIGRpcmVjdGl2ZSBpcyB1c2VkIHRvIGNvbmRpdGlv
bmFsbHkgc3dhcCBET00gc3RydWN0dXJlIG9uIHlvdXIgdGVtcGxhdGUgYmFzZWQgb24gYSBzY29w
ZSBleHByZXNzaW9uLgorICogRWxlbWVudHMgd2l0aGluIGBuZ1N3aXRjaGAgYnV0IHdpdGhvdXQg
YG5nU3dpdGNoV2hlbmAgb3IgYG5nU3dpdGNoRGVmYXVsdGAgZGlyZWN0aXZlcyB3aWxsIGJlIHBy
ZXNlcnZlZCBhdCB0aGUgbG9jYXRpb24KKyAqIGFzIHNwZWNpZmllZCBpbiB0aGUgdGVtcGxhdGUu
CisgKgorICogVGhlIGRpcmVjdGl2ZSBpdHNlbGYgd29ya3Mgc2ltaWxhciB0byBuZ0luY2x1ZGUs
IGhvd2V2ZXIsIGluc3RlYWQgb2YgZG93bmxvYWRpbmcgdGVtcGxhdGUgY29kZSAob3IgbG9hZGlu
ZyBpdAorICogZnJvbSB0aGUgdGVtcGxhdGUgY2FjaGUpLCBgbmdTd2l0Y2hgIHNpbXBseSBjaG9v
c2VzIG9uZSBvZiB0aGUgbmVzdGVkIGVsZW1lbnRzIGFuZCBtYWtlcyBpdCB2aXNpYmxlIGJhc2Vk
IG9uIHdoaWNoIGVsZW1lbnQKKyAqIG1hdGNoZXMgdGhlIHZhbHVlIG9idGFpbmVkIGZyb20gdGhl
IGV2YWx1YXRlZCBleHByZXNzaW9uLiBJbiBvdGhlciB3b3JkcywgeW91IGRlZmluZSBhIGNvbnRh
aW5lciBlbGVtZW50CisgKiAod2hlcmUgeW91IHBsYWNlIHRoZSBkaXJlY3RpdmUpLCBwbGFjZSBh
biBleHByZXNzaW9uIG9uIHRoZSAqKmBvbj0iLi4uImAgYXR0cmlidXRlKioKKyAqIChvciB0aGUg
Kipgbmctc3dpdGNoPSIuLi4iYCBhdHRyaWJ1dGUqKiksIGRlZmluZSBhbnkgaW5uZXIgZWxlbWVu
dHMgaW5zaWRlIG9mIHRoZSBkaXJlY3RpdmUgYW5kIHBsYWNlCisgKiBhIHdoZW4gYXR0cmlidXRl
IHBlciBlbGVtZW50LiBUaGUgd2hlbiBhdHRyaWJ1dGUgaXMgdXNlZCB0byBpbmZvcm0gbmdTd2l0
Y2ggd2hpY2ggZWxlbWVudCB0byBkaXNwbGF5IHdoZW4gdGhlIG9uCisgKiBleHByZXNzaW9uIGlz
IGV2YWx1YXRlZC4gSWYgYSBtYXRjaGluZyBleHByZXNzaW9uIGlzIG5vdCBmb3VuZCB2aWEgYSB3
aGVuIGF0dHJpYnV0ZSB0aGVuIGFuIGVsZW1lbnQgd2l0aCB0aGUgZGVmYXVsdAorICogYXR0cmli
dXRlIGlzIGRpc3BsYXllZC4KKyAqCisgKiA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4K
KyAqIEJlIGF3YXJlIHRoYXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZXMgdG8gbWF0Y2ggYWdhaW5zdCBj
YW5ub3QgYmUgZXhwcmVzc2lvbnMuIFRoZXkgYXJlIGludGVycHJldGVkCisgKiBhcyBsaXRlcmFs
IHN0cmluZyB2YWx1ZXMgdG8gbWF0Y2ggYWdhaW5zdC4KKyAqIEZvciBleGFtcGxlLCAqKmBuZy1z
d2l0Y2gtd2hlbj0ic29tZVZhbCJgKiogd2lsbCBtYXRjaCBhZ2FpbnN0IHRoZSBzdHJpbmcgYCJz
b21lVmFsImAgbm90IGFnYWluc3QgdGhlCisgKiB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBgJHNj
b3BlLnNvbWVWYWxgLgorICogPC9kaXY+CisKKyAqIEBhbmltYXRpb25zCisgKiBlbnRlciAtIGhh
cHBlbnMgYWZ0ZXIgdGhlIG5nU3dpdGNoIGNvbnRlbnRzIGNoYW5nZSBhbmQgdGhlIG1hdGNoZWQg
Y2hpbGQgZWxlbWVudCBpcyBwbGFjZWQgaW5zaWRlIHRoZSBjb250YWluZXIKKyAqIGxlYXZlIC0g
aGFwcGVucyBqdXN0IGFmdGVyIHRoZSBuZ1N3aXRjaCBjb250ZW50cyBjaGFuZ2UgYW5kIGp1c3Qg
YmVmb3JlIHRoZSBmb3JtZXIgY29udGVudHMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgRE9NCisgKgor
ICogQHVzYWdlCisgKgorICogYGBgCisgKiA8QU5ZIG5nLXN3aXRjaD0iZXhwcmVzc2lvbiI+Cisg
KiAgIDxBTlkgbmctc3dpdGNoLXdoZW49Im1hdGNoVmFsdWUxIj4uLi48L0FOWT4KKyAqICAgPEFO
WSBuZy1zd2l0Y2gtd2hlbj0ibWF0Y2hWYWx1ZTIiPi4uLjwvQU5ZPgorICogICA8QU5ZIG5nLXN3
aXRjaC1kZWZhdWx0Pi4uLjwvQU5ZPgorICogPC9BTlk+CisgKiBgYGAKKyAqCisgKgorICogQHNj
b3BlCisgKiBAcHJpb3JpdHkgMTIwMAorICogQHBhcmFtIHsqfSBuZ1N3aXRjaHxvbiBleHByZXNz
aW9uIHRvIG1hdGNoIGFnYWluc3QgPGNvZGU+bmctc3dpdGNoLXdoZW48L2NvZGU+LgorICogT24g
Y2hpbGQgZWxlbWVudHMgYWRkOgorICoKKyAqICogYG5nU3dpdGNoV2hlbmA6IHRoZSBjYXNlIHN0
YXRlbWVudCB0byBtYXRjaCBhZ2FpbnN0LiBJZiBtYXRjaCB0aGVuIHRoaXMKKyAqICAgY2FzZSB3
aWxsIGJlIGRpc3BsYXllZC4gSWYgdGhlIHNhbWUgbWF0Y2ggYXBwZWFycyBtdWx0aXBsZSB0aW1l
cywgYWxsIHRoZQorICogICBlbGVtZW50cyB3aWxsIGJlIGRpc3BsYXllZC4KKyAqICogYG5nU3dp
dGNoRGVmYXVsdGA6IHRoZSBkZWZhdWx0IGNhc2Ugd2hlbiBubyBvdGhlciBjYXNlIG1hdGNoLiBJ
ZiB0aGVyZQorICogICBhcmUgbXVsdGlwbGUgZGVmYXVsdCBjYXNlcywgYWxsIG9mIHRoZW0gd2ls
bCBiZSBkaXNwbGF5ZWQgd2hlbiBubyBvdGhlcgorICogICBjYXNlIG1hdGNoLgorICoKKyAqCisg
KiBAZXhhbXBsZQorICA8ZXhhbXBsZSBtb2R1bGU9InN3aXRjaEV4YW1wbGUiIGRlcHM9ImFuZ3Vs
YXItYW5pbWF0ZS5qcyIgYW5pbWF0aW9ucz0idHJ1ZSI+CisgICAgPGZpbGUgbmFtZT0iaW5kZXgu
aHRtbCI+CisgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9IkV4YW1wbGVDb250cm9sbGVyIj4KKyAg
ICAgICAgPHNlbGVjdCBuZy1tb2RlbD0ic2VsZWN0aW9uIiBuZy1vcHRpb25zPSJpdGVtIGZvciBp
dGVtIGluIGl0ZW1zIj4KKyAgICAgICAgPC9zZWxlY3Q+CisgICAgICAgIDxjb2RlPnNlbGVjdGlv
bj17e3NlbGVjdGlvbn19PC9jb2RlPgorICAgICAgICA8aHIvPgorICAgICAgICA8ZGl2IGNsYXNz
PSJhbmltYXRlLXN3aXRjaC1jb250YWluZXIiCisgICAgICAgICAgbmctc3dpdGNoIG9uPSJzZWxl
Y3Rpb24iPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iYW5pbWF0ZS1zd2l0Y2giIG5nLXN3aXRj
aC13aGVuPSJzZXR0aW5ncyI+U2V0dGluZ3MgRGl2PC9kaXY+CisgICAgICAgICAgICA8ZGl2IGNs
YXNzPSJhbmltYXRlLXN3aXRjaCIgbmctc3dpdGNoLXdoZW49ImhvbWUiPkhvbWUgU3BhbjwvZGl2
PgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iYW5pbWF0ZS1zd2l0Y2giIG5nLXN3aXRjaC1kZWZh
dWx0PmRlZmF1bHQ8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8L2Zp
bGU+CisgICAgPGZpbGUgbmFtZT0ic2NyaXB0LmpzIj4KKyAgICAgIGFuZ3VsYXIubW9kdWxlKCdz
d2l0Y2hFeGFtcGxlJywgWyduZ0FuaW1hdGUnXSkKKyAgICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1w
bGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHsKKyAgICAgICAgICAk
c2NvcGUuaXRlbXMgPSBbJ3NldHRpbmdzJywgJ2hvbWUnLCAnb3RoZXInXTsKKyAgICAgICAgICAk
c2NvcGUuc2VsZWN0aW9uID0gJHNjb3BlLml0ZW1zWzBdOworICAgICAgICB9XSk7CisgICAgPC9m
aWxlPgorICAgIDxmaWxlIG5hbWU9ImFuaW1hdGlvbnMuY3NzIj4KKyAgICAgIC5hbmltYXRlLXN3
aXRjaC1jb250YWluZXIgeworICAgICAgICBwb3NpdGlvbjpyZWxhdGl2ZTsKKyAgICAgICAgYmFj
a2dyb3VuZDp3aGl0ZTsKKyAgICAgICAgYm9yZGVyOjFweCBzb2xpZCBibGFjazsKKyAgICAgICAg
aGVpZ2h0OjQwcHg7CisgICAgICAgIG92ZXJmbG93OmhpZGRlbjsKKyAgICAgIH0KKworICAgICAg
LmFuaW1hdGUtc3dpdGNoIHsKKyAgICAgICAgcGFkZGluZzoxMHB4OworICAgICAgfQorCisgICAg
ICAuYW5pbWF0ZS1zd2l0Y2gubmctYW5pbWF0ZSB7CisgICAgICAgIC13ZWJraXQtdHJhbnNpdGlv
bjphbGwgY3ViaWMtYmV6aWVyKDAuMjUwLCAwLjQ2MCwgMC40NTAsIDAuOTQwKSAwLjVzOworICAg
ICAgICB0cmFuc2l0aW9uOmFsbCBjdWJpYy1iZXppZXIoMC4yNTAsIDAuNDYwLCAwLjQ1MCwgMC45
NDApIDAuNXM7CisKKyAgICAgICAgcG9zaXRpb246YWJzb2x1dGU7CisgICAgICAgIHRvcDowOwor
ICAgICAgICBsZWZ0OjA7CisgICAgICAgIHJpZ2h0OjA7CisgICAgICAgIGJvdHRvbTowOworICAg
ICAgfQorCisgICAgICAuYW5pbWF0ZS1zd2l0Y2gubmctbGVhdmUubmctbGVhdmUtYWN0aXZlLAor
ICAgICAgLmFuaW1hdGUtc3dpdGNoLm5nLWVudGVyIHsKKyAgICAgICAgdG9wOi01MHB4OworICAg
ICAgfQorICAgICAgLmFuaW1hdGUtc3dpdGNoLm5nLWxlYXZlLAorICAgICAgLmFuaW1hdGUtc3dp
dGNoLm5nLWVudGVyLm5nLWVudGVyLWFjdGl2ZSB7CisgICAgICAgIHRvcDowOworICAgICAgfQor
ICAgIDwvZmlsZT4KKyAgICA8ZmlsZSBuYW1lPSJwcm90cmFjdG9yLmpzIiB0eXBlPSJwcm90cmFj
dG9yIj4KKyAgICAgIHZhciBzd2l0Y2hFbGVtID0gZWxlbWVudChieS5jc3MoJ1tuZy1zd2l0Y2hd
JykpOworICAgICAgdmFyIHNlbGVjdCA9IGVsZW1lbnQoYnkubW9kZWwoJ3NlbGVjdGlvbicpKTsK
KworICAgICAgaXQoJ3Nob3VsZCBzdGFydCBpbiBzZXR0aW5ncycsIGZ1bmN0aW9uKCkgeworICAg
ICAgICBleHBlY3Qoc3dpdGNoRWxlbS5nZXRUZXh0KCkpLnRvTWF0Y2goL1NldHRpbmdzIERpdi8p
OworICAgICAgfSk7CisgICAgICBpdCgnc2hvdWxkIGNoYW5nZSB0byBob21lJywgZnVuY3Rpb24o
KSB7CisgICAgICAgIHNlbGVjdC5hbGwoYnkuY3NzKCdvcHRpb24nKSkuZ2V0KDEpLmNsaWNrKCk7
CisgICAgICAgIGV4cGVjdChzd2l0Y2hFbGVtLmdldFRleHQoKSkudG9NYXRjaCgvSG9tZSBTcGFu
Lyk7CisgICAgICB9KTsKKyAgICAgIGl0KCdzaG91bGQgc2VsZWN0IGRlZmF1bHQnLCBmdW5jdGlv
bigpIHsKKyAgICAgICAgc2VsZWN0LmFsbChieS5jc3MoJ29wdGlvbicpKS5nZXQoMikuY2xpY2so
KTsKKyAgICAgICAgZXhwZWN0KHN3aXRjaEVsZW0uZ2V0VGV4dCgpKS50b01hdGNoKC9kZWZhdWx0
Lyk7CisgICAgICB9KTsKKyAgICA8L2ZpbGU+CisgIDwvZXhhbXBsZT4KKyAqLwordmFyIG5nU3dp
dGNoRGlyZWN0aXZlID0gWyckYW5pbWF0ZScsIGZ1bmN0aW9uKCRhbmltYXRlKSB7CisgIHJldHVy
biB7CisgICAgcmVxdWlyZTogJ25nU3dpdGNoJywKKworICAgIC8vIGFza3MgZm9yICRzY29wZSB0
byBmb29sIHRoZSBCQyBjb250cm9sbGVyIG1vZHVsZQorICAgIGNvbnRyb2xsZXI6IFsnJHNjb3Bl
JywgZnVuY3Rpb24gbmdTd2l0Y2hDb250cm9sbGVyKCkgeworICAgICB0aGlzLmNhc2VzID0ge307
CisgICAgfV0sCisgICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHIsIG5nU3dp
dGNoQ29udHJvbGxlcikgeworICAgICAgdmFyIHdhdGNoRXhwciA9IGF0dHIubmdTd2l0Y2ggfHwg
YXR0ci5vbiwKKyAgICAgICAgICBzZWxlY3RlZFRyYW5zY2x1ZGVzID0gW10sCisgICAgICAgICAg
c2VsZWN0ZWRFbGVtZW50cyA9IFtdLAorICAgICAgICAgIHByZXZpb3VzTGVhdmVBbmltYXRpb25z
ID0gW10sCisgICAgICAgICAgc2VsZWN0ZWRTY29wZXMgPSBbXTsKKworICAgICAgdmFyIHNwbGlj
ZUZhY3RvcnkgPSBmdW5jdGlvbihhcnJheSwgaW5kZXgpIHsKKyAgICAgICAgICByZXR1cm4gZnVu
Y3Rpb24oKSB7IGFycmF5LnNwbGljZShpbmRleCwgMSk7IH07CisgICAgICB9OworCisgICAgICBz
Y29wZS4kd2F0Y2god2F0Y2hFeHByLCBmdW5jdGlvbiBuZ1N3aXRjaFdhdGNoQWN0aW9uKHZhbHVl
KSB7CisgICAgICAgIHZhciBpLCBpaTsKKyAgICAgICAgZm9yIChpID0gMCwgaWkgPSBwcmV2aW91
c0xlYXZlQW5pbWF0aW9ucy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7CisgICAgICAgICAgJGFuaW1h
dGUuY2FuY2VsKHByZXZpb3VzTGVhdmVBbmltYXRpb25zW2ldKTsKKyAgICAgICAgfQorICAgICAg
ICBwcmV2aW91c0xlYXZlQW5pbWF0aW9ucy5sZW5ndGggPSAwOworCisgICAgICAgIGZvciAoaSA9
IDAsIGlpID0gc2VsZWN0ZWRTY29wZXMubGVuZ3RoOyBpIDwgaWk7ICsraSkgeworICAgICAgICAg
IHZhciBzZWxlY3RlZCA9IGdldEJsb2NrTm9kZXMoc2VsZWN0ZWRFbGVtZW50c1tpXS5jbG9uZSk7
CisgICAgICAgICAgc2VsZWN0ZWRTY29wZXNbaV0uJGRlc3Ryb3koKTsKKyAgICAgICAgICB2YXIg
cHJvbWlzZSA9IHByZXZpb3VzTGVhdmVBbmltYXRpb25zW2ldID0gJGFuaW1hdGUubGVhdmUoc2Vs
ZWN0ZWQpOworICAgICAgICAgIHByb21pc2UudGhlbihzcGxpY2VGYWN0b3J5KHByZXZpb3VzTGVh
dmVBbmltYXRpb25zLCBpKSk7CisgICAgICAgIH0KKworICAgICAgICBzZWxlY3RlZEVsZW1lbnRz
Lmxlbmd0aCA9IDA7CisgICAgICAgIHNlbGVjdGVkU2NvcGVzLmxlbmd0aCA9IDA7CisKKyAgICAg
ICAgaWYgKChzZWxlY3RlZFRyYW5zY2x1ZGVzID0gbmdTd2l0Y2hDb250cm9sbGVyLmNhc2VzWych
JyArIHZhbHVlXSB8fCBuZ1N3aXRjaENvbnRyb2xsZXIuY2FzZXNbJz8nXSkpIHsKKyAgICAgICAg
ICBmb3JFYWNoKHNlbGVjdGVkVHJhbnNjbHVkZXMsIGZ1bmN0aW9uKHNlbGVjdGVkVHJhbnNjbHVk
ZSkgeworICAgICAgICAgICAgc2VsZWN0ZWRUcmFuc2NsdWRlLnRyYW5zY2x1ZGUoZnVuY3Rpb24o
Y2FzZUVsZW1lbnQsIHNlbGVjdGVkU2NvcGUpIHsKKyAgICAgICAgICAgICAgc2VsZWN0ZWRTY29w
ZXMucHVzaChzZWxlY3RlZFNjb3BlKTsKKyAgICAgICAgICAgICAgdmFyIGFuY2hvciA9IHNlbGVj
dGVkVHJhbnNjbHVkZS5lbGVtZW50OworICAgICAgICAgICAgICBjYXNlRWxlbWVudFtjYXNlRWxl
bWVudC5sZW5ndGgrK10gPSBkb2N1bWVudC5jcmVhdGVDb21tZW50KCcgZW5kIG5nU3dpdGNoV2hl
bjogJyk7CisgICAgICAgICAgICAgIHZhciBibG9jayA9IHsgY2xvbmU6IGNhc2VFbGVtZW50IH07
CisKKyAgICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50cy5wdXNoKGJsb2NrKTsKKyAgICAgICAg
ICAgICAgJGFuaW1hdGUuZW50ZXIoY2FzZUVsZW1lbnQsIGFuY2hvci5wYXJlbnQoKSwgYW5jaG9y
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICB9KTsK
KyAgICB9CisgIH07Cit9XTsKKwordmFyIG5nU3dpdGNoV2hlbkRpcmVjdGl2ZSA9IG5nRGlyZWN0
aXZlKHsKKyAgdHJhbnNjbHVkZTogJ2VsZW1lbnQnLAorICBwcmlvcml0eTogMTIwMCwKKyAgcmVx
dWlyZTogJ15uZ1N3aXRjaCcsCisgIG11bHRpRWxlbWVudDogdHJ1ZSwKKyAgbGluazogZnVuY3Rp
b24oc2NvcGUsIGVsZW1lbnQsIGF0dHJzLCBjdHJsLCAkdHJhbnNjbHVkZSkgeworICAgIGN0cmwu
Y2FzZXNbJyEnICsgYXR0cnMubmdTd2l0Y2hXaGVuXSA9IChjdHJsLmNhc2VzWychJyArIGF0dHJz
Lm5nU3dpdGNoV2hlbl0gfHwgW10pOworICAgIGN0cmwuY2FzZXNbJyEnICsgYXR0cnMubmdTd2l0
Y2hXaGVuXS5wdXNoKHsgdHJhbnNjbHVkZTogJHRyYW5zY2x1ZGUsIGVsZW1lbnQ6IGVsZW1lbnQg
fSk7CisgIH0KK30pOworCit2YXIgbmdTd2l0Y2hEZWZhdWx0RGlyZWN0aXZlID0gbmdEaXJlY3Rp
dmUoeworICB0cmFuc2NsdWRlOiAnZWxlbWVudCcsCisgIHByaW9yaXR5OiAxMjAwLAorICByZXF1
aXJlOiAnXm5nU3dpdGNoJywKKyAgbXVsdGlFbGVtZW50OiB0cnVlLAorICBsaW5rOiBmdW5jdGlv
bihzY29wZSwgZWxlbWVudCwgYXR0ciwgY3RybCwgJHRyYW5zY2x1ZGUpIHsKKyAgICBjdHJsLmNh
c2VzWyc/J10gPSAoY3RybC5jYXNlc1snPyddIHx8IFtdKTsKKyAgICBjdHJsLmNhc2VzWyc/J10u
cHVzaCh7IHRyYW5zY2x1ZGU6ICR0cmFuc2NsdWRlLCBlbGVtZW50OiBlbGVtZW50IH0pOworICAg
fQorfSk7CisKKy8qKgorICogQG5nZG9jIGRpcmVjdGl2ZQorICogQG5hbWUgbmdUcmFuc2NsdWRl
CisgKiBAcmVzdHJpY3QgRUFDCisgKgorICogQGRlc2NyaXB0aW9uCisgKiBEaXJlY3RpdmUgdGhh
dCBtYXJrcyB0aGUgaW5zZXJ0aW9uIHBvaW50IGZvciB0aGUgdHJhbnNjbHVkZWQgRE9NIG9mIHRo
ZSBuZWFyZXN0IHBhcmVudCBkaXJlY3RpdmUgdGhhdCB1c2VzIHRyYW5zY2x1c2lvbi4KKyAqCisg
KiBBbnkgZXhpc3RpbmcgY29udGVudCBvZiB0aGUgZWxlbWVudCB0aGF0IHRoaXMgZGlyZWN0aXZl
IGlzIHBsYWNlZCBvbiB3aWxsIGJlIHJlbW92ZWQgYmVmb3JlIHRoZSB0cmFuc2NsdWRlZCBjb250
ZW50IGlzIGluc2VydGVkLgorICoKKyAqIEBlbGVtZW50IEFOWQorICoKKyAqIEBleGFtcGxlCisg
ICA8ZXhhbXBsZSBtb2R1bGU9InRyYW5zY2x1ZGVFeGFtcGxlIj4KKyAgICAgPGZpbGUgbmFtZT0i
aW5kZXguaHRtbCI+CisgICAgICAgPHNjcmlwdD4KKyAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCd0
cmFuc2NsdWRlRXhhbXBsZScsIFtdKQorICAgICAgICAgIC5kaXJlY3RpdmUoJ3BhbmUnLCBmdW5j
dGlvbigpeworICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICByZXN0cmljdDog
J0UnLAorICAgICAgICAgICAgICAgdHJhbnNjbHVkZTogdHJ1ZSwKKyAgICAgICAgICAgICAgIHNj
b3BlOiB7IHRpdGxlOidAJyB9LAorICAgICAgICAgICAgICAgdGVtcGxhdGU6ICc8ZGl2IHN0eWxl
PSJib3JkZXI6IDFweCBzb2xpZCBibGFjazsiPicgKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJzxkaXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IGdyYXkiPnt7dGl0bGV9fTwvZGl2Picg
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxuZy10cmFuc2NsdWRlPjwvbmctdHJhbnNj
bHVkZT4nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JworICAgICAgICAgICAg
IH07CisgICAgICAgICB9KQorICAgICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVy
JywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHsKKyAgICAgICAgICAgJHNjb3BlLnRpdGxl
ID0gJ0xvcmVtIElwc3VtJzsKKyAgICAgICAgICAgJHNjb3BlLnRleHQgPSAnTmVxdWUgcG9ycm8g
cXVpc3F1YW0gZXN0IHF1aSBkb2xvcmVtIGlwc3VtIHF1aWEgZG9sb3IuLi4nOworICAgICAgICAg
fV0pOworICAgICAgIDwvc2NyaXB0PgorICAgICAgIDxkaXYgbmctY29udHJvbGxlcj0iRXhhbXBs
ZUNvbnRyb2xsZXIiPgorICAgICAgICAgPGlucHV0IG5nLW1vZGVsPSJ0aXRsZSIgYXJpYS1sYWJl
bD0idGl0bGUiPiA8YnIvPgorICAgICAgICAgPHRleHRhcmVhIG5nLW1vZGVsPSJ0ZXh0IiBhcmlh
LWxhYmVsPSJ0ZXh0Ij48L3RleHRhcmVhPiA8YnIvPgorICAgICAgICAgPHBhbmUgdGl0bGU9Int7
dGl0bGV9fSI+e3t0ZXh0fX08L3BhbmU+CisgICAgICAgPC9kaXY+CisgICAgIDwvZmlsZT4KKyAg
ICAgPGZpbGUgbmFtZT0icHJvdHJhY3Rvci5qcyIgdHlwZT0icHJvdHJhY3RvciI+CisgICAgICAg
IGl0KCdzaG91bGQgaGF2ZSB0cmFuc2NsdWRlZCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHZh
ciB0aXRsZUVsZW1lbnQgPSBlbGVtZW50KGJ5Lm1vZGVsKCd0aXRsZScpKTsKKyAgICAgICAgICB0
aXRsZUVsZW1lbnQuY2xlYXIoKTsKKyAgICAgICAgICB0aXRsZUVsZW1lbnQuc2VuZEtleXMoJ1RJ
VExFJyk7CisgICAgICAgICAgdmFyIHRleHRFbGVtZW50ID0gZWxlbWVudChieS5tb2RlbCgndGV4
dCcpKTsKKyAgICAgICAgICB0ZXh0RWxlbWVudC5jbGVhcigpOworICAgICAgICAgIHRleHRFbGVt
ZW50LnNlbmRLZXlzKCdURVhUJyk7CisgICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGlu
ZygndGl0bGUnKSkuZ2V0VGV4dCgpKS50b0VxdWFsKCdUSVRMRScpOworICAgICAgICAgIGV4cGVj
dChlbGVtZW50KGJ5LmJpbmRpbmcoJ3RleHQnKSkuZ2V0VGV4dCgpKS50b0VxdWFsKCdURVhUJyk7
CisgICAgICAgIH0pOworICAgICA8L2ZpbGU+CisgICA8L2V4YW1wbGU+CisgKgorICovCit2YXIg
bmdUcmFuc2NsdWRlRGlyZWN0aXZlID0gbmdEaXJlY3RpdmUoeworICByZXN0cmljdDogJ0VBQycs
CisgIGxpbms6IGZ1bmN0aW9uKCRzY29wZSwgJGVsZW1lbnQsICRhdHRycywgY29udHJvbGxlciwg
JHRyYW5zY2x1ZGUpIHsKKyAgICBpZiAoISR0cmFuc2NsdWRlKSB7CisgICAgICB0aHJvdyBtaW5F
cnIoJ25nVHJhbnNjbHVkZScpKCdvcnBoYW4nLAorICAgICAgICdJbGxlZ2FsIHVzZSBvZiBuZ1Ry
YW5zY2x1ZGUgZGlyZWN0aXZlIGluIHRoZSB0ZW1wbGF0ZSEgJyArCisgICAgICAgJ05vIHBhcmVu
dCBkaXJlY3RpdmUgdGhhdCByZXF1aXJlcyBhIHRyYW5zY2x1c2lvbiBmb3VuZC4gJyArCisgICAg
ICAgJ0VsZW1lbnQ6IHswfScsCisgICAgICAgc3RhcnRpbmdUYWcoJGVsZW1lbnQpKTsKKyAgICB9
CisKKyAgICAkdHJhbnNjbHVkZShmdW5jdGlvbihjbG9uZSkgeworICAgICAgJGVsZW1lbnQuZW1w
dHkoKTsKKyAgICAgICRlbGVtZW50LmFwcGVuZChjbG9uZSk7CisgICAgfSk7CisgIH0KK30pOwor
CisvKioKKyAqIEBuZ2RvYyBkaXJlY3RpdmUKKyAqIEBuYW1lIHNjcmlwdAorICogQHJlc3RyaWN0
IEUKKyAqCisgKiBAZGVzY3JpcHRpb24KKyAqIExvYWQgdGhlIGNvbnRlbnQgb2YgYSBgPHNjcmlw
dD5gIGVsZW1lbnQgaW50byB7QGxpbmsgbmcuJHRlbXBsYXRlQ2FjaGUgYCR0ZW1wbGF0ZUNhY2hl
YH0sIHNvIHRoYXQgdGhlCisgKiB0ZW1wbGF0ZSBjYW4gYmUgdXNlZCBieSB7QGxpbmsgbmcuZGly
ZWN0aXZlOm5nSW5jbHVkZSBgbmdJbmNsdWRlYH0sCisgKiB7QGxpbmsgbmdSb3V0ZS5kaXJlY3Rp
dmU6bmdWaWV3IGBuZ1ZpZXdgfSwgb3Ige0BsaW5rIGd1aWRlL2RpcmVjdGl2ZSBkaXJlY3RpdmVz
fS4gVGhlIHR5cGUgb2YgdGhlCisgKiBgPHNjcmlwdD5gIGVsZW1lbnQgbXVzdCBiZSBzcGVjaWZp
ZWQgYXMgYHRleHQvbmctdGVtcGxhdGVgLCBhbmQgYSBjYWNoZSBuYW1lIGZvciB0aGUgdGVtcGxh
dGUgbXVzdCBiZQorICogYXNzaWduZWQgdGhyb3VnaCB0aGUgZWxlbWVudCdzIGBpZGAsIHdoaWNo
IGNhbiB0aGVuIGJlIHVzZWQgYXMgYSBkaXJlY3RpdmUncyBgdGVtcGxhdGVVcmxgLgorICoKKyAq
IEBwYXJhbSB7c3RyaW5nfSB0eXBlIE11c3QgYmUgc2V0IHRvIGAndGV4dC9uZy10ZW1wbGF0ZSdg
LgorICogQHBhcmFtIHtzdHJpbmd9IGlkIENhY2hlIG5hbWUgb2YgdGhlIHRlbXBsYXRlLgorICoK
KyAqIEBleGFtcGxlCisgIDxleGFtcGxlPgorICAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgor
ICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L25nLXRlbXBsYXRlIiBpZD0iL3RwbC5odG1sIj4KKyAg
ICAgICAgQ29udGVudCBvZiB0aGUgdGVtcGxhdGUuCisgICAgICA8L3NjcmlwdD4KKworICAgICAg
PGEgbmctY2xpY2s9ImN1cnJlbnRUcGw9Jy90cGwuaHRtbCciIGlkPSJ0cGwtbGluayI+TG9hZCBp
bmxpbmVkIHRlbXBsYXRlPC9hPgorICAgICAgPGRpdiBpZD0idHBsLWNvbnRlbnQiIG5nLWluY2x1
ZGUgc3JjPSJjdXJyZW50VHBsIj48L2Rpdj4KKyAgICA8L2ZpbGU+CisgICAgPGZpbGUgbmFtZT0i
cHJvdHJhY3Rvci5qcyIgdHlwZT0icHJvdHJhY3RvciI+CisgICAgICBpdCgnc2hvdWxkIGxvYWQg
dGVtcGxhdGUgZGVmaW5lZCBpbnNpZGUgc2NyaXB0IHRhZycsIGZ1bmN0aW9uKCkgeworICAgICAg
ICBlbGVtZW50KGJ5LmNzcygnI3RwbC1saW5rJykpLmNsaWNrKCk7CisgICAgICAgIGV4cGVjdChl
bGVtZW50KGJ5LmNzcygnI3RwbC1jb250ZW50JykpLmdldFRleHQoKSkudG9NYXRjaCgvQ29udGVu
dCBvZiB0aGUgdGVtcGxhdGUvKTsKKyAgICAgIH0pOworICAgIDwvZmlsZT4KKyAgPC9leGFtcGxl
PgorICovCit2YXIgc2NyaXB0RGlyZWN0aXZlID0gWyckdGVtcGxhdGVDYWNoZScsIGZ1bmN0aW9u
KCR0ZW1wbGF0ZUNhY2hlKSB7CisgIHJldHVybiB7CisgICAgcmVzdHJpY3Q6ICdFJywKKyAgICB0
ZXJtaW5hbDogdHJ1ZSwKKyAgICBjb21waWxlOiBmdW5jdGlvbihlbGVtZW50LCBhdHRyKSB7Cisg
ICAgICBpZiAoYXR0ci50eXBlID09ICd0ZXh0L25nLXRlbXBsYXRlJykgeworICAgICAgICB2YXIg
dGVtcGxhdGVVcmwgPSBhdHRyLmlkLAorICAgICAgICAgICAgdGV4dCA9IGVsZW1lbnRbMF0udGV4
dDsKKworICAgICAgICAkdGVtcGxhdGVDYWNoZS5wdXQodGVtcGxhdGVVcmwsIHRleHQpOworICAg
ICAgfQorICAgIH0KKyAgfTsKK31dOworCit2YXIgbm9vcE5nTW9kZWxDb250cm9sbGVyID0geyAk
c2V0Vmlld1ZhbHVlOiBub29wLCAkcmVuZGVyOiBub29wIH07CisKKy8qKgorICogQG5nZG9jIHR5
cGUKKyAqIEBuYW1lICBzZWxlY3QuU2VsZWN0Q29udHJvbGxlcgorICogQGRlc2NyaXB0aW9uCisg
KiBUaGUgY29udHJvbGxlciBmb3IgdGhlIGA8c2VsZWN0PmAgZGlyZWN0aXZlLiBUaGlzIHByb3Zp
ZGVzIHN1cHBvcnQgZm9yIHJlYWRpbmcKKyAqIGFuZCB3cml0aW5nIHRoZSBzZWxlY3RlZCB2YWx1
ZShzKSBvZiB0aGUgY29udHJvbCBhbmQgYWxzbyBjb29yZGluYXRlcyBkeW5hbWljYWxseQorICog
YWRkZWQgYDxvcHRpb24+YCBlbGVtZW50cywgcGVyaGFwcyBieSBhbiBgbmdSZXBlYXRgIGRpcmVj
dGl2ZS4KKyAqLwordmFyIFNlbGVjdENvbnRyb2xsZXIgPQorICAgICAgICBbJyRlbGVtZW50Jywg
JyRzY29wZScsICckYXR0cnMnLCBmdW5jdGlvbigkZWxlbWVudCwgJHNjb3BlLCAkYXR0cnMpIHsK
KworICB2YXIgc2VsZiA9IHRoaXMsCisgICAgICBvcHRpb25zTWFwID0gbmV3IEhhc2hNYXAoKTsK
KworICAvLyBJZiB0aGUgbmdNb2RlbCBkb2Vzbid0IGdldCBwcm92aWRlZCB0aGVuIHByb3ZpZGUg
YSBkdW1teSBub29wIHZlcnNpb24gdG8gcHJldmVudCBlcnJvcnMKKyAgc2VsZi5uZ01vZGVsQ3Ry
bCA9IG5vb3BOZ01vZGVsQ29udHJvbGxlcjsKKworICAvLyBUaGUgInVua25vd24iIG9wdGlvbiBp
cyBvbmUgdGhhdCBpcyBwcmVwZW5kZWQgdG8gdGhlIGxpc3QgaWYgdGhlIHZpZXdWYWx1ZQorICAv
LyBkb2VzIG5vdCBtYXRjaCBhbnkgb2YgdGhlIG9wdGlvbnMuIFdoZW4gaXQgaXMgcmVuZGVyZWQg
dGhlIHZhbHVlIG9mIHRoZSB1bmtub3duCisgIC8vIG9wdGlvbiBpcyAnPyBYWFggPycgd2hlcmUg
WFhYIGlzIHRoZSBoYXNoS2V5IG9mIHRoZSB2YWx1ZSB0aGF0IGlzIG5vdCBrbm93bi4KKyAgLy8K
KyAgLy8gV2UgY2FuJ3QganVzdCBqcUxpdGUoJzxvcHRpb24+Jykgc2luY2UganFMaXRlIGlzIG5v
dCBzbWFydCBlbm91Z2gKKyAgLy8gdG8gY3JlYXRlIGl0IGluIDxzZWxlY3Q+IGFuZCBJRSBiYXJm
cyBvdGhlcndpc2UuCisgIHNlbGYudW5rbm93bk9wdGlvbiA9IGpxTGl0ZShkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdvcHRpb24nKSk7CisgIHNlbGYucmVuZGVyVW5rbm93bk9wdGlvbiA9IGZ1bmN0
aW9uKHZhbCkgeworICAgIHZhciB1bmtub3duVmFsID0gJz8gJyArIGhhc2hLZXkodmFsKSArICcg
Pyc7CisgICAgc2VsZi51bmtub3duT3B0aW9uLnZhbCh1bmtub3duVmFsKTsKKyAgICAkZWxlbWVu
dC5wcmVwZW5kKHNlbGYudW5rbm93bk9wdGlvbik7CisgICAgJGVsZW1lbnQudmFsKHVua25vd25W
YWwpOworICB9OworCisgICRzY29wZS4kb24oJyRkZXN0cm95JywgZnVuY3Rpb24oKSB7CisgICAg
Ly8gZGlzYWJsZSB1bmtub3duIG9wdGlvbiBzbyB0aGF0IHdlIGRvbid0IGRvIHdvcmsgd2hlbiB0
aGUgd2hvbGUgc2VsZWN0IGlzIGJlaW5nIGRlc3Ryb3llZAorICAgIHNlbGYucmVuZGVyVW5rbm93
bk9wdGlvbiA9IG5vb3A7CisgIH0pOworCisgIHNlbGYucmVtb3ZlVW5rbm93bk9wdGlvbiA9IGZ1
bmN0aW9uKCkgeworICAgIGlmIChzZWxmLnVua25vd25PcHRpb24ucGFyZW50KCkpIHNlbGYudW5r
bm93bk9wdGlvbi5yZW1vdmUoKTsKKyAgfTsKKworCisgIC8vIFJlYWQgdGhlIHZhbHVlIG9mIHRo
ZSBzZWxlY3QgY29udHJvbCwgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgY2hhbmdlcyBkZXBl
bmRpbmcKKyAgLy8gdXBvbiB3aGV0aGVyIHRoZSBzZWxlY3QgY2FuIGhhdmUgbXVsdGlwbGUgdmFs
dWVzIGFuZCB3aGV0aGVyIG5nT3B0aW9ucyBpcyBhdCB3b3JrLgorICBzZWxmLnJlYWRWYWx1ZSA9
IGZ1bmN0aW9uIHJlYWRTaW5nbGVWYWx1ZSgpIHsKKyAgICBzZWxmLnJlbW92ZVVua25vd25PcHRp
b24oKTsKKyAgICByZXR1cm4gJGVsZW1lbnQudmFsKCk7CisgIH07CisKKworICAvLyBXcml0ZSB0
aGUgdmFsdWUgdG8gdGhlIHNlbGVjdCBjb250cm9sLCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhp
cyBjaGFuZ2VzIGRlcGVuZGluZworICAvLyB1cG9uIHdoZXRoZXIgdGhlIHNlbGVjdCBjYW4gaGF2
ZSBtdWx0aXBsZSB2YWx1ZXMgYW5kIHdoZXRoZXIgbmdPcHRpb25zIGlzIGF0IHdvcmsuCisgIHNl
bGYud3JpdGVWYWx1ZSA9IGZ1bmN0aW9uIHdyaXRlU2luZ2xlVmFsdWUodmFsdWUpIHsKKyAgICBp
ZiAoc2VsZi5oYXNPcHRpb24odmFsdWUpKSB7CisgICAgICBzZWxmLnJlbW92ZVVua25vd25PcHRp
b24oKTsKKyAgICAgICRlbGVtZW50LnZhbCh2YWx1ZSk7CisgICAgICBpZiAodmFsdWUgPT09ICcn
KSBzZWxmLmVtcHR5T3B0aW9uLnByb3AoJ3NlbGVjdGVkJywgdHJ1ZSk7IC8vIHRvIG1ha2UgSUU5
IGhhcHB5CisgICAgfSBlbHNlIHsKKyAgICAgIGlmICh2YWx1ZSA9PSBudWxsICYmIHNlbGYuZW1w
dHlPcHRpb24pIHsKKyAgICAgICAgc2VsZi5yZW1vdmVVbmtub3duT3B0aW9uKCk7CisgICAgICAg
ICRlbGVtZW50LnZhbCgnJyk7CisgICAgICB9IGVsc2UgeworICAgICAgICBzZWxmLnJlbmRlclVu
a25vd25PcHRpb24odmFsdWUpOworICAgICAgfQorICAgIH0KKyAgfTsKKworCisgIC8vIFRlbGwg
dGhlIHNlbGVjdCBjb250cm9sIHRoYXQgYW4gb3B0aW9uLCB3aXRoIHRoZSBnaXZlbiB2YWx1ZSwg
aGFzIGJlZW4gYWRkZWQKKyAgc2VsZi5hZGRPcHRpb24gPSBmdW5jdGlvbih2YWx1ZSwgZWxlbWVu
dCkgeworICAgIGFzc2VydE5vdEhhc093blByb3BlcnR5KHZhbHVlLCAnIm9wdGlvbiB2YWx1ZSIn
KTsKKyAgICBpZiAodmFsdWUgPT09ICcnKSB7CisgICAgICBzZWxmLmVtcHR5T3B0aW9uID0gZWxl
bWVudDsKKyAgICB9CisgICAgdmFyIGNvdW50ID0gb3B0aW9uc01hcC5nZXQodmFsdWUpIHx8IDA7
CisgICAgb3B0aW9uc01hcC5wdXQodmFsdWUsIGNvdW50ICsgMSk7CisgIH07CisKKyAgLy8gVGVs
bCB0aGUgc2VsZWN0IGNvbnRyb2wgdGhhdCBhbiBvcHRpb24sIHdpdGggdGhlIGdpdmVuIHZhbHVl
LCBoYXMgYmVlbiByZW1vdmVkCisgIHNlbGYucmVtb3ZlT3B0aW9uID0gZnVuY3Rpb24odmFsdWUp
IHsKKyAgICB2YXIgY291bnQgPSBvcHRpb25zTWFwLmdldCh2YWx1ZSk7CisgICAgaWYgKGNvdW50
KSB7CisgICAgICBpZiAoY291bnQgPT09IDEpIHsKKyAgICAgICAgb3B0aW9uc01hcC5yZW1vdmUo
dmFsdWUpOworICAgICAgICBpZiAodmFsdWUgPT09ICcnKSB7CisgICAgICAgICAgc2VsZi5lbXB0
eU9wdGlvbiA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAg
b3B0aW9uc01hcC5wdXQodmFsdWUsIGNvdW50IC0gMSk7CisgICAgICB9CisgICAgfQorICB9Owor
CisgIC8vIENoZWNrIHdoZXRoZXIgdGhlIHNlbGVjdCBjb250cm9sIGhhcyBhbiBvcHRpb24gbWF0
Y2hpbmcgdGhlIGdpdmVuIHZhbHVlCisgIHNlbGYuaGFzT3B0aW9uID0gZnVuY3Rpb24odmFsdWUp
IHsKKyAgICByZXR1cm4gISFvcHRpb25zTWFwLmdldCh2YWx1ZSk7CisgIH07Cit9XTsKKworLyoq
CisgKiBAbmdkb2MgZGlyZWN0aXZlCisgKiBAbmFtZSBzZWxlY3QKKyAqIEByZXN0cmljdCBFCisg
KgorICogQGRlc2NyaXB0aW9uCisgKiBIVE1MIGBTRUxFQ1RgIGVsZW1lbnQgd2l0aCBhbmd1bGFy
IGRhdGEtYmluZGluZy4KKyAqCisgKiBJbiBtYW55IGNhc2VzLCBgbmdSZXBlYXRgIGNhbiBiZSB1
c2VkIG9uIGA8b3B0aW9uPmAgZWxlbWVudHMgaW5zdGVhZCBvZiB7QGxpbmsgbmcuZGlyZWN0aXZl
Om5nT3B0aW9ucworICogbmdPcHRpb25zfSB0byBhY2hpZXZlIGEgc2ltaWxhciByZXN1bHQuIEhv
d2V2ZXIsIGBuZ09wdGlvbnNgIHByb3ZpZGVzIHNvbWUgYmVuZWZpdHMgc3VjaCBhcyByZWR1Y2lu
ZworICogbWVtb3J5IGFuZCBpbmNyZWFzaW5nIHNwZWVkIGJ5IG5vdCBjcmVhdGluZyBhIG5ldyBz
Y29wZSBmb3IgZWFjaCByZXBlYXRlZCBpbnN0YW5jZSwgYXMgd2VsbCBhcyBwcm92aWRpbmcKKyAq
IG1vcmUgZmxleGliaWxpdHkgaW4gaG93IHRoZSBgPHNlbGVjdD5gJ3MgbW9kZWwgaXMgYXNzaWdu
ZWQgdmlhIHRoZSBgc2VsZWN0YCAqKmBhc2AqKiBwYXJ0IG9mIHRoZQorICogY29tcHJlaGVuc2lv
biBleHByZXNzaW9uLgorICoKKyAqIFdoZW4gYW4gaXRlbSBpbiB0aGUgYDxzZWxlY3Q+YCBtZW51
IGlzIHNlbGVjdGVkLCB0aGUgYXJyYXkgZWxlbWVudCBvciBvYmplY3QgcHJvcGVydHkKKyAqIHJl
cHJlc2VudGVkIGJ5IHRoZSBzZWxlY3RlZCBvcHRpb24gd2lsbCBiZSBib3VuZCB0byB0aGUgbW9k
ZWwgaWRlbnRpZmllZCBieSB0aGUgYG5nTW9kZWxgCisgKiBkaXJlY3RpdmUuCisgKgorICogSWYg
dGhlIHZpZXdWYWx1ZSBjb250YWlucyBhIHZhbHVlIHRoYXQgZG9lc24ndCBtYXRjaCBhbnkgb2Yg
dGhlIG9wdGlvbnMgdGhlbiB0aGUgY29udHJvbAorICogd2lsbCBhdXRvbWF0aWNhbGx5IGFkZCBh
biAidW5rbm93biIgb3B0aW9uLCB3aGljaCBpdCB0aGVuIHJlbW92ZXMgd2hlbiB0aGlzIGlzIHJl
c29sdmVkLgorICoKKyAqIE9wdGlvbmFsbHksIGEgc2luZ2xlIGhhcmQtY29kZWQgYDxvcHRpb24+
YCBlbGVtZW50LCB3aXRoIHRoZSB2YWx1ZSBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nLCBjYW4KKyAq
IGJlIG5lc3RlZCBpbnRvIHRoZSBgPHNlbGVjdD5gIGVsZW1lbnQuIFRoaXMgZWxlbWVudCB3aWxs
IHRoZW4gcmVwcmVzZW50IHRoZSBgbnVsbGAgb3IgIm5vdCBzZWxlY3RlZCIKKyAqIG9wdGlvbi4g
U2VlIGV4YW1wbGUgYmVsb3cgZm9yIGRlbW9uc3RyYXRpb24uCisgKgorICogPGRpdiBjbGFzcz0i
YWxlcnQgYWxlcnQtaW5mbyI+CisgKiBUaGUgdmFsdWUgb2YgYSBgc2VsZWN0YCBkaXJlY3RpdmUg
dXNlZCB3aXRob3V0IGBuZ09wdGlvbnNgIGlzIGFsd2F5cyBhIHN0cmluZy4KKyAqIFdoZW4gdGhl
IG1vZGVsIG5lZWRzIHRvIGJlIGJvdW5kIHRvIGEgbm9uLXN0cmluZyB2YWx1ZSwgeW91IG11c3Qg
ZWl0aGVyIGV4cGxpY3RseSBjb252ZXJ0IGl0CisgKiB1c2luZyBhIGRpcmVjdGl2ZSAoc2VlIGV4
YW1wbGUgYmVsb3cpIG9yIHVzZSBgbmdPcHRpb25zYCB0byBzcGVjaWZ5IHRoZSBzZXQgb2Ygb3B0
aW9ucy4KKyAqIFRoaXMgaXMgYmVjYXVzZSBhbiBvcHRpb24gZWxlbWVudCBjYW4gb25seSBiZSBi
b3VuZCB0byBzdHJpbmcgdmFsdWVzIGF0IHByZXNlbnQuCisgKiA8L2Rpdj4KKyAqCisgKiAjIyMg
RXhhbXBsZSAoYmluZGluZyBgc2VsZWN0YCB0byBhIG5vbi1zdHJpbmcgdmFsdWUpCisgKgorICog
PGV4YW1wbGUgbmFtZT0ic2VsZWN0LXdpdGgtbm9uLXN0cmluZy1vcHRpb25zIiBtb2R1bGU9Im5v
blN0cmluZ1NlbGVjdCI+CisgKiAgIDxmaWxlIG5hbWU9ImluZGV4Lmh0bWwiPgorICogICAgIDxz
ZWxlY3QgbmctbW9kZWw9Im1vZGVsLmlkIiBjb252ZXJ0LXRvLW51bWJlcj4KKyAqICAgICAgIDxv
cHRpb24gdmFsdWU9IjAiPlplcm88L29wdGlvbj4KKyAqICAgICAgIDxvcHRpb24gdmFsdWU9IjEi
Pk9uZTwvb3B0aW9uPgorICogICAgICAgPG9wdGlvbiB2YWx1ZT0iMiI+VHdvPC9vcHRpb24+Cisg
KiAgICAgPC9zZWxlY3Q+CisgKiAgICAge3sgbW9kZWwgfX0KKyAqICAgPC9maWxlPgorICogICA8
ZmlsZSBuYW1lPSJhcHAuanMiPgorICogICAgIGFuZ3VsYXIubW9kdWxlKCdub25TdHJpbmdTZWxl
Y3QnLCBbXSkKKyAqICAgICAgIC5ydW4oZnVuY3Rpb24oJHJvb3RTY29wZSkgeworICogICAgICAg
ICAkcm9vdFNjb3BlLm1vZGVsID0geyBpZDogMiB9OworICogICAgICAgfSkKKyAqICAgICAgIC5k
aXJlY3RpdmUoJ2NvbnZlcnRUb051bWJlcicsIGZ1bmN0aW9uKCkgeworICogICAgICAgICByZXR1
cm4geworICogICAgICAgICAgIHJlcXVpcmU6ICduZ01vZGVsJywKKyAqICAgICAgICAgICBsaW5r
OiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cnMsIG5nTW9kZWwpIHsKKyAqICAgICAgICAg
ICAgIG5nTW9kZWwuJHBhcnNlcnMucHVzaChmdW5jdGlvbih2YWwpIHsKKyAqICAgICAgICAgICAg
ICAgcmV0dXJuIHBhcnNlSW50KHZhbCwgMTApOworICogICAgICAgICAgICAgfSk7CisgKiAgICAg
ICAgICAgICBuZ01vZGVsLiRmb3JtYXR0ZXJzLnB1c2goZnVuY3Rpb24odmFsKSB7CisgKiAgICAg
ICAgICAgICAgIHJldHVybiAnJyArIHZhbDsKKyAqICAgICAgICAgICAgIH0pOworICogICAgICAg
ICAgIH0KKyAqICAgICAgICAgfTsKKyAqICAgICAgIH0pOworICogICA8L2ZpbGU+CisgKiAgIDxm
aWxlIG5hbWU9InByb3RyYWN0b3IuanMiIHR5cGU9InByb3RyYWN0b3IiPgorICogICAgIGl0KCdz
aG91bGQgaW5pdGlhbGl6ZSB0byBtb2RlbCcsIGZ1bmN0aW9uKCkgeworICogICAgICAgdmFyIHNl
bGVjdCA9IGVsZW1lbnQoYnkuY3NzKCdzZWxlY3QnKSk7CisgKiAgICAgICBleHBlY3QoZWxlbWVu
dChieS5tb2RlbCgnbW9kZWwuaWQnKSkuJCgnb3B0aW9uOmNoZWNrZWQnKS5nZXRUZXh0KCkpLnRv
RXF1YWwoJ1R3bycpOworICogICAgIH0pOworICogICA8L2ZpbGU+CisgKiA8L2V4YW1wbGU+Cisg
KgorICovCit2YXIgc2VsZWN0RGlyZWN0aXZlID0gZnVuY3Rpb24oKSB7CisKKyAgcmV0dXJuIHsK
KyAgICByZXN0cmljdDogJ0UnLAorICAgIHJlcXVpcmU6IFsnc2VsZWN0JywgJz9uZ01vZGVsJ10s
CisgICAgY29udHJvbGxlcjogU2VsZWN0Q29udHJvbGxlciwKKyAgICBsaW5rOiBmdW5jdGlvbihz
Y29wZSwgZWxlbWVudCwgYXR0ciwgY3RybHMpIHsKKworICAgICAgLy8gaWYgbmdNb2RlbCBpcyBu
b3QgZGVmaW5lZCwgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZworICAgICAgdmFyIG5nTW9k
ZWxDdHJsID0gY3RybHNbMV07CisgICAgICBpZiAoIW5nTW9kZWxDdHJsKSByZXR1cm47CisKKyAg
ICAgIHZhciBzZWxlY3RDdHJsID0gY3RybHNbMF07CisKKyAgICAgIHNlbGVjdEN0cmwubmdNb2Rl
bEN0cmwgPSBuZ01vZGVsQ3RybDsKKworICAgICAgLy8gV2UgZGVsZWdhdGUgcmVuZGVyaW5nIHRv
IHRoZSBgd3JpdGVWYWx1ZWAgbWV0aG9kLCB3aGljaCBjYW4gYmUgY2hhbmdlZAorICAgICAgLy8g
aWYgdGhlIHNlbGVjdCBjYW4gaGF2ZSBtdWx0aXBsZSBzZWxlY3RlZCB2YWx1ZXMgb3IgaWYgdGhl
IG9wdGlvbnMgYXJlIGJlaW5nCisgICAgICAvLyBnZW5lcmF0ZWQgYnkgYG5nT3B0aW9uc2AKKyAg
ICAgIG5nTW9kZWxDdHJsLiRyZW5kZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgc2VsZWN0Q3Ry
bC53cml0ZVZhbHVlKG5nTW9kZWxDdHJsLiR2aWV3VmFsdWUpOworICAgICAgfTsKKworICAgICAg
Ly8gV2hlbiB0aGUgc2VsZWN0ZWQgaXRlbShzKSBjaGFuZ2VzIHdlIGRlbGVnYXRlIGdldHRpbmcg
dGhlIHZhbHVlIG9mIHRoZSBzZWxlY3QgY29udHJvbAorICAgICAgLy8gdG8gdGhlIGByZWFkVmFs
dWVgIG1ldGhvZCwgd2hpY2ggY2FuIGJlIGNoYW5nZWQgaWYgdGhlIHNlbGVjdCBjYW4gaGF2ZSBt
dWx0aXBsZQorICAgICAgLy8gc2VsZWN0ZWQgdmFsdWVzIG9yIGlmIHRoZSBvcHRpb25zIGFyZSBi
ZWluZyBnZW5lcmF0ZWQgYnkgYG5nT3B0aW9uc2AKKyAgICAgIGVsZW1lbnQub24oJ2NoYW5nZScs
IGZ1bmN0aW9uKCkgeworICAgICAgICBzY29wZS4kYXBwbHkoZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgbmdNb2RlbEN0cmwuJHNldFZpZXdWYWx1ZShzZWxlY3RDdHJsLnJlYWRWYWx1ZSgpKTsKKyAg
ICAgICAgfSk7CisgICAgICB9KTsKKworICAgICAgLy8gSWYgdGhlIHNlbGVjdCBhbGxvd3MgbXVs
dGlwbGUgdmFsdWVzIHRoZW4gd2UgbmVlZCB0byBtb2RpZnkgaG93IHdlIHJlYWQgYW5kIHdyaXRl
CisgICAgICAvLyB2YWx1ZXMgZnJvbSBhbmQgdG8gdGhlIGNvbnRyb2w7IGFsc28gd2hhdCBpdCBt
ZWFucyBmb3IgdGhlIHZhbHVlIHRvIGJlIGVtcHR5IGFuZAorICAgICAgLy8gd2UgaGF2ZSB0byBh
ZGQgYW4gZXh0cmEgd2F0Y2ggc2luY2UgbmdNb2RlbCBkb2Vzbid0IHdvcmsgd2VsbCB3aXRoIGFy
cmF5cyAtIGl0CisgICAgICAvLyBkb2Vzbid0IHRyaWdnZXIgcmVuZGVyaW5nIGlmIG9ubHkgYW4g
aXRlbSBpbiB0aGUgYXJyYXkgY2hhbmdlcy4KKyAgICAgIGlmIChhdHRyLm11bHRpcGxlKSB7CisK
KyAgICAgICAgLy8gUmVhZCB2YWx1ZSBub3cgbmVlZHMgdG8gY2hlY2sgZWFjaCBvcHRpb24gdG8g
c2VlIGlmIGl0IGlzIHNlbGVjdGVkCisgICAgICAgIHNlbGVjdEN0cmwucmVhZFZhbHVlID0gZnVu
Y3Rpb24gcmVhZE11bHRpcGxlVmFsdWUoKSB7CisgICAgICAgICAgdmFyIGFycmF5ID0gW107Cisg
ICAgICAgICAgZm9yRWFjaChlbGVtZW50LmZpbmQoJ29wdGlvbicpLCBmdW5jdGlvbihvcHRpb24p
IHsKKyAgICAgICAgICAgIGlmIChvcHRpb24uc2VsZWN0ZWQpIHsKKyAgICAgICAgICAgICAgYXJy
YXkucHVzaChvcHRpb24udmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0pOworICAg
ICAgICAgIHJldHVybiBhcnJheTsKKyAgICAgICAgfTsKKworICAgICAgICAvLyBXcml0ZSB2YWx1
ZSBub3cgbmVlZHMgdG8gc2V0IHRoZSBzZWxlY3RlZCBwcm9wZXJ0eSBvZiBlYWNoIG1hdGNoaW5n
IG9wdGlvbgorICAgICAgICBzZWxlY3RDdHJsLndyaXRlVmFsdWUgPSBmdW5jdGlvbiB3cml0ZU11
bHRpcGxlVmFsdWUodmFsdWUpIHsKKyAgICAgICAgICB2YXIgaXRlbXMgPSBuZXcgSGFzaE1hcCh2
YWx1ZSk7CisgICAgICAgICAgZm9yRWFjaChlbGVtZW50LmZpbmQoJ29wdGlvbicpLCBmdW5jdGlv
bihvcHRpb24pIHsKKyAgICAgICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IGlzRGVmaW5lZChpdGVt
cy5nZXQob3B0aW9uLnZhbHVlKSk7CisgICAgICAgICAgfSk7CisgICAgICAgIH07CisKKyAgICAg
ICAgLy8gd2UgaGF2ZSB0byBkbyBpdCBvbiBlYWNoIHdhdGNoIHNpbmNlIG5nTW9kZWwgd2F0Y2hl
cyByZWZlcmVuY2UsIGJ1dAorICAgICAgICAvLyB3ZSBuZWVkIHRvIHdvcmsgb2YgYW4gYXJyYXks
IHNvIHdlIG5lZWQgdG8gc2VlIGlmIGFueXRoaW5nIHdhcyBpbnNlcnRlZC9yZW1vdmVkCisgICAg
ICAgIHZhciBsYXN0VmlldywgbGFzdFZpZXdSZWYgPSBOYU47CisgICAgICAgIHNjb3BlLiR3YXRj
aChmdW5jdGlvbiBzZWxlY3RNdWx0aXBsZVdhdGNoKCkgeworICAgICAgICAgIGlmIChsYXN0Vmll
d1JlZiA9PT0gbmdNb2RlbEN0cmwuJHZpZXdWYWx1ZSAmJiAhZXF1YWxzKGxhc3RWaWV3LCBuZ01v
ZGVsQ3RybC4kdmlld1ZhbHVlKSkgeworICAgICAgICAgICAgbGFzdFZpZXcgPSBzaGFsbG93Q29w
eShuZ01vZGVsQ3RybC4kdmlld1ZhbHVlKTsKKyAgICAgICAgICAgIG5nTW9kZWxDdHJsLiRyZW5k
ZXIoKTsKKyAgICAgICAgICB9CisgICAgICAgICAgbGFzdFZpZXdSZWYgPSBuZ01vZGVsQ3RybC4k
dmlld1ZhbHVlOworICAgICAgICB9KTsKKworICAgICAgICAvLyBJZiB3ZSBhcmUgYSBtdWx0aXBs
ZSBzZWxlY3QgdGhlbiB2YWx1ZSBpcyBub3cgYSBjb2xsZWN0aW9uCisgICAgICAgIC8vIHNvIHRo
ZSBtZWFuaW5nIG9mICRpc0VtcHR5IGNoYW5nZXMKKyAgICAgICAgbmdNb2RlbEN0cmwuJGlzRW1w
dHkgPSBmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICAgIHJldHVybiAhdmFsdWUgfHwgdmFsdWUu
bGVuZ3RoID09PSAwOworICAgICAgICB9OworCisgICAgICB9CisgICAgfQorICB9OworfTsKKwor
CisvLyBUaGUgb3B0aW9uIGRpcmVjdGl2ZSBpcyBwdXJlbHkgZGVzaWduZWQgdG8gY29tbXVuaWNh
dGUgdGhlIGV4aXN0ZW5jZSAob3IgbGFjayBvZikKKy8vIG9mIGR5bmFtaWNhbGx5IGNyZWF0ZWQg
KGFuZCBkZXN0cm95ZWQpIG9wdGlvbiBlbGVtZW50cyB0byB0aGVpciBjb250YWluaW5nIHNlbGVj
dAorLy8gZGlyZWN0aXZlIHZpYSBpdHMgY29udHJvbGxlci4KK3ZhciBvcHRpb25EaXJlY3RpdmUg
PSBbJyRpbnRlcnBvbGF0ZScsIGZ1bmN0aW9uKCRpbnRlcnBvbGF0ZSkgeworCisgIGZ1bmN0aW9u
IGNocm9tZUhhY2sob3B0aW9uRWxlbWVudCkgeworICAgIC8vIFdvcmthcm91bmQgZm9yIGh0dHBz
Oi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zODE0NTkKKyAg
ICAvLyBBZGRpbmcgYW4gPG9wdGlvbiBzZWxlY3RlZD0ic2VsZWN0ZWQiPiBlbGVtZW50IHRvIGEg
PHNlbGVjdCByZXF1aXJlZD0icmVxdWlyZWQiPiBzaG91bGQKKyAgICAvLyBhdXRvbWF0aWNhbGx5
IHNlbGVjdCB0aGUgbmV3IGVsZW1lbnQKKyAgICBpZiAob3B0aW9uRWxlbWVudFswXS5oYXNBdHRy
aWJ1dGUoJ3NlbGVjdGVkJykpIHsKKyAgICAgIG9wdGlvbkVsZW1lbnRbMF0uc2VsZWN0ZWQgPSB0
cnVlOworICAgIH0KKyAgfQorCisgIHJldHVybiB7CisgICAgcmVzdHJpY3Q6ICdFJywKKyAgICBw
cmlvcml0eTogMTAwLAorICAgIGNvbXBpbGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHIpIHsKKwor
ICAgICAgLy8gSWYgdGhlIHZhbHVlIGF0dHJpYnV0ZSBpcyBub3QgZGVmaW5lZCB0aGVuIHdlIGZh
bGwgYmFjayB0byB0aGUKKyAgICAgIC8vIHRleHQgY29udGVudCBvZiB0aGUgb3B0aW9uIGVsZW1l
bnQsIHdoaWNoIG1heSBiZSBpbnRlcnBvbGF0ZWQKKyAgICAgIGlmIChpc1VuZGVmaW5lZChhdHRy
LnZhbHVlKSkgeworICAgICAgICB2YXIgaW50ZXJwb2xhdGVGbiA9ICRpbnRlcnBvbGF0ZShlbGVt
ZW50LnRleHQoKSwgdHJ1ZSk7CisgICAgICAgIGlmICghaW50ZXJwb2xhdGVGbikgeworICAgICAg
ICAgIGF0dHIuJHNldCgndmFsdWUnLCBlbGVtZW50LnRleHQoKSk7CisgICAgICAgIH0KKyAgICAg
IH0KKworICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyKSB7CisKKyAg
ICAgICAgLy8gVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gb3ZlciB1c2luZyBeXiBzaW5jZSB3ZSBk
b24ndCB3YW50IHRvIGhhdmUgdG8gc2VhcmNoCisgICAgICAgIC8vIGFsbCB0aGUgd2F5IHRvIHRo
ZSByb290IG9mIHRoZSBET00gZm9yIGV2ZXJ5IHNpbmdsZSBvcHRpb24gZWxlbWVudAorICAgICAg
ICB2YXIgc2VsZWN0Q3RybE5hbWUgPSAnJHNlbGVjdENvbnRyb2xsZXInLAorICAgICAgICAgICAg
cGFyZW50ID0gZWxlbWVudC5wYXJlbnQoKSwKKyAgICAgICAgICAgIHNlbGVjdEN0cmwgPSBwYXJl
bnQuZGF0YShzZWxlY3RDdHJsTmFtZSkgfHwKKyAgICAgICAgICAgICAgcGFyZW50LnBhcmVudCgp
LmRhdGEoc2VsZWN0Q3RybE5hbWUpOyAvLyBpbiBjYXNlIHdlIGFyZSBpbiBvcHRncm91cAorCisg
ICAgICAgIC8vIE9ubHkgdXBkYXRlIHRyaWdnZXIgb3B0aW9uIHVwZGF0ZXMgaWYgdGhpcyBpcyBh
biBvcHRpb24gd2l0aGluIGEgYHNlbGVjdGAKKyAgICAgICAgLy8gdGhhdCBhbHNvIGhhcyBgbmdN
b2RlbGAgYXR0YWNoZWQKKyAgICAgICAgaWYgKHNlbGVjdEN0cmwgJiYgc2VsZWN0Q3RybC5uZ01v
ZGVsQ3RybCkgeworCisgICAgICAgICAgaWYgKGludGVycG9sYXRlRm4pIHsKKyAgICAgICAgICAg
IHNjb3BlLiR3YXRjaChpbnRlcnBvbGF0ZUZuLCBmdW5jdGlvbiBpbnRlcnBvbGF0ZVdhdGNoQWN0
aW9uKG5ld1ZhbCwgb2xkVmFsKSB7CisgICAgICAgICAgICAgIGF0dHIuJHNldCgndmFsdWUnLCBu
ZXdWYWwpOworICAgICAgICAgICAgICBpZiAob2xkVmFsICE9PSBuZXdWYWwpIHsKKyAgICAgICAg
ICAgICAgICBzZWxlY3RDdHJsLnJlbW92ZU9wdGlvbihvbGRWYWwpOworICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgIHNlbGVjdEN0cmwuYWRkT3B0aW9uKG5ld1ZhbCwgZWxlbWVudCk7Cisg
ICAgICAgICAgICAgIHNlbGVjdEN0cmwubmdNb2RlbEN0cmwuJHJlbmRlcigpOworICAgICAgICAg
ICAgICBjaHJvbWVIYWNrKGVsZW1lbnQpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHNlbGVjdEN0cmwuYWRkT3B0aW9uKGF0dHIudmFsdWUsIGVsZW1l
bnQpOworICAgICAgICAgICAgc2VsZWN0Q3RybC5uZ01vZGVsQ3RybC4kcmVuZGVyKCk7CisgICAg
ICAgICAgICBjaHJvbWVIYWNrKGVsZW1lbnQpOworICAgICAgICAgIH0KKworICAgICAgICAgIGVs
ZW1lbnQub24oJyRkZXN0cm95JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBzZWxlY3RDdHJs
LnJlbW92ZU9wdGlvbihhdHRyLnZhbHVlKTsKKyAgICAgICAgICAgIHNlbGVjdEN0cmwubmdNb2Rl
bEN0cmwuJHJlbmRlcigpOworICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICB9OworICAg
IH0KKyAgfTsKK31dOworCit2YXIgc3R5bGVEaXJlY3RpdmUgPSB2YWx1ZUZuKHsKKyAgcmVzdHJp
Y3Q6ICdFJywKKyAgdGVybWluYWw6IGZhbHNlCit9KTsKKwordmFyIHJlcXVpcmVkRGlyZWN0aXZl
ID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiB7CisgICAgcmVzdHJpY3Q6ICdBJywKKyAgICByZXF1
aXJlOiAnP25nTW9kZWwnLAorICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbG0sIGF0dHIsIGN0
cmwpIHsKKyAgICAgIGlmICghY3RybCkgcmV0dXJuOworICAgICAgYXR0ci5yZXF1aXJlZCA9IHRy
dWU7IC8vIGZvcmNlIHRydXRoeSBpbiBjYXNlIHdlIGFyZSBvbiBub24gaW5wdXQgZWxlbWVudAor
CisgICAgICBjdHJsLiR2YWxpZGF0b3JzLnJlcXVpcmVkID0gZnVuY3Rpb24obW9kZWxWYWx1ZSwg
dmlld1ZhbHVlKSB7CisgICAgICAgIHJldHVybiAhYXR0ci5yZXF1aXJlZCB8fCAhY3RybC4kaXNF
bXB0eSh2aWV3VmFsdWUpOworICAgICAgfTsKKworICAgICAgYXR0ci4kb2JzZXJ2ZSgncmVxdWly
ZWQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgY3RybC4kdmFsaWRhdGUoKTsKKyAgICAgIH0pOwor
ICAgIH0KKyAgfTsKK307CisKKwordmFyIHBhdHRlcm5EaXJlY3RpdmUgPSBmdW5jdGlvbigpIHsK
KyAgcmV0dXJuIHsKKyAgICByZXN0cmljdDogJ0EnLAorICAgIHJlcXVpcmU6ICc/bmdNb2RlbCcs
CisgICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsbSwgYXR0ciwgY3RybCkgeworICAgICAgaWYg
KCFjdHJsKSByZXR1cm47CisKKyAgICAgIHZhciByZWdleHAsIHBhdHRlcm5FeHAgPSBhdHRyLm5n
UGF0dGVybiB8fCBhdHRyLnBhdHRlcm47CisgICAgICBhdHRyLiRvYnNlcnZlKCdwYXR0ZXJuJywg
ZnVuY3Rpb24ocmVnZXgpIHsKKyAgICAgICAgaWYgKGlzU3RyaW5nKHJlZ2V4KSAmJiByZWdleC5s
ZW5ndGggPiAwKSB7CisgICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKCdeJyArIHJlZ2V4ICsg
JyQnKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZWdleCAmJiAhcmVnZXgudGVzdCkgewor
ICAgICAgICAgIHRocm93IG1pbkVycignbmdQYXR0ZXJuJykoJ25vcmVnZXhwJywKKyAgICAgICAg
ICAgICdFeHBlY3RlZCB7MH0gdG8gYmUgYSBSZWdFeHAgYnV0IHdhcyB7MX0uIEVsZW1lbnQ6IHsy
fScsIHBhdHRlcm5FeHAsCisgICAgICAgICAgICByZWdleCwgc3RhcnRpbmdUYWcoZWxtKSk7Cisg
ICAgICAgIH0KKworICAgICAgICByZWdleHAgPSByZWdleCB8fCB1bmRlZmluZWQ7CisgICAgICAg
IGN0cmwuJHZhbGlkYXRlKCk7CisgICAgICB9KTsKKworICAgICAgY3RybC4kdmFsaWRhdG9ycy5w
YXR0ZXJuID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIGN0cmwuJGlzRW1wdHko
dmFsdWUpIHx8IGlzVW5kZWZpbmVkKHJlZ2V4cCkgfHwgcmVnZXhwLnRlc3QodmFsdWUpOworICAg
ICAgfTsKKyAgICB9CisgIH07Cit9OworCisKK3ZhciBtYXhsZW5ndGhEaXJlY3RpdmUgPSBmdW5j
dGlvbigpIHsKKyAgcmV0dXJuIHsKKyAgICByZXN0cmljdDogJ0EnLAorICAgIHJlcXVpcmU6ICc/
bmdNb2RlbCcsCisgICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsbSwgYXR0ciwgY3RybCkgewor
ICAgICAgaWYgKCFjdHJsKSByZXR1cm47CisKKyAgICAgIHZhciBtYXhsZW5ndGggPSAtMTsKKyAg
ICAgIGF0dHIuJG9ic2VydmUoJ21heGxlbmd0aCcsIGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAg
IHZhciBpbnRWYWwgPSB0b0ludCh2YWx1ZSk7CisgICAgICAgIG1heGxlbmd0aCA9IGlzTmFOKGlu
dFZhbCkgPyAtMSA6IGludFZhbDsKKyAgICAgICAgY3RybC4kdmFsaWRhdGUoKTsKKyAgICAgIH0p
OworICAgICAgY3RybC4kdmFsaWRhdG9ycy5tYXhsZW5ndGggPSBmdW5jdGlvbihtb2RlbFZhbHVl
LCB2aWV3VmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIChtYXhsZW5ndGggPCAwKSB8fCBjdHJsLiRp
c0VtcHR5KHZpZXdWYWx1ZSkgfHwgKHZpZXdWYWx1ZS5sZW5ndGggPD0gbWF4bGVuZ3RoKTsKKyAg
ICAgIH07CisgICAgfQorICB9OworfTsKKwordmFyIG1pbmxlbmd0aERpcmVjdGl2ZSA9IGZ1bmN0
aW9uKCkgeworICByZXR1cm4geworICAgIHJlc3RyaWN0OiAnQScsCisgICAgcmVxdWlyZTogJz9u
Z01vZGVsJywKKyAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxtLCBhdHRyLCBjdHJsKSB7Cisg
ICAgICBpZiAoIWN0cmwpIHJldHVybjsKKworICAgICAgdmFyIG1pbmxlbmd0aCA9IDA7CisgICAg
ICBhdHRyLiRvYnNlcnZlKCdtaW5sZW5ndGgnLCBmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICBt
aW5sZW5ndGggPSB0b0ludCh2YWx1ZSkgfHwgMDsKKyAgICAgICAgY3RybC4kdmFsaWRhdGUoKTsK
KyAgICAgIH0pOworICAgICAgY3RybC4kdmFsaWRhdG9ycy5taW5sZW5ndGggPSBmdW5jdGlvbiht
b2RlbFZhbHVlLCB2aWV3VmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIGN0cmwuJGlzRW1wdHkodmll
d1ZhbHVlKSB8fCB2aWV3VmFsdWUubGVuZ3RoID49IG1pbmxlbmd0aDsKKyAgICAgIH07CisgICAg
fQorICB9OworfTsKKworICBpZiAod2luZG93LmFuZ3VsYXIuYm9vdHN0cmFwKSB7CisgICAgLy9B
bmd1bGFySlMgaXMgYWxyZWFkeSBsb2FkZWQsIHNvIHdlIGNhbiByZXR1cm4gaGVyZS4uLgorICAg
IGNvbnNvbGUubG9nKCdXQVJOSU5HOiBUcmllZCB0byBsb2FkIGFuZ3VsYXIgbW9yZSB0aGFuIG9u
Y2UuJyk7CisgICAgcmV0dXJuOworICB9CisKKyAgLy90cnkgdG8gYmluZCB0byBqcXVlcnkgbm93
IHNvIHRoYXQgb25lIGNhbiB3cml0ZSBqcUxpdGUoZG9jdW1lbnQpLnJlYWR5KCkKKyAgLy9idXQg
d2Ugd2lsbCByZWJpbmQgb24gYm9vdHN0cmFwIGFnYWluLgorICBiaW5kSlF1ZXJ5KCk7CisKKyAg
cHVibGlzaEV4dGVybmFsQVBJKGFuZ3VsYXIpOworCisgIGpxTGl0ZShkb2N1bWVudCkucmVhZHko
ZnVuY3Rpb24oKSB7CisgICAgYW5ndWxhckluaXQoZG9jdW1lbnQsIGJvb3RzdHJhcCk7CisgIH0p
OworCit9KSh3aW5kb3csIGRvY3VtZW50KTsKKworIXdpbmRvdy5hbmd1bGFyLiQkY3NwKCkgJiYg
d2luZG93LmFuZ3VsYXIuZWxlbWVudChkb2N1bWVudC5oZWFkKS5wcmVwZW5kKCc8c3R5bGUgdHlw
ZT0idGV4dC9jc3MiPkBjaGFyc2V0ICJVVEYtOCI7W25nXFw6Y2xvYWtdLFtuZy1jbG9ha10sW2Rh
dGEtbmctY2xvYWtdLFt4LW5nLWNsb2FrXSwubmctY2xvYWssLngtbmctY2xvYWssLm5nLWhpZGU6
bm90KC5uZy1oaWRlLWFuaW1hdGUpe2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50O31uZ1xcOmZvcm17
ZGlzcGxheTpibG9jazt9Lm5nLWFuaW1hdGUtc2hpbXt2aXNpYmlsaXR5OmhpZGRlbjt9Lm5nLWFu
Y2hvcntwb3NpdGlvbjphYnNvbHV0ZTt9PC9zdHlsZT4nKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvbm9kZV9tb2R1bGVzL3Rv
ZG9tdmMtYXBwLWNzcy9pbmRleC5jc3MgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvbm9kZV9tb2R1
bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTdlYTE4MDE2MTIxMjZm
MWRiNjVjZTA1NjhmMmEwMjM3M2I5M2I1NQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2FuZ3VsYXJqcy9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL2luZGV4LmNzcwpAQCAtMCww
ICsxLDM3OCBAQAoraHRtbCwKK2JvZHkgeworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nOiAw
OworfQorCitidXR0b24geworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nOiAwOworICAgIGJv
cmRlcjogMDsKKyAgICBiYWNrZ3JvdW5kOiBub25lOworICAgIGZvbnQtc2l6ZTogMTAwJTsKKyAg
ICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7Cisg
ICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAgLXdlYmtp
dC1hcHBlYXJhbmNlOiBub25lOworICAgIGFwcGVhcmFuY2U6IG5vbmU7CisgICAgLXdlYmtpdC1m
b250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgLW1vei1mb250LXNtb290aGluZzogYW50
aWFsaWFzZWQ7CisgICAgZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworfQorCitib2R5IHsK
KyAgICBmb250OiAxNHB4ICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMt
c2VyaWY7CisgICAgbGluZS1oZWlnaHQ6IDEuNGVtOworICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7
CisgICAgY29sb3I6ICM0ZDRkNGQ7CisgICAgbWluLXdpZHRoOiAyMzBweDsKKyAgICBtYXgtd2lk
dGg6IDU1MHB4OworICAgIG1hcmdpbjogMCBhdXRvOworICAgIC13ZWJraXQtZm9udC1zbW9vdGhp
bmc6IGFudGlhbGlhc2VkOworICAgIC1tb3otZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwor
ICAgIGZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICBmb250LXdlaWdodDogMzAwOwor
fQorCitidXR0b24sCitpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsKKyAgICBvdXRsaW5lOiBub25l
OworfQorCisuaGlkZGVuIHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisjdG9kb2FwcCB7Cisg
ICAgYmFja2dyb3VuZDogI2ZmZjsKKyAgICBtYXJnaW46IDEzMHB4IDAgNDBweCAwOworICAgIHBv
c2l0aW9uOiByZWxhdGl2ZTsKKyAgICBib3gtc2hhZG93OiAwIDJweCA0cHggMCByZ2JhKDAsIDAs
IDAsIDAuMiksCisgICAgICAgICAgICAgICAgMCAyNXB4IDUwcHggMCByZ2JhKDAsIDAsIDAsIDAu
MSk7Cit9CisKKyN0b2RvYXBwIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHsKKyAg
ICBmb250LXN0eWxlOiBpdGFsaWM7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKKyAgICBjb2xvcjog
I2U2ZTZlNjsKK30KKworI3RvZG9hcHAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXIgeworICAgIGZv
bnQtc3R5bGU6IGl0YWxpYzsKKyAgICBmb250LXdlaWdodDogMzAwOworICAgIGNvbG9yOiAjZTZl
NmU2OworfQorCisjdG9kb2FwcCBpbnB1dDo6aW5wdXQtcGxhY2Vob2xkZXIgeworICAgIGZvbnQt
c3R5bGU6IGl0YWxpYzsKKyAgICBmb250LXdlaWdodDogMzAwOworICAgIGNvbG9yOiAjZTZlNmU2
OworfQorCisjdG9kb2FwcCBoMSB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDog
LTE1NXB4OworICAgIHdpZHRoOiAxMDAlOworICAgIGZvbnQtc2l6ZTogMTAwcHg7CisgICAgZm9u
dC13ZWlnaHQ6IDEwMDsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgY29sb3I6IHJnYmEo
MTc1LCA0NywgNDcsIDAuMTUpOworICAgIC13ZWJraXQtdGV4dC1yZW5kZXJpbmc6IG9wdGltaXpl
TGVnaWJpbGl0eTsKKyAgICAtbW96LXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7
CisgICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKK30KKworI25ldy10b2Rv
LAorLmVkaXQgeworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBtYXJnaW46IDA7CisgICAg
d2lkdGg6IDEwMCU7CisgICAgZm9udC1zaXplOiAyNHB4OworICAgIGZvbnQtZmFtaWx5OiBpbmhl
cml0OworICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0OworICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsK
KyAgICBib3JkZXI6IDA7CisgICAgb3V0bGluZTogbm9uZTsKKyAgICBjb2xvcjogaW5oZXJpdDsK
KyAgICBwYWRkaW5nOiA2cHg7CisgICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTsKKyAgICBib3gt
c2hhZG93OiBpbnNldCAwIC0xcHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjIpOworICAgIGJveC1z
aXppbmc6IGJvcmRlci1ib3g7CisgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFz
ZWQ7CisgICAgLW1vei1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgZm9udC1zbW9v
dGhpbmc6IGFudGlhbGlhc2VkOworfQorCisjbmV3LXRvZG8geworICAgIHBhZGRpbmc6IDE2cHgg
MTZweCAxNnB4IDYwcHg7CisgICAgYm9yZGVyOiBub25lOworICAgIGJhY2tncm91bmQ6IHJnYmEo
MCwgMCwgMCwgMC4wMDMpOworICAgIGJveC1zaGFkb3c6IGluc2V0IDAgLTJweCAxcHggcmdiYSgw
LDAsMCwwLjAzKTsKK30KKworI21haW4geworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICB6
LWluZGV4OiAyOworICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTZlNmU2OworfQorCitsYWJl
bFtmb3I9J3RvZ2dsZS1hbGwnXSB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworI3RvZ2dsZS1h
bGwgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IC01NXB4OworICAgIGxlZnQ6
IC0xMnB4OworICAgIHdpZHRoOiA2MHB4OworICAgIGhlaWdodDogMzRweDsKKyAgICB0ZXh0LWFs
aWduOiBjZW50ZXI7CisgICAgYm9yZGVyOiBub25lOyAvKiBNb2JpbGUgU2FmYXJpICovCit9CisK
KyN0b2dnbGUtYWxsOmJlZm9yZSB7CisgICAgY29udGVudDogJ+Kdryc7CisgICAgZm9udC1zaXpl
OiAyMnB4OworICAgIGNvbG9yOiAjZTZlNmU2OworICAgIHBhZGRpbmc6IDEwcHggMjdweCAxMHB4
IDI3cHg7Cit9CisKKyN0b2dnbGUtYWxsOmNoZWNrZWQ6YmVmb3JlIHsKKyAgICBjb2xvcjogIzcz
NzM3MzsKK30KKworI3RvZG8tbGlzdCB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7
CisgICAgbGlzdC1zdHlsZTogbm9uZTsKK30KKworI3RvZG8tbGlzdCBsaSB7CisgICAgcG9zaXRp
b246IHJlbGF0aXZlOworICAgIGZvbnQtc2l6ZTogMjRweDsKKyAgICBib3JkZXItYm90dG9tOiAx
cHggc29saWQgI2VkZWRlZDsKK30KKworI3RvZG8tbGlzdCBsaTpsYXN0LWNoaWxkIHsKKyAgICBi
b3JkZXItYm90dG9tOiBub25lOworfQorCisjdG9kby1saXN0IGxpLmVkaXRpbmcgeworICAgIGJv
cmRlci1ib3R0b206IG5vbmU7CisgICAgcGFkZGluZzogMDsKK30KKworI3RvZG8tbGlzdCBsaS5l
ZGl0aW5nIC5lZGl0IHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICB3aWR0aDogNTA2cHg7Cisg
ICAgcGFkZGluZzogMTNweCAxN3B4IDEycHggMTdweDsKKyAgICBtYXJnaW46IDAgMCAwIDQzcHg7
Cit9CisKKyN0b2RvLWxpc3QgbGkuZWRpdGluZyAudmlldyB7CisgICAgZGlzcGxheTogbm9uZTsK
K30KKworI3RvZG8tbGlzdCBsaSAudG9nZ2xlIHsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cisg
ICAgd2lkdGg6IDQwcHg7CisgICAgLyogYXV0bywgc2luY2Ugbm9uLVdlYktpdCBicm93c2VycyBk
b2Vzbid0IHN1cHBvcnQgaW5wdXQgc3R5bGluZyAqLworICAgIGhlaWdodDogYXV0bzsKKyAgICBw
b3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAwOworICAgIGJvdHRvbTogMDsKKyAgICBtYXJn
aW46IGF1dG8gMDsKKyAgICBib3JkZXI6IG5vbmU7IC8qIE1vYmlsZSBTYWZhcmkgKi8KKyAgICAt
d2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CisgICAgYXBwZWFyYW5jZTogbm9uZTsKK30KKworI3Rv
ZG8tbGlzdCBsaSAudG9nZ2xlOmFmdGVyIHsKKyAgICBjb250ZW50OiB1cmwoJ2RhdGE6aW1hZ2Uv
c3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0
aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9Ii0xMCAtMTggMTAwIDEzNSI+PGNpcmNsZSBjeD0i
NTAiIGN5PSI1MCIgcj0iNTAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2VkZWRlZCIgc3Ryb2tlLXdp
ZHRoPSIzIi8+PC9zdmc+Jyk7Cit9CisKKyN0b2RvLWxpc3QgbGkgLnRvZ2dsZTpjaGVja2VkOmFm
dGVyIHsKKyAgICBjb250ZW50OiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1s
bnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZp
ZXdCb3g9Ii0xMCAtMTggMTAwIDEzNSI+PGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNTAiIGZp
bGw9Im5vbmUiIHN0cm9rZT0iI2JkZGFkNSIgc3Ryb2tlLXdpZHRoPSIzIi8+PHBhdGggZmlsbD0i
IzVkYzJhZiIgZD0iTTcyIDI1TDQyIDcxIDI3IDU2bC00IDQgMjAgMjAgMzQtNTJ6Ii8+PC9zdmc+
Jyk7Cit9CisKKyN0b2RvLWxpc3QgbGkgbGFiZWwgeworICAgIHdoaXRlLXNwYWNlOiBwcmU7Cisg
ICAgd29yZC1icmVhazogYnJlYWstd29yZDsKKyAgICBwYWRkaW5nOiAxNXB4IDYwcHggMTVweCAx
NXB4OworICAgIG1hcmdpbi1sZWZ0OiA0NXB4OworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIGxp
bmUtaGVpZ2h0OiAxLjI7CisgICAgdHJhbnNpdGlvbjogY29sb3IgMC40czsKK30KKworI3RvZG8t
bGlzdCBsaS5jb21wbGV0ZWQgbGFiZWwgeworICAgIGNvbG9yOiAjZDlkOWQ5OworICAgIHRleHQt
ZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOworfQorCisjdG9kby1saXN0IGxpIC5kZXN0cm95IHsK
KyAgICBkaXNwbGF5OiBub25lOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7
CisgICAgcmlnaHQ6IDEwcHg7CisgICAgYm90dG9tOiAwOworICAgIHdpZHRoOiA0MHB4OworICAg
IGhlaWdodDogNDBweDsKKyAgICBtYXJnaW46IGF1dG8gMDsKKyAgICBmb250LXNpemU6IDMwcHg7
CisgICAgY29sb3I6ICNjYzlhOWE7CisgICAgbWFyZ2luLWJvdHRvbTogMTFweDsKKyAgICB0cmFu
c2l0aW9uOiBjb2xvciAwLjJzIGVhc2Utb3V0OworfQorCisjdG9kby1saXN0IGxpIC5kZXN0cm95
OmhvdmVyIHsKKyAgICBjb2xvcjogI2FmNWI1ZTsKK30KKworI3RvZG8tbGlzdCBsaSAuZGVzdHJv
eTphZnRlciB7CisgICAgY29udGVudDogJ8OXJzsKK30KKworI3RvZG8tbGlzdCBsaTpob3ZlciAu
ZGVzdHJveSB7CisgICAgZGlzcGxheTogYmxvY2s7Cit9CisKKyN0b2RvLWxpc3QgbGkgLmVkaXQg
eworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKyN0b2RvLWxpc3QgbGkuZWRpdGluZzpsYXN0LWNo
aWxkIHsKKyAgICBtYXJnaW4tYm90dG9tOiAtMXB4OworfQorCisjZm9vdGVyIHsKKyAgICBjb2xv
cjogIzc3NzsKKyAgICBwYWRkaW5nOiAxMHB4IDE1cHg7CisgICAgaGVpZ2h0OiAyMHB4OworICAg
IHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2U2ZTZlNjsK
K30KKworI2Zvb3RlcjpiZWZvcmUgeworICAgIGNvbnRlbnQ6ICcnOworICAgIHBvc2l0aW9uOiBh
YnNvbHV0ZTsKKyAgICByaWdodDogMDsKKyAgICBib3R0b206IDA7CisgICAgbGVmdDogMDsKKyAg
ICBoZWlnaHQ6IDUwcHg7CisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgICBib3gtc2hhZG93OiAw
IDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjIpLAorICAgICAgICAgICAgICAgIDAgOHB4IDAgLTNw
eCAjZjZmNmY2LAorICAgICAgICAgICAgICAgIDAgOXB4IDFweCAtM3B4IHJnYmEoMCwgMCwgMCwg
MC4yKSwKKyAgICAgICAgICAgICAgICAwIDE2cHggMCAtNnB4ICNmNmY2ZjYsCisgICAgICAgICAg
ICAgICAgMCAxN3B4IDJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKK30KKworI3RvZG8tY291
bnQgeworICAgIGZsb2F0OiBsZWZ0OworICAgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKyN0b2Rv
LWNvdW50IHN0cm9uZyB7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKK30KKworI2ZpbHRlcnMgewor
ICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nOiAwOworICAgIGxpc3Qtc3R5bGU6IG5vbmU7Cisg
ICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHJpZ2h0OiAwOworICAgIGxlZnQ6IDA7Cit9CisK
KyNmaWx0ZXJzIGxpIHsKKyAgICBkaXNwbGF5OiBpbmxpbmU7Cit9CisKKyNmaWx0ZXJzIGxpIGEg
eworICAgIGNvbG9yOiBpbmhlcml0OworICAgIG1hcmdpbjogM3B4OworICAgIHBhZGRpbmc6IDNw
eCA3cHg7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIGJvcmRlcjogMXB4IHNvbGlk
IHRyYW5zcGFyZW50OworICAgIGJvcmRlci1yYWRpdXM6IDNweDsKK30KKworI2ZpbHRlcnMgbGkg
YS5zZWxlY3RlZCwKKyNmaWx0ZXJzIGxpIGE6aG92ZXIgeworICAgIGJvcmRlci1jb2xvcjogcmdi
YSgxNzUsIDQ3LCA0NywgMC4xKTsKK30KKworI2ZpbHRlcnMgbGkgYS5zZWxlY3RlZCB7CisgICAg
Ym9yZGVyLWNvbG9yOiByZ2JhKDE3NSwgNDcsIDQ3LCAwLjIpOworfQorCisjY2xlYXItY29tcGxl
dGVkLAoraHRtbCAjY2xlYXItY29tcGxldGVkOmFjdGl2ZSB7CisgICAgZmxvYXQ6IHJpZ2h0Owor
ICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBsaW5lLWhlaWdodDogMjBweDsKKyAgICB0ZXh0
LWRlY29yYXRpb246IG5vbmU7CisgICAgY3Vyc29yOiBwb2ludGVyOworICAgIHBvc2l0aW9uOiBy
ZWxhdGl2ZTsKK30KKworI2NsZWFyLWNvbXBsZXRlZDpob3ZlciB7CisgICAgdGV4dC1kZWNvcmF0
aW9uOiB1bmRlcmxpbmU7Cit9CisKKyNpbmZvIHsKKyAgICBtYXJnaW46IDY1cHggYXV0byAwOwor
ICAgIGNvbG9yOiAjYmZiZmJmOworICAgIGZvbnQtc2l6ZTogMTBweDsKKyAgICB0ZXh0LXNoYWRv
dzogMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7CisgICAgdGV4dC1hbGlnbjogY2Vu
dGVyOworfQorCisjaW5mbyBwIHsKKyAgICBsaW5lLWhlaWdodDogMTsKK30KKworI2luZm8gYSB7
CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIGZv
bnQtd2VpZ2h0OiA0MDA7Cit9CisKKyNpbmZvIGE6aG92ZXIgeworICAgIHRleHQtZGVjb3JhdGlv
bjogdW5kZXJsaW5lOworfQorCisvKgorICAgIEhhY2sgdG8gcmVtb3ZlIGJhY2tncm91bmQgZnJv
bSBNb2JpbGUgU2FmYXJpLgorICAgIENhbid0IHVzZSBpdCBnbG9iYWxseSBzaW5jZSBpdCBkZXN0
cm95cyBjaGVja2JveGVzIGluIEZpcmVmb3gKKyovCitAbWVkaWEgc2NyZWVuIGFuZCAoLXdlYmtp
dC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApIHsKKyAgICAjdG9nZ2xlLWFsbCwKKyAgICAjdG9k
by1saXN0IGxpIC50b2dnbGUgeworICAgICAgICBiYWNrZ3JvdW5kOiBub25lOworICAgIH0KKwor
ICAgICN0b2RvLWxpc3QgbGkgLnRvZ2dsZSB7CisgICAgICAgIGhlaWdodDogNDBweDsKKyAgICB9
CisKKyAgICAjdG9nZ2xlLWFsbCB7CisgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUo
OTBkZWcpOworICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7CisgICAgICAgIC13ZWJr
aXQtYXBwZWFyYW5jZTogbm9uZTsKKyAgICAgICAgYXBwZWFyYW5jZTogbm9uZTsKKyAgICB9Cit9
CisKK0BtZWRpYSAobWF4LXdpZHRoOiA0MzBweCkgeworICAgICNmb290ZXIgeworICAgICAgICBo
ZWlnaHQ6IDUwcHg7CisgICAgfQorCisgICAgI2ZpbHRlcnMgeworICAgICAgICBib3R0b206IDEw
cHg7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL25vZGVfbW9k
dWxlcy90b2RvbXZjLWFwcC1jc3MvcGFja2FnZS5qc29uIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpz
L25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvcGFja2FnZS5qc29uCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhk
YzM1ZDZlMDRiZjg4ZjgwOWQ2MTVkMDM5YzZmMmZjMDJiOWFjZWQKLS0tIC9kZXYvbnVsbAorKysg
Yi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9hbmd1bGFyanMvbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9wYWNr
YWdlLmpzb24KQEAgLTAsMCArMSwxMDMgQEAKK3sKKyAgIl9hcmdzIjogWworICAgIFsKKyAgICAg
IHsKKyAgICAgICAgInJhdyI6ICJ0b2RvbXZjLWFwcC1jc3NAXjEuMC4xIiwKKyAgICAgICAgInNj
b3BlIjogbnVsbCwKKyAgICAgICAgImVzY2FwZWROYW1lIjogInRvZG9tdmMtYXBwLWNzcyIsCisg
ICAgICAgICJuYW1lIjogInRvZG9tdmMtYXBwLWNzcyIsCisgICAgICAgICJyYXdTcGVjIjogIl4x
LjAuMSIsCisgICAgICAgICJzcGVjIjogIj49MS4wLjEgPDIuMC4wIiwKKyAgICAgICAgInR5cGUi
OiAicmFuZ2UiCisgICAgICB9LAorICAgICAgIi9Vc2Vycy9hZGR5by9wcm9qZWN0cy9zcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzIgor
ICAgIF0KKyAgXSwKKyAgIl9mcm9tIjogInRvZG9tdmMtYXBwLWNzc0A+PTEuMC4xIDwyLjAuMCIs
CisgICJfaWQiOiAidG9kb212Yy1hcHAtY3NzQDEuMC40IiwKKyAgIl9pbkNhY2hlIjogdHJ1ZSwK
KyAgIl9sb2NhdGlvbiI6ICIvdG9kb212Yy1hcHAtY3NzIiwKKyAgIl9ub2RlVmVyc2lvbiI6ICIw
LjEyLjAiLAorICAiX25wbVVzZXIiOiB7CisgICAgIm5hbWUiOiAic2luZHJlc29yaHVzIiwKKyAg
ICAiZW1haWwiOiAic2luZHJlc29yaHVzQGdtYWlsLmNvbSIKKyAgfSwKKyAgIl9ucG1WZXJzaW9u
IjogIjIuNS4xIiwKKyAgIl9waGFudG9tQ2hpbGRyZW4iOiB7fSwKKyAgIl9yZXF1ZXN0ZWQiOiB7
CisgICAgInJhdyI6ICJ0b2RvbXZjLWFwcC1jc3NAXjEuMC4xIiwKKyAgICAic2NvcGUiOiBudWxs
LAorICAgICJlc2NhcGVkTmFtZSI6ICJ0b2RvbXZjLWFwcC1jc3MiLAorICAgICJuYW1lIjogInRv
ZG9tdmMtYXBwLWNzcyIsCisgICAgInJhd1NwZWMiOiAiXjEuMC4xIiwKKyAgICAic3BlYyI6ICI+
PTEuMC4xIDwyLjAuMCIsCisgICAgInR5cGUiOiAicmFuZ2UiCisgIH0sCisgICJfcmVxdWlyZWRC
eSI6IFsKKyAgICAiLyIKKyAgXSwKKyAgIl9yZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5w
bWpzLm9yZy90b2RvbXZjLWFwcC1jc3MvLS90b2RvbXZjLWFwcC1jc3MtMS4wLjQudGd6IiwKKyAg
Il9zaGFzdW0iOiAiZDI1MjkyNzlhNmRhNWJlZmIwNmI1NWMwYzMyNGM1ZmNmZDk0ZDY1NiIsCisg
ICJfc2hyaW5rd3JhcCI6IG51bGwsCisgICJfc3BlYyI6ICJ0b2RvbXZjLWFwcC1jc3NAXjEuMC4x
IiwKKyAgIl93aGVyZSI6ICIvVXNlcnMvYWRkeW8vcHJvamVjdHMvc3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcyIsCisgICJhdXRob3Ii
OiB7CisgICAgIm5hbWUiOiAiU2luZHJlIFNvcmh1cyIsCisgICAgImVtYWlsIjogInNpbmRyZXNv
cmh1c0BnbWFpbC5jb20iLAorICAgICJ1cmwiOiAic2luZHJlc29yaHVzLmNvbSIKKyAgfSwKKyAg
ImJ1Z3MiOiB7CisgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vdGFzdGVqcy90b2RvbXZj
LWFwcC1jc3MvaXNzdWVzIgorICB9LAorICAiZGVwZW5kZW5jaWVzIjoge30sCisgICJkZXNjcmlw
dGlvbiI6ICJDU1MgZm9yIFRvZG9NVkMgYXBwcyIsCisgICJkZXZEZXBlbmRlbmNpZXMiOiB7fSwK
KyAgImRpcmVjdG9yaWVzIjoge30sCisgICJkaXN0IjogeworICAgICJzaGFzdW0iOiAiZDI1Mjky
NzlhNmRhNWJlZmIwNmI1NWMwYzMyNGM1ZmNmZDk0ZDY1NiIsCisgICAgInRhcmJhbGwiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdG9kb212Yy1hcHAtY3NzLy0vdG9kb212Yy1hcHAtY3Nz
LTEuMC40LnRneiIKKyAgfSwKKyAgImZpbGVzIjogWworICAgICJpbmRleC5jc3MiCisgIF0sCisg
ICJnaXRIZWFkIjogIjFlNGUzODg4NGEzNTE5M2VhZjE4MDhhNWJhNDQ0MjE4MzI4NjcxODQiLAor
ICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Rhc3RlanMvdG9kb212Yy1hcHAtY3Nz
IiwKKyAgImtleXdvcmRzIjogWworICAgICJ0b2RvbXZjIiwKKyAgICAidGFzdGVqcyIsCisgICAg
ImFwcCIsCisgICAgInRvZG8iLAorICAgICJ0ZW1wbGF0ZSIsCisgICAgImNzcyIsCisgICAgInN0
eWxlIiwKKyAgICAic3R5bGVzaGVldCIKKyAgXSwKKyAgImxpY2Vuc2UiOiAiQ0MtQlktNC4wIiwK
KyAgIm1haW50YWluZXJzIjogWworICAgIHsKKyAgICAgICJuYW1lIjogInNpbmRyZXNvcmh1cyIs
CisgICAgICAiZW1haWwiOiAic2luZHJlc29yaHVzQGdtYWlsLmNvbSIKKyAgICB9LAorICAgIHsK
KyAgICAgICJuYW1lIjogImFkZHlvc21hbmkiLAorICAgICAgImVtYWlsIjogImFkZHlvc21hbmlA
Z21haWwuY29tIgorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAicGFzc3kiLAorICAgICAg
ImVtYWlsIjogInBoYXJ0aWdAcmRyZWkubmV0IgorICAgIH0sCisgICAgeworICAgICAgIm5hbWUi
OiAic3RlcGhlbnBsdXNwbHVzIiwKKyAgICAgICJlbWFpbCI6ICJzYXdjaHVrQGdtYWlsLmNvbSIK
KyAgICB9CisgIF0sCisgICJuYW1lIjogInRvZG9tdmMtYXBwLWNzcyIsCisgICJvcHRpb25hbERl
cGVuZGVuY2llcyI6IHt9LAorICAicmVhZG1lIjogIkVSUk9SOiBObyBSRUFETUUgZGF0YSBmb3Vu
ZCEiLAorICAicmVwb3NpdG9yeSI6IHsKKyAgICAidHlwZSI6ICJnaXQiLAorICAgICJ1cmwiOiAi
Z2l0K2h0dHBzOi8vZ2l0aHViLmNvbS90YXN0ZWpzL3RvZG9tdmMtYXBwLWNzcy5naXQiCisgIH0s
CisgICJzY3JpcHRzIjoge30sCisgICJ2ZXJzaW9uIjogIjEuMC40IgorfQpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvYW5ndWxhcmpzL25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvcmVhZG1l
Lm1kIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3Mv
cmVhZG1lLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkZGJlYmYwMjRjMDRhZWI2MDIwY2FmMTMxYTJlZDAzMTg5
MDgwYTUKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvbm9kZV9tb2R1
bGVzL3RvZG9tdmMtYXBwLWNzcy9yZWFkbWUubWQKQEAgLTAsMCArMSwyOCBAQAorIyB0b2RvbXZj
LWFwcC1jc3MKKworPiBDU1MgZm9yIFRvZG9NVkMgYXBwcworCishW10oc2NyZWVuc2hvdC5wbmcp
CisKKworIyMgSW5zdGFsbAorCisKK2BgYAorJCBucG0gaW5zdGFsbCAtLXNhdmUgdG9kb212Yy1h
cHAtY3NzCitgYGAKKworCisjIyBHZXR0aW5nIHN0YXJ0ZWQKKworYGBgaHRtbAorPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiBocmVmPSJub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL2luZGV4LmNz
cyI+CitgYGAKKworU2VlIHRoZSBbVG9kb01WQyBhcHAgdGVtcGxhdGVdKGh0dHBzOi8vZ2l0aHVi
LmNvbS90YXN0ZWpzL3RvZG9tdmMtYXBwLXRlbXBsYXRlKS4KKworCisKKyMjIExpY2Vuc2UKKwor
PGEgcmVsPSJsaWNlbnNlIiBocmVmPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNl
cy9ieS80LjAvZGVlZC5lbl9VUyI+PGltZyBhbHQ9IkNyZWF0aXZlIENvbW1vbnMgTGljZW5zZSIg
c3R5bGU9ImJvcmRlci13aWR0aDowIiBzcmM9Imh0dHA6Ly9pLmNyZWF0aXZlY29tbW9ucy5vcmcv
bC9ieS80LjAvODB4MTUucG5nIiAvPjwvYT48YnIgLz5UaGlzIDxzcGFuIHhtbG5zOmRjdD0iaHR0
cDovL3B1cmwub3JnL2RjL3Rlcm1zLyIgaHJlZj0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBl
L0ludGVyYWN0aXZlUmVzb3VyY2UiIHJlbD0iZGN0OnR5cGUiPndvcms8L3NwYW4+IGJ5IDxhIHht
bG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIGhyZWY9Imh0dHA6Ly9zaW5k
cmVzb3JodXMuY29tIiBwcm9wZXJ0eT0iY2M6YXR0cmlidXRpb25OYW1lIiByZWw9ImNjOmF0dHJp
YnV0aW9uVVJMIj5TaW5kcmUgU29yaHVzPC9hPiBpcyBsaWNlbnNlZCB1bmRlciBhIDxhIHJlbD0i
bGljZW5zZSIgaHJlZj0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvNC4w
L2RlZWQuZW5fVVMiPkNyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24gNC4wIEludGVybmF0aW9u
YWwgTGljZW5zZTwvYT4uCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvbm9kZV9t
b2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL25v
ZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDI1ZDNjODRh
YzZjNmFlZjI2Yjk2ODNhMmJjMTBjNjFmOTYwYzhmCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvYW5ndWxhcmpzL25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzcwpAQCAt
MCwwICsxLDE0MSBAQAoraHIgeworICAgIG1hcmdpbjogMjBweCAwOworICAgIGJvcmRlcjogMDsK
KyAgICBib3JkZXItdG9wOiAxcHggZGFzaGVkICNjNWM1YzU7CisgICAgYm9yZGVyLWJvdHRvbTog
MXB4IGRhc2hlZCAjZjdmN2Y3OworfQorCisubGVhcm4gYSB7CisgICAgZm9udC13ZWlnaHQ6IG5v
cm1hbDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgY29sb3I6ICNiODNmNDU7Cit9
CisKKy5sZWFybiBhOmhvdmVyIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAg
ICBjb2xvcjogIzc4N2U3ZTsKK30KKworLmxlYXJuIGgzLAorLmxlYXJuIGg0LAorLmxlYXJuIGg1
IHsKKyAgICBtYXJnaW46IDEwcHggMDsKKyAgICBmb250LXdlaWdodDogNTAwOworICAgIGxpbmUt
aGVpZ2h0OiAxLjI7CisgICAgY29sb3I6ICMwMDA7Cit9CisKKy5sZWFybiBoMyB7CisgICAgZm9u
dC1zaXplOiAyNHB4OworfQorCisubGVhcm4gaDQgeworICAgIGZvbnQtc2l6ZTogMThweDsKK30K
KworLmxlYXJuIGg1IHsKKyAgICBtYXJnaW4tYm90dG9tOiAwOworICAgIGZvbnQtc2l6ZTogMTRw
eDsKK30KKworLmxlYXJuIHVsIHsKKyAgICBwYWRkaW5nOiAwOworICAgIG1hcmdpbjogMCAwIDMw
cHggMjVweDsKK30KKworLmxlYXJuIGxpIHsKKyAgICBsaW5lLWhlaWdodDogMjBweDsKK30KKwor
LmxlYXJuIHAgeworICAgIGZvbnQtc2l6ZTogMTVweDsKKyAgICBmb250LXdlaWdodDogMzAwOwor
ICAgIGxpbmUtaGVpZ2h0OiAxLjM7CisgICAgbWFyZ2luLXRvcDogMDsKKyAgICBtYXJnaW4tYm90
dG9tOiAwOworfQorCisjaXNzdWUtY291bnQgeworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKy5x
dW90ZSB7CisgICAgYm9yZGVyOiBub25lOworICAgIG1hcmdpbjogMjBweCAwIDYwcHggMDsKK30K
KworLnF1b3RlIHAgeworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworLnF1b3RlIHA6YmVm
b3JlIHsKKyAgICBjb250ZW50OiAn4oCcJzsKKyAgICBmb250LXNpemU6IDUwcHg7CisgICAgb3Bh
Y2l0eTogLjE1OworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IC0yMHB4OworICAg
IGxlZnQ6IDNweDsKK30KKworLnF1b3RlIHA6YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICfigJ0nOwor
ICAgIGZvbnQtc2l6ZTogNTBweDsKKyAgICBvcGFjaXR5OiAuMTU7CisgICAgcG9zaXRpb246IGFi
c29sdXRlOworICAgIGJvdHRvbTogLTQycHg7CisgICAgcmlnaHQ6IDNweDsKK30KKworLnF1b3Rl
IGZvb3RlciB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIGJvdHRvbTogLTQwcHg7Cisg
ICAgcmlnaHQ6IDA7Cit9CisKKy5xdW90ZSBmb290ZXIgaW1nIHsKKyAgICBib3JkZXItcmFkaXVz
OiAzcHg7Cit9CisKKy5xdW90ZSBmb290ZXIgYSB7CisgICAgbWFyZ2luLWxlZnQ6IDVweDsKKyAg
ICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworfQorCisuc3BlZWNoLWJ1YmJsZSB7CisgICAgcG9z
aXRpb246IHJlbGF0aXZlOworICAgIHBhZGRpbmc6IDEwcHg7CisgICAgYmFja2dyb3VuZDogcmdi
YSgwLCAwLCAwLCAuMDQpOworICAgIGJvcmRlci1yYWRpdXM6IDVweDsKK30KKworLnNwZWVjaC1i
dWJibGU6YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICcnOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
KyAgICB0b3A6IDEwMCU7CisgICAgcmlnaHQ6IDMwcHg7CisgICAgYm9yZGVyOiAxM3B4IHNvbGlk
IHRyYW5zcGFyZW50OworICAgIGJvcmRlci10b3AtY29sb3I6IHJnYmEoMCwgMCwgMCwgLjA0KTsK
K30KKworLmxlYXJuLWJhciA+IC5sZWFybiB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAg
IHdpZHRoOiAyNzJweDsKKyAgICB0b3A6IDhweDsKKyAgICBsZWZ0OiAtMzAwcHg7CisgICAgcGFk
ZGluZzogMTBweDsKKyAgICBib3JkZXItcmFkaXVzOiA1cHg7CisgICAgYmFja2dyb3VuZC1jb2xv
cjogcmdiYSgyNTUsIDI1NSwgMjU1LCAuNik7CisgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogbGVm
dDsKKyAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiA1MDBtczsKK30KKworQG1lZGlhIChtaW4td2lk
dGg6IDg5OXB4KSB7CisgICAgLmxlYXJuLWJhciB7CisgICAgICAgIHdpZHRoOiBhdXRvOworICAg
ICAgICBwYWRkaW5nLWxlZnQ6IDMwMHB4OworICAgIH0KKworICAgIC5sZWFybi1iYXIgPiAubGVh
cm4geworICAgICAgICBsZWZ0OiA4cHg7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvYW5ndWxhcmpzL25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmpzIGIvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvYW5ndWxhcmpzL25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjgxZTAwNmJjNTAyZGRjNGM3NGY0N2JkMTNhODM5MjI3N2Y4MzBkYjgKLS0tIC9kZXYv
bnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29t
bW9uL2Jhc2UuanMKQEAgLTAsMCArMSwyNDkgQEAKKy8qIGdsb2JhbCBfICovCisoZnVuY3Rpb24g
KCkgeworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi8K
KyAgICAvLyBVbmRlcnNjb3JlJ3MgVGVtcGxhdGUgTW9kdWxlCisgICAgLy8gQ291cnRlc3kgb2Yg
dW5kZXJzY29yZWpzLm9yZworICAgIHZhciBfID0gKGZ1bmN0aW9uIChfKSB7CisgICAgICAgIF8u
ZGVmYXVsdHMgPSBmdW5jdGlvbiAob2JqZWN0KSB7CisgICAgICAgICAgICBpZiAoIW9iamVjdCkg
eworICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBmb3IgKHZhciBhcmdzSW5kZXggPSAxLCBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0
aDsgYXJnc0luZGV4IDwgYXJnc0xlbmd0aDsgYXJnc0luZGV4KyspIHsKKyAgICAgICAgICAgICAg
ICB2YXIgaXRlcmFibGUgPSBhcmd1bWVudHNbYXJnc0luZGV4XTsKKyAgICAgICAgICAgICAgICBp
ZiAoaXRlcmFibGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGl0ZXJh
YmxlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0W2tleV0gPT0gbnVsbCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFtrZXldID0gaXRlcmFibGVba2V5
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBvYmplY3Q7
CisgICAgICAgIH0KKworICAgICAgICAvLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJC
LXN0eWxlIHRlbXBsYXRlIGRlbGltaXRlcnMsIGNoYW5nZSB0aGUKKyAgICAgICAgLy8gZm9sbG93
aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLgorICAg
ICAgICBfLnRlbXBsYXRlU2V0dGluZ3MgPSB7CisgICAgICAgICAgICBldmFsdWF0ZSAgICA6IC88
JShbXHNcU10rPyklPi9nLAorICAgICAgICAgICAgaW50ZXJwb2xhdGUgOiAvPCU9KFtcc1xTXSs/
KSU+L2csCisgICAgICAgICAgICBlc2NhcGUgICAgICA6IC88JS0oW1xzXFNdKz8pJT4vZworICAg
ICAgICB9OworCisgICAgICAgIC8vIFdoZW4gY3VzdG9taXppbmcgYHRlbXBsYXRlU2V0dGluZ3Ng
LCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBkZWZpbmUgYW4KKyAgICAgICAgLy8gaW50ZXJwb2xhdGlv
biwgZXZhbHVhdGlvbiBvciBlc2NhcGluZyByZWdleCwgd2UgbmVlZCBvbmUgdGhhdCBpcworICAg
ICAgICAvLyBndWFyYW50ZWVkIG5vdCB0byBtYXRjaC4KKyAgICAgICAgdmFyIG5vTWF0Y2ggPSAv
KC4pXi87CisKKyAgICAgICAgLy8gQ2VydGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgZXNjYXBl
ZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1dCBpbnRvIGEKKyAgICAgICAgLy8gc3RyaW5nIGxpdGVy
YWwuCisgICAgICAgIHZhciBlc2NhcGVzID0geworICAgICAgICAgICAgIiciOiAgICAgICInIiwK
KyAgICAgICAgICAgICdcXCc6ICAgICAnXFwnLAorICAgICAgICAgICAgJ1xyJzogICAgICdyJywK
KyAgICAgICAgICAgICdcbic6ICAgICAnbicsCisgICAgICAgICAgICAnXHQnOiAgICAgJ3QnLAor
ICAgICAgICAgICAgJ1x1MjAyOCc6ICd1MjAyOCcsCisgICAgICAgICAgICAnXHUyMDI5JzogJ3Uy
MDI5JworICAgICAgICB9OworCisgICAgICAgIHZhciBlc2NhcGVyID0gL1xcfCd8XHJ8XG58XHR8
XHUyMDI4fFx1MjAyOS9nOworCisgICAgICAgIC8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGlu
Zywgc2ltaWxhciB0byBKb2huIFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIC8vIFVu
ZGVyc2NvcmUgdGVtcGxhdGluZyBoYW5kbGVzIGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBwcmVzZXJ2
ZXMgd2hpdGVzcGFjZSwKKyAgICAgICAgLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3
aXRoaW4gaW50ZXJwb2xhdGVkIGNvZGUuCisgICAgICAgIF8udGVtcGxhdGUgPSBmdW5jdGlvbih0
ZXh0LCBkYXRhLCBzZXR0aW5ncykgeworICAgICAgICAgICAgdmFyIHJlbmRlcjsKKyAgICAgICAg
ICAgIHNldHRpbmdzID0gXy5kZWZhdWx0cyh7fSwgc2V0dGluZ3MsIF8udGVtcGxhdGVTZXR0aW5n
cyk7CisKKyAgICAgICAgICAgIC8vIENvbWJpbmUgZGVsaW1pdGVycyBpbnRvIG9uZSByZWd1bGFy
IGV4cHJlc3Npb24gdmlhIGFsdGVybmF0aW9uLgorICAgICAgICAgICAgdmFyIG1hdGNoZXIgPSBu
ZXcgUmVnRXhwKFsKKyAgICAgICAgICAgICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gp
LnNvdXJjZSwKKyAgICAgICAgICAgICAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRj
aCkuc291cmNlLAorICAgICAgICAgICAgICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNo
KS5zb3VyY2UKKyAgICAgICAgICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTsKKworICAgICAg
ICAgICAgLy8gQ29tcGlsZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0
ZXJhbHMgYXBwcm9wcmlhdGVseS4KKyAgICAgICAgICAgIHZhciBpbmRleCA9IDA7CisgICAgICAg
ICAgICB2YXIgc291cmNlID0gIl9fcCs9JyI7CisgICAgICAgICAgICB0ZXh0LnJlcGxhY2UobWF0
Y2hlciwgZnVuY3Rpb24obWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZz
ZXQpIHsKKyAgICAgICAgICAgICAgICBzb3VyY2UgKz0gdGV4dC5zbGljZShpbmRleCwgb2Zmc2V0
KQorICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShlc2NhcGVyLCBmdW5jdGlvbihtYXRjaCkg
eyByZXR1cm4gJ1xcJyArIGVzY2FwZXNbbWF0Y2hdOyB9KTsKKworICAgICAgICAgICAgICAgIGlm
IChlc2NhcGUpIHsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9ICInK1xuKChfX3Q9KCIg
KyBlc2NhcGUgKyAiKSk9PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXG4nIjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGludGVycG9sYXRlKSB7CisgICAgICAgICAgICAg
ICAgICAgIHNvdXJjZSArPSAiJytcbigoX190PSgiICsgaW50ZXJwb2xhdGUgKyAiKSk9PW51bGw/
Jyc6X190KStcbiciOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZXZh
bHVhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9ICInO1xuIiArIGV2YWx1YXRl
ICsgIlxuX19wKz0nIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5kZXgg
PSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBzb3VyY2UgKz0gIic7XG4iOworCisgICAgICAg
ICAgICAvLyBJZiBhIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVz
IGluIGxvY2FsIHNjb3BlLgorICAgICAgICAgICAgaWYgKCFzZXR0aW5ncy52YXJpYWJsZSkgc291
cmNlID0gJ3dpdGgob2JqfHx7fSl7XG4nICsgc291cmNlICsgJ31cbic7CisKKyAgICAgICAgICAg
IHNvdXJjZSA9ICJ2YXIgX190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4sIiArCisg
ICAgICAgICAgICAgICAgInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMs
JycpO307XG4iICsKKyAgICAgICAgICAgICAgICBzb3VyY2UgKyAicmV0dXJuIF9fcDtcbiI7CisK
KyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgcmVuZGVyID0gbmV3IEZ1bmN0aW9u
KHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7CisgICAgICAgICAgICB9
IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgZS5zb3VyY2UgPSBzb3VyY2U7CisgICAgICAg
ICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGRhdGEp
IHJldHVybiByZW5kZXIoZGF0YSwgXyk7CisgICAgICAgICAgICB2YXIgdGVtcGxhdGUgPSBmdW5j
dGlvbihkYXRhKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlci5jYWxsKHRoaXMsIGRh
dGEsIF8pOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgLy8gUHJvdmlkZSB0aGUgY29t
cGlsZWQgZnVuY3Rpb24gc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9u
LgorICAgICAgICAgICAgdGVtcGxhdGUuc291cmNlID0gJ2Z1bmN0aW9uKCcgKyAoc2V0dGluZ3Mu
dmFyaWFibGUgfHwgJ29iaicpICsgJyl7XG4nICsgc291cmNlICsgJ30nOworCisgICAgICAgICAg
ICByZXR1cm4gdGVtcGxhdGU7CisgICAgICAgIH07CisKKyAgICAgICAgcmV0dXJuIF87CisgICAg
fSkoe30pOworCisgICAgaWYgKGxvY2F0aW9uLmhvc3RuYW1lID09PSAndG9kb212Yy5jb20nKSB7
CisgICAgICAgIChmdW5jdGlvbihpLHMsbyxnLHIsYSxtKXtpWydHb29nbGVBbmFseXRpY3NPYmpl
Y3QnXT1yO2lbcl09aVtyXXx8ZnVuY3Rpb24oKXsKKyAgICAgICAgKGlbcl0ucT1pW3JdLnF8fFtd
KS5wdXNoKGFyZ3VtZW50cyl9LGlbcl0ubD0xKm5ldyBEYXRlKCk7YT1zLmNyZWF0ZUVsZW1lbnQo
byksCisgICAgICAgIG09cy5nZXRFbGVtZW50c0J5VGFnTmFtZShvKVswXTthLmFzeW5jPTE7YS5z
cmM9ZzttLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbSkKKyAgICAgICAgfSkod2luZG93LGRv
Y3VtZW50LCdzY3JpcHQnLCdodHRwczovL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9hbmFseXRp
Y3MuanMnLCdnYScpOworICAgICAgICBnYSgnY3JlYXRlJywgJ1VBLTMxMDgxMDYyLTEnLCAnYXV0
bycpOworICAgICAgICBnYSgnc2VuZCcsICdwYWdldmlldycpOworICAgIH0KKyAgICAvKiBqc2hp
bnQgaWdub3JlOmVuZCAqLworCisgICAgZnVuY3Rpb24gcmVkaXJlY3QoKSB7CisgICAgICAgIGlm
IChsb2NhdGlvbi5ob3N0bmFtZSA9PT0gJ3Rhc3RlanMuZ2l0aHViLmlvJykgeworICAgICAgICAg
ICAgbG9jYXRpb24uaHJlZiA9IGxvY2F0aW9uLmhyZWYucmVwbGFjZSgndGFzdGVqcy5naXRodWIu
aW8vdG9kb212YycsICd0b2RvbXZjLmNvbScpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVu
Y3Rpb24gZmluZFJvb3QoKSB7CisgICAgICAgIHZhciBiYXNlID0gbG9jYXRpb24uaHJlZi5pbmRl
eE9mKCdleGFtcGxlcy8nKTsKKyAgICAgICAgcmV0dXJuIGxvY2F0aW9uLmhyZWYuc3Vic3RyKDAs
IGJhc2UpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGdldEZpbGUoZmlsZSwgY2FsbGJhY2spIHsK
KyAgICAgICAgaWYgKCFsb2NhdGlvbi5ob3N0KSB7CisgICAgICAgICAgICByZXR1cm4gY29uc29s
ZS5pbmZvKCdNaXNzIHRoZSBpbmZvIGJhcj8gUnVuIFRvZG9NVkMgZnJvbSBhIHNlcnZlciB0byBh
dm9pZCBhIGNyb3NzLW9yaWdpbiBlcnJvci4nKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciB4
aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKworICAgICAgICB4aHIub3BlbignR0VUJywgZmlu
ZFJvb3QoKSArIGZpbGUsIHRydWUpOworICAgICAgICB4aHIuc2VuZCgpOworCisgICAgICAgIHho
ci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0g
MjAwICYmIGNhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2soeGhyLnJlc3BvbnNl
VGV4dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24g
TGVhcm4obGVhcm5KU09OLCBjb25maWcpIHsKKyAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9m
IExlYXJuKSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBMZWFybihsZWFybkpTT04sIGNvbmZp
Zyk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgdGVtcGxhdGUsIGZyYW1ld29yazsKKworICAg
ICAgICBpZiAodHlwZW9mIGxlYXJuSlNPTiAhPT0gJ29iamVjdCcpIHsKKyAgICAgICAgICAgIHRy
eSB7CisgICAgICAgICAgICAgICAgbGVhcm5KU09OID0gSlNPTi5wYXJzZShsZWFybkpTT04pOwor
ICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25maWcpIHsKKyAgICAgICAgICAg
IHRlbXBsYXRlID0gY29uZmlnLnRlbXBsYXRlOworICAgICAgICAgICAgZnJhbWV3b3JrID0gY29u
ZmlnLmZyYW1ld29yazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdGVtcGxhdGUgJiYgbGVh
cm5KU09OLnRlbXBsYXRlcykgeworICAgICAgICAgICAgdGVtcGxhdGUgPSBsZWFybkpTT04udGVt
cGxhdGVzLnRvZG9tdmM7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWZyYW1ld29yayAmJiBk
b2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1mcmFtZXdvcmtdJykpIHsKKyAgICAgICAgICAg
IGZyYW1ld29yayA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWZyYW1ld29ya10nKS5k
YXRhc2V0LmZyYW1ld29yazsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMudGVtcGxhdGUgPSB0
ZW1wbGF0ZTsKKworICAgICAgICBpZiAobGVhcm5KU09OLmJhY2tlbmQpIHsKKyAgICAgICAgICAg
IHRoaXMuZnJhbWV3b3JrSlNPTiA9IGxlYXJuSlNPTi5iYWNrZW5kOworICAgICAgICAgICAgdGhp
cy5mcmFtZXdvcmtKU09OLmlzc3VlTGFiZWwgPSBmcmFtZXdvcms7CisgICAgICAgICAgICB0aGlz
LmFwcGVuZCh7CisgICAgICAgICAgICAgICAgYmFja2VuZDogdHJ1ZQorICAgICAgICAgICAgfSk7
CisgICAgICAgIH0gZWxzZSBpZiAobGVhcm5KU09OW2ZyYW1ld29ya10pIHsKKyAgICAgICAgICAg
IHRoaXMuZnJhbWV3b3JrSlNPTiA9IGxlYXJuSlNPTltmcmFtZXdvcmtdOworICAgICAgICAgICAg
dGhpcy5mcmFtZXdvcmtKU09OLmlzc3VlTGFiZWwgPSBmcmFtZXdvcms7CisgICAgICAgICAgICB0
aGlzLmFwcGVuZCgpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5mZXRjaElzc3VlQ291bnQo
KTsKKyAgICB9CisKKyAgICBMZWFybi5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKG9wdHMp
IHsKKyAgICAgICAgdmFyIGFzaWRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYXNpZGUnKTsK
KyAgICAgICAgYXNpZGUuaW5uZXJIVE1MID0gXy50ZW1wbGF0ZSh0aGlzLnRlbXBsYXRlLCB0aGlz
LmZyYW1ld29ya0pTT04pOworICAgICAgICBhc2lkZS5jbGFzc05hbWUgPSAnbGVhcm4nOworCisg
ICAgICAgIGlmIChvcHRzICYmIG9wdHMuYmFja2VuZCkgeworICAgICAgICAgICAgLy8gUmVtb3Zl
IGRlbW8gbGluaworICAgICAgICAgICAgdmFyIHNvdXJjZUxpbmtzID0gYXNpZGUucXVlcnlTZWxl
Y3RvcignLnNvdXJjZS1saW5rcycpOworICAgICAgICAgICAgdmFyIGhlYWRpbmcgPSBzb3VyY2VM
aW5rcy5maXJzdEVsZW1lbnRDaGlsZDsKKyAgICAgICAgICAgIHZhciBzb3VyY2VMaW5rID0gc291
cmNlTGlua3MubGFzdEVsZW1lbnRDaGlsZDsKKyAgICAgICAgICAgIC8vIENvcnJlY3QgbGluayBw
YXRoCisgICAgICAgICAgICB2YXIgaHJlZiA9IHNvdXJjZUxpbmsuZ2V0QXR0cmlidXRlKCdocmVm
Jyk7CisgICAgICAgICAgICBzb3VyY2VMaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYuc3Vi
c3RyKGhyZWYubGFzdEluZGV4T2YoJ2h0dHAnKSkpOworICAgICAgICAgICAgc291cmNlTGlua3Mu
aW5uZXJIVE1MID0gaGVhZGluZy5vdXRlckhUTUwgKyBzb3VyY2VMaW5rLm91dGVySFRNTDsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIExvY2FsaXplIGRlbW8gbGlua3MKKyAgICAg
ICAgICAgIHZhciBkZW1vTGlua3MgPSBhc2lkZS5xdWVyeVNlbGVjdG9yQWxsKCcuZGVtby1saW5r
Jyk7CisgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGRlbW9MaW5rcywg
ZnVuY3Rpb24gKGRlbW9MaW5rKSB7CisgICAgICAgICAgICAgICAgaWYgKGRlbW9MaW5rLmdldEF0
dHJpYnV0ZSgnaHJlZicpLnN1YnN0cigwLCA0KSAhPT0gJ2h0dHAnKSB7CisgICAgICAgICAgICAg
ICAgICAgIGRlbW9MaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIGZpbmRSb290KCkgKyBkZW1vTGlu
ay5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fSk7CisgICAgICAgIH0KKworICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTmFtZSA9IChkb2N1
bWVudC5ib2R5LmNsYXNzTmFtZSArICcgbGVhcm4tYmFyJykudHJpbSgpOworICAgICAgICBkb2N1
bWVudC5ib2R5Lmluc2VydEFkamFjZW50SFRNTCgnYWZ0ZXJCZWdpbicsIGFzaWRlLm91dGVySFRN
TCk7CisgICAgfTsKKworICAgIExlYXJuLnByb3RvdHlwZS5mZXRjaElzc3VlQ291bnQgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHZhciBpc3N1ZUxpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnaXNzdWUtY291bnQtbGluaycpOworICAgICAgICBpZiAoaXNzdWVMaW5rKSB7CisgICAgICAg
ICAgICB2YXIgdXJsID0gaXNzdWVMaW5rLmhyZWYucmVwbGFjZSgnaHR0cHM6Ly9naXRodWIuY29t
JywgJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MnKTsKKyAgICAgICAgICAgIHZhciB4aHIg
PSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmws
IHRydWUpOworICAgICAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAg
ICAgICAgICAgdmFyIHBhcnNlZFJlc3BvbnNlID0gSlNPTi5wYXJzZShlLnRhcmdldC5yZXNwb25z
ZVRleHQpOworICAgICAgICAgICAgICAgIGlmIChwYXJzZWRSZXNwb25zZSBpbnN0YW5jZW9mIEFy
cmF5KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IHBhcnNlZFJlc3BvbnNlLmxl
bmd0aDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ICE9PSAwKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpc3N1ZUxpbmsuaW5uZXJIVE1MID0gJ1RoaXMgYXBwIGhhcyAnICsgY291
bnQgKyAnIG9wZW4gaXNzdWVzJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdpc3N1ZS1jb3VudCcpLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJzsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICB4aHIuc2VuZCgpOworICAgICAgICB9CisgICAgfTsKKworICAgIHJlZGlyZWN0
KCk7CisgICAgZ2V0RmlsZSgnbGVhcm4uanNvbicsIExlYXJuKTsKK30pKCk7CmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9hbmd1bGFyanMvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL3BhY2th
Z2UuanNvbiBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21t
b24vcGFja2FnZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlNmFjY2U1NDY4NGRiMjU2ZDcwN2I0N2VkODg0
NWI4ZmY0YWQzOGIKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvbm9k
ZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL3BhY2thZ2UuanNvbgpAQCAtMCwwICsxLDEwNCBAQAor
eworICAiX2FyZ3MiOiBbCisgICAgWworICAgICAgeworICAgICAgICAicmF3IjogInRvZG9tdmMt
Y29tbW9uQF4xLjAuMCIsCisgICAgICAgICJzY29wZSI6IG51bGwsCisgICAgICAgICJlc2NhcGVk
TmFtZSI6ICJ0b2RvbXZjLWNvbW1vbiIsCisgICAgICAgICJuYW1lIjogInRvZG9tdmMtY29tbW9u
IiwKKyAgICAgICAgInJhd1NwZWMiOiAiXjEuMC4wIiwKKyAgICAgICAgInNwZWMiOiAiPj0xLjAu
MCA8Mi4wLjAiLAorICAgICAgICAidHlwZSI6ICJyYW5nZSIKKyAgICAgIH0sCisgICAgICAiL1Vz
ZXJzL2FkZHlvL3Byb2plY3RzL3NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9hbmd1bGFyanMiCisgICAgXQorICBdLAorICAiX2Zyb20iOiAidG9kb212
Yy1jb21tb25APj0xLjAuMCA8Mi4wLjAiLAorICAiX2lkIjogInRvZG9tdmMtY29tbW9uQDEuMC4z
IiwKKyAgIl9pbkNhY2hlIjogdHJ1ZSwKKyAgIl9sb2NhdGlvbiI6ICIvdG9kb212Yy1jb21tb24i
LAorICAiX25vZGVWZXJzaW9uIjogIjcuMS4wIiwKKyAgIl9ucG1PcGVyYXRpb25hbEludGVybmFs
IjogeworICAgICJob3N0IjogInBhY2thZ2VzLTE4LWVhc3QuaW50ZXJuYWwubnBtanMuY29tIiwK
KyAgICAidG1wIjogInRtcC90b2RvbXZjLWNvbW1vbi0xLjAuMy50Z3pfMTQ3OTI3NjM2MTIyN18w
LjUxMTI0ODgwMTM2OTIyIgorICB9LAorICAiX25wbVVzZXIiOiB7CisgICAgIm5hbWUiOiAic2lu
ZHJlc29yaHVzIiwKKyAgICAiZW1haWwiOiAic2luZHJlc29yaHVzQGdtYWlsLmNvbSIKKyAgfSwK
KyAgIl9ucG1WZXJzaW9uIjogIjMuMTAuOSIsCisgICJfcGhhbnRvbUNoaWxkcmVuIjoge30sCisg
ICJfcmVxdWVzdGVkIjogeworICAgICJyYXciOiAidG9kb212Yy1jb21tb25AXjEuMC4wIiwKKyAg
ICAic2NvcGUiOiBudWxsLAorICAgICJlc2NhcGVkTmFtZSI6ICJ0b2RvbXZjLWNvbW1vbiIsCisg
ICAgIm5hbWUiOiAidG9kb212Yy1jb21tb24iLAorICAgICJyYXdTcGVjIjogIl4xLjAuMCIsCisg
ICAgInNwZWMiOiAiPj0xLjAuMCA8Mi4wLjAiLAorICAgICJ0eXBlIjogInJhbmdlIgorICB9LAor
ICAiX3JlcXVpcmVkQnkiOiBbCisgICAgIi8iCisgIF0sCisgICJfcmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdG9kb212Yy1jb21tb24vLS90b2RvbXZjLWNvbW1vbi0xLjAu
My50Z3oiLAorICAiX3NoYXN1bSI6ICJjYmExODY4MTA5Y2FhNDAxYjkwOGViZjc3Nzk0Y2MxMDE0
Yjc0ODczIiwKKyAgIl9zaHJpbmt3cmFwIjogbnVsbCwKKyAgIl9zcGVjIjogInRvZG9tdmMtY29t
bW9uQF4xLjAuMCIsCisgICJfd2hlcmUiOiAiL1VzZXJzL2FkZHlvL3Byb2plY3RzL3NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMiLAor
ICAiYXV0aG9yIjogeworICAgICJuYW1lIjogIlRhc3RlSlMiCisgIH0sCisgICJidWdzIjogewor
ICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Rhc3RlanMvdG9kb212Yy1jb21tb24vaXNz
dWVzIgorICB9LAorICAiZGVwZW5kZW5jaWVzIjoge30sCisgICJkZXNjcmlwdGlvbiI6ICJDb21t
b24gVG9kb01WQyB1dGlsaXRpZXMgdXNlZCBieSBvdXIgYXBwcyIsCisgICJkZXZEZXBlbmRlbmNp
ZXMiOiB7fSwKKyAgImRpcmVjdG9yaWVzIjoge30sCisgICJkaXN0IjogeworICAgICJzaGFzdW0i
OiAiY2JhMTg2ODEwOWNhYTQwMWI5MDhlYmY3Nzc5NGNjMTAxNGI3NDg3MyIsCisgICAgInRhcmJh
bGwiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdG9kb212Yy1jb21tb24vLS90b2RvbXZj
LWNvbW1vbi0xLjAuMy50Z3oiCisgIH0sCisgICJmaWxlcyI6IFsKKyAgICAiYmFzZS5qcyIsCisg
ICAgImJhc2UuY3NzIgorICBdLAorICAiZ2l0SGVhZCI6ICJlNzQyNWJhZmI5NTYxZDc2NmI3Njk4
NDQ4MTBlMDQ5NjczNGZmZThjIiwKKyAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS90
YXN0ZWpzL3RvZG9tdmMtY29tbW9uI3JlYWRtZSIsCisgICJrZXl3b3JkcyI6IFsKKyAgICAidG9k
b212YyIsCisgICAgInRhc3RlanMiLAorICAgICJ1dGlsIiwKKyAgICAidXRpbGl0aWVzIgorICBd
LAorICAibGljZW5zZSI6ICJNSVQiLAorICAibWFpbiI6ICJiYXNlLmpzIiwKKyAgIm1haW50YWlu
ZXJzIjogWworICAgIHsKKyAgICAgICJuYW1lIjogInNpbmRyZXNvcmh1cyIsCisgICAgICAiZW1h
aWwiOiAic2luZHJlc29yaHVzQGdtYWlsLmNvbSIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1l
IjogImFkZHlvc21hbmkiLAorICAgICAgImVtYWlsIjogImFkZHlvc21hbmlAZ21haWwuY29tIgor
ICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAicGFzc3kiLAorICAgICAgImVtYWlsIjogInBo
YXJ0aWdAcmRyZWkubmV0IgorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAic3RlcGhlbnBs
dXNwbHVzIiwKKyAgICAgICJlbWFpbCI6ICJzYXdjaHVrQGdtYWlsLmNvbSIKKyAgICB9CisgIF0s
CisgICJuYW1lIjogInRvZG9tdmMtY29tbW9uIiwKKyAgIm9wdGlvbmFsRGVwZW5kZW5jaWVzIjog
e30sCisgICJyZWFkbWUiOiAiRVJST1I6IE5vIFJFQURNRSBkYXRhIGZvdW5kISIsCisgICJyZXBv
c2l0b3J5IjogeworICAgICJ0eXBlIjogImdpdCIsCisgICAgInVybCI6ICJnaXQraHR0cHM6Ly9n
aXRodWIuY29tL3Rhc3RlanMvdG9kb212Yy1jb21tb24uZ2l0IgorICB9LAorICAic2NyaXB0cyI6
IHt9LAorICAic3R5bGUiOiAiYmFzZS5jc3MiLAorICAidmVyc2lvbiI6ICIxLjAuMyIKK30KZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21t
b24vcmVhZG1lLm1kIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL25vZGVfbW9kdWxlcy90b2RvbXZj
LWNvbW1vbi9yZWFkbWUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2E1ZGU1MTE4ZjNmYzc3NThlOGRkYzBhNjg2
ODc0OWNlZTljYWY5NQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9u
b2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vcmVhZG1lLm1kCkBAIC0wLDAgKzEsMTUgQEAKKyMg
dG9kb212Yy1jb21tb24KKworPiBDb21tb24gVG9kb01WQyB1dGlsaXRpZXMgdXNlZCBieSBvdXIg
YXBwcworCisKKyMjIEluc3RhbGwKKworYGBgCiskIG5wbSBpbnN0YWxsIC0tc2F2ZSB0b2RvbXZj
LWNvbW1vbgorYGBgCisKKworIyMgTGljZW5zZQorCitNSVQgwqkgW1Rhc3RlSlNdKGh0dHA6Ly90
YXN0ZWpzLmNvbSkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9wYWNrYWdlLmpz
b24gYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvcGFja2FnZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk5Mjhk
ODhiNDZjMTliM2QzMGE5OGIxZmIyODUwOTczMzQ3NzdlMmUKLS0tIC9kZXYvbnVsbAorKysgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9hbmd1bGFyanMvcGFja2FnZS5qc29uCkBAIC0wLDAgKzEsMTcgQEAKK3sKKyAg
InByaXZhdGUiOiB0cnVlLAorICAic2NyaXB0cyI6IHsKKyAgICAidGVzdCI6ICJrYXJtYSBzdGFy
dCB0ZXN0L2NvbmZpZy9rYXJtYS5jb25mLmpzIgorICB9LAorICAiZGVwZW5kZW5jaWVzIjogewor
ICAgICJhbmd1bGFyIjogIl4xLjQuMyIsCisgICAgImFuZ3VsYXItcmVzb3VyY2UiOiAiXjEuNS45
IiwKKyAgICAiYW5ndWxhci1yb3V0ZSI6ICJeMS41LjkiLAorICAgICJ0b2RvbXZjLWFwcC1jc3Mi
OiAiXjEuMC4xIiwKKyAgICAidG9kb212Yy1jb21tb24iOiAiXjEuMC4wIgorICB9LAorICAiZGV2
RGVwZW5kZW5jaWVzIjogeworICAgICJhbmd1bGFyLW1vY2tzIjogIl4xLjMuMTIiLAorICAgICJr
YXJtYSI6ICJeMS4zLjAiCisgIH0KK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJq
cy9yZWFkbWUubWQgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvcmVhZG1lLm1kCmluZGV4IGQ3MzA3
MTMxMTVjMmE4YTg4NjBiOGU4ZGMyN2U4MjVmZjgyOWRmZWQuLjk2YThjYTFiNjkwMjcyYTk1OWM4
Yjc3YWUwMjYxNmFlOTIxOTVmNmEgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy9y
ZWFkbWUubWQKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL3JlYWRtZS5tZApAQCAtMTMsMTQg
KzEzLDE0IEBAIEhlcmUgYXJlIHNvbWUgbGlua3MgeW91IG1heSBmaW5kIGhlbHBmdWw6CiAqIFtU
dXRvcmlhbF0oaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy90dXRvcmlhbCkKICogW0FQSSBSZWZl
cmVuY2VdKGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpKQogKiBbRGV2ZWxvcGVyIEd1aWRl
XShodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2d1aWRlKQotKiBbQXBwbGljYXRpb25zIGJ1aWx0
IHdpdGggQW5ndWxhckpTXShodHRwOi8vYnVpbHR3aXRoLmFuZ3VsYXJqcy5vcmcpCisqIFtBcHBs
aWNhdGlvbnMgYnVpbHQgd2l0aCBBbmd1bGFySlNdKGh0dHBzOi8vd3d3Lm1hZGV3aXRoYW5ndWxh
ci5jb20vKQogKiBbQmxvZ10oaHR0cDovL2Jsb2cuYW5ndWxhcmpzLm9yZykKICogW0ZBUV0oaHR0
cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9taXNjL2ZhcSkKICogW0FuZ3VsYXJKUyBNZWV0dXBzXSho
dHRwOi8vd3d3LnlvdXR1YmUuY29tL2FuZ3VsYXJqcykKIAogQXJ0aWNsZXMgYW5kIGd1aWRlcyBm
cm9tIHRoZSBjb21tdW5pdHk6CiAKLSogW0NvZGUgU2Nob29sIEFuZ3VsYXJKUyBjb3Vyc2VdKGh0
dHA6Ly93d3cuY29kZXNjaG9vbC5jb20vY29kZV90di9hbmd1bGFyanMtcGFydC0xKQorKiBbQ29k
ZSBTY2hvb2wgQW5ndWxhckpTIGNvdXJzZV0oaHR0cHM6Ly93d3cuY29kZXNjaG9vbC5jb20vY291
cnNlcy9zaGFwaW5nLXVwLXdpdGgtYW5ndWxhci1qcykKICogWzUgQXdlc29tZSBBbmd1bGFySlMg
RmVhdHVyZXNdKGh0dHA6Ly9uZXQudHV0c3BsdXMuY29tL3R1dG9yaWFscy9qYXZhc2NyaXB0LWFq
YXgvNS1hd2Vzb21lLWFuZ3VsYXJqcy1mZWF0dXJlcykKICogW1VzaW5nIFllb21hbiB3aXRoIEFu
Z3VsYXJKU10oaHR0cDovL2JyaWFudGZvcmQuY29tL2Jsb2cvYW5ndWxhci15ZW9tYW4uaHRtbCkK
ICogW21lJm5ndWxhciAtIGFuIGludHJvZHVjdGlvbiB0byBNVlddKGh0dHA6Ly9zdGVwaGVucGx1
c3BsdXMuZ2l0aHViLmlvL21lYW5ndWxhcikKQEAgLTM0LDMgKzM0LDEyIEBAIEdldCBoZWxwIGZy
b20gb3RoZXIgQW5ndWxhckpTIHVzZXJzOgogKiBbQW5ndWxhcmpTIG9uIEdvb2dsZSArXShodHRw
czovL3BsdXMuZ29vZ2xlLmNvbS8rQW5ndWxhckpTL3Bvc3RzKQogCiBfSWYgeW91IGhhdmUgb3Ro
ZXIgaGVscGZ1bCBsaW5rcyB0byBzaGFyZSwgb3IgZmluZCBhbnkgb2YgdGhlIGxpbmtzIGFib3Zl
IG5vIGxvbmdlciB3b3JrLCBwbGVhc2UgW2xldCB1cyBrbm93XShodHRwczovL2dpdGh1Yi5jb20v
dGFzdGVqcy90b2RvbXZjL2lzc3VlcykuXworCisjIyBUZXN0c3VpdGUKKworVGhlIGFwcCB1c2Vz
IFtLYXJtYV0oaHR0cDovL2thcm1hLXJ1bm5lci5naXRodWIuaW8vMC4xMi9pbmRleC5odG1sKSB0
byBydW4gdGhlIHRlc3RzIGxvY2F0ZWQgaW4gdGhlIGB0ZXN0L2AgZm9sZGVyLiBUbyBydW4gdGhl
IHRlc3RzOgorCitgYGAKKyQgbnBtIGluc3RhbGwKKyQgbnBtIHRlc3QKK2BgYApkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL3Rlc3QvY29uZmlnL3Rlc3RhY3VsYXIuY29uZi5qcyBi
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy90ZXN0L2NvbmZpZy90ZXN0YWN1bGFyLmNvbmYuanMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiNDBhNzE5N2Q4Y2E5MWNhYmNlOWMyMGIxMTFi
YTRiMGUyNjUwOGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL3Rlc3QvY29uZmlnL3Rlc3RhY3VsYXIuY29uZi5qcwor
KysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLWJhc2VQYXRoID0gJy4uLy4uLyc7Ci0KLWZp
bGVzID0gWwotICBKQVNNSU5FLAotICBKQVNNSU5FX0FEQVBURVIsCi0gICdib3dlcl9jb21wb25l
bnRzL2FuZ3VsYXIvYW5ndWxhci5qcycsCi0gICdib3dlcl9jb21wb25lbnRzL2FuZ3VsYXItbW9j
a3MvYW5ndWxhci1tb2Nrcy5qcycsCi0gICdqcy8qKi8qLmpzJywKLSAgJ3Rlc3QvdW5pdC8qKi8q
LmpzJwotXTsKLQotYXV0b1dhdGNoID0gdHJ1ZTsKLQotYnJvd3NlcnMgPSBbJ0Nocm9tZSddOwpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL3Rlc3QvcGFja2FnZS5qc29uIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvYW5ndWxhcmpzL3Rlc3QvcGFja2FnZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkYzViMmU5YjhmNjM2MmI3MzgwZjM1MGEyZTcwN2EwMjVhZTE1MWUzLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2Fu
Z3VsYXJqcy90ZXN0L3BhY2thZ2UuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAK
LXsKLSAgIm5hbWUiOiAidG9kb212Yy1hbmd1bGFyLXRlc3RzIiwKLSAgImRlc2NyaXB0aW9uIjog
IlVuaXQgdGVzdHMgZm9yIHRoZSBBbmd1bGFySlMgZXhhbXBsZSBvZiBUb2RvTVZDIiwKLSAgImF1
dGhvciI6ICJQYXNjYWwgSGFydGlnIDxwaGFydGlnQHJkcmVpLm5ldD4iLAotICAidmVyc2lvbiI6
ICIxLjAuMCIsCi0gICJkZXZEZXBlbmRlbmNpZXMiOiB7Ci0gICAgImthcm1hIjogIn4wLjguNSIK
LSAgfSwKLSAgInNjcmlwdHMiOiB7Ci0gICAgInRlc3QiOiAia2FybWEgc3RhcnQgY29uZmlnL3Rl
c3RhY3VsYXIuY29uZi5qcyIKLSAgfSwKLSAgImRlcGVuZGVuY2llcyI6IHt9Ci19CmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMvdGVzdC9yZWFkbWUubWQgYi9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9h
bmd1bGFyanMvdGVzdC9yZWFkbWUubWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQw
OWQ0N2NiOGUyZWU2N2Q0ZWI1NzdjYWFlNWM2NWFkZDdjMTM1MzkuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvYW5ndWxhcmpzL3Rlc3Qv
cmVhZG1lLm1kCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1Bbmd1bGFyIFVuaXQgVGVz
dHMKLT09PT09PT09PT09PT09PT09PQotCi1UbyBydW4gdGhlIHRlc3Qgc3VpdGUsIHJ1biB0aGVz
ZSBjb21tYW5kczoKLQotICAgIG5wbSBpbnN0YWxsCi0gICAgbnBtIHRlc3QKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2FuZ3VsYXJqcy90ZXN0L3VuaXQvZGlyZWN0aXZlc1NwZWMuanMgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9hbmd1bGFyanMvdGVzdC91bml0L2RpcmVjdGl2ZXNTcGVjLmpzCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBkYmIzOGU2Yzc4YzE4NzhkZTI0YzhjYWFmY2I3ZWZjZDI1ZDQy
MTkxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL2FuZ3VsYXJqcy90ZXN0L3VuaXQvZGlyZWN0aXZlc1NwZWMuanMKKysrIC9kZXYvbnVs
bApAQCAtMSw1NiArMCwwIEBACi0vKmdsb2JhbCBkZXNjcmliZSwgaXQsIGJlZm9yZUVhY2gsIGlu
amVjdCwgZXhwZWN0LCBhbmd1bGFyKi8KLShmdW5jdGlvbiAoKSB7Ci0gICAgJ3VzZSBzdHJpY3Qn
OwotCi0gICAgYmVmb3JlRWFjaChtb2R1bGUoJ3RvZG9tdmMnKSk7Ci0KLSAgICBkZXNjcmliZSgn
dG9kb0JsdXIgZGlyZWN0aXZlJywgZnVuY3Rpb24gKCkgewotICAgIHZhciBzY29wZSwgY29tcGls
ZTsKLQotICAgIGJlZm9yZUVhY2goaW5qZWN0KGZ1bmN0aW9uICgkcm9vdFNjb3BlLCAkY29tcGls
ZSkgewotICAgIHNjb3BlID0gJHJvb3RTY29wZS4kbmV3KCk7Ci0gICAgY29tcGlsZSA9ICRjb21w
aWxlOwotICAgIH0pKTsKLQotICAgIGl0KCdzaG91bGQgJGFwcGx5IG9uIGJsdXInLCBmdW5jdGlv
biAoKSB7Ci0gICAgdmFyIGVsLAotICAgIG1vY2sgPSB7Ci0gICAgY2FsbGVkOiBmYWxzZSwKLSAg
ICBjYWxsOiBmdW5jdGlvbiAoKSB7IHRoaXMuY2FsbGVkID0gdHJ1ZTsgfQotICAgIH07Ci0KLSAg
ICBzY29wZS5tb2NrID0gbW9jazsKLSAgICBlbCA9IGFuZ3VsYXIuZWxlbWVudCgnPGlucHV0IHRv
ZG8tYmx1cj0ibW9jay5jYWxsKCkiPicpOwotICAgIGNvbXBpbGUoZWwpKHNjb3BlKTsKLQotICAg
IGVsLnRyaWdnZXJIYW5kbGVyKCdibHVyJyk7Ci0gICAgc2NvcGUuJGRpZ2VzdCgpOwotCi0gICAg
ZXhwZWN0KG1vY2suY2FsbGVkKS50b0JlVHJ1dGh5KCk7Ci0gICAgfSk7Ci0gICAgfSk7Ci0KLSAg
ICBkZXNjcmliZSgndG9kb0ZvY3VzIGRpcmVjdGl2ZScsIGZ1bmN0aW9uICgpIHsKLSAgICB2YXIg
c2NvcGUsIGNvbXBpbGUsIGJyb3dzZXI7Ci0KLSAgICBiZWZvcmVFYWNoKGluamVjdChmdW5jdGlv
biAoJHJvb3RTY29wZSwgJGNvbXBpbGUsICRicm93c2VyKSB7Ci0gICAgc2NvcGUgPSAkcm9vdFNj
b3BlLiRuZXcoKTsKLSAgICBjb21waWxlID0gJGNvbXBpbGU7Ci0gICAgYnJvd3NlciA9ICRicm93
c2VyOwotICAgIH0pKTsKLQotICAgIGl0KCdzaG91bGQgZm9jdXMgb24gdHJ1dGh5IGV4cHJlc3Np
b24nLCBmdW5jdGlvbiAoKSB7Ci0gICAgdmFyIGVsID0gYW5ndWxhci5lbGVtZW50KCc8aW5wdXQg
dG9kby1mb2N1cz0iZm9jdXMiPicpOwotICAgIHNjb3BlLmZvY3VzID0gZmFsc2U7Ci0KLSAgICBj
b21waWxlKGVsKShzY29wZSk7Ci0gICAgZXhwZWN0KGJyb3dzZXIuZGVmZXJyZWRGbnMubGVuZ3Ro
KS50b0JlKDApOwotCi0gICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHsKLSAgICBzY29wZS5m
b2N1cyA9IHRydWU7Ci0gICAgfSk7Ci0KLSAgICBleHBlY3QoYnJvd3Nlci5kZWZlcnJlZEZucy5s
ZW5ndGgpLnRvQmUoMSk7Ci0gICAgfSk7Ci0gICAgfSk7Ci19KCkpOwpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvYW5ndWxhcmpzL3Rlc3QvdW5pdC90b2RvQ3RybFNwZWMuanMgYi9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9hbmd1bGFyanMvdGVzdC91bml0L3RvZG9DdHJsU3BlYy5qcwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZjUxOTA4YmE0NWI5YmI4NzE0OTc2YjQwM2IwZDQ0NzQ0MjE4OWEwMS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9h
bmd1bGFyanMvdGVzdC91bml0L3RvZG9DdHJsU3BlYy5qcworKysgL2Rldi9udWxsCkBAIC0xLDE4
NiArMCwwIEBACi0vKmdsb2JhbCBkZXNjcmliZSwgaXQsIGJlZm9yZUVhY2gsIGluamVjdCwgZXhw
ZWN0Ki8KLShmdW5jdGlvbiAoKSB7Ci0gICAgJ3VzZSBzdHJpY3QnOwotCi0gICAgZGVzY3JpYmUo
J1RvZG8gQ29udHJvbGxlcicsIGZ1bmN0aW9uICgpIHsKLSAgICB2YXIgY3RybCwgc2NvcGU7Ci0g
ICAgdmFyIHRvZG9MaXN0OwotICAgIHZhciB0b2RvU3RvcmFnZSA9IHsKLSAgICBzdG9yYWdlOiB7
fSwKLSAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKLSAgICByZXR1cm4gdGhpcy5zdG9yYWdlOwotICAg
IH0sCi0gICAgcHV0OiBmdW5jdGlvbiAodmFsdWUpIHsKLSAgICB0aGlzLnN0b3JhZ2UgPSB2YWx1
ZTsKLSAgICB9Ci0gICAgfTsKLQotICAgIC8vIExvYWQgdGhlIG1vZHVsZSBjb250YWluaW5nIHRo
ZSBhcHAsIG9ubHkgJ25nJyBpcyBsb2FkZWQgYnkgZGVmYXVsdC4KLSAgICBiZWZvcmVFYWNoKG1v
ZHVsZSgndG9kb212YycpKTsKLQotICAgIGJlZm9yZUVhY2goaW5qZWN0KGZ1bmN0aW9uICgkY29u
dHJvbGxlciwgJHJvb3RTY29wZSkgewotICAgIHNjb3BlID0gJHJvb3RTY29wZS4kbmV3KCk7Ci0g
ICAgY3RybCA9ICRjb250cm9sbGVyKCdUb2RvQ3RybCcsIHsgJHNjb3BlOiBzY29wZSB9KTsKLSAg
ICB9KSk7Ci0KLSAgICBpdCgnc2hvdWxkIG5vdCBoYXZlIGFuIGVkaXRlZCBUb2RvIG9uIHN0YXJ0
JywgZnVuY3Rpb24gKCkgewotICAgIGV4cGVjdChzY29wZS5lZGl0ZWRUb2RvKS50b0JlTnVsbCgp
OwotICAgIH0pOwotCi0gICAgaXQoJ3Nob3VsZCBub3QgaGF2ZSBhbnkgVG9kb3Mgb24gc3RhcnQn
LCBmdW5jdGlvbiAoKSB7Ci0gICAgZXhwZWN0KHNjb3BlLnRvZG9zLmxlbmd0aCkudG9CZSgwKTsK
LSAgICB9KTsKLQotICAgIGl0KCdzaG91bGQgaGF2ZSBhbGwgVG9kb3MgY29tcGxldGVkJywgZnVu
Y3Rpb24gKCkgewotICAgIHNjb3BlLiRkaWdlc3QoKTsKLSAgICBleHBlY3Qoc2NvcGUuYWxsQ2hl
Y2tlZCkudG9CZVRydXRoeSgpOwotICAgIH0pOwotCi0gICAgZGVzY3JpYmUoJ3RoZSBwYXRoJywg
ZnVuY3Rpb24gKCkgewotICAgIGl0KCdzaG91bGQgZGVmYXVsdCB0byAiLyInLCBmdW5jdGlvbiAo
KSB7Ci0gICAgZXhwZWN0KHNjb3BlLmxvY2F0aW9uLnBhdGgoKSkudG9CZSgnLycpOwotICAgIH0p
OwotCi0gICAgZGVzY3JpYmUoJ2JlaW5nIGF0IC9hY3RpdmUnLCBmdW5jdGlvbiAoKSB7Ci0gICAg
aXQoJ3Nob3VsZCBmaWx0ZXIgbm9uLWNvbXBsZXRlZCcsIGluamVjdChmdW5jdGlvbiAoJGNvbnRy
b2xsZXIpIHsKLSAgICBjdHJsID0gJGNvbnRyb2xsZXIoJ1RvZG9DdHJsJywgewotICAgICRzY29w
ZTogc2NvcGUsCi0gICAgJGxvY2F0aW9uOiB7Ci0gICAgcGF0aDogZnVuY3Rpb24gKCkgeyByZXR1
cm4gJy9hY3RpdmUnOyB9Ci0gICAgfQotICAgIH0pOwotCi0gICAgc2NvcGUuJGRpZ2VzdCgpOwot
ICAgIGV4cGVjdChzY29wZS5zdGF0dXNGaWx0ZXIuY29tcGxldGVkKS50b0JlRmFsc3koKTsKLSAg
ICB9KSk7Ci0gICAgfSk7Ci0KLSAgICBkZXNjcmliZSgnYmVpbmcgYXQgL2NvbXBsZXRlZCcsIGZ1
bmN0aW9uICgpIHsKLSAgICBpdCgnc2hvdWxkIGZpbHRlciBjb21wbGV0ZWQnLCBpbmplY3QoZnVu
Y3Rpb24gKCRjb250cm9sbGVyKSB7Ci0gICAgY3RybCA9ICRjb250cm9sbGVyKCdUb2RvQ3RybCcs
IHsKLSAgICAkc2NvcGU6IHNjb3BlLAotICAgICRsb2NhdGlvbjogewotICAgIHBhdGg6IGZ1bmN0
aW9uICgpIHsgcmV0dXJuICcvY29tcGxldGVkJzsgfQotICAgIH0KLSAgICB9KTsKLQotICAgIHNj
b3BlLiRkaWdlc3QoKTsKLSAgICBleHBlY3Qoc2NvcGUuc3RhdHVzRmlsdGVyLmNvbXBsZXRlZCku
dG9CZVRydXRoeSgpOwotICAgIH0pKTsKLSAgICB9KTsKLSAgICB9KTsKLQotICAgIGRlc2NyaWJl
KCdoYXZpbmcgbm8gVG9kb3MnLCBmdW5jdGlvbiAoKSB7Ci0gICAgdmFyIGN0cmw7Ci0KLSAgICBi
ZWZvcmVFYWNoKGluamVjdChmdW5jdGlvbiAoJGNvbnRyb2xsZXIpIHsKLSAgICB0b2RvU3RvcmFn
ZS5zdG9yYWdlID0gW107Ci0gICAgY3RybCA9ICRjb250cm9sbGVyKCdUb2RvQ3RybCcsIHsKLSAg
ICAkc2NvcGU6IHNjb3BlLAotICAgIHRvZG9TdG9yYWdlOiB0b2RvU3RvcmFnZQotICAgIH0pOwot
ICAgIHNjb3BlLiRkaWdlc3QoKTsKLSAgICB9KSk7Ci0KLSAgICBpdCgnc2hvdWxkIG5vdCBhZGQg
ZW1wdHkgVG9kb3MnLCBmdW5jdGlvbiAoKSB7Ci0gICAgc2NvcGUubmV3VG9kbyA9ICcnOwotICAg
IHNjb3BlLmFkZFRvZG8oKTsKLSAgICBzY29wZS4kZGlnZXN0KCk7Ci0gICAgZXhwZWN0KHNjb3Bl
LnRvZG9zLmxlbmd0aCkudG9CZSgwKTsKLSAgICB9KTsKLQotICAgIGl0KCdzaG91bGQgbm90IGFk
ZCBpdGVtcyBjb25zaXN0aW5nIG9ubHkgb2Ygd2hpdGVzcGFjZXMnLCBmdW5jdGlvbiAoKSB7Ci0g
ICAgc2NvcGUubmV3VG9kbyA9ICcgICAnOwotICAgIHNjb3BlLmFkZFRvZG8oKTsKLSAgICBzY29w
ZS4kZGlnZXN0KCk7Ci0gICAgZXhwZWN0KHNjb3BlLnRvZG9zLmxlbmd0aCkudG9CZSgwKTsKLSAg
ICB9KTsKLQotCi0gICAgaXQoJ3Nob3VsZCB0cmltIHdoaXRlc3BhY2UgZnJvbSBuZXcgVG9kb3Mn
LCBmdW5jdGlvbiAoKSB7Ci0gICAgc2NvcGUubmV3VG9kbyA9ICcgIGJ1eSBzb21lIHVuaWNvcm5z
ICAnOwotICAgIHNjb3BlLmFkZFRvZG8oKTsKLSAgICBzY29wZS4kZGlnZXN0KCk7Ci0gICAgZXhw
ZWN0KHNjb3BlLnRvZG9zLmxlbmd0aCkudG9CZSgxKTsKLSAgICBleHBlY3Qoc2NvcGUudG9kb3Nb
MF0udGl0bGUpLnRvQmUoJ2J1eSBzb21lIHVuaWNvcm5zJyk7Ci0gICAgfSk7Ci0gICAgfSk7Ci0K
LSAgICBkZXNjcmliZSgnaGF2aW5nIHNvbWUgc2F2ZWQgVG9kb3MnLCBmdW5jdGlvbiAoKSB7Ci0g
ICAgdmFyIGN0cmw7Ci0KLSAgICBiZWZvcmVFYWNoKGluamVjdChmdW5jdGlvbiAoJGNvbnRyb2xs
ZXIpIHsKLSAgICB0b2RvTGlzdCA9IFt7Ci0gICAgJ3RpdGxlJzogJ1VuY29tcGxldGVkIEl0ZW0g
MCcsCi0gICAgJ2NvbXBsZXRlZCc6IGZhbHNlCi0gICAgfSwgewotICAgICd0aXRsZSc6ICdVbmNv
bXBsZXRlZCBJdGVtIDEnLAotICAgICdjb21wbGV0ZWQnOiBmYWxzZQotICAgIH0sIHsKLSAgICAn
dGl0bGUnOiAnVW5jb21wbGV0ZWQgSXRlbSAyJywKLSAgICAnY29tcGxldGVkJzogZmFsc2UKLSAg
ICB9LCB7Ci0gICAgJ3RpdGxlJzogJ0NvbXBsZXRlZCBJdGVtIDAnLAotICAgICdjb21wbGV0ZWQn
OiB0cnVlCi0gICAgfSwgewotICAgICd0aXRsZSc6ICdDb21wbGV0ZWQgSXRlbSAxJywKLSAgICAn
Y29tcGxldGVkJzogdHJ1ZQotICAgIH1dOwotCi0gICAgdG9kb1N0b3JhZ2Uuc3RvcmFnZSA9IHRv
ZG9MaXN0OwotICAgIGN0cmwgPSAkY29udHJvbGxlcignVG9kb0N0cmwnLCB7Ci0gICAgJHNjb3Bl
OiBzY29wZSwKLSAgICB0b2RvU3RvcmFnZTogdG9kb1N0b3JhZ2UKLSAgICB9KTsKLSAgICBzY29w
ZS4kZGlnZXN0KCk7Ci0gICAgfSkpOwotCi0gICAgaXQoJ3Nob3VsZCBjb3VudCBUb2RvcyBjb3Jy
ZWN0bHknLCBmdW5jdGlvbiAoKSB7Ci0gICAgZXhwZWN0KHNjb3BlLnRvZG9zLmxlbmd0aCkudG9C
ZSg1KTsKLSAgICBleHBlY3Qoc2NvcGUucmVtYWluaW5nQ291bnQpLnRvQmUoMyk7Ci0gICAgZXhw
ZWN0KHNjb3BlLmNvbXBsZXRlZENvdW50KS50b0JlKDIpOwotICAgIGV4cGVjdChzY29wZS5hbGxD
aGVja2VkKS50b0JlRmFsc3koKTsKLSAgICB9KTsKLQotICAgIGl0KCdzaG91bGQgc2F2ZSBUb2Rv
cyB0byBsb2NhbCBzdG9yYWdlJywgZnVuY3Rpb24gKCkgewotICAgIGV4cGVjdCh0b2RvU3RvcmFn
ZS5zdG9yYWdlLmxlbmd0aCkudG9CZSg1KTsKLSAgICB9KTsKLQotICAgIGl0KCdzaG91bGQgcmVt
b3ZlIFRvZG9zIHcvbyB0aXRsZSBvbiBzYXZpbmcnLCBmdW5jdGlvbiAoKSB7Ci0gICAgdmFyIHRv
ZG8gPSB0b2RvTGlzdFsyXTsKLSAgICB0b2RvLnRpdGxlID0gJyc7Ci0KLSAgICBzY29wZS5kb25l
RWRpdGluZyh0b2RvKTsKLSAgICBleHBlY3Qoc2NvcGUudG9kb3MubGVuZ3RoKS50b0JlKDQpOwot
ICAgIH0pOwotCi0gICAgaXQoJ3Nob3VsZCB0cmltIFRvZG9zIG9uIHNhdmluZycsIGZ1bmN0aW9u
ICgpIHsKLSAgICB2YXIgdG9kbyA9IHRvZG9MaXN0WzBdOwotICAgIHRvZG8udGl0bGUgPSAnIGJ1
eSBtb2FyIHVuaWNvcm5zICAnOwotCi0gICAgc2NvcGUuZG9uZUVkaXRpbmcodG9kbyk7Ci0gICAg
ZXhwZWN0KHNjb3BlLnRvZG9zWzBdLnRpdGxlKS50b0JlKCdidXkgbW9hciB1bmljb3JucycpOwot
ICAgIH0pOwotCi0gICAgaXQoJ2NsZWFyQ29tcGxldGVkVG9kb3MoKSBzaG91bGQgY2xlYXIgY29t
cGxldGVkIFRvZG9zJywgZnVuY3Rpb24gKCkgewotICAgIHNjb3BlLmNsZWFyQ29tcGxldGVkVG9k
b3MoKTsKLSAgICBleHBlY3Qoc2NvcGUudG9kb3MubGVuZ3RoKS50b0JlKDMpOwotICAgIH0pOwot
Ci0gICAgaXQoJ21hcmtBbGwoKSBzaG91bGQgbWFyayBhbGwgVG9kb3MgY29tcGxldGVkJywgZnVu
Y3Rpb24gKCkgewotICAgIHNjb3BlLm1hcmtBbGwoKTsKLSAgICBzY29wZS4kZGlnZXN0KCk7Ci0g
ICAgZXhwZWN0KHNjb3BlLmNvbXBsZXRlZENvdW50KS50b0JlKDUpOwotICAgIH0pOwotCi0gICAg
aXQoJ3JldmVydFRvZG8oKSBnZXQgYSBUb2RvIHRvIGl0cyBwcmV2aW91cyBzdGF0ZScsIGZ1bmN0
aW9uICgpIHsKLSAgICB2YXIgdG9kbyA9IHRvZG9MaXN0WzBdOwotICAgIHNjb3BlLmVkaXRUb2Rv
KHRvZG8pOwotICAgIHRvZG8udGl0bGUgPSAnVW5pY29ybiBzcGFya2x5IHNreXB1ZmZsZXMuJzsK
LSAgICBzY29wZS5yZXZlcnRFZGl0aW5nKHRvZG8pOwotICAgIHNjb3BlLiRkaWdlc3QoKTsKLSAg
ICBleHBlY3Qoc2NvcGUudG9kb3NbMF0udGl0bGUpLnRvQmUoJ1VuY29tcGxldGVkIEl0ZW0gMCcp
OwotICAgIH0pOwotICAgIH0pOwotICAgIH0pOwotfSgpKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL2FuZ3VsYXJqcy90b2RvbXZjLWluZGV4Lmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMv
dG9kb212Yy1pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2ZTNiMWMyZWIzZmNkMGYxMTNkMDdlOGY3
OGZjYTgyNzFlOGM3MmUKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9hbmd1bGFyanMv
dG9kb212Yy1pbmRleC5odG1sCkBAIC0wLDAgKzEsNTIgQEAKKzxzZWN0aW9uIGlkPSJ0b2RvYXBw
Ij4KKyAgICA8aGVhZGVyIGlkPSJoZWFkZXIiPgorICAgICAgICA8aDE+dG9kb3M8L2gxPgorICAg
ICAgICA8Zm9ybSBpZD0idG9kby1mb3JtIiBuZy1zdWJtaXQ9ImFkZFRvZG8oKSI+CisgICAgICAg
ICAgICA8aW5wdXQgaWQ9Im5ldy10b2RvIiBwbGFjZWhvbGRlcj0iV2hhdCBuZWVkcyB0byBiZSBk
b25lPyIgbmctbW9kZWw9Im5ld1RvZG8iIG5nLWRpc2FibGVkPSJzYXZpbmciIGF1dG9mb2N1cz4K
KyAgICAgICAgPC9mb3JtPgorICAgIDwvaGVhZGVyPgorICAgIDxzZWN0aW9uIGlkPSJtYWluIiBu
Zy1zaG93PSJ0b2Rvcy5sZW5ndGgiIG5nLWNsb2FrPgorICAgICAgICA8aW5wdXQgaWQ9InRvZ2ds
ZS1hbGwiIHR5cGU9ImNoZWNrYm94IiBuZy1tb2RlbD0iYWxsQ2hlY2tlZCIgbmctY2xpY2s9Im1h
cmtBbGwoYWxsQ2hlY2tlZCkiPgorICAgICAgICA8bGFiZWwgZm9yPSJ0b2dnbGUtYWxsIj5NYXJr
IGFsbCBhcyBjb21wbGV0ZTwvbGFiZWw+CisgICAgICAgIDx1bCBpZD0idG9kby1saXN0Ij4KKyAg
ICAgICAgICAgIDxsaSBuZy1yZXBlYXQ9InRvZG8gaW4gdG9kb3MgfCBmaWx0ZXI6c3RhdHVzRmls
dGVyIHRyYWNrIGJ5ICRpbmRleCIgbmctY2xhc3M9Intjb21wbGV0ZWQ6IHRvZG8uY29tcGxldGVk
LCBlZGl0aW5nOiB0b2RvID09IGVkaXRlZFRvZG99Ij4KKyAgICAgICAgICAgICAgICA8ZGl2IGNs
YXNzPSJ2aWV3Ij4KKyAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJ0b2dnbGUiIHR5
cGU9ImNoZWNrYm94IiBuZy1tb2RlbD0idG9kby5jb21wbGV0ZWQiIG5nLWNoYW5nZT0idG9nZ2xl
Q29tcGxldGVkKHRvZG8pIj4KKyAgICAgICAgICAgICAgICAgICAgPGxhYmVsIG5nLWRibGNsaWNr
PSJlZGl0VG9kbyh0b2RvKSI+e3t0b2RvLnRpdGxlfX08L2xhYmVsPgorICAgICAgICAgICAgICAg
ICAgICA8YnV0dG9uIGNsYXNzPSJkZXN0cm95IiBuZy1jbGljaz0icmVtb3ZlVG9kbyh0b2RvKSI+
PC9idXR0b24+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPGZvcm0g
bmctc3VibWl0PSJzYXZlRWRpdHModG9kbywgJ3N1Ym1pdCcpIj4KKyAgICAgICAgICAgICAgICAg
ICAgPGlucHV0IGNsYXNzPSJlZGl0IiBuZy10cmltPSJmYWxzZSIgbmctbW9kZWw9InRvZG8udGl0
bGUiIHRvZG8tZXNjYXBlPSJyZXZlcnRFZGl0cyh0b2RvKSIgbmctYmx1cj0ic2F2ZUVkaXRzKHRv
ZG8sICdibHVyJykiCisgICAgICAgICAgICAgICAgICAgICAgICB0b2RvLWZvY3VzPSJ0b2RvID09
IGVkaXRlZFRvZG8iPgorICAgICAgICAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgICAgIDwvbGk+
CisgICAgICAgIDwvdWw+CisgICAgPC9zZWN0aW9uPgorICAgIDxmb290ZXIgaWQ9ImZvb3RlciIg
bmctc2hvdz0idG9kb3MubGVuZ3RoIiBuZy1jbG9haz4KKyAgICAgICAgPHNwYW4gaWQ9InRvZG8t
Y291bnQiPjxzdHJvbmc+e3tyZW1haW5pbmdDb3VudH19PC9zdHJvbmc+CisgICAgICAgICAgICAg
ICAgICAgICAgICA8bmctcGx1cmFsaXplIGNvdW50PSJyZW1haW5pbmdDb3VudCIgd2hlbj0ieyBv
bmU6ICdpdGVtIGxlZnQnLCBvdGhlcjogJ2l0ZW1zIGxlZnQnIH0iPjwvbmctcGx1cmFsaXplPgor
ICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgIDx1bCBpZD0iZmlsdGVycyI+Cisg
ICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgICAgPGEgbmctY2xhc3M9IntzZWxlY3RlZDog
c3RhdHVzID09ICcnfSAiIGhyZWY9IiMvIj5BbGw8L2E+CisgICAgICAgICAgICA8L2xpPgorICAg
ICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAgIDxhIG5nLWNsYXNzPSJ7c2VsZWN0ZWQ6IHN0
YXR1cyA9PSAnYWN0aXZlJ30iIGhyZWY9IiMvYWN0aXZlIj5BY3RpdmU8L2E+CisgICAgICAgICAg
ICA8L2xpPgorICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAgIDxhIG5nLWNsYXNzPSJ7
c2VsZWN0ZWQ6IHN0YXR1cyA9PSAnY29tcGxldGVkJ30iIGhyZWY9IiMvY29tcGxldGVkIj5Db21w
bGV0ZWQ8L2E+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICA8L3VsPgorICAgICAgICA8YnV0
dG9uIGlkPSJjbGVhci1jb21wbGV0ZWQiIG5nLWNsaWNrPSJjbGVhckNvbXBsZXRlZFRvZG9zKCki
IG5nLXNob3c9ImNvbXBsZXRlZENvdW50Ij5DbGVhciBjb21wbGV0ZWQ8L2J1dHRvbj4KKyAgICA8
L2Zvb3Rlcj4KKzwvc2VjdGlvbj4KKzxmb290ZXIgaWQ9ImluZm8iPgorICAgIDxwPkRvdWJsZS1j
bGljayB0byBlZGl0IGEgdG9kbzwvcD4KKyAgICA8cD5DcmVkaXRzOgorICAgICAgICA8YSBocmVm
PSJodHRwOi8vdHdpdHRlci5jb20vY2J1cmdkb3JmIj5DaHJpc3RvcGggQnVyZ2RvcmY8L2E+LAor
ICAgICAgICA8YSBocmVmPSJodHRwOi8vZXJpY2JpZGVsbWFuLmNvbSI+RXJpYyBCaWRlbG1hbjwv
YT4sCisgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9qYWNvYm11bW0uY29tIj5KYWNvYiBNdW1tPC9h
PiBhbmQKKyAgICAgICAgPGEgaHJlZj0iaHR0cDovL2Jsb2cuaWdvcm1pbmFyLmNvbSI+SWdvciBN
aW5hcjwvYT4KKyAgICA8L3A+CisgICAgPHA+UGFydCBvZiA8YSBocmVmPSJodHRwOi8vdG9kb212
Yy5jb20iPlRvZG9NVkM8L2E+PC9wPgorPC9mb290ZXI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>