Return-Path: X-Original-To: apmail-jackrabbit-dev-archive@www.apache.org Delivered-To: apmail-jackrabbit-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 5B271C70C for ; Tue, 8 May 2012 14:16:07 +0000 (UTC) Received: (qmail 10255 invoked by uid 500); 8 May 2012 14:16:07 -0000 Delivered-To: apmail-jackrabbit-dev-archive@jackrabbit.apache.org Received: (qmail 10211 invoked by uid 500); 8 May 2012 14:16:07 -0000 Mailing-List: contact dev-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@jackrabbit.apache.org Delivered-To: mailing list dev@jackrabbit.apache.org Received: (qmail 10204 invoked by uid 99); 8 May 2012 14:16:06 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 08 May 2012 14:16:06 +0000 X-ASF-Spam-Status: No, hits=-0.0 required=5.0 tests=RCVD_IN_DNSWL_NONE,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: local policy) Received: from [98.139.91.212] (HELO nm17-vm0.bullet.mail.sp2.yahoo.com) (98.139.91.212) by apache.org (qpsmtpd/0.29) with SMTP; Tue, 08 May 2012 14:15:57 +0000 Received: from [98.139.91.66] by nm17.bullet.mail.sp2.yahoo.com with NNFMP; 08 May 2012 14:15:36 -0000 Received: from [98.139.91.49] by tm6.bullet.mail.sp2.yahoo.com with NNFMP; 08 May 2012 14:15:36 -0000 Received: from [127.0.0.1] by omp1049.mail.sp2.yahoo.com with NNFMP; 08 May 2012 14:15:36 -0000 X-Yahoo-Newman-Property: ymail-3 X-Yahoo-Newman-Id: 247844.27265.bm@omp1049.mail.sp2.yahoo.com Received: (qmail 47613 invoked by uid 60001); 8 May 2012 14:15:35 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s1024; t=1336486535; bh=unuu2DwCiHnmeD7OZTLyo5HyTeG9g00D0f/Bbg7Y8iE=; h=X-YMail-OSG:Received:X-Mailer:References:Message-ID:Date:From:Reply-To:Subject:To:In-Reply-To:MIME-Version:Content-Type; b=JWIduu7LG5qkv9YzewZCRqt7Un0KGQh3h1TyA5vf8f6skA5X9fvxdgoHWsC62QrZVD4jQ23xs/+TkiOIaUJvoV1On2JmNEY1Cuk2MlQvpnHVj0Q1rWQGKk6eVErrKIxbRmcZeXbtPPCpJ7bM/RAwIFSDUcNq6v0YIB2ktE/9ofk= DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com; h=X-YMail-OSG:Received:X-Mailer:References:Message-ID:Date:From:Reply-To:Subject:To:In-Reply-To:MIME-Version:Content-Type; b=He/flTCudwqzDt7Uo99mE66AKtQvUcdpC/FjBRqEi4BYU1euRFr40Dc2S//2IkAUtAcvCeMCHbShm3h3zRwH4jX4qtmxO5EW4uZ5wu9qTMjZNxOtfevTFddPGfz0/lekRoShooLHXDmoV8T4p7KRF1QmiFCUBoFG5bEk7CRIc8E=; X-YMail-OSG: I9ldcJMVM1mKtwqWyBwIG4l7loH2pvEEPCFYXUD2k7ewFGo UsCAA94aRYK9.9sJUhdq78Zj7RlXn6mnwg6Bc1MS8auAdWA5iXFakio_dp19 KhA2xSGO1zfM96gErjA5XjWi6n.AdlHruGo32M3o4sx3d5vX5974csjyxZwX 2cGhZiwCpCkZZ1uhSu5kWvMywUmCJRJIeR86gCxjst25CpIKuRRLnVir9ked 9mU8HE0ENr4Dpyktcd8I_UwOyTg1_jTPsf2Idhzc_Tn91Jc.zfH698BMd1Wt VuMP3RkgzVWS4Lkv6YTmMCUu_RT_eaz0VHmiUv.PnGSBDrmD0Xkkoi574tA4 RYg1vSGudB8JvVhhBzYSDjFef5Hxd7eBqxmqp.tEOCQTzdyQgMpqHTrH0lns iuwNXVbj_Nks4HONQRZ7UGT4Zaob8OXBM4thvmAalQuADzrCVfl9MBEZyhWn RE6uiz4VpMSWs Received: from [208.247.58.245] by web110209.mail.gq1.yahoo.com via HTTP; Tue, 08 May 2012 07:15:35 PDT X-Mailer: YahooMailWebService/0.8.117.340979 References: <1336417315.63653.YahooMailNeo@web110207.mail.gq1.yahoo.com> <1336417427.39764.YahooMailNeo@web110209.mail.gq1.yahoo.com> <1336441867.36964.YahooMailNeo@web110203.mail.gq1.yahoo.com> Message-ID: <1336486535.36998.YahooMailNeo@web110209.mail.gq1.yahoo.com> Date: Tue, 8 May 2012 07:15:35 -0700 (PDT) From: David Hausladen Reply-To: David Hausladen Subject: Re: BTreeManager - opt in or automatic? To: Jukka Zitting , "dev@jackrabbit.apache.org" In-Reply-To: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="-1053655813-150440425-1336486535=:36998" X-Virus-Checked: Checked by ClamAV on apache.org ---1053655813-150440425-1336486535=:36998 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable I've attached the class as it stands (currently untested). =A0The main stru= ggle is how to handle the NodeIterator's getPosition method (I'm taking the= easy way out throwing an exception). Also worth mentioning: I'm on 2.2.5.= =A0=0A=0A=0A----- Original Message -----=0AFrom: Jukka Zitting =0ATo: dev@jackrabbit.apache.org; David Hausladen =0ACc: =0ASent: Tuesday, May 8, 2012 3:48 AM=0ASubject: Re: = BTreeManager - opt in or automatic?=0A=0AHi,=0A=0AOn Tue, May 8, 2012 at 3:= 51 AM, David Hausladen=0A wrote:=0A> Under the a= ssumption that it's opt in, I started an implementation of the Node interfa= ce that=0A> adapts to the ItemSequence's NodeSequence (to minimize visibili= ty of the=0A> org.apache.jackrabbit.commons.flat classes).=0A=0AIf you like= , I'd love to incorporate something like that in=0Ajackrabbit-jcr-commons.= =0A=0A> The fact that NodeSequence returns Iterator instead= of=0A> javax.jcr.NodeIterator makes it impossible.=0A=0AUse the Adapter pa= ttern.=0A=0ABR,=0A=0AJukka Zitting=0A ---1053655813-150440425-1336486535=:36998 Content-Type: application/octet-stream; name="NodeWrapper.java" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="NodeWrapper.java" cGFja2FnZSB5b3VyLmNob2ljZTsNCg0KaW1wb3J0IGphdmEuaW8uSW5wdXRT dHJlYW07DQppbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7DQppbXBvcnQg amF2YS51dGlsLkNhbGVuZGFyOw0KaW1wb3J0IGphdmEudXRpbC5Db21wYXJh dG9yOw0KaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsNCg0KaW1wb3J0IGph dmF4Lmpjci5BY2Nlc3NEZW5pZWRFeGNlcHRpb247DQppbXBvcnQgamF2YXgu amNyLkJpbmFyeTsNCmltcG9ydCBqYXZheC5qY3IuSW52YWxpZEl0ZW1TdGF0 ZUV4Y2VwdGlvbjsNCmltcG9ydCBqYXZheC5qY3IuSW52YWxpZExpZmVjeWNs ZVRyYW5zaXRpb25FeGNlcHRpb247DQppbXBvcnQgamF2YXguamNyLkl0ZW07 DQppbXBvcnQgamF2YXguamNyLkl0ZW1FeGlzdHNFeGNlcHRpb247DQppbXBv cnQgamF2YXguamNyLkl0ZW1Ob3RGb3VuZEV4Y2VwdGlvbjsNCmltcG9ydCBq YXZheC5qY3IuSXRlbVZpc2l0b3I7DQppbXBvcnQgamF2YXguamNyLk1lcmdl RXhjZXB0aW9uOw0KaW1wb3J0IGphdmF4Lmpjci5Ob1N1Y2hXb3Jrc3BhY2VF eGNlcHRpb247DQppbXBvcnQgamF2YXguamNyLk5vZGU7DQppbXBvcnQgamF2 YXguamNyLk5vZGVJdGVyYXRvcjsNCmltcG9ydCBqYXZheC5qY3IuUGF0aE5v dEZvdW5kRXhjZXB0aW9uOw0KaW1wb3J0IGphdmF4Lmpjci5Qcm9wZXJ0eTsN CmltcG9ydCBqYXZheC5qY3IuUHJvcGVydHlJdGVyYXRvcjsNCmltcG9ydCBq YXZheC5qY3IuUmVmZXJlbnRpYWxJbnRlZ3JpdHlFeGNlcHRpb247DQppbXBv cnQgamF2YXguamNyLlJlcG9zaXRvcnlFeGNlcHRpb247DQppbXBvcnQgamF2 YXguamNyLlNlc3Npb247DQppbXBvcnQgamF2YXguamNyLlVuc3VwcG9ydGVk UmVwb3NpdG9yeU9wZXJhdGlvbkV4Y2VwdGlvbjsNCmltcG9ydCBqYXZheC5q Y3IuVmFsdWU7DQppbXBvcnQgamF2YXguamNyLlZhbHVlRm9ybWF0RXhjZXB0 aW9uOw0KaW1wb3J0IGphdmF4Lmpjci5sb2NrLkxvY2s7DQppbXBvcnQgamF2 YXguamNyLmxvY2suTG9ja0V4Y2VwdGlvbjsNCmltcG9ydCBqYXZheC5qY3Iu bm9kZXR5cGUuQ29uc3RyYWludFZpb2xhdGlvbkV4Y2VwdGlvbjsNCmltcG9y dCBqYXZheC5qY3Iubm9kZXR5cGUuTm9TdWNoTm9kZVR5cGVFeGNlcHRpb247 DQppbXBvcnQgamF2YXguamNyLm5vZGV0eXBlLk5vZGVEZWZpbml0aW9uOw0K aW1wb3J0IGphdmF4Lmpjci5ub2RldHlwZS5Ob2RlVHlwZTsNCmltcG9ydCBq YXZheC5qY3IudmVyc2lvbi5BY3Rpdml0eVZpb2xhdGlvbkV4Y2VwdGlvbjsN CmltcG9ydCBqYXZheC5qY3IudmVyc2lvbi5WZXJzaW9uOw0KaW1wb3J0IGph dmF4Lmpjci52ZXJzaW9uLlZlcnNpb25FeGNlcHRpb247DQppbXBvcnQgamF2 YXguamNyLnZlcnNpb24uVmVyc2lvbkhpc3Rvcnk7DQoNCmltcG9ydCBvcmcu YXBhY2hlLmphY2tyYWJiaXQuY29tbW9ucy5mbGF0LkJUcmVlTWFuYWdlcjsN CmltcG9ydCBvcmcuYXBhY2hlLmphY2tyYWJiaXQuY29tbW9ucy5mbGF0Lkl0 ZW1TZXF1ZW5jZTsNCmltcG9ydCBvcmcuYXBhY2hlLmphY2tyYWJiaXQuY29t bW9ucy5mbGF0Lk5vZGVTZXF1ZW5jZTsNCmltcG9ydCBvcmcuYXBhY2hlLmph Y2tyYWJiaXQuY29tbW9ucy5mbGF0LlRyZWVNYW5hZ2VyOw0KaW1wb3J0IG9y Zy5hcGFjaGUuamFja3JhYmJpdC5jb21tb25zLmZsYXQuVHJlZVRyYXZlcnNl ci5FcnJvckhhbmRsZXI7DQppbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsNCmlt cG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsNCg0KcHVibGljIGNsYXNz IE5vZGVXcmFwcGVyIGltcGxlbWVudHMgTm9kZSwgRXJyb3JIYW5kbGVyIHsN Cg0KCU5vZGUgbm9kZTsNCglOb2RlU2VxdWVuY2Ugbm9kZVNlcXVlbmNlID0g bnVsbDsNCiAgICBwcml2YXRlIExvZ2dlciBsb2cgPSBMb2dnZXJGYWN0b3J5 LmdldExvZ2dlcihKYWNrcmFiYml0LmNsYXNzKTsNCg0KCU5vZGVXcmFwcGVy KE5vZGUgbm9kZSkgew0KCQl0aGlzLm5vZGUgPSBub2RlOw0KCQlUcmVlTWFu YWdlciB0cmVlTWdyID0gbnVsbDsNCgkJdHJ5IHsNCgkJCSB0cmVlTWdyID0g bmV3IEJUcmVlTWFuYWdlcihub2RlLCAyMCwgMTAwLCBuZXcgQ29tcGFyYXRv cjxTdHJpbmc+KCkgew0KCQkJCXB1YmxpYyBpbnQgY29tcGFyZShTdHJpbmcg bGVmdCwgU3RyaW5nIHJpZ2h0KSB7DQoJCQkJCXJldHVybiBsZWZ0LmNvbXBh cmVUbyhyaWdodCk7DQoJCQkJfQ0KCQkJfSwgZmFsc2UpOw0KCQl9IGNhdGNo IChSZXBvc2l0b3J5RXhjZXB0aW9uIGUpIHsNCgkJCWNhbGwobnVsbCwgZSk7 DQoJCX0NCgkJaWYgKHRyZWVNZ3IgIT0gbnVsbCkgew0KCQkJbm9kZVNlcXVl bmNlID0gSXRlbVNlcXVlbmNlLmNyZWF0ZU5vZGVTZXF1ZW5jZSh0cmVlTWdy LCB0aGlzKTsNCgkJfQ0KCX0NCg0KDQoJQE92ZXJyaWRlDQoJcHVibGljIHZv aWQgY2FsbChJdGVtIGFyZzAsIFJlcG9zaXRvcnlFeGNlcHRpb24gZSkgew0K CQlsb2cuZXJyb3IoIkZhaWxlZCB3aXRoIGV4Y2VwdGlvbi4iLCBlKTsNCgl9 DQoNCglAT3ZlcnJpZGUNCglwdWJsaWMgdm9pZCBhZGRNaXhpbihTdHJpbmcg bWl4aW5OYW1lKSB0aHJvd3MgTm9TdWNoTm9kZVR5cGVFeGNlcHRpb24sDQoJ CQlWZXJzaW9uRXhjZXB0aW9uLCBDb25zdHJhaW50VmlvbGF0aW9uRXhjZXB0 aW9uLCBMb2NrRXhjZXB0aW9uLA0KCQkJUmVwb3NpdG9yeUV4Y2VwdGlvbiB7 DQoJCW5vZGUuYWRkTWl4aW4obWl4aW5OYW1lKTsNCgl9DQoNCglAT3ZlcnJp ZGUNCglwdWJsaWMgTm9kZSBhZGROb2RlKFN0cmluZyByZWxQYXRoKSB0aHJv d3MgSXRlbUV4aXN0c0V4Y2VwdGlvbiwNCgkJCVBhdGhOb3RGb3VuZEV4Y2Vw dGlvbiwgVmVyc2lvbkV4Y2VwdGlvbiwNCgkJCUNvbnN0cmFpbnRWaW9sYXRp b25FeGNlcHRpb24sIExvY2tFeGNlcHRpb24sIFJlcG9zaXRvcnlFeGNlcHRp b24gew0KCQlyZXR1cm4gYWRkTm9kZShyZWxQYXRoLCBudWxsKTsNCgl9DQoN CglAT3ZlcnJpZGUNCglwdWJsaWMgTm9kZSBhZGROb2RlKFN0cmluZyByZWxQ YXRoLCBTdHJpbmcgcHJpbWFyeU5vZGVUeXBlTmFtZSkNCgkJCXRocm93cyBJ dGVtRXhpc3RzRXhjZXB0aW9uLCBQYXRoTm90Rm91bmRFeGNlcHRpb24sDQoJ CQlOb1N1Y2hOb2RlVHlwZUV4Y2VwdGlvbiwgTG9ja0V4Y2VwdGlvbiwgVmVy c2lvbkV4Y2VwdGlvbiwNCgkJCUNvbnN0cmFpbnRWaW9sYXRpb25FeGNlcHRp b24sIFJlcG9zaXRvcnlFeGNlcHRpb24gew0KCQlyZXR1cm4gKG5vZGVTZXF1 ZW5jZSAhPSBudWxsKSA/IG5vZGVTZXF1ZW5jZS5hZGROb2RlKHJlbFBhdGgs IHByaW1hcnlOb2RlVHlwZU5hbWUpIDogbm9kZS5hZGROb2RlKHJlbFBhdGgs IHByaW1hcnlOb2RlVHlwZU5hbWUpOw0KCX0NCg0KCUBPdmVycmlkZQ0KCXB1 YmxpYyBib29sZWFuIGNhbkFkZE1peGluKFN0cmluZyBtaXhpbk5hbWUpDQoJ CQl0aHJvd3MgTm9TdWNoTm9kZVR5cGVFeGNlcHRpb24sIFJlcG9zaXRvcnlF eGNlcHRpb24gew0KCQlyZXR1cm4gbm9kZS5jYW5BZGRNaXhpbihtaXhpbk5h bWUpOw0KCX0NCg0KCUBPdmVycmlkZQ0KCUBEZXByZWNhdGVkDQoJcHVibGlj IHZvaWQgY2FuY2VsTWVyZ2UoVmVyc2lvbiB2ZXJzaW9uKSB0aHJvd3MgVmVy c2lvbkV4Y2VwdGlvbiwNCgkJCUludmFsaWRJdGVtU3RhdGVFeGNlcHRpb24s IFVuc3VwcG9ydGVkUmVwb3NpdG9yeU9wZXJhdGlvbkV4Y2VwdGlvbiwNCgkJ CVJlcG9zaXRvcnlFeGNlcHRpb24gew0KCQlub2RlLmNhbmNlbE1lcmdlKHZl cnNpb24pOw0KCX0NCg0KCUBPdmVycmlkZQ0KCUBEZXByZWNhdGVkDQoJcHVi bGljIFZlcnNpb24gY2hlY2tpbigpIHRocm93cyBWZXJzaW9uRXhjZXB0aW9u LA0KCQkJVW5zdXBwb3J0ZWRSZXBvc2l0b3J5T3BlcmF0aW9uRXhjZXB0aW9u LCBJbnZhbGlkSXRlbVN0YXRlRXhjZXB0aW9uLA0KCQkJTG9ja0V4Y2VwdGlv biwgUmVwb3NpdG9yeUV4Y2VwdGlvbiB7DQoJCXJldHVybiBub2RlLmNoZWNr aW4oKTsNCgl9DQoNCglAT3ZlcnJpZGUNCglARGVwcmVjYXRlZA0KCXB1Ymxp YyB2b2lkIGNoZWNrb3V0KCkgdGhyb3dzIFVuc3VwcG9ydGVkUmVwb3NpdG9y eU9wZXJhdGlvbkV4Y2VwdGlvbiwNCgkJCUxvY2tFeGNlcHRpb24sIEFjdGl2 aXR5VmlvbGF0aW9uRXhjZXB0aW9uLCBSZXBvc2l0b3J5RXhjZXB0aW9uIHsN CgkJbm9kZS5jaGVja291dCgpOw0KCX0NCg0KCUBPdmVycmlkZQ0KCUBEZXBy ZWNhdGVkDQoJcHVibGljIHZvaWQgZG9uZU1lcmdlKFZlcnNpb24gdmVyc2lv bikgdGhyb3dzIFZlcnNpb25FeGNlcHRpb24sDQoJCQlJbnZhbGlkSXRlbVN0 YXRlRXhjZXB0aW9uLCBVbnN1cHBvcnRlZFJlcG9zaXRvcnlPcGVyYXRpb25F eGNlcHRpb24sDQoJCQlSZXBvc2l0b3J5RXhjZXB0aW9uIHsNCgkJbm9kZS5k b25lTWVyZ2UodmVyc2lvbik7DQoJfQ0KDQoJQE92ZXJyaWRlDQoJcHVibGlj IHZvaWQgZm9sbG93TGlmZWN5Y2xlVHJhbnNpdGlvbihTdHJpbmcgdHJhbnNp dGlvbikNCgkJCXRocm93cyBVbnN1cHBvcnRlZFJlcG9zaXRvcnlPcGVyYXRp b25FeGNlcHRpb24sDQoJCQlJbnZhbGlkTGlmZWN5Y2xlVHJhbnNpdGlvbkV4 Y2VwdGlvbiwgUmVwb3NpdG9yeUV4Y2VwdGlvbiB7DQoJCW5vZGUuZm9sbG93 TGlmZWN5Y2xlVHJhbnNpdGlvbih0cmFuc2l0aW9uKTsNCgl9DQoNCglAT3Zl cnJpZGUNCglwdWJsaWMgU3RyaW5nW10gZ2V0QWxsb3dlZExpZmVjeWNsZVRy YW5zaXN0aW9ucygpDQoJCQl0aHJvd3MgVW5zdXBwb3J0ZWRSZXBvc2l0b3J5 T3BlcmF0aW9uRXhjZXB0aW9uLCBSZXBvc2l0b3J5RXhjZXB0aW9uIHsNCgkJ cmV0dXJuIG5vZGUuZ2V0QWxsb3dlZExpZmVjeWNsZVRyYW5zaXN0aW9ucygp Ow0KCX0NCg0KCUBPdmVycmlkZQ0KCUBEZXByZWNhdGVkDQoJcHVibGljIFZl cnNpb24gZ2V0QmFzZVZlcnNpb24oKQ0KCQkJdGhyb3dzIFVuc3VwcG9ydGVk UmVwb3NpdG9yeU9wZXJhdGlvbkV4Y2VwdGlvbiwgUmVwb3NpdG9yeUV4Y2Vw dGlvbiB7DQoJCXJldHVybiBub2RlLmdldEJhc2VWZXJzaW9uKCk7DQoJfQ0K DQoJQE92ZXJyaWRlDQoJcHVibGljIFN0cmluZyBnZXRDb3JyZXNwb25kaW5n Tm9kZVBhdGgoU3RyaW5nIHdvcmtzcGFjZU5hbWUpDQoJCQl0aHJvd3MgSXRl bU5vdEZvdW5kRXhjZXB0aW9uLCBOb1N1Y2hXb3Jrc3BhY2VFeGNlcHRpb24s DQoJCQlBY2Nlc3NEZW5pZWRFeGNlcHRpb24sIFJlcG9zaXRvcnlFeGNlcHRp b24gew0KCQlyZXR1cm4gbm9kZS5nZXRDb3JyZXNwb25kaW5nTm9kZVBhdGgo d29ya3NwYWNlTmFtZSk7DQoJfQ0KDQoJQE92ZXJyaWRlDQoJcHVibGljIE5v ZGVEZWZpbml0aW9uIGdldERlZmluaXRpb24oKSB0aHJvd3MgUmVwb3NpdG9y eUV4Y2VwdGlvbiB7DQoJCXJldHVybiBub2RlLmdldERlZmluaXRpb24oKTsN Cgl9DQoNCglAT3ZlcnJpZGUNCglwdWJsaWMgU3RyaW5nIGdldElkZW50aWZp ZXIoKSB0aHJvd3MgUmVwb3NpdG9yeUV4Y2VwdGlvbiB7DQoJCXJldHVybiBu b2RlLmdldElkZW50aWZpZXIoKTsNCgl9DQoNCglAT3ZlcnJpZGUNCglwdWJs aWMgaW50IGdldEluZGV4KCkgdGhyb3dzIFJlcG9zaXRvcnlFeGNlcHRpb24g ew0KCQlyZXR1cm4gbm9kZS5nZXRJbmRleCgpOw0KCX0NCg0KCUBPdmVycmlk ZQ0KCUBEZXByZWNhdGVkDQoJcHVibGljIExvY2sgZ2V0TG9jaygpIHRocm93 cyBVbnN1cHBvcnRlZFJlcG9zaXRvcnlPcGVyYXRpb25FeGNlcHRpb24sDQoJ CQlMb2NrRXhjZXB0aW9uLCBBY2Nlc3NEZW5pZWRFeGNlcHRpb24sIFJlcG9z aXRvcnlFeGNlcHRpb24gew0KCQlyZXR1cm4gbm9kZS5nZXRMb2NrKCk7DQoJ fQ0KDQoJQE92ZXJyaWRlDQoJcHVibGljIE5vZGVUeXBlW10gZ2V0TWl4aW5O b2RlVHlwZXMoKSB0aHJvd3MgUmVwb3NpdG9yeUV4Y2VwdGlvbiB7DQoJCXJl dHVybiBub2RlLmdldE1peGluTm9kZVR5cGVzKCk7DQoJfQ0KDQoJQE92ZXJy aWRlDQoJcHVibGljIE5vZGUgZ2V0Tm9kZShTdHJpbmcgcmVsUGF0aCkgdGhy b3dzIFBhdGhOb3RGb3VuZEV4Y2VwdGlvbiwNCgkJCVJlcG9zaXRvcnlFeGNl cHRpb24gew0KCQlyZXR1cm4gKG5vZGVTZXF1ZW5jZSAhPSBudWxsKSA/IG5v ZGVTZXF1ZW5jZS5nZXRJdGVtKHJlbFBhdGgpIDogbm9kZS5nZXROb2RlKHJl bFBhdGgpOw0KCX0NCg0KCUBPdmVycmlkZQ0KCXB1YmxpYyBOb2RlSXRlcmF0 b3IgZ2V0Tm9kZXMoKSB0aHJvd3MgUmVwb3NpdG9yeUV4Y2VwdGlvbiB7DQoJ CXJldHVybiAobm9kZVNlcXVlbmNlICE9IG51bGwpID8gbmV3IEFkYXB0aW5n Tm9kZUl0ZXJhdG9yKG5vZGVTZXF1ZW5jZS5pdGVyYXRvcigpKSA6IG5vZGUu Z2V0Tm9kZXMoKTsNCgl9DQoNCglAT3ZlcnJpZGUNCglwdWJsaWMgTm9kZUl0 ZXJhdG9yIGdldE5vZGVzKFN0cmluZyBuYW1lUGF0dGVybikgdGhyb3dzIFJl cG9zaXRvcnlFeGNlcHRpb24gew0KCQlyZXR1cm4gbm9kZS5nZXROb2Rlcyhu YW1lUGF0dGVybik7DQoJfQ0KDQoJQE92ZXJyaWRlDQoJcHVibGljIE5vZGVJ dGVyYXRvciBnZXROb2RlcyhTdHJpbmdbXSBuYW1lR2xvYnMpIHRocm93cyBS ZXBvc2l0b3J5RXhjZXB0aW9uIHsNCgkJcmV0dXJuIG5vZGUuZ2V0Tm9kZXMo bmFtZUdsb2JzKTsNCgl9DQoNCglAT3ZlcnJpZGUNCglwdWJsaWMgSXRlbSBn ZXRQcmltYXJ5SXRlbSgpIHRocm93cyBJdGVtTm90Rm91bmRFeGNlcHRpb24s DQoJCQlSZXBvc2l0b3J5RXhjZXB0aW9uIHsNCgkJcmV0dXJuIG5vZGUuZ2V0 UHJpbWFyeUl0ZW0oKTsNCgl9DQoNCglAT3ZlcnJpZGUNCglwdWJsaWMgTm9k ZVR5cGUgZ2V0UHJpbWFyeU5vZGVUeXBlKCkgdGhyb3dzIFJlcG9zaXRvcnlF eGNlcHRpb24gew0KCQlyZXR1cm4gbm9kZS5nZXRQcmltYXJ5Tm9kZVR5cGUo KTsNCgl9DQoNCglAT3ZlcnJpZGUNCglwdWJsaWMgUHJvcGVydHlJdGVyYXRv ciBnZXRQcm9wZXJ0aWVzKCkgdGhyb3dzIFJlcG9zaXRvcnlFeGNlcHRpb24g ew0KCQlyZXR1cm4gbm9kZS5nZXRQcm9wZXJ0aWVzKCk7DQoJfQ0KDQoJQE92 ZXJyaWRlDQoJcHVibGljIFByb3BlcnR5SXRlcmF0b3IgZ2V0UHJvcGVydGll cyhTdHJpbmcgbmFtZVBhdHRlcm4pDQoJCQl0aHJvd3MgUmVwb3NpdG9yeUV4 Y2VwdGlvbiB7DQoJCXJldHVybiBub2RlLmdldFByb3BlcnRpZXMobmFtZVBh dHRlcm4pOw0KCX0NCg0KCUBPdmVycmlkZQ0KCXB1YmxpYyBQcm9wZXJ0eUl0 ZXJhdG9yIGdldFByb3BlcnRpZXMoU3RyaW5nW10gbmFtZUdsb2JzKQ0KCQkJ dGhyb3dzIFJlcG9zaXRvcnlFeGNlcHRpb24gew0KCQlyZXR1cm4gbm9kZS5n ZXRQcm9wZXJ0aWVzKG5hbWVHbG9icyk7DQoJfQ0KDQoJQE92ZXJyaWRlDQoJ cHVibGljIFByb3BlcnR5IGdldFByb3BlcnR5KFN0cmluZyByZWxQYXRoKSB0 aHJvd3MgUGF0aE5vdEZvdW5kRXhjZXB0aW9uLA0KCQkJUmVwb3NpdG9yeUV4 Y2VwdGlvbiB7DQoJCXJldHVybiBub2RlLmdldFByb3BlcnR5KHJlbFBhdGgp Ow0KCX0NCg0KCUBPdmVycmlkZQ0KCXB1YmxpYyBQcm9wZXJ0eUl0ZXJhdG9y IGdldFJlZmVyZW5jZXMoKSB0aHJvd3MgUmVwb3NpdG9yeUV4Y2VwdGlvbiB7 DQoJCXJldHVybiBub2RlLmdldFJlZmVyZW5jZXMoKTsNCgl9DQoNCglAT3Zl cnJpZGUNCglwdWJsaWMgUHJvcGVydHlJdGVyYXRvciBnZXRSZWZlcmVuY2Vz KFN0cmluZyBuYW1lKQ0KCQkJdGhyb3dzIFJlcG9zaXRvcnlFeGNlcHRpb24g ew0KCQlyZXR1cm4gbm9kZS5nZXRSZWZlcmVuY2VzKG5hbWUpOw0KCX0NCg0K CUBPdmVycmlkZQ0KCXB1YmxpYyBOb2RlSXRlcmF0b3IgZ2V0U2hhcmVkU2V0 KCkgdGhyb3dzIFJlcG9zaXRvcnlFeGNlcHRpb24gew0KCQlyZXR1cm4gbm9k ZS5nZXRTaGFyZWRTZXQoKTsNCgl9DQoNCglAT3ZlcnJpZGUNCglARGVwcmVj YXRlZA0KCXB1YmxpYyBTdHJpbmcgZ2V0VVVJRCgpIHRocm93cyBVbnN1cHBv cnRlZFJlcG9zaXRvcnlPcGVyYXRpb25FeGNlcHRpb24sDQoJCQlSZXBvc2l0 b3J5RXhjZXB0aW9uIHsNCgkJcmV0dXJuIG5vZGUuZ2V0VVVJRCgpOw0KCX0N Cg0KCUBPdmVycmlkZQ0KCUBEZXByZWNhdGVkDQoJcHVibGljIFZlcnNpb25I aXN0b3J5IGdldFZlcnNpb25IaXN0b3J5KCkNCgkJCXRocm93cyBVbnN1cHBv cnRlZFJlcG9zaXRvcnlPcGVyYXRpb25FeGNlcHRpb24sIFJlcG9zaXRvcnlF eGNlcHRpb24gew0KCQlyZXR1cm4gbm9kZS5nZXRWZXJzaW9uSGlzdG9yeSgp Ow0KCX0NCg0KCUBPdmVycmlkZQ0KCXB1YmxpYyBQcm9wZXJ0eUl0ZXJhdG9y IGdldFdlYWtSZWZlcmVuY2VzKCkgdGhyb3dzIFJlcG9zaXRvcnlFeGNlcHRp b24gew0KCQlyZXR1cm4gbm9kZS5nZXRXZWFrUmVmZXJlbmNlcygpOw0KCX0N Cg0KCUBPdmVycmlkZQ0KCXB1YmxpYyBQcm9wZXJ0eUl0ZXJhdG9yIGdldFdl YWtSZWZlcmVuY2VzKFN0cmluZyBuYW1lKQ0KCQkJdGhyb3dzIFJlcG9zaXRv cnlFeGNlcHRpb24gew0KCQlyZXR1cm4gbm9kZS5nZXRXZWFrUmVmZXJlbmNl cyhuYW1lKTsNCgl9DQoNCglAT3ZlcnJpZGUNCglwdWJsaWMgYm9vbGVhbiBo YXNOb2RlKFN0cmluZyByZWxQYXRoKSB0aHJvd3MgUmVwb3NpdG9yeUV4Y2Vw dGlvbiB7DQoJCXJldHVybiAobm9kZVNlcXVlbmNlICE9IG51bGwpID8gbm9k ZVNlcXVlbmNlLmhhc0l0ZW0ocmVsUGF0aCk6IG5vZGUuaGFzTm9kZShyZWxQ YXRoKTsNCgl9DQoNCglAT3ZlcnJpZGUNCglwdWJsaWMgYm9vbGVhbiBoYXNO b2RlcygpIHRocm93cyBSZXBvc2l0b3J5RXhjZXB0aW9uIHsNCgkJcmV0dXJu IG5vZGUuaGFzTm9kZXMoKTsNCgl9DQoNCglAT3ZlcnJpZGUNCglwdWJsaWMg Ym9vbGVhbiBoYXNQcm9wZXJ0aWVzKCkgdGhyb3dzIFJlcG9zaXRvcnlFeGNl cHRpb24gew0KCQlyZXR1cm4gbm9kZS5oYXNQcm9wZXJ0aWVzKCk7DQoJfQ0K DQoJQE92ZXJyaWRlDQoJcHVibGljIGJvb2xlYW4gaGFzUHJvcGVydHkoU3Ry aW5nIHJlbFBhdGgpIHRocm93cyBSZXBvc2l0b3J5RXhjZXB0aW9uIHsNCgkJ cmV0dXJuIG5vZGUuaGFzUHJvcGVydHkocmVsUGF0aCk7DQoJfQ0KDQoJQE92 ZXJyaWRlDQoJQERlcHJlY2F0ZWQNCglwdWJsaWMgYm9vbGVhbiBob2xkc0xv Y2soKSB0aHJvd3MgUmVwb3NpdG9yeUV4Y2VwdGlvbiB7DQoJCXJldHVybiBu b2RlLmhvbGRzTG9jaygpOw0KCX0NCg0KCUBPdmVycmlkZQ0KCXB1YmxpYyBi b29sZWFuIGlzQ2hlY2tlZE91dCgpIHRocm93cyBSZXBvc2l0b3J5RXhjZXB0 aW9uIHsNCgkJcmV0dXJuIG5vZGUuaXNDaGVja2VkT3V0KCk7DQoJfQ0KDQoJ QE92ZXJyaWRlDQoJcHVibGljIGJvb2xlYW4gaXNMb2NrZWQoKSB0aHJvd3Mg UmVwb3NpdG9yeUV4Y2VwdGlvbiB7DQoJCXJldHVybiBub2RlLmlzTG9ja2Vk KCk7DQoJfQ0KDQoJQE92ZXJyaWRlDQoJcHVibGljIGJvb2xlYW4gaXNOb2Rl VHlwZShTdHJpbmcgbm9kZVR5cGVOYW1lKSB0aHJvd3MgUmVwb3NpdG9yeUV4 Y2VwdGlvbiB7DQoJCXJldHVybiBub2RlLmlzTm9kZVR5cGUobm9kZVR5cGVO YW1lKTsNCgl9DQoNCglAT3ZlcnJpZGUNCglARGVwcmVjYXRlZA0KCXB1Ymxp YyBMb2NrIGxvY2soYm9vbGVhbiBpc0RlZXAsIGJvb2xlYW4gaXNTZXNzaW9u U2NvcGVkKQ0KCQkJdGhyb3dzIFVuc3VwcG9ydGVkUmVwb3NpdG9yeU9wZXJh dGlvbkV4Y2VwdGlvbiwgTG9ja0V4Y2VwdGlvbiwNCgkJCUFjY2Vzc0Rlbmll ZEV4Y2VwdGlvbiwgSW52YWxpZEl0ZW1TdGF0ZUV4Y2VwdGlvbiwNCgkJCVJl cG9zaXRvcnlFeGNlcHRpb24gew0KCQlyZXR1cm4gbm9kZS5sb2NrKGlzRGVl cCwgaXNTZXNzaW9uU2NvcGVkKTsNCgl9DQoNCglAT3ZlcnJpZGUNCglARGVw cmVjYXRlZA0KCXB1YmxpYyBOb2RlSXRlcmF0b3IgbWVyZ2UoU3RyaW5nIHNy Y1dvcmtzcGFjZSwgYm9vbGVhbiBiZXN0RWZmb3J0KQ0KCQkJdGhyb3dzIE5v U3VjaFdvcmtzcGFjZUV4Y2VwdGlvbiwgQWNjZXNzRGVuaWVkRXhjZXB0aW9u LA0KCQkJTWVyZ2VFeGNlcHRpb24sIExvY2tFeGNlcHRpb24sIEludmFsaWRJ dGVtU3RhdGVFeGNlcHRpb24sDQoJCQlSZXBvc2l0b3J5RXhjZXB0aW9uIHsN CgkJcmV0dXJuIG5vZGUubWVyZ2Uoc3JjV29ya3NwYWNlLCBiZXN0RWZmb3J0 KTsNCgl9DQoNCglAT3ZlcnJpZGUNCglwdWJsaWMgdm9pZCBvcmRlckJlZm9y ZShTdHJpbmcgc3JjQ2hpbGRSZWxQYXRoLCBTdHJpbmcgZGVzdENoaWxkUmVs UGF0aCkNCgkJCXRocm93cyBVbnN1cHBvcnRlZFJlcG9zaXRvcnlPcGVyYXRp b25FeGNlcHRpb24sIFZlcnNpb25FeGNlcHRpb24sDQoJCQlDb25zdHJhaW50 VmlvbGF0aW9uRXhjZXB0aW9uLCBJdGVtTm90Rm91bmRFeGNlcHRpb24sIExv Y2tFeGNlcHRpb24sDQoJCQlSZXBvc2l0b3J5RXhjZXB0aW9uIHsNCgkJbm9k ZS5vcmRlckJlZm9yZShzcmNDaGlsZFJlbFBhdGgsIGRlc3RDaGlsZFJlbFBh dGgpOw0KCX0NCg0KCUBPdmVycmlkZQ0KCXB1YmxpYyB2b2lkIHJlbW92ZU1p eGluKFN0cmluZyBtaXhpbk5hbWUpIHRocm93cyBOb1N1Y2hOb2RlVHlwZUV4 Y2VwdGlvbiwNCgkJCVZlcnNpb25FeGNlcHRpb24sIENvbnN0cmFpbnRWaW9s YXRpb25FeGNlcHRpb24sIExvY2tFeGNlcHRpb24sDQoJCQlSZXBvc2l0b3J5 RXhjZXB0aW9uIHsNCgkJbm9kZS5yZW1vdmVNaXhpbihtaXhpbk5hbWUpOw0K CX0NCg0KCUBPdmVycmlkZQ0KCXB1YmxpYyB2b2lkIHJlbW92ZVNoYXJlKCkg dGhyb3dzIFZlcnNpb25FeGNlcHRpb24sIExvY2tFeGNlcHRpb24sDQoJCQlD b25zdHJhaW50VmlvbGF0aW9uRXhjZXB0aW9uLCBSZXBvc2l0b3J5RXhjZXB0 aW9uIHsNCgkJbm9kZS5yZW1vdmVTaGFyZSgpOw0KCX0NCg0KCUBPdmVycmlk ZQ0KCXB1YmxpYyB2b2lkIHJlbW92ZVNoYXJlZFNldCgpIHRocm93cyBWZXJz aW9uRXhjZXB0aW9uLCBMb2NrRXhjZXB0aW9uLA0KCQkJQ29uc3RyYWludFZp b2xhdGlvbkV4Y2VwdGlvbiwgUmVwb3NpdG9yeUV4Y2VwdGlvbiB7DQoJCW5v ZGUucmVtb3ZlU2hhcmVkU2V0KCk7DQoJfQ0KDQoJQE92ZXJyaWRlDQoJQERl cHJlY2F0ZWQNCglwdWJsaWMgdm9pZCByZXN0b3JlKFN0cmluZyB2ZXJzaW9u TmFtZSwgYm9vbGVhbiByZW1vdmVFeGlzdGluZykNCgkJCXRocm93cyBWZXJz aW9uRXhjZXB0aW9uLCBJdGVtRXhpc3RzRXhjZXB0aW9uLA0KCQkJVW5zdXBw b3J0ZWRSZXBvc2l0b3J5T3BlcmF0aW9uRXhjZXB0aW9uLCBMb2NrRXhjZXB0 aW9uLA0KCQkJSW52YWxpZEl0ZW1TdGF0ZUV4Y2VwdGlvbiwgUmVwb3NpdG9y eUV4Y2VwdGlvbiB7DQoJCW5vZGUucmVzdG9yZSh2ZXJzaW9uTmFtZSwgcmVt b3ZlRXhpc3RpbmcpOw0KCX0NCg0KCUBPdmVycmlkZQ0KCUBEZXByZWNhdGVk DQoJcHVibGljIHZvaWQgcmVzdG9yZShWZXJzaW9uIHZlcnNpb24sIGJvb2xl YW4gcmVtb3ZlRXhpc3RpbmcpDQoJCQl0aHJvd3MgVmVyc2lvbkV4Y2VwdGlv biwgSXRlbUV4aXN0c0V4Y2VwdGlvbiwNCgkJCUludmFsaWRJdGVtU3RhdGVF eGNlcHRpb24sIFVuc3VwcG9ydGVkUmVwb3NpdG9yeU9wZXJhdGlvbkV4Y2Vw dGlvbiwNCgkJCUxvY2tFeGNlcHRpb24sIFJlcG9zaXRvcnlFeGNlcHRpb24g ew0KCQlub2RlLnJlc3RvcmUodmVyc2lvbiwgcmVtb3ZlRXhpc3RpbmcpOw0K CX0NCg0KCUBPdmVycmlkZQ0KCUBEZXByZWNhdGVkDQoJcHVibGljIHZvaWQg cmVzdG9yZShWZXJzaW9uIHZlcnNpb24sIFN0cmluZyByZWxQYXRoLCBib29s ZWFuIHJlbW92ZUV4aXN0aW5nKQ0KCQkJdGhyb3dzIFBhdGhOb3RGb3VuZEV4 Y2VwdGlvbiwgSXRlbUV4aXN0c0V4Y2VwdGlvbiwNCgkJCVZlcnNpb25FeGNl cHRpb24sIENvbnN0cmFpbnRWaW9sYXRpb25FeGNlcHRpb24sDQoJCQlVbnN1 cHBvcnRlZFJlcG9zaXRvcnlPcGVyYXRpb25FeGNlcHRpb24sIExvY2tFeGNl cHRpb24sDQoJCQlJbnZhbGlkSXRlbVN0YXRlRXhjZXB0aW9uLCBSZXBvc2l0 b3J5RXhjZXB0aW9uIHsNCgkJbm9kZS5yZXN0b3JlKHZlcnNpb24sIHJlbFBh dGgsIHJlbW92ZUV4aXN0aW5nKTsNCgl9DQoNCglAT3ZlcnJpZGUNCglARGVw cmVjYXRlZA0KCXB1YmxpYyB2b2lkIHJlc3RvcmVCeUxhYmVsKFN0cmluZyB2 ZXJzaW9uTGFiZWwsIGJvb2xlYW4gcmVtb3ZlRXhpc3RpbmcpDQoJCQl0aHJv d3MgVmVyc2lvbkV4Y2VwdGlvbiwgSXRlbUV4aXN0c0V4Y2VwdGlvbiwNCgkJ CVVuc3VwcG9ydGVkUmVwb3NpdG9yeU9wZXJhdGlvbkV4Y2VwdGlvbiwgTG9j a0V4Y2VwdGlvbiwNCgkJCUludmFsaWRJdGVtU3RhdGVFeGNlcHRpb24sIFJl cG9zaXRvcnlFeGNlcHRpb24gew0KCQlub2RlLnJlc3RvcmVCeUxhYmVsKHZl cnNpb25MYWJlbCwgcmVtb3ZlRXhpc3RpbmcpOw0KCX0NCg0KCUBPdmVycmlk ZQ0KCXB1YmxpYyB2b2lkIHNldFByaW1hcnlUeXBlKFN0cmluZyBub2RlVHlw ZU5hbWUpDQoJCQl0aHJvd3MgTm9TdWNoTm9kZVR5cGVFeGNlcHRpb24sIFZl cnNpb25FeGNlcHRpb24sDQoJCQlDb25zdHJhaW50VmlvbGF0aW9uRXhjZXB0 aW9uLCBMb2NrRXhjZXB0aW9uLCBSZXBvc2l0b3J5RXhjZXB0aW9uIHsNCgkJ bm9kZS5zZXRQcmltYXJ5VHlwZShub2RlVHlwZU5hbWUpOw0KCX0NCg0KCUBP dmVycmlkZQ0KCXB1YmxpYyBQcm9wZXJ0eSBzZXRQcm9wZXJ0eShTdHJpbmcg bmFtZSwgVmFsdWUgdmFsdWUpDQoJCQl0aHJvd3MgVmFsdWVGb3JtYXRFeGNl cHRpb24sIFZlcnNpb25FeGNlcHRpb24sIExvY2tFeGNlcHRpb24sDQoJCQlD b25zdHJhaW50VmlvbGF0aW9uRXhjZXB0aW9uLCBSZXBvc2l0b3J5RXhjZXB0 aW9uIHsNCgkJcmV0dXJuIG5vZGUuc2V0UHJvcGVydHkobmFtZSwgdmFsdWUp Ow0KCX0NCg0KCUBPdmVycmlkZQ0KCXB1YmxpYyBQcm9wZXJ0eSBzZXRQcm9w ZXJ0eShTdHJpbmcgbmFtZSwgVmFsdWVbXSB2YWx1ZXMpDQoJCQl0aHJvd3Mg VmFsdWVGb3JtYXRFeGNlcHRpb24sIFZlcnNpb25FeGNlcHRpb24sIExvY2tF eGNlcHRpb24sDQoJCQlDb25zdHJhaW50VmlvbGF0aW9uRXhjZXB0aW9uLCBS ZXBvc2l0b3J5RXhjZXB0aW9uIHsNCgkJcmV0dXJuIG5vZGUuc2V0UHJvcGVy dHkobmFtZSwgdmFsdWVzKTsNCgl9DQoNCglAT3ZlcnJpZGUNCglwdWJsaWMg UHJvcGVydHkgc2V0UHJvcGVydHkoU3RyaW5nIG5hbWUsIFN0cmluZ1tdIHZh bHVlcykNCgkJCXRocm93cyBWYWx1ZUZvcm1hdEV4Y2VwdGlvbiwgVmVyc2lv bkV4Y2VwdGlvbiwgTG9ja0V4Y2VwdGlvbiwNCgkJCUNvbnN0cmFpbnRWaW9s YXRpb25FeGNlcHRpb24sIFJlcG9zaXRvcnlFeGNlcHRpb24gew0KCQlyZXR1 cm4gbm9kZS5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1ZXMpOw0KCX0NCg0KCUBP dmVycmlkZQ0KCXB1YmxpYyBQcm9wZXJ0eSBzZXRQcm9wZXJ0eShTdHJpbmcg bmFtZSwgU3RyaW5nIHZhbHVlKQ0KCQkJdGhyb3dzIFZhbHVlRm9ybWF0RXhj ZXB0aW9uLCBWZXJzaW9uRXhjZXB0aW9uLCBMb2NrRXhjZXB0aW9uLA0KCQkJ Q29uc3RyYWludFZpb2xhdGlvbkV4Y2VwdGlvbiwgUmVwb3NpdG9yeUV4Y2Vw dGlvbiB7DQoJCXJldHVybiBub2RlLnNldFByb3BlcnR5KG5hbWUsIHZhbHVl KTsNCgl9DQoNCglAT3ZlcnJpZGUNCglARGVwcmVjYXRlZA0KCXB1YmxpYyBQ cm9wZXJ0eSBzZXRQcm9wZXJ0eShTdHJpbmcgbmFtZSwgSW5wdXRTdHJlYW0g dmFsdWUpDQoJCQl0aHJvd3MgVmFsdWVGb3JtYXRFeGNlcHRpb24sIFZlcnNp b25FeGNlcHRpb24sIExvY2tFeGNlcHRpb24sDQoJCQlDb25zdHJhaW50Vmlv bGF0aW9uRXhjZXB0aW9uLCBSZXBvc2l0b3J5RXhjZXB0aW9uIHsNCgkJcmV0 dXJuIG5vZGUuc2V0UHJvcGVydHkobmFtZSwgdmFsdWUpOw0KCX0NCg0KCUBP dmVycmlkZQ0KCXB1YmxpYyBQcm9wZXJ0eSBzZXRQcm9wZXJ0eShTdHJpbmcg bmFtZSwgQmluYXJ5IHZhbHVlKQ0KCQkJdGhyb3dzIFZhbHVlRm9ybWF0RXhj ZXB0aW9uLCBWZXJzaW9uRXhjZXB0aW9uLCBMb2NrRXhjZXB0aW9uLA0KCQkJ Q29uc3RyYWludFZpb2xhdGlvbkV4Y2VwdGlvbiwgUmVwb3NpdG9yeUV4Y2Vw dGlvbiB7DQoJCXJldHVybiBub2RlLnNldFByb3BlcnR5KG5hbWUsIHZhbHVl KTsNCgl9DQoNCglAT3ZlcnJpZGUNCglwdWJsaWMgUHJvcGVydHkgc2V0UHJv cGVydHkoU3RyaW5nIG5hbWUsIGJvb2xlYW4gdmFsdWUpDQoJCQl0aHJvd3Mg VmFsdWVGb3JtYXRFeGNlcHRpb24sIFZlcnNpb25FeGNlcHRpb24sIExvY2tF eGNlcHRpb24sDQoJCQlDb25zdHJhaW50VmlvbGF0aW9uRXhjZXB0aW9uLCBS ZXBvc2l0b3J5RXhjZXB0aW9uIHsNCgkJcmV0dXJuIG5vZGUuc2V0UHJvcGVy dHkobmFtZSwgdmFsdWUpOw0KCX0NCg0KCUBPdmVycmlkZQ0KCXB1YmxpYyBQ cm9wZXJ0eSBzZXRQcm9wZXJ0eShTdHJpbmcgbmFtZSwgZG91YmxlIHZhbHVl KQ0KCQkJdGhyb3dzIFZhbHVlRm9ybWF0RXhjZXB0aW9uLCBWZXJzaW9uRXhj ZXB0aW9uLCBMb2NrRXhjZXB0aW9uLA0KCQkJQ29uc3RyYWludFZpb2xhdGlv bkV4Y2VwdGlvbiwgUmVwb3NpdG9yeUV4Y2VwdGlvbiB7DQoJCXJldHVybiBu b2RlLnNldFByb3BlcnR5KG5hbWUsIHZhbHVlKTsNCgl9DQoNCglAT3ZlcnJp ZGUNCglwdWJsaWMgUHJvcGVydHkgc2V0UHJvcGVydHkoU3RyaW5nIG5hbWUs IEJpZ0RlY2ltYWwgdmFsdWUpDQoJCQl0aHJvd3MgVmFsdWVGb3JtYXRFeGNl cHRpb24sIFZlcnNpb25FeGNlcHRpb24sIExvY2tFeGNlcHRpb24sDQoJCQlD b25zdHJhaW50VmlvbGF0aW9uRXhjZXB0aW9uLCBSZXBvc2l0b3J5RXhjZXB0 aW9uIHsNCgkJcmV0dXJuIG5vZGUuc2V0UHJvcGVydHkobmFtZSwgdmFsdWUp Ow0KCX0NCg0KCUBPdmVycmlkZQ0KCXB1YmxpYyBQcm9wZXJ0eSBzZXRQcm9w ZXJ0eShTdHJpbmcgbmFtZSwgbG9uZyB2YWx1ZSkNCgkJCXRocm93cyBWYWx1 ZUZvcm1hdEV4Y2VwdGlvbiwgVmVyc2lvbkV4Y2VwdGlvbiwgTG9ja0V4Y2Vw dGlvbiwNCgkJCUNvbnN0cmFpbnRWaW9sYXRpb25FeGNlcHRpb24sIFJlcG9z aXRvcnlFeGNlcHRpb24gew0KCQlyZXR1cm4gbm9kZS5zZXRQcm9wZXJ0eShu YW1lLCB2YWx1ZSk7DQoJfQ0KDQoJQE92ZXJyaWRlDQoJcHVibGljIFByb3Bl cnR5IHNldFByb3BlcnR5KFN0cmluZyBuYW1lLCBDYWxlbmRhciB2YWx1ZSkN CgkJCXRocm93cyBWYWx1ZUZvcm1hdEV4Y2VwdGlvbiwgVmVyc2lvbkV4Y2Vw dGlvbiwgTG9ja0V4Y2VwdGlvbiwNCgkJCUNvbnN0cmFpbnRWaW9sYXRpb25F eGNlcHRpb24sIFJlcG9zaXRvcnlFeGNlcHRpb24gew0KCQlyZXR1cm4gbm9k ZS5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSk7DQoJfQ0KDQoJQE92ZXJyaWRl DQoJcHVibGljIFByb3BlcnR5IHNldFByb3BlcnR5KFN0cmluZyBuYW1lLCBO b2RlIHZhbHVlKQ0KCQkJdGhyb3dzIFZhbHVlRm9ybWF0RXhjZXB0aW9uLCBW ZXJzaW9uRXhjZXB0aW9uLCBMb2NrRXhjZXB0aW9uLA0KCQkJQ29uc3RyYWlu dFZpb2xhdGlvbkV4Y2VwdGlvbiwgUmVwb3NpdG9yeUV4Y2VwdGlvbiB7DQoJ CXJldHVybiBub2RlLnNldFByb3BlcnR5KG5hbWUsIHZhbHVlKTsNCgl9DQoN CglAT3ZlcnJpZGUNCglwdWJsaWMgUHJvcGVydHkgc2V0UHJvcGVydHkoU3Ry aW5nIG5hbWUsIFZhbHVlIHZhbHVlLCBpbnQgdHlwZSkNCgkJCXRocm93cyBW YWx1ZUZvcm1hdEV4Y2VwdGlvbiwgVmVyc2lvbkV4Y2VwdGlvbiwgTG9ja0V4 Y2VwdGlvbiwNCgkJCUNvbnN0cmFpbnRWaW9sYXRpb25FeGNlcHRpb24sIFJl cG9zaXRvcnlFeGNlcHRpb24gew0KCQlyZXR1cm4gbm9kZS5zZXRQcm9wZXJ0 eShuYW1lLCB2YWx1ZSwgdHlwZSk7DQoJfQ0KDQoJQE92ZXJyaWRlDQoJcHVi bGljIFByb3BlcnR5IHNldFByb3BlcnR5KFN0cmluZyBuYW1lLCBWYWx1ZVtd IHZhbHVlcywgaW50IHR5cGUpDQoJCQl0aHJvd3MgVmFsdWVGb3JtYXRFeGNl cHRpb24sIFZlcnNpb25FeGNlcHRpb24sIExvY2tFeGNlcHRpb24sDQoJCQlD b25zdHJhaW50VmlvbGF0aW9uRXhjZXB0aW9uLCBSZXBvc2l0b3J5RXhjZXB0 aW9uIHsNCgkJcmV0dXJuIG5vZGUuc2V0UHJvcGVydHkobmFtZSwgdmFsdWVz LCB0eXBlKTsNCgl9DQoNCglAT3ZlcnJpZGUNCglwdWJsaWMgUHJvcGVydHkg c2V0UHJvcGVydHkoU3RyaW5nIG5hbWUsIFN0cmluZ1tdIHZhbHVlcywgaW50 IHR5cGUpDQoJCQl0aHJvd3MgVmFsdWVGb3JtYXRFeGNlcHRpb24sIFZlcnNp b25FeGNlcHRpb24sIExvY2tFeGNlcHRpb24sDQoJCQlDb25zdHJhaW50Vmlv bGF0aW9uRXhjZXB0aW9uLCBSZXBvc2l0b3J5RXhjZXB0aW9uIHsNCgkJcmV0 dXJuIG5vZGUuc2V0UHJvcGVydHkobmFtZSwgdmFsdWVzLCB0eXBlKTsNCgl9 DQoNCglAT3ZlcnJpZGUNCglwdWJsaWMgUHJvcGVydHkgc2V0UHJvcGVydHko U3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSwgaW50IHR5cGUpDQoJCQl0aHJv d3MgVmFsdWVGb3JtYXRFeGNlcHRpb24sIFZlcnNpb25FeGNlcHRpb24sIExv Y2tFeGNlcHRpb24sDQoJCQlDb25zdHJhaW50VmlvbGF0aW9uRXhjZXB0aW9u LCBSZXBvc2l0b3J5RXhjZXB0aW9uIHsNCgkJcmV0dXJuIG5vZGUuc2V0UHJv cGVydHkobmFtZSwgdmFsdWUsIHR5cGUpOw0KCX0NCg0KCUBPdmVycmlkZQ0K CUBEZXByZWNhdGVkDQoJcHVibGljIHZvaWQgdW5sb2NrKCkgdGhyb3dzIFVu c3VwcG9ydGVkUmVwb3NpdG9yeU9wZXJhdGlvbkV4Y2VwdGlvbiwNCgkJCUxv Y2tFeGNlcHRpb24sIEFjY2Vzc0RlbmllZEV4Y2VwdGlvbiwgSW52YWxpZEl0 ZW1TdGF0ZUV4Y2VwdGlvbiwNCgkJCVJlcG9zaXRvcnlFeGNlcHRpb24gew0K CQlub2RlLnVubG9jaygpOw0KCX0NCg0KCUBPdmVycmlkZQ0KCXB1YmxpYyB2 b2lkIHVwZGF0ZShTdHJpbmcgc3JjV29ya3NwYWNlKSB0aHJvd3MgTm9TdWNo V29ya3NwYWNlRXhjZXB0aW9uLA0KCQkJQWNjZXNzRGVuaWVkRXhjZXB0aW9u LCBMb2NrRXhjZXB0aW9uLCBJbnZhbGlkSXRlbVN0YXRlRXhjZXB0aW9uLA0K CQkJUmVwb3NpdG9yeUV4Y2VwdGlvbiB7DQoJCW5vZGUudXBkYXRlKHNyY1dv cmtzcGFjZSk7DQoJfQ0KDQoJQE92ZXJyaWRlDQoJcHVibGljIHZvaWQgYWNj ZXB0KEl0ZW1WaXNpdG9yIHZpc2l0b3IpIHRocm93cyBSZXBvc2l0b3J5RXhj ZXB0aW9uIHsNCgkJbm9kZS5hY2NlcHQodmlzaXRvcik7DQoJfQ0KDQoJQE92 ZXJyaWRlDQoJcHVibGljIEl0ZW0gZ2V0QW5jZXN0b3IoaW50IGRlcHRoKSB0 aHJvd3MgSXRlbU5vdEZvdW5kRXhjZXB0aW9uLA0KCQkJQWNjZXNzRGVuaWVk RXhjZXB0aW9uLCBSZXBvc2l0b3J5RXhjZXB0aW9uIHsNCgkJcmV0dXJuIG5v ZGUuZ2V0QW5jZXN0b3IoZGVwdGgpOw0KCX0NCg0KCUBPdmVycmlkZQ0KCXB1 YmxpYyBpbnQgZ2V0RGVwdGgoKSB0aHJvd3MgUmVwb3NpdG9yeUV4Y2VwdGlv biB7DQoJCXJldHVybiBub2RlLmdldERlcHRoKCk7DQoJfQ0KDQoJQE92ZXJy aWRlDQoJcHVibGljIFN0cmluZyBnZXROYW1lKCkgdGhyb3dzIFJlcG9zaXRv cnlFeGNlcHRpb24gew0KCQlyZXR1cm4gbm9kZS5nZXROYW1lKCk7DQoJfQ0K DQoJQE92ZXJyaWRlDQoJcHVibGljIE5vZGUgZ2V0UGFyZW50KCkgdGhyb3dz IEl0ZW1Ob3RGb3VuZEV4Y2VwdGlvbiwNCgkJCUFjY2Vzc0RlbmllZEV4Y2Vw dGlvbiwgUmVwb3NpdG9yeUV4Y2VwdGlvbiB7DQoJCXJldHVybiBub2RlLmdl dFBhcmVudCgpOw0KCX0NCg0KCUBPdmVycmlkZQ0KCXB1YmxpYyBTdHJpbmcg Z2V0UGF0aCgpIHRocm93cyBSZXBvc2l0b3J5RXhjZXB0aW9uIHsNCgkJcmV0 dXJuIG5vZGUuZ2V0UGF0aCgpOw0KCX0NCg0KCUBPdmVycmlkZQ0KCXB1Ymxp YyBTZXNzaW9uIGdldFNlc3Npb24oKSB0aHJvd3MgUmVwb3NpdG9yeUV4Y2Vw dGlvbiB7DQoJCXJldHVybiBub2RlLmdldFNlc3Npb24oKTsNCgl9DQoNCglA T3ZlcnJpZGUNCglwdWJsaWMgYm9vbGVhbiBpc01vZGlmaWVkKCkgew0KCQly ZXR1cm4gbm9kZS5pc01vZGlmaWVkKCk7DQoJfQ0KDQoJQE92ZXJyaWRlDQoJ cHVibGljIGJvb2xlYW4gaXNOZXcoKSB7DQoJCXJldHVybiBub2RlLmlzTmV3 KCk7DQoJfQ0KDQoJQE92ZXJyaWRlDQoJcHVibGljIGJvb2xlYW4gaXNOb2Rl KCkgew0KCQlyZXR1cm4gbm9kZS5pc05vZGUoKTsNCgl9DQoNCglAT3ZlcnJp ZGUNCglwdWJsaWMgYm9vbGVhbiBpc1NhbWUoSXRlbSBvdGhlckl0ZW0pIHRo cm93cyBSZXBvc2l0b3J5RXhjZXB0aW9uIHsNCgkJcmV0dXJuIG5vZGUuaXNT YW1lKG90aGVySXRlbSk7DQoJfQ0KDQoJQE92ZXJyaWRlDQoJcHVibGljIHZv aWQgcmVmcmVzaChib29sZWFuIGtlZXBDaGFuZ2VzKSB0aHJvd3MgSW52YWxp ZEl0ZW1TdGF0ZUV4Y2VwdGlvbiwNCgkJCVJlcG9zaXRvcnlFeGNlcHRpb24g ew0KCQlub2RlLnJlZnJlc2goa2VlcENoYW5nZXMpOw0KCX0NCg0KCUBPdmVy cmlkZQ0KCXB1YmxpYyB2b2lkIHJlbW92ZSgpIHRocm93cyBWZXJzaW9uRXhj ZXB0aW9uLCBMb2NrRXhjZXB0aW9uLA0KCQkJQ29uc3RyYWludFZpb2xhdGlv bkV4Y2VwdGlvbiwgQWNjZXNzRGVuaWVkRXhjZXB0aW9uLA0KCQkJUmVwb3Np dG9yeUV4Y2VwdGlvbiB7DQoJCW5vZGUucmVtb3ZlKCk7DQoJfQ0KDQoJQE92 ZXJyaWRlDQoJQERlcHJlY2F0ZWQNCglwdWJsaWMgdm9pZCBzYXZlKCkgdGhy b3dzIEFjY2Vzc0RlbmllZEV4Y2VwdGlvbiwgSXRlbUV4aXN0c0V4Y2VwdGlv biwNCgkJCUNvbnN0cmFpbnRWaW9sYXRpb25FeGNlcHRpb24sIEludmFsaWRJ dGVtU3RhdGVFeGNlcHRpb24sDQoJCQlSZWZlcmVudGlhbEludGVncml0eUV4 Y2VwdGlvbiwgVmVyc2lvbkV4Y2VwdGlvbiwgTG9ja0V4Y2VwdGlvbiwNCgkJ CU5vU3VjaE5vZGVUeXBlRXhjZXB0aW9uLCBSZXBvc2l0b3J5RXhjZXB0aW9u IHsNCgkJbm9kZS5zYXZlKCk7DQoJfQ0KDQoJcHJpdmF0ZSBjbGFzcyBBZGFw dGluZ05vZGVJdGVyYXRvciBpbXBsZW1lbnRzIE5vZGVJdGVyYXRvciB7DQoJ CUl0ZXJhdG9yPE5vZGU+IGFjdHVhbEl0ZXJhdG9yOw0KDQoJCXByaXZhdGUg QWRhcHRpbmdOb2RlSXRlcmF0b3IoKSB7DQoJCQkvLyBwcmV2ZW50IHVzZQ0K CQl9DQoNCgkJQWRhcHRpbmdOb2RlSXRlcmF0b3IoSXRlcmF0b3I8Tm9kZT4g YWN0dWFsSXRlcmF0b3IpIHsNCgkJCXRoaXMoKTsNCgkJCXRoaXMuYWN0dWFs SXRlcmF0b3IgPSBhY3R1YWxJdGVyYXRvcjsNCgkJfQ0KDQoJCUBPdmVycmlk ZQ0KCQlwdWJsaWMgbG9uZyBnZXRQb3NpdGlvbigpIHsNCgkJCXRocm93IG5l dyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiSW1wb3NzaWJsZSBm b3IgdGhpcyBpdGVyYXRvci4iKTsNCgkJfQ0KDQoJCUBPdmVycmlkZQ0KCQlw dWJsaWMgbG9uZyBnZXRTaXplKCkgew0KCQkJLy8gdmFsdWUgaW5kaWNhdGlu ZyB1bmtub3duLCBhY2NvcmRpbmcgdG8gUmFuZ2VJdGVyYXRvci4NCgkJCXJl dHVybiAtMTsNCgkJfQ0KDQoJCUBPdmVycmlkZQ0KCQlwdWJsaWMgdm9pZCBz a2lwKGxvbmcgc2tpcE51bSkgew0KCQkJYXNzZXJ0KHNraXBOdW0gPj0gMCk7 DQoJCQlmb3IgKGludCBpID0gMDsgaSA8IHNraXBOdW07IGkrKykgew0KCQkJ CS8vIGFzc3VtZSB0aGlzIHRocm93cyB0aGUgTm9TdWNoRWxlbWVudEV4Y2Vw dGlvbg0KCQkJCW5leHQoKTsNCgkJCX0NCgkJfQ0KDQoJCUBPdmVycmlkZQ0K CQlwdWJsaWMgYm9vbGVhbiBoYXNOZXh0KCkgew0KCQkJcmV0dXJuIGFjdHVh bEl0ZXJhdG9yLmhhc05leHQoKTsNCgkJfQ0KDQoJCUBPdmVycmlkZQ0KCQlw dWJsaWMgTm9kZSBuZXh0KCkgew0KCQkJcmV0dXJuIGFjdHVhbEl0ZXJhdG9y Lm5leHQoKTsNCgkJfQ0KDQoJCUBPdmVycmlkZQ0KCQlwdWJsaWMgdm9pZCBy ZW1vdmUoKSB7DQoJCQlhY3R1YWxJdGVyYXRvci5yZW1vdmUoKTsNCgkJfQ0K DQoJCUBPdmVycmlkZQ0KCQlwdWJsaWMgTm9kZSBuZXh0Tm9kZSgpIHsNCgkJ CXJldHVybiBhY3R1YWxJdGVyYXRvci5uZXh0KCk7DQoJCX0NCgl9DQp9DQo= ---1053655813-150440425-1336486535=:36998--