Return-Path: Delivered-To: apmail-xml-cocoon-dev-archive@xml.apache.org Received: (qmail 67512 invoked by uid 500); 14 Mar 2002 18:00:17 -0000 Mailing-List: contact cocoon-dev-help@xml.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: list-post: Reply-To: cocoon-dev@xml.apache.org Delivered-To: mailing list cocoon-dev@xml.apache.org Delivered-To: moderator for cocoon-dev@xml.apache.org Received: (qmail 37764 invoked from network); 14 Mar 2002 17:30:20 -0000 Subject: patch for EQSL - clob support in esql:get-xml To: cocoon-dev@xml.apache.org X-Mailer: Lotus Notes Release 5.0.8 June 18, 2001 Message-ID: From: Tomasz.Bech@bull.net Date: Thu, 14 Mar 2002 18:25:36 +0100 X-MIMETrack: Serialize by Router on PLN-001/PL/EUR/BULL(Release 5.0.8 |June 18, 2001) at 03/14/2002 06:25:38 PM MIME-Version: 1.0 Content-type: multipart/mixed; Boundary="0__=41256B7C005D6A868f9e8a93df938690918c41256B7C005D6A86" Content-Disposition: inline X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N --0__=41256B7C005D6A868f9e8a93df938690918c41256B7C005D6A86 Content-type: text/plain; charset=us-ascii Hello, I've found that version still doesn't contain clob functionality in get-xml. I would like to propose changes into esql.xsl which enables clob in get-xml. Priority: high (it was the first thing which I had to implement for Cocoon, without it whole wonderful xsp is useless for us) All changed lines or added are clearly marked with comment 'TB'. The main change is to instead of calling directy the ResultSet.getString, put a wrapper which reads clob as string (if column is clob type) or in ohter case standard getString (look at getStringOrClob function). The implementation is in xsl but it would be better to move it to EsqlHelper class (your decision). Remark: I implemented own reading of clob because getAscii was somehow producing converted/strange string. It works only when encoding for get-xml is not specified!!! I'm not sure how to implement it in other case. Test: code deeply tested and used more that 2 months. But tested only on Oracle jdbc (shoudn't be worse for other driver). Sorry for missing 'diff -u of CVS' but I'm not familiar with CVS. Instead code is additionaly commented. Please send me your opinion and state of the patch, Tomasz (See attached file: esql.xsl) --0__=41256B7C005D6A868f9e8a93df938690918c41256B7C005D6A86 Content-type: application/octet-stream; name="esql.xsl" Content-Disposition: attachment; filename="esql.xsl" Content-transfer-encoding: base64 PD94bWwgdmVyc2lvbj0iMS4wIj8+CjwhLS0gJElkOiBlc3FsLnhzbCx2IDEuNCAyMDAyLzAxLzI4 IDA5OjM3OjE2IHRjdXJkdCBFeHAgJC0tPgo8IS0tCgogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAg ICAgICAgICAgICAgICAgVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMgog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQoKIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIFRoZSBBcGFjaGUg U29mdHdhcmUgRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KCiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9k aWZpY2EtCiB0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zIGFyZSBtZXQ6CgogMS4gUmVkaXN0cmlidXRpb25zIG9mICBzb3VyY2UgY29kZSBt dXN0ICByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCAgbm90aWNlLAogICAgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KCiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UsCiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KCiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRh dGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwgaWYgYW55LCBtdXN0CiAgICBp bmNsdWRlICB0aGUgZm9sbG93aW5nICBhY2tub3dsZWRnbWVudDogICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgIHNvZnR3YXJlCiAgICBkZXZlbG9wZWQgIGJ5IHRoZSAgQXBhY2hlIFNvZnR3YXJlIEZv dW5kYXRpb24gIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCiAgICBBbHRlcm5hdGVseSwgdGhp cyAgYWNrbm93bGVkZ21lbnQgbWF5ICBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwgIGlm CiAgICBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFs bHkgYXBwZWFyLgoKIDQuIFRoZSBuYW1lcyAiQ29jb29uIiBhbmQgICJBcGFjaGUgU29mdHdhcmUg Rm91bmRhdGlvbiIgIG11c3Qgbm90IGJlIHVzZWQgdG8KICAgIGVuZG9yc2UgIG9yIHByb21vdGUg IHByb2R1Y3RzIGRlcml2ZWQgIGZyb20gdGhpcyAgc29mdHdhcmUgd2l0aG91dCAgcHJpb3IKICAg IHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRh Y3QKICAgIGFwYWNoZUBhcGFjaGUub3JnLgoKIDUuIFByb2R1Y3RzICBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSBtYXkgbm90ICBiZSBjYWxsZWQgIkFwYWNoZSIsIG5vciBtYXkKICAgICJBcGFj aGUiIGFwcGVhciAgaW4gdGhlaXIgbmFtZSwgIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uICBvZiB0aGUKICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgoKIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FS UkFOVElFUywKIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKIEZJVE5FU1MgIEZPUiBBIFBBUlRJQ1VMQVIg IFBVUlBPU0UgQVJFICBESVNDTEFJTUVELiAgSU4gTk8gIEVWRU5UIFNIQUxMICBUSEUKIEFQQUNI RSBTT0ZUV0FSRSAgRk9VTkRBVElPTiAgT1IgSVRTIENPTlRSSUJVVE9SUyAgQkUgTElBQkxFIEZP UiAgQU5ZIERJUkVDVCwKIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCAgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMICBEQU1BR0VTIChJTkNMVS0KIERJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MK IE9GIFVTRSwgREFUQSwgT1IgIFBST0ZJVFM7IE9SIEJVU0lORVNTICBJTlRFUlJVUFRJT04pICBI T1dFVkVSIENBVVNFRCBBTkQgT04KIEFOWSAgVEhFT1JZIE9GIExJQUJJTElUWSwgIFdIRVRIRVIg IElOIENPTlRSQUNULCAgU1RSSUNUIExJQUJJTElUWSwgIE9SIFRPUlQKIChJTkNMVURJTkcgIE5F R0xJR0VOQ0UgT1IgIE9USEVSV0lTRSkgQVJJU0lORyBJTiAgQU5ZIFdBWSBPVVQgT0YgVEhFICBV U0UgT0YKIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg T0YgU1VDSCBEQU1BR0UuCgogVGhpcyBzb2Z0d2FyZSAgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNv bnRyaWJ1dGlvbnMgbWFkZSAgYnkgbWFueSBpbmRpdmlkdWFscwogb24gIGJlaGFsZiBvZiB0aGUg QXBhY2hlIFNvZnR3YXJlICBGb3VuZGF0aW9uIGFuZCB3YXMgIG9yaWdpbmFsbHkgY3JlYXRlZCBi eQogU3RlZmFubyBNYXp6b2NjaGkgIDxzdGVmYW5vQGFwYWNoZS5vcmc+LiBGb3IgbW9yZSAgaW5m b3JtYXRpb24gb24gdGhlIEFwYWNoZQogU29mdHdhcmUgRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8 aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCgotLT4KCjx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIx LjAiCiAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCiAg eG1sbnM6eHNwPSJodHRwOi8vYXBhY2hlLm9yZy94c3AiCiAgeG1sbnM6ZXNxbD0iaHR0cDovL2Fw YWNoZS5vcmcvY29jb29uL1NRTC92MiIKICB4bWxuczp4c3Bkb2M9Imh0dHA6Ly9hcGFjaGUub3Jn L2NvY29vbi9YU1BEb2MvdjEiCj4KCjx4c2w6cGFyYW0gbmFtZT0iWFNQLUVOVklST05NRU5UIi8+ Cjx4c2w6cGFyYW0gbmFtZT0iWFNQLVZFUlNJT04iLz4KPHhzbDpwYXJhbSBuYW1lPSJmaWxlbmFt ZSIvPgo8eHNsOnBhcmFtIG5hbWU9Imxhbmd1YWdlIi8+Cgo8eHNsOnZhcmlhYmxlIG5hbWU9ImNv Y29vbjEtZW52aXJvbm1lbnQiPkNvY29vbiAxPC94c2w6dmFyaWFibGU+Cjx4c2w6dmFyaWFibGUg bmFtZT0iY29jb29uMi1lbnZpcm9ubWVudCI+Q29jb29uIDI8L3hzbDp2YXJpYWJsZT4KCjx4c2w6 dmFyaWFibGUgbmFtZT0iY29jb29uMS14c3AtbmFtZXNwYWNlLXVyaSI+aHR0cDovL3d3dy5hcGFj aGUub3JnLzE5OTkvWFNQL0NvcmU8L3hzbDp2YXJpYWJsZT4KPHhzbDp2YXJpYWJsZSBuYW1lPSJj b2Nvb24yLXhzcC1uYW1lc3BhY2UtdXJpIj5odHRwOi8vYXBhY2hlLm9yZy94c3A8L3hzbDp2YXJp YWJsZT4KCjx4c2w6dmFyaWFibGUgbmFtZT0icHJlZml4Ij5lc3FsPC94c2w6dmFyaWFibGU+Cgo8 eHNsOnZhcmlhYmxlIG5hbWU9ImVudmlyb25tZW50Ij4KICA8eHNsOmNob29zZT4KICAgIDx4c2w6 d2hlbiB0ZXN0PSJzdGFydHMtd2l0aCgkWFNQLUVOVklST05NRU5ULCRjb2Nvb24xLWVudmlyb25t ZW50KSI+CiAgICAgIDx4c2w6dGV4dD5Db2Nvb24xPC94c2w6dGV4dD4KICAgIDwveHNsOndoZW4+ CiAgICA8eHNsOndoZW4gdGVzdD0ic3RhcnRzLXdpdGgoJFhTUC1FTlZJUk9OTUVOVCwkY29jb29u Mi1lbnZpcm9ubWVudCkiPgogICAgICA8eHNsOnRleHQ+Q29jb29uMjwveHNsOnRleHQ+CiAgICA8 L3hzbDp3aGVuPgogICAgPHhzbDpvdGhlcndpc2U+CiAgICAgIDx4c2w6dGV4dD5Db2Nvb24yPC94 c2w6dGV4dD4KICAgIDwveHNsOm90aGVyd2lzZT4KICA8L3hzbDpjaG9vc2U+CjwveHNsOnZhcmlh YmxlPgoKPHhzbDp2YXJpYWJsZSBuYW1lPSJ4c3AtbmFtZXNwYWNlLXVyaSI+CiAgPHhzbDpjaG9v c2U+CiAgICA8eHNsOndoZW4gdGVzdD0iJGVudmlyb25tZW50ID0gJ0NvY29vbjEnIj4KICAgICAg PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRjb2Nvb24xLXhzcC1uYW1lc3BhY2UtdXJpIi8+CiAgICA8 L3hzbDp3aGVuPgogICAgPHhzbDp3aGVuIHRlc3Q9IiRlbnZpcm9ubWVudCA9ICdDb2Nvb24yJyI+ CiAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkY29jb29uMi14c3AtbmFtZXNwYWNlLXVyaSIv PgogICAgPC94c2w6d2hlbj4KICA8L3hzbDpjaG9vc2U+CjwveHNsOnZhcmlhYmxlPgoKPHhzbDp0 ZW1wbGF0ZSBuYW1lPSJnZXQtbmVzdGVkLWNvbnRlbnQiPgogIDx4c2w6cGFyYW0gbmFtZT0iY29u dGVudCIvPgogIDx4c2w6Y2hvb3NlPgogICAgPHhzbDp3aGVuIHRlc3Q9IiRjb250ZW50LyoiPgog ICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IiRjb250ZW50LyoiLz4KICAgIDwveHNs OndoZW4+CiAgICA8eHNsOm90aGVyd2lzZT4KICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRj b250ZW50Ii8+CiAgICA8L3hzbDpvdGhlcndpc2U+CiAgPC94c2w6Y2hvb3NlPgo8L3hzbDp0ZW1w bGF0ZT4KCjx4c2w6dGVtcGxhdGUgbmFtZT0iZ2V0LW5lc3RlZC1zdHJpbmciPgogIDx4c2w6cGFy YW0gbmFtZT0iY29udGVudCIvPgogIDx4c2w6Y2hvb3NlPgogICAgPHhzbDp3aGVuIHRlc3Q9IiRl bnZpcm9ubWVudCA9ICdDb2Nvb24xJyI+CiAgICAgIDx4c2w6Y2hvb3NlPgogICAgICAgIDx4c2w6 d2hlbiB0ZXN0PSIkY29udGVudC8qIj4KICAgICAgICAgICIiCiAgICAgICAgICA8eHNsOmZvci1l YWNoIHNlbGVjdD0iJGNvbnRlbnQvbm9kZSgpIj4KICAgICAgICAgICAgPHhzbDpjaG9vc2U+CiAg ICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9Im5hbWUoLikiPgogICAgICAgICAgICAgICAgKyA8 eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iLz4KICAgICAgICAgICAgICA8L3hzbDp3aGVu PgogICAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPgogICAgICAgICAgICAgICAgKyAiPHhzbDp2 YWx1ZS1vZiBzZWxlY3Q9InRyYW5zbGF0ZSguLCcmIzk7JiMxMDsmIzEzOycsJyAgICcpIi8+Igog ICAgICAgICAgICAgIDwveHNsOm90aGVyd2lzZT4KICAgICAgICAgICAgPC94c2w6Y2hvb3NlPgog ICAgICAgICAgPC94c2w6Zm9yLWVhY2g+CiAgICAgICAgPC94c2w6d2hlbj4KICAgICAgICA8eHNs Om90aGVyd2lzZT4KICAgICAgICAgICI8eHNsOnZhbHVlLW9mIHNlbGVjdD0ibm9ybWFsaXplLXNw YWNlKCRjb250ZW50KSIvPiIKICAgICAgICA8L3hzbDpvdGhlcndpc2U+CiAgICAgIDwveHNsOmNo b29zZT4KICAgIDwveHNsOndoZW4+CiAgICA8eHNsOndoZW4gdGVzdD0iJGVudmlyb25tZW50ID0g J0NvY29vbjInIj4KICAgICAgPHhzbDpjaG9vc2U+CiAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiRj b250ZW50LyoiPgogICAgICAgICAgIiIKICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIk Y29udGVudC9ub2RlKCkiPgogICAgICAgICAgICA8eHNsOmNob29zZT4KICAgICAgICAgICAgICA8 eHNsOndoZW4gdGVzdD0ibmFtZSguKSI+CiAgICAgICAgICAgICAgICA8eHNsOmNob29zZT4KICAg ICAgICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9Im5hbWVzcGFjZS11cmkoLik9J2h0dHA6Ly9h cGFjaGUub3JnL3hzcCcgYW5kIGxvY2FsLW5hbWUoLik9J3RleHQnIj4KICAgICAgICAgICAgICAg ICAgICArICI8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPiIKICAgICAgICAgICAgICAgICAgPC94 c2w6d2hlbj4KICAgICAgICAgICAgICAgICAgPHhzbDpvdGhlcndpc2U+CiAgICAgICAgICAgICAg ICAgICAgKyA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iLz4KICAgICAgICAgICAgICAg ICAgPC94c2w6b3RoZXJ3aXNlPgogICAgICAgICAgICAgICAgPC94c2w6Y2hvb3NlPgogICAgICAg ICAgICAgIDwveHNsOndoZW4+CiAgICAgICAgICAgICAgPHhzbDpvdGhlcndpc2U+CiAgICAgICAg ICAgICAgICArICI8eHNsOnZhbHVlLW9mIHNlbGVjdD0idHJhbnNsYXRlKC4sJyYjOTsmIzEwOyYj MTM7JywnICAgJykiLz4iCiAgICAgICAgICAgICAgPC94c2w6b3RoZXJ3aXNlPgogICAgICAgICAg ICA8L3hzbDpjaG9vc2U+CiAgICAgICAgICA8L3hzbDpmb3ItZWFjaD4KICAgICAgICA8L3hzbDp3 aGVuPgogICAgICAgIDx4c2w6b3RoZXJ3aXNlPiI8eHNsOnZhbHVlLW9mIHNlbGVjdD0ibm9ybWFs aXplLXNwYWNlKCRjb250ZW50KSIvPiI8L3hzbDpvdGhlcndpc2U+CiAgICAgIDwveHNsOmNob29z ZT4KICAgIDwveHNsOndoZW4+CiAgPC94c2w6Y2hvb3NlPgo8L3hzbDp0ZW1wbGF0ZT4KCgogIDx4 c2w6dGVtcGxhdGUgbmFtZT0iZ2V0LXBhcmFtZXRlciI+CiAgICA8eHNsOnBhcmFtIG5hbWU9Im5h bWUiLz4KICAgIDx4c2w6cGFyYW0gbmFtZT0iZGVmYXVsdCIvPgogICAgPHhzbDpwYXJhbSBuYW1l PSJyZXF1aXJlZCI+ZmFsc2U8L3hzbDpwYXJhbT4KCiAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InFu YW1lIj4KICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvbmNhdCgkcHJlZml4LCAnOnBhcmFt JykiLz4KICAgIDwveHNsOnZhcmlhYmxlPgoKICAgIDx4c2w6Y2hvb3NlPgogICAgICA8eHNsOndo ZW4gdGVzdD0iQCpbbmFtZSguKSA9ICRuYW1lXSI+Ijx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAKltu YW1lKC4pID0gJG5hbWVdIi8+IjwveHNsOndoZW4+CiAgICAgIDx4c2w6d2hlbiB0ZXN0PSIoKltu YW1lKC4pID0gJHFuYW1lXSlbQG5hbWUgPSAkbmFtZV0iPgogICAgICAgIDx4c2w6Y2FsbC10ZW1w bGF0ZSBuYW1lPSJnZXQtbmVzdGVkLWNvbnRlbnQiPgogICAgICAgICAgPHhzbDp3aXRoLXBhcmFt IG5hbWU9ImNvbnRlbnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0PSIoKltuYW1l KC4pID0gJHFuYW1lXSlbQG5hbWUgPSAkbmFtZV0iLz4KICAgICAgICA8L3hzbDpjYWxsLXRlbXBs YXRlPgogICAgICA8L3hzbDp3aGVuPgogICAgICA8eHNsOm90aGVyd2lzZT4KICAgICAgICA8eHNs OmNob29zZT4KICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJzdHJpbmctbGVuZ3RoKCRkZWZhdWx0 KSA9IDAiPgogICAgICAgICAgICA8eHNsOmNob29zZT4KICAgICAgICAgICAgICA8eHNsOndoZW4g dGVzdD0iJHJlcXVpcmVkID0gJ3RydWUnIj4KICAgICAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1w bGF0ZSBuYW1lPSJlcnJvciI+CiAgICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1l PSJtZXNzYWdlIj5bTG9naWNzaGVldCBwcm9jZXNzb3JdClBhcmFtZXRlciAnPHhzbDp2YWx1ZS1v ZiBzZWxlY3Q9IiRuYW1lIi8+JyBtaXNzaW5nIGluIGR5bmFtaWMgdGFnICZsdDs8eHNsOnZhbHVl LW9mIHNlbGVjdD0ibmFtZSguKSIvPiZndDsKICAgICAgICAgICAgICAgICAgPC94c2w6d2l0aC1w YXJhbT4KICAgICAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CiAgICAgICAgICAgICAg PC94c2w6d2hlbj4KICAgICAgICAgICAgICA8eHNsOm90aGVyd2lzZT4iIjwveHNsOm90aGVyd2lz ZT4KICAgICAgICAgICAgPC94c2w6Y2hvb3NlPgogICAgICAgICAgPC94c2w6d2hlbj4KICAgICAg ICAgIDx4c2w6b3RoZXJ3aXNlPjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRkZWZhdWx0Ii8+PC94c2w6 b3RoZXJ3aXNlPgogICAgICAgIDwveHNsOmNob29zZT4KICAgICAgPC94c2w6b3RoZXJ3aXNlPgog ICAgPC94c2w6Y2hvb3NlPgogIDwveHNsOnRlbXBsYXRlPgoKPHhzbDp0ZW1wbGF0ZSBtYXRjaD0i eHNwOnBhZ2UiPgogIDx4c3A6cGFnZT4KICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0i QCoiLz4KICAgIDx4c3A6c3RydWN0dXJlPgogICAgICA8eHNwOmluY2x1ZGU+amF2YS5zcWwuRHJp dmVyTWFuYWdlcjwveHNwOmluY2x1ZGU+CiAgICAgIDx4c3A6aW5jbHVkZT5qYXZhLnNxbC5Db25u ZWN0aW9uPC94c3A6aW5jbHVkZT4KICAgICAgPHhzcDppbmNsdWRlPmphdmEuc3FsLlN0YXRlbWVu dDwveHNwOmluY2x1ZGU+CiAgICAgIDx4c3A6aW5jbHVkZT5qYXZhLnNxbC5QcmVwYXJlZFN0YXRl bWVudDwveHNwOmluY2x1ZGU+CiAgICAgIDx4c3A6aW5jbHVkZT5qYXZhLnNxbC5SZXN1bHRTZXQ8 L3hzcDppbmNsdWRlPgogICAgICA8eHNwOmluY2x1ZGU+amF2YS5zcWwuUmVzdWx0U2V0TWV0YURh dGE8L3hzcDppbmNsdWRlPgogICAgICA8eHNwOmluY2x1ZGU+amF2YS5zcWwuU3RydWN0PC94c3A6 aW5jbHVkZT4KICAgICAgPHhzcDppbmNsdWRlPmphdmEuc3FsLlNRTEV4Y2VwdGlvbjwveHNwOmlu Y2x1ZGU+CiAgICAgIDx4c3A6aW5jbHVkZT5qYXZhLnNxbC5DbG9iPC94c3A6aW5jbHVkZT4KICAg ICAgPHhzcDppbmNsdWRlPmphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0PC94c3A6aW5jbHVkZT4K ICAgICAgPHhzcDppbmNsdWRlPmphdmEudGV4dC5EZWNpbWFsRm9ybWF0PC94c3A6aW5jbHVkZT4K ICAgICAgPHhzcDppbmNsdWRlPmphdmEuaW8uU3RyaW5nV3JpdGVyPC94c3A6aW5jbHVkZT4KICAg ICAgPHhzcDppbmNsdWRlPmphdmEuaW8uUHJpbnRXcml0ZXI8L3hzcDppbmNsdWRlPgoJCQk8eHNw OmluY2x1ZGU+amF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtPC94c3A6aW5jbHVkZT4KPCEtLQpU QiAtIGFkZGVkCi0tPgoJCQk8eHNwOmluY2x1ZGU+amF2YS5pby5CdWZmZXJlZFJlYWRlcjwveHNw OmluY2x1ZGU+CgkJCTx4c3A6aW5jbHVkZT5qYXZhLmlvLlJlYWRlcjwveHNwOmluY2x1ZGU+Cjwh LS0KVEIgLSBlbmQKLS0+CgkJCTx4c3A6aW5jbHVkZT5qYXZhLmlvLklucHV0U3RyZWFtPC94c3A6 aW5jbHVkZT4KCQkJPHhzcDppbmNsdWRlPmphdmEudXRpbC5TZXQ8L3hzcDppbmNsdWRlPgogICAg ICA8eHNwOmluY2x1ZGU+amF2YS51dGlsLkxpc3Q8L3hzcDppbmNsdWRlPgogICAgICA8eHNwOmlu Y2x1ZGU+amF2YS51dGlsLkl0ZXJhdG9yPC94c3A6aW5jbHVkZT4KICAgICAgPHhzcDppbmNsdWRl PmphdmEudXRpbC5MaXN0SXRlcmF0b3I8L3hzcDppbmNsdWRlPgogICAgICA8eHNwOmluY2x1ZGU+ amF2YS5zcWwuU3RydWN0PC94c3A6aW5jbHVkZT4KICAgICAgPHhzcDppbmNsdWRlPmphdmEuc3Fs LlR5cGVzPC94c3A6aW5jbHVkZT4KICAgICAgPHhzbDpjaG9vc2U+CiAgICAgICAgIDx4c2w6d2hl biB0ZXN0PSIkZW52aXJvbm1lbnQgPSAnQ29jb29uMSciPgogICAgICAgICAgICAgPHhzcDppbmNs dWRlPm9yZy5hcGFjaGUuY29jb29uLnByb2Nlc3Nvci54c3AubGlicmFyeS5zcWwuRXNxbEhlbHBl cjwveHNwOmluY2x1ZGU+CiAgICAgICAgICAgICA8eHNwOmluY2x1ZGU+b3JnLmFwYWNoZS5jb2Nv b24ucHJvY2Vzc29yLnhzcC5saWJyYXJ5LnNxbC5Fc3FsUXVlcnk8L3hzcDppbmNsdWRlPgogICAg ICAgICAgICAgPHhzcDppbmNsdWRlPm9yZy5hcGFjaGUuY29jb29uLnByb2Nlc3Nvci54c3AubGli cmFyeS5zcWwuRXNxbENvbm5lY3Rpb248L3hzcDppbmNsdWRlPgogICAgICAgICA8L3hzbDp3aGVu PgogICAgICAgICA8eHNsOndoZW4gdGVzdD0iJGVudmlyb25tZW50ID0gJ0NvY29vbjInIj4KICAg ICAgICAgICAgIDx4c3A6aW5jbHVkZT5vcmcuYXBhY2hlLmNvY29vbi5jb21wb25lbnRzLmxhbmd1 YWdlLm1hcmt1cC54c3AuRXNxbEhlbHBlcjwveHNwOmluY2x1ZGU+CiAgICAgICAgICAgICA8eHNw OmluY2x1ZGU+b3JnLmFwYWNoZS5jb2Nvb24uY29tcG9uZW50cy5sYW5ndWFnZS5tYXJrdXAueHNw LkVzcWxRdWVyeTwveHNwOmluY2x1ZGU+CiAgICAgICAgICAgICA8eHNwOmluY2x1ZGU+b3JnLmFw YWNoZS5jb2Nvb24uY29tcG9uZW50cy5sYW5ndWFnZS5tYXJrdXAueHNwLkVzcWxDb25uZWN0aW9u PC94c3A6aW5jbHVkZT4KICAgICAgICAgICAgIDx4c3A6aW5jbHVkZT5vcmcuYXBhY2hlLmNvY29v bi5jb21wb25lbnRzLmxhbmd1YWdlLm1hcmt1cC54c3AuRXNxbENvbm5lY3Rpb25Db2Nvb24yPC94 c3A6aW5jbHVkZT4KICAgICAgICAgICAgIDx4c3A6aW5jbHVkZT5vcmcuYXBhY2hlLmNvY29vbi5j b21wb25lbnRzLmxhbmd1YWdlLm1hcmt1cC54c3AuWFNQVXRpbDwveHNwOmluY2x1ZGU+CiAgICAg ICAgIDwveHNsOndoZW4+CiAgICAgIDwveHNsOmNob29zZT4KICAgICAgPHhzbDppZiB0ZXN0PSIu Ly9lc3FsOmNvbm5lY3Rpb24vZXNxbDpwb29sIj4KICAgICAgICA8eHNsOmNob29zZT4KICAgICAg ICAgIDx4c2w6d2hlbiB0ZXN0PSIkZW52aXJvbm1lbnQgPSAnQ29jb29uMSciPgogICAgICAgICAg ICA8eHNwOmluY2x1ZGU+b3JnLmFwYWNoZS50dXJiaW5lLnNlcnZpY2VzLmRiLlBvb2xCcm9rZXJT ZXJ2aWNlPC94c3A6aW5jbHVkZT4KICAgICAgICAgICAgPHhzcDppbmNsdWRlPm9yZy5hcGFjaGUu dHVyYmluZS51dGlsLmRiLnBvb2wuREJDb25uZWN0aW9uPC94c3A6aW5jbHVkZT4KICAgICAgICAg IDwveHNsOndoZW4+CiAgICAgICAgICA8eHNsOndoZW4gdGVzdD0iJGVudmlyb25tZW50ID0gJ0Nv Y29vbjInIj4KICAgICAgICAgICAgPHhzcDppbmNsdWRlPm9yZy5hcGFjaGUuYXZhbG9uLmV4Y2Fs aWJ1ci5kYXRhc291cmNlLkRhdGFTb3VyY2VDb21wb25lbnQ8L3hzcDppbmNsdWRlPgogICAgICAg ICAgPC94c2w6d2hlbj4KICAgICAgICA8L3hzbDpjaG9vc2U+CiAgICAgIDwveHNsOmlmPgogICAg PC94c3A6c3RydWN0dXJlPgogICAgPHhzcDpsb2dpYz4KICAgICAgcHJpdmF0ZSBTdGFjayBfZXNx bF9jb25uZWN0aW9ucyA9IG5ldyBTdGFjaygpOwogICAgICBwcml2YXRlIEVzcWxDb25uZWN0aW9u PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRlbnZpcm9ubWVudCIvPiBfZXNxbF9jb25uZWN0aW9uID0g bnVsbDsKICAgICAgcHJpdmF0ZSBTdGFjayBfZXNxbF9xdWVyaWVzID0gbmV3IFN0YWNrKCk7CiAg ICAgIHByaXZhdGUgRXNxbFF1ZXJ5IF9lc3FsX3F1ZXJ5ID0gbnVsbDsKICAgICAgcHJpdmF0ZSBT UUxFeGNlcHRpb24gX2VzcWxfZXhjZXB0aW9uID0gbnVsbDsKICAgICAgcHJpdmF0ZSBTdHJpbmdX cml0ZXIgX2VzcWxfZXhjZXB0aW9uX3dyaXRlciA9IG51bGw7CgogICAgICA8eHNsOmlmIHRlc3Q9 Ii4vL2VzcWw6Y29ubmVjdGlvbi9lc3FsOnBvb2wiPgogICAgICAgIDx4c2w6Y2hvb3NlPgogICAg ICAgICAgPHhzbDp3aGVuIHRlc3Q9IiRlbnZpcm9ubWVudCA9ICdDb2Nvb24xJyI+CiAgICAgICAg ICAgIHN0YXRpYyBQb29sQnJva2VyU2VydmljZSBfZXNxbF9wb29sID0gUG9vbEJyb2tlclNlcnZp Y2UuZ2V0SW5zdGFuY2UoKTsKICAgICAgICAgIDwveHNsOndoZW4+CiAgICAgICAgICA8eHNsOndo ZW4gdGVzdD0iJGVudmlyb25tZW50ID0gJ0NvY29vbjInIj4KICAgICAgICAgICAgcHJpdmF0ZSBz dGF0aWMgQ29tcG9uZW50U2VsZWN0b3IgX2VzcWxfc2VsZWN0b3IgPSBudWxsOwoKICAgICAgICAg ICAgcHVibGljIHZvaWQgY29tcG9zZShDb21wb25lbnRNYW5hZ2VyIG1hbmFnZXIpIHRocm93cyBv cmcuYXBhY2hlLmF2YWxvbi5mcmFtZXdvcmsuY29tcG9uZW50LkNvbXBvbmVudEV4Y2VwdGlvbiB7 CiAgICAgICAgICAgICAgc3VwZXIuY29tcG9zZShtYW5hZ2VyKTsKICAgICAgICAgICAgICBpZiAo X2VzcWxfc2VsZWN0b3IgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAg ICAgICAgICAgX2VzcWxfc2VsZWN0b3IgPSAoQ29tcG9uZW50U2VsZWN0b3IpIG1hbmFnZXIubG9v a3VwKERhdGFTb3VyY2VDb21wb25lbnQuUk9MRSArICJTZWxlY3RvciIpOwogICAgICAgICAgICAg ICAgfSBjYXRjaCAoQ29tcG9uZW50RXhjZXB0aW9uIGNtZSkgewogICAgICAgICAgICAgICAgICBn ZXRMb2dnZXIoKS5lcnJvcigiQ291bGQgbm90IGxvb2sgdXAgdGhlIGRhdGFzb3VyY2UgY29tcG9u ZW50IiwgY21lKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAg IH0KICAgICAgICAgIDwveHNsOndoZW4+CiAgICAgICAgPC94c2w6Y2hvb3NlPgogICAgICA8L3hz bDppZj4KCjwhLS0KVEIgLSBhZGRlZAp4LmdldE1ldGFEYXRhKCkuZ2V0Q29sdW1uVHlwZSh4LmZp bmRDb2x1bW4oc3RyaW5nKSk9PWphdmEuc3FsLlR5cGVzLkNMT0IKLS0+CgkJCXByaXZhdGUgZmlu YWwgU3RyaW5nIGdldFN0cmluZ09yQ2xvYihSZXN1bHRTZXQgc2V0LCBTdHJpbmcgY29sdW1uKSB0 aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbiB7CgkJCQlSZWFkZXIgcmVhZGVyID0gbnVsbDsKCQkJ CWNoYXJbXSBidWZmZXIgPSBudWxsOwoKCQkJCWlmIChzZXQuZ2V0TWV0YURhdGEoKS5nZXRDb2x1 bW5UeXBlKHNldC5maW5kQ29sdW1uKGNvbHVtbikpPT1qYXZhLnNxbC5UeXBlcy5DTE9CKSB7CgkJ CQkJCUNsb2IgZGJDbG9iID0gc2V0LmdldENsb2IoY29sdW1uKTsKCQkJCQkJaW50IGxlbmd0aCA9 IChpbnQpIGRiQ2xvYi5sZW5ndGgoKTsKCQkJCQkJcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVy KGRiQ2xvYi5nZXRDaGFyYWN0ZXJTdHJlYW0oKSk7CgkJCQkJCWJ1ZmZlciA9IG5ldyBjaGFyW2xl bmd0aF07CgkJCQkJCXJlYWRlci5yZWFkKGJ1ZmZlcik7CgkJCQkJCXJlYWRlci5jbG9zZSgpOwoJ CQkJCQlpZiAocmVhZGVyICE9IG51bGwpCgkJCQkJCQkJcmVhZGVyLmNsb3NlKCk7CgkJCQkJCWlm IChidWZmZXIgPT0gbnVsbCkKCQkJCQkJCQlyZXR1cm4gIiI7CgkJCQkJCXJldHVybiBuZXcgU3Ry aW5nKGJ1ZmZlcik7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJcmV0dXJuIHNldC5nZXRTdHJp bmcoY29sdW1uKTsKCQkJCX0KCQkJfQo8IS0tClRCIC0gZW5kCi0tPgoKCQkJPHhzbDpjaG9vc2U+ CgkJCQk8eHNsOndoZW4gdGVzdD0iJGVudmlyb25tZW50ID0gJ0NvY29vbjEnIj4KCQkJCTwveHNs OndoZW4+CgkJCQk8eHNsOndoZW4gdGVzdD0iJGVudmlyb25tZW50ID0gJ0NvY29vbjInIj4KCQkJ CQkJcHJvdGVjdGVkIHZvaWQgX2VzcWxfcHJpbnRPYmplY3QgKCBPYmplY3Qgb2JqLCBBdHRyaWJ1 dGVzSW1wbCB4c3BBdHRyKSB0aHJvd3MgU0FYRXhjZXB0aW9uCgkJCQkJCXsKCQkJCQkJCSBpZiAo IG9iaiBpbnN0YW5jZW9mIExpc3QpIHsKCQkJCQkgTGlzdEl0ZXJhdG9yIGo9KChMaXN0KW9iaiku bGlzdEl0ZXJhdG9yKCk7CiAgICAgICAgICAgPHhzcDplbGVtZW50IG5hbWU9InNxbC1saXN0Ij4K ICAgICAgICAgICAgICAgICAgICAgPHhzcDpsb2dpYz4KICAgICAgICAgICAgICAgICAgICAgICB3 aGlsZSAoai5oYXNOZXh0KCkpewogICAgICAgICAgICAgICAgICAgICAgPHhzcDplbGVtZW50IG5h bWU9InNxbC1saXN0LWl0ZW0iPgogICAgICAgICAgICAgICAgICAgICAgICA8eHNwOmF0dHJpYnV0 ZSBuYW1lPSJwb3MiPjx4c3A6ZXhwcj5qLm5leHRJbmRleCgpPC94c3A6ZXhwcj48L3hzcDphdHRy aWJ1dGU+CiAgICAgICAgICAgICAgICAgICAgICAgIDx4c3A6bG9naWM+dGhpcy5fZXNxbF9wcmlu dE9iamVjdChqLm5leHQoKSx4c3BBdHRyKTs8L3hzcDpsb2dpYz4KICAgICAgICAgICAgICAgICAg ICAgIDwveHNwOmVsZW1lbnQ+CiAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAg ICAgICAgICAgPC94c3A6bG9naWM+CiAgICAgICAgICAgICAgICAgICA8L3hzcDplbGVtZW50Pgog ICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBvYmogaW5zdGFuY2VvZiBTZXQgKSB7CiAgICAgICAg ICAgIEl0ZXJhdG9yIGo9KChTZXQpb2JqKS5pdGVyYXRvcigpOwogICAgICAgICAgICA8eHNwOmVs ZW1lbnQgbmFtZT0ic3FsLXNldCI+CiAgICAgICAgICAgICAgICAgICAgICA8eHNwOmxvZ2ljPgog ICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoai5oYXNOZXh0KCkpewogICAgICAgICAgICAg ICAgICAgICAgICAgICA8eHNwOmVsZW1lbnQgbmFtZT0ic3FsLXNldC1pdGVtIj4KICAgICAgICAg ICAgICAgICA8eHNwOmxvZ2ljPnRoaXMuX2VzcWxfcHJpbnRPYmplY3Qoai5uZXh0KCkseHNwQXR0 cik7PC94c3A6bG9naWM+CiAgICAgICAgICAgICAgICAgICA8L3hzcDplbGVtZW50PgogICAgICAg ICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgPC94c3A6bG9naWM+CiAg ICAgICAgICAgICAgICAgICAgPC94c3A6ZWxlbWVudD4KICAgICAgICAgICB9IGVsc2UgewogICAg ICAgICAgICAgIDx4c3A6Y29udGVudD48eHNwOmV4cHI+b2JqPC94c3A6ZXhwcj48L3hzcDpjb250 ZW50PjsKICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIDwveHNsOndoZW4+CiAgICAgIDwv eHNsOmNob29zZT4KICAgIDwveHNwOmxvZ2ljPgogICAgPHhzbDphcHBseS10ZW1wbGF0ZXMvPgog IDwveHNwOnBhZ2U+CjwveHNsOnRlbXBsYXRlPgoKPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ieHNwOnBh Z2UvKltub3Qoc2VsZjo6eHNwOiopXSI+CiAgPHhzbDpjb3B5PgogICAgPHhzbDphcHBseS10ZW1w bGF0ZXMgc2VsZWN0PSJAKiIvPgogICAgPHhzcDpsb2dpYz4KICAgIDwveHNwOmxvZ2ljPgogICAg PHhzbDphcHBseS10ZW1wbGF0ZXMvPgogIDwveHNsOmNvcHk+CjwveHNsOnRlbXBsYXRlPgoKPHhz bDp0ZW1wbGF0ZSBtYXRjaD0iZXNxbDpjb25uZWN0aW9uIj4KICA8eHNsOnZhcmlhYmxlIG5hbWU9 ImRyaXZlciI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImdldC1uZXN0ZWQtc3RyaW5nIj48eHNs OndpdGgtcGFyYW0gbmFtZT0iY29udGVudCIgc2VsZWN0PSJlc3FsOmRyaXZlciIvPjwveHNsOmNh bGwtdGVtcGxhdGU+PC94c2w6dmFyaWFibGU+CiAgPHhzbDp2YXJpYWJsZSBuYW1lPSJkYnVybCI+ PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImdldC1uZXN0ZWQtc3RyaW5nIj48eHNsOndpdGgtcGFy YW0gbmFtZT0iY29udGVudCIgc2VsZWN0PSJlc3FsOmRidXJsIi8+PC94c2w6Y2FsbC10ZW1wbGF0 ZT48L3hzbDp2YXJpYWJsZT4KICA8eHNsOnZhcmlhYmxlIG5hbWU9InVzZXJuYW1lIj48eHNsOmNh bGwtdGVtcGxhdGUgbmFtZT0iZ2V0LW5lc3RlZC1zdHJpbmciPjx4c2w6d2l0aC1wYXJhbSBuYW1l PSJjb250ZW50IiBzZWxlY3Q9ImVzcWw6dXNlcm5hbWUiLz48L3hzbDpjYWxsLXRlbXBsYXRlPjwv eHNsOnZhcmlhYmxlPgogIDx4c2w6dmFyaWFibGUgbmFtZT0icGFzc3dvcmQiPjx4c2w6Y2FsbC10 ZW1wbGF0ZSBuYW1lPSJnZXQtbmVzdGVkLXN0cmluZyI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImNv bnRlbnQiIHNlbGVjdD0iZXNxbDpwYXNzd29yZCIvPjwveHNsOmNhbGwtdGVtcGxhdGU+PC94c2w6 dmFyaWFibGU+CiAgPHhzbDp2YXJpYWJsZSBuYW1lPSJwb29sIj48eHNsOmNhbGwtdGVtcGxhdGUg bmFtZT0iZ2V0LW5lc3RlZC1zdHJpbmciPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJjb250ZW50IiBz ZWxlY3Q9ImVzcWw6cG9vbCIvPjwveHNsOmNhbGwtdGVtcGxhdGU+PC94c2w6dmFyaWFibGU+CiAg PHhzbDp2YXJpYWJsZSBuYW1lPSJhdXRvY29tbWl0Ij48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0i Z2V0LW5lc3RlZC1zdHJpbmciPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJjb250ZW50IiBzZWxlY3Q9 ImVzcWw6YXV0b2NvbW1pdCIvPjwveHNsOmNhbGwtdGVtcGxhdGU+PC94c2w6dmFyaWFibGU+CiAg PHhzbDp2YXJpYWJsZSBuYW1lPSJ1c2UtbGltaXQtY2xhdXNlIj48eHNsOmNhbGwtdGVtcGxhdGUg bmFtZT0iZ2V0LW5lc3RlZC1zdHJpbmciPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJjb250ZW50IiBz ZWxlY3Q9ImVzcWw6dXNlLWxpbWl0LWNsYXVzZSIvPjwveHNsOmNhbGwtdGVtcGxhdGU+PC94c2w6 dmFyaWFibGU+CiAgPHhzcDpsb2dpYz4KICAgIGlmIChfZXNxbF9jb25uZWN0aW9uICE9IG51bGwp IHsKICAgICAgX2VzcWxfY29ubmVjdGlvbnMucHVzaChfZXNxbF9jb25uZWN0aW9uKTsKICAgIH0K ICAgIF9lc3FsX2Nvbm5lY3Rpb24gPSBuZXcgRXNxbENvbm5lY3Rpb248eHNsOnZhbHVlLW9mIHNl bGVjdD0iJGVudmlyb25tZW50Ii8+KCk7CiAgICB0cnkgewogICAgICA8eHNsOmNob29zZT4KICAg ICAgICA8eHNsOndoZW4gdGVzdD0iZXNxbDpwb29sIGFuZCAkZW52aXJvbm1lbnQgPSAnQ29jb29u MSciPgogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgX2VzcWxfY29ubmVjdGlvbi5kYl9jb25u ZWN0aW9uID0gX2VzcWxfcG9vbC5nZXRDb25uZWN0aW9uKFN0cmluZy52YWx1ZU9mKDx4c2w6Y29w eS1vZiBzZWxlY3Q9IiRwb29sIi8+KSk7CiAgICAgICAgICAgIF9lc3FsX2Nvbm5lY3Rpb24uY29u bmVjdGlvbiA9IF9lc3FsX2Nvbm5lY3Rpb24uZGJfY29ubmVjdGlvbi5nZXRDb25uZWN0aW9uKCk7 CiAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gX2VzcWxfZXhjZXB0aW9uXzx4c2w6dmFsdWUt b2Ygc2VsZWN0PSJnZW5lcmF0ZS1pZCguKSIvPikgewogICAgICAgICAgICB0aHJvdyBuZXcgUnVu dGltZUV4Y2VwdGlvbigiRXJyb3Igb3BlbmluZyBwb29sZWQgY29ubmVjdGlvbjogIitTdHJpbmcu dmFsdWVPZig8eHNsOmNvcHktb2Ygc2VsZWN0PSIkcG9vbCIvPikrIjogIitfZXNxbF9leGNlcHRp b25fPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImdlbmVyYXRlLWlkKC4pIi8+LmdldE1lc3NhZ2UoKSk7 CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoX2VzcWxfY29ubmVjdGlvbi5jb25uZWN0aW9uID09 IG51bGwpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNvdWxkIG5v dCBvcGVuIHBvb2xlZCBjb25uZWN0aW9uOiAiK1N0cmluZy52YWx1ZU9mKDx4c2w6Y29weS1vZiBz ZWxlY3Q9IiRwb29sIi8+KSk7CiAgICAgICAgICB9CiAgICAgICAgPC94c2w6d2hlbj4KICAgICAg ICA8eHNsOndoZW4gdGVzdD0iZXNxbDpwb29sIGFuZCAkZW52aXJvbm1lbnQgPSAnQ29jb29uMici PgogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgX2VzcWxfY29ubmVjdGlvbi5kYXRhc291cmNl ID0gKERhdGFTb3VyY2VDb21wb25lbnQpIF9lc3FsX3NlbGVjdG9yLnNlbGVjdChTdHJpbmcudmFs dWVPZig8eHNsOmNvcHktb2Ygc2VsZWN0PSIkcG9vbCIvPikpOwogICAgICAgICAgICBfZXNxbF9j b25uZWN0aW9uLmNvbm5lY3Rpb24gPSBfZXNxbF9jb25uZWN0aW9uLmRhdGFzb3VyY2UuZ2V0Q29u bmVjdGlvbigpOwogICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIF9lc3FsX2V4Y2VwdGlvbl88 eHNsOnZhbHVlLW9mIHNlbGVjdD0iZ2VuZXJhdGUtaWQoLikiLz4pIHsKICAgICAgICAgICAgZ2V0 TG9nZ2VyKCkuZXJyb3IoIkNvdWxkIG5vdCBnZXQgdGhlIGRhdGFzb3VyY2UiLF9lc3FsX2V4Y2Vw dGlvbl88eHNsOnZhbHVlLW9mIHNlbGVjdD0iZ2VuZXJhdGUtaWQoLikiLz4pOwogICAgICAgICAg ICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ291bGQgbm90IGdldCB0aGUgZGF0YXNvdXJj ZSAiK19lc3FsX2V4Y2VwdGlvbl88eHNsOnZhbHVlLW9mIHNlbGVjdD0iZ2VuZXJhdGUtaWQoLiki Lz4pOwogICAgICAgICAgfQogICAgICAgIDwveHNsOndoZW4+CiAgICAgICAgPHhzbDpvdGhlcndp c2U+CiAgICAgICAgICA8eHNsOmlmIHRlc3Q9ImVzcWw6ZHJpdmVyIj4KICAgICAgICAgIHRyeSB7 CiAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVy KCkubG9hZENsYXNzKFN0cmluZy52YWx1ZU9mKDx4c2w6Y29weS1vZiBzZWxlY3Q9IiRkcml2ZXIi Lz4pKS5uZXdJbnN0YW5jZSgpOwogICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIF9lc3FsX2V4 Y2VwdGlvbl88eHNsOnZhbHVlLW9mIHNlbGVjdD0iZ2VuZXJhdGUtaWQoLikiLz4pIHsKICAgICAg ICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkVycm9yIGxvYWRpbmcgZHJpdmVyOiAi K1N0cmluZy52YWx1ZU9mKDx4c2w6Y29weS1vZiBzZWxlY3Q9IiRkcml2ZXIiLz4pKTsKICAgICAg ICAgIH0KICAgICAgICAgIDwveHNsOmlmPgogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgX2Vz cWxfY29ubmVjdGlvbi5zZXRVcmwoU3RyaW5nLnZhbHVlT2YoPHhzbDpjb3B5LW9mIHNlbGVjdD0i JGRidXJsIi8+KSk7CiAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0iZXNxbDp1c2VybmFtZSI+CiAg ICAgICAgICAgICAgX2VzcWxfY29ubmVjdGlvbi5zZXRVc2VyKFN0cmluZy52YWx1ZU9mKDx4c2w6 Y29weS1vZiBzZWxlY3Q9IiR1c2VybmFtZSIvPikpOwogICAgICAgICAgICA8L3hzbDppZj4KICAg ICAgICAgICAgPHhzbDppZiB0ZXN0PSJlc3FsOnBhc3N3b3JkIj4KICAgICAgICAgICAgICBfZXNx bF9jb25uZWN0aW9uLnNldFBhc3N3b3JkKFN0cmluZy52YWx1ZU9mKDx4c2w6Y29weS1vZiBzZWxl Y3Q9IiRwYXNzd29yZCIvPikpOwogICAgICAgICAgICA8L3hzbDppZj4KICAgICAgICAgICAgPHhz bDpmb3ItZWFjaCBzZWxlY3Q9ImVzcWw6cHJvcGVydHkiPgogICAgICAgICAgICAgIF9lc3FsX2Nv bm5lY3Rpb24uc2V0UHJvcGVydHkoIjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPiIsPHhz bDpjYWxsLXRlbXBsYXRlIG5hbWU9ImdldC1uZXN0ZWQtc3RyaW5nIj48eHNsOndpdGgtcGFyYW0g bmFtZT0iY29udGVudCIgc2VsZWN0PSIuIi8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4pOwogICAgICAg ICAgICA8L3hzbDpmb3ItZWFjaD4KICAgICAgICAgICAgX2VzcWxfY29ubmVjdGlvbi5jb25uZWN0 aW9uID0gRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKF9lc3FsX2Nvbm5lY3Rpb24uZ2V0VXJs KCksIF9lc3FsX2Nvbm5lY3Rpb24uZ2V0SW5mbygpKTsKICAgICAgICAgIH0gY2F0Y2ggKEV4Y2Vw dGlvbiBfZXNxbF9leGNlcHRpb25fPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImdlbmVyYXRlLWlkKC4p Ii8+KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJFcnJvciBvcGVu aW5nIGNvbm5lY3Rpb24gdG8gZGJ1cmw6ICIrU3RyaW5nLnZhbHVlT2YoPHhzbDpjb3B5LW9mIHNl bGVjdD0iJGRidXJsIi8+KSsiOiAiK19lc3FsX2V4Y2VwdGlvbl88eHNsOnZhbHVlLW9mIHNlbGVj dD0iZ2VuZXJhdGUtaWQoLikiLz4uZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgIH0KICAgICAgICA8 L3hzbDpvdGhlcndpc2U+CiAgICAgIDwveHNsOmNob29zZT4KICAgICAgdHJ5IHsKICAgICAgICBp ZiAoImZhbHNlIi5lcXVhbHMoU3RyaW5nLnZhbHVlT2YoPHhzbDpjb3B5LW9mIHNlbGVjdD0iJGF1 dG9jb21taXQiLz4pKSkgewogICAgICAgICAgaWYgKF9lc3FsX2Nvbm5lY3Rpb24uZ2V0QXV0b0Nv bW1pdCgpKSB7CiAgICAgICAgICAgIF9lc3FsX2Nvbm5lY3Rpb24uc2V0QXV0b0NvbW1pdChmYWxz ZSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmICghX2VzcWxfY29u bmVjdGlvbi5nZXRBdXRvQ29tbWl0KCkpIHsKICAgICAgICAgICAgX2VzcWxfY29ubmVjdGlvbi5z ZXRBdXRvQ29tbWl0KHRydWUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBjYXRjaCAo RXhjZXB0aW9uIF9lc3FsX2V4Y2VwdGlvbl88eHNsOnZhbHVlLW9mIHNlbGVjdD0iZ2VuZXJhdGUt aWQoLikiLz4pIHsKICAgICAgICAvLyBkbyBOT1Q6IHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9u KCJFcnJvciBzZXR0aW5nIGNvbm5lY3Rpb24gYXV0b2NvbW1pdCIpOwogICAgICB9CiAgICAgIDx4 c2w6aWYgdGVzdD0iZXNxbDp1c2UtbGltaXQtY2xhdXNlIj4KICAgICAgICBfZXNxbF9jb25uZWN0 aW9uLnNldExpbWl0TWV0aG9kKFN0cmluZy52YWx1ZU9mKDx4c2w6Y29weS1vZiBzZWxlY3Q9IiR1 c2UtbGltaXQtY2xhdXNlIi8+KSk7CiAgICAgIDwveHNsOmlmPgogICAgICA8eHNsOmFwcGx5LXRl bXBsYXRlcy8+CiAgICB9IGZpbmFsbHkgewogICAgICB0cnkgewogICAgICAgIGlmKCFfZXNxbF9j b25uZWN0aW9uLmdldEF1dG9Db21taXQoKSkgewogICAgICAgICAgX2VzcWxfY29ubmVjdGlvbi5j b21taXQoKTsKICAgICAgICB9CiAgICAgICAgPHhzbDpjaG9vc2U+CiAgICAgICAgICA8eHNsOndo ZW4gdGVzdD0iZXNxbDpwb29sIGFuZCAkZW52aXJvbm1lbnQgPSAnQ29jb29uMSciPgogICAgICAg ICAgICBfZXNxbF9wb29sLnJlbGVhc2VDb25uZWN0aW9uKF9lc3FsX2Nvbm5lY3Rpb24uZGJfY29u bmVjdGlvbik7CiAgICAgICAgICA8L3hzbDp3aGVuPgogICAgICAgICAgPHhzbDpvdGhlcndpc2U+ CiAgICAgICAgICAgIF9lc3FsX2Nvbm5lY3Rpb24uY2xvc2UoKTsKICAgICAgICAgIDwveHNsOm90 aGVyd2lzZT4KICAgICAgICA8L3hzbDpjaG9vc2U+CiAgICAgICAgaWYgKF9lc3FsX2Nvbm5lY3Rp b25zLmVtcHR5KCkpIHsKICAgICAgICAgIF9lc3FsX2Nvbm5lY3Rpb24gPSBudWxsOwogICAgICAg IH0gZWxzZSB7CiAgICAgICAgICBfZXNxbF9jb25uZWN0aW9uID0gKEVzcWxDb25uZWN0aW9uPHhz bDp2YWx1ZS1vZiBzZWxlY3Q9IiRlbnZpcm9ubWVudCIvPilfZXNxbF9jb25uZWN0aW9ucy5wb3Ao KTsKICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBfZXNxbF9leGNlcHRpb25fPHhz bDp2YWx1ZS1vZiBzZWxlY3Q9ImdlbmVyYXRlLWlkKC4pIi8+KSB7fQogICAgfQogIDwveHNwOmxv Z2ljPgo8L3hzbDp0ZW1wbGF0ZT4KCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVzcWw6Y29ubmVjdGlv bi9lc3FsOmRyaXZlciIvPgo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlc3FsOmNvbm5lY3Rpb24vZXNx bDpkYnVybCIvPgo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlc3FsOmNvbm5lY3Rpb24vZXNxbDp1c2Vy bmFtZSIvPgo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlc3FsOmNvbm5lY3Rpb24vZXNxbDpwYXNzd29y ZCIvPgo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlc3FsOmNvbm5lY3Rpb24vZXNxbDpwb29sIi8+Cjx4 c2w6dGVtcGxhdGUgbWF0Y2g9ImVzcWw6Y29ubmVjdGlvbi9lc3FsOmF1dG9jb21taXQiLz4KPHhz bDp0ZW1wbGF0ZSBtYXRjaD0iZXNxbDpjb25uZWN0aW9uL2VzcWw6dXNlLWxpbWl0LWNsYXVzZSIv Pgo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlc3FsOmNvbm5lY3Rpb24vZXNxbDpwcm9wZXJ0eSIvPgoK PHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZXNxbDpjb25uZWN0aW9uLy9lc3FsOmV4ZWN1dGUtcXVlcnki PgogIDx4c2w6dmFyaWFibGUgbmFtZT0icXVlcnkiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJn ZXQtbmVzdGVkLXN0cmluZyI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImNvbnRlbnQiIHNlbGVjdD0i ZXNxbDpxdWVyeSIvPjwveHNsOmNhbGwtdGVtcGxhdGU+PC94c2w6dmFyaWFibGU+CiAgPHhzbDp2 YXJpYWJsZSBuYW1lPSJtYXhyb3dzIj48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZ2V0LW5lc3Rl ZC1zdHJpbmciPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJjb250ZW50IiBzZWxlY3Q9ImVzcWw6bWF4 LXJvd3MiLz48L3hzbDpjYWxsLXRlbXBsYXRlPjwveHNsOnZhcmlhYmxlPgogIDx4c2w6dmFyaWFi bGUgbmFtZT0ic2tpcHJvd3MiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJnZXQtbmVzdGVkLXN0 cmluZyI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImNvbnRlbnQiIHNlbGVjdD0iZXNxbDpza2lwLXJv d3MiLz48L3hzbDpjYWxsLXRlbXBsYXRlPjwveHNsOnZhcmlhYmxlPgogIDx4c3A6bG9naWM+CiAg ICBpZiAoX2VzcWxfcXVlcnkgIT0gbnVsbCkgewogICAgICBfZXNxbF9xdWVyaWVzLnB1c2goX2Vz cWxfcXVlcnkpOwogICAgfQogICAgX2VzcWxfcXVlcnkgPSBuZXcgRXNxbFF1ZXJ5KCBfZXNxbF9j b25uZWN0aW9uLCBTdHJpbmcudmFsdWVPZig8eHNsOmNvcHktb2Ygc2VsZWN0PSIkcXVlcnkiLz4p ICk7CgogICAgPHhzbDppZiB0ZXN0PSJlc3FsOm1heC1yb3dzIj4KICAgICAgdHJ5IHsKICAgICAg ICBfZXNxbF9xdWVyeS5zZXRNYXhSb3dzKCBJbnRlZ2VyLnBhcnNlSW50KFN0cmluZy52YWx1ZU9m KDx4c2w6Y29weS1vZiBzZWxlY3Q9IiRtYXhyb3dzIi8+KSkgKTsKICAgICAgfSBjYXRjaCAoTnVt YmVyRm9ybWF0RXhjZXB0aW9uIGUpIHt9CiAgICA8L3hzbDppZj4KCiAgICA8eHNsOmlmIHRlc3Q9 ImVzcWw6c2tpcC1yb3dzIj4KICAgICAgdHJ5IHsKICAgICAgICBfZXNxbF9xdWVyeS5zZXRTa2lw Um93cyggSW50ZWdlci5wYXJzZUludChTdHJpbmcudmFsdWVPZig8eHNsOmNvcHktb2Ygc2VsZWN0 PSIkc2tpcHJvd3MiLz4pKSApOwogICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24g ZSkge30KICAgIDwveHNsOmlmPgoKICAgIHRyeSB7CiAgICAgIDx4c2w6Y2hvb3NlPgogICAgICAg IDx4c2w6d2hlbiB0ZXN0PSJlc3FsOnF1ZXJ5Ly9lc3FsOnBhcmFtZXRlciI+CiAgICAgICAgICB0 cnkgewogICAgICAgICAgICBfZXNxbF9xdWVyeS5wcmVwYXJlU3RhdGVtZW50KCk7CiAgICAgICAg ICB9IGNhdGNoIChTUUxFeGNlcHRpb24gX2VzcWxfZXhjZXB0aW9uXzx4c2w6dmFsdWUtb2Ygc2Vs ZWN0PSJnZW5lcmF0ZS1pZCguKSIvPikgewogICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4 Y2VwdGlvbigiRXJyb3IgcHJlcGFyaW5nIHN0YXRlbWVudDogIiArIF9lc3FsX3F1ZXJ5LmdldFF1 ZXJ5U3RyaW5nKCkgKyAiOiAiK19lc3FsX2V4Y2VwdGlvbl88eHNsOnZhbHVlLW9mIHNlbGVjdD0i Z2VuZXJhdGUtaWQoLikiLz4uZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgIH0KICAgICAgICAgIDx4 c2w6Zm9yLWVhY2ggc2VsZWN0PSJlc3FsOnF1ZXJ5Ly9lc3FsOnBhcmFtZXRlciI+CiAgICAgICAg ICAgIHRyeSB7CiAgICAgICAgICAgICAgPHhzbDp0ZXh0Pl9lc3FsX3F1ZXJ5LmdldFByZXBhcmVk U3RhdGVtZW50KCkuPC94c2w6dGV4dD4KICAgICAgICAgICAgICA8eHNsOmNob29zZT4KICAgICAg ICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJAdHlwZSI+CiAgICAgICAgICAgICAgICAgIDx4c2w6 dmFyaWFibGUgbmFtZT0idHlwZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvbmNhdCh0cmFuc2xh dGUoc3Vic3RyaW5nKEB0eXBlLDEsMSksJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JywnQUJD REVGR0hJSktMTU5PUFFSU1RVVldYWVonKSxzdWJzdHJpbmcoQHR5cGUsMikpIi8+PC94c2w6dmFy aWFibGU+CiAgICAgICAgICAgICAgICAgIDx4c2w6dGV4dD5zZXQ8L3hzbDp0ZXh0Pjx4c2w6dmFs dWUtb2Ygc2VsZWN0PSIkdHlwZSIvPig8eHNsOnZhbHVlLW9mIHNlbGVjdD0icG9zaXRpb24oKSIv Piw8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZ2V0LW5lc3RlZC1jb250ZW50Ij48eHNsOndpdGgt cGFyYW0gbmFtZT0iY29udGVudCIgc2VsZWN0PSIuIi8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4pOzx4 c2w6dGV4dD4KPC94c2w6dGV4dD4KICAgICAgICAgICAgICAgIDwveHNsOndoZW4+CiAgICAgICAg ICAgICAgICA8eHNsOm90aGVyd2lzZT4KICAgICAgICAgICAgICAgICAgPHhzbDp0ZXh0PnNldFN0 cmluZyg8L3hzbDp0ZXh0Pjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJwb3NpdGlvbigpIi8+LFN0cmlu Zy52YWx1ZU9mKDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJnZXQtbmVzdGVkLXN0cmluZyI+PHhz bDp3aXRoLXBhcmFtIG5hbWU9ImNvbnRlbnQiIHNlbGVjdD0iLiIvPjwveHNsOmNhbGwtdGVtcGxh dGU+KSk7PHhzbDp0ZXh0Pgo8L3hzbDp0ZXh0PgogICAgICAgICAgICAgICAgPC94c2w6b3RoZXJ3 aXNlPgogICAgICAgICAgICAgIDwveHNsOmNob29zZT4KICAgICAgICAgICAgfSBjYXRjaCAoU1FM RXhjZXB0aW9uIF9lc3FsX2V4Y2VwdGlvbl88eHNsOnZhbHVlLW9mIHNlbGVjdD0iZ2VuZXJhdGUt aWQoLikiLz4pIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRXJy b3Igc2V0dGluZyBwYXJhbWV0ZXIgb24gc3RhdGVtZW50OiAiICsgX2VzcWxfcXVlcnkuZ2V0UXVl cnlTdHJpbmcoKSArICI6ICIrX2VzcWxfZXhjZXB0aW9uXzx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJn ZW5lcmF0ZS1pZCguKSIvPik7CiAgICAgICAgICAgIH0KICAgICAgICAgIDwveHNsOmZvci1lYWNo PgogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgX2VzcWxfcXVlcnkuZXhlY3V0ZSgpOwogICAg ICAgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIF9lc3FsX2V4Y2VwdGlvbl88eHNsOnZhbHVlLW9m IHNlbGVjdD0iZ2VuZXJhdGUtaWQoLikiLz4pIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRp bWVFeGNlcHRpb24oIkVycm9yIGV4ZWN1dGluZyBwcmVwYXJlZCBzdGF0ZW1lbnQ6ICIgKyBfZXNx bF9xdWVyeS5nZXRRdWVyeVN0cmluZygpICsgIjogIitfZXNxbF9leGNlcHRpb25fPHhzbDp2YWx1 ZS1vZiBzZWxlY3Q9ImdlbmVyYXRlLWlkKC4pIi8+KTsKICAgICAgICAgIH0KICAgICAgICA8L3hz bDp3aGVuPgogICAgICAgIDx4c2w6b3RoZXJ3aXNlPgogICAgICAgICAgX2VzcWxfcXVlcnkuY3Jl YXRlU3RhdGVtZW50KCk7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBfZXNxbF9xdWVyeS5l eGVjdXRlKCk7CiAgICAgICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gX2VzcWxfZXhjZXB0aW9u Xzx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJnZW5lcmF0ZS1pZCguKSIvPikgewogICAgICAgICAgICB0 aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudDogIiAr IF9lc3FsX3F1ZXJ5LmdldFF1ZXJ5U3RyaW5nKCkgKyAiOiAiK19lc3FsX2V4Y2VwdGlvbl88eHNs OnZhbHVlLW9mIHNlbGVjdD0iZ2VuZXJhdGUtaWQoLikiLz4pOwogICAgICAgICAgfQogICAgICAg IDwveHNsOm90aGVyd2lzZT4KICAgICAgPC94c2w6Y2hvb3NlPgogICAgICA8eHNsOmNob29zZT4K ICAgICAgICA8eHNsOndoZW4gdGVzdD0iJGVudmlyb25tZW50ID0gJ0NvY29vbjEnIj4KICAgICAg ICAgIFN5c3RlbS5lcnIucHJpbnRsbigiUVVFUlk6ICIgKyBfZXNxbF9xdWVyeS5nZXRRdWVyeVN0 cmluZygpKTsKICAgICAgICA8L3hzbDp3aGVuPgogICAgICAgIDx4c2w6b3RoZXJ3aXNlPgogICAg ICAgICAgZ2V0TG9nZ2VyKCkuZGVidWcoImVzcWwgcXVlcnk6ICIgKyBfZXNxbF9xdWVyeS5nZXRR dWVyeVN0cmluZygpKTsKICAgICAgICA8L3hzbDpvdGhlcndpc2U+CiAgICAgIDwveHNsOmNob29z ZT4KICAgICAgaWYgKF9lc3FsX3F1ZXJ5Lmhhc1Jlc3VsdFNldCgpKSB7CiAgICAgICAgZG8gewog ICAgICAgICAgX2VzcWxfcXVlcnkuZ2V0UmVzdWx0Um93cygpOwoKICAgICAgICAgIGlmIChfZXNx bF9xdWVyeS5uZXh0Um93KCkpIHsKICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2Vs ZWN0PSJlc3FsOnJlc3VsdHMiLz4KICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAg ICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImVzcWw6bm8tcmVzdWx0cyIvPgogICAg ICAgICAgfQogICAgICAgICAgX2VzcWxfcXVlcnkuZ2V0UmVzdWx0U2V0KCkuY2xvc2UoKTsKCiAg ICAgICAgfSB3aGlsZShfZXNxbF9xdWVyeS5nZXRNb3JlUmVzdWx0cygpKTsKICAgICAgfSBlbHNl IHsKICAgICAgICBpbnQgX2VzcWxfdXBkYXRlX2NvdW50ID0gX2VzcWxfcXVlcnkuZ2V0U3RhdGVt ZW50KCkuZ2V0VXBkYXRlQ291bnQoKTsKICAgICAgICBpZiAoX2VzcWxfdXBkYXRlX2NvdW50ICZn dDs9IDApIHsKICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iZXNxbDp1cGRh dGUtcmVzdWx0cy8qIi8+CiAgICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICA8eHNsOmFw cGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImVzcWw6bm8tcmVzdWx0cyIvPgogICAgICAgIH0KICAgICAg fQogICAgICBfZXNxbF9xdWVyeS5nZXRTdGF0ZW1lbnQoKS5jbG9zZSgpOwogICAgfSBjYXRjaCAo U1FMRXhjZXB0aW9uIF9lc3FsX2V4Y2VwdGlvbl88eHNsOnZhbHVlLW9mIHNlbGVjdD0iZ2VuZXJh dGUtaWQoLikiLz4pIHsKICAgICAgdHJ5IHsKICAgICAgICA8eHNsOmNob29zZT4KICAgICAgICAg IDx4c2w6d2hlbiB0ZXN0PSJlc3FsOmVycm9yLXJlc3VsdHMiPgogICAgICAgICAgICBfZXNxbF9l eGNlcHRpb24gPSBfZXNxbF9leGNlcHRpb25fPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImdlbmVyYXRl LWlkKC4pIi8+OwogICAgICAgICAgICBfZXNxbF9leGNlcHRpb25fd3JpdGVyID0gbmV3IFN0cmlu Z1dyaXRlcigpOwogICAgICAgICAgICBfZXNxbF9leGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKG5l dyBQcmludFdyaXRlcihfZXNxbF9leGNlcHRpb25fd3JpdGVyKSk7CiAgICAgICAgICAgIDx4c2w6 YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iZXNxbDplcnJvci1yZXN1bHRzIi8+CiAgICAgICAgICAg IGlmICghX2VzcWxfY29ubmVjdGlvbi5nZXRBdXRvQ29tbWl0KCkpIHsKICAgICAgICAgICAgICBf ZXNxbF9jb25uZWN0aW9uLnJvbGxiYWNrKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIDwveHNs OndoZW4+CiAgICAgICAgICA8eHNsOm90aGVyd2lzZT4KICAgICAgICAgICAgaWYgKCFfZXNxbF9j b25uZWN0aW9uLmdldEF1dG9Db21taXQoKSkgewogICAgICAgICAgICAgIF9lc3FsX2Nvbm5lY3Rp b24ucm9sbGJhY2soKTsKICAgICAgICAgICAgfQogICAgICAgICAgPC94c2w6b3RoZXJ3aXNlPgog ICAgICAgIDwveHNsOmNob29zZT4KICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIF9lc3FsX2V4Y2Vw dGlvbl88eHNsOnZhbHVlLW9mIHNlbGVjdD0iZ2VuZXJhdGUtaWQoLikiLz5fMikge30KICAgIH0K ICAgIGlmIChfZXNxbF9xdWVyaWVzLmVtcHR5KCkpIHsKICAgICAgX2VzcWxfcXVlcnkgPSBudWxs OwogICAgfSBlbHNlIHsKICAgICAgX2VzcWxfcXVlcnkgPSAoRXNxbFF1ZXJ5KV9lc3FsX3F1ZXJp ZXMucG9wKCk7CiAgICB9CiAgPC94c3A6bG9naWM+CjwveHNsOnRlbXBsYXRlPgoKPHhzbDp0ZW1w bGF0ZSBtYXRjaD0iZXNxbDpxdWVyeS8vZXNxbDpwYXJhbWV0ZXIiPiI/IjwveHNsOnRlbXBsYXRl PgoKPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZXNxbDpleGVjdXRlLXF1ZXJ5Ly9lc3FsOnJlc3VsdHMv L2VzcWw6cm93LWNvdW50Ij4KICA8eHNwOmV4cHI+X2VzcWxfcXVlcnkucm93Q291bnQoKTwveHNw OmV4cHI+CjwveHNsOnRlbXBsYXRlPgoKPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZXNxbDpleGVjdXRl LXF1ZXJ5Ly9lc3FsOnJlc3VsdHMiPgogIDx4c3A6Y29udGVudD4KICAgIDx4c2w6YXBwbHktdGVt cGxhdGVzLz4KICA8L3hzcDpjb250ZW50Pgo8L3hzbDp0ZW1wbGF0ZT4KCjx4c2w6dGVtcGxhdGUg bWF0Y2g9ImVzcWw6ZXhlY3V0ZS1xdWVyeS8vZXNxbDplcnJvci1yZXN1bHRzIj4KICA8eHNwOmNv bnRlbnQ+CiAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcy8+CiAgPC94c3A6Y29udGVudD4KPC94c2w6 dGVtcGxhdGU+Cgo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlc3FsOmV4ZWN1dGUtcXVlcnkvL2VzcWw6 bm8tcmVzdWx0cyI+CiAgPHhzcDpjb250ZW50PgogICAgPHhzbDphcHBseS10ZW1wbGF0ZXMvPgog IDwveHNwOmNvbnRlbnQ+CjwveHNsOnRlbXBsYXRlPgoKPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZXNx bDp1cGRhdGUtcmVzdWx0cy8vZXNxbDpnZXQtdXBkYXRlLWNvdW50Ij4KICA8eHNwOmV4cHI+X2Vz cWxfdXBkYXRlX2NvdW50PC94c3A6ZXhwcj4KPC94c2w6dGVtcGxhdGU+Cgo8eHNsOnRlbXBsYXRl IG1hdGNoPSJlc3FsOnJlc3VsdHMvL2VzcWw6cm93LXJlc3VsdHMiPgogIDx4c2w6dmFyaWFibGUg bmFtZT0iZ3JvdXAiIHNlbGVjdD0iLi8vZXNxbDpncm91cCIvPgogIDx4c3A6bG9naWM+CgogICAg Ly9jcmVhdGUgYm9vbGVhbnMgZm9yIGdyb3VwIGNoYW5nZSB3YXRjaGVzIGFuZCBzdHJpbmdzIGZv ciBvbGQgdmFsdWVzLgogICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuLy9lc3FsOmdy b3VwIiBtb2RlPSJ2YXJzIi8+CgogICAgZG8gewogICAgICA8eHNwOmNvbnRlbnQ+CiAgICAgIDx4 c2w6YXBwbHktdGVtcGxhdGVzLz4KICAgICAgPC94c3A6Y29udGVudD4KICAgICAgPHhzbDppZiB0 ZXN0PSJjb3VudCgkZ3JvdXApICZsdDsgMSI+CQogICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBu YW1lPSJuZXh0Um93Ii8+CiAgICAgIDwveHNsOmlmPgogICAgfSB3aGlsZSAoIF9lc3FsX3F1ZXJ5 LmtlZXBHb2luZygpICk7CgogICAgaWYgKF9lc3FsX3F1ZXJ5LmdldFNraXBSb3dzKCkgPiAwICkg ewogICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iYW5jZXN0b3I6OmVzcWw6cmVz dWx0cy8vZXNxbDpwcmV2aW91cy1yZXN1bHRzIiBtb2RlPSJtb3JlIi8+CiAgICB9CgogICAgaWYg KF9lc3FsX3F1ZXJ5Lm5leHRSb3coKSkgewogICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNl bGVjdD0iYW5jZXN0b3I6OmVzcWw6cmVzdWx0cy8vZXNxbDptb3JlLXJlc3VsdHMiIG1vZGU9Im1v cmUiLz4KICAgIH0KICA8L3hzcDpsb2dpYz4KPC94c2w6dGVtcGxhdGU+Cgo8eHNsOnRlbXBsYXRl IG5hbWU9Im5leHRSb3ciPgogIC8vY2hlY2tpbmcgb3V0IGVhcmx5PwogICAgaWYgKF9lc3FsX3F1 ZXJ5LmdldE1heFJvd3MoKSAhPSAtMSAmYW1wOyZhbXA7IF9lc3FsX3F1ZXJ5LmdldEN1cnJlbnRS b3coKSAtIF9lc3FsX3F1ZXJ5LmdldFNraXBSb3dzKCkgPT0gX2VzcWxfcXVlcnkuZ2V0TWF4Um93 cygpKSB7CiAgICAgIF9lc3FsX3F1ZXJ5LnNldEtlZXBHb2luZyggZmFsc2UgKTsKICAgIH0gZWxz ZSB7CS8vaWYgbm90LCBhZHZhbmNlIG5vcm1hbGx5CiAgICAgIF9lc3FsX3F1ZXJ5LnNldEtlZXBH b2luZyggX2VzcWxfcXVlcnkubmV4dFJvdygpICk7CiAgICB9CjwveHNsOnRlbXBsYXRlPgoKPHhz bDp0ZW1wbGF0ZSBtYXRjaD0iZXNxbDpyZXN1bHRzLy9lc3FsOnByZXZpb3VzLXJlc3VsdHMiLz4K Cjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVzcWw6cmVzdWx0cy8vZXNxbDpwcmV2aW91cy1yZXN1bHRz IiBtb2RlPSJtb3JlIj4KICA8eHNwOmNvbnRlbnQ+CiAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcy8+ CiAgPC94c3A6Y29udGVudD4KPC94c2w6dGVtcGxhdGU+Cgo8eHNsOnRlbXBsYXRlIG1hdGNoPSJl c3FsOmdyb3VwIiBtb2RlPSJ2YXJzIj4KICBfZXNxbF9xdWVyeS5zZXRHcm91cGluZ1ZhcigiPHhz bDp2YWx1ZS1vZiBzZWxlY3Q9IkBncm91cC1vbiIvPkNoYW5nZWQiLCBuZXcgQm9vbGVhbih0cnVl KSk7CjwveHNsOnRlbXBsYXRlPgoKPHhzcGRvYzpkZXNjPkFsbG93cyBoZWFkZXIgYW5kIGZvb3Rl ciBlbGVtZW50cyBhcm91bmQgZ3JvdXBzIG9mIGNvbnNlY3V0aXZlIHJlY29yZHMgd2l0aCBpZGVu dGljYWwgdmFsdWVzIGluIGNvbHVtbiBuYW1lZCBieSBAZ3JvdXAtb24uICBGYWNpbGl0YXRlcyBh IHNpbmdsZSBxdWVyeSB3aXRoIGpvaW5zIHRvIGJlIHVzZWQgaW4gbGlldSBvZiBzb21lIG5lc3Rl ZCBxdWVyaWVzLjwveHNwZG9jOmRlc2M+Cjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVzcWw6Z3JvdXB8 ZXNxbDpncm91cC8vZXNxbDpncm91cFsuLy9lc3FsOm1lbWJlcl0iIHByaW9yaXR5PSIzIj4KPHhz cDpsb2dpYz4KICBpZiAoKChCb29sZWFuKV9lc3FsX3F1ZXJ5LmdldEdyb3VwaW5nVmFyKCI8eHNs OnZhbHVlLW9mIHNlbGVjdD0iQGdyb3VwLW9uIi8+Q2hhbmdlZCIpKS5ib29sZWFuVmFsdWUoKSl7 CQogICAgLy9oZWFkZXIgY29udGVudHMKICAgIDx4c3A6Y29udGVudD4KICAgICAgPHhzbDphcHBs eS10ZW1wbGF0ZXM+CiAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Imdyb3VwLW9uIiBzZWxl Y3Q9IkBncm91cC1vbiIvPgogICAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+CiAgICA8L3hzcDpj b250ZW50PgogIH0KPC94c3A6bG9naWM+CjwveHNsOnRlbXBsYXRlPgoKPHhzbDp0ZW1wbGF0ZSBt YXRjaD0iZXNxbDpncm91cC8vbm9kZSgpWy4vL2VzcWw6bWVtYmVyXSI+CiAgPHhzbDpwYXJhbSBu YW1lPSJncm91cC1vbiIvPgogIDx4c2w6Y29weT4KICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNl bGVjdD0iQCp8Knx0ZXh0KCkiPgogICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iZ3JvdXAtb24i IHNlbGVjdD0iJGdyb3VwLW9uIi8+CiAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+CiAgPC94c2w6 Y29weT4KPC94c2w6dGVtcGxhdGU+Cgo8eHNwZG9jOmRlc2M+VXNlZCBpbiBjb25qdW5jdGlvbiB3 aXRoIGFuZCBuZXN0ZWQgaW5zaWRlIGVzcWw6Z3JvdXAuICBGb3JtYXR0aW5nIGZvciBpbmRpdmlk dWFsIHJlY29yZHMgZ29lcyB3aXRoaW4gZXNxbDptZW1iZXIuIEhlYWRlciBhbmQgZm9vdGVyIHN0 dWZmIGdvZXMgaW4gYmV0d2VlbiBncm91cCBhbmQgbWVtYmVyLjwveHNwZG9jOmRlc2M+Cjx4c2w6 dGVtcGxhdGUgbWF0Y2g9ImVzcWw6bWVtYmVyfGVzcWw6Z3JvdXAvL2VzcWw6bWVtYmVyWy4vL2Vz cWw6bWVtYmVyXSI+CiAgPHhzbDpwYXJhbSBuYW1lPSJncm91cC1vbiIvPgogIDx4c2w6dmFyaWFi bGUgbmFtZT0iZ3JvdXAiIHNlbGVjdD0iLi8vZXNxbDpncm91cCIvPgogIDx4c3A6bG9naWM+CiAg fQogICAgX2VzcWxfcXVlcnkuc2V0R3JvdXBpbmdWYXIoIjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIk Z3JvdXAtb24iLz5PbGQiLCBfZXNxbF9xdWVyeS5nZXRSZXN1bHRTZXQoKS5nZXRTdHJpbmcoIjx4 c2w6dmFsdWUtb2Ygc2VsZWN0PSIkZ3JvdXAtb24iLz4iKSk7CQogICAgPHhzcDpjb250ZW50Pgog ICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcz4KICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0i Z3JvdXAtb24iIHNlbGVjdD0iJGdyb3VwLW9uIi8+CiAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRl cz4KICAgIDwveHNwOmNvbnRlbnQ+CgogICAgPHhzbDppZiB0ZXN0PSJjb3VudCgkZ3JvdXApICZs dDsgMSI+CQogICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ibmV4dFJvdyIvPgogICAgPC94 c2w6aWY+CiAgaWYgKCBfZXNxbF9xdWVyeS5rZWVwR29pbmcoKSApIHsKICAgIF9lc3FsX3F1ZXJ5 LnNldEdyb3VwaW5nVmFyKCI8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGdyb3VwLW9uIi8+Q2hhbmdl ZCIsIG5ldyBCb29sZWFuKCEoKFN0cmluZylfZXNxbF9xdWVyeS5nZXRHcm91cGluZ1ZhcigiPHhz bDp2YWx1ZS1vZiBzZWxlY3Q9IiRncm91cC1vbiIvPk9sZCIpKS5lcXVhbHMoX2VzcWxfcXVlcnku Z2V0UmVzdWx0U2V0KCkuZ2V0U3RyaW5nKCI8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGdyb3VwLW9u Ii8+IikpKSk7CiAgfSBlbHNlIHsKICAgIF9lc3FsX3F1ZXJ5LnNldEdyb3VwaW5nVmFyKCI8eHNs OnZhbHVlLW9mIHNlbGVjdD0iJGdyb3VwLW9uIi8+Q2hhbmdlZCIsIG5ldyBCb29sZWFuKHRydWUp KTsKICB9CiAgaWYgKCgoQm9vbGVhbilfZXNxbF9xdWVyeS5nZXRHcm91cGluZ1ZhcigiPHhzbDp2 YWx1ZS1vZiBzZWxlY3Q9IiRncm91cC1vbiIvPkNoYW5nZWQiKSkuYm9vbGVhblZhbHVlKCkpIHsJ CiAgICAvL2Zvb3RlciBjb250ZW50cwogIDwveHNwOmxvZ2ljPgo8L3hzbDp0ZW1wbGF0ZT4KCjx4 c2w6dGVtcGxhdGUgbWF0Y2g9ImVzcWw6cmVzdWx0cy8vZXNxbDptb3JlLXJlc3VsdHMiLz4KCjx4 c2w6dGVtcGxhdGUgbWF0Y2g9ImVzcWw6cmVzdWx0cy8vZXNxbDptb3JlLXJlc3VsdHMiIG1vZGU9 Im1vcmUiPgogIDx4c3A6Y29udGVudD4KICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzLz4KICA8L3hz cDpjb250ZW50Pgo8L3hzbDp0ZW1wbGF0ZT4KCjx4c3Bkb2M6ZGVzYz5yZXN1bHRzIGluIGEgc2V0 IG9mIGVsZW1lbnRzIHdob3NlIG5hbWVzIGFyZSB0aGUgbmFtZXMgb2YgdGhlIGNvbHVtbnMuIHRo ZSBlbGVtZW50cyBlYWNoIGhhdmUgb25lIHRleHQgY2hpbGQsIHdob3NlIHZhbHVlIGlzIHRoZSB2 YWx1ZSBvZiB0aGUgY29sdW1uIGludGVycHJldGVkIGFzIGEgc3RyaW5nLiBObyBzcGVjaWFsIGZv cm1hdHRpbmcgaXMgYWxsb3dlZCBoZXJlLiBJZiB5b3Ugd2FudCB0byBtZXNzIGFyb3VuZCB3aXRo IHRoZSBuYW1lcyBvZiB0aGUgZWxlbWVudHMgb3IgdGhlIHZhbHVlIG9mIHRoZSB0ZXh0IGZpZWxk LCB1c2UgdGhlIHR5cGUtc3BlY2lmaWMgZ2V0IG1ldGhvZHMgYW5kIHdyaXRlIG91dCB0aGUgcmVz dWx0IGZyYWdtZW50IHlvdXJzZWxmLjwveHNwZG9jOmRlc2M+Cjx4c2w6dGVtcGxhdGUgbWF0Y2g9 ImVzcWw6cm93LXJlc3VsdHMvL2VzcWw6Z2V0LWNvbHVtbnMiPgogIDx4c2w6dmFyaWFibGUgbmFt ZT0idGFnY2FzZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkB0YWctY2FzZSIvPjwveHNsOnZhcmlh YmxlPgogIDx4c2w6Y2hvb3NlPgogICAgPHhzbDp3aGVuIHRlc3Q9IiRlbnZpcm9ubWVudCA9ICdD b2Nvb24xJyI+CiAgICAgIDx4c3A6bG9naWM+CiAgICAgICAgZm9yIChpbnQgX2VzcWxfaT0xOyBf ZXNxbF9pICZsdDs9IF9lc3FsX3F1ZXJ5LmdldFJlc3VsdFNldE1ldGFEYXRhKCkuZ2V0Q29sdW1u Q291bnQoKTsgX2VzcWxfaSsrKSB7CiAgICAgICAgICBOb2RlIF9lc3FsX25vZGUgPSBkb2N1bWVu dC5jcmVhdGVFbGVtZW50KAogICAgICAgICAgICA8eHNsOmNob29zZT4KICAgICAgICAgICAgICA8 eHNsOndoZW4gdGVzdD0iJHRhZ2Nhc2U9J2xvd2VyJyI+CiAgICAgICAgICAgICAgICBfZXNxbF9x dWVyeS5nZXRSZXN1bHRTZXRNZXRhRGF0YSgpLmdldENvbHVtbk5hbWUoX2VzcWxfaSkudG9Mb3dl ckNhc2UoKQogICAgICAgICAgICAgIDwveHNsOndoZW4+CiAgICAgICAgICAgICAgPHhzbDp3aGVu IHRlc3Q9IiR0YWdjYXNlPSd1cHBlciciPgogICAgICAgICAgICAgICAgX2VzcWxfcXVlcnkuZ2V0 UmVzdWx0U2V0TWV0YURhdGEoKS5nZXRDb2x1bW5OYW1lKF9lc3FsX2kpLnRvVXBwZXJDYXNlKCkK ICAgICAgICAgICAgICA8L3hzbDp3aGVuPgogICAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPgog ICAgICAgICAgICAgICAgX2VzcWxfcXVlcnkuZ2V0UmVzdWx0U2V0TWV0YURhdGEoKS5nZXRDb2x1 bW5OYW1lKF9lc3FsX2kpCiAgICAgICAgICAgICAgPC94c2w6b3RoZXJ3aXNlPgogICAgICAgICAg ICA8L3hzbDpjaG9vc2U+CiAgICAgICAgICApOwogICAgICAgICAgX2VzcWxfbm9kZS5hcHBlbmRD aGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgKICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBs YXRlIG5hbWU9ImdldC1zdHJpbmctZW5jb2RlZCI+CiAgICAgICAgICAgICAgPHhzbDp3aXRoLXBh cmFtIG5hbWU9ImNvbHVtbi1zcGVjIj5fZXNxbF9pPC94c2w6d2l0aC1wYXJhbT4KICAgICAgICAg ICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icmVzdWx0c2V0Ij5fZXNxbF9xdWVyeS5nZXRSZXN1 bHRTZXQoKTwveHNsOndpdGgtcGFyYW0+CiAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+ CiAgICAgICAgICApKTsKICAgICAgICAgIHhzcEN1cnJlbnROb2RlLmFwcGVuZENoaWxkKF9lc3Fs X25vZGUpOwogICAgICAgIH0KICAgICAgPC94c3A6bG9naWM+CiAgICA8L3hzbDp3aGVuPgogICAg PHhzbDp3aGVuIHRlc3Q9IiRlbnZpcm9ubWVudCA9ICdDb2Nvb24yJyI+CiAgICAgIDx4c3A6bG9n aWM+CiAgICAgICAgZm9yIChpbnQgX2VzcWxfaSA9IDE7IF9lc3FsX2kgJmx0Oz0gX2VzcWxfcXVl cnkuZ2V0UmVzdWx0U2V0TWV0YURhdGEoKS5nZXRDb2x1bW5Db3VudCgpOyBfZXNxbF9pKyspIHsK ICAgICAgICAgIFN0cmluZyBfZXNxbF90YWduYW1lID0gX2VzcWxfcXVlcnkuZ2V0UmVzdWx0U2V0 TWV0YURhdGEoKS5nZXRDb2x1bW5OYW1lKF9lc3FsX2kpOwogICAgICAgICAgPHhzcDplbGVtZW50 PgogICAgICAgICAgICA8eHNwOnBhcmFtIG5hbWU9Im5hbWUiPgogICAgICAgICAgICAgIDx4c2w6 Y2hvb3NlPgogICAgICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiR0YWdjYXNlPSdsb3dlcici PgogICAgICAgICAgICAgICAgICA8eHNwOmV4cHI+X2VzcWxfdGFnbmFtZS50b0xvd2VyQ2FzZSgp PC94c3A6ZXhwcj4KICAgICAgICAgICAgICAgIDwveHNsOndoZW4+CiAgICAgICAgICAgICAgICA8 eHNsOndoZW4gdGVzdD0iJHRhZ2Nhc2U9J3VwcGVyJyI+CiAgICAgICAgICAgICAgICAgIDx4c3A6 ZXhwcj5fZXNxbF90YWduYW1lLnRvVXBwZXJDYXNlKCk8L3hzcDpleHByPgogICAgICAgICAgICAg ICAgPC94c2w6d2hlbj4KICAgICAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPgogICAgICAgICAg ICAgICAgICA8eHNwOmV4cHI+X2VzcWxfdGFnbmFtZTwveHNwOmV4cHI+CiAgICAgICAgICAgICAg ICA8L3hzbDpvdGhlcndpc2U+CiAgICAgICAgICAgICAgPC94c2w6Y2hvb3NlPgogICAgICAgICAg ICA8L3hzcDpwYXJhbT4KICAgICAgICAgICAgPHhzcDpsb2dpYz4KICAgICAgICAgICAgICBzd2l0 Y2goX2VzcWxfcXVlcnkuZ2V0UmVzdWx0U2V0KCkuZ2V0TWV0YURhdGEoKS5nZXRDb2x1bW5UeXBl KF9lc3FsX2kpKXsKICAgICAgICAgICAgICAgICBjYXNlIGphdmEuc3FsLlR5cGVzLkFSUkFZOgog ICAgICAgICAgICAgICAgIGNhc2UgamF2YS5zcWwuVHlwZXMuU1RSVUNUOgogICAgICAgICAgICAg ICAgICAgIDx4c3A6ZWxlbWVudCBuYW1lPSJzcWwtcm93Ij4KICAgICAgICAgICAgICAgICAgICAg IDx4c3A6bG9naWM+CiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdFtdIF9lc3FsX3N0cnVj dCA9ICgoU3RydWN0KSBfZXNxbF9xdWVyeS5nZXRSZXN1bHRTZXQoKS5nZXRPYmplY3QoX2VzcWxf aSkpLmdldEF0dHJpYnV0ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaW50IF9l c3FsX2s9MDsgX2VzcWxfayZsdDtfZXNxbF9zdHJ1Y3QubGVuZ3RoOyBfZXNxbF9rKyspewogICAg ICAgICAgICAgICAgICAgICAgICA8eHNwOmVsZW1lbnQgbmFtZT0ic3FsLXJvdy1pdGVtIj48eHNw OmxvZ2ljPnRoaXMuX2VzcWxfcHJpbnRPYmplY3QoX2VzcWxfc3RydWN0W19lc3FsX2tdLHhzcEF0 dHIpOzwveHNwOmxvZ2ljPjwveHNwOmVsZW1lbnQ+CiAgICAgICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgICAgICAgIDwveHNwOmxvZ2ljPgogICAgICAgICAgICAgICAgICAgIDwv eHNwOmVsZW1lbnQ+CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAg IGNhc2UgamF2YS5zcWwuVHlwZXMuT1RIRVI6IC8vIFRoaXMgaXMgd2hhdCBJbmZvcm1peCB1c2Vz IGZvciBTZXRzLCBCYWdzLCBMaXN0cwogICAgICAgICAgICAgICAgICAgIHRoaXMuX2VzcWxfcHJp bnRPYmplY3QoX2VzcWxfcXVlcnkuZ2V0UmVzdWx0U2V0KCkuZ2V0T2JqZWN0KF9lc3FsX2kpLCB4 c3BBdHRyKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgZGVm YXVsdDoKICAgICAgICAgICAgICAgICAgICAvLyBzdGFuZGFyZCB0eXBlCiAgICAgICAgICAgICAg ICAgICAgPHhzcDpjb250ZW50PgogICAgICAgICAgICAgICAgICAgIDx4c3A6ZXhwcj4KICAgICAg ICAgICAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJnZXQtc3RyaW5nLWVuY29k ZWQiPgogICAgICAgICAgICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iY29sdW1u LXNwZWMiPl9lc3FsX2k8L3hzbDp3aXRoLXBhcmFtPgogICAgICAgICAgICAgICAgICAgICAgICA8 eHNsOndpdGgtcGFyYW0gbmFtZT0icmVzdWx0c2V0Ij5fZXNxbF9xdWVyeS5nZXRSZXN1bHRTZXQo KTwveHNsOndpdGgtcGFyYW0+CiAgICAgICAgICAgICAgICAgICAgICA8L3hzbDpjYWxsLXRlbXBs YXRlPgogICAgICAgICAgICAgICAgICAgIDwveHNwOmV4cHI+PC94c3A6Y29udGVudD4KICAgICAg ICAgICAgICB9CiAgICAgICAgICAgIDwveHNwOmxvZ2ljPgogICAgICAgICAgPC94c3A6ZWxlbWVu dD4KICAgICAgICB9CiAgICAgICAgdGhpcy5jaGFyYWN0ZXJzKCJcbiIpOwogICAgICA8L3hzcDps b2dpYz4KICAgIDwveHNsOndoZW4+CiAgICA8eHNsOm90aGVyd2lzZT4KICAgICAgPHhzcDpsb2dp Yz4KICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiZXNxbDpnZXQtY29sdW1ucyBp cyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgZW52aXJvbm1lbnQ6ICIrPHhzbDp2YWx1ZS1vZiBzZWxl Y3Q9IiRlbnZpcm9ubWVudCIvPik7CiAgICAgIDwveHNwOmxvZ2ljPgogICAgPC94c2w6b3RoZXJ3 aXNlPgogIDwveHNsOmNob29zZT4KPC94c2w6dGVtcGxhdGU+Cgo8eHNwZG9jOmRlc2M+cmV0dXJu cyB0aGUgdmFsdWUgb2YgdGhlIGdpdmVuIGNvbHVtbiBhcyBhIHN0cmluZzwveHNwZG9jOmRlc2M+ Cjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVzcWw6cm93LXJlc3VsdHMvL2VzcWw6Z2V0LXN0cmluZyIg bmFtZT0iZ2V0LXN0cmluZyI+CiAgPHhzcDpleHByPgogICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5h bWU9ImdldC1zdHJpbmctZW5jb2RlZCI+CiAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJjb2x1 bW4tc3BlYyI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImdldC1jb2x1bW4iLz48L3hzbDp3aXRo LXBhcmFtPgogICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icmVzdWx0c2V0Ij48eHNsOmNhbGwt dGVtcGxhdGUgbmFtZT0iZ2V0LXJlc3VsdHNldCIvPjwveHNsOndpdGgtcGFyYW0+CiAgICA8L3hz bDpjYWxsLXRlbXBsYXRlPgogIDwveHNwOmV4cHI+CjwveHNsOnRlbXBsYXRlPgoKPHhzcGRvYzpk ZXNjPnJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBnaXZlbiBjb2x1bW4gYXMgYSBkYXRlLiBpZiBh IGZvcm1hdCBhdHRyaWJ1dGUgZXhpc3RzLCBpdHMgdmFsdWUgaXMgdGFrZW4gdG8gYmUgYSBkYXRl IGZvcm1hdCBzdHJpbmcgYXMgZGVmaW5lZCBpbiBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdCwg YW5kIHRoZSByZXN1bHQgaXMgZm9ybWF0dGVkIGFjY29yZGluZ2x5LjwveHNwZG9jOmRlc2M+Cjx4 c2w6dGVtcGxhdGUgbWF0Y2g9ImVzcWw6cm93LXJlc3VsdHMvL2VzcWw6Z2V0LWRhdGUiPgogIDx4 c2w6Y2hvb3NlPgogICAgPHhzbDp3aGVuIHRlc3Q9IkBmb3JtYXQiPgogICAgICA8eHNwOmV4cHI+ PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImdldC1yZXN1bHRzZXQiLz4uZ2V0RGF0ZSg8eHNsOmNh bGwtdGVtcGxhdGUgbmFtZT0iZ2V0LWNvbHVtbiIvPikgPT0gbnVsbCA/ICIiIDogbmV3IFNpbXBs ZURhdGVGb3JtYXQoIjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAZm9ybWF0Ii8+IikuZm9ybWF0KDx4 c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJnZXQtcmVzdWx0c2V0Ii8+LmdldERhdGUoPHhzbDpjYWxs LXRlbXBsYXRlIG5hbWU9ImdldC1jb2x1bW4iLz4pKTwveHNwOmV4cHI+CiAgICA8L3hzbDp3aGVu PgogICAgPHhzbDpvdGhlcndpc2U+CiAgICAgIDx4c3A6ZXhwcj48eHNsOmNhbGwtdGVtcGxhdGUg bmFtZT0iZ2V0LXJlc3VsdHNldCIvPi5nZXREYXRlKDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJn ZXQtY29sdW1uIi8+KTwveHNwOmV4cHI+CiAgICA8L3hzbDpvdGhlcndpc2U+CiAgPC94c2w6Y2hv b3NlPgo8L3hzbDp0ZW1wbGF0ZT4KCjx4c3Bkb2M6ZGVzYz5yZXR1cm5zIHRoZSB2YWx1ZSBvZiB0 aGUgZ2l2ZW4gY29sdW1uIGFzIGEgdGltZS4gaWYgYSBmb3JtYXQgYXR0cmlidXRlIGV4aXN0cywg aXRzIHZhbHVlIGlzIHRha2VuIHRvIGJlIGEgZGF0ZSBmb3JtYXQgc3RyaW5nIGFzIGRlZmluZWQg aW4gamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXQsIGFuZCB0aGUgcmVzdWx0IGlzIGZvcm1hdHRl ZCBhY2NvcmRpbmdseS48L3hzcGRvYzpkZXNjPgo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlc3FsOnJv dy1yZXN1bHRzLy9lc3FsOmdldC10aW1lIj4KICA8eHNsOmNob29zZT4KICAgIDx4c2w6d2hlbiB0 ZXN0PSJAZm9ybWF0Ij4KICAgICAgPHhzcDpleHByPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJn ZXQtcmVzdWx0c2V0Ii8+LmdldFRpbWUoPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImdldC1jb2x1 bW4iLz4pID09IG51bGwgPyAiIiA6IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCI8eHNsOnZhbHVlLW9m IHNlbGVjdD0iQGZvcm1hdCIvPiIpLmZvcm1hdCg8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZ2V0 LXJlc3VsdHNldCIvPi5nZXRUaW1lKDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJnZXQtY29sdW1u Ii8+KSk8L3hzcDpleHByPgogICAgPC94c2w6d2hlbj4KICAgIDx4c2w6b3RoZXJ3aXNlPgogICAg ICA8eHNwOmV4cHI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImdldC1yZXN1bHRzZXQiLz4uZ2V0 VGltZSg8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZ2V0LWNvbHVtbiIvPik8L3hzcDpleHByPgog ICAgPC94c2w6b3RoZXJ3aXNlPgogIDwveHNsOmNob29zZT4KPC94c2w6dGVtcGxhdGU+Cgo8eHNw ZG9jOmRlc2M+cmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGdpdmVuIGNvbHVtbiBhcyBhIHRpbWVz dGFtcC4gaWYgYSBmb3JtYXQgYXR0cmlidXRlIGV4aXN0cywgaXRzIHZhbHVlIGlzIHRha2VuIHRv IGJlIGEgZGF0ZSBmb3JtYXQgc3RyaW5nIGFzIGRlZmluZWQgaW4gamF2YS50ZXh0LlNpbXBsZURh dGVGb3JtYXQsIGFuZCB0aGUgcmVzdWx0IGlzIGZvcm1hdHRlZCBhY2NvcmRpbmdseS48L3hzcGRv YzpkZXNjPgo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlc3FsOnJvdy1yZXN1bHRzLy9lc3FsOmdldC10 aW1lc3RhbXAiPgogIDx4c2w6Y2hvb3NlPgogICAgPHhzbDp3aGVuIHRlc3Q9IkBmb3JtYXQiPgog ICAgICA8eHNwOmV4cHI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImdldC1yZXN1bHRzZXQiLz4u Z2V0VGltZXN0YW1wKDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJnZXQtY29sdW1uIi8+KSA9PSBu dWxsID8gIiIgOiBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgiPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBm b3JtYXQiLz4iKS5mb3JtYXQoPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImdldC1yZXN1bHRzZXQi Lz4uZ2V0VGltZXN0YW1wKDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJnZXQtY29sdW1uIi8+KSk8 L3hzcDpleHByPgogICAgPC94c2w6d2hlbj4KICAgIDx4c2w6b3RoZXJ3aXNlPgogICAgICA8eHNw OmV4cHI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImdldC1yZXN1bHRzZXQiLz4uZ2V0VGltZXN0 YW1wKDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJnZXQtY29sdW1uIi8+KTwveHNwOmV4cHI+CiAg ICA8L3hzbDpvdGhlcndpc2U+CiAgPC94c2w6Y2hvb3NlPgo8L3hzbDp0ZW1wbGF0ZT4KCjx4c3Bk b2M6ZGVzYz5yZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gY29sdW1uIGFzIHRydWUgb3Ig ZmFsc2U8L3hzcGRvYzpkZXNjPgo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlc3FsOnJvdy1yZXN1bHRz Ly9lc3FsOmdldC1ib29sZWFuIj4KICA8eHNwOmV4cHI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9 ImdldC1yZXN1bHRzZXQiLz4uZ2V0Qm9vbGVhbig8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZ2V0 LWNvbHVtbiIvPik8L3hzcDpleHByPgo8L3hzbDp0ZW1wbGF0ZT4KCjx4c3Bkb2M6ZGVzYz5yZXR1 cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gY29sdW1uIGFzIGEgZG91YmxlLiBpZiBhIGZvcm1h dCBhdHRyaWJ1dGUgZXhpc3RzLCBpdHMgdmFsdWUgaXMgdGFrZW4gdG8gYmUgYSBkZWNpbWFsIGZv cm1hdCBzdHJpbmcgYXMgZGVmaW5lZCBpbiBqYXZhLnRleHQuRGVjaW1hbEZvcm1hdCwgYW5kIHRo ZSByZXN1bHQgaXMgZm9ybWF0dGVkIGFjY29yZGluZ2x5LjwveHNwZG9jOmRlc2M+Cjx4c2w6dGVt cGxhdGUgbWF0Y2g9ImVzcWw6cm93LXJlc3VsdHMvL2VzcWw6Z2V0LWRvdWJsZSI+CiAgPHhzbDpj aG9vc2U+CiAgICA8eHNsOndoZW4gdGVzdD0iQGZvcm1hdCI+CiAgICAgIDx4c3A6ZXhwcj5uZXcg RGVjaW1hbEZvcm1hdCgiPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBmb3JtYXQiLz4iKS5mb3JtYXQo bmV3IERvdWJsZSg8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZ2V0LXJlc3VsdHNldCIvPi5nZXRE b3VibGUoPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImdldC1jb2x1bW4iLz4pKSk8L3hzcDpleHBy PgogICAgPC94c2w6d2hlbj4KICAgIDx4c2w6b3RoZXJ3aXNlPgogICAgICA8eHNwOmV4cHI+PHhz bDpjYWxsLXRlbXBsYXRlIG5hbWU9ImdldC1yZXN1bHRzZXQiLz4uZ2V0RG91YmxlKDx4c2w6Y2Fs bC10ZW1wbGF0ZSBuYW1lPSJnZXQtY29sdW1uIi8+KTwveHNwOmV4cHI+CiAgICA8L3hzbDpvdGhl cndpc2U+CiAgPC94c2w6Y2hvb3NlPgo8L3hzbDp0ZW1wbGF0ZT4KCjx4c3Bkb2M6ZGVzYz5yZXR1 cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gY29sdW1uIGFzIGEgZmxvYXQuIGlmIGEgZm9ybWF0 IGF0dHJpYnV0ZSBleGlzdHMsIGl0cyB2YWx1ZSBpcyB0YWtlbiB0byBiZSBhIGRlY2ltYWwgZm9y bWF0IHN0cmluZyBhcyBkZWZpbmVkIGluIGphdmEudGV4dC5EZWNpbWFsRm9ybWF0LCBhbmQgdGhl IHJlc3VsdCBpcyBmb3JtYXR0ZWQgYWNjb3JkaW5nbHkuPC94c3Bkb2M6ZGVzYz4KPHhzbDp0ZW1w bGF0ZSBtYXRjaD0iZXNxbDpyb3ctcmVzdWx0cy8vZXNxbDpnZXQtZmxvYXQiPgogIDx4c2w6Y2hv b3NlPgogICAgPHhzbDp3aGVuIHRlc3Q9IkBmb3JtYXQiPgogICAgICA8eHNwOmV4cHI+bmV3IERl Y2ltYWxGb3JtYXQoIjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAZm9ybWF0Ii8+IikuZm9ybWF0KG5l dyBGbG9hdCg8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZ2V0LXJlc3VsdHNldCIvPi5nZXRGbG9h dCg8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZ2V0LWNvbHVtbiIvPikpKTwveHNwOmV4cHI+CiAg ICA8L3hzbDp3aGVuPgogICAgPHhzbDpvdGhlcndpc2U+CiAgICAgIDx4c3A6ZXhwcj48eHNsOmNh bGwtdGVtcGxhdGUgbmFtZT0iZ2V0LXJlc3VsdHNldCIvPi5nZXRGbG9hdCg8eHNsOmNhbGwtdGVt cGxhdGUgbmFtZT0iZ2V0LWNvbHVtbiIvPik8L3hzcDpleHByPgogICAgPC94c2w6b3RoZXJ3aXNl PgogIDwveHNsOmNob29zZT4KPC94c2w6dGVtcGxhdGU+Cgo8eHNwZG9jOmRlc2M+cmV0dXJucyB0 aGUgY3VycmVudCByZXN1bHQgc2V0PC94c3Bkb2M6ZGVzYz4KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0i ZXNxbDpyZXN1bHRzLy9lc3FsOmdldC1yZXN1bHRzZXQiPgogIDx4c3A6ZXhwcj48eHNsOmNhbGwt dGVtcGxhdGUgbmFtZT0iZ2V0LXJlc3VsdHNldCIvPjwveHNwOmV4cHI+CjwveHNsOnRlbXBsYXRl PgoKPHhzcGRvYzpkZXNjPnJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBnaXZlbiBjb2x1bW4gYXMg YW4gb2JqZWN0PC94c3Bkb2M6ZGVzYz4KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZXNxbDpyb3ctcmVz dWx0cy8vZXNxbDpnZXQtb2JqZWN0Ij4KICA8eHNwOmV4cHI+PHhzbDpjYWxsLXRlbXBsYXRlIG5h bWU9ImdldC1yZXN1bHRzZXQiLz4uZ2V0T2JqZWN0KDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJn ZXQtY29sdW1uIi8+KTwveHNwOmV4cHI+CjwveHNsOnRlbXBsYXRlPgoKPHhzcGRvYzpkZXNjPnJl dHVybnMgdGhlIHZhbHVlIG9mIHRoZSBnaXZlbiBjb2x1bW4gYXMgYW4gYXJyYXk8L3hzcGRvYzpk ZXNjPgo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlc3FsOnJvdy1yZXN1bHRzLy9lc3FsOmdldC1hcnJh eSI+CiAgPHhzcDpleHByPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJnZXQtcmVzdWx0c2V0Ii8+ LmdldEFycmF5KDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJnZXQtY29sdW1uIi8+KTwveHNwOmV4 cHI+CjwveHNsOnRlbXBsYXRlPgoKPHhzcGRvYzpkZXNjPnJldHVybnMgdGhlIHZhbHVlIG9mIHRo ZSBnaXZlbiBjb2x1bW4gYXMgYSBzdHJ1Y3Q8L3hzcGRvYzpkZXNjPgo8eHNsOnRlbXBsYXRlIG1h dGNoPSJlc3FsOnJvdy1yZXN1bHRzLy9lc3FsOmdldC1zdHJ1Y3QiPgogIDx4c3A6ZXhwcj4oU3Ry dWN0KSA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZ2V0LXJlc3VsdHNldCIvPi5nZXRPYmplY3Qo PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImdldC1jb2x1bW4iLz4pPC94c3A6ZXhwcj4KPC94c2w6 dGVtcGxhdGU+Cgo8eHNwZG9jOmRlc2M+cmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGdpdmVuIGNv bHVtbiBhcyBhbiBpbnRlZ2VyPC94c3Bkb2M6ZGVzYz4KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZXNx bDpyb3ctcmVzdWx0cy8vZXNxbDpnZXQtaW50Ij4KICA8eHNwOmV4cHI+PHhzbDpjYWxsLXRlbXBs YXRlIG5hbWU9ImdldC1yZXN1bHRzZXQiLz4uZ2V0SW50KDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1l PSJnZXQtY29sdW1uIi8+KTwveHNwOmV4cHI+CjwveHNsOnRlbXBsYXRlPgoKPHhzcGRvYzpkZXNj PnJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBnaXZlbiBjb2x1bW4gYXMgYSBsb25nPC94c3Bkb2M6 ZGVzYz4KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZXNxbDpyb3ctcmVzdWx0cy8vZXNxbDpnZXQtbG9u ZyI+CiAgPHhzcDpleHByPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJnZXQtcmVzdWx0c2V0Ii8+ LmdldExvbmcoPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImdldC1jb2x1bW4iLz4pPC94c3A6ZXhw cj4KPC94c2w6dGVtcGxhdGU+Cgo8eHNwZG9jOmRlc2M+cmV0dXJucyB0aGUgdmFsdWUgb2YgdGhl IGdpdmVuIGNvbHVtbiBhcyBhIHNob3J0PC94c3Bkb2M6ZGVzYz4KPHhzbDp0ZW1wbGF0ZSBtYXRj aD0iZXNxbDpyb3ctcmVzdWx0cy8vZXNxbDpnZXQtc2hvcnQiPgogIDx4c3A6ZXhwcj48eHNsOmNh bGwtdGVtcGxhdGUgbmFtZT0iZ2V0LXJlc3VsdHNldCIvPi5nZXRTaG9ydCg8eHNsOmNhbGwtdGVt cGxhdGUgbmFtZT0iZ2V0LWNvbHVtbiIvPik8L3hzcDpleHByPgo8L3hzbDp0ZW1wbGF0ZT4KCjx4 c3Bkb2M6ZGVzYz5yZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gY29sdW1uIGFzIGEgY2xv YjwveHNwZG9jOmRlc2M+Cjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVzcWw6cm93LXJlc3VsdHMvL2Vz cWw6Z2V0LWFzY2lpIj4KCTx4c3A6ZXhwcj5Fc3FsSGVscGVyLmdldEFzY2lpKDx4c2w6Y2FsbC10 ZW1wbGF0ZSBuYW1lPSJnZXQtcmVzdWx0c2V0Ii8+LCA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0i Z2V0LWNvbHVtbiIvPik8L3hzcDpleHByPgo8L3hzbDp0ZW1wbGF0ZT4KCjwhLS0KVEIgLSBhZGRl ZAotLT4KPHhzcGRvYzpkZXNjPnJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBnaXZlbiBjb2x1bW4g YXMgc3RyaW5nIChjb2x1bW4gY2FuIGJlIHN0cmluZyBvciBjbG9iPC94c3Bkb2M6ZGVzYz4KPHhz bDp0ZW1wbGF0ZSBtYXRjaD0iZXNxbDpyb3ctcmVzdWx0cy8vZXNxbDpnZXQtY2xvYiIgbmFtZT0i Z2V0LWNsb2IiPgoJPHhzcDpleHByPnRoaXMuZ2V0U3RyaW5nT3JDbG9iKDx4c2w6Y2FsbC10ZW1w bGF0ZSBuYW1lPSJnZXQtcmVzdWx0c2V0Ii8+LCA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZ2V0 LWNvbHVtbiIvPik8L3hzcDpleHByPg0KPC94c2w6dGVtcGxhdGU+DQo8IS0tClRCIC0gZW5kCi0t PgoKIDx4c3Bkb2M6ZGVzYz5yZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gY29sdW1uIGlu dGVycGV0ZWQgYXMgYW4geG1sIGZyYWdtZW50LgogVGhlIGZyYWdtZW50IGlzIHBhcnNlZCBieSB0 aGUgZGVmYXVsdCB4c3AgcGFyc2VyIGFuZCB0aGUgZG9jdW1lbnQgZWxlbWVudCBpcyByZXR1cm5l ZC4KIElmIGEgcm9vdCBhdHRyaWJ1dGUgZXhpc3RzLCBpdHMgdmFsdWUgaXMgdGFrZW4gdG8gYmUg dGhlIG5hbWUgb2YgYW4gZWxlbWVudCB0byB3cmFwIGFyb3VuZCB0aGUgY29udGVudHMgb2YKIHRo ZSBmcmFnbWVudCBiZWZvcmUgcGFyc2luZy48L3hzcGRvYzpkZXNjPgo8eHNsOnRlbXBsYXRlIG1h dGNoPSJlc3FsOnJvdy1yZXN1bHRzLy9lc3FsOmdldC14bWwiPgogIDx4c2w6dmFyaWFibGUgbmFt ZT0iY29udGVudCI+CiAgICA8eHNsOmNob29zZT4KICAgICAgPHhzbDp3aGVuIHRlc3Q9IkByb290 Ij4KICAgICAgICA8eHNsOnRleHQ+IiZsdDs8L3hzbDp0ZXh0PgogICAgICAgIDx4c2w6dmFsdWUt b2Ygc2VsZWN0PSJAcm9vdCIvPgogICAgICAgIDx4c2w6dGV4dD4mZ3Q7Iis8L3hzbDp0ZXh0PgoJ CQkJPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImdldC1zdHJpbmciLz4KCQkJCTx4c2w6dGV4dD4r IiZsdDsvPC94c2w6dGV4dD4KCQkJCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAcm9vdCIvPgoJCQkJ PHhzbDp0ZXh0PiZndDsiPC94c2w6dGV4dD4KCQkJPC94c2w6d2hlbj4KCQkJPHhzbDpvdGhlcndp c2U+CgkJCQk8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZ2V0LXN0cmluZyIvPgoJCQk8L3hzbDpv dGhlcndpc2U+CgkJPC94c2w6Y2hvb3NlPgoJPC94c2w6dmFyaWFibGU+Cgk8eHNsOmNob29zZT4K CQk8eHNsOndoZW4gdGVzdD0iJGVudmlyb25tZW50ID0gJ0NvY29vbjEnIj4KCQkJPHhzbDpjaG9v c2U+CgkJCQk8eHNsOndoZW4gdGVzdD0iLi4vZXNxbDpyb3ctcmVzdWx0cyI+CgkJCQkJPHhzcDps b2dpYz4KCQkJCQkJeHNwQ3VycmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy54c3BQYXJzZXIucGFy c2UobmV3IElucHV0U291cmNlKG5ldyBTdHJpbmdSZWFkZXIoPHhzbDpjb3B5LW9mIHNlbGVjdD0i JGNvbnRlbnQiLz4pKSkuZ2V0RG9jdW1lbnRFbGVtZW50KCk7CgkJCQkJPC94c3A6bG9naWM+CiAg ICAgICAgPC94c2w6d2hlbj4KICAgICAgICA8eHNsOm90aGVyd2lzZT4KICAgICAgICAgIDx4c3A6 ZXhwcj50aGlzLnhzcFBhcnNlci5wYXJzZShuZXcgSW5wdXRTb3VyY2UobmV3IFN0cmluZ1JlYWRl cig8eHNsOmNvcHktb2Ygc2VsZWN0PSIkY29udGVudCIvPikpKS5nZXREb2N1bWVudEVsZW1lbnQo KTwveHNwOmV4cHI+CiAgICAgICAgPC94c2w6b3RoZXJ3aXNlPgogICAgICA8L3hzbDpjaG9vc2U+ CiAgICA8L3hzbDp3aGVuPgogICAgPHhzbDp3aGVuIHRlc3Q9IiRlbnZpcm9ubWVudCA9ICdDb2Nv b24yJyI+CiAgICAgIDx4c3A6bG9naWM+CiAgICAgIHsKICAgICAgICAgIG9yZy5hcGFjaGUuY29j b29uLmNvbXBvbmVudHMucGFyc2VyLlBhcnNlciBuZXdQYXJzZXIgPSBudWxsOwoKICAgICAgICAg IHRyeSB7CiAgICAgICAgICAgICAgbmV3UGFyc2VyID0gKG9yZy5hcGFjaGUuY29jb29uLmNvbXBv bmVudHMucGFyc2VyLlBhcnNlcikgdGhpcy5tYW5hZ2VyLmxvb2t1cChvcmcuYXBhY2hlLmNvY29v bi5jb21wb25lbnRzLnBhcnNlci5QYXJzZXIuUk9MRSk7CgogICAgICAgICAgICAgIElucHV0U291 cmNlIF9faXMgPSBuZXcgSW5wdXRTb3VyY2UoCiAgICAgICAgICAgICAgICAgICAgICBuZXcgU3Ry aW5nUmVhZGVyKAogICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZy52YWx1ZU9mKDx4c2w6 Y29weS1vZiBzZWxlY3Q9IiRjb250ZW50Ii8+KQogICAgICAgICAgICAgICAgICAgICAgKQogICAg ICAgICAgICAgICAgICApOwoKCiAgICAgICAgICAgICAgWFNQVXRpbC5pbmNsdWRlKF9faXMsIHRo aXMuY29udGVudEhhbmRsZXIsIG5ld1BhcnNlcik7CiAgICAgICAgICB9IGNhdGNoIChFeGNlcHRp b24gZSkgewogICAgICAgICAgICAgIGdldExvZ2dlcigpLmVycm9yKCJDb3VsZCBub3QgaW5jbHVk ZSBwYWdlIiwgZSk7CiAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgIGlmIChuZXdQ YXJzZXIgIT0gbnVsbCkgdGhpcy5tYW5hZ2VyLnJlbGVhc2UoKENvbXBvbmVudCkgbmV3UGFyc2Vy KTsKICAgICAgICAgIH0KICAgICAgfQogICAgICA8L3hzcDpsb2dpYz4KICAgIDwveHNsOndoZW4+ CiAgICA8eHNsOm90aGVyd2lzZT4KICAgICAgPHhzcDpsb2dpYz4KICAgICAgICB0aHJvdyBuZXcg UnVudGltZUV4Y2VwdGlvbigiZXNxbDpnZXQteG1sIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBl bnZpcm9ubWVudDogIis8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGVudmlyb25tZW50Ii8+KTsKICAg ICAgPC94c3A6bG9naWM+CiAgICA8L3hzbDpvdGhlcndpc2U+CiAgPC94c2w6Y2hvb3NlPgo8L3hz bDp0ZW1wbGF0ZT4KCjx4c3Bkb2M6ZGVzYz5yZXR1cm5zIHRoZSBudW1iZXIgb2YgY29sdW1ucyBp biB0aGUgcmVzdWx0c2V0LjwveHNwZG9jOmRlc2M+Cjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVzcWw6 cmVzdWx0cy8vZXNxbDpnZXQtY29sdW1uLWNvdW50Ij4KICA8eHNwOmV4cHI+PHhzbDpjYWxsLXRl bXBsYXRlIG5hbWU9ImdldC1yZXN1bHRzZXQiLz4uZ2V0TWV0YURhdGEoKS5nZXRDb2x1bW5Db3Vu dCgpPC94c3A6ZXhwcj4KPC94c2w6dGVtcGxhdGU+Cgo8eHNwZG9jOmRlc2M+cmV0dXJucyB0aGUg bWV0YWRhdGEgb2YgdGhlIHJlc3VsdHNldC48L3hzcGRvYzpkZXNjPgo8eHNsOnRlbXBsYXRlIG1h dGNoPSJlc3FsOnJlc3VsdHMvL2VzcWw6Z2V0LW1ldGFkYXRhIj4KICA8eHNwOmV4cHI+PHhzbDpj YWxsLXRlbXBsYXRlIG5hbWU9ImdldC1yZXN1bHRzZXQiLz4uZ2V0TWV0YURhdGEoKTwveHNwOmV4 cHI+CjwveHNsOnRlbXBsYXRlPgoKPHhzcGRvYzpkZXNjPnJldHVybnMgdGhlIHBvc2l0aW9uIG9m IHRoZSBjdXJyZW50IHJvdyBpbiB0aGUgcmVzdWx0IHNldDwveHNwZG9jOmRlc2M+Cjx4c2w6dGVt cGxhdGUgbWF0Y2g9ImVzcWw6cm93LXJlc3VsdHMvL2VzcWw6Z2V0LXJvdy1wb3NpdGlvbnxlc3Fs OnJlc3VsdHMvL2VzcWw6Z2V0LXJvdy1wb3NpdGlvbiI+CiAgPHhzcDpleHByPl9lc3FsX3F1ZXJ5 LmdldEN1cnJlbnRSb3coKTwveHNwOmV4cHI+CjwveHNsOnRlbXBsYXRlPgoKPHhzcGRvYzpkZXNj PnJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGdpdmVuIGNvbHVtbi4gdGhlIGNvbHVtbiBtdXMgdGJl IHNwZWNpZmllZCBieSBudW1iZXIsIG5vdCBuYW1lLjwveHNwZG9jOmRlc2M+Cjx4c2w6dGVtcGxh dGUgbWF0Y2g9ImVzcWw6cm93LXJlc3VsdHMvL2VzcWw6Z2V0LWNvbHVtbi1uYW1lIj4KICA8eHNw OmV4cHI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImdldC1yZXN1bHRzZXQiLz4uZ2V0TWV0YURh dGEoKS5nZXRDb2x1bW5OYW1lKDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJnZXQtY29sdW1uIi8+ KTwveHNwOmV4cHI+CjwveHNsOnRlbXBsYXRlPgoKPHhzcGRvYzpkZXNjPnJldHVybnMgdGhlIGxh YmVsIG9mIHRoZSBnaXZlbiBjb2x1bW4uIHRoZSBjb2x1bW4gbXVzIHRiZSBzcGVjaWZpZWQgYnkg bnVtYmVyLCBub3QgbmFtZS48L3hzcGRvYzpkZXNjPgo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlc3Fs OnJvdy1yZXN1bHRzLy9lc3FsOmdldC1jb2x1bW4tbGFiZWwiPgogIDx4c3A6ZXhwcj48eHNsOmNh bGwtdGVtcGxhdGUgbmFtZT0iZ2V0LXJlc3VsdHNldCIvPi5nZXRNZXRhRGF0YSgpLmdldENvbHVt bkxhYmVsKDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJnZXQtY29sdW1uIi8+KTwveHNwOmV4cHI+ CjwveHNsOnRlbXBsYXRlPgoKPHhzcGRvYzpkZXNjPnJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHR5 cGUgb2YgdGhlIGdpdmVuIGNvbHVtbi4gdGhlIGNvbHVtbiBtdXN0IGJlIHNwZWNpZmllZCBieSBu dW1iZXIsIG5vdCBuYW1lLjwveHNwZG9jOmRlc2M+Cjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVzcWw6 cm93LXJlc3VsdHMvL2VzcWw6Z2V0LWNvbHVtbi10eXBlLW5hbWUiPgogIDx4c3A6ZXhwcj48eHNs OmNhbGwtdGVtcGxhdGUgbmFtZT0iZ2V0LXJlc3VsdHNldCIvPi5nZXRNZXRhRGF0YSgpLmdldENv bHVtblR5cGVOYW1lKDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJnZXQtY29sdW1uIi8+KTwveHNw OmV4cHI+CjwveHNsOnRlbXBsYXRlPgoKPHhzcGRvYzpkZXNjPnJldHVybnMgdGhlIHR5cGUgb2Yg dGhlIGdpdmVuIGNvbHVtbiBhcyBpbnQuIHRoZSBjb2x1bW4gbXVzdCBiZSBzcGVjaWZpZWQgYnkg bnVtYmVyLCBub3QgbmFtZS48L3hzcGRvYzpkZXNjPgo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlc3Fs OnJvdy1yZXN1bHRzLy9lc3FsOmdldC1jb2x1bW4tdHlwZSI+CiAgPHhzcDpleHByPjx4c2w6Y2Fs bC10ZW1wbGF0ZSBuYW1lPSJnZXQtcmVzdWx0c2V0Ii8+LmdldE1ldGFEYXRhKCkuZ2V0Q29sdW1u VHlwZSg8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZ2V0LWNvbHVtbiIvPik8L3hzcDpleHByPgo8 L3hzbDp0ZW1wbGF0ZT4KCjx4c3Bkb2M6ZGVzYz5hbGxvd3MgbnVsbC1jb2x1bW4gdGVzdGluZy4g RXZhbHVhdGVzIHRvIGEgSmF2YSBleHByZXNzaW9uLCB3aGljaCBpcyB0cnVlIHdoZW4gdGhlIHJl ZmVycmVkIGNvbHVtbiBjb250YWlucyBhIG51bGwtdmFsdWUgZm9yIHRoZSBjdXJyZW50IHJlc3Vs dHNldCByb3c8L3hzcGRvYzpkZXNjPgo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlc3FsOnJvdy1yZXN1 bHRzLy9lc3FsOmlzLW51bGwiPgogIDx4c3A6ZXhwcj4oKDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1l PSJnZXQtcmVzdWx0c2V0Ii8+LmdldE9iamVjdCgiPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBjb2x1 bW4iLz4iKSA9PSBudWxsKSB8fCA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZ2V0LXJlc3VsdHNl dCIvPi53YXNOdWxsKCkpPC94c3A6ZXhwcj4KPC94c2w6dGVtcGxhdGU+Cgo8eHNwZG9jOmRlc2M+ cmV0dXJucyB0aGUgbWVzc2FnZSBvZiB0aGUgY3VycmVudCBleGNlcHRpb248L3hzcGRvYzpkZXNj Pgo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlc3FsOmVycm9yLXJlc3VsdHMvL2VzcWw6Z2V0LW1lc3Nh Z2UiPgogIDx4c3A6ZXhwcj5fZXNxbF9leGNlcHRpb24uZ2V0TWVzc2FnZSgpPC94c3A6ZXhwcj4K PC94c2w6dGVtcGxhdGU+Cgo8eHNwZG9jOmRlc2M+cmV0dXJucyB0aGUgY3VycmVudCBleGNlcHRp b24gYXMgYSBzdHJpbmc8L3hzcGRvYzpkZXNjPgo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlc3FsOmVy cm9yLXJlc3VsdHMvL2VzcWw6dG8tc3RyaW5nIj4KICA8eHNwOmV4cHI+X2VzcWxfZXhjZXB0aW9u LnRvU3RyaW5nKCk8L3hzcDpleHByPgo8L3hzbDp0ZW1wbGF0ZT4KCjx4c3Bkb2M6ZGVzYz5yZXR1 cm5zIHRoZSBzdGFja3RyYWNlIG9mIHRoZSBjdXJyZW50IGV4Y2VwdGlvbjwveHNwZG9jOmRlc2M+ Cjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVzcWw6ZXJyb3ItcmVzdWx0cy8vZXNxbDpnZXQtc3RhY2t0 cmFjZSI+CiAgPHhzcDpleHByPl9lc3FsX2V4Y2VwdGlvbl93cml0ZXIudG9TdHJpbmcoKTwveHNw OmV4cHI+CjwveHNsOnRlbXBsYXRlPgoKPHhzbDp0ZW1wbGF0ZSBuYW1lPSJnZXQtcmVzdWx0c2V0 Ij4KICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZ2V0LXF1ZXJ5Ii8+PHhzbDp0ZXh0Pi5nZXRS ZXN1bHRTZXQoKTwveHNsOnRleHQ+CjwveHNsOnRlbXBsYXRlPgoKPHhzbDp0ZW1wbGF0ZSBuYW1l PSJnZXQtcXVlcnkiPgogIDx4c2w6Y2hvb3NlPgogICAgPHhzbDp3aGVuIHRlc3Q9IkBhbmNlc3Rv ciI+CiAgICAgIDx4c2w6dGV4dD4oKEVzcWxRdWVyeSlfZXNxbF9xdWVyaWVzLmVsZW1lbnRBdChf ZXNxbF9xdWVyaWVzLnNpemUoKS08L3hzbDp0ZXh0PgogICAgICA8eHNsOnZhbHVlLW9mIHNlbGVj dD0iQGFuY2VzdG9yIi8+CiAgICAgIDx4c2w6dGV4dD4pKTwveHNsOnRleHQ+CiAgICA8L3hzbDp3 aGVuPgogICAgPHhzbDpvdGhlcndpc2U+CiAgICAgIDx4c2w6dGV4dD5fZXNxbF9xdWVyeTwveHNs OnRleHQ+CiAgICA8L3hzbDpvdGhlcndpc2U+CiAgPC94c2w6Y2hvb3NlPgo8L3hzbDp0ZW1wbGF0 ZT4KCjx4c3Bkb2M6ZGVzYz51c2VkIGludGVybmFsbHkgdG8gZGV0ZXJtaW5lIHdoaWNoIGNvbHVt biBpcyB0aGUgZ2l2ZW4gY29sdW1uLiBpZiBhIGNvbHVtbiBhdHRyaWJ1dGUgZXhpc3RzIGFuZCBp dHMgdmFsdWUgaXMgYSBudW1iZXIsIGl0IGlzIHRha2VuIHRvIGJlIHRoZSBjb2x1bW4ncyBwb3Np dGlvbi4gaWYgdGhlIHZhbHVlIGlzIG5vdCBhIG51bWJlciwgaXQgaXMgdGFrZW4gdG8gYmUgdGhl IGNvbHVtbidzIG5hbWUuIGlmIGEgY29sdW1uIGF0dHJpYnV0ZSBkb2VzIG5vdCBleGlzdCwgYW4g ZXNxbDpjb2x1bW4gZWxlbWVudCBpcyBhc3N1bWVkIHRvIGV4aXN0IGFuZCB0byByZW5kZXIgYXMg YSBzdHJpbmcgKGFmdGVyIGFsbCBvZiB0aGUgeHNwIGluc3RydWN0aW9ucyBoYXZlIGJlZW4gZXZh bHVhdGVkKSwgd2hpY2ggaXMgdGFrZW4gdG8gYmUgdGhlIGNvbHVtbidzIG5hbWUuPC94c3Bkb2M6 ZGVzYz4KPHhzbDp0ZW1wbGF0ZSBuYW1lPSJnZXQtY29sdW1uIj4KICA8eHNsOnZhcmlhYmxlIG5h bWU9ImNvbHVtbiI+CiAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImdldC1wYXJhbWV0ZXIi PgogICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5hbWUiPmNvbHVtbjwveHNsOndpdGgtcGFy YW0+CiAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icmVxdWlyZWQiPnRydWU8L3hzbDp3aXRo LXBhcmFtPgogICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CiAgPC94c2w6dmFyaWFibGU+CiAgPHhz bDpjaG9vc2U+CiAgICA8eHNsOndoZW4gdGVzdD0ic3RhcnRzLXdpdGgoJGNvbHVtbiwnJnF1b3Q7 JykiPgogICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJhdy1jb2x1bW4iPgogICAgICAgIDx4c2w6 dmFsdWUtb2Ygc2VsZWN0PSJzdWJzdHJpbmcoJGNvbHVtbiwyLHN0cmluZy1sZW5ndGgoJGNvbHVt biktMikiLz4KICAgICAgPC94c2w6dmFyaWFibGU+CiAgICAgIDx4c2w6Y2hvb3NlPgogICAgICAg IDx4c2w6d2hlbiB0ZXN0PSJub3Qoc3RyaW5nKG51bWJlcigkcmF3LWNvbHVtbikpPSdOYU4nKSI+ CiAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJhdy1jb2x1bW4iLz4KICAgICAgICA8 L3hzbDp3aGVuPgogICAgICAgIDx4c2w6b3RoZXJ3aXNlPgogICAgICAgICAgPHhzbDp2YWx1ZS1v ZiBzZWxlY3Q9IiRjb2x1bW4iLz4KICAgICAgICA8L3hzbDpvdGhlcndpc2U+CiAgICAgIDwveHNs OmNob29zZT4KICAgIDwveHNsOndoZW4+CiAgICA8eHNsOm90aGVyd2lzZT4KICAgICAgPHhzbDpj b3B5LW9mIHNlbGVjdD0iJGNvbHVtbiIvPgogICAgPC94c2w6b3RoZXJ3aXNlPgogIDwveHNsOmNo b29zZT4KPC94c2w6dGVtcGxhdGU+Cgo8eHNsOnRlbXBsYXRlIG5hbWU9ImdldC1zdHJpbmctZW5j b2RlZCI+CiAgPHhzbDpwYXJhbSBuYW1lPSJjb2x1bW4tc3BlYyIvPgogIDx4c2w6cGFyYW0gbmFt ZT0icmVzdWx0c2V0Ii8+CiAgPHhzbDp2YXJpYWJsZSBuYW1lPSJlbmNvZGluZyI+CiAgICA8eHNs OmNob29zZT4KICAgICAgPHhzbDp3aGVuIHRlc3Q9IkBlbmNvZGluZyI+Ijx4c2w6dmFsdWUtb2Yg c2VsZWN0PSJAZW5jb2RpbmciLz4iPC94c2w6d2hlbj4KICAgICAgPHhzbDp3aGVuIHRlc3Q9ImVz cWw6ZW5jb2RpbmciPgogICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJnZXQtbmVzdGVk LXN0cmluZyI+CiAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iY29udGVudCIgc2VsZWN0 PSJlc3FsOmVuY29kaW5nIi8+CiAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KICAgICAgPC94 c2w6d2hlbj4KICAgICAgPHhzbDpvdGhlcndpc2U+ZGVmYXVsdDwveHNsOm90aGVyd2lzZT4KICAg IDwveHNsOmNob29zZT4KICA8L3hzbDp2YXJpYWJsZT4KCTx4c2w6Y2hvb3NlPgoJCTx4c2w6d2hl biB0ZXN0PSIkZW5jb2RpbmcgPSAnZGVmYXVsdCciPgo8IS0tIFRCIG1vZGlmaWVkCi0tPgoJCQl0 aGlzLmdldFN0cmluZ09yQ2xvYig8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJlc3VsdHNldCIvPiwg PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRjb2x1bW4tc3BlYyIvPikKPCEtLSBUQiBlbmQKLS0+CgkJ PC94c2w6d2hlbj4KCQk8eHNsOm90aGVyd2lzZT4KICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9 IiRyZXN1bHRzZXQiLz4uZ2V0Qnl0ZXMoPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRjb2x1bW4tc3Bl YyIvPikKICAgICAgIT0gbnVsbCA/IEVzcWxIZWxwZXIuZ2V0U3RyaW5nRnJvbUJ5dGVBcnJheSg8 eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJlc3VsdHNldCIvPi5nZXRCeXRlcwogICAgICAgICg8eHNs OnZhbHVlLW9mIHNlbGVjdD0iJGNvbHVtbi1zcGVjIi8+KSwgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9 IiRlbmNvZGluZyIvPikKICAgICAgOiAiIgogICAgPC94c2w6b3RoZXJ3aXNlPgogIDwveHNsOmNo b29zZT4KPC94c2w6dGVtcGxhdGU+Cgo8IS0tCiAgQnJlYWsgb24gZXJyb3IuCiAgQHBhcmFtIG1l c3NhZ2UgZXhwbGFuYXRpb24gb2YgdGhlIGVycm9yCi0tPgo8eHNsOnRlbXBsYXRlIG5hbWU9ImVy cm9yIj4KICA8eHNsOnBhcmFtIG5hbWU9Im1lc3NhZ2UiLz4KICA8eHNsOm1lc3NhZ2UgdGVybWlu YXRlPSJ5ZXMiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkbWVzc2FnZSIvPjwveHNsOm1lc3NhZ2U+ CjwveHNsOnRlbXBsYXRlPgoKPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iQCp8bm9kZSgpIiBwcmlvcml0 eT0iLTEiPgogIDx4c2w6Y29weT4KICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iQCp8 bm9kZSgpIi8+CiAgPC94c2w6Y29weT4KPC94c2w6dGVtcGxhdGU+Cgo8L3hzbDpzdHlsZXNoZWV0 Pgo= --0__=41256B7C005D6A868f9e8a93df938690918c41256B7C005D6A86 Content-Type: text/plain; charset=us-ascii --------------------------------------------------------------------- To unsubscribe, e-mail: cocoon-dev-unsubscribe@xml.apache.org For additional commands, email: cocoon-dev-help@xml.apache.org --0__=41256B7C005D6A868f9e8a93df938690918c41256B7C005D6A86--