From ant-user-return-18336-qmlist-jakarta-archive-ant-user=jakarta.apache.org@jakarta.apache.org Mon Mar 11 09:19:20 2002 Return-Path: Delivered-To: apmail-jakarta-ant-user-archive@apache.org Received: (qmail 81365 invoked from network); 11 Mar 2002 09:19:16 -0000 Received: from unknown (HELO nagoya.betaversion.org) (192.18.49.131) by daedalus.apache.org with SMTP; 11 Mar 2002 09:19:16 -0000 Received: (qmail 19722 invoked by uid 97); 11 Mar 2002 09:18:37 -0000 Delivered-To: qmlist-jakarta-archive-ant-user@jakarta.apache.org Received: (qmail 19674 invoked by uid 97); 11 Mar 2002 09:18:36 -0000 Mailing-List: contact ant-user-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Ant Users List" Reply-To: "Ant Users List" Delivered-To: mailing list ant-user@jakarta.apache.org Received: (qmail 19630 invoked from network); 11 Mar 2002 09:18:35 -0000 X-MimeOLE: Produced By Microsoft Exchange V6.0.5762.3 content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C1C8DD.B3296D02" Subject: RE: PL/SQL tasks or target frameworks. Date: Mon, 11 Mar 2002 10:18:26 +0100 Message-ID: <3AFF22A81FF2F94AB721A1BD98E2C1E31F57FA@corusbo.corp.corustechnologies.com> X-MS-Has-Attach: yes X-MS-TNEF-Correlator: Thread-Topic: PL/SQL tasks or target frameworks. Thread-Index: AcHGzoI0bImdJkTUQumkVaAhtsWggQCDeEAA From: =?iso-8859-1?Q?Johan_Adel=F6w?= To: "Ant Users List" X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N ------_=_NextPart_001_01C1C8DD.B3296D02 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi! I have a modified sqltask that I have written in cooperation with some = other ant users. We use this task to install a rather complex oraclebased application, so I think it is working fine. Please inform me if you find something that is not correct about it though. /Johan -----Original Message----- From: George McKinney [mailto:george@tantalus.com] Sent: den 8 mars 2002 19:24 To: 'Ant user list' Subject: PL/SQL tasks or target frameworks. We are starting a project where we'll be using a lot of Oracle PL/SQL packages. Does anyone have a target framework and/or tasks that they've = used to compile / deploy PLSQL to an Oracle DB. I've used Ant quite a bit with Java and would like to avoid re-inventing wheels. Thanks, George McKinney, Developer Tantalus Communications Inc. 500-1122 Mainland Street Vancouver, BC, Canada V6B 5L1 george@tantalus.com Direct 604.726.6753 Main 604.609.0700 Fax 604.609.0705 "Building successful IT projects since 1994" www.tantalus.com -- To unsubscribe, e-mail: = For additional commands, e-mail: = ------_=_NextPart_001_01C1C8DD.B3296D02 Content-Type: application/octet-stream; name="SQLExec.java" Content-Transfer-Encoding: base64 Content-Description: SQLExec.java Content-Disposition: attachment; filename="SQLExec.java" LyoNCiAqIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjENCiAqDQogKiBD b3B5cmlnaHQgKGMpIDE5OTkgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJp Z2h0cw0KICogcmVzZXJ2ZWQuDQogKg0KICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQogKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMNCiAqIGFy ZSBtZXQ6DQogKg0KICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCiAqDQogKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0K ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyIGluDQogKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp YWxzIHByb3ZpZGVkIHdpdGggdGhlDQogKiAgICBkaXN0cmlidXRpb24uDQogKg0KICogMy4gVGhl IGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24s IGlmDQogKiAgICBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZ2VtZW50 Og0KICogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlDQogKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBh Y2hlLm9yZy8pLiINCiAqICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZ2VtZW50IG1heSBh cHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwNCiAqICAgIGlmIGFuZCB3aGVyZXZlciBzdWNo IHRoaXJkLXBhcnR5IGFja25vd2xlZ2VtZW50cyBub3JtYWxseSBhcHBlYXIuDQogKg0KICogNC4g VGhlIG5hbWVzICJUaGUgSmFrYXJ0YSBQcm9qZWN0IiwgIkFudCIsIGFuZCAiQXBhY2hlIFNvZnR3 YXJlDQogKiAgICBGb3VuZGF0aW9uIiBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkDQogKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuDQogKiAgICBwZXJtaXNzaW9uLCBw bGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4NCiAqDQogKiA1LiBQcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIg0KICogICAg bm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0 dGVuDQogKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgR3JvdXAuDQogKg0KICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElF RA0KICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM SUVEIFdBUlJBTlRJRVMNCiAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQVJFDQogKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg VEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SDQogKiBJVFMgQ09OVFJJQlVUT1JTIEJF IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsDQogKiBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U DQogKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ Q0VTOyBMT1NTIE9GDQogKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EDQogKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwNCiAqIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVA0K ICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP U1NJQklMSVRZIE9GDQogKiBTVUNIIERBTUFHRS4NCiAqID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogKg0KICogVGhp cyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1h bnkNCiAqIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5k YXRpb24uICBGb3IgbW9yZQ0KICogaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBwbGVhc2Ugc2VlDQogKiA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uDQogKg0K ICogVGhpcyBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgZnJvbSBpdHMgb3JpZ2luYWwgc3RhdGUgdG8g YmUgYWJsZSB0byB1c2UNCiAqIGFsbCBraW5kcyBvZiBvcmFjbGUgc3FsIGNvZGUgbGlrZSBwcmVj ZWR1cmVzIGFuZCBwYWNrYWdlcyAuLi4NCiAqIDAwMDMyMCAvIEpvaGFuIEFkZWz2dw0KICoNCiAq IFRoYW54IHRvIEpvaGFuLiBJIHRvb2sgdGhlIGxpYmVydHkgb2YgcmV3cml0aW5nIHNvbWUoPykg Y29kZS4NCiAqIEkgdHJpZWQgdG8gbWFrZSBpdCBwcm9jZXNzIGFzIG1hbnkgU1FMKlBsdXMtZmls ZXMgYXMgcG9zc2libGUuDQogKiBzbyBpdCBjYW4gYmUgcGFyYWNodXRlZCBpbnRvIGFuIGV4aXN0 aW5nIGZyYW1ld29yay4NCiAqDQogKi8NCg0KcGFja2FnZSBvcmcuYXBhY2hlLnRvb2xzLmFudC50 YXNrZGVmczsNCg0KaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50Lio7DQppbXBvcnQgb3JnLmFw YWNoZS50b29scy5hbnQudHlwZXMuKjsNCg0KaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lio7DQpp bXBvcnQgamF2YS5pby4qOw0KaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsNCmltcG9ydCBq YXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOw0KaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7DQppbXBv cnQgamF2YS51dGlsLlByb3BlcnRpZXM7DQppbXBvcnQgamF2YS51dGlsLnppcC4qOw0KaW1wb3J0 IGphdmEuc3FsLio7DQoNCi8qKg0KICogUmVhZHMgaW4gYSB0ZXh0IGZpbGUgY29udGFpbmluZyBT UUwgc3RhdGVtZW50cyBzZXBlcmF0ZWQgd2l0aCBzZW1pY29sb25zDQogKiBhbmQgZXhlY3V0ZXMg aXQgaW4gYSBnaXZlbiBkYi4NCiAqDQogKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzpqZWZmQGN1 c3RvbW1vbmtleS5vcmciPkplZmYgTWFydGluPC9hPg0KICogQGF1dGhvciA8QSBocmVmPSJtYWls dG86Z2hvbGFtQHh0cmEuY28ubnoiPk1pY2hhZWwgTWNDYWxsdW08L0E+DQogKiBAYXV0aG9yIDxB IGhyZWY9Im1haWx0bzp0aW0uc3RlcGhlbnNvbkBzeWJhc2UuY29tIj5UaW0gU3RlcGhlbnNvbjwv QT4NCiAqLw0KcHVibGljIGNsYXNzIFNRTEV4ZWMgZXh0ZW5kcyBUYXNrIHsNCg0KICAgIHByaXZh dGUgTWV0aG9kIHNxbDkycGFyc2VyID0gbnVsbDsNCg0KICAgIHByaXZhdGUgaW50IGdvb2RTcWwg PSAwLCB0b3RhbFNxbCA9IDA7DQoNCiAgICBwcml2YXRlIFBhdGggY2xhc3NwYXRoOw0KDQogICAg cHJpdmF0ZSBBbnRDbGFzc0xvYWRlciBsb2FkZXI7DQoNCiAgICBwcml2YXRlIFZlY3RvciBmaWxl c2V0cyA9IG5ldyBWZWN0b3IoKTsNCg0KICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBfTlVM TCAgPSAwOw0KICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBfVFJVRSAgPSAxOw0KICAgIHBy aXZhdGUgc3RhdGljIGZpbmFsIGludCBfRkFMU0UgPSAtMTsNCg0KICAgIHByaXZhdGUgVHJhbnNh Y3Rpb24gZGVmYXVsdFRyYW5zYWN0aW9uOw0KDQogICAgLyoqDQogICAgICoNCiAgICAgKi8NCiAg ICBwdWJsaWMgU1FMRXhlYygpIHsNCiAgICAgICAgc3VwZXIoKTsNCiAgICAgICAgZGVmYXVsdFRy YW5zYWN0aW9uID0gY3JlYXRlVHJhbnNhY3Rpb24oKTsNCg0KICAgICAgICAvKiBDcmVhdGUgdGhl IGRibXNfb3V0cHV0IHdvcmthcm91bmQgKi8NCi8vICAgICAgICBkZWZhdWx0VHJhbnNhY3Rpb24u YWRkVGV4dCAoImNyZWF0ZSBvciByZXBsYWNlIGZ1bmN0aW9uIGRibXNfb3V0cHV0MiByZXR1cm4g dmFyY2hhcjIgaXMgIiArDQovLyAgICAgICAgICAgICIgcyB2YXJjaGFyMigyNTUpOyBsIHBsc19p bnRlZ2VyOyBiZWdpbiBkYm1zX291dHB1dC5nZXRfbGluZShzLCBsKTsgaWYgbCA9IDAgdGhlbiBy ZXR1cm4gczsgIiArDQovLyAgICAgICAgICAgICIgZW5kIGlmOyByYWlzZSB2YWx1ZV9lcnJvcjsg ZW5kOyBcbi8iKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBEYXRhYmFzZSBjb25uZWN0aW9u DQogICAgICovDQogICAgcHJpdmF0ZSBDb25uZWN0aW9uIGNvbm4gPSBudWxsOw0KDQogICAgLyoq DQogICAgICogQXV0b2NvbW1pdCBmbGFnLiBEZWZhdWx0IHZhbHVlIGlzIGZhbHNlDQogICAgICov DQogICAgcHJpdmF0ZSBib29sZWFuIGF1dG9jb21taXQ9ZmFsc2U7DQoNCiAgICAvKioNCiAgICAg KiBTUUwgc3RhdGVtZW50DQogICAgICovDQogICAgcHJpdmF0ZSBTdGF0ZW1lbnQgc3RhdGVtZW50 ID0gbnVsbDsNCg0KICAgIC8qKg0KICAgICAqIERCIGRyaXZlci4NCiAgICAgKi8NCiAgICBwcml2 YXRlIFN0cmluZyBkcml2ZXIgPSBudWxsOw0KDQogICAgLyoqDQogICAgICogREIgdXJsLg0KICAg ICAqLw0KICAgIHByaXZhdGUgU3RyaW5nIHVybCA9IG51bGw7DQoNCiAgICAvKioNCiAgICAgKiBE QiBTSUQNCiAgICAgKi8NCiAgICBwcml2YXRlIFN0cmluZyBzaWQgPSBudWxsOw0KDQogICAgLyoq DQogICAgICogVXNlciBuYW1lLg0KICAgICAqLw0KICAgIHByaXZhdGUgU3RyaW5nIHVzZXJJZCA9 IG51bGw7DQoNCiAgICAvKioNCiAgICAgKiBQYXNzd29yZA0KICAgICAqLw0KICAgIHByaXZhdGUg U3RyaW5nIHBhc3N3b3JkID0gbnVsbDsNCg0KICAgLyoqDQogICAgICogU1FMIGlucHV0IGNvbW1h bmQNCiAgICAgKi8NCiAgICBwcml2YXRlIFN0cmluZyBzcWxDb21tYW5kID0gIiI7DQoNCiAgIC8q Kg0KICAgICAqIFNRTCBpbnB1dCBmaWxlDQogICAgICovDQogICAgcHJpdmF0ZSBGaWxlIHNyY0Zp bGUgPSBudWxsOw0KDQogICAgICAvKioNCiAgICAgKiBTUUwgdHJhbnNhY3Rpb25zIHRvIHBlcmZv cm0NCiAgICAgKi8NCiAgICBwcml2YXRlIFZlY3RvciB0cmFuc2FjdGlvbnMgPSBuZXcgVmVjdG9y KCk7DQoNCiAgICAvKioNCiAgICAgKiBJZ25vcmUgU1FMKlBsdXMgY29tbWFuZHMNCiAgICAgKi8N CiAgICBwcml2YXRlIGJvb2xlYW4gZGVmYXVsdElnbm9yZSA9IHRydWU7DQoNCiAgICAvKioNCiAg ICAgKiBQcmludCBTUUwgcmVzdWx0cy4NCiAgICAgKi8NCiAgICBwcml2YXRlIGJvb2xlYW4gcHJp bnQgPSBmYWxzZTsNCg0KICAgIC8qKg0KICAgICAqIFByaW50IGhlYWRlciBjb2x1bW5zLg0KICAg ICAqLw0KICAgIHByaXZhdGUgYm9vbGVhbiBzaG93aGVhZGVycyA9IHRydWU7DQoNCiAgICAvKioN CiAgICAgKiBSZXN1bHRzIE91dHB1dCBmaWxlLg0KICAgICAqLw0KICAgIHByaXZhdGUgRmlsZSBv dXRwdXQgPSBudWxsOw0KDQogICAgLyoqDQogICAgICogUkRCTVMgUHJvZHVjdCBuZWVkZWQgZm9y IHRoaXMgU1FMLg0KICAgICAqLw0KICAgIHByaXZhdGUgU3RyaW5nIHJkYm1zID0gbnVsbDsNCg0K ICAgIC8qKg0KICAgICAqIFJEQk1TIFZlcnNpb24gbmVlZGVkIGZvciB0aGlzIFNRTC4NCiAgICAg Ki8NCiAgICBwcml2YXRlIFN0cmluZyB2ZXJzaW9uID0gbnVsbDsNCg0KICAgIC8qKg0KICAgICAq IEFjdGlvbiB0byBwZXJmb3JtIGlmIGFuIGVycm9yIGlzIGZvdW5kDQogICAgICovDQogICAgcHJp dmF0ZSBTdHJpbmcgb25FcnJvciA9ICJhYm9ydCI7DQoNCiAgICAvKioNCiAgICAgKiBFbmNvZGlu ZyB0byB1c2Ugd2hlbiByZWFkaW5nIFNRTCBzdGF0ZW1lbnRzIGZyb20gYSBmaWxlDQogICAgICov DQogICAgcHJpdmF0ZSBTdHJpbmcgZW5jb2RpbmcgPSBudWxsOw0KDQogICAgLyoqDQogICAgICog U2V0IHRoZSBjbGFzc3BhdGggZm9yIGxvYWRpbmcgdGhlIGRyaXZlci4NCiAgICAgKi8NCiAgICBw dWJsaWMgdm9pZCBzZXRDbGFzc3BhdGgoUGF0aCBjbGFzc3BhdGgpIHsNCiAgICAgICAgaWYgKHRo aXMuY2xhc3NwYXRoID09IG51bGwpIHsNCiAgICAgICAgICAgIHRoaXMuY2xhc3NwYXRoID0gY2xh c3NwYXRoOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdGhpcy5jbGFzc3BhdGguYXBw ZW5kKGNsYXNzcGF0aCk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBDcmVh dGUgdGhlIGNsYXNzcGF0aCBmb3IgbG9hZGluZyB0aGUgZHJpdmVyLg0KICAgICAqLw0KICAgIHB1 YmxpYyBQYXRoIGNyZWF0ZUNsYXNzcGF0aCgpIHsNCiAgICAgICAgaWYgKHRoaXMuY2xhc3NwYXRo ID09IG51bGwpIHsNCiAgICAgICAgICAgIHRoaXMuY2xhc3NwYXRoID0gbmV3IFBhdGgocHJvamVj dCk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHRoaXMuY2xhc3NwYXRoLmNyZWF0ZVBhdGgo KTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTZXQgdGhlIGNsYXNzcGF0aCBmb3IgbG9hZGlu ZyB0aGUgZHJpdmVyIHVzaW5nIHRoZSBjbGFzc3BhdGggcmVmZXJlbmNlLg0KICAgICAqLw0KICAg IHB1YmxpYyB2b2lkIHNldENsYXNzcGF0aFJlZihSZWZlcmVuY2Ugcikgew0KICAgICAgICBjcmVh dGVDbGFzc3BhdGgoKS5zZXRSZWZpZChyKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTZXQg dGhlIG5hbWUgb2YgdGhlIHNxbCBmaWxlIHRvIGJlIHJ1bi4NCiAgICAgKi8NCiAgICBwdWJsaWMg dm9pZCBzZXRTcmMoRmlsZSBzcmNGaWxlKSB7DQogICAgICAgIGRlZmF1bHRUcmFuc2FjdGlvbi5z ZXRTcmMoc3JjRmlsZSk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogU2V0IHRoZSBzcWwgY29t bWFuZCB0byBleGVjdXRlDQogICAgICovDQogICAgcHVibGljIHZvaWQgYWRkVGV4dChTdHJpbmcg c3FsKSB7DQogICAgICAgIGRlZmF1bHRUcmFuc2FjdGlvbi5hZGRUZXh0KHNxbCk7DQogICAgfQ0K DQogDQogICAgLyoqDQogICAgICogQWRkcyBhIHNldCBvZiBmaWxlcyAobmVzdGVkIGZpbGVzZXQg YXR0cmlidXRlKS4NCiAgICAgKi8NCiAgICBwdWJsaWMgdm9pZCBhZGRGaWxlc2V0KEZpbGVTZXQg c2V0KSB7DQogICAgICAgIGZpbGVzZXRzLmFkZEVsZW1lbnQoc2V0KTsNCiAgICB9DQoNCiAgICAv KioNCiAgICAgKiBTZXQgdGhlIHNxbCBjb21tYW5kIHRvIGV4ZWN1dGUNCiAgICAgKi8NCiAgICBw dWJsaWMgVHJhbnNhY3Rpb24gY3JlYXRlVHJhbnNhY3Rpb24oKSB7DQogICAgICAgIFRyYW5zYWN0 aW9uIHQgPSBuZXcgVHJhbnNhY3Rpb24oKTsNCiAgICAgICAgdHJhbnNhY3Rpb25zLmFkZEVsZW1l bnQodCk7DQogICAgICAgIHJldHVybiB0Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFNldCB0 aGUgSkRCQyBkcml2ZXIgdG8gYmUgdXNlZC4NCiAgICAgKi8NCiAgICBwdWJsaWMgdm9pZCBzZXRE cml2ZXIoU3RyaW5nIGRyaXZlcikgew0KICAgICAgICB0aGlzLmRyaXZlciA9IGRyaXZlcjsNCiAg ICB9DQoNCiAgICAvKioNCiAgICAgKiBTZXQgdGhlIERCIGNvbm5lY3Rpb24gdXJsLg0KICAgICAq Lw0KICAgIHB1YmxpYyB2b2lkIHNldFVybChTdHJpbmcgdXJsKSB7DQogICAgICAgIHRoaXMudXJs ID0gdXJsOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFNldCB0aGUgREIgc2lkDQogICAgICov DQogICAgcHVibGljIHZvaWQgc2V0U2lkKFN0cmluZyBzaWQpIHsNCiAgICAgICAgdGhpcy5zaWQg PSBzaWQ7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogU2V0IHRoZSB1c2VyIG5hbWUgZm9yIHRo ZSBEQiBjb25uZWN0aW9uLg0KICAgICAqLw0KICAgIHB1YmxpYyB2b2lkIHNldFVzZXJpZChTdHJp bmcgdXNlcklkKSB7DQogICAgICAgIHRoaXMudXNlcklkID0gdXNlcklkOw0KICAgIH0NCg0KICAg IC8qKg0KICAgICAqIFNldCB0aGUgcGFzc3dvcmQgZm9yIHRoZSBEQiBjb25uZWN0aW9uLg0KICAg ICAqLw0KICAgIHB1YmxpYyB2b2lkIHNldFBhc3N3b3JkKFN0cmluZyBwYXNzd29yZCkgew0KICAg ICAgICB0aGlzLnBhc3N3b3JkID0gcGFzc3dvcmQ7DQogICAgfQ0KDQogICAgLyoqDQogICAgICog U2V0IHRoZSBhdXRvY29tbWl0IGZsYWcgZm9yIHRoZSBEQiBjb25uZWN0aW9uLg0KICAgICAqLw0K ICAgIHB1YmxpYyB2b2lkIHNldEF1dG9jb21taXQoYm9vbGVhbiBhdXRvY29tbWl0KSB7DQogICAg ICAgIHRoaXMuYXV0b2NvbW1pdCA9IGF1dG9jb21taXQ7DQogICAgfQ0KDQogICAgLyoqDQogICAg ICogU2V0IHRoZSBwcmludCBmbGFnLg0KICAgICAqLw0KICAgIHB1YmxpYyB2b2lkIHNldFByaW50 KGJvb2xlYW4gcHJpbnQpIHsNCiAgICAgICAgdGhpcy5wcmludCA9IHByaW50Ow0KICAgIH0NCg0K ICAgIC8qKg0KICAgICAqIFNldCB0aGUgc2hvd2hlYWRlcnMgZmxhZy4NCiAgICAgKi8NCiAgICBw dWJsaWMgdm9pZCBzZXRTaG93aGVhZGVycyhib29sZWFuIHNob3doZWFkZXJzKSB7DQogICAgICAg IHRoaXMuc2hvd2hlYWRlcnMgPSBzaG93aGVhZGVyczsNCiAgICB9DQoNCiAgICAvKioNCiAgICAg KiBTZXQgdGhlIG91dHB1dCBmaWxlLg0KICAgICAqLw0KICAgIHB1YmxpYyB2b2lkIHNldE91dHB1 dChGaWxlIG91dHB1dCkgew0KICAgICAgICB0aGlzLm91dHB1dCA9IG91dHB1dDsNCiAgICB9DQoN CiAgICAvKioNCiAgICAgKiBTZXQgdGhlIHJkYm1zIHJlcXVpcmVkDQogICAgICovDQogICAgcHVi bGljIHZvaWQgc2V0UmRibXMoU3RyaW5nIHZlbmRvcikgew0KICAgICAgICB0aGlzLnJkYm1zID0g dmVuZG9yLnRvTG93ZXJDYXNlKCk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogU2V0IHRoZSB2 ZXJzaW9uIHJlcXVpcmVkDQogICAgICovDQogICAgcHVibGljIHZvaWQgc2V0VmVyc2lvbihTdHJp bmcgdmVyc2lvbikgew0KICAgICAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uLnRvTG93ZXJDYXNl KCk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogU2V0IHRoZSBhY3Rpb24gdG8gcGVyZm9ybSBv bmVycm9yDQogICAgICovDQogICAgcHVibGljIHZvaWQgc2V0T25lcnJvcihPbkVycm9yIGFjdGlv bikgew0KICAgICAgICB0aGlzLm9uRXJyb3IgPSBhY3Rpb24uZ2V0VmFsdWUoKTsNCiAgICB9DQoN CiAgICAvKioNCiAgICAgKiBTZXQgdGhlIGZpbGUgZW5jb2RpbmcgdG8gdXNlIG9uIHRoZSBzcWwg ZmlsZXMgcmVhZCBpbg0KICAgICAqDQogICAgICogQHBhcmFtIGVuY29kaW5nIHRoZSBlbmNvZGlu ZyB0byB1c2Ugb24gdGhlIGZpbGVzDQogICAgICovDQogICAgcHVibGljIHZvaWQgc2V0RW5jb2Rp bmcoU3RyaW5nIGVuY29kaW5nKSB7DQogICAgICAgIHRoaXMuZW5jb2RpbmcgPSBlbmNvZGluZzsN CiAgICB9DQoNCiAgICAvKiAgVGhlc2UgYXJlIHRoZSBzdHJpbmcgdGhhdCBhcmUgaWdub3JlZCBi eSBkZWZhdWx0Lg0KICAgICAqLw0KICAgIHByaXZhdGUgU3RyaW5nIGlnbm9yZVN0cmluZ3NbXSA9 IA0KICAgICAgICB7ImFjY1tlcHRdIiwgImFbcHBlbmRdIiwgImFyY2hpdmUiLCAiYXR0cmlidXRl IiwgImJyZVtha10iLCAiYnRpW3RsZV0iLCAiY1toYW5nZV0iLCANCiAgICAgICAgICJjbFtlYXJd IiwgImNvbFt1bW5dIiwgImNvbXBbdXRlXSIsICJjb25uW2VjdF0iLCAiZGVmW2luZV0iLCAiZGVs IiwgImRlc2NbcmliZV0iLCANCiAgICAgICAgICJkaXNjW29ubmVjdF0iLCAiZWRbaXRdIiwgImV4 aXQiLCAiZ2V0IiwgImhlbHAiLCAiaG9bc3RdIiwgImlbbnB1dF0iLCAibFtpc3RdIiwgDQogICAg ICAgICAicGFzc3dbb3JkXSIsICJwYXVbc2VdIiwgInByaVtudF0iLCAicHJvW21wdF0iLCAicXVp dCIsICJyZWNvdmVyIiwgInJlbVthcmtdIiwgDQogICAgICAgICAicmVwZltvb3Rlcl0iLCAicmVw aFtlYWRlcl0iLCAiclt1bl0iLCAic2F2W2VdIiwgInNob1t3XSIsICJzaHV0ZG93biIsICJzcG9b b2xdIiwgDQogICAgICAgICAic3RhcnR1cCIsICJzdG9yZSIsICJ0aW1pW25nXSIsICJ0dGlbdGxl XSIsICJ1bmRlZltpbmVdIiwgInZhcltpYWJsZV0iLCAid2hlbmV2ZXIiDQogICAgICAgIH07DQoN Cg0KICAgIC8qKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNvbXBhcmUgU1FMKlBsdXMtY29tbWFu ZHMuDQogICAgICogIEZvciBleGFtcGxlOiB0aGUgZGVmaW5pbmcgc3RyaW5nIGlzICJleGVjW3V0 ZV0iDQogICAgICogIHRoZW4gImV4ZWMiLCAiZXhlY3UiLCAiZXhlY3V0IiBhbmQgImV4ZWN1dGUi IHdpbGwgbWF0Y2guDQogICAgICoNCiAgICAgKiBAcGFyYW0gcyAgIHRoZSBzdHJpbmcgdGhhdCBz aG91bGQgYmUgdGVzdGVkDQogICAgICogQHBhcmFtIGRlZiB0aGUgZGVmaW5pbmcgc3RyaW5nIA0K ICAgICAqLw0KICAgIHByaXZhdGUgYm9vbGVhbiBlcXVhbHNFeHBhbmRTdHJpbmcoU3RyaW5nIHMs IFN0cmluZyBkZWYpIHsNCiAgICAgICAgaWYgKHMuZXF1YWxzKGRlZikpIHsNCiAgICAgICAgICAg IHJldHVybiB0cnVlOw0KICAgICAgICB9DQogICAgICAgIGlmIChzLnRyaW0oKS5sZW5ndGgoKT09 MCkgew0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgIGludCBz dGFydHBvcyA9IGRlZi5pbmRleE9mKCJbIik7DQogICAgICAgIGludCBlbmRwb3MgICA9IGRlZi5p bmRleE9mKCJdIik7DQogICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIo KTsNCiAgICAgICAgaWYgKHN0YXJ0cG9zICE9IC0xICYmIGVuZHBvcyAhPSAtMSkgew0KICAgICAg ICAgICAgc2IuYXBwZW5kKGRlZi5zdWJzdHJpbmcoMCwgc3RhcnRwb3MpKTsNCiAgICAgICAgICAg IGZvciAoaW50IGkgPSBzdGFydHBvcyArIDE7IGkgPCBlbmRwb3M7IGkrKykgew0KICAgICAgICAg ICAgICAgIGlmIChzLmVxdWFscyhzYi50b1N0cmluZygpKSl7DQogICAgICAgICAgICAgICAgICAg IHJldHVybiB0cnVlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZighcy5z dGFydHNXaXRoKHNiLnRvU3RyaW5nKCkpKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBm YWxzZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgc2IuYXBwZW5kKGRlZi5j aGFyQXQoaSkpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHJldHVybiBzLmVx dWFscyhzYi50b1N0cmluZygpKTsNCiAgICB9DQoNCiAgICANCiAgICAvKiogRGV0ZXJtaW5lIHdo ZXRoZXIgdGhpcyBzdHJpbmcgc2hvdWxkIGJlIHByb2Nlc3NlZC4NCiAgICAgKi8NCiAgICBwcml2 YXRlIGJvb2xlYW4gc2hvdWxkSWdub3JlKFN0cmluZyBzKSB7DQogICAgICAgIA0KICAgICAgICBp ZihzLnN0YXJ0c1dpdGgoIi0tIil8fHMuc3RhcnRzV2l0aCgiLy8iKSkgew0KICAgICAgICAgICAg cmV0dXJuIHRydWU7DQogICAgICAgIH0NCiAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3 IFN0cmluZ1Rva2VuaXplcihzLCAiIDsiLCBmYWxzZSk7DQogICAgICAgIFN0cmluZyB0ZXN0ID0g c3QubmV4dFRva2VuKCk7IC8vKHMuaW5kZXhPZigiICIpICE9IC0xKT9zLnN1YnN0cmluZygwLCBz LmluZGV4T2YoIiAiKSk6czsNCiAgICAgICAgaWYoZGVmYXVsdElnbm9yZSkgew0KICAgICAgICAg ICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgaWdub3JlU3RyaW5ncy5sZW5ndGg7IGkrKykgew0KICAg ICAgICAgICAgICAgIGlmIChlcXVhbHNFeHBhbmRTdHJpbmcodGVzdCwgaWdub3JlU3RyaW5nc1tp XSkpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICAgICAg fQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgLyogIlNFVCIgY2FuIGJlIGVpdGhlciBTUUwq UGx1cyBvciBhIFNRTC1jb21tYW5kLg0KICAgICAgICAgICAgKi8NCiAgICAgICAgICAgIGlmICh0 ZXN0LmVxdWFscygic2V0IikgJiYgc3QuaGFzTW9yZVRva2VucygpKSB7DQogICAgICAgICAgICAg ICAgdGVzdCA9IHN0Lm5leHRUb2tlbigpOw0KICAgICAgICAgICAgICAgIGlmICghZXF1YWxzRXhw YW5kU3RyaW5nKHRlc3QsICJjb25zdHJhaW50W3NdIikgJiYNCiAgICAgICAgICAgICAgICAgICAg ICAgICF0ZXN0LmVxdWFscygicm9sZSIpICYmDQogICAgICAgICAgICAgICAgICAgICAgICAhdGVz dC5lcXVhbHMoInRyYW5zYWN0aW9uIikpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy dWU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAg IHJldHVybiBmYWxzZTsNCiAgICB9DQoNCg0KICAgIC8qKiBEZXRlcm1pbmUgdGhlIHR5cGUgb2Yg YmxvY2sgd2UgYXJlIGluLg0KICAgICAqICBSZXR1cm5zIF9UUlVFICBpZiB3ZSBhcmUgd2FpdGlu ZyBmb3IgYSBzbGFzaA0KICAgICAqICAgICAgICAgIF9GQUxTRSBpZiB3ZSBhcmUgbm90IHdhaXRp bmcgZm9yIGEgc2xhc2gNCiAgICAgKiAgICAgICAgICBfTlVMTCAgaWYgdGhlIGJsb2NrLXR5cGUg Y291bGQgbm90IGJlIGRldGVybWluZWQgKHlldCkuDQogICAgICogIE5vdGUgOiBUaGlzIHByb2Nl ZHVyZSBpcyBOT1QgY2FzZS1zZW5zaXRpdmUgYmVjYXVzZSBQTC9TUUwgaXMgbm90Lg0KICAgICAq Lw0KICAgIHByaXZhdGUgaW50IGRldGVybWluZUJsb2NrVHlwZShTdHJpbmcgdGVzdCkgew0KICAg ICAgICBib29sZWFuIGluc3RyaW5nID0gZmFsc2U7DQogICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9 IG5ldyBTdHJpbmdCdWZmZXIodGVzdCk7DQoNCiAgICAgICAgLyogZmlyc3Qgd2UgcmVwbGFjZSBl dmVyeSBvY2N1cmVuY2Ugb2YgIi0tIiB3aXRoICIvLyIgDQogICAgICAgICAqIHRvIG1ha2UgU3Ry ZWFtVG9rZW5pemVyIHdvcmsgY29ycmVjdGx5DQogICAgICAgICAqLw0KICAgICAgICBmb3IgKGlu dCBpPTA7IGkgPCB0ZXN0Lmxlbmd0aCgpOyBpKyspIHsNCiAgICAgICAgICAgIGluc3RyaW5nID0g KHRlc3QuY2hhckF0KGkpPT0nXCcnKT8haW5zdHJpbmc6aW5zdHJpbmc7DQogICAgICAgICAgICBp ZiAoaW5zdHJpbmcpIHsNCiAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgIH0N CiAgICAgICAgICAgIGludCBwb3MgPSB0ZXN0LmluZGV4T2YoIi0tIiwgaSk7DQogICAgICAgICAg ICBpZiAocG9zICE9IC0xKSB7DQogICAgICAgICAgICAgICAgc2IucmVwbGFjZShwb3MsIHBvcyAr IDIsICIvLyIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBT dHJlYW1Ub2tlbml6ZXIgc3QgPSBuZXcgU3RyZWFtVG9rZW5pemVyKG5ldyBTdHJpbmdSZWFkZXIo c2IudG9TdHJpbmcoKSkpOw0KICAgICAgICBzdC5zbGFzaFNsYXNoQ29tbWVudHModHJ1ZSk7DQog ICAgICAgIHN0LnNsYXNoU3RhckNvbW1lbnRzKHRydWUpOw0KICAgICAgICBzdC5lb2xJc1NpZ25p ZmljYW50KGZhbHNlKTsNCiAgICAgICAgc3QubG93ZXJDYXNlTW9kZSh0cnVlKTsNCiAgICAgICAg DQogICAgICAgIGludCB3b3JkID0gMDsNCiAgICAgICAgaW50IHR0eXBlOw0KICAgICAgICB0cnkg ew0KICAgICAgICAgICAgd2hpbGUoKHR0eXBlID0gc3QubmV4dFRva2VuKCkpICE9IHN0LlRUX0VP Rikgew0KICAgICAgICAgICAgICAgIHdvcmQrKzsNCiAgICAgICAgICAgICAgICBpZiAodHR5cGUg IT0gc3QuVFRfV09SRCkgew0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAg ICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKCB3b3JkID09IDEgKSB7DQogICAgICAgICAg ICAgICAgICAgIGlmIChzdC5zdmFsLmVxdWFscygiZGVjbGFyZSIpIHx8c3Quc3ZhbC5lcXVhbHMo ImJlZ2luIikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFub255bW91cyBQTC9TUUws IHNob3VsZCB3YWl0IGZvciBzbGFzaC4gKi8NCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biBfVFJVRTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAo IXN0LnN2YWwuZXF1YWxzKCJjcmVhdGUiKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgLyog Tm90IGEgY3JlYXRlIHN0YXRlbWVudCwgbm8gbmVlZCB0byB3YWl0IGZvciBzbGFzaCAqLw0KICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9GQUxTRTsNCiAgICAgICAgICAgICAgICAgICAg fQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAv KiBNb3ZlICJvciByZXBsYWNlIiBvdXQgb2YgdGhlIHdheS4gKi8NCiAgICAgICAgICAgICAgICBp ZiAoIHdvcmQgPT0gMiAmJiBzdC5zdmFsLmVxdWFscygib3IiKSkgew0KICAgICAgICAgICAgICAg ICAgICBpZiAoKHR0eXBlID0gc3QubmV4dFRva2VuKCkpICE9IHN0LlRUX1dPUkQgfHwgIXN0LnN2 YWwuZXF1YWxzKCJyZXBsYWNlIikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuY291 bnRlcmVkICJvciIgd2l0aG91dCAicmVwbGFjZSIgIT8gDQogICAgICAgICAgICAgICAgICAgICAg ICAgKiBUaGlzIGlzIG5vdCBjb3JyZWN0IFBML1NRTCBzbyByZXR1cm5zIF9GQUxTRQ0KICAgICAg ICAgICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX0ZB TFNFOw0KICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICB3b3JkID0gMTsN CiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYg KHdvcmQgPT0gMikgew0KICAgICAgICAgICAgICAgICAgICBpZiAgKHN0LnN2YWwuZXF1YWxzKCJq YXZhIikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fHN0LnN2YWwuZXF1YWxzKCJmdW5j dGlvbiIpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfHxzdC5zdmFsLmVxdWFscygicGFj a2FnZSIpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfHxzdC5zdmFsLmVxdWFscygicHJv Y2VkdXJlIikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fHN0LnN2YWwuZXF1YWxzKCJ0 cmlnZ2VyIikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fHN0LnN2YWwuZXF1YWxzKCJ0 eXBlIikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfVFJVRTsNCiAgICAgICAg ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gX0ZBTFNFOw0KICAgICAg ICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUp IHsNCiAgICAgICAgICAgIHRocm93IG5ldyBCdWlsZEV4Y2VwdGlvbigiRXJyb3Igd2hpbGUgZGV0 ZXJtaW5pbmcgYmxvY2stdHlwZSAoIiArIGUgKyAiKSIpOw0KICAgICAgICB9DQoNCiAgICAgICAg cmV0dXJuIF9UUlVFOw0KICAgIH0NCiAgICANCiAgICANCiAgICAvKiogDQogICAgICogIFRoaXMg bWV0aG9kIGlzIHVzZWQgdG8gcHJvY2VzcyBjZXJ0YWluIFNRTCpQbHVzIGNvbW1hbmRzIGFuZCB0 cmFuc2xhdGUgdGhlbSBpbnRvIA0KICAgICAqICBjb21tYW5kcyB0aGF0IHRoZSBKREJDLWRyaXZl ciBjYW4gaGFuZGxlLg0KICAgICAqLw0KICAgIHByaXZhdGUgU3RyaW5nIHRyYW5zbGF0ZVNRTFBs dXMoU3RyaW5nIGxpbmUpIHsNCiAgICAgICAgaWYgKGxpbmUgPT0gbnVsbCB8fCBsaW5lLnRyaW0o KS5lcXVhbHMoIiIpKSB7DQogICAgICAgICAgICByZXR1cm4gbnVsbDsNCiAgICAgICAgfQ0KICAg ICAgICBTdHJpbmcgY29tbWFuZCA9IG51bGw7DQogICAgICAgIA0KICAgICAgICAvKiBIYW5kbGUg InNldCBzZXJ2ZXJvdXQiLWNvbW1hbmRzICovDQogICAgICAgIFN0cmluZ1Rva2VuaXplciBzdCA9 IG5ldyBTdHJpbmdUb2tlbml6ZXIobGluZS50b0xvd2VyQ2FzZSgpKTsNCiAgICAgICAgaWYoc3Qu aGFzTW9yZVRva2VucygpICYmIHN0Lm5leHRUb2tlbigpLmVxdWFscygic2V0IikgJiYgc3QuaGFz TW9yZVRva2VucygpICYmDQogICAgICAgICAgICAgICAgZXF1YWxzRXhwYW5kU3RyaW5nKHN0Lm5l eHRUb2tlbigpLCAic2VydmVyb3V0W3B1dF0iKSAmJiBzdC5oYXNNb3JlVG9rZW5zKCkpIHsNCiAg ICAgICAgICAgIFN0cmluZyBvbm9mZiA9IHN0Lm5leHRUb2tlbigpOw0KICAgICAgICAgICAgaWYg KG9ub2ZmLmVxdWFscygib2ZmIikpIHsNCiAgICAgICAgICAgICAgICBjb21tYW5kID0gIntjYWxs IGRibXNfb3V0cHV0LmRpc2FibGUoKX0iOw0KICAgICAgICAgICAgfSBlbHNlIHsgDQogICAgICAg ICAgICAgICAgaWYgKG9ub2ZmLmVxdWFscygib24iKSl7DQogICAgICAgICAgICAgICAgICAgIGlu dCBidWZmZXJzaXplID0gMjAwMDsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHN0Lmhhc01vcmVU b2tlbnMoKSAmJiBzdC5uZXh0VG9rZW4oKS5lcXVhbHMoInNpemUiKSAmJiBzdC5oYXNNb3JlVG9r ZW5zKCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnNpemUgPSBJbnRlZ2VyLnBh cnNlSW50KHN0Lm5leHRUb2tlbigpKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg ICAgICAgICAgICBjb21tYW5kID0gICJ7Y2FsbCBkYm1zX291dHB1dC5lbmFibGUoIiArIGJ1ZmZl cnNpemUgKyAiKX0iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAg fQ0KICAgICAgICByZXR1cm4gY29tbWFuZDsNCiAgICB9DQogICAgDQoNCiAgICAvKioNCiAgICAg KiBMb2FkIHRoZSBzcWwgZmlsZSBhbmQgdGhlbiBleGVjdXRlIGl0DQogICAgICovDQogICAgcHVi bGljIHZvaWQgZXhlY3V0ZSgpIHRocm93cyBCdWlsZEV4Y2VwdGlvbiB7DQogICAgICAgIC8vIGRl YWwgd2l0aCB0aGUgZmlsZXNldHMNCiAgICAgICAgc3FsQ29tbWFuZCA9IHNxbENvbW1hbmQudHJp bSgpOw0KICAgICAgICBpZiAoc3JjRmlsZSA9PSBudWxsICYmIHNxbENvbW1hbmQubGVuZ3RoKCkg PT0gMCAmJiBmaWxlc2V0cy5zaXplKCkgPT0gMCkgew0KICAgICAgICAgICAgaWYgKHRyYW5zYWN0 aW9ucy5zaXplKCkgPT0gMCkgew0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBCdWlsZEV4Y2Vw dGlvbigiU291cmNlIGZpbGUsIHRyYW5zYWN0aW9ucywgZmlsZXNldHMgb3Igc3FsIHN0YXRlbWVu dCBtdXN0IGJlIHNldCEiLCBsb2NhdGlvbik7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAg ICAgICAgZWxzZSB7DQogICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8ZmlsZXNldHMuc2l6ZSgp OyBpKyspIHsNCiAgICAgICAgICAgICAgICBGaWxlU2V0IGZzID0gKEZpbGVTZXQpIGZpbGVzZXRz LmVsZW1lbnRBdChpKTsNCiAgICAgICAgICAgICAgICBEaXJlY3RvcnlTY2FubmVyIGRzID0gZnMu Z2V0RGlyZWN0b3J5U2Nhbm5lcihwcm9qZWN0KTsNCiAgICAgICAgICAgICAgICBGaWxlIHNyY0Rp ciA9IGZzLmdldERpcihwcm9qZWN0KTsNCg0KICAgICAgICAgICAgICAgIFN0cmluZ1tdIHNyY0Zp bGVzID0gZHMuZ2V0SW5jbHVkZWRGaWxlcygpOw0KDQogICAgICAgICAgICAgICAgLy8gTWFrZSBh IHRyYW5zYWN0aW9uIGZvciBlYWNoIGZpbGUNCiAgICAgICAgICAgICAgICBmb3IgKCBpbnQgaj0w IDsgajxzcmNGaWxlcy5sZW5ndGggOyBqKysgKSB7DQogICAgICAgICAgICAgICAgICAgIFRyYW5z YWN0aW9uIHQgPSBjcmVhdGVUcmFuc2FjdGlvbigpOw0KICAgICAgICAgICAgICAgICAgICB0LnNl dFNyYyhuZXcgRmlsZShzcmNEaXIsIHNyY0ZpbGVzW2pdKSk7DQogICAgICAgICAgICAgICAgfQ0K ICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGRyaXZlciA9PSBudWxsKSB7 DQogICAgICAgICAgICBzZXREcml2ZXIoIm9yYWNsZS5qZGJjLmRyaXZlci5PcmFjbGVEcml2ZXIi KTsNCiAgICAgICAgICAgIGxvZygiRHJpdmVyIGRlZmF1bHRlZCB0byBvcmFjbGUuamRiYy5kcml2 ZXIuT3JhY2xlRHJpdmVyLiIsIFByb2plY3QuTVNHX1ZFUkJPU0UpOw0KICAgICAgICB9DQogICAg ICAgIGlmICh1c2VySWQgPT0gbnVsbCkgew0KICAgICAgICAgICAgdGhyb3cgbmV3IEJ1aWxkRXhj ZXB0aW9uKCJVc2VyIElkIGF0dHJpYnV0ZSBtdXN0IGJlIHNldCEiLCBsb2NhdGlvbik7DQogICAg ICAgIH0NCiAgICAgICAgaWYgKHBhc3N3b3JkID09IG51bGwpIHsNCiAgICAgICAgICAgIHRocm93 IG5ldyBCdWlsZEV4Y2VwdGlvbigiUGFzc3dvcmQgYXR0cmlidXRlIG11c3QgYmUgc2V0ISIsIGxv Y2F0aW9uKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAodXJsID09IG51bGwgJiYgc2lkID09IG51 bGwpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBCdWlsZEV4Y2VwdGlvbigiVXJsIG9yIFNpZCBh dHRyaWJ1dGUgbXVzdCBiZSBzZXQhIiwgbG9jYXRpb24pOw0KICAgICAgICB9DQoNCiAgICAgICAg RHJpdmVyIGRyaXZlckluc3RhbmNlID0gbnVsbDsNCiAgICAgICAgLy8gTG9hZCB0aGUgZHJpdmVy IHVzaW5nIHRoZQ0KICAgICAgICB0cnkgew0KICAgICAgICAgICAgQ2xhc3MgZGM7DQogICAgICAg ICAgICBpZiAoY2xhc3NwYXRoICE9IG51bGwpIHsNCiAgICAgICAgICAgICAgICBsb2coIkxvYWRp bmcgIiArIGRyaXZlciArICIgdXNpbmcgQW50Q2xhc3NMb2FkZXIgd2l0aCBjbGFzc3BhdGggIiAr IGNsYXNzcGF0aCwgUHJvamVjdC5NU0dfVkVSQk9TRSk7DQogICAgICAgICAgICAgICAgbG9hZGVy ID0gbmV3IEFudENsYXNzTG9hZGVyKHByb2plY3QsIGNsYXNzcGF0aCk7DQogICAgICAgICAgICAg ICAgZGMgPSBsb2FkZXIubG9hZENsYXNzKGRyaXZlcik7DQogICAgICAgICAgICB9IGVsc2Ugew0K ICAgICAgICAgICAgICAgIGxvZygiTG9hZGluZyAiICsgZHJpdmVyICsgIiB1c2luZyBzeXN0ZW0g bG9hZGVyLiIsIFByb2plY3QuTVNHX1ZFUkJPU0UpOw0KICAgICAgICAgICAgICAgIGRjID0gQ2xh c3MuZm9yTmFtZShkcml2ZXIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZHJpdmVySW5z dGFuY2UgPSAoRHJpdmVyKSBkYy5uZXdJbnN0YW5jZSgpOw0KICAgICAgICB9IGNhdGNoKENsYXNz Tm90Rm91bmRFeGNlcHRpb24gZSkgew0KICAgICAgICAgICAgdGhyb3cgbmV3IEJ1aWxkRXhjZXB0 aW9uKCJDbGFzcyBOb3QgRm91bmQ6IEpEQkMgZHJpdmVyICIgKyBkcml2ZXIgKyAiIGNvdWxkIG5v dCBiZSBsb2FkZWQiLCBsb2NhdGlvbik7DQogICAgICAgIH0gY2F0Y2goSWxsZWdhbEFjY2Vzc0V4 Y2VwdGlvbiBlKSB7DQogICAgICAgICAgICB0aHJvdyBuZXcgQnVpbGRFeGNlcHRpb24oIklsbGVn YWwgQWNjZXNzOiBKREJDIGRyaXZlciAiICsgZHJpdmVyICsgIiBjb3VsZCBub3QgYmUgbG9hZGVk IiwgbG9jYXRpb24pOw0KICAgICAgICB9IGNhdGNoKEluc3RhbnRpYXRpb25FeGNlcHRpb24gZSkg ew0KICAgICAgICAgICAgdGhyb3cgbmV3IEJ1aWxkRXhjZXB0aW9uKCJJbnN0YW50aWF0aW9uIEV4 Y2VwdGlvbjogSkRCQyBkcml2ZXIgIiArIGRyaXZlciArICIgY291bGQgbm90IGJlIGxvYWRlZCIs IGxvY2F0aW9uKTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgLyogVHJ5aW5nIHRvIGxvYWQgdGhl IE9yYWNsZVNxbC1jbGFzcyBmb3IgcGFyc2luZyBvZiBTUUw5Mi10b2tlbnMuDQogICAgICAgICAq Lw0KICAgICAgICBpZiAocmRibXMgPT0gbnVsbCB8fCByZGJtcy5lcXVhbHNJZ25vcmVDYXNlKCJv cmFjbGUiKSkgew0KICAgICAgICAgICAgdHJ5IHsgDQogICAgICAgICAgICAgICAgQ2xhc3MgYzsN CiAgICAgICAgICAgICAgICBpZiAoY2xhc3NwYXRoICE9IG51bGwpIHsNCiAgICAgICAgICAgICAg ICAgICAgbG9hZGVyID0gbmV3IEFudENsYXNzTG9hZGVyKHByb2plY3QsIGNsYXNzcGF0aCk7DQog ICAgICAgICAgICAgICAgICAgIGMgPSBsb2FkZXIubG9hZENsYXNzKCJvcmFjbGUuamRiYy5kcml2 ZXIuT3JhY2xlU3FsIik7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAg ICAgICAgYyA9IENsYXNzLmZvck5hbWUoIm9yYWNsZS5qZGJjLmRyaXZlci5PcmFjbGVTcWwiKTsN CiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgc3FsOTJwYXJzZXIgPSBjLmdldE1l dGhvZCgicGFyc2UiLCBuZXcgQ2xhc3NbXSB7ICIiLmdldENsYXNzKCkgfSk7DQogICAgICAgICAg ICANCiAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7IA0KICAgICAgICAgICAgICAg IGxvZygiQ291bGQgbm90IGxvYWQgU1FMOTItcGFyc2VyIGZvciBPcmFjbGUuIFBhcnNlciBkaXNh YmxlZCEiLCBQcm9qZWN0Lk1TR19WRVJCT1NFKTsNCiAgICAgICAgICAgICAgICBzcWw5MnBhcnNl ciA9IG51bGw7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KDQogICAgICAgIHRyeSB7DQog ICAgICAgICAgICBQcm9wZXJ0aWVzIGluZm8gPSBuZXcgUHJvcGVydGllcygpOw0KICAgICAgICAg ICAgaW5mby5wdXQoInVzZXIiLCB1c2VySWQpOw0KICAgICAgICAgICAgaW5mby5wdXQoInBhc3N3 b3JkIiwgcGFzc3dvcmQpOw0KDQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgIGlm IChzaWQgIT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICBsb2coImNvbm5lY3RpbmcgdG8g IiArIHNpZCwgUHJvamVjdC5NU0dfVkVSQk9TRSApOw0KICAgICAgICAgICAgICAgICAgICBjb25u ID0gZHJpdmVySW5zdGFuY2UuY29ubmVjdCgiamRiYzpvcmFjbGU6b2NpODpAIiArIHNpZCwgaW5m byk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUp IHsNCiAgICAgICAgICAgICAgICBsb2coIkNvdWxkIG5vdCBjb25uZWN0IHRvIFNJRCwgbm93IHRy eWluZyBVUkwuIiwgUHJvamVjdC5NU0dfVkVSQk9TRSApOw0KICAgICAgICAgICAgfQ0KICAgICAg ICAgICAgDQogICAgICAgICAgICBpZiAoY29ubiA9PSBudWxsICYmIHVybCAhPSBudWxsKSB7DQog ICAgICAgICAgICAgICAgbG9nKCJjb25uZWN0aW5nIHRvICIgKyB1cmwsIFByb2plY3QuTVNHX1ZF UkJPU0UgKTsNCiAgICAgICAgICAgICAgICBjb25uID0gZHJpdmVySW5zdGFuY2UuY29ubmVjdCh1 cmwsIGluZm8pOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoY29ubiA9PSBudWxs KSB7DQogICAgICAgICAgICAgICAgLy8gRHJpdmVyIGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGUgVVJM IG9yIFNJRA0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24oIk5vIHN1aXRh YmxlIERyaXZlciBmb3IgY29ubmVjdGluZyB0byBkYXRhYmFzZS4iKTsNCiAgICAgICAgICAgIH0N Cg0KICAgICAgICAgICAgaWYgKCFpc1ZhbGlkUmRibXMoY29ubikpIHJldHVybjsNCg0KICAgICAg ICAgICAgY29ubi5zZXRBdXRvQ29tbWl0KGF1dG9jb21taXQpOw0KDQogICAgICAgICAgICBzdGF0 ZW1lbnQgPSBjb25uLmNyZWF0ZVN0YXRlbWVudCgpOw0KICAgICAgICAgICAgc3RhdGVtZW50LnNl dEVzY2FwZVByb2Nlc3NpbmcoZmFsc2UpOw0KDQogICAgICAgICAgICBQcmludFN0cmVhbSBvdXQg PSBTeXN0ZW0ub3V0Ow0KICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICBpZiAob3V0 cHV0ICE9IG51bGwpIHsNCiAgICAgICAgICAgICAgICAgICAgbG9nKCJPcGVuaW5nIFByaW50U3Ry ZWFtIHRvIG91dHB1dCBmaWxlICIgKyBvdXRwdXQsIFByb2plY3QuTVNHX1ZFUkJPU0UpOw0KICAg ICAgICAgICAgICAgICAgICBvdXQgPSBuZXcgUHJpbnRTdHJlYW0obmV3IEJ1ZmZlcmVkT3V0cHV0 U3RyZWFtKG5ldyBGaWxlT3V0cHV0U3RyZWFtKG91dHB1dCkpKTsNCiAgICAgICAgICAgICAgICB9 DQoNCiAgICAgICAgICAgICAgICAvLyBQcm9jZXNzIGFsbCB0cmFuc2FjdGlvbnMNCiAgICAgICAg ICAgICAgICBmb3IgKEVudW1lcmF0aW9uIGUgPSB0cmFuc2FjdGlvbnMuZWxlbWVudHMoKTsNCiAg ICAgICAgICAgICAgICAgICAgZS5oYXNNb3JlRWxlbWVudHMoKTspIHsNCg0KICAgICAgICAgICAg ICAgICAgICAoKFRyYW5zYWN0aW9uKSBlLm5leHRFbGVtZW50KCkpLnJ1blRyYW5zYWN0aW9uKG91 dCk7DQogICAgICAgICAgICAgICAgICAgIGlmICghYXV0b2NvbW1pdCkgew0KICAgICAgICAgICAg ICAgICAgICAgICAgbG9nKCJDb21taXRpbmcgdHJhbnNhY3Rpb24iLCBQcm9qZWN0Lk1TR19WRVJC T1NFKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4uY29tbWl0KCk7DQogICAgICAgICAg ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGZpbmFsbHkgew0K ICAgICAgICAgICAgICAgIGlmIChvdXQgIT0gbnVsbCAmJiBvdXQgIT0gU3lzdGVtLm91dCkgew0K ICAgICAgICAgICAgICAgICAgICBvdXQuY2xvc2UoKTsNCiAgICAgICAgICAgICAgICB9DQogICAg ICAgICAgICB9DQogICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsNCiAgICAgICAgICAgIGlm ICghYXV0b2NvbW1pdCAmJiBjb25uICE9IG51bGwgJiYgb25FcnJvci5lcXVhbHMoImFib3J0Iikp IHsNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICBjb25uLnJvbGxi YWNrKCk7DQogICAgICAgICAgICAgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGV4KSB7fQ0KICAg ICAgICAgICAgfQ0KICAgICAgICAgICAgdGhyb3cgbmV3IEJ1aWxkRXhjZXB0aW9uKGUsIGxvY2F0 aW9uKTsNCiAgICAgICAgfSBmaW5hbGx5IHsNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAg ICAgICAgaWYgKHN0YXRlbWVudCAhPSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgIHN0YXRl bWVudC5jbG9zZSgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoY29u biAhPSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsNCiAgICAgICAg ICAgICAgICB9DQogICAgICAgICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkge30NCiAgICAg ICAgfQ0KICAgICAgICBsb2coZ29vZFNxbCArICIgb2YgIiArIHRvdGFsU3FsICsNCiAgICAgICAg ICAgICIgU1FMIHN0YXRlbWVudHMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Iik7DQogICAgfQ0KICAg IA0KICAgIA0KICAgIC8qKg0KICAgICAqICBTdHJpcHMgIi8qIi1jb21tZW50cyBmcm9tIHRoZSBi ZWdpbm5pbmcgKGFuZCBvbmx5IHRoZSBiZWdpbm5pbmcpDQogICAgICogIG9mZiBhIGxpbmUuIA0K ICAgICAqLw0KICAgIHByaXZhdGUgU3RyaW5nIHN0cmlwQ29tbWVudHMoU3RyaW5nIHMpIHsNCg0K ICAgICAgICBTdHJpbmcgdGVtcCA9IHM7DQogICAgICAgIHdoaWxlKCh0ZW1wLnRyaW0oKS5zdGFy dHNXaXRoKCIvKiIpKSAmJiB0ZW1wLnRyaW0oKS5pbmRleE9mKCIqLyIpID49IDIgKSB7DQogICAg ICAgICAgICBpbnQgcG9zPXRlbXAuaW5kZXhPZigiKi8iKSArIDI7DQogICAgICAgICAgICBpZiAo cG9zID49IHRlbXAubGVuZ3RoKCkpIHJldHVybiBuZXcgU3RyaW5nKCIiKTsNCiAgICAgICAgICAg IHRlbXAgPSB0ZW1wLnN1YnN0cmluZyhwb3MsIHRlbXAubGVuZ3RoKCkpOyANCiAgICAgICAgfQ0K ICAgICAgICByZXR1cm4gdGVtcDsNCiAgICB9DQoNCg0KICAgIHByb3RlY3RlZCB2b2lkIHJ1blN0 YXRlbWVudHMoUmVhZGVyIHJlYWRlciwgUHJpbnRTdHJlYW0gb3V0LCBGaWxlIHBhcmVudCkgdGhy b3dzIFNRTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gew0KICAgICAgICBCdWZmZXJlZFJlYWRlciBp biA9IG5ldyBCdWZmZXJlZFJlYWRlcihyZWFkZXIpOw0KICAgICAgICBTdHJpbmdCdWZmZXIgc2Ig PSBuZXcgU3RyaW5nQnVmZmVyKCk7DQogICAgICAgIFN0cmluZyBjb21tYW5kID0gbnVsbDsNCiAg ICAgICAgaW50IHdhaXRpbmdmb3JzbGFzaCA9IF9OVUxMOw0KICAgICAgICBTdHJpbmcgbGluZTsN CiAgICAgICAgYm9vbGVhbiBpbm11bHRpbGluZWNvbW1lbnQgPSBmYWxzZTsgICAgICAgIA0KDQog ICAgICAgIC8qIGxvb3AgdGhyb3VnaCBhbGwgbGluZXMgKi8NCiAgICAgICAgd2hpbGUgKChsaW5l ID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCkgew0KCSAgICBsaW5lPWxpbmUgPSBvcmcuYXBhY2hl LnRvb2xzLmFudC5Qcm9qZWN0SGVscGVyLnJlcGxhY2VQcm9wZXJ0aWVzKHByb2plY3QsIGxpbmUu dHJpbSgpLCBwcm9qZWN0LmdldFByb3BlcnRpZXMoKSk7DQogICAgICAgICAgICBpZiAoc2IubGVu Z3RoKCk9PTApIHsNCiAgICAgICAgICAgICAgICBsaW5lID0gc3RyaXBDb21tZW50cygoaW5tdWx0 aWxpbmVjb21tZW50KT8iLyoiK2xpbmU6bGluZSk7DQogICAgICAgICAgICAgICAgaWYgKGlubXVs dGlsaW5lY29tbWVudCA9IGxpbmUudHJpbSgpLnN0YXJ0c1dpdGgoIi8qIikpIHsNCiAgICAgICAg ICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0K ICAgICAgICAgICAgICANCiAgICAgICAgICAgIFN0cmluZyBjaGVjayA9IGxpbmUudHJpbSgpLnRv TG93ZXJDYXNlKCk7DQogICAgICAgICAgICBTdHJpbmcgZmlyc3R3b3JkID0gKGNoZWNrLmluZGV4 T2YoIiAiKSAhPSAtMSk/Y2hlY2suc3Vic3RyaW5nKDAsIGNoZWNrLmluZGV4T2YoIiAiKSk6IiI7 DQogICAgICAgICAgICBpZiAoc2IubGVuZ3RoKCk9PTApIHsNCiAgICAgICAgICAgICAgICBpZiAo ZXF1YWxzRXhwYW5kU3RyaW5nKGZpcnN0d29yZCwgImV4ZWNbdXRlXSIpfHxmaXJzdHdvcmQuZXF1 YWxzKCJjYWxsIikpIHsNCiAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUudHJpbSgpOw0K ICAgICAgICAgICAgICAgICAgICBpZiAobGluZS5lbmRzV2l0aCgiOyIpKSB7DQogICAgICAgICAg ICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdWJzdHJpbmcoMCwgbGluZS5sYXN0SW5kZXhPZigi OyIpKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBjb21tYW5k ID0gIntjYWxsICIgKyBsaW5lLnN1YnN0cmluZyhsaW5lLmluZGV4T2YoIiAiKSArIDEpICsgIn0i Ow0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGlmKGNoZWNr LnN0YXJ0c1dpdGgoIkAiKSB8fCBlcXVhbHNFeHBhbmRTdHJpbmcoZmlyc3R3b3JkLCAic3RhW3J0 XSIpKSB7IA0KICAgICAgICAgICAgICAgICAgICAgICAgLyogTGF1bmNoIG90aGVyIGZpbGVzLg0K ICAgICAgICAgICAgICAgICAgICAgICAgICogRmlyc3QgcmV0cmlldmUgdGhlIHByb3BlciBmaWxl bmFtZS4NCiAgICAgICAgICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgICAgICAg ICBTdHJpbmcgcyA9IGxpbmUudHJpbSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJG aWxlIGZvdW5kIGluIHNvdXJjZWZpbGU6ICIgKyBzLCBQcm9qZWN0Lk1TR19WRVJCT1NFKTsNCiAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChzLmluZGV4T2YoIjsiKSAhPSAtMSApIHsNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzID0gcy5zdWJzdHJpbmcoMCwgcy5pbmRleE9mKCI7Iikp Ow0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgLyog TW92ZSAic3RhcnQiLCAiQCIgb3IgIkBAIiBvdXQgb2YgdGhlIHdheQ0KICAgICAgICAgICAgICAg ICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdHdvcmQuc3RhcnRz V2l0aCgic3RhIikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gcy5zdWJzdHJp bmcocy5pbmRleE9mKCIgIikrMSkudHJpbSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBl bHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gcy5zdWJzdHJpbmcocy5sYXN0 SW5kZXhPZigiQCIpKzEpLnRyaW0oKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg ICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgdGhlIGxp bmUgc3RhcnRlZCB3aXRoICJAQCIgdGhlIGZpbGVuYW1lIGlzDQogICAgICAgICAgICAgICAgICAg ICAgICAgKiByZWxhdGl2ZSB0byB0aGUgcGFyZW50LWZpbGUuIE90aGVyd2lzZSB0aGUgZmlsZQ0K ICAgICAgICAgICAgICAgICAgICAgICAgICogaXMgcmVsYXRpdmUgdG8gdGhlIHdvcmtkaXJlY3Rv cnkuDQogICAgICAgICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgICAgICAgICAg RmlsZSBzb3VyY2VmaWxlID0gbnVsbDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJl bnQgIT0gbnVsbCAmJiBjaGVjay5zdGFydHNXaXRoKCJAQCIpKSB7DQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgc291cmNlZmlsZSA9IG5ldyBGaWxlKHBhcmVudCwgcyk7DQogICAgICAgICAg ICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJj ZWZpbGUgPSBuZXcgRmlsZShzKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg ICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uIHQgPSBuZXcgVHJhbnNhY3Rpb24oKTsNCiAgICAg ICAgICAgICAgICAgICAgICAgIHQuc2V0U3JjKHNvdXJjZWZpbGUpOw0KICAgICAgICAgICAgICAg ICAgICAgICAgbG9nKCJFeGVjdXRpbmcgZmlsZSBpbiBzb3VyY2VmaWxlIDoiLCBQcm9qZWN0Lk1T R19WRVJCT1NFKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHQucnVuVHJhbnNhY3Rpb24ob3V0 KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4uY29tbWl0KCk7DQogICAgICAgICAgICAg ICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAg ICAgICAgICAgICAgICAgICAgIGlmICgoY29tbWFuZCA9IHRyYW5zbGF0ZVNRTFBsdXMobGluZSkp ID09IG51bGwpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjaGVjay5lcXVhbHMo IiIpfHxzaG91bGRJZ25vcmUoY2hlY2spKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0g DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICBpZiAo Y29tbWFuZCA9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgLyogSWdub3JlIGJsb2NrLXRlcm1p bmF0b3IgKi8gICAgICAgIA0KICAgICAgICAgICAgICAgIGlmKHdhaXRpbmdmb3JzbGFzaCA9PSBf VFJVRSAmJiBjaGVjay5lcXVhbHMoIi4iKSkgew0KICAgICAgICAgICAgICAgICAgICBjb250aW51 ZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYobGluZS5lcXVhbHMoIi8i KSl7DQogICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBzYi5hcHBlbmQoJ1xuJykudG9TdHJp bmcoKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgc2IuYXBwZW5kKGxpbmUp LmFwcGVuZCgnXG4nKTsNCiAgICAgICAgICAgICAgICBpZihjaGVjay5pbmRleE9mKCI7IikgIT0g LTEpIHsNCiAgICAgICAgICAgICAgICAgICAgLyogd2hlbiB0aGUgZmlyc3QgOyBjb21lcyBpbiB3 ZSBjYW4gZGV0ZXJtaW5lIHRoZQ0KICAgICAgICAgICAgICAgICAgICAgKiBzb3J0IG9mIGJsb2Nr IHdlIGFyZSBkZWFsaW5nIHdpdGggDQogICAgICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAg ICAgICAgICAgICBpZiAod2FpdGluZ2ZvcnNsYXNoID09IF9OVUxMKSB7DQogICAgICAgICAgICAg ICAgICAgICAgICAvKiBkZXRlcm1pbmUgdHlwZSAqLw0KICAgICAgICAgICAgICAgICAgICAgICAg d2FpdGluZ2ZvcnNsYXNoID0gZGV0ZXJtaW5lQmxvY2tUeXBlKHNiLnRvU3RyaW5nKCkpOw0KICAg ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmICh3YWl0aW5nZm9yc2xh c2ggPT0gX0ZBTFNFICAmJiBsaW5lLnRyaW0oKS5lbmRzV2l0aCgiOyIpKSB7DQogICAgICAgICAg ICAgICAgICAgICAgICBjb21tYW5kID0gc2IudG9TdHJpbmcoKS50cmltKCk7DQogICAgICAgICAg ICAgICAgICAgICAgICBpZiAoY29tbWFuZC5lbmRzV2l0aCgiOyIpKSB7DQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29tbWFuZCA9IGNvbW1hbmQuc3Vic3RyaW5nKDAsIGNvbW1hbmQubGVu Z3RoKCkgLSAxKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAg ICAgICAgIGNvbW1hbmQgPSBjb21tYW5kICsgJ1xuJzsNCiAgICAgICAgICAgICAgICAgICAgfQ0K ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChjb21tYW5k ICE9IG51bGwpIHsNCiAgICAgICAgICAgICAgIGV4ZWNTUUwoY29tbWFuZCwgb3V0KTsNCiAgICAg ICAgICAgICAgIGNvbW1hbmQgPSBudWxsOw0KICAgICAgICAgICAgICAgc2Iuc2V0TGVuZ3RoKDAp Ow0KICAgICAgICAgICAgICAgd2FpdGluZ2ZvcnNsYXNoID0gX05VTEw7DQogICAgICAgICAgICB9 DQogICAgICAgIH0NCiAgICB9DQoNCg0KICAgIC8qKg0KICAgICAqIFZlcmlmeSBpZiBjb25uZWN0 ZWQgdG8gdGhlIGNvcnJlY3QgUkRCTVMNCiAgICAgKi8NCiAgICBwcm90ZWN0ZWQgYm9vbGVhbiBp c1ZhbGlkUmRibXMoQ29ubmVjdGlvbiBjb25uKSB7DQogICAgICAgIGlmIChyZGJtcyA9PSBudWxs ICYmIHZlcnNpb24gPT0gbnVsbCkNCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KDQogICAgICAg IHRyeSB7DQogICAgICAgICAgICBEYXRhYmFzZU1ldGFEYXRhIGRtZCA9IGNvbm4uZ2V0TWV0YURh dGEoKTsNCg0KICAgICAgICAgICAgaWYgKHJkYm1zICE9IG51bGwpIHsNCiAgICAgICAgICAgICAg ICBTdHJpbmcgdGhlVmVuZG9yID0gZG1kLmdldERhdGFiYXNlUHJvZHVjdE5hbWUoKS50b0xvd2Vy Q2FzZSgpOw0KDQogICAgICAgICAgICAgICAgbG9nKCJSREJNUyA9ICIgKyB0aGVWZW5kb3IsIFBy b2plY3QuTVNHX1ZFUkJPU0UpOw0KICAgICAgICAgICAgICAgIGlmICh0aGVWZW5kb3IgPT0gbnVs bCB8fCB0aGVWZW5kb3IuaW5kZXhPZihyZGJtcykgPCAwKSB7DQogICAgICAgICAgICAgICAgICAg IGxvZygiTm90IHRoZSByZXF1aXJlZCBSREJNUzogIityZGJtcywgUHJvamVjdC5NU0dfVkVSQk9T RSk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICB9 DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmICh2ZXJzaW9uICE9IG51bGwpIHsNCiAg ICAgICAgICAgICAgICBTdHJpbmcgdGhlVmVyc2lvbiA9IGRtZC5nZXREYXRhYmFzZVByb2R1Y3RW ZXJzaW9uKCkudG9Mb3dlckNhc2UoKTsNCg0KICAgICAgICAgICAgICAgIGxvZygiVmVyc2lvbiA9 ICIgKyB0aGVWZXJzaW9uLCBQcm9qZWN0Lk1TR19WRVJCT1NFKTsNCiAgICAgICAgICAgICAgICBp ZiAodGhlVmVyc2lvbiA9PSBudWxsIHx8DQogICAgICAgICAgICAgICAgICAgICAgICAhKHRoZVZl cnNpb24uc3RhcnRzV2l0aCh2ZXJzaW9uKSB8fA0KICAgICAgICAgICAgICAgICAgICAgICAgICB0 aGVWZXJzaW9uLmluZGV4T2YoIiAiICsgdmVyc2lvbikgPj0gMCkpIHsNCiAgICAgICAgICAgICAg ICAgICAgbG9nKCJOb3QgdGhlIHJlcXVpcmVkIHZlcnNpb246IFwiIisgdmVyc2lvbiArIlwiIiwg UHJvamVjdC5NU0dfVkVSQk9TRSk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsN CiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0gY2F0Y2ggKFNRTEV4 Y2VwdGlvbiBlKSB7DQogICAgICAgICAgICAvLyBDb3VsZCBub3QgZ2V0IHRoZSByZXF1aXJlZCBp bmZvcm1hdGlvbg0KICAgICAgICAgICAgbG9nKCJGYWlsZWQgdG8gb2J0YWluIHJlcXVpcmVkIFJE Qk1TIGluZm9ybWF0aW9uIiwgUHJvamVjdC5NU0dfRVJSKTsNCiAgICAgICAgICAgIHJldHVybiBm YWxzZTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCg0KICAgIC8q Kg0KICAgICAqIEV4ZWMgdGhlIHNxbCBzdGF0ZW1lbnQuDQogICAgICovDQogICAgcHJvdGVjdGVk IHZvaWQgZXhlY1NRTChTdHJpbmcgc3FsLCBQcmludFN0cmVhbSBvdXQpIHRocm93cyBTUUxFeGNl cHRpb24gew0KICAgICAgICAvLyBDaGVjayBhbmQgaWdub3JlIGVtcHR5IHN0YXRlbWVudHMNCiAg ICAgICAgaWYgKCIiLmVxdWFscyhzcWwudHJpbSgpKSkgcmV0dXJuOw0KDQogICAgICAgIFN0cmlu ZyBjb21tYW5kID0gc3FsOw0KICAgICAgICBpZiAoc3FsOTJwYXJzZXIgIT0gbnVsbCkgew0KICAg ICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICBjb21tYW5kID0gKFN0cmluZylzcWw5MnBh cnNlci5pbnZva2Uoc3FsOTJwYXJzZXIuZ2V0RGVjbGFyaW5nQ2xhc3MoKS5uZXdJbnN0YW5jZSgp LCBuZXcgT2JqZWN0W10geyBzcWwgfSApOw0KICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9u IGUpIHsNCiAgICAgICAgICAgICAgICAvLyBQYXJzaW5nIGZhaWxlZC4gRmFsbGJhY2sgdG8gaW5w dXQtc3RyaW5nDQogICAgICAgICAgICAgICAgY29tbWFuZCA9IHNxbDsNCiAgICAgICAgICAgIH0N CiAgICAgICAgfQ0KICAgICAgICANCg0KICAgICAgICB0cnkgew0KICAgICAgICAgICAgdG90YWxT cWwrKzsNCiAgICAgICAgICAgIGlmICghc3RhdGVtZW50LmV4ZWN1dGUoY29tbWFuZCkpIHsNCiAg ICAgICAgICAgICAgICBsb2coc3RhdGVtZW50LmdldFVwZGF0ZUNvdW50KCkrIiByb3dzIGFmZmVj dGVkIiwNCiAgICAgICAgICAgICAgICAgICAgUHJvamVjdC5NU0dfVkVSQk9TRSk7DQogICAgICAg ICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGlmIChwcmludCkgew0KICAgICAgICAgICAg ICAgICAgICBwcmludFJlc3VsdHMob3V0LCBzaG93aGVhZGVycyk7DQogICAgICAgICAgICAgICAg fQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBTUUxXYXJuaW5nIHdhcm5pbmcgPSBjb25u LmdldFdhcm5pbmdzKCk7DQogICAgICAgICAgICB3aGlsZSh3YXJuaW5nIT1udWxsKSB7DQogICAg ICAgICAgICAgICAgbG9nKHdhcm5pbmcgKyAiIHNxbCB3YXJuaW5nIiwgUHJvamVjdC5NU0dfVkVS Qk9TRSk7DQogICAgICAgICAgICAgICAgd2FybmluZz13YXJuaW5nLmdldE5leHRXYXJuaW5nKCk7 DQogICAgICAgICAgICB9DQogICAgICAgICAgICBjb25uLmNsZWFyV2FybmluZ3MoKTsNCiAgICAg ICAgICAgIGdvb2RTcWwrKzsNCiAgICAgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsNCiAg ICAgICAgICAgIGxvZygiRmFpbGVkIHRvIGV4ZWN1dGU6ICIgKyBjb21tYW5kLCBQcm9qZWN0Lk1T R19FUlIpOw0KICAgICAgICAgICAgaWYgKCFvbkVycm9yLmVxdWFscygiY29udGludWUiKSkgdGhy b3cgZTsNCiAgICAgICAgICAgIGxvZyhlLnRvU3RyaW5nKCksIFByb2plY3QuTVNHX0VSUik7DQog ICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIA0KICAgICAgICANCiAgICAgICAgaWYgKHByaW50 KSB7DQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgIHdoaWxlKHRydWUpIHsNCiAg ICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmV4ZWN1dGUoInNlbGVjdCBkYm1zX291dHB1dDIo KSBmcm9tIGR1YWwiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50UmVzdWx0cyhvdXQs IGZhbHNlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlv biBlKSB7fQ0KICAgICAgICB9DQoNCiAgICAgICAgDQogICAgICAgIA0KICAgIH0NCg0KICAgIC8q Kg0KICAgICAqIHByaW50IGFueSByZXN1bHRzIGluIHRoZSBzdGF0ZW1lbnQuDQogICAgICovDQog ICAgcHJvdGVjdGVkIHZvaWQgcHJpbnRSZXN1bHRzKFByaW50U3RyZWFtIG91dCwgYm9vbGVhbiBz aG93aGVhZGVyKSB0aHJvd3MgamF2YS5zcWwuU1FMRXhjZXB0aW9uIHsNCiAgICAgICAgUmVzdWx0 U2V0IHJzID0gbnVsbDsNCiAgICAgICAgZG8gew0KICAgICAgICAgICAgcnMgPSBzdGF0ZW1lbnQu Z2V0UmVzdWx0U2V0KCk7DQogICAgICAgICAgICBpZiAocnMgIT0gbnVsbCkgew0KICAgICAgICAg ICAgICAgIGxvZygiUHJvY2Vzc2luZyBuZXcgcmVzdWx0IHNldC4iLCBQcm9qZWN0Lk1TR19WRVJC T1NFKTsNCiAgICAgICAgICAgICAgICBSZXN1bHRTZXRNZXRhRGF0YSBtZCA9IHJzLmdldE1ldGFE YXRhKCk7DQogICAgICAgICAgICAgICAgaW50IGNvbHVtbkNvdW50ID0gbWQuZ2V0Q29sdW1uQ291 bnQoKTsNCiAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgbGluZSA9IG5ldyBTdHJpbmdCdWZm ZXIoKTsNCiAgICAgICAgICAgICAgICBpZiAoc2hvd2hlYWRlcikgew0KICAgICAgICAgICAgICAg ICAgICBmb3IgKGludCBjb2wgPSAxOyBjb2wgPCBjb2x1bW5Db3VudDsgY29sKyspIHsNCiAgICAg ICAgICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kKG1kLmdldENvbHVtbk5hbWUoY29sKSk7DQog ICAgICAgICAgICAgICAgICAgICAgICBsaW5lLmFwcGVuZCgiLCIpOw0KICAgICAgICAgICAgICAg ICAgICB9DQogICAgICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kKG1kLmdldENvbHVtbk5hbWUo Y29sdW1uQ291bnQpKTsNCiAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4obGluZSk7DQog ICAgICAgICAgICAgICAgICAgIGxpbmUuc2V0TGVuZ3RoKDApOw0KICAgICAgICAgICAgICAgIH0N CiAgICAgICAgICAgICAgICB3aGlsZSAocnMubmV4dCgpKSB7DQogICAgICAgICAgICAgICAgICAg IGJvb2xlYW4gZmlyc3QgPSB0cnVlOw0KICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wg PSAxOyBjb2wgPD0gY29sdW1uQ291bnQ7IGNvbCsrKSB7DQogICAgICAgICAgICAgICAgICAgICAg ICBTdHJpbmcgY29sdW1uVmFsdWUgPSBycy5nZXRTdHJpbmcoY29sKTsNCiAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChjb2x1bW5WYWx1ZSAhPSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29sdW1uVmFsdWUgPSBjb2x1bW5WYWx1ZS50cmltKCk7DQogICAgICAgICAgICAg ICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdCkgew0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7DQogICAgICAgICAgICAgICAg ICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5k KCIsIik7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAg ICBsaW5lLmFwcGVuZChjb2x1bW5WYWx1ZSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAg ICAgICAgICAgICAgICAgb3V0LnByaW50bG4obGluZSk7DQogICAgICAgICAgICAgICAgICAgIGxp bmUuc2V0TGVuZ3RoKDApOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAg ICAgfSB3aGlsZSAoc3RhdGVtZW50LmdldE1vcmVSZXN1bHRzKCkpOw0KICAgICAgICBvdXQucHJp bnRsbigiXG4iKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBFbnVtZXJhdGVkIGF0dHJpYnV0 ZSB3aXRoIHRoZSB2YWx1ZXMgImNvbnRpbnVlIiwgInN0b3AiIGFuZCAiYWJvcnQiDQogICAgICog Zm9yIHRoZSBvbmVycm9yIGF0dHJpYnV0ZS4NCiAgICAgKi8NCiAgICBwdWJsaWMgc3RhdGljIGNs YXNzIE9uRXJyb3IgZXh0ZW5kcyBFbnVtZXJhdGVkQXR0cmlidXRlIHsNCiAgICAgICAgcHVibGlj IFN0cmluZ1tdIGdldFZhbHVlcygpIHsNCiAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nW10g eyJjb250aW51ZSIsICJzdG9wIiwgImFib3J0In07DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAv KioNCiAgICAgKiBDb250YWlucyB0aGUgZGVmaW5pdGlvbiBvZiBhIG5ldyB0cmFuc2FjdGlvbiBl bGVtZW50Lg0KICAgICAqIFRyYW5zYWN0aW9ucyBhbGxvdyBzZXZlcmFsIGZpbGVzIG9yIGJsb2Nr cyBvZiBzdGF0ZW1lbnRzDQogICAgICogdG8gYmUgZXhlY3V0ZWQgdXNpbmcgdGhlIHNhbWUgSkRC QyBjb25uZWN0aW9uIGFuZCBjb21taXQNCiAgICAgKiBvcGVyYXRpb24gaW4gYmV0d2Vlbi4NCiAg ICAgKi8NCiAgICBwdWJsaWMgY2xhc3MgVHJhbnNhY3Rpb24gew0KICAgICAgICBwcml2YXRlIEZp bGUgdFNyY0ZpbGUgPSBudWxsOw0KICAgICAgICBwcml2YXRlIFN0cmluZyB0U3FsQ29tbWFuZCA9 ICIiOw0KDQogICAgICAgIHB1YmxpYyB2b2lkIHNldFNyYyhGaWxlIHNyYykgew0KICAgICAgICAg ICAgdGhpcy50U3JjRmlsZSA9IHNyYzsNCiAgICAgICAgfQ0KDQogICAgICAgIHB1YmxpYyB2b2lk IGFkZFRleHQoU3RyaW5nIHNxbCkgew0KICAgICAgICAgICAgdGhpcy50U3FsQ29tbWFuZCArPSBz cWw7DQogICAgICAgIH0NCg0KICAgICAgICBwcml2YXRlIHZvaWQgcnVuVHJhbnNhY3Rpb24oUHJp bnRTdHJlYW0gb3V0KSB0aHJvd3MgSU9FeGNlcHRpb24sIFNRTEV4Y2VwdGlvbiB7DQogICAgICAg ICAgICBpZiAodFNxbENvbW1hbmQubGVuZ3RoKCkgIT0gMCkgew0KICAgICAgICAgICAgICAgIGxv ZygiRXhlY3V0aW5nIGNvbW1hbmRzIiwgUHJvamVjdC5NU0dfSU5GTyk7DQogICAgICAgICAgICAg ICAgcnVuU3RhdGVtZW50cyhuZXcgU3RyaW5nUmVhZGVyKHRTcWxDb21tYW5kKSwgb3V0LCBudWxs KTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKHRTcmNGaWxlICE9IG51bGwpIHsN CiAgICAgICAgICAgICAgICBsb2coIkV4ZWN1dGluZyBmaWxlOiAiICsgdFNyY0ZpbGUuZ2V0QWJz b2x1dGVQYXRoKCksDQogICAgICAgICAgICAgICAgICAgIFByb2plY3QuTVNHX0lORk8pOw0KICAg ICAgICAgICAgICAgIFJlYWRlciByZWFkZXIgPSAoZW5jb2RpbmcgPT0gbnVsbCkgPyBuZXcgRmls ZVJlYWRlcih0U3JjRmlsZSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDogbmV3IElucHV0U3RyZWFtUmVhZGVyKG5ldyBGaWxlSW5wdXRTdHJlYW0o dFNyY0ZpbGUpLCBlbmNvZGluZyk7DQogICAgICAgICAgICAgICAgcnVuU3RhdGVtZW50cyhyZWFk ZXIsIG91dCwgdFNyY0ZpbGUuZ2V0UGFyZW50RmlsZSgpKTsNCiAgICAgICAgICAgICAgICByZWFk ZXIuY2xvc2UoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCn0NCg0K ------_=_NextPart_001_01C1C8DD.B3296D02 Content-Type: application/octet-stream; name="Wrap.java" Content-Transfer-Encoding: base64 Content-Description: Wrap.java Content-Disposition: attachment; filename="Wrap.java" DQoNCnBhY2thZ2Ugb3JnLmFwYWNoZS50b29scy5hbnQudGFza2RlZnM7DQoNCg0KDQppbXBvcnQg b3JnLmFwYWNoZS50b29scy5hbnQuKjsNCg0KaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LnR5 cGVzLio7DQoNCg0KDQppbXBvcnQgamF2YS51dGlsLlZlY3RvcjsNCg0KaW1wb3J0IGphdmEuaW8u RmlsZTsNCg0KaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQoNCg0KDQovKioNCg0KICogRXhl Y3V0ZXMgYSBnaXZlbiBjb21tYW5kLCBzdXBwbHlpbmcgYSBzZXQgb2YgZmlsZXMgYXMgYXJndW1l bnRzLiANCg0KICoNCg0KICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86c3RlZmFuLmJvZGV3aWdA ZXBvc3QuZGUiPlN0ZWZhbiBCb2Rld2lnPC9hPiANCg0KICogQGF1dGhvciA8YSBocmVmPSJtYWls dG86bWFyaXVzekByYWtpdXJhLm9yZyI+TWFyaXVzeiBOb3dvc3Rhd3NraTwvYT4gDQoNCiAqLw0K DQpwdWJsaWMgY2xhc3MgV3JhcCBleHRlbmRzIEV4ZWNUYXNrIHsNCg0KDQogICAgcHVibGljIGZp bmFsIHN0YXRpYyBTdHJpbmcgQ1ZTcmNzZmlsZSAgPSAiJFJDU2ZpbGU6IFdyYXAuamF2YSx2ICQi Ow0KICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIENWU3JldmlzaW9uID0gIiRSZXZpc2lv bjogMS4zICQiOw0KICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIENWU2RhdGUgICAgID0g IiREYXRlOiAyMDAxLzA5LzI1IDE1OjUwOjQ5ICQiOw0KICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMg U3RyaW5nIENWU2F1dGhvciAgID0gIiRBdXRob3I6IGphZCAkIjsNCiAgICBwdWJsaWMgZmluYWwg c3RhdGljIFN0cmluZyBDVlNjb21tZW50ICA9ICJTcGVjaWFsIHZlcnNpb24gb2YgRXhlY09uIHRh c2sgdG8gaGFuZGxlIE9yYWNsZSB3cmFwIjsNCg0KDQogICAgcHJvdGVjdGVkIFZlY3RvciBmaWxl c2V0cyA9IG5ldyBWZWN0b3IoKTsNCg0KICAgIHByb3RlY3RlZCBTdHJpbmcgc3JjRmlsZSA9IG51 bGw7DQogICAgcHJvdGVjdGVkIFN0cmluZyBvdXRkaXIgPSAiLiI7DQogICAgcHJvdGVjdGVkIFN0 cmluZyBvcmFjbGVfaG9tZSA9IG51bGw7DQogICAgcHJvdGVjdGVkIENvbW1hbmRsaW5lLk1hcmtl ciBzcmNGaWxlUG9zID0gbnVsbDsNCg0KDQoNCiAgICAvKioNCg0KICAgICAqIEFkZHMgYSBzZXQg b2YgZmlsZXMgKG5lc3RlZCBmaWxlc2V0IGF0dHJpYnV0ZSkuDQoNCiAgICAgKi8NCg0KICAgIHB1 YmxpYyB2b2lkIGFkZEZpbGVzZXQoRmlsZVNldCBzZXQpIHsNCg0KICAgICAgICBmaWxlc2V0cy5h ZGRFbGVtZW50KHNldCk7DQoNCiAgICB9DQoNCgkNCgkvKioNCiAgICAqIFNldCB0aGUgbmFtZSBv ZiB0aGUgc3FsIGZpbGUgdG8gYmUgd3JhcHBlZC4NCiAgICAqLw0KDQoJcHVibGljIHZvaWQgc2V0 U3JjKFN0cmluZyBzcmNGaWxlKSB7DQogICAgICAgIHRoaXMuc3JjRmlsZSA9IHNyY0ZpbGU7DQog ICAgfQ0KDQoJLyoqDQogICAgKiBTZXRzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIHdyYXBwZWQg ZmlsZXMgc2hvdWxkIHJlY2lkZS4NCiAgICAqLw0KDQogICAgICAgIHB1YmxpYyB2b2lkIHNldE91 dGRpcihTdHJpbmcgb3V0ZGlyKSB7DQogICAgICAgIHRoaXMub3V0ZGlyID0gb3V0ZGlyOw0KICAg IH0NCg0KDQogICAJLyoqDQogICAgKiBTZXRzIHRoZSBvcmFjbGVfaG9tZSBkaXJlY3RvcnkuDQog ICAgKi8NCg0KCXB1YmxpYyB2b2lkIHNldE9yYWNsZWhvbWUoU3RyaW5nIG9yYWNsZWhvbWUpIHsN CiAgICAgICAgdGhpcy5vcmFjbGVfaG9tZSA9IG9yYWNsZWhvbWU7DQogICAgfQ0KDQoNCg0KICAg IC8qKg0KDQogICAgICogTWFya2VyIHRoYXQgaW5kaWNhdGVzIHdoZXJlIHRoZSBuYW1lIG9mIHRo ZSBzb3VyY2UgZmlsZSBzaG91bGQNCg0KICAgICAqIGJlIHB1dCBvbiB0aGUgY29tbWFuZCBsaW5l Lg0KDQogICAgICovDQoNCiAgICBwdWJsaWMgQ29tbWFuZGxpbmUuTWFya2VyIGNyZWF0ZVNyY2Zp bGUoKSB7DQoNCiAgICAgICAgaWYgKHNyY0ZpbGVQb3MgIT0gbnVsbCkgew0KDQogICAgICAgICAg ICB0aHJvdyBuZXcgQnVpbGRFeGNlcHRpb24odGFza1R5cGUgKyAiIGRvZXNuXCd0IHN1cHBvcnQg bXVsdGlwbGUgc3JjZmlsZSBlbGVtZW50cy4iLA0KDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbG9jYXRpb24pOw0KDQogICAgICAgIH0NCg0KICAgICAgICBzcmNGaWxlUG9z ID0gY21kbC5jcmVhdGVNYXJrZXIoKTsNCg0KICAgICAgICByZXR1cm4gc3JjRmlsZVBvczsNCg0K ICAgIH0NCg0KDQoNCiAgICBwcm90ZWN0ZWQgdm9pZCBjaGVja0NvbmZpZ3VyYXRpb24oKSB7DQoN CiAgICAgICAgaWYgKGZpbGVzZXRzLnNpemUoKSA9PSAwICYmIHNyY0ZpbGUgPT0gbnVsbCkgew0K DQogICAgICAgICAgICB0aHJvdyBuZXcgQnVpbGRFeGNlcHRpb24oIm5vIHNvdXJjZWZpbGUgb3Ig ZmlsZXNldHMgc3BlY2lmaWVkIiwgbG9jYXRpb24pOw0KDQogICAgICAgIH0NCgkJaWYgKG9yYWNs ZV9ob21lID09IG51bGwpIHsNCg0KICAgICAgICAgICAgdGhyb3cgbmV3IEJ1aWxkRXhjZXB0aW9u KCJvcmFjbGVfaG9tZSBtdXN0IGJlIHNwZWNpZmllZCIsIGxvY2F0aW9uKTsNCg0KICAgICAgICB9 DQogICAgfQ0KDQoNCg0KICAgIHByb3RlY3RlZCB2b2lkIHJ1bkV4ZWMoRXhlY3V0ZSBleGUpIHRo cm93cyBCdWlsZEV4Y2VwdGlvbiB7DQoNCiAgICAgICAgdHJ5IHsNCg0KCQkJaW50IGVyciA9IC0x Ow0KCQkJU3RyaW5nIGNvbW1hbmQgPSBuZXcgU3RyaW5nKG9yYWNsZV9ob21lICsgIi9iaW4vd3Jh cCAiKTsgDQoJCQlTdHJpbmcgaW5hbWUgPSBudWxsOw0KCQkJU3RyaW5nIG9uYW1lID0gbnVsbDsN CgkJCVN0cmluZyBzbGFzaCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiZmlsZS5zZXBhcmF0b3IiKTsJ DQoNCgkJCWlmIChzcmNGaWxlICE9IG51bGwpIHsNCgkJCSAgICBpbmFtZSA9IG5ldyBTdHJpbmco ImluYW1lPSIgKyBzcmNGaWxlICsgIiAiKTsgDQoJCQkJb25hbWUgPSBuZXcgU3RyaW5nKCJvbmFt ZT0iICsgb3V0ZGlyICsgc3JjRmlsZS5zdWJzdHJpbmcoc3JjRmlsZS5sYXN0SW5kZXhPZihzbGFz aCksc3JjRmlsZS5sZW5ndGgoKSAtIDMpICsgInBsYiIpOw0KCQkJCUNvbW1hbmRsaW5lIGNtZGwg PSBuZXcgQ29tbWFuZGxpbmUoY29tbWFuZCArIGluYW1lICsgb25hbWUpOw0KCQkJCWV4ZS5zZXRD b21tYW5kbGluZShjbWRsLmdldENvbW1hbmRsaW5lKCkpOw0KDQogICAgICAgICAgICAgICAgZXJy ID0gZXhlLmV4ZWN1dGUoKTsNCg0KICAgICAgICAgICAgfQ0KDQoJCQlpZiAoZmlsZXNldHMuc2l6 ZSgpICE9IDApIHsJCQkJCQkJCQkJDQoJCSAgICAgICBmb3IgKGludCBpPTA7IGk8ZmlsZXNldHMu c2l6ZSgpOyBpKyspIHsNCg0KICAgICAgICAgICAgICAgICAgIFZlY3RvciB2ID0gbmV3IFZlY3Rv cigpOw0KDQogICAgICAgICAgICAgICAgICAgRmlsZVNldCBmcyA9IChGaWxlU2V0KSBmaWxlc2V0 cy5lbGVtZW50QXQoaSk7DQoNCiAgICAgICAgICAgICAgICAgICBGaWxlIGJhc2UgPSBmcy5nZXRE aXIocHJvamVjdCk7DQoNCiAgICAgICAgICAgICAgICAgICBEaXJlY3RvcnlTY2FubmVyIGRzID0g ZnMuZ2V0RGlyZWN0b3J5U2Nhbm5lcihwcm9qZWN0KTsNCg0KICAgICAgICAgICAgICAgICAgIFN0 cmluZ1tdIHNmID0gZ2V0RmlsZXMoYmFzZSwgZHMpOw0KDQogICAgICAgICAgICAgICAgICAgZm9y IChpbnQgaj0wOyBqPHNmLmxlbmd0aDsgaisrKQ0KDQogICAgICAgICAgICAgICAgICAgICAgIHYu YWRkRWxlbWVudChzZltqXSk7DQoNCiAgICAgICAgICAgICAgIAkgICBTdHJpbmdbXSBzID0gbmV3 IFN0cmluZ1t2LnNpemUoKV07DQoNCiAgICAgICAgICAgICAgICAgICB2LmNvcHlJbnRvKHMpOwkJ CQkgIA0KICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGo9MDsgajxzLmxlbmd0aDsgaisrKSB7 DQoJCQkJICAgICAgIHNyY0ZpbGUgPSAobmV3IEZpbGUoYmFzZSwgc1tqXSkpLmdldEFic29sdXRl UGF0aCgpOw0KCQkJCQkgICBpbmFtZSA9IG5ldyBTdHJpbmcoImluYW1lPSIgKyBzcmNGaWxlICsg IiAiKTsgDQoJCQkJICAJICAgb25hbWUgPSBuZXcgU3RyaW5nKCJvbmFtZT0iICsgb3V0ZGlyICsg c3JjRmlsZS5zdWJzdHJpbmcoc3JjRmlsZS5sYXN0SW5kZXhPZihzbGFzaCksc3JjRmlsZS5sZW5n dGgoKSAtIDMpICsgInBsYiIpOw0KCQkJCQkgICBDb21tYW5kbGluZSBjbWRsID0gbmV3IENvbW1h bmRsaW5lKGNvbW1hbmQgKyBpbmFtZSArIG9uYW1lKTsNCgkJCQkJICAgZXhlLnNldENvbW1hbmRs aW5lKGNtZGwuZ2V0Q29tbWFuZGxpbmUoKSk7DQoNCiAgICAgICAgICAgICAgICAJICAgZXJyID0g ZXhlLmV4ZWN1dGUoKTsNCiAgCQkJCSAgIH0NCgkgICAgICAgICAgIH0NCgkJCX0gCQ0KDQogICAg ICAgICAgICBpZiAoZXJyICE9IDApIHsNCg0KICAgICAgICAgICAgICAgaWYgKGZhaWxPbkVycm9y KSB7DQoNCiAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQnVpbGRFeGNlcHRpb24oIkV4ZWMg cmV0dXJuZWQ6ICIrZXJyLGxvY2F0aW9uKTsNCg0KICAgICAgICAgICAgICAgfSANCgkJCSAgIGVs c2Ugew0KDQogICAgICAgICAgICAgICAgICAgbG9nKCJSZXN1bHQ6ICIgKyBlcnIsIFByb2plY3Qu TVNHX0VSUik7DQoNCiAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgfQ0KDQogICAgICAg IH0gDQovLwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsNCg0KCQljYXRjaCAoRXhjZXB0aW9uIGUp IHsNCiAgICAgICAgICAgIHRocm93IG5ldyBCdWlsZEV4Y2VwdGlvbigiRXhlY3V0ZSBmYWlsZWQ6 ICIgKyBlLCBlLCBsb2NhdGlvbik7DQoNCiAgICAgICAgfSANCgkJZmluYWxseSB7DQoNCiAgICAg ICAgICAgIC8vIGNsb3NlIHRoZSBvdXRwdXQgZmlsZSBpZiByZXF1aXJlZA0KDQogICAgICAgICAg ICBsb2dGbHVzaCgpOw0KDQogICAgICAgIH0NCg0KICAgIH0NCg0KDQoNCiAgICAvKioNCg0KICAg ICAqIFJldHVybiB0aGUgbGlzdCBvZiBmaWxlcyBmcm9tIHRoaXMgRGlyZWN0b3J5U2Nhbm5lciB0 aGF0IHNob3VsZA0KDQogICAgICogYmUgaW5jbHVkZWQgb24gdGhlIGNvbW1hbmQgbGluZS4NCg0K ICAgICAqLw0KDQogICAgcHJvdGVjdGVkIFN0cmluZ1tdIGdldEZpbGVzKEZpbGUgYmFzZWRpciwg RGlyZWN0b3J5U2Nhbm5lciBkcykgew0KDQogICAgICAgIHJldHVybiBkcy5nZXRJbmNsdWRlZEZp bGVzKCk7DQoNCiAgICB9DQoNCg0KDQogICAgLyoqDQoNCiAgICAgKiBSZXR1cm4gdGhlIGxpc3Qg b2YgRGlyZWN0b3JpZXMgZnJvbSB0aGlzIERpcmVjdG9yeVNjYW5uZXIgdGhhdA0KDQogICAgICog c2hvdWxkIGJlIGluY2x1ZGVkIG9uIHRoZSBjb21tYW5kIGxpbmUuDQoNCiAgICAgKi8NCg0KICAg IHByb3RlY3RlZCBTdHJpbmdbXSBnZXREaXJzKEZpbGUgYmFzZWRpciwgRGlyZWN0b3J5U2Nhbm5l ciBkcykgew0KDQogICAgICAgIHJldHVybiBkcy5nZXRJbmNsdWRlZERpcmVjdG9yaWVzKCk7DQoN CiAgICB9DQoNCg0KDQogICAgDQoNCn0NCg0KDQo= ------_=_NextPart_001_01C1C8DD.B3296D02 Content-Type: text/plain; charset=us-ascii -- To unsubscribe, e-mail: For additional commands, e-mail: ------_=_NextPart_001_01C1C8DD.B3296D02--