Go to main content

Textpattern CMS support forum

You are not logged in. Register | Login | Help

#91 2016-11-02 22:19:43

subcosm
New Member
Registered: 2016-11-02
Posts: 3

Re: etc_search: when the default search is not enough

This plugin looks amazing, but I’ve spent hours trying to get it to return a result, with no luck. This morning I set up a fresh install of textpattern with a new domain, directory, and database. I did nothing but post a few dummy articles, install etc_search and add <txp:etc_search /> into the default page. No luck.

Every time I type into the field, I only see “sorry, no results found matching your search request”.

I believe the problem is with my hosting setup. I’m using 1and1, and I know they can be tricky with textpattern. In debug mode, I see the following message when I begin typing into the search box:

General error 2048: strftime(): We selected ‘America/New_York’ for ‘EDT/-4.0/DST’ instead on line 264

and then:

textpattern/lib/txplib_misc.php(1782) : eval()’d code:264 strftime()
textpattern/lib/txplib_misc.php(1782) : eval()’d code:483 etc_search_get_results()
textpattern/lib/txplib_misc.php(1782) : eval()’d code:403 etc_search_results()
textpattern/lib/txplib_misc.php:1895 etc_search_callback()
textpattern/publish/log.php:48 callback_event()
textpattern/publish.php:221 log_hit()
index.php:104 include()

You’re welcome to view this for yourself on the test install, I’ve left it in debug mode.

Any ideas what’s wrong with my setup? I really want to use this plugin!

Offline

#92 2016-11-02 23:15:45

etc
Developer
Registered: 2010-11-11
Posts: 5,689
Website GitHub

Re: etc_search: when the default search is not enough

Hello, welcome to the forum.

I don’t think this error is related to etc_search. Please check this page, it issues the same error.

You can try to remove all <txp:posted /> tags from etc_search_results article form and see if it helps. If yes, try to fix the timezone error as proposed here. And I will update the plugin for 4.6 tomorrow.

Offline

#93 2016-11-03 06:34:27

subcosm
New Member
Registered: 2016-11-02
Posts: 3

Re: etc_search: when the default search is not enough

Thanks for the quick reply! I went ahead and made that change to config.php, and it seems to have fixed the timezone problem. Those errors have disappeared. However, I still don’t get any results when typing into the search field. Again, you’re welcome to visit the test site and have a look. I’m completely baffled.

The only other thing I can think of that’s unique to this install is the modified .htaccess file required to make things work with 1and1 (the only edit is RewriteBase /). Here it is in full:

# BEGIN Textpattern
#DirectoryIndex index.php index.html

#Options +FollowSymLinks
#Options -Indexes
#ErrorDocument 403 default

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^(.+) - [PT,L]

    RewriteCond %{REQUEST_URI} !=/favicon.ico
    RewriteRule ^(.*) index.php

    RewriteCond %{HTTP:Authorization}  !^$
    RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
</IfModule>

#php_value register_globals 0

<IfModule mod_mime.c>
    AddType image/svg+xml  svg svgz
    AddEncoding gzip       svgz
</IfModule>
# END Textpattern

Last edited by subcosm (2016-11-03 08:00:26)

Offline

#94 2016-11-03 08:34:46

etc
Developer
Registered: 2010-11-11
Posts: 5,689
Website GitHub

Re: etc_search: when the default search is not enough

The response comes from etc_search, so the redirection should be ok. Could you test the modified version, please?

# Name: etc_search v0.9.5 
# Type: Admin/Public plugin
# Search in any table(s)
# Author: Oleg Loukianov
# URL: http://www.iut-fbleau.fr/projet/etc/
# Recommended load order: 7

# .....................................................................
# This is a plugin for Textpattern CMS - http://textpattern.com/
# To install: textpattern > admin > plugins
# Paste the following text into the 'Install plugin' box:
# .....................................................................

