Return-Path: Mailing-List: contact commons-httpclient-dev-help@jakarta.apache.org; run by ezmlm Delivered-To: mailing list commons-httpclient-dev@jakarta.apache.org Received: (qmail 21575 invoked by uid 98); 5 Dec 2002 13:22:52 -0000 X-Antivirus: nagoya (v4218 created Aug 14 2002) Received: (qmail 21553 invoked from network); 5 Dec 2002 13:22:50 -0000 Received: from daedalus.apache.org (HELO apache.org) (63.251.56.142) by nagoya.betaversion.org with SMTP; 5 Dec 2002 13:22:50 -0000 Received: (qmail 10433 invoked by uid 500); 5 Dec 2002 13:21:44 -0000 Received: (qmail 10421 invoked from network); 5 Dec 2002 13:21:42 -0000 Received: from unknown (HELO KCCXOEX10.corp.kpmgconsulting.com) (57.80.136.6) by daedalus.apache.org with SMTP; 5 Dec 2002 13:21:42 -0000 Received: from kccxoex03.corp.kpmgconsulting.com ([57.80.136.6]) by KCCXOEX10.corp.kpmgconsulting.com with Microsoft SMTPSVC(5.0.2195.4905); Thu, 5 Dec 2002 13:10:26 +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_01C29C5F.985E4E29" Subject: [PATCH]: Cookie management refactored. Proposal Date: Thu, 5 Dec 2002 13:09:51 -0000 Message-ID: X-MS-Has-Attach: yes X-MS-TNEF-Correlator: Thread-Topic: [PATCH]: Cookie management refactored. Proposal Thread-Index: AcKcX5e2+xAWUGvSSb6rJ6hVpbGq7g== From: "Kalnichevski, Oleg" To: "Apache Jakarta (E-mail)" X-OriginalArrivalTime: 05 Dec 2002 13:10:26.0578 (UTC) FILETIME=[AD757F20:01C29C5F] X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N ------_=_NextPart_001_01C29C5F.985E4E29 Content-Type: text/plain; charset="KOI8-R" Content-Transfer-Encoding: quoted-printable Jeff, As discussed, the cookie management has been re-worked to allow for = (more) flexible cookie parsing and validation. Cookie management is now = policy driven and can be controlled by the HttpClient consumer through = CookiePolicy class or standards compliance strictness flag . When strict = mode is set false, HttpMethodBase allies less compliant but more = generally used cookie validation policy which should make the HttpClient = compatible with the cookie management of the major browsers out there.=20 The patch retains API compatibility with the older Cookie class (some of = the methods should later be deprecated, though) All the unit tests *should* be okay Please review the patch design-wise and give me your feedback or = critique I'd like to work a bit further on the patch before it is applied = (provided it gets approved at all) to make stuff RFC 2965 compliant=20 Cheers > Oleg Kalnichevski | Senior Consultant | BearingPoint | Zurich, = Switzerland > Phone +41 43 299 64 49 | Mobile +41 79 653 25 62 | Fax +41 43 299 64 = 65 > www.bearingpoint.com <>=20 ------_=_NextPart_001_01C29C5F.985E4E29 Content-Type: application/octet-stream; name="cookie.patch" Content-Transfer-Encoding: base64 Content-Description: cookie.patch Content-Disposition: attachment; filename="cookie.patch" PyBzcmMvamF2YS9vcmcvYXBhY2hlL2NvbW1vbnMvaHR0cGNsaWVudC9zdGF0ZW1nbXQKPyBzcmMv amF2YS9vcmcvYXBhY2hlL2NvbW1vbnMvaHR0cGNsaWVudC9zdGF0ZW1nbXQKPyBzcmMvamF2YS9v cmcvYXBhY2hlL2NvbW1vbnMvaHR0cGNsaWVudC9zdGF0ZW1nbXQKPyBzcmMvamF2YS9vcmcvYXBh Y2hlL2NvbW1vbnMvaHR0cGNsaWVudC9zdGF0ZW1nbXQKPyBzcmMvamF2YS9vcmcvYXBhY2hlL2Nv bW1vbnMvaHR0cGNsaWVudC9zdGF0ZW1nbXQKPyBzcmMvamF2YS9vcmcvYXBhY2hlL2NvbW1vbnMv aHR0cGNsaWVudC9zdGF0ZW1nbXQKSW5kZXg6IHNyYy9qYXZhL29yZy9hcGFjaGUvY29tbW9ucy9o dHRwY2xpZW50L0Nvb2tpZS5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2N2c3B1Ymxp Yy9qYWthcnRhLWNvbW1vbnMvaHR0cGNsaWVudC9zcmMvamF2YS9vcmcvYXBhY2hlL2NvbW1vbnMv aHR0cGNsaWVudC9Db29raWUuamF2YSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yOApkaWZmIC11 IC1yMS4yOCBDb29raWUuamF2YQotLS0gc3JjL2phdmEvb3JnL2FwYWNoZS9jb21tb25zL2h0dHBj bGllbnQvQ29va2llLmphdmEJMiBEZWMgMjAwMiAwNjoxNDo1NiAtMDAwMAkxLjI4CisrKyBzcmMv amF2YS9vcmcvYXBhY2hlL2NvbW1vbnMvaHR0cGNsaWVudC9Db29raWUuamF2YQk1IERlYyAyMDAy IDEyOjQ4OjI4IC0wMDAwCkBAIC02NiwxOCArNjYsMTQgQEAKIGltcG9ydCBvcmcuYXBhY2hlLmNv bW1vbnMubG9nZ2luZy5Mb2dGYWN0b3J5OwogCiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7 Ci1pbXBvcnQgamF2YS50ZXh0LkRhdGVGb3JtYXQ7Ci1pbXBvcnQgamF2YS50ZXh0LlBhcnNlRXhj ZXB0aW9uOwogaW1wb3J0IGphdmEudGV4dC5SdWxlQmFzZWRDb2xsYXRvcjsKLWltcG9ydCBqYXZh LnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKIGltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKIGlt cG9ydCBqYXZhLnV0aWwuRGF0ZTsKIGltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CiBpbXBvcnQg amF2YS51dGlsLkxpbmtlZExpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2 YS51dGlsLkxvY2FsZTsKLWltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCitpbXBv cnQgb3JnLmFwYWNoZS5jb21tb25zLmh0dHBjbGllbnQuc3RhdGVtZ210Lio7CiAKIAogLyoqCkBA IC00NDMsMTcgKzQzOSw3IEBACiAgICAgICogQHJldHVybiBhIHN0cmluZyBzdWl0YWJsZSBmb3Ig c2VuZGluZyBpbiBhIENvb2tpZSBoZWFkZXIuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyB0 b0V4dGVybmFsRm9ybSgpIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdC dWZmZXIoKTsKLSAgICAgICAgYnVmLmFwcGVuZChnZXROYW1lKCkpLmFwcGVuZCgiPSIpLmFwcGVu ZChnZXRWYWx1ZSgpKTsKLSAgICAgICAgaWYgKF9wYXRoICE9IG51bGwgJiYgaXNQYXRoQXR0cmli dXRlU3BlY2lmaWVkKCkpIHsKLSAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIjsgJFBhdGg9Iik7Ci0g ICAgICAgICAgICBidWYuYXBwZW5kKF9wYXRoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoX2Rv bWFpbiAhPSBudWxsICYmIGlzRG9tYWluQXR0cmlidXRlU3BlY2lmaWVkKCkpIHsKLSAgICAgICAg ICAgIGJ1Zi5hcHBlbmQoIjsgJERvbWFpbj0iKTsKLSAgICAgICAgICAgIGJ1Zi5hcHBlbmQoX2Rv bWFpbik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGJ1Zi50b1N0cmluZygpOworICAgICAg ICByZXR1cm4gQ29va2llUG9saWN5LmdldFNwZWNCeVZlcnNpb24oZ2V0VmVyc2lvbigpKS50b0V4 dGVybmFsRm9ybSh0aGlzKTsKICAgICB9CiAKICAgICAvKioKQEAgLTQ2NSw0OSArNDUxLDExIEBA CiAgICAgICogQHBhcmFtIHNlY3VyZSA8dHQ+dHJ1ZTwvdHQ+IGlmIHRoZSByZXF1ZXN0IGlzIHVz aW5nIHRoZSBIVFRQUyBwcm90b2NvbAogICAgICAqIEBwYXJhbSBkYXRlIHRoZSB0aW1lIGF0IHdo aWNoIHRoZSByZXF1ZXN0IGlzIHN1Ym1pdHRlZAogICAgICAqLwotICAgIHB1YmxpYyBib29sZWFu IG1hdGNoZXMoU3RyaW5nIGRvbWFpbiwgaW50IHBvcnQsIFN0cmluZyBwYXRoLCBib29sZWFuIHNl Y3VyZSwgRGF0ZSBkYXRlKSB7CisgICAgcHVibGljIGJvb2xlYW4gbWF0Y2hlcyhTdHJpbmcgZG9t YWluLCBpbnQgcG9ydCwgU3RyaW5nIHBhdGgsIGJvb2xlYW4gc2VjdXJlLCBEYXRlIGRhdGUpCisg ICAgewogICAgICAgICBsb2cudHJhY2UoImVudGVyIENvb2tpZS5tYXRjaGVzKFN0cmlubmcsIGlu dCwgU3RyaW5nLCBib29sZWFuLCBEYXRlIik7Ci0gICAgICAgIC8vIEZJWE1FOiBSRkMyMTA5IGRv ZXNuJ3QgY29uc2lkZXIgcG9ydHMgd2hlbiBmaWx0ZXJpbmcvbWF0Y2hpbmcKLSAgICAgICAgLy8g ICAgICAgIGNvb2tpZXMuIFF1b3RpbmcgZnJvbSBTZWN0aW9uIDIgLSBUZXJtaW5vbG9neToKLSAg ICAgICAgLy8gICAgICAgICAgVGhlIHRlcm1zIHJlcXVlc3QtaG9zdCBhbmQgcmVxdWVzdC1VUkkg cmVmZXIgdG8KLSAgICAgICAgLy8gICAgICAgICAgdGhlIHZhbHVlcyB0aGUgY2xpZW50IHdvdWxk IHNlbmQgdG8gdGhlIHNlcnZlcgotICAgICAgICAvLyAgICAgICAgICBhcywgcmVzcGVjdGl2ZWx5 LCB0aGUgaG9zdCAoYnV0IG5vdCBwb3J0KSBhbmQKLSAgICAgICAgLy8gICAgICAgICAgYWJzX3Bh dGggcG9ydGlvbnMgb2YgdGhlIGFic29sdXRlVVJJIChodHRwX1VSTCkKLSAgICAgICAgLy8gICAg ICAgICAgb2YgdGhlIEhUVFAgcmVxdWVzdCBsaW5lLgotICAgICAgICAvLwotICAgICAgICAvLyAg ICAgICAgUkZDMjk2NSBpbmNsdWRlcyBwb3J0cyBpbiBjb29raWUtc2VuZGluZwotICAgICAgICAv LyAgICAgICAgZGV0ZXJtaW5hdGlvbiwgYnV0IG9ubHkgd2hlbiB0aGUgY29va2llIGlzIHJlY2Vp dmVkCi0gICAgICAgIC8vICAgICAgICB2aWEgYSAnU2V0LUNvb2tpZTInIGhlYWRlci4KLSAgICAg ICAgLy8KLSAgICAgICAgLy8gICAgICAgIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGRvZXNu J3Qgc3VwcG9ydCBSRkMyOTY1LAotICAgICAgICAvLyAgICAgICAgYW5kIGlnbm9yZXMgcG9ydHMg d2hlbiBtYXRjaGluZyBjb29raWVzLgotICAgICAgICBpZiAoZG9tYWluID09IG51bGwpIHsKLSAg ICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImRvbWFpbiBwYXJh bWV0ZXIgbWF5IG5vdCBiZSBudWxsIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBhdGggPT0g bnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigi cGF0aCBwYXJhbWV0ZXIgbWF5IG5vdCBiZSBudWxsIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg KGRhdGUgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4 Y2VwdGlvbigiZGF0ZSBwYXJhbWV0ZXIgbWF5IG5vdCBiZSBudWxsIik7Ci0gICAgICAgIH0KLSAg ICAgICAgaWYgKGdldERvbWFpbigpID09IG51bGwpIHsKLSAgICAgICAgICAgIGxvZy53YXJuKCJJ bnZhbGlkIGNvb2tpZSBzdGF0ZTogZG9tYWluIG5vdCBzcGVjaWZpZWQiKTsKLSAgICAgICAgICAg IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZ2V0UGF0aCgpID09IG51bGwp IHsKLSAgICAgICAgICAgIGxvZy53YXJuKCJJbnZhbGlkIGNvb2tpZSBzdGF0ZTogcGF0aCBub3Qg c3BlY2lmaWVkIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg ICAgCi0gICAgICAgIGRvbWFpbiA9IGRvbWFpbi50b0xvd2VyQ2FzZSgpOwotCi0gICAgICAgIHJl dHVybiAoCi0gICAgICAgICAgICAgICAgKGdldEV4cGlyeURhdGUoKSA9PSBudWxsIHx8IAotICAg ICAgICAgICAgICAgICBnZXRFeHBpcnlEYXRlKCkuYWZ0ZXIoZGF0ZSkpICYmICAgICAgLy8gb25s eSBhZGQgdGhlIGNvb2tpZSBpZiBpdCBoYXNuJ3QgeWV0IGV4cGlyZWQKLSAgICAgICAgICAgICAg ICAoZG9tYWluTWF0Y2goZG9tYWluLCBnZXREb21haW4oKSkpICYmIC8vIGFuZCB0aGUgZG9tYWlu IHBhdHRlcm4gbWF0Y2hlcwotICAgICAgICAgICAgICAgIChwYXRoTWF0Y2gocGF0aCwgZ2V0UGF0 aCgpKSkgJiYgICAgICAgLy8gYW5kIHRoZSBwYXRoIGlzIG51bGwgb3IgbWF0Y2hpbmcKLSAgICAg ICAgICAgICAgICAoZ2V0U2VjdXJlKCkgPyBzZWN1cmUgOiB0cnVlKSAgICAgICAgIC8vIGFuZCBp ZiB0aGUgc2VjdXJlIGZsYWcgaXMgc2V0LCBvbmx5IGlmIHRoZSByZXF1ZXN0IGlzIGFjdHVhbGx5 IHNlY3VyZQotICAgICAgICAgICAgICAgKTsKKyAgICAgICAgQ29va2llU3BlYyBtYXRjaGVyID0g Q29va2llUG9saWN5LmdldERlZmF1bHRTcGVjKCk7CisgICAgICAgIHJldHVybiBtYXRjaGVyLm1h dGNoKGRvbWFpbiwgcG9ydCwgcGF0aCwgc2VjdXJlLCB0aGlzKTsKICAgICB9CiAKICAgICAvKioK QEAgLTU5NSw0NyArNTQzLDggQEAKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIEhlYWRlciBj cmVhdGVDb29raWVIZWFkZXIoU3RyaW5nIGRvbWFpbiwgaW50IHBvcnQsIFN0cmluZyBwYXRoLCBi b29sZWFuIHNlY3VyZSwgRGF0ZSBub3csIENvb2tpZVtdIGNvb2tpZXMpIAogICAgIHRocm93cyBJ bGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gewotCSBsb2cudHJhY2UoImVudGVyIENvb2tpZS5jcmVh dGVDb29raWVIZWFkZXIoU3RyaW5nLCBpbnQsIFN0cmluZywgYm9vbGVhbiwgRGF0ZSwgQ29va2ll W10pIik7Ci0KLSAgICAgICAgLy8gVmFsaWRhdGUgdGhlIGRvbWFpbiBhbmQgcGF0aAotICAgICAg ICBpZihkb21haW4gPT0gbnVsbCl7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3Vt ZW50RXhjZXB0aW9uKCJudWxsIGRvbWFpbiBpbiBjcmVhdGVDb29raWVIZWFkZXIuIik7Ci0gICAg ICAgIH0KLSAgICAgICAgaWYocGF0aCA9PSBudWxsKXsKLSAgICAgICAgICAgIHRocm93IG5ldyBJ bGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm51bGwgcGF0aCBpbiBjcmVhdGVDb29raWVIZWFkZXIu Iik7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sZWFuIGFkZGVkID0gZmFsc2U7Ci0gICAgICAg IFN0cmluZ0J1ZmZlciB2YWx1ZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQotICAgICAgICBpZiAo Y29va2llcy5sZW5ndGggPD0gMCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAg IH0KLSAgICAgICAgTGlzdCBhZGRlZENvb2tpZXMgPSBuZXcgTGlua2VkTGlzdCgpOwotICAgICAg ICBmb3IoaW50IGk9MDtpPGNvb2tpZXMubGVuZ3RoO2krKykgewotICAgICAgICAgICAgaWYoY29v a2llc1tpXS5tYXRjaGVzKGRvbWFpbixwb3J0LHBhdGgsc2VjdXJlLG5vdykpIHsKLSAgICAgICAg ICAgICAgICBhZGRJblBhdGhPcmRlcihhZGRlZENvb2tpZXMsIGNvb2tpZXNbaV0pOwotICAgICAg ICAgICAgICAgIGFkZGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg ICBpZiAoYWRkZWQpIHsKLSAgICAgICAgICAgIC8qIEZJWE1FLiAgV2UgYXNzdW1lIGhlcmUgdGhh dCBhbGwgdGhlIGNvb2tpZXMgd2UncmUgc2VuZGluZyBiYWNrCi0gICAgICAgICAgICAgKiBhcmUg dGhlIHNhbWUgdmVyc2lvbi4gIEEgYmV0dGVyIHNvbHV0aW9uIG1pZ2h0IGJlIHRvIHNlcGFyYXRl Ci0gICAgICAgICAgICAgKiBjb29raWVzIG9mIGRpZmZlcmVudCB2ZXJzaW9ucyBhbmQgc2VuZCB0 aGVtIG9uIHNlcGFyYXRlIGNvb2tpZQotICAgICAgICAgICAgICogaGVhZGVycy4KLSAgICAgICAg ICAgICAqLwotICAgICAgICAgICAgdmFsdWUuYXBwZW5kKCIkVmVyc2lvbj0iKTsKLSAgICAgICAg ICAgIHZhbHVlLmFwcGVuZCgoKENvb2tpZSlhZGRlZENvb2tpZXMuZ2V0KDApKS5nZXRWZXJzaW9u KCkpOwotICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpdHIgPSBhZGRlZENvb2tpZXMuaXRlcmF0 b3IoKTsgaXRyLmhhc05leHQoKTsgKSB7Ci0gICAgICAgICAgICAgICAgQ29va2llIGNvb2tpZSA9 IChDb29raWUpaXRyLm5leHQoKTsKLSAgICAgICAgICAgICAgICB2YWx1ZS5hcHBlbmQoIjsgIik7 Ci0gICAgICAgICAgICAgICAgdmFsdWUuYXBwZW5kKGNvb2tpZS50b0V4dGVybmFsRm9ybSgpKTsK LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIG5ldyBIZWFkZXIoIkNvb2tpZSIs IHZhbHVlLnRvU3RyaW5nKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJu IG51bGw7Ci0gICAgICAgIH0KKwkgICBsb2cudHJhY2UoImVudGVyIENvb2tpZS5jcmVhdGVDb29r aWVIZWFkZXIoU3RyaW5nLCBpbnQsIFN0cmluZywgYm9vbGVhbiwgRGF0ZSwgQ29va2llW10pIik7 CisgICAgICAgcmV0dXJuIENvb2tpZVBvbGljeS5nZXREZWZhdWx0U3BlYygpLmZvcm1hdChkb21h aW4sIHBvcnQsIHBhdGgsIHNlY3VyZSwgY29va2llcyk7IAogICAgIH0KIAogICAgIC8qKgpAQCAt NjYyLDE0ICs1NzEsMTQgQEAKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9IGVsc2Ug aWYgKGMxLmdldFBhdGgoKSA9PSBudWxsKSB7CiAgICAgICAgICAgICAvLyBudWxsIGlzIGFzc3Vt ZWQgdG8gYmUgIi8iCi0gICAgICAgICAgICBpZiAoYzIuZ2V0UGF0aCgpLmVxdWFscyhQQVRIX0RF TElNKSkgeworICAgICAgICAgICAgaWYgKGMyLmdldFBhdGgoKS5lcXVhbHMoQ29va2llU3BlYy5Q QVRIX0RFTElNKSkgewogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfSBl bHNlIHsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB9CiAgICAgICAg IH0gZWxzZSBpZiAoYzIuZ2V0UGF0aCgpID09IG51bGwpIHsKICAgICAgICAgICAgIC8vIG51bGwg aXMgYXNzdW1lZCB0byBiZSAiLyIKLSAgICAgICAgICAgIGlmIChjMS5nZXRQYXRoKCkuZXF1YWxz KFBBVEhfREVMSU0pKSB7CisgICAgICAgICAgICBpZiAoYzEuZ2V0UGF0aCgpLmVxdWFscyhDb29r aWVTcGVjLlBBVEhfREVMSU0pKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHJldHVybiAxOwpAQCAtNzc0LDM0OSArNjgz LDE4IEBACiAgICAgICAgIHRocm93cyBIdHRwRXhjZXB0aW9uLCBJbGxlZ2FsQXJndW1lbnRFeGNl cHRpb24gewogCWxvZy50cmFjZSgiZW50ZXIgQ29va2llLnBhcnNlKFN0cmluZywgaW50LCBTdHJp bmcsIGJvb2xlYW4sIEhlYWRlcikiKTsKIAotICAgICAgICAvLyBWYWxpZGF0ZSBkb21haW4gYW5k IHBhdGgKLSAgICAgICAgaWYoZG9tYWluID09IG51bGwpewotICAgICAgICAgICAgdGhyb3cgbmV3 IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiZG9tYWluIG1heSBub3QgYmUgbnVsbC4iKTsKLSAg ICAgICAgfQotICAgICAgICBpZihwYXRoID09IG51bGwpewotICAgICAgICAgICAgdGhyb3cgbmV3 IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigicGF0aCBtYXkgbm90IGJlIG51bGwuIik7Ci0gICAg ICAgIH0KLSAgICAgICAgaWYoc2V0Q29va2llID09IG51bGwpewotICAgICAgICAgICAgdGhyb3cg bmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigic2V0LWNvb2tpZSBoZWFkZXIgbWF5IG5vdCBi ZSBudWxsLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTm9ybWFsaXplIGRvbWFpbiBuYW1l Ci0gICAgICAgIGRvbWFpbiA9IGRvbWFpbi50b0xvd2VyQ2FzZSgpOwotCi0gICAgICAgIC8qIEJ1 aWxkIHRoZSBkZWZhdWx0IHBhdGguICBQZXIgUkZDIDIxMDkvNC4zLjEgdGhpcyBpcyB0aGUgCi0g ICAgICAgICAqIHJlcXVlc3QgcGF0aCB1cCB0bywgYnV0IG5vdCBpbmNsdWRpbmcsIHRoZSByaWdo dC1tb3N0IC8gY2hhcmF0ZXIuCi0gICAgICAgICAqLwotICAgICAgICBpZiAocGF0aC5sZW5ndGgo KSA9PSAwKSB7Ci0gICAgICAgICAgICBsb2cuZGVidWcoIkZpeGluZyB1cCBlbXB0eSByZXF1ZXN0 IHBhdGguIik7Ci0gICAgICAgICAgICBwYXRoID0gUEFUSF9ERUxJTTsKLSAgICAgICAgfQotICAg ICAgICBTdHJpbmcgZGVmYXVsdFBhdGggPSBudWxsOwotICAgICAgICBpbnQgbGFzdFNsYXNoSW5k ZXggPSBwYXRoLmxhc3RJbmRleE9mKFBBVEhfREVMSU0pOwotICAgICAgICBpZihsYXN0U2xhc2hJ bmRleCA9PSAwKXsKLSAgICAgICAgICAgIGRlZmF1bHRQYXRoID0gUEFUSF9ERUxJTTsKLSAgICAg ICAgfQotICAgICAgICBlbHNlIGlmKGxhc3RTbGFzaEluZGV4ID4gMCkgewotICAgICAgICAgICAg ZGVmYXVsdFBhdGggPSBwYXRoLnN1YnN0cmluZygwLCBsYXN0U2xhc2hJbmRleCk7Ci0gICAgICAg IH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBkZWZhdWx0UGF0aCA9IHBhdGg7Ci0gICAg ICAgIH0KLSAgICAgICAgCi0gICAgICAgIEhlYWRlckVsZW1lbnRbXSBoZWFkZXJFbGVtZW50cyA9 Ci0gICAgICAgICAgICBIZWFkZXJFbGVtZW50LnBhcnNlKHNldENvb2tpZS5nZXRWYWx1ZSgpKTsK LQotICAgICAgICBDb29raWVbXSBjb29raWVzID0gbmV3IENvb2tpZVtoZWFkZXJFbGVtZW50cy5s ZW5ndGhdOwotCi0gICAgICAgIGludCBpbmRleCA9IDA7Ci0gICAgICAgIGZvciAoaW50IGkgPSAw OyBpIDwgaGVhZGVyRWxlbWVudHMubGVuZ3RoOyBpKyspIHsKLQotICAgICAgICAgICAgSGVhZGVy RWxlbWVudCBoZWFkZXJlbGVtZW50ID0gaGVhZGVyRWxlbWVudHNbaV07Ci0gICAgICAgICAgICBD b29raWUgY29va2llID0gbmV3IENvb2tpZShkb21haW4sCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBoZWFkZXJlbGVtZW50LmdldE5hbWUoKSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcmVsZW1lbnQuZ2V0VmFsdWUoKSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRQYXRoLCAKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmYWxzZSk7Ci0KLSAgICAgICAgICAgIC8vIGN5Y2xlIHRocm91 Z2ggdGhlIHBhcmFtZXRlcnMKLSAgICAgICAgICAgIE5hbWVWYWx1ZVBhaXJbXSBwYXJhbWV0ZXJz ID0gaGVhZGVyZWxlbWVudC5nZXRQYXJhbWV0ZXJzKCk7Ci0gICAgICAgICAgICAvLyBjb3VsZCBi ZSBudWxsLiBJbiBjYXNlIG9ubHkgYSBoZWFkZXIgZWxlbWVudCBhbmQgbm8gcGFyYW1ldGVycy4K LSAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzICE9IG51bGwpIHsKLQotICAgICAgICAgICAgICAg IGZvciAoaW50IGogPSAwOyBqIDwgcGFyYW1ldGVycy5sZW5ndGg7IGorKykgewotCi0gICAgICAg ICAgICAgICAgICAgIFN0cmluZyBwYXJhbV9uYW1lID0gcGFyYW1ldGVyc1tqXS5nZXROYW1lKCku dG9Mb3dlckNhc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHBhcmFtX3ZhbHVlID0g cGFyYW1ldGVyc1tqXS5nZXRWYWx1ZSgpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChwYXJh bV9uYW1lLmVxdWFscygidmVyc2lvbiIpKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlm IChwYXJhbV92YWx1ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhy b3cgbmV3IEh0dHBFeGNlcHRpb24oIk1pc3NpbmcgdmFsdWUgZm9yIHZlcnNpb24gYXR0cmlidXRl Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB0 cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2llLnNldFZlcnNpb24oSW50ZWdl ci5wYXJzZUludChwYXJhbV92YWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRj aCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbiggIkludmFsaWQgdmVyc2lvbiBhdHRyaWJ1dGU6ICIg KyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg ICAgICAgICAgICAgfSAKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocGFyYW1fbmFtZS5l cXVhbHMoInBhdGgiKSkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1fdmFs dWUgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBIdHRw RXhjZXB0aW9uKCJNaXNzaW5nIHZhbHVlIGZvciBwYXRoIGF0dHJpYnV0ZSIpOwotICAgICAgICAg ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgY29va2llLnNldFBhdGgo cGFyYW1fdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29va2llLnNldFBhdGhBdHRy aWJ1dGVTcGVjaWZpZWQodHJ1ZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgfSAKLSAgICAgICAg ICAgICAgICAgICAgZWxzZSBpZiAocGFyYW1fbmFtZS5lcXVhbHMoImRvbWFpbiIpKSB7Ci0KLSAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbV92YWx1ZSA9PSBudWxsKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIk1pc3NpbmcgdmFs dWUgZm9yIGRvbWFpbiBhdHRyaWJ1dGUiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICAgICAgICAgIGNvb2tpZS5zZXREb21haW4ocGFyYW1fdmFsdWUpOwotICAg ICAgICAgICAgICAgICAgICAgICAgY29va2llLnNldERvbWFpbkF0dHJpYnV0ZVNwZWNpZmllZCh0 cnVlKTsKLQotICAgICAgICAgICAgICAgICAgICB9IAotICAgICAgICAgICAgICAgICAgICBlbHNl IGlmIChwYXJhbV9uYW1lLmVxdWFscygibWF4LWFnZSIpKSB7Ci0KLSAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChwYXJhbV92YWx1ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIk1pc3NpbmcgdmFsdWUgZm9yIG1heC1hZ2Ug YXR0cmlidXRlIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg ICAgICAgICBpbnQgYWdlOwotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhZ2UgPSBJbnRlZ2VyLnBhcnNlSW50KHBhcmFtX3ZhbHVlKTsK LSAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBl KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24o ICJJbnZhbGlkIG1heC1hZ2UgYXR0cmlidXRlOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAg ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgY29va2llLnNldEV4 cGlyeURhdGUobmV3IERhdGUoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgKwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBhZ2UgKiAxMDAwTCkpOwotCi0gICAgICAgICAgICAgICAg ICAgIH0gCi0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBhcmFtX25hbWUuZXF1YWxzKCJz ZWN1cmUiKSkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICBjb29raWUuc2V0U2VjdXJlKHRy dWUpOwotCi0gICAgICAgICAgICAgICAgICAgIH0gCi0gICAgICAgICAgICAgICAgICAgIGVsc2Ug aWYgKHBhcmFtX25hbWUuZXF1YWxzKCJjb21tZW50IikpIHsKLQotICAgICAgICAgICAgICAgICAg ICAgICAgY29va2llLnNldENvbW1lbnQocGFyYW1fdmFsdWUpOwotCi0gICAgICAgICAgICAgICAg ICAgIH0gCi0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBhcmFtX25hbWUuZXF1YWxzKCJl eHBpcmVzIikpIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtX3ZhbHVlID09 IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2Vw dGlvbigiTWlzc2luZyB2YWx1ZSBmb3IgZXhwaXJlcyBhdHRyaWJ1dGUiKTsKLSAgICAgICAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gc2V0ID0gZmFs c2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0cmltIHNpbmdsZSBxdW90ZXMgYXJvdW5k IGV4cGlyeSBpZiBwcmVzZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDov L25hZ295YS5hcGFjaGUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01Mjc5Ci0gICAgICAg ICAgICAgICAgICAgICAgICBpZihwYXJhbV92YWx1ZS5sZW5ndGgoKSA+IDEgJiYKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdmFsdWUuc3RhcnRzV2l0aCgiJyIpICYmCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3ZhbHVlLmVuZHNXaXRoKCInIikp IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV92YWx1ZSA9IHBhcmFtX3ZhbHVl LnN1YnN0cmluZygxLHBhcmFtX3ZhbHVlLmxlbmd0aCgpLTEpOwotICAgICAgICAgICAgICAgICAg ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IoaW50IGs9MDtrPGV4cGlyeUZv cm1hdHMubGVuZ3RoO2srKykgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZSBkYXRlID0gZXhwaXJ5Rm9ybWF0 c1trXS5wYXJzZShwYXJhbV92YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvb2tpZS5zZXRFeHBpcnlEYXRlKGRhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzZXQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBlKSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSWdub3JlIGFuZCBtb3ZlIG9uCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgICAgICAgICAgaWYoIXNldCkgewotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJVbmFibGUgdG8gcGFyc2UgZXhwaXJhdGlv biBkYXRlIHBhcmFtZXRlcjogIiArIHBhcmFtX3ZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGNvb2tpZSBo YXMgYWxsIHJlcXVpcmVkIGF0dHJpYnV0ZXMuIElmIG5vdCwgYXBwbHkgZGVmYXVsdHMKLSAgICAg ICAgICAgIGlmIChjb29raWUuZ2V0RG9tYWluKCkgPT0gbnVsbCkgewotICAgICAgICAgICAgICAg IGNvb2tpZS5zZXREb21haW4oZG9tYWluKTsKLSAgICAgICAgICAgICAgICBjb29raWUuc2V0RG9t YWluQXR0cmlidXRlU3BlY2lmaWVkKGZhbHNlKTsKLSAgICAgICAgICAgICAgICBpZiAobG9nLmlz RGVidWdFbmFibGVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCJEb21haW4g YXR0cmlidXRlIG5vdCBleHBsaWNpdGx5IHNldC4gRGVmYXVsdCBhcHBsaWVkOiBcIiIgKyBkb21h aW4gKyAiXCIiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg ICBpZiAoY29va2llLmdldFBhdGgoKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgY29va2ll LnNldFBhdGgoZGVmYXVsdFBhdGgpOwotICAgICAgICAgICAgICAgIGNvb2tpZS5zZXRQYXRoQXR0 cmlidXRlU3BlY2lmaWVkKGZhbHNlKTsKLSAgICAgICAgICAgICAgICBpZiAobG9nLmlzRGVidWdF bmFibGVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCJQYXRoIGF0dHJpYnV0 ZSBub3QgZXhwbGljaXRseSBzZXQuIERlZmF1bHQgYXBwbGllZDogXCIiICsgZGVmYXVsdFBhdGgg KyAiXCIiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgIENvb2tp ZVNwZWMgcGFyc2VyID0gQ29va2llUG9saWN5LmdldERlZmF1bHRTcGVjKCk7CisgICAgICAgIENv b2tpZVtdIGNvb2tpZXMgPSBwYXJzZXIucGFyc2UoZG9tYWluLCBwb3J0LCBwYXRoLCBzZWN1cmUs IHNldENvb2tpZSk7CiAKLSAgICAgICAgICAgIHZhbGlkYXRlKGNvb2tpZSwgZG9tYWluLCBwb3J0 LCBwYXRoLCBzZWN1cmUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZihsb2cuaXNEZWJ1 Z0VuYWJsZWQoKSl7Ci0gICAgICAgICAgICAgICAgbG9nLmRlYnVnKCJDb29raWUgYWNjZXB0ZWQ6 IFwiIiArIGNvb2tpZS50b1N0cmluZygpICsiXCIiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIGNvb2tpZXNbaW5kZXgrK10gPSBjb29raWU7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgY29va2llcy5sZW5ndGg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgQ29va2llIGNv b2tpZSA9IGNvb2tpZXNbaV07CisgICAgICAgICAgICBDb29raWVTcGVjIHZhbGlkYXRvciA9IENv b2tpZVBvbGljeS5nZXRTcGVjQnlWZXJzaW9uKGNvb2tpZS5nZXRWZXJzaW9uKCkpOworICAgICAg ICAgICAgdmFsaWRhdG9yLnZhbGlkYXRlKGRvbWFpbiwgcG9ydCwgcGF0aCwgc2VjdXJlLCBjb29r aWUpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb29raWVzOwogICAgIH0KIAotCi0gICAg cHJpdmF0ZSBzdGF0aWMgdm9pZCB2YWxpZGF0ZShDb29raWUgY29va2llLCBTdHJpbmcgZG9tYWlu LCBpbnQgcG9ydCwgU3RyaW5nIHBhdGgsIGJvb2xlYW4gc2VjdXJlKQotICAgICAgICB0aHJvd3Mg SHR0cEV4Y2VwdGlvbiB7Ci0gICAgICAgIGxvZy50cmFjZSgiZW50ZXIgQ29va2llLnZhbGlkYXRl KFN0cmluZywgaW50LCBTdHJpbmcsIGJvb2xlYW4pIik7Ci0gICAgICAgIC8vIFRoaXMgcHJpdmF0 ZSBtZXRob2QgZG9lcyBub3QgdmFsaWRhdGUgYW55IGlucHV0IHBhcmFtZXRlcnMgdW5kZXIgYXNz dW1wdGlvbgotICAgICAgICAvLyB0aGF0IHBhcmFtZXRlcnMgYXJlIHByb3Blcmx5IGludmFsaWRh dGVkIGJ5IHRoZSBjYWxsZXIKLQotICAgICAgICAvLyBjaGVjayB2ZXJzaW9uCi0gICAgICAgIGlm IChjb29raWUuZ2V0VmVyc2lvbigpIDwgMCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBF eGNlcHRpb24oICJJbGxlZ2FsIHZlcnNpb24gbnVtYmVyICIgKyBjb29raWUuZ2V0VmFsdWUoKSk7 Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBzZWN1cml0eSBjaGVjay4uLiB3ZSBtdXNuJ3QgYWxs b3cgdGhlIHNlcnZlciB0byBnaXZlIHVzIGFuCi0gICAgICAgIC8vIGludmFsaWQgZG9tYWluIHNj b3BlCi0KLSAgICAgICAgLy8gVmFsaWRhdGUgdGhlIGNvb2tpZXMgZG9tYWluIGF0dHJpYnV0ZS4g IE5PVEU6ICBEb21haW5zIHdpdGhvdXQgYW55IGRvdHMgYXJlCi0gICAgICAgIC8vIGFsbG93ZWQg dG8gc3VwcG9ydCBob3N0cyBvbiBwcml2YXRlIExBTnMgdGhhdCBkb24ndCBoYXZlIEROUyBuYW1l cy4gIFNpbmNlCi0gICAgICAgIC8vIHRoZXkgaGF2ZSBubyBkb3RzLCB0byBkb21haW4tbWF0Y2gg dGhlIHJlcXVlc3QtaG9zdCBhbmQgZG9tYWluIG11c3QgYmUgaWRlbnRpY2FsCi0gICAgICAgIC8v IGZvciB0aGUgY29va2llIHRvIHNlbnQgYmFjayB0byB0aGUgb3JpZ2luLXNlcnZlci4KLSAgICAg ICAgaWYgKCFjb29raWUuZ2V0RG9tYWluKCkuZXF1YWxzKCJsb2NhbGhvc3QiKSAmJiBkb21haW4u aW5kZXhPZigiLiIpID49IDApIHsKLQotICAgICAgICAgICAgLy8gTm90IHJlcXVpcmVkIHRvIGhh dmUgYXQgbGVhc3QgdHdvIGRvdHMuICBSRkMgMjk2NS4KLSAgICAgICAgICAgIC8vIEEgU2V0LUNv b2tpZTIgd2l0aCBEb21haW49YWpheC5jb20gd2lsbCBiZSBhY2NlcHRlZC4KLQotICAgICAgICAg ICAgLy8gZG9tYWluIG11c3QgZG9tYWluIG1hdGNoIGhvc3QKLSAgICAgICAgICAgIGlmICghZG9t YWluLmVuZHNXaXRoKGNvb2tpZS5nZXREb21haW4oKSkpewotICAgICAgICAgCi0gICAgICAgICAg ICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICJJbGxl Z2FsIGRvbWFpbiBhdHRyaWJ1dGUgXCIiICsgY29va2llLmdldERvbWFpbigpICsgIlwiLiBEb21h aW4gb2Ygb3JpZ2luOiBcIiIgKyBkb21haW4gKyAiXCIiKTsKLSAgICAgICAgIAotICAgICAgICAg ICAgfQotCi0gICAgICAgICAgICBzd2l0Y2goY29va2llLmdldFZlcnNpb24oKSkgewotICAgICAg ICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICAgICAgLy8gVmFsaWRhdGUgZG9tYWlu IHVzaW5nIE5ldHNjYXBlIGNvb2tpZSBzcGVjaWZpY2F0aW9uCi0gICAgICAgICAgICAgICAgICAg IHZhbGlkYXRlRG9tYWluQXR0cmliVmVyMChjb29raWUsIGRvbWFpbik7Ci0gICAgICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg ICAgIHZhbGlkYXRlRG9tYWluQXR0cmliVmVyMShjb29raWUsIGRvbWFpbik7Ci0gICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8g YW5vdGhlciBzZWN1cml0eSBjaGVjay4uLiB3ZSBtdXNuJ3QgYWxsb3cgdGhlIHNlcnZlciB0byBn aXZlIHVzIGEKLSAgICAgICAgLy8gY29va2llIHRoYXQgZG9lc24ndCBtYXRjaCB0aGlzIHBhdGgK LQotICAgICAgICBpZighcGF0aC5zdGFydHNXaXRoKGNvb2tpZS5nZXRQYXRoKCkpKSB7Ci0KLSAg ICAgICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAg ICAgIklsbGVnYWwgcGF0aCBhdHRyaWJ1dGUgXCIiICsgY29va2llLmdldFBhdGgoKSArICJcIi4g UGF0aCBvZiBvcmlnaW46IFwiIiArIHBhdGggKyAiXCIiKTsKLSAgICAgICAgfQotICAgIH0KLQot ICAgIC8qKgotICAgICAqIFZhbGlkYXRlIGRvbWFpbiBhdHRyaWJ1dGUgdXNpbmcgTmV0c2NhcGUg Y29va2llIHNwZWNpZmljYXRpb24gZHJhZnQKLSAgICAgKi8KLQotICAgIHByaXZhdGUgc3RhdGlj IHZvaWQgdmFsaWRhdGVEb21haW5BdHRyaWJWZXIwKGZpbmFsIENvb2tpZSBjb29raWUsIGZpbmFs IFN0cmluZyBkb21haW4pCi0gICAgICAgIHRocm93cyBIdHRwRXhjZXB0aW9uIHsKLSAgICAgICAg bG9nLnRyYWNlKCJlbnRlciBDb29raWUudmFsaWRhdGVEb21haW5BdHRyaWJWZXIwKCkiKTsKLQot ICAgICAgICBpbnQgZG9tYWluUGFydHMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGNvb2tpZS5nZXRE b21haW4oKSwgIi4iKS5jb3VudFRva2VucygpOwotCi0gICAgICAgIGlmIChpc1NwZWNpYWxEb21h aW4oY29va2llLmdldERvbWFpbigpKSkgewotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZihk b21haW5QYXJ0cyA8IDIpIHsKLQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0 aW9uKCJEb21haW4gYXR0cmlidXRlIFwiIisgY29va2llLmdldERvbWFpbigpICsgIlwiIHZpb2xh dGVzIHRoZSBOZXRzY2FwZSBjb29raWUgc3BlY2lmaWNhdGlvbiBmb3Igc3BlY2lhbCBkb21haW5z Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0KLSAgICAgICAg ICAgIGlmKGRvbWFpblBhcnRzIDwgMykgewotCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEh0 dHBFeGNlcHRpb24oIkRvbWFpbiBhdHRyaWJ1dGUgXCIiKyBjb29raWUuZ2V0RG9tYWluKCkgKyAi XCIgdmlvbGF0ZXMgdGhlIE5ldHNjYXBlIGNvb2tpZSBzcGVjaWZpY2F0aW9uIik7Ci0gICAgICAg ICAgICB9ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBW YWxpZGF0ZSBkb21haW4gdXNpbmcgUkZDIDIxMDkKLSAgICAgKi8KLQotICAgIHByaXZhdGUgc3Rh dGljIHZvaWQgdmFsaWRhdGVEb21haW5BdHRyaWJWZXIxKGZpbmFsIENvb2tpZSBjb29raWUsIGZp bmFsIFN0cmluZyBkb21haW4pCi0gICAgICAgIHRocm93cyBIdHRwRXhjZXB0aW9uIHsKLSAgICAg ICAgbG9nLnRyYWNlKCJlbnRlciBDb29raWUudmFsaWRhdGVEb21haW5BdHRyaWJWZXIxKCkiKTsK LQotICAgICAgICAvLyBkb21haW4gbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBlbWJlZGRlZCBkb3QK LSAgICAgICAgaW50IGRvdEluZGV4ID0gY29va2llLmdldERvbWFpbigpLmluZGV4T2YoJy4nLCAx KTsKLSAgICAgICAgaWYoZG90SW5kZXggPCAwIHx8IGRvdEluZGV4ID09IGNvb2tpZS5nZXREb21h aW4oKS5sZW5ndGgoKS0xKXsKLQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0 aW9uKCJJbGxlZ2FsIGRvbWFpbiBhdHRyaWJ1dGUgXCIiICsgY29va2llLmdldERvbWFpbigpICsg IlwiIik7Ci0KLSAgICAgICAgfQotICAgICAgICAvLyBob3N0IG1pbnVzIGRvbWFpbiBtYXkgbm90 IGNvbnRhaW4gYW55IGRvdHMKLSAgICAgICAgaWYgKGRvbWFpbi5zdWJzdHJpbmcoMCwKLSAgICAg ICAgICAgICAgICBkb21haW4ubGVuZ3RoKCkgLQotICAgICAgICAgICAgICAgIGNvb2tpZS5nZXRE b21haW4oKS5sZW5ndGgoKSkuaW5kZXhPZignLicpICE9IC0xKSB7Ci0KLSAgICAgICAgICAgICAg ICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSWxsZWdhbCBkb21haW4gYXR0cmlidXRlIFwiIiAr IGNvb2tpZS5nZXREb21haW4oKSArICJcIiIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoq Ci0gICAgICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBkb21haW4gaXMgaW4gb25lIG9mIHRoZSBzZXZl biBzcGVjaWFsCi0gICAgICogdG9wIGxldmVsIGRvbWFpbnMgZGVmaW5lZCBieSB0aGUgTmV0c2Nh cGUgY29va2llIHNwZWNpZmljYXRpb24uCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9v bGVhbiBpc1NwZWNpYWxEb21haW4oU3RyaW5nIGRvbWFpbikKLSAgICB7Ci0gICAgICAgIFN0cmlu ZyB1Y0RvbWFpbiA9IGRvbWFpbi50b1VwcGVyQ2FzZSgpOwotICAgICAgICBpZih1Y0RvbWFpbi5l bmRzV2l0aCgiLkNPTSIpIHx8Ci0gICAgICAgICAgIHVjRG9tYWluLmVuZHNXaXRoKCIuRURVIikg fHwKLSAgICAgICAgICAgdWNEb21haW4uZW5kc1dpdGgoIi5ORVQiKSB8fAotICAgICAgICAgICB1 Y0RvbWFpbi5lbmRzV2l0aCgiLkdPViIpIHx8Ci0gICAgICAgICAgIHVjRG9tYWluLmVuZHNXaXRo KCIuTUlMIikgfHwKLSAgICAgICAgICAgdWNEb21haW4uZW5kc1dpdGgoIi5PUkciKSB8fAotICAg ICAgICAgICB1Y0RvbWFpbi5lbmRzV2l0aCgiLklOVCIpKXsKLSAgICAgICAgICAgIHJldHVybiB0 cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgfQotCi0gICAg LyoqCi0gICAgICogUGVyZm9ybXMgYSBkb21haW4tbWF0Y2ggYXMgZGVzY3JpYmVkIGluIFJGQzIx MDkuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBkb21haW5NYXRjaChTdHJp bmcgaG9zdCwgU3RyaW5nIGRvbWFpbikKLSAgICB7Ci0gICAgICAgIGJvb2xlYW4gbWF0Y2ggPSBo b3N0LmVxdWFscyhkb21haW4pIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoZG9tYWluLnN0 YXJ0c1dpdGgoIi4iKSAmJiBob3N0LmVuZHNXaXRoKGRvbWFpbikpOwotCi0gICAgICAgIHJldHVy biBtYXRjaDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBQZXJmb3JtcyBhIHBhdGgtbWF0Y2gg c2xpZ2h0bHkgc21hcnRlciB0aGFuIGEgc3RyYWlnaHQtZm9yd2FyZCBzdGFydHNXaXRoIGNoZWNr LgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gcGF0aE1hdGNoKGZpbmFsIFN0 cmluZyBwYXRoLCBmaW5hbCBTdHJpbmcgdG9wbW9zdFBhdGgpCi0gICAgewotICAgICAgICBib29s ZWFuIG1hdGNoID0gcGF0aC5zdGFydHNXaXRoKCB0b3Btb3N0UGF0aCApOwotICAgICAgICBpZiAo bWF0Y2gpIHsKLSAgICAgICAgICAgIGlmICghdG9wbW9zdFBhdGguZW5kc1dpdGgoUEFUSF9ERUxJ TSkpIHsKLSAgICAgICAgICAgICAgICBtYXRjaCA9IChwYXRoLmNoYXJBdCh0b3Btb3N0UGF0aC5s ZW5ndGgoKSkgPT0gUEFUSF9ERUxJTV9DSEFSKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot ICAgICAgICByZXR1cm4gbWF0Y2g7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQWRkcyB0aGUg Z2l2ZW4gY29va2llIGludG8gdGhlIGdpdmVuIGxpc3QgaW4gZGVzY2VuZGluZyBwYXRoIG9yZGVy LiAgVGhhdCBpcywgCi0gICAgICogbW9yZSBzcGVjaWZpYyBwYXRoIHRvIGxlYXN0IHNwZWNpZmlj IHBhdGhzLiAgVGhpcyBtYXkgbm90IGJlIHRoZSBmYXN0ZXN0Ci0gICAgICogYWxnb3J5dGhtLCBi dXQgaXQnbGwgd29yayBPSyBmb3IgdGhlIHNtYWxsIG51bWJlciBvZiBjb29raWVzIHdlJ3JlIAot ICAgICAqIGdlbmVyYWxseSBkZWFsaW5nIHdpdGguCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbGlz dCAtIHRoZSBsaXN0IHRvIGFkZCB0aGUgY29va2llIHRvCi0gICAgICogQHBhcmFtIGFkZENvb2tp ZSAtIHRoZSBDb29raWUgdG8gYWRkIHRvIGxpc3QKLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRp YyB2b2lkIGFkZEluUGF0aE9yZGVyKExpc3QgbGlzdCwgQ29va2llIGFkZENvb2tpZSkKLSAgICB7 Ci0gICAgICAgIGludCBpID0gMDsKLQotICAgICAgICBmb3IoaT0wO2k8bGlzdC5zaXplKCk7aSsr KXsKLSAgICAgICAgICAgIENvb2tpZSBjID0gKENvb2tpZSlsaXN0LmdldChpKTsKLSAgICAgICAg ICAgIGlmKGFkZENvb2tpZS5jb21wYXJlKGFkZENvb2tpZSwgYykgPiAwKXsKLSAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBsaXN0LmFkZChp LCBhZGRDb29raWUpOwotICAgIH0KLQogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSW5zdGFuY2UgVmFyaWFibGVzCiAKICAgIC8qKiBN eSBjb21tZW50LiAqLwpAQCAtMTE0NSwyOSArNzIzLDEwIEBACiAKICAgIC8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENvbnN0 YW50cwogCi0gICAvKiogTGlzdCBvZiB2YWxpZCBkYXRlIGZvcm1hdHMgZm9yIHRoZSAiZXhwaXJl cyIgY29va2llIGF0dHJpYnV0ZS4gKi8KLSAgIHByaXZhdGUgc3RhdGljIGZpbmFsIERhdGVGb3Jt YXRbXSBleHBpcnlGb3JtYXRzID0gewotICAgICAgIC8vIFJGQyAxMTIzLCA4MjIsIERhdGUgYW5k IHRpbWUgc3BlY2lmaWNhdGlvbiBpcyBFbmdsaXNoLgotICAgICAgIG5ldyBTaW1wbGVEYXRlRm9y bWF0KCJFRUUsIGRkLU1NTS15eSBISDptbTpzcyB6IiwgTG9jYWxlLlVTKSwKLSAgICAgICBuZXcg U2ltcGxlRGF0ZUZvcm1hdCgiRUVFLCBkZC1NTU0teXl5eSBISDptbTpzcyB6IiwgTG9jYWxlLlVT KSwKLSAgICAgICBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgiRUVFIGRkLU1NTS15eSBISDptbTpzcyB6 IiwgTG9jYWxlLlVTKSwKLSAgICAgICBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgiRUVFIGRkLU1NTS15 eXl5IEhIOm1tOnNzIHoiLCBMb2NhbGUuVVMpLAotICAgICAgIG5ldyBTaW1wbGVEYXRlRm9ybWF0 KCJFRUUgZGQgTU1NIHl5IEhIOm1tOnNzIHoiLCBMb2NhbGUuVVMpLAotICAgICAgIG5ldyBTaW1w bGVEYXRlRm9ybWF0KCJFRUUgZGQgTU1NIHl5eXkgSEg6bW06c3MgeiIsIExvY2FsZS5VUyksCi0g ICAgICAgbmV3IFNpbXBsZURhdGVGb3JtYXQoIkVFRSwgZGQgTU1NIHl5IEhIOm1tOnNzIHoiLCBM b2NhbGUuVVMpLAotICAgICAgIG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJFRUUsIGRkIE1NTSB5eXl5 IEhIOm1tOnNzIHoiLCBMb2NhbGUuVVMpLAotICAgICAgIG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJF RUUsIGRkLU1NTS15eXl5IEhILW1tLXNzIHoiLCBMb2NhbGUuVVMpLAotICAgICAgIG5ldyBTaW1w bGVEYXRlRm9ybWF0KCJFRUUgZGQtTU1NLXl5eXkgSEgtbW0tc3MgeiIsIExvY2FsZS5VUykKLSAg IH07Ci0KICAgIC8qKiBDb2xsYXRvciBmb3IgQ29va2llIGNvbXBhcmlzb25zLiAgQ291bGQgYmUg cmVwbGFjZWQgd2l0aCByZWZlcmVuY2VzIHRvIHNwZWNpZmljIExvY2FsZXMuICovCiAgICBwcml2 YXRlIHN0YXRpYyBmaW5hbCBSdWxlQmFzZWRDb2xsYXRvciBzdHJpbmdDb2xsYXRvciA9CiAgICAg ICAgIChSdWxlQmFzZWRDb2xsYXRvcilSdWxlQmFzZWRDb2xsYXRvci5nZXRJbnN0YW5jZSgKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMb2NhbGUo ImVuIiwgIlVTIiwgIiIpKTsKLQotICAgLyoqIFBhdGggZGVsaW1pdGVyICovCi0gICBwcml2YXRl IHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFUSF9ERUxJTSA9ICIvIjsKLSAgIHByaXZhdGUgc3RhdGlj IGZpbmFsIGNoYXIgICBQQVRIX0RFTElNX0NIQVIgPSBQQVRIX0RFTElNLmNoYXJBdCgwKTsKIAog ICAgLyoqIExvZyBvYmplY3QgZm9yIHRoaXMgY2xhc3MgKi8KICAgIHByaXZhdGUgc3RhdGljIGZp bmFsIExvZyBsb2cgPSBMb2dGYWN0b3J5LmdldExvZyhDb29raWUuY2xhc3MpOwpJbmRleDogc3Jj L2phdmEvb3JnL2FwYWNoZS9jb21tb25zL2h0dHBjbGllbnQvQ29va2llUG9saWN5LmphdmEKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpSQ1MgZmlsZTogc3JjL2phdmEvb3JnL2FwYWNoZS9jb21tb25zL2h0dHBjbGllbnQv Q29va2llUG9saWN5LmphdmEKZGlmZiAtTiBzcmMvamF2YS9vcmcvYXBhY2hlL2NvbW1vbnMvaHR0 cGNsaWVudC9Db29raWVQb2xpY3kuamF2YQotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6 MDAgLTAwMDAKKysrIHNyYy9qYXZhL29yZy9hcGFjaGUvY29tbW9ucy9odHRwY2xpZW50L0Nvb2tp ZVBvbGljeS5qYXZhCTUgRGVjIDIwMDIgMTI6NDg6MjkgLTAwMDAKQEAgLTAsMCArMSwxMDggQEAK Ky8qCisgKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCisgKgorICog Q29weXJpZ2h0IChjKSAxOTk5LTIwMDIgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAg QWxsIHJpZ2h0cworICogcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK KyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAyLiBSZWRp c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICog My4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmli dXRpb24sIGlmCisgKiAgICBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xl Z2VtZW50OgorICogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlCisgKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93 d3cuYXBhY2hlLm9yZy8pLiIKKyAqICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZ2VtZW50 IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKKyAqICAgIGlmIGFuZCB3aGVyZXZl ciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZ2VtZW50cyBub3JtYWxseSBhcHBlYXIuCisgKgor ICogNC4gVGhlIG5hbWVzICJUaGUgSmFrYXJ0YSBQcm9qZWN0IiwgIkh0dHBDbGllbnQiLCBhbmQg IkFwYWNoZSBTb2Z0d2FyZQorICogICAgRm91bmRhdGlvbiIgbXVzdCBub3QgYmUgdXNlZCB0byBl bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3 YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgorICogICAg cGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCisgKgorICogNS4g UHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFw YWNoZSIKKyAqICAgIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhv dXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIEdyb3VwLgor ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVT U0VEIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgorICogSVRTIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisg KiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g QU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorICoKKyAqIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlv bnMgbWFkZSBieSBtYW55CisgKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLiAgRm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFj aGUgU29mdHdhcmUgRm91bmRhdGlvbiwgcGxlYXNlIHNlZQorICogPGh0dHA6Ly93d3cuYXBhY2hl Lm9yZy8+LgorICoKKyAqIFtBZGRpdGlvbmFsIG5vdGljZXMsIGlmIHJlcXVpcmVkIGJ5IHByaW9y IGxpY2Vuc2luZyBjb25kaXRpb25zXQorICoKKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUuY29t bW9ucy5odHRwY2xpZW50LnN0YXRlbWdtdDsKKworcHVibGljIGFic3RyYWN0IGNsYXNzIENvb2tp ZVBvbGljeQoreworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTVBBVElCSUxJVFkgID0g MDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORVRTQ0FQRV9EUkFGVCA9IDE7CisgICAg cHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkZDMjEwOSAgICAgICAgPSAyOworCisgICAgcHVibGlj IHN0YXRpYyAgICAgICBpbnQgREVGQVVMVCAgICAgICAgPSBSRkMyMTA5OworCisgICAgcHVibGlj IHN0YXRpYyBDb29raWVTcGVjIGdldFNwZWNCeVBvbGljeShpbnQgcG9saWN5KQorICAgIHsKKyAg ICAgICAgICAgIHN3aXRjaChwb2xpY3kpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg Y2FzZSBDT01QQVRJQklMSVRZOiAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb29r aWVTcGVjQmFzZSgpOyAKKyAgICAgICAgICAgICAgICBjYXNlIE5FVFNDQVBFX0RSQUZUOiAKKyAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBOZXRzY2FwZURyYWZ0U3BlYygpOyAKKyAgICAg ICAgICAgICAgICBjYXNlIFJGQzIxMDk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcg UkNGMjEwOVNwZWMoKTsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg ICAgICByZXR1cm4gbmV3IFJDRjIxMDlTcGVjKCk7IAorICAgICAgICAgICAgfQorICAgIH0KKwor CisgICAgcHVibGljIHN0YXRpYyBDb29raWVTcGVjIGdldERlZmF1bHRTcGVjKCkKKyAgICB7Cisg ICAgICAgIHJldHVybiBnZXRTcGVjQnlQb2xpY3koREVGQVVMVCk7CisgICAgfQorICAgIAorCisg ICAgcHVibGljIHN0YXRpYyBDb29raWVTcGVjIGdldFNwZWNCeVZlcnNpb24oaW50IHZlcikKKyAg ICB7CisgICAgICAgICAgICBzd2l0Y2godmVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgIGNhc2UgMDogCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTmV0c2NhcGVEcmFm dFNwZWMoKTsgCisgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gbmV3IFJDRjIxMDlTcGVjKCk7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIGdldERlZmF1bHRTcGVjKCk7IAorICAgICAgICAgICAgfQor ICAgIH0KKworCisgICAgcHVibGljIHN0YXRpYyBDb29raWVTcGVjIGdldENvbXBhdGliaWxpdHlT cGVjKCkKKyAgICB7CisgICAgICAgIHJldHVybiBnZXRTcGVjQnlQb2xpY3koQ09NUEFUSUJJTElU WSk7CisgICAgfQorfQpJbmRleDogc3JjL2phdmEvb3JnL2FwYWNoZS9jb21tb25zL2h0dHBjbGll bnQvQ29va2llU3BlYy5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IHNyYy9qYXZhL29yZy9hcGFj aGUvY29tbW9ucy9odHRwY2xpZW50L0Nvb2tpZVNwZWMuamF2YQpkaWZmIC1OIHNyYy9qYXZhL29y Zy9hcGFjaGUvY29tbW9ucy9odHRwY2xpZW50L0Nvb2tpZVNwZWMuamF2YQotLS0gL2Rldi9udWxs CTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIHNyYy9qYXZhL29yZy9hcGFjaGUvY29tbW9u cy9odHRwY2xpZW50L0Nvb2tpZVNwZWMuamF2YQk1IERlYyAyMDAyIDEyOjQ4OjI5IC0wMDAwCkBA IC0wLDAgKzEsODEgQEAKKy8qCisgKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNp b24gMS4xCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDIgVGhlIEFwYWNoZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cworICogcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0 CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K KyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmli dXRpb24uCisgKgorICogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0 aCB0aGUgcmVkaXN0cmlidXRpb24sIGlmCisgKiAgICBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9s bG93aW5nIGFja25vd2xlZ2VtZW50OgorICogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCisgKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5k YXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKKyAqICAgIEFsdGVybmF0ZWx5LCB0aGlz IGFja25vd2xlZ2VtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKKyAqICAg IGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZ2VtZW50cyBub3JtYWxs eSBhcHBlYXIuCisgKgorICogNC4gVGhlIG5hbWVzICJUaGUgSmFrYXJ0YSBQcm9qZWN0IiwgIkh0 dHBDbGllbnQiLCBhbmQgIkFwYWNoZSBTb2Z0d2FyZQorICogICAgRm91bmRhdGlvbiIgbXVzdCBu b3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Ig d3JpdHRlbgorICogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5v cmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5v dCBiZSBjYWxsZWQgIkFwYWNoZSIKKyAqICAgIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRo ZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUg QXBhY2hlIEdyb3VwLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycn IEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElP TiBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD VCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0Uu CisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorICoKKyAqIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50 YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55CisgKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYg b2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgRm9yIG1vcmUKKyAqIGluZm9ybWF0 aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiwgcGxlYXNlIHNlZQorICogPGh0 dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgorICoKKyAqIFtBZGRpdGlvbmFsIG5vdGljZXMsIGlmIHJl cXVpcmVkIGJ5IHByaW9yIGxpY2Vuc2luZyBjb25kaXRpb25zXQorICoKKyAqLworCitwYWNrYWdl IG9yZy5hcGFjaGUuY29tbW9ucy5odHRwY2xpZW50LnN0YXRlbWdtdDsKKworaW1wb3J0IG9yZy5h cGFjaGUuY29tbW9ucy5odHRwY2xpZW50LkhlYWRlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1v bnMuaHR0cGNsaWVudC5Db29raWU7CisKK3B1YmxpYyBpbnRlcmZhY2UgQ29va2llU3BlYworeyAg ICAKKyAgICAvKiogUGF0aCBkZWxpbWl0ZXIgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0 cmluZyBQQVRIX0RFTElNID0gIi8iOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2hhciAgIFBB VEhfREVMSU1fQ0hBUiA9IFBBVEhfREVMSU0uY2hhckF0KDApOworCisgICAgcHVibGljIENvb2tp ZVtdIHBhcnNlKFN0cmluZyBob3N0LCBpbnQgcG9ydCwgU3RyaW5nIHBhdGgsIGJvb2xlYW4gc2Vj dXJlLCBmaW5hbCBIZWFkZXIgaGVhZGVyKQorICAgICAgdGhyb3dzIE1hbGZvcm1lZENvb2tpZUV4 Y2VwdGlvbjsKKworICAgIHB1YmxpYyB2b2lkICAgICB2YWxpZGF0ZShTdHJpbmcgaG9zdCwgaW50 IHBvcnQsIFN0cmluZyBwYXRoLCBib29sZWFuIHNlY3VyZSwgZmluYWwgQ29va2llIGNvb2tpZSkg CisgICAgICB0aHJvd3MgTWFsZm9ybWVkQ29va2llRXhjZXB0aW9uOworICAgIAorICAgIHB1Ymxp YyBib29sZWFuICBtYXRjaChTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBwYXRoLCBib29s ZWFuIHNlY3VyZSwgZmluYWwgQ29va2llIGNvb2tpZSk7CisKKyAgICBwdWJsaWMgU3RyaW5nICAg dG9FeHRlcm5hbEZvcm0oQ29va2llIGNvb2tpZSk7CisKKyAgICBwdWJsaWMgSGVhZGVyICAgZm9y bWF0KFN0cmluZyBob3N0LCBpbnQgcG9ydCwgU3RyaW5nIHBhdGgsIGJvb2xlYW4gc2VjdXJlLCBD b29raWVbXSBjb29raWVzKTsKKyAgICAKK30KSW5kZXg6IHNyYy9qYXZhL29yZy9hcGFjaGUvY29t bW9ucy9odHRwY2xpZW50L0Nvb2tpZVNwZWNCYXNlLmphdmEKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog c3JjL2phdmEvb3JnL2FwYWNoZS9jb21tb25zL2h0dHBjbGllbnQvQ29va2llU3BlY0Jhc2UuamF2 YQpkaWZmIC1OIHNyYy9qYXZhL29yZy9hcGFjaGUvY29tbW9ucy9odHRwY2xpZW50L0Nvb2tpZVNw ZWNCYXNlLmphdmEKLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBz cmMvamF2YS9vcmcvYXBhY2hlL2NvbW1vbnMvaHR0cGNsaWVudC9Db29raWVTcGVjQmFzZS5qYXZh CTUgRGVjIDIwMDIgMTI6NDg6MjkgLTAwMDAKQEAgLTAsMCArMSw1NTUgQEAKKy8qCisgKiBUaGUg QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCisgKgorICogQ29weXJpZ2h0IChj KSAxOTk5LTIwMDIgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwor ICogcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6 CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gVGhlIGVuZC11 c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sIGlmCisg KiAgICBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZ2VtZW50OgorICog ICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCisg KiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9y Zy8pLiIKKyAqICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZ2VtZW50IG1heSBhcHBlYXIg aW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKKyAqICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJk LXBhcnR5IGFja25vd2xlZ2VtZW50cyBub3JtYWxseSBhcHBlYXIuCisgKgorICogNC4gVGhlIG5h bWVzICJUaGUgSmFrYXJ0YSBQcm9qZWN0IiwgIkh0dHBDbGllbnQiLCBhbmQgIkFwYWNoZSBTb2Z0 d2FyZQorICogICAgRm91bmRhdGlvbiIgbXVzdCBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiwg cGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSIKKyAqICAg IG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3Jp dHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIEdyb3VwLgorICoKKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJ RUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q TElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgorICogSVRTIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJ TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQK KyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ T1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIFRo aXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBt YW55CisgKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLiAgRm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUg Rm91bmRhdGlvbiwgcGxlYXNlIHNlZQorICogPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgorICoK KyAqIFtBZGRpdGlvbmFsIG5vdGljZXMsIGlmIHJlcXVpcmVkIGJ5IHByaW9yIGxpY2Vuc2luZyBj b25kaXRpb25zXQorICoKKyAqLworCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS5jb21tb25zLmh0dHBj bGllbnQuc3RhdGVtZ210OworCitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGph dmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OworaW1wb3J0IGphdmEu dXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7ICAgCitpbXBvcnQgamF2YS50ZXh0 LkRhdGVGb3JtYXQ7IAoraW1wb3J0IGphdmEudGV4dC5QYXJzZUV4Y2VwdGlvbjsgCitpbXBvcnQg amF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXQ7ICAKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMu aHR0cGNsaWVudC5OYW1lVmFsdWVQYWlyOworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5odHRw Y2xpZW50Lkh0dHBFeGNlcHRpb247CitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmh0dHBjbGll bnQuSGVhZGVyOworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5odHRwY2xpZW50LkhlYWRlckVs ZW1lbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmh0dHBjbGllbnQuQ29va2llOworCitp bXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOworaW1wb3J0IG9yZy5hcGFjaGUu Y29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7CisKK3B1YmxpYyBjbGFzcyBDb29raWVTcGVjQmFz ZSBpbXBsZW1lbnRzIENvb2tpZVNwZWMKK3sKKyAgICAvKiogTG9nIG9iamVjdCAqLworICAgIHBy b3RlY3RlZCBzdGF0aWMgZmluYWwgTG9nIGxvZyA9IExvZ0ZhY3RvcnkuZ2V0TG9nKENvb2tpZVNw ZWMuY2xhc3MpOworCisgICAvKiogTGlzdCBvZiB2YWxpZCBkYXRlIGZvcm1hdHMgZm9yIHRoZSAi ZXhwaXJlcyIgY29va2llIGF0dHJpYnV0ZS4gKi8KKyAgIHByaXZhdGUgc3RhdGljIGZpbmFsIERh dGVGb3JtYXRbXSBleHBpcnlGb3JtYXRzID0geworICAgICAgIC8vIFJGQyAxMTIzLCA4MjIsIERh dGUgYW5kIHRpbWUgc3BlY2lmaWNhdGlvbiBpcyBFbmdsaXNoLgorICAgICAgIG5ldyBTaW1wbGVE YXRlRm9ybWF0KCJFRUUsIGRkLU1NTS15eSBISDptbTpzcyB6IiwgTG9jYWxlLlVTKSwKKyAgICAg ICBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgiRUVFLCBkZC1NTU0teXl5eSBISDptbTpzcyB6IiwgTG9j YWxlLlVTKSwKKyAgICAgICBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgiRUVFIGRkLU1NTS15eSBISDpt bTpzcyB6IiwgTG9jYWxlLlVTKSwKKyAgICAgICBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgiRUVFIGRk LU1NTS15eXl5IEhIOm1tOnNzIHoiLCBMb2NhbGUuVVMpLAorICAgICAgIG5ldyBTaW1wbGVEYXRl Rm9ybWF0KCJFRUUgZGQgTU1NIHl5IEhIOm1tOnNzIHoiLCBMb2NhbGUuVVMpLAorICAgICAgIG5l dyBTaW1wbGVEYXRlRm9ybWF0KCJFRUUgZGQgTU1NIHl5eXkgSEg6bW06c3MgeiIsIExvY2FsZS5V UyksCisgICAgICAgbmV3IFNpbXBsZURhdGVGb3JtYXQoIkVFRSwgZGQgTU1NIHl5IEhIOm1tOnNz IHoiLCBMb2NhbGUuVVMpLAorICAgICAgIG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJFRUUsIGRkIE1N TSB5eXl5IEhIOm1tOnNzIHoiLCBMb2NhbGUuVVMpLAorICAgICAgIG5ldyBTaW1wbGVEYXRlRm9y bWF0KCJFRUUsIGRkLU1NTS15eXl5IEhILW1tLXNzIHoiLCBMb2NhbGUuVVMpLAorICAgICAgIG5l dyBTaW1wbGVEYXRlRm9ybWF0KCJFRUUgZGQtTU1NLXl5eXkgSEgtbW0tc3MgeiIsIExvY2FsZS5V UykKKyAgIH07CisKKyAgICBwdWJsaWMgQ29va2llU3BlY0Jhc2UoKQorICAgIHsKKyAgICAgICAg c3VwZXIoKTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAgKiBQYXJzZXMgdGhlIFNldC1Db29r aWUge0BsaW5rIEhlYWRlcn0gaW50byBhbiBhcnJheSBvZgorICAgICAgKiA8dHQ+Q29va2llPC90 dD5zLgorICAgICAgKgorICAgICAgKiA8UD5UaGUgc3ludGF4IGZvciB0aGUgU2V0LUNvb2tpZSBy ZXNwb25zZSBoZWFkZXIgaXM6CisgICAgICAqCisgICAgICAqIDxQUkU+CisgICAgICAqIHNldC1j b29raWUgICAgICA9ICAgICJTZXQtQ29va2llOiIgY29va2llcworICAgICAgKiBjb29raWVzICAg ICAgICAgPSAgICAxI2Nvb2tpZQorICAgICAgKiBjb29raWUgICAgICAgICAgPSAgICBOQU1FICI9 IiBWQUxVRSAqICgiOyIgY29va2llLWF2KQorICAgICAgKiBOQU1FICAgICAgICAgICAgPSAgICBh dHRyCisgICAgICAqIFZBTFVFICAgICAgICAgICA9ICAgIHZhbHVlCisgICAgICAqIGNvb2tpZS1h diAgICAgICA9ICAgICJDb21tZW50IiAiPSIgdmFsdWUKKyAgICAgICogICAgICAgICAgICAgICAg IHwgICAgIkRvbWFpbiIgIj0iIHZhbHVlCisgICAgICAqICAgICAgICAgICAgICAgICB8ICAgICJN YXgtQWdlIiAiPSIgdmFsdWUKKyAgICAgICogICAgICAgICAgICAgICAgIHwgICAgIlBhdGgiICI9 IiB2YWx1ZQorICAgICAgKiAgICAgICAgICAgICAgICAgfCAgICAiU2VjdXJlIgorICAgICAgKiAg ICAgICAgICAgICAgICAgfCAgICAiVmVyc2lvbiIgIj0iIDEqRElHSVQKKyAgICAgICogPC9QUkU+ CisgICAgICAqCisgICAgICAqIEBwYXJhbSBoZWFkZXIgdGhlIDx0dD5TZXQtQ29va2llPC90dD4g e0BsaW5rIEhlYWRlcn0gcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyCisgICAgICAqIEByZXR1cm4g YW4gYXJyYXkgb2YgPHR0PkNvb2tpZTwvdHQ+cyBwYXJzZWQgZnJvbSB0aGUgU2V0LUNvb2tpZSB7 QGxpbmsgSGVhZGVyfQorICAgICAgKiBAdGhyb3dzIEh0dHBFeGNlcHRpb24gaWYgYW4gZXhjZXB0 aW9uIG9jY3VycyBkdXJpbmcgcGFyc2luZworICAgICAgKiBAdGhyb3dzIGphdmEubGFuZy5JbGxl Z2FsQXJndW1lbnRFeGNlcHRpb24gaWYge0BsaW5rIEhlYWRlcn0gcGFyYW1ldGVyIGlzIG51bGwK KyAgICAgICovCisKKyAgICBwdWJsaWMgQ29va2llW10gcGFyc2UoU3RyaW5nIGhvc3QsIGludCBw b3J0LCBTdHJpbmcgcGF0aCwgYm9vbGVhbiBzZWN1cmUsIGZpbmFsIEhlYWRlciBoZWFkZXIpIAor ICAgICAgdGhyb3dzIE1hbGZvcm1lZENvb2tpZUV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgbG9n LnRyYWNlKCJlbnRlciBDb29raWVTcGVjQmFzZS5wYXJzZShTdHJpbmcsIHBvcnQsIHBhdGgsIGJv b2xlYW4sIEhlYWRlcikiKTsKKworICAgICAgICBpZihob3N0ID09IG51bGwpCisgICAgICAgIHsK KyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkhvc3Qgb2Yg b3JpZ2luIG1heSBub3QgYmUgbnVsbCIpOworICAgICAgICB9CisgICAgICAgIGlmKGhvc3QudHJp bSgpLmVxdWFscygiIikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2Fs QXJndW1lbnRFeGNlcHRpb24oIkhvc3Qgb2Ygb3JpZ2luIG1heSBub3QgYmUgYmxhbmsiKTsKKyAg ICAgICAgfQorICAgICAgICBpZihwb3J0IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhy b3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBwb3J0OiAiICsgcG9ydCk7 CisgICAgICAgIH0KKyAgICAgICAgaWYocGF0aCA9PSBudWxsKQorICAgICAgICB7CisgICAgICAg ICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJQYXRoIG9mIG9yaWdpbiBt YXkgbm90IGJlIG51bGwuIik7CisgICAgICAgIH0KKyAgICAgICAgaWYoaGVhZGVyID09IG51bGwp CisgICAgICAgIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRp b24oIkhlYWRlciBtYXkgbm90IGJlIG51bGwuIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAo cGF0aC50cmltKCkuZXF1YWxzKCIiKSkgeworICAgICAgICAgICAgcGF0aCA9IFBBVEhfREVMSU07 CisgICAgICAgIH0KKyAgICAgICAgaG9zdCA9IGhvc3QudG9Mb3dlckNhc2UoKTsKKyAgICAKKyAg ICAgICAgSGVhZGVyRWxlbWVudFtdIGhlYWRlckVsZW1lbnRzID0gbnVsbDsKKyAgICAgICAgdHJ5 CisgICAgICAgIHsKKyAgICAgICAgICAgIGhlYWRlckVsZW1lbnRzID0gSGVhZGVyRWxlbWVudC5w YXJzZShoZWFkZXIuZ2V0VmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2goSHR0cEV4 Y2VwdGlvbiBlKQorICAgICAgICB7CisgICAgICAgICAgICB0aHJvdyBuZXcgTWFsZm9ybWVkQ29v a2llRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfSAKKyAgICAKKyAgICAgICAg U3RyaW5nIGRlZmF1bHRQYXRoID0gcGF0aDsgICAgCisgICAgICAgIGludCBsYXN0U2xhc2hJbmRl eCA9IGRlZmF1bHRQYXRoLmxhc3RJbmRleE9mKFBBVEhfREVMSU0pOworICAgICAgICBpZihsYXN0 U2xhc2hJbmRleCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlZmF1bHRQYXRoID0gZGVm YXVsdFBhdGguc3Vic3RyaW5nKDAsIGxhc3RTbGFzaEluZGV4KTsKKyAgICAgICAgfQorICAgICAg ICAKKyAgICAgICAgQ29va2llW10gY29va2llcyA9IG5ldyBDb29raWVbaGVhZGVyRWxlbWVudHMu bGVuZ3RoXTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGhlYWRlckVsZW1lbnRzLmxl bmd0aDsgaSsrKSB7CisKKyAgICAgICAgICAgIEhlYWRlckVsZW1lbnQgaGVhZGVyZWxlbWVudCA9 IGhlYWRlckVsZW1lbnRzW2ldOworICAgICAgICAgICAgQ29va2llIGNvb2tpZSA9IG5ldyBDb29r aWUoaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcmVs ZW1lbnQuZ2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aGVhZGVyZWxlbWVudC5nZXRWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGVmYXVsdFBhdGgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNl KTsKKworICAgICAgICAgICAgLy8gY3ljbGUgdGhyb3VnaCB0aGUgcGFyYW1ldGVycworICAgICAg ICAgICAgTmFtZVZhbHVlUGFpcltdIHBhcmFtZXRlcnMgPSBoZWFkZXJlbGVtZW50LmdldFBhcmFt ZXRlcnMoKTsKKyAgICAgICAgICAgIC8vIGNvdWxkIGJlIG51bGwuIEluIGNhc2Ugb25seSBhIGhl YWRlciBlbGVtZW50IGFuZCBubyBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgaWYgKHBhcmFtZXRl cnMgIT0gbnVsbCkgeworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBwYXJh bWV0ZXJzLmxlbmd0aDsgaisrKSB7CisKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHBhcmFt X25hbWUgPSBwYXJhbWV0ZXJzW2pdLmdldE5hbWUoKS50b0xvd2VyQ2FzZSgpOworICAgICAgICAg ICAgICAgICAgICBTdHJpbmcgcGFyYW1fdmFsdWUgPSBwYXJhbWV0ZXJzW2pdLmdldFZhbHVlKCk7 CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtX25hbWUuZXF1YWxzKCJ2ZXJzaW9uIikp IHsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtX3ZhbHVlID09IG51bGwpIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTWFsZm9ybWVkQ29va2llRXhj ZXB0aW9uKCJNaXNzaW5nIHZhbHVlIGZvciB2ZXJzaW9uIGF0dHJpYnV0ZSIpOworICAgICAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvb2tpZS5zZXRWZXJzaW9uKEludGVnZXIucGFyc2VJbnQocGFy YW1fdmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1h dEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE1h bGZvcm1lZENvb2tpZUV4Y2VwdGlvbiggIkludmFsaWQgdmVyc2lvbiBhdHRyaWJ1dGU6ICIgKyBl LmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg ICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocGFyYW1fbmFtZS5lcXVh bHMoInBhdGgiKSkgeworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1fdmFsdWUg PT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBNYWxmb3Jt ZWRDb29raWVFeGNlcHRpb24oIk1pc3NpbmcgdmFsdWUgZm9yIHBhdGggYXR0cmlidXRlIik7Cisg ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFy YW1fdmFsdWUudHJpbSgpLmVxdWFscygiIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0aHJvdyBuZXcgTWFsZm9ybWVkQ29va2llRXhjZXB0aW9uKCJCbGFuayB2YWx1ZSBmb3IgcGF0 aCBhdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgICAgIGNvb2tpZS5zZXRQYXRoKHBhcmFtX3ZhbHVlKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGNvb2tpZS5zZXRQYXRoQXR0cmlidXRlU3BlY2lmaWVkKHRydWUpOworCisgICAgICAg ICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBhcmFtX25hbWUu ZXF1YWxzKCJkb21haW4iKSkgeworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1f dmFsdWUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBN YWxmb3JtZWRDb29raWVFeGNlcHRpb24oIk1pc3NpbmcgdmFsdWUgZm9yIGRvbWFpbiBhdHRyaWJ1 dGUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg IGlmIChwYXJhbV92YWx1ZS50cmltKCkuZXF1YWxzKCIiKSkgeworICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRocm93IG5ldyBNYWxmb3JtZWRDb29raWVFeGNlcHRpb24oIkJsYW5rIHZhbHVl IGZvciBkb21haW4gYXR0cmlidXRlIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgICAgICBjb29raWUuc2V0RG9tYWluKHBhcmFtX3ZhbHVlKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGNvb2tpZS5zZXREb21haW5BdHRyaWJ1dGVTcGVjaWZpZWQodHJ1 ZSk7CisKKyAgICAgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBp ZiAocGFyYW1fbmFtZS5lcXVhbHMoIm1heC1hZ2UiKSkgeworCisgICAgICAgICAgICAgICAgICAg ICAgICBpZiAocGFyYW1fdmFsdWUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRocm93IG5ldyBNYWxmb3JtZWRDb29raWVFeGNlcHRpb24oIk1pc3NpbmcgdmFsdWUgZm9y IG1heC1hZ2UgYXR0cmlidXRlIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgYWdlOworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2UgPSBJbnRlZ2VyLnBhcnNlSW50KHBhcmFt X3ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4 Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE1hbGZv cm1lZENvb2tpZUV4Y2VwdGlvbiggIkludmFsaWQgbWF4LWFnZSBhdHRyaWJ1dGU6ICIgKyBlLmdl dE1lc3NhZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICAgICAgICBjb29raWUuc2V0RXhwaXJ5RGF0ZShuZXcgRGF0ZShTeXN0ZW0uY3VycmVudFRpbWVN aWxsaXMoKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZSAqIDEwMDBMKSk7 CisKKyAgICAgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo cGFyYW1fbmFtZS5lcXVhbHMoInNlY3VyZSIpKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAg IGNvb2tpZS5zZXRTZWN1cmUodHJ1ZSk7CisKKyAgICAgICAgICAgICAgICAgICAgfSAKKyAgICAg ICAgICAgICAgICAgICAgZWxzZSBpZiAocGFyYW1fbmFtZS5lcXVhbHMoImNvbW1lbnQiKSkgewor CisgICAgICAgICAgICAgICAgICAgICAgICBjb29raWUuc2V0Q29tbWVudChwYXJhbV92YWx1ZSk7 CisKKyAgICAgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo cGFyYW1fbmFtZS5lcXVhbHMoImV4cGlyZXMiKSkgeworCisgICAgICAgICAgICAgICAgICAgICAg ICBpZiAocGFyYW1fdmFsdWUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRocm93IG5ldyBNYWxmb3JtZWRDb29raWVFeGNlcHRpb24oIk1pc3NpbmcgdmFsdWUgZm9yIGV4 cGlyZXMgYXR0cmlidXRlIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgICAgICBib29sZWFuIHNldCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAg ICAgLy8gdHJpbSBzaW5nbGUgcXVvdGVzIGFyb3VuZCBleHBpcnkgaWYgcHJlc2VudAorICAgICAg ICAgICAgICAgICAgICAgICAgLy8gc2VlIGh0dHA6Ly9uYWdveWEuYXBhY2hlLm9yZy9idWd6aWxs YS9zaG93X2J1Zy5jZ2k/aWQ9NTI3OQorICAgICAgICAgICAgICAgICAgICAgICAgaWYocGFyYW1f dmFsdWUubGVuZ3RoKCkgPiAxICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh cmFtX3ZhbHVlLnN0YXJ0c1dpdGgoIiciKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwYXJhbV92YWx1ZS5lbmRzV2l0aCgiJyIpKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGFyYW1fdmFsdWUgPSBwYXJhbV92YWx1ZS5zdWJzdHJpbmcoMSxwYXJhbV92YWx1ZS5s ZW5ndGgoKS0xKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg ICAgICAgICAgZm9yKGludCBrPTA7azxleHBpcnlGb3JtYXRzLmxlbmd0aDtrKyspIHsKKworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIERhdGUgZGF0ZSA9IGV4cGlyeUZvcm1hdHNba10ucGFyc2UocGFyYW1fdmFsdWUpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29raWUuc2V0RXhwaXJ5RGF0ZShkYXRl KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0ID0gdHJ1ZTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfSBjYXRjaCAoUGFyc2VFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvL0lnbm9yZSBhbmQgbW92ZSBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlm KCFzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTWFsZm9ybWVk Q29va2llRXhjZXB0aW9uKCJVbmFibGUgdG8gcGFyc2UgZXhwaXJhdGlvbiBkYXRlIHBhcmFtZXRl cjogIiArIHBhcmFtX3ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGNvb2tpZXNbaV0gPSBjb29raWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvb2tp ZXM7CisgICAgfQorICAgIAorICAgIAorICAgIHB1YmxpYyB2b2lkIHZhbGlkYXRlKFN0cmluZyBo b3N0LCBpbnQgcG9ydCwgU3RyaW5nIHBhdGgsIGJvb2xlYW4gc2VjdXJlLCBmaW5hbCBDb29raWUg Y29va2llKSB0aHJvd3MgTWFsZm9ybWVkQ29va2llRXhjZXB0aW9uCisgICAgeworICAgICAgICBs b2cudHJhY2UoImVudGVyIENvb2tpZVNwZWNCYXNlLnZhbGlkYXRlKENvb2tpZSkiKTsKKyAgICAg ICAgaWYoaG9zdCA9PSBudWxsKQorICAgICAgICB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxs ZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJIb3N0IG9mIG9yaWdpbiBtYXkgbm90IGJlIG51bGwiKTsK KyAgICAgICAgfQorICAgICAgICBpZihob3N0LnRyaW0oKS5lcXVhbHMoIiIpKQorICAgICAgICB7 CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJIb3N0IG9m IG9yaWdpbiBtYXkgbm90IGJlIGJsYW5rIik7CisgICAgICAgIH0KKyAgICAgICAgaWYocG9ydCA8 IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNl cHRpb24oIkludmFsaWQgcG9ydDogIiArIHBvcnQpOworICAgICAgICB9CisgICAgICAgIGlmKHBh dGggPT0gbnVsbCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1 bWVudEV4Y2VwdGlvbigiUGF0aCBvZiBvcmlnaW4gbWF5IG5vdCBiZSBudWxsLiIpOworICAgICAg ICB9CisgICAgICAgIGlmIChwYXRoLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICBw YXRoID0gUEFUSF9ERUxJTTsKKyAgICAgICAgfQorICAgICAgICBob3N0ID0gaG9zdC50b0xvd2Vy Q2FzZSgpOworICAgICAgICAvLyBjaGVjayB2ZXJzaW9uCisgICAgICAgIGlmIChjb29raWUuZ2V0 VmVyc2lvbigpIDwgMCkgCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBNYWxmb3Jt ZWRDb29raWVFeGNlcHRpb24oICJJbGxlZ2FsIHZlcnNpb24gbnVtYmVyICIgKyBjb29raWUuZ2V0 VmFsdWUoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBzZWN1cml0eSBjaGVjay4uLiB3ZSBt dXNuJ3QgYWxsb3cgdGhlIHNlcnZlciB0byBnaXZlIHVzIGFuCisgICAgICAgIC8vIGludmFsaWQg ZG9tYWluIHNjb3BlCisKKyAgICAgICAgLy8gVmFsaWRhdGUgdGhlIGNvb2tpZXMgZG9tYWluIGF0 dHJpYnV0ZS4gIE5PVEU6ICBEb21haW5zIHdpdGhvdXQgYW55IGRvdHMgYXJlCisgICAgICAgIC8v IGFsbG93ZWQgdG8gc3VwcG9ydCBob3N0cyBvbiBwcml2YXRlIExBTnMgdGhhdCBkb24ndCBoYXZl IEROUyBuYW1lcy4gIFNpbmNlCisgICAgICAgIC8vIHRoZXkgaGF2ZSBubyBkb3RzLCB0byBkb21h aW4tbWF0Y2ggdGhlIHJlcXVlc3QtaG9zdCBhbmQgZG9tYWluIG11c3QgYmUgaWRlbnRpY2FsCisg ICAgICAgIC8vIGZvciB0aGUgY29va2llIHRvIHNlbnQgYmFjayB0byB0aGUgb3JpZ2luLXNlcnZl ci4KKyAgICAgICAgaWYgKGhvc3QuaW5kZXhPZigiLiIpID49IDApCisgICAgICAgIHsKKyAgICAg ICAgICAgIC8vIE5vdCByZXF1aXJlZCB0byBoYXZlIGF0IGxlYXN0IHR3byBkb3RzLiAgUkZDIDI5 NjUuCisgICAgICAgICAgICAvLyBBIFNldC1Db29raWUyIHdpdGggRG9tYWluPWFqYXguY29tIHdp bGwgYmUgYWNjZXB0ZWQuCisKKyAgICAgICAgICAgIC8vIGRvbWFpbiBtdXN0IG1hdGNoIGhvc3QK KyAgICAgICAgICAgIGlmICghaG9zdC5lbmRzV2l0aChjb29raWUuZ2V0RG9tYWluKCkpKQorICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBNYWxmb3JtZWRDb29raWVFeGNl cHRpb24oCisgICAgICAgICAgICAgICAgICAgICJJbGxlZ2FsIGRvbWFpbiBhdHRyaWJ1dGUgXCIi ICsgY29va2llLmdldERvbWFpbigpICsgIlwiLiBEb21haW4gb2Ygb3JpZ2luOiBcIiIgKyBob3N0 ICsgIlwiIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBhbm90aGVy IHNlY3VyaXR5IGNoZWNrLi4uIHdlIG11c24ndCBhbGxvdyB0aGUgc2VydmVyIHRvIGdpdmUgdXMg YQorICAgICAgICAvLyBjb29raWUgdGhhdCBkb2Vzbid0IG1hdGNoIHRoaXMgcGF0aAorCisgICAg ICAgIGlmKCFwYXRoLnN0YXJ0c1dpdGgoY29va2llLmdldFBhdGgoKSkpCisgICAgICAgIHsKKyAg ICAgICAgICAgIHRocm93IG5ldyBNYWxmb3JtZWRDb29raWVFeGNlcHRpb24oCisgICAgICAgICAg ICAgICAgICAgICJJbGxlZ2FsIHBhdGggYXR0cmlidXRlIFwiIiArIGNvb2tpZS5nZXRQYXRoKCkg KyAiXCIuIFBhdGggb2Ygb3JpZ2luOiBcIiIgKyBwYXRoICsgIlwiIik7CisgICAgICAgIH0KKyAg ICB9CisKKworICAgIHB1YmxpYyBib29sZWFuIG1hdGNoKFN0cmluZyBob3N0LCBpbnQgcG9ydCwg U3RyaW5nIHBhdGgsIGJvb2xlYW4gc2VjdXJlLCBmaW5hbCBDb29raWUgY29va2llKSAKKyAgICB7 CisgICAgICAgIGxvZy50cmFjZSgiZW50ZXIgQ29va2llU3BlY0Jhc2UubWF0Y2goU3RyaW5uZywg aW50LCBTdHJpbmcsIGJvb2xlYW4sIENvb2tpZSIpOworICAgICAgICAvLyBGSVhNRTogUkZDMjEw OSBkb2Vzbid0IGNvbnNpZGVyIHBvcnRzIHdoZW4gZmlsdGVyaW5nL21hdGNoaW5nCisgICAgICAg IC8vICAgICAgICBjb29raWVzLiBRdW90aW5nIGZyb20gU2VjdGlvbiAyIC0gVGVybWlub2xvZ3k6 CisgICAgICAgIC8vICAgICAgICAgIFRoZSB0ZXJtcyByZXF1ZXN0LWhvc3QgYW5kIHJlcXVlc3Qt VVJJIHJlZmVyIHRvCisgICAgICAgIC8vICAgICAgICAgIHRoZSB2YWx1ZXMgdGhlIGNsaWVudCB3 b3VsZCBzZW5kIHRvIHRoZSBzZXJ2ZXIKKyAgICAgICAgLy8gICAgICAgICAgYXMsIHJlc3BlY3Rp dmVseSwgdGhlIGhvc3QgKGJ1dCBub3QgcG9ydCkgYW5kCisgICAgICAgIC8vICAgICAgICAgIGFi c19wYXRoIHBvcnRpb25zIG9mIHRoZSBhYnNvbHV0ZVVSSSAoaHR0cF9VUkwpCisgICAgICAgIC8v ICAgICAgICAgIG9mIHRoZSBIVFRQIHJlcXVlc3QgbGluZS4KKyAgICAgICAgLy8KKyAgICAgICAg Ly8gICAgICAgIFJGQzI5NjUgaW5jbHVkZXMgcG9ydHMgaW4gY29va2llLXNlbmRpbmcKKyAgICAg ICAgLy8gICAgICAgIGRldGVybWluYXRpb24sIGJ1dCBvbmx5IHdoZW4gdGhlIGNvb2tpZSBpcyBy ZWNlaXZlZAorICAgICAgICAvLyAgICAgICAgdmlhIGEgJ1NldC1Db29raWUyJyBoZWFkZXIuCisg ICAgICAgIC8vCisgICAgICAgIC8vICAgICAgICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBk b2Vzbid0IHN1cHBvcnQgUkZDMjk2NSwKKyAgICAgICAgLy8gICAgICAgIGFuZCBpZ25vcmVzIHBv cnRzIHdoZW4gbWF0Y2hpbmcgY29va2llcy4KKyAgICAgICAgaWYoaG9zdCA9PSBudWxsKQorICAg ICAgICB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJI b3N0IG9mIG9yaWdpbiBtYXkgbm90IGJlIG51bGwiKTsKKyAgICAgICAgfQorICAgICAgICBpZiho b3N0LnRyaW0oKS5lcXVhbHMoIiIpKQorICAgICAgICB7CisgICAgICAgICAgICB0aHJvdyBuZXcg SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJIb3N0IG9mIG9yaWdpbiBtYXkgbm90IGJlIGJsYW5r Iik7CisgICAgICAgIH0KKyAgICAgICAgaWYocG9ydCA8IDApCisgICAgICAgIHsKKyAgICAgICAg ICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgcG9ydDogIiAr IHBvcnQpOworICAgICAgICB9CisgICAgICAgIGlmKHBhdGggPT0gbnVsbCkKKyAgICAgICAgewor ICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiUGF0aCBvZiBv cmlnaW4gbWF5IG5vdCBiZSBudWxsLiIpOworICAgICAgICB9CisgICAgICAgIGlmKGNvb2tpZSA9 PSBudWxsKQorICAgICAgICB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50 RXhjZXB0aW9uKCJDb29raWUgbWF5IG5vdCBiZSBudWxsIik7CisgICAgICAgIH0KKyAgICAgICAg aWYgKHBhdGgudHJpbSgpLmVxdWFscygiIikpIHsKKyAgICAgICAgICAgIHBhdGggPSBQQVRIX0RF TElNOworICAgICAgICB9CisgICAgICAgIGhvc3QgPSBob3N0LnRvTG93ZXJDYXNlKCk7CisgICAg ICAgIGlmIChjb29raWUuZ2V0RG9tYWluKCkgPT0gbnVsbCkgeworICAgICAgICAgICAgbG9nLndh cm4oIkludmFsaWQgY29va2llIHN0YXRlOiBkb21haW4gbm90IHNwZWNpZmllZCIpOworICAgICAg ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChjb29raWUuZ2V0UGF0 aCgpID09IG51bGwpIHsKKyAgICAgICAgICAgIGxvZy53YXJuKCJJbnZhbGlkIGNvb2tpZSBzdGF0 ZTogcGF0aCBub3Qgc3BlY2lmaWVkIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg ICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiAoCisgICAgICAgICAgICAgICAgKGNvb2tp ZS5nZXRFeHBpcnlEYXRlKCkgPT0gbnVsbCB8fCAKKyAgICAgICAgICAgICAgICAgY29va2llLmdl dEV4cGlyeURhdGUoKS5hZnRlcihuZXcgRGF0ZSgpKSkgJiYgLy8gb25seSBhZGQgdGhlIGNvb2tp ZSBpZiBpdCBoYXNuJ3QgeWV0IGV4cGlyZWQKKyAgICAgICAgICAgICAgICAoZG9tYWluTWF0Y2go aG9zdCwgY29va2llLmdldERvbWFpbigpKSkgJiYgICAgLy8gYW5kIHRoZSBkb21haW4gcGF0dGVy biBtYXRjaGVzCisgICAgICAgICAgICAgICAgKHBhdGhNYXRjaChwYXRoLCBjb29raWUuZ2V0UGF0 aCgpKSkgJiYgICAgICAgIC8vIGFuZCB0aGUgcGF0aCBpcyBudWxsIG9yIG1hdGNoaW5nCisgICAg ICAgICAgICAgICAgKGNvb2tpZS5nZXRTZWN1cmUoKSA/IHNlY3VyZSA6IHRydWUpICAgICAgICAg IC8vIGFuZCBpZiB0aGUgc2VjdXJlIGZsYWcgaXMgc2V0LCBvbmx5IGlmIHRoZSByZXF1ZXN0IGlz IGFjdHVhbGx5IHNlY3VyZQorICAgICAgICAgICAgICAgKTsKKyAgICB9CisKKyAgICAvKioKKyAg ICAgKiBQZXJmb3JtcyBhIGRvbWFpbi1tYXRjaCBhcyBkZXNjcmliZWQgaW4gUkZDMjEwOS4KKyAg ICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGRvbWFpbk1hdGNoKFN0cmluZyBob3N0 LCBTdHJpbmcgZG9tYWluKQorICAgIHsKKyAgICAgICAgYm9vbGVhbiBtYXRjaCA9IGhvc3QuZXF1 YWxzKGRvbWFpbikgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIChkb21haW4uc3RhcnRzV2l0 aCgiLiIpICYmIGhvc3QuZW5kc1dpdGgoZG9tYWluKSk7CisKKyAgICAgICAgcmV0dXJuIG1hdGNo OworICAgIH0KKworICAgIC8qKgorICAgICAqIFBlcmZvcm1zIGEgcGF0aC1tYXRjaCBzbGlnaHRs eSBzbWFydGVyIHRoYW4gYSBzdHJhaWdodC1mb3J3YXJkIHN0YXJ0c1dpdGggY2hlY2suCisgICAg ICovCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBwYXRoTWF0Y2goZmluYWwgU3RyaW5nIHBh dGgsIGZpbmFsIFN0cmluZyB0b3Btb3N0UGF0aCkKKyAgICB7CisgICAgICAgIGJvb2xlYW4gbWF0 Y2ggPSBwYXRoLnN0YXJ0c1dpdGgoIHRvcG1vc3RQYXRoICk7CisgICAgICAgIGlmIChtYXRjaCkg eworICAgICAgICAgICAgaWYgKCF0b3Btb3N0UGF0aC5lbmRzV2l0aChQQVRIX0RFTElNKSkgewor ICAgICAgICAgICAgICAgIG1hdGNoID0gKHBhdGguY2hhckF0KHRvcG1vc3RQYXRoLmxlbmd0aCgp KSA9PSBQQVRIX0RFTElNX0NIQVIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg IHJldHVybiBtYXRjaDsKKyAgICB9CisKKworICAgIHB1YmxpYyBTdHJpbmcgdG9FeHRlcm5hbEZv cm0oQ29va2llIGNvb2tpZSkKKyAgICB7CisgICAgICAgIGlmKGNvb2tpZSA9PSBudWxsKQorICAg ICAgICB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJD b29raWUgbWF5IG5vdCBiZSBudWxsIik7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nQnVmZmVy IGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgYnVmLmFwcGVuZChjb29raWUuZ2V0 TmFtZSgpKS5hcHBlbmQoIj0iKS5hcHBlbmQoY29va2llLmdldFZhbHVlKCkpOworICAgICAgICBp ZiAoY29va2llLmdldERvbWFpbigpICE9IG51bGwgJiYgY29va2llLmlzRG9tYWluQXR0cmlidXRl U3BlY2lmaWVkKCkpIHsKKyAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIjsgJERvbWFpbj0iKTsKKyAg ICAgICAgICAgIGJ1Zi5hcHBlbmQoY29va2llLmdldERvbWFpbigpKTsKKyAgICAgICAgfQorICAg ICAgICBpZiAoY29va2llLmdldFBhdGgoKSAhPSBudWxsICYmIGNvb2tpZS5pc1BhdGhBdHRyaWJ1 dGVTcGVjaWZpZWQoKSkgeworICAgICAgICAgICAgYnVmLmFwcGVuZCgiOyAkUGF0aD0iKTsKKyAg ICAgICAgICAgIGJ1Zi5hcHBlbmQoY29va2llLmdldFBhdGgoKSk7CisgICAgICAgIH0KKyAgICAg ICAgcmV0dXJuIGJ1Zi50b1N0cmluZygpOworICAgIH0KKworCisgICAgcHVibGljIEhlYWRlciBm b3JtYXQoU3RyaW5nIGhvc3QsIGludCBwb3J0LCBTdHJpbmcgcGF0aCwgYm9vbGVhbiBzZWN1cmUs IENvb2tpZVtdIGNvb2tpZXMpCisgICAgICB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9u CisgICAgeworICAgICAgICBsb2cudHJhY2UoImVudGVyIENvb2tpZVNwY2VCYXNlLmZvcm1hdChT dHJpbmcsIGludCwgU3RyaW5nLCBib29sZWFuLCBDb29raWVbXSkiKTsKKworICAgICAgICBpZiho b3N0ID09IG51bGwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJn dW1lbnRFeGNlcHRpb24oIkhvc3Qgb2Ygb3JpZ2luIG1heSBub3QgYmUgbnVsbCIpOworICAgICAg ICB9CisgICAgICAgIGlmKGhvc3QudHJpbSgpLmVxdWFscygiIikpCisgICAgICAgIHsKKyAgICAg ICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkhvc3Qgb2Ygb3JpZ2lu IG1heSBub3QgYmUgYmxhbmsiKTsKKyAgICAgICAgfQorICAgICAgICBpZihwb3J0IDwgMCkKKyAg ICAgICAgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigi SW52YWxpZCBwb3J0OiAiICsgcG9ydCk7CisgICAgICAgIH0KKyAgICAgICAgaWYocGF0aCA9PSBu dWxsKQorICAgICAgICB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhj ZXB0aW9uKCJQYXRoIG9mIG9yaWdpbiBtYXkgbm90IGJlIG51bGwuIik7CisgICAgICAgIH0KKyAg ICAgICAgaWYoY29va2llcyA9PSBudWxsKQorICAgICAgICB7CisgICAgICAgICAgICB0aHJvdyBu ZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDb29raWUgYXJyYXkgbWF5IG5vdCBiZSBudWxs Iik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBhdGgudHJpbSgpLmVxdWFscygiIikpIHsKKyAg ICAgICAgICAgIHBhdGggPSBQQVRIX0RFTElNOworICAgICAgICB9CisgICAgICAgIGhvc3QgPSBo b3N0LnRvTG93ZXJDYXNlKCk7CisKKyAgICAgICAgYm9vbGVhbiBhZGRlZCA9IGZhbHNlOworICAg ICAgICBTdHJpbmdCdWZmZXIgdmFsdWUgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisKKyAgICAgICAg aWYgKGNvb2tpZXMubGVuZ3RoIDw9IDApIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAg ICAgICB9CisgICAgICAgIExpc3QgYWRkZWRDb29raWVzID0gbmV3IExpbmtlZExpc3QoKTsKKyAg ICAgICAgZm9yKGludCBpPTA7aTxjb29raWVzLmxlbmd0aDtpKyspCisgICAgICAgIHsKKyAgICAg ICAgICAgIGlmKGNvb2tpZXNbaV0ubWF0Y2hlcyhob3N0LCBwb3J0LCBwYXRoLCBzZWN1cmUpKQor ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFkZEluUGF0aE9yZGVyKGFkZGVkQ29va2ll cywgY29va2llc1tpXSk7CisgICAgICAgICAgICAgICAgYWRkZWQgPSB0cnVlOworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChhZGRlZCkKKyAgICAgICAgeworICAgICAgICAg ICAgLyogRklYTUUuICBXZSBhc3N1bWUgaGVyZSB0aGF0IGFsbCB0aGUgY29va2llcyB3ZSdyZSBz ZW5kaW5nIGJhY2sKKyAgICAgICAgICAgICAqIGFyZSB0aGUgc2FtZSB2ZXJzaW9uLiAgQSBiZXR0 ZXIgc29sdXRpb24gbWlnaHQgYmUgdG8gc2VwYXJhdGUKKyAgICAgICAgICAgICAqIGNvb2tpZXMg b2YgZGlmZmVyZW50IHZlcnNpb25zIGFuZCBzZW5kIHRoZW0gb24gc2VwYXJhdGUgY29va2llCisg ICAgICAgICAgICAgKiBoZWFkZXJzLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICB2YWx1 ZS5hcHBlbmQoIiRWZXJzaW9uPSIpOworICAgICAgICAgICAgdmFsdWUuYXBwZW5kKCgoQ29va2ll KWFkZGVkQ29va2llcy5nZXQoMCkpLmdldFZlcnNpb24oKSk7CisgICAgICAgICAgICBmb3IgKEl0 ZXJhdG9yIGl0ciA9IGFkZGVkQ29va2llcy5pdGVyYXRvcigpOyBpdHIuaGFzTmV4dCgpOyApCisg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29va2llIGNvb2tpZSA9IChDb29raWUpaXRy Lm5leHQoKTsKKyAgICAgICAgICAgICAgICB2YWx1ZS5hcHBlbmQoIjsgIik7CisgICAgICAgICAg ICAgICAgdmFsdWUuYXBwZW5kKHRvRXh0ZXJuYWxGb3JtKGNvb2tpZSkpOworICAgICAgICAgICAg fQorCisgICAgICAgICAgICByZXR1cm4gbmV3IEhlYWRlcigiQ29va2llIiwgdmFsdWUudG9TdHJp bmcoKSk7CisgICAgICAgIH0gCisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAg cmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBZGRzIHRo ZSBnaXZlbiBjb29raWUgaW50byB0aGUgZ2l2ZW4gbGlzdCBpbiBkZXNjZW5kaW5nIHBhdGggb3Jk ZXIuICBUaGF0IGlzLCAKKyAgICAgKiBtb3JlIHNwZWNpZmljIHBhdGggdG8gbGVhc3Qgc3BlY2lm aWMgcGF0aHMuICBUaGlzIG1heSBub3QgYmUgdGhlIGZhc3Rlc3QKKyAgICAgKiBhbGdvcnl0aG0s IGJ1dCBpdCdsbCB3b3JrIE9LIGZvciB0aGUgc21hbGwgbnVtYmVyIG9mIGNvb2tpZXMgd2UncmUg CisgICAgICogZ2VuZXJhbGx5IGRlYWxpbmcgd2l0aC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBs aXN0IC0gdGhlIGxpc3QgdG8gYWRkIHRoZSBjb29raWUgdG8KKyAgICAgKiBAcGFyYW0gYWRkQ29v a2llIC0gdGhlIENvb2tpZSB0byBhZGQgdG8gbGlzdAorICAgICAqLworICAgIHByaXZhdGUgc3Rh dGljIHZvaWQgYWRkSW5QYXRoT3JkZXIoTGlzdCBsaXN0LCBDb29raWUgYWRkQ29va2llKQorICAg IHsKKyAgICAgICAgaW50IGkgPSAwOworCisgICAgICAgIGZvcihpPTA7aTxsaXN0LnNpemUoKTtp KyspeworICAgICAgICAgICAgQ29va2llIGMgPSAoQ29va2llKWxpc3QuZ2V0KGkpOworICAgICAg ICAgICAgaWYoYWRkQ29va2llLmNvbXBhcmUoYWRkQ29va2llLCBjKSA+IDApeworICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGxpc3QuYWRk KGksIGFkZENvb2tpZSk7CisgICAgfQorCisKK30KSW5kZXg6IHNyYy9qYXZhL29yZy9hcGFjaGUv Y29tbW9ucy9odHRwY2xpZW50L0h0dHBNZXRob2RCYXNlLmphdmEKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls ZTogL2hvbWUvY3ZzcHVibGljL2pha2FydGEtY29tbW9ucy9odHRwY2xpZW50L3NyYy9qYXZhL29y Zy9hcGFjaGUvY29tbW9ucy9odHRwY2xpZW50L0h0dHBNZXRob2RCYXNlLmphdmEsdgpyZXRyaWV2 aW5nIHJldmlzaW9uIDEuODMKZGlmZiAtdSAtcjEuODMgSHR0cE1ldGhvZEJhc2UuamF2YQotLS0g c3JjL2phdmEvb3JnL2FwYWNoZS9jb21tb25zL2h0dHBjbGllbnQvSHR0cE1ldGhvZEJhc2UuamF2 YQkzIERlYyAyMDAyIDE1OjI4OjE4IC0wMDAwCTEuODMKKysrIHNyYy9qYXZhL29yZy9hcGFjaGUv Y29tbW9ucy9odHRwY2xpZW50L0h0dHBNZXRob2RCYXNlLmphdmEJNSBEZWMgMjAwMiAxMjo0ODoy OSAtMDAwMApAQCAtNzYsNiArNzYsOCBAQAogaW1wb3J0IGphdmEudXRpbC5TZXQ7CiBpbXBvcnQg amF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKIAoraW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5o dHRwY2xpZW50LnN0YXRlbWdtdC5Db29raWVQb2xpY3k7CitpbXBvcnQgb3JnLmFwYWNoZS5jb21t b25zLmh0dHBjbGllbnQuc3RhdGVtZ210LkNvb2tpZVNwZWM7CiBpbXBvcnQgb3JnLmFwYWNoZS5j b21tb25zLmh0dHBjbGllbnQudXRpbC5VUklVdGlsOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9u cy5sb2dnaW5nLkxvZzsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2dGYWN0 b3J5OwpAQCAtMTE5MCwxMyArMTE5MiwyNCBAQAogICAgICAgICBsb2cudHJhY2UoImVudGVyIEh0 dHBNZXRob2RCYXNlLmFkZENvb2tpZVJlcXVlc3RIZWFkZXIoSHR0cFN0YXRlLCAiCiAgICAgICAg ICAgICAgICAgICArICJIdHRwQ29ubmVjdGlvbikiKTsKIAotICAgICAgICBIZWFkZXIgY29va2ll SGVhZGVyID0gQ29va2llLmNyZWF0ZUNvb2tpZUhlYWRlcihjb25uLmdldEhvc3QoKSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi5n ZXRQb3J0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGdldFBhdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29ubi5pc1NlY3VyZSgpLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGF0ZSgpLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5n ZXRDb29raWVzKCkpOwotICAgICAgICBpZiAobnVsbCAhPSBjb29raWVIZWFkZXIpIHsKKyAgICAg ICAgQ29va2llU3BlYyBmb3JtYXR0ZXIgPSBudWxsOworICAgICAgICBpZiAodGhpcy5zdHJpY3RN b2RlKQorICAgICAgICB7CisgICAgICAgICAgICBmb3JtYXR0ZXIgPSBDb29raWVQb2xpY3kuZ2V0 RGVmYXVsdFNwZWMoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAg ICAgICAgIGZvcm1hdHRlciA9IENvb2tpZVBvbGljeS5nZXRDb21wYXRpYmlsaXR5U3BlYygpOwor ICAgICAgICB9CisgICAgICAgIEhlYWRlciBjb29raWVIZWFkZXIgPSBmb3JtYXR0ZXIuZm9ybWF0 KAorICAgICAgICAgIGNvbm4uZ2V0SG9zdCgpLAorICAgICAgICAgIGNvbm4uZ2V0UG9ydCgpLAor ICAgICAgICAgIGdldFBhdGgoKSwKKyAgICAgICAgICBjb25uLmlzU2VjdXJlKCksCisgICAgICAg ICAgc3RhdGUuZ2V0Q29va2llcygpKTsKKyAgICAgICAgICAKKyAgICAgICAgaWYgKG51bGwgIT0g Y29va2llSGVhZGVyKQorICAgICAgICB7CiAgICAgICAgICAgICBzZXRSZXF1ZXN0SGVhZGVyKGNv b2tpZUhlYWRlcik7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNDcxLDE2ICsxNDg0LDUxIEBACiAg ICAgICAgICAgICBzZXRDb29raWVIZWFkZXIgPSBnZXRSZXNwb25zZUhlYWRlcigic2V0LWNvb2tp ZSIpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHNldENvb2tpZUhlYWRlciAhPSBudWxsKSB7 Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIENvb2tpZVtdIGNvb2tpZXMgPSBD b29raWUucGFyc2UoY29ubi5nZXRIb3N0KCksIGNvbm4uZ2V0UG9ydCgpLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UGF0aCgpLCBjb25uLmlzU2Vj dXJlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz ZXRDb29raWVIZWFkZXIpOwotICAgICAgICAgICAgICAgIHN0YXRlLmFkZENvb2tpZXMoY29va2ll cyk7Ci0gICAgICAgICAgICB9IGNhdGNoIChIdHRwRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAg ICAgICBpZiAobG9nLmlzV2FybkVuYWJsZWQoKSkgewotICAgICAgICAgICAgICAgICAgICBsb2cu d2FybigiQ29va2llIHJlamVjdGVkOiBcIiIgKyBzZXRDb29raWVIZWFkZXIuZ2V0VmFsdWUoKSAr ICJcIi4gIiArIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgaWYgKHNldENvb2tpZUhlYWRlciA9 PSBudWxsKSByZXR1cm47CisgICAgICAgIHRyeSB7CisKKyAgICAgICAgICAgIENvb2tpZVNwZWMg cGFyc2VyID0gbnVsbDsKKyAgICAgICAgICAgIGlmICh0aGlzLnN0cmljdE1vZGUpCisgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgcGFyc2VyID0gQ29va2llUG9saWN5LmdldERlZmF1bHRT cGVjKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgcGFyc2VyID0gQ29va2llUG9saWN5LmdldENvbXBhdGliaWxpdHlTcGVj KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBDb29raWVbXSBjb29raWVzID0gcGFyc2Vy LnBhcnNlKAorICAgICAgICAgICAgICBjb25uLmdldEhvc3QoKSwgCisgICAgICAgICAgICAgIGNv bm4uZ2V0UG9ydCgpLAorICAgICAgICAgICAgICBnZXRQYXRoKCksIAorICAgICAgICAgICAgICBj b25uLmlzU2VjdXJlKCksCisgICAgICAgICAgICAgIHNldENvb2tpZUhlYWRlcik7CisgICAgICAg ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpKyspCisgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgQ29va2llIGNvb2tpZSA9IGNvb2tpZXNbaV07CisgICAgICAg ICAgICAgICAgQ29va2llU3BlYyB2YWxpZGF0b3IgPSBudWxsOworICAgICAgICAgICAgICAgIGlm ICh0aGlzLnN0cmljdE1vZGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg ICB2YWxpZGF0b3IgPSBDb29raWVQb2xpY3kuZ2V0U3BlY0J5VmVyc2lvbihjb29raWUuZ2V0VmVy c2lvbigpKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yID0gcGFyc2VyOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YWxpZGF0b3IudmFsaWRhdGUoCisgICAg ICAgICAgICAgICAgICBjb25uLmdldEhvc3QoKSwgCisgICAgICAgICAgICAgICAgICBjb25uLmdl dFBvcnQoKSwKKyAgICAgICAgICAgICAgICAgIGdldFBhdGgoKSwgCisgICAgICAgICAgICAgICAg ICBjb25uLmlzU2VjdXJlKCksCisgICAgICAgICAgICAgICAgICBjb29raWUpOworICAgICAgICAg ICAgICAgIGlmIChsb2cuaXNEZWJ1Z0VuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgICAgICBs b2cuZGVidWcoIkNvb2tpZSBhY2NlcHRlZDogXCIiICsgdmFsaWRhdG9yLnRvRXh0ZXJuYWxGb3Jt KGNvb2tpZSkgKyAiXCIiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3Rh dGUuYWRkQ29va2llKGNvb2tpZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgIAorICAg ICAgICB9IGNhdGNoIChIdHRwRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGlmIChsb2cuaXNX YXJuRW5hYmxlZCgpKSB7CisgICAgICAgICAgICAgICAgbG9nLndhcm4oIkNvb2tpZSByZWplY3Rl ZDogXCIiICsgc2V0Q29va2llSGVhZGVyLmdldFZhbHVlKCkgKyAiXCIuICIgKyBlLmdldE1lc3Nh Z2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBzcmMvamF2YS9v cmcvYXBhY2hlL2NvbW1vbnMvaHR0cGNsaWVudC9NYWxmb3JtZWRDb29raWVFeGNlcHRpb24uamF2 YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09ClJDUyBmaWxlOiBzcmMvamF2YS9vcmcvYXBhY2hlL2NvbW1vbnMvaHR0cGNs aWVudC9NYWxmb3JtZWRDb29raWVFeGNlcHRpb24uamF2YQpkaWZmIC1OIHNyYy9qYXZhL29yZy9h cGFjaGUvY29tbW9ucy9odHRwY2xpZW50L01hbGZvcm1lZENvb2tpZUV4Y2VwdGlvbi5qYXZhCi0t LSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgc3JjL2phdmEvb3JnL2Fw YWNoZS9jb21tb25zL2h0dHBjbGllbnQvTWFsZm9ybWVkQ29va2llRXhjZXB0aW9uLmphdmEJNSBE ZWMgMjAwMiAxMjo0ODoyOSAtMDAwMApAQCAtMCwwICsxLDczIEBACisvKgorICogVGhlIEFwYWNo ZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQorICoKKyAqIENvcHlyaWdodCAoYykgMTk5 OS0yMDAyIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKKyAqIHJl c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp bgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIFRoZSBlbmQtdXNlciBk b2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLCBpZgorICogICAg YW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWdlbWVudDoKKyAqICAgICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQorICogICAg ICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4i CisgKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWdlbWVudCBtYXkgYXBwZWFyIGluIHRo ZSBzb2Z0d2FyZSBpdHNlbGYsCisgKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0 eSBhY2tub3dsZWdlbWVudHMgbm9ybWFsbHkgYXBwZWFyLgorICoKKyAqIDQuIFRoZSBuYW1lcyAi VGhlIEpha2FydGEgUHJvamVjdCIsICJIdHRwQ2xpZW50IiwgYW5kICJBcGFjaGUgU29mdHdhcmUK KyAqICAgIEZvdW5kYXRpb24iIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl IHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24sIHBsZWFz ZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUiCisgKiAgICBub3Ig bWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4K KyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBHcm91cC4KKyAqCisgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECisg KiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQg V0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg QVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElB QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7 IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBP RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC SUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGlzIHNv ZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQor ICogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlv bi4gIEZvciBtb3JlCisgKiBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5k YXRpb24sIHBsZWFzZSBzZWUKKyAqIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KKyAqCisgKiBb QWRkaXRpb25hbCBub3RpY2VzLCBpZiByZXF1aXJlZCBieSBwcmlvciBsaWNlbnNpbmcgY29uZGl0 aW9uc10KKyAqCisgKi8KKworcGFja2FnZSBvcmcuYXBhY2hlLmNvbW1vbnMuaHR0cGNsaWVudC5z dGF0ZW1nbXQ7CisKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuaHR0cGNsaWVudC5IdHRwRXhj ZXB0aW9uOworCitwdWJsaWMgY2xhc3MgTWFsZm9ybWVkQ29va2llRXhjZXB0aW9uIGV4dGVuZHMg SHR0cEV4Y2VwdGlvbgoreworICAgIHB1YmxpYyBNYWxmb3JtZWRDb29raWVFeGNlcHRpb24oKQor ICAgIHsKKyAgICAgICAgc3VwZXIoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgTWFsZm9ybWVkQ29v a2llRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgc3VwZXIobWVzc2Fn ZSk7CisgICAgfQorfQpJbmRleDogc3JjL2phdmEvb3JnL2FwYWNoZS9jb21tb25zL2h0dHBjbGll bnQvTmV0c2NhcGVEcmFmdFNwZWMuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBzcmMvamF2YS9v cmcvYXBhY2hlL2NvbW1vbnMvaHR0cGNsaWVudC9OZXRzY2FwZURyYWZ0U3BlYy5qYXZhCmRpZmYg LU4gc3JjL2phdmEvb3JnL2FwYWNoZS9jb21tb25zL2h0dHBjbGllbnQvTmV0c2NhcGVEcmFmdFNw ZWMuamF2YQotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIHNyYy9q YXZhL29yZy9hcGFjaGUvY29tbW9ucy9odHRwY2xpZW50L05ldHNjYXBlRHJhZnRTcGVjLmphdmEJ NSBEZWMgMjAwMiAxMjo0ODoyOSAtMDAwMApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIFRoZSBB cGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKKyAqCisgKiBDb3B5cmlnaHQgKGMp IDE5OTktMjAwMiBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCisg KiByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK KyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv dmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBUaGUgZW5kLXVz ZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwgaWYKKyAq ICAgIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVnZW1lbnQ6CisgKiAg ICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKKyAq ICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3Jn LykuIgorICogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVnZW1lbnQgbWF5IGFwcGVhciBp biB0aGUgc29mdHdhcmUgaXRzZWxmLAorICogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQt cGFydHkgYWNrbm93bGVnZW1lbnRzIG5vcm1hbGx5IGFwcGVhci4KKyAqCisgKiA0LiBUaGUgbmFt ZXMgIlRoZSBKYWthcnRhIFByb2plY3QiLCAiSHR0cENsaWVudCIsIGFuZCAiQXBhY2hlIFNvZnR3 YXJlCisgKiAgICBGb3VuZGF0aW9uIiBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uLCBw bGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIgorICogICAg bm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0 dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgR3JvdXAuCisgKgorICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElF RAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM SUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg VEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJF IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ Q0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAor ICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP U1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogVGhp cyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1h bnkKKyAqIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5k YXRpb24uICBGb3IgbW9yZQorICogaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBwbGVhc2Ugc2VlCisgKiA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCisgKgor ICogW0FkZGl0aW9uYWwgbm90aWNlcywgaWYgcmVxdWlyZWQgYnkgcHJpb3IgbGljZW5zaW5nIGNv bmRpdGlvbnNdCisgKgorICovCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS5jb21tb25zLmh0dHBjbGll bnQuc3RhdGVtZ210OworCitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKK2ltcG9y dCBvcmcuYXBhY2hlLmNvbW1vbnMuaHR0cGNsaWVudC5Db29raWU7CisKK3B1YmxpYyBjbGFzcyBO ZXRzY2FwZURyYWZ0U3BlYyBleHRlbmRzIENvb2tpZVNwZWNCYXNlCit7CisKKyAgICBwdWJsaWMg TmV0c2NhcGVEcmFmdFNwZWMoKQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsKKyAgICB9CisKKwor ICAgIHB1YmxpYyB2b2lkIHZhbGlkYXRlKFN0cmluZyBob3N0LCBpbnQgcG9ydCwgU3RyaW5nIHBh dGgsIGJvb2xlYW4gc2VjdXJlLCBmaW5hbCBDb29raWUgY29va2llKSB0aHJvd3MgTWFsZm9ybWVk Q29va2llRXhjZXB0aW9uCisgICAgeworICAgICAgICBsb2cudHJhY2UoImVudGVyTmV0c2NhcGVE cmFmdENvb2tpZVByb2Nlc3NvciBSQ0YyMTA5Q29va2llUHJvY2Vzc29yLnZhbGlkYXRlKENvb2tp ZSkiKTsKKyAgICAgICAgLy8gUGVyZm9ybSBnZW5lcmljIHZhbGlkYXRpb24KKyAgICAgICAgc3Vw ZXIudmFsaWRhdGUoaG9zdCwgcG9ydCwgcGF0aCwgc2VjdXJlLCBjb29raWUpOworICAgICAgICAv LyBQZXJmb3JtIE5ldHNjYXBlIENvb2tpZSBkcmFmdCBzcGVjaWZpYyB2YWxpZGF0aW9uCisgICAg ICAgIGlmIChob3N0LmluZGV4T2YoIi4iKSA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBp bnQgZG9tYWluUGFydHMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGNvb2tpZS5nZXREb21haW4oKSwg Ii4iKS5jb3VudFRva2VucygpOworCisgICAgICAgICAgICBpZiAoaXNTcGVjaWFsRG9tYWluKGNv b2tpZS5nZXREb21haW4oKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoZG9t YWluUGFydHMgPCAyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGhy b3cgbmV3IE1hbGZvcm1lZENvb2tpZUV4Y2VwdGlvbigiRG9tYWluIGF0dHJpYnV0ZSBcIiIrIGNv b2tpZS5nZXREb21haW4oKSArICJcIiB2aW9sYXRlcyB0aGUgTmV0c2NhcGUgY29va2llIHNwZWNp ZmljYXRpb24gZm9yIHNwZWNpYWwgZG9tYWlucyIpOworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGlm KGRvbWFpblBhcnRzIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBu ZXcgTWFsZm9ybWVkQ29va2llRXhjZXB0aW9uKCJEb21haW4gYXR0cmlidXRlIFwiIisgY29va2ll LmdldERvbWFpbigpICsgIlwiIHZpb2xhdGVzIHRoZSBOZXRzY2FwZSBjb29raWUgc3BlY2lmaWNh dGlvbiIpOworICAgICAgICAgICAgfSAgICAgICAgICAgIAorICAgICAgICB9CisgICAgICAgIH0K KyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBkb21haW4g aXMgaW4gb25lIG9mIHRoZSBzZXZlbiBzcGVjaWFsCisgICAgICogdG9wIGxldmVsIGRvbWFpbnMg ZGVmaW5lZCBieSB0aGUgTmV0c2NhcGUgY29va2llIHNwZWNpZmljYXRpb24uCisgICAgICovCisg ICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1NwZWNpYWxEb21haW4oU3RyaW5nIGRvbWFpbikK KyAgICB7CisgICAgICAgIFN0cmluZyB1Y0RvbWFpbiA9IGRvbWFpbi50b1VwcGVyQ2FzZSgpOwor ICAgICAgICBpZih1Y0RvbWFpbi5lbmRzV2l0aCgiLkNPTSIpIHx8CisgICAgICAgICAgIHVjRG9t YWluLmVuZHNXaXRoKCIuRURVIikgfHwKKyAgICAgICAgICAgdWNEb21haW4uZW5kc1dpdGgoIi5O RVQiKSB8fAorICAgICAgICAgICB1Y0RvbWFpbi5lbmRzV2l0aCgiLkdPViIpIHx8CisgICAgICAg ICAgIHVjRG9tYWluLmVuZHNXaXRoKCIuTUlMIikgfHwKKyAgICAgICAgICAgdWNEb21haW4uZW5k c1dpdGgoIi5PUkciKSB8fAorICAgICAgICAgICB1Y0RvbWFpbi5lbmRzV2l0aCgiLklOVCIpKXsK KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxz ZTsKKyAgICB9CisgICAgCit9CkluZGV4OiBzcmMvamF2YS9vcmcvYXBhY2hlL2NvbW1vbnMvaHR0 cGNsaWVudC9SQ0YyMTA5U3BlYy5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IHNyYy9qYXZhL29y Zy9hcGFjaGUvY29tbW9ucy9odHRwY2xpZW50L1JDRjIxMDlTcGVjLmphdmEKZGlmZiAtTiBzcmMv amF2YS9vcmcvYXBhY2hlL2NvbW1vbnMvaHR0cGNsaWVudC9SQ0YyMTA5U3BlYy5qYXZhCi0tLSAv ZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgc3JjL2phdmEvb3JnL2FwYWNo ZS9jb21tb25zL2h0dHBjbGllbnQvUkNGMjEwOVNwZWMuamF2YQk1IERlYyAyMDAyIDEyOjQ4OjI5 IC0wMDAwCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vu c2UsIFZlcnNpb24gMS4xCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDIgVGhlIEFwYWNo ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cworICogcmVzZXJ2ZWQuCisgKgorICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4KKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9j dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAg ICBkaXN0cmlidXRpb24uCisgKgorICogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5j bHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sIGlmCisgKiAgICBhbnksIG11c3QgaW5jbHVk ZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZ2VtZW50OgorICogICAgICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCisgKiAgICAgICAgQXBhY2hlIFNvZnR3 YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKKyAqICAgIEFsdGVybmF0 ZWx5LCB0aGlzIGFja25vd2xlZ2VtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2Vs ZiwKKyAqICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZ2VtZW50 cyBub3JtYWxseSBhcHBlYXIuCisgKgorICogNC4gVGhlIG5hbWVzICJUaGUgSmFrYXJ0YSBQcm9q ZWN0IiwgIkh0dHBDbGllbnQiLCBhbmQgIkFwYWNoZSBTb2Z0d2FyZQorICogICAgRm91bmRhdGlv biIgbXVzdCBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl ZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLiBGb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hl QGFwYWNoZS5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSIKKyAqICAgIG5vciBtYXkgIkFwYWNoZSIgYXBw ZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lv biBvZiB0aGUgQXBhY2hlIEdyb3VwLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg YGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS RQorICogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUg Rk9VTkRBVElPTiBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB Q1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJ UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VD SCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIFRoaXMgc29mdHdhcmUgY29uc2lzdHMg b2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55CisgKiBpbmRpdmlkdWFscyBv biBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgRm9yIG1vcmUKKyAq IGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiwgcGxlYXNlIHNl ZQorICogPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgorICoKKyAqIFtBZGRpdGlvbmFsIG5vdGlj ZXMsIGlmIHJlcXVpcmVkIGJ5IHByaW9yIGxpY2Vuc2luZyBjb25kaXRpb25zXQorICoKKyAqLwor CitwYWNrYWdlIG9yZy5hcGFjaGUuY29tbW9ucy5odHRwY2xpZW50LnN0YXRlbWdtdDsKKworaW1w b3J0IG9yZy5hcGFjaGUuY29tbW9ucy5odHRwY2xpZW50LkNvb2tpZTsKKworcHVibGljIGNsYXNz IFJDRjIxMDlTcGVjIGV4dGVuZHMgQ29va2llU3BlY0Jhc2UKK3sKKworICAgIHB1YmxpYyBSQ0Yy MTA5U3BlYygpCisgICAgeworICAgICAgICBzdXBlcigpOworICAgIH0KKworCisgICAgcHVibGlj IHZvaWQgdmFsaWRhdGUoU3RyaW5nIGhvc3QsIGludCBwb3J0LCBTdHJpbmcgcGF0aCwgYm9vbGVh biBzZWN1cmUsIGZpbmFsIENvb2tpZSBjb29raWUpIHRocm93cyBNYWxmb3JtZWRDb29raWVFeGNl cHRpb24KKyAgICB7CisgICAgICAgIGxvZy50cmFjZSgiZW50ZXIgUkNGMjEwOUNvb2tpZVByb2Nl c3Nvci52YWxpZGF0ZShDb29raWUpIik7CisgICAgICAgIC8vIFBlcmZvcm0gZ2VuZXJpYyB2YWxp ZGF0aW9uCisgICAgICAgIHN1cGVyLnZhbGlkYXRlKGhvc3QsIHBvcnQsIHBhdGgsIHNlY3VyZSwg Y29va2llKTsKKyAgICAgICAgLy8gUGVyZm9ybSBSRkMgMjEwOSBzcGVjaWZpYyB2YWxpZGF0aW9u CisgICAgICAgIGlmIChob3N0LmluZGV4T2YoIi4iKSA+PSAwKQorICAgICAgICB7CisgICAgICAg ICAgICAvLyBkb21haW4gbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBlbWJlZGRlZCBkb3QKKyAgICAg ICAgICAgIGludCBkb3RJbmRleCA9IGNvb2tpZS5nZXREb21haW4oKS5pbmRleE9mKCcuJywgMSk7 CisgICAgICAgICAgICBpZihkb3RJbmRleCA8IDAgfHwgZG90SW5kZXggPT0gY29va2llLmdldERv bWFpbigpLmxlbmd0aCgpLTEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGhyb3cg bmV3IE1hbGZvcm1lZENvb2tpZUV4Y2VwdGlvbigiSWxsZWdhbCBkb21haW4gYXR0cmlidXRlIFwi IiArIGNvb2tpZS5nZXREb21haW4oKSArICJcIiIpOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgLy8gaG9zdCBtaW51cyBkb21haW4gbWF5IG5vdCBjb250YWluIGFueSBkb3RzCisgICAgICAg ICAgICBpZiAoaG9zdC5zdWJzdHJpbmcoMCwKKyAgICAgICAgICAgICAgICAgICAgaG9zdC5sZW5n dGgoKSAtCisgICAgICAgICAgICAgICAgICAgIGNvb2tpZS5nZXREb21haW4oKS5sZW5ndGgoKSku aW5kZXhPZignLicpICE9IC0xKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRocm93 IG5ldyBNYWxmb3JtZWRDb29raWVFeGNlcHRpb24oIklsbGVnYWwgZG9tYWluIGF0dHJpYnV0ZSBc IiIgKyBjb29raWUuZ2V0RG9tYWluKCkgKyAiXCIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgIH0KK30K ------_=_NextPart_001_01C29C5F.985E4E29--