# Name: cnk_versioning v0.1.6 
# Type: Admin/Client side plugin
# Autoload Templates
# Author: Christian Nowak
# URL: http://www.cnowak.de

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

YTo5OntzOjQ6Im5hbWUiO3M6MTQ6ImNua192ZXJzaW9uaW5nIjtzOjY6ImF1dGhvciI7czox
NToiQ2hyaXN0aWFuIE5vd2FrIjtzOjEwOiJhdXRob3JfdXJpIjtzOjIwOiJodHRwOi8vd3d3
LmNub3dhay5kZSI7czo3OiJ2ZXJzaW9uIjtzOjU6IjAuMS42IjtzOjExOiJkZXNjcmlwdGlv
biI7czoxODoiQXV0b2xvYWQgVGVtcGxhdGVzIjtzOjQ6ImNvZGUiO3M6MTIzNTE6Imdsb2Jh
bCAkQ05LX1ZFUl9PVVRQVVRfUEFUSCwgJENOS19WRVJfRVhULCAkQ05LX1ZFUl9FWFRfQ1NT
Ow0KDQokQ05LX1ZFUl9PVVRQVVRfUEFUSCA9ICcnOyAvL2UuZy4gJ3RleHRwYXR0ZXJuL190
ZW1wbGF0ZXMvdmVyc2lvbmluZy8nDQokQ05LX1ZFUl9FWFQgPSAndHhwJzsNCiRDTktfVkVS
X0VYVF9DU1MgPSAnY3NzJzsNCg0KLyoNCglETyBOT1QgRURJVCBCRUxPVyBUSElTIExJTkUh
DQoqLw0KDQokQ05LX1ZFUl9PVVRQVVRfUEFUSCA9IHRyaW0oJENOS19WRVJfT1VUUFVUX1BB
VEgsICcvJykuKCRDTktfVkVSX09VVFBVVF9QQVRIPycvJzonJyk7DQoNCmlmKEB0eHBpbnRl
cmZhY2UgPT0gJ2FkbWluJykgDQp7DQoJYWRkX3ByaXZzKCdjbmtfdmVyc2lvbmluZycsJzEs
MicpOw0KCXJlZ2lzdGVyX3RhYigncHJlc2VudGF0aW9uJywgJ2Nua192ZXJzaW9uaW5nJywg
IlZlcnNpb25pbmciKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnY25rX3Zlcl9oYW5kbGVyJywg
J2Nua192ZXJzaW9uaW5nJyk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ2Nua192ZXJfZGlzYWJs
ZV9vbmxpbmVfZWRpdGluZycsICdwYWdlJyk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ2Nua192
ZXJfZGlzYWJsZV9vbmxpbmVfZWRpdGluZycsICdmb3JtJyk7DQoJcmVnaXN0ZXJfY2FsbGJh
Y2soJ2Nua192ZXJfZGlzYWJsZV9vbmxpbmVfZWRpdGluZycsICdjc3MnKTsNCn0NCmVsc2Ug
aWYgKEB0eHBpbnRlcmZhY2UgPT0gJ3B1YmxpYycpDQp7DQoJcmVnaXN0ZXJfY2FsbGJhY2so
J2Nua192ZXJfdGV4dHBhdHRlcm4nLCAndGV4dHBhdHRlcm4nKTsNCn0NCg0KZnVuY3Rpb24g
Y25rX3Zlcl90ZXh0cGF0dGVybigpDQp7DQoJZ2xvYmFsICRwcm9kdWN0aW9uX3N0YXR1cywg
JENOS19WRVJfT1VUUFVUX1BBVEgsICRDTktfVkVSX0VYVCwgJENOS19WRVJfRVhUX0NTUzsN
CgkNCglpZiAoJHByb2R1Y3Rpb25fc3RhdHVzICE9ICdsaXZlJykNCgl7DQoJCSRlcnJvciA9
IGZhbHNlOw0KCQkNCgkJLy8gcmVhZCBhbGwgZmlsZXMNCgkJJGZvcm1zID0gZ2xvYigkQ05L
X1ZFUl9PVVRQVVRfUEFUSC4nZm9ybXMvKi4nLiRDTktfVkVSX0VYVCk7DQoJCSRwYWdlcyA9
IGdsb2IoJENOS19WRVJfT1VUUFVUX1BBVEguJ3BhZ2VzLyouJy4kQ05LX1ZFUl9FWFQpOw0K
CQkkY3NzID0gZ2xvYigkQ05LX1ZFUl9PVVRQVVRfUEFUSC4nY3NzLyouJy4kQ05LX1ZFUl9F
WFRfQ1NTKTsNCgkJDQoJCWlmICgkZm9ybXMgIT09IGZhbHNlKSAkZXJyb3IgPSAhY25rX3Zl
cl9wdXNoX2Zvcm1zKCRmb3Jtcyk7DQoJCWlmICgkcGFnZXMgIT09IGZhbHNlKSAkZXJyb3Ig
PSAhY25rX3Zlcl9wdXNoX3BhZ2VzKCRwYWdlcyk7DQoJCWlmICgkY3NzICE9PSBmYWxzZSkg
JGVycm9yID0gIWNua192ZXJfcHVzaF9jc3MoJGNzcyk7DQoJCQ0KCQlpZiAoJGVycm9yKSBl
Y2hvICdFcnJvcnMgd2hpbGUgc3luY2hyb25pc2luZyBkYXRhYmFzZSBhbmQgZmlsZXMnOw0K
CX0NCn0NCg0KZnVuY3Rpb24gY25rX3Zlcl9wdXNoX2Zvcm1zKCRmb3JtX2ZpbGVzKQ0Kew0K
CWdsb2JhbCAkQ05LX1ZFUl9PVVRQVVRfUEFUSCwgJENOS19WRVJfRVhUOw0KCQ0KCSRmb3Jt
cyA9IGFycmF5KCk7DQoNCgkkcnMgPSBzYWZlX3Jvd3Nfc3RhcnQoJ25hbWUsdHlwZSxJRk5V
TEwodW5peF90aW1lc3RhbXAoZmlsZV9tb2RfdGltZSksIDApIGFzIG1vZF90aW1lJywgJ3R4
cF9mb3JtJywgJzE9MScpOw0KCQ0KCXdoaWxlICgkcnMgJiYgJHIgPSBuZXh0Um93KCRycykp
DQoJew0KCQkkZm9ybXNbJENOS19WRVJfT1VUUFVUX1BBVEguJ2Zvcm1zLycuJHJbJ25hbWUn
XS4nLicuJHJbJ3R5cGUnXS4nLicuJENOS19WRVJfRVhUXSA9ICRyWydtb2RfdGltZSddOw0K
CX0NCgkNCglmb3IgKCRpPTA7ICRpIDwgY291bnQoJGZvcm1fZmlsZXMpOyAkaSsrKQ0KCXsN
CgkJaWYgKGlzc2V0KCRmb3Jtc1skZm9ybV9maWxlc1skaV1dKSAmJiAkZm9ybXNbJGZvcm1f
ZmlsZXNbJGldXSA8IGZpbGVtdGltZSgkZm9ybV9maWxlc1skaV0pKQ0KCQl7DQoJCQljbmtf
dmVyX3VwZGF0ZV9mb3JtKCRmb3JtX2ZpbGVzWyRpXSk7DQoJCX0NCgkJZWxzZSBpZiAoIWlz
c2V0KCRmb3Jtc1skZm9ybV9maWxlc1skaV1dKSkNCgkJew0KCQkJY25rX3Zlcl91cGRhdGVf
Zm9ybSgkZm9ybV9maWxlc1skaV0sIHRydWUpOw0KCQl9DQoJCSRmb3Jtc1skZm9ybV9maWxl
c1skaV1dID0gJ3Byb2Nlc3NlZCc7DQoJfQ0KCQkNCgkvLyBkZWxldGUgcmVtb3ZlZCBmb3Jt
cw0KCWZvcmVhY2ggKCRmb3JtcyBhcyAka2V5ID0+ICR2YWx1ZSkNCgl7DQoJCWlmICgkdmFs
dWUgIT0gJ3Byb2Nlc3NlZCcpDQoJCXsNCgkJCSRjb2xzID0gZXhwbG9kZSgnLicsIGJhc2Vu
YW1lKCRrZXksICcuJy4kQ05LX1ZFUl9FWFQpKTsNCgkJCSRuYW1lID0gJGNvbHNbMF07DQoJ
CQkkdHlwZSA9ICRjb2xzWzFdOw0KCQkJDQoJCQlzYWZlX2RlbGV0ZSgndHhwX2Zvcm0nLCAi
bmFtZSA9ICckbmFtZScgQU5EIHR5cGUgPSAnJHR5cGUnIik7DQoJCX0NCgl9DQoNCglyZXR1
cm4gdHJ1ZTsNCn0NCg0KZnVuY3Rpb24gY25rX3Zlcl91cGRhdGVfZm9ybSgkZmlsZW5hbWUs
ICRjcmVhdGUgPSBmYWxzZSkNCnsNCglnbG9iYWwgJENOS19WRVJfRVhUOw0KCQ0KCSRjb2xz
ID0gZXhwbG9kZSgnLicsIGJhc2VuYW1lKCRmaWxlbmFtZSwgJy4nLiRDTktfVkVSX0VYVCkp
Ow0KDQoJJG5hbWUgPSAkY29sc1swXTsNCgkkdHlwZSA9ICRjb2xzWzFdOw0KCSRmb3JtID0g
ZG9TbGFzaChmaWxlX2dldF9jb250ZW50cygkZmlsZW5hbWUpKTsNCgkNCglpZiAoJGNyZWF0
ZSkNCgl7DQoJCXNhZmVfaW5zZXJ0KCd0eHBfZm9ybScsICJuYW1lID0gJyRuYW1lJywgdHlw
ZSA9ICckdHlwZScsIGZvcm0gPSAnJGZvcm0nLCBmaWxlX21vZF90aW1lID0gRlJPTV9VTklY
VElNRSgnIi50aW1lKCkuIicpIik7DQoJfQ0KCWVsc2UNCgl7DQoJCXNhZmVfdXBkYXRlKCd0
eHBfZm9ybScsICJmb3JtID0gJyRmb3JtJywgZmlsZV9tb2RfdGltZSA9IEZST01fVU5JWFRJ
TUUoJyIudGltZSgpLiInKSIsICJuYW1lID0gJyRuYW1lJyBBTkQgdHlwZSA9ICckdHlwZSci
KTsNCgl9DQp9DQoNCmZ1bmN0aW9uIGNua192ZXJfcHVzaF9wYWdlcygkcGFnZV9maWxlcykN
CnsNCglnbG9iYWwgJENOS19WRVJfT1VUUFVUX1BBVEgsICRDTktfVkVSX0VYVDsNCgkNCgkk
cGFnZXMgPSBhcnJheSgpOw0KDQoJJHJzID0gc2FmZV9yb3dzX3N0YXJ0KCduYW1lLElGTlVM
TCh1bml4X3RpbWVzdGFtcChmaWxlX21vZF90aW1lKSwgMCkgYXMgbW9kX3RpbWUnLCAndHhw
X3BhZ2UnLCAnMT0xJyk7DQoJDQoJd2hpbGUgKCRycyAmJiAkciA9IG5leHRSb3coJHJzKSkN
Cgl7DQoJCSRwYWdlc1skQ05LX1ZFUl9PVVRQVVRfUEFUSC4ncGFnZXMvJy4kclsnbmFtZSdd
LicuJy4kQ05LX1ZFUl9FWFRdID0gJHJbJ21vZF90aW1lJ107DQoJfQ0KCQ0KCWZvciAoJGk9
MDsgJGkgPCBjb3VudCgkcGFnZV9maWxlcyk7ICRpKyspDQoJew0KCQlpZiAoaXNzZXQoJHBh
Z2VzWyRwYWdlX2ZpbGVzWyRpXV0pICYmICRwYWdlc1skcGFnZV9maWxlc1skaV1dIDwgZmls
ZW10aW1lKCRwYWdlX2ZpbGVzWyRpXSkpDQoJCXsNCgkJCWNua192ZXJfdXBkYXRlX3BhZ2Uo
JHBhZ2VfZmlsZXNbJGldKTsNCgkJfQ0KCQllbHNlIGlmICghaXNzZXQoJHBhZ2VzWyRwYWdl
X2ZpbGVzWyRpXV0pKQ0KCQl7DQoJCQljbmtfdmVyX3VwZGF0ZV9wYWdlKCRwYWdlX2ZpbGVz
WyRpXSwgdHJ1ZSk7DQoJCX0NCgkJJHBhZ2VzWyRwYWdlX2ZpbGVzWyRpXV0gPSAncHJvY2Vz
c2VkJzsNCgl9DQoJCQ0KCS8vIGRlbGV0ZSByZW1vdmVkIHBhZ2VzDQoJZm9yZWFjaCAoJHBh
Z2VzIGFzICRrZXkgPT4gJHZhbHVlKQ0KCXsNCgkJaWYgKCR2YWx1ZSAhPSAncHJvY2Vzc2Vk
JykNCgkJew0KCQkJJG5hbWUgPSBiYXNlbmFtZSgka2V5LCAnLicuJENOS19WRVJfRVhUKTsN
CgkJCQ0KCQkJc2FmZV9kZWxldGUoJ3R4cF9wYWdlJywgIm5hbWUgPSAnJG5hbWUnIik7DQoJ
CX0NCgl9DQoNCglyZXR1cm4gdHJ1ZTsNCn0NCg0KZnVuY3Rpb24gY25rX3Zlcl91cGRhdGVf
cGFnZSgkZmlsZW5hbWUsICRjcmVhdGUgPSBmYWxzZSkNCnsNCglnbG9iYWwgJENOS19WRVJf
RVhUOw0KCQ0KCSRuYW1lID0gYmFzZW5hbWUoJGZpbGVuYW1lLCAnLicuJENOS19WRVJfRVhU
KTsNCgkkdXNlcl9odG1sID0gZG9TbGFzaChmaWxlX2dldF9jb250ZW50cygkZmlsZW5hbWUp
KTsNCgkNCglpZiAoJGNyZWF0ZSkNCgl7DQoJCXNhZmVfaW5zZXJ0KCd0eHBfcGFnZScsICJu
YW1lID0gJyRuYW1lJywgdXNlcl9odG1sID0gJyR1c2VyX2h0bWwnLCBmaWxlX21vZF90aW1l
ID0gRlJPTV9VTklYVElNRSgnIi50aW1lKCkuIicpIik7DQoJfQ0KCWVsc2UNCgl7DQoJCXNh
ZmVfdXBkYXRlKCd0eHBfcGFnZScsICJ1c2VyX2h0bWwgPSAnJHVzZXJfaHRtbCcsIGZpbGVf
bW9kX3RpbWUgPSBGUk9NX1VOSVhUSU1FKCciLnRpbWUoKS4iJykiLCAibmFtZSA9ICckbmFt
ZSciKTsNCgl9DQp9DQoNCmZ1bmN0aW9uIGNua192ZXJfcHVzaF9jc3MoJGNzc19maWxlcykN
CnsNCglnbG9iYWwgJENOS19WRVJfT1VUUFVUX1BBVEgsICRDTktfVkVSX0VYVF9DU1M7DQoJ
DQoJJGNzcyA9IGFycmF5KCk7DQoNCgkkcnMgPSBzYWZlX3Jvd3Nfc3RhcnQoJ25hbWUsSUZO
VUxMKHVuaXhfdGltZXN0YW1wKGZpbGVfbW9kX3RpbWUpLCAwKSBhcyBtb2RfdGltZScsICd0
eHBfY3NzJywgJzE9MScpOw0KCQ0KCXdoaWxlICgkcnMgJiYgJHIgPSBuZXh0Um93KCRycykp
DQoJew0KCQkkY3NzWyRDTktfVkVSX09VVFBVVF9QQVRILidjc3MvJy4kclsnbmFtZSddLicu
Jy4kQ05LX1ZFUl9FWFRfQ1NTXSA9ICRyWydtb2RfdGltZSddOw0KCX0NCgkNCglmb3IgKCRp
PTA7ICRpIDwgY291bnQoJGNzc19maWxlcyk7ICRpKyspDQoJew0KCQlpZiAoaXNzZXQoJGNz
c1skY3NzX2ZpbGVzWyRpXV0pICYmICRjc3NbJGNzc19maWxlc1skaV1dIDwgZmlsZW10aW1l
KCRjc3NfZmlsZXNbJGldKSkNCgkJew0KCQkJY25rX3Zlcl91cGRhdGVfY3NzKCRjc3NfZmls
ZXNbJGldKTsNCgkJfQ0KCQllbHNlIGlmICghaXNzZXQoJGNzc1skY3NzX2ZpbGVzWyRpXV0p
KQ0KCQl7DQoJCQljbmtfdmVyX3VwZGF0ZV9jc3MoJGNzc19maWxlc1skaV0sIHRydWUpOw0K
CQl9DQoJCSRjc3NbJGNzc19maWxlc1skaV1dID0gJ3Byb2Nlc3NlZCc7DQoJfQ0KCQkNCgkv
LyBkZWxldGUgcmVtb3ZlZCBjc3MgZmlsZXMNCglmb3JlYWNoICgkY3NzIGFzICRrZXkgPT4g
JHZhbHVlKQ0KCXsNCgkJaWYgKCR2YWx1ZSAhPSAncHJvY2Vzc2VkJykNCgkJew0KCQkJJG5h
bWUgPSBiYXNlbmFtZSgka2V5LCAnLicuJENOS19WRVJfRVhUX0NTUyk7DQoJCQkNCgkJCXNh
ZmVfZGVsZXRlKCd0eHBfY3NzJywgIm5hbWUgPSAnJG5hbWUnIik7DQoJCX0NCgl9DQoNCgly
ZXR1cm4gdHJ1ZTsNCn0NCg0KZnVuY3Rpb24gY25rX3Zlcl91cGRhdGVfY3NzKCRmaWxlbmFt
ZSwgJGNyZWF0ZSA9IGZhbHNlKQ0Kew0KCWdsb2JhbCAkQ05LX1ZFUl9FWFRfQ1NTOw0KCQ0K
CSRuYW1lID0gYmFzZW5hbWUoJGZpbGVuYW1lLCAnLicuJENOS19WRVJfRVhUX0NTUyk7DQoJ
JGNzcyA9IGRvU2xhc2goYmFzZTY0X2VuY29kZShmaWxlX2dldF9jb250ZW50cygkZmlsZW5h
bWUpKSk7DQoJDQoJaWYgKCRjcmVhdGUpDQoJew0KCQlzYWZlX2luc2VydCgndHhwX2Nzcycs
ICJuYW1lID0gJyRuYW1lJywgY3NzID0gJyRjc3MnLCBmaWxlX21vZF90aW1lID0gRlJPTV9V
TklYVElNRSgnIi50aW1lKCkuIicpIik7DQoJfQ0KCWVsc2UNCgl7DQoJCXNhZmVfdXBkYXRl
KCd0eHBfY3NzJywgImNzcyA9ICckY3NzJywgZmlsZV9tb2RfdGltZSA9IEZST01fVU5JWFRJ
TUUoJyIudGltZSgpLiInKSIsICJuYW1lID0gJyRuYW1lJyIpOw0KCX0NCn0NCg0KZnVuY3Rp
b24gY25rX3Zlcl9oYW5kbGVyKCRldmVudCwgJHN0ZXApDQp7DQoJaWYoISRzdGVwIG9yICFp
bl9hcnJheSgkc3RlcCwgYXJyYXkoJ2Nua192ZXJfbWVudScsDQoJCQkJCQkJCQkJJ2Nua192
ZXJfcHVsbF9hbGwnLA0KCQkJCQkJCQkJCSdjbmtfdmVyX2luc3RhbGwnLA0KCQkJCQkJCQkJ
CSdjbmtfdmVyX2RlaW5zdGFsbCcpKSkNCgl7DQoJCWNua192ZXJfbWVudSgpOw0KCX0gDQoJ
ZWxzZQ0KCXsNCgkJJHN0ZXAoKTsNCgl9DQp9DQoNCmZ1bmN0aW9uIGNua192ZXJfZGlzYWJs
ZV9vbmxpbmVfZWRpdGluZygkZXZlbnQsICRzdGVwKQ0Kew0KCS8vIGNsZWFyIG9iDQoJb2Jf
ZW5kX2NsZWFuKCk7DQoJDQoJLy8gcmV0dXJuIGVycm9yIG1lc3NhZ2UNCgkNCglwYWdldG9w
KCdWZXJzaW9uaW5nJyk7DQoJDQoJZWNobyAnPGRpdiBzdHlsZT0ibWFyZ2luOiBhdXRvOyB0
ZXh0LWFsaWduOiBjZW50ZXIiPjx1bD4nOw0KCQ0KCWVjaG8gJ1doaWxlIGNua192ZXJzaW9u
aW5nIGlzIGVuYWJsZWQsIHRoaXMgZnVuY3Rpb24gaXMgZGlzYWJsZWQuJzsNCgkNCgllY2hv
ICc8L2Rpdj4nOw0KfQ0KDQpmdW5jdGlvbiBjbmtfdmVyX21lbnUoJG1lc3NhZ2UgPSAnJykN
CnsNCglwYWdldG9wKCdWZXJzaW9uaW5nJywgJG1lc3NhZ2UpOw0KCQ0KCWVjaG8gJzxkaXYg
c3R5bGU9Im1hcmdpbjogYXV0bzsgdGV4dC1hbGlnbjogY2VudGVyIj48dWw+JzsNCgkNCgll
Y2hvICc8bGk+PGEgaHJlZj0iP2V2ZW50PWNua192ZXJzaW9uaW5nJy5hLidzdGVwPWNua192
ZXJfcHVsbF9hbGwiPldyaXRlIHBhZ2VzICYgZm9ybXMgdG8gZmlsZXM8L2E+PC9saT4nOw0K
CQ0KCWVjaG8gJzwvdWw+JzsNCgkNCgllY2hvICc8dWwgc3R5bGU9Im1hcmdpbi10b3A6IDEw
MHB4Ij4nOwkNCgkNCgllY2hvICc8bGk+PGEgaHJlZj0iP2V2ZW50PWNua192ZXJzaW9uaW5n
Jy5hLidzdGVwPWNua192ZXJfaW5zdGFsbCI+SW5zdGFsbDwvYT48L2xpPic7DQoJDQoJZWNo
byAnPGxpPjxhIGhyZWY9Ij9ldmVudD1jbmtfdmVyc2lvbmluZycuYS4nc3RlcD1jbmtfdmVy
X2RlaW5zdGFsbCI+RGVpbnN0YWxsPC9hPjwvbGk+JzsNCg0KCWVjaG8gJzwvdWw+JzsNCgkN
CgllY2hvICc8L2Rpdj4nOw0KfQ0KDQpmdW5jdGlvbiBjbmtfdmVyX3B1bGxfYWxsKCkNCnsN
CglnbG9iYWwgJENOS19WRVJfT1VUUFVUX1BBVEgsICRDTktfVkVSX0VYVCwgJENOS19WRVJf
RVhUX0NTUzsNCgkNCglwYWdldG9wKCdXcml0ZSB0byBmaWxlcycsICcnKTsNCgkNCgllY2hv
ICc8ZGl2IHN0eWxlPSJtYXJnaW46IGF1dG87IHRleHQtYWxpZ246IGNlbnRlciI+JzsNCgkJ
CQkNCglpZiAoZ3BzKCdkb19wdWxsJykgfHwgKGdsb2IoJy4uLycuJENOS19WRVJfT1VUUFVU
X1BBVEguJ3BhZ2VzLyouJy4kQ05LX1ZFUl9FWFQpID09PSBmYWxzZSAmJiBnbG9iKCcuLi8n
LiRDTktfVkVSX09VVFBVVF9QQVRILidmb3Jtcy8qLicuJENOS19WRVJfRVhUKSA9PT0gZmFs
c2UgJiYgZ2xvYignLi4vJy4kQ05LX1ZFUl9PVVRQVVRfUEFUSC4nY3NzLyouJy4kQ05LX1ZF
Ul9FWFRfQ1NTKSA9PT0gZmFsc2UpKQ0KCXsNCgkJJGVycm9yID0gZmFsc2U7DQoJCQ0KCQkv
LyB0ZXN0IGlmIGZvbGRlcnMgZXhpc3QgYW5kIGhhdmUgd3JpdGUgcGVybWlzc2lvbnMNCgkJ
aWYgKEBpc193cml0YWJsZSgnLi4vJy4kQ05LX1ZFUl9PVVRQVVRfUEFUSC4nZm9ybXMvJykg
PT09IGZhbHNlKQ0KCQl7DQoJCQkkZXJyb3IgPSB0cnVlOw0KCQkJZWNobyAnRm9sZGVyICIv
Zm9ybXMvIiBpcyBub3Qgd3JpdGFibGUuPGJyIC8+PGJyIC8+JzsNCgkJfQ0KCQkNCgkJaWYg
KEBpc193cml0YWJsZSgnLi4vJy4kQ05LX1ZFUl9PVVRQVVRfUEFUSC4ncGFnZXMvJykgPT09
IGZhbHNlKQ0KCQl7DQoJCQkkZXJyb3IgPSB0cnVlOw0KCQkJZWNobyAnRm9sZGVyICIvcGFn
ZXMvIiBpcyBub3Qgd3JpdGFibGUuPGJyIC8+PGJyIC8+JzsNCgkJfQ0KCQkNCgkJaWYgKEBp
c193cml0YWJsZSgnLi4vJy4kQ05LX1ZFUl9PVVRQVVRfUEFUSC4nY3NzLycpID09PSBmYWxz
ZSkNCgkJew0KCQkJJGVycm9yID0gdHJ1ZTsNCgkJCWVjaG8gJ0ZvbGRlciAiL2Nzcy8iIGlz
IG5vdCB3cml0YWJsZS4nOw0KCQl9DQoJCQ0KCQlpZiAoISRlcnJvcikNCgkJew0KCQkJCWlm
IChjbmtfdmVyX3B1bGxfZm9ybXMoKSkNCgkJCQl7DQoJCQkJCWVjaG8gJ0Zvcm1zIHdlcmUg
c3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gdG8gdGhlICIvZm9ybXMvIiBkaXJlY3RvcnkuPGJyIC8+
PGJyIC8+JzsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJZWNobyAnVGhlcmUgd2Fz
IGFuIGVycm9yIHdoaWxlIHByb2Nlc3NpbmcgZm9ybXMuPGJyIC8+PGJyIC8+JzsNCgkJCQl9
DQoJCQkJDQoJCQkJaWYgKGNua192ZXJfcHVsbF9wYWdlcygpKQ0KCQkJCXsNCgkJCQkJZWNo
byAnUGFnZXMgd2VyZSBzdWNjZXNzZnVsbHkgd3JpdHRlbiB0byB0aGUgIi9wYWdlcy8iIGRp
cmVjdG9yeS48YnIgLz48YnIgLz4nOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQll
Y2hvICdUaGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBwYWdlcy48YnIgLz48
YnIgLz4nOw0KCQkJCX0NCgkJCQkNCgkJCQlpZiAoY25rX3Zlcl9wdWxsX2NzcygpKQ0KCQkJ
CXsNCgkJCQkJZWNobyAnU3R5bGVzIHdlcmUgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gdG8gdGhl
ICIvY3NzLyIgZGlyZWN0b3J5Lic7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCWVj
aG8gJ1RoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBwcm9jZXNzaW5nIGNzcy4nOw0KCQkJCX0N
CgkJfQ0KCQkNCgkJZWNobyAnPGJyIC8+PGJyIC8+PGEgaHJlZj0iP2V2ZW50PWNua192ZXJz
aW9uaW5nIj5CYWNrIHRvIG1lbnUuLi48L2E+JzsNCgl9DQoJZWxzZQ0KCXsNCgkJZWNobyAn
VGhlcmUgYXJlIGFscmVhZHkgc29tZSBmaWxlcyBpbiB0aGUgcGFnZXMsIGZvcm1zIG9yIGNz
cyBkaXJlY3RvcnksIHdoaWNoIHdpbGwgYmUgb3ZlcnJpZGVuLiBEbyB5b3Ugd2FudCB0byBj
b250aW51ZT88YnIgLz48YnIgLz4nLg0KCQkNCgkJJzxhIGhyZWY9Ij9ldmVudD1jbmtfdmVy
c2lvbmluZycuYS4nc3RlcD1jbmtfdmVyX3B1bGxfYWxsJy5hLidkb19wdWxsPTEiPlllcywg
b3ZlcndyaXRlIGV4aXN0aW5nIGZpbGVzLi4uPC9hPjxiciAvPjxiciAvPicuDQoJCQ0KCQkn
PGEgaHJlZj0iP2V2ZW50PWNua192ZXJzaW9uaW5nIj5ObywgYnJpbmcgbWUgYmFjayB0byB0
aGUgbWVudS4uLjwvYT4nOw0KCX0NCgkNCgllY2hvICc8L2Rpdj4nOw0KfQ0KDQpmdW5jdGlv
biBjbmtfdmVyX3B1bGxfZm9ybXMoKQ0Kew0KCWdsb2JhbCAkQ05LX1ZFUl9PVVRQVVRfUEFU
SCwgJENOS19WRVJfRVhUOw0KCQ0KCSRycyA9IHNhZmVfcm93c19zdGFydCgnbmFtZSwgdHlw
ZSwgZm9ybScsICd0eHBfZm9ybScsICcxPTEnKTsNCgkNCgl3aGlsZSAoJHJzICYmICRyID0g
bmV4dFJvdygkcnMpKQ0KCXsNCgkJaWYgKEBmaWxlX3B1dF9jb250ZW50cygnLi4vJy4kQ05L
X1ZFUl9PVVRQVVRfUEFUSC4nZm9ybXMvJy4kclsnbmFtZSddLicuJy4kclsndHlwZSddLicu
Jy4kQ05LX1ZFUl9FWFQsICRyWydmb3JtJ10pID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlOw0K
CX0NCgkNCglzYWZlX3VwZGF0ZSgndHhwX2Zvcm0nLCAiZmlsZV9tb2RfdGltZSA9IEZST01f
VU5JWFRJTUUoJyIudGltZSgpLiInKSIsICcxPTEnKTsNCgkNCglyZXR1cm4gdHJ1ZTsNCn0N
Cg0KZnVuY3Rpb24gY25rX3Zlcl9wdWxsX3BhZ2VzKCkNCnsNCglnbG9iYWwgJENOS19WRVJf
T1VUUFVUX1BBVEgsICRDTktfVkVSX0VYVDsNCgkNCgkkcnMgPSBzYWZlX3Jvd3Nfc3RhcnQo
J25hbWUsIHVzZXJfaHRtbCcsICd0eHBfcGFnZScsICcxPTEnKTsNCgkNCgl3aGlsZSAoJHJz
ICYmICRyID0gbmV4dFJvdygkcnMpKQ0KCXsNCgkJaWYgKEBmaWxlX3B1dF9jb250ZW50cygn
Li4vJy4kQ05LX1ZFUl9PVVRQVVRfUEFUSC4ncGFnZXMvJy4kclsnbmFtZSddLicuJy4kQ05L
X1ZFUl9FWFQsICRyWyd1c2VyX2h0bWwnXSkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7DQoJ
fQ0KCQ0KCXNhZmVfdXBkYXRlKCd0eHBfcGFnZScsICJmaWxlX21vZF90aW1lID0gRlJPTV9V
TklYVElNRSgnIi50aW1lKCkuIicpIiwgJzE9MScpOw0KCQ0KCXJldHVybiB0cnVlOw0KfQ0K
DQpmdW5jdGlvbiBjbmtfdmVyX3B1bGxfY3NzKCkNCnsNCglnbG9iYWwgJENOS19WRVJfT1VU
UFVUX1BBVEgsICRDTktfVkVSX0VYVF9DU1M7DQoJDQoJJHJzID0gc2FmZV9yb3dzX3N0YXJ0
KCduYW1lLCBjc3MnLCAndHhwX2NzcycsICcxPTEnKTsNCgkNCgl3aGlsZSAoJHJzICYmICRy
ID0gbmV4dFJvdygkcnMpKQ0KCXsNCgkJaWYgKEBmaWxlX3B1dF9jb250ZW50cygnLi4vJy4k
Q05LX1ZFUl9PVVRQVVRfUEFUSC4nY3NzLycuJHJbJ25hbWUnXS4nLicuJENOS19WRVJfRVhU
X0NTUywgYmFzZTY0X2RlY29kZSgkclsnY3NzJ10pKSA9PT0gZmFsc2UpIHJldHVybiBmYWxz
ZTsNCgl9DQoJDQoJc2FmZV91cGRhdGUoJ3R4cF9jc3MnLCAiZmlsZV9tb2RfdGltZSA9IEZS
T01fVU5JWFRJTUUoJyIudGltZSgpLiInKSIsICcxPTEnKTsNCgkNCglyZXR1cm4gdHJ1ZTsN
Cn0NCg0KZnVuY3Rpb24gY25rX3Zlcl9pbnN0YWxsKCkNCnsNCglwYWdldG9wKCdWZXJzaW9u
aW5nIFBsdWdpbiBJbnN0YWxsYXRpb24nLCAnJyk7DQoJDQoJZWNobyAnPGRpdiBzdHlsZT0i
bWFyZ2luOmF1dG87IHRleHQtYWxpZ246Y2VudGVyIj4nOw0KCQ0KCWlmIChjbmtfdmVyX2Rv
X2luc3RhbGwoKSkNCgl7DQoJCWVjaG8gJzxwPkluc3RhbGxhdGlvbiB3YXMgc3VjY2Vzc2Z1
bDwvcD4nOw0KCX0NCgllbHNlDQoJew0KCQllY2hvICc8cD5JbnN0YWxsYXRpb24gYWJvcnRl
ZDwvcD4nOw0KCX0NCg0KCWVjaG8gJzwvZGl2Pic7DQp9DQoNCmZ1bmN0aW9uIGNua192ZXJf
ZG9faW5zdGFsbCgpDQp7DQoJJHNxbCA9ICJBTFRFUiBUQUJMRSAiLnNhZmVfcGZ4KCd0eHBf
Zm9ybScpLiIgQUREIGBmaWxlX21vZF90aW1lYCBEQVRFVElNRSBOVUxMO0FMVEVSIFRBQkxF
ICIuc2FmZV9wZngoJ3R4cF9wYWdlJykuIiBBREQgYGZpbGVfbW9kX3RpbWVgIERBVEVUSU1F
IE5VTEw7QUxURVIgVEFCTEUgIi5zYWZlX3BmeCgndHhwX2NzcycpLiIgQUREIGBmaWxlX21v
ZF90aW1lYCBEQVRFVElNRSBOVUxMIjsNCgkNCglpZiAoIWNua192ZXJfYmF0Y2hfcXVlcnko
JHNxbCkpDQoJew0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCWVsc2UNCgl7CQ0KCQlyZXR1cm4g
dHJ1ZTsNCgl9DQp9DQoNCmZ1bmN0aW9uIGNua192ZXJfZGVpbnN0YWxsKCkNCnsNCglwYWdl
dG9wKCdWZXJzaW9uaW5nIFBsdWdpbiBEZWluc3RhbGxhdGlvbicsICcnKTsNCgkNCgllY2hv
ICc8ZGl2IHN0eWxlPSJtYXJnaW46YXV0bzsgdGV4dC1hbGlnbjpjZW50ZXIiPic7DQoJDQoJ
aWYgKGdwcygnZG9fZGVpbnN0YWxsJykpDQoJew0KCQlpZiAoY25rX3Zlcl9kb19kZWluc3Rh
bGwoKSkNCgkJew0KCQkJZWNobyAnPHA+RGVpbnN0YWxsYXRpb24gd2FzIHN1Y2Nlc3NmdWw8
L3A+JzsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCWVjaG8gJzxwPkRlaW5zdGFsbGF0aW9uIGFi
b3J0ZWQ8L3A+JzsNCgkJfQ0KCX0NCgllbHNlDQoJew0KCQllY2hvICc8YSBocmVmPSI/ZXZl
bnQ9Y25rX3ZlcnNpb25pbmcnLmEuJ3N0ZXA9Y25rX3Zlcl9kZWluc3RhbGwnLmEuJ2RvX2Rl
aW5zdGFsbD0xIj5ZZXMsIEkgcmVhbGx5IHdhbnQgdG8gZGVpbnN0YWxsPC9hPic7DQoJfQ0K
CQ0KCWVjaG8gJzwvZGl2Pic7DQp9DQoNCmZ1bmN0aW9uIGNua192ZXJfZG9fZGVpbnN0YWxs
KCkNCnsNCgkkc3FsID0gIkFMVEVSIFRBQkxFICIuc2FmZV9wZngoJ3R4cF9mb3JtJykuIiBE
Uk9QIGBmaWxlX21vZF90aW1lYDtBTFRFUiBUQUJMRSAiLnNhZmVfcGZ4KCd0eHBfcGFnZScp
LiIgRFJPUCBgZmlsZV9tb2RfdGltZWA7QUxURVIgVEFCTEUgIi5zYWZlX3BmeCgndHhwX2Nz
cycpLiIgRFJPUCBgZmlsZV9tb2RfdGltZWA7IjsNCgkNCglpZiAoIWNua192ZXJfYmF0Y2hf
cXVlcnkoJHNxbCkpDQoJew0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCWVsc2UNCgl7CQ0KCQly
ZXR1cm4gdHJ1ZTsNCgl9DQp9DQoNCmZ1bmN0aW9uIGNua192ZXJfYmF0Y2hfcXVlcnkgKCRw
X3F1ZXJ5LCAkcF90cmFuc2FjdGlvbl9zYWZlID0gdHJ1ZSkgDQp7DQoJaWYgKCRwX3RyYW5z
YWN0aW9uX3NhZmUpIA0KCXsNCgkJJHBfcXVlcnkgPSAnU1RBUlQgVFJBTlNBQ1RJT047JyAu
ICRwX3F1ZXJ5IC4gJzsgQ09NTUlUOyc7DQoJfQ0KCSAgDQoJJHF1ZXJ5X3NwbGl0ID0gcHJl
Z19zcGxpdCAoIi9bO10rLyIsICRwX3F1ZXJ5KTsNCgkNCglmb3JlYWNoICgkcXVlcnlfc3Bs
aXQgYXMgJGNvbW1hbmRfbGluZSkgDQoJew0KCQkkY29tbWFuZF9saW5lID0gdHJpbSgkY29t
bWFuZF9saW5lKTsNCgkNCgkJaWYgKCRjb21tYW5kX2xpbmUgIT0gJycpIA0KCQl7DQoJCQkk
cXVlcnlfcmVzdWx0ID0gc2FmZV9xdWVyeSgkY29tbWFuZF9saW5lKTsNCgkJDQoJCQlpZiAo
JHF1ZXJ5X3Jlc3VsdCA9PT0gZmFsc2UpIA0KCQkJew0KCQkJCWJyZWFrOw0KCQkJfQ0KCQl9
DQoJfQ0KCQ0KCXJldHVybiAkcXVlcnlfcmVzdWx0Ow0KfSI7czo0OiJ0eXBlIjtzOjE6IjEi
O3M6NDoiaGVscCI7czowOiIiO3M6MzoibWQ1IjtzOjMyOiJhMzVlMjVjNGM1YzZiNTNkOTFi
YjAxMTY2YjkwMzM4MSI7fQ==