YToxMTp7czo0OiJuYW1lIjtzOjEwOiJldGNfc2VhcmNoIjtzOjY6ImF1dGhvciI7czoxNDoi
T2xlZyBMb3VraWFub3YiO3M6MTA6ImF1dGhvcl91cmkiO3M6MzY6Imh0dHA6Ly93d3cuaXV0
LWZibGVhdS5mci9wcm9qZXQvZXRjLyI7czo3OiJ2ZXJzaW9uIjtzOjU6IjAuOS41IjtzOjEx
OiJkZXNjcmlwdGlvbiI7czoyMjoiU2VhcmNoIGluIGFueSB0YWJsZShzKSI7czo0OiJjb2Rl
IjtzOjI0OTE4OiIvLyBUWFAgNC42IHRhZyByZWdpc3RyYXRpb24NCmlmIChjbGFzc19leGlz
dHMoJ1xUZXh0cGF0dGVyblxUYWdcUmVnaXN0cnknKSkgew0KCVR4cDo6Z2V0KCdcVGV4dHBh
dHRlcm5cVGFnXFJlZ2lzdHJ5JykNCgkJLT5yZWdpc3RlcignZXRjX3NlYXJjaCcpDQoJCS0+
cmVnaXN0ZXIoJ2V0Y19zZWFyY2hfcmVzdWx0cycpDQoJCS0+cmVnaXN0ZXIoJ2V0Y19zZWFy
Y2hfcmVzdWx0X2V4Y2VycHQnKQ0KCQktPnJlZ2lzdGVyKCdldGNfc2VhcmNoX3Jlc3VsdF9j
b3VudCcpDQoJCS0+cmVnaXN0ZXIoJ2V0Y19zZWFyY2hfcmVzdWx0X2NvdW50JywgJ3NlYXJj
aF9yZXN1bHRfY291bnQnKQ0KCTsNCn0NCg0KaWYoQHR4cGludGVyZmFjZSA9PSAnYWRtaW4n
KSB7DQoJYWRkX3ByaXZzKCdldGNfc2VhcmNoJywgJzEsMicpOw0KCXJlZ2lzdGVyX3RhYigi
ZXh0ZW5zaW9ucyIsICJldGNfc2VhcmNoIiwgIlNlYXJjaCBzZXR0aW5ncyIpOw0KCXJlZ2lz
dGVyX2NhbGxiYWNrKCJldGNfc2VhcmNoX3RhYiIsICJldGNfc2VhcmNoIik7DQoJYWRkX3By
aXZzKCdwbHVnaW5fcHJlZnMuZXRjX3NlYXJjaCcsJzEsMicpOw0KCXJlZ2lzdGVyX2NhbGxi
YWNrKCdldGNfc2VhcmNoX3RhYicsICdwbHVnaW5fcHJlZnMuZXRjX3NlYXJjaCcpOw0KCXJl
Z2lzdGVyX2NhbGxiYWNrKCdldGNfc2VhcmNoX2luc3RhbGwnLCAncGx1Z2luX2xpZmVjeWNs
ZS5ldGNfc2VhcmNoJyk7DQp9DQplbHNlaWYoZ3BzKCdldGNfc2VhcmNoJykgIT09ICcnKSB7
DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ2V0Y19zZWFyY2hfdGVybScsICdwcmV0ZXh0X2VuZCcp
Ow0KCWlmKHBzKCdldGNfc2VhcmNoJykgIT09ICcnKSByZWdpc3Rlcl9jYWxsYmFjaygnZXRj
X3NlYXJjaF9jYWxsYmFjaycsICdsb2dfaGl0Jyk7DQp9DQoNCmZ1bmN0aW9uIGV0Y19zZWFy
Y2hfaW5zdGFsbCgkZXZlbnQ9JycsICRzdGVwPScnKQ0Kew0KCWlmKCRzdGVwID09ICdkZWxl
dGVkJykgew0KCQlzYWZlX2RlbGV0ZSgndHhwX3ByZWZzJywgIm5hbWUgTElLRSAnZXRjXF9z
ZWFyY2hcXyUnIik7DQoJCXNhZmVfZGVsZXRlKCJ0eHBfZm9ybSIsICJuYW1lID0gJ2V0Y19z
ZWFyY2hfcmVzdWx0cyciKTsNCgkJc2FmZV9xdWVyeSgnRFJPUCBUQUJMRSBJRiBFWElTVFMg
Jy5zYWZlX3BmeCgnZXRjX3NlYXJjaCcpKTsNCgkJcmV0dXJuOw0KCX0NCglpZigkc3RlcCA9
PSAnZW5hYmxlZCcpIHsNCgkJaWYoIWdldF9wcmVmKCdldGNfc2VhcmNoX2hhc2gnKSkgDQoJ
CQlzZXRfcHJlZignZXRjX3NlYXJjaF9oYXNoJywgdW5pcWlkKCcnLCB0cnVlKSwgJ2V0Y19z
ZWFyY2gnLCBQUkVGX0hJRERFTik7DQoJCWlmKCFnZXRfcHJlZignZXRjX3NlYXJjaF9vcHMn
KSkgDQoJCQlzZXRfcHJlZignZXRjX3NlYXJjaF9vcHMnLCAneyJOT1QiOiItIiwiQU5EIjoi
ICIsIk9SIjoiLCJ9JywgJ2V0Y19zZWFyY2gnLCBQUkVGX0hJRERFTik7DQoJCWlmKCFzYWZl
X2NvdW50KCd0eHBfZm9ybScsICJuYW1lID0gJ2V0Y19zZWFyY2hfcmVzdWx0cycgQU5EIHR5
cGUgPSAnYXJ0aWNsZSciKSkNCgkJCXNhZmVfaW5zZXJ0KCJ0eHBfZm9ybSIsICJuYW1lID0g
J2V0Y19zZWFyY2hfcmVzdWx0cycsIHR5cGUgPSAnYXJ0aWNsZScsIEZvcm0gPSAnPHR4cDpw
ZXJtbGluaz48dHhwOnRpdGxlIC8+PC90eHA6cGVybWxpbms+JyIpOw0KDQoJCSRxYz0iQ1JF
QVRFIFRBQkxFIElGIE5PVCBFWElTVFMgIi5zYWZlX3BmeCgnZXRjX3NlYXJjaCcpLiIgKCI7
DQoJCSRxYy49IDw8PEVPRg0KCQkJYGlkYCBpbnQoNCkgTk9UIE5VTEwgQVVUT19JTkNSRU1F
TlQsDQoJCQlgcXVlcnlgIHZhcmNoYXIoMjU1KSBOT1QgTlVMTCwNCgkJCWBmb3JtMWAgdmFy
Y2hhcig2NCkgTk9UIE5VTEwsDQoJCQlgZm9ybTJgIHZhcmNoYXIoNjQpIE5PVCBOVUxMLA0K
CQkJYHRoaW5nMWAgdGV4dCBOT1QgTlVMTCwNCgkJCWB0aGluZzJgIHRleHQgTk9UIE5VTEws
DQoJCQlgdHlwZWAgZW51bSgnYXJ0aWNsZScsJ2ltYWdlJywnZmlsZScsJ2xpbmsnLCdjYXRl
Z29yeScsJ3NlY3Rpb24nKSBOT1QgTlVMTCwNCgkJCVBSSU1BUlkgS0VZIChgaWRgKQ0KCQkJ
KSBFTkdJTkU9TXlJU0FNIENIQVJBQ1RFUiBTRVQ9dXRmOCA7DQpFT0Y7DQoJCXNhZmVfcXVl
cnkoJHFjKTsNCgkJc2FmZV9hbHRlcignZXRjX3NlYXJjaCcsICJNT0RJRlkgYHR5cGVgIGVu
dW0oJ2FydGljbGUnLCdpbWFnZScsJ2ZpbGUnLCdsaW5rJywnY2F0ZWdvcnknLCdzZWN0aW9u
JykgTk9UIE5VTEwiKTsNCgkJcmV0dXJuOw0KCX0NCn0NCg0KZnVuY3Rpb24gZXRjX3NlYXJj
aF90YWIoJGV2ZW50LCAkc3RlcCkgew0KCWdsb2JhbCAkcHJlZnM7DQoJJGlkID0gaW50dmFs
KGdwcygnaWQnKSk7DQoJaWYoJHN0ZXAgJiYgYm91bmNlcigkc3RlcCwgYXJyYXkoJ3NhdmUn
PT50cnVlLCAnb3BzJz0+dHJ1ZSkpKSBpZigkc3RlcCA9PSAnc2F2ZScpIHN3aXRjaChncHMo
J3NhdmUnKSkgew0KCQljYXNlICdTYXZlJyA6IHNhZmVfdXBzZXJ0KCdldGNfc2VhcmNoJywN
CgkJCSJxdWVyeT0nIi5kb1NsYXNoKGdwcygncXVlcnknKSkuIicsDQoJCQlmb3JtMT0nIi5k
b1NsYXNoKGdwcygnZm9ybTEnKSkuIicsDQoJCQlmb3JtMj0nIi5kb1NsYXNoKGdwcygnZm9y
bTInKSkuIicsDQoJCQl0aGluZzE9JyIuZG9TbGFzaChncHMoJ3RoaW5nMScpKS4iJywNCgkJ
CXRoaW5nMj0nIi5kb1NsYXNoKGdwcygndGhpbmcyJykpLiInLA0KCQkJdHlwZT0nIi5kb1Ns
YXNoKGdwcygndHlwZScpKS4iJyIsDQoJCQkiaWQ9Ii4kaWQpOw0KCQkJJG9wcyA9IGdwcygn
ZXRjX29wc18nLiRpZCk7DQoJCQlpZighJGlkKSAkaWQgPSBpbnR2YWwoZ2V0VGhpbmcoJ1NF
TEVDVCBMQVNUX0lOU0VSVF9JRCgpJykpOw0KCQkJaWYoJG9wcyA9PT0gJycpIHtzYWZlX2Rl
bGV0ZSgndHhwX3ByZWZzJywgIm5hbWU9J2V0Y19zZWFyY2hfb3BzXyRpZCciKTsgJHByZWZz
WydldGNfc2VhcmNoX29wc18nLiRpZF0gPSAnJzt9DQoJCQllbHNlIHNldF9wcmVmKCdldGNf
c2VhcmNoX29wc18nLiRpZCwgJHByZWZzWydldGNfc2VhcmNoX29wc18nLiRpZF0gPSBncHMo
J2V0Y19vcHNfJy4kaWQpLCAnZXRjX3NlYXJjaCcsIFBSRUZfSElEREVOKTsNCgkJYnJlYWs7
DQoJCWNhc2UgJ0RlbGV0ZScgOiBzYWZlX2RlbGV0ZSgnZXRjX3NlYXJjaCcsICJpZD0kaWQi
KTsgc2FmZV9kZWxldGUoJ3R4cF9wcmVmcycsICJuYW1lPSdldGNfc2VhcmNoX29wc18kaWQn
Iik7DQoJCWJyZWFrOw0KCX0gZWxzZWlmKCRzdGVwID09ICdvcHMnKSB7DQoJCQlzZXRfcHJl
ZignZXRjX3NlYXJjaF9vcHMnLCAkcHJlZnNbJ2V0Y19zZWFyY2hfb3BzJ10gPSBncHMoJ2V0
Y19vcHMnKSwgJ2V0Y19zZWFyY2gnLCBQUkVGX0hJRERFTik7DQoJCX0NCg0KCSRvcHMgPSBn
ZXRfcHJlZignZXRjX3NlYXJjaF9vcHMnKTsNCg0KCSRycyA9IHNhZmVfcm93cygnKicsICdl
dGNfc2VhcmNoJywgJzEnKTsNCglwYWdldG9wKCJldGNfc2VhcmNoIiwgIjxzdHJvbmc+ZXRj
X3NlYXJjaDwvc3Ryb25nPiBwcmVmZXJlbmNlcyIpOw0KDQoJZWNobyAnPHN0eWxlPi5ldGMt
c2VhcmNoLWZvcm0gaW5wdXRbdHlwZT0idGV4dCJde3dpZHRoOjEwMCV9DQoJCS5ldGMtdHdv
LWNvbHVtbnt3aWR0aDoxMDAlO2JvcmRlci1zcGFjaW5nOjFlbSAwO2JvcmRlci1jb2xsYXBz
ZTpzZXBhcmF0ZTt9DQoJCS5ldGMtc2VhcmNoLWZvcm17cGFkZGluZzowIDFlbTt9DQoJPC9z
dHlsZT4nOw0KCWVjaG8gJzxoMT5ldGNfc2VhcmNoIHNldHVwPC9oMT4nLm47DQoNCgllY2hv
ICc8aDI+U2VhcmNoIHNldHRpbmdzPC9oMj4nLm47DQoJZWNobyAnPGRpdiBjbGFzcz0ic3Vt
bWFyeS1kZXRhaWxzIj48aDMgY2xhc3M9ImxldmVyIHR4cC1zdW1tYXJ5Ij48YSBocmVmPSIj
ZXRjLWxvZ2ljIj5Mb2dpY2FsIG9wZXJhdG9yczwvYT48L2gzPicubjsNCgllY2hvICc8Zm9y
bSBpZD0iZXRjLWxvZ2ljIiBjbGFzcz0iZXRjLXNlYXJjaC1mb3JtIiBhY3Rpb249Ij9ldmVu
dD1ldGNfc2VhcmNoJnN0ZXA9b3BzIiBtZXRob2Q9InBvc3QiPicsIG4sICc8cD48bGFiZWwg
Zm9yPSJvcHMiPkpTT04tZW5jb2RlZCBvYmplY3QgKGhhbmRsZSB3aXRoIGNhcmUpPC9sYWJl
bD48YnIgLz4nLCBmSW5wdXQoJ3RleHQnLCAnZXRjX29wcycsICRvcHMpLCB0SW5wdXQoKSwg
c0lucHV0KCdvcHMnKSwgJzwvcD48cD4nLCBmSW5wdXQoJ3N1Ym1pdCcsICdzYXZlJywgJ1Nh
dmUnLCAncHVibGlzaCcpLCBuLCAnPC9wPjwvZm9ybT48L2Rpdj4nLCBuOw0KDQoJZWNobyAn
PGgyPlNlYXJjaCBmb3JtczwvaDI+Jy5uLic8ZGl2IGNsYXNzPSJzdW1tYXJ5LWRldGFpbHMi
PicubjsNCglmb3JlYWNoKCRycyBhcyAkcm93KSBlY2hvIGV0Y19zZWFyY2hfZm9ybShkb1Nw
ZWNpYWwoJHJvdykpOw0KCWVjaG8gZXRjX3NlYXJjaF9mb3JtKGFycmF5KCdpZCc9PjAsICdx
dWVyeSc9PicnLCAnZm9ybTEnPT4nJywgJ2Zvcm0yJz0+JycsICd0aGluZzEnPT4nJywgJ3Ro
aW5nMic9PicnLCAndHlwZSc9PicnKSkubi4nPC9kaXY+JzsNCg0KCWVjaG8gJzxzY3JpcHQ+
JChmdW5jdGlvbiAoKSB7DQoJCSQoIi5sZXZlciBhW2hyZWYhPScsIicjZXRjLWZvcm0tIi5p
bnR2YWwoZ3BzKCdpZCcpKS4iJyIsICddIikudHJpZ2dlcigiY2xpY2siKTsNCgl9KTs8L3Nj
cmlwdD4nOw0KfQ0KDQpmdW5jdGlvbiBldGNfc2VhcmNoX2Zvcm0oJHJvdykgew0KCWdsb2Jh
bCAkcHJlZnM7DQoJaWYoISgkc2VhcmNoX2ZpZWxkcyA9ICRwcmVmc1snc2VhcmNoYWJsZV9h
cnRpY2xlX2ZpZWxkcyddKSkgJHNlYXJjaF9maWVsZHMgPSAnVGl0bGUsQm9keSc7DQoJJGNv
bnRleHQgPSBhcnJheSgpOw0KCWVjaG8gJzxoMyBjbGFzcz0ibGV2ZXIgdHhwLXN1bW1hcnki
PjxhIGhyZWY9IiNldGMtZm9ybS0nLiRyb3dbJ2lkJ10uJyI+JywgKCRyb3dbJ2lkJ10gPyAn
U2VhcmNoIGZvcm0gJy4kcm93WydpZCddIDogJ05ldyBzZWFyY2ggZm9ybScpLCAnPC9hPjwv
aDM+JywgbjsNCgllY2hvICc8Zm9ybSBpZD0iZXRjLWZvcm0tJy4kcm93WydpZCddLiciIGNs
YXNzPSJldGMtc2VhcmNoLWZvcm0iIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9ZXRj
X3NlYXJjaCInLCAoJHJvd1snaWQnXSA/ICcgZGF0YS1pZD0iJy4kcm93WydpZCddLiciJyA6
ICcnKSwgJz4nLCBuOw0KCWVjaG8gJzxwPjxsYWJlbD5jb250ZXh0PC9sYWJlbD48YnIgLz4n
LCAvKmltcGxvZGUoJyZuYnNwOyZuYnNwOyAnLCAkY29udGV4dCkqLyANCglyYWRpb1NldChh
cnJheSgnYXJ0aWNsZSc9PmdUeHQoJ2FydGljbGVfY29udGV4dCcpLCAnaW1hZ2UnPT5nVHh0
KCdpbWFnZV9jb250ZXh0JyksICdmaWxlJz0+Z1R4dCgnZmlsZV9jb250ZXh0JyksICdsaW5r
Jz0+Z1R4dCgnbGlua19jb250ZXh0JyksICdjYXRlZ29yeSc9PmdUeHQoJ2NhdGVnb3J5Jyks
ICdzZWN0aW9uJz0+Z1R4dCgnc2VjdGlvbicpLCAnJz0+J2N1c3RvbScpLCAndHlwZScsICRy
b3dbJ3R5cGUnXSwgJycsICdldGMtJy4kcm93WydpZCddKSwgJzwvcD4nLCBuOw0KCWVjaG8g
JzxwPjxsYWJlbD5xdWVyeTwvbGFiZWw+PGJyIC8+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9
InF1ZXJ5IiB2YWx1ZT0iJywgJHJvd1sncXVlcnknXSwgJyIgcGxhY2Vob2xkZXI9InsnLCAk
c2VhcmNoX2ZpZWxkcywgJ30iIC8+PC9wPicsIG47DQoJZWNobyAnPHA+PGxhYmVsPmxvZ2lj
YWwgb3BlcmF0b3JzIChKU09OLWVuY29kZWQpPC9sYWJlbD48YnIgLz48aW5wdXQgdHlwZT0i
dGV4dCIgbmFtZT0iZXRjX29wc18nLCRyb3dbJ2lkJ10sJyIgdmFsdWU9IicsICRyb3dbJ2lk
J10gPyBkb1NwZWNpYWwoZ2V0X3ByZWYoJ2V0Y19zZWFyY2hfb3BzXycuJHJvd1snaWQnXSkp
IDogJycsICciIHBsYWNlaG9sZGVyPSInLGRvU3BlY2lhbChnZXRfcHJlZignZXRjX3NlYXJj
aF9vcHMnKSksJyIgLz48L3A+JywgbjsNCgllY2hvICc8dGFibGUgY2xhc3M9ImV0Yy10d28t
Y29sdW1uIj48dHI+JywgbjsNCgllY2hvICc8dGQ+PGZpZWxkc2V0PjxsZWdlbmQ+TGl2ZSBz
ZWFyY2g8L2xlZ2VuZD4nLCBuOw0KCWVjaG8gJzxwPjxsYWJlbD5mb3JtPC9sYWJlbD48YnIg
Lz48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZm9ybTEiIHZhbHVlPSInLCAkcm93Wydmb3Jt
MSddLCAnIiBwbGFjZWhvbGRlcj0iZXRjX3NlYXJjaF9yZXN1bHRzIiAvPjwvcD4nLCBuOw0K
CWVjaG8gJzxwPjxsYWJlbD5vciBjb250ZW50PC9sYWJlbD48YnIgLz48dGV4dGFyZWEgbmFt
ZT0idGhpbmcxIiBzcGVsbGNoZWNrPSJmYWxzZSI+JywgJHJvd1sndGhpbmcxJ10sICc8L3Rl
eHRhcmVhPjwvcD4nLCBuOw0KCWVjaG8gJzwvZmllbGRzZXQ+PC90ZD4nLCBuOw0KCWVjaG8g
Jzx0ZD48ZmllbGRzZXQ+PGxlZ2VuZD5TdGF0aWMgc2VhcmNoPC9sZWdlbmQ+JywgbjsNCgll
Y2hvICc8cD48bGFiZWw+Zm9ybTwvbGFiZWw+PGJyIC8+PGlucHV0IHR5cGU9InRleHQiIG5h
bWU9ImZvcm0yIiB2YWx1ZT0iJywgJHJvd1snZm9ybTInXSwgJyIgcGxhY2Vob2xkZXI9InNl
YXJjaF9yZXN1bHRzIiAvPjwvcD4nLCBuOw0KCWVjaG8gJzxwPjxsYWJlbD5vciBjb250ZW50
PC9sYWJlbD48YnIgLz48dGV4dGFyZWEgbmFtZT0idGhpbmcyIiBzcGVsbGNoZWNrPSJmYWxz
ZSI+JywgJHJvd1sndGhpbmcyJ10sICc8L3RleHRhcmVhPjwvcD4nLCBuOw0KCWVjaG8gJzwv
ZmllbGRzZXQ+PC90ZD4nLCBuLCAnPC90cj48L3RhYmxlPicsIG47DQoJZWNobyAnPHA+Jywg
c0lucHV0KCdzYXZlJyksIGhJbnB1dCgnaWQnLCAkcm93WydpZCddKSwgdElucHV0KCksIGZJ
bnB1dCgnc3VibWl0JywgJ3NhdmUnLCAnU2F2ZScsICdwdWJsaXNoJyksICgkcm93WydpZCdd
ID8gZklucHV0KCdzdWJtaXQnLCAnc2F2ZScsICdEZWxldGUnLCAncHVibGlzaCcpIDogJycp
LCAnPC9wPicsIG47DQoJZWNobyAnPC9mb3JtPic7DQp9DQoNCmZ1bmN0aW9uIGV0Y19zZWFy
Y2hfcGFyc2UoJHN0cmluZywgJHBhdHRlcm4sICYkbWF0Y2hlcywgJG9wZW4gPSAnJywgJGNs
b3NlID0gJycsICRyZXBsYWNlID0gYXJyYXkoKSkNCnsNCglpZighJHN0cmluZyB8fCAhJHBh
dHRlcm4pIHJldHVybiAkc3RyaW5nOw0KCSRtYXRjaGVzID0gYXJyYXkoKTsNCgkkc3RyaW5n
ID0gcHJlZ19zcGxpdCgkcGF0dGVybiwgJHN0cmluZywgbnVsbCwgUFJFR19TUExJVF9ERUxJ
TV9DQVBUVVJFKTsNCglpZigoJGNvdW50ID0gY291bnQoJHN0cmluZykpID4gMSkgZm9yKCRp
ID0gMTsgJGkgPCAkY291bnQ7ICRpICs9IDIpIHsNCgkJJG1hdGNoZXNbJG9wZW4uJGkuJGNs
b3NlXSA9ICRyZXBsYWNlID8gc3RydHIoJHN0cmluZ1skaV0sICRyZXBsYWNlKSA6ICRzdHJp
bmdbJGldOw0KCQkkc3RyaW5nWyRpXSA9ICRvcGVuLiRpLiRjbG9zZTsNCgl9DQoJcmV0dXJu
IGltcGxvZGUoJycsICRzdHJpbmcpOw0KfQ0KDQpmdW5jdGlvbiBldGNfc2VhcmNoX3F1ZXJ5
KCRzdHJpbmcsICRmaWVsZHMsICRvcHM9bnVsbCkNCnsNCglpZighJGZpZWxkcyB8fCAkc3Ry
aW5nID09PSAnJykgcmV0dXJuICcxJzsNCglnbG9iYWwgJGV0Y19zZWFyY2hfb3BzLCAkZXRj
X3NlYXJjaF9uZWcsICRldGNfc2VhcmNoX21hdGNoX3F1ZXJ5Ow0KCSR3aGVyZSA9IGFycmF5
KCk7DQoJaWYoISRvcHMgfHwgIWlzX2FycmF5KCRvcHMpKSB7DQoJCSRwYXR0ZXJucyA9IGRv
X2xpc3QoJGZpZWxkcywgJzsnKTsNCgkJJGZpZWxkcyA9IGFycmF5KCk7DQoJCSRub3QgPSBm
YWxzZTsNCgkJd2hpbGUoJHN0cmluZyAmJiAkc3RyaW5nWzBdPT0kZXRjX3NlYXJjaF9uZWcp
IHskbm90ID0gISRub3Q7ICRzdHJpbmc9c3Vic3RyKCRzdHJpbmcsIDEpO30NCgkJaWYocHJl
Z19tYXRjaCgnL15cW1wiXGQqXCJcXSQvJywgJHN0cmluZykpIHJldHVybiAkbm90ID8gIigg
Tk9UICRzdHJpbmcgKSIgOiAkc3RyaW5nOw0KCQkkc3RyaW5nID0gc3RyX3JlcGxhY2UoJ3sq
fScsICd7eyp9fScsICRzdHJpbmcpOw0KCQlpZigkc3RyaW5nID4gJycpIGZvcmVhY2goJHBh
dHRlcm5zIGFzICRwYXR0ZXJuKSB7DQoJCQl1bnNldCgkZmxkcywgJHBhdCwgJGNvbmQpOw0K
CQkJJGl0ZW1zID0gZXhwbG9kZSgnOjonLCAkcGF0dGVybik7IC8vKyBhcnJheShudWxsLCBu
dWxsLCBudWxsKQ0KCQkJaWYoY291bnQoJGl0ZW1zKSA9PSAzKSBsaXN0KCRmbGRzLCAkcGF0
LCAkY29uZCkgPSAkaXRlbXM7DQoJCQllbHNlIGZvcmVhY2goJGl0ZW1zIGFzICRpdGVtKSB7
DQoJCQkJaWYoJGl0ZW0gJiYgJGl0ZW1bMF0gPT09ICcvJykgJHBhdCA9ICRpdGVtOw0KCQkJ
CWVsc2VpZihwcmVnX21hdGNoKCcvXlxzKltcd1wuXStccyooPzosXHMqW1x3XC5dK1xzKikq
JC8nLCAkaXRlbSkpICRmbGRzID0gJGl0ZW07DQoJCQkJZWxzZSAkY29uZCA9ICRpdGVtOw0K
CQkJfQ0KCQkJaWYoZW1wdHkoJHBhdCkpICRwYXQgPSAnL14uKyQvcyc7DQoJCQlpZihwcmVn
X21hdGNoKCRwYXQsICRzdHJpbmcsICRtYXRjaCkpIHsNCgkJCQlpZihlbXB0eSgkZmxkcykg
JiYgIWlzc2V0KCRjb25kKSkgcmV0dXJuICRzdHJpbmc7DQoJCQkJaWYoIWlzc2V0KCRjb25k
KSkgJGZpZWxkc1tdID0gYXJyYXkoJGZsZHMsICJ7Kn0gTElLRSAnJSRzdHJpbmclJyIpOw0K
CQkJCWVsc2UgJGZpZWxkc1tdID0gYXJyYXkoZW1wdHkoJGZsZHMpID8gJ05VTEwnIDogJGZs
ZHMsIHByZWdfcmVwbGFjZSgkcGF0LCAkY29uZCwgJG1hdGNoWzBdKSk7DQoJCQl9DQoJCX0N
CgkJaWYoISRmaWVsZHMpIHJldHVybiAnMCc7DQoJCWVsc2UgJGV0Y19zZWFyY2hfbWF0Y2hf
cXVlcnkgPSB0cnVlOyANCgkJZm9yZWFjaCgkZmllbGRzIGFzICRmbGlzdCkgew0KCQkJJHdo
ciA9IGFycmF5KCk7DQoJCQkkZmxkcyA9IHN0cnBvcygkZmxpc3RbMF0sICcoJykgIT09IGZh
bHNlID8gcHJlZ19zcGxpdCgnLyhbXlwoXClcLF0qKD86XCgoPzpbXlwoXCldfCg/MSkpKlwp
KT8pKD86XCx8JCkvJywgJGZsaXN0WzBdLCBudWxsLCBQUkVHX1NQTElUX0RFTElNX0NBUFRV
UkUgfCBQUkVHX1NQTElUX05PX0VNUFRZKSA6IGRvX2xpc3QoJGZsaXN0WzBdKTsNCgkJCWZv
cmVhY2goJGZsZHMgYXMgJGZpZWxkKSAkd2hyW10gPSAnKCcuc3RydHIoJGZsaXN0WzFdLCBh
cnJheSgne3sqfX0nID0+ICd7Kn0nLCAneyp9JyA9PiAkZmllbGQpICkuJyknOw0KCQkJJHdo
ZXJlW10gPSBpbXBsb2RlKCIgT1IgIiwgJHdocik7DQoJCX0NCgkJJHdoZXJlID0gJyggJy5p
bXBsb2RlKCcgT1IgJywgJHdoZXJlKS4nICknOw0KCQlyZXR1cm4gKCRub3QgPyAiKCBOT1Qg
JHdoZXJlICkiIDogJHdoZXJlKTsNCgl9DQoNCglAbGlzdCgkc2VwLCAkb3ApID0gYXJyYXko
ZW5kKCRvcHMpLCBrZXkoJG9wcykpOw0KCXVuc2V0KCRvcHNbJG9wXSk7DQoNCgkkcXVvdGVz
ID0gJGJyYWNlcyA9IGFycmF5KCk7DQoJaWYoc3RycG9zKCRzdHJpbmcsICdcIicpICE9PSBm
YWxzZSkgJHN0cmluZyA9IGV0Y19zZWFyY2hfcGFyc2UoJHN0cmluZywgJy9cXFwiKC4qKVxc
XCIvVXMnLCAkcXVvdGVzLCAnfCInLCAnInwnKTsNCglpZihzdHJwb3MoJHN0cmluZywgJygn
KSAhPT0gZmFsc2UpICRzdHJpbmcgPSBldGNfc2VhcmNoX3BhcnNlKCRzdHJpbmcsICcvXCgo
KD86W14oKV18KD8wKSkqKVwpL1UnLCAkYnJhY2VzLCAnWyInLCAnIl0nKTsNCglmb3JlYWNo
KGRvX2xpc3QoJHN0cmluZywgJHNlcCkgYXMgJHZhbHVlKSBpZihzdHJsZW4oJHZhbHVlKSA+
IDApDQoJCSR3aGVyZVtdID0gZXRjX3NlYXJjaF9xdWVyeSgkdmFsdWUsICRmaWVsZHMsICRv
cHMpOw0KCWZvcmVhY2goJGJyYWNlcyBhcyAmJHZhbHVlKSAkdmFsdWUgPSBldGNfc2VhcmNo
X3F1ZXJ5KCR2YWx1ZSwgJGZpZWxkcywgJGV0Y19zZWFyY2hfb3BzKTsNCgl1bnNldCgkdmFs
dWUpOw0KDQoJc3dpdGNoIChjb3VudCgkd2hlcmUpKSB7DQoJCWNhc2UgMDogcmV0dXJuICcw
JzsNCgkJY2FzZSAxOiByZXR1cm4gc3RydHIoc3RydHIoJHdoZXJlWzBdLCAkYnJhY2VzKSwg
JHF1b3Rlcyk7DQoJCWRlZmF1bHQ6IHJldHVybiAnKCAnLnN0cnRyKHN0cnRyKGltcGxvZGUo
IiAkb3AgIiwgJHdoZXJlKSwgJGJyYWNlcyksICRxdW90ZXMpLicgKSc7DQoJfQ0KfQ0KDQpm
dW5jdGlvbiBldGNfc2VhcmNoX2dldF9yZXN1bHRzKCRwYXJhbXMsICRsaXZlPXRydWUpDQp7
DQoJZ2xvYmFsICRwcmVmcywgJHByZXRleHQsICR0aGlzYXJ0aWNsZSwgJHRoaXNwYWdlLCAk
dGhpc2ltYWdlLCAkdGhpc2xpbmssICR0aGlzZmlsZSwgJHRoaXNjYXRlZ29yeSwgJHRoaXNz
ZWN0aW9uLCAkZXRjX3BhZ2VfY291bnRlciwgJGV0Y19zZWFyY2hfbmVnLCAkZXRjX3NlYXJj
aF9vcHMsICRldGNfc2VhcmNoX2Zvcm1zLCAkZXRjX3NlYXJjaF9tYXRjaCwgJGV0Y19zZWFy
Y2hfbWF0Y2hfcXVlcnk7DQoNCglpZighKCRzZWFyY2hfZmllbGRzID0gJHByZWZzWydzZWFy
Y2hhYmxlX2FydGljbGVfZmllbGRzJ10pKSAkc2VhcmNoX2ZpZWxkcyA9ICdUaXRsZSxCb2R5
JzsNCgkkc2FmZV9zZWFyY2hfZmllbGRzID0gJ2AnLmltcGxvZGUoJ2AsYCcsIGRvX2xpc3Qo
JHNlYXJjaF9maWVsZHMpKS4nYCc7DQoNCgkkcHJldGV4dF9xID0gJHByZXRleHRbJ3EnXTsN
CgkkcSA9ICRwcmV0ZXh0WydxJ10gPSAkcGFyYW1zWydxJ107DQoJJG1heCA9ICRuZXdtYXgg
PSBtYXgoaW50dmFsKCRwYXJhbXNbJ2V0Y19saW1pdCddKSwgMCk7DQoJJHBnID0gbWF4KGlu
dHZhbCgkcHJldGV4dFsncGcnXSksIDEpOw0KCSRvZmZzZXQgPSAoJHBnIC0gMSkqJG1heDsN
CgkkbyA9IGFycmF5KCk7DQoJJG1hdGNoZWQgPSBmYWxzZTsNCgkkcmMgPSAkbGltX2l0ID0g
MDsNCgkkZXRjX3NlYXJjaF9vcHMgPSBncHMoJ20nKSA9PT0gJ2V4YWN0JyA/IG51bGwgOiBn
ZXRfcHJlZignZXRjX3NlYXJjaF9vcHMnKTsNCg0KCWZvcmVhY2goJHBhcmFtc1snZXRjX3Nl
YXJjaCddIGFzICRpZCkgew0KCQlpZihpc3NldCgkZXRjX3NlYXJjaF9vcHMpKSB7DQoJCQlp
ZigkaWQpICRldGNfc2VhcmNoX29wcyA9IGdldF9wcmVmKCdldGNfc2VhcmNoX29wc18nLiRp
ZCk7DQoJCQkkZXRjX3NlYXJjaF9vcHMgPSBqc29uX2RlY29kZSgkZXRjX3NlYXJjaF9vcHMg
PT09ICcnID8gZ2V0X3ByZWYoJ2V0Y19zZWFyY2hfb3BzJykgOiAkZXRjX3NlYXJjaF9vcHMs
IHRydWUpOw0KCQl9DQoJCWlmKGlzc2V0KCRldGNfc2VhcmNoX29wc1snTk9UJ10pKSB7JGV0
Y19zZWFyY2hfbmVnID0gJGV0Y19zZWFyY2hfb3BzWydOT1QnXTsgdW5zZXQoJGV0Y19zZWFy
Y2hfb3BzWydOT1QnXSk7fQ0KCQllbHNlICRldGNfc2VhcmNoX25lZyA9ICcnOw0KDQoJCXVu
c2V0KCR0aGlzX2FydGljbGUsICR0aGlzX2ltYWdlLCAkdGhpc19maWxlLCAkdGhpc19saW5r
KTsNCgkJaWYoJGlkKSB7DQoJCQkJaWYoaXNzZXQoJGV0Y19zZWFyY2hfZm9ybXNbJGlkXSkp
ICRyb3cgPSAkZXRjX3NlYXJjaF9mb3Jtc1skaWRdOw0KCQkJCWVsc2UgJHJvdyA9ICRldGNf
c2VhcmNoX2Zvcm1zWyRpZF0gPSBzYWZlX3JvdygncXVlcnksIGZvcm0xLCBmb3JtMiwgdGhp
bmcxLCB0aGluZzIsIHR5cGUnLCAnZXRjX3NlYXJjaCcsICJpZD0kaWQiKTsNCgkJCQlpZihl
bXB0eSgkcm93KSkgY29udGludWU7DQoJCX0NCgkJZWxzZSAkcm93ID0gYXJyYXkoJ3F1ZXJ5
Jz0+JycsICdmb3JtMSc9PicnLCAnZm9ybTInPT4nJywgJ3RoaW5nMSc9PicnLCAndGhpbmcy
Jz0+JycsICd0eXBlJz0+J2FydGljbGUnKTsNCgkJZXh0cmFjdCgkcm93KTsNCgkJDQoJCWlm
KCFlbXB0eSgkcGFyYW1zWydldGNfZiddKSkgJGZvcm0gPSAkcGFyYW1zWydldGNfZiddOw0K
CQllbHNlICRmb3JtID0gJGxpdmUgPyAoJGZvcm0xID8gJGZvcm0xIDogJ2V0Y19zZWFyY2hf
cmVzdWx0cycpIDogKCRmb3JtMiA/ICRmb3JtMiA6ICdzZWFyY2hfcmVzdWx0cycpOw0KCQlp
ZighZW1wdHkoJHBhcmFtc1snZXRjX3QnXSkpICR0aGluZyA9ICRwYXJhbXNbJ2V0Y190J107
DQoJCWVsc2UgJHRoaW5nID0gJGxpdmUgPyAoJHRoaW5nMSA/ICR0aGluZzEgOiBmZXRjaF9m
b3JtKCRmb3JtKSkgOiAoJHRoaW5nMiA/ICR0aGluZzIgOiBmZXRjaF9mb3JtKCRmb3JtKSk7
DQoNCgkJaWYoISRxdWVyeSkgeyRxdWVyeSA9ICd7Jy4kc2VhcmNoX2ZpZWxkcy4nfSc7ICR0
eXBlID0gJ2FydGljbGUnO30NCgkJZWxzZSAkcXVlcnkgPSB0cmltKHBhcnNlKCRxdWVyeSkp
Ow0KDQoJCWlmKHByZWdfbWF0Y2goJy9eKC4rKVxiKExJTUlUXHMrKFxkKylcYlxzKiw/XHMq
KFxkKilcYi4qKSQvaScsICRxdWVyeSwgJG1hdGNoZXMpKSB7DQoJCQkkcXVlcnkgPSAkbWF0
Y2hlc1sxXTsgJGxpbWl0ID0gJG1hdGNoZXNbMl07DQoJCQlpZigkbWF0Y2hlc1s0XSkgeyRv
ZmYgPSAkbWF0Y2hlc1szXTsgJGxpbSA9ICRtYXRjaGVzWzRdO30NCgkJCWVsc2UgeyRvZmYg
PSAwOyAkbGltID0gJG1hdGNoZXNbM107fQ0KCQl9DQoJCWVsc2UgJGxpbWl0ID0gJyc7DQoN
CgkJaWYoJG5ld21heCA+IDApICRsaW1faXQgPSAkbGltaXQgPyAiIExJTUlUICIuKCRvZmZz
ZXQgKyAkb2ZmKS4iLCAiLm1pbigkbGltIC0gJG9mZnNldCwgJG5ld21heCkgOiAiIExJTUlU
ICRvZmZzZXQsICRuZXdtYXgiOw0KCQllbHNlICRsaW1faXQgPSAnJzsNCg0KCQlpZihwcmVn
X21hdGNoKCcvXiguKylcYihPUkRFUlxzK0JZXGIuKykkL1VpJywgJHF1ZXJ5LCAkbWF0Y2hl
cykpIHsNCgkJCSRxdWVyeSA9ICRtYXRjaGVzWzFdOyAkb3JkZXIgPSAkbWF0Y2hlc1syXTsN
CgkJfSBlbHNlICRvcmRlciA9ICcnOw0KCQkNCgkJJGV0Y19zZWFyY2hfbWF0Y2ggPSB0cnVl
Ow0KCQkkZXRjX3NlYXJjaF9tYXRjaF9xdWVyeSA9IGZhbHNlOw0KCQkkcXVlcnkgPSBwcmVn
X3JlcGxhY2VfY2FsbGJhY2soJy9ceygoPzpbXnt9XXwoPzApKSspXH0vVScsICdldGNfc2Vh
cmNoX2dwcycsICRvbGRxdWVyeSA9ICRxdWVyeSk7DQoJCWlmKCEkZXRjX3NlYXJjaF9tYXRj
aCB8fCBlbXB0eSgkcXVlcnkpIHx8ICEkZXRjX3NlYXJjaF9tYXRjaF9xdWVyeSAmJiAoJG9s
ZHF1ZXJ5ICE9PSAkcXVlcnkpKSBjb250aW51ZTsNCgkJZWxzZSAkbWF0Y2hlZCA9IHRydWU7
DQoNCgkJaWYoISgkY3VzdG9tID0gcHJlZ19tYXRjaCgnL15TRUxFQ1RcYi9pJywgJHF1ZXJ5
KSkpIHN3aXRjaCgkdHlwZSkgey8vZGVmYXVsdCBzZWFyY2gNCgkJCWNhc2UgJ2ltYWdlJyA6
IGNhc2UgJ2ZpbGUnIDogY2FzZSAnbGluaycgOiBjYXNlICdjYXRlZ29yeScgOiBjYXNlICdz
ZWN0aW9uJyA6DQoJCQkkdGFibGUgPSBzYWZlX3BmeCgndHhwXycuJHR5cGUpOw0KCQkJJGNv
dW50ID0gJ1NFTEVDVCBDT1VOVCgqKSBGUk9NICcuJHRhYmxlLicgV0hFUkUgJy4oJHR5cGUg
PT0gJ2ZpbGUnID8gJ3N0YXR1cyA+PSA0IEFORCAnIDogJycpLiRxdWVyeTsNCgkJCSRxdWVy
eSA9ICdTRUxFQ1QgKiBGUk9NICcuJHRhYmxlLicgV0hFUkUgJy4oJHR5cGUgPT0gJ2ZpbGUn
ID8gJ3N0YXR1cyA+PSA0IEFORCAnIDogJycpLiRxdWVyeTsNCgkJCWJyZWFrOw0KDQoJCQlk
ZWZhdWx0IDoNCgkJCSRzX2ZpbHRlciA9ICcnOw0KCQkJJHJzID0gc2FmZV9jb2x1bW4oIm5h
bWUiLCAidHhwX3NlY3Rpb24iLCAic2VhcmNoYWJsZSAhPSAnMSciKTsNCgkJCWlmICgkcnMp
IHsNCgkJCQlmb3JlYWNoKCRycyBhcyAkbmFtZSkgJHNfZmlsdGVyIC49ICIgQU5EIFNlY3Rp
b24gIT0gJyIuZG9TbGFzaCgkbmFtZSkuIiciOw0KCQkJfQ0KCQkJJHRhYmxlID0gc2FmZV9w
ZngoJ3RleHRwYXR0ZXJuJyk7DQoJCQkkdHMgPSBzdHJmdGltZSgnJVktJW0tJWQgJUg6JU06
JVMnKTsNCgkJCSRjb3VudCA9ICJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdGFibGUgV0hFUkUg
U3RhdHVzID49IDQgQU5EIFBvc3RlZCA8PSAnJHRzJyBBTkQgKEV4cGlyZXMgSVMgTlVMTCBP
UiBFeHBpcmVzPj0nJHRzJykgJHNfZmlsdGVyIEFORCAkcXVlcnkiOw0KCQkJJHF1ZXJ5ID0g
IlNFTEVDVCAqIi4oJG9yZGVyID8gJycgOiAiLCBNQVRDSCAoJHNhZmVfc2VhcmNoX2ZpZWxk
cykgQUdBSU5TVCAoJyRxJykgQVMgc2NvcmUiKS4iIEZST00gJHRhYmxlIFdIRVJFIFN0YXR1
cyA+PSA0IEFORCBQb3N0ZWQgPD0gJyR0cycgQU5EIChFeHBpcmVzIElTIE5VTEwgT1IgRXhw
aXJlcz49JyR0cycpICRzX2ZpbHRlciBBTkQgJHF1ZXJ5IjsNCgkJCWlmKCEkb3JkZXIpICRv
cmRlciA9ICcgT1JERVIgQlkgc2NvcmUgREVTQyc7DQoJCX0NCg0KCQkkY291bnQgPSAhJGN1
c3RvbSA/ICRjb3VudCA6ICgNCgkJCSRsaW1pdCA/ICJTRUxFQ1QgY291bnQoKikgRlJPTSAo
Ii5wcmVnX3JlcGxhY2UoIi9eU0VMRUNUXGIoPzpbXlwnXXxcJy4qXCcpK1xiRlJPTVxiL1Vp
IiwgJ1NFTEVDVCAxIEZST00nLCAkcXVlcnkuJGxpbWl0KS4iKSBjb3VudCIgDQoJCQkJOiBw
cmVnX3JlcGxhY2UoIi9eU0VMRUNUXGIoPzpbXlwnXXxcJy4qXCcpK1xiRlJPTVxiL1VpIiwg
J1NFTEVDVCBjb3VudCgqKSBGUk9NJywgJHF1ZXJ5KQ0KCQkpOw0KDQovLwkJaWYoISRsaXZl
KSAkb1tdPSc8IS0tJy4kcXVlcnkuJy0tPic7DQoNCgkJJGNvdW50ID0gaW50dmFsKGdldFRo
aW5nKCRjb3VudCkpOw0KCQkkcmMgKz0gJGNvdW50Ow0KCQlpZigkY291bnQgPD0gJG9mZnNl
dCkgeyRvZmZzZXQgLT0gJGNvdW50OyBjb250aW51ZTt9IGVsc2UgJG9mZnNldCA9IDA7DQoJ
CSRycyA9ICgkbWF4IDw9IDAgfHwgJG5ld21heCA+IDAgPyBnZXRSb3dzKCRxdWVyeS4kb3Jk
ZXIuKCRsaW1faXQgPyAkbGltX2l0IDogJGxpbWl0KSkgOiBhcnJheSgpKTsNCgkJJHJlcGxh
Y2VtZW50cyA9IGFycmF5KCk7DQoJCXByZWdfbWF0Y2hfYWxsKCIvXHsoLispXH0vVSIsICR0
aGluZywgJG1hdGNoZXMsIFBSRUdfU0VUX09SREVSKTsNCg0KCQlpZigkdHlwZSAmJiBpc3Nl
dCgkeyd0aGlzJy4kdHlwZX0pKSAkeyd0aGlzXycuJHR5cGV9ID0gJHsndGhpcycuJHR5cGV9
Ow0KCQkkY291bnQgPSBjb3VudCgkcnMpIC0gMTsNCgkJaWYoIWVtcHR5KCRycykpIGZvcmVh
Y2goJHJzIGFzICRpID0+ICRhKSB7DQoJCQlmb3JlYWNoKCRtYXRjaGVzIGFzICRtYXRjaCkg
ew0KCQkJCWlmKCRtYXRjaFsxXVswXSA9PT0gJyonKSB7JG1hdGNoWzFdID0gc3Vic3RyKCRt
YXRjaFsxXSwgMSk7ICRlc2NhcGUgPSBmYWxzZTt9DQoJCQkJZWxzZSAkZXNjYXBlID0gdHJ1
ZTsNCgkJCQlpZihpc3NldCgkYVskbWF0Y2hbMV1dKSkgJHJlcGxhY2VtZW50c1skbWF0Y2hb
MF1dID0gJGVzY2FwZSA/IGh0bWxzcGVjaWFsY2hhcnMoJGFbJG1hdGNoWzFdXSwgRU5UX1FV
T1RFUykgOiAkYVskbWF0Y2hbMV1dOw0KCQkJfQ0KCQkJaWYoJHR5cGUpIHsNCgkJCQkkdmFs
ID0gJHR5cGUuKCR0eXBlID09PSAnZmlsZScgPyAnX2Rvd25sb2FkJyA6ICcnKS4nX2Zvcm1h
dF9pbmZvJzsNCgkJCQlpZigkdHlwZSA9PSAnYXJ0aWNsZScpIGFydGljbGVfZm9ybWF0X2lu
Zm8oJGEpOw0KCQkJCWVsc2VpZigkdHlwZSA9PSAnZmlsZScgfHwgJHR5cGUgPT0gJ2ltYWdl
JyB8fCAkdHlwZSA9PSAnbGluaycpICR7J3RoaXMnLiR0eXBlfSA9ICR2YWwoJGEpOw0KCQkJ
CWVsc2UgJHsndGhpcycuJHR5cGV9ID0gJGE7DQoJCQkJJHsndGhpcycuJHR5cGV9Wydpc19m
aXJzdCddID0gJGkgPT0gMDsNCgkJCQkkeyd0aGlzJy4kdHlwZX1bJ2lzX2xhc3QnXSA9ICRp
ID09ICRjb3VudDsNCgkJCX0NCgkJCSRvW10gPSBwYXJzZShzdHJ0cigkdGhpbmcsICRyZXBs
YWNlbWVudHMpKTsNCgkJfQ0KCQlpZigkdHlwZSAmJiBpc3NldCgkeyd0aGlzXycuJHR5cGV9
KSkgJHsndGhpcycuJHR5cGV9ID0gJHsndGhpc18nLiR0eXBlfTsNCgkJaWYoJG1heCA+IDAp
ICRuZXdtYXggPSAkbWF4IC0gY291bnQoJG8pOw0KCX0NCg0KCWlmKGVtcHR5KCR0aGlzcGFn
ZSkpIHsNCgkJJGV0Y19wYWdlX2NvdW50ZXJbJ2Zyb20nXSA9ICgkcGcgLSAxKSokbWF4ICsg
MTsNCgkJJGV0Y19wYWdlX2NvdW50ZXJbJ3RvJ10gPSAkbWF4ID4gMCA/IG1pbigkZXRjX3Bh
Z2VfY291bnRlclsnZnJvbSddICsgJG1heCAtIDEsICRyYykgOiAkcmM7DQoJCSR0aGlzcGFn
ZVsncGcnXSAgICAgICAgICA9ICRwZzsNCgkJJHRoaXNwYWdlWydudW1QYWdlcyddICAgID0g
JG1heCA+IDAgPyBjZWlsKCRyYy8kbWF4KSA6IDE7DQoJCSR0aGlzcGFnZVsncyddICAgICAg
ICAgICA9ICRwcmV0ZXh0WydzJ107DQoJCSR0aGlzcGFnZVsnYyddICAgICAgICAgICA9ICRw
cmV0ZXh0WydjJ107DQoJCSR0aGlzcGFnZVsnY29udGV4dCddICAgICA9ICdhcnRpY2xlJzsN
CgkJJHRoaXNwYWdlWydncmFuZF90b3RhbCddID0gJHJjOw0KCQkkdGhpc3BhZ2VbJ3RvdGFs
J10gICAgICAgPSAkcmMgLSAkZXRjX3BhZ2VfY291bnRlclsnZnJvbSddICsgMTsNCgl9DQoJ
aWYoJGxpdmUgJiYgJGxpbV9pdCAmJiAkdGhpc3BhZ2VbJ251bVBhZ2VzJ10gPiAkcGcpICRv
W10gPSBnVHh0KCdtb3JlJykuJyZoZWxsaXA7JzsNCg0KCSRwcmV0ZXh0WydxJ10gPSAkcHJl
dGV4dF9xOw0KLyogIGVjaG8oJzw/eG1sIHZlcnNpb249XCcxLjBcJyBlbmNvZGluZz1cJ3V0
Zi04XCcgPz4nKTsqLw0KCXJldHVybiAkbWF0Y2hlZCA/ICRvIDogbnVsbDsNCn0NCg0KZnVu
Y3Rpb24gZXRjX3NlYXJjaF9yZXN1bHRfY291bnQoJGF0dHMpDQp7DQoJZ2xvYmFsICR0aGlz
cGFnZSwgJGV0Y19wYWdlX2NvdW50ZXI7DQoJaWYoZW1wdHkoJHRoaXNwYWdlKSB8fCBlbXB0
eSgkZXRjX3BhZ2VfY291bnRlcikpIHJldHVybjsNCg0KCWV4dHJhY3QobEF0dHMoYXJyYXko
DQoJCSd0ZXh0JyAgID0+IGdUeHQoJ3Nob3dpbmdfc2VhcmNoX3Jlc3VsdHMnKQ0KCSksICRh
dHRzKSk7DQoNCglyZXR1cm4oc3RydHIoJHRleHQsIGFycmF5KCd7ZnJvbX0nID0+ICRldGNf
cGFnZV9jb3VudGVyWydmcm9tJ10sICd7dG99JyA9PiAkZXRjX3BhZ2VfY291bnRlclsndG8n
XSwgJ3t0b3RhbH0nID0+ICR0aGlzcGFnZVsnZ3JhbmRfdG90YWwnXSwgJ3twYWdlfScgPT4g
JHRoaXNwYWdlWydwZyddLCAne3BhZ2VzfScgPT4gJHRoaXNwYWdlWydudW1QYWdlcyddKSkp
Ow0KfQ0KDQpmdW5jdGlvbiBldGNfc2VhcmNoX3Jlc3VsdF9leGNlcnB0KCRhdHRzKQ0Kew0K
DQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ2JyZWFrJyAgID0+ICcgJiM4MjMwOycsDQoJ
CSdoaWxpZ2h0JyA9PiAnc3Ryb25nJywNCgkJJ2xpbWl0JyAgID0+IDUsDQoJCSdzaXplJyAg
ID0+IDUwLA0KCQknc2hvd2Fsd2F5cycgICA9PiAiMCIsDQoJCSd0eXBlJyAgID0+ICdhcnRp
Y2xlJywNCgkJJ2ZpZWxkJyAgID0+ICdib2R5Jw0KCSksICRhdHRzKSk7DQoNCglnbG9iYWwg
JHsndGhpcycuJHR5cGV9LCAkcHJldGV4dDsNCglpZihlbXB0eSgkeyd0aGlzJy4kdHlwZX0p
IHx8IGVtcHR5KCR7J3RoaXMnLiR0eXBlfVskZmllbGRdKSkgcmV0dXJuICcnOw0KCSRtID0g
JHByZXRleHRbJ20nXTsNCglpZigoJHEgPSB0cmltKGdwcygncScpKSkgPT09ICcnKSByZXR1
cm47DQoNCgkkcmVzdWx0ID0gcHJlZ19yZXBsYWNlKCcvXHMrLycsICcgJywgc3RyaXBfdGFn
cyhzdHJfcmVwbGFjZSgnPjwnLCAnPiA8JywgJHsndGhpcycuJHR5cGV9WyRmaWVsZF0pKSk7
DQoNCgkkb3BzID0ganNvbl9kZWNvZGUoZ2V0X3ByZWYoJ2V0Y19zZWFyY2hfb3BzJyksIHRy
dWUpOw0KCWZvcmVhY2goJG9wcyBhcyAmJHZhbCkgJHZhbCA9IHByZWdfcXVvdGUoJHZhbCwg
Jy8nKTsNCgkkb3BzID0gaW1wbG9kZSgnfCcsICRvcHMpOw0KDQoJJHEgPSBwcmVnX3F1b3Rl
KHN0cl9yZXBsYWNlKGFycmF5KCcoJywgJyknKSwgJycsICRxKSwgJy8nKTsNCgkkcXVvdGVz
ID0gYXJyYXkoKTsNCglpZigkbSAhPT0gJ2V4YWN0JyAmJiBzdHJwb3MoJHEsICciJykgIT09
IGZhbHNlKSAkcSA9IGV0Y19zZWFyY2hfcGFyc2UoJHEsICcvKCIuKiIpL1VzJywgJHF1b3Rl
cywgJygnLCAnKScsIGFycmF5KCciJyA9PiAnJykpOw0KCSRxID0gaHRtbHNwZWNpYWxjaGFy
cygkcSwgRU5UX1FVT1RFUyk7DQoNCglpZiAoJG0gPT09ICdleGFjdCcpDQoJew0KCQkkcmVn
ZXhfc2VhcmNoID0gJy8oPzpcR3xccykuezAsJy4kc2l6ZS4nfScuJHEuJy57MCwnLiRzaXpl
Lid9KD86XHN8JCkvaXUnOw0KCQkkcmVnZXhfaGlsaXRlID0gJHE7DQoJfQ0KCWVsc2UNCgl7
DQoJCSRyZWdleF9oaWxpdGUgPSBzdHJ0cihwcmVnX3JlcGxhY2UoIi8oPzokb3BzKSsvIiwg
J3wnLCAkcSksIGRvU3BlY2lhbCgkcXVvdGVzKSk7DQoJCSRyZWdleF9zZWFyY2ggPSAnLyg/
OlxHfFxzKS57MCwnLiRzaXplLid9KCcuJHJlZ2V4X2hpbGl0ZS4nKS57MCwnLiRzaXplLid9
KD86XHN8JCkvaXUnOw0KCX0NCg0KCXByZWdfbWF0Y2hfYWxsKCRyZWdleF9zZWFyY2gsICRy
ZXN1bHQsICRjb25jYXQpOw0KCSRjb25jYXQgPSAkY29uY2F0WzBdOw0KDQoJJG1pbiA9IG1p
bigkbGltaXQsIGNvdW50KCRjb25jYXQpKTsNCglmb3IgKCRpID0gMCwgJHIgPSBhcnJheSgp
OyAkaSA8ICRtaW47ICRpKyspDQoJew0KCQkkcltdID0gdHJpbSgkY29uY2F0WyRpXSk7DQoJ
fQ0KDQoJJGNvbmNhdCA9IGpvaW4oJGJyZWFrLm4sICRyKTsNCgkkY29uY2F0ID0gcHJlZ19y
ZXBsYWNlKCcvXltePl0rPi9VJywgJycsICRjb25jYXQpOw0KDQoJJGNvbmNhdCA9IHByZWdf
cmVwbGFjZSgnLygnLiRyZWdleF9oaWxpdGUuJykvaScsICI8JGhpbGlnaHQ+JDE8LyRoaWxp
Z2h0PiIsICRjb25jYXQpOw0KDQoJaWYoJGNvbmNhdCkgcmV0dXJuIChzdHJsZW4oJHJlc3Vs
dCkgPiAkc2l6ZSA/ICRicmVhay4kY29uY2F0LiRicmVhayA6IHRyaW0oJGNvbmNhdCkpOw0K
CWVsc2VpZighJHNob3dhbHdheXMpIHJldHVybiAnJzsNCg0KCSRyZXN1bHQgPSBleHBsb2Rl
KCc8Y3V0IC8+Jywgd29yZHdyYXAoJHJlc3VsdCwgMiokc2l6ZSwgJzxjdXQgLz4nLCB0cnVl
KSwgMik7DQoJcmV0dXJuICRyZXN1bHRbMF0uKGNvdW50KCRyZXN1bHQpID4gMSA/ICRicmVh
ayA6ICcnKTsNCn0NCg0KZnVuY3Rpb24gZXRjX3NlYXJjaF9jYWxsYmFjaygkZXZlbnQsICRz
dGVwKQ0Kew0KCWdsb2JhbCAkbm9sb2c7DQoJJG5vbG9nID0gdHJ1ZTsNCg0KLy8JaGVhZGVy
KCdDb250ZW50LVR5cGU6IHRleHQvaHRtbCcpOw0KCWV4aXQoZXRjX3NlYXJjaF9yZXN1bHRz
KGFycmF5KCksIG51bGwsIHRydWUpKTsNCn0NCg0KZnVuY3Rpb24gZXRjX3NlYXJjaF9ncHMo
JG1hdGNoZXMpIHsNCglnbG9iYWwgJHByZXRleHQsICRldGNfc2VhcmNoX29wcywgJGV0Y19z
ZWFyY2hfbWF0Y2gsICRldGNfc2VhcmNoX25lZzsNCgkkc2xhc2ggPSBpc3NldCgkZXRjX3Nl
YXJjaF9uZWcpOy8vcXVlcnkgZGINCgkkY3VzdG9tID0gJG1hdGNoZXNbMV1bMF0gPT09ICc/
JzsNCglpZighJGN1c3RvbSAmJiAkc2xhc2gpIHskcSA9ICRwcmV0ZXh0WydxJ107ICRmaWVs
ZHMgPSAkbWF0Y2hlc1sxXTt9DQoJZWxzZSB7DQoJCWlmKCRjdXN0b20pICRtYXRjaGVzWzFd
ID0gc3Vic3RyKCRtYXRjaGVzWzFdLCAxKTsNCgkJaWYoJHNsYXNoKSBsaXN0KCRxLCAkZmll
bGRzKSA9IGV4cGxvZGUoJzo6JywgJG1hdGNoZXNbMV0sIDIpICsgYXJyYXkobnVsbCwgbnVs
bCk7DQoJCWVsc2UgJHEgPSAkbWF0Y2hlc1sxXTsNCgkJbGlzdCgkcSwgJHNlcCkgPSBleHBs
b2RlKCcmJywgJHEsIDIpICsgYXJyYXkobnVsbCwgJywnKTsNCgkJbGlzdCgkcSwgJGRlZikg
PSBleHBsb2RlKCd8JywgJHEsIDIpICsgYXJyYXkobnVsbCwgbnVsbCk7DQovLwkJJHEgPSBz
dHJfcmVwbGFjZSgnICcsICdfJywgJHEpOw0KLyoJCWlmKCFpc3NldCgkX1JFUVVFU1RbJHFd
KSkgaWYoaXNzZXQoJGRlZikpICRxID0gJGRlZjsgZWxzZSB7JHEgPSAnJzsgJGV0Y19zZWFy
Y2hfbWF0Y2ggPSBmYWxzZTt9DQoJCWVsc2UqLyAkcSA9IChpc19hcnJheSgkcSA9IGdwcygk
cSkpID8gaW1wbG9kZSgkc2VwLCAkcSkgOiAkcSk7DQoNCgkJaWYoJHEgPT09ICcnKSB7aWYo
aXNzZXQoJGRlZikpICRxID0gJGRlZjsgZWxzZSAkZXRjX3NlYXJjaF9tYXRjaCA9IGZhbHNl
O30NCgkJZWxzZWlmKCRzbGFzaCkgJHEgPSBhZGRjc2xhc2hlcyhkb1NsYXNoKCRxKSwgJyVf
Jyk7DQoJfQ0KCXJldHVybiAhZW1wdHkoJGZpZWxkcykgPyBldGNfc2VhcmNoX3F1ZXJ5KCRx
LCAkZmllbGRzLCAkZXRjX3NlYXJjaF9vcHMpIDogJHE7DQp9DQoNCmZ1bmN0aW9uIGV0Y19z
ZWFyY2hfdGVybSgkZXZlbnQsICRzdGVwKQ0Kew0KCWdsb2JhbCAkcHJldGV4dCwgJGV0Y19z
ZWFyY2hfbWF0Y2g7DQoJJGV0Y19zZWFyY2hfbWF0Y2ggPSB0cnVlOw0KCWlmKCRwcmV0ZXh0
WydxJ10gPT09ICcnKSAkcHJldGV4dFsncSddID0gZ3BzKCdldGNfc2VhcmNoJyk7DQoJJGV0
Y19mb3JtYXQgPSBodG1sc3BlY2lhbGNoYXJzX2RlY29kZShncHMoJ2V0Y19xJykpOw0KCWlm
KCRldGNfZm9ybWF0ID09PSAnJykgcmV0dXJuOw0KCSRwcmV0ZXh0WydxJ10gPSBwcmVnX3Jl
cGxhY2VfY2FsbGJhY2soIi9ceyguKylcfS9VcyIsICdldGNfc2VhcmNoX2dwcycsICRldGNf
Zm9ybWF0KTsNCglpZighJGV0Y19zZWFyY2hfbWF0Y2gpICRwcmV0ZXh0WydxJ10gPSAnJzsN
Cn0NCg0KZnVuY3Rpb24gZXRjX3NlYXJjaF9yZXN1bHRzKCRhdHRzLCAkdGhpbmc9bnVsbCwg
JGxpdmU9ZmFsc2UpDQp7DQoJZ2xvYmFsICRoYXNfYXJ0aWNsZV90YWcsICRwcmVmcywgJHBy
ZXRleHQ7DQoJJGhhc19hcnRpY2xlX3RhZyA9IHRydWU7DQoNCglleHRyYWN0KGxBdHRzKGFy
cmF5KA0KCQknaWQnICAgICAgICAgPT4gJycsDQovLwkJJ2Zvcm1hdCcgICAgICAgICA9PiAn
e3F9JywNCgkJJ3F1ZXJ5JyAgICAgICAgID0+IG51bGwsDQovLwkJJ2h0bWxfaWQnICAgICAg
ICAgPT4gJycsDQoJCSdmb3JtJyAgICAgICAgID0+ICcnLA0KCQknbGltaXQnICAgICA9PiAx
MCwNCgkJJ3dyYXB0YWcnICAgICAgICAgPT4gJycsDQoJCSdjbGFzcycgICAgICAgICA9PiAn
JywNCgkJJ2JyZWFrJyAgID0+ICcnDQoJKSwgJGF0dHMpKTsNCg0KCWlmKGlzc2V0KCRxdWVy
eSkpICRwYXJhbXMgPSBhcnJheSgnZXRjX3NlYXJjaCcgPT4gZG9fbGlzdCgkaWQpLCAncScg
PT4gJHF1ZXJ5KTsNCgllbHNlIHsNCgkJZXh0cmFjdCgkcGFyYW1zID0gZ3BzYShhcnJheSgn
ZXRjX3NlYXJjaCcsICdldGNfbGltaXQnLCAnZXRjX3EnLCAnZXRjX2YnLCAnZXRjX3cnLCAn
ZXRjX2InKSkpOw0KCQkkcGFyYW1zWydxJ10gPSB0cmltKCRwcmV0ZXh0WydxJ10pOw0KCQlp
ZigkcGFyYW1zWydxJ10gPT09ICcnKSByZXR1cm4gJyc7DQoNCgkJaWYoJGV0Y19zZWFyY2gp
IHsNCgkJCUBsaXN0KCRoYXNoLCAkc2VhcmNoKSA9IGV4cGxvZGUoJy4nLCAkZXRjX3NlYXJj
aCwgMik7DQoJCQlpZihtZDUoZ2V0X3ByZWYoJ2V0Y19zZWFyY2hfaGFzaCcpLigkbGl2ZSA/
ICRldGNfZi4kZXRjX3cuJGV0Y19iLmludHZhbCgkZXRjX2xpbWl0KTogJycpLiRldGNfcS4k
c2VhcmNoKSAhPT0gJGhhc2gpIHJldHVybiAnJzsNCgkJCSRwYXJhbXNbJ2V0Y19zZWFyY2gn
XSA9ICRzZWFyY2g7DQoJCX0NCgkJJHBhcmFtc1snZXRjX3NlYXJjaCddID0gYXJyYXlfbWFw
KCdpbnR2YWwnLCBkb19saXN0KCRwYXJhbXNbJ2V0Y19zZWFyY2gnXSwgJy4nKSk7DQoJCWlm
KCRpZCAhPT0gJycpICRwYXJhbXNbJ2V0Y19zZWFyY2gnXSA9ICRpZFswXSA9PT0gJy0nID8g
YXJyYXlfZGlmZigkcGFyYW1zWydldGNfc2VhcmNoJ10sIGRvX2xpc3Qoc3Vic3RyKCRpZCwg
MSkpKSA6IGFycmF5X2ludGVyc2VjdCgkcGFyYW1zWydldGNfc2VhcmNoJ10sIGRvX2xpc3Qo
JGlkKSk7DQoJfQ0KCWlmKCRwYXJhbXNbJ3EnXSA9PT0gJycgfHwgZW1wdHkoJHBhcmFtc1sn
ZXRjX3NlYXJjaCddKSkgcmV0dXJuICcnOw0KCWlmKCRsaXZlKSB7JHdyYXB0YWcgPSAkcGFy
YW1zWydldGNfdyddOyAkYnJlYWsgPSAkcGFyYW1zWydldGNfYiddOyAkZm9ybSA9ICRwYXJh
bXNbJ2V0Y19mJ107ICRsaW1pdCA9ICRwYXJhbXNbJ2V0Y19saW1pdCddO30NCg0KCSRmYWxz
ZVBhcnQgPSBpc3NldCgkdGhpbmcpID8gRXZhbEVsc2UoJHRoaW5nLCAwKSA6IGdUeHQoJ25v
X3NlYXJjaF9tYXRjaGVzJyk7DQoJaWYoJGZvcm0pICR0aGluZyA9IGZldGNoX2Zvcm0oJGZv
cm0pOw0KCSR0aGluZyA9IGlzc2V0KCR0aGluZykgPyBFdmFsRWxzZSgkdGhpbmcsIDEpIDog
Jyc7DQoNCglpZigkbGltaXQpICRwYXJhbXNbJ2V0Y19saW1pdCddID0gJGxpbWl0Ow0KCWlm
KCRmb3JtKSAkcGFyYW1zWydldGNfZiddID0gJGZvcm07DQoJaWYoJHRoaW5nKSAkcGFyYW1z
WydldGNfdCddID0gJHRoaW5nOw0KDQoJJHBhcmFtc1sncSddID0gZG9TbGFzaCgkcGFyYW1z
WydxJ10pOw0KCWlmKCFpc3NldCgkcXVlcnkpKSAkcGFyYW1zWydxJ10gPSBhZGRjc2xhc2hl
cygkcGFyYW1zWydxJ10sICclXycpOw0KDQoJJG8gPSBldGNfc2VhcmNoX2dldF9yZXN1bHRz
KCRwYXJhbXMsICRsaXZlKTsNCglyZXR1cm4gKCRvID8gZG9XcmFwKCRvLCAkd3JhcHRhZywg
JGJyZWFrLCAkY2xhc3MpIDogKCRvID09PSBudWxsID8gJycgOiBwYXJzZSgkZmFsc2VQYXJ0
KSkpOw0KfQ0KDQpmdW5jdGlvbiBldGNfc2VhcmNoKCRhdHRzLCAkdGhpbmcgPSAnJykNCnsN
CglnbG9iYWwgJHByZWZzOw0KCWV4dHJhY3QobEF0dHMoYXJyYXkoDQoJCSdpZCcgICAgICAg
ICA9PiAnMCcsDQoJCSd0YXJnZXQnICAgICAgICAgPT4gJycsDQoJCSdsaXZlJyAgICAgICAg
ID0+ICc2MDAnLA0KCQknbWF0Y2gnICAgICAgICAgPT4gJycsDQoJCSdhY3Rpb24nICAgICAg
ICAgPT4gbnVsbCwNCgkJJ2Zvcm1hdCcgICAgICAgICA9PiAnJywNCgkJJ21pbmxlbmd0aCcg
ICAgICAgICAgICA9PiAxLA0KCQknaHRtbF9pZCcgICAgICAgICA9PiBzdHJfcmVwbGFjZSgn
LicsICcnLCB1bmlxaWQoImxpdmVfc2VhcmNoXyIsIHRydWUpKSwNCgkJJ2xhYmVsJyAgICAg
ICAgICAgPT4gZ1R4dCgnc2VhcmNoJyksDQoJCSdzaXplJyAgICAgICAgICAgID0+IDAsDQoJ
CSdwbGFjZWhvbGRlcicgICA9PiAnJywNCgkJJ2xpbWl0JyAgICAgPT4gMCwNCgkJJ2Zvcm0n
ICAgICAgICAgPT4gJycsDQoJCSdjbGFzcycgICAgICAgICA9PiAnJywNCgkJJ3dyYXB0YWcn
ICAgICAgICAgPT4gJycsDQoJCSdicmVhaycgICA9PiAnYnInDQoJKSwgJGF0dHMpKTsNCg0K
CSRpZCA9IGltcGxvZGUoJy4nLCBkb19saXN0KCRpZCkpOw0KCSRsaXZlID0gLyokdGhpbmcg
PyAwIDoqLyBpbnR2YWwoJGxpdmUpOw0KCSRsaW1pdCA9IGludHZhbCgkbGltaXQpOw0KCSRt
aW5sZW5ndGggPSBpbnR2YWwoJG1pbmxlbmd0aCk7DQoJJHFzID0gYXJyYXkoKTsNCglpZigk
YWN0aW9uID09PSBudWxsKSAkYWN0aW9uID0gcmh1Ow0KCWVsc2UgcGFyc2Vfc3RyKHBhcnNl
X3VybCgkYWN0aW9uLCBQSFBfVVJMX1FVRVJZKSwgJHFzKTsNCgl1bnNldCgkcXNbJ3EnXSwg
JHFzWydtJ10sICRxc1sncGcnXSwgJHFzWydldGNfc2VhcmNoJ10sICRxc1snZXRjX2xpbWl0
J10sICRxc1snZXRjX3EnXSk7DQovLwkkaGFzaCA9ICRpZCB8fCAkbGltaXQgPyBtZDUoJHBy
ZWZzWydldGNfc2VhcmNoX2hhc2gnXS4kbGltaXQuJGlkKS4nLicuJGlkIDogJyc7DQoJJGhh
c2ggPSAkaWQgPyBtZDUoJHByZWZzWydldGNfc2VhcmNoX2hhc2gnXS4kZm9ybWF0LiRpZCku
Jy4nLiRpZCA6ICcnOw0KCSRxID0gKCEkaWQgfHwgZ3BzKCdldGNfc2VhcmNoJykgPT0gJGhh
c2ggPyBodG1sc3BlY2lhbGNoYXJzKGdwcygncScpKSA6ICcnKTsNCg0KCSRpbnB1dHMgPSAn
JzsNCglpZigkaGFzaCkgJGlucHV0cyAuPSAnPGlucHV0IHR5cGU9ImhpZGRlbiIgZGF0YS1l
dGM9InNlYXJjaCIgbmFtZT0iZXRjX3NlYXJjaCIgdmFsdWU9IicuJGhhc2guJyIgLz4nLm47
DQoJaWYoJGZvcm1hdCkgJGlucHV0cyAuPSAnPGlucHV0IHR5cGU9ImhpZGRlbiIgZGF0YS1l
dGM9InNlYXJjaCIgbmFtZT0iZXRjX3EiIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJGZv
cm1hdCkuJyIgLz4nLm47DQovLwlpZigkbGltaXQpICRpbnB1dHMgLj0gJzxpbnB1dCB0eXBl
PSJoaWRkZW4iIGRhdGEtZXRjPSJzZWFyY2giIG5hbWU9ImV0Y19saW1pdCIgdmFsdWU9Iicu
JGxpbWl0LiciIC8+Jy5uOw0KCWlmKCRtYXRjaCkgJGlucHV0cyAuPSAnPGlucHV0IHR5cGU9
ImhpZGRlbiIgZGF0YS1ldGM9InNlYXJjaCIgbmFtZT0ibSIgdmFsdWU9IicuJG1hdGNoLici
IC8+Jy5uOw0KCWZvcmVhY2goJHFzIGFzICRrZXkgPT4gJHZhbCkgJGlucHV0cyAuPSAnPGlu
cHV0IHR5cGU9ImhpZGRlbiIgZGF0YS1ldGM9InNlYXJjaCIgbmFtZT0iJy5odG1sc3BlY2lh
bGNoYXJzKCRrZXkpLiciIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJHZhbCkuJyIgLz4n
Lm47DQoJJGlucHV0cyAuPSAkdGhpbmcgPyBwYXJzZSgkdGhpbmcpIDogJzxpbnB1dCB0eXBl
PSJzZWFyY2giIG5hbWU9InEiJy4oJHNpemUgPyAnIHNpemU9IicuaW50dmFsKCRzaXplKS4n
IicgOiAnJykuJyB2YWx1ZT0iJy4kcS4nIiBwbGFjZWhvbGRlcj0iJy4kcGxhY2Vob2xkZXIu
JyIgYXV0b2NvbXBsZXRlPSJvZmYiIC8+Jy5uOw0KDQoJJG91dCA9ICc8Zm9ybSBpZD0iJy4k
aHRtbF9pZC4nIiBjbGFzcz0iJy4kY2xhc3MuJyIgbWV0aG9kPSJnZXQiIGFjdGlvbj0iJy4k
YWN0aW9uLiciPicubg0KCS4oJGxhYmVsID8gJzxsYWJlbD4nLiRsYWJlbC4nPGJyIC8+PC9s
YWJlbD4nIDogJycpLiRpbnB1dHMNCgkuJzwvZm9ybT4nOw0KDQoJaWYoJGxpdmUpIHsNCgkJ
JGhhc2ggPSBtZDUoJHByZWZzWydldGNfc2VhcmNoX2hhc2gnXS4kZm9ybS4kd3JhcHRhZy4k
YnJlYWsuJGxpbWl0LiRmb3JtYXQuJGlkKS4nLicuJGlkOw0KCQkkcmVzdWx0c19vcHRzID0g
YXJyYXkoKTsNCgkJJHJlc3VsdHNfb3B0c1tdID0nZXRjX3NlYXJjaDoiJy4kaGFzaC4nIic7
DQoJCWlmKCRmb3JtKSAkcmVzdWx0c19vcHRzW10gPSAnZXRjX2Y6IicuJGZvcm0uJyInOw0K
CQlpZigkYnJlYWspICRyZXN1bHRzX29wdHNbXSA9J2V0Y19iOiInLiRicmVhay4nIic7DQoJ
CWlmKCR3cmFwdGFnKSAkcmVzdWx0c19vcHRzW10gPSAnZXRjX3c6IicuJHdyYXB0YWcuJyIn
Ow0KCQlpZigkbGltaXQpICRyZXN1bHRzX29wdHNbXSA9ICdldGNfbGltaXQ6IicuJGxpbWl0
LiciJzsNCg0KCQkkb3V0IC49ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88
IVtDREFUQVsnLm4uJyQoZnVuY3Rpb24gKCkgeycubg0KCQkuJ2V0Y19saXZlX3NlYXJjaCgn
LiRsaXZlLicsJy4kbWlubGVuZ3RoLicsIicuJGh0bWxfaWQuJyIsIicuJHRhcmdldC4nIix7
Jy5pbXBsb2RlKCcsJywgJHJlc3VsdHNfb3B0cykuJ30pOycubg0KCQkuJ30pOycubi4nLy9d
XT48L3NjcmlwdD4nOw0KCX0NCglyZXR1cm4gJG91dDsNCn0iO3M6NDoidHlwZSI7czoxOiIx
IjtzOjU6Im9yZGVyIjtzOjE6IjciO3M6NToiZmxhZ3MiO3M6MToiMyI7czo0OiJoZWxwIjtz
OjEzMTM2OiI8aDM+RGVzY3JpcHRpb248L2gzPgoKCTxwPlRoaXMgcGx1Z2luIGRpc3BsYXlz
IGEgc2VhcmNoIGZvcm0gc2ltaWxhcmx5IHRvIDxjb2RlPiZsdDt0eHA6c2VhcmNoX2lucHV0
IC8mZ3Q7PC9jb2RlPi4gSWYgSmF2YXNjcmlwdCBpcyBlbmFibGVkLCBhIHJlc3VsdHMgbGlz
dCB3aWxsIGZhZGUgaW4gYW5kIHJlc2l6ZSBpbiByZWFsIHRpbWUgYmVsb3cgdGhlIHNlYXJj
aCBib3ggd2l0aCBhIG5pY2UgYW5pbWF0aW9uIGVmZmVjdCBhcyB0aGUgdXNlciB0eXBlcyBo
aXMgcXVlcnkuIFdoZW4gdGhlIHNlYXJjaCBib3ggaXMgZW1wdHksIHRoZSByZXN1bHRzIGxp
c3Qgc2hyaW5rcyBhbmQgZmFkZXMgb3V0LjwvcD4KCgk8cD5UaGUgc2VhcmNoIGlzIGFkdmFu
Y2VkLCBpLmUuICJqYWd1YXIgc3BlZWQgLWNhciIgd2lsbCBkaXNwbGF5IHRoZSByZXN1bHRz
IGNvbnRhaW5pbmcgdGhlIHN0cmluZ3MgImphZ3VhciIgYW5kICJzcGVlZCIsIGJ1dCBub3Qg
ImNhciIuIFRoZSBzeW50YXggaXMgY3VzdG9taXphYmxlIGJ5IG1vZGlmeWluZyA8Y29kZT5T
ZWFyY2ggc2V0dGluZ3M8L2NvZGU+IEpTT04gZW5jb2RlZCBwcmVmZXJlbmNlLiBNb3Jlb3Zl
ciwgeW91IGNhbiBpbnN0cnVjdCB0aGUgcGx1Z2luIHRvIGRvIGZhY2V0ZWQgc2VhcmNoZXMg
YW5kIHF1ZXJ5IGFueSBmaWVsZHMgaW4geW91ciB0eHAgZGF0YWJhc2UuPC9wPgoKCTxwPldo
ZW4gdGhlIHVzZXIgaGl0cyB0aGUgRW50ZXIga2V5IGhlIGdldHMgcmVkaXJlY3RlZCB0byBh
IHRyYWRpdGlvbmFsIHNlYXJjaCByZXN1bHRzIHBhZ2UsIHNvIHRoZSBwbHVnaW4gYWxzbyBk
ZWdyYWRlcyBuaWNlbHkgaW4gbm9uLUphdmFzY3JpcHQgYnJvd3NlcnMuPC9wPgoKCTxwPk5l
YXJseSBldmVyeXRoaW5nIChpbnB1dCBmb3JtLCBvdXRwdXQgZm9ybSwgYW5pbWF0aW9uLCBz
ZWFyY2ggcXVlcnkpIGlzIGN1c3RvbWl6YWJsZS4gTW9yZW92ZXIsIHlvdSBjYW4gdXNlIDxj
b2RlPmV0Y19zZWFyY2g8L2NvZGU+IHRvIHF1ZXJ5IHlvdXIgdHhwIGRhdGFiYXNlIHdpdGhv
dXQgdXNlciBpbnRlcmFjdGlvbiwgZXh0ZW5kaW5nIHRoZSBjYXBhYmlsaXRpZXMgb2YgPGNv
ZGU+YXJ0aWNsZV9jdXN0b208L2NvZGU+IGFuZCBvdGhlciBsaXN0IHRhZ3MuLjwvcD4KCgk8
aDM+UmVxdWlyZW1lbnRzPC9oMz4KCjxwPlRoZSBwbHVnaW4gaXMgY29tcG9zZWQgb2YgdHdv
IGZpbGVzOiA8Y29kZT5ldGNfc2VhcmNoLnR4dDwvY29kZT4gYW5kIDxjb2RlPmxpdmVzZWFy
Y2guanF1ZXJ5LmpzPC9jb2RlPi4gVGhlIGZpcnN0IG9uZSBpcyBjb21wcmVzc2VkIDxjb2Rl
PnBocDwvY29kZT4gZmlsZSB0byBiZSBpbnN0YWxsZWQgYXMgdXN1YWwgaW4gPGNvZGU+UGx1
Z2luczwvY29kZT4gdGFiLiBPbiBpbnN0YWxsIGl0IHdpbGwgY3JlYXRlIGEgPGNvZGU+ZXRj
X3NlYXJjaDwvY29kZT4gdGFibGUgYW5kIHR3byBwcmVmZXJlbmNlcyB0aGF0IHdpbGwgYmUg
cmVtb3ZlZCBvbiB1bmluc3RhbGwuIEl0IHdpbGwgYWxzbyBjcmVhdGUgYW4gYXJ0aWNsZSBm
b3JtICh0aGF0IHlvdSBjYW4gbW9kaWZ5KSBuYW1lZCA8Y29kZT5ldGNfc2VhcmNoX3Jlc3Vs
dHM8L2NvZGU+IHRoYXQgd2lsbCBiZSB1c2VkIGFzIGRlZmF1bHQgbGl2ZSBzZWFyY2ggb3V0
cHV0LjwvcD4KCgk8aDQ+SmF2YXNjcmlwdDwvaDQ+CgoJPHA+alF1ZXJ5IDxzdHJvbmc+MS4y
PC9zdHJvbmc+IG9yIG1vcmUgcmVjZW50IGlzIHJlcXVpcmVkLjwvcD4KCgk8cD5Zb3UgY2Fu
IHVzZSB0aGUgPGNvZGU+anF1ZXJ5LmpzPC9jb2RlPiBqYXZhc2NyaXB0IGZpbGUgd2hpY2gg
aXMgYnVuZGxlZCB3aXRoIFRleHRwYXR0ZXJuIGFuZCB5b3UgbmVlZCB0byB1cGxvYWQgdGhl
IHByb3ZpZGVkIDxjb2RlPmxpdmVzZWFyY2guanF1ZXJ5LmpzPC9jb2RlPiBmaWxlIHRvIHlv
dXIgd2ViIHNlcnZlciAoZm9yIGV4YW1wbGUgaW4gYSBmb2xkZXIgY2FsbGVkICYjODIyMDsv
anMvJiM4MjIxOykgYW5kIGluY2x1ZGUgYm90aCBvZiB0aGVzZSBmaWxlcyBpbiB0aGUgaGVh
ZGVyIG9mIHRoZSB3ZWIgcGFnZXMgd2hlcmUgeW91IHdhbnQgdG8gdXNlIHRoZSBwbHVnaW46
PC9wPgoKPHByZT48Y29kZT4mbHQ7c2NyaXB0IHR5cGU9JnF1b3Q7dGV4dC9qYXZhc2NyaXB0
JnF1b3Q7IHNyYz0mcXVvdDt0ZXh0cGF0dGVybi9qcXVlcnkuanMmcXVvdDsmZ3Q7Jmx0Oy9z
Y3JpcHQmZ3Q7CiZsdDtzY3JpcHQgdHlwZT0mcXVvdDt0ZXh0L2phdmFzY3JpcHQmcXVvdDsg
c3JjPSZxdW90O2pzL2xpdmVzZWFyY2guanF1ZXJ5LmpzJnF1b3Q7Jmd0OyZsdDsvc2NyaXB0
Jmd0Owo8L2NvZGU+PC9wcmU+CgoJPGgzPlN5bnRheDwvaDM+Cgo8aDQ+SW5wdXQgZm9ybS9s
aXZlIHNlYXJjaDwvaDQ+CjxwcmU+PGNvZGU+Jmx0O3R4cDpldGNfc2VhcmNoIC8mZ3Q7Cjwv
Y29kZT48L3ByZT4KPHA+b3IgYXMgY29udGFpbmVyOjwvcD4KPHByZT48Y29kZT4mbHQ7dHhw
OmV0Y19zZWFyY2gmZ3Q7CiAgJmx0O2lucHV0IG5hbWU9ImEiIC8mZ3Q7CiAgJmx0O2lucHV0
IG5hbWU9ImIiIC8mZ3Q7CiAgLi4uCiZsdDsvdHhwOmV0Y19zZWFyY2gmZ3Q7CjwvY29kZT48
L3ByZT4KCjxoND5PdXRwdXQgcmVzdWx0czwvaDQ+CjxwcmU+PGNvZGU+Jmx0O3R4cDpldGNf
c2VhcmNoX3Jlc3VsdHMgLyZndDsKPC9jb2RlPjwvcHJlPgo8cD5vciBhcyBjb250YWluZXI6
PC9wPgo8cHJlPjxjb2RlPiZsdDt0eHA6ZXRjX3NlYXJjaF9yZXN1bHRzJmd0OwogIG91dHB1
dCBwYXR0ZXJuCiZsdDt0eHA6ZWxzZSAvJmd0OwogICZsdDt0eHA6dGV4dCBpdGVtPSJub19z
ZWFyY2hfbWF0Y2hlcyIgLyZndDsKJmx0Oy90eHA6ZXRjX3NlYXJjaF9yZXN1bHRzJmd0Owo8
L2NvZGU+PC9wcmU+CgoJPGgzPkF0dHJpYnV0ZXMgb2YgPGNvZGU+ZXRjX3NlYXJjaDwvY29k
ZT4gdGFnPC9oMz4KCgk8aDQ+UmVxdWlyZWQ8L2g0PgoKCTxwPm5vbmUuPC9wPgoKCTxoND5P
cHRpb25hbDwvaDQ+CgoJPHVsPgoJCTxsaT48c3Ryb25nPmlkPC9zdHJvbmc+OiBDb21tYS1z
ZXBhcmF0ZWQgbGlzdCBvZiBxdWVyeSBpZGVudGlmaWVycyAoc2VlIGJlbG93KSwgZGVmYXVs
dCBpcyA8Y29kZT4wPC9jb2RlPiAoZGVmYXVsdCBzZWFyY2gpLjwvbGk+CgkJPGxpPjxzdHJv
bmc+bGl2ZTwvc3Ryb25nPjogTWlsbGlzZWNvbmRzIG9mIHVzZXIgaW5hY3Rpdml0eSBiZWZv
cmUgbGl2ZSBzZWFyY2ggc3RhcnRzLCA8Y29kZT42MDA8L2NvZGU+IGJ5IGRlZmF1bHQuIFNl
dCBpdCB0byA8Y29kZT4wPC9jb2RlPiB0byBkaXNhYmxlIHRoZSBsaXZlIHNlYXJjaCwgb3Ig
dG8gPGNvZGU+LTYwMDwvY29kZT4gdG8gbWFrZSB0aGUgcmVzdWx0cyBwZXJzaXN0IG9uIHRo
ZSBzY3JlZW4gZXZlbiBhZnRlciBsb29zaW5nIHRoZSBmb2N1cy48L2xpPgoJCTxsaT48c3Ry
b25nPm1pbmxlbmd0aDwvc3Ryb25nPjogTWluaW1hbCBsZW5ndGggb2YgdXNlciBpbnB1dCBi
ZWZvcmUgbGl2ZSBzZWFyY2ggc3RhcnRzLCA8Y29kZT4xPC9jb2RlPiBieSBkZWZhdWx0Ljwv
bGk+CgkJPGxpPjxzdHJvbmc+bWF0Y2g8L3N0cm9uZz46IFNlYXJjaCBtb2RlLCBzZXQgaXQg
dG8gPGNvZGU+ZXhhY3Q8L2NvZGU+IGlmIG5lY2Vzc2FyeS48L2xpPgoJCTxsaT48c3Ryb25n
PmZvcm1hdDwvc3Ryb25nPjogQWxsb3dzIHRvIGdsdWUgbXVsdGlwbGUgVVJMIDxjb2RlPnt2
YXJpYWJsZXN9PC9jb2RlPiAoZ2VuZXJhbGx5IHByb2R1Y2VkIGJ5IDxjb2RlPiZsdDt0eHA6
ZXRjX3NlYXJjaCAvJmd0OzwvY29kZT4gdXNlZCBhcyBjb250YWluZXIpIGludG8gb25lIHNl
YXJjaCBzdHJpbmcuIEZvciBleGFtcGxlLCA8Y29kZT5mb3JtYXQ9IntxfSBAe2N9IjwvY29k
ZT4gd2lsbCBwYXNzIHRoZSBzdHJpbmcgPGNvZGU+P2M9dGlwcyZxPXBhZyYuLi48L2NvZGU+
IGFzICJwYWcgQHRpcHMiIHNlYXJjaCBxdWVyeSB0byA8Y29kZT5ldGNfc2VhcmNoPC9jb2Rl
Pi4gRGVmYXVsdCBpcyA8Y29kZT57cX08L2NvZGU+LCB0aGUgdmFsdWUgb2YgdHhwIHNlYXJj
aCBzdHJpbmcgcGFyYW1ldGVyLjwvbGk+CgkJPGxpPjxzdHJvbmc+YWN0aW9uPC9zdHJvbmc+
OiBVUkwgb2YgdGhlIHBhZ2UgdG8gcmVkaXJlY3QgdGhlIHVzZXIgdG8gd2hlbiBoZSBoaXRz
IHRoZSBFbnRlciBrZXksIGluIG9yZGVyIHRvIGRpc3BsYXkgdGhlIHN0YW5kYXJkIHNlYXJj
aCByZXN1bHRzIHBhZ2UuIERlZmF1bHQgaXMgdGhlIGhvbWUgcGFnZS48L2xpPgoJCTxsaT48
c3Ryb25nPmh0bWxfaWQ8L3N0cm9uZz46IDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFu
PiA8Y29kZT5pZDwvY29kZT4gYXR0cmlidXRlIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRo
ZSBzZWFyY2ggZm9ybS4gRGVmYXVsdCBpcyA8Y29kZT5saXZlX3NlYXJjaF9bc29tZV9yYW5k
b21faWRdPC9jb2RlPi48L2xpPgoJCTxsaT48c3Ryb25nPmNsYXNzPC9zdHJvbmc+OiA8c3Bh
biBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gPGNvZGU+Y2xhc3M8L2NvZGU+IGF0dHJpYnV0
ZSBvZiB0aGUgc2VhcmNoIGZvcm0sIDxjb2RlPmxzX3NlYXJjaDwvY29kZT4gYnkgZGVmYXVs
dC48L2xpPgoJCTxsaT48c3Ryb25nPnRhcmdldDwvc3Ryb25nPjogalF1ZXJ5IHNlbGVjdG9y
LCBzZXQgaXQgaWYgeW91IHdhbnQgdG8gZGlzcGxheSBsaXZlIHNlYXJjaCByZXN1bHRzIGVs
c2V3aGVyZS48L2xpPgoJCTxsaT48c3Ryb25nPmZvcm08L3N0cm9uZz46IE9wdGlvbmFsIFRl
eHRwYXR0ZXJuIGZvcm0gZm9yIGxpdmUgc2VhcmNoIHJlc3VsdHMgb3V0cHV0LjwvbGk+CgkJ
PGxpPjxzdHJvbmc+bGFiZWw8L3N0cm9uZz46IERpc3BsYXlzIGEgbGFiZWwgYWJvdmUgdGhl
IHNlYXJjaCBib3ggd2l0aCB0aGUgc3BlY2lmaWVkIHRleHQuIERlZmF1bHQgaXMgJiM4MjIw
O3NlYXJjaCYjODIyMTsgc3RyaW5nIGxvY2FsaXplZCBpbiB0aGUgbGFuZ3VhZ2Ugb2YgeW91
ciBUZXh0cGF0dGVybiBpbnN0YWxsYXRpb24uPC9saT4KCQk8bGk+PHN0cm9uZz5zaXplPC9z
dHJvbmc+OiBTaXplIG9mIHRoZSBzZWFyY2ggYm94IChudW1iZXIgb2YgY2hhcmFjdGVycyku
PC9saT4KCQk8bGk+PHN0cm9uZz5wbGFjZWhvbGRlcjwvc3Ryb25nPjogSW52aXRhdGlvbiB0
ZXh0IHRoYXQgd2lsbCBkZSBkaXNwbGF5ZWQgaW4gdGhlIGJveC4gVGhpcyB0ZXh0IGRpc2Fw
cGVhcnMgd2hlbiB1c2VyIGhhcyB0eXBlZCBzb21ldGhpbmcgaW50byBpdC4gRGVmYXVsdCBp
cyBlbXB0eS48L2xpPgoJCTxsaT48c3Ryb25nPmxpbWl0PC9zdHJvbmc+OiBNYXhpbXVtIG51
bWJlciBvZiByZXN1bHRzIGluIHRoZSBsaXZlIHJlc3VsdHMgbGlzdC4gRGVmYXVsdCBpcyA8
Y29kZT4wPC9jb2RlPiAobm8gbGltaXQpLjwvbGk+CgkJPGxpPjxzdHJvbmc+d3JhcHRhZzwv
c3Ryb25nPjogPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IHRhZyB0byB3cmFwIHRo
ZSBzZWFyY2ggcmVzdWx0cyB3aXRoLCBpbnNpZGUgdGhlIGZvcm0uIERlZmF1bHQgaXMgZW1w
dHkuPC9saT4KCQk8bGk+PHN0cm9uZz5icmVhazwvc3Ryb25nPjogPHNwYW4gY2xhc3M9ImNh
cHMiPkhUTUw8L3NwYW4+IHRhZyB0byBiZSB1c2VkIGZvciBsaW5lIGJyZWFrcyBpbiB0aGUg
Y29udGVudCBpbnNpZGUgdGhlIGxpdmUgcmVzdWx0cyBsaXN0LCB3aXRob3V0IGJyYWNrZXRz
LiBEZWZhdWx0IGlzIDxjb2RlPmJyPC9jb2RlPi48L2xpPgoJPC91bD4KCjxoMz5BZG1pbi1z
aWRlIHNldHRpbmdzPC9oMz4KCjxwPkdvIHRvIDxjb2RlPkV4dGVuc2lvbnMvZXRjX3NlYXJj
aDwvY29kZT4gdG8gY2hhbmdlIHRoZW0uPC9wPgoKPGg0PlNlYXJjaCBzZXR0aW5nczwvaDQ+
Cjx1bD4KPGxpPjxzdHJvbmc+TG9naWNhbCBvcGVyYXRpb25zPC9zdHJvbmc+OiBKU09OLWVu
Y29kZWQgb2JqZWN0IGNvbnRhaW5pbmcgTXlTUUwgb3BlcmF0b3JzIHRvIGJlIHVzZWQgaW4g
c2VhcmNoIHF1ZXJpZXMuPC9saT4KPC91bD4KCjxoND5TZWFyY2ggZm9ybXM8L2g0Pgo8dWw+
CjxsaT48c3Ryb25nPmNvbnRleHQ8L3N0cm9uZz46IE9uZSBvZiA8Y29kZT5hcnRpY2xlIHwg
ZmlsZSB8IGltYWdlIHwgbGluazwvY29kZT4sIHJlcHJlc2VudGluZyB0aGUgdGFibGUgdG8g
c2VhcmNoIGluLCBvciA8Y29kZT5jdXN0b208L2NvZGU+LiBJZiBub3QgY3VzdG9tLCB5b3Ug
Y2FuIHVzZSAoc29tZSBvZikgY29udGV4dCB0YWdzIGluIGZvcm1zLCBzZWUgYmVsb3cuPC9s
aT4KCQk8bGk+PHN0cm9uZz5xdWVyeTwvc3Ryb25nPjogQSBzdHJpbmcgcGF0dGVybnMgcmVw
cmVzZW50aW5nIGEgdmFsaWQgTXlTUUwgU0VMRUNUIHF1ZXJ5LCB3aXRoIHNwZWNpYWxseSBj
cmFmdGVkIFdIRVJFIGNsYXVzZS4gSXQgaXMgb2YgdGhlIGZvcm0gPGNvZGU+U0VMRUNUIC4u
LiBXSEVSRSB7Wz9wYXJhbTo6XW1hdGNoMTttYXRjaDI7Li4ufSBBTkQvT1Igb3RoZXJfY3Jp
dGVyaWEgLi4uPC9jb2RlPi4gVGhlIDxjb2RlPnttYXRjaH08L2NvZGU+IHRva2VuIHdpbGwg
YmUgcmVwbGFjZWQgYnkgdGhlIHBsdWdpbiB3aXRoIGFwcHJvcHJpYXRlIHN0cmluZy4gQSBx
dWVyeSBwYXR0ZXJuIGNhbiBiZSByZWR1Y2VkIHRvIDxjb2RlPnttYXRjaDE7bWF0Y2gyOy4u
Ln0gLi4uPC9jb2RlPiBpZiBzb21lIG5vbi1jdXN0b20gY29udGV4dCBpcyBzZXQuPGJyIC8+
CkhlcmUgPGNvZGU+cGFyYW08L2NvZGU+IGlzIGEgdXJsIHZhcmlhYmxlIHRvIGJlIHVzZWQg
aW4gdGhlIGl0ZW0uIElmIG9taXR0ZWQsIHRoZSBkZWZhdWx0IHNlYXJjaCBwYXJhbWV0ZXIg
PGNvZGU+cTwvY29kZT4gd2lsbCBiZSB1c2VkLjxiciAvPgpFYWNoIDxjb2RlPm1hdGNoPC9j
b2RlPiBpdGVtIGlzIGEgc3RyaW5nIDxjb2RlPmZpZWxkczo6cGF0dGVybjo6Y29uZGl0aW9u
PC9jb2RlPiwgd2hlcmUKPHVsPgo8bGk+PGNvZGU+ZmllbGRzPC9jb2RlPiBpcyBhIGNvbW1h
LXNlcGFyYXRlZCBsaXN0IG9mIGRiIGZpZWxkczs8L2xpPgo8bGk+PGNvZGU+cGF0dGVybjwv
Y29kZT4gaXMgYSByZWdleHAgdG8gbWF0Y2ggc2VhcmNoIHF1ZXJ5IGFnYWluc3QsIDxjb2Rl
Pi9eLiskL3M8L2NvZGU+IChhbnkgcXVlcnkpIGJ5IGRlZmF1bHQ7PC9saT4KPGxpPjxjb2Rl
PmNvbmRpdGlvbjwvY29kZT4gaXMgYSBNeVNRTCBXSEVSRSBjbGF1c2UgKGl0cyBkZWZhdWx0
IHZhbHVlIGlzIDxjb2RlPnsqfSBMSUtFICVzZWFyY2hfdGVybSU8L2NvZGU+KSB0byBmaWx0
ZXIgPGNvZGU+ZmllbGRzPC9jb2RlPiB3aXRoLiBIZXJlLCAgdGhlIDxjb2RlPnsqfTwvY29k
ZT4gdG9rZW4gd2lsbCBiZSByZXBsYWNlZCBieSA8Y29kZT5maWVsZHM8L2NvZGU+IG5hbWVz
LCBhbmQgPGNvZGU+JG48L2NvZGU+IHRva2VucyB3aWxsIGJlIHRha2VuIGZyb20gc2VhcmNo
IHF1ZXJpZXMgbWF0Y2hpbmcgPGNvZGU+cGF0dGVybjwvY29kZT4uPC9saT4KPC91bD4KCQk8
bGk+PHN0cm9uZz5mb3JtPC9zdHJvbmc+OiBUd28gb3V0cHV0IGZvcm1zIHRvIHVzZSBmb3Ig
ZGlzcGxheWluZyB0aGUgcmVzdWx0cywgaW4gbGl2ZSBhbmQgc3RhbmRhcmQgbW9kZS4gSWYg
ZW1wdHksIHdpbGwgYmUgYXNzaWduZWQgdGhlIHZhbHVlIG9mIDxjb2RlPmV0Y19zZWFyY2hf
cmVzdWx0cywgc2VhcmNoX3Jlc3VsdHM8L2NvZGU+LjwvbGk+CjxsaT5GaW5hbGx5LCA8c3Ry
b25nPmNvbnRlbnQ8L3N0cm9uZz4gY29uc2lzdHMgb2YgdHdvIG91dHB1dCBwYXR0ZXJucyB3
aGVyZSBhbGwgb2NjdXJyZW5jZXMgb2YgPGNvZGU+e2ZpZWxkfTwvY29kZT4gd2lsbCBiZSBy
ZXBsYWNlZCBieSB0aGUgY29ycmVzcG9uZGluZyAoZXNjYXBlZCkgZmllbGQgdmFsdWUuIFRo
ZSBmaXJzdCBwYXR0ZXJuIHdpbGwgYmUgdXNlZCBmb3IgdGhlIGxpdmUgc2VhcmNoLCB0aGUg
c2Vjb25kIG9uZSBmb3IgdGhlIHN0YW5kYXJkIHNlYXJjaC48L2xpPjwvdWw+CjwvbGk+Cjwv
dWw+CgoJPGgzPkV4YW1wbGVzPC9oMz4KPHA+QnkgZGVmYXVsdCwgPGNvZGU+ZXRjX3NlYXJj
aDwvY29kZT4gYWN0cyBsaWtlIHRoZSBidWlsdC1pbiBUZXh0cGF0dGVybiBzZWFyY2gsIHF1
ZXJ5aW5nIGFydGljbGVzIDxjb2RlPlRpdGxlPC9jb2RlPiBhbmQgPGNvZGU+Qm9keTwvY29k
ZT4uIElmIHlvdSB3YW50IHRvIG1ha2Ugc2VhcmNoYWJsZSBhbHNvIDxjb2RlPktleXdvcmRz
PC9jb2RlPiBhbmQgPGNvZGU+RXhjZXJwdDwvY29kZT4sIGNyZWF0ZSBhbiBhcnRpY2xlIHF1
ZXJ5IDxjb2RlPntUaXRsZSxCb2R5LEtleXdvcmRzLEV4Y2VycHR9PC9jb2RlPiAoc2F5LCBu
dW1iZXIgMSksIGFuZCBjYWxsPC9wPgo8cHJlPjxjb2RlPiZsdDt0eHA6ZXRjX3NlYXJjaCBp
ZD0iMSIgLyZndDs8L2NvZGU+PC9wcmU+Cgo8cD5TdXBwb3NlIG5vdyB0aGF0IHlvdSB3aXNo
IHRvIGV4dGVuZCB0aGUgZGVmYXVsdCBUZXh0cGF0dGVybiBzZWFyY2ggd2l0aCBmYWNldGVk
IHNlYXJjaCBmb3Igc29tZSB0ZXh0IGluIGltYWdlcyA8Y29kZT5jYXB0aW9uPC9jb2RlPiBh
dHRyaWJ1dGUsIGFuZCBkaXNwbGF5IHRoZSB0aXRsZXMgb2YgdGhlIGFydGljbGVzIHdoaWNo
IGFyZSBhc3NvY2lhdGVkICh2aWEgQXJ0aWNsZSBpbWFnZSkgd2l0aCB0aGUgbWF0Y2hpbmcg
aW1hZ2VzLiBUbyBpbmRpY2F0ZSB0aGF0IHlvdSBhcmUgc2VhcmNoaW5nIGluIGNhcHRpb25z
LCB5b3UgZGVjaWRlIHRvIHByZWZpeCB0ZXJtcyBieSA8Y29kZT5jYXA6PC9jb2RlPi4gVGhl
biB5b3UgY2FuIGNyZWF0ZSB0aGUgZm9sbG93aW5nIGFydGljbGUgY29udGV4dCBxdWVyeSAo
c2F5LCBudW1iZXIgMikgYW5kIGZvcm1zOjwvcD4KCjxwcmU+PGNvZGU+cXVlcnk6IFNFTEVD
VCB0eHAuKixpbWcuY2FwdGlvbiBGUk9NIHRleHRwYXR0ZXJuIHR4cCBKT0lOIHR4cF9pbWFn
ZSBpbWcgT04gRklORF9JTl9TRVQoaW1nLmlkLHR4cC5JbWFnZSkgV0hFUkUge2ltZy5jYXB0
aW9uOjovXmNhcDooLispJC86OnsqfSBMSUtFICclJDElJ30KbGl2ZSBmb3JtOiAmbHQ7YSBo
cmVmPScmbHQ7dHhwOnBlcm1saW5rIC8mZ3Q7JyB0aXRsZT0ne2NhcHRpb259JyZndDsmbHQ7
dHhwOnRpdGxlIC8mZ3Q7Jmx0Oy9hJmd0OwpzdGF0aWMgZm9ybTogJmx0O2gzJmd0OyZsdDt0
eHA6cGVybWxpbmsmZ3Q7Jmx0O3R4cDp0aXRsZSAvJmd0OyZsdDsvdHhwOnBlcm1saW5rJmd0
OyZsdDsvaDMmZ3Q7Jmx0O3R4cDpleGNlcnB0IC8mZ3Q7CjwvY29kZT48L3ByZT4KIDxwPmFu
ZCB1c2UgPGNvZGU+Jmx0O3R4cDpldGNfc2VhcmNoIGlkPSIwLDIiIC8mZ3Q7PC9jb2RlPi48
L3A+Cgo8aDM+VGhlIDxjb2RlPmV0Y19zZWFyY2hfcmVzdWx0czwvY29kZT4gdGFnPC9oMz4K
CjxwPllvdSBjYW4gcmVwbGFjZSB0aGUgZGVmYXVsdCAobm9uLWxpdmUpIFRYUCBzZWFyY2gg
d2l0aCA8Y29kZT4mbHQ7dHhwOmV0Y19zZWFyY2hfcmVzdWx0cyAvJmd0OzwvY29kZT4gYnkg
cGxhY2luZyB0aGlzIHRhZyBpbnN0ZWFkIG9mIDxjb2RlPiZsdDt0eHA6YXJ0aWNsZSAvJmd0
OzwvY29kZT4gaW4gPGNvZGU+aWZfc2VhcmNoPC9jb2RlPiBzZWN0aW9uIG9mIHlvdXIgcGFn
ZXMuIFRoZSB0YWcgY3VycmVudGx5IGFjY2VwdHMgdGhlIHN0YW5kYXJkIDxjb2RlPmh0bWxf
aWQ8L2NvZGU+LCA8Y29kZT5mb3JtPC9jb2RlPiwgPGNvZGU+d3JhcHRhZzwvY29kZT4sIDxj
b2RlPmJyZWFrPC9jb2RlPiBhbmQgPGNvZGU+bGltaXQ8L2NvZGU+IGF0dHJpYnV0ZXMuIElm
IDxjb2RlPmZvcm08L2NvZGU+IG9yIDxjb2RlPmNvbnRlbnQ8L2NvZGU+IGFyZSBzZXQsIHRo
ZXkgd2lsbCBiZSBjb21tb24gdG8gYWxsIHNlYXJjaCBxdWVyaWVzLCBvdmVyd3JpdGluZyB0
aGVpciBvd24gZm9ybXMuPC9wPgoKPHA+VGhlIDxjb2RlPmlkPC9jb2RlPiBhdHRyaWJ1dGUg
YWxsb3dzIHRvIHJlc3RyaWN0IHNlYXJjaCB0byBhIGxpc3Qgb2YgY29tbWEtc2VwYXJhdGVk
IHNlYXJjaCBmb3JtIGlkcy4gSWYgdGhpcyBsaXN0IGlzIHByZWNlZGVkIGJ5IDxjb2RlPi08
L2NvZGU+LCB0aGUgY29ycmVzcG9uZGluZyBmb3JtcyB3aWxsIGJlIGV4Y2x1ZGVkLiBZb3Ug
Y2FuIHBsYWNlIHR3byBvciBtb3JlIG11dHVhbGx5IGV4Y2x1c2l2ZSA8Y29kZT4mbHQ7dHhw
OmV0Y19zZWFyY2hfcmVzdWx0cyAvJmd0OzwvY29kZT4gdGFncyBvbiB0aGUgcGFnZTo8L3A+
CjxwcmU+PGNvZGU+Jmx0O3R4cDpldGNfc2VhcmNoX3Jlc3VsdHMgaWQ9IjEsMiIgZm9ybT0i
Zm9ybTEiIC8mZ3Q7CiZsdDt0eHA6ZXRjX3NlYXJjaF9yZXN1bHRzIGlkPSIzIiBmb3JtPSJm
b3JtMiIgLyZndDsKPC9jb2RlPjwvcHJlPgoKPHA+VGhlIDxjb2RlPnF1ZXJ5PC9jb2RlPiBh
dHRyaWJ1dGUgYWxsb3dzIHRvIHBhc3MgYSBzZWFyY2ggc3RyaW5nIGRpcmVjdGx5IHRvIDxj
b2RlPiZsdDt0eHA6ZXRjX3NlYXJjaF9yZXN1bHRzIC8mZ3Q7PC9jb2RlPi4gRm9yIGV4YW1w
bGUsIDxjb2RlPnF1ZXJ5PSJyZWQgYmx1ZSI8L2NvZGU+IHdpbGwgYmUgdHJlYXRlZCBhcyA8
Y29kZT4/cT1yZWQrYmx1ZTwvY29kZT4gYW5kIG91dHB1dCAod2l0aCB0aGUgZGVmYXVsdCBz
ZWFyY2gpIGFsbCB0aGUgYXJ0aWNsZXMgY29udGFpbmluZyBib3RoICJyZWQiIGFuZCAiYmx1
ZSIuIFRoaXMgYWxsb3dzIHRvIHVzZSA8Y29kZT4mbHQ7dHhwOmV0Y19zZWFyY2hfcmVzdWx0
cyAvJmd0OzwvY29kZT4gYXMgPGNvZGU+Jmx0O3R4cDphcnRpY2xlX2N1c3RvbSAvJmd0Ozwv
Y29kZT4gd2l0aCB2ZXJ5IGN1c3RvbWl6YWJsZSA8Y29kZT53aGVyZTwvY29kZT4gYXR0cmli
dXRlLjwvcD4KCjxoMz5UaGUgPGNvZGU+ZXRjX3NlYXJjaF9yZXN1bHRfZXhjZXJwdDwvY29k
ZT4gdGFnPC9oMz4KCjxwPllvdSBjYW4gYWxzbyByZXBsYWNlIDxjb2RlPiZsdDt0eHA6c2Vh
cmNoX3Jlc3VsdF9leGNlcnB0IC8mZ3Q7PC9jb2RlPiB3aXRoIDxjb2RlPiZsdDt0eHA6ZXRj
X3NlYXJjaF9yZXN1bHRfZXhjZXJwdCAvJmd0OzwvY29kZT4gd2hlcmUgYXBwcm9wcmlhdGUu
IEl0IGFjY2VwdHMgc29tZSBhZGRpdGlvbmFsIGF0dHJpYnV0ZXM6PC9wPgo8dWw+CjxsaT48
Y29kZT50eXBlPSJhcnRpY2xlIjwvY29kZT47PC9saT4KPGxpPjxjb2RlPmZpZWxkPSJib2R5
IjwvY29kZT47PC9saT4KPGxpPjxjb2RlPnNpemU9IjUwIjwvY29kZT46IHRoZSBtYXhpbXVt
IG51bWJlciBvZiBzdXJyb3VuZGluZyBjaGFyYWN0ZXJzOzwvbGk+CjxsaT48Y29kZT5zaG93
YWx3YXlzPSIwIjwvY29kZT46IHNob3cgYW4gZXhjZXJwdCBldmVuIGlmIHRoZXJlIGlzIG5v
IG1hdGNoLjwvbGk+CjwvdWw+CgoKPGgzPlRoZSA8Y29kZT5ldGNfc2VhcmNoX3Jlc3VsdF9j
b3VudDwvY29kZT4gdGFnPC9oMz4KPHA+QWNjZXB0cyBvbmx5IDxjb2RlPnRleHQ8L2NvZGU+
IGF0dHJpYnV0ZS4gVGhlIHRva2VucyA8Y29kZT57ZnJvbX0sIHt0b30sIHt0b3RhbH0sIHtw
YWdlfSwge3BhZ2VzfTwvY29kZT4gdGhlcmVpbiB3aWxsIGJlIHJlcGxhY2VkIGJ5IGNvcnJl
c3BvbmRpbmcgdmFsdWVzLCB0byBkaXNwbGF5IGEgc3RyaW5nIGxpa2UgPGNvZGU+UmVzdWx0
cyA2IHRvIDEwIG9mIDI3PC9jb2RlPi48L3A+CgoJPGgzPjxzcGFuIGNsYXNzPSJjYXBzIj5D
U1M8L3NwYW4+U3R5bGluZzwvaDM+CgoJPHA+VGhlIGxpdmUgc2VhcmNoIGNvbnNpc3RzIG9m
IGEgZm9ybSB3aXRoIHRoZSA8Y29kZT5pZDwvY29kZT4gYXR0cmlidXRlIHZhbHVlIHNldCBi
eSB0aGUgJiM4MjIwO2h0bWxfaWQmIzgyMjE7IHBhcmFtZXRlci4gVGhpcyBmb3JtIGNvbnRh
aW5zIHR3byB6b25lcy4gWW91IGNhbiBzdHlsZSBhbnkgZWxlbWVudCBieSByZWZlcmVuY2lu
ZyB0aGUgaWQgYXR0cmlidXRlIG9mIHRoZSBmb3JtIGFuZCB0aGUgPHNwYW4gY2xhc3M9ImNh
cHMiPkNTUzwvc3Bhbj4gY2xhc3Mgb2YgdGhlIGVsZW1lbnQgKG9yIGl0cyB0YWcpIGluIHlv
dXIgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4uPC9wPgoKCTxoND5UaGUgc2VhcmNo
IHpvbmU8L2g0PgoKCTxwPlRoZSBmaXJzdCB6b25lIGlzIGEgYmxvY2sgd2l0aCB0aGUgYXBw
bGllZCBjbGFzcyAmIzgyMjA7bHNfc2VhcmNoJiM4MjIxOyB3aGljaCBjb250YWluczogdGhl
IG9wdGlvbmFsIGxhYmVsIChmb2xsb3dlZCBieSBhIGxpbmUgYnJlYWsgaWYgZGVmaW5lZCkg
YW5kIHRoZSB0ZXh0IGlucHV0IGJveC4gVGhlIHRhZyBvZiB0aGlzIGJsb2NrIGlzIGRlZmlu
ZWQgYnkgdGhlICYjODIyMDt3cmFwdGFnJiM4MjIxOyBwYXJhbWV0ZXIgKGRlZmF1bHQgaXMg
PGNvZGU+ZGl2PC9jb2RlPikuPC9wPgoKCTxwPlRoZSBkZWZhdWx0IHNlYXJjaCBib3ggaXMg
YW4gaW5wdXQgdGFnLiBJZiB5b3Ugd2FudCwgeW91IGNhbiBzdHlsZSBpdCB1c2luZyBhIDxz
cGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IHJ1bGUgbGlrZSB0aGlzIG9uZTo8L3A+Cgo8
cHJlPjxjb2RlPiNsaXZlX3NlYXJjaCBpbnB1dCB7CiAgICBmb250LXNpemU6IDEwcHg7CiAg
ICBjb2xvcjogIzAwMDsKfQo8L2NvZGU+PC9wcmU+CgoJPGg0PlRoZSByZXN1bHRzIHpvbmU8
L2g0PgoKCTxwPlRoZSByZXN1bHRzIHpvbmUgaXMgYSA8Y29kZT5kaXY8L2NvZGU+IGJsb2Nr
IHdpdGggdGhlIGNsYXNzICYjODIyMDtsc19zZWFyY2gmIzgyMjE7LCBjb250YWluaW5nIHRo
ZSByZXN1bHRzIGxpc3QuIFlvdSBjYW4gY2hvb3NlIHRvIHBvc2l0aW9uIHRoaXMgYmxvY2sg
YWJzb2x1dGVseSwgb3IgZXZlbiByZXBsYWNlIGl0IHdpdGggYW55IGJsb2NrLCBzZXR0aW5n
IDxjb2RlPnRhcmdldDwvY29kZT4gYXR0cmlidXRlLjwvcD4KCgk8cD5JZiB5b3UgYXJlIG5v
dCBoYXBweSB3aXRoIHRoZSBkZWZhdWx0IGFuaW1hdGlvbiwgdW5iaW5kIDxjb2RlPnVwZGF0
ZS5odG1sX2lkPC9jb2RlPiBldmVudCBvZiB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPiBhbmQg
cmVwbGFjZSB0aGVtIHdpdGggeW91ciBvd24galF1ZXJ5IGFuaW1hdGlvbnMuIFlvdSBjYW4g
YWxzbyBzZXQgPGNvZGU+c3RhcnQ8L2NvZGU+IGFuZCA8Y29kZT5zdG9wPC9jb2RlPiBldmVu
dHMsIGZpcmVkIGF0IHRoZSBiZWdpbm5pbmcgYW5kIHRoZSBlbmQgb2YgbGl2ZSBBSkFYIHJl
cXVlc3RzLjwvcD4KCgk8cD5UaGUgY29udGVudCBvZiB0aGUgcmVzdWx0cyBibG9jayB3aWxs
IGJlIGVpdGhlcjo8L3A+CgoJPG9sPgoJCTxsaT48ZW0+QXQgbGVhc3Qgb25lIHJlc3VsdCBp
cyBmb3VuZDo8L2VtPiBBIGxpc3Qgd2l0aCB3cmFwIGFuZCBicmVhayB0YWdzIGFjY29yZGlu
ZyB0byB5b3VyICYjODIyMDt3cmFwdGFnJiM4MjIxOyBhbmQgJiM4MjIwO2JyZWFrJiM4MjIx
OyBwYXJhbWV0ZXJzIChzZWUgYWJvdmUpLjwvbGk+CgkJPGxpPjxlbT5ObyByZXN1bHRzIGZv
dW5kOjwvZW0+IFRoZSBsb2NhbGl6ZWQgJiM4MjIwO25vX3NlYXJjaF9tYXRjaGVzJiM4MjIx
OyBtZXNzYWdlLjwvbGk+Cgk8L29sPiI7czozOiJtZDUiO3M6MzI6IjdlMjk0MDkyMWNmZjZl
NDliN2EwZmM4NGQzY2E1NWNhIjt9

Offline

#95 2016-11-03 10:24:54

subcosm
New Member
Registered: 2016-11-02
Posts: 3

Re: etc_search: when the default search is not enough

The modified version works. :)

This plugin makes a major difference for my project, I really appreciate the assistance!

Offline

#96 2016-11-03 10:51:45

etc
Developer
Registered: 2010-11-11
Posts: 5,689
Website GitHub

Re: etc_search: when the default search is not enough

Thanks for testing, I have lamely forgotten to update it for 4.6. The upcoming 0.9.6 will be 4.6-optimized and worth upgrading, follow the announcements.

Offline

#97 2017-03-10 00:43:51

alicson
Member
Registered: 2004-05-26
Posts: 465
Website

Re: etc_search: when the default search is not enough

etc wrote #302588:

The response comes from etc_search, so the redirection should be ok. Could you test the modified version, please?
# Name: etc_search v0.9.5...

This modified version made the difference for me too! Thanks!


textpattern.org :: find and share Textpattern resources
docs.textpattern.io :: Textpattern user documentation

Offline

#98 2018-06-11 12:59:07

jakob
Admin
From: Germany
Registered: 2005-01-20
Posts: 5,218
Website GitHub

Re: etc_search: when the default search is not enough

Hi Oleg, forgive me if I’m raising something you’ve already resolved. My plugin version says 0.9.5 and your site also says 0.9.5 but maybe I don’t have all the most recent edits you’ve made above.

My search results were dramatically shorter after upgrading from 4.5.7 (dev) to 4.7, so I went in search of why and tried your debug-query output directly on the database.

I’m sure you’ll know why right away: for txp 4.7, the following lines need modifying from Expires ='0000-00-00 00:00:00' to Expires IS NULL:

			$count = "SELECT COUNT(*) FROM $table WHERE Status >= 4 AND Posted <= '$ts' AND (Expires ='0000-00-00 00:00:00' OR Expires>='$ts') $s_filter AND $query";
			$query = "SELECT *".($order ? '' : ", MATCH ($safe_search_fields) AGAINST ('$q') AS score")." FROM $table WHERE Status >= 4 AND Posted <= '$ts' AND (Expires='0000-00-00 00:00:00' OR Expires>='$ts') $s_filter AND $query";

need changing to:

			$count = "SELECT COUNT(*) FROM $table WHERE Status >= 4 AND Posted <= '$ts' AND (Expires IS NULL OR Expires>='$ts') $s_filter AND $query";
			$query = "SELECT *".($order ? '' : ", MATCH ($safe_search_fields) AGAINST ('$q') AS score")." FROM $table WHERE Status >= 4 AND Posted <= '$ts' AND (Expires IS NULL OR Expires>='$ts') $s_filter AND $query";

