SF.net SVN: phpwiki:[11091] trunk/passencrypt.php

carstenklapp--- via phpwiki-checkins <[email protected]> Thu, 13 Feb 2025 23:58:12 +0000
Newsgroups gmane.comp.web.wiki.phpwiki.checkins
Message-ID <[email protected]>
UmV2aXNpb246IDExMDkxCiAgICAgICAgICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvcGhwd2lr
aS9jb2RlLzExMDkxCkF1dGhvcjogICBjYXJzdGVua2xhcHAKRGF0ZTogICAgIDIwMjUtMDItMTMg
MjM6NTg6MTIgKzAwMDAgKFRodSwgMTMgRmViIDIwMjUpCkxvZyBNZXNzYWdlOgotLS0tLS0tLS0t
LQpJbXByb3ZlIHBhc3N3b3JkIGVuY3J5cHRpb24gYW5kIHJhbmRvbSBwdyBnZW5lcmF0aW9uLCBh
ZGRlZCBjb3B5IHRvIGNsaXBib2FyZCBidXR0b25zCgpNb2RpZmllZCBQYXRoczoKLS0tLS0tLS0t
LS0tLS0KICAgIHRydW5rL3Bhc3NlbmNyeXB0LnBocAoKTW9kaWZpZWQ6IHRydW5rL3Bhc3NlbmNy
eXB0LnBocAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSB0cnVuay9wYXNzZW5jcnlwdC5waHAJMjAyNS0wMi0xMyAy
MzoyNDo1MyBVVEMgKHJldiAxMTA5MCkKKysrIHRydW5rL3Bhc3NlbmNyeXB0LnBocAkyMDI1LTAy
LTEzIDIzOjU4OjEyIFVUQyAocmV2IDExMDkxKQpAQCAtMiw5ICsyLDkgQEAKIDxodG1sIHhtbDps
YW5nPSJlbiIgbGFuZz0iZW4iPgogPGhlYWQ+CiAgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiIC8+
Ci0gICAgPHRpdGxlPlBhc3N3b3JkIEVuY3J5cHRpb24gVG9vbDwvdGl0bGU+CisgICAgPHRpdGxl
PlBhc3N3b3JkIEVuY3J5cHRpb24gVG9vbCAyPC90aXRsZT4KICAgICA8IS0tCi0gICAgQ29weXJp
Z2h0IMKpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIgJFRoZVBocFdpa2lQcm9ncmFtbWluZ1RlYW0K
KyAgICBDb3B5cmlnaHQgwqkgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMi0yMDI1ICRUaGVQaHBXaWtp
UHJvZ3JhbW1pbmdUZWFtCiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBQaHBXaWtpLgogCkBA
IC0yNSw5ICsyNSw1MyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9y
LWxhdGVyCiAKICAgICAtLT4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cis8IS0tCitib2R5IHsK
KyAgICBjb2xvcjogYmxhY2s7CisgICAgYmFja2dyb3VuZDogd2hpdGU7CisgICAgYm9yZGVyLXRv
cDogMXB4IHNvbGlkICM3YzdjN2M7CisgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYzNjM2Mz
OworICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkZGRkOworICAgIGJvcmRlci1yaWdo
dDogMXB4IHNvbGlkICNjM2MzYzM7CisgICAgcGFkZGluZy1sZWZ0OiAwLjhlbTsKKyAgICBwYWRk
aW5nLXJpZ2h0OiAwLjhlbTsKKyAgICBwYWRkaW5nLXRvcDogMC41ZW07CisgICAgcGFkZGluZy1i
b3R0b206IDAuNWVtOworCisgICAgbWFyZ2luOiAyZXg7Cit9CitwIHsKKyAgICBsaW5lLWhlaWdo
dDogNGV4OworfQorc2FtcCwKKy5maWxlbmFtZSB7CisgICAgZm9udC1mYW1pbHk6IE1vbmFjbywg
bW9ub3NwYWNlOworICAgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorc2FtcCB7CisgICAgYmFja2dy
b3VuZDogd2hpdGU7CisgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICM3YzdjN2M7CisgICAgYm9y
ZGVyLWxlZnQ6IDFweCBzb2xpZCAjYzNjM2MzOworICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xp
ZCAjZGRkZGRkOworICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNjM2MzYzM7CisgICAgcGFk
ZGluZy1sZWZ0OiAwLjhlbTsKKyAgICBwYWRkaW5nLXJpZ2h0OiAwLjhlbTsKKyAgICBwYWRkaW5n
LXRvcDogMC41ZW07CisgICAgcGFkZGluZy1ib3R0b206IDAuNWVtOworICAgIG1hcmdpbjogMC41
ZXggMDsKKyAgICBtYXJnaW4tbGVmdDogMWV4OworICAgIGNsZWFyOiBib3RoOworICAgIGRpc3Bs
YXk6IHRhYmxlOworfQorZmllbGRzZXQgeworICAgZGlzcGxheTogaW5saW5lOworfQorLS0+Cis8
L3N0eWxlPgogPC9oZWFkPgogPGJvZHk+Ci08aDE+UGFzc3dvcmQgRW5jcnlwdGlvbiBUb29sPC9o
MT4KKzxoMT5QYXNzd29yZCBFbmNyeXB0aW9uIFRvb2wgMjwvaDE+CiA8P3BocAogZnVuY3Rpb24g
cmFuZF9hc2NpaSgkbGVuZ3RoID0gMSkKIHsKQEAgLTQ0LDExICs4OCwxMyBAQAogLy8gc3VpdGFi
bGUgZm9yIHVzZXIgcGFzc3dvcmRzLgogLy8gU2VxdWVuY2Ugb2YgcmFuZG9tIEFTQ0lJIG51bWJl
cnMsIGxldHRlcnMgYW5kIHNvbWUgc3BlY2lhbCBjaGFycy4KIC8vIE5vdGU6IFRoZXJlIGV4aXN0
IG90aGVyIGFsZ29yaXRobXMgZm9yIGVhc3ktdG8tcmVtZW1iZXIgcGFzc3dvcmRzLgotZnVuY3Rp
b24gcmFuZG9tX2dvb2RfcGFzc3dvcmQoJG1pbmxlbmd0aCA9IDUsICRtYXhsZW5ndGggPSA4KQor
ZnVuY3Rpb24gcmFuZG9tX2dvb2RfcGFzc3dvcmQoJG1pbmxlbmd0aCA9IDYsICRtYXhsZW5ndGgg
PSA2NCkKIHsKLSAgICAkbmV3cGFzcyA9ICcnOworICAgICRnZW5lcmF0ZWRfcHcgPSAnJzsKICAg
ICAvLyBhc3N1bWUgQVNDSUkgb3JkZXJpbmcgKG5vdCB2YWxpZCBvbiBFQkNESUMgc3lzdGVtcyEp
Ci0gICAgJHZhbGlkX2NoYXJzID0gIiEjJSYrLS4wMTIzNDU2Nzg5PUBBQkNERUZHSElKS0xNTk9Q
UVJTVFVWV1hZWl9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7CisgICAgJHZhbGlkX2NoYXJz
ID0gIiEjJSYrLS4wMTIzNDU2Nzg5PUBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9hYmNkZWZn
aGlqa2xtbm9wcXJzdHV2d3h5eiI7IC8vaW5jbHVkZWVzIHNvbWUgc3BlY2lhbCBjaGFycworICAg
IC8vJHZhbGlkX2NoYXJzID0gIjAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFi
Y2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjsvL2tlZXAgaXQgc2ltcGxlCisgICAgLy9yZXR1cm4g
c3Vic3RyKHN0cl9zaHVmZmxlKCR2YWxpZF9jaGFycyksIDAsICRtYXhsZW5ndGgpOy8vYmFzaWMg
bWV0aG9kCiAgICAgJHN0YXJ0ID0gb3JkKCR2YWxpZF9jaGFycyk7CiAgICAgJGVuZCA9IG9yZChz
dWJzdHIoJHZhbGlkX2NoYXJzLCAtMSkpOwogICAgICRsZW5ndGggPSBtdF9yYW5kKCRtaW5sZW5n
dGgsICRtYXhsZW5ndGgpOwpAQCAtNTcsMTIgKzEwMyw0MCBAQAogICAgICAgICBpZiAoIXN0cnJw
b3MoJHZhbGlkX2NoYXJzLCAkbmV3Y2hhcikpIHsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICB9IC8vIHNraXAgaG9sZXMKLSAgICAgICAgJG5ld3Bhc3MgLj0gc3ByaW50ZigiJWMiLCAk
bmV3Y2hhcik7CisgICAgICAgICRnZW5lcmF0ZWRfcHcgLj0gc3ByaW50ZigiJWMiLCAkbmV3Y2hh
cik7CiAgICAgICAgICRsZW5ndGgtLTsKICAgICB9Ci0gICAgcmV0dXJuICRuZXdwYXNzOworICAg
IHJldHVybiAkZ2VuZXJhdGVkX3B3OwogfQogCisvKioKKyAqIEdlbmVyYXRlIGEgcmFuZG9tIHN0
cmluZywgdXNpbmcgYSBjcnlwdG9ncmFwaGljYWxseSBzZWN1cmUgCisgKiBwc2V1ZG9yYW5kb20g
bnVtYmVyIGdlbmVyYXRvciAocmFuZG9tX2ludCkKKyAqIAorICogRm9yIFBIUCA3LCByYW5kb21f
aW50IGlzIGEgUEhQIGNvcmUgZnVuY3Rpb24KKyAqIEZvciBQSFAgNS54LCBkZXBlbmRzIG9uIGh0
dHBzOi8vZ2l0aHViLmNvbS9wYXJhZ29uaWUvcmFuZG9tX2NvbXBhdAorICogCisgKiBAcGFyYW0g
aW50ICRsZW5ndGggICAgICBIb3cgbWFueSBjaGFyYWN0ZXJzIGRvIHdlIHdhbnQ/CisgKiBAcGFy
YW0gc3RyaW5nICRrZXlzcGFjZSBBIHN0cmluZyBvZiBhbGwgcG9zc2libGUgY2hhcmFjdGVycwor
ICogICAgICAgICAgICAgICAgICAgICAgICAgdG8gc2VsZWN0IGZyb20KKyAqIEByZXR1cm4gc3Ry
aW5nCisgKi8KK2Z1bmN0aW9uIHJhbmRvbV9zZWN1cmVfcGFzc3dvcmQoCisgICAgJG1pbmxlbiA9
IDAsCisgICAgJG1heGxlbiA9IDEwLAorICAgICRrZXlzcGFjZSA9ICchIyUmKy0uMDEyMzQ1Njc4
OT1AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXon
KQoreworICAgICRnZW5lcmF0ZWRfcHcgPSAnJzsKKyAgICAkbWF4ID0gbWJfc3RybGVuKCRrZXlz
cGFjZSwgJzhiaXQnKSAtIDE7CisgICAgaWYgKCRtYXggPCAxKSB7CisgICAgICAgIHRocm93IG5l
dyBFeGNlcHRpb24oJyRrZXlzcGFjZSBtdXN0IGJlIGF0IGxlYXN0IHR3byBjaGFyYWN0ZXJzIGxv
bmcnKTsKKyAgICB9CisgICAgZm9yICgkaSA9IDA7ICRpIDwgJG1heGxlbjsgKyskaSkgeworICAg
ICAgICAkZ2VuZXJhdGVkX3B3IC49ICRrZXlzcGFjZVtyYW5kb21faW50KCRtaW5sZW4sICRtYXgp
XTsKKyAgICB9CisgICAgcmV0dXJuICRnZW5lcmF0ZWRfcHc7Cit9CisKIC8qKiBQSFA1IGRlcHJl
Y2F0ZWQgb2xkLXN0eWxlIGdsb2JhbHMgaWYgIShib29sKWluaV9nZXQoJ3JlZ2lzdGVyX2xvbmdf
YXJyYXlzJykuCiAgKiAgU2VlIEJ1ZyAjMTE4MDExNQogICogV2Ugd2FudCB0byB3b3JrIHdpdGgg
dGhvc2Ugb2xkIG9uZXMgaW5zdGVhZCBvZiB0aGUgbmV3IHN1cGVyZ2xvYmFscywKQEAgLTc3LDYy
ICsxNTEsMTY1IEBACiAKICRwb3N0ZWQgPSAkR0xPQkFMU1snSFRUUF9QT1NUX1ZBUlMnXTsKIGlm
ICghZW1wdHkoJHBvc3RlZFsnY3JlYXRlJ10pKSB7Ci0gICAgJG5ld19wYXNzd29yZCA9IHJhbmRv
bV9nb29kX3Bhc3N3b3JkKCk7Ci0gICAgZWNobyAiPHA+VGhlIG5ld2x5IGNyZWF0ZWQgcmFuZG9t
IHBhc3N3b3JkIGlzOjxiciAvPlxuPGJyIC8+Jm5ic3A7Jm5ic3A7Jm5ic3A7XG48c2FtcD48c3Ry
b25nPiIsCi0gICAgaHRtbGVudGl0aWVzKCRuZXdfcGFzc3dvcmQpLCAiPC9zdHJvbmc+PC9zYW1w
PjwvcD5cbiI7CisgICAgLy8kbmV3X3Bhc3N3b3JkID0gcmFuZG9tX2dvb2RfcGFzc3dvcmQoKTsK
KyAgICAkbmV3X3Bhc3N3b3JkID0gcmFuZG9tX3NlY3VyZV9wYXNzd29yZCgpOworICAgIGVjaG8g
IjxoMj5SYW5kb21seSBnZW5lcmF0ZWQgcGFzc3dvcmQ8L2gyPlxuIjsKKyAgICBlY2hvICI8cD5U
aGUgbmV3bHkgZ2VuZXJhdGVkIHVuZW5jcnlwdGVkIHJhbmRvbSBwYXNzd29yZCBpczogPHNhbXA+
IiwKKyAgICBodG1sZW50aXRpZXMoJG5ld19wYXNzd29yZCksICI8L3NhbXA+PC9wPlxuIjsKKz8+
CisgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbGVudGl0aWVz
KCRuZXdfcGFzc3dvcmQsCisgICAgICAgIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiIgaWQ9Imdl
bmVyYXRlZF9wd190ZXh0Ij4KKyAgICA8YnV0dG9uIG9uY2xpY2s9ImNvcHlUb0NsaXBib2FyZF9w
dygpIj5Db3B5IGdlbmVyYXRlZCBwYXNzd29yZCB0byBjbGlwYm9hcmQ8L2J1dHRvbj4KKworICAg
IDxzY3JpcHQ+CisgICAgICAgIGZ1bmN0aW9uIGNvcHlUb0NsaXBib2FyZF9wdygpIHsKKyAgICAg
ICAgICAgIHZhciBjb3B5VGV4dF9wdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnZW5lcmF0
ZWRfcHdfdGV4dCIpOworICAgICAgICAgICAgY29weVRleHRfcHcuc2VsZWN0KCk7CisgICAgICAg
ICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChjb3B5VGV4dF9wdy52YWx1ZSkKKyAg
ICAgICAgICAgIGFsZXJ0KCJDb3BpZWQgdGhlIHVuZW5jcnlwZWQgcGFzc3dvcmQ6XG4iICsgY29w
eVRleHRfcHcudmFsdWUpOworICAgICAgICB9CisgICAgPC9zY3JpcHQ+CisgICAgPGhyIC8+Cis8
P3BocAogICAgICRwb3N0ZWRbJ3Bhc3N3b3JkJ10gPSAkbmV3X3Bhc3N3b3JkOwogICAgICRwb3N0
ZWRbJ3Bhc3N3b3JkMiddID0gJG5ld19wYXNzd29yZDsKIH0KKyAgICBpZiAoICgkcG9zdGVkKSAm
JiAoJHBvc3RlZFsncGFzc3dvcmQnXSAhPSAiIikKKyAgICAgICAgJiYgKCRwb3N0ZWRbJ3Bhc3N3
b3JkJ10gPT0gJHBvc3RlZFsncGFzc3dvcmQyJ10pCisgICAgKQoreworICAgICRwYXNzd29yZCA9
ICRwb3N0ZWRbJ3Bhc3N3b3JkJ107CisgICAgJHBhc3N3b3JkMiA9ICRwb3N0ZWRbJ3Bhc3N3b3Jk
MiddOwogCi1pZiAoKCRwb3N0ZWRbJ3Bhc3N3b3JkJ10gIT0gIiIpCi0gICAgJiYgKCRwb3N0ZWRb
J3Bhc3N3b3JkJ10gPT0gJHBvc3RlZFsncGFzc3dvcmQyJ10pCi0pIHsKLSAgICAkcGFzc3dvcmQg
PSAkcG9zdGVkWydwYXNzd29yZCddOwotICAgIC8qKgotICAgICAqIGh0dHBzOi8vd3d3LnBocC5u
ZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmNyeXB0LnBocAotICAgICAqLwotICAgIC8vIFVzZSB0aGUg
bWF4aW11bSBzYWx0IGxlbmd0aCB0aGUgc3lzdGVtIGNhbiBoYW5kbGUuCi0gICAgJHNhbHRfbGVu
Z3RoID0gbWF4KAotICAgICAgICBDUllQVF9TQUxUX0xFTkdUSCwKLSAgICAgICAgMiAqIENSWVBU
X1NURF9ERVMsCi0gICAgICAgIDkgKiBDUllQVF9FWFRfREVTLAotICAgICAgICAxMiAqIENSWVBU
X01ENSwKLSAgICAgICAgMTYgKiBDUllQVF9CTE9XRklTSAotICAgICk7Ci0gICAgLy8gR2VuZXJh
dGUgdGhlIGVuY3J5cHRlZCBwYXNzd29yZC4KLSAgICAkZW5jcnlwdGVkX3Bhc3N3b3JkID0gY3J5
cHQoJHBhc3N3b3JkLCByYW5kX2FzY2lpKCRzYWx0X2xlbmd0aCkpOwotICAgICRkZWJ1ZyA9ICRI
VFRQX0dFVF9WQVJTWydkZWJ1ZyddOwotICAgIGlmICgkZGVidWcpIHsKLSAgICAgICAgZWNobyAi
VGhlIHBhc3N3b3JkIHdhcyBlbmNyeXB0ZWQgdXNpbmcgYSBzYWx0IGxlbmd0aCBvZjogJHNhbHRf
bGVuZ3RoPGJyIC8+XG4iOworICAgIGlmICghZnVuY3Rpb25fZXhpc3RzKCdwYXNzd29yZF9oYXNo
JykpIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFs
L2VuL2Z1bmN0aW9uLmNyeXB0LnBocAorICAgICAgICAgKi8KKyAgICAgICAgLy8gVXNlIHRoZSBt
YXhpbXVtIHNhbHQgbGVuZ3RoIHRoZSBzeXN0ZW0gY2FuIGhhbmRsZS4KKyAgICAgICAgJHNhbHRf
bGVuZ3RoID0gbWF4KAorICAgICAgICAgICAgQ1JZUFRfU0FMVF9MRU5HVEgsCisgICAgICAgICAg
ICAyICogQ1JZUFRfU1REX0RFUywgLy8gMiBjaGFyYWN0ZXIgc2FsdAorICAgICAgICAgICAgOSAq
IENSWVBUX0VYVF9ERVMsCisgICAgICAgICAgICAxMiAqIENSWVBUX01ENSwKKyAgICAgICAgICAg
IDE2ICogQ1JZUFRfQkxPV0ZJU0gKKyAgICAgICAgICAgIC8vIFRoZXJlIGFyZSBvdGhlcnMgYnV0
IEkgZG9uJ3Qga25vdyB0aGVpciBsZW5ndGhzCisgICAgICAgICk7CisgICAgICAgIC8vIEdlbmVy
YXRlIHRoZSBlbmNyeXB0ZWQgcGFzc3dvcmQuCisgICAgICAgICRyYW5kYXNjaWk9cmFuZF9hc2Np
aSgkc2FsdF9sZW5ndGgpOworICAgICAgICAkZW5jcnlwdGVkX3Bhc3N3b3JkID0gY3J5cHQoJHBh
c3N3b3JkLCAkcmFuZGFzY2lpKTsKKyAgICAgICAgJGRlYnVnPTA7CisgICAgICAgIGlmIChpc3Nl
dCgkSFRUUF9HRVRfVkFSU1snZGVidWcnXSkpIHsKKyAgICAgICAgICAgICRkZWJ1ZyA9ICRIVFRQ
X0dFVF9WQVJTWydkZWJ1ZyddOworICAgICAgICB9CisgICAgICAgIGlmICgkZGVidWcpIHsKKyAg
ICAgICAgICAgIGVjaG8gIjxwPlwkcmFuZGFzY2lpPSA8c2FtcD4iLmh0bWxlbnRpdGllcygkcmFu
ZGFzY2lpLCBFTlRfUVVPVEVTLAorICAgICAgICAgICAgICAgICdVVEYtOCcpLiI8L3NhbXA+PC9w
PlxuIjsKKyAgICAgICAgICAgIGVjaG8gIjxwPlRoZSBwYXNzd29yZCB3YXMgZW5jcnlwdGVkIHVz
aW5nIGEgc2FsdCBsZW5ndGggb2Y6ICRzYWx0X2xlbmd0aDwvcD5cbiI7CisgICAgICAgICAgICBl
Y2hvICI8cD5cJHJhbmRhc2NpaSBzdHJsZW4gaXMgPHNhbXA+Ii5zdHJsZW4oJHJhbmRhc2NpaSku
Ijwvc2FtcD48L3ByZT5cbiI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvKioK
KyAgICAgICAgICogaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGFzc3dv
cmQtaGFzaC5waHAKKyAgICAgICAgICovCisgICAgICAgIGVjaG8gIjxoMj5FbmNyeXB0aW9uIHJl
c3VsdHM8L2gyPlxuIjsKKyAgICAgICAgJGVuY3J5cHRlZF9wYXNzd29yZCA9IHBhc3N3b3JkX2hh
c2goJHBhc3N3b3JkLCBQQVNTV09SRF9ERUZBVUxUKTsKKyAgICAgICAgZWNobyAiPHA+VGhlIHBh
c3N3b3JkIHdhcyBlbmNyeXB0ZWQgdXNpbmcgdGhlIG5ld2VyIHBhc3N3b3JkX2hhc2goKSBmdW5j
dGlvbiBpbnN0ZWFkIG9mIGNyeXB0KCkuPC9wPlxuIjsKICAgICB9Ci0gICAgZWNobyAiPHA+VGhl
IGVuY3J5cHRlZCBwYXNzd29yZCBpczo8YnIgLz5cbjxiciAvPiZuYnNwOyZuYnNwOyZuYnNwO1xu
PHNhbXA+PHN0cm9uZz4iLAotICAgIGh0bWxlbnRpdGllcygkZW5jcnlwdGVkX3Bhc3N3b3JkKSwg
Ijwvc3Ryb25nPjwvc2FtcD48L3A+XG4iOwotICAgIGVjaG8gIjxociAvPlxuIjsKLX0gZWxzZWlm
ICgkcG9zdGVkWydwYXNzd29yZCddICE9ICIiKSB7Ci0gICAgZWNobyAiVGhlIHBhc3N3b3JkcyBk
aWQgbm90IG1hdGNoLiBQbGVhc2UgdHJ5IGFnYWluLjxiciAvPlxuIjsKKyAgICBpZiAoJGVuY3J5
cHRlZF9wYXNzd29yZCA9PT0gJyowJyB8fCAkZW5jcnlwdGVkX3Bhc3N3b3JkID09PSAnKjEnKSB7
CisgICAgICAgIGVjaG8gIjxwPkVycm9yOiBjcnlwdCgpIGZ1bmN0aW9uIGZhaWxlZC4gSnVzdCB0
cnkgYWdhaW4hPC9wPiI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgJGFkbWluX2luaV9lbnRyeSA9
ICdBRE1JTl9QQVNTV0Q9IicuJGVuY3J5cHRlZF9wYXNzd29yZC4nIic7CisgICAgICAgIGVjaG8g
IjxwPlRoZSBlbmNyeXB0ZWQgcGFzc3dvcmQgaXM6IDxzYW1wPiIsCisgICAgICAgIGh0bWxlbnRp
dGllcygkZW5jcnlwdGVkX3Bhc3N3b3JkKS4iPC9zYW1wPjwvcD5cbiI7CisKKyAgICAgICAgPz4K
KyAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbGVudGl0
aWVzKCRlbmNyeXB0ZWRfcGFzc3dvcmQsCisgICAgICAgICAgICBFTlRfUVVPVEVTLCAnVVRGLTgn
KTsgPz4iIGlkPSJlbmNyeXB0ZWRfcGFzc3dvcmRfdGV4dCI+CisgICAgICAgIDxidXR0b24gb25j
bGljaz0iY29weVRvQ2xpcGJvYXJkX2VuY3JwdygpIj5Db3B5IGVuY3J5cHRlZCBwYXNzd29yZCB0
byBjbGlwYm9hcmQ8L2J1dHRvbj4KKyAgICAgICAgPHNjcmlwdD4KKyAgICAgICAgICAgIGZ1bmN0
aW9uIGNvcHlUb0NsaXBib2FyZF9lbmNycHcoKSB7CisgICAgICAgICAgICAgICAgdmFyIGNvcHlU
ZXh0X2VuY3JwdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlbmNyeXB0ZWRfcGFzc3dvcmRf
dGV4dCIpOworICAgICAgICAgICAgICAgIGNvcHlUZXh0X2VuY3Jwdy5zZWxlY3QoKTsKKyAgICAg
ICAgICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChjb3B5VGV4dF9lbmNycHcu
dmFsdWUpCisgICAgICAgICAgICAgICAgYWxlcnQoIkNvcGllZCB0aGUgZW5jcnlwdGVkIHBhc3N3
b3JkOlxuIiArIGNvcHlUZXh0X2VuY3Jwdy52YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAg
IDwvc2NyaXB0PgorPD9waHAKKyAgICAgICAgZWNobyAiPGhyIC8+XG4iOworICAgICAgICBlY2hv
ICI8cD5Db3B5IHRoaXMgaW50byB5b3VyIDxzcGFuIGNsYXNzPVwiZmlsZW5hbWVcIj5waHB3aWtp
L2NvbmZpZy9jb25maWcuaW5pPC9zcGFuPiBmaWxlOiA8c2FtcD4iLgorICAgICAgICBodG1sZW50
aXRpZXMoJGFkbWluX2luaV9lbnRyeSwgRU5UX1FVT1RFUywgJ1VURi04JykuICI8L3NhbXA+PC9w
PlxuIjsKKz8+CisgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIHZhbHVlPSI8P3BocCBlY2hv
IGh0bWxlbnRpdGllcygkYWRtaW5faW5pX2VudHJ5LAorICAgICAgICAgICAgRU5UX1FVT1RFUywg
J1VURi04Jyk7ID8+IiBpZD0iYWRtaW5faW5pX2VudHJ5X3RleHQiPgorICAgICAgICA8YnV0dG9u
IG9uY2xpY2s9ImNvcHlUb0NsaXBib2FyZF9pbmkoKSI+Q29weSBjb25maWcuaW5pIGVudHJ5IHRv
IGNsaXBib2FyZDwvYnV0dG9uPgorICAgICAgICA8c2NyaXB0PgorICAgICAgICAgICAgZnVuY3Rp
b24gY29weVRvQ2xpcGJvYXJkX2luaSgpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29weVRleHRf
aW5pID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFkbWluX2luaV9lbnRyeV90ZXh0Iik7Cisg
ICAgICAgICAgICAgICAgY29weVRleHRfaW5pLnNlbGVjdCgpOworICAgICAgICAgICAgICAgIG5h
dmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGNvcHlUZXh0X2luaS52YWx1ZSkKKyAgICAgICAg
ICAgICAgICBhbGVydCgiQ29waWVkIHRoZSBjb25maWcuaW5pIGVudHJ5OlxuIiArIGNvcHlUZXh0
X2luaS52YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIDwvc2NyaXB0PgorPD9waHAKKyAg
ICAgICAgZWNobyAiPGhyIC8+XG4iOworICAgIH0KKworfSBlbHNlaWYgKCgkcG9zdGVkKSAmJgor
ICAgICAgICAgICgkcG9zdGVkWydwYXNzd29yZCddICE9ICIiKQorICAgICAgICAgKQoreworICAg
IGVjaG8gIjxwPlRoZSBwYXNzd29yZHMgZGlkIG5vdCBtYXRjaC4gUGxlYXNlIHRyeSBhZ2Fpbi48
L3A+XG4iOwogfQogaWYgKGVtcHR5KCRSRVFVRVNUX1VSSSkpIHsKLSAgICAkUkVRVUVTVF9VUkkg
PSAkSFRUUF9FTlZfVkFSU1snUkVRVUVTVF9VUkknXTsKKyAgICBpZiAoIWVtcHR5KCRIVFRQX0VO
Vl9WQVJTKSkgeworICAgICAgICAkUkVRVUVTVF9VUkkgPSAkSFRUUF9FTlZfVkFSU1snUkVRVUVT
VF9VUkknXTsKKyAgICB9CiB9CiBpZiAoZW1wdHkoJFJFUVVFU1RfVVJJKSkgewogICAgICRSRVFV
RVNUX1VSSSA9ICRfU0VSVkVSWydSRVFVRVNUX1VSSSddOwogfQorCitpZiAoKCRwb3N0ZWQpICYm
CisgICAgICAgICAgKCRwb3N0ZWRbJ3Bhc3N3b3JkJ10gIT0gIiIpCisgICAgICAgICApIHsKKyAg
ICAgICAgICAgICRwYXNzd29yZD0kcG9zdGVkWydwYXNzd29yZCddOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgJHBhc3N3b3JkPSIiOworICAgICAgICB9CitpZiAoKCRwb3N0ZWQpICYm
CisgICAgICAgICAoJHBvc3RlZFsncGFzc3dvcmQyJ10gIT0gIiIpCisgICAgICAgICkgeworICAg
ICAgICAgICAgJHBhc3N3b3JkMj0kcG9zdGVkWydwYXNzd29yZDInXTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICRwYXNzd29yZDI9IiI7CisgICAgICAgIH0KID8+Ci0KLTxmb3JtIGFj
dGlvbj0iPD9waHAgZWNobyAkUkVRVUVTVF9VUkkgPz4iIG1ldGhvZD0icG9zdCI+Cis8Zm9ybSBh
Y3Rpb249Ijw/cGhwIGVjaG8gJFJFUVVFU1RfVVJJID8+IiBtZXRob2Q9InBvc3QiIGlkPSJteUZv
cm0iPgorPGgyPkVuY3J5cHQgYSBwYXNzd29yZCBvciBnZW5lcmF0ZSBvbmUgYXQgcmFuZG9tPC9o
Mj4KICAgICA8ZmllbGRzZXQ+CiAgICAgICAgIDxsZWdlbmQ+RW5jcnlwdDwvbGVnZW5kPgotICAg
ICAgICBFbnRlciBhIHBhc3N3b3JkIHR3aWNlIHRvIGVuY3J5cHQgaXQ6PGJyLz4KLSAgICAgICAg
PGlucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwYXNzd29yZCIgdmFsdWU9IiIvPjxici8+Ci0g
ICAgICAgIDxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0icGFzc3dvcmQyIiB2YWx1ZT0iIi8+
IDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJFbmNyeXB0Ii8+Ci0gICAgPC9maWVsZHNldD4K
LSAgICA8YnIvPgotICAgIG9yOjxici8+Ci0gICAgPGJyLz4KKyAgICAgICAgPHA+RW50ZXIgYSBw
YXNzd29yZCB0d2ljZSB0byBlbmNyeXB0IGl0OjwvcD4KKyAgICAgICAgPGlucHV0IHR5cGU9InBh
c3N3b3JkIiBuYW1lPSJwYXNzd29yZCIgdmFsdWU9Ijw/cGhwCisgICAgICAgICAgICBlY2hvIGh0
bWxlbnRpdGllcygkcGFzc3dvcmQsIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiIvPjxici8+Cisg
ICAgICAgIDxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0icGFzc3dvcmQyIiB2YWx1ZT0iPD9w
aHAKKyAgICAgICAgICAgIGVjaG8gaHRtbGVudGl0aWVzKCRwYXNzd29yZDIsIEVOVF9RVU9URVMs
ICdVVEYtOCcpOyA/PiIvPgorICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iRW5j
cnlwdCIvPgorICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgb25jbGljaz0iY2xlYXJmb3Jt
KCkiPkNsZWFyPC9idXR0b24+CisgICAgICAgIDwvZmllbGRzZXQ+CisgICAgPHNjcmlwdD4KKyAg
ICAgICAgZnVuY3Rpb24gY2xlYXJmb3JtKCkgeworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeU5hbWUoJ3Bhc3N3b3JkJylbMF0udmFsdWUgPSAnJzsKKyAgICAgICAgICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRzQnlOYW1lKCdwYXNzd29yZDInKVswXS52YWx1ZSA9ICcnOworICAgICAg
ICB9CisgICAgPC9zY3JpcHQ+CisgICAgPHA+b3I6PC9wPgogICAgIDxmaWVsZHNldD4KICAgICAg
ICAgPGxlZ2VuZD5HZW5lcmF0ZTwvbGVnZW5kPgotICAgICAgICBDcmVhdGUgYSBuZXcgcmFuZG9t
IHBhc3N3b3JkOiA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJjcmVhdGUiIHZhbHVlPSJDcmVh
dGUiLz4KKyAgICAgICAgPHA+UmFuZG9tbHkgZ2VuZXJhdGUgYSBuZXcgcGFzc3dvcmQ6CisgICAg
ICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImNyZWF0ZSIgdmFsdWU9IkdlbmVyYXRlIi8+
PGJyIC8+CisgICAgICAgIChKdXN0IGtlZXAgY2xpY2tpbmcgR2VuZXJhdGUgdW50aWwgeW91IHNl
ZSBhIHBhc3N3b3JkIHlvdSBsaWtlLik8L3A+CiAgICAgPC9maWVsZHNldD4KKyAgICA8c2NyaXB0
PgogPC9mb3JtPgogPC9ib2R5PgogPC9odG1sPgoKVGhpcyB3YXMgc2VudCBieSB0aGUgU291cmNl
Rm9yZ2UubmV0IGNvbGxhYm9yYXRpdmUgZGV2ZWxvcG1lbnQgcGxhdGZvcm0sIHRoZSB3b3JsZCdz
IGxhcmdlc3QgT3BlbiBTb3VyY2UgZGV2ZWxvcG1lbnQgc2l0ZS4KCgoKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KcGhwd2lraS1jaGVja2lucyBtYWlsaW5n
IGxpc3QKcGhwd2lraS1jaGVja2luc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKaHR0cHM6Ly9saXN0
cy5zb3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGluZm8vcGhwd2lraS1jaGVja2lucwo=