[PATCH] SecurityManager compatibility patch

Jukka Santala kaffe@rufus.w3.org
Thu, 2 Aug 2001 12:37:20 +0300 (EET DST)


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

---559023410-851401618-996745040=:26911
Content-Type: TEXT/PLAIN; charset=US-ASCII

This is a fairly straightforward patch to make the default SecurityManager
returned through System.getSecurityManager() to == null. This is
apparently the correct behaviour for compliant classlibs; SecurityManager
is only set by default for applets, and some Java programs will think
they're being ran as applets if they find SecurityManager set, acting
weirdly or refusing to run altogether.

Kaffe's NullSecurityManager permits everything anyway, this makes no
change in security semantics, but allows stuff like JMF 2.1.1 to at least
run. The only non-straightforward change is the mechanism in
Class.getStackClass(), since it's not apparent what should happen if
SecurityManager isn't set. This patch follows the prior behaviour, and
calls defaultSecurityManager's method.

 -Donwulff

---559023410-851401618-996745040=:26911
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="kaffe-sm.patch"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.SOL.4.10.10108021237200.26911@morphine.tml.hut.fi>
Content-Description: 
Content-Disposition: attachment; filename="kaffe-sm.patch"

SW5kZXg6IGxpYnJhcmllcy9qYXZhbGliL2phdmEvYXd0L0FXVEV2ZW50Lmph
dmENCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvY3ZzL2th
ZmZlL2thZmZlL2xpYnJhcmllcy9qYXZhbGliL2phdmEvYXd0L0FXVEV2ZW50
LmphdmEsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjEwDQpkaWZmIC11IC1y
MS4xMCBBV1RFdmVudC5qYXZhDQotLS0gbGlicmFyaWVzL2phdmFsaWIvamF2
YS9hd3QvQVdURXZlbnQuamF2YQkxOTk5LzA3LzI0IDAwOjU2OjEwCTEuMTAN
CisrKyBsaWJyYXJpZXMvamF2YWxpYi9qYXZhL2F3dC9BV1RFdmVudC5qYXZh
CTIwMDEvMDgvMDIgMDk6MjY6NDQNCkBAIC0xNjEsNyArMTYxLDkgQEANCiAJ
CWlmICggRGVmYXVsdHMuQXV0b1N0b3AgKSB7DQogCQkJLy8gZ2l2ZSB0aGUg
U2VjdXJpdHlNYW5hZ2VyIGEgY2hhbmNlIHRvIHN0ZXAgaW4gYmVmb3JlDQog
CQkJLy8gY2xvc2luZyBkb3duIHRoZSBUb29sa2l0DQotCQkJU3lzdGVtLmdl
dFNlY3VyaXR5TWFuYWdlcigpLmNoZWNrRXhpdCggMCk7DQorCQkJU2VjdXJp
dHlNYW5hZ2VyIHNtID0gU3lzdGVtLmdldFNlY3VyaXR5TWFuYWdlcigpOw0K
KwkJCWlmKHNtICE9IG51bGwpDQorCQkJCXNtLmNoZWNrRXhpdCggMCk7DQog
CQkNCiAJCQlUb29sa2l0LnRlcm1pbmF0ZSgpOw0KIAkJCVN5c3RlbS5leGl0
KCAwKTsgLy8gbm90IHN0cmljdGx5IHJlcXVpcmVkIChpZiB0aGVyZSBhcmUg
bm8gcGVyc2lzdGVudCBkYWVtb25zKQ0KSW5kZXg6IGxpYnJhcmllcy9qYXZh
bGliL2phdmEvYXd0L1dpbmRvdy5qYXZhDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQpSQ1MgZmlsZTogL2N2cy9rYWZmZS9rYWZmZS9saWJyYXJpZXMvamF2
YWxpYi9qYXZhL2F3dC9XaW5kb3cuamF2YSx2DQpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMTINCmRpZmYgLXUgLXIxLjEyIFdpbmRvdy5qYXZhDQotLS0gbGli
cmFyaWVzL2phdmFsaWIvamF2YS9hd3QvV2luZG93LmphdmEJMTk5OS8xMC8x
MiAwMjoyOTo0MQkxLjEyDQorKysgbGlicmFyaWVzL2phdmFsaWIvamF2YS9h
d3QvV2luZG93LmphdmEJMjAwMS8wOC8wMiAwOToyNjo0NA0KQEAgLTE3Miwx
MCArMTcyLDExIEBADQogfQ0KIA0KIGZpbmFsIHB1YmxpYyBTdHJpbmcgZ2V0
V2FybmluZ1N0cmluZygpIHsNDQotCWlmIChTeXN0ZW0uZ2V0U2VjdXJpdHlN
YW5hZ2VyKCkuY2hlY2tUb3BMZXZlbFdpbmRvdyh0aGlzKSA9PSB0cnVlKSB7
DQ0KLQkJcmV0dXJuIChudWxsKTsNDQotCX0NDQotCXJldHVybiAoU3lzdGVt
LmdldFByb3BlcnR5KCJhd3QuYXBwbGV0V2FybmluZyIpKTsNDQorCVNlY3Vy
aXR5TWFuYWdlciBzbSA9IFN5c3RlbS5nZXRTZWN1cml0eU1hbmFnZXIoKTsN
CisJaWYoc20gIT0gbnVsbCkNCisJCWlmIChzbS5jaGVja1RvcExldmVsV2lu
ZG93KHRoaXMpICE9IHRydWUpDQorCQkJcmV0dXJuIChTeXN0ZW0uZ2V0UHJv
cGVydHkoImF3dC5hcHBsZXRXYXJuaW5nIikpOw0NCisJcmV0dXJuIChudWxs
KTsNCiB9DQogDQogcHVibGljIHZvaWQgaGlkZSgpIHsNDQpJbmRleDogbGli
cmFyaWVzL2phdmFsaWIvamF2YS9hd3Qvd2luMzIvV2luZG93LmphdmENCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvY3ZzL2thZmZlL2th
ZmZlL2xpYnJhcmllcy9qYXZhbGliL2phdmEvYXd0L3dpbjMyL1dpbmRvdy5q
YXZhLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4yDQpkaWZmIC11IC1yMS4y
IFdpbmRvdy5qYXZhDQotLS0gbGlicmFyaWVzL2phdmFsaWIvamF2YS9hd3Qv
d2luMzIvV2luZG93LmphdmEJMTk5OS8xMC8xMiAwMjoyOTo0NQkxLjINCisr
KyBsaWJyYXJpZXMvamF2YWxpYi9qYXZhL2F3dC93aW4zMi9XaW5kb3cuamF2
YQkyMDAxLzA4LzAyIDA5OjI2OjQ0DQpAQCAtMTQxLDEwICsxNDEsMTEgQEAN
CiB9DQogDQogZmluYWwgcHVibGljIFN0cmluZyBnZXRXYXJuaW5nU3RyaW5n
KCkgew0KLQlpZiAoU3lzdGVtLmdldFNlY3VyaXR5TWFuYWdlcigpLmNoZWNr
VG9wTGV2ZWxXaW5kb3codGhpcykgPT0gdHJ1ZSkgew0KLQkJcmV0dXJuIChu
dWxsKTsNCi0JfQ0KLQlyZXR1cm4gKFN5c3RlbS5nZXRQcm9wZXJ0eSgiYXd0
LmFwcGxldFdhcm5pbmciKSk7DQorCVNlY3VyaXR5TWFuYWdlciBzbSA9IFN5
c3RlbS5nZXRTZWN1cml0eU1hbmFnZXIoKTsNCisJaWYoc20gIT0gbnVsbCkN
CisJCWlmIChzbS5jaGVja1RvcExldmVsV2luZG93KHRoaXMpICE9IHRydWUp
DQorCQkJcmV0dXJuIChTeXN0ZW0uZ2V0UHJvcGVydHkoImF3dC5hcHBsZXRX
YXJuaW5nIikpOw0KKwlyZXR1cm4gKG51bGwpOw0KIH0NCiANCiBwdWJsaWMg
Ym9vbGVhbiBpc1Nob3dpbmcgKCkgew0KSW5kZXg6IGxpYnJhcmllcy9qYXZh
bGliL2phdmEvYmVhbnMvQmVhbnMuamF2YQ0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KUkNTIGZpbGU6IC9jdnMva2FmZmUva2FmZmUvbGlicmFyaWVzL2ph
dmFsaWIvamF2YS9iZWFucy9CZWFucy5qYXZhLHYNCnJldHJpZXZpbmcgcmV2
aXNpb24gMS4zDQpkaWZmIC11IC1yMS4zIEJlYW5zLmphdmENCi0tLSBsaWJy
YXJpZXMvamF2YWxpYi9qYXZhL2JlYW5zL0JlYW5zLmphdmEJMTk5OS8xMC8x
NCAxOToyMjoxMQkxLjMNCisrKyBsaWJyYXJpZXMvamF2YWxpYi9qYXZhL2Jl
YW5zL0JlYW5zLmphdmEJMjAwMS8wOC8wMiAwOToyNjo0NA0KQEAgLTY1LDEy
ICs2NSwxNiBAQA0KIH0NCiANCiBwdWJsaWMgc3RhdGljIHZvaWQgc2V0RGVz
aWduVGltZShib29sZWFuIGlzRGVzaWduVGltZSkgdGhyb3dzIFNlY3VyaXR5
RXhjZXB0aW9uIHsNCi0JLy8gU3lzdGVtLmdldFNlY3VyaXR5TWFuYWdlcigp
LmNoZWNrPz8/DQorCS8vIFNlY3VyaXR5TWFuYWdlciBzbSA9IFN5c3RlbS5n
ZXRTZWN1cml0eU1hbmFnZXIoKTsNCisJLy8gaWYoc20gIT0gbnVsbCkNCisJ
Ly8gCXNtLmNoZWNrPz8/DQogCWRlc2lnbnRpbWUgPSBpc0Rlc2lnblRpbWU7
DQogfQ0KIA0KIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRHdWlBdmFpbGFibGUo
Ym9vbGVhbiBpc0d1aUF2YWlsYWJsZSkgdGhyb3dzIFNlY3VyaXR5RXhjZXB0
aW9uIHsNCi0JLy8gU3lzdGVtLmdldFNlY3VyaXR5TWFuYWdlcigpLmNoZWNr
Pz8/DQorCS8vIFNlY3VyaXR5TWFuYWdlciBzbSA9IFN5c3RlbS5nZXRTZWN1
cml0eU1hbmFnZXIoKTsNCisJLy8gaWYoc20gIT0gbnVsbCkNCisJLy8gCXNt
LmNoZWNrPz8/DQogCWd1aWF2YWlsYWJsZSA9IGlzR3VpQXZhaWxhYmxlOw0K
IH0NCiANCkluZGV4OiBsaWJyYXJpZXMvamF2YWxpYi9qYXZhL2lvL0ZpbGUu
amF2YQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnMv
a2FmZmUva2FmZmUvbGlicmFyaWVzL2phdmFsaWIvamF2YS9pby9GaWxlLmph
dmEsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjI2DQpkaWZmIC11IC1yMS4y
NiBGaWxlLmphdmENCi0tLSBsaWJyYXJpZXMvamF2YWxpYi9qYXZhL2lvL0Zp
bGUuamF2YQkyMDAwLzA1LzE5IDAyOjAzOjEyCTEuMjYNCisrKyBsaWJyYXJp
ZXMvamF2YWxpYi9qYXZhL2lvL0ZpbGUuamF2YQkyMDAxLzA4LzAyIDA5OjI2
OjQ0DQpAQCAtODUsMTEgKzg1LDE1IEBADQogbmF0aXZlIHByaXZhdGUgYm9v
bGVhbiBjYW5Xcml0ZTAoKTsNCiANCiBwcml2YXRlIHZvaWQgY2hlY2tSZWFk
QWNjZXNzKCkgew0KLQlTeXN0ZW0uZ2V0U2VjdXJpdHlNYW5hZ2VyKCkuY2hl
Y2tSZWFkKGdldFBhdGgoKSk7DQorCVNlY3VyaXR5TWFuYWdlciBzbSA9IFN5
c3RlbS5nZXRTZWN1cml0eU1hbmFnZXIoKTsNCisJaWYoc20gIT0gbnVsbCkN
CisJCXNtLmNoZWNrUmVhZChnZXRQYXRoKCkpOw0KIH0NCiANCiBwcml2YXRl
IHZvaWQgY2hlY2tXcml0ZUFjY2VzcygpIHsNCi0JU3lzdGVtLmdldFNlY3Vy
aXR5TWFuYWdlcigpLmNoZWNrV3JpdGUoZ2V0UGF0aCgpKTsNCisJU2VjdXJp
dHlNYW5hZ2VyIHNtID0gU3lzdGVtLmdldFNlY3VyaXR5TWFuYWdlcigpOw0K
KwlpZihzbSAhPSBudWxsKQ0KKwkJc20uY2hlY2tXcml0ZShnZXRQYXRoKCkp
Ow0KIH0NCiANCiBwdWJsaWMgc3RhdGljIEZpbGUgY3JlYXRlVGVtcEZpbGUo
U3RyaW5nIHByZWZpeCwgU3RyaW5nIHN1ZmZpeCkNCkBAIC0xMTksNyArMTIz
LDkgQEANCiB9DQogDQogcHVibGljIGJvb2xlYW4gZGVsZXRlKCkgew0KLQlT
eXN0ZW0uZ2V0U2VjdXJpdHlNYW5hZ2VyKCkuY2hlY2tEZWxldGUoZ2V0UGF0
aCgpKTsNCisJU2VjdXJpdHlNYW5hZ2VyIHNtID0gU3lzdGVtLmdldFNlY3Vy
aXR5TWFuYWdlcigpOw0KKwlpZihzbSAhPSBudWxsKQ0KKwkJc20uY2hlY2tE
ZWxldGUoZ2V0UGF0aCgpKTsNCiANCiAJcmV0dXJuIGlzRGlyZWN0b3J5MCgp
ID8gcm1kaXIwKCkgOiBkZWxldGUwKCk7DQogfQ0KQEAgLTM0MSw4ICszNDcs
MTEgQEANCiB9DQogDQogcHVibGljIGJvb2xlYW4gcmVuYW1lVG8oRmlsZSBk
ZXN0KSB7DQotCVN5c3RlbS5nZXRTZWN1cml0eU1hbmFnZXIoKS5jaGVja1dy
aXRlKGdldFBhdGgoKSk7DQotCVN5c3RlbS5nZXRTZWN1cml0eU1hbmFnZXIo
KS5jaGVja1dyaXRlKGRlc3QuZ2V0UGF0aCgpKTsNCisJU2VjdXJpdHlNYW5h
Z2VyIHNtID0gU3lzdGVtLmdldFNlY3VyaXR5TWFuYWdlcigpOw0KKwlpZihz
bSAhPSBudWxsKSB7DQorCQlzbS5jaGVja1dyaXRlKGdldFBhdGgoKSk7DQor
CQlzbS5jaGVja1dyaXRlKGRlc3QuZ2V0UGF0aCgpKTsNCisJfQ0KIA0KIAly
ZXR1cm4gcmVuYW1lVG8wKGRlc3QpOw0KIH0NCkluZGV4OiBsaWJyYXJpZXMv
amF2YWxpYi9qYXZhL2lvL0ZpbGVJbnB1dFN0cmVhbS5qYXZhDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2cy9rYWZmZS9rYWZmZS9s
aWJyYXJpZXMvamF2YWxpYi9qYXZhL2lvL0ZpbGVJbnB1dFN0cmVhbS5qYXZh
LHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS45DQpkaWZmIC11IC1yMS45IEZp
bGVJbnB1dFN0cmVhbS5qYXZhDQotLS0gbGlicmFyaWVzL2phdmFsaWIvamF2
YS9pby9GaWxlSW5wdXRTdHJlYW0uamF2YQkxOTk5LzExLzA4IDIyOjE2OjQ0
CTEuOQ0KKysrIGxpYnJhcmllcy9qYXZhbGliL2phdmEvaW8vRmlsZUlucHV0
U3RyZWFtLmphdmEJMjAwMS8wOC8wMiAwOToyNjo0NA0KQEAgLTI2LDEyICsy
NiwxNiBAQA0KIH0NCiANCiBwdWJsaWMgRmlsZUlucHV0U3RyZWFtKEZpbGVE
ZXNjcmlwdG9yIGZkT2JqKSB7DQotCVN5c3RlbS5nZXRTZWN1cml0eU1hbmFn
ZXIoKS5jaGVja1JlYWQoZmRPYmopOw0KKwlTZWN1cml0eU1hbmFnZXIgc20g
PSBTeXN0ZW0uZ2V0U2VjdXJpdHlNYW5hZ2VyKCk7DQorCWlmKHNtICE9IG51
bGwpDQorCQlzbS5jaGVja1JlYWQoZmRPYmopOw0KIAlmZD1mZE9iajsNCiB9
DQogDQogcHVibGljIEZpbGVJbnB1dFN0cmVhbShTdHJpbmcgbmFtZSkgdGhy
b3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7DQotCVN5c3RlbS5nZXRTZWN1
cml0eU1hbmFnZXIoKS5jaGVja1JlYWQobmFtZSk7CQkNCisJU2VjdXJpdHlN
YW5hZ2VyIHNtID0gU3lzdGVtLmdldFNlY3VyaXR5TWFuYWdlcigpOw0KKwlp
ZihzbSAhPSBudWxsKQ0KKwkJc20uY2hlY2tSZWFkKG5hbWUpOwkJDQogCXRy
eSB7DQogCQlvcGVuKG5hbWUpOw0KIAl9IGNhdGNoIChJT0V4Y2VwdGlvbiBl
KSB7DQpJbmRleDogbGlicmFyaWVzL2phdmFsaWIvamF2YS9pby9GaWxlT3V0
cHV0U3RyZWFtLmphdmENCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBm
aWxlOiAvY3ZzL2thZmZlL2thZmZlL2xpYnJhcmllcy9qYXZhbGliL2phdmEv
aW8vRmlsZU91dHB1dFN0cmVhbS5qYXZhLHYNCnJldHJpZXZpbmcgcmV2aXNp
b24gMS41DQpkaWZmIC11IC1yMS41IEZpbGVPdXRwdXRTdHJlYW0uamF2YQ0K
LS0tIGxpYnJhcmllcy9qYXZhbGliL2phdmEvaW8vRmlsZU91dHB1dFN0cmVh
bS5qYXZhCTE5OTkvMTAvMjggMTg6MzE6MjUJMS41DQorKysgbGlicmFyaWVz
L2phdmFsaWIvamF2YS9pby9GaWxlT3V0cHV0U3RyZWFtLmphdmEJMjAwMS8w
OC8wMiAwOToyNjo0NA0KQEAgLTI4LDcgKzI4LDkgQEANCiANCiBwdWJsaWMg
RmlsZU91dHB1dFN0cmVhbShGaWxlRGVzY3JpcHRvciBmZE9iaikNCiAJew0K
LQlTeXN0ZW0uZ2V0U2VjdXJpdHlNYW5hZ2VyKCkuY2hlY2tXcml0ZShmZE9i
aik7DQorCVNlY3VyaXR5TWFuYWdlciBzbSA9IFN5c3RlbS5nZXRTZWN1cml0
eU1hbmFnZXIoKTsNCisJaWYoc20gIT0gbnVsbCkNCisJCXNtLmNoZWNrV3Jp
dGUoZmRPYmopOw0KIAlmZCA9IGZkT2JqOw0KIH0NCiANCkBAIC0zOSw3ICs0
MSw5IEBADQogDQogcHVibGljIEZpbGVPdXRwdXRTdHJlYW0oU3RyaW5nIG5h
bWUsIGJvb2xlYW4gYXBwZW5kKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0
aW9uDQogew0KLQlTeXN0ZW0uZ2V0U2VjdXJpdHlNYW5hZ2VyKCkuY2hlY2tX
cml0ZShuYW1lKTsNCisJU2VjdXJpdHlNYW5hZ2VyIHNtID0gU3lzdGVtLmdl
dFNlY3VyaXR5TWFuYWdlcigpOw0KKwlpZihzbSAhPSBudWxsKQ0KKwkJc20u
Y2hlY2tXcml0ZShuYW1lKTsNCiAJaWYgKGFwcGVuZCA9PSBmYWxzZSkgew0K
IAkJb3BlbihuYW1lKTsJCQ0KIAl9DQpJbmRleDogbGlicmFyaWVzL2phdmFs
aWIvamF2YS9pby9SYW5kb21BY2Nlc3NGaWxlLmphdmENCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0NClJDUyBmaWxlOiAvY3ZzL2thZmZlL2thZmZlL2xpYnJh
cmllcy9qYXZhbGliL2phdmEvaW8vUmFuZG9tQWNjZXNzRmlsZS5qYXZhLHYN
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNQ0KZGlmZiAtdSAtcjEuMTUgUmFu
ZG9tQWNjZXNzRmlsZS5qYXZhDQotLS0gbGlicmFyaWVzL2phdmFsaWIvamF2
YS9pby9SYW5kb21BY2Nlc3NGaWxlLmphdmEJMTk5OS8xMS8xMSAxOTo1NDoz
OQkxLjE1DQorKysgbGlicmFyaWVzL2phdmFsaWIvamF2YS9pby9SYW5kb21B
Y2Nlc3NGaWxlLmphdmEJMjAwMS8wOC8wMiAwOToyNjo0NA0KQEAgLTI5LDkg
KzI5LDExIEBADQogCWVsc2UgaWYgKG1vZGUuZXF1YWxzSWdub3JlQ2FzZSgi
cnciKSkgd3JpdGFibGU9dHJ1ZTsNCiAJZWxzZSB0aHJvdyBuZXcgSWxsZWdh
bEFyZ3VtZW50RXhjZXB0aW9uKCk7DQogDQotCVN5c3RlbS5nZXRTZWN1cml0
eU1hbmFnZXIoKS5jaGVja1JlYWQobmFtZSk7DQotCWlmICh3cml0YWJsZSkg
ew0KLQkJU3lzdGVtLmdldFNlY3VyaXR5TWFuYWdlcigpLmNoZWNrV3JpdGUo
bmFtZSk7DQorCVNlY3VyaXR5TWFuYWdlciBzbSA9IFN5c3RlbS5nZXRTZWN1
cml0eU1hbmFnZXIoKTsNCisJaWYoc20gIT0gbnVsbCkgew0KKwkJc20uY2hl
Y2tSZWFkKG5hbWUpOw0KKwkJaWYgKHdyaXRhYmxlKQ0KKwkJCXNtLmNoZWNr
V3JpdGUobmFtZSk7DQogCX0NCiANCiAJb3BlbihuYW1lLCB3cml0YWJsZSk7
DQpJbmRleDogbGlicmFyaWVzL2phdmFsaWIvamF2YS9sYW5nL0NsYXNzLmph
dmENCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvY3ZzL2th
ZmZlL2thZmZlL2xpYnJhcmllcy9qYXZhbGliL2phdmEvbGFuZy9DbGFzcy5q
YXZhLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4yOA0KZGlmZiAtdSAtcjEu
MjggQ2xhc3MuamF2YQ0KLS0tIGxpYnJhcmllcy9qYXZhbGliL2phdmEvbGFu
Zy9DbGFzcy5qYXZhCTIwMDEvMDQvMjEgMTk6MDM6NTYJMS4yOA0KKysrIGxp
YnJhcmllcy9qYXZhbGliL2phdmEvbGFuZy9DbGFzcy5qYXZhCTIwMDEvMDgv
MDIgMDk6MjY6NDQNCkBAIC0xMTgsNyArMTE4LDkgQEANCiAJVmVjdG9yIHYg
PSBuZXcgVmVjdG9yKCk7DQogCUNsYXNzIGNsYXp6ID0gdGhpczsNCiAJd2hp
bGUgKGNsYXp6ICE9IG51bGwpIHsNCi0JCVN5c3RlbS5nZXRTZWN1cml0eU1h
bmFnZXIoKS5jaGVja01lbWJlckFjY2VzcyhjbGF6eiwgTWVtYmVyLlBVQkxJ
Qyk7DQorCQlTZWN1cml0eU1hbmFnZXIgc20gPSBTeXN0ZW0uZ2V0U2VjdXJp
dHlNYW5hZ2VyKCk7DQorCQlpZihzbSAhPSBudWxsKQ0KKwkJCXNtLmNoZWNr
TWVtYmVyQWNjZXNzKGNsYXp6LCBNZW1iZXIuUFVCTElDKTsNCiAJCUNsYXNz
W10gY2xhc3NlcyA9IGNsYXp6LmdldENsYXNzZXMwKHRydWUpOw0KIA0KIAkJ
Zm9yIChpbnQgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7DQpA
QCAtMTM4LDcgKzE0MCw5IEBADQogDQogcHVibGljIENvbnN0cnVjdG9yIGdl
dENvbnN0cnVjdG9yKENsYXNzIHBhcmFtZXRlclR5cGVzW10pIHRocm93cyBO
b1N1Y2hNZXRob2RFeGNlcHRpb24sIFNlY3VyaXR5RXhjZXB0aW9uDQogew0K
LQlTeXN0ZW0uZ2V0U2VjdXJpdHlNYW5hZ2VyKCkuY2hlY2tNZW1iZXJBY2Nl
c3MoIHRoaXMsIE1lbWJlci5QVUJMSUMpOw0KKwlTZWN1cml0eU1hbmFnZXIg
c20gPSBTeXN0ZW0uZ2V0U2VjdXJpdHlNYW5hZ2VyKCk7DQorCWlmKHNtICE9
IG51bGwpDQorCQlzbS5jaGVja01lbWJlckFjY2VzcyggdGhpcywgTWVtYmVy
LlBVQkxJQyk7DQogCXJldHVybiAoZ2V0Q29uc3RydWN0b3IwKHBhcmFtZXRl
clR5cGVzLCBmYWxzZSkpOw0KIH0NCiANCkBAIC0xNDYsNyArMTUwLDkgQEAN
CiANCiBwdWJsaWMgQ29uc3RydWN0b3JbXSBnZXRDb25zdHJ1Y3RvcnMoKSB0
aHJvd3MgU2VjdXJpdHlFeGNlcHRpb24NCiB7DQotCVN5c3RlbS5nZXRTZWN1
cml0eU1hbmFnZXIoKS5jaGVja01lbWJlckFjY2VzcyggdGhpcywgTWVtYmVy
LlBVQkxJQyk7DQorCVNlY3VyaXR5TWFuYWdlciBzbSA9IFN5c3RlbS5nZXRT
ZWN1cml0eU1hbmFnZXIoKTsNCisJaWYoc20gIT0gbnVsbCkNCisJCXNtLmNo
ZWNrTWVtYmVyQWNjZXNzKCB0aGlzLCBNZW1iZXIuUFVCTElDKTsNCiAJcmV0
dXJuIChnZXRDb25zdHJ1Y3RvcnMwKGZhbHNlKSk7DQogfQ0KIA0KQEAgLTE2
Miw0OSArMTY4LDY1IEBADQogICovDQogcHVibGljIENsYXNzW10gZ2V0RGVj
bGFyZWRDbGFzc2VzKCkgdGhyb3dzIFNlY3VyaXR5RXhjZXB0aW9uDQogew0K
LQlTeXN0ZW0uZ2V0U2VjdXJpdHlNYW5hZ2VyKCkuY2hlY2tNZW1iZXJBY2Nl
c3MoIHRoaXMsIE1lbWJlci5ERUNMQVJFRCk7DQorCVNlY3VyaXR5TWFuYWdl
ciBzbSA9IFN5c3RlbS5nZXRTZWN1cml0eU1hbmFnZXIoKTsNCisJaWYoc20g
IT0gbnVsbCkNCisJCXNtLmNoZWNrTWVtYmVyQWNjZXNzKCB0aGlzLCBNZW1i
ZXIuREVDTEFSRUQpOw0KIAlyZXR1cm4gKGdldENsYXNzZXMwKHRydWUpKTsN
CiB9DQogDQogcHVibGljIENvbnN0cnVjdG9yIGdldERlY2xhcmVkQ29uc3Ry
dWN0b3IoQ2xhc3MgcGFyYW1ldGVyVHlwZXNbXSkgdGhyb3dzIE5vU3VjaE1l
dGhvZEV4Y2VwdGlvbiwgU2VjdXJpdHlFeGNlcHRpb24NCiB7DQotCVN5c3Rl
bS5nZXRTZWN1cml0eU1hbmFnZXIoKS5jaGVja01lbWJlckFjY2VzcyggdGhp
cywgTWVtYmVyLkRFQ0xBUkVEKTsNCisJU2VjdXJpdHlNYW5hZ2VyIHNtID0g
U3lzdGVtLmdldFNlY3VyaXR5TWFuYWdlcigpOw0KKwlpZihzbSAhPSBudWxs
KQ0KKwkJc20uY2hlY2tNZW1iZXJBY2Nlc3MoIHRoaXMsIE1lbWJlci5ERUNM
QVJFRCk7DQogCXJldHVybiAoZ2V0Q29uc3RydWN0b3IwKHBhcmFtZXRlclR5
cGVzLCB0cnVlKSk7DQogfQ0KIA0KIHB1YmxpYyBDb25zdHJ1Y3RvcltdIGdl
dERlY2xhcmVkQ29uc3RydWN0b3JzKCkgdGhyb3dzIFNlY3VyaXR5RXhjZXB0
aW9uDQogew0KLQlTeXN0ZW0uZ2V0U2VjdXJpdHlNYW5hZ2VyKCkuY2hlY2tN
ZW1iZXJBY2Nlc3MoIHRoaXMsIE1lbWJlci5ERUNMQVJFRCk7DQorCVNlY3Vy
aXR5TWFuYWdlciBzbSA9IFN5c3RlbS5nZXRTZWN1cml0eU1hbmFnZXIoKTsN
CisJaWYoc20gIT0gbnVsbCkNCisJCXNtLmNoZWNrTWVtYmVyQWNjZXNzKCB0
aGlzLCBNZW1iZXIuREVDTEFSRUQpOw0KIAlyZXR1cm4gKGdldENvbnN0cnVj
dG9yczAodHJ1ZSkpOw0KIH0NCiANCiBwdWJsaWMgRmllbGQgZ2V0RGVjbGFy
ZWRGaWVsZChTdHJpbmcgbmFtZSkgdGhyb3dzIE5vU3VjaEZpZWxkRXhjZXB0
aW9uLCBTZWN1cml0eUV4Y2VwdGlvbg0KIHsNCi0JU3lzdGVtLmdldFNlY3Vy
aXR5TWFuYWdlcigpLmNoZWNrTWVtYmVyQWNjZXNzKCB0aGlzLCBNZW1iZXIu
REVDTEFSRUQpOw0KKwlTZWN1cml0eU1hbmFnZXIgc20gPSBTeXN0ZW0uZ2V0
U2VjdXJpdHlNYW5hZ2VyKCk7DQorCWlmKHNtICE9IG51bGwpDQorCQlzbS5j
aGVja01lbWJlckFjY2VzcyggdGhpcywgTWVtYmVyLkRFQ0xBUkVEKTsNCiAJ
cmV0dXJuIChnZXRGaWVsZDAobmFtZSwgdHJ1ZSkpOw0KIH0NCiANCiBwdWJs
aWMgRmllbGRbXSBnZXREZWNsYXJlZEZpZWxkcygpIHRocm93cyBTZWN1cml0
eUV4Y2VwdGlvbg0KIHsNCi0JU3lzdGVtLmdldFNlY3VyaXR5TWFuYWdlcigp
LmNoZWNrTWVtYmVyQWNjZXNzKCB0aGlzLCBNZW1iZXIuREVDTEFSRUQpOw0K
KwlTZWN1cml0eU1hbmFnZXIgc20gPSBTeXN0ZW0uZ2V0U2VjdXJpdHlNYW5h
Z2VyKCk7DQorCWlmKHNtICE9IG51bGwpDQorCQlzbS5jaGVja01lbWJlckFj
Y2VzcyggdGhpcywgTWVtYmVyLkRFQ0xBUkVEKTsNCiAJcmV0dXJuIChnZXRG
aWVsZHMwKHRydWUpKTsNCiB9DQogDQogcHVibGljIE1ldGhvZCBnZXREZWNs
YXJlZE1ldGhvZChTdHJpbmcgbmFtZSwgQ2xhc3MgcGFyYW1ldGVyVHlwZXNb
XSkgdGhyb3dzIE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiwgU2VjdXJpdHlFeGNl
cHRpb24NCiB7DQotCVN5c3RlbS5nZXRTZWN1cml0eU1hbmFnZXIoKS5jaGVj
a01lbWJlckFjY2VzcyggdGhpcywgTWVtYmVyLkRFQ0xBUkVEKTsNCisJU2Vj
dXJpdHlNYW5hZ2VyIHNtID0gU3lzdGVtLmdldFNlY3VyaXR5TWFuYWdlcigp
Ow0KKwlpZihzbSAhPSBudWxsKQ0KKwkJc20uY2hlY2tNZW1iZXJBY2Nlc3Mo
IHRoaXMsIE1lbWJlci5ERUNMQVJFRCk7DQogCXJldHVybiAoZ2V0TWV0aG9k
MChuYW1lLCBwYXJhbWV0ZXJUeXBlcywgdHJ1ZSkpOw0KIH0NCiANCiBwdWJs
aWMgTWV0aG9kW10gZ2V0RGVjbGFyZWRNZXRob2RzKCkgdGhyb3dzIFNlY3Vy
aXR5RXhjZXB0aW9uDQogew0KLQlTeXN0ZW0uZ2V0U2VjdXJpdHlNYW5hZ2Vy
KCkuY2hlY2tNZW1iZXJBY2Nlc3MoIHRoaXMsIE1lbWJlci5ERUNMQVJFRCk7
DQorCVNlY3VyaXR5TWFuYWdlciBzbSA9IFN5c3RlbS5nZXRTZWN1cml0eU1h
bmFnZXIoKTsNCisJaWYoc20gIT0gbnVsbCkNCisJCXNtLmNoZWNrTWVtYmVy
QWNjZXNzKCB0aGlzLCBNZW1iZXIuREVDTEFSRUQpOw0KIAlyZXR1cm4gKGdl
dE1ldGhvZHMwKHRydWUpKTsNCiB9DQogDQogcHVibGljIEZpZWxkIGdldEZp
ZWxkKFN0cmluZyBuYW1lKSB0aHJvd3MgTm9TdWNoRmllbGRFeGNlcHRpb24s
IFNlY3VyaXR5RXhjZXB0aW9uDQogew0KLQlTeXN0ZW0uZ2V0U2VjdXJpdHlN
YW5hZ2VyKCkuY2hlY2tNZW1iZXJBY2Nlc3MoIHRoaXMsIE1lbWJlci5QVUJM
SUMpOw0KKwlTZWN1cml0eU1hbmFnZXIgc20gPSBTeXN0ZW0uZ2V0U2VjdXJp
dHlNYW5hZ2VyKCk7DQorCWlmKHNtICE9IG51bGwpDQorCQlzbS5jaGVja01l
bWJlckFjY2VzcyggdGhpcywgTWVtYmVyLlBVQkxJQyk7DQogCXJldHVybiAo
Z2V0RmllbGQwKG5hbWUsIGZhbHNlKSk7DQogfQ0KIA0KQEAgLTIxMiw3ICsy
MzQsOSBAQA0KIA0KIHB1YmxpYyBGaWVsZFtdIGdldEZpZWxkcygpIHRocm93
cyBTZWN1cml0eUV4Y2VwdGlvbg0KIHsNCi0JU3lzdGVtLmdldFNlY3VyaXR5
TWFuYWdlcigpLmNoZWNrTWVtYmVyQWNjZXNzKCB0aGlzLCBNZW1iZXIuUFVC
TElDKTsNCisJU2VjdXJpdHlNYW5hZ2VyIHNtID0gU3lzdGVtLmdldFNlY3Vy
aXR5TWFuYWdlcigpOw0KKwlpZihzbSAhPSBudWxsKQ0KKwkJc20uY2hlY2tN
ZW1iZXJBY2Nlc3MoIHRoaXMsIE1lbWJlci5QVUJMSUMpOw0KIAlyZXR1cm4g
KGdldEZpZWxkczAoZmFsc2UpKTsNCiB9DQogDQpAQCAtMjIyLDcgKzI0Niw5
IEBADQogDQogcHVibGljIE1ldGhvZCBnZXRNZXRob2QoU3RyaW5nIG5hbWUs
IENsYXNzIHBhcmFtZXRlclR5cGVzW10pIHRocm93cyBOb1N1Y2hNZXRob2RF
eGNlcHRpb24sIFNlY3VyaXR5RXhjZXB0aW9uDQogew0KLQlTeXN0ZW0uZ2V0
U2VjdXJpdHlNYW5hZ2VyKCkuY2hlY2tNZW1iZXJBY2Nlc3MoIHRoaXMsIE1l
bWJlci5QVUJMSUMgKTsNCisJU2VjdXJpdHlNYW5hZ2VyIHNtID0gU3lzdGVt
LmdldFNlY3VyaXR5TWFuYWdlcigpOw0KKwlpZihzbSAhPSBudWxsKQ0KKwkJ
c20uY2hlY2tNZW1iZXJBY2Nlc3MoIHRoaXMsIE1lbWJlci5QVUJMSUMgKTsN
CiAJcmV0dXJuIChnZXRNZXRob2QwKG5hbWUsIHBhcmFtZXRlclR5cGVzLCBm
YWxzZSkpOw0KIH0NCiANCkBAIC0yMzAsNyArMjU2LDkgQEANCiANCiBwdWJs
aWMgTWV0aG9kW10gZ2V0TWV0aG9kcygpIHRocm93cyBTZWN1cml0eUV4Y2Vw
dGlvbg0KIHsNCi0JU3lzdGVtLmdldFNlY3VyaXR5TWFuYWdlcigpLmNoZWNr
TWVtYmVyQWNjZXNzKCB0aGlzLCBNZW1iZXIuUFVCTElDKTsNCisJU2VjdXJp
dHlNYW5hZ2VyIHNtID0gU3lzdGVtLmdldFNlY3VyaXR5TWFuYWdlcigpOw0K
KwlpZihzbSAhPSBudWxsKQ0KKwkJc20uY2hlY2tNZW1iZXJBY2Nlc3MoIHRo
aXMsIE1lbWJlci5QVUJMSUMpOw0KIAlyZXR1cm4gKGdldE1ldGhvZHMwKGZh
bHNlKSk7DQogfQ0KIA0KQEAgLTMyNyw3ICszNTUsMTIgQEANCiAgKiBSZXR1
cm5zIG51bGwgaWYgbm90IGZvdW5kLg0KICAqLw0KIHN0YXRpYyBDbGFzcyBn
ZXRTdGFja0NsYXNzKGludCBmcmFtZSkgew0KLQlDbGFzc1tdIGNsYXNzU3Rh
Y2sgPSBTeXN0ZW0uZ2V0U2VjdXJpdHlNYW5hZ2VyKCkuZ2V0Q2xhc3NDb250
ZXh0KCk7DQorCUNsYXNzW10gY2xhc3NTdGFjazsNCisJU2VjdXJpdHlNYW5h
Z2VyIHNtID0gU3lzdGVtLmdldFNlY3VyaXR5TWFuYWdlcigpOw0KKwlpZiAo
c20gIT0gbnVsbCkNCisJCWNsYXNzU3RhY2sgPSBzbS5nZXRDbGFzc0NvbnRl
eHQoKTsNCisJZWxzZQ0KKwkJY2xhc3NTdGFjayA9IFN5c3RlbS5kZWZhdWx0
U2VjdXJpdHlNYW5hZ2VyLmdldENsYXNzQ29udGV4dCgpOw0KIAlmcmFtZSAr
PSAzOw0KIAlpZiAoZnJhbWUgPj0gMCAmJiBmcmFtZSA8IGNsYXNzU3RhY2su
bGVuZ3RoKQ0KIAkJcmV0dXJuIGNsYXNzU3RhY2tbZnJhbWVdOw0KSW5kZXg6
IGxpYnJhcmllcy9qYXZhbGliL2phdmEvbGFuZy9DbGFzc0xvYWRlci5qYXZh
DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2cy9rYWZm
ZS9rYWZmZS9saWJyYXJpZXMvamF2YWxpYi9qYXZhL2xhbmcvQ2xhc3NMb2Fk
ZXIuamF2YSx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjINCmRpZmYgLXUg
LXIxLjIyIENsYXNzTG9hZGVyLmphdmENCi0tLSBsaWJyYXJpZXMvamF2YWxp
Yi9qYXZhL2xhbmcvQ2xhc3NMb2FkZXIuamF2YQkxOTk5LzEyLzEzIDA5OjIx
OjQ3CTEuMjINCisrKyBsaWJyYXJpZXMvamF2YWxpYi9qYXZhL2xhbmcvQ2xh
c3NMb2FkZXIuamF2YQkyMDAxLzA4LzAyIDA5OjI2OjQ0DQpAQCAtNTEsNyAr
NTEsOSBAQA0KIH0NCiANCiBwcm90ZWN0ZWQgQ2xhc3NMb2FkZXIoQ2xhc3NM
b2FkZXIgcGFyZW50KSB7DQotCVN5c3RlbS5nZXRTZWN1cml0eU1hbmFnZXIo
KS5jaGVja0NyZWF0ZUNsYXNzTG9hZGVyKCk7DQorCVNlY3VyaXR5TWFuYWdl
ciBzbSA9IFN5c3RlbS5nZXRTZWN1cml0eU1hbmFnZXIoKTsNCisJaWYoc20g
IT0gbnVsbCkNCisJCXNtLmNoZWNrQ3JlYXRlQ2xhc3NMb2FkZXIoKTsNCiAJ
dGhpcy5wYXJlbnQgPSBwYXJlbnQ7DQogfQ0KIA0KSW5kZXg6IGxpYnJhcmll
cy9qYXZhbGliL2phdmEvbGFuZy9SdW50aW1lLmphdmENCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0NClJDUyBmaWxlOiAvY3ZzL2thZmZlL2thZmZlL2xpYnJh
cmllcy9qYXZhbGliL2phdmEvbGFuZy9SdW50aW1lLmphdmEsdg0KcmV0cmll
dmluZyByZXZpc2lvbiAxLjE1DQpkaWZmIC11IC1yMS4xNSBSdW50aW1lLmph
dmENCi0tLSBsaWJyYXJpZXMvamF2YWxpYi9qYXZhL2xhbmcvUnVudGltZS5q
YXZhCTIwMDAvMDUvMTAgMjI6MzQ6MjIJMS4xNQ0KKysrIGxpYnJhcmllcy9q
YXZhbGliL2phdmEvbGFuZy9SdW50aW1lLmphdmEJMjAwMS8wOC8wMiAwOToy
Njo0NA0KQEAgLTY5LDcgKzY5LDkgQEANCiANCiBwdWJsaWMgUHJvY2VzcyBl
eGVjKFN0cmluZ1tdIGNtZGFycmF5LCBTdHJpbmdbXSBlbnZwLCBGaWxlIGRp
cikNCiAJCXRocm93cyBJT0V4Y2VwdGlvbiB7DQotCVN5c3RlbS5nZXRTZWN1
cml0eU1hbmFnZXIoKS5jaGVja0V4ZWMoY21kYXJyYXlbMF0pOw0KKwlTZWN1
cml0eU1hbmFnZXIgc20gPSBTeXN0ZW0uZ2V0U2VjdXJpdHlNYW5hZ2VyKCk7
DQorCWlmKHNtICE9IG51bGwpDQorCQlzbS5jaGVja0V4ZWMoY21kYXJyYXlb
MF0pOw0KIAlyZXR1cm4gZXhlY0ludGVybmFsKGNtZGFycmF5LCBlbnZwLCBk
aXIpOw0KIH0NCiANCkBAIC03Nyw3ICs3OSw5IEBADQogCXRocm93cyBJT0V4
Y2VwdGlvbjsNCiANCiBwdWJsaWMgdm9pZCBleGl0KGludCBzdGF0dXMpIHsN
Ci0JU3lzdGVtLmdldFNlY3VyaXR5TWFuYWdlcigpLmNoZWNrRXhpdChzdGF0
dXMpOw0KKwlTZWN1cml0eU1hbmFnZXIgc20gPSBTeXN0ZW0uZ2V0U2VjdXJp
dHlNYW5hZ2VyKCk7DQorCWlmKHNtICE9IG51bGwpDQorCQlzbS5jaGVja0V4
aXQoc3RhdHVzKTsNCiAJLy8gSGFuZGxlIGFwcGxpY2F0aW9uIGV4dGVuc2lv
bnMgLSBpZiB0aGlzIHRocmVhZCBpcyBwYXJ0IG9mIGFuDQogCS8vIGFwcGxp
Y2F0aW9uIHRoZW4gd2UgZXhpdCB0aGF0IHJhdGhlciB0aGFuIHRoZSB3aG9s
ZSB0aGluZy4NCiAJaWYgKGthZmZlLmxhbmcuQXBwbGljYXRpb24uZXhpdChz
dGF0dXMpID09IGZhbHNlKSB7DQpAQCAtMTIxLDcgKzEyNSw5IEBADQogfQ0K
IA0KIHZvaWQgbG9hZExpYnJhcnkoU3RyaW5nIGxpYm5hbWUsIENsYXNzTG9h
ZGVyIGxvYWRlcikgew0KLQlTeXN0ZW0uZ2V0U2VjdXJpdHlNYW5hZ2VyKCku
Y2hlY2tMaW5rKGxpYm5hbWUpOw0KKwlTZWN1cml0eU1hbmFnZXIgc20gPSBT
eXN0ZW0uZ2V0U2VjdXJpdHlNYW5hZ2VyKCk7DQorCWlmKHNtICE9IG51bGwp
DQorCQlzbS5jaGVja0xpbmsobGlibmFtZSk7DQogCVN0cmluZyBlcnJtc2cg
PSBsaWJuYW1lICsgIjogbm90IGZvdW5kIjsNCiAJU3RyaW5nIGZpbGVuYW1l
Ow0KIAlTdHJpbmdbXSBuYW1lczsNCkBAIC0xNDYsNyArMTUyLDkgQEANCiB9
DQogDQogdm9pZCBsb2FkKFN0cmluZyBmaWxlbmFtZSwgQ2xhc3NMb2FkZXIg
bG9hZGVyKSB7DQotCVN5c3RlbS5nZXRTZWN1cml0eU1hbmFnZXIoKS5jaGVj
a0xpbmsoZmlsZW5hbWUpOw0KKwlTZWN1cml0eU1hbmFnZXIgc20gPSBTeXN0
ZW0uZ2V0U2VjdXJpdHlNYW5hZ2VyKCk7DQorCWlmKHNtICE9IG51bGwpDQor
CQlzbS5jaGVja0xpbmsoZmlsZW5hbWUpOw0KIAluZXcgTmF0aXZlTGlicmFy
eShmaWxlbmFtZSwgbG9hZGVyKTsNCiB9DQogDQpJbmRleDogbGlicmFyaWVz
L2phdmFsaWIvamF2YS9sYW5nL1N5c3RlbS5qYXZhDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQpSQ1MgZmlsZTogL2N2cy9rYWZmZS9rYWZmZS9saWJyYXJp
ZXMvamF2YWxpYi9qYXZhL2xhbmcvU3lzdGVtLmphdmEsdg0KcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjIxDQpkaWZmIC11IC1yMS4yMSBTeXN0ZW0uamF2YQ0K
LS0tIGxpYnJhcmllcy9qYXZhbGliL2phdmEvbGFuZy9TeXN0ZW0uamF2YQky
MDAxLzA0LzEzIDAwOjM1OjM0CTEuMjENCisrKyBsaWJyYXJpZXMvamF2YWxp
Yi9qYXZhL2xhbmcvU3lzdGVtLmphdmEJMjAwMS8wOC8wMiAwOToyNjo0NQ0K
QEAgLTQyLDggKzQyLDYgQEANCiBzdGF0aWMgew0KIAkvLyBYWFggd2hhdCBh
cmUgdGhlIGNvbnN0cmFpbnRzIG9uIHRoZSBpbml0aWFsaXphdGlvbiBvcmRl
ciBpbiBoZXJlPw0KIA0KLQlzZWN1cml0eSA9IGRlZmF1bHRTZWN1cml0eU1h
bmFnZXI7DQotDQogCXByb3BzID0gaW5pdFByb3BlcnRpZXMobmV3IFByb3Bl
cnRpZXMoKSk7DQogCS8vIExvYWQgYW55IHN5c3RlbSBwcm9wZXJ0aWVzIGZy
b20gdGhlIHN5c3RlbS5wcm9wZXJ0aWVzIHJlc291cmNlDQogCUlucHV0U3Ry
ZWFtIHNpbiA9IENsYXNzTG9hZGVyLmdldFN5c3RlbVJlc291cmNlQXNTdHJl
YW0oInN5c3RlbS5wcm9wZXJ0aWVzIik7DQpAQCAtOTIsNyArOTAsOSBAQA0K
IAlpbnQgc3JjX3Bvc2l0aW9uLCBPYmplY3QgZHN0LCBpbnQgZHN0X3Bvc2l0
aW9uLCBpbnQgbGVuZ3RoKTsNCiANCiBwcml2YXRlIHN0YXRpYyB2b2lkIGNo
ZWNrUHJvcGVydHlBY2Nlc3MoKSB7DQotCWdldFNlY3VyaXR5TWFuYWdlcigp
LmNoZWNrUHJvcGVydGllc0FjY2VzcygpOw0KKwlTZWN1cml0eU1hbmFnZXIg
c20gPSBnZXRTZWN1cml0eU1hbmFnZXIoKTsNCisJaWYoc20gIT0gbnVsbCkN
CisJCXNtLmNoZWNrUHJvcGVydGllc0FjY2VzcygpOw0KIH0NCiANCiBuYXRp
dmUgcHVibGljIHN0YXRpYyBsb25nIGN1cnJlbnRUaW1lTWlsbGlzKCk7DQpA
QCAtMTkzLDcgKzE5Myw3IEBADQogfQ0KIA0KIHB1YmxpYyBzdGF0aWMgdm9p
ZCBzZXRTZWN1cml0eU1hbmFnZXIoU2VjdXJpdHlNYW5hZ2VyIHMpIHsNCi0J
aWYgKHNlY3VyaXR5ICE9IGRlZmF1bHRTZWN1cml0eU1hbmFnZXIpIHsNCisJ
aWYgKHNlY3VyaXR5ICE9IG51bGwpIHsNCiAJCXRocm93IG5ldyBTZWN1cml0
eUV4Y2VwdGlvbigpOw0KIAl9DQogCWlmIChzICE9IG51bGwpIHsNCkluZGV4
OiBsaWJyYXJpZXMvamF2YWxpYi9qYXZhL2xhbmcvVGhyZWFkLmphdmENCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvY3ZzL2thZmZlL2th
ZmZlL2xpYnJhcmllcy9qYXZhbGliL2phdmEvbGFuZy9UaHJlYWQuamF2YSx2
DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzQNCmRpZmYgLXUgLXIxLjM0IFRo
cmVhZC5qYXZhDQotLS0gbGlicmFyaWVzL2phdmFsaWIvamF2YS9sYW5nL1Ro
cmVhZC5qYXZhCTIwMDAvMDYvMjEgMDc6MDU6MDgJMS4zNA0KKysrIGxpYnJh
cmllcy9qYXZhbGliL2phdmEvbGFuZy9UaHJlYWQuamF2YQkyMDAxLzA4LzAy
IDA5OjI2OjQ1DQpAQCAtMTM5LDcgKzEzOSw5IEBADQogfQ0KIA0KIHB1Ymxp
YyB2b2lkIGNoZWNrQWNjZXNzKCkgew0KLQlTeXN0ZW0uZ2V0U2VjdXJpdHlN
YW5hZ2VyKCkuY2hlY2tBY2Nlc3ModGhpcyk7DQorCVNlY3VyaXR5TWFuYWdl
ciBzbSA9IFN5c3RlbS5nZXRTZWN1cml0eU1hbmFnZXIoKTsNCisJaWYoc20g
IT0gbnVsbCkNCisJCXNtLmNoZWNrQWNjZXNzKHRoaXMpOw0KIH0NCiANCiBu
YXRpdmUgcHVibGljIGludCBjb3VudFN0YWNrRnJhbWVzKCk7DQpJbmRleDog
bGlicmFyaWVzL2phdmFsaWIvamF2YS9sYW5nL1RocmVhZEdyb3VwLmphdmEN
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvY3ZzL2thZmZl
L2thZmZlL2xpYnJhcmllcy9qYXZhbGliL2phdmEvbGFuZy9UaHJlYWRHcm91
cC5qYXZhLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMg0KZGlmZiAtdSAt
cjEuMTIgVGhyZWFkR3JvdXAuamF2YQ0KLS0tIGxpYnJhcmllcy9qYXZhbGli
L2phdmEvbGFuZy9UaHJlYWRHcm91cC5qYXZhCTIwMDEvMDQvMTggMDk6MzA6
NDkJMS4xMg0KKysrIGxpYnJhcmllcy9qYXZhbGliL2phdmEvbGFuZy9UaHJl
YWRHcm91cC5qYXZhCTIwMDEvMDgvMDIgMDk6MjY6NDUNCkBAIC0xMDgsNyAr
MTA4LDkgQEANCiB9DQogDQogZmluYWwgcHVibGljIHZvaWQgY2hlY2tBY2Nl
c3MoKSB7DQotCVN5c3RlbS5nZXRTZWN1cml0eU1hbmFnZXIoKS5jaGVja0Fj
Y2Vzcyh0aGlzKTsNCisJU2VjdXJpdHlNYW5hZ2VyIHNtID0gU3lzdGVtLmdl
dFNlY3VyaXR5TWFuYWdlcigpOw0KKwlpZihzbSAhPSBudWxsKQ0KKwkJc20u
Y2hlY2tBY2Nlc3ModGhpcyk7DQogfQ0KIA0KIGZpbmFsIHB1YmxpYyBzeW5j
aHJvbml6ZWQgdm9pZCBkZXN0cm95KCkgew0KSW5kZXg6IGxpYnJhcmllcy9q
YXZhbGliL2phdmEvbmV0L0RhdGFncmFtU29ja2V0LmphdmENCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvY3ZzL2thZmZlL2thZmZlL2xp
YnJhcmllcy9qYXZhbGliL2phdmEvbmV0L0RhdGFncmFtU29ja2V0LmphdmEs
dg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjkNCmRpZmYgLXUgLXIxLjkgRGF0
YWdyYW1Tb2NrZXQuamF2YQ0KLS0tIGxpYnJhcmllcy9qYXZhbGliL2phdmEv
bmV0L0RhdGFncmFtU29ja2V0LmphdmEJMTk5OS8xMC8xNSAwNDoyMzo0MQkx
LjkNCisrKyBsaWJyYXJpZXMvamF2YWxpYi9qYXZhL25ldC9EYXRhZ3JhbVNv
Y2tldC5qYXZhCTIwMDEvMDgvMDIgMDk6MjY6NDUNCkBAIC0zMiw3ICszMiw5
IEBADQogfQ0KIA0KIHB1YmxpYyBEYXRhZ3JhbVNvY2tldChpbnQgcG9ydCwg
SW5ldEFkZHJlc3MgYmluZEFkZHIpIHRocm93cyBTb2NrZXRFeGNlcHRpb24g
ew0KLQlTeXN0ZW0uZ2V0U2VjdXJpdHlNYW5hZ2VyKCkuY2hlY2tMaXN0ZW4o
cG9ydCk7DQorCVNlY3VyaXR5TWFuYWdlciBzbSA9IFN5c3RlbS5nZXRTZWN1
cml0eU1hbmFnZXIoKTsNCisJaWYoc20gIT0gbnVsbCkNCisJCXNtLmNoZWNr
TGlzdGVuKHBvcnQpOw0KIAlpZiAoYmluZEFkZHIgPT0gbnVsbCkgew0KIAkJ
YmluZEFkZHIgPSBJbmV0QWRkcmVzcy5nZXRBbnlBZGRyZXNzKCk7DQogCX0N
CkBAIC0xMTIsNyArMTE0LDkgQEANCiAJCXdoaWxlICh0cnVlKSB7DQogCQkJ
aW1wbC5yZWNlaXZlKHApOw0KIAkJCWlmICh0aGlzLmFkZHJlc3MgPT0gbnVs
bCkgew0KLQkJCQlTeXN0ZW0uZ2V0U2VjdXJpdHlNYW5hZ2VyKCkuY2hlY2tB
Y2NlcHQoDQorCQkJCVNlY3VyaXR5TWFuYWdlciBzbSA9IFN5c3RlbS5nZXRT
ZWN1cml0eU1hbmFnZXIoKTsNCisJCQkJaWYoc20gIT0gbnVsbCkNCisJCQkJ
CXNtLmNoZWNrQWNjZXB0KA0KIAkJCQkgICAgcC5nZXRBZGRyZXNzKCkuZ2V0
SG9zdE5hbWUoKSwgcC5nZXRQb3J0KCkpOw0KIAkJCQlicmVhazsNCiAJCQl9
IGVsc2UgaWYgKHRoaXMuYWRkcmVzcy5lcXVhbHMocC5nZXRBZGRyZXNzKCkp
DQpAQCAtMTQ2LDkgKzE1MCwxMyBAQA0KIA0KIHByaXZhdGUgdm9pZCBjaGVj
a1JlbW90ZShJbmV0QWRkcmVzcyBhZGRyLCBpbnQgcG9ydCkgew0KIAlpZiAo
YWRkci5pc011bHRpY2FzdEFkZHJlc3MoKSkgew0KLQkJU3lzdGVtLmdldFNl
Y3VyaXR5TWFuYWdlcigpLmNoZWNrTXVsdGljYXN0KGFkZHIpOw0KKwkJU2Vj
dXJpdHlNYW5hZ2VyIHNtID0gU3lzdGVtLmdldFNlY3VyaXR5TWFuYWdlcigp
Ow0KKwkJaWYoc20gIT0gbnVsbCkNCisJCQlzbS5jaGVja011bHRpY2FzdChh
ZGRyKTsNCiAJfSBlbHNlIHsNCi0JCVN5c3RlbS5nZXRTZWN1cml0eU1hbmFn
ZXIoKS5jaGVja0Nvbm5lY3QoYWRkci5nZXRIb3N0TmFtZSgpLCBwb3J0KTsN
CisJCVNlY3VyaXR5TWFuYWdlciBzbSA9IFN5c3RlbS5nZXRTZWN1cml0eU1h
bmFnZXIoKTsNCisJCWlmKHNtICE9IG51bGwpDQorCQkJc20uY2hlY2tDb25u
ZWN0KGFkZHIuZ2V0SG9zdE5hbWUoKSwgcG9ydCk7DQogCX0NCiB9DQogDQpJ
bmRleDogbGlicmFyaWVzL2phdmFsaWIvamF2YS9uZXQvSW5ldEFkZHJlc3Mu
amF2YQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnMv
a2FmZmUva2FmZmUvbGlicmFyaWVzL2phdmFsaWIvamF2YS9uZXQvSW5ldEFk
ZHJlc3MuamF2YSx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOA0KZGlmZiAt
dSAtcjEuOCBJbmV0QWRkcmVzcy5qYXZhDQotLS0gbGlicmFyaWVzL2phdmFs
aWIvamF2YS9uZXQvSW5ldEFkZHJlc3MuamF2YQkxOTk5LzA3LzA1IDIwOjUw
OjUyCTEuOA0KKysrIGxpYnJhcmllcy9qYXZhbGliL2phdmEvbmV0L0luZXRB
ZGRyZXNzLmphdmEJMjAwMS8wOC8wMiAwOToyNjo0NQ0KQEAgLTE0Nyw3ICsx
NDcsOSBAQA0KIHB1YmxpYyBzdGF0aWMgSW5ldEFkZHJlc3MgZ2V0TG9jYWxI
b3N0KCkgdGhyb3dzIFVua25vd25Ib3N0RXhjZXB0aW9uIHsNCiAJdHJ5IHsN
CiAJCVN0cmluZyBuYW1lID0gaW1wbC5nZXRMb2NhbEhvc3ROYW1lKCk7DQot
CQlTeXN0ZW0uZ2V0U2VjdXJpdHlNYW5hZ2VyKCkuY2hlY2tDb25uZWN0KG5h
bWUsIDApOw0KKwkJU2VjdXJpdHlNYW5hZ2VyIHNtID0gU3lzdGVtLmdldFNl
Y3VyaXR5TWFuYWdlcigpOw0KKwkJaWYoc20gIT0gbnVsbCkNCisJCQlzbS5j
aGVja0Nvbm5lY3QobmFtZSwgMCk7DQogCQlyZXR1cm4gKGdldEJ5TmFtZShu
YW1lKSk7DQogCX0NCiAJY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIHNlKSB7
DQpJbmRleDogbGlicmFyaWVzL2phdmFsaWIvamF2YS9uZXQvU2VydmVyU29j
a2V0LmphdmENCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAv
Y3ZzL2thZmZlL2thZmZlL2xpYnJhcmllcy9qYXZhbGliL2phdmEvbmV0L1Nl
cnZlclNvY2tldC5qYXZhLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMA0K
ZGlmZiAtdSAtcjEuMTAgU2VydmVyU29ja2V0LmphdmENCi0tLSBsaWJyYXJp
ZXMvamF2YWxpYi9qYXZhL25ldC9TZXJ2ZXJTb2NrZXQuamF2YQkyMDAwLzEy
LzI2IDE0OjAyOjQxCTEuMTANCisrKyBsaWJyYXJpZXMvamF2YWxpYi9qYXZh
L25ldC9TZXJ2ZXJTb2NrZXQuamF2YQkyMDAxLzA4LzAyIDA5OjI2OjQ1DQpA
QCAtNDMsNyArNDMsOSBAQA0KICAqIEBwYXJhbSBiaW5kQWRkciAJdGhlIGxv
Y2FsIEluZXRBZGRyZXNzIHRoZSBzZXJ2ZXIgd2lsbCBiaW5kIHRvDQogICov
DQogcHVibGljIFNlcnZlclNvY2tldChpbnQgcG9ydCwgaW50IGJhY2tsb2cs
IEluZXRBZGRyZXNzIGJpbmRBZGRyKSB0aHJvd3MgSU9FeGNlcHRpb24gew0K
LQlTeXN0ZW0uZ2V0U2VjdXJpdHlNYW5hZ2VyKCkuY2hlY2tMaXN0ZW4ocG9y
dCk7DQorCVNlY3VyaXR5TWFuYWdlciBzbSA9IFN5c3RlbS5nZXRTZWN1cml0
eU1hbmFnZXIoKTsNCisJaWYoc20gIT0gbnVsbCkNCisJCXNtLmNoZWNrTGlz
dGVuKHBvcnQpOw0KIA0KIAlpZiAoYmluZEFkZHIgPT0gbnVsbCkgew0KIAkJ
YmluZEFkZHIgPSBJbmV0QWRkcmVzcy5nZXRBbnlBZGRyZXNzKCk7DQpAQCAt
NzIsNyArNzQsOSBAQA0KIA0KIHByb3RlY3RlZCBmaW5hbCB2b2lkIGltcGxB
Y2NlcHQoU29ja2V0IHMpIHRocm93cyBJT0V4Y2VwdGlvbiB7DQogCWltcGwu
YWNjZXB0KHMuaW1wbCk7DQotCVN5c3RlbS5nZXRTZWN1cml0eU1hbmFnZXIo
KS5jaGVja0FjY2VwdChzLmdldEluZXRBZGRyZXNzKCkuZ2V0SG9zdE5hbWUo
KSwgcy5nZXRQb3J0KCkpOw0KKwlTZWN1cml0eU1hbmFnZXIgc20gPSBTeXN0
ZW0uZ2V0U2VjdXJpdHlNYW5hZ2VyKCk7DQorCWlmKHNtICE9IG51bGwpDQor
CQlzbS5jaGVja0FjY2VwdChzLmdldEluZXRBZGRyZXNzKCkuZ2V0SG9zdE5h
bWUoKSwgcy5nZXRQb3J0KCkpOw0KIH0NCiANCiBwdWJsaWMgdm9pZCBjbG9z
ZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7DQpJbmRleDogbGlicmFyaWVzL2ph
dmFsaWIvamF2YS9uZXQvVVJMLmphdmENCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NClJDUyBmaWxlOiAvY3ZzL2thZmZlL2thZmZlL2xpYnJhcmllcy9qYXZh
bGliL2phdmEvbmV0L1VSTC5qYXZhLHYNCnJldHJpZXZpbmcgcmV2aXNpb24g
MS4yNg0KZGlmZiAtdSAtcjEuMjYgVVJMLmphdmENCi0tLSBsaWJyYXJpZXMv
amF2YWxpYi9qYXZhL25ldC9VUkwuamF2YQkyMDAwLzA2LzEzIDE0OjMxOjUz
CTEuMjYNCisrKyBsaWJyYXJpZXMvamF2YWxpYi9qYXZhL25ldC9VUkwuamF2
YQkyMDAxLzA4LzAyIDA5OjI2OjQ1DQpAQCAtMTM0LDcgKzEzNCw5IEBADQog
DQogCS8vIFVzZXItc3VwcGxpZWQgaGFuZGxlcj8NCiAJaWYgKGhhbmRsZXIg
IT0gbnVsbCkgew0KLQkJU3lzdGVtLmdldFNlY3VyaXR5TWFuYWdlcigpLmNo
ZWNrUGVybWlzc2lvbigNCisJCVNlY3VyaXR5TWFuYWdlciBzbSA9IFN5c3Rl
bS5nZXRTZWN1cml0eU1hbmFnZXIoKTsNCisJCWlmKHNtICE9IG51bGwpDQor
CQkJc20uY2hlY2tQZXJtaXNzaW9uKA0KIAkJICAgIG5ldyBOZXRQZXJtaXNz
aW9uKCJzcGVjaWZ5U3RyZWFtSGFuZGxlciIpKTsNCiAJCXRoaXMuaGFuZGxl
ciA9IGhhbmRsZXI7DQogCQlyZXR1cm47DQpAQCAtMjY4LDcgKzI3MCw5IEBA
DQogDQogcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXRVUkxT
dHJlYW1IYW5kbGVyRmFjdG9yeShVUkxTdHJlYW1IYW5kbGVyRmFjdG9yeSBm
YWMpIHsNCiAJaWYgKGZhY3RvcnkgPT0gbnVsbCkgew0KLQkJU3lzdGVtLmdl
dFNlY3VyaXR5TWFuYWdlcigpLmNoZWNrU2V0RmFjdG9yeSgpOw0KKwkJU2Vj
dXJpdHlNYW5hZ2VyIHNtID0gU3lzdGVtLmdldFNlY3VyaXR5TWFuYWdlcigp
Ow0KKwkJaWYoc20gIT0gbnVsbCkNCisJCQlzbS5jaGVja1NldEZhY3Rvcnko
KTsNCiAJCWZhY3RvcnkgPSBmYWM7DQogCX0NCiAJZWxzZSB7DQpJbmRleDog
bGlicmFyaWVzL2phdmFsaWIvamF2YS9zZWN1cml0eS9QZXJtaXNzaW9uLmph
dmENCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvY3ZzL2th
ZmZlL2thZmZlL2xpYnJhcmllcy9qYXZhbGliL2phdmEvc2VjdXJpdHkvUGVy
bWlzc2lvbi5qYXZhLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xDQpkaWZm
IC11IC1yMS4xIFBlcm1pc3Npb24uamF2YQ0KLS0tIGxpYnJhcmllcy9qYXZh
bGliL2phdmEvc2VjdXJpdHkvUGVybWlzc2lvbi5qYXZhCTE5OTkvMDcvMjIg
MDI6MTI6MDUJMS4xDQorKysgbGlicmFyaWVzL2phdmFsaWIvamF2YS9zZWN1
cml0eS9QZXJtaXNzaW9uLmphdmEJMjAwMS8wOC8wMiAwOToyNjo0NQ0KQEAg
LTI1LDcgKzI1LDkgQEANCiAJfQ0KIA0KIAlwdWJsaWMgdm9pZCBjaGVja0d1
YXJkKE9iamVjdCBvYmplY3QpIHRocm93cyBTZWN1cml0eUV4Y2VwdGlvbiB7
DQotCQlTeXN0ZW0uZ2V0U2VjdXJpdHlNYW5hZ2VyKCkuY2hlY2tQZXJtaXNz
aW9uKHRoaXMpOw0KKwkJU2VjdXJpdHlNYW5hZ2VyIHNtID0gU3lzdGVtLmdl
dFNlY3VyaXR5TWFuYWdlcigpOw0KKwkJaWYoc20gIT0gbnVsbCkNCisJCQlz
bS5jaGVja1Blcm1pc3Npb24odGhpcyk7DQogCX0NCiANCiAJcHVibGljIGFi
c3RyYWN0IGJvb2xlYW4gaW1wbGllcyhQZXJtaXNzaW9uIHBlcm1pc3Npb24p
Ow0KSW5kZXg6IGxpYnJhcmllcy9qYXZhbGliL2phdmEvc2VjdXJpdHkvUHJv
dmlkZXIuamF2YQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6
IC9jdnMva2FmZmUva2FmZmUvbGlicmFyaWVzL2phdmFsaWIvamF2YS9zZWN1
cml0eS9Qcm92aWRlci5qYXZhLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
DQpkaWZmIC11IC1yMS4xIFByb3ZpZGVyLmphdmENCi0tLSBsaWJyYXJpZXMv
amF2YWxpYi9qYXZhL3NlY3VyaXR5L1Byb3ZpZGVyLmphdmEJMTk5OS8wNy8y
MiAwMjoxMjowNQkxLjENCisrKyBsaWJyYXJpZXMvamF2YWxpYi9qYXZhL3Nl
Y3VyaXR5L1Byb3ZpZGVyLmphdmEJMjAwMS8wOC8wMiAwOToyNjo0NQ0KQEAg
LTUxLDcgKzUxLDkgQEANCiAJfQ0KIA0KIAlwdWJsaWMgdm9pZCBjbGVhcigp
IHsNCi0JCVN5c3RlbS5nZXRTZWN1cml0eU1hbmFnZXIoKS5jaGVja1NlY3Vy
aXR5QWNjZXNzKA0KKwkJU2VjdXJpdHlNYW5hZ2VyIHNtID0gU3lzdGVtLmdl
dFNlY3VyaXR5TWFuYWdlcigpOw0KKwkJaWYoc20gIT0gbnVsbCkNCisJCQlz
bS5jaGVja1NlY3VyaXR5QWNjZXNzKA0KIAkJCSJjbGVhclByb3ZpZGVyUHJv
cGVydGllcy4iICsgbmFtZSk7DQogCQlzdXBlci5jbGVhcigpOw0KIAl9DQpA
QCAtNzcsMTMgKzc5LDE3IEBADQogCX0NCiANCiAJcHVibGljIE9iamVjdCBw
dXQoT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlKSB7DQotCQlTeXN0ZW0uZ2V0
U2VjdXJpdHlNYW5hZ2VyKCkuY2hlY2tTZWN1cml0eUFjY2VzcygNCisJCVNl
Y3VyaXR5TWFuYWdlciBzbSA9IFN5c3RlbS5nZXRTZWN1cml0eU1hbmFnZXIo
KTsNCisJCWlmKHNtICE9IG51bGwpDQorCQkJc20uY2hlY2tTZWN1cml0eUFj
Y2VzcygNCiAJCQkicHV0UHJvdmlkZXJQcm9wZXJ0eS4iICsgbmFtZSk7DQog
CQlyZXR1cm4gc3VwZXIucHV0KGtleSwgdmFsdWUpOw0KIAl9DQogDQogCXB1
YmxpYyBPYmplY3QgcmVtb3ZlKE9iamVjdCBrZXkpIHsNCi0JCVN5c3RlbS5n
ZXRTZWN1cml0eU1hbmFnZXIoKS5jaGVja1NlY3VyaXR5QWNjZXNzKA0KKwkJ
U2VjdXJpdHlNYW5hZ2VyIHNtID0gU3lzdGVtLmdldFNlY3VyaXR5TWFuYWdl
cigpOw0KKwkJaWYoc20gIT0gbnVsbCkNCisJCQlzbS5jaGVja1NlY3VyaXR5
QWNjZXNzKA0KIAkJCSJyZW1vdmVQcm92aWRlclByb3BlcnR5LiIgKyBuYW1l
KTsNCiAJCXJldHVybiBzdXBlci5yZW1vdmUoa2V5KTsNCiAJfQ0KSW5kZXg6
IGxpYnJhcmllcy9qYXZhbGliL2phdmEvc2VjdXJpdHkvU2VjdXJlQ2xhc3NM
b2FkZXIuamF2YQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6
IC9jdnMva2FmZmUva2FmZmUvbGlicmFyaWVzL2phdmFsaWIvamF2YS9zZWN1
cml0eS9TZWN1cmVDbGFzc0xvYWRlci5qYXZhLHYNCnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xDQpkaWZmIC11IC1yMS4xIFNlY3VyZUNsYXNzTG9hZGVyLmph
dmENCi0tLSBsaWJyYXJpZXMvamF2YWxpYi9qYXZhL3NlY3VyaXR5L1NlY3Vy
ZUNsYXNzTG9hZGVyLmphdmEJMTk5OS8wOC8wNiAyMzo1NjoyMAkxLjENCisr
KyBsaWJyYXJpZXMvamF2YWxpYi9qYXZhL3NlY3VyaXR5L1NlY3VyZUNsYXNz
TG9hZGVyLmphdmEJMjAwMS8wOC8wMiAwOToyNjo0NQ0KQEAgLTE5LDcgKzE5
LDkgQEANCiAJcHJpdmF0ZSBDbGFzc0xvYWRlciBwYXJlbnQ7DQogDQogCXBy
b3RlY3RlZCBTZWN1cmVDbGFzc0xvYWRlcihDbGFzc0xvYWRlciBwYXJlbnQp
IHsNCi0JCVN5c3RlbS5nZXRTZWN1cml0eU1hbmFnZXIoKS5jaGVja0NyZWF0
ZUNsYXNzTG9hZGVyKCk7DQorCQlTZWN1cml0eU1hbmFnZXIgc20gPSBTeXN0
ZW0uZ2V0U2VjdXJpdHlNYW5hZ2VyKCk7DQorCQlpZihzbSAhPSBudWxsKQ0K
KwkJCXNtLmNoZWNrQ3JlYXRlQ2xhc3NMb2FkZXIoKTsNCiAJCXRoaXMucGFy
ZW50ID0gcGFyZW50Ow0KIAl9DQogDQpJbmRleDogbGlicmFyaWVzL2phdmFs
aWIvamF2YS9zZWN1cml0eS9TZWN1cml0eS5qYXZhDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQpSQ1MgZmlsZTogL2N2cy9rYWZmZS9rYWZmZS9saWJyYXJp
ZXMvamF2YWxpYi9qYXZhL3NlY3VyaXR5L1NlY3VyaXR5LmphdmEsdg0KcmV0
cmlldmluZyByZXZpc2lvbiAxLjYNCmRpZmYgLXUgLXIxLjYgU2VjdXJpdHku
amF2YQ0KLS0tIGxpYnJhcmllcy9qYXZhbGliL2phdmEvc2VjdXJpdHkvU2Vj
dXJpdHkuamF2YQkxOTk5LzEwLzI3IDIzOjE4OjIzCTEuNg0KKysrIGxpYnJh
cmllcy9qYXZhbGliL2phdmEvc2VjdXJpdHkvU2VjdXJpdHkuamF2YQkyMDAx
LzA4LzAyIDA5OjI2OjQ1DQpAQCAtOTYsNyArOTYsOSBAQA0KIAl9DQogDQog
CXB1YmxpYyBzdGF0aWMgaW50IGluc2VydFByb3ZpZGVyQXQoUHJvdmlkZXIg
cHJvdmlkZXIsIGludCBwb3NpdGlvbikgew0KLQkJU3lzdGVtLmdldFNlY3Vy
aXR5TWFuYWdlcigpLmNoZWNrU2VjdXJpdHlBY2Nlc3MoDQorCQlTZWN1cml0
eU1hbmFnZXIgc20gPSBTeXN0ZW0uZ2V0U2VjdXJpdHlNYW5hZ2VyKCk7DQor
CQlpZihzbSAhPSBudWxsKQ0KKwkJCXNtLmNoZWNrU2VjdXJpdHlBY2Nlc3Mo
DQogCQkgICAgImluc2VydFByb3ZpZGVyLiIgKyBwcm92aWRlci5nZXROYW1l
KCkpOw0KIAkJaWYgKC0tcG9zaXRpb24gPCAwKSB7DQogCQkJdGhyb3cgbmV3
IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOw0KQEAgLTExNiw3ICsxMTgs
OSBAQA0KIAl9DQogDQogCXB1YmxpYyBzdGF0aWMgaW50IGFkZFByb3ZpZGVy
KFByb3ZpZGVyIHByb3ZpZGVyKSB7DQotCQlTeXN0ZW0uZ2V0U2VjdXJpdHlN
YW5hZ2VyKCkuY2hlY2tTZWN1cml0eUFjY2VzcygNCisJCVNlY3VyaXR5TWFu
YWdlciBzbSA9IFN5c3RlbS5nZXRTZWN1cml0eU1hbmFnZXIoKTsNCisJCWlm
KHNtICE9IG51bGwpDQorCQkJc20uY2hlY2tTZWN1cml0eUFjY2VzcygNCiAJ
CSAgICAiaW5zZXJ0UHJvdmlkZXIuIiArIHByb3ZpZGVyLmdldE5hbWUoKSk7
DQogCQlzeW5jaHJvbml6ZWQgKHByb3ZpZGVycykgew0KIAkJCWlmIChmaW5k
UHJvdmlkZXIocHJvdmlkZXIuZ2V0TmFtZSgpKSA+PSAwKSB7DQpAQCAtMTI3
LDcgKzEzMSw5IEBADQogCX0NCiANCiAJcHVibGljIHN0YXRpYyB2b2lkIHJl
bW92ZVByb3ZpZGVyKFN0cmluZyBuYW1lKSB7DQotCQlTeXN0ZW0uZ2V0U2Vj
dXJpdHlNYW5hZ2VyKCkuY2hlY2tTZWN1cml0eUFjY2VzcygNCisJCVNlY3Vy
aXR5TWFuYWdlciBzbSA9IFN5c3RlbS5nZXRTZWN1cml0eU1hbmFnZXIoKTsN
CisJCWlmKHNtICE9IG51bGwpDQorCQkJc20uY2hlY2tTZWN1cml0eUFjY2Vz
cygNCiAJCSAgICAicmVtb3ZlUHJvdmlkZXIuIiArIG5hbWUpOw0KIAkJc3lu
Y2hyb25pemVkIChwcm92aWRlcnMpIHsNCiAJCQlpbnQgcG9zbiA9IGZpbmRQ
cm92aWRlcihuYW1lKTsNCkBAIC0xNTYsNyArMTYyLDkgQEANCiAJfQ0KIA0K
IAlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQcm9wZXJ0eShTdHJpbmcga2V5
KSB7DQotCQlTeXN0ZW0uZ2V0U2VjdXJpdHlNYW5hZ2VyKCkuY2hlY2tQZXJt
aXNzaW9uKA0KKwkJU2VjdXJpdHlNYW5hZ2VyIHNtID0gU3lzdGVtLmdldFNl
Y3VyaXR5TWFuYWdlcigpOw0KKwkJaWYoc20gIT0gbnVsbCkNCisJCQlzbS5j
aGVja1Blcm1pc3Npb24oDQogCQkgICAgbmV3IFNlY3VyaXR5UGVybWlzc2lv
bigiZ2V0UHJvcGVydHkuIiArIGtleSkpOw0KIAkJc3luY2hyb25pemVkIChw
cm9wcykgew0KIAkJCXJldHVybiAoU3RyaW5nKXByb3BzLmdldChrZXkpOw0K
QEAgLTE2NCw3ICsxNzIsOSBAQA0KIAl9DQogDQogCXB1YmxpYyBzdGF0aWMg
dm9pZCBzZXRQcm9wZXJ0eShTdHJpbmcga2V5LCBTdHJpbmcgdmFsdWUpIHsN
Ci0JCVN5c3RlbS5nZXRTZWN1cml0eU1hbmFnZXIoKS5jaGVja1Blcm1pc3Np
b24oDQorCQlTZWN1cml0eU1hbmFnZXIgc20gPSBTeXN0ZW0uZ2V0U2VjdXJp
dHlNYW5hZ2VyKCk7DQorCQlpZihzbSAhPSBudWxsKQ0KKwkJCXNtLmNoZWNr
UGVybWlzc2lvbigNCiAJCSAgICBuZXcgU2VjdXJpdHlQZXJtaXNzaW9uKCJz
ZXRQcm9wZXJ0eS4iICsga2V5KSk7DQogCQlzeW5jaHJvbml6ZWQgKHByb3Bz
KSB7DQogCQkJcHJvcHMucHV0KGtleSwgdmFsdWUpOw0K
---559023410-851401618-996745040=:26911--