If I’m wrong or my syntax is wrong, do let me know.

EDIT: Just wanted to say, this really is a very powerful plugin. If you need to do anything a bit more complex than a regular search, then it’s an absolute GodOlegsend.


TXP Builders – finely-crafted code, design and txp

Offline

#99 2018-06-11 13:25:24

etc
Developer
Registered: 2010-11-11
Posts: 5,689
Website GitHub

Re: etc_search: when the default search is not enough

jakob wrote #312508:

Hi Oleg, forgive me if I’m raising something you’ve already resolved. My plugin version says 0.9.5 and your site also says 0.9.5 but maybe I don’t have all the most recent edits you’ve made above.

Oops, hi Julian, frankly, I don’t remember how, but 0.9.5 available on my site seems to be patched a good while ago. Sorry if I have forgotten or missed to change the version number, I guess 0.9.6 (still unreleased) was already a work in progress at that time.

Sorry for the trouble and thanks for the reminder and the appreciation. Please anyone using it on txp 4.6+ and (only if) facing this problem redownload the latest version.

Offline

#100 2018-07-17 05:54:09

lazlo
Member
Registered: 2004-02-24
Posts: 110

Re: etc_search: when the default search is not enough

Hi Oleg

I have a custom search fill form for search and want to incorporate etc_search with it but I can’t seem to do a live search. This is my first time doing a live search with etc_search, so passing the query seems opaque to me.

<!-- Search Block -->
                     <li>
                     <i class="search fa fa-search search-btn"></i>
                     <div class="search-open">
                     <form action="./index.php" method="get">
                     <div class="input-group animated fadeInDown">
                     <input type="hidden" name="s" value="search" />
                     <input name="q" type="text" class="form-control" placeholder="Search">
                     <span class="input-group-btn">                                    
                     <button type="submit" class="btn-u" type="button">Go</button>                                
                     </span>                               
                     </div></form> 
                     </div>
                     </li>
<!-- End Search Block --> 

My results code looks this this:

<!--=== etc_search ===-->
<txp:etc_search_results id="10" form="newslistHeadlines">
<txp:else />
<txp:variable name="no_news" value="NULL" />
</txp:etc_search_results>

If I manually put the query in the code above it works but doesn’t pick up query from the search form.
The default textpattern search code picks up the query.

Thanks
Les

Last edited by lazlo (2018-07-17 05:56:07)

Offline

#101 2018-07-18 10:46:30

etc
Developer
Registered: 2010-11-11
Posts: 5,689
Website GitHub

Re: etc_search: when the default search is not enough

Hi Leslie,

can not test right now, sorry, but try to replace

                     <form action="./index.php" method="get">
                     ...</form> 

with

                     <txp:etc_search id="10" action="./index.php" method="get">
                     ...</txp:etc_search>

Offline

#102 2018-07-24 16:07:34

lazlo
Member
Registered: 2004-02-24
Posts: 110

Re: etc_search: when the default search is not enough

etc wrote #313060:

<form action="./index.php" method="get">...

with

<txp:etc_search id="10" action="./index.php" method="get">...

That worked perfectly, thank you.

Another question:
Is there a way to can combine “ORDER BY section Desc” and “ORDER BY posted Desc” into a single call?
I want to separate the search results into Section results then list them by date.

Offline

#103 2018-07-24 17:07:54

etc
Developer
Registered: 2010-11-11
Posts: 5,689
Website GitHub

Re: etc_search: when the default search is not enough

lazlo wrote #313124:

Is there a way to can combine “ORDER BY section Desc” and “ORDER BY posted Desc” into a single call?
I want to separate the search results into Section results then list them by date.

Yes, the standard SQL syntax applies:

ORDER BY Section DESC, Posted DESC

Combined with <txp:if_different /> this should allow you to section the presentation if needed.

Offline

#104 2018-08-19 22:22:37

lazlo
Member
Registered: 2004-02-24
Posts: 110

Re: etc_search: when the default search is not enough

I get the following error when I used the code above, everything seems to work but is there a way to fix the error?

Tag error: <txp:etc_search id="10" action="./index.php" method="get"> ->  Textpattern Notice: Unknown tag attribute: method. while parsing form master_page_header_unity on page front

- L

Offline

#105 2018-08-20 07:39:09

jakob
Admin
From: Germany
Registered: 2005-01-20
Posts: 5,218
Website GitHub

Re: etc_search: when the default search is not enough

lazlo wrote #313512:

I get the following error when I used the code above, everything seems to work but is there a way to fix the error?

Tag error: <txp:etc_search id="10" action="./index.php" method="get"> -> Textpattern Notice: Unknown tag attribute: method. while parsing form master_page_header_unity on page front...

It looks like method isn’t actually an attribute of etc_search so you can just remove it.


TXP Builders – finely-crafted code, design and txp

Offline

Board footer

Powered by FluxBB