From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13220 invoked by alias); 19 Nov 2005 00:04:11 -0000 Received: (qmail 13199 invoked by uid 22791); 19 Nov 2005 00:04:02 -0000 Received: from wildebeest.demon.nl (HELO gnu.wildebeest.org) (83.160.152.237) by sourceware.org (qpsmtpd/0.30-dev) with ESMTP; Sat, 19 Nov 2005 00:04:02 +0000 Received: from elsschot.wildebeest.org ([192.168.1.26]) by gnu.wildebeest.org with esmtp (Exim 3.36 #1 (Debian)) id 1EdGEY-0005Ov-00; Sat, 19 Nov 2005 01:05:34 +0100 Subject: RFC: Enabling Corba From: Mark Wielaard To: java-patches@gcc.gnu.org Cc: tromey@redhat.com Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-vb2cKU4Iwwo3dldWLhb7" Date: Sat, 19 Nov 2005 00:04:00 -0000 Message-Id: <1132358657.5924.196.camel@localhost.localdomain> Mime-Version: 1.0 X-IsSubscribed: yes Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org X-SW-Source: 2005-q4/txt/msg00218.txt.bz2 --=-vb2cKU4Iwwo3dldWLhb7 Content-Type: multipart/mixed; boundary="=-4FdRc4iy/E2Q++/U8BIy" --=-4FdRc4iy/E2Q++/U8BIy Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Content-length: 1284 Hi, I wish I had found this earlier. But while checking all the tests and results I found that we were currently disabling all of Corba. I didn't find this before because I was only looking for regressions and apparently since the start of the "big-merge" these packages were disabled. The reason for that was probably because one missing feature (VMStackWalker) in libgcj and a wrong-code generation with gcj -C. Both are easily worked around however with a simple override file. We could easily implement VMStackWalker I think instead of this workaround using the system class loader. But I wanted this patch to be as simple as possible to get this in asap. 2005-11-18 Mark Wielaard * standard.omit.in: Remove javax/rmi, org/omg, gnu/CORBA and gnu/javax/rmi. * scripts/makemake.tcl: Set javax/rmi, org/omg, gnu/CORBA and gnu/javax/rmi to bc. * gnu/CORBA/ObjectCreator.java: New override file for missing VMStackWalker issue. * gnu/CORBA/DynAn/gnuDynValue.java: New override file for bug #24938 * gnu/CORBA/DynAn/RecordAny.java: Likewise * sources.am: Regenerated. * Makefile.in: Regenerated With this I can run the cool swing/Corba example game from GNU Classpath. OK for the trunk and new 4.1 branch? Cheers, Mark --=-4FdRc4iy/E2Q++/U8BIy Content-Disposition: inline; filename=enable-corba.patch Content-Type: text/x-patch; name=enable-corba.patch; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 Content-length: 58987 SW5kZXg6IHNjcmlwdHMvbWFrZW1ha2UudGNsDQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQotLS0gc2NyaXB0cy9tYWtlbWFrZS50Y2wJKHJldmlzaW9uIDEw NzE5NSkNCisrKyBzY3JpcHRzL21ha2VtYWtlLnRjbAkod29ya2luZyBjb3B5 KQ0KQEAgLTQ2LDYgKzQ2LDEwIEBADQogc2V0IHBhY2thZ2VfbWFwKGdudS9q YXZheC9zb3VuZC9taWRpKSBiYw0KIHNldCBwYWNrYWdlX21hcChvcmcveG1s KSBiYw0KIHNldCBwYWNrYWdlX21hcChvcmcvdzNjKSBiYw0KK3NldCBwYWNr YWdlX21hcChqYXZheC9ybWkpIGJjDQorc2V0IHBhY2thZ2VfbWFwKG9yZy9v bWcpIGJjDQorc2V0IHBhY2thZ2VfbWFwKGdudS9DT1JCQSkgYmMNCitzZXQg cGFja2FnZV9tYXAoZ251L2phdmF4L3JtaSkgYmMNCiANCiAjIFRoaXMgaXMg aGFuZGxlZCBzcGVjaWFsbHkgYnkgdGhlIE1ha2VmaWxlLg0KICMgV2Ugc3Rp bGwgd2FudCBpdCBieXRlLWNvbXBpbGVkIHNvIGl0IGlzbid0IGluIHRoZSAu b21pdCBmaWxlLg0KSW5kZXg6IGdudS9DT1JCQS9PYmplY3RDcmVhdG9yLmph dmENCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnbnUvQ09SQkEvT2Jq ZWN0Q3JlYXRvci5qYXZhCShyZXZpc2lvbiAwKQ0KKysrIGdudS9DT1JCQS9P YmplY3RDcmVhdG9yLmphdmEJKHJldmlzaW9uIDApDQpAQCAtMCwwICsxLDU5 NiBAQA0KKy8qIE9iamVjdENyZWF0b3IuamF2YSAtLQ0KKyAgIENvcHlyaWdo dCAoQykgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCisN CitUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgQ2xhc3NwYXRoLg0KKw0KK0dO VSBDbGFzc3BhdGggaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KK2l0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5DQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQ0KK2FueSBsYXRlciB2ZXJz aW9uLg0KKw0KK0dOVSBDbGFzc3BhdGggaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQorV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZg0KK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VDQorR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0KK1lvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlDQorYWxvbmcgd2l0aCBHTlUgQ2xhc3NwYXRoOyBzZWUgdGhlIGZp bGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlDQorRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp ZnRoIEZsb29yLCBCb3N0b24sIE1BDQorMDIxMTAtMTMwMSBVU0EuDQorDQor TGlua2luZyB0aGlzIGxpYnJhcnkgc3RhdGljYWxseSBvciBkeW5hbWljYWxs eSB3aXRoIG90aGVyIG1vZHVsZXMgaXMNCittYWtpbmcgYSBjb21iaW5lZCB3 b3JrIGJhc2VkIG9uIHRoaXMgbGlicmFyeS4gIFRodXMsIHRoZSB0ZXJtcyBh bmQNCitjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBjb3ZlciB0aGUgd2hvbGUNCitjb21iaW5hdGlvbi4NCisNCitBcyBh IHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgY29weXJpZ2h0IGhvbGRlcnMgb2Yg dGhpcyBsaWJyYXJ5IGdpdmUgeW91DQorcGVybWlzc2lvbiB0byBsaW5rIHRo aXMgbGlicmFyeSB3aXRoIGluZGVwZW5kZW50IG1vZHVsZXMgdG8gcHJvZHVj ZSBhbg0KK2V4ZWN1dGFibGUsIHJlZ2FyZGxlc3Mgb2YgdGhlIGxpY2Vuc2Ug dGVybXMgb2YgdGhlc2UgaW5kZXBlbmRlbnQNCittb2R1bGVzLCBhbmQgdG8g Y29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUg dW5kZXINCit0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCB5 b3UgYWxzbyBtZWV0LCBmb3IgZWFjaCBsaW5rZWQNCitpbmRlcGVuZGVudCBt b2R1bGUsIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgbGljZW5z ZSBvZiB0aGF0DQorbW9kdWxlLiAgQW4gaW5kZXBlbmRlbnQgbW9kdWxlIGlz IGEgbW9kdWxlIHdoaWNoIGlzIG5vdCBkZXJpdmVkIGZyb20NCitvciBiYXNl ZCBvbiB0aGlzIGxpYnJhcnkuICBJZiB5b3UgbW9kaWZ5IHRoaXMgbGlicmFy eSwgeW91IG1heSBleHRlbmQNCit0aGlzIGV4Y2VwdGlvbiB0byB5b3VyIHZl cnNpb24gb2YgdGhlIGxpYnJhcnksIGJ1dCB5b3UgYXJlIG5vdA0KK29ibGln YXRlZCB0byBkbyBzby4gIElmIHlvdSBkbyBub3Qgd2lzaCB0byBkbyBzbywg ZGVsZXRlIHRoaXMNCitleGNlcHRpb24gc3RhdGVtZW50IGZyb20geW91ciB2 ZXJzaW9uLiAqLw0KKw0KKw0KK3BhY2thZ2UgZ251LkNPUkJBOw0KKw0KK2lt cG9ydCBnbnUuQ09SQkEuQ0RSLlVua25vd25FeGNlcHRpb25DdHhIYW5kbGVy Ow0KK2ltcG9ydCBnbnUuQ09SQkEuQ0RSLkJ1ZmZlcnJlZENkcklucHV0Ow0K K2ltcG9ydCBnbnUuQ09SQkEuQ0RSLkJ1ZmZlcmVkQ2RyT3V0cHV0Ow0KK2lt cG9ydCBnbnUuQ09SQkEuQ0RSLkFic3RyYWN0Q2RySW5wdXQ7DQoraW1wb3J0 IGdudS5DT1JCQS5HSU9QLlNlcnZpY2VDb250ZXh0Ow0KK2ltcG9ydCBnbnUu Q09SQkEudHlwZWNvZGVzLlJlY29yZFR5cGVDb2RlOw0KKy8vIEdDSiBMT0NB TCAtIFdlIGRvbid0IGhhdmUgdGhpcyB5ZXQuDQorLy8gaW1wb3J0IGdudS5j bGFzc3BhdGguVk1TdGFja1dhbGtlcjsNCisNCitpbXBvcnQgb3JnLm9tZy5D T1JCQS5Bbnk7DQoraW1wb3J0IG9yZy5vbWcuQ09SQkEuQ29tcGxldGlvblN0 YXR1czsNCitpbXBvcnQgb3JnLm9tZy5DT1JCQS5Db21wbGV0aW9uU3RhdHVz SGVscGVyOw0KK2ltcG9ydCBvcmcub21nLkNPUkJBLk1BUlNIQUw7DQoraW1w b3J0IG9yZy5vbWcuQ09SQkEuU3lzdGVtRXhjZXB0aW9uOw0KK2ltcG9ydCBv cmcub21nLkNPUkJBLlRDS2luZDsNCitpbXBvcnQgb3JnLm9tZy5DT1JCQS5V TktOT1dOOw0KK2ltcG9ydCBvcmcub21nLkNPUkJBLlVzZXJFeGNlcHRpb247 DQoraW1wb3J0IG9yZy5vbWcuQ09SQkEucG9ydGFibGUuSURMRW50aXR5Ow0K K2ltcG9ydCBvcmcub21nLkNPUkJBLnBvcnRhYmxlLklucHV0U3RyZWFtOw0K K2ltcG9ydCBvcmcub21nLkNPUkJBLnBvcnRhYmxlLk91dHB1dFN0cmVhbTsN CitpbXBvcnQgb3JnLm9tZy5DT1JCQS5wb3J0YWJsZS5WYWx1ZUJhc2U7DQor DQoraW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsNCitpbXBvcnQg amF2YS51dGlsLk1hcDsNCitpbXBvcnQgamF2YS51dGlsLldlYWtIYXNoTWFw Ow0KKw0KK2ltcG9ydCBqYXZheC5ybWkuQ09SQkEuVXRpbDsNCisNCisvKioN CisgKiBDcmVhdGVzIGphdmEgb2JqZWN0cyBmcm9tIHRoZSBhZ3JlZWQgSURM IG5hbWVzIGZvciB0aGUgc2ltcGxlIGNhc2Ugd2hlbiB0aGUNCisgKiBDT1JC QSBvYmplY3QgaXMgZGlyZWN0bHkgbWFwcGVkIGludG8gdGhlIGxvY2FsbHkg ZGVmaW5lZCBqYXZhIGNsYXNzLg0KKyAqIA0KKyAqIEBhdXRob3IgQXVkcml1 cyBNZXNrYXVza2FzIChBdWRyaXVzQUBCaW9pbmZvcm1hdGljcy5vcmcpDQor ICovDQorcHVibGljIGNsYXNzIE9iamVjdENyZWF0b3INCit7DQorICAvKioN CisgICAqIFRoZSBzdGFuZGFyZCBPTUcgcHJlZml4Lg0KKyAgICovDQorICBw dWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPTUdfUFJFRklYID0gIm9tZy5v cmcvIjsNCisNCisgIC8qKg0KKyAgICogVGhlIHN0YW5kYXJkIGphdmEgcHJl Zml4Lg0KKyAgICovDQorICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBK QVZBX1BSRUZJWCA9ICJvcmcub21nLiI7DQorDQorICAvKioNCisgICAqIFRo ZSBwcmVmaXggZm9yIGNsYXNzZXMgdGhhdCBhcmUgcGxhY2VkIGluc3RpZGUg dGhlIGdudS5DT1JCQSBuYW1lc3BhY2UuDQorICAgKi8NCisgIHB1YmxpYyBz dGF0aWMgZmluYWwgU3RyaW5nIENMQVNTUEFUSF9QUkVGSVggPSAiZ251LkNP UkJBLiI7DQorDQorICAvKioNCisgICAqIE1hcHMgY2xhc3NlcyB0byB0aGV5 IElETCBvciBSTUkgbmFtZXMuIENvbXB1dGluZyBSTUkgbmFtZSBpcyBhbiBl eHBlbnNpdmUNCisgICAqIG9wZXJhdGlvbnMsIHNvIGZyZXF1ZW50bHkgdXNl ZCBSTUkga2V5cyBhcmUgcmV1c2VkLiBUaGUgbWFwIG11c3QgYmUgd2VhayB0 bw0KKyAgICogZW5zdXJlIHRoYXQgdGhlIGNsYXNzIGNhbiBiZSB1bmxvYWRl ZCwgd2hlbiBhcHBsaWNhYmxlLg0KKyAgICovDQorICBwdWJsaWMgc3RhdGlj IE1hcCBtX25hbWVzID0gbmV3IFdlYWtIYXNoTWFwKCk7DQorDQorICAvKioN CisgICAqIE1hcHMgSURMIHN0cmluZ3MgaW50byBrbm93biBjbGFzc2VzLiBU aGUgbWFwIG11c3QgYmUgd2VhayB0byBlbnN1cmUgdGhhdA0KKyAgICogdGhl IGNsYXNzIGNhbiBiZSB1bmxvYWRlZCwgd2hlbiBhcHBsaWNhYmxlLg0KKyAg ICovDQorICBwdWJsaWMgc3RhdGljIE1hcCBtX2NsYXNzZXMgPSBuZXcgV2Vh a0hhc2hNYXAoKTsNCisNCisgIC8qKg0KKyAgICogTWFwcyBJREwgdHlwZXMg dG8gdGhleSBoZWxwZXJzLg0KKyAgICovDQorICBwdWJsaWMgc3RhdGljIE1h cCBtX2hlbHBlcnMgPSBuZXcgV2Vha0hhc2hNYXAoKTsNCisNCisgIC8qKg0K KyAgICogVHJ5IHRvIGluc3RhbnRpYXRlIGFuIG9iamVjdCB3aXRoIHRoZSBn aXZlbiBJREwgbmFtZS4gVGhlIG9iamVjdCBtdXN0IGJlDQorICAgKiBtYXBw ZWQgdG8gdGhlIGxvY2FsIGphdmEgY2xhc3MuIFRoZSBvbWcub3JnIGRvbWFp biBtdXN0IGJlIG1hcHBlZCBpbnRvIHRoZQ0KKyAgICogb2JqZWN0IGluIGVp dGhlciBvcmcvb21nIG9yIGdudS9DT1JCQSBuYW1lc3BhY2UuDQorICAgKiAN CisgICAqIEBwYXJhbSBJREwgbmFtZQ0KKyAgICogQHJldHVybiBpbnN0YW50 aWF0ZWQgb2JqZWN0IGluc3RhbmNlIG9yIG51bGwgaWYgbm8gc3VjaCBhdmFp bGFibGUuDQorICAgKi8NCisgIHB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLk9i amVjdCBjcmVhdGVPYmplY3QoU3RyaW5nIGlkbCwgU3RyaW5nIHN1ZmZpeCkN CisgIHsNCisgICAgc3luY2hyb25pemVkIChtX2NsYXNzZXMpDQorICAgICAg ew0KKyAgICAgICAgQ2xhc3Mga25vd24gPSAoQ2xhc3MpIChzdWZmaXggPT0g bnVsbCA/IG1fY2xhc3Nlcy5nZXQoaWRsKQ0KKyAgICAgICAgICA6IG1fY2xh c3Nlcy5nZXQoaWRsICsgMHhmZiArIHN1ZmZpeCkpOw0KKyAgICAgICAgT2Jq ZWN0IG9iamVjdDsNCisNCisgICAgICAgIGlmIChrbm93biAhPSBudWxsKQ0K KyAgICAgICAgICB7DQorICAgICAgICAgICAgdHJ5DQorICAgICAgICAgICAg ICB7DQorICAgICAgICAgICAgICAgIHJldHVybiBrbm93bi5uZXdJbnN0YW5j ZSgpOw0KKyAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGNhdGNoIChF eGNlcHRpb24gZXgpDQorICAgICAgICAgICAgICB7DQorICAgICAgICAgICAg ICAgIFJ1bnRpbWVFeGNlcHRpb24gcmV4ID0gbmV3IFJ1bnRpbWVFeGNlcHRp b24oaWRsICsgIiBzdWZmaXggIg0KKyAgICAgICAgICAgICAgICAgICsgc3Vm Zml4LCBleCk7DQorICAgICAgICAgICAgICAgIHRocm93IHJleDsNCisgICAg ICAgICAgICAgIH0NCisgICAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAg ICAgICAgICB7DQorICAgICAgICAgICAgaWYgKHN1ZmZpeCA9PSBudWxsKQ0K KyAgICAgICAgICAgICAgc3VmZml4ID0gIiI7DQorICAgICAgICAgICAgdHJ5 DQorICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGtub3duID0g Zm9yTmFtZSh0b0NsYXNzTmFtZShKQVZBX1BSRUZJWCwgaWRsKSArIHN1ZmZp eCk7DQorICAgICAgICAgICAgICAgIG9iamVjdCA9IGtub3duLm5ld0luc3Rh bmNlKCk7DQorICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgY2F0Y2gg KEV4Y2VwdGlvbiBleCkNCisgICAgICAgICAgICAgIHsNCisgICAgICAgICAg ICAgICAgdHJ5DQorICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAg ICAgICAgICAga25vd24gPSBmb3JOYW1lKHRvQ2xhc3NOYW1lKENMQVNTUEFU SF9QUkVGSVgsIGlkbCkNCisgICAgICAgICAgICAgICAgICAgICAgKyBzdWZm aXgpOw0KKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0ID0ga25vd24ubmV3 SW5zdGFuY2UoKTsNCisgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAg ICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXhleCkNCisgICAgICAgICAgICAg ICAgICB7DQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsNCisg ICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICB9DQorICAgICAg ICAgICAgbV9jbGFzc2VzLnB1dChpZGwgKyAweGZmICsgc3VmZml4LCBrbm93 bik7DQorICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsNCisgICAgICAgICAg fQ0KKyAgICAgIH0NCisgIH0NCisNCisgIC8qKg0KKyAgICogUmVhZCB0aGUg c3lzdGVtIGV4Y2VwdGlvbiBmcm9tIHRoZSBnaXZlbiBzdHJlYW0uDQorICAg KiANCisgICAqIEBwYXJhbSBpbnB1dCB0aGUgQ0RSIHN0cmVhbSB0byByZWFk IGZyb20uDQorICAgKiBAcGFyYW0gY29udGV4dHMgdGhlIHNlcnZpY2UgY29u dGV4dHMgaW4gcmVxdWVzdC9yZXBseSBoZWFkZXIvDQorICAgKiANCisgICAq IEByZXR1cm4gdGhlIGV4Y2VwdGlvbiB0aGF0IGhhcyBiZWVuIHN0b3JlZCBp biB0aGUgc3RyZWFtIChJREwgbmFtZSwgbWlub3INCisgICAqIGNvZGUgYW5k IGNvbXBsZXRpb24gc3RhdHVzKS4NCisgICAqLw0KKyAgcHVibGljIHN0YXRp YyBTeXN0ZW1FeGNlcHRpb24gcmVhZFN5c3RlbUV4Y2VwdGlvbihJbnB1dFN0 cmVhbSBpbnB1dCwNCisgICAgU2VydmljZUNvbnRleHRbXSBjb250ZXh0cykN CisgIHsNCisgICAgU3lzdGVtRXhjZXB0aW9uIGV4Y2VwdGlvbjsNCisNCisg ICAgU3RyaW5nIGlkbCA9IGlucHV0LnJlYWRfc3RyaW5nKCk7DQorICAgIGlu dCBtaW5vciA9IGlucHV0LnJlYWRfdWxvbmcoKTsNCisgICAgQ29tcGxldGlv blN0YXR1cyBjb21wbGV0ZWQgPSBDb21wbGV0aW9uU3RhdHVzSGVscGVyLnJl YWQoaW5wdXQpOw0KKw0KKyAgICB0cnkNCisgICAgICB7DQorICAgICAgICBl eGNlcHRpb24gPSAoU3lzdGVtRXhjZXB0aW9uKSBjcmVhdGVPYmplY3QoaWRs LCBudWxsKTsNCisgICAgICAgIGV4Y2VwdGlvbi5taW5vciA9IG1pbm9yOw0K KyAgICAgICAgZXhjZXB0aW9uLmNvbXBsZXRlZCA9IGNvbXBsZXRlZDsNCisg ICAgICB9DQorICAgIGNhdGNoIChFeGNlcHRpb24gZXgpDQorICAgICAgew0K KyAgICAgICAgVU5LTk9XTiB1ID0gbmV3IFVOS05PV04oIlVuc3VwcG9ydGVk IHN5c3RlbSBleGNlcHRpb24gIiArIGlkbCwgbWlub3IsDQorICAgICAgICAg IGNvbXBsZXRlZCk7DQorICAgICAgICB1LmluaXRDYXVzZShleCk7DQorICAg ICAgICB0aHJvdyB1Ow0KKyAgICAgIH0NCisNCisgICAgdHJ5DQorICAgICAg ew0KKyAgICAgICAgLy8gSWYgVW5rbm93bkV4Y2VwdGlvbkluZm8gaXMgcHJl c2VudCBpbiB0aGUgY29udGV4dHMsIHJlYWQgaXQgYW5kDQorICAgICAgICAv LyBzZXQgYXMgYSBjYXVzZSBvZiB0aGlzIGV4Y2VwdGlvbi4NCisgICAgICAg IFNlcnZpY2VDb250ZXh0IHVFeCA9IFNlcnZpY2VDb250ZXh0LmZpbmQoDQor ICAgICAgICAgIFNlcnZpY2VDb250ZXh0LlVua25vd25FeGNlcHRpb25JbmZv LCBjb250ZXh0cyk7DQorDQorICAgICAgICBpZiAodUV4ICE9IG51bGwpDQor ICAgICAgICAgIHsNCisgICAgICAgICAgICBCdWZmZXJyZWRDZHJJbnB1dCBp biA9IG5ldyBCdWZmZXJyZWRDZHJJbnB1dCh1RXguY29udGV4dF9kYXRhKTsN CisgICAgICAgICAgICBpbi5zZXRPcmIoaW4ub3JiKCkpOw0KKyAgICAgICAg ICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIEFic3RyYWN0Q2RySW5wdXQpDQor ICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICgoQWJzdHJhY3RD ZHJJbnB1dCkgaW5wdXQpLmNsb25lU2V0dGluZ3MoaW4pOw0KKyAgICAgICAg ICAgICAgfQ0KKw0KKyAgICAgICAgICAgIFRocm93YWJsZSB0ID0gVW5rbm93 bkV4Y2VwdGlvbkN0eEhhbmRsZXIucmVhZChpbiwgY29udGV4dHMpOw0KKyAg ICAgICAgICAgIGV4Y2VwdGlvbi5pbml0Q2F1c2UodCk7DQorICAgICAgICAg IH0NCisgICAgICB9DQorICAgIGNhdGNoIChFeGNlcHRpb24gZXgpDQorICAg ICAgew0KKyAgICAgICAgLy8gVW5zdXBwb3J0ZWQgY29udGV4dCBmb3JtYXQu IERvIG5vdCB0ZXJtaW5hdGUgYXMgdGhlIHVzZXIgcHJvZ3JhbSBtYXkNCisg ICAgICAgIC8vIG5vdCBuZWVkIGl0Lg0KKyAgICAgIH0NCisNCisgICAgcmV0 dXJuIGV4Y2VwdGlvbjsNCisgIH0NCisNCisgIC8qKg0KKyAgICogUmVhZHMg dGhlIHVzZXIgZXhjZXB0aW9uLCBoYXZpbmcgdGhlIGdpdmVuIElkLCBmcm9t IHRoZSBpbnB1dCBzdHJlYW0uIFRoZQ0KKyAgICogaWQgaXMgZXhwZWN0ZWQg dG8gYmUgaW4gdGhlIGZvcm0gbGlrZQ0KKyAgICogJ0lETDp0ZXN0L29yZy9v bWcvQ09SQkEvT1JCL2NvbW11bmljYXRpb24vb3VyVXNlckV4Y2VwdGlvbjox LjAnDQorICAgKiANCisgICAqIEBwYXJhbSBpZGwgdGhlIGV4Y2VwdGlvbiBp ZGwgbmFtZS4NCisgICAqIEBwYXJhbSBpbnB1dCB0aGUgc3RyZWFtIHRvIHJl YWQgZnJvbS4NCisgICAqIA0KKyAgICogQHJldHVybiB0aGUgbG9hZGVkIGV4 Y2VwdGlvbi4NCisgICAqIEByZXR1cm4gbnVsbCBpZiB0aGUgaGVscGVyIGNs YXNzIGNhbm5vdCBiZSBmb3VuZC4NCisgICAqLw0KKyAgcHVibGljIHN0YXRp YyBVc2VyRXhjZXB0aW9uIHJlYWRVc2VyRXhjZXB0aW9uKFN0cmluZyBpZGws IElucHV0U3RyZWFtIGlucHV0KQ0KKyAgew0KKyAgICB0cnkNCisgICAgICB7 DQorICAgICAgICBDbGFzcyBoZWxwZXJDbGFzcyA9IGZpbmRIZWxwZXIoaWRs KTsNCisNCisgICAgICAgIE1ldGhvZCByZWFkID0gaGVscGVyQ2xhc3MuZ2V0 TWV0aG9kKCJyZWFkIiwNCisgICAgICAgICAgbmV3IENsYXNzW10geyBvcmcu b21nLkNPUkJBLnBvcnRhYmxlLklucHV0U3RyZWFtLmNsYXNzIH0pOw0KKw0K KyAgICAgICAgcmV0dXJuIChVc2VyRXhjZXB0aW9uKSByZWFkLmludm9rZShu dWxsLCBuZXcgT2JqZWN0W10geyBpbnB1dCB9KTsNCisgICAgICB9DQorICAg IGNhdGNoIChNQVJTSEFMIG1leCkNCisgICAgICB7DQorICAgICAgICAvLyBU aGlzIG9uZSBpcyBvayB0byB0aHJvdw0KKyAgICAgICAgdGhyb3cgbWV4Ow0K KyAgICAgIH0NCisgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkNCisgICAgICB7 DQorICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsNCisgICAgICAgIHJl dHVybiBudWxsOw0KKyAgICAgIH0NCisgIH0NCisNCisgIC8qKg0KKyAgICog R2V0cyB0aGUgaGVscGVyIGNsYXNzIG5hbWUgZnJvbSB0aGUgc3RyaW5nIGxp a2UNCisgICAqICdJREw6dGVzdC9vcmcvb21nL0NPUkJBL09SQi9jb21tdW5p Y2F0aW9uL291clVzZXJFeGNlcHRpb246MS4wJw0KKyAgICogDQorICAgKiBA cGFyYW0gSURMIHRoZSBpZGwgbmFtZS4NCisgICAqLw0KKyAgcHVibGljIHN0 YXRpYyBTdHJpbmcgdG9IZWxwZXJOYW1lKFN0cmluZyBJREwpDQorICB7DQor ICAgIFN0cmluZyBzID0gSURMOw0KKyAgICBpbnQgYSA9IHMuaW5kZXhPZign OicpICsgMTsNCisgICAgaW50IGIgPSBzLmxhc3RJbmRleE9mKCc6Jyk7DQor DQorICAgIHMgPSBJREwuc3Vic3RyaW5nKGEsIGIpOw0KKw0KKyAgICBpZiAo cy5zdGFydHNXaXRoKE9NR19QUkVGSVgpKQ0KKyAgICAgIHMgPSBKQVZBX1BS RUZJWCArIHMuc3Vic3RyaW5nKE9NR19QUkVGSVgubGVuZ3RoKCkpOw0KKw0K KyAgICByZXR1cm4gcy5yZXBsYWNlKCcvJywgJy4nKSArICJIZWxwZXIiOw0K KyAgfQ0KKw0KKyAgLyoqDQorICAgKiBXcml0ZXMgdGhlIHN5c3RlbSBleGNl cHRpb24gZGF0YSB0byBDRFIgb3V0cHV0IHN0cmVhbS4NCisgICAqIA0KKyAg ICogQHBhcmFtIG91dHB1dCBhIHN0cmVhbSB0byB3cml0ZSBkYXRhIHRvLg0K KyAgICogQHBhcmFtIGV4IGFuIGV4Y2VwdGlvbiB0byB3cml0ZS4NCisgICAq Lw0KKyAgcHVibGljIHN0YXRpYyB2b2lkIHdyaXRlU3lzdGVtRXhjZXB0aW9u KE91dHB1dFN0cmVhbSBvdXRwdXQsDQorICAgIFN5c3RlbUV4Y2VwdGlvbiBl eCkNCisgIHsNCisgICAgU3RyaW5nIGV4SURMID0gZ2V0UmVwb3NpdG9yeUlk KGV4LmdldENsYXNzKCkpOw0KKyAgICBvdXRwdXQud3JpdGVfc3RyaW5nKGV4 SURMKTsNCisgICAgb3V0cHV0LndyaXRlX3Vsb25nKGV4Lm1pbm9yKTsNCisg ICAgQ29tcGxldGlvblN0YXR1c0hlbHBlci53cml0ZShvdXRwdXQsIGV4LmNv bXBsZXRlZCk7DQorICB9DQorDQorICAvKioNCisgICAqIENvbnZlcnRzIHRo ZSBnaXZlbiBJREwgbmFtZSB0byBjbGFzcyBuYW1lLg0KKyAgICogDQorICAg KiBAcGFyYW0gSURMIHRoZSBpZGwgbmFtZS4NCisgICAqIA0KKyAgICovDQor ICBwcm90ZWN0ZWQgc3RhdGljIFN0cmluZyB0b0NsYXNzTmFtZShTdHJpbmcg cHJlZml4LCBTdHJpbmcgSURMKQ0KKyAgew0KKyAgICBTdHJpbmcgcyA9IElE TDsNCisgICAgaW50IGEgPSBzLmluZGV4T2YoJzonKSArIDE7DQorICAgIGlu dCBiID0gcy5sYXN0SW5kZXhPZignOicpOw0KKw0KKyAgICBzID0gSURMLnN1 YnN0cmluZyhhLCBiKTsNCisNCisgICAgaWYgKHMuc3RhcnRzV2l0aChPTUdf UFJFRklYKSkNCisgICAgICBzID0gcHJlZml4ICsgcy5zdWJzdHJpbmcoT01H X1BSRUZJWC5sZW5ndGgoKSk7DQorDQorICAgIHJldHVybiBzLnJlcGxhY2Uo Jy8nLCAnLicpOw0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBDb252ZXJ0cyB0 aGUgZ2l2ZW4gSURMIG5hbWUgdG8gY2xhc3MgbmFtZSBhbmQgdHJpZXMgdG8g bG9hZCB0aGUgbWF0Y2hpbmcNCisgICAqIGNsYXNzLiBUaGUgT01HIHByZWZp eCAob21nLm9yZykgaXMgcmVwbGFjZWQgYnkgdGhlIGphdmEgcHJlZml4IG9y Zy5vbWcuIE5vDQorICAgKiBvdGhlciBwcmVmaXhlcyBhcmUgYWRkZWQuDQor ICAgKiANCisgICAqIEBwYXJhbSBJREwgdGhlIGlkbCBuYW1lLg0KKyAgICog DQorICAgKiBAcmV0dXJuIHRoZSBtYXRjaGluZyBjbGFzcyBvciBudWxsIGlm IG5vIHN1Y2ggaXMgYXZhaWxhYmxlLg0KKyAgICovDQorICBwdWJsaWMgc3Rh dGljIENsYXNzIElkbDJjbGFzcyhTdHJpbmcgSURMKQ0KKyAgew0KKyAgICBz eW5jaHJvbml6ZWQgKG1fY2xhc3NlcykNCisgICAgICB7DQorICAgICAgICBD bGFzcyBjID0gKENsYXNzKSBtX2NsYXNzZXMuZ2V0KElETCk7DQorDQorICAg ICAgICBpZiAoYyAhPSBudWxsKQ0KKyAgICAgICAgICByZXR1cm4gYzsNCisg ICAgICAgIGVsc2UNCisgICAgICAgICAgew0KKyAgICAgICAgICAgIFN0cmlu ZyBzID0gSURMOw0KKyAgICAgICAgICAgIGludCBhID0gcy5pbmRleE9mKCc6 JykgKyAxOw0KKyAgICAgICAgICAgIGludCBiID0gcy5sYXN0SW5kZXhPZign OicpOw0KKw0KKyAgICAgICAgICAgIHMgPSBJREwuc3Vic3RyaW5nKGEsIGIp Ow0KKw0KKyAgICAgICAgICAgIGlmIChzLnN0YXJ0c1dpdGgoT01HX1BSRUZJ WCkpDQorICAgICAgICAgICAgICBzID0gSkFWQV9QUkVGSVggKyBzLnN1YnN0 cmluZyhPTUdfUFJFRklYLmxlbmd0aCgpKTsNCisNCisgICAgICAgICAgICBT dHJpbmcgY24gPSBzLnJlcGxhY2UoJy8nLCAnLicpOw0KKw0KKyAgICAgICAg ICAgIHRyeQ0KKyAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBj ID0gZm9yTmFtZShjbik7DQorICAgICAgICAgICAgICAgIG1fY2xhc3Nlcy5w dXQoSURMLCBjKTsNCisgICAgICAgICAgICAgICAgcmV0dXJuIGM7DQorICAg ICAgICAgICAgICB9DQorICAgICAgICAgICAgY2F0Y2ggKENsYXNzTm90Rm91 bmRFeGNlcHRpb24gZXgpDQorICAgICAgICAgICAgICB7DQorICAgICAgICAg ICAgICAgIHJldHVybiBudWxsOw0KKyAgICAgICAgICAgICAgfQ0KKyAgICAg ICAgICB9DQorICAgICAgfQ0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBDb252 ZXJ0cyB0aGUgZ2l2ZW4gSURMIG5hbWUgdG8gY2xhc3MgbmFtZSwgdHJpZXMg dG8gbG9hZCB0aGUgbWF0Y2hpbmcgY2xhc3MNCisgICAqIGFuZCBjcmVhdGUg YW4gb2JqZWN0IGluc3RhbmNlIHdpdGggcGFyYW1ldGVybGVzcyBjb25zdHJ1 Y3Rvci4gVGhlIE9NRw0KKyAgICogcHJlZml4IChvbWcub3JnKSBpcyByZXBs YWNlZCBieSB0aGUgamF2YSBwcmVmaXggb3JnLm9tZy4gTm8gb3RoZXIgcHJl Zml4ZXMNCisgICAqIGFyZSBhZGRlZC4NCisgICAqIA0KKyAgICogQHBhcmFt IElETCB0aGUgaWRsIG5hbWUuDQorICAgKiANCisgICAqIEByZXR1cm4gaW5z dGFudGlhdGVkIG9iamVjdCBpbnN0YW5jZSBvciBudWxsIGlmIHN1Y2ggYXR0 ZW1wdCB3YXMgbm90DQorICAgKiBzdWNjZXNzZnVsLg0KKyAgICovDQorICBw dWJsaWMgc3RhdGljIGphdmEubGFuZy5PYmplY3QgSWRsMk9iamVjdChTdHJp bmcgSURMKQ0KKyAgew0KKyAgICBDbGFzcyBjeCA9IElkbDJjbGFzcyhJREwp Ow0KKw0KKyAgICB0cnkNCisgICAgICB7DQorICAgICAgICBpZiAoY3ggIT0g bnVsbCkNCisgICAgICAgICAgcmV0dXJuIGN4Lm5ld0luc3RhbmNlKCk7DQor ICAgICAgICBlbHNlDQorICAgICAgICAgIHJldHVybiBudWxsOw0KKyAgICAg IH0NCisgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkNCisgICAgICB7DQorICAg ICAgICByZXR1cm4gbnVsbDsNCisgICAgICB9DQorICB9DQorDQorICAvKioN CisgICAqIENvbnZlcnQgdGhlIGNsYXNzIG5hbWUgdG8gSURMIG9yIFJNSSBu YW1lIChyZXBvc2l0b3J5IGlkKS4gSWYgdGhlIGNsYXNzDQorICAgKiBpbmhl cml0cyBmcm9tIElETEVudGl0eSwgVmFsdWVCYXNlIG9yIFN5c3RlbUV4Y2Vw dGlvbiwgcmV0dXJucyByZXBvc2l0b3J5DQorICAgKiBJZCBpbiB0aGUgSURM OiguLikgZm9ybS4gSWYgaXQgZG9lcyBub3QsIHJldHVybnMgcmVwb3NpdG9y eSBJZCBpbiB0aGUNCisgICAqIFJNSTooLi4pIGZvcm0uDQorICAgKiANCisg ICAqIEBwYXJhbSBjeCB0aGUgY2xhc3MgZm9yIHRoYXQgdGhlIG5hbWUgbXVz dCBiZSBjb21wdXRlZC4NCisgICAqIA0KKyAgICogQHJldHVybiB0aGUgaWRs IG9yIHJtaSBuYW1lLg0KKyAgICovDQorICBwdWJsaWMgc3RhdGljIHN5bmNo cm9uaXplZCBTdHJpbmcgZ2V0UmVwb3NpdG9yeUlkKENsYXNzIGN4KQ0KKyAg ew0KKyAgICBTdHJpbmcgbmFtZSA9IChTdHJpbmcpIG1fbmFtZXMuZ2V0KGN4 KTsNCisgICAgaWYgKG5hbWUgIT0gbnVsbCkNCisgICAgICByZXR1cm4gbmFt ZTsNCisNCisgICAgU3RyaW5nIGNuID0gY3guZ2V0TmFtZSgpOw0KKyAgICBp ZiAoIShJRExFbnRpdHkuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbShjeCkNCisg ICAgICB8fCBWYWx1ZUJhc2UuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbShjeCkg fHwgU3lzdGVtRXhjZXB0aW9uLmNsYXNzLmlzQXNzaWduYWJsZUZyb20oY3gp KSkNCisgICAgICB7DQorICAgICAgICAvLyBOb3QgYW4gSURMIGVudGl0eS4N CisgICAgICAgIG5hbWUgPSBVdGlsLmNyZWF0ZVZhbHVlSGFuZGxlcigpLmdl dFJNSVJlcG9zaXRvcnlJRChjeCk7DQorICAgICAgfQ0KKyAgICBlbHNlDQor ICAgICAgew0KKyAgICAgICAgaWYgKGNuLnN0YXJ0c1dpdGgoSkFWQV9QUkVG SVgpKQ0KKyAgICAgICAgICBjbiA9IE9NR19QUkVGSVgNCisgICAgICAgICAg ICArIGNuLnN1YnN0cmluZyhKQVZBX1BSRUZJWC5sZW5ndGgoKSkucmVwbGFj ZSgnLicsICcvJyk7DQorICAgICAgICBlbHNlIGlmIChjbi5zdGFydHNXaXRo KENMQVNTUEFUSF9QUkVGSVgpKQ0KKyAgICAgICAgICBjbiA9IE9NR19QUkVG SVgNCisgICAgICAgICAgICArIGNuLnN1YnN0cmluZyhDTEFTU1BBVEhfUFJF RklYLmxlbmd0aCgpKS5yZXBsYWNlKCcuJywgJy8nKTsNCisNCisgICAgICAg IG5hbWUgPSAiSURMOiIgKyBjbiArICI6MS4wIjsNCisgICAgICB9DQorICAg IG1fbmFtZXMucHV0KGN4LCBuYW1lKTsNCisgICAgcmV0dXJuIG5hbWU7DQor ICB9DQorDQorICAvKioNCisgICAqIEluc2VydCB0aGUgcGFzc2VkIHBhcmFt ZXRlciBpbnRvIHRoZSBnaXZlbiBBbnksIGFzc3VtaW5nIHRoYXQgdGhlIGhl bHBlcg0KKyAgICogY2xhc3MgaXMgYXZhaWxhYmxlLiBUaGUgaGVscGVyIGNs YXNzIG11c3QgaGF2ZSB0aGUgIkhlbHBlciIgc3VmZml4IGFuZCBiZQ0KKyAg ICogaW4gdGhlIHNhbWUgcGFja2FnZSBhcyB0aGUgY2xhc3Mgb2YgdGhlIG9i amVjdCBiZWluZyBpbnNlcnRlZC4NCisgICAqIA0KKyAgICogQHBhcmFtIGlu dG8gdGhlIHRhcmdldCB0byBpbnNlcnQuDQorICAgKiANCisgICAqIEBwYXJh bSBvYmplY3QgdGhlIG9iamVjdCB0byBpbnNlcnQuIEl0IGNhbiBiZSBhbnkg b2JqZWN0IGFzIGZhciBhcyB0aGUNCisgICAqIGNvcnJlc3BvbmRpbmcgaGVs cGVyIGlzIHByb3ZpZGVkLg0KKyAgICogDQorICAgKiBAcmV0dXJuIHRydWUg b24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLg0KKyAgICovDQorICBwdWJs aWMgc3RhdGljIGJvb2xlYW4gaW5zZXJ0V2l0aEhlbHBlcihBbnkgaW50bywg T2JqZWN0IG9iamVjdCkNCisgIHsNCisgICAgdHJ5DQorICAgICAgew0KKyAg ICAgICAgU3RyaW5nIGhlbHBlckNsYXNzTmFtZSA9IG9iamVjdC5nZXRDbGFz cygpLmdldE5hbWUoKSArICJIZWxwZXIiOw0KKyAgICAgICAgQ2xhc3MgaGVs cGVyQ2xhc3MgPSBmb3JOYW1lKGhlbHBlckNsYXNzTmFtZSk7DQorDQorICAg ICAgICBNZXRob2QgaW5zZXJ0ID0gaGVscGVyQ2xhc3MuZ2V0TWV0aG9kKCJp bnNlcnQiLCBuZXcgQ2xhc3NbXSB7DQorICAgICAgICAgIEFueS5jbGFzcywg b2JqZWN0LmdldENsYXNzKCkgfSk7DQorDQorICAgICAgICBpbnNlcnQuaW52 b2tlKG51bGwsIG5ldyBPYmplY3RbXSB7IGludG8sIG9iamVjdCB9KTsNCisN CisgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICAgIH0NCisgICAgY2F0Y2gg KEV4Y2VwdGlvbiBleGMpDQorICAgICAgew0KKyAgICAgICAgLy8gRmFpbGVk IGR1ZSBzb21lIHJlYXNvbi4NCisgICAgICAgIHJldHVybiBmYWxzZTsNCisg ICAgICB9DQorICB9DQorDQorICAvKioNCisgICAqIEluc2VydCB0aGUgc3lz dGVtIGV4Y2VwdGlvbiBpbnRvIHRoZSBnaXZlbiBBbnkuDQorICAgKi8NCisg IHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpbnNlcnRTeXNFeGNlcHRpb24oQW55 IGludG8sIFN5c3RlbUV4Y2VwdGlvbiBleGNlcHRpb24pDQorICB7DQorICAg IHRyeQ0KKyAgICAgIHsNCisgICAgICAgIEJ1ZmZlcmVkQ2RyT3V0cHV0IG91 dHB1dCA9IG5ldyBCdWZmZXJlZENkck91dHB1dCgpOw0KKw0KKyAgICAgICAg U3RyaW5nIG1fZXhjZXB0aW9uX2lkID0gZ2V0UmVwb3NpdG9yeUlkKGV4Y2Vw dGlvbi5nZXRDbGFzcygpKTsNCisgICAgICAgIG91dHB1dC53cml0ZV9zdHJp bmcobV9leGNlcHRpb25faWQpOw0KKyAgICAgICAgb3V0cHV0LndyaXRlX3Vs b25nKGV4Y2VwdGlvbi5taW5vcik7DQorICAgICAgICBDb21wbGV0aW9uU3Rh dHVzSGVscGVyLndyaXRlKG91dHB1dCwgZXhjZXB0aW9uLmNvbXBsZXRlZCk7 DQorDQorICAgICAgICBTdHJpbmcgbmFtZSA9IGdldERlZmF1bHROYW1lKG1f ZXhjZXB0aW9uX2lkKTsNCisNCisgICAgICAgIEdlbmVyYWxIb2xkZXIgaCA9 IG5ldyBHZW5lcmFsSG9sZGVyKG91dHB1dCk7DQorDQorICAgICAgICBpbnRv Lmluc2VydF9TdHJlYW1hYmxlKGgpOw0KKw0KKyAgICAgICAgUmVjb3JkVHlw ZUNvZGUgciA9IG5ldyBSZWNvcmRUeXBlQ29kZShUQ0tpbmQudGtfZXhjZXB0 KTsNCisgICAgICAgIHIuc2V0SWQobV9leGNlcHRpb25faWQpOw0KKyAgICAg ICAgci5zZXROYW1lKG5hbWUpOw0KKyAgICAgICAgaW50by50eXBlKHIpOw0K Kw0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgICAgfQ0KKyAgICBjYXRj aCAoRXhjZXB0aW9uIGV4KQ0KKyAgICAgIHsNCisgICAgICAgIGV4LnByaW50 U3RhY2tUcmFjZSgpOw0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAg IH0NCisgIH0NCisNCisgIC8qKg0KKyAgICogR2V0IHRoZSB0eXBlIG5hbWUg ZnJvbSB0aGUgSURMIHN0cmluZy4NCisgICAqLw0KKyAgcHVibGljIHN0YXRp YyBTdHJpbmcgZ2V0RGVmYXVsdE5hbWUoU3RyaW5nIGlkbCkNCisgIHsNCisg ICAgaW50IGYxID0gaWRsLmxhc3RJbmRleE9mKCIvIik7DQorICAgIGludCBw MSA9IChmMSA8IDApID8gMCA6IGYxOw0KKyAgICBpbnQgcDIgPSBpZGwuaW5k ZXhPZigiOiIsIHAxKTsNCisgICAgaWYgKHAyIDwgMCkNCisgICAgICBwMiA9 IGlkbC5sZW5ndGgoKTsNCisNCisgICAgU3RyaW5nIG5hbWUgPSBpZGwuc3Vi c3RyaW5nKGYxICsgMSwgcDIpOw0KKyAgICByZXR1cm4gbmFtZTsNCisgIH0N CisNCisgIC8qKg0KKyAgICogSW5zZXJ0IHRoaXMgZXhjZXB0aW9uIGludG8g dGhlIGdpdmVuIEFueS4gT24gZmFpbHVyZSwgaW5zZXJ0IHRoZSBVTktOT1dO DQorICAgKiBleGNlcHRpb24uDQorICAgKi8NCisgIHB1YmxpYyBzdGF0aWMg dm9pZCBpbnNlcnRFeGNlcHRpb24oQW55IGludG8sIFRocm93YWJsZSBleGNl cHRpb24pDQorICB7DQorICAgIGJvb2xlYW4gb2sgPSBmYWxzZTsNCisgICAg aWYgKGV4Y2VwdGlvbiBpbnN0YW5jZW9mIFN5c3RlbUV4Y2VwdGlvbikNCisg ICAgICBvayA9IGluc2VydFN5c0V4Y2VwdGlvbihpbnRvLCAoU3lzdGVtRXhj ZXB0aW9uKSBleGNlcHRpb24pOw0KKyAgICBlbHNlIGlmIChleGNlcHRpb24g aW5zdGFuY2VvZiBVc2VyRXhjZXB0aW9uKQ0KKyAgICAgIG9rID0gaW5zZXJ0 V2l0aEhlbHBlcihpbnRvLCBleGNlcHRpb24pOw0KKw0KKyAgICBpZiAoIW9r KQ0KKyAgICAgIG9rID0gaW5zZXJ0U3lzRXhjZXB0aW9uKGludG8sIG5ldyBV TktOT1dOKCkpOw0KKyAgICBpZiAoIW9rKQ0KKyAgICAgIHRocm93IG5ldyBJ bnRlcm5hbEVycm9yKCJFeGNlcHRpb24gd3JhcHBpbmcgYnJva2VuIik7DQor ICB9DQorDQorICAvKioNCisgICAqIEZpbmQgaGVscGVyIGZvciB0aGUgY2xh c3Mgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4NCisgICAqLw0KKyAgcHVibGljIHN0 YXRpYyBDbGFzcyBmaW5kSGVscGVyKFN0cmluZyBpZGwpDQorICB7DQorICAg IHN5bmNocm9uaXplZCAobV9oZWxwZXJzKQ0KKyAgICAgIHsNCisgICAgICAg IENsYXNzIGMgPSAoQ2xhc3MpIG1faGVscGVycy5nZXQoaWRsKTsNCisgICAg ICAgIGlmIChjICE9IG51bGwpDQorICAgICAgICAgIHJldHVybiBjOw0KKyAg ICAgICAgdHJ5DQorICAgICAgICAgIHsNCisgICAgICAgICAgICBTdHJpbmcg aGVscGVyID0gdG9IZWxwZXJOYW1lKGlkbCk7DQorICAgICAgICAgICAgYyA9 IGZvck5hbWUoaGVscGVyKTsNCisNCisgICAgICAgICAgICBtX2hlbHBlcnMu cHV0KGlkbCwgYyk7DQorICAgICAgICAgICAgcmV0dXJuIGM7DQorICAgICAg ICAgIH0NCisgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpDQorICAgICAg ICAgIHsNCisgICAgICAgICAgICByZXR1cm4gbnVsbDsNCisgICAgICAgICAg fQ0KKyAgICAgIH0NCisgIH0NCisgIA0KKyAgLyoqDQorICAgKiBMb2FkIHRo ZSBjbGFzcyB3aXRoIHRoZSBnaXZlbiBuYW1lLiBUaGlzIG1ldGhvZCB0cmll cyB0byB1c2UgdGhlIGNvbnRleHQNCisgICAqIGNsYXNzIGxvYWRlciBmaXJz dC4gSWYgdGhpcyBmYWlscywgaXQgc2VhcmNoZXMgZm9yIHRoZSBzdWl0YWJs ZSBjbGFzcw0KKyAgICogbG9hZGVyIGluIHRoZSBjYWxsZXIgc3RhY2sgdHJh Y2UuIFRoaXMgbWV0aG9kIGlzIGEgY2VudHJhbCBwb2ludCB3aGVyZSBhbGwN CisgICAqIHJlcXVlc3RzIHRvIGZpbmQgYSBjbGFzcyBieSBuYW1lIGFyZSBk ZWxlZ2F0ZWQuDQorICAgKi8NCisgIHB1YmxpYyBzdGF0aWMgQ2xhc3MgZm9y TmFtZShTdHJpbmcgY2xhc3NOYW1lKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4 Y2VwdGlvbg0KKyAgew0KKyAgICB0cnkNCisgICAgICB7DQorICAgICAgICBy ZXR1cm4gQ2xhc3MuZm9yTmFtZShjbGFzc05hbWUsIHRydWUsDQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgp LmdldENvbnRleHRDbGFzc0xvYWRlcigpKTsNCisgICAgICB9DQorICAgIGNh dGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIG5leCkNCisgICAgICB7DQor ICAgICAgICAvKioNCisgICAgICAgICAqIFJldHVybnMgdGhlIGZpcnN0IHVz ZXIgZGVmaW5lZCBjbGFzcyBsb2FkZXIgb24gdGhlIGNhbGwgc3RhY2ssIG9y DQorICAgICAgICAgKiBudWxsIHdoZW4gbm8gbm9uLW51bGwgY2xhc3MgbG9h ZGVyIHdhcyBmb3VuZC4NCisgICAgICAgICAqLw0KKw0KKy8vIEdDSiBMT0NB TCAtIFdlIGRvbid0IGhhdmUgVk1TdGFja1dhbGtlciB5ZXQuDQorLy8gV2Ug b25seSB0cnkgdGhlIFN5c3RlbUNsYXNzTG9hZGVyIGZvciBub3cuDQorLy8g ICAgICAgIENsYXNzW10gY3R4ID0gVk1TdGFja1dhbGtlci5nZXRDbGFzc0Nv bnRleHQoKTsNCisvLyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjdHgu bGVuZ3RoOyBpKyspDQorLy8gICAgICAgICAgew0KKy8vICAgICAgICAgICAg Ly8gU2luY2Ugd2UgbGl2ZSBpbiBhIGNsYXNzIGxvYWRlZCBieSB0aGUgYm9v dHN0cmFwDQorLy8gICAgICAgICAgICAvLyBjbGFzcyBsb2FkZXIsIGdldENs YXNzTG9hZGVyIGlzIHNhZmUgdG8gY2FsbCB3aXRob3V0DQorLy8gICAgICAg ICAgICAvLyBuZWVkaW5nIHRvIGJlIHdyYXBwZWQgaW4gYSBwcml2aWxlZ2Vk IGFjdGlvbi4NCisvLyAgICAgICAgICAgIENsYXNzTG9hZGVyIGNsID0gY3R4 W2ldLmdldENsYXNzTG9hZGVyKCk7DQorCSAgICBDbGFzc0xvYWRlciBjbCA9 IENsYXNzTG9hZGVyLmdldFN5c3RlbUNsYXNzTG9hZGVyKCk7DQorICAgICAg ICAgICAgdHJ5DQorICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAg IGlmIChjbCAhPSBudWxsKQ0KKyAgICAgICAgICAgICAgICAgIHJldHVybiBD bGFzcy5mb3JOYW1lKGNsYXNzTmFtZSwgdHJ1ZSwgY2wpOw0KKyAgICAgICAg ICAgICAgfQ0KKyAgICAgICAgICAgIGNhdGNoIChDbGFzc05vdEZvdW5kRXhj ZXB0aW9uIG5leDIpDQorICAgICAgICAgICAgICB7DQorICAgICAgICAgICAg ICAgIC8vIFRyeSBuZXh0Lg0KKyAgICAgICAgICAgICAgfQ0KKy8vICAgICAg ICAgIH0NCisNCisgICAgICB9DQorICAgIHRocm93IG5ldyBDbGFzc05vdEZv dW5kRXhjZXB0aW9uKGNsYXNzTmFtZSk7DQorICB9DQorfQ0KSW5kZXg6IGdu dS9DT1JCQS9EeW5Bbi9nbnVEeW5WYWx1ZS5qYXZhDQo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQotLS0gZ251L0NPUkJBL0R5bkFuL2dudUR5blZhbHVlLmph dmEJKHJldmlzaW9uIDApDQorKysgZ251L0NPUkJBL0R5bkFuL2dudUR5blZh bHVlLmphdmEJKHJldmlzaW9uIDApDQpAQCAtMCwwICsxLDM4NiBAQA0KKy8q IGdudUR5blZhbHVlLmphdmEgLS0NCisgICBDb3B5cmlnaHQgKEMpIDIwMDUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuDQorDQorVGhpcyBmaWxl IGlzIHBhcnQgb2YgR05VIENsYXNzcGF0aC4NCisNCitHTlUgQ2xhc3NwYXRo IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkNCitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KK3RoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9y IChhdCB5b3VyIG9wdGlvbikNCithbnkgbGF0ZXIgdmVyc2lvbi4NCisNCitH TlUgQ2xhc3NwYXRoIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KK1dJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCitNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlIEdOVQ0KK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4NCisNCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KK2Fs b25nIHdpdGggR05VIENsYXNzcGF0aDsgc2VlIHRoZSBmaWxlIENPUFlJTkcu ICBJZiBub3QsIHdyaXRlIHRvIHRoZQ0KK0ZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg Qm9zdG9uLCBNQQ0KKzAyMTEwLTEzMDEgVVNBLg0KKw0KK0xpbmtpbmcgdGhp cyBsaWJyYXJ5IHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHkgd2l0aCBvdGhl ciBtb2R1bGVzIGlzDQorbWFraW5nIGEgY29tYmluZWQgd29yayBiYXNlZCBv biB0aGlzIGxpYnJhcnkuICBUaHVzLCB0aGUgdGVybXMgYW5kDQorY29uZGl0 aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgY292ZXIg dGhlIHdob2xlDQorY29tYmluYXRpb24uDQorDQorQXMgYSBzcGVjaWFsIGV4 Y2VwdGlvbiwgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mIHRoaXMgbGlicmFy eSBnaXZlIHlvdQ0KK3Blcm1pc3Npb24gdG8gbGluayB0aGlzIGxpYnJhcnkg d2l0aCBpbmRlcGVuZGVudCBtb2R1bGVzIHRvIHByb2R1Y2UgYW4NCitleGVj dXRhYmxlLCByZWdhcmRsZXNzIG9mIHRoZSBsaWNlbnNlIHRlcm1zIG9mIHRo ZXNlIGluZGVwZW5kZW50DQorbW9kdWxlcywgYW5kIHRvIGNvcHkgYW5kIGRp c3RyaWJ1dGUgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHVuZGVyDQordGVy bXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVl dCwgZm9yIGVhY2ggbGlua2VkDQoraW5kZXBlbmRlbnQgbW9kdWxlLCB0aGUg dGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIGxpY2Vuc2Ugb2YgdGhhdA0K K21vZHVsZS4gIEFuIGluZGVwZW5kZW50IG1vZHVsZSBpcyBhIG1vZHVsZSB3 aGljaCBpcyBub3QgZGVyaXZlZCBmcm9tDQorb3IgYmFzZWQgb24gdGhpcyBs aWJyYXJ5LiAgSWYgeW91IG1vZGlmeSB0aGlzIGxpYnJhcnksIHlvdSBtYXkg ZXh0ZW5kDQordGhpcyBleGNlcHRpb24gdG8geW91ciB2ZXJzaW9uIG9mIHRo ZSBsaWJyYXJ5LCBidXQgeW91IGFyZSBub3QNCitvYmxpZ2F0ZWQgdG8gZG8g c28uICBJZiB5b3UgZG8gbm90IHdpc2ggdG8gZG8gc28sIGRlbGV0ZSB0aGlz DQorZXhjZXB0aW9uIHN0YXRlbWVudCBmcm9tIHlvdXIgdmVyc2lvbi4gKi8N CisNCisNCitwYWNrYWdlIGdudS5DT1JCQS5EeW5BbjsNCisNCitpbXBvcnQg Z251LkNPUkJBLk1pbm9yOw0KK2ltcG9ydCBnbnUuQ09SQkEuVW5leHBlY3Rl ZDsNCisNCitpbXBvcnQgb3JnLm9tZy5DT1JCQS5Bbnk7DQoraW1wb3J0IG9y Zy5vbWcuQ09SQkEuQkFEX1BBUkFNOw0KK2ltcG9ydCBvcmcub21nLkNPUkJB Lk1BUlNIQUw7DQoraW1wb3J0IG9yZy5vbWcuQ09SQkEuT1JCOw0KK2ltcG9y dCBvcmcub21nLkNPUkJBLlRDS2luZDsNCitpbXBvcnQgb3JnLm9tZy5DT1JC QS5UeXBlQ29kZTsNCitpbXBvcnQgb3JnLm9tZy5DT1JCQS5WTV9UUlVOQ0FU QUJMRTsNCitpbXBvcnQgb3JnLm9tZy5DT1JCQS5wb3J0YWJsZS5PdXRwdXRT dHJlYW07DQoraW1wb3J0IG9yZy5vbWcuQ09SQkEucG9ydGFibGUuVmFsdWVG YWN0b3J5Ow0KK2ltcG9ydCBvcmcub21nLkR5bmFtaWNBbnkuRHluQW55Ow0K K2ltcG9ydCBvcmcub21nLkR5bmFtaWNBbnkuRHluQW55UGFja2FnZS5JbnZh bGlkVmFsdWU7DQoraW1wb3J0IG9yZy5vbWcuRHluYW1pY0FueS5EeW5BbnlQ YWNrYWdlLlR5cGVNaXNtYXRjaDsNCitpbXBvcnQgb3JnLm9tZy5EeW5hbWlj QW55LkR5blN0cnVjdDsNCitpbXBvcnQgb3JnLm9tZy5EeW5hbWljQW55LkR5 blZhbHVlOw0KK2ltcG9ydCBvcmcub21nLkR5bmFtaWNBbnkuRHluVmFsdWVD b21tb247DQoraW1wb3J0IG9yZy5vbWcuRHluYW1pY0FueS5EeW5WYWx1ZU9w ZXJhdGlvbnM7DQoraW1wb3J0IG9yZy5vbWcuRHluYW1pY0FueS5OYW1lRHlu QW55UGFpcjsNCitpbXBvcnQgb3JnLm9tZy5EeW5hbWljQW55Lk5hbWVWYWx1 ZVBhaXI7DQorDQoraW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOw0KKw0K Ky8qKg0KKyAqIEltcGxlbWVudGF0aW9uIG9mIER5blZhbHVlLg0KKyAqDQor ICogQGF1dGhvciBBdWRyaXVzIE1lc2thdXNrYXMsIExpdGh1YW5pYSAoQXVk cml1c0FAQmlvaW5mb3JtYXRpY3Mub3JnKQ0KKyAqLw0KK3B1YmxpYyBjbGFz cyBnbnVEeW5WYWx1ZSBleHRlbmRzIFJlY29yZEFueSBpbXBsZW1lbnRzIER5 blZhbHVlLA0KKyAgU2VyaWFsaXphYmxlDQorew0KKyAgLyoqDQorICAgKiBV c2Ugc2VyaWFsVmVyc2lvblVJRCBmb3IgaW50ZXJvcGVyYWJpbGl0eS4NCisg ICAqLw0KKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJz aW9uVUlEID0gMTsNCisNCisgIC8qKg0KKyAgICogSWYgdHJ1ZSwgdGhlIHZh bHVlIG9mIHRoaXMgVmFsdWVUeXBlIGlzIHNldCB0byBudWxsLg0KKyAgICov DQorICBib29sZWFuIGlzTnVsbDsNCisNCisgIC8qKg0KKyAgICogQ3JlYXRl IGFuIGluc3RhbmNlLg0KKyAgICovDQorICBwdWJsaWMgZ251RHluVmFsdWUo VHlwZUNvZGUgb1R5cGUsIFR5cGVDb2RlIGFUeXBlLA0KKyAgICBnbnVEeW5B bnlGYWN0b3J5IGFGYWN0b3J5LCBPUkIgYW5PcmINCisgICkNCisgIHsNCisg ICAgc3VwZXIob1R5cGUsIGFUeXBlLCBhRmFjdG9yeSwgYW5PcmIpOw0KKw0K KyAgICAvLyBJbml0aWFsaXNlIGZpZWxkcy4gVGhlIGFycmF5IG9mIGZpZWxk cyBhbHNvIGluY2x1ZGVzIGFsbCBpbmhlcml0ZWQNCisgICAgLy8gZmllbGRz Lg0KKyAgICB0cnkNCisgICAgICB7DQorICAgICAgICBhcnJheSA9IG5ldyBE eW5BbnlbIGZpbmFsX3R5cGUubWVtYmVyX2NvdW50KCkgXTsNCisgICAgICAg IGZOYW1lcyA9IG5ldyBTdHJpbmdbIGFycmF5Lmxlbmd0aCBdOw0KKyAgICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykNCisg ICAgICAgICAgew0KKyAgICAgICAgICAgIGFycmF5IFsgaSBdID0NCisgICAg ICAgICAgICAgIGZhY3RvcnkuY3JlYXRlX2R5bl9hbnlfZnJvbV90eXBlX2Nv ZGUoZmluYWxfdHlwZS5tZW1iZXJfdHlwZShpKSk7DQorICAgICAgICAgICAg Zk5hbWVzIFsgaSBdID0gZmluYWxfdHlwZS5tZW1iZXJfbmFtZShpKTsNCisg ICAgICAgICAgfQ0KKw0KKyAgICAgICAgLy8gU2VhcmNoIG9mIGluaGVyaXRl ZCBtZW1iZXJzLg0KKyAgICAgICAgaWYgKGZpbmFsX3R5cGUudHlwZV9tb2Rp ZmllcigpID09IFZNX1RSVU5DQVRBQkxFLnZhbHVlKQ0KKyAgICAgICAgICB7 DQorICAgICAgICAgICAgVHlwZUNvZGUgcGFyZW50ID0gZmluYWxfdHlwZS5j b25jcmV0ZV9iYXNlX3R5cGUoKTsNCisgICAgICAgICAgICBEeW5BbnkgYW5j ZXN0b3IgPSBmYWN0b3J5LmNyZWF0ZV9keW5fYW55X2Zyb21fdHlwZV9jb2Rl KHBhcmVudCk7DQorDQorICAgICAgICAgICAgaWYgKGFuY2VzdG9yIGluc3Rh bmNlb2YgRHluVmFsdWUpDQorICAgICAgICAgICAgICB7DQorICAgICAgICAg ICAgICAgIC8vIEFkZCBtZW1iZXJzIG9mIGFuY2VzdG9yIGluIGZyb250IG9m IHRoZSBjdXJyZW4gbWVtYmVycy4NCisgICAgICAgICAgICAgICAgRHluVmFs dWUgYW5jID0gKER5blZhbHVlKSBhbmNlc3RvcjsNCisgICAgICAgICAgICAg ICAgYW5jLnNldF90b192YWx1ZSgpOw0KKw0KKyAgICAgICAgICAgICAgICBO YW1lRHluQW55UGFpcltdIGFhciA9IGFuYy5nZXRfbWVtYmVyc19hc19keW5f YW55KCk7DQorICAgICAgICAgICAgICAgIGluaGVyaXRGaWVsZHMoYWFyKTsN CisgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICBlbHNlIGlmIChhbmNl c3RvciBpbnN0YW5jZW9mIER5blN0cnVjdCkNCisgICAgICAgICAgICAgIHsN CisgICAgICAgICAgICAgICAgLy8gQWRkIG1lbWJlcnMgb2YgYW5jZXN0b3Ig aW4gZnJvbnQgb2YgdGhlIGN1cnJlbiBtZW1iZXJzLg0KKyAgICAgICAgICAg ICAgICBEeW5TdHJ1Y3QgYW5jID0gKER5blN0cnVjdCkgYW5jZXN0b3I7DQor ICAgICAgICAgICAgICAgIE5hbWVEeW5BbnlQYWlyW10gYWFyID0gYW5jLmdl dF9tZW1iZXJzX2FzX2R5bl9hbnkoKTsNCisgICAgICAgICAgICAgICAgaW5o ZXJpdEZpZWxkcyhhYXIpOw0KKyAgICAgICAgICAgICAgfQ0KKyAgICAgICAg ICAgIGVsc2UNCisgICAgICAgICAgICAgIHRocm93IG5ldyBCQURfUEFSQU0o IlRoZSBwYXJlbnQgb2YgIiArIGZpbmFsX3R5cGUuaWQoKSArICIsICIgKw0K KyAgICAgICAgICAgICAgICBwYXJlbnQuaWQoKSArICIsIGlzIG5vdCBzdHJ1 Y3R1cmUgbm9yIHZhbHVlLiINCisgICAgICAgICAgICAgICk7DQorICAgICAg ICAgIH0NCisgICAgICB9DQorICAgIGNhdGNoIChFeGNlcHRpb24gZSkNCisg ICAgICB7DQorICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZChlKTsNCisg ICAgICB9DQorDQorICAgIHNldF90b19udWxsKCk7DQorICB9DQorDQorICAv KioNCisgICAqIEluaGVyaXQgdGhlIHByb3ZpZGVkIGZpZWxkcy4NCisgICAq Lw0KKyAgcHJpdmF0ZSB2b2lkIGluaGVyaXRGaWVsZHMoTmFtZUR5bkFueVBh aXJbXSBhYXIpDQorICB7DQorICAgIER5bkFueVtdIG5BcnJheSA9IG5ldyBE eW5BbnlbIGFycmF5Lmxlbmd0aCArIGFhci5sZW5ndGggXTsNCisgICAgU3Ry aW5nW10gbk5hbWVzID0gbmV3IFN0cmluZ1sgYXJyYXkubGVuZ3RoICsgYWFy Lmxlbmd0aCBdOw0KKyAgICBpbnQgcCA9IDA7DQorICAgIGZvciAoaW50IGkg PSAwOyBpIDwgYWFyLmxlbmd0aDsgaSsrKQ0KKyAgICAgIHsNCisgICAgICAg IG5BcnJheSBbIHAgXSA9IGFhciBbIGkgXS52YWx1ZTsNCisgICAgICAgIG5O YW1lcyBbIHAgXSA9IGFhciBbIGkgXS5pZDsNCisgICAgICAgIHArKzsNCisg ICAgICB9DQorDQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXkubGVu Z3RoOyBpKyspDQorICAgICAgew0KKyAgICAgICAgbkFycmF5IFsgcCBdID0g YXJyYXkgWyBpIF07DQorICAgICAgICBuTmFtZXMgWyBwIF0gPSBmTmFtZXMg WyBpIF07DQorICAgICAgICBwKys7DQorICAgICAgfQ0KKw0KKyAgICBhcnJh eSA9IG5BcnJheTsNCisgICAgZk5hbWVzID0gbk5hbWVzOw0KKyAgfQ0KKw0K KyAgLyoqIEBpbmhlcml0RG9jICovDQorICBwdWJsaWMgVENLaW5kIGN1cnJl bnRfbWVtYmVyX2tpbmQoKSB0aHJvd3MgVHlwZU1pc21hdGNoLCBJbnZhbGlk VmFsdWUNCisgIHsNCisgICAgaWYgKGlzTnVsbCkNCisgICAgICB0aHJvdyBu ZXcgVHlwZU1pc21hdGNoKElTTlVMTCk7DQorICAgIGVsc2UNCisgICAgICBy ZXR1cm4gc3VwZXIuY3VycmVudF9tZW1iZXJfa2luZCgpOw0KKyAgfQ0KKyAg Ow0KKw0KKyAgLyoqIEBpbmhlcml0RG9jICovDQorICBwdWJsaWMgU3RyaW5n IGN1cnJlbnRfbWVtYmVyX25hbWUoKSB0aHJvd3MgVHlwZU1pc21hdGNoLCBJ bnZhbGlkVmFsdWUNCisgIHsNCisgICAgaWYgKGlzTnVsbCkNCisgICAgICB0 aHJvdyBuZXcgVHlwZU1pc21hdGNoKElTTlVMTCk7DQorICAgIGVsc2UNCisg ICAgICByZXR1cm4gc3VwZXIuY3VycmVudF9tZW1iZXJfbmFtZSgpOw0KKyAg fQ0KKyAgOw0KKw0KKyAgLyoqIEBpbmhlcml0RG9jICovDQorICBwdWJsaWMg TmFtZUR5bkFueVBhaXJbXSBnZXRfbWVtYmVyc19hc19keW5fYW55KCkgdGhy b3dzIEludmFsaWRWYWx1ZQ0KKyAgew0KKyAgICBpZiAoaXNOdWxsKQ0KKyAg ICAgIHRocm93IG5ldyBJbnZhbGlkVmFsdWUoSVNOVUxMKTsNCisgICAgcmV0 dXJuIHN1cGVyLmdudV9nZXRfbWVtYmVyc19hc19keW5fYW55KCk7DQorICB9 DQorICA7DQorDQorICAvKiogQGluaGVyaXREb2MgKi8NCisgIHB1YmxpYyBO YW1lVmFsdWVQYWlyW10gZ2V0X21lbWJlcnMoKSB0aHJvd3MgSW52YWxpZFZh bHVlDQorICB7DQorICAgIGlmIChpc051bGwpDQorICAgICAgdGhyb3cgbmV3 IEludmFsaWRWYWx1ZShJU05VTEwpOw0KKyAgICBlbHNlDQorICAgICAgcmV0 dXJuIHN1cGVyLmdudV9nZXRfbWVtYmVycygpOw0KKyAgfQ0KKyAgOw0KKw0K KyAgLyoqIEBpbmhlcml0RG9jICovDQorICBwdWJsaWMgdm9pZCBzZXRfbWVt YmVyc19hc19keW5fYW55KE5hbWVEeW5BbnlQYWlyW10gdmFsdWUpDQorICAg IHRocm93cyBUeXBlTWlzbWF0Y2gsIEludmFsaWRWYWx1ZQ0KKyAgew0KKyAg ICBzdXBlci5zZXRfbWVtYmVyc19hc19keW5fYW55KHZhbHVlKTsNCisgICAg aXNOdWxsID0gZmFsc2U7DQorICB9DQorICA7DQorDQorICAvKiogQGluaGVy aXREb2MgKi8NCisgIHB1YmxpYyB2b2lkIHNldF9tZW1iZXJzKE5hbWVWYWx1 ZVBhaXJbXSB2YWx1ZSkNCisgICAgdGhyb3dzIFR5cGVNaXNtYXRjaCwgSW52 YWxpZFZhbHVlDQorICB7DQorICAgIHN1cGVyLnNldF9tZW1iZXJzKHZhbHVl KTsNCisgICAgaXNOdWxsID0gZmFsc2U7DQorICB9DQorICA7DQorDQorICAv KiogQGluaGVyaXREb2MgKi8NCisgIHB1YmxpYyBib29sZWFuIGlzX251bGwo KQ0KKyAgew0KKyAgICByZXR1cm4gaXNOdWxsOw0KKyAgfQ0KKw0KKyAgLyoq IEBpbmhlcml0RG9jICovDQorICBwdWJsaWMgdm9pZCBzZXRfdG9fbnVsbCgp DQorICB7DQorICAgIGlzTnVsbCA9IHRydWU7DQorICAgIHZhbHVlQ2hhbmdl ZCgpOw0KKyAgfQ0KKw0KKyAgLyoqIEBpbmhlcml0RG9jICovDQorICBwdWJs aWMgdm9pZCBzZXRfdG9fdmFsdWUoKQ0KKyAgew0KKyAgICBpc051bGwgPSBm YWxzZTsNCisgICAgdmFsdWVDaGFuZ2VkKCk7DQorICB9DQorDQorICAvKioN CisgICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZS4NCisgICAqLw0KKyAgcHJv dGVjdGVkIFJlY29yZEFueSBuZXdJbnN0YW5jZShUeXBlQ29kZSBvVHlwZSwg VHlwZUNvZGUgYVR5cGUsDQorICAgIGdudUR5bkFueUZhY3RvcnkgYUZhY3Rv cnksIE9SQiBhbk9yYg0KKyAgKQ0KKyAgew0KKyAgICBnbnVEeW5WYWx1ZSB2 ID0gbmV3IGdudUR5blZhbHVlKG9UeXBlLCBhVHlwZSwgYUZhY3RvcnksIGFu T3JiKTsNCisgICAgaWYgKGlzTnVsbCkNCisgICAgICB2LnNldF90b19udWxs KCk7DQorICAgIGVsc2UNCisgICAgICB2LnNldF90b192YWx1ZSgpOw0KKyAg ICByZXR1cm4gdjsNCisgIH0NCisNCisgIC8qKg0KKyAgICogQ29tcGFyZSBm b3IgZXF1YWxpdHksIG1pbmRpbmcgbnVsbCB2YWx1ZXMuDQorICAgKi8NCisg IHB1YmxpYyBib29sZWFuIGVxdWFsKER5bkFueSBvdGhlcikNCisgIHsNCisg ICAgaWYgKG90aGVyIGluc3RhbmNlb2YgRHluVmFsdWVPcGVyYXRpb25zKQ0K KyAgICAgIHsNCisgICAgICAgIER5blZhbHVlQ29tbW9uIG8gPSAoRHluVmFs dWVDb21tb24pIG90aGVyOw0KKyAgICAgICAgaWYgKGlzTnVsbCkNCisgICAg ICAgICAgcmV0dXJuIG8uaXNfbnVsbCgpICYmIG8udHlwZSgpLmVxdWFsKG9m ZmljaWFsX3R5cGUpOw0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgICByZXR1 cm4gIW8uaXNfbnVsbCgpICYmIHJlY29yZF9lcXVhbChvdGhlcik7IC8vIEdD SiBMT0NBTCBidWcgIzI0OTM4DQorICAgICAgfQ0KKyAgICBlbHNlDQorICAg ICAgcmV0dXJuIGZhbHNlOw0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBHZXQg dGhlIGZvY3VzZWQgY29tcG9uZW50LCB0aHJvd2luZyBleGNlcHRpb24gaWYg dGhlIGN1cnJlbnQgdmFsdWUgaXMgbnVsbC4NCisgICAqLw0KKyAgcHJvdGVj dGVkIER5bkFueSBmb2N1c2VkKCkgdGhyb3dzIEludmFsaWRWYWx1ZSwgVHlw ZU1pc21hdGNoDQorICB7DQorICAgIGlmIChpc051bGwpDQorICAgICAgdGhy b3cgbmV3IFR5cGVNaXNtYXRjaChJU05VTEwpOw0KKyAgICBlbHNlDQorICAg ICAgcmV0dXJuIHN1cGVyLmZvY3VzZWQoKTsNCisgIH0NCisNCisgIC8qKg0K KyAgICogQ29udmVydCBpbnRvIEFueS4NCisgICAqLw0KKyAgcHVibGljIEFu eSB0b19hbnkoKQ0KKyAgew0KKyAgICBpZiAoaXNOdWxsKQ0KKyAgICAgIHsN CisgICAgICAgIEFueSBhMCA9IGNyZWF0ZUFueSgpOw0KKyAgICAgICAgYTAu dHlwZShvcmIuZ2V0X3ByaW1pdGl2ZV90YyhUQ0tpbmQudGtfbnVsbCkpOw0K KyAgICAgICAgcmV0dXJuIGEwOw0KKyAgICAgIH0NCisgICAgZWxzZQ0KKyAg ICAgIHsNCisgICAgICAgIHRyeQ0KKyAgICAgICAgICB7DQorICAgICAgICAg ICAgVmFsdWVGYWN0b3J5IGZhY3RvcnkgPQ0KKyAgICAgICAgICAgICAgKChv cmcub21nLkNPUkJBXzJfMy5PUkIpIG9yYikubG9va3VwX3ZhbHVlX2ZhY3Rv cnkob2ZmaWNpYWxfdHlwZS5pZCgpKTsNCisgICAgICAgICAgICBpZiAoZmFj dG9yeSA9PSBudWxsKQ0KKyAgICAgICAgICAgICAgew0KKyAgICAgICAgICAg ICAgICBNQVJTSEFMIG0gPSBuZXcgTUFSU0hBTCgiRmFjdG9yeSBmb3IgIiAr IG9mZmljaWFsX3R5cGUuaWQoKSArDQorICAgICAgICAgICAgICAgICIgbm90 IHJlZ2lzdGVyZWQuIik7DQorICAgICAgICAgICAgICAgIG0ubWlub3IgPSBN aW5vci5GYWN0b3J5Ow0KKyAgICAgICAgICAgICAgICB0aHJvdyBtOw0KKyAg ICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIE91dHB1dFN0cmVhbSBv dXQgPSBvcmIuY3JlYXRlX291dHB1dF9zdHJlYW0oKTsNCisNCisgICAgICAg ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKQ0K KyAgICAgICAgICAgICAgYXJyYXkgWyBpIF0udG9fYW55KCkud3JpdGVfdmFs dWUob3V0KTsNCisNCisgICAgICAgICAgICBvcmcub21nLkNPUkJBXzJfMy5w b3J0YWJsZS5JbnB1dFN0cmVhbSBpbiA9DQorICAgICAgICAgICAgICAob3Jn Lm9tZy5DT1JCQV8yXzMucG9ydGFibGUuSW5wdXRTdHJlYW0pIG91dC5jcmVh dGVfaW5wdXRfc3RyZWFtKCk7DQorICAgICAgICAgICAgU2VyaWFsaXphYmxl IHYgPSBmYWN0b3J5LnJlYWRfdmFsdWUoaW4pOw0KKw0KKyAgICAgICAgICAg IEFueSBnID0gY3JlYXRlQW55KCk7DQorICAgICAgICAgICAgZy50eXBlKG9m ZmljaWFsX3R5cGUpOw0KKyAgICAgICAgICAgIGcuaW5zZXJ0X1ZhbHVlKHYs IG9mZmljaWFsX3R5cGUpOw0KKw0KKyAgICAgICAgICAgIHJldHVybiBnOw0K KyAgICAgICAgICB9DQorICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpDQor ICAgICAgICAgIHsNCisgICAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3Rl ZChlKTsNCisgICAgICAgICAgfQ0KKyAgICAgIH0NCisgIH0NCisNCisgIC8q KiBAaW5oZXJpdERvYyAqLw0KKyAgcHVibGljIHZvaWQgYXNzaWduKER5bkFu eSBmcm9tKSB0aHJvd3MgVHlwZU1pc21hdGNoDQorICB7DQorICAgIGNoZWNr VHlwZShvZmZpY2lhbF90eXBlLCBmcm9tLnR5cGUoKSk7DQorDQorICAgIGlm IChmcm9tIGluc3RhbmNlb2YgRHluVmFsdWUpDQorICAgICAgew0KKyAgICAg ICAgRHluVmFsdWUgb3RoZXIgPSAoRHluVmFsdWUpIGZyb207DQorICAgICAg ICBpZiAob3RoZXIuaXNfbnVsbCgpKQ0KKyAgICAgICAgICBzZXRfdG9fbnVs bCgpOw0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgICB7DQorICAgICAgICAg ICAgc2V0X3RvX3ZhbHVlKCk7DQorICAgICAgICAgICAgdHJ5DQorICAgICAg ICAgICAgICB7DQorICAgICAgICAgICAgICAgIER5blZhbHVlT3BlcmF0aW9u cyBzcmMgPSAoRHluVmFsdWVPcGVyYXRpb25zKSBmcm9tOw0KKyAgICAgICAg ICAgICAgICBzZXRfbWVtYmVyc19hc19keW5fYW55KHNyYy5nZXRfbWVtYmVy c19hc19keW5fYW55KCkpOw0KKyAgICAgICAgICAgICAgfQ0KKyAgICAgICAg ICAgIGNhdGNoIChJbnZhbGlkVmFsdWUgZSkNCisgICAgICAgICAgICAgIHsN CisgICAgICAgICAgICAgICAgVHlwZU1pc21hdGNoIHQgPSBuZXcgVHlwZU1p c21hdGNoKCJJbnZhbGlkIHZhbHVlIik7DQorICAgICAgICAgICAgICAgIHQu aW5pdENhdXNlKGUpOw0KKyAgICAgICAgICAgICAgICB0aHJvdyB0Ow0KKyAg ICAgICAgICAgICAgfQ0KKyAgICAgICAgICB9DQorICAgICAgfQ0KKyAgICBl bHNlDQorICAgICAgdGhyb3cgbmV3IFR5cGVNaXNtYXRjaCgiTm90IGEgRHlu VmFsdWUiKTsNCisgIH0NCisNCisgIC8qKg0KKyAgICogR2V0IHRoZSBudW1i ZXIgb2YgY29tcG9uZW50cy4NCisgICAqLw0KKyAgcHVibGljIGludCBjb21w b25lbnRfY291bnQoKQ0KKyAgew0KKyAgICByZXR1cm4gaXNOdWxsID8gMCA6 IHJlY29yZF9jb21wb25lbnRfY291bnQoKTsgLy8gR0NKIExPQ0FMIGJ1ZyAj MjQ5MzgNCisgIH0NCisNCisgIC8qKiB7QGluaGVyaXREb2N9ICovDQorICBw dWJsaWMgU2VyaWFsaXphYmxlIGdldF92YWwoKSB0aHJvd3MgVHlwZU1pc21h dGNoLCBJbnZhbGlkVmFsdWUNCisgIHsNCisgICAgcmV0dXJuIHRvX2FueSgp LmV4dHJhY3RfVmFsdWUoKTsNCisgIH0NCisNCisgIC8qKiB7QGluaGVyaXRE b2N9ICovDQorICBwdWJsaWMgdm9pZCBpbnNlcnRfdmFsKFNlcmlhbGl6YWJs ZSBhX3gpIHRocm93cyBJbnZhbGlkVmFsdWUsIFR5cGVNaXNtYXRjaA0KKyAg ew0KKyAgICBBbnkgYSA9IHRvX2FueSgpOw0KKyAgICBhLmluc2VydF9WYWx1 ZShhX3gpOw0KKyAgICBmcm9tX2FueShhKTsNCisgICAgdmFsdWVDaGFuZ2Vk KCk7DQorICB9DQorfQ0KSW5kZXg6IGdudS9DT1JCQS9EeW5Bbi9SZWNvcmRB bnkuamF2YQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdudS9DT1JC QS9EeW5Bbi9SZWNvcmRBbnkuamF2YQkocmV2aXNpb24gMCkNCisrKyBnbnUv Q09SQkEvRHluQW4vUmVjb3JkQW55LmphdmEJKHJldmlzaW9uIDApDQpAQCAt MCwwICsxLDQxNiBAQA0KKy8qIFJlY29yZEFueS5qYXZhIC0tDQorICAgQ29w eXJpZ2h0IChDKSAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j Lg0KKw0KK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBDbGFzc3BhdGguDQor DQorR05VIENsYXNzcGF0aCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQoraXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkNCit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pDQorYW55IGxhdGVy IHZlcnNpb24uDQorDQorR05VIENsYXNzcGF0aCBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCitXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mDQorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUNCitHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorDQorWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UNCithbG9uZyB3aXRoIEdOVSBDbGFzc3BhdGg7IHNlZSB0 aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUNCitGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUENCiswMjExMC0xMzAxIFVTQS4N CisNCitMaW5raW5nIHRoaXMgbGlicmFyeSBzdGF0aWNhbGx5IG9yIGR5bmFt aWNhbGx5IHdpdGggb3RoZXIgbW9kdWxlcyBpcw0KK21ha2luZyBhIGNvbWJp bmVkIHdvcmsgYmFzZWQgb24gdGhpcyBsaWJyYXJ5LiAgVGh1cywgdGhlIHRl cm1zIGFuZA0KK2NvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGNvdmVyIHRoZSB3aG9sZQ0KK2NvbWJpbmF0aW9uLg0KKw0K K0FzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSBjb3B5cmlnaHQgaG9sZGVy cyBvZiB0aGlzIGxpYnJhcnkgZ2l2ZSB5b3UNCitwZXJtaXNzaW9uIHRvIGxp bmsgdGhpcyBsaWJyYXJ5IHdpdGggaW5kZXBlbmRlbnQgbW9kdWxlcyB0byBw cm9kdWNlIGFuDQorZXhlY3V0YWJsZSwgcmVnYXJkbGVzcyBvZiB0aGUgbGlj ZW5zZSB0ZXJtcyBvZiB0aGVzZSBpbmRlcGVuZGVudA0KK21vZHVsZXMsIGFu ZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSByZXN1bHRpbmcgZXhlY3V0 YWJsZSB1bmRlcg0KK3Rlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZCB0 aGF0IHlvdSBhbHNvIG1lZXQsIGZvciBlYWNoIGxpbmtlZA0KK2luZGVwZW5k ZW50IG1vZHVsZSwgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBs aWNlbnNlIG9mIHRoYXQNCittb2R1bGUuICBBbiBpbmRlcGVuZGVudCBtb2R1 bGUgaXMgYSBtb2R1bGUgd2hpY2ggaXMgbm90IGRlcml2ZWQgZnJvbQ0KK29y IGJhc2VkIG9uIHRoaXMgbGlicmFyeS4gIElmIHlvdSBtb2RpZnkgdGhpcyBs aWJyYXJ5LCB5b3UgbWF5IGV4dGVuZA0KK3RoaXMgZXhjZXB0aW9uIHRvIHlv dXIgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgYnV0IHlvdSBhcmUgbm90DQor b2JsaWdhdGVkIHRvIGRvIHNvLiAgSWYgeW91IGRvIG5vdCB3aXNoIHRvIGRv IHNvLCBkZWxldGUgdGhpcw0KK2V4Y2VwdGlvbiBzdGF0ZW1lbnQgZnJvbSB5 b3VyIHZlcnNpb24uICovDQorDQorDQorcGFja2FnZSBnbnUuQ09SQkEuRHlu QW47DQorDQoraW1wb3J0IGdudS5DT1JCQS5VbmV4cGVjdGVkOw0KK2ltcG9y dCBnbnUuQ09SQkEuSG9sZGVyTG9jYXRvcjsNCisNCitpbXBvcnQgb3JnLm9t Zy5DT1JCQS5Bbnk7DQoraW1wb3J0IG9yZy5vbWcuQ09SQkEuT1JCOw0KK2lt cG9ydCBvcmcub21nLkNPUkJBLlRDS2luZDsNCitpbXBvcnQgb3JnLm9tZy5D T1JCQS5UeXBlQ29kZTsNCitpbXBvcnQgb3JnLm9tZy5DT1JCQS5UeXBlQ29k ZVBhY2thZ2UuQmFkS2luZDsNCitpbXBvcnQgb3JnLm9tZy5DT1JCQS5UeXBl Q29kZVBhY2thZ2UuQm91bmRzOw0KK2ltcG9ydCBvcmcub21nLkNPUkJBLnBv cnRhYmxlLlN0cmVhbWFibGU7DQoraW1wb3J0IG9yZy5vbWcuRHluYW1pY0Fu eS5EeW5Bbnk7DQoraW1wb3J0IG9yZy5vbWcuRHluYW1pY0FueS5EeW5BbnlQ YWNrYWdlLkludmFsaWRWYWx1ZTsNCitpbXBvcnQgb3JnLm9tZy5EeW5hbWlj QW55LkR5bkFueVBhY2thZ2UuVHlwZU1pc21hdGNoOw0KK2ltcG9ydCBvcmcu b21nLkR5bmFtaWNBbnkuRHluU3RydWN0Ow0KK2ltcG9ydCBvcmcub21nLkR5 bmFtaWNBbnkuRHluVmFsdWVDb21tb25PcGVyYXRpb25zOw0KK2ltcG9ydCBv cmcub21nLkR5bmFtaWNBbnkuTmFtZUR5bkFueVBhaXI7DQoraW1wb3J0IG9y Zy5vbWcuRHluYW1pY0FueS5OYW1lVmFsdWVQYWlyOw0KKw0KK2ltcG9ydCBq YXZhLmlvLlNlcmlhbGl6YWJsZTsNCisNCitpbXBvcnQgamF2YS5sYW5nLnJl ZmxlY3QuRmllbGQ7DQorDQorLyoqDQorICogQSBzaGFyZWQgYmFzZSBmb3Ig Ym90aCBkeW5hbWljIHN0cnVjdHVyZSBhbiBkeW5hbWljIHZhbHVlIGZpbmFs X3R5cGUuDQorICoNCisgKiBAYXV0aG9yIEF1ZHJpdXMgTWVza2F1c2thcywg TGl0aHVhbmlhIChBdWRyaXVzQUBCaW9pbmZvcm1hdGljcy5vcmcpDQorICov DQorcHVibGljIGFic3RyYWN0IGNsYXNzIFJlY29yZEFueQ0KKyAgZXh0ZW5k cyBEaXZpZGVhYmxlQW55DQorICBpbXBsZW1lbnRzIER5bkFueSwgU2VyaWFs aXphYmxlDQorew0KKyAgLyoqDQorICAgKiBVc2Ugc2VyaWFsVmVyc2lvblVJ RCBmb3IgaW50ZXJvcGVyYWJpbGl0eS4NCisgICAqLw0KKyAgcHJpdmF0ZSBz dGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMTsNCisgIFN0 cmluZ1tdIGZOYW1lczsNCisNCisgIC8qKg0KKyAgICogQ3JlYXRlcyB0aGUg c3RydWN0dXJlIHdpdGggdGhlIGdpdmVuIHR5cGVjb2RlLg0KKyAgICoNCisg ICAqIEBwYXJhbSBmaWVsZHMgVGhlIER5bkFueSdzLCByZXByZXNlbnRpbmcg dGhlIGZpZWxkcyBvZiB0aGUgc3RydWN0dXJlLg0KKyAgICovDQorICBwdWJs aWMgUmVjb3JkQW55KFR5cGVDb2RlIG9UeXBlLCBUeXBlQ29kZSBhVHlwZSwN CisgICAgICAgICAgICAgICAgICAgICAgICBnbnVEeW5BbnlGYWN0b3J5IGFG YWN0b3J5LCBPUkIgYW5PcmINCisgICAgICAgICAgICAgICAgICAgICAgICkN CisgIHsNCisgICAgc3VwZXIob1R5cGUsIGFUeXBlLCBhRmFjdG9yeSwgYW5P cmIpOw0KKyAgfQ0KKw0KKyAgLyoqIEBpbmhlcml0RG9jICovDQorICBwdWJs aWMgVENLaW5kIGN1cnJlbnRfbWVtYmVyX2tpbmQoKQ0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGhyb3dzIFR5cGVNaXNtYXRjaCwgSW52YWxp ZFZhbHVlDQorICB7DQorICAgIGlmIChhcnJheS5sZW5ndGggPT0gMCkNCisg ICAgICB0aHJvdyBuZXcgVHlwZU1pc21hdGNoKEVNUFRZKTsNCisgICAgdHJ5 DQorICAgICAgew0KKyAgICAgICAgcmV0dXJuIGZpbmFsX3R5cGUubWVtYmVy X3R5cGUocG9zKS5raW5kKCk7DQorICAgICAgfQ0KKyAgICBjYXRjaCAoQmFk S2luZCBlKQ0KKyAgICAgIHsNCisgICAgICAgIFR5cGVNaXNtYXRjaCB0ID0g bmV3IFR5cGVNaXNtYXRjaCgpOw0KKyAgICAgICAgdC5pbml0Q2F1c2UoZSk7 DQorICAgICAgICB0aHJvdyB0Ow0KKyAgICAgIH0NCisgICAgY2F0Y2ggKEJv dW5kcyBlKQ0KKyAgICAgIHsNCisgICAgICAgIEludmFsaWRWYWx1ZSB0ID0g bmV3IEludmFsaWRWYWx1ZSgpOw0KKyAgICAgICAgdC5pbml0Q2F1c2UoZSk7 DQorICAgICAgICB0aHJvdyB0Ow0KKyAgICAgIH0NCisgIH0NCisNCisgIC8q KiBAaW5oZXJpdERvYyAqLw0KKyAgcHVibGljIFN0cmluZyBjdXJyZW50X21l bWJlcl9uYW1lKCkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo cm93cyBUeXBlTWlzbWF0Y2gsIEludmFsaWRWYWx1ZQ0KKyAgew0KKyAgICBp ZiAoYXJyYXkubGVuZ3RoID09IDApDQorICAgICAgdGhyb3cgbmV3IFR5cGVN aXNtYXRjaChFTVBUWSk7DQorICAgIHRyeQ0KKyAgICAgIHsNCisgICAgICAg IHJldHVybiBmaW5hbF90eXBlLm1lbWJlcl9uYW1lKHBvcyk7DQorICAgICAg fQ0KKyAgICBjYXRjaCAoQmFkS2luZCBlKQ0KKyAgICAgIHsNCisgICAgICAg IFR5cGVNaXNtYXRjaCB0ID0gbmV3IFR5cGVNaXNtYXRjaCgpOw0KKyAgICAg ICAgdC5pbml0Q2F1c2UoZSk7DQorICAgICAgICB0aHJvdyB0Ow0KKyAgICAg IH0NCisgICAgY2F0Y2ggKEJvdW5kcyBlKQ0KKyAgICAgIHsNCisgICAgICAg IEludmFsaWRWYWx1ZSB0ID0gbmV3IEludmFsaWRWYWx1ZSgpOw0KKyAgICAg ICAgdC5pbml0Q2F1c2UoZSk7DQorICAgICAgICB0aHJvdyB0Ow0KKyAgICAg IH0NCisgIH0NCisNCisgIC8qKg0KKyAgICogR2V0IGNvbnRlbnQgb2YgdGhl IHN0cnVjdHVyZS4gVGhpcyBtZXRob2QgbXVzdCBiZSBkZWZpbmVkIG9uIGEg ZGlmZmVyZW50DQorICAgKiBuYW1lIGJlY2F1c2UgZ2V0X21lbWJlcnNfYXNf ZHluX2FueSgpIHRocm93cyBleGNlcHRpb24gb25seSBpbiBzb21lIG9mIHRo ZQ0KKyAgICogc3VwcG9ydGVkIGludGVyZmFjZXMuDQorICAgKi8NCisgIHB1 YmxpYyBOYW1lRHluQW55UGFpcltdIGdudV9nZXRfbWVtYmVyc19hc19keW5f YW55KCkNCisgIHsNCisgICAgTmFtZUR5bkFueVBhaXJbXSByID0gbmV3IE5h bWVEeW5BbnlQYWlyWyBhcnJheS5sZW5ndGggXTsNCisgICAgZm9yIChpbnQg aSA9IDA7IGkgPCByLmxlbmd0aDsgaSsrKQ0KKyAgICAgIHsNCisgICAgICAg IHRyeQ0KKyAgICAgICAgICB7DQorICAgICAgICAgICAgciBbIGkgXSA9IG5l dyBOYW1lRHluQW55UGFpcihmTmFtZXMgWyBpIF0sIGFycmF5IFsgaSBdKTsN CisgICAgICAgICAgfQ0KKyAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkN CisgICAgICAgICAgew0KKyAgICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVj dGVkKGV4KTsNCisgICAgICAgICAgfQ0KKyAgICAgIH0NCisgICAgcmV0dXJu IHI7DQorICB9DQorDQorICAvKioNCisgICAqIEdldCBjb250ZW50IG9mIHRo ZSBzdHJ1Y3R1cmUuIFRoaXMgbWV0aG9kIG11c3QgYmUgZGVmaW5lZCBvbiBh IGRpZmZlcmVudA0KKyAgICogbmFtZSBiZWNhdXNlIGdldF9tZW1iZXJzX2Fz X2R5bl9hbnkoKSB0aHJvd3MgZXhjZXB0aW9uIG9ubHkgaW4gc29tZSBvZiB0 aGUNCisgICAqIHN1cHBvcnRlZCBpbnRlcmZhY2VzLg0KKyAgICovDQorICBw dWJsaWMgTmFtZVZhbHVlUGFpcltdIGdudV9nZXRfbWVtYmVycygpDQorICB7 DQorICAgIE5hbWVWYWx1ZVBhaXJbXSByID0gbmV3IE5hbWVWYWx1ZVBhaXJb IGFycmF5Lmxlbmd0aCBdOw0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHIu bGVuZ3RoOyBpKyspDQorICAgICAgew0KKyAgICAgICAgdHJ5DQorICAgICAg ICAgIHsNCisgICAgICAgICAgICByIFsgaSBdID0gbmV3IE5hbWVWYWx1ZVBh aXIoZk5hbWVzIFsgaSBdLCBhcnJheSBbIGkgXS50b19hbnkoKSk7DQorICAg ICAgICAgIH0NCisgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpDQorICAg ICAgICAgIHsNCisgICAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZChl eCk7DQorICAgICAgICAgIH0NCisgICAgICB9DQorICAgIHJldHVybiByOw0K KyAgfQ0KKw0KKyAgLyoqDQorICAgKiBTZXQgbWVtYmVycyBmcm9tIHRoZSBw cm92aWRlZCBhcnJheS4NCisgICAqLw0KKyAgcHVibGljIHZvaWQgc2V0X21l bWJlcnNfYXNfZHluX2FueShOYW1lRHluQW55UGFpcltdIHZhbHVlKQ0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBUeXBlTWlzbWF0 Y2gsIEludmFsaWRWYWx1ZQ0KKyAgew0KKyAgICBpZiAodmFsdWUubGVuZ3Ro ICE9IGFycmF5Lmxlbmd0aCkNCisgICAgICB0aHJvdyBuZXcgSW52YWxpZFZh bHVlKHNpemVNaXNtYXRjaChhcnJheS5sZW5ndGgsIHZhbHVlLmxlbmd0aCkp Ow0KKw0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsg aSsrKQ0KKyAgICAgIHsNCisgICAgICAgIER5bkFueSBkeW5BbnkgPSB2YWx1 ZSBbIGkgXS52YWx1ZTsNCisgICAgICAgIGNoZWNrVHlwZShkeW5BbnkudHlw ZSgpLCBpKTsNCisgICAgICAgIGNoZWNrTmFtZSh2YWx1ZSBbIGkgXS5pZCwg aSk7DQorDQorICAgICAgICBhcnJheSBbIGkgXSA9IGR5bkFueTsNCisgICAg ICB9DQorICAgIHBvcyA9IDA7DQorICB9DQorDQorICAvKioNCisgICAqIENo ZWNrIHRoZSBuYW1lIGF0IHRoZSBnaXZlbiBwb3NpdGlvbiAoIiIgbWF0Y2hl cyBldmVyeXRoaW5nKS4NCisgICAqLw0KKyAgcHJpdmF0ZSB2b2lkIGNoZWNr TmFtZShTdHJpbmcgeE5hbWUsIGludCBpKQ0KKyAgICAgICAgICAgICAgICAg IHRocm93cyBUeXBlTWlzbWF0Y2gNCisgIHsNCisgICAgaWYgKHhOYW1lLmxl bmd0aCgpID4gMCAmJiBmTmFtZXMgWyBpIF0ubGVuZ3RoKCkgPiAwKQ0KKyAg ICAgIGlmICgheE5hbWUuZXF1YWxzKGZOYW1lcyBbIGkgXSkpDQorICAgICAg ICB0aHJvdyBuZXcgVHlwZU1pc21hdGNoKCJGaWVsZCBuYW1lIG1pc21hdGNo ICIgKyB4TmFtZSArICIgZXhwZWN0ZWQgIiArDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZOYW1lcyBbIGkgXQ0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7DQorICB9DQorDQorICAvKioNCisgICAqIENo ZWNrIHRoZSB0eXBlIGF0IHRoZSBnaXZlbiBwb3NpdGlvbi4NCisgICAqLw0K KyAgcHJpdmF0ZSB2b2lkIGNoZWNrVHlwZShUeXBlQ29kZSB0LCBpbnQgaSkN CisgICAgICAgICAgICAgICAgICB0aHJvd3MgVHlwZU1pc21hdGNoDQorICB7 DQorICAgIGlmICghYXJyYXkgWyBpIF0udHlwZSgpLmVxdWFsKHQpKQ0KKyAg ICAgIHRocm93IG5ldyBUeXBlTWlzbWF0Y2godHlwZU1pc21hdGNoKGFycmF5 IFsgaSBdLnR5cGUoKSwgdCkgKyAiIGZpZWxkICIgKw0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaQ0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOw0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBTZXQgbWVtYmVycyBm cm9tIHRoZSBwcm92aWRlZCBhcnJheS4NCisgICAqLw0KKyAgcHVibGljIHZv aWQgc2V0X21lbWJlcnMoTmFtZVZhbHVlUGFpcltdIHZhbHVlKQ0KKyAgICAg ICAgICAgICAgICAgICB0aHJvd3MgVHlwZU1pc21hdGNoLCBJbnZhbGlkVmFs dWUNCisgIHsNCisgICAgaWYgKHZhbHVlLmxlbmd0aCAhPSBhcnJheS5sZW5n dGgpDQorICAgICAgdGhyb3cgbmV3IEludmFsaWRWYWx1ZShzaXplTWlzbWF0 Y2goYXJyYXkubGVuZ3RoLCB2YWx1ZS5sZW5ndGgpKTsNCisNCisgICAgZm9y IChpbnQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykNCisgICAgICB7 DQorICAgICAgICBBbnkgYW55ID0gdmFsdWUgWyBpIF0udmFsdWU7DQorICAg ICAgICBjaGVja1R5cGUoYW55LnR5cGUoKSwgaSk7DQorICAgICAgICBjaGVj a05hbWUodmFsdWUgWyBpIF0uaWQsIGkpOw0KKw0KKyAgICAgICAgYXJyYXkg WyBpIF0uZnJvbV9hbnkoYW55KTsNCisgICAgICB9DQorICAgIHBvcyA9IDA7 DQorICB9DQorDQorICAvKiogQGluaGVyaXREb2MgKi8NCisgIHB1YmxpYyB2 b2lkIGFzc2lnbihEeW5BbnkgZnJvbSkNCisgICAgICAgICAgICAgIHRocm93 cyBUeXBlTWlzbWF0Y2gNCisgIHsNCisgICAgY2hlY2tUeXBlKG9mZmljaWFs X3R5cGUsIGZyb20udHlwZSgpKTsNCisgICAgaWYgKGZyb20gaW5zdGFuY2Vv ZiBEeW5TdHJ1Y3QpDQorICAgICAgew0KKyAgICAgICAgdHJ5DQorICAgICAg ICAgIHsNCisgICAgICAgICAgICBzZXRfbWVtYmVyc19hc19keW5fYW55KCgo RHluU3RydWN0KSBmcm9tKS5nZXRfbWVtYmVyc19hc19keW5fYW55KCkpOw0K KyAgICAgICAgICB9DQorICAgICAgICBjYXRjaCAoSW52YWxpZFZhbHVlIGUp DQorICAgICAgICAgIHsNCisgICAgICAgICAgICBUeXBlTWlzbWF0Y2ggdCA9 IG5ldyBUeXBlTWlzbWF0Y2goIkludmFsaWQgdmFsdWUiKTsNCisgICAgICAg ICAgICB0LmluaXRDYXVzZShlKTsNCisgICAgICAgICAgICB0aHJvdyB0Ow0K KyAgICAgICAgICB9DQorICAgICAgfQ0KKyAgICBlbHNlDQorICAgICAgdGhy b3cgbmV3IFR5cGVNaXNtYXRjaCgiTm90IGEgRHluU3RydWN0Iik7DQorICB9 DQorDQorICAvKioNCisgICAqIENyZWF0ZSBhIGNvcHkuDQorICAgKi8NCisg IHB1YmxpYyBEeW5BbnkgY29weSgpDQorICB7DQorICAgIER5bkFueVtdIGMg PSBuZXcgRHluQW55WyBhcnJheS5sZW5ndGggXTsNCisgICAgZm9yIChpbnQg aSA9IDA7IGkgPCBjLmxlbmd0aDsgaSsrKQ0KKyAgICAgIHsNCisgICAgICAg IGMgWyBpIF0gPSBhcnJheSBbIGkgXS5jb3B5KCk7DQorICAgICAgfQ0KKw0K KyAgICBSZWNvcmRBbnkgZCA9IG5ld0luc3RhbmNlKG9mZmljaWFsX3R5cGUs IGZpbmFsX3R5cGUsIGZhY3RvcnksIG9yYik7DQorICAgIGQuYXJyYXkgPSBj Ow0KKyAgICByZXR1cm4gZDsNCisgIH0NCisNCisgIC8qKg0KKyAgICogQ3Jl YXRlIGEgbmV3IGluc3RhbmNlIHdoZW4gY29weWluZy4NCisgICAqLw0KKyAg cHJvdGVjdGVkIGFic3RyYWN0IFJlY29yZEFueSBuZXdJbnN0YW5jZShUeXBl Q29kZSBvVHlwZSwgVHlwZUNvZGUgYVR5cGUsDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ251RHluQW55RmFj dG9yeSBhRmFjdG9yeSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPUkIgYW5PcmINCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQorDQorICAv KioNCisgICAqIERvbmUgdmlhIHJlZmxlY3Rpb24uDQorICAgKi8NCisgIHB1 YmxpYyBBbnkgdG9fYW55KCkNCisgIHsNCisgICAgdHJ5DQorICAgICAgew0K KyAgICAgICAgU3RyZWFtYWJsZSBzSG9sZGVyID0gSG9sZGVyTG9jYXRvci5j cmVhdGVIb2xkZXIob2ZmaWNpYWxfdHlwZSk7DQorDQorICAgICAgICBDbGFz cyBzSG9sZGVyQ2xhc3MgPSBzSG9sZGVyLmdldENsYXNzKCk7DQorICAgICAg ICBGaWVsZCBzSG9sZGVyVmFsdWUgPSBzSG9sZGVyQ2xhc3MuZ2V0RmllbGQo InZhbHVlIik7DQorICAgICAgICBDbGFzcyBzQ2xhc3MgPSBzSG9sZGVyVmFs dWUuZ2V0VHlwZSgpOw0KKw0KKyAgICAgICAgT2JqZWN0IHN0cnVjdHVyZSA9 IHNDbGFzcy5uZXdJbnN0YW5jZSgpOw0KKyAgICAgICAgT2JqZWN0IG1lbWJl cjsNCisgICAgICAgIEFueSBhbTsNCisgICAgICAgIEZpZWxkIHZyZWFkOw0K KyAgICAgICAgRmllbGQgdndyaXRlOw0KKyAgICAgICAgU3RyZWFtYWJsZSBt ZW1iZXJIb2xkZXI7DQorDQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8 IGFycmF5Lmxlbmd0aDsgaSsrKQ0KKyAgICAgICAgICB7DQorICAgICAgICAg ICAgYW0gPSBhcnJheSBbIGkgXS50b19hbnkoKTsNCisgICAgICAgICAgICBt ZW1iZXJIb2xkZXIgPSBhbS5leHRyYWN0X1N0cmVhbWFibGUoKTsNCisgICAg ICAgICAgICB2d3JpdGUgPSBzdHJ1Y3R1cmUuZ2V0Q2xhc3MoKS5nZXRGaWVs ZChmaW5hbF90eXBlLm1lbWJlcl9uYW1lKGkpKTsNCisgICAgICAgICAgICB2 cmVhZCA9IG1lbWJlckhvbGRlci5nZXRDbGFzcygpLmdldEZpZWxkKCJ2YWx1 ZSIpOw0KKyAgICAgICAgICAgIG1lbWJlciA9IHZyZWFkLmdldChtZW1iZXJI b2xkZXIpOw0KKyAgICAgICAgICAgIHZ3cml0ZS5zZXQoc3RydWN0dXJlLCBt ZW1iZXIpOw0KKyAgICAgICAgICB9DQorDQorICAgICAgICBBbnkgZyA9IGNy ZWF0ZUFueSgpOw0KKyAgICAgICAgc0hvbGRlclZhbHVlLnNldChzSG9sZGVy LCBzdHJ1Y3R1cmUpOw0KKyAgICAgICAgZy5pbnNlcnRfU3RyZWFtYWJsZShz SG9sZGVyKTsNCisgICAgICAgIGcudHlwZShvZmZpY2lhbF90eXBlKTsNCisg ICAgICAgIHJldHVybiBnOw0KKyAgICAgIH0NCisgICAgY2F0Y2ggKEV4Y2Vw dGlvbiBlKQ0KKyAgICAgIHsNCisgICAgICAgIHRocm93IG5ldyBVbmV4cGVj dGVkKGUpOw0KKyAgICAgIH0NCisgIH0NCisNCisgIC8qKg0KKyAgICogRG9u ZSB2aWEgcmVmbGVjdGlvbi4NCisgICAqLw0KKyAgcHVibGljIHZvaWQgZnJv bV9hbnkoQW55IGFuX2FueSkNCisgICAgICAgICAgICAgICAgdGhyb3dzIFR5 cGVNaXNtYXRjaCwgSW52YWxpZFZhbHVlDQorICB7DQorICAgIGNoZWNrVHlw ZShvZmZpY2lhbF90eXBlLCBhbl9hbnkudHlwZSgpKTsNCisgICAgdHJ5DQor ICAgICAgew0KKyAgICAgICAgU3RyZWFtYWJsZSBzID0gYW5fYW55LmV4dHJh Y3RfU3RyZWFtYWJsZSgpOw0KKyAgICAgICAgaWYgKHMgPT0gbnVsbCkNCisg ICAgICAgICAgew0KKyAgICAgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2Yg RHluVmFsdWVDb21tb25PcGVyYXRpb25zKQ0KKyAgICAgICAgICAgICAgew0K KyAgICAgICAgICAgICAgICAoKER5blZhbHVlQ29tbW9uT3BlcmF0aW9ucykg dGhpcykuc2V0X3RvX251bGwoKTsNCisgICAgICAgICAgICAgICAgcmV0dXJu Ow0KKyAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAg ICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkVmFsdWUoSVNOVUxMKTsNCisg ICAgICAgICAgfQ0KKw0KKyAgICAgICAgT2JqZWN0IHN0cnVjdHVyZSA9IHMu Z2V0Q2xhc3MoKS5nZXRGaWVsZCgidmFsdWUiKS5nZXQocyk7DQorICAgICAg ICBpZiAoc3RydWN0dXJlID09IG51bGwgJiYgKHRoaXMgaW5zdGFuY2VvZiBE eW5WYWx1ZUNvbW1vbk9wZXJhdGlvbnMpKQ0KKyAgICAgICAgICB7DQorICAg ICAgICAgICAgKChEeW5WYWx1ZUNvbW1vbk9wZXJhdGlvbnMpIHRoaXMpLnNl dF90b19udWxsKCk7DQorICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAg ICB9DQorDQorICAgICAgICBBbnkgbWVtYmVyOw0KKyAgICAgICAgU3RyZWFt YWJsZSBob2xkZXI7DQorICAgICAgICBPYmplY3QgZmllbGQ7DQorICAgICAg ICBUeXBlQ29kZSBmVHlwZTsNCisgICAgICAgIEZpZWxkIGZGaWVsZDsNCisN CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBp KyspDQorICAgICAgICAgIHsNCisgICAgICAgICAgICBmRmllbGQgPSBzdHJ1 Y3R1cmUuZ2V0Q2xhc3MoKS5nZXRGaWVsZChmTmFtZXMgWyBpIF0pOw0KKyAg ICAgICAgICAgIGZpZWxkID0gZkZpZWxkLmdldChzdHJ1Y3R1cmUpOw0KKyAg ICAgICAgICAgIGZUeXBlID0gYXJyYXkgWyBpIF0udHlwZSgpOw0KKyAgICAg ICAgICAgIGhvbGRlciA9IEhvbGRlckxvY2F0b3IuY3JlYXRlSG9sZGVyKGZU eXBlKTsNCisNCisgICAgICAgICAgICBtZW1iZXIgPSBjcmVhdGVBbnkoKTsN CisgICAgICAgICAgICBob2xkZXIuZ2V0Q2xhc3MoKS5nZXRGaWVsZCgidmFs dWUiKS5zZXQoaG9sZGVyLCBmaWVsZCk7DQorICAgICAgICAgICAgbWVtYmVy Lmluc2VydF9TdHJlYW1hYmxlKGhvbGRlcik7DQorICAgICAgICAgICAgbWVt YmVyLnR5cGUoZlR5cGUpOw0KKw0KKyAgICAgICAgICAgIGFycmF5IFsgaSBd LmZyb21fYW55KG1lbWJlcik7DQorICAgICAgICAgIH0NCisNCisgICAgICAg IGlmICh0aGlzIGluc3RhbmNlb2YgRHluVmFsdWVDb21tb25PcGVyYXRpb25z KQ0KKyAgICAgICAgICAoKER5blZhbHVlQ29tbW9uT3BlcmF0aW9ucykgdGhp cykuc2V0X3RvX3ZhbHVlKCk7DQorICAgICAgfQ0KKyAgICBjYXRjaCAoSW52 YWxpZFZhbHVlIHYpDQorICAgICAgew0KKyAgICAgICAgdGhyb3cgdjsNCisg ICAgICB9DQorICAgIGNhdGNoIChOb1N1Y2hGaWVsZEV4Y2VwdGlvbiBleCkN CisgICAgICB7DQorICAgICAgICBUeXBlTWlzbWF0Y2ggdiA9DQorICAgICAg ICAgIG5ldyBUeXBlTWlzbWF0Y2goImhvbGRlciB2YWx1ZSBkb2VzIG5vdCBt YXRjaCB0eXBlY29kZSIpOw0KKyAgICAgICAgdi5pbml0Q2F1c2UoZXgpOw0K KyAgICAgICAgdGhyb3cgdjsNCisgICAgICB9DQorICAgIGNhdGNoIChFeGNl cHRpb24gZXgpDQorICAgICAgew0KKyAgICAgICAgVHlwZU1pc21hdGNoIHQg PSBuZXcgVHlwZU1pc21hdGNoKCk7DQorICAgICAgICB0LmluaXRDYXVzZShl eCk7DQorICAgICAgICB0aHJvdyB0Ow0KKyAgICAgIH0NCisgIH0NCisNCisv LyBHQ0ogTE9DQUwgLSBwYWNrYWdlIHByaXZhdGUgZGVsZWdhdGVzIHRvIHdv cmsgYXJvdW5kIGJ1ZyBpbiBnbnVEeW5WYWx1ZS4NCisgIGludCByZWNvcmRf Y29tcG9uZW50X2NvdW50KCkNCisgIHsNCisgICAgcmV0dXJuIGNvbXBvbmVu dF9jb3VudCgpOw0KKyAgfQ0KKw0KKyAgYm9vbGVhbiByZWNvcmRfZXF1YWwo RHluQW55IG8pDQorICB7DQorICAgIHJldHVybiBlcXVhbChvKTsNCisgIH0N Cit9DQpJbmRleDogc3RhbmRhcmQub21pdC5pbg0KPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQ0KLS0tIHN0YW5kYXJkLm9taXQuaW4JKHJldmlzaW9uIDEwNzE5 NSkNCisrKyBzdGFuZGFyZC5vbWl0LmluCSh3b3JraW5nIGNvcHkpDQpAQCAt MywxMCArMyw2IEBADQogamF2YS9sYW5nL1Bvc2l4UHJvY2Vzcy5qYXZhDQog Z251L2phdmEvYXd0L3BlZXIvZ3RrL1Rlc3QuamF2YQ0KIGdudS9qYXZhL2F3 dC9wZWVyL2d0ay9UZXN0QVdULmphdmENCi1qYXZheC9ybWkNCi1vcmcvb21n DQotZ251L0NPUkJBDQotZ251L2phdmF4L3JtaQ0KIGdudS9qYXZhL25pby9j aGFyc2V0L2ljb252DQogamF2YS91dGlsL3ppcC9EZWZsYXRlckNvbnN0YW50 cy5qYXZhDQogamF2YS91dGlsL3ppcC9EZWZsYXRlckVuZ2luZS5qYXZhDQo= --=-4FdRc4iy/E2Q++/U8BIy-- --=-vb2cKU4Iwwo3dldWLhb7 Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part Content-length: 189 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2 (GNU/Linux) iD8DBQBDfmwBxVhZCJWr9QwRAnOZAJwIx1On96YxEVySqjbhCXWZpg5dCACfbOla dCtrvjAgzS6AOfw6Pqpz/tU= =j6Cn -----END PGP SIGNATURE----- --=-vb2cKU4Iwwo3dldWLhb